<?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>AceEditor</name>
	<version>0.2</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[PGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48Zm9ybSBhY3Rpb249Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3IiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY21kIiB2YWx1ZT0iX3MteGNsaWNrIiAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Imhvc3RlZF9idXR0b25faWQiIHZhbHVlPSJGTEgyQU44OVVQUEFHIiAvPjxpbnB1dCB0eXBlPSJpbWFnZSIgc3JjPSJodHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9lbl9HQi9pL2J0bi9idG5fZG9uYXRlX0xHLmdpZiIgYm9yZGVyPSIwIiBuYW1lPSJzdWJtaXQiIGFsdD0iUGF5UGFsIOKAlCBUaGUgc2FmZXIsIGVhc2llciB3YXkgdG8gcGF5IG9ubGluZS4iIHN0eWxlPSJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7IiAvPjxpbWcgYWx0PSIiIGJvcmRlcj0iMCIgc3JjPSJodHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9kZV9ERS9pL3Njci9waXhlbC5naWYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PC9mb3JtPjwvZGl2PjxkaXYgaWQ9InBhZ2VfdGFicyI+PGRpdiBpZD0iZ2VuZXJhbCI+R2VuZXJhbDwvZGl2PjxkaXYgaWQ9InNob3J0Y3V0cyI+S2V5Ym9hcmQgU2hvcnRjdXRzPC9kaXY+PGRpdiBpZD0iZnJvbnRlbmQiPkZyb250ZW5kPC9kaXY+PGRpdiBpZD0iYWJvdXQiPkFib3V0PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj48ZGl2IGlkPSJwYWdlX2NvbnRlbnQiPjxkaXYgaWQ9ImdlbmVyYWxfYyI+PGltZyBzdHlsZT0iZmxvYXQ6cmlnaHQ7bWFyZ2luOjAgMTBweCAxMHB4IDEwcHg7IGJvcmRlcjogNXB4IHNvbGlkICNmMGYwZjA7IiBzcmM9Imh0dHA6Ly91bmlxdTMuZHluZG5zLXNlcnZlci5jb20vZGVtb3MvY21zX3RydW5rL21vZHVsZXMvQWNlRWRpdG9yL2ltYWdlcy9lZGl0b3IuanBnIiBhbHQ9IkVkaXRvciIgd2lkdGg9IjMxNiIgaGVpZ2h0PSIyNTkiIC8+DQo8aDM+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvaDM+DQo8cD5BY2VFZGl0b3IgaXMgYSBTeW50YXhoaWdobGlnaHRlciBtb2R1bGUgdXNpbmcgPHN0cm9uZz5BY2U8L3N0cm9uZz4gYSBzdGFuZGFsb25lIGNvZGUgZWRpdG9yIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC48YnIgLz4gDQpHb2FsIG9mIEFjZSBjb2RlIGVkaXRvciBncm91cCBpcyB0byBjcmVhdGUgYSB3ZWIgYmFzZWQgY29kZSBlZGl0b3IgdGhhdCBtYXRjaGVzIGFuZCBleHRlbmRzIHRoZSBmZWF0dXJlcywgdXNhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBleGlzdGluZyBuYXRpdmUgZWRpdG9ycyBzdWNoIGFzIFRleHRNYXRlLCBWaW0gb3IgRWNsaXBzZS48YnIgLz4NCkl0IGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW4gYW55IHdlYiBwYWdlIGFuZCBKYXZhU2NyaXB0IGFwcGxpY2F0aW9uLjxiciAvPiANCkFjZSBpcyBkZXZlbG9wZWQgYXMgdGhlIHByaW1hcnkgZWRpdG9yIGZvciA8YSBocmVmPSJodHRwOi8vd3d3LmNsb3VkOWlkZS5jb20iPkNsb3VkOSBJREU8L2E+IGFuZCB0aGUgc3VjY2Vzc29yIG9mIHRoZSBNb3ppbGxhIFNreXdyaXRlciAoQmVzcGluKSBQcm9qZWN0LjwvcD4NCjxoMz5BY2UgaXMgaG9zdGVkIG9uIEdpdEh1YjwvaDM+DQo8cD5UaGUgQWNlIHNvdXJjZSBjb2RlIGlzIGhvc3RlZCBvbiBHaXRIdWIuIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNb3ppbGxhIHRyaS1saWNlbnNlIChNUEwvR1BML0xHUEwpLjxiciAvPg0KVGhpcyBpcyB0aGUgc2FtZSBsaWNlbnNlIHVzZWQgYnkgRmlyZWZveC4gVGhpcyBsaWNlbnNlIGlzIGZyaWVuZGx5IHRvIGFsbCBraW5kcyBvZiBwcm9qZWN0cywgd2hldGhlciBvcGVuIHNvdXJjZSBvciBub3QuPGJyIC8+DQogVGFrZSBjaGFyZ2Ugb2YgeW91ciBlZGl0b3IgYW5kIGFkZCB5b3VyIGZhdm9yaXRlIGxhbmd1YWdlIGhpZ2hsaWdodGluZyBhbmQga2V5YmluZGluZ3MhPC9wPg0KPGgzPlVzaW5nIEFjZUVkaXRvciBNb2R1bGU8L2gzPg0KPHA+VXNpbmcgQWNlRWRpdG9yIE1vZHVsZSBpcyBzaW1wbGUuPGJyIC8+DQpBZnRlciBBY2VFZGl0b3Igd2FzIGluc3RhbGxlZCBnbyB0byAiTXkgUHJlZmVyZW5jZXMgJnJhcXVvOyBVc2VyIFByZWZlcmVuY2VzIiBhbmQgY2hvb3NlIEFjZUVkaXRvciBhcyB5b3VyIFN5bnRheGhpZ2hsaWdodGVyIG9mIGNob2ljZSBmcm9tICJTZWxlY3Qgc3ludGF4IGhpZ2hsaWdodGVyIHRvIHVzZToiIERyb3Bkb3duLjxiciAvPg0KTWFrZSBzdXJlIHlvdSBoYXZlICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgUGVybXNpc3Npb24uPC9wPg0KPGgzPlNldHRpbmdzPC9oMz4NCjxwPllvdSBjYW4gY2hhbmdlIGRlZmF1bHQgU2V0dGluZ3MgYW5kIFRoZW1lcyBpbiAiRXh0ZW5zaW9ucyAmcmFxdW87IEFjZUVkaXRvciI8L3A+PGJyIHN0eWxlID0iY2xlYXI6Ym90aDsiIC8+PC9kaXY+PGRpdiBpZD0ic2hvcnRjdXRzX2MiPjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICA8aDM+RGVmYXVsdCBLZXlib2FyZCBTaG9ydGN1dHM8L2gzPg0KDQo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkRlZmF1bHQgS2V5Ym9hcmQgU2hvcnRjdXRzIj4NCjx0aGVhZD48dHI+DQo8dGg+UEMgKFdpbmRvd3MvTGludXgpPC90ZD4NCjx0aD5NYWM8L3RkPg0KPHRoPmFjdGlvbjwvdGQ+DQo8L3RyPjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVJldHVybjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtUmV0dXJuPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+ZnVsbHNjcmVlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cGVyZm9ybSBzYXZlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUw8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5jZW50ZXIgc2VsZWN0aW9uPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUFsdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1PcHRpb24tRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmNvcHkgbGluZXMgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGxjYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1BbHQtVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLU9wdGlvbi1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmNvcHkgbGluZXMgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtRjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmZpbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmZpbmQgbmV4dDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1LPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1HPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+ZmluZCBwcmV2aW91czwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+RG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkRvd24sQ3RybC1OPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gbGluZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlVwLEN0cmwtUDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIGxpbmUgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtRW5kLEN0cmwtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRW5kLENvbW1hbmQtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+TGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkxlZnQsQ3RybC1CPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1MPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1MPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGluZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LVJpZ2h0LEVuZDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtUmlnaHQsRW5kLEN0cmwtRTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtTGVmdCxIb21lPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1MZWZ0LEhvbWUsQ3RybC1BPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+UGFnZURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tUGFnZURvd24sQ3RybC1WPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gcGFnZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tUGFnZVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gcGFnZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+UmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5SaWdodCxDdHJsLUY8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1Ib21lLEN0cmwtVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUhvbWUsQ29tbWFuZC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHN0YXJ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUxlZnQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPlRhYjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlRhYjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmluZGVudDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPm1vdmUgbGluZXMgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+bW92ZSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+b3V0ZGVudDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+SW5zZXJ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+SW5zZXJ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+b3ZlcndyaXRlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnBhZ2Vkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5wYWdldXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtU2hpZnQtWixDdHJsLVk8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LVosQ29tbWFuZC1ZPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVkbzwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1EPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1EPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnJlbW92ZSB0byBsaW5lIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLUJhY2tzcGFjZTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnJlbW92ZSB0byBsaW5lc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkFsdC1CYWNrc3BhY2UsQ3RybC1BbHQtQmFja3NwYWNlPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LURlbGV0ZTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnJlbW92ZSB3b3JkIHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVI8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLU9wdGlvbi1GPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVwbGFjZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1SPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1PcHRpb24tRjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnJlcGxhY2UgYWxsPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUE8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUE8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgYWxsPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUhvbWU8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1Ib21lPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVBhZ2VEb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtUGFnZURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgcGFnZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgcGFnZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1FbmQsQWx0LVNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBsaW5lIHN0YXJ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LUhvbWUsQWx0LVNoaWZ0LVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3Qgd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtTzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNwbGl0IGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtNzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtNzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnRvZ2dsZSBjb21tZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij50cmFuc3Bvc2UgbGV0dGVyczwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1aPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1aPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+dW5kbzwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+PC9kaXY+PC9kaXY+PGRpdiBpZD0iZnJvbnRlbmRfYyI+PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij48cD5UaGlzIE1vZHVsZSBhbmQgQWNlIFNjcmlwdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgRnJvbnRlbmQgU3ludGF4aGlnaGxpZ2h0ZXIuPGJyIC8+DQpUbyBtYWtlIGl0IHdvcmsgeW91IGhhdmUgdG8gaW5jbHVkZSBqUXVlcnkgRnJhbWV3b3JrLCBmb3IgZXhhbXBsZSB1c2luZyBDTVNNUyB7Y21zX2pxdWVyeX0gdGFnIGFuZCBhcyB3ZWxsIGluY2x1ZGUge0FjZUVkaXRvcn0gaW4geW91ciBwYWdlIHR3aWNlLiBGaXJzdCBhZGQgdGhlIG1vZHVsZSB0YWcgaW4geW91ciAmbHQ7aGVhZCZndDsgc2VjdGlvbiBvZiBUZW1wbGF0ZSBvciBpbiAmcXVvdDtQYWdlIFNwZWNpZmljIE1ldGRhdGEmcXVvdDsgZmllbGQgb2YgeW91ciBDb250ZW50IHBhZ2UsIGxpa2Uge0FjZUVkaXRvciBhY3Rpb249J2hlYWQnfSBhbmQgYW5vdGhlciBjYWxsIHRvIHNwZWNpZnkgd2hpY2ggYXJlYSBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQsIGZvciBleGFtcGxlIHtBY2VFZGl0b3IgZGl2aWQ9J2Zvbyd9LCB3aGljaCB3b3VsZCB0YXJnZXQgYSBwYWdlIGVsZW1lbnQgd2l0aCBpZCA8ZW0+Zm9vPC9lbT4uPC9wPg0KPGgzPlNvIGhvdyBkbyB5b3UgdXNlIGl0PzwvaDM+DQo8cD5GaXJzdCBpbmNsdWRlIGpRdWVyeSBhbmQgTW9kdWxlIHRhZyBpbiB5b3VyIFBhZ2UgJmx0O2hlYWQmZ3Q7IGFyZWEsIGZvciBleGFtcGxlIGluICZxdW90O1BhZ2UgU3BlY2lmaWMgTWV0ZGF0YSZxdW90Ozo8L3A+DQoJPHByZT4NCgl7Y21zX2pxdWVyeX0NCgl7QWNlRWRpdG9yIGFjdGlvbj0naGVhZCd9DQoJPC9wcmU+DQo8cD5UaGlzIGluY2x1ZGVzIG5lZWRlZCBzY3JpcHRzIGZvciBBY2UgU3ludGF4aGlnaGxpZ2h0ZXIgdG8gd29yay48YnIgLz4NCkluIE1vZHVsZXMgQWRtaW4gaW50ZXJmYWNlIHlvdSBjYW4gc2VsZWN0IGRlZmF1bHQgc2V0dGluZ3MgZm9yIHlvdXIgJ2hlYWQnIGFjdGlvbiBvciB1c2UgcGFyYW1ldGVyIG1vZGVzPSdodG1sLGphdmFzY3JpcHQnIGFuZCB0aGVtZXM9J3RleHRtYXRlJyB3aGljaCB3b3VsZCBvdmVycmlkZSBzZWxlY3RlZCBQcmVmZXJlbmNlcy48L3A+DQo8cD5Ob3cgd2hlbiB5b3UgaGF2ZSBuZWVkZWQgc2NyaXB0cyBpbmNsdWRlZCwgb25lIG1vcmUgTW9kdWxlIHRhZyBjYWxsIGlzIG5lZWRlZCAoZm9yIGV4YW1wbGUgaW4geW91ciBDb250ZW50IEVkaXRvciBhcmVhKSB0byBzcGVjaWZ5IHdoaWNoIGFyZWEgb2YgeW91ciBQYWdlIHNob3VsZCBiZSBoaWdobGlnaHRlZC48L3A+DQoJPHByZT4NCgl7QWNlRWRpdG9yIGRpdmlkPSdzb21lLWlkJ30NCgk8L3ByZT4NCjxwPlRoaXMgdGFnIGluY2x1ZGVzIG5lZWRlZCBTY3JpcHQgYW5kIFN0eWxlIHRoYXQgaXMgdXNlZCB0byBIaWdobGlnaHQgc2VsZWN0ZWQgZWxlbWVudCB3aXRoIHNwZWNpZmllZCBpZC48YnIgLz4NCkFsbCB5b3UgbmVlZCB0aGVuIGlzIHdyaXRlIHlvdXIgQ29kZSB0aGF0IHlvdSB3YW50IHRvIEhpZ2hsaWdodCBhbmQgd3JhcCBpdCBpbnNpZGUgYW4gZWxlbWVuIGxpa2UgJmx0O2RpdiZndDsgd2l0aCBzcGVjaWZpZWQgaWQuPC9wPg0KPHByZT4NCiZsdDtwcmUgaWQ9JnF1b3Q7c29tZS1pZCZxdW90OyZndDsNCiZhbXA7bHQ7aHRtbCZhbXA7Z3Q7DQogwqAgwqAgJmFtcDtsdDtoZWFkJmFtcDtndDsNCiDCoCDCoCAmYW1wO2x0O3N0eWxlIHR5cGU9JnF1b3Q7dGV4dC9jc3MmcXVvdDsmYW1wO2d0Ow0KIMKgIMKgIMKgIMKgIC50ZXh0LWxheWVyIHsNCiDCoCDCoCDCoCDCoCDCoCDCoCBmb250LWZhbWlseTogTW9uYWNvLCAmcXVvdDtDb3VyaWVyIE5ldyZxdW90OywgbW9ub3NwYWNlOw0KIMKgIMKgIMKgIMKgIMKgIMKgIGZvbnQtc2l6ZTogMTJweDsNCiDCoCDCoCDCoCDCoCDCoCDCoCBjdXJzb3I6IHRleHQ7DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgICZhbXA7bHQ7L3N0eWxlJmFtcDtndDsNCiDCoCDCoCAmYW1wO2x0Oy9oZWFkJmFtcDtndDsNCiDCoCDCoCAmYW1wO2x0O2JvZHkmYW1wO2d0Ow0KIMKgIMKgIMKgIMKgICZhbXA7bHQ7aDEgc3R5bGU9JnF1b3Q7Y29sb3I6cmVkJnF1b3Q7JmFtcDtndDtKdWh1IEtpbm5lcnMmYW1wO2x0Oy9oMSZhbXA7Z3Q7DQogwqAgwqAgJmFtcDtsdDsvYm9keSZhbXA7Z3Q7ICZhbXA7bHQ7L2h0bWwmYW1wO2d0Ow0KJmx0Oy9wcmUmZ3Q7DQo8L3ByZT48L2Rpdj48L2Rpdj48ZGl2IGlkPSJ0ZW1wbGF0ZXNfYyI+PC9kaXY+PGRpdiBpZD0iYWJvdXRfYyI+PGgzPlN1cHBvcnQ8L2gzPg0KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4NCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEyLCBHb3JhbiBJbGljIDxhIGhyZWY9Im1haWx0bzp1bmlxdTNlQGdtYWlsLmNvbSI+Jmx0O3VuaXF1M2VAZ21haWwuY29tJmd0OzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5pY2gtbWFjaC1kYXMuYXQiIHJlbD0iZXh0ZXJuYWwiPnd3dy5pY2gtbWFjaC1kYXMuYXQ8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KCTxoMz5UZWFtPC9oMz4NCgk8dWw+DQoJCTxsaT5Hb3JhbiBJbGljICh1bmlxdTMpIGcuaWxpY0BpLWFydHMuZXUgPGJyIC8+d3d3LmljaC1tYWNoLWRhcy5hdDwvbGk+CQ0KCQk8bGk+Um9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwKSBjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnICA8YnIgLz53d3cuY2FsZ3V5MTAwMC5jb208L2xpPgkJDQoJCTxsaT5Kb25hdGhhbiBTY2htaWQgKEZvYWx5KikgaGlAam9uYXRoYW5zY2htaWQuZGUgPGJyIC8+d3d3LmpvbmF0aGFuc2NobWlkLmRlPC9saT4NCgk8L3VsPg0KPC9kaXY+PC9kaXY+DTxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGFjdGlvbj0iZGVmYXVsdCIgLSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgYWN0aW9uIG9mIE1vZHVsZSB0YWcuIFBvc3NpYmxlIHZhbHVlcyBhcmUgJ2RlZmF1bHQnIGFuZCAnaGVhZCcuIEJvdGggYXJlIG5lZWRlZCBmb3IgY29ycmVjdCBGcm9udGVuZCBTeW50YXhoaWdobGlnaHRpbmcgZnVuY3Rpb24uIDxiciAvPlBvc3NpYmxlIHZhbHVlcyBhcmU6DQo8dWw+DQoJPGxpPmhlYWQ8L2xpPg0KCTxsaT5kZWZhdWx0PC9saT4NCjwvdWw+PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBtb2Rlcz0iaHRtbCIgLSBpcyB1c2VkIHdpdGggPGNvZGU+e0FjZUVkaXRvciBhY3Rpb249J2hlYWQnfTwvY29kZT4uIFlvdSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBjb21tYSBzZXBhcmF0ZWQgJ21vZGVzJyB0aGF0IHlvdSB3aWxsIGJlIHVzaW5nIG9uIHlvdXIgd2Vic2l0ZS4gVGhpcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4geW91ciAmbHQ7aGVhZCZndDsgb2YgVGVtcGxhdGUgb3IgUGFnZSBzcGVjaWZpYyBNZXRhZGF0YS4gVGhpcyB3aWxsIG92ZXJyaWRlIHlvdSBQcmVmZXJlbmNlcyBzZWxlY3RlZCBpbiBNb2R1bGUgQWRtaW4gYXJlYS4gPGJyIC8+UG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCgk8bGk+amF2YXNjcmlwdDwvbGk+IA0KCTxsaT5wbGFpbjwvbGk+IA0KCTxsaT5zdmc8L2xpPiANCgk8bGk+aHRtbDwvbGk+DQoJPGxpPmNzczwvbGk+DQoJPGxpPnNjc3M8L2xpPg0KCTxsaT5jb2ZmZWU8L2xpPg0KCTxsaT5qc29uPC9saT4NCgk8bGk+cHl0aG9uPC9saT4NCgk8bGk+cnVieTwvbGk+DQoJPGxpPnBlcmw8L2xpPg0KCTxsaT5waHA8L2xpPg0KCTxsaT5qYXZhPC9saT4NCgk8bGk+Y3NoYXJwPC9saT4NCgk8bGk+Y19jcHA8L2xpPg0KCTxsaT5jbG9qdXJlPC9saT4NCgk8bGk+b2NhbWw8L2xpPg0KCTxsaT50ZXh0aWxlPC9saT4NCgk8bGk+Z3Jvb3Z5PC9saT4NCgk8bGk+c2NhbGE8L2xpPg0KPC91bD48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHRoZW1lcz0idGV4dG1hdGUiIC0gaXMgdXNlZCB3aXRoIDxjb2RlPntBY2VFZGl0b3IgYWN0aW9uPSdoZWFkJ308L2NvZGU+LiBZb3UgY2FuIGluY2x1ZGUgbXVsdGlwbGUgY29tbWEgc2VwYXJhdGVkICd0aGVtZXMnIHRoYXQgeW91IHdpbGwgYmUgdXNpbmcgb24geW91ciB3ZWJzaXRlLiBUaGlzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB5b3VyICZsdDtoZWFkJmd0OyBvZiBUZW1wbGF0ZSBvciBQYWdlIHNwZWNpZmljIE1ldGFkYXRhLiBUaGlzIHdpbGwgb3ZlcnJpZGUgeW91IFByZWZlcmVuY2VzIHNlbGVjdGVkIGluIE1vZHVsZSBBZG1pbiBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KCTxsaT5jbG91ZHM8L2xpPiANCgk8bGk+Y2xvdWRzX21pZG5pZ2h0PC9saT4gDQoJPGxpPmNvYmFsdDwvbGk+IA0KCTxsaT5jcmltc29uX2VkaXRvcjwvbGk+DQoJPGxpPmRhd248L2xpPg0KCTxsaT5lY2xpcHNlPC9saT4NCgk8bGk+aWRsZV9maW5nZXJzPC9saT4NCgk8bGk+a3JfdGhlbWU8L2xpPg0KCTxsaT5tZXJiaXZvcmU8L2xpPg0KCTxsaT5tZXJiaXZvcmVfc29mdDwvbGk+DQoJPGxpPm1vbm9faW5kdXN0cmlhbDwvbGk+DQoJPGxpPm1vbm9rYWk8L2xpPg0KCTxsaT5wYXN0ZWxfb25fZGFyazwvbGk+DQoJPGxpPnNvbGFyaXplZF9kYXJrPC9saT4NCgk8bGk+c29sYXJpemVkX2xpZ2h0PC9saT4NCgk8bGk+dGV4dG1hdGU8L2xpPg0KCTxsaT50d2lsaWdodDwvbGk+DQoJPGxpPnZpYnJhbnRfaW5rPC9saT4NCjwvdWw+PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBtb2RlPSJodG1sIiAtIGlzIHVzZWQgd2l0aGluIGEgcGFnZSB3aXRoIDxjb2RlPntBY2VFZGl0b3IgYWN0aW9uPSdkZWZhdWx0J308L2NvZGU+IG1vZHVsZSB0YWcuIFRoaXMgc3BlY2lmaWVzIFN5bnRheGhpZ2hsaWdodGVyIG1vZGUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4gPGJyIC8+UG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCgk8bGk+amF2YXNjcmlwdDwvbGk+IA0KCTxsaT5wbGFpbjwvbGk+IA0KCTxsaT5zdmc8L2xpPiANCgk8bGk+aHRtbDwvbGk+DQoJPGxpPmNzczwvbGk+DQoJPGxpPnNjc3M8L2xpPg0KCTxsaT5jb2ZmZWU8L2xpPg0KCTxsaT5qc29uPC9saT4NCgk8bGk+cHl0aG9uPC9saT4NCgk8bGk+cnVieTwvbGk+DQoJPGxpPnBlcmw8L2xpPg0KCTxsaT5waHA8L2xpPg0KCTxsaT5qYXZhPC9saT4NCgk8bGk+Y3NoYXJwPC9saT4NCgk8bGk+Y19jcHA8L2xpPg0KCTxsaT5jbG9qdXJlPC9saT4NCgk8bGk+b2NhbWw8L2xpPg0KCTxsaT50ZXh0aWxlPC9saT4NCgk8bGk+Z3Jvb3Z5PC9saT4NCgk8bGk+c2NhbGE8L2xpPg0KPC91bD48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHRoZW1lPSJ0ZXh0bWF0ZSIgLSBpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0nZGVmYXVsdCd9PC9jb2RlPiBtb2R1bGUgdGFnLiBUaGlzIHNwZWNpZmllcyBTeW50YXhoaWdobGlnaHRlciB0aGVtZSBmb3Igc3BlY2lmaWMgY29kZSBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KCTxsaT5jbG91ZHM8L2xpPiANCgk8bGk+Y2xvdWRzX21pZG5pZ2h0PC9saT4gDQoJPGxpPmNvYmFsdDwvbGk+IA0KCTxsaT5jcmltc29uX2VkaXRvcjwvbGk+DQoJPGxpPmRhd248L2xpPg0KCTxsaT5lY2xpcHNlPC9saT4NCgk8bGk+aWRsZV9maW5nZXJzPC9saT4NCgk8bGk+a3JfdGhlbWU8L2xpPg0KCTxsaT5tZXJiaXZvcmU8L2xpPg0KCTxsaT5tZXJiaXZvcmVfc29mdDwvbGk+DQoJPGxpPm1vbm9faW5kdXN0cmlhbDwvbGk+DQoJPGxpPm1vbm9rYWk8L2xpPg0KCTxsaT5wYXN0ZWxfb25fZGFyazwvbGk+DQoJPGxpPnNvbGFyaXplZF9kYXJrPC9saT4NCgk8bGk+c29sYXJpemVkX2xpZ2h0PC9saT4NCgk8bGk+dGV4dG1hdGU8L2xpPg0KCTxsaT50d2lsaWdodDwvbGk+DQoJPGxpPnZpYnJhbnRfaW5rPC9saT4NCjwvdWw+PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB3aWR0aD0iNDAwIiAtIHNwZWNpZmllcyB3aWR0aCBvZiBTeW50YXhoaWdobGlnaHRlciBhcmVhIGluIHBpeGVsLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gaGVpZ2h0PSI0MDAiIC0gc3BlY2lmaWVzIGhlaWdodCBvZiBTeW50YXhoaWdobGlnaHRlciBhcmVhIGluIHBpeGVsLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZGl2aWQ9ImVkaXRvciIgLSBpZCBvZiB0aGUgZWxlbWVudCBjb250YWluaW5nIHlvdXIgY29kZS4gVXNlIHVuaXF1ZSBpZCBmb3IgZWFjaCBjb2RlIGNodW5jay48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBHb3JhbiBJbGljICZsdDt1bmlxdTNlQGdtYWlsLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAwLjI8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz4NCjxoMz5WZXJzaW9uIDAuMTwvaDM+DQo8dWw+DQoJPGxpPkl0J3MgZnJlc2ghIE5vdGhpbmcgY2hhbmdlZCB5ZXQhPC9saT4NCgk8bGk+VXNpbmcgQWNlIFZlcnNpb24gMC4yLjA8L2xpPg0KPC91bD4NCjxoMz5WZXJzaW9uIDAuMjwvaDM+DQo8dWw+DQoJPGxpPkFkZGVkIENUUkwtUyBLZXliaW5kaW5nPC9saT4NCgk8bGk+QWRkZWQgRnVsbHNjcmVlbm1vZGU8L2xpPg0KCTxsaT5BZGRlZCBGcm9udGVuZCBIaWdobGlnaHRpbmc8L2xpPg0KCTxsaT5VcGRhdGVkIEFjZTwvbGk+DQo8L3VsPg0KPGgzPlJvYWRtYXA8L2gzPg0KPHVsPg0KCTxsaT48ZGVsPkFkZCBGcm9udGVuZCBTeW50YXhoaWdobGlnaHRpbmc8L2RlbD48L2xpPg0KCTxsaT48ZGVsPkFkZCBGdWxsc2NyZWVubW9kZTwvZGVsPjwvbGk+DQoJPGxpPjxkZWw+QWRkIEtleWJpbmRpbmcgKENUUkwrUyk8L2RlbD48L2xpPg0KCTxsaT5BZGQgRWRpdG9yIGJlaGF2aW9yIChWaW0sIEVNYWNzKTwvbGk+DQoJPGxpPk1heWJlIGFkZCBUb29sYmFyPC9saT4NCjwvdWw+PGJyIC8+]]></about>
	<description><![CDATA[AceEditor is a Syntaxhighlighter module using <strong>Ace</strong> a standalone code editor written in JavaScript.<br /><strong>Note:</strong> Internet Explorer is currently not supported!]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/ace/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/ace/ChangeLog.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MjAxMS4wOC4wMiwgVmVyc2lvbiAwLjIuMA0KDQoqIFNwbGl0IHZpZXcgKEp1bGlhbiBWaWVyZWNrKQ0KICAtIHNwbGl0IGVkaXRvciBhcmVhIGhvcml6b250YWxseSBvciB2ZXJ0aXZhbGx5IHRvIHNob3cgdHdvIGZpbGVzIGF0IHRoZSBzYW1lDQogICAgdGltZQ0KDQoqIENvZGUgRm9sZGluZyAoSnVsaWFuIFZpZXJlY2spDQogIC0gVW5zdHJ1Y3R1cmVkIGNvZGUgZm9sZGluZw0KICAtIFdpbGwgYmUgdGhlIGJhc2lzIGZvciBsYW5ndWFnZSBhd2FyZSBmb2xkaW5nDQoNCiogTW9kZSBiZWhhdmlvdXJzIChDaHJpcyBTcGVuY2VyKQ0KICAtIEFkZHMgbW9kZSBzcGVjaWZpYyBob29rcyB3aGljaCBhbGxvdyB0cmFuc2Zvcm1hdGlvbnMgb2YgZW50ZXJlZCB0ZXh0DQogIC0gQXV0b2Nsb3Npbmcgb2YgYnJhY2VzLCBwYXJhbnRoZXNpcyBhbmQgcXVvdGF0aW9uIG1hcmtzIGluIEMgc3R5bGUgbW9kZXMNCiAgLSBBdXRvY2xvc2luZyBvZiBhbmd1bGFyIGJyYWNrZXRzIGluIFhNTCBzdHlsZSBtb2Rlcw0KDQoqIE5ldyBsYW5ndWFnZSBtb2Rlcw0KICAtIENsb2p1cmUgKENhcmluIE1laWVyKQ0KICAtIEMjIChSb2IgQ29uZXJ5KQ0KICAtIEdyb292eSAoQmVuIFRpbGZvcmQpDQogIC0gU2NhbGEgKEJlbiBUaWxmb3JkKQ0KICAtIEpTT04NCiAgLSBPQ2FtbCAoU2VyZ2kgTWFuc2lsbGEpDQogIC0gUGVybCAoUGFuYWdpb3RpcyBBc3RpdGhhcykNCiAgLSBTQ1NTL1NBU1MgKEFuZHJlYXMgTWFkc2VuKQ0KICAtIFNWRw0KICAtIFRleHRpbGUgKEtlbGxleSB2YW4gRXZlcnQpDQogIC0gU0NBRCAoSmFjb2IgSGFuc3NvbikNCiAgDQoqIExpdmUgc3ludGF4IGNoZWNrcw0KICAtIExpbnQgZm9yIENzcyB1c2luZyBDU1MgTGludCA8aHR0cDovL2Nzc2xpbnQubmV0Lz4NCiAgLSBDb2ZmZWVTY3JpcHQNCg0KKiBOZXcgVGhlbWVzDQogIC0gQ3JpbXNvbiBFZGl0b3IgKGllYnVnZ3kpDQogIC0gTWVyYml2b3JlIChNaWNoYWVsIFNjaHdhcnR6KQ0KICAtIE1lcmJpdm9yZSBzb2Z0IChNaWNoYWVsIFNjaHdhcnR6KQ0KICAtIFNvbGFyaXplZCBkYXJrL2xpZ2h0IDxodHRwOi8vZXRoYW5zY2hvb25vdmVyLmNvbS9zb2xhcml6ZWQ+IChEYXZpZCBBbGFuDQogICAgSGplbGxlKQ0KICAtIFZpYnJhbnQgSW5rIChNaWNoYWVsIFNjaHdhcnR6KQ0KDQoqIFNtYWxsIEZlYXR1cmVzL0VuaGFuY2VtZW50cw0KICAtIExvdHMgb2YgcmVuZGVyIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgKEhhcnV0eXVuIEFtaXJqYW55YW4pDQogIC0gSW1wcm92ZWQgUnVieSBoaWdobGlnaHRpbmcgKENocmlzIFdhbnN0cmF0aCwgVHJlbnQgT2dyZW4pDQogIC0gSW1wcm92ZWQgUEhQIGhpZ2hsaWdodGluZyAoVGhvbWFzIEhydXNrYSkNCiAgLSBJbXByb3ZlZCBDU1MgaGlnaGxpZ2h0aW5nIChTZWFuIEtlbGxvZ2cpDQogIC0gQ2xpY2tzIHdoaWNoIGNhdXNlIHRoZSBlZGl0b3IgdG8gYmUgZm9jdXNlZCBkb24ndCByZXNldCB0aGUgc2VsZWN0aW9uDQogIC0gTWFrZSBwYWRkaW5nIHRleHQgbGF5ZXIgc3BlY2lmaWMgc28gdGhhdCBwcmludCBtYXJnaW4gYW5kIGFjdGl2ZSBsaW5lDQogICAgaGlnaGxpZ2h0IGFyZSBub3QgYWZmZWN0ZWQgKElyYWtsaSBHb3phbGlzaHZpbGkpDQogIC0gQWRkZWQgc2V0Rm9udFNpemUgbWV0aG9kDQogIC0gSW1wcm92ZWQgdmkga2V5YmluZGluZ3MgKFRyZW50IE9ncmVuKQ0KICAtIFdoZW4gdW5mb2N1c2VkIG1ha2UgY3Vyc29yIHRyYW5zcGFyZW50IGluc3RlYWQgb2YgcmVtb3ZpbmcgaXQgKEhhcnV0eXVuDQogICAgQW1pcmphbnlhbikNCiAgLSBTdXBwb3J0IGZvciBtYXRjaGluZyBncm91cHMgaW4gdG9rZW5pemVyIHdpdGggYXJyYXlzIG9mIHRva2VucyAoQ2hyaXMNCiAgICBTcGVuY2VyKQ0KDQoqIEJ1ZyBmaXhlcw0KICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgbmV3IE9TWCBzY3JvbGwgYmFycw0KICAtIFByb3Blcmx5IGhpZ2hsaWdodCBKYXZhU2NyaXB0IHJlZ2V4cCBsaXRlcmFscw0KICAtIFByb3BlciBoYW5kbGluZyBvZiB1bmljb2RlIGNoYXJhY3RlcnMgaW4gSmF2YVNjcmlwdCBpZGVudGlmaWVycw0KICAtIEZpeCByZW1vdmUgbGluZXMgY29tbWFuZCBvbiBsYXN0IGxpbmUgKEhhcnV0eXVuIEFtaXJqYW55YW4pDQogIC0gRml4IHNjcm9sbCB3aGVlbCBzbHVnZ2lzaG5lc3MgaW4gU2FmYXJpDQogIC0gTWFrZSBrZXlib2FyZCBpbmZyYXN0cnVjdHVyZSByb3V0ZSBrZXlzIGxpa2UgW11eJCB0aGUgcmlnaHQgd2F5IChKdWxpYW4NCiAgICBWaWVyZWNrKQ0KDQoyMDExLjAyLjE0LCBWZXJzaW9uIDAuMS42DQoNCiogRmxvYXRpbmcgQW5jaG9ycw0KICAtIEFuIEFuY2hvciBpcyBhIGZsb2F0aW5nIHBvaW50ZXIgaW4gdGhlIGRvY3VtZW50LiANCiAgLSBXaGVuZXZlciB0ZXh0IGlzIGluc2VydGVkIG9yIGRlbGV0ZWQgYmVmb3JlIHRoZSBjdXJzb3IsIHRoZSBwb3NpdGlvbiBvZg0KICAgIHRoZSBjdXJzb3IgaXMgdXBkYXRlZA0KICAtIFVzZXNkIGZvciB0aGUgY3Vyc29yIGFuZCBzZWxlY3Rpb24NCiAgLSBCYXNpcyBmb3IgYm9va21hcmtzLCBtdWx0aXBsZSBjdXJzb3JzIGFuZCBzbmlwcGV0cyBpbiB0aGUgZnV0dXJlDQoqIEV4dGVuc2l2ZSBzdXBwb3J0IGZvciBDb2NvYSBzdHlsZSBrZXliaW5kaW5ncyBvbiB0aGUgTWFjIDxodHRwczovL2dpdGh1Yi5jb20vYWpheG9yZy9hY2UvaXNzdWVzL2Nsb3NlZCNpc3N1ZS8xMTYvY29tbWVudC83Njc4MDM+DQoqIE5ldyBjb21tYW5kczoNCiAgLSBjZW50ZXIgc2VsZWN0aW9uIGluIHZpZXdwb3J0DQogIC0gcmVtb3ZlIHRvIGVuZC9zdGFydCBvZiBsaW5lDQogIC0gc3BsaXQgbGluZQ0KICAtIHRyYW5zcG9zZSBsZXR0ZXJzDQoqIFJlZmF0b3IgbWFya2VycyAgDQogIC0gQ3VzdG9tIGNvZGUgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIG1hcmtlcnMNCiAgLSBNYXJrZXJzIGNhbiBiZSBpbiBmcm9udCBvciBiZWhpbmQgdGhlIHRleHQNCiAgLSBNYXJrZXJzIGFyZSBub3cgc3RvcmVkIGluIHRoZSBzZXNzaW9uICh3YXMgaW4gdGhlIHJlbmRlcmVyKQ0KKiBMb3RzIG9mIElFOCBmaXhlcyBpbmNsdWRpbmcgY29weSwgY3V0IGFuZCBzZWxlY3Rpb25zDQoqIFVuaXQgdGVzdHMgY2FuIGFsc28gYmUgcnVuIGluIHRoZSBicm93c2VyDQogIDxodHRwczovL2dpdGh1Yi5jb20vYWpheG9yZy9hY2UvYmxvYi9tYXN0ZXIvbGliL2FjZS90ZXN0L3Rlc3RzLmh0bWw+DQoqIFNvZnQgd3JhcCBjYW4gYWRhcHQgdG8gdGhlIHdpZHRoIG9mIHRoZSBlZGl0b3IgKE1pa2UgUmF0Y2xpZmZlLCBKb2UgQ2hlbmcpDQoqIEFkZCBtaW5pbWFsIG5vZGUgc2VydmVyIHNlcnZlci5qcyB0byBydW4gdGhlIEFjZSBkZW1vIGluIENocm9tZQ0KKiBUaGUgdG9wIGxldmVsIGVkaXRvci5odG1sIGRlbW8gaGFzIGJlZW4gcmVuYW1lZCB0byBpbmRleC5odG1sDQoqIEJ1ZyBmaXhlcw0KICAtIEZpeGVkIGdvdG9MaW5lIHRvIGNvbnNpZGVyIHdyYXBwZWQgbGluZXMgd2hlbiBjYWxjdWxhdGluZyB3aGVyZSB0byBzY3JvbGwgdG8gKEphbWVzIEFsbGVuKQ0KICAtIEZpeGVkIGlzdWVzIHdoZW4gdGhlIGVkaXRvciB3YXMgc2Nyb2xsZWQgaW4gdGhlIHdlYiBwYWdlIChFcmljIEFsbGFtKQ0KICAtIEhpZ2hsaWdodGluZyBvZiBQeXRob24gc3RyaW5nIGxpdGVyYWxzDQogIC0gU3ludGF4IHJ1bGUgZm9yIFBIUCBjb21tZW50cw0KDQoyMDExLjAyLjA4LCBWZXJzaW9uIDAuMS41DQoNCiogQWRkIENvZmZlZXNjcmlwdCBNb2RlIChTYXRvc2hpIE11cmFrYW1pKQ0KKiBGaXggd29yZCB3cmFwIGJ1ZyAoSnVsaWFuIFZpZXJlY2spDQoqIEZpeCBwYWNrYWdlZCB2ZXJzaW9uIG9mIHRoZSBFY2xpcHNlIG1vZGUNCiogTG9hZGluZyBvZiB3b3JrZXJzIGlzIG1vcmUgcm9idXN0DQoqIEZpeCAiY2xpY2sgc2VsZWN0aW9uIg0KKiBBbGxvdyB0b2tpemluZyBlbXB0eSBsaW5lcyAoRGFuaWVsIEtyZWNoKQ0KKiBNYWtlIFBhZ2VVcC9Eb3duIGJlaGF2aW9yIG1vcmUgY29uc2lzdGVudCB3aXRoIG5hdGl2ZSBPUyAoSm9lIENoZW5nKQ0KDQoyMDExLjAyLjA0LCBWZXJzaW9uIDAuMS40DQoNCiogQWRkIEMvQysrIG1vZGUgY29udHJpYnV0ZWQgYnkgR2FzdMOzbiBLbGVpbWFuDQoqIEZpeCBleGNlcHRpb24gaW4ga2V5IGlucHV0DQoNCjIwMTEuMDIuMDQsIFZlcnNpb24gMC4xLjMNCg0KKiBMZXQgdGhlIHBhY2thZ2VkIHZlcnNpb24gcGxheSBuaWNlIHdpdGggcmVxdWlyZUpTDQoqIEFkZCBSdWJ5IG1vZGUgY29udHJpYnV0ZWQgYnkgU2hsb21vIFphbG1hbiBIZWlnaA0KKiBBZGQgSmF2YSBtb2RlIGNvbnRyaWJ1dGVkIGJ5IFRvbSBUYXNjaGUNCiogRml4IGFubm90YXRpb24gYnVnDQoqIENoYW5naW5nIGEgZG9jdW1lbnQgYWRkZWQgYSBuZXcgZW1wdHkgbGluZSBhdCB0aGUgZW5k]]></data>
	</file>
	<file>
	  <filename>/ace/editor.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCiAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPg0KICA8dGl0bGU+RWRpdG9yPC90aXRsZT4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4NCiAgICBib2R5IHsNCiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICB9DQogICAgDQogICAgI2VkaXRvciB7IA0KICAgICAgICBtYXJnaW46IDA7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgdG9wOiAwOw0KICAgICAgICBib3R0b206IDA7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIHJpZ2h0OiAwOw0KICAgIH0NCiAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KDQo8cHJlIGlkPSJlZGl0b3IiPmZ1bmN0aW9uIGZvbyhpdGVtcykgew0KICAgIHZhciBpOw0KICAgIGZvciAoaSA9IDA7IGkgJmx0OyBpdGVtcy5sZW5ndGg7IGkrKykgew0KICAgICAgICBhbGVydCgiQWNlIFJvY2tzICIgKyBpdGVtc1tpXSk7DQogICAgfQ0KfTwvcHJlPg0KICAgIA0KPHNjcmlwdCBzcmM9InNyYy9hY2Utbm9jb25mbGljdC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ic3JjL3RoZW1lLXR3aWxpZ2h0LW5vY29uZmxpY3QuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9InNyYy9tb2RlLWphdmFzY3JpcHQtbm9jb25mbGljdC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0Kd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgew0KICAgIHZhciBlZGl0b3IgPSBhY2UuZWRpdCgiZWRpdG9yIik7DQogICAgZWRpdG9yLnNldFRoZW1lKCJhY2UvdGhlbWUvdHdpbGlnaHQiKTsNCiAgICANCiAgICB2YXIgSmF2YVNjcmlwdE1vZGUgPSBhY2UucmVxdWlyZSgiYWNlL21vZGUvamF2YXNjcmlwdCIpLk1vZGU7DQogICAgZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKG5ldyBKYXZhU2NyaXB0TW9kZSgpKTsNCn07DQo8L3NjcmlwdD4NCg0KPC9ib2R5Pg0KPC9odG1sPg0K]]></data>
	</file>
	<file>
	  <filename>/ace/kitchen-sink.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIg0KICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiPg0KDQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+DQogICAgPHRpdGxlPkFjZSBLaXRjaGVuIFNpbms8L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImF1dGhvciIgY29udGVudD0iRmFiaWFuIEpha29icyI+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkZW1vL2tpdGNoZW4tc2luay9zdHlsZXMuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgY2hhcnNldD0idXRmLTgiPg0KICAgIDwhLS0gDQogICAgDQogICAgQWNlDQogICAgICB2ZXJzaW9uIDAuMi4wDQogICAgICBjb21taXQgIGNmNmY0ZDg4ZDMzNDUxNDJhODNkZTU1YmQ2ODZlOGYyZGE3NGUxY2UNCg0KICAgIA0KICAgIC0tPg0KPC9oZWFkPg0KPGJvZHk+DQogIDxpbWcgaWQ9ImxvZ28iIHNyYz0iZGVtby9raXRjaGVuLXNpbmsvbG9nby5wbmciPg0KICA8dGFibGUgaWQ9ImNvbnRyb2xzIj4NCiAgICA8dHI+DQogICAgICA8dGQ+DQogICAgICAgIDxsYWJlbCBmb3I9ImRvYyI+RG9jdW1lbnQ8L2xhYmVsPg0KICAgICAgPC90ZD48dGQ+DQogICAgICAgIDxzZWxlY3QgaWQ9ImRvYyIgc2l6ZT0iMSI+DQogICAgICAgIDwvc2VsZWN0Pg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCA+DQogICAgICAgIDxsYWJlbCBmb3I9Im1vZGUiPk1vZGU8L2xhYmVsPg0KICAgICAgPC90ZD48dGQ+DQogICAgICAgIDxzZWxlY3QgaWQ9Im1vZGUiIHNpemU9IjEiPg0KICAgICAgICA8L3NlbGVjdD4NCiAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQ+DQogICAgICAgIDxsYWJlbCBmb3I9InNwbGl0Ij5TcGxpdDwvbGFiZWw+DQogICAgICA8L3RkPjx0ZD4NCiAgICAgICAgPHNlbGVjdCBpZD0ic3BsaXQiIHNpemU9IjEiPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im5vbmUiPk5vbmU8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJiZWxvdyI+QmVsb3c8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJiZXNpZGUiPkJlc2lkZTwvb3B0aW9uPg0KICAgICAgICA8L3NlbGVjdD4NCiAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgPg0KICAgICAgICA8bGFiZWwgZm9yPSJ0aGVtZSI+VGhlbWU8L2xhYmVsPg0KICAgICAgPC90ZD48dGQ+DQogICAgICAgIDxzZWxlY3QgaWQ9InRoZW1lIiBzaXplPSIxIj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvY2hyb21lIj5DaHJvbWU8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvY2xvdWRzIj5DbG91ZHM8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvY2xvdWRzX21pZG5pZ2h0Ij5DbG91ZHMgTWlkbmlnaHQ8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvY29iYWx0Ij5Db2JhbHQ8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvY3JpbXNvbl9lZGl0b3IiPkNyaW1zb24gRWRpdG9yPC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWNlL3RoZW1lL2Rhd24iPkRhd248L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvZHJlYW13ZWF2ZXIiPkRyZWFtd2VhdmVyPC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWNlL3RoZW1lL2VjbGlwc2UiPkVjbGlwc2U8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvaWRsZV9maW5nZXJzIj5pZGxlRmluZ2Vyczwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFjZS90aGVtZS9rcl90aGVtZSI+a3JUaGVtZTwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFjZS90aGVtZS9tZXJiaXZvcmUiPk1lcmJpdm9yZTwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFjZS90aGVtZS9tZXJiaXZvcmVfc29mdCI+TWVyYml2b3JlIFNvZnQ8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvbW9ub19pbmR1c3RyaWFsIj5Nb25vIEluZHVzdHJpYWw8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvbW9ub2thaSI+TW9ub2thaTwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFjZS90aGVtZS9wYXN0ZWxfb25fZGFyayI+UGFzdGVsIG9uIGRhcms8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvc29sYXJpemVkX2RhcmsiPlNvbGFyaXplZCBEYXJrPC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWNlL3RoZW1lL3NvbGFyaXplZF9saWdodCI+U29sYXJpemVkIExpZ2h0PC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWNlL3RoZW1lL3RleHRtYXRlIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPlRleHRNYXRlPC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWNlL3RoZW1lL3R3aWxpZ2h0Ij5Ud2lsaWdodDwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFjZS90aGVtZS90b21vcnJvdyI+VG9tb3Jyb3c8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHQiPlRvbW9ycm93IE5pZ2h0PC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWNlL3RoZW1lL3RvbW9ycm93X25pZ2h0X2JsdWUiPlRvbW9ycm93IE5pZ2h0IEJsdWU8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHRfYnJpZ2h0Ij5Ub21vcnJvdyBOaWdodCBCcmlnaHQ8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXMiPlRvbW9ycm93IE5pZ2h0IDgwczwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFjZS90aGVtZS92aWJyYW50X2luayI+VmlicmFudCBJbms8L29wdGlvbj4NCiAgICAgICAgPC9zZWxlY3Q+DQogICAgICA8L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkPg0KICAgICAgICA8bGFiZWwgZm9yPSJmb250c2l6ZSI+Rm9udCBTaXplPC9sYWJlbD4NCiAgICAgIDwvdGQ+PHRkPg0KICAgICAgICA8c2VsZWN0IGlkPSJmb250c2l6ZSIgc2l6ZT0iMSI+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTBweCI+MTBweDwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjExcHgiPjExcHg8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMnB4IiBzZWxlY3RlZD0ic2VsZWN0ZWQiPjEycHg8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNHB4Ij4xNHB4PC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTZweCI+MTZweDwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIwcHgiPjIwcHg8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyNHB4Ij4yNHB4PC9vcHRpb24+DQogICAgICAgIDwvc2VsZWN0Pg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZD4NCiAgICAgICAgPGxhYmVsIGZvcj0iZm9sZGluZyI+Q29kZSBGb2xkaW5nPC9sYWJlbD4NCiAgICAgIDwvdGQ+PHRkPg0KICAgICAgICA8c2VsZWN0IGlkPSJmb2xkaW5nIiBzaXplPSIxIj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJtYW51YWwiPm1hbnVhbDwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im1hcmtiZWdpbiIgc2VsZWN0ZWQ9InNlbGVjdGVkIj5tYXJrIGJlZ2luPC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFya2JlZ2luZW5kIj5tYXJrIGJlZ2luIGFuZCBlbmQ8L29wdGlvbj4NCiAgICAgICAgPC9zZWxlY3Q+DQogICAgICA8L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkPg0KICAgICAgICA8bGFiZWwgZm9yPSJzZWxlY3Rfc3R5bGUiPkZ1bGwgTGluZSBTZWxlY3Rpb248L2xhYmVsPg0KICAgICAgPC90ZD48dGQ+DQogICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2VsZWN0X3N0eWxlIiBpZD0ic2VsZWN0X3N0eWxlIiBjaGVja2VkPg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZD4NCiAgICAgICAgPGxhYmVsIGZvcj0iaGlnaGxpZ2h0X2FjdGl2ZSI+SGlnaGxpZ2h0IEFjdGl2ZSBMaW5lPC9sYWJlbD4NCiAgICAgIDwvdGQ+PHRkPg0KICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImhpZ2hsaWdodF9hY3RpdmUiIGlkPSJoaWdobGlnaHRfYWN0aXZlIiBjaGVja2VkPg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCA+DQogICAgICAgIDxsYWJlbCBmb3I9InNob3dfaGlkZGVuIj5TaG93IEludmlzaWJsZXM8L2xhYmVsPg0KICAgICAgPC90ZD48dGQ+DQogICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2hvd19oaWRkZW4iIGlkPSJzaG93X2hpZGRlbiIgY2hlY2tlZD4NCiAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgPg0KICAgICAgICA8bGFiZWwgZm9yPSJzaG93X2hzY3JvbGwiPlBlcnNpc3RlbnQgSFNjcm9sbDwvbGFiZWw+DQogICAgICA8L3RkPjx0ZD4NCiAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzaG93X2hzY3JvbGwiIGlkPSJzaG93X2hzY3JvbGwiPg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCA+DQogICAgICAgIDxsYWJlbCBmb3I9ImtleWJpbmRpbmciPktleSBCaW5kaW5nPC9sYWJlbD4NCiAgICAgIDwvdGQ+PHRkPg0KICAgICAgICA8c2VsZWN0IGlkPSJrZXliaW5kaW5nIiBzaXplPSIxIj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY2UiPkFjZTwvb3B0aW9uPg0KICAgICAgICAgIDxvcHRpb24gdmFsdWU9InZpbSI+VmltPC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZW1hY3MiPkVtYWNzPC9vcHRpb24+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY3VzdG9tIj5DdXN0b208L29wdGlvbj4NCiAgICAgICAgPC9zZWxlY3Q+DQogICAgICA8L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkID4NCiAgICAgICAgPGxhYmVsIGZvcj0ic29mdF93cmFwIj5Tb2Z0IFdyYXA8L2xhYmVsPg0KICAgICAgPC90ZD48dGQ+DQogICAgICAgIDxzZWxlY3QgaWQ9InNvZnRfd3JhcCIgc2l6ZT0iMSI+DQogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ib2ZmIj5PZmY8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI0MCI+NDAgQ2hhcnM8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI4MCI+ODAgQ2hhcnM8L29wdGlvbj4NCiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJmcmVlIj5GcmVlPC9vcHRpb24+DQogICAgICAgIDwvc2VsZWN0Pg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCA+DQogICAgICAgIDxsYWJlbCBmb3I9InNob3dfZ3V0dGVyIj5TaG93IEd1dHRlcjwvbGFiZWw+DQogICAgICA8L3RkPjx0ZD4NCiAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ic2hvd19ndXR0ZXIiIGNoZWNrZWQ+DQogICAgICA8L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkID4NCiAgICAgICAgPGxhYmVsIGZvcj0ic2hvd19wcmludF9tYXJnaW4iPlNob3cgUHJpbnQgTWFyZ2luPC9sYWJlbD4NCiAgICAgIDwvdGQ+PHRkPg0KICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzaG93X3ByaW50X21hcmdpbiIgY2hlY2tlZD4NCiAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgPg0KICAgICAgICA8bGFiZWwgZm9yPSJzb2Z0X3RhYiI+VXNlIFNvZnQgVGFiPC9sYWJlbD4NCiAgICAgIDwvdGQ+PHRkPg0KICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzb2Z0X3RhYiIgY2hlY2tlZD4NCiAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgPg0KICAgICAgICA8bGFiZWwgZm9yPSJoaWdobGlnaHRfc2VsZWN0ZWRfd29yZCI+SGlnaGxpZ2h0IHNlbGVjdGVkIHdvcmQ8L2xhYmVsPg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZD4NCiAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaGlnaGxpZ2h0X3NlbGVjdGVkX3dvcmQiIGNoZWNrZWQ+DQogICAgICA8L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkID4NCiAgICAgICAgPGxhYmVsIGZvcj0iZW5hYmxlX2JlaGF2aW91cnMiPkVuYWJsZSBCZWhhdmlvdXJzPC9sYWJlbD4NCiAgICAgIDwvdGQ+DQogICAgICA8dGQ+DQogICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImVuYWJsZV9iZWhhdmlvdXJzIj4NCiAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8L3RhYmxlPg0KDQogICAgPGRpdiBpZD0iZWRpdG9yIj4NCiAgICA8L2Rpdj4NCg0KPCEtLSANCiAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgICAgdmFyIHJlcXVpcmUgPSB7DQogICAgICAgICAgYmFzZVVybDogd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgIi8vIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCIvIikuc2xpY2UoMCwgLTEpLmpvaW4oIi8iKSwNCiAgICAgICAgICBwYXRoczogew0KICAgICAgICAgICAgICBhY2U6ICJsaWIvYWNlIg0KICAgICAgICAgIH0NCiAgICAgIH07DQogIDwvc2NyaXB0Pg0KICA8c2NyaXB0IHNyYz0iZGVtby9raXRjaGVuLXNpbmsvcmVxdWlyZS5qcyIgZGF0YS1tYWluPSJkZW1vL2tpdGNoZW4tc2luay9kZW1vIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KDQogLS0+DQogIA0KDQogIDxzY3JpcHQgc3JjPSJkZW1vL2tpdGNoZW4tc2luay9raXRjaGVuLXNpbmstdW5jb21wcmVzc2VkLmpzIiBkYXRhLWFjZS1iYXNlPSJkZW1vL2tpdGNoZW4tc2luayIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+DQogICAgcmVxdWlyZSgia2l0Y2hlbi1zaW5rL2RlbW8iKTsNCiAgPC9zY3JpcHQ+DQo8IS0tDQoNCjwvYm9keT4NCjwvaHRtbD4NCg==]]></data>
	</file>
	<file>
	  <filename>/ace/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TGljZW5zZWQgdW5kZXIgdGhlIHRyaS1saWNlbnNlIE1QTC9MR1BML0dQTC4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBNT1pJTExBIFBVQkxJQyBMSUNFTlNFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4xDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLQ0KDQoxLiBEZWZpbml0aW9ucy4NCg0KICAgICAxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUNCiAgICAgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5Lg0KDQogICAgIDEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8NCiAgICAgdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuDQoNCiAgICAgMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbA0KICAgICBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zDQogICAgIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLg0KDQogICAgIDEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUNCiAgICAgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQ0KICAgICBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4NCg0KICAgICAxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQ0KICAgICBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYw0KICAgICB0cmFuc2ZlciBvZiBkYXRhLg0KDQogICAgIDEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQ0KICAgICBDb2RlLg0KDQogICAgIDEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZA0KICAgICBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0DQogICAgIEEuDQoNCiAgICAgMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3INCiAgICAgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuDQoNCiAgICAgMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4NCg0KICAgICAxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtDQogICAgIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvcg0KICAgICBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLg0KDQogICAgIDEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQ0KICAgICBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMNCiAgICAgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGENCiAgICAgTW9kaWZpY2F0aW9uIGlzOg0KICAgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUNCiAgICAgICAgICBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4NCg0KICAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yDQogICAgICAgICAgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4NCg0KICAgICAxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQ0KICAgICB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMNCiAgICAgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzDQogICAgIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4NCg0KICAgICAxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3INCiAgICAgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCAgbWV0aG9kLCBwcm9jZXNzLA0KICAgICBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuDQoNCiAgICAgMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3INCiAgICAgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cw0KICAgICBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wNCiAgICAgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZQ0KICAgICBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlcg0KICAgICB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlDQogICAgIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlDQogICAgIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUNCiAgICAgZm9yIG5vIGNoYXJnZS4NCg0KICAgICAxLjEyLiAiWW91IiAob3IgIllvdXIiKSAgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQ0KICAgICBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMNCiAgICAgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuDQogICAgIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMNCiAgICAgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZg0KICAgICB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsDQogICAgIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieQ0KICAgICBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQNCiAgICAgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoDQogICAgIGVudGl0eS4NCg0KMi4gU291cmNlIENvZGUgTGljZW5zZS4NCg0KICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4NCiAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLA0KICAgICBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5DQogICAgIGNsYWltczoNCiAgICAgICAgICAoYSkgIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yDQogICAgICAgICAgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLA0KICAgICAgICAgIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwNCiAgICAgICAgICBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yDQogICAgICAgICAgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQNCg0KICAgICAgICAgIChiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3INCiAgICAgICAgICBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwNCiAgICAgICAgICBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUNCiAgICAgICAgICBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4NCg0KICAgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlDQogICAgICAgICAgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzDQogICAgICAgICAgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLg0KDQogICAgICAgICAgKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMNCiAgICAgICAgICBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikNCiAgICAgICAgICBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkDQogICAgICAgICAgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZQ0KICAgICAgICAgIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4NCg0KICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50Lg0KICAgICBTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3INCiAgICAgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQ0KDQogICAgICAgICAgKGEpICB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcg0KICAgICAgICAgIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwNCiAgICAgICAgICBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zDQogICAgICAgICAgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4NCiAgICAgICAgICB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZQ0KICAgICAgICAgIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZA0KDQogICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvcg0KICAgICAgICAgIHNlbGxpbmcgb2YgIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZQ0KICAgICAgICAgIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucw0KICAgICAgICAgIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlDQogICAgICAgICAgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdA0KICAgICAgICAgIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZg0KICAgICAgICAgIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yDQogICAgICAgICAgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuDQoNCiAgICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlDQogICAgICAgICAgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mDQogICAgICAgICAgdGhlIENvdmVyZWQgQ29kZS4NCg0KICAgICAgICAgIChkKSAgICBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzDQogICAgICAgICAgZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUNCiAgICAgICAgICBDb250cmlidXRvciBWZXJzaW9uOyAyKSAgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsNCiAgICAgICAgICAzKSAgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mDQogICAgICAgICAgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUNCiAgICAgICAgICBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgIChleGNlcHQgYXMgcGFydCBvZiB0aGUNCiAgICAgICAgICBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zDQogICAgICAgICAgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkNCiAgICAgICAgICB0aGF0IENvbnRyaWJ1dG9yLg0KDQozLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuDQoNCiAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLg0KICAgICBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQ0KICAgICBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQogICAgIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlDQogICAgIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uDQogICAgIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYQ0KICAgICBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQ0KICAgICBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQ0KICAgICB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMNCiAgICAgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlDQogICAgIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbg0KICAgICBTZWN0aW9uIDMuNS4NCg0KICAgICAzLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4NCiAgICAgQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUNCiAgICAgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlDQogICAgIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkDQogICAgIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbg0KICAgICBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMNCiAgICAgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKQ0KICAgICBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeA0KICAgICAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24NCiAgICAgaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcg0KICAgICBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlDQogICAgIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuDQoNCiAgICAgMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLg0KICAgICBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQ0KICAgICBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQNCiAgICAgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdA0KICAgICB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwNCiAgICAgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUNCiAgICAgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuDQogICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQ0KICAgICBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuDQoNCiAgICAgMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycw0KICAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuDQogICAgICAgICAgSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MNCiAgICAgICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMNCiAgICAgICAgICBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwNCiAgICAgICAgICBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUNCiAgICAgICAgICBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlDQogICAgICAgICAgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwNCiAgICAgICAgICBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlcg0KICAgICAgICAgIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLA0KICAgICAgICAgIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzDQogICAgICAgICAgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMNCiAgICAgICAgICAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQ0KICAgICAgICAgIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkDQogICAgICAgICAgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuDQoNCiAgICAgICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy4NCiAgICAgICAgICBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZw0KICAgICAgICAgIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2gNCiAgICAgICAgICBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0DQogICAgICAgICAgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuDQoNCiAgICAgICAgICAgICAgIChjKSAgICBSZXByZXNlbnRhdGlvbnMuDQogICAgICAgICAgQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvDQogICAgICAgICAgU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3Incw0KICAgICAgICAgIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yDQogICAgICAgICAgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkNCiAgICAgICAgICB0aGlzIExpY2Vuc2UuDQoNCiAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLg0KICAgICBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UNCiAgICAgQ29kZS4gIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZQ0KICAgICBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhDQogICAgIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5DQogICAgIHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuICBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykNCiAgICAgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4NCiAgICAgRXhoaWJpdCBBLiAgWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uDQogICAgIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXANCiAgICAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8NCiAgICAgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkNCiAgICAgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdQ0KICAgICBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsDQogICAgIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuDQogICAgIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMNCiAgICAgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbA0KICAgICBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQ0KICAgICBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LA0KICAgICBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4NCg0KICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLg0KICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQ0KICAgICByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLA0KICAgICBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mDQogICAgIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsDQogICAgIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQ0KICAgICBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQNCiAgICAgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcg0KICAgICBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlDQogICAgIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZA0KICAgICBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkNCiAgICAgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbg0KICAgICBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlDQogICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncw0KICAgICByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzDQogICAgIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQNCiAgICAgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyDQogICAgIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsDQogICAgIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZQ0KICAgICBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkNCiAgICAgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gNCiAgICAgdGVybXMgWW91IG9mZmVyLg0KDQogICAgIDMuNy4gTGFyZ2VyIFdvcmtzLg0KICAgICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlDQogICAgIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXINCiAgICAgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZQ0KICAgICByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuDQoNCjQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4NCg0KICAgICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzDQogICAgIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvDQogICAgIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aA0KICAgICB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKQ0KICAgICBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uDQogICAgIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0DQogICAgIGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlDQogICAgIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlDQogICAgIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bw0KICAgICB1bmRlcnN0YW5kIGl0Lg0KDQo1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuDQoNCiAgICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzDQogICAgIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4NCg0KNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuDQoNCiAgICAgNi4xLiBOZXcgVmVyc2lvbnMuDQogICAgIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uICgiTmV0c2NhcGUiKSBtYXkgcHVibGlzaCByZXZpc2VkDQogICAgIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbg0KICAgICB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuDQoNCiAgICAgNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLg0KICAgICBPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlDQogICAgIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdA0KICAgICB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMNCiAgICAgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZQ0KICAgICBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvDQogICAgIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4NCg0KICAgICA2LjMuIERlcml2YXRpdmUgV29ya3MuDQogICAgIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkNCiAgICAgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZQ0KICAgICBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0DQogICAgIHRoZSBwaHJhc2VzICJNb3ppbGxhIiwgIk1PWklMTEFQTCIsICJNT1pQTCIsICJOZXRzY2FwZSIsDQogICAgICJNUEwiLCAiTlBMIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyDQogICAgIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpDQogICAgIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UNCiAgICAgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kDQogICAgIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbA0KICAgICBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4NCiAgICAgRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mDQogICAgIHRoaXMgTGljZW5zZS4pDQoNCjcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuDQoNCiAgICAgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KICAgICBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywNCiAgICAgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GDQogICAgIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4NCiAgICAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFDQogICAgIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsDQogICAgIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUNCiAgICAgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUg0KICAgICBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRg0KICAgICBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuDQoNCjguIFRFUk1JTkFUSU9OLg0KDQogICAgIDguMS4gIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQ0KICAgICBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlDQogICAgIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbA0KICAgICBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsDQogICAgIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXINCiAgICAgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UNCiAgICAgc2hhbGwgc3Vydml2ZS4NCg0KICAgICA4LjIuICBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50DQogICAgIGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXINCiAgICAgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbQ0KICAgICBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSAgYWxsZWdpbmcgdGhhdDoNCg0KICAgICAoYSkgIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkNCiAgICAgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaA0KICAgICBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlDQogICAgIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksDQogICAgIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkNCiAgICAgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZQ0KICAgICByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gNCiAgICAgUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0bw0KICAgICB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuICBJZiB3aXRoaW4gNjAgZGF5cw0KICAgICBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QNCiAgICAgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbQ0KICAgICBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyDQogICAgIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mDQogICAgIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuDQoNCiAgICAgKGIpICBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzDQogICAgIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4NCiAgICAgYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKQ0KICAgICBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwNCiAgICAgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdA0KICAgICBQYXJ0aWNpcGFudC4NCg0KICAgICA4LjMuICBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50DQogICAgIGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3INCiAgICAgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzDQogICAgIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50DQogICAgIGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcw0KICAgICBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbg0KICAgICBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcg0KICAgICBsaWNlbnNlLg0KDQogICAgIDguNC4gIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLA0KICAgICBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpDQogICAgIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXINCiAgICAgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4NCg0KOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuDQoNCiAgICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQNCiAgICAgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTA0KICAgICBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwNCiAgICAgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUg0KICAgICBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkNCiAgICAgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLA0KICAgICBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUg0KICAgICBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVODQogICAgIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRg0KICAgICBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZDQogICAgIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcNCiAgICAgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUNCiAgICAgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPDQogICAgIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLg0KDQoxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4NCg0KICAgICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluDQogICAgIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlcg0KICAgICBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoDQogICAgIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDgNCiAgICAgQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLA0KICAgICBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UNCiAgICAgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uDQoNCjExLiBNSVNDRUxMQU5FT1VTLg0KDQogICAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0DQogICAgIG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUNCiAgICAgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50DQogICAgIG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkNCiAgICAgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmDQogICAgIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4NCiAgICAgV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsDQogICAgIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkDQogICAgIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUNCiAgICAgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4NCiAgICAgRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksDQogICAgIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZw0KICAgICB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQNCiAgICAgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbg0KICAgICBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLg0KICAgICBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdA0KICAgICBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcw0KICAgICBMaWNlbnNlLg0KDQoxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4NCg0KICAgICBBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzDQogICAgIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwNCiAgICAgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8NCiAgICAgd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoDQogICAgIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3INCiAgICAgc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuDQoNCjEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLg0KDQogICAgIEluaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcw0KICAgICAiTXVsdGlwbGUtTGljZW5zZWQiLiAgIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsDQogICAgIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXINCiAgICAgWW91ciBjaG9pY2Ugb2YgdGhlIE5QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkDQogICAgIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLg0KDQpFWEhJQklUIEEgLU1vemlsbGEgUHVibGljIExpY2Vuc2UuDQoNCiAgICAgYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlDQogICAgIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4NCiAgICAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAgICAgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvDQoNCiAgICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIg0KICAgICBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQ0KICAgICBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMNCiAgICAgdW5kZXIgdGhlIExpY2Vuc2UuDQoNCiAgICAgVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uDQoNCiAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4NCiAgICAgUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX19fX19fX19fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKEMpIF9fX19fXw0KICAgICBfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCg0KICAgICBDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uDQoNCiAgICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMNCiAgICAgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUNCiAgICAgcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UNCiAgICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5DQogICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlDQogICAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQ0KICAgICBkZWxldGluZyAgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZA0KICAgICBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiAgSWYgeW91IGRvIG5vdCBkZWxldGUNCiAgICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQ0KICAgICB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgW19fX10gTGljZW5zZS4iDQoNCiAgICAgW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZg0KICAgICB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQNCiAgICAgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZQ0KICAgICBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQ0KDQoNCg0KICAgICAgICAgICAgICAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQ0KICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNw==]]></data>
	</file>
	<file>
	  <filename>/ace/Readme.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QWNlIChBamF4Lm9yZyBDbG91ZDkgRWRpdG9yKQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpBY2UgaXMgYSBzdGFuZGFsb25lIGNvZGUgZWRpdG9yIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC4gT3VyIGdvYWwgaXMgdG8gY3JlYXRlIGEgYnJvd3NlciBiYXNlZCBlZGl0b3IgdGhhdCBtYXRjaGVzIGFuZCBleHRlbmRzIHRoZSBmZWF0dXJlcywgdXNhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBleGlzdGluZyBuYXRpdmUgZWRpdG9ycyBzdWNoIGFzIFRleHRNYXRlLCBWaW0gb3IgRWNsaXBzZS4gSXQgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbiBhbnkgd2ViIHBhZ2Ugb3IgSmF2YVNjcmlwdCBhcHBsaWNhdGlvbi4gQWNlIGlzIGRldmVsb3BlZCBhcyB0aGUgcHJpbWFyeSBlZGl0b3IgZm9yIFtDbG91ZDkgSURFXShodHRwOi8vd3d3LmNsb3VkOWlkZS5jb20vKSBhbmQgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgTW96aWxsYSBTa3l3cml0ZXIgKEJlc3BpbikgUHJvamVjdC4NCg0KRmVhdHVyZXMNCi0tLS0tLS0tDQoNCiogU3ludGF4IGhpZ2hsaWdodGluZw0KKiBBdXRvbWF0aWMgaW5kZW50IGFuZCBvdXRkZW50DQoqIEFuIG9wdGlvbmFsIGNvbW1hbmQgbGluZQ0KKiBIYW5kbGVzIGh1Z2UgZG9jdW1lbnRzICgxMDAsMDAwIGxpbmVzIGFuZCBtb3JlIGFyZSBubyBwcm9ibGVtKQ0KKiBGdWxseSBjdXN0b21pemFibGUga2V5IGJpbmRpbmdzIGluY2x1ZGluZyBWSSBhbmQgRW1hY3MgbW9kZXMNCiogVGhlbWVzIChUZXh0TWF0ZSB0aGVtZXMgY2FuIGJlIGltcG9ydGVkKQ0KKiBTZWFyY2ggYW5kIHJlcGxhY2Ugd2l0aCByZWd1bGFyIGV4cHJlc3Npb25zDQoqIEhpZ2hsaWdodCBtYXRjaGluZyBwYXJlbnRoZXNlcw0KKiBUb2dnbGUgYmV0d2VlbiBzb2Z0IHRhYnMgYW5kIHJlYWwgdGFicw0KKiBEaXNwbGF5cyBoaWRkZW4gY2hhcmFjdGVycw0KKiBEcmFnIGFuZCBkcm9wIHRleHQgdXNpbmcgdGhlIG1vdXNlDQoqIExpbmUgd3JhcHBpbmcNCiogVW5zdHJ1Y3R1cmVkIC8gdXNlciBjb2RlIGZvbGRpbmcNCiogTGl2ZSBzeW50YXggY2hlY2tlciAoY3VycmVudGx5IEphdmFTY3JpcHQvQ29mZmVlU2NyaXB0KQ0KDQpUYWtlIEFjZSBmb3IgYSBzcGluIQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KQ2hlY2sgb3V0IHRoZSBBY2UgbGl2ZSBbZGVtb10oaHR0cDovL2FqYXhvcmcuZ2l0aHViLmNvbS9hY2UvKSBvciBnZXQgYSBbQ2xvdWQ5IElERSBhY2NvdW50XShodHRwOi8vcnVuLmNsb3VkOWlkZS5jb20pIHRvIGV4cGVyaWVuY2UgQWNlIHdoaWxlIGVkaXRpbmcgb25lIG9mIHlvdXIgb3duIEdpdEh1YiBwcm9qZWN0cy4NCg0KSWYgeW91IHdhbnQsIHlvdSBjYW4gdXNlIEFjZSBhcyBhIHRleHRhcmVhIHJlcGxhY2VtZW50IHRoYW5rcyB0byB0aGUgW0FjZSBCb29rbWFya2xldF0oaHR0cDovL2FqYXhvcmcuZ2l0aHViLmNvbS9hY2UvYnVpbGQvdGV4dGFyZWEvZWRpdG9yLmh0bWwpLg0KDQpIaXN0b3J5DQotLS0tLS0tDQoNClByZXZpb3VzbHkga25vd24gYXMg4oCcQmVzcGlu4oCdIGFuZCDigJxTa3l3cml0ZXLigJ0gaXTigJlzIG5vdyBrbm93biBhcyBBY2UgKEFqYXgub3JnIENsb3VkOSBFZGl0b3IpISBCZXNwaW4gYW5kIEFjZSBzdGFydGVkIGFzIHR3byBpbmRlcGVuZGVudCBwcm9qZWN0cywgYm90aCBhaW1pbmcgdG8gYnVpbGQgYSBuby1jb21wcm9taXNlIGNvZGUgZWRpdG9yIGNvbXBvbmVudCBmb3IgdGhlIHdlYi4gQmVzcGluIHN0YXJ0ZWQgYXMgcGFydCBvZiBNb3ppbGxhIExhYnMgYW5kIHdhcyBiYXNlZCBvbiB0aGUgY2FudmFzIHRhZywgd2hpbGUgQWNlIGlzIHRoZSBFZGl0b3IgY29tcG9uZW50IG9mIHRoZSBDbG91ZDkgSURFIGFuZCBpcyB1c2luZyB0aGUgRE9NIGZvciByZW5kZXJpbmcuIEFmdGVyIHRoZSByZWxlYXNlIG9mIEFjZSBhdCBKU0NvbmYuZXUgMjAxMCBpbiBCZXJsaW4gdGhlIFNreXdyaXRlciB0ZWFtIGRlY2lkZWQgdG8gbWVyZ2UgQWNlIHdpdGggYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgU2t5d3JpdGVyJ3MgcGx1Z2luIHN5c3RlbSBhbmQgc29tZSBvZiBTa3l3cml0ZXIncyBleHRlbnNpYmlsaXR5IHBvaW50cy4gQWxsIHRoZXNlIGNoYW5nZXMgaGF2ZSBiZWVuIG1lcmdlZCBiYWNrIHRvIEFjZS4gQm90aCBBamF4Lm9yZyBhbmQgTW96aWxsYSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBhbmQgbWFpbnRhaW5pbmcgQWNlLg0KDQpHZXR0aW5nIHRoZSBjb2RlDQotLS0tLS0tLS0tLS0tLS0tDQoNCkFjZSBpcyBhIGNvbW11bml0eSBwcm9qZWN0LiBXZSBhY3RpdmVseSBlbmNvdXJhZ2UgYW5kIHN1cHBvcnQgY29udHJpYnV0aW9ucy4gVGhlIEFjZSBzb3VyY2UgY29kZSBpcyBob3N0ZWQgb24gR2l0SHViLiBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTW96aWxsYSB0cmktbGljZW5zZSAoTVBML0dQTC9MR1BMKSwgdGhlIHNhbWUgbGljZW5zZSB1c2VkIGJ5IEZpcmVmb3guIFRoaXMgbGljZW5zZSBpcyBmcmllbmRseSB0byBhbGwga2luZHMgb2YgcHJvamVjdHMsIHdoZXRoZXIgb3BlbiBzb3VyY2Ugb3Igbm90LiBUYWtlIGNoYXJnZSBvZiB5b3VyIGVkaXRvciBhbmQgYWRkIHlvdXIgZmF2b3JpdGUgbGFuZ3VhZ2UgaGlnaGxpZ2h0aW5nIGFuZCBrZXliaW5kaW5ncyENCg0KYGBgYmFzaA0KICAgIGdpdCBjbG9uZSBnaXQ6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlLmdpdA0KICAgIGNkIGFjZQ0KICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQ0KYGBgDQoNCkVtYmVkZGluZyBBY2UNCi0tLS0tLS0tLS0tLS0NCg0KQWNlIGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW50byBhbnkgZXhpc3Rpbmcgd2ViIHBhZ2UuIFRoZSBBY2UgZ2l0IHJlcG9zaXRvcnkgc2hpcHMgd2l0aCBhIHByZS1wYWNrYWdlZCB2ZXJzaW9uIG9mIEFjZSBpbnNpZGUgb2YgdGhlIGBidWlsZGAgZGlyZWN0b3J5LiBUaGUgc2FtZSBwYWNrYWdlZCBmaWxlcyBhcmUgYWxzbyBhdmFpbGFibGUgYXMgYSBzZXBhcmF0ZSBbZG93bmxvYWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9hamF4b3JnL2FjZS9kb3dubG9hZHMpLiBTaW1wbHkgY29weSB0aGUgY29udGVudHMgb2YgdGhlIGBzcmNgIHN1YmRpcmVjdG9yeSBzb21ld2hlcmUgaW50byB5b3VyIHByb2plY3QgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBpbmNsdWRlZCBkZW1vcyBvZiBob3cgdG8gdXNlIEFjZS4NCg0KVGhlIGVhc2llc3QgdmVyc2lvbiBpcyBzaW1wbHk6DQoNCmBgYGh0bWwNCiAgICA8ZGl2IGlkPSJlZGl0b3IiPnNvbWUgdGV4dDwvZGl2Pg0KICAgIDxzY3JpcHQgc3JjPSJzcmMvYWNlLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4NCiAgICA8c2NyaXB0Pg0KICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KCJlZGl0b3IiKTsNCiAgICB9Ow0KICAgIDwvc2NyaXB0Pg0KYGBgDQoNCldpdGggImVkaXRvciIgYmVpbmcgdGhlIGlkIG9mIHRoZSBET00gZWxlbWVudCwgd2hpY2ggc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBhbiBlZGl0b3IuIE5vdGUgdGhhdCB0aGlzIGVsZW1lbnQgbXVzdCBiZSBleHBsaWNpdGx5IHNpemVkIGFuZCBwb3NpdGlvbmVkIGBhYnNvbHV0ZWAgb3IgYHJlbGF0aXZlYCBmb3IgQWNlIHRvIHdvcmsuIGUuZy4NCg0KYGBgY3NzDQogICAgI2VkaXRvciB7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgd2lkdGg6IDUwMHB4Ow0KICAgICAgICBoZWlnaHQ6IDQwMHB4Ow0KICAgIH0NCmBgYA0KDQpUbyBjaGFuZ2UgdGhlIHRoZW1lIHNpbXBseSBpbmNsdWRlIHRoZSBUaGVtZSdzIEphdmFTY3JpcHQgZmlsZQ0KDQpgYGBodG1sDQogICAgPHNjcmlwdCBzcmM9InNyYy90aGVtZS10d2lsaWdodC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+DQpgYGANCg0KYW5kIGNvbmZpZ3VyZSB0aGUgZWRpdG9yIHRvIHVzZSB0aGUgdGhlbWU6DQoNCmBgYGphdmFzY3JpcHQNCiAgICBlZGl0b3Iuc2V0VGhlbWUoImFjZS90aGVtZS90d2lsaWdodCIpOw0KYGBgDQoNCkJ5IGRlZmF1bHQgdGhlIGVkaXRvciBvbmx5IHN1cHBvcnRzIHBsYWluIHRleHQgbW9kZTsgbWFueSBvdGhlciBsYW5ndWFnZXMgYXJlIGF2YWlsYWJsZSBhcyBzZXBhcmF0ZSBtb2R1bGVzLiBBZnRlciBpbmNsdWRpbmcgdGhlIG1vZGUncyBKYXZhU2NyaXB0IGZpbGU6DQoNCmBgYGh0bWwNCiAgICA8c2NyaXB0IHNyYz0ic3JjL21vZGUtamF2YXNjcmlwdC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+DQpgYGANCg0KVGhlbiB0aGUgbW9kZSBjYW4gYmUgdXNlZCBsaWtlIHRoaXM6DQoNCmBgYGphdmFzY3JpcHQNCiAgICB2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCJhY2UvbW9kZS9qYXZhc2NyaXB0IikuTW9kZTsNCiAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUobmV3IEphdmFTY3JpcHRNb2RlKCkpOw0KYGBgDQoNCkRvY3VtZW50YXRpb24NCi0tLS0tLS0tLS0tLS0NCg0KWW91IGZpbmQgYSBsb3QgbW9yZSBzYW1wbGUgY29kZSBpbiB0aGUgW2RlbW8gYXBwXShodHRwczovL2dpdGh1Yi5jb20vYWpheG9yZy9hY2UvYmxvYi9tYXN0ZXIvZGVtby9kZW1vLmpzKS4NCg0KVGhlcmUgaXMgYWxzbyBzb21lIGRvY3VtZW50YXRpb24gb24gdGhlIFt3aWtpIHBhZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9hamF4b3JnL2FjZS93aWtpKS4NCg0KSWYgeW91IHN0aWxsIG5lZWQgaGVscCwgZmVlbCBmcmVlIHRvIGRyb3AgYSBtYWlsIG9uIHRoZSBbYWNlIG1haWxpbmcgbGlzdF0oaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FjZS1kaXNjdXNzKS4NCg0KUnVubmluZyBBY2UNCi0tLS0tLS0tLS0tDQoNCkFmdGVyIHRoZSBjaGVja291dCBBY2Ugd29ya3Mgb3V0IG9mIHRoZSBib3guIE5vIGJ1aWxkIHN0ZXAgaXMgcmVxdWlyZWQuIE9wZW4gJ2VkaXRvci5odG1sJyBpbiBhbnkgYnJvd3NlciBleGNlcHQgR29vZ2xlIENocm9tZS4gR29vZ2xlIENocm9tZSBkb2Vzbid0IGFsbG93IFhNTEhUVFBSZXF1ZXN0cyBmcm9tIGZpbGVzIGxvYWRlZCBmcm9tIGRpc2MgKGkuZS4gd2l0aCBhIGZpbGU6Ly8vIFVSTCkuIFRvIG9wZW4gQWNlIGluIENocm9tZSBzaW1wbHkgc3RhcnQgdGhlIGJ1bmRsZWQgbWluaSBIVFRQIHNlcnZlcjoNCg0KYGBgYmFzaA0KICAgIC4vc3RhdGljLnB5DQpgYGANCg0KT3IgdXNpbmcgTm9kZS5KUw0KDQpgYGBiYXNoDQogICAgLi9zdGF0aWMuanMNCmBgYA0KDQpUaGUgZWRpdG9yIGNhbiB0aGVuIGJlIG9wZW5lZCBhdCBodHRwOi8vbG9jYWxob3N0Ojg4ODgvaW5kZXguaHRtbC4NCg0KUGFja2FnZSBBY2UNCi0tLS0tLS0tLS0tDQoNClRvIHBhY2thZ2UgQWNlIHdlIHVzZSB0aGUgZHJ5aWNlIGJ1aWxkIHRvb2wgZGV2ZWxvcGVkIGJ5IHRoZSBNb3ppbGxhIFNreXdyaXRlciB0ZWFtLiBCZWZvcmUgeW91IGNhbiBidWlsZCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3VibW9kdWxlcyBhcmUgdXAgdG8gZGF0ZS4NCg0KYGBgYmFzaA0KICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQ0KYGBgDQoNCk1ha2Ugc3VyZSB5b3UgYXQgbGVhc3QgdmVyc2lvbiAwLjMuMCBvZiBkcnlpY2UNCg0KYGBgYmFzaA0KICAgIG5wbSBpbnN0YWxsIGRyeWljZQ0KYGBgDQoNCkFmdGVyd2FyZHMgQWNlIGNhbiBiZSBidWlsdCBieSBjYWxsaW5nDQoNCmBgYGJhc2gNCiAgICAuL01ha2VmaWxlLmRyeWljZS5qcyBub3JtYWwNCmBgYA0KDQpUaGUgcGFja2FnZWQgQWNlIHdpbGwgYmUgcHV0IGluIHRoZSAnYnVpbGQnIGZvbGRlci4NCg0KVG8gYnVpbGQgdGhlIGJvb2ttYXJrbGV0IHZlcnNpb24gZXhlY3V0ZQ0KDQpgYGBiYXNoDQogICAgLi9NYWtlZmlsZS5kcnlpY2UuanMgYm0NCmBgYA0KDQpSdW5uaW5nIHRoZSBVbml0IFRlc3RzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClRoZSBBY2UgdW5pdCB0ZXN0cyBydW4gb24gbm9kZS5qcy4gQmVmb3JlIHRoZSBmaXJzdCBydW4gYSBjb3VwbGUgb2Ygbm9kZSBtb2R1bGVzIGhhdmUgdG8gYmUgaW5zdGFsbGVkLiBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyBieSB1c2luZyB0aGUgbm9kZSBwYWNrYWdlIG1hbmFnZXIgKG5wbSkuIEluIHRoZSBBY2UgYmFzZSBkaXJlY3Rvcnkgc2ltcGx5IGNhbGwNCg0KYGBgYmFzaA0KICAgIG5wbSBsaW5rIC4NCmBgYA0KDQpUbyBydW4gdGhlIHRlc3RzIGNhbGw6DQoNCmBgYGJhc2gNCiAgICBub2RlIGxpYi9hY2UvdGVzdC9hbGwuanMNCmBgYA0KDQpZb3UgY2FuIGFsc28gcnVuIHRoZSB0ZXN0cyBpbiB5b3VyIGJyb3dzZXIgYnkgc2VydmluZzoNCg0KICAgIGh0dHA6Ly9sb2NhbGhvc3Q6ODg4OC9saWIvYWNlL3Rlc3QvdGVzdHMuaHRtbA0KDQpUaGlzIG1ha2VzIGRlYnVnZ2luZyBmYWlsaW5nIHRlc3RzIHdheSBtb3JlIGVhc2llci4NCg0KQ29udGludW91cyBJbnRlZ3JhdGlvbiBzdGF0dXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClRoaXMgcHJvamVjdCBpcyB0ZXN0ZWQgd2l0aCBbVHJhdmlzIENJXShodHRwOi8vdHJhdmlzLWNpLm9yZykNClshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly9zZWN1cmUudHJhdmlzLWNpLm9yZy9hamF4b3JnL2FjZS5wbmcpXShodHRwOi8vdHJhdmlzLWNpLm9yZy9hamF4b3JnL2FjZSkNCg0KQ29udHJpYnV0aW5nDQotLS0tLS0tLS0tLS0NCg0KQWNlIHdvdWxkbid0IGJlIHdoYXQgaXQgaXMgd2l0aG91dCBjb250cmlidXRpb25zISBGZWVsIGZyZWUgdG8gZm9yayBhbmQgaW1wcm92ZS9lbmhhbmNlIEFjZSBhbnkgd2F5IHlvdSB3YW50LiBJZiB5b3UgZmVlbCB0aGF0IHRoZSBlZGl0b3Igb3IgdGhlIEFjZSBjb21tdW5pdHkgd2lsbCBiZW5lZml0IGZyb20geW91ciBjaGFuZ2VzLCBwbGVhc2Ugb3BlbiBhIHB1bGwgcmVxdWVzdC4gVG8gcHJvdGVjdCB0aGUgaW50ZXJlc3RzIG9mIHRoZSBBY2UgY29udHJpYnV0b3JzIGFuZCB1c2VycyB3ZSByZXF1aXJlIGNvbnRyaWJ1dG9ycyB0byBzaWduIGEgQ29udHJpYnV0b3JzIExpY2Vuc2UgQWdyZWVtZW50IChDTEEpIGJlZm9yZSB3ZSBwdWxsIHRoZSBjaGFuZ2VzIGludG8gdGhlIG1haW4gcmVwb3NpdG9yeS4gT3VyIENMQSBpcyB0aGUgc2ltcGxlc3Qgb2YgYWdyZWVtZW50cywgcmVxdWlyaW5nIHRoYXQgdGhlIGNvbnRyaWJ1dGlvbnMgeW91IG1ha2UgdG8gYW4gYWpheC5vcmcgcHJvamVjdCBhcmUgb25seSB0aG9zZSB5b3UncmUgYWxsb3dlZCB0byBtYWtlLiBUaGlzIGhlbHBzIHVzIHNpZ25pZmljYW50bHkgcmVkdWNlIGZ1dHVyZSBsZWdhbCByaXNrIGZvciBldmVyeW9uZSBpbnZvbHZlZC4gSXQgaXMgZWFzeSwgaGVscHMgZXZlcnlvbmUsIHRha2VzIHRlbiBtaW51dGVzLCBhbmQgb25seSBuZWVkcyB0byBiZSBjb21wbGV0ZWQgb25jZS4gIFRoZXJlIGFyZSB0d28gdmVyc2lvbnMgb2YgdGhlIGFncmVlbWVudDoNCg0KMS4gW1RoZSBJbmRpdmlkdWFsIENMQV0oaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlL3Jhdy9tYXN0ZXIvZG9jL0NvbnRyaWJ1dG9yX0xpY2Vuc2VfQWdyZWVtZW50LXYyLnBkZik6IHVzZSB0aGlzIHZlcnNpb24gaWYgeW91J3JlIHdvcmtpbmcgb24gYW4gYWpheC5vcmcgaW4geW91ciBzcGFyZSB0aW1lLCBvciBjYW4gY2xlYXJseSBjbGFpbSBvd25lcnNoaXAgb2YgY29weXJpZ2h0IGluIHdoYXQgeW91J2xsIGJlIHN1Ym1pdHRpbmcuDQoyLiBbVGhlIENvcnBvcmF0ZSBDTEFdKGh0dHBzOi8vZ2l0aHViLmNvbS9hamF4b3JnL2FjZS9yYXcvbWFzdGVyL2RvYy9Db3Jwb3JhdGVfQ29udHJpYnV0b3JfTGljZW5zZV9BZ3JlZW1lbnQtdjIucGRmKTogaGF2ZSB5b3VyIGNvcnBvcmF0ZSBsYXd5ZXIgcmV2aWV3IGFuZCBzdWJtaXQgdGhpcyBpZiB5b3VyIGNvbXBhbnkgaXMgZ29pbmcgdG8gYmUgY29udHJpYnV0aW5nIHRvIGFqYXgub3JnICBwcm9qZWN0cw0KDQpJZiB5b3Ugd2FudCB0byBjb250cmlidXRlIHRvIGFuIGFqYXgub3JnIHByb2plY3QgcGxlYXNlIHByaW50IHRoZSBDTEEgYW5kIGZpbGwgaXQgb3V0IGFuZCBzaWduIGl0LiBUaGVuIGVpdGhlciBzZW5kIGl0IGJ5IHNuYWlsIG1haWwgb3IgZmF4IHRvIHVzIG9yIHNlbmQgaXQgYmFjayBzY2FubmVkIChvciBhcyBhIHBob3RvKSBieSBlbWFpbC4NCg0KRW1haWw6IGZhYmlhbi5qYWtvYnNAd2ViLmRlDQoNCkZheDogKzMxICgwKSAyMDYzODg5NTMNCg0KQWRkcmVzczogQWpheC5vcmcgQi5WLg0KICBLZWl6ZXJzZ3JhY2h0IDI0MQ0KICAxMDE2IEVBLCBBbXN0ZXJkYW0NCiAgdGhlIE5ldGhlcmxhbmRz]]></data>
	</file>
	<file>
	  <filename>/ace/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/ace/src/ace-compat-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgicGlsb3QvaW5kZXgiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJwaWxvdC9icm93c2VyX2ZvY3VzIiwicGlsb3QvZG9tIiwicGlsb3QvZXZlbnQiLCJwaWxvdC9ldmVudF9lbWl0dGVyIiwicGlsb3QvZml4b2xkYnJvd3NlcnMiLCJwaWxvdC9rZXlzIiwicGlsb3QvbGFuZyIsInBpbG90L29vcCIsInBpbG90L3VzZXJhZ2VudCIsInBpbG90L2Nhbm9uIl0sZnVuY3Rpb24oYSxiLGMpe2EoInBpbG90L2Jyb3dzZXJfZm9jdXMiKSxhKCJwaWxvdC9kb20iKSxhKCJwaWxvdC9ldmVudCIpLGEoInBpbG90L2V2ZW50X2VtaXR0ZXIiKSxhKCJwaWxvdC9maXhvbGRicm93c2VycyIpLGEoInBpbG90L2tleXMiKSxhKCJwaWxvdC9sYW5nIiksYSgicGlsb3Qvb29wIiksYSgicGlsb3QvdXNlcmFnZW50IiksYSgicGlsb3QvY2Fub24iKX0pLGFjZS5kZWZpbmUoInBpbG90L2Jyb3dzZXJfZm9jdXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2Jyb3dzZXJfZm9jdXMiXSxmdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAncGlsb3QvYnJvd3Nlcl9mb2N1cycgaXMgZGVwcmVjYXRlZC4gVXNlICdhY2UvbGliL2Jyb3dzZXJfZm9jdXMnIGluc3RlYWQiKSxjLmV4cG9ydHM9YSgiYWNlL2xpYi9icm93c2VyX2ZvY3VzIil9KSxhY2UuZGVmaW5lKCJwaWxvdC9kb20iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLndhcm4oIkRFUFJFQ0FURUQ6ICdwaWxvdC9kb20nIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWNlL2xpYi9kb20nIGluc3RlYWQiKSxjLmV4cG9ydHM9YSgiYWNlL2xpYi9kb20iKX0pLGFjZS5kZWZpbmUoInBpbG90L2V2ZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudCJdLGZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLndhcm4oIkRFUFJFQ0FURUQ6ICdwaWxvdC9ldmVudCcgaXMgZGVwcmVjYXRlZC4gVXNlICdhY2UvbGliL2V2ZW50JyBpbnN0ZWFkIiksYy5leHBvcnRzPWEoImFjZS9saWIvZXZlbnQiKX0pLGFjZS5kZWZpbmUoInBpbG90L2V2ZW50X2VtaXR0ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAncGlsb3QvZXZlbnRfZW1pdHRlcicgaXMgZGVwcmVjYXRlZC4gVXNlICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInIGluc3RlYWQiKSxjLmV4cG9ydHM9YSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIil9KSxhY2UuZGVmaW5lKCJwaWxvdC9maXhvbGRicm93c2VycyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZml4b2xkYnJvd3NlcnMiXSxmdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAncGlsb3QvZml4b2xkYnJvd3NlcnMnIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWNlL2xpYi9maXhvbGRicm93c2VycycgaW5zdGVhZCIpLGMuZXhwb3J0cz1hKCJhY2UvbGliL2ZpeG9sZGJyb3dzZXJzIil9KSxhY2UuZGVmaW5lKCJwaWxvdC9rZXlzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIl0sZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiREVQUkVDQVRFRDogJ3BpbG90L2tleXMnIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWNlL2xpYi9rZXlzJyBpbnN0ZWFkIiksYy5leHBvcnRzPWEoImFjZS9saWIva2V5cyIpfSksYWNlLmRlZmluZSgicGlsb3QvbGFuZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLndhcm4oIkRFUFJFQ0FURUQ6ICdwaWxvdC9sYW5nJyBpcyBkZXByZWNhdGVkLiBVc2UgJ2FjZS9saWIvbGFuZycgaW5zdGVhZCIpLGMuZXhwb3J0cz1hKCJhY2UvbGliL2xhbmciKX0pLGFjZS5kZWZpbmUoInBpbG90L29vcCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIl0sZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiREVQUkVDQVRFRDogJ3BpbG90L29vcCcgaXMgZGVwcmVjYXRlZC4gVXNlICdhY2UvbGliL29vcCcgaW5zdGVhZCIpLGMuZXhwb3J0cz1hKCJhY2UvbGliL29vcCIpfSksYWNlLmRlZmluZSgicGlsb3QvdXNlcmFnZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi91c2VyYWdlbnQiXSxmdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAncGlsb3QvdXNlcmFnZW50JyBpcyBkZXByZWNhdGVkLiBVc2UgJ2FjZS9saWIvdXNlcmFnZW50JyBpbnN0ZWFkIiksYy5leHBvcnRzPWEoImFjZS9saWIvdXNlcmFnZW50Iil9KSxhY2UuZGVmaW5lKCJwaWxvdC9jYW5vbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLndhcm4oIkRFUFJFQ0FURUQ6ICdwaWxvdC9jYW5vbicgaXMgZGVwcmVjYXRlZC4iKSxiLmFkZENvbW1hbmQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIkRFUFJFQ0FURUQ6ICdjYW5vbi5hZGRDb21tYW5kKCknIGlzIGRlcHJlY2F0ZWQuIFVzZSAnZWRpdG9yLmNvbW1hbmRzLmFkZENvbW1hbmQoY29tbWFuZCknIGluc3RlYWQuIiksY29uc29sZS50cmFjZSgpfSxiLnJlbW92ZUNvbW1hbmQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIkRFUFJFQ0FURUQ6ICdjYW5vbi5yZW1vdmVDb21tYW5kKCknIGlzIGRlcHJlY2F0ZWQuIFVzZSAnZWRpdG9yLmNvbW1hbmRzLnJlbW92ZUNvbW1hbmQoY29tbWFuZCknIGluc3RlYWQuIiksY29uc29sZS50cmFjZSgpfX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/ace-compat.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJwaWxvdC9pbmRleCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsInBpbG90L2Jyb3dzZXJfZm9jdXMiLCJwaWxvdC9kb20iLCJwaWxvdC9ldmVudCIsInBpbG90L2V2ZW50X2VtaXR0ZXIiLCJwaWxvdC9maXhvbGRicm93c2VycyIsInBpbG90L2tleXMiLCJwaWxvdC9sYW5nIiwicGlsb3Qvb29wIiwicGlsb3QvdXNlcmFnZW50IiwicGlsb3QvY2Fub24iXSxmdW5jdGlvbihhLGIsYyl7YSgicGlsb3QvYnJvd3Nlcl9mb2N1cyIpLGEoInBpbG90L2RvbSIpLGEoInBpbG90L2V2ZW50IiksYSgicGlsb3QvZXZlbnRfZW1pdHRlciIpLGEoInBpbG90L2ZpeG9sZGJyb3dzZXJzIiksYSgicGlsb3Qva2V5cyIpLGEoInBpbG90L2xhbmciKSxhKCJwaWxvdC9vb3AiKSxhKCJwaWxvdC91c2VyYWdlbnQiKSxhKCJwaWxvdC9jYW5vbiIpfSksZGVmaW5lKCJwaWxvdC9icm93c2VyX2ZvY3VzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9icm93c2VyX2ZvY3VzIl0sZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiREVQUkVDQVRFRDogJ3BpbG90L2Jyb3dzZXJfZm9jdXMnIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWNlL2xpYi9icm93c2VyX2ZvY3VzJyBpbnN0ZWFkIiksYy5leHBvcnRzPWEoImFjZS9saWIvYnJvd3Nlcl9mb2N1cyIpfSksZGVmaW5lKCJwaWxvdC9kb20iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLndhcm4oIkRFUFJFQ0FURUQ6ICdwaWxvdC9kb20nIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWNlL2xpYi9kb20nIGluc3RlYWQiKSxjLmV4cG9ydHM9YSgiYWNlL2xpYi9kb20iKX0pLGRlZmluZSgicGlsb3QvZXZlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50Il0sZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiREVQUkVDQVRFRDogJ3BpbG90L2V2ZW50JyBpcyBkZXByZWNhdGVkLiBVc2UgJ2FjZS9saWIvZXZlbnQnIGluc3RlYWQiKSxjLmV4cG9ydHM9YSgiYWNlL2xpYi9ldmVudCIpfSksZGVmaW5lKCJwaWxvdC9ldmVudF9lbWl0dGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiREVQUkVDQVRFRDogJ3BpbG90L2V2ZW50X2VtaXR0ZXInIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJyBpbnN0ZWFkIiksYy5leHBvcnRzPWEoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpfSksZGVmaW5lKCJwaWxvdC9maXhvbGRicm93c2VycyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZml4b2xkYnJvd3NlcnMiXSxmdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAncGlsb3QvZml4b2xkYnJvd3NlcnMnIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWNlL2xpYi9maXhvbGRicm93c2VycycgaW5zdGVhZCIpLGMuZXhwb3J0cz1hKCJhY2UvbGliL2ZpeG9sZGJyb3dzZXJzIil9KSxkZWZpbmUoInBpbG90L2tleXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2tleXMiXSxmdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAncGlsb3Qva2V5cycgaXMgZGVwcmVjYXRlZC4gVXNlICdhY2UvbGliL2tleXMnIGluc3RlYWQiKSxjLmV4cG9ydHM9YSgiYWNlL2xpYi9rZXlzIil9KSxkZWZpbmUoInBpbG90L2xhbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciXSxmdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAncGlsb3QvbGFuZycgaXMgZGVwcmVjYXRlZC4gVXNlICdhY2UvbGliL2xhbmcnIGluc3RlYWQiKSxjLmV4cG9ydHM9YSgiYWNlL2xpYi9sYW5nIil9KSxkZWZpbmUoInBpbG90L29vcCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIl0sZnVuY3Rpb24oYSxiLGMpe2NvbnNvbGUud2FybigiREVQUkVDQVRFRDogJ3BpbG90L29vcCcgaXMgZGVwcmVjYXRlZC4gVXNlICdhY2UvbGliL29vcCcgaW5zdGVhZCIpLGMuZXhwb3J0cz1hKCJhY2UvbGliL29vcCIpfSksZGVmaW5lKCJwaWxvdC91c2VyYWdlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL3VzZXJhZ2VudCJdLGZ1bmN0aW9uKGEsYixjKXtjb25zb2xlLndhcm4oIkRFUFJFQ0FURUQ6ICdwaWxvdC91c2VyYWdlbnQnIGlzIGRlcHJlY2F0ZWQuIFVzZSAnYWNlL2xpYi91c2VyYWdlbnQnIGluc3RlYWQiKSxjLmV4cG9ydHM9YSgiYWNlL2xpYi91c2VyYWdlbnQiKX0pLGRlZmluZSgicGlsb3QvY2Fub24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAncGlsb3QvY2Fub24nIGlzIGRlcHJlY2F0ZWQuIiksYi5hZGRDb21tYW5kPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAnY2Fub24uYWRkQ29tbWFuZCgpJyBpcyBkZXByZWNhdGVkLiBVc2UgJ2VkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kKGNvbW1hbmQpJyBpbnN0ZWFkLiIpLGNvbnNvbGUudHJhY2UoKX0sYi5yZW1vdmVDb21tYW5kPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJERVBSRUNBVEVEOiAnY2Fub24ucmVtb3ZlQ29tbWFuZCgpJyBpcyBkZXByZWNhdGVkLiBVc2UgJ2VkaXRvci5jb21tYW5kcy5yZW1vdmVDb21tYW5kKGNvbW1hbmQpJyBpbnN0ZWFkLiIpLGNvbnNvbGUudHJhY2UoKX19KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/ace-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZyhhKXt2YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBkKCIiLGEsYil9O2UucGFja2FnZWQ9ITA7dmFyIGY9YjthJiYoYlthXXx8KGJbYV09e30pLGY9YlthXSksZi5kZWZpbmUmJihjLm9yaWdpbmFsPWYuZGVmaW5lKSxmLmRlZmluZT1jLGYucmVxdWlyZSYmKGQub3JpZ2luYWw9Zi5yZXF1aXJlKSxmLnJlcXVpcmU9ZX12YXIgYT0iYWNlIixiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7aWYodHlwZW9mIHJlcXVpcmVqcyE9InVuZGVmaW5lZCIpcmV0dXJuO3ZhciBjPWZ1bmN0aW9uKGEsYixkKXtpZih0eXBlb2YgYSE9InN0cmluZyIpe2Mub3JpZ2luYWw/Yy5vcmlnaW5hbC5hcHBseSh3aW5kb3csYXJndW1lbnRzKTooY29uc29sZS5lcnJvcigiZHJvcHBpbmcgbW9kdWxlIGJlY2F1c2UgZGVmaW5lIHdhc24ndCBhIHN0cmluZy4iKSxjb25zb2xlLnRyYWNlKCkpO3JldHVybn1hcmd1bWVudHMubGVuZ3RoPT0yJiYoZD1iKSxjLm1vZHVsZXN8fChjLm1vZHVsZXM9e30pLGMubW9kdWxlc1thXT1kfSxkPWZ1bmN0aW9uKGEsYixjKXtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik9PT0iW29iamVjdCBBcnJheV0iKXt2YXIgZT1bXTtmb3IodmFyIGc9MCxoPWIubGVuZ3RoO2c8aDsrK2cpe3ZhciBpPWYoYSxiW2ddKTtpZighaSYmZC5vcmlnaW5hbClyZXR1cm4gZC5vcmlnaW5hbC5hcHBseSh3aW5kb3csYXJndW1lbnRzKTtlLnB1c2goaSl9YyYmYy5hcHBseShudWxsLGUpfWVsc2V7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgaj1mKGEsYik7cmV0dXJuIWomJmQub3JpZ2luYWw/ZC5vcmlnaW5hbC5hcHBseSh3aW5kb3csYXJndW1lbnRzKTooYyYmYygpLGopfWlmKGQub3JpZ2luYWwpcmV0dXJuIGQub3JpZ2luYWwuYXBwbHkod2luZG93LGFyZ3VtZW50cyl9fSxlPWZ1bmN0aW9uKGEsYil7aWYoYi5pbmRleE9mKCIhIikhPT0tMSl7dmFyIGM9Yi5zcGxpdCgiISIpO3JldHVybiBlKGEsY1swXSkrIiEiK2UoYSxjWzFdKX1pZihiLmNoYXJBdCgwKT09Ii4iKXt2YXIgZD1hLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuam9pbigiLyIpO2I9ZCsiLyIrYjt3aGlsZShiLmluZGV4T2YoIi4iKSE9PS0xJiZmIT1iKXt2YXIgZj1iO2I9Yi5yZXBsYWNlKC9cL1wuXC8vLCIvIikucmVwbGFjZSgvW15cL10rXC9cLlwuXC8vLCIiKX19cmV0dXJuIGJ9LGY9ZnVuY3Rpb24oYSxiKXtiPWUoYSxiKTt2YXIgZj1jLm1vZHVsZXNbYl07aWYoIWYpcmV0dXJuIG51bGw7aWYodHlwZW9mIGY9PSJmdW5jdGlvbiIpe3ZhciBnPXt9LGg9e2lkOmIsdXJpOiIiLGV4cG9ydHM6ZyxwYWNrYWdlZDohMH0saT1mdW5jdGlvbihhLGMpe3JldHVybiBkKGIsYSxjKX0saj1mKGksZyxoKTtyZXR1cm4gZz1qfHxoLmV4cG9ydHMsYy5tb2R1bGVzW2JdPWcsZ31yZXR1cm4gZn07ZyhhKX0pKCksYWNlLmRlZmluZSgiYWNlL2FjZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZml4b2xkYnJvd3NlcnMiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvZXZlbnQiLCJhY2UvZWRpdG9yIiwiYWNlL2VkaXRfc2Vzc2lvbiIsImFjZS91bmRvbWFuYWdlciIsImFjZS92aXJ0dWFsX3JlbmRlcmVyIiwiYWNlL3RoZW1lL3RleHRtYXRlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IixhKCIuL2xpYi9maXhvbGRicm93c2VycyIpO3ZhciBkPWEoIi4vbGliL2RvbSIpLGU9YSgiLi9saWIvZXZlbnQiKSxmPWEoIi4vZWRpdG9yIikuRWRpdG9yLGc9YSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbixoPWEoIi4vdW5kb21hbmFnZXIiKS5VbmRvTWFuYWdlcixpPWEoIi4vdmlydHVhbF9yZW5kZXJlciIpLlZpcnR1YWxSZW5kZXJlcjtiLmVkaXQ9ZnVuY3Rpb24oYil7dHlwZW9mIGI9PSJzdHJpbmciJiYoYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiKSk7dmFyIGM9bmV3IGcoZC5nZXRJbm5lclRleHQoYikpO2Muc2V0VW5kb01hbmFnZXIobmV3IGgpLGIuaW5uZXJIVE1MPSIiO3ZhciBqPW5ldyBmKG5ldyBpKGIsYSgiLi90aGVtZS90ZXh0bWF0ZSIpKSk7ai5zZXRTZXNzaW9uKGMpO3ZhciBrPXt9O3JldHVybiBrLmRvY3VtZW50PWMsay5lZGl0b3I9aixqLnJlc2l6ZSgpLGUuYWRkTGlzdGVuZXIod2luZG93LCJyZXNpemUiLGZ1bmN0aW9uKCl7ai5yZXNpemUoKX0pLGIuZW52PWssai5lbnY9ayxqfX0pLGFjZS5kZWZpbmUoImFjZS9saWIvZml4b2xkYnJvd3NlcnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL3JlZ2V4cCIsImFjZS9saWIvZXM1LXNoaW0iXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiLGEoIi4vcmVnZXhwIiksYSgiLi9lczUtc2hpbSIpfSksYWNlLmRlZmluZSgiYWNlL2xpYi9yZWdleHAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZyhhKXtyZXR1cm4oYS5nbG9iYWw/ImciOiIiKSsoYS5pZ25vcmVDYXNlPyJpIjoiIikrKGEubXVsdGlsaW5lPyJtIjoiIikrKGEuZXh0ZW5kZWQ/IngiOiIiKSsoYS5zdGlja3k/InkiOiIiKX1mdW5jdGlvbiBoKGEsYixjKXtpZihBcnJheS5wcm90b3R5cGUuaW5kZXhPZilyZXR1cm4gYS5pbmRleE9mKGIsYyk7Zm9yKHZhciBkPWN8fDA7ZDxhLmxlbmd0aDtkKyspaWYoYVtkXT09PWIpcmV0dXJuIGQ7cmV0dXJuLTF9InVzZSBzdHJpY3QiO3ZhciBkPXtleGVjOlJlZ0V4cC5wcm90b3R5cGUuZXhlYyx0ZXN0OlJlZ0V4cC5wcm90b3R5cGUudGVzdCxtYXRjaDpTdHJpbmcucHJvdG90eXBlLm1hdGNoLHJlcGxhY2U6U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLHNwbGl0OlN0cmluZy5wcm90b3R5cGUuc3BsaXR9LGU9ZC5leGVjLmNhbGwoLygpPz8vLCIiKVsxXT09PXVuZGVmaW5lZCxmPWZ1bmN0aW9uKCl7dmFyIGE9L14vZztyZXR1cm4gZC50ZXN0LmNhbGwoYSwiIiksIWEubGFzdEluZGV4fSgpO1JlZ0V4cC5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihhKXt2YXIgYj1kLmV4ZWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGMsaTtpZihiKXshZSYmYi5sZW5ndGg+MSYmaChiLCIiKT4tMSYmKGk9UmVnRXhwKHRoaXMuc291cmNlLGQucmVwbGFjZS5jYWxsKGcodGhpcyksImciLCIiKSksZC5yZXBsYWNlLmNhbGwoYS5zbGljZShiLmluZGV4KSxpLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTE7YTxhcmd1bWVudHMubGVuZ3RoLTI7YSsrKWFyZ3VtZW50c1thXT09PXVuZGVmaW5lZCYmKGJbYV09dW5kZWZpbmVkKX0pKTtpZih0aGlzLl94cmVnZXhwJiZ0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lcylmb3IodmFyIGo9MTtqPGIubGVuZ3RoO2orKyljPXRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzW2otMV0sYyYmKGJbY109YltqXSk7IWYmJnRoaXMuZ2xvYmFsJiYhYlswXS5sZW5ndGgmJnRoaXMubGFzdEluZGV4PmIuaW5kZXgmJnRoaXMubGFzdEluZGV4LS19cmV0dXJuIGJ9LGZ8fChSZWdFeHAucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5leGVjLmNhbGwodGhpcyxhKTtyZXR1cm4gYiYmdGhpcy5nbG9iYWwmJiFiWzBdLmxlbmd0aCYmdGhpcy5sYXN0SW5kZXg+Yi5pbmRleCYmdGhpcy5sYXN0SW5kZXgtLSwhIWJ9KX0pLGFjZS5kZWZpbmUoImFjZS9saWIvZXM1LXNoaW0iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gcChhKXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJzZW50aW5lbCIse30pLCJzZW50aW5lbCJpbiBhfWNhdGNoKGIpe319RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fChGdW5jdGlvbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKHR5cGVvZiBiIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3I7dmFyIGM9Zy5jYWxsKGFyZ3VtZW50cywxKSxkPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIGQpe3ZhciBlPWZ1bmN0aW9uKCl7fTtlLnByb3RvdHlwZT1iLnByb3RvdHlwZTt2YXIgZj1uZXcgZSxoPWIuYXBwbHkoZixjLmNvbmNhdChnLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBoIT09bnVsbCYmT2JqZWN0KGgpPT09aD9oOmZ9cmV0dXJuIGIuYXBwbHkoYSxjLmNvbmNhdChnLmNhbGwoYXJndW1lbnRzKSkpfTtyZXR1cm4gZH0pO3ZhciBkPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGU9QXJyYXkucHJvdG90eXBlLGY9T2JqZWN0LnByb3RvdHlwZSxnPWUuc2xpY2UsaD1kLmJpbmQoZi50b1N0cmluZyksaT1kLmJpbmQoZi5oYXNPd25Qcm9wZXJ0eSksaixrLGwsbSxuO2lmKG49aShmLCJfX2RlZmluZUdldHRlcl9fIikpaj1kLmJpbmQoZi5fX2RlZmluZUdldHRlcl9fKSxrPWQuYmluZChmLl9fZGVmaW5lU2V0dGVyX18pLGw9ZC5iaW5kKGYuX19sb29rdXBHZXR0ZXJfXyksbT1kLmJpbmQoZi5fX2xvb2t1cFNldHRlcl9fKTtBcnJheS5pc0FycmF5fHwoQXJyYXkuaXNBcnJheT1mdW5jdGlvbihhKXtyZXR1cm4gaChhKT09IltvYmplY3QgQXJyYXldIn0pLEFycmF5LnByb3RvdHlwZS5mb3JFYWNofHwoQXJyYXkucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSl7dmFyIGI9Ryh0aGlzKSxjPWFyZ3VtZW50c1sxXSxkPTAsZT1iLmxlbmd0aD4+PjA7aWYoaChhKSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yO3doaWxlKGQ8ZSlkIGluIGImJmEuY2FsbChjLGJbZF0sZCxiKSxkKyt9KSxBcnJheS5wcm90b3R5cGUubWFwfHwoQXJyYXkucHJvdG90eXBlLm1hcD1mdW5jdGlvbihhKXt2YXIgYj1HKHRoaXMpLGM9Yi5sZW5ndGg+Pj4wLGQ9QXJyYXkoYyksZT1hcmd1bWVudHNbMV07aWYoaChhKSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yO2Zvcih2YXIgZj0wO2Y8YztmKyspZiBpbiBiJiYoZFtmXT1hLmNhbGwoZSxiW2ZdLGYsYikpO3JldHVybiBkfSksQXJyYXkucHJvdG90eXBlLmZpbHRlcnx8KEFycmF5LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oYSl7dmFyIGI9Ryh0aGlzKSxjPWIubGVuZ3RoPj4+MCxkPVtdLGU9YXJndW1lbnRzWzFdO2lmKGgoYSkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcjtmb3IodmFyIGY9MDtmPGM7ZisrKWYgaW4gYiYmYS5jYWxsKGUsYltmXSxmLGIpJiZkLnB1c2goYltmXSk7cmV0dXJuIGR9KSxBcnJheS5wcm90b3R5cGUuZXZlcnl8fChBcnJheS5wcm90b3R5cGUuZXZlcnk9ZnVuY3Rpb24oYSl7dmFyIGI9Ryh0aGlzKSxjPWIubGVuZ3RoPj4+MCxkPWFyZ3VtZW50c1sxXTtpZihoKGEpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3I7Zm9yKHZhciBlPTA7ZTxjO2UrKylpZihlIGluIGImJiFhLmNhbGwoZCxiW2VdLGUsYikpcmV0dXJuITE7cmV0dXJuITB9KSxBcnJheS5wcm90b3R5cGUuc29tZXx8KEFycmF5LnByb3RvdHlwZS5zb21lPWZ1bmN0aW9uKGEpe3ZhciBiPUcodGhpcyksYz1iLmxlbmd0aD4+PjAsZD1hcmd1bWVudHNbMV07aWYoaChhKSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yO2Zvcih2YXIgZT0wO2U8YztlKyspaWYoZSBpbiBiJiZhLmNhbGwoZCxiW2VdLGUsYikpcmV0dXJuITA7cmV0dXJuITF9KSxBcnJheS5wcm90b3R5cGUucmVkdWNlfHwoQXJyYXkucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbihhKXt2YXIgYj1HKHRoaXMpLGM9Yi5sZW5ndGg+Pj4wO2lmKGgoYSkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcjtpZighYyYmYXJndW1lbnRzLmxlbmd0aD09MSl0aHJvdyBuZXcgVHlwZUVycm9yO3ZhciBkPTAsZTtpZihhcmd1bWVudHMubGVuZ3RoPj0yKWU9YXJndW1lbnRzWzFdO2Vsc2UgZG97aWYoZCBpbiBiKXtlPWJbZCsrXTticmVha31pZigrK2Q+PWMpdGhyb3cgbmV3IFR5cGVFcnJvcn13aGlsZSghMCk7Zm9yKDtkPGM7ZCsrKWQgaW4gYiYmKGU9YS5jYWxsKHZvaWQgMCxlLGJbZF0sZCxiKSk7cmV0dXJuIGV9KSxBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHR8fChBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQ9ZnVuY3Rpb24oYSl7dmFyIGI9Ryh0aGlzKSxjPWIubGVuZ3RoPj4+MDtpZihoKGEpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3I7aWYoIWMmJmFyZ3VtZW50cy5sZW5ndGg9PTEpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgZCxlPWMtMTtpZihhcmd1bWVudHMubGVuZ3RoPj0yKWQ9YXJndW1lbnRzWzFdO2Vsc2UgZG97aWYoZSBpbiBiKXtkPWJbZS0tXTticmVha31pZigtLWU8MCl0aHJvdyBuZXcgVHlwZUVycm9yfXdoaWxlKCEwKTtkbyBlIGluIHRoaXMmJihkPWEuY2FsbCh2b2lkIDAsZCxiW2VdLGUsYikpO3doaWxlKGUtLSk7cmV0dXJuIGR9KSxBcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8KEFycmF5LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGEpe3ZhciBiPUcodGhpcyksYz1iLmxlbmd0aD4+PjA7aWYoIWMpcmV0dXJuLTE7dmFyIGQ9MDthcmd1bWVudHMubGVuZ3RoPjEmJihkPUUoYXJndW1lbnRzWzFdKSksZD1kPj0wP2Q6TWF0aC5tYXgoMCxjK2QpO2Zvcig7ZDxjO2QrKylpZihkIGluIGImJmJbZF09PT1hKXJldHVybiBkO3JldHVybi0xfSksQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mfHwoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGEpe3ZhciBiPUcodGhpcyksYz1iLmxlbmd0aD4+PjA7aWYoIWMpcmV0dXJuLTE7dmFyIGQ9Yy0xO2FyZ3VtZW50cy5sZW5ndGg+MSYmKGQ9TWF0aC5taW4oZCxFKGFyZ3VtZW50c1sxXSkpKSxkPWQ+PTA/ZDpjLU1hdGguYWJzKGQpO2Zvcig7ZD49MDtkLS0paWYoZCBpbiBiJiZhPT09YltkXSlyZXR1cm4gZDtyZXR1cm4tMX0pLE9iamVjdC5nZXRQcm90b3R5cGVPZnx8KE9iamVjdC5nZXRQcm90b3R5cGVPZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX198fChhLmNvbnN0cnVjdG9yP2EuY29uc3RydWN0b3IucHJvdG90eXBlOmYpfSk7aWYoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ipe3ZhciBvPSJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICI7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhIT0ib2JqZWN0IiYmdHlwZW9mIGEhPSJmdW5jdGlvbiJ8fGE9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IobythKTtpZighaShhLGIpKXJldHVybjt2YXIgYyxkLGU7Yz17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O2lmKG4pe3ZhciBnPWEuX19wcm90b19fO2EuX19wcm90b19fPWY7dmFyIGQ9bChhLGIpLGU9bShhLGIpO2EuX19wcm90b19fPWc7aWYoZHx8ZSlyZXR1cm4gZCYmKGMuZ2V0PWQpLGUmJihjLnNldD1lKSxjfXJldHVybiBjLnZhbHVlPWFbYl0sY319T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LmtleXMoYSl9KSxPYmplY3QuY3JlYXRlfHwoT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKGE9PT1udWxsKWM9eyJfX3Byb3RvX18iOm51bGx9O2Vsc2V7aWYodHlwZW9mIGEhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoInR5cGVvZiBwcm90b3R5cGVbIit0eXBlb2YgYSsiXSAhPSAnb2JqZWN0JyIpO3ZhciBkPWZ1bmN0aW9uKCl7fTtkLnByb3RvdHlwZT1hLGM9bmV3IGQsYy5fX3Byb3RvX189YX1yZXR1cm4gYiE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYyxiKSxjfSk7aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXt2YXIgcT1wKHt9KSxyPXR5cGVvZiBkb2N1bWVudD09InVuZGVmaW5lZCJ8fHAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2lmKCFxfHwhcil2YXIgcz1PYmplY3QuZGVmaW5lUHJvcGVydHl9aWYoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8cyl7dmFyIHQ9IlByb3BlcnR5IGRlc2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiLHU9Ik9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIix2PSJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgb24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYSE9Im9iamVjdCImJnR5cGVvZiBhIT0iZnVuY3Rpb24ifHxhPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKHUrYSk7aWYodHlwZW9mIGMhPSJvYmplY3QiJiZ0eXBlb2YgYyE9ImZ1bmN0aW9uInx8Yz09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcih0K2MpO2lmKHMpdHJ5e3JldHVybiBzLmNhbGwoT2JqZWN0LGEsYixjKX1jYXRjaChkKXt9aWYoaShjLCJ2YWx1ZSIpKWlmKG4mJihsKGEsYil8fG0oYSxiKSkpe3ZhciBlPWEuX19wcm90b19fO2EuX19wcm90b19fPWYsZGVsZXRlIGFbYl0sYVtiXT1jLnZhbHVlLGEuX19wcm90b19fPWV9ZWxzZSBhW2JdPWMudmFsdWU7ZWxzZXtpZighbil0aHJvdyBuZXcgVHlwZUVycm9yKHYpO2koYywiZ2V0IikmJmooYSxiLGMuZ2V0KSxpKGMsInNldCIpJiZrKGEsYixjLnNldCl9cmV0dXJuIGF9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzfHwoT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gYilpKGIsYykmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGMsYltjXSk7cmV0dXJuIGF9KSxPYmplY3Quc2VhbHx8KE9iamVjdC5zZWFsPWZ1bmN0aW9uKGEpe3JldHVybiBhfSksT2JqZWN0LmZyZWV6ZXx8KE9iamVjdC5mcmVlemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9KTt0cnl7T2JqZWN0LmZyZWV6ZShmdW5jdGlvbigpe30pfWNhdGNoKHcpe09iamVjdC5mcmVlemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uIGIoYil7cmV0dXJuIHR5cGVvZiBiPT0iZnVuY3Rpb24iP2I6YShiKX19KE9iamVjdC5mcmVlemUpfU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uc3x8KE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucz1mdW5jdGlvbihhKXtyZXR1cm4gYX0pLE9iamVjdC5pc1NlYWxlZHx8KE9iamVjdC5pc1NlYWxlZD1mdW5jdGlvbihhKXtyZXR1cm4hMX0pLE9iamVjdC5pc0Zyb3plbnx8KE9iamVjdC5pc0Zyb3plbj1mdW5jdGlvbihhKXtyZXR1cm4hMX0pLE9iamVjdC5pc0V4dGVuc2libGV8fChPYmplY3QuaXNFeHRlbnNpYmxlPWZ1bmN0aW9uKGEpe2lmKE9iamVjdChhKT09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgYj0iIjt3aGlsZShpKGEsYikpYis9Ij8iO2FbYl09ITA7dmFyIGM9aShhLGIpO3JldHVybiBkZWxldGUgYVtiXSxjfSk7aWYoIU9iamVjdC5rZXlzKXt2YXIgeD0hMCx5PVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sej15Lmxlbmd0aDtmb3IodmFyIEEgaW57dG9TdHJpbmc6bnVsbH0peD0hMTtPYmplY3Qua2V5cz1mdW5jdGlvbiBiZChhKXtpZih0eXBlb2YgYSE9Im9iamVjdCImJnR5cGVvZiBhIT0iZnVuY3Rpb24ifHxhPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIGJkPVtdO2Zvcih2YXIgYiBpbiBhKWkoYSxiKSYmYmQucHVzaChiKTtpZih4KWZvcih2YXIgYz0wLGQ9ejtjPGQ7YysrKXt2YXIgZT15W2NdO2koYSxlKSYmYmQucHVzaChlKX1yZXR1cm4gYmR9fWlmKCFEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ3x8KG5ldyBEYXRlKC02MjE5ODc1NTJlNSkpLnRvSVNPU3RyaW5nKCkuaW5kZXhPZigiLTAwMDAwMSIpPT09LTEpRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZDtpZighaXNGaW5pdGUodGhpcykpdGhyb3cgbmV3IFJhbmdlRXJyb3I7YT1bdGhpcy5nZXRVVENNb250aCgpKzEsdGhpcy5nZXRVVENEYXRlKCksdGhpcy5nZXRVVENIb3VycygpLHRoaXMuZ2V0VVRDTWludXRlcygpLHRoaXMuZ2V0VVRDU2Vjb25kcygpXSxkPXRoaXMuZ2V0VVRDRnVsbFllYXIoKSxkPShkPDA/Ii0iOmQ+OTk5OT8iKyI6IiIpKygiMDAwMDAiK01hdGguYWJzKGQpKS5zbGljZSgwPD1kJiZkPD05OTk5Py00Oi02KSxiPWEubGVuZ3RoO3doaWxlKGItLSljPWFbYl0sYzwxMCYmKGFbYl09IjAiK2MpO3JldHVybiBkKyItIithLnNsaWNlKDAsMikuam9pbigiLSIpKyJUIithLnNsaWNlKDIpLmpvaW4oIjoiKSsiLiIrKCIwMDAiK3RoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLnNsaWNlKC0zKSsiWiJ9O0RhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0pLERhdGUucHJvdG90eXBlLnRvSlNPTnx8KERhdGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihhKXtpZih0eXBlb2YgdGhpcy50b0lTT1N0cmluZyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yO3JldHVybiB0aGlzLnRvSVNPU3RyaW5nKCl9KSxEYXRlLnBhcnNlKCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFoiKSE9PTg2NGUxMyYmKERhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24gZShiLGMsZCxmLGcsaCxpKXt2YXIgaj1hcmd1bWVudHMubGVuZ3RoO2lmKHRoaXMgaW5zdGFuY2VvZiBhKXt2YXIgaz1qPT0xJiZTdHJpbmcoYik9PT1iP25ldyBhKGUucGFyc2UoYikpOmo+PTc/bmV3IGEoYixjLGQsZixnLGgsaSk6aj49Nj9uZXcgYShiLGMsZCxmLGcsaCk6aj49NT9uZXcgYShiLGMsZCxmLGcpOmo+PTQ/bmV3IGEoYixjLGQsZik6aj49Mz9uZXcgYShiLGMsZCk6aj49Mj9uZXcgYShiLGMpOmo+PTE/bmV3IGEoYik6bmV3IGE7cmV0dXJuIGsuY29uc3RydWN0b3I9ZSxrfXJldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYz1uZXcgUmVnRXhwKCJeKFxcZHs0fXxbKy1dXFxkezZ9KSg/Oi0oXFxkezJ9KSg/Oi0oXFxkezJ9KSg/OlQoXFxkezJ9KTooXFxkezJ9KSg/OjooXFxkezJ9KSg/OlxcLihcXGR7M30pKT8pPyg/Olp8KD86KFstK10pKFxcZHsyfSk6KFxcZHsyfSkpKT8pPyk/KT8kIik7Zm9yKHZhciBkIGluIGEpYltkXT1hW2RdO3JldHVybiBiLm5vdz1hLm5vdyxiLlVUQz1hLlVUQyxiLnByb3RvdHlwZT1hLnByb3RvdHlwZSxiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iLGIucGFyc2U9ZnVuY3Rpb24gZihiKXt2YXIgZD1jLmV4ZWMoYik7aWYoZCl7ZC5zaGlmdCgpO2Zvcih2YXIgZT0xO2U8NztlKyspZFtlXT0rKGRbZV18fChlPDM/MTowKSksZT09MSYmZFtlXS0tO3ZhciBmPStkLnBvcCgpLGc9K2QucG9wKCksaD1kLnBvcCgpLGk9MDtpZihoKXtpZihnPjIzfHxmPjU5KXJldHVybiBOYU47aT0oZyo2MCtmKSo2ZTQqKGg9PSIrIj8tMToxKX12YXIgaj0rZFswXTtyZXR1cm4gMDw9aiYmajw9OTk/KGRbMF09ais0MDAsYS5VVEMuYXBwbHkodGhpcyxkKStpLTEyNjIyNzgwOGU1KTphLlVUQy5hcHBseSh0aGlzLGQpK2l9cmV0dXJuIGEucGFyc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxifShEYXRlKSk7dmFyIEI9Ilx0XG4LXGZcciDCoOGagOGgjuKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFx1MjAyOFx1MjAyOe+7vyI7aWYoIVN0cmluZy5wcm90b3R5cGUudHJpbXx8Qi50cmltKCkpe0I9IlsiK0IrIl0iO3ZhciBDPW5ldyBSZWdFeHAoIl4iK0IrQisiKiIpLEQ9bmV3IFJlZ0V4cChCK0IrIiokIik7U3RyaW5nLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKEMsIiIpLnJlcGxhY2UoRCwiIil9fXZhciBFPWZ1bmN0aW9uKGEpe3JldHVybiBhPSthLGEhPT1hP2E9MDphIT09MCYmYSE9PTEvMCYmYSE9PS1JbmZpbml0eSYmKGE9KGE+MHx8LTEpKk1hdGguZmxvb3IoTWF0aC5hYnMoYSkpKSxhfSxGPSJhIlswXSE9ImEiLEc9ZnVuY3Rpb24oYSl7aWYoYT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yO3JldHVybiBGJiZ0eXBlb2YgYT09InN0cmluZyImJmE/YS5zcGxpdCgiIik6T2JqZWN0KGEpfX0pLGFjZS5kZWZpbmUoImFjZS9saWIvZG9tIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Yi5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUz9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYnx8ZCxhKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KGEpfSxiLnNldFRleHQ9ZnVuY3Rpb24oYSxiKXthLmlubmVyVGV4dCE9PXVuZGVmaW5lZCYmKGEuaW5uZXJUZXh0PWIpLGEudGV4dENvbnRlbnQhPT11bmRlZmluZWQmJihhLnRleHRDb250ZW50PWIpfSxiLmhhc0Nzc0NsYXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5jbGFzc05hbWUuc3BsaXQoL1xzKy9nKTtyZXR1cm4gYy5pbmRleE9mKGIpIT09LTF9LGIuYWRkQ3NzQ2xhc3M9ZnVuY3Rpb24oYSxjKXtiLmhhc0Nzc0NsYXNzKGEsYyl8fChhLmNsYXNzTmFtZSs9IiAiK2MpfSxiLnJlbW92ZUNzc0NsYXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5jbGFzc05hbWUuc3BsaXQoL1xzKy9nKTtmb3IoOzspe3ZhciBkPWMuaW5kZXhPZihiKTtpZihkPT0tMSlicmVhaztjLnNwbGljZShkLDEpfWEuY2xhc3NOYW1lPWMuam9pbigiICIpfSxiLnRvZ2dsZUNzc0NsYXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5jbGFzc05hbWUuc3BsaXQoL1xzKy9nKSxkPSEwO2Zvcig7Oyl7dmFyIGU9Yy5pbmRleE9mKGIpO2lmKGU9PS0xKWJyZWFrO2Q9ITEsYy5zcGxpY2UoZSwxKX1yZXR1cm4gZCYmYy5wdXNoKGIpLGEuY2xhc3NOYW1lPWMuam9pbigiICIpLGR9LGIuc2V0Q3NzQ2xhc3M9ZnVuY3Rpb24oYSxjLGQpe2Q/Yi5hZGRDc3NDbGFzcyhhLGMpOmIucmVtb3ZlQ3NzQ2xhc3MoYSxjKX0sYi5oYXNDc3NTdHJpbmc9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ7Yj1ifHxkb2N1bWVudDtpZihiLmNyZWF0ZVN0eWxlU2hlZXQmJihkPWIuc3R5bGVTaGVldHMpKXt3aGlsZShjPGQubGVuZ3RoKWlmKGRbYysrXS50aXRsZT09PWEpcmV0dXJuITB9ZWxzZSBpZihkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN0eWxlIikpd2hpbGUoYzxkLmxlbmd0aClpZihkW2MrK10uaWQ9PT1hKXJldHVybiEwO3JldHVybiExfSxiLmltcG9ydENzc1N0cmluZz1mdW5jdGlvbiBlKGEsYyxlKXtlPWV8fGRvY3VtZW50O2lmKGMmJmIuaGFzQ3NzU3RyaW5nKGMsZSkpcmV0dXJuIG51bGw7dmFyIGY7aWYoZS5jcmVhdGVTdHlsZVNoZWV0KWY9ZS5jcmVhdGVTdHlsZVNoZWV0KCksZi5jc3NUZXh0PWEsYyYmKGYudGl0bGU9Yyk7ZWxzZXtmPWUuY3JlYXRlRWxlbWVudE5TP2UuY3JlYXRlRWxlbWVudE5TKGQsInN0eWxlIik6ZS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGYuYXBwZW5kQ2hpbGQoZS5jcmVhdGVUZXh0Tm9kZShhKSksYyYmKGYuaWQ9Yyk7dmFyIGc9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHxlLmRvY3VtZW50RWxlbWVudDtnLmFwcGVuZENoaWxkKGYpfX0sYi5pbXBvcnRDc3NTdHlsc2hlZXQ9ZnVuY3Rpb24oYSxjKXtpZihjLmNyZWF0ZVN0eWxlU2hlZXQpYy5jcmVhdGVTdHlsZVNoZWV0KGEpO2Vsc2V7dmFyIGQ9Yi5jcmVhdGVFbGVtZW50KCJsaW5rIik7ZC5yZWw9InN0eWxlc2hlZXQiLGQuaHJlZj1hO3ZhciBlPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8Yy5kb2N1bWVudEVsZW1lbnQ7ZS5hcHBlbmRDaGlsZChkKX19LGIuZ2V0SW5uZXJXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYi5jb21wdXRlZFN0eWxlKGEsInBhZGRpbmdMZWZ0IiksMTApK3BhcnNlSW50KGIuY29tcHV0ZWRTdHlsZShhLCJwYWRkaW5nUmlnaHQiKSwxMCkrYS5jbGllbnRXaWR0aH0sYi5nZXRJbm5lckhlaWdodD1mdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYi5jb21wdXRlZFN0eWxlKGEsInBhZGRpbmdUb3AiKSwxMCkrcGFyc2VJbnQoYi5jb21wdXRlZFN0eWxlKGEsInBhZGRpbmdCb3R0b20iKSwxMCkrYS5jbGllbnRIZWlnaHR9LHdpbmRvdy5wYWdlWU9mZnNldCE9PXVuZGVmaW5lZD8oYi5nZXRQYWdlU2Nyb2xsVG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldH0sYi5nZXRQYWdlU2Nyb2xsTGVmdD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGFnZVhPZmZzZXR9KTooYi5nZXRQYWdlU2Nyb2xsVG9wPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wfSxiLmdldFBhZ2VTY3JvbGxMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdH0pLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlP2IuY29tcHV0ZWRTdHlsZT1mdW5jdGlvbihhLGIpe3JldHVybiBiPyh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhLCIiKXx8e30pW2JdfHwiIjp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhLCIiKXx8e319OmIuY29tcHV0ZWRTdHlsZT1mdW5jdGlvbihhLGIpe3JldHVybiBiP2EuY3VycmVudFN0eWxlW2JdOmEuY3VycmVudFN0eWxlfSxiLnNjcm9sbGJhcldpZHRoPWZ1bmN0aW9uKGEpe3ZhciBjPWIuY3JlYXRlRWxlbWVudCgicCIpO2Muc3R5bGUud2lkdGg9IjEwMCUiLGMuc3R5bGUubWluV2lkdGg9IjBweCIsYy5zdHlsZS5oZWlnaHQ9IjIwMHB4Ijt2YXIgZD1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGU9ZC5zdHlsZTtlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5sZWZ0PSItMTAwMDBweCIsZS5vdmVyZmxvdz0iaGlkZGVuIixlLndpZHRoPSIyMDBweCIsZS5taW5XaWR0aD0iMHB4IixlLmhlaWdodD0iMTUwcHgiLGQuYXBwZW5kQ2hpbGQoYyk7dmFyIGY9YS5ib2R5fHxhLmRvY3VtZW50RWxlbWVudDtmLmFwcGVuZENoaWxkKGQpO3ZhciBnPWMub2Zmc2V0V2lkdGg7ZS5vdmVyZmxvdz0ic2Nyb2xsIjt2YXIgaD1jLm9mZnNldFdpZHRoO3JldHVybiBnPT1oJiYoaD1kLmNsaWVudFdpZHRoKSxmLnJlbW92ZUNoaWxkKGQpLGctaH0sYi5zZXRJbm5lckh0bWw9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmNsb25lTm9kZSghMSk7cmV0dXJuIGMuaW5uZXJIVE1MPWIsYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjLGEpLGN9LGIuc2V0SW5uZXJUZXh0PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5vd25lckRvY3VtZW50O2MuYm9keSYmInRleHRDb250ZW50ImluIGMuYm9keT9hLnRleHRDb250ZW50PWI6YS5pbm5lclRleHQ9Yn0sYi5nZXRJbm5lclRleHQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5vd25lckRvY3VtZW50O3JldHVybiBiLmJvZHkmJiJ0ZXh0Q29udGVudCJpbiBiLmJvZHk/YS50ZXh0Q29udGVudDphLmlubmVyVGV4dHx8YS50ZXh0Q29udGVudHx8IiJ9LGIuZ2V0UGFyZW50V2luZG93PWZ1bmN0aW9uKGEpe3JldHVybiBhLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvd319KSxhY2UuZGVmaW5lKCJhY2UvbGliL2V2ZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEsYixjKXt2YXIgZj0wO2UuaXNPcGVyYSYmZS5pc01hYz9mPTB8KGIubWV0YUtleT8xOjApfChiLmFsdEtleT8yOjApfChiLnNoaWZ0S2V5PzQ6MCl8KGIuY3RybEtleT84OjApOmY9MHwoYi5jdHJsS2V5PzE6MCl8KGIuYWx0S2V5PzI6MCl8KGIuc2hpZnRLZXk/NDowKXwoYi5tZXRhS2V5Pzg6MCk7aWYoYyBpbiBkLk1PRElGSUVSX0tFWVMpe3N3aXRjaChkLk1PRElGSUVSX0tFWVNbY10pe2Nhc2UiQWx0IjpmPTI7YnJlYWs7Y2FzZSJTaGlmdCI6Zj00O2JyZWFrO2Nhc2UiQ3RybCI6Zj0xO2JyZWFrO2RlZmF1bHQ6Zj04fWM9MH1yZXR1cm4gZiY4JiYoYz09OTF8fGM9PTkzKSYmKGM9MCksISFmfHxjIGluIGQuRlVOQ1RJT05fS0VZU3x8YyBpbiBkLlBSSU5UQUJMRV9LRVlTP2EoYixmLGMpOiExfSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2tleXMiKSxlPWEoIi4vdXNlcmFnZW50IiksZj1hKCIuL2RvbSIpO2IuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKGEuYWRkRXZlbnRMaXN0ZW5lcilyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKGIsYywhMSk7aWYoYS5hdHRhY2hFdmVudCl7dmFyIGQ9ZnVuY3Rpb24oKXtjKHdpbmRvdy5ldmVudCl9O2MuX3dyYXBwZXI9ZCxhLmF0dGFjaEV2ZW50KCJvbiIrYixkKX19LGIucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcilyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSk7YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudCgib24iK2IsYy5fd3JhcHBlcnx8Yyl9LGIuc3RvcEV2ZW50PWZ1bmN0aW9uKGEpe3JldHVybiBiLnN0b3BQcm9wYWdhdGlvbihhKSxiLnByZXZlbnREZWZhdWx0KGEpLCExfSxiLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbj9hLnN0b3BQcm9wYWdhdGlvbigpOmEuY2FuY2VsQnViYmxlPSEwfSxiLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9LGIuZ2V0RG9jdW1lbnRYPWZ1bmN0aW9uKGEpe3JldHVybiBhLmNsaWVudFg/YS5jbGllbnRYK2YuZ2V0UGFnZVNjcm9sbExlZnQoKTphLnBhZ2VYfSxiLmdldERvY3VtZW50WT1mdW5jdGlvbihhKXtyZXR1cm4gYS5jbGllbnRZP2EuY2xpZW50WStmLmdldFBhZ2VTY3JvbGxUb3AoKTphLnBhZ2VZfSxiLmdldEJ1dHRvbj1mdW5jdGlvbihhKXtyZXR1cm4gYS50eXBlPT0iZGJsY2xpY2siPzA6YS50eXBlPT0iY29udGV4dG1lbnUiPzI6YS5wcmV2ZW50RGVmYXVsdD9hLmJ1dHRvbjp7MTowLDI6Miw0OjF9W2EuYnV0dG9uXX0sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldENhcHR1cmU/Yi5jYXB0dXJlPWZ1bmN0aW9uKGEsYyxkKXtmdW5jdGlvbiBlKGEpe3JldHVybiBjKGEpLGIuc3RvcFByb3BhZ2F0aW9uKGEpfWZ1bmN0aW9uIGcoZSl7YyhlKSxmfHwoZj0hMCxkKGUpKSxiLnJlbW92ZUxpc3RlbmVyKGEsIm1vdXNlbW92ZSIsYyksYi5yZW1vdmVMaXN0ZW5lcihhLCJtb3VzZXVwIixnKSxiLnJlbW92ZUxpc3RlbmVyKGEsImxvc2VjYXB0dXJlIixnKSxhLnJlbGVhc2VDYXB0dXJlKCl9dmFyIGY9ITE7Yi5hZGRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGMpLGIuYWRkTGlzdGVuZXIoYSwibW91c2V1cCIsZyksYi5hZGRMaXN0ZW5lcihhLCJsb3NlY2FwdHVyZSIsZyksYS5zZXRDYXB0dXJlKCl9OmIuY2FwdHVyZT1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtiKGEpLGEuc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZShhKXtiJiZiKGEpLGMmJmMoYSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixkLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixlLCEwKSxhLnN0b3BQcm9wYWdhdGlvbigpfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZSwhMCl9LGIuYWRkTW91c2VXaGVlbExpc3RlbmVyPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9MCxlPWZ1bmN0aW9uKGEpe2lmKGEud2hlZWxEZWx0YSE9PXVuZGVmaW5lZCl7TWF0aC5hYnMoYS53aGVlbERlbHRhWSk+ZCYmKGQ9TWF0aC5hYnMoYS53aGVlbERlbHRhWSkpO2lmKGQ+NWUzKXZhciBiPTQwMDtlbHNlIHZhciBiPTg7YS53aGVlbERlbHRhWCE9PXVuZGVmaW5lZD8oYS53aGVlbFg9LWEud2hlZWxEZWx0YVgvYixhLndoZWVsWT0tYS53aGVlbERlbHRhWS9iKTooYS53aGVlbFg9MCxhLndoZWVsWT0tYS53aGVlbERlbHRhL2IpfWVsc2UgYS5heGlzJiZhLmF4aXM9PWEuSE9SSVpPTlRBTF9BWElTPyhhLndoZWVsWD0oYS5kZXRhaWx8fDApKjUsYS53aGVlbFk9MCk6KGEud2hlZWxYPTAsYS53aGVlbFk9KGEuZGV0YWlsfHwwKSo1KTtjKGEpfTtiLmFkZExpc3RlbmVyKGEsIkRPTU1vdXNlU2Nyb2xsIixlKSxiLmFkZExpc3RlbmVyKGEsIm1vdXNld2hlZWwiLGUpfSxiLmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXI9ZnVuY3Rpb24oYSxjLGQsZixnKXt2YXIgaD0wLGksaixrPWZ1bmN0aW9uKGEpe2grPTEsaD09MSYmKGk9YS5jbGllbnRYLGo9YS5jbGllbnRZLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPTB9LGZ8fDYwMCkpO3ZhciBlPWIuZ2V0QnV0dG9uKGEpPT1jO2lmKCFlfHxNYXRoLmFicyhhLmNsaWVudFgtaSk+NXx8TWF0aC5hYnMoYS5jbGllbnRZLWopPjUpaD0wO2g9PWQmJihoPTAsZyhhKSk7aWYoZSlyZXR1cm4gYi5wcmV2ZW50RGVmYXVsdChhKX07Yi5hZGRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGspLGUuaXNPbGRJRSYmYi5hZGRMaXN0ZW5lcihhLCJkYmxjbGljayIsayl9LGIuYWRkQ29tbWFuZEtleUxpc3RlbmVyPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yi5hZGRMaXN0ZW5lcjtpZihlLmlzT2xkR2Vja298fGUuaXNPcGVyYSl7dmFyIGY9bnVsbDtkKGEsImtleWRvd24iLGZ1bmN0aW9uKGEpe2Y9YS5rZXlDb2RlfSksZChhLCJrZXlwcmVzcyIsZnVuY3Rpb24oYSl7cmV0dXJuIGcoYyxhLGYpfSl9ZWxzZXt2YXIgaD1udWxsO2QoYSwia2V5ZG93biIsZnVuY3Rpb24oYSl7cmV0dXJuIGg9YS5rZXlJZGVudGlmaWVyfHxhLmtleUNvZGUsZyhjLGEsYS5rZXlDb2RlKX0pfX07aWYod2luZG93LnBvc3RNZXNzYWdlKXt2YXIgaD0xO2IubmV4dFRpY2s9ZnVuY3Rpb24oYSxjKXtjPWN8fHdpbmRvdzt2YXIgZD0iemVyby10aW1lb3V0LW1lc3NhZ2UtIitoO2IuYWRkTGlzdGVuZXIoYywibWVzc2FnZSIsZnVuY3Rpb24gZShmKXtmLmRhdGE9PWQmJihiLnN0b3BQcm9wYWdhdGlvbihmKSxiLnJlbW92ZUxpc3RlbmVyKGMsIm1lc3NhZ2UiLGUpLGEoKSl9KSxjLnBvc3RNZXNzYWdlKGQsIioiKX19ZWxzZSBiLm5leHRUaWNrPWZ1bmN0aW9uKGEsYil7Yj1ifHx3aW5kb3csd2luZG93LnNldFRpbWVvdXQoYSwwKX19KSxhY2UuZGVmaW5lKCJhY2UvbGliL2tleXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi9vb3AiKSxlPWZ1bmN0aW9uKCl7dmFyIGE9e01PRElGSUVSX0tFWVM6ezE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDIyNDoiTWV0YSJ9LEtFWV9NT0RTOntjdHJsOjEsYWx0OjIsb3B0aW9uOjIsc2hpZnQ6NCxtZXRhOjgsY29tbWFuZDo4fSxGVU5DVElPTl9LRVlTOns4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTM6IlJldHVybiIsMTk6IlBhdXNlIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludCIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsOTY6Ik51bXBhZDAiLDk3OiJOdW1wYWQxIiw5ODoiTnVtcGFkMiIsOTk6Ik51bXBhZDMiLDEwMDoiTnVtcGFkNCIsMTAxOiJOdW1wYWQ1IiwxMDI6Ik51bXBhZDYiLDEwMzoiTnVtcGFkNyIsMTA0OiJOdW1wYWQ4IiwxMDU6Ik51bXBhZDkiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtbG9jayIsMTQ1OiJTY3JvbGxsb2NrIn0sUFJJTlRBQkxFX0tFWVM6ezMyOiIgIiw0ODoiMCIsNDk6IjEiLDUwOiIyIiw1MToiMyIsNTI6IjQiLDUzOiI1Iiw1NDoiNiIsNTU6IjciLDU2OiI4Iiw1NzoiOSIsNTk6IjsiLDYxOiI9Iiw2NToiYSIsNjY6ImIiLDY3OiJjIiw2ODoiZCIsNjk6ImUiLDcwOiJmIiw3MToiZyIsNzI6ImgiLDczOiJpIiw3NDoiaiIsNzU6ImsiLDc2OiJsIiw3NzoibSIsNzg6Im4iLDc5OiJvIiw4MDoicCIsODE6InEiLDgyOiJyIiw4MzoicyIsODQ6InQiLDg1OiJ1Iiw4NjoidiIsODc6InciLDg4OiJ4Iiw4OToieSIsOTA6InoiLDEwNzoiKyIsMTA5OiItIiwxMTA6Ii4iLDE4ODoiLCIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjonIid9fTtmb3IodmFyIGIgaW4gYS5GVU5DVElPTl9LRVlTKXt2YXIgYz1hLkZVTkNUSU9OX0tFWVNbYl0udG9VcHBlckNhc2UoKTthW2NdPXBhcnNlSW50KGIsMTApfXJldHVybiBkLm1peGluKGEsYS5NT0RJRklFUl9LRVlTKSxkLm1peGluKGEsYS5QUklOVEFCTEVfS0VZUyksZC5taXhpbihhLGEuRlVOQ1RJT05fS0VZUyksYX0oKTtkLm1peGluKGIsZSksYi5rZXlDb2RlVG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuKGVbYV18fFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpLnRvTG93ZXJDYXNlKCl9fSksYWNlLmRlZmluZSgiYWNlL2xpYi9vb3AiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiLGIuaW5oZXJpdHM9ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe307cmV0dXJuIGZ1bmN0aW9uKGIsYyl7YS5wcm90b3R5cGU9Yy5wcm90b3R5cGUsYi5zdXBlcl89Yy5wcm90b3R5cGUsYi5wcm90b3R5cGU9bmV3IGEsYi5wcm90b3R5cGUuY29uc3RydWN0b3I9Yn19KCksYi5taXhpbj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBiKWFbY109YltjXX0sYi5pbXBsZW1lbnQ9ZnVuY3Rpb24oYSxjKXtiLm1peGluKGEsYyl9fSksYWNlLmRlZmluZSgiYWNlL2xpYi91c2VyYWdlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPShuYXZpZ2F0b3IucGxhdGZvcm0ubWF0Y2goL21hY3x3aW58bGludXgvaSl8fFsib3RoZXIiXSlbMF0udG9Mb3dlckNhc2UoKSxlPW5hdmlnYXRvci51c2VyQWdlbnQ7Yi5pc1dpbj1kPT0id2luIixiLmlzTWFjPWQ9PSJtYWMiLGIuaXNMaW51eD1kPT0ibGludXgiLGIuaXNJRT1uYXZpZ2F0b3IuYXBwTmFtZT09Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciImJnBhcnNlRmxvYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvTVNJRSAoWzAtOV0rW1wuMC05XSspLylbMV0pLGIuaXNPbGRJRT1iLmlzSUUmJmIuaXNJRTw5LGIuaXNHZWNrbz1iLmlzTW96aWxsYT13aW5kb3cuY29udHJvbGxlcnMmJndpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdD09PSJHZWNrbyIsYi5pc09sZEdlY2tvPWIuaXNHZWNrbyYmcGFyc2VJbnQoKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL3J2XDooXGQrKS8pfHxbXSlbMV0sMTApPDQsYi5pc09wZXJhPXdpbmRvdy5vcGVyYSYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5vcGVyYSk9PSJbb2JqZWN0IE9wZXJhXSIsYi5pc1dlYktpdD1wYXJzZUZsb2F0KGUuc3BsaXQoIldlYktpdC8iKVsxXSl8fHVuZGVmaW5lZCxiLmlzQ2hyb21lPXBhcnNlRmxvYXQoZS5zcGxpdCgiIENocm9tZS8iKVsxXSl8fHVuZGVmaW5lZCxiLmlzQUlSPWUuaW5kZXhPZigiQWRvYmVBSVIiKT49MCxiLmlzSVBhZD1lLmluZGV4T2YoImlQYWQiKT49MCxiLmlzVG91Y2hQYWQ9ZS5pbmRleE9mKCJUb3VjaFBhZCIpPj0wLGIuT1M9e0xJTlVYOiJMSU5VWCIsTUFDOiJNQUMiLFdJTkRPV1M6IldJTkRPV1MifSxiLmdldE9TPWZ1bmN0aW9uKCl7cmV0dXJuIGIuaXNNYWM/Yi5PUy5NQUM6Yi5pc0xpbnV4P2IuT1MuTElOVVg6Yi5PUy5XSU5ET1dTfX0pLGFjZS5kZWZpbmUoImFjZS9lZGl0b3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2ZpeG9sZGJyb3dzZXJzIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL3VzZXJhZ2VudCIsImFjZS9rZXlib2FyZC90ZXh0aW5wdXQiLCJhY2UvbW91c2UvbW91c2VfaGFuZGxlciIsImFjZS9tb3VzZS9mb2xkX2hhbmRsZXIiLCJhY2Uva2V5Ym9hcmQva2V5YmluZGluZyIsImFjZS9lZGl0X3Nlc3Npb24iLCJhY2Uvc2VhcmNoIiwiYWNlL3JhbmdlIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlciIsImFjZS9jb21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IixhKCIuL2xpYi9maXhvbGRicm93c2VycyIpO3ZhciBkPWEoIi4vbGliL29vcCIpLGU9YSgiLi9saWIvbGFuZyIpLGY9YSgiLi9saWIvdXNlcmFnZW50IiksZz1hKCIuL2tleWJvYXJkL3RleHRpbnB1dCIpLlRleHRJbnB1dCxoPWEoIi4vbW91c2UvbW91c2VfaGFuZGxlciIpLk1vdXNlSGFuZGxlcixpPWEoIi4vbW91c2UvZm9sZF9oYW5kbGVyIikuRm9sZEhhbmRsZXIsaj1hKCIuL2tleWJvYXJkL2tleWJpbmRpbmciKS5LZXlCaW5kaW5nLGs9YSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbixsPWEoIi4vc2VhcmNoIikuU2VhcmNoLG09YSgiLi9yYW5nZSIpLlJhbmdlLG49YSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixvPWEoIi4vY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyIikuQ29tbWFuZE1hbmFnZXIscD1hKCIuL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiKS5jb21tYW5kcyxxPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRDb250YWluZXJFbGVtZW50KCk7dGhpcy5jb250YWluZXI9Yyx0aGlzLnJlbmRlcmVyPWEsdGhpcy50ZXh0SW5wdXQ9bmV3IGcoYS5nZXRUZXh0QXJlYUNvbnRhaW5lcigpLHRoaXMpLHRoaXMua2V5QmluZGluZz1uZXcgaih0aGlzKSxmLmlzSVBhZHx8KHRoaXMuJG1vdXNlSGFuZGxlcj1uZXcgaCh0aGlzKSxuZXcgaSh0aGlzKSksdGhpcy4kYmxvY2tTY3JvbGxpbmc9MCx0aGlzLiRzZWFyY2g9KG5ldyBsKS5zZXQoe3dyYXA6ITB9KSx0aGlzLmNvbW1hbmRzPW5ldyBvKGYuaXNNYWM/Im1hYyI6IndpbiIscCksdGhpcy5zZXRTZXNzaW9uKGJ8fG5ldyBrKCIiKSl9OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLG4pLHRoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyPWZ1bmN0aW9uKGEpe3RoaXMua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIoYSl9LHRoaXMuZ2V0S2V5Ym9hcmRIYW5kbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5QmluZGluZy5nZXRLZXlib2FyZEhhbmRsZXIoKX0sdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKGEpe2lmKHRoaXMuc2Vzc2lvbj09YSlyZXR1cm47aWYodGhpcy5zZXNzaW9uKXt2YXIgYj10aGlzLnNlc3Npb247dGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy4kb25Eb2N1bWVudENoYW5nZSksdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZU1vZGUiLHRoaXMuJG9uQ2hhbmdlTW9kZSksdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRva2VuaXplclVwZGF0ZSIsdGhpcy4kb25Ub2tlbml6ZXJVcGRhdGUpLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VUYWJTaXplIix0aGlzLiRvbkNoYW5nZVRhYlNpemUpLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VXcmFwTGltaXQiLHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0KSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcE1vZGUiLHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUpLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJvbkNoYW5nZUZvbGQiLHRoaXMuJG9uQ2hhbmdlRm9sZCksdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUZyb250TWFya2VyIix0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQmFja01hcmtlciIsdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQnJlYWtwb2ludCIsdGhpcy4kb25DaGFuZ2VCcmVha3BvaW50KSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQW5ub3RhdGlvbiIsdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uKSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlT3ZlcndyaXRlIix0aGlzLiRvbkN1cnNvckNoYW5nZSksdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVNjcm9sbFRvcCIsdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UpLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VMZWZ0VG9wIix0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2UpO3ZhciBjPXRoaXMuc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUN1cnNvciIsdGhpcy4kb25DdXJzb3JDaGFuZ2UpLGMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIix0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSl9dGhpcy5zZXNzaW9uPWEsdGhpcy4kb25Eb2N1bWVudENoYW5nZT10aGlzLm9uRG9jdW1lbnRDaGFuZ2UuYmluZCh0aGlzKSxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy4kb25Eb2N1bWVudENoYW5nZSksdGhpcy5yZW5kZXJlci5zZXRTZXNzaW9uKGEpLHRoaXMuJG9uQ2hhbmdlTW9kZT10aGlzLm9uQ2hhbmdlTW9kZS5iaW5kKHRoaXMpLGEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlTW9kZSIsdGhpcy4kb25DaGFuZ2VNb2RlKSx0aGlzLiRvblRva2VuaXplclVwZGF0ZT10aGlzLm9uVG9rZW5pemVyVXBkYXRlLmJpbmQodGhpcyksYS5hZGRFdmVudExpc3RlbmVyKCJ0b2tlbml6ZXJVcGRhdGUiLHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlKSx0aGlzLiRvbkNoYW5nZVRhYlNpemU9dGhpcy5yZW5kZXJlci51cGRhdGVUZXh0LmJpbmQodGhpcy5yZW5kZXJlciksYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VUYWJTaXplIix0aGlzLiRvbkNoYW5nZVRhYlNpemUpLHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0PXRoaXMub25DaGFuZ2VXcmFwTGltaXQuYmluZCh0aGlzKSxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVdyYXBMaW1pdCIsdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQpLHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGU9dGhpcy5vbkNoYW5nZVdyYXBNb2RlLmJpbmQodGhpcyksYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VXcmFwTW9kZSIsdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSksdGhpcy4kb25DaGFuZ2VGb2xkPXRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcyksYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VGb2xkIix0aGlzLiRvbkNoYW5nZUZvbGQpLHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXI9dGhpcy5vbkNoYW5nZUZyb250TWFya2VyLmJpbmQodGhpcyksdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUZyb250TWFya2VyIix0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKSx0aGlzLiRvbkNoYW5nZUJhY2tNYXJrZXI9dGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQmFja01hcmtlciIsdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKSx0aGlzLiRvbkNoYW5nZUJyZWFrcG9pbnQ9dGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQnJlYWtwb2ludCIsdGhpcy4kb25DaGFuZ2VCcmVha3BvaW50KSx0aGlzLiRvbkNoYW5nZUFubm90YXRpb249dGhpcy5vbkNoYW5nZUFubm90YXRpb24uYmluZCh0aGlzKSx0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQW5ub3RhdGlvbiIsdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uKSx0aGlzLiRvbkN1cnNvckNoYW5nZT10aGlzLm9uQ3Vyc29yQ2hhbmdlLmJpbmQodGhpcyksdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZU92ZXJ3cml0ZSIsdGhpcy4kb25DdXJzb3JDaGFuZ2UpLHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlPXRoaXMub25TY3JvbGxUb3BDaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2Nyb2xsVG9wIix0aGlzLiRvblNjcm9sbFRvcENoYW5nZSksdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlPXRoaXMub25TY3JvbGxMZWZ0Q2hhbmdlLmJpbmQodGhpcyksdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVNjcm9sbExlZnQiLHRoaXMuJG9uU2Nyb2xsTGVmdENoYW5nZSksdGhpcy5zZWxlY3Rpb249YS5nZXRTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VDdXJzb3IiLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKSx0aGlzLiRvblNlbGVjdGlvbkNoYW5nZT10aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyksdGhpcy5zZWxlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIix0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSksdGhpcy5vbkNoYW5nZU1vZGUoKSx0aGlzLm9uQ3Vyc29yQ2hhbmdlKCksdGhpcy5vblNjcm9sbFRvcENoYW5nZSgpLHRoaXMub25TY3JvbGxMZWZ0Q2hhbmdlKCksdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpLHRoaXMub25DaGFuZ2VGcm9udE1hcmtlcigpLHRoaXMub25DaGFuZ2VCYWNrTWFya2VyKCksdGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQoKSx0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbigpLHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpJiZ0aGlzLnJlbmRlcmVyLmFkanVzdFdyYXBMaW1pdCgpLHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpLHRoaXMuX2VtaXQoImNoYW5nZVNlc3Npb24iLHtzZXNzaW9uOmEsb2xkU2Vzc2lvbjpifSl9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb259LHRoaXMuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9ufSx0aGlzLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIub25SZXNpemUoKX0sdGhpcy5zZXRUaGVtZT1mdW5jdGlvbihhKXt0aGlzLnJlbmRlcmVyLnNldFRoZW1lKGEpfSx0aGlzLmdldFRoZW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0VGhlbWUoKX0sdGhpcy5zZXRTdHlsZT1mdW5jdGlvbihhKXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEpfSx0aGlzLnVuc2V0U3R5bGU9ZnVuY3Rpb24oYSl7dGhpcy5yZW5kZXJlci51bnNldFN0eWxlKGEpfSx0aGlzLnNldEZvbnRTaXplPWZ1bmN0aW9uKGEpe3RoaXMuY29udGFpbmVyLnN0eWxlLmZvbnRTaXplPWEsdGhpcy5yZW5kZXJlci51cGRhdGVGb250U2l6ZSgpfSx0aGlzLiRoaWdobGlnaHRCcmFja2V0cz1mdW5jdGlvbigpe3RoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodCYmKHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0KSx0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQ9bnVsbCk7aWYodGhpcy4kaGlnaGxpZ2h0UGVuZGluZylyZXR1cm47dmFyIGE9dGhpczt0aGlzLiRoaWdobGlnaHRQZW5kaW5nPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLiRoaWdobGlnaHRQZW5kaW5nPSExO3ZhciBiPWEuc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KGEuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7aWYoYil7dmFyIGM9bmV3IG0oYi5yb3csYi5jb2x1bW4sYi5yb3csYi5jb2x1bW4rMSk7YS5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0PWEuc2Vzc2lvbi5hZGRNYXJrZXIoYywiYWNlX2JyYWNrZXQiLCJ0ZXh0Iil9fSwxMCl9LHRoaXMuZm9jdXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXthLnRleHRJbnB1dC5mb2N1cygpfSksdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX0sdGhpcy5pc0ZvY3VzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkKCl9LHRoaXMuYmx1cj1mdW5jdGlvbigpe3RoaXMudGV4dElucHV0LmJsdXIoKX0sdGhpcy5vbkZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5zaG93Q3Vyc29yKCksdGhpcy5yZW5kZXJlci52aXN1YWxpemVGb2N1cygpLHRoaXMuX2VtaXQoImZvY3VzIil9LHRoaXMub25CbHVyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCksdGhpcy5yZW5kZXJlci52aXN1YWxpemVCbHVyKCksdGhpcy5fZW1pdCgiYmx1ciIpfSx0aGlzLm9uRG9jdW1lbnRDaGFuZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhLGM9Yi5yYW5nZSxkO2Muc3RhcnQucm93PT1jLmVuZC5yb3cmJmIuYWN0aW9uIT0iaW5zZXJ0TGluZXMiJiZiLmFjdGlvbiE9InJlbW92ZUxpbmVzIj9kPWMuZW5kLnJvdzpkPUluZmluaXR5LHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXMoYy5zdGFydC5yb3csZCksdGhpcy5fZW1pdCgiY2hhbmdlIixhKSx0aGlzLm9uQ3Vyc29yQ2hhbmdlKCl9LHRoaXMub25Ub2tlbml6ZXJVcGRhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3RoaXMucmVuZGVyZXIudXBkYXRlTGluZXMoYi5maXJzdCxiLmxhc3QpfSx0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpKX0sdGhpcy5vblNjcm9sbExlZnRDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvWCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpKX0sdGhpcy5vbkN1cnNvckNoYW5nZT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCksdGhpcy4kYmxvY2tTY3JvbGxpbmd8fHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKSx0aGlzLnJlbmRlcmVyLm1vdmVUZXh0QXJlYVRvQ3Vyc29yKHRoaXMudGV4dElucHV0LmdldEVsZW1lbnQoKSksdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHMoKSx0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCl9LHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlc3Npb24oKTthLiRoaWdobGlnaHRMaW5lTWFya2VyJiZhLnJlbW92ZU1hcmtlcihhLiRoaWdobGlnaHRMaW5lTWFya2VyKSxhLiRoaWdobGlnaHRMaW5lTWFya2VyPW51bGw7aWYodGhpcy5nZXRIaWdobGlnaHRBY3RpdmVMaW5lKCkmJih0aGlzLmdldFNlbGVjdGlvblN0eWxlKCkhPSJsaW5lInx8IXRoaXMuc2VsZWN0aW9uLmlzTXVsdGlMaW5lKCkpKXt2YXIgYj10aGlzLmdldEN1cnNvclBvc2l0aW9uKCksYz10aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUoYi5yb3cpLGQ7Yz9kPW5ldyBtKGMuc3RhcnQucm93LDAsYy5lbmQucm93KzEsMCk6ZD1uZXcgbShiLnJvdywwLGIucm93KzEsMCksYS4kaGlnaGxpZ2h0TGluZU1hcmtlcj1hLmFkZE1hcmtlcihkLCJhY2VfYWN0aXZlX2xpbmUiLCJiYWNrZ3JvdW5kIil9fSx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0U2Vzc2lvbigpO2IuJHNlbGVjdGlvbk1hcmtlciYmYi5yZW1vdmVNYXJrZXIoYi4kc2VsZWN0aW9uTWFya2VyKSxiLiRzZWxlY3Rpb25NYXJrZXI9bnVsbDtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXt2YXIgYz10aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpLGQ9dGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpO2IuJHNlbGVjdGlvbk1hcmtlcj1iLmFkZE1hcmtlcihjLCJhY2Vfc2VsZWN0aW9uIixkKX1lbHNlIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTt0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQmJnRoaXMuc2Vzc2lvbi5nZXRNb2RlKCkuaGlnaGxpZ2h0U2VsZWN0aW9uKHRoaXMpfSx0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnVwZGF0ZUZyb250TWFya2VycygpfSx0aGlzLm9uQ2hhbmdlQmFja01hcmtlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKX0sdGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnNldEJyZWFrcG9pbnRzKHRoaXMuc2Vzc2lvbi5nZXRCcmVha3BvaW50cygpKX0sdGhpcy5vbkNoYW5nZUFubm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnNldEFubm90YXRpb25zKHRoaXMuc2Vzc2lvbi5nZXRBbm5vdGF0aW9ucygpKX0sdGhpcy5vbkNoYW5nZU1vZGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHQoKX0sdGhpcy5vbkNoYW5nZVdyYXBMaW1pdD1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpfSx0aGlzLm9uQ2hhbmdlV3JhcE1vZGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLm9uUmVzaXplKCEwKX0sdGhpcy5vbkNoYW5nZUZvbGQ9ZnVuY3Rpb24oKXt0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCksdGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCl9LHRoaXMuZ2V0Q29weVRleHQ9ZnVuY3Rpb24oKXt2YXIgYT0iIjtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpfHwoYT10aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSkpLHRoaXMuX2VtaXQoImNvcHkiLGEpLGF9LHRoaXMub25DdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLiRyZWFkT25seSlyZXR1cm47dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO3RoaXMuX2VtaXQoImN1dCIsYSksdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpfHwodGhpcy5zZXNzaW9uLnJlbW92ZShhKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCkpfSx0aGlzLmluc2VydD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnNlc3Npb24sYz1iLmdldE1vZGUoKSxkPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTtpZih0aGlzLmdldEJlaGF2aW91cnNFbmFibGVkKCkpe3ZhciBlPWMudHJhbnNmb3JtQWN0aW9uKGIuZ2V0U3RhdGUoZC5yb3cpLCJpbnNlcnRpb24iLHRoaXMsYixhKTtlJiYoYT1lLnRleHQpfWE9YS5yZXBsYWNlKCJcdCIsdGhpcy5zZXNzaW9uLmdldFRhYlN0cmluZygpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKWQ9dGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtlbHNlIGlmKHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKSl7dmFyIGY9bmV3IG0uZnJvbVBvaW50cyhkLGQpO2YuZW5kLmNvbHVtbis9YS5sZW5ndGgsdGhpcy5zZXNzaW9uLnJlbW92ZShmKX10aGlzLmNsZWFyU2VsZWN0aW9uKCk7dmFyIGc9ZC5jb2x1bW4saD1iLmdldFN0YXRlKGQucm93KSxpPWMuY2hlY2tPdXRkZW50KGgsYi5nZXRMaW5lKGQucm93KSxhKSxqPWIuZ2V0TGluZShkLnJvdyksaz1jLmdldE5leHRMaW5lSW5kZW50KGgsai5zbGljZSgwLGQuY29sdW1uKSxiLmdldFRhYlN0cmluZygpKSxsPWIuaW5zZXJ0KGQsYSk7ZSYmZS5zZWxlY3Rpb24mJihlLnNlbGVjdGlvbi5sZW5ndGg9PTI/dGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobmV3IG0oZC5yb3csZytlLnNlbGVjdGlvblswXSxkLnJvdyxnK2Uuc2VsZWN0aW9uWzFdKSk6dGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobmV3IG0oZC5yb3crZS5zZWxlY3Rpb25bMF0sZS5zZWxlY3Rpb25bMV0sZC5yb3crZS5zZWxlY3Rpb25bMl0sZS5zZWxlY3Rpb25bM10pKSk7dmFyIGg9Yi5nZXRTdGF0ZShkLnJvdyk7aWYoYi5nZXREb2N1bWVudCgpLmlzTmV3TGluZShhKSl7dGhpcy5tb3ZlQ3Vyc29yVG8oZC5yb3crMSwwKTt2YXIgbj1iLmdldFRhYlNpemUoKSxvPU51bWJlci5NQVhfVkFMVUU7Zm9yKHZhciBwPWQucm93KzE7cDw9bC5yb3c7KytwKXt2YXIgcT0wO2o9Yi5nZXRMaW5lKHApO2Zvcih2YXIgcj0wO3I8ai5sZW5ndGg7KytyKWlmKGouY2hhckF0KHIpPT0iXHQiKXErPW47ZWxzZSBpZihqLmNoYXJBdChyKT09IiAiKXErPTE7ZWxzZSBicmVhazsvW15cc10vLnRlc3QoaikmJihvPU1hdGgubWluKHEsbykpfWZvcih2YXIgcD1kLnJvdysxO3A8PWwucm93OysrcCl7dmFyIHM9bztqPWIuZ2V0TGluZShwKTtmb3IodmFyIHI9MDtyPGoubGVuZ3RoJiZzPjA7KytyKWouY2hhckF0KHIpPT0iXHQiP3MtPW46ai5jaGFyQXQocik9PSIgIiYmKHMtPTEpO2IucmVtb3ZlKG5ldyBtKHAsMCxwLHIpKX1iLmluZGVudFJvd3MoZC5yb3crMSxsLnJvdyxrKX1pJiZjLmF1dG9PdXRkZW50KGgsYixkLnJvdyl9LHRoaXMub25UZXh0SW5wdXQ9ZnVuY3Rpb24oYSxiKXtiJiZ0aGlzLl9lbWl0KCJwYXN0ZSIsYSksdGhpcy5rZXlCaW5kaW5nLm9uVGV4dElucHV0KGEsYil9LHRoaXMub25Db21tYW5kS2V5PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmtleUJpbmRpbmcub25Db21tYW5kS2V5KGEsYixjKX0sdGhpcy5zZXRPdmVyd3JpdGU9ZnVuY3Rpb24oYSl7dGhpcy5zZXNzaW9uLnNldE92ZXJ3cml0ZShhKX0sdGhpcy5nZXRPdmVyd3JpdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpfSx0aGlzLnRvZ2dsZU92ZXJ3cml0ZT1mdW5jdGlvbigpe3RoaXMuc2Vzc2lvbi50b2dnbGVPdmVyd3JpdGUoKX0sdGhpcy5zZXRTY3JvbGxTcGVlZD1mdW5jdGlvbihhKXt0aGlzLiRtb3VzZUhhbmRsZXIuc2V0U2Nyb2xsU3BlZWQoYSl9LHRoaXMuZ2V0U2Nyb2xsU3BlZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbW91c2VIYW5kbGVyLmdldFNjcm9sbFNwZWVkKCl9LHRoaXMuc2V0RHJhZ0RlbGF5PWZ1bmN0aW9uKGEpe3RoaXMuJG1vdXNlSGFuZGxlci5zZXREcmFnRGVsYXkoYSl9LHRoaXMuZ2V0RHJhZ0RlbGF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG1vdXNlSGFuZGxlci5nZXREcmFnRGVsYXkoKX0sdGhpcy4kc2VsZWN0aW9uU3R5bGU9ImxpbmUiLHRoaXMuc2V0U2VsZWN0aW9uU3R5bGU9ZnVuY3Rpb24oYSl7aWYodGhpcy4kc2VsZWN0aW9uU3R5bGU9PWEpcmV0dXJuO3RoaXMuJHNlbGVjdGlvblN0eWxlPWEsdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpLHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvblN0eWxlIix7ZGF0YTphfSl9LHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2VsZWN0aW9uU3R5bGV9LHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmU9ITAsdGhpcy5zZXRIaWdobGlnaHRBY3RpdmVMaW5lPWZ1bmN0aW9uKGEpe2lmKHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmU9PWEpcmV0dXJuO3RoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmU9YSx0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCl9LHRoaXMuZ2V0SGlnaGxpZ2h0QWN0aXZlTGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lfSx0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQ9ITAsdGhpcy5zZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQ9ZnVuY3Rpb24oYSl7aWYodGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkPT1hKXJldHVybjt0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQ9YSxhP3RoaXMuc2Vzc2lvbi5nZXRNb2RlKCkuaGlnaGxpZ2h0U2VsZWN0aW9uKHRoaXMpOnRoaXMuc2Vzc2lvbi5nZXRNb2RlKCkuY2xlYXJTZWxlY3Rpb25IaWdobGlnaHQodGhpcyl9LHRoaXMuZ2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZH0sdGhpcy5zZXRTaG93SW52aXNpYmxlcz1mdW5jdGlvbihhKXtpZih0aGlzLmdldFNob3dJbnZpc2libGVzKCk9PWEpcmV0dXJuO3RoaXMucmVuZGVyZXIuc2V0U2hvd0ludmlzaWJsZXMoYSl9LHRoaXMuZ2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTaG93SW52aXNpYmxlcygpfSx0aGlzLnNldFNob3dQcmludE1hcmdpbj1mdW5jdGlvbihhKXt0aGlzLnJlbmRlcmVyLnNldFNob3dQcmludE1hcmdpbihhKX0sdGhpcy5nZXRTaG93UHJpbnRNYXJnaW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTaG93UHJpbnRNYXJnaW4oKX0sdGhpcy5zZXRQcmludE1hcmdpbkNvbHVtbj1mdW5jdGlvbihhKXt0aGlzLnJlbmRlcmVyLnNldFByaW50TWFyZ2luQ29sdW1uKGEpfSx0aGlzLmdldFByaW50TWFyZ2luQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0UHJpbnRNYXJnaW5Db2x1bW4oKX0sdGhpcy4kcmVhZE9ubHk9ITEsdGhpcy5zZXRSZWFkT25seT1mdW5jdGlvbihhKXt0aGlzLiRyZWFkT25seT1hfSx0aGlzLmdldFJlYWRPbmx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlYWRPbmx5fSx0aGlzLiRtb2RlQmVoYXZpb3Vycz0hMCx0aGlzLnNldEJlaGF2aW91cnNFbmFibGVkPWZ1bmN0aW9uKGEpe3RoaXMuJG1vZGVCZWhhdmlvdXJzPWF9LHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbW9kZUJlaGF2aW91cnN9LHRoaXMuc2V0U2hvd0ZvbGRXaWRnZXRzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVuZGVyZXIuJGd1dHRlckxheWVyO2lmKGIuZ2V0U2hvd0ZvbGRXaWRnZXRzKCk9PWEpcmV0dXJuO3RoaXMucmVuZGVyZXIuJGd1dHRlckxheWVyLnNldFNob3dGb2xkV2lkZ2V0cyhhKSx0aGlzLiRzaG93Rm9sZFdpZGdldHM9YSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKX0sdGhpcy5nZXRTaG93Rm9sZFdpZGdldHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0U2hvd0ZvbGRXaWRnZXRzKCl9LHRoaXMucmVtb3ZlPWZ1bmN0aW9uKGEpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmKGE9PSJsZWZ0Ij90aGlzLnNlbGVjdGlvbi5zZWxlY3RMZWZ0KCk6dGhpcy5zZWxlY3Rpb24uc2VsZWN0UmlnaHQoKSk7dmFyIGI9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO2lmKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSl7dmFyIGM9dGhpcy5zZXNzaW9uLGQ9Yy5nZXRTdGF0ZShiLnN0YXJ0LnJvdyksZT1jLmdldE1vZGUoKS50cmFuc2Zvcm1BY3Rpb24oZCwiZGVsZXRpb24iLHRoaXMsYyxiKTtlJiYoYj1lKX10aGlzLnNlc3Npb24ucmVtb3ZlKGIpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5yZW1vdmVXb3JkUmlnaHQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRSaWdodCgpLHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMucmVtb3ZlV29yZExlZnQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRMZWZ0KCksdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5yZW1vdmVUb0xpbmVTdGFydD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZVN0YXJ0KCksdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5yZW1vdmVUb0xpbmVFbmQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdExpbmVFbmQoKTt2YXIgYT10aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7YS5zdGFydC5jb2x1bW49PWEuZW5kLmNvbHVtbiYmYS5zdGFydC5yb3c9PWEuZW5kLnJvdyYmKGEuZW5kLmNvbHVtbj0wLGEuZW5kLnJvdysrKSx0aGlzLnNlc3Npb24ucmVtb3ZlKGEpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5zcGxpdExpbmU9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCl8fCh0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdGhpcy5jbGVhclNlbGVjdGlvbigpKTt2YXIgYT10aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7dGhpcy5pbnNlcnQoIlxuIiksdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihhKX0sdGhpcy50cmFuc3Bvc2VMZXR0ZXJzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSlyZXR1cm47dmFyIGE9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLGI9YS5jb2x1bW47aWYoYj09PTApcmV0dXJuO3ZhciBjPXRoaXMuc2Vzc2lvbi5nZXRMaW5lKGEucm93KSxkLGU7YjxjLmxlbmd0aD8oZD1jLmNoYXJBdChiKStjLmNoYXJBdChiLTEpLGU9bmV3IG0oYS5yb3csYi0xLGEucm93LGIrMSkpOihkPWMuY2hhckF0KGItMSkrYy5jaGFyQXQoYi0yKSxlPW5ldyBtKGEucm93LGItMixhLnJvdyxiKSksdGhpcy5zZXNzaW9uLnJlcGxhY2UoZSxkKX0sdGhpcy50b0xvd2VyQ2FzZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTt2YXIgYj10aGlzLmdldFNlbGVjdGlvblJhbmdlKCksYz10aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKGIpO3RoaXMuc2Vzc2lvbi5yZXBsYWNlKGIsYy50b0xvd2VyQ2FzZSgpKSx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShhKX0sdGhpcy50b1VwcGVyQ2FzZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTt2YXIgYj10aGlzLmdldFNlbGVjdGlvblJhbmdlKCksYz10aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKGIpO3RoaXMuc2Vzc2lvbi5yZXBsYWNlKGIsYy50b1VwcGVyQ2FzZSgpKSx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShhKX0sdGhpcy5pbmRlbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlc3Npb24sYj10aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7aWYoIShiLnN0YXJ0LnJvdzxiLmVuZC5yb3d8fGIuc3RhcnQuY29sdW1uPGIuZW5kLmNvbHVtbikpe3ZhciBkO2lmKHRoaXMuc2Vzc2lvbi5nZXRVc2VTb2Z0VGFicygpKXt2YXIgZj1hLmdldFRhYlNpemUoKSxnPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxoPWEuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihnLnJvdyxnLmNvbHVtbiksaT1mLWglZjtkPWUuc3RyaW5nUmVwZWF0KCIgIixpKX1lbHNlIGQ9Ilx0IjtyZXR1cm4gdGhpcy5pbnNlcnQoZCl9dmFyIGM9dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7YS5pbmRlbnRSb3dzKGMuZmlyc3QsYy5sYXN0LCJcdCIpfSx0aGlzLmJsb2NrT3V0ZGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTt0aGlzLnNlc3Npb24ub3V0ZGVudFJvd3MoYS5nZXRSYW5nZSgpKX0sdGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlc3Npb24uZ2V0U3RhdGUodGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyksYj10aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTt0aGlzLnNlc3Npb24uZ2V0TW9kZSgpLnRvZ2dsZUNvbW1lbnRMaW5lcyhhLHRoaXMuc2Vzc2lvbixiLmZpcnN0LGIubGFzdCl9LHRoaXMucmVtb3ZlTGluZXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRnZXRTZWxlY3RlZFJvd3MoKSxiO2EuZmlyc3Q9PT0wfHxhLmxhc3QrMTx0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCk/Yj1uZXcgbShhLmZpcnN0LDAsYS5sYXN0KzEsMCk6Yj1uZXcgbShhLmZpcnN0LTEsdGhpcy5zZXNzaW9uLmdldExpbmUoYS5maXJzdC0xKS5sZW5ndGgsYS5sYXN0LHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGEubGFzdCkubGVuZ3RoKSx0aGlzLnNlc3Npb24ucmVtb3ZlKGIpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5tb3ZlTGluZXNEb3duPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUxpbmVzKGZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlTGluZXNEb3duKGEsYil9KX0sdGhpcy5tb3ZlTGluZXNVcD1mdW5jdGlvbigpe3RoaXMuJG1vdmVMaW5lcyhmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnNlc3Npb24ubW92ZUxpbmVzVXAoYSxiKX0pfSx0aGlzLm1vdmVUZXh0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuJHJlYWRPbmx5P251bGw6dGhpcy5zZXNzaW9uLm1vdmVUZXh0KGEsYil9LHRoaXMuY29weUxpbmVzVXA9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmR1cGxpY2F0ZUxpbmVzKGEsYiksMH0pfSx0aGlzLmNvcHlMaW5lc0Rvd249ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmR1cGxpY2F0ZUxpbmVzKGEsYil9KX0sdGhpcy4kbW92ZUxpbmVzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJGdldFNlbGVjdGVkUm93cygpLGM9dGhpcy5zZWxlY3Rpb247aWYoIWMuaXNNdWx0aUxpbmUoKSl2YXIgZD1jLmdldFJhbmdlKCksZT1jLmlzQmFja3dhcmRzKCk7dmFyIGY9YS5jYWxsKHRoaXMsYi5maXJzdCxiLmxhc3QpO2Q/KGQuc3RhcnQucm93Kz1mLGQuZW5kLnJvdys9ZixjLnNldFNlbGVjdGlvblJhbmdlKGQsZSkpOihjLnNldFNlbGVjdGlvbkFuY2hvcihiLmxhc3QrZisxLDApLGMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKXtjLm1vdmVDdXJzb3JUbyhiLmZpcnN0K2YsMCl9KSl9LHRoaXMuJGdldFNlbGVjdGVkUm93cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5jb2xsYXBzZVJvd3MoKTtyZXR1cm57Zmlyc3Q6YS5zdGFydC5yb3csbGFzdDphLmVuZC5yb3d9fSx0aGlzLm9uQ29tcG9zaXRpb25TdGFydD1mdW5jdGlvbihhKXt0aGlzLnJlbmRlcmVyLnNob3dDb21wb3NpdGlvbih0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpfSx0aGlzLm9uQ29tcG9zaXRpb25VcGRhdGU9ZnVuY3Rpb24oYSl7dGhpcy5yZW5kZXJlci5zZXRDb21wb3NpdGlvblRleHQoYSl9LHRoaXMub25Db21wb3NpdGlvbkVuZD1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuaGlkZUNvbXBvc2l0aW9uKCl9LHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0Rmlyc3RWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRMYXN0VmlzaWJsZVJvdygpfSx0aGlzLmlzUm93VmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4gYT49dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSYmYTw9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfSx0aGlzLmlzUm93RnVsbHlWaXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiBhPj10aGlzLnJlbmRlcmVyLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCkmJmE8PXRoaXMucmVuZGVyZXIuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLiRnZXRWaXNpYmxlUm93Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxCb3R0b21Sb3coKS10aGlzLnJlbmRlcmVyLmdldFNjcm9sbFRvcFJvdygpKzF9LHRoaXMuJGdldFBhZ2VEb3duUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsQm90dG9tUm93KCl9LHRoaXMuJGdldFBhZ2VVcFJvdz1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsVG9wUm93KCksYj10aGlzLnJlbmRlcmVyLmdldFNjcm9sbEJvdHRvbVJvdygpO3JldHVybiBhLShiLWEpfSx0aGlzLnNlbGVjdFBhZ2VEb3duPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZ2V0UGFnZURvd25Sb3coKStNYXRoLmZsb29yKHRoaXMuJGdldFZpc2libGVSb3dDb3VudCgpLzIpO3RoaXMuc2Nyb2xsUGFnZURvd24oKTt2YXIgYj10aGlzLmdldFNlbGVjdGlvbigpLGM9dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihiLmdldFNlbGVjdGlvbkxlYWQoKSksZD10aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGEsYy5jb2x1bW4pO2Iuc2VsZWN0VG8oZC5yb3csZC5jb2x1bW4pfSx0aGlzLnNlbGVjdFBhZ2VVcD1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsVG9wUm93KCktdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxCb3R0b21Sb3coKSxiPXRoaXMuJGdldFBhZ2VVcFJvdygpK01hdGgucm91bmQoYS8yKTt0aGlzLnNjcm9sbFBhZ2VVcCgpO3ZhciBjPXRoaXMuZ2V0U2VsZWN0aW9uKCksZD10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGMuZ2V0U2VsZWN0aW9uTGVhZCgpKSxlPXRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oYixkLmNvbHVtbik7Yy5zZWxlY3RUbyhlLnJvdyxlLmNvbHVtbil9LHRoaXMuZ290b1BhZ2VEb3duPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZ2V0UGFnZURvd25Sb3coKSxiPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25TY3JlZW4oKS5jb2x1bW47dGhpcy5zY3JvbGxUb1JvdyhhKSx0aGlzLmdldFNlbGVjdGlvbigpLm1vdmVDdXJzb3JUb1NjcmVlbihhLGIpfSx0aGlzLmdvdG9QYWdlVXA9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRnZXRQYWdlVXBSb3coKSxiPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25TY3JlZW4oKS5jb2x1bW47dGhpcy5zY3JvbGxUb1JvdyhhKSx0aGlzLmdldFNlbGVjdGlvbigpLm1vdmVDdXJzb3JUb1NjcmVlbihhLGIpfSx0aGlzLnNjcm9sbFBhZ2VEb3duPWZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUb1Jvdyh0aGlzLiRnZXRQYWdlRG93blJvdygpKX0sdGhpcy5zY3JvbGxQYWdlVXA9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvUm93KHRoaXMuJGdldFBhZ2VVcFJvdygpKX0sdGhpcy5zY3JvbGxUb1Jvdz1mdW5jdGlvbihhKXt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvUm93KGEpfSx0aGlzLnNjcm9sbFRvTGluZT1mdW5jdGlvbihhLGIpe3RoaXMucmVuZGVyZXIuc2Nyb2xsVG9MaW5lKGEsYil9LHRoaXMuY2VudGVyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLGI9TWF0aC5mbG9vcihhLnN0YXJ0LnJvdysoYS5lbmQucm93LWEuc3RhcnQucm93KS8yKTt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvTGluZShiLCEwKX0sdGhpcy5nZXRDdXJzb3JQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5nZXRDdXJzb3IoKX0sdGhpcy5nZXRDdXJzb3JQb3NpdGlvblNjcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSl9LHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXt0aGlzLiRibG9ja1Njcm9sbGluZys9MSx0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwoKSx0aGlzLiRibG9ja1Njcm9sbGluZy09MX0sdGhpcy5jbGVhclNlbGVjdGlvbj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubW92ZUN1cnNvclRvPWZ1bmN0aW9uKGEsYil7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKGEsYil9LHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb249ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclRvUG9zaXRpb24oYSl9LHRoaXMuanVtcFRvTWF0Y2hpbmc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEN1cnNvclBvc2l0aW9uKCksYj10aGlzLnNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldChhKTtifHwoYS5jb2x1bW4rPTEsYj10aGlzLnNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldChhKSksYnx8KGEuY29sdW1uLT0yLGI9dGhpcy5zZXNzaW9uLmZpbmRNYXRjaGluZ0JyYWNrZXQoYSkpLGImJih0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5tb3ZlQ3Vyc29yVG8oYi5yb3csYi5jb2x1bW4pKX0sdGhpcy5nb3RvTGluZT1mdW5jdGlvbihhLGIpe3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZXNzaW9uLnVuZm9sZCh7cm93OmEtMSxjb2x1bW46Ynx8MH0pLHRoaXMuJGJsb2NrU2Nyb2xsaW5nKz0xLHRoaXMubW92ZUN1cnNvclRvKGEtMSxifHwwKSx0aGlzLiRibG9ja1Njcm9sbGluZy09MSx0aGlzLmlzUm93RnVsbHlWaXNpYmxlKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3cpfHx0aGlzLnNjcm9sbFRvTGluZShhLCEwKX0sdGhpcy5uYXZpZ2F0ZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMubW92ZUN1cnNvclRvKGEsYil9LHRoaXMubmF2aWdhdGVVcD1mdW5jdGlvbihhKXt0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLGE9YXx8MSx0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkoLWEsMCl9LHRoaXMubmF2aWdhdGVEb3duPWZ1bmN0aW9uKGEpe3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksYT1hfHwxLHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeShhLDApfSx0aGlzLm5hdmlnYXRlTGVmdD1mdW5jdGlvbihhKXtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXt2YXIgYj10aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7dGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihiKX1lbHNle2E9YXx8MTt3aGlsZShhLS0pdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxlZnQoKX10aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVSaWdodD1mdW5jdGlvbihhKXtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXt2YXIgYj10aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuZW5kO3RoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oYil9ZWxzZXthPWF8fDE7d2hpbGUoYS0tKXRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JSaWdodCgpfXRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZUxpbmVTdGFydD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JMaW5lU3RhcnQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVMaW5lRW5kPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxpbmVFbmQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVGaWxlRW5kPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckZpbGVFbmQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVGaWxlU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZVN0YXJ0KCksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLm5hdmlnYXRlV29yZFJpZ2h0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvcldvcmRSaWdodCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZVdvcmRMZWZ0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvcldvcmRMZWZ0KCksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlcGxhY2U9ZnVuY3Rpb24oYSxiKXtiJiZ0aGlzLiRzZWFyY2guc2V0KGIpO3ZhciBjPXRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7aWYoIWMpcmV0dXJuO3RoaXMuJHRyeVJlcGxhY2UoYyxhKSxjIT09bnVsbCYmdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoYyl9LHRoaXMucmVwbGFjZUFsbD1mdW5jdGlvbihhLGIpe2ImJnRoaXMuJHNlYXJjaC5zZXQoYik7dmFyIGM9dGhpcy4kc2VhcmNoLmZpbmRBbGwodGhpcy5zZXNzaW9uKTtpZighYy5sZW5ndGgpcmV0dXJuO3ZhciBkPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTt0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKDAsMCksdGhpcy4kYmxvY2tTY3JvbGxpbmcrPTE7Zm9yKHZhciBlPWMubGVuZ3RoLTE7ZT49MDstLWUpdGhpcy4kdHJ5UmVwbGFjZShjW2VdLGEpO3RoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGQpLHRoaXMuJGJsb2NrU2Nyb2xsaW5nLT0xfSx0aGlzLiR0cnlSZXBsYWNlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShhKTtyZXR1cm4gYj10aGlzLiRzZWFyY2gucmVwbGFjZShjLGIpLGIhPT1udWxsPyhhLmVuZD10aGlzLnNlc3Npb24ucmVwbGFjZShhLGIpLGEpOm51bGx9LHRoaXMuZ2V0TGFzdFNlYXJjaE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2VhcmNoLmdldE9wdGlvbnMoKX0sdGhpcy5maW5kPWZ1bmN0aW9uKGEsYil7dGhpcy5jbGVhclNlbGVjdGlvbigpLGI9Ynx8e30sYi5uZWVkbGU9YSx0aGlzLiRzZWFyY2guc2V0KGIpLHRoaXMuJGZpbmQoKX0sdGhpcy5maW5kTmV4dD1mdW5jdGlvbihhKXthPWF8fHt9LHR5cGVvZiBhLmJhY2t3YXJkcz09InVuZGVmaW5lZCImJihhLmJhY2t3YXJkcz0hMSksdGhpcy4kc2VhcmNoLnNldChhKSx0aGlzLiRmaW5kKCl9LHRoaXMuZmluZFByZXZpb3VzPWZ1bmN0aW9uKGEpe2E9YXx8e30sdHlwZW9mIGEuYmFja3dhcmRzPT0idW5kZWZpbmVkIiYmKGEuYmFja3dhcmRzPSEwKSx0aGlzLiRzZWFyY2guc2V0KGEpLHRoaXMuJGZpbmQoKX0sdGhpcy4kZmluZD1mdW5jdGlvbihhKXt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCl8fHRoaXMuJHNlYXJjaC5zZXQoe25lZWRsZTp0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSl9KSx0eXBlb2YgYSE9InVuZGVmaW5lZCImJnRoaXMuJHNlYXJjaC5zZXQoe2JhY2t3YXJkczphfSk7dmFyIGI9dGhpcy4kc2VhcmNoLmZpbmQodGhpcy5zZXNzaW9uKTtiJiYodGhpcy5zZXNzaW9uLnVuZm9sZChiKSx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShiKSl9LHRoaXMudW5kbz1mdW5jdGlvbigpe3RoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLnVuZG8oKX0sdGhpcy5yZWRvPWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkucmVkbygpfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLmRlc3Ryb3koKX19KSkuY2FsbChxLnByb3RvdHlwZSksYi5FZGl0b3I9cX0pLGFjZS5kZWZpbmUoImFjZS9saWIvbGFuZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCIsYi5zdHJpbmdSZXZlcnNlPWZ1bmN0aW9uKGEpe3JldHVybiBhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIil9LGIuc3RyaW5nUmVwZWF0PWZ1bmN0aW9uKGEsYil7cmV0dXJuKG5ldyBBcnJheShiKzEpKS5qb2luKGEpfTt2YXIgZD0vXlxzXHMqLyxlPS9cc1xzKiQvO2Iuc3RyaW5nVHJpbUxlZnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShkLCIiKX0sYi5zdHJpbmdUcmltUmlnaHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShlLCIiKX0sYi5jb3B5T2JqZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbY109YVtjXTtyZXR1cm4gYn0sYi5jb3B5QXJyYXk9ZnVuY3Rpb24oYSl7dmFyIGI9W107Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWFbY10mJnR5cGVvZiBhW2NdPT0ib2JqZWN0Ij9iW2NdPXRoaXMuY29weU9iamVjdChhW2NdKTpiW2NdPWFbY107cmV0dXJuIGJ9LGIuZGVlcENvcHk9ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGEhPSJvYmplY3QiKXJldHVybiBhO3ZhciBiPWEuY29uc3RydWN0b3IoKTtmb3IodmFyIGMgaW4gYSl0eXBlb2YgYVtjXT09Im9iamVjdCI/YltjXT10aGlzLmRlZXBDb3B5KGFbY10pOmJbY109YVtjXTtyZXR1cm4gYn0sYi5hcnJheVRvTWFwPWZ1bmN0aW9uKGEpe3ZhciBiPXt9O2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWJbYVtjXV09MTtyZXR1cm4gYn0sYi5hcnJheVJlbW92ZT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2M8PWEubGVuZ3RoO2MrKyliPT09YVtjXSYmYS5zcGxpY2UoYywxKX0sYi5lc2NhcGVSZWdFeHA9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvKFsuKis/XiR7fSgpfFtcXVwvXFxdKS9nLCJcXCQxIil9LGIuZGVmZXJyZWRDYWxsPWZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsYz1mdW5jdGlvbigpe2I9bnVsbCxhKCl9LGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuY2FuY2VsKCksYj1zZXRUaW1lb3V0KGMsYXx8MCksZH07cmV0dXJuIGQuc2NoZWR1bGU9ZCxkLmNhbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWwoKSxhKCksZH0sZC5jYW5jZWw9ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KGIpLGI9bnVsbCxkfSxkfX0pLGFjZS5kZWZpbmUoImFjZS9rZXlib2FyZC90ZXh0aW5wdXQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2V2ZW50IiksZT1hKCIuLi9saWIvdXNlcmFnZW50IiksZj1hKCIuLi9saWIvZG9tIiksZz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGwoKXt0cnl7Yy5zZWxlY3QoKX1jYXRjaChhKXt9fWZ1bmN0aW9uIG0oYSl7aWYoIWkpe3ZhciBkPWF8fGMudmFsdWU7aWYoZCl7ZC5jaGFyQ29kZUF0KGQubGVuZ3RoLTEpPT1nLmNoYXJDb2RlQXQoMCk/KGQ9ZC5zbGljZSgwLC0xKSxkJiZiLm9uVGV4dElucHV0KGQsaikpOmIub25UZXh0SW5wdXQoZCxqKTtpZighdigpKXJldHVybiExfX1pPSExLGo9ITEsYy52YWx1ZT1nLGwoKX1mdW5jdGlvbiB2KCl7cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1jfXZhciBjPWYuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtlLmlzVG91Y2hQYWQmJmMuc2V0QXR0cmlidXRlKCJ4LXBhbG0tZGlzYWJsZS1hdXRvLWNhcCIsITApLGMuc3R5bGUubGVmdD0iLTEwMDAwcHgiLGMuc3R5bGUucG9zaXRpb249ImZpeGVkIixhLmluc2VydEJlZm9yZShjLGEuZmlyc3RDaGlsZCk7dmFyIGc9U3RyaW5nLmZyb21DaGFyQ29kZSgwKTttKCk7dmFyIGg9ITEsaT0hMSxqPSExLGs9IiIsbj1mdW5jdGlvbihhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aHx8bShhLmRhdGEpfSwwKX0sbz1mdW5jdGlvbihhKXtpZihlLmlzT2xkSUUmJmMudmFsdWUuY2hhckNvZGVBdCgwKT4xMjgpcmV0dXJuO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtofHxtKCl9LDApfSxwPWZ1bmN0aW9uKGEpe2g9ITAsYi5vbkNvbXBvc2l0aW9uU3RhcnQoKSxlLmlzR2Vja298fHNldFRpbWVvdXQocSwwKX0scT1mdW5jdGlvbigpe2lmKCFoKXJldHVybjtiLm9uQ29tcG9zaXRpb25VcGRhdGUoYy52YWx1ZSl9LHI9ZnVuY3Rpb24oYSl7aD0hMSxiLm9uQ29tcG9zaXRpb25FbmQoKX0scz1mdW5jdGlvbihhKXtpPSEwO3ZhciBkPWIuZ2V0Q29weVRleHQoKTtkP2MudmFsdWU9ZDphLnByZXZlbnREZWZhdWx0KCksbCgpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXttKCl9LDApfSx0PWZ1bmN0aW9uKGEpe2k9ITA7dmFyIGQ9Yi5nZXRDb3B5VGV4dCgpO2Q/KGMudmFsdWU9ZCxiLm9uQ3V0KCkpOmEucHJldmVudERlZmF1bHQoKSxsKCksc2V0VGltZW91dChmdW5jdGlvbigpe20oKX0sMCl9O2QuYWRkQ29tbWFuZEtleUxpc3RlbmVyKGMsYi5vbkNvbW1hbmRLZXkuYmluZChiKSk7aWYoZS5pc09sZElFKXt2YXIgdT17MTM6MSwyNzoxfTtkLmFkZExpc3RlbmVyKGMsImtleXVwIixmdW5jdGlvbihhKXtoJiYoIWMudmFsdWV8fHVbYS5rZXlDb2RlXSkmJnNldFRpbWVvdXQociwwKTtpZigoYy52YWx1ZS5jaGFyQ29kZUF0KDApfDApPDEyOSlyZXR1cm47aD9xKCk6cCgpfSl9Im9ucHJvcGVydHljaGFuZ2UiaW4gYyYmISgib25pbnB1dCJpbiBjKT9kLmFkZExpc3RlbmVyKGMsInByb3BlcnR5Y2hhbmdlIixvKTpkLmFkZExpc3RlbmVyKGMsImlucHV0IixuKSxkLmFkZExpc3RlbmVyKGMsInBhc3RlIixmdW5jdGlvbihhKXtqPSEwLGEuY2xpcGJvYXJkRGF0YSYmYS5jbGlwYm9hcmREYXRhLmdldERhdGE/KG0oYS5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKSksYS5wcmV2ZW50RGVmYXVsdCgpKTpvKCl9KSwib25iZWZvcmVjb3B5ImluIGMmJnR5cGVvZiBjbGlwYm9hcmREYXRhIT0idW5kZWZpbmVkIj8oZC5hZGRMaXN0ZW5lcihjLCJiZWZvcmVjb3B5IixmdW5jdGlvbihhKXt2YXIgYz1iLmdldENvcHlUZXh0KCk7Yz9jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLGMpOmEucHJldmVudERlZmF1bHQoKX0pLGQuYWRkTGlzdGVuZXIoYSwia2V5ZG93biIsZnVuY3Rpb24oYSl7aWYoYS5jdHJsS2V5JiZhLmtleUNvZGU9PTg4KXt2YXIgYz1iLmdldENvcHlUZXh0KCk7YyYmKGNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsYyksYi5vbkN1dCgpKSxkLnByZXZlbnREZWZhdWx0KGEpfX0pKTooZC5hZGRMaXN0ZW5lcihjLCJjb3B5IixzKSxkLmFkZExpc3RlbmVyKGMsImN1dCIsdCkpLGQuYWRkTGlzdGVuZXIoYywiY29tcG9zaXRpb25zdGFydCIscCksZS5pc0dlY2tvJiZkLmFkZExpc3RlbmVyKGMsInRleHQiLHEpLGUuaXNXZWJLaXQmJmQuYWRkTGlzdGVuZXIoYywia2V5dXAiLHEpLGQuYWRkTGlzdGVuZXIoYywiY29tcG9zaXRpb25lbmQiLHIpLGQuYWRkTGlzdGVuZXIoYywiYmx1ciIsZnVuY3Rpb24oKXtiLm9uQmx1cigpfSksZC5hZGRMaXN0ZW5lcihjLCJmb2N1cyIsZnVuY3Rpb24oKXtiLm9uRm9jdXMoKSxsKCl9KSx0aGlzLmZvY3VzPWZ1bmN0aW9uKCl7Yi5vbkZvY3VzKCksbCgpLGMuZm9jdXMoKX0sdGhpcy5ibHVyPWZ1bmN0aW9uKCl7Yy5ibHVyKCl9LHRoaXMuaXNGb2N1c2VkPXYsdGhpcy5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMub25Db250ZXh0TWVudT1mdW5jdGlvbihhLGIpe2EmJihrfHwoaz1jLnN0eWxlLmNzc1RleHQpLGMuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246Zml4ZWQ7IHotaW5kZXg6MTAwMDtsZWZ0OiIrKGEueC0yKSsicHg7IHRvcDoiKyhhLnktMikrInB4OyIpLGImJihjLnZhbHVlPSIiKX0sdGhpcy5vbkNvbnRleHRNZW51Q2xvc2U9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ayYmKGMuc3R5bGUuY3NzVGV4dD1rLGs9IiIpLG0oKX0sMCl9fTtiLlRleHRJbnB1dD1nfSksYWNlLmRlZmluZSgiYWNlL21vdXNlL21vdXNlX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMiLCJhY2UvbW91c2UvZGVmYXVsdF9ndXR0ZXJfaGFuZGxlciIsImFjZS9tb3VzZS9tb3VzZV9ldmVudCJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2V2ZW50IiksZT1hKCIuL2RlZmF1bHRfaGFuZGxlcnMiKS5EZWZhdWx0SGFuZGxlcnMsZj1hKCIuL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXIiKS5HdXR0ZXJIYW5kbGVyLGc9YSgiLi9tb3VzZV9ldmVudCIpLk1vdXNlRXZlbnQsaD1mdW5jdGlvbihhKXt0aGlzLmVkaXRvcj1hLG5ldyBlKGEpLG5ldyBmKGEpLGQuYWRkTGlzdGVuZXIoYS5jb250YWluZXIsIm1vdXNlZG93biIsZnVuY3Rpb24oYil7cmV0dXJuIGEuZm9jdXMoKSxkLnByZXZlbnREZWZhdWx0KGIpfSksZC5hZGRMaXN0ZW5lcihhLmNvbnRhaW5lciwic2VsZWN0c3RhcnQiLGZ1bmN0aW9uKGEpe3JldHVybiBkLnByZXZlbnREZWZhdWx0KGEpfSk7dmFyIGI9YS5yZW5kZXJlci5nZXRNb3VzZUV2ZW50VGFyZ2V0KCk7ZC5hZGRMaXN0ZW5lcihiLCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywibW91c2Vkb3duIikpLGQuYWRkTGlzdGVuZXIoYiwiY2xpY2siLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywiY2xpY2siKSksZC5hZGRMaXN0ZW5lcihiLCJtb3VzZW1vdmUiLHRoaXMub25Nb3VzZU1vdmUuYmluZCh0aGlzLCJtb3VzZW1vdmUiKSksZC5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyKGIsMCwyLDUwMCx0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsImRibGNsaWNrIikpLGQuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lcihiLDAsMyw2MDAsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJ0cmlwbGVjbGljayIpKSxkLmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXIoYiwwLDQsNjAwLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywicXVhZGNsaWNrIikpLGQuYWRkTW91c2VXaGVlbExpc3RlbmVyKGEuY29udGFpbmVyLHRoaXMub25Nb3VzZVdoZWVsLmJpbmQodGhpcywibW91c2V3aGVlbCIpKTt2YXIgYz1hLnJlbmRlcmVyLiRndXR0ZXI7ZC5hZGRMaXN0ZW5lcihjLCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywiZ3V0dGVybW91c2Vkb3duIikpLGQuYWRkTGlzdGVuZXIoYywiY2xpY2siLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywiZ3V0dGVyY2xpY2siKSksZC5hZGRMaXN0ZW5lcihjLCJkYmxjbGljayIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJndXR0ZXJkYmxjbGljayIpKSxkLmFkZExpc3RlbmVyKGMsIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMsImd1dHRlciIpKX07KChmdW5jdGlvbigpe3RoaXMuJHNjcm9sbFNwZWVkPTEsdGhpcy5zZXRTY3JvbGxTcGVlZD1mdW5jdGlvbihhKXt0aGlzLiRzY3JvbGxTcGVlZD1hfSx0aGlzLmdldFNjcm9sbFNwZWVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbFNwZWVkfSx0aGlzLm9uTW91c2VFdmVudD1mdW5jdGlvbihhLGIpe3RoaXMuZWRpdG9yLl9lbWl0KGEsbmV3IGcoYix0aGlzLmVkaXRvcikpfSx0aGlzLiRkcmFnRGVsYXk9MjUwLHRoaXMuc2V0RHJhZ0RlbGF5PWZ1bmN0aW9uKGEpe3RoaXMuJGRyYWdEZWxheT1hfSx0aGlzLmdldERyYWdEZWxheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkcmFnRGVsYXl9LHRoaXMub25Nb3VzZU1vdmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeSYmdGhpcy5lZGl0b3IuX2V2ZW50UmVnaXN0cnkubW91c2Vtb3ZlO2lmKCFjfHwhYy5sZW5ndGgpcmV0dXJuO3RoaXMuZWRpdG9yLl9lbWl0KGEsbmV3IGcoYix0aGlzLmVkaXRvcikpfSx0aGlzLm9uTW91c2VXaGVlbD1mdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBnKGIsdGhpcy5lZGl0b3IpO2Muc3BlZWQ9dGhpcy4kc2Nyb2xsU3BlZWQqMixjLndoZWVsWD1iLndoZWVsWCxjLndoZWVsWT1iLndoZWVsWSx0aGlzLmVkaXRvci5fZW1pdChhLGMpfX0pKS5jYWxsKGgucHJvdG90eXBlKSxiLk1vdXNlSGFuZGxlcj1ofSksYWNlLmRlZmluZSgiYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2Jyb3dzZXJfZm9jdXMiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gayhhKXt0aGlzLmVkaXRvcj1hLHRoaXMuJGNsaWNrU2VsZWN0aW9uPW51bGwsdGhpcy5icm93c2VyRm9jdXM9bmV3IGYsYS5zZXREZWZhdWx0SGFuZGxlcigibW91c2Vkb3duIix0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcykpLGEuc2V0RGVmYXVsdEhhbmRsZXIoImRibGNsaWNrIix0aGlzLm9uRG91YmxlQ2xpY2suYmluZCh0aGlzKSksYS5zZXREZWZhdWx0SGFuZGxlcigidHJpcGxlY2xpY2siLHRoaXMub25UcmlwbGVDbGljay5iaW5kKHRoaXMpKSxhLnNldERlZmF1bHRIYW5kbGVyKCJxdWFkY2xpY2siLHRoaXMub25RdWFkQ2xpY2suYmluZCh0aGlzKSksYS5zZXREZWZhdWx0SGFuZGxlcigibW91c2V3aGVlbCIsdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKX1mdW5jdGlvbiBsKGEsYixjLGQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coYy1hLDIpK01hdGgucG93KGQtYiwyKSl9InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9ldmVudCIpLGU9YSgiLi4vbGliL2RvbSIpLGY9YSgiLi4vbGliL2Jyb3dzZXJfZm9jdXMiKS5Ccm93c2VyRm9jdXMsZz0wLGg9MSxpPTIsaj01OygoZnVuY3Rpb24oKXt0aGlzLm9uTW91c2VEb3duPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEMoYil7YS5nZXRTaGlmdEtleSgpP20uc2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oYik6bi4kY2xpY2tTZWxlY3Rpb258fChtLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGIpLG0uc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKGIucm93LGIuY29sdW1uKSkscT1ofXZhciBiPWEuaW5TZWxlY3Rpb24oKSxjPWEucGFnZVgsZj1hLnBhZ2VZLGs9YS5nZXREb2N1bWVudFBvc2l0aW9uKCksbT10aGlzLmVkaXRvcixuPXRoaXMsbz1tLmdldFNlbGVjdGlvblJhbmdlKCkscD1vLmlzRW1wdHkoKSxxPWc7aWYoYiYmKCF0aGlzLmJyb3dzZXJGb2N1cy5pc0ZvY3VzZWQoKXx8KG5ldyBEYXRlKS5nZXRUaW1lKCktdGhpcy5icm93c2VyRm9jdXMubGFzdEZvY3VzPDIwfHwhbS5pc0ZvY3VzZWQoKSkpe20uZm9jdXMoKTtyZXR1cm59dmFyIHI9YS5nZXRCdXR0b24oKTtpZihyIT09MCl7cCYmbS5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihrKSxyPT0yJiYobS50ZXh0SW5wdXQub25Db250ZXh0TWVudSh7eDphLmNsaWVudFgseTphLmNsaWVudFl9LHApLGQuY2FwdHVyZShtLmNvbnRhaW5lcixmdW5jdGlvbigpe30sbS50ZXh0SW5wdXQub25Db250ZXh0TWVudUNsb3NlKSk7cmV0dXJufWJ8fEMoayk7dmFyIHM9Yyx0PWYsdT0obmV3IERhdGUpLmdldFRpbWUoKSx2LHcseCx5PWZ1bmN0aW9uKGEpe3M9ZC5nZXREb2N1bWVudFgoYSksdD1kLmdldERvY3VtZW50WShhKX0sej1mdW5jdGlvbihhKXtjbGVhckludGVydmFsKEYpLHE9PWc/QyhrKTpxPT1pJiZBKGEpLG4uJGNsaWNrU2VsZWN0aW9uPW51bGwscT1nfSxBPWZ1bmN0aW9uKGEpe2UucmVtb3ZlQ3NzQ2xhc3MobS5jb250YWluZXIsImFjZV9kcmFnZ2luZyIpLG0uc2Vzc2lvbi5yZW1vdmVNYXJrZXIoeCksbS4kbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlvbnx8dnx8KG0ubW92ZUN1cnNvclRvUG9zaXRpb24oayksbS5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oay5yb3csay5jb2x1bW4pKTtpZighdilyZXR1cm47aWYody5jb250YWlucyh2LnJvdyx2LmNvbHVtbikpe3Y9bnVsbDtyZXR1cm59bS5jbGVhclNlbGVjdGlvbigpO2lmKGEmJihhLmN0cmxLZXl8fGEuYWx0S2V5KSl2YXIgYj1tLnNlc3Npb24sYz1iLmluc2VydCh2LGIuZ2V0VGV4dFJhbmdlKHcpKTtlbHNlIHZhciBjPW0ubW92ZVRleHQodyx2KTtpZighYyl7dj1udWxsO3JldHVybn1tLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShjKX0sQj1mdW5jdGlvbigpe2lmKHE9PWcpe3ZhciBhPWwoYyxmLHMsdCksYj0obmV3IERhdGUpLmdldFRpbWUoKTtpZihhPmope3E9aDt2YXIgZD1tLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHMsdCk7ZC5yb3c9TWF0aC5tYXgoMCxNYXRoLm1pbihkLnJvdyxtLnNlc3Npb24uZ2V0TGVuZ3RoKCktMSkpLEMoZCl9ZWxzZSBpZihiLXU+bS5nZXREcmFnRGVsYXkoKSl7cT1pLHc9bS5nZXRTZWxlY3Rpb25SYW5nZSgpO3ZhciBrPW0uZ2V0U2VsZWN0aW9uU3R5bGUoKTt4PW0uc2Vzc2lvbi5hZGRNYXJrZXIodywiYWNlX3NlbGVjdGlvbiIsayksbS5jbGVhclNlbGVjdGlvbigpLGUuYWRkQ3NzQ2xhc3MobS5jb250YWluZXIsImFjZV9kcmFnZ2luZyIpfX1xPT1pP0UoKTpxPT1oJiZEKCl9LEQ9ZnVuY3Rpb24oKXt2YXIgYSxiPW0ucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMocyx0KTtiLnJvdz1NYXRoLm1heCgwLE1hdGgubWluKGIucm93LG0uc2Vzc2lvbi5nZXRMZW5ndGgoKS0xKSksbi4kY2xpY2tTZWxlY3Rpb24/bi4kY2xpY2tTZWxlY3Rpb24uY29udGFpbnMoYi5yb3csYi5jb2x1bW4pP20uc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG4uJGNsaWNrU2VsZWN0aW9uKToobi4kY2xpY2tTZWxlY3Rpb24uY29tcGFyZShiLnJvdyxiLmNvbHVtbik9PS0xP2E9bi4kY2xpY2tTZWxlY3Rpb24uZW5kOmE9bi4kY2xpY2tTZWxlY3Rpb24uc3RhcnQsbS5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5jaG9yKGEucm93LGEuY29sdW1uKSxtLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0aW9uKGIpKTptLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0aW9uKGIpLG0ucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKX0sRT1mdW5jdGlvbigpe3Y9bS5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhzLHQpLHYucm93PU1hdGgubWF4KDAsTWF0aC5taW4odi5yb3csbS5zZXNzaW9uLmdldExlbmd0aCgpLTEpKSxtLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHYpfTtkLmNhcHR1cmUobS5jb250YWluZXIseSx6KTt2YXIgRj1zZXRJbnRlcnZhbChCLDIwKTtyZXR1cm4gYS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLm9uRG91YmxlQ2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXREb2N1bWVudFBvc2l0aW9uKCksYz10aGlzLmVkaXRvcjtjLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGIpLGMuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKSx0aGlzLiRjbGlja1NlbGVjdGlvbj1jLmdldFNlbGVjdGlvblJhbmdlKCl9LHRoaXMub25UcmlwbGVDbGljaz1mdW5jdGlvbihhKXt2YXIgYj1hLmdldERvY3VtZW50UG9zaXRpb24oKSxjPXRoaXMuZWRpdG9yO2MubW92ZUN1cnNvclRvUG9zaXRpb24oYiksYy5zZWxlY3Rpb24uc2VsZWN0TGluZSgpLHRoaXMuJGNsaWNrU2VsZWN0aW9uPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKX0sdGhpcy5vblF1YWRDbGljaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmVkaXRvcjtiLnNlbGVjdEFsbCgpLHRoaXMuJGNsaWNrU2VsZWN0aW9uPWIuZ2V0U2VsZWN0aW9uUmFuZ2UoKX0sdGhpcy5vblNjcm9sbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmVkaXRvcjtiLnJlbmRlcmVyLnNjcm9sbEJ5KGEud2hlZWxYKmEuc3BlZWQsYS53aGVlbFkqYS5zcGVlZCk7aWYoYi5yZW5kZXJlci5pc1Njcm9sbGFibGVCeShhLndoZWVsWCphLnNwZWVkLGEud2hlZWxZKmEuc3BlZWQpKXJldHVybiBhLnByZXZlbnREZWZhdWx0KCl9fSkpLmNhbGwoay5wcm90b3R5cGUpLGIuRGVmYXVsdEhhbmRsZXJzPWt9KSxhY2UuZGVmaW5lKCJhY2UvbGliL2Jyb3dzZXJfZm9jdXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vb29wIiksZT1hKCIuL2V2ZW50IiksZj1hKCIuL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZz1mdW5jdGlvbihhKXthPWF8fHdpbmRvdyx0aGlzLmxhc3RGb2N1cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLl9pc0ZvY3VzZWQ9ITA7dmFyIGI9dGhpczsib25mb2N1c2luImluIGEuZG9jdW1lbnQ/KGUuYWRkTGlzdGVuZXIoYS5kb2N1bWVudCwiZm9jdXNpbiIsZnVuY3Rpb24oYSl7Yi5fc2V0Rm9jdXNlZCghMCl9KSxlLmFkZExpc3RlbmVyKGEuZG9jdW1lbnQsImZvY3Vzb3V0IixmdW5jdGlvbihhKXtiLl9zZXRGb2N1c2VkKCEhYS50b0VsZW1lbnQpfSkpOihlLmFkZExpc3RlbmVyKGEsImJsdXIiLGZ1bmN0aW9uKGEpe2IuX3NldEZvY3VzZWQoITEpfSksZS5hZGRMaXN0ZW5lcihhLCJmb2N1cyIsZnVuY3Rpb24oYSl7Yi5fc2V0Rm9jdXNlZCghMCl9KSl9OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGYpLHRoaXMuaXNGb2N1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRm9jdXNlZH0sdGhpcy5fc2V0Rm9jdXNlZD1mdW5jdGlvbihhKXtpZih0aGlzLl9pc0ZvY3VzZWQ9PWEpcmV0dXJuO2EmJih0aGlzLmxhc3RGb2N1cz0obmV3IERhdGUpLmdldFRpbWUoKSksdGhpcy5faXNGb2N1c2VkPWEsdGhpcy5fZW1pdCgiY2hhbmdlRm9jdXMiKX19KSkuY2FsbChnLnByb3RvdHlwZSksYi5Ccm93c2VyRm9jdXM9Z30pLGFjZS5kZWZpbmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9e307ZC5fZW1pdD1kLl9kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKGEsYil7dGhpcy5fZXZlbnRSZWdpc3RyeT10aGlzLl9ldmVudFJlZ2lzdHJ5fHx7fSx0aGlzLl9kZWZhdWx0SGFuZGxlcnM9dGhpcy5fZGVmYXVsdEhhbmRsZXJzfHx7fTt2YXIgYz10aGlzLl9ldmVudFJlZ2lzdHJ5W2FdfHxbXSxkPXRoaXMuX2RlZmF1bHRIYW5kbGVyc1thXTtpZighYy5sZW5ndGgmJiFkKXJldHVybjtiPWJ8fHt9LGIudHlwZT1hLGIuc3RvcFByb3BhZ2F0aW9ufHwoYi5zdG9wUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZD0hMH0pLGIucHJldmVudERlZmF1bHR8fChiLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwfSk7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe2NbZV0oYik7aWYoYi5wcm9wYWdhdGlvblN0b3BwZWQpYnJlYWt9ZCYmIWIuZGVmYXVsdFByZXZlbnRlZCYmZChiKX0sZC5zZXREZWZhdWx0SGFuZGxlcj1mdW5jdGlvbihhLGIpe3RoaXMuX2RlZmF1bHRIYW5kbGVycz10aGlzLl9kZWZhdWx0SGFuZGxlcnN8fHt9O2lmKHRoaXMuX2RlZmF1bHRIYW5kbGVyc1thXSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkZWZhdWx0IGhhbmRsZXIgZm9yICciK2ErIicgaXMgYWxyZWFkeSBzZXQiKTt0aGlzLl9kZWZhdWx0SGFuZGxlcnNbYV09Yn0sZC5vbj1kLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXt0aGlzLl9ldmVudFJlZ2lzdHJ5PXRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9O3ZhciBjPXRoaXMuX2V2ZW50UmVnaXN0cnlbYV07aWYoIWMpdmFyIGM9dGhpcy5fZXZlbnRSZWdpc3RyeVthXT1bXTtjLmluZGV4T2YoYik9PS0xJiZjLnB1c2goYil9LGQucmVtb3ZlTGlzdGVuZXI9ZC5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7dGhpcy5fZXZlbnRSZWdpc3RyeT10aGlzLl9ldmVudFJlZ2lzdHJ5fHx7fTt2YXIgYz10aGlzLl9ldmVudFJlZ2lzdHJ5W2FdO2lmKCFjKXJldHVybjt2YXIgZD1jLmluZGV4T2YoYik7ZCE9PS0xJiZjLnNwbGljZShkLDEpfSxkLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihhKXt0aGlzLl9ldmVudFJlZ2lzdHJ5JiYodGhpcy5fZXZlbnRSZWdpc3RyeVthXT1bXSl9LGIuRXZlbnRFbWl0dGVyPWR9KSxhY2UuZGVmaW5lKCJhY2UvbW91c2UvZGVmYXVsdF9ndXR0ZXJfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2Euc2V0RGVmYXVsdEhhbmRsZXIoImd1dHRlcmNsaWNrIixmdW5jdGlvbihiKXt2YXIgYz1iLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3csZD1hLnNlc3Npb24uc2VsZWN0aW9uO2QubW92ZUN1cnNvclRvKGMsMCksZC5zZWxlY3RMaW5lKCl9KX0idXNlIHN0cmljdCIsYi5HdXR0ZXJIYW5kbGVyPWR9KSxhY2UuZGVmaW5lKCJhY2UvbW91c2UvbW91c2VfZXZlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50Il0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvZXZlbnQiKSxlPWIuTW91c2VFdmVudD1mdW5jdGlvbihhLGIpe3RoaXMuZG9tRXZlbnQ9YSx0aGlzLmVkaXRvcj1iLHRoaXMucGFnZVg9ZC5nZXREb2N1bWVudFgoYSksdGhpcy5wYWdlWT1kLmdldERvY3VtZW50WShhKSx0aGlzLmNsaWVudFg9YS5jbGllbnRYLHRoaXMuY2xpZW50WT1hLmNsaWVudFksdGhpcy4kcG9zPW51bGwsdGhpcy4kaW5TZWxlY3Rpb249bnVsbCx0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZD0hMSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITF9OygoZnVuY3Rpb24oKXt0aGlzLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe2Quc3RvcFByb3BhZ2F0aW9uKHRoaXMuZG9tRXZlbnQpLHRoaXMucHJvcGFnYXRpb25TdG9wcGVkPSEwfSx0aGlzLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7ZC5wcmV2ZW50RGVmYXVsdCh0aGlzLmRvbUV2ZW50KSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9LHRoaXMuc3RvcD1mdW5jdGlvbigpe3RoaXMuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLmdldERvY3VtZW50UG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRwb3MpcmV0dXJuIHRoaXMuJHBvczt2YXIgYT1kLmdldERvY3VtZW50WCh0aGlzLmRvbUV2ZW50KSxiPWQuZ2V0RG9jdW1lbnRZKHRoaXMuZG9tRXZlbnQpO3JldHVybiB0aGlzLiRwb3M9dGhpcy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMoYSxiKSx0aGlzLiRwb3Mucm93PU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy4kcG9zLnJvdyx0aGlzLmVkaXRvci5zZXNzaW9uLmdldExlbmd0aCgpLTEpKSx0aGlzLiRwb3N9LHRoaXMuaW5TZWxlY3Rpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRpblNlbGVjdGlvbiE9PW51bGwpcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uO3ZhciBhPXRoaXMuZWRpdG9yO2lmKGEuZ2V0UmVhZE9ubHkoKSl0aGlzLiRpblNlbGVjdGlvbj0hMTtlbHNle3ZhciBiPWEuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpZihiLmlzRW1wdHkoKSl0aGlzLiRpblNlbGVjdGlvbj0hMTtlbHNle3ZhciBjPXRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlvbigpO3RoaXMuJGluU2VsZWN0aW9uPWIuY29udGFpbnMoYy5yb3csYy5jb2x1bW4pfX1yZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb259LHRoaXMuZ2V0QnV0dG9uPWZ1bmN0aW9uKCl7cmV0dXJuIGQuZ2V0QnV0dG9uKHRoaXMuZG9tRXZlbnQpfSx0aGlzLmdldFNoaWZ0S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tRXZlbnQuc2hpZnRLZXl9LHRoaXMuZ2V0QWNjZWxLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21FdmVudC5jdHJsS2V5fHx0aGlzLmRvbUV2ZW50Lm1ldGFLZXl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vdXNlL2ZvbGRfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2Eub24oImNsaWNrIixmdW5jdGlvbihiKXt2YXIgYz1iLmdldERvY3VtZW50UG9zaXRpb24oKSxkPWEuc2Vzc2lvbixlPWQuZ2V0Rm9sZEF0KGMucm93LGMuY29sdW1uLDEpO2UmJihiLmdldEFjY2VsS2V5KCk/ZC5yZW1vdmVGb2xkKGUpOmQuZXhwYW5kRm9sZChlKSxiLnN0b3AoKSl9KSxhLm9uKCJndXR0ZXJjbGljayIsZnVuY3Rpb24oYil7aWYoYi5kb21FdmVudC50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoImFjZV9mb2xkLXdpZGdldCIpIT0tMSl7dmFyIGM9Yi5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93O2Euc2Vzc2lvbi5vbkZvbGRXaWRnZXRDbGljayhjLGIuZG9tRXZlbnQpLGIuc3RvcCgpfX0pfSJ1c2Ugc3RyaWN0IixiLkZvbGRIYW5kbGVyPWR9KSxhY2UuZGVmaW5lKCJhY2Uva2V5Ym9hcmQva2V5YmluZGluZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIva2V5cyIsImFjZS9saWIvZXZlbnQiLCJhY2UvY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2tleXMiKSxlPWEoIi4uL2xpYi9ldmVudCIpO2EoIi4uL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiKTt2YXIgZj1mdW5jdGlvbihhKXt0aGlzLiRlZGl0b3I9YSx0aGlzLiRkYXRhPXt9LHRoaXMuJGhhbmRsZXJzPVt0aGlzXX07KChmdW5jdGlvbigpe3RoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyPWZ1bmN0aW9uKGEpe2lmKHRoaXMuJGhhbmRsZXJzW3RoaXMuJGhhbmRsZXJzLmxlbmd0aC0xXT09YSlyZXR1cm47dGhpcy4kZGF0YT17fSx0aGlzLiRoYW5kbGVycz1hP1t0aGlzLGFdOlt0aGlzXX0sdGhpcy5hZGRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oYSl7dGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIoYSksdGhpcy4kaGFuZGxlcnMucHVzaChhKX0sdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kaGFuZGxlcnMuaW5kZXhPZihhKTtyZXR1cm4gYj09LTE/ITE6KHRoaXMuJGhhbmRsZXJzLnNwbGljZShiLDEpLCEwKX0sdGhpcy5nZXRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3RoLTFdfSx0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZjtmb3IodmFyIGc9dGhpcy4kaGFuZGxlcnMubGVuZ3RoO2ctLTspe2Y9dGhpcy4kaGFuZGxlcnNbZ10uaGFuZGxlS2V5Ym9hcmQodGhpcy4kZGF0YSxhLGIsYyxkKTtpZihmJiZmLmNvbW1hbmQpYnJlYWt9aWYoIWZ8fCFmLmNvbW1hbmQpcmV0dXJuITE7dmFyIGg9ITEsaT10aGlzLiRlZGl0b3IuY29tbWFuZHM7cmV0dXJuIGYuY29tbWFuZCE9Im51bGwiP2g9aS5leGVjKGYuY29tbWFuZCx0aGlzLiRlZGl0b3IsZi5hcmdzKTpoPSEwLGgmJmQmJmUuc3RvcEV2ZW50KGQpLGh9LHRoaXMuaGFuZGxlS2V5Ym9hcmQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybntjb21tYW5kOnRoaXMuJGVkaXRvci5jb21tYW5kcy5maW5kS2V5Q29tbWFuZChiLGMpfX0sdGhpcy5vbkNvbW1hbmRLZXk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWQua2V5Q29kZVRvU3RyaW5nKGMpO3RoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKGIsZSxjLGEpfSx0aGlzLm9uVGV4dElucHV0PWZ1bmN0aW9uKGEsYil7dmFyIGM9ITE7IWImJmEubGVuZ3RoPT0xJiYoYz10aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycygwLGEpKSxjfHx0aGlzLiRlZGl0b3IuY29tbWFuZHMuZXhlYygiaW5zZXJ0c3RyaW5nIix0aGlzLiRlZGl0b3IsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuS2V5QmluZGluZz1mfSksYWNlLmRlZmluZSgiYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZShhLGIpe3JldHVybnt3aW46YSxtYWM6Yn19InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9sYW5nIik7Yi5jb21tYW5kcz1be25hbWU6InNlbGVjdGFsbCIsYmluZEtleTplKCJDdHJsLUEiLCJDb21tYW5kLUEiKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2VsZWN0QWxsKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiY2VudGVyc2VsZWN0aW9uIixiaW5kS2V5OmUobnVsbCwiQ3RybC1MIiksZXhlYzpmdW5jdGlvbihhKXthLmNlbnRlclNlbGVjdGlvbigpfSxyZWFkT25seTohMH0se25hbWU6ImdvdG9saW5lIixiaW5kS2V5OmUoIkN0cmwtTCIsIkNvbW1hbmQtTCIpLGV4ZWM6ZnVuY3Rpb24oYSl7dmFyIGI9cGFyc2VJbnQocHJvbXB0KCJFbnRlciBsaW5lIG51bWJlcjoiKSwxMCk7aXNOYU4oYil8fGEuZ290b0xpbmUoYil9LHJlYWRPbmx5OiEwfSx7bmFtZToiZm9sZCIsYmluZEtleTplKCJBbHQtTCIsIkFsdC1MIiksZXhlYzpmdW5jdGlvbihhKXthLnNlc3Npb24udG9nZ2xlRm9sZCghMSl9LHJlYWRPbmx5OiEwfSx7bmFtZToidW5mb2xkIixiaW5kS2V5OmUoIkFsdC1TaGlmdC1MIiwiQWx0LVNoaWZ0LUwiKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2Vzc2lvbi50b2dnbGVGb2xkKCEwKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJmb2xkYWxsIixiaW5kS2V5OmUoIkFsdC0wIiwiQWx0LTAiKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2Vzc2lvbi5mb2xkQWxsKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToidW5mb2xkYWxsIixiaW5kS2V5OmUoIkFsdC1TaGlmdC0wIiwiQWx0LVNoaWZ0LTAiKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2Vzc2lvbi51bmZvbGQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJmaW5kbmV4dCIsYmluZEtleTplKCJDdHJsLUsiLCJDb21tYW5kLUciKSxleGVjOmZ1bmN0aW9uKGEpe2EuZmluZE5leHQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJmaW5kcHJldmlvdXMiLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1LIiwiQ29tbWFuZC1TaGlmdC1HIiksZXhlYzpmdW5jdGlvbihhKXthLmZpbmRQcmV2aW91cygpfSxyZWFkT25seTohMH0se25hbWU6ImZpbmQiLGJpbmRLZXk6ZSgiQ3RybC1GIiwiQ29tbWFuZC1GIiksZXhlYzpmdW5jdGlvbihhKXt2YXIgYj1wcm9tcHQoIkZpbmQ6IixhLmdldENvcHlUZXh0KCkpO2EuZmluZChiKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJvdmVyd3JpdGUiLGJpbmRLZXk6ZSgiSW5zZXJ0IiwiSW5zZXJ0IiksZXhlYzpmdW5jdGlvbihhKXthLnRvZ2dsZU92ZXJ3cml0ZSgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvc3RhcnQiLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1Ib21lfEFsdC1TaGlmdC1VcCIsIkNvbW1hbmQtU2hpZnQtVXAiKSxleGVjOmZ1bmN0aW9uKGEpe2EuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZVN0YXJ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b3N0YXJ0IixiaW5kS2V5OmUoIkN0cmwtSG9tZXxDdHJsLVVwIiwiQ29tbWFuZC1Ib21lfENvbW1hbmQtVXAiKSxleGVjOmZ1bmN0aW9uKGEpe2EubmF2aWdhdGVGaWxlU3RhcnQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R1cCIsYmluZEtleTplKCJTaGlmdC1VcCIsIlNoaWZ0LVVwIiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdFVwKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ29saW5ldXAiLGJpbmRLZXk6ZSgiVXAiLCJVcHxDdHJsLVAiKSxleGVjOmZ1bmN0aW9uKGEsYil7YS5uYXZpZ2F0ZVVwKGIudGltZXMpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvZW5kIixiaW5kS2V5OmUoIkN0cmwtU2hpZnQtRW5kfEFsdC1TaGlmdC1Eb3duIiwiQ29tbWFuZC1TaGlmdC1Eb3duIiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVFbmQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvZW5kIixiaW5kS2V5OmUoIkN0cmwtRW5kfEN0cmwtRG93biIsIkNvbW1hbmQtRW5kfENvbW1hbmQtRG93biIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5uYXZpZ2F0ZUZpbGVFbmQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3Rkb3duIixiaW5kS2V5OmUoIlNoaWZ0LURvd24iLCJTaGlmdC1Eb3duIiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdERvd24oKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb2xpbmVkb3duIixiaW5kS2V5OmUoIkRvd24iLCJEb3dufEN0cmwtTiIpLGV4ZWM6ZnVuY3Rpb24oYSxiKXthLm5hdmlnYXRlRG93bihiLnRpbWVzKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R3b3JkbGVmdCIsYmluZEtleTplKCJDdHJsLVNoaWZ0LUxlZnQiLCJPcHRpb24tU2hpZnQtTGVmdCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RXb3JkTGVmdCgpfSxyZWFkT25seTohMH0se25hbWU6ImdvdG93b3JkbGVmdCIsYmluZEtleTplKCJDdHJsLUxlZnQiLCJPcHRpb24tTGVmdCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5uYXZpZ2F0ZVdvcmRMZWZ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0dG9saW5lc3RhcnQiLGJpbmRLZXk6ZSgiQWx0LVNoaWZ0LUxlZnQiLCJDb21tYW5kLVNoaWZ0LUxlZnQiKSxleGVjOmZ1bmN0aW9uKGEpe2EuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b2xpbmVzdGFydCIsYmluZEtleTplKCJBbHQtTGVmdHxIb21lIiwiQ29tbWFuZC1MZWZ0fEhvbWV8Q3RybC1BIiksZXhlYzpmdW5jdGlvbihhKXthLm5hdmlnYXRlTGluZVN0YXJ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0bGVmdCIsYmluZEtleTplKCJTaGlmdC1MZWZ0IiwiU2hpZnQtTGVmdCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMZWZ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b2xlZnQiLGJpbmRLZXk6ZSgiTGVmdCIsIkxlZnR8Q3RybC1CIiksZXhlYzpmdW5jdGlvbihhLGIpe2EubmF2aWdhdGVMZWZ0KGIudGltZXMpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHdvcmRyaWdodCIsYmluZEtleTplKCJDdHJsLVNoaWZ0LVJpZ2h0IiwiT3B0aW9uLVNoaWZ0LVJpZ2h0IiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdFdvcmRSaWdodCgpfSxyZWFkT25seTohMH0se25hbWU6ImdvdG93b3JkcmlnaHQiLGJpbmRLZXk6ZSgiQ3RybC1SaWdodCIsIk9wdGlvbi1SaWdodCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5uYXZpZ2F0ZVdvcmRSaWdodCgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvbGluZWVuZCIsYmluZEtleTplKCJBbHQtU2hpZnQtUmlnaHQiLCJDb21tYW5kLVNoaWZ0LVJpZ2h0IiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVFbmQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvbGluZWVuZCIsYmluZEtleTplKCJBbHQtUmlnaHR8RW5kIiwiQ29tbWFuZC1SaWdodHxFbmR8Q3RybC1FIiksZXhlYzpmdW5jdGlvbihhKXthLm5hdmlnYXRlTGluZUVuZCgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHJpZ2h0IixiaW5kS2V5OmUoIlNoaWZ0LVJpZ2h0IiwiU2hpZnQtUmlnaHQiKSxleGVjOmZ1bmN0aW9uKGEpe2EuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0UmlnaHQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvcmlnaHQiLGJpbmRLZXk6ZSgiUmlnaHQiLCJSaWdodHxDdHJsLUYiKSxleGVjOmZ1bmN0aW9uKGEsYil7YS5uYXZpZ2F0ZVJpZ2h0KGIudGltZXMpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHBhZ2Vkb3duIixiaW5kS2V5OmUoIlNoaWZ0LVBhZ2VEb3duIiwiU2hpZnQtUGFnZURvd24iKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2VsZWN0UGFnZURvd24oKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJwYWdlZG93biIsYmluZEtleTplKG51bGwsIlBhZ2VEb3duIiksZXhlYzpmdW5jdGlvbihhKXthLnNjcm9sbFBhZ2VEb3duKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b3BhZ2Vkb3duIixiaW5kS2V5OmUoIlBhZ2VEb3duIiwiT3B0aW9uLVBhZ2VEb3dufEN0cmwtViIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nb3RvUGFnZURvd24oKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RwYWdldXAiLGJpbmRLZXk6ZSgiU2hpZnQtUGFnZVVwIiwiU2hpZnQtUGFnZVVwIiksZXhlYzpmdW5jdGlvbihhKXthLnNlbGVjdFBhZ2VVcCgpfSxyZWFkT25seTohMH0se25hbWU6InBhZ2V1cCIsYmluZEtleTplKG51bGwsIlBhZ2VVcCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5zY3JvbGxQYWdlVXAoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvcGFnZXVwIixiaW5kS2V5OmUoIlBhZ2VVcCIsIk9wdGlvbi1QYWdlVXAiKSxleGVjOmZ1bmN0aW9uKGEpe2EuZ290b1BhZ2VVcCgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdGxpbmVzdGFydCIsYmluZEtleTplKCJTaGlmdC1Ib21lIiwiU2hpZnQtSG9tZSIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RsaW5lZW5kIixiaW5kS2V5OmUoIlNoaWZ0LUVuZCIsIlNoaWZ0LUVuZCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToidG9nZ2xlcmVjb3JkaW5nIixiaW5kS2V5OmUoIkN0cmwtQWx0LUUiLCJDb21tYW5kLU9wdGlvbi1FIiksZXhlYzpmdW5jdGlvbihhKXthLmNvbW1hbmRzLnRvZ2dsZVJlY29yZGluZygpfSxyZWFkT25seTohMH0se25hbWU6InJlcGxheW1hY3JvIixiaW5kS2V5OmUoIkN0cmwtU2hpZnQtRSIsIkNvbW1hbmQtU2hpZnQtRSIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5jb21tYW5kcy5yZXBsYXkoYSl9LHJlYWRPbmx5OiEwfSx7bmFtZToianVtcHRvbWF0Y2hpbmciLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1QIiwiQ3RybC1TaGlmdC1QIiksZXhlYzpmdW5jdGlvbihhKXthLmp1bXBUb01hdGNoaW5nKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToicmVtb3ZlbGluZSIsYmluZEtleTplKCJDdHJsLUQiLCJDb21tYW5kLUQiKSxleGVjOmZ1bmN0aW9uKGEpe2EucmVtb3ZlTGluZXMoKX19LHtuYW1lOiJ0b2dnbGVjb21tZW50IixiaW5kS2V5OmUoIkN0cmwtNyIsIkNvbW1hbmQtNyIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS50b2dnbGVDb21tZW50TGluZXMoKX19LHtuYW1lOiJyZXBsYWNlIixiaW5kS2V5OmUoIkN0cmwtUiIsIkNvbW1hbmQtT3B0aW9uLUYiKSxleGVjOmZ1bmN0aW9uKGEpe3ZhciBiPXByb21wdCgiRmluZDoiLGEuZ2V0Q29weVRleHQoKSk7aWYoIWIpcmV0dXJuO3ZhciBjPXByb21wdCgiUmVwbGFjZW1lbnQ6Iik7aWYoIWMpcmV0dXJuO2EucmVwbGFjZShjLHtuZWVkbGU6Yn0pfX0se25hbWU6InJlcGxhY2VhbGwiLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1SIiwiQ29tbWFuZC1TaGlmdC1PcHRpb24tRiIpLGV4ZWM6ZnVuY3Rpb24oYSl7dmFyIGI9cHJvbXB0KCJGaW5kOiIpO2lmKCFiKXJldHVybjt2YXIgYz1wcm9tcHQoIlJlcGxhY2VtZW50OiIpO2lmKCFjKXJldHVybjthLnJlcGxhY2VBbGwoYyx7bmVlZGxlOmJ9KX19LHtuYW1lOiJ1bmRvIixiaW5kS2V5OmUoIkN0cmwtWiIsIkNvbW1hbmQtWiIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS51bmRvKCl9fSx7bmFtZToicmVkbyIsYmluZEtleTplKCJDdHJsLVNoaWZ0LVp8Q3RybC1ZIiwiQ29tbWFuZC1TaGlmdC1afENvbW1hbmQtWSIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5yZWRvKCl9fSx7bmFtZToiY29weWxpbmVzdXAiLGJpbmRLZXk6ZSgiQ3RybC1BbHQtVXAiLCJDb21tYW5kLU9wdGlvbi1VcCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5jb3B5TGluZXNVcCgpfX0se25hbWU6Im1vdmVsaW5lc3VwIixiaW5kS2V5OmUoIkFsdC1VcCIsIk9wdGlvbi1VcCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5tb3ZlTGluZXNVcCgpfX0se25hbWU6ImNvcHlsaW5lc2Rvd24iLGJpbmRLZXk6ZSgiQ3RybC1BbHQtRG93biIsIkNvbW1hbmQtT3B0aW9uLURvd24iKSxleGVjOmZ1bmN0aW9uKGEpe2EuY29weUxpbmVzRG93bigpfX0se25hbWU6Im1vdmVsaW5lc2Rvd24iLGJpbmRLZXk6ZSgiQWx0LURvd24iLCJPcHRpb24tRG93biIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5tb3ZlTGluZXNEb3duKCl9fSx7bmFtZToiZGVsIixiaW5kS2V5OmUoIkRlbGV0ZSIsIkRlbGV0ZXxDdHJsLUQiKSxleGVjOmZ1bmN0aW9uKGEpe2EucmVtb3ZlKCJyaWdodCIpfX0se25hbWU6ImJhY2tzcGFjZSIsYmluZEtleTplKCJDdHJsLUJhY2tzcGFjZXxDb21tYW5kLUJhY2tzcGFjZXxPcHRpb24tQmFja3NwYWNlfFNoaWZ0LUJhY2tzcGFjZXxCYWNrc3BhY2UiLCJDdHJsLUJhY2tzcGFjZXxDb21tYW5kLUJhY2tzcGFjZXxTaGlmdC1CYWNrc3BhY2V8QmFja3NwYWNlfEN0cmwtSCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5yZW1vdmUoImxlZnQiKX19LHtuYW1lOiJyZW1vdmV0b2xpbmVzdGFydCIsYmluZEtleTplKCJBbHQtQmFja3NwYWNlIiwiT3B0aW9uLUJhY2tzcGFjZSIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5yZW1vdmVUb0xpbmVTdGFydCgpfX0se25hbWU6InJlbW92ZXRvbGluZWVuZCIsYmluZEtleTplKCJBbHQtRGVsZXRlIiwiQ3RybC1LIiksZXhlYzpmdW5jdGlvbihhKXthLnJlbW92ZVRvTGluZUVuZCgpfX0se25hbWU6InJlbW92ZXdvcmRsZWZ0IixiaW5kS2V5OmUoIkN0cmwtQmFja3NwYWNlIiwiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNrc3BhY2UiKSxleGVjOmZ1bmN0aW9uKGEpe2EucmVtb3ZlV29yZExlZnQoKX19LHtuYW1lOiJyZW1vdmV3b3JkcmlnaHQiLGJpbmRLZXk6ZSgiQ3RybC1EZWxldGUiLCJBbHQtRGVsZXRlIiksZXhlYzpmdW5jdGlvbihhKXthLnJlbW92ZVdvcmRSaWdodCgpfX0se25hbWU6Im91dGRlbnQiLGJpbmRLZXk6ZSgiU2hpZnQtVGFiIiwiU2hpZnQtVGFiIiksZXhlYzpmdW5jdGlvbihhKXthLmJsb2NrT3V0ZGVudCgpfX0se25hbWU6ImluZGVudCIsYmluZEtleTplKCJUYWIiLCJUYWIiKSxleGVjOmZ1bmN0aW9uKGEpe2EuaW5kZW50KCl9fSx7bmFtZToiaW5zZXJ0c3RyaW5nIixleGVjOmZ1bmN0aW9uKGEsYil7YS5pbnNlcnQoYil9fSx7bmFtZToiaW5zZXJ0dGV4dCIsZXhlYzpmdW5jdGlvbihhLGIpe2EuaW5zZXJ0KGQuc3RyaW5nUmVwZWF0KGIudGV4dHx8IiIsYi50aW1lc3x8MSkpfX0se25hbWU6InNwbGl0bGluZSIsYmluZEtleTplKG51bGwsIkN0cmwtTyIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5zcGxpdExpbmUoKX19LHtuYW1lOiJ0cmFuc3Bvc2VsZXR0ZXJzIixiaW5kS2V5OmUoIkN0cmwtVCIsIkN0cmwtVCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS50cmFuc3Bvc2VMZXR0ZXJzKCl9fSx7bmFtZToidG91cHBlcmNhc2UiLGJpbmRLZXk6ZSgiQ3RybC1VIiwiQ3RybC1VIiksZXhlYzpmdW5jdGlvbihhKXthLnRvVXBwZXJDYXNlKCl9fSx7bmFtZToidG9sb3dlcmNhc2UiLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1VIiwiQ3RybC1TaGlmdC1VIiksZXhlYzpmdW5jdGlvbihhKXthLnRvTG93ZXJDYXNlKCl9fV19KSxhY2UuZGVmaW5lKCJhY2UvZWRpdF9zZXNzaW9uIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2Uvc2VsZWN0aW9uIiwiYWNlL21vZGUvdGV4dCIsImFjZS9yYW5nZSIsImFjZS9kb2N1bWVudCIsImFjZS9iYWNrZ3JvdW5kX3Rva2VuaXplciIsImFjZS9lZGl0X3Nlc3Npb24vZm9sZGluZyIsImFjZS9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaCJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi9saWIvb29wIiksZT1hKCIuL2xpYi9sYW5nIiksZj1hKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLGc9YSgiLi9zZWxlY3Rpb24iKS5TZWxlY3Rpb24saD1hKCIuL21vZGUvdGV4dCIpLk1vZGUsaT1hKCIuL3JhbmdlIikuUmFuZ2Usaj1hKCIuL2RvY3VtZW50IikuRG9jdW1lbnQsaz1hKCIuL2JhY2tncm91bmRfdG9rZW5pemVyIikuQmFja2dyb3VuZFRva2VuaXplcixsPWZ1bmN0aW9uKGEsYil7dGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kYnJlYWtwb2ludHM9W10sdGhpcy4kZnJvbnRNYXJrZXJzPXt9LHRoaXMuJGJhY2tNYXJrZXJzPXt9LHRoaXMuJG1hcmtlcklkPTEsdGhpcy4kcm93Q2FjaGU9W10sdGhpcy4kd3JhcERhdGE9W10sdGhpcy4kZm9sZERhdGE9W10sdGhpcy4kdW5kb1NlbGVjdD0hMCx0aGlzLiRmb2xkRGF0YS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPSIiO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYil7YSs9IlxuIitiLnRvU3RyaW5nKCl9KSxhfSxhIGluc3RhbmNlb2Ygaj90aGlzLnNldERvY3VtZW50KGEpOnRoaXMuc2V0RG9jdW1lbnQobmV3IGooYSkpLHRoaXMuc2VsZWN0aW9uPW5ldyBnKHRoaXMpLGI/dGhpcy5zZXRNb2RlKGIpOnRoaXMuc2V0TW9kZShuZXcgaCl9OygoZnVuY3Rpb24oKXtmdW5jdGlvbiBvKGEpe3JldHVybiBhPDQzNTI/ITE6YT49NDM1MiYmYTw9NDQ0N3x8YT49NDUxNSYmYTw9NDUxOXx8YT49NDYwMiYmYTw9NDYwN3x8YT49OTAwMSYmYTw9OTAwMnx8YT49MTE5MDQmJmE8PTExOTI5fHxhPj0xMTkzMSYmYTw9MTIwMTl8fGE+PTEyMDMyJiZhPD0xMjI0NXx8YT49MTIyNzImJmE8PTEyMjgzfHxhPj0xMjI4OCYmYTw9MTIzNTB8fGE+PTEyMzUzJiZhPD0xMjQzOHx8YT49MTI0NDEmJmE8PTEyNTQzfHxhPj0xMjU0OSYmYTw9MTI1ODl8fGE+PTEyNTkzJiZhPD0xMjY4Nnx8YT49MTI2ODgmJmE8PTEyNzMwfHxhPj0xMjczNiYmYTw9MTI3NzF8fGE+PTEyNzg0JiZhPD0xMjgzMHx8YT49MTI4MzImJmE8PTEyODcxfHxhPj0xMjg4MCYmYTw9MTMwNTR8fGE+PTEzMDU2JiZhPD0xOTkwM3x8YT49MTk5NjgmJmE8PTQyMTI0fHxhPj00MjEyOCYmYTw9NDIxODJ8fGE+PTQzMzYwJiZhPD00MzM4OHx8YT49NDQwMzImJmE8PTU1MjAzfHxhPj01NTIxNiYmYTw9NTUyMzh8fGE+PTU1MjQzJiZhPD01NTI5MXx8YT49NjM3NDQmJmE8PTY0MjU1fHxhPj02NTA0MCYmYTw9NjUwNDl8fGE+PTY1MDcyJiZhPD02NTEwNnx8YT49NjUxMDgmJmE8PTY1MTI2fHxhPj02NTEyOCYmYTw9NjUxMzF8fGE+PTY1MjgxJiZhPD02NTM3Nnx8YT49NjU1MDQmJmE8PTY1NTEwfWQuaW1wbGVtZW50KHRoaXMsZiksdGhpcy5zZXREb2N1bWVudD1mdW5jdGlvbihhKXtpZih0aGlzLmRvYyl0aHJvdyBuZXcgRXJyb3IoIkRvY3VtZW50IGlzIGFscmVhZHkgc2V0Iik7dGhpcy5kb2M9YSxhLm9uKCJjaGFuZ2UiLHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKSksdGhpcy5vbigiY2hhbmdlRm9sZCIsdGhpcy5vbkNoYW5nZUZvbGQuYmluZCh0aGlzKSksdGhpcy5iZ1Rva2VuaXplciYmKHRoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgpKSx0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApKX0sdGhpcy5nZXREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sdGhpcy4kcmVzZXRSb3dDYWNoZT1mdW5jdGlvbihhKXtpZihhPT0wKXt0aGlzLiRyb3dDYWNoZT1bXTtyZXR1cm59dmFyIGI9dGhpcy4kcm93Q2FjaGU7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspaWYoYltjXS5kb2NSb3c+PWEpe2Iuc3BsaWNlKGMsYi5sZW5ndGgpO3JldHVybn19LHRoaXMub25DaGFuZ2VGb2xkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTt0aGlzLiRyZXNldFJvd0NhY2hlKGIuc3RhcnQucm93KX0sdGhpcy5vbkNoYW5nZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRhdGE7dGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kcmVzZXRSb3dDYWNoZShiLnJhbmdlLnN0YXJ0LnJvdyk7dmFyIGM9dGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UoYSk7IXRoaXMuJGZyb21VbmRvJiZ0aGlzLiR1bmRvTWFuYWdlciYmIWIuaWdub3JlJiYodGhpcy4kZGVsdGFzRG9jLnB1c2goYiksYyYmYy5sZW5ndGghPTAmJnRoaXMuJGRlbHRhc0ZvbGQucHVzaCh7YWN0aW9uOiJyZW1vdmVGb2xkcyIsZm9sZHM6Y30pLHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyLnNjaGVkdWxlKCkpLHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoYi5yYW5nZS5zdGFydC5yb3cpLHRoaXMuX2VtaXQoImNoYW5nZSIsYSl9LHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24oYSl7dGhpcy5kb2Muc2V0VmFsdWUoYSksdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKDAsMCksdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLiRyZXNldFJvd0NhY2hlKDApLHRoaXMuJGRlbHRhcz1bXSx0aGlzLiRkZWx0YXNEb2M9W10sdGhpcy4kZGVsdGFzRm9sZD1bXSx0aGlzLmdldFVuZG9NYW5hZ2VyKCkucmVzZXQoKX0sdGhpcy5nZXRWYWx1ZT10aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jLmdldFZhbHVlKCl9LHRoaXMuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9ufSx0aGlzLmdldFN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJnVG9rZW5pemVyLmdldFN0YXRlKGEpfSx0aGlzLmdldFRva2Vucz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmJnVG9rZW5pemVyLmdldFRva2VucyhhLGIpfSx0aGlzLmdldFRva2VuQXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmJnVG9rZW5pemVyLmdldFRva2VucyhhLGEpWzBdLnRva2VucyxkLGU9MDtpZihiPT1udWxsKWY9Yy5sZW5ndGgtMSxlPXRoaXMuZ2V0TGluZShhKS5sZW5ndGg7ZWxzZSBmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl7ZSs9Y1tmXS52YWx1ZS5sZW5ndGg7aWYoZT49YilicmVha31yZXR1cm4gZD1jW2ZdLGQ/KGQuaW5kZXg9ZixkLnN0YXJ0PWUtZC52YWx1ZS5sZW5ndGgsZCk6bnVsbH0sdGhpcy5zZXRVbmRvTWFuYWdlcj1mdW5jdGlvbihhKXt0aGlzLiR1bmRvTWFuYWdlcj1hLHRoaXMuJHJlc2V0Um93Q2FjaGUoMCksdGhpcy4kZGVsdGFzPVtdLHRoaXMuJGRlbHRhc0RvYz1bXSx0aGlzLiRkZWx0YXNGb2xkPVtdLHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyJiZ0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5jYW5jZWwoKTtpZihhKXt2YXIgYj10aGlzO3RoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlcj1mdW5jdGlvbigpe2IuJGluZm9ybVVuZG9NYW5hZ2VyLmNhbmNlbCgpLGIuJGRlbHRhc0ZvbGQubGVuZ3RoJiYoYi4kZGVsdGFzLnB1c2goe2dyb3VwOiJmb2xkIixkZWx0YXM6Yi4kZGVsdGFzRm9sZH0pLGIuJGRlbHRhc0ZvbGQ9W10pLGIuJGRlbHRhc0RvYy5sZW5ndGgmJihiLiRkZWx0YXMucHVzaCh7Z3JvdXA6ImRvYyIsZGVsdGFzOmIuJGRlbHRhc0RvY30pLGIuJGRlbHRhc0RvYz1bXSksYi4kZGVsdGFzLmxlbmd0aD4wJiZhLmV4ZWN1dGUoe2FjdGlvbjoiYWNldXBkYXRlIixhcmdzOltiLiRkZWx0YXMsYl19KSxiLiRkZWx0YXM9W119LHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyPWUuZGVmZXJyZWRDYWxsKHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlcil9fSx0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXI9e3VuZG86ZnVuY3Rpb24oKXt9LHJlZG86ZnVuY3Rpb24oKXt9LHJlc2V0OmZ1bmN0aW9uKCl7fX0sdGhpcy5nZXRVbmRvTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR1bmRvTWFuYWdlcnx8dGhpcy4kZGVmYXVsdFVuZG9NYW5hZ2VyfSx0aGlzLmdldFRhYlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVzZVNvZnRUYWJzKCk/ZS5zdHJpbmdSZXBlYXQoIiAiLHRoaXMuZ2V0VGFiU2l6ZSgpKToiXHQifSx0aGlzLiR1c2VTb2Z0VGFicz0hMCx0aGlzLnNldFVzZVNvZnRUYWJzPWZ1bmN0aW9uKGEpe2lmKHRoaXMuJHVzZVNvZnRUYWJzPT09YSlyZXR1cm47dGhpcy4kdXNlU29mdFRhYnM9YX0sdGhpcy5nZXRVc2VTb2Z0VGFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR1c2VTb2Z0VGFic30sdGhpcy4kdGFiU2l6ZT00LHRoaXMuc2V0VGFiU2l6ZT1mdW5jdGlvbihhKXtpZihpc05hTihhKXx8dGhpcy4kdGFiU2l6ZT09PWEpcmV0dXJuO3RoaXMuJG1vZGlmaWVkPSEwLHRoaXMuJHRhYlNpemU9YSx0aGlzLl9lbWl0KCJjaGFuZ2VUYWJTaXplIil9LHRoaXMuZ2V0VGFiU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR0YWJTaXplfSx0aGlzLmlzVGFiU3RvcD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy4kdXNlU29mdFRhYnMmJmEuY29sdW1uJXRoaXMuJHRhYlNpemU9PTB9LHRoaXMuJG92ZXJ3cml0ZT0hMSx0aGlzLnNldE92ZXJ3cml0ZT1mdW5jdGlvbihhKXtpZih0aGlzLiRvdmVyd3JpdGU9PWEpcmV0dXJuO3RoaXMuJG92ZXJ3cml0ZT1hLHRoaXMuX2VtaXQoImNoYW5nZU92ZXJ3cml0ZSIpfSx0aGlzLmdldE92ZXJ3cml0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRvdmVyd3JpdGV9LHRoaXMudG9nZ2xlT3ZlcndyaXRlPWZ1bmN0aW9uKCl7dGhpcy5zZXRPdmVyd3JpdGUoIXRoaXMuJG92ZXJ3cml0ZSl9LHRoaXMuZ2V0QnJlYWtwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYnJlYWtwb2ludHN9LHRoaXMuc2V0QnJlYWtwb2ludHM9ZnVuY3Rpb24oYSl7dGhpcy4kYnJlYWtwb2ludHM9W107Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspdGhpcy4kYnJlYWtwb2ludHNbYVtiXV09ITA7dGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIse30pfSx0aGlzLmNsZWFyQnJlYWtwb2ludHM9ZnVuY3Rpb24oKXt0aGlzLiRicmVha3BvaW50cz1bXSx0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMuc2V0QnJlYWtwb2ludD1mdW5jdGlvbihhKXt0aGlzLiRicmVha3BvaW50c1thXT0hMCx0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMuY2xlYXJCcmVha3BvaW50PWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLiRicmVha3BvaW50c1thXSx0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMuZ2V0QnJlYWtwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYnJlYWtwb2ludHN9LHRoaXMuYWRkTWFya2VyPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJG1hcmtlcklkKyssZj17cmFuZ2U6YSx0eXBlOmN8fCJsaW5lIixyZW5kZXJlcjp0eXBlb2YgYz09ImZ1bmN0aW9uIj9jOm51bGwsY2xheno6YixpbkZyb250OiEhZH07cmV0dXJuIGQ/KHRoaXMuJGZyb250TWFya2Vyc1tlXT1mLHRoaXMuX2VtaXQoImNoYW5nZUZyb250TWFya2VyIikpOih0aGlzLiRiYWNrTWFya2Vyc1tlXT1mLHRoaXMuX2VtaXQoImNoYW5nZUJhY2tNYXJrZXIiKSksZX0sdGhpcy5yZW1vdmVNYXJrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kZnJvbnRNYXJrZXJzW2FdfHx0aGlzLiRiYWNrTWFya2Vyc1thXTtpZighYilyZXR1cm47dmFyIGM9Yi5pbkZyb250P3RoaXMuJGZyb250TWFya2Vyczp0aGlzLiRiYWNrTWFya2VycztiJiYoZGVsZXRlIGNbYV0sdGhpcy5fZW1pdChiLmluRnJvbnQ/ImNoYW5nZUZyb250TWFya2VyIjoiY2hhbmdlQmFja01hcmtlciIpKX0sdGhpcy5nZXRNYXJrZXJzPWZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuJGZyb250TWFya2Vyczp0aGlzLiRiYWNrTWFya2Vyc30sdGhpcy5zZXRBbm5vdGF0aW9ucz1mdW5jdGlvbihhKXt0aGlzLiRhbm5vdGF0aW9ucz17fTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9YVtiXSxkPWMucm93O3RoaXMuJGFubm90YXRpb25zW2RdP3RoaXMuJGFubm90YXRpb25zW2RdLnB1c2goYyk6dGhpcy4kYW5ub3RhdGlvbnNbZF09W2NdfXRoaXMuX2VtaXQoImNoYW5nZUFubm90YXRpb24iLHt9KX0sdGhpcy5nZXRBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhbm5vdGF0aW9uc3x8e319LHRoaXMuY2xlYXJBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuJGFubm90YXRpb25zPXt9LHRoaXMuX2VtaXQoImNoYW5nZUFubm90YXRpb24iLHt9KX0sdGhpcy4kZGV0ZWN0TmV3TGluZT1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eLio/KFxyP1xuKS9tKTtiP3RoaXMuJGF1dG9OZXdMaW5lPWJbMV06dGhpcy4kYXV0b05ld0xpbmU9IlxuIn0sdGhpcy5nZXRXb3JkUmFuZ2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldExpbmUoYSksZD0hMTtiPjAmJihkPSEhYy5jaGFyQXQoYi0xKS5tYXRjaCh0aGlzLnRva2VuUmUpKSxkfHwoZD0hIWMuY2hhckF0KGIpLm1hdGNoKHRoaXMudG9rZW5SZSkpO3ZhciBlPWQ/dGhpcy50b2tlblJlOnRoaXMubm9uVG9rZW5SZSxmPWI7aWYoZj4wKXtkbyBmLS07d2hpbGUoZj49MCYmYy5jaGFyQXQoZikubWF0Y2goZSkpO2YrK312YXIgZz1iO3doaWxlKGc8Yy5sZW5ndGgmJmMuY2hhckF0KGcpLm1hdGNoKGUpKWcrKztyZXR1cm4gbmV3IGkoYSxmLGEsZyl9LHRoaXMuZ2V0QVdvcmRSYW5nZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0V29yZFJhbmdlKGEsYiksZD10aGlzLmdldExpbmUoYy5lbmQucm93KTt3aGlsZShkLmNoYXJBdChjLmVuZC5jb2x1bW4pLm1hdGNoKC9bIFx0XS8pKWMuZW5kLmNvbHVtbis9MTtyZXR1cm4gY30sdGhpcy5zZXROZXdMaW5lTW9kZT1mdW5jdGlvbihhKXt0aGlzLmRvYy5zZXROZXdMaW5lTW9kZShhKX0sdGhpcy5nZXROZXdMaW5lTW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvYy5nZXROZXdMaW5lTW9kZSgpfSx0aGlzLiR1c2VXb3JrZXI9ITAsdGhpcy5zZXRVc2VXb3JrZXI9ZnVuY3Rpb24oYSl7aWYodGhpcy4kdXNlV29ya2VyPT1hKXJldHVybjt0aGlzLiR1c2VXb3JrZXI9YSx0aGlzLiRzdG9wV29ya2VyKCksYSYmdGhpcy4kc3RhcnRXb3JrZXIoKX0sdGhpcy5nZXRVc2VXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdXNlV29ya2VyfSx0aGlzLm9uUmVsb2FkVG9rZW5pemVyPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTt0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KGIuZmlyc3QpLHRoaXMuX2VtaXQoInRva2VuaXplclVwZGF0ZSIsYSl9LHRoaXMuJG1vZGU9bnVsbCx0aGlzLnNldE1vZGU9ZnVuY3Rpb24oYSl7aWYodGhpcy4kbW9kZT09PWEpcmV0dXJuO3RoaXMuJG1vZGU9YSx0aGlzLiRzdG9wV29ya2VyKCksdGhpcy4kdXNlV29ya2VyJiZ0aGlzLiRzdGFydFdvcmtlcigpO3ZhciBiPWEuZ2V0VG9rZW5pemVyKCk7aWYoYi5hZGRFdmVudExpc3RlbmVyIT09dW5kZWZpbmVkKXt2YXIgYz10aGlzLm9uUmVsb2FkVG9rZW5pemVyLmJpbmQodGhpcyk7Yi5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGUiLGMpfWlmKCF0aGlzLmJnVG9rZW5pemVyKXt0aGlzLmJnVG9rZW5pemVyPW5ldyBrKGIpO3ZhciBkPXRoaXM7dGhpcy5iZ1Rva2VuaXplci5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGUiLGZ1bmN0aW9uKGEpe2QuX2VtaXQoInRva2VuaXplclVwZGF0ZSIsYSl9KX1lbHNlIHRoaXMuYmdUb2tlbml6ZXIuc2V0VG9rZW5pemVyKGIpO3RoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgpKSx0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApLHRoaXMudG9rZW5SZT1hLnRva2VuUmUsdGhpcy5ub25Ub2tlblJlPWEubm9uVG9rZW5SZSx0aGlzLiRzZXRGb2xkaW5nKGEuZm9sZGluZ1J1bGVzKSx0aGlzLl9lbWl0KCJjaGFuZ2VNb2RlIil9LHRoaXMuJHN0b3BXb3JrZXI9ZnVuY3Rpb24oKXt0aGlzLiR3b3JrZXImJnRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbH0sdGhpcy4kc3RhcnRXb3JrZXI9ZnVuY3Rpb24oKXtpZih0eXBlb2YgV29ya2VyIT0idW5kZWZpbmVkIiYmIWEubm9Xb3JrZXIpdHJ5e3RoaXMuJHdvcmtlcj10aGlzLiRtb2RlLmNyZWF0ZVdvcmtlcih0aGlzKX1jYXRjaChiKXtjb25zb2xlLmxvZygiQ291bGQgbm90IGxvYWQgd29ya2VyIiksY29uc29sZS5sb2coYiksdGhpcy4kd29ya2VyPW51bGx9ZWxzZSB0aGlzLiR3b3JrZXI9bnVsbH0sdGhpcy5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG1vZGV9LHRoaXMuJHNjcm9sbFRvcD0wLHRoaXMuc2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKGEpe2E9TWF0aC5yb3VuZChNYXRoLm1heCgwLGEpKTtpZih0aGlzLiRzY3JvbGxUb3A9PT1hKXJldHVybjt0aGlzLiRzY3JvbGxUb3A9YSx0aGlzLl9lbWl0KCJjaGFuZ2VTY3JvbGxUb3AiLGEpfSx0aGlzLmdldFNjcm9sbFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzY3JvbGxUb3B9LHRoaXMuJHNjcm9sbExlZnQ9MCx0aGlzLnNldFNjcm9sbExlZnQ9ZnVuY3Rpb24oYSl7YT1NYXRoLnJvdW5kKE1hdGgubWF4KDAsYSkpO2lmKHRoaXMuJHNjcm9sbExlZnQ9PT1hKXJldHVybjt0aGlzLiRzY3JvbGxMZWZ0PWEsdGhpcy5fZW1pdCgiY2hhbmdlU2Nyb2xsTGVmdCIsYSl9LHRoaXMuZ2V0U2Nyb2xsTGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzY3JvbGxMZWZ0fSx0aGlzLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNvbXB1dGVXaWR0aCgpLHRoaXMud2lkdGh9LHRoaXMuZ2V0U2NyZWVuV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY29tcHV0ZVdpZHRoKCksdGhpcy5zY3JlZW5XaWR0aH0sdGhpcy4kY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKGEpe2lmKHRoaXMuJG1vZGlmaWVkfHxhKXt0aGlzLiRtb2RpZmllZD0hMTt2YXIgYj10aGlzLmRvYy5nZXRBbGxMaW5lcygpLGM9MCxkPTA7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMuZ2V0Rm9sZExpbmUoZSksZyxoO2c9YltlXTtpZihmKXt2YXIgaT1mLnJhbmdlLmVuZDtnPXRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKGYpLGU9aS5yb3d9aD1nLmxlbmd0aCxjPU1hdGgubWF4KGMsaCksdGhpcy4kdXNlV3JhcE1vZGV8fChkPU1hdGgubWF4KGQsdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgoZylbMF0pKX10aGlzLndpZHRoPWMsdGhpcy4kdXNlV3JhcE1vZGU/dGhpcy5zY3JlZW5XaWR0aD10aGlzLiR3cmFwTGltaXQ6dGhpcy5zY3JlZW5XaWR0aD1kfX0sdGhpcy5nZXRMaW5lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRvYy5nZXRMaW5lKGEpfSx0aGlzLmdldExpbmVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZG9jLmdldExpbmVzKGEsYil9LHRoaXMuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jLmdldExlbmd0aCgpfSx0aGlzLmdldFRleHRSYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kb2MuZ2V0VGV4dFJhbmdlKGEpfSx0aGlzLmluc2VydD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmRvYy5pbnNlcnQoYSxiKX0sdGhpcy5yZW1vdmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZG9jLnJlbW92ZShhKX0sdGhpcy51bmRvQ2hhbmdlcz1mdW5jdGlvbihhLGIpe2lmKCFhLmxlbmd0aClyZXR1cm47dGhpcy4kZnJvbVVuZG89ITA7dmFyIGM9bnVsbDtmb3IodmFyIGQ9YS5sZW5ndGgtMTtkIT0tMTtkLS0pe3ZhciBlPWFbZF07ZS5ncm91cD09ImRvYyI/KHRoaXMuZG9jLnJldmVydERlbHRhcyhlLmRlbHRhcyksYz10aGlzLiRnZXRVbmRvU2VsZWN0aW9uKGUuZGVsdGFzLCEwLGMpKTplLmRlbHRhcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuYWRkRm9sZHMoYS5mb2xkcyl9LHRoaXMpfXJldHVybiB0aGlzLiRmcm9tVW5kbz0hMSxjJiZ0aGlzLiR1bmRvU2VsZWN0JiYhYiYmdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoYyksY30sdGhpcy5yZWRvQ2hhbmdlcz1mdW5jdGlvbihhLGIpe2lmKCFhLmxlbmd0aClyZXR1cm47dGhpcy4kZnJvbVVuZG89ITA7dmFyIGM9bnVsbDtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YVtkXTtlLmdyb3VwPT0iZG9jIiYmKHRoaXMuZG9jLmFwcGx5RGVsdGFzKGUuZGVsdGFzKSxjPXRoaXMuJGdldFVuZG9TZWxlY3Rpb24oZS5kZWx0YXMsITEsYykpfXJldHVybiB0aGlzLiRmcm9tVW5kbz0hMSxjJiZ0aGlzLiR1bmRvU2VsZWN0JiYhYiYmdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoYyksY30sdGhpcy5zZXRVbmRvU2VsZWN0PWZ1bmN0aW9uKGEpe3RoaXMuJHVuZG9TZWxlY3Q9YX0sdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbj1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYz1hLmFjdGlvbj09Imluc2VydFRleHQifHxhLmFjdGlvbj09Imluc2VydExpbmVzIjtyZXR1cm4gYj8hYzpjfXZhciBlPWFbMF0sZixnLGg9ITE7ZChlKT8oZj1lLnJhbmdlLmNsb25lKCksaD0hMCk6KGY9aS5mcm9tUG9pbnRzKGUucmFuZ2Uuc3RhcnQsZS5yYW5nZS5zdGFydCksaD0hMSk7Zm9yKHZhciBqPTE7ajxhLmxlbmd0aDtqKyspZT1hW2pdLGQoZSk/KGc9ZS5yYW5nZS5zdGFydCxmLmNvbXBhcmUoZy5yb3csZy5jb2x1bW4pPT0tMSYmZi5zZXRTdGFydChlLnJhbmdlLnN0YXJ0KSxnPWUucmFuZ2UuZW5kLGYuY29tcGFyZShnLnJvdyxnLmNvbHVtbik9PTEmJmYuc2V0RW5kKGUucmFuZ2UuZW5kKSxoPSEwKTooZz1lLnJhbmdlLnN0YXJ0LGYuY29tcGFyZShnLnJvdyxnLmNvbHVtbik9PS0xJiYoZj1pLmZyb21Qb2ludHMoZS5yYW5nZS5zdGFydCxlLnJhbmdlLnN0YXJ0KSksaD0hMSk7aWYoYyE9bnVsbCl7dmFyIGs9Yy5jb21wYXJlUmFuZ2UoZik7az09MT9mLnNldFN0YXJ0KGMuc3RhcnQpOms9PS0xJiZmLnNldEVuZChjLmVuZCl9cmV0dXJuIGZ9LHRoaXMucmVwbGFjZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmRvYy5yZXBsYWNlKGEsYil9LHRoaXMubW92ZVRleHQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldFRleHRSYW5nZShhKTt0aGlzLnJlbW92ZShhKTt2YXIgZD1iLnJvdyxlPWIuY29sdW1uOyFhLmlzTXVsdGlMaW5lKCkmJmEuc3RhcnQucm93PT1kJiZhLmVuZC5jb2x1bW48ZSYmKGUtPWMubGVuZ3RoKTtpZihhLmlzTXVsdGlMaW5lKCkmJmEuZW5kLnJvdzxkKXt2YXIgZj10aGlzLmRvYy4kc3BsaXQoYyk7ZC09Zi5sZW5ndGgtMX12YXIgZz1kK2EuZW5kLnJvdy1hLnN0YXJ0LnJvdyxoPWEuaXNNdWx0aUxpbmUoKT9hLmVuZC5jb2x1bW46ZSthLmVuZC5jb2x1bW4tYS5zdGFydC5jb2x1bW4saj1uZXcgaShkLGUsZyxoKTtyZXR1cm4gdGhpcy5pbnNlcnQoai5zdGFydCxjKSxqfSx0aGlzLmluZGVudFJvd3M9ZnVuY3Rpb24oYSxiLGMpe2M9Yy5yZXBsYWNlKC9cdC9nLHRoaXMuZ2V0VGFiU3RyaW5nKCkpO2Zvcih2YXIgZD1hO2Q8PWI7ZCsrKXRoaXMuaW5zZXJ0KHtyb3c6ZCxjb2x1bW46MH0sYyl9LHRoaXMub3V0ZGVudFJvd3M9ZnVuY3Rpb24oYSl7dmFyIGI9YS5jb2xsYXBzZVJvd3MoKSxjPW5ldyBpKDAsMCwwLDApLGQ9dGhpcy5nZXRUYWJTaXplKCk7Zm9yKHZhciBlPWIuc3RhcnQucm93O2U8PWIuZW5kLnJvdzsrK2Upe3ZhciBmPXRoaXMuZ2V0TGluZShlKTtjLnN0YXJ0LnJvdz1lLGMuZW5kLnJvdz1lO2Zvcih2YXIgZz0wO2c8ZDsrK2cpaWYoZi5jaGFyQXQoZykhPSIgIilicmVhaztnPGQmJmYuY2hhckF0KGcpPT0iXHQiPyhjLnN0YXJ0LmNvbHVtbj1nLGMuZW5kLmNvbHVtbj1nKzEpOihjLnN0YXJ0LmNvbHVtbj0wLGMuZW5kLmNvbHVtbj1nKSx0aGlzLnJlbW92ZShjKX19LHRoaXMubW92ZUxpbmVzVXA9ZnVuY3Rpb24oYSxiKXtpZihhPD0wKXJldHVybiAwO3ZhciBjPXRoaXMuZG9jLnJlbW92ZUxpbmVzKGEsYik7cmV0dXJuIHRoaXMuZG9jLmluc2VydExpbmVzKGEtMSxjKSwtMX0sdGhpcy5tb3ZlTGluZXNEb3duPWZ1bmN0aW9uKGEsYil7aWYoYj49dGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSlyZXR1cm4gMDt2YXIgYz10aGlzLmRvYy5yZW1vdmVMaW5lcyhhLGIpO3JldHVybiB0aGlzLmRvYy5pbnNlcnRMaW5lcyhhKzEsYyksMX0sdGhpcy5kdXBsaWNhdGVMaW5lcz1mdW5jdGlvbihhLGIpe3ZhciBhPXRoaXMuJGNsaXBSb3dUb0RvY3VtZW50KGEpLGI9dGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQoYiksYz10aGlzLmdldExpbmVzKGEsYik7dGhpcy5kb2MuaW5zZXJ0TGluZXMoYSxjKTt2YXIgZD1iLWErMTtyZXR1cm4gZH0sdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oYSx0aGlzLmRvYy5nZXRMZW5ndGgoKS0xKSl9LHRoaXMuJGNsaXBDb2x1bW5Ub1Jvdz1mdW5jdGlvbihhLGIpe3JldHVybiBiPDA/MDpNYXRoLm1pbih0aGlzLmRvYy5nZXRMaW5lKGEpLmxlbmd0aCxiKX0sdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudD1mdW5jdGlvbihhLGIpe2I9TWF0aC5tYXgoMCxiKTtpZihhPDApYT0wLGI9MDtlbHNle3ZhciBjPXRoaXMuZG9jLmdldExlbmd0aCgpO2E+PWM/KGE9Yy0xLGI9dGhpcy5kb2MuZ2V0TGluZShjLTEpLmxlbmd0aCk6Yj1NYXRoLm1pbih0aGlzLmRvYy5nZXRMaW5lKGEpLmxlbmd0aCxiKX1yZXR1cm57cm93OmEsY29sdW1uOmJ9fSx0aGlzLiRjbGlwUmFuZ2VUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe2Euc3RhcnQucm93PDA/KGEuc3RhcnQucm93PTAsYS5zdGFydC5jb2x1bW49MCk6YS5zdGFydC5jb2x1bW49dGhpcy4kY2xpcENvbHVtblRvUm93KGEuc3RhcnQucm93LGEuc3RhcnQuY29sdW1uKTt2YXIgYj10aGlzLmRvYy5nZXRMZW5ndGgoKS0xO3JldHVybiBhLmVuZC5yb3c+Yj8oYS5lbmQucm93PWIsYS5lbmQuY29sdW1uPXRoaXMuZG9jLmdldExpbmUoYikubGVuZ3RoKTphLmVuZC5jb2x1bW49dGhpcy4kY2xpcENvbHVtblRvUm93KGEuZW5kLnJvdyxhLmVuZC5jb2x1bW4pLGF9LHRoaXMuJHdyYXBMaW1pdD04MCx0aGlzLiR1c2VXcmFwTW9kZT0hMSx0aGlzLiR3cmFwTGltaXRSYW5nZT17bWluOm51bGwsbWF4Om51bGx9LHRoaXMuc2V0VXNlV3JhcE1vZGU9ZnVuY3Rpb24oYSl7aWYoYSE9dGhpcy4kdXNlV3JhcE1vZGUpe3RoaXMuJHVzZVdyYXBNb2RlPWEsdGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTtpZihhKXt2YXIgYj10aGlzLmdldExlbmd0aCgpO3RoaXMuJHdyYXBEYXRhPVtdO2Zvcih2YXIgYz0wO2M8YjtjKyspdGhpcy4kd3JhcERhdGEucHVzaChbXSk7dGhpcy4kdXBkYXRlV3JhcERhdGEoMCxiLTEpfXRoaXMuX2VtaXQoImNoYW5nZVdyYXBNb2RlIil9fSx0aGlzLmdldFVzZVdyYXBNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHVzZVdyYXBNb2RlfSx0aGlzLnNldFdyYXBMaW1pdFJhbmdlPWZ1bmN0aW9uKGEsYil7aWYodGhpcy4kd3JhcExpbWl0UmFuZ2UubWluIT09YXx8dGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4IT09Yil0aGlzLiR3cmFwTGltaXRSYW5nZS5taW49YSx0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXg9Yix0aGlzLiRtb2RpZmllZD0hMCx0aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTW9kZSIpfSx0aGlzLmFkanVzdFdyYXBMaW1pdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLiRjb25zdHJhaW5XcmFwTGltaXQoYSk7cmV0dXJuIGIhPXRoaXMuJHdyYXBMaW1pdCYmYj4wPyh0aGlzLiR3cmFwTGltaXQ9Yix0aGlzLiRtb2RpZmllZD0hMCx0aGlzLiR1c2VXcmFwTW9kZSYmKHRoaXMuJHVwZGF0ZVdyYXBEYXRhKDAsdGhpcy5nZXRMZW5ndGgoKS0xKSx0aGlzLiRyZXNldFJvd0NhY2hlKDApLHRoaXMuX2VtaXQoImNoYW5nZVdyYXBMaW1pdCIpKSwhMCk6ITF9LHRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLiR3cmFwTGltaXRSYW5nZS5taW47YiYmKGE9TWF0aC5tYXgoYixhKSk7dmFyIGM9dGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4O3JldHVybiBjJiYoYT1NYXRoLm1pbihjLGEpKSxNYXRoLm1heCgxLGEpfSx0aGlzLmdldFdyYXBMaW1pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR3cmFwTGltaXR9LHRoaXMuZ2V0V3JhcExpbWl0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm57bWluOnRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbixtYXg6dGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4fX0sdGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kdXNlV3JhcE1vZGUsYyxkPWEuZGF0YS5hY3Rpb24sZT1hLmRhdGEucmFuZ2Uuc3RhcnQucm93LGY9YS5kYXRhLnJhbmdlLmVuZC5yb3csZz1hLmRhdGEucmFuZ2Uuc3RhcnQsaD1hLmRhdGEucmFuZ2UuZW5kLGk9bnVsbDtkLmluZGV4T2YoIkxpbmVzIikhPS0xPyhkPT0iaW5zZXJ0TGluZXMiP2Y9ZSthLmRhdGEubGluZXMubGVuZ3RoOmY9ZSxjPWEuZGF0YS5saW5lcz9hLmRhdGEubGluZXMubGVuZ3RoOmYtZSk6Yz1mLWU7aWYoYyE9MClpZihkLmluZGV4T2YoInJlbW92ZSIpIT0tMSl7YiYmdGhpcy4kd3JhcERhdGEuc3BsaWNlKGUsYyk7dmFyIGo9dGhpcy4kZm9sZERhdGE7aT10aGlzLmdldEZvbGRzSW5SYW5nZShhLmRhdGEucmFuZ2UpLHRoaXMucmVtb3ZlRm9sZHMoaSk7dmFyIGs9dGhpcy5nZXRGb2xkTGluZShoLnJvdyksbD0wO2lmKGspe2suYWRkUmVtb3ZlQ2hhcnMoaC5yb3csaC5jb2x1bW4sZy5jb2x1bW4taC5jb2x1bW4pLGsuc2hpZnRSb3coLWMpO3ZhciBtPXRoaXMuZ2V0Rm9sZExpbmUoZSk7bSYmbSE9PWsmJihtLm1lcmdlKGspLGs9bSksbD1qLmluZGV4T2YoaykrMX1mb3IobDtsPGoubGVuZ3RoO2wrKyl7dmFyIGs9altsXTtrLnN0YXJ0LnJvdz49aC5yb3cmJmsuc2hpZnRSb3coLWMpfWY9ZX1lbHNle3ZhciBuO2lmKGIpe249W2UsMF07Zm9yKHZhciBvPTA7bzxjO28rKyluLnB1c2goW10pO3RoaXMuJHdyYXBEYXRhLnNwbGljZS5hcHBseSh0aGlzLiR3cmFwRGF0YSxuKX12YXIgaj10aGlzLiRmb2xkRGF0YSxrPXRoaXMuZ2V0Rm9sZExpbmUoZSksbD0wO2lmKGspe3ZhciBwPWsucmFuZ2UuY29tcGFyZUluc2lkZShnLnJvdyxnLmNvbHVtbik7cD09MD8oaz1rLnNwbGl0KGcucm93LGcuY29sdW1uKSxrLnNoaWZ0Um93KGMpLGsuYWRkUmVtb3ZlQ2hhcnMoZiwwLGguY29sdW1uLWcuY29sdW1uKSk6cD09LTEmJihrLmFkZFJlbW92ZUNoYXJzKGUsMCxoLmNvbHVtbi1nLmNvbHVtbiksay5zaGlmdFJvdyhjKSksbD1qLmluZGV4T2YoaykrMX1mb3IobDtsPGoubGVuZ3RoO2wrKyl7dmFyIGs9altsXTtrLnN0YXJ0LnJvdz49ZSYmay5zaGlmdFJvdyhjKX19ZWxzZXtjPU1hdGguYWJzKGEuZGF0YS5yYW5nZS5zdGFydC5jb2x1bW4tYS5kYXRhLnJhbmdlLmVuZC5jb2x1bW4pLGQuaW5kZXhPZigicmVtb3ZlIikhPS0xJiYoaT10aGlzLmdldEZvbGRzSW5SYW5nZShhLmRhdGEucmFuZ2UpLHRoaXMucmVtb3ZlRm9sZHMoaSksYz0tYyk7dmFyIGs9dGhpcy5nZXRGb2xkTGluZShlKTtrJiZrLmFkZFJlbW92ZUNoYXJzKGUsZy5jb2x1bW4sYyl9cmV0dXJuIGImJnRoaXMuJHdyYXBEYXRhLmxlbmd0aCE9dGhpcy5kb2MuZ2V0TGVuZ3RoKCkmJmNvbnNvbGUuZXJyb3IoImRvYy5nZXRMZW5ndGgoKSBhbmQgJHdyYXBEYXRhLmxlbmd0aCBoYXZlIHRvIGJlIHRoZSBzYW1lISIpLGImJnRoaXMuJHVwZGF0ZVdyYXBEYXRhKGUsZiksaX0sdGhpcy4kdXBkYXRlV3JhcERhdGE9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmRvYy5nZXRBbGxMaW5lcygpLGQ9dGhpcy5nZXRUYWJTaXplKCksZj10aGlzLiR3cmFwRGF0YSxpPXRoaXMuJHdyYXBMaW1pdCxqLGssbT1hO2I9TWF0aC5taW4oYixjLmxlbmd0aC0xKTt3aGlsZShtPD1iKXtrPXRoaXMuZ2V0Rm9sZExpbmUobSxrKTtpZighaylqPXRoaXMuJGdldERpc3BsYXlUb2tlbnMoZS5zdHJpbmdUcmltUmlnaHQoY1ttXSkpLGZbbV09dGhpcy4kY29tcHV0ZVdyYXBTcGxpdHMoaixpLGQpLG0rKztlbHNle2o9W10say53YWxrKGZ1bmN0aW9uKGEsYixkLGUpe3ZhciBmO2lmKGEpe2Y9dGhpcy4kZ2V0RGlzcGxheVRva2VucyhhLGoubGVuZ3RoKSxmWzBdPWc7Zm9yKHZhciBpPTE7aTxmLmxlbmd0aDtpKyspZltpXT1ofWVsc2UgZj10aGlzLiRnZXREaXNwbGF5VG9rZW5zKGNbYl0uc3Vic3RyaW5nKGUsZCksai5sZW5ndGgpO2o9ai5jb25jYXQoZil9LmJpbmQodGhpcyksay5lbmQucm93LGNbay5lbmQucm93XS5sZW5ndGgrMSk7d2hpbGUoai5sZW5ndGghPTAmJmpbai5sZW5ndGgtMV0+PWwpai5wb3AoKTtmW2suc3RhcnQucm93XT10aGlzLiRjb21wdXRlV3JhcFNwbGl0cyhqLGksZCksbT1rLmVuZC5yb3crMX19fTt2YXIgYj0xLGM9MixnPTMsaD00LGo9OSxsPTEwLG09MTEsbj0xMjt0aGlzLiRjb21wdXRlV3JhcFNwbGl0cz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGkoYil7dmFyIGQ9YS5zbGljZShlLGIpLGc9ZC5sZW5ndGg7ZC5qb2luKCIiKS5yZXBsYWNlKC8xMi9nLGZ1bmN0aW9uKCl7Zy09MX0pLnJlcGxhY2UoLzIvZyxmdW5jdGlvbigpe2ctPTF9KSxmKz1nLGMucHVzaChmKSxlPWJ9aWYoYS5sZW5ndGg9PTApcmV0dXJuW107dmFyIGM9W10sZD1hLmxlbmd0aCxlPTAsZj0wO3doaWxlKGQtZT5iKXt2YXIgaz1lK2I7aWYoYVtrXT49bCl7d2hpbGUoYVtrXT49bClrKys7aShrKTtjb250aW51ZX1pZihhW2tdPT1nfHxhW2tdPT1oKXtmb3IoaztrIT1lLTE7ay0tKWlmKGFba109PWcpYnJlYWs7aWYoaz5lKXtpKGspO2NvbnRpbnVlfWs9ZStiO2ZvcihrO2s8YS5sZW5ndGg7aysrKWlmKGFba10hPWgpYnJlYWs7aWYoaz09YS5sZW5ndGgpYnJlYWs7aShrKTtjb250aW51ZX12YXIgbT1NYXRoLm1heChrLTEwLGUtMSk7d2hpbGUoaz5tJiZhW2tdPGcpay0tO3doaWxlKGs+bSYmYVtrXT09ailrLS07aWYoaz5tKXtpKCsrayk7Y29udGludWV9az1lK2IsaShrKX1yZXR1cm4gY30sdGhpcy4kZ2V0RGlzcGxheVRva2Vucz1mdW5jdGlvbihhLGQpe3ZhciBlPVtdLGY7ZD1kfHwwO2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7ZysrKXt2YXIgaD1hLmNoYXJDb2RlQXQoZyk7aWYoaD09OSl7Zj10aGlzLmdldFNjcmVlblRhYlNpemUoZS5sZW5ndGgrZCksZS5wdXNoKG0pO2Zvcih2YXIgaT0xO2k8ZjtpKyspZS5wdXNoKG4pfWVsc2UgaD09MzI/ZS5wdXNoKGwpOmg+MzkmJmg8NDh8fGg+NTcmJmg8NjQ/ZS5wdXNoKGopOmg+PTQzNTImJm8oaCk/ZS5wdXNoKGIsYyk6ZS5wdXNoKGIpfXJldHVybiBlfSx0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aD1mdW5jdGlvbihhLGIsYyl7aWYoYj09MClyZXR1cm5bMCwwXTtiPT1udWxsJiYoYj1jK2EubGVuZ3RoKk1hdGgubWF4KHRoaXMuZ2V0VGFiU2l6ZSgpLDIpKSxjPWN8fDA7dmFyIGQsZTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXtkPWEuY2hhckNvZGVBdChlKSxkPT05P2MrPXRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShjKTpkPj00MzUyJiZvKGQpP2MrPTI6Yys9MTtpZihjPmIpYnJlYWt9cmV0dXJuW2MsZV19LHRoaXMuZ2V0Um93TGVuZ3RoPWZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLiR1c2VXcmFwTW9kZXx8IXRoaXMuJHdyYXBEYXRhW2FdPzE6dGhpcy4kd3JhcERhdGFbYV0ubGVuZ3RoKzF9LHRoaXMuZ2V0Um93SGVpZ2h0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZ2V0Um93TGVuZ3RoKGIpKmEubGluZUhlaWdodH0sdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Db2x1bW4oYSx0aGlzLmRvYy5nZXRMaW5lKGEpLmxlbmd0aCl9LHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGEsYik7cmV0dXJuIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihjKX0sdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyhhLGIpO3JldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihjLE51bWJlci5NQVhfVkFMVUUvMTApfSx0aGlzLmdldFJvd1NwbGl0RGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGU/dGhpcy4kd3JhcERhdGFbYV06dW5kZWZpbmVkfSx0aGlzLmdldFNjcmVlblRhYlNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJHRhYlNpemUtYSV0aGlzLiR0YWJTaXplfSx0aGlzLnNjcmVlblRvRG9jdW1lbnRSb3c9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oYSxiKS5yb3d9LHRoaXMuc2NyZWVuVG9Eb2N1bWVudENvbHVtbj1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihhLGIpLmNvbHVtbn0sdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb249ZnVuY3Rpb24oYSxiKXtpZihhPDApcmV0dXJue3JvdzowLGNvbHVtbjowfTt2YXIgYyxkPTAsZT0wLGYsZz0wLGg9MCxpPXRoaXMuJHJvd0NhY2hlO2Zvcih2YXIgaj0wO2o8aS5sZW5ndGg7aisrKWlmKGlbal0uc2NyZWVuUm93PGEpZz1pW2pdLnNjcmVlblJvdyxkPWlbal0uZG9jUm93O2Vsc2UgYnJlYWs7dmFyIGs9IWkubGVuZ3RofHxqPT1pLmxlbmd0aCxsPXRoaXMuZ2V0TGVuZ3RoKCktMSxtPXRoaXMuZ2V0TmV4dEZvbGRMaW5lKGQpLG49bT9tLnN0YXJ0LnJvdzpJbmZpbml0eTt3aGlsZShnPD1hKXtoPXRoaXMuZ2V0Um93TGVuZ3RoKGQpO2lmKGcraC0xPj1hfHxkPj1sKWJyZWFrO2crPWgsZCsrLGQ+biYmKGQ9bS5lbmQucm93KzEsbT10aGlzLmdldE5leHRGb2xkTGluZShkLG0pLG49bT9tLnN0YXJ0LnJvdzpJbmZpbml0eSksayYmaS5wdXNoKHtkb2NSb3c6ZCxzY3JlZW5Sb3c6Z30pfWlmKG0mJm0uc3RhcnQucm93PD1kKWM9dGhpcy5nZXRGb2xkRGlzcGxheUxpbmUobSksZD1tLnN0YXJ0LnJvdztlbHNle2lmKGcraDw9YXx8ZD5sKXJldHVybntyb3c6bCxjb2x1bW46dGhpcy5nZXRMaW5lKGwpLmxlbmd0aH07Yz10aGlzLmdldExpbmUoZCksbT1udWxsfWlmKHRoaXMuJHVzZVdyYXBNb2RlKXt2YXIgbz10aGlzLiR3cmFwRGF0YVtkXTtvJiYoZj1vW2EtZ10sYT5nJiZvLmxlbmd0aCYmKGU9b1thLWctMV18fG9bby5sZW5ndGgtMV0sYz1jLnN1YnN0cmluZyhlKSkpfXJldHVybiBlKz10aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChjLGIpWzFdLHRoaXMuJHVzZVdyYXBNb2RlP2U+PWYmJihlPWYtMSk6ZT1NYXRoLm1pbihlLGMubGVuZ3RoKSxtP20uaWR4VG9Qb3NpdGlvbihlKTp7cm93OmQsY29sdW1uOmV9fSx0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbj1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiPT0idW5kZWZpbmVkIil2YXIgYz10aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KGEucm93LGEuY29sdW1uKTtlbHNlIGM9dGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChhLGIpO2E9Yy5yb3csYj1jLmNvbHVtbjt2YXIgZDtpZih0aGlzLiR1c2VXcmFwTW9kZSl7ZD10aGlzLiR3cmFwRGF0YTtpZihhPmQubGVuZ3RoLTEpcmV0dXJue3Jvdzp0aGlzLmdldFNjcmVlbkxlbmd0aCgpLGNvbHVtbjpkLmxlbmd0aD09MD8wOmRbZC5sZW5ndGgtMV0ubGVuZ3RoLTF9fXZhciBlPTAsZj1udWxsLGc9bnVsbDtnPXRoaXMuZ2V0Rm9sZEF0KGEsYiwxKSxnJiYoYT1nLnN0YXJ0LnJvdyxiPWcuc3RhcnQuY29sdW1uKTt2YXIgaCxpPTAsaj10aGlzLiRyb3dDYWNoZTtmb3IodmFyIGs9MDtrPGoubGVuZ3RoO2srKylpZihqW2tdLmRvY1JvdzxhKWU9altrXS5zY3JlZW5Sb3csaT1qW2tdLmRvY1JvdztlbHNlIGJyZWFrO3ZhciBsPSFqLmxlbmd0aHx8az09ai5sZW5ndGgsbT10aGlzLmdldE5leHRGb2xkTGluZShpKSxuPW0/bS5zdGFydC5yb3c6SW5maW5pdHk7d2hpbGUoaTxhKXtpZihpPj1uKXtoPW0uZW5kLnJvdysxO2lmKGg+YSlicmVhazttPXRoaXMuZ2V0TmV4dEZvbGRMaW5lKGgsbSksbj1tP20uc3RhcnQucm93OkluZmluaXR5fWVsc2UgaD1pKzE7ZSs9dGhpcy5nZXRSb3dMZW5ndGgoaSksaT1oLGwmJmoucHVzaCh7ZG9jUm93Omksc2NyZWVuUm93OmV9KX12YXIgbz0iIjttJiZpPj1uPyhvPXRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKG0sYSxiKSxmPW0uc3RhcnQucm93KToobz10aGlzLmdldExpbmUoYSkuc3Vic3RyaW5nKDAsYiksZj1hKTtpZih0aGlzLiR1c2VXcmFwTW9kZSl7dmFyIHA9ZFtmXSxxPTA7d2hpbGUoby5sZW5ndGg+PXBbcV0pZSsrLHErKztvPW8uc3Vic3RyaW5nKHBbcS0xXXx8MCxvLmxlbmd0aCl9cmV0dXJue3JvdzplLGNvbHVtbjp0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChvKVswXX19LHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbj1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihhLGIpLmNvbHVtbn0sdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGEsYikucm93fSx0aGlzLmdldFNjcmVlbkxlbmd0aD1mdW5jdGlvbigpe3ZhciBhPTAsYj1udWxsO2lmKCF0aGlzLiR1c2VXcmFwTW9kZSl7YT10aGlzLmdldExlbmd0aCgpO3ZhciBjPXRoaXMuJGZvbGREYXRhO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWI9Y1tkXSxhLT1iLmVuZC5yb3ctYi5zdGFydC5yb3d9ZWxzZXt2YXIgZT10aGlzLiR3cmFwRGF0YS5sZW5ndGgsZj0wLGQ9MCxiPXRoaXMuJGZvbGREYXRhW2QrK10sZz1iP2Iuc3RhcnQucm93OkluZmluaXR5O3doaWxlKGY8ZSlhKz10aGlzLiR3cmFwRGF0YVtmXS5sZW5ndGgrMSxmKyssZj5nJiYoZj1iLmVuZC5yb3crMSxiPXRoaXMuJGZvbGREYXRhW2QrK10sZz1iP2Iuc3RhcnQucm93OkluZmluaXR5KX1yZXR1cm4gYX19KSkuY2FsbChsLnByb3RvdHlwZSksYSgiLi9lZGl0X3Nlc3Npb24vZm9sZGluZyIpLkZvbGRpbmcuY2FsbChsLnByb3RvdHlwZSksYSgiLi9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaCIpLkJyYWNrZXRNYXRjaC5jYWxsKGwucHJvdG90eXBlKSxiLkVkaXRTZXNzaW9uPWx9KSxhY2UuZGVmaW5lKCJhY2Uvc2VsZWN0aW9uIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vbGliL29vcCIpLGU9YSgiLi9saWIvbGFuZyIpLGY9YSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixnPWEoIi4vcmFuZ2UiKS5SYW5nZSxoPWZ1bmN0aW9uKGEpe3RoaXMuc2Vzc2lvbj1hLHRoaXMuZG9jPWEuZ2V0RG9jdW1lbnQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZWxlY3Rpb25MZWFkPXRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLDApLHRoaXMuc2VsZWN0aW9uQW5jaG9yPXRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLDApO3ZhciBiPXRoaXM7dGhpcy5zZWxlY3Rpb25MZWFkLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKGEpe2IuX2VtaXQoImNoYW5nZUN1cnNvciIpLGIuJGlzRW1wdHl8fGIuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpLCFiLiRwcmV2ZW50VXBkYXRlRGVzaXJlZENvbHVtbk9uQ2hhbmdlJiZhLm9sZC5jb2x1bW4hPWEudmFsdWUuY29sdW1uJiZiLiR1cGRhdGVEZXNpcmVkQ29sdW1uKCl9KSx0aGlzLnNlbGVjdGlvbkFuY2hvci5vbigiY2hhbmdlIixmdW5jdGlvbigpe2IuJGlzRW1wdHl8fGIuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpfSl9OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGYpLHRoaXMuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRpc0VtcHR5fHx0aGlzLnNlbGVjdGlvbkFuY2hvci5yb3c9PXRoaXMuc2VsZWN0aW9uTGVhZC5yb3cmJnRoaXMuc2VsZWN0aW9uQW5jaG9yLmNvbHVtbj09dGhpcy5zZWxlY3Rpb25MZWFkLmNvbHVtbn0sdGhpcy5pc011bHRpTGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8hMTp0aGlzLmdldFJhbmdlKCkuaXNNdWx0aUxpbmUoKX0sdGhpcy5nZXRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25MZWFkLmdldFBvc2l0aW9uKCl9LHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yPWZ1bmN0aW9uKGEsYil7dGhpcy5zZWxlY3Rpb25BbmNob3Iuc2V0UG9zaXRpb24oYSxiKSx0aGlzLiRpc0VtcHR5JiYodGhpcy4kaXNFbXB0eT0hMSx0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKSl9LHRoaXMuZ2V0U2VsZWN0aW9uQW5jaG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGlzRW1wdHk/dGhpcy5nZXRTZWxlY3Rpb25MZWFkKCk6dGhpcy5zZWxlY3Rpb25BbmNob3IuZ2V0UG9zaXRpb24oKX0sdGhpcy5nZXRTZWxlY3Rpb25MZWFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTGVhZC5nZXRQb3NpdGlvbigpfSx0aGlzLnNoaWZ0U2VsZWN0aW9uPWZ1bmN0aW9uKGEpe2lmKHRoaXMuJGlzRW1wdHkpe3RoaXMubW92ZUN1cnNvclRvKHRoaXMuc2VsZWN0aW9uTGVhZC5yb3csdGhpcy5zZWxlY3Rpb25MZWFkLmNvbHVtbithKTtyZXR1cm59dmFyIGI9dGhpcy5nZXRTZWxlY3Rpb25BbmNob3IoKSxjPXRoaXMuZ2V0U2VsZWN0aW9uTGVhZCgpLGQ9dGhpcy5pc0JhY2t3YXJkcygpOyghZHx8Yi5jb2x1bW4hPT0wKSYmdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoYi5yb3csYi5jb2x1bW4rYSksKGR8fGMuY29sdW1uIT09MCkmJnRoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKXt0aGlzLm1vdmVDdXJzb3JUbyhjLnJvdyxjLmNvbHVtbithKX0pfSx0aGlzLmlzQmFja3dhcmRzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25BbmNob3IsYj10aGlzLnNlbGVjdGlvbkxlYWQ7cmV0dXJuIGEucm93PmIucm93fHxhLnJvdz09Yi5yb3cmJmEuY29sdW1uPmIuY29sdW1ufSx0aGlzLmdldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25BbmNob3IsYj10aGlzLnNlbGVjdGlvbkxlYWQ7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP2cuZnJvbVBvaW50cyhiLGIpOnRoaXMuaXNCYWNrd2FyZHMoKT9nLmZyb21Qb2ludHMoYixhKTpnLmZyb21Qb2ludHMoYSxiKX0sdGhpcy5jbGVhclNlbGVjdGlvbj1mdW5jdGlvbigpe3RoaXMuJGlzRW1wdHl8fCh0aGlzLiRpc0VtcHR5PSEwLHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRvYy5nZXRMZW5ndGgoKS0xO3RoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKGEsdGhpcy5kb2MuZ2V0TGluZShhKS5sZW5ndGgpLHRoaXMubW92ZUN1cnNvclRvKDAsMCl9LHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2U9ZnVuY3Rpb24oYSxiKXtiPyh0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihhLmVuZC5yb3csYS5lbmQuY29sdW1uKSx0aGlzLnNlbGVjdFRvKGEuc3RhcnQucm93LGEuc3RhcnQuY29sdW1uKSk6KHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKGEuc3RhcnQucm93LGEuc3RhcnQuY29sdW1uKSx0aGlzLnNlbGVjdFRvKGEuZW5kLnJvdyxhLmVuZC5jb2x1bW4pKSx0aGlzLiR1cGRhdGVEZXNpcmVkQ29sdW1uKCl9LHRoaXMuJHVwZGF0ZURlc2lyZWRDb2x1bW49ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEN1cnNvcigpO3RoaXMuJGRlc2lyZWRDb2x1bW49dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Db2x1bW4oYS5yb3csYS5jb2x1bW4pfSx0aGlzLiRtb3ZlU2VsZWN0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc2VsZWN0aW9uTGVhZDt0aGlzLiRpc0VtcHR5JiZ0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihiLnJvdyxiLmNvbHVtbiksYS5jYWxsKHRoaXMpfSx0aGlzLnNlbGVjdFRvPWZ1bmN0aW9uKGEsYil7dGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvclRvKGEsYil9KX0sdGhpcy5zZWxlY3RUb1Bvc2l0aW9uPWZ1bmN0aW9uKGEpe3RoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKXt0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGEpfSl9LHRoaXMuc2VsZWN0VXA9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvclVwKX0sdGhpcy5zZWxlY3REb3duPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JEb3duKX0sdGhpcy5zZWxlY3RSaWdodD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yUmlnaHQpfSx0aGlzLnNlbGVjdExlZnQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxlZnQpfSx0aGlzLnNlbGVjdExpbmVTdGFydD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0KX0sdGhpcy5zZWxlY3RMaW5lRW5kPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMaW5lRW5kKX0sdGhpcy5zZWxlY3RGaWxlRW5kPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JGaWxlRW5kKX0sdGhpcy5zZWxlY3RGaWxlU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVTdGFydCl9LHRoaXMuc2VsZWN0V29yZFJpZ2h0PWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQpfSx0aGlzLnNlbGVjdFdvcmRMZWZ0PWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCl9LHRoaXMuc2VsZWN0V29yZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0Q3Vyc29yKCksYj10aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKGEucm93LGEuY29sdW1uKTt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGIpfSx0aGlzLnNlbGVjdEFXb3JkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRDdXJzb3IoKSxiPXRoaXMuc2Vzc2lvbi5nZXRBV29yZFJhbmdlKGEucm93LGEuY29sdW1uKTt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGIpfSx0aGlzLnNlbGVjdExpbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlbGVjdGlvbkxlYWQucm93LGIsYz10aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUoYSk7Yz8oYT1jLnN0YXJ0LnJvdyxiPWMuZW5kLnJvdyk6Yj1hLHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKGEsMCksdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvclRvKGIrMSwwKX0pfSx0aGlzLm1vdmVDdXJzb3JVcD1mdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvckJ5KC0xLDApfSx0aGlzLm1vdmVDdXJzb3JEb3duPWZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yQnkoMSwwKX0sdGhpcy5tb3ZlQ3Vyc29yTGVmdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsZWN0aW9uTGVhZC5nZXRQb3NpdGlvbigpLGI7aWYoYj10aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGEucm93LGEuY29sdW1uLC0xKSl0aGlzLm1vdmVDdXJzb3JUbyhiLnN0YXJ0LnJvdyxiLnN0YXJ0LmNvbHVtbik7ZWxzZSBpZihhLmNvbHVtbj09MClhLnJvdz4wJiZ0aGlzLm1vdmVDdXJzb3JUbyhhLnJvdy0xLHRoaXMuZG9jLmdldExpbmUoYS5yb3ctMSkubGVuZ3RoKTtlbHNle3ZhciBjPXRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCk7dGhpcy5zZXNzaW9uLmlzVGFiU3RvcChhKSYmdGhpcy5kb2MuZ2V0TGluZShhLnJvdykuc2xpY2UoYS5jb2x1bW4tYyxhLmNvbHVtbikuc3BsaXQoIiAiKS5sZW5ndGgtMT09Yz90aGlzLm1vdmVDdXJzb3JCeSgwLC1jKTp0aGlzLm1vdmVDdXJzb3JCeSgwLC0xKX19LHRoaXMubW92ZUN1cnNvclJpZ2h0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25MZWFkLmdldFBvc2l0aW9uKCksYjtpZihiPXRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoYS5yb3csYS5jb2x1bW4sMSkpdGhpcy5tb3ZlQ3Vyc29yVG8oYi5lbmQucm93LGIuZW5kLmNvbHVtbik7ZWxzZSBpZih0aGlzLnNlbGVjdGlvbkxlYWQuY29sdW1uPT10aGlzLmRvYy5nZXRMaW5lKHRoaXMuc2VsZWN0aW9uTGVhZC5yb3cpLmxlbmd0aCl0aGlzLnNlbGVjdGlvbkxlYWQucm93PHRoaXMuZG9jLmdldExlbmd0aCgpLTEmJnRoaXMubW92ZUN1cnNvclRvKHRoaXMuc2VsZWN0aW9uTGVhZC5yb3crMSwwKTtlbHNle3ZhciBjPXRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCksYT10aGlzLnNlbGVjdGlvbkxlYWQ7dGhpcy5zZXNzaW9uLmlzVGFiU3RvcChhKSYmdGhpcy5kb2MuZ2V0TGluZShhLnJvdykuc2xpY2UoYS5jb2x1bW4sYS5jb2x1bW4rYykuc3BsaXQoIiAiKS5sZW5ndGgtMT09Yz90aGlzLm1vdmVDdXJzb3JCeSgwLGMpOnRoaXMubW92ZUN1cnNvckJ5KDAsMSl9fSx0aGlzLm1vdmVDdXJzb3JMaW5lU3RhcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlbGVjdGlvbkxlYWQucm93LGI9dGhpcy5zZWxlY3Rpb25MZWFkLmNvbHVtbixjPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUm93KGEsYiksZD10aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGMsMCksZT10aGlzLnNlc3Npb24uZ2V0RGlzcGxheUxpbmUoYSxudWxsLGQucm93LGQuY29sdW1uKSxmPWUubWF0Y2goL15ccyovKTtmWzBdLmxlbmd0aD09Yj90aGlzLm1vdmVDdXJzb3JUbyhkLnJvdyxkLmNvbHVtbik6dGhpcy5tb3ZlQ3Vyc29yVG8oZC5yb3csZC5jb2x1bW4rZlswXS5sZW5ndGgpfSx0aGlzLm1vdmVDdXJzb3JMaW5lRW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25MZWFkLGI9dGhpcy5zZXNzaW9uLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uKGEucm93LGEuY29sdW1uKTt0aGlzLm1vdmVDdXJzb3JUbyhiLnJvdyxiLmNvbHVtbil9LHRoaXMubW92ZUN1cnNvckZpbGVFbmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRvYy5nZXRMZW5ndGgoKS0xLGI9dGhpcy5kb2MuZ2V0TGluZShhKS5sZW5ndGg7dGhpcy5tb3ZlQ3Vyc29yVG8oYSxiKX0sdGhpcy5tb3ZlQ3Vyc29yRmlsZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yVG8oMCwwKX0sdGhpcy5tb3ZlQ3Vyc29yV29yZFJpZ2h0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25MZWFkLnJvdyxiPXRoaXMuc2VsZWN0aW9uTGVhZC5jb2x1bW4sYz10aGlzLmRvYy5nZXRMaW5lKGEpLGQ9Yy5zdWJzdHJpbmcoYiksZTt0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg9MCx0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg9MDt2YXIgZj10aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGEsYiwxKTtpZihmKXt0aGlzLm1vdmVDdXJzb3JUbyhmLmVuZC5yb3csZi5lbmQuY29sdW1uKTtyZXR1cm59aWYoZT10aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5leGVjKGQpKWIrPXRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCx0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg9MCxkPWMuc3Vic3RyaW5nKGIpO2lmKGI+PWMubGVuZ3RoKXt0aGlzLm1vdmVDdXJzb3JUbyhhLGMubGVuZ3RoKSx0aGlzLm1vdmVDdXJzb3JSaWdodCgpLGE8dGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSYmdGhpcy5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCk7cmV0dXJufWlmKGU9dGhpcy5zZXNzaW9uLnRva2VuUmUuZXhlYyhkKSliKz10aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXgsdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4PTA7dGhpcy5tb3ZlQ3Vyc29yVG8oYSxiKX0sdGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlbGVjdGlvbkxlYWQucm93LGI9dGhpcy5zZWxlY3Rpb25MZWFkLmNvbHVtbixjO2lmKGM9dGhpcy5zZXNzaW9uLmdldEZvbGRBdChhLGIsLTEpKXt0aGlzLm1vdmVDdXJzb3JUbyhjLnN0YXJ0LnJvdyxjLnN0YXJ0LmNvbHVtbik7cmV0dXJufXZhciBkPXRoaXMuc2Vzc2lvbi5nZXRGb2xkU3RyaW5nQXQoYSxiLC0xKTtkPT1udWxsJiYoZD10aGlzLmRvYy5nZXRMaW5lKGEpLnN1YnN0cmluZygwLGIpKTt2YXIgZj1lLnN0cmluZ1JldmVyc2UoZCksZzt0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg9MCx0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg9MDtpZihnPXRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMoZikpYi09dGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4LGY9Zi5zbGljZSh0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXgpLHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleD0wO2lmKGI8PTApe3RoaXMubW92ZUN1cnNvclRvKGEsMCksdGhpcy5tb3ZlQ3Vyc29yTGVmdCgpLGE+MCYmdGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQoKTtyZXR1cm59aWYoZz10aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKGYpKWItPXRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCx0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg9MDt0aGlzLm1vdmVDdXJzb3JUbyhhLGIpfSx0aGlzLm1vdmVDdXJzb3JCeT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zZWxlY3Rpb25MZWFkLnJvdyx0aGlzLnNlbGVjdGlvbkxlYWQuY29sdW1uKSxkPWI9PT0wJiZ0aGlzLiRkZXNpcmVkQ29sdW1ufHxjLmNvbHVtbixlPXRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oYy5yb3crYSxkKTt0aGlzLm1vdmVDdXJzb3JUbyhlLnJvdyxlLmNvbHVtbitiLGI9PT0wKX0sdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbj1mdW5jdGlvbihhKXt0aGlzLm1vdmVDdXJzb3JUbyhhLnJvdyxhLmNvbHVtbil9LHRoaXMubW92ZUN1cnNvclRvPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGEsYiwxKTtkJiYoYT1kLnN0YXJ0LnJvdyxiPWQuc3RhcnQuY29sdW1uKSx0aGlzLiRwcmV2ZW50VXBkYXRlRGVzaXJlZENvbHVtbk9uQ2hhbmdlPSEwLHRoaXMuc2VsZWN0aW9uTGVhZC5zZXRQb3NpdGlvbihhLGIpLHRoaXMuJHByZXZlbnRVcGRhdGVEZXNpcmVkQ29sdW1uT25DaGFuZ2U9ITEsY3x8dGhpcy4kdXBkYXRlRGVzaXJlZENvbHVtbih0aGlzLnNlbGVjdGlvbkxlYWQuY29sdW1uKX0sdGhpcy5tb3ZlQ3Vyc29yVG9TY3JlZW49ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oYSxiKTthPWQucm93LGI9ZC5jb2x1bW4sdGhpcy5tb3ZlQ3Vyc29yVG8oYSxiLGMpfX0pKS5jYWxsKGgucHJvdG90eXBlKSxiLlNlbGVjdGlvbj1ofSksYWNlLmRlZmluZSgiYWNlL3JhbmdlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihhLGIsYyxkKXt0aGlzLnN0YXJ0PXtyb3c6YSxjb2x1bW46Yn0sdGhpcy5lbmQ9e3JvdzpjLGNvbHVtbjpkfX07KChmdW5jdGlvbigpe3RoaXMuaXNFZXF1YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3RhcnQucm93PT1hLnN0YXJ0LnJvdyYmdGhpcy5lbmQucm93PT1hLmVuZC5yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT1hLnN0YXJ0LmNvbHVtbiYmdGhpcy5lbmQuY29sdW1uPT1hLmVuZC5jb2x1bW59LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmFuZ2U6IFsiK3RoaXMuc3RhcnQucm93KyIvIit0aGlzLnN0YXJ0LmNvbHVtbisiXSAtPiBbIit0aGlzLmVuZC5yb3crIi8iK3RoaXMuZW5kLmNvbHVtbisiXSJ9LHRoaXMuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5jb21wYXJlKGEsYik9PTB9LHRoaXMuY29tcGFyZVJhbmdlPWZ1bmN0aW9uKGEpe3ZhciBiLGM9YS5lbmQsZD1hLnN0YXJ0O3JldHVybiBiPXRoaXMuY29tcGFyZShjLnJvdyxjLmNvbHVtbiksYj09MT8oYj10aGlzLmNvbXBhcmUoZC5yb3csZC5jb2x1bW4pLGI9PTE/MjpiPT0wPzE6MCk6Yj09LTE/LTI6KGI9dGhpcy5jb21wYXJlKGQucm93LGQuY29sdW1uKSxiPT0tMT8tMTpiPT0xPzQyOjApfSx0aGlzLmNvbXBhcmVQb2ludD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb21wYXJlKGEucm93LGEuY29sdW1uKX0sdGhpcy5jb250YWluc1JhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbXBhcmVQb2ludChhLnN0YXJ0KT09MCYmdGhpcy5jb21wYXJlUG9pbnQoYS5lbmQpPT0wfSx0aGlzLmlzRW5kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZW5kLnJvdz09YSYmdGhpcy5lbmQuY29sdW1uPT1ifSx0aGlzLmlzU3RhcnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PWEmJnRoaXMuc3RhcnQuY29sdW1uPT1ifSx0aGlzLnNldFN0YXJ0PWZ1bmN0aW9uKGEsYil7dHlwZW9mIGE9PSJvYmplY3QiPyh0aGlzLnN0YXJ0LmNvbHVtbj1hLmNvbHVtbix0aGlzLnN0YXJ0LnJvdz1hLnJvdyk6KHRoaXMuc3RhcnQucm93PWEsdGhpcy5zdGFydC5jb2x1bW49Yil9LHRoaXMuc2V0RW5kPWZ1bmN0aW9uKGEsYil7dHlwZW9mIGE9PSJvYmplY3QiPyh0aGlzLmVuZC5jb2x1bW49YS5jb2x1bW4sdGhpcy5lbmQucm93PWEucm93KToodGhpcy5lbmQucm93PWEsdGhpcy5lbmQuY29sdW1uPWIpfSx0aGlzLmluc2lkZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmNvbXBhcmUoYSxiKT09MD90aGlzLmlzRW5kKGEsYil8fHRoaXMuaXNTdGFydChhLGIpPyExOiEwOiExfSx0aGlzLmluc2lkZVN0YXJ0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY29tcGFyZShhLGIpPT0wP3RoaXMuaXNFbmQoYSxiKT8hMTohMDohMX0sdGhpcy5pbnNpZGVFbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5jb21wYXJlKGEsYik9PTA/dGhpcy5pc1N0YXJ0KGEsYik/ITE6ITA6ITF9LHRoaXMuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiF0aGlzLmlzTXVsdGlMaW5lKCkmJmE9PT10aGlzLnN0YXJ0LnJvdz9iPHRoaXMuc3RhcnQuY29sdW1uPy0xOmI+dGhpcy5lbmQuY29sdW1uPzE6MDphPHRoaXMuc3RhcnQucm93Py0xOmE+dGhpcy5lbmQucm93PzE6dGhpcy5zdGFydC5yb3c9PT1hP2I+PXRoaXMuc3RhcnQuY29sdW1uPzA6LTE6dGhpcy5lbmQucm93PT09YT9iPD10aGlzLmVuZC5jb2x1bW4/MDoxOjB9LHRoaXMuY29tcGFyZVN0YXJ0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuc3RhcnQucm93PT1hJiZ0aGlzLnN0YXJ0LmNvbHVtbj09Yj8tMTp0aGlzLmNvbXBhcmUoYSxiKX0sdGhpcy5jb21wYXJlRW5kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZW5kLnJvdz09YSYmdGhpcy5lbmQuY29sdW1uPT1iPzE6dGhpcy5jb21wYXJlKGEsYil9LHRoaXMuY29tcGFyZUluc2lkZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVuZC5yb3c9PWEmJnRoaXMuZW5kLmNvbHVtbj09Yj8xOnRoaXMuc3RhcnQucm93PT1hJiZ0aGlzLnN0YXJ0LmNvbHVtbj09Yj8tMTp0aGlzLmNvbXBhcmUoYSxiKX0sdGhpcy5jbGlwUm93cz1mdW5jdGlvbihhLGIpe2lmKHRoaXMuZW5kLnJvdz5iKXZhciBjPXtyb3c6YisxLGNvbHVtbjowfTtpZih0aGlzLnN0YXJ0LnJvdz5iKXZhciBlPXtyb3c6YisxLGNvbHVtbjowfTtpZih0aGlzLnN0YXJ0LnJvdzxhKXZhciBlPXtyb3c6YSxjb2x1bW46MH07aWYodGhpcy5lbmQucm93PGEpdmFyIGM9e3JvdzphLGNvbHVtbjowfTtyZXR1cm4gZC5mcm9tUG9pbnRzKGV8fHRoaXMuc3RhcnQsY3x8dGhpcy5lbmQpfSx0aGlzLmV4dGVuZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY29tcGFyZShhLGIpO2lmKGM9PTApcmV0dXJuIHRoaXM7aWYoYz09LTEpdmFyIGU9e3JvdzphLGNvbHVtbjpifTtlbHNlIHZhciBmPXtyb3c6YSxjb2x1bW46Yn07cmV0dXJuIGQuZnJvbVBvaW50cyhlfHx0aGlzLnN0YXJ0LGZ8fHRoaXMuZW5kKX0sdGhpcy5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQucm93PT10aGlzLmVuZC5yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT10aGlzLmVuZC5jb2x1bW59LHRoaXMuaXNNdWx0aUxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5yb3chPT10aGlzLmVuZC5yb3d9LHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsdGhpcy5lbmQpfSx0aGlzLmNvbGxhcHNlUm93cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC5jb2x1bW49PTA/bmV3IGQodGhpcy5zdGFydC5yb3csMCxNYXRoLm1heCh0aGlzLnN0YXJ0LnJvdyx0aGlzLmVuZC5yb3ctMSksMCk6bmV3IGQodGhpcy5zdGFydC5yb3csMCx0aGlzLmVuZC5yb3csMCl9LHRoaXMudG9TY3JlZW5SYW5nZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KSxjPWEuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZW5kKTtyZXR1cm4gbmV3IGQoYi5yb3csYi5jb2x1bW4sYy5yb3csYy5jb2x1bW4pfX0pKS5jYWxsKGQucHJvdG90eXBlKSxkLmZyb21Qb2ludHM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGQoYS5yb3csYS5jb2x1bW4sYi5yb3csYi5jb2x1bW4pfSxiLlJhbmdlPWR9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS90ZXh0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3VuaWNvZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1hKCIuL2JlaGF2aW91ciIpLkJlaGF2aW91cixnPWEoIi4uL3VuaWNvZGUiKSxoPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBkKChuZXcgZSkuZ2V0UnVsZXMoKSksdGhpcy4kYmVoYXZpb3VyPW5ldyBmfTsoKGZ1bmN0aW9uKCl7dGhpcy50b2tlblJlPW5ldyBSZWdFeHAoIl5bIitnLnBhY2thZ2VzLkwrZy5wYWNrYWdlcy5NbitnLnBhY2thZ2VzLk1jK2cucGFja2FnZXMuTmQrZy5wYWNrYWdlcy5QYysiXFwkX10rIiwiZyIpLHRoaXMubm9uVG9rZW5SZT1uZXcgUmVnRXhwKCJeKD86W14iK2cucGFja2FnZXMuTCtnLnBhY2thZ2VzLk1uK2cucGFja2FnZXMuTWMrZy5wYWNrYWdlcy5OZCtnLnBhY2thZ2VzLlBjKyJcXCRfXXxzXSkrIiwiZyIpLHRoaXMuZ2V0VG9rZW5pemVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRva2VuaXplcn0sdGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7fSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4iIn0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbH0sdGhpcy5oaWdobGlnaHRTZWxlY3Rpb249ZnVuY3Rpb24oYSl7dmFyIGI9YS5zZXNzaW9uO2IuJHNlbGVjdGlvbk9jY3VycmVuY2VzfHwoYi4kc2VsZWN0aW9uT2NjdXJyZW5jZXM9W10pLGIuJHNlbGVjdGlvbk9jY3VycmVuY2VzLmxlbmd0aCYmdGhpcy5jbGVhclNlbGVjdGlvbkhpZ2hsaWdodChhKTt2YXIgYz1hLmdldFNlbGVjdGlvblJhbmdlKCk7aWYoYy5pc0VtcHR5KCl8fGMuaXNNdWx0aUxpbmUoKSlyZXR1cm47dmFyIGQ9Yy5zdGFydC5jb2x1bW4tMSxlPWMuZW5kLmNvbHVtbisxLGY9Yi5nZXRMaW5lKGMuc3RhcnQucm93KSxnPWYubGVuZ3RoLGg9Zi5zdWJzdHJpbmcoTWF0aC5tYXgoZCwwKSxNYXRoLm1pbihlLGcpKTtpZihkPj0wJiYvXltcd1xkXS8udGVzdChoKXx8ZTw9ZyYmL1tcd1xkXSQvLnRlc3QoaCkpcmV0dXJuO2g9Zi5zdWJzdHJpbmcoYy5zdGFydC5jb2x1bW4sYy5lbmQuY29sdW1uKTtpZighL15bXHdcZF0rJC8udGVzdChoKSlyZXR1cm47dmFyIGk9YS5nZXRDdXJzb3JQb3NpdGlvbigpLGo9e3dyYXA6ITAsd2hvbGVXb3JkOiEwLGNhc2VTZW5zaXRpdmU6ITAsbmVlZGxlOmh9LGs9YS4kc2VhcmNoLmdldE9wdGlvbnMoKTthLiRzZWFyY2guc2V0KGopO3ZhciBsPWEuJHNlYXJjaC5maW5kQWxsKGIpO2wuZm9yRWFjaChmdW5jdGlvbihhKXtpZighYS5jb250YWlucyhpLnJvdyxpLmNvbHVtbikpe3ZhciBjPWIuYWRkTWFya2VyKGEsImFjZV9zZWxlY3RlZF93b3JkIiwidGV4dCIpO2IuJHNlbGVjdGlvbk9jY3VycmVuY2VzLnB1c2goYyl9fSksYS4kc2VhcmNoLnNldChrKX0sdGhpcy5jbGVhclNlbGVjdGlvbkhpZ2hsaWdodD1mdW5jdGlvbihhKXtpZighYS5zZXNzaW9uLiRzZWxlY3Rpb25PY2N1cnJlbmNlcylyZXR1cm47YS5zZXNzaW9uLiRzZWxlY3Rpb25PY2N1cnJlbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2Euc2Vzc2lvbi5yZW1vdmVNYXJrZXIoYil9KSxhLnNlc3Npb24uJHNlbGVjdGlvbk9jY3VycmVuY2VzPVtdfSx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXM9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuJGVtYmVkcylyZXR1cm47dGhpcy4kbW9kZXM9e307Zm9yKHZhciBiPTA7Yjx0aGlzLiRlbWJlZHMubGVuZ3RoO2IrKylhW3RoaXMuJGVtYmVkc1tiXV0mJih0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbYl1dPW5ldyBhW3RoaXMuJGVtYmVkc1tiXV0pO3ZhciBjPVsidG9nZ2xlQ29tbWVudExpbmVzIiwiZ2V0TmV4dExpbmVJbmRlbnQiLCJjaGVja091dGRlbnQiLCJhdXRvT3V0ZGVudCIsInRyYW5zZm9ybUFjdGlvbiJdO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKShmdW5jdGlvbihhKXt2YXIgZD1jW2JdLGU9YVtkXTthW2NbYl1dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGRlbGVnYXRvcihkLGFyZ3VtZW50cyxlKX19KSh0aGlzKX0sdGhpcy4kZGVsZWdhdG9yPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iWzBdO2Zvcih2YXIgZT0wO2U8dGhpcy4kZW1iZWRzLmxlbmd0aDtlKyspe2lmKCF0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbZV1dKWNvbnRpbnVlO3ZhciBmPWQuc3BsaXQodGhpcy4kZW1iZWRzW2VdKTtpZighZlswXSYmZlsxXSl7YlswXT1mWzFdO3ZhciBnPXRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tlXV07cmV0dXJuIGdbYV0uYXBwbHkoZyxiKX19dmFyIGg9Yy5hcHBseSh0aGlzLGIpO3JldHVybiBjP2g6dW5kZWZpbmVkfSx0aGlzLnRyYW5zZm9ybUFjdGlvbj1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKHRoaXMuJGJlaGF2aW91cil7dmFyIGY9dGhpcy4kYmVoYXZpb3VyLmdldEJlaGF2aW91cnMoKTtmb3IodmFyIGcgaW4gZilpZihmW2ddW2JdKXt2YXIgaD1mW2ddW2JdLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihoKXJldHVybiBofX19fSkpLmNhbGwoaC5wcm90b3R5cGUpLGIuTW9kZT1ofSksYWNlLmRlZmluZSgiYWNlL3Rva2VuaXplciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9ZnVuY3Rpb24oYSxiKXtiPWI/ImciK2I6ImciLHRoaXMucnVsZXM9YSx0aGlzLnJlZ0V4cHM9e30sdGhpcy5tYXRjaE1hcHBpbmdzPXt9O2Zvcih2YXIgYyBpbiB0aGlzLnJ1bGVzKXt2YXIgZD10aGlzLnJ1bGVzW2NdLGU9ZCxmPVtdLGc9MCxoPXRoaXMubWF0Y2hNYXBwaW5nc1tjXT17fTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGo9KG5ldyBSZWdFeHAoIig/OigiK2VbaV0ucmVnZXgrIil8KC4pKSIpKS5leGVjKCJhIikubGVuZ3RoLTIsaz1lW2ldLnJlZ2V4LnJlcGxhY2UoL1xcKFswLTldKykvZyxmdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKHBhcnNlSW50KGIsMTApK2crMSl9KTtoW2ddPXtydWxlOmksbGVuOmp9LGcrPWosZi5wdXNoKGspfXRoaXMucmVnRXhwc1tjXT1uZXcgUmVnRXhwKCIoPzooIitmLmpvaW4oIil8KCIpKyIpfCguKSkiLGIpfX07KChmdW5jdGlvbigpe3RoaXMuZ2V0TGluZVRva2Vucz1mdW5jdGlvbihhLGIpe3ZhciBjPWIsZD10aGlzLnJ1bGVzW2NdLGU9dGhpcy5tYXRjaE1hcHBpbmdzW2NdLGY9dGhpcy5yZWdFeHBzW2NdO2YubGFzdEluZGV4PTA7dmFyIGcsaD1bXSxpPTAsaj17dHlwZTpudWxsLHZhbHVlOiIifTt3aGlsZShnPWYuZXhlYyhhKSl7dmFyIGs9InRleHQiLGw9bnVsbCxtPVtnWzBdXTtmb3IodmFyIG49MDtuPGcubGVuZ3RoLTI7bisrKWlmKGdbbisxXSE9PXVuZGVmaW5lZCl7bD1kW2Vbbl0ucnVsZV0sZVtuXS5sZW4+MSYmKG09Zy5zbGljZShuKzIsbisxK2Vbbl0ubGVuKSksdHlwZW9mIGwudG9rZW49PSJmdW5jdGlvbiI/az1sLnRva2VuLmFwcGx5KHRoaXMsbSk6az1sLnRva2VuO3ZhciBvPWwubmV4dDtvJiZvIT09YyYmKGM9byxkPXRoaXMucnVsZXNbY10sZT10aGlzLm1hdGNoTWFwcGluZ3NbY10saT1mLmxhc3RJbmRleCxmPXRoaXMucmVnRXhwc1tjXSxmLmxhc3RJbmRleD1pKTticmVha31pZihtWzBdKXt0eXBlb2Ygaz09InN0cmluZyImJihtPVttLmpvaW4oIiIpXSxrPVtrXSk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspKCFsfHxsLm1lcmdlfHxrW25dPT09InRleHQiKSYmai50eXBlPT09a1tuXT9qLnZhbHVlKz1tW25dOihqLnR5cGUmJmgucHVzaChqKSxqPXt0eXBlOmtbbl0sdmFsdWU6bVtuXX0pfWlmKGk9PWEubGVuZ3RoKWJyZWFrO2k9Zi5sYXN0SW5kZXh9cmV0dXJuIGoudHlwZSYmaC5wdXNoKGopLHt0b2tlbnM6aCxzdGF0ZTpjfX19KSkuY2FsbChkLnByb3RvdHlwZSksYi5Ub2tlbml6ZXI9ZH0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvbGFuZyIpLGU9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiZW1wdHlfbGluZSIscmVnZXg6Il4kIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiLisifV19fTsoKGZ1bmN0aW9uKCl7dGhpcy5hZGRSdWxlcz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBhKXt2YXIgZD1hW2NdO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdO2YubmV4dD9mLm5leHQ9YitmLm5leHQ6Zi5uZXh0PWIrY310aGlzLiRydWxlc1tiK2NdPWR9fSx0aGlzLmdldFJ1bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJ1bGVzfSx0aGlzLmVtYmVkUnVsZXM9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9KG5ldyBhKS5nZXRSdWxlcygpO2lmKGUpZm9yKHZhciBnPTA7ZzxlLmxlbmd0aDtnKyspZVtnXT1iK2VbZ107ZWxzZXtlPVtdO2Zvcih2YXIgaCBpbiBmKWUucHVzaChiK2gpfXRoaXMuYWRkUnVsZXMoZixiKTtmb3IodmFyIGc9MDtnPGUubGVuZ3RoO2crKylBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLiRydWxlc1tlW2ddXSxkLmRlZXBDb3B5KGMpKTt0aGlzLiRlbWJlZHN8fCh0aGlzLiRlbWJlZHM9W10pLHRoaXMuJGVtYmVkcy5wdXNoKGIpfSx0aGlzLmdldEVtYmVkcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbWJlZHN9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuVGV4dEhpZ2hsaWdodFJ1bGVzPWV9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWZ1bmN0aW9uKCl7dGhpcy4kYmVoYXZpb3Vycz17fX07KChmdW5jdGlvbigpe3RoaXMuYWRkPWZ1bmN0aW9uKGEsYixjKXtzd2l0Y2godW5kZWZpbmVkKXtjYXNlIHRoaXMuJGJlaGF2aW91cnM6dGhpcy4kYmVoYXZpb3Vycz17fTtjYXNlIHRoaXMuJGJlaGF2aW91cnNbYV06dGhpcy4kYmVoYXZpb3Vyc1thXT17fX10aGlzLiRiZWhhdmlvdXJzW2FdW2JdPWN9LHRoaXMuYWRkQmVoYXZpb3Vycz1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlmb3IodmFyIGMgaW4gYVtiXSl0aGlzLmFkZChiLGMsYVtiXVtjXSl9LHRoaXMucmVtb3ZlPWZ1bmN0aW9uKGEpe3RoaXMuJGJlaGF2aW91cnMmJnRoaXMuJGJlaGF2aW91cnNbYV0mJmRlbGV0ZSB0aGlzLiRiZWhhdmlvdXJzW2FdfSx0aGlzLmluaGVyaXQ9ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIil2YXIgYz0obmV3IGEpLmdldEJlaGF2aW91cnMoYik7ZWxzZSB2YXIgYz1hLmdldEJlaGF2aW91cnMoYik7dGhpcy5hZGRCZWhhdmlvdXJzKGMpfSx0aGlzLmdldEJlaGF2aW91cnM9ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXMuJGJlaGF2aW91cnM7dmFyIGI9e307Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy4kYmVoYXZpb3Vyc1thW2NdXSYmKGJbYVtjXV09dGhpcy4kYmVoYXZpb3Vyc1thW2NdXSk7cmV0dXJuIGJ9fSkpLmNhbGwoZC5wcm90b3R5cGUpLGIuQmVoYXZpb3VyPWR9KSxhY2UuZGVmaW5lKCJhY2UvdW5pY29kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBjPS9cd3s0fS9nO2Zvcih2YXIgZCBpbiBhKWIucGFja2FnZXNbZF09YVtkXS5yZXBsYWNlKGMsIlxcdSQmIil9InVzZSBzdHJpY3QiLGIucGFja2FnZXM9e30sZCh7TDoiMDA0MS0wMDVBMDA2MS0wMDdBMDBBQTAwQjUwMEJBMDBDMC0wMEQ2MDBEOC0wMEY2MDBGOC0wMkMxMDJDNi0wMkQxMDJFMC0wMkU0MDJFQzAyRUUwMzcwLTAzNzQwMzc2MDM3NzAzN0EtMDM3RDAzODYwMzg4LTAzOEEwMzhDMDM4RS0wM0ExMDNBMy0wM0Y1MDNGNy0wNDgxMDQ4QS0wNTI1MDUzMS0wNTU2MDU1OTA1NjEtMDU4NzA1RDAtMDVFQTA1RjAtMDVGMjA2MjEtMDY0QTA2NkUwNjZGMDY3MS0wNkQzMDZENTA2RTUwNkU2MDZFRTA2RUYwNkZBLTA2RkMwNkZGMDcxMDA3MTItMDcyRjA3NEQtMDdBNTA3QjEwN0NBLTA3RUEwN0Y0MDdGNTA3RkEwODAwLTA4MTUwODFBMDgyNDA4MjgwOTA0LTA5MzkwOTNEMDk1MDA5NTgtMDk2MTA5NzEwOTcyMDk3OS0wOTdGMDk4NS0wOThDMDk4RjA5OTAwOTkzLTA5QTgwOUFBLTA5QjAwOUIyMDlCNi0wOUI5MDlCRDA5Q0UwOURDMDlERDA5REYtMDlFMTA5RjAwOUYxMEEwNS0wQTBBMEEwRjBBMTAwQTEzLTBBMjgwQTJBLTBBMzAwQTMyMEEzMzBBMzUwQTM2MEEzODBBMzkwQTU5LTBBNUMwQTVFMEE3Mi0wQTc0MEE4NS0wQThEMEE4Ri0wQTkxMEE5My0wQUE4MEFBQS0wQUIwMEFCMjBBQjMwQUI1LTBBQjkwQUJEMEFEMDBBRTAwQUUxMEIwNS0wQjBDMEIwRjBCMTAwQjEzLTBCMjgwQjJBLTBCMzAwQjMyMEIzMzBCMzUtMEIzOTBCM0QwQjVDMEI1RDBCNUYtMEI2MTBCNzEwQjgzMEI4NS0wQjhBMEI4RS0wQjkwMEI5Mi0wQjk1MEI5OTBCOUEwQjlDMEI5RTBCOUYwQkEzMEJBNDBCQTgtMEJBQTBCQUUtMEJCOTBCRDAwQzA1LTBDMEMwQzBFLTBDMTAwQzEyLTBDMjgwQzJBLTBDMzMwQzM1LTBDMzkwQzNEMEM1ODBDNTkwQzYwMEM2MTBDODUtMEM4QzBDOEUtMEM5MDBDOTItMENBODBDQUEtMENCMzBDQjUtMENCOTBDQkQwQ0RFMENFMDBDRTEwRDA1LTBEMEMwRDBFLTBEMTAwRDEyLTBEMjgwRDJBLTBEMzkwRDNEMEQ2MDBENjEwRDdBLTBEN0YwRDg1LTBEOTYwRDlBLTBEQjEwREIzLTBEQkIwREJEMERDMC0wREM2MEUwMS0wRTMwMEUzMjBFMzMwRTQwLTBFNDYwRTgxMEU4MjBFODQwRTg3MEU4ODBFOEEwRThEMEU5NC0wRTk3MEU5OS0wRTlGMEVBMS0wRUEzMEVBNTBFQTcwRUFBMEVBQjBFQUQtMEVCMDBFQjIwRUIzMEVCRDBFQzAtMEVDNDBFQzYwRURDMEVERDBGMDAwRjQwLTBGNDcwRjQ5LTBGNkMwRjg4LTBGOEIxMDAwLTEwMkExMDNGMTA1MC0xMDU1MTA1QS0xMDVEMTA2MTEwNjUxMDY2MTA2RS0xMDcwMTA3NS0xMDgxMTA4RTEwQTAtMTBDNTEwRDAtMTBGQTEwRkMxMTAwLTEyNDgxMjRBLTEyNEQxMjUwLTEyNTYxMjU4MTI1QS0xMjVEMTI2MC0xMjg4MTI4QS0xMjhEMTI5MC0xMkIwMTJCMi0xMkI1MTJCOC0xMkJFMTJDMDEyQzItMTJDNTEyQzgtMTJENjEyRDgtMTMxMDEzMTItMTMxNTEzMTgtMTM1QTEzODAtMTM4RjEzQTAtMTNGNDE0MDEtMTY2QzE2NkYtMTY3RjE2ODEtMTY5QTE2QTAtMTZFQTE3MDAtMTcwQzE3MEUtMTcxMTE3MjAtMTczMTE3NDAtMTc1MTE3NjAtMTc2QzE3NkUtMTc3MDE3ODAtMTdCMzE3RDcxN0RDMTgyMC0xODc3MTg4MC0xOEE4MThBQTE4QjAtMThGNTE5MDAtMTkxQzE5NTAtMTk2RDE5NzAtMTk3NDE5ODAtMTlBQjE5QzEtMTlDNzFBMDAtMUExNjFBMjAtMUE1NDFBQTcxQjA1LTFCMzMxQjQ1LTFCNEIxQjgzLTFCQTAxQkFFMUJBRjFDMDAtMUMyMzFDNEQtMUM0RjFDNUEtMUM3RDFDRTktMUNFQzFDRUUtMUNGMTFEMDAtMURCRjFFMDAtMUYxNTFGMTgtMUYxRDFGMjAtMUY0NTFGNDgtMUY0RDFGNTAtMUY1NzFGNTkxRjVCMUY1RDFGNUYtMUY3RDFGODAtMUZCNDFGQjYtMUZCQzFGQkUxRkMyLTFGQzQxRkM2LTFGQ0MxRkQwLTFGRDMxRkQ2LTFGREIxRkUwLTFGRUMxRkYyLTFGRjQxRkY2LTFGRkMyMDcxMjA3RjIwOTAtMjA5NDIxMDIyMTA3MjEwQS0yMTEzMjExNTIxMTktMjExRDIxMjQyMTI2MjEyODIxMkEtMjEyRDIxMkYtMjEzOTIxM0MtMjEzRjIxNDUtMjE0OTIxNEUyMTgzMjE4NDJDMDAtMkMyRTJDMzAtMkM1RTJDNjAtMkNFNDJDRUItMkNFRTJEMDAtMkQyNTJEMzAtMkQ2NTJENkYyRDgwLTJEOTYyREEwLTJEQTYyREE4LTJEQUUyREIwLTJEQjYyREI4LTJEQkUyREMwLTJEQzYyREM4LTJEQ0UyREQwLTJERDYyREQ4LTJEREUyRTJGMzAwNTMwMDYzMDMxLTMwMzUzMDNCMzAzQzMwNDEtMzA5NjMwOUQtMzA5RjMwQTEtMzBGQTMwRkMtMzBGRjMxMDUtMzEyRDMxMzEtMzE4RTMxQTAtMzFCNzMxRjAtMzFGRjM0MDAtNERCNTRFMDAtOUZDQkEwMDAtQTQ4Q0E0RDAtQTRGREE1MDAtQTYwQ0E2MTAtQTYxRkE2MkFBNjJCQTY0MC1BNjVGQTY2Mi1BNjZFQTY3Ri1BNjk3QTZBMC1BNkU1QTcxNy1BNzFGQTcyMi1BNzg4QTc4QkE3OENBN0ZCLUE4MDFBODAzLUE4MDVBODA3LUE4MEFBODBDLUE4MjJBODQwLUE4NzNBODgyLUE4QjNBOEYyLUE4RjdBOEZCQTkwQS1BOTI1QTkzMC1BOTQ2QTk2MC1BOTdDQTk4NC1BOUIyQTlDRkFBMDAtQUEyOEFBNDAtQUE0MkFBNDQtQUE0QkFBNjAtQUE3NkFBN0FBQTgwLUFBQUZBQUIxQUFCNUFBQjZBQUI5LUFBQkRBQUMwQUFDMkFBREItQUFEREFCQzAtQUJFMkFDMDAtRDdBM0Q3QjAtRDdDNkQ3Q0ItRDdGQkY5MDAtRkEyREZBMzAtRkE2REZBNzAtRkFEOUZCMDAtRkIwNkZCMTMtRkIxN0ZCMURGQjFGLUZCMjhGQjJBLUZCMzZGQjM4LUZCM0NGQjNFRkI0MEZCNDFGQjQzRkI0NEZCNDYtRkJCMUZCRDMtRkQzREZENTAtRkQ4RkZEOTItRkRDN0ZERjAtRkRGQkZFNzAtRkU3NEZFNzYtRkVGQ0ZGMjEtRkYzQUZGNDEtRkY1QUZGNjYtRkZCRUZGQzItRkZDN0ZGQ0EtRkZDRkZGRDItRkZEN0ZGREEtRkZEQyIsTGw6IjAwNjEtMDA3QTAwQUEwMEI1MDBCQTAwREYtMDBGNjAwRjgtMDBGRjAxMDEwMTAzMDEwNTAxMDcwMTA5MDEwQjAxMEQwMTBGMDExMTAxMTMwMTE1MDExNzAxMTkwMTFCMDExRDAxMUYwMTIxMDEyMzAxMjUwMTI3MDEyOTAxMkIwMTJEMDEyRjAxMzEwMTMzMDEzNTAxMzcwMTM4MDEzQTAxM0MwMTNFMDE0MDAxNDIwMTQ0MDE0NjAxNDgwMTQ5MDE0QjAxNEQwMTRGMDE1MTAxNTMwMTU1MDE1NzAxNTkwMTVCMDE1RDAxNUYwMTYxMDE2MzAxNjUwMTY3MDE2OTAxNkIwMTZEMDE2RjAxNzEwMTczMDE3NTAxNzcwMTdBMDE3QzAxN0UtMDE4MDAxODMwMTg1MDE4ODAxOEMwMThEMDE5MjAxOTUwMTk5LTAxOUIwMTlFMDFBMTAxQTMwMUE1MDFBODAxQUEwMUFCMDFBRDAxQjAwMUI0MDFCNjAxQjkwMUJBMDFCRC0wMUJGMDFDNjAxQzkwMUNDMDFDRTAxRDAwMUQyMDFENDAxRDYwMUQ4MDFEQTAxREMwMUREMDFERjAxRTEwMUUzMDFFNTAxRTcwMUU5MDFFQjAxRUQwMUVGMDFGMDAxRjMwMUY1MDFGOTAxRkIwMUZEMDFGRjAyMDEwMjAzMDIwNTAyMDcwMjA5MDIwQjAyMEQwMjBGMDIxMTAyMTMwMjE1MDIxNzAyMTkwMjFCMDIxRDAyMUYwMjIxMDIyMzAyMjUwMjI3MDIyOTAyMkIwMjJEMDIyRjAyMzEwMjMzLTAyMzkwMjNDMDIzRjAyNDAwMjQyMDI0NzAyNDkwMjRCMDI0RDAyNEYtMDI5MzAyOTUtMDJBRjAzNzEwMzczMDM3NzAzN0ItMDM3RDAzOTAwM0FDLTAzQ0UwM0QwMDNEMTAzRDUtMDNENzAzRDkwM0RCMDNERDAzREYwM0UxMDNFMzAzRTUwM0U3MDNFOTAzRUIwM0VEMDNFRi0wM0YzMDNGNTAzRjgwM0ZCMDNGQzA0MzAtMDQ1RjA0NjEwNDYzMDQ2NTA0NjcwNDY5MDQ2QjA0NkQwNDZGMDQ3MTA0NzMwNDc1MDQ3NzA0NzkwNDdCMDQ3RDA0N0YwNDgxMDQ4QjA0OEQwNDhGMDQ5MTA0OTMwNDk1MDQ5NzA0OTkwNDlCMDQ5RDA0OUYwNEExMDRBMzA0QTUwNEE3MDRBOTA0QUIwNEFEMDRBRjA0QjEwNEIzMDRCNTA0QjcwNEI5MDRCQjA0QkQwNEJGMDRDMjA0QzQwNEM2MDRDODA0Q0EwNENDMDRDRTA0Q0YwNEQxMDREMzA0RDUwNEQ3MDREOTA0REIwNEREMDRERjA0RTEwNEUzMDRFNTA0RTcwNEU5MDRFQjA0RUQwNEVGMDRGMTA0RjMwNEY1MDRGNzA0RjkwNEZCMDRGRDA0RkYwNTAxMDUwMzA1MDUwNTA3MDUwOTA1MEIwNTBEMDUwRjA1MTEwNTEzMDUxNTA1MTcwNTE5MDUxQjA1MUQwNTFGMDUyMTA1MjMwNTI1MDU2MS0wNTg3MUQwMC0xRDJCMUQ2Mi0xRDc3MUQ3OS0xRDlBMUUwMTFFMDMxRTA1MUUwNzFFMDkxRTBCMUUwRDFFMEYxRTExMUUxMzFFMTUxRTE3MUUxOTFFMUIxRTFEMUUxRjFFMjExRTIzMUUyNTFFMjcxRTI5MUUyQjFFMkQxRTJGMUUzMTFFMzMxRTM1MUUzNzFFMzkxRTNCMUUzRDFFM0YxRTQxMUU0MzFFNDUxRTQ3MUU0OTFFNEIxRTREMUU0RjFFNTExRTUzMUU1NTFFNTcxRTU5MUU1QjFFNUQxRTVGMUU2MTFFNjMxRTY1MUU2NzFFNjkxRTZCMUU2RDFFNkYxRTcxMUU3MzFFNzUxRTc3MUU3OTFFN0IxRTdEMUU3RjFFODExRTgzMUU4NTFFODcxRTg5MUU4QjFFOEQxRThGMUU5MTFFOTMxRTk1LTFFOUQxRTlGMUVBMTFFQTMxRUE1MUVBNzFFQTkxRUFCMUVBRDFFQUYxRUIxMUVCMzFFQjUxRUI3MUVCOTFFQkIxRUJEMUVCRjFFQzExRUMzMUVDNTFFQzcxRUM5MUVDQjFFQ0QxRUNGMUVEMTFFRDMxRUQ1MUVENzFFRDkxRURCMUVERDFFREYxRUUxMUVFMzFFRTUxRUU3MUVFOTFFRUIxRUVEMUVFRjFFRjExRUYzMUVGNTFFRjcxRUY5MUVGQjFFRkQxRUZGLTFGMDcxRjEwLTFGMTUxRjIwLTFGMjcxRjMwLTFGMzcxRjQwLTFGNDUxRjUwLTFGNTcxRjYwLTFGNjcxRjcwLTFGN0QxRjgwLTFGODcxRjkwLTFGOTcxRkEwLTFGQTcxRkIwLTFGQjQxRkI2MUZCNzFGQkUxRkMyLTFGQzQxRkM2MUZDNzFGRDAtMUZEMzFGRDYxRkQ3MUZFMC0xRkU3MUZGMi0xRkY0MUZGNjFGRjcyMTBBMjEwRTIxMEYyMTEzMjEyRjIxMzQyMTM5MjEzQzIxM0QyMTQ2LTIxNDkyMTRFMjE4NDJDMzAtMkM1RTJDNjEyQzY1MkM2NjJDNjgyQzZBMkM2QzJDNzEyQzczMkM3NDJDNzYtMkM3QzJDODEyQzgzMkM4NTJDODcyQzg5MkM4QjJDOEQyQzhGMkM5MTJDOTMyQzk1MkM5NzJDOTkyQzlCMkM5RDJDOUYyQ0ExMkNBMzJDQTUyQ0E3MkNBOTJDQUIyQ0FEMkNBRjJDQjEyQ0IzMkNCNTJDQjcyQ0I5MkNCQjJDQkQyQ0JGMkNDMTJDQzMyQ0M1MkNDNzJDQzkyQ0NCMkNDRDJDQ0YyQ0QxMkNEMzJDRDUyQ0Q3MkNEOTJDREIyQ0REMkNERjJDRTEyQ0UzMkNFNDJDRUMyQ0VFMkQwMC0yRDI1QTY0MUE2NDNBNjQ1QTY0N0E2NDlBNjRCQTY0REE2NEZBNjUxQTY1M0E2NTVBNjU3QTY1OUE2NUJBNjVEQTY1RkE2NjNBNjY1QTY2N0E2NjlBNjZCQTY2REE2ODFBNjgzQTY4NUE2ODdBNjg5QTY4QkE2OERBNjhGQTY5MUE2OTNBNjk1QTY5N0E3MjNBNzI1QTcyN0E3MjlBNzJCQTcyREE3MkYtQTczMUE3MzNBNzM1QTczN0E3MzlBNzNCQTczREE3M0ZBNzQxQTc0M0E3NDVBNzQ3QTc0OUE3NEJBNzREQTc0RkE3NTFBNzUzQTc1NUE3NTdBNzU5QTc1QkE3NURBNzVGQTc2MUE3NjNBNzY1QTc2N0E3NjlBNzZCQTc2REE3NkZBNzcxLUE3NzhBNzdBQTc3Q0E3N0ZBNzgxQTc4M0E3ODVBNzg3QTc4Q0ZCMDAtRkIwNkZCMTMtRkIxN0ZGNDEtRkY1QSIsTHU6IjAwNDEtMDA1QTAwQzAtMDBENjAwRDgtMDBERTAxMDAwMTAyMDEwNDAxMDYwMTA4MDEwQTAxMEMwMTBFMDExMDAxMTIwMTE0MDExNjAxMTgwMTFBMDExQzAxMUUwMTIwMDEyMjAxMjQwMTI2MDEyODAxMkEwMTJDMDEyRTAxMzAwMTMyMDEzNDAxMzYwMTM5MDEzQjAxM0QwMTNGMDE0MTAxNDMwMTQ1MDE0NzAxNEEwMTRDMDE0RTAxNTAwMTUyMDE1NDAxNTYwMTU4MDE1QTAxNUMwMTVFMDE2MDAxNjIwMTY0MDE2NjAxNjgwMTZBMDE2QzAxNkUwMTcwMDE3MjAxNzQwMTc2MDE3ODAxNzkwMTdCMDE3RDAxODEwMTgyMDE4NDAxODYwMTg3MDE4OS0wMThCMDE4RS0wMTkxMDE5MzAxOTQwMTk2LTAxOTgwMTlDMDE5RDAxOUYwMUEwMDFBMjAxQTQwMUE2MDFBNzAxQTkwMUFDMDFBRTAxQUYwMUIxLTAxQjMwMUI1MDFCNzAxQjgwMUJDMDFDNDAxQzcwMUNBMDFDRDAxQ0YwMUQxMDFEMzAxRDUwMUQ3MDFEOTAxREIwMURFMDFFMDAxRTIwMUU0MDFFNjAxRTgwMUVBMDFFQzAxRUUwMUYxMDFGNDAxRjYtMDFGODAxRkEwMUZDMDFGRTAyMDAwMjAyMDIwNDAyMDYwMjA4MDIwQTAyMEMwMjBFMDIxMDAyMTIwMjE0MDIxNjAyMTgwMjFBMDIxQzAyMUUwMjIwMDIyMjAyMjQwMjI2MDIyODAyMkEwMjJDMDIyRTAyMzAwMjMyMDIzQTAyM0IwMjNEMDIzRTAyNDEwMjQzLTAyNDYwMjQ4MDI0QTAyNEMwMjRFMDM3MDAzNzIwMzc2MDM4NjAzODgtMDM4QTAzOEMwMzhFMDM4RjAzOTEtMDNBMTAzQTMtMDNBQjAzQ0YwM0QyLTAzRDQwM0Q4MDNEQTAzREMwM0RFMDNFMDAzRTIwM0U0MDNFNjAzRTgwM0VBMDNFQzAzRUUwM0Y0MDNGNzAzRjkwM0ZBMDNGRC0wNDJGMDQ2MDA0NjIwNDY0MDQ2NjA0NjgwNDZBMDQ2QzA0NkUwNDcwMDQ3MjA0NzQwNDc2MDQ3ODA0N0EwNDdDMDQ3RTA0ODAwNDhBMDQ4QzA0OEUwNDkwMDQ5MjA0OTQwNDk2MDQ5ODA0OUEwNDlDMDQ5RTA0QTAwNEEyMDRBNDA0QTYwNEE4MDRBQTA0QUMwNEFFMDRCMDA0QjIwNEI0MDRCNjA0QjgwNEJBMDRCQzA0QkUwNEMwMDRDMTA0QzMwNEM1MDRDNzA0QzkwNENCMDRDRDA0RDAwNEQyMDRENDA0RDYwNEQ4MDREQTA0REMwNERFMDRFMDA0RTIwNEU0MDRFNjA0RTgwNEVBMDRFQzA0RUUwNEYwMDRGMjA0RjQwNEY2MDRGODA0RkEwNEZDMDRGRTA1MDAwNTAyMDUwNDA1MDYwNTA4MDUwQTA1MEMwNTBFMDUxMDA1MTIwNTE0MDUxNjA1MTgwNTFBMDUxQzA1MUUwNTIwMDUyMjA1MjQwNTMxLTA1NTYxMEEwLTEwQzUxRTAwMUUwMjFFMDQxRTA2MUUwODFFMEExRTBDMUUwRTFFMTAxRTEyMUUxNDFFMTYxRTE4MUUxQTFFMUMxRTFFMUUyMDFFMjIxRTI0MUUyNjFFMjgxRTJBMUUyQzFFMkUxRTMwMUUzMjFFMzQxRTM2MUUzODFFM0ExRTNDMUUzRTFFNDAxRTQyMUU0NDFFNDYxRTQ4MUU0QTFFNEMxRTRFMUU1MDFFNTIxRTU0MUU1NjFFNTgxRTVBMUU1QzFFNUUxRTYwMUU2MjFFNjQxRTY2MUU2ODFFNkExRTZDMUU2RTFFNzAxRTcyMUU3NDFFNzYxRTc4MUU3QTFFN0MxRTdFMUU4MDFFODIxRTg0MUU4NjFFODgxRThBMUU4QzFFOEUxRTkwMUU5MjFFOTQxRTlFMUVBMDFFQTIxRUE0MUVBNjFFQTgxRUFBMUVBQzFFQUUxRUIwMUVCMjFFQjQxRUI2MUVCODFFQkExRUJDMUVCRTFFQzAxRUMyMUVDNDFFQzYxRUM4MUVDQTFFQ0MxRUNFMUVEMDFFRDIxRUQ0MUVENjFFRDgxRURBMUVEQzFFREUxRUUwMUVFMjFFRTQxRUU2MUVFODFFRUExRUVDMUVFRTFFRjAxRUYyMUVGNDFFRjYxRUY4MUVGQTFFRkMxRUZFMUYwOC0xRjBGMUYxOC0xRjFEMUYyOC0xRjJGMUYzOC0xRjNGMUY0OC0xRjREMUY1OTFGNUIxRjVEMUY1RjFGNjgtMUY2RjFGQjgtMUZCQjFGQzgtMUZDQjFGRDgtMUZEQjFGRTgtMUZFQzFGRjgtMUZGQjIxMDIyMTA3MjEwQi0yMTBEMjExMC0yMTEyMjExNTIxMTktMjExRDIxMjQyMTI2MjEyODIxMkEtMjEyRDIxMzAtMjEzMzIxM0UyMTNGMjE0NTIxODMyQzAwLTJDMkUyQzYwMkM2Mi0yQzY0MkM2NzJDNjkyQzZCMkM2RC0yQzcwMkM3MjJDNzUyQzdFLTJDODAyQzgyMkM4NDJDODYyQzg4MkM4QTJDOEMyQzhFMkM5MDJDOTIyQzk0MkM5NjJDOTgyQzlBMkM5QzJDOUUyQ0EwMkNBMjJDQTQyQ0E2MkNBODJDQUEyQ0FDMkNBRTJDQjAyQ0IyMkNCNDJDQjYyQ0I4MkNCQTJDQkMyQ0JFMkNDMDJDQzIyQ0M0MkNDNjJDQzgyQ0NBMkNDQzJDQ0UyQ0QwMkNEMjJDRDQyQ0Q2MkNEODJDREEyQ0RDMkNERTJDRTAyQ0UyMkNFQjJDRURBNjQwQTY0MkE2NDRBNjQ2QTY0OEE2NEFBNjRDQTY0RUE2NTBBNjUyQTY1NEE2NTZBNjU4QTY1QUE2NUNBNjVFQTY2MkE2NjRBNjY2QTY2OEE2NkFBNjZDQTY4MEE2ODJBNjg0QTY4NkE2ODhBNjhBQTY4Q0E2OEVBNjkwQTY5MkE2OTRBNjk2QTcyMkE3MjRBNzI2QTcyOEE3MkFBNzJDQTcyRUE3MzJBNzM0QTczNkE3MzhBNzNBQTczQ0E3M0VBNzQwQTc0MkE3NDRBNzQ2QTc0OEE3NEFBNzRDQTc0RUE3NTBBNzUyQTc1NEE3NTZBNzU4QTc1QUE3NUNBNzVFQTc2MEE3NjJBNzY0QTc2NkE3NjhBNzZBQTc2Q0E3NkVBNzc5QTc3QkE3N0RBNzdFQTc4MEE3ODJBNzg0QTc4NkE3OEJGRjIxLUZGM0EiLEx0OiIwMUM1MDFDODAxQ0IwMUYyMUY4OC0xRjhGMUY5OC0xRjlGMUZBOC0xRkFGMUZCQzFGQ0MxRkZDIixMbToiMDJCMC0wMkMxMDJDNi0wMkQxMDJFMC0wMkU0MDJFQzAyRUUwMzc0MDM3QTA1NTkwNjQwMDZFNTA2RTYwN0Y0MDdGNTA3RkEwODFBMDgyNDA4MjgwOTcxMEU0NjBFQzYxMEZDMTdENzE4NDMxQUE3MUM3OC0xQzdEMUQyQy0xRDYxMUQ3ODFEOUItMURCRjIwNzEyMDdGMjA5MC0yMDk0MkM3RDJENkYyRTJGMzAwNTMwMzEtMzAzNTMwM0IzMDlEMzA5RTMwRkMtMzBGRUEwMTVBNEY4LUE0RkRBNjBDQTY3RkE3MTctQTcxRkE3NzBBNzg4QTlDRkFBNzBBQURERkY3MEZGOUVGRjlGIixMbzoiMDFCQjAxQzAtMDFDMzAyOTQwNUQwLTA1RUEwNUYwLTA1RjIwNjIxLTA2M0YwNjQxLTA2NEEwNjZFMDY2RjA2NzEtMDZEMzA2RDUwNkVFMDZFRjA2RkEtMDZGQzA2RkYwNzEwMDcxMi0wNzJGMDc0RC0wN0E1MDdCMTA3Q0EtMDdFQTA4MDAtMDgxNTA5MDQtMDkzOTA5M0QwOTUwMDk1OC0wOTYxMDk3MjA5NzktMDk3RjA5ODUtMDk4QzA5OEYwOTkwMDk5My0wOUE4MDlBQS0wOUIwMDlCMjA5QjYtMDlCOTA5QkQwOUNFMDlEQzA5REQwOURGLTA5RTEwOUYwMDlGMTBBMDUtMEEwQTBBMEYwQTEwMEExMy0wQTI4MEEyQS0wQTMwMEEzMjBBMzMwQTM1MEEzNjBBMzgwQTM5MEE1OS0wQTVDMEE1RTBBNzItMEE3NDBBODUtMEE4RDBBOEYtMEE5MTBBOTMtMEFBODBBQUEtMEFCMDBBQjIwQUIzMEFCNS0wQUI5MEFCRDBBRDAwQUUwMEFFMTBCMDUtMEIwQzBCMEYwQjEwMEIxMy0wQjI4MEIyQS0wQjMwMEIzMjBCMzMwQjM1LTBCMzkwQjNEMEI1QzBCNUQwQjVGLTBCNjEwQjcxMEI4MzBCODUtMEI4QTBCOEUtMEI5MDBCOTItMEI5NTBCOTkwQjlBMEI5QzBCOUUwQjlGMEJBMzBCQTQwQkE4LTBCQUEwQkFFLTBCQjkwQkQwMEMwNS0wQzBDMEMwRS0wQzEwMEMxMi0wQzI4MEMyQS0wQzMzMEMzNS0wQzM5MEMzRDBDNTgwQzU5MEM2MDBDNjEwQzg1LTBDOEMwQzhFLTBDOTAwQzkyLTBDQTgwQ0FBLTBDQjMwQ0I1LTBDQjkwQ0JEMENERTBDRTAwQ0UxMEQwNS0wRDBDMEQwRS0wRDEwMEQxMi0wRDI4MEQyQS0wRDM5MEQzRDBENjAwRDYxMEQ3QS0wRDdGMEQ4NS0wRDk2MEQ5QS0wREIxMERCMy0wREJCMERCRDBEQzAtMERDNjBFMDEtMEUzMDBFMzIwRTMzMEU0MC0wRTQ1MEU4MTBFODIwRTg0MEU4NzBFODgwRThBMEU4RDBFOTQtMEU5NzBFOTktMEU5RjBFQTEtMEVBMzBFQTUwRUE3MEVBQTBFQUIwRUFELTBFQjAwRUIyMEVCMzBFQkQwRUMwLTBFQzQwRURDMEVERDBGMDAwRjQwLTBGNDcwRjQ5LTBGNkMwRjg4LTBGOEIxMDAwLTEwMkExMDNGMTA1MC0xMDU1MTA1QS0xMDVEMTA2MTEwNjUxMDY2MTA2RS0xMDcwMTA3NS0xMDgxMTA4RTEwRDAtMTBGQTExMDAtMTI0ODEyNEEtMTI0RDEyNTAtMTI1NjEyNTgxMjVBLTEyNUQxMjYwLTEyODgxMjhBLTEyOEQxMjkwLTEyQjAxMkIyLTEyQjUxMkI4LTEyQkUxMkMwMTJDMi0xMkM1MTJDOC0xMkQ2MTJEOC0xMzEwMTMxMi0xMzE1MTMxOC0xMzVBMTM4MC0xMzhGMTNBMC0xM0Y0MTQwMS0xNjZDMTY2Ri0xNjdGMTY4MS0xNjlBMTZBMC0xNkVBMTcwMC0xNzBDMTcwRS0xNzExMTcyMC0xNzMxMTc0MC0xNzUxMTc2MC0xNzZDMTc2RS0xNzcwMTc4MC0xN0IzMTdEQzE4MjAtMTg0MjE4NDQtMTg3NzE4ODAtMThBODE4QUExOEIwLTE4RjUxOTAwLTE5MUMxOTUwLTE5NkQxOTcwLTE5NzQxOTgwLTE5QUIxOUMxLTE5QzcxQTAwLTFBMTYxQTIwLTFBNTQxQjA1LTFCMzMxQjQ1LTFCNEIxQjgzLTFCQTAxQkFFMUJBRjFDMDAtMUMyMzFDNEQtMUM0RjFDNUEtMUM3NzFDRTktMUNFQzFDRUUtMUNGMTIxMzUtMjEzODJEMzAtMkQ2NTJEODAtMkQ5NjJEQTAtMkRBNjJEQTgtMkRBRTJEQjAtMkRCNjJEQjgtMkRCRTJEQzAtMkRDNjJEQzgtMkRDRTJERDAtMkRENjJERDgtMkRERTMwMDYzMDNDMzA0MS0zMDk2MzA5RjMwQTEtMzBGQTMwRkYzMTA1LTMxMkQzMTMxLTMxOEUzMUEwLTMxQjczMUYwLTMxRkYzNDAwLTREQjU0RTAwLTlGQ0JBMDAwLUEwMTRBMDE2LUE0OENBNEQwLUE0RjdBNTAwLUE2MEJBNjEwLUE2MUZBNjJBQTYyQkE2NkVBNkEwLUE2RTVBN0ZCLUE4MDFBODAzLUE4MDVBODA3LUE4MEFBODBDLUE4MjJBODQwLUE4NzNBODgyLUE4QjNBOEYyLUE4RjdBOEZCQTkwQS1BOTI1QTkzMC1BOTQ2QTk2MC1BOTdDQTk4NC1BOUIyQUEwMC1BQTI4QUE0MC1BQTQyQUE0NC1BQTRCQUE2MC1BQTZGQUE3MS1BQTc2QUE3QUFBODAtQUFBRkFBQjFBQUI1QUFCNkFBQjktQUFCREFBQzBBQUMyQUFEQkFBRENBQkMwLUFCRTJBQzAwLUQ3QTNEN0IwLUQ3QzZEN0NCLUQ3RkJGOTAwLUZBMkRGQTMwLUZBNkRGQTcwLUZBRDlGQjFERkIxRi1GQjI4RkIyQS1GQjM2RkIzOC1GQjNDRkIzRUZCNDBGQjQxRkI0M0ZCNDRGQjQ2LUZCQjFGQkQzLUZEM0RGRDUwLUZEOEZGRDkyLUZEQzdGREYwLUZERkJGRTcwLUZFNzRGRTc2LUZFRkNGRjY2LUZGNkZGRjcxLUZGOURGRkEwLUZGQkVGRkMyLUZGQzdGRkNBLUZGQ0ZGRkQyLUZGRDdGRkRBLUZGREMiLE06IjAzMDAtMDM2RjA0ODMtMDQ4OTA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2NzAwNkQ2LTA2REMwNkRFLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDMwOTNDMDkzRS0wOTRFMDk1MS0wOTU1MDk2MjA5NjMwOTgxLTA5ODMwOUJDMDlCRS0wOUM0MDlDNzA5QzgwOUNCLTA5Q0QwOUQ3MDlFMjA5RTMwQTAxLTBBMDMwQTNDMEEzRS0wQTQyMEE0NzBBNDgwQTRCLTBBNEQwQTUxMEE3MDBBNzEwQTc1MEE4MS0wQTgzMEFCQzBBQkUtMEFDNTBBQzctMEFDOTBBQ0ItMEFDRDBBRTIwQUUzMEIwMS0wQjAzMEIzQzBCM0UtMEI0NDBCNDcwQjQ4MEI0Qi0wQjREMEI1NjBCNTcwQjYyMEI2MzBCODIwQkJFLTBCQzIwQkM2LTBCQzgwQkNBLTBCQ0QwQkQ3MEMwMS0wQzAzMEMzRS0wQzQ0MEM0Ni0wQzQ4MEM0QS0wQzREMEM1NTBDNTYwQzYyMEM2MzBDODIwQzgzMENCQzBDQkUtMENDNDBDQzYtMENDODBDQ0EtMENDRDBDRDUwQ0Q2MENFMjBDRTMwRDAyMEQwMzBEM0UtMEQ0NDBENDYtMEQ0ODBENEEtMEQ0RDBENTcwRDYyMEQ2MzBEODIwRDgzMERDQTBEQ0YtMERENDBERDYwREQ4LTBEREYwREYyMERGMzBFMzEwRTM0LTBFM0EwRTQ3LTBFNEUwRUIxMEVCNC0wRUI5MEVCQjBFQkMwRUM4LTBFQ0QwRjE4MEYxOTBGMzUwRjM3MEYzOTBGM0UwRjNGMEY3MS0wRjg0MEY4NjBGODcwRjkwLTBGOTcwRjk5LTBGQkMwRkM2MTAyQi0xMDNFMTA1Ni0xMDU5MTA1RS0xMDYwMTA2Mi0xMDY0MTA2Ny0xMDZEMTA3MS0xMDc0MTA4Mi0xMDhEMTA4RjEwOUEtMTA5RDEzNUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNi0xN0QzMTdERDE4MEItMTgwRDE4QTkxOTIwLTE5MkIxOTMwLTE5M0IxOUIwLTE5QzAxOUM4MTlDOTFBMTctMUExQjFBNTUtMUE1RTFBNjAtMUE3QzFBN0YxQjAwLTFCMDQxQjM0LTFCNDQxQjZCLTFCNzMxQjgwLTFCODIxQkExLTFCQUExQzI0LTFDMzcxQ0QwLTFDRDIxQ0Q0LTFDRTgxQ0VEMUNGMjFEQzAtMURFNjFERkQtMURGRjIwRDAtMjBGMDJDRUYtMkNGMTJERTAtMkRGRjMwMkEtMzAyRjMwOTkzMDlBQTY2Ri1BNjcyQTY3Q0E2N0RBNkYwQTZGMUE4MDJBODA2QTgwQkE4MjMtQTgyN0E4ODBBODgxQThCNC1BOEM0QThFMC1BOEYxQTkyNi1BOTJEQTk0Ny1BOTUzQTk4MC1BOTgzQTlCMy1BOUMwQUEyOS1BQTM2QUE0M0FBNENBQTREQUE3QkFBQjBBQUIyLUFBQjRBQUI3QUFCOEFBQkVBQUJGQUFDMUFCRTMtQUJFQUFCRUNBQkVERkIxRUZFMDAtRkUwRkZFMjAtRkUyNiIsTW46IjAzMDAtMDM2RjA0ODMtMDQ4NzA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2NzAwNkQ2LTA2REMwNkRGLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDIwOTNDMDk0MS0wOTQ4MDk0RDA5NTEtMDk1NTA5NjIwOTYzMDk4MTA5QkMwOUMxLTA5QzQwOUNEMDlFMjA5RTMwQTAxMEEwMjBBM0MwQTQxMEE0MjBBNDcwQTQ4MEE0Qi0wQTREMEE1MTBBNzAwQTcxMEE3NTBBODEwQTgyMEFCQzBBQzEtMEFDNTBBQzcwQUM4MEFDRDBBRTIwQUUzMEIwMTBCM0MwQjNGMEI0MS0wQjQ0MEI0RDBCNTYwQjYyMEI2MzBCODIwQkMwMEJDRDBDM0UtMEM0MDBDNDYtMEM0ODBDNEEtMEM0RDBDNTUwQzU2MEM2MjBDNjMwQ0JDMENCRjBDQzYwQ0NDMENDRDBDRTIwQ0UzMEQ0MS0wRDQ0MEQ0RDBENjIwRDYzMERDQTBERDItMERENDBERDYwRTMxMEUzNC0wRTNBMEU0Ny0wRTRFMEVCMTBFQjQtMEVCOTBFQkIwRUJDMEVDOC0wRUNEMEYxODBGMTkwRjM1MEYzNzBGMzkwRjcxLTBGN0UwRjgwLTBGODQwRjg2MEY4NzBGOTAtMEY5NzBGOTktMEZCQzBGQzYxMDJELTEwMzAxMDMyLTEwMzcxMDM5MTAzQTEwM0QxMDNFMTA1ODEwNTkxMDVFLTEwNjAxMDcxLTEwNzQxMDgyMTA4NTEwODYxMDhEMTA5RDEzNUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNy0xN0JEMTdDNjE3QzktMTdEMzE3REQxODBCLTE4MEQxOEE5MTkyMC0xOTIyMTkyNzE5MjgxOTMyMTkzOS0xOTNCMUExNzFBMTgxQTU2MUE1OC0xQTVFMUE2MDFBNjIxQTY1LTFBNkMxQTczLTFBN0MxQTdGMUIwMC0xQjAzMUIzNDFCMzYtMUIzQTFCM0MxQjQyMUI2Qi0xQjczMUI4MDFCODExQkEyLTFCQTUxQkE4MUJBOTFDMkMtMUMzMzFDMzYxQzM3MUNEMC0xQ0QyMUNENC0xQ0UwMUNFMi0xQ0U4MUNFRDFEQzAtMURFNjFERkQtMURGRjIwRDAtMjBEQzIwRTEyMEU1LTIwRjAyQ0VGLTJDRjEyREUwLTJERkYzMDJBLTMwMkYzMDk5MzA5QUE2NkZBNjdDQTY3REE2RjBBNkYxQTgwMkE4MDZBODBCQTgyNUE4MjZBOEM0QThFMC1BOEYxQTkyNi1BOTJEQTk0Ny1BOTUxQTk4MC1BOTgyQTlCM0E5QjYtQTlCOUE5QkNBQTI5LUFBMkVBQTMxQUEzMkFBMzVBQTM2QUE0M0FBNENBQUIwQUFCMi1BQUI0QUFCN0FBQjhBQUJFQUFCRkFBQzFBQkU1QUJFOEFCRURGQjFFRkUwMC1GRTBGRkUyMC1GRTI2IixNYzoiMDkwMzA5M0UtMDk0MDA5NDktMDk0QzA5NEUwOTgyMDk4MzA5QkUtMDlDMDA5QzcwOUM4MDlDQjA5Q0MwOUQ3MEEwMzBBM0UtMEE0MDBBODMwQUJFLTBBQzAwQUM5MEFDQjBBQ0MwQjAyMEIwMzBCM0UwQjQwMEI0NzBCNDgwQjRCMEI0QzBCNTcwQkJFMEJCRjBCQzEwQkMyMEJDNi0wQkM4MEJDQS0wQkNDMEJENzBDMDEtMEMwMzBDNDEtMEM0NDBDODIwQzgzMENCRTBDQzAtMENDNDBDQzcwQ0M4MENDQTBDQ0IwQ0Q1MENENjBEMDIwRDAzMEQzRS0wRDQwMEQ0Ni0wRDQ4MEQ0QS0wRDRDMEQ1NzBEODIwRDgzMERDRi0wREQxMEREOC0wRERGMERGMjBERjMwRjNFMEYzRjBGN0YxMDJCMTAyQzEwMzExMDM4MTAzQjEwM0MxMDU2MTA1NzEwNjItMTA2NDEwNjctMTA2RDEwODMxMDg0MTA4Ny0xMDhDMTA4RjEwOUEtMTA5QzE3QjYxN0JFLTE3QzUxN0M3MTdDODE5MjMtMTkyNjE5MjktMTkyQjE5MzAxOTMxMTkzMy0xOTM4MTlCMC0xOUMwMTlDODE5QzkxQTE5LTFBMUIxQTU1MUE1NzFBNjExQTYzMUE2NDFBNkQtMUE3MjFCMDQxQjM1MUIzQjFCM0QtMUI0MTFCNDMxQjQ0MUI4MjFCQTExQkE2MUJBNzFCQUExQzI0LTFDMkIxQzM0MUMzNTFDRTExQ0YyQTgyM0E4MjRBODI3QTg4MEE4ODFBOEI0LUE4QzNBOTUyQTk1M0E5ODNBOUI0QTlCNUE5QkFBOUJCQTlCRC1BOUMwQUEyRkFBMzBBQTMzQUEzNEFBNERBQTdCQUJFM0FCRTRBQkU2QUJFN0FCRTlBQkVBQUJFQyIsTWU6IjA0ODgwNDg5MDZERTIwREQtMjBFMDIwRTItMjBFNEE2NzAtQTY3MiIsTjoiMDAzMC0wMDM5MDBCMjAwQjMwMEI5MDBCQy0wMEJFMDY2MC0wNjY5MDZGMC0wNkY5MDdDMC0wN0M5MDk2Ni0wOTZGMDlFNi0wOUVGMDlGNC0wOUY5MEE2Ni0wQTZGMEFFNi0wQUVGMEI2Ni0wQjZGMEJFNi0wQkYyMEM2Ni0wQzZGMEM3OC0wQzdFMENFNi0wQ0VGMEQ2Ni0wRDc1MEU1MC0wRTU5MEVEMC0wRUQ5MEYyMC0wRjMzMTA0MC0xMDQ5MTA5MC0xMDk5MTM2OS0xMzdDMTZFRS0xNkYwMTdFMC0xN0U5MTdGMC0xN0Y5MTgxMC0xODE5MTk0Ni0xOTRGMTlEMC0xOURBMUE4MC0xQTg5MUE5MC0xQTk5MUI1MC0xQjU5MUJCMC0xQkI5MUM0MC0xQzQ5MUM1MC0xQzU5MjA3MDIwNzQtMjA3OTIwODAtMjA4OTIxNTAtMjE4MjIxODUtMjE4OTI0NjAtMjQ5QjI0RUEtMjRGRjI3NzYtMjc5MzJDRkQzMDA3MzAyMS0zMDI5MzAzOC0zMDNBMzE5Mi0zMTk1MzIyMC0zMjI5MzI1MS0zMjVGMzI4MC0zMjg5MzJCMS0zMkJGQTYyMC1BNjI5QTZFNi1BNkVGQTgzMC1BODM1QThEMC1BOEQ5QTkwMC1BOTA5QTlEMC1BOUQ5QUE1MC1BQTU5QUJGMC1BQkY5RkYxMC1GRjE5IixOZDoiMDAzMC0wMDM5MDY2MC0wNjY5MDZGMC0wNkY5MDdDMC0wN0M5MDk2Ni0wOTZGMDlFNi0wOUVGMEE2Ni0wQTZGMEFFNi0wQUVGMEI2Ni0wQjZGMEJFNi0wQkVGMEM2Ni0wQzZGMENFNi0wQ0VGMEQ2Ni0wRDZGMEU1MC0wRTU5MEVEMC0wRUQ5MEYyMC0wRjI5MTA0MC0xMDQ5MTA5MC0xMDk5MTdFMC0xN0U5MTgxMC0xODE5MTk0Ni0xOTRGMTlEMC0xOURBMUE4MC0xQTg5MUE5MC0xQTk5MUI1MC0xQjU5MUJCMC0xQkI5MUM0MC0xQzQ5MUM1MC0xQzU5QTYyMC1BNjI5QThEMC1BOEQ5QTkwMC1BOTA5QTlEMC1BOUQ5QUE1MC1BQTU5QUJGMC1BQkY5RkYxMC1GRjE5IixObDoiMTZFRS0xNkYwMjE2MC0yMTgyMjE4NS0yMTg4MzAwNzMwMjEtMzAyOTMwMzgtMzAzQUE2RTYtQTZFRiIsTm86IjAwQjIwMEIzMDBCOTAwQkMtMDBCRTA5RjQtMDlGOTBCRjAtMEJGMjBDNzgtMEM3RTBENzAtMEQ3NTBGMkEtMEYzMzEzNjktMTM3QzE3RjAtMTdGOTIwNzAyMDc0LTIwNzkyMDgwLTIwODkyMTUwLTIxNUYyMTg5MjQ2MC0yNDlCMjRFQS0yNEZGMjc3Ni0yNzkzMkNGRDMxOTItMzE5NTMyMjAtMzIyOTMyNTEtMzI1RjMyODAtMzI4OTMyQjEtMzJCRkE4MzAtQTgzNSIsUDoiMDAyMS0wMDIzMDAyNS0wMDJBMDAyQy0wMDJGMDAzQTAwM0IwMDNGMDA0MDAwNUItMDA1RDAwNUYwMDdCMDA3RDAwQTEwMEFCMDBCNzAwQkIwMEJGMDM3RTAzODcwNTVBLTA1NUYwNTg5MDU4QTA1QkUwNUMwMDVDMzA1QzYwNUYzMDVGNDA2MDkwNjBBMDYwQzA2MEQwNjFCMDYxRTA2MUYwNjZBLTA2NkQwNkQ0MDcwMC0wNzBEMDdGNy0wN0Y5MDgzMC0wODNFMDk2NDA5NjUwOTcwMERGNDBFNEYwRTVBMEU1QjBGMDQtMEYxMjBGM0EtMEYzRDBGODUwRkQwLTBGRDQxMDRBLTEwNEYxMEZCMTM2MS0xMzY4MTQwMDE2NkQxNjZFMTY5QjE2OUMxNkVCLTE2RUQxNzM1MTczNjE3RDQtMTdENjE3RDgtMTdEQTE4MDAtMTgwQTE5NDQxOTQ1MTlERTE5REYxQTFFMUExRjFBQTAtMUFBNjFBQTgtMUFBRDFCNUEtMUI2MDFDM0ItMUMzRjFDN0UxQzdGMUNEMzIwMTAtMjAyNzIwMzAtMjA0MzIwNDUtMjA1MTIwNTMtMjA1RTIwN0QyMDdFMjA4RDIwOEUyMzI5MjMyQTI3NjgtMjc3NTI3QzUyN0M2MjdFNi0yN0VGMjk4My0yOTk4MjlEOC0yOURCMjlGQzI5RkQyQ0Y5LTJDRkMyQ0ZFMkNGRjJFMDAtMkUyRTJFMzAyRTMxMzAwMS0zMDAzMzAwOC0zMDExMzAxNC0zMDFGMzAzMDMwM0QzMEEwMzBGQkE0RkVBNEZGQTYwRC1BNjBGQTY3M0E2N0VBNkYyLUE2RjdBODc0LUE4NzdBOENFQThDRkE4RjgtQThGQUE5MkVBOTJGQTk1RkE5QzEtQTlDREE5REVBOURGQUE1Qy1BQTVGQUFERUFBREZBQkVCRkQzRUZEM0ZGRTEwLUZFMTlGRTMwLUZFNTJGRTU0LUZFNjFGRTYzRkU2OEZFNkFGRTZCRkYwMS1GRjAzRkYwNS1GRjBBRkYwQy1GRjBGRkYxQUZGMUJGRjFGRkYyMEZGM0ItRkYzREZGM0ZGRjVCRkY1REZGNUYtRkY2NSIsUGQ6IjAwMkQwNThBMDVCRTE0MDAxODA2MjAxMC0yMDE1MkUxNzJFMUEzMDFDMzAzMDMwQTBGRTMxRkUzMkZFNThGRTYzRkYwRCIsUHM6IjAwMjgwMDVCMDA3QjBGM0EwRjNDMTY5QjIwMUEyMDFFMjA0NTIwN0QyMDhEMjMyOTI3NjgyNzZBMjc2QzI3NkUyNzcwMjc3MjI3NzQyN0M1MjdFNjI3RTgyN0VBMjdFQzI3RUUyOTgzMjk4NTI5ODcyOTg5Mjk4QjI5OEQyOThGMjk5MTI5OTMyOTk1Mjk5NzI5RDgyOURBMjlGQzJFMjIyRTI0MkUyNjJFMjgzMDA4MzAwQTMwMEMzMDBFMzAxMDMwMTQzMDE2MzAxODMwMUEzMDFERkQzRUZFMTdGRTM1RkUzN0ZFMzlGRTNCRkUzREZFM0ZGRTQxRkU0M0ZFNDdGRTU5RkU1QkZFNURGRjA4RkYzQkZGNUJGRjVGRkY2MiIsUGU6IjAwMjkwMDVEMDA3RDBGM0IwRjNEMTY5QzIwNDYyMDdFMjA4RTIzMkEyNzY5Mjc2QjI3NkQyNzZGMjc3MTI3NzMyNzc1MjdDNjI3RTcyN0U5MjdFQjI3RUQyN0VGMjk4NDI5ODYyOTg4Mjk4QTI5OEMyOThFMjk5MDI5OTIyOTk0Mjk5NjI5OTgyOUQ5MjlEQjI5RkQyRTIzMkUyNTJFMjcyRTI5MzAwOTMwMEIzMDBEMzAwRjMwMTEzMDE1MzAxNzMwMTkzMDFCMzAxRTMwMUZGRDNGRkUxOEZFMzZGRTM4RkUzQUZFM0NGRTNFRkU0MEZFNDJGRTQ0RkU0OEZFNUFGRTVDRkU1RUZGMDlGRjNERkY1REZGNjBGRjYzIixQaToiMDBBQjIwMTgyMDFCMjAxQzIwMUYyMDM5MkUwMjJFMDQyRTA5MkUwQzJFMUMyRTIwIixQZjoiMDBCQjIwMTkyMDFEMjAzQTJFMDMyRTA1MkUwQTJFMEQyRTFEMkUyMSIsUGM6IjAwNUYyMDNGMjA0MDIwNTRGRTMzRkUzNEZFNEQtRkU0RkZGM0YiLFBvOiIwMDIxLTAwMjMwMDI1LTAwMjcwMDJBMDAyQzAwMkUwMDJGMDAzQTAwM0IwMDNGMDA0MDAwNUMwMEExMDBCNzAwQkYwMzdFMDM4NzA1NUEtMDU1RjA1ODkwNUMwMDVDMzA1QzYwNUYzMDVGNDA2MDkwNjBBMDYwQzA2MEQwNjFCMDYxRTA2MUYwNjZBLTA2NkQwNkQ0MDcwMC0wNzBEMDdGNy0wN0Y5MDgzMC0wODNFMDk2NDA5NjUwOTcwMERGNDBFNEYwRTVBMEU1QjBGMDQtMEYxMjBGODUwRkQwLTBGRDQxMDRBLTEwNEYxMEZCMTM2MS0xMzY4MTY2RDE2NkUxNkVCLTE2RUQxNzM1MTczNjE3RDQtMTdENjE3RDgtMTdEQTE4MDAtMTgwNTE4MDctMTgwQTE5NDQxOTQ1MTlERTE5REYxQTFFMUExRjFBQTAtMUFBNjFBQTgtMUFBRDFCNUEtMUI2MDFDM0ItMUMzRjFDN0UxQzdGMUNEMzIwMTYyMDE3MjAyMC0yMDI3MjAzMC0yMDM4MjAzQi0yMDNFMjA0MS0yMDQzMjA0Ny0yMDUxMjA1MzIwNTUtMjA1RTJDRjktMkNGQzJDRkUyQ0ZGMkUwMDJFMDEyRTA2LTJFMDgyRTBCMkUwRS0yRTE2MkUxODJFMTkyRTFCMkUxRTJFMUYyRTJBLTJFMkUyRTMwMkUzMTMwMDEtMzAwMzMwM0QzMEZCQTRGRUE0RkZBNjBELUE2MEZBNjczQTY3RUE2RjItQTZGN0E4NzQtQTg3N0E4Q0VBOENGQThGOC1BOEZBQTkyRUE5MkZBOTVGQTlDMS1BOUNEQTlERUE5REZBQTVDLUFBNUZBQURFQUFERkFCRUJGRTEwLUZFMTZGRTE5RkUzMEZFNDVGRTQ2RkU0OS1GRTRDRkU1MC1GRTUyRkU1NC1GRTU3RkU1Ri1GRTYxRkU2OEZFNkFGRTZCRkYwMS1GRjAzRkYwNS1GRjA3RkYwQUZGMENGRjBFRkYwRkZGMUFGRjFCRkYxRkZGMjBGRjNDRkY2MUZGNjRGRjY1IixTOiIwMDI0MDAyQjAwM0MtMDAzRTAwNUUwMDYwMDA3QzAwN0UwMEEyLTAwQTkwMEFDMDBBRS0wMEIxMDBCNDAwQjYwMEI4MDBENzAwRjcwMkMyLTAyQzUwMkQyLTAyREYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MDNGNjA0ODIwNjA2LTA2MDgwNjBCMDYwRTA2MEYwNkU5MDZGRDA2RkUwN0Y2MDlGMjA5RjMwOUZBMDlGQjBBRjEwQjcwMEJGMy0wQkZBMEM3RjBDRjEwQ0YyMEQ3OTBFM0YwRjAxLTBGMDMwRjEzLTBGMTcwRjFBLTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBGQ0MwRkNFMEZDRjBGRDUtMEZEODEwOUUxMDlGMTM2MDEzOTAtMTM5OTE3REIxOTQwMTlFMC0xOUZGMUI2MS0xQjZBMUI3NC0xQjdDMUZCRDFGQkYtMUZDMTFGQ0QtMUZDRjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMjA0NDIwNTIyMDdBLTIwN0MyMDhBLTIwOEMyMEEwLTIwQjgyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYtMjExODIxMUUtMjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNDAtMjE0NDIxNEEtMjE0RDIxNEYyMTkwLTIzMjgyMzJCLTIzRTgyNDAwLTI0MjYyNDQwLTI0NEEyNDlDLTI0RTkyNTAwLTI2Q0QyNkNGLTI2RTEyNkUzMjZFOC0yNkZGMjcwMS0yNzA0MjcwNi0yNzA5MjcwQy0yNzI3MjcyOS0yNzRCMjc0RDI3NEYtMjc1MjI3NTYtMjc1RTI3NjEtMjc2NzI3OTQyNzk4LTI3QUYyN0IxLTI3QkUyN0MwLTI3QzQyN0M3LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlGRS0yQjRDMkI1MC0yQjU5MkNFNS0yQ0VBMkU4MC0yRTk5MkU5Qi0yRUYzMkYwMC0yRkQ1MkZGMC0yRkZCMzAwNDMwMTIzMDEzMzAyMDMwMzYzMDM3MzAzRTMwM0YzMDlCMzA5QzMxOTAzMTkxMzE5Ni0zMTlGMzFDMC0zMUUzMzIwMC0zMjFFMzIyQS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZFMzMwMC0zM0ZGNERDMC00REZGQTQ5MC1BNEM2QTcwMC1BNzE2QTcyMEE3MjFBNzg5QTc4QUE4MjgtQTgyQkE4MzYtQTgzOUFBNzctQUE3OUZCMjlGREZDRkRGREZFNjJGRTY0LUZFNjZGRTY5RkYwNEZGMEJGRjFDLUZGMUVGRjNFRkY0MEZGNUNGRjVFRkZFMC1GRkU2RkZFOC1GRkVFRkZGQ0ZGRkQiLFNtOiIwMDJCMDAzQy0wMDNFMDA3QzAwN0UwMEFDMDBCMTAwRDcwMEY3MDNGNjA2MDYtMDYwODIwNDQyMDUyMjA3QS0yMDdDMjA4QS0yMDhDMjE0MC0yMTQ0MjE0QjIxOTAtMjE5NDIxOUEyMTlCMjFBMDIxQTMyMUE2MjFBRTIxQ0UyMUNGMjFEMjIxRDQyMUY0LTIyRkYyMzA4LTIzMEIyMzIwMjMyMTIzN0MyMzlCLTIzQjMyM0RDLTIzRTEyNUI3MjVDMTI1RjgtMjVGRjI2NkYyN0MwLTI3QzQyN0M3LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yN0ZGMjkwMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlGRS0yQUZGMkIzMC0yQjQ0MkI0Ny0yQjRDRkIyOUZFNjJGRTY0LUZFNjZGRjBCRkYxQy1GRjFFRkY1Q0ZGNUVGRkUyRkZFOS1GRkVDIixTYzoiMDAyNDAwQTItMDBBNTA2MEIwOUYyMDlGMzA5RkIwQUYxMEJGOTBFM0YxN0RCMjBBMC0yMEI4QTgzOEZERkNGRTY5RkYwNEZGRTBGRkUxRkZFNUZGRTYiLFNrOiIwMDVFMDA2MDAwQTgwMEFGMDBCNDAwQjgwMkMyLTAyQzUwMkQyLTAyREYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MUZCRDFGQkYtMUZDMTFGQ0QtMUZDRjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMzA5QjMwOUNBNzAwLUE3MTZBNzIwQTcyMUE3ODlBNzhBRkYzRUZGNDBGRkUzIixTbzoiMDBBNjAwQTcwMEE5MDBBRTAwQjAwMEI2MDQ4MjA2MEUwNjBGMDZFOTA2RkQwNkZFMDdGNjA5RkEwQjcwMEJGMy0wQkY4MEJGQTBDN0YwQ0YxMENGMjBENzkwRjAxLTBGMDMwRjEzLTBGMTcwRjFBLTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBGQ0MwRkNFMEZDRjBGRDUtMEZEODEwOUUxMDlGMTM2MDEzOTAtMTM5OTE5NDAxOUUwLTE5RkYxQjYxLTFCNkExQjc0LTFCN0MyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYtMjExODIxMUUtMjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNEEyMTRDMjE0RDIxNEYyMTk1LTIxOTkyMTlDLTIxOUYyMUExMjFBMjIxQTQyMUE1MjFBNy0yMUFEMjFBRi0yMUNEMjFEMDIxRDEyMUQzMjFENS0yMUYzMjMwMC0yMzA3MjMwQy0yMzFGMjMyMi0yMzI4MjMyQi0yMzdCMjM3RC0yMzlBMjNCNC0yM0RCMjNFMi0yM0U4MjQwMC0yNDI2MjQ0MC0yNDRBMjQ5Qy0yNEU5MjUwMC0yNUI2MjVCOC0yNUMwMjVDMi0yNUY3MjYwMC0yNjZFMjY3MC0yNkNEMjZDRi0yNkUxMjZFMzI2RTgtMjZGRjI3MDEtMjcwNDI3MDYtMjcwOTI3MEMtMjcyNzI3MjktMjc0QjI3NEQyNzRGLTI3NTIyNzU2LTI3NUUyNzYxLTI3NjcyNzk0Mjc5OC0yN0FGMjdCMS0yN0JFMjgwMC0yOEZGMkIwMC0yQjJGMkI0NTJCNDYyQjUwLTJCNTkyQ0U1LTJDRUEyRTgwLTJFOTkyRTlCLTJFRjMyRjAwLTJGRDUyRkYwLTJGRkIzMDA0MzAxMjMwMTMzMDIwMzAzNjMwMzczMDNFMzAzRjMxOTAzMTkxMzE5Ni0zMTlGMzFDMC0zMUUzMzIwMC0zMjFFMzIyQS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZFMzMwMC0zM0ZGNERDMC00REZGQTQ5MC1BNEM2QTgyOC1BODJCQTgzNkE4MzdBODM5QUE3Ny1BQTc5RkRGREZGRTRGRkU4RkZFREZGRUVGRkZDRkZGRCIsWjoiMDAyMDAwQTAxNjgwMTgwRTIwMDAtMjAwQTIwMjgyMDI5MjAyRjIwNUYzMDAwIixaczoiMDAyMDAwQTAxNjgwMTgwRTIwMDAtMjAwQTIwMkYyMDVGMzAwMCIsWmw6IjIwMjgiLFpwOiIyMDI5IixDOiIwMDAwLTAwMUYwMDdGLTAwOUYwMEFEMDM3ODAzNzkwMzdGLTAzODMwMzhCMDM4RDAzQTIwNTI2LTA1MzAwNTU3MDU1ODA1NjAwNTg4MDU4Qi0wNTkwMDVDOC0wNUNGMDVFQi0wNUVGMDVGNS0wNjA1MDYxQzA2MUQwNjIwMDY1RjA2REQwNzBFMDcwRjA3NEIwNzRDMDdCMi0wN0JGMDdGQi0wN0ZGMDgyRTA4MkYwODNGLTA4RkYwOTNBMDkzQjA5NEYwOTU2MDk1NzA5NzMtMDk3ODA5ODAwOTg0MDk4RDA5OEUwOTkxMDk5MjA5QTkwOUIxMDlCMy0wOUI1MDlCQTA5QkIwOUM1MDlDNjA5QzkwOUNBMDlDRi0wOUQ2MDlEOC0wOURCMDlERTA5RTQwOUU1MDlGQy0wQTAwMEEwNDBBMEItMEEwRTBBMTEwQTEyMEEyOTBBMzEwQTM0MEEzNzBBM0EwQTNCMEEzRDBBNDMtMEE0NjBBNDkwQTRBMEE0RS0wQTUwMEE1Mi0wQTU4MEE1RDBBNUYtMEE2NTBBNzYtMEE4MDBBODQwQThFMEE5MjBBQTkwQUIxMEFCNDBBQkEwQUJCMEFDNjBBQ0EwQUNFMEFDRjBBRDEtMEFERjBBRTQwQUU1MEFGMDBBRjItMEIwMDBCMDQwQjBEMEIwRTBCMTEwQjEyMEIyOTBCMzEwQjM0MEIzQTBCM0IwQjQ1MEI0NjBCNDkwQjRBMEI0RS0wQjU1MEI1OC0wQjVCMEI1RTBCNjQwQjY1MEI3Mi0wQjgxMEI4NDBCOEItMEI4RDBCOTEwQjk2LTBCOTgwQjlCMEI5RDBCQTAtMEJBMjBCQTUtMEJBNzBCQUItMEJBRDBCQkEtMEJCRDBCQzMtMEJDNTBCQzkwQkNFMEJDRjBCRDEtMEJENjBCRDgtMEJFNTBCRkItMEMwMDBDMDQwQzBEMEMxMTBDMjkwQzM0MEMzQS0wQzNDMEM0NTBDNDkwQzRFLTBDNTQwQzU3MEM1QS0wQzVGMEM2NDBDNjUwQzcwLTBDNzcwQzgwMEM4MTBDODQwQzhEMEM5MTBDQTkwQ0I0MENCQTBDQkIwQ0M1MENDOTBDQ0UtMENENDBDRDctMENERDBDREYwQ0U0MENFNTBDRjAwQ0YzLTBEMDEwRDA0MEQwRDBEMTEwRDI5MEQzQS0wRDNDMEQ0NTBENDkwRDRFLTBENTYwRDU4LTBENUYwRDY0MEQ2NTBENzYtMEQ3ODBEODAwRDgxMEQ4NDBEOTctMEQ5OTBEQjIwREJDMERCRTBEQkYwREM3LTBEQzkwRENCLTBEQ0UwREQ1MERENzBERTAtMERGMTBERjUtMEUwMDBFM0ItMEUzRTBFNUMtMEU4MDBFODMwRTg1MEU4NjBFODkwRThCMEU4QzBFOEUtMEU5MzBFOTgwRUEwMEVBNDBFQTYwRUE4MEVBOTBFQUMwRUJBMEVCRTBFQkYwRUM1MEVDNzBFQ0UwRUNGMEVEQTBFREIwRURFLTBFRkYwRjQ4MEY2RC0wRjcwMEY4Qy0wRjhGMEY5ODBGQkQwRkNEMEZEOS0wRkZGMTBDNi0xMENGMTBGRC0xMEZGMTI0OTEyNEUxMjRGMTI1NzEyNTkxMjVFMTI1RjEyODkxMjhFMTI4RjEyQjExMkI2MTJCNzEyQkYxMkMxMTJDNjEyQzcxMkQ3MTMxMTEzMTYxMzE3MTM1Qi0xMzVFMTM3RC0xMzdGMTM5QS0xMzlGMTNGNS0xM0ZGMTY5RC0xNjlGMTZGMS0xNkZGMTcwRDE3MTUtMTcxRjE3MzctMTczRjE3NTQtMTc1RjE3NkQxNzcxMTc3NC0xNzdGMTdCNDE3QjUxN0RFMTdERjE3RUEtMTdFRjE3RkEtMTdGRjE4MEYxODFBLTE4MUYxODc4LTE4N0YxOEFCLTE4QUYxOEY2LTE4RkYxOTFELTE5MUYxOTJDLTE5MkYxOTNDLTE5M0YxOTQxLTE5NDMxOTZFMTk2RjE5NzUtMTk3RjE5QUMtMTlBRjE5Q0EtMTlDRjE5REItMTlERDFBMUMxQTFEMUE1RjFBN0QxQTdFMUE4QS0xQThGMUE5QS0xQTlGMUFBRS0xQUZGMUI0Qy0xQjRGMUI3RC0xQjdGMUJBQi0xQkFEMUJCQS0xQkZGMUMzOC0xQzNBMUM0QS0xQzRDMUM4MC0xQ0NGMUNGMy0xQ0ZGMURFNy0xREZDMUYxNjFGMTcxRjFFMUYxRjFGNDYxRjQ3MUY0RTFGNEYxRjU4MUY1QTFGNUMxRjVFMUY3RTFGN0YxRkI1MUZDNTFGRDQxRkQ1MUZEQzFGRjAxRkYxMUZGNTFGRkYyMDBCLTIwMEYyMDJBLTIwMkUyMDYwLTIwNkYyMDcyMjA3MzIwOEYyMDk1LTIwOUYyMEI5LTIwQ0YyMEYxLTIwRkYyMThBLTIxOEYyM0U5LTIzRkYyNDI3LTI0M0YyNDRCLTI0NUYyNkNFMjZFMjI2RTQtMjZFNzI3MDAyNzA1MjcwQTI3MEIyNzI4Mjc0QzI3NEUyNzUzLTI3NTUyNzVGMjc2MDI3OTUtMjc5NzI3QjAyN0JGMjdDQjI3Q0QtMjdDRjJCNEQtMkI0RjJCNUEtMkJGRjJDMkYyQzVGMkNGMi0yQ0Y4MkQyNi0yRDJGMkQ2Ni0yRDZFMkQ3MC0yRDdGMkQ5Ny0yRDlGMkRBNzJEQUYyREI3MkRCRjJEQzcyRENGMkRENzJEREYyRTMyLTJFN0YyRTlBMkVGNC0yRUZGMkZENi0yRkVGMkZGQy0yRkZGMzA0MDMwOTczMDk4MzEwMC0zMTA0MzEyRS0zMTMwMzE4RjMxQjgtMzFCRjMxRTQtMzFFRjMyMUYzMkZGNERCNi00REJGOUZDQy05RkZGQTQ4RC1BNDhGQTRDNy1BNENGQTYyQy1BNjNGQTY2MEE2NjFBNjc0LUE2N0JBNjk4LUE2OUZBNkY4LUE2RkZBNzhELUE3RkFBODJDLUE4MkZBODNBLUE4M0ZBODc4LUE4N0ZBOEM1LUE4Q0RBOERBLUE4REZBOEZDLUE4RkZBOTU0LUE5NUVBOTdELUE5N0ZBOUNFQTlEQS1BOUREQTlFMC1BOUZGQUEzNy1BQTNGQUE0RUFBNEZBQTVBQUE1QkFBN0MtQUE3RkFBQzMtQUFEQUFBRTAtQUJCRkFCRUVBQkVGQUJGQS1BQkZGRDdBNC1EN0FGRDdDNy1EN0NBRDdGQy1GOEZGRkEyRUZBMkZGQTZFRkE2RkZBREEtRkFGRkZCMDctRkIxMkZCMTgtRkIxQ0ZCMzdGQjNERkIzRkZCNDJGQjQ1RkJCMi1GQkQyRkQ0MC1GRDRGRkQ5MEZEOTFGREM4LUZERUZGREZFRkRGRkZFMUEtRkUxRkZFMjctRkUyRkZFNTNGRTY3RkU2Qy1GRTZGRkU3NUZFRkQtRkYwMEZGQkYtRkZDMUZGQzhGRkM5RkZEMEZGRDFGRkQ4RkZEOUZGREQtRkZERkZGRTdGRkVGLUZGRkJGRkZFRkZGRiIsQ2M6IjAwMDAtMDAxRjAwN0YtMDA5RiIsQ2Y6IjAwQUQwNjAwLTA2MDMwNkREMDcwRjE3QjQxN0I1MjAwQi0yMDBGMjAyQS0yMDJFMjA2MC0yMDY0MjA2QS0yMDZGRkVGRkZGRjktRkZGQiIsQ286IkUwMDAtRjhGRiIsQ3M6IkQ4MDAtREZGRiIsQ246IjAzNzgwMzc5MDM3Ri0wMzgzMDM4QjAzOEQwM0EyMDUyNi0wNTMwMDU1NzA1NTgwNTYwMDU4ODA1OEItMDU5MDA1QzgtMDVDRjA1RUItMDVFRjA1RjUtMDVGRjA2MDQwNjA1MDYxQzA2MUQwNjIwMDY1RjA3MEUwNzRCMDc0QzA3QjItMDdCRjA3RkItMDdGRjA4MkUwODJGMDgzRi0wOEZGMDkzQTA5M0IwOTRGMDk1NjA5NTcwOTczLTA5NzgwOTgwMDk4NDA5OEQwOThFMDk5MTA5OTIwOUE5MDlCMTA5QjMtMDlCNTA5QkEwOUJCMDlDNTA5QzYwOUM5MDlDQTA5Q0YtMDlENjA5RDgtMDlEQjA5REUwOUU0MDlFNTA5RkMtMEEwMDBBMDQwQTBCLTBBMEUwQTExMEExMjBBMjkwQTMxMEEzNDBBMzcwQTNBMEEzQjBBM0QwQTQzLTBBNDYwQTQ5MEE0QTBBNEUtMEE1MDBBNTItMEE1ODBBNUQwQTVGLTBBNjUwQTc2LTBBODAwQTg0MEE4RTBBOTIwQUE5MEFCMTBBQjQwQUJBMEFCQjBBQzYwQUNBMEFDRTBBQ0YwQUQxLTBBREYwQUU0MEFFNTBBRjAwQUYyLTBCMDAwQjA0MEIwRDBCMEUwQjExMEIxMjBCMjkwQjMxMEIzNDBCM0EwQjNCMEI0NTBCNDYwQjQ5MEI0QTBCNEUtMEI1NTBCNTgtMEI1QjBCNUUwQjY0MEI2NTBCNzItMEI4MTBCODQwQjhCLTBCOEQwQjkxMEI5Ni0wQjk4MEI5QjBCOUQwQkEwLTBCQTIwQkE1LTBCQTcwQkFCLTBCQUQwQkJBLTBCQkQwQkMzLTBCQzUwQkM5MEJDRTBCQ0YwQkQxLTBCRDYwQkQ4LTBCRTUwQkZCLTBDMDAwQzA0MEMwRDBDMTEwQzI5MEMzNDBDM0EtMEMzQzBDNDUwQzQ5MEM0RS0wQzU0MEM1NzBDNUEtMEM1RjBDNjQwQzY1MEM3MC0wQzc3MEM4MDBDODEwQzg0MEM4RDBDOTEwQ0E5MENCNDBDQkEwQ0JCMENDNTBDQzkwQ0NFLTBDRDQwQ0Q3LTBDREQwQ0RGMENFNDBDRTUwQ0YwMENGMy0wRDAxMEQwNDBEMEQwRDExMEQyOTBEM0EtMEQzQzBENDUwRDQ5MEQ0RS0wRDU2MEQ1OC0wRDVGMEQ2NDBENjUwRDc2LTBENzgwRDgwMEQ4MTBEODQwRDk3LTBEOTkwREIyMERCQzBEQkUwREJGMERDNy0wREM5MERDQi0wRENFMERENTBERDcwREUwLTBERjEwREY1LTBFMDAwRTNCLTBFM0UwRTVDLTBFODAwRTgzMEU4NTBFODYwRTg5MEU4QjBFOEMwRThFLTBFOTMwRTk4MEVBMDBFQTQwRUE2MEVBODBFQTkwRUFDMEVCQTBFQkUwRUJGMEVDNTBFQzcwRUNFMEVDRjBFREEwRURCMEVERS0wRUZGMEY0ODBGNkQtMEY3MDBGOEMtMEY4RjBGOTgwRkJEMEZDRDBGRDktMEZGRjEwQzYtMTBDRjEwRkQtMTBGRjEyNDkxMjRFMTI0RjEyNTcxMjU5MTI1RTEyNUYxMjg5MTI4RTEyOEYxMkIxMTJCNjEyQjcxMkJGMTJDMTEyQzYxMkM3MTJENzEzMTExMzE2MTMxNzEzNUItMTM1RTEzN0QtMTM3RjEzOUEtMTM5RjEzRjUtMTNGRjE2OUQtMTY5RjE2RjEtMTZGRjE3MEQxNzE1LTE3MUYxNzM3LTE3M0YxNzU0LTE3NUYxNzZEMTc3MTE3NzQtMTc3RjE3REUxN0RGMTdFQS0xN0VGMTdGQS0xN0ZGMTgwRjE4MUEtMTgxRjE4NzgtMTg3RjE4QUItMThBRjE4RjYtMThGRjE5MUQtMTkxRjE5MkMtMTkyRjE5M0MtMTkzRjE5NDEtMTk0MzE5NkUxOTZGMTk3NS0xOTdGMTlBQy0xOUFGMTlDQS0xOUNGMTlEQi0xOUREMUExQzFBMUQxQTVGMUE3RDFBN0UxQThBLTFBOEYxQTlBLTFBOUYxQUFFLTFBRkYxQjRDLTFCNEYxQjdELTFCN0YxQkFCLTFCQUQxQkJBLTFCRkYxQzM4LTFDM0ExQzRBLTFDNEMxQzgwLTFDQ0YxQ0YzLTFDRkYxREU3LTFERkMxRjE2MUYxNzFGMUUxRjFGMUY0NjFGNDcxRjRFMUY0RjFGNTgxRjVBMUY1QzFGNUUxRjdFMUY3RjFGQjUxRkM1MUZENDFGRDUxRkRDMUZGMDFGRjExRkY1MUZGRjIwNjUtMjA2OTIwNzIyMDczMjA4RjIwOTUtMjA5RjIwQjktMjBDRjIwRjEtMjBGRjIxOEEtMjE4RjIzRTktMjNGRjI0MjctMjQzRjI0NEItMjQ1RjI2Q0UyNkUyMjZFNC0yNkU3MjcwMDI3MDUyNzBBMjcwQjI3MjgyNzRDMjc0RTI3NTMtMjc1NTI3NUYyNzYwMjc5NS0yNzk3MjdCMDI3QkYyN0NCMjdDRC0yN0NGMkI0RC0yQjRGMkI1QS0yQkZGMkMyRjJDNUYyQ0YyLTJDRjgyRDI2LTJEMkYyRDY2LTJENkUyRDcwLTJEN0YyRDk3LTJEOUYyREE3MkRBRjJEQjcyREJGMkRDNzJEQ0YyREQ3MkRERjJFMzItMkU3RjJFOUEyRUY0LTJFRkYyRkQ2LTJGRUYyRkZDLTJGRkYzMDQwMzA5NzMwOTgzMTAwLTMxMDQzMTJFLTMxMzAzMThGMzFCOC0zMUJGMzFFNC0zMUVGMzIxRjMyRkY0REI2LTREQkY5RkNDLTlGRkZBNDhELUE0OEZBNEM3LUE0Q0ZBNjJDLUE2M0ZBNjYwQTY2MUE2NzQtQTY3QkE2OTgtQTY5RkE2RjgtQTZGRkE3OEQtQTdGQUE4MkMtQTgyRkE4M0EtQTgzRkE4NzgtQTg3RkE4QzUtQThDREE4REEtQThERkE4RkMtQThGRkE5NTQtQTk1RUE5N0QtQTk3RkE5Q0VBOURBLUE5RERBOUUwLUE5RkZBQTM3LUFBM0ZBQTRFQUE0RkFBNUFBQTVCQUE3Qy1BQTdGQUFDMy1BQURBQUFFMC1BQkJGQUJFRUFCRUZBQkZBLUFCRkZEN0E0LUQ3QUZEN0M3LUQ3Q0FEN0ZDLUQ3RkZGQTJFRkEyRkZBNkVGQTZGRkFEQS1GQUZGRkIwNy1GQjEyRkIxOC1GQjFDRkIzN0ZCM0RGQjNGRkI0MkZCNDVGQkIyLUZCRDJGRDQwLUZENEZGRDkwRkQ5MUZEQzgtRkRFRkZERkVGREZGRkUxQS1GRTFGRkUyNy1GRTJGRkU1M0ZFNjdGRTZDLUZFNkZGRTc1RkVGREZFRkVGRjAwRkZCRi1GRkMxRkZDOEZGQzlGRkQwRkZEMUZGRDhGRkQ5RkZERC1GRkRGRkZFN0ZGRUYtRkZGOEZGRkVGRkZGIn0pfSksYWNlLmRlZmluZSgiYWNlL2RvY3VtZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvcmFuZ2UiLCJhY2UvYW5jaG9yIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2xpYi9vb3AiKSxlPWEoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1hKCIuL3JhbmdlIikuUmFuZ2UsZz1hKCIuL2FuY2hvciIpLkFuY2hvcixoPWZ1bmN0aW9uKGEpe3RoaXMuJGxpbmVzPVtdLEFycmF5LmlzQXJyYXkoYSk/dGhpcy5pbnNlcnRMaW5lcygwLGEpOmEubGVuZ3RoPT0wP3RoaXMuJGxpbmVzPVsiIl06dGhpcy5pbnNlcnQoe3JvdzowLGNvbHVtbjowfSxhKX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdldExlbmd0aCgpO3RoaXMucmVtb3ZlKG5ldyBmKDAsMCxiLHRoaXMuZ2V0TGluZShiLTEpLmxlbmd0aCkpLHRoaXMuaW5zZXJ0KHtyb3c6MCxjb2x1bW46MH0sYSl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpfSx0aGlzLmNyZWF0ZUFuY2hvcj1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZyh0aGlzLGEsYil9LCJhYWEiLnNwbGl0KC9hLykubGVuZ3RoPT0wP3RoaXMuJHNwbGl0PWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKS5zcGxpdCgiXG4iKX06dGhpcy4kc3BsaXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3BsaXQoL1xyXG58XHJ8XG4vKX0sdGhpcy4kZGV0ZWN0TmV3TGluZT1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eLio/KFxyXG58XHJ8XG4pL20pO2I/dGhpcy4kYXV0b05ld0xpbmU9YlsxXTp0aGlzLiRhdXRvTmV3TGluZT0iXG4ifSx0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXI9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy4kbmV3TGluZU1vZGUpe2Nhc2Uid2luZG93cyI6cmV0dXJuIlxyXG4iO2Nhc2UidW5peCI6cmV0dXJuIlxuIjtjYXNlImF1dG8iOnJldHVybiB0aGlzLiRhdXRvTmV3TGluZX19LHRoaXMuJGF1dG9OZXdMaW5lPSJcbiIsdGhpcy4kbmV3TGluZU1vZGU9ImF1dG8iLHRoaXMuc2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oYSl7aWYodGhpcy4kbmV3TGluZU1vZGU9PT1hKXJldHVybjt0aGlzLiRuZXdMaW5lTW9kZT1hfSx0aGlzLmdldE5ld0xpbmVNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlfSx0aGlzLmlzTmV3TGluZT1mdW5jdGlvbihhKXtyZXR1cm4gYT09IlxyXG4ifHxhPT0iXHIifHxhPT0iXG4ifSx0aGlzLmdldExpbmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGxpbmVzW2FdfHwiIn0sdGhpcy5nZXRMaW5lcz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLiRsaW5lcy5zbGljZShhLGIrMSl9LHRoaXMuZ2V0QWxsTGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lcygwLHRoaXMuZ2V0TGVuZ3RoKCkpfSx0aGlzLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRsaW5lcy5sZW5ndGh9LHRoaXMuZ2V0VGV4dFJhbmdlPWZ1bmN0aW9uKGEpe2lmKGEuc3RhcnQucm93PT1hLmVuZC5yb3cpcmV0dXJuIHRoaXMuJGxpbmVzW2Euc3RhcnQucm93XS5zdWJzdHJpbmcoYS5zdGFydC5jb2x1bW4sYS5lbmQuY29sdW1uKTt2YXIgYj1bXTtyZXR1cm4gYi5wdXNoKHRoaXMuJGxpbmVzW2Euc3RhcnQucm93XS5zdWJzdHJpbmcoYS5zdGFydC5jb2x1bW4pKSxiLnB1c2guYXBwbHkoYix0aGlzLmdldExpbmVzKGEuc3RhcnQucm93KzEsYS5lbmQucm93LTEpKSxiLnB1c2godGhpcy4kbGluZXNbYS5lbmQucm93XS5zdWJzdHJpbmcoMCxhLmVuZC5jb2x1bW4pKSxiLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpfSx0aGlzLiRjbGlwUG9zaXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nZXRMZW5ndGgoKTtyZXR1cm4gYS5yb3c+PWImJihhLnJvdz1NYXRoLm1heCgwLGItMSksYS5jb2x1bW49dGhpcy5nZXRMaW5lKGItMSkubGVuZ3RoKSxhfSx0aGlzLmluc2VydD1mdW5jdGlvbihhLGIpe2lmKGIubGVuZ3RoPT0wKXJldHVybiBhO2E9dGhpcy4kY2xpcFBvc2l0aW9uKGEpLHRoaXMuZ2V0TGVuZ3RoKCk8PTEmJnRoaXMuJGRldGVjdE5ld0xpbmUoYik7dmFyIGM9dGhpcy4kc3BsaXQoYiksZD1jLnNwbGljZSgwLDEpWzBdLGU9Yy5sZW5ndGg9PTA/bnVsbDpjLnNwbGljZShjLmxlbmd0aC0xLDEpWzBdO3JldHVybiBhPXRoaXMuaW5zZXJ0SW5MaW5lKGEsZCksZSE9PW51bGwmJihhPXRoaXMuaW5zZXJ0TmV3TGluZShhKSxhPXRoaXMuaW5zZXJ0TGluZXMoYS5yb3csYyksYT10aGlzLmluc2VydEluTGluZShhLGV8fCIiKSksYX0sdGhpcy5pbnNlcnRMaW5lcz1mdW5jdGlvbihhLGIpe2lmKGIubGVuZ3RoPT0wKXJldHVybntyb3c6YSxjb2x1bW46MH07dmFyIGM9W2EsMF07Yy5wdXNoLmFwcGx5KGMsYiksdGhpcy4kbGluZXMuc3BsaWNlLmFwcGx5KHRoaXMuJGxpbmVzLGMpO3ZhciBkPW5ldyBmKGEsMCxhK2IubGVuZ3RoLDApLGU9e2FjdGlvbjoiaW5zZXJ0TGluZXMiLHJhbmdlOmQsbGluZXM6Yn07cmV0dXJuIHRoaXMuX2VtaXQoImNoYW5nZSIse2RhdGE6ZX0pLGQuZW5kfSx0aGlzLmluc2VydE5ld0xpbmU9ZnVuY3Rpb24oYSl7YT10aGlzLiRjbGlwUG9zaXRpb24oYSk7dmFyIGI9dGhpcy4kbGluZXNbYS5yb3ddfHwiIjt0aGlzLiRsaW5lc1thLnJvd109Yi5zdWJzdHJpbmcoMCxhLmNvbHVtbiksdGhpcy4kbGluZXMuc3BsaWNlKGEucm93KzEsMCxiLnN1YnN0cmluZyhhLmNvbHVtbixiLmxlbmd0aCkpO3ZhciBjPXtyb3c6YS5yb3crMSxjb2x1bW46MH0sZD17YWN0aW9uOiJpbnNlcnRUZXh0IixyYW5nZTpmLmZyb21Qb2ludHMoYSxjKSx0ZXh0OnRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpfTtyZXR1cm4gdGhpcy5fZW1pdCgiY2hhbmdlIix7ZGF0YTpkfSksY30sdGhpcy5pbnNlcnRJbkxpbmU9ZnVuY3Rpb24oYSxiKXtpZihiLmxlbmd0aD09MClyZXR1cm4gYTt2YXIgYz10aGlzLiRsaW5lc1thLnJvd118fCIiO3RoaXMuJGxpbmVzW2Eucm93XT1jLnN1YnN0cmluZygwLGEuY29sdW1uKStiK2Muc3Vic3RyaW5nKGEuY29sdW1uKTt2YXIgZD17cm93OmEucm93LGNvbHVtbjphLmNvbHVtbitiLmxlbmd0aH0sZT17YWN0aW9uOiJpbnNlcnRUZXh0IixyYW5nZTpmLmZyb21Qb2ludHMoYSxkKSx0ZXh0OmJ9O3JldHVybiB0aGlzLl9lbWl0KCJjaGFuZ2UiLHtkYXRhOmV9KSxkfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihhKXthLnN0YXJ0PXRoaXMuJGNsaXBQb3NpdGlvbihhLnN0YXJ0KSxhLmVuZD10aGlzLiRjbGlwUG9zaXRpb24oYS5lbmQpO2lmKGEuaXNFbXB0eSgpKXJldHVybiBhLnN0YXJ0O3ZhciBiPWEuc3RhcnQucm93LGM9YS5lbmQucm93O2lmKGEuaXNNdWx0aUxpbmUoKSl7dmFyIGQ9YS5zdGFydC5jb2x1bW49PTA/YjpiKzEsZT1jLTE7YS5lbmQuY29sdW1uPjAmJnRoaXMucmVtb3ZlSW5MaW5lKGMsMCxhLmVuZC5jb2x1bW4pLGU+PWQmJnRoaXMucmVtb3ZlTGluZXMoZCxlKSxkIT1iJiYodGhpcy5yZW1vdmVJbkxpbmUoYixhLnN0YXJ0LmNvbHVtbix0aGlzLmdldExpbmUoYikubGVuZ3RoKSx0aGlzLnJlbW92ZU5ld0xpbmUoYS5zdGFydC5yb3cpKX1lbHNlIHRoaXMucmVtb3ZlSW5MaW5lKGIsYS5zdGFydC5jb2x1bW4sYS5lbmQuY29sdW1uKTtyZXR1cm4gYS5zdGFydH0sdGhpcy5yZW1vdmVJbkxpbmU9ZnVuY3Rpb24oYSxiLGMpe2lmKGI9PWMpcmV0dXJuO3ZhciBkPW5ldyBmKGEsYixhLGMpLGU9dGhpcy5nZXRMaW5lKGEpLGc9ZS5zdWJzdHJpbmcoYixjKSxoPWUuc3Vic3RyaW5nKDAsYikrZS5zdWJzdHJpbmcoYyxlLmxlbmd0aCk7dGhpcy4kbGluZXMuc3BsaWNlKGEsMSxoKTt2YXIgaT17YWN0aW9uOiJyZW1vdmVUZXh0IixyYW5nZTpkLHRleHQ6Z307cmV0dXJuIHRoaXMuX2VtaXQoImNoYW5nZSIse2RhdGE6aX0pLGQuc3RhcnR9LHRoaXMucmVtb3ZlTGluZXM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZihhLDAsYisxLDApLGQ9dGhpcy4kbGluZXMuc3BsaWNlKGEsYi1hKzEpLGU9e2FjdGlvbjoicmVtb3ZlTGluZXMiLHJhbmdlOmMsbmw6dGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCksbGluZXM6ZH07cmV0dXJuIHRoaXMuX2VtaXQoImNoYW5nZSIse2RhdGE6ZX0pLGR9LHRoaXMucmVtb3ZlTmV3TGluZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdldExpbmUoYSksYz10aGlzLmdldExpbmUoYSsxKSxkPW5ldyBmKGEsYi5sZW5ndGgsYSsxLDApLGU9YitjO3RoaXMuJGxpbmVzLnNwbGljZShhLDIsZSk7dmFyIGc9e2FjdGlvbjoicmVtb3ZlVGV4dCIscmFuZ2U6ZCx0ZXh0OnRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpfTt0aGlzLl9lbWl0KCJjaGFuZ2UiLHtkYXRhOmd9KX0sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKGEsYil7aWYoYi5sZW5ndGg9PTAmJmEuaXNFbXB0eSgpKXJldHVybiBhLnN0YXJ0O2lmKGI9PXRoaXMuZ2V0VGV4dFJhbmdlKGEpKXJldHVybiBhLmVuZDt0aGlzLnJlbW92ZShhKTtpZihiKXZhciBjPXRoaXMuaW5zZXJ0KGEuc3RhcnQsYik7ZWxzZSBjPWEuc3RhcnQ7cmV0dXJuIGN9LHRoaXMuYXBwbHlEZWx0YXM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl0sZD1mLmZyb21Qb2ludHMoYy5yYW5nZS5zdGFydCxjLnJhbmdlLmVuZCk7Yy5hY3Rpb249PSJpbnNlcnRMaW5lcyI/dGhpcy5pbnNlcnRMaW5lcyhkLnN0YXJ0LnJvdyxjLmxpbmVzKTpjLmFjdGlvbj09Imluc2VydFRleHQiP3RoaXMuaW5zZXJ0KGQuc3RhcnQsYy50ZXh0KTpjLmFjdGlvbj09InJlbW92ZUxpbmVzIj90aGlzLnJlbW92ZUxpbmVzKGQuc3RhcnQucm93LGQuZW5kLnJvdy0xKTpjLmFjdGlvbj09InJlbW92ZVRleHQiJiZ0aGlzLnJlbW92ZShkKX19LHRoaXMucmV2ZXJ0RGVsdGFzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgYz1hW2JdLGQ9Zi5mcm9tUG9pbnRzKGMucmFuZ2Uuc3RhcnQsYy5yYW5nZS5lbmQpO2MuYWN0aW9uPT0iaW5zZXJ0TGluZXMiP3RoaXMucmVtb3ZlTGluZXMoZC5zdGFydC5yb3csZC5lbmQucm93LTEpOmMuYWN0aW9uPT0iaW5zZXJ0VGV4dCI/dGhpcy5yZW1vdmUoZCk6Yy5hY3Rpb249PSJyZW1vdmVMaW5lcyI/dGhpcy5pbnNlcnRMaW5lcyhkLnN0YXJ0LnJvdyxjLmxpbmVzKTpjLmFjdGlvbj09InJlbW92ZVRleHQiJiZ0aGlzLmluc2VydChkLnN0YXJ0LGMudGV4dCl9fX0pKS5jYWxsKGgucHJvdG90eXBlKSxiLkRvY3VtZW50PWh9KSxhY2UuZGVmaW5lKCJhY2UvYW5jaG9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vbGliL29vcCIpLGU9YSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWIuQW5jaG9yPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmRvY3VtZW50PWEsdHlwZW9mIGM9PSJ1bmRlZmluZWQiP3RoaXMuc2V0UG9zaXRpb24oYi5yb3csYi5jb2x1bW4pOnRoaXMuc2V0UG9zaXRpb24oYixjKSx0aGlzLiRvbkNoYW5nZT10aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyksYS5vbigiY2hhbmdlIix0aGlzLiRvbkNoYW5nZSl9OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudCh0aGlzLnJvdyx0aGlzLmNvbHVtbil9LHRoaXMuZ2V0RG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N1bWVudH0sdGhpcy5vbkNoYW5nZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRhdGEsYz1iLnJhbmdlO2lmKGMuc3RhcnQucm93PT1jLmVuZC5yb3cmJmMuc3RhcnQucm93IT10aGlzLnJvdylyZXR1cm47aWYoYy5zdGFydC5yb3c+dGhpcy5yb3cpcmV0dXJuO2lmKGMuc3RhcnQucm93PT10aGlzLnJvdyYmYy5zdGFydC5jb2x1bW4+dGhpcy5jb2x1bW4pcmV0dXJuO3ZhciBkPXRoaXMucm93LGU9dGhpcy5jb2x1bW47Yi5hY3Rpb249PT0iaW5zZXJ0VGV4dCI/Yy5zdGFydC5yb3c9PT1kJiZjLnN0YXJ0LmNvbHVtbjw9ZT9jLnN0YXJ0LnJvdz09PWMuZW5kLnJvdz9lKz1jLmVuZC5jb2x1bW4tYy5zdGFydC5jb2x1bW46KGUtPWMuc3RhcnQuY29sdW1uLGQrPWMuZW5kLnJvdy1jLnN0YXJ0LnJvdyk6Yy5zdGFydC5yb3chPT1jLmVuZC5yb3cmJmMuc3RhcnQucm93PGQmJihkKz1jLmVuZC5yb3ctYy5zdGFydC5yb3cpOmIuYWN0aW9uPT09Imluc2VydExpbmVzIj9jLnN0YXJ0LnJvdzw9ZCYmKGQrPWMuZW5kLnJvdy1jLnN0YXJ0LnJvdyk6Yi5hY3Rpb249PSJyZW1vdmVUZXh0Ij9jLnN0YXJ0LnJvdz09ZCYmYy5zdGFydC5jb2x1bW48ZT9jLmVuZC5jb2x1bW4+PWU/ZT1jLnN0YXJ0LmNvbHVtbjplPU1hdGgubWF4KDAsZS0oYy5lbmQuY29sdW1uLWMuc3RhcnQuY29sdW1uKSk6Yy5zdGFydC5yb3chPT1jLmVuZC5yb3cmJmMuc3RhcnQucm93PGQ/KGMuZW5kLnJvdz09ZCYmKGU9TWF0aC5tYXgoMCxlLWMuZW5kLmNvbHVtbikrYy5zdGFydC5jb2x1bW4pLGQtPWMuZW5kLnJvdy1jLnN0YXJ0LnJvdyk6Yy5lbmQucm93PT1kJiYoZC09Yy5lbmQucm93LWMuc3RhcnQucm93LGU9TWF0aC5tYXgoMCxlLWMuZW5kLmNvbHVtbikrYy5zdGFydC5jb2x1bW4pOmIuYWN0aW9uPT0icmVtb3ZlTGluZXMiJiZjLnN0YXJ0LnJvdzw9ZCYmKGMuZW5kLnJvdzw9ZD9kLT1jLmVuZC5yb3ctYy5zdGFydC5yb3c6KGQ9Yy5zdGFydC5yb3csZT0wKSksdGhpcy5zZXRQb3NpdGlvbihkLGUsITApfSx0aGlzLnNldFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtjP2Q9e3JvdzphLGNvbHVtbjpifTpkPXRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQoYSxiKTtpZih0aGlzLnJvdz09ZC5yb3cmJnRoaXMuY29sdW1uPT1kLmNvbHVtbilyZXR1cm47dmFyIGU9e3Jvdzp0aGlzLnJvdyxjb2x1bW46dGhpcy5jb2x1bW59O3RoaXMucm93PWQucm93LHRoaXMuY29sdW1uPWQuY29sdW1uLHRoaXMuX2VtaXQoImNoYW5nZSIse29sZDplLHZhbHVlOmR9KX0sdGhpcy5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy4kb25DaGFuZ2UpfSx0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9e307cmV0dXJuIGE+PXRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCk/KGMucm93PU1hdGgubWF4KDAsdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKS0xKSxjLmNvbHVtbj10aGlzLmRvY3VtZW50LmdldExpbmUoYy5yb3cpLmxlbmd0aCk6YTwwPyhjLnJvdz0wLGMuY29sdW1uPTApOihjLnJvdz1hLGMuY29sdW1uPU1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShjLnJvdykubGVuZ3RoLE1hdGgubWF4KDAsYikpKSxiPDAmJihjLmNvbHVtbj0wKSxjfX0pKS5jYWxsKGYucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9iYWNrZ3JvdW5kX3Rva2VuaXplciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2xpYi9vb3AiKSxlPWEoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihhLGIpe3RoaXMucnVubmluZz0hMSx0aGlzLmxpbmVzPVtdLHRoaXMuY3VycmVudExpbmU9MCx0aGlzLnRva2VuaXplcj1hO3ZhciBjPXRoaXM7dGhpcy4kd29ya2VyPWZ1bmN0aW9uKCl7aWYoIWMucnVubmluZylyZXR1cm47dmFyIGE9bmV3IERhdGUsYj1jLmN1cnJlbnRMaW5lLGQ9Yy5kb2MsZT0wLGY9ZC5nZXRMZW5ndGgoKTt3aGlsZShjLmN1cnJlbnRMaW5lPGYpe2MubGluZXNbYy5jdXJyZW50TGluZV09Yy4kdG9rZW5pemVSb3dzKGMuY3VycmVudExpbmUsYy5jdXJyZW50TGluZSlbMF0sYy5jdXJyZW50TGluZSsrLGUrPTE7aWYoZSU1PT0wJiZuZXcgRGF0ZS1hPjIwKXtjLmZpcmVVcGRhdGVFdmVudChiLGMuY3VycmVudExpbmUtMSksYy5ydW5uaW5nPXNldFRpbWVvdXQoYy4kd29ya2VyLDIwKTtyZXR1cm59fWMucnVubmluZz0hMSxjLmZpcmVVcGRhdGVFdmVudChiLGYtMSl9fTsoKGZ1bmN0aW9uKCl7ZC5pbXBsZW1lbnQodGhpcyxlKSx0aGlzLnNldFRva2VuaXplcj1mdW5jdGlvbihhKXt0aGlzLnRva2VuaXplcj1hLHRoaXMubGluZXM9W10sdGhpcy5zdGFydCgwKX0sdGhpcy5zZXREb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLmRvYz1hLHRoaXMubGluZXM9W10sdGhpcy5zdG9wKCl9LHRoaXMuZmlyZVVwZGF0ZUV2ZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9e2ZpcnN0OmEsbGFzdDpifTt0aGlzLl9lbWl0KCJ1cGRhdGUiLHtkYXRhOmN9KX0sdGhpcy5zdGFydD1mdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRMaW5lPU1hdGgubWluKGF8fDAsdGhpcy5jdXJyZW50TGluZSx0aGlzLmRvYy5nZXRMZW5ndGgoKSksdGhpcy5saW5lcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSx0aGlzLmxpbmVzLmxlbmd0aCksdGhpcy5zdG9wKCksdGhpcy5ydW5uaW5nPXNldFRpbWVvdXQodGhpcy4kd29ya2VyLDcwMCl9LHRoaXMuc3RvcD1mdW5jdGlvbigpe3RoaXMucnVubmluZyYmY2xlYXJUaW1lb3V0KHRoaXMucnVubmluZyksdGhpcy5ydW5uaW5nPSExfSx0aGlzLmdldFRva2Vucz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLiR0b2tlbml6ZVJvd3MoYSxiKX0sdGhpcy5nZXRTdGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy4kdG9rZW5pemVSb3dzKGEsYSlbMF0uc3RhdGV9LHRoaXMuJHRva2VuaXplUm93cz1mdW5jdGlvbihhLGIpe2lmKCF0aGlzLmRvY3x8aXNOYU4oYSl8fGlzTmFOKGIpKXJldHVyblt7c3RhdGU6InN0YXJ0Iix0b2tlbnM6W119XTt2YXIgYz1bXSxkPSJzdGFydCIsZT0hMTthPjAmJnRoaXMubGluZXNbYS0xXT8oZD10aGlzLmxpbmVzW2EtMV0uc3RhdGUsZT0hMCk6YT09MD8oZD0ic3RhcnQiLGU9ITApOnRoaXMubGluZXMubGVuZ3RoPjAmJihkPXRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGgtMV0uc3RhdGUpO3ZhciBmPXRoaXMuZG9jLmdldExpbmVzKGEsYik7Zm9yKHZhciBnPWE7Zzw9YjtnKyspaWYoIXRoaXMubGluZXNbZ10pe3ZhciBoPXRoaXMudG9rZW5pemVyLmdldExpbmVUb2tlbnMoZltnLWFdfHwiIixkKSxkPWguc3RhdGU7Yy5wdXNoKGgpLGUmJih0aGlzLmxpbmVzW2ddPWgpfWVsc2V7dmFyIGg9dGhpcy5saW5lc1tnXTtkPWguc3RhdGUsYy5wdXNoKGgpfXJldHVybiBjfX0pKS5jYWxsKGYucHJvdG90eXBlKSxiLkJhY2tncm91bmRUb2tlbml6ZXI9Zn0pLGFjZS5kZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vZm9sZGluZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSIsImFjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lIiwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGgoKXt0aGlzLmdldEZvbGRBdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5nZXRGb2xkTGluZShhKTtpZighZClyZXR1cm4gbnVsbDt2YXIgZT1kLmZvbGRzO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgZz1lW2ZdO2lmKGcucmFuZ2UuY29udGFpbnMoYSxiKSl7aWYoYz09MSYmZy5yYW5nZS5pc0VuZChhLGIpKWNvbnRpbnVlO2lmKGM9PS0xJiZnLnJhbmdlLmlzU3RhcnQoYSxiKSljb250aW51ZTtyZXR1cm4gZ319fSx0aGlzLmdldEZvbGRzSW5SYW5nZT1mdW5jdGlvbihhKXthPWEuY2xvbmUoKTt2YXIgYj1hLnN0YXJ0LGM9YS5lbmQsZD10aGlzLiRmb2xkRGF0YSxlPVtdO2IuY29sdW1uKz0xLGMuY29sdW1uLT0xO2Zvcih2YXIgZj0wO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgZz1kW2ZdLnJhbmdlLmNvbXBhcmVSYW5nZShhKTtpZihnPT0yKWNvbnRpbnVlO2lmKGc9PS0yKWJyZWFrO3ZhciBoPWRbZl0uZm9sZHM7Zm9yKHZhciBpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBqPWhbaV07Zz1qLnJhbmdlLmNvbXBhcmVSYW5nZShhKTtpZihnPT0tMilicmVhaztpZihnPT0yKWNvbnRpbnVlO2lmKGc9PTQyKWJyZWFrO2UucHVzaChqKX19cmV0dXJuIGV9LHRoaXMuZ2V0QWxsRm9sZHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKGIpe2EucHVzaChiKTtpZighYi5zdWJGb2xkcylyZXR1cm47Zm9yKHZhciBkPTA7ZDxiLnN1YkZvbGRzLmxlbmd0aDtkKyspYyhiLnN1YkZvbGRzW2RdKX12YXIgYT1bXSxiPXRoaXMuJGZvbGREYXRhO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKWZvcih2YXIgZT0wO2U8YltkXS5mb2xkcy5sZW5ndGg7ZSsrKWMoYltkXS5mb2xkc1tlXSk7cmV0dXJuIGF9LHRoaXMuZ2V0Rm9sZFN0cmluZ0F0PWZ1bmN0aW9uKGEsYixjLGQpe2Q9ZHx8dGhpcy5nZXRGb2xkTGluZShhKTtpZighZClyZXR1cm4gbnVsbDt2YXIgZT17ZW5kOntjb2x1bW46MH19LGYsZztmb3IodmFyIGg9MDtoPGQuZm9sZHMubGVuZ3RoO2grKyl7Zz1kLmZvbGRzW2hdO3ZhciBpPWcucmFuZ2UuY29tcGFyZUVuZChhLGIpO2lmKGk9PS0xKXtmPXRoaXMuZ2V0TGluZShnLnN0YXJ0LnJvdykuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixnLnN0YXJ0LmNvbHVtbik7YnJlYWt9aWYoaT09PTApcmV0dXJuIG51bGw7ZT1nfXJldHVybiBmfHwoZj10aGlzLmdldExpbmUoZy5zdGFydC5yb3cpLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4pKSxjPT0tMT9mLnN1YnN0cmluZygwLGItZS5lbmQuY29sdW1uKTpjPT0xP2Yuc3Vic3RyaW5nKGItZS5lbmQuY29sdW1uKTpmfSx0aGlzLmdldEZvbGRMaW5lPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy4kZm9sZERhdGEsZD0wO2ImJihkPWMuaW5kZXhPZihiKSksZD09LTEmJihkPTApO2ZvcihkO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO2lmKGUuc3RhcnQucm93PD1hJiZlLmVuZC5yb3c+PWEpcmV0dXJuIGU7aWYoZS5lbmQucm93PmEpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9LHRoaXMuZ2V0TmV4dEZvbGRMaW5lPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy4kZm9sZERhdGEsZD0wO2ImJihkPWMuaW5kZXhPZihiKSksZD09LTEmJihkPTApO2ZvcihkO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO2lmKGUuZW5kLnJvdz49YSlyZXR1cm4gZX1yZXR1cm4gbnVsbH0sdGhpcy5nZXRGb2xkZWRSb3dDb3VudD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuJGZvbGREYXRhLGQ9Yi1hKzE7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0sZz1mLmVuZC5yb3csaD1mLnN0YXJ0LnJvdztpZihnPj1iKXtoPGImJihoPj1hP2QtPWItaDpkPTApO2JyZWFrfWc+PWEmJihoPj1hP2QtPWctaDpkLT1nLWErMSl9cmV0dXJuIGR9LHRoaXMuJGFkZEZvbGRMaW5lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLiRmb2xkRGF0YS5wdXNoKGEpLHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydC5yb3ctYi5zdGFydC5yb3d9KSxhfSx0aGlzLmFkZEZvbGQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLiRmb2xkRGF0YSxkPSExLGc7YSBpbnN0YW5jZW9mIGY/Zz1hOmc9bmV3IGYoYixhKSx0aGlzLiRjbGlwUmFuZ2VUb0RvY3VtZW50KGcucmFuZ2UpO3ZhciBoPWcuc3RhcnQucm93LGk9Zy5zdGFydC5jb2x1bW4saj1nLmVuZC5yb3csaz1nLmVuZC5jb2x1bW47aWYoZy5wbGFjZWhvbGRlci5sZW5ndGg8Mil0aHJvdyJQbGFjZWhvbGRlciBoYXMgdG8gYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIjtpZihoPT1qJiZrLWk8Mil0aHJvdyJUaGUgcmFuZ2UgaGFzIHRvIGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyB3aWR0aCI7dmFyIGw9dGhpcy5nZXRGb2xkQXQoaCxpLDEpLG09dGhpcy5nZXRGb2xkQXQoaixrLC0xKTtpZihsJiZtPT1sKXJldHVybiBsLmFkZFN1YkZvbGQoZyk7aWYobCYmIWwucmFuZ2UuaXNTdGFydChoLGkpfHxtJiYhbS5yYW5nZS5pc0VuZChqLGspKXRocm93IkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkIitnLnJhbmdlK2wucmFuZ2U7dmFyIG49dGhpcy5nZXRGb2xkc0luUmFuZ2UoZy5yYW5nZSk7bi5sZW5ndGg+MCYmKHRoaXMucmVtb3ZlRm9sZHMobiksZy5zdWJGb2xkcz1uKTtmb3IodmFyIG89MDtvPGMubGVuZ3RoO28rKyl7dmFyIHA9Y1tvXTtpZihqPT1wLnN0YXJ0LnJvdyl7cC5hZGRGb2xkKGcpLGQ9ITA7YnJlYWt9aWYoaD09cC5lbmQucm93KXtwLmFkZEZvbGQoZyksZD0hMDtpZighZy5zYW1lUm93KXt2YXIgcT1jW28rMV07aWYocSYmcS5zdGFydC5yb3c9PWope3AubWVyZ2UocSk7YnJlYWt9fWJyZWFrfWlmKGo8PXAuc3RhcnQucm93KWJyZWFrfXJldHVybiBkfHwocD10aGlzLiRhZGRGb2xkTGluZShuZXcgZSh0aGlzLiRmb2xkRGF0YSxnKSkpLHRoaXMuJHVzZVdyYXBNb2RlJiZ0aGlzLiR1cGRhdGVXcmFwRGF0YShwLnN0YXJ0LnJvdyxwLnN0YXJ0LnJvdyksdGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy5fZW1pdCgiY2hhbmdlRm9sZCIse2RhdGE6Z30pLGd9LHRoaXMuYWRkRm9sZHM9ZnVuY3Rpb24oYSl7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuYWRkRm9sZChhKX0sdGhpcyl9LHRoaXMucmVtb3ZlRm9sZD1mdW5jdGlvbihhKXt2YXIgYj1hLmZvbGRMaW5lLGM9Yi5zdGFydC5yb3csZD1iLmVuZC5yb3csZT10aGlzLiRmb2xkRGF0YSxmPWIuZm9sZHM7aWYoZi5sZW5ndGg9PTEpZS5zcGxpY2UoZS5pbmRleE9mKGIpLDEpO2Vsc2UgaWYoYi5yYW5nZS5pc0VuZChhLmVuZC5yb3csYS5lbmQuY29sdW1uKSlmLnBvcCgpLGIuZW5kLnJvdz1mW2YubGVuZ3RoLTFdLmVuZC5yb3csYi5lbmQuY29sdW1uPWZbZi5sZW5ndGgtMV0uZW5kLmNvbHVtbjtlbHNlIGlmKGIucmFuZ2UuaXNTdGFydChhLnN0YXJ0LnJvdyxhLnN0YXJ0LmNvbHVtbikpZi5zaGlmdCgpLGIuc3RhcnQucm93PWZbMF0uc3RhcnQucm93LGIuc3RhcnQuY29sdW1uPWZbMF0uc3RhcnQuY29sdW1uO2Vsc2UgaWYoYS5zYW1lUm93KWYuc3BsaWNlKGYuaW5kZXhPZihhKSwxKTtlbHNle3ZhciBnPWIuc3BsaXQoYS5zdGFydC5yb3csYS5zdGFydC5jb2x1bW4pO2Y9Zy5mb2xkcyxmLnNoaWZ0KCksZy5zdGFydC5yb3c9ZlswXS5zdGFydC5yb3csZy5zdGFydC5jb2x1bW49ZlswXS5zdGFydC5jb2x1bW59dGhpcy4kdXNlV3JhcE1vZGUmJnRoaXMuJHVwZGF0ZVdyYXBEYXRhKGMsZCksdGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy5fZW1pdCgiY2hhbmdlRm9sZCIse2RhdGE6YX0pfSx0aGlzLnJlbW92ZUZvbGRzPWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaChhW2NdKTtiLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5yZW1vdmVGb2xkKGEpfSx0aGlzKSx0aGlzLiRtb2RpZmllZD0hMH0sdGhpcy5leHBhbmRGb2xkPWZ1bmN0aW9uKGEpe3RoaXMucmVtb3ZlRm9sZChhKSxhLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5hZGRGb2xkKGEpfSx0aGlzKSxhLnN1YkZvbGRzPVtdfSx0aGlzLmV4cGFuZEZvbGRzPWZ1bmN0aW9uKGEpe2EuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLmV4cGFuZEZvbGQoYSl9LHRoaXMpfSx0aGlzLnVuZm9sZD1mdW5jdGlvbihhLGIpe3ZhciBjLGU7YT09bnVsbD9jPW5ldyBkKDAsMCx0aGlzLmdldExlbmd0aCgpLDApOnR5cGVvZiBhPT0ibnVtYmVyIj9jPW5ldyBkKGEsMCxhLHRoaXMuZ2V0TGluZShhKS5sZW5ndGgpOiJyb3ciaW4gYT9jPWQuZnJvbVBvaW50cyhhLGEpOmM9YSxlPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKGMpO2lmKGIpdGhpcy5yZW1vdmVGb2xkcyhlKTtlbHNlIHdoaWxlKGUubGVuZ3RoKXRoaXMuZXhwYW5kRm9sZHMoZSksZT10aGlzLmdldEZvbGRzSW5SYW5nZShjKX0sdGhpcy5pc1Jvd0ZvbGRlZD1mdW5jdGlvbihhLGIpe3JldHVybiEhdGhpcy5nZXRGb2xkTGluZShhLGIpfSx0aGlzLmdldFJvd0ZvbGRFbmQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldEZvbGRMaW5lKGEsYik7cmV0dXJuIGM/Yy5lbmQucm93OmF9LHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lPWZ1bmN0aW9uKGEsYixjLGQsZSl7ZD09bnVsbCYmKGQ9YS5zdGFydC5yb3csZT0wKSxiPT1udWxsJiYoYj1hLmVuZC5yb3csYz10aGlzLmdldExpbmUoYikubGVuZ3RoKTt2YXIgZj10aGlzLmRvYyxnPSIiO3JldHVybiBhLndhbGsoZnVuY3Rpb24oYSxiLGMsaCl7aWYoYjxkKXJldHVybjtpZihiPT1kKXtpZihjPGUpcmV0dXJuO2g9TWF0aC5tYXgoZSxoKX1hP2crPWE6Zys9Zi5nZXRMaW5lKGIpLnN1YnN0cmluZyhoLGMpfS5iaW5kKHRoaXMpLGIsYyksZ30sdGhpcy5nZXREaXNwbGF5TGluZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldEZvbGRMaW5lKGEpO2lmKCFlKXt2YXIgZjtyZXR1cm4gZj10aGlzLmRvYy5nZXRMaW5lKGEpLGYuc3Vic3RyaW5nKGR8fDAsYnx8Zi5sZW5ndGgpfXJldHVybiB0aGlzLmdldEZvbGREaXNwbGF5TGluZShlLGEsYixjLGQpfSx0aGlzLiRjbG9uZUZvbGREYXRhPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIGE9dGhpcy4kZm9sZERhdGEubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPWIuZm9sZHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmNsb25lKCl9KTtyZXR1cm4gbmV3IGUoYSxjKX0pLGF9LHRoaXMudG9nZ2xlRm9sZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnNlbGVjdGlvbixjPWIuZ2V0UmFuZ2UoKSxkLGU7aWYoYy5pc0VtcHR5KCkpe3ZhciBmPWMuc3RhcnQ7ZD10aGlzLmdldEZvbGRBdChmLnJvdyxmLmNvbHVtbik7aWYoZCl7dGhpcy5leHBhbmRGb2xkKGQpO3JldHVybn0oZT10aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoZikpP2MuY29tcGFyZVBvaW50KGUpPT0xP2MuZW5kPWU6KGMuc3RhcnQ9ZSxjLnN0YXJ0LmNvbHVtbisrLGMuZW5kLmNvbHVtbi0tKTooZT10aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpmLnJvdyxjb2x1bW46Zi5jb2x1bW4rMX0pKT8oYy5jb21wYXJlUG9pbnQoZSk9PTE/Yy5lbmQ9ZTpjLnN0YXJ0PWUsYy5zdGFydC5jb2x1bW4rKyk6Yz10aGlzLmdldENvbW1lbnRGb2xkUmFuZ2UoZi5yb3csZi5jb2x1bW4pfHxjfWVsc2V7dmFyIGc9dGhpcy5nZXRGb2xkc0luUmFuZ2UoYyk7aWYoYSYmZy5sZW5ndGgpe3RoaXMuZXhwYW5kRm9sZHMoZyk7cmV0dXJufWcubGVuZ3RoPT0xJiYoZD1nWzBdKX1kfHwoZD10aGlzLmdldEZvbGRBdChjLnN0YXJ0LnJvdyxjLnN0YXJ0LmNvbHVtbikpO2lmKGQmJmQucmFuZ2UudG9TdHJpbmcoKT09Yy50b1N0cmluZygpKXt0aGlzLmV4cGFuZEZvbGQoZCk7cmV0dXJufXZhciBoPSIuLi4iO2lmKCFjLmlzTXVsdGlMaW5lKCkpe2g9dGhpcy5nZXRUZXh0UmFuZ2UoYyk7aWYoaC5sZW5ndGg8NClyZXR1cm47aD1oLnRyaW0oKS5zdWJzdHJpbmcoMCwyKSsiLi4ifXRoaXMuYWRkRm9sZChoLGMpfSx0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZyh0aGlzLGEsYiksZT1jLmdldEN1cnJlbnRUb2tlbigpO2lmKGUmJi9eY29tbWVudHxzdHJpbmcvLnRlc3QoZS50eXBlKSl7dmFyIGY9bmV3IGQsaD1uZXcgUmVnRXhwKGUudHlwZS5yZXBsYWNlKC9cLi4qLywiXFwuIikpO2RvIGU9Yy5zdGVwQmFja3dhcmQoKTt3aGlsZShlJiZoLnRlc3QoZS50eXBlKSk7Yy5zdGVwRm9yd2FyZCgpLGYuc3RhcnQucm93PWMuZ2V0Q3VycmVudFRva2VuUm93KCksZi5zdGFydC5jb2x1bW49Yy5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSsyLGM9bmV3IGcodGhpcyxhLGIpO2RvIGU9Yy5zdGVwRm9yd2FyZCgpO3doaWxlKGUmJmgudGVzdChlLnR5cGUpKTtyZXR1cm4gZT1jLnN0ZXBCYWNrd2FyZCgpLGYuZW5kLnJvdz1jLmdldEN1cnJlbnRUb2tlblJvdygpLGYuZW5kLmNvbHVtbj1jLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2UudmFsdWUubGVuZ3RoLGZ9fSx0aGlzLmZvbGRBbGw9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvbGRXaWRnZXRzO2I9Ynx8dGhpcy5nZXRMZW5ndGgoKTtmb3IodmFyIGQ9YXx8MDtkPGI7ZCsrKXtjW2RdPT1udWxsJiYoY1tkXT10aGlzLmdldEZvbGRXaWRnZXQoZCkpO2lmKGNbZF0hPSJzdGFydCIpY29udGludWU7dmFyIGU9dGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UoZCk7aWYoZSYmZS5lbmQucm93PGIpdHJ5e3RoaXMuYWRkRm9sZCgiLi4uIixlKX1jYXRjaChmKXt9fX0sdGhpcy4kZm9sZFN0eWxlcz17bWFudWFsOjEsbWFya2JlZ2luOjEsbWFya2JlZ2luZW5kOjF9LHRoaXMuJGZvbGRTdHlsZT0ibWFya2JlZ2luIix0aGlzLnNldEZvbGRTdHlsZT1mdW5jdGlvbihhKXtpZighdGhpcy4kZm9sZFN0eWxlc1thXSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9sZCBzdHlsZTogIithKyJbIitPYmplY3Qua2V5cyh0aGlzLiRmb2xkU3R5bGVzKS5qb2luKCIsICIpKyJdIik7aWYodGhpcy4kZm9sZFN0eWxlPT1hKXJldHVybjt0aGlzLiRmb2xkU3R5bGU9YSxhPT0ibWFudWFsIiYmdGhpcy51bmZvbGQoKTt2YXIgYj10aGlzLiRmb2xkTW9kZTt0aGlzLiRzZXRGb2xkaW5nKG51bGwpLHRoaXMuJHNldEZvbGRpbmcoYil9LHRoaXMuJHNldEZvbGRpbmc9ZnVuY3Rpb24oYSl7aWYodGhpcy4kZm9sZE1vZGU9PWEpcmV0dXJuO3RoaXMuJGZvbGRNb2RlPWEsdGhpcy5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlIix0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyksdGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIpO2lmKCFhfHx0aGlzLiRmb2xkU3R5bGU9PSJtYW51YWwiKXt0aGlzLmZvbGRXaWRnZXRzPW51bGw7cmV0dXJufXRoaXMuZm9sZFdpZGdldHM9W10sdGhpcy5nZXRGb2xkV2lkZ2V0PWEuZ2V0Rm9sZFdpZGdldC5iaW5kKGEsdGhpcyx0aGlzLiRmb2xkU3R5bGUpLHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWEuZ2V0Rm9sZFdpZGdldFJhbmdlLmJpbmQoYSx0aGlzLHRoaXMuJGZvbGRTdHlsZSksdGhpcy4kdXBkYXRlRm9sZFdpZGdldHM9dGhpcy51cGRhdGVGb2xkV2lkZ2V0cy5iaW5kKHRoaXMpLHRoaXMub24oImNoYW5nZSIsdGhpcy4kdXBkYXRlRm9sZFdpZGdldHMpfSx0aGlzLm9uRm9sZFdpZGdldENsaWNrPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRGb2xkV2lkZ2V0KGEpLGQ9dGhpcy5nZXRMaW5lKGEpLGU9Yi5zaGlmdEtleSxmPWV8fGIuY3RybEtleXx8Yi5hbHRLZXl8fGIubWV0YUtleSxnO2M9PSJlbmQiP2c9dGhpcy5nZXRGb2xkQXQoYSwwLC0xKTpnPXRoaXMuZ2V0Rm9sZEF0KGEsZC5sZW5ndGgsMSk7aWYoZyl7Zj90aGlzLnJlbW92ZUZvbGQoZyk6dGhpcy5leHBhbmRGb2xkKGcpO3JldHVybn12YXIgaD10aGlzLmdldEZvbGRXaWRnZXRSYW5nZShhKTtpZihoKXtpZighaC5pc011bHRpTGluZSgpKXtnPXRoaXMuZ2V0Rm9sZEF0KGguc3RhcnQucm93LGguc3RhcnQuY29sdW1uLDEpO2lmKGcmJmguaXNFZXF1YWwoZy5yYW5nZSkpe3RoaXMucmVtb3ZlRm9sZChnKTtyZXR1cm59fWV8fHRoaXMuYWRkRm9sZCgiLi4uIixoKSxmJiZ0aGlzLmZvbGRBbGwoaC5zdGFydC5yb3crMSxoLmVuZC5yb3cpfWVsc2UgZiYmdGhpcy5mb2xkQWxsKGErMSx0aGlzLmdldExlbmd0aCgpKSxiLnRhcmdldC5jbGFzc05hbWUrPSIgaW52YWxpZCJ9LHRoaXMudXBkYXRlRm9sZFdpZGdldHM9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhLGM9Yi5yYW5nZSxkPWMuc3RhcnQucm93LGU9Yy5lbmQucm93LWQ7aWYoZT09PTApdGhpcy5mb2xkV2lkZ2V0c1tkXT1udWxsO2Vsc2UgaWYoYi5hY3Rpb249PSJyZW1vdmVUZXh0Inx8Yi5hY3Rpb249PSJyZW1vdmVMaW5lcyIpdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UoZCxlKzEsbnVsbCk7ZWxzZXt2YXIgZj1BcnJheShlKzEpO2YudW5zaGlmdChkLDEpLHRoaXMuZm9sZFdpZGdldHMuc3BsaWNlLmFwcGx5KHRoaXMuZm9sZFdpZGdldHMsZil9fX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWEoIi4vZm9sZF9saW5lIikuRm9sZExpbmUsZj1hKCIuL2ZvbGQiKS5Gb2xkLGc9YSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yO2IuRm9sZGluZz1ofSksYWNlLmRlZmluZSgiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkX2xpbmUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZShhLGIpe3RoaXMuZm9sZERhdGE9YSxBcnJheS5pc0FycmF5KGIpP3RoaXMuZm9sZHM9YjpiPXRoaXMuZm9sZHM9W2JdO3ZhciBjPWJbYi5sZW5ndGgtMV07dGhpcy5yYW5nZT1uZXcgZChiWzBdLnN0YXJ0LnJvdyxiWzBdLnN0YXJ0LmNvbHVtbixjLmVuZC5yb3csYy5lbmQuY29sdW1uKSx0aGlzLnN0YXJ0PXRoaXMucmFuZ2Uuc3RhcnQsdGhpcy5lbmQ9dGhpcy5yYW5nZS5lbmQsdGhpcy5mb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0Rm9sZExpbmUodGhpcyl9LHRoaXMpfSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlOygoZnVuY3Rpb24oKXt0aGlzLnNoaWZ0Um93PWZ1bmN0aW9uKGEpe3RoaXMuc3RhcnQucm93Kz1hLHRoaXMuZW5kLnJvdys9YSx0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oYil7Yi5zdGFydC5yb3crPWEsYi5lbmQucm93Kz1hfSl9LHRoaXMuYWRkRm9sZD1mdW5jdGlvbihhKXtpZihhLnNhbWVSb3cpe2lmKGEuc3RhcnQucm93PHRoaXMuc3RhcnRSb3d8fGEuZW5kUm93PnRoaXMuZW5kUm93KXRocm93IkNhbid0IGFkZCBhIGZvbGQgdG8gdGhpcyBGb2xkTGluZSBhcyBpdCBoYXMgbm8gY29ubmVjdGlvbiI7dGhpcy5mb2xkcy5wdXNoKGEpLHRoaXMuZm9sZHMuc29ydChmdW5jdGlvbihhLGIpe3JldHVybi1hLnJhbmdlLmNvbXBhcmVFbmQoYi5zdGFydC5yb3csYi5zdGFydC5jb2x1bW4pfSksdGhpcy5yYW5nZS5jb21wYXJlRW5kKGEuc3RhcnQucm93LGEuc3RhcnQuY29sdW1uKT4wPyh0aGlzLmVuZC5yb3c9YS5lbmQucm93LHRoaXMuZW5kLmNvbHVtbj1hLmVuZC5jb2x1bW4pOnRoaXMucmFuZ2UuY29tcGFyZVN0YXJ0KGEuZW5kLnJvdyxhLmVuZC5jb2x1bW4pPDAmJih0aGlzLnN0YXJ0LnJvdz1hLnN0YXJ0LnJvdyx0aGlzLnN0YXJ0LmNvbHVtbj1hLnN0YXJ0LmNvbHVtbil9ZWxzZSBpZihhLnN0YXJ0LnJvdz09dGhpcy5lbmQucm93KXRoaXMuZm9sZHMucHVzaChhKSx0aGlzLmVuZC5yb3c9YS5lbmQucm93LHRoaXMuZW5kLmNvbHVtbj1hLmVuZC5jb2x1bW47ZWxzZSBpZihhLmVuZC5yb3c9PXRoaXMuc3RhcnQucm93KXRoaXMuZm9sZHMudW5zaGlmdChhKSx0aGlzLnN0YXJ0LnJvdz1hLnN0YXJ0LnJvdyx0aGlzLnN0YXJ0LmNvbHVtbj1hLnN0YXJ0LmNvbHVtbjtlbHNlIHRocm93IlRyeWluZyB0byBhZGQgZm9sZCB0byBGb2xkUm93IHRoYXQgZG9lc24ndCBoYXZlIGEgbWF0Y2hpbmcgcm93IjthLmZvbGRMaW5lPXRoaXN9LHRoaXMuY29udGFpbnNSb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXRoaXMuc3RhcnQucm93JiZhPD10aGlzLmVuZC5yb3d9LHRoaXMud2Fsaz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MCxlPXRoaXMuZm9sZHMsZixnLGgsaT0hMDtiPT1udWxsJiYoYj10aGlzLmVuZC5yb3csYz10aGlzLmVuZC5jb2x1bW4pO2Zvcih2YXIgaj0wO2o8ZS5sZW5ndGg7aisrKXtmPWVbal0sZz1mLnJhbmdlLmNvbXBhcmVTdGFydChiLGMpO2lmKGc9PS0xKXthKG51bGwsYixjLGQsaSk7cmV0dXJufWg9YShudWxsLGYuc3RhcnQucm93LGYuc3RhcnQuY29sdW1uLGQsaSksaD0haCYmYShmLnBsYWNlaG9sZGVyLGYuc3RhcnQucm93LGYuc3RhcnQuY29sdW1uLGQpO2lmKGh8fGc9PTApcmV0dXJuO2k9IWYuc2FtZVJvdyxkPWYuZW5kLmNvbHVtbn1hKG51bGwsYixjLGQsaSl9LHRoaXMuZ2V0TmV4dEZvbGRUbz1mdW5jdGlvbihhLGIpe3ZhciBjLGQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmZvbGRzLmxlbmd0aDtlKyspe2M9dGhpcy5mb2xkc1tlXSxkPWMucmFuZ2UuY29tcGFyZUVuZChhLGIpO2lmKGQ9PS0xKXJldHVybntmb2xkOmMsa2luZDoiYWZ0ZXIifTtpZihkPT0wKXJldHVybntmb2xkOmMsa2luZDoiaW5zaWRlIn19cmV0dXJuIG51bGx9LHRoaXMuYWRkUmVtb3ZlQ2hhcnM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZ2V0TmV4dEZvbGRUbyhhLGIpLGUsZjtpZihkKXtlPWQuZm9sZDtpZihkLmtpbmQ9PSJpbnNpZGUiJiZlLnN0YXJ0LmNvbHVtbiE9YiYmZS5zdGFydC5yb3chPWEpdGhyb3ciTW92aW5nIGNoYXJhY3RlcnMgaW5zaWRlIG9mIGEgZm9sZCBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZCI7aWYoZS5zdGFydC5yb3c9PWEpe2Y9dGhpcy5mb2xkczt2YXIgZz1mLmluZGV4T2YoZSk7Zz09MCYmKHRoaXMuc3RhcnQuY29sdW1uKz1jKTtmb3IoZztnPGYubGVuZ3RoO2crKyl7ZT1mW2ddLGUuc3RhcnQuY29sdW1uKz1jO2lmKCFlLnNhbWVSb3cpcmV0dXJuO2UuZW5kLmNvbHVtbis9Y310aGlzLmVuZC5jb2x1bW4rPWN9fX0sdGhpcy5zcGxpdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0TmV4dEZvbGRUbyhhLGIpLmZvbGQsZD10aGlzLmZvbGRzLGY9dGhpcy5mb2xkRGF0YTtpZighYylyZXR1cm4gbnVsbDt2YXIgZz1kLmluZGV4T2YoYyksaD1kW2ctMV07dGhpcy5lbmQucm93PWguZW5kLnJvdyx0aGlzLmVuZC5jb2x1bW49aC5lbmQuY29sdW1uLGQ9ZC5zcGxpY2UoZyxkLmxlbmd0aC1nKTt2YXIgaT1uZXcgZShmLGQpO3JldHVybiBmLnNwbGljZShmLmluZGV4T2YodGhpcykrMSwwLGkpLGl9LHRoaXMubWVyZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5mb2xkcztmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLmFkZEZvbGQoYltjXSk7dmFyIGQ9dGhpcy5mb2xkRGF0YTtkLnNwbGljZShkLmluZGV4T2YoYSksMSl9LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT1bdGhpcy5yYW5nZS50b1N0cmluZygpKyI6IFsiXTtyZXR1cm4gdGhpcy5mb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EucHVzaCgiICAiK2IudG9TdHJpbmcoKSl9KSxhLnB1c2goIl0iKSxhLmpvaW4oIlxuIil9LHRoaXMuaWR4VG9Qb3NpdGlvbj1mdW5jdGlvbihhKXt2YXIgYj0wLGM7Zm9yKHZhciBkPTA7ZDx0aGlzLmZvbGRzLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuZm9sZHNbZF07YS09Yy5zdGFydC5jb2x1bW4tYjtpZihhPDApcmV0dXJue3JvdzpjLnN0YXJ0LnJvdyxjb2x1bW46Yy5zdGFydC5jb2x1bW4rYX07YS09Yy5wbGFjZWhvbGRlci5sZW5ndGg7aWYoYTwwKXJldHVybiBjLnN0YXJ0O2I9Yy5lbmQuY29sdW1ufXJldHVybntyb3c6dGhpcy5lbmQucm93LGNvbHVtbjp0aGlzLmVuZC5jb2x1bW4rYX19fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuRm9sZExpbmU9ZX0pLGFjZS5kZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vZm9sZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9Yi5Gb2xkPWZ1bmN0aW9uKGEsYil7dGhpcy5mb2xkTGluZT1udWxsLHRoaXMucGxhY2Vob2xkZXI9Yix0aGlzLnJhbmdlPWEsdGhpcy5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kPWEuZW5kLHRoaXMuc2FtZVJvdz1hLnN0YXJ0LnJvdz09YS5lbmQucm93LHRoaXMuc3ViRm9sZHM9W119OygoZnVuY3Rpb24oKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuJyInK3RoaXMucGxhY2Vob2xkZXIrJyIgJyt0aGlzLnJhbmdlLnRvU3RyaW5nKCl9LHRoaXMuc2V0Rm9sZExpbmU9ZnVuY3Rpb24oYSl7dGhpcy5mb2xkTGluZT1hLHRoaXMuc3ViRm9sZHMuZm9yRWFjaChmdW5jdGlvbihiKXtiLnNldEZvbGRMaW5lKGEpfSl9LHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJhbmdlLmNsb25lKCksYj1uZXcgZChhLHRoaXMucGxhY2Vob2xkZXIpO3JldHVybiB0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oYSl7Yi5zdWJGb2xkcy5wdXNoKGEuY2xvbmUoKSl9KSxifSx0aGlzLmFkZFN1YkZvbGQ9ZnVuY3Rpb24oYSl7aWYodGhpcy5yYW5nZS5pc0VlcXVhbChhKSlyZXR1cm4gdGhpcztpZighdGhpcy5yYW5nZS5jb250YWluc1JhbmdlKGEpKXRocm93IkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkIithLnJhbmdlK3RoaXMucmFuZ2U7dmFyIGI9YS5yYW5nZS5zdGFydC5yb3csYz1hLnJhbmdlLnN0YXJ0LmNvbHVtbjtmb3IodmFyIGQ9MCxlPS0xO2Q8dGhpcy5zdWJGb2xkcy5sZW5ndGg7ZCsrKXtlPXRoaXMuc3ViRm9sZHNbZF0ucmFuZ2UuY29tcGFyZShiLGMpO2lmKGUhPTEpYnJlYWt9dmFyIGY9dGhpcy5zdWJGb2xkc1tkXTtpZihlPT0wKXJldHVybiBmLmFkZFN1YkZvbGQoYSk7dmFyIGI9YS5yYW5nZS5lbmQucm93LGM9YS5yYW5nZS5lbmQuY29sdW1uO2Zvcih2YXIgZz1kLGU9LTE7Zzx0aGlzLnN1YkZvbGRzLmxlbmd0aDtnKyspe2U9dGhpcy5zdWJGb2xkc1tnXS5yYW5nZS5jb21wYXJlKGIsYyk7aWYoZSE9MSlicmVha312YXIgaD10aGlzLnN1YkZvbGRzW2ddO2lmKGU9PTApdGhyb3ciQSBmb2xkIGNhbid0IGludGVyc2VjdCBhbHJlYWR5IGV4aXN0aW5nIGZvbGQiK2EucmFuZ2UrdGhpcy5yYW5nZTt2YXIgaT10aGlzLnN1YkZvbGRzLnNwbGljZShkLGctZCxhKTtyZXR1cm4gYS5zZXRGb2xkTGluZSh0aGlzLmZvbGRMaW5lKSxhfX0pKS5jYWxsKGQucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS90b2tlbl9pdGVyYXRvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJHNlc3Npb249YSx0aGlzLiRyb3c9Yix0aGlzLiRyb3dUb2tlbnM9YS5nZXRUb2tlbnMoYixiKVswXS50b2tlbnM7dmFyIGQ9YS5nZXRUb2tlbkF0KGIsYyk7dGhpcy4kdG9rZW5JbmRleD1kP2QuaW5kZXg6LTF9OygoZnVuY3Rpb24oKXt0aGlzLnN0ZXBCYWNrd2FyZD1mdW5jdGlvbigpe3RoaXMuJHRva2VuSW5kZXgtPTE7d2hpbGUodGhpcy4kdG9rZW5JbmRleDwwKXt0aGlzLiRyb3ctPTE7aWYodGhpcy4kcm93PDApcmV0dXJuIHRoaXMuJHJvdz0wLG51bGw7dGhpcy4kcm93VG9rZW5zPXRoaXMuJHNlc3Npb24uZ2V0VG9rZW5zKHRoaXMuJHJvdyx0aGlzLiRyb3cpWzBdLnRva2Vucyx0aGlzLiR0b2tlbkluZGV4PXRoaXMuJHJvd1Rva2Vucy5sZW5ndGgtMX1yZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdfSx0aGlzLnN0ZXBGb3J3YXJkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kc2Vzc2lvbi5nZXRMZW5ndGgoKTt0aGlzLiR0b2tlbkluZGV4Kz0xO3doaWxlKHRoaXMuJHRva2VuSW5kZXg+PXRoaXMuJHJvd1Rva2Vucy5sZW5ndGgpe3RoaXMuJHJvdys9MTtpZih0aGlzLiRyb3c+PWEpcmV0dXJuIHRoaXMuJHJvdz1hLTEsbnVsbDt0aGlzLiRyb3dUb2tlbnM9dGhpcy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93LHRoaXMuJHJvdylbMF0udG9rZW5zLHRoaXMuJHRva2VuSW5kZXg9MH1yZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdfSx0aGlzLmdldEN1cnJlbnRUb2tlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF19LHRoaXMuZ2V0Q3VycmVudFRva2VuUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJvd30sdGhpcy5nZXRDdXJyZW50VG9rZW5Db2x1bW49ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRyb3dUb2tlbnMsYj10aGlzLiR0b2tlbkluZGV4LGM9YVtiXS5zdGFydDtpZihjIT09dW5kZWZpbmVkKXJldHVybiBjO2M9MDt3aGlsZShiPjApYi09MSxjKz1hW2JdLnZhbHVlLmxlbmd0aDtyZXR1cm4gY319KSkuY2FsbChkLnByb3RvdHlwZSksYi5Ub2tlbkl0ZXJhdG9yPWR9KSxhY2UuZGVmaW5lKCJhY2UvZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZSgpe3RoaXMuZmluZE1hdGNoaW5nQnJhY2tldD1mdW5jdGlvbihhKXtpZihhLmNvbHVtbj09MClyZXR1cm4gbnVsbDt2YXIgYj10aGlzLmdldExpbmUoYS5yb3cpLmNoYXJBdChhLmNvbHVtbi0xKTtpZihiPT0iIilyZXR1cm4gbnVsbDt2YXIgYz1iLm1hdGNoKC8oW1woXFtce10pfChbXClcXVx9XSkvKTtyZXR1cm4gYz9jWzFdP3RoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChjWzFdLGEpOnRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldChjWzJdLGEpOm51bGx9LHRoaXMuJGJyYWNrZXRzPXsiKSI6IigiLCIoIjoiKSIsIl0iOiJbIiwiWyI6Il0iLCJ7IjoifSIsIn0iOiJ7In0sdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy4kYnJhY2tldHNbYV0sZT0xLGY9bmV3IGQodGhpcyxiLnJvdyxiLmNvbHVtbiksZz1mLmdldEN1cnJlbnRUb2tlbigpO2lmKCFnKXJldHVybiBudWxsO3ZhciBoPW5ldyBSZWdFeHAoIihcXC4/IitnLnR5cGUucmVwbGFjZSgiLiIsInwiKS5yZXBsYWNlKCJycGFyZW4iLCJscGFyZW58cnBhcmVuIikrIikrIiksaT1iLmNvbHVtbi1mLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpLTIsaj1nLnZhbHVlO2Zvcig7Oyl7d2hpbGUoaT49MCl7dmFyIGs9ai5jaGFyQXQoaSk7aWYoaz09Yyl7ZS09MTtpZihlPT0wKXJldHVybntyb3c6Zi5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46aStmLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfX1lbHNlIGs9PWEmJihlKz0xKTtpLT0xfWRvIGc9Zi5zdGVwQmFja3dhcmQoKTt3aGlsZShnJiYhaC50ZXN0KGcudHlwZSkpO2lmKGc9PW51bGwpYnJlYWs7aj1nLnZhbHVlLGk9ai5sZW5ndGgtMX1yZXR1cm4gbnVsbH0sdGhpcy4kZmluZENsb3NpbmdCcmFja2V0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy4kYnJhY2tldHNbYV0sZT0xLGY9bmV3IGQodGhpcyxiLnJvdyxiLmNvbHVtbiksZz1mLmdldEN1cnJlbnRUb2tlbigpO2lmKCFnKXJldHVybiBudWxsO3ZhciBoPW5ldyBSZWdFeHAoIihcXC4/IitnLnR5cGUucmVwbGFjZSgiLiIsInwiKS5yZXBsYWNlKCJscGFyZW4iLCJscGFyZW58cnBhcmVuIikrIikrIiksaT1iLmNvbHVtbi1mLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpO2Zvcig7Oyl7dmFyIGo9Zy52YWx1ZSxrPWoubGVuZ3RoO3doaWxlKGk8ayl7dmFyIGw9ai5jaGFyQXQoaSk7aWYobD09Yyl7ZS09MTtpZihlPT0wKXJldHVybntyb3c6Zi5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46aStmLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfX1lbHNlIGw9PWEmJihlKz0xKTtpKz0xfWRvIGc9Zi5zdGVwRm9yd2FyZCgpO3doaWxlKGcmJiFoLnRlc3QoZy50eXBlKSk7aWYoZz09bnVsbClicmVhaztpPTB9cmV0dXJuIG51bGx9fSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Yi5CcmFja2V0TWF0Y2g9ZX0pLGFjZS5kZWZpbmUoImFjZS9zZWFyY2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi9saWIvbGFuZyIpLGU9YSgiLi9saWIvb29wIiksZj1hKCIuL3JhbmdlIikuUmFuZ2UsZz1mdW5jdGlvbigpe3RoaXMuJG9wdGlvbnM9e25lZWRsZToiIixiYWNrd2FyZHM6ITEsd3JhcDohMSxjYXNlU2Vuc2l0aXZlOiExLHdob2xlV29yZDohMSxzY29wZTpnLkFMTCxyZWdFeHA6ITF9fTtnLkFMTD0xLGcuU0VMRUNUSU9OPTIsZnVuY3Rpb24oKXt0aGlzLnNldD1mdW5jdGlvbihhKXtyZXR1cm4gZS5taXhpbih0aGlzLiRvcHRpb25zLGEpLHRoaXN9LHRoaXMuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkLmNvcHlPYmplY3QodGhpcy4kb3B0aW9ucyl9LHRoaXMuZmluZD1mdW5jdGlvbihhKXtpZighdGhpcy4kb3B0aW9ucy5uZWVkbGUpcmV0dXJuIG51bGw7aWYodGhpcy4kb3B0aW9ucy5iYWNrd2FyZHMpdmFyIGI9dGhpcy4kYmFja3dhcmRNYXRjaEl0ZXJhdG9yKGEpO2Vsc2UgYj10aGlzLiRmb3J3YXJkTWF0Y2hJdGVyYXRvcihhKTt2YXIgYz1udWxsO3JldHVybiBiLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGM9YSwhMH0pLGN9LHRoaXMuZmluZEFsbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLiRvcHRpb25zO2lmKCFiLm5lZWRsZSlyZXR1cm5bXTtpZihiLmJhY2t3YXJkcyl2YXIgYz10aGlzLiRiYWNrd2FyZE1hdGNoSXRlcmF0b3IoYSk7ZWxzZSBjPXRoaXMuJGZvcndhcmRNYXRjaEl0ZXJhdG9yKGEpO3ZhciBkPSFiLnN0YXJ0JiZiLndyYXAmJmIuc2NvcGU9PWcuQUxMO2QmJihiLnN0YXJ0PXtyb3c6MCxjb2x1bW46MH0pO3ZhciBlPVtdO3JldHVybiBjLmZvckVhY2goZnVuY3Rpb24oYSl7ZS5wdXNoKGEpfSksZCYmKGIuc3RhcnQ9bnVsbCksZX0sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy4kYXNzZW1ibGVSZWdFeHAoKSxkPWMuZXhlYyhhKTtyZXR1cm4gZCYmZFswXS5sZW5ndGg9PWEubGVuZ3RoP3RoaXMuJG9wdGlvbnMucmVnRXhwP2EucmVwbGFjZShjLGIpOmI6bnVsbH0sdGhpcy4kZm9yd2FyZE1hdGNoSXRlcmF0b3I9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kYXNzZW1ibGVSZWdFeHAoKSxjPXRoaXM7cmV0dXJue2ZvckVhY2g6ZnVuY3Rpb24oZCl7Yy4kZm9yd2FyZExpbmVJdGVyYXRvcihhKS5mb3JFYWNoKGZ1bmN0aW9uKGEsZSxmKXtlJiYoYT1hLnN1YnN0cmluZyhlKSk7dmFyIGc9W107YS5yZXBsYWNlKGIsZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl07cmV0dXJuIGcucHVzaCh7c3RyOmEsb2Zmc2V0OmUrYn0pLGF9KTtmb3IodmFyIGg9MDtoPGcubGVuZ3RoO2grKyl7dmFyIGk9Z1toXSxqPWMuJHJhbmdlRnJvbU1hdGNoKGYsaS5vZmZzZXQsaS5zdHIubGVuZ3RoKTtpZihkKGopKXJldHVybiEwfX0pfX19LHRoaXMuJGJhY2t3YXJkTWF0Y2hJdGVyYXRvcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLiRhc3NlbWJsZVJlZ0V4cCgpLGM9dGhpcztyZXR1cm57Zm9yRWFjaDpmdW5jdGlvbihkKXtjLiRiYWNrd2FyZExpbmVJdGVyYXRvcihhKS5mb3JFYWNoKGZ1bmN0aW9uKGEsZSxmKXtlJiYoYT1hLnN1YnN0cmluZyhlKSk7dmFyIGc9W107YS5yZXBsYWNlKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gZy5wdXNoKHtzdHI6YSxvZmZzZXQ6ZStifSksYX0pO2Zvcih2YXIgaD1nLmxlbmd0aC0xO2g+PTA7aC0tKXt2YXIgaT1nW2hdLGo9Yy4kcmFuZ2VGcm9tTWF0Y2goZixpLm9mZnNldCxpLnN0ci5sZW5ndGgpO2lmKGQoaikpcmV0dXJuITB9fSl9fX0sdGhpcy4kcmFuZ2VGcm9tTWF0Y2g9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuZXcgZihhLGIsYSxiK2MpfSx0aGlzLiRhc3NlbWJsZVJlZ0V4cD1mdW5jdGlvbigpe2lmKHRoaXMuJG9wdGlvbnMucmVnRXhwKXZhciBhPXRoaXMuJG9wdGlvbnMubmVlZGxlO2Vsc2UgYT1kLmVzY2FwZVJlZ0V4cCh0aGlzLiRvcHRpb25zLm5lZWRsZSk7dGhpcy4kb3B0aW9ucy53aG9sZVdvcmQmJihhPSJcXGIiK2ErIlxcYiIpO3ZhciBiPSJnIjt0aGlzLiRvcHRpb25zLmNhc2VTZW5zaXRpdmV8fChiKz0iaSIpO3ZhciBjPW5ldyBSZWdFeHAoYSxiKTtyZXR1cm4gY30sdGhpcy4kZm9yd2FyZExpbmVJdGVyYXRvcj1mdW5jdGlvbihhKXtmdW5jdGlvbiBrKGUpe3ZhciBmPWEuZ2V0TGluZShlKTtyZXR1cm4gYiYmZT09Yy5lbmQucm93JiYoZj1mLnN1YnN0cmluZygwLGMuZW5kLmNvbHVtbikpLGomJmU9PWQucm93JiYoZj1mLnN1YnN0cmluZygwLGQuY29sdW1uKSksZn12YXIgYj10aGlzLiRvcHRpb25zLnNjb3BlPT1nLlNFTEVDVElPTixjPXRoaXMuJG9wdGlvbnMucmFuZ2V8fGEuZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2UoKSxkPXRoaXMuJG9wdGlvbnMuc3RhcnR8fGNbYj8ic3RhcnQiOiJlbmQiXSxlPWI/Yy5zdGFydC5yb3c6MCxmPWI/Yy5zdGFydC5jb2x1bW46MCxoPWI/Yy5lbmQucm93OmEuZ2V0TGVuZ3RoKCktMSxpPXRoaXMuJG9wdGlvbnMud3JhcCxqPSExO3JldHVybntmb3JFYWNoOmZ1bmN0aW9uKGEpe3ZhciBiPWQucm93LGM9ayhiKSxnPWQuY29sdW1uLGw9ITE7aj0hMTt3aGlsZSghYShjLGcsYikpe2lmKGwpcmV0dXJuO2IrKyxnPTA7aWYoYj5oKWlmKGkpYj1lLGc9ZixqPSEwO2Vsc2UgcmV0dXJuO2I9PWQucm93JiYobD0hMCksYz1rKGIpfX19fSx0aGlzLiRiYWNrd2FyZExpbmVJdGVyYXRvcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLiRvcHRpb25zLnNjb3BlPT1nLlNFTEVDVElPTixjPXRoaXMuJG9wdGlvbnMucmFuZ2V8fGEuZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2UoKSxkPXRoaXMuJG9wdGlvbnMuc3RhcnR8fGNbYj8iZW5kIjoic3RhcnQiXSxlPWI/Yy5zdGFydC5yb3c6MCxmPWI/Yy5zdGFydC5jb2x1bW46MCxoPWI/Yy5lbmQucm93OmEuZ2V0TGVuZ3RoKCktMSxpPXRoaXMuJG9wdGlvbnMud3JhcDtyZXR1cm57Zm9yRWFjaDpmdW5jdGlvbihnKXt2YXIgaj1kLnJvdyxrPWEuZ2V0TGluZShqKS5zdWJzdHJpbmcoMCxkLmNvbHVtbiksbD0wLG09ITEsbj0hMTt3aGlsZSghZyhrLGwsaikpe2lmKG0pcmV0dXJuO2otLSxsPTA7aWYoajxlKWlmKGkpaj1oLG49ITA7ZWxzZSByZXR1cm47aj09ZC5yb3cmJihtPSEwKSxrPWEuZ2V0TGluZShqKSxiJiYoaj09ZT9sPWY6aj09aCYmKGs9ay5zdWJzdHJpbmcoMCxjLmVuZC5jb2x1bW4pKSksbiYmaj09ZC5yb3cmJihsPWQuY29sdW1uKX19fX19LmNhbGwoZy5wcm90b3R5cGUpLGIuU2VhcmNoPWd9KSxhY2UuZGVmaW5lKCJhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIva2V5cyIpLGU9ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BsYXRmb3JtJyBhcmd1bWVudCBtdXN0IGJlIGVpdGhlciAnbWFjJyBvciAnd2luJyIpO3RoaXMucGxhdGZvcm09YSx0aGlzLmNvbW1hbmRzPXt9LHRoaXMuY29tbW1hbmRLZXlCaW5kaW5nPXt9LGImJmIuZm9yRWFjaCh0aGlzLmFkZENvbW1hbmQsdGhpcyl9OygoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYyxlKXt2YXIgZixnPTAsaD1iKGEpO2Zvcih2YXIgaT0wLGo9aC5sZW5ndGg7aTxqO2krKylkLktFWV9NT0RTW2hbaV1dP2d8PWQuS0VZX01PRFNbaFtpXV06Zj1oW2ldfHwiLSI7cmV0dXJue2tleTpmLGhhc2hJZDpnfX1mdW5jdGlvbiBiKGEsYil7cmV0dXJuIGEudG9Mb3dlckNhc2UoKS50cmltKCkuc3BsaXQobmV3IFJlZ0V4cCgiW1xccyBdKlxcLVtcXHMgXSoiLCJnIiksOTk5KX10aGlzLmFkZENvbW1hbmQ9ZnVuY3Rpb24oYSl7dGhpcy5jb21tYW5kc1thLm5hbWVdJiZ0aGlzLnJlbW92ZUNvbW1hbmQoYSksdGhpcy5jb21tYW5kc1thLm5hbWVdPWEsYS5iaW5kS2V5JiZ0aGlzLl9idWlsZEtleUhhc2goYSl9LHRoaXMucmVtb3ZlQ29tbWFuZD1mdW5jdGlvbihhKXt2YXIgYj10eXBlb2YgYT09InN0cmluZyI/YTphLm5hbWU7YT10aGlzLmNvbW1hbmRzW2JdLGRlbGV0ZSB0aGlzLmNvbW1hbmRzW2JdO3ZhciBjPXRoaXMuY29tbW1hbmRLZXlCaW5kaW5nO2Zvcih2YXIgZCBpbiBjKWZvcih2YXIgZSBpbiBjW2RdKWNbZF1bZV09PWEmJmRlbGV0ZSBjW2RdW2VdfSx0aGlzLmFkZENvbW1hbmRzPWZ1bmN0aW9uKGEpe09iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGM9YVtiXTtpZih0eXBlb2YgYz09InN0cmluZyIpcmV0dXJuIHRoaXMuYmluZEtleShjLGIpO3R5cGVvZiBjPT0iZnVuY3Rpb24iJiYoYz17ZXhlYzpjfSksYy5uYW1lfHwoYy5uYW1lPWIpLHRoaXMuYWRkQ29tbWFuZChjKX0sdGhpcyl9LHRoaXMucmVtb3ZlQ29tbWFuZHM9ZnVuY3Rpb24oYSl7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihiKXt0aGlzLnJlbW92ZUNvbW1hbmQoYVtiXSl9LHRoaXMpfSx0aGlzLmJpbmRLZXk9ZnVuY3Rpb24oYixjKXtpZighYilyZXR1cm47dmFyIGQ9dGhpcy5jb21tbWFuZEtleUJpbmRpbmc7Yi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGU9YShiLGMpLGY9ZS5oYXNoSWQ7KGRbZl18fChkW2ZdPXt9KSlbZS5rZXldPWN9KX0sdGhpcy5iaW5kS2V5cz1mdW5jdGlvbihhKXtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3RoaXMuYmluZEtleShiLGFbYl0pfSx0aGlzKX0sdGhpcy5fYnVpbGRLZXlIYXNoPWZ1bmN0aW9uKGEpe3ZhciBiPWEuYmluZEtleTtpZighYilyZXR1cm47dmFyIGM9dHlwZW9mIGI9PSJzdHJpbmciP2I6Ylt0aGlzLnBsYXRmb3JtXTt0aGlzLmJpbmRLZXkoYyxhKX0sdGhpcy5maW5kS2V5Q29tbWFuZD1mdW5jdGlvbiBjKGEsYil7dHlwZW9mIGI9PSJudW1iZXIiJiYoYj1kLmtleUNvZGVUb1N0cmluZyhiKSk7dmFyIGM9dGhpcy5jb21tbWFuZEtleUJpbmRpbmc7cmV0dXJuIGNbYV0mJmNbYV1bYi50b0xvd2VyQ2FzZSgpXX0sdGhpcy5leGVjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmciJiYoYT10aGlzLmNvbW1hbmRzW2FdKSxhP2ImJmIuJHJlYWRPbmx5JiYhYS5yZWFkT25seT8hMTooYS5leGVjKGIsY3x8e30pLCEwKTohMX0sdGhpcy50b2dnbGVSZWNvcmRpbmc9ZnVuY3Rpb24oKXtpZih0aGlzLiRpblJlcGxheSlyZXR1cm47cmV0dXJuIHRoaXMucmVjb3JkaW5nPyh0aGlzLm1hY3JvLnBvcCgpLHRoaXMuZXhlYz10aGlzLm5vcm1hbF9leGVjLHRoaXMubWFjcm8ubGVuZ3RofHwodGhpcy5tYWNybz10aGlzLm9sZE1hY3JvKSx0aGlzLnJlY29yZGluZz0hMSk6KHRoaXMub2xkTWFjcm89dGhpcy5tYWNybyx0aGlzLm1hY3JvPVtdLHRoaXMubm9ybWFsX2V4ZWM9dGhpcy5leGVjLHRoaXMuZXhlYz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubWFjcm8ucHVzaChbYSxjXSksdGhpcy5ub3JtYWxfZXhlYyhhLGIsYyl9LHRoaXMucmVjb3JkaW5nPSEwKX0sdGhpcy5yZXBsYXk9ZnVuY3Rpb24oYSl7aWYodGhpcy4kaW5SZXBsYXl8fCF0aGlzLm1hY3JvKXJldHVybjtpZih0aGlzLnJlY29yZGluZylyZXR1cm4gdGhpcy50b2dnbGVSZWNvcmRpbmcoKTt0cnl7dGhpcy4kaW5SZXBsYXk9ITAsdGhpcy5tYWNyby5mb3JFYWNoKGZ1bmN0aW9uKGIpe3R5cGVvZiBiPT0ic3RyaW5nIj90aGlzLmV4ZWMoYixhKTp0aGlzLmV4ZWMoYlswXSxhLGJbMV0pfSx0aGlzKX1maW5hbGx5e3RoaXMuJGluUmVwbGF5PSExfX0sdGhpcy50cmltTWFjcm89ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYVswXSE9InN0cmluZyImJihhWzBdPWFbMF0ubmFtZSksYVsxXXx8KGE9YVswXSksYX0pfX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLkNvbW1hbmRNYW5hZ2VyPWV9KSxhY2UuZGVmaW5lKCJhY2UvdW5kb21hbmFnZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfTsoKGZ1bmN0aW9uKCl7dGhpcy5leGVjdXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuYXJnc1swXTt0aGlzLiRkb2M9YS5hcmdzWzFdLHRoaXMuJHVuZG9TdGFjay5wdXNoKGIpLHRoaXMuJHJlZG9TdGFjaz1bXX0sdGhpcy51bmRvPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJHVuZG9TdGFjay5wb3AoKSxjPW51bGw7cmV0dXJuIGImJihjPXRoaXMuJGRvYy51bmRvQ2hhbmdlcyhiLGEpLHRoaXMuJHJlZG9TdGFjay5wdXNoKGIpKSxjfSx0aGlzLnJlZG89ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kcmVkb1N0YWNrLnBvcCgpLGM9bnVsbDtyZXR1cm4gYiYmKGM9dGhpcy4kZG9jLnJlZG9DaGFuZ2VzKGIsYSksdGhpcy4kdW5kb1N0YWNrLnB1c2goYikpLGN9LHRoaXMucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLiR1bmRvU3RhY2s9W10sdGhpcy4kcmVkb1N0YWNrPVtdfSx0aGlzLmhhc1VuZG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdW5kb1N0YWNrLmxlbmd0aD4wfSx0aGlzLmhhc1JlZG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVkb1N0YWNrLmxlbmd0aD4wfX0pKS5jYWxsKGQucHJvdG90eXBlKSxiLlVuZG9NYW5hZ2VyPWR9KSxhY2UuZGVmaW5lKCJhY2UvdmlydHVhbF9yZW5kZXJlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbGF5ZXIvZ3V0dGVyIiwiYWNlL2xheWVyL21hcmtlciIsImFjZS9sYXllci90ZXh0IiwiYWNlL2xheWVyL2N1cnNvciIsImFjZS9zY3JvbGxiYXIiLCJhY2UvcmVuZGVybG9vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsInRleHQhYWNlL2Nzcy9lZGl0b3IuY3NzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2xpYi9vb3AiKSxlPWEoIi4vbGliL2RvbSIpLGY9YSgiLi9saWIvZXZlbnQiKSxnPWEoIi4vbGliL3VzZXJhZ2VudCIpLGg9YSgiLi9sYXllci9ndXR0ZXIiKS5HdXR0ZXIsaT1hKCIuL2xheWVyL21hcmtlciIpLk1hcmtlcixqPWEoIi4vbGF5ZXIvdGV4dCIpLlRleHQsaz1hKCIuL2xheWVyL2N1cnNvciIpLkN1cnNvcixsPWEoIi4vc2Nyb2xsYmFyIikuU2Nyb2xsQmFyLG09YSgiLi9yZW5kZXJsb29wIikuUmVuZGVyTG9vcCxuPWEoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsbz1hKCJ0ZXh0IS4vY3NzL2VkaXRvci5jc3MiKTtlLmltcG9ydENzc1N0cmluZyhvLCJhY2VfZWRpdG9yIik7dmFyIHA9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMuY29udGFpbmVyPWEsZS5hZGRDc3NDbGFzcyhhLCJhY2VfZWRpdG9yIiksdGhpcy5zZXRUaGVtZShiKSx0aGlzLiRndXR0ZXI9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLiRndXR0ZXIuY2xhc3NOYW1lPSJhY2VfZ3V0dGVyIix0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLiRndXR0ZXIpLHRoaXMuc2Nyb2xsZXI9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNjcm9sbGVyLmNsYXNzTmFtZT0iYWNlX3Njcm9sbGVyIix0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGVyKSx0aGlzLmNvbnRlbnQ9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbnRlbnQuY2xhc3NOYW1lPSJhY2VfY29udGVudCIsdGhpcy5zY3JvbGxlci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpLHRoaXMuJGd1dHRlckxheWVyPW5ldyBoKHRoaXMuJGd1dHRlciksdGhpcy4kZ3V0dGVyTGF5ZXIub24oImNoYW5nZUd1dHRlcldpZHRoIix0aGlzLm9uUmVzaXplLmJpbmQodGhpcywhMCkpLHRoaXMuJG1hcmtlckJhY2s9bmV3IGkodGhpcy5jb250ZW50KTt2YXIgZD10aGlzLiR0ZXh0TGF5ZXI9bmV3IGoodGhpcy5jb250ZW50KTt0aGlzLmNhbnZhcz1kLmVsZW1lbnQsdGhpcy4kbWFya2VyRnJvbnQ9bmV3IGkodGhpcy5jb250ZW50KSx0aGlzLmNoYXJhY3RlcldpZHRoPWQuZ2V0Q2hhcmFjdGVyV2lkdGgoKSx0aGlzLmxpbmVIZWlnaHQ9ZC5nZXRMaW5lSGVpZ2h0KCksdGhpcy4kY3Vyc29yTGF5ZXI9bmV3IGsodGhpcy5jb250ZW50KSx0aGlzLiRjdXJzb3JQYWRkaW5nPTgsdGhpcy4kaG9yaXpTY3JvbGw9ITAsdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlPSEwLHRoaXMuc2Nyb2xsQmFyPW5ldyBsKGEpLHRoaXMuc2Nyb2xsQmFyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZnVuY3Rpb24oYSl7Yy5zZXNzaW9uLnNldFNjcm9sbFRvcChhLmRhdGEpfSksdGhpcy5zY3JvbGxUb3A9MCx0aGlzLnNjcm9sbExlZnQ9MCxmLmFkZExpc3RlbmVyKHRoaXMuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtjLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChjLnNjcm9sbGVyLnNjcm9sbExlZnQpfSksdGhpcy5jdXJzb3JQb3M9e3JvdzowLGNvbHVtbjowfSx0aGlzLiR0ZXh0TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQ2hhcmFjdGVyU2l6ZSIsZnVuY3Rpb24oKXtjLmNoYXJhY3RlcldpZHRoPWQuZ2V0Q2hhcmFjdGVyV2lkdGgoKSxjLmxpbmVIZWlnaHQ9ZC5nZXRMaW5lSGVpZ2h0KCksYy4kdXBkYXRlUHJpbnRNYXJnaW4oKSxjLm9uUmVzaXplKCEwKSxjLiRsb29wLnNjaGVkdWxlKGMuQ0hBTkdFX0ZVTEwpfSksdGhpcy4kc2l6ZT17d2lkdGg6MCxoZWlnaHQ6MCxzY3JvbGxlckhlaWdodDowLHNjcm9sbGVyV2lkdGg6MH0sdGhpcy5sYXllckNvbmZpZz17d2lkdGg6MSxwYWRkaW5nOjAsZmlyc3RSb3c6MCxmaXJzdFJvd1NjcmVlbjowLGxhc3RSb3c6MCxsaW5lSGVpZ2h0OjEsY2hhcmFjdGVyV2lkdGg6MSxtaW5IZWlnaHQ6MSxtYXhIZWlnaHQ6MSxvZmZzZXQ6MCxoZWlnaHQ6MX0sdGhpcy4kbG9vcD1uZXcgbSh0aGlzLiRyZW5kZXJDaGFuZ2VzLmJpbmQodGhpcyksdGhpcy5jb250YWluZXIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKSx0aGlzLnNldFBhZGRpbmcoNCksdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKX07KChmdW5jdGlvbigpe3RoaXMuc2hvd0d1dHRlcj0hMCx0aGlzLkNIQU5HRV9DVVJTT1I9MSx0aGlzLkNIQU5HRV9NQVJLRVI9Mix0aGlzLkNIQU5HRV9HVVRURVI9NCx0aGlzLkNIQU5HRV9TQ1JPTEw9OCx0aGlzLkNIQU5HRV9MSU5FUz0xNix0aGlzLkNIQU5HRV9URVhUPTMyLHRoaXMuQ0hBTkdFX1NJWkU9NjQsdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0s9MTI4LHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVD0yNTYsdGhpcy5DSEFOR0VfRlVMTD01MTIsdGhpcy5DSEFOR0VfSF9TQ1JPTEw9MTAyNCxkLmltcGxlbWVudCh0aGlzLG4pLHRoaXMuc2V0U2Vzc2lvbj1mdW5jdGlvbihhKXt0aGlzLnNlc3Npb249YSx0aGlzLiRjdXJzb3JMYXllci5zZXRTZXNzaW9uKGEpLHRoaXMuJG1hcmtlckJhY2suc2V0U2Vzc2lvbihhKSx0aGlzLiRtYXJrZXJGcm9udC5zZXRTZXNzaW9uKGEpLHRoaXMuJGd1dHRlckxheWVyLnNldFNlc3Npb24oYSksdGhpcy4kdGV4dExheWVyLnNldFNlc3Npb24oYSksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKX0sdGhpcy51cGRhdGVMaW5lcz1mdW5jdGlvbihhLGIpe2I9PT11bmRlZmluZWQmJihiPUluZmluaXR5KSx0aGlzLiRjaGFuZ2VkTGluZXM/KHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdz5hJiYodGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93PWEpLHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93PGImJih0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdz1iKSk6dGhpcy4kY2hhbmdlZExpbmVzPXtmaXJzdFJvdzphLGxhc3RSb3c6Yn0sdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9MSU5FUyl9LHRoaXMudXBkYXRlVGV4dD1mdW5jdGlvbigpe3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCl9LHRoaXMudXBkYXRlRnVsbD1mdW5jdGlvbigpe3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCl9LHRoaXMudXBkYXRlRm9udFNpemU9ZnVuY3Rpb24oKXt0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpfSx0aGlzLm9uUmVzaXplPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuQ0hBTkdFX1NJWkUsYz10aGlzLiRzaXplLGQ9ZS5nZXRJbm5lckhlaWdodCh0aGlzLmNvbnRhaW5lcik7aWYoYXx8Yy5oZWlnaHQhPWQpYy5oZWlnaHQ9ZCx0aGlzLnNjcm9sbGVyLnN0eWxlLmhlaWdodD1kKyJweCIsYy5zY3JvbGxlckhlaWdodD10aGlzLnNjcm9sbGVyLmNsaWVudEhlaWdodCx0aGlzLnNjcm9sbEJhci5zZXRIZWlnaHQoYy5zY3JvbGxlckhlaWdodCksdGhpcy5zZXNzaW9uJiYodGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0aGlzLmdldFNjcm9sbFRvcCgpKSxifD10aGlzLkNIQU5HRV9GVUxMKTt2YXIgZj1lLmdldElubmVyV2lkdGgodGhpcy5jb250YWluZXIpO2lmKGF8fGMud2lkdGghPWYpe2Mud2lkdGg9Zjt2YXIgZz10aGlzLnNob3dHdXR0ZXI/dGhpcy4kZ3V0dGVyLm9mZnNldFdpZHRoOjA7dGhpcy5zY3JvbGxlci5zdHlsZS5sZWZ0PWcrInB4IixjLnNjcm9sbGVyV2lkdGg9TWF0aC5tYXgoMCxmLWctdGhpcy5zY3JvbGxCYXIuZ2V0V2lkdGgoKSksdGhpcy5zY3JvbGxlci5zdHlsZS53aWR0aD1jLnNjcm9sbGVyV2lkdGgrInB4IjtpZih0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSYmdGhpcy5hZGp1c3RXcmFwTGltaXQoKXx8YSlifD10aGlzLkNIQU5HRV9GVUxMfXRoaXMuJGxvb3Auc2NoZWR1bGUoYil9LHRoaXMuYWRqdXN0V3JhcExpbWl0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoLXRoaXMuJHBhZGRpbmcqMixiPU1hdGguZmxvb3IoYS90aGlzLmNoYXJhY3RlcldpZHRoKTtyZXR1cm4gdGhpcy5zZXNzaW9uLmFkanVzdFdyYXBMaW1pdChiKX0sdGhpcy5zZXRTaG93SW52aXNpYmxlcz1mdW5jdGlvbihhKXt0aGlzLiR0ZXh0TGF5ZXIuc2V0U2hvd0ludmlzaWJsZXMoYSkmJnRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCl9LHRoaXMuZ2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGV4dExheWVyLnNob3dJbnZpc2libGVzfSx0aGlzLiRzaG93UHJpbnRNYXJnaW49ITAsdGhpcy5zZXRTaG93UHJpbnRNYXJnaW49ZnVuY3Rpb24oYSl7dGhpcy4kc2hvd1ByaW50TWFyZ2luPWEsdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKX0sdGhpcy5nZXRTaG93UHJpbnRNYXJnaW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2hvd1ByaW50TWFyZ2lufSx0aGlzLiRwcmludE1hcmdpbkNvbHVtbj04MCx0aGlzLnNldFByaW50TWFyZ2luQ29sdW1uPWZ1bmN0aW9uKGEpe3RoaXMuJHByaW50TWFyZ2luQ29sdW1uPWEsdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKX0sdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbn0sdGhpcy5nZXRTaG93R3V0dGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd0d1dHRlcn0sdGhpcy5zZXRTaG93R3V0dGVyPWZ1bmN0aW9uKGEpe2lmKHRoaXMuc2hvd0d1dHRlcj09PWEpcmV0dXJuO3RoaXMuJGd1dHRlci5zdHlsZS5kaXNwbGF5PWE/ImJsb2NrIjoibm9uZSIsdGhpcy5zaG93R3V0dGVyPWEsdGhpcy5vblJlc2l6ZSghMCl9LHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luPWZ1bmN0aW9uKCl7dmFyIGE7aWYoIXRoaXMuJHNob3dQcmludE1hcmdpbiYmIXRoaXMuJHByaW50TWFyZ2luRWwpcmV0dXJuO3RoaXMuJHByaW50TWFyZ2luRWx8fChhPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksYS5jbGFzc05hbWU9ImFjZV9wcmludF9tYXJnaW5fbGF5ZXIiLHRoaXMuJHByaW50TWFyZ2luRWw9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLiRwcmludE1hcmdpbkVsLmNsYXNzTmFtZT0iYWNlX3ByaW50X21hcmdpbiIsYS5hcHBlbmRDaGlsZCh0aGlzLiRwcmludE1hcmdpbkVsKSx0aGlzLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGEsdGhpcy4kdGV4dExheWVyLmVsZW1lbnQpKTt2YXIgYj10aGlzLiRwcmludE1hcmdpbkVsLnN0eWxlO2IubGVmdD10aGlzLmNoYXJhY3RlcldpZHRoKnRoaXMuJHByaW50TWFyZ2luQ29sdW1uK3RoaXMuJHBhZGRpbmcrInB4IixiLnZpc2liaWxpdHk9dGhpcy4kc2hvd1ByaW50TWFyZ2luPyJ2aXNpYmxlIjoiaGlkZGVuIn0sdGhpcy5nZXRDb250YWluZXJFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfSx0aGlzLmdldE1vdXNlRXZlbnRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50fSx0aGlzLmdldFRleHRBcmVhQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfSx0aGlzLm1vdmVUZXh0QXJlYVRvQ3Vyc29yPWZ1bmN0aW9uKGEpe2lmKGcuaXNJRSlyZXR1cm47aWYodGhpcy5sYXllckNvbmZpZy5sYXN0Um93PT09MClyZXR1cm47dmFyIGI9dGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbigpO2lmKCFiKXJldHVybjt2YXIgYz10aGlzLmNvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD10aGlzLmxheWVyQ29uZmlnLm9mZnNldDthLnN0eWxlLmxlZnQ9Yy5sZWZ0K2IubGVmdCsicHgiLGEuc3R5bGUudG9wPWMudG9wK2IudG9wLXRoaXMuc2Nyb2xsVG9wK2QrInB4In0sdGhpcy5nZXRGaXJzdFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvd30sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93Kyh0aGlzLmxheWVyQ29uZmlnLm9mZnNldD09PTA/MDoxKX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5mbG9vcigodGhpcy5sYXllckNvbmZpZy5oZWlnaHQrdGhpcy5sYXllckNvbmZpZy5vZmZzZXQpL3RoaXMubGF5ZXJDb25maWcubGluZUhlaWdodCk7cmV0dXJuIHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3ctMSthfSx0aGlzLmdldExhc3RWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJDb25maWcubGFzdFJvd30sdGhpcy4kcGFkZGluZz1udWxsLHRoaXMuc2V0UGFkZGluZz1mdW5jdGlvbihhKXt0aGlzLiRwYWRkaW5nPWEsdGhpcy4kdGV4dExheWVyLnNldFBhZGRpbmcoYSksdGhpcy4kY3Vyc29yTGF5ZXIuc2V0UGFkZGluZyhhKSx0aGlzLiRtYXJrZXJGcm9udC5zZXRQYWRkaW5nKGEpLHRoaXMuJG1hcmtlckJhY2suc2V0UGFkZGluZyhhKSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpLHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LHRoaXMuZ2V0SFNjcm9sbEJhckFsd2F5c1Zpc2libGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlfSx0aGlzLnNldEhTY3JvbGxCYXJBbHdheXNWaXNpYmxlPWZ1bmN0aW9uKGEpe3RoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZSE9YSYmKHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZT1hLCghdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlfHwhdGhpcy4kaG9yaXpTY3JvbGwpJiZ0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCkpfSx0aGlzLiR1cGRhdGVTY3JvbGxCYXI9ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEJhci5zZXRJbm5lckhlaWdodCh0aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodCksdGhpcy5zY3JvbGxCYXIuc2V0U2Nyb2xsVG9wKHRoaXMuc2Nyb2xsVG9wKX0sdGhpcy4kcmVuZGVyQ2hhbmdlcz1mdW5jdGlvbihhKXtpZighYXx8IXRoaXMuc2Vzc2lvbilyZXR1cm47KGEmdGhpcy5DSEFOR0VfRlVMTHx8YSZ0aGlzLkNIQU5HRV9TSVpFfHxhJnRoaXMuQ0hBTkdFX1RFWFR8fGEmdGhpcy5DSEFOR0VfTElORVN8fGEmdGhpcy5DSEFOR0VfU0NST0xMKSYmdGhpcy4kY29tcHV0ZUxheWVyQ29uZmlnKCk7aWYoYSZ0aGlzLkNIQU5HRV9GVUxMKXt0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuJG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSx0aGlzLiRjdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyksdGhpcy4kdXBkYXRlU2Nyb2xsQmFyKCk7cmV0dXJufWlmKGEmdGhpcy5DSEFOR0VfU0NST0xMKXthJnRoaXMuQ0hBTkdFX1RFWFR8fGEmdGhpcy5DSEFOR0VfTElORVM/dGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTp0aGlzLiR0ZXh0TGF5ZXIuc2Nyb2xsTGluZXModGhpcy5sYXllckNvbmZpZyksdGhpcy5zaG93R3V0dGVyJiZ0aGlzLiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyksdGhpcy4kbWFya2VyQmFjay51cGRhdGUodGhpcy5sYXllckNvbmZpZyksdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSx0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKTtyZXR1cm59YSZ0aGlzLkNIQU5HRV9URVhUPyh0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpKTphJnRoaXMuQ0hBTkdFX0xJTkVTPyh0aGlzLiR1cGRhdGVMaW5lcygpLHRoaXMuJHVwZGF0ZVNjcm9sbEJhcigpLHRoaXMuc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpKTphJnRoaXMuQ0hBTkdFX0dVVFRFUiYmdGhpcy5zaG93R3V0dGVyJiZ0aGlzLiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyksYSZ0aGlzLkNIQU5HRV9DVVJTT1ImJnRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSxhJih0aGlzLkNIQU5HRV9NQVJLRVJ8dGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UKSYmdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLGEmKHRoaXMuQ0hBTkdFX01BUktFUnx0aGlzLkNIQU5HRV9NQVJLRVJfQkFDSykmJnRoaXMuJG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLGEmdGhpcy5DSEFOR0VfU0laRSYmdGhpcy4kdXBkYXRlU2Nyb2xsQmFyKCksYSZ0aGlzLkNIQU5HRV9IX1NDUk9MTCYmKHRoaXMuc2Nyb2xsZXIuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQpfSx0aGlzLiRjb21wdXRlTGF5ZXJDb25maWc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlc3Npb24sYj10aGlzLnNjcm9sbFRvcCV0aGlzLmxpbmVIZWlnaHQsYz10aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0K3RoaXMubGluZUhlaWdodCxkPXRoaXMuJGdldExvbmdlc3RMaW5lKCksZT10aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGV8fHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aC1kPDAsZj10aGlzLiRob3JpelNjcm9sbCE9PWU7dGhpcy4kaG9yaXpTY3JvbGw9ZSxmJiYodGhpcy5zY3JvbGxlci5zdHlsZS5vdmVyZmxvd1g9ZT8ic2Nyb2xsIjoiaGlkZGVuIik7dmFyIGc9dGhpcy5zZXNzaW9uLmdldFNjcmVlbkxlbmd0aCgpKnRoaXMubGluZUhlaWdodDt0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5zY3JvbGxUb3AsZy10aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KSkpO3ZhciBoPU1hdGguY2VpbChjL3RoaXMubGluZUhlaWdodCktMSxpPU1hdGgubWF4KDAsTWF0aC5yb3VuZCgodGhpcy5zY3JvbGxUb3AtYikvdGhpcy5saW5lSGVpZ2h0KSksaj1pK2gsayxsLG09e2xpbmVIZWlnaHQ6dGhpcy5saW5lSGVpZ2h0fTtpPWEuc2NyZWVuVG9Eb2N1bWVudFJvdyhpLDApO3ZhciBuPWEuZ2V0Rm9sZExpbmUoaSk7biYmKGk9bi5zdGFydC5yb3cpLGs9YS5kb2N1bWVudFRvU2NyZWVuUm93KGksMCksbD1hLmdldFJvd0hlaWdodChtLGkpLGo9TWF0aC5taW4oYS5zY3JlZW5Ub0RvY3VtZW50Um93KGosMCksYS5nZXRMZW5ndGgoKS0xKSxjPXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQrYS5nZXRSb3dIZWlnaHQobSxqKStsLGI9dGhpcy5zY3JvbGxUb3Atayp0aGlzLmxpbmVIZWlnaHQsdGhpcy5sYXllckNvbmZpZz17d2lkdGg6ZCxwYWRkaW5nOnRoaXMuJHBhZGRpbmcsZmlyc3RSb3c6aSxmaXJzdFJvd1NjcmVlbjprLGxhc3RSb3c6aixsaW5lSGVpZ2h0OnRoaXMubGluZUhlaWdodCxjaGFyYWN0ZXJXaWR0aDp0aGlzLmNoYXJhY3RlcldpZHRoLG1pbkhlaWdodDpjLG1heEhlaWdodDpnLG9mZnNldDpiLGhlaWdodDp0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0fSx0aGlzLiRndXR0ZXJMYXllci5lbGVtZW50LnN0eWxlLm1hcmdpblRvcD0tYisicHgiLHRoaXMuY29udGVudC5zdHlsZS5tYXJnaW5Ub3A9LWIrInB4Iix0aGlzLmNvbnRlbnQuc3R5bGUud2lkdGg9ZCsyKnRoaXMuJHBhZGRpbmcrInB4Iix0aGlzLmNvbnRlbnQuc3R5bGUuaGVpZ2h0PWMrInB4IixmJiZ0aGlzLm9uUmVzaXplKCEwKX0sdGhpcy4kdXBkYXRlTGluZXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3csYj10aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdzt0aGlzLiRjaGFuZ2VkTGluZXM9bnVsbDt2YXIgYz10aGlzLmxheWVyQ29uZmlnO2lmKGMud2lkdGghPXRoaXMuJGdldExvbmdlc3RMaW5lKCkpcmV0dXJuIHRoaXMuJHRleHRMYXllci51cGRhdGUoYyk7aWYoYT5jLmxhc3RSb3crMSlyZXR1cm47aWYoYjxjLmZpcnN0Um93KXJldHVybjtpZihiPT09SW5maW5pdHkpe3RoaXMuc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGMpLHRoaXMuJHRleHRMYXllci51cGRhdGUoYyk7cmV0dXJufXRoaXMuJHRleHRMYXllci51cGRhdGVMaW5lcyhjLGEsYil9LHRoaXMuJGdldExvbmdlc3RMaW5lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXNzaW9uLmdldFNjcmVlbldpZHRoKCk7cmV0dXJuIHRoaXMuJHRleHRMYXllci5zaG93SW52aXNpYmxlcyYmKGErPTEpLE1hdGgubWF4KHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aC0yKnRoaXMuJHBhZGRpbmcsTWF0aC5yb3VuZChhKnRoaXMuY2hhcmFjdGVyV2lkdGgpKX0sdGhpcy51cGRhdGVGcm9udE1hcmtlcnM9ZnVuY3Rpb24oKXt0aGlzLiRtYXJrZXJGcm9udC5zZXRNYXJrZXJzKHRoaXMuc2Vzc2lvbi5nZXRNYXJrZXJzKCEwKSksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQpfSx0aGlzLnVwZGF0ZUJhY2tNYXJrZXJzPWZ1bmN0aW9uKCl7dGhpcy4kbWFya2VyQmFjay5zZXRNYXJrZXJzKHRoaXMuc2Vzc2lvbi5nZXRNYXJrZXJzKCkpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spfSx0aGlzLmFkZEd1dHRlckRlY29yYXRpb249ZnVuY3Rpb24oYSxiKXt0aGlzLiRndXR0ZXJMYXllci5hZGRHdXR0ZXJEZWNvcmF0aW9uKGEsYiksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpfSx0aGlzLnJlbW92ZUd1dHRlckRlY29yYXRpb249ZnVuY3Rpb24oYSxiKXt0aGlzLiRndXR0ZXJMYXllci5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uKGEsYiksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpfSx0aGlzLnNldEJyZWFrcG9pbnRzPWZ1bmN0aW9uKGEpe3RoaXMuJGd1dHRlckxheWVyLnNldEJyZWFrcG9pbnRzKGEpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX0sdGhpcy5zZXRBbm5vdGF0aW9ucz1mdW5jdGlvbihhKXt0aGlzLiRndXR0ZXJMYXllci5zZXRBbm5vdGF0aW9ucyhhKSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRFUil9LHRoaXMudXBkYXRlQ3Vyc29yPWZ1bmN0aW9uKCl7dGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9DVVJTT1IpfSx0aGlzLmhpZGVDdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLiRjdXJzb3JMYXllci5oaWRlQ3Vyc29yKCl9LHRoaXMuc2hvd0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuJGN1cnNvckxheWVyLnNob3dDdXJzb3IoKX0sdGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldz1mdW5jdGlvbigpe2lmKHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ9PT0wKXJldHVybjt2YXIgYT10aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKCksYj1hLmxlZnQsYz1hLnRvcDt0aGlzLnNjcm9sbFRvcD5jJiZ0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKGMpLHRoaXMuc2Nyb2xsVG9wK3RoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ8Yyt0aGlzLmxpbmVIZWlnaHQmJnRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoYyt0aGlzLmxpbmVIZWlnaHQtdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCk7dmFyIGQ9dGhpcy5zY3JvbGxMZWZ0O2Q+YiYmKGI8dGhpcy4kcGFkZGluZysyKnRoaXMubGF5ZXJDb25maWcuY2hhcmFjdGVyV2lkdGgmJihiPTApLHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGIpKSxkK3RoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aDxiK3RoaXMuY2hhcmFjdGVyV2lkdGgmJnRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KE1hdGgucm91bmQoYit0aGlzLmNoYXJhY3RlcldpZHRoLXRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCkpfSx0aGlzLmdldFNjcm9sbFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCl9LHRoaXMuZ2V0U2Nyb2xsTGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCl9LHRoaXMuZ2V0U2Nyb2xsVG9wUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Nyb2xsVG9wL3RoaXMubGluZUhlaWdodH0sdGhpcy5nZXRTY3JvbGxCb3R0b21Sb3c9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLmZsb29yKCh0aGlzLnNjcm9sbFRvcCt0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KS90aGlzLmxpbmVIZWlnaHQpLTEpfSx0aGlzLnNjcm9sbFRvUm93PWZ1bmN0aW9uKGEpe3RoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoYSp0aGlzLmxpbmVIZWlnaHQpfSx0aGlzLnNjcm9sbFRvTGluZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oe3JvdzphLGNvbHVtbjowfSksZD1jLnRvcDtiJiYoZC09dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodC8yKSx0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKGQpfSx0aGlzLnNjcm9sbFRvWT1mdW5jdGlvbihhKXt0aGlzLnNjcm9sbFRvcCE9PWEmJih0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCksdGhpcy5zY3JvbGxUb3A9YSl9LHRoaXMuc2Nyb2xsVG9YPWZ1bmN0aW9uKGEpe2E8PXRoaXMuJHBhZGRpbmcmJihhPTApLHRoaXMuc2Nyb2xsTGVmdCE9PWEmJih0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0hfU0NST0xMKSx0aGlzLnNjcm9sbExlZnQ9YSl9LHRoaXMuc2Nyb2xsQnk9ZnVuY3Rpb24oYSxiKXtiJiZ0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKStiKSxhJiZ0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpK2EpfSx0aGlzLmlzU2Nyb2xsYWJsZUJ5PWZ1bmN0aW9uKGEsYil7aWYoYjwwJiZ0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCk+MClyZXR1cm4hMDtpZihiPjAmJnRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSt0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0PHRoaXMubGF5ZXJDb25maWcubWF4SGVpZ2h0KXJldHVybiEwfSx0aGlzLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgucm91bmQoKGErdGhpcy5zY3JvbGxMZWZ0LWMubGVmdC10aGlzLiRwYWRkaW5nLWUuZ2V0UGFnZVNjcm9sbExlZnQoKSkvdGhpcy5jaGFyYWN0ZXJXaWR0aCksZj1NYXRoLmZsb29yKChiK3RoaXMuc2Nyb2xsVG9wLWMudG9wLWUuZ2V0UGFnZVNjcm9sbFRvcCgpKS90aGlzLmxpbmVIZWlnaHQpO3JldHVybiB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGYsTWF0aC5tYXgoZCwwKSl9LHRoaXMudGV4dFRvU2NyZWVuQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihhLGIpLGU9dGhpcy4kcGFkZGluZytNYXRoLnJvdW5kKGQuY29sdW1uKnRoaXMuY2hhcmFjdGVyV2lkdGgpLGY9ZC5yb3cqdGhpcy5saW5lSGVpZ2h0O3JldHVybntwYWdlWDpjLmxlZnQrZS10aGlzLnNjcm9sbExlZnQscGFnZVk6Yy50b3ArZi10aGlzLnNjcm9sbFRvcH19LHRoaXMudmlzdWFsaXplRm9jdXM9ZnVuY3Rpb24oKXtlLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCJhY2VfZm9jdXMiKX0sdGhpcy52aXN1YWxpemVCbHVyPWZ1bmN0aW9uKCl7ZS5yZW1vdmVDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwiYWNlX2ZvY3VzIil9LHRoaXMuc2hvd0NvbXBvc2l0aW9uPWZ1bmN0aW9uKGEpe3RoaXMuJGNvbXBvc2l0aW9ufHwodGhpcy4kY29tcG9zaXRpb249ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLiRjb21wb3NpdGlvbi5jbGFzc05hbWU9ImFjZV9jb21wb3NpdGlvbiIsdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuJGNvbXBvc2l0aW9uKSksdGhpcy4kY29tcG9zaXRpb24uaW5uZXJIVE1MPSImIzE2MDsiO3ZhciBiPXRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oKSxjPXRoaXMuJGNvbXBvc2l0aW9uLnN0eWxlO2MudG9wPWIudG9wKyJweCIsYy5sZWZ0PWIubGVmdCt0aGlzLiRwYWRkaW5nKyJweCIsYy5oZWlnaHQ9dGhpcy5saW5lSGVpZ2h0KyJweCIsdGhpcy5oaWRlQ3Vyc29yKCl9LHRoaXMuc2V0Q29tcG9zaXRpb25UZXh0PWZ1bmN0aW9uKGEpe2Uuc2V0SW5uZXJUZXh0KHRoaXMuJGNvbXBvc2l0aW9uLGEpfSx0aGlzLmhpZGVDb21wb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMuc2hvd0N1cnNvcigpO2lmKCF0aGlzLiRjb21wb3NpdGlvbilyZXR1cm47dmFyIGE9dGhpcy4kY29tcG9zaXRpb24uc3R5bGU7YS50b3A9Ii0xMDAwMHB4IixhLmxlZnQ9Ii0xMDAwMHB4In0sdGhpcy5zZXRUaGVtZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBkKGEpe2UuaW1wb3J0Q3NzU3RyaW5nKGEuY3NzVGV4dCxhLmNzc0NsYXNzLGMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQpLGMuJHRoZW1lJiZlLnJlbW92ZUNzc0NsYXNzKGMuY29udGFpbmVyLGMuJHRoZW1lKSxjLiR0aGVtZT1hP2EuY3NzQ2xhc3M6bnVsbCxjLiR0aGVtZSYmZS5hZGRDc3NDbGFzcyhjLmNvbnRhaW5lcixjLiR0aGVtZSksYSYmYS5pc0Rhcms/ZS5hZGRDc3NDbGFzcyhjLmNvbnRhaW5lciwiYWNlX2RhcmsiKTplLnJlbW92ZUNzc0NsYXNzKGMuY29udGFpbmVyLCJhY2VfZGFyayIpLGMuJHNpemUmJihjLiRzaXplLndpZHRoPTAsYy5vblJlc2l6ZSgpKX12YXIgYz10aGlzO3RoaXMuJHRoZW1lVmFsdWU9YiwhYnx8dHlwZW9mIGI9PSJzdHJpbmciPyhiPWJ8fCJhY2UvdGhlbWUvdGV4dG1hdGUiLGEoW2JdLGZ1bmN0aW9uKGEpe2QoYSl9KSk6ZChiKX0sdGhpcy5nZXRUaGVtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aGVtZVZhbHVlfSx0aGlzLnNldFN0eWxlPWZ1bmN0aW9uKGEpe2UuYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsYSl9LHRoaXMudW5zZXRTdHlsZT1mdW5jdGlvbihhKXtlLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLGEpfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLiR0ZXh0TGF5ZXIuZGVzdHJveSgpLHRoaXMuJGN1cnNvckxheWVyLmRlc3Ryb3koKX19KSkuY2FsbChwLnByb3RvdHlwZSksYi5WaXJ0dWFsUmVuZGVyZXI9cH0pLGFjZS5kZWZpbmUoImFjZS9sYXllci9ndXR0ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvZG9tIiksZT1hKCIuLi9saWIvb29wIiksZj1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixnPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9ImFjZV9sYXllciBhY2VfZ3V0dGVyLWxheWVyIixhLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCksdGhpcy5zZXRTaG93Rm9sZFdpZGdldHModGhpcy4kc2hvd0ZvbGRXaWRnZXRzKSx0aGlzLmd1dHRlcldpZHRoPTAsdGhpcy4kYnJlYWtwb2ludHM9W10sdGhpcy4kYW5ub3RhdGlvbnM9W10sdGhpcy4kZGVjb3JhdGlvbnM9W119OygoZnVuY3Rpb24oKXtlLmltcGxlbWVudCh0aGlzLGYpLHRoaXMuc2V0U2Vzc2lvbj1mdW5jdGlvbihhKXt0aGlzLnNlc3Npb249YX0sdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGEsYil7dGhpcy4kZGVjb3JhdGlvbnNbYV18fCh0aGlzLiRkZWNvcmF0aW9uc1thXT0iIiksdGhpcy4kZGVjb3JhdGlvbnNbYV0rPSIgYWNlXyIrYn0sdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGEsYil7dGhpcy4kZGVjb3JhdGlvbnNbYV09dGhpcy4kZGVjb3JhdGlvbnNbYV0ucmVwbGFjZSgiIGFjZV8iK2IsIiIpfSx0aGlzLnNldEJyZWFrcG9pbnRzPWZ1bmN0aW9uKGEpe3RoaXMuJGJyZWFrcG9pbnRzPWEuY29uY2F0KCl9LHRoaXMuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oYSl7dGhpcy4kYW5ub3RhdGlvbnM9W107Zm9yKHZhciBiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9YVtiXTtpZighYyljb250aW51ZTt2YXIgZD10aGlzLiRhbm5vdGF0aW9uc1tiXT17dGV4dDpbXX07Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0sZz1mLnRleHQucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjODIxNzsiKS5yZXBsYWNlKC88LywiJmx0OyIpO2QudGV4dC5pbmRleE9mKGcpPT09LTEmJmQudGV4dC5wdXNoKGcpO3ZhciBoPWYudHlwZTtoPT0iZXJyb3IiP2QuY2xhc3NOYW1lPSJhY2VfZXJyb3IiOmg9PSJ3YXJuaW5nIiYmZC5jbGFzc05hbWUhPSJhY2VfZXJyb3IiP2QuY2xhc3NOYW1lPSJhY2Vfd2FybmluZyI6aD09ImluZm8iJiYhZC5jbGFzc05hbWUmJihkLmNsYXNzTmFtZT0iYWNlX2luZm8iKX19fSx0aGlzLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLiRjb25maWc9YTt2YXIgYj17Y2xhc3NOYW1lOiIiLHRleHQ6W119LGM9W10sZT1hLmZpcnN0Um93LGY9YS5sYXN0Um93LGc9dGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShlKSxoPWc/Zy5zdGFydC5yb3c6SW5maW5pdHksaT10aGlzLiRzaG93Rm9sZFdpZGdldHMmJnRoaXMuc2Vzc2lvbi5mb2xkV2lkZ2V0cztmb3IoOzspe2U+aCYmKGU9Zy5lbmQucm93KzEsZz10aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGUsZyksaD1nP2cuc3RhcnQucm93OkluZmluaXR5KTtpZihlPmYpYnJlYWs7dmFyIGo9dGhpcy4kYW5ub3RhdGlvbnNbZV18fGI7Yy5wdXNoKCI8ZGl2IGNsYXNzPSdhY2VfZ3V0dGVyLWNlbGwiLHRoaXMuJGRlY29yYXRpb25zW2VdfHwiIix0aGlzLiRicmVha3BvaW50c1tlXT8iIGFjZV9icmVha3BvaW50ICI6IiAiLGouY2xhc3NOYW1lLCInIHRpdGxlPSciLGoudGV4dC5qb2luKCJcbiIpLCInIHN0eWxlPSdoZWlnaHQ6IixhLmxpbmVIZWlnaHQsInB4Oyc+IixlKzEpO2lmKGkpe3ZhciBrPWlbZV07az09bnVsbCYmKGs9aVtlXT10aGlzLnNlc3Npb24uZ2V0Rm9sZFdpZGdldChlKSksayYmYy5wdXNoKCI8c3BhbiBjbGFzcz0nYWNlX2ZvbGQtd2lkZ2V0ICIsayxrPT0ic3RhcnQiJiZlPT1oJiZlPGcuZW5kLnJvdz8iIGNsb3NlZCI6IiBvcGVuIiwiJz48L3NwYW4+Iil9dmFyIGw9dGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChlKS0xO3doaWxlKGwtLSljLnB1c2goIjwvZGl2PjxkaXYgY2xhc3M9J2FjZV9ndXR0ZXItY2VsbCcgc3R5bGU9J2hlaWdodDoiLGEubGluZUhlaWdodCwicHgnPsKmIik7Yy5wdXNoKCI8L2Rpdj4iKSxlKyt9dGhpcy5lbGVtZW50PWQuc2V0SW5uZXJIdG1sKHRoaXMuZWxlbWVudCxjLmpvaW4oIiIpKSx0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0PWEubWluSGVpZ2h0KyJweCI7dmFyIG09dGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoO20hPT10aGlzLmd1dHRlcldpZHRoJiYodGhpcy5ndXR0ZXJXaWR0aD1tLHRoaXMuX2VtaXQoImNoYW5nZUd1dHRlcldpZHRoIixtKSl9LHRoaXMuJHNob3dGb2xkV2lkZ2V0cz0hMCx0aGlzLnNldFNob3dGb2xkV2lkZ2V0cz1mdW5jdGlvbihhKXthP2QuYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2VfZm9sZGluZy1lbmFibGVkIik6ZC5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9mb2xkaW5nLWVuYWJsZWQiKSx0aGlzLiRzaG93Rm9sZFdpZGdldHM9YX0sdGhpcy5nZXRTaG93Rm9sZFdpZGdldHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2hvd0ZvbGRXaWRnZXRzfX0pKS5jYWxsKGcucHJvdG90eXBlKSxiLkd1dHRlcj1nfSksYWNlLmRlZmluZSgiYWNlL2xheWVyL21hcmtlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSIsImFjZS9saWIvZG9tIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9YSgiLi4vbGliL2RvbSIpLGY9ZnVuY3Rpb24oYSl7dGhpcy5lbGVtZW50PWUuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0iYWNlX2xheWVyIGFjZV9tYXJrZXItbGF5ZXIiLGEuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KX07KChmdW5jdGlvbigpe3RoaXMuJHBhZGRpbmc9MCx0aGlzLnNldFBhZGRpbmc9ZnVuY3Rpb24oYSl7dGhpcy4kcGFkZGluZz1hfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oYSl7dGhpcy5zZXNzaW9uPWF9LHRoaXMuc2V0TWFya2Vycz1mdW5jdGlvbihhKXt0aGlzLm1hcmtlcnM9YX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oYSl7dmFyIGE9YXx8dGhpcy5jb25maWc7aWYoIWEpcmV0dXJuO3RoaXMuY29uZmlnPWE7dmFyIGI9W107Zm9yKHZhciBjIGluIHRoaXMubWFya2Vycyl7dmFyIGQ9dGhpcy5tYXJrZXJzW2NdLGY9ZC5yYW5nZS5jbGlwUm93cyhhLmZpcnN0Um93LGEubGFzdFJvdyk7aWYoZi5pc0VtcHR5KCkpY29udGludWU7Zj1mLnRvU2NyZWVuUmFuZ2UodGhpcy5zZXNzaW9uKTtpZihkLnJlbmRlcmVyKXt2YXIgZz10aGlzLiRnZXRUb3AoZi5zdGFydC5yb3csYSksaD1NYXRoLnJvdW5kKHRoaXMuJHBhZGRpbmcrZi5zdGFydC5jb2x1bW4qYS5jaGFyYWN0ZXJXaWR0aCk7ZC5yZW5kZXJlcihiLGYsaCxnLGEpfWVsc2UgZi5pc011bHRpTGluZSgpP2QudHlwZT09InRleHQiP3RoaXMuZHJhd1RleHRNYXJrZXIoYixmLGQuY2xhenosYSk6dGhpcy5kcmF3TXVsdGlMaW5lTWFya2VyKGIsZixkLmNsYXp6LGEsZC50eXBlKTp0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKGIsZixkLmNsYXp6LGEsbnVsbCxkLnR5cGUpfXRoaXMuZWxlbWVudD1lLnNldElubmVySHRtbCh0aGlzLmVsZW1lbnQsYi5qb2luKCIiKSl9LHRoaXMuJGdldFRvcD1mdW5jdGlvbihhLGIpe3JldHVybihhLWIuZmlyc3RSb3dTY3JlZW4pKmIubGluZUhlaWdodH0sdGhpcy5kcmF3VGV4dE1hcmtlcj1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj1iLnN0YXJ0LnJvdyxnPW5ldyBkKGYsYi5zdGFydC5jb2x1bW4sZix0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihmKSk7dGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihhLGcsYyxlLDEsInRleHQiKSxmPWIuZW5kLnJvdyxnPW5ldyBkKGYsMCxmLGIuZW5kLmNvbHVtbiksdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihhLGcsYyxlLDAsInRleHQiKTtmb3IoZj1iLnN0YXJ0LnJvdysxO2Y8Yi5lbmQucm93O2YrKylnLnN0YXJ0LnJvdz1mLGcuZW5kLnJvdz1mLGcuZW5kLmNvbHVtbj10aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihmKSx0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKGEsZyxjLGUsMSwidGV4dCIpfSx0aGlzLmRyYXdNdWx0aUxpbmVNYXJrZXI9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1lPT09ImJhY2tncm91bmQiPzA6dGhpcy4kcGFkZGluZyxnPWQud2lkdGgrMip0aGlzLiRwYWRkaW5nLWYsaD1kLmxpbmVIZWlnaHQsaT1NYXRoLnJvdW5kKGctYi5zdGFydC5jb2x1bW4qZC5jaGFyYWN0ZXJXaWR0aCksaj10aGlzLiRnZXRUb3AoYi5zdGFydC5yb3csZCksaz1NYXRoLnJvdW5kKGYrYi5zdGFydC5jb2x1bW4qZC5jaGFyYWN0ZXJXaWR0aCk7YS5wdXNoKCI8ZGl2IGNsYXNzPSciLGMsIicgc3R5bGU9JyIsImhlaWdodDoiLGgsInB4OyIsIndpZHRoOiIsaSwicHg7IiwidG9wOiIsaiwicHg7IiwibGVmdDoiLGssInB4Oyc+PC9kaXY+Iiksaj10aGlzLiRnZXRUb3AoYi5lbmQucm93LGQpLGk9TWF0aC5yb3VuZChiLmVuZC5jb2x1bW4qZC5jaGFyYWN0ZXJXaWR0aCksYS5wdXNoKCI8ZGl2IGNsYXNzPSciLGMsIicgc3R5bGU9JyIsImhlaWdodDoiLGgsInB4OyIsIndpZHRoOiIsaSwicHg7IiwidG9wOiIsaiwicHg7IiwibGVmdDoiLGYsInB4Oyc+PC9kaXY+IiksaD0oYi5lbmQucm93LWIuc3RhcnQucm93LTEpKmQubGluZUhlaWdodDtpZihoPDApcmV0dXJuO2o9dGhpcy4kZ2V0VG9wKGIuc3RhcnQucm93KzEsZCksYS5wdXNoKCI8ZGl2IGNsYXNzPSciLGMsIicgc3R5bGU9JyIsImhlaWdodDoiLGgsInB4OyIsIndpZHRoOiIsZywicHg7IiwidG9wOiIsaiwicHg7IiwibGVmdDoiLGYsInB4Oyc+PC9kaXY+Iil9LHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPWY9PT0iYmFja2dyb3VuZCI/MDp0aGlzLiRwYWRkaW5nLGg9ZC5saW5lSGVpZ2h0O2lmKGY9PT0iYmFja2dyb3VuZCIpdmFyIGk9ZC53aWR0aDtlbHNlIGk9TWF0aC5yb3VuZCgoYi5lbmQuY29sdW1uKyhlfHwwKS1iLnN0YXJ0LmNvbHVtbikqZC5jaGFyYWN0ZXJXaWR0aCk7dmFyIGo9dGhpcy4kZ2V0VG9wKGIuc3RhcnQucm93LGQpLGs9TWF0aC5yb3VuZChnK2Iuc3RhcnQuY29sdW1uKmQuY2hhcmFjdGVyV2lkdGgpO2EucHVzaCgiPGRpdiBjbGFzcz0nIixjLCInIHN0eWxlPSciLCJoZWlnaHQ6IixoLCJweDsiLCJ3aWR0aDoiLGksInB4OyIsInRvcDoiLGosInB4OyIsImxlZnQ6IixrLCJweDsnPjwvZGl2PiIpfX0pKS5jYWxsKGYucHJvdG90eXBlKSxiLk1hcmtlcj1mfSksYWNlLmRlZmluZSgiYWNlL2xheWVyL3RleHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9kb20iKSxmPWEoIi4uL2xpYi9sYW5nIiksZz1hKCIuLi9saWIvdXNlcmFnZW50IiksaD1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixpPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9ImFjZV9sYXllciBhY2VfdGV4dC1sYXllciIsYS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpLHRoaXMuJGNoYXJhY3RlclNpemU9dGhpcy4kbWVhc3VyZVNpemVzKCl8fHt3aWR0aDowLGhlaWdodDowfSx0aGlzLiRwb2xsU2l6ZUNoYW5nZXMoKX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsaCksdGhpcy5FT0ZfQ0hBUj0iwrYiLHRoaXMuRU9MX0NIQVI9IsKsIix0aGlzLlRBQl9DSEFSPSLihpIiLHRoaXMuU1BBQ0VfQ0hBUj0iwrciLHRoaXMuJHBhZGRpbmc9MCx0aGlzLnNldFBhZGRpbmc9ZnVuY3Rpb24oYSl7dGhpcy4kcGFkZGluZz1hLHRoaXMuZWxlbWVudC5zdHlsZS5wYWRkaW5nPSIwICIrYSsicHgifSx0aGlzLmdldExpbmVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY2hhcmFjdGVyU2l6ZS5oZWlnaHR8fDF9LHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aHx8MX0sdGhpcy5jaGVja0ZvclNpemVDaGFuZ2VzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kbWVhc3VyZVNpemVzKCk7YSYmKHRoaXMuJGNoYXJhY3RlclNpemUud2lkdGghPT1hLndpZHRofHx0aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCE9PWEuaGVpZ2h0KSYmKHRoaXMuJGNoYXJhY3RlclNpemU9YSx0aGlzLl9lbWl0KCJjaGFuZ2VDaGFyYWN0ZXJTaXplIix7ZGF0YTphfSkpfSx0aGlzLiRwb2xsU2l6ZUNoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7YS5jaGVja0ZvclNpemVDaGFuZ2VzKCl9LDUwMCl9LHRoaXMuJGZvbnRTdHlsZXM9e2ZvbnRGYW1pbHk6MSxmb250U2l6ZToxLGZvbnRXZWlnaHQ6MSxmb250U3R5bGU6MSxsaW5lSGVpZ2h0OjF9LHRoaXMuJG1lYXN1cmVTaXplcz1mdW5jdGlvbigpe3ZhciBhPTFlMztpZighdGhpcy4kbWVhc3VyZU5vZGUpe3ZhciBiPXRoaXMuJG1lYXN1cmVOb2RlPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksYz1iLnN0eWxlO2Mud2lkdGg9Yy5oZWlnaHQ9ImF1dG8iLGMubGVmdD1jLnRvcD0tYSo0MCsicHgiLGMudmlzaWJpbGl0eT0iaGlkZGVuIixjLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYy5vdmVyZmxvdz0idmlzaWJsZSIsYy53aGl0ZVNwYWNlPSJub3dyYXAiLGIuaW5uZXJIVE1MPWYuc3RyaW5nUmVwZWF0KCJYeSIsYSk7aWYodGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keSl0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGIpO2Vsc2V7dmFyIGQ9dGhpcy5lbGVtZW50LnBhcmVudE5vZGU7d2hpbGUoIWUuaGFzQ3NzQ2xhc3MoZCwiYWNlX2VkaXRvciIpKWQ9ZC5wYXJlbnROb2RlO2QuYXBwZW5kQ2hpbGQoYil9fXZhciBjPXRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLGc9ZS5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCk7Zm9yKHZhciBoIGluIHRoaXMuJGZvbnRTdHlsZXMpY1toXT1nW2hdO3ZhciBpPXtoZWlnaHQ6dGhpcy4kbWVhc3VyZU5vZGUub2Zmc2V0SGVpZ2h0LHdpZHRoOnRoaXMuJG1lYXN1cmVOb2RlLm9mZnNldFdpZHRoLyhhKjIpfTtyZXR1cm4gaS53aWR0aD09MCYmaS5oZWlnaHQ9PTA/bnVsbDppfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oYSl7dGhpcy5zZXNzaW9uPWF9LHRoaXMuc2hvd0ludmlzaWJsZXM9ITEsdGhpcy5zZXRTaG93SW52aXNpYmxlcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zaG93SW52aXNpYmxlcz09YT8hMToodGhpcy5zaG93SW52aXNpYmxlcz1hLCEwKX0sdGhpcy4kdGFiU3RyaW5ncz1bXSx0aGlzLiRjb21wdXRlVGFiU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKSxiPXRoaXMuJHRhYlN0cmluZ3M9WzBdO2Zvcih2YXIgYz0xO2M8YSsxO2MrKyl0aGlzLnNob3dJbnZpc2libGVzP2IucHVzaCgiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUnPiIrdGhpcy5UQUJfQ0hBUisobmV3IEFycmF5KGMpKS5qb2luKCImIzE2MDsiKSsiPC9zcGFuPiIpOmIucHVzaCgobmV3IEFycmF5KGMrMSkpLmpvaW4oIiYjMTYwOyIpKX0sdGhpcy51cGRhdGVMaW5lcz1mdW5jdGlvbihhLGIsYyl7dGhpcy4kY29tcHV0ZVRhYlN0cmluZygpLCh0aGlzLmNvbmZpZy5sYXN0Um93IT1hLmxhc3RSb3d8fHRoaXMuY29uZmlnLmZpcnN0Um93IT1hLmZpcnN0Um93KSYmdGhpcy5zY3JvbGxMaW5lcyhhKSx0aGlzLmNvbmZpZz1hO3ZhciBkPU1hdGgubWF4KGIsYS5maXJzdFJvdyksZj1NYXRoLm1pbihjLGEubGFzdFJvdyksZz10aGlzLmVsZW1lbnQuY2hpbGROb2RlcyxoPTA7Zm9yKHZhciBpPWEuZmlyc3RSb3c7aTxkO2krKyl7dmFyIGo9dGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKGkpO2lmKGope2lmKGouY29udGFpbnNSb3coZCkpe2Q9ai5zdGFydC5yb3c7YnJlYWt9aT1qLmVuZC5yb3d9aCsrfWZvcih2YXIgaz1kO2s8PWY7aysrKXt2YXIgbD1nW2grK107aWYoIWwpY29udGludWU7dmFyIG09W10sbj10aGlzLnNlc3Npb24uZ2V0VG9rZW5zKGssayk7dGhpcy4kcmVuZGVyTGluZShtLGssblswXS50b2tlbnMsIXRoaXMuJHVzZUxpbmVHcm91cHMoKSksbD1lLnNldElubmVySHRtbChsLG0uam9pbigiIikpLGs9dGhpcy5zZXNzaW9uLmdldFJvd0ZvbGRFbmQoayl9fSx0aGlzLnNjcm9sbExpbmVzPWZ1bmN0aW9uKGEpe3RoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTt2YXIgYj10aGlzLmNvbmZpZzt0aGlzLmNvbmZpZz1hO2lmKCFifHxiLmxhc3RSb3c8YS5maXJzdFJvdylyZXR1cm4gdGhpcy51cGRhdGUoYSk7aWYoYS5sYXN0Um93PGIuZmlyc3RSb3cpcmV0dXJuIHRoaXMudXBkYXRlKGEpO3ZhciBjPXRoaXMuZWxlbWVudDtpZihiLmZpcnN0Um93PGEuZmlyc3RSb3cpZm9yKHZhciBkPXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudChiLmZpcnN0Um93LGEuZmlyc3RSb3ctMSk7ZD4wO2QtLSljLnJlbW92ZUNoaWxkKGMuZmlyc3RDaGlsZCk7aWYoYi5sYXN0Um93PmEubGFzdFJvdylmb3IodmFyIGQ9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KGEubGFzdFJvdysxLGIubGFzdFJvdyk7ZD4wO2QtLSljLnJlbW92ZUNoaWxkKGMubGFzdENoaWxkKTtpZihhLmZpcnN0Um93PGIuZmlyc3RSb3cpe3ZhciBlPXRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoYSxhLmZpcnN0Um93LGIuZmlyc3RSb3ctMSk7Yy5maXJzdENoaWxkP2MuaW5zZXJ0QmVmb3JlKGUsYy5maXJzdENoaWxkKTpjLmFwcGVuZENoaWxkKGUpfWlmKGEubGFzdFJvdz5iLmxhc3RSb3cpe3ZhciBlPXRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoYSxiLmxhc3RSb3crMSxhLmxhc3RSb3cpO2MuYXBwZW5kQ2hpbGQoZSl9fSx0aGlzLiRyZW5kZXJMaW5lc0ZyYWdtZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZj1iLGc9dGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShmKSxoPWc/Zy5zdGFydC5yb3c6SW5maW5pdHk7Zm9yKDs7KXtmPmgmJihmPWcuZW5kLnJvdysxLGc9dGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShmLGcpLGg9Zz9nLnN0YXJ0LnJvdzpJbmZpbml0eSk7aWYoZj5jKWJyZWFrO3ZhciBpPWUuY3JlYXRlRWxlbWVudCgiZGl2Iiksaj1bXSxrPXRoaXMuc2Vzc2lvbi5nZXRUb2tlbnMoZixmKTtrLmxlbmd0aD09MSYmdGhpcy4kcmVuZGVyTGluZShqLGYsa1swXS50b2tlbnMsITEpLGkuaW5uZXJIVE1MPWouam9pbigiIik7aWYodGhpcy4kdXNlTGluZUdyb3VwcygpKWkuY2xhc3NOYW1lPSJhY2VfbGluZV9ncm91cCIsZC5hcHBlbmRDaGlsZChpKTtlbHNle3ZhciBsPWkuY2hpbGROb2Rlczt3aGlsZShsLmxlbmd0aClkLmFwcGVuZENoaWxkKGxbMF0pfWYrK31yZXR1cm4gZH0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oYSl7dGhpcy4kY29tcHV0ZVRhYlN0cmluZygpLHRoaXMuY29uZmlnPWE7dmFyIGI9W10sYz1hLmZpcnN0Um93LGQ9YS5sYXN0Um93LGY9YyxnPXRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUoZiksaD1nP2cuc3RhcnQucm93OkluZmluaXR5O2Zvcig7Oyl7Zj5oJiYoZj1nLmVuZC5yb3crMSxnPXRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUoZixnKSxoPWc/Zy5zdGFydC5yb3c6SW5maW5pdHkpO2lmKGY+ZClicmVhazt0aGlzLiR1c2VMaW5lR3JvdXBzKCkmJmIucHVzaCgiPGRpdiBjbGFzcz0nYWNlX2xpbmVfZ3JvdXAnPiIpO3ZhciBpPXRoaXMuc2Vzc2lvbi5nZXRUb2tlbnMoZixmKTtpLmxlbmd0aD09MSYmdGhpcy4kcmVuZGVyTGluZShiLGYsaVswXS50b2tlbnMsITEpLHRoaXMuJHVzZUxpbmVHcm91cHMoKSYmYi5wdXNoKCI8L2Rpdj4iKSxmKyt9dGhpcy5lbGVtZW50PWUuc2V0SW5uZXJIdG1sKHRoaXMuZWxlbWVudCxiLmpvaW4oIiIpKX0sdGhpcy4kdGV4dFRva2VuPXt0ZXh0OiEwLHJwYXJlbjohMCxscGFyZW46ITB9LHRoaXMuJHJlbmRlclRva2VuPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMsZj0vXHR8Jnw8fCggKyl8KFtcdlxmIFx1MDBhMFx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAwYlx1MjAyOFx1MjAyOVx1MzAwMF0pfFtcdTExMDAtXHUxMTVGXXxbXHUxMUEzLVx1MTFBN118W1x1MTFGQS1cdTExRkZdfFtcdTIzMjktXHUyMzJBXXxbXHUyRTgwLVx1MkU5OV18W1x1MkU5Qi1cdTJFRjNdfFtcdTJGMDAtXHUyRkQ1XXxbXHUyRkYwLVx1MkZGQl18W1x1MzAwMC1cdTMwM0VdfFtcdTMwNDEtXHUzMDk2XXxbXHUzMDk5LVx1MzBGRl18W1x1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXXxbXHUzMTkwLVx1MzFCQV18W1x1MzFDMC1cdTMxRTNdfFtcdTMxRjAtXHUzMjFFXXxbXHUzMjIwLVx1MzI0N118W1x1MzI1MC1cdTMyRkVdfFtcdTMzMDAtXHU0REJGXXxbXHU0RTAwLVx1QTQ4Q118W1x1QTQ5MC1cdUE0QzZdfFtcdUE5NjAtXHVBOTdDXXxbXHVBQzAwLVx1RDdBM118W1x1RDdCMC1cdUQ3QzZdfFtcdUQ3Q0ItXHVEN0ZCXXxbXHVGOTAwLVx1RkFGRl18W1x1RkUxMC1cdUZFMTldfFtcdUZFMzAtXHVGRTUyXXxbXHVGRTU0LVx1RkU2Nl18W1x1RkU2OC1cdUZFNkJdfFtcdUZGMDEtXHVGRjYwXXxbXHVGRkUwLVx1RkZFNl0vZyxoPWZ1bmN0aW9uKGEsYyxkLGYsaCl7aWYoYS5jaGFyQ29kZUF0KDApPT0zMilyZXR1cm4obmV3IEFycmF5KGEubGVuZ3RoKzEpKS5qb2luKCImIzE2MDsiKTtpZihhPT0iXHQiKXt2YXIgaT1lLnNlc3Npb24uZ2V0U2NyZWVuVGFiU2l6ZShiK2YpO3JldHVybiBiKz1pLTEsZS4kdGFiU3RyaW5nc1tpXX1pZihhPT0iJiIpcmV0dXJuIGcuaXNPbGRHZWNrbz8iJiI6IiZhbXA7IjtpZihhPT0iPCIpcmV0dXJuIiZsdDsiO2lmKGE9PSLjgIAiKXt2YXIgaj1lLnNob3dJbnZpc2libGVzPyJhY2VfY2prIGFjZV9pbnZpc2libGUiOiJhY2VfY2prIixrPWUuc2hvd0ludmlzaWJsZXM/ZS5TUEFDRV9DSEFSOiIiO3JldHVybiBiKz0xLCI8c3BhbiBjbGFzcz0nIitqKyInIHN0eWxlPSd3aWR0aDoiK2UuY29uZmlnLmNoYXJhY3RlcldpZHRoKjIrInB4Jz4iK2srIjwvc3Bhbj4ifWlmKGEubWF0Y2goL1tcdlxmIFx1MDBhMFx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAwYlx1MjAyOFx1MjAyOVx1MzAwMF0vKSl7aWYoZS5zaG93SW52aXNpYmxlcyl7dmFyIGs9KG5ldyBBcnJheShhLmxlbmd0aCsxKSkuam9pbihlLlNQQUNFX0NIQVIpO3JldHVybiI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSc+IitrKyI8L3NwYW4+In1yZXR1cm4iJiMxNjA7In1yZXR1cm4gYis9MSwiPHNwYW4gY2xhc3M9J2FjZV9jamsnIHN0eWxlPSd3aWR0aDoiK2UuY29uZmlnLmNoYXJhY3RlcldpZHRoKjIrInB4Jz4iK2ErIjwvc3Bhbj4ifSxpPWQucmVwbGFjZShmLGgpO2lmKCF0aGlzLiR0ZXh0VG9rZW5bYy50eXBlXSl7dmFyIGo9ImFjZV8iK2MudHlwZS5yZXBsYWNlKC9cLi9nLCIgYWNlXyIpLGs9IiI7Yy50eXBlPT0iZm9sZCImJihrPSIgc3R5bGU9J3dpZHRoOiIrYy52YWx1ZS5sZW5ndGgqdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGgrInB4OycgIiksYS5wdXNoKCI8c3BhbiBjbGFzcz0nIixqLCInIixrLCI+IixpLCI8L3NwYW4+Iil9ZWxzZSBhLnB1c2goaSk7cmV0dXJuIGIrZC5sZW5ndGh9LHRoaXMuJHJlbmRlckxpbmVDb3JlPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9MCxnPTAsaCxpPTAsaj10aGlzOyFkfHxkLmxlbmd0aD09MD9oPU51bWJlci5NQVhfVkFMVUU6aD1kWzBdLGV8fGEucHVzaCgiPGRpdiBjbGFzcz0nYWNlX2xpbmUnIHN0eWxlPSdoZWlnaHQ6Iix0aGlzLmNvbmZpZy5saW5lSGVpZ2h0LCJweCIsIic+Iik7Zm9yKHZhciBrPTA7azxjLmxlbmd0aDtrKyspe3ZhciBsPWNba10sbT1sLnZhbHVlO2lmKGYrbS5sZW5ndGg8aClpPWouJHJlbmRlclRva2VuKGEsaSxsLG0pLGYrPW0ubGVuZ3RoO2Vsc2V7d2hpbGUoZittLmxlbmd0aD49aClpPWouJHJlbmRlclRva2VuKGEsaSxsLG0uc3Vic3RyaW5nKDAsaC1mKSksbT1tLnN1YnN0cmluZyhoLWYpLGY9aCxlfHxhLnB1c2goIjwvZGl2PiIsIjxkaXYgY2xhc3M9J2FjZV9saW5lJyBzdHlsZT0naGVpZ2h0OiIsdGhpcy5jb25maWcubGluZUhlaWdodCwicHgiLCInPiIpLGcrKyxpPTAsaD1kW2ddfHxOdW1iZXIuTUFYX1ZBTFVFO20ubGVuZ3RoIT0wJiYoZis9bS5sZW5ndGgsaT1qLiRyZW5kZXJUb2tlbihhLGksbCxtKSl9fXRoaXMuc2hvd0ludmlzaWJsZXMmJihiIT09dGhpcy5zZXNzaW9uLmdldExlbmd0aCgpLTE/YS5wdXNoKCI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSc+Iit0aGlzLkVPTF9DSEFSKyI8L3NwYW4+Iik6YS5wdXNoKCI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSc+Iit0aGlzLkVPRl9DSEFSKyI8L3NwYW4+IikpLGV8fGEucHVzaCgiPC9kaXY+Iil9LHRoaXMuJHJlbmRlckxpbmU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoIXRoaXMuc2Vzc2lvbi5pc1Jvd0ZvbGRlZChiKSl7dmFyIGU9dGhpcy5zZXNzaW9uLmdldFJvd1NwbGl0RGF0YShiKTt0aGlzLiRyZW5kZXJMaW5lQ29yZShhLGIsYyxlLGQpfWVsc2UgdGhpcy4kcmVuZGVyRm9sZExpbmUoYSxiLGMsZCl9LHRoaXMuJHJlbmRlckZvbGRMaW5lPWZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGgoYSxiLGMpe3ZhciBkPTAsZT0wO3doaWxlKGUrYVtkXS52YWx1ZS5sZW5ndGg8Yil7ZSs9YVtkXS52YWx1ZS5sZW5ndGgsZCsrO2lmKGQ9PWEubGVuZ3RoKXJldHVybn1pZihlIT1iKXt2YXIgZj1hW2RdLnZhbHVlLnN1YnN0cmluZyhiLWUpO2YubGVuZ3RoPmMtYiYmKGY9Zi5zdWJzdHJpbmcoMCxjLWIpKSxnLnB1c2goe3R5cGU6YVtkXS50eXBlLHZhbHVlOmZ9KSxlPWIrZi5sZW5ndGgsZCs9MX13aGlsZShlPGMpe3ZhciBmPWFbZF0udmFsdWU7Zi5sZW5ndGgrZT5jJiYoZj1mLnN1YnN0cmluZygwLGMtZSkpLGcucHVzaCh7dHlwZTphW2RdLnR5cGUsdmFsdWU6Zn0pLGUrPWYubGVuZ3RoLGQrPTF9fXZhciBlPXRoaXMuc2Vzc2lvbixmPWUuZ2V0Rm9sZExpbmUoYiksZz1bXTtmLndhbGsoZnVuY3Rpb24oYSxiLGQsZSxmKXthP2cucHVzaCh7dHlwZToiZm9sZCIsdmFsdWU6YX0pOihmJiYoYz10aGlzLnNlc3Npb24uZ2V0VG9rZW5zKGIsYilbMF0udG9rZW5zKSxjLmxlbmd0aCE9MCYmaChjLGUsZCkpfS5iaW5kKHRoaXMpLGYuZW5kLnJvdyx0aGlzLnNlc3Npb24uZ2V0TGluZShmLmVuZC5yb3cpLmxlbmd0aCk7dmFyIGk9dGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZT90aGlzLnNlc3Npb24uJHdyYXBEYXRhW2JdOm51bGw7dGhpcy4kcmVuZGVyTGluZUNvcmUoYSxiLGcsaSxkKX0sdGhpcy4kdXNlTGluZUdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lciksdGhpcy4kbWVhc3VyZU5vZGUmJnRoaXMuJG1lYXN1cmVOb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kbWVhc3VyZU5vZGUpLGRlbGV0ZSB0aGlzLiRtZWFzdXJlTm9kZX19KSkuY2FsbChpLnByb3RvdHlwZSksYi5UZXh0PWl9KSxhY2UuZGVmaW5lKCJhY2UvbGF5ZXIvY3Vyc29yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9kb20iKSxlPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9ImFjZV9sYXllciBhY2VfY3Vyc29yLWxheWVyIixhLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCksdGhpcy5jdXJzb3I9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmN1cnNvci5jbGFzc05hbWU9ImFjZV9jdXJzb3IgYWNlX2hpZGRlbiIsdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY3Vyc29yKSx0aGlzLmlzVmlzaWJsZT0hMX07KChmdW5jdGlvbigpe3RoaXMuJHBhZGRpbmc9MCx0aGlzLnNldFBhZGRpbmc9ZnVuY3Rpb24oYSl7dGhpcy4kcGFkZGluZz1hfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oYSl7dGhpcy5zZXNzaW9uPWF9LHRoaXMuaGlkZUN1cnNvcj1mdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlPSExLGQuYWRkQ3NzQ2xhc3ModGhpcy5jdXJzb3IsImFjZV9oaWRkZW4iKSxjbGVhckludGVydmFsKHRoaXMuYmxpbmtJZCl9LHRoaXMuc2hvd0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlPSEwLGQucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jdXJzb3IsImFjZV9oaWRkZW4iKSx0aGlzLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLnJlc3RhcnRUaW1lcigpfSx0aGlzLnJlc3RhcnRUaW1lcj1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5ibGlua0lkKTtpZighdGhpcy5pc1Zpc2libGUpcmV0dXJuO3ZhciBhPXRoaXMuY3Vyc29yO3RoaXMuYmxpbmtJZD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2Euc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIn0sNDAwKX0sMWUzKX0sdGhpcy5nZXRQaXhlbFBvc2l0aW9uPWZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuY29uZmlnfHwhdGhpcy5zZXNzaW9uKXJldHVybntsZWZ0OjAsdG9wOjB9O2F8fChhPXRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkpO3ZhciBjPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oYSksZD1NYXRoLnJvdW5kKHRoaXMuJHBhZGRpbmcrYy5jb2x1bW4qdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGgpLGU9KGMucm93LShiP3RoaXMuY29uZmlnLmZpcnN0Um93U2NyZWVuOjApKSp0aGlzLmNvbmZpZy5saW5lSGVpZ2h0O3JldHVybntsZWZ0OmQsdG9wOmV9fSx0aGlzLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLmNvbmZpZz1hLHRoaXMucGl4ZWxQb3M9dGhpcy5nZXRQaXhlbFBvc2l0aW9uKG51bGwsITApLHRoaXMuY3Vyc29yLnN0eWxlLmxlZnQ9dGhpcy5waXhlbFBvcy5sZWZ0KyJweCIsdGhpcy5jdXJzb3Iuc3R5bGUudG9wPXRoaXMucGl4ZWxQb3MudG9wKyJweCIsdGhpcy5jdXJzb3Iuc3R5bGUud2lkdGg9YS5jaGFyYWN0ZXJXaWR0aCsicHgiLHRoaXMuY3Vyc29yLnN0eWxlLmhlaWdodD1hLmxpbmVIZWlnaHQrInB4Ijt2YXIgYj10aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCk7YiE9dGhpcy5vdmVyd3JpdGUmJih0aGlzLm92ZXJ3cml0ZT1iLGI/ZC5hZGRDc3NDbGFzcyh0aGlzLmN1cnNvciwiYWNlX292ZXJ3cml0ZSIpOmQucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jdXJzb3IsImFjZV9vdmVyd3JpdGUiKSksdGhpcy5yZXN0YXJ0VGltZXIoKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLmJsaW5rSWQpfX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLkN1cnNvcj1lfSksYWNlLmRlZmluZSgiYWNlL3Njcm9sbGJhciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2xpYi9vb3AiKSxlPWEoIi4vbGliL2RvbSIpLGY9YSgiLi9saWIvZXZlbnQiKSxnPWEoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsaD1mdW5jdGlvbihhKXt0aGlzLmVsZW1lbnQ9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJhY2Vfc2IiLHRoaXMuaW5uZXI9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lciksYS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpLHRoaXMud2lkdGg9ZS5zY3JvbGxiYXJXaWR0aChhLm93bmVyRG9jdW1lbnQpLHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aD0odGhpcy53aWR0aHx8MTUpKzUrInB4IixmLmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwic2Nyb2xsIix0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpfTsoKGZ1bmN0aW9uKCl7ZC5pbXBsZW1lbnQodGhpcyxnKSx0aGlzLm9uU2Nyb2xsPWZ1bmN0aW9uKCl7dGhpcy5fZW1pdCgic2Nyb2xsIix7ZGF0YTp0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wfSl9LHRoaXMuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sdGhpcy5zZXRIZWlnaHQ9ZnVuY3Rpb24oYSl7dGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodD1hKyJweCJ9LHRoaXMuc2V0SW5uZXJIZWlnaHQ9ZnVuY3Rpb24oYSl7dGhpcy5pbm5lci5zdHlsZS5oZWlnaHQ9YSsicHgifSx0aGlzLnNldFNjcm9sbFRvcD1mdW5jdGlvbihhKXt0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wPWF9fSkpLmNhbGwoaC5wcm90b3R5cGUpLGIuU2Nyb2xsQmFyPWh9KSxhY2UuZGVmaW5lKCJhY2UvcmVuZGVybG9vcCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZXZlbnQiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vbGliL2V2ZW50IiksZT1mdW5jdGlvbihhLGIpe3RoaXMub25SZW5kZXI9YSx0aGlzLnBlbmRpbmc9ITEsdGhpcy5jaGFuZ2VzPTAsdGhpcy53aW5kb3c9Ynx8d2luZG93fTsoKGZ1bmN0aW9uKCl7dGhpcy5zY2hlZHVsZT1mdW5jdGlvbihhKXt0aGlzLmNoYW5nZXM9dGhpcy5jaGFuZ2VzfGE7aWYoIXRoaXMucGVuZGluZyl7dGhpcy5wZW5kaW5nPSEwO3ZhciBiPXRoaXM7ZC5uZXh0VGljayhmdW5jdGlvbigpe2IucGVuZGluZz0hMTt2YXIgYTt3aGlsZShhPWIuY2hhbmdlcyliLmNoYW5nZXM9MCxiLm9uUmVuZGVyKGEpfSx0aGlzLndpbmRvdyl9fX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLlJlbmRlckxvb3A9ZX0pLGFjZS5kZWZpbmUoInRleHQhYWNlL2Nzcy9lZGl0b3IuY3NzIixbXSwiQGltcG9ydCB1cmwoLy9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnMrTW9ubyk7XG5cblxuLmFjZV9lZGl0b3Ige1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ01lbmxvJywgJ1VidW50dSBNb25vJywgJ0Ryb2lkIFNhbnMgTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcbiAgICBmb250LXNpemU6IDEycHg7XG59XG5cbi5hY2Vfc2Nyb2xsZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xufVxuXG4uYWNlX2NvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgY3Vyc29yOiB0ZXh0O1xufVxuXG4vKiBzZXR0aW5nIHBvaW50ZXItZXZlbnRzOiBhdXRvOyBvbiBub2RlIHVuZGVyIHRoZSBtb3VzZSwgd2hpY2ggY2hhbmdlcyBkdXJpbmcgc2Nyb2xsLFxuICB3aWxsIGJyZWFrIG1vdXNlIHdoZWVsIHNjcm9sbGluZyBpbiBTYWZhcmkgKi9cbi5hY2VfY29udGVudCAqIHtcbiAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5hY2VfY29tcG9zaXRpb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiAjNTU1O1xuICAgIGNvbG9yOiAjREREO1xuICAgIHotaW5kZXg6IDQ7XG59XG5cbi5hY2VfZ3V0dGVyIC5hY2VfbGF5ZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtaW4td2lkdGg6IDU0cHg7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi5hY2VfZ3V0dGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3ZlcmZsb3cgOiBoaWRkZW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLmFjZV9ndXR0ZXItY2VsbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAxOXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDZweDtcbn1cblxuLmFjZV9ndXR0ZXItY2VsbC5hY2VfZXJyb3Ige1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvZ2lmLEdJRjg5YSUxMCUwMCUxMCUwMCVENSUwMCUwMCVGNW9yJUY1JTg3JTg4JUY1bnIlRjRucyVFQm1xJUY1eiU3RiVEREpUJURFS1MlREZPVyVGMVljJUYyYWglQ0UoNyVDRSk4JUQxOEUlREQlNDBNJUYyS1olRUJVJTYwJUY0JTYwbSVEQ2lyJUM4JTE2KCVDOCUxOSolQ0UlMjU1JUYxJTNGUiVGMSUzRlMlRTYlQUIlQjUlQ0ElNURJJUNFbiU1RSVGNyVBMiU5QSVDOUclM0UlRTBhJTVCJUY3JTg5JTg1JUY1eXklRjYlODIlODAlRUQlODIlODAlRkYlQkYlQkYlRTMlQzQlQzQlRkYlRkYlRkYlRkYlRkYlRkYlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAhJUY5JTA0JTAxJTAwJTAwJTI1JTAwJTJDJTAwJTAwJTAwJTAwJTEwJTAwJTEwJTAwJTAwJTA2cCVDMCU5MnBIJTJDJTFBJThGJUM4JUQySCU5MyVFMWQ0JTIzJUU0JTg4JUQzJTA5bUIlMUROJUI0OCVGNSU5MCU0MCU2MCU5MkclNUIlOTQlMjAlM0UlMjIlRDIlODclMjQlRkElMjAlMjQlQzUlMDZBJTAwJTIwJUIxJTA3JTAyQiVBMzglODlYLnYlMTclODIlMTElMTNxJTEwJTBGaSUyNCUwRiU4QiUxMCU3QkQlMTIlMEVpJTA5JTkyJTA5JTBFcEQlMTglMTUlMjQlMEElOUNpJTA1JTBDJTE4RiUxOCUwQiUwNyUwNCUwMSUwNCUwNiVBMEglMTglMTIlMEQlMTQlMEQlMTIlQTFJJUIzJUI0JUI1SUElMDAlM0JcIik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1xufVxuXG4uYWNlX2d1dHRlci1jZWxsLmFjZV93YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL2dpZixHSUY4OWElMTAlMDAlMTAlMDAlRDUlMDAlMDAlRkYlREJyJUZGJURFJTgxJUZGJUUyJThEJUZGJUUyJThGJUZGJUU0JTk2JUZGJUUzJTk3JUZGJUU1JTlEJUZGJUU2JTlFJUZGJUVFJUMxJUZGJUM4WiVGRiVDRGslRkYlRDBzJUZGJUQ0JTgxJUZGJUQ1JTgyJUZGJUQ1JTgzJUZGJURDJTk3JUZGJURFJTlEJUZGJUU3JUI4JUZGJUNDbCU3QlElMTMlODBVJTE1JTgyVyUxNiU4MVUlMTYlODklNUIlMTglODclNUIlMTglOEMlNUUlMUElOTRkJTFEJUM1JTgzLSVDOSU4NyUyRiVDNiU4NC4lQzYlODUuJUNEJThCMiVDOSU4NzElQ0IlOEEzJUNEJThCNSVEQyU5OCUzRiVERiU5QkIlRTAlOUNDJUUxJUE1VSVDQiU4NzElQ0YlOEI1JUQxJThENiVEQiU5NyU0MCVERiU5QUIlREQlOTlCJUUzJUIwcCVFNyVDQyVBRSVGRiVGRiVGRiUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCElRjklMDQlMDElMDAlMDAlMkYlMDAlMkMlMDAlMDAlMDAlMDAlMTAlMDAlMTAlMDAlMDAlMDZhJUMwJTk3cEglMkMlMUElOEZIJUExJUFCVHIlMjUlODclMkIlMDQlODIlRjQlN0MlQjlYJTkxJTA4JUNCJTk5JTFDISUyNiUxMyU4NCppSjkoJTE1RyVDQSU4NCUxNCUwMSUxQSU5NyUwQyUwMyU4MCUzQSU5QSUzRSU4MSU4NCUzRSUxMSUwOCVCMSU4QiUyMCUwMiUxMiUwRiUxOCUxQSUwRiUwQSUwMydGJTFDJTA0JTBCJTEwJTE2JTE4JTEwJTBCJTA1JTFDRiUxRC0lMDYlMDclOUElOUEtJTFFRyUxQiVBMCVBMSVBMFUlQTQlQTUlQTZCQSUwMCUzQlwiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XG59XG5cbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTVFBQUFBQUFFRkJRVkpTVWw1ZVhtUmtaR3RyYTM5L2Y0V0ZoWW1KaVpHUmthYW1wcnk4dk1QRHc4ek16TlhWMWR6YzNPVGs1T3JxNnZEdzhQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFrQUFCUUFMQUFBQUFBUUFCQUFBQVV1SUNXT1pHbWVhQm1sNVhHd0ZDUVNCR3lYUlNBd3RxUUlpUnVpd0lNNUJvWVZiRUZJeUdDUW9lSkdyVnB0SVFBN1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XG59XG5cbi5hY2VfZWRpdG9yIC5hY2Vfc2Ige1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIHJpZ2h0OiAwO1xufVxuXG4uYWNlX2VkaXRvciAuYWNlX3NiIGRpdiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbGVmdDogMDtcbn1cblxuLmFjZV9lZGl0b3IgLmFjZV9wcmludF9tYXJnaW5fbGF5ZXIge1xuICAgIHotaW5kZXg6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWFyZ2luOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4uYWNlX2VkaXRvciAuYWNlX3ByaW50X21hcmdpbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGhlaWdodDogMTAwJTtcbn1cblxuLmFjZV9lZGl0b3IgdGV4dGFyZWEge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiAwO1xuICAgIHdpZHRoOiAxMHB4O1xuICAgIGhlaWdodDogMzBweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICByZXNpemU6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uYWNlX2xheWVyIHtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmFjZV90ZXh0LWxheWVyIHtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi5hY2VfY2prIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uYWNlX2N1cnNvci1sYXllciB7XG4gICAgei1pbmRleDogNDtcbn1cblxuLmFjZV9jdXJzb3Ige1xuICAgIHotaW5kZXg6IDQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4uYWNlX2N1cnNvci5hY2VfaGlkZGVuIHtcbiAgICBvcGFjaXR5OiAwLjI7XG59XG5cbi5hY2VfbGluZSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMztcbn1cblxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiA0O1xufVxuXG4uYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiA1O1xufVxuXG4uYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMjtcbn1cblxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogNjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5hY2VfbGluZSAuYWNlX2ZvbGQge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAxMXB4O1xuICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAgIGJhY2tncm91bmQtaW1hZ2U6IFxuICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTExJTAwJTAwJTAwJTA5JTA4JTA2JTAwJTAwJTAwJUQ0JUU4JUM3JTBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmslRDNQJTE0JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVCQSVDRFolRUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3JUYxJTA3JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2JTIyJUIzJTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVolRDMlMTQlMkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZDaE0lOEIlODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYlQUIlRkVjJUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0dCUxMyVFMCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4RCUyMyU5NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDglQ0UlODElMTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZzJTgzJUYyXyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFGOSU3RHAlOEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVBRSUxMSUyNiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGklRTYlMEIlMDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUlMDQlRUIxJUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3RiU0MCVGRSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNBViVEQiVEQiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENhJTlBYyVDNCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFDR3glQzlfJTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJDJTE1JTg1JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEzbiVFMTclQjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1NiVFNiU5MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4KmwlMEFPJTg1JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMlQ0QlQzYlRUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUlMjRNJTlDJThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVDQyU1RCVFMSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVCN28lODhhJUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVEQiclRjYlM0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAwJTAzJTI1bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBPJTJCJTBBbyU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQlRTZpX3M5JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0JTA5JUIwJTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1hJUJBJThCJTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3JUU0JTdGJTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUwMCUwMCUwQiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCVCNUlEQVQoJTE1JUE1JTkxJTNEJTBFJTAyISUxMCU4NWFjJUUxJTA1JUQ2JUNFJUQ2JUM2JUNFJUQyJUU4JUVEJUNEJURFJUMwJUM2JUQ2Ti4lRTBWJUY4JTNEJTlDYSU4OTFYSCVDMiVCRSVEOXklM0YlOTAhJUU2JTlDJUMzJUJGayVFNSUwMTElQzYtJUY1JUM4TiUwNCVERiVCRCVGRiU4OSVERnQlODNETiU2MCUzRSVGMyVBQiVBMCVERSUxQSU1RGclQkUlMTBRJTk3JTFCJTQwJTlDJUE4byUxMCU4RiU1RSU4MjglQjQlMUIlNjAlODclRjYlMDIlMjYlODUlMUNoJTFFJUMxJTJCJTVCayVGRiU4NiVFRSVCN2olMDklOUElREElOUIlQUNlJUEzJUY5JUVDJURBITklQjQlRDUlQTYlODElODYlODYlOTglQ0MlM0MlNUIlNDAlRkElODElQjMlRTklQ0IlMjMlOTQlQzE2QXpvJTA1JUQ0JUUxJUMxJTk1YSUzQiU4QSclQTAlRTglQ0MlMTclMjIlODUlMUQlQkElMDAlQTIlRkElREMlMEElOTQlRDElRDElOEQlOEIlM0ElODQlMTdCJUM3JTYwJTFBJTI1WiVGQyU4RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpLFxuICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwNyUwOCUwNiUwMCUwMCUwMCVDNCVERCU4MEMlMDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNBZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUElQzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdCJTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIyeSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMlMjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTNDJUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTglQkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlBJTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIlRjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIlQjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgxJUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhRJUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0UlREUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUlQzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVolRUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYlM0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDElQkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlDJTE4JTAwJTAwJTAwJTNBSURBVDglMTFjJUZDJUZGJUZGJTdGJTE4JTAzJTFBJTYwJTAxJUYyJTNGJUEwJTg5MSU4MCUwNCVGRiUxMS0lRjglMTclOUJKJUUyJTA1JUIxWkQlODF2JTI2dCVFNyU4MCVGOCVBMyU4MmglQTEyJTFBJTIwJUEzJTAxJTAyJTBGJTAxJUJBJTI1JTA2JTAwJTE5JUMwJTBEJUFFRiVENSUzRVMlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQteDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG4uYWNlX2RhcmsgLmFjZV9mb2xkIHtcbn1cblxuLmFjZV9mb2xkOmhvdmVye1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IFxuICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTExJTAwJTAwJTAwJTA5JTA4JTA2JTAwJTAwJTAwJUQ0JUU4JUM3JTBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmslRDNQJTE0JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVCQSVDRFolRUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3JUYxJTA3JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2JTIyJUIzJTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVolRDMlMTQlMkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZDaE0lOEIlODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYlQUIlRkVjJUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0dCUxMyVFMCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4RCUyMyU5NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDglQ0UlODElMTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZzJTgzJUYyXyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFGOSU3RHAlOEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVBRSUxMSUyNiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGklRTYlMEIlMDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUlMDQlRUIxJUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3RiU0MCVGRSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNBViVEQiVEQiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENhJTlBYyVDNCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFDR3glQzlfJTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJDJTE1JTg1JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEzbiVFMTclQjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1NiVFNiU5MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4KmwlMEFPJTg1JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMlQ0QlQzYlRUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUlMjRNJTlDJThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVDQyU1RCVFMSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVCN28lODhhJUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVEQiclRjYlM0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAwJTAzJTI1bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBPJTJCJTBBbyU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQlRTZpX3M5JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0JTA5JUIwJTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1hJUJBJThCJTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3JUU0JTdGJTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUwMCUwMCUwQiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCVCNUlEQVQoJTE1JUE1JTkxJTNEJTBFJTAyISUxMCU4NWFjJUUxJTA1JUQ2JUNFJUQ2JUM2JUNFJUQyJUU4JUVEJUNEJURFJUMwJUM2JUQ2Ti4lRTBWJUY4JTNEJTlDYSU4OTFYSCVDMiVCRSVEOXklM0YlOTAhJUU2JTlDJUMzJUJGayVFNSUwMTElQzYtJUY1JUM4TiUwNCVERiVCRCVGRiU4OSVERnQlODNETiU2MCUzRSVGMyVBQiVBMCVERSUxQSU1RGclQkUlMTBRJTk3JTFCJTQwJTlDJUE4byUxMCU4RiU1RSU4MjglQjQlMUIlNjAlODclRjYlMDIlMjYlODUlMUNoJTFFJUMxJTJCJTVCayVGRiU4NiVFRSVCN2olMDklOUElREElOUIlQUNlJUEzJUY5JUVDJURBITklQjQlRDUlQTYlODElODYlODYlOTglQ0MlM0MlNUIlNDAlRkElODElQjMlRTklQ0IlMjMlOTQlQzE2QXpvJTA1JUQ0JUUxJUMxJTk1YSUzQiU4QSclQTAlRTglQ0MlMTclMjIlODUlMUQlQkElMDAlQTIlRkElREMlMEElOTQlRDElRDElOEQlOEIlM0ElODQlMTdCJUM3JTYwJTFBJTI1WiVGQyU4RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpLFxuICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwNyUwOCUwNiUwMCUwMCUwMCVDNCVERCU4MEMlMDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNBZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUElQzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdCJTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIyeSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMlMjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTNDJUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTglQkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlBJTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIlRjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIlQjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgxJUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhRJUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0UlREUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUlQzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVolRUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYlM0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDElQkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlDJTE4JTAwJTAwJTAwM0lEQVQ4JTExYyVGQyVGRiVGRiU3RiUzRSUwMyUxQSU2MCUwMSVGMiUzRiVBMyU4OTElODAlMDQlRkZRJTI2JUY4dyVDMCVCNDMlQTElREIlMEMlRTIlOEYlMEElQTIlODUlQ0FoJTgwJThDJTA2JTA4JTNDJTA0JUU4JTk2JTE4JTAwJUEzUyUwRCVDRCVDRiVEOCVDMSU5RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQsIHJlcGVhdC14O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXIsIHRvcCBsZWZ0O1xufVxuXG4uYWNlX2RyYWdnaW5nIC5hY2VfY29udGVudCB7XG4gICAgY3Vyc29yOiBtb3ZlO1xufVxuXG4uYWNlX2ZvbGRpbmctZW5hYmxlZCAuYWNlX2d1dHRlci1jZWxsIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxM3B4O1xufVxuXG4uYWNlX2ZvbGQtd2lkZ2V0IHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICBtYXJnaW46IDAgLTEycHggMXB4IDFweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIHdpZHRoOiAxMXB4O1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbiAgICBcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwJTA1JTA4JTA2JTAwJTAwJTAwJThEbyUyNiVFNSUwMCUwMCUwMDRJREFUeCVEQWUlOEElQjElMEQlMDAwJTBDJUMyJUYyJTJDSyU5NiVCQyVEMCU4RjklODElODhIJUU5JUQwJTBFJTk2JUMwJTEwJTkyJTNFJTAyJTgwJTVFJTgyJUU0JUE5Ki0lRUVzdyVDOCVDQyUxMSVFRSU5NnclRDglREMlRTkqRWglMEMlMTUxKCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDVweDtcblxuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmFjZV9mb2xkLXdpZGdldC5lbmQge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDUlMDAlMDAlMDAlMDUlMDglMDYlMDAlMDAlMDAlOERvJTI2JUU1JTAwJTAwJTAwNElEQVR4JURBbSVDNyVDMSUwOSUwMDAlMDhDJUQxJThDJUVDRSVDOEUoJThFJUVDJTAyKSUxRVpKJUYxJUMxJyUwNCUwN0klRTElRTUlRUUlQ0FMJUY1JUEyJTk5JTk5JTIyJUUyJUQ2JTFGVSVCNSVGRTAlRDl4JUE3JTI2V3o1JTBFJUQ1JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XG59XG5cbi5hY2VfZm9sZC13aWRnZXQuY2xvc2VkIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTAzJTAwJTAwJTAwJTA2JTA4JTA2JTAwJTAwJTAwJTA2JUU1JTI0JTBDJTAwJTAwJTAwOUlEQVR4JURBNSVDQSVDMSUwOSUwMDAlMDglMDMlQzAlQUMqKCUzRSUwNCVDMSUwRCVCQSVCMSUyMyVBNFVoJUUwJTIwJTgxJUMwJUNDJUY4JTgyJTgxJUFBJUEyJUFBckdmciU4OCUwOCUxMSUxMSUxQyVERCU3RCVFMCVFRSU1QiVGNiVGNiVDQiVCOCUwNVElMkYlRTl0YWklRDklMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcbn1cblxuLmFjZV9mb2xkLXdpZGdldDpob3ZlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgICAtbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIGJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciA0cHg7XG59XG5cbi5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAtbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSk7XG4gICAgLW1vei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1KTtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gICAgYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1KTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xufVxuXG4uYWNlX2ZvbGQtd2lkZ2V0LmludmFsaWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkI0QjQ7XG4gICAgYm9yZGVyLWNvbG9yOiAjREU1NTU1O1xufVxuIiksYWNlLmRlZmluZSgiYWNlL3RoZW1lL3RleHRtYXRlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiLGIuaXNEYXJrPSExLGIuY3NzQ2xhc3M9ImFjZS10bSIsYi5jc3NUZXh0PSIuYWNlLXRtIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10bSAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS10bSAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdG0gLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG0gLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBBMjt9LmFjZS10bSAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0O30uYWNlLXRtIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7fS5hY2UtdG0gLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30gICAgICAgIC5hY2UtdG0gLmFjZV9saW5lIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2IoMTkxLCAxOTEsIDE5MSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjogYmx1ZTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7ICBjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IHJnYig4OCwgOTIsIDI0Nik7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9pbnZhbGlkIHsgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNTMsIDAsIDApOyAgY29sb3I6IHdoaXRlO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSwuYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzIHsgIGNvbG9yOiByZ2IoMTA5LCAxMjEsIDIyMik7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IHJnYigxMDQsIDExOCwgMTM1KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9zdHJpbmcgeyAgY29sb3I6IHJnYigzLCAxMDYsIDcpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQgeyAgY29sb3I6IHJnYig3NiwgMTM2LCAxMDcpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7ICBjb2xvcjogcmdiKDAsIDEwMiwgMjU1KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7ICBjb2xvcjogcmdiKDEyOCwgMTU5LCAxOTEpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiByZ2IoMCwgMCwgMjA1KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV92YXJpYWJsZSB7ICBjb2xvcjogcmdiKDQ5LCAxMzIsIDE0OSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfeG1sX3BlIHsgIGNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTt9LmFjZS10bSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6ICMwMDAwQTI7fS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX21hcmt1cGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6IHJnYigxMiwgNywgMjU1KTt9LmFjZS10bSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7ICBjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHsgIGJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAxOTIpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpOyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwMCwgMjAwLCAyNTApO30uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOnJnYigyOCwgMiwgMjU1KTt9LmFjZS10bSAuYWNlX3N0cmluZy5hY2VfcmVnZXggeyAgY29sb3I6IHJnYigyNTUsIDAsIDApfSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/ace.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZyhhKXt2YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBkKCIiLGEsYil9O2UucGFja2FnZWQ9ITA7dmFyIGY9YjthJiYoYlthXXx8KGJbYV09e30pLGY9YlthXSksZi5kZWZpbmUmJihjLm9yaWdpbmFsPWYuZGVmaW5lKSxmLmRlZmluZT1jLGYucmVxdWlyZSYmKGQub3JpZ2luYWw9Zi5yZXF1aXJlKSxmLnJlcXVpcmU9ZX12YXIgYT0iIixiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7aWYodHlwZW9mIHJlcXVpcmVqcyE9InVuZGVmaW5lZCIpcmV0dXJuO3ZhciBjPWZ1bmN0aW9uKGEsYixkKXtpZih0eXBlb2YgYSE9InN0cmluZyIpe2Mub3JpZ2luYWw/Yy5vcmlnaW5hbC5hcHBseSh3aW5kb3csYXJndW1lbnRzKTooY29uc29sZS5lcnJvcigiZHJvcHBpbmcgbW9kdWxlIGJlY2F1c2UgZGVmaW5lIHdhc24ndCBhIHN0cmluZy4iKSxjb25zb2xlLnRyYWNlKCkpO3JldHVybn1hcmd1bWVudHMubGVuZ3RoPT0yJiYoZD1iKSxjLm1vZHVsZXN8fChjLm1vZHVsZXM9e30pLGMubW9kdWxlc1thXT1kfSxkPWZ1bmN0aW9uKGEsYixjKXtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik9PT0iW29iamVjdCBBcnJheV0iKXt2YXIgZT1bXTtmb3IodmFyIGc9MCxoPWIubGVuZ3RoO2c8aDsrK2cpe3ZhciBpPWYoYSxiW2ddKTtpZighaSYmZC5vcmlnaW5hbClyZXR1cm4gZC5vcmlnaW5hbC5hcHBseSh3aW5kb3csYXJndW1lbnRzKTtlLnB1c2goaSl9YyYmYy5hcHBseShudWxsLGUpfWVsc2V7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgaj1mKGEsYik7cmV0dXJuIWomJmQub3JpZ2luYWw/ZC5vcmlnaW5hbC5hcHBseSh3aW5kb3csYXJndW1lbnRzKTooYyYmYygpLGopfWlmKGQub3JpZ2luYWwpcmV0dXJuIGQub3JpZ2luYWwuYXBwbHkod2luZG93LGFyZ3VtZW50cyl9fSxlPWZ1bmN0aW9uKGEsYil7aWYoYi5pbmRleE9mKCIhIikhPT0tMSl7dmFyIGM9Yi5zcGxpdCgiISIpO3JldHVybiBlKGEsY1swXSkrIiEiK2UoYSxjWzFdKX1pZihiLmNoYXJBdCgwKT09Ii4iKXt2YXIgZD1hLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuam9pbigiLyIpO2I9ZCsiLyIrYjt3aGlsZShiLmluZGV4T2YoIi4iKSE9PS0xJiZmIT1iKXt2YXIgZj1iO2I9Yi5yZXBsYWNlKC9cL1wuXC8vLCIvIikucmVwbGFjZSgvW15cL10rXC9cLlwuXC8vLCIiKX19cmV0dXJuIGJ9LGY9ZnVuY3Rpb24oYSxiKXtiPWUoYSxiKTt2YXIgZj1jLm1vZHVsZXNbYl07aWYoIWYpcmV0dXJuIG51bGw7aWYodHlwZW9mIGY9PSJmdW5jdGlvbiIpe3ZhciBnPXt9LGg9e2lkOmIsdXJpOiIiLGV4cG9ydHM6ZyxwYWNrYWdlZDohMH0saT1mdW5jdGlvbihhLGMpe3JldHVybiBkKGIsYSxjKX0saj1mKGksZyxoKTtyZXR1cm4gZz1qfHxoLmV4cG9ydHMsYy5tb2R1bGVzW2JdPWcsZ31yZXR1cm4gZn07ZyhhKX0pKCksZGVmaW5lKCJhY2UvYWNlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9maXhvbGRicm93c2VycyIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9ldmVudCIsImFjZS9lZGl0b3IiLCJhY2UvZWRpdF9zZXNzaW9uIiwiYWNlL3VuZG9tYW5hZ2VyIiwiYWNlL3ZpcnR1YWxfcmVuZGVyZXIiLCJhY2UvdGhlbWUvdGV4dG1hdGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiLGEoIi4vbGliL2ZpeG9sZGJyb3dzZXJzIik7dmFyIGQ9YSgiLi9saWIvZG9tIiksZT1hKCIuL2xpYi9ldmVudCIpLGY9YSgiLi9lZGl0b3IiKS5FZGl0b3IsZz1hKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uLGg9YSgiLi91bmRvbWFuYWdlciIpLlVuZG9NYW5hZ2VyLGk9YSgiLi92aXJ0dWFsX3JlbmRlcmVyIikuVmlydHVhbFJlbmRlcmVyO2IuZWRpdD1mdW5jdGlvbihiKXt0eXBlb2YgYj09InN0cmluZyImJihiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpKTt2YXIgYz1uZXcgZyhkLmdldElubmVyVGV4dChiKSk7Yy5zZXRVbmRvTWFuYWdlcihuZXcgaCksYi5pbm5lckhUTUw9IiI7dmFyIGo9bmV3IGYobmV3IGkoYixhKCIuL3RoZW1lL3RleHRtYXRlIikpKTtqLnNldFNlc3Npb24oYyk7dmFyIGs9e307cmV0dXJuIGsuZG9jdW1lbnQ9YyxrLmVkaXRvcj1qLGoucmVzaXplKCksZS5hZGRMaXN0ZW5lcih3aW5kb3csInJlc2l6ZSIsZnVuY3Rpb24oKXtqLnJlc2l6ZSgpfSksYi5lbnY9ayxqLmVudj1rLGp9fSksZGVmaW5lKCJhY2UvbGliL2ZpeG9sZGJyb3dzZXJzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9yZWdleHAiLCJhY2UvbGliL2VzNS1zaGltIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IixhKCIuL3JlZ2V4cCIpLGEoIi4vZXM1LXNoaW0iKX0pLGRlZmluZSgiYWNlL2xpYi9yZWdleHAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZyhhKXtyZXR1cm4oYS5nbG9iYWw/ImciOiIiKSsoYS5pZ25vcmVDYXNlPyJpIjoiIikrKGEubXVsdGlsaW5lPyJtIjoiIikrKGEuZXh0ZW5kZWQ/IngiOiIiKSsoYS5zdGlja3k/InkiOiIiKX1mdW5jdGlvbiBoKGEsYixjKXtpZihBcnJheS5wcm90b3R5cGUuaW5kZXhPZilyZXR1cm4gYS5pbmRleE9mKGIsYyk7Zm9yKHZhciBkPWN8fDA7ZDxhLmxlbmd0aDtkKyspaWYoYVtkXT09PWIpcmV0dXJuIGQ7cmV0dXJuLTF9InVzZSBzdHJpY3QiO3ZhciBkPXtleGVjOlJlZ0V4cC5wcm90b3R5cGUuZXhlYyx0ZXN0OlJlZ0V4cC5wcm90b3R5cGUudGVzdCxtYXRjaDpTdHJpbmcucHJvdG90eXBlLm1hdGNoLHJlcGxhY2U6U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLHNwbGl0OlN0cmluZy5wcm90b3R5cGUuc3BsaXR9LGU9ZC5leGVjLmNhbGwoLygpPz8vLCIiKVsxXT09PXVuZGVmaW5lZCxmPWZ1bmN0aW9uKCl7dmFyIGE9L14vZztyZXR1cm4gZC50ZXN0LmNhbGwoYSwiIiksIWEubGFzdEluZGV4fSgpO1JlZ0V4cC5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihhKXt2YXIgYj1kLmV4ZWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGMsaTtpZihiKXshZSYmYi5sZW5ndGg+MSYmaChiLCIiKT4tMSYmKGk9UmVnRXhwKHRoaXMuc291cmNlLGQucmVwbGFjZS5jYWxsKGcodGhpcyksImciLCIiKSksZC5yZXBsYWNlLmNhbGwoYS5zbGljZShiLmluZGV4KSxpLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTE7YTxhcmd1bWVudHMubGVuZ3RoLTI7YSsrKWFyZ3VtZW50c1thXT09PXVuZGVmaW5lZCYmKGJbYV09dW5kZWZpbmVkKX0pKTtpZih0aGlzLl94cmVnZXhwJiZ0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lcylmb3IodmFyIGo9MTtqPGIubGVuZ3RoO2orKyljPXRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzW2otMV0sYyYmKGJbY109YltqXSk7IWYmJnRoaXMuZ2xvYmFsJiYhYlswXS5sZW5ndGgmJnRoaXMubGFzdEluZGV4PmIuaW5kZXgmJnRoaXMubGFzdEluZGV4LS19cmV0dXJuIGJ9LGZ8fChSZWdFeHAucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5leGVjLmNhbGwodGhpcyxhKTtyZXR1cm4gYiYmdGhpcy5nbG9iYWwmJiFiWzBdLmxlbmd0aCYmdGhpcy5sYXN0SW5kZXg+Yi5pbmRleCYmdGhpcy5sYXN0SW5kZXgtLSwhIWJ9KX0pLGRlZmluZSgiYWNlL2xpYi9lczUtc2hpbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBwKGEpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInNlbnRpbmVsIix7fSksInNlbnRpbmVsImluIGF9Y2F0Y2goYil7fX1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYodHlwZW9mIGIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgYz1nLmNhbGwoYXJndW1lbnRzLDEpLGQ9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgZCl7dmFyIGU9ZnVuY3Rpb24oKXt9O2UucHJvdG90eXBlPWIucHJvdG90eXBlO3ZhciBmPW5ldyBlLGg9Yi5hcHBseShmLGMuY29uY2F0KGcuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIGghPT1udWxsJiZPYmplY3QoaCk9PT1oP2g6Zn1yZXR1cm4gYi5hcHBseShhLGMuY29uY2F0KGcuY2FsbChhcmd1bWVudHMpKSl9O3JldHVybiBkfSk7dmFyIGQ9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsZT1BcnJheS5wcm90b3R5cGUsZj1PYmplY3QucHJvdG90eXBlLGc9ZS5zbGljZSxoPWQuYmluZChmLnRvU3RyaW5nKSxpPWQuYmluZChmLmhhc093blByb3BlcnR5KSxqLGssbCxtLG47aWYobj1pKGYsIl9fZGVmaW5lR2V0dGVyX18iKSlqPWQuYmluZChmLl9fZGVmaW5lR2V0dGVyX18pLGs9ZC5iaW5kKGYuX19kZWZpbmVTZXR0ZXJfXyksbD1kLmJpbmQoZi5fX2xvb2t1cEdldHRlcl9fKSxtPWQuYmluZChmLl9fbG9va3VwU2V0dGVyX18pO0FycmF5LmlzQXJyYXl8fChBcnJheS5pc0FycmF5PWZ1bmN0aW9uKGEpe3JldHVybiBoKGEpPT0iW29iamVjdCBBcnJheV0ifSksQXJyYXkucHJvdG90eXBlLmZvckVhY2h8fChBcnJheS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhKXt2YXIgYj1HKHRoaXMpLGM9YXJndW1lbnRzWzFdLGQ9MCxlPWIubGVuZ3RoPj4+MDtpZihoKGEpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3I7d2hpbGUoZDxlKWQgaW4gYiYmYS5jYWxsKGMsYltkXSxkLGIpLGQrK30pLEFycmF5LnByb3RvdHlwZS5tYXB8fChBcnJheS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGEpe3ZhciBiPUcodGhpcyksYz1iLmxlbmd0aD4+PjAsZD1BcnJheShjKSxlPWFyZ3VtZW50c1sxXTtpZihoKGEpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3I7Zm9yKHZhciBmPTA7ZjxjO2YrKylmIGluIGImJihkW2ZdPWEuY2FsbChlLGJbZl0sZixiKSk7cmV0dXJuIGR9KSxBcnJheS5wcm90b3R5cGUuZmlsdGVyfHwoQXJyYXkucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhKXt2YXIgYj1HKHRoaXMpLGM9Yi5sZW5ndGg+Pj4wLGQ9W10sZT1hcmd1bWVudHNbMV07aWYoaChhKSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yO2Zvcih2YXIgZj0wO2Y8YztmKyspZiBpbiBiJiZhLmNhbGwoZSxiW2ZdLGYsYikmJmQucHVzaChiW2ZdKTtyZXR1cm4gZH0pLEFycmF5LnByb3RvdHlwZS5ldmVyeXx8KEFycmF5LnByb3RvdHlwZS5ldmVyeT1mdW5jdGlvbihhKXt2YXIgYj1HKHRoaXMpLGM9Yi5sZW5ndGg+Pj4wLGQ9YXJndW1lbnRzWzFdO2lmKGgoYSkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcjtmb3IodmFyIGU9MDtlPGM7ZSsrKWlmKGUgaW4gYiYmIWEuY2FsbChkLGJbZV0sZSxiKSlyZXR1cm4hMTtyZXR1cm4hMH0pLEFycmF5LnByb3RvdHlwZS5zb21lfHwoQXJyYXkucHJvdG90eXBlLnNvbWU9ZnVuY3Rpb24oYSl7dmFyIGI9Ryh0aGlzKSxjPWIubGVuZ3RoPj4+MCxkPWFyZ3VtZW50c1sxXTtpZihoKGEpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3I7Zm9yKHZhciBlPTA7ZTxjO2UrKylpZihlIGluIGImJmEuY2FsbChkLGJbZV0sZSxiKSlyZXR1cm4hMDtyZXR1cm4hMX0pLEFycmF5LnByb3RvdHlwZS5yZWR1Y2V8fChBcnJheS5wcm90b3R5cGUucmVkdWNlPWZ1bmN0aW9uKGEpe3ZhciBiPUcodGhpcyksYz1iLmxlbmd0aD4+PjA7aWYoaChhKSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yO2lmKCFjJiZhcmd1bWVudHMubGVuZ3RoPT0xKXRocm93IG5ldyBUeXBlRXJyb3I7dmFyIGQ9MCxlO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpZT1hcmd1bWVudHNbMV07ZWxzZSBkb3tpZihkIGluIGIpe2U9YltkKytdO2JyZWFrfWlmKCsrZD49Yyl0aHJvdyBuZXcgVHlwZUVycm9yfXdoaWxlKCEwKTtmb3IoO2Q8YztkKyspZCBpbiBiJiYoZT1hLmNhbGwodm9pZCAwLGUsYltkXSxkLGIpKTtyZXR1cm4gZX0pLEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodHx8KEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodD1mdW5jdGlvbihhKXt2YXIgYj1HKHRoaXMpLGM9Yi5sZW5ndGg+Pj4wO2lmKGgoYSkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcjtpZighYyYmYXJndW1lbnRzLmxlbmd0aD09MSl0aHJvdyBuZXcgVHlwZUVycm9yO3ZhciBkLGU9Yy0xO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpZD1hcmd1bWVudHNbMV07ZWxzZSBkb3tpZihlIGluIGIpe2Q9YltlLS1dO2JyZWFrfWlmKC0tZTwwKXRocm93IG5ldyBUeXBlRXJyb3J9d2hpbGUoITApO2RvIGUgaW4gdGhpcyYmKGQ9YS5jYWxsKHZvaWQgMCxkLGJbZV0sZSxiKSk7d2hpbGUoZS0tKTtyZXR1cm4gZH0pLEFycmF5LnByb3RvdHlwZS5pbmRleE9mfHwoQXJyYXkucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oYSl7dmFyIGI9Ryh0aGlzKSxjPWIubGVuZ3RoPj4+MDtpZighYylyZXR1cm4tMTt2YXIgZD0wO2FyZ3VtZW50cy5sZW5ndGg+MSYmKGQ9RShhcmd1bWVudHNbMV0pKSxkPWQ+PTA/ZDpNYXRoLm1heCgwLGMrZCk7Zm9yKDtkPGM7ZCsrKWlmKGQgaW4gYiYmYltkXT09PWEpcmV0dXJuIGQ7cmV0dXJuLTF9KSxBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Z8fChBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oYSl7dmFyIGI9Ryh0aGlzKSxjPWIubGVuZ3RoPj4+MDtpZighYylyZXR1cm4tMTt2YXIgZD1jLTE7YXJndW1lbnRzLmxlbmd0aD4xJiYoZD1NYXRoLm1pbihkLEUoYXJndW1lbnRzWzFdKSkpLGQ9ZD49MD9kOmMtTWF0aC5hYnMoZCk7Zm9yKDtkPj0wO2QtLSlpZihkIGluIGImJmE9PT1iW2RdKXJldHVybiBkO3JldHVybi0xfSksT2JqZWN0LmdldFByb3RvdHlwZU9mfHwoT2JqZWN0LmdldFByb3RvdHlwZU9mPWZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8KGEuY29uc3RydWN0b3I/YS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6Zil9KTtpZighT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIG89Ik9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgY2FsbGVkIG9uIGEgbm9uLW9iamVjdDogIjtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGEhPSJvYmplY3QiJiZ0eXBlb2YgYSE9ImZ1bmN0aW9uInx8YT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcihvK2EpO2lmKCFpKGEsYikpcmV0dXJuO3ZhciBjLGQsZTtjPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYobil7dmFyIGc9YS5fX3Byb3RvX187YS5fX3Byb3RvX189Zjt2YXIgZD1sKGEsYiksZT1tKGEsYik7YS5fX3Byb3RvX189ZztpZihkfHxlKXJldHVybiBkJiYoYy5nZXQ9ZCksZSYmKGMuc2V0PWUpLGN9cmV0dXJuIGMudmFsdWU9YVtiXSxjfX1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzPWZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3Qua2V5cyhhKX0pLE9iamVjdC5jcmVhdGV8fChPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGEsYil7dmFyIGM7aWYoYT09PW51bGwpYz17Il9fcHJvdG9fXyI6bnVsbH07ZWxzZXtpZih0eXBlb2YgYSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiK3R5cGVvZiBhKyJdICE9ICdvYmplY3QnIik7dmFyIGQ9ZnVuY3Rpb24oKXt9O2QucHJvdG90eXBlPWEsYz1uZXcgZCxjLl9fcHJvdG9fXz1hfXJldHVybiBiIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjLGIpLGN9KTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkpe3ZhciBxPXAoe30pLHI9dHlwZW9mIGRvY3VtZW50PT0idW5kZWZpbmVkInx8cChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7aWYoIXF8fCFyKXZhciBzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eX1pZighT2JqZWN0LmRlZmluZVByb3BlcnR5fHxzKXt2YXIgdD0iUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICIsdT0iT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiLHY9ImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCBvbiB0aGlzIGphdmFzY3JpcHQgZW5naW5lIjtPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBhIT0ib2JqZWN0IiYmdHlwZW9mIGEhPSJmdW5jdGlvbiJ8fGE9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IodSthKTtpZih0eXBlb2YgYyE9Im9iamVjdCImJnR5cGVvZiBjIT0iZnVuY3Rpb24ifHxjPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKHQrYyk7aWYocyl0cnl7cmV0dXJuIHMuY2FsbChPYmplY3QsYSxiLGMpfWNhdGNoKGQpe31pZihpKGMsInZhbHVlIikpaWYobiYmKGwoYSxiKXx8bShhLGIpKSl7dmFyIGU9YS5fX3Byb3RvX187YS5fX3Byb3RvX189ZixkZWxldGUgYVtiXSxhW2JdPWMudmFsdWUsYS5fX3Byb3RvX189ZX1lbHNlIGFbYl09Yy52YWx1ZTtlbHNle2lmKCFuKXRocm93IG5ldyBUeXBlRXJyb3Iodik7aShjLCJnZXQiKSYmaihhLGIsYy5nZXQpLGkoYywic2V0IikmJmsoYSxiLGMuc2V0KX1yZXR1cm4gYX19T2JqZWN0LmRlZmluZVByb3BlcnRpZXN8fChPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBiKWkoYixjKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYyxiW2NdKTtyZXR1cm4gYX0pLE9iamVjdC5zZWFsfHwoT2JqZWN0LnNlYWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSxPYmplY3QuZnJlZXplfHwoT2JqZWN0LmZyZWV6ZT1mdW5jdGlvbihhKXtyZXR1cm4gYX0pO3RyeXtPYmplY3QuZnJlZXplKGZ1bmN0aW9uKCl7fSl9Y2F0Y2godyl7T2JqZWN0LmZyZWV6ZT1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24gYihiKXtyZXR1cm4gdHlwZW9mIGI9PSJmdW5jdGlvbiI/YjphKGIpfX0oT2JqZWN0LmZyZWV6ZSl9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zfHwoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zPWZ1bmN0aW9uKGEpe3JldHVybiBhfSksT2JqZWN0LmlzU2VhbGVkfHwoT2JqZWN0LmlzU2VhbGVkPWZ1bmN0aW9uKGEpe3JldHVybiExfSksT2JqZWN0LmlzRnJvemVufHwoT2JqZWN0LmlzRnJvemVuPWZ1bmN0aW9uKGEpe3JldHVybiExfSksT2JqZWN0LmlzRXh0ZW5zaWJsZXx8KE9iamVjdC5pc0V4dGVuc2libGU9ZnVuY3Rpb24oYSl7aWYoT2JqZWN0KGEpPT09YSl0aHJvdyBuZXcgVHlwZUVycm9yO3ZhciBiPSIiO3doaWxlKGkoYSxiKSliKz0iPyI7YVtiXT0hMDt2YXIgYz1pKGEsYik7cmV0dXJuIGRlbGV0ZSBhW2JdLGN9KTtpZighT2JqZWN0LmtleXMpe3ZhciB4PSEwLHk9WyJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVPZiIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY29uc3RydWN0b3IiXSx6PXkubGVuZ3RoO2Zvcih2YXIgQSBpbnt0b1N0cmluZzpudWxsfSl4PSExO09iamVjdC5rZXlzPWZ1bmN0aW9uIGJkKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0IiYmdHlwZW9mIGEhPSJmdW5jdGlvbiJ8fGE9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgYmQ9W107Zm9yKHZhciBiIGluIGEpaShhLGIpJiZiZC5wdXNoKGIpO2lmKHgpZm9yKHZhciBjPTAsZD16O2M8ZDtjKyspe3ZhciBlPXlbY107aShhLGUpJiZiZC5wdXNoKGUpfXJldHVybiBiZH19aWYoIURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nfHwobmV3IERhdGUoLTYyMTk4NzU1MmU1KSkudG9JU09TdHJpbmcoKS5pbmRleE9mKCItMDAwMDAxIik9PT0tMSlEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3ZhciBhLGIsYyxkO2lmKCFpc0Zpbml0ZSh0aGlzKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjthPVt0aGlzLmdldFVUQ01vbnRoKCkrMSx0aGlzLmdldFVUQ0RhdGUoKSx0aGlzLmdldFVUQ0hvdXJzKCksdGhpcy5nZXRVVENNaW51dGVzKCksdGhpcy5nZXRVVENTZWNvbmRzKCldLGQ9dGhpcy5nZXRVVENGdWxsWWVhcigpLGQ9KGQ8MD8iLSI6ZD45OTk5PyIrIjoiIikrKCIwMDAwMCIrTWF0aC5hYnMoZCkpLnNsaWNlKDA8PWQmJmQ8PTk5OTk/LTQ6LTYpLGI9YS5sZW5ndGg7d2hpbGUoYi0tKWM9YVtiXSxjPDEwJiYoYVtiXT0iMCIrYyk7cmV0dXJuIGQrIi0iK2Euc2xpY2UoMCwyKS5qb2luKCItIikrIlQiK2Euc2xpY2UoMikuam9pbigiOiIpKyIuIisoIjAwMCIrdGhpcy5nZXRVVENNaWxsaXNlY29uZHMoKSkuc2xpY2UoLTMpKyJaIn07RGF0ZS5ub3d8fChEYXRlLm5vdz1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSksRGF0ZS5wcm90b3R5cGUudG9KU09OfHwoRGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiB0aGlzLnRvSVNPU3RyaW5nIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3I7cmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKX0pLERhdGUucGFyc2UoIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWiIpIT09ODY0ZTEzJiYoRGF0ZT1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbiBlKGIsYyxkLGYsZyxoLGkpe3ZhciBqPWFyZ3VtZW50cy5sZW5ndGg7aWYodGhpcyBpbnN0YW5jZW9mIGEpe3ZhciBrPWo9PTEmJlN0cmluZyhiKT09PWI/bmV3IGEoZS5wYXJzZShiKSk6aj49Nz9uZXcgYShiLGMsZCxmLGcsaCxpKTpqPj02P25ldyBhKGIsYyxkLGYsZyxoKTpqPj01P25ldyBhKGIsYyxkLGYsZyk6aj49ND9uZXcgYShiLGMsZCxmKTpqPj0zP25ldyBhKGIsYyxkKTpqPj0yP25ldyBhKGIsYyk6aj49MT9uZXcgYShiKTpuZXcgYTtyZXR1cm4gay5jb25zdHJ1Y3Rvcj1lLGt9cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxjPW5ldyBSZWdFeHAoIl4oXFxkezR9fFsrLV1cXGR7Nn0pKD86LShcXGR7Mn0pKD86LShcXGR7Mn0pKD86VChcXGR7Mn0pOihcXGR7Mn0pKD86OihcXGR7Mn0pKD86XFwuKFxcZHszfSkpPyk/KD86WnwoPzooWy0rXSkoXFxkezJ9KTooXFxkezJ9KSkpPyk/KT8pPyQiKTtmb3IodmFyIGQgaW4gYSliW2RdPWFbZF07cmV0dXJuIGIubm93PWEubm93LGIuVVRDPWEuVVRDLGIucHJvdG90eXBlPWEucHJvdG90eXBlLGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWIsYi5wYXJzZT1mdW5jdGlvbiBmKGIpe3ZhciBkPWMuZXhlYyhiKTtpZihkKXtkLnNoaWZ0KCk7Zm9yKHZhciBlPTE7ZTw3O2UrKylkW2VdPSsoZFtlXXx8KGU8Mz8xOjApKSxlPT0xJiZkW2VdLS07dmFyIGY9K2QucG9wKCksZz0rZC5wb3AoKSxoPWQucG9wKCksaT0wO2lmKGgpe2lmKGc+MjN8fGY+NTkpcmV0dXJuIE5hTjtpPShnKjYwK2YpKjZlNCooaD09IisiPy0xOjEpfXZhciBqPStkWzBdO3JldHVybiAwPD1qJiZqPD05OT8oZFswXT1qKzQwMCxhLlVUQy5hcHBseSh0aGlzLGQpK2ktMTI2MjI3ODA4ZTUpOmEuVVRDLmFwcGx5KHRoaXMsZCkraX1yZXR1cm4gYS5wYXJzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGJ9KERhdGUpKTt2YXIgQj0iXHRcbgtcZlxyIMKg4ZqA4aCO4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXHUyMDI4XHUyMDI577u/IjtpZighU3RyaW5nLnByb3RvdHlwZS50cmltfHxCLnRyaW0oKSl7Qj0iWyIrQisiXSI7dmFyIEM9bmV3IFJlZ0V4cCgiXiIrQitCKyIqIiksRD1uZXcgUmVnRXhwKEIrQisiKiQiKTtTdHJpbmcucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoQywiIikucmVwbGFjZShELCIiKX19dmFyIEU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9K2EsYSE9PWE/YT0wOmEhPT0wJiZhIT09MS8wJiZhIT09LUluZmluaXR5JiYoYT0oYT4wfHwtMSkqTWF0aC5mbG9vcihNYXRoLmFicyhhKSkpLGF9LEY9ImEiWzBdIT0iYSIsRz1mdW5jdGlvbihhKXtpZihhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3I7cmV0dXJuIEYmJnR5cGVvZiBhPT0ic3RyaW5nIiYmYT9hLnNwbGl0KCIiKTpPYmplY3QoYSl9fSksZGVmaW5lKCJhY2UvbGliL2RvbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2IuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihhLGIpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlM/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGJ8fGQsYSk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChhKX0sYi5zZXRUZXh0PWZ1bmN0aW9uKGEsYil7YS5pbm5lclRleHQhPT11bmRlZmluZWQmJihhLmlubmVyVGV4dD1iKSxhLnRleHRDb250ZW50IT09dW5kZWZpbmVkJiYoYS50ZXh0Q29udGVudD1iKX0sYi5oYXNDc3NDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyk7cmV0dXJuIGMuaW5kZXhPZihiKSE9PS0xfSxiLmFkZENzc0NsYXNzPWZ1bmN0aW9uKGEsYyl7Yi5oYXNDc3NDbGFzcyhhLGMpfHwoYS5jbGFzc05hbWUrPSIgIitjKX0sYi5yZW1vdmVDc3NDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyk7Zm9yKDs7KXt2YXIgZD1jLmluZGV4T2YoYik7aWYoZD09LTEpYnJlYWs7Yy5zcGxpY2UoZCwxKX1hLmNsYXNzTmFtZT1jLmpvaW4oIiAiKX0sYi50b2dnbGVDc3NDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyksZD0hMDtmb3IoOzspe3ZhciBlPWMuaW5kZXhPZihiKTtpZihlPT0tMSlicmVhaztkPSExLGMuc3BsaWNlKGUsMSl9cmV0dXJuIGQmJmMucHVzaChiKSxhLmNsYXNzTmFtZT1jLmpvaW4oIiAiKSxkfSxiLnNldENzc0NsYXNzPWZ1bmN0aW9uKGEsYyxkKXtkP2IuYWRkQ3NzQ2xhc3MoYSxjKTpiLnJlbW92ZUNzc0NsYXNzKGEsYyl9LGIuaGFzQ3NzU3RyaW5nPWZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkO2I9Ynx8ZG9jdW1lbnQ7aWYoYi5jcmVhdGVTdHlsZVNoZWV0JiYoZD1iLnN0eWxlU2hlZXRzKSl7d2hpbGUoYzxkLmxlbmd0aClpZihkW2MrK10udGl0bGU9PT1hKXJldHVybiEwfWVsc2UgaWYoZD1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdHlsZSIpKXdoaWxlKGM8ZC5sZW5ndGgpaWYoZFtjKytdLmlkPT09YSlyZXR1cm4hMDtyZXR1cm4hMX0sYi5pbXBvcnRDc3NTdHJpbmc9ZnVuY3Rpb24gZShhLGMsZSl7ZT1lfHxkb2N1bWVudDtpZihjJiZiLmhhc0Nzc1N0cmluZyhjLGUpKXJldHVybiBudWxsO3ZhciBmO2lmKGUuY3JlYXRlU3R5bGVTaGVldClmPWUuY3JlYXRlU3R5bGVTaGVldCgpLGYuY3NzVGV4dD1hLGMmJihmLnRpdGxlPWMpO2Vsc2V7Zj1lLmNyZWF0ZUVsZW1lbnROUz9lLmNyZWF0ZUVsZW1lbnROUyhkLCJzdHlsZSIpOmUuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxmLmFwcGVuZENoaWxkKGUuY3JlYXRlVGV4dE5vZGUoYSkpLGMmJihmLmlkPWMpO3ZhciBnPWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8ZS5kb2N1bWVudEVsZW1lbnQ7Zy5hcHBlbmRDaGlsZChmKX19LGIuaW1wb3J0Q3NzU3R5bHNoZWV0PWZ1bmN0aW9uKGEsYyl7aWYoYy5jcmVhdGVTdHlsZVNoZWV0KWMuY3JlYXRlU3R5bGVTaGVldChhKTtlbHNle3ZhciBkPWIuY3JlYXRlRWxlbWVudCgibGluayIpO2QucmVsPSJzdHlsZXNoZWV0IixkLmhyZWY9YTt2YXIgZT1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O2UuYXBwZW5kQ2hpbGQoZCl9fSxiLmdldElubmVyV2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGIuY29tcHV0ZWRTdHlsZShhLCJwYWRkaW5nTGVmdCIpLDEwKStwYXJzZUludChiLmNvbXB1dGVkU3R5bGUoYSwicGFkZGluZ1JpZ2h0IiksMTApK2EuY2xpZW50V2lkdGh9LGIuZ2V0SW5uZXJIZWlnaHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGIuY29tcHV0ZWRTdHlsZShhLCJwYWRkaW5nVG9wIiksMTApK3BhcnNlSW50KGIuY29tcHV0ZWRTdHlsZShhLCJwYWRkaW5nQm90dG9tIiksMTApK2EuY2xpZW50SGVpZ2h0fSx3aW5kb3cucGFnZVlPZmZzZXQhPT11bmRlZmluZWQ/KGIuZ2V0UGFnZVNjcm9sbFRvcD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGFnZVlPZmZzZXR9LGIuZ2V0UGFnZVNjcm9sbExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0fSk6KGIuZ2V0UGFnZVNjcm9sbFRvcD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcH0sYi5nZXRQYWdlU2Nyb2xsTGVmdD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR9KSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT9iLmNvbXB1dGVkU3R5bGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj8od2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwiIil8fHt9KVtiXXx8IiI6d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwiIil8fHt9fTpiLmNvbXB1dGVkU3R5bGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9hLmN1cnJlbnRTdHlsZVtiXTphLmN1cnJlbnRTdHlsZX0sYi5zY3JvbGxiYXJXaWR0aD1mdW5jdGlvbihhKXt2YXIgYz1iLmNyZWF0ZUVsZW1lbnQoInAiKTtjLnN0eWxlLndpZHRoPSIxMDAlIixjLnN0eWxlLm1pbldpZHRoPSIwcHgiLGMuc3R5bGUuaGVpZ2h0PSIyMDBweCI7dmFyIGQ9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPWQuc3R5bGU7ZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUubGVmdD0iLTEwMDAwcHgiLGUub3ZlcmZsb3c9ImhpZGRlbiIsZS53aWR0aD0iMjAwcHgiLGUubWluV2lkdGg9IjBweCIsZS5oZWlnaHQ9IjE1MHB4IixkLmFwcGVuZENoaWxkKGMpO3ZhciBmPWEuYm9keXx8YS5kb2N1bWVudEVsZW1lbnQ7Zi5hcHBlbmRDaGlsZChkKTt2YXIgZz1jLm9mZnNldFdpZHRoO2Uub3ZlcmZsb3c9InNjcm9sbCI7dmFyIGg9Yy5vZmZzZXRXaWR0aDtyZXR1cm4gZz09aCYmKGg9ZC5jbGllbnRXaWR0aCksZi5yZW1vdmVDaGlsZChkKSxnLWh9LGIuc2V0SW5uZXJIdG1sPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5jbG9uZU5vZGUoITEpO3JldHVybiBjLmlubmVySFRNTD1iLGEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYyxhKSxjfSxiLnNldElubmVyVGV4dD1mdW5jdGlvbihhLGIpe3ZhciBjPWEub3duZXJEb2N1bWVudDtjLmJvZHkmJiJ0ZXh0Q29udGVudCJpbiBjLmJvZHk/YS50ZXh0Q29udGVudD1iOmEuaW5uZXJUZXh0PWJ9LGIuZ2V0SW5uZXJUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiPWEub3duZXJEb2N1bWVudDtyZXR1cm4gYi5ib2R5JiYidGV4dENvbnRlbnQiaW4gYi5ib2R5P2EudGV4dENvbnRlbnQ6YS5pbm5lclRleHR8fGEudGV4dENvbnRlbnR8fCIifSxiLmdldFBhcmVudFdpbmRvdz1mdW5jdGlvbihhKXtyZXR1cm4gYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d9fSksZGVmaW5lKCJhY2UvbGliL2V2ZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEsYixjKXt2YXIgZj0wO2UuaXNPcGVyYSYmZS5pc01hYz9mPTB8KGIubWV0YUtleT8xOjApfChiLmFsdEtleT8yOjApfChiLnNoaWZ0S2V5PzQ6MCl8KGIuY3RybEtleT84OjApOmY9MHwoYi5jdHJsS2V5PzE6MCl8KGIuYWx0S2V5PzI6MCl8KGIuc2hpZnRLZXk/NDowKXwoYi5tZXRhS2V5Pzg6MCk7aWYoYyBpbiBkLk1PRElGSUVSX0tFWVMpe3N3aXRjaChkLk1PRElGSUVSX0tFWVNbY10pe2Nhc2UiQWx0IjpmPTI7YnJlYWs7Y2FzZSJTaGlmdCI6Zj00O2JyZWFrO2Nhc2UiQ3RybCI6Zj0xO2JyZWFrO2RlZmF1bHQ6Zj04fWM9MH1yZXR1cm4gZiY4JiYoYz09OTF8fGM9PTkzKSYmKGM9MCksISFmfHxjIGluIGQuRlVOQ1RJT05fS0VZU3x8YyBpbiBkLlBSSU5UQUJMRV9LRVlTP2EoYixmLGMpOiExfSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2tleXMiKSxlPWEoIi4vdXNlcmFnZW50IiksZj1hKCIuL2RvbSIpO2IuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKGEuYWRkRXZlbnRMaXN0ZW5lcilyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKGIsYywhMSk7aWYoYS5hdHRhY2hFdmVudCl7dmFyIGQ9ZnVuY3Rpb24oKXtjKHdpbmRvdy5ldmVudCl9O2MuX3dyYXBwZXI9ZCxhLmF0dGFjaEV2ZW50KCJvbiIrYixkKX19LGIucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcilyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSk7YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudCgib24iK2IsYy5fd3JhcHBlcnx8Yyl9LGIuc3RvcEV2ZW50PWZ1bmN0aW9uKGEpe3JldHVybiBiLnN0b3BQcm9wYWdhdGlvbihhKSxiLnByZXZlbnREZWZhdWx0KGEpLCExfSxiLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbj9hLnN0b3BQcm9wYWdhdGlvbigpOmEuY2FuY2VsQnViYmxlPSEwfSxiLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9LGIuZ2V0RG9jdW1lbnRYPWZ1bmN0aW9uKGEpe3JldHVybiBhLmNsaWVudFg/YS5jbGllbnRYK2YuZ2V0UGFnZVNjcm9sbExlZnQoKTphLnBhZ2VYfSxiLmdldERvY3VtZW50WT1mdW5jdGlvbihhKXtyZXR1cm4gYS5jbGllbnRZP2EuY2xpZW50WStmLmdldFBhZ2VTY3JvbGxUb3AoKTphLnBhZ2VZfSxiLmdldEJ1dHRvbj1mdW5jdGlvbihhKXtyZXR1cm4gYS50eXBlPT0iZGJsY2xpY2siPzA6YS50eXBlPT0iY29udGV4dG1lbnUiPzI6YS5wcmV2ZW50RGVmYXVsdD9hLmJ1dHRvbjp7MTowLDI6Miw0OjF9W2EuYnV0dG9uXX0sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldENhcHR1cmU/Yi5jYXB0dXJlPWZ1bmN0aW9uKGEsYyxkKXtmdW5jdGlvbiBlKGEpe3JldHVybiBjKGEpLGIuc3RvcFByb3BhZ2F0aW9uKGEpfWZ1bmN0aW9uIGcoZSl7YyhlKSxmfHwoZj0hMCxkKGUpKSxiLnJlbW92ZUxpc3RlbmVyKGEsIm1vdXNlbW92ZSIsYyksYi5yZW1vdmVMaXN0ZW5lcihhLCJtb3VzZXVwIixnKSxiLnJlbW92ZUxpc3RlbmVyKGEsImxvc2VjYXB0dXJlIixnKSxhLnJlbGVhc2VDYXB0dXJlKCl9dmFyIGY9ITE7Yi5hZGRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGMpLGIuYWRkTGlzdGVuZXIoYSwibW91c2V1cCIsZyksYi5hZGRMaXN0ZW5lcihhLCJsb3NlY2FwdHVyZSIsZyksYS5zZXRDYXB0dXJlKCl9OmIuY2FwdHVyZT1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtiKGEpLGEuc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZShhKXtiJiZiKGEpLGMmJmMoYSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixkLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixlLCEwKSxhLnN0b3BQcm9wYWdhdGlvbigpfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZSwhMCl9LGIuYWRkTW91c2VXaGVlbExpc3RlbmVyPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9MCxlPWZ1bmN0aW9uKGEpe2lmKGEud2hlZWxEZWx0YSE9PXVuZGVmaW5lZCl7TWF0aC5hYnMoYS53aGVlbERlbHRhWSk+ZCYmKGQ9TWF0aC5hYnMoYS53aGVlbERlbHRhWSkpO2lmKGQ+NWUzKXZhciBiPTQwMDtlbHNlIHZhciBiPTg7YS53aGVlbERlbHRhWCE9PXVuZGVmaW5lZD8oYS53aGVlbFg9LWEud2hlZWxEZWx0YVgvYixhLndoZWVsWT0tYS53aGVlbERlbHRhWS9iKTooYS53aGVlbFg9MCxhLndoZWVsWT0tYS53aGVlbERlbHRhL2IpfWVsc2UgYS5heGlzJiZhLmF4aXM9PWEuSE9SSVpPTlRBTF9BWElTPyhhLndoZWVsWD0oYS5kZXRhaWx8fDApKjUsYS53aGVlbFk9MCk6KGEud2hlZWxYPTAsYS53aGVlbFk9KGEuZGV0YWlsfHwwKSo1KTtjKGEpfTtiLmFkZExpc3RlbmVyKGEsIkRPTU1vdXNlU2Nyb2xsIixlKSxiLmFkZExpc3RlbmVyKGEsIm1vdXNld2hlZWwiLGUpfSxiLmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXI9ZnVuY3Rpb24oYSxjLGQsZixnKXt2YXIgaD0wLGksaixrPWZ1bmN0aW9uKGEpe2grPTEsaD09MSYmKGk9YS5jbGllbnRYLGo9YS5jbGllbnRZLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPTB9LGZ8fDYwMCkpO3ZhciBlPWIuZ2V0QnV0dG9uKGEpPT1jO2lmKCFlfHxNYXRoLmFicyhhLmNsaWVudFgtaSk+NXx8TWF0aC5hYnMoYS5jbGllbnRZLWopPjUpaD0wO2g9PWQmJihoPTAsZyhhKSk7aWYoZSlyZXR1cm4gYi5wcmV2ZW50RGVmYXVsdChhKX07Yi5hZGRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGspLGUuaXNPbGRJRSYmYi5hZGRMaXN0ZW5lcihhLCJkYmxjbGljayIsayl9LGIuYWRkQ29tbWFuZEtleUxpc3RlbmVyPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yi5hZGRMaXN0ZW5lcjtpZihlLmlzT2xkR2Vja298fGUuaXNPcGVyYSl7dmFyIGY9bnVsbDtkKGEsImtleWRvd24iLGZ1bmN0aW9uKGEpe2Y9YS5rZXlDb2RlfSksZChhLCJrZXlwcmVzcyIsZnVuY3Rpb24oYSl7cmV0dXJuIGcoYyxhLGYpfSl9ZWxzZXt2YXIgaD1udWxsO2QoYSwia2V5ZG93biIsZnVuY3Rpb24oYSl7cmV0dXJuIGg9YS5rZXlJZGVudGlmaWVyfHxhLmtleUNvZGUsZyhjLGEsYS5rZXlDb2RlKX0pfX07aWYod2luZG93LnBvc3RNZXNzYWdlKXt2YXIgaD0xO2IubmV4dFRpY2s9ZnVuY3Rpb24oYSxjKXtjPWN8fHdpbmRvdzt2YXIgZD0iemVyby10aW1lb3V0LW1lc3NhZ2UtIitoO2IuYWRkTGlzdGVuZXIoYywibWVzc2FnZSIsZnVuY3Rpb24gZShmKXtmLmRhdGE9PWQmJihiLnN0b3BQcm9wYWdhdGlvbihmKSxiLnJlbW92ZUxpc3RlbmVyKGMsIm1lc3NhZ2UiLGUpLGEoKSl9KSxjLnBvc3RNZXNzYWdlKGQsIioiKX19ZWxzZSBiLm5leHRUaWNrPWZ1bmN0aW9uKGEsYil7Yj1ifHx3aW5kb3csd2luZG93LnNldFRpbWVvdXQoYSwwKX19KSxkZWZpbmUoImFjZS9saWIva2V5cyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL29vcCIpLGU9ZnVuY3Rpb24oKXt2YXIgYT17TU9ESUZJRVJfS0VZUzp7MTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMjI0OiJNZXRhIn0sS0VZX01PRFM6e2N0cmw6MSxhbHQ6MixvcHRpb246MixzaGlmdDo0LG1ldGE6OCxjb21tYW5kOjh9LEZVTkNUSU9OX0tFWVM6ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiUmV0dXJuIiwxOToiUGF1c2UiLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50Iiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiw5NjoiTnVtcGFkMCIsOTc6Ik51bXBhZDEiLDk4OiJOdW1wYWQyIiw5OToiTnVtcGFkMyIsMTAwOiJOdW1wYWQ0IiwxMDE6Ik51bXBhZDUiLDEwMjoiTnVtcGFkNiIsMTAzOiJOdW1wYWQ3IiwxMDQ6Ik51bXBhZDgiLDEwNToiTnVtcGFkOSIsMTEyOiJGMSIsMTEzOiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJGNiIsMTE4OiJGNyIsMTE5OiJGOCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYxMiIsMTQ0OiJOdW1sb2NrIiwxNDU6IlNjcm9sbGxvY2sifSxQUklOVEFCTEVfS0VZUzp7MzI6IiAiLDQ4OiIwIiw0OToiMSIsNTA6IjIiLDUxOiIzIiw1MjoiNCIsNTM6IjUiLDU0OiI2Iiw1NToiNyIsNTY6IjgiLDU3OiI5Iiw1OToiOyIsNjE6Ij0iLDY1OiJhIiw2NjoiYiIsNjc6ImMiLDY4OiJkIiw2OToiZSIsNzA6ImYiLDcxOiJnIiw3MjoiaCIsNzM6ImkiLDc0OiJqIiw3NToiayIsNzY6ImwiLDc3OiJtIiw3ODoibiIsNzk6Im8iLDgwOiJwIiw4MToicSIsODI6InIiLDgzOiJzIiw4NDoidCIsODU6InUiLDg2OiJ2Iiw4NzoidyIsODg6IngiLDg5OiJ5Iiw5MDoieiIsMTA3OiIrIiwxMDk6Ii0iLDExMDoiLiIsMTg4OiIsIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiciJ319O2Zvcih2YXIgYiBpbiBhLkZVTkNUSU9OX0tFWVMpe3ZhciBjPWEuRlVOQ1RJT05fS0VZU1tiXS50b1VwcGVyQ2FzZSgpO2FbY109cGFyc2VJbnQoYiwxMCl9cmV0dXJuIGQubWl4aW4oYSxhLk1PRElGSUVSX0tFWVMpLGQubWl4aW4oYSxhLlBSSU5UQUJMRV9LRVlTKSxkLm1peGluKGEsYS5GVU5DVElPTl9LRVlTKSxhfSgpO2QubWl4aW4oYixlKSxiLmtleUNvZGVUb1N0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4oZVthXXx8U3RyaW5nLmZyb21DaGFyQ29kZShhKSkudG9Mb3dlckNhc2UoKX19KSxkZWZpbmUoImFjZS9saWIvb29wIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IixiLmluaGVyaXRzPWZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXt9O3JldHVybiBmdW5jdGlvbihiLGMpe2EucHJvdG90eXBlPWMucHJvdG90eXBlLGIuc3VwZXJfPWMucHJvdG90eXBlLGIucHJvdG90eXBlPW5ldyBhLGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJ9fSgpLGIubWl4aW49ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gYilhW2NdPWJbY119LGIuaW1wbGVtZW50PWZ1bmN0aW9uKGEsYyl7Yi5taXhpbihhLGMpfX0pLGRlZmluZSgiYWNlL2xpYi91c2VyYWdlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPShuYXZpZ2F0b3IucGxhdGZvcm0ubWF0Y2goL21hY3x3aW58bGludXgvaSl8fFsib3RoZXIiXSlbMF0udG9Mb3dlckNhc2UoKSxlPW5hdmlnYXRvci51c2VyQWdlbnQ7Yi5pc1dpbj1kPT0id2luIixiLmlzTWFjPWQ9PSJtYWMiLGIuaXNMaW51eD1kPT0ibGludXgiLGIuaXNJRT1uYXZpZ2F0b3IuYXBwTmFtZT09Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciImJnBhcnNlRmxvYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvTVNJRSAoWzAtOV0rW1wuMC05XSspLylbMV0pLGIuaXNPbGRJRT1iLmlzSUUmJmIuaXNJRTw5LGIuaXNHZWNrbz1iLmlzTW96aWxsYT13aW5kb3cuY29udHJvbGxlcnMmJndpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdD09PSJHZWNrbyIsYi5pc09sZEdlY2tvPWIuaXNHZWNrbyYmcGFyc2VJbnQoKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL3J2XDooXGQrKS8pfHxbXSlbMV0sMTApPDQsYi5pc09wZXJhPXdpbmRvdy5vcGVyYSYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5vcGVyYSk9PSJbb2JqZWN0IE9wZXJhXSIsYi5pc1dlYktpdD1wYXJzZUZsb2F0KGUuc3BsaXQoIldlYktpdC8iKVsxXSl8fHVuZGVmaW5lZCxiLmlzQ2hyb21lPXBhcnNlRmxvYXQoZS5zcGxpdCgiIENocm9tZS8iKVsxXSl8fHVuZGVmaW5lZCxiLmlzQUlSPWUuaW5kZXhPZigiQWRvYmVBSVIiKT49MCxiLmlzSVBhZD1lLmluZGV4T2YoImlQYWQiKT49MCxiLmlzVG91Y2hQYWQ9ZS5pbmRleE9mKCJUb3VjaFBhZCIpPj0wLGIuT1M9e0xJTlVYOiJMSU5VWCIsTUFDOiJNQUMiLFdJTkRPV1M6IldJTkRPV1MifSxiLmdldE9TPWZ1bmN0aW9uKCl7cmV0dXJuIGIuaXNNYWM/Yi5PUy5NQUM6Yi5pc0xpbnV4P2IuT1MuTElOVVg6Yi5PUy5XSU5ET1dTfX0pLGRlZmluZSgiYWNlL2VkaXRvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZml4b2xkYnJvd3NlcnMiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvdXNlcmFnZW50IiwiYWNlL2tleWJvYXJkL3RleHRpbnB1dCIsImFjZS9tb3VzZS9tb3VzZV9oYW5kbGVyIiwiYWNlL21vdXNlL2ZvbGRfaGFuZGxlciIsImFjZS9rZXlib2FyZC9rZXliaW5kaW5nIiwiYWNlL2VkaXRfc2Vzc2lvbiIsImFjZS9zZWFyY2giLCJhY2UvcmFuZ2UiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyIiwiYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiLGEoIi4vbGliL2ZpeG9sZGJyb3dzZXJzIik7dmFyIGQ9YSgiLi9saWIvb29wIiksZT1hKCIuL2xpYi9sYW5nIiksZj1hKCIuL2xpYi91c2VyYWdlbnQiKSxnPWEoIi4va2V5Ym9hcmQvdGV4dGlucHV0IikuVGV4dElucHV0LGg9YSgiLi9tb3VzZS9tb3VzZV9oYW5kbGVyIikuTW91c2VIYW5kbGVyLGk9YSgiLi9tb3VzZS9mb2xkX2hhbmRsZXIiKS5Gb2xkSGFuZGxlcixqPWEoIi4va2V5Ym9hcmQva2V5YmluZGluZyIpLktleUJpbmRpbmcsaz1hKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uLGw9YSgiLi9zZWFyY2giKS5TZWFyY2gsbT1hKCIuL3JhbmdlIikuUmFuZ2Usbj1hKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLG89YSgiLi9jb21tYW5kcy9jb21tYW5kX21hbmFnZXIiKS5Db21tYW5kTWFuYWdlcixwPWEoIi4vY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcyIpLmNvbW1hbmRzLHE9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldENvbnRhaW5lckVsZW1lbnQoKTt0aGlzLmNvbnRhaW5lcj1jLHRoaXMucmVuZGVyZXI9YSx0aGlzLnRleHRJbnB1dD1uZXcgZyhhLmdldFRleHRBcmVhQ29udGFpbmVyKCksdGhpcyksdGhpcy5rZXlCaW5kaW5nPW5ldyBqKHRoaXMpLGYuaXNJUGFkfHwodGhpcy4kbW91c2VIYW5kbGVyPW5ldyBoKHRoaXMpLG5ldyBpKHRoaXMpKSx0aGlzLiRibG9ja1Njcm9sbGluZz0wLHRoaXMuJHNlYXJjaD0obmV3IGwpLnNldCh7d3JhcDohMH0pLHRoaXMuY29tbWFuZHM9bmV3IG8oZi5pc01hYz8ibWFjIjoid2luIixwKSx0aGlzLnNldFNlc3Npb24oYnx8bmV3IGsoIiIpKX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsbiksdGhpcy5zZXRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oYSl7dGhpcy5rZXlCaW5kaW5nLnNldEtleWJvYXJkSGFuZGxlcihhKX0sdGhpcy5nZXRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlCaW5kaW5nLmdldEtleWJvYXJkSGFuZGxlcigpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oYSl7aWYodGhpcy5zZXNzaW9uPT1hKXJldHVybjtpZih0aGlzLnNlc3Npb24pe3ZhciBiPXRoaXMuc2Vzc2lvbjt0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLiRvbkRvY3VtZW50Q2hhbmdlKSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlTW9kZSIsdGhpcy4kb25DaGFuZ2VNb2RlKSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG9rZW5pemVyVXBkYXRlIix0aGlzLiRvblRva2VuaXplclVwZGF0ZSksdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVRhYlNpemUiLHRoaXMuJG9uQ2hhbmdlVGFiU2l6ZSksdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVdyYXBMaW1pdCIsdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQpLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VXcmFwTW9kZSIsdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSksdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9uQ2hhbmdlRm9sZCIsdGhpcy4kb25DaGFuZ2VGb2xkKSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlRnJvbnRNYXJrZXIiLHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VCYWNrTWFya2VyIix0aGlzLiRvbkNoYW5nZUJhY2tNYXJrZXIpLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VCcmVha3BvaW50Iix0aGlzLiRvbkNoYW5nZUJyZWFrcG9pbnQpLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VBbm5vdGF0aW9uIix0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pLHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VPdmVyd3JpdGUiLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKSx0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2Nyb2xsVG9wIix0aGlzLiRvblNjcm9sbFRvcENoYW5nZSksdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUxlZnRUb3AiLHRoaXMuJG9uU2Nyb2xsTGVmdENoYW5nZSk7dmFyIGM9dGhpcy5zZXNzaW9uLmdldFNlbGVjdGlvbigpO2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQ3Vyc29yIix0aGlzLiRvbkN1cnNvckNoYW5nZSksYy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VTZWxlY3Rpb24iLHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlKX10aGlzLnNlc3Npb249YSx0aGlzLiRvbkRvY3VtZW50Q2hhbmdlPXRoaXMub25Eb2N1bWVudENoYW5nZS5iaW5kKHRoaXMpLGEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLiRvbkRvY3VtZW50Q2hhbmdlKSx0aGlzLnJlbmRlcmVyLnNldFNlc3Npb24oYSksdGhpcy4kb25DaGFuZ2VNb2RlPXRoaXMub25DaGFuZ2VNb2RlLmJpbmQodGhpcyksYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VNb2RlIix0aGlzLiRvbkNoYW5nZU1vZGUpLHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlPXRoaXMub25Ub2tlbml6ZXJVcGRhdGUuYmluZCh0aGlzKSxhLmFkZEV2ZW50TGlzdGVuZXIoInRva2VuaXplclVwZGF0ZSIsdGhpcy4kb25Ub2tlbml6ZXJVcGRhdGUpLHRoaXMuJG9uQ2hhbmdlVGFiU2l6ZT10aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHQuYmluZCh0aGlzLnJlbmRlcmVyKSxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVRhYlNpemUiLHRoaXMuJG9uQ2hhbmdlVGFiU2l6ZSksdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQ9dGhpcy5vbkNoYW5nZVdyYXBMaW1pdC5iaW5kKHRoaXMpLGEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcExpbWl0Iix0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCksdGhpcy4kb25DaGFuZ2VXcmFwTW9kZT10aGlzLm9uQ2hhbmdlV3JhcE1vZGUuYmluZCh0aGlzKSxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVdyYXBNb2RlIix0aGlzLiRvbkNoYW5nZVdyYXBNb2RlKSx0aGlzLiRvbkNoYW5nZUZvbGQ9dGhpcy5vbkNoYW5nZUZvbGQuYmluZCh0aGlzKSxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUZvbGQiLHRoaXMuJG9uQ2hhbmdlRm9sZCksdGhpcy4kb25DaGFuZ2VGcm9udE1hcmtlcj10aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlRnJvbnRNYXJrZXIiLHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpLHRoaXMuJG9uQ2hhbmdlQmFja01hcmtlcj10aGlzLm9uQ2hhbmdlQmFja01hcmtlci5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VCYWNrTWFya2VyIix0aGlzLiRvbkNoYW5nZUJhY2tNYXJrZXIpLHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludD10aGlzLm9uQ2hhbmdlQnJlYWtwb2ludC5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VCcmVha3BvaW50Iix0aGlzLiRvbkNoYW5nZUJyZWFrcG9pbnQpLHRoaXMuJG9uQ2hhbmdlQW5ub3RhdGlvbj10aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbi5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VBbm5vdGF0aW9uIix0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlPXRoaXMub25DdXJzb3JDaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlT3ZlcndyaXRlIix0aGlzLiRvbkN1cnNvckNoYW5nZSksdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2U9dGhpcy5vblNjcm9sbFRvcENoYW5nZS5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTY3JvbGxUb3AiLHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKSx0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2U9dGhpcy5vblNjcm9sbExlZnRDaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2Nyb2xsTGVmdCIsdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlKSx0aGlzLnNlbGVjdGlvbj1hLmdldFNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUN1cnNvciIsdGhpcy4kb25DdXJzb3JDaGFuZ2UpLHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlPXRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlbGVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTZWxlY3Rpb24iLHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlKSx0aGlzLm9uQ2hhbmdlTW9kZSgpLHRoaXMub25DdXJzb3JDaGFuZ2UoKSx0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlKCksdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UoKSx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5vbkNoYW5nZUZyb250TWFya2VyKCksdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIoKSx0aGlzLm9uQ2hhbmdlQnJlYWtwb2ludCgpLHRoaXMub25DaGFuZ2VBbm5vdGF0aW9uKCksdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkmJnRoaXMucmVuZGVyZXIuYWRqdXN0V3JhcExpbWl0KCksdGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCksdGhpcy5fZW1pdCgiY2hhbmdlU2Vzc2lvbiIse3Nlc3Npb246YSxvbGRTZXNzaW9uOmJ9KX0sdGhpcy5nZXRTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbn0sdGhpcy5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb259LHRoaXMucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5vblJlc2l6ZSgpfSx0aGlzLnNldFRoZW1lPWZ1bmN0aW9uKGEpe3RoaXMucmVuZGVyZXIuc2V0VGhlbWUoYSl9LHRoaXMuZ2V0VGhlbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRUaGVtZSgpfSx0aGlzLnNldFN0eWxlPWZ1bmN0aW9uKGEpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSl9LHRoaXMudW5zZXRTdHlsZT1mdW5jdGlvbihhKXt0aGlzLnJlbmRlcmVyLnVuc2V0U3R5bGUoYSl9LHRoaXMuc2V0Rm9udFNpemU9ZnVuY3Rpb24oYSl7dGhpcy5jb250YWluZXIuc3R5bGUuZm9udFNpemU9YSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUZvbnRTaXplKCl9LHRoaXMuJGhpZ2hsaWdodEJyYWNrZXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0JiYodGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQpLHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodD1udWxsKTtpZih0aGlzLiRoaWdobGlnaHRQZW5kaW5nKXJldHVybjt2YXIgYT10aGlzO3RoaXMuJGhpZ2hsaWdodFBlbmRpbmc9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe2EuJGhpZ2hsaWdodFBlbmRpbmc9ITE7dmFyIGI9YS5zZXNzaW9uLmZpbmRNYXRjaGluZ0JyYWNrZXQoYS5nZXRDdXJzb3JQb3NpdGlvbigpKTtpZihiKXt2YXIgYz1uZXcgbShiLnJvdyxiLmNvbHVtbixiLnJvdyxiLmNvbHVtbisxKTthLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQ9YS5zZXNzaW9uLmFkZE1hcmtlcihjLCJhY2VfYnJhY2tldCIsInRleHQiKX19LDEwKX0sdGhpcy5mb2N1cz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2EudGV4dElucHV0LmZvY3VzKCl9KSx0aGlzLnRleHRJbnB1dC5mb2N1cygpfSx0aGlzLmlzRm9jdXNlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQoKX0sdGhpcy5ibHVyPWZ1bmN0aW9uKCl7dGhpcy50ZXh0SW5wdXQuYmx1cigpfSx0aGlzLm9uRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnNob3dDdXJzb3IoKSx0aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUZvY3VzKCksdGhpcy5fZW1pdCgiZm9jdXMiKX0sdGhpcy5vbkJsdXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLmhpZGVDdXJzb3IoKSx0aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUJsdXIoKSx0aGlzLl9lbWl0KCJibHVyIil9LHRoaXMub25Eb2N1bWVudENoYW5nZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRhdGEsYz1iLnJhbmdlLGQ7Yy5zdGFydC5yb3c9PWMuZW5kLnJvdyYmYi5hY3Rpb24hPSJpbnNlcnRMaW5lcyImJmIuYWN0aW9uIT0icmVtb3ZlTGluZXMiP2Q9Yy5lbmQucm93OmQ9SW5maW5pdHksdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhjLnN0YXJ0LnJvdyxkKSx0aGlzLl9lbWl0KCJjaGFuZ2UiLGEpLHRoaXMub25DdXJzb3JDaGFuZ2UoKX0sdGhpcy5vblRva2VuaXplclVwZGF0ZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRhdGE7dGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhiLmZpcnN0LGIubGFzdCl9LHRoaXMub25TY3JvbGxUb3BDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvWSh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkpfSx0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuc2Nyb2xsVG9YKHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkpfSx0aGlzLm9uQ3Vyc29yQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKSx0aGlzLiRibG9ja1Njcm9sbGluZ3x8dGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpLHRoaXMucmVuZGVyZXIubW92ZVRleHRBcmVhVG9DdXJzb3IodGhpcy50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpKSx0aGlzLiRoaWdobGlnaHRCcmFja2V0cygpLHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKX0sdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2Vzc2lvbigpO2EuJGhpZ2hsaWdodExpbmVNYXJrZXImJmEucmVtb3ZlTWFya2VyKGEuJGhpZ2hsaWdodExpbmVNYXJrZXIpLGEuJGhpZ2hsaWdodExpbmVNYXJrZXI9bnVsbDtpZih0aGlzLmdldEhpZ2hsaWdodEFjdGl2ZUxpbmUoKSYmKHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGUoKSE9ImxpbmUifHwhdGhpcy5zZWxlY3Rpb24uaXNNdWx0aUxpbmUoKSkpe3ZhciBiPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxjPXRoaXMuc2Vzc2lvbi5nZXRGb2xkTGluZShiLnJvdyksZDtjP2Q9bmV3IG0oYy5zdGFydC5yb3csMCxjLmVuZC5yb3crMSwwKTpkPW5ldyBtKGIucm93LDAsYi5yb3crMSwwKSxhLiRoaWdobGlnaHRMaW5lTWFya2VyPWEuYWRkTWFya2VyKGQsImFjZV9hY3RpdmVfbGluZSIsImJhY2tncm91bmQiKX19LHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nZXRTZXNzaW9uKCk7Yi4kc2VsZWN0aW9uTWFya2VyJiZiLnJlbW92ZU1hcmtlcihiLiRzZWxlY3Rpb25NYXJrZXIpLGIuJHNlbGVjdGlvbk1hcmtlcj1udWxsO2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe3ZhciBjPXRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCksZD10aGlzLmdldFNlbGVjdGlvblN0eWxlKCk7Yi4kc2VsZWN0aW9uTWFya2VyPWIuYWRkTWFya2VyKGMsImFjZV9zZWxlY3Rpb24iLGQpfWVsc2UgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpO3RoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZCYmdGhpcy5zZXNzaW9uLmdldE1vZGUoKS5oaWdobGlnaHRTZWxlY3Rpb24odGhpcyl9LHRoaXMub25DaGFuZ2VGcm9udE1hcmtlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlRnJvbnRNYXJrZXJzKCl9LHRoaXMub25DaGFuZ2VCYWNrTWFya2VyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpfSx0aGlzLm9uQ2hhbmdlQnJlYWtwb2ludD1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuc2V0QnJlYWtwb2ludHModGhpcy5zZXNzaW9uLmdldEJyZWFrcG9pbnRzKCkpfSx0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuc2V0QW5ub3RhdGlvbnModGhpcy5zZXNzaW9uLmdldEFubm90YXRpb25zKCkpfSx0aGlzLm9uQ2hhbmdlTW9kZT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlVGV4dCgpfSx0aGlzLm9uQ2hhbmdlV3JhcExpbWl0PWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCl9LHRoaXMub25DaGFuZ2VXcmFwTW9kZT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIub25SZXNpemUoITApfSx0aGlzLm9uQ2hhbmdlRm9sZD1mdW5jdGlvbigpe3RoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKX0sdGhpcy5nZXRDb3B5VGV4dD1mdW5jdGlvbigpe3ZhciBhPSIiO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCl8fChhPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSksdGhpcy5fZW1pdCgiY29weSIsYSksYX0sdGhpcy5vbkN1dD1mdW5jdGlvbigpe2lmKHRoaXMuJHJlYWRPbmx5KXJldHVybjt2YXIgYT10aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7dGhpcy5fZW1pdCgiY3V0IixhKSx0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCl8fCh0aGlzLnNlc3Npb24ucmVtb3ZlKGEpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKSl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc2Vzc2lvbixjPWIuZ2V0TW9kZSgpLGQ9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpO2lmKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSl7dmFyIGU9Yy50cmFuc2Zvcm1BY3Rpb24oYi5nZXRTdGF0ZShkLnJvdyksImluc2VydGlvbiIsdGhpcyxiLGEpO2UmJihhPWUudGV4dCl9YT1hLnJlcGxhY2UoIlx0Iix0aGlzLnNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpZD10aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdGhpcy5jbGVhclNlbGVjdGlvbigpO2Vsc2UgaWYodGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpKXt2YXIgZj1uZXcgbS5mcm9tUG9pbnRzKGQsZCk7Zi5lbmQuY29sdW1uKz1hLmxlbmd0aCx0aGlzLnNlc3Npb24ucmVtb3ZlKGYpfXRoaXMuY2xlYXJTZWxlY3Rpb24oKTt2YXIgZz1kLmNvbHVtbixoPWIuZ2V0U3RhdGUoZC5yb3cpLGk9Yy5jaGVja091dGRlbnQoaCxiLmdldExpbmUoZC5yb3cpLGEpLGo9Yi5nZXRMaW5lKGQucm93KSxrPWMuZ2V0TmV4dExpbmVJbmRlbnQoaCxqLnNsaWNlKDAsZC5jb2x1bW4pLGIuZ2V0VGFiU3RyaW5nKCkpLGw9Yi5pbnNlcnQoZCxhKTtlJiZlLnNlbGVjdGlvbiYmKGUuc2VsZWN0aW9uLmxlbmd0aD09Mj90aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXcgbShkLnJvdyxnK2Uuc2VsZWN0aW9uWzBdLGQucm93LGcrZS5zZWxlY3Rpb25bMV0pKTp0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXcgbShkLnJvdytlLnNlbGVjdGlvblswXSxlLnNlbGVjdGlvblsxXSxkLnJvdytlLnNlbGVjdGlvblsyXSxlLnNlbGVjdGlvblszXSkpKTt2YXIgaD1iLmdldFN0YXRlKGQucm93KTtpZihiLmdldERvY3VtZW50KCkuaXNOZXdMaW5lKGEpKXt0aGlzLm1vdmVDdXJzb3JUbyhkLnJvdysxLDApO3ZhciBuPWIuZ2V0VGFiU2l6ZSgpLG89TnVtYmVyLk1BWF9WQUxVRTtmb3IodmFyIHA9ZC5yb3crMTtwPD1sLnJvdzsrK3Ape3ZhciBxPTA7aj1iLmdldExpbmUocCk7Zm9yKHZhciByPTA7cjxqLmxlbmd0aDsrK3IpaWYoai5jaGFyQXQocik9PSJcdCIpcSs9bjtlbHNlIGlmKGouY2hhckF0KHIpPT0iICIpcSs9MTtlbHNlIGJyZWFrOy9bXlxzXS8udGVzdChqKSYmKG89TWF0aC5taW4ocSxvKSl9Zm9yKHZhciBwPWQucm93KzE7cDw9bC5yb3c7KytwKXt2YXIgcz1vO2o9Yi5nZXRMaW5lKHApO2Zvcih2YXIgcj0wO3I8ai5sZW5ndGgmJnM+MDsrK3Ipai5jaGFyQXQocik9PSJcdCI/cy09bjpqLmNoYXJBdChyKT09IiAiJiYocy09MSk7Yi5yZW1vdmUobmV3IG0ocCwwLHAscikpfWIuaW5kZW50Um93cyhkLnJvdysxLGwucm93LGspfWkmJmMuYXV0b091dGRlbnQoaCxiLGQucm93KX0sdGhpcy5vblRleHRJbnB1dD1mdW5jdGlvbihhLGIpe2ImJnRoaXMuX2VtaXQoInBhc3RlIixhKSx0aGlzLmtleUJpbmRpbmcub25UZXh0SW5wdXQoYSxiKX0sdGhpcy5vbkNvbW1hbmRLZXk9ZnVuY3Rpb24oYSxiLGMpe3RoaXMua2V5QmluZGluZy5vbkNvbW1hbmRLZXkoYSxiLGMpfSx0aGlzLnNldE92ZXJ3cml0ZT1mdW5jdGlvbihhKXt0aGlzLnNlc3Npb24uc2V0T3ZlcndyaXRlKGEpfSx0aGlzLmdldE92ZXJ3cml0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCl9LHRoaXMudG9nZ2xlT3ZlcndyaXRlPWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLnRvZ2dsZU92ZXJ3cml0ZSgpfSx0aGlzLnNldFNjcm9sbFNwZWVkPWZ1bmN0aW9uKGEpe3RoaXMuJG1vdXNlSGFuZGxlci5zZXRTY3JvbGxTcGVlZChhKX0sdGhpcy5nZXRTY3JvbGxTcGVlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRtb3VzZUhhbmRsZXIuZ2V0U2Nyb2xsU3BlZWQoKX0sdGhpcy5zZXREcmFnRGVsYXk9ZnVuY3Rpb24oYSl7dGhpcy4kbW91c2VIYW5kbGVyLnNldERyYWdEZWxheShhKX0sdGhpcy5nZXREcmFnRGVsYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbW91c2VIYW5kbGVyLmdldERyYWdEZWxheSgpfSx0aGlzLiRzZWxlY3Rpb25TdHlsZT0ibGluZSIsdGhpcy5zZXRTZWxlY3Rpb25TdHlsZT1mdW5jdGlvbihhKXtpZih0aGlzLiRzZWxlY3Rpb25TdHlsZT09YSlyZXR1cm47dGhpcy4kc2VsZWN0aW9uU3R5bGU9YSx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uU3R5bGUiLHtkYXRhOmF9KX0sdGhpcy5nZXRTZWxlY3Rpb25TdHlsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzZWxlY3Rpb25TdHlsZX0sdGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZT0hMCx0aGlzLnNldEhpZ2hsaWdodEFjdGl2ZUxpbmU9ZnVuY3Rpb24oYSl7aWYodGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZT09YSlyZXR1cm47dGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZT1hLHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKX0sdGhpcy5nZXRIaWdobGlnaHRBY3RpdmVMaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmV9LHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZD0hMCx0aGlzLnNldEhpZ2hsaWdodFNlbGVjdGVkV29yZD1mdW5jdGlvbihhKXtpZih0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQ9PWEpcmV0dXJuO3RoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZD1hLGE/dGhpcy5zZXNzaW9uLmdldE1vZGUoKS5oaWdobGlnaHRTZWxlY3Rpb24odGhpcyk6dGhpcy5zZXNzaW9uLmdldE1vZGUoKS5jbGVhclNlbGVjdGlvbkhpZ2hsaWdodCh0aGlzKX0sdGhpcy5nZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkfSx0aGlzLnNldFNob3dJbnZpc2libGVzPWZ1bmN0aW9uKGEpe2lmKHRoaXMuZ2V0U2hvd0ludmlzaWJsZXMoKT09YSlyZXR1cm47dGhpcy5yZW5kZXJlci5zZXRTaG93SW52aXNpYmxlcyhhKX0sdGhpcy5nZXRTaG93SW52aXNpYmxlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldFNob3dJbnZpc2libGVzKCl9LHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luPWZ1bmN0aW9uKGEpe3RoaXMucmVuZGVyZXIuc2V0U2hvd1ByaW50TWFyZ2luKGEpfSx0aGlzLmdldFNob3dQcmludE1hcmdpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldFNob3dQcmludE1hcmdpbigpfSx0aGlzLnNldFByaW50TWFyZ2luQ29sdW1uPWZ1bmN0aW9uKGEpe3RoaXMucmVuZGVyZXIuc2V0UHJpbnRNYXJnaW5Db2x1bW4oYSl9LHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRQcmludE1hcmdpbkNvbHVtbigpfSx0aGlzLiRyZWFkT25seT0hMSx0aGlzLnNldFJlYWRPbmx5PWZ1bmN0aW9uKGEpe3RoaXMuJHJlYWRPbmx5PWF9LHRoaXMuZ2V0UmVhZE9ubHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVhZE9ubHl9LHRoaXMuJG1vZGVCZWhhdmlvdXJzPSEwLHRoaXMuc2V0QmVoYXZpb3Vyc0VuYWJsZWQ9ZnVuY3Rpb24oYSl7dGhpcy4kbW9kZUJlaGF2aW91cnM9YX0sdGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRtb2RlQmVoYXZpb3Vyc30sdGhpcy5zZXRTaG93Rm9sZFdpZGdldHM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5yZW5kZXJlci4kZ3V0dGVyTGF5ZXI7aWYoYi5nZXRTaG93Rm9sZFdpZGdldHMoKT09YSlyZXR1cm47dGhpcy5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKGEpLHRoaXMuJHNob3dGb2xkV2lkZ2V0cz1hLHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpfSx0aGlzLmdldFNob3dGb2xkV2lkZ2V0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRTaG93Rm9sZFdpZGdldHMoKX0sdGhpcy5yZW1vdmU9ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiYoYT09ImxlZnQiP3RoaXMuc2VsZWN0aW9uLnNlbGVjdExlZnQoKTp0aGlzLnNlbGVjdGlvbi5zZWxlY3RSaWdodCgpKTt2YXIgYj10aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7aWYodGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCgpKXt2YXIgYz10aGlzLnNlc3Npb24sZD1jLmdldFN0YXRlKGIuc3RhcnQucm93KSxlPWMuZ2V0TW9kZSgpLnRyYW5zZm9ybUFjdGlvbihkLCJkZWxldGlvbiIsdGhpcyxjLGIpO2UmJihiPWUpfXRoaXMuc2Vzc2lvbi5yZW1vdmUoYiksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlbW92ZVdvcmRSaWdodD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZFJpZ2h0KCksdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5yZW1vdmVXb3JkTGVmdD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZExlZnQoKSx0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlbW92ZVRvTGluZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lU3RhcnQoKSx0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlbW92ZVRvTGluZUVuZD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCgpO3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTthLnN0YXJ0LmNvbHVtbj09YS5lbmQuY29sdW1uJiZhLnN0YXJ0LnJvdz09YS5lbmQucm93JiYoYS5lbmQuY29sdW1uPTAsYS5lbmQucm93KyspLHRoaXMuc2Vzc2lvbi5yZW1vdmUoYSksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnNwbGl0TGluZT1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKXx8KHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCkpO3ZhciBhPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTt0aGlzLmluc2VydCgiXG4iKSx0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGEpfSx0aGlzLnRyYW5zcG9zZUxldHRlcnM9ZnVuY3Rpb24oKXtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXJldHVybjt2YXIgYT10aGlzLmdldEN1cnNvclBvc2l0aW9uKCksYj1hLmNvbHVtbjtpZihiPT09MClyZXR1cm47dmFyIGM9dGhpcy5zZXNzaW9uLmdldExpbmUoYS5yb3cpLGQsZTtiPGMubGVuZ3RoPyhkPWMuY2hhckF0KGIpK2MuY2hhckF0KGItMSksZT1uZXcgbShhLnJvdyxiLTEsYS5yb3csYisxKSk6KGQ9Yy5jaGFyQXQoYi0xKStjLmNoYXJBdChiLTIpLGU9bmV3IG0oYS5yb3csYi0yLGEucm93LGIpKSx0aGlzLnNlc3Npb24ucmVwbGFjZShlLGQpfSx0aGlzLnRvTG93ZXJDYXNlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZCgpO3ZhciBiPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxjPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoYik7dGhpcy5zZXNzaW9uLnJlcGxhY2UoYixjLnRvTG93ZXJDYXNlKCkpLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGEpfSx0aGlzLnRvVXBwZXJDYXNlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZCgpO3ZhciBiPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxjPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoYik7dGhpcy5zZXNzaW9uLnJlcGxhY2UoYixjLnRvVXBwZXJDYXNlKCkpLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGEpfSx0aGlzLmluZGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2Vzc2lvbixiPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpZighKGIuc3RhcnQucm93PGIuZW5kLnJvd3x8Yi5zdGFydC5jb2x1bW48Yi5lbmQuY29sdW1uKSl7dmFyIGQ7aWYodGhpcy5zZXNzaW9uLmdldFVzZVNvZnRUYWJzKCkpe3ZhciBmPWEuZ2V0VGFiU2l6ZSgpLGc9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLGg9YS5kb2N1bWVudFRvU2NyZWVuQ29sdW1uKGcucm93LGcuY29sdW1uKSxpPWYtaCVmO2Q9ZS5zdHJpbmdSZXBlYXQoIiAiLGkpfWVsc2UgZD0iXHQiO3JldHVybiB0aGlzLmluc2VydChkKX12YXIgYz10aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTthLmluZGVudFJvd3MoYy5maXJzdCxjLmxhc3QsIlx0Iil9LHRoaXMuYmxvY2tPdXRkZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXNzaW9uLmdldFNlbGVjdGlvbigpO3RoaXMuc2Vzc2lvbi5vdXRkZW50Um93cyhhLmdldFJhbmdlKCkpfSx0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2Vzc2lvbi5nZXRTdGF0ZSh0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkucm93KSxiPXRoaXMuJGdldFNlbGVjdGVkUm93cygpO3RoaXMuc2Vzc2lvbi5nZXRNb2RlKCkudG9nZ2xlQ29tbWVudExpbmVzKGEsdGhpcy5zZXNzaW9uLGIuZmlyc3QsYi5sYXN0KX0sdGhpcy5yZW1vdmVMaW5lcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGdldFNlbGVjdGVkUm93cygpLGI7YS5maXJzdD09PTB8fGEubGFzdCsxPHRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKT9iPW5ldyBtKGEuZmlyc3QsMCxhLmxhc3QrMSwwKTpiPW5ldyBtKGEuZmlyc3QtMSx0aGlzLnNlc3Npb24uZ2V0TGluZShhLmZpcnN0LTEpLmxlbmd0aCxhLmxhc3QsdGhpcy5zZXNzaW9uLmdldExpbmUoYS5sYXN0KS5sZW5ndGgpLHRoaXMuc2Vzc2lvbi5yZW1vdmUoYiksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLm1vdmVMaW5lc0Rvd249ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlTGluZXMoZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zZXNzaW9uLm1vdmVMaW5lc0Rvd24oYSxiKX0pfSx0aGlzLm1vdmVMaW5lc1VwPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUxpbmVzKGZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlTGluZXNVcChhLGIpfSl9LHRoaXMubW92ZVRleHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy4kcmVhZE9ubHk/bnVsbDp0aGlzLnNlc3Npb24ubW92ZVRleHQoYSxiKX0sdGhpcy5jb3B5TGluZXNVcD1mdW5jdGlvbigpe3RoaXMuJG1vdmVMaW5lcyhmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnNlc3Npb24uZHVwbGljYXRlTGluZXMoYSxiKSwwfSl9LHRoaXMuY29weUxpbmVzRG93bj1mdW5jdGlvbigpe3RoaXMuJG1vdmVMaW5lcyhmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnNlc3Npb24uZHVwbGljYXRlTGluZXMoYSxiKX0pfSx0aGlzLiRtb3ZlTGluZXM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCksYz10aGlzLnNlbGVjdGlvbjtpZighYy5pc011bHRpTGluZSgpKXZhciBkPWMuZ2V0UmFuZ2UoKSxlPWMuaXNCYWNrd2FyZHMoKTt2YXIgZj1hLmNhbGwodGhpcyxiLmZpcnN0LGIubGFzdCk7ZD8oZC5zdGFydC5yb3crPWYsZC5lbmQucm93Kz1mLGMuc2V0U2VsZWN0aW9uUmFuZ2UoZCxlKSk6KGMuc2V0U2VsZWN0aW9uQW5jaG9yKGIubGFzdCtmKzEsMCksYy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpe2MubW92ZUN1cnNvclRvKGIuZmlyc3QrZiwwKX0pKX0sdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLmNvbGxhcHNlUm93cygpO3JldHVybntmaXJzdDphLnN0YXJ0LnJvdyxsYXN0OmEuZW5kLnJvd319LHRoaXMub25Db21wb3NpdGlvblN0YXJ0PWZ1bmN0aW9uKGEpe3RoaXMucmVuZGVyZXIuc2hvd0NvbXBvc2l0aW9uKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSl9LHRoaXMub25Db21wb3NpdGlvblVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnJlbmRlcmVyLnNldENvbXBvc2l0aW9uVGV4dChhKX0sdGhpcy5vbkNvbXBvc2l0aW9uRW5kPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5oaWRlQ29tcG9zaXRpb24oKX0sdGhpcy5nZXRGaXJzdFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRGaXJzdFZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldExhc3RWaXNpYmxlUm93KCl9LHRoaXMuaXNSb3dWaXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiBhPj10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpJiZhPD10aGlzLmdldExhc3RWaXNpYmxlUm93KCl9LHRoaXMuaXNSb3dGdWxseVZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXRoaXMucmVuZGVyZXIuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSYmYTw9dGhpcy5yZW5kZXJlci5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl9LHRoaXMuJGdldFZpc2libGVSb3dDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldFNjcm9sbEJvdHRvbVJvdygpLXRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsVG9wUm93KCkrMX0sdGhpcy4kZ2V0UGFnZURvd25Sb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxCb3R0b21Sb3coKX0sdGhpcy4kZ2V0UGFnZVVwUm93PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZW5kZXJlci5nZXRTY3JvbGxUb3BSb3coKSxiPXRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsQm90dG9tUm93KCk7cmV0dXJuIGEtKGItYSl9LHRoaXMuc2VsZWN0UGFnZURvd249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRnZXRQYWdlRG93blJvdygpK01hdGguZmxvb3IodGhpcy4kZ2V0VmlzaWJsZVJvd0NvdW50KCkvMik7dGhpcy5zY3JvbGxQYWdlRG93bigpO3ZhciBiPXRoaXMuZ2V0U2VsZWN0aW9uKCksYz10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGIuZ2V0U2VsZWN0aW9uTGVhZCgpKSxkPXRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oYSxjLmNvbHVtbik7Yi5zZWxlY3RUbyhkLnJvdyxkLmNvbHVtbil9LHRoaXMuc2VsZWN0UGFnZVVwPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZW5kZXJlci5nZXRTY3JvbGxUb3BSb3coKS10aGlzLnJlbmRlcmVyLmdldFNjcm9sbEJvdHRvbVJvdygpLGI9dGhpcy4kZ2V0UGFnZVVwUm93KCkrTWF0aC5yb3VuZChhLzIpO3RoaXMuc2Nyb2xsUGFnZVVwKCk7dmFyIGM9dGhpcy5nZXRTZWxlY3Rpb24oKSxkPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oYy5nZXRTZWxlY3Rpb25MZWFkKCkpLGU9dGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihiLGQuY29sdW1uKTtjLnNlbGVjdFRvKGUucm93LGUuY29sdW1uKX0sdGhpcy5nb3RvUGFnZURvd249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRnZXRQYWdlRG93blJvdygpLGI9dGhpcy5nZXRDdXJzb3JQb3NpdGlvblNjcmVlbigpLmNvbHVtbjt0aGlzLnNjcm9sbFRvUm93KGEpLHRoaXMuZ2V0U2VsZWN0aW9uKCkubW92ZUN1cnNvclRvU2NyZWVuKGEsYil9LHRoaXMuZ290b1BhZ2VVcD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGdldFBhZ2VVcFJvdygpLGI9dGhpcy5nZXRDdXJzb3JQb3NpdGlvblNjcmVlbigpLmNvbHVtbjt0aGlzLnNjcm9sbFRvUm93KGEpLHRoaXMuZ2V0U2VsZWN0aW9uKCkubW92ZUN1cnNvclRvU2NyZWVuKGEsYil9LHRoaXMuc2Nyb2xsUGFnZURvd249ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRvUm93KHRoaXMuJGdldFBhZ2VEb3duUm93KCkpfSx0aGlzLnNjcm9sbFBhZ2VVcD1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuc2Nyb2xsVG9Sb3codGhpcy4kZ2V0UGFnZVVwUm93KCkpfSx0aGlzLnNjcm9sbFRvUm93PWZ1bmN0aW9uKGEpe3RoaXMucmVuZGVyZXIuc2Nyb2xsVG9Sb3coYSl9LHRoaXMuc2Nyb2xsVG9MaW5lPWZ1bmN0aW9uKGEsYil7dGhpcy5yZW5kZXJlci5zY3JvbGxUb0xpbmUoYSxiKX0sdGhpcy5jZW50ZXJTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlbGVjdGlvblJhbmdlKCksYj1NYXRoLmZsb29yKGEuc3RhcnQucm93KyhhLmVuZC5yb3ctYS5zdGFydC5yb3cpLzIpO3RoaXMucmVuZGVyZXIuc2Nyb2xsVG9MaW5lKGIsITApfSx0aGlzLmdldEN1cnNvclBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpfSx0aGlzLmdldEN1cnNvclBvc2l0aW9uU2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpKX0sdGhpcy5nZXRTZWxlY3Rpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpfSx0aGlzLnNlbGVjdEFsbD1mdW5jdGlvbigpe3RoaXMuJGJsb2NrU2Nyb2xsaW5nKz0xLHRoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCgpLHRoaXMuJGJsb2NrU2Nyb2xsaW5nLT0xfSx0aGlzLmNsZWFyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5tb3ZlQ3Vyc29yVG89ZnVuY3Rpb24oYSxiKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oYSxiKX0sdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbj1mdW5jdGlvbihhKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihhKX0sdGhpcy5qdW1wVG9NYXRjaGluZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxiPXRoaXMuc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KGEpO2J8fChhLmNvbHVtbis9MSxiPXRoaXMuc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KGEpKSxifHwoYS5jb2x1bW4tPTIsYj10aGlzLnNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldChhKSksYiYmKHRoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLm1vdmVDdXJzb3JUbyhiLnJvdyxiLmNvbHVtbikpfSx0aGlzLmdvdG9MaW5lPWZ1bmN0aW9uKGEsYil7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlc3Npb24udW5mb2xkKHtyb3c6YS0xLGNvbHVtbjpifHwwfSksdGhpcy4kYmxvY2tTY3JvbGxpbmcrPTEsdGhpcy5tb3ZlQ3Vyc29yVG8oYS0xLGJ8fDApLHRoaXMuJGJsb2NrU2Nyb2xsaW5nLT0xLHRoaXMuaXNSb3dGdWxseVZpc2libGUodGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyl8fHRoaXMuc2Nyb2xsVG9MaW5lKGEsITApfSx0aGlzLm5hdmlnYXRlVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5tb3ZlQ3Vyc29yVG8oYSxiKX0sdGhpcy5uYXZpZ2F0ZVVwPWZ1bmN0aW9uKGEpe3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksYT1hfHwxLHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeSgtYSwwKX0sdGhpcy5uYXZpZ2F0ZURvd249ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSxhPWF8fDEsdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckJ5KGEsMCl9LHRoaXMubmF2aWdhdGVMZWZ0PWZ1bmN0aW9uKGEpe2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe3ZhciBiPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5zdGFydDt0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGIpfWVsc2V7YT1hfHwxO3doaWxlKGEtLSl0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGVmdCgpfXRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZVJpZ2h0PWZ1bmN0aW9uKGEpe2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe3ZhciBiPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5lbmQ7dGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihiKX1lbHNle2E9YXx8MTt3aGlsZShhLS0pdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclJpZ2h0KCl9dGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLm5hdmlnYXRlTGluZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxpbmVTdGFydCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZUxpbmVFbmQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGluZUVuZCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZUZpbGVFbmQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZUVuZCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZUZpbGVTdGFydD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JGaWxlU3RhcnQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVXb3JkUmlnaHQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLm5hdmlnYXRlV29yZExlZnQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZExlZnQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMucmVwbGFjZT1mdW5jdGlvbihhLGIpe2ImJnRoaXMuJHNlYXJjaC5zZXQoYik7dmFyIGM9dGhpcy4kc2VhcmNoLmZpbmQodGhpcy5zZXNzaW9uKTtpZighYylyZXR1cm47dGhpcy4kdHJ5UmVwbGFjZShjLGEpLGMhPT1udWxsJiZ0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShjKX0sdGhpcy5yZXBsYWNlQWxsPWZ1bmN0aW9uKGEsYil7YiYmdGhpcy4kc2VhcmNoLnNldChiKTt2YXIgYz10aGlzLiRzZWFyY2guZmluZEFsbCh0aGlzLnNlc3Npb24pO2lmKCFjLmxlbmd0aClyZXR1cm47dmFyIGQ9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO3RoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oMCwwKSx0aGlzLiRibG9ja1Njcm9sbGluZys9MTtmb3IodmFyIGU9Yy5sZW5ndGgtMTtlPj0wOy0tZSl0aGlzLiR0cnlSZXBsYWNlKGNbZV0sYSk7dGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoZCksdGhpcy4kYmxvY2tTY3JvbGxpbmctPTF9LHRoaXMuJHRyeVJlcGxhY2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKGEpO3JldHVybiBiPXRoaXMuJHNlYXJjaC5yZXBsYWNlKGMsYiksYiE9PW51bGw/KGEuZW5kPXRoaXMuc2Vzc2lvbi5yZXBsYWNlKGEsYiksYSk6bnVsbH0sdGhpcy5nZXRMYXN0U2VhcmNoT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzZWFyY2guZ2V0T3B0aW9ucygpfSx0aGlzLmZpbmQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmNsZWFyU2VsZWN0aW9uKCksYj1ifHx7fSxiLm5lZWRsZT1hLHRoaXMuJHNlYXJjaC5zZXQoYiksdGhpcy4kZmluZCgpfSx0aGlzLmZpbmROZXh0PWZ1bmN0aW9uKGEpe2E9YXx8e30sdHlwZW9mIGEuYmFja3dhcmRzPT0idW5kZWZpbmVkIiYmKGEuYmFja3dhcmRzPSExKSx0aGlzLiRzZWFyY2guc2V0KGEpLHRoaXMuJGZpbmQoKX0sdGhpcy5maW5kUHJldmlvdXM9ZnVuY3Rpb24oYSl7YT1hfHx7fSx0eXBlb2YgYS5iYWNrd2FyZHM9PSJ1bmRlZmluZWQiJiYoYS5iYWNrd2FyZHM9ITApLHRoaXMuJHNlYXJjaC5zZXQoYSksdGhpcy4kZmluZCgpfSx0aGlzLiRmaW5kPWZ1bmN0aW9uKGEpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKXx8dGhpcy4kc2VhcmNoLnNldCh7bmVlZGxlOnRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKX0pLHR5cGVvZiBhIT0idW5kZWZpbmVkIiYmdGhpcy4kc2VhcmNoLnNldCh7YmFja3dhcmRzOmF9KTt2YXIgYj10aGlzLiRzZWFyY2guZmluZCh0aGlzLnNlc3Npb24pO2ImJih0aGlzLnNlc3Npb24udW5mb2xkKGIpLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGIpKX0sdGhpcy51bmRvPWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkudW5kbygpfSx0aGlzLnJlZG89ZnVuY3Rpb24oKXt0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS5yZWRvKCl9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuZGVzdHJveSgpfX0pKS5jYWxsKHEucHJvdG90eXBlKSxiLkVkaXRvcj1xfSksZGVmaW5lKCJhY2UvbGliL2xhbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiLGIuc3RyaW5nUmV2ZXJzZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpfSxiLnN0cmluZ1JlcGVhdD1mdW5jdGlvbihhLGIpe3JldHVybihuZXcgQXJyYXkoYisxKSkuam9pbihhKX07dmFyIGQ9L15cc1xzKi8sZT0vXHNccyokLztiLnN0cmluZ1RyaW1MZWZ0PWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZCwiIil9LGIuc3RyaW5nVHJpbVJpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZSwiIil9LGIuY29weU9iamVjdD1mdW5jdGlvbihhKXt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2NdPWFbY107cmV0dXJuIGJ9LGIuY29weUFycmF5PWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylhW2NdJiZ0eXBlb2YgYVtjXT09Im9iamVjdCI/YltjXT10aGlzLmNvcHlPYmplY3QoYVtjXSk6YltjXT1hW2NdO3JldHVybiBifSxiLmRlZXBDb3B5PWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4gYTt2YXIgYj1hLmNvbnN0cnVjdG9yKCk7Zm9yKHZhciBjIGluIGEpdHlwZW9mIGFbY109PSJvYmplY3QiP2JbY109dGhpcy5kZWVwQ29weShhW2NdKTpiW2NdPWFbY107cmV0dXJuIGJ9LGIuYXJyYXlUb01hcD1mdW5jdGlvbihhKXt2YXIgYj17fTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliW2FbY11dPTE7cmV0dXJuIGJ9LGIuYXJyYXlSZW1vdmU9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPD1hLmxlbmd0aDtjKyspYj09PWFbY10mJmEuc3BsaWNlKGMsMSl9LGIuZXNjYXBlUmVnRXhwPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywiXFwkMSIpfSxiLmRlZmVycmVkQ2FsbD1mdW5jdGlvbihhKXt2YXIgYj1udWxsLGM9ZnVuY3Rpb24oKXtiPW51bGwsYSgpfSxkPWZ1bmN0aW9uKGEpe3JldHVybiBkLmNhbmNlbCgpLGI9c2V0VGltZW91dChjLGF8fDApLGR9O3JldHVybiBkLnNjaGVkdWxlPWQsZC5jYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsKCksYSgpLGR9LGQuY2FuY2VsPWZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dChiKSxiPW51bGwsZH0sZH19KSxkZWZpbmUoImFjZS9rZXlib2FyZC90ZXh0aW5wdXQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2V2ZW50IiksZT1hKCIuLi9saWIvdXNlcmFnZW50IiksZj1hKCIuLi9saWIvZG9tIiksZz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGwoKXt0cnl7Yy5zZWxlY3QoKX1jYXRjaChhKXt9fWZ1bmN0aW9uIG0oYSl7aWYoIWkpe3ZhciBkPWF8fGMudmFsdWU7aWYoZCl7ZC5jaGFyQ29kZUF0KGQubGVuZ3RoLTEpPT1nLmNoYXJDb2RlQXQoMCk/KGQ9ZC5zbGljZSgwLC0xKSxkJiZiLm9uVGV4dElucHV0KGQsaikpOmIub25UZXh0SW5wdXQoZCxqKTtpZighdigpKXJldHVybiExfX1pPSExLGo9ITEsYy52YWx1ZT1nLGwoKX1mdW5jdGlvbiB2KCl7cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1jfXZhciBjPWYuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtlLmlzVG91Y2hQYWQmJmMuc2V0QXR0cmlidXRlKCJ4LXBhbG0tZGlzYWJsZS1hdXRvLWNhcCIsITApLGMuc3R5bGUubGVmdD0iLTEwMDAwcHgiLGMuc3R5bGUucG9zaXRpb249ImZpeGVkIixhLmluc2VydEJlZm9yZShjLGEuZmlyc3RDaGlsZCk7dmFyIGc9U3RyaW5nLmZyb21DaGFyQ29kZSgwKTttKCk7dmFyIGg9ITEsaT0hMSxqPSExLGs9IiIsbj1mdW5jdGlvbihhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aHx8bShhLmRhdGEpfSwwKX0sbz1mdW5jdGlvbihhKXtpZihlLmlzT2xkSUUmJmMudmFsdWUuY2hhckNvZGVBdCgwKT4xMjgpcmV0dXJuO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtofHxtKCl9LDApfSxwPWZ1bmN0aW9uKGEpe2g9ITAsYi5vbkNvbXBvc2l0aW9uU3RhcnQoKSxlLmlzR2Vja298fHNldFRpbWVvdXQocSwwKX0scT1mdW5jdGlvbigpe2lmKCFoKXJldHVybjtiLm9uQ29tcG9zaXRpb25VcGRhdGUoYy52YWx1ZSl9LHI9ZnVuY3Rpb24oYSl7aD0hMSxiLm9uQ29tcG9zaXRpb25FbmQoKX0scz1mdW5jdGlvbihhKXtpPSEwO3ZhciBkPWIuZ2V0Q29weVRleHQoKTtkP2MudmFsdWU9ZDphLnByZXZlbnREZWZhdWx0KCksbCgpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXttKCl9LDApfSx0PWZ1bmN0aW9uKGEpe2k9ITA7dmFyIGQ9Yi5nZXRDb3B5VGV4dCgpO2Q/KGMudmFsdWU9ZCxiLm9uQ3V0KCkpOmEucHJldmVudERlZmF1bHQoKSxsKCksc2V0VGltZW91dChmdW5jdGlvbigpe20oKX0sMCl9O2QuYWRkQ29tbWFuZEtleUxpc3RlbmVyKGMsYi5vbkNvbW1hbmRLZXkuYmluZChiKSk7aWYoZS5pc09sZElFKXt2YXIgdT17MTM6MSwyNzoxfTtkLmFkZExpc3RlbmVyKGMsImtleXVwIixmdW5jdGlvbihhKXtoJiYoIWMudmFsdWV8fHVbYS5rZXlDb2RlXSkmJnNldFRpbWVvdXQociwwKTtpZigoYy52YWx1ZS5jaGFyQ29kZUF0KDApfDApPDEyOSlyZXR1cm47aD9xKCk6cCgpfSl9Im9ucHJvcGVydHljaGFuZ2UiaW4gYyYmISgib25pbnB1dCJpbiBjKT9kLmFkZExpc3RlbmVyKGMsInByb3BlcnR5Y2hhbmdlIixvKTpkLmFkZExpc3RlbmVyKGMsImlucHV0IixuKSxkLmFkZExpc3RlbmVyKGMsInBhc3RlIixmdW5jdGlvbihhKXtqPSEwLGEuY2xpcGJvYXJkRGF0YSYmYS5jbGlwYm9hcmREYXRhLmdldERhdGE/KG0oYS5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKSksYS5wcmV2ZW50RGVmYXVsdCgpKTpvKCl9KSwib25iZWZvcmVjb3B5ImluIGMmJnR5cGVvZiBjbGlwYm9hcmREYXRhIT0idW5kZWZpbmVkIj8oZC5hZGRMaXN0ZW5lcihjLCJiZWZvcmVjb3B5IixmdW5jdGlvbihhKXt2YXIgYz1iLmdldENvcHlUZXh0KCk7Yz9jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLGMpOmEucHJldmVudERlZmF1bHQoKX0pLGQuYWRkTGlzdGVuZXIoYSwia2V5ZG93biIsZnVuY3Rpb24oYSl7aWYoYS5jdHJsS2V5JiZhLmtleUNvZGU9PTg4KXt2YXIgYz1iLmdldENvcHlUZXh0KCk7YyYmKGNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsYyksYi5vbkN1dCgpKSxkLnByZXZlbnREZWZhdWx0KGEpfX0pKTooZC5hZGRMaXN0ZW5lcihjLCJjb3B5IixzKSxkLmFkZExpc3RlbmVyKGMsImN1dCIsdCkpLGQuYWRkTGlzdGVuZXIoYywiY29tcG9zaXRpb25zdGFydCIscCksZS5pc0dlY2tvJiZkLmFkZExpc3RlbmVyKGMsInRleHQiLHEpLGUuaXNXZWJLaXQmJmQuYWRkTGlzdGVuZXIoYywia2V5dXAiLHEpLGQuYWRkTGlzdGVuZXIoYywiY29tcG9zaXRpb25lbmQiLHIpLGQuYWRkTGlzdGVuZXIoYywiYmx1ciIsZnVuY3Rpb24oKXtiLm9uQmx1cigpfSksZC5hZGRMaXN0ZW5lcihjLCJmb2N1cyIsZnVuY3Rpb24oKXtiLm9uRm9jdXMoKSxsKCl9KSx0aGlzLmZvY3VzPWZ1bmN0aW9uKCl7Yi5vbkZvY3VzKCksbCgpLGMuZm9jdXMoKX0sdGhpcy5ibHVyPWZ1bmN0aW9uKCl7Yy5ibHVyKCl9LHRoaXMuaXNGb2N1c2VkPXYsdGhpcy5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMub25Db250ZXh0TWVudT1mdW5jdGlvbihhLGIpe2EmJihrfHwoaz1jLnN0eWxlLmNzc1RleHQpLGMuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246Zml4ZWQ7IHotaW5kZXg6MTAwMDtsZWZ0OiIrKGEueC0yKSsicHg7IHRvcDoiKyhhLnktMikrInB4OyIpLGImJihjLnZhbHVlPSIiKX0sdGhpcy5vbkNvbnRleHRNZW51Q2xvc2U9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ayYmKGMuc3R5bGUuY3NzVGV4dD1rLGs9IiIpLG0oKX0sMCl9fTtiLlRleHRJbnB1dD1nfSksZGVmaW5lKCJhY2UvbW91c2UvbW91c2VfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbW91c2UvZGVmYXVsdF9oYW5kbGVycyIsImFjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIiwiYWNlL21vdXNlL21vdXNlX2V2ZW50Il0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvZXZlbnQiKSxlPWEoIi4vZGVmYXVsdF9oYW5kbGVycyIpLkRlZmF1bHRIYW5kbGVycyxmPWEoIi4vZGVmYXVsdF9ndXR0ZXJfaGFuZGxlciIpLkd1dHRlckhhbmRsZXIsZz1hKCIuL21vdXNlX2V2ZW50IikuTW91c2VFdmVudCxoPWZ1bmN0aW9uKGEpe3RoaXMuZWRpdG9yPWEsbmV3IGUoYSksbmV3IGYoYSksZC5hZGRMaXN0ZW5lcihhLmNvbnRhaW5lciwibW91c2Vkb3duIixmdW5jdGlvbihiKXtyZXR1cm4gYS5mb2N1cygpLGQucHJldmVudERlZmF1bHQoYil9KSxkLmFkZExpc3RlbmVyKGEuY29udGFpbmVyLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJldmVudERlZmF1bHQoYSl9KTt2YXIgYj1hLnJlbmRlcmVyLmdldE1vdXNlRXZlbnRUYXJnZXQoKTtkLmFkZExpc3RlbmVyKGIsIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJtb3VzZWRvd24iKSksZC5hZGRMaXN0ZW5lcihiLCJjbGljayIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJjbGljayIpKSxkLmFkZExpc3RlbmVyKGIsIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMsIm1vdXNlbW92ZSIpKSxkLmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXIoYiwwLDIsNTAwLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywiZGJsY2xpY2siKSksZC5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyKGIsMCwzLDYwMCx0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsInRyaXBsZWNsaWNrIikpLGQuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lcihiLDAsNCw2MDAsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJxdWFkY2xpY2siKSksZC5hZGRNb3VzZVdoZWVsTGlzdGVuZXIoYS5jb250YWluZXIsdGhpcy5vbk1vdXNlV2hlZWwuYmluZCh0aGlzLCJtb3VzZXdoZWVsIikpO3ZhciBjPWEucmVuZGVyZXIuJGd1dHRlcjtkLmFkZExpc3RlbmVyKGMsIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJndXR0ZXJtb3VzZWRvd24iKSksZC5hZGRMaXN0ZW5lcihjLCJjbGljayIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJndXR0ZXJjbGljayIpKSxkLmFkZExpc3RlbmVyKGMsImRibGNsaWNrIix0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsImd1dHRlcmRibGNsaWNrIikpLGQuYWRkTGlzdGVuZXIoYywibW91c2Vtb3ZlIix0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcywiZ3V0dGVyIikpfTsoKGZ1bmN0aW9uKCl7dGhpcy4kc2Nyb2xsU3BlZWQ9MSx0aGlzLnNldFNjcm9sbFNwZWVkPWZ1bmN0aW9uKGEpe3RoaXMuJHNjcm9sbFNwZWVkPWF9LHRoaXMuZ2V0U2Nyb2xsU3BlZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsU3BlZWR9LHRoaXMub25Nb3VzZUV2ZW50PWZ1bmN0aW9uKGEsYil7dGhpcy5lZGl0b3IuX2VtaXQoYSxuZXcgZyhiLHRoaXMuZWRpdG9yKSl9LHRoaXMuJGRyYWdEZWxheT0yNTAsdGhpcy5zZXREcmFnRGVsYXk9ZnVuY3Rpb24oYSl7dGhpcy4kZHJhZ0RlbGF5PWF9LHRoaXMuZ2V0RHJhZ0RlbGF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGRyYWdEZWxheX0sdGhpcy5vbk1vdXNlTW92ZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZWRpdG9yLl9ldmVudFJlZ2lzdHJ5JiZ0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1vdmU7aWYoIWN8fCFjLmxlbmd0aClyZXR1cm47dGhpcy5lZGl0b3IuX2VtaXQoYSxuZXcgZyhiLHRoaXMuZWRpdG9yKSl9LHRoaXMub25Nb3VzZVdoZWVsPWZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGcoYix0aGlzLmVkaXRvcik7Yy5zcGVlZD10aGlzLiRzY3JvbGxTcGVlZCoyLGMud2hlZWxYPWIud2hlZWxYLGMud2hlZWxZPWIud2hlZWxZLHRoaXMuZWRpdG9yLl9lbWl0KGEsYyl9fSkpLmNhbGwoaC5wcm90b3R5cGUpLGIuTW91c2VIYW5kbGVyPWh9KSxkZWZpbmUoImFjZS9tb3VzZS9kZWZhdWx0X2hhbmRsZXJzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9icm93c2VyX2ZvY3VzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGsoYSl7dGhpcy5lZGl0b3I9YSx0aGlzLiRjbGlja1NlbGVjdGlvbj1udWxsLHRoaXMuYnJvd3NlckZvY3VzPW5ldyBmLGEuc2V0RGVmYXVsdEhhbmRsZXIoIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpKSxhLnNldERlZmF1bHRIYW5kbGVyKCJkYmxjbGljayIsdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQodGhpcykpLGEuc2V0RGVmYXVsdEhhbmRsZXIoInRyaXBsZWNsaWNrIix0aGlzLm9uVHJpcGxlQ2xpY2suYmluZCh0aGlzKSksYS5zZXREZWZhdWx0SGFuZGxlcigicXVhZGNsaWNrIix0aGlzLm9uUXVhZENsaWNrLmJpbmQodGhpcykpLGEuc2V0RGVmYXVsdEhhbmRsZXIoIm1vdXNld2hlZWwiLHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSl9ZnVuY3Rpb24gbChhLGIsYyxkKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGMtYSwyKStNYXRoLnBvdyhkLWIsMikpfSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvZXZlbnQiKSxlPWEoIi4uL2xpYi9kb20iKSxmPWEoIi4uL2xpYi9icm93c2VyX2ZvY3VzIikuQnJvd3NlckZvY3VzLGc9MCxoPTEsaT0yLGo9NTsoKGZ1bmN0aW9uKCl7dGhpcy5vbk1vdXNlRG93bj1mdW5jdGlvbihhKXtmdW5jdGlvbiBDKGIpe2EuZ2V0U2hpZnRLZXkoKT9tLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0aW9uKGIpOm4uJGNsaWNrU2VsZWN0aW9ufHwobS5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihiKSxtLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbihiLnJvdyxiLmNvbHVtbikpLHE9aH12YXIgYj1hLmluU2VsZWN0aW9uKCksYz1hLnBhZ2VYLGY9YS5wYWdlWSxrPWEuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLG09dGhpcy5lZGl0b3Isbj10aGlzLG89bS5nZXRTZWxlY3Rpb25SYW5nZSgpLHA9by5pc0VtcHR5KCkscT1nO2lmKGImJighdGhpcy5icm93c2VyRm9jdXMuaXNGb2N1c2VkKCl8fChuZXcgRGF0ZSkuZ2V0VGltZSgpLXRoaXMuYnJvd3NlckZvY3VzLmxhc3RGb2N1czwyMHx8IW0uaXNGb2N1c2VkKCkpKXttLmZvY3VzKCk7cmV0dXJufXZhciByPWEuZ2V0QnV0dG9uKCk7aWYociE9PTApe3AmJm0ubW92ZUN1cnNvclRvUG9zaXRpb24oaykscj09MiYmKG0udGV4dElucHV0Lm9uQ29udGV4dE1lbnUoe3g6YS5jbGllbnRYLHk6YS5jbGllbnRZfSxwKSxkLmNhcHR1cmUobS5jb250YWluZXIsZnVuY3Rpb24oKXt9LG0udGV4dElucHV0Lm9uQ29udGV4dE1lbnVDbG9zZSkpO3JldHVybn1ifHxDKGspO3ZhciBzPWMsdD1mLHU9KG5ldyBEYXRlKS5nZXRUaW1lKCksdix3LHgseT1mdW5jdGlvbihhKXtzPWQuZ2V0RG9jdW1lbnRYKGEpLHQ9ZC5nZXREb2N1bWVudFkoYSl9LHo9ZnVuY3Rpb24oYSl7Y2xlYXJJbnRlcnZhbChGKSxxPT1nP0Moayk6cT09aSYmQShhKSxuLiRjbGlja1NlbGVjdGlvbj1udWxsLHE9Z30sQT1mdW5jdGlvbihhKXtlLnJlbW92ZUNzc0NsYXNzKG0uY29udGFpbmVyLCJhY2VfZHJhZ2dpbmciKSxtLnNlc3Npb24ucmVtb3ZlTWFya2VyKHgpLG0uJG1vdXNlSGFuZGxlci4kY2xpY2tTZWxlY3Rpb258fHZ8fChtLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGspLG0uc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKGsucm93LGsuY29sdW1uKSk7aWYoIXYpcmV0dXJuO2lmKHcuY29udGFpbnModi5yb3csdi5jb2x1bW4pKXt2PW51bGw7cmV0dXJufW0uY2xlYXJTZWxlY3Rpb24oKTtpZihhJiYoYS5jdHJsS2V5fHxhLmFsdEtleSkpdmFyIGI9bS5zZXNzaW9uLGM9Yi5pbnNlcnQodixiLmdldFRleHRSYW5nZSh3KSk7ZWxzZSB2YXIgYz1tLm1vdmVUZXh0KHcsdik7aWYoIWMpe3Y9bnVsbDtyZXR1cm59bS5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoYyl9LEI9ZnVuY3Rpb24oKXtpZihxPT1nKXt2YXIgYT1sKGMsZixzLHQpLGI9KG5ldyBEYXRlKS5nZXRUaW1lKCk7aWYoYT5qKXtxPWg7dmFyIGQ9bS5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhzLHQpO2Qucm93PU1hdGgubWF4KDAsTWF0aC5taW4oZC5yb3csbS5zZXNzaW9uLmdldExlbmd0aCgpLTEpKSxDKGQpfWVsc2UgaWYoYi11Pm0uZ2V0RHJhZ0RlbGF5KCkpe3E9aSx3PW0uZ2V0U2VsZWN0aW9uUmFuZ2UoKTt2YXIgaz1tLmdldFNlbGVjdGlvblN0eWxlKCk7eD1tLnNlc3Npb24uYWRkTWFya2VyKHcsImFjZV9zZWxlY3Rpb24iLGspLG0uY2xlYXJTZWxlY3Rpb24oKSxlLmFkZENzc0NsYXNzKG0uY29udGFpbmVyLCJhY2VfZHJhZ2dpbmciKX19cT09aT9FKCk6cT09aCYmRCgpfSxEPWZ1bmN0aW9uKCl7dmFyIGEsYj1tLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHMsdCk7Yi5yb3c9TWF0aC5tYXgoMCxNYXRoLm1pbihiLnJvdyxtLnNlc3Npb24uZ2V0TGVuZ3RoKCktMSkpLG4uJGNsaWNrU2VsZWN0aW9uP24uJGNsaWNrU2VsZWN0aW9uLmNvbnRhaW5zKGIucm93LGIuY29sdW1uKT9tLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuLiRjbGlja1NlbGVjdGlvbik6KG4uJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmUoYi5yb3csYi5jb2x1bW4pPT0tMT9hPW4uJGNsaWNrU2VsZWN0aW9uLmVuZDphPW4uJGNsaWNrU2VsZWN0aW9uLnN0YXJ0LG0uc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihhLnJvdyxhLmNvbHVtbiksbS5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihiKSk6bS5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihiKSxtLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCl9LEU9ZnVuY3Rpb24oKXt2PW0ucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMocyx0KSx2LnJvdz1NYXRoLm1heCgwLE1hdGgubWluKHYucm93LG0uc2Vzc2lvbi5nZXRMZW5ndGgoKS0xKSksbS5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih2KX07ZC5jYXB0dXJlKG0uY29udGFpbmVyLHkseik7dmFyIEY9c2V0SW50ZXJ2YWwoQiwyMCk7cmV0dXJuIGEucHJldmVudERlZmF1bHQoKX0sdGhpcy5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLGM9dGhpcy5lZGl0b3I7Yy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihiKSxjLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCksdGhpcy4kY2xpY2tTZWxlY3Rpb249Yy5nZXRTZWxlY3Rpb25SYW5nZSgpfSx0aGlzLm9uVHJpcGxlQ2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXREb2N1bWVudFBvc2l0aW9uKCksYz10aGlzLmVkaXRvcjtjLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGIpLGMuc2VsZWN0aW9uLnNlbGVjdExpbmUoKSx0aGlzLiRjbGlja1NlbGVjdGlvbj1jLmdldFNlbGVjdGlvblJhbmdlKCl9LHRoaXMub25RdWFkQ2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lZGl0b3I7Yi5zZWxlY3RBbGwoKSx0aGlzLiRjbGlja1NlbGVjdGlvbj1iLmdldFNlbGVjdGlvblJhbmdlKCl9LHRoaXMub25TY3JvbGw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lZGl0b3I7Yi5yZW5kZXJlci5zY3JvbGxCeShhLndoZWVsWCphLnNwZWVkLGEud2hlZWxZKmEuc3BlZWQpO2lmKGIucmVuZGVyZXIuaXNTY3JvbGxhYmxlQnkoYS53aGVlbFgqYS5zcGVlZCxhLndoZWVsWSphLnNwZWVkKSlyZXR1cm4gYS5wcmV2ZW50RGVmYXVsdCgpfX0pKS5jYWxsKGsucHJvdG90eXBlKSxiLkRlZmF1bHRIYW5kbGVycz1rfSksZGVmaW5lKCJhY2UvbGliL2Jyb3dzZXJfZm9jdXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vb29wIiksZT1hKCIuL2V2ZW50IiksZj1hKCIuL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZz1mdW5jdGlvbihhKXthPWF8fHdpbmRvdyx0aGlzLmxhc3RGb2N1cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLl9pc0ZvY3VzZWQ9ITA7dmFyIGI9dGhpczsib25mb2N1c2luImluIGEuZG9jdW1lbnQ/KGUuYWRkTGlzdGVuZXIoYS5kb2N1bWVudCwiZm9jdXNpbiIsZnVuY3Rpb24oYSl7Yi5fc2V0Rm9jdXNlZCghMCl9KSxlLmFkZExpc3RlbmVyKGEuZG9jdW1lbnQsImZvY3Vzb3V0IixmdW5jdGlvbihhKXtiLl9zZXRGb2N1c2VkKCEhYS50b0VsZW1lbnQpfSkpOihlLmFkZExpc3RlbmVyKGEsImJsdXIiLGZ1bmN0aW9uKGEpe2IuX3NldEZvY3VzZWQoITEpfSksZS5hZGRMaXN0ZW5lcihhLCJmb2N1cyIsZnVuY3Rpb24oYSl7Yi5fc2V0Rm9jdXNlZCghMCl9KSl9OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGYpLHRoaXMuaXNGb2N1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRm9jdXNlZH0sdGhpcy5fc2V0Rm9jdXNlZD1mdW5jdGlvbihhKXtpZih0aGlzLl9pc0ZvY3VzZWQ9PWEpcmV0dXJuO2EmJih0aGlzLmxhc3RGb2N1cz0obmV3IERhdGUpLmdldFRpbWUoKSksdGhpcy5faXNGb2N1c2VkPWEsdGhpcy5fZW1pdCgiY2hhbmdlRm9jdXMiKX19KSkuY2FsbChnLnByb3RvdHlwZSksYi5Ccm93c2VyRm9jdXM9Z30pLGRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD17fTtkLl9lbWl0PWQuX2Rpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oYSxiKXt0aGlzLl9ldmVudFJlZ2lzdHJ5PXRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9LHRoaXMuX2RlZmF1bHRIYW5kbGVycz10aGlzLl9kZWZhdWx0SGFuZGxlcnN8fHt9O3ZhciBjPXRoaXMuX2V2ZW50UmVnaXN0cnlbYV18fFtdLGQ9dGhpcy5fZGVmYXVsdEhhbmRsZXJzW2FdO2lmKCFjLmxlbmd0aCYmIWQpcmV0dXJuO2I9Ynx8e30sYi50eXBlPWEsYi5zdG9wUHJvcGFnYXRpb258fChiLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMucHJvcGFnYXRpb25TdG9wcGVkPSEwfSksYi5wcmV2ZW50RGVmYXVsdHx8KGIucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9KTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyl7Y1tlXShiKTtpZihiLnByb3BhZ2F0aW9uU3RvcHBlZClicmVha31kJiYhYi5kZWZhdWx0UHJldmVudGVkJiZkKGIpfSxkLnNldERlZmF1bHRIYW5kbGVyPWZ1bmN0aW9uKGEsYil7dGhpcy5fZGVmYXVsdEhhbmRsZXJzPXRoaXMuX2RlZmF1bHRIYW5kbGVyc3x8e307aWYodGhpcy5fZGVmYXVsdEhhbmRsZXJzW2FdKXRocm93IG5ldyBFcnJvcigiVGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgJyIrYSsiJyBpcyBhbHJlYWR5IHNldCIpO3RoaXMuX2RlZmF1bHRIYW5kbGVyc1thXT1ifSxkLm9uPWQuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIpe3RoaXMuX2V2ZW50UmVnaXN0cnk9dGhpcy5fZXZlbnRSZWdpc3RyeXx8e307dmFyIGM9dGhpcy5fZXZlbnRSZWdpc3RyeVthXTtpZighYyl2YXIgYz10aGlzLl9ldmVudFJlZ2lzdHJ5W2FdPVtdO2MuaW5kZXhPZihiKT09LTEmJmMucHVzaChiKX0sZC5yZW1vdmVMaXN0ZW5lcj1kLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXt0aGlzLl9ldmVudFJlZ2lzdHJ5PXRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9O3ZhciBjPXRoaXMuX2V2ZW50UmVnaXN0cnlbYV07aWYoIWMpcmV0dXJuO3ZhciBkPWMuaW5kZXhPZihiKTtkIT09LTEmJmMuc3BsaWNlKGQsMSl9LGQucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGEpe3RoaXMuX2V2ZW50UmVnaXN0cnkmJih0aGlzLl9ldmVudFJlZ2lzdHJ5W2FdPVtdKX0sYi5FdmVudEVtaXR0ZXI9ZH0pLGRlZmluZSgiYWNlL21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXthLnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJjbGljayIsZnVuY3Rpb24oYil7dmFyIGM9Yi5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93LGQ9YS5zZXNzaW9uLnNlbGVjdGlvbjtkLm1vdmVDdXJzb3JUbyhjLDApLGQuc2VsZWN0TGluZSgpfSl9InVzZSBzdHJpY3QiLGIuR3V0dGVySGFuZGxlcj1kfSksZGVmaW5lKCJhY2UvbW91c2UvbW91c2VfZXZlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50Il0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvZXZlbnQiKSxlPWIuTW91c2VFdmVudD1mdW5jdGlvbihhLGIpe3RoaXMuZG9tRXZlbnQ9YSx0aGlzLmVkaXRvcj1iLHRoaXMucGFnZVg9ZC5nZXREb2N1bWVudFgoYSksdGhpcy5wYWdlWT1kLmdldERvY3VtZW50WShhKSx0aGlzLmNsaWVudFg9YS5jbGllbnRYLHRoaXMuY2xpZW50WT1hLmNsaWVudFksdGhpcy4kcG9zPW51bGwsdGhpcy4kaW5TZWxlY3Rpb249bnVsbCx0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZD0hMSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITF9OygoZnVuY3Rpb24oKXt0aGlzLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe2Quc3RvcFByb3BhZ2F0aW9uKHRoaXMuZG9tRXZlbnQpLHRoaXMucHJvcGFnYXRpb25TdG9wcGVkPSEwfSx0aGlzLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7ZC5wcmV2ZW50RGVmYXVsdCh0aGlzLmRvbUV2ZW50KSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9LHRoaXMuc3RvcD1mdW5jdGlvbigpe3RoaXMuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLmdldERvY3VtZW50UG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRwb3MpcmV0dXJuIHRoaXMuJHBvczt2YXIgYT1kLmdldERvY3VtZW50WCh0aGlzLmRvbUV2ZW50KSxiPWQuZ2V0RG9jdW1lbnRZKHRoaXMuZG9tRXZlbnQpO3JldHVybiB0aGlzLiRwb3M9dGhpcy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMoYSxiKSx0aGlzLiRwb3Mucm93PU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy4kcG9zLnJvdyx0aGlzLmVkaXRvci5zZXNzaW9uLmdldExlbmd0aCgpLTEpKSx0aGlzLiRwb3N9LHRoaXMuaW5TZWxlY3Rpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRpblNlbGVjdGlvbiE9PW51bGwpcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uO3ZhciBhPXRoaXMuZWRpdG9yO2lmKGEuZ2V0UmVhZE9ubHkoKSl0aGlzLiRpblNlbGVjdGlvbj0hMTtlbHNle3ZhciBiPWEuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpZihiLmlzRW1wdHkoKSl0aGlzLiRpblNlbGVjdGlvbj0hMTtlbHNle3ZhciBjPXRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlvbigpO3RoaXMuJGluU2VsZWN0aW9uPWIuY29udGFpbnMoYy5yb3csYy5jb2x1bW4pfX1yZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb259LHRoaXMuZ2V0QnV0dG9uPWZ1bmN0aW9uKCl7cmV0dXJuIGQuZ2V0QnV0dG9uKHRoaXMuZG9tRXZlbnQpfSx0aGlzLmdldFNoaWZ0S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tRXZlbnQuc2hpZnRLZXl9LHRoaXMuZ2V0QWNjZWxLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21FdmVudC5jdHJsS2V5fHx0aGlzLmRvbUV2ZW50Lm1ldGFLZXl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW91c2UvZm9sZF9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7YS5vbigiY2xpY2siLGZ1bmN0aW9uKGIpe3ZhciBjPWIuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLGQ9YS5zZXNzaW9uLGU9ZC5nZXRGb2xkQXQoYy5yb3csYy5jb2x1bW4sMSk7ZSYmKGIuZ2V0QWNjZWxLZXkoKT9kLnJlbW92ZUZvbGQoZSk6ZC5leHBhbmRGb2xkKGUpLGIuc3RvcCgpKX0pLGEub24oImd1dHRlcmNsaWNrIixmdW5jdGlvbihiKXtpZihiLmRvbUV2ZW50LnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZigiYWNlX2ZvbGQtd2lkZ2V0IikhPS0xKXt2YXIgYz1iLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7YS5zZXNzaW9uLm9uRm9sZFdpZGdldENsaWNrKGMsYi5kb21FdmVudCksYi5zdG9wKCl9fSl9InVzZSBzdHJpY3QiLGIuRm9sZEhhbmRsZXI9ZH0pLGRlZmluZSgiYWNlL2tleWJvYXJkL2tleWJpbmRpbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2tleXMiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9rZXlzIiksZT1hKCIuLi9saWIvZXZlbnQiKTthKCIuLi9jb21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzIik7dmFyIGY9ZnVuY3Rpb24oYSl7dGhpcy4kZWRpdG9yPWEsdGhpcy4kZGF0YT17fSx0aGlzLiRoYW5kbGVycz1bdGhpc119OygoZnVuY3Rpb24oKXt0aGlzLnNldEtleWJvYXJkSGFuZGxlcj1mdW5jdGlvbihhKXtpZih0aGlzLiRoYW5kbGVyc1t0aGlzLiRoYW5kbGVycy5sZW5ndGgtMV09PWEpcmV0dXJuO3RoaXMuJGRhdGE9e30sdGhpcy4kaGFuZGxlcnM9YT9bdGhpcyxhXTpbdGhpc119LHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyPWZ1bmN0aW9uKGEpe3RoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKGEpLHRoaXMuJGhhbmRsZXJzLnB1c2goYSl9LHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJGhhbmRsZXJzLmluZGV4T2YoYSk7cmV0dXJuIGI9PS0xPyExOih0aGlzLiRoYW5kbGVycy5zcGxpY2UoYiwxKSwhMCl9LHRoaXMuZ2V0S2V5Ym9hcmRIYW5kbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGhhbmRsZXJzW3RoaXMuJGhhbmRsZXJzLmxlbmd0aC0xXX0sdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGY7Zm9yKHZhciBnPXRoaXMuJGhhbmRsZXJzLmxlbmd0aDtnLS07KXtmPXRoaXMuJGhhbmRsZXJzW2ddLmhhbmRsZUtleWJvYXJkKHRoaXMuJGRhdGEsYSxiLGMsZCk7aWYoZiYmZi5jb21tYW5kKWJyZWFrfWlmKCFmfHwhZi5jb21tYW5kKXJldHVybiExO3ZhciBoPSExLGk9dGhpcy4kZWRpdG9yLmNvbW1hbmRzO3JldHVybiBmLmNvbW1hbmQhPSJudWxsIj9oPWkuZXhlYyhmLmNvbW1hbmQsdGhpcy4kZWRpdG9yLGYuYXJncyk6aD0hMCxoJiZkJiZlLnN0b3BFdmVudChkKSxofSx0aGlzLmhhbmRsZUtleWJvYXJkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57Y29tbWFuZDp0aGlzLiRlZGl0b3IuY29tbWFuZHMuZmluZEtleUNvbW1hbmQoYixjKX19LHRoaXMub25Db21tYW5kS2V5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZT1kLmtleUNvZGVUb1N0cmluZyhjKTt0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycyhiLGUsYyxhKX0sdGhpcy5vblRleHRJbnB1dD1mdW5jdGlvbihhLGIpe3ZhciBjPSExOyFiJiZhLmxlbmd0aD09MSYmKGM9dGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMoMCxhKSksY3x8dGhpcy4kZWRpdG9yLmNvbW1hbmRzLmV4ZWMoImluc2VydHN0cmluZyIsdGhpcy4kZWRpdG9yLGEpfX0pKS5jYWxsKGYucHJvdG90eXBlKSxiLktleUJpbmRpbmc9Zn0pLGRlZmluZSgiYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZShhLGIpe3JldHVybnt3aW46YSxtYWM6Yn19InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9sYW5nIik7Yi5jb21tYW5kcz1be25hbWU6InNlbGVjdGFsbCIsYmluZEtleTplKCJDdHJsLUEiLCJDb21tYW5kLUEiKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2VsZWN0QWxsKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiY2VudGVyc2VsZWN0aW9uIixiaW5kS2V5OmUobnVsbCwiQ3RybC1MIiksZXhlYzpmdW5jdGlvbihhKXthLmNlbnRlclNlbGVjdGlvbigpfSxyZWFkT25seTohMH0se25hbWU6ImdvdG9saW5lIixiaW5kS2V5OmUoIkN0cmwtTCIsIkNvbW1hbmQtTCIpLGV4ZWM6ZnVuY3Rpb24oYSl7dmFyIGI9cGFyc2VJbnQocHJvbXB0KCJFbnRlciBsaW5lIG51bWJlcjoiKSwxMCk7aXNOYU4oYil8fGEuZ290b0xpbmUoYil9LHJlYWRPbmx5OiEwfSx7bmFtZToiZm9sZCIsYmluZEtleTplKCJBbHQtTCIsIkFsdC1MIiksZXhlYzpmdW5jdGlvbihhKXthLnNlc3Npb24udG9nZ2xlRm9sZCghMSl9LHJlYWRPbmx5OiEwfSx7bmFtZToidW5mb2xkIixiaW5kS2V5OmUoIkFsdC1TaGlmdC1MIiwiQWx0LVNoaWZ0LUwiKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2Vzc2lvbi50b2dnbGVGb2xkKCEwKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJmb2xkYWxsIixiaW5kS2V5OmUoIkFsdC0wIiwiQWx0LTAiKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2Vzc2lvbi5mb2xkQWxsKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToidW5mb2xkYWxsIixiaW5kS2V5OmUoIkFsdC1TaGlmdC0wIiwiQWx0LVNoaWZ0LTAiKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2Vzc2lvbi51bmZvbGQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJmaW5kbmV4dCIsYmluZEtleTplKCJDdHJsLUsiLCJDb21tYW5kLUciKSxleGVjOmZ1bmN0aW9uKGEpe2EuZmluZE5leHQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJmaW5kcHJldmlvdXMiLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1LIiwiQ29tbWFuZC1TaGlmdC1HIiksZXhlYzpmdW5jdGlvbihhKXthLmZpbmRQcmV2aW91cygpfSxyZWFkT25seTohMH0se25hbWU6ImZpbmQiLGJpbmRLZXk6ZSgiQ3RybC1GIiwiQ29tbWFuZC1GIiksZXhlYzpmdW5jdGlvbihhKXt2YXIgYj1wcm9tcHQoIkZpbmQ6IixhLmdldENvcHlUZXh0KCkpO2EuZmluZChiKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJvdmVyd3JpdGUiLGJpbmRLZXk6ZSgiSW5zZXJ0IiwiSW5zZXJ0IiksZXhlYzpmdW5jdGlvbihhKXthLnRvZ2dsZU92ZXJ3cml0ZSgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvc3RhcnQiLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1Ib21lfEFsdC1TaGlmdC1VcCIsIkNvbW1hbmQtU2hpZnQtVXAiKSxleGVjOmZ1bmN0aW9uKGEpe2EuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZVN0YXJ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b3N0YXJ0IixiaW5kS2V5OmUoIkN0cmwtSG9tZXxDdHJsLVVwIiwiQ29tbWFuZC1Ib21lfENvbW1hbmQtVXAiKSxleGVjOmZ1bmN0aW9uKGEpe2EubmF2aWdhdGVGaWxlU3RhcnQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R1cCIsYmluZEtleTplKCJTaGlmdC1VcCIsIlNoaWZ0LVVwIiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdFVwKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ29saW5ldXAiLGJpbmRLZXk6ZSgiVXAiLCJVcHxDdHJsLVAiKSxleGVjOmZ1bmN0aW9uKGEsYil7YS5uYXZpZ2F0ZVVwKGIudGltZXMpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvZW5kIixiaW5kS2V5OmUoIkN0cmwtU2hpZnQtRW5kfEFsdC1TaGlmdC1Eb3duIiwiQ29tbWFuZC1TaGlmdC1Eb3duIiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVFbmQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvZW5kIixiaW5kS2V5OmUoIkN0cmwtRW5kfEN0cmwtRG93biIsIkNvbW1hbmQtRW5kfENvbW1hbmQtRG93biIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5uYXZpZ2F0ZUZpbGVFbmQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3Rkb3duIixiaW5kS2V5OmUoIlNoaWZ0LURvd24iLCJTaGlmdC1Eb3duIiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdERvd24oKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb2xpbmVkb3duIixiaW5kS2V5OmUoIkRvd24iLCJEb3dufEN0cmwtTiIpLGV4ZWM6ZnVuY3Rpb24oYSxiKXthLm5hdmlnYXRlRG93bihiLnRpbWVzKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R3b3JkbGVmdCIsYmluZEtleTplKCJDdHJsLVNoaWZ0LUxlZnQiLCJPcHRpb24tU2hpZnQtTGVmdCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RXb3JkTGVmdCgpfSxyZWFkT25seTohMH0se25hbWU6ImdvdG93b3JkbGVmdCIsYmluZEtleTplKCJDdHJsLUxlZnQiLCJPcHRpb24tTGVmdCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5uYXZpZ2F0ZVdvcmRMZWZ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0dG9saW5lc3RhcnQiLGJpbmRLZXk6ZSgiQWx0LVNoaWZ0LUxlZnQiLCJDb21tYW5kLVNoaWZ0LUxlZnQiKSxleGVjOmZ1bmN0aW9uKGEpe2EuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b2xpbmVzdGFydCIsYmluZEtleTplKCJBbHQtTGVmdHxIb21lIiwiQ29tbWFuZC1MZWZ0fEhvbWV8Q3RybC1BIiksZXhlYzpmdW5jdGlvbihhKXthLm5hdmlnYXRlTGluZVN0YXJ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0bGVmdCIsYmluZEtleTplKCJTaGlmdC1MZWZ0IiwiU2hpZnQtTGVmdCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMZWZ0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b2xlZnQiLGJpbmRLZXk6ZSgiTGVmdCIsIkxlZnR8Q3RybC1CIiksZXhlYzpmdW5jdGlvbihhLGIpe2EubmF2aWdhdGVMZWZ0KGIudGltZXMpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHdvcmRyaWdodCIsYmluZEtleTplKCJDdHJsLVNoaWZ0LVJpZ2h0IiwiT3B0aW9uLVNoaWZ0LVJpZ2h0IiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdFdvcmRSaWdodCgpfSxyZWFkT25seTohMH0se25hbWU6ImdvdG93b3JkcmlnaHQiLGJpbmRLZXk6ZSgiQ3RybC1SaWdodCIsIk9wdGlvbi1SaWdodCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5uYXZpZ2F0ZVdvcmRSaWdodCgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvbGluZWVuZCIsYmluZEtleTplKCJBbHQtU2hpZnQtUmlnaHQiLCJDb21tYW5kLVNoaWZ0LVJpZ2h0IiksZXhlYzpmdW5jdGlvbihhKXthLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVFbmQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvbGluZWVuZCIsYmluZEtleTplKCJBbHQtUmlnaHR8RW5kIiwiQ29tbWFuZC1SaWdodHxFbmR8Q3RybC1FIiksZXhlYzpmdW5jdGlvbihhKXthLm5hdmlnYXRlTGluZUVuZCgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHJpZ2h0IixiaW5kS2V5OmUoIlNoaWZ0LVJpZ2h0IiwiU2hpZnQtUmlnaHQiKSxleGVjOmZ1bmN0aW9uKGEpe2EuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0UmlnaHQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvcmlnaHQiLGJpbmRLZXk6ZSgiUmlnaHQiLCJSaWdodHxDdHJsLUYiKSxleGVjOmZ1bmN0aW9uKGEsYil7YS5uYXZpZ2F0ZVJpZ2h0KGIudGltZXMpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHBhZ2Vkb3duIixiaW5kS2V5OmUoIlNoaWZ0LVBhZ2VEb3duIiwiU2hpZnQtUGFnZURvd24iKSxleGVjOmZ1bmN0aW9uKGEpe2Euc2VsZWN0UGFnZURvd24oKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJwYWdlZG93biIsYmluZEtleTplKG51bGwsIlBhZ2VEb3duIiksZXhlYzpmdW5jdGlvbihhKXthLnNjcm9sbFBhZ2VEb3duKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b3BhZ2Vkb3duIixiaW5kS2V5OmUoIlBhZ2VEb3duIiwiT3B0aW9uLVBhZ2VEb3dufEN0cmwtViIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nb3RvUGFnZURvd24oKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RwYWdldXAiLGJpbmRLZXk6ZSgiU2hpZnQtUGFnZVVwIiwiU2hpZnQtUGFnZVVwIiksZXhlYzpmdW5jdGlvbihhKXthLnNlbGVjdFBhZ2VVcCgpfSxyZWFkT25seTohMH0se25hbWU6InBhZ2V1cCIsYmluZEtleTplKG51bGwsIlBhZ2VVcCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5zY3JvbGxQYWdlVXAoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvcGFnZXVwIixiaW5kS2V5OmUoIlBhZ2VVcCIsIk9wdGlvbi1QYWdlVXAiKSxleGVjOmZ1bmN0aW9uKGEpe2EuZ290b1BhZ2VVcCgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdGxpbmVzdGFydCIsYmluZEtleTplKCJTaGlmdC1Ib21lIiwiU2hpZnQtSG9tZSIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RsaW5lZW5kIixiaW5kS2V5OmUoIlNoaWZ0LUVuZCIsIlNoaWZ0LUVuZCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToidG9nZ2xlcmVjb3JkaW5nIixiaW5kS2V5OmUoIkN0cmwtQWx0LUUiLCJDb21tYW5kLU9wdGlvbi1FIiksZXhlYzpmdW5jdGlvbihhKXthLmNvbW1hbmRzLnRvZ2dsZVJlY29yZGluZygpfSxyZWFkT25seTohMH0se25hbWU6InJlcGxheW1hY3JvIixiaW5kS2V5OmUoIkN0cmwtU2hpZnQtRSIsIkNvbW1hbmQtU2hpZnQtRSIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5jb21tYW5kcy5yZXBsYXkoYSl9LHJlYWRPbmx5OiEwfSx7bmFtZToianVtcHRvbWF0Y2hpbmciLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1QIiwiQ3RybC1TaGlmdC1QIiksZXhlYzpmdW5jdGlvbihhKXthLmp1bXBUb01hdGNoaW5nKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToicmVtb3ZlbGluZSIsYmluZEtleTplKCJDdHJsLUQiLCJDb21tYW5kLUQiKSxleGVjOmZ1bmN0aW9uKGEpe2EucmVtb3ZlTGluZXMoKX19LHtuYW1lOiJ0b2dnbGVjb21tZW50IixiaW5kS2V5OmUoIkN0cmwtNyIsIkNvbW1hbmQtNyIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS50b2dnbGVDb21tZW50TGluZXMoKX19LHtuYW1lOiJyZXBsYWNlIixiaW5kS2V5OmUoIkN0cmwtUiIsIkNvbW1hbmQtT3B0aW9uLUYiKSxleGVjOmZ1bmN0aW9uKGEpe3ZhciBiPXByb21wdCgiRmluZDoiLGEuZ2V0Q29weVRleHQoKSk7aWYoIWIpcmV0dXJuO3ZhciBjPXByb21wdCgiUmVwbGFjZW1lbnQ6Iik7aWYoIWMpcmV0dXJuO2EucmVwbGFjZShjLHtuZWVkbGU6Yn0pfX0se25hbWU6InJlcGxhY2VhbGwiLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1SIiwiQ29tbWFuZC1TaGlmdC1PcHRpb24tRiIpLGV4ZWM6ZnVuY3Rpb24oYSl7dmFyIGI9cHJvbXB0KCJGaW5kOiIpO2lmKCFiKXJldHVybjt2YXIgYz1wcm9tcHQoIlJlcGxhY2VtZW50OiIpO2lmKCFjKXJldHVybjthLnJlcGxhY2VBbGwoYyx7bmVlZGxlOmJ9KX19LHtuYW1lOiJ1bmRvIixiaW5kS2V5OmUoIkN0cmwtWiIsIkNvbW1hbmQtWiIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS51bmRvKCl9fSx7bmFtZToicmVkbyIsYmluZEtleTplKCJDdHJsLVNoaWZ0LVp8Q3RybC1ZIiwiQ29tbWFuZC1TaGlmdC1afENvbW1hbmQtWSIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5yZWRvKCl9fSx7bmFtZToiY29weWxpbmVzdXAiLGJpbmRLZXk6ZSgiQ3RybC1BbHQtVXAiLCJDb21tYW5kLU9wdGlvbi1VcCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5jb3B5TGluZXNVcCgpfX0se25hbWU6Im1vdmVsaW5lc3VwIixiaW5kS2V5OmUoIkFsdC1VcCIsIk9wdGlvbi1VcCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5tb3ZlTGluZXNVcCgpfX0se25hbWU6ImNvcHlsaW5lc2Rvd24iLGJpbmRLZXk6ZSgiQ3RybC1BbHQtRG93biIsIkNvbW1hbmQtT3B0aW9uLURvd24iKSxleGVjOmZ1bmN0aW9uKGEpe2EuY29weUxpbmVzRG93bigpfX0se25hbWU6Im1vdmVsaW5lc2Rvd24iLGJpbmRLZXk6ZSgiQWx0LURvd24iLCJPcHRpb24tRG93biIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5tb3ZlTGluZXNEb3duKCl9fSx7bmFtZToiZGVsIixiaW5kS2V5OmUoIkRlbGV0ZSIsIkRlbGV0ZXxDdHJsLUQiKSxleGVjOmZ1bmN0aW9uKGEpe2EucmVtb3ZlKCJyaWdodCIpfX0se25hbWU6ImJhY2tzcGFjZSIsYmluZEtleTplKCJDdHJsLUJhY2tzcGFjZXxDb21tYW5kLUJhY2tzcGFjZXxPcHRpb24tQmFja3NwYWNlfFNoaWZ0LUJhY2tzcGFjZXxCYWNrc3BhY2UiLCJDdHJsLUJhY2tzcGFjZXxDb21tYW5kLUJhY2tzcGFjZXxTaGlmdC1CYWNrc3BhY2V8QmFja3NwYWNlfEN0cmwtSCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5yZW1vdmUoImxlZnQiKX19LHtuYW1lOiJyZW1vdmV0b2xpbmVzdGFydCIsYmluZEtleTplKCJBbHQtQmFja3NwYWNlIiwiT3B0aW9uLUJhY2tzcGFjZSIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5yZW1vdmVUb0xpbmVTdGFydCgpfX0se25hbWU6InJlbW92ZXRvbGluZWVuZCIsYmluZEtleTplKCJBbHQtRGVsZXRlIiwiQ3RybC1LIiksZXhlYzpmdW5jdGlvbihhKXthLnJlbW92ZVRvTGluZUVuZCgpfX0se25hbWU6InJlbW92ZXdvcmRsZWZ0IixiaW5kS2V5OmUoIkN0cmwtQmFja3NwYWNlIiwiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNrc3BhY2UiKSxleGVjOmZ1bmN0aW9uKGEpe2EucmVtb3ZlV29yZExlZnQoKX19LHtuYW1lOiJyZW1vdmV3b3JkcmlnaHQiLGJpbmRLZXk6ZSgiQ3RybC1EZWxldGUiLCJBbHQtRGVsZXRlIiksZXhlYzpmdW5jdGlvbihhKXthLnJlbW92ZVdvcmRSaWdodCgpfX0se25hbWU6Im91dGRlbnQiLGJpbmRLZXk6ZSgiU2hpZnQtVGFiIiwiU2hpZnQtVGFiIiksZXhlYzpmdW5jdGlvbihhKXthLmJsb2NrT3V0ZGVudCgpfX0se25hbWU6ImluZGVudCIsYmluZEtleTplKCJUYWIiLCJUYWIiKSxleGVjOmZ1bmN0aW9uKGEpe2EuaW5kZW50KCl9fSx7bmFtZToiaW5zZXJ0c3RyaW5nIixleGVjOmZ1bmN0aW9uKGEsYil7YS5pbnNlcnQoYil9fSx7bmFtZToiaW5zZXJ0dGV4dCIsZXhlYzpmdW5jdGlvbihhLGIpe2EuaW5zZXJ0KGQuc3RyaW5nUmVwZWF0KGIudGV4dHx8IiIsYi50aW1lc3x8MSkpfX0se25hbWU6InNwbGl0bGluZSIsYmluZEtleTplKG51bGwsIkN0cmwtTyIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS5zcGxpdExpbmUoKX19LHtuYW1lOiJ0cmFuc3Bvc2VsZXR0ZXJzIixiaW5kS2V5OmUoIkN0cmwtVCIsIkN0cmwtVCIpLGV4ZWM6ZnVuY3Rpb24oYSl7YS50cmFuc3Bvc2VMZXR0ZXJzKCl9fSx7bmFtZToidG91cHBlcmNhc2UiLGJpbmRLZXk6ZSgiQ3RybC1VIiwiQ3RybC1VIiksZXhlYzpmdW5jdGlvbihhKXthLnRvVXBwZXJDYXNlKCl9fSx7bmFtZToidG9sb3dlcmNhc2UiLGJpbmRLZXk6ZSgiQ3RybC1TaGlmdC1VIiwiQ3RybC1TaGlmdC1VIiksZXhlYzpmdW5jdGlvbihhKXthLnRvTG93ZXJDYXNlKCl9fV19KSxkZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9zZWxlY3Rpb24iLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3JhbmdlIiwiYWNlL2RvY3VtZW50IiwiYWNlL2JhY2tncm91bmRfdG9rZW5pemVyIiwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nIiwiYWNlL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2xpYi9vb3AiKSxlPWEoIi4vbGliL2xhbmciKSxmPWEoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZz1hKCIuL3NlbGVjdGlvbiIpLlNlbGVjdGlvbixoPWEoIi4vbW9kZS90ZXh0IikuTW9kZSxpPWEoIi4vcmFuZ2UiKS5SYW5nZSxqPWEoIi4vZG9jdW1lbnQiKS5Eb2N1bWVudCxrPWEoIi4vYmFja2dyb3VuZF90b2tlbml6ZXIiKS5CYWNrZ3JvdW5kVG9rZW5pemVyLGw9ZnVuY3Rpb24oYSxiKXt0aGlzLiRtb2RpZmllZD0hMCx0aGlzLiRicmVha3BvaW50cz1bXSx0aGlzLiRmcm9udE1hcmtlcnM9e30sdGhpcy4kYmFja01hcmtlcnM9e30sdGhpcy4kbWFya2VySWQ9MSx0aGlzLiRyb3dDYWNoZT1bXSx0aGlzLiR3cmFwRGF0YT1bXSx0aGlzLiRmb2xkRGF0YT1bXSx0aGlzLiR1bmRvU2VsZWN0PSEwLHRoaXMuJGZvbGREYXRhLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9IiI7cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiKXthKz0iXG4iK2IudG9TdHJpbmcoKX0pLGF9LGEgaW5zdGFuY2VvZiBqP3RoaXMuc2V0RG9jdW1lbnQoYSk6dGhpcy5zZXREb2N1bWVudChuZXcgaihhKSksdGhpcy5zZWxlY3Rpb249bmV3IGcodGhpcyksYj90aGlzLnNldE1vZGUoYik6dGhpcy5zZXRNb2RlKG5ldyBoKX07KChmdW5jdGlvbigpe2Z1bmN0aW9uIG8oYSl7cmV0dXJuIGE8NDM1Mj8hMTphPj00MzUyJiZhPD00NDQ3fHxhPj00NTE1JiZhPD00NTE5fHxhPj00NjAyJiZhPD00NjA3fHxhPj05MDAxJiZhPD05MDAyfHxhPj0xMTkwNCYmYTw9MTE5Mjl8fGE+PTExOTMxJiZhPD0xMjAxOXx8YT49MTIwMzImJmE8PTEyMjQ1fHxhPj0xMjI3MiYmYTw9MTIyODN8fGE+PTEyMjg4JiZhPD0xMjM1MHx8YT49MTIzNTMmJmE8PTEyNDM4fHxhPj0xMjQ0MSYmYTw9MTI1NDN8fGE+PTEyNTQ5JiZhPD0xMjU4OXx8YT49MTI1OTMmJmE8PTEyNjg2fHxhPj0xMjY4OCYmYTw9MTI3MzB8fGE+PTEyNzM2JiZhPD0xMjc3MXx8YT49MTI3ODQmJmE8PTEyODMwfHxhPj0xMjgzMiYmYTw9MTI4NzF8fGE+PTEyODgwJiZhPD0xMzA1NHx8YT49MTMwNTYmJmE8PTE5OTAzfHxhPj0xOTk2OCYmYTw9NDIxMjR8fGE+PTQyMTI4JiZhPD00MjE4Mnx8YT49NDMzNjAmJmE8PTQzMzg4fHxhPj00NDAzMiYmYTw9NTUyMDN8fGE+PTU1MjE2JiZhPD01NTIzOHx8YT49NTUyNDMmJmE8PTU1MjkxfHxhPj02Mzc0NCYmYTw9NjQyNTV8fGE+PTY1MDQwJiZhPD02NTA0OXx8YT49NjUwNzImJmE8PTY1MTA2fHxhPj02NTEwOCYmYTw9NjUxMjZ8fGE+PTY1MTI4JiZhPD02NTEzMXx8YT49NjUyODEmJmE8PTY1Mzc2fHxhPj02NTUwNCYmYTw9NjU1MTB9ZC5pbXBsZW1lbnQodGhpcyxmKSx0aGlzLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe2lmKHRoaXMuZG9jKXRocm93IG5ldyBFcnJvcigiRG9jdW1lbnQgaXMgYWxyZWFkeSBzZXQiKTt0aGlzLmRvYz1hLGEub24oImNoYW5nZSIsdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLm9uKCJjaGFuZ2VGb2xkIix0aGlzLm9uQ2hhbmdlRm9sZC5iaW5kKHRoaXMpKSx0aGlzLmJnVG9rZW5pemVyJiYodGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50KCkpLHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCkpfSx0aGlzLmdldERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSx0aGlzLiRyZXNldFJvd0NhY2hlPWZ1bmN0aW9uKGEpe2lmKGE9PTApe3RoaXMuJHJvd0NhY2hlPVtdO3JldHVybn12YXIgYj10aGlzLiRyb3dDYWNoZTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKylpZihiW2NdLmRvY1Jvdz49YSl7Yi5zcGxpY2UoYyxiLmxlbmd0aCk7cmV0dXJufX0sdGhpcy5vbkNoYW5nZUZvbGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3RoaXMuJHJlc2V0Um93Q2FjaGUoYi5zdGFydC5yb3cpfSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTt0aGlzLiRtb2RpZmllZD0hMCx0aGlzLiRyZXNldFJvd0NhY2hlKGIucmFuZ2Uuc3RhcnQucm93KTt2YXIgYz10aGlzLiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZShhKTshdGhpcy4kZnJvbVVuZG8mJnRoaXMuJHVuZG9NYW5hZ2VyJiYhYi5pZ25vcmUmJih0aGlzLiRkZWx0YXNEb2MucHVzaChiKSxjJiZjLmxlbmd0aCE9MCYmdGhpcy4kZGVsdGFzRm9sZC5wdXNoKHthY3Rpb246InJlbW92ZUZvbGRzIixmb2xkczpjfSksdGhpcy4kaW5mb3JtVW5kb01hbmFnZXIuc2NoZWR1bGUoKSksdGhpcy5iZ1Rva2VuaXplci5zdGFydChiLnJhbmdlLnN0YXJ0LnJvdyksdGhpcy5fZW1pdCgiY2hhbmdlIixhKX0sdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihhKXt0aGlzLmRvYy5zZXRWYWx1ZShhKSx0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oMCwwKSx0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLHRoaXMuJHJlc2V0Um93Q2FjaGUoMCksdGhpcy4kZGVsdGFzPVtdLHRoaXMuJGRlbHRhc0RvYz1bXSx0aGlzLiRkZWx0YXNGb2xkPVtdLHRoaXMuZ2V0VW5kb01hbmFnZXIoKS5yZXNldCgpfSx0aGlzLmdldFZhbHVlPXRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MuZ2V0VmFsdWUoKX0sdGhpcy5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb259LHRoaXMuZ2V0U3RhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0U3RhdGUoYSl9LHRoaXMuZ2V0VG9rZW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKGEsYil9LHRoaXMuZ2V0VG9rZW5BdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKGEsYSlbMF0udG9rZW5zLGQsZT0wO2lmKGI9PW51bGwpZj1jLmxlbmd0aC0xLGU9dGhpcy5nZXRMaW5lKGEpLmxlbmd0aDtlbHNlIGZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXtlKz1jW2ZdLnZhbHVlLmxlbmd0aDtpZihlPj1iKWJyZWFrfXJldHVybiBkPWNbZl0sZD8oZC5pbmRleD1mLGQuc3RhcnQ9ZS1kLnZhbHVlLmxlbmd0aCxkKTpudWxsfSx0aGlzLnNldFVuZG9NYW5hZ2VyPWZ1bmN0aW9uKGEpe3RoaXMuJHVuZG9NYW5hZ2VyPWEsdGhpcy4kcmVzZXRSb3dDYWNoZSgwKSx0aGlzLiRkZWx0YXM9W10sdGhpcy4kZGVsdGFzRG9jPVtdLHRoaXMuJGRlbHRhc0ZvbGQ9W10sdGhpcy4kaW5mb3JtVW5kb01hbmFnZXImJnRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyLmNhbmNlbCgpO2lmKGEpe3ZhciBiPXRoaXM7dGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyPWZ1bmN0aW9uKCl7Yi4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCksYi4kZGVsdGFzRm9sZC5sZW5ndGgmJihiLiRkZWx0YXMucHVzaCh7Z3JvdXA6ImZvbGQiLGRlbHRhczpiLiRkZWx0YXNGb2xkfSksYi4kZGVsdGFzRm9sZD1bXSksYi4kZGVsdGFzRG9jLmxlbmd0aCYmKGIuJGRlbHRhcy5wdXNoKHtncm91cDoiZG9jIixkZWx0YXM6Yi4kZGVsdGFzRG9jfSksYi4kZGVsdGFzRG9jPVtdKSxiLiRkZWx0YXMubGVuZ3RoPjAmJmEuZXhlY3V0ZSh7YWN0aW9uOiJhY2V1cGRhdGUiLGFyZ3M6W2IuJGRlbHRhcyxiXX0pLGIuJGRlbHRhcz1bXX0sdGhpcy4kaW5mb3JtVW5kb01hbmFnZXI9ZS5kZWZlcnJlZENhbGwodGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKX19LHRoaXMuJGRlZmF1bHRVbmRvTWFuYWdlcj17dW5kbzpmdW5jdGlvbigpe30scmVkbzpmdW5jdGlvbigpe30scmVzZXQ6ZnVuY3Rpb24oKXt9fSx0aGlzLmdldFVuZG9NYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHVuZG9NYW5hZ2VyfHx0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXJ9LHRoaXMuZ2V0VGFiU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VXNlU29mdFRhYnMoKT9lLnN0cmluZ1JlcGVhdCgiICIsdGhpcy5nZXRUYWJTaXplKCkpOiJcdCJ9LHRoaXMuJHVzZVNvZnRUYWJzPSEwLHRoaXMuc2V0VXNlU29mdFRhYnM9ZnVuY3Rpb24oYSl7aWYodGhpcy4kdXNlU29mdFRhYnM9PT1hKXJldHVybjt0aGlzLiR1c2VTb2Z0VGFicz1hfSx0aGlzLmdldFVzZVNvZnRUYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHVzZVNvZnRUYWJzfSx0aGlzLiR0YWJTaXplPTQsdGhpcy5zZXRUYWJTaXplPWZ1bmN0aW9uKGEpe2lmKGlzTmFOKGEpfHx0aGlzLiR0YWJTaXplPT09YSlyZXR1cm47dGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kdGFiU2l6ZT1hLHRoaXMuX2VtaXQoImNoYW5nZVRhYlNpemUiKX0sdGhpcy5nZXRUYWJTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRhYlNpemV9LHRoaXMuaXNUYWJTdG9wPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLiR1c2VTb2Z0VGFicyYmYS5jb2x1bW4ldGhpcy4kdGFiU2l6ZT09MH0sdGhpcy4kb3ZlcndyaXRlPSExLHRoaXMuc2V0T3ZlcndyaXRlPWZ1bmN0aW9uKGEpe2lmKHRoaXMuJG92ZXJ3cml0ZT09YSlyZXR1cm47dGhpcy4kb3ZlcndyaXRlPWEsdGhpcy5fZW1pdCgiY2hhbmdlT3ZlcndyaXRlIil9LHRoaXMuZ2V0T3ZlcndyaXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG92ZXJ3cml0ZX0sdGhpcy50b2dnbGVPdmVyd3JpdGU9ZnVuY3Rpb24oKXt0aGlzLnNldE92ZXJ3cml0ZSghdGhpcy4kb3ZlcndyaXRlKX0sdGhpcy5nZXRCcmVha3BvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRicmVha3BvaW50c30sdGhpcy5zZXRCcmVha3BvaW50cz1mdW5jdGlvbihhKXt0aGlzLiRicmVha3BvaW50cz1bXTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl0aGlzLiRicmVha3BvaW50c1thW2JdXT0hMDt0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMuY2xlYXJCcmVha3BvaW50cz1mdW5jdGlvbigpe3RoaXMuJGJyZWFrcG9pbnRzPVtdLHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLHt9KX0sdGhpcy5zZXRCcmVha3BvaW50PWZ1bmN0aW9uKGEpe3RoaXMuJGJyZWFrcG9pbnRzW2FdPSEwLHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLHt9KX0sdGhpcy5jbGVhckJyZWFrcG9pbnQ9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW2FdLHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLHt9KX0sdGhpcy5nZXRCcmVha3BvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRicmVha3BvaW50c30sdGhpcy5hZGRNYXJrZXI9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy4kbWFya2VySWQrKyxmPXtyYW5nZTphLHR5cGU6Y3x8ImxpbmUiLHJlbmRlcmVyOnR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6bnVsbCxjbGF6ejpiLGluRnJvbnQ6ISFkfTtyZXR1cm4gZD8odGhpcy4kZnJvbnRNYXJrZXJzW2VdPWYsdGhpcy5fZW1pdCgiY2hhbmdlRnJvbnRNYXJrZXIiKSk6KHRoaXMuJGJhY2tNYXJrZXJzW2VdPWYsdGhpcy5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpKSxlfSx0aGlzLnJlbW92ZU1hcmtlcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLiRmcm9udE1hcmtlcnNbYV18fHRoaXMuJGJhY2tNYXJrZXJzW2FdO2lmKCFiKXJldHVybjt2YXIgYz1iLmluRnJvbnQ/dGhpcy4kZnJvbnRNYXJrZXJzOnRoaXMuJGJhY2tNYXJrZXJzO2ImJihkZWxldGUgY1thXSx0aGlzLl9lbWl0KGIuaW5Gcm9udD8iY2hhbmdlRnJvbnRNYXJrZXIiOiJjaGFuZ2VCYWNrTWFya2VyIikpfSx0aGlzLmdldE1hcmtlcnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy4kZnJvbnRNYXJrZXJzOnRoaXMuJGJhY2tNYXJrZXJzfSx0aGlzLnNldEFubm90YXRpb25zPWZ1bmN0aW9uKGEpe3RoaXMuJGFubm90YXRpb25zPXt9O2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz1hW2JdLGQ9Yy5yb3c7dGhpcy4kYW5ub3RhdGlvbnNbZF0/dGhpcy4kYW5ub3RhdGlvbnNbZF0ucHVzaChjKTp0aGlzLiRhbm5vdGF0aW9uc1tkXT1bY119dGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIse30pfSx0aGlzLmdldEFubm90YXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFubm90YXRpb25zfHx7fX0sdGhpcy5jbGVhckFubm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy4kYW5ub3RhdGlvbnM9e30sdGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIse30pfSx0aGlzLiRkZXRlY3ROZXdMaW5lPWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14uKj8oXHI/XG4pL20pO2I/dGhpcy4kYXV0b05ld0xpbmU9YlsxXTp0aGlzLiRhdXRvTmV3TGluZT0iXG4ifSx0aGlzLmdldFdvcmRSYW5nZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0TGluZShhKSxkPSExO2I+MCYmKGQ9ISFjLmNoYXJBdChiLTEpLm1hdGNoKHRoaXMudG9rZW5SZSkpLGR8fChkPSEhYy5jaGFyQXQoYikubWF0Y2godGhpcy50b2tlblJlKSk7dmFyIGU9ZD90aGlzLnRva2VuUmU6dGhpcy5ub25Ub2tlblJlLGY9YjtpZihmPjApe2RvIGYtLTt3aGlsZShmPj0wJiZjLmNoYXJBdChmKS5tYXRjaChlKSk7ZisrfXZhciBnPWI7d2hpbGUoZzxjLmxlbmd0aCYmYy5jaGFyQXQoZykubWF0Y2goZSkpZysrO3JldHVybiBuZXcgaShhLGYsYSxnKX0sdGhpcy5nZXRBV29yZFJhbmdlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRXb3JkUmFuZ2UoYSxiKSxkPXRoaXMuZ2V0TGluZShjLmVuZC5yb3cpO3doaWxlKGQuY2hhckF0KGMuZW5kLmNvbHVtbikubWF0Y2goL1sgXHRdLykpYy5lbmQuY29sdW1uKz0xO3JldHVybiBjfSx0aGlzLnNldE5ld0xpbmVNb2RlPWZ1bmN0aW9uKGEpe3RoaXMuZG9jLnNldE5ld0xpbmVNb2RlKGEpfSx0aGlzLmdldE5ld0xpbmVNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jLmdldE5ld0xpbmVNb2RlKCl9LHRoaXMuJHVzZVdvcmtlcj0hMCx0aGlzLnNldFVzZVdvcmtlcj1mdW5jdGlvbihhKXtpZih0aGlzLiR1c2VXb3JrZXI9PWEpcmV0dXJuO3RoaXMuJHVzZVdvcmtlcj1hLHRoaXMuJHN0b3BXb3JrZXIoKSxhJiZ0aGlzLiRzdGFydFdvcmtlcigpfSx0aGlzLmdldFVzZVdvcmtlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR1c2VXb3JrZXJ9LHRoaXMub25SZWxvYWRUb2tlbml6ZXI9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3RoaXMuYmdUb2tlbml6ZXIuc3RhcnQoYi5maXJzdCksdGhpcy5fZW1pdCgidG9rZW5pemVyVXBkYXRlIixhKX0sdGhpcy4kbW9kZT1udWxsLHRoaXMuc2V0TW9kZT1mdW5jdGlvbihhKXtpZih0aGlzLiRtb2RlPT09YSlyZXR1cm47dGhpcy4kbW9kZT1hLHRoaXMuJHN0b3BXb3JrZXIoKSx0aGlzLiR1c2VXb3JrZXImJnRoaXMuJHN0YXJ0V29ya2VyKCk7dmFyIGI9YS5nZXRUb2tlbml6ZXIoKTtpZihiLmFkZEV2ZW50TGlzdGVuZXIhPT11bmRlZmluZWQpe3ZhciBjPXRoaXMub25SZWxvYWRUb2tlbml6ZXIuYmluZCh0aGlzKTtiLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZSIsYyl9aWYoIXRoaXMuYmdUb2tlbml6ZXIpe3RoaXMuYmdUb2tlbml6ZXI9bmV3IGsoYik7dmFyIGQ9dGhpczt0aGlzLmJnVG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZSIsZnVuY3Rpb24oYSl7ZC5fZW1pdCgidG9rZW5pemVyVXBkYXRlIixhKX0pfWVsc2UgdGhpcy5iZ1Rva2VuaXplci5zZXRUb2tlbml6ZXIoYik7dGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50KCkpLHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCksdGhpcy50b2tlblJlPWEudG9rZW5SZSx0aGlzLm5vblRva2VuUmU9YS5ub25Ub2tlblJlLHRoaXMuJHNldEZvbGRpbmcoYS5mb2xkaW5nUnVsZXMpLHRoaXMuX2VtaXQoImNoYW5nZU1vZGUiKX0sdGhpcy4kc3RvcFdvcmtlcj1mdW5jdGlvbigpe3RoaXMuJHdvcmtlciYmdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpLHRoaXMuJHdvcmtlcj1udWxsfSx0aGlzLiRzdGFydFdvcmtlcj1mdW5jdGlvbigpe2lmKHR5cGVvZiBXb3JrZXIhPSJ1bmRlZmluZWQiJiYhYS5ub1dvcmtlcil0cnl7dGhpcy4kd29ya2VyPXRoaXMuJG1vZGUuY3JlYXRlV29ya2VyKHRoaXMpfWNhdGNoKGIpe2NvbnNvbGUubG9nKCJDb3VsZCBub3QgbG9hZCB3b3JrZXIiKSxjb25zb2xlLmxvZyhiKSx0aGlzLiR3b3JrZXI9bnVsbH1lbHNlIHRoaXMuJHdvcmtlcj1udWxsfSx0aGlzLmdldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbW9kZX0sdGhpcy4kc2Nyb2xsVG9wPTAsdGhpcy5zZXRTY3JvbGxUb3A9ZnVuY3Rpb24oYSl7YT1NYXRoLnJvdW5kKE1hdGgubWF4KDAsYSkpO2lmKHRoaXMuJHNjcm9sbFRvcD09PWEpcmV0dXJuO3RoaXMuJHNjcm9sbFRvcD1hLHRoaXMuX2VtaXQoImNoYW5nZVNjcm9sbFRvcCIsYSl9LHRoaXMuZ2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbFRvcH0sdGhpcy4kc2Nyb2xsTGVmdD0wLHRoaXMuc2V0U2Nyb2xsTGVmdD1mdW5jdGlvbihhKXthPU1hdGgucm91bmQoTWF0aC5tYXgoMCxhKSk7aWYodGhpcy4kc2Nyb2xsTGVmdD09PWEpcmV0dXJuO3RoaXMuJHNjcm9sbExlZnQ9YSx0aGlzLl9lbWl0KCJjaGFuZ2VTY3JvbGxMZWZ0IixhKX0sdGhpcy5nZXRTY3JvbGxMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbExlZnR9LHRoaXMuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY29tcHV0ZVdpZHRoKCksdGhpcy53aWR0aH0sdGhpcy5nZXRTY3JlZW5XaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjb21wdXRlV2lkdGgoKSx0aGlzLnNjcmVlbldpZHRofSx0aGlzLiRjb21wdXRlV2lkdGg9ZnVuY3Rpb24oYSl7aWYodGhpcy4kbW9kaWZpZWR8fGEpe3RoaXMuJG1vZGlmaWVkPSExO3ZhciBiPXRoaXMuZG9jLmdldEFsbExpbmVzKCksYz0wLGQ9MDtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy5nZXRGb2xkTGluZShlKSxnLGg7Zz1iW2VdO2lmKGYpe3ZhciBpPWYucmFuZ2UuZW5kO2c9dGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZiksZT1pLnJvd31oPWcubGVuZ3RoLGM9TWF0aC5tYXgoYyxoKSx0aGlzLiR1c2VXcmFwTW9kZXx8KGQ9TWF0aC5tYXgoZCx0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChnKVswXSkpfXRoaXMud2lkdGg9Yyx0aGlzLiR1c2VXcmFwTW9kZT90aGlzLnNjcmVlbldpZHRoPXRoaXMuJHdyYXBMaW1pdDp0aGlzLnNjcmVlbldpZHRoPWR9fSx0aGlzLmdldExpbmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZG9jLmdldExpbmUoYSl9LHRoaXMuZ2V0TGluZXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5kb2MuZ2V0TGluZXMoYSxiKX0sdGhpcy5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCl9LHRoaXMuZ2V0VGV4dFJhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRvYy5nZXRUZXh0UmFuZ2UoYSl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZG9jLmluc2VydChhLGIpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kb2MucmVtb3ZlKGEpfSx0aGlzLnVuZG9DaGFuZ2VzPWZ1bmN0aW9uKGEsYil7aWYoIWEubGVuZ3RoKXJldHVybjt0aGlzLiRmcm9tVW5kbz0hMDt2YXIgYz1udWxsO2Zvcih2YXIgZD1hLmxlbmd0aC0xO2QhPS0xO2QtLSl7dmFyIGU9YVtkXTtlLmdyb3VwPT0iZG9jIj8odGhpcy5kb2MucmV2ZXJ0RGVsdGFzKGUuZGVsdGFzKSxjPXRoaXMuJGdldFVuZG9TZWxlY3Rpb24oZS5kZWx0YXMsITAsYykpOmUuZGVsdGFzLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5hZGRGb2xkcyhhLmZvbGRzKX0sdGhpcyl9cmV0dXJuIHRoaXMuJGZyb21VbmRvPSExLGMmJnRoaXMuJHVuZG9TZWxlY3QmJiFiJiZ0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShjKSxjfSx0aGlzLnJlZG9DaGFuZ2VzPWZ1bmN0aW9uKGEsYil7aWYoIWEubGVuZ3RoKXJldHVybjt0aGlzLiRmcm9tVW5kbz0hMDt2YXIgYz1udWxsO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hW2RdO2UuZ3JvdXA9PSJkb2MiJiYodGhpcy5kb2MuYXBwbHlEZWx0YXMoZS5kZWx0YXMpLGM9dGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihlLmRlbHRhcywhMSxjKSl9cmV0dXJuIHRoaXMuJGZyb21VbmRvPSExLGMmJnRoaXMuJHVuZG9TZWxlY3QmJiFiJiZ0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShjKSxjfSx0aGlzLnNldFVuZG9TZWxlY3Q9ZnVuY3Rpb24oYSl7dGhpcy4kdW5kb1NlbGVjdD1hfSx0aGlzLiRnZXRVbmRvU2VsZWN0aW9uPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBjPWEuYWN0aW9uPT0iaW5zZXJ0VGV4dCJ8fGEuYWN0aW9uPT0iaW5zZXJ0TGluZXMiO3JldHVybiBiPyFjOmN9dmFyIGU9YVswXSxmLGcsaD0hMTtkKGUpPyhmPWUucmFuZ2UuY2xvbmUoKSxoPSEwKTooZj1pLmZyb21Qb2ludHMoZS5yYW5nZS5zdGFydCxlLnJhbmdlLnN0YXJ0KSxoPSExKTtmb3IodmFyIGo9MTtqPGEubGVuZ3RoO2orKyllPWFbal0sZChlKT8oZz1lLnJhbmdlLnN0YXJ0LGYuY29tcGFyZShnLnJvdyxnLmNvbHVtbik9PS0xJiZmLnNldFN0YXJ0KGUucmFuZ2Uuc3RhcnQpLGc9ZS5yYW5nZS5lbmQsZi5jb21wYXJlKGcucm93LGcuY29sdW1uKT09MSYmZi5zZXRFbmQoZS5yYW5nZS5lbmQpLGg9ITApOihnPWUucmFuZ2Uuc3RhcnQsZi5jb21wYXJlKGcucm93LGcuY29sdW1uKT09LTEmJihmPWkuZnJvbVBvaW50cyhlLnJhbmdlLnN0YXJ0LGUucmFuZ2Uuc3RhcnQpKSxoPSExKTtpZihjIT1udWxsKXt2YXIgaz1jLmNvbXBhcmVSYW5nZShmKTtrPT0xP2Yuc2V0U3RhcnQoYy5zdGFydCk6az09LTEmJmYuc2V0RW5kKGMuZW5kKX1yZXR1cm4gZn0sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UoYSxiKX0sdGhpcy5tb3ZlVGV4dD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0VGV4dFJhbmdlKGEpO3RoaXMucmVtb3ZlKGEpO3ZhciBkPWIucm93LGU9Yi5jb2x1bW47IWEuaXNNdWx0aUxpbmUoKSYmYS5zdGFydC5yb3c9PWQmJmEuZW5kLmNvbHVtbjxlJiYoZS09Yy5sZW5ndGgpO2lmKGEuaXNNdWx0aUxpbmUoKSYmYS5lbmQucm93PGQpe3ZhciBmPXRoaXMuZG9jLiRzcGxpdChjKTtkLT1mLmxlbmd0aC0xfXZhciBnPWQrYS5lbmQucm93LWEuc3RhcnQucm93LGg9YS5pc011bHRpTGluZSgpP2EuZW5kLmNvbHVtbjplK2EuZW5kLmNvbHVtbi1hLnN0YXJ0LmNvbHVtbixqPW5ldyBpKGQsZSxnLGgpO3JldHVybiB0aGlzLmluc2VydChqLnN0YXJ0LGMpLGp9LHRoaXMuaW5kZW50Um93cz1mdW5jdGlvbihhLGIsYyl7Yz1jLnJlcGxhY2UoL1x0L2csdGhpcy5nZXRUYWJTdHJpbmcoKSk7Zm9yKHZhciBkPWE7ZDw9YjtkKyspdGhpcy5pbnNlcnQoe3JvdzpkLGNvbHVtbjowfSxjKX0sdGhpcy5vdXRkZW50Um93cz1mdW5jdGlvbihhKXt2YXIgYj1hLmNvbGxhcHNlUm93cygpLGM9bmV3IGkoMCwwLDAsMCksZD10aGlzLmdldFRhYlNpemUoKTtmb3IodmFyIGU9Yi5zdGFydC5yb3c7ZTw9Yi5lbmQucm93OysrZSl7dmFyIGY9dGhpcy5nZXRMaW5lKGUpO2Muc3RhcnQucm93PWUsYy5lbmQucm93PWU7Zm9yKHZhciBnPTA7ZzxkOysrZylpZihmLmNoYXJBdChnKSE9IiAiKWJyZWFrO2c8ZCYmZi5jaGFyQXQoZyk9PSJcdCI/KGMuc3RhcnQuY29sdW1uPWcsYy5lbmQuY29sdW1uPWcrMSk6KGMuc3RhcnQuY29sdW1uPTAsYy5lbmQuY29sdW1uPWcpLHRoaXMucmVtb3ZlKGMpfX0sdGhpcy5tb3ZlTGluZXNVcD1mdW5jdGlvbihhLGIpe2lmKGE8PTApcmV0dXJuIDA7dmFyIGM9dGhpcy5kb2MucmVtb3ZlTGluZXMoYSxiKTtyZXR1cm4gdGhpcy5kb2MuaW5zZXJ0TGluZXMoYS0xLGMpLC0xfSx0aGlzLm1vdmVMaW5lc0Rvd249ZnVuY3Rpb24oYSxiKXtpZihiPj10aGlzLmRvYy5nZXRMZW5ndGgoKS0xKXJldHVybiAwO3ZhciBjPXRoaXMuZG9jLnJlbW92ZUxpbmVzKGEsYik7cmV0dXJuIHRoaXMuZG9jLmluc2VydExpbmVzKGErMSxjKSwxfSx0aGlzLmR1cGxpY2F0ZUxpbmVzPWZ1bmN0aW9uKGEsYil7dmFyIGE9dGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQoYSksYj10aGlzLiRjbGlwUm93VG9Eb2N1bWVudChiKSxjPXRoaXMuZ2V0TGluZXMoYSxiKTt0aGlzLmRvYy5pbnNlcnRMaW5lcyhhLGMpO3ZhciBkPWItYSsxO3JldHVybiBkfSx0aGlzLiRjbGlwUm93VG9Eb2N1bWVudD1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihhLHRoaXMuZG9jLmdldExlbmd0aCgpLTEpKX0sdGhpcy4kY2xpcENvbHVtblRvUm93PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGI8MD8wOk1hdGgubWluKHRoaXMuZG9jLmdldExpbmUoYSkubGVuZ3RoLGIpfSx0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50PWZ1bmN0aW9uKGEsYil7Yj1NYXRoLm1heCgwLGIpO2lmKGE8MClhPTAsYj0wO2Vsc2V7dmFyIGM9dGhpcy5kb2MuZ2V0TGVuZ3RoKCk7YT49Yz8oYT1jLTEsYj10aGlzLmRvYy5nZXRMaW5lKGMtMSkubGVuZ3RoKTpiPU1hdGgubWluKHRoaXMuZG9jLmdldExpbmUoYSkubGVuZ3RoLGIpfXJldHVybntyb3c6YSxjb2x1bW46Yn19LHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQ9ZnVuY3Rpb24oYSl7YS5zdGFydC5yb3c8MD8oYS5zdGFydC5yb3c9MCxhLnN0YXJ0LmNvbHVtbj0wKTphLnN0YXJ0LmNvbHVtbj10aGlzLiRjbGlwQ29sdW1uVG9Sb3coYS5zdGFydC5yb3csYS5zdGFydC5jb2x1bW4pO3ZhciBiPXRoaXMuZG9jLmdldExlbmd0aCgpLTE7cmV0dXJuIGEuZW5kLnJvdz5iPyhhLmVuZC5yb3c9YixhLmVuZC5jb2x1bW49dGhpcy5kb2MuZ2V0TGluZShiKS5sZW5ndGgpOmEuZW5kLmNvbHVtbj10aGlzLiRjbGlwQ29sdW1uVG9Sb3coYS5lbmQucm93LGEuZW5kLmNvbHVtbiksYX0sdGhpcy4kd3JhcExpbWl0PTgwLHRoaXMuJHVzZVdyYXBNb2RlPSExLHRoaXMuJHdyYXBMaW1pdFJhbmdlPXttaW46bnVsbCxtYXg6bnVsbH0sdGhpcy5zZXRVc2VXcmFwTW9kZT1mdW5jdGlvbihhKXtpZihhIT10aGlzLiR1c2VXcmFwTW9kZSl7dGhpcy4kdXNlV3JhcE1vZGU9YSx0aGlzLiRtb2RpZmllZD0hMCx0aGlzLiRyZXNldFJvd0NhY2hlKDApO2lmKGEpe3ZhciBiPXRoaXMuZ2V0TGVuZ3RoKCk7dGhpcy4kd3JhcERhdGE9W107Zm9yKHZhciBjPTA7YzxiO2MrKyl0aGlzLiR3cmFwRGF0YS5wdXNoKFtdKTt0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLGItMSl9dGhpcy5fZW1pdCgiY2hhbmdlV3JhcE1vZGUiKX19LHRoaXMuZ2V0VXNlV3JhcE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGV9LHRoaXMuc2V0V3JhcExpbWl0UmFuZ2U9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4hPT1hfHx0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXghPT1iKXRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbj1hLHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heD1iLHRoaXMuJG1vZGlmaWVkPSEwLHRoaXMuX2VtaXQoImNoYW5nZVdyYXBNb2RlIil9LHRoaXMuYWRqdXN0V3JhcExpbWl0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdChhKTtyZXR1cm4gYiE9dGhpcy4kd3JhcExpbWl0JiZiPjA/KHRoaXMuJHdyYXBMaW1pdD1iLHRoaXMuJG1vZGlmaWVkPSEwLHRoaXMuJHVzZVdyYXBNb2RlJiYodGhpcy4kdXBkYXRlV3JhcERhdGEoMCx0aGlzLmdldExlbmd0aCgpLTEpLHRoaXMuJHJlc2V0Um93Q2FjaGUoMCksdGhpcy5fZW1pdCgiY2hhbmdlV3JhcExpbWl0IikpLCEwKTohMX0sdGhpcy4kY29uc3RyYWluV3JhcExpbWl0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbjtiJiYoYT1NYXRoLm1heChiLGEpKTt2YXIgYz10aGlzLiR3cmFwTGltaXRSYW5nZS5tYXg7cmV0dXJuIGMmJihhPU1hdGgubWluKGMsYSkpLE1hdGgubWF4KDEsYSl9LHRoaXMuZ2V0V3JhcExpbWl0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHdyYXBMaW1pdH0sdGhpcy5nZXRXcmFwTGltaXRSYW5nZT1mdW5jdGlvbigpe3JldHVybnttaW46dGhpcy4kd3JhcExpbWl0UmFuZ2UubWluLG1heDp0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXh9fSx0aGlzLiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLiR1c2VXcmFwTW9kZSxjLGQ9YS5kYXRhLmFjdGlvbixlPWEuZGF0YS5yYW5nZS5zdGFydC5yb3csZj1hLmRhdGEucmFuZ2UuZW5kLnJvdyxnPWEuZGF0YS5yYW5nZS5zdGFydCxoPWEuZGF0YS5yYW5nZS5lbmQsaT1udWxsO2QuaW5kZXhPZigiTGluZXMiKSE9LTE/KGQ9PSJpbnNlcnRMaW5lcyI/Zj1lK2EuZGF0YS5saW5lcy5sZW5ndGg6Zj1lLGM9YS5kYXRhLmxpbmVzP2EuZGF0YS5saW5lcy5sZW5ndGg6Zi1lKTpjPWYtZTtpZihjIT0wKWlmKGQuaW5kZXhPZigicmVtb3ZlIikhPS0xKXtiJiZ0aGlzLiR3cmFwRGF0YS5zcGxpY2UoZSxjKTt2YXIgaj10aGlzLiRmb2xkRGF0YTtpPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKGEuZGF0YS5yYW5nZSksdGhpcy5yZW1vdmVGb2xkcyhpKTt2YXIgaz10aGlzLmdldEZvbGRMaW5lKGgucm93KSxsPTA7aWYoayl7ay5hZGRSZW1vdmVDaGFycyhoLnJvdyxoLmNvbHVtbixnLmNvbHVtbi1oLmNvbHVtbiksay5zaGlmdFJvdygtYyk7dmFyIG09dGhpcy5nZXRGb2xkTGluZShlKTttJiZtIT09ayYmKG0ubWVyZ2Uoayksaz1tKSxsPWouaW5kZXhPZihrKSsxfWZvcihsO2w8ai5sZW5ndGg7bCsrKXt2YXIgaz1qW2xdO2suc3RhcnQucm93Pj1oLnJvdyYmay5zaGlmdFJvdygtYyl9Zj1lfWVsc2V7dmFyIG47aWYoYil7bj1bZSwwXTtmb3IodmFyIG89MDtvPGM7bysrKW4ucHVzaChbXSk7dGhpcy4kd3JhcERhdGEuc3BsaWNlLmFwcGx5KHRoaXMuJHdyYXBEYXRhLG4pfXZhciBqPXRoaXMuJGZvbGREYXRhLGs9dGhpcy5nZXRGb2xkTGluZShlKSxsPTA7aWYoayl7dmFyIHA9ay5yYW5nZS5jb21wYXJlSW5zaWRlKGcucm93LGcuY29sdW1uKTtwPT0wPyhrPWsuc3BsaXQoZy5yb3csZy5jb2x1bW4pLGsuc2hpZnRSb3coYyksay5hZGRSZW1vdmVDaGFycyhmLDAsaC5jb2x1bW4tZy5jb2x1bW4pKTpwPT0tMSYmKGsuYWRkUmVtb3ZlQ2hhcnMoZSwwLGguY29sdW1uLWcuY29sdW1uKSxrLnNoaWZ0Um93KGMpKSxsPWouaW5kZXhPZihrKSsxfWZvcihsO2w8ai5sZW5ndGg7bCsrKXt2YXIgaz1qW2xdO2suc3RhcnQucm93Pj1lJiZrLnNoaWZ0Um93KGMpfX1lbHNle2M9TWF0aC5hYnMoYS5kYXRhLnJhbmdlLnN0YXJ0LmNvbHVtbi1hLmRhdGEucmFuZ2UuZW5kLmNvbHVtbiksZC5pbmRleE9mKCJyZW1vdmUiKSE9LTEmJihpPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKGEuZGF0YS5yYW5nZSksdGhpcy5yZW1vdmVGb2xkcyhpKSxjPS1jKTt2YXIgaz10aGlzLmdldEZvbGRMaW5lKGUpO2smJmsuYWRkUmVtb3ZlQ2hhcnMoZSxnLmNvbHVtbixjKX1yZXR1cm4gYiYmdGhpcy4kd3JhcERhdGEubGVuZ3RoIT10aGlzLmRvYy5nZXRMZW5ndGgoKSYmY29uc29sZS5lcnJvcigiZG9jLmdldExlbmd0aCgpIGFuZCAkd3JhcERhdGEubGVuZ3RoIGhhdmUgdG8gYmUgdGhlIHNhbWUhIiksYiYmdGhpcy4kdXBkYXRlV3JhcERhdGEoZSxmKSxpfSx0aGlzLiR1cGRhdGVXcmFwRGF0YT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZG9jLmdldEFsbExpbmVzKCksZD10aGlzLmdldFRhYlNpemUoKSxmPXRoaXMuJHdyYXBEYXRhLGk9dGhpcy4kd3JhcExpbWl0LGosayxtPWE7Yj1NYXRoLm1pbihiLGMubGVuZ3RoLTEpO3doaWxlKG08PWIpe2s9dGhpcy5nZXRGb2xkTGluZShtLGspO2lmKCFrKWo9dGhpcy4kZ2V0RGlzcGxheVRva2VucyhlLnN0cmluZ1RyaW1SaWdodChjW21dKSksZlttXT10aGlzLiRjb21wdXRlV3JhcFNwbGl0cyhqLGksZCksbSsrO2Vsc2V7aj1bXSxrLndhbGsoZnVuY3Rpb24oYSxiLGQsZSl7dmFyIGY7aWYoYSl7Zj10aGlzLiRnZXREaXNwbGF5VG9rZW5zKGEsai5sZW5ndGgpLGZbMF09Zztmb3IodmFyIGk9MTtpPGYubGVuZ3RoO2krKylmW2ldPWh9ZWxzZSBmPXRoaXMuJGdldERpc3BsYXlUb2tlbnMoY1tiXS5zdWJzdHJpbmcoZSxkKSxqLmxlbmd0aCk7aj1qLmNvbmNhdChmKX0uYmluZCh0aGlzKSxrLmVuZC5yb3csY1trLmVuZC5yb3ddLmxlbmd0aCsxKTt3aGlsZShqLmxlbmd0aCE9MCYmaltqLmxlbmd0aC0xXT49bClqLnBvcCgpO2Zbay5zdGFydC5yb3ddPXRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKGosaSxkKSxtPWsuZW5kLnJvdysxfX19O3ZhciBiPTEsYz0yLGc9MyxoPTQsaj05LGw9MTAsbT0xMSxuPTEyO3RoaXMuJGNvbXB1dGVXcmFwU3BsaXRzPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gaShiKXt2YXIgZD1hLnNsaWNlKGUsYiksZz1kLmxlbmd0aDtkLmpvaW4oIiIpLnJlcGxhY2UoLzEyL2csZnVuY3Rpb24oKXtnLT0xfSkucmVwbGFjZSgvMi9nLGZ1bmN0aW9uKCl7Zy09MX0pLGYrPWcsYy5wdXNoKGYpLGU9Yn1pZihhLmxlbmd0aD09MClyZXR1cm5bXTt2YXIgYz1bXSxkPWEubGVuZ3RoLGU9MCxmPTA7d2hpbGUoZC1lPmIpe3ZhciBrPWUrYjtpZihhW2tdPj1sKXt3aGlsZShhW2tdPj1sKWsrKztpKGspO2NvbnRpbnVlfWlmKGFba109PWd8fGFba109PWgpe2ZvcihrO2shPWUtMTtrLS0paWYoYVtrXT09ZylicmVhaztpZihrPmUpe2koayk7Y29udGludWV9az1lK2I7Zm9yKGs7azxhLmxlbmd0aDtrKyspaWYoYVtrXSE9aClicmVhaztpZihrPT1hLmxlbmd0aClicmVhaztpKGspO2NvbnRpbnVlfXZhciBtPU1hdGgubWF4KGstMTAsZS0xKTt3aGlsZShrPm0mJmFba108ZylrLS07d2hpbGUoaz5tJiZhW2tdPT1qKWstLTtpZihrPm0pe2koKytrKTtjb250aW51ZX1rPWUrYixpKGspfXJldHVybiBjfSx0aGlzLiRnZXREaXNwbGF5VG9rZW5zPWZ1bmN0aW9uKGEsZCl7dmFyIGU9W10sZjtkPWR8fDA7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKyspe3ZhciBoPWEuY2hhckNvZGVBdChnKTtpZihoPT05KXtmPXRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShlLmxlbmd0aCtkKSxlLnB1c2gobSk7Zm9yKHZhciBpPTE7aTxmO2krKyllLnB1c2gobil9ZWxzZSBoPT0zMj9lLnB1c2gobCk6aD4zOSYmaDw0OHx8aD41NyYmaDw2ND9lLnB1c2goaik6aD49NDM1MiYmbyhoKT9lLnB1c2goYixjKTplLnB1c2goYil9cmV0dXJuIGV9LHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoPWZ1bmN0aW9uKGEsYixjKXtpZihiPT0wKXJldHVyblswLDBdO2I9PW51bGwmJihiPWMrYS5sZW5ndGgqTWF0aC5tYXgodGhpcy5nZXRUYWJTaXplKCksMikpLGM9Y3x8MDt2YXIgZCxlO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe2Q9YS5jaGFyQ29kZUF0KGUpLGQ9PTk/Yys9dGhpcy5nZXRTY3JlZW5UYWJTaXplKGMpOmQ+PTQzNTImJm8oZCk/Yys9MjpjKz0xO2lmKGM+YilicmVha31yZXR1cm5bYyxlXX0sdGhpcy5nZXRSb3dMZW5ndGg9ZnVuY3Rpb24oYSl7cmV0dXJuIXRoaXMuJHVzZVdyYXBNb2RlfHwhdGhpcy4kd3JhcERhdGFbYV0/MTp0aGlzLiR3cmFwRGF0YVthXS5sZW5ndGgrMX0sdGhpcy5nZXRSb3dIZWlnaHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5nZXRSb3dMZW5ndGgoYikqYS5saW5lSGVpZ2h0fSx0aGlzLmdldFNjcmVlbkxhc3RSb3dDb2x1bW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihhLHRoaXMuZG9jLmdldExpbmUoYSkubGVuZ3RoKX0sdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1bW49ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3coYSxiKTtyZXR1cm4gdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKGMpfSx0aGlzLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGEsYik7cmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGMsTnVtYmVyLk1BWF9WQUxVRS8xMCl9LHRoaXMuZ2V0Um93U3BsaXREYXRhPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLiR1c2VXcmFwTW9kZT90aGlzLiR3cmFwRGF0YVthXTp1bmRlZmluZWR9LHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy4kdGFiU2l6ZS1hJXRoaXMuJHRhYlNpemV9LHRoaXMuc2NyZWVuVG9Eb2N1bWVudFJvdz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihhLGIpLnJvd30sdGhpcy5zY3JlZW5Ub0RvY3VtZW50Q29sdW1uPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGEsYikuY29sdW1ufSx0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbj1mdW5jdGlvbihhLGIpe2lmKGE8MClyZXR1cm57cm93OjAsY29sdW1uOjB9O3ZhciBjLGQ9MCxlPTAsZixnPTAsaD0wLGk9dGhpcy4kcm93Q2FjaGU7Zm9yKHZhciBqPTA7ajxpLmxlbmd0aDtqKyspaWYoaVtqXS5zY3JlZW5Sb3c8YSlnPWlbal0uc2NyZWVuUm93LGQ9aVtqXS5kb2NSb3c7ZWxzZSBicmVhazt2YXIgaz0haS5sZW5ndGh8fGo9PWkubGVuZ3RoLGw9dGhpcy5nZXRMZW5ndGgoKS0xLG09dGhpcy5nZXROZXh0Rm9sZExpbmUoZCksbj1tP20uc3RhcnQucm93OkluZmluaXR5O3doaWxlKGc8PWEpe2g9dGhpcy5nZXRSb3dMZW5ndGgoZCk7aWYoZytoLTE+PWF8fGQ+PWwpYnJlYWs7Zys9aCxkKyssZD5uJiYoZD1tLmVuZC5yb3crMSxtPXRoaXMuZ2V0TmV4dEZvbGRMaW5lKGQsbSksbj1tP20uc3RhcnQucm93OkluZmluaXR5KSxrJiZpLnB1c2goe2RvY1JvdzpkLHNjcmVlblJvdzpnfSl9aWYobSYmbS5zdGFydC5yb3c8PWQpYz10aGlzLmdldEZvbGREaXNwbGF5TGluZShtKSxkPW0uc3RhcnQucm93O2Vsc2V7aWYoZytoPD1hfHxkPmwpcmV0dXJue3JvdzpsLGNvbHVtbjp0aGlzLmdldExpbmUobCkubGVuZ3RofTtjPXRoaXMuZ2V0TGluZShkKSxtPW51bGx9aWYodGhpcy4kdXNlV3JhcE1vZGUpe3ZhciBvPXRoaXMuJHdyYXBEYXRhW2RdO28mJihmPW9bYS1nXSxhPmcmJm8ubGVuZ3RoJiYoZT1vW2EtZy0xXXx8b1tvLmxlbmd0aC0xXSxjPWMuc3Vic3RyaW5nKGUpKSl9cmV0dXJuIGUrPXRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKGMsYilbMV0sdGhpcy4kdXNlV3JhcE1vZGU/ZT49ZiYmKGU9Zi0xKTplPU1hdGgubWluKGUsYy5sZW5ndGgpLG0/bS5pZHhUb1Bvc2l0aW9uKGUpOntyb3c6ZCxjb2x1bW46ZX19LHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uPWZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGI9PSJ1bmRlZmluZWQiKXZhciBjPXRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQoYS5yb3csYS5jb2x1bW4pO2Vsc2UgYz10aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KGEsYik7YT1jLnJvdyxiPWMuY29sdW1uO3ZhciBkO2lmKHRoaXMuJHVzZVdyYXBNb2RlKXtkPXRoaXMuJHdyYXBEYXRhO2lmKGE+ZC5sZW5ndGgtMSlyZXR1cm57cm93OnRoaXMuZ2V0U2NyZWVuTGVuZ3RoKCksY29sdW1uOmQubGVuZ3RoPT0wPzA6ZFtkLmxlbmd0aC0xXS5sZW5ndGgtMX19dmFyIGU9MCxmPW51bGwsZz1udWxsO2c9dGhpcy5nZXRGb2xkQXQoYSxiLDEpLGcmJihhPWcuc3RhcnQucm93LGI9Zy5zdGFydC5jb2x1bW4pO3ZhciBoLGk9MCxqPXRoaXMuJHJvd0NhY2hlO2Zvcih2YXIgaz0wO2s8ai5sZW5ndGg7aysrKWlmKGpba10uZG9jUm93PGEpZT1qW2tdLnNjcmVlblJvdyxpPWpba10uZG9jUm93O2Vsc2UgYnJlYWs7dmFyIGw9IWoubGVuZ3RofHxrPT1qLmxlbmd0aCxtPXRoaXMuZ2V0TmV4dEZvbGRMaW5lKGkpLG49bT9tLnN0YXJ0LnJvdzpJbmZpbml0eTt3aGlsZShpPGEpe2lmKGk+PW4pe2g9bS5lbmQucm93KzE7aWYoaD5hKWJyZWFrO209dGhpcy5nZXROZXh0Rm9sZExpbmUoaCxtKSxuPW0/bS5zdGFydC5yb3c6SW5maW5pdHl9ZWxzZSBoPWkrMTtlKz10aGlzLmdldFJvd0xlbmd0aChpKSxpPWgsbCYmai5wdXNoKHtkb2NSb3c6aSxzY3JlZW5Sb3c6ZX0pfXZhciBvPSIiO20mJmk+PW4/KG89dGhpcy5nZXRGb2xkRGlzcGxheUxpbmUobSxhLGIpLGY9bS5zdGFydC5yb3cpOihvPXRoaXMuZ2V0TGluZShhKS5zdWJzdHJpbmcoMCxiKSxmPWEpO2lmKHRoaXMuJHVzZVdyYXBNb2RlKXt2YXIgcD1kW2ZdLHE9MDt3aGlsZShvLmxlbmd0aD49cFtxXSllKysscSsrO289by5zdWJzdHJpbmcocFtxLTFdfHwwLG8ubGVuZ3RoKX1yZXR1cm57cm93OmUsY29sdW1uOnRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKG8pWzBdfX0sdGhpcy5kb2N1bWVudFRvU2NyZWVuQ29sdW1uPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGEsYikuY29sdW1ufSx0aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3c9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oYSxiKS5yb3d9LHRoaXMuZ2V0U2NyZWVuTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGE9MCxiPW51bGw7aWYoIXRoaXMuJHVzZVdyYXBNb2RlKXthPXRoaXMuZ2V0TGVuZ3RoKCk7dmFyIGM9dGhpcy4kZm9sZERhdGE7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYj1jW2RdLGEtPWIuZW5kLnJvdy1iLnN0YXJ0LnJvd31lbHNle3ZhciBlPXRoaXMuJHdyYXBEYXRhLmxlbmd0aCxmPTAsZD0wLGI9dGhpcy4kZm9sZERhdGFbZCsrXSxnPWI/Yi5zdGFydC5yb3c6SW5maW5pdHk7d2hpbGUoZjxlKWErPXRoaXMuJHdyYXBEYXRhW2ZdLmxlbmd0aCsxLGYrKyxmPmcmJihmPWIuZW5kLnJvdysxLGI9dGhpcy4kZm9sZERhdGFbZCsrXSxnPWI/Yi5zdGFydC5yb3c6SW5maW5pdHkpfXJldHVybiBhfX0pKS5jYWxsKGwucHJvdG90eXBlKSxhKCIuL2VkaXRfc2Vzc2lvbi9mb2xkaW5nIikuRm9sZGluZy5jYWxsKGwucHJvdG90eXBlKSxhKCIuL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoIikuQnJhY2tldE1hdGNoLmNhbGwobC5wcm90b3R5cGUpLGIuRWRpdFNlc3Npb249bH0pLGRlZmluZSgiYWNlL3NlbGVjdGlvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2xpYi9vb3AiKSxlPWEoIi4vbGliL2xhbmciKSxmPWEoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZz1hKCIuL3JhbmdlIikuUmFuZ2UsaD1mdW5jdGlvbihhKXt0aGlzLnNlc3Npb249YSx0aGlzLmRvYz1hLmdldERvY3VtZW50KCksdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uTGVhZD10aGlzLmRvYy5jcmVhdGVBbmNob3IoMCwwKSx0aGlzLnNlbGVjdGlvbkFuY2hvcj10aGlzLmRvYy5jcmVhdGVBbmNob3IoMCwwKTt2YXIgYj10aGlzO3RoaXMuc2VsZWN0aW9uTGVhZC5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9lbWl0KCJjaGFuZ2VDdXJzb3IiKSxiLiRpc0VtcHR5fHxiLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKSwhYi4kcHJldmVudFVwZGF0ZURlc2lyZWRDb2x1bW5PbkNoYW5nZSYmYS5vbGQuY29sdW1uIT1hLnZhbHVlLmNvbHVtbiYmYi4kdXBkYXRlRGVzaXJlZENvbHVtbigpfSksdGhpcy5zZWxlY3Rpb25BbmNob3Iub24oImNoYW5nZSIsZnVuY3Rpb24oKXtiLiRpc0VtcHR5fHxiLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKX0pfTsoKGZ1bmN0aW9uKCl7ZC5pbXBsZW1lbnQodGhpcyxmKSx0aGlzLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaXNFbXB0eXx8dGhpcy5zZWxlY3Rpb25BbmNob3Iucm93PT10aGlzLnNlbGVjdGlvbkxlYWQucm93JiZ0aGlzLnNlbGVjdGlvbkFuY2hvci5jb2x1bW49PXRoaXMuc2VsZWN0aW9uTGVhZC5jb2x1bW59LHRoaXMuaXNNdWx0aUxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/ITE6dGhpcy5nZXRSYW5nZSgpLmlzTXVsdGlMaW5lKCl9LHRoaXMuZ2V0Q3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTGVhZC5nZXRQb3NpdGlvbigpfSx0aGlzLnNldFNlbGVjdGlvbkFuY2hvcj1mdW5jdGlvbihhLGIpe3RoaXMuc2VsZWN0aW9uQW5jaG9yLnNldFBvc2l0aW9uKGEsYiksdGhpcy4kaXNFbXB0eSYmKHRoaXMuJGlzRW1wdHk9ITEsdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIikpfSx0aGlzLmdldFNlbGVjdGlvbkFuY2hvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRpc0VtcHR5P3RoaXMuZ2V0U2VsZWN0aW9uTGVhZCgpOnRoaXMuc2VsZWN0aW9uQW5jaG9yLmdldFBvc2l0aW9uKCl9LHRoaXMuZ2V0U2VsZWN0aW9uTGVhZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbkxlYWQuZ2V0UG9zaXRpb24oKX0sdGhpcy5zaGlmdFNlbGVjdGlvbj1mdW5jdGlvbihhKXtpZih0aGlzLiRpc0VtcHR5KXt0aGlzLm1vdmVDdXJzb3JUbyh0aGlzLnNlbGVjdGlvbkxlYWQucm93LHRoaXMuc2VsZWN0aW9uTGVhZC5jb2x1bW4rYSk7cmV0dXJufXZhciBiPXRoaXMuZ2V0U2VsZWN0aW9uQW5jaG9yKCksYz10aGlzLmdldFNlbGVjdGlvbkxlYWQoKSxkPXRoaXMuaXNCYWNrd2FyZHMoKTsoIWR8fGIuY29sdW1uIT09MCkmJnRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKGIucm93LGIuY29sdW1uK2EpLChkfHxjLmNvbHVtbiE9PTApJiZ0aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yVG8oYy5yb3csYy5jb2x1bW4rYSl9KX0sdGhpcy5pc0JhY2t3YXJkcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsZWN0aW9uQW5jaG9yLGI9dGhpcy5zZWxlY3Rpb25MZWFkO3JldHVybiBhLnJvdz5iLnJvd3x8YS5yb3c9PWIucm93JiZhLmNvbHVtbj5iLmNvbHVtbn0sdGhpcy5nZXRSYW5nZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsZWN0aW9uQW5jaG9yLGI9dGhpcy5zZWxlY3Rpb25MZWFkO3JldHVybiB0aGlzLmlzRW1wdHkoKT9nLmZyb21Qb2ludHMoYixiKTp0aGlzLmlzQmFja3dhcmRzKCk/Zy5mcm9tUG9pbnRzKGIsYSk6Zy5mcm9tUG9pbnRzKGEsYil9LHRoaXMuY2xlYXJTZWxlY3Rpb249ZnVuY3Rpb24oKXt0aGlzLiRpc0VtcHR5fHwodGhpcy4kaXNFbXB0eT0hMCx0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKSl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kb2MuZ2V0TGVuZ3RoKCktMTt0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihhLHRoaXMuZG9jLmdldExpbmUoYSkubGVuZ3RoKSx0aGlzLm1vdmVDdXJzb3JUbygwLDApfSx0aGlzLnNldFNlbGVjdGlvblJhbmdlPWZ1bmN0aW9uKGEsYil7Yj8odGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoYS5lbmQucm93LGEuZW5kLmNvbHVtbiksdGhpcy5zZWxlY3RUbyhhLnN0YXJ0LnJvdyxhLnN0YXJ0LmNvbHVtbikpOih0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihhLnN0YXJ0LnJvdyxhLnN0YXJ0LmNvbHVtbiksdGhpcy5zZWxlY3RUbyhhLmVuZC5yb3csYS5lbmQuY29sdW1uKSksdGhpcy4kdXBkYXRlRGVzaXJlZENvbHVtbigpfSx0aGlzLiR1cGRhdGVEZXNpcmVkQ29sdW1uPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRDdXJzb3IoKTt0aGlzLiRkZXNpcmVkQ29sdW1uPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuQ29sdW1uKGEucm93LGEuY29sdW1uKX0sdGhpcy4kbW92ZVNlbGVjdGlvbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnNlbGVjdGlvbkxlYWQ7dGhpcy4kaXNFbXB0eSYmdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoYi5yb3csYi5jb2x1bW4pLGEuY2FsbCh0aGlzKX0sdGhpcy5zZWxlY3RUbz1mdW5jdGlvbihhLGIpe3RoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKXt0aGlzLm1vdmVDdXJzb3JUbyhhLGIpfSl9LHRoaXMuc2VsZWN0VG9Qb3NpdGlvbj1mdW5jdGlvbihhKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihhKX0pfSx0aGlzLnNlbGVjdFVwPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JVcCl9LHRoaXMuc2VsZWN0RG93bj1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRG93bil9LHRoaXMuc2VsZWN0UmlnaHQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvclJpZ2h0KX0sdGhpcy5zZWxlY3RMZWZ0PWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMZWZ0KX0sdGhpcy5zZWxlY3RMaW5lU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxpbmVTdGFydCl9LHRoaXMuc2VsZWN0TGluZUVuZD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yTGluZUVuZCl9LHRoaXMuc2VsZWN0RmlsZUVuZD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCl9LHRoaXMuc2VsZWN0RmlsZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JGaWxlU3RhcnQpfSx0aGlzLnNlbGVjdFdvcmRSaWdodD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yV29yZFJpZ2h0KX0sdGhpcy5zZWxlY3RXb3JkTGVmdD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQpfSx0aGlzLnNlbGVjdFdvcmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEN1cnNvcigpLGI9dGhpcy5zZXNzaW9uLmdldFdvcmRSYW5nZShhLnJvdyxhLmNvbHVtbik7dGhpcy5zZXRTZWxlY3Rpb25SYW5nZShiKX0sdGhpcy5zZWxlY3RBV29yZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0Q3Vyc29yKCksYj10aGlzLnNlc3Npb24uZ2V0QVdvcmRSYW5nZShhLnJvdyxhLmNvbHVtbik7dGhpcy5zZXRTZWxlY3Rpb25SYW5nZShiKX0sdGhpcy5zZWxlY3RMaW5lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25MZWFkLnJvdyxiLGM9dGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKGEpO2M/KGE9Yy5zdGFydC5yb3csYj1jLmVuZC5yb3cpOmI9YSx0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihhLDApLHRoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKXt0aGlzLm1vdmVDdXJzb3JUbyhiKzEsMCl9KX0sdGhpcy5tb3ZlQ3Vyc29yVXA9ZnVuY3Rpb24oKXt0aGlzLm1vdmVDdXJzb3JCeSgtMSwwKX0sdGhpcy5tb3ZlQ3Vyc29yRG93bj1mdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvckJ5KDEsMCl9LHRoaXMubW92ZUN1cnNvckxlZnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlbGVjdGlvbkxlYWQuZ2V0UG9zaXRpb24oKSxiO2lmKGI9dGhpcy5zZXNzaW9uLmdldEZvbGRBdChhLnJvdyxhLmNvbHVtbiwtMSkpdGhpcy5tb3ZlQ3Vyc29yVG8oYi5zdGFydC5yb3csYi5zdGFydC5jb2x1bW4pO2Vsc2UgaWYoYS5jb2x1bW49PTApYS5yb3c+MCYmdGhpcy5tb3ZlQ3Vyc29yVG8oYS5yb3ctMSx0aGlzLmRvYy5nZXRMaW5lKGEucm93LTEpLmxlbmd0aCk7ZWxzZXt2YXIgYz10aGlzLnNlc3Npb24uZ2V0VGFiU2l6ZSgpO3RoaXMuc2Vzc2lvbi5pc1RhYlN0b3AoYSkmJnRoaXMuZG9jLmdldExpbmUoYS5yb3cpLnNsaWNlKGEuY29sdW1uLWMsYS5jb2x1bW4pLnNwbGl0KCIgIikubGVuZ3RoLTE9PWM/dGhpcy5tb3ZlQ3Vyc29yQnkoMCwtYyk6dGhpcy5tb3ZlQ3Vyc29yQnkoMCwtMSl9fSx0aGlzLm1vdmVDdXJzb3JSaWdodD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsZWN0aW9uTGVhZC5nZXRQb3NpdGlvbigpLGI7aWYoYj10aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGEucm93LGEuY29sdW1uLDEpKXRoaXMubW92ZUN1cnNvclRvKGIuZW5kLnJvdyxiLmVuZC5jb2x1bW4pO2Vsc2UgaWYodGhpcy5zZWxlY3Rpb25MZWFkLmNvbHVtbj09dGhpcy5kb2MuZ2V0TGluZSh0aGlzLnNlbGVjdGlvbkxlYWQucm93KS5sZW5ndGgpdGhpcy5zZWxlY3Rpb25MZWFkLnJvdzx0aGlzLmRvYy5nZXRMZW5ndGgoKS0xJiZ0aGlzLm1vdmVDdXJzb3JUbyh0aGlzLnNlbGVjdGlvbkxlYWQucm93KzEsMCk7ZWxzZXt2YXIgYz10aGlzLnNlc3Npb24uZ2V0VGFiU2l6ZSgpLGE9dGhpcy5zZWxlY3Rpb25MZWFkO3RoaXMuc2Vzc2lvbi5pc1RhYlN0b3AoYSkmJnRoaXMuZG9jLmdldExpbmUoYS5yb3cpLnNsaWNlKGEuY29sdW1uLGEuY29sdW1uK2MpLnNwbGl0KCIgIikubGVuZ3RoLTE9PWM/dGhpcy5tb3ZlQ3Vyc29yQnkoMCxjKTp0aGlzLm1vdmVDdXJzb3JCeSgwLDEpfX0sdGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25MZWFkLnJvdyxiPXRoaXMuc2VsZWN0aW9uTGVhZC5jb2x1bW4sYz10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhhLGIpLGQ9dGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihjLDApLGU9dGhpcy5zZXNzaW9uLmdldERpc3BsYXlMaW5lKGEsbnVsbCxkLnJvdyxkLmNvbHVtbiksZj1lLm1hdGNoKC9eXHMqLyk7ZlswXS5sZW5ndGg9PWI/dGhpcy5tb3ZlQ3Vyc29yVG8oZC5yb3csZC5jb2x1bW4pOnRoaXMubW92ZUN1cnNvclRvKGQucm93LGQuY29sdW1uK2ZbMF0ubGVuZ3RoKX0sdGhpcy5tb3ZlQ3Vyc29yTGluZUVuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsZWN0aW9uTGVhZCxiPXRoaXMuc2Vzc2lvbi5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlvbihhLnJvdyxhLmNvbHVtbik7dGhpcy5tb3ZlQ3Vyc29yVG8oYi5yb3csYi5jb2x1bW4pfSx0aGlzLm1vdmVDdXJzb3JGaWxlRW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSxiPXRoaXMuZG9jLmdldExpbmUoYSkubGVuZ3RoO3RoaXMubW92ZUN1cnNvclRvKGEsYil9LHRoaXMubW92ZUN1cnNvckZpbGVTdGFydD1mdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvclRvKDAsMCl9LHRoaXMubW92ZUN1cnNvcldvcmRSaWdodD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsZWN0aW9uTGVhZC5yb3csYj10aGlzLnNlbGVjdGlvbkxlYWQuY29sdW1uLGM9dGhpcy5kb2MuZ2V0TGluZShhKSxkPWMuc3Vic3RyaW5nKGIpLGU7dGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4PTAsdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4PTA7dmFyIGY9dGhpcy5zZXNzaW9uLmdldEZvbGRBdChhLGIsMSk7aWYoZil7dGhpcy5tb3ZlQ3Vyc29yVG8oZi5lbmQucm93LGYuZW5kLmNvbHVtbik7cmV0dXJufWlmKGU9dGhpcy5zZXNzaW9uLm5vblRva2VuUmUuZXhlYyhkKSliKz10aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXgsdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4PTAsZD1jLnN1YnN0cmluZyhiKTtpZihiPj1jLmxlbmd0aCl7dGhpcy5tb3ZlQ3Vyc29yVG8oYSxjLmxlbmd0aCksdGhpcy5tb3ZlQ3Vyc29yUmlnaHQoKSxhPHRoaXMuZG9jLmdldExlbmd0aCgpLTEmJnRoaXMubW92ZUN1cnNvcldvcmRSaWdodCgpO3JldHVybn1pZihlPXRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMoZCkpYis9dGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4LHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleD0wO3RoaXMubW92ZUN1cnNvclRvKGEsYil9LHRoaXMubW92ZUN1cnNvcldvcmRMZWZ0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25MZWFkLnJvdyxiPXRoaXMuc2VsZWN0aW9uTGVhZC5jb2x1bW4sYztpZihjPXRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoYSxiLC0xKSl7dGhpcy5tb3ZlQ3Vyc29yVG8oYy5zdGFydC5yb3csYy5zdGFydC5jb2x1bW4pO3JldHVybn12YXIgZD10aGlzLnNlc3Npb24uZ2V0Rm9sZFN0cmluZ0F0KGEsYiwtMSk7ZD09bnVsbCYmKGQ9dGhpcy5kb2MuZ2V0TGluZShhKS5zdWJzdHJpbmcoMCxiKSk7dmFyIGY9ZS5zdHJpbmdSZXZlcnNlKGQpLGc7dGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4PTAsdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4PTA7aWYoZz10aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5leGVjKGYpKWItPXRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCxmPWYuc2xpY2UodGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4KSx0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg9MDtpZihiPD0wKXt0aGlzLm1vdmVDdXJzb3JUbyhhLDApLHRoaXMubW92ZUN1cnNvckxlZnQoKSxhPjAmJnRoaXMubW92ZUN1cnNvcldvcmRMZWZ0KCk7cmV0dXJufWlmKGc9dGhpcy5zZXNzaW9uLnRva2VuUmUuZXhlYyhmKSliLT10aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXgsdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4PTA7dGhpcy5tb3ZlQ3Vyc29yVG8oYSxiKX0sdGhpcy5tb3ZlQ3Vyc29yQnk9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc2VsZWN0aW9uTGVhZC5yb3csdGhpcy5zZWxlY3Rpb25MZWFkLmNvbHVtbiksZD1iPT09MCYmdGhpcy4kZGVzaXJlZENvbHVtbnx8Yy5jb2x1bW4sZT10aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGMucm93K2EsZCk7dGhpcy5tb3ZlQ3Vyc29yVG8oZS5yb3csZS5jb2x1bW4rYixiPT09MCl9LHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb249ZnVuY3Rpb24oYSl7dGhpcy5tb3ZlQ3Vyc29yVG8oYS5yb3csYS5jb2x1bW4pfSx0aGlzLm1vdmVDdXJzb3JUbz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5zZXNzaW9uLmdldEZvbGRBdChhLGIsMSk7ZCYmKGE9ZC5zdGFydC5yb3csYj1kLnN0YXJ0LmNvbHVtbiksdGhpcy4kcHJldmVudFVwZGF0ZURlc2lyZWRDb2x1bW5PbkNoYW5nZT0hMCx0aGlzLnNlbGVjdGlvbkxlYWQuc2V0UG9zaXRpb24oYSxiKSx0aGlzLiRwcmV2ZW50VXBkYXRlRGVzaXJlZENvbHVtbk9uQ2hhbmdlPSExLGN8fHRoaXMuJHVwZGF0ZURlc2lyZWRDb2x1bW4odGhpcy5zZWxlY3Rpb25MZWFkLmNvbHVtbil9LHRoaXMubW92ZUN1cnNvclRvU2NyZWVuPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGEsYik7YT1kLnJvdyxiPWQuY29sdW1uLHRoaXMubW92ZUN1cnNvclRvKGEsYixjKX19KSkuY2FsbChoLnByb3RvdHlwZSksYi5TZWxlY3Rpb249aH0pLGRlZmluZSgiYWNlL3JhbmdlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihhLGIsYyxkKXt0aGlzLnN0YXJ0PXtyb3c6YSxjb2x1bW46Yn0sdGhpcy5lbmQ9e3JvdzpjLGNvbHVtbjpkfX07KChmdW5jdGlvbigpe3RoaXMuaXNFZXF1YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3RhcnQucm93PT1hLnN0YXJ0LnJvdyYmdGhpcy5lbmQucm93PT1hLmVuZC5yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT1hLnN0YXJ0LmNvbHVtbiYmdGhpcy5lbmQuY29sdW1uPT1hLmVuZC5jb2x1bW59LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmFuZ2U6IFsiK3RoaXMuc3RhcnQucm93KyIvIit0aGlzLnN0YXJ0LmNvbHVtbisiXSAtPiBbIit0aGlzLmVuZC5yb3crIi8iK3RoaXMuZW5kLmNvbHVtbisiXSJ9LHRoaXMuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5jb21wYXJlKGEsYik9PTB9LHRoaXMuY29tcGFyZVJhbmdlPWZ1bmN0aW9uKGEpe3ZhciBiLGM9YS5lbmQsZD1hLnN0YXJ0O3JldHVybiBiPXRoaXMuY29tcGFyZShjLnJvdyxjLmNvbHVtbiksYj09MT8oYj10aGlzLmNvbXBhcmUoZC5yb3csZC5jb2x1bW4pLGI9PTE/MjpiPT0wPzE6MCk6Yj09LTE/LTI6KGI9dGhpcy5jb21wYXJlKGQucm93LGQuY29sdW1uKSxiPT0tMT8tMTpiPT0xPzQyOjApfSx0aGlzLmNvbXBhcmVQb2ludD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb21wYXJlKGEucm93LGEuY29sdW1uKX0sdGhpcy5jb250YWluc1JhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbXBhcmVQb2ludChhLnN0YXJ0KT09MCYmdGhpcy5jb21wYXJlUG9pbnQoYS5lbmQpPT0wfSx0aGlzLmlzRW5kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZW5kLnJvdz09YSYmdGhpcy5lbmQuY29sdW1uPT1ifSx0aGlzLmlzU3RhcnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PWEmJnRoaXMuc3RhcnQuY29sdW1uPT1ifSx0aGlzLnNldFN0YXJ0PWZ1bmN0aW9uKGEsYil7dHlwZW9mIGE9PSJvYmplY3QiPyh0aGlzLnN0YXJ0LmNvbHVtbj1hLmNvbHVtbix0aGlzLnN0YXJ0LnJvdz1hLnJvdyk6KHRoaXMuc3RhcnQucm93PWEsdGhpcy5zdGFydC5jb2x1bW49Yil9LHRoaXMuc2V0RW5kPWZ1bmN0aW9uKGEsYil7dHlwZW9mIGE9PSJvYmplY3QiPyh0aGlzLmVuZC5jb2x1bW49YS5jb2x1bW4sdGhpcy5lbmQucm93PWEucm93KToodGhpcy5lbmQucm93PWEsdGhpcy5lbmQuY29sdW1uPWIpfSx0aGlzLmluc2lkZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmNvbXBhcmUoYSxiKT09MD90aGlzLmlzRW5kKGEsYil8fHRoaXMuaXNTdGFydChhLGIpPyExOiEwOiExfSx0aGlzLmluc2lkZVN0YXJ0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY29tcGFyZShhLGIpPT0wP3RoaXMuaXNFbmQoYSxiKT8hMTohMDohMX0sdGhpcy5pbnNpZGVFbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5jb21wYXJlKGEsYik9PTA/dGhpcy5pc1N0YXJ0KGEsYik/ITE6ITA6ITF9LHRoaXMuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiF0aGlzLmlzTXVsdGlMaW5lKCkmJmE9PT10aGlzLnN0YXJ0LnJvdz9iPHRoaXMuc3RhcnQuY29sdW1uPy0xOmI+dGhpcy5lbmQuY29sdW1uPzE6MDphPHRoaXMuc3RhcnQucm93Py0xOmE+dGhpcy5lbmQucm93PzE6dGhpcy5zdGFydC5yb3c9PT1hP2I+PXRoaXMuc3RhcnQuY29sdW1uPzA6LTE6dGhpcy5lbmQucm93PT09YT9iPD10aGlzLmVuZC5jb2x1bW4/MDoxOjB9LHRoaXMuY29tcGFyZVN0YXJ0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuc3RhcnQucm93PT1hJiZ0aGlzLnN0YXJ0LmNvbHVtbj09Yj8tMTp0aGlzLmNvbXBhcmUoYSxiKX0sdGhpcy5jb21wYXJlRW5kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZW5kLnJvdz09YSYmdGhpcy5lbmQuY29sdW1uPT1iPzE6dGhpcy5jb21wYXJlKGEsYil9LHRoaXMuY29tcGFyZUluc2lkZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVuZC5yb3c9PWEmJnRoaXMuZW5kLmNvbHVtbj09Yj8xOnRoaXMuc3RhcnQucm93PT1hJiZ0aGlzLnN0YXJ0LmNvbHVtbj09Yj8tMTp0aGlzLmNvbXBhcmUoYSxiKX0sdGhpcy5jbGlwUm93cz1mdW5jdGlvbihhLGIpe2lmKHRoaXMuZW5kLnJvdz5iKXZhciBjPXtyb3c6YisxLGNvbHVtbjowfTtpZih0aGlzLnN0YXJ0LnJvdz5iKXZhciBlPXtyb3c6YisxLGNvbHVtbjowfTtpZih0aGlzLnN0YXJ0LnJvdzxhKXZhciBlPXtyb3c6YSxjb2x1bW46MH07aWYodGhpcy5lbmQucm93PGEpdmFyIGM9e3JvdzphLGNvbHVtbjowfTtyZXR1cm4gZC5mcm9tUG9pbnRzKGV8fHRoaXMuc3RhcnQsY3x8dGhpcy5lbmQpfSx0aGlzLmV4dGVuZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY29tcGFyZShhLGIpO2lmKGM9PTApcmV0dXJuIHRoaXM7aWYoYz09LTEpdmFyIGU9e3JvdzphLGNvbHVtbjpifTtlbHNlIHZhciBmPXtyb3c6YSxjb2x1bW46Yn07cmV0dXJuIGQuZnJvbVBvaW50cyhlfHx0aGlzLnN0YXJ0LGZ8fHRoaXMuZW5kKX0sdGhpcy5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQucm93PT10aGlzLmVuZC5yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT10aGlzLmVuZC5jb2x1bW59LHRoaXMuaXNNdWx0aUxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5yb3chPT10aGlzLmVuZC5yb3d9LHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsdGhpcy5lbmQpfSx0aGlzLmNvbGxhcHNlUm93cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC5jb2x1bW49PTA/bmV3IGQodGhpcy5zdGFydC5yb3csMCxNYXRoLm1heCh0aGlzLnN0YXJ0LnJvdyx0aGlzLmVuZC5yb3ctMSksMCk6bmV3IGQodGhpcy5zdGFydC5yb3csMCx0aGlzLmVuZC5yb3csMCl9LHRoaXMudG9TY3JlZW5SYW5nZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KSxjPWEuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZW5kKTtyZXR1cm4gbmV3IGQoYi5yb3csYi5jb2x1bW4sYy5yb3csYy5jb2x1bW4pfX0pKS5jYWxsKGQucHJvdG90eXBlKSxkLmZyb21Qb2ludHM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGQoYS5yb3csYS5jb2x1bW4sYi5yb3csYi5jb2x1bW4pfSxiLlJhbmdlPWR9KSxkZWZpbmUoImFjZS9tb2RlL3RleHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvdW5pY29kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWEoIi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGc9YSgiLi4vdW5pY29kZSIpLGg9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGQoKG5ldyBlKS5nZXRSdWxlcygpKSx0aGlzLiRiZWhhdmlvdXI9bmV3IGZ9OygoZnVuY3Rpb24oKXt0aGlzLnRva2VuUmU9bmV3IFJlZ0V4cCgiXlsiK2cucGFja2FnZXMuTCtnLnBhY2thZ2VzLk1uK2cucGFja2FnZXMuTWMrZy5wYWNrYWdlcy5OZCtnLnBhY2thZ2VzLlBjKyJcXCRfXSsiLCJnIiksdGhpcy5ub25Ub2tlblJlPW5ldyBSZWdFeHAoIl4oPzpbXiIrZy5wYWNrYWdlcy5MK2cucGFja2FnZXMuTW4rZy5wYWNrYWdlcy5NYytnLnBhY2thZ2VzLk5kK2cucGFja2FnZXMuUGMrIlxcJF9dfHNdKSsiLCJnIiksdGhpcy5nZXRUb2tlbml6ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdG9rZW5pemVyfSx0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiIifSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe30sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsfSx0aGlzLmhpZ2hsaWdodFNlbGVjdGlvbj1mdW5jdGlvbihhKXt2YXIgYj1hLnNlc3Npb247Yi4kc2VsZWN0aW9uT2NjdXJyZW5jZXN8fChiLiRzZWxlY3Rpb25PY2N1cnJlbmNlcz1bXSksYi4kc2VsZWN0aW9uT2NjdXJyZW5jZXMubGVuZ3RoJiZ0aGlzLmNsZWFyU2VsZWN0aW9uSGlnaGxpZ2h0KGEpO3ZhciBjPWEuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpZihjLmlzRW1wdHkoKXx8Yy5pc011bHRpTGluZSgpKXJldHVybjt2YXIgZD1jLnN0YXJ0LmNvbHVtbi0xLGU9Yy5lbmQuY29sdW1uKzEsZj1iLmdldExpbmUoYy5zdGFydC5yb3cpLGc9Zi5sZW5ndGgsaD1mLnN1YnN0cmluZyhNYXRoLm1heChkLDApLE1hdGgubWluKGUsZykpO2lmKGQ+PTAmJi9eW1x3XGRdLy50ZXN0KGgpfHxlPD1nJiYvW1x3XGRdJC8udGVzdChoKSlyZXR1cm47aD1mLnN1YnN0cmluZyhjLnN0YXJ0LmNvbHVtbixjLmVuZC5jb2x1bW4pO2lmKCEvXltcd1xkXSskLy50ZXN0KGgpKXJldHVybjt2YXIgaT1hLmdldEN1cnNvclBvc2l0aW9uKCksaj17d3JhcDohMCx3aG9sZVdvcmQ6ITAsY2FzZVNlbnNpdGl2ZTohMCxuZWVkbGU6aH0saz1hLiRzZWFyY2guZ2V0T3B0aW9ucygpO2EuJHNlYXJjaC5zZXQoaik7dmFyIGw9YS4kc2VhcmNoLmZpbmRBbGwoYik7bC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKCFhLmNvbnRhaW5zKGkucm93LGkuY29sdW1uKSl7dmFyIGM9Yi5hZGRNYXJrZXIoYSwiYWNlX3NlbGVjdGVkX3dvcmQiLCJ0ZXh0Iik7Yi4kc2VsZWN0aW9uT2NjdXJyZW5jZXMucHVzaChjKX19KSxhLiRzZWFyY2guc2V0KGspfSx0aGlzLmNsZWFyU2VsZWN0aW9uSGlnaGxpZ2h0PWZ1bmN0aW9uKGEpe2lmKCFhLnNlc3Npb24uJHNlbGVjdGlvbk9jY3VycmVuY2VzKXJldHVybjthLnNlc3Npb24uJHNlbGVjdGlvbk9jY3VycmVuY2VzLmZvckVhY2goZnVuY3Rpb24oYil7YS5zZXNzaW9uLnJlbW92ZU1hcmtlcihiKX0pLGEuc2Vzc2lvbi4kc2VsZWN0aW9uT2NjdXJyZW5jZXM9W119LHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcz1mdW5jdGlvbihhKXtpZighdGhpcy4kZW1iZWRzKXJldHVybjt0aGlzLiRtb2Rlcz17fTtmb3IodmFyIGI9MDtiPHRoaXMuJGVtYmVkcy5sZW5ndGg7YisrKWFbdGhpcy4kZW1iZWRzW2JdXSYmKHRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tiXV09bmV3IGFbdGhpcy4kZW1iZWRzW2JdXSk7dmFyIGM9WyJ0b2dnbGVDb21tZW50TGluZXMiLCJnZXROZXh0TGluZUluZGVudCIsImNoZWNrT3V0ZGVudCIsImF1dG9PdXRkZW50IiwidHJhbnNmb3JtQWN0aW9uIl07Zm9yKHZhciBiPTA7YjxjLmxlbmd0aDtiKyspKGZ1bmN0aW9uKGEpe3ZhciBkPWNbYl0sZT1hW2RdO2FbY1tiXV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZGVsZWdhdG9yKGQsYXJndW1lbnRzLGUpfX0pKHRoaXMpfSx0aGlzLiRkZWxlZ2F0b3I9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJbMF07Zm9yKHZhciBlPTA7ZTx0aGlzLiRlbWJlZHMubGVuZ3RoO2UrKyl7aWYoIXRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tlXV0pY29udGludWU7dmFyIGY9ZC5zcGxpdCh0aGlzLiRlbWJlZHNbZV0pO2lmKCFmWzBdJiZmWzFdKXtiWzBdPWZbMV07dmFyIGc9dGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW2VdXTtyZXR1cm4gZ1thXS5hcHBseShnLGIpfX12YXIgaD1jLmFwcGx5KHRoaXMsYik7cmV0dXJuIGM/aDp1bmRlZmluZWR9LHRoaXMudHJhbnNmb3JtQWN0aW9uPWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy4kYmVoYXZpb3VyKXt2YXIgZj10aGlzLiRiZWhhdmlvdXIuZ2V0QmVoYXZpb3VycygpO2Zvcih2YXIgZyBpbiBmKWlmKGZbZ11bYl0pe3ZhciBoPWZbZ11bYl0uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGgpcmV0dXJuIGh9fX19KSkuY2FsbChoLnByb3RvdHlwZSksYi5Nb2RlPWh9KSxkZWZpbmUoImFjZS90b2tlbml6ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWZ1bmN0aW9uKGEsYil7Yj1iPyJnIitiOiJnIix0aGlzLnJ1bGVzPWEsdGhpcy5yZWdFeHBzPXt9LHRoaXMubWF0Y2hNYXBwaW5ncz17fTtmb3IodmFyIGMgaW4gdGhpcy5ydWxlcyl7dmFyIGQ9dGhpcy5ydWxlc1tjXSxlPWQsZj1bXSxnPTAsaD10aGlzLm1hdGNoTWFwcGluZ3NbY109e307Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBqPShuZXcgUmVnRXhwKCIoPzooIitlW2ldLnJlZ2V4KyIpfCguKSkiKSkuZXhlYygiYSIpLmxlbmd0aC0yLGs9ZVtpXS5yZWdleC5yZXBsYWNlKC9cXChbMC05XSspL2csZnVuY3Rpb24oYSxiKXtyZXR1cm4iXFwiKyhwYXJzZUludChiLDEwKStnKzEpfSk7aFtnXT17cnVsZTppLGxlbjpqfSxnKz1qLGYucHVzaChrKX10aGlzLnJlZ0V4cHNbY109bmV3IFJlZ0V4cCgiKD86KCIrZi5qb2luKCIpfCgiKSsiKXwoLikpIixiKX19OygoZnVuY3Rpb24oKXt0aGlzLmdldExpbmVUb2tlbnM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLGQ9dGhpcy5ydWxlc1tjXSxlPXRoaXMubWF0Y2hNYXBwaW5nc1tjXSxmPXRoaXMucmVnRXhwc1tjXTtmLmxhc3RJbmRleD0wO3ZhciBnLGg9W10saT0wLGo9e3R5cGU6bnVsbCx2YWx1ZToiIn07d2hpbGUoZz1mLmV4ZWMoYSkpe3ZhciBrPSJ0ZXh0IixsPW51bGwsbT1bZ1swXV07Zm9yKHZhciBuPTA7bjxnLmxlbmd0aC0yO24rKylpZihnW24rMV0hPT11bmRlZmluZWQpe2w9ZFtlW25dLnJ1bGVdLGVbbl0ubGVuPjEmJihtPWcuc2xpY2UobisyLG4rMStlW25dLmxlbikpLHR5cGVvZiBsLnRva2VuPT0iZnVuY3Rpb24iP2s9bC50b2tlbi5hcHBseSh0aGlzLG0pOms9bC50b2tlbjt2YXIgbz1sLm5leHQ7byYmbyE9PWMmJihjPW8sZD10aGlzLnJ1bGVzW2NdLGU9dGhpcy5tYXRjaE1hcHBpbmdzW2NdLGk9Zi5sYXN0SW5kZXgsZj10aGlzLnJlZ0V4cHNbY10sZi5sYXN0SW5kZXg9aSk7YnJlYWt9aWYobVswXSl7dHlwZW9mIGs9PSJzdHJpbmciJiYobT1bbS5qb2luKCIiKV0saz1ba10pO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKSghbHx8bC5tZXJnZXx8a1tuXT09PSJ0ZXh0IikmJmoudHlwZT09PWtbbl0/ai52YWx1ZSs9bVtuXTooai50eXBlJiZoLnB1c2goaiksaj17dHlwZTprW25dLHZhbHVlOm1bbl19KX1pZihpPT1hLmxlbmd0aClicmVhaztpPWYubGFzdEluZGV4fXJldHVybiBqLnR5cGUmJmgucHVzaChqKSx7dG9rZW5zOmgsc3RhdGU6Y319fSkpLmNhbGwoZC5wcm90b3R5cGUpLGIuVG9rZW5pemVyPWR9KSxkZWZpbmUoImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvbGFuZyIpLGU9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiZW1wdHlfbGluZSIscmVnZXg6Il4kIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiLisifV19fTsoKGZ1bmN0aW9uKCl7dGhpcy5hZGRSdWxlcz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBhKXt2YXIgZD1hW2NdO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdO2YubmV4dD9mLm5leHQ9YitmLm5leHQ6Zi5uZXh0PWIrY310aGlzLiRydWxlc1tiK2NdPWR9fSx0aGlzLmdldFJ1bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJ1bGVzfSx0aGlzLmVtYmVkUnVsZXM9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9KG5ldyBhKS5nZXRSdWxlcygpO2lmKGUpZm9yKHZhciBnPTA7ZzxlLmxlbmd0aDtnKyspZVtnXT1iK2VbZ107ZWxzZXtlPVtdO2Zvcih2YXIgaCBpbiBmKWUucHVzaChiK2gpfXRoaXMuYWRkUnVsZXMoZixiKTtmb3IodmFyIGc9MDtnPGUubGVuZ3RoO2crKylBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLiRydWxlc1tlW2ddXSxkLmRlZXBDb3B5KGMpKTt0aGlzLiRlbWJlZHN8fCh0aGlzLiRlbWJlZHM9W10pLHRoaXMuJGVtYmVkcy5wdXNoKGIpfSx0aGlzLmdldEVtYmVkcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbWJlZHN9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuVGV4dEhpZ2hsaWdodFJ1bGVzPWV9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9ZnVuY3Rpb24oKXt0aGlzLiRiZWhhdmlvdXJzPXt9fTsoKGZ1bmN0aW9uKCl7dGhpcy5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3N3aXRjaCh1bmRlZmluZWQpe2Nhc2UgdGhpcy4kYmVoYXZpb3Vyczp0aGlzLiRiZWhhdmlvdXJzPXt9O2Nhc2UgdGhpcy4kYmVoYXZpb3Vyc1thXTp0aGlzLiRiZWhhdmlvdXJzW2FdPXt9fXRoaXMuJGJlaGF2aW91cnNbYV1bYl09Y30sdGhpcy5hZGRCZWhhdmlvdXJzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKWZvcih2YXIgYyBpbiBhW2JdKXRoaXMuYWRkKGIsYyxhW2JdW2NdKX0sdGhpcy5yZW1vdmU9ZnVuY3Rpb24oYSl7dGhpcy4kYmVoYXZpb3VycyYmdGhpcy4kYmVoYXZpb3Vyc1thXSYmZGVsZXRlIHRoaXMuJGJlaGF2aW91cnNbYV19LHRoaXMuaW5oZXJpdD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXZhciBjPShuZXcgYSkuZ2V0QmVoYXZpb3VycyhiKTtlbHNlIHZhciBjPWEuZ2V0QmVoYXZpb3VycyhiKTt0aGlzLmFkZEJlaGF2aW91cnMoYyl9LHRoaXMuZ2V0QmVoYXZpb3Vycz1mdW5jdGlvbihhKXtpZighYSlyZXR1cm4gdGhpcy4kYmVoYXZpb3Vyczt2YXIgYj17fTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl0aGlzLiRiZWhhdmlvdXJzW2FbY11dJiYoYlthW2NdXT10aGlzLiRiZWhhdmlvdXJzW2FbY11dKTtyZXR1cm4gYn19KSkuY2FsbChkLnByb3RvdHlwZSksYi5CZWhhdmlvdXI9ZH0pLGRlZmluZSgiYWNlL3VuaWNvZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYz0vXHd7NH0vZztmb3IodmFyIGQgaW4gYSliLnBhY2thZ2VzW2RdPWFbZF0ucmVwbGFjZShjLCJcXHUkJiIpfSJ1c2Ugc3RyaWN0IixiLnBhY2thZ2VzPXt9LGQoe0w6IjAwNDEtMDA1QTAwNjEtMDA3QTAwQUEwMEI1MDBCQTAwQzAtMDBENjAwRDgtMDBGNjAwRjgtMDJDMTAyQzYtMDJEMTAyRTAtMDJFNDAyRUMwMkVFMDM3MC0wMzc0MDM3NjAzNzcwMzdBLTAzN0QwMzg2MDM4OC0wMzhBMDM4QzAzOEUtMDNBMTAzQTMtMDNGNTAzRjctMDQ4MTA0OEEtMDUyNTA1MzEtMDU1NjA1NTkwNTYxLTA1ODcwNUQwLTA1RUEwNUYwLTA1RjIwNjIxLTA2NEEwNjZFMDY2RjA2NzEtMDZEMzA2RDUwNkU1MDZFNjA2RUUwNkVGMDZGQS0wNkZDMDZGRjA3MTAwNzEyLTA3MkYwNzRELTA3QTUwN0IxMDdDQS0wN0VBMDdGNDA3RjUwN0ZBMDgwMC0wODE1MDgxQTA4MjQwODI4MDkwNC0wOTM5MDkzRDA5NTAwOTU4LTA5NjEwOTcxMDk3MjA5NzktMDk3RjA5ODUtMDk4QzA5OEYwOTkwMDk5My0wOUE4MDlBQS0wOUIwMDlCMjA5QjYtMDlCOTA5QkQwOUNFMDlEQzA5REQwOURGLTA5RTEwOUYwMDlGMTBBMDUtMEEwQTBBMEYwQTEwMEExMy0wQTI4MEEyQS0wQTMwMEEzMjBBMzMwQTM1MEEzNjBBMzgwQTM5MEE1OS0wQTVDMEE1RTBBNzItMEE3NDBBODUtMEE4RDBBOEYtMEE5MTBBOTMtMEFBODBBQUEtMEFCMDBBQjIwQUIzMEFCNS0wQUI5MEFCRDBBRDAwQUUwMEFFMTBCMDUtMEIwQzBCMEYwQjEwMEIxMy0wQjI4MEIyQS0wQjMwMEIzMjBCMzMwQjM1LTBCMzkwQjNEMEI1QzBCNUQwQjVGLTBCNjEwQjcxMEI4MzBCODUtMEI4QTBCOEUtMEI5MDBCOTItMEI5NTBCOTkwQjlBMEI5QzBCOUUwQjlGMEJBMzBCQTQwQkE4LTBCQUEwQkFFLTBCQjkwQkQwMEMwNS0wQzBDMEMwRS0wQzEwMEMxMi0wQzI4MEMyQS0wQzMzMEMzNS0wQzM5MEMzRDBDNTgwQzU5MEM2MDBDNjEwQzg1LTBDOEMwQzhFLTBDOTAwQzkyLTBDQTgwQ0FBLTBDQjMwQ0I1LTBDQjkwQ0JEMENERTBDRTAwQ0UxMEQwNS0wRDBDMEQwRS0wRDEwMEQxMi0wRDI4MEQyQS0wRDM5MEQzRDBENjAwRDYxMEQ3QS0wRDdGMEQ4NS0wRDk2MEQ5QS0wREIxMERCMy0wREJCMERCRDBEQzAtMERDNjBFMDEtMEUzMDBFMzIwRTMzMEU0MC0wRTQ2MEU4MTBFODIwRTg0MEU4NzBFODgwRThBMEU4RDBFOTQtMEU5NzBFOTktMEU5RjBFQTEtMEVBMzBFQTUwRUE3MEVBQTBFQUIwRUFELTBFQjAwRUIyMEVCMzBFQkQwRUMwLTBFQzQwRUM2MEVEQzBFREQwRjAwMEY0MC0wRjQ3MEY0OS0wRjZDMEY4OC0wRjhCMTAwMC0xMDJBMTAzRjEwNTAtMTA1NTEwNUEtMTA1RDEwNjExMDY1MTA2NjEwNkUtMTA3MDEwNzUtMTA4MTEwOEUxMEEwLTEwQzUxMEQwLTEwRkExMEZDMTEwMC0xMjQ4MTI0QS0xMjREMTI1MC0xMjU2MTI1ODEyNUEtMTI1RDEyNjAtMTI4ODEyOEEtMTI4RDEyOTAtMTJCMDEyQjItMTJCNTEyQjgtMTJCRTEyQzAxMkMyLTEyQzUxMkM4LTEyRDYxMkQ4LTEzMTAxMzEyLTEzMTUxMzE4LTEzNUExMzgwLTEzOEYxM0EwLTEzRjQxNDAxLTE2NkMxNjZGLTE2N0YxNjgxLTE2OUExNkEwLTE2RUExNzAwLTE3MEMxNzBFLTE3MTExNzIwLTE3MzExNzQwLTE3NTExNzYwLTE3NkMxNzZFLTE3NzAxNzgwLTE3QjMxN0Q3MTdEQzE4MjAtMTg3NzE4ODAtMThBODE4QUExOEIwLTE4RjUxOTAwLTE5MUMxOTUwLTE5NkQxOTcwLTE5NzQxOTgwLTE5QUIxOUMxLTE5QzcxQTAwLTFBMTYxQTIwLTFBNTQxQUE3MUIwNS0xQjMzMUI0NS0xQjRCMUI4My0xQkEwMUJBRTFCQUYxQzAwLTFDMjMxQzRELTFDNEYxQzVBLTFDN0QxQ0U5LTFDRUMxQ0VFLTFDRjExRDAwLTFEQkYxRTAwLTFGMTUxRjE4LTFGMUQxRjIwLTFGNDUxRjQ4LTFGNEQxRjUwLTFGNTcxRjU5MUY1QjFGNUQxRjVGLTFGN0QxRjgwLTFGQjQxRkI2LTFGQkMxRkJFMUZDMi0xRkM0MUZDNi0xRkNDMUZEMC0xRkQzMUZENi0xRkRCMUZFMC0xRkVDMUZGMi0xRkY0MUZGNi0xRkZDMjA3MTIwN0YyMDkwLTIwOTQyMTAyMjEwNzIxMEEtMjExMzIxMTUyMTE5LTIxMUQyMTI0MjEyNjIxMjgyMTJBLTIxMkQyMTJGLTIxMzkyMTNDLTIxM0YyMTQ1LTIxNDkyMTRFMjE4MzIxODQyQzAwLTJDMkUyQzMwLTJDNUUyQzYwLTJDRTQyQ0VCLTJDRUUyRDAwLTJEMjUyRDMwLTJENjUyRDZGMkQ4MC0yRDk2MkRBMC0yREE2MkRBOC0yREFFMkRCMC0yREI2MkRCOC0yREJFMkRDMC0yREM2MkRDOC0yRENFMkREMC0yREQ2MkREOC0yRERFMkUyRjMwMDUzMDA2MzAzMS0zMDM1MzAzQjMwM0MzMDQxLTMwOTYzMDlELTMwOUYzMEExLTMwRkEzMEZDLTMwRkYzMTA1LTMxMkQzMTMxLTMxOEUzMUEwLTMxQjczMUYwLTMxRkYzNDAwLTREQjU0RTAwLTlGQ0JBMDAwLUE0OENBNEQwLUE0RkRBNTAwLUE2MENBNjEwLUE2MUZBNjJBQTYyQkE2NDAtQTY1RkE2NjItQTY2RUE2N0YtQTY5N0E2QTAtQTZFNUE3MTctQTcxRkE3MjItQTc4OEE3OEJBNzhDQTdGQi1BODAxQTgwMy1BODA1QTgwNy1BODBBQTgwQy1BODIyQTg0MC1BODczQTg4Mi1BOEIzQThGMi1BOEY3QThGQkE5MEEtQTkyNUE5MzAtQTk0NkE5NjAtQTk3Q0E5ODQtQTlCMkE5Q0ZBQTAwLUFBMjhBQTQwLUFBNDJBQTQ0LUFBNEJBQTYwLUFBNzZBQTdBQUE4MC1BQUFGQUFCMUFBQjVBQUI2QUFCOS1BQUJEQUFDMEFBQzJBQURCLUFBRERBQkMwLUFCRTJBQzAwLUQ3QTNEN0IwLUQ3QzZEN0NCLUQ3RkJGOTAwLUZBMkRGQTMwLUZBNkRGQTcwLUZBRDlGQjAwLUZCMDZGQjEzLUZCMTdGQjFERkIxRi1GQjI4RkIyQS1GQjM2RkIzOC1GQjNDRkIzRUZCNDBGQjQxRkI0M0ZCNDRGQjQ2LUZCQjFGQkQzLUZEM0RGRDUwLUZEOEZGRDkyLUZEQzdGREYwLUZERkJGRTcwLUZFNzRGRTc2LUZFRkNGRjIxLUZGM0FGRjQxLUZGNUFGRjY2LUZGQkVGRkMyLUZGQzdGRkNBLUZGQ0ZGRkQyLUZGRDdGRkRBLUZGREMiLExsOiIwMDYxLTAwN0EwMEFBMDBCNTAwQkEwMERGLTAwRjYwMEY4LTAwRkYwMTAxMDEwMzAxMDUwMTA3MDEwOTAxMEIwMTBEMDEwRjAxMTEwMTEzMDExNTAxMTcwMTE5MDExQjAxMUQwMTFGMDEyMTAxMjMwMTI1MDEyNzAxMjkwMTJCMDEyRDAxMkYwMTMxMDEzMzAxMzUwMTM3MDEzODAxM0EwMTNDMDEzRTAxNDAwMTQyMDE0NDAxNDYwMTQ4MDE0OTAxNEIwMTREMDE0RjAxNTEwMTUzMDE1NTAxNTcwMTU5MDE1QjAxNUQwMTVGMDE2MTAxNjMwMTY1MDE2NzAxNjkwMTZCMDE2RDAxNkYwMTcxMDE3MzAxNzUwMTc3MDE3QTAxN0MwMTdFLTAxODAwMTgzMDE4NTAxODgwMThDMDE4RDAxOTIwMTk1MDE5OS0wMTlCMDE5RTAxQTEwMUEzMDFBNTAxQTgwMUFBMDFBQjAxQUQwMUIwMDFCNDAxQjYwMUI5MDFCQTAxQkQtMDFCRjAxQzYwMUM5MDFDQzAxQ0UwMUQwMDFEMjAxRDQwMUQ2MDFEODAxREEwMURDMDFERDAxREYwMUUxMDFFMzAxRTUwMUU3MDFFOTAxRUIwMUVEMDFFRjAxRjAwMUYzMDFGNTAxRjkwMUZCMDFGRDAxRkYwMjAxMDIwMzAyMDUwMjA3MDIwOTAyMEIwMjBEMDIwRjAyMTEwMjEzMDIxNTAyMTcwMjE5MDIxQjAyMUQwMjFGMDIyMTAyMjMwMjI1MDIyNzAyMjkwMjJCMDIyRDAyMkYwMjMxMDIzMy0wMjM5MDIzQzAyM0YwMjQwMDI0MjAyNDcwMjQ5MDI0QjAyNEQwMjRGLTAyOTMwMjk1LTAyQUYwMzcxMDM3MzAzNzcwMzdCLTAzN0QwMzkwMDNBQy0wM0NFMDNEMDAzRDEwM0Q1LTAzRDcwM0Q5MDNEQjAzREQwM0RGMDNFMTAzRTMwM0U1MDNFNzAzRTkwM0VCMDNFRDAzRUYtMDNGMzAzRjUwM0Y4MDNGQjAzRkMwNDMwLTA0NUYwNDYxMDQ2MzA0NjUwNDY3MDQ2OTA0NkIwNDZEMDQ2RjA0NzEwNDczMDQ3NTA0NzcwNDc5MDQ3QjA0N0QwNDdGMDQ4MTA0OEIwNDhEMDQ4RjA0OTEwNDkzMDQ5NTA0OTcwNDk5MDQ5QjA0OUQwNDlGMDRBMTA0QTMwNEE1MDRBNzA0QTkwNEFCMDRBRDA0QUYwNEIxMDRCMzA0QjUwNEI3MDRCOTA0QkIwNEJEMDRCRjA0QzIwNEM0MDRDNjA0QzgwNENBMDRDQzA0Q0UwNENGMDREMTA0RDMwNEQ1MDRENzA0RDkwNERCMDRERDA0REYwNEUxMDRFMzA0RTUwNEU3MDRFOTA0RUIwNEVEMDRFRjA0RjEwNEYzMDRGNTA0RjcwNEY5MDRGQjA0RkQwNEZGMDUwMTA1MDMwNTA1MDUwNzA1MDkwNTBCMDUwRDA1MEYwNTExMDUxMzA1MTUwNTE3MDUxOTA1MUIwNTFEMDUxRjA1MjEwNTIzMDUyNTA1NjEtMDU4NzFEMDAtMUQyQjFENjItMUQ3NzFENzktMUQ5QTFFMDExRTAzMUUwNTFFMDcxRTA5MUUwQjFFMEQxRTBGMUUxMTFFMTMxRTE1MUUxNzFFMTkxRTFCMUUxRDFFMUYxRTIxMUUyMzFFMjUxRTI3MUUyOTFFMkIxRTJEMUUyRjFFMzExRTMzMUUzNTFFMzcxRTM5MUUzQjFFM0QxRTNGMUU0MTFFNDMxRTQ1MUU0NzFFNDkxRTRCMUU0RDFFNEYxRTUxMUU1MzFFNTUxRTU3MUU1OTFFNUIxRTVEMUU1RjFFNjExRTYzMUU2NTFFNjcxRTY5MUU2QjFFNkQxRTZGMUU3MTFFNzMxRTc1MUU3NzFFNzkxRTdCMUU3RDFFN0YxRTgxMUU4MzFFODUxRTg3MUU4OTFFOEIxRThEMUU4RjFFOTExRTkzMUU5NS0xRTlEMUU5RjFFQTExRUEzMUVBNTFFQTcxRUE5MUVBQjFFQUQxRUFGMUVCMTFFQjMxRUI1MUVCNzFFQjkxRUJCMUVCRDFFQkYxRUMxMUVDMzFFQzUxRUM3MUVDOTFFQ0IxRUNEMUVDRjFFRDExRUQzMUVENTFFRDcxRUQ5MUVEQjFFREQxRURGMUVFMTFFRTMxRUU1MUVFNzFFRTkxRUVCMUVFRDFFRUYxRUYxMUVGMzFFRjUxRUY3MUVGOTFFRkIxRUZEMUVGRi0xRjA3MUYxMC0xRjE1MUYyMC0xRjI3MUYzMC0xRjM3MUY0MC0xRjQ1MUY1MC0xRjU3MUY2MC0xRjY3MUY3MC0xRjdEMUY4MC0xRjg3MUY5MC0xRjk3MUZBMC0xRkE3MUZCMC0xRkI0MUZCNjFGQjcxRkJFMUZDMi0xRkM0MUZDNjFGQzcxRkQwLTFGRDMxRkQ2MUZENzFGRTAtMUZFNzFGRjItMUZGNDFGRjYxRkY3MjEwQTIxMEUyMTBGMjExMzIxMkYyMTM0MjEzOTIxM0MyMTNEMjE0Ni0yMTQ5MjE0RTIxODQyQzMwLTJDNUUyQzYxMkM2NTJDNjYyQzY4MkM2QTJDNkMyQzcxMkM3MzJDNzQyQzc2LTJDN0MyQzgxMkM4MzJDODUyQzg3MkM4OTJDOEIyQzhEMkM4RjJDOTEyQzkzMkM5NTJDOTcyQzk5MkM5QjJDOUQyQzlGMkNBMTJDQTMyQ0E1MkNBNzJDQTkyQ0FCMkNBRDJDQUYyQ0IxMkNCMzJDQjUyQ0I3MkNCOTJDQkIyQ0JEMkNCRjJDQzEyQ0MzMkNDNTJDQzcyQ0M5MkNDQjJDQ0QyQ0NGMkNEMTJDRDMyQ0Q1MkNENzJDRDkyQ0RCMkNERDJDREYyQ0UxMkNFMzJDRTQyQ0VDMkNFRTJEMDAtMkQyNUE2NDFBNjQzQTY0NUE2NDdBNjQ5QTY0QkE2NERBNjRGQTY1MUE2NTNBNjU1QTY1N0E2NTlBNjVCQTY1REE2NUZBNjYzQTY2NUE2NjdBNjY5QTY2QkE2NkRBNjgxQTY4M0E2ODVBNjg3QTY4OUE2OEJBNjhEQTY4RkE2OTFBNjkzQTY5NUE2OTdBNzIzQTcyNUE3MjdBNzI5QTcyQkE3MkRBNzJGLUE3MzFBNzMzQTczNUE3MzdBNzM5QTczQkE3M0RBNzNGQTc0MUE3NDNBNzQ1QTc0N0E3NDlBNzRCQTc0REE3NEZBNzUxQTc1M0E3NTVBNzU3QTc1OUE3NUJBNzVEQTc1RkE3NjFBNzYzQTc2NUE3NjdBNzY5QTc2QkE3NkRBNzZGQTc3MS1BNzc4QTc3QUE3N0NBNzdGQTc4MUE3ODNBNzg1QTc4N0E3OENGQjAwLUZCMDZGQjEzLUZCMTdGRjQxLUZGNUEiLEx1OiIwMDQxLTAwNUEwMEMwLTAwRDYwMEQ4LTAwREUwMTAwMDEwMjAxMDQwMTA2MDEwODAxMEEwMTBDMDEwRTAxMTAwMTEyMDExNDAxMTYwMTE4MDExQTAxMUMwMTFFMDEyMDAxMjIwMTI0MDEyNjAxMjgwMTJBMDEyQzAxMkUwMTMwMDEzMjAxMzQwMTM2MDEzOTAxM0IwMTNEMDEzRjAxNDEwMTQzMDE0NTAxNDcwMTRBMDE0QzAxNEUwMTUwMDE1MjAxNTQwMTU2MDE1ODAxNUEwMTVDMDE1RTAxNjAwMTYyMDE2NDAxNjYwMTY4MDE2QTAxNkMwMTZFMDE3MDAxNzIwMTc0MDE3NjAxNzgwMTc5MDE3QjAxN0QwMTgxMDE4MjAxODQwMTg2MDE4NzAxODktMDE4QjAxOEUtMDE5MTAxOTMwMTk0MDE5Ni0wMTk4MDE5QzAxOUQwMTlGMDFBMDAxQTIwMUE0MDFBNjAxQTcwMUE5MDFBQzAxQUUwMUFGMDFCMS0wMUIzMDFCNTAxQjcwMUI4MDFCQzAxQzQwMUM3MDFDQTAxQ0QwMUNGMDFEMTAxRDMwMUQ1MDFENzAxRDkwMURCMDFERTAxRTAwMUUyMDFFNDAxRTYwMUU4MDFFQTAxRUMwMUVFMDFGMTAxRjQwMUY2LTAxRjgwMUZBMDFGQzAxRkUwMjAwMDIwMjAyMDQwMjA2MDIwODAyMEEwMjBDMDIwRTAyMTAwMjEyMDIxNDAyMTYwMjE4MDIxQTAyMUMwMjFFMDIyMDAyMjIwMjI0MDIyNjAyMjgwMjJBMDIyQzAyMkUwMjMwMDIzMjAyM0EwMjNCMDIzRDAyM0UwMjQxMDI0My0wMjQ2MDI0ODAyNEEwMjRDMDI0RTAzNzAwMzcyMDM3NjAzODYwMzg4LTAzOEEwMzhDMDM4RTAzOEYwMzkxLTAzQTEwM0EzLTAzQUIwM0NGMDNEMi0wM0Q0MDNEODAzREEwM0RDMDNERTAzRTAwM0UyMDNFNDAzRTYwM0U4MDNFQTAzRUMwM0VFMDNGNDAzRjcwM0Y5MDNGQTAzRkQtMDQyRjA0NjAwNDYyMDQ2NDA0NjYwNDY4MDQ2QTA0NkMwNDZFMDQ3MDA0NzIwNDc0MDQ3NjA0NzgwNDdBMDQ3QzA0N0UwNDgwMDQ4QTA0OEMwNDhFMDQ5MDA0OTIwNDk0MDQ5NjA0OTgwNDlBMDQ5QzA0OUUwNEEwMDRBMjA0QTQwNEE2MDRBODA0QUEwNEFDMDRBRTA0QjAwNEIyMDRCNDA0QjYwNEI4MDRCQTA0QkMwNEJFMDRDMDA0QzEwNEMzMDRDNTA0QzcwNEM5MDRDQjA0Q0QwNEQwMDREMjA0RDQwNEQ2MDREODA0REEwNERDMDRERTA0RTAwNEUyMDRFNDA0RTYwNEU4MDRFQTA0RUMwNEVFMDRGMDA0RjIwNEY0MDRGNjA0RjgwNEZBMDRGQzA0RkUwNTAwMDUwMjA1MDQwNTA2MDUwODA1MEEwNTBDMDUwRTA1MTAwNTEyMDUxNDA1MTYwNTE4MDUxQTA1MUMwNTFFMDUyMDA1MjIwNTI0MDUzMS0wNTU2MTBBMC0xMEM1MUUwMDFFMDIxRTA0MUUwNjFFMDgxRTBBMUUwQzFFMEUxRTEwMUUxMjFFMTQxRTE2MUUxODFFMUExRTFDMUUxRTFFMjAxRTIyMUUyNDFFMjYxRTI4MUUyQTFFMkMxRTJFMUUzMDFFMzIxRTM0MUUzNjFFMzgxRTNBMUUzQzFFM0UxRTQwMUU0MjFFNDQxRTQ2MUU0ODFFNEExRTRDMUU0RTFFNTAxRTUyMUU1NDFFNTYxRTU4MUU1QTFFNUMxRTVFMUU2MDFFNjIxRTY0MUU2NjFFNjgxRTZBMUU2QzFFNkUxRTcwMUU3MjFFNzQxRTc2MUU3ODFFN0ExRTdDMUU3RTFFODAxRTgyMUU4NDFFODYxRTg4MUU4QTFFOEMxRThFMUU5MDFFOTIxRTk0MUU5RTFFQTAxRUEyMUVBNDFFQTYxRUE4MUVBQTFFQUMxRUFFMUVCMDFFQjIxRUI0MUVCNjFFQjgxRUJBMUVCQzFFQkUxRUMwMUVDMjFFQzQxRUM2MUVDODFFQ0ExRUNDMUVDRTFFRDAxRUQyMUVENDFFRDYxRUQ4MUVEQTFFREMxRURFMUVFMDFFRTIxRUU0MUVFNjFFRTgxRUVBMUVFQzFFRUUxRUYwMUVGMjFFRjQxRUY2MUVGODFFRkExRUZDMUVGRTFGMDgtMUYwRjFGMTgtMUYxRDFGMjgtMUYyRjFGMzgtMUYzRjFGNDgtMUY0RDFGNTkxRjVCMUY1RDFGNUYxRjY4LTFGNkYxRkI4LTFGQkIxRkM4LTFGQ0IxRkQ4LTFGREIxRkU4LTFGRUMxRkY4LTFGRkIyMTAyMjEwNzIxMEItMjEwRDIxMTAtMjExMjIxMTUyMTE5LTIxMUQyMTI0MjEyNjIxMjgyMTJBLTIxMkQyMTMwLTIxMzMyMTNFMjEzRjIxNDUyMTgzMkMwMC0yQzJFMkM2MDJDNjItMkM2NDJDNjcyQzY5MkM2QjJDNkQtMkM3MDJDNzIyQzc1MkM3RS0yQzgwMkM4MjJDODQyQzg2MkM4ODJDOEEyQzhDMkM4RTJDOTAyQzkyMkM5NDJDOTYyQzk4MkM5QTJDOUMyQzlFMkNBMDJDQTIyQ0E0MkNBNjJDQTgyQ0FBMkNBQzJDQUUyQ0IwMkNCMjJDQjQyQ0I2MkNCODJDQkEyQ0JDMkNCRTJDQzAyQ0MyMkNDNDJDQzYyQ0M4MkNDQTJDQ0MyQ0NFMkNEMDJDRDIyQ0Q0MkNENjJDRDgyQ0RBMkNEQzJDREUyQ0UwMkNFMjJDRUIyQ0VEQTY0MEE2NDJBNjQ0QTY0NkE2NDhBNjRBQTY0Q0E2NEVBNjUwQTY1MkE2NTRBNjU2QTY1OEE2NUFBNjVDQTY1RUE2NjJBNjY0QTY2NkE2NjhBNjZBQTY2Q0E2ODBBNjgyQTY4NEE2ODZBNjg4QTY4QUE2OENBNjhFQTY5MEE2OTJBNjk0QTY5NkE3MjJBNzI0QTcyNkE3MjhBNzJBQTcyQ0E3MkVBNzMyQTczNEE3MzZBNzM4QTczQUE3M0NBNzNFQTc0MEE3NDJBNzQ0QTc0NkE3NDhBNzRBQTc0Q0E3NEVBNzUwQTc1MkE3NTRBNzU2QTc1OEE3NUFBNzVDQTc1RUE3NjBBNzYyQTc2NEE3NjZBNzY4QTc2QUE3NkNBNzZFQTc3OUE3N0JBNzdEQTc3RUE3ODBBNzgyQTc4NEE3ODZBNzhCRkYyMS1GRjNBIixMdDoiMDFDNTAxQzgwMUNCMDFGMjFGODgtMUY4RjFGOTgtMUY5RjFGQTgtMUZBRjFGQkMxRkNDMUZGQyIsTG06IjAyQjAtMDJDMTAyQzYtMDJEMTAyRTAtMDJFNDAyRUMwMkVFMDM3NDAzN0EwNTU5MDY0MDA2RTUwNkU2MDdGNDA3RjUwN0ZBMDgxQTA4MjQwODI4MDk3MTBFNDYwRUM2MTBGQzE3RDcxODQzMUFBNzFDNzgtMUM3RDFEMkMtMUQ2MTFENzgxRDlCLTFEQkYyMDcxMjA3RjIwOTAtMjA5NDJDN0QyRDZGMkUyRjMwMDUzMDMxLTMwMzUzMDNCMzA5RDMwOUUzMEZDLTMwRkVBMDE1QTRGOC1BNEZEQTYwQ0E2N0ZBNzE3LUE3MUZBNzcwQTc4OEE5Q0ZBQTcwQUFEREZGNzBGRjlFRkY5RiIsTG86IjAxQkIwMUMwLTAxQzMwMjk0MDVEMC0wNUVBMDVGMC0wNUYyMDYyMS0wNjNGMDY0MS0wNjRBMDY2RTA2NkYwNjcxLTA2RDMwNkQ1MDZFRTA2RUYwNkZBLTA2RkMwNkZGMDcxMDA3MTItMDcyRjA3NEQtMDdBNTA3QjEwN0NBLTA3RUEwODAwLTA4MTUwOTA0LTA5MzkwOTNEMDk1MDA5NTgtMDk2MTA5NzIwOTc5LTA5N0YwOTg1LTA5OEMwOThGMDk5MDA5OTMtMDlBODA5QUEtMDlCMDA5QjIwOUI2LTA5QjkwOUJEMDlDRTA5REMwOUREMDlERi0wOUUxMDlGMDA5RjEwQTA1LTBBMEEwQTBGMEExMDBBMTMtMEEyODBBMkEtMEEzMDBBMzIwQTMzMEEzNTBBMzYwQTM4MEEzOTBBNTktMEE1QzBBNUUwQTcyLTBBNzQwQTg1LTBBOEQwQThGLTBBOTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIyMEFCMzBBQjUtMEFCOTBBQkQwQUQwMEFFMDBBRTEwQjA1LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBCMkEtMEIzMDBCMzIwQjMzMEIzNS0wQjM5MEIzRDBCNUMwQjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1LTBCOEEwQjhFLTBCOTAwQjkyLTBCOTUwQjk5MEI5QTBCOUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0wQkFBMEJBRS0wQkI5MEJEMDBDMDUtMEMwQzBDMEUtMEMxMDBDMTItMEMyODBDMkEtMEMzMzBDMzUtMEMzOTBDM0QwQzU4MEM1OTBDNjAwQzYxMEM4NS0wQzhDMEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0wQ0IzMENCNS0wQ0I5MENCRDBDREUwQ0UwMENFMTBEMDUtMEQwQzBEMEUtMEQxMDBEMTItMEQyODBEMkEtMEQzOTBEM0QwRDYwMEQ2MTBEN0EtMEQ3RjBEODUtMEQ5NjBEOUEtMERCMTBEQjMtMERCQjBEQkQwREMwLTBEQzYwRTAxLTBFMzAwRTMyMEUzMzBFNDAtMEU0NTBFODEwRTgyMEU4NDBFODcwRTg4MEU4QTBFOEQwRTk0LTBFOTcwRTk5LTBFOUYwRUExLTBFQTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0wRUIwMEVCMjBFQjMwRUJEMEVDMC0wRUM0MEVEQzBFREQwRjAwMEY0MC0wRjQ3MEY0OS0wRjZDMEY4OC0wRjhCMTAwMC0xMDJBMTAzRjEwNTAtMTA1NTEwNUEtMTA1RDEwNjExMDY1MTA2NjEwNkUtMTA3MDEwNzUtMTA4MTEwOEUxMEQwLTEwRkExMTAwLTEyNDgxMjRBLTEyNEQxMjUwLTEyNTYxMjU4MTI1QS0xMjVEMTI2MC0xMjg4MTI4QS0xMjhEMTI5MC0xMkIwMTJCMi0xMkI1MTJCOC0xMkJFMTJDMDEyQzItMTJDNTEyQzgtMTJENjEyRDgtMTMxMDEzMTItMTMxNTEzMTgtMTM1QTEzODAtMTM4RjEzQTAtMTNGNDE0MDEtMTY2QzE2NkYtMTY3RjE2ODEtMTY5QTE2QTAtMTZFQTE3MDAtMTcwQzE3MEUtMTcxMTE3MjAtMTczMTE3NDAtMTc1MTE3NjAtMTc2QzE3NkUtMTc3MDE3ODAtMTdCMzE3REMxODIwLTE4NDIxODQ0LTE4NzcxODgwLTE4QTgxOEFBMThCMC0xOEY1MTkwMC0xOTFDMTk1MC0xOTZEMTk3MC0xOTc0MTk4MC0xOUFCMTlDMS0xOUM3MUEwMC0xQTE2MUEyMC0xQTU0MUIwNS0xQjMzMUI0NS0xQjRCMUI4My0xQkEwMUJBRTFCQUYxQzAwLTFDMjMxQzRELTFDNEYxQzVBLTFDNzcxQ0U5LTFDRUMxQ0VFLTFDRjEyMTM1LTIxMzgyRDMwLTJENjUyRDgwLTJEOTYyREEwLTJEQTYyREE4LTJEQUUyREIwLTJEQjYyREI4LTJEQkUyREMwLTJEQzYyREM4LTJEQ0UyREQwLTJERDYyREQ4LTJEREUzMDA2MzAzQzMwNDEtMzA5NjMwOUYzMEExLTMwRkEzMEZGMzEwNS0zMTJEMzEzMS0zMThFMzFBMC0zMUI3MzFGMC0zMUZGMzQwMC00REI1NEUwMC05RkNCQTAwMC1BMDE0QTAxNi1BNDhDQTREMC1BNEY3QTUwMC1BNjBCQTYxMC1BNjFGQTYyQUE2MkJBNjZFQTZBMC1BNkU1QTdGQi1BODAxQTgwMy1BODA1QTgwNy1BODBBQTgwQy1BODIyQTg0MC1BODczQTg4Mi1BOEIzQThGMi1BOEY3QThGQkE5MEEtQTkyNUE5MzAtQTk0NkE5NjAtQTk3Q0E5ODQtQTlCMkFBMDAtQUEyOEFBNDAtQUE0MkFBNDQtQUE0QkFBNjAtQUE2RkFBNzEtQUE3NkFBN0FBQTgwLUFBQUZBQUIxQUFCNUFBQjZBQUI5LUFBQkRBQUMwQUFDMkFBREJBQURDQUJDMC1BQkUyQUMwMC1EN0EzRDdCMC1EN0M2RDdDQi1EN0ZCRjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5RkIxREZCMUYtRkIyOEZCMkEtRkIzNkZCMzgtRkIzQ0ZCM0VGQjQwRkI0MUZCNDNGQjQ0RkI0Ni1GQkIxRkJEMy1GRDNERkQ1MC1GRDhGRkQ5Mi1GREM3RkRGMC1GREZCRkU3MC1GRTc0RkU3Ni1GRUZDRkY2Ni1GRjZGRkY3MS1GRjlERkZBMC1GRkJFRkZDMi1GRkM3RkZDQS1GRkNGRkZEMi1GRkQ3RkZEQS1GRkRDIixNOiIwMzAwLTAzNkYwNDgzLTA0ODkwNTkxLTA1QkQwNUJGMDVDMTA1QzIwNUM0MDVDNTA1QzcwNjEwLTA2MUEwNjRCLTA2NUUwNjcwMDZENi0wNkRDMDZERS0wNkU0MDZFNzA2RTgwNkVBLTA2RUQwNzExMDczMC0wNzRBMDdBNi0wN0IwMDdFQi0wN0YzMDgxNi0wODE5MDgxQi0wODIzMDgyNS0wODI3MDgyOS0wODJEMDkwMC0wOTAzMDkzQzA5M0UtMDk0RTA5NTEtMDk1NTA5NjIwOTYzMDk4MS0wOTgzMDlCQzA5QkUtMDlDNDA5QzcwOUM4MDlDQi0wOUNEMDlENzA5RTIwOUUzMEEwMS0wQTAzMEEzQzBBM0UtMEE0MjBBNDcwQTQ4MEE0Qi0wQTREMEE1MTBBNzAwQTcxMEE3NTBBODEtMEE4MzBBQkMwQUJFLTBBQzUwQUM3LTBBQzkwQUNCLTBBQ0QwQUUyMEFFMzBCMDEtMEIwMzBCM0MwQjNFLTBCNDQwQjQ3MEI0ODBCNEItMEI0RDBCNTYwQjU3MEI2MjBCNjMwQjgyMEJCRS0wQkMyMEJDNi0wQkM4MEJDQS0wQkNEMEJENzBDMDEtMEMwMzBDM0UtMEM0NDBDNDYtMEM0ODBDNEEtMEM0RDBDNTUwQzU2MEM2MjBDNjMwQzgyMEM4MzBDQkMwQ0JFLTBDQzQwQ0M2LTBDQzgwQ0NBLTBDQ0QwQ0Q1MENENjBDRTIwQ0UzMEQwMjBEMDMwRDNFLTBENDQwRDQ2LTBENDgwRDRBLTBENEQwRDU3MEQ2MjBENjMwRDgyMEQ4MzBEQ0EwRENGLTBERDQwREQ2MEREOC0wRERGMERGMjBERjMwRTMxMEUzNC0wRTNBMEU0Ny0wRTRFMEVCMTBFQjQtMEVCOTBFQkIwRUJDMEVDOC0wRUNEMEYxODBGMTkwRjM1MEYzNzBGMzkwRjNFMEYzRjBGNzEtMEY4NDBGODYwRjg3MEY5MC0wRjk3MEY5OS0wRkJDMEZDNjEwMkItMTAzRTEwNTYtMTA1OTEwNUUtMTA2MDEwNjItMTA2NDEwNjctMTA2RDEwNzEtMTA3NDEwODItMTA4RDEwOEYxMDlBLTEwOUQxMzVGMTcxMi0xNzE0MTczMi0xNzM0MTc1MjE3NTMxNzcyMTc3MzE3QjYtMTdEMzE3REQxODBCLTE4MEQxOEE5MTkyMC0xOTJCMTkzMC0xOTNCMTlCMC0xOUMwMTlDODE5QzkxQTE3LTFBMUIxQTU1LTFBNUUxQTYwLTFBN0MxQTdGMUIwMC0xQjA0MUIzNC0xQjQ0MUI2Qi0xQjczMUI4MC0xQjgyMUJBMS0xQkFBMUMyNC0xQzM3MUNEMC0xQ0QyMUNENC0xQ0U4MUNFRDFDRjIxREMwLTFERTYxREZELTFERkYyMEQwLTIwRjAyQ0VGLTJDRjEyREUwLTJERkYzMDJBLTMwMkYzMDk5MzA5QUE2NkYtQTY3MkE2N0NBNjdEQTZGMEE2RjFBODAyQTgwNkE4MEJBODIzLUE4MjdBODgwQTg4MUE4QjQtQThDNEE4RTAtQThGMUE5MjYtQTkyREE5NDctQTk1M0E5ODAtQTk4M0E5QjMtQTlDMEFBMjktQUEzNkFBNDNBQTRDQUE0REFBN0JBQUIwQUFCMi1BQUI0QUFCN0FBQjhBQUJFQUFCRkFBQzFBQkUzLUFCRUFBQkVDQUJFREZCMUVGRTAwLUZFMEZGRTIwLUZFMjYiLE1uOiIwMzAwLTAzNkYwNDgzLTA0ODcwNTkxLTA1QkQwNUJGMDVDMTA1QzIwNUM0MDVDNTA1QzcwNjEwLTA2MUEwNjRCLTA2NUUwNjcwMDZENi0wNkRDMDZERi0wNkU0MDZFNzA2RTgwNkVBLTA2RUQwNzExMDczMC0wNzRBMDdBNi0wN0IwMDdFQi0wN0YzMDgxNi0wODE5MDgxQi0wODIzMDgyNS0wODI3MDgyOS0wODJEMDkwMC0wOTAyMDkzQzA5NDEtMDk0ODA5NEQwOTUxLTA5NTUwOTYyMDk2MzA5ODEwOUJDMDlDMS0wOUM0MDlDRDA5RTIwOUUzMEEwMTBBMDIwQTNDMEE0MTBBNDIwQTQ3MEE0ODBBNEItMEE0RDBBNTEwQTcwMEE3MTBBNzUwQTgxMEE4MjBBQkMwQUMxLTBBQzUwQUM3MEFDODBBQ0QwQUUyMEFFMzBCMDEwQjNDMEIzRjBCNDEtMEI0NDBCNEQwQjU2MEI2MjBCNjMwQjgyMEJDMDBCQ0QwQzNFLTBDNDAwQzQ2LTBDNDgwQzRBLTBDNEQwQzU1MEM1NjBDNjIwQzYzMENCQzBDQkYwQ0M2MENDQzBDQ0QwQ0UyMENFMzBENDEtMEQ0NDBENEQwRDYyMEQ2MzBEQ0EwREQyLTBERDQwREQ2MEUzMTBFMzQtMEUzQTBFNDctMEU0RTBFQjEwRUI0LTBFQjkwRUJCMEVCQzBFQzgtMEVDRDBGMTgwRjE5MEYzNTBGMzcwRjM5MEY3MS0wRjdFMEY4MC0wRjg0MEY4NjBGODcwRjkwLTBGOTcwRjk5LTBGQkMwRkM2MTAyRC0xMDMwMTAzMi0xMDM3MTAzOTEwM0ExMDNEMTAzRTEwNTgxMDU5MTA1RS0xMDYwMTA3MS0xMDc0MTA4MjEwODUxMDg2MTA4RDEwOUQxMzVGMTcxMi0xNzE0MTczMi0xNzM0MTc1MjE3NTMxNzcyMTc3MzE3QjctMTdCRDE3QzYxN0M5LTE3RDMxN0REMTgwQi0xODBEMThBOTE5MjAtMTkyMjE5MjcxOTI4MTkzMjE5MzktMTkzQjFBMTcxQTE4MUE1NjFBNTgtMUE1RTFBNjAxQTYyMUE2NS0xQTZDMUE3My0xQTdDMUE3RjFCMDAtMUIwMzFCMzQxQjM2LTFCM0ExQjNDMUI0MjFCNkItMUI3MzFCODAxQjgxMUJBMi0xQkE1MUJBODFCQTkxQzJDLTFDMzMxQzM2MUMzNzFDRDAtMUNEMjFDRDQtMUNFMDFDRTItMUNFODFDRUQxREMwLTFERTYxREZELTFERkYyMEQwLTIwREMyMEUxMjBFNS0yMEYwMkNFRi0yQ0YxMkRFMC0yREZGMzAyQS0zMDJGMzA5OTMwOUFBNjZGQTY3Q0E2N0RBNkYwQTZGMUE4MDJBODA2QTgwQkE4MjVBODI2QThDNEE4RTAtQThGMUE5MjYtQTkyREE5NDctQTk1MUE5ODAtQTk4MkE5QjNBOUI2LUE5QjlBOUJDQUEyOS1BQTJFQUEzMUFBMzJBQTM1QUEzNkFBNDNBQTRDQUFCMEFBQjItQUFCNEFBQjdBQUI4QUFCRUFBQkZBQUMxQUJFNUFCRThBQkVERkIxRUZFMDAtRkUwRkZFMjAtRkUyNiIsTWM6IjA5MDMwOTNFLTA5NDAwOTQ5LTA5NEMwOTRFMDk4MjA5ODMwOUJFLTA5QzAwOUM3MDlDODA5Q0IwOUNDMDlENzBBMDMwQTNFLTBBNDAwQTgzMEFCRS0wQUMwMEFDOTBBQ0IwQUNDMEIwMjBCMDMwQjNFMEI0MDBCNDcwQjQ4MEI0QjBCNEMwQjU3MEJCRTBCQkYwQkMxMEJDMjBCQzYtMEJDODBCQ0EtMEJDQzBCRDcwQzAxLTBDMDMwQzQxLTBDNDQwQzgyMEM4MzBDQkUwQ0MwLTBDQzQwQ0M3MENDODBDQ0EwQ0NCMENENTBDRDYwRDAyMEQwMzBEM0UtMEQ0MDBENDYtMEQ0ODBENEEtMEQ0QzBENTcwRDgyMEQ4MzBEQ0YtMEREMTBERDgtMERERjBERjIwREYzMEYzRTBGM0YwRjdGMTAyQjEwMkMxMDMxMTAzODEwM0IxMDNDMTA1NjEwNTcxMDYyLTEwNjQxMDY3LTEwNkQxMDgzMTA4NDEwODctMTA4QzEwOEYxMDlBLTEwOUMxN0I2MTdCRS0xN0M1MTdDNzE3QzgxOTIzLTE5MjYxOTI5LTE5MkIxOTMwMTkzMTE5MzMtMTkzODE5QjAtMTlDMDE5QzgxOUM5MUExOS0xQTFCMUE1NTFBNTcxQTYxMUE2MzFBNjQxQTZELTFBNzIxQjA0MUIzNTFCM0IxQjNELTFCNDExQjQzMUI0NDFCODIxQkExMUJBNjFCQTcxQkFBMUMyNC0xQzJCMUMzNDFDMzUxQ0UxMUNGMkE4MjNBODI0QTgyN0E4ODBBODgxQThCNC1BOEMzQTk1MkE5NTNBOTgzQTlCNEE5QjVBOUJBQTlCQkE5QkQtQTlDMEFBMkZBQTMwQUEzM0FBMzRBQTREQUE3QkFCRTNBQkU0QUJFNkFCRTdBQkU5QUJFQUFCRUMiLE1lOiIwNDg4MDQ4OTA2REUyMERELTIwRTAyMEUyLTIwRTRBNjcwLUE2NzIiLE46IjAwMzAtMDAzOTAwQjIwMEIzMDBCOTAwQkMtMDBCRTA2NjAtMDY2OTA2RjAtMDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjA5RjQtMDlGOTBBNjYtMEE2RjBBRTYtMEFFRjBCNjYtMEI2RjBCRTYtMEJGMjBDNjYtMEM2RjBDNzgtMEM3RTBDRTYtMENFRjBENjYtMEQ3NTBFNTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYzMzEwNDAtMTA0OTEwOTAtMTA5OTEzNjktMTM3QzE2RUUtMTZGMDE3RTAtMTdFOTE3RjAtMTdGOTE4MTAtMTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAtMUE4OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJCOTFDNDAtMUM0OTFDNTAtMUM1OTIwNzAyMDc0LTIwNzkyMDgwLTIwODkyMTUwLTIxODIyMTg1LTIxODkyNDYwLTI0OUIyNEVBLTI0RkYyNzc2LTI3OTMyQ0ZEMzAwNzMwMjEtMzAyOTMwMzgtMzAzQTMxOTItMzE5NTMyMjAtMzIyOTMyNTEtMzI1RjMyODAtMzI4OTMyQjEtMzJCRkE2MjAtQTYyOUE2RTYtQTZFRkE4MzAtQTgzNUE4RDAtQThEOUE5MDAtQTkwOUE5RDAtQTlEOUFBNTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOSIsTmQ6IjAwMzAtMDAzOTA2NjAtMDY2OTA2RjAtMDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjBBNjYtMEE2RjBBRTYtMEFFRjBCNjYtMEI2RjBCRTYtMEJFRjBDNjYtMEM2RjBDRTYtMENFRjBENjYtMEQ2RjBFNTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYyOTEwNDAtMTA0OTEwOTAtMTA5OTE3RTAtMTdFOTE4MTAtMTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAtMUE4OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJCOTFDNDAtMUM0OTFDNTAtMUM1OUE2MjAtQTYyOUE4RDAtQThEOUE5MDAtQTkwOUE5RDAtQTlEOUFBNTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOSIsTmw6IjE2RUUtMTZGMDIxNjAtMjE4MjIxODUtMjE4ODMwMDczMDIxLTMwMjkzMDM4LTMwM0FBNkU2LUE2RUYiLE5vOiIwMEIyMDBCMzAwQjkwMEJDLTAwQkUwOUY0LTA5RjkwQkYwLTBCRjIwQzc4LTBDN0UwRDcwLTBENzUwRjJBLTBGMzMxMzY5LTEzN0MxN0YwLTE3RjkyMDcwMjA3NC0yMDc5MjA4MC0yMDg5MjE1MC0yMTVGMjE4OTI0NjAtMjQ5QjI0RUEtMjRGRjI3NzYtMjc5MzJDRkQzMTkyLTMxOTUzMjIwLTMyMjkzMjUxLTMyNUYzMjgwLTMyODkzMkIxLTMyQkZBODMwLUE4MzUiLFA6IjAwMjEtMDAyMzAwMjUtMDAyQTAwMkMtMDAyRjAwM0EwMDNCMDAzRjAwNDAwMDVCLTAwNUQwMDVGMDA3QjAwN0QwMEExMDBBQjAwQjcwMEJCMDBCRjAzN0UwMzg3MDU1QS0wNTVGMDU4OTA1OEEwNUJFMDVDMDA1QzMwNUM2MDVGMzA1RjQwNjA5MDYwQTA2MEMwNjBEMDYxQjA2MUUwNjFGMDY2QS0wNjZEMDZENDA3MDAtMDcwRDA3RjctMDdGOTA4MzAtMDgzRTA5NjQwOTY1MDk3MDBERjQwRTRGMEU1QTBFNUIwRjA0LTBGMTIwRjNBLTBGM0QwRjg1MEZEMC0wRkQ0MTA0QS0xMDRGMTBGQjEzNjEtMTM2ODE0MDAxNjZEMTY2RTE2OUIxNjlDMTZFQi0xNkVEMTczNTE3MzYxN0Q0LTE3RDYxN0Q4LTE3REExODAwLTE4MEExOTQ0MTk0NTE5REUxOURGMUExRTFBMUYxQUEwLTFBQTYxQUE4LTFBQUQxQjVBLTFCNjAxQzNCLTFDM0YxQzdFMUM3RjFDRDMyMDEwLTIwMjcyMDMwLTIwNDMyMDQ1LTIwNTEyMDUzLTIwNUUyMDdEMjA3RTIwOEQyMDhFMjMyOTIzMkEyNzY4LTI3NzUyN0M1MjdDNjI3RTYtMjdFRjI5ODMtMjk5ODI5RDgtMjlEQjI5RkMyOUZEMkNGOS0yQ0ZDMkNGRTJDRkYyRTAwLTJFMkUyRTMwMkUzMTMwMDEtMzAwMzMwMDgtMzAxMTMwMTQtMzAxRjMwMzAzMDNEMzBBMDMwRkJBNEZFQTRGRkE2MEQtQTYwRkE2NzNBNjdFQTZGMi1BNkY3QTg3NC1BODc3QThDRUE4Q0ZBOEY4LUE4RkFBOTJFQTkyRkE5NUZBOUMxLUE5Q0RBOURFQTlERkFBNUMtQUE1RkFBREVBQURGQUJFQkZEM0VGRDNGRkUxMC1GRTE5RkUzMC1GRTUyRkU1NC1GRTYxRkU2M0ZFNjhGRTZBRkU2QkZGMDEtRkYwM0ZGMDUtRkYwQUZGMEMtRkYwRkZGMUFGRjFCRkYxRkZGMjBGRjNCLUZGM0RGRjNGRkY1QkZGNURGRjVGLUZGNjUiLFBkOiIwMDJEMDU4QTA1QkUxNDAwMTgwNjIwMTAtMjAxNTJFMTcyRTFBMzAxQzMwMzAzMEEwRkUzMUZFMzJGRTU4RkU2M0ZGMEQiLFBzOiIwMDI4MDA1QjAwN0IwRjNBMEYzQzE2OUIyMDFBMjAxRTIwNDUyMDdEMjA4RDIzMjkyNzY4Mjc2QTI3NkMyNzZFMjc3MDI3NzIyNzc0MjdDNTI3RTYyN0U4MjdFQTI3RUMyN0VFMjk4MzI5ODUyOTg3Mjk4OTI5OEIyOThEMjk4RjI5OTEyOTkzMjk5NTI5OTcyOUQ4MjlEQTI5RkMyRTIyMkUyNDJFMjYyRTI4MzAwODMwMEEzMDBDMzAwRTMwMTAzMDE0MzAxNjMwMTgzMDFBMzAxREZEM0VGRTE3RkUzNUZFMzdGRTM5RkUzQkZFM0RGRTNGRkU0MUZFNDNGRTQ3RkU1OUZFNUJGRTVERkYwOEZGM0JGRjVCRkY1RkZGNjIiLFBlOiIwMDI5MDA1RDAwN0QwRjNCMEYzRDE2OUMyMDQ2MjA3RTIwOEUyMzJBMjc2OTI3NkIyNzZEMjc2RjI3NzEyNzczMjc3NTI3QzYyN0U3MjdFOTI3RUIyN0VEMjdFRjI5ODQyOTg2Mjk4ODI5OEEyOThDMjk4RTI5OTAyOTkyMjk5NDI5OTYyOTk4MjlEOTI5REIyOUZEMkUyMzJFMjUyRTI3MkUyOTMwMDkzMDBCMzAwRDMwMEYzMDExMzAxNTMwMTczMDE5MzAxQjMwMUUzMDFGRkQzRkZFMThGRTM2RkUzOEZFM0FGRTNDRkUzRUZFNDBGRTQyRkU0NEZFNDhGRTVBRkU1Q0ZFNUVGRjA5RkYzREZGNURGRjYwRkY2MyIsUGk6IjAwQUIyMDE4MjAxQjIwMUMyMDFGMjAzOTJFMDIyRTA0MkUwOTJFMEMyRTFDMkUyMCIsUGY6IjAwQkIyMDE5MjAxRDIwM0EyRTAzMkUwNTJFMEEyRTBEMkUxRDJFMjEiLFBjOiIwMDVGMjAzRjIwNDAyMDU0RkUzM0ZFMzRGRTRELUZFNEZGRjNGIixQbzoiMDAyMS0wMDIzMDAyNS0wMDI3MDAyQTAwMkMwMDJFMDAyRjAwM0EwMDNCMDAzRjAwNDAwMDVDMDBBMTAwQjcwMEJGMDM3RTAzODcwNTVBLTA1NUYwNTg5MDVDMDA1QzMwNUM2MDVGMzA1RjQwNjA5MDYwQTA2MEMwNjBEMDYxQjA2MUUwNjFGMDY2QS0wNjZEMDZENDA3MDAtMDcwRDA3RjctMDdGOTA4MzAtMDgzRTA5NjQwOTY1MDk3MDBERjQwRTRGMEU1QTBFNUIwRjA0LTBGMTIwRjg1MEZEMC0wRkQ0MTA0QS0xMDRGMTBGQjEzNjEtMTM2ODE2NkQxNjZFMTZFQi0xNkVEMTczNTE3MzYxN0Q0LTE3RDYxN0Q4LTE3REExODAwLTE4MDUxODA3LTE4MEExOTQ0MTk0NTE5REUxOURGMUExRTFBMUYxQUEwLTFBQTYxQUE4LTFBQUQxQjVBLTFCNjAxQzNCLTFDM0YxQzdFMUM3RjFDRDMyMDE2MjAxNzIwMjAtMjAyNzIwMzAtMjAzODIwM0ItMjAzRTIwNDEtMjA0MzIwNDctMjA1MTIwNTMyMDU1LTIwNUUyQ0Y5LTJDRkMyQ0ZFMkNGRjJFMDAyRTAxMkUwNi0yRTA4MkUwQjJFMEUtMkUxNjJFMTgyRTE5MkUxQjJFMUUyRTFGMkUyQS0yRTJFMkUzMDJFMzEzMDAxLTMwMDMzMDNEMzBGQkE0RkVBNEZGQTYwRC1BNjBGQTY3M0E2N0VBNkYyLUE2RjdBODc0LUE4NzdBOENFQThDRkE4RjgtQThGQUE5MkVBOTJGQTk1RkE5QzEtQTlDREE5REVBOURGQUE1Qy1BQTVGQUFERUFBREZBQkVCRkUxMC1GRTE2RkUxOUZFMzBGRTQ1RkU0NkZFNDktRkU0Q0ZFNTAtRkU1MkZFNTQtRkU1N0ZFNUYtRkU2MUZFNjhGRTZBRkU2QkZGMDEtRkYwM0ZGMDUtRkYwN0ZGMEFGRjBDRkYwRUZGMEZGRjFBRkYxQkZGMUZGRjIwRkYzQ0ZGNjFGRjY0RkY2NSIsUzoiMDAyNDAwMkIwMDNDLTAwM0UwMDVFMDA2MDAwN0MwMDdFMDBBMi0wMEE5MDBBQzAwQUUtMDBCMTAwQjQwMEI2MDBCODAwRDcwMEY3MDJDMi0wMkM1MDJEMi0wMkRGMDJFNS0wMkVCMDJFRDAyRUYtMDJGRjAzNzUwMzg0MDM4NTAzRjYwNDgyMDYwNi0wNjA4MDYwQjA2MEUwNjBGMDZFOTA2RkQwNkZFMDdGNjA5RjIwOUYzMDlGQTA5RkIwQUYxMEI3MDBCRjMtMEJGQTBDN0YwQ0YxMENGMjBENzkwRTNGMEYwMS0wRjAzMEYxMy0wRjE3MEYxQS0wRjFGMEYzNDBGMzYwRjM4MEZCRS0wRkM1MEZDNy0wRkNDMEZDRTBGQ0YwRkQ1LTBGRDgxMDlFMTA5RjEzNjAxMzkwLTEzOTkxN0RCMTk0MDE5RTAtMTlGRjFCNjEtMUI2QTFCNzQtMUI3QzFGQkQxRkJGLTFGQzExRkNELTFGQ0YxRkRELTFGREYxRkVELTFGRUYxRkZEMUZGRTIwNDQyMDUyMjA3QS0yMDdDMjA4QS0yMDhDMjBBMC0yMEI4MjEwMDIxMDEyMTAzLTIxMDYyMTA4MjEwOTIxMTQyMTE2LTIxMTgyMTFFLTIxMjMyMTI1MjEyNzIxMjkyMTJFMjEzQTIxM0IyMTQwLTIxNDQyMTRBLTIxNEQyMTRGMjE5MC0yMzI4MjMyQi0yM0U4MjQwMC0yNDI2MjQ0MC0yNDRBMjQ5Qy0yNEU5MjUwMC0yNkNEMjZDRi0yNkUxMjZFMzI2RTgtMjZGRjI3MDEtMjcwNDI3MDYtMjcwOTI3MEMtMjcyNzI3MjktMjc0QjI3NEQyNzRGLTI3NTIyNzU2LTI3NUUyNzYxLTI3NjcyNzk0Mjc5OC0yN0FGMjdCMS0yN0JFMjdDMC0yN0M0MjdDNy0yN0NBMjdDQzI3RDAtMjdFNTI3RjAtMjk4MjI5OTktMjlENzI5REMtMjlGQjI5RkUtMkI0QzJCNTAtMkI1OTJDRTUtMkNFQTJFODAtMkU5OTJFOUItMkVGMzJGMDAtMkZENTJGRjAtMkZGQjMwMDQzMDEyMzAxMzMwMjAzMDM2MzAzNzMwM0UzMDNGMzA5QjMwOUMzMTkwMzE5MTMxOTYtMzE5RjMxQzAtMzFFMzMyMDAtMzIxRTMyMkEtMzI1MDMyNjAtMzI3RjMyOEEtMzJCMDMyQzAtMzJGRTMzMDAtMzNGRjREQzAtNERGRkE0OTAtQTRDNkE3MDAtQTcxNkE3MjBBNzIxQTc4OUE3OEFBODI4LUE4MkJBODM2LUE4MzlBQTc3LUFBNzlGQjI5RkRGQ0ZERkRGRTYyRkU2NC1GRTY2RkU2OUZGMDRGRjBCRkYxQy1GRjFFRkYzRUZGNDBGRjVDRkY1RUZGRTAtRkZFNkZGRTgtRkZFRUZGRkNGRkZEIixTbToiMDAyQjAwM0MtMDAzRTAwN0MwMDdFMDBBQzAwQjEwMEQ3MDBGNzAzRjYwNjA2LTA2MDgyMDQ0MjA1MjIwN0EtMjA3QzIwOEEtMjA4QzIxNDAtMjE0NDIxNEIyMTkwLTIxOTQyMTlBMjE5QjIxQTAyMUEzMjFBNjIxQUUyMUNFMjFDRjIxRDIyMUQ0MjFGNC0yMkZGMjMwOC0yMzBCMjMyMDIzMjEyMzdDMjM5Qi0yM0IzMjNEQy0yM0UxMjVCNzI1QzEyNUY4LTI1RkYyNjZGMjdDMC0yN0M0MjdDNy0yN0NBMjdDQzI3RDAtMjdFNTI3RjAtMjdGRjI5MDAtMjk4MjI5OTktMjlENzI5REMtMjlGQjI5RkUtMkFGRjJCMzAtMkI0NDJCNDctMkI0Q0ZCMjlGRTYyRkU2NC1GRTY2RkYwQkZGMUMtRkYxRUZGNUNGRjVFRkZFMkZGRTktRkZFQyIsU2M6IjAwMjQwMEEyLTAwQTUwNjBCMDlGMjA5RjMwOUZCMEFGMTBCRjkwRTNGMTdEQjIwQTAtMjBCOEE4MzhGREZDRkU2OUZGMDRGRkUwRkZFMUZGRTVGRkU2IixTazoiMDA1RTAwNjAwMEE4MDBBRjAwQjQwMEI4MDJDMi0wMkM1MDJEMi0wMkRGMDJFNS0wMkVCMDJFRDAyRUYtMDJGRjAzNzUwMzg0MDM4NTFGQkQxRkJGLTFGQzExRkNELTFGQ0YxRkRELTFGREYxRkVELTFGRUYxRkZEMUZGRTMwOUIzMDlDQTcwMC1BNzE2QTcyMEE3MjFBNzg5QTc4QUZGM0VGRjQwRkZFMyIsU286IjAwQTYwMEE3MDBBOTAwQUUwMEIwMDBCNjA0ODIwNjBFMDYwRjA2RTkwNkZEMDZGRTA3RjYwOUZBMEI3MDBCRjMtMEJGODBCRkEwQzdGMENGMTBDRjIwRDc5MEYwMS0wRjAzMEYxMy0wRjE3MEYxQS0wRjFGMEYzNDBGMzYwRjM4MEZCRS0wRkM1MEZDNy0wRkNDMEZDRTBGQ0YwRkQ1LTBGRDgxMDlFMTA5RjEzNjAxMzkwLTEzOTkxOTQwMTlFMC0xOUZGMUI2MS0xQjZBMUI3NC0xQjdDMjEwMDIxMDEyMTAzLTIxMDYyMTA4MjEwOTIxMTQyMTE2LTIxMTgyMTFFLTIxMjMyMTI1MjEyNzIxMjkyMTJFMjEzQTIxM0IyMTRBMjE0QzIxNEQyMTRGMjE5NS0yMTk5MjE5Qy0yMTlGMjFBMTIxQTIyMUE0MjFBNTIxQTctMjFBRDIxQUYtMjFDRDIxRDAyMUQxMjFEMzIxRDUtMjFGMzIzMDAtMjMwNzIzMEMtMjMxRjIzMjItMjMyODIzMkItMjM3QjIzN0QtMjM5QTIzQjQtMjNEQjIzRTItMjNFODI0MDAtMjQyNjI0NDAtMjQ0QTI0OUMtMjRFOTI1MDAtMjVCNjI1QjgtMjVDMDI1QzItMjVGNzI2MDAtMjY2RTI2NzAtMjZDRDI2Q0YtMjZFMTI2RTMyNkU4LTI2RkYyNzAxLTI3MDQyNzA2LTI3MDkyNzBDLTI3MjcyNzI5LTI3NEIyNzREMjc0Ri0yNzUyMjc1Ni0yNzVFMjc2MS0yNzY3Mjc5NDI3OTgtMjdBRjI3QjEtMjdCRTI4MDAtMjhGRjJCMDAtMkIyRjJCNDUyQjQ2MkI1MC0yQjU5MkNFNS0yQ0VBMkU4MC0yRTk5MkU5Qi0yRUYzMkYwMC0yRkQ1MkZGMC0yRkZCMzAwNDMwMTIzMDEzMzAyMDMwMzYzMDM3MzAzRTMwM0YzMTkwMzE5MTMxOTYtMzE5RjMxQzAtMzFFMzMyMDAtMzIxRTMyMkEtMzI1MDMyNjAtMzI3RjMyOEEtMzJCMDMyQzAtMzJGRTMzMDAtMzNGRjREQzAtNERGRkE0OTAtQTRDNkE4MjgtQTgyQkE4MzZBODM3QTgzOUFBNzctQUE3OUZERkRGRkU0RkZFOEZGRURGRkVFRkZGQ0ZGRkQiLFo6IjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDI4MjAyOTIwMkYyMDVGMzAwMCIsWnM6IjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDJGMjA1RjMwMDAiLFpsOiIyMDI4IixacDoiMjAyOSIsQzoiMDAwMC0wMDFGMDA3Ri0wMDlGMDBBRDAzNzgwMzc5MDM3Ri0wMzgzMDM4QjAzOEQwM0EyMDUyNi0wNTMwMDU1NzA1NTgwNTYwMDU4ODA1OEItMDU5MDA1QzgtMDVDRjA1RUItMDVFRjA1RjUtMDYwNTA2MUMwNjFEMDYyMDA2NUYwNkREMDcwRTA3MEYwNzRCMDc0QzA3QjItMDdCRjA3RkItMDdGRjA4MkUwODJGMDgzRi0wOEZGMDkzQTA5M0IwOTRGMDk1NjA5NTcwOTczLTA5NzgwOTgwMDk4NDA5OEQwOThFMDk5MTA5OTIwOUE5MDlCMTA5QjMtMDlCNTA5QkEwOUJCMDlDNTA5QzYwOUM5MDlDQTA5Q0YtMDlENjA5RDgtMDlEQjA5REUwOUU0MDlFNTA5RkMtMEEwMDBBMDQwQTBCLTBBMEUwQTExMEExMjBBMjkwQTMxMEEzNDBBMzcwQTNBMEEzQjBBM0QwQTQzLTBBNDYwQTQ5MEE0QTBBNEUtMEE1MDBBNTItMEE1ODBBNUQwQTVGLTBBNjUwQTc2LTBBODAwQTg0MEE4RTBBOTIwQUE5MEFCMTBBQjQwQUJBMEFCQjBBQzYwQUNBMEFDRTBBQ0YwQUQxLTBBREYwQUU0MEFFNTBBRjAwQUYyLTBCMDAwQjA0MEIwRDBCMEUwQjExMEIxMjBCMjkwQjMxMEIzNDBCM0EwQjNCMEI0NTBCNDYwQjQ5MEI0QTBCNEUtMEI1NTBCNTgtMEI1QjBCNUUwQjY0MEI2NTBCNzItMEI4MTBCODQwQjhCLTBCOEQwQjkxMEI5Ni0wQjk4MEI5QjBCOUQwQkEwLTBCQTIwQkE1LTBCQTcwQkFCLTBCQUQwQkJBLTBCQkQwQkMzLTBCQzUwQkM5MEJDRTBCQ0YwQkQxLTBCRDYwQkQ4LTBCRTUwQkZCLTBDMDAwQzA0MEMwRDBDMTEwQzI5MEMzNDBDM0EtMEMzQzBDNDUwQzQ5MEM0RS0wQzU0MEM1NzBDNUEtMEM1RjBDNjQwQzY1MEM3MC0wQzc3MEM4MDBDODEwQzg0MEM4RDBDOTEwQ0E5MENCNDBDQkEwQ0JCMENDNTBDQzkwQ0NFLTBDRDQwQ0Q3LTBDREQwQ0RGMENFNDBDRTUwQ0YwMENGMy0wRDAxMEQwNDBEMEQwRDExMEQyOTBEM0EtMEQzQzBENDUwRDQ5MEQ0RS0wRDU2MEQ1OC0wRDVGMEQ2NDBENjUwRDc2LTBENzgwRDgwMEQ4MTBEODQwRDk3LTBEOTkwREIyMERCQzBEQkUwREJGMERDNy0wREM5MERDQi0wRENFMERENTBERDcwREUwLTBERjEwREY1LTBFMDAwRTNCLTBFM0UwRTVDLTBFODAwRTgzMEU4NTBFODYwRTg5MEU4QjBFOEMwRThFLTBFOTMwRTk4MEVBMDBFQTQwRUE2MEVBODBFQTkwRUFDMEVCQTBFQkUwRUJGMEVDNTBFQzcwRUNFMEVDRjBFREEwRURCMEVERS0wRUZGMEY0ODBGNkQtMEY3MDBGOEMtMEY4RjBGOTgwRkJEMEZDRDBGRDktMEZGRjEwQzYtMTBDRjEwRkQtMTBGRjEyNDkxMjRFMTI0RjEyNTcxMjU5MTI1RTEyNUYxMjg5MTI4RTEyOEYxMkIxMTJCNjEyQjcxMkJGMTJDMTEyQzYxMkM3MTJENzEzMTExMzE2MTMxNzEzNUItMTM1RTEzN0QtMTM3RjEzOUEtMTM5RjEzRjUtMTNGRjE2OUQtMTY5RjE2RjEtMTZGRjE3MEQxNzE1LTE3MUYxNzM3LTE3M0YxNzU0LTE3NUYxNzZEMTc3MTE3NzQtMTc3RjE3QjQxN0I1MTdERTE3REYxN0VBLTE3RUYxN0ZBLTE3RkYxODBGMTgxQS0xODFGMTg3OC0xODdGMThBQi0xOEFGMThGNi0xOEZGMTkxRC0xOTFGMTkyQy0xOTJGMTkzQy0xOTNGMTk0MS0xOTQzMTk2RTE5NkYxOTc1LTE5N0YxOUFDLTE5QUYxOUNBLTE5Q0YxOURCLTE5REQxQTFDMUExRDFBNUYxQTdEMUE3RTFBOEEtMUE4RjFBOUEtMUE5RjFBQUUtMUFGRjFCNEMtMUI0RjFCN0QtMUI3RjFCQUItMUJBRDFCQkEtMUJGRjFDMzgtMUMzQTFDNEEtMUM0QzFDODAtMUNDRjFDRjMtMUNGRjFERTctMURGQzFGMTYxRjE3MUYxRTFGMUYxRjQ2MUY0NzFGNEUxRjRGMUY1ODFGNUExRjVDMUY1RTFGN0UxRjdGMUZCNTFGQzUxRkQ0MUZENTFGREMxRkYwMUZGMTFGRjUxRkZGMjAwQi0yMDBGMjAyQS0yMDJFMjA2MC0yMDZGMjA3MjIwNzMyMDhGMjA5NS0yMDlGMjBCOS0yMENGMjBGMS0yMEZGMjE4QS0yMThGMjNFOS0yM0ZGMjQyNy0yNDNGMjQ0Qi0yNDVGMjZDRTI2RTIyNkU0LTI2RTcyNzAwMjcwNTI3MEEyNzBCMjcyODI3NEMyNzRFMjc1My0yNzU1Mjc1RjI3NjAyNzk1LTI3OTcyN0IwMjdCRjI3Q0IyN0NELTI3Q0YyQjRELTJCNEYyQjVBLTJCRkYyQzJGMkM1RjJDRjItMkNGODJEMjYtMkQyRjJENjYtMkQ2RTJENzAtMkQ3RjJEOTctMkQ5RjJEQTcyREFGMkRCNzJEQkYyREM3MkRDRjJERDcyRERGMkUzMi0yRTdGMkU5QTJFRjQtMkVGRjJGRDYtMkZFRjJGRkMtMkZGRjMwNDAzMDk3MzA5ODMxMDAtMzEwNDMxMkUtMzEzMDMxOEYzMUI4LTMxQkYzMUU0LTMxRUYzMjFGMzJGRjREQjYtNERCRjlGQ0MtOUZGRkE0OEQtQTQ4RkE0QzctQTRDRkE2MkMtQTYzRkE2NjBBNjYxQTY3NC1BNjdCQTY5OC1BNjlGQTZGOC1BNkZGQTc4RC1BN0ZBQTgyQy1BODJGQTgzQS1BODNGQTg3OC1BODdGQThDNS1BOENEQThEQS1BOERGQThGQy1BOEZGQTk1NC1BOTVFQTk3RC1BOTdGQTlDRUE5REEtQTlEREE5RTAtQTlGRkFBMzctQUEzRkFBNEVBQTRGQUE1QUFBNUJBQTdDLUFBN0ZBQUMzLUFBREFBQUUwLUFCQkZBQkVFQUJFRkFCRkEtQUJGRkQ3QTQtRDdBRkQ3QzctRDdDQUQ3RkMtRjhGRkZBMkVGQTJGRkE2RUZBNkZGQURBLUZBRkZGQjA3LUZCMTJGQjE4LUZCMUNGQjM3RkIzREZCM0ZGQjQyRkI0NUZCQjItRkJEMkZENDAtRkQ0RkZEOTBGRDkxRkRDOC1GREVGRkRGRUZERkZGRTFBLUZFMUZGRTI3LUZFMkZGRTUzRkU2N0ZFNkMtRkU2RkZFNzVGRUZELUZGMDBGRkJGLUZGQzFGRkM4RkZDOUZGRDBGRkQxRkZEOEZGRDlGRkRELUZGREZGRkU3RkZFRi1GRkZCRkZGRUZGRkYiLENjOiIwMDAwLTAwMUYwMDdGLTAwOUYiLENmOiIwMEFEMDYwMC0wNjAzMDZERDA3MEYxN0I0MTdCNTIwMEItMjAwRjIwMkEtMjAyRTIwNjAtMjA2NDIwNkEtMjA2RkZFRkZGRkY5LUZGRkIiLENvOiJFMDAwLUY4RkYiLENzOiJEODAwLURGRkYiLENuOiIwMzc4MDM3OTAzN0YtMDM4MzAzOEIwMzhEMDNBMjA1MjYtMDUzMDA1NTcwNTU4MDU2MDA1ODgwNThCLTA1OTAwNUM4LTA1Q0YwNUVCLTA1RUYwNUY1LTA1RkYwNjA0MDYwNTA2MUMwNjFEMDYyMDA2NUYwNzBFMDc0QjA3NEMwN0IyLTA3QkYwN0ZCLTA3RkYwODJFMDgyRjA4M0YtMDhGRjA5M0EwOTNCMDk0RjA5NTYwOTU3MDk3My0wOTc4MDk4MDA5ODQwOThEMDk4RTA5OTEwOTkyMDlBOTA5QjEwOUIzLTA5QjUwOUJBMDlCQjA5QzUwOUM2MDlDOTA5Q0EwOUNGLTA5RDYwOUQ4LTA5REIwOURFMDlFNDA5RTUwOUZDLTBBMDAwQTA0MEEwQi0wQTBFMEExMTBBMTIwQTI5MEEzMTBBMzQwQTM3MEEzQTBBM0IwQTNEMEE0My0wQTQ2MEE0OTBBNEEwQTRFLTBBNTAwQTUyLTBBNTgwQTVEMEE1Ri0wQTY1MEE3Ni0wQTgwMEE4NDBBOEUwQTkyMEFBOTBBQjEwQUI0MEFCQTBBQkIwQUM2MEFDQTBBQ0UwQUNGMEFEMS0wQURGMEFFNDBBRTUwQUYwMEFGMi0wQjAwMEIwNDBCMEQwQjBFMEIxMTBCMTIwQjI5MEIzMTBCMzQwQjNBMEIzQjBCNDUwQjQ2MEI0OTBCNEEwQjRFLTBCNTUwQjU4LTBCNUIwQjVFMEI2NDBCNjUwQjcyLTBCODEwQjg0MEI4Qi0wQjhEMEI5MTBCOTYtMEI5ODBCOUIwQjlEMEJBMC0wQkEyMEJBNS0wQkE3MEJBQi0wQkFEMEJCQS0wQkJEMEJDMy0wQkM1MEJDOTBCQ0UwQkNGMEJEMS0wQkQ2MEJEOC0wQkU1MEJGQi0wQzAwMEMwNDBDMEQwQzExMEMyOTBDMzQwQzNBLTBDM0MwQzQ1MEM0OTBDNEUtMEM1NDBDNTcwQzVBLTBDNUYwQzY0MEM2NTBDNzAtMEM3NzBDODAwQzgxMEM4NDBDOEQwQzkxMENBOTBDQjQwQ0JBMENCQjBDQzUwQ0M5MENDRS0wQ0Q0MENENy0wQ0REMENERjBDRTQwQ0U1MENGMDBDRjMtMEQwMTBEMDQwRDBEMEQxMTBEMjkwRDNBLTBEM0MwRDQ1MEQ0OTBENEUtMEQ1NjBENTgtMEQ1RjBENjQwRDY1MEQ3Ni0wRDc4MEQ4MDBEODEwRDg0MEQ5Ny0wRDk5MERCMjBEQkMwREJFMERCRjBEQzctMERDOTBEQ0ItMERDRTBERDUwREQ3MERFMC0wREYxMERGNS0wRTAwMEUzQi0wRTNFMEU1Qy0wRTgwMEU4MzBFODUwRTg2MEU4OTBFOEIwRThDMEU4RS0wRTkzMEU5ODBFQTAwRUE0MEVBNjBFQTgwRUE5MEVBQzBFQkEwRUJFMEVCRjBFQzUwRUM3MEVDRTBFQ0YwRURBMEVEQjBFREUtMEVGRjBGNDgwRjZELTBGNzAwRjhDLTBGOEYwRjk4MEZCRDBGQ0QwRkQ5LTBGRkYxMEM2LTEwQ0YxMEZELTEwRkYxMjQ5MTI0RTEyNEYxMjU3MTI1OTEyNUUxMjVGMTI4OTEyOEUxMjhGMTJCMTEyQjYxMkI3MTJCRjEyQzExMkM2MTJDNzEyRDcxMzExMTMxNjEzMTcxMzVCLTEzNUUxMzdELTEzN0YxMzlBLTEzOUYxM0Y1LTEzRkYxNjlELTE2OUYxNkYxLTE2RkYxNzBEMTcxNS0xNzFGMTczNy0xNzNGMTc1NC0xNzVGMTc2RDE3NzExNzc0LTE3N0YxN0RFMTdERjE3RUEtMTdFRjE3RkEtMTdGRjE4MEYxODFBLTE4MUYxODc4LTE4N0YxOEFCLTE4QUYxOEY2LTE4RkYxOTFELTE5MUYxOTJDLTE5MkYxOTNDLTE5M0YxOTQxLTE5NDMxOTZFMTk2RjE5NzUtMTk3RjE5QUMtMTlBRjE5Q0EtMTlDRjE5REItMTlERDFBMUMxQTFEMUE1RjFBN0QxQTdFMUE4QS0xQThGMUE5QS0xQTlGMUFBRS0xQUZGMUI0Qy0xQjRGMUI3RC0xQjdGMUJBQi0xQkFEMUJCQS0xQkZGMUMzOC0xQzNBMUM0QS0xQzRDMUM4MC0xQ0NGMUNGMy0xQ0ZGMURFNy0xREZDMUYxNjFGMTcxRjFFMUYxRjFGNDYxRjQ3MUY0RTFGNEYxRjU4MUY1QTFGNUMxRjVFMUY3RTFGN0YxRkI1MUZDNTFGRDQxRkQ1MUZEQzFGRjAxRkYxMUZGNTFGRkYyMDY1LTIwNjkyMDcyMjA3MzIwOEYyMDk1LTIwOUYyMEI5LTIwQ0YyMEYxLTIwRkYyMThBLTIxOEYyM0U5LTIzRkYyNDI3LTI0M0YyNDRCLTI0NUYyNkNFMjZFMjI2RTQtMjZFNzI3MDAyNzA1MjcwQTI3MEIyNzI4Mjc0QzI3NEUyNzUzLTI3NTUyNzVGMjc2MDI3OTUtMjc5NzI3QjAyN0JGMjdDQjI3Q0QtMjdDRjJCNEQtMkI0RjJCNUEtMkJGRjJDMkYyQzVGMkNGMi0yQ0Y4MkQyNi0yRDJGMkQ2Ni0yRDZFMkQ3MC0yRDdGMkQ5Ny0yRDlGMkRBNzJEQUYyREI3MkRCRjJEQzcyRENGMkRENzJEREYyRTMyLTJFN0YyRTlBMkVGNC0yRUZGMkZENi0yRkVGMkZGQy0yRkZGMzA0MDMwOTczMDk4MzEwMC0zMTA0MzEyRS0zMTMwMzE4RjMxQjgtMzFCRjMxRTQtMzFFRjMyMUYzMkZGNERCNi00REJGOUZDQy05RkZGQTQ4RC1BNDhGQTRDNy1BNENGQTYyQy1BNjNGQTY2MEE2NjFBNjc0LUE2N0JBNjk4LUE2OUZBNkY4LUE2RkZBNzhELUE3RkFBODJDLUE4MkZBODNBLUE4M0ZBODc4LUE4N0ZBOEM1LUE4Q0RBOERBLUE4REZBOEZDLUE4RkZBOTU0LUE5NUVBOTdELUE5N0ZBOUNFQTlEQS1BOUREQTlFMC1BOUZGQUEzNy1BQTNGQUE0RUFBNEZBQTVBQUE1QkFBN0MtQUE3RkFBQzMtQUFEQUFBRTAtQUJCRkFCRUVBQkVGQUJGQS1BQkZGRDdBNC1EN0FGRDdDNy1EN0NBRDdGQy1EN0ZGRkEyRUZBMkZGQTZFRkE2RkZBREEtRkFGRkZCMDctRkIxMkZCMTgtRkIxQ0ZCMzdGQjNERkIzRkZCNDJGQjQ1RkJCMi1GQkQyRkQ0MC1GRDRGRkQ5MEZEOTFGREM4LUZERUZGREZFRkRGRkZFMUEtRkUxRkZFMjctRkUyRkZFNTNGRTY3RkU2Qy1GRTZGRkU3NUZFRkRGRUZFRkYwMEZGQkYtRkZDMUZGQzhGRkM5RkZEMEZGRDFGRkQ4RkZEOUZGREQtRkZERkZGRTdGRkVGLUZGRjhGRkZFRkZGRiJ9KX0pLGRlZmluZSgiYWNlL2RvY3VtZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvcmFuZ2UiLCJhY2UvYW5jaG9yIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2xpYi9vb3AiKSxlPWEoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1hKCIuL3JhbmdlIikuUmFuZ2UsZz1hKCIuL2FuY2hvciIpLkFuY2hvcixoPWZ1bmN0aW9uKGEpe3RoaXMuJGxpbmVzPVtdLEFycmF5LmlzQXJyYXkoYSk/dGhpcy5pbnNlcnRMaW5lcygwLGEpOmEubGVuZ3RoPT0wP3RoaXMuJGxpbmVzPVsiIl06dGhpcy5pbnNlcnQoe3JvdzowLGNvbHVtbjowfSxhKX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdldExlbmd0aCgpO3RoaXMucmVtb3ZlKG5ldyBmKDAsMCxiLHRoaXMuZ2V0TGluZShiLTEpLmxlbmd0aCkpLHRoaXMuaW5zZXJ0KHtyb3c6MCxjb2x1bW46MH0sYSl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpfSx0aGlzLmNyZWF0ZUFuY2hvcj1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZyh0aGlzLGEsYil9LCJhYWEiLnNwbGl0KC9hLykubGVuZ3RoPT0wP3RoaXMuJHNwbGl0PWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKS5zcGxpdCgiXG4iKX06dGhpcy4kc3BsaXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3BsaXQoL1xyXG58XHJ8XG4vKX0sdGhpcy4kZGV0ZWN0TmV3TGluZT1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eLio/KFxyXG58XHJ8XG4pL20pO2I/dGhpcy4kYXV0b05ld0xpbmU9YlsxXTp0aGlzLiRhdXRvTmV3TGluZT0iXG4ifSx0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXI9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy4kbmV3TGluZU1vZGUpe2Nhc2Uid2luZG93cyI6cmV0dXJuIlxyXG4iO2Nhc2UidW5peCI6cmV0dXJuIlxuIjtjYXNlImF1dG8iOnJldHVybiB0aGlzLiRhdXRvTmV3TGluZX19LHRoaXMuJGF1dG9OZXdMaW5lPSJcbiIsdGhpcy4kbmV3TGluZU1vZGU9ImF1dG8iLHRoaXMuc2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oYSl7aWYodGhpcy4kbmV3TGluZU1vZGU9PT1hKXJldHVybjt0aGlzLiRuZXdMaW5lTW9kZT1hfSx0aGlzLmdldE5ld0xpbmVNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlfSx0aGlzLmlzTmV3TGluZT1mdW5jdGlvbihhKXtyZXR1cm4gYT09IlxyXG4ifHxhPT0iXHIifHxhPT0iXG4ifSx0aGlzLmdldExpbmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGxpbmVzW2FdfHwiIn0sdGhpcy5nZXRMaW5lcz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLiRsaW5lcy5zbGljZShhLGIrMSl9LHRoaXMuZ2V0QWxsTGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lcygwLHRoaXMuZ2V0TGVuZ3RoKCkpfSx0aGlzLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRsaW5lcy5sZW5ndGh9LHRoaXMuZ2V0VGV4dFJhbmdlPWZ1bmN0aW9uKGEpe2lmKGEuc3RhcnQucm93PT1hLmVuZC5yb3cpcmV0dXJuIHRoaXMuJGxpbmVzW2Euc3RhcnQucm93XS5zdWJzdHJpbmcoYS5zdGFydC5jb2x1bW4sYS5lbmQuY29sdW1uKTt2YXIgYj1bXTtyZXR1cm4gYi5wdXNoKHRoaXMuJGxpbmVzW2Euc3RhcnQucm93XS5zdWJzdHJpbmcoYS5zdGFydC5jb2x1bW4pKSxiLnB1c2guYXBwbHkoYix0aGlzLmdldExpbmVzKGEuc3RhcnQucm93KzEsYS5lbmQucm93LTEpKSxiLnB1c2godGhpcy4kbGluZXNbYS5lbmQucm93XS5zdWJzdHJpbmcoMCxhLmVuZC5jb2x1bW4pKSxiLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpfSx0aGlzLiRjbGlwUG9zaXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nZXRMZW5ndGgoKTtyZXR1cm4gYS5yb3c+PWImJihhLnJvdz1NYXRoLm1heCgwLGItMSksYS5jb2x1bW49dGhpcy5nZXRMaW5lKGItMSkubGVuZ3RoKSxhfSx0aGlzLmluc2VydD1mdW5jdGlvbihhLGIpe2lmKGIubGVuZ3RoPT0wKXJldHVybiBhO2E9dGhpcy4kY2xpcFBvc2l0aW9uKGEpLHRoaXMuZ2V0TGVuZ3RoKCk8PTEmJnRoaXMuJGRldGVjdE5ld0xpbmUoYik7dmFyIGM9dGhpcy4kc3BsaXQoYiksZD1jLnNwbGljZSgwLDEpWzBdLGU9Yy5sZW5ndGg9PTA/bnVsbDpjLnNwbGljZShjLmxlbmd0aC0xLDEpWzBdO3JldHVybiBhPXRoaXMuaW5zZXJ0SW5MaW5lKGEsZCksZSE9PW51bGwmJihhPXRoaXMuaW5zZXJ0TmV3TGluZShhKSxhPXRoaXMuaW5zZXJ0TGluZXMoYS5yb3csYyksYT10aGlzLmluc2VydEluTGluZShhLGV8fCIiKSksYX0sdGhpcy5pbnNlcnRMaW5lcz1mdW5jdGlvbihhLGIpe2lmKGIubGVuZ3RoPT0wKXJldHVybntyb3c6YSxjb2x1bW46MH07dmFyIGM9W2EsMF07Yy5wdXNoLmFwcGx5KGMsYiksdGhpcy4kbGluZXMuc3BsaWNlLmFwcGx5KHRoaXMuJGxpbmVzLGMpO3ZhciBkPW5ldyBmKGEsMCxhK2IubGVuZ3RoLDApLGU9e2FjdGlvbjoiaW5zZXJ0TGluZXMiLHJhbmdlOmQsbGluZXM6Yn07cmV0dXJuIHRoaXMuX2VtaXQoImNoYW5nZSIse2RhdGE6ZX0pLGQuZW5kfSx0aGlzLmluc2VydE5ld0xpbmU9ZnVuY3Rpb24oYSl7YT10aGlzLiRjbGlwUG9zaXRpb24oYSk7dmFyIGI9dGhpcy4kbGluZXNbYS5yb3ddfHwiIjt0aGlzLiRsaW5lc1thLnJvd109Yi5zdWJzdHJpbmcoMCxhLmNvbHVtbiksdGhpcy4kbGluZXMuc3BsaWNlKGEucm93KzEsMCxiLnN1YnN0cmluZyhhLmNvbHVtbixiLmxlbmd0aCkpO3ZhciBjPXtyb3c6YS5yb3crMSxjb2x1bW46MH0sZD17YWN0aW9uOiJpbnNlcnRUZXh0IixyYW5nZTpmLmZyb21Qb2ludHMoYSxjKSx0ZXh0OnRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpfTtyZXR1cm4gdGhpcy5fZW1pdCgiY2hhbmdlIix7ZGF0YTpkfSksY30sdGhpcy5pbnNlcnRJbkxpbmU9ZnVuY3Rpb24oYSxiKXtpZihiLmxlbmd0aD09MClyZXR1cm4gYTt2YXIgYz10aGlzLiRsaW5lc1thLnJvd118fCIiO3RoaXMuJGxpbmVzW2Eucm93XT1jLnN1YnN0cmluZygwLGEuY29sdW1uKStiK2Muc3Vic3RyaW5nKGEuY29sdW1uKTt2YXIgZD17cm93OmEucm93LGNvbHVtbjphLmNvbHVtbitiLmxlbmd0aH0sZT17YWN0aW9uOiJpbnNlcnRUZXh0IixyYW5nZTpmLmZyb21Qb2ludHMoYSxkKSx0ZXh0OmJ9O3JldHVybiB0aGlzLl9lbWl0KCJjaGFuZ2UiLHtkYXRhOmV9KSxkfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihhKXthLnN0YXJ0PXRoaXMuJGNsaXBQb3NpdGlvbihhLnN0YXJ0KSxhLmVuZD10aGlzLiRjbGlwUG9zaXRpb24oYS5lbmQpO2lmKGEuaXNFbXB0eSgpKXJldHVybiBhLnN0YXJ0O3ZhciBiPWEuc3RhcnQucm93LGM9YS5lbmQucm93O2lmKGEuaXNNdWx0aUxpbmUoKSl7dmFyIGQ9YS5zdGFydC5jb2x1bW49PTA/YjpiKzEsZT1jLTE7YS5lbmQuY29sdW1uPjAmJnRoaXMucmVtb3ZlSW5MaW5lKGMsMCxhLmVuZC5jb2x1bW4pLGU+PWQmJnRoaXMucmVtb3ZlTGluZXMoZCxlKSxkIT1iJiYodGhpcy5yZW1vdmVJbkxpbmUoYixhLnN0YXJ0LmNvbHVtbix0aGlzLmdldExpbmUoYikubGVuZ3RoKSx0aGlzLnJlbW92ZU5ld0xpbmUoYS5zdGFydC5yb3cpKX1lbHNlIHRoaXMucmVtb3ZlSW5MaW5lKGIsYS5zdGFydC5jb2x1bW4sYS5lbmQuY29sdW1uKTtyZXR1cm4gYS5zdGFydH0sdGhpcy5yZW1vdmVJbkxpbmU9ZnVuY3Rpb24oYSxiLGMpe2lmKGI9PWMpcmV0dXJuO3ZhciBkPW5ldyBmKGEsYixhLGMpLGU9dGhpcy5nZXRMaW5lKGEpLGc9ZS5zdWJzdHJpbmcoYixjKSxoPWUuc3Vic3RyaW5nKDAsYikrZS5zdWJzdHJpbmcoYyxlLmxlbmd0aCk7dGhpcy4kbGluZXMuc3BsaWNlKGEsMSxoKTt2YXIgaT17YWN0aW9uOiJyZW1vdmVUZXh0IixyYW5nZTpkLHRleHQ6Z307cmV0dXJuIHRoaXMuX2VtaXQoImNoYW5nZSIse2RhdGE6aX0pLGQuc3RhcnR9LHRoaXMucmVtb3ZlTGluZXM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZihhLDAsYisxLDApLGQ9dGhpcy4kbGluZXMuc3BsaWNlKGEsYi1hKzEpLGU9e2FjdGlvbjoicmVtb3ZlTGluZXMiLHJhbmdlOmMsbmw6dGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCksbGluZXM6ZH07cmV0dXJuIHRoaXMuX2VtaXQoImNoYW5nZSIse2RhdGE6ZX0pLGR9LHRoaXMucmVtb3ZlTmV3TGluZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdldExpbmUoYSksYz10aGlzLmdldExpbmUoYSsxKSxkPW5ldyBmKGEsYi5sZW5ndGgsYSsxLDApLGU9YitjO3RoaXMuJGxpbmVzLnNwbGljZShhLDIsZSk7dmFyIGc9e2FjdGlvbjoicmVtb3ZlVGV4dCIscmFuZ2U6ZCx0ZXh0OnRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpfTt0aGlzLl9lbWl0KCJjaGFuZ2UiLHtkYXRhOmd9KX0sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKGEsYil7aWYoYi5sZW5ndGg9PTAmJmEuaXNFbXB0eSgpKXJldHVybiBhLnN0YXJ0O2lmKGI9PXRoaXMuZ2V0VGV4dFJhbmdlKGEpKXJldHVybiBhLmVuZDt0aGlzLnJlbW92ZShhKTtpZihiKXZhciBjPXRoaXMuaW5zZXJ0KGEuc3RhcnQsYik7ZWxzZSBjPWEuc3RhcnQ7cmV0dXJuIGN9LHRoaXMuYXBwbHlEZWx0YXM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl0sZD1mLmZyb21Qb2ludHMoYy5yYW5nZS5zdGFydCxjLnJhbmdlLmVuZCk7Yy5hY3Rpb249PSJpbnNlcnRMaW5lcyI/dGhpcy5pbnNlcnRMaW5lcyhkLnN0YXJ0LnJvdyxjLmxpbmVzKTpjLmFjdGlvbj09Imluc2VydFRleHQiP3RoaXMuaW5zZXJ0KGQuc3RhcnQsYy50ZXh0KTpjLmFjdGlvbj09InJlbW92ZUxpbmVzIj90aGlzLnJlbW92ZUxpbmVzKGQuc3RhcnQucm93LGQuZW5kLnJvdy0xKTpjLmFjdGlvbj09InJlbW92ZVRleHQiJiZ0aGlzLnJlbW92ZShkKX19LHRoaXMucmV2ZXJ0RGVsdGFzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgYz1hW2JdLGQ9Zi5mcm9tUG9pbnRzKGMucmFuZ2Uuc3RhcnQsYy5yYW5nZS5lbmQpO2MuYWN0aW9uPT0iaW5zZXJ0TGluZXMiP3RoaXMucmVtb3ZlTGluZXMoZC5zdGFydC5yb3csZC5lbmQucm93LTEpOmMuYWN0aW9uPT0iaW5zZXJ0VGV4dCI/dGhpcy5yZW1vdmUoZCk6Yy5hY3Rpb249PSJyZW1vdmVMaW5lcyI/dGhpcy5pbnNlcnRMaW5lcyhkLnN0YXJ0LnJvdyxjLmxpbmVzKTpjLmFjdGlvbj09InJlbW92ZVRleHQiJiZ0aGlzLmluc2VydChkLnN0YXJ0LGMudGV4dCl9fX0pKS5jYWxsKGgucHJvdG90eXBlKSxiLkRvY3VtZW50PWh9KSxkZWZpbmUoImFjZS9hbmNob3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi9saWIvb29wIiksZT1hKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLGY9Yi5BbmNob3I9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZG9jdW1lbnQ9YSx0eXBlb2YgYz09InVuZGVmaW5lZCI/dGhpcy5zZXRQb3NpdGlvbihiLnJvdyxiLmNvbHVtbik6dGhpcy5zZXRQb3NpdGlvbihiLGMpLHRoaXMuJG9uQ2hhbmdlPXRoaXMub25DaGFuZ2UuYmluZCh0aGlzKSxhLm9uKCJjaGFuZ2UiLHRoaXMuJG9uQ2hhbmdlKX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LHRoaXMuY29sdW1uKX0sdGhpcy5nZXREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY3VtZW50fSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YSxjPWIucmFuZ2U7aWYoYy5zdGFydC5yb3c9PWMuZW5kLnJvdyYmYy5zdGFydC5yb3chPXRoaXMucm93KXJldHVybjtpZihjLnN0YXJ0LnJvdz50aGlzLnJvdylyZXR1cm47aWYoYy5zdGFydC5yb3c9PXRoaXMucm93JiZjLnN0YXJ0LmNvbHVtbj50aGlzLmNvbHVtbilyZXR1cm47dmFyIGQ9dGhpcy5yb3csZT10aGlzLmNvbHVtbjtiLmFjdGlvbj09PSJpbnNlcnRUZXh0Ij9jLnN0YXJ0LnJvdz09PWQmJmMuc3RhcnQuY29sdW1uPD1lP2Muc3RhcnQucm93PT09Yy5lbmQucm93P2UrPWMuZW5kLmNvbHVtbi1jLnN0YXJ0LmNvbHVtbjooZS09Yy5zdGFydC5jb2x1bW4sZCs9Yy5lbmQucm93LWMuc3RhcnQucm93KTpjLnN0YXJ0LnJvdyE9PWMuZW5kLnJvdyYmYy5zdGFydC5yb3c8ZCYmKGQrPWMuZW5kLnJvdy1jLnN0YXJ0LnJvdyk6Yi5hY3Rpb249PT0iaW5zZXJ0TGluZXMiP2Muc3RhcnQucm93PD1kJiYoZCs9Yy5lbmQucm93LWMuc3RhcnQucm93KTpiLmFjdGlvbj09InJlbW92ZVRleHQiP2Muc3RhcnQucm93PT1kJiZjLnN0YXJ0LmNvbHVtbjxlP2MuZW5kLmNvbHVtbj49ZT9lPWMuc3RhcnQuY29sdW1uOmU9TWF0aC5tYXgoMCxlLShjLmVuZC5jb2x1bW4tYy5zdGFydC5jb2x1bW4pKTpjLnN0YXJ0LnJvdyE9PWMuZW5kLnJvdyYmYy5zdGFydC5yb3c8ZD8oYy5lbmQucm93PT1kJiYoZT1NYXRoLm1heCgwLGUtYy5lbmQuY29sdW1uKStjLnN0YXJ0LmNvbHVtbiksZC09Yy5lbmQucm93LWMuc3RhcnQucm93KTpjLmVuZC5yb3c9PWQmJihkLT1jLmVuZC5yb3ctYy5zdGFydC5yb3csZT1NYXRoLm1heCgwLGUtYy5lbmQuY29sdW1uKStjLnN0YXJ0LmNvbHVtbik6Yi5hY3Rpb249PSJyZW1vdmVMaW5lcyImJmMuc3RhcnQucm93PD1kJiYoYy5lbmQucm93PD1kP2QtPWMuZW5kLnJvdy1jLnN0YXJ0LnJvdzooZD1jLnN0YXJ0LnJvdyxlPTApKSx0aGlzLnNldFBvc2l0aW9uKGQsZSwhMCl9LHRoaXMuc2V0UG9zaXRpb249ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2M/ZD17cm93OmEsY29sdW1uOmJ9OmQ9dGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChhLGIpO2lmKHRoaXMucm93PT1kLnJvdyYmdGhpcy5jb2x1bW49PWQuY29sdW1uKXJldHVybjt2YXIgZT17cm93OnRoaXMucm93LGNvbHVtbjp0aGlzLmNvbHVtbn07dGhpcy5yb3c9ZC5yb3csdGhpcy5jb2x1bW49ZC5jb2x1bW4sdGhpcy5fZW1pdCgiY2hhbmdlIix7b2xkOmUsdmFsdWU6ZH0pfSx0aGlzLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLiRvbkNoYW5nZSl9LHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz17fTtyZXR1cm4gYT49dGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKT8oYy5yb3c9TWF0aC5tYXgoMCx0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpLTEpLGMuY29sdW1uPXRoaXMuZG9jdW1lbnQuZ2V0TGluZShjLnJvdykubGVuZ3RoKTphPDA/KGMucm93PTAsYy5jb2x1bW49MCk6KGMucm93PWEsYy5jb2x1bW49TWF0aC5taW4odGhpcy5kb2N1bWVudC5nZXRMaW5lKGMucm93KS5sZW5ndGgsTWF0aC5tYXgoMCxiKSkpLGI8MCYmKGMuY29sdW1uPTApLGN9fSkpLmNhbGwoZi5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvYmFja2dyb3VuZF90b2tlbml6ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi9saWIvb29wIiksZT1hKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLGY9ZnVuY3Rpb24oYSxiKXt0aGlzLnJ1bm5pbmc9ITEsdGhpcy5saW5lcz1bXSx0aGlzLmN1cnJlbnRMaW5lPTAsdGhpcy50b2tlbml6ZXI9YTt2YXIgYz10aGlzO3RoaXMuJHdvcmtlcj1mdW5jdGlvbigpe2lmKCFjLnJ1bm5pbmcpcmV0dXJuO3ZhciBhPW5ldyBEYXRlLGI9Yy5jdXJyZW50TGluZSxkPWMuZG9jLGU9MCxmPWQuZ2V0TGVuZ3RoKCk7d2hpbGUoYy5jdXJyZW50TGluZTxmKXtjLmxpbmVzW2MuY3VycmVudExpbmVdPWMuJHRva2VuaXplUm93cyhjLmN1cnJlbnRMaW5lLGMuY3VycmVudExpbmUpWzBdLGMuY3VycmVudExpbmUrKyxlKz0xO2lmKGUlNT09MCYmbmV3IERhdGUtYT4yMCl7Yy5maXJlVXBkYXRlRXZlbnQoYixjLmN1cnJlbnRMaW5lLTEpLGMucnVubmluZz1zZXRUaW1lb3V0KGMuJHdvcmtlciwyMCk7cmV0dXJufX1jLnJ1bm5pbmc9ITEsYy5maXJlVXBkYXRlRXZlbnQoYixmLTEpfX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy5zZXRUb2tlbml6ZXI9ZnVuY3Rpb24oYSl7dGhpcy50b2tlbml6ZXI9YSx0aGlzLmxpbmVzPVtdLHRoaXMuc3RhcnQoMCl9LHRoaXMuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dGhpcy5kb2M9YSx0aGlzLmxpbmVzPVtdLHRoaXMuc3RvcCgpfSx0aGlzLmZpcmVVcGRhdGVFdmVudD1mdW5jdGlvbihhLGIpe3ZhciBjPXtmaXJzdDphLGxhc3Q6Yn07dGhpcy5fZW1pdCgidXBkYXRlIix7ZGF0YTpjfSl9LHRoaXMuc3RhcnQ9ZnVuY3Rpb24oYSl7dGhpcy5jdXJyZW50TGluZT1NYXRoLm1pbihhfHwwLHRoaXMuY3VycmVudExpbmUsdGhpcy5kb2MuZ2V0TGVuZ3RoKCkpLHRoaXMubGluZXMuc3BsaWNlKHRoaXMuY3VycmVudExpbmUsdGhpcy5saW5lcy5sZW5ndGgpLHRoaXMuc3RvcCgpLHRoaXMucnVubmluZz1zZXRUaW1lb3V0KHRoaXMuJHdvcmtlciw3MDApfSx0aGlzLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnJ1bm5pbmcmJmNsZWFyVGltZW91dCh0aGlzLnJ1bm5pbmcpLHRoaXMucnVubmluZz0hMX0sdGhpcy5nZXRUb2tlbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy4kdG9rZW5pemVSb3dzKGEsYil9LHRoaXMuZ2V0U3RhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJHRva2VuaXplUm93cyhhLGEpWzBdLnN0YXRlfSx0aGlzLiR0b2tlbml6ZVJvd3M9ZnVuY3Rpb24oYSxiKXtpZighdGhpcy5kb2N8fGlzTmFOKGEpfHxpc05hTihiKSlyZXR1cm5be3N0YXRlOiJzdGFydCIsdG9rZW5zOltdfV07dmFyIGM9W10sZD0ic3RhcnQiLGU9ITE7YT4wJiZ0aGlzLmxpbmVzW2EtMV0/KGQ9dGhpcy5saW5lc1thLTFdLnN0YXRlLGU9ITApOmE9PTA/KGQ9InN0YXJ0IixlPSEwKTp0aGlzLmxpbmVzLmxlbmd0aD4wJiYoZD10aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoLTFdLnN0YXRlKTt2YXIgZj10aGlzLmRvYy5nZXRMaW5lcyhhLGIpO2Zvcih2YXIgZz1hO2c8PWI7ZysrKWlmKCF0aGlzLmxpbmVzW2ddKXt2YXIgaD10aGlzLnRva2VuaXplci5nZXRMaW5lVG9rZW5zKGZbZy1hXXx8IiIsZCksZD1oLnN0YXRlO2MucHVzaChoKSxlJiYodGhpcy5saW5lc1tnXT1oKX1lbHNle3ZhciBoPXRoaXMubGluZXNbZ107ZD1oLnN0YXRlLGMucHVzaChoKX1yZXR1cm4gY319KSkuY2FsbChmLnByb3RvdHlwZSksYi5CYWNrZ3JvdW5kVG9rZW5pemVyPWZ9KSxkZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vZm9sZGluZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSIsImFjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lIiwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGgoKXt0aGlzLmdldEZvbGRBdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5nZXRGb2xkTGluZShhKTtpZighZClyZXR1cm4gbnVsbDt2YXIgZT1kLmZvbGRzO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgZz1lW2ZdO2lmKGcucmFuZ2UuY29udGFpbnMoYSxiKSl7aWYoYz09MSYmZy5yYW5nZS5pc0VuZChhLGIpKWNvbnRpbnVlO2lmKGM9PS0xJiZnLnJhbmdlLmlzU3RhcnQoYSxiKSljb250aW51ZTtyZXR1cm4gZ319fSx0aGlzLmdldEZvbGRzSW5SYW5nZT1mdW5jdGlvbihhKXthPWEuY2xvbmUoKTt2YXIgYj1hLnN0YXJ0LGM9YS5lbmQsZD10aGlzLiRmb2xkRGF0YSxlPVtdO2IuY29sdW1uKz0xLGMuY29sdW1uLT0xO2Zvcih2YXIgZj0wO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgZz1kW2ZdLnJhbmdlLmNvbXBhcmVSYW5nZShhKTtpZihnPT0yKWNvbnRpbnVlO2lmKGc9PS0yKWJyZWFrO3ZhciBoPWRbZl0uZm9sZHM7Zm9yKHZhciBpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBqPWhbaV07Zz1qLnJhbmdlLmNvbXBhcmVSYW5nZShhKTtpZihnPT0tMilicmVhaztpZihnPT0yKWNvbnRpbnVlO2lmKGc9PTQyKWJyZWFrO2UucHVzaChqKX19cmV0dXJuIGV9LHRoaXMuZ2V0QWxsRm9sZHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKGIpe2EucHVzaChiKTtpZighYi5zdWJGb2xkcylyZXR1cm47Zm9yKHZhciBkPTA7ZDxiLnN1YkZvbGRzLmxlbmd0aDtkKyspYyhiLnN1YkZvbGRzW2RdKX12YXIgYT1bXSxiPXRoaXMuJGZvbGREYXRhO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKWZvcih2YXIgZT0wO2U8YltkXS5mb2xkcy5sZW5ndGg7ZSsrKWMoYltkXS5mb2xkc1tlXSk7cmV0dXJuIGF9LHRoaXMuZ2V0Rm9sZFN0cmluZ0F0PWZ1bmN0aW9uKGEsYixjLGQpe2Q9ZHx8dGhpcy5nZXRGb2xkTGluZShhKTtpZighZClyZXR1cm4gbnVsbDt2YXIgZT17ZW5kOntjb2x1bW46MH19LGYsZztmb3IodmFyIGg9MDtoPGQuZm9sZHMubGVuZ3RoO2grKyl7Zz1kLmZvbGRzW2hdO3ZhciBpPWcucmFuZ2UuY29tcGFyZUVuZChhLGIpO2lmKGk9PS0xKXtmPXRoaXMuZ2V0TGluZShnLnN0YXJ0LnJvdykuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixnLnN0YXJ0LmNvbHVtbik7YnJlYWt9aWYoaT09PTApcmV0dXJuIG51bGw7ZT1nfXJldHVybiBmfHwoZj10aGlzLmdldExpbmUoZy5zdGFydC5yb3cpLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4pKSxjPT0tMT9mLnN1YnN0cmluZygwLGItZS5lbmQuY29sdW1uKTpjPT0xP2Yuc3Vic3RyaW5nKGItZS5lbmQuY29sdW1uKTpmfSx0aGlzLmdldEZvbGRMaW5lPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy4kZm9sZERhdGEsZD0wO2ImJihkPWMuaW5kZXhPZihiKSksZD09LTEmJihkPTApO2ZvcihkO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO2lmKGUuc3RhcnQucm93PD1hJiZlLmVuZC5yb3c+PWEpcmV0dXJuIGU7aWYoZS5lbmQucm93PmEpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9LHRoaXMuZ2V0TmV4dEZvbGRMaW5lPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy4kZm9sZERhdGEsZD0wO2ImJihkPWMuaW5kZXhPZihiKSksZD09LTEmJihkPTApO2ZvcihkO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO2lmKGUuZW5kLnJvdz49YSlyZXR1cm4gZX1yZXR1cm4gbnVsbH0sdGhpcy5nZXRGb2xkZWRSb3dDb3VudD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuJGZvbGREYXRhLGQ9Yi1hKzE7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0sZz1mLmVuZC5yb3csaD1mLnN0YXJ0LnJvdztpZihnPj1iKXtoPGImJihoPj1hP2QtPWItaDpkPTApO2JyZWFrfWc+PWEmJihoPj1hP2QtPWctaDpkLT1nLWErMSl9cmV0dXJuIGR9LHRoaXMuJGFkZEZvbGRMaW5lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLiRmb2xkRGF0YS5wdXNoKGEpLHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydC5yb3ctYi5zdGFydC5yb3d9KSxhfSx0aGlzLmFkZEZvbGQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLiRmb2xkRGF0YSxkPSExLGc7YSBpbnN0YW5jZW9mIGY/Zz1hOmc9bmV3IGYoYixhKSx0aGlzLiRjbGlwUmFuZ2VUb0RvY3VtZW50KGcucmFuZ2UpO3ZhciBoPWcuc3RhcnQucm93LGk9Zy5zdGFydC5jb2x1bW4saj1nLmVuZC5yb3csaz1nLmVuZC5jb2x1bW47aWYoZy5wbGFjZWhvbGRlci5sZW5ndGg8Mil0aHJvdyJQbGFjZWhvbGRlciBoYXMgdG8gYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIjtpZihoPT1qJiZrLWk8Mil0aHJvdyJUaGUgcmFuZ2UgaGFzIHRvIGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyB3aWR0aCI7dmFyIGw9dGhpcy5nZXRGb2xkQXQoaCxpLDEpLG09dGhpcy5nZXRGb2xkQXQoaixrLC0xKTtpZihsJiZtPT1sKXJldHVybiBsLmFkZFN1YkZvbGQoZyk7aWYobCYmIWwucmFuZ2UuaXNTdGFydChoLGkpfHxtJiYhbS5yYW5nZS5pc0VuZChqLGspKXRocm93IkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkIitnLnJhbmdlK2wucmFuZ2U7dmFyIG49dGhpcy5nZXRGb2xkc0luUmFuZ2UoZy5yYW5nZSk7bi5sZW5ndGg+MCYmKHRoaXMucmVtb3ZlRm9sZHMobiksZy5zdWJGb2xkcz1uKTtmb3IodmFyIG89MDtvPGMubGVuZ3RoO28rKyl7dmFyIHA9Y1tvXTtpZihqPT1wLnN0YXJ0LnJvdyl7cC5hZGRGb2xkKGcpLGQ9ITA7YnJlYWt9aWYoaD09cC5lbmQucm93KXtwLmFkZEZvbGQoZyksZD0hMDtpZighZy5zYW1lUm93KXt2YXIgcT1jW28rMV07aWYocSYmcS5zdGFydC5yb3c9PWope3AubWVyZ2UocSk7YnJlYWt9fWJyZWFrfWlmKGo8PXAuc3RhcnQucm93KWJyZWFrfXJldHVybiBkfHwocD10aGlzLiRhZGRGb2xkTGluZShuZXcgZSh0aGlzLiRmb2xkRGF0YSxnKSkpLHRoaXMuJHVzZVdyYXBNb2RlJiZ0aGlzLiR1cGRhdGVXcmFwRGF0YShwLnN0YXJ0LnJvdyxwLnN0YXJ0LnJvdyksdGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy5fZW1pdCgiY2hhbmdlRm9sZCIse2RhdGE6Z30pLGd9LHRoaXMuYWRkRm9sZHM9ZnVuY3Rpb24oYSl7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuYWRkRm9sZChhKX0sdGhpcyl9LHRoaXMucmVtb3ZlRm9sZD1mdW5jdGlvbihhKXt2YXIgYj1hLmZvbGRMaW5lLGM9Yi5zdGFydC5yb3csZD1iLmVuZC5yb3csZT10aGlzLiRmb2xkRGF0YSxmPWIuZm9sZHM7aWYoZi5sZW5ndGg9PTEpZS5zcGxpY2UoZS5pbmRleE9mKGIpLDEpO2Vsc2UgaWYoYi5yYW5nZS5pc0VuZChhLmVuZC5yb3csYS5lbmQuY29sdW1uKSlmLnBvcCgpLGIuZW5kLnJvdz1mW2YubGVuZ3RoLTFdLmVuZC5yb3csYi5lbmQuY29sdW1uPWZbZi5sZW5ndGgtMV0uZW5kLmNvbHVtbjtlbHNlIGlmKGIucmFuZ2UuaXNTdGFydChhLnN0YXJ0LnJvdyxhLnN0YXJ0LmNvbHVtbikpZi5zaGlmdCgpLGIuc3RhcnQucm93PWZbMF0uc3RhcnQucm93LGIuc3RhcnQuY29sdW1uPWZbMF0uc3RhcnQuY29sdW1uO2Vsc2UgaWYoYS5zYW1lUm93KWYuc3BsaWNlKGYuaW5kZXhPZihhKSwxKTtlbHNle3ZhciBnPWIuc3BsaXQoYS5zdGFydC5yb3csYS5zdGFydC5jb2x1bW4pO2Y9Zy5mb2xkcyxmLnNoaWZ0KCksZy5zdGFydC5yb3c9ZlswXS5zdGFydC5yb3csZy5zdGFydC5jb2x1bW49ZlswXS5zdGFydC5jb2x1bW59dGhpcy4kdXNlV3JhcE1vZGUmJnRoaXMuJHVwZGF0ZVdyYXBEYXRhKGMsZCksdGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy5fZW1pdCgiY2hhbmdlRm9sZCIse2RhdGE6YX0pfSx0aGlzLnJlbW92ZUZvbGRzPWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaChhW2NdKTtiLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5yZW1vdmVGb2xkKGEpfSx0aGlzKSx0aGlzLiRtb2RpZmllZD0hMH0sdGhpcy5leHBhbmRGb2xkPWZ1bmN0aW9uKGEpe3RoaXMucmVtb3ZlRm9sZChhKSxhLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5hZGRGb2xkKGEpfSx0aGlzKSxhLnN1YkZvbGRzPVtdfSx0aGlzLmV4cGFuZEZvbGRzPWZ1bmN0aW9uKGEpe2EuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLmV4cGFuZEZvbGQoYSl9LHRoaXMpfSx0aGlzLnVuZm9sZD1mdW5jdGlvbihhLGIpe3ZhciBjLGU7YT09bnVsbD9jPW5ldyBkKDAsMCx0aGlzLmdldExlbmd0aCgpLDApOnR5cGVvZiBhPT0ibnVtYmVyIj9jPW5ldyBkKGEsMCxhLHRoaXMuZ2V0TGluZShhKS5sZW5ndGgpOiJyb3ciaW4gYT9jPWQuZnJvbVBvaW50cyhhLGEpOmM9YSxlPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKGMpO2lmKGIpdGhpcy5yZW1vdmVGb2xkcyhlKTtlbHNlIHdoaWxlKGUubGVuZ3RoKXRoaXMuZXhwYW5kRm9sZHMoZSksZT10aGlzLmdldEZvbGRzSW5SYW5nZShjKX0sdGhpcy5pc1Jvd0ZvbGRlZD1mdW5jdGlvbihhLGIpe3JldHVybiEhdGhpcy5nZXRGb2xkTGluZShhLGIpfSx0aGlzLmdldFJvd0ZvbGRFbmQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldEZvbGRMaW5lKGEsYik7cmV0dXJuIGM/Yy5lbmQucm93OmF9LHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lPWZ1bmN0aW9uKGEsYixjLGQsZSl7ZD09bnVsbCYmKGQ9YS5zdGFydC5yb3csZT0wKSxiPT1udWxsJiYoYj1hLmVuZC5yb3csYz10aGlzLmdldExpbmUoYikubGVuZ3RoKTt2YXIgZj10aGlzLmRvYyxnPSIiO3JldHVybiBhLndhbGsoZnVuY3Rpb24oYSxiLGMsaCl7aWYoYjxkKXJldHVybjtpZihiPT1kKXtpZihjPGUpcmV0dXJuO2g9TWF0aC5tYXgoZSxoKX1hP2crPWE6Zys9Zi5nZXRMaW5lKGIpLnN1YnN0cmluZyhoLGMpfS5iaW5kKHRoaXMpLGIsYyksZ30sdGhpcy5nZXREaXNwbGF5TGluZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldEZvbGRMaW5lKGEpO2lmKCFlKXt2YXIgZjtyZXR1cm4gZj10aGlzLmRvYy5nZXRMaW5lKGEpLGYuc3Vic3RyaW5nKGR8fDAsYnx8Zi5sZW5ndGgpfXJldHVybiB0aGlzLmdldEZvbGREaXNwbGF5TGluZShlLGEsYixjLGQpfSx0aGlzLiRjbG9uZUZvbGREYXRhPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIGE9dGhpcy4kZm9sZERhdGEubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPWIuZm9sZHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmNsb25lKCl9KTtyZXR1cm4gbmV3IGUoYSxjKX0pLGF9LHRoaXMudG9nZ2xlRm9sZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnNlbGVjdGlvbixjPWIuZ2V0UmFuZ2UoKSxkLGU7aWYoYy5pc0VtcHR5KCkpe3ZhciBmPWMuc3RhcnQ7ZD10aGlzLmdldEZvbGRBdChmLnJvdyxmLmNvbHVtbik7aWYoZCl7dGhpcy5leHBhbmRGb2xkKGQpO3JldHVybn0oZT10aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoZikpP2MuY29tcGFyZVBvaW50KGUpPT0xP2MuZW5kPWU6KGMuc3RhcnQ9ZSxjLnN0YXJ0LmNvbHVtbisrLGMuZW5kLmNvbHVtbi0tKTooZT10aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpmLnJvdyxjb2x1bW46Zi5jb2x1bW4rMX0pKT8oYy5jb21wYXJlUG9pbnQoZSk9PTE/Yy5lbmQ9ZTpjLnN0YXJ0PWUsYy5zdGFydC5jb2x1bW4rKyk6Yz10aGlzLmdldENvbW1lbnRGb2xkUmFuZ2UoZi5yb3csZi5jb2x1bW4pfHxjfWVsc2V7dmFyIGc9dGhpcy5nZXRGb2xkc0luUmFuZ2UoYyk7aWYoYSYmZy5sZW5ndGgpe3RoaXMuZXhwYW5kRm9sZHMoZyk7cmV0dXJufWcubGVuZ3RoPT0xJiYoZD1nWzBdKX1kfHwoZD10aGlzLmdldEZvbGRBdChjLnN0YXJ0LnJvdyxjLnN0YXJ0LmNvbHVtbikpO2lmKGQmJmQucmFuZ2UudG9TdHJpbmcoKT09Yy50b1N0cmluZygpKXt0aGlzLmV4cGFuZEZvbGQoZCk7cmV0dXJufXZhciBoPSIuLi4iO2lmKCFjLmlzTXVsdGlMaW5lKCkpe2g9dGhpcy5nZXRUZXh0UmFuZ2UoYyk7aWYoaC5sZW5ndGg8NClyZXR1cm47aD1oLnRyaW0oKS5zdWJzdHJpbmcoMCwyKSsiLi4ifXRoaXMuYWRkRm9sZChoLGMpfSx0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZyh0aGlzLGEsYiksZT1jLmdldEN1cnJlbnRUb2tlbigpO2lmKGUmJi9eY29tbWVudHxzdHJpbmcvLnRlc3QoZS50eXBlKSl7dmFyIGY9bmV3IGQsaD1uZXcgUmVnRXhwKGUudHlwZS5yZXBsYWNlKC9cLi4qLywiXFwuIikpO2RvIGU9Yy5zdGVwQmFja3dhcmQoKTt3aGlsZShlJiZoLnRlc3QoZS50eXBlKSk7Yy5zdGVwRm9yd2FyZCgpLGYuc3RhcnQucm93PWMuZ2V0Q3VycmVudFRva2VuUm93KCksZi5zdGFydC5jb2x1bW49Yy5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSsyLGM9bmV3IGcodGhpcyxhLGIpO2RvIGU9Yy5zdGVwRm9yd2FyZCgpO3doaWxlKGUmJmgudGVzdChlLnR5cGUpKTtyZXR1cm4gZT1jLnN0ZXBCYWNrd2FyZCgpLGYuZW5kLnJvdz1jLmdldEN1cnJlbnRUb2tlblJvdygpLGYuZW5kLmNvbHVtbj1jLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2UudmFsdWUubGVuZ3RoLGZ9fSx0aGlzLmZvbGRBbGw9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvbGRXaWRnZXRzO2I9Ynx8dGhpcy5nZXRMZW5ndGgoKTtmb3IodmFyIGQ9YXx8MDtkPGI7ZCsrKXtjW2RdPT1udWxsJiYoY1tkXT10aGlzLmdldEZvbGRXaWRnZXQoZCkpO2lmKGNbZF0hPSJzdGFydCIpY29udGludWU7dmFyIGU9dGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UoZCk7aWYoZSYmZS5lbmQucm93PGIpdHJ5e3RoaXMuYWRkRm9sZCgiLi4uIixlKX1jYXRjaChmKXt9fX0sdGhpcy4kZm9sZFN0eWxlcz17bWFudWFsOjEsbWFya2JlZ2luOjEsbWFya2JlZ2luZW5kOjF9LHRoaXMuJGZvbGRTdHlsZT0ibWFya2JlZ2luIix0aGlzLnNldEZvbGRTdHlsZT1mdW5jdGlvbihhKXtpZighdGhpcy4kZm9sZFN0eWxlc1thXSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9sZCBzdHlsZTogIithKyJbIitPYmplY3Qua2V5cyh0aGlzLiRmb2xkU3R5bGVzKS5qb2luKCIsICIpKyJdIik7aWYodGhpcy4kZm9sZFN0eWxlPT1hKXJldHVybjt0aGlzLiRmb2xkU3R5bGU9YSxhPT0ibWFudWFsIiYmdGhpcy51bmZvbGQoKTt2YXIgYj10aGlzLiRmb2xkTW9kZTt0aGlzLiRzZXRGb2xkaW5nKG51bGwpLHRoaXMuJHNldEZvbGRpbmcoYil9LHRoaXMuJHNldEZvbGRpbmc9ZnVuY3Rpb24oYSl7aWYodGhpcy4kZm9sZE1vZGU9PWEpcmV0dXJuO3RoaXMuJGZvbGRNb2RlPWEsdGhpcy5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlIix0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyksdGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIpO2lmKCFhfHx0aGlzLiRmb2xkU3R5bGU9PSJtYW51YWwiKXt0aGlzLmZvbGRXaWRnZXRzPW51bGw7cmV0dXJufXRoaXMuZm9sZFdpZGdldHM9W10sdGhpcy5nZXRGb2xkV2lkZ2V0PWEuZ2V0Rm9sZFdpZGdldC5iaW5kKGEsdGhpcyx0aGlzLiRmb2xkU3R5bGUpLHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWEuZ2V0Rm9sZFdpZGdldFJhbmdlLmJpbmQoYSx0aGlzLHRoaXMuJGZvbGRTdHlsZSksdGhpcy4kdXBkYXRlRm9sZFdpZGdldHM9dGhpcy51cGRhdGVGb2xkV2lkZ2V0cy5iaW5kKHRoaXMpLHRoaXMub24oImNoYW5nZSIsdGhpcy4kdXBkYXRlRm9sZFdpZGdldHMpfSx0aGlzLm9uRm9sZFdpZGdldENsaWNrPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRGb2xkV2lkZ2V0KGEpLGQ9dGhpcy5nZXRMaW5lKGEpLGU9Yi5zaGlmdEtleSxmPWV8fGIuY3RybEtleXx8Yi5hbHRLZXl8fGIubWV0YUtleSxnO2M9PSJlbmQiP2c9dGhpcy5nZXRGb2xkQXQoYSwwLC0xKTpnPXRoaXMuZ2V0Rm9sZEF0KGEsZC5sZW5ndGgsMSk7aWYoZyl7Zj90aGlzLnJlbW92ZUZvbGQoZyk6dGhpcy5leHBhbmRGb2xkKGcpO3JldHVybn12YXIgaD10aGlzLmdldEZvbGRXaWRnZXRSYW5nZShhKTtpZihoKXtpZighaC5pc011bHRpTGluZSgpKXtnPXRoaXMuZ2V0Rm9sZEF0KGguc3RhcnQucm93LGguc3RhcnQuY29sdW1uLDEpO2lmKGcmJmguaXNFZXF1YWwoZy5yYW5nZSkpe3RoaXMucmVtb3ZlRm9sZChnKTtyZXR1cm59fWV8fHRoaXMuYWRkRm9sZCgiLi4uIixoKSxmJiZ0aGlzLmZvbGRBbGwoaC5zdGFydC5yb3crMSxoLmVuZC5yb3cpfWVsc2UgZiYmdGhpcy5mb2xkQWxsKGErMSx0aGlzLmdldExlbmd0aCgpKSxiLnRhcmdldC5jbGFzc05hbWUrPSIgaW52YWxpZCJ9LHRoaXMudXBkYXRlRm9sZFdpZGdldHM9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhLGM9Yi5yYW5nZSxkPWMuc3RhcnQucm93LGU9Yy5lbmQucm93LWQ7aWYoZT09PTApdGhpcy5mb2xkV2lkZ2V0c1tkXT1udWxsO2Vsc2UgaWYoYi5hY3Rpb249PSJyZW1vdmVUZXh0Inx8Yi5hY3Rpb249PSJyZW1vdmVMaW5lcyIpdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UoZCxlKzEsbnVsbCk7ZWxzZXt2YXIgZj1BcnJheShlKzEpO2YudW5zaGlmdChkLDEpLHRoaXMuZm9sZFdpZGdldHMuc3BsaWNlLmFwcGx5KHRoaXMuZm9sZFdpZGdldHMsZil9fX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWEoIi4vZm9sZF9saW5lIikuRm9sZExpbmUsZj1hKCIuL2ZvbGQiKS5Gb2xkLGc9YSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yO2IuRm9sZGluZz1ofSksZGVmaW5lKCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRfbGluZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBlKGEsYil7dGhpcy5mb2xkRGF0YT1hLEFycmF5LmlzQXJyYXkoYik/dGhpcy5mb2xkcz1iOmI9dGhpcy5mb2xkcz1bYl07dmFyIGM9YltiLmxlbmd0aC0xXTt0aGlzLnJhbmdlPW5ldyBkKGJbMF0uc3RhcnQucm93LGJbMF0uc3RhcnQuY29sdW1uLGMuZW5kLnJvdyxjLmVuZC5jb2x1bW4pLHRoaXMuc3RhcnQ9dGhpcy5yYW5nZS5zdGFydCx0aGlzLmVuZD10aGlzLnJhbmdlLmVuZCx0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRGb2xkTGluZSh0aGlzKX0sdGhpcyl9InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2U7KChmdW5jdGlvbigpe3RoaXMuc2hpZnRSb3c9ZnVuY3Rpb24oYSl7dGhpcy5zdGFydC5yb3crPWEsdGhpcy5lbmQucm93Kz1hLHRoaXMuZm9sZHMuZm9yRWFjaChmdW5jdGlvbihiKXtiLnN0YXJ0LnJvdys9YSxiLmVuZC5yb3crPWF9KX0sdGhpcy5hZGRGb2xkPWZ1bmN0aW9uKGEpe2lmKGEuc2FtZVJvdyl7aWYoYS5zdGFydC5yb3c8dGhpcy5zdGFydFJvd3x8YS5lbmRSb3c+dGhpcy5lbmRSb3cpdGhyb3ciQ2FuJ3QgYWRkIGEgZm9sZCB0byB0aGlzIEZvbGRMaW5lIGFzIGl0IGhhcyBubyBjb25uZWN0aW9uIjt0aGlzLmZvbGRzLnB1c2goYSksdGhpcy5mb2xkcy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuLWEucmFuZ2UuY29tcGFyZUVuZChiLnN0YXJ0LnJvdyxiLnN0YXJ0LmNvbHVtbil9KSx0aGlzLnJhbmdlLmNvbXBhcmVFbmQoYS5zdGFydC5yb3csYS5zdGFydC5jb2x1bW4pPjA/KHRoaXMuZW5kLnJvdz1hLmVuZC5yb3csdGhpcy5lbmQuY29sdW1uPWEuZW5kLmNvbHVtbik6dGhpcy5yYW5nZS5jb21wYXJlU3RhcnQoYS5lbmQucm93LGEuZW5kLmNvbHVtbik8MCYmKHRoaXMuc3RhcnQucm93PWEuc3RhcnQucm93LHRoaXMuc3RhcnQuY29sdW1uPWEuc3RhcnQuY29sdW1uKX1lbHNlIGlmKGEuc3RhcnQucm93PT10aGlzLmVuZC5yb3cpdGhpcy5mb2xkcy5wdXNoKGEpLHRoaXMuZW5kLnJvdz1hLmVuZC5yb3csdGhpcy5lbmQuY29sdW1uPWEuZW5kLmNvbHVtbjtlbHNlIGlmKGEuZW5kLnJvdz09dGhpcy5zdGFydC5yb3cpdGhpcy5mb2xkcy51bnNoaWZ0KGEpLHRoaXMuc3RhcnQucm93PWEuc3RhcnQucm93LHRoaXMuc3RhcnQuY29sdW1uPWEuc3RhcnQuY29sdW1uO2Vsc2UgdGhyb3ciVHJ5aW5nIHRvIGFkZCBmb2xkIHRvIEZvbGRSb3cgdGhhdCBkb2Vzbid0IGhhdmUgYSBtYXRjaGluZyByb3ciO2EuZm9sZExpbmU9dGhpc30sdGhpcy5jb250YWluc1Jvdz1mdW5jdGlvbihhKXtyZXR1cm4gYT49dGhpcy5zdGFydC5yb3cmJmE8PXRoaXMuZW5kLnJvd30sdGhpcy53YWxrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wLGU9dGhpcy5mb2xkcyxmLGcsaCxpPSEwO2I9PW51bGwmJihiPXRoaXMuZW5kLnJvdyxjPXRoaXMuZW5kLmNvbHVtbik7Zm9yKHZhciBqPTA7ajxlLmxlbmd0aDtqKyspe2Y9ZVtqXSxnPWYucmFuZ2UuY29tcGFyZVN0YXJ0KGIsYyk7aWYoZz09LTEpe2EobnVsbCxiLGMsZCxpKTtyZXR1cm59aD1hKG51bGwsZi5zdGFydC5yb3csZi5zdGFydC5jb2x1bW4sZCxpKSxoPSFoJiZhKGYucGxhY2Vob2xkZXIsZi5zdGFydC5yb3csZi5zdGFydC5jb2x1bW4sZCk7aWYoaHx8Zz09MClyZXR1cm47aT0hZi5zYW1lUm93LGQ9Zi5lbmQuY29sdW1ufWEobnVsbCxiLGMsZCxpKX0sdGhpcy5nZXROZXh0Rm9sZFRvPWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtmb3IodmFyIGU9MDtlPHRoaXMuZm9sZHMubGVuZ3RoO2UrKyl7Yz10aGlzLmZvbGRzW2VdLGQ9Yy5yYW5nZS5jb21wYXJlRW5kKGEsYik7aWYoZD09LTEpcmV0dXJue2ZvbGQ6YyxraW5kOiJhZnRlciJ9O2lmKGQ9PTApcmV0dXJue2ZvbGQ6YyxraW5kOiJpbnNpZGUifX1yZXR1cm4gbnVsbH0sdGhpcy5hZGRSZW1vdmVDaGFycz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5nZXROZXh0Rm9sZFRvKGEsYiksZSxmO2lmKGQpe2U9ZC5mb2xkO2lmKGQua2luZD09Imluc2lkZSImJmUuc3RhcnQuY29sdW1uIT1iJiZlLnN0YXJ0LnJvdyE9YSl0aHJvdyJNb3ZpbmcgY2hhcmFjdGVycyBpbnNpZGUgb2YgYSBmb2xkIHNob3VsZCBuZXZlciBiZSByZWFjaGVkIjtpZihlLnN0YXJ0LnJvdz09YSl7Zj10aGlzLmZvbGRzO3ZhciBnPWYuaW5kZXhPZihlKTtnPT0wJiYodGhpcy5zdGFydC5jb2x1bW4rPWMpO2ZvcihnO2c8Zi5sZW5ndGg7ZysrKXtlPWZbZ10sZS5zdGFydC5jb2x1bW4rPWM7aWYoIWUuc2FtZVJvdylyZXR1cm47ZS5lbmQuY29sdW1uKz1jfXRoaXMuZW5kLmNvbHVtbis9Y319fSx0aGlzLnNwbGl0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXROZXh0Rm9sZFRvKGEsYikuZm9sZCxkPXRoaXMuZm9sZHMsZj10aGlzLmZvbGREYXRhO2lmKCFjKXJldHVybiBudWxsO3ZhciBnPWQuaW5kZXhPZihjKSxoPWRbZy0xXTt0aGlzLmVuZC5yb3c9aC5lbmQucm93LHRoaXMuZW5kLmNvbHVtbj1oLmVuZC5jb2x1bW4sZD1kLnNwbGljZShnLGQubGVuZ3RoLWcpO3ZhciBpPW5ldyBlKGYsZCk7cmV0dXJuIGYuc3BsaWNlKGYuaW5kZXhPZih0aGlzKSsxLDAsaSksaX0sdGhpcy5tZXJnZT1mdW5jdGlvbihhKXt2YXIgYj1hLmZvbGRzO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuYWRkRm9sZChiW2NdKTt2YXIgZD10aGlzLmZvbGREYXRhO2Quc3BsaWNlKGQuaW5kZXhPZihhKSwxKX0sdGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPVt0aGlzLnJhbmdlLnRvU3RyaW5nKCkrIjogWyJdO3JldHVybiB0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oYil7YS5wdXNoKCIgICIrYi50b1N0cmluZygpKX0pLGEucHVzaCgiXSIpLGEuam9pbigiXG4iKX0sdGhpcy5pZHhUb1Bvc2l0aW9uPWZ1bmN0aW9uKGEpe3ZhciBiPTAsYztmb3IodmFyIGQ9MDtkPHRoaXMuZm9sZHMubGVuZ3RoO2QrKyl7dmFyIGM9dGhpcy5mb2xkc1tkXTthLT1jLnN0YXJ0LmNvbHVtbi1iO2lmKGE8MClyZXR1cm57cm93OmMuc3RhcnQucm93LGNvbHVtbjpjLnN0YXJ0LmNvbHVtbithfTthLT1jLnBsYWNlaG9sZGVyLmxlbmd0aDtpZihhPDApcmV0dXJuIGMuc3RhcnQ7Yj1jLmVuZC5jb2x1bW59cmV0dXJue3Jvdzp0aGlzLmVuZC5yb3csY29sdW1uOnRoaXMuZW5kLmNvbHVtbithfX19KSkuY2FsbChlLnByb3RvdHlwZSksYi5Gb2xkTGluZT1lfSksZGVmaW5lKCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWIuRm9sZD1mdW5jdGlvbihhLGIpe3RoaXMuZm9sZExpbmU9bnVsbCx0aGlzLnBsYWNlaG9sZGVyPWIsdGhpcy5yYW5nZT1hLHRoaXMuc3RhcnQ9YS5zdGFydCx0aGlzLmVuZD1hLmVuZCx0aGlzLnNhbWVSb3c9YS5zdGFydC5yb3c9PWEuZW5kLnJvdyx0aGlzLnN1YkZvbGRzPVtdfTsoKGZ1bmN0aW9uKCl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiciJyt0aGlzLnBsYWNlaG9sZGVyKyciICcrdGhpcy5yYW5nZS50b1N0cmluZygpfSx0aGlzLnNldEZvbGRMaW5lPWZ1bmN0aW9uKGEpe3RoaXMuZm9sZExpbmU9YSx0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oYil7Yi5zZXRGb2xkTGluZShhKX0pfSx0aGlzLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yYW5nZS5jbG9uZSgpLGI9bmV3IGQoYSx0aGlzLnBsYWNlaG9sZGVyKTtyZXR1cm4gdGhpcy5zdWJGb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Iuc3ViRm9sZHMucHVzaChhLmNsb25lKCkpfSksYn0sdGhpcy5hZGRTdWJGb2xkPWZ1bmN0aW9uKGEpe2lmKHRoaXMucmFuZ2UuaXNFZXF1YWwoYSkpcmV0dXJuIHRoaXM7aWYoIXRoaXMucmFuZ2UuY29udGFpbnNSYW5nZShhKSl0aHJvdyJBIGZvbGQgY2FuJ3QgaW50ZXJzZWN0IGFscmVhZHkgZXhpc3RpbmcgZm9sZCIrYS5yYW5nZSt0aGlzLnJhbmdlO3ZhciBiPWEucmFuZ2Uuc3RhcnQucm93LGM9YS5yYW5nZS5zdGFydC5jb2x1bW47Zm9yKHZhciBkPTAsZT0tMTtkPHRoaXMuc3ViRm9sZHMubGVuZ3RoO2QrKyl7ZT10aGlzLnN1YkZvbGRzW2RdLnJhbmdlLmNvbXBhcmUoYixjKTtpZihlIT0xKWJyZWFrfXZhciBmPXRoaXMuc3ViRm9sZHNbZF07aWYoZT09MClyZXR1cm4gZi5hZGRTdWJGb2xkKGEpO3ZhciBiPWEucmFuZ2UuZW5kLnJvdyxjPWEucmFuZ2UuZW5kLmNvbHVtbjtmb3IodmFyIGc9ZCxlPS0xO2c8dGhpcy5zdWJGb2xkcy5sZW5ndGg7ZysrKXtlPXRoaXMuc3ViRm9sZHNbZ10ucmFuZ2UuY29tcGFyZShiLGMpO2lmKGUhPTEpYnJlYWt9dmFyIGg9dGhpcy5zdWJGb2xkc1tnXTtpZihlPT0wKXRocm93IkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkIithLnJhbmdlK3RoaXMucmFuZ2U7dmFyIGk9dGhpcy5zdWJGb2xkcy5zcGxpY2UoZCxnLWQsYSk7cmV0dXJuIGEuc2V0Rm9sZExpbmUodGhpcy5mb2xkTGluZSksYX19KSkuY2FsbChkLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS90b2tlbl9pdGVyYXRvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJHNlc3Npb249YSx0aGlzLiRyb3c9Yix0aGlzLiRyb3dUb2tlbnM9YS5nZXRUb2tlbnMoYixiKVswXS50b2tlbnM7dmFyIGQ9YS5nZXRUb2tlbkF0KGIsYyk7dGhpcy4kdG9rZW5JbmRleD1kP2QuaW5kZXg6LTF9OygoZnVuY3Rpb24oKXt0aGlzLnN0ZXBCYWNrd2FyZD1mdW5jdGlvbigpe3RoaXMuJHRva2VuSW5kZXgtPTE7d2hpbGUodGhpcy4kdG9rZW5JbmRleDwwKXt0aGlzLiRyb3ctPTE7aWYodGhpcy4kcm93PDApcmV0dXJuIHRoaXMuJHJvdz0wLG51bGw7dGhpcy4kcm93VG9rZW5zPXRoaXMuJHNlc3Npb24uZ2V0VG9rZW5zKHRoaXMuJHJvdyx0aGlzLiRyb3cpWzBdLnRva2Vucyx0aGlzLiR0b2tlbkluZGV4PXRoaXMuJHJvd1Rva2Vucy5sZW5ndGgtMX1yZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdfSx0aGlzLnN0ZXBGb3J3YXJkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kc2Vzc2lvbi5nZXRMZW5ndGgoKTt0aGlzLiR0b2tlbkluZGV4Kz0xO3doaWxlKHRoaXMuJHRva2VuSW5kZXg+PXRoaXMuJHJvd1Rva2Vucy5sZW5ndGgpe3RoaXMuJHJvdys9MTtpZih0aGlzLiRyb3c+PWEpcmV0dXJuIHRoaXMuJHJvdz1hLTEsbnVsbDt0aGlzLiRyb3dUb2tlbnM9dGhpcy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93LHRoaXMuJHJvdylbMF0udG9rZW5zLHRoaXMuJHRva2VuSW5kZXg9MH1yZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdfSx0aGlzLmdldEN1cnJlbnRUb2tlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF19LHRoaXMuZ2V0Q3VycmVudFRva2VuUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJvd30sdGhpcy5nZXRDdXJyZW50VG9rZW5Db2x1bW49ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRyb3dUb2tlbnMsYj10aGlzLiR0b2tlbkluZGV4LGM9YVtiXS5zdGFydDtpZihjIT09dW5kZWZpbmVkKXJldHVybiBjO2M9MDt3aGlsZShiPjApYi09MSxjKz1hW2JdLnZhbHVlLmxlbmd0aDtyZXR1cm4gY319KSkuY2FsbChkLnByb3RvdHlwZSksYi5Ub2tlbkl0ZXJhdG9yPWR9KSxkZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBlKCl7dGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0PWZ1bmN0aW9uKGEpe2lmKGEuY29sdW1uPT0wKXJldHVybiBudWxsO3ZhciBiPXRoaXMuZ2V0TGluZShhLnJvdykuY2hhckF0KGEuY29sdW1uLTEpO2lmKGI9PSIiKXJldHVybiBudWxsO3ZhciBjPWIubWF0Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1dKS8pO3JldHVybiBjP2NbMV0/dGhpcy4kZmluZENsb3NpbmdCcmFja2V0KGNbMV0sYSk6dGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KGNbMl0sYSk6bnVsbH0sdGhpcy4kYnJhY2tldHM9eyIpIjoiKCIsIigiOiIpIiwiXSI6IlsiLCJbIjoiXSIsInsiOiJ9IiwifSI6InsifSx0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLiRicmFja2V0c1thXSxlPTEsZj1uZXcgZCh0aGlzLGIucm93LGIuY29sdW1uKSxnPWYuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWcpcmV0dXJuIG51bGw7dmFyIGg9bmV3IFJlZ0V4cCgiKFxcLj8iK2cudHlwZS5yZXBsYWNlKCIuIiwifCIpLnJlcGxhY2UoInJwYXJlbiIsImxwYXJlbnxycGFyZW4iKSsiKSsiKSxpPWIuY29sdW1uLWYuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCktMixqPWcudmFsdWU7Zm9yKDs7KXt3aGlsZShpPj0wKXt2YXIgaz1qLmNoYXJBdChpKTtpZihrPT1jKXtlLT0xO2lmKGU9PTApcmV0dXJue3JvdzpmLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjppK2YuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9fWVsc2Ugaz09YSYmKGUrPTEpO2ktPTF9ZG8gZz1mLnN0ZXBCYWNrd2FyZCgpO3doaWxlKGcmJiFoLnRlc3QoZy50eXBlKSk7aWYoZz09bnVsbClicmVhaztqPWcudmFsdWUsaT1qLmxlbmd0aC0xfXJldHVybiBudWxsfSx0aGlzLiRmaW5kQ2xvc2luZ0JyYWNrZXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLiRicmFja2V0c1thXSxlPTEsZj1uZXcgZCh0aGlzLGIucm93LGIuY29sdW1uKSxnPWYuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWcpcmV0dXJuIG51bGw7dmFyIGg9bmV3IFJlZ0V4cCgiKFxcLj8iK2cudHlwZS5yZXBsYWNlKCIuIiwifCIpLnJlcGxhY2UoImxwYXJlbiIsImxwYXJlbnxycGFyZW4iKSsiKSsiKSxpPWIuY29sdW1uLWYuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7Zm9yKDs7KXt2YXIgaj1nLnZhbHVlLGs9ai5sZW5ndGg7d2hpbGUoaTxrKXt2YXIgbD1qLmNoYXJBdChpKTtpZihsPT1jKXtlLT0xO2lmKGU9PTApcmV0dXJue3JvdzpmLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjppK2YuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9fWVsc2UgbD09YSYmKGUrPTEpO2krPTF9ZG8gZz1mLnN0ZXBGb3J3YXJkKCk7d2hpbGUoZyYmIWgudGVzdChnLnR5cGUpKTtpZihnPT1udWxsKWJyZWFrO2k9MH1yZXR1cm4gbnVsbH19InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjtiLkJyYWNrZXRNYXRjaD1lfSksZGVmaW5lKCJhY2Uvc2VhcmNoIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vbGliL2xhbmciKSxlPWEoIi4vbGliL29vcCIpLGY9YSgiLi9yYW5nZSIpLlJhbmdlLGc9ZnVuY3Rpb24oKXt0aGlzLiRvcHRpb25zPXtuZWVkbGU6IiIsYmFja3dhcmRzOiExLHdyYXA6ITEsY2FzZVNlbnNpdGl2ZTohMSx3aG9sZVdvcmQ6ITEsc2NvcGU6Zy5BTEwscmVnRXhwOiExfX07Zy5BTEw9MSxnLlNFTEVDVElPTj0yLGZ1bmN0aW9uKCl7dGhpcy5zZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGUubWl4aW4odGhpcy4kb3B0aW9ucyxhKSx0aGlzfSx0aGlzLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gZC5jb3B5T2JqZWN0KHRoaXMuJG9wdGlvbnMpfSx0aGlzLmZpbmQ9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuJG9wdGlvbnMubmVlZGxlKXJldHVybiBudWxsO2lmKHRoaXMuJG9wdGlvbnMuYmFja3dhcmRzKXZhciBiPXRoaXMuJGJhY2t3YXJkTWF0Y2hJdGVyYXRvcihhKTtlbHNlIGI9dGhpcy4kZm9yd2FyZE1hdGNoSXRlcmF0b3IoYSk7dmFyIGM9bnVsbDtyZXR1cm4gYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBjPWEsITB9KSxjfSx0aGlzLmZpbmRBbGw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kb3B0aW9ucztpZighYi5uZWVkbGUpcmV0dXJuW107aWYoYi5iYWNrd2FyZHMpdmFyIGM9dGhpcy4kYmFja3dhcmRNYXRjaEl0ZXJhdG9yKGEpO2Vsc2UgYz10aGlzLiRmb3J3YXJkTWF0Y2hJdGVyYXRvcihhKTt2YXIgZD0hYi5zdGFydCYmYi53cmFwJiZiLnNjb3BlPT1nLkFMTDtkJiYoYi5zdGFydD17cm93OjAsY29sdW1uOjB9KTt2YXIgZT1bXTtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2UucHVzaChhKX0pLGQmJihiLnN0YXJ0PW51bGwpLGV9LHRoaXMucmVwbGFjZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuJGFzc2VtYmxlUmVnRXhwKCksZD1jLmV4ZWMoYSk7cmV0dXJuIGQmJmRbMF0ubGVuZ3RoPT1hLmxlbmd0aD90aGlzLiRvcHRpb25zLnJlZ0V4cD9hLnJlcGxhY2UoYyxiKTpiOm51bGx9LHRoaXMuJGZvcndhcmRNYXRjaEl0ZXJhdG9yPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJGFzc2VtYmxlUmVnRXhwKCksYz10aGlzO3JldHVybntmb3JFYWNoOmZ1bmN0aW9uKGQpe2MuJGZvcndhcmRMaW5lSXRlcmF0b3IoYSkuZm9yRWFjaChmdW5jdGlvbihhLGUsZil7ZSYmKGE9YS5zdWJzdHJpbmcoZSkpO3ZhciBnPVtdO2EucmVwbGFjZShiLGZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdO3JldHVybiBnLnB1c2goe3N0cjphLG9mZnNldDplK2J9KSxhfSk7Zm9yKHZhciBoPTA7aDxnLmxlbmd0aDtoKyspe3ZhciBpPWdbaF0saj1jLiRyYW5nZUZyb21NYXRjaChmLGkub2Zmc2V0LGkuc3RyLmxlbmd0aCk7aWYoZChqKSlyZXR1cm4hMH19KX19fSx0aGlzLiRiYWNrd2FyZE1hdGNoSXRlcmF0b3I9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kYXNzZW1ibGVSZWdFeHAoKSxjPXRoaXM7cmV0dXJue2ZvckVhY2g6ZnVuY3Rpb24oZCl7Yy4kYmFja3dhcmRMaW5lSXRlcmF0b3IoYSkuZm9yRWFjaChmdW5jdGlvbihhLGUsZil7ZSYmKGE9YS5zdWJzdHJpbmcoZSkpO3ZhciBnPVtdO2EucmVwbGFjZShiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGcucHVzaCh7c3RyOmEsb2Zmc2V0OmUrYn0pLGF9KTtmb3IodmFyIGg9Zy5sZW5ndGgtMTtoPj0wO2gtLSl7dmFyIGk9Z1toXSxqPWMuJHJhbmdlRnJvbU1hdGNoKGYsaS5vZmZzZXQsaS5zdHIubGVuZ3RoKTtpZihkKGopKXJldHVybiEwfX0pfX19LHRoaXMuJHJhbmdlRnJvbU1hdGNoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbmV3IGYoYSxiLGEsYitjKX0sdGhpcy4kYXNzZW1ibGVSZWdFeHA9ZnVuY3Rpb24oKXtpZih0aGlzLiRvcHRpb25zLnJlZ0V4cCl2YXIgYT10aGlzLiRvcHRpb25zLm5lZWRsZTtlbHNlIGE9ZC5lc2NhcGVSZWdFeHAodGhpcy4kb3B0aW9ucy5uZWVkbGUpO3RoaXMuJG9wdGlvbnMud2hvbGVXb3JkJiYoYT0iXFxiIithKyJcXGIiKTt2YXIgYj0iZyI7dGhpcy4kb3B0aW9ucy5jYXNlU2Vuc2l0aXZlfHwoYis9ImkiKTt2YXIgYz1uZXcgUmVnRXhwKGEsYik7cmV0dXJuIGN9LHRoaXMuJGZvcndhcmRMaW5lSXRlcmF0b3I9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gayhlKXt2YXIgZj1hLmdldExpbmUoZSk7cmV0dXJuIGImJmU9PWMuZW5kLnJvdyYmKGY9Zi5zdWJzdHJpbmcoMCxjLmVuZC5jb2x1bW4pKSxqJiZlPT1kLnJvdyYmKGY9Zi5zdWJzdHJpbmcoMCxkLmNvbHVtbikpLGZ9dmFyIGI9dGhpcy4kb3B0aW9ucy5zY29wZT09Zy5TRUxFQ1RJT04sYz10aGlzLiRvcHRpb25zLnJhbmdlfHxhLmdldFNlbGVjdGlvbigpLmdldFJhbmdlKCksZD10aGlzLiRvcHRpb25zLnN0YXJ0fHxjW2I/InN0YXJ0IjoiZW5kIl0sZT1iP2Muc3RhcnQucm93OjAsZj1iP2Muc3RhcnQuY29sdW1uOjAsaD1iP2MuZW5kLnJvdzphLmdldExlbmd0aCgpLTEsaT10aGlzLiRvcHRpb25zLndyYXAsaj0hMTtyZXR1cm57Zm9yRWFjaDpmdW5jdGlvbihhKXt2YXIgYj1kLnJvdyxjPWsoYiksZz1kLmNvbHVtbixsPSExO2o9ITE7d2hpbGUoIWEoYyxnLGIpKXtpZihsKXJldHVybjtiKyssZz0wO2lmKGI+aClpZihpKWI9ZSxnPWYsaj0hMDtlbHNlIHJldHVybjtiPT1kLnJvdyYmKGw9ITApLGM9ayhiKX19fX0sdGhpcy4kYmFja3dhcmRMaW5lSXRlcmF0b3I9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kb3B0aW9ucy5zY29wZT09Zy5TRUxFQ1RJT04sYz10aGlzLiRvcHRpb25zLnJhbmdlfHxhLmdldFNlbGVjdGlvbigpLmdldFJhbmdlKCksZD10aGlzLiRvcHRpb25zLnN0YXJ0fHxjW2I/ImVuZCI6InN0YXJ0Il0sZT1iP2Muc3RhcnQucm93OjAsZj1iP2Muc3RhcnQuY29sdW1uOjAsaD1iP2MuZW5kLnJvdzphLmdldExlbmd0aCgpLTEsaT10aGlzLiRvcHRpb25zLndyYXA7cmV0dXJue2ZvckVhY2g6ZnVuY3Rpb24oZyl7dmFyIGo9ZC5yb3csaz1hLmdldExpbmUoaikuc3Vic3RyaW5nKDAsZC5jb2x1bW4pLGw9MCxtPSExLG49ITE7d2hpbGUoIWcoayxsLGopKXtpZihtKXJldHVybjtqLS0sbD0wO2lmKGo8ZSlpZihpKWo9aCxuPSEwO2Vsc2UgcmV0dXJuO2o9PWQucm93JiYobT0hMCksaz1hLmdldExpbmUoaiksYiYmKGo9PWU/bD1mOmo9PWgmJihrPWsuc3Vic3RyaW5nKDAsYy5lbmQuY29sdW1uKSkpLG4mJmo9PWQucm93JiYobD1kLmNvbHVtbil9fX19fS5jYWxsKGcucHJvdG90eXBlKSxiLlNlYXJjaD1nfSksZGVmaW5lKCJhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIva2V5cyIpLGU9ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BsYXRmb3JtJyBhcmd1bWVudCBtdXN0IGJlIGVpdGhlciAnbWFjJyBvciAnd2luJyIpO3RoaXMucGxhdGZvcm09YSx0aGlzLmNvbW1hbmRzPXt9LHRoaXMuY29tbW1hbmRLZXlCaW5kaW5nPXt9LGImJmIuZm9yRWFjaCh0aGlzLmFkZENvbW1hbmQsdGhpcyl9OygoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYyxlKXt2YXIgZixnPTAsaD1iKGEpO2Zvcih2YXIgaT0wLGo9aC5sZW5ndGg7aTxqO2krKylkLktFWV9NT0RTW2hbaV1dP2d8PWQuS0VZX01PRFNbaFtpXV06Zj1oW2ldfHwiLSI7cmV0dXJue2tleTpmLGhhc2hJZDpnfX1mdW5jdGlvbiBiKGEsYil7cmV0dXJuIGEudG9Mb3dlckNhc2UoKS50cmltKCkuc3BsaXQobmV3IFJlZ0V4cCgiW1xccyBdKlxcLVtcXHMgXSoiLCJnIiksOTk5KX10aGlzLmFkZENvbW1hbmQ9ZnVuY3Rpb24oYSl7dGhpcy5jb21tYW5kc1thLm5hbWVdJiZ0aGlzLnJlbW92ZUNvbW1hbmQoYSksdGhpcy5jb21tYW5kc1thLm5hbWVdPWEsYS5iaW5kS2V5JiZ0aGlzLl9idWlsZEtleUhhc2goYSl9LHRoaXMucmVtb3ZlQ29tbWFuZD1mdW5jdGlvbihhKXt2YXIgYj10eXBlb2YgYT09InN0cmluZyI/YTphLm5hbWU7YT10aGlzLmNvbW1hbmRzW2JdLGRlbGV0ZSB0aGlzLmNvbW1hbmRzW2JdO3ZhciBjPXRoaXMuY29tbW1hbmRLZXlCaW5kaW5nO2Zvcih2YXIgZCBpbiBjKWZvcih2YXIgZSBpbiBjW2RdKWNbZF1bZV09PWEmJmRlbGV0ZSBjW2RdW2VdfSx0aGlzLmFkZENvbW1hbmRzPWZ1bmN0aW9uKGEpe09iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGM9YVtiXTtpZih0eXBlb2YgYz09InN0cmluZyIpcmV0dXJuIHRoaXMuYmluZEtleShjLGIpO3R5cGVvZiBjPT0iZnVuY3Rpb24iJiYoYz17ZXhlYzpjfSksYy5uYW1lfHwoYy5uYW1lPWIpLHRoaXMuYWRkQ29tbWFuZChjKX0sdGhpcyl9LHRoaXMucmVtb3ZlQ29tbWFuZHM9ZnVuY3Rpb24oYSl7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihiKXt0aGlzLnJlbW92ZUNvbW1hbmQoYVtiXSl9LHRoaXMpfSx0aGlzLmJpbmRLZXk9ZnVuY3Rpb24oYixjKXtpZighYilyZXR1cm47dmFyIGQ9dGhpcy5jb21tbWFuZEtleUJpbmRpbmc7Yi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGU9YShiLGMpLGY9ZS5oYXNoSWQ7KGRbZl18fChkW2ZdPXt9KSlbZS5rZXldPWN9KX0sdGhpcy5iaW5kS2V5cz1mdW5jdGlvbihhKXtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3RoaXMuYmluZEtleShiLGFbYl0pfSx0aGlzKX0sdGhpcy5fYnVpbGRLZXlIYXNoPWZ1bmN0aW9uKGEpe3ZhciBiPWEuYmluZEtleTtpZighYilyZXR1cm47dmFyIGM9dHlwZW9mIGI9PSJzdHJpbmciP2I6Ylt0aGlzLnBsYXRmb3JtXTt0aGlzLmJpbmRLZXkoYyxhKX0sdGhpcy5maW5kS2V5Q29tbWFuZD1mdW5jdGlvbiBjKGEsYil7dHlwZW9mIGI9PSJudW1iZXIiJiYoYj1kLmtleUNvZGVUb1N0cmluZyhiKSk7dmFyIGM9dGhpcy5jb21tbWFuZEtleUJpbmRpbmc7cmV0dXJuIGNbYV0mJmNbYV1bYi50b0xvd2VyQ2FzZSgpXX0sdGhpcy5leGVjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmciJiYoYT10aGlzLmNvbW1hbmRzW2FdKSxhP2ImJmIuJHJlYWRPbmx5JiYhYS5yZWFkT25seT8hMTooYS5leGVjKGIsY3x8e30pLCEwKTohMX0sdGhpcy50b2dnbGVSZWNvcmRpbmc9ZnVuY3Rpb24oKXtpZih0aGlzLiRpblJlcGxheSlyZXR1cm47cmV0dXJuIHRoaXMucmVjb3JkaW5nPyh0aGlzLm1hY3JvLnBvcCgpLHRoaXMuZXhlYz10aGlzLm5vcm1hbF9leGVjLHRoaXMubWFjcm8ubGVuZ3RofHwodGhpcy5tYWNybz10aGlzLm9sZE1hY3JvKSx0aGlzLnJlY29yZGluZz0hMSk6KHRoaXMub2xkTWFjcm89dGhpcy5tYWNybyx0aGlzLm1hY3JvPVtdLHRoaXMubm9ybWFsX2V4ZWM9dGhpcy5leGVjLHRoaXMuZXhlYz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubWFjcm8ucHVzaChbYSxjXSksdGhpcy5ub3JtYWxfZXhlYyhhLGIsYyl9LHRoaXMucmVjb3JkaW5nPSEwKX0sdGhpcy5yZXBsYXk9ZnVuY3Rpb24oYSl7aWYodGhpcy4kaW5SZXBsYXl8fCF0aGlzLm1hY3JvKXJldHVybjtpZih0aGlzLnJlY29yZGluZylyZXR1cm4gdGhpcy50b2dnbGVSZWNvcmRpbmcoKTt0cnl7dGhpcy4kaW5SZXBsYXk9ITAsdGhpcy5tYWNyby5mb3JFYWNoKGZ1bmN0aW9uKGIpe3R5cGVvZiBiPT0ic3RyaW5nIj90aGlzLmV4ZWMoYixhKTp0aGlzLmV4ZWMoYlswXSxhLGJbMV0pfSx0aGlzKX1maW5hbGx5e3RoaXMuJGluUmVwbGF5PSExfX0sdGhpcy50cmltTWFjcm89ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYVswXSE9InN0cmluZyImJihhWzBdPWFbMF0ubmFtZSksYVsxXXx8KGE9YVswXSksYX0pfX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLkNvbW1hbmRNYW5hZ2VyPWV9KSxkZWZpbmUoImFjZS91bmRvbWFuYWdlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9OygoZnVuY3Rpb24oKXt0aGlzLmV4ZWN1dGU9ZnVuY3Rpb24oYSl7dmFyIGI9YS5hcmdzWzBdO3RoaXMuJGRvYz1hLmFyZ3NbMV0sdGhpcy4kdW5kb1N0YWNrLnB1c2goYiksdGhpcy4kcmVkb1N0YWNrPVtdfSx0aGlzLnVuZG89ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy4kdW5kb1N0YWNrLnBvcCgpLGM9bnVsbDtyZXR1cm4gYiYmKGM9dGhpcy4kZG9jLnVuZG9DaGFuZ2VzKGIsYSksdGhpcy4kcmVkb1N0YWNrLnB1c2goYikpLGN9LHRoaXMucmVkbz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLiRyZWRvU3RhY2sucG9wKCksYz1udWxsO3JldHVybiBiJiYoYz10aGlzLiRkb2MucmVkb0NoYW5nZXMoYixhKSx0aGlzLiR1bmRvU3RhY2sucHVzaChiKSksY30sdGhpcy5yZXNldD1mdW5jdGlvbigpe3RoaXMuJHVuZG9TdGFjaz1bXSx0aGlzLiRyZWRvU3RhY2s9W119LHRoaXMuaGFzVW5kbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR1bmRvU3RhY2subGVuZ3RoPjB9LHRoaXMuaGFzUmVkbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWRvU3RhY2subGVuZ3RoPjB9fSkpLmNhbGwoZC5wcm90b3R5cGUpLGIuVW5kb01hbmFnZXI9ZH0pLGRlZmluZSgiYWNlL3ZpcnR1YWxfcmVuZGVyZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvdXNlcmFnZW50IiwiYWNlL2xheWVyL2d1dHRlciIsImFjZS9sYXllci9tYXJrZXIiLCJhY2UvbGF5ZXIvdGV4dCIsImFjZS9sYXllci9jdXJzb3IiLCJhY2Uvc2Nyb2xsYmFyIiwiYWNlL3JlbmRlcmxvb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJ0ZXh0IWFjZS9jc3MvZWRpdG9yLmNzcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi9saWIvb29wIiksZT1hKCIuL2xpYi9kb20iKSxmPWEoIi4vbGliL2V2ZW50IiksZz1hKCIuL2xpYi91c2VyYWdlbnQiKSxoPWEoIi4vbGF5ZXIvZ3V0dGVyIikuR3V0dGVyLGk9YSgiLi9sYXllci9tYXJrZXIiKS5NYXJrZXIsaj1hKCIuL2xheWVyL3RleHQiKS5UZXh0LGs9YSgiLi9sYXllci9jdXJzb3IiKS5DdXJzb3IsbD1hKCIuL3Njcm9sbGJhciIpLlNjcm9sbEJhcixtPWEoIi4vcmVuZGVybG9vcCIpLlJlbmRlckxvb3Asbj1hKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLG89YSgidGV4dCEuL2Nzcy9lZGl0b3IuY3NzIik7ZS5pbXBvcnRDc3NTdHJpbmcobywiYWNlX2VkaXRvciIpO3ZhciBwPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpczt0aGlzLmNvbnRhaW5lcj1hLGUuYWRkQ3NzQ2xhc3MoYSwiYWNlX2VkaXRvciIpLHRoaXMuc2V0VGhlbWUoYiksdGhpcy4kZ3V0dGVyPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy4kZ3V0dGVyLmNsYXNzTmFtZT0iYWNlX2d1dHRlciIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyKSx0aGlzLnNjcm9sbGVyPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxlci5jbGFzc05hbWU9ImFjZV9zY3JvbGxlciIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxlciksdGhpcy5jb250ZW50PWUuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250ZW50LmNsYXNzTmFtZT0iYWNlX2NvbnRlbnQiLHRoaXMuc2Nyb2xsZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KSx0aGlzLiRndXR0ZXJMYXllcj1uZXcgaCh0aGlzLiRndXR0ZXIpLHRoaXMuJGd1dHRlckxheWVyLm9uKCJjaGFuZ2VHdXR0ZXJXaWR0aCIsdGhpcy5vblJlc2l6ZS5iaW5kKHRoaXMsITApKSx0aGlzLiRtYXJrZXJCYWNrPW5ldyBpKHRoaXMuY29udGVudCk7dmFyIGQ9dGhpcy4kdGV4dExheWVyPW5ldyBqKHRoaXMuY29udGVudCk7dGhpcy5jYW52YXM9ZC5lbGVtZW50LHRoaXMuJG1hcmtlckZyb250PW5ldyBpKHRoaXMuY29udGVudCksdGhpcy5jaGFyYWN0ZXJXaWR0aD1kLmdldENoYXJhY3RlcldpZHRoKCksdGhpcy5saW5lSGVpZ2h0PWQuZ2V0TGluZUhlaWdodCgpLHRoaXMuJGN1cnNvckxheWVyPW5ldyBrKHRoaXMuY29udGVudCksdGhpcy4kY3Vyc29yUGFkZGluZz04LHRoaXMuJGhvcml6U2Nyb2xsPSEwLHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZT0hMCx0aGlzLnNjcm9sbEJhcj1uZXcgbChhKSx0aGlzLnNjcm9sbEJhci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGZ1bmN0aW9uKGEpe2Muc2Vzc2lvbi5zZXRTY3JvbGxUb3AoYS5kYXRhKX0pLHRoaXMuc2Nyb2xsVG9wPTAsdGhpcy5zY3JvbGxMZWZ0PTAsZi5hZGRMaXN0ZW5lcih0aGlzLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7Yy5zZXNzaW9uLnNldFNjcm9sbExlZnQoYy5zY3JvbGxlci5zY3JvbGxMZWZ0KX0pLHRoaXMuY3Vyc29yUG9zPXtyb3c6MCxjb2x1bW46MH0sdGhpcy4kdGV4dExheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUNoYXJhY3RlclNpemUiLGZ1bmN0aW9uKCl7Yy5jaGFyYWN0ZXJXaWR0aD1kLmdldENoYXJhY3RlcldpZHRoKCksYy5saW5lSGVpZ2h0PWQuZ2V0TGluZUhlaWdodCgpLGMuJHVwZGF0ZVByaW50TWFyZ2luKCksYy5vblJlc2l6ZSghMCksYy4kbG9vcC5zY2hlZHVsZShjLkNIQU5HRV9GVUxMKX0pLHRoaXMuJHNpemU9e3dpZHRoOjAsaGVpZ2h0OjAsc2Nyb2xsZXJIZWlnaHQ6MCxzY3JvbGxlcldpZHRoOjB9LHRoaXMubGF5ZXJDb25maWc9e3dpZHRoOjEscGFkZGluZzowLGZpcnN0Um93OjAsZmlyc3RSb3dTY3JlZW46MCxsYXN0Um93OjAsbGluZUhlaWdodDoxLGNoYXJhY3RlcldpZHRoOjEsbWluSGVpZ2h0OjEsbWF4SGVpZ2h0OjEsb2Zmc2V0OjAsaGVpZ2h0OjF9LHRoaXMuJGxvb3A9bmV3IG0odGhpcy4kcmVuZGVyQ2hhbmdlcy5iaW5kKHRoaXMpLHRoaXMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCksdGhpcy5zZXRQYWRkaW5nKDQpLHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9OygoZnVuY3Rpb24oKXt0aGlzLnNob3dHdXR0ZXI9ITAsdGhpcy5DSEFOR0VfQ1VSU09SPTEsdGhpcy5DSEFOR0VfTUFSS0VSPTIsdGhpcy5DSEFOR0VfR1VUVEVSPTQsdGhpcy5DSEFOR0VfU0NST0xMPTgsdGhpcy5DSEFOR0VfTElORVM9MTYsdGhpcy5DSEFOR0VfVEVYVD0zMix0aGlzLkNIQU5HRV9TSVpFPTY0LHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLPTEyOCx0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQ9MjU2LHRoaXMuQ0hBTkdFX0ZVTEw9NTEyLHRoaXMuQ0hBTkdFX0hfU0NST0xMPTEwMjQsZC5pbXBsZW1lbnQodGhpcyxuKSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oYSl7dGhpcy5zZXNzaW9uPWEsdGhpcy4kY3Vyc29yTGF5ZXIuc2V0U2Vzc2lvbihhKSx0aGlzLiRtYXJrZXJCYWNrLnNldFNlc3Npb24oYSksdGhpcy4kbWFya2VyRnJvbnQuc2V0U2Vzc2lvbihhKSx0aGlzLiRndXR0ZXJMYXllci5zZXRTZXNzaW9uKGEpLHRoaXMuJHRleHRMYXllci5zZXRTZXNzaW9uKGEpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCl9LHRoaXMudXBkYXRlTGluZXM9ZnVuY3Rpb24oYSxiKXtiPT09dW5kZWZpbmVkJiYoYj1JbmZpbml0eSksdGhpcy4kY2hhbmdlZExpbmVzPyh0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3c+YSYmKHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdz1hKSx0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdzxiJiYodGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3c9YikpOnRoaXMuJGNoYW5nZWRMaW5lcz17Zmlyc3RSb3c6YSxsYXN0Um93OmJ9LHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTElORVMpfSx0aGlzLnVwZGF0ZVRleHQ9ZnVuY3Rpb24oKXt0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpfSx0aGlzLnVwZGF0ZUZ1bGw9ZnVuY3Rpb24oKXt0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpfSx0aGlzLnVwZGF0ZUZvbnRTaXplPWZ1bmN0aW9uKCl7dGhpcy4kdGV4dExheWVyLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKX0sdGhpcy5vblJlc2l6ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkNIQU5HRV9TSVpFLGM9dGhpcy4kc2l6ZSxkPWUuZ2V0SW5uZXJIZWlnaHQodGhpcy5jb250YWluZXIpO2lmKGF8fGMuaGVpZ2h0IT1kKWMuaGVpZ2h0PWQsdGhpcy5zY3JvbGxlci5zdHlsZS5oZWlnaHQ9ZCsicHgiLGMuc2Nyb2xsZXJIZWlnaHQ9dGhpcy5zY3JvbGxlci5jbGllbnRIZWlnaHQsdGhpcy5zY3JvbGxCYXIuc2V0SGVpZ2h0KGMuc2Nyb2xsZXJIZWlnaHQpLHRoaXMuc2Vzc2lvbiYmKHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodGhpcy5nZXRTY3JvbGxUb3AoKSksYnw9dGhpcy5DSEFOR0VfRlVMTCk7dmFyIGY9ZS5nZXRJbm5lcldpZHRoKHRoaXMuY29udGFpbmVyKTtpZihhfHxjLndpZHRoIT1mKXtjLndpZHRoPWY7dmFyIGc9dGhpcy5zaG93R3V0dGVyP3RoaXMuJGd1dHRlci5vZmZzZXRXaWR0aDowO3RoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdD1nKyJweCIsYy5zY3JvbGxlcldpZHRoPU1hdGgubWF4KDAsZi1nLXRoaXMuc2Nyb2xsQmFyLmdldFdpZHRoKCkpLHRoaXMuc2Nyb2xsZXIuc3R5bGUud2lkdGg9Yy5zY3JvbGxlcldpZHRoKyJweCI7aWYodGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkmJnRoaXMuYWRqdXN0V3JhcExpbWl0KCl8fGEpYnw9dGhpcy5DSEFOR0VfRlVMTH10aGlzLiRsb29wLnNjaGVkdWxlKGIpfSx0aGlzLmFkanVzdFdyYXBMaW1pdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aC10aGlzLiRwYWRkaW5nKjIsYj1NYXRoLmZsb29yKGEvdGhpcy5jaGFyYWN0ZXJXaWR0aCk7cmV0dXJuIHRoaXMuc2Vzc2lvbi5hZGp1c3RXcmFwTGltaXQoYil9LHRoaXMuc2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oYSl7dGhpcy4kdGV4dExheWVyLnNldFNob3dJbnZpc2libGVzKGEpJiZ0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpfSx0aGlzLmdldFNob3dJbnZpc2libGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRleHRMYXllci5zaG93SW52aXNpYmxlc30sdGhpcy4kc2hvd1ByaW50TWFyZ2luPSEwLHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luPWZ1bmN0aW9uKGEpe3RoaXMuJHNob3dQcmludE1hcmdpbj1hLHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LHRoaXMuZ2V0U2hvd1ByaW50TWFyZ2luPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNob3dQcmludE1hcmdpbn0sdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW49ODAsdGhpcy5zZXRQcmludE1hcmdpbkNvbHVtbj1mdW5jdGlvbihhKXt0aGlzLiRwcmludE1hcmdpbkNvbHVtbj1hLHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW59LHRoaXMuZ2V0U2hvd0d1dHRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dHdXR0ZXJ9LHRoaXMuc2V0U2hvd0d1dHRlcj1mdW5jdGlvbihhKXtpZih0aGlzLnNob3dHdXR0ZXI9PT1hKXJldHVybjt0aGlzLiRndXR0ZXIuc3R5bGUuZGlzcGxheT1hPyJibG9jayI6Im5vbmUiLHRoaXMuc2hvd0d1dHRlcj1hLHRoaXMub25SZXNpemUoITApfSx0aGlzLiR1cGRhdGVQcmludE1hcmdpbj1mdW5jdGlvbigpe3ZhciBhO2lmKCF0aGlzLiRzaG93UHJpbnRNYXJnaW4mJiF0aGlzLiRwcmludE1hcmdpbkVsKXJldHVybjt0aGlzLiRwcmludE1hcmdpbkVsfHwoYT1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGEuY2xhc3NOYW1lPSJhY2VfcHJpbnRfbWFyZ2luX2xheWVyIix0aGlzLiRwcmludE1hcmdpbkVsPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy4kcHJpbnRNYXJnaW5FbC5jbGFzc05hbWU9ImFjZV9wcmludF9tYXJnaW4iLGEuYXBwZW5kQ2hpbGQodGhpcy4kcHJpbnRNYXJnaW5FbCksdGhpcy5jb250ZW50Lmluc2VydEJlZm9yZShhLHRoaXMuJHRleHRMYXllci5lbGVtZW50KSk7dmFyIGI9dGhpcy4kcHJpbnRNYXJnaW5FbC5zdHlsZTtiLmxlZnQ9dGhpcy5jaGFyYWN0ZXJXaWR0aCp0aGlzLiRwcmludE1hcmdpbkNvbHVtbit0aGlzLiRwYWRkaW5nKyJweCIsYi52aXNpYmlsaXR5PXRoaXMuJHNob3dQcmludE1hcmdpbj8idmlzaWJsZSI6ImhpZGRlbiJ9LHRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lcn0sdGhpcy5nZXRNb3VzZUV2ZW50VGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudH0sdGhpcy5nZXRUZXh0QXJlYUNvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lcn0sdGhpcy5tb3ZlVGV4dEFyZWFUb0N1cnNvcj1mdW5jdGlvbihhKXtpZihnLmlzSUUpcmV0dXJuO2lmKHRoaXMubGF5ZXJDb25maWcubGFzdFJvdz09PTApcmV0dXJuO3ZhciBiPXRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oKTtpZighYilyZXR1cm47dmFyIGM9dGhpcy5jb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dGhpcy5sYXllckNvbmZpZy5vZmZzZXQ7YS5zdHlsZS5sZWZ0PWMubGVmdCtiLmxlZnQrInB4IixhLnN0eWxlLnRvcD1jLnRvcCtiLnRvcC10aGlzLnNjcm9sbFRvcCtkKyJweCJ9LHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3d9LHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdysodGhpcy5sYXllckNvbmZpZy5vZmZzZXQ9PT0wPzA6MSl9LHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3ZhciBhPU1hdGguZmxvb3IoKHRoaXMubGF5ZXJDb25maWcuaGVpZ2h0K3RoaXMubGF5ZXJDb25maWcub2Zmc2V0KS90aGlzLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQpO3JldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93LTErYX0sdGhpcy5nZXRMYXN0VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3d9LHRoaXMuJHBhZGRpbmc9bnVsbCx0aGlzLnNldFBhZGRpbmc9ZnVuY3Rpb24oYSl7dGhpcy4kcGFkZGluZz1hLHRoaXMuJHRleHRMYXllci5zZXRQYWRkaW5nKGEpLHRoaXMuJGN1cnNvckxheWVyLnNldFBhZGRpbmcoYSksdGhpcy4kbWFya2VyRnJvbnQuc2V0UGFkZGluZyhhKSx0aGlzLiRtYXJrZXJCYWNrLnNldFBhZGRpbmcoYSksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKSx0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpfSx0aGlzLmdldEhTY3JvbGxCYXJBbHdheXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZX0sdGhpcy5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZT1mdW5jdGlvbihhKXt0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUhPWEmJih0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGU9YSwoIXRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZXx8IXRoaXMuJGhvcml6U2Nyb2xsKSYmdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpKX0sdGhpcy4kdXBkYXRlU2Nyb2xsQmFyPWZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxCYXIuc2V0SW5uZXJIZWlnaHQodGhpcy5sYXllckNvbmZpZy5tYXhIZWlnaHQpLHRoaXMuc2Nyb2xsQmFyLnNldFNjcm9sbFRvcCh0aGlzLnNjcm9sbFRvcCl9LHRoaXMuJHJlbmRlckNoYW5nZXM9ZnVuY3Rpb24oYSl7aWYoIWF8fCF0aGlzLnNlc3Npb24pcmV0dXJuOyhhJnRoaXMuQ0hBTkdFX0ZVTEx8fGEmdGhpcy5DSEFOR0VfU0laRXx8YSZ0aGlzLkNIQU5HRV9URVhUfHxhJnRoaXMuQ0hBTkdFX0xJTkVTfHxhJnRoaXMuQ0hBTkdFX1NDUk9MTCkmJnRoaXMuJGNvbXB1dGVMYXllckNvbmZpZygpO2lmKGEmdGhpcy5DSEFOR0VfRlVMTCl7dGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSx0aGlzLnNob3dHdXR0ZXImJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSx0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSx0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUodGhpcy5sYXllckNvbmZpZyksdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuJHVwZGF0ZVNjcm9sbEJhcigpO3JldHVybn1pZihhJnRoaXMuQ0hBTkdFX1NDUk9MTCl7YSZ0aGlzLkNIQU5HRV9URVhUfHxhJnRoaXMuQ0hBTkdFX0xJTkVTP3RoaXMuJHRleHRMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk6dGhpcy4kdGV4dExheWVyLnNjcm9sbExpbmVzKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuJG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSx0aGlzLiRjdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyksdGhpcy4kdXBkYXRlU2Nyb2xsQmFyKCk7cmV0dXJufWEmdGhpcy5DSEFOR0VfVEVYVD8odGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSx0aGlzLnNob3dHdXR0ZXImJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSk6YSZ0aGlzLkNIQU5HRV9MSU5FUz8odGhpcy4kdXBkYXRlTGluZXMoKSx0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKSx0aGlzLnNob3dHdXR0ZXImJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSk6YSZ0aGlzLkNIQU5HRV9HVVRURVImJnRoaXMuc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpLGEmdGhpcy5DSEFOR0VfQ1VSU09SJiZ0aGlzLiRjdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyksYSYodGhpcy5DSEFOR0VfTUFSS0VSfHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVCkmJnRoaXMuJG1hcmtlckZyb250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSxhJih0aGlzLkNIQU5HRV9NQVJLRVJ8dGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spJiZ0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKSxhJnRoaXMuQ0hBTkdFX1NJWkUmJnRoaXMuJHVwZGF0ZVNjcm9sbEJhcigpLGEmdGhpcy5DSEFOR0VfSF9TQ1JPTEwmJih0aGlzLnNjcm9sbGVyLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0KX0sdGhpcy4kY29tcHV0ZUxheWVyQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXNzaW9uLGI9dGhpcy5zY3JvbGxUb3AldGhpcy5saW5lSGVpZ2h0LGM9dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCt0aGlzLmxpbmVIZWlnaHQsZD10aGlzLiRnZXRMb25nZXN0TGluZSgpLGU9dGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxlfHx0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgtZDwwLGY9dGhpcy4kaG9yaXpTY3JvbGwhPT1lO3RoaXMuJGhvcml6U2Nyb2xsPWUsZiYmKHRoaXMuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3dYPWU/InNjcm9sbCI6ImhpZGRlbiIpO3ZhciBnPXRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5MZW5ndGgoKSp0aGlzLmxpbmVIZWlnaHQ7dGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChNYXRoLm1heCgwLE1hdGgubWluKHRoaXMuc2Nyb2xsVG9wLGctdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkpKTt2YXIgaD1NYXRoLmNlaWwoYy90aGlzLmxpbmVIZWlnaHQpLTEsaT1NYXRoLm1heCgwLE1hdGgucm91bmQoKHRoaXMuc2Nyb2xsVG9wLWIpL3RoaXMubGluZUhlaWdodCkpLGo9aStoLGssbCxtPXtsaW5lSGVpZ2h0OnRoaXMubGluZUhlaWdodH07aT1hLnNjcmVlblRvRG9jdW1lbnRSb3coaSwwKTt2YXIgbj1hLmdldEZvbGRMaW5lKGkpO24mJihpPW4uc3RhcnQucm93KSxrPWEuZG9jdW1lbnRUb1NjcmVlblJvdyhpLDApLGw9YS5nZXRSb3dIZWlnaHQobSxpKSxqPU1hdGgubWluKGEuc2NyZWVuVG9Eb2N1bWVudFJvdyhqLDApLGEuZ2V0TGVuZ3RoKCktMSksYz10aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0K2EuZ2V0Um93SGVpZ2h0KG0saikrbCxiPXRoaXMuc2Nyb2xsVG9wLWsqdGhpcy5saW5lSGVpZ2h0LHRoaXMubGF5ZXJDb25maWc9e3dpZHRoOmQscGFkZGluZzp0aGlzLiRwYWRkaW5nLGZpcnN0Um93OmksZmlyc3RSb3dTY3JlZW46ayxsYXN0Um93OmosbGluZUhlaWdodDp0aGlzLmxpbmVIZWlnaHQsY2hhcmFjdGVyV2lkdGg6dGhpcy5jaGFyYWN0ZXJXaWR0aCxtaW5IZWlnaHQ6YyxtYXhIZWlnaHQ6ZyxvZmZzZXQ6YixoZWlnaHQ6dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodH0sdGhpcy4kZ3V0dGVyTGF5ZXIuZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9LWIrInB4Iix0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luVG9wPS1iKyJweCIsdGhpcy5jb250ZW50LnN0eWxlLndpZHRoPWQrMip0aGlzLiRwYWRkaW5nKyJweCIsdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodD1jKyJweCIsZiYmdGhpcy5vblJlc2l6ZSghMCl9LHRoaXMuJHVwZGF0ZUxpbmVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93LGI9dGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3c7dGhpcy4kY2hhbmdlZExpbmVzPW51bGw7dmFyIGM9dGhpcy5sYXllckNvbmZpZztpZihjLndpZHRoIT10aGlzLiRnZXRMb25nZXN0TGluZSgpKXJldHVybiB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKGMpO2lmKGE+Yy5sYXN0Um93KzEpcmV0dXJuO2lmKGI8Yy5maXJzdFJvdylyZXR1cm47aWYoYj09PUluZmluaXR5KXt0aGlzLnNob3dHdXR0ZXImJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShjKSx0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKGMpO3JldHVybn10aGlzLiR0ZXh0TGF5ZXIudXBkYXRlTGluZXMoYyxhLGIpfSx0aGlzLiRnZXRMb25nZXN0TGluZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5XaWR0aCgpO3JldHVybiB0aGlzLiR0ZXh0TGF5ZXIuc2hvd0ludmlzaWJsZXMmJihhKz0xKSxNYXRoLm1heCh0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgtMip0aGlzLiRwYWRkaW5nLE1hdGgucm91bmQoYSp0aGlzLmNoYXJhY3RlcldpZHRoKSl9LHRoaXMudXBkYXRlRnJvbnRNYXJrZXJzPWZ1bmN0aW9uKCl7dGhpcy4kbWFya2VyRnJvbnQuc2V0TWFya2Vycyh0aGlzLnNlc3Npb24uZ2V0TWFya2VycyghMCkpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UKX0sdGhpcy51cGRhdGVCYWNrTWFya2Vycz1mdW5jdGlvbigpe3RoaXMuJG1hcmtlckJhY2suc2V0TWFya2Vycyh0aGlzLnNlc3Npb24uZ2V0TWFya2VycygpKSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLKX0sdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGEsYil7dGhpcy4kZ3V0dGVyTGF5ZXIuYWRkR3V0dGVyRGVjb3JhdGlvbihhLGIpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX0sdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGEsYil7dGhpcy4kZ3V0dGVyTGF5ZXIucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbihhLGIpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX0sdGhpcy5zZXRCcmVha3BvaW50cz1mdW5jdGlvbihhKXt0aGlzLiRndXR0ZXJMYXllci5zZXRCcmVha3BvaW50cyhhKSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRFUil9LHRoaXMuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oYSl7dGhpcy4kZ3V0dGVyTGF5ZXIuc2V0QW5ub3RhdGlvbnMoYSksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpfSx0aGlzLnVwZGF0ZUN1cnNvcj1mdW5jdGlvbigpe3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfQ1VSU09SKX0sdGhpcy5oaWRlQ3Vyc29yPWZ1bmN0aW9uKCl7dGhpcy4kY3Vyc29yTGF5ZXIuaGlkZUN1cnNvcigpfSx0aGlzLnNob3dDdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLiRjdXJzb3JMYXllci5zaG93Q3Vyc29yKCl9LHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXc9ZnVuY3Rpb24oKXtpZih0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0PT09MClyZXR1cm47dmFyIGE9dGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbigpLGI9YS5sZWZ0LGM9YS50b3A7dGhpcy5zY3JvbGxUb3A+YyYmdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChjKSx0aGlzLnNjcm9sbFRvcCt0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0PGMrdGhpcy5saW5lSGVpZ2h0JiZ0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKGMrdGhpcy5saW5lSGVpZ2h0LXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpO3ZhciBkPXRoaXMuc2Nyb2xsTGVmdDtkPmImJihiPHRoaXMuJHBhZGRpbmcrMip0aGlzLmxheWVyQ29uZmlnLmNoYXJhY3RlcldpZHRoJiYoYj0wKSx0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChiKSksZCt0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGg8Yit0aGlzLmNoYXJhY3RlcldpZHRoJiZ0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChNYXRoLnJvdW5kKGIrdGhpcy5jaGFyYWN0ZXJXaWR0aC10aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgpKX0sdGhpcy5nZXRTY3JvbGxUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpfSx0aGlzLmdldFNjcm9sbExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpfSx0aGlzLmdldFNjcm9sbFRvcFJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbFRvcC90aGlzLmxpbmVIZWlnaHR9LHRoaXMuZ2V0U2Nyb2xsQm90dG9tUm93PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5mbG9vcigodGhpcy5zY3JvbGxUb3ArdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkvdGhpcy5saW5lSGVpZ2h0KS0xKX0sdGhpcy5zY3JvbGxUb1Jvdz1mdW5jdGlvbihhKXt0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKGEqdGhpcy5saW5lSGVpZ2h0KX0sdGhpcy5zY3JvbGxUb0xpbmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKHtyb3c6YSxjb2x1bW46MH0pLGQ9Yy50b3A7YiYmKGQtPXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQvMiksdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChkKX0sdGhpcy5zY3JvbGxUb1k9ZnVuY3Rpb24oYSl7dGhpcy5zY3JvbGxUb3AhPT1hJiYodGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpLHRoaXMuc2Nyb2xsVG9wPWEpfSx0aGlzLnNjcm9sbFRvWD1mdW5jdGlvbihhKXthPD10aGlzLiRwYWRkaW5nJiYoYT0wKSx0aGlzLnNjcm9sbExlZnQhPT1hJiYodGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9IX1NDUk9MTCksdGhpcy5zY3JvbGxMZWZ0PWEpfSx0aGlzLnNjcm9sbEJ5PWZ1bmN0aW9uKGEsYil7YiYmdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkrYiksYSYmdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQodGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKSthKX0sdGhpcy5pc1Njcm9sbGFibGVCeT1mdW5jdGlvbihhLGIpe2lmKGI8MCYmdGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpPjApcmV0dXJuITA7aWYoYj4wJiZ0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkrdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodDx0aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodClyZXR1cm4hMH0sdGhpcy5zY3JlZW5Ub1RleHRDb29yZGluYXRlcz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1NYXRoLnJvdW5kKChhK3RoaXMuc2Nyb2xsTGVmdC1jLmxlZnQtdGhpcy4kcGFkZGluZy1lLmdldFBhZ2VTY3JvbGxMZWZ0KCkpL3RoaXMuY2hhcmFjdGVyV2lkdGgpLGY9TWF0aC5mbG9vcigoYit0aGlzLnNjcm9sbFRvcC1jLnRvcC1lLmdldFBhZ2VTY3JvbGxUb3AoKSkvdGhpcy5saW5lSGVpZ2h0KTtyZXR1cm4gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihmLE1hdGgubWF4KGQsMCkpfSx0aGlzLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oYSxiKSxlPXRoaXMuJHBhZGRpbmcrTWF0aC5yb3VuZChkLmNvbHVtbip0aGlzLmNoYXJhY3RlcldpZHRoKSxmPWQucm93KnRoaXMubGluZUhlaWdodDtyZXR1cm57cGFnZVg6Yy5sZWZ0K2UtdGhpcy5zY3JvbGxMZWZ0LHBhZ2VZOmMudG9wK2YtdGhpcy5zY3JvbGxUb3B9fSx0aGlzLnZpc3VhbGl6ZUZvY3VzPWZ1bmN0aW9uKCl7ZS5hZGRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwiYWNlX2ZvY3VzIil9LHRoaXMudmlzdWFsaXplQmx1cj1mdW5jdGlvbigpe2UucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsImFjZV9mb2N1cyIpfSx0aGlzLnNob3dDb21wb3NpdGlvbj1mdW5jdGlvbihhKXt0aGlzLiRjb21wb3NpdGlvbnx8KHRoaXMuJGNvbXBvc2l0aW9uPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy4kY29tcG9zaXRpb24uY2xhc3NOYW1lPSJhY2VfY29tcG9zaXRpb24iLHRoaXMuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLiRjb21wb3NpdGlvbikpLHRoaXMuJGNvbXBvc2l0aW9uLmlubmVySFRNTD0iJiMxNjA7Ijt2YXIgYj10aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKCksYz10aGlzLiRjb21wb3NpdGlvbi5zdHlsZTtjLnRvcD1iLnRvcCsicHgiLGMubGVmdD1iLmxlZnQrdGhpcy4kcGFkZGluZysicHgiLGMuaGVpZ2h0PXRoaXMubGluZUhlaWdodCsicHgiLHRoaXMuaGlkZUN1cnNvcigpfSx0aGlzLnNldENvbXBvc2l0aW9uVGV4dD1mdW5jdGlvbihhKXtlLnNldElubmVyVGV4dCh0aGlzLiRjb21wb3NpdGlvbixhKX0sdGhpcy5oaWRlQ29tcG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLnNob3dDdXJzb3IoKTtpZighdGhpcy4kY29tcG9zaXRpb24pcmV0dXJuO3ZhciBhPXRoaXMuJGNvbXBvc2l0aW9uLnN0eWxlO2EudG9wPSItMTAwMDBweCIsYS5sZWZ0PSItMTAwMDBweCJ9LHRoaXMuc2V0VGhlbWU9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZChhKXtlLmltcG9ydENzc1N0cmluZyhhLmNzc1RleHQsYS5jc3NDbGFzcyxjLmNvbnRhaW5lci5vd25lckRvY3VtZW50KSxjLiR0aGVtZSYmZS5yZW1vdmVDc3NDbGFzcyhjLmNvbnRhaW5lcixjLiR0aGVtZSksYy4kdGhlbWU9YT9hLmNzc0NsYXNzOm51bGwsYy4kdGhlbWUmJmUuYWRkQ3NzQ2xhc3MoYy5jb250YWluZXIsYy4kdGhlbWUpLGEmJmEuaXNEYXJrP2UuYWRkQ3NzQ2xhc3MoYy5jb250YWluZXIsImFjZV9kYXJrIik6ZS5yZW1vdmVDc3NDbGFzcyhjLmNvbnRhaW5lciwiYWNlX2RhcmsiKSxjLiRzaXplJiYoYy4kc2l6ZS53aWR0aD0wLGMub25SZXNpemUoKSl9dmFyIGM9dGhpczt0aGlzLiR0aGVtZVZhbHVlPWIsIWJ8fHR5cGVvZiBiPT0ic3RyaW5nIj8oYj1ifHwiYWNlL3RoZW1lL3RleHRtYXRlIixhKFtiXSxmdW5jdGlvbihhKXtkKGEpfSkpOmQoYil9LHRoaXMuZ2V0VGhlbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGhlbWVWYWx1ZX0sdGhpcy5zZXRTdHlsZT1mdW5jdGlvbihhKXtlLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLGEpfSx0aGlzLnVuc2V0U3R5bGU9ZnVuY3Rpb24oYSl7ZS5yZW1vdmVDc3NDbGFzcyh0aGlzLmNvbnRhaW5lcixhKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kdGV4dExheWVyLmRlc3Ryb3koKSx0aGlzLiRjdXJzb3JMYXllci5kZXN0cm95KCl9fSkpLmNhbGwocC5wcm90b3R5cGUpLGIuVmlydHVhbFJlbmRlcmVyPXB9KSxkZWZpbmUoImFjZS9sYXllci9ndXR0ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvZG9tIiksZT1hKCIuLi9saWIvb29wIiksZj1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixnPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9ImFjZV9sYXllciBhY2VfZ3V0dGVyLWxheWVyIixhLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCksdGhpcy5zZXRTaG93Rm9sZFdpZGdldHModGhpcy4kc2hvd0ZvbGRXaWRnZXRzKSx0aGlzLmd1dHRlcldpZHRoPTAsdGhpcy4kYnJlYWtwb2ludHM9W10sdGhpcy4kYW5ub3RhdGlvbnM9W10sdGhpcy4kZGVjb3JhdGlvbnM9W119OygoZnVuY3Rpb24oKXtlLmltcGxlbWVudCh0aGlzLGYpLHRoaXMuc2V0U2Vzc2lvbj1mdW5jdGlvbihhKXt0aGlzLnNlc3Npb249YX0sdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGEsYil7dGhpcy4kZGVjb3JhdGlvbnNbYV18fCh0aGlzLiRkZWNvcmF0aW9uc1thXT0iIiksdGhpcy4kZGVjb3JhdGlvbnNbYV0rPSIgYWNlXyIrYn0sdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGEsYil7dGhpcy4kZGVjb3JhdGlvbnNbYV09dGhpcy4kZGVjb3JhdGlvbnNbYV0ucmVwbGFjZSgiIGFjZV8iK2IsIiIpfSx0aGlzLnNldEJyZWFrcG9pbnRzPWZ1bmN0aW9uKGEpe3RoaXMuJGJyZWFrcG9pbnRzPWEuY29uY2F0KCl9LHRoaXMuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oYSl7dGhpcy4kYW5ub3RhdGlvbnM9W107Zm9yKHZhciBiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9YVtiXTtpZighYyljb250aW51ZTt2YXIgZD10aGlzLiRhbm5vdGF0aW9uc1tiXT17dGV4dDpbXX07Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0sZz1mLnRleHQucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjODIxNzsiKS5yZXBsYWNlKC88LywiJmx0OyIpO2QudGV4dC5pbmRleE9mKGcpPT09LTEmJmQudGV4dC5wdXNoKGcpO3ZhciBoPWYudHlwZTtoPT0iZXJyb3IiP2QuY2xhc3NOYW1lPSJhY2VfZXJyb3IiOmg9PSJ3YXJuaW5nIiYmZC5jbGFzc05hbWUhPSJhY2VfZXJyb3IiP2QuY2xhc3NOYW1lPSJhY2Vfd2FybmluZyI6aD09ImluZm8iJiYhZC5jbGFzc05hbWUmJihkLmNsYXNzTmFtZT0iYWNlX2luZm8iKX19fSx0aGlzLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLiRjb25maWc9YTt2YXIgYj17Y2xhc3NOYW1lOiIiLHRleHQ6W119LGM9W10sZT1hLmZpcnN0Um93LGY9YS5sYXN0Um93LGc9dGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShlKSxoPWc/Zy5zdGFydC5yb3c6SW5maW5pdHksaT10aGlzLiRzaG93Rm9sZFdpZGdldHMmJnRoaXMuc2Vzc2lvbi5mb2xkV2lkZ2V0cztmb3IoOzspe2U+aCYmKGU9Zy5lbmQucm93KzEsZz10aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGUsZyksaD1nP2cuc3RhcnQucm93OkluZmluaXR5KTtpZihlPmYpYnJlYWs7dmFyIGo9dGhpcy4kYW5ub3RhdGlvbnNbZV18fGI7Yy5wdXNoKCI8ZGl2IGNsYXNzPSdhY2VfZ3V0dGVyLWNlbGwiLHRoaXMuJGRlY29yYXRpb25zW2VdfHwiIix0aGlzLiRicmVha3BvaW50c1tlXT8iIGFjZV9icmVha3BvaW50ICI6IiAiLGouY2xhc3NOYW1lLCInIHRpdGxlPSciLGoudGV4dC5qb2luKCJcbiIpLCInIHN0eWxlPSdoZWlnaHQ6IixhLmxpbmVIZWlnaHQsInB4Oyc+IixlKzEpO2lmKGkpe3ZhciBrPWlbZV07az09bnVsbCYmKGs9aVtlXT10aGlzLnNlc3Npb24uZ2V0Rm9sZFdpZGdldChlKSksayYmYy5wdXNoKCI8c3BhbiBjbGFzcz0nYWNlX2ZvbGQtd2lkZ2V0ICIsayxrPT0ic3RhcnQiJiZlPT1oJiZlPGcuZW5kLnJvdz8iIGNsb3NlZCI6IiBvcGVuIiwiJz48L3NwYW4+Iil9dmFyIGw9dGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChlKS0xO3doaWxlKGwtLSljLnB1c2goIjwvZGl2PjxkaXYgY2xhc3M9J2FjZV9ndXR0ZXItY2VsbCcgc3R5bGU9J2hlaWdodDoiLGEubGluZUhlaWdodCwicHgnPsKmIik7Yy5wdXNoKCI8L2Rpdj4iKSxlKyt9dGhpcy5lbGVtZW50PWQuc2V0SW5uZXJIdG1sKHRoaXMuZWxlbWVudCxjLmpvaW4oIiIpKSx0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0PWEubWluSGVpZ2h0KyJweCI7dmFyIG09dGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoO20hPT10aGlzLmd1dHRlcldpZHRoJiYodGhpcy5ndXR0ZXJXaWR0aD1tLHRoaXMuX2VtaXQoImNoYW5nZUd1dHRlcldpZHRoIixtKSl9LHRoaXMuJHNob3dGb2xkV2lkZ2V0cz0hMCx0aGlzLnNldFNob3dGb2xkV2lkZ2V0cz1mdW5jdGlvbihhKXthP2QuYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2VfZm9sZGluZy1lbmFibGVkIik6ZC5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9mb2xkaW5nLWVuYWJsZWQiKSx0aGlzLiRzaG93Rm9sZFdpZGdldHM9YX0sdGhpcy5nZXRTaG93Rm9sZFdpZGdldHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2hvd0ZvbGRXaWRnZXRzfX0pKS5jYWxsKGcucHJvdG90eXBlKSxiLkd1dHRlcj1nfSksZGVmaW5lKCJhY2UvbGF5ZXIvbWFya2VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1hKCIuLi9saWIvZG9tIiksZj1mdW5jdGlvbihhKXt0aGlzLmVsZW1lbnQ9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJhY2VfbGF5ZXIgYWNlX21hcmtlci1sYXllciIsYS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfTsoKGZ1bmN0aW9uKCl7dGhpcy4kcGFkZGluZz0wLHRoaXMuc2V0UGFkZGluZz1mdW5jdGlvbihhKXt0aGlzLiRwYWRkaW5nPWF9LHRoaXMuc2V0U2Vzc2lvbj1mdW5jdGlvbihhKXt0aGlzLnNlc3Npb249YX0sdGhpcy5zZXRNYXJrZXJzPWZ1bmN0aW9uKGEpe3RoaXMubWFya2Vycz1hfSx0aGlzLnVwZGF0ZT1mdW5jdGlvbihhKXt2YXIgYT1hfHx0aGlzLmNvbmZpZztpZighYSlyZXR1cm47dGhpcy5jb25maWc9YTt2YXIgYj1bXTtmb3IodmFyIGMgaW4gdGhpcy5tYXJrZXJzKXt2YXIgZD10aGlzLm1hcmtlcnNbY10sZj1kLnJhbmdlLmNsaXBSb3dzKGEuZmlyc3RSb3csYS5sYXN0Um93KTtpZihmLmlzRW1wdHkoKSljb250aW51ZTtmPWYudG9TY3JlZW5SYW5nZSh0aGlzLnNlc3Npb24pO2lmKGQucmVuZGVyZXIpe3ZhciBnPXRoaXMuJGdldFRvcChmLnN0YXJ0LnJvdyxhKSxoPU1hdGgucm91bmQodGhpcy4kcGFkZGluZytmLnN0YXJ0LmNvbHVtbiphLmNoYXJhY3RlcldpZHRoKTtkLnJlbmRlcmVyKGIsZixoLGcsYSl9ZWxzZSBmLmlzTXVsdGlMaW5lKCk/ZC50eXBlPT0idGV4dCI/dGhpcy5kcmF3VGV4dE1hcmtlcihiLGYsZC5jbGF6eixhKTp0aGlzLmRyYXdNdWx0aUxpbmVNYXJrZXIoYixmLGQuY2xhenosYSxkLnR5cGUpOnRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIoYixmLGQuY2xhenosYSxudWxsLGQudHlwZSl9dGhpcy5lbGVtZW50PWUuc2V0SW5uZXJIdG1sKHRoaXMuZWxlbWVudCxiLmpvaW4oIiIpKX0sdGhpcy4kZ2V0VG9wPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEtYi5maXJzdFJvd1NjcmVlbikqYi5saW5lSGVpZ2h0fSx0aGlzLmRyYXdUZXh0TWFya2VyPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPWIuc3RhcnQucm93LGc9bmV3IGQoZixiLnN0YXJ0LmNvbHVtbixmLHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKGYpKTt0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKGEsZyxjLGUsMSwidGV4dCIpLGY9Yi5lbmQucm93LGc9bmV3IGQoZiwwLGYsYi5lbmQuY29sdW1uKSx0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKGEsZyxjLGUsMCwidGV4dCIpO2ZvcihmPWIuc3RhcnQucm93KzE7ZjxiLmVuZC5yb3c7ZisrKWcuc3RhcnQucm93PWYsZy5lbmQucm93PWYsZy5lbmQuY29sdW1uPXRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKGYpLHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIoYSxnLGMsZSwxLCJ0ZXh0Iil9LHRoaXMuZHJhd011bHRpTGluZU1hcmtlcj1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWU9PT0iYmFja2dyb3VuZCI/MDp0aGlzLiRwYWRkaW5nLGc9ZC53aWR0aCsyKnRoaXMuJHBhZGRpbmctZixoPWQubGluZUhlaWdodCxpPU1hdGgucm91bmQoZy1iLnN0YXJ0LmNvbHVtbipkLmNoYXJhY3RlcldpZHRoKSxqPXRoaXMuJGdldFRvcChiLnN0YXJ0LnJvdyxkKSxrPU1hdGgucm91bmQoZitiLnN0YXJ0LmNvbHVtbipkLmNoYXJhY3RlcldpZHRoKTthLnB1c2goIjxkaXYgY2xhc3M9JyIsYywiJyBzdHlsZT0nIiwiaGVpZ2h0OiIsaCwicHg7Iiwid2lkdGg6IixpLCJweDsiLCJ0b3A6IixqLCJweDsiLCJsZWZ0OiIsaywicHg7Jz48L2Rpdj4iKSxqPXRoaXMuJGdldFRvcChiLmVuZC5yb3csZCksaT1NYXRoLnJvdW5kKGIuZW5kLmNvbHVtbipkLmNoYXJhY3RlcldpZHRoKSxhLnB1c2goIjxkaXYgY2xhc3M9JyIsYywiJyBzdHlsZT0nIiwiaGVpZ2h0OiIsaCwicHg7Iiwid2lkdGg6IixpLCJweDsiLCJ0b3A6IixqLCJweDsiLCJsZWZ0OiIsZiwicHg7Jz48L2Rpdj4iKSxoPShiLmVuZC5yb3ctYi5zdGFydC5yb3ctMSkqZC5saW5lSGVpZ2h0O2lmKGg8MClyZXR1cm47aj10aGlzLiRnZXRUb3AoYi5zdGFydC5yb3crMSxkKSxhLnB1c2goIjxkaXYgY2xhc3M9JyIsYywiJyBzdHlsZT0nIiwiaGVpZ2h0OiIsaCwicHg7Iiwid2lkdGg6IixnLCJweDsiLCJ0b3A6IixqLCJweDsiLCJsZWZ0OiIsZiwicHg7Jz48L2Rpdj4iKX0sdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcj1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9Zj09PSJiYWNrZ3JvdW5kIj8wOnRoaXMuJHBhZGRpbmcsaD1kLmxpbmVIZWlnaHQ7aWYoZj09PSJiYWNrZ3JvdW5kIil2YXIgaT1kLndpZHRoO2Vsc2UgaT1NYXRoLnJvdW5kKChiLmVuZC5jb2x1bW4rKGV8fDApLWIuc3RhcnQuY29sdW1uKSpkLmNoYXJhY3RlcldpZHRoKTt2YXIgaj10aGlzLiRnZXRUb3AoYi5zdGFydC5yb3csZCksaz1NYXRoLnJvdW5kKGcrYi5zdGFydC5jb2x1bW4qZC5jaGFyYWN0ZXJXaWR0aCk7YS5wdXNoKCI8ZGl2IGNsYXNzPSciLGMsIicgc3R5bGU9JyIsImhlaWdodDoiLGgsInB4OyIsIndpZHRoOiIsaSwicHg7IiwidG9wOiIsaiwicHg7IiwibGVmdDoiLGssInB4Oyc+PC9kaXY+Iil9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuTWFya2VyPWZ9KSxkZWZpbmUoImFjZS9sYXllci90ZXh0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvdXNlcmFnZW50IiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZG9tIiksZj1hKCIuLi9saWIvbGFuZyIpLGc9YSgiLi4vbGliL3VzZXJhZ2VudCIpLGg9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsaT1mdW5jdGlvbihhKXt0aGlzLmVsZW1lbnQ9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJhY2VfbGF5ZXIgYWNlX3RleHQtbGF5ZXIiLGEuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KSx0aGlzLiRjaGFyYWN0ZXJTaXplPXRoaXMuJG1lYXN1cmVTaXplcygpfHx7d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy4kcG9sbFNpemVDaGFuZ2VzKCl9OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGgpLHRoaXMuRU9GX0NIQVI9IsK2Iix0aGlzLkVPTF9DSEFSPSLCrCIsdGhpcy5UQUJfQ0hBUj0i4oaSIix0aGlzLlNQQUNFX0NIQVI9IsK3Iix0aGlzLiRwYWRkaW5nPTAsdGhpcy5zZXRQYWRkaW5nPWZ1bmN0aW9uKGEpe3RoaXMuJHBhZGRpbmc9YSx0aGlzLmVsZW1lbnQuc3R5bGUucGFkZGluZz0iMCAiK2ErInB4In0sdGhpcy5nZXRMaW5lSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNoYXJhY3RlclNpemUuaGVpZ2h0fHwxfSx0aGlzLmdldENoYXJhY3RlcldpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNoYXJhY3RlclNpemUud2lkdGh8fDF9LHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJG1lYXN1cmVTaXplcygpO2EmJih0aGlzLiRjaGFyYWN0ZXJTaXplLndpZHRoIT09YS53aWR0aHx8dGhpcy4kY2hhcmFjdGVyU2l6ZS5oZWlnaHQhPT1hLmhlaWdodCkmJih0aGlzLiRjaGFyYWN0ZXJTaXplPWEsdGhpcy5fZW1pdCgiY2hhbmdlQ2hhcmFjdGVyU2l6ZSIse2RhdGE6YX0pKX0sdGhpcy4kcG9sbFNpemVDaGFuZ2VzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2EuY2hlY2tGb3JTaXplQ2hhbmdlcygpfSw1MDApfSx0aGlzLiRmb250U3R5bGVzPXtmb250RmFtaWx5OjEsZm9udFNpemU6MSxmb250V2VpZ2h0OjEsZm9udFN0eWxlOjEsbGluZUhlaWdodDoxfSx0aGlzLiRtZWFzdXJlU2l6ZXM9ZnVuY3Rpb24oKXt2YXIgYT0xZTM7aWYoIXRoaXMuJG1lYXN1cmVOb2RlKXt2YXIgYj10aGlzLiRtZWFzdXJlTm9kZT1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGM9Yi5zdHlsZTtjLndpZHRoPWMuaGVpZ2h0PSJhdXRvIixjLmxlZnQ9Yy50b3A9LWEqNDArInB4IixjLnZpc2liaWxpdHk9ImhpZGRlbiIsYy5wb3NpdGlvbj0iYWJzb2x1dGUiLGMub3ZlcmZsb3c9InZpc2libGUiLGMud2hpdGVTcGFjZT0ibm93cmFwIixiLmlubmVySFRNTD1mLnN0cmluZ1JlcGVhdCgiWHkiLGEpO2lmKHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkpdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiKTtlbHNle3ZhciBkPXRoaXMuZWxlbWVudC5wYXJlbnROb2RlO3doaWxlKCFlLmhhc0Nzc0NsYXNzKGQsImFjZV9lZGl0b3IiKSlkPWQucGFyZW50Tm9kZTtkLmFwcGVuZENoaWxkKGIpfX12YXIgYz10aGlzLiRtZWFzdXJlTm9kZS5zdHlsZSxnPWUuY29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQpO2Zvcih2YXIgaCBpbiB0aGlzLiRmb250U3R5bGVzKWNbaF09Z1toXTt2YXIgaT17aGVpZ2h0OnRoaXMuJG1lYXN1cmVOb2RlLm9mZnNldEhlaWdodCx3aWR0aDp0aGlzLiRtZWFzdXJlTm9kZS5vZmZzZXRXaWR0aC8oYSoyKX07cmV0dXJuIGkud2lkdGg9PTAmJmkuaGVpZ2h0PT0wP251bGw6aX0sdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKGEpe3RoaXMuc2Vzc2lvbj1hfSx0aGlzLnNob3dJbnZpc2libGVzPSExLHRoaXMuc2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2hvd0ludmlzaWJsZXM9PWE/ITE6KHRoaXMuc2hvd0ludmlzaWJsZXM9YSwhMCl9LHRoaXMuJHRhYlN0cmluZ3M9W10sdGhpcy4kY29tcHV0ZVRhYlN0cmluZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCksYj10aGlzLiR0YWJTdHJpbmdzPVswXTtmb3IodmFyIGM9MTtjPGErMTtjKyspdGhpcy5zaG93SW52aXNpYmxlcz9iLnB1c2goIjxzcGFuIGNsYXNzPSdhY2VfaW52aXNpYmxlJz4iK3RoaXMuVEFCX0NIQVIrKG5ldyBBcnJheShjKSkuam9pbigiJiMxNjA7IikrIjwvc3Bhbj4iKTpiLnB1c2goKG5ldyBBcnJheShjKzEpKS5qb2luKCImIzE2MDsiKSl9LHRoaXMudXBkYXRlTGluZXM9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKSwodGhpcy5jb25maWcubGFzdFJvdyE9YS5sYXN0Um93fHx0aGlzLmNvbmZpZy5maXJzdFJvdyE9YS5maXJzdFJvdykmJnRoaXMuc2Nyb2xsTGluZXMoYSksdGhpcy5jb25maWc9YTt2YXIgZD1NYXRoLm1heChiLGEuZmlyc3RSb3cpLGY9TWF0aC5taW4oYyxhLmxhc3RSb3cpLGc9dGhpcy5lbGVtZW50LmNoaWxkTm9kZXMsaD0wO2Zvcih2YXIgaT1hLmZpcnN0Um93O2k8ZDtpKyspe3ZhciBqPXRoaXMuc2Vzc2lvbi5nZXRGb2xkTGluZShpKTtpZihqKXtpZihqLmNvbnRhaW5zUm93KGQpKXtkPWouc3RhcnQucm93O2JyZWFrfWk9ai5lbmQucm93fWgrK31mb3IodmFyIGs9ZDtrPD1mO2srKyl7dmFyIGw9Z1toKytdO2lmKCFsKWNvbnRpbnVlO3ZhciBtPVtdLG49dGhpcy5zZXNzaW9uLmdldFRva2VucyhrLGspO3RoaXMuJHJlbmRlckxpbmUobSxrLG5bMF0udG9rZW5zLCF0aGlzLiR1c2VMaW5lR3JvdXBzKCkpLGw9ZS5zZXRJbm5lckh0bWwobCxtLmpvaW4oIiIpKSxrPXRoaXMuc2Vzc2lvbi5nZXRSb3dGb2xkRW5kKGspfX0sdGhpcy5zY3JvbGxMaW5lcz1mdW5jdGlvbihhKXt0aGlzLiRjb21wdXRlVGFiU3RyaW5nKCk7dmFyIGI9dGhpcy5jb25maWc7dGhpcy5jb25maWc9YTtpZighYnx8Yi5sYXN0Um93PGEuZmlyc3RSb3cpcmV0dXJuIHRoaXMudXBkYXRlKGEpO2lmKGEubGFzdFJvdzxiLmZpcnN0Um93KXJldHVybiB0aGlzLnVwZGF0ZShhKTt2YXIgYz10aGlzLmVsZW1lbnQ7aWYoYi5maXJzdFJvdzxhLmZpcnN0Um93KWZvcih2YXIgZD10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQoYi5maXJzdFJvdyxhLmZpcnN0Um93LTEpO2Q+MDtkLS0pYy5yZW1vdmVDaGlsZChjLmZpcnN0Q2hpbGQpO2lmKGIubGFzdFJvdz5hLmxhc3RSb3cpZm9yKHZhciBkPXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudChhLmxhc3RSb3crMSxiLmxhc3RSb3cpO2Q+MDtkLS0pYy5yZW1vdmVDaGlsZChjLmxhc3RDaGlsZCk7aWYoYS5maXJzdFJvdzxiLmZpcnN0Um93KXt2YXIgZT10aGlzLiRyZW5kZXJMaW5lc0ZyYWdtZW50KGEsYS5maXJzdFJvdyxiLmZpcnN0Um93LTEpO2MuZmlyc3RDaGlsZD9jLmluc2VydEJlZm9yZShlLGMuZmlyc3RDaGlsZCk6Yy5hcHBlbmRDaGlsZChlKX1pZihhLmxhc3RSb3c+Yi5sYXN0Um93KXt2YXIgZT10aGlzLiRyZW5kZXJMaW5lc0ZyYWdtZW50KGEsYi5sYXN0Um93KzEsYS5sYXN0Um93KTtjLmFwcGVuZENoaWxkKGUpfX0sdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGY9YixnPXRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUoZiksaD1nP2cuc3RhcnQucm93OkluZmluaXR5O2Zvcig7Oyl7Zj5oJiYoZj1nLmVuZC5yb3crMSxnPXRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUoZixnKSxoPWc/Zy5zdGFydC5yb3c6SW5maW5pdHkpO2lmKGY+YylicmVhazt2YXIgaT1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGo9W10saz10aGlzLnNlc3Npb24uZ2V0VG9rZW5zKGYsZik7ay5sZW5ndGg9PTEmJnRoaXMuJHJlbmRlckxpbmUoaixmLGtbMF0udG9rZW5zLCExKSxpLmlubmVySFRNTD1qLmpvaW4oIiIpO2lmKHRoaXMuJHVzZUxpbmVHcm91cHMoKSlpLmNsYXNzTmFtZT0iYWNlX2xpbmVfZ3JvdXAiLGQuYXBwZW5kQ2hpbGQoaSk7ZWxzZXt2YXIgbD1pLmNoaWxkTm9kZXM7d2hpbGUobC5sZW5ndGgpZC5hcHBlbmRDaGlsZChsWzBdKX1mKyt9cmV0dXJuIGR9LHRoaXMudXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKSx0aGlzLmNvbmZpZz1hO3ZhciBiPVtdLGM9YS5maXJzdFJvdyxkPWEubGFzdFJvdyxmPWMsZz10aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGYpLGg9Zz9nLnN0YXJ0LnJvdzpJbmZpbml0eTtmb3IoOzspe2Y+aCYmKGY9Zy5lbmQucm93KzEsZz10aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGYsZyksaD1nP2cuc3RhcnQucm93OkluZmluaXR5KTtpZihmPmQpYnJlYWs7dGhpcy4kdXNlTGluZUdyb3VwcygpJiZiLnB1c2goIjxkaXYgY2xhc3M9J2FjZV9saW5lX2dyb3VwJz4iKTt2YXIgaT10aGlzLnNlc3Npb24uZ2V0VG9rZW5zKGYsZik7aS5sZW5ndGg9PTEmJnRoaXMuJHJlbmRlckxpbmUoYixmLGlbMF0udG9rZW5zLCExKSx0aGlzLiR1c2VMaW5lR3JvdXBzKCkmJmIucHVzaCgiPC9kaXY+IiksZisrfXRoaXMuZWxlbWVudD1lLnNldElubmVySHRtbCh0aGlzLmVsZW1lbnQsYi5qb2luKCIiKSl9LHRoaXMuJHRleHRUb2tlbj17dGV4dDohMCxycGFyZW46ITAsbHBhcmVuOiEwfSx0aGlzLiRyZW5kZXJUb2tlbj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLGY9L1x0fCZ8PHwoICspfChbXHZcZiBcdTAwYTBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMGJcdTIwMjhcdTIwMjlcdTMwMDBdKXxbXHUxMTAwLVx1MTE1Rl18W1x1MTFBMy1cdTExQTddfFtcdTExRkEtXHUxMUZGXXxbXHUyMzI5LVx1MjMyQV18W1x1MkU4MC1cdTJFOTldfFtcdTJFOUItXHUyRUYzXXxbXHUyRjAwLVx1MkZENV18W1x1MkZGMC1cdTJGRkJdfFtcdTMwMDAtXHUzMDNFXXxbXHUzMDQxLVx1MzA5Nl18W1x1MzA5OS1cdTMwRkZdfFtcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RV18W1x1MzE5MC1cdTMxQkFdfFtcdTMxQzAtXHUzMUUzXXxbXHUzMUYwLVx1MzIxRV18W1x1MzIyMC1cdTMyNDddfFtcdTMyNTAtXHUzMkZFXXxbXHUzMzAwLVx1NERCRl18W1x1NEUwMC1cdUE0OENdfFtcdUE0OTAtXHVBNEM2XXxbXHVBOTYwLVx1QTk3Q118W1x1QUMwMC1cdUQ3QTNdfFtcdUQ3QjAtXHVEN0M2XXxbXHVEN0NCLVx1RDdGQl18W1x1RjkwMC1cdUZBRkZdfFtcdUZFMTAtXHVGRTE5XXxbXHVGRTMwLVx1RkU1Ml18W1x1RkU1NC1cdUZFNjZdfFtcdUZFNjgtXHVGRTZCXXxbXHVGRjAxLVx1RkY2MF18W1x1RkZFMC1cdUZGRTZdL2csaD1mdW5jdGlvbihhLGMsZCxmLGgpe2lmKGEuY2hhckNvZGVBdCgwKT09MzIpcmV0dXJuKG5ldyBBcnJheShhLmxlbmd0aCsxKSkuam9pbigiJiMxNjA7Iik7aWYoYT09Ilx0Iil7dmFyIGk9ZS5zZXNzaW9uLmdldFNjcmVlblRhYlNpemUoYitmKTtyZXR1cm4gYis9aS0xLGUuJHRhYlN0cmluZ3NbaV19aWYoYT09IiYiKXJldHVybiBnLmlzT2xkR2Vja28/IiYiOiImYW1wOyI7aWYoYT09IjwiKXJldHVybiImbHQ7IjtpZihhPT0i44CAIil7dmFyIGo9ZS5zaG93SW52aXNpYmxlcz8iYWNlX2NqayBhY2VfaW52aXNpYmxlIjoiYWNlX2NqayIsaz1lLnNob3dJbnZpc2libGVzP2UuU1BBQ0VfQ0hBUjoiIjtyZXR1cm4gYis9MSwiPHNwYW4gY2xhc3M9JyIraisiJyBzdHlsZT0nd2lkdGg6IitlLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCoyKyJweCc+IitrKyI8L3NwYW4+In1pZihhLm1hdGNoKC9bXHZcZiBcdTAwYTBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMGJcdTIwMjhcdTIwMjlcdTMwMDBdLykpe2lmKGUuc2hvd0ludmlzaWJsZXMpe3ZhciBrPShuZXcgQXJyYXkoYS5sZW5ndGgrMSkpLmpvaW4oZS5TUEFDRV9DSEFSKTtyZXR1cm4iPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUnPiIraysiPC9zcGFuPiJ9cmV0dXJuIiYjMTYwOyJ9cmV0dXJuIGIrPTEsIjxzcGFuIGNsYXNzPSdhY2VfY2prJyBzdHlsZT0nd2lkdGg6IitlLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCoyKyJweCc+IithKyI8L3NwYW4+In0saT1kLnJlcGxhY2UoZixoKTtpZighdGhpcy4kdGV4dFRva2VuW2MudHlwZV0pe3ZhciBqPSJhY2VfIitjLnR5cGUucmVwbGFjZSgvXC4vZywiIGFjZV8iKSxrPSIiO2MudHlwZT09ImZvbGQiJiYoaz0iIHN0eWxlPSd3aWR0aDoiK2MudmFsdWUubGVuZ3RoKnRoaXMuY29uZmlnLmNoYXJhY3RlcldpZHRoKyJweDsnICIpLGEucHVzaCgiPHNwYW4gY2xhc3M9JyIsaiwiJyIsaywiPiIsaSwiPC9zcGFuPiIpfWVsc2UgYS5wdXNoKGkpO3JldHVybiBiK2QubGVuZ3RofSx0aGlzLiRyZW5kZXJMaW5lQ29yZT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPTAsZz0wLGgsaT0wLGo9dGhpczshZHx8ZC5sZW5ndGg9PTA/aD1OdW1iZXIuTUFYX1ZBTFVFOmg9ZFswXSxlfHxhLnB1c2goIjxkaXYgY2xhc3M9J2FjZV9saW5lJyBzdHlsZT0naGVpZ2h0OiIsdGhpcy5jb25maWcubGluZUhlaWdodCwicHgiLCInPiIpO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKXt2YXIgbD1jW2tdLG09bC52YWx1ZTtpZihmK20ubGVuZ3RoPGgpaT1qLiRyZW5kZXJUb2tlbihhLGksbCxtKSxmKz1tLmxlbmd0aDtlbHNle3doaWxlKGYrbS5sZW5ndGg+PWgpaT1qLiRyZW5kZXJUb2tlbihhLGksbCxtLnN1YnN0cmluZygwLGgtZikpLG09bS5zdWJzdHJpbmcoaC1mKSxmPWgsZXx8YS5wdXNoKCI8L2Rpdj4iLCI8ZGl2IGNsYXNzPSdhY2VfbGluZScgc3R5bGU9J2hlaWdodDoiLHRoaXMuY29uZmlnLmxpbmVIZWlnaHQsInB4IiwiJz4iKSxnKyssaT0wLGg9ZFtnXXx8TnVtYmVyLk1BWF9WQUxVRTttLmxlbmd0aCE9MCYmKGYrPW0ubGVuZ3RoLGk9ai4kcmVuZGVyVG9rZW4oYSxpLGwsbSkpfX10aGlzLnNob3dJbnZpc2libGVzJiYoYiE9PXRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKS0xP2EucHVzaCgiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUnPiIrdGhpcy5FT0xfQ0hBUisiPC9zcGFuPiIpOmEucHVzaCgiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUnPiIrdGhpcy5FT0ZfQ0hBUisiPC9zcGFuPiIpKSxlfHxhLnB1c2goIjwvZGl2PiIpfSx0aGlzLiRyZW5kZXJMaW5lPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCF0aGlzLnNlc3Npb24uaXNSb3dGb2xkZWQoYikpe3ZhciBlPXRoaXMuc2Vzc2lvbi5nZXRSb3dTcGxpdERhdGEoYik7dGhpcy4kcmVuZGVyTGluZUNvcmUoYSxiLGMsZSxkKX1lbHNlIHRoaXMuJHJlbmRlckZvbGRMaW5lKGEsYixjLGQpfSx0aGlzLiRyZW5kZXJGb2xkTGluZT1mdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBoKGEsYixjKXt2YXIgZD0wLGU9MDt3aGlsZShlK2FbZF0udmFsdWUubGVuZ3RoPGIpe2UrPWFbZF0udmFsdWUubGVuZ3RoLGQrKztpZihkPT1hLmxlbmd0aClyZXR1cm59aWYoZSE9Yil7dmFyIGY9YVtkXS52YWx1ZS5zdWJzdHJpbmcoYi1lKTtmLmxlbmd0aD5jLWImJihmPWYuc3Vic3RyaW5nKDAsYy1iKSksZy5wdXNoKHt0eXBlOmFbZF0udHlwZSx2YWx1ZTpmfSksZT1iK2YubGVuZ3RoLGQrPTF9d2hpbGUoZTxjKXt2YXIgZj1hW2RdLnZhbHVlO2YubGVuZ3RoK2U+YyYmKGY9Zi5zdWJzdHJpbmcoMCxjLWUpKSxnLnB1c2goe3R5cGU6YVtkXS50eXBlLHZhbHVlOmZ9KSxlKz1mLmxlbmd0aCxkKz0xfX12YXIgZT10aGlzLnNlc3Npb24sZj1lLmdldEZvbGRMaW5lKGIpLGc9W107Zi53YWxrKGZ1bmN0aW9uKGEsYixkLGUsZil7YT9nLnB1c2goe3R5cGU6ImZvbGQiLHZhbHVlOmF9KTooZiYmKGM9dGhpcy5zZXNzaW9uLmdldFRva2VucyhiLGIpWzBdLnRva2VucyksYy5sZW5ndGghPTAmJmgoYyxlLGQpKX0uYmluZCh0aGlzKSxmLmVuZC5yb3csdGhpcy5zZXNzaW9uLmdldExpbmUoZi5lbmQucm93KS5sZW5ndGgpO3ZhciBpPXRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGU/dGhpcy5zZXNzaW9uLiR3cmFwRGF0YVtiXTpudWxsO3RoaXMuJHJlbmRlckxpbmVDb3JlKGEsYixnLGksZCl9LHRoaXMuJHVzZUxpbmVHcm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCl9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIpLHRoaXMuJG1lYXN1cmVOb2RlJiZ0aGlzLiRtZWFzdXJlTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJG1lYXN1cmVOb2RlKSxkZWxldGUgdGhpcy4kbWVhc3VyZU5vZGV9fSkpLmNhbGwoaS5wcm90b3R5cGUpLGIuVGV4dD1pfSksZGVmaW5lKCJhY2UvbGF5ZXIvY3Vyc29yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9kb20iKSxlPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9ImFjZV9sYXllciBhY2VfY3Vyc29yLWxheWVyIixhLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCksdGhpcy5jdXJzb3I9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmN1cnNvci5jbGFzc05hbWU9ImFjZV9jdXJzb3IgYWNlX2hpZGRlbiIsdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY3Vyc29yKSx0aGlzLmlzVmlzaWJsZT0hMX07KChmdW5jdGlvbigpe3RoaXMuJHBhZGRpbmc9MCx0aGlzLnNldFBhZGRpbmc9ZnVuY3Rpb24oYSl7dGhpcy4kcGFkZGluZz1hfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oYSl7dGhpcy5zZXNzaW9uPWF9LHRoaXMuaGlkZUN1cnNvcj1mdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlPSExLGQuYWRkQ3NzQ2xhc3ModGhpcy5jdXJzb3IsImFjZV9oaWRkZW4iKSxjbGVhckludGVydmFsKHRoaXMuYmxpbmtJZCl9LHRoaXMuc2hvd0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlPSEwLGQucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jdXJzb3IsImFjZV9oaWRkZW4iKSx0aGlzLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLnJlc3RhcnRUaW1lcigpfSx0aGlzLnJlc3RhcnRUaW1lcj1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5ibGlua0lkKTtpZighdGhpcy5pc1Zpc2libGUpcmV0dXJuO3ZhciBhPXRoaXMuY3Vyc29yO3RoaXMuYmxpbmtJZD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2Euc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIn0sNDAwKX0sMWUzKX0sdGhpcy5nZXRQaXhlbFBvc2l0aW9uPWZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuY29uZmlnfHwhdGhpcy5zZXNzaW9uKXJldHVybntsZWZ0OjAsdG9wOjB9O2F8fChhPXRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkpO3ZhciBjPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oYSksZD1NYXRoLnJvdW5kKHRoaXMuJHBhZGRpbmcrYy5jb2x1bW4qdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGgpLGU9KGMucm93LShiP3RoaXMuY29uZmlnLmZpcnN0Um93U2NyZWVuOjApKSp0aGlzLmNvbmZpZy5saW5lSGVpZ2h0O3JldHVybntsZWZ0OmQsdG9wOmV9fSx0aGlzLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLmNvbmZpZz1hLHRoaXMucGl4ZWxQb3M9dGhpcy5nZXRQaXhlbFBvc2l0aW9uKG51bGwsITApLHRoaXMuY3Vyc29yLnN0eWxlLmxlZnQ9dGhpcy5waXhlbFBvcy5sZWZ0KyJweCIsdGhpcy5jdXJzb3Iuc3R5bGUudG9wPXRoaXMucGl4ZWxQb3MudG9wKyJweCIsdGhpcy5jdXJzb3Iuc3R5bGUud2lkdGg9YS5jaGFyYWN0ZXJXaWR0aCsicHgiLHRoaXMuY3Vyc29yLnN0eWxlLmhlaWdodD1hLmxpbmVIZWlnaHQrInB4Ijt2YXIgYj10aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCk7YiE9dGhpcy5vdmVyd3JpdGUmJih0aGlzLm92ZXJ3cml0ZT1iLGI/ZC5hZGRDc3NDbGFzcyh0aGlzLmN1cnNvciwiYWNlX292ZXJ3cml0ZSIpOmQucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jdXJzb3IsImFjZV9vdmVyd3JpdGUiKSksdGhpcy5yZXN0YXJ0VGltZXIoKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLmJsaW5rSWQpfX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLkN1cnNvcj1lfSksZGVmaW5lKCJhY2Uvc2Nyb2xsYmFyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vbGliL29vcCIpLGU9YSgiLi9saWIvZG9tIiksZj1hKCIuL2xpYi9ldmVudCIpLGc9YSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixoPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9ImFjZV9zYiIsdGhpcy5pbm5lcj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKSxhLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCksdGhpcy53aWR0aD1lLnNjcm9sbGJhcldpZHRoKGEub3duZXJEb2N1bWVudCksdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoPSh0aGlzLndpZHRofHwxNSkrNSsicHgiLGYuYWRkTGlzdGVuZXIodGhpcy5lbGVtZW50LCJzY3JvbGwiLHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSl9OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGcpLHRoaXMub25TY3JvbGw9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJzY3JvbGwiLHtkYXRhOnRoaXMuZWxlbWVudC5zY3JvbGxUb3B9KX0sdGhpcy5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSx0aGlzLnNldEhlaWdodD1mdW5jdGlvbihhKXt0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0PWErInB4In0sdGhpcy5zZXRJbm5lckhlaWdodD1mdW5jdGlvbihhKXt0aGlzLmlubmVyLnN0eWxlLmhlaWdodD1hKyJweCJ9LHRoaXMuc2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudC5zY3JvbGxUb3A9YX19KSkuY2FsbChoLnByb3RvdHlwZSksYi5TY3JvbGxCYXI9aH0pLGRlZmluZSgiYWNlL3JlbmRlcmxvb3AiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50Il0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL2xpYi9ldmVudCIpLGU9ZnVuY3Rpb24oYSxiKXt0aGlzLm9uUmVuZGVyPWEsdGhpcy5wZW5kaW5nPSExLHRoaXMuY2hhbmdlcz0wLHRoaXMud2luZG93PWJ8fHdpbmRvd307KChmdW5jdGlvbigpe3RoaXMuc2NoZWR1bGU9ZnVuY3Rpb24oYSl7dGhpcy5jaGFuZ2VzPXRoaXMuY2hhbmdlc3xhO2lmKCF0aGlzLnBlbmRpbmcpe3RoaXMucGVuZGluZz0hMDt2YXIgYj10aGlzO2QubmV4dFRpY2soZnVuY3Rpb24oKXtiLnBlbmRpbmc9ITE7dmFyIGE7d2hpbGUoYT1iLmNoYW5nZXMpYi5jaGFuZ2VzPTAsYi5vblJlbmRlcihhKX0sdGhpcy53aW5kb3cpfX19KSkuY2FsbChlLnByb3RvdHlwZSksYi5SZW5kZXJMb29wPWV9KSxkZWZpbmUoInRleHQhYWNlL2Nzcy9lZGl0b3IuY3NzIixbXSwiQGltcG9ydCB1cmwoLy9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnMrTW9ubyk7XG5cblxuLmFjZV9lZGl0b3Ige1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ01lbmxvJywgJ1VidW50dSBNb25vJywgJ0Ryb2lkIFNhbnMgTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcbiAgICBmb250LXNpemU6IDEycHg7XG59XG5cbi5hY2Vfc2Nyb2xsZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xufVxuXG4uYWNlX2NvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgY3Vyc29yOiB0ZXh0O1xufVxuXG4vKiBzZXR0aW5nIHBvaW50ZXItZXZlbnRzOiBhdXRvOyBvbiBub2RlIHVuZGVyIHRoZSBtb3VzZSwgd2hpY2ggY2hhbmdlcyBkdXJpbmcgc2Nyb2xsLFxuICB3aWxsIGJyZWFrIG1vdXNlIHdoZWVsIHNjcm9sbGluZyBpbiBTYWZhcmkgKi9cbi5hY2VfY29udGVudCAqIHtcbiAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5hY2VfY29tcG9zaXRpb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiAjNTU1O1xuICAgIGNvbG9yOiAjREREO1xuICAgIHotaW5kZXg6IDQ7XG59XG5cbi5hY2VfZ3V0dGVyIC5hY2VfbGF5ZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtaW4td2lkdGg6IDU0cHg7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi5hY2VfZ3V0dGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3ZlcmZsb3cgOiBoaWRkZW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLmFjZV9ndXR0ZXItY2VsbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAxOXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDZweDtcbn1cblxuLmFjZV9ndXR0ZXItY2VsbC5hY2VfZXJyb3Ige1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvZ2lmLEdJRjg5YSUxMCUwMCUxMCUwMCVENSUwMCUwMCVGNW9yJUY1JTg3JTg4JUY1bnIlRjRucyVFQm1xJUY1eiU3RiVEREpUJURFS1MlREZPVyVGMVljJUYyYWglQ0UoNyVDRSk4JUQxOEUlREQlNDBNJUYyS1olRUJVJTYwJUY0JTYwbSVEQ2lyJUM4JTE2KCVDOCUxOSolQ0UlMjU1JUYxJTNGUiVGMSUzRlMlRTYlQUIlQjUlQ0ElNURJJUNFbiU1RSVGNyVBMiU5QSVDOUclM0UlRTBhJTVCJUY3JTg5JTg1JUY1eXklRjYlODIlODAlRUQlODIlODAlRkYlQkYlQkYlRTMlQzQlQzQlRkYlRkYlRkYlRkYlRkYlRkYlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAhJUY5JTA0JTAxJTAwJTAwJTI1JTAwJTJDJTAwJTAwJTAwJTAwJTEwJTAwJTEwJTAwJTAwJTA2cCVDMCU5MnBIJTJDJTFBJThGJUM4JUQySCU5MyVFMWQ0JTIzJUU0JTg4JUQzJTA5bUIlMUROJUI0OCVGNSU5MCU0MCU2MCU5MkclNUIlOTQlMjAlM0UlMjIlRDIlODclMjQlRkElMjAlMjQlQzUlMDZBJTAwJTIwJUIxJTA3JTAyQiVBMzglODlYLnYlMTclODIlMTElMTNxJTEwJTBGaSUyNCUwRiU4QiUxMCU3QkQlMTIlMEVpJTA5JTkyJTA5JTBFcEQlMTglMTUlMjQlMEElOUNpJTA1JTBDJTE4RiUxOCUwQiUwNyUwNCUwMSUwNCUwNiVBMEglMTglMTIlMEQlMTQlMEQlMTIlQTFJJUIzJUI0JUI1SUElMDAlM0JcIik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1xufVxuXG4uYWNlX2d1dHRlci1jZWxsLmFjZV93YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL2dpZixHSUY4OWElMTAlMDAlMTAlMDAlRDUlMDAlMDAlRkYlREJyJUZGJURFJTgxJUZGJUUyJThEJUZGJUUyJThGJUZGJUU0JTk2JUZGJUUzJTk3JUZGJUU1JTlEJUZGJUU2JTlFJUZGJUVFJUMxJUZGJUM4WiVGRiVDRGslRkYlRDBzJUZGJUQ0JTgxJUZGJUQ1JTgyJUZGJUQ1JTgzJUZGJURDJTk3JUZGJURFJTlEJUZGJUU3JUI4JUZGJUNDbCU3QlElMTMlODBVJTE1JTgyVyUxNiU4MVUlMTYlODklNUIlMTglODclNUIlMTglOEMlNUUlMUElOTRkJTFEJUM1JTgzLSVDOSU4NyUyRiVDNiU4NC4lQzYlODUuJUNEJThCMiVDOSU4NzElQ0IlOEEzJUNEJThCNSVEQyU5OCUzRiVERiU5QkIlRTAlOUNDJUUxJUE1VSVDQiU4NzElQ0YlOEI1JUQxJThENiVEQiU5NyU0MCVERiU5QUIlREQlOTlCJUUzJUIwcCVFNyVDQyVBRSVGRiVGRiVGRiUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCUwMCElRjklMDQlMDElMDAlMDAlMkYlMDAlMkMlMDAlMDAlMDAlMDAlMTAlMDAlMTAlMDAlMDAlMDZhJUMwJTk3cEglMkMlMUElOEZIJUExJUFCVHIlMjUlODclMkIlMDQlODIlRjQlN0MlQjlYJTkxJTA4JUNCJTk5JTFDISUyNiUxMyU4NCppSjkoJTE1RyVDQSU4NCUxNCUwMSUxQSU5NyUwQyUwMyU4MCUzQSU5QSUzRSU4MSU4NCUzRSUxMSUwOCVCMSU4QiUyMCUwMiUxMiUwRiUxOCUxQSUwRiUwQSUwMydGJTFDJTA0JTBCJTEwJTE2JTE4JTEwJTBCJTA1JTFDRiUxRC0lMDYlMDclOUElOUEtJTFFRyUxQiVBMCVBMSVBMFUlQTQlQTUlQTZCQSUwMCUzQlwiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XG59XG5cbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTVFBQUFBQUFFRkJRVkpTVWw1ZVhtUmtaR3RyYTM5L2Y0V0ZoWW1KaVpHUmthYW1wcnk4dk1QRHc4ek16TlhWMWR6YzNPVGs1T3JxNnZEdzhQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFrQUFCUUFMQUFBQUFBUUFCQUFBQVV1SUNXT1pHbWVhQm1sNVhHd0ZDUVNCR3lYUlNBd3RxUUlpUnVpd0lNNUJvWVZiRUZJeUdDUW9lSkdyVnB0SVFBN1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XG59XG5cbi5hY2VfZWRpdG9yIC5hY2Vfc2Ige1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIHJpZ2h0OiAwO1xufVxuXG4uYWNlX2VkaXRvciAuYWNlX3NiIGRpdiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbGVmdDogMDtcbn1cblxuLmFjZV9lZGl0b3IgLmFjZV9wcmludF9tYXJnaW5fbGF5ZXIge1xuICAgIHotaW5kZXg6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWFyZ2luOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4uYWNlX2VkaXRvciAuYWNlX3ByaW50X21hcmdpbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGhlaWdodDogMTAwJTtcbn1cblxuLmFjZV9lZGl0b3IgdGV4dGFyZWEge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiAwO1xuICAgIHdpZHRoOiAxMHB4O1xuICAgIGhlaWdodDogMzBweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICByZXNpemU6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uYWNlX2xheWVyIHtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmFjZV90ZXh0LWxheWVyIHtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi5hY2VfY2prIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uYWNlX2N1cnNvci1sYXllciB7XG4gICAgei1pbmRleDogNDtcbn1cblxuLmFjZV9jdXJzb3Ige1xuICAgIHotaW5kZXg6IDQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4uYWNlX2N1cnNvci5hY2VfaGlkZGVuIHtcbiAgICBvcGFjaXR5OiAwLjI7XG59XG5cbi5hY2VfbGluZSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMztcbn1cblxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiA0O1xufVxuXG4uYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiA1O1xufVxuXG4uYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMjtcbn1cblxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogNjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5hY2VfbGluZSAuYWNlX2ZvbGQge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAxMXB4O1xuICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAgIGJhY2tncm91bmQtaW1hZ2U6IFxuICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTExJTAwJTAwJTAwJTA5JTA4JTA2JTAwJTAwJTAwJUQ0JUU4JUM3JTBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmslRDNQJTE0JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVCQSVDRFolRUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3JUYxJTA3JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2JTIyJUIzJTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVolRDMlMTQlMkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZDaE0lOEIlODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYlQUIlRkVjJUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0dCUxMyVFMCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4RCUyMyU5NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDglQ0UlODElMTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZzJTgzJUYyXyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFGOSU3RHAlOEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVBRSUxMSUyNiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGklRTYlMEIlMDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUlMDQlRUIxJUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3RiU0MCVGRSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNBViVEQiVEQiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENhJTlBYyVDNCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFDR3glQzlfJTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJDJTE1JTg1JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEzbiVFMTclQjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1NiVFNiU5MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4KmwlMEFPJTg1JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMlQ0QlQzYlRUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUlMjRNJTlDJThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVDQyU1RCVFMSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVCN28lODhhJUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVEQiclRjYlM0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAwJTAzJTI1bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBPJTJCJTBBbyU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQlRTZpX3M5JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0JTA5JUIwJTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1hJUJBJThCJTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3JUU0JTdGJTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUwMCUwMCUwQiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCVCNUlEQVQoJTE1JUE1JTkxJTNEJTBFJTAyISUxMCU4NWFjJUUxJTA1JUQ2JUNFJUQ2JUM2JUNFJUQyJUU4JUVEJUNEJURFJUMwJUM2JUQ2Ti4lRTBWJUY4JTNEJTlDYSU4OTFYSCVDMiVCRSVEOXklM0YlOTAhJUU2JTlDJUMzJUJGayVFNSUwMTElQzYtJUY1JUM4TiUwNCVERiVCRCVGRiU4OSVERnQlODNETiU2MCUzRSVGMyVBQiVBMCVERSUxQSU1RGclQkUlMTBRJTk3JTFCJTQwJTlDJUE4byUxMCU4RiU1RSU4MjglQjQlMUIlNjAlODclRjYlMDIlMjYlODUlMUNoJTFFJUMxJTJCJTVCayVGRiU4NiVFRSVCN2olMDklOUElREElOUIlQUNlJUEzJUY5JUVDJURBITklQjQlRDUlQTYlODElODYlODYlOTglQ0MlM0MlNUIlNDAlRkElODElQjMlRTklQ0IlMjMlOTQlQzE2QXpvJTA1JUQ0JUUxJUMxJTk1YSUzQiU4QSclQTAlRTglQ0MlMTclMjIlODUlMUQlQkElMDAlQTIlRkElREMlMEElOTQlRDElRDElOEQlOEIlM0ElODQlMTdCJUM3JTYwJTFBJTI1WiVGQyU4RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpLFxuICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwNyUwOCUwNiUwMCUwMCUwMCVDNCVERCU4MEMlMDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNBZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUElQzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdCJTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIyeSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMlMjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTNDJUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTglQkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlBJTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIlRjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIlQjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgxJUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhRJUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0UlREUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUlQzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVolRUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYlM0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDElQkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlDJTE4JTAwJTAwJTAwJTNBSURBVDglMTFjJUZDJUZGJUZGJTdGJTE4JTAzJTFBJTYwJTAxJUYyJTNGJUEwJTg5MSU4MCUwNCVGRiUxMS0lRjglMTclOUJKJUUyJTA1JUIxWkQlODF2JTI2dCVFNyU4MCVGOCVBMyU4MmglQTEyJTFBJTIwJUEzJTAxJTAyJTBGJTAxJUJBJTI1JTA2JTAwJTE5JUMwJTBEJUFFRiVENSUzRVMlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQteDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG4uYWNlX2RhcmsgLmFjZV9mb2xkIHtcbn1cblxuLmFjZV9mb2xkOmhvdmVye1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IFxuICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTExJTAwJTAwJTAwJTA5JTA4JTA2JTAwJTAwJTAwJUQ0JUU4JUM3JTBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4JTAxJTg1VCVERmslRDNQJTE0JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRTdEMlOUMlQjZrVyVCQSVDRFolRUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVEOSU4Qm8lM0ElQzV3JUYxJTA3JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjglQUMlODglMjJMJUY2JTIyJUIzJTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0JTVFJUEwJUY5cVolRDMlMTQlMkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDElNUUlMUNDJTJCJUZDaE0lOEIlODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUlQzZsdCVFRW8lREYlQUIlRkVjJUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVFMVklQTBpJTVDJUQ0dCUxMyVFMCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhvYyU4MSVFMSU4QyU4RCUyMyU5NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGklRTAlRjMlMEQlRDglQ0UlODElMTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIlMEMlRjYlRjAlMUZzJTgzJUYyXyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQxJTdDJThBJURFJTFGOSU3RHAlOEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVBMzV+QiVDRCUyNCVBRSUxMSUyNiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0JUJDYlQlQUUzbGklRTYlMEIlMDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVGMyVFMyVFRFAlOTUlMDQlRUIxJUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1JTNFJUE3KSVENiU3RiU0MCVGRSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1JUY0JTVCJTkyJTNBViVEQiVEQiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNkKCVFMCU5MUIlMENhJTlBYyVDNCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0IoJTkzJTk2JUVEJTFDR3glQzlfJTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJUREJTI1JUQ3JThFJUJDJTE1JTg1JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUxQiU3RnVhJUE1JUEzbiVFMTclQjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVlJUNBTyU4MlElRDd1NiVFNiU5MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFDJUYwJTVFJUY4KmwlMEFPJTg1JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUyQyUzRSVBQiU5RVMlQ0QlQzYlRUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjklOTAxQ1olOUQlQkUlMjRNJTlDJThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVENyUwNyU5RSVCQiVDQyU1RCVFMSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAlQkUzJUJFJTNFXyVCN28lODhhJUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEyJUIxeiU5NCU4RiVEQiclRjYlM0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVBMmNqSiVCM3RPJTAwJTAzJTI1bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5JThGJUFCYlclOTBPJTJCJTBBbyU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUwMyVCNlMlRDYlNUQlRTZpX3M5JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFzLiUxNyVBMDN1JUU0JTA5JUIwJTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNCJURCYyVBRCUzRG1hJUJBJThCJTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNGJUFBJUQ1JUREJUU3JUU0JTdGJTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAwJTAwJTA5cEhZcyUwMCUwMCUwQiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUwMCVCNUlEQVQoJTE1JUE1JTkxJTNEJTBFJTAyISUxMCU4NWFjJUUxJTA1JUQ2JUNFJUQ2JUM2JUNFJUQyJUU4JUVEJUNEJURFJUMwJUM2JUQ2Ti4lRTBWJUY4JTNEJTlDYSU4OTFYSCVDMiVCRSVEOXklM0YlOTAhJUU2JTlDJUMzJUJGayVFNSUwMTElQzYtJUY1JUM4TiUwNCVERiVCRCVGRiU4OSVERnQlODNETiU2MCUzRSVGMyVBQiVBMCVERSUxQSU1RGclQkUlMTBRJTk3JTFCJTQwJTlDJUE4byUxMCU4RiU1RSU4MjglQjQlMUIlNjAlODclRjYlMDIlMjYlODUlMUNoJTFFJUMxJTJCJTVCayVGRiU4NiVFRSVCN2olMDklOUElREElOUIlQUNlJUEzJUY5JUVDJURBITklQjQlRDUlQTYlODElODYlODYlOTglQ0MlM0MlNUIlNDAlRkElODElQjMlRTklQ0IlMjMlOTQlQzE2QXpvJTA1JUQ0JUUxJUMxJTk1YSUzQiU4QSclQTAlRTglQ0MlMTclMjIlODUlMUQlQkElMDAlQTIlRkElREMlMEElOTQlRDElRDElOEQlOEIlM0ElODQlMTdCJUM3JTYwJTFBJTI1WiVGQyU4RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpLFxuICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwNyUwOCUwNiUwMCUwMCUwMCVDNCVERCU4MEMlMDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIwJUUxJThCJTNBZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVBNm0lNUMlOUElQzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMlRDklODNvJTdCJTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQwJTBGJUQzJUIyeSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMlMTElRjAlMUMlMjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTklOTIuJThCJTNDJUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5JTlCJUFEJUU3JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVDMSUzRl8lMTglQkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGklOTglRURlJTlBJTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4QSVFNXklOTIlRjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYlRjUlNUIlQjIlQjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhRJUVEJUI1JTgxJUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0lQUIlMEIlMDhRJUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYlRDQlQzglQ0UlREUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFELnIlMjMlOEUlQzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNkJUVCJUEzMVolRUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIlMTUlREIlMUYlM0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4lNUIlMUUlMDElQkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlDJTE4JTAwJTAwJTAwM0lEQVQ4JTExYyVGQyVGRiVGRiU3RiUzRSUwMyUxQSU2MCUwMSVGMiUzRiVBMyU4OTElODAlMDQlRkZRJTI2JUY4dyVDMCVCNDMlQTElREIlMEMlRTIlOEYlMEElQTIlODUlQ0FoJTgwJThDJTA2JTA4JTNDJTA0JUU4JTk2JTE4JTAwJUEzUyUwRCVDRCVDRiVEOCVDMSU5RCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQsIHJlcGVhdC14O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXIsIHRvcCBsZWZ0O1xufVxuXG4uYWNlX2RyYWdnaW5nIC5hY2VfY29udGVudCB7XG4gICAgY3Vyc29yOiBtb3ZlO1xufVxuXG4uYWNlX2ZvbGRpbmctZW5hYmxlZCAuYWNlX2d1dHRlci1jZWxsIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxM3B4O1xufVxuXG4uYWNlX2ZvbGQtd2lkZ2V0IHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICBtYXJnaW46IDAgLTEycHggMXB4IDFweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIHdpZHRoOiAxMXB4O1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbiAgICBcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwJTA1JTA4JTA2JTAwJTAwJTAwJThEbyUyNiVFNSUwMCUwMCUwMDRJREFUeCVEQWUlOEElQjElMEQlMDAwJTBDJUMyJUYyJTJDSyU5NiVCQyVEMCU4RjklODElODhIJUU5JUQwJTBFJTk2JUMwJTEwJTkyJTNFJTAyJTgwJTVFJTgyJUU0JUE5Ki0lRUVzdyVDOCVDQyUxMSVFRSU5NnclRDglREMlRTkqRWglMEMlMTUxKCUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyXCIpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDVweDtcblxuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmFjZV9mb2xkLXdpZGdldC5lbmQge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMDUlMDAlMDAlMDAlMDUlMDglMDYlMDAlMDAlMDAlOERvJTI2JUU1JTAwJTAwJTAwNElEQVR4JURBbSVDNyVDMSUwOSUwMDAlMDhDJUQxJThDJUVDRSVDOEUoJThFJUVDJTAyKSUxRVpKJUYxJUMxJyUwNCUwN0klRTElRTUlRUUlQ0FMJUY1JUEyJTk5JTk5JTIyJUUyJUQ2JTFGVSVCNSVGRTAlRDl4JUE3JTI2V3o1JTBFJUQ1JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XG59XG5cbi5hY2VfZm9sZC13aWRnZXQuY2xvc2VkIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTAzJTAwJTAwJTAwJTA2JTA4JTA2JTAwJTAwJTAwJTA2JUU1JTI0JTBDJTAwJTAwJTAwOUlEQVR4JURBNSVDQSVDMSUwOSUwMDAlMDglMDMlQzAlQUMqKCUzRSUwNCVDMSUwRCVCQSVCMSUyMyVBNFVoJUUwJTIwJTgxJUMwJUNDJUY4JTgyJTgxJUFBJUEyJUFBckdmciU4OCUwOCUxMSUxMSUxQyVERCU3RCVFMCVFRSU1QiVGNiVGNiVDQiVCOCUwNVElMkYlRTl0YWklRDklMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MlwiKTtcbn1cblxuLmFjZV9mb2xkLXdpZGdldDpob3ZlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgICAtbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIGJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciA0cHg7XG59XG5cbi5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAtbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSk7XG4gICAgLW1vei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1KTtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gICAgYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1KTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xufVxuXG4uYWNlX2ZvbGQtd2lkZ2V0LmludmFsaWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkI0QjQ7XG4gICAgYm9yZGVyLWNvbG9yOiAjREU1NTU1O1xufVxuIiksZGVmaW5lKCJhY2UvdGhlbWUvdGV4dG1hdGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCIsYi5pc0Rhcms9ITEsYi5jc3NDbGFzcz0iYWNlLXRtIixiLmNzc1RleHQ9Ii5hY2UtdG0gLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXRtIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXRtIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS10bSAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS10bSAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMEEyO30uYWNlLXRtIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7fS5hY2UtdG0gLmFjZV9jdXJzb3IgeyAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazt9LmFjZS10bSAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fSAgICAgICAgLmFjZS10bSAuYWNlX2xpbmUgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6IHJnYigxOTEsIDE5MSwgMTkxKTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiBibHVlO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHsgIGNvbG9yOiByZ2IoODgsIDcyLCAyNDYpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjogcmdiKDg4LCA5MiwgMjQ2KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7ICBjb2xvcjogcmdiKDYsIDE1MCwgMTQpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2ludmFsaWQgeyAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE1MywgMCwgMCk7ICBjb2xvcjogd2hpdGU7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IHJnYig2MCwgNzYsIDExNCk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV90eXBlLC5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3MgeyAgY29sb3I6IHJnYigxMDksIDEyMSwgMjIyKTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjogcmdiKDEwNCwgMTE4LCAxMzUpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N0cmluZyB7ICBjb2xvcjogcmdiKDMsIDEwNiwgNyk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29tbWVudCB7ICBjb2xvcjogcmdiKDc2LCAxMzYsIDEwNyk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29tbWVudC5hY2VfZG9jIHsgIGNvbG9yOiByZ2IoMCwgMTAyLCAyNTUpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHsgIGNvbG9yOiByZ2IoMTI4LCAxNTksIDE5MSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6IHJnYigwLCAwLCAyMDUpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiByZ2IoNDksIDEzMiwgMTQ5KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV94bWxfcGUgeyAgY29sb3I6IHJnYigxMDQsIDEwNCwgOTEpO30uYWNlLXRtIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjogIzAwMDBBMjt9LmFjZS10bSAuYWNlX21hcmt1cC5hY2VfbWFya3VwaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LmFjZS10bSAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7ICBjb2xvcjogcmdiKDEyLCA3LCAyNTUpO30uYWNlLXRtIC5hY2VfbWFya3VwLmFjZV9saXN0IHsgIGNvbG9yOnJnYigxODUsIDYsIDE0NCk7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7ICBiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUsIDApO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sgeyAgYmFja2dyb3VuZDogcmdiKDE2NCwgMjI5LCAxMDEpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWRfd29yZCB7ICBiYWNrZ3JvdW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7ICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjAwLCAyMDAsIDI1MCk7fS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6cmdiKDI4LCAyLCAyNTUpO30uYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7ICBjb2xvcjogcmdiKDI1NSwgMCwgMCl9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/cockpit.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJjb2NrcGl0L2luZGV4IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwicGlsb3QvaW5kZXgiLCJjb2NrcGl0L2NsaSIsImNvY2twaXQvdWkvc2V0dGluZ3MiLCJjb2NrcGl0L3VpL2NsaV92aWV3IiwiY29ja3BpdC9jb21tYW5kcy9iYXNpYyJdLGZ1bmN0aW9uKGEsYixjKXtiLnN0YXJ0dXA9ZnVuY3Rpb24oYixjKXthKCJwaWxvdC9pbmRleCIpLGEoImNvY2twaXQvY2xpIikuc3RhcnR1cChiLGMpLGEoImNvY2twaXQvdWkvc2V0dGluZ3MiKS5zdGFydHVwKGIsYyksYSgiY29ja3BpdC91aS9jbGlfdmlldyIpLnN0YXJ0dXAoYixjKSxhKCJjb2NrcGl0L2NvbW1hbmRzL2Jhc2ljIikuc3RhcnR1cChiLGMpfX0pLGRlZmluZSgiY29ja3BpdC9jbGkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJwaWxvdC9jb25zb2xlIiwicGlsb3QvbGFuZyIsInBpbG90L29vcCIsInBpbG90L2V2ZW50X2VtaXR0ZXIiLCJwaWxvdC90eXBlcyIsInBpbG90L2Nhbm9uIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIHIoYSxiKXtxLmNhbGwodGhpcyxhKSxiJiZiLmZsYWdzJiYodGhpcy5mbGFncz1iLmZsYWdzKX1mdW5jdGlvbiBxKGEpe3RoaXMuZW52PWEsdGhpcy5jb21tYW5kQXNzaWdubWVudD1uZXcgbyhwLHRoaXMpfWZ1bmN0aW9uIG8oYSxiKXt0aGlzLnBhcmFtPWEsdGhpcy5yZXF1aXNpdGlvbj1iLHRoaXMuc2V0VmFsdWUoYS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIG4oYSxiLGMsZCxlLGYpe3RoaXMuZW1pdHRlcj1hLHRoaXMuc2V0VGV4dChiKSx0aGlzLnN0YXJ0PWMsdGhpcy5lbmQ9ZCx0aGlzLnByZWZpeD1lLHRoaXMuc3VmZml4PWZ9ZnVuY3Rpb24gbShhLGIpe3RoaXMuc3RhdHVzPWEuc3RhdHVzLHRoaXMubWVzc2FnZT1hLm1lc3NhZ2UsYj8odGhpcy5zdGFydD1iLnN0YXJ0LHRoaXMuZW5kPWIuZW5kKToodGhpcy5zdGFydD0wLHRoaXMuZW5kPTApLHRoaXMucHJlZGljdGlvbnM9YS5wcmVkaWN0aW9uc31mdW5jdGlvbiBsKGEsYixjLGQsZSl7dGhpcy5zdGF0dXM9YSx0aGlzLm1lc3NhZ2U9YjtpZih0eXBlb2YgYz09Im51bWJlciIpdGhpcy5zdGFydD1jLHRoaXMuZW5kPWQsdGhpcy5wcmVkaWN0aW9ucz1lO2Vsc2V7dmFyIGY9Yzt0aGlzLnN0YXJ0PWYuc3RhcnQsdGhpcy5lbmQ9Zi5lbmQsdGhpcy5wcmVkaWN0aW9ucz1mLnByZWRpY3Rpb25zfX12YXIgZD1hKCJwaWxvdC9jb25zb2xlIiksZT1hKCJwaWxvdC9sYW5nIiksZj1hKCJwaWxvdC9vb3AiKSxnPWEoInBpbG90L2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsaD1hKCJwaWxvdC90eXBlcyIpLGk9YSgicGlsb3QvdHlwZXMiKS5TdGF0dXMsaj1hKCJwaWxvdC90eXBlcyIpLkNvbnZlcnNpb24saz1hKCJwaWxvdC9jYW5vbiIpO2Iuc3RhcnR1cD1mdW5jdGlvbihhLGIpe2sudXBncmFkZVR5cGUoImNvbW1hbmQiLHApfSxsLnByb3RvdHlwZT17fSxsLnNvcnQ9ZnVuY3Rpb24oYSxiKXtiIT09dW5kZWZpbmVkJiZhLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zdGFydD09PW4uQVRfQ1VSU09SP2EuZGlzdGFuY2U9MDpiPGEuc3RhcnQ/YS5kaXN0YW5jZT1hLnN0YXJ0LWI6Yj5hLmVuZD9hLmRpc3RhbmNlPWItYS5lbmQ6YS5kaXN0YW5jZT0wfSx0aGlzKSxhLnNvcnQoZnVuY3Rpb24oYSxjKXtpZihiIT09dW5kZWZpbmVkKXt2YXIgZD1hLmRpc3RhbmNlLWMuZGlzdGFuY2U7aWYoZCE9MClyZXR1cm4gZH1yZXR1cm4gYy5zdGF0dXMtYS5zdGF0dXN9KSxiIT09dW5kZWZpbmVkJiZhLmZvckVhY2goZnVuY3Rpb24oYSl7ZGVsZXRlIGEuZGlzdGFuY2V9LHRoaXMpO3JldHVybiBhfSxiLkhpbnQ9bCxmLmluaGVyaXRzKG0sbCksbi5wcm90b3R5cGU9e21lcmdlOmZ1bmN0aW9uKGEpe2lmKGEuZW1pdHRlciE9dGhpcy5lbWl0dGVyKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgbWVyZ2UgQXJndW1lbnRzIGZyb20gZGlmZmVyZW50IEV2ZW50RW1pdHRlcnMiKTtyZXR1cm4gbmV3IG4odGhpcy5lbWl0dGVyLHRoaXMudGV4dCt0aGlzLnN1ZmZpeCthLnByZWZpeCthLnRleHQsdGhpcy5zdGFydCxhLmVuZCx0aGlzLnByZWZpeCxhLnN1ZmZpeCl9LHNldFRleHQ6ZnVuY3Rpb24oYSl7aWYoYT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgdGV4dCBmb3IgQXJndW1lbnQ6ICIrYSk7dmFyIGI9e2FyZ3VtZW50OnRoaXMsb2xkVGV4dDp0aGlzLnRleHQsdGV4dDphfTt0aGlzLnRleHQ9YSx0aGlzLmVtaXR0ZXIuX2Rpc3BhdGNoRXZlbnQoImFyZ3VtZW50Q2hhbmdlIixiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVmaXgrdGhpcy50ZXh0K3RoaXMuc3VmZml4fX0sbi5tZXJnZT1mdW5jdGlvbihhLGIsYyl7Yj1iPT09dW5kZWZpbmVkPzA6YixjPWM9PT11bmRlZmluZWQ/YS5sZW5ndGg6Yzt2YXIgZDtmb3IodmFyIGU9YjtlPGM7ZSsrKXt2YXIgZj1hW2VdO2Q/ZD1kLm1lcmdlKGYpOmQ9Zn1yZXR1cm4gZH0sbi5BVF9DVVJTT1I9LTEsby5wcm90b3R5cGU9e3BhcmFtOnVuZGVmaW5lZCxjb252ZXJzaW9uOnVuZGVmaW5lZCx2YWx1ZTp1bmRlZmluZWQsYXJnOnVuZGVmaW5lZCx2YWx1ZTp1bmRlZmluZWQsc2V0VmFsdWU6ZnVuY3Rpb24oYSl7aWYodGhpcy52YWx1ZSE9PWEpe2lmKGE9PT11bmRlZmluZWQpdGhpcy52YWx1ZT10aGlzLnBhcmFtLmRlZmF1bHRWYWx1ZSx0aGlzLmNvbnZlcnNpb249dGhpcy5wYXJhbS5nZXREZWZhdWx0P3RoaXMucGFyYW0uZ2V0RGVmYXVsdCgpOnRoaXMucGFyYW0udHlwZS5nZXREZWZhdWx0KCksdGhpcy5hcmc9dW5kZWZpbmVkO2Vsc2V7dGhpcy52YWx1ZT1hLHRoaXMuY29udmVyc2lvbj11bmRlZmluZWQ7dmFyIGI9YT09bnVsbD8iIjp0aGlzLnBhcmFtLnR5cGUuc3RyaW5naWZ5KGEpO3RoaXMuYXJnJiZ0aGlzLmFyZy5zZXRUZXh0KGIpfXRoaXMucmVxdWlzaXRpb24uX2Fzc2lnbm1lbnRDaGFuZ2VkKHRoaXMpfX0sYXJnOnVuZGVmaW5lZCxzZXRBcmd1bWVudDpmdW5jdGlvbihhKXt0aGlzLmFyZyE9PWEmJih0aGlzLmFyZz1hLHRoaXMuY29udmVyc2lvbj10aGlzLnBhcmFtLnR5cGUucGFyc2UoYS50ZXh0KSx0aGlzLmNvbnZlcnNpb24uYXJnPWEsdGhpcy52YWx1ZT10aGlzLmNvbnZlcnNpb24udmFsdWUsdGhpcy5yZXF1aXNpdGlvbi5fYXNzaWdubWVudENoYW5nZWQodGhpcykpfSxnZXRIaW50OmZ1bmN0aW9uKCl7aWYodGhpcy5wYXJhbS5nZXRDdXN0b21IaW50JiZ0aGlzLnZhbHVlJiZ0aGlzLmFyZyl7dmFyIGE9dGhpcy5wYXJhbS5nZXRDdXN0b21IaW50KHRoaXMudmFsdWUsdGhpcy5hcmcpO2lmKGEpcmV0dXJuIGF9dmFyIGI9IjxzdHJvbmc+Iit0aGlzLnBhcmFtLm5hbWUrIjwvc3Ryb25nPjogIjt0aGlzLnBhcmFtLmRlc2NyaXB0aW9uJiYoYis9dGhpcy5wYXJhbS5kZXNjcmlwdGlvbi50cmltKCksYi5jaGFyQXQoYi5sZW5ndGgtMSkhPT0iLiImJihiKz0iLiIpLGIuY2hhckF0KGIubGVuZ3RoLTEpIT09IiAiJiYoYis9IiAiKSk7dmFyIGM9aS5WQUxJRCxkPXRoaXMuYXJnP3RoaXMuYXJnLnN0YXJ0Om4uQVRfQ1VSU09SLGU9dGhpcy5hcmc/dGhpcy5hcmcuZW5kOm4uQVRfQ1VSU09SLGY7dGhpcy5jb252ZXJzaW9uJiYoYz10aGlzLmNvbnZlcnNpb24uc3RhdHVzLHRoaXMuY29udmVyc2lvbi5tZXNzYWdlJiYoYis9dGhpcy5jb252ZXJzaW9uLm1lc3NhZ2UpLGY9dGhpcy5jb252ZXJzaW9uLnByZWRpY3Rpb25zKTt2YXIgZz10aGlzLmFyZyYmdGhpcy5hcmcudGV4dCE9PSIiLGg9dGhpcy52YWx1ZSE9PXVuZGVmaW5lZHx8Zzt0aGlzLnBhcmFtLmRlZmF1bHRWYWx1ZT09PXVuZGVmaW5lZCYmIWgmJihjPWkuSU5WQUxJRCxiKz0iPHN0cm9uZz5SZXF1aXJlZDxzdHJvbmc+Iik7cmV0dXJuIG5ldyBsKGMsYixkLGUsZil9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5jb252ZXJzaW9uJiZ0aGlzLmNvbnZlcnNpb24ucHJlZGljdGlvbnMmJnRoaXMuY29udmVyc2lvbi5wcmVkaWN0aW9ucy5sZW5ndGg+MCYmdGhpcy5zZXRWYWx1ZSh0aGlzLmNvbnZlcnNpb24ucHJlZGljdGlvbnNbMF0pfSxpc1Bvc2l0aW9uQ2FwdHVyZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXJnP3RoaXMuYXJnLnN0YXJ0PT09LTE/ITE6YT50aGlzLmFyZy5lbmQ/ITE6YT09PXRoaXMuYXJnLmVuZD90aGlzLmNvbnZlcnNpb24uc3RhdHVzIT09aS5WQUxJRHx8dGhpcy5jb252ZXJzaW9uLnByZWRpY3Rpb25zLmxlbmd0aCE9PTA6ITA6ITF9LGRlY3JlbWVudDpmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyYW0udHlwZS5kZWNyZW1lbnQodGhpcy52YWx1ZSk7YSE9bnVsbCYmdGhpcy5zZXRWYWx1ZShhKX0saW5jcmVtZW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJhbS50eXBlLmluY3JlbWVudCh0aGlzLnZhbHVlKTthIT1udWxsJiZ0aGlzLnNldFZhbHVlKGEpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZz90aGlzLmFyZy50b1N0cmluZygpOiIifX0sYi5Bc3NpZ25tZW50PW87dmFyIHA9e25hbWU6Il9fY29tbWFuZCIsdHlwZToiY29tbWFuZCIsZGVzY3JpcHRpb246IlRoZSBjb21tYW5kIHRvIGV4ZWN1dGUiLGdldEN1c3RvbUhpbnQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtjLnB1c2goIjxzdHJvbmc+PHR0PiAmZ3Q7ICIpLGMucHVzaChhLm5hbWUpLGEucGFyYW1zJiZhLnBhcmFtcy5sZW5ndGg+MCYmYS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihhKXthLmRlZmF1bHRWYWx1ZT09PXVuZGVmaW5lZD9jLnB1c2goIiBbIithLm5hbWUrIl0iKTpjLnB1c2goIiA8ZW0+WyIrYS5uYW1lKyJdPC9lbT4iKX0sdGhpcyksYy5wdXNoKCI8L3R0Pjwvc3Ryb25nPjxici8+IiksYy5wdXNoKGEuZGVzY3JpcHRpb24/YS5kZXNjcmlwdGlvbjoiKE5vIGRlc2NyaXB0aW9uKSIpLGMucHVzaCgiPGJyLz4iKSxhLnBhcmFtcyYmYS5wYXJhbXMubGVuZ3RoPjAmJihjLnB1c2goIjx1bD4iKSxhLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2MucHVzaCgiPGxpPiIpLGMucHVzaCgiPHN0cm9uZz48dHQ+IithLm5hbWUrIjwvdHQ+PC9zdHJvbmc+OiAiKSxjLnB1c2goYS5kZXNjcmlwdGlvbj9hLmRlc2NyaXB0aW9uOiIoTm8gZGVzY3JpcHRpb24pIiksYS5kZWZhdWx0VmFsdWU9PT11bmRlZmluZWQ/Yy5wdXNoKCIgPGVtPltSZXF1aXJlZF08L2VtPiIpOmEuZGVmYXVsdFZhbHVlPT09bnVsbD9jLnB1c2goIiA8ZW0+W09wdGlvbmFsXTwvZW0+Iik6Yy5wdXNoKCIgPGVtPltEZWZhdWx0OiAiK2EuZGVmYXVsdFZhbHVlKyJdPC9lbT4iKSxjLnB1c2goIjwvbGk+Iil9LHRoaXMpLGMucHVzaCgiPC91bD4iKSk7cmV0dXJuIG5ldyBsKGkuVkFMSUQsYy5qb2luKCIiKSxiKX19O3EucHJvdG90eXBlPXtjb21tYW5kQXNzaWdubWVudDp1bmRlZmluZWQsYXNzaWdubWVudENvdW50OnVuZGVmaW5lZCxfYXNzaWdubWVudHM6dW5kZWZpbmVkLF9oaW50czp1bmRlZmluZWQsX2Fzc2lnbm1lbnRDaGFuZ2VkOmZ1bmN0aW9uKGEpe2EucGFyYW0ubmFtZT09PSJfX2NvbW1hbmQiJiYodGhpcy5fYXNzaWdubWVudHM9e30sYS52YWx1ZSYmYS52YWx1ZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLl9hc3NpZ25tZW50c1thLm5hbWVdPW5ldyBvKGEsdGhpcyl9LHRoaXMpLHRoaXMuYXNzaWdubWVudENvdW50PU9iamVjdC5rZXlzKHRoaXMuX2Fzc2lnbm1lbnRzKS5sZW5ndGgsdGhpcy5fZGlzcGF0Y2hFdmVudCgiY29tbWFuZENoYW5nZSIse2NvbW1hbmQ6YS52YWx1ZX0pKX0sZ2V0QXNzaWdubWVudDpmdW5jdGlvbihhKXt2YXIgYj10eXBlb2YgYT09InN0cmluZyI/YTpPYmplY3Qua2V5cyh0aGlzLl9hc3NpZ25tZW50cylbYV07cmV0dXJuIHRoaXMuX2Fzc2lnbm1lbnRzW2JdfSxnZXRQYXJhbWV0ZXJOYW1lczpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9hc3NpZ25tZW50cyl9LGNsb25lQXNzaWdubWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fYXNzaWdubWVudHMpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzaWdubWVudHNbYV19LHRoaXMpfSxfdXBkYXRlSGludHM6ZnVuY3Rpb24oKXt0aGlzLmdldEFzc2lnbm1lbnRzKCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuX2hpbnRzLnB1c2goYS5nZXRIaW50KCkpfSx0aGlzKSxsLnNvcnQodGhpcy5faGludHMpfSxnZXRXb3JzdEhpbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGludHNbMF19LGdldEFyZ3NPYmplY3Q6ZnVuY3Rpb24oKXt2YXIgYT17fTt0aGlzLmdldEFzc2lnbm1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbihiKXthW2IucGFyYW0ubmFtZV09Yi52YWx1ZX0sdGhpcyk7cmV0dXJuIGF9LGdldEFzc2lnbm1lbnRzOmZ1bmN0aW9uKGEpe3ZhciBiPVtdO2E9PT0hMCYmYi5wdXNoKHRoaXMuY29tbWFuZEFzc2lnbm1lbnQpLE9iamVjdC5rZXlzKHRoaXMuX2Fzc2lnbm1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IucHVzaCh0aGlzLmdldEFzc2lnbm1lbnQoYSkpfSx0aGlzKTtyZXR1cm4gYn0sc2V0RGVmYXVsdFZhbHVlczpmdW5jdGlvbigpe3RoaXMuZ2V0QXNzaWdubWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0VmFsdWUodW5kZWZpbmVkKX0sdGhpcyl9LGV4ZWM6ZnVuY3Rpb24oKXtrLmV4ZWModGhpcy5jb21tYW5kQXNzaWdubWVudC52YWx1ZSx0aGlzLmVudiwiY2xpIix0aGlzLmdldEFyZ3NPYmplY3QoKSx0aGlzLnRvQ2Fub25pY2FsU3RyaW5nKCkpfSx0b0Nhbm9uaWNhbFN0cmluZzpmdW5jdGlvbigpe3ZhciBhPVtdO2EucHVzaCh0aGlzLmNvbW1hbmRBc3NpZ25tZW50LnZhbHVlLm5hbWUpLE9iamVjdC5rZXlzKHRoaXMuX2Fzc2lnbm1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuX2Fzc2lnbm1lbnRzW2JdLGQ9Yy5wYXJhbS50eXBlO2MudmFsdWUhPT1jLnBhcmFtLmRlZmF1bHRWYWx1ZSYmKGEucHVzaCgiICIpLGEucHVzaChkLnN0cmluZ2lmeShjLnZhbHVlKSkpfSx0aGlzKTtyZXR1cm4gYS5qb2luKCIiKX19LGYuaW1wbGVtZW50KHEucHJvdG90eXBlLGcpLGIuUmVxdWlzaXRpb249cSxmLmluaGVyaXRzKHIscSksZnVuY3Rpb24oKXtyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYSl7dGhpcy5pbnB1dD1hLHRoaXMuX2hpbnRzPVtdO3ZhciBiPXRoaXMuX3Rva2VuaXplKGEudHlwZWQpO3RoaXMuX3NwbGl0KGIpLHRoaXMuY29tbWFuZEFzc2lnbm1lbnQudmFsdWUmJnRoaXMuX2Fzc2lnbihiKSx0aGlzLl91cGRhdGVIaW50cygpfSxyLnByb3RvdHlwZS5nZXRJbnB1dFN0YXR1c01hcmt1cD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudG9TdHJpbmcoKS5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBpLlZBTElEfSk7dGhpcy5faGludHMuZm9yRWFjaChmdW5jdGlvbihiKXtmb3IodmFyIGM9Yi5zdGFydDtjPD1iLmVuZDtjKyspYi5zdGF0dXM+YVtjXSYmKGFbY109Yi5zdGF0dXMpfSx0aGlzKTtyZXR1cm4gYX0sci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBc3NpZ25tZW50cyghMCkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKCl9LHRoaXMpLmpvaW4oIiIpfTt2YXIgYT1yLnByb3RvdHlwZS5fdXBkYXRlSGludHM7ci5wcm90b3R5cGUuX3VwZGF0ZUhpbnRzPWZ1bmN0aW9uKCl7YS5jYWxsKHRoaXMpO3ZhciBiPXRoaXMuaW5wdXQuY3Vyc29yO3RoaXMuX2hpbnRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9Yi5zdGFydD49YS5zdGFydCYmYi5zdGFydDw9YS5lbmQsZD1iLmVuZD49YS5zdGFydCYmYi5lbmQ8PWEuZW5kLGU9Y3x8ZDshZSYmYS5zdGF0dXM9PT1pLklOQ09NUExFVEUmJihhLnN0YXR1cz1pLklOVkFMSUQpfSx0aGlzKSxsLnNvcnQodGhpcy5faGludHMpfSxyLnByb3RvdHlwZS5nZXRIaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oaW50c30sci5wcm90b3R5cGUuZ2V0QXNzaWdubWVudEF0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0QXNzaWdubWVudHMoITApO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2lmKCFkLmFyZylyZXR1cm4gZDtpZihkLmlzUG9zaXRpb25DYXB0dXJlZChhKSlyZXR1cm4gZH1yZXR1cm4gZH0sci5wcm90b3R5cGUuX3Rva2VuaXplPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGcoYSl7cmV0dXJuIGEucmVwbGFjZSgvXHVGMDAwL2csIiAiKS5yZXBsYWNlKC9cdUYwMDEvZywiJyIpLnJlcGxhY2UoL1x1RjAwMi9nLCciJyl9aWYoYT09bnVsbHx8YS5sZW5ndGg9PT0wKXJldHVybltuZXcgbih0aGlzLCIiLDAsMCwiIiwiIildO3ZhciBiPTEsYz0yLGQ9MyxlPTQsZj1iO2E9YS5yZXBsYWNlKC9cXFxcL2csIlxcIikucmVwbGFjZSgvXFxiL2csIlxiIikucmVwbGFjZSgvXFxmL2csIlxmIikucmVwbGFjZSgvXFxuL2csIlxuIikucmVwbGFjZSgvXFxyL2csIlxyIikucmVwbGFjZSgvXFx0L2csIlx0IikucmVwbGFjZSgvXFx2L2csIgsiKS5yZXBsYWNlKC9cXG4vZywiXG4iKS5yZXBsYWNlKC9cXHIvZywiXHIiKS5yZXBsYWNlKC9cXCAvZywi74CAIikucmVwbGFjZSgvXFwnL2csIu+AgSIpLnJlcGxhY2UoL1xcIi9nLCLvgIIiKTt2YXIgaD0wLGk9MCxqPSIiLGs9W107Zm9yKDs7KXtpZihoPj1hLmxlbmd0aCl7aWYoZiE9PWIpe3ZhciBsPWcoYS5zdWJzdHJpbmcoaSxoKSk7ay5wdXNoKG5ldyBuKHRoaXMsbCxpLGgsaiwiIikpfWVsc2UgaWYoaCE9PWkpe3ZhciBtPWEuc3Vic3RyaW5nKGksaCksbz1rW2subGVuZ3RoLTFdO28/by5zdWZmaXgrPW06KG89bmV3IG4odGhpcywiIixoLGgsbSwiIiksay5wdXNoKG8pKX1icmVha312YXIgcD1hW2hdO3N3aXRjaChmKXtjYXNlIGI6cD09PSInIj8oaj1hLnN1YnN0cmluZyhpLGgrMSksZj1kLGk9aCsxKTpwPT09JyInPyhqPWEuc3Vic3RyaW5nKGksaCsxKSxmPWUsaT1oKzEpOi8gLy50ZXN0KHApfHwoaj1hLnN1YnN0cmluZyhpLGgpLGY9YyxpPWgpO2JyZWFrO2Nhc2UgYzppZihwPT09IiAiKXt2YXIgbD1nKGEuc3Vic3RyaW5nKGksaCkpO2sucHVzaChuZXcgbih0aGlzLGwsaSxoLGosIiIpKSxmPWIsaT1oLGo9IiJ9YnJlYWs7Y2FzZSBkOmlmKHA9PT0iJyIpe3ZhciBsPWcoYS5zdWJzdHJpbmcoaSxoKSk7ay5wdXNoKG5ldyBuKHRoaXMsbCxpLTEsaCsxLGoscCkpLGY9YixpPWgrMSxqPSIifWJyZWFrO2Nhc2UgZTppZihwPT09JyInKXt2YXIgbD1nKGEuc3Vic3RyaW5nKGksaCkpO2sucHVzaChuZXcgbih0aGlzLGwsaS0xLGgrMSxqLHApKSxmPWIsaT1oKzEsaj0iIn19aCsrfXJldHVybiBrfSxyLnByb3RvdHlwZS5fc3BsaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9MSxjO3doaWxlKGI8PWEubGVuZ3RoKXt2YXIgYz1uLm1lcmdlKGEsMCxiKTt0aGlzLmNvbW1hbmRBc3NpZ25tZW50LnNldEFyZ3VtZW50KGMpO2lmKCF0aGlzLmNvbW1hbmRBc3NpZ25tZW50LnZhbHVlKWJyZWFrO2lmKHRoaXMuY29tbWFuZEFzc2lnbm1lbnQudmFsdWUuZXhlYyl7Zm9yKHZhciBkPTA7ZDxiO2QrKylhLnNoaWZ0KCk7YnJlYWt9YisrfX0sci5wcm90b3R5cGUuX2Fzc2lnbj1mdW5jdGlvbihhKXtpZihhLmxlbmd0aD09PTApdGhpcy5zZXREZWZhdWx0VmFsdWVzKCk7ZWxzZXtpZih0aGlzLmFzc2lnbm1lbnRDb3VudD09PTApe3RoaXMuX2hpbnRzLnB1c2gobmV3IGwoaS5JTlZBTElELHRoaXMuY29tbWFuZEFzc2lnbm1lbnQudmFsdWUubmFtZSsiIGRvZXMgbm90IHRha2UgYW55IHBhcmFtZXRlcnMiLG4ubWVyZ2UoYSkpKTtyZXR1cm59aWYodGhpcy5hc3NpZ25tZW50Q291bnQ9PT0xKXt2YXIgYj10aGlzLmdldEFzc2lnbm1lbnQoMCk7aWYoYi5wYXJhbS50eXBlLm5hbWU9PT0idGV4dCIpe2Iuc2V0QXJndW1lbnQobi5tZXJnZShhKSk7cmV0dXJufX12YXIgYz10aGlzLmNsb25lQXNzaWdubWVudHMoKSxkPXRoaXMuZ2V0UGFyYW1ldGVyTmFtZXMoKSxmPVtdO2MuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgYz0iLS0iK2IubmFtZSxmPTA7Zm9yKDs7KXt2YXIgZz1hW2ZdO2lmKGMhPT1nLnRleHQpe2YrKztpZihmPj1hLmxlbmd0aClicmVhaztjb250aW51ZX1iLnBhcmFtLnR5cGUubmFtZT09PSJib29sZWFuIj9iLnNldFZhbHVlKCEwKTpmKzE8YS5sZW5ndGg/dGhpcy5faGludHMucHVzaChuZXcgbChpLklOQ09NUExFVEUsIk1pc3NpbmcgdmFsdWUgZm9yOiAiK2MsYVtmXSkpOihhLnNwbGljZShmKzEsMSksYi5zZXRBcmd1bWVudChhW2YrMV0pKSxlLmFycmF5UmVtb3ZlKGQsYi5uYW1lKSxhLnNwbGljZShmLDEpfX0sdGhpcyksZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuZ2V0QXNzaWdubWVudChiKTtpZihhLmxlbmd0aD09PTApYy5zZXRWYWx1ZSh1bmRlZmluZWQpO2Vsc2V7dmFyIGQ9YVswXTthLnNwbGljZSgwLDEpLGMuc2V0QXJndW1lbnQoZCl9fSx0aGlzKTtpZihhLmxlbmd0aD4wKXt2YXIgZz1uLm1lcmdlKGEpO3RoaXMuX2hpbnRzLnB1c2gobmV3IGwoaS5JTlZBTElELCJJbnB1dCAnIitnLnRleHQrIicgbWFrZXMgbm8gc2Vuc2UuIixnKSl9fX19KCksYi5DbGlSZXF1aXNpdGlvbj1yfSksZGVmaW5lKCJjb2NrcGl0L3VpL3NldHRpbmdzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwicGlsb3QvdHlwZXMiLCJwaWxvdC90eXBlcy9iYXNpYyJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCJwaWxvdC90eXBlcyIpLGU9YSgicGlsb3QvdHlwZXMvYmFzaWMiKS5TZWxlY3Rpb25UeXBlLGY9bmV3IGUoe25hbWU6ImRpcmVjdGlvbiIsZGF0YTpbImFib3ZlIiwiYmVsb3ciXX0pLGc9e25hbWU6ImhpbnREaXJlY3Rpb24iLGRlc2NyaXB0aW9uOiJBcmUgaGludHMgc2hvd24gYWJvdmUgb3IgYmVsb3cgdGhlIGNvbW1hbmQgbGluZT8iLHR5cGU6ImRpcmVjdGlvbiIsZGVmYXVsdFZhbHVlOiJhYm92ZSJ9LGg9e25hbWU6Im91dHB1dERpcmVjdGlvbiIsZGVzY3JpcHRpb246IklzIHRoZSBvdXRwdXQgd2luZG93IHNob3duIGFib3ZlIG9yIGJlbG93IHRoZSBjb21tYW5kIGxpbmU/Iix0eXBlOiJkaXJlY3Rpb24iLGRlZmF1bHRWYWx1ZToiYWJvdmUifSxpPXtuYW1lOiJvdXRwdXRIZWlnaHQiLGRlc2NyaXB0aW9uOiJXaGF0IGhlaWdodCBzaG91bGQgdGhlIG91dHB1dCBwYW5lbCBiZT8iLHR5cGU6Im51bWJlciIsZGVmYXVsdFZhbHVlOjMwMH07Yi5zdGFydHVwPWZ1bmN0aW9uKGEsYil7ZC5yZWdpc3RlclR5cGUoZiksYS5lbnYuc2V0dGluZ3MuYWRkU2V0dGluZyhnKSxhLmVudi5zZXR0aW5ncy5hZGRTZXR0aW5nKGgpLGEuZW52LnNldHRpbmdzLmFkZFNldHRpbmcoaSl9LGIuc2h1dGRvd249ZnVuY3Rpb24oYSxiKXtkLnVucmVnaXN0ZXJUeXBlKGYpLGEuZW52LnNldHRpbmdzLnJlbW92ZVNldHRpbmcoZyksYS5lbnYuc2V0dGluZ3MucmVtb3ZlU2V0dGluZyhoKSxhLmVudi5zZXR0aW5ncy5yZW1vdmVTZXR0aW5nKGkpfX0pLGRlZmluZSgiY29ja3BpdC91aS9jbGlfdmlldyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsInRleHQhY29ja3BpdC91aS9jbGlfdmlldy5jc3MiLCJwaWxvdC9ldmVudCIsInBpbG90L2RvbSIsInBpbG90L2tleXMiLCJwaWxvdC9jYW5vbiIsInBpbG90L3R5cGVzIiwiY29ja3BpdC9jbGkiLCJjb2NrcGl0L3VpL3JlcXVlc3RfdmlldyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBuKGEsYil7YS5jbGlWaWV3PXRoaXMsdGhpcy5jbGk9YSx0aGlzLmRvYz1kb2N1bWVudCx0aGlzLndpbj1mLmdldFBhcmVudFdpbmRvdyh0aGlzLmRvYyksdGhpcy5lbnY9Yix0aGlzLmVsZW1lbnQ9dGhpcy5kb2MuZ2V0RWxlbWVudEJ5SWQoImNvY2twaXRJbnB1dCIpOyF0aGlzLmVsZW1lbnR8fCh0aGlzLnNldHRpbmdzPWIuc2V0dGluZ3MsdGhpcy5oaW50RGlyZWN0aW9uPXRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZygiaGludERpcmVjdGlvbiIpLHRoaXMub3V0cHV0RGlyZWN0aW9uPXRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZygib3V0cHV0RGlyZWN0aW9uIiksdGhpcy5vdXRwdXRIZWlnaHQ9dGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5nKCJvdXRwdXRIZWlnaHQiKSx0aGlzLmlzVXBkYXRpbmc9ITEsdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMudXBkYXRlKCkpfXZhciBkPWEoInRleHQhY29ja3BpdC91aS9jbGlfdmlldy5jc3MiKSxlPWEoInBpbG90L2V2ZW50IiksZj1hKCJwaWxvdC9kb20iKTtmLmltcG9ydENzc1N0cmluZyhkKTt2YXIgZT1hKCJwaWxvdC9ldmVudCIpLGc9YSgicGlsb3Qva2V5cyIpLGg9YSgicGlsb3QvY2Fub24iKSxpPWEoInBpbG90L3R5cGVzIikuU3RhdHVzLGo9YSgiY29ja3BpdC9jbGkiKS5DbGlSZXF1aXNpdGlvbixrPWEoImNvY2twaXQvY2xpIikuSGludCxsPWEoImNvY2twaXQvdWkvcmVxdWVzdF92aWV3IikuUmVxdWVzdFZpZXcsbT1uZXcgayhpLlZBTElELCIiLDAsMCk7Yi5zdGFydHVwPWZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGooYS5lbnYpLGQ9bmV3IG4oYyxhLmVudik7YS5lbnYuY2xpPWN9LG4ucHJvdG90eXBlPXtjcmVhdGVFbGVtZW50czpmdW5jdGlvbigpe2Z1bmN0aW9uIGQoKXtmLnJlbW92ZUNzc0NsYXNzKHRoaXMub3V0cHV0LCJjcHRGb2N1c1BvcHVwIiksZi5yZW1vdmVDc3NDbGFzcyh0aGlzLmhpbnRlciwiY3B0Rm9jdXNQb3B1cCIpfXZhciBhPXRoaXMuZWxlbWVudDt0aGlzLmVsZW1lbnQuc3BlbGxjaGVjaz0hMSx0aGlzLm91dHB1dD10aGlzLmRvYy5nZXRFbGVtZW50QnlJZCgiY29ja3BpdE91dHB1dCIpLHRoaXMucG9wdXBPdXRwdXQ9dGhpcy5vdXRwdXQ9PW51bGw7aWYoIXRoaXMub3V0cHV0KXt0aGlzLm91dHB1dD10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLm91dHB1dC5pZD0iY29ja3BpdE91dHB1dCIsdGhpcy5vdXRwdXQuY2xhc3NOYW1lPSJjcHRPdXRwdXQiLGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5vdXRwdXQsYS5uZXh0U2libGluZyk7dmFyIGI9ZnVuY3Rpb24oKXt0aGlzLm91dHB1dC5zdHlsZS5tYXhIZWlnaHQ9dGhpcy5vdXRwdXRIZWlnaHQuZ2V0KCkrInB4In0uYmluZCh0aGlzKTt0aGlzLm91dHB1dEhlaWdodC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGIpLGIoKX10aGlzLmNvbXBsZXRlcj10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbXBsZXRlci5jbGFzc05hbWU9ImNwdENvbXBsZXRpb24gVkFMSUQiLHRoaXMuY29tcGxldGVyLnN0eWxlLmNvbG9yPWYuY29tcHV0ZWRTdHlsZShhLCJjb2xvciIpLHRoaXMuY29tcGxldGVyLnN0eWxlLmZvbnRTaXplPWYuY29tcHV0ZWRTdHlsZShhLCJmb250U2l6ZSIpLHRoaXMuY29tcGxldGVyLnN0eWxlLmZvbnRGYW1pbHk9Zi5jb21wdXRlZFN0eWxlKGEsImZvbnRGYW1pbHkiKSx0aGlzLmNvbXBsZXRlci5zdHlsZS5mb250V2VpZ2h0PWYuY29tcHV0ZWRTdHlsZShhLCJmb250V2VpZ2h0IiksdGhpcy5jb21wbGV0ZXIuc3R5bGUuZm9udFN0eWxlPWYuY29tcHV0ZWRTdHlsZShhLCJmb250U3R5bGUiKSxhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY29tcGxldGVyLGEubmV4dFNpYmxpbmcpLHRoaXMuY29tcGxldGVyLnN0eWxlLmJhY2tncm91bmRDb2xvcj1hLnN0eWxlLmJhY2tncm91bmRDb2xvcixhLnN0eWxlLmJhY2tncm91bmRDb2xvcj0idHJhbnNwYXJlbnQiLHRoaXMuaGludGVyPXRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuaGludGVyLmNsYXNzTmFtZT0iY3B0SGludHMiLGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5oaW50ZXIsYS5uZXh0U2libGluZyk7dmFyIGM9dGhpcy5yZXNpemVyLmJpbmQodGhpcyk7ZS5hZGRMaXN0ZW5lcih0aGlzLndpbiwicmVzaXplIixjKSx0aGlzLmhpbnREaXJlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixjKSx0aGlzLm91dHB1dERpcmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGMpLGMoKSxoLmFkZEV2ZW50TGlzdGVuZXIoIm91dHB1dCIsZnVuY3Rpb24oYSl7bmV3IGwoYS5yZXF1ZXN0LHRoaXMpfS5iaW5kKHRoaXMpKSxlLmFkZENvbW1hbmRLZXlMaXN0ZW5lcihhLHRoaXMub25Db21tYW5kS2V5LmJpbmQodGhpcykpLGUuYWRkTGlzdGVuZXIoYSwia2V5dXAiLHRoaXMub25LZXlVcC5iaW5kKHRoaXMpKSxlLmFkZExpc3RlbmVyKGEsIm1vdXNldXAiLGZ1bmN0aW9uKGEpe3RoaXMuaXNVcGRhdGluZz0hMCx0aGlzLnVwZGF0ZSgpLHRoaXMuaXNVcGRhdGluZz0hMX0uYmluZCh0aGlzKSksdGhpcy5jbGkuYWRkRXZlbnRMaXN0ZW5lcigiYXJndW1lbnRDaGFuZ2UiLHRoaXMub25BcmdDaGFuZ2UuYmluZCh0aGlzKSksZS5hZGRMaXN0ZW5lcihhLCJmb2N1cyIsZnVuY3Rpb24oKXtmLmFkZENzc0NsYXNzKHRoaXMub3V0cHV0LCJjcHRGb2N1c1BvcHVwIiksZi5hZGRDc3NDbGFzcyh0aGlzLmhpbnRlciwiY3B0Rm9jdXNQb3B1cCIpfS5iaW5kKHRoaXMpKSxlLmFkZExpc3RlbmVyKGEsImJsdXIiLGQuYmluZCh0aGlzKSksZC5jYWxsKHRoaXMpfSxzY3JvbGxPdXRwdXRUb0JvdHRvbTpmdW5jdGlvbigpe3ZhciBhPU1hdGgubWF4KHRoaXMub3V0cHV0LnNjcm9sbEhlaWdodCx0aGlzLm91dHB1dC5jbGllbnRIZWlnaHQpO3RoaXMub3V0cHV0LnNjcm9sbFRvcD1hLXRoaXMub3V0cHV0LmNsaWVudEhlaWdodH0scmVzaXplcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO3RoaXMuY29tcGxldGVyLnN0eWxlLnRvcD1hLnRvcCsicHgiO3ZhciBiPWEuYm90dG9tLWEudG9wO3RoaXMuY29tcGxldGVyLnN0eWxlLmhlaWdodD1iKyJweCIsdGhpcy5jb21wbGV0ZXIuc3R5bGUubGluZUhlaWdodD1iKyJweCIsdGhpcy5jb21wbGV0ZXIuc3R5bGUubGVmdD1hLmxlZnQrInB4Ijt2YXIgYz1hLnJpZ2h0LWEubGVmdDt0aGlzLmNvbXBsZXRlci5zdHlsZS53aWR0aD1jKyJweCIsdGhpcy5oaW50RGlyZWN0aW9uLmdldCgpPT09ImJlbG93Ij8odGhpcy5oaW50ZXIuc3R5bGUudG9wPWEuYm90dG9tKyJweCIsdGhpcy5oaW50ZXIuc3R5bGUuYm90dG9tPSJhdXRvIik6KHRoaXMuaGludGVyLnN0eWxlLnRvcD0iYXV0byIsdGhpcy5oaW50ZXIuc3R5bGUuYm90dG9tPXRoaXMuZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtYS50b3ArInB4IiksdGhpcy5oaW50ZXIuc3R5bGUubGVmdD1hLmxlZnQrMzArInB4Iix0aGlzLmhpbnRlci5zdHlsZS5tYXhXaWR0aD1jLTExMCsicHgiLHRoaXMucG9wdXBPdXRwdXQmJih0aGlzLm91dHB1dERpcmVjdGlvbi5nZXQoKT09PSJiZWxvdyI/KHRoaXMub3V0cHV0LnN0eWxlLnRvcD1hLmJvdHRvbSsicHgiLHRoaXMub3V0cHV0LnN0eWxlLmJvdHRvbT0iYXV0byIpOih0aGlzLm91dHB1dC5zdHlsZS50b3A9ImF1dG8iLHRoaXMub3V0cHV0LnN0eWxlLmJvdHRvbT10aGlzLmRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LWEudG9wKyJweCIpLHRoaXMub3V0cHV0LnN0eWxlLmxlZnQ9YS5sZWZ0KyJweCIsdGhpcy5vdXRwdXQuc3R5bGUud2lkdGg9Yy04MCsicHgiKX0sb25Db21tYW5kS2V5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihjPT09Zy5UQUJ8fGM9PT1nLlVQfHxjPT09Zy5ET1dOKWQ9ITA7ZWxzZSBpZihiIT0wfHxjIT0wKWQ9aC5leGVjS2V5Q29tbWFuZCh0aGlzLmVudiwiY2xpIixiLGMpO2QmJmUuc3RvcEV2ZW50KGEpfSxvbktleVVwOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEua2V5Q29kZT09PWcuUkVUVVJOKXt2YXIgYz10aGlzLmNsaS5nZXRXb3JzdEhpbnQoKTtjLnN0YXR1cz09PWkuVkFMSUQ/KHRoaXMuY2xpLmV4ZWMoKSx0aGlzLmVsZW1lbnQudmFsdWU9IiIpOihmLnNldFNlbGVjdGlvblN0YXJ0KHRoaXMuZWxlbWVudCxjLnN0YXJ0KSxmLnNldFNlbGVjdGlvbkVuZCh0aGlzLmVsZW1lbnQsYy5lbmQpKX10aGlzLnVwZGF0ZSgpO3ZhciBkPXRoaXMuY2xpLmdldEFzc2lnbm1lbnRBdChmLmdldFNlbGVjdGlvblN0YXJ0KHRoaXMuZWxlbWVudCkpO2QmJihhLmtleUNvZGU9PT1nLlRBQiYmKGQuY29tcGxldGUoKSx0aGlzLnVwZGF0ZSgpKSxhLmtleUNvZGU9PT1nLlVQJiYoZC5pbmNyZW1lbnQoKSx0aGlzLnVwZGF0ZSgpKSxhLmtleUNvZGU9PT1nLkRPV04mJihkLmRlY3JlbWVudCgpLHRoaXMudXBkYXRlKCkpKTtyZXR1cm4gYn0sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5pc1VwZGF0aW5nPSEwO3ZhciBhPXt0eXBlZDp0aGlzLmVsZW1lbnQudmFsdWUsY3Vyc29yOntzdGFydDpmLmdldFNlbGVjdGlvblN0YXJ0KHRoaXMuZWxlbWVudCksZW5kOmYuZ2V0U2VsZWN0aW9uRW5kKHRoaXMuZWxlbWVudC5zZWxlY3Rpb25FbmQpfX07dGhpcy5jbGkudXBkYXRlKGEpO3ZhciBiPXRoaXMuY2xpLmdldEFzc2lnbm1lbnRBdChhLmN1cnNvci5zdGFydCkuZ2V0SGludCgpO2YucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jb21wbGV0ZXIsaS5WQUxJRC50b1N0cmluZygpKSxmLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29tcGxldGVyLGkuSU5DT01QTEVURS50b1N0cmluZygpKSxmLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29tcGxldGVyLGkuSU5WQUxJRC50b1N0cmluZygpKTt2YXIgYz0nPHNwYW4gY2xhc3M9ImNwdFByb21wdCI+Jmd0Ozwvc3Bhbj4gJztpZih0aGlzLmVsZW1lbnQudmFsdWUubGVuZ3RoPjApe3ZhciBkPXRoaXMuY2xpLmdldElucHV0U3RhdHVzTWFya3VwKCk7Yys9dGhpcy5tYXJrdXBTdGF0dXNTY29yZShkKX1pZih0aGlzLmVsZW1lbnQudmFsdWUubGVuZ3RoPjAmJmIucHJlZGljdGlvbnMmJmIucHJlZGljdGlvbnMubGVuZ3RoPjApe3ZhciBlPWIucHJlZGljdGlvbnNbMF07Yys9IiAmbmJzcDsmI3gyMUU1OyAiKyhlLm5hbWU/ZS5uYW1lOmUpfXRoaXMuY29tcGxldGVyLmlubmVySFRNTD1jLGYuYWRkQ3NzQ2xhc3ModGhpcy5jb21wbGV0ZXIsdGhpcy5jbGkuZ2V0V29yc3RIaW50KCkuc3RhdHVzLnRvU3RyaW5nKCkpO3ZhciBnPSIiO3RoaXMuZWxlbWVudC52YWx1ZS5sZW5ndGghPT0wJiYoZys9Yi5tZXNzYWdlLGIucHJlZGljdGlvbnMmJmIucHJlZGljdGlvbnMubGVuZ3RoPjAmJihnKz0iOiBbICIsYi5wcmVkaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2crPWEubmFtZT9hLm5hbWU6YSxnKz0iIHwgIn0sdGhpcyksZz1nLnJlcGxhY2UoL1x8ICQvLCJdIikpKSx0aGlzLmhpbnRlci5pbm5lckhUTUw9ZyxnLmxlbmd0aD09PTA/Zi5hZGRDc3NDbGFzcyh0aGlzLmhpbnRlciwiY3B0Tm9Qb3B1cCIpOmYucmVtb3ZlQ3NzQ2xhc3ModGhpcy5oaW50ZXIsImNwdE5vUG9wdXAiKSx0aGlzLmlzVXBkYXRpbmc9ITF9LG1hcmt1cFN0YXR1c1Njb3JlOmZ1bmN0aW9uKGEpe3ZhciBiPSIiLGM9MCxkPS0xO2Zvcig7Oyl7ZCE9PWFbY10mJihiKz0iPHNwYW4gY2xhc3M9IithW2NdLnRvU3RyaW5nKCkrIj4iLGQ9YVtjXSksYis9dGhpcy5lbGVtZW50LnZhbHVlW2NdLGMrKztpZihjPT09dGhpcy5lbGVtZW50LnZhbHVlLmxlbmd0aCl7Yis9Ijwvc3Bhbj4iO2JyZWFrfWQhPT1hW2NdJiYoYis9Ijwvc3Bhbj4iKX1yZXR1cm4gYn0sb25BcmdDaGFuZ2U6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuaXNVcGRhdGluZyl7dmFyIGI9dGhpcy5lbGVtZW50LnZhbHVlLnN1YnN0cmluZygwLGEuYXJndW1lbnQuc3RhcnQpLGM9dGhpcy5lbGVtZW50LnZhbHVlLnN1YnN0cmluZyhhLmFyZ3VtZW50LmVuZCksZD10eXBlb2YgYS50ZXh0PT0ic3RyaW5nIj9hLnRleHQ6YS50ZXh0Lm5hbWU7dGhpcy5lbGVtZW50LnZhbHVlPWIrZCtjO3ZhciBlPShiK2QpLmxlbmd0aDt0aGlzLmVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9ZSx0aGlzLmVsZW1lbnQuc2VsZWN0aW9uRW5kPWV9fX0sYi5DbGlWaWV3PW59KSxkZWZpbmUoImNvY2twaXQvdWkvcmVxdWVzdF92aWV3IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwicGlsb3QvZG9tIiwicGlsb3QvZXZlbnQiLCJ0ZXh0IWNvY2twaXQvdWkvcmVxdWVzdF92aWV3Lmh0bWwiLCJwaWxvdC9kb210ZW1wbGF0ZSIsInRleHQhY29ja3BpdC91aS9yZXF1ZXN0X3ZpZXcuY3NzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGwoYSxiKXt0aGlzLnJlcXVlc3Q9YSx0aGlzLmNsaVZpZXc9Yix0aGlzLmltYWdlVXJsPWssdGhpcy5yb3dpbj1udWxsLHRoaXMucm93b3V0PW51bGwsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLmhpZGU9bnVsbCx0aGlzLnNob3c9bnVsbCx0aGlzLmR1cmF0aW9uPW51bGwsdGhpcy50aHJvYj1udWxsLChuZXcgZykucHJvY2Vzc05vZGUoai5jbG9uZU5vZGUoITApLHRoaXMpLHRoaXMuY2xpVmlldy5vdXRwdXQuYXBwZW5kQ2hpbGQodGhpcy5yb3dpbiksdGhpcy5jbGlWaWV3Lm91dHB1dC5hcHBlbmRDaGlsZCh0aGlzLnJvd291dCksdGhpcy5yZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoIm91dHB1dCIsdGhpcy5vblJlcXVlc3RDaGFuZ2UuYmluZCh0aGlzKSl9ZnVuY3Rpb24gayhiKXt2YXIgZDt0cnl7ZD1hKCJ0ZXh0IWNvY2twaXQvdWkvIitiKX1jYXRjaChlKXt9aWYoZClyZXR1cm4gZDt2YXIgZj1jLmlkLnNwbGl0KCIvIikucG9wKCkrIi5qcyIsZztpZihjLnVyaS5zdWJzdHIoLWYubGVuZ3RoKSE9PWYpe2NvbnNvbGUuZXJyb3IoIkNhbid0IHdvcmsgb3V0IHBhdGggZnJvbSBtb2R1bGUudXJpL21vZHVsZS5pZCIpO3JldHVybiBifWlmKGMudXJpKXt2YXIgaD1jLnVyaS5sZW5ndGgtZi5sZW5ndGgtMTtyZXR1cm4gYy51cmkuc3Vic3RyKDAsaCkrIi8iK2J9cmV0dXJuIGYrYn12YXIgZD1hKCJwaWxvdC9kb20iKSxlPWEoInBpbG90L2V2ZW50IiksZj1hKCJ0ZXh0IWNvY2twaXQvdWkvcmVxdWVzdF92aWV3Lmh0bWwiKSxnPWEoInBpbG90L2RvbXRlbXBsYXRlIikuVGVtcGxhdGVyLGg9YSgidGV4dCFjb2NrcGl0L3VpL3JlcXVlc3Rfdmlldy5jc3MiKTtkLmltcG9ydENzc1N0cmluZyhoKTt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLmlubmVySFRNTD1mO3ZhciBqPWkucXVlcnlTZWxlY3RvcigiLmNwdFJvdyIpO2wucHJvdG90eXBlPXtjb3B5VG9JbnB1dDpmdW5jdGlvbigpe3RoaXMuY2xpVmlldy5lbGVtZW50LnZhbHVlPXRoaXMucmVxdWVzdC50eXBlZH0sZXhlY3V0ZVJlcXVlc3Q6ZnVuY3Rpb24oYSl7dGhpcy5jbGlWaWV3LmNsaS51cGRhdGUoe3R5cGVkOnRoaXMucmVxdWVzdC50eXBlZCxjdXJzb3I6e3N0YXJ0OjAsZW5kOjB9fSksdGhpcy5jbGlWaWV3LmNsaS5leGVjKCl9LGhpZGVPdXRwdXQ6ZnVuY3Rpb24oYSl7dGhpcy5vdXRwdXQuc3R5bGUuZGlzcGxheT0ibm9uZSIsZC5hZGRDc3NDbGFzcyh0aGlzLmhpZGUsImNtZF9oaWRkZW4iKSxkLnJlbW92ZUNzc0NsYXNzKHRoaXMuc2hvdywiY21kX2hpZGRlbiIpLGUuc3RvcFByb3BhZ2F0aW9uKGEpfSxzaG93T3V0cHV0OmZ1bmN0aW9uKGEpe3RoaXMub3V0cHV0LnN0eWxlLmRpc3BsYXk9ImJsb2NrIixkLnJlbW92ZUNzc0NsYXNzKHRoaXMuaGlkZSwiY21kX2hpZGRlbiIpLGQuYWRkQ3NzQ2xhc3ModGhpcy5zaG93LCJjbWRfaGlkZGVuIiksZS5zdG9wUHJvcGFnYXRpb24oYSl9LHJlbW92ZTpmdW5jdGlvbihhKXt0aGlzLmNsaVZpZXcub3V0cHV0LnJlbW92ZUNoaWxkKHRoaXMucm93aW4pLHRoaXMuY2xpVmlldy5vdXRwdXQucmVtb3ZlQ2hpbGQodGhpcy5yb3dvdXQpLGUuc3RvcFByb3BhZ2F0aW9uKGEpfSxvblJlcXVlc3RDaGFuZ2U6ZnVuY3Rpb24oYSl7dGhpcy5kdXJhdGlvbi5pbm5lckhUTUw9dGhpcy5yZXF1ZXN0LmR1cmF0aW9uPyJjb21wbGV0ZWQgaW4gIit0aGlzLnJlcXVlc3QuZHVyYXRpb24vMWUzKyIgc2VjICI6IiIsdGhpcy5vdXRwdXQuaW5uZXJIVE1MPSIiLHRoaXMucmVxdWVzdC5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI7dHlwZW9mIGE9PSJzdHJpbmciPyhiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKSxiLmlubmVySFRNTD1hKTpiPWEsdGhpcy5vdXRwdXQuYXBwZW5kQ2hpbGQoYil9LHRoaXMpLHRoaXMuY2xpVmlldy5zY3JvbGxPdXRwdXRUb0JvdHRvbSgpLGQuc2V0Q3NzQ2xhc3ModGhpcy5vdXRwdXQsImNtZF9lcnJvciIsdGhpcy5yZXF1ZXN0LmVycm9yKSx0aGlzLnRocm9iLnN0eWxlLmRpc3BsYXk9dGhpcy5yZXF1ZXN0LmNvbXBsZXRlZD8ibm9uZSI6ImJsb2NrIn19LGIuUmVxdWVzdFZpZXc9bH0pLGRlZmluZSgicGlsb3QvZG9tdGVtcGxhdGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihyZXF1aXJlLGV4cG9ydHMsbW9kdWxlKXtmdW5jdGlvbiBUZW1wbGF0ZXIoKXt0aGlzLnNjb3BlPVtdfVRlbXBsYXRlci5wcm90b3R5cGUucHJvY2Vzc05vZGU9ZnVuY3Rpb24oYSxiKXt0eXBlb2YgYT09InN0cmluZyImJihhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKTtpZihiPT09bnVsbHx8Yj09PXVuZGVmaW5lZCliPXt9O3RoaXMuc2NvcGUucHVzaChhLm5vZGVOYW1lKyhhLmlkPyIjIithLmlkOiIiKSk7dHJ5e2lmKGEuYXR0cmlidXRlcyYmYS5hdHRyaWJ1dGVzLmxlbmd0aCl7aWYoYS5oYXNBdHRyaWJ1dGUoImZvcmVhY2giKSl7dGhpcy5wcm9jZXNzRm9yRWFjaChhLGIpO3JldHVybn1pZihhLmhhc0F0dHJpYnV0ZSgiaWYiKSYmIXRoaXMucHJvY2Vzc0lmKGEsYikpcmV0dXJuO2IuX19lbGVtZW50PWE7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYS5hdHRyaWJ1dGVzKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXS52YWx1ZSxmPWNbZF0ubmFtZTt0aGlzLnNjb3BlLnB1c2goZik7dHJ5e2lmKGY9PT0ic2F2ZSIpZT10aGlzLnN0cmlwQnJhY2VzKGUpLHRoaXMucHJvcGVydHkoZSxiLGEpLGEucmVtb3ZlQXR0cmlidXRlKCJzYXZlIik7ZWxzZSBpZihmLnN1YnN0cmluZygwLDIpPT09Im9uIil7ZT10aGlzLnN0cmlwQnJhY2VzKGUpO3ZhciBnPXRoaXMucHJvcGVydHkoZSxiKTt0eXBlb2YgZyE9ImZ1bmN0aW9uIiYmdGhpcy5oYW5kbGVFcnJvcigiRXhwZWN0ZWQgIitlKyIgdG8gcmVzb2x2ZSB0byBhIGZ1bmN0aW9uLCBidXQgZ290ICIrdHlwZW9mIGcpLGEucmVtb3ZlQXR0cmlidXRlKGYpO3ZhciBoPWEuaGFzQXR0cmlidXRlKCJjYXB0dXJlIitmLnN1YnN0cmluZygyKSk7YS5hZGRFdmVudExpc3RlbmVyKGYuc3Vic3RyaW5nKDIpLGcsaCksaCYmYS5yZW1vdmVBdHRyaWJ1dGUoImNhcHR1cmUiK2Yuc3Vic3RyaW5nKDIpKX1lbHNle3ZhciBpPXRoaXMsaj1lLnJlcGxhY2UoL1wkXHtbXn1dKlx9L2csZnVuY3Rpb24oYSl7cmV0dXJuIGkuZW52RXZhbChhLnNsaWNlKDIsLTEpLGIsZSl9KTtmLmNoYXJBdCgwKT09PSJfIj8oYS5yZW1vdmVBdHRyaWJ1dGUoZiksYS5zZXRBdHRyaWJ1dGUoZi5zdWJzdHJpbmcoMSksaikpOmUhPT1qJiYoY1tkXS52YWx1ZT1qKX19ZmluYWxseXt0aGlzLnNjb3BlLnBvcCgpfX19dmFyIGs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYS5jaGlsZE5vZGVzKTtmb3IodmFyIGw9MDtsPGsubGVuZ3RoO2wrKyl0aGlzLnByb2Nlc3NOb2RlKGtbbF0sYik7YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFJiZ0aGlzLnByb2Nlc3NUZXh0Tm9kZShhLGIpfWZpbmFsbHl7dGhpcy5zY29wZS5wb3AoKX19LFRlbXBsYXRlci5wcm90b3R5cGUucHJvY2Vzc0lmPWZ1bmN0aW9uKGEsYil7dGhpcy5zY29wZS5wdXNoKCJpZiIpO3RyeXt2YXIgYz1hLmdldEF0dHJpYnV0ZSgiaWYiKSxkPXRoaXMuc3RyaXBCcmFjZXMoYyksZT0hMDt0cnl7dmFyIGY9dGhpcy5lbnZFdmFsKGQsYixjKTtlPSEhZn1jYXRjaChnKXt0aGlzLmhhbmRsZUVycm9yKCJFcnJvciB3aXRoICciK2QrIiciLGcpLGU9ITF9ZXx8YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLGEucmVtb3ZlQXR0cmlidXRlKCJpZiIpO3JldHVybiBlfWZpbmFsbHl7dGhpcy5zY29wZS5wb3AoKX19LFRlbXBsYXRlci5wcm90b3R5cGUucHJvY2Vzc0ZvckVhY2g9ZnVuY3Rpb24oYSxiKXt0aGlzLnNjb3BlLnB1c2goImZvcmVhY2giKTt0cnl7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoImZvcmVhY2giKSxkPWMsZT0icGFyYW0iO2lmKGQuY2hhckF0KDApPT09IiQiKWQ9dGhpcy5zdHJpcEJyYWNlcyhkKTtlbHNle3ZhciBmPWQuc3BsaXQoIiBpbiAiKTtlPWZbMF0udHJpbSgpLGQ9dGhpcy5zdHJpcEJyYWNlcyhmWzFdLnRyaW0oKSl9YS5yZW1vdmVBdHRyaWJ1dGUoImZvcmVhY2giKTt0cnl7dmFyIGc9dGhpcyxoPWZ1bmN0aW9uKGEsYyxkKXtkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGMsZCksYltlXT1hLGcucHJvY2Vzc05vZGUoYyxiKSxkZWxldGUgYltlXX0saT1mdW5jdGlvbihiLGMpe2cuc2NvcGUucHVzaChiKTt0cnl7aWYoYS5ub2RlTmFtZT09PSJMT09QIilmb3IodmFyIGQ9MDtkPGEuY2hpbGROb2Rlcy5sZW5ndGg7ZCsrKXt2YXIgZT1hLmNoaWxkTm9kZXNbZF0uY2xvbmVOb2RlKCEwKTtoKGMsZSxhKX1lbHNle3ZhciBlPWEuY2xvbmVOb2RlKCEwKTtlLnJlbW92ZUF0dHJpYnV0ZSgiZm9yZWFjaCIpLGgoYyxlLGEpfX1maW5hbGx5e2cuc2NvcGUucG9wKCl9fSxqPXRoaXMuZW52RXZhbChkLGIsYyk7aWYoQXJyYXkuaXNBcnJheShqKSlqLmZvckVhY2goZnVuY3Rpb24oYSxiKXtpKCIiK2IsYSl9LHRoaXMpO2Vsc2UgZm9yKHZhciBrIGluIGopai5oYXNPd25Qcm9wZXJ0eShrKSYmaShrLGspO2EucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKX1jYXRjaChsKXt0aGlzLmhhbmRsZUVycm9yKCJFcnJvciB3aXRoICciK2QrIiciLGwpfX1maW5hbGx5e3RoaXMuc2NvcGUucG9wKCl9fSxUZW1wbGF0ZXIucHJvdG90eXBlLnByb2Nlc3NUZXh0Tm9kZT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZGF0YTtjPWMucmVwbGFjZSgvXCRceyhbXn1dKilcfS9nLCLvgIEkJCQx74CCIik7dmFyIGQ9Yy5zcGxpdCgvXHVGMDAxfFx1RjAwMi8pO2QubGVuZ3RoPjEmJihkLmZvckVhY2goZnVuY3Rpb24oYyl7YyE9PW51bGwmJmMhPT11bmRlZmluZWQmJmMhPT0iIiYmKGMuY2hhckF0KDApPT09IiQiJiYoYz10aGlzLmVudkV2YWwoYy5zbGljZSgxKSxiLGEuZGF0YSkpLGM9PT1udWxsJiYoYz0ibnVsbCIpLGM9PT11bmRlZmluZWQmJihjPSJ1bmRlZmluZWQiKSx0eXBlb2YgYy5jbG9uZU5vZGUhPSJmdW5jdGlvbiImJihjPWEub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjLnRvU3RyaW5nKCkpKSxhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGMsYSkpfSx0aGlzKSxhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSkpfSxUZW1wbGF0ZXIucHJvdG90eXBlLnN0cmlwQnJhY2VzPWZ1bmN0aW9uKGEpe2lmKCFhLm1hdGNoKC9cJFx7LipcfS9nKSl7dGhpcy5oYW5kbGVFcnJvcigiRXhwZWN0ZWQgIithKyIgdG8gbWF0Y2ggJHsuLi59Iik7cmV0dXJuIGF9cmV0dXJuIGEuc2xpY2UoMiwtMSl9LFRlbXBsYXRlci5wcm90b3R5cGUucHJvcGVydHk9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuc2NvcGUucHVzaChhKTt0cnl7dHlwZW9mIGE9PSJzdHJpbmciJiYoYT1hLnNwbGl0KCIuIikpO3ZhciBkPWJbYVswXV07aWYoYS5sZW5ndGg9PT0xKXtjIT09dW5kZWZpbmVkJiYoYlthWzBdXT1jKTtyZXR1cm4gdHlwZW9mIGQ9PSJmdW5jdGlvbiI/ZnVuY3Rpb24oKXtyZXR1cm4gZC5hcHBseShiLGFyZ3VtZW50cyl9OmR9aWYoIWQpe3RoaXMuaGFuZGxlRXJyb3IoIkNhbid0IGZpbmQgcGF0aD0iK2EpO3JldHVybiBudWxsfXJldHVybiB0aGlzLnByb3BlcnR5KGEuc2xpY2UoMSksZCxjKX1maW5hbGx5e3RoaXMuc2NvcGUucG9wKCl9fSxUZW1wbGF0ZXIucHJvdG90eXBlLmVudkV2YWw9ZnVuY3Rpb24oc2NyaXB0LGVudixjb250ZXh0KXt3aXRoKGVudil0cnl7dGhpcy5zY29wZS5wdXNoKGNvbnRleHQpO3JldHVybiBldmFsKHNjcmlwdCl9Y2F0Y2goZXgpe3RoaXMuaGFuZGxlRXJyb3IoIlRlbXBsYXRlIGVycm9yIGV2YWx1YXRpbmcgJyIrc2NyaXB0KyInIixleCk7cmV0dXJuIHNjcmlwdH1maW5hbGx5e3RoaXMuc2NvcGUucG9wKCl9fSxUZW1wbGF0ZXIucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKGEsYil7dGhpcy5sb2dFcnJvcihhKSx0aGlzLmxvZ0Vycm9yKCJJbjogIit0aGlzLnNjb3BlLmpvaW4oIiA+ICIpKSxiJiZ0aGlzLmxvZ0Vycm9yKGIpfSxUZW1wbGF0ZXIucHJvdG90eXBlLmxvZ0Vycm9yPWZ1bmN0aW9uKGEpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpfSxleHBvcnRzLlRlbXBsYXRlcj1UZW1wbGF0ZXJ9KSxkZWZpbmUoImNvY2twaXQvY29tbWFuZHMvYmFzaWMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJwaWxvdC9jYW5vbiJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCJwaWxvdC9jYW5vbiIpLGU9e25hbWU6InNoIixkZXNjcmlwdGlvbjoiRXhlY3V0ZSBhIHN5c3RlbSBjb21tYW5kIChyZXF1aXJlcyBzZXJ2ZXIgc3VwcG9ydCkiLHBhcmFtczpbe25hbWU6ImNvbW1hbmQiLHR5cGU6InRleHQiLGRlc2NyaXB0aW9uOiJUaGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIG9zIHNoZWxsLiJ9XSxleGVjOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1uZXcgWE1MSHR0cFJlcXVlc3Q7ZC5vcGVuKCJHRVQiLCIvZXhlYz9hcmdzPSIrYi5jb21tYW5kLCEwKSxkLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhKXtkLnJlYWR5U3RhdGU9PTQmJmQuc3RhdHVzPT0yMDAmJmMuZG9uZSgiPHByZT4iK2QucmVzcG9uc2VUZXh0KyI8L3ByZT4iKX0sZC5zZW5kKG51bGwpfX0sZD1hKCJwaWxvdC9jYW5vbiIpO2Iuc3RhcnR1cD1mdW5jdGlvbihhLGIpe2QuYWRkQ29tbWFuZChlKX0sYi5zaHV0ZG93bj1mdW5jdGlvbihhLGIpe2QucmVtb3ZlQ29tbWFuZChlKX19KSxkZWZpbmUoInRleHQhY29ja3BpdC91aS9jbGlfdmlldy5jc3MiLFtdLCIjY29ja3BpdElucHV0IHsgcGFkZGluZy1sZWZ0OiAxNnB4OyB9LmNwdE91dHB1dCB7IG92ZXJmbG93OiBhdXRvOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDk5OTsgZGlzcGxheTogbm9uZTsgfS5jcHRDb21wbGV0aW9uIHsgcGFkZGluZzogMDsgcG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiAtMTAwMDsgfS5jcHRDb21wbGV0aW9uLlZBTElEIHsgYmFja2dyb3VuZDogI0ZGRjsgfS5jcHRDb21wbGV0aW9uLklOQ09NUExFVEUgeyBiYWNrZ3JvdW5kOiAjREREOyB9LmNwdENvbXBsZXRpb24uSU5WQUxJRCB7IGJhY2tncm91bmQ6ICNEREQ7IH0uY3B0Q29tcGxldGlvbiBzcGFuIHsgY29sb3I6ICNGRkY7IH0uY3B0Q29tcGxldGlvbiBzcGFuLklOQ09NUExFVEUgeyBjb2xvcjogI0RERDsgYm9yZGVyLWJvdHRvbTogMnB4IGRvdHRlZCAjRjgwOyB9LmNwdENvbXBsZXRpb24gc3Bhbi5JTlZBTElEIHsgY29sb3I6ICNEREQ7IGJvcmRlci1ib3R0b206IDJweCBkb3R0ZWQgI0YwMDsgfXNwYW4uY3B0UHJvbXB0IHsgY29sb3I6ICM2NkY7IGZvbnQtd2VpZ2h0OiBib2xkOyB9LmNwdEhpbnRzIHsgIGNvbG9yOiAjMDAwOyAgcG9zaXRpb246IGFic29sdXRlOyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMzAsIDIzMCwgMjMwLCAwLjgpOyAgYmFja2dyb3VuZDogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjgpOyAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDEwcHg7ICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDEwcHg7ICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMHB4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTBweDsgIHotaW5kZXg6IDEwMDA7ICBwYWRkaW5nOiA4cHg7ICBkaXNwbGF5OiBub25lO30uY3B0Rm9jdXNQb3B1cCB7IGRpc3BsYXk6IGJsb2NrOyB9LmNwdEZvY3VzUG9wdXAuY3B0Tm9Qb3B1cCB7IGRpc3BsYXk6IG5vbmU7IH0uY3B0SGludHMgdWwgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDAgMTVweDsgfS5jcHRHdCB7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDEyMCU7IH0iKSxkZWZpbmUoInRleHQhY29ja3BpdC91aS9yZXF1ZXN0X3ZpZXcuY3NzIixbXSwiLmNwdFJvd0luIHsgIGRpc3BsYXk6IGJveDsgZGlzcGxheTogLW1vei1ib3g7IGRpc3BsYXk6IC13ZWJraXQtYm94OyAgYm94LW9yaWVudDogaG9yaXpvbnRhbDsgLW1vei1ib3gtb3JpZW50OiBob3Jpem9udGFsOyAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7ICBib3gtYWxpZ246IGNlbnRlcjsgLW1vei1ib3gtYWxpZ246IGNlbnRlcjsgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsgIGNvbG9yOiAjMzMzOyAgYmFja2dyb3VuZC1jb2xvcjogI0VFRTsgIHdpZHRoOiAxMDAlOyAgZm9udC1mYW1pbHk6IGNvbnNvbGFzLCBjb3VyaWVyLCBtb25vc3BhY2U7fS5jcHRSb3dJbiA+ICogeyBwYWRkaW5nLWxlZnQ6IDJweDsgcGFkZGluZy1yaWdodDogMnB4OyB9LmNwdFJvd0luID4gaW1nIHsgY3Vyc29yOiBwb2ludGVyOyB9LmNwdEhvdmVyIHsgZGlzcGxheTogbm9uZTsgfS5jcHRSb3dJbjpob3ZlciA+IC5jcHRIb3ZlciB7IGRpc3BsYXk6IGJsb2NrOyB9LmNwdFJvd0luOmhvdmVyID4gLmNwdEhvdmVyLmNwdEhpZGRlbiB7IGRpc3BsYXk6IG5vbmU7IH0uY3B0T3V0VHlwZWQgeyAgYm94LWZsZXg6IDE7IC1tb3otYm94LWZsZXg6IDE7IC13ZWJraXQtYm94LWZsZXg6IDE7ICBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwMDA7IGZvbnQtc2l6ZTogMTIwJTt9LmNwdFJvd091dHB1dCB7IHBhZGRpbmctbGVmdDogMTBweDsgbGluZS1oZWlnaHQ6IDEuMmVtOyB9LmNwdFJvd091dHB1dCBzdHJvbmcsLmNwdFJvd091dHB1dCBiLC5jcHRSb3dPdXRwdXQgdGgsLmNwdFJvd091dHB1dCBoMSwuY3B0Um93T3V0cHV0IGgyLC5jcHRSb3dPdXRwdXQgaDMgeyBjb2xvcjogIzAwMDsgfS5jcHRSb3dPdXRwdXQgYSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogIzY2NjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9LmNwdFJvd091dHB1dCBhOiBob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjdXJzb3I6IHBvaW50ZXI7IH0uY3B0Um93T3V0cHV0IGlucHV0W3R5cGU9cGFzc3dvcmRdLC5jcHRSb3dPdXRwdXQgaW5wdXRbdHlwZT10ZXh0XSwuY3B0Um93T3V0cHV0IHRleHRhcmVhIHsgIGNvbG9yOiAjMDAwOyBmb250LXNpemU6IDEyMCU7ICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgcGFkZGluZzogM3B4OyAgYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7fS5jcHRSb3dPdXRwdXQgdGFibGUsLmNwdFJvd091dHB1dCB0ZCwuY3B0Um93T3V0cHV0IHRoIHsgYm9yZGVyOiAwOyBwYWRkaW5nOiAwIDJweDsgfS5jcHRSb3dPdXRwdXQgLnJpZ2h0IHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0iKSxkZWZpbmUoInRleHQhY29ja3BpdC91aS9yZXF1ZXN0X3ZpZXcuaHRtbCIsW10sJzxkaXYgY2xhc3M9Y3B0Um93PiAgPCEtLSBUaGUgZGl2IGZvciB0aGUgaW5wdXQgKGkuZS4gd2hhdCB3YXMgdHlwZWQpIC0tPiAgPGRpdiBjbGFzcz0iY3B0Um93SW4iIHNhdmU9IiR7cm93aW59IiAgICAgIG9uY2xpY2s9IiR7Y29weVRvSW5wdXR9IiAgICAgIG9uZGJsY2xpY2s9IiR7ZXhlY3V0ZVJlcXVlc3R9Ij4gICAgPCEtLSBXaGF0IHRoZSB1c2VyIGFjdHVhbGx5IHR5cGVkIC0tPiAgICA8ZGl2IGNsYXNzPSJjcHRHdCI+Jmd0OyA8L2Rpdj4gICAgPGRpdiBjbGFzcz0iY3B0T3V0VHlwZWQiPiR7cmVxdWVzdC50eXBlZH08L2Rpdj4gICAgPCEtLSBUaGUgZXh0cmEgZGV0YWlscyB0aGF0IGFwcGVhciBvbiBob3ZlciAtLT4gICAgPGRpdiBjbGFzcz1jcHRIb3ZlciBzYXZlPSIke2R1cmF0aW9ufSI+PC9kaXY+ICAgIDxpbWcgY2xhc3M9Y3B0SG92ZXIgb25jbGljaz0iJHtoaWRlT3V0cHV0fSIgc2F2ZT0iJHtoaWRlfSIgICAgICAgIGFsdD0iSGlkZSBjb21tYW5kIG91dHB1dCIgX3NyYz0iJHtpbWFnZVVybChcJ2ltYWdlcy9taW51cy5wbmdcJyl9Ii8+ICAgIDxpbWcgY2xhc3M9ImNwdEhvdmVyIGNwdEhpZGRlbiIgb25jbGljaz0iJHtzaG93T3V0cHV0fSIgc2F2ZT0iJHtzaG93fSIgICAgICAgIGFsdD0iU2hvdyBjb21tYW5kIG91dHB1dCIgX3NyYz0iJHtpbWFnZVVybChcJ2ltYWdlcy9wbHVzLnBuZ1wnKX0iLz4gICAgPGltZyBjbGFzcz1jcHRIb3ZlciBvbmNsaWNrPSIke3JlbW92ZX0iICAgICAgICBhbHQ9IlJlbW92ZSB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeSIgICAgICAgIF9zcmM9IiR7aW1hZ2VVcmwoXCdpbWFnZXMvY2xvc2VyLnBuZ1wnKX0iLz4gIDwvZGl2PiAgPCEtLSBUaGUgZGl2IGZvciB0aGUgY29tbWFuZCBvdXRwdXQgLS0+ICA8ZGl2IGNsYXNzPSJjcHRSb3dPdXQiIHNhdmU9IiR7cm93b3V0fSI+ICAgIDxkaXYgY2xhc3M9ImNwdFJvd091dHB1dCIgc2F2ZT0iJHtvdXRwdXR9Ij48L2Rpdj4gICAgPGltZyBfc3JjPSIke2ltYWdlVXJsKFwnaW1hZ2VzL3Rocm9iYmVyLmdpZlwnKX0iIHNhdmU9IiR7dGhyb2J9Ii8+ICA8L2Rpdj48L2Rpdj4nKSxkZWZpbmUoInRleHQhY29ja3BpdC91aS9pbWFnZXMvY2xvc2VyLnBuZyIsW10sImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQTRBQUFBT0NBWUFBQUFmU0MzUkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBajlKUkVGVWVOcDBrcytMVWxFVXg3L3ZWMW84Wjh3VXgzSUVIY1FtaUJpUWxvbWpSTkNpWnBFdUVxRi9vRVV3cS82RWh2b0hnZ21SY0pVUUJNMUNSSkFXMGFMSWFHUWltWkp4SnNXeHlWL1A5L1IxenpXbEZsMDR2UHZPUFo5ejdybm5LNWltaWRtS1JDSXErenhnZG9QWjFUL3V0OHhlTTN0Y0twVzZzMWhoQmthajBRajdiRGViVFgrMzI0V21hZHh2c1ZpZ3FpcGNMbGVOL2Q0ckZvdWxPUmlMeFRaWThJdE9wOE1CQ3BZa2lZUGo4WGp1czl2dGxPUldvVkI0S2NUamNRYzczMmRMcFNSWHZDWmFBd3M2UTRXRGRxc081MmtOSCtvQ1JGR0V6K2Y3eWR3QktSZ01QbVRYaTQ5R0kxeDJEL0Rzem5lc0IwNndzMmVEYkk3dzlIWU42YlZqdkdzczRLQWp3REFNcTgxbU0yU1c1V2EvM3dlQmJ6NDJVTDl1WW5WcGlPMk5yOUFOSFNHWGliMldnbTl0Q1lJZ2dHS0pFVmt2bHdnaTUvRlFSbVRMeE82aGdKVnpJMXgwVC9mSnJCdEhKeFBlTDZ0SS9mc1pMQTZvdDhsa1FpOEhSVmJ3OTRna1dZSTVNYUhyT2pjQ0dTTlJ4Wm9zeTl5NWNFckR6bjBEcXg3Z2N3TzhXdEJwNFBuZEkzNUdNWXFpVU1VdkJMNXlPQno4eVJmRk5wYlBtcWdjQ0ZoL0l1SGExblIvWVhHTTgrb1VwRmhpaEVRaXdjZFJMcGZWUnFPQnRXWFdxMzRHcmE2QVhxOEhwMnBpWmNtS1Q0Y0tuRTRud3VId2RCeVZTbVdReitkMzJXQ1RsSEcvcWFISFJFTjlrZ2kwc1lRZnYwUjRQQjRFQWdFU1FES1h5NzJmU3k2VlNuSEpWYXRWZjcxZVI3dmQ1bjY2bXRmclJTZ1U0cExMWnJPbGY3UktLNTFPazhnMy95UHlSNWxNWmk3eTN3SU1BTUU0RWlnSFdnS25BQUFBQUVsRlRrU3VRbUNDIiksZGVmaW5lKCJ0ZXh0IWNvY2twaXQvdWkvaW1hZ2VzL2RvdF9jbGVhci5naWYiLFtdLCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlEL0FNREF3QUFBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFFQk1nQTciKSxkZWZpbmUoInRleHQhY29ja3BpdC91aS9pbWFnZXMvbWludXMucG5nIixbXSwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBNEFBQUFPQ0FZQUFBQWZTQzNSQUFBQUFYTlNSMElBcnM0YzZRQUFBQVppUzBkRUFOSUEwZ0RTN0tiRjRBQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGR3c0eE1ySUp3NUVBQUFIY1NVUkJWQ2pQaFpJeFN4dHhHTVovOTc2WGhKQS9SQTVFQXlKY0Zrc25wNjRoalVQQm9YUnlDWUxRVHlEMFV4U2N1MG5Gd2FsQ1FTZ0ZDVms3ZFhBd1VBaUJEQTJSTzRXN3lOMXg5KzlnY3loVStwdGVIdDRIM3BmbmNheTFMT2wwT2dZNEJONEFyLzdLUDRCdndORndPSXlXdTg3UzJPMTJPOER4ZkQ3M295Z2lTUklBYXJVYXhoaFdWMWZId01GZ01CaVd4bDZ2OXk2S29pKzN0N2NrU1VLdFZrTlZBY2p6dk5SV1ZsWXd4cnk5dkx6ODZ1enM3SGpBWkRLWkdHc3RqVWFEZnhISE1TTEM1dWJtSGRCMlZmVndOcHVaNWNseEhQTWNSVkZ3YzNQVFhGdGJPM1JGWkhleFdKQ21hYm53ZUFhb1Zxdmx2NHZGQWhIWmRWWDFaWnFtT0k1RFVSUjhmei9seGJwOVlyeis3YkQ3MlNmUGN3QlUxWGRGNU41YVd5MktncUlvZUJ6UEVuV1ZMTXNlWW5BY1JFUmRWUjI3cnJzZHh6R3F5dXRQNjg5OCtHQnNOQnFvNmk5WFZTODh6OXNPZ2dBUjRYOTRub2VxWG9pSUhQbStIOVhyZFlJZ0lBeER3akFrVFZQQ01FU3pCeTNMTXByTkpyN3YzNG5Ja1Y1ZFhkMmZuNTlmRzJQMnNpd2pTUklxbFFyV1dsU1ZKRmNxbFFxdFZvdDJ1NDB4WnUvczdPeG5XYmwrdjk4QmprZWprVCtkVGdtQ29EeHRZMk9EcmEydE1YQndlbm82Zk5KVmdQMzlmUU44ZUtia0gwOU9Uc3FTL3dIRlJkSFBmVFNmandBQUFBQkpSVTVFcmtKZ2dnPT0iKSxkZWZpbmUoInRleHQhY29ja3BpdC91aS9pbWFnZXMvcGluYWN0aW9uLnBuZyIsW10sImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUM3bWxEUTFCSlEwTWdVSEp2Wm1sc1pRQUFlQUdGVk05ckUwRVUvalp1cWRBaUNGcHJEcko0a0NKSldhdG9SZFEyL1JGaWF3emJIN1pGa0dRelNkWnVOdXZ1SnJXbGlPVGkwU3JlUmUyaEIvK0FIbnJ3WkM5S2hWcEZLTjZyS0dLaEZ5M3h6VzVNdHFYcXdNNSs4OTQzNzMxdmR0OEFEWExTTlBXQUJPUU54MUtpRVdsc2ZFSnEvSWdBanFJSlFUUWxWZHZzVGlRR1FZTnorWHZuMkhvUGdWdFd3M3Y3ZDdKM3JaclN0cG9IaFAxQTRFZWEyU3F3N3hkeENsa1NBb2c4MzZFcHgzUUkzK1BZOHV5UE9VNTVlTUcxRHlzOXhGa2lmRUExTGM1L1RiaFR6U1hUUUlOSU9KVDFjVkkrbk5lTGxOY2RCMmx1WnNiSUVMMVBrS2E3ek82cllxR2NUdllPa0wyZDlINU9zOTQrd2lIQ0N4bXRQMGE0alo3MWpOVS80bUhocE9iRWhqMGNHRFgwK0dBVnR4cXArRFhDRkY4UVRTZWlWSEhaTGczeG1LNzlWdkpLZ25DUU9NcGtZWUJ6V2toUDEweHUrTHFIQlgwbTF4T3Y0bmRXVWVGNWp4Tm4zdFRkNzBYYUFxOHdEaDBNR2d5YURVaFFFRVVFWVppd1VFQ0dQQm94TkxKeVB5T3JCaHVUZXpKMUpHcTdkR0pFc1VGN050dzl0MUdrM1R6K0tDSnhsRU8xQ0pMOFFmNHFyOGxQNVhuNXkxeXcyRmIzbEsyYm1ycnk0RHZGNVptNUdoN1gwOGpqYzAxZWZKWFVkcE5YUjVhc2VYcThtdXdhUCt4WGx6SG1naldQeEhPdysvRXRYNVhNbHltTUZNWGpWZlBxUzRSMVdqRTMzNTlzZnpzOTRpN1BMclhXYzYySml6ZFdtNWRuL1dwSSsrNnF2SlBtVmZsUFh2WHgvR2ZOeEdQaUtURW1kb3JuSVltWHhTN3hrdGhMcXd2aVlHM0hDSjJWaGluU2JaSDZKTlZnWUpxODlTOWRQMXQ0dlVaL0RQVlJsQm5NMGxTSjkzL0NLbVEwbmJrT2IvcVAyOGY4RitUM2l1ZWZLQUl2Yk9ESW1icHRVM0h2RUtGbHBXNXpyZ0lYdjlGOThMWnVhNk4rT1B3RVdEeXJGcTFTTlo4Z3ZBRWNkb2Q2SHVncG1OT1dsczA1VW9jc241TzY2Y3BpVXN4UTIwTlNVdGNsMTJWTEZyT1pWV0xwZHRpWjB4MXVIS0U1UXZmRXAwcGxrL3F2OFJHdy9iQlMrZm1zVXRsK1RocldnWmY2YjhDOC9VWEFlSXVKQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUNsa2xFUVZRNEVYMVRYVWhVUVJRK1ozWm1kKzl1TjFxMlAzVXBaYUV3Y2lrS2Vra3FMS2dnS0hKOTZNSGU5RG1Ma0NEYTlVMTk4SWQ4a0VySUNtSWxSQU45NlVkRTZRZEJXL3RCQTVVaWM3RTB6TjI5N0wxN3A1bWIxellqRDNlWWMrZDgzemxuT044ZzV4eldOVVNFZFVCa0hUSmFzUld5U1BQN2Z3M2hmd2trMkdvTnNjMHZPYUpSSG8xR1YvR2lNY3RrVElKUkZscFpsaThvcEsraHRtZjgzZ1hlRzYzb3RlT3RyYTB1MjVlN1RZSklKRUxiMjZ2WUNBQ1RnVWUxbFhWODZCVG43NDVsK01zeUhxczUzUy9BcTRWRVVhOVk2a28xNGVZWTR1M0F5TTNIWXdkS1UzNURaeWJsR1IyK3FxNlcwWDJObmgwN3h5bm5WWXBIT1J4L0UxL0d2dnFhQVpVYXlqTWpkTTJmL0xncjVFK2ZWOTN6UjR1M3pLQ0x1Z2hzWnFLd0F6QXhhejZkUFk2SmdqTFVGK2VTUDVPcGptQXcyRThEdmxkSFN2Sk1LUGcwOGFSb3IxdGM0QnVBTHU2bU93R1dkUUMzbUtJcVJzQzhtS2Q4d1lmRDc4L2VhcnpTWXpkTURXOVFnS2IwSXM4Q0JZMW1RWE9pYVhBSEVwTURFNVhUSnFJcTRFaXl4VXFLbHBma0YwcHlWMU9UQW9GQWhtVG15Q0NvRHNaTlp2SWtVakVMUXBpcG8wc1FxWVpBc3daSHdzRUVFMTBNMHBxMlNTWlk5SHFOY0RpY0pjTlRwQnZRSno0MFViU09UaDFCOGJEcHVZMHc5SGIza2tuOWxQQWxCTGZoZkQzOVhUdFgvYmxGSnFpcXJqYmtUaTYzSGJvZmoydUw0R01zbXpGZ2JESi92bU1ndi9sQjRzeUowb1hPN2QzaisrdmlvNkdGc1ltRDZjSEpyZVdjMy9qUlZWSGhzT1l2TThpWjM2bXRqUERCay94RFpFOENvSGxicmxBc3NiVHhEZERKdmRiNTM2TDdJNlM3VnkrKzZHaTRYaTlCc1V0aEpSYUxPWVNQejRYQUxLSTRqNGlPYmQvZTVVdERLVWpaell5WVJ5R0FKdjAxWmo4a0M1Y2JzNVdZODNoUW52MER6Q1hsK3I4QVBFbGtxMFJVNm9NQUFBQUFTVVZPUks1Q1lJST0iKSxkZWZpbmUoInRleHQhY29ja3BpdC91aS9pbWFnZXMvcGluaW4ucG5nIixbXSwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQzdtbERRMUJKUTBNZ1VISnZabWxzWlFBQWVBR0ZWTTlyRTBFVS9qWnVxZEFpQ0ZwckRySjRrQ0pKV2F0b1JkUTIvUkZpYXd6Ykg3WkZrR1F6U2RadU51dnVKcldsaU9UaTBTcmVSZTJoQi8rQUhucndaQzlLaFZwRktONnJLR0toRnkzeHpXNU10cVhxd001Kzg5NDM3MzF2ZHQ4QURYTFNOUFdBQk9RTngxS2lFV2xzZkVKcS9JZ0FqcUlKUVRRbFZkdnNUaVFHUVlOeitYdm4ySG9QZ1Z0V3czdjdkN0ozclpyU3Rwb0hoUDFBNEVlYTJTcXc3eGR4Q2xrU0FvZzgzNkVweDNRSTMrUFk4dXlQT1U1NWVNRzFEeXM5eEZraWZFQTFMYzUvVGJoVHpTWFRRSU5JT0pUMWNWSStuTmVMbE5jZEIybHVac2JJRUwxUGtLYTd6TzZyWXFHY1R2WU9rTDJkOUg1T3M5NCt3aUhDQ3htdFAwYTRqWjcxak5VLzRtSGhwT2JFaGowY0dEWDArR0FWdHhxcCtEWENGRjhRVFNlaVZISFpMZzN4bUs3OVZ2SktnbkNRT01wa1lZQnpXa2hQMTB4dStMcUhCWDBtMXhPdjRuZFdVZUY1anhObjN0VGQ3MFhhQXE4d0RoME1HZ3lhRFVoUUVFVUVZWml3VUVDR1BCb3hOTEp5UHlPckJodVRlekoxSkdxN2RHSkVzVUY3TnR3OXQxR2szVHorS0NKeGxFTzFDSkw4UWY0cXI4bFA1WG41eTF5dzJGYjNsSzJibXJyeTREdkY1Wm01R2g3WDA4ampjMDFlZkpYVWRwTlhSNWFzZVhxOG11d2FQK3hYbHpIbWdqV1B4SE93Ky9FdFg1WE1seW1NRk1YalZmUHFTNFIxV2pFMzM1OXNmenM5NGk3UExyWFdjNjJKaXpkV201ZG4vV3BJKys2cXZKUG1WZmxQWHZYeC9HZk54R1BpS1RFbWRvcm5JWW1YeFM3eGt0aExxd3ZpWUczSENKMlZoaW5TYlpINkpOVmdZSnE4OVM5ZFAxdDR2VVovRFBWUmxCbk0wbFNKOTMvQ0ttUTBuYmtPYi9xUDI4ZjhGK1QzaXVlZktBSXZiT0RJbWJwdFUzSHZFS0ZscFc1enJnSVh2OUY5OExadWE2TitPUHdFV0R5ckZxMVNOWjhndkFFY2RvZDZIdWdwbU5PV2xzMDVVb2NzbjVPNjZjcGlVc3hRMjBOU1V0Y2wxMlZMRnJPWlZXTHBkdGlaMHgxdUhLRTVRdmZFcDBwbGsvcXY4Ukd3L2JCUytmbXNVdGwrVGhyV2daZjZiOEM4L1VYQWVJdUpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQlowbEVRVlE0RWEyVFBVc0RRUkNHWjg5RW80RkFDa1VMRVFzMUNINFVhbWZqbjdHeEVZSkZJRlhnQ2hGc2JQd3pOblppb1JFa2FpSEJRdEVpRUVpTVJtL2RaOE9FR0F4UjRzQnh4ODc3UGp1N00yZXN0VEpJeExyTnVWd3VNeFFFeDBaa3pjRkh5UnRqWHQwMjU1OVJ0QjJHWWFuVFl6b3J5T2Z6KzZsNE5ic3pmMm5pd2ZmS21wR1JvOXNWVzIybURncUZ3cDVDMmdETW0rUDMyYTNKQjFOK241SmlmVUdlUDlKZU54R3J5UExZamN3TVA4ckowN1E5ZlpsdFF6eUFzdE9KMnZWdTVzS2MxWlprUkJyT2NLZWIrSGV4UGlkdmtwQ041SlVjbGxadHBaRmM1RGdCV2M1TTJleXNadU11b2ZNQlNBNE5Xang0UFVDc1hlZk1sSTBRWTNld1JnNE5XaTRaVFFzZ3JqWVhlbWErZTRWcXRFTUs2S1h2dSs0QjlCa2x0OTB2VktNZUQyQkk2RE90NHJaL0drN1d5S0ZCaTRmTlBJQUpZMGpvTTYxU0NDWjl0STFvME9JQjhEK0RCSWtZYUpSYkNCSDltWmdOdCtiYisrdWZTU0YvZVg4QlljRGVBenVRSlZVQUFBQUFTVVZPUks1Q1lJST0iKSxkZWZpbmUoInRleHQhY29ja3BpdC91aS9pbWFnZXMvcGlub3V0LnBuZyIsW10sImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUM3bWxEUTFCSlEwTWdVSEp2Wm1sc1pRQUFlQUdGVk05ckUwRVUvalp1cWRBaUNGcHJEcko0a0NKSldhdG9SZFEyL1JGaWF3emJIN1pGa0dRelNkWnVOdXZ1SnJXbGlPVGkwU3JlUmUyaEIvK0FIbnJ3WkM5S2hWcEZLTjZyS0dLaEZ5M3h6VzVNdHFYcXdNNSs4OTQzNzMxdmR0OEFEWExTTlBXQUJPUU54MUtpRVdsc2ZFSnEvSWdBanFJSlFUUWxWZHZzVGlRR1FZTnorWHZuMkhvUGdWdFd3M3Y3ZDdKM3JaclN0cG9IaFAxQTRFZWEyU3F3N3hkeENsa1NBb2c4MzZFcHgzUUkzK1BZOHV5UE9VNTVlTUcxRHlzOXhGa2lmRUExTGM1L1RiaFR6U1hUUUlOSU9KVDFjVkkrbk5lTGxOY2RCMmx1WnNiSUVMMVBrS2E3ek82cllxR2NUdllPa0wyZDlINU9zOTQrd2lIQ0N4bXRQMGE0alo3MWpOVS80bUhocE9iRWhqMGNHRFgwK0dBVnR4cXArRFhDRkY4UVRTZWlWSEhaTGczeG1LNzlWdkpLZ25DUU9NcGtZWUJ6V2toUDEweHUrTHFIQlgwbTF4T3Y0bmRXVWVGNWp4Tm4zdFRkNzBYYUFxOHdEaDBNR2d5YURVaFFFRVVFWVppd1VFQ0dQQm94TkxKeVB5T3JCaHVUZXpKMUpHcTdkR0pFc1VGN050dzl0MUdrM1R6K0tDSnhsRU8xQ0pMOFFmNHFyOGxQNVhuNXkxeXcyRmIzbEsyYm1ycnk0RHZGNVptNUdoN1gwOGpqYzAxZWZKWFVkcE5YUjVhc2VYcThtdXdhUCt4WGx6SG1naldQeEhPdysvRXRYNVhNbHltTUZNWGpWZlBxUzRSMVdqRTMzNTlzZnpzOTRpN1BMclhXYzYySml6ZFdtNWRuL1dwSSsrNnF2SlBtVmZsUFh2WHgvR2ZOeEdQaUtURW1kb3JuSVltWHhTN3hrdGhMcXd2aVlHM0hDSjJWaGluU2JaSDZKTlZnWUpxODlTOWRQMXQ0dlVaL0RQVlJsQm5NMGxTSjkzL0NLbVEwbmJrT2IvcVAyOGY4RitUM2l1ZWZLQUl2Yk9ESW1icHRVM0h2RUtGbHBXNXpyZ0lYdjlGOThMWnVhNk4rT1B3RVdEeXJGcTFTTlo4Z3ZBRWNkb2Q2SHVncG1OT1dsczA1VW9jc241TzY2Y3BpVXN4UTIwTlNVdGNsMTJWTEZyT1pWV0xwZHRpWjB4MXVIS0U1UXZmRXAwcGxrL3F2OFJHdy9iQlMrZm1zVXRsK1RocldnWmY2YjhDOC9VWEFlSXVKQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUN5VWxFUVZRNEVXMVRYVWdVVVJRK1ozWm1uVlYzUVYyeEpiVlNFSW93UWJBZkxReDhNY0xvWVgycWpCNThNUlNrUDN2WnBwY2VZaEd4Z3JaYUl1Z2hsWXBFN0NIRldpaUt5ajlJSTBxeFdtd2xOaDFYdHAyZjI3bXo3R0RsWlg3dXVYTys3M3pmdVhlUU1RWUlnQXlBTHBwZ3lCdHNlMzJzdHN3ODZ0eGtIaEFUbitGYmZQZnp4blBCK3ZSM1JNSll1VHdXNmJiQjRhNldTNU8zWXUyVmxYSWVzRGlBYW1pUU5LVmxWWGZ4NUkwR0o3RFk3cDAvK2VyVTRkZ2VNSklBMzFXTnhabUFnaWJPcmVYRHFGNTVzWTRTRlVVUnFiaStua2pnd1R5QWJIaExYOHlPTHNTTTJRUkEzSlJBQWdkNFJHUGJWaGtLRXA4cWVKN1BGeVczZncrK1lIdEM3Q2thRDBhbXF5cWloU3dsTVFRMHdhMDdJalBWSS92YmV4cmVJVXJWYVFWMkQ0Uk1RL283bTEyTWRmeDRIM1BmQjlGTnpUUjFVMmNPMEJpNDVhVjZ4TnZGQk5hb0lBZmJTaXdMbHFpOS9oUi9SM05yaHVhK09xaTlURUtpQjAyQzdZWHorUGJhNE1URHJwYkxpTUF4TmdtWGIrSHB3VmtaZG9JcmtuOWlzVzduUncvVFpZYWFnWkFyQVd5aGZxc1NETC9jOWFUeDdKVWpHWkN0WUV4UnFDekF3R2Jsd3I2YUZRODRuVG82cVo3WENlQ1ZRTmNrRS9LU1dvbHZvUW54ZW9GRmdJaDhHL25BK2tCQXh4dVFPNW05ZUZyd0xJR0pIZ2N5TTYzVkZNaFJTZ05WeUpyN29nOHkxdmJUUXBIOERJRVZneHVZdWV4dzBRRUNJYWxxNUZZZ0VtcGtnb0ZZbHRVL2xucnFEejVvc2lyU0ZwRjdsckhBRktTV0hZZkVzK21ZLzgyVW5BU3R5TWxXOHNVUHNWSWNpVFpnejNqVjFlYmcwQ0VPcGdQRjIyczF6MVlRWUtTWFBKMWhiQWhSOFQyNldkTGhrdVZmQXpQUitZTzFPeDVuNThTbUNjRjZlM3V6QW9IQTc3UmtldkpkV0gvMytmMk85VEdmM3czZldRMkh3NUYvMTNtY3NXQVQrdnY2REs0a0ZBcEovZDNkMWsra0p0YkNybXhYSFMzbjhFUjZiM0NRYkFxYUVIVnJhNnNHeGNYVzRTb3ZMeCtlbXB4YXBTLy9GZndEOWtwTUpqTU1CQkFBQUFBQVNVVk9SSzVDWUlJPSIpLGRlZmluZSgidGV4dCFjb2NrcGl0L3VpL2ltYWdlcy9waW5zLnBuZyIsW10sImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBUUNBWUFBQUJRcnZ5eEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFHWWtsRVFWUklEYlZXZTB5VVJ4Q2YvUjczNW82RE8wRkJlMFJGc2FMNGlMWEdJS2EyU1kzUDZKR2EyR3BqbEpqVVY5Tm9zYlUrK3RZVWJFbmFRSXJWYUtKQkc3V2lORlFGVVdPMVVVRXNWZzJDQWdvZUhITGV3Y0gzMk81OGNCZFFzWDlZNSs3TGZyc3pPek8vMlpuWmoxQktnVEJpSXdWR1Z2S2Q0OU9WVll1bkRsWG42d2RCS2grb2dYcnYrRE96MW1lbEliKzNMTTVmTnYyWFBZRTVFSFkrTDNQSmxqTjV6YXZIcEpqc1FOc0EvSkpFZ3lDMitXVGp5M2IwR2ZvSlc4TzRhb0h0RHdpSFFyajVsdzFMTHl5YjFicDV6QWpKVHVzOWtsclZwZEQ2VHFIMm5nVk8rMGRzUkpucDA2Y0xJWVU0Zng3Tm5SSTNidTdVSVlPZUovTWNudVk4OHEzazYyZ2MwUzREZ2Y1cWhJQ1F0SVhTMmxxRDdCaFNkdVBrM1lmeXpYYUFOaEJCSkR4WWRVcUN5d0IycVM0UmR5VXVTa1RGL1ZKeGNiSDVqOE43Lzc1UnVGck4zWmg4T1M4enFmNW00VXBQZWVuT3lQNDJkYnRCZXV2Vm5DZGtLMWU0UGZQb3VYMDNtbzlzZStjMzNNOHdxRGs1T2ZxZWQ4UkVVVGljUWhieVNVeHA5dTNLbE1TSFR0ckZVNkt5bjAzbHoxNVBQcFcyNXZzWmVZU0lLeWlWVVJjcWVaSk9IOWxUTlpMZm54UmpVL3V3cmpiRVVCV3NhcGNTTzJIcTRrMFZmWmc5RXp4ZEROQ0VqRHhnTnFSRG1lOXVtei9idHdsc0hSSUVlUEhnQWY3M1JkbkhaNkxUdUlVQk43T0JRK2MxRmRucDZjWjFCUVVkZVJ1V1ppOTdvM2t0RFFRa1ZlRkZ6cUpBUmQxQTVhMFZyN3RhNktwNlRaanRaK05USU9vS0Y2cURyTDdlMFFRSVVDaXFNTUtrOFoxUS9TQ1NLdnpvY2YyQjZORU4wU1FuL2tUTzZmS0owenFqWlVsUUJTcEowR2pSNzd3MGFvYzFQcjZTNS9rVkpyTnBha1Y1aFIrTFdLTjR0N3NMWCtwMHJ4MnZxU3RhNjRvbEl1bFVLVWdDU1hMV0UxUjRLUFBTais1dmhtMmhkRE9HK0NrUUJtaGh5eUtxNlNhRllXVG41YkIzUUpSTno1NEF1WEtuOFRKamh1MFdidit3TkVLUWpWaG5tS29wam80RnhYbWV0Q1JuQzRGN0JoQ2lDVWVwcUFlcFJoMFRNL2dqanpPT1NLMk5nV1pQYzA1cWFtcFJXSkhiN2RiT2ZmZXAyZWRuekx6Z2N6bGJyUUE2Z0hZRjlCWURoOUdZK0ZqZGRNd2VITXNjbU11ZXAwN2dYbE1Rb3F3OUFMb1l1NU1Kc2FrOVFtSkEySXZBZ1Ztb0NSY2lvb3lQdWpKdE5DdjF1SHQzVG1LOWdlZ0ZLckc5a2g2b1h3WmlJRUF0QklqT1JHS05UV1IvV2VXOFhWa2JqdUplcExBeWxvTThMbVROLy9uaktaUGJyYUFUWmFMakNIRXd3OUVpNEZGaVBnNkphNWdUNmd4WWdMZ25SREhSUXdKWGJ6MkdPdzBkNEEzSzRHWGxVdE1haEpqWVZ4aVlicndPbXhJUzEwYkZuSUJPU2k2VGw5SmdzMHpiT0VYMTh3eUV3Z0xQTXJ4RDFZNGFDSzhrbVRwZ1ljcEFGMjdNenM0MkhqeDRrQThCSUNVbEpmS0FyUjdMY0V2VEIxeEVDOUFvRXc5T1BhZ1drVlUvRDFvZXNtSzZVOTExekVjek1WZTAxb1pqaU1nZ2c2dXgyUWszNzlxaDRyWUtldDRHanJoaHdFdGVCZ0JySDhCc3NvWEV0Ykh6UHBTQlJSU3BxbE5wZ0FpVW94ekhLeExSc3pvVnVnZ0lpc3hhRFFXWnFrUXZRakFvYXgzTmJEYkxMR3VVRUFCTkdlZFhxU3lMUnVwWGdEVDVKZkFHWk5MaW85QjBYOFVpd2s0dzc3TURjMUQ0eWVqald0eWtQUzNEWDAxVURDWS9HUFFjVkRlMFFZVDBDSXhHRnZVb3JmdkJ4WnNSZlZyVXVXcnVNQkFiL2xYQ1VvZm9GTlpmekdKdG93WE9YMHZ3VVNGSzRCZ3lNS202UDZzOXdRVVpsZCtqcll5TURDMGlJUURhSmRHNEl5WlFmTDNSZmJGY0NCSWxSZ2MrdTNDamFUQXB1WjlLc0FOZ0c4UE56SGxXV0QzdEN4ZDZrYWZOTmlGcDVIQWFsQWtrSjBTQ1YySDNDZ09EOU5jL0Zxclh1eWIwRW9jdmZocTE3MXA1ZXl1SjFvbUtKRVA1clFHZS9GT09uWHRxMzM1ejhZbXZZbzljSGIydDhzcEliM2xWU3NlWlc0NkZsR1kvU2s5UDUwUDJ3MjBVbFdKVWtVSEl1c2hmYzVQWEdBekNvMFBsRDJwbnBDWWZDWGdhM2x1K2ZQbGV2RWhXclZyRnlyTi9PcmZ2ODdGT1c5dGxxYjJLYzlwVjhEemlvTWszVU5VYlhNKzhCL0FUQnI4QzhDS2R2R1hXR0QvOXNxbTNka3h0ekE0TWNNakhNQjhEMmZ0aGVZWG8rcXp0M3BYdno4L1BQL3ZrK3Y4NTM3Vit5WVc4N1p1K1JaMVpicmV4b0tBQS9TQnBhV240K2FMNXc1ekdrKy9qVzU5SmlNa0VTVzV1cnBpVmxXWEVOUmIxSC9ZZjJJOXR4SXh6NUlka1gzVHNyYXVrcHNiUWp6NjA5MHliNFhzQXZRb1JFMFl2SmRhbXRJSWJPblJvVVZsWjJmdHNMVlF6SWRFWEhudHNhWmRpbXNzVmZDcEZ1aTEwOStCbldQc1hhV0xJL3phY3R5Z0FBQUFBU1VWT1JLNUNZSUk9IiksZGVmaW5lKCJ0ZXh0IWNvY2twaXQvdWkvaW1hZ2VzL3BsdXMucG5nIixbXSwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBNEFBQUFPQ0FZQUFBQWZTQzNSQUFBQUFYTlNSMElBcnM0YzZRQUFBQVppUzBkRUFOSUEwZ0RTN0tiRjRBQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGR3c0eUZUd3VKVGtBQUFIN1NVUkJWQ2pQZFpLeGExTlJGTVovOTU2WFpNZ0Z5eU1sQ1pSQTRoQng2bEJjUTAwR29ZaTR0RXN0RlB3TEFzN2lMRGk3Rld1SFRoYVVnZ2loQkRJNU9XUm9RQW1CUUZJU1FndnZwYndYM3JzT2FSNEsrbzJIOHp2Zk9aeFBXV3RacVZhckdhQUpQQUVlM1pXL0ExK0JkKzEyMjF2MXFoVzR2YjFkQTQ0bWswblo4enlDSUFBZ2s4bGdqR0Y5ZmIwUEhGNWNYTFFUc0Y2dlAvYzg3OVAxOVRWQkVKREpaQkFSQUtJb1NtcHJhMnNZWTU2MVdxM1BxdEZvdU1CZ01CZ1lheTNaYkpaL3lmZDl0TmFVU3FVYm9PS0lTUFBxNnNxc1Z2WjlINEF2TDM0QjhQVGovUVNPNDVqcGRIb3ZuODgzSGEzMXpudytKd3pEcENFTVF4NFVsb004enlPZFRpZjN6dWR6dE5ZN2pvZzhETU1RcFJSeEhQUHQ1VENCQUVadnhseU9GVHNmeWtSUkJJQ0lsQjJ0OWEyMU5oM0hNWEVjOCtkN1ZoSkhXQ3dXeXpjb2hkWmFIQkhwTzQ2ejZmcytJc0xqOTRYRUNhRDR1bkNITDhGc05vdUkvSFJFNU54MTNjM1piSWJXT25HNUhLdGwrNTNUU3E3cklpTG5hbmQzMXdVR25VN0hqRVlqbEZMSlpOLzN5Um5MMUZNWVk4amxjbXh0YmQwQUZlbDJ1N2RuWjJlWHhwaTl4V0pCRUFTa1VpbXN0WWdJUVNTa1VpbUt4U0tWU2dWanpON3A2ZW1QSkhMNysvczE0S2pYNjVXSHd5R3oyU3haYldOamcycTEyZ2NPVDA1TzJuOWxGZURnNE1BQXIvNFQ4cmZIeDhkSnlIOER2dmJZR3pLdld1a0FBQUFBU1VWT1JLNUNZSUk9IiksZGVmaW5lKCJ0ZXh0IWNvY2twaXQvdWkvaW1hZ2VzL3Rocm9iYmVyLmdpZiIsW10sImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaDNBQVRBUFFBQVAvLy93QUFBTDYrdnFhbXBweWNuTGk0dUxLeXNzakl5TmpZMk1URXhOVFUxTnpjM09EZzRPVGs1TEN3c0x5OHZPam82T3pzN01yS3l2THk4dlQwOU03T3p2YjI5c2JHeHREUTBPN3U3dGJXMXNMQ3dxcXFxdmo0K0tDZ29KYVdsaUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoL2hwRGNtVmhkR1ZrSUhkcGRHZ2dZV3BoZUd4dllXUXVhVzVtYndBaCtRUUpDZ0FBQUN3QUFBQUEzQUFUQUFBRi95QWdqbVJwbm1pcXJtenJ2bkFzejNSdDMzaXU3M3p2LzhDZ2NFZ0VDQWFFcEhMSmJEcWYwS2gwU3ExYXI5aXNkam9RdEFRRmc4UHdLSU1IbkxGNjNOMjQzOGYwbXYxSTJPOGJ1WGp2YU9QdGFIeDdmbjk2Z29SNGhtdUlkNHFEZFg5NWM0K1JHNEdDQm95QWpwbVFoWk4wWUdZRlhpdGRaQklWR0FvS29xNENHNlFhc3dpMUNCdGtjRzZ5dHJZSnVicTh2YmZBY01LOXY3cTdEOE8xeWNySHZzVzZ6Y1RLc2N6Tno4SFp3OXZHM2NqVHNNSVlxUWdETEFRR0NRb0xEQTBRQ3dVSHFmWVNGdy94RVB6ODgvWDM4T25yMTQrQnA0QURDY283ZUM4aFFZTUFFZTU3eU5DZXc0SVZCVTdFR05EaVJuOFo4MzFjR0xIaFNJZ2RFLzljaEllQmdEb0I3Z2phV1VXVGxZQUZFM0xxekRDVGxjOVdPSGZtN1BrVHFOQ2g1NHJlUERxQjZNK2xSNTM2aENwVXFzMmdWWk0reGJyVHF0R29XcWR5MWVtVmFsZVhLd2djV0FCQjV5MWFjRk5abUV2WHdvSjJjR2ZKclR2M2JsNjlGZmoyeFp0M0wxKy9mdzNYUlZ3NHNHREdjUjBmSmh4WnNGM0t0QlRUaFp4WjhtTE1nQzNmUmF0Q0xZTUlGQ3p3TEVwcmc4NE9zRHVzL3R2cWRlelpmMTNIdnIyQjlTemR1MlgzcGcxOE4rNjh4WG43cmgxYytQTGtzSS9EaGU2Y3VPM293M05mVjkyYmRBclRxQzJFYmMzQTh2amY1UVdmMTVCZzdOejE3YzJmajY5K2ZucSs4TjJMdHkrZnVQNzgvZVYyWDEzbmVJY0NlQlJ3eG9yYlpyQXhBSm9DREhiZ29HOFJUc2hhaFE5aVNLRUV6VW1ZSVlmTldWaVVoaGVDR0p5SVA1RTRvb203V1dqZ0NlQkJBSk52MURWVjAxTVpkSmhoamRrcGxXTnpPLzVvWEk4NDZuampWRUlxUjJPUzJCMXBFNVBWc2Nhamt4aE15Y3FMSmd4UUN3VDQwUGpmQVY0R3FOU1hZZFpYSm41Z1NrbW1tbUp1MWFaWWIxNFY1MWRvK3BUT0NtQTAwQXFWQjRoRzVJSjlQdlluaElGT3htZHFocGFJNkdlSEN0cG9vaXN1dXRtZytFZzYyS09NS3Vxb1RhWGdpY1FXb0lZcTZxaWtsbW9xRlYwVW9lcXFyTGJxNnF1d3hpcnJyTFRXYXV1dEo0UUFBQ0g1QkFrS0FBQUFMQUFBQUFEY0FCTUFBQVgvSUNDT1pHbWVhS3F1Yk91K2NDelBkRzNmZUs3dmZPLy93S0J3U0FRSUJvU2tjc2xzT3AvUXFIUktyVnF2Mkt4Mk9oQzBCQVhIeC9Fb0N6Ym9BY2RoY0xEZGd3SjZudWEwM1laOFBNRlBvQk1jYTIxNWVnOThHMzZJZ1lOdkRnT0doNGxxakhkN2ZYT1RqWVY5bkl0dmhKYUlmWUY0alh1SWY0Q0NiSG1PQlp5U2RvT3RqNWVqYTU5d0JtWUZYaXRkSGh3U0ZSZ0t4aG9iQmdVUEFtZG95eG9JMHRQSmFNNSt1OVBhQ1Faelo5Z1AydFBjZE03TDR0TFZ6blBuNk9RYjE4bmg2TlYwZnUzaTVPdlA4L25kMXFqd2Fhc0hjSVBBY2YvZ0JTeUFBTU13QkFOWUVBaFdZUUdEQmhBeUxpaHdZSmlFang4ZllNeEljc0dEQXhWQS95WUlPWklrQkFhR1BJSzhJTkpsUnBnclBlYXNhUlBteDVRZ0pmQjBhYkxqejUwdFNlSU0rcEZtVW8wblFRSVYrdlJsVEpVU25OcTBLbFhDU3EwOW96SUZleEVCQVlrZU5pd2dPYUV0bjJMRnBHRVFzS0N0WGJjU2pPbVZscUR1aEF4MytlZzFKbzN1MzdzWkJBOUdvTUF3NE1CNUZ5TXdmTGh0NHNoN0cvdXRQR0hsWUFWOE56OU9uT0J6NGMyVkZXZW0vUGl2YXIwYUtDUDJMRm4yWHdoblZ4QndzUGJ1QkFRYkVHaUlGZzFCZ2dvV2tpZHZhNXo0Y0w3SWxTdGZrRUQ0OE9JWW9pdWZZSUg2OCtjS1BrcWZuc0I1OGVQam1aZDNEajE5OS9YRTIwdHY2LzI3WE8zUzZ6OW5QQ3o5QlAzRklTRGVmTC9CdDE5Mi91V21BdjhCRnpBUUFRVVdXRmFhQmdxQTExaGJIV1RJWFdJVlhpZk5oUmxxNkZxRjFzbTFRUVloZGlBaGJORVljMktLSzFwWG5BSXZocmpoQmgwS3h4aUlObHFRQVk0VVhqZGNqU0p5ZUF4MkcyQllKSkQ3TlpRa2pDUEt1Q09SS25iQUlYc3VLaGxoQnhFb21BSUJCemdJWVhJZkhmbWhBQXlNUjJaa0hrNjJnSm9XbE5saGkzM1pKWjJjUWlLVEpvRzA1V2pjbTN4aXRoOWRjT0s1WDUxdExSZW5vSFR1dWQyaU1uYW9scDNLR1hyZEJvN2VLWUY1cC9tWGdKY29nQ2xtY2d6QVI1Z0NLeW1YWXFsQ2dtYWNkaHAyVUNxTDk2bXE0bnVEQlRtZ0Jhc2FDRnA0c0hhUUhIVXNHdk5SaWlHeWVwMWV4eUlyYTJtUzdkcHJydEE1Kyt6L1o4WktZR3VHc3k2R3FnVElEdnVwUkdFKzZDTzB4M3hJNVkybU9Ua0JqRDR5U2VHVTc5bzQ0bWNhU0VDbGhnbGdzS3lKOVM1WlRHWTBCbnpyaiszU2lLSzlSaDV6akFBTEN5d1pCay9heUNXTzNoWU01WThEbjZxeHhSRnNnQUdvSnd3Z0RRUnRZWEFBcmFneVFPbWFMS05aS0dhRXVVbHB5aXViK2FkL0t0UHFwbnR5cHZ2bnpSMzBEQnRqTWhOb2RLNkVxcmwwelUwL0dqVFVnRzQzd2RONlJhMnBBaEd0QUFaR0U1VGE4VEg2d2tuZDJJeXROS2FpWitPcjc5b1IvdGN2dGhJY0FQZTdER0FzOUVkd2s2cjNxV29UYU56WTJmYjlIdUhoMlMzNDNIczFWSUhoWXRPdCtIaDU1MXJoMjR2UDVZdlhTR3poK2VlZ2h5NzZHdWlrVTlGRkVhaW5ydnJxckxmdSt1dXd4eTc3N0xUWGZrSUlBQ0g1QkFrS0FBQUFMQUFBQUFEY0FCTUFBQVgvSUNDT1pHbWVhS3F1Yk91K2NDelBkRzNmZUs3dmZPLy93S0J3U0FRSUJvU2tjc2xzT3AvUXFIUktyVnF2Mkt4Mk9oQzBCQVdIQjJsNENEWm85SURqY0JqYTdVRWhUViszRFhpM1BKRkE4eE1jYkhpREJnTVBHMzFwZ0hCdmc0WjlpWWlCall4N2tXb2NiMjZPRDM5OG1JMkVob2llZ0psdWQ0VUZpWjVzbTZLZG4ybUJyNXQ3cEo5cmxHMGNIZzVnWGl0ZGF4d0ZHQXJJR2dvYUd3WUNaM1FGRHdqVTFBb0l6ZENRemRQVjFjMGJaOXZTM3RVSkJtalFhR1hsMU9CMGZlemUxK2ZhaUJ2azh3am5pbW41NWUvbzRPdFdqcCs0TlBJS29nc1hqYUEzZy9maUdaQlFBY0VBRmdRR09DaGdZRUVEQ0NCQkxpaHdRSUxKa3hJZS8zd01LZkpCU1FrSllKcFV5UklrZ3djVlVKcThRTFBtVFlveVk2WmN5ZkptVHAwOGlZWmM4TUJraFpneGs5YUVjUE9senA1Rm13STlLZFduMXFBU3VySmtDbFJvV0t3aHE2SVVxcEpCQXdRRU1CWXJvQUhraEx0MytSeXpoZ0NEZ0FWNDhXYmdnK3dhQW5vTE1nVE9tNkR3UThDTEJ6ZEdkdmp3MzhWNUpUZzJsemh5VE1lVUV3QldIUGd6WmM0VFNPTTFiWmlhNkx1cUp4Q21uT3h2N05Tc2wxbUdISGl3NXRPdUlXZUFFSGNGQVR3Sk1FL0FwZ0ZCYzNNVkxFZ1B2RStEZGI0Sm9rdWZQbUZCQXV2UFhXdTNNSUY4OXdUT214dk92cDE3OWV2UXR3ZjJucjZhQXBQeXpWZDNqbjA4OWUvOHhkZmVYZS94ZFo5L2QxbmdIZjk4bGJISDNWMExNcmdQZ3NXcGNGd0JFRkJnSG15TlhXZVlBZ0xjMVVGNXNHMndUSGpJaE5qQmlJS1pDTjgxR0d5UXdZcTl1YWplTWlCT1FHT0xKMUtqVEk0MGttZkJZTmZjMk5jR0lwSTRwSTB2eXJoamlUMVdGcU9PTEVJWm5qVk9WcG1hallmQmlDU05MR2JBNVlkT2tqZGloU2tRd0lFRUVXZzRuUVVtdlloWWUrYkZLYUZvZE41bHAzckt2SllmbkJLQUorZ0dETWkzbW1id1dZZm5nN0loZXVXaWh1NXAzMlhjU1dkU2orc3RrRjk1ZHA2NGpKK1JCaXBvY0hrQ0NwNlBDaVJRNklOb29rQ0FBd3kweWQyQ3RORVQzWW83UnZpaEJqRlpBT2FLREhUNDNETDRCUW5zWk1vOHh4NnVJMW9RckhYWGhIWnJCMjhHNjJuL1lTWXhpK3V6UDJJcmdiYkhiaWFlcjdoQ2lPeERGV2hyYm1HbkxWdXVzNU5GZXhoRnVITFg2Z2tFRUNvcmxMcFpvMENXSkc0cExqSUFDeWttQnNwMGVTU1ZlQzE1VERKZVVobGtvd2xMK1NXTE5KcFcyV0VGODd1clh6TldTWjZKT0ViN2I4ZzFiclpNakNnM2V6QnRXS0tjNE12eUV0d3liUGVhTUFBMUVDUm9BUVlIWUxwYmVZWUNMZlErbXRMNWM5Q25mUXBZcFV0SE9TZWpFZ1Q5b2daL0dTcWQwZjJtK0xSNVd6T3RIcWxRWDFwWXdwQytXYlhLcVNZdHBKNU10NGEwMWxHelMzYWtGNjBBeGtjVGFMZ0F5UkJQV0NvRGdIZkpxd1J1QnV6ZHcvMW1sM2lDd1RJZUxVV0pOMHY0TWNNZTd1YXNDVHhzZU5XUFN4YzVSYnZJZ0Q3Z2VaTGJHcnFDRzNqZXBVbWJiemU2M1k2ZnZqaU95bGJ3T0lUUGZJSEVGc0FITC96d3hCZHZQQlZkRktIODhzdzM3L3p6MEVjdi9mVFVWMi85OVNlRUFBQWgrUVFKQ2dBQUFDd0FBQUFBM0FBVEFBQUYveUFnam1ScG5taXFybXpydm5Bc3ozUnQzM2l1NzN6di84Q2djRWdFQ0FhRXBITEpiRHFmMEtoMFNxMWFyOWlzZGpvUXRBUUZoMmN3OEJRRW0zVDZ5SEVZSEhENG9LQ3VEOXFHdk5zeFQ2UVRnQWtjSEhtRmVYMTFmbTE3aFh3UEczNXFnbmh4YndNUGtYYUxoZ1o5Z1dwM2JweWVnWDREY0craW5ZK1FuNmVjbHBpWmtIaDZlcGV0Z0xTVWNCeGxEMmNzWFhkdkJRckhHZ29hR2hzR2FJa0ZEd2pUQ0FyVHpYK1FhZEhVM2Mxb2ZwSGMzZGNHRzg5LzQrVFlrdHZTMU5ZSTdPSHUzZkVKNXRwcUJ1L2srSFg3K25YREIwNlN1b0htMEtYaFI2NWNRVDhQM0ZSQU1JQUZnVk1Qd0RDQXdMSGpnZ0lISklnY2VlRkJnNDRlQy8rSVRDQ0JaWUtTSjFGQ1dQQmdwRTJZTW1jK3FOQ3lwd1NjTW1uYVhBa1VKWU9hRlZ5S0xPcXg1dENYSm5NZWxjQnpKTlNZS0lYMlpQa3pxc3lqUExrdTlacjFRY2lWRXJZeGFJQ0FnRVVPQlJKSWd6Q2hidDBNTE9QRnd5QmdnVjI3ZUNVY214WnZnOSsvZGZQR281Ymc4Ti9BZzYxWk00dzRzZURGMWZwV2hpelptb2ErR1NvcnRnY2FNV2QvZmtQL0hZME1nV2JUaXBWVisrd1k4R2h2cVNHNFhVRWdvWVRLRStRaDBPQ3ZnZ1VMaUJja1dFWjRHZ2JqeDVIWFZjNThJUFFKMGlkUUo2NlhhblRwRnJhVGUzNDgrWExpelJOY3o2NThlSE1OM3JOUFQrQytHL25vZHFrM3Q2YStmTjNqK3UwWG4zblZUUVBmZFJQc3BrTC9iK2RFSU44RWVNbTJHQVliVE5BQmRyYkoxaHlGRnY1bFFZVG9kU1pBQmhjK2xvQ0V5aHhUWVlrWm9wZE1NaU5laUJ4eUlGYWpWNHdZSHBmQkJzcFVsOHlLSHU2b29WNUFQc1pqUXh5eWVOZUozTjFJWW9kMzhjZ2RQQlVpZDZHQ0tmUldnQVlVNEljY1N5SGV3OEIzZG9HSkhtTUxrR2taY3luS2syWjUwWW0wekp6TGJEQ21mQmJJNmVJeUNkeUptSm1vcVptbkJBWHk5K1oveU9sWkRacHdZaWhuajdJWnB1WUVldnJZSjVtSkV1cWlvZjRsK05ZREVYUXBYUWNNbk5qWk5EeDFvR3FKNFMybkYzRXNxV3JocXFWV2w2SklzbHBBSzVNYUlxRGVxakpxNTZxTjFhVGFRYVBiSFRQWXI4QmU2R3N5eWg2RGE3T2ttbXFQLzdHeXp0ZHJOVlFCbTUrcGd3M1g3YW9ZS2hmWm9zYjZoeVVLQkhDZ1FLaWoxcmdoa09BSnVaZzFTZVlJSVkrbklwRHZmL3NxbTR5Tkc1Q1k2NGY4N3FkQXdTWEtHcUZraFBIMVpIYjJFZ1l0dzNicEtHVmtQejVwSkFhditndWtqQjFVSEUvSExOSm9iV2NTWDhqaXVpY01NQkZkMk9tS3dRRnMydGpYcERmblBFMWozMFYzYzdpUkhscnpCRDJIT056T0R5WnRzUUpNSTRyMEFVTmFFM1hOSFF3OTVjOUdDMDAxTXBJeERhY0ZRK3VsVE5UWmxVM08xZVdWSGE2dmIvcG5RVVVyZ0hIU0JLSXV3RytiQ1B5RXFiQWcyNWdNVlYxaU9CL0lHaDVZT0tMS0lRNnhCQWNVSG16akljSXFnYWpaK1JvNDJEY3ZYbDdqMFU0V09VZCsySUd1N0RXakkxcHQ0RFlxOEJQbTBlbnR1R1NRWS80dEJpOVNzMEhxZnduZ0JRdEhiQ0g4OE1RWGIvenh5RmZSUlJITU4rLzg4OUJITC8zMDFGZHYvZlhZWjM5Q0NBQWgrUVFKQ2dBQUFDd0FBQUFBM0FBVEFBQUYveUFnam1ScG5taXFybXpydm5Bc3ozUnQzM2l1NzN6di84Q2djRWdFQ0FhRXBITEpiRHFmMEtoMFNxMWFyOWlzZGpvUXRBUUZoMmZBS1hzS203UjZRK1k0M3ZBQmVwMG1Hd3dPUEg3dzJDVCtnSFozZDNseWFnbCtDUU52ZzR5R2gzNkxjSG9HZkhSL1pZT0VsUTkvYTRvY21vUnlnSWlSazVwOHBZbVpqWGVQYVlCdWpIb09xcDVxWkhCbEhBVUZYaXRkZGc4UEJnOEtHc2dheXh2R2tBa0ZEd2dJQ3RQVHpYMm1mdEhXM1FuT3BvakczZGJZa05qazF3YXhzZERTMU43Z2E5encxdC9haWZUazM1ZnU2UWozbnVtTDE0Zk91SFRORUNIcVU0RERnUUVzQ0N3aWRpSEJBd1lRTW1wY1VPQ0FoSThnSlZ6VXVMR1RoQVFuUC85YWJFQXlJNE1DSVZPS1pObnlKVXFVSnhOY0dObHl3WU9RZ0haaXJHa1NKOGdITkVreStBa1M1OHFXRUpZQy9iTXphY21iUUhrcU5kbFVKMUtvU3oyaTlDT2htUVlDRVh0VnJDQmd3WVMzY0NmOHFUY05ROXU0Y0ZGT3EyYlBMVjY1Q2Y3ZHhadGhialcrQ2diam5XdE5nV1BGY0FzSGRveGdXV0svaXlWMDQ1c0FjMlM5NlNEbjFleFl3MTdSRXdwTFFFWXQyZVcvcXRQWlJRQUI3UW9DNjFSVytHc0J3WVovQ1hiL1hSQ1lMc0FLRml6RXRVQWMrRzdsY1pzanJvc2NPdlRtc29VdngxNVB3Y2NKME44eUwxN045UEcvRTdqdjlTNGhPVjdwZElQRGRaK2VQRHp2MnFNWG4yYjUrd1RiS3VBV25GM29aYkFCWlkwbFZtRC9BcFFkOXRoeWJ4bm8yR0d1Q1ZEZ2dhVXBveUJzQjFiR0dnSVliSkNCY3VGSmlPQXlHb2hJSW5RU21tZGVpQm5NRjJHSGZOVWxJb2Mxcm5jallSalc2TmdHZjNWUUdJTFd3TmpCZnhFWmNBRmJDN2dIWFFjZlVZT1lkd3pRTnhvNXlVaFFaWGh2UllsTWVWU3VTT0pIS0phNUFRTVFUaEJsWldaNkJwNEZhMXF6VEFKYmlqY0JsSnJ0eGVhWjRsbm5wWndwdWtXaWVHUW1ZeDVBVFhJcGx3VEw4RGROWjA3Q3RXWXliTklKRjRBcDROWkhlMDkyMEFFRGswMzVrYWZpZVFycVhvZks1eW1wbjVKSEtZalByZm9XY1I4V1dRR3A0VWwzMktQVmdYZG5xeE02T0txc3BqSVlyR1BEcmxyc1p0UkljT3VSODZuSEZ3YlB2bWVzLzZQSDRmcnJxYnZ5U2grbUtHaGFBQVJQempqZGhDcmFtZG9HR09ocDQ0aSt6b2dCa1NEdVdDNUtsRTRyNHBISmthclhyaisrUmFxNWlMbVdMbHhIQnRlYXZqRys2YW1KclVrSkpJNFJvNXNCdjlBYU9LK2pBYXU3N3NiSDduc3BDd05JWUlBQ2ZmTDdKNEp0V1FuZW40MjFuTnpNY0I2QXFwUmE5a2xvbm1CU2lSNEdOaStjSlpwdndnWDBlamo3MVc5eVIrZUlnYVZ2UWdmMGwvQThuV2pVRmh3dFpZV0M0aFZua1ozcC9QSnFOUTVObndVUXJRQ0dCQkJNUUlHVHRMN2FiSys1SmpBdjFmaTliUzBHTGxKSGdkakVnWXp6QVJUd0MxZmdFV2RKdUtLQlp6ajMzMVkyM3FCM2k5djVhWS9yU1VDNHc3UGFMZVdYbXI5TnN6TUZvTjc5ZWVpTTIzMm8zM0VKQUl6YVNHd2grK3kwMTI3NzdiaFQwVVVSdlBmdSsrL0FCeS84OE1RWGIvenh5Q2QvUWdnQUlma0VDUW9BQUFBc0FBQUFBTndBRXdBQUJmOGdJSTVrYVo1b3FxNXM2NzV3TE05MGJkOTRydTk4Ny8vQW9IQklCQWdHaEtSeXlXdzZuOUNvZEVxdFdxL1lySFk2RUxRRUJZNW53Q2s3eElXTmVyMGhPOTV3emlDOVR0ZzViNE5ELytZODdJQnFaQWFFZTI5ekd3bUppZ21EZkhvR2lJbVRqWGlRaEpFUGRZeVdoWHdEbXB1Vm1Id09vSFpxakk2a1ozK01xaHllbUpLQWRvNkdlM09LYkVkNFpSd0ZCVjRyYzRNUHJnWVBDaHJNekFnYnlaU0pCY29JMXRmUW9Zc0p5ZGZlMmFtVDNkN1cwT0dwMU9UbDBZdHF5UXJxMEx0MTFQRGszS0dvRytueEJwdlREOVFod0NjdG0wQnpiT3lNSXdkT1V3RURFZ2F3SU9DQjJvTUxnQjR3Z01DeDQ0SUhCeVNJSENsQlkwZVBmeVQvSkNCNXdlUkpDQXdlakZ3NThrR0RsekJUcXFUWmN1UExtQ0lCaVd4NTgrVkhtaVJMRmowSlZDVkxsMHhsN3FTWndDYk9vMGxGV3YwcGRlZlFyVkZESnRyNWdNQkVZQmd4cUJXd1lJTGJ0eFBzcU1QQUZ1N2JsZmE4MWJVYk40SEF2WEF6eUxXbm9EQmd1SElSRkY2bTRMQmJ3UW5nTVlQWHVDM2ZsZGJ5UHJNY0dMTTN3NXdSUzFpV1dVTmx2bkVsS0RadHovRUV3YXF2WWFoUW9leEVmeUlMaTRScllZS0Zad0ozODEwUVdaMkVDcng5RXcrTzNLNkY1WXE5elhiYit5MzBhN29sSkord25MQzE2Vzk3UHkrdXdkdHgxTmNMV3pzLzNHOWUwN3N0VlBjOWtISjBCY0x0UXArYzNld0tBZ1lrVUFGcENhQW1tSHFLTFNZQS8xOFdIRWlaUFJoc1FGMW5sTEZXbUlSOFpiREJZczBZWnVDR3BHWFdtRzkyYVdpUE13aEVPT0VFSFhSd0lBTGx3WGpoaW8rQmVFMTVJenBuSW5hTGJaQkJoaHRpOXgyR2JuVlFvMlk5WnVDZkNnQmVNQ0IrREpESW9sdDRpVmhPYU5TSmRDT0JVZklsa21reU1wUEFBdktKNTlhWHpUUXpKbzBXb0pubVFGMzZKcDZXMXFDNGdXVzlHWmxhZENpeUpkK0tuc0hJbWdSUlZqZm5hREVLdWladmJjWVdvNWh0emVmYmw1TEZXTmVTS1FBbzFRWGFzZGhpaXd3VWwyQjIxSDNhUWFnaFhuUGNwMU5hZ0NxWXNsWEFxblYrellXY3BOd1ZwOWw1ZWVwSm5IcUw0U2RCaTU2Q0dsbXcyWm42YWFpWmpacWZiOFkybStDejFPMG4zZit0bnZyR2JGNmtUb0FwQ2dBV29OV1BlaDc1NEpBMHZtYWppQXI0aU91T1c3YWJRWFZHTnJpQldvUmRPSzhGeE5xTHdYM29sdXViaHY4eWx1UmJlZ3FHYjUzNnlrZXN1b1hoeUpxUFFKSUdiTHZRaGtjd2pLczF6QnZCd1NaSXNiY3NEQ0NCQUFmNHlhK1VFaHlRb0lpRUp0Zm9aN294VU9hZkUyQndnTVdNcVV5ZGZDMUxWdGlBcmswUXRHa1dFb3B6bHFNOWFKcktIZnc1YzZ3S2pGa21YRHJiaHdGb2Nrb2R0TUdGTFdwWHk5SmRpWE4xWkROc3pWNFdTTFFDR0JLb1FZSFV5b25xckhhNEVyZXdBZ01tY0FBRjdmMmJhSW9WekMycDNnVXZKdExjdklXcWxveTYvUjA0bUlwTHdEaGNpSThxTE9CNXl1ZDQ0cEhQTGJBODNoRkRXUGpOYnVrOUtueVNONTdBditUTUJ2Z0VBZ3p6TmhKYjVLNzc3cnozN3Z2dlZIUlJ4UERFRjIvODhjZ25yL3p5ekRmdi9QUFFueEFDQUNINUJBa0tBQUFBTEFBQUFBRGNBQk1BQUFYL0lDQ09aR21lYUtxdWJPdStjQ3pQZEczZmVLN3ZmTy8vd0tCd1NBUUlCb1NrY3Nsc09wL1FxSFJLclZxdjJLeDJPaEMwQklVQ3djTXBPODRPVDJIRGJtOEdITFFqbm42d0UzZzgzU0EzREI1NUczbGxmSHhuZm5aNGdnbHZldzZHZjR5U2dtWUdscENKa25vY2hXaUlkM2tKY1paeURuOTNpNktQbDRlbmlvcHdxNlNJb1pLeGhwZW5iaHRIWlJ4aFhpc0RvcHdQZ0hrR0R4ckxHZ2pMRzhtQzBna0ZEd2pYMkFnSjBiWEoyZGpiZ05Kc0F0YmZDTkIyb09ubjZNbUtiZVh0MjI2SzFmTUdpNmozNTlENjl1YStRWnNramQrM2NPdlk5WE5ncDRBQkNRTllFREJsN0VJZUNRa2VNSURBc2VPQ0J3Y2tpQlNaNElMR2poNEIvNDBrYVhJalNnZ01IbUJjaWZIa3k1Z1lFNnpNMk9BbHpHTTZaNXJzK2ZJalRaMHRmY1lNU2xMQ1VKOGZMNDdrQ1ZYbVRqd1BpS0prVUNEbnlxYzNDeHpRbVllQXhBRUdMR0pZaXdDRGdBVVQ0c3FkZ09lYkFyZHc1MDdJVU5mdVc3MXhkWjdEQzVpdWhHc0tFcmY5Q3hoUFlnVWFFaFBXeXpmQk1nVUlKRFBXNnpoYjVNMXkrUjVHakZrQmFMbUNNMGRPZkhxdnp0WFlKbk1lamFGQ0JRbG1WeEFZc0VHa1luUVY0bHFZTU55Q3RuWVNnZ05la0FDNTh1SnhtVHVmVzV3NTVtd0trZytuTHAxMDV1VEM1M2EvbmhnODhmTVRtRGZEVmw2NVh1bS9JWnQvMy96YWFnM2E1VzYzbmxsMWR2ZmlXYmFhWkxtcFFJQUJDVlFBMmY5bEFoVEcxMTJQUVdZYWRYRTkrRnRtRXdLV3dRWVFKclphZ3hvbXNPQ0FHVkltSW5zU2JwQ0JoaHd1ZzZLS2NYWFFRWVVjWXVETWdnckFTRm1OempqenpJcmg3Y1VoaGhIcU9OZUdwU0VXMlFZeEhzbWpoeHBnVUdBS0IxNmc0SUliTU5Da1hNbGhhSjhHV1ZKbzJJM055S2NsWUYxR3hneVlERUFuWEhKck1wTkFtL3JGQlNjelBpWUFsd1hGOFpubWVzdm9PZHlNYng3bTRvMFM1TFdkbjRiZXgyWjR4WW1FemFFYjVFVWNueGJBK1dXZ2xxSW42YUhQVEluQ2dWYmRsWnlNcU1ySVFITVJTaWFCQmFrUzE5MDNwMDR3NDM0bjBsb0JvUUZPdDF5dTJZQW5ZNjhSWGlOc3FoMnMycXF4dXlLYjdJbXRtZ2NycXNwNmg4RC9mTVNwYXBsZHg1NW53YXlLL1NmcUNRZDJoY0ZkQWdEcDVHTXZxaHZha0Y0bVp1UzcxMFdHSVl5MzBraGVrUmtNdTkyR051NmJvN3IvdHRqcXdMYXVhNStIT2RyS3E1Q2wzZGN3aSt4S2lMQnd3d29tNGIwRTZ4dnVZeXFPYThJQUVnaHdRQVY0NVZ2b3Zwa3hCbDJtbzBXN0FLYkNaWG9BaGdNbVduT2tFcXgySlg1blV1ZmJnSkhwWENmTU9HdTJRQWQ4ZWl0cFcxZWFOck5lTUdOMjdtTnowc3d6aVlucFNiWE4xOWdZdHN0emZYcmRZak5IdEFJWUdGVnd3QUV2UjFkZnhkakt4VnpBUDB0d0FBVy9pcjJ3M256VGQzVzR5UVdPM3QwRGZsZUI0WFluRUhDRWhmZmRLZ2FBMjlwMGVvNGZITG5nOXFvRytPVnlYejBnTWVXR1k3cXEzeGhpUklFQXdheU54QmF3eHk3NzdMVFhianNWWFJTaCsrNjg5Kzc3NzhBSEwvend4QmR2L1BFbmhBQUFJZmtFQ1FvQUFBQXNBQUFBQU53QUV3QUFCZjhnSUk1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJQkFnR2hLUnl5V3c2bjlDb2RFcXRXcS9ZckhZNkVMUUVoWUxENEJsd0hHZzB1YkJwdXpkbTlEazllQ1R1K01UWmtEYjRQWFliZUlJY0hIeHFmNEYzZ25xR1kya09kUW1DakhDR2ZwQ1NqSGhtaDJOK2tubUVrSm1LZzN1SGZnYWFlWTJxbjZ0Mmk0dDdzS0FQYndJSkQyVmhYaXNEQ1FaZ0RyS0RCUThhR2dqS3lodkRsSk1KeUFqVjFnakN1bmtQMU5mVndwUnRrOTNlMlpWdDVOZkNrMjdqRDk3ZjBMUFA3L0RyNHBUcDF2ZUxndnJ4N0FMK1EvQk0yNXVCZWdvWWtEQ0FCWUZoRW9iaGtVQlJ3b01HRURKcVhQRGdRTVVFRkM5YzFManhRVVVKSUNYL2lNUklFZ0lEa3ljcmptekpNU1hGbEROSnZrd0pzbWRPalF3S2ZEejVNK1BMb1NHTFFxZ1pVNlhTb0Ivdm9IeGF3R2JGbFMyWEdrdEF3S0VBREIweGlFV0FvZHFHQlJQU3FwMXd4NXFDYW1EUnJwMlFvYTNiYWdMa3pyVUxGNEdDdkhQVGdsUkFtS3hadldzSGF5QmNsaURpdEhVbHZHV005N0ZnQ2RZV1Z3NGMyZS9rdzRIWkpsQ3dtREJod0hQcmpyYUdZVEhxdGFveFZLZ2dvZXNLQWdkMlNYNXJiVU1GQ3hPQUM4Y0dEd0hGd0JZV0pDZ3U0WGZ3dGNxWlYwZ3JQSGowdTJTbnF3VStJWHBoM3JLNWIxZk91N0J4NStLN0w2LzIvWGhnOHV5WG5ROGR2ZlJpRGU3VHd5Zk51emx5YktZcGdJRnRLaEFnd0VLa0tjT2Yvd0NoWmJCQmdNdWNSaDFzbzVYSDN3YkkxV1hhZlJKeTlpQ0VybVg0SVdITmFJQWhaNnV4QnhlR0hYUUEyNFAzeVlmQkJobWdTQm96RVNwd29uZ1dPQmhnZ24vTjFhS0c4YTFZWTJvVkFrbGdDZ1FVVXdHSjhpWEFnSXRyV1VBUmJ3cHFJT1dFYWwwWm9ZSmJ6bVdsWkNXU2xzQUM2Vmt3Wm9uTmJNQUFsNWNwZytOaVp3cG5KMFh5bGVnbWxjK3RXWTFtam5HblpuQjRRdWtNQTlVSlJ4R09mNXI0cHBxRGpqbW5mS2lsaDJlakdpeUpBZ0YxWE5tWWJDMkdtaFo1QWNKVmdhamNYZWNOcU05Ung4QjZiaW5nbmxvdHZpcWRrQjNZQ2crcnRPYWFwRnNVaFNyc3E2YXhKNnNFd29aSzdJL0hXcENzcjU3RkJ4SjF3OExxVi84MXpia29YSzNMZlZlTnBpYzBLUlFHNE5Ib0lXL1hFbVp1YWlONnR0aTYyL21vV2JrMTh1aGpxZXJXUzZHRnBlMllWb3Rza1Zzc1dmQk9BSEFDclpIb1djR1F3UWhsdm1zZFhCWi9GOVlMTUYyanpVdVlCUDRhN0NMQ25vRUhyZ2tEU0NEQUFSVUlMQUdhVlZxQXdRSFI4cFpYb21tOS9PTmhnanJiZ2MybHlZeG1wSVJLOXVTTmpyWHM4Z0ViVHJZeWwycnlUSm1zTENkS2tXekZRbDFsV2xPWEdtaWZhbDZwOVZuYlFmcHlZMlNaeVhLVlY3Sm1aa01yZ0lGU3lySWVVSjJyN1lLblhkaXZVZzFrQWdkUThCN0l6SmpHc2Q5ektTZHd5QkwwM1dwd0RHeHd1T0FTRVA1dnJpTzJGM25MalFkSXJwYVJEeHFjQmRnSUhHQTc0cEtyWlhpUjJaV3VadDQ5bStvM3BLTUMzcDRBdjdTTnhCYTQ1Njc3N3J6Mzdqc1ZYUlFoL1BERUYyLzg4Y2duci96eXpEZnYvUE1uaEFBQUlma0VDUW9BQUFBc0FBQUFBTndBRXdBQUJmOGdJSTVrYVo1b3FxNXM2NzV3TE05MGJkOTRydTk4Ny8vQW9IQklCQWdHaEtSeXlXdzZuOUNvZEVxdFdxL1lySFk2RUxRRWhZTERVUEFNSEdpMHdlRXBiTjd3SThjeFR6c0dqNFIrbitEVXh3YUJlQnQ3aEgxL2dZSVBob3grWTNaM2l3bUdrMzZCa0lOOGVnT0lsM2g4aEJ1T2tBYVpoUWxuYTRCcnBueVdhNG1sZVpPRmpyR0tjWG9GQTJSZUt3TUpCZ0lTRHc2YWJ3VVBHZ2dhemMwYkJxRzBHOGtJMXRjSXdacDUxZGpXMm5DMDNkN0JqRzhKNDlqbDRjZ1AzdC9SZXRMcDErdlQ2Tzd2NWZLaEF2bmswVUtGb2dlUDN6bUNDSW9aa0RDQUJRRmhDaFFZdUtCSGdrVUpreHBBMk1oeFFZRURGaE5jdlBCQUk4ZU5DeDcvZ01RWWNrUEpreHNaUExoSU04RkxtREpyWWlScDhtVEtrQ3dUOElRSndTUFFrRU5ocGdRcEV1bk5remxwV2t3S2RTYkdpaEtvY293cVZTdktXUWtJT0JTZ1FPWUZEQmdRcEkwb1lNR0V0M0F6VExLbTRCcUd0bkRqaXJ4Vzk1dmJ2Ry9uV2x1YjhHOWV1UnNpcXFXTEYvQUVrUm9pcHJYMndMRGVEUWdrVzlQUUdMRGd5TmM2NjVXZ3VLOEMwWEFuUlk2b0dQVUV1UkxzZ2s1ZythM2NDeFVxU0JDN2dzQ0JCWGNWcTZzd3dVTHg0aGF5dmN0R1BLOEZDd3NTTEU5QTNIamU2Tk9ySHplT25XNjk1c2ZmUmkvOUhmRHo3c0lWU05CK1hYcm11Z28wckhjTTNYMzg4bzZqcjQ0Y2ViNTF1TmpGMXhjQzh6azN3WGlTOGFZQy93RVNhTEFCQnM3Y2gwRUNqcjJXQUd2THNMWkJlSHFWRmw5a0d4b29WMFQ4MVRWaEJvNk5pT0V5SjRwNElZbk5SQlFpWUNONng0d0NHM1pBWTJJZjhqWGpZUmN5azJGbUcvNW5YQVk4d3FoV0FpaSsxWUdPU0dMb1k0VlJmcWlBZ2lrd21JZVMxZ2pBZ0hrV1lMUVpmOW00OVY5Z0RXWVdZNW5tVFlDUk0yVFM1cHh4YjhJWkdWNW5ocGxtaEp5WmFkeHpicnBuWjJkLzZyblpnSElpZDV4SU1EYURnSmZiTGRyZ01rS1crUnlnejFrRVp6MW1laGFia0JwZ2lRSUJ5Vmlrd0dUcVZmRGtrMi9WeHhxaXF1cjRYM2Zrc0hjY3JlOHhseGVyRExpSGpRSVZVQWdYcjc3eUZleXVPdllxWEdiTXJicnFCTXFhRnBGRnpoTDdxdjlpMUZYN1pMUjBMVU5kY2M0ZTZDdXMyNjNLYlYraW5rQUFIaEpnMEJlSVRSNldtSGNheGh2WGcvQUppS085Ujc3SUxGMUZ3bVZkQXU2V0J1K1pGdWE3Mm1rWldNZnFCRWxLdTBHOHJGWjVuNEFUcDVqa212c09xK05qN3U2M1pNTVB2NGJ2ZXlZeTZmREgrQzZicmduQUNIQkFCUVVya0dpcnoyRndBSG5NNE1taHpxOXlpak9yT2kvTUthYkg2VndCaVl3WmR1a0VRQXZJTEtUV1hWcTBadkg1L0NmVU03TTI5WmV0dGhwMWVodDBlcWtGWXc4SUtYS0E2bXpYZlRlSDdmWmc5elcwQWhnWTBUd3RoVWE2Q2g5ZEJlSXNic0ZyWWtSQmZnVGZpRzBGaHdNV25ic29xM2NBQlVZT251L2VqVS9BNnVOZVQ4dTR3TWIxV25CQ3lKSlRMampucjhvM09lSnJVY3BjNW9DaVBxQUVrejh0WHVMa1BlREwzVWhzNGZ2dndBY3YvUERFVTlGRkVjZ25yL3p5ekRmdi9QUFFSeS85OU5SWGYwSUlBQ0g1QkFrS0FBQUFMQUFBQUFEY0FCTUFBQVgvSUNDT1pHbWVhS3F1Yk91K2NDelBkRzNmZUs3dmZPLy93S0J3U0FRSUJvU2tjc2xzT3AvUXFIUktyVnF2Mkt4Mk9oQzBCSVdDdy9Bb0R6aU90Q0h0OEJRMjhQam16SzU3SG9tOGZvNDIrUDhEZUFrYmVZUWNmWDkrZ1lPRmc0ZDFiSUdFalFtUGJJQ0NsSTkvWXdhTGpIQUpkSmVLbVpPVmlHdHBuM3FPcVppbmVvZUpnRzhDZVdVYkJWNHJBd2tHQWhJVkdMOTdoR0FDR3NyS0NBZ2JCb1RSaEx2TjFjM1BlcG5VMXMyL29aTzZBdHpkQm9QZjRlTUkzdElKeU9uRjBZd0ZEK25ZOGUzejcrWGZlZm5qOXV6OGNWc1hDaDg5YXhnazdCckFnZ0F3QlFzWUlDaHdRSUxGaXhJZU5JREFzZU9DQndjU1hNeTJzU1BIanhKRS82YTBlRUdqU1k0TVFHSzg2UElseXBVSkVtWXNhVEtteUo4SlcvTHM2SE1remFFbjhZd01XdFBreDRwR2Q3NkU0RE1QUnFGVFk4NjBPR2hvZ3dZYWdCRm9LRUFCQTQ2REVHQkFvRUJCMEFVVDRzcWRJRktCTmJjQzRNNmRrRUVrMjJvWUZPVGRHOWZ2V3J0c0J4TTIzTXl0WUwxNzY2NnQ5cGh3WHdsdW0ybElESG11U0EySUd5dU9MT0h2MzhxTE1iZEZqSHJ1WmJXZ1JYZU9lMW5DMkJVRURpeUFNTUhadXdvVExBUVgzbnZET0FVVzVWb2dydTQzNGQ0Sm5Bc25QbUZCOU5Cc2hRWGZhOTEwNCtSeGw4ZTEzclp4TitDRXlkdFZzRmtkK3ZEakU3Qy9xNTJ3T3ZiNHM3K2ZhejAyNWZyYnhlZldiU29RSUFFREVVQ3dnZjlqN2JVbHdITjlaVmFlZ3hESzF4WXpGTUpIMjRMNXNhWEFCaGxZeGlFekhvS29JVjhMWXFBTWF3OWFacUZtSlVLNFlIdU5mUmppWGhtaytOY3lKZ2FJb2x2TThCaGlCeDNJbGVOOGxIMUlXQWNSZ2taZ0NnWWlhQkdKb2pHZ0hIRlRndGFnQUZZU1poRjcvcW5UcFkrZmFWbE5BbnFKTjBFSFdhNm96QVpqQnRnbW1Cb2t3TUIwMUxXNWpBWndicWZtbE5pcHM0QjRlT3FKZ0RKMitpbVhSWnB0aHVpZ2VDNlhaVFdJeGlsWG1SbzhpWUtCQ3dpV21Xa0pWRUFrZkIwdzhLSTFJdmxJcEtuT2tWcHFkQjUraDk2bzhkM2xGbmlqcmdwcmpiZkdSU3QwbEgwbkFaRzV2c3ByV3hZUlc2U3VxNFVXcXJMRXNzcFdnOElvNnl2L3E2RWhLMEZ3MEdMYmpLWW41Q1pZQllodDFsYVBybkVZNjdreXJoWWJ1eWNlaVIyOFBzbzdiWXdpWGppaGpXc1d1V0Y1cC9INzY1SG1Ob2l1cjNSSnNHS05HL2pxNzQ4WE1yd21qaHdDZk82UUQ5djdMUXNEeFBUQU1Lc0ZwdGh5SkNka21nWWl3MFZkWEYvT205ZHl2N1lNV0dYVExZcFpnNXdOUjExQzc4b1czcDhIU0dndWw0cXlySnBwZ2xsSkhKWkhuMFkweVV3RFhDWFVOcXVGWk5MS3lZWEJBVlp2eHRBS1lJUUVzbVBnRGFjcjB0bHRPMXkvRE13WXBrZ1VwSmZUYXNMR3pkM2NkQ04zZ04zVVdSY1kzZXBJRVBldmZxKzNuakJ4cS9rcUJvR0JkdXZlYThmMzkzeklDUzYzaXZSQlRxZ0ZwZ2FXWkVJVVVMZGNLK2ZySWZBQUwyQWpzY1hxckxmdSt1dXd4MDVGRjBYVWJ2dnR1T2V1Kys2ODkrNzc3OEFITC93SklRQUFPd0FBQUFBQUFBQUFBQT09Iik=]]></data>
	</file>
	<file>
	  <filename>/ace/src/keybinding-emacs-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL2tleWJvYXJkL2tleWJpbmRpbmcvZW1hY3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2Uva2V5Ym9hcmQvc3RhdGVfaGFuZGxlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vc3RhdGVfaGFuZGxlciIpLlN0YXRlSGFuZGxlcixlPWEoIi4uL3N0YXRlX2hhbmRsZXIiKS5tYXRjaENoYXJhY3Rlck9ubHksZj17c3RhcnQ6W3trZXk6ImN0cmwteCIsdGhlbjoiYy14In0se3JlZ2V4OlsiKD86Y29tbWFuZC0oWzAtOV0qKSkqIiwiKGRvd258Y3RybC1uKSJdLGV4ZWM6ImdvbGluZWRvd24iLHBhcmFtczpbe25hbWU6InRpbWVzIixtYXRjaDoxLHR5cGU6Im51bWJlciIsZGVmYXVsdFZhbHVlOjF9XX0se3JlZ2V4OlsiKD86Y29tbWFuZC0oWzAtOV0qKSkqIiwiKHJpZ2h0fGN0cmwtZikiXSxleGVjOiJnb3RvcmlnaHQiLHBhcmFtczpbe25hbWU6InRpbWVzIixtYXRjaDoxLHR5cGU6Im51bWJlciIsZGVmYXVsdFZhbHVlOjF9XX0se3JlZ2V4OlsiKD86Y29tbWFuZC0oWzAtOV0qKSkqIiwiKHVwfGN0cmwtcCkiXSxleGVjOiJnb2xpbmV1cCIscGFyYW1zOlt7bmFtZToidGltZXMiLG1hdGNoOjEsdHlwZToibnVtYmVyIixkZWZhdWx0VmFsdWU6MX1dfSx7cmVnZXg6WyIoPzpjb21tYW5kLShbMC05XSopKSoiLCIobGVmdHxjdHJsLWIpIl0sZXhlYzoiZ290b2xlZnQiLHBhcmFtczpbe25hbWU6InRpbWVzIixtYXRjaDoxLHR5cGU6Im51bWJlciIsZGVmYXVsdFZhbHVlOjF9XX0se2NvbW1lbnQ6IlRoaXMgYmluZGluZyBtYXRjaGVzIGFsbCBwcmludGFibGUgY2hhcmFjdGVycyBleGNlcHQgbnVtYmVycyBhcyBsb25nIGFzIHRoZXkgYXJlIG5vIG51bWJlcnMgYW5kIHByaW50IHRoZW0gbiB0aW1lcy4iLHJlZ2V4OlsiKD86Y29tbWFuZC0oWzAtOV0qKSkiLCIoW14wLTldKykqIl0sbWF0Y2g6ZSxleGVjOiJpbnNlcnR0ZXh0IixwYXJhbXM6W3tuYW1lOiJ0aW1lcyIsbWF0Y2g6MSx0eXBlOiJudW1iZXIiLGRlZmF1bHRWYWx1ZToiMSJ9LHtuYW1lOiJ0ZXh0IixtYXRjaDoyfV19LHtjb21tZW50OiJUaGlzIGJpbmRpbmcgbWF0Y2hlcyBudW1iZXJzIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8gbWV0YV9udW1iZXIgaW4gdGhlIGJ1ZmZlci4iLHJlZ2V4OlsiKGNvbW1hbmQtWzAtOV0qKSoiLCIoWzAtOV0rKSJdLG1hdGNoOmUsZGlzYWxsb3dNYXRjaGVzOlsxXSxleGVjOiJpbnNlcnR0ZXh0IixwYXJhbXM6W3tuYW1lOiJ0ZXh0IixtYXRjaDoyLHR5cGU6InRleHQifV19LHtyZWdleDpbImNvbW1hbmQtKFswLTldKikiLCIoY29tbWFuZC1bMC05XXxbMC05XSkiXSxjb21tZW50OiJTdG9wcyBleGVjdXRpb24gaWYgdGhlIHJlZ2V4IC9tZXRhX1swLTldKy8gbWF0Y2hlcyB0byBhdm9pZCByZXNldHRpbmcgdGhlIGJ1ZmZlci4ifV0sImMteCI6W3trZXk6ImN0cmwtZyIsdGhlbjoic3RhcnQifSx7a2V5OiJjdHJsLXMiLGV4ZWM6InNhdmUiLHRoZW46InN0YXJ0In1dfTtiLkVtYWNzPW5ldyBkKGYpfSksYWNlLmRlZmluZSgiYWNlL2tleWJvYXJkL3N0YXRlX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZShhKXt0aGlzLmtleW1hcHBpbmc9dGhpcy4kYnVpbGRLZXltYXBwaW5nUmVnZXgoYSl9InVzZSBzdHJpY3QiO3ZhciBkPSExO2UucHJvdG90eXBlPXskYnVpbGRLZXltYXBwaW5nUmVnZXg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpdGhpcy4kYnVpbGRCaW5kaW5nc1JlZ2V4KGFbYl0pO3JldHVybiBhfSwkYnVpbGRCaW5kaW5nc1JlZ2V4OmZ1bmN0aW9uKGEpe2EuZm9yRWFjaChmdW5jdGlvbihhKXthLmtleT9hLmtleT1uZXcgUmVnRXhwKCJeIithLmtleSsiJCIpOkFycmF5LmlzQXJyYXkoYS5yZWdleCk/KCJrZXkiaW4gYXx8KGEua2V5PW5ldyBSZWdFeHAoIl4iK2EucmVnZXhbMV0rIiQiKSksYS5yZWdleD1uZXcgUmVnRXhwKGEucmVnZXguam9pbigiIikrIiQiKSk6YS5yZWdleCYmKGEucmVnZXg9bmV3IFJlZ0V4cChhLnJlZ2V4KyIkIikpfSl9LCRjb21wb3NlQnVmZmVyOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGEuc3RhdGU9PW51bGx8fGEuYnVmZmVyPT1udWxsKWEuc3RhdGU9InN0YXJ0IixhLmJ1ZmZlcj0iIjt2YXIgZT1bXTtiJjEmJmUucHVzaCgiY3RybCIpLGImOCYmZS5wdXNoKCJjb21tYW5kIiksYiYyJiZlLnB1c2goIm9wdGlvbiIpLGImNCYmZS5wdXNoKCJzaGlmdCIpLGMmJmUucHVzaChjKTt2YXIgZj1lLmpvaW4oIi0iKSxnPWEuYnVmZmVyK2Y7YiE9MiYmKGEuYnVmZmVyPWcpO3ZhciBoPXtidWZmZXJUb1VzZTpnLHN5bWJvbGljTmFtZTpmfTtyZXR1cm4gZCYmKGgua2V5SWRlbnRpZmllcj1kLmtleUlkZW50aWZpZXIpLGh9LCRmaW5kOmZ1bmN0aW9uKGEsYixjLGUsZixnKXt2YXIgaD17fTtyZXR1cm4gdGhpcy5rZXltYXBwaW5nW2Euc3RhdGVdLnNvbWUoZnVuY3Rpb24oaSl7dmFyIGo7aWYoaS5rZXkmJiFpLmtleS50ZXN0KGMpKXJldHVybiExO2lmKGkucmVnZXgmJiEoaj1pLnJlZ2V4LmV4ZWMoYikpKXJldHVybiExO2lmKGkubWF0Y2gmJiFpLm1hdGNoKGIsZSxmLGMsZykpcmV0dXJuITE7aWYoaS5kaXNhbGxvd01hdGNoZXMpZm9yKHZhciBrPTA7azxpLmRpc2FsbG93TWF0Y2hlcy5sZW5ndGg7aysrKWlmKCEhaltpLmRpc2FsbG93TWF0Y2hlc1trXV0pcmV0dXJuITE7aWYoaS5leGVjKXtoLmNvbW1hbmQ9aS5leGVjO2lmKGkucGFyYW1zKXt2YXIgbDtoLmFyZ3M9e30saS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihhKXthLm1hdGNoIT1udWxsJiZqIT1udWxsP2w9althLm1hdGNoXXx8YS5kZWZhdWx0VmFsdWU6bD1hLmRlZmF1bHRWYWx1ZSxhLnR5cGU9PT0ibnVtYmVyIiYmKGw9cGFyc2VJbnQobCkpLGguYXJnc1thLm5hbWVdPWx9KX1hLmJ1ZmZlcj0iIn1yZXR1cm4gaS50aGVuJiYoYS5zdGF0ZT1pLnRoZW4sYS5idWZmZXI9IiIpLGguY29tbWFuZD09bnVsbCYmKGguY29tbWFuZD0ibnVsbCIpLGQmJmNvbnNvbGUubG9nKCJLZXlib2FyZFN0YXRlTWFwcGVyI2ZpbmQiLGkpLCEwfSksaC5jb21tYW5kP2g6KGEuYnVmZmVyPSIiLCExKX0saGFuZGxlS2V5Ym9hcmQ6ZnVuY3Rpb24oYSxiLGMsZSxmKXtpZihiPT0wfHxjIT0iIiYmYyE9U3RyaW5nLmZyb21DaGFyQ29kZSgwKSl7dmFyIGc9dGhpcy4kY29tcG9zZUJ1ZmZlcihhLGIsYyxmKSxoPWcuYnVmZmVyVG9Vc2UsaT1nLnN5bWJvbGljTmFtZSxqPWcua2V5SWRlbnRpZmllcjtyZXR1cm4gZz10aGlzLiRmaW5kKGEsaCxpLGIsYyxqKSxkJiZjb25zb2xlLmxvZygiS2V5Ym9hcmRTdGF0ZU1hcHBlciNtYXRjaCIsaCxpLGcpLGd9cmV0dXJuIG51bGx9fSxiLm1hdGNoQ2hhcmFjdGVyT25seT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYj09MD8hMDpiPT00JiZjLmxlbmd0aD09MT8hMDohMX0sYi5TdGF0ZUhhbmRsZXI9ZX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/keybinding-emacs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uva2V5Ym9hcmQva2V5YmluZGluZy9lbWFjcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9rZXlib2FyZC9zdGF0ZV9oYW5kbGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9zdGF0ZV9oYW5kbGVyIikuU3RhdGVIYW5kbGVyLGU9YSgiLi4vc3RhdGVfaGFuZGxlciIpLm1hdGNoQ2hhcmFjdGVyT25seSxmPXtzdGFydDpbe2tleToiY3RybC14Iix0aGVuOiJjLXgifSx7cmVnZXg6WyIoPzpjb21tYW5kLShbMC05XSopKSoiLCIoZG93bnxjdHJsLW4pIl0sZXhlYzoiZ29saW5lZG93biIscGFyYW1zOlt7bmFtZToidGltZXMiLG1hdGNoOjEsdHlwZToibnVtYmVyIixkZWZhdWx0VmFsdWU6MX1dfSx7cmVnZXg6WyIoPzpjb21tYW5kLShbMC05XSopKSoiLCIocmlnaHR8Y3RybC1mKSJdLGV4ZWM6ImdvdG9yaWdodCIscGFyYW1zOlt7bmFtZToidGltZXMiLG1hdGNoOjEsdHlwZToibnVtYmVyIixkZWZhdWx0VmFsdWU6MX1dfSx7cmVnZXg6WyIoPzpjb21tYW5kLShbMC05XSopKSoiLCIodXB8Y3RybC1wKSJdLGV4ZWM6ImdvbGluZXVwIixwYXJhbXM6W3tuYW1lOiJ0aW1lcyIsbWF0Y2g6MSx0eXBlOiJudW1iZXIiLGRlZmF1bHRWYWx1ZToxfV19LHtyZWdleDpbIig/OmNvbW1hbmQtKFswLTldKikpKiIsIihsZWZ0fGN0cmwtYikiXSxleGVjOiJnb3RvbGVmdCIscGFyYW1zOlt7bmFtZToidGltZXMiLG1hdGNoOjEsdHlwZToibnVtYmVyIixkZWZhdWx0VmFsdWU6MX1dfSx7Y29tbWVudDoiVGhpcyBiaW5kaW5nIG1hdGNoZXMgYWxsIHByaW50YWJsZSBjaGFyYWN0ZXJzIGV4Y2VwdCBudW1iZXJzIGFzIGxvbmcgYXMgdGhleSBhcmUgbm8gbnVtYmVycyBhbmQgcHJpbnQgdGhlbSBuIHRpbWVzLiIscmVnZXg6WyIoPzpjb21tYW5kLShbMC05XSopKSIsIihbXjAtOV0rKSoiXSxtYXRjaDplLGV4ZWM6Imluc2VydHRleHQiLHBhcmFtczpbe25hbWU6InRpbWVzIixtYXRjaDoxLHR5cGU6Im51bWJlciIsZGVmYXVsdFZhbHVlOiIxIn0se25hbWU6InRleHQiLG1hdGNoOjJ9XX0se2NvbW1lbnQ6IlRoaXMgYmluZGluZyBtYXRjaGVzIG51bWJlcnMgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBtZXRhX251bWJlciBpbiB0aGUgYnVmZmVyLiIscmVnZXg6WyIoY29tbWFuZC1bMC05XSopKiIsIihbMC05XSspIl0sbWF0Y2g6ZSxkaXNhbGxvd01hdGNoZXM6WzFdLGV4ZWM6Imluc2VydHRleHQiLHBhcmFtczpbe25hbWU6InRleHQiLG1hdGNoOjIsdHlwZToidGV4dCJ9XX0se3JlZ2V4OlsiY29tbWFuZC0oWzAtOV0qKSIsIihjb21tYW5kLVswLTldfFswLTldKSJdLGNvbW1lbnQ6IlN0b3BzIGV4ZWN1dGlvbiBpZiB0aGUgcmVnZXggL21ldGFfWzAtOV0rLyBtYXRjaGVzIHRvIGF2b2lkIHJlc2V0dGluZyB0aGUgYnVmZmVyLiJ9XSwiYy14Ijpbe2tleToiY3RybC1nIix0aGVuOiJzdGFydCJ9LHtrZXk6ImN0cmwtcyIsZXhlYzoic2F2ZSIsdGhlbjoic3RhcnQifV19O2IuRW1hY3M9bmV3IGQoZil9KSxkZWZpbmUoImFjZS9rZXlib2FyZC9zdGF0ZV9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGUoYSl7dGhpcy5rZXltYXBwaW5nPXRoaXMuJGJ1aWxkS2V5bWFwcGluZ1JlZ2V4KGEpfSJ1c2Ugc3RyaWN0Ijt2YXIgZD0hMTtlLnByb3RvdHlwZT17JGJ1aWxkS2V5bWFwcGluZ1JlZ2V4OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXRoaXMuJGJ1aWxkQmluZGluZ3NSZWdleChhW2JdKTtyZXR1cm4gYX0sJGJ1aWxkQmluZGluZ3NSZWdleDpmdW5jdGlvbihhKXthLmZvckVhY2goZnVuY3Rpb24oYSl7YS5rZXk/YS5rZXk9bmV3IFJlZ0V4cCgiXiIrYS5rZXkrIiQiKTpBcnJheS5pc0FycmF5KGEucmVnZXgpPygia2V5ImluIGF8fChhLmtleT1uZXcgUmVnRXhwKCJeIithLnJlZ2V4WzFdKyIkIikpLGEucmVnZXg9bmV3IFJlZ0V4cChhLnJlZ2V4LmpvaW4oIiIpKyIkIikpOmEucmVnZXgmJihhLnJlZ2V4PW5ldyBSZWdFeHAoYS5yZWdleCsiJCIpKX0pfSwkY29tcG9zZUJ1ZmZlcjpmdW5jdGlvbihhLGIsYyxkKXtpZihhLnN0YXRlPT1udWxsfHxhLmJ1ZmZlcj09bnVsbClhLnN0YXRlPSJzdGFydCIsYS5idWZmZXI9IiI7dmFyIGU9W107YiYxJiZlLnB1c2goImN0cmwiKSxiJjgmJmUucHVzaCgiY29tbWFuZCIpLGImMiYmZS5wdXNoKCJvcHRpb24iKSxiJjQmJmUucHVzaCgic2hpZnQiKSxjJiZlLnB1c2goYyk7dmFyIGY9ZS5qb2luKCItIiksZz1hLmJ1ZmZlcitmO2IhPTImJihhLmJ1ZmZlcj1nKTt2YXIgaD17YnVmZmVyVG9Vc2U6ZyxzeW1ib2xpY05hbWU6Zn07cmV0dXJuIGQmJihoLmtleUlkZW50aWZpZXI9ZC5rZXlJZGVudGlmaWVyKSxofSwkZmluZDpmdW5jdGlvbihhLGIsYyxlLGYsZyl7dmFyIGg9e307cmV0dXJuIHRoaXMua2V5bWFwcGluZ1thLnN0YXRlXS5zb21lKGZ1bmN0aW9uKGkpe3ZhciBqO2lmKGkua2V5JiYhaS5rZXkudGVzdChjKSlyZXR1cm4hMTtpZihpLnJlZ2V4JiYhKGo9aS5yZWdleC5leGVjKGIpKSlyZXR1cm4hMTtpZihpLm1hdGNoJiYhaS5tYXRjaChiLGUsZixjLGcpKXJldHVybiExO2lmKGkuZGlzYWxsb3dNYXRjaGVzKWZvcih2YXIgaz0wO2s8aS5kaXNhbGxvd01hdGNoZXMubGVuZ3RoO2srKylpZighIWpbaS5kaXNhbGxvd01hdGNoZXNba11dKXJldHVybiExO2lmKGkuZXhlYyl7aC5jb21tYW5kPWkuZXhlYztpZihpLnBhcmFtcyl7dmFyIGw7aC5hcmdzPXt9LGkucGFyYW1zLmZvckVhY2goZnVuY3Rpb24oYSl7YS5tYXRjaCE9bnVsbCYmaiE9bnVsbD9sPWpbYS5tYXRjaF18fGEuZGVmYXVsdFZhbHVlOmw9YS5kZWZhdWx0VmFsdWUsYS50eXBlPT09Im51bWJlciImJihsPXBhcnNlSW50KGwpKSxoLmFyZ3NbYS5uYW1lXT1sfSl9YS5idWZmZXI9IiJ9cmV0dXJuIGkudGhlbiYmKGEuc3RhdGU9aS50aGVuLGEuYnVmZmVyPSIiKSxoLmNvbW1hbmQ9PW51bGwmJihoLmNvbW1hbmQ9Im51bGwiKSxkJiZjb25zb2xlLmxvZygiS2V5Ym9hcmRTdGF0ZU1hcHBlciNmaW5kIixpKSwhMH0pLGguY29tbWFuZD9oOihhLmJ1ZmZlcj0iIiwhMSl9LGhhbmRsZUtleWJvYXJkOmZ1bmN0aW9uKGEsYixjLGUsZil7aWYoYj09MHx8YyE9IiImJmMhPVN0cmluZy5mcm9tQ2hhckNvZGUoMCkpe3ZhciBnPXRoaXMuJGNvbXBvc2VCdWZmZXIoYSxiLGMsZiksaD1nLmJ1ZmZlclRvVXNlLGk9Zy5zeW1ib2xpY05hbWUsaj1nLmtleUlkZW50aWZpZXI7cmV0dXJuIGc9dGhpcy4kZmluZChhLGgsaSxiLGMsaiksZCYmY29uc29sZS5sb2coIktleWJvYXJkU3RhdGVNYXBwZXIjbWF0Y2giLGgsaSxnKSxnfXJldHVybiBudWxsfX0sYi5tYXRjaENoYXJhY3Rlck9ubHk9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGI9PTA/ITA6Yj09NCYmYy5sZW5ndGg9PTE/ITA6ITF9LGIuU3RhdGVIYW5kbGVyPWV9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/keybinding-vim-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL2tleWJvYXJkL2tleWJpbmRpbmcvdmltIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2tleWJvYXJkL3N0YXRlX2hhbmRsZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3N0YXRlX2hhbmRsZXIiKS5TdGF0ZUhhbmRsZXIsZT1hKCIuLi9zdGF0ZV9oYW5kbGVyIikubWF0Y2hDaGFyYWN0ZXJPbmx5LGY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybntyZWdleDpbIihbMC05XSopIixhXSxleGVjOmIscGFyYW1zOlt7bmFtZToidGltZXMiLG1hdGNoOjEsdHlwZToibnVtYmVyIixkZWZhdWx0VmFsdWU6MX1dLHRoZW46Y319LGc9e3N0YXJ0Olt7a2V5OiJpIix0aGVuOiJpbnNlcnRNb2RlIn0se2tleToiZCIsdGhlbjoiZGVsZXRlTW9kZSJ9LHtrZXk6ImEiLGV4ZWM6ImdvdG9yaWdodCIsdGhlbjoiaW5zZXJ0TW9kZSJ9LHtrZXk6InNoaWZ0LWkiLGV4ZWM6ImdvdG9saW5lc3RhcnQiLHRoZW46Imluc2VydE1vZGUifSx7a2V5OiJzaGlmdC1hIixleGVjOiJnb3RvbGluZWVuZCIsdGhlbjoiaW5zZXJ0TW9kZSJ9LHtrZXk6InNoaWZ0LWMiLGV4ZWM6InJlbW92ZXRvbGluZWVuZCIsdGhlbjoiaW5zZXJ0TW9kZSJ9LHtrZXk6InNoaWZ0LXIiLGV4ZWM6Im92ZXJ3cml0ZSIsdGhlbjoicmVwbGFjZU1vZGUifSxmKCIoa3x1cCkiLCJnb2xpbmV1cCIpLGYoIihqfGRvd24pIiwiZ29saW5lZG93biIpLGYoIihsfHJpZ2h0KSIsImdvdG9yaWdodCIpLGYoIihofGxlZnQpIiwiZ290b2xlZnQiKSx7a2V5OiJzaGlmdC1nIixleGVjOiJnb3RvZW5kIn0sZigiYiIsImdvdG93b3JkbGVmdCIpLGYoImUiLCJnb3Rvd29yZHJpZ2h0IiksZigieCIsImRlbCIpLGYoInNoaWZ0LXgiLCJiYWNrc3BhY2UiKSxmKCJzaGlmdC1kIiwicmVtb3ZldG9saW5lZW5kIiksZigidSIsInVuZG8iKSx7Y29tbWVudDoiQ2F0Y2ggc29tZSBrZXlib2FyZCBpbnB1dCB0byBzdG9wIGl0IGhlcmUiLG1hdGNoOmV9XSxpbnNlcnRNb2RlOlt7a2V5OiJlc2MiLHRoZW46InN0YXJ0In1dLHJlcGxhY2VNb2RlOlt7a2V5OiJlc2MiLGV4ZWM6Im92ZXJ3cml0ZSIsdGhlbjoic3RhcnQifV0sZGVsZXRlTW9kZTpbe2tleToiZCIsZXhlYzoicmVtb3ZlbGluZSIsdGhlbjoic3RhcnQifV19O2IuVmltPW5ldyBkKGcpfSksYWNlLmRlZmluZSgiYWNlL2tleWJvYXJkL3N0YXRlX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZShhKXt0aGlzLmtleW1hcHBpbmc9dGhpcy4kYnVpbGRLZXltYXBwaW5nUmVnZXgoYSl9InVzZSBzdHJpY3QiO3ZhciBkPSExO2UucHJvdG90eXBlPXskYnVpbGRLZXltYXBwaW5nUmVnZXg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpdGhpcy4kYnVpbGRCaW5kaW5nc1JlZ2V4KGFbYl0pO3JldHVybiBhfSwkYnVpbGRCaW5kaW5nc1JlZ2V4OmZ1bmN0aW9uKGEpe2EuZm9yRWFjaChmdW5jdGlvbihhKXthLmtleT9hLmtleT1uZXcgUmVnRXhwKCJeIithLmtleSsiJCIpOkFycmF5LmlzQXJyYXkoYS5yZWdleCk/KCJrZXkiaW4gYXx8KGEua2V5PW5ldyBSZWdFeHAoIl4iK2EucmVnZXhbMV0rIiQiKSksYS5yZWdleD1uZXcgUmVnRXhwKGEucmVnZXguam9pbigiIikrIiQiKSk6YS5yZWdleCYmKGEucmVnZXg9bmV3IFJlZ0V4cChhLnJlZ2V4KyIkIikpfSl9LCRjb21wb3NlQnVmZmVyOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGEuc3RhdGU9PW51bGx8fGEuYnVmZmVyPT1udWxsKWEuc3RhdGU9InN0YXJ0IixhLmJ1ZmZlcj0iIjt2YXIgZT1bXTtiJjEmJmUucHVzaCgiY3RybCIpLGImOCYmZS5wdXNoKCJjb21tYW5kIiksYiYyJiZlLnB1c2goIm9wdGlvbiIpLGImNCYmZS5wdXNoKCJzaGlmdCIpLGMmJmUucHVzaChjKTt2YXIgZj1lLmpvaW4oIi0iKSxnPWEuYnVmZmVyK2Y7YiE9MiYmKGEuYnVmZmVyPWcpO3ZhciBoPXtidWZmZXJUb1VzZTpnLHN5bWJvbGljTmFtZTpmfTtyZXR1cm4gZCYmKGgua2V5SWRlbnRpZmllcj1kLmtleUlkZW50aWZpZXIpLGh9LCRmaW5kOmZ1bmN0aW9uKGEsYixjLGUsZixnKXt2YXIgaD17fTtyZXR1cm4gdGhpcy5rZXltYXBwaW5nW2Euc3RhdGVdLnNvbWUoZnVuY3Rpb24oaSl7dmFyIGo7aWYoaS5rZXkmJiFpLmtleS50ZXN0KGMpKXJldHVybiExO2lmKGkucmVnZXgmJiEoaj1pLnJlZ2V4LmV4ZWMoYikpKXJldHVybiExO2lmKGkubWF0Y2gmJiFpLm1hdGNoKGIsZSxmLGMsZykpcmV0dXJuITE7aWYoaS5kaXNhbGxvd01hdGNoZXMpZm9yKHZhciBrPTA7azxpLmRpc2FsbG93TWF0Y2hlcy5sZW5ndGg7aysrKWlmKCEhaltpLmRpc2FsbG93TWF0Y2hlc1trXV0pcmV0dXJuITE7aWYoaS5leGVjKXtoLmNvbW1hbmQ9aS5leGVjO2lmKGkucGFyYW1zKXt2YXIgbDtoLmFyZ3M9e30saS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihhKXthLm1hdGNoIT1udWxsJiZqIT1udWxsP2w9althLm1hdGNoXXx8YS5kZWZhdWx0VmFsdWU6bD1hLmRlZmF1bHRWYWx1ZSxhLnR5cGU9PT0ibnVtYmVyIiYmKGw9cGFyc2VJbnQobCkpLGguYXJnc1thLm5hbWVdPWx9KX1hLmJ1ZmZlcj0iIn1yZXR1cm4gaS50aGVuJiYoYS5zdGF0ZT1pLnRoZW4sYS5idWZmZXI9IiIpLGguY29tbWFuZD09bnVsbCYmKGguY29tbWFuZD0ibnVsbCIpLGQmJmNvbnNvbGUubG9nKCJLZXlib2FyZFN0YXRlTWFwcGVyI2ZpbmQiLGkpLCEwfSksaC5jb21tYW5kP2g6KGEuYnVmZmVyPSIiLCExKX0saGFuZGxlS2V5Ym9hcmQ6ZnVuY3Rpb24oYSxiLGMsZSxmKXtpZihiPT0wfHxjIT0iIiYmYyE9U3RyaW5nLmZyb21DaGFyQ29kZSgwKSl7dmFyIGc9dGhpcy4kY29tcG9zZUJ1ZmZlcihhLGIsYyxmKSxoPWcuYnVmZmVyVG9Vc2UsaT1nLnN5bWJvbGljTmFtZSxqPWcua2V5SWRlbnRpZmllcjtyZXR1cm4gZz10aGlzLiRmaW5kKGEsaCxpLGIsYyxqKSxkJiZjb25zb2xlLmxvZygiS2V5Ym9hcmRTdGF0ZU1hcHBlciNtYXRjaCIsaCxpLGcpLGd9cmV0dXJuIG51bGx9fSxiLm1hdGNoQ2hhcmFjdGVyT25seT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYj09MD8hMDpiPT00JiZjLmxlbmd0aD09MT8hMDohMX0sYi5TdGF0ZUhhbmRsZXI9ZX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/keybinding-vim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uva2V5Ym9hcmQva2V5YmluZGluZy92aW0iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2Uva2V5Ym9hcmQvc3RhdGVfaGFuZGxlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vc3RhdGVfaGFuZGxlciIpLlN0YXRlSGFuZGxlcixlPWEoIi4uL3N0YXRlX2hhbmRsZXIiKS5tYXRjaENoYXJhY3Rlck9ubHksZj1mdW5jdGlvbihhLGIsYyl7cmV0dXJue3JlZ2V4OlsiKFswLTldKikiLGFdLGV4ZWM6YixwYXJhbXM6W3tuYW1lOiJ0aW1lcyIsbWF0Y2g6MSx0eXBlOiJudW1iZXIiLGRlZmF1bHRWYWx1ZToxfV0sdGhlbjpjfX0sZz17c3RhcnQ6W3trZXk6ImkiLHRoZW46Imluc2VydE1vZGUifSx7a2V5OiJkIix0aGVuOiJkZWxldGVNb2RlIn0se2tleToiYSIsZXhlYzoiZ290b3JpZ2h0Iix0aGVuOiJpbnNlcnRNb2RlIn0se2tleToic2hpZnQtaSIsZXhlYzoiZ290b2xpbmVzdGFydCIsdGhlbjoiaW5zZXJ0TW9kZSJ9LHtrZXk6InNoaWZ0LWEiLGV4ZWM6ImdvdG9saW5lZW5kIix0aGVuOiJpbnNlcnRNb2RlIn0se2tleToic2hpZnQtYyIsZXhlYzoicmVtb3ZldG9saW5lZW5kIix0aGVuOiJpbnNlcnRNb2RlIn0se2tleToic2hpZnQtciIsZXhlYzoib3ZlcndyaXRlIix0aGVuOiJyZXBsYWNlTW9kZSJ9LGYoIihrfHVwKSIsImdvbGluZXVwIiksZigiKGp8ZG93bikiLCJnb2xpbmVkb3duIiksZigiKGx8cmlnaHQpIiwiZ290b3JpZ2h0IiksZigiKGh8bGVmdCkiLCJnb3RvbGVmdCIpLHtrZXk6InNoaWZ0LWciLGV4ZWM6ImdvdG9lbmQifSxmKCJiIiwiZ290b3dvcmRsZWZ0IiksZigiZSIsImdvdG93b3JkcmlnaHQiKSxmKCJ4IiwiZGVsIiksZigic2hpZnQteCIsImJhY2tzcGFjZSIpLGYoInNoaWZ0LWQiLCJyZW1vdmV0b2xpbmVlbmQiKSxmKCJ1IiwidW5kbyIpLHtjb21tZW50OiJDYXRjaCBzb21lIGtleWJvYXJkIGlucHV0IHRvIHN0b3AgaXQgaGVyZSIsbWF0Y2g6ZX1dLGluc2VydE1vZGU6W3trZXk6ImVzYyIsdGhlbjoic3RhcnQifV0scmVwbGFjZU1vZGU6W3trZXk6ImVzYyIsZXhlYzoib3ZlcndyaXRlIix0aGVuOiJzdGFydCJ9XSxkZWxldGVNb2RlOlt7a2V5OiJkIixleGVjOiJyZW1vdmVsaW5lIix0aGVuOiJzdGFydCJ9XX07Yi5WaW09bmV3IGQoZyl9KSxkZWZpbmUoImFjZS9rZXlib2FyZC9zdGF0ZV9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGUoYSl7dGhpcy5rZXltYXBwaW5nPXRoaXMuJGJ1aWxkS2V5bWFwcGluZ1JlZ2V4KGEpfSJ1c2Ugc3RyaWN0Ijt2YXIgZD0hMTtlLnByb3RvdHlwZT17JGJ1aWxkS2V5bWFwcGluZ1JlZ2V4OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXRoaXMuJGJ1aWxkQmluZGluZ3NSZWdleChhW2JdKTtyZXR1cm4gYX0sJGJ1aWxkQmluZGluZ3NSZWdleDpmdW5jdGlvbihhKXthLmZvckVhY2goZnVuY3Rpb24oYSl7YS5rZXk/YS5rZXk9bmV3IFJlZ0V4cCgiXiIrYS5rZXkrIiQiKTpBcnJheS5pc0FycmF5KGEucmVnZXgpPygia2V5ImluIGF8fChhLmtleT1uZXcgUmVnRXhwKCJeIithLnJlZ2V4WzFdKyIkIikpLGEucmVnZXg9bmV3IFJlZ0V4cChhLnJlZ2V4LmpvaW4oIiIpKyIkIikpOmEucmVnZXgmJihhLnJlZ2V4PW5ldyBSZWdFeHAoYS5yZWdleCsiJCIpKX0pfSwkY29tcG9zZUJ1ZmZlcjpmdW5jdGlvbihhLGIsYyxkKXtpZihhLnN0YXRlPT1udWxsfHxhLmJ1ZmZlcj09bnVsbClhLnN0YXRlPSJzdGFydCIsYS5idWZmZXI9IiI7dmFyIGU9W107YiYxJiZlLnB1c2goImN0cmwiKSxiJjgmJmUucHVzaCgiY29tbWFuZCIpLGImMiYmZS5wdXNoKCJvcHRpb24iKSxiJjQmJmUucHVzaCgic2hpZnQiKSxjJiZlLnB1c2goYyk7dmFyIGY9ZS5qb2luKCItIiksZz1hLmJ1ZmZlcitmO2IhPTImJihhLmJ1ZmZlcj1nKTt2YXIgaD17YnVmZmVyVG9Vc2U6ZyxzeW1ib2xpY05hbWU6Zn07cmV0dXJuIGQmJihoLmtleUlkZW50aWZpZXI9ZC5rZXlJZGVudGlmaWVyKSxofSwkZmluZDpmdW5jdGlvbihhLGIsYyxlLGYsZyl7dmFyIGg9e307cmV0dXJuIHRoaXMua2V5bWFwcGluZ1thLnN0YXRlXS5zb21lKGZ1bmN0aW9uKGkpe3ZhciBqO2lmKGkua2V5JiYhaS5rZXkudGVzdChjKSlyZXR1cm4hMTtpZihpLnJlZ2V4JiYhKGo9aS5yZWdleC5leGVjKGIpKSlyZXR1cm4hMTtpZihpLm1hdGNoJiYhaS5tYXRjaChiLGUsZixjLGcpKXJldHVybiExO2lmKGkuZGlzYWxsb3dNYXRjaGVzKWZvcih2YXIgaz0wO2s8aS5kaXNhbGxvd01hdGNoZXMubGVuZ3RoO2srKylpZighIWpbaS5kaXNhbGxvd01hdGNoZXNba11dKXJldHVybiExO2lmKGkuZXhlYyl7aC5jb21tYW5kPWkuZXhlYztpZihpLnBhcmFtcyl7dmFyIGw7aC5hcmdzPXt9LGkucGFyYW1zLmZvckVhY2goZnVuY3Rpb24oYSl7YS5tYXRjaCE9bnVsbCYmaiE9bnVsbD9sPWpbYS5tYXRjaF18fGEuZGVmYXVsdFZhbHVlOmw9YS5kZWZhdWx0VmFsdWUsYS50eXBlPT09Im51bWJlciImJihsPXBhcnNlSW50KGwpKSxoLmFyZ3NbYS5uYW1lXT1sfSl9YS5idWZmZXI9IiJ9cmV0dXJuIGkudGhlbiYmKGEuc3RhdGU9aS50aGVuLGEuYnVmZmVyPSIiKSxoLmNvbW1hbmQ9PW51bGwmJihoLmNvbW1hbmQ9Im51bGwiKSxkJiZjb25zb2xlLmxvZygiS2V5Ym9hcmRTdGF0ZU1hcHBlciNmaW5kIixpKSwhMH0pLGguY29tbWFuZD9oOihhLmJ1ZmZlcj0iIiwhMSl9LGhhbmRsZUtleWJvYXJkOmZ1bmN0aW9uKGEsYixjLGUsZil7aWYoYj09MHx8YyE9IiImJmMhPVN0cmluZy5mcm9tQ2hhckNvZGUoMCkpe3ZhciBnPXRoaXMuJGNvbXBvc2VCdWZmZXIoYSxiLGMsZiksaD1nLmJ1ZmZlclRvVXNlLGk9Zy5zeW1ib2xpY05hbWUsaj1nLmtleUlkZW50aWZpZXI7cmV0dXJuIGc9dGhpcy4kZmluZChhLGgsaSxiLGMsaiksZCYmY29uc29sZS5sb2coIktleWJvYXJkU3RhdGVNYXBwZXIjbWF0Y2giLGgsaSxnKSxnfXJldHVybiBudWxsfX0sYi5tYXRjaENoYXJhY3Rlck9ubHk9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGI9PTA/ITA6Yj09NCYmYy5sZW5ndGg9PTE/ITA6ITF9LGIuU3RhdGVIYW5kbGVyPWV9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-clojure-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvY2xvanVyZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9jbG9qdXJlX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX3BhcmVuc19vdXRkZW50IiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9jbG9qdXJlX2hpZ2hsaWdodF9ydWxlcyIpLkNsb2p1cmVIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfcGFyZW5zX291dGRlbnQiKS5NYXRjaGluZ1BhcmVuc091dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBofTtkLmluaGVyaXRzKGosZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKikjLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiOyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnM7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCIpe3ZhciBnPWIubWF0Y2goL1tcKFxbXS8pO2cmJihkKz0iICAiKSxnPWIubWF0Y2goL1tcKV0vKSxnJiYoZD0iIil9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfX0uY2FsbChqLnByb3RvdHlwZSksYi5Nb2RlPWp9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9jbG9qdXJlX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIiogKjEgKjIgKjMgKmFnZW50KiAqYWxsb3ctdW5yZXNvbHZlZC12YXJzKiAqYXNzZXJ0KiAqY2xvanVyZS12ZXJzaW9uKiAqY29tbWFuZC1saW5lLWFyZ3MqICpjb21waWxlLWZpbGVzKiAqY29tcGlsZS1wYXRoKiAqZSAqZXJyKiAqZmlsZSogKmZsdXNoLW9uLW5ld2xpbmUqICppbiogKm1hY3JvLW1ldGEqICptYXRoLWNvbnRleHQqICpucyogKm91dCogKnByaW50LWR1cCogKnByaW50LWxlbmd0aCogKnByaW50LWxldmVsKiAqcHJpbnQtbWV0YSogKnByaW50LXJlYWRhYmx5KiAqcmVhZC1ldmFsKiAqc291cmNlLXBhdGgqICp1c2UtY29udGV4dC1jbGFzc2xvYWRlciogKndhcm4tb24tcmVmbGVjdGlvbiogKyAtIC0+IC0mZ3Q7IC0+PiAtJmd0OyZndDsgLi4gLyA8ICZsdDsgPD0gJmx0Oz0gPSA9PSA+ICZndDsgPj0gJmd0Oz0gYWNjZXNzb3IgYWNsb25lIGFkZC1jbGFzc3BhdGggYWRkLXdhdGNoIGFnZW50IGFnZW50LWVycm9ycyBhZ2V0IGFsZW5ndGggYWxpYXMgYWxsLW5zIGFsdGVyIGFsdGVyLW1ldGEhIGFsdGVyLXZhci1yb290IGFtYXAgYW5jZXN0b3JzIGFuZCBhcHBseSBhcmVkdWNlIGFycmF5LW1hcCBhc2V0IGFzZXQtYm9vbGVhbiBhc2V0LWJ5dGUgYXNldC1jaGFyIGFzZXQtZG91YmxlIGFzZXQtZmxvYXQgYXNldC1pbnQgYXNldC1sb25nIGFzZXQtc2hvcnQgYXNzZXJ0IGFzc29jIGFzc29jISBhc3NvYy1pbiBhc3NvY2lhdGl2ZT8gYXRvbSBhd2FpdCBhd2FpdC1mb3IgYXdhaXQxIGJhc2VzIGJlYW4gYmlnZGVjIGJpZ2ludCBiaW5kaW5nIGJpdC1hbmQgYml0LWFuZC1ub3QgYml0LWNsZWFyIGJpdC1mbGlwIGJpdC1ub3QgYml0LW9yIGJpdC1zZXQgYml0LXNoaWZ0LWxlZnQgYml0LXNoaWZ0LXJpZ2h0IGJpdC10ZXN0IGJpdC14b3IgYm9vbGVhbiBib29sZWFuLWFycmF5IGJvb2xlYW5zIGJvdW5kLWZuIGJvdW5kLWZuKiBidXRsYXN0IGJ5dGUgYnl0ZS1hcnJheSBieXRlcyBjYXN0IGNoYXIgY2hhci1hcnJheSBjaGFyLWVzY2FwZS1zdHJpbmcgY2hhci1uYW1lLXN0cmluZyBjaGFyPyBjaGFycyBjaHVuayBjaHVuay1hcHBlbmQgY2h1bmstYnVmZmVyIGNodW5rLWNvbnMgY2h1bmstZmlyc3QgY2h1bmstbmV4dCBjaHVuay1yZXN0IGNodW5rZWQtc2VxPyBjbGFzcyBjbGFzcz8gY2xlYXItYWdlbnQtZXJyb3JzIGNsb2p1cmUtdmVyc2lvbiBjb2xsPyBjb21tZW50IGNvbW11dGUgY29tcCBjb21wYXJhdG9yIGNvbXBhcmUgY29tcGFyZS1hbmQtc2V0ISBjb21waWxlIGNvbXBsZW1lbnQgY29uY2F0IGNvbmQgY29uZHAgY29uaiBjb25qISBjb25zIGNvbnN0YW50bHkgY29uc3RydWN0LXByb3h5IGNvbnRhaW5zPyBjb3VudCBjb3VudGVkPyBjcmVhdGUtbnMgY3JlYXRlLXN0cnVjdCBjeWNsZSBkZWMgZGVjaW1hbD8gZGVjbGFyZSBkZWZpbmxpbmUgZGVmbWFjcm8gZGVmbWV0aG9kIGRlZm11bHRpIGRlZm4gZGVmbi0gZGVmb25jZSBkZWZzdHJ1Y3QgZGVsYXkgZGVsYXk/IGRlbGl2ZXIgZGVyZWYgZGVyaXZlIGRlc2NlbmRhbnRzIGRlc3RydWN0dXJlIGRpc2ogZGlzaiEgZGlzc29jIGRpc3NvYyEgZGlzdGluY3QgZGlzdGluY3Q/IGRvYWxsIGRvYyBkb3J1biBkb3NlcSBkb3N5bmMgZG90aW1lcyBkb3RvIGRvdWJsZSBkb3VibGUtYXJyYXkgZG91YmxlcyBkcm9wIGRyb3AtbGFzdCBkcm9wLXdoaWxlIGVtcHR5IGVtcHR5PyBlbnN1cmUgZW51bWVyYXRpb24tc2VxIGV2YWwgZXZlbj8gZXZlcnk/IGZhbHNlPyBmZmlyc3QgZmlsZS1zZXEgZmlsdGVyIGZpbmQgZmluZC1kb2MgZmluZC1ucyBmaW5kLXZhciBmaXJzdCBmbG9hdCBmbG9hdC1hcnJheSBmbG9hdD8gZmxvYXRzIGZsdXNoIGZuIGZuPyBmbmV4dCBmb3IgZm9yY2UgZm9ybWF0IGZ1dHVyZSBmdXR1cmUtY2FsbCBmdXR1cmUtY2FuY2VsIGZ1dHVyZS1jYW5jZWxsZWQ/IGZ1dHVyZS1kb25lPyBmdXR1cmU/IGdlbi1jbGFzcyBnZW4taW50ZXJmYWNlIGdlbnN5bSBnZXQgZ2V0LWluIGdldC1tZXRob2QgZ2V0LXByb3h5LWNsYXNzIGdldC10aHJlYWQtYmluZGluZ3MgZ2V0LXZhbGlkYXRvciBoYXNoIGhhc2gtbWFwIGhhc2gtc2V0IGlkZW50aWNhbD8gaWRlbnRpdHkgaWYtbGV0IGlmLW5vdCBpZm4/IGltcG9ydCBpbi1ucyBpbmMgaW5pdC1wcm94eSBpbnN0YW5jZT8gaW50IGludC1hcnJheSBpbnRlZ2VyPyBpbnRlcmxlYXZlIGludGVybiBpbnRlcnBvc2UgaW50byBpbnRvLWFycmF5IGludHMgaW8hIGlzYT8gaXRlcmF0ZSBpdGVyYXRvci1zZXEganV4dCBrZXkga2V5cyBrZXl3b3JkIGtleXdvcmQ/IGxhc3QgbGF6eS1jYXQgbGF6eS1zZXEgbGV0IGxldGZuIGxpbmUtc2VxIGxpc3QgbGlzdCogbGlzdD8gbG9hZCBsb2FkLWZpbGUgbG9hZC1yZWFkZXIgbG9hZC1zdHJpbmcgbG9hZGVkLWxpYnMgbG9ja2luZyBsb25nIGxvbmctYXJyYXkgbG9uZ3MgbG9vcCBtYWNyb2V4cGFuZCBtYWNyb2V4cGFuZC0xIG1ha2UtYXJyYXkgbWFrZS1oaWVyYXJjaHkgbWFwIG1hcD8gbWFwY2F0IG1heCBtYXgta2V5IG1lbWZuIG1lbW9pemUgbWVyZ2UgbWVyZ2Utd2l0aCBtZXRhIG1ldGhvZC1zaWcgbWV0aG9kcyBtaW4gbWluLWtleSBtb2QgbmFtZSBuYW1lc3BhY2UgbmVnPyBuZXdsaW5lIG5leHQgbmZpcnN0IG5pbD8gbm5leHQgbm90IG5vdC1hbnk/IG5vdC1lbXB0eSBub3QtZXZlcnk/IG5vdD0gbnMgbnMtYWxpYXNlcyBucy1pbXBvcnRzIG5zLWludGVybnMgbnMtbWFwIG5zLW5hbWUgbnMtcHVibGljcyBucy1yZWZlcnMgbnMtcmVzb2x2ZSBucy11bmFsaWFzIG5zLXVubWFwIG50aCBudGhuZXh0IG51bSBudW1iZXI/IG9kZD8gb3IgcGFyZW50cyBwYXJ0aWFsIHBhcnRpdGlvbiBwY2FsbHMgcGVlayBwZXJzaXN0ZW50ISBwbWFwIHBvcCBwb3AhIHBvcC10aHJlYWQtYmluZGluZ3MgcG9zPyBwciBwci1zdHIgcHJlZmVyLW1ldGhvZCBwcmVmZXJzIHByaW1pdGl2ZXMtY2xhc3NuYW1lcyBwcmludCBwcmludC1jdG9yIHByaW50LWRvYyBwcmludC1kdXAgcHJpbnQtbWV0aG9kIHByaW50LW5hbWVzcGFjZS1kb2MgcHJpbnQtc2ltcGxlIHByaW50LXNwZWNpYWwtZG9jIHByaW50LXN0ciBwcmludGYgcHJpbnRsbiBwcmludGxuLXN0ciBwcm4gcHJuLXN0ciBwcm9taXNlIHByb3h5IHByb3h5LWNhbGwtd2l0aC1zdXBlciBwcm94eS1tYXBwaW5ncyBwcm94eS1uYW1lIHByb3h5LXN1cGVyIHB1c2gtdGhyZWFkLWJpbmRpbmdzIHB2YWx1ZXMgcXVvdCByYW5kIHJhbmQtaW50IHJhbmdlIHJhdGlvPyByYXRpb25hbD8gcmF0aW9uYWxpemUgcmUtZmluZCByZS1ncm91cHMgcmUtbWF0Y2hlciByZS1tYXRjaGVzIHJlLXBhdHRlcm4gcmUtc2VxIHJlYWQgcmVhZC1saW5lIHJlYWQtc3RyaW5nIHJlZHVjZSByZWYgcmVmLWhpc3RvcnktY291bnQgcmVmLW1heC1oaXN0b3J5IHJlZi1taW4taGlzdG9yeSByZWYtc2V0IHJlZmVyIHJlZmVyLWNsb2p1cmUgcmVsZWFzZS1wZW5kaW5nLXNlbmRzIHJlbSByZW1vdmUgcmVtb3ZlLW1ldGhvZCByZW1vdmUtbnMgcmVtb3ZlLXdhdGNoIHJlcGVhdCByZXBlYXRlZGx5IHJlcGxhY2UgcmVwbGljYXRlIHJlcXVpcmUgcmVzZXQhIHJlc2V0LW1ldGEhIHJlc29sdmUgcmVzdCByZXN1bHRzZXQtc2VxIHJldmVyc2UgcmV2ZXJzaWJsZT8gcnNlcSByc3Vic2VxIHNlY29uZCBzZWxlY3Qta2V5cyBzZW5kIHNlbmQtb2ZmIHNlcSBzZXE/IHNlcXVlIHNlcXVlbmNlIHNlcXVlbnRpYWw/IHNldCBzZXQtdmFsaWRhdG9yISBzZXQ/IHNob3J0IHNob3J0LWFycmF5IHNob3J0cyBzaHV0ZG93bi1hZ2VudHMgc2x1cnAgc29tZSBzb3J0IHNvcnQtYnkgc29ydGVkLW1hcCBzb3J0ZWQtbWFwLWJ5IHNvcnRlZC1zZXQgc29ydGVkLXNldC1ieSBzb3J0ZWQ/IHNwZWNpYWwtZm9ybS1hbmNob3Igc3BlY2lhbC1zeW1ib2w/IHNwbGl0LWF0IHNwbGl0LXdpdGggc3RyIHN0cmVhbT8gc3RyaW5nPyBzdHJ1Y3Qgc3RydWN0LW1hcCBzdWJzIHN1YnNlcSBzdWJ2ZWMgc3VwZXJzIHN3YXAhIHN5bWJvbCBzeW1ib2w/IHN5bmMgc3ludGF4LXN5bWJvbC1hbmNob3IgdGFrZSB0YWtlLWxhc3QgdGFrZS1udGggdGFrZS13aGlsZSB0ZXN0IHRoZS1ucyB0aW1lIHRvLWFycmF5IHRvLWFycmF5LTJkIHRyYW1wb2xpbmUgdHJhbnNpZW50IHRyZWUtc2VxIHRydWU/IHR5cGUgdW5jaGVja2VkLWFkZCB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1kaXZpZGUgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtbXVsdGlwbHkgdW5jaGVja2VkLW5lZ2F0ZSB1bmNoZWNrZWQtcmVtYWluZGVyIHVuY2hlY2tlZC1zdWJ0cmFjdCB1bmRlcml2ZSB1bnF1b3RlIHVucXVvdGUtc3BsaWNpbmcgdXBkYXRlLWluIHVwZGF0ZS1wcm94eSB1c2UgdmFsIHZhbHMgdmFyLWdldCB2YXItc2V0IHZhcj8gdmFyeS1tZXRhIHZlYyB2ZWN0b3IgdmVjdG9yPyB3aGVuIHdoZW4tZmlyc3Qgd2hlbi1sZXQgd2hlbi1ub3Qgd2hpbGUgd2l0aC1iaW5kaW5ncyB3aXRoLWJpbmRpbmdzKiB3aXRoLWluLXN0ciB3aXRoLWxvYWRpbmctY29udGV4dCB3aXRoLWxvY2FsLXZhcnMgd2l0aC1tZXRhIHdpdGgtb3BlbiB3aXRoLW91dC1zdHIgd2l0aC1wcmVjaXNpb24geG1sLXNlcSB6ZXJvPyB6aXBtYXAgIi5zcGxpdCgiICIpKSxiPWUuYXJyYXlUb01hcCgiZGVmIGRvIGZuIGlmIGxldCBsb29wIG1vbml0b3ItZW50ZXIgbW9uaXRvci1leGl0IG5ldyBxdW90ZSByZWN1ciBzZXQhIHRocm93IHRyeSB2YXIiLnNwbGl0KCIgIikpLGM9ZS5hcnJheVRvTWFwKCJ0cnVlIGZhbHNlIG5pbCIuc3BsaXQoIiAiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiI7LiokIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXj1iZWdpbiQiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJbXFwofFxcKV0ifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJbXFwnXFwoXSJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IltcXFt8XFxdXSJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IltcXHt8XFx9fFxcI1xce3xcXCNcXH1dIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiW1xcJl0ifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJbXFwjXFxeXFx7XSJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IltcXCVdIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiW0BdIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UiLHJlZ2V4OiJbIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fD18IT18PD18Pj18PD58PHw+fCF8JiZdIn0se3Rva2VuOmZ1bmN0aW9uKGQpe3JldHVybiBiLmhhc093blByb3BlcnR5KGQpPyJrZXl3b3JkIjpjLmhhc093blByb3BlcnR5KGQpPyJjb25zdGFudC5sYW5ndWFnZSI6YS5oYXNPd25Qcm9wZXJ0eShkKT8ic3VwcG9ydC5mdW5jdGlvbiI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbOl0oPzpbYS16QS1aXXxkKSsifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OicvIyIoPzoufChcXCIpfFteIiJcbl0pKiIvZyd9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJePWVuZCQiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19fTtkLmluaGVyaXRzKGcsZiksYi5DbG9qdXJlSGlnaGxpZ2h0UnVsZXM9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX3BhcmVuc19vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlwpLy50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcKSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KSkuY2FsbChlLnByb3RvdHlwZSksYi5NYXRjaGluZ1BhcmVuc091dGRlbnQ9ZX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-clojure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jbG9qdXJlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2Nsb2p1cmVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfcGFyZW5zX291dGRlbnQiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2Nsb2p1cmVfaGlnaGxpZ2h0X3J1bGVzIikuQ2xvanVyZUhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19wYXJlbnNfb3V0ZGVudCIpLk1hdGNoaW5nUGFyZW5zT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGh9O2QuaW5oZXJpdHMoaixlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKSMvO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCI7Iil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucztpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Iil7dmFyIGc9Yi5tYXRjaCgvW1woXFtdLyk7ZyYmKGQrPSIgICIpLGc9Yi5tYXRjaCgvW1wpXS8pLGcmJihkPSIiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9fS5jYWxsKGoucHJvdG90eXBlKSxiLk1vZGU9an0pLGRlZmluZSgiYWNlL21vZGUvY2xvanVyZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCIqICoxICoyICozICphZ2VudCogKmFsbG93LXVucmVzb2x2ZWQtdmFycyogKmFzc2VydCogKmNsb2p1cmUtdmVyc2lvbiogKmNvbW1hbmQtbGluZS1hcmdzKiAqY29tcGlsZS1maWxlcyogKmNvbXBpbGUtcGF0aCogKmUgKmVyciogKmZpbGUqICpmbHVzaC1vbi1uZXdsaW5lKiAqaW4qICptYWNyby1tZXRhKiAqbWF0aC1jb250ZXh0KiAqbnMqICpvdXQqICpwcmludC1kdXAqICpwcmludC1sZW5ndGgqICpwcmludC1sZXZlbCogKnByaW50LW1ldGEqICpwcmludC1yZWFkYWJseSogKnJlYWQtZXZhbCogKnNvdXJjZS1wYXRoKiAqdXNlLWNvbnRleHQtY2xhc3Nsb2FkZXIqICp3YXJuLW9uLXJlZmxlY3Rpb24qICsgLSAtPiAtJmd0OyAtPj4gLSZndDsmZ3Q7IC4uIC8gPCAmbHQ7IDw9ICZsdDs9ID0gPT0gPiAmZ3Q7ID49ICZndDs9IGFjY2Vzc29yIGFjbG9uZSBhZGQtY2xhc3NwYXRoIGFkZC13YXRjaCBhZ2VudCBhZ2VudC1lcnJvcnMgYWdldCBhbGVuZ3RoIGFsaWFzIGFsbC1ucyBhbHRlciBhbHRlci1tZXRhISBhbHRlci12YXItcm9vdCBhbWFwIGFuY2VzdG9ycyBhbmQgYXBwbHkgYXJlZHVjZSBhcnJheS1tYXAgYXNldCBhc2V0LWJvb2xlYW4gYXNldC1ieXRlIGFzZXQtY2hhciBhc2V0LWRvdWJsZSBhc2V0LWZsb2F0IGFzZXQtaW50IGFzZXQtbG9uZyBhc2V0LXNob3J0IGFzc2VydCBhc3NvYyBhc3NvYyEgYXNzb2MtaW4gYXNzb2NpYXRpdmU/IGF0b20gYXdhaXQgYXdhaXQtZm9yIGF3YWl0MSBiYXNlcyBiZWFuIGJpZ2RlYyBiaWdpbnQgYmluZGluZyBiaXQtYW5kIGJpdC1hbmQtbm90IGJpdC1jbGVhciBiaXQtZmxpcCBiaXQtbm90IGJpdC1vciBiaXQtc2V0IGJpdC1zaGlmdC1sZWZ0IGJpdC1zaGlmdC1yaWdodCBiaXQtdGVzdCBiaXQteG9yIGJvb2xlYW4gYm9vbGVhbi1hcnJheSBib29sZWFucyBib3VuZC1mbiBib3VuZC1mbiogYnV0bGFzdCBieXRlIGJ5dGUtYXJyYXkgYnl0ZXMgY2FzdCBjaGFyIGNoYXItYXJyYXkgY2hhci1lc2NhcGUtc3RyaW5nIGNoYXItbmFtZS1zdHJpbmcgY2hhcj8gY2hhcnMgY2h1bmsgY2h1bmstYXBwZW5kIGNodW5rLWJ1ZmZlciBjaHVuay1jb25zIGNodW5rLWZpcnN0IGNodW5rLW5leHQgY2h1bmstcmVzdCBjaHVua2VkLXNlcT8gY2xhc3MgY2xhc3M/IGNsZWFyLWFnZW50LWVycm9ycyBjbG9qdXJlLXZlcnNpb24gY29sbD8gY29tbWVudCBjb21tdXRlIGNvbXAgY29tcGFyYXRvciBjb21wYXJlIGNvbXBhcmUtYW5kLXNldCEgY29tcGlsZSBjb21wbGVtZW50IGNvbmNhdCBjb25kIGNvbmRwIGNvbmogY29uaiEgY29ucyBjb25zdGFudGx5IGNvbnN0cnVjdC1wcm94eSBjb250YWlucz8gY291bnQgY291bnRlZD8gY3JlYXRlLW5zIGNyZWF0ZS1zdHJ1Y3QgY3ljbGUgZGVjIGRlY2ltYWw/IGRlY2xhcmUgZGVmaW5saW5lIGRlZm1hY3JvIGRlZm1ldGhvZCBkZWZtdWx0aSBkZWZuIGRlZm4tIGRlZm9uY2UgZGVmc3RydWN0IGRlbGF5IGRlbGF5PyBkZWxpdmVyIGRlcmVmIGRlcml2ZSBkZXNjZW5kYW50cyBkZXN0cnVjdHVyZSBkaXNqIGRpc2ohIGRpc3NvYyBkaXNzb2MhIGRpc3RpbmN0IGRpc3RpbmN0PyBkb2FsbCBkb2MgZG9ydW4gZG9zZXEgZG9zeW5jIGRvdGltZXMgZG90byBkb3VibGUgZG91YmxlLWFycmF5IGRvdWJsZXMgZHJvcCBkcm9wLWxhc3QgZHJvcC13aGlsZSBlbXB0eSBlbXB0eT8gZW5zdXJlIGVudW1lcmF0aW9uLXNlcSBldmFsIGV2ZW4/IGV2ZXJ5PyBmYWxzZT8gZmZpcnN0IGZpbGUtc2VxIGZpbHRlciBmaW5kIGZpbmQtZG9jIGZpbmQtbnMgZmluZC12YXIgZmlyc3QgZmxvYXQgZmxvYXQtYXJyYXkgZmxvYXQ/IGZsb2F0cyBmbHVzaCBmbiBmbj8gZm5leHQgZm9yIGZvcmNlIGZvcm1hdCBmdXR1cmUgZnV0dXJlLWNhbGwgZnV0dXJlLWNhbmNlbCBmdXR1cmUtY2FuY2VsbGVkPyBmdXR1cmUtZG9uZT8gZnV0dXJlPyBnZW4tY2xhc3MgZ2VuLWludGVyZmFjZSBnZW5zeW0gZ2V0IGdldC1pbiBnZXQtbWV0aG9kIGdldC1wcm94eS1jbGFzcyBnZXQtdGhyZWFkLWJpbmRpbmdzIGdldC12YWxpZGF0b3IgaGFzaCBoYXNoLW1hcCBoYXNoLXNldCBpZGVudGljYWw/IGlkZW50aXR5IGlmLWxldCBpZi1ub3QgaWZuPyBpbXBvcnQgaW4tbnMgaW5jIGluaXQtcHJveHkgaW5zdGFuY2U/IGludCBpbnQtYXJyYXkgaW50ZWdlcj8gaW50ZXJsZWF2ZSBpbnRlcm4gaW50ZXJwb3NlIGludG8gaW50by1hcnJheSBpbnRzIGlvISBpc2E/IGl0ZXJhdGUgaXRlcmF0b3Itc2VxIGp1eHQga2V5IGtleXMga2V5d29yZCBrZXl3b3JkPyBsYXN0IGxhenktY2F0IGxhenktc2VxIGxldCBsZXRmbiBsaW5lLXNlcSBsaXN0IGxpc3QqIGxpc3Q/IGxvYWQgbG9hZC1maWxlIGxvYWQtcmVhZGVyIGxvYWQtc3RyaW5nIGxvYWRlZC1saWJzIGxvY2tpbmcgbG9uZyBsb25nLWFycmF5IGxvbmdzIGxvb3AgbWFjcm9leHBhbmQgbWFjcm9leHBhbmQtMSBtYWtlLWFycmF5IG1ha2UtaGllcmFyY2h5IG1hcCBtYXA/IG1hcGNhdCBtYXggbWF4LWtleSBtZW1mbiBtZW1vaXplIG1lcmdlIG1lcmdlLXdpdGggbWV0YSBtZXRob2Qtc2lnIG1ldGhvZHMgbWluIG1pbi1rZXkgbW9kIG5hbWUgbmFtZXNwYWNlIG5lZz8gbmV3bGluZSBuZXh0IG5maXJzdCBuaWw/IG5uZXh0IG5vdCBub3QtYW55PyBub3QtZW1wdHkgbm90LWV2ZXJ5PyBub3Q9IG5zIG5zLWFsaWFzZXMgbnMtaW1wb3J0cyBucy1pbnRlcm5zIG5zLW1hcCBucy1uYW1lIG5zLXB1YmxpY3MgbnMtcmVmZXJzIG5zLXJlc29sdmUgbnMtdW5hbGlhcyBucy11bm1hcCBudGggbnRobmV4dCBudW0gbnVtYmVyPyBvZGQ/IG9yIHBhcmVudHMgcGFydGlhbCBwYXJ0aXRpb24gcGNhbGxzIHBlZWsgcGVyc2lzdGVudCEgcG1hcCBwb3AgcG9wISBwb3AtdGhyZWFkLWJpbmRpbmdzIHBvcz8gcHIgcHItc3RyIHByZWZlci1tZXRob2QgcHJlZmVycyBwcmltaXRpdmVzLWNsYXNzbmFtZXMgcHJpbnQgcHJpbnQtY3RvciBwcmludC1kb2MgcHJpbnQtZHVwIHByaW50LW1ldGhvZCBwcmludC1uYW1lc3BhY2UtZG9jIHByaW50LXNpbXBsZSBwcmludC1zcGVjaWFsLWRvYyBwcmludC1zdHIgcHJpbnRmIHByaW50bG4gcHJpbnRsbi1zdHIgcHJuIHBybi1zdHIgcHJvbWlzZSBwcm94eSBwcm94eS1jYWxsLXdpdGgtc3VwZXIgcHJveHktbWFwcGluZ3MgcHJveHktbmFtZSBwcm94eS1zdXBlciBwdXNoLXRocmVhZC1iaW5kaW5ncyBwdmFsdWVzIHF1b3QgcmFuZCByYW5kLWludCByYW5nZSByYXRpbz8gcmF0aW9uYWw/IHJhdGlvbmFsaXplIHJlLWZpbmQgcmUtZ3JvdXBzIHJlLW1hdGNoZXIgcmUtbWF0Y2hlcyByZS1wYXR0ZXJuIHJlLXNlcSByZWFkIHJlYWQtbGluZSByZWFkLXN0cmluZyByZWR1Y2UgcmVmIHJlZi1oaXN0b3J5LWNvdW50IHJlZi1tYXgtaGlzdG9yeSByZWYtbWluLWhpc3RvcnkgcmVmLXNldCByZWZlciByZWZlci1jbG9qdXJlIHJlbGVhc2UtcGVuZGluZy1zZW5kcyByZW0gcmVtb3ZlIHJlbW92ZS1tZXRob2QgcmVtb3ZlLW5zIHJlbW92ZS13YXRjaCByZXBlYXQgcmVwZWF0ZWRseSByZXBsYWNlIHJlcGxpY2F0ZSByZXF1aXJlIHJlc2V0ISByZXNldC1tZXRhISByZXNvbHZlIHJlc3QgcmVzdWx0c2V0LXNlcSByZXZlcnNlIHJldmVyc2libGU/IHJzZXEgcnN1YnNlcSBzZWNvbmQgc2VsZWN0LWtleXMgc2VuZCBzZW5kLW9mZiBzZXEgc2VxPyBzZXF1ZSBzZXF1ZW5jZSBzZXF1ZW50aWFsPyBzZXQgc2V0LXZhbGlkYXRvciEgc2V0PyBzaG9ydCBzaG9ydC1hcnJheSBzaG9ydHMgc2h1dGRvd24tYWdlbnRzIHNsdXJwIHNvbWUgc29ydCBzb3J0LWJ5IHNvcnRlZC1tYXAgc29ydGVkLW1hcC1ieSBzb3J0ZWQtc2V0IHNvcnRlZC1zZXQtYnkgc29ydGVkPyBzcGVjaWFsLWZvcm0tYW5jaG9yIHNwZWNpYWwtc3ltYm9sPyBzcGxpdC1hdCBzcGxpdC13aXRoIHN0ciBzdHJlYW0/IHN0cmluZz8gc3RydWN0IHN0cnVjdC1tYXAgc3VicyBzdWJzZXEgc3VidmVjIHN1cGVycyBzd2FwISBzeW1ib2wgc3ltYm9sPyBzeW5jIHN5bnRheC1zeW1ib2wtYW5jaG9yIHRha2UgdGFrZS1sYXN0IHRha2UtbnRoIHRha2Utd2hpbGUgdGVzdCB0aGUtbnMgdGltZSB0by1hcnJheSB0by1hcnJheS0yZCB0cmFtcG9saW5lIHRyYW5zaWVudCB0cmVlLXNlcSB0cnVlPyB0eXBlIHVuY2hlY2tlZC1hZGQgdW5jaGVja2VkLWRlYyB1bmNoZWNrZWQtZGl2aWRlIHVuY2hlY2tlZC1pbmMgdW5jaGVja2VkLW11bHRpcGx5IHVuY2hlY2tlZC1uZWdhdGUgdW5jaGVja2VkLXJlbWFpbmRlciB1bmNoZWNrZWQtc3VidHJhY3QgdW5kZXJpdmUgdW5xdW90ZSB1bnF1b3RlLXNwbGljaW5nIHVwZGF0ZS1pbiB1cGRhdGUtcHJveHkgdXNlIHZhbCB2YWxzIHZhci1nZXQgdmFyLXNldCB2YXI/IHZhcnktbWV0YSB2ZWMgdmVjdG9yIHZlY3Rvcj8gd2hlbiB3aGVuLWZpcnN0IHdoZW4tbGV0IHdoZW4tbm90IHdoaWxlIHdpdGgtYmluZGluZ3Mgd2l0aC1iaW5kaW5ncyogd2l0aC1pbi1zdHIgd2l0aC1sb2FkaW5nLWNvbnRleHQgd2l0aC1sb2NhbC12YXJzIHdpdGgtbWV0YSB3aXRoLW9wZW4gd2l0aC1vdXQtc3RyIHdpdGgtcHJlY2lzaW9uIHhtbC1zZXEgemVybz8gemlwbWFwICIuc3BsaXQoIiAiKSksYj1lLmFycmF5VG9NYXAoImRlZiBkbyBmbiBpZiBsZXQgbG9vcCBtb25pdG9yLWVudGVyIG1vbml0b3ItZXhpdCBuZXcgcXVvdGUgcmVjdXIgc2V0ISB0aHJvdyB0cnkgdmFyIi5zcGxpdCgiICIpKSxjPWUuYXJyYXlUb01hcCgidHJ1ZSBmYWxzZSBuaWwiLnNwbGl0KCIgIikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiOy4qJCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6Il49YmVnaW4kIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiW1xcKHxcXCldIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiW1xcJ1xcKF0ifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJbXFxbfFxcXV0ifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJbXFx7fFxcfXxcXCNcXHt8XFwjXFx9XSJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IltcXCZdIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiW1xcI1xcXlxce10ifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJbXFwlXSJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IltAXSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlIixyZWdleDoiWyF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfHw9fCE9fDw9fD49fDw+fDx8PnwhfCYmXSJ9LHt0b2tlbjpmdW5jdGlvbihkKXtyZXR1cm4gYi5oYXNPd25Qcm9wZXJ0eShkKT8ia2V5d29yZCI6Yy5oYXNPd25Qcm9wZXJ0eShkKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmEuaGFzT3duUHJvcGVydHkoZCk/InN1cHBvcnQuZnVuY3Rpb24iOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWzpdKD86W2EtekEtWl18ZCkrIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDonLyMiKD86LnwoXFwiKXxbXiIiXG5dKSoiL2cnfV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXj1lbmQkIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfX07ZC5pbmhlcml0cyhnLGYpLGIuQ2xvanVyZUhpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX3BhcmVuc19vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlwpLy50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcKSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KSkuY2FsbChlLnByb3RvdHlwZSksYi5NYXRjaGluZ1BhcmVuc091dGRlbnQ9ZX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-coffee-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2NvZmZlZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvZm9sZGluZy9weXRob25pYyIsImFjZS9yYW5nZSIsImFjZS9tb2RlL3RleHQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbGliL29vcCJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBsKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBkKChuZXcgZSkuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgZix0aGlzLmZvbGRpbmdSdWxlcz1uZXcgZygiPXw9PnwtPnxcXHMqY2xhc3MgW14jXSoiKX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGU9YSgiLi9jb2ZmZWVfaGlnaGxpZ2h0X3J1bGVzIikuQ29mZmVlSGlnaGxpZ2h0UnVsZXMsZj1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxnPWEoIi4vZm9sZGluZy9weXRob25pYyIpLkZvbGRNb2RlLGg9YSgiLi4vcmFuZ2UiKS5SYW5nZSxpPWEoIi4vdGV4dCIpLk1vZGUsaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4uL2xpYi9vb3AiKTtrLmluaGVyaXRzKGwsaSksZnVuY3Rpb24oKXt2YXIgYT0vKD86Wyh7Wz06XXxbLT1dPnxcYig/OmVsc2V8c3dpdGNofHRyeXxjYXRjaCg/OlxzKlskQS1aYS16X1x4N2YtXHVmZmZmXVskXHdceDdmLVx1ZmZmZl0qKT98ZmluYWxseSkpXHMqJC8sYj0vXihccyopIy8sYz0vXlxzKiMjIyg/ISMpLyxkPS9eXHMqLzt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT10aGlzLiRnZXRJbmRlbnQoYyksZj10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhjLGIpLnRva2VucztyZXR1cm4oIWYubGVuZ3RofHxmW2YubGVuZ3RoLTFdLnR5cGUhPT0iY29tbWVudCIpJiZiPT09InN0YXJ0IiYmYS50ZXN0KGMpJiYoZSs9ZCksZX0sdGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxlLGYsZyl7Y29uc29sZS5sb2coInRvZ2dsZSIpO3ZhciBpPW5ldyBoKDAsMCwwLDApO2Zvcih2YXIgaj1mO2o8PWc7KytqKXt2YXIgaz1lLmdldExpbmUoaik7aWYoYy50ZXN0KGspKWNvbnRpbnVlO2IudGVzdChrKT9rPWsucmVwbGFjZShiLCIkMSIpOms9ay5yZXBsYWNlKGQsIiQmIyIpLGkuZW5kLnJvdz1pLnN0YXJ0LnJvdz1qLGkuZW5kLmNvbHVtbj1rLmxlbmd0aCsxLGUucmVwbGFjZShpLGspfX0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1jb2ZmZWUuanMiLCJhY2UvbW9kZS9jb2ZmZWVfd29ya2VyIiwiV29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImVycm9yIixmdW5jdGlvbihiKXthLnNldEFubm90YXRpb25zKFtiLmRhdGFdKX0pLGIub24oIm9rIixmdW5jdGlvbihiKXthLmNsZWFyQW5ub3RhdGlvbnMoKX0pLGJ9fS5jYWxsKGwucHJvdG90eXBlKSxiLk1vZGU9bH0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2NvZmZlZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGcoKXt2YXIgYT0iWyRBLVphLXpfXFx4N2YtXFx1ZmZmZl1bJFxcd1xceDdmLVxcdWZmZmZdKiIsYj17dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn0sYz1kLmFycmF5VG9NYXAoInRoaXN8dGhyb3d8dGhlbnx0cnl8dHlwZW9mfHN1cGVyfHN3aXRjaHxyZXR1cm58YnJlYWt8YnkpfGNvbnRpbnVlfGNhdGNofGNsYXNzfGlufGluc3RhbmNlb2Z8aXN8aXNudHxpZnxlbHNlfGV4dGVuZHN8Zm9yfGZvcm93bnxmaW5hbGx5fGZ1bmN0aW9ufHdoaWxlfHdoZW58bmV3fG5vfG5vdHxkZWxldGV8ZGVidWdnZXJ8ZG98bG9vcHxvZnxvZmZ8b3J8b258dW5sZXNzfHVudGlsfGFuZHx5ZXMiLnNwbGl0KCJ8IikpLGU9ZC5hcnJheVRvTWFwKCJ0cnVlfGZhbHNlfG51bGx8dW5kZWZpbmVkIi5zcGxpdCgifCIpKSxmPWQuYXJyYXlUb01hcCgiY2FzZXxjb25zdHxkZWZhdWx0fGZ1bmN0aW9ufHZhcnx2b2lkfHdpdGh8ZW51bXxleHBvcnR8aW1wbGVtZW50c3xpbnRlcmZhY2V8bGV0fHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHN0YXRpY3x5aWVsZHxfX2hhc1Byb3B8ZXh0ZW5kc3xzbGljZXxiaW5kfGluZGV4T2YiLnNwbGl0KCJ8IikpLGc9ZC5hcnJheVRvTWFwKCJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258TnVtYmVyfE9iamVjdHxSZWdFeHB8UmVmZXJlbmNlRXJyb3J8UmFuZ2VFcnJvcnxTdHJpbmd8U3ludGF4RXJyb3J8RXJyb3J8RXZhbEVycm9yfFR5cGVFcnJvcnxVUklFcnJvciIuc3BsaXQoInwiKSksaD1kLmFycmF5VG9NYXAoIk1hdGh8SlNPTnxpc05hTnxpc0Zpbml0ZXxwYXJzZUludHxwYXJzZUZsb2F0fGVuY29kZVVSSXxlbmNvZGVVUklDb21wb25lbnR8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxSYW5nZUVycm9yfFN0cmluZ3xTeW50YXhFcnJvcnxFcnJvcnxFdmFsRXJyb3J8VHlwZUVycm9yfFVSSUVycm9yIi5zcGxpdCgifCIpKTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiaWRlbnRpZmllciIscmVnZXg6Iig/Oig/OlxcLnw6OilcXHMqKSIrYX0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IkAoPzoiK2ErIik/In0se3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBjLmhhc093blByb3BlcnR5KGEpPyJrZXl3b3JkIjplLmhhc093blByb3BlcnR5KGEpPyJjb25zdGFudC5sYW5ndWFnZSI6Zi5oYXNPd25Qcm9wZXJ0eShhKT8iaW52YWxpZC5pbGxlZ2FsIjpnLmhhc093blByb3BlcnR5KGEpPyJsYW5ndWFnZS5zdXBwb3J0LmNsYXNzIjpoLmhhc093blByb3BlcnR5KGEpPyJsYW5ndWFnZS5zdXBwb3J0LmZ1bmN0aW9uIjoiaWRlbnRpZmllciJ9LHJlZ2V4OmF9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6Iig/OjB4W1xcZGEtZkEtRl0rfCg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzpbZUVdWystXT9cXGQrKT8pIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiInJyciLG5leHQ6InFkb2MifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6JyIiIicsbmV4dDoicXFkb2MifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IiciLG5leHQ6InFzdHJpbmcifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6JyInLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJgIixuZXh0OiJqcyJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4IixtZXJnZTohMCxyZWdleDoiLy8vIixuZXh0OiJoZXJlZ2V4In0se3Rva2VuOiJzdHJpbmcucmVnZXgiLHJlZ2V4OiIvKD8hXFxzKVteWy9cXG5cXFxcXSooPzogKD86XFxcXC58XFxbW15cXF1cXG5cXFxcXSooPzpcXFxcLlteXFxdXFxuXFxcXF0qKSpcXF0pW15bL1xcblxcXFxdKikqL1tpbWd5XXswLDR9KD8hXFx3KSJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IiMjIyg/ISMpIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJjb21tZW50IixyZWdleDoiIy4qIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcLiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6Iig/OltcXC09XT58Wy0rKi8lPD4mfF4hPz1dPXw+Pj49P3xcXC1cXC18XFwrXFwrfDo6fCYmPXxcXHxcXHw9fDw8PXw+Pj18XFw/XFwufFxcLnsyLDN9fFxcISkifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6Ilsoe1tdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdfSldIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxxZG9jOlt7dG9rZW46InN0cmluZyIscmVnZXg6Ii4qPycnJyIsbmV4dDoic3RhcnQifSxiXSxxcWRvYzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicuKj8iIiInLG5leHQ6InN0YXJ0In0sYl0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbXlxcXFwnXSooPzpcXFxcLlteXFxcXCddKikqJyIsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSxiXSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbXlxcXFwiXSooPzpcXFxcLlteXFxcXCJdKikqIicsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSxiXSxqczpbe3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbXlxcXFxgXSooPzpcXFxcLlteXFxcXGBdKikqYCIsbmV4dDoic3RhcnQifSxiXSxoZXJlZ2V4Olt7dG9rZW46InN0cmluZy5yZWdleCIscmVnZXg6Ii4qPy8vL1tpbWd5XXswLDR9IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudC5yZWdleCIscmVnZXg6IlxccysoPzojLiopPyJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4IixtZXJnZTohMCxyZWdleDoiXFxTKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj8jIyMiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19fSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvbGFuZyIpLGU9YSgiLi4vbGliL29vcCIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcztlLmluaGVyaXRzKGcsZiksYi5Db2ZmZWVIaWdobGlnaHRSdWxlcz1nfSksYWNlLmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvcHl0aG9uaWMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGY9Yi5Gb2xkTW9kZT1mdW5jdGlvbihhKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1uZXcgUmVnRXhwKCIoPzooW1xcW3tdKXwoIithKyIpKSg/OlxccyopKD86Iy4qKT8kIil9O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyksZT1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTtpZihlKXJldHVybiBlWzFdP3RoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhhLGVbMV0sYyxlLmluZGV4KTplWzJdP3RoaXMuaW5kZW50YXRpb25CbG9jayhhLGMsZS5pbmRleCtlWzJdLmxlbmd0aCk6dGhpcy5pbmRlbnRhdGlvbkJsb2NrKGEsYyl9fS5jYWxsKGYucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-coffee.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvY29mZmVlX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9mb2xkaW5nL3B5dGhvbmljIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvdGV4dCIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9saWIvb29wIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGwoKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGQoKG5ldyBlKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBmLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBnKCI9fD0+fC0+fFxccypjbGFzcyBbXiNdKiIpfSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZT1hKCIuL2NvZmZlZV9oaWdobGlnaHRfcnVsZXMiKS5Db2ZmZWVIaWdobGlnaHRSdWxlcyxmPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGc9YSgiLi9mb2xkaW5nL3B5dGhvbmljIikuRm9sZE1vZGUsaD1hKCIuLi9yYW5nZSIpLlJhbmdlLGk9YSgiLi90ZXh0IikuTW9kZSxqPWEoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGs9YSgiLi4vbGliL29vcCIpO2suaW5oZXJpdHMobCxpKSxmdW5jdGlvbigpe3ZhciBhPS8oPzpbKHtbPTpdfFstPV0+fFxiKD86ZWxzZXxzd2l0Y2h8dHJ5fGNhdGNoKD86XHMqWyRBLVphLXpfXHg3Zi1cdWZmZmZdWyRcd1x4N2YtXHVmZmZmXSopP3xmaW5hbGx5KSlccyokLyxiPS9eKFxzKikjLyxjPS9eXHMqIyMjKD8hIykvLGQ9L15ccyovO3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPXRoaXMuJGdldEluZGVudChjKSxmPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGMsYikudG9rZW5zO3JldHVybighZi5sZW5ndGh8fGZbZi5sZW5ndGgtMV0udHlwZSE9PSJjb21tZW50IikmJmI9PT0ic3RhcnQiJiZhLnRlc3QoYykmJihlKz1kKSxlfSx0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGUsZixnKXtjb25zb2xlLmxvZygidG9nZ2xlIik7dmFyIGk9bmV3IGgoMCwwLDAsMCk7Zm9yKHZhciBqPWY7ajw9ZzsrK2ope3ZhciBrPWUuZ2V0TGluZShqKTtpZihjLnRlc3QoaykpY29udGludWU7Yi50ZXN0KGspP2s9ay5yZXBsYWNlKGIsIiQxIik6az1rLnJlcGxhY2UoZCwiJCYjIiksaS5lbmQucm93PWkuc3RhcnQucm93PWosaS5lbmQuY29sdW1uPWsubGVuZ3RoKzEsZS5yZXBsYWNlKGksayl9fSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGooWyJhY2UiXSwid29ya2VyLWNvZmZlZS5qcyIsImFjZS9tb2RlL2NvZmZlZV93b3JrZXIiLCJXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigiZXJyb3IiLGZ1bmN0aW9uKGIpe2Euc2V0QW5ub3RhdGlvbnMoW2IuZGF0YV0pfSksYi5vbigib2siLGZ1bmN0aW9uKGIpe2EuY2xlYXJBbm5vdGF0aW9ucygpfSksYn19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksZGVmaW5lKCJhY2UvbW9kZS9jb2ZmZWVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKCl7dmFyIGE9IlskQS1aYS16X1xceDdmLVxcdWZmZmZdWyRcXHdcXHg3Zi1cXHVmZmZmXSoiLGI9e3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9LGM9ZC5hcnJheVRvTWFwKCJ0aGlzfHRocm93fHRoZW58dHJ5fHR5cGVvZnxzdXBlcnxzd2l0Y2h8cmV0dXJufGJyZWFrfGJ5KXxjb250aW51ZXxjYXRjaHxjbGFzc3xpbnxpbnN0YW5jZW9mfGlzfGlzbnR8aWZ8ZWxzZXxleHRlbmRzfGZvcnxmb3Jvd258ZmluYWxseXxmdW5jdGlvbnx3aGlsZXx3aGVufG5ld3xub3xub3R8ZGVsZXRlfGRlYnVnZ2VyfGRvfGxvb3B8b2Z8b2ZmfG9yfG9ufHVubGVzc3x1bnRpbHxhbmR8eWVzIi5zcGxpdCgifCIpKSxlPWQuYXJyYXlUb01hcCgidHJ1ZXxmYWxzZXxudWxsfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksZj1kLmFycmF5VG9NYXAoImNhc2V8Y29uc3R8ZGVmYXVsdHxmdW5jdGlvbnx2YXJ8dm9pZHx3aXRofGVudW18ZXhwb3J0fGltcGxlbWVudHN8aW50ZXJmYWNlfGxldHxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xzdGF0aWN8eWllbGR8X19oYXNQcm9wfGV4dGVuZHN8c2xpY2V8YmluZHxpbmRleE9mIi5zcGxpdCgifCIpKSxnPWQuYXJyYXlUb01hcCgiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufE51bWJlcnxPYmplY3R8UmVnRXhwfFJlZmVyZW5jZUVycm9yfFJhbmdlRXJyb3J8U3RyaW5nfFN5bnRheEVycm9yfEVycm9yfEV2YWxFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3IiLnNwbGl0KCJ8IikpLGg9ZC5hcnJheVRvTWFwKCJNYXRofEpTT058aXNOYU58aXNGaW5pdGV8cGFyc2VJbnR8cGFyc2VGbG9hdHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8UmFuZ2VFcnJvcnxTdHJpbmd8U3ludGF4RXJyb3J8RXJyb3J8RXZhbEVycm9yfFR5cGVFcnJvcnxVUklFcnJvciIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImlkZW50aWZpZXIiLHJlZ2V4OiIoPzooPzpcXC58OjopXFxzKikiK2F9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiJAKD86IithKyIpPyJ9LHt0b2tlbjpmdW5jdGlvbihhKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShhKT8ia2V5d29yZCI6ZS5oYXNPd25Qcm9wZXJ0eShhKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmYuaGFzT3duUHJvcGVydHkoYSk/ImludmFsaWQuaWxsZWdhbCI6Zy5oYXNPd25Qcm9wZXJ0eShhKT8ibGFuZ3VhZ2Uuc3VwcG9ydC5jbGFzcyI6aC5oYXNPd25Qcm9wZXJ0eShhKT8ibGFuZ3VhZ2Uuc3VwcG9ydC5mdW5jdGlvbiI6ImlkZW50aWZpZXIifSxyZWdleDphfSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIoPzoweFtcXGRhLWZBLUZdK3woPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKD86W2VFXVsrLV0/XFxkKyk/KSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiJycnIixuZXh0OiJxZG9jIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiciIiInLG5leHQ6InFxZG9jIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiInIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiciJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiYCIsbmV4dDoianMifSx7dG9rZW46InN0cmluZy5yZWdleCIsbWVyZ2U6ITAscmVnZXg6Ii8vLyIsbmV4dDoiaGVyZWdleCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4IixyZWdleDoiLyg/IVxccylbXlsvXFxuXFxcXF0qKD86ICg/OlxcXFwufFxcW1teXFxdXFxuXFxcXF0qKD86XFxcXC5bXlxcXVxcblxcXFxdKikqXFxdKVteWy9cXG5cXFxcXSopKi9baW1neV17MCw0fSg/IVxcdykifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIjIyMoPyEjKSIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IiMuKiJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJcXD98XFw6fFxcLHxcXC4ifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIoPzpbXFwtPV0+fFstKyovJTw+JnxeIT89XT18Pj4+PT98XFwtXFwtfFxcK1xcK3w6OnwmJj18XFx8XFx8PXw8PD18Pj49fFxcP1xcLnxcXC57MiwzfXxcXCEpIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbKHtbXSJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXX0pXSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0scWRvYzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIuKj8nJyciLG5leHQ6InN0YXJ0In0sYl0scXFkb2M6W3t0b2tlbjoic3RyaW5nIixyZWdleDonLio/IiIiJyxuZXh0OiJzdGFydCJ9LGJdLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiW15cXFxcJ10qKD86XFxcXC5bXlxcXFwnXSopKiciLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0sYl0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonW15cXFxcIl0qKD86XFxcXC5bXlxcXFwiXSopKiInLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0sYl0sanM6W3t0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiW15cXFxcYF0qKD86XFxcXC5bXlxcXFxgXSopKmAiLG5leHQ6InN0YXJ0In0sYl0saGVyZWdleDpbe3Rva2VuOiJzdHJpbmcucmVnZXgiLHJlZ2V4OiIuKj8vLy9baW1neV17MCw0fSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQucmVnZXgiLHJlZ2V4OiJcXHMrKD86Iy4qKT8ifSx7dG9rZW46InN0cmluZy5yZWdleCIsbWVyZ2U6ITAscmVnZXg6IlxcUysifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/IyMjIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2xhbmciKSxlPWEoIi4uL2xpYi9vb3AiKSxmPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7ZS5pbmhlcml0cyhnLGYpLGIuQ29mZmVlSGlnaGxpZ2h0UnVsZXM9Z30pLGRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9weXRob25pYyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZj1iLkZvbGRNb2RlPWZ1bmN0aW9uKGEpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW5ldyBSZWdFeHAoIig/OihbXFxbe10pfCgiK2ErIikpKD86XFxzKikoPzojLiopPyQiKX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxlPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGUpcmV0dXJuIGVbMV0/dGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZVsxXSxjLGUuaW5kZXgpOmVbMl0/dGhpcy5pbmRlbnRhdGlvbkJsb2NrKGEsYyxlLmluZGV4K2VbMl0ubGVuZ3RoKTp0aGlzLmluZGVudGF0aW9uQmxvY2soYSxjKX19LmNhbGwoZi5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-coldfusion-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvY29sZGZ1c2lvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUveG1sIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2NzcyIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9jb2xkZnVzaW9uX2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi94bWwiKS5Nb2RlLGY9YSgiLi9qYXZhc2NyaXB0IikuTW9kZSxnPWEoIi4vY3NzIikuTW9kZSxoPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixpPWEoIi4vY29sZGZ1c2lvbl9oaWdobGlnaHRfcnVsZXMiKS5Db2xkZnVzaW9uSGlnaGxpZ2h0UnVsZXMsaj1mdW5jdGlvbigpe2UuY2FsbCh0aGlzKTt2YXIgYT1uZXcgaTt0aGlzLiR0b2tlbml6ZXI9bmV3IGgoYS5nZXRSdWxlcygpKSx0aGlzLiRlbWJlZHM9YS5nZXRFbWJlZHMoKSx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeyJqcy0iOmYsImNzcy0iOmd9KX07ZC5pbmhlcml0cyhqLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJGdldEluZGVudChiKX19LmNhbGwoai5wcm90b3R5cGUpLGIuTW9kZT1qfSksYWNlLmRlZmluZSgiYWNlL21vZGUveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy94bWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlcyxoPWEoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cixpPWEoIi4vZm9sZGluZy94bWwiKS5Gb2xkTW9kZSxqPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kYmVoYXZpb3VyPW5ldyBoLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBpfTtkLmluaGVyaXRzKGosZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChqLnByb3RvdHlwZSksYi5Nb2RlPWp9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS94bWxfdXRpbCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3htbF91dGlsIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/IixuZXh0OiJ0YWcifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6Iig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZS50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0Iil9O2QuaW5oZXJpdHMoZyxmKSxiLlhtbEhpZ2hsaWdodFJ1bGVzPWd9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS94bWxfdXRpbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEpe3JldHVyblt7dG9rZW46InN0cmluZyIscmVnZXg6JyIuKj8iJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKicsbmV4dDphKyItcXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKj8nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKiIsbmV4dDphKyItcXN0cmluZyJ9XX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLio/IithLG5leHQ6Yn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2xhbmciKSxlPWQuYXJyYXlUb01hcCgiYnV0dG9ufGZvcm18aW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhIi5zcGxpdCgifCIpKSxmPWQuYXJyYXlUb01hcCgidGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dHIiLnNwbGl0KCJ8IikpO2IudGFnPWZ1bmN0aW9uKGEsYixjKXthW2JdPVt7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09ImEiPyJtZXRhLnRhZy5hbmNob3IiOmE9PT0iaW1nIj8ibWV0YS50YWcuaW1hZ2UiOmE9PT0ic2NyaXB0Ij8ibWV0YS50YWcuc2NyaXB0IjphPT09InN0eWxlIj8ibWV0YS50YWcuc3R5bGUiOmUuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcuZm9ybSI6Zi5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy50YWJsZSI6Im1ldGEudGFnIn0sbWVyZ2U6ITAscmVnZXg6IlstX2EtekEtWjAtOTohXSsiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OmIrImVtYmVkLWF0dHJpYnV0ZS1saXN0In1dLGFbYisiLXFzdHJpbmciXT1oKCInIixiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiLXFxc3RyaW5nIl09aCgnIicsYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiKSxhW2IrImVtYmVkLWF0dHJpYnV0ZS1saXN0Il09W3t0b2tlbjoibWV0YS50YWciLG1lcmdlOiEwLHJlZ2V4OiIvPz4iLG5leHQ6Y30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiPSJ9LHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLmNvbmNhdChnKGIpKX19KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1hKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixnPWZ1bmN0aW9uKCl7dGhpcy5pbmhlcml0KGYsWyJzdHJpbmdfZHF1b3RlcyJdKSx0aGlzLmFkZCgiYnJhY2tldHMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IjwiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj8hMTp7dGV4dDoiPD4iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09Ij4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSI+IilyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaz1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisyKTtpZihrPT0iPC8iKXt2YXIgbD10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpK2QuZ2V0VGFiU3RyaW5nKCksbT10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbCsiXG4iK20sc2VsZWN0aW9uOlsxLGwubGVuZ3RoLDEsbC5sZW5ndGhdfX19fSl9O2QuaW5oZXJpdHMoZyxlKSxiLlhtbEJlaGF2aW91cj1nfSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL2xpYi9sYW5nIiksZj1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGc9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxoPWEoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixpPWIuRm9sZE1vZGU9ZnVuY3Rpb24oYSl7Zy5jYWxsKHRoaXMpLHRoaXMudm9pZEVsZW1lbnRzPWF8fHt9fTtkLmluaGVyaXRzKGksZyksZnVuY3Rpb24oKXt0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7cmV0dXJuIGQuY2xvc2luZz9iPT0ibWFya2JlZ2luZW5kIj8iZW5kIjoiIjohZC50YWdOYW1lfHx0aGlzLnZvaWRFbGVtZW50c1tkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0/IiI6ZC5zZWxmQ2xvc2luZz8iIjpkLnZhbHVlLmluZGV4T2YoIi8iK2QudGFnTmFtZSkhPT0tMT8iIjoic3RhcnQifSx0aGlzLl9nZXRGaXJzdFRhZ0luTGluZT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0VG9rZW5zKGIsYilbMF0udG9rZW5zLGQ9IiI7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBnPWNbZl07Zy50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wP2QrPWcudmFsdWU6ZCs9ZS5zdHJpbmdSZXBlYXQoIiAiLGcudmFsdWUubGVuZ3RoKX1yZXR1cm4gdGhpcy5fcGFyc2VUYWcoZCl9LHRoaXMudGFnUmU9L14oXHMqKSg8PyhcLz8pKFstX2EtekEtWjAtOTohXSopXHMqKFwvPyk+PykvLHRoaXMuX3BhcnNlVGFnPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudGFnUmUuZXhlYyhhKSxjPXRoaXMudGFnUmUubGFzdEluZGV4fHwwO3JldHVybiB0aGlzLnRhZ1JlLmxhc3RJbmRleD0wLHt2YWx1ZTphLG1hdGNoOmI/YlsyXToiIixjbG9zaW5nOmI/ISFiWzNdOiExLHNlbGZDbG9zaW5nOmI/ISFiWzVdfHxiWzJdPT0iLz4iOiExLHRhZ05hbWU6Yj9iWzRdOiIiLGNvbHVtbjpiWzFdP2MrYlsxXS5sZW5ndGg6Y319LHRoaXMuX3JlYWRUYWdGb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2lmKCFkKXZhciBkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07Yys9Yi52YWx1ZTtpZihjLmluZGV4T2YoIj4iKSE9PS0xKXt2YXIgZT10aGlzLl9wYXJzZVRhZyhjKTtyZXR1cm4gZS5zdGFydD1kLGUuZW5kPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0sYS5zdGVwRm9yd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwRm9yd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcmVhZFRhZ0JhY2t3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2R8fChkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0pLGM9Yi52YWx1ZStjO2lmKGMuaW5kZXhPZigiPCIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLmVuZD1kLGUuc3RhcnQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfSxhLnN0ZXBCYWNrd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwQmFja3dhcmQoKSk7cmV0dXJuIG51bGx9LHRoaXMuX3BvcD1mdW5jdGlvbihhLGIpe3doaWxlKGEubGVuZ3RoKXt2YXIgYz1hW2EubGVuZ3RoLTFdO2lmKCFifHxjLnRhZ05hbWU9PWIudGFnTmFtZSlyZXR1cm4gYS5wb3AoKTtpZih0aGlzLnZvaWRFbGVtZW50c1tiLnRhZ05hbWVdKXJldHVybjtpZih0aGlzLnZvaWRFbGVtZW50c1tjLnRhZ05hbWVdKXthLnBvcCgpO2NvbnRpbnVlfXJldHVybiBudWxsfX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7aWYoIWQubWF0Y2gpcmV0dXJuIG51bGw7dmFyIGU9ZC5jbG9zaW5nfHxkLnNlbGZDbG9zaW5nLGc9W10saTtpZighZSl7dmFyIGo9bmV3IGgoYSxjLGQuY29sdW1uKSxrPXtyb3c6Yyxjb2x1bW46ZC5jb2x1bW4rZC50YWdOYW1lLmxlbmd0aCsyfTt3aGlsZShpPXRoaXMuX3JlYWRUYWdGb3J3YXJkKGopKXtpZihpLnNlbGZDbG9zaW5nKXtpZighZy5sZW5ndGgpcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsaS5lbmQuY29sdW1uLT0yLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGkuZW5kKTtjb250aW51ZX1pZihpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBmLmZyb21Qb2ludHMoayxpLnN0YXJ0KX1lbHNlIGcucHVzaChpKX19ZWxzZXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4rZC5tYXRjaC5sZW5ndGgpLGw9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbn07d2hpbGUoaT10aGlzLl9yZWFkVGFnQmFja3dhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKCFpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGwpfWVsc2UgZy5wdXNoKGkpfX19fS5jYWxsKGkucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3VuaWNvZGUiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4uL3VuaWNvZGUiKSxnPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxpPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldCIuc3BsaXQoInwiKSksYz0iY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZCIsZD1lLmFycmF5VG9NYXAoIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fXyIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLnNwbGl0KCJ8IikpLGk9ZS5hcnJheVRvTWFwKCJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLnNwbGl0KCJ8IikpLGo9ZS5hcnJheVRvTWFwKCJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIuc3BsaXQoInwiKSksaz0iWyIrZi5wYWNrYWdlcy5MKyJcXCRfXVsiK2YucGFja2FnZXMuTCtmLnBhY2thZ2VzLk1uK2YucGFja2FnZXMuTWMrZi5wYWNrYWdlcy5OZCtmLnBhY2thZ2VzLlBjKyJcXCRfXSpcXGIiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBnKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOlsia2V5d29yZC5kZWZpbml0aW9uIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitrKyIpIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIoPzoiK2MrIilcXGIiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoYyk/InZhcmlhYmxlLmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmguaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQuZGVmaW5pdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6aS5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmouaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuaWxsZWdhbCI6Yz09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4Omt9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJcXD98XFw6fFxcLHxcXDt8XFwuIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcLz0/IixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXiMhLiokIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxyZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnRfcmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlxcLyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXg6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXgifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiIvXFx3KiIsbmV4dDoic3RhcnQiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbXlxcXFwvXFxbXSsiLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlxcWyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXhfY2hhcmFjdGVyX2NsYXNzOlt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJdIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJbXlxcXFxcXF1dKyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0sY29tbWVudF9yZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhnLCJkb2MtIixbKG5ldyBnKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaSxoKSxiLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1pfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaj1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsaz1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCksImkiKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBqfTtkLmluaGVyaXRzKGssZSksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdSdWxlcz0iY1N0eWxlIix0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLnRva2VucztpZihlLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7dmFyIGY9Yi5tYXRjaCgvXi4qXHtccyokLyk7cmV0dXJuIGYmJihkKz1jKSxkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGkoWyJhY2UiXSwid29ya2VyLWNzcy5qcyIsImFjZS9tb2RlL2Nzc193b3JrZXIiLCJXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigiY3NzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Yi5kYXRhLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5wdXNoKHtyb3c6YS5saW5lLTEsY29sdW1uOmEuY29sLTEsdGV4dDphLm1lc3NhZ2UsdHlwZTphLnR5cGUsbGludDphfSl9KSxhLnNldEFubm90YXRpb25zKGMpfSksYn19LmNhbGwoay5wcm90b3R5cGUpLGIuTW9kZT1rfSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIi1tb3otYXBwZWFyYW5jZXwtbW96LWJveC1zaXppbmd8LXdlYmtpdC1ib3gtc2l6aW5nfC1tb3otb3V0bGluZS1yYWRpdXN8LW1vei10cmFuc2Zvcm18LXdlYmtpdC10cmFuc2Zvcm18YXBwZWFyYW5jZXxhemltdXRofGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kfGJvcmRlci1ib3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1ib3R0b218Ym9yZGVyLWNvbGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVmdC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItbGVmdHxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItcmlnaHR8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci10b3B8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3VlLWFmdGVyfGN1ZS1iZWZvcmV8Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxlbGV2YXRpb258ZW1wdHktY2VsbHN8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9udC1zaXplLWFkanVzdHxmb250LXNpemV8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2VpZ2h0fGZvbnR8aGVpZ2h0fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxsaXN0LXN0eWxlfG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWFya2VyLW9mZnNldHxtYXJnaW58bWFya3N8bWF4LWhlaWdodHxtYXgtd2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8LW1vei1ib3JkZXItcmFkaXVzfG9wYWNpdHl8b3JwaGFuc3xvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtcmFkaXVzfG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdXRsaW5lfG92ZXJmbG93fG92ZXJmbG93LXh8b3ZlcmZsb3cteXxwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWRkaW5nfHBhZ2UtYnJlYWstYWZ0ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZXxwYXVzZS1hZnRlcnxwYXVzZS1iZWZvcmV8cGF1c2V8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9pbnRlci1ldmVudHN8cG9zaXRpb258cXVvdGVzfHJlc2l6ZXxyaWNobmVzc3xyaWdodHxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNwZWVjaC1yYXRlfHNwZWFrfHN0cmVzc3x0YWJsZS1sYXlvdXR8dGV4dC1hbGlnbnx0ZXh0LWRlY29yYXRpb258dGV4dC1pbmRlbnR8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dG9wfHRyYW5zZm9ybXx1bmljb2RlLWJpZGl8dmVydGljYWwtYWxpZ258dmlzaWJpbGl0eXx2b2ljZS1mYW1pbHl8dm9sdW1lfHdoaXRlLXNwYWNlfHdpZG93c3x3aWR0aHx3b3JkLXNwYWNpbmd8ei1pbmRleCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJhYnNvbHV0ZXxhbGwtc2Nyb2xsfGFsd2F5c3xhcm1lbmlhbnxhdXRvfGJhc2VsaW5lfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXplfGNlbnRlcnxjaGFyfGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb250ZW50LWJveHxjcm9zc2hhaXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxkaXNjfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVsbGlwc2lzfGZpeGVkfGdlb3JnaWFufGdyb292ZXxoYW5kfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFsfGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLXNwYWNlfGluYWN0aXZlfGluaGVyaXR8aW5saW5lLWJsb2NrfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdvcmR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaXN0LWl0ZW18bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtZWRpdW18bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1kcm9wfG5vLXJlcGVhdHxudy1yZXNpemV8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG9ibGlxdWV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cG9pbnRlcnxwcm9ncmVzc3xyZWxhdGl2ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmlnaHR8cmlkZ2V8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbWFsbC1jYXBzfHNvbGlkfHNxdWFyZXxzdGF0aWN8c3RyaWN0fHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRiLXJsfHRleHQtYm90dG9tfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0b3B8dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhhfHVwcGVyLWxhdGlufHVwcGVyLXJvbWFufHVwcGVyY2FzZXx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHplcm8iLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCJhcXVhfGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8b2xpdmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93Ii5zcGxpdCgifCIpKSxmPSJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSIsZz1be3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJydWxlc2V0X2NvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmYrIig/OmVtfGV4fHB4fGNtfG1tfGlufHB0fHBjfGRlZ3xyYWR8Z3JhZHxtc3xzfGh6fGtoenwlKSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXs2fSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXszfSJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LnR5cGUiOmIuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5mdW5jdGlvbiI6Yy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmNvbnN0YW50IjpkLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiJ0ZXh0In0scmVnZXg6IlxcLT9bYS16QS1aX11bYS16QS1aMC05X1xcLV0qIn1dLGg9ZS5jb3B5QXJyYXkoZyk7aC51bnNoaWZ0KHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiXFx9IixuZXh0OiJzdGFydCJ9KTt2YXIgaT1lLmNvcHlBcnJheShnKTtpLnVuc2hpZnQoe3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJcXH0iLG5leHQ6Im1lZGlhIn0pO3ZhciBqPVt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxrPWUuY29weUFycmF5KGopO2sudW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0pO3ZhciBsPWUuY29weUFycmF5KGopO2wudW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6Im1lZGlhIn0pO3ZhciBtPWUuY29weUFycmF5KGopO20udW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InJ1bGVzZXQifSksdGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IlxceyIsbmV4dDoicnVsZXNldCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiQC4qP3siLG5leHQ6Im1lZGlhIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifV0sbWVkaWE6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoibWVkaWFfY29tbWVudCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiXFx7IixuZXh0OiJtZWRpYV9ydWxlc2V0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXH0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifV0sY29tbWVudDprLHJ1bGVzZXQ6aCxydWxlc2V0X2NvbW1lbnQ6bSxtZWRpYV9ydWxlc2V0OmksbWVkaWFfY29tbWVudDpsfX07ZC5pbmhlcml0cyhnLGYpLGIuQ3NzSGlnaGxpZ2h0UnVsZXM9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2NvbGRmdXNpb25faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF91dGlsIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxmPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi94bWxfdXRpbCIpLGk9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjwoPz1zKnNjcmlwdCkiLG5leHQ6InNjcmlwdCJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8KD89cypzdHlsZSkiLG5leHQ6ImNzcyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvPyIsbmV4dDoidGFnIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IltePF0rIn1dLGNkYXRhOlt7dG9rZW46InRleHQiLHJlZ2V4OiJcXF1cXF0+IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46InRleHQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj8tLT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LGgudGFnKHRoaXMuJHJ1bGVzLCJ0YWciLCJzdGFydCIpLGgudGFnKHRoaXMuJHJ1bGVzLCJjc3MiLCJjc3Mtc3RhcnQiKSxoLnRhZyh0aGlzLiRydWxlcywic2NyaXB0IiwianMtc3RhcnQiKSx0aGlzLmVtYmVkUnVsZXMoZiwianMtIixbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiooPz08XFwvc2NyaXB0PikiLG5leHQ6InRhZyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvKD89c2NyaXB0KSIsbmV4dDoidGFnIn1dKSx0aGlzLmVtYmVkUnVsZXMoZSwiY3NzLSIsW3t0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvKD89c3R5bGUpIixuZXh0OiJ0YWcifV0pfTtkLmluaGVyaXRzKGksZyksYi5Db2xkZnVzaW9uSGlnaGxpZ2h0UnVsZXM9aX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-coldfusion.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jb2xkZnVzaW9uIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS94bWwiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2NvbGRmdXNpb25faGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3htbCIpLk1vZGUsZj1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGc9YSgiLi9jc3MiKS5Nb2RlLGg9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGk9YSgiLi9jb2xkZnVzaW9uX2hpZ2hsaWdodF9ydWxlcyIpLkNvbGRmdXNpb25IaWdobGlnaHRSdWxlcyxqPWZ1bmN0aW9uKCl7ZS5jYWxsKHRoaXMpO3ZhciBhPW5ldyBpO3RoaXMuJHRva2VuaXplcj1uZXcgaChhLmdldFJ1bGVzKCkpLHRoaXMuJGVtYmVkcz1hLmdldEVtYmVkcygpLHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7ImpzLSI6ZiwiY3NzLSI6Z30pfTtkLmluaGVyaXRzKGosZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChqLnByb3RvdHlwZSksYi5Nb2RlPWp9KSxkZWZpbmUoImFjZS9tb2RlL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXIsaT1hKCIuL2ZvbGRpbmcveG1sIikuRm9sZE1vZGUsaj1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJGJlaGF2aW91cj1uZXcgaCx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgaX07ZC5pbmhlcml0cyhqLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJGdldEluZGVudChiKX19LmNhbGwoai5wcm90b3R5cGUpLGIuTW9kZT1qfSksZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS94bWxfdXRpbCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3htbF91dGlsIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/IixuZXh0OiJ0YWcifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6Iig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZS50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0Iil9O2QuaW5oZXJpdHMoZyxmKSxiLlhtbEhpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL3htbF91dGlsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGcoYSl7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixyZWdleDonIi4qPyInfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qJyxuZXh0OmErIi1xcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiJy4qPycifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qIixuZXh0OmErIi1xc3RyaW5nIn1dfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm5be3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKj8iK2EsbmV4dDpifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvbGFuZyIpLGU9ZC5hcnJheVRvTWFwKCJidXR0b258Zm9ybXxpbnB1dHxsYWJlbHxzZWxlY3R8dGV4dGFyZWEiLnNwbGl0KCJ8IikpLGY9ZC5hcnJheVRvTWFwKCJ0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0ciIuc3BsaXQoInwiKSk7Yi50YWc9ZnVuY3Rpb24oYSxiLGMpe2FbYl09W3t0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0iYSI/Im1ldGEudGFnLmFuY2hvciI6YT09PSJpbWciPyJtZXRhLnRhZy5pbWFnZSI6YT09PSJzY3JpcHQiPyJtZXRhLnRhZy5zY3JpcHQiOmE9PT0ic3R5bGUiPyJtZXRhLnRhZy5zdHlsZSI6ZS5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy5mb3JtIjpmLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/Im1ldGEudGFnLnRhYmxlIjoibWV0YS50YWcifSxtZXJnZTohMCxyZWdleDoiWy1fYS16QS1aMC05OiFdKyIsbmV4dDpiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCJ9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifV0sYVtiKyItcXN0cmluZyJdPWgoIiciLGIrImVtYmVkLWF0dHJpYnV0ZS1saXN0IiksYVtiKyItcXFzdHJpbmciXT1oKCciJyxiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiXT1be3Rva2VuOiJtZXRhLnRhZyIsbWVyZ2U6ITAscmVnZXg6Ii8/PiIsbmV4dDpjfSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiI9In0se3Rva2VuOiJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUiLHJlZ2V4OiJbLV9hLXpBLVowLTk6XSsifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0uY29uY2F0KGcoYikpfX0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9YSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsZz1mdW5jdGlvbigpe3RoaXMuaW5oZXJpdChmLFsic3RyaW5nX2RxdW90ZXMiXSksdGhpcy5hZGQoImJyYWNrZXRzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSI8Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/ITE6e3RleHQ6Ijw+IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSI+Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iPiIpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGs9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMik7aWYoaz09IjwvIil7dmFyIGw9dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUoaC5yb3cpKStkLmdldFRhYlN0cmluZygpLG09dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUoaC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK2wrIlxuIittLHNlbGVjdGlvbjpbMSxsLmxlbmd0aCwxLGwubGVuZ3RoXX19fX0pfTtkLmluaGVyaXRzKGcsZSksYi5YbWxCZWhhdmlvdXI9Z30pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vbGliL2xhbmciKSxmPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZz1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGg9YSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLGk9Yi5Gb2xkTW9kZT1mdW5jdGlvbihhKXtnLmNhbGwodGhpcyksdGhpcy52b2lkRWxlbWVudHM9YXx8e319O2QuaW5oZXJpdHMoaSxnKSxmdW5jdGlvbigpe3RoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoYSxjKTtyZXR1cm4gZC5jbG9zaW5nP2I9PSJtYXJrYmVnaW5lbmQiPyJlbmQiOiIiOiFkLnRhZ05hbWV8fHRoaXMudm9pZEVsZW1lbnRzW2QudGFnTmFtZS50b0xvd2VyQ2FzZSgpXT8iIjpkLnNlbGZDbG9zaW5nPyIiOmQudmFsdWUuaW5kZXhPZigiLyIrZC50YWdOYW1lKSE9PS0xPyIiOiJzdGFydCJ9LHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRUb2tlbnMoYixiKVswXS50b2tlbnMsZD0iIjtmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl7dmFyIGc9Y1tmXTtnLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTA/ZCs9Zy52YWx1ZTpkKz1lLnN0cmluZ1JlcGVhdCgiICIsZy52YWx1ZS5sZW5ndGgpfXJldHVybiB0aGlzLl9wYXJzZVRhZyhkKX0sdGhpcy50YWdSZT0vXihccyopKDw/KFwvPykoWy1fYS16QS1aMC05OiFdKilccyooXC8/KT4/KS8sdGhpcy5fcGFyc2VUYWc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50YWdSZS5leGVjKGEpLGM9dGhpcy50YWdSZS5sYXN0SW5kZXh8fDA7cmV0dXJuIHRoaXMudGFnUmUubGFzdEluZGV4PTAse3ZhbHVlOmEsbWF0Y2g6Yj9iWzJdOiIiLGNsb3Npbmc6Yj8hIWJbM106ITEsc2VsZkNsb3Npbmc6Yj8hIWJbNV18fGJbMl09PSIvPiI6ITEsdGFnTmFtZTpiP2JbNF06IiIsY29sdW1uOmJbMV0/YytiWzFdLmxlbmd0aDpjfX0sdGhpcy5fcmVhZFRhZ0ZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRDdXJyZW50VG9rZW4oKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz0iIixkO2RvIGlmKGIudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MCl7aWYoIWQpdmFyIGQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfTtjKz1iLnZhbHVlO2lmKGMuaW5kZXhPZigiPiIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLnN0YXJ0PWQsZS5lbmQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2IudmFsdWUubGVuZ3RofSxhLnN0ZXBGb3J3YXJkKCksZX19d2hpbGUoYj1hLnN0ZXBGb3J3YXJkKCkpO3JldHVybiBudWxsfSx0aGlzLl9yZWFkVGFnQmFja3dhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRDdXJyZW50VG9rZW4oKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz0iIixkO2RvIGlmKGIudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MCl7ZHx8KGQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2IudmFsdWUubGVuZ3RofSksYz1iLnZhbHVlK2M7aWYoYy5pbmRleE9mKCI8IikhPT0tMSl7dmFyIGU9dGhpcy5fcGFyc2VUYWcoYyk7cmV0dXJuIGUuZW5kPWQsZS5zdGFydD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9LGEuc3RlcEJhY2t3YXJkKCksZX19d2hpbGUoYj1hLnN0ZXBCYWNrd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcG9wPWZ1bmN0aW9uKGEsYil7d2hpbGUoYS5sZW5ndGgpe3ZhciBjPWFbYS5sZW5ndGgtMV07aWYoIWJ8fGMudGFnTmFtZT09Yi50YWdOYW1lKXJldHVybiBhLnBvcCgpO2lmKHRoaXMudm9pZEVsZW1lbnRzW2IudGFnTmFtZV0pcmV0dXJuO2lmKHRoaXMudm9pZEVsZW1lbnRzW2MudGFnTmFtZV0pe2EucG9wKCk7Y29udGludWV9cmV0dXJuIG51bGx9fSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoYSxjKTtpZighZC5tYXRjaClyZXR1cm4gbnVsbDt2YXIgZT1kLmNsb3Npbmd8fGQuc2VsZkNsb3NpbmcsZz1bXSxpO2lmKCFlKXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4pLGs9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbitkLnRhZ05hbWUubGVuZ3RoKzJ9O3doaWxlKGk9dGhpcy5fcmVhZFRhZ0ZvcndhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKGkuY2xvc2luZyl7dGhpcy5fcG9wKGcsaSk7aWYoZy5sZW5ndGg9PTApcmV0dXJuIGYuZnJvbVBvaW50cyhrLGkuc3RhcnQpfWVsc2UgZy5wdXNoKGkpfX1lbHNle3ZhciBqPW5ldyBoKGEsYyxkLmNvbHVtbitkLm1hdGNoLmxlbmd0aCksbD17cm93OmMsY29sdW1uOmQuY29sdW1ufTt3aGlsZShpPXRoaXMuX3JlYWRUYWdCYWNrd2FyZChqKSl7aWYoaS5zZWxmQ2xvc2luZyl7aWYoIWcubGVuZ3RoKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGkuZW5kLmNvbHVtbi09MixmLmZyb21Qb2ludHMoaS5zdGFydCxpLmVuZCk7Y29udGludWV9aWYoIWkuY2xvc2luZyl7dGhpcy5fcG9wKGcsaSk7aWYoZy5sZW5ndGg9PTApcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsbCl9ZWxzZSBnLnB1c2goaSl9fX19LmNhbGwoaS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvdW5pY29kZSIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi4vdW5pY29kZSIpLGc9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0Ii5zcGxpdCgifCIpKSxjPSJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkIixkPWUuYXJyYXlUb01hcCgiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19fIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIuc3BsaXQoInwiKSksaT1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksaj1lLmFycmF5VG9NYXAoImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIi5zcGxpdCgifCIpKSxrPSJbIitmLnBhY2thZ2VzLkwrIlxcJF9dWyIrZi5wYWNrYWdlcy5MK2YucGFja2FnZXMuTW4rZi5wYWNrYWdlcy5NYytmLnBhY2thZ2VzLk5kK2YucGFja2FnZXMuUGMrIlxcJF9dKlxcYiI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGcpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46WyJrZXl3b3JkLmRlZmluaXRpb24iLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSxyZWdleDoiKGZ1bmN0aW9uKShcXHMrKSgiK2srIikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiIrYysiKVxcYiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShjKT8idmFyaWFibGUubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuZGVwcmVjYXRlZCI6aC5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZC5kZWZpbml0aW9uIjpiLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjppLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ai5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5pbGxlZ2FsIjpjPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6a30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwvPT8iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJeIyEuKiQifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHJlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudF9yZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiXFwvIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6Ii9cXHcqIixuZXh0OiJzdGFydCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlteXFxcXC9cXFtdKyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXFxbIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6Il0iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlteXFxcXFxcXV0rIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxjb21tZW50X3JlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGcsImRvYy0iLFsobmV3IGcpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhpLGgpLGIuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzPWl9KSxkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWZ1bmN0aW9uKGIsZCxlLGYpe3RoaXMuY2hhbmdlTGlzdGVuZXI9dGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO2lmKGMucGFja2FnZWQpe3ZhciBnPXRoaXMuJGd1ZXNzQmFzZVBhdGgoKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihnK2QpfWVsc2V7dmFyIGg9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXIiLG51bGwsIl8iKSk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoaCk7dmFyIGk9e307Zm9yKHZhciBqPTA7ajxiLmxlbmd0aDtqKyspe3ZhciBrPWJbal0sbD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKGssbnVsbCwiXyIpLnJlcGxhY2UoLy5qcyQvLCIiKSk7aVtrXT1sfX10aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczppLG1vZHVsZTplLGNsYXNzbmFtZTpmfSksdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5jYWxsYmFja3M9e307dmFyIG09dGhpczt0aGlzLiR3b3JrZXIub25lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyB3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpLGF9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLnR5cGUpe2Nhc2UibG9nIjp3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGIuZGF0YSk7YnJlYWs7Y2FzZSJldmVudCI6bS5fZW1pdChiLm5hbWUse2RhdGE6Yi5kYXRhfSk7YnJlYWs7Y2FzZSJjYWxsIjp2YXIgYz1tLmNhbGxiYWNrc1tiLmlkXTtjJiYoYyhiLmRhdGEpLGRlbGV0ZSBtLmNhbGxiYWNrc1tiLmlkXSl9fX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoL15bYS16XSs6XC9cL1teXC9dK1wvLywiIiksYT1sb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QrKGEuY2hhckF0KDApPT0iLyI/IiI6bG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywiIikpKyIvIithLnJlcGxhY2UoL15bXC9dKy8sIiIpLGF9LHRoaXMuJGd1ZXNzQmFzZVBhdGg9ZnVuY3Rpb24oKXtpZihhLmFjZUJhc2VVcmwpcmV0dXJuIGEuYWNlQmFzZVVybDt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS1hY2UtYmFzZSIpO2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvXC8qJC8sIi8iKTt2YXIgZj1kLnNyY3x8ZC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFmKWNvbnRpbnVlO3ZhciBnPWYubWF0Y2goL14oPzooLipcLylhY2VcLmpzfCguKlwvKWFjZSgtdW5jb21wcmVzc2VkKT8oLW5vY29uZmxpY3QpP1wuanMpKD86XD98JCkvKTtpZihnKXJldHVybiBnWzFdfHxnWzJdfXJldHVybiIifSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX2VtaXQoInRlcm1pbmF0ZSIse30pLHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbCx0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmEsYXJnczpifSl9LHRoaXMuY2FsbD1mdW5jdGlvbihhLGIsYyl7aWYoYyl7dmFyIGQ9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3NbZF09YyxiLnB1c2goZCl9dGhpcy5zZW5kKGEsYil9LHRoaXMuZW1pdD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmEsZGF0YTp7ZGF0YTpiLmRhdGF9fSl9Y2F0Y2goYyl7fX0sdGhpcy5hdHRhY2hUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe3RoaXMuJGRvYyYmdGhpcy50ZXJtaW5hdGUoKSx0aGlzLiRkb2M9YSx0aGlzLmNhbGwoInNldFZhbHVlIixbYS5nZXRWYWx1ZSgpXSksYS5vbigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKX0sdGhpcy5jaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbihhKXthLnJhbmdlPXtzdGFydDphLmRhdGEucmFuZ2Uuc3RhcnQsZW5kOmEuZGF0YS5yYW5nZS5lbmR9LHRoaXMuZW1pdCgiY2hhbmdlIixhKX19KSkuY2FsbChmLnByb3RvdHlwZSksYi5Xb3JrZXJDbGllbnQ9Zn0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGY9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxnPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9O2QuaW5oZXJpdHMoZyxmKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPS8oXHt8XFspW15cfVxdXSokfF5ccyooXC9cKikvLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9L15bXlxbXHtdKihcfXxcXSl8Xltcc1wqXSooXCpcLykvLHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyksZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4O2lmKGZbMV0pcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhhLGZbMV0sYyxnKTt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnK2ZbMF0ubGVuZ3RoKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9aWYoYiE9PSJtYXJrYmVnaW5lbmQiKXJldHVybjt2YXIgZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXgrZlswXS5sZW5ndGg7aWYoZlsyXSl7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZyk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofXZhciBpPXtyb3c6Yyxjb2x1bW46Z30saj1hLiRmaW5kT3BlbmluZ0JyYWNrZXQoZlsxXSxpKTtpZighailyZXR1cm47cmV0dXJuIGouY29sdW1uKyssaS5jb2x1bW4tLSxlLmZyb21Qb2ludHMoaixpKX19fS5jYWxsKGcucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaj1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsaz1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCksImkiKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBqfTtkLmluaGVyaXRzKGssZSksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdSdWxlcz0iY1N0eWxlIix0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLnRva2VucztpZihlLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7dmFyIGY9Yi5tYXRjaCgvXi4qXHtccyokLyk7cmV0dXJuIGYmJihkKz1jKSxkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGkoWyJhY2UiXSwid29ya2VyLWNzcy5qcyIsImFjZS9tb2RlL2Nzc193b3JrZXIiLCJXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigiY3NzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Yi5kYXRhLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5wdXNoKHtyb3c6YS5saW5lLTEsY29sdW1uOmEuY29sLTEsdGV4dDphLm1lc3NhZ2UsdHlwZTphLnR5cGUsbGludDphfSl9KSxhLnNldEFubm90YXRpb25zKGMpfSksYn19LmNhbGwoay5wcm90b3R5cGUpLGIuTW9kZT1rfSksZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZz1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiLW1vei1hcHBlYXJhbmNlfC1tb3otYm94LXNpemluZ3wtd2Via2l0LWJveC1zaXppbmd8LW1vei1vdXRsaW5lLXJhZGl1c3wtbW96LXRyYW5zZm9ybXwtd2Via2l0LXRyYW5zZm9ybXxhcHBlYXJhbmNlfGF6aW11dGh8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmR8Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVyLWJvdHRvbXxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1yaWdodHxib3JkZXItc3BhY2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLXN0eWxlfGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXRvcHxib3JkZXItd2lkdGh8Ym9yZGVyfGJvdHRvbXxib3gtc2l6aW5nfGNhcHRpb24tc2lkZXxjbGVhcnxjbGlwfGNvbG9yfGNvbnRlbnR8Y291bnRlci1pbmNyZW1lbnR8Y291bnRlci1yZXNldHxjdWUtYWZ0ZXJ8Y3VlLWJlZm9yZXxjdWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmbG9hdHxmb250LWZhbWlseXxmb250LXNpemUtYWRqdXN0fGZvbnQtc2l6ZXxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8Zm9udHxoZWlnaHR8bGVmdHxsZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGV8bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJrZXItb2Zmc2V0fG1hcmdpbnxtYXJrc3xtYXgtaGVpZ2h0fG1heC13aWR0aHxtaW4taGVpZ2h0fG1pbi13aWR0aHwtbW96LWJvcmRlci1yYWRpdXN8b3BhY2l0eXxvcnBoYW5zfG91dGxpbmUtY29sb3J8b3V0bGluZS1vZmZzZXR8b3V0bGluZS1yYWRpdXN8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG91dGxpbmV8b3ZlcmZsb3d8b3ZlcmZsb3cteHxvdmVyZmxvdy15fHBhZGRpbmctYm90dG9tfHBhZGRpbmctbGVmdHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZGRpbmd8cGFnZS1icmVhay1hZnRlcnxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlfHBhdXNlLWFmdGVyfHBhdXNlLWJlZm9yZXxwYXVzZXxwaXRjaC1yYW5nZXxwaXRjaHxwbGF5LWR1cmluZ3xwb2ludGVyLWV2ZW50c3xwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpY2huZXNzfHJpZ2h0fHNpemV8c3BlYWstaGVhZGVyfHNwZWFrLW51bWVyYWx8c3BlYWstcHVuY3R1YXRpb258c3BlZWNoLXJhdGV8c3BlYWt8c3RyZXNzfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtZGVjb3JhdGlvbnx0ZXh0LWluZGVudHx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHVuaWNvZGUtYmlkaXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHZvaWNlLWZhbWlseXx2b2x1bWV8d2hpdGUtc3BhY2V8d2lkb3dzfHdpZHRofHdvcmQtc3BhY2luZ3x6LWluZGV4Ii5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgicmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVycyIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImFic29sdXRlfGFsbC1zY3JvbGx8YWx3YXlzfGFybWVuaWFufGF1dG98YmFzZWxpbmV8YmVsb3d8YmlkaS1vdmVycmlkZXxibG9ja3xib2xkfGJvbGRlcnxib3JkZXItYm94fGJvdGh8Ym90dG9tfGJyZWFrLWFsbHxicmVhay13b3JkfGNhcGl0YWxpemV8Y2VudGVyfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjb2wtcmVzaXplfGNvbGxhcHNlfGNvbnRlbnQtYm94fGNyb3NzaGFpcnxkYXNoZWR8ZGVjaW1hbC1sZWFkaW5nLXplcm98ZGVjaW1hbHxkZWZhdWx0fGRpc2FibGVkfGRpc2N8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlfGRvdHRlZHxkb3VibGV8ZS1yZXNpemV8ZWxsaXBzaXN8Zml4ZWR8Z2VvcmdpYW58Z3Jvb3ZlfGhhbmR8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWRlb2dyYXBoLWFscGhhfGlkZW9ncmFwaC1udW1lcmljfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtc3BhY2V8aW5hY3RpdmV8aW5oZXJpdHxpbmxpbmUtYmxvY2t8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpdGFsaWN8anVzdGlmeXxrYXRha2FuYS1pcm9oYXxrYXRha2FuYXxrZWVwLWFsbHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpc3QtaXRlbXxsb29zZXxsb3dlci1hbHBoYXxsb3dlci1ncmVla3xsb3dlci1sYXRpbnxsb3dlci1yb21hbnxsb3dlcmNhc2V8bHItdGJ8bHRyfG1lZGl1bXxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWRyb3B8bm8tcmVwZWF0fG53LXJlc2l6ZXxub25lfG5vcm1hbHxub3QtYWxsb3dlZHxub3dyYXB8b2JsaXF1ZXxvdXRzZXR8b3V0c2lkZXxvdmVybGluZXxwb2ludGVyfHByb2dyZXNzfHJlbGF0aXZlfHJlcGVhdC14fHJlcGVhdC15fHJlcGVhdHxyaWdodHxyaWRnZXxyb3ctcmVzaXplfHJ0bHxzLXJlc2l6ZXxzY3JvbGx8c2UtcmVzaXplfHNlcGFyYXRlfHNtYWxsLWNhcHN8c29saWR8c3F1YXJlfHN0YXRpY3xzdHJpY3R8c3VwZXJ8c3ctcmVzaXplfHRhYmxlLWZvb3Rlci1ncm91cHx0YWJsZS1oZWFkZXItZ3JvdXB8dGItcmx8dGV4dC1ib3R0b218dGV4dC10b3B8dGV4dHx0aGlja3x0aGlufHRvcHx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHZlcnRpY2FsLWlkZW9ncmFwaGljfHZlcnRpY2FsLXRleHR8dmlzaWJsZXx3LXJlc2l6ZXx3YWl0fHdoaXRlc3BhY2V8emVybyIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoImFxdWF8YmxhY2t8Ymx1ZXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxtYXJvb258bmF2eXxvbGl2ZXxvcmFuZ2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3ciLnNwbGl0KCJ8IikpLGY9IlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIixnPVt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6InJ1bGVzZXRfY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6ZisiKD86ZW18ZXh8cHh8Y218bW18aW58cHR8cGN8ZGVnfHJhZHxncmFkfG1zfHN8aHp8a2h6fCUpIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiI1thLWYwLTldezZ9In0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiI1thLWYwLTldezN9In0se3Rva2VuOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQudHlwZSI6Yi5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmZ1bmN0aW9uIjpjLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuY29uc3RhbnQiOmQuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5jb25zdGFudC5jb2xvciI6InRleHQifSxyZWdleDoiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoifV0saD1lLmNvcHlBcnJheShnKTtoLnVuc2hpZnQoe3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJcXH0iLG5leHQ6InN0YXJ0In0pO3ZhciBpPWUuY29weUFycmF5KGcpO2kudW5zaGlmdCh7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IlxcfSIsbmV4dDoibWVkaWEifSk7dmFyIGo9W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGs9ZS5jb3B5QXJyYXkoaik7ay51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSk7dmFyIGw9ZS5jb3B5QXJyYXkoaik7bC51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoibWVkaWEifSk7dmFyIG09ZS5jb3B5QXJyYXkoaik7bS51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoicnVsZXNldCJ9KSx0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiXFx7IixuZXh0OiJydWxlc2V0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJALio/eyIsbmV4dDoibWVkaWEifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjW2EtejAtOS1fXSsifSx7dG9rZW46InZhcmlhYmxlIixyZWdleDoiXFwuW2EtejAtOS1fXSsifSx7dG9rZW46InN0cmluZyIscmVnZXg6IjpbYS16MC05LV9dKyJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbYS16MC05LV9dKyJ9XSxtZWRpYTpbe3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJtZWRpYV9jb21tZW50In0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJcXHsiLG5leHQ6Im1lZGlhX3J1bGVzZXQifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlxcfSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjW2EtejAtOS1fXSsifSx7dG9rZW46InZhcmlhYmxlIixyZWdleDoiXFwuW2EtejAtOS1fXSsifSx7dG9rZW46InN0cmluZyIscmVnZXg6IjpbYS16MC05LV9dKyJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbYS16MC05LV9dKyJ9XSxjb21tZW50OmsscnVsZXNldDpoLHJ1bGVzZXRfY29tbWVudDptLG1lZGlhX3J1bGVzZXQ6aSxtZWRpYV9jb21tZW50Omx9fTtkLmluaGVyaXRzKGcsZiksYi5Dc3NIaWdobGlnaHRSdWxlcz1nfSksZGVmaW5lKCJhY2UvbW9kZS9jb2xkZnVzaW9uX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfdXRpbCJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXMsZj1hKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLGc9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxoPWEoIi4veG1sX3V0aWwiKSxpPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46InRleHQiLG1lcmdlOiEwLHJlZ2V4OiI8XFwhXFxbQ0RBVEFcXFsiLG5leHQ6ImNkYXRhIn0se3Rva2VuOiJ4bWxfcGUiLHJlZ2V4OiI8XFw/Lio/XFw/PiJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IjxcXCEtLSIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8KD89cypzY3JpcHQpIixuZXh0OiJzY3JpcHQifSx7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPCg/PXMqc3R5bGUpIixuZXh0OiJjc3MifSx7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPFxcLz8iLG5leHQ6InRhZyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46InRleHQiLHJlZ2V4OiJbXjxdKyJ9XSxjZGF0YTpbe3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxdXFxdPiIsbmV4dDoic3RhcnQifSx7dG9rZW46InRleHQiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixtZXJnZTohMCxyZWdleDoiLisifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/LS0+IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSxoLnRhZyh0aGlzLiRydWxlcywidGFnIiwic3RhcnQiKSxoLnRhZyh0aGlzLiRydWxlcywiY3NzIiwiY3NzLXN0YXJ0IiksaC50YWcodGhpcy4kcnVsZXMsInNjcmlwdCIsImpzLXN0YXJ0IiksdGhpcy5lbWJlZFJ1bGVzKGYsImpzLSIsW3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qKD89PFxcL3NjcmlwdD4pIixuZXh0OiJ0YWcifSx7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPFxcLyg/PXNjcmlwdCkiLG5leHQ6InRhZyJ9XSksdGhpcy5lbWJlZFJ1bGVzKGUsImNzcy0iLFt7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPFxcLyg/PXN0eWxlKSIsbmV4dDoidGFnIn1dKX07ZC5pbmhlcml0cyhpLGcpLGIuQ29sZGZ1c2lvbkhpZ2hsaWdodFJ1bGVzPWl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-csharp-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvY3NoYXJwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2NzaGFycF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9jc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIikuQ1NoYXJwSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGksdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucztpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Iil7dmFyIGc9Yi5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7ZyYmKGQrPWMpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGx9fS5jYWxsKGsucHJvdG90eXBlKSxiLk1vZGU9a30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2NzaGFycF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImFic3RyYWN0fGV2ZW50fG5ld3xzdHJ1Y3R8YXN8ZXhwbGljaXR8bnVsbHxzd2l0Y2h8YmFzZXxleHRlcm58b2JqZWN0fHRoaXN8Ym9vbHxmYWxzZXxvcGVyYXRvcnx0aHJvd3xicmVha3xmaW5hbGx5fG91dHx0cnVlfGJ5dGV8Zml4ZWR8b3ZlcnJpZGV8dHJ5fGNhc2V8ZmxvYXR8cGFyYW1zfHR5cGVvZnxjYXRjaHxmb3J8cHJpdmF0ZXx1aW50fGNoYXJ8Zm9yZWFjaHxwcm90ZWN0ZWR8dWxvbmd8Y2hlY2tlZHxnb3RvfHB1YmxpY3x1bmNoZWNrZWR8Y2xhc3N8aWZ8cmVhZG9ubHl8dW5zYWZlfGNvbnN0fGltcGxpY2l0fHJlZnx1c2hvcnR8Y29udGludWV8aW58cmV0dXJufHVzaW5nfGRlY2ltYWx8aW50fHNieXRlfHZpcnR1YWx8ZGVmYXVsdHxpbnRlcmZhY2V8c2VhbGVkfHZvbGF0aWxlfGRlbGVnYXRlfGludGVybmFsfHNob3J0fHZvaWR8ZG98aXN8c2l6ZW9mfHdoaWxlfGRvdWJsZXxsb2NrfHN0YWNrYWxsb2N8ZWxzZXxsb25nfHN0YXRpY3xlbnVtfG5hbWVzcGFjZXxzdHJpbmd8dmFyfGR5bmFtaWMiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJudWxsfHRydWV8ZmFsc2UiLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBmKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcKiIsbWVyZ2U6ITAsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGM9PSJ0aGlzIj8idmFyaWFibGUubGFuZ3VhZ2UiOmEuaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQiOmIuaGFzT3duUHJvcGVydHkoYyk/ImNvbnN0YW50Lmxhbmd1YWdlIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkifSx7dG9rZW46InB1bmN0dWF0aW9uLm9wZXJhdG9yIixyZWdleDoiXFw/fFxcOnxcXCx8XFw7fFxcLiJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGYsImRvYy0iLFsobmV3IGYpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhoLGcpLGIuQ1NoYXJwSGlnaGxpZ2h0UnVsZXM9aH0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlx9Ly50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcfSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KSkuY2FsbChlLnByb3RvdHlwZSksYi5NYXRjaGluZ0JyYWNlT3V0ZGVudD1lfSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-csharp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc2hhcnAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvY3NoYXJwX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2NzaGFycF9oaWdobGlnaHRfcnVsZXMiKS5DU2hhcnBIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGo9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLGs9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuJGJlaGF2aW91cj1uZXcgaSx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgan07ZC5pbmhlcml0cyhrLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQiKXt2YXIgZz1iLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTtnJiYoZCs9Yyl9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbH19LmNhbGwoay5wcm90b3R5cGUpLGIuTW9kZT1rfSksZGVmaW5lKCJhY2UvbW9kZS9jc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGc9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxoPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJhYnN0cmFjdHxldmVudHxuZXd8c3RydWN0fGFzfGV4cGxpY2l0fG51bGx8c3dpdGNofGJhc2V8ZXh0ZXJufG9iamVjdHx0aGlzfGJvb2x8ZmFsc2V8b3BlcmF0b3J8dGhyb3d8YnJlYWt8ZmluYWxseXxvdXR8dHJ1ZXxieXRlfGZpeGVkfG92ZXJyaWRlfHRyeXxjYXNlfGZsb2F0fHBhcmFtc3x0eXBlb2Z8Y2F0Y2h8Zm9yfHByaXZhdGV8dWludHxjaGFyfGZvcmVhY2h8cHJvdGVjdGVkfHVsb25nfGNoZWNrZWR8Z290b3xwdWJsaWN8dW5jaGVja2VkfGNsYXNzfGlmfHJlYWRvbmx5fHVuc2FmZXxjb25zdHxpbXBsaWNpdHxyZWZ8dXNob3J0fGNvbnRpbnVlfGlufHJldHVybnx1c2luZ3xkZWNpbWFsfGludHxzYnl0ZXx2aXJ0dWFsfGRlZmF1bHR8aW50ZXJmYWNlfHNlYWxlZHx2b2xhdGlsZXxkZWxlZ2F0ZXxpbnRlcm5hbHxzaG9ydHx2b2lkfGRvfGlzfHNpemVvZnx3aGlsZXxkb3VibGV8bG9ja3xzdGFja2FsbG9jfGVsc2V8bG9uZ3xzdGF0aWN8ZW51bXxuYW1lc3BhY2V8c3RyaW5nfHZhcnxkeW5hbWljIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgibnVsbHx0cnVlfGZhbHNlIi5zcGxpdCgifCIpKTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LChuZXcgZikuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXCoiLG1lcmdlOiEwLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIscmVnZXg6Iig/OnRydWV8ZmFsc2UpXFxiIn0se3Rva2VuOmZ1bmN0aW9uKGMpe3JldHVybiBjPT0idGhpcyI/InZhcmlhYmxlLmxhbmd1YWdlIjphLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4ifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhmLCJkb2MtIixbKG5ldyBmKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaCxnKSxiLkNTaGFycEhpZ2hsaWdodFJ1bGVzPWh9KSxkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-css-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaj1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsaz1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCksImkiKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBqfTtkLmluaGVyaXRzKGssZSksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdSdWxlcz0iY1N0eWxlIix0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLnRva2VucztpZihlLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7dmFyIGY9Yi5tYXRjaCgvXi4qXHtccyokLyk7cmV0dXJuIGYmJihkKz1jKSxkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGkoWyJhY2UiXSwid29ya2VyLWNzcy5qcyIsImFjZS9tb2RlL2Nzc193b3JrZXIiLCJXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigiY3NzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Yi5kYXRhLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5wdXNoKHtyb3c6YS5saW5lLTEsY29sdW1uOmEuY29sLTEsdGV4dDphLm1lc3NhZ2UsdHlwZTphLnR5cGUsbGludDphfSl9KSxhLnNldEFubm90YXRpb25zKGMpfSksYn19LmNhbGwoay5wcm90b3R5cGUpLGIuTW9kZT1rfSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIi1tb3otYXBwZWFyYW5jZXwtbW96LWJveC1zaXppbmd8LXdlYmtpdC1ib3gtc2l6aW5nfC1tb3otb3V0bGluZS1yYWRpdXN8LW1vei10cmFuc2Zvcm18LXdlYmtpdC10cmFuc2Zvcm18YXBwZWFyYW5jZXxhemltdXRofGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kfGJvcmRlci1ib3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1ib3R0b218Ym9yZGVyLWNvbGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVmdC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItbGVmdHxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItcmlnaHR8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci10b3B8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3VlLWFmdGVyfGN1ZS1iZWZvcmV8Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxlbGV2YXRpb258ZW1wdHktY2VsbHN8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9udC1zaXplLWFkanVzdHxmb250LXNpemV8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2VpZ2h0fGZvbnR8aGVpZ2h0fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxsaXN0LXN0eWxlfG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWFya2VyLW9mZnNldHxtYXJnaW58bWFya3N8bWF4LWhlaWdodHxtYXgtd2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8LW1vei1ib3JkZXItcmFkaXVzfG9wYWNpdHl8b3JwaGFuc3xvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtcmFkaXVzfG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdXRsaW5lfG92ZXJmbG93fG92ZXJmbG93LXh8b3ZlcmZsb3cteXxwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWRkaW5nfHBhZ2UtYnJlYWstYWZ0ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZXxwYXVzZS1hZnRlcnxwYXVzZS1iZWZvcmV8cGF1c2V8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9pbnRlci1ldmVudHN8cG9zaXRpb258cXVvdGVzfHJlc2l6ZXxyaWNobmVzc3xyaWdodHxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNwZWVjaC1yYXRlfHNwZWFrfHN0cmVzc3x0YWJsZS1sYXlvdXR8dGV4dC1hbGlnbnx0ZXh0LWRlY29yYXRpb258dGV4dC1pbmRlbnR8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dG9wfHRyYW5zZm9ybXx1bmljb2RlLWJpZGl8dmVydGljYWwtYWxpZ258dmlzaWJpbGl0eXx2b2ljZS1mYW1pbHl8dm9sdW1lfHdoaXRlLXNwYWNlfHdpZG93c3x3aWR0aHx3b3JkLXNwYWNpbmd8ei1pbmRleCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJhYnNvbHV0ZXxhbGwtc2Nyb2xsfGFsd2F5c3xhcm1lbmlhbnxhdXRvfGJhc2VsaW5lfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXplfGNlbnRlcnxjaGFyfGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb250ZW50LWJveHxjcm9zc2hhaXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxkaXNjfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVsbGlwc2lzfGZpeGVkfGdlb3JnaWFufGdyb292ZXxoYW5kfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFsfGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLXNwYWNlfGluYWN0aXZlfGluaGVyaXR8aW5saW5lLWJsb2NrfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdvcmR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaXN0LWl0ZW18bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtZWRpdW18bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1kcm9wfG5vLXJlcGVhdHxudy1yZXNpemV8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG9ibGlxdWV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cG9pbnRlcnxwcm9ncmVzc3xyZWxhdGl2ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmlnaHR8cmlkZ2V8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbWFsbC1jYXBzfHNvbGlkfHNxdWFyZXxzdGF0aWN8c3RyaWN0fHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRiLXJsfHRleHQtYm90dG9tfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0b3B8dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhhfHVwcGVyLWxhdGlufHVwcGVyLXJvbWFufHVwcGVyY2FzZXx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHplcm8iLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCJhcXVhfGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8b2xpdmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93Ii5zcGxpdCgifCIpKSxmPSJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSIsZz1be3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJydWxlc2V0X2NvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmYrIig/OmVtfGV4fHB4fGNtfG1tfGlufHB0fHBjfGRlZ3xyYWR8Z3JhZHxtc3xzfGh6fGtoenwlKSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXs2fSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXszfSJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LnR5cGUiOmIuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5mdW5jdGlvbiI6Yy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmNvbnN0YW50IjpkLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiJ0ZXh0In0scmVnZXg6IlxcLT9bYS16QS1aX11bYS16QS1aMC05X1xcLV0qIn1dLGg9ZS5jb3B5QXJyYXkoZyk7aC51bnNoaWZ0KHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiXFx9IixuZXh0OiJzdGFydCJ9KTt2YXIgaT1lLmNvcHlBcnJheShnKTtpLnVuc2hpZnQoe3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJcXH0iLG5leHQ6Im1lZGlhIn0pO3ZhciBqPVt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxrPWUuY29weUFycmF5KGopO2sudW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0pO3ZhciBsPWUuY29weUFycmF5KGopO2wudW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6Im1lZGlhIn0pO3ZhciBtPWUuY29weUFycmF5KGopO20udW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InJ1bGVzZXQifSksdGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IlxceyIsbmV4dDoicnVsZXNldCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiQC4qP3siLG5leHQ6Im1lZGlhIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifV0sbWVkaWE6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoibWVkaWFfY29tbWVudCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiXFx7IixuZXh0OiJtZWRpYV9ydWxlc2V0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXH0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifV0sY29tbWVudDprLHJ1bGVzZXQ6aCxydWxlc2V0X2NvbW1lbnQ6bSxtZWRpYV9ydWxlc2V0OmksbWVkaWFfY29tbWVudDpsfX07ZC5pbmhlcml0cyhnLGYpLGIuQ3NzSGlnaGxpZ2h0UnVsZXM9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSwiaSIpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1J1bGVzPSJjU3R5bGUiLHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSkudG9rZW5zO2lmKGUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDt2YXIgZj1iLm1hdGNoKC9eLipce1xzKiQvKTtyZXR1cm4gZiYmKGQrPWMpLGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgaShbImFjZSJdLCJ3b3JrZXItY3NzLmpzIiwiYWNlL21vZGUvY3NzX3dvcmtlciIsIldvcmtlciIpO3JldHVybiBiLmF0dGFjaFRvRG9jdW1lbnQoYS5nZXREb2N1bWVudCgpKSxiLm9uKCJjc3NsaW50IixmdW5jdGlvbihiKXt2YXIgYz1bXTtiLmRhdGEuZm9yRWFjaChmdW5jdGlvbihhKXtjLnB1c2goe3JvdzphLmxpbmUtMSxjb2x1bW46YS5jb2wtMSx0ZXh0OmEubWVzc2FnZSx0eXBlOmEudHlwZSxsaW50OmF9KX0pLGEuc2V0QW5ub3RhdGlvbnMoYyl9KSxifX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxkZWZpbmUoImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCItbW96LWFwcGVhcmFuY2V8LW1vei1ib3gtc2l6aW5nfC13ZWJraXQtYm94LXNpemluZ3wtbW96LW91dGxpbmUtcmFkaXVzfC1tb3otdHJhbnNmb3JtfC13ZWJraXQtdHJhbnNmb3JtfGFwcGVhcmFuY2V8YXppbXV0aHxiYWNrZ3JvdW5kLWF0dGFjaG1lbnR8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtb3JpZ2lufGJhY2tncm91bmQtcG9zaXRpb258YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZHxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItYm90dG9tfGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXJpZ2h0fGJvcmRlci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItdG9wfGJvcmRlci13aWR0aHxib3JkZXJ8Ym90dG9tfGJveC1zaXppbmd8Y2FwdGlvbi1zaWRlfGNsZWFyfGNsaXB8Y29sb3J8Y29udGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGN1ZS1hZnRlcnxjdWUtYmVmb3JlfGN1ZXxjdXJzb3J8ZGlyZWN0aW9ufGRpc3BsYXl8ZWxldmF0aW9ufGVtcHR5LWNlbGxzfGZsb2F0fGZvbnQtZmFtaWx5fGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zaXplfGZvbnQtc3RyZXRjaHxmb250LXN0eWxlfGZvbnQtdmFyaWFudHxmb250LXdlaWdodHxmb250fGhlaWdodHxsZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpc3Qtc3R5bGUtaW1hZ2V8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLXR5cGV8bGlzdC1zdHlsZXxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1hcmtlci1vZmZzZXR8bWFyZ2lufG1hcmtzfG1heC1oZWlnaHR8bWF4LXdpZHRofG1pbi1oZWlnaHR8bWluLXdpZHRofC1tb3otYm9yZGVyLXJhZGl1c3xvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLXJhZGl1c3xvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZy1ib3R0b218cGFkZGluZy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2V8cGF1c2UtYWZ0ZXJ8cGF1c2UtYmVmb3JlfHBhdXNlfHBpdGNoLXJhbmdlfHBpdGNofHBsYXktZHVyaW5nfHBvaW50ZXItZXZlbnRzfHBvc2l0aW9ufHF1b3Rlc3xyZXNpemV8cmljaG5lc3N8cmlnaHR8c2l6ZXxzcGVhay1oZWFkZXJ8c3BlYWstbnVtZXJhbHxzcGVhay1wdW5jdHVhdGlvbnxzcGVlY2gtcmF0ZXxzcGVha3xzdHJlc3N8dGFibGUtbGF5b3V0fHRleHQtYWxpZ258dGV4dC1kZWNvcmF0aW9ufHRleHQtaW5kZW50fHRleHQtc2hhZG93fHRleHQtdHJhbnNmb3JtfHRvcHx0cmFuc2Zvcm18dW5pY29kZS1iaWRpfHZlcnRpY2FsLWFsaWdufHZpc2liaWxpdHl8dm9pY2UtZmFtaWx5fHZvbHVtZXx3aGl0ZS1zcGFjZXx3aWRvd3N8d2lkdGh8d29yZC1zcGFjaW5nfHotaW5kZXgiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJyZ2J8cmdiYXx1cmx8YXR0cnxjb3VudGVyfGNvdW50ZXJzIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgiYWJzb2x1dGV8YWxsLXNjcm9sbHxhbHdheXN8YXJtZW5pYW58YXV0b3xiYXNlbGluZXxiZWxvd3xiaWRpLW92ZXJyaWRlfGJsb2NrfGJvbGR8Ym9sZGVyfGJvcmRlci1ib3h8Ym90aHxib3R0b218YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjZW50ZXJ8Y2hhcnxjaXJjbGV8Y2prLWlkZW9ncmFwaGljfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29udGVudC1ib3h8Y3Jvc3NoYWlyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXN0cmlidXRlLWFsbC1saW5lc3xkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGV8ZG90dGVkfGRvdWJsZXxlLXJlc2l6ZXxlbGxpcHNpc3xmaXhlZHxnZW9yZ2lhbnxncm9vdmV8aGFuZHxoZWJyZXd8aGVscHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRhbHxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpbmFjdGl2ZXxpbmhlcml0fGlubGluZS1ibG9ja3xpbmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13b3JkfGl0YWxpY3xqdXN0aWZ5fGthdGFrYW5hLWlyb2hhfGthdGFrYW5hfGtlZXAtYWxsfGxlZnR8bGlnaHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGlzdC1pdGVtfGxvb3NlfGxvd2VyLWFscGhhfGxvd2VyLWdyZWVrfGxvd2VyLWxhdGlufGxvd2VyLXJvbWFufGxvd2VyY2FzZXxsci10YnxsdHJ8bWVkaXVtfG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJlc2l6ZXxuZXdzcGFwZXJ8bm8tZHJvcHxuby1yZXBlYXR8bnctcmVzaXplfG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxvYmxpcXVlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBvaW50ZXJ8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJpZ2h0fHJpZGdlfHJvdy1yZXNpemV8cnRsfHMtcmVzaXplfHNjcm9sbHxzZS1yZXNpemV8c2VwYXJhdGV8c21hbGwtY2Fwc3xzb2xpZHxzcXVhcmV8c3RhdGljfHN0cmljdHxzdXBlcnxzdy1yZXNpemV8dGFibGUtZm9vdGVyLWdyb3VwfHRhYmxlLWhlYWRlci1ncm91cHx0Yi1ybHx0ZXh0LWJvdHRvbXx0ZXh0LXRvcHx0ZXh0fHRoaWNrfHRoaW58dG9wfHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1cHBlci1yb21hbnx1cHBlcmNhc2V8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6ZXJvIi5zcGxpdCgifCIpKSxkPWUuYXJyYXlUb01hcCgiYXF1YXxibGFja3xibHVlfGZ1Y2hzaWF8Z3JheXxncmVlbnxsaW1lfG1hcm9vbnxuYXZ5fG9saXZlfG9yYW5nZXxwdXJwbGV8cmVkfHNpbHZlcnx0ZWFsfHdoaXRlfHllbGxvdyIuc3BsaXQoInwiKSksZj0iXFwtPyg/Oig/OlswLTldKyl8KD86WzAtOV0qXFwuWzAtOV0rKSkiLGc9W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoicnVsZXNldF9jb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDpmKyIoPzplbXxleHxweHxjbXxtbXxpbnxwdHxwY3xkZWd8cmFkfGdyYWR8bXN8c3xoenxraHp8JSkifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIjW2EtZjAtOV17Nn0ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIjW2EtZjAtOV17M30ifSx7dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC50eXBlIjpiLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuZnVuY3Rpb24iOmMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5jb25zdGFudCI6ZC5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmNvbnN0YW50LmNvbG9yIjoidGV4dCJ9LHJlZ2V4OiJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiJ9XSxoPWUuY29weUFycmF5KGcpO2gudW5zaGlmdCh7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IlxcfSIsbmV4dDoic3RhcnQifSk7dmFyIGk9ZS5jb3B5QXJyYXkoZyk7aS51bnNoaWZ0KHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiXFx9IixuZXh0OiJtZWRpYSJ9KTt2YXIgaj1be3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0saz1lLmNvcHlBcnJheShqKTtrLnVuc2hpZnQoe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9KTt2YXIgbD1lLmNvcHlBcnJheShqKTtsLnVuc2hpZnQoe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJtZWRpYSJ9KTt2YXIgbT1lLmNvcHlBcnJheShqKTttLnVuc2hpZnQoe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJydWxlc2V0In0pLHRoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJcXHsiLG5leHQ6InJ1bGVzZXQifSx7dG9rZW46InN0cmluZyIscmVnZXg6IkAuKj97IixuZXh0OiJtZWRpYSJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IiNbYS16MC05LV9dKyJ9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiJcXC5bYS16MC05LV9dKyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiOlthLXowLTktX10rIn0se3Rva2VuOiJjb25zdGFudCIscmVnZXg6IlthLXowLTktX10rIn1dLG1lZGlhOlt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6Im1lZGlhX2NvbW1lbnQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IlxceyIsbmV4dDoibWVkaWFfcnVsZXNldCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFx9IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IiNbYS16MC05LV9dKyJ9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiJcXC5bYS16MC05LV9dKyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiOlthLXowLTktX10rIn0se3Rva2VuOiJjb25zdGFudCIscmVnZXg6IlthLXowLTktX10rIn1dLGNvbW1lbnQ6ayxydWxlc2V0OmgscnVsZXNldF9jb21tZW50Om0sbWVkaWFfcnVsZXNldDppLG1lZGlhX2NvbW1lbnQ6bH19O2QuaW5oZXJpdHMoZyxmKSxiLkNzc0hpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWZ1bmN0aW9uKGIsZCxlLGYpe3RoaXMuY2hhbmdlTGlzdGVuZXI9dGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO2lmKGMucGFja2FnZWQpe3ZhciBnPXRoaXMuJGd1ZXNzQmFzZVBhdGgoKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihnK2QpfWVsc2V7dmFyIGg9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXIiLG51bGwsIl8iKSk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoaCk7dmFyIGk9e307Zm9yKHZhciBqPTA7ajxiLmxlbmd0aDtqKyspe3ZhciBrPWJbal0sbD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKGssbnVsbCwiXyIpLnJlcGxhY2UoLy5qcyQvLCIiKSk7aVtrXT1sfX10aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczppLG1vZHVsZTplLGNsYXNzbmFtZTpmfSksdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5jYWxsYmFja3M9e307dmFyIG09dGhpczt0aGlzLiR3b3JrZXIub25lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyB3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpLGF9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLnR5cGUpe2Nhc2UibG9nIjp3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGIuZGF0YSk7YnJlYWs7Y2FzZSJldmVudCI6bS5fZW1pdChiLm5hbWUse2RhdGE6Yi5kYXRhfSk7YnJlYWs7Y2FzZSJjYWxsIjp2YXIgYz1tLmNhbGxiYWNrc1tiLmlkXTtjJiYoYyhiLmRhdGEpLGRlbGV0ZSBtLmNhbGxiYWNrc1tiLmlkXSl9fX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoL15bYS16XSs6XC9cL1teXC9dK1wvLywiIiksYT1sb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QrKGEuY2hhckF0KDApPT0iLyI/IiI6bG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywiIikpKyIvIithLnJlcGxhY2UoL15bXC9dKy8sIiIpLGF9LHRoaXMuJGd1ZXNzQmFzZVBhdGg9ZnVuY3Rpb24oKXtpZihhLmFjZUJhc2VVcmwpcmV0dXJuIGEuYWNlQmFzZVVybDt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS1hY2UtYmFzZSIpO2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvXC8qJC8sIi8iKTt2YXIgZj1kLnNyY3x8ZC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFmKWNvbnRpbnVlO3ZhciBnPWYubWF0Y2goL14oPzooLipcLylhY2VcLmpzfCguKlwvKWFjZSgtdW5jb21wcmVzc2VkKT8oLW5vY29uZmxpY3QpP1wuanMpKD86XD98JCkvKTtpZihnKXJldHVybiBnWzFdfHxnWzJdfXJldHVybiIifSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX2VtaXQoInRlcm1pbmF0ZSIse30pLHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbCx0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmEsYXJnczpifSl9LHRoaXMuY2FsbD1mdW5jdGlvbihhLGIsYyl7aWYoYyl7dmFyIGQ9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3NbZF09YyxiLnB1c2goZCl9dGhpcy5zZW5kKGEsYil9LHRoaXMuZW1pdD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmEsZGF0YTp7ZGF0YTpiLmRhdGF9fSl9Y2F0Y2goYyl7fX0sdGhpcy5hdHRhY2hUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe3RoaXMuJGRvYyYmdGhpcy50ZXJtaW5hdGUoKSx0aGlzLiRkb2M9YSx0aGlzLmNhbGwoInNldFZhbHVlIixbYS5nZXRWYWx1ZSgpXSksYS5vbigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKX0sdGhpcy5jaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbihhKXthLnJhbmdlPXtzdGFydDphLmRhdGEucmFuZ2Uuc3RhcnQsZW5kOmEuZGF0YS5yYW5nZS5lbmR9LHRoaXMuZW1pdCgiY2hhbmdlIixhKX19KSkuY2FsbChmLnByb3RvdHlwZSksYi5Xb3JrZXJDbGllbnQ9Zn0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGY9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxnPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9O2QuaW5oZXJpdHMoZyxmKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPS8oXHt8XFspW15cfVxdXSokfF5ccyooXC9cKikvLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9L15bXlxbXHtdKihcfXxcXSl8Xltcc1wqXSooXCpcLykvLHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyksZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4O2lmKGZbMV0pcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhhLGZbMV0sYyxnKTt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnK2ZbMF0ubGVuZ3RoKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9aWYoYiE9PSJtYXJrYmVnaW5lbmQiKXJldHVybjt2YXIgZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXgrZlswXS5sZW5ndGg7aWYoZlsyXSl7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZyk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofXZhciBpPXtyb3c6Yyxjb2x1bW46Z30saj1hLiRmaW5kT3BlbmluZ0JyYWNrZXQoZlsxXSxpKTtpZighailyZXR1cm47cmV0dXJuIGouY29sdW1uKyssaS5jb2x1bW4tLSxlLmZyb21Qb2ludHMoaixpKX19fS5jYWxsKGcucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-c_cpp-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvY19jcHAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvY19jcHBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vY19jcHBfaGlnaGxpZ2h0X3J1bGVzIikuY19jcHBIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixrPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxsPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGosdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGt9O2QuaW5oZXJpdHMobCxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQiKXt2YXIgaD1iLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTtoJiYoZCs9Yyl9ZWxzZSBpZihhPT0iZG9jLXN0YXJ0Iil7aWYoZz09InN0YXJ0IilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9fS5jYWxsKGwucHJvdG90eXBlKSxiLk1vZGU9bH0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxnPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaD1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYW5kfGRvdWJsZXxub3RfZXF8dGhyb3d8YW5kX2VxfGR5bmFtaWNfY2FzdHxvcGVyYXRvcnx0cnVlfGFzbXxlbHNlfG9yfHRyeXxhdXRvfGVudW18b3JfZXF8dHlwZWRlZnxiaXRhbmR8ZXhwbGljaXR8cHJpdmF0ZXx0eXBlaWR8Yml0b3J8ZXh0ZXJufHByb3RlY3RlZHx0eXBlbmFtZXxib29sfGZhbHNlfHB1YmxpY3x1bmlvbnxicmVha3xmbG9hdHxyZWdpc3Rlcnx1bnNpZ25lZHxjYXNlfGZyb3xyZWludGVycHJldC1jYXN0fHVzaW5nfGNhdGNofGZyaWVuZHxyZXR1cm58dmlydHVhbHxjaGFyfGdvdG98c2hvcnR8dm9pZHxjbGFzc3xpZnxzaWduZWR8dm9sYXRpbGV8Y29tcGx8aW5saW5lfHNpemVvZnx3Y2hhcl90fGNvbnN0fGludHxzdGF0aWN8d2hpbGV8Y29uc3QtY2FzdHxsb25nfHN0YXRpY19jYXN0fHhvcnxjb250aW51ZXxtdXRhYmxlfHN0cnVjdHx4b3JfZXF8ZGVmYXVsdHxuYW1lc3BhY2V8c3dpdGNofGRlbGV0ZXxuZXd8dGVtcGxhdGV8ZG98bm90fHRoaXN8Zm9yIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgiTlVMTCIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGYpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiPFthLXpBLVowLTkuXSs+In0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiKD86I2luY2x1ZGV8I3ByYWdtYXwjbGluZXwjZGVmaW5lfCN1bmRlZnwjaWZkZWZ8I2Vsc2V8I2VsaWZ8I2VuZGlmfCNpZm5kZWYpIn0se3Rva2VuOmZ1bmN0aW9uKGMpe3JldHVybiBjPT0idGhpcyI/InZhcmlhYmxlLmxhbmd1YWdlIjphLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PXw9fCE9fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkifSx7dG9rZW46InB1bmN0dWF0aW9uLm9wZXJhdG9yIixyZWdleDoiXFw/fFxcOnxcXCx8XFw7fFxcLiJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGYsImRvYy0iLFsobmV3IGYpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhoLGcpLGIuY19jcHBIaWdobGlnaHRSdWxlcz1ofSksYWNlLmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWZ1bmN0aW9uKCl7dGhpcy5hZGQoImJyYWNlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0ieyIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiJ7IitnKyJ9IixzZWxlY3Rpb246ITF9Ont0ZXh0OiJ7fSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0ifSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgbD1kLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpoLnJvdyxjb2x1bW46aC5jb2x1bW4rMX0pO2lmKCFsKXJldHVybiBudWxsO3ZhciBtPXRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoYSxpLnN1YnN0cmluZygwLGkubGVuZ3RoLTEpLGQuZ2V0VGFiU3RyaW5nKCkpLG49dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUobC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK20rIlxuIituLHNlbGVjdGlvbjpbMSxtLmxlbmd0aCwxLG0ubGVuZ3RoXX19fX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09InsiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixlLmVuZC5jb2x1bW4rMSk7aWYoaD09In0iKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IigiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoiKCIrZysiKSIsc2VsZWN0aW9uOiExfTp7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09IikiKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSIpIil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCIpIix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInBhcmVucyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0iKCIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0iKSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSciJyl7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO2lmKGchPT0iIilyZXR1cm57dGV4dDonIicrZysnIicsc2VsZWN0aW9uOiExfTt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLTEsaC5jb2x1bW4pO2lmKGo9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGs9ZC5nZXRUb2tlbnMoZi5zdGFydC5yb3csZi5zdGFydC5yb3cpWzBdLnRva2VucyxsPTAsbSxuPS0xO2Zvcih2YXIgbz0wO288ay5sZW5ndGg7bysrKXttPWtbb10sbS50eXBlPT0ic3RyaW5nIj9uPS0xOm48MCYmKG49bS52YWx1ZS5pbmRleE9mKCciJykpO2lmKG0udmFsdWUubGVuZ3RoK2w+Zi5zdGFydC5jb2x1bW4pYnJlYWs7bCs9a1tvXS52YWx1ZS5sZW5ndGh9aWYoIW18fG48MCYmbS50eXBlIT09ImNvbW1lbnQiJiYobS50eXBlIT09InN0cmluZyJ8fGYuc3RhcnQuY29sdW1uIT09bS52YWx1ZS5sZW5ndGgrbC0xJiZtLnZhbHVlLmxhc3RJbmRleE9mKCciJyk9PT1tLnZhbHVlLmxlbmd0aC0xKSlyZXR1cm57dGV4dDonIiInLHNlbGVjdGlvbjpbMSwxXX07aWYobSYmbS50eXBlPT09InN0cmluZyIpe3ZhciBwPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKHA9PSciJylyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09JyInKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09JyInKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pfTtkLmluaGVyaXRzKGYsZSksYi5Dc3R5bGVCZWhhdmlvdXI9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-c_cpp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jX2NwcCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9jX2NwcF9oaWdobGlnaHRfcnVsZXMiKS5jX2NwcEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9YSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGs9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLGw9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuJGJlaGF2aW91cj1uZXcgaix0aGlzLmZvbGRpbmdSdWxlcz1uZXcga307ZC5pbmhlcml0cyhsLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopXC9cLy87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBoPW5ldyBpKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2guc3RhcnQucm93PWcsaC5lbmQucm93PWcsaC5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShoLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIi8vIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucyxnPWUuc3RhdGU7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCIpe3ZhciBoPWIubWF0Y2goL14uKltce1woXFtdXHMqJC8pO2gmJihkKz1jKX1lbHNlIGlmKGE9PSJkb2Mtc3RhcnQiKXtpZihnPT0ic3RhcnQiKXJldHVybiIiO3ZhciBoPWIubWF0Y2goL15ccyooXC8/KVwqLyk7aCYmKGhbMV0mJihkKz0iICIpLGQrPSIqICIpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksZGVmaW5lKCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImFuZHxkb3VibGV8bm90X2VxfHRocm93fGFuZF9lcXxkeW5hbWljX2Nhc3R8b3BlcmF0b3J8dHJ1ZXxhc218ZWxzZXxvcnx0cnl8YXV0b3xlbnVtfG9yX2VxfHR5cGVkZWZ8Yml0YW5kfGV4cGxpY2l0fHByaXZhdGV8dHlwZWlkfGJpdG9yfGV4dGVybnxwcm90ZWN0ZWR8dHlwZW5hbWV8Ym9vbHxmYWxzZXxwdWJsaWN8dW5pb258YnJlYWt8ZmxvYXR8cmVnaXN0ZXJ8dW5zaWduZWR8Y2FzZXxmcm98cmVpbnRlcnByZXQtY2FzdHx1c2luZ3xjYXRjaHxmcmllbmR8cmV0dXJufHZpcnR1YWx8Y2hhcnxnb3RvfHNob3J0fHZvaWR8Y2xhc3N8aWZ8c2lnbmVkfHZvbGF0aWxlfGNvbXBsfGlubGluZXxzaXplb2Z8d2NoYXJfdHxjb25zdHxpbnR8c3RhdGljfHdoaWxlfGNvbnN0LWNhc3R8bG9uZ3xzdGF0aWNfY2FzdHx4b3J8Y29udGludWV8bXV0YWJsZXxzdHJ1Y3R8eG9yX2VxfGRlZmF1bHR8bmFtZXNwYWNlfHN3aXRjaHxkZWxldGV8bmV3fHRlbXBsYXRlfGRvfG5vdHx0aGlzfGZvciIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIk5VTEwiLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBmKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJjb25zdGFudCIscmVnZXg6IjxbYS16QS1aMC05Ll0rPiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiNpbmNsdWRlfCNwcmFnbWF8I2xpbmV8I2RlZmluZXwjdW5kZWZ8I2lmZGVmfCNlbHNlfCNlbGlmfCNlbmRpZnwjaWZuZGVmKSJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYz09InRoaXMiPyJ2YXJpYWJsZS5sYW5ndWFnZSI6YS5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT18PXwhPXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4ifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhmLCJkb2MtIixbKG5ldyBmKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaCxnKSxiLmNfY3BwSGlnaGxpZ2h0UnVsZXM9aH0pLGRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-groovy-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvZ3Jvb3Z5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2dyb292eV9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vamF2YXNjcmlwdCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2dyb292eV9oaWdobGlnaHRfcnVsZXMiKS5Hcm9vdnlIaWdobGlnaHRSdWxlcyxoPWZ1bmN0aW9uKCl7ZS5jYWxsKHRoaXMpLHRoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpfTtkLmluaGVyaXRzKGgsZSksZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbH19LmNhbGwoaC5wcm90b3R5cGUpLGIuTW9kZT1ofSksYWNlLmRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9YSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaz1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsbD1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsbT1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBrLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBsfTtkLmluaGVyaXRzKG0sZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKilcL1wvLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiLy8iKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zLGc9ZS5zdGF0ZTtpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Inx8YT09InJlZ2V4X2FsbG93ZWQiKXt2YXIgaD1iLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7XChcW10pXHMqJC8pO2gmJihkKz1jKX1lbHNlIGlmKGE9PSJkb2Mtc3RhcnQiKXtpZihnPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpcmV0dXJuIiI7dmFyIGg9Yi5tYXRjaCgvXlxzKihcLz8pXCovKTtoJiYoaFsxXSYmKGQrPSIgIiksZCs9IiogIil9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgaihbImFjZSJdLCJ3b3JrZXItamF2YXNjcmlwdC5qcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwiSmF2YVNjcmlwdFdvcmtlciIpO3JldHVybiBiLmF0dGFjaFRvRG9jdW1lbnQoYS5nZXREb2N1bWVudCgpKSxiLm9uKCJqc2xpbnQiLGZ1bmN0aW9uKGIpe3ZhciBjPVtdO2Zvcih2YXIgZD0wO2Q8Yi5kYXRhLmxlbmd0aDtkKyspe3ZhciBlPWIuZGF0YVtkXTtlJiZjLnB1c2goe3JvdzplLmxpbmUtMSxjb2x1bW46ZS5jaGFyYWN0ZXItMSx0ZXh0OmUucmVhc29uLHR5cGU6Indhcm5pbmciLGxpbnQ6ZX0pfWEuc2V0QW5ub3RhdGlvbnMoYyl9KSxiLm9uKCJuYXJjaXNzdXMiLGZ1bmN0aW9uKGIpe2Euc2V0QW5ub3RhdGlvbnMoW2IuZGF0YV0pfSksYi5vbigidGVybWluYXRlIixmdW5jdGlvbigpe2EuY2xlYXJBbm5vdGF0aW9ucygpfSksYn19LmNhbGwobS5wcm90b3R5cGUpLGIuTW9kZT1tfSksYWNlLmRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS91bmljb2RlIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuLi91bmljb2RlIiksZz1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxoPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaT1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXxOYW1lc3BhY2V8UU5hbWV8WE1MfFhNTExpc3R8QXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fFVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXl8RXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufFN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnxkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNvZGVVUklDb21wb25lbnR8ZXZhbHxpc0Zpbml0ZXxpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fEpTT058TWF0aHx0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50Ii5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGlmfGlufGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8Y29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXQiLnNwbGl0KCJ8IikpLGM9ImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGQiLGQ9ZS5hcnJheVRvTWFwKCJfX3BhcmVudF9ffF9fY291bnRfX3xlc2NhcGV8dW5lc2NhcGV8d2l0aHxfX3Byb3RvX18iLnNwbGl0KCJ8IikpLGg9ZS5hcnJheVRvTWFwKCJjb25zdHxsZXR8dmFyfGZ1bmN0aW9uIi5zcGxpdCgifCIpKSxpPWUuYXJyYXlUb01hcCgibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIi5zcGxpdCgifCIpKSxqPWUuYXJyYXlUb01hcCgiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLnNwbGl0KCJ8IikpLGs9IlsiK2YucGFja2FnZXMuTCsiXFwkX11bIitmLnBhY2thZ2VzLkwrZi5wYWNrYWdlcy5NbitmLnBhY2thZ2VzLk1jK2YucGFja2FnZXMuTmQrZi5wYWNrYWdlcy5QYysiXFwkX10qXFxiIjt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LChuZXcgZykuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qXFxcXCQnLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKlxcXFwkIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjpbImtleXdvcmQuZGVmaW5pdGlvbiIsInRleHQiLCJlbnRpdHkubmFtZS5mdW5jdGlvbiJdLHJlZ2V4OiIoZnVuY3Rpb24pKFxccyspKCIraysiKSJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIscmVnZXg6Iig/OnRydWV8ZmFsc2UpXFxiIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiKD86IitjKyIpXFxiIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOmZ1bmN0aW9uKGMpe3JldHVybiBhLmhhc093blByb3BlcnR5KGMpPyJ2YXJpYWJsZS5sYW5ndWFnZSI6ZC5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5kZXByZWNhdGVkIjpoLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkLmRlZmluaXRpb24iOmIuaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQiOmkuaGFzT3duUHJvcGVydHkoYyk/ImNvbnN0YW50Lmxhbmd1YWdlIjpqLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmlsbGVnYWwiOmM9PSJkZWJ1Z2dlciI/ImludmFsaWQuZGVwcmVjYXRlZCI6ImlkZW50aWZpZXIifSxyZWdleDprfSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InB1bmN0dWF0aW9uLm9wZXJhdG9yIixyZWdleDoiXFw/fFxcOnxcXCx8XFw7fFxcLiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXC89PyIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6Il4jIS4qJCJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0scmVnZXhfYWxsb3dlZDpbe3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50X3JlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJcXC8iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLHJlZ2V4Olt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4In0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiL1xcdyoiLG5leHQ6InN0YXJ0IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiW15cXFxcL1xcW10rIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJcXFsiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIsbWVyZ2U6ITB9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLHJlZ2V4X2NoYXJhY3Rlcl9jbGFzczpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MifSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXSIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiW15cXFxcXFxdXSsiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIsbWVyZ2U6ITB9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLGNvbW1lbnRfcmVnZXhfYWxsb3dlZDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixtZXJnZTohMCxuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixtZXJnZTohMCxuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj8iJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSx0aGlzLmVtYmVkUnVsZXMoZywiZG9jLSIsWyhuZXcgZykuZ2V0RW5kUnVsZSgic3RhcnQiKV0pfTtkLmluaGVyaXRzKGksaCksYi5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM9aX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlx9Ly50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcfSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KSkuY2FsbChlLnByb3RvdHlwZSksYi5NYXRjaGluZ0JyYWNlT3V0ZGVudD1lfSksYWNlLmRlZmluZSgiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLGY9ZnVuY3Rpb24oYixkLGUsZil7dGhpcy5jaGFuZ2VMaXN0ZW5lcj10aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyk7aWYoYy5wYWNrYWdlZCl7dmFyIGc9dGhpcy4kZ3Vlc3NCYXNlUGF0aCgpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGcrZCl9ZWxzZXt2YXIgaD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlciIsbnVsbCwiXyIpKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihoKTt2YXIgaT17fTtmb3IodmFyIGo9MDtqPGIubGVuZ3RoO2orKyl7dmFyIGs9YltqXSxsPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoayxudWxsLCJfIikucmVwbGFjZSgvLmpzJC8sIiIpKTtpW2tdPWx9fXRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7aW5pdDohMCx0bG5zOmksbW9kdWxlOmUsY2xhc3NuYW1lOmZ9KSx0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLmNhbGxiYWNrcz17fTt2YXIgbT10aGlzO3RoaXMuJHdvcmtlci5vbmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IHdpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2coYSksYX0sdGhpcy4kd29ya2VyLm9ubWVzc2FnZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRhdGE7c3dpdGNoKGIudHlwZSl7Y2FzZSJsb2ciOndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2coYi5kYXRhKTticmVhaztjYXNlImV2ZW50IjptLl9lbWl0KGIubmFtZSx7ZGF0YTpiLmRhdGF9KTticmVhaztjYXNlImNhbGwiOnZhciBjPW0uY2FsbGJhY2tzW2IuaWRdO2MmJihjKGIuZGF0YSksZGVsZXRlIG0uY2FsbGJhY2tzW2IuaWRdKX19fTsoKGZ1bmN0aW9uKCl7ZC5pbXBsZW1lbnQodGhpcyxlKSx0aGlzLiRub3JtYWxpemVQYXRoPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZSgvXlthLXpdKzpcL1wvW15cL10rXC8vLCIiKSxhPWxvY2F0aW9uLnByb3RvY29sKyIvLyIrbG9jYXRpb24uaG9zdCsoYS5jaGFyQXQoMCk9PSIvIj8iIjpsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cL1teXC9dKiQvLCIiKSkrIi8iK2EucmVwbGFjZSgvXltcL10rLywiIiksYX0sdGhpcy4kZ3Vlc3NCYXNlUGF0aD1mdW5jdGlvbigpe2lmKGEuYWNlQmFzZVVybClyZXR1cm4gYS5hY2VCYXNlVXJsO3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXSxlPWQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjZS1iYXNlIik7aWYoZSlyZXR1cm4gZS5yZXBsYWNlKC9cLyokLywiLyIpO3ZhciBmPWQuc3JjfHxkLmdldEF0dHJpYnV0ZSgic3JjIik7aWYoIWYpY29udGludWU7dmFyIGc9Zi5tYXRjaCgvXig/OiguKlwvKWFjZVwuanN8KC4qXC8pYWNlKC11bmNvbXByZXNzZWQpPygtbm9jb25mbGljdCk/XC5qcykoPzpcP3wkKS8pO2lmKGcpcmV0dXJuIGdbMV18fGdbMl19cmV0dXJuIiJ9LHRoaXMudGVybWluYXRlPWZ1bmN0aW9uKCl7dGhpcy5fZW1pdCgidGVybWluYXRlIix7fSksdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpLHRoaXMuJHdvcmtlcj1udWxsLHRoaXMuJGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuY2hhbmdlTGlzdGVuZXIpLHRoaXMuJGRvYz1udWxsfSx0aGlzLnNlbmQ9ZnVuY3Rpb24oYSxiKXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6YSxhcmdzOmJ9KX0sdGhpcy5jYWxsPWZ1bmN0aW9uKGEsYixjKXtpZihjKXt2YXIgZD10aGlzLmNhbGxiYWNrSWQrKzt0aGlzLmNhbGxiYWNrc1tkXT1jLGIucHVzaChkKX10aGlzLnNlbmQoYSxiKX0sdGhpcy5lbWl0PWZ1bmN0aW9uKGEsYil7dHJ5e3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7ZXZlbnQ6YSxkYXRhOntkYXRhOmIuZGF0YX19KX1jYXRjaChjKXt9fSx0aGlzLmF0dGFjaFRvRG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dGhpcy4kZG9jJiZ0aGlzLnRlcm1pbmF0ZSgpLHRoaXMuJGRvYz1hLHRoaXMuY2FsbCgic2V0VmFsdWUiLFthLmdldFZhbHVlKCldKSxhLm9uKCJjaGFuZ2UiLHRoaXMuY2hhbmdlTGlzdGVuZXIpfSx0aGlzLmNoYW5nZUxpc3RlbmVyPWZ1bmN0aW9uKGEpe2EucmFuZ2U9e3N0YXJ0OmEuZGF0YS5yYW5nZS5zdGFydCxlbmQ6YS5kYXRhLnJhbmdlLmVuZH0sdGhpcy5lbWl0KCJjaGFuZ2UiLGEpfX0pKS5jYWxsKGYucHJvdG90eXBlKSxiLldvcmtlckNsaWVudD1mfSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2dyb292eV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImFzc2VydHx3aXRofGFic3RyYWN0fGNvbnRpbnVlfGZvcnxuZXd8c3dpdGNofGFzc2VydHxkZWZhdWx0fGdvdG98cGFja2FnZXxzeW5jaHJvbml6ZWR8Ym9vbGVhbnxkb3xpZnxwcml2YXRlfHRoaXN8YnJlYWt8ZG91YmxlfGltcGxlbWVudHN8cHJvdGVjdGVkfHRocm93fGJ5dGV8ZWxzZXxpbXBvcnR8cHVibGljfHRocm93c3xjYXNlfGVudW18aW5zdGFuY2VvZnxyZXR1cm58dHJhbnNpZW50fGNhdGNofGV4dGVuZHN8aW50fHNob3J0fHRyeXxjaGFyfGZpbmFsfGludGVyZmFjZXxzdGF0aWN8dm9pZHxjbGFzc3xmaW5hbGx5fGxvbmd8c3RyaWN0ZnB8dm9sYXRpbGV8ZGVmfGZsb2F0fG5hdGl2ZXxzdXBlcnx3aGlsZSIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoIkFic3RyYWN0TWV0aG9kRXJyb3J8QXNzZXJ0aW9uRXJyb3J8Q2xhc3NDaXJjdWxhcml0eUVycm9yfENsYXNzRm9ybWF0RXJyb3J8RGVwcmVjYXRlZHxFbnVtQ29uc3RhbnROb3RQcmVzZW50RXhjZXB0aW9ufEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvcnxJbGxlZ2FsQWNjZXNzRXJyb3J8SWxsZWdhbFRocmVhZFN0YXRlRXhjZXB0aW9ufEluc3RhbnRpYXRpb25FcnJvcnxJbnRlcm5hbEVycm9yfE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9ufE5vU3VjaEZpZWxkRXJyb3J8T3ZlcnJpZGV8UHJvY2Vzc3xQcm9jZXNzQnVpbGRlcnxTZWN1cml0eU1hbmFnZXJ8U3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxTdXBwcmVzc1dhcm5pbmdzfFR5cGVOb3RQcmVzZW50RXhjZXB0aW9ufFVua25vd25FcnJvcnxVbnNhdGlzZmllZExpbmtFcnJvcnxVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yfFZlcmlmeUVycm9yfEluc3RhbnRpYXRpb25FeGNlcHRpb258SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258Q2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb258Tm9TdWNoRmllbGRFeGNlcHRpb258SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9ufE51bWJlckZvcm1hdEV4Y2VwdGlvbnxTZWN1cml0eUV4Y2VwdGlvbnxWb2lkfEluaGVyaXRhYmxlVGhyZWFkTG9jYWx8SWxsZWdhbFN0YXRlRXhjZXB0aW9ufEludGVycnVwdGVkRXhjZXB0aW9ufE5vU3VjaE1ldGhvZEV4Y2VwdGlvbnxJbGxlZ2FsQWNjZXNzRXhjZXB0aW9ufFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ufEVudW18U3RyaWN0TWF0aHxQYWNrYWdlfENvbXBpbGVyfFJlYWRhYmxlfFJ1bnRpbWV8U3RyaW5nQnVpbGRlcnxNYXRofEluY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3J8Tm9TdWNoTWV0aG9kRXJyb3J8VGhyZWFkTG9jYWx8UnVudGltZVBlcm1pc3Npb258QXJpdGhtZXRpY0V4Y2VwdGlvbnxOdWxsUG9pbnRlckV4Y2VwdGlvbnxMb25nfEludGVnZXJ8U2hvcnR8Qnl0ZXxEb3VibGV8TnVtYmVyfEZsb2F0fENoYXJhY3RlcnxCb29sZWFufFN0YWNrVHJhY2VFbGVtZW50fEFwcGVuZGFibGV8U3RyaW5nQnVmZmVyfEl0ZXJhYmxlfFRocmVhZEdyb3VwfFJ1bm5hYmxlfFRocmVhZHxJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufFN0YWNrT3ZlcmZsb3dFcnJvcnxPdXRPZk1lbW9yeUVycm9yfFZpcnR1YWxNYWNoaW5lRXJyb3J8QXJyYXlTdG9yZUV4Y2VwdGlvbnxDbGFzc0Nhc3RFeGNlcHRpb258TGlua2FnZUVycm9yfE5vQ2xhc3NEZWZGb3VuZEVycm9yfENsYXNzTm90Rm91bmRFeGNlcHRpb258UnVudGltZUV4Y2VwdGlvbnxFeGNlcHRpb258VGhyZWFkRGVhdGh8RXJyb3J8VGhyb3dhYmxlfFN5c3RlbXxDbGFzc0xvYWRlcnxDbG9uZWFibGV8Q2xhc3N8Q2hhclNlcXVlbmNlfENvbXBhcmFibGV8U3RyaW5nfE9iamVjdCIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoIiIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGYpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiWy9dKD86KD86XFxbKD86XFxcXF18W15cXF1dKStcXF0pfCg/OlxcXFwvfFteXFxdL10pKSpbL11cXHcqXFxzKig/PVspLiw7XXwkKSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gZT09InRoaXMiPyJ2YXJpYWJsZS5sYW5ndWFnZSI6YS5oYXNPd25Qcm9wZXJ0eShlKT8ia2V5d29yZCI6Yy5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6ZC5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShlKT8iY29uc3RhbnQubGFuZ3VhZ2UiOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcPzp8XFw/XFwufFxcKlxcLnw8PT58PX58PT1+fFxcLkB8XFwqXFwuQHxcXC4mfGFzfGlufGlzfCF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSJ9LHt0b2tlbjoibHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGYsImRvYy0iLFsobmV3IGYpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhoLGcpLGIuR3Jvb3Z5SGlnaGxpZ2h0UnVsZXM9aH0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-groovy.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9ncm9vdnkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvZ3Jvb3Z5X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi9qYXZhc2NyaXB0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vZ3Jvb3Z5X2hpZ2hsaWdodF9ydWxlcyIpLkdyb292eUhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXtlLmNhbGwodGhpcyksdGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSl9O2QuaW5oZXJpdHMoaCxlKSxmdW5jdGlvbigpe3RoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsfX0uY2FsbChoLnByb3RvdHlwZSksYi5Nb2RlPWh9KSxkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWEoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGs9YSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGw9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLG09ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuJGJlaGF2aW91cj1uZXcgayx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgbH07ZC5pbmhlcml0cyhtLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopXC9cLy87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBoPW5ldyBpKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2guc3RhcnQucm93PWcsaC5lbmQucm93PWcsaC5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShoLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIi8vIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucyxnPWUuc3RhdGU7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIil7dmFyIGg9Yi5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKlw6fFtce1woXFtdKVxzKiQvKTtoJiYoZCs9Yyl9ZWxzZSBpZihhPT0iZG9jLXN0YXJ0Iil7aWYoZz09InN0YXJ0Inx8YT09InJlZ2V4X2FsbG93ZWQiKXJldHVybiIiO3ZhciBoPWIubWF0Y2goL15ccyooXC8/KVwqLyk7aCYmKGhbMV0mJihkKz0iICIpLGQrPSIqICIpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGooWyJhY2UiXSwid29ya2VyLWphdmFzY3JpcHQuanMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsIkphdmFTY3JpcHRXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigianNsaW50IixmdW5jdGlvbihiKXt2YXIgYz1bXTtmb3IodmFyIGQ9MDtkPGIuZGF0YS5sZW5ndGg7ZCsrKXt2YXIgZT1iLmRhdGFbZF07ZSYmYy5wdXNoKHtyb3c6ZS5saW5lLTEsY29sdW1uOmUuY2hhcmFjdGVyLTEsdGV4dDplLnJlYXNvbix0eXBlOiJ3YXJuaW5nIixsaW50OmV9KX1hLnNldEFubm90YXRpb25zKGMpfSksYi5vbigibmFyY2lzc3VzIixmdW5jdGlvbihiKXthLnNldEFubm90YXRpb25zKFtiLmRhdGFdKX0pLGIub24oInRlcm1pbmF0ZSIsZnVuY3Rpb24oKXthLmNsZWFyQW5ub3RhdGlvbnMoKX0pLGJ9fS5jYWxsKG0ucHJvdG90eXBlKSxiLk1vZGU9bX0pLGRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS91bmljb2RlIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuLi91bmljb2RlIiksZz1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxoPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaT1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXxOYW1lc3BhY2V8UU5hbWV8WE1MfFhNTExpc3R8QXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fFVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXl8RXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufFN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnxkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNvZGVVUklDb21wb25lbnR8ZXZhbHxpc0Zpbml0ZXxpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fEpTT058TWF0aHx0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50Ii5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGlmfGlufGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8Y29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXQiLnNwbGl0KCJ8IikpLGM9ImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGQiLGQ9ZS5hcnJheVRvTWFwKCJfX3BhcmVudF9ffF9fY291bnRfX3xlc2NhcGV8dW5lc2NhcGV8d2l0aHxfX3Byb3RvX18iLnNwbGl0KCJ8IikpLGg9ZS5hcnJheVRvTWFwKCJjb25zdHxsZXR8dmFyfGZ1bmN0aW9uIi5zcGxpdCgifCIpKSxpPWUuYXJyYXlUb01hcCgibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIi5zcGxpdCgifCIpKSxqPWUuYXJyYXlUb01hcCgiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLnNwbGl0KCJ8IikpLGs9IlsiK2YucGFja2FnZXMuTCsiXFwkX11bIitmLnBhY2thZ2VzLkwrZi5wYWNrYWdlcy5NbitmLnBhY2thZ2VzLk1jK2YucGFja2FnZXMuTmQrZi5wYWNrYWdlcy5QYysiXFwkX10qXFxiIjt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LChuZXcgZykuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qXFxcXCQnLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKlxcXFwkIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjpbImtleXdvcmQuZGVmaW5pdGlvbiIsInRleHQiLCJlbnRpdHkubmFtZS5mdW5jdGlvbiJdLHJlZ2V4OiIoZnVuY3Rpb24pKFxccyspKCIraysiKSJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIscmVnZXg6Iig/OnRydWV8ZmFsc2UpXFxiIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiKD86IitjKyIpXFxiIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOmZ1bmN0aW9uKGMpe3JldHVybiBhLmhhc093blByb3BlcnR5KGMpPyJ2YXJpYWJsZS5sYW5ndWFnZSI6ZC5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5kZXByZWNhdGVkIjpoLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkLmRlZmluaXRpb24iOmIuaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQiOmkuaGFzT3duUHJvcGVydHkoYyk/ImNvbnN0YW50Lmxhbmd1YWdlIjpqLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmlsbGVnYWwiOmM9PSJkZWJ1Z2dlciI/ImludmFsaWQuZGVwcmVjYXRlZCI6ImlkZW50aWZpZXIifSxyZWdleDprfSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InB1bmN0dWF0aW9uLm9wZXJhdG9yIixyZWdleDoiXFw/fFxcOnxcXCx8XFw7fFxcLiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXC89PyIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6Il4jIS4qJCJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0scmVnZXhfYWxsb3dlZDpbe3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50X3JlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJcXC8iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLHJlZ2V4Olt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4In0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiL1xcdyoiLG5leHQ6InN0YXJ0IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiW15cXFxcL1xcW10rIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJcXFsiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIsbWVyZ2U6ITB9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLHJlZ2V4X2NoYXJhY3Rlcl9jbGFzczpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MifSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXSIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiW15cXFxcXFxdXSsiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIsbWVyZ2U6ITB9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLGNvbW1lbnRfcmVnZXhfYWxsb3dlZDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixtZXJnZTohMCxuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixtZXJnZTohMCxuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj8iJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSx0aGlzLmVtYmVkUnVsZXMoZywiZG9jLSIsWyhuZXcgZykuZ2V0RW5kUnVsZSgic3RhcnQiKV0pfTtkLmluaGVyaXRzKGksaCksYi5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM9aX0pLGRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGRlZmluZSgiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLGY9ZnVuY3Rpb24oYixkLGUsZil7dGhpcy5jaGFuZ2VMaXN0ZW5lcj10aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyk7aWYoYy5wYWNrYWdlZCl7dmFyIGc9dGhpcy4kZ3Vlc3NCYXNlUGF0aCgpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGcrZCl9ZWxzZXt2YXIgaD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlciIsbnVsbCwiXyIpKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihoKTt2YXIgaT17fTtmb3IodmFyIGo9MDtqPGIubGVuZ3RoO2orKyl7dmFyIGs9YltqXSxsPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoayxudWxsLCJfIikucmVwbGFjZSgvLmpzJC8sIiIpKTtpW2tdPWx9fXRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7aW5pdDohMCx0bG5zOmksbW9kdWxlOmUsY2xhc3NuYW1lOmZ9KSx0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLmNhbGxiYWNrcz17fTt2YXIgbT10aGlzO3RoaXMuJHdvcmtlci5vbmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IHdpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2coYSksYX0sdGhpcy4kd29ya2VyLm9ubWVzc2FnZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRhdGE7c3dpdGNoKGIudHlwZSl7Y2FzZSJsb2ciOndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2coYi5kYXRhKTticmVhaztjYXNlImV2ZW50IjptLl9lbWl0KGIubmFtZSx7ZGF0YTpiLmRhdGF9KTticmVhaztjYXNlImNhbGwiOnZhciBjPW0uY2FsbGJhY2tzW2IuaWRdO2MmJihjKGIuZGF0YSksZGVsZXRlIG0uY2FsbGJhY2tzW2IuaWRdKX19fTsoKGZ1bmN0aW9uKCl7ZC5pbXBsZW1lbnQodGhpcyxlKSx0aGlzLiRub3JtYWxpemVQYXRoPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZSgvXlthLXpdKzpcL1wvW15cL10rXC8vLCIiKSxhPWxvY2F0aW9uLnByb3RvY29sKyIvLyIrbG9jYXRpb24uaG9zdCsoYS5jaGFyQXQoMCk9PSIvIj8iIjpsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cL1teXC9dKiQvLCIiKSkrIi8iK2EucmVwbGFjZSgvXltcL10rLywiIiksYX0sdGhpcy4kZ3Vlc3NCYXNlUGF0aD1mdW5jdGlvbigpe2lmKGEuYWNlQmFzZVVybClyZXR1cm4gYS5hY2VCYXNlVXJsO3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXSxlPWQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjZS1iYXNlIik7aWYoZSlyZXR1cm4gZS5yZXBsYWNlKC9cLyokLywiLyIpO3ZhciBmPWQuc3JjfHxkLmdldEF0dHJpYnV0ZSgic3JjIik7aWYoIWYpY29udGludWU7dmFyIGc9Zi5tYXRjaCgvXig/OiguKlwvKWFjZVwuanN8KC4qXC8pYWNlKC11bmNvbXByZXNzZWQpPygtbm9jb25mbGljdCk/XC5qcykoPzpcP3wkKS8pO2lmKGcpcmV0dXJuIGdbMV18fGdbMl19cmV0dXJuIiJ9LHRoaXMudGVybWluYXRlPWZ1bmN0aW9uKCl7dGhpcy5fZW1pdCgidGVybWluYXRlIix7fSksdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpLHRoaXMuJHdvcmtlcj1udWxsLHRoaXMuJGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuY2hhbmdlTGlzdGVuZXIpLHRoaXMuJGRvYz1udWxsfSx0aGlzLnNlbmQ9ZnVuY3Rpb24oYSxiKXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6YSxhcmdzOmJ9KX0sdGhpcy5jYWxsPWZ1bmN0aW9uKGEsYixjKXtpZihjKXt2YXIgZD10aGlzLmNhbGxiYWNrSWQrKzt0aGlzLmNhbGxiYWNrc1tkXT1jLGIucHVzaChkKX10aGlzLnNlbmQoYSxiKX0sdGhpcy5lbWl0PWZ1bmN0aW9uKGEsYil7dHJ5e3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7ZXZlbnQ6YSxkYXRhOntkYXRhOmIuZGF0YX19KX1jYXRjaChjKXt9fSx0aGlzLmF0dGFjaFRvRG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dGhpcy4kZG9jJiZ0aGlzLnRlcm1pbmF0ZSgpLHRoaXMuJGRvYz1hLHRoaXMuY2FsbCgic2V0VmFsdWUiLFthLmdldFZhbHVlKCldKSxhLm9uKCJjaGFuZ2UiLHRoaXMuY2hhbmdlTGlzdGVuZXIpfSx0aGlzLmNoYW5nZUxpc3RlbmVyPWZ1bmN0aW9uKGEpe2EucmFuZ2U9e3N0YXJ0OmEuZGF0YS5yYW5nZS5zdGFydCxlbmQ6YS5kYXRhLnJhbmdlLmVuZH0sdGhpcy5lbWl0KCJjaGFuZ2UiLGEpfX0pKS5jYWxsKGYucHJvdG90eXBlKSxiLldvcmtlckNsaWVudD1mfSksZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWZ1bmN0aW9uKCl7dGhpcy5hZGQoImJyYWNlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0ieyIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiJ7IitnKyJ9IixzZWxlY3Rpb246ITF9Ont0ZXh0OiJ7fSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0ifSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgbD1kLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpoLnJvdyxjb2x1bW46aC5jb2x1bW4rMX0pO2lmKCFsKXJldHVybiBudWxsO3ZhciBtPXRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoYSxpLnN1YnN0cmluZygwLGkubGVuZ3RoLTEpLGQuZ2V0VGFiU3RyaW5nKCkpLG49dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUobC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK20rIlxuIituLHNlbGVjdGlvbjpbMSxtLmxlbmd0aCwxLG0ubGVuZ3RoXX19fX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09InsiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixlLmVuZC5jb2x1bW4rMSk7aWYoaD09In0iKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IigiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoiKCIrZysiKSIsc2VsZWN0aW9uOiExfTp7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09IikiKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSIpIil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCIpIix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInBhcmVucyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0iKCIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0iKSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSciJyl7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO2lmKGchPT0iIilyZXR1cm57dGV4dDonIicrZysnIicsc2VsZWN0aW9uOiExfTt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLTEsaC5jb2x1bW4pO2lmKGo9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGs9ZC5nZXRUb2tlbnMoZi5zdGFydC5yb3csZi5zdGFydC5yb3cpWzBdLnRva2VucyxsPTAsbSxuPS0xO2Zvcih2YXIgbz0wO288ay5sZW5ndGg7bysrKXttPWtbb10sbS50eXBlPT0ic3RyaW5nIj9uPS0xOm48MCYmKG49bS52YWx1ZS5pbmRleE9mKCciJykpO2lmKG0udmFsdWUubGVuZ3RoK2w+Zi5zdGFydC5jb2x1bW4pYnJlYWs7bCs9a1tvXS52YWx1ZS5sZW5ndGh9aWYoIW18fG48MCYmbS50eXBlIT09ImNvbW1lbnQiJiYobS50eXBlIT09InN0cmluZyJ8fGYuc3RhcnQuY29sdW1uIT09bS52YWx1ZS5sZW5ndGgrbC0xJiZtLnZhbHVlLmxhc3RJbmRleE9mKCciJyk9PT1tLnZhbHVlLmxlbmd0aC0xKSlyZXR1cm57dGV4dDonIiInLHNlbGVjdGlvbjpbMSwxXX07aWYobSYmbS50eXBlPT09InN0cmluZyIpe3ZhciBwPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKHA9PSciJylyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09JyInKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09JyInKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pfTtkLmluaGVyaXRzKGYsZSksYi5Dc3R5bGVCZWhhdmlvdXI9Zn0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGY9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxnPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9O2QuaW5oZXJpdHMoZyxmKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPS8oXHt8XFspW15cfVxdXSokfF5ccyooXC9cKikvLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9L15bXlxbXHtdKihcfXxcXSl8Xltcc1wqXSooXCpcLykvLHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyksZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4O2lmKGZbMV0pcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhhLGZbMV0sYyxnKTt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnK2ZbMF0ubGVuZ3RoKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9aWYoYiE9PSJtYXJrYmVnaW5lbmQiKXJldHVybjt2YXIgZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXgrZlswXS5sZW5ndGg7aWYoZlsyXSl7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZyk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofXZhciBpPXtyb3c6Yyxjb2x1bW46Z30saj1hLiRmaW5kT3BlbmluZ0JyYWNrZXQoZlsxXSxpKTtpZighailyZXR1cm47cmV0dXJuIGouY29sdW1uKyssaS5jb2x1bW4tLSxlLmZyb21Qb2ludHMoaixpKX19fS5jYWxsKGcucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL21vZGUvZ3Jvb3Z5X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxnPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaD1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYXNzZXJ0fHdpdGh8YWJzdHJhY3R8Y29udGludWV8Zm9yfG5ld3xzd2l0Y2h8YXNzZXJ0fGRlZmF1bHR8Z290b3xwYWNrYWdlfHN5bmNocm9uaXplZHxib29sZWFufGRvfGlmfHByaXZhdGV8dGhpc3xicmVha3xkb3VibGV8aW1wbGVtZW50c3xwcm90ZWN0ZWR8dGhyb3d8Ynl0ZXxlbHNlfGltcG9ydHxwdWJsaWN8dGhyb3dzfGNhc2V8ZW51bXxpbnN0YW5jZW9mfHJldHVybnx0cmFuc2llbnR8Y2F0Y2h8ZXh0ZW5kc3xpbnR8c2hvcnR8dHJ5fGNoYXJ8ZmluYWx8aW50ZXJmYWNlfHN0YXRpY3x2b2lkfGNsYXNzfGZpbmFsbHl8bG9uZ3xzdHJpY3RmcHx2b2xhdGlsZXxkZWZ8ZmxvYXR8bmF0aXZlfHN1cGVyfHdoaWxlIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgiQWJzdHJhY3RNZXRob2RFcnJvcnxBc3NlcnRpb25FcnJvcnxDbGFzc0NpcmN1bGFyaXR5RXJyb3J8Q2xhc3NGb3JtYXRFcnJvcnxEZXByZWNhdGVkfEVudW1Db25zdGFudE5vdFByZXNlbnRFeGNlcHRpb258RXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yfElsbGVnYWxBY2Nlc3NFcnJvcnxJbGxlZ2FsVGhyZWFkU3RhdGVFeGNlcHRpb258SW5zdGFudGlhdGlvbkVycm9yfEludGVybmFsRXJyb3J8TmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb258Tm9TdWNoRmllbGRFcnJvcnxPdmVycmlkZXxQcm9jZXNzfFByb2Nlc3NCdWlsZGVyfFNlY3VyaXR5TWFuYWdlcnxTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufFN1cHByZXNzV2FybmluZ3N8VHlwZU5vdFByZXNlbnRFeGNlcHRpb258VW5rbm93bkVycm9yfFVuc2F0aXNmaWVkTGlua0Vycm9yfFVuc3VwcG9ydGVkQ2xhc3NWZXJzaW9uRXJyb3J8VmVyaWZ5RXJyb3J8SW5zdGFudGlhdGlvbkV4Y2VwdGlvbnxJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnxOb1N1Y2hGaWVsZEV4Y2VwdGlvbnxJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb258TnVtYmVyRm9ybWF0RXhjZXB0aW9ufFNlY3VyaXR5RXhjZXB0aW9ufFZvaWR8SW5oZXJpdGFibGVUaHJlYWRMb2NhbHxJbGxlZ2FsU3RhdGVFeGNlcHRpb258SW50ZXJydXB0ZWRFeGNlcHRpb258Tm9TdWNoTWV0aG9kRXhjZXB0aW9ufElsbGVnYWxBY2Nlc3NFeGNlcHRpb258VW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb258RW51bXxTdHJpY3RNYXRofFBhY2thZ2V8Q29tcGlsZXJ8UmVhZGFibGV8UnVudGltZXxTdHJpbmdCdWlsZGVyfE1hdGh8SW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvcnxOb1N1Y2hNZXRob2RFcnJvcnxUaHJlYWRMb2NhbHxSdW50aW1lUGVybWlzc2lvbnxBcml0aG1ldGljRXhjZXB0aW9ufE51bGxQb2ludGVyRXhjZXB0aW9ufExvbmd8SW50ZWdlcnxTaG9ydHxCeXRlfERvdWJsZXxOdW1iZXJ8RmxvYXR8Q2hhcmFjdGVyfEJvb2xlYW58U3RhY2tUcmFjZUVsZW1lbnR8QXBwZW5kYWJsZXxTdHJpbmdCdWZmZXJ8SXRlcmFibGV8VGhyZWFkR3JvdXB8UnVubmFibGV8VGhyZWFkfElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb258U3RhY2tPdmVyZmxvd0Vycm9yfE91dE9mTWVtb3J5RXJyb3J8VmlydHVhbE1hY2hpbmVFcnJvcnxBcnJheVN0b3JlRXhjZXB0aW9ufENsYXNzQ2FzdEV4Y2VwdGlvbnxMaW5rYWdlRXJyb3J8Tm9DbGFzc0RlZkZvdW5kRXJyb3J8Q2xhc3NOb3RGb3VuZEV4Y2VwdGlvbnxSdW50aW1lRXhjZXB0aW9ufEV4Y2VwdGlvbnxUaHJlYWREZWF0aHxFcnJvcnxUaHJvd2FibGV8U3lzdGVtfENsYXNzTG9hZGVyfENsb25lYWJsZXxDbGFzc3xDaGFyU2VxdWVuY2V8Q29tcGFyYWJsZXxTdHJpbmd8T2JqZWN0Ii5zcGxpdCgifCIpKSxkPWUuYXJyYXlUb01hcCgiIi5zcGxpdCgifCIpKTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LChuZXcgZikuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIscmVnZXg6Iig/OnRydWV8ZmFsc2UpXFxiIn0se3Rva2VuOmZ1bmN0aW9uKGUpe3JldHVybiBlPT0idGhpcyI/InZhcmlhYmxlLmxhbmd1YWdlIjphLmhhc093blByb3BlcnR5KGUpPyJrZXl3b3JkIjpjLmhhc093blByb3BlcnR5KGUpPyJzdXBwb3J0LmZ1bmN0aW9uIjpkLmhhc093blByb3BlcnR5KGUpPyJzdXBwb3J0LmZ1bmN0aW9uIjpiLmhhc093blByb3BlcnR5KGUpPyJjb25zdGFudC5sYW5ndWFnZSI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFw/OnxcXD9cXC58XFwqXFwufDw9Pnw9fnw9PX58XFwuQHxcXCpcXC5AfFxcLiZ8YXN8aW58aXN8IXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIn0se3Rva2VuOiJscGFyZW4iLHJlZ2V4OiJbWyh7XSJ9LHt0b2tlbjoicnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSx0aGlzLmVtYmVkUnVsZXMoZiwiZG9jLSIsWyhuZXcgZikuZ2V0RW5kUnVsZSgic3RhcnQiKV0pfTtkLmluaGVyaXRzKGgsZyksYi5Hcm9vdnlIaWdobGlnaHRSdWxlcz1ofSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-haxe-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvaGF4ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9oYXhlX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2hheGVfaGlnaGxpZ2h0X3J1bGVzIikuSGF4ZUhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsaj1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsaz1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBpLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBqfTtkLmluaGVyaXRzKGssZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnM7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCIpe3ZhciBnPWIubWF0Y2goL14uKltce1woXFtdXHMqJC8pO2cmJihkKz1jKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsfX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9oYXhlX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxnPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaD1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYnJlYWt8Y2FzZXxjYXN0fGNhdGNofGNsYXNzfGNvbnRpbnVlfGRlZmF1bHR8ZWxzZXxlbnVtfGV4dGVuZHN8Zm9yfGZ1bmN0aW9ufGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGlubGluZXxpbnRlcmZhY2V8bmV3fG92ZXJyaWRlfHBhY2thZ2V8cHJpdmF0ZXxwdWJsaWN8cmV0dXJufHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cmFjZXx0cnl8dHlwZWRlZnx1bnR5cGVkfHZhcnx3aGlsZXxBcnJheXxWb2lkfEJvb2x8SW50fFVJbnR8RmxvYXR8RHluYW1pY3xTdHJpbmd8TGlzdHxIYXNofEludEhhc2h8RXJyb3J8VW5rbm93bnxUeXBlfFN0ZCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIm51bGx8dHJ1ZXxmYWxzZSIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGYpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwqIixtZXJnZTohMCxuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiWy9dKD86KD86XFxbKD86XFxcXF18W15cXF1dKStcXF0pfCg/OlxcXFwvfFteXFxdL10pKSpbL11cXHcqXFxzKig/PVspLiw7XXwkKSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYz09InRoaXMiPyJ2YXJpYWJsZS5sYW5ndWFnZSI6YS5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJcXD98XFw6fFxcLHxcXDt8XFwuIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7PF0ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfT5dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhmLCJkb2MtIixbKG5ldyBmKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaCxnKSxiLkhheGVIaWdobGlnaHRSdWxlcz1ofSksYWNlLmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWZ1bmN0aW9uKCl7dGhpcy5hZGQoImJyYWNlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0ieyIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiJ7IitnKyJ9IixzZWxlY3Rpb246ITF9Ont0ZXh0OiJ7fSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0ifSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgbD1kLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpoLnJvdyxjb2x1bW46aC5jb2x1bW4rMX0pO2lmKCFsKXJldHVybiBudWxsO3ZhciBtPXRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoYSxpLnN1YnN0cmluZygwLGkubGVuZ3RoLTEpLGQuZ2V0VGFiU3RyaW5nKCkpLG49dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUobC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK20rIlxuIituLHNlbGVjdGlvbjpbMSxtLmxlbmd0aCwxLG0ubGVuZ3RoXX19fX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09InsiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixlLmVuZC5jb2x1bW4rMSk7aWYoaD09In0iKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IigiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoiKCIrZysiKSIsc2VsZWN0aW9uOiExfTp7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09IikiKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSIpIil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCIpIix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInBhcmVucyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0iKCIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0iKSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSciJyl7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO2lmKGchPT0iIilyZXR1cm57dGV4dDonIicrZysnIicsc2VsZWN0aW9uOiExfTt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLTEsaC5jb2x1bW4pO2lmKGo9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGs9ZC5nZXRUb2tlbnMoZi5zdGFydC5yb3csZi5zdGFydC5yb3cpWzBdLnRva2VucyxsPTAsbSxuPS0xO2Zvcih2YXIgbz0wO288ay5sZW5ndGg7bysrKXttPWtbb10sbS50eXBlPT0ic3RyaW5nIj9uPS0xOm48MCYmKG49bS52YWx1ZS5pbmRleE9mKCciJykpO2lmKG0udmFsdWUubGVuZ3RoK2w+Zi5zdGFydC5jb2x1bW4pYnJlYWs7bCs9a1tvXS52YWx1ZS5sZW5ndGh9aWYoIW18fG48MCYmbS50eXBlIT09ImNvbW1lbnQiJiYobS50eXBlIT09InN0cmluZyJ8fGYuc3RhcnQuY29sdW1uIT09bS52YWx1ZS5sZW5ndGgrbC0xJiZtLnZhbHVlLmxhc3RJbmRleE9mKCciJyk9PT1tLnZhbHVlLmxlbmd0aC0xKSlyZXR1cm57dGV4dDonIiInLHNlbGVjdGlvbjpbMSwxXX07aWYobSYmbS50eXBlPT09InN0cmluZyIpe3ZhciBwPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKHA9PSciJylyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09JyInKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09JyInKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pfTtkLmluaGVyaXRzKGYsZSksYi5Dc3R5bGVCZWhhdmlvdXI9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-haxe.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9oYXhlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2hheGVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vaGF4ZV9oaWdobGlnaHRfcnVsZXMiKS5IYXhlSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGksdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucztpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Iil7dmFyIGc9Yi5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7ZyYmKGQrPWMpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGx9fS5jYWxsKGsucHJvdG90eXBlKSxiLk1vZGU9a30pLGRlZmluZSgiYWNlL21vZGUvaGF4ZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImJyZWFrfGNhc2V8Y2FzdHxjYXRjaHxjbGFzc3xjb250aW51ZXxkZWZhdWx0fGVsc2V8ZW51bXxleHRlbmRzfGZvcnxmdW5jdGlvbnxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnxpbmxpbmV8aW50ZXJmYWNlfG5ld3xvdmVycmlkZXxwYWNrYWdlfHByaXZhdGV8cHVibGljfHJldHVybnxzdGF0aWN8c3VwZXJ8c3dpdGNofHRoaXN8dGhyb3d8dHJhY2V8dHJ5fHR5cGVkZWZ8dW50eXBlZHx2YXJ8d2hpbGV8QXJyYXl8Vm9pZHxCb29sfEludHxVSW50fEZsb2F0fER5bmFtaWN8U3RyaW5nfExpc3R8SGFzaHxJbnRIYXNofEVycm9yfFVua25vd258VHlwZXxTdGQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJudWxsfHRydWV8ZmFsc2UiLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBmKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcKiIsbWVyZ2U6ITAsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGM9PSJ0aGlzIj8idmFyaWFibGUubGFuZ3VhZ2UiOmEuaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQiOmIuaGFzT3duUHJvcGVydHkoYyk/ImNvbnN0YW50Lmxhbmd1YWdlIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkifSx7dG9rZW46InB1bmN0dWF0aW9uLm9wZXJhdG9yIixyZWdleDoiXFw/fFxcOnxcXCx8XFw7fFxcLiJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soezxdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX0+XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSx0aGlzLmVtYmVkUnVsZXMoZiwiZG9jLSIsWyhuZXcgZikuZ2V0RW5kUnVsZSgic3RhcnQiKV0pfTtkLmluaGVyaXRzKGgsZyksYi5IYXhlSGlnaGxpZ2h0UnVsZXM9aH0pLGRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-html-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS9jc3MiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi9qYXZhc2NyaXB0IikuTW9kZSxnPWEoIi4vY3NzIikuTW9kZSxoPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixpPWEoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXMsaj1hKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXIsaz1hKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlLGw9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgaTt0aGlzLiR0b2tlbml6ZXI9bmV3IGgoYS5nZXRSdWxlcygpKSx0aGlzLiRiZWhhdmlvdXI9bmV3IGosdGhpcy4kZW1iZWRzPWEuZ2V0RW1iZWRzKCksdGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzKHsianMtIjpmLCJjc3MtIjpnfSksdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGt9O2QuaW5oZXJpdHMobCxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiAwfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuITF9fS5jYWxsKGwucHJvdG90eXBlKSxiLk1vZGU9bH0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWEoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGs9YSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGw9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLG09ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuJGJlaGF2aW91cj1uZXcgayx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgbH07ZC5pbmhlcml0cyhtLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopXC9cLy87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBoPW5ldyBpKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2guc3RhcnQucm93PWcsaC5lbmQucm93PWcsaC5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShoLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIi8vIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucyxnPWUuc3RhdGU7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIil7dmFyIGg9Yi5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKlw6fFtce1woXFtdKVxzKiQvKTtoJiYoZCs9Yyl9ZWxzZSBpZihhPT0iZG9jLXN0YXJ0Iil7aWYoZz09InN0YXJ0Inx8YT09InJlZ2V4X2FsbG93ZWQiKXJldHVybiIiO3ZhciBoPWIubWF0Y2goL15ccyooXC8/KVwqLyk7aCYmKGhbMV0mJihkKz0iICIpLGQrPSIqICIpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGooWyJhY2UiXSwid29ya2VyLWphdmFzY3JpcHQuanMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsIkphdmFTY3JpcHRXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigianNsaW50IixmdW5jdGlvbihiKXt2YXIgYz1bXTtmb3IodmFyIGQ9MDtkPGIuZGF0YS5sZW5ndGg7ZCsrKXt2YXIgZT1iLmRhdGFbZF07ZSYmYy5wdXNoKHtyb3c6ZS5saW5lLTEsY29sdW1uOmUuY2hhcmFjdGVyLTEsdGV4dDplLnJlYXNvbix0eXBlOiJ3YXJuaW5nIixsaW50OmV9KX1hLnNldEFubm90YXRpb25zKGMpfSksYi5vbigibmFyY2lzc3VzIixmdW5jdGlvbihiKXthLnNldEFubm90YXRpb25zKFtiLmRhdGFdKX0pLGIub24oInRlcm1pbmF0ZSIsZnVuY3Rpb24oKXthLmNsZWFyQW5ub3RhdGlvbnMoKX0pLGJ9fS5jYWxsKG0ucHJvdG90eXBlKSxiLk1vZGU9bX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvdW5pY29kZSIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi4vdW5pY29kZSIpLGc9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0Ii5zcGxpdCgifCIpKSxjPSJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkIixkPWUuYXJyYXlUb01hcCgiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19fIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIuc3BsaXQoInwiKSksaT1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksaj1lLmFycmF5VG9NYXAoImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIi5zcGxpdCgifCIpKSxrPSJbIitmLnBhY2thZ2VzLkwrIlxcJF9dWyIrZi5wYWNrYWdlcy5MK2YucGFja2FnZXMuTW4rZi5wYWNrYWdlcy5NYytmLnBhY2thZ2VzLk5kK2YucGFja2FnZXMuUGMrIlxcJF9dKlxcYiI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGcpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46WyJrZXl3b3JkLmRlZmluaXRpb24iLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSxyZWdleDoiKGZ1bmN0aW9uKShcXHMrKSgiK2srIikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiIrYysiKVxcYiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShjKT8idmFyaWFibGUubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuZGVwcmVjYXRlZCI6aC5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZC5kZWZpbml0aW9uIjpiLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjppLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ai5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5pbGxlZ2FsIjpjPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6a30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwvPT8iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJeIyEuKiQifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHJlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudF9yZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiXFwvIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6Ii9cXHcqIixuZXh0OiJzdGFydCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlteXFxcXC9cXFtdKyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXFxbIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6Il0iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlteXFxcXFxcXV0rIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxjb21tZW50X3JlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGcsImRvYy0iLFsobmV3IGcpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhpLGgpLGIuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzPWl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudC5kb2MudGFnIixyZWdleDoiQFtcXHdcXGRfXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFxzKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJUT0RPIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlteQFxcKl0rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6Ii4ifV19fTtkLmluaGVyaXRzKGYsZSksZnVuY3Rpb24oKXt0aGlzLmdldFN0YXJ0UnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwvXFwqKD89XFwqKSIsbmV4dDphfX0sdGhpcy5nZXRFbmRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXCpcXC8iLG5leHQ6YX19fS5jYWxsKGYucHJvdG90eXBlKSxiLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcz1mfSksYWNlLmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGFjZS5kZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWZ1bmN0aW9uKGIsZCxlLGYpe3RoaXMuY2hhbmdlTGlzdGVuZXI9dGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO2lmKGMucGFja2FnZWQpe3ZhciBnPXRoaXMuJGd1ZXNzQmFzZVBhdGgoKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihnK2QpfWVsc2V7dmFyIGg9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXIiLG51bGwsIl8iKSk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoaCk7dmFyIGk9e307Zm9yKHZhciBqPTA7ajxiLmxlbmd0aDtqKyspe3ZhciBrPWJbal0sbD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKGssbnVsbCwiXyIpLnJlcGxhY2UoLy5qcyQvLCIiKSk7aVtrXT1sfX10aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczppLG1vZHVsZTplLGNsYXNzbmFtZTpmfSksdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5jYWxsYmFja3M9e307dmFyIG09dGhpczt0aGlzLiR3b3JrZXIub25lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyB3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpLGF9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLnR5cGUpe2Nhc2UibG9nIjp3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGIuZGF0YSk7YnJlYWs7Y2FzZSJldmVudCI6bS5fZW1pdChiLm5hbWUse2RhdGE6Yi5kYXRhfSk7YnJlYWs7Y2FzZSJjYWxsIjp2YXIgYz1tLmNhbGxiYWNrc1tiLmlkXTtjJiYoYyhiLmRhdGEpLGRlbGV0ZSBtLmNhbGxiYWNrc1tiLmlkXSl9fX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoL15bYS16XSs6XC9cL1teXC9dK1wvLywiIiksYT1sb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QrKGEuY2hhckF0KDApPT0iLyI/IiI6bG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywiIikpKyIvIithLnJlcGxhY2UoL15bXC9dKy8sIiIpLGF9LHRoaXMuJGd1ZXNzQmFzZVBhdGg9ZnVuY3Rpb24oKXtpZihhLmFjZUJhc2VVcmwpcmV0dXJuIGEuYWNlQmFzZVVybDt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS1hY2UtYmFzZSIpO2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvXC8qJC8sIi8iKTt2YXIgZj1kLnNyY3x8ZC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFmKWNvbnRpbnVlO3ZhciBnPWYubWF0Y2goL14oPzooLipcLylhY2VcLmpzfCguKlwvKWFjZSgtdW5jb21wcmVzc2VkKT8oLW5vY29uZmxpY3QpP1wuanMpKD86XD98JCkvKTtpZihnKXJldHVybiBnWzFdfHxnWzJdfXJldHVybiIifSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX2VtaXQoInRlcm1pbmF0ZSIse30pLHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbCx0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmEsYXJnczpifSl9LHRoaXMuY2FsbD1mdW5jdGlvbihhLGIsYyl7aWYoYyl7dmFyIGQ9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3NbZF09YyxiLnB1c2goZCl9dGhpcy5zZW5kKGEsYil9LHRoaXMuZW1pdD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmEsZGF0YTp7ZGF0YTpiLmRhdGF9fSl9Y2F0Y2goYyl7fX0sdGhpcy5hdHRhY2hUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe3RoaXMuJGRvYyYmdGhpcy50ZXJtaW5hdGUoKSx0aGlzLiRkb2M9YSx0aGlzLmNhbGwoInNldFZhbHVlIixbYS5nZXRWYWx1ZSgpXSksYS5vbigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKX0sdGhpcy5jaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbihhKXthLnJhbmdlPXtzdGFydDphLmRhdGEucmFuZ2Uuc3RhcnQsZW5kOmEuZGF0YS5yYW5nZS5lbmR9LHRoaXMuZW1pdCgiY2hhbmdlIixhKX19KSkuY2FsbChmLnByb3RvdHlwZSksYi5Xb3JrZXJDbGllbnQ9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGY9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxnPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9O2QuaW5oZXJpdHMoZyxmKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPS8oXHt8XFspW15cfVxdXSokfF5ccyooXC9cKikvLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9L15bXlxbXHtdKihcfXxcXSl8Xltcc1wqXSooXCpcLykvLHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyksZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4O2lmKGZbMV0pcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhhLGZbMV0sYyxnKTt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnK2ZbMF0ubGVuZ3RoKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9aWYoYiE9PSJtYXJrYmVnaW5lbmQiKXJldHVybjt2YXIgZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXgrZlswXS5sZW5ndGg7aWYoZlsyXSl7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZyk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofXZhciBpPXtyb3c6Yyxjb2x1bW46Z30saj1hLiRmaW5kT3BlbmluZ0JyYWNrZXQoZlsxXSxpKTtpZighailyZXR1cm47cmV0dXJuIGouY29sdW1uKyssaS5jb2x1bW4tLSxlLmZyb21Qb2ludHMoaixpKX19fS5jYWxsKGcucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9jc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSwiaSIpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1J1bGVzPSJjU3R5bGUiLHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSkudG9rZW5zO2lmKGUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDt2YXIgZj1iLm1hdGNoKC9eLipce1xzKiQvKTtyZXR1cm4gZiYmKGQrPWMpLGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgaShbImFjZSJdLCJ3b3JrZXItY3NzLmpzIiwiYWNlL21vZGUvY3NzX3dvcmtlciIsIldvcmtlciIpO3JldHVybiBiLmF0dGFjaFRvRG9jdW1lbnQoYS5nZXREb2N1bWVudCgpKSxiLm9uKCJjc3NsaW50IixmdW5jdGlvbihiKXt2YXIgYz1bXTtiLmRhdGEuZm9yRWFjaChmdW5jdGlvbihhKXtjLnB1c2goe3JvdzphLmxpbmUtMSxjb2x1bW46YS5jb2wtMSx0ZXh0OmEubWVzc2FnZSx0eXBlOmEudHlwZSxsaW50OmF9KX0pLGEuc2V0QW5ub3RhdGlvbnMoYyl9KSxifX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZz1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiLW1vei1hcHBlYXJhbmNlfC1tb3otYm94LXNpemluZ3wtd2Via2l0LWJveC1zaXppbmd8LW1vei1vdXRsaW5lLXJhZGl1c3wtbW96LXRyYW5zZm9ybXwtd2Via2l0LXRyYW5zZm9ybXxhcHBlYXJhbmNlfGF6aW11dGh8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmR8Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVyLWJvdHRvbXxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1yaWdodHxib3JkZXItc3BhY2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLXN0eWxlfGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXRvcHxib3JkZXItd2lkdGh8Ym9yZGVyfGJvdHRvbXxib3gtc2l6aW5nfGNhcHRpb24tc2lkZXxjbGVhcnxjbGlwfGNvbG9yfGNvbnRlbnR8Y291bnRlci1pbmNyZW1lbnR8Y291bnRlci1yZXNldHxjdWUtYWZ0ZXJ8Y3VlLWJlZm9yZXxjdWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmbG9hdHxmb250LWZhbWlseXxmb250LXNpemUtYWRqdXN0fGZvbnQtc2l6ZXxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8Zm9udHxoZWlnaHR8bGVmdHxsZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGV8bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJrZXItb2Zmc2V0fG1hcmdpbnxtYXJrc3xtYXgtaGVpZ2h0fG1heC13aWR0aHxtaW4taGVpZ2h0fG1pbi13aWR0aHwtbW96LWJvcmRlci1yYWRpdXN8b3BhY2l0eXxvcnBoYW5zfG91dGxpbmUtY29sb3J8b3V0bGluZS1vZmZzZXR8b3V0bGluZS1yYWRpdXN8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG91dGxpbmV8b3ZlcmZsb3d8b3ZlcmZsb3cteHxvdmVyZmxvdy15fHBhZGRpbmctYm90dG9tfHBhZGRpbmctbGVmdHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZGRpbmd8cGFnZS1icmVhay1hZnRlcnxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlfHBhdXNlLWFmdGVyfHBhdXNlLWJlZm9yZXxwYXVzZXxwaXRjaC1yYW5nZXxwaXRjaHxwbGF5LWR1cmluZ3xwb2ludGVyLWV2ZW50c3xwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpY2huZXNzfHJpZ2h0fHNpemV8c3BlYWstaGVhZGVyfHNwZWFrLW51bWVyYWx8c3BlYWstcHVuY3R1YXRpb258c3BlZWNoLXJhdGV8c3BlYWt8c3RyZXNzfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtZGVjb3JhdGlvbnx0ZXh0LWluZGVudHx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHVuaWNvZGUtYmlkaXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHZvaWNlLWZhbWlseXx2b2x1bWV8d2hpdGUtc3BhY2V8d2lkb3dzfHdpZHRofHdvcmQtc3BhY2luZ3x6LWluZGV4Ii5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgicmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVycyIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImFic29sdXRlfGFsbC1zY3JvbGx8YWx3YXlzfGFybWVuaWFufGF1dG98YmFzZWxpbmV8YmVsb3d8YmlkaS1vdmVycmlkZXxibG9ja3xib2xkfGJvbGRlcnxib3JkZXItYm94fGJvdGh8Ym90dG9tfGJyZWFrLWFsbHxicmVhay13b3JkfGNhcGl0YWxpemV8Y2VudGVyfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjb2wtcmVzaXplfGNvbGxhcHNlfGNvbnRlbnQtYm94fGNyb3NzaGFpcnxkYXNoZWR8ZGVjaW1hbC1sZWFkaW5nLXplcm98ZGVjaW1hbHxkZWZhdWx0fGRpc2FibGVkfGRpc2N8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlfGRvdHRlZHxkb3VibGV8ZS1yZXNpemV8ZWxsaXBzaXN8Zml4ZWR8Z2VvcmdpYW58Z3Jvb3ZlfGhhbmR8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWRlb2dyYXBoLWFscGhhfGlkZW9ncmFwaC1udW1lcmljfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtc3BhY2V8aW5hY3RpdmV8aW5oZXJpdHxpbmxpbmUtYmxvY2t8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpdGFsaWN8anVzdGlmeXxrYXRha2FuYS1pcm9oYXxrYXRha2FuYXxrZWVwLWFsbHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpc3QtaXRlbXxsb29zZXxsb3dlci1hbHBoYXxsb3dlci1ncmVla3xsb3dlci1sYXRpbnxsb3dlci1yb21hbnxsb3dlcmNhc2V8bHItdGJ8bHRyfG1lZGl1bXxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWRyb3B8bm8tcmVwZWF0fG53LXJlc2l6ZXxub25lfG5vcm1hbHxub3QtYWxsb3dlZHxub3dyYXB8b2JsaXF1ZXxvdXRzZXR8b3V0c2lkZXxvdmVybGluZXxwb2ludGVyfHByb2dyZXNzfHJlbGF0aXZlfHJlcGVhdC14fHJlcGVhdC15fHJlcGVhdHxyaWdodHxyaWRnZXxyb3ctcmVzaXplfHJ0bHxzLXJlc2l6ZXxzY3JvbGx8c2UtcmVzaXplfHNlcGFyYXRlfHNtYWxsLWNhcHN8c29saWR8c3F1YXJlfHN0YXRpY3xzdHJpY3R8c3VwZXJ8c3ctcmVzaXplfHRhYmxlLWZvb3Rlci1ncm91cHx0YWJsZS1oZWFkZXItZ3JvdXB8dGItcmx8dGV4dC1ib3R0b218dGV4dC10b3B8dGV4dHx0aGlja3x0aGlufHRvcHx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHZlcnRpY2FsLWlkZW9ncmFwaGljfHZlcnRpY2FsLXRleHR8dmlzaWJsZXx3LXJlc2l6ZXx3YWl0fHdoaXRlc3BhY2V8emVybyIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoImFxdWF8YmxhY2t8Ymx1ZXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxtYXJvb258bmF2eXxvbGl2ZXxvcmFuZ2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3ciLnNwbGl0KCJ8IikpLGY9IlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIixnPVt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6InJ1bGVzZXRfY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6ZisiKD86ZW18ZXh8cHh8Y218bW18aW58cHR8cGN8ZGVnfHJhZHxncmFkfG1zfHN8aHp8a2h6fCUpIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiI1thLWYwLTldezZ9In0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiI1thLWYwLTldezN9In0se3Rva2VuOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQudHlwZSI6Yi5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmZ1bmN0aW9uIjpjLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuY29uc3RhbnQiOmQuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5jb25zdGFudC5jb2xvciI6InRleHQifSxyZWdleDoiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoifV0saD1lLmNvcHlBcnJheShnKTtoLnVuc2hpZnQoe3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJcXH0iLG5leHQ6InN0YXJ0In0pO3ZhciBpPWUuY29weUFycmF5KGcpO2kudW5zaGlmdCh7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IlxcfSIsbmV4dDoibWVkaWEifSk7dmFyIGo9W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGs9ZS5jb3B5QXJyYXkoaik7ay51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSk7dmFyIGw9ZS5jb3B5QXJyYXkoaik7bC51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoibWVkaWEifSk7dmFyIG09ZS5jb3B5QXJyYXkoaik7bS51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoicnVsZXNldCJ9KSx0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiXFx7IixuZXh0OiJydWxlc2V0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJALio/eyIsbmV4dDoibWVkaWEifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjW2EtejAtOS1fXSsifSx7dG9rZW46InZhcmlhYmxlIixyZWdleDoiXFwuW2EtejAtOS1fXSsifSx7dG9rZW46InN0cmluZyIscmVnZXg6IjpbYS16MC05LV9dKyJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbYS16MC05LV9dKyJ9XSxtZWRpYTpbe3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJtZWRpYV9jb21tZW50In0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJcXHsiLG5leHQ6Im1lZGlhX3J1bGVzZXQifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlxcfSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjW2EtejAtOS1fXSsifSx7dG9rZW46InZhcmlhYmxlIixyZWdleDoiXFwuW2EtejAtOS1fXSsifSx7dG9rZW46InN0cmluZyIscmVnZXg6IjpbYS16MC05LV9dKyJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbYS16MC05LV9dKyJ9XSxjb21tZW50OmsscnVsZXNldDpoLHJ1bGVzZXRfY29tbWVudDptLG1lZGlhX3J1bGVzZXQ6aSxtZWRpYV9jb21tZW50Omx9fTtkLmluaGVyaXRzKGcsZiksYi5Dc3NIaWdobGlnaHRSdWxlcz1nfSksYWNlLmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF91dGlsIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzLGY9YSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyxnPWEoIi4veG1sX3V0aWwiKSxoPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaT1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJ0ZXh0IixtZXJnZTohMCxyZWdleDoiPFxcIVxcW0NEQVRBXFxbIixuZXh0OiJjZGF0YSJ9LHt0b2tlbjoieG1sX3BlIixyZWdleDoiPFxcPy4qP1xcPz4ifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiI8XFwhLS0iLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPCg/PXMqc2NyaXB0XFxiKSIsbmV4dDoic2NyaXB0In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjwoPz1zKnN0eWxlXFxiKSIsbmV4dDoiY3NzIn0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/IixuZXh0OiJ0YWcifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixtZXJnZTohMCxyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZy50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0IiksZy50YWcodGhpcy4kcnVsZXMsImNzcyIsImNzcy1zdGFydCIpLGcudGFnKHRoaXMuJHJ1bGVzLCJzY3JpcHQiLCJqcy1zdGFydCIpLHRoaXMuZW1iZWRSdWxlcyhmLCJqcy0iLFt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKig/PTxcXC9zY3JpcHQ+KSIsbmV4dDoidGFnIn0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8oPz1zY3JpcHQpIixuZXh0OiJ0YWcifV0pLHRoaXMuZW1iZWRSdWxlcyhlLCJjc3MtIixbe3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8oPz1zdHlsZSkiLG5leHQ6InRhZyJ9XSl9O2QuaW5oZXJpdHMoaSxoKSxiLkh0bWxIaWdobGlnaHRSdWxlcz1pfSksYWNlLmRlZmluZSgiYWNlL21vZGUveG1sX3V0aWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZyhhKXtyZXR1cm5be3Rva2VuOiJzdHJpbmciLHJlZ2V4OiciLio/Iid9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLionLG5leHQ6YSsiLXFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiInLio/JyJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLioiLG5leHQ6YSsiLXFzdHJpbmcifV19ZnVuY3Rpb24gaChhLGIpe3JldHVyblt7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4qPyIrYSxuZXh0OmJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9sYW5nIiksZT1kLmFycmF5VG9NYXAoImJ1dHRvbnxmb3JtfGlucHV0fGxhYmVsfHNlbGVjdHx0ZXh0YXJlYSIuc3BsaXQoInwiKSksZj1kLmFycmF5VG9NYXAoInRhYmxlfHRib2R5fHRkfHRmb290fHRofHRyIi5zcGxpdCgifCIpKTtiLnRhZz1mdW5jdGlvbihhLGIsYyl7YVtiXT1be3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjpmdW5jdGlvbihhKXtyZXR1cm4gYT09PSJhIj8ibWV0YS50YWcuYW5jaG9yIjphPT09ImltZyI/Im1ldGEudGFnLmltYWdlIjphPT09InNjcmlwdCI/Im1ldGEudGFnLnNjcmlwdCI6YT09PSJzdHlsZSI/Im1ldGEudGFnLnN0eWxlIjplLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/Im1ldGEudGFnLmZvcm0iOmYuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcudGFibGUiOiJtZXRhLnRhZyJ9LG1lcmdlOiEwLHJlZ2V4OiJbLV9hLXpBLVowLTk6IV0rIixuZXh0OmIrImVtYmVkLWF0dHJpYnV0ZS1saXN0In0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDpiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCJ9XSxhW2IrIi1xc3RyaW5nIl09aCgiJyIsYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiKSxhW2IrIi1xcXN0cmluZyJdPWgoJyInLGIrImVtYmVkLWF0dHJpYnV0ZS1saXN0IiksYVtiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCJdPVt7dG9rZW46Im1ldGEudGFnIixtZXJnZTohMCxyZWdleDoiLz8+IixuZXh0OmN9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6Ij0ifSx7dG9rZW46ImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZSIscmVnZXg6IlstX2EtekEtWjAtOTpdKyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XS5jb25jYXQoZyhiKSl9fSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9YSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsZz1mdW5jdGlvbigpe3RoaXMuaW5oZXJpdChmLFsic3RyaW5nX2RxdW90ZXMiXSksdGhpcy5hZGQoImJyYWNrZXRzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSI8Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/ITE6e3RleHQ6Ijw+IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSI+Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iPiIpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGs9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMik7aWYoaz09IjwvIil7dmFyIGw9dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUoaC5yb3cpKStkLmdldFRhYlN0cmluZygpLG09dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUoaC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK2wrIlxuIittLHNlbGVjdGlvbjpbMSxsLmxlbmd0aCwxLGwubGVuZ3RoXX19fX0pfTtkLmluaGVyaXRzKGcsZSksYi5YbWxCZWhhdmlvdXI9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4vbWl4ZWQiKS5Gb2xkTW9kZSxmPWEoIi4veG1sIikuRm9sZE1vZGUsZz1hKCIuL2NzdHlsZSIpLkZvbGRNb2RlLGg9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe2UuY2FsbCh0aGlzLG5ldyBmKHthcmVhOjEsYmFzZToxLGJyOjEsY29sOjEsY29tbWFuZDoxLGVtYmVkOjEsaHI6MSxpbWc6MSxpbnB1dDoxLGtleWdlbjoxLGxpbms6MSxtZXRhOjEscGFyYW06MSxzb3VyY2U6MSx0cmFjazoxLHdicjoxLGxpOjEsZHQ6MSxkZDoxLHA6MSxydDoxLHJwOjEsb3B0Z3JvdXA6MSxvcHRpb246MSxjb2xncm91cDoxLHRkOjEsdGg6MX0pLHsianMtIjpuZXcgZywiY3NzLSI6bmV3IGd9KX07ZC5pbmhlcml0cyhoLGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZj1iLkZvbGRNb2RlPWZ1bmN0aW9uKGEsYil7dGhpcy5kZWZhdWx0TW9kZT1hLHRoaXMuc3ViTW9kZXM9Yn07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy4kZ2V0TW9kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gdGhpcy5zdWJNb2RlcylpZihhLmluZGV4T2YoYik9PT0wKXJldHVybiB0aGlzLnN1Yk1vZGVzW2JdO3JldHVybiBudWxsfSx0aGlzLiR0cnlNb2RlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJGdldE1vZGUoYSk7cmV0dXJuIGU/ZS5nZXRGb2xkV2lkZ2V0KGIsYyxkKToiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kdHJ5TW9kZShhLmdldFN0YXRlKGMtMSksYSxiLGMpfHx0aGlzLiR0cnlNb2RlKGEuZ2V0U3RhdGUoYyksYSxiLGMpfHx0aGlzLmRlZmF1bHRNb2RlLmdldEZvbGRXaWRnZXQoYSxiLGMpfSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0TW9kZShhLmdldFN0YXRlKGMtMSkpO2lmKCFkfHwhZC5nZXRGb2xkV2lkZ2V0KGEsYixjKSlkPXRoaXMuJGdldE1vZGUoYS5nZXRTdGF0ZShjKSk7aWYoIWR8fCFkLmdldEZvbGRXaWRnZXQoYSxiLGMpKWQ9dGhpcy5kZWZhdWx0TW9kZTtyZXR1cm4gZC5nZXRGb2xkV2lkZ2V0UmFuZ2UoYSxiLGMpfX0uY2FsbChmLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL2xpYi9sYW5nIiksZj1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGc9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxoPWEoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixpPWIuRm9sZE1vZGU9ZnVuY3Rpb24oYSl7Zy5jYWxsKHRoaXMpLHRoaXMudm9pZEVsZW1lbnRzPWF8fHt9fTtkLmluaGVyaXRzKGksZyksZnVuY3Rpb24oKXt0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7cmV0dXJuIGQuY2xvc2luZz9iPT0ibWFya2JlZ2luZW5kIj8iZW5kIjoiIjohZC50YWdOYW1lfHx0aGlzLnZvaWRFbGVtZW50c1tkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0/IiI6ZC5zZWxmQ2xvc2luZz8iIjpkLnZhbHVlLmluZGV4T2YoIi8iK2QudGFnTmFtZSkhPT0tMT8iIjoic3RhcnQifSx0aGlzLl9nZXRGaXJzdFRhZ0luTGluZT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0VG9rZW5zKGIsYilbMF0udG9rZW5zLGQ9IiI7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBnPWNbZl07Zy50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wP2QrPWcudmFsdWU6ZCs9ZS5zdHJpbmdSZXBlYXQoIiAiLGcudmFsdWUubGVuZ3RoKX1yZXR1cm4gdGhpcy5fcGFyc2VUYWcoZCl9LHRoaXMudGFnUmU9L14oXHMqKSg8PyhcLz8pKFstX2EtekEtWjAtOTohXSopXHMqKFwvPyk+PykvLHRoaXMuX3BhcnNlVGFnPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudGFnUmUuZXhlYyhhKSxjPXRoaXMudGFnUmUubGFzdEluZGV4fHwwO3JldHVybiB0aGlzLnRhZ1JlLmxhc3RJbmRleD0wLHt2YWx1ZTphLG1hdGNoOmI/YlsyXToiIixjbG9zaW5nOmI/ISFiWzNdOiExLHNlbGZDbG9zaW5nOmI/ISFiWzVdfHxiWzJdPT0iLz4iOiExLHRhZ05hbWU6Yj9iWzRdOiIiLGNvbHVtbjpiWzFdP2MrYlsxXS5sZW5ndGg6Y319LHRoaXMuX3JlYWRUYWdGb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2lmKCFkKXZhciBkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07Yys9Yi52YWx1ZTtpZihjLmluZGV4T2YoIj4iKSE9PS0xKXt2YXIgZT10aGlzLl9wYXJzZVRhZyhjKTtyZXR1cm4gZS5zdGFydD1kLGUuZW5kPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0sYS5zdGVwRm9yd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwRm9yd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcmVhZFRhZ0JhY2t3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2R8fChkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0pLGM9Yi52YWx1ZStjO2lmKGMuaW5kZXhPZigiPCIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLmVuZD1kLGUuc3RhcnQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfSxhLnN0ZXBCYWNrd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwQmFja3dhcmQoKSk7cmV0dXJuIG51bGx9LHRoaXMuX3BvcD1mdW5jdGlvbihhLGIpe3doaWxlKGEubGVuZ3RoKXt2YXIgYz1hW2EubGVuZ3RoLTFdO2lmKCFifHxjLnRhZ05hbWU9PWIudGFnTmFtZSlyZXR1cm4gYS5wb3AoKTtpZih0aGlzLnZvaWRFbGVtZW50c1tiLnRhZ05hbWVdKXJldHVybjtpZih0aGlzLnZvaWRFbGVtZW50c1tjLnRhZ05hbWVdKXthLnBvcCgpO2NvbnRpbnVlfXJldHVybiBudWxsfX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7aWYoIWQubWF0Y2gpcmV0dXJuIG51bGw7dmFyIGU9ZC5jbG9zaW5nfHxkLnNlbGZDbG9zaW5nLGc9W10saTtpZighZSl7dmFyIGo9bmV3IGgoYSxjLGQuY29sdW1uKSxrPXtyb3c6Yyxjb2x1bW46ZC5jb2x1bW4rZC50YWdOYW1lLmxlbmd0aCsyfTt3aGlsZShpPXRoaXMuX3JlYWRUYWdGb3J3YXJkKGopKXtpZihpLnNlbGZDbG9zaW5nKXtpZighZy5sZW5ndGgpcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsaS5lbmQuY29sdW1uLT0yLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGkuZW5kKTtjb250aW51ZX1pZihpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBmLmZyb21Qb2ludHMoayxpLnN0YXJ0KX1lbHNlIGcucHVzaChpKX19ZWxzZXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4rZC5tYXRjaC5sZW5ndGgpLGw9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbn07d2hpbGUoaT10aGlzLl9yZWFkVGFnQmFja3dhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKCFpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGwpfWVsc2UgZy5wdXNoKGkpfX19fS5jYWxsKGkucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-html.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2NzcyIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2h0bWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGc9YSgiLi9jc3MiKS5Nb2RlLGg9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGk9YSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlcyxqPWEoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cixrPWEoIi4vZm9sZGluZy9odG1sIikuRm9sZE1vZGUsbD1mdW5jdGlvbigpe3ZhciBhPW5ldyBpO3RoaXMuJHRva2VuaXplcj1uZXcgaChhLmdldFJ1bGVzKCkpLHRoaXMuJGJlaGF2aW91cj1uZXcgaix0aGlzLiRlbWJlZHM9YS5nZXRFbWJlZHMoKSx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeyJqcy0iOmYsImNzcy0iOmd9KSx0aGlzLmZvbGRpbmdSdWxlcz1uZXcga307ZC5pbmhlcml0cyhsLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIDB9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRnZXRJbmRlbnQoYil9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hMX19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvdW5pY29kZSIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi4vdW5pY29kZSIpLGc9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0Ii5zcGxpdCgifCIpKSxjPSJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkIixkPWUuYXJyYXlUb01hcCgiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19fIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIuc3BsaXQoInwiKSksaT1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksaj1lLmFycmF5VG9NYXAoImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIi5zcGxpdCgifCIpKSxrPSJbIitmLnBhY2thZ2VzLkwrIlxcJF9dWyIrZi5wYWNrYWdlcy5MK2YucGFja2FnZXMuTW4rZi5wYWNrYWdlcy5NYytmLnBhY2thZ2VzLk5kK2YucGFja2FnZXMuUGMrIlxcJF9dKlxcYiI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGcpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46WyJrZXl3b3JkLmRlZmluaXRpb24iLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSxyZWdleDoiKGZ1bmN0aW9uKShcXHMrKSgiK2srIikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiIrYysiKVxcYiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShjKT8idmFyaWFibGUubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuZGVwcmVjYXRlZCI6aC5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZC5kZWZpbml0aW9uIjpiLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjppLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ai5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5pbGxlZ2FsIjpjPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6a30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwvPT8iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJeIyEuKiQifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHJlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudF9yZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiXFwvIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6Ii9cXHcqIixuZXh0OiJzdGFydCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlteXFxcXC9cXFtdKyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXFxbIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6Il0iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlteXFxcXFxcXV0rIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxjb21tZW50X3JlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGcsImRvYy0iLFsobmV3IGcpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhpLGgpLGIuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzPWl9KSxkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWZ1bmN0aW9uKGIsZCxlLGYpe3RoaXMuY2hhbmdlTGlzdGVuZXI9dGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO2lmKGMucGFja2FnZWQpe3ZhciBnPXRoaXMuJGd1ZXNzQmFzZVBhdGgoKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihnK2QpfWVsc2V7dmFyIGg9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXIiLG51bGwsIl8iKSk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoaCk7dmFyIGk9e307Zm9yKHZhciBqPTA7ajxiLmxlbmd0aDtqKyspe3ZhciBrPWJbal0sbD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKGssbnVsbCwiXyIpLnJlcGxhY2UoLy5qcyQvLCIiKSk7aVtrXT1sfX10aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczppLG1vZHVsZTplLGNsYXNzbmFtZTpmfSksdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5jYWxsYmFja3M9e307dmFyIG09dGhpczt0aGlzLiR3b3JrZXIub25lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyB3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpLGF9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLnR5cGUpe2Nhc2UibG9nIjp3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGIuZGF0YSk7YnJlYWs7Y2FzZSJldmVudCI6bS5fZW1pdChiLm5hbWUse2RhdGE6Yi5kYXRhfSk7YnJlYWs7Y2FzZSJjYWxsIjp2YXIgYz1tLmNhbGxiYWNrc1tiLmlkXTtjJiYoYyhiLmRhdGEpLGRlbGV0ZSBtLmNhbGxiYWNrc1tiLmlkXSl9fX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoL15bYS16XSs6XC9cL1teXC9dK1wvLywiIiksYT1sb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QrKGEuY2hhckF0KDApPT0iLyI/IiI6bG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywiIikpKyIvIithLnJlcGxhY2UoL15bXC9dKy8sIiIpLGF9LHRoaXMuJGd1ZXNzQmFzZVBhdGg9ZnVuY3Rpb24oKXtpZihhLmFjZUJhc2VVcmwpcmV0dXJuIGEuYWNlQmFzZVVybDt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS1hY2UtYmFzZSIpO2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvXC8qJC8sIi8iKTt2YXIgZj1kLnNyY3x8ZC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFmKWNvbnRpbnVlO3ZhciBnPWYubWF0Y2goL14oPzooLipcLylhY2VcLmpzfCguKlwvKWFjZSgtdW5jb21wcmVzc2VkKT8oLW5vY29uZmxpY3QpP1wuanMpKD86XD98JCkvKTtpZihnKXJldHVybiBnWzFdfHxnWzJdfXJldHVybiIifSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX2VtaXQoInRlcm1pbmF0ZSIse30pLHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbCx0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmEsYXJnczpifSl9LHRoaXMuY2FsbD1mdW5jdGlvbihhLGIsYyl7aWYoYyl7dmFyIGQ9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3NbZF09YyxiLnB1c2goZCl9dGhpcy5zZW5kKGEsYil9LHRoaXMuZW1pdD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmEsZGF0YTp7ZGF0YTpiLmRhdGF9fSl9Y2F0Y2goYyl7fX0sdGhpcy5hdHRhY2hUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe3RoaXMuJGRvYyYmdGhpcy50ZXJtaW5hdGUoKSx0aGlzLiRkb2M9YSx0aGlzLmNhbGwoInNldFZhbHVlIixbYS5nZXRWYWx1ZSgpXSksYS5vbigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKX0sdGhpcy5jaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbihhKXthLnJhbmdlPXtzdGFydDphLmRhdGEucmFuZ2Uuc3RhcnQsZW5kOmEuZGF0YS5yYW5nZS5lbmR9LHRoaXMuZW1pdCgiY2hhbmdlIixhKX19KSkuY2FsbChmLnByb3RvdHlwZSksYi5Xb3JrZXJDbGllbnQ9Zn0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGo9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLGs9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpLCJpIiksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgan07ZC5pbmhlcml0cyhrLGUpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nUnVsZXM9ImNTdHlsZSIsdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKS50b2tlbnM7aWYoZS5sZW5ndGgmJmVbZS5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO3ZhciBmPWIubWF0Y2goL14uKlx7XHMqJC8pO3JldHVybiBmJiYoZCs9YyksZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBpKFsiYWNlIl0sIndvcmtlci1jc3MuanMiLCJhY2UvbW9kZS9jc3Nfd29ya2VyIiwiV29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImNzc2xpbnQiLGZ1bmN0aW9uKGIpe3ZhciBjPVtdO2IuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2MucHVzaCh7cm93OmEubGluZS0xLGNvbHVtbjphLmNvbC0xLHRleHQ6YS5tZXNzYWdlLHR5cGU6YS50eXBlLGxpbnQ6YX0pfSksYS5zZXRBbm5vdGF0aW9ucyhjKX0pLGJ9fS5jYWxsKGsucHJvdG90eXBlKSxiLk1vZGU9a30pLGRlZmluZSgiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIi1tb3otYXBwZWFyYW5jZXwtbW96LWJveC1zaXppbmd8LXdlYmtpdC1ib3gtc2l6aW5nfC1tb3otb3V0bGluZS1yYWRpdXN8LW1vei10cmFuc2Zvcm18LXdlYmtpdC10cmFuc2Zvcm18YXBwZWFyYW5jZXxhemltdXRofGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kfGJvcmRlci1ib3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1ib3R0b218Ym9yZGVyLWNvbGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVmdC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItbGVmdHxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItcmlnaHR8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci10b3B8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3VlLWFmdGVyfGN1ZS1iZWZvcmV8Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxlbGV2YXRpb258ZW1wdHktY2VsbHN8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9udC1zaXplLWFkanVzdHxmb250LXNpemV8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2VpZ2h0fGZvbnR8aGVpZ2h0fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxsaXN0LXN0eWxlfG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWFya2VyLW9mZnNldHxtYXJnaW58bWFya3N8bWF4LWhlaWdodHxtYXgtd2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8LW1vei1ib3JkZXItcmFkaXVzfG9wYWNpdHl8b3JwaGFuc3xvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtcmFkaXVzfG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdXRsaW5lfG92ZXJmbG93fG92ZXJmbG93LXh8b3ZlcmZsb3cteXxwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWRkaW5nfHBhZ2UtYnJlYWstYWZ0ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZXxwYXVzZS1hZnRlcnxwYXVzZS1iZWZvcmV8cGF1c2V8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9pbnRlci1ldmVudHN8cG9zaXRpb258cXVvdGVzfHJlc2l6ZXxyaWNobmVzc3xyaWdodHxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNwZWVjaC1yYXRlfHNwZWFrfHN0cmVzc3x0YWJsZS1sYXlvdXR8dGV4dC1hbGlnbnx0ZXh0LWRlY29yYXRpb258dGV4dC1pbmRlbnR8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dG9wfHRyYW5zZm9ybXx1bmljb2RlLWJpZGl8dmVydGljYWwtYWxpZ258dmlzaWJpbGl0eXx2b2ljZS1mYW1pbHl8dm9sdW1lfHdoaXRlLXNwYWNlfHdpZG93c3x3aWR0aHx3b3JkLXNwYWNpbmd8ei1pbmRleCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJhYnNvbHV0ZXxhbGwtc2Nyb2xsfGFsd2F5c3xhcm1lbmlhbnxhdXRvfGJhc2VsaW5lfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXplfGNlbnRlcnxjaGFyfGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb250ZW50LWJveHxjcm9zc2hhaXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxkaXNjfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVsbGlwc2lzfGZpeGVkfGdlb3JnaWFufGdyb292ZXxoYW5kfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFsfGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLXNwYWNlfGluYWN0aXZlfGluaGVyaXR8aW5saW5lLWJsb2NrfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdvcmR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaXN0LWl0ZW18bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtZWRpdW18bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1kcm9wfG5vLXJlcGVhdHxudy1yZXNpemV8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG9ibGlxdWV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cG9pbnRlcnxwcm9ncmVzc3xyZWxhdGl2ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmlnaHR8cmlkZ2V8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbWFsbC1jYXBzfHNvbGlkfHNxdWFyZXxzdGF0aWN8c3RyaWN0fHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRiLXJsfHRleHQtYm90dG9tfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0b3B8dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhhfHVwcGVyLWxhdGlufHVwcGVyLXJvbWFufHVwcGVyY2FzZXx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHplcm8iLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCJhcXVhfGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8b2xpdmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93Ii5zcGxpdCgifCIpKSxmPSJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSIsZz1be3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJydWxlc2V0X2NvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmYrIig/OmVtfGV4fHB4fGNtfG1tfGlufHB0fHBjfGRlZ3xyYWR8Z3JhZHxtc3xzfGh6fGtoenwlKSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXs2fSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXszfSJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LnR5cGUiOmIuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5mdW5jdGlvbiI6Yy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmNvbnN0YW50IjpkLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiJ0ZXh0In0scmVnZXg6IlxcLT9bYS16QS1aX11bYS16QS1aMC05X1xcLV0qIn1dLGg9ZS5jb3B5QXJyYXkoZyk7aC51bnNoaWZ0KHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiXFx9IixuZXh0OiJzdGFydCJ9KTt2YXIgaT1lLmNvcHlBcnJheShnKTtpLnVuc2hpZnQoe3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJcXH0iLG5leHQ6Im1lZGlhIn0pO3ZhciBqPVt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxrPWUuY29weUFycmF5KGopO2sudW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0pO3ZhciBsPWUuY29weUFycmF5KGopO2wudW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6Im1lZGlhIn0pO3ZhciBtPWUuY29weUFycmF5KGopO20udW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InJ1bGVzZXQifSksdGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IlxceyIsbmV4dDoicnVsZXNldCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiQC4qP3siLG5leHQ6Im1lZGlhIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifV0sbWVkaWE6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoibWVkaWFfY29tbWVudCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiXFx7IixuZXh0OiJtZWRpYV9ydWxlc2V0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXH0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifV0sY29tbWVudDprLHJ1bGVzZXQ6aCxydWxlc2V0X2NvbW1lbnQ6bSxtZWRpYV9ydWxlc2V0OmksbWVkaWFfY29tbWVudDpsfX07ZC5pbmhlcml0cyhnLGYpLGIuQ3NzSGlnaGxpZ2h0UnVsZXM9Z30pLGRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF91dGlsIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzLGY9YSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyxnPWEoIi4veG1sX3V0aWwiKSxoPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaT1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJ0ZXh0IixtZXJnZTohMCxyZWdleDoiPFxcIVxcW0NEQVRBXFxbIixuZXh0OiJjZGF0YSJ9LHt0b2tlbjoieG1sX3BlIixyZWdleDoiPFxcPy4qP1xcPz4ifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiI8XFwhLS0iLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPCg/PXMqc2NyaXB0XFxiKSIsbmV4dDoic2NyaXB0In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjwoPz1zKnN0eWxlXFxiKSIsbmV4dDoiY3NzIn0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/IixuZXh0OiJ0YWcifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixtZXJnZTohMCxyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZy50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0IiksZy50YWcodGhpcy4kcnVsZXMsImNzcyIsImNzcy1zdGFydCIpLGcudGFnKHRoaXMuJHJ1bGVzLCJzY3JpcHQiLCJqcy1zdGFydCIpLHRoaXMuZW1iZWRSdWxlcyhmLCJqcy0iLFt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKig/PTxcXC9zY3JpcHQ+KSIsbmV4dDoidGFnIn0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8oPz1zY3JpcHQpIixuZXh0OiJ0YWcifV0pLHRoaXMuZW1iZWRSdWxlcyhlLCJjc3MtIixbe3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8oPz1zdHlsZSkiLG5leHQ6InRhZyJ9XSl9O2QuaW5oZXJpdHMoaSxoKSxiLkh0bWxIaWdobGlnaHRSdWxlcz1pfSksZGVmaW5lKCJhY2UvbW9kZS94bWxfdXRpbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEpe3JldHVyblt7dG9rZW46InN0cmluZyIscmVnZXg6JyIuKj8iJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKicsbmV4dDphKyItcXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKj8nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKiIsbmV4dDphKyItcXN0cmluZyJ9XX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLio/IithLG5leHQ6Yn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2xhbmciKSxlPWQuYXJyYXlUb01hcCgiYnV0dG9ufGZvcm18aW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhIi5zcGxpdCgifCIpKSxmPWQuYXJyYXlUb01hcCgidGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dHIiLnNwbGl0KCJ8IikpO2IudGFnPWZ1bmN0aW9uKGEsYixjKXthW2JdPVt7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09ImEiPyJtZXRhLnRhZy5hbmNob3IiOmE9PT0iaW1nIj8ibWV0YS50YWcuaW1hZ2UiOmE9PT0ic2NyaXB0Ij8ibWV0YS50YWcuc2NyaXB0IjphPT09InN0eWxlIj8ibWV0YS50YWcuc3R5bGUiOmUuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcuZm9ybSI6Zi5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy50YWJsZSI6Im1ldGEudGFnIn0sbWVyZ2U6ITAscmVnZXg6IlstX2EtekEtWjAtOTohXSsiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OmIrImVtYmVkLWF0dHJpYnV0ZS1saXN0In1dLGFbYisiLXFzdHJpbmciXT1oKCInIixiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiLXFxc3RyaW5nIl09aCgnIicsYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiKSxhW2IrImVtYmVkLWF0dHJpYnV0ZS1saXN0Il09W3t0b2tlbjoibWV0YS50YWciLG1lcmdlOiEwLHJlZ2V4OiIvPz4iLG5leHQ6Y30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiPSJ9LHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLmNvbmNhdChnKGIpKX19KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWEoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGc9ZnVuY3Rpb24oKXt0aGlzLmluaGVyaXQoZixbInN0cmluZ19kcXVvdGVzIl0pLHRoaXMuYWRkKCJicmFja2V0cyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iPCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiPyExOnt0ZXh0OiI8PiIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iPiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09Ij4iKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxrPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzIpO2lmKGs9PSI8LyIpe3ZhciBsPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGgucm93KSkrZC5nZXRUYWJTdHJpbmcoKSxtPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGgucm93KSk7cmV0dXJue3RleHQ6IlxuIitsKyJcbiIrbSxzZWxlY3Rpb246WzEsbC5sZW5ndGgsMSxsLmxlbmd0aF19fX19KX07ZC5pbmhlcml0cyhnLGUpLGIuWG1sQmVoYXZpb3VyPWd9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4vbWl4ZWQiKS5Gb2xkTW9kZSxmPWEoIi4veG1sIikuRm9sZE1vZGUsZz1hKCIuL2NzdHlsZSIpLkZvbGRNb2RlLGg9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe2UuY2FsbCh0aGlzLG5ldyBmKHthcmVhOjEsYmFzZToxLGJyOjEsY29sOjEsY29tbWFuZDoxLGVtYmVkOjEsaHI6MSxpbWc6MSxpbnB1dDoxLGtleWdlbjoxLGxpbms6MSxtZXRhOjEscGFyYW06MSxzb3VyY2U6MSx0cmFjazoxLHdicjoxLGxpOjEsZHQ6MSxkZDoxLHA6MSxydDoxLHJwOjEsb3B0Z3JvdXA6MSxvcHRpb246MSxjb2xncm91cDoxLHRkOjEsdGg6MX0pLHsianMtIjpuZXcgZywiY3NzLSI6bmV3IGd9KX07ZC5pbmhlcml0cyhoLGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxmPWIuRm9sZE1vZGU9ZnVuY3Rpb24oYSxiKXt0aGlzLmRlZmF1bHRNb2RlPWEsdGhpcy5zdWJNb2Rlcz1ifTtkLmluaGVyaXRzKGYsZSksZnVuY3Rpb24oKXt0aGlzLiRnZXRNb2RlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiB0aGlzLnN1Yk1vZGVzKWlmKGEuaW5kZXhPZihiKT09PTApcmV0dXJuIHRoaXMuc3ViTW9kZXNbYl07cmV0dXJuIG51bGx9LHRoaXMuJHRyeU1vZGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy4kZ2V0TW9kZShhKTtyZXR1cm4gZT9lLmdldEZvbGRXaWRnZXQoYixjLGQpOiIifSx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiR0cnlNb2RlKGEuZ2V0U3RhdGUoYy0xKSxhLGIsYyl8fHRoaXMuJHRyeU1vZGUoYS5nZXRTdGF0ZShjKSxhLGIsYyl8fHRoaXMuZGVmYXVsdE1vZGUuZ2V0Rm9sZFdpZGdldChhLGIsYyl9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRNb2RlKGEuZ2V0U3RhdGUoYy0xKSk7aWYoIWR8fCFkLmdldEZvbGRXaWRnZXQoYSxiLGMpKWQ9dGhpcy4kZ2V0TW9kZShhLmdldFN0YXRlKGMpKTtpZighZHx8IWQuZ2V0Rm9sZFdpZGdldChhLGIsYykpZD10aGlzLmRlZmF1bHRNb2RlO3JldHVybiBkLmdldEZvbGRXaWRnZXRSYW5nZShhLGIsYyl9fS5jYWxsKGYucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi8uLi9saWIvbGFuZyIpLGY9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxnPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsaD1hKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3IsaT1iLkZvbGRNb2RlPWZ1bmN0aW9uKGEpe2cuY2FsbCh0aGlzKSx0aGlzLnZvaWRFbGVtZW50cz1hfHx7fX07ZC5pbmhlcml0cyhpLGcpLGZ1bmN0aW9uKCl7dGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9nZXRGaXJzdFRhZ0luTGluZShhLGMpO3JldHVybiBkLmNsb3Npbmc/Yj09Im1hcmtiZWdpbmVuZCI/ImVuZCI6IiI6IWQudGFnTmFtZXx8dGhpcy52b2lkRWxlbWVudHNbZC50YWdOYW1lLnRvTG93ZXJDYXNlKCldPyIiOmQuc2VsZkNsb3Npbmc/IiI6ZC52YWx1ZS5pbmRleE9mKCIvIitkLnRhZ05hbWUpIT09LTE/IiI6InN0YXJ0In0sdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldFRva2VucyhiLGIpWzBdLnRva2VucyxkPSIiO2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZz1jW2ZdO2cudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MD9kKz1nLnZhbHVlOmQrPWUuc3RyaW5nUmVwZWF0KCIgIixnLnZhbHVlLmxlbmd0aCl9cmV0dXJuIHRoaXMuX3BhcnNlVGFnKGQpfSx0aGlzLnRhZ1JlPS9eKFxzKikoPD8oXC8/KShbLV9hLXpBLVowLTk6IV0qKVxzKihcLz8pPj8pLyx0aGlzLl9wYXJzZVRhZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnRhZ1JlLmV4ZWMoYSksYz10aGlzLnRhZ1JlLmxhc3RJbmRleHx8MDtyZXR1cm4gdGhpcy50YWdSZS5sYXN0SW5kZXg9MCx7dmFsdWU6YSxtYXRjaDpiP2JbMl06IiIsY2xvc2luZzpiPyEhYlszXTohMSxzZWxmQ2xvc2luZzpiPyEhYls1XXx8YlsyXT09Ii8+IjohMSx0YWdOYW1lOmI/Yls0XToiIixjb2x1bW46YlsxXT9jK2JbMV0ubGVuZ3RoOmN9fSx0aGlzLl9yZWFkVGFnRm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLmdldEN1cnJlbnRUb2tlbigpO2lmKCFiKXJldHVybiBudWxsO3ZhciBjPSIiLGQ7ZG8gaWYoYi50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wKXtpZighZCl2YXIgZD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9O2MrPWIudmFsdWU7aWYoYy5pbmRleE9mKCI+IikhPT0tMSl7dmFyIGU9dGhpcy5fcGFyc2VUYWcoYyk7cmV0dXJuIGUuc3RhcnQ9ZCxlLmVuZD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrYi52YWx1ZS5sZW5ndGh9LGEuc3RlcEZvcndhcmQoKSxlfX13aGlsZShiPWEuc3RlcEZvcndhcmQoKSk7cmV0dXJuIG51bGx9LHRoaXMuX3JlYWRUYWdCYWNrd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLmdldEN1cnJlbnRUb2tlbigpO2lmKCFiKXJldHVybiBudWxsO3ZhciBjPSIiLGQ7ZG8gaWYoYi50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wKXtkfHwoZD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrYi52YWx1ZS5sZW5ndGh9KSxjPWIudmFsdWUrYztpZihjLmluZGV4T2YoIjwiKSE9PS0xKXt2YXIgZT10aGlzLl9wYXJzZVRhZyhjKTtyZXR1cm4gZS5lbmQ9ZCxlLnN0YXJ0PXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX0sYS5zdGVwQmFja3dhcmQoKSxlfX13aGlsZShiPWEuc3RlcEJhY2t3YXJkKCkpO3JldHVybiBudWxsfSx0aGlzLl9wb3A9ZnVuY3Rpb24oYSxiKXt3aGlsZShhLmxlbmd0aCl7dmFyIGM9YVthLmxlbmd0aC0xXTtpZighYnx8Yy50YWdOYW1lPT1iLnRhZ05hbWUpcmV0dXJuIGEucG9wKCk7aWYodGhpcy52b2lkRWxlbWVudHNbYi50YWdOYW1lXSlyZXR1cm47aWYodGhpcy52b2lkRWxlbWVudHNbYy50YWdOYW1lXSl7YS5wb3AoKTtjb250aW51ZX1yZXR1cm4gbnVsbH19LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9nZXRGaXJzdFRhZ0luTGluZShhLGMpO2lmKCFkLm1hdGNoKXJldHVybiBudWxsO3ZhciBlPWQuY2xvc2luZ3x8ZC5zZWxmQ2xvc2luZyxnPVtdLGk7aWYoIWUpe3ZhciBqPW5ldyBoKGEsYyxkLmNvbHVtbiksaz17cm93OmMsY29sdW1uOmQuY29sdW1uK2QudGFnTmFtZS5sZW5ndGgrMn07d2hpbGUoaT10aGlzLl9yZWFkVGFnRm9yd2FyZChqKSl7aWYoaS5zZWxmQ2xvc2luZyl7aWYoIWcubGVuZ3RoKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGkuZW5kLmNvbHVtbi09MixmLmZyb21Qb2ludHMoaS5zdGFydCxpLmVuZCk7Y29udGludWV9aWYoaS5jbG9zaW5nKXt0aGlzLl9wb3AoZyxpKTtpZihnLmxlbmd0aD09MClyZXR1cm4gZi5mcm9tUG9pbnRzKGssaS5zdGFydCl9ZWxzZSBnLnB1c2goaSl9fWVsc2V7dmFyIGo9bmV3IGgoYSxjLGQuY29sdW1uK2QubWF0Y2gubGVuZ3RoKSxsPXtyb3c6Yyxjb2x1bW46ZC5jb2x1bW59O3doaWxlKGk9dGhpcy5fcmVhZFRhZ0JhY2t3YXJkKGopKXtpZihpLnNlbGZDbG9zaW5nKXtpZighZy5sZW5ndGgpcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsaS5lbmQuY29sdW1uLT0yLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGkuZW5kKTtjb250aW51ZX1pZighaS5jbG9zaW5nKXt0aGlzLl9wb3AoZyxpKTtpZihnLmxlbmd0aD09MClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixmLmZyb21Qb2ludHMoaS5zdGFydCxsKX1lbHNlIGcucHVzaChpKX19fX0uY2FsbChpLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-java-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvamF2YSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9qYXZhX2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi9qYXZhc2NyaXB0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YV9oaWdobGlnaHRfcnVsZXMiKS5KYXZhSGlnaGxpZ2h0UnVsZXMsaD1mdW5jdGlvbigpe2UuY2FsbCh0aGlzKSx0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKX07ZC5pbmhlcml0cyhoLGUpLGZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGx9fS5jYWxsKGgucHJvdG90eXBlKSxiLk1vZGU9aH0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWEoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGs9YSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGw9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLG09ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuJGJlaGF2aW91cj1uZXcgayx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgbH07ZC5pbmhlcml0cyhtLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopXC9cLy87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBoPW5ldyBpKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2guc3RhcnQucm93PWcsaC5lbmQucm93PWcsaC5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShoLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIi8vIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucyxnPWUuc3RhdGU7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIil7dmFyIGg9Yi5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKlw6fFtce1woXFtdKVxzKiQvKTtoJiYoZCs9Yyl9ZWxzZSBpZihhPT0iZG9jLXN0YXJ0Iil7aWYoZz09InN0YXJ0Inx8YT09InJlZ2V4X2FsbG93ZWQiKXJldHVybiIiO3ZhciBoPWIubWF0Y2goL15ccyooXC8/KVwqLyk7aCYmKGhbMV0mJihkKz0iICIpLGQrPSIqICIpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGooWyJhY2UiXSwid29ya2VyLWphdmFzY3JpcHQuanMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsIkphdmFTY3JpcHRXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigianNsaW50IixmdW5jdGlvbihiKXt2YXIgYz1bXTtmb3IodmFyIGQ9MDtkPGIuZGF0YS5sZW5ndGg7ZCsrKXt2YXIgZT1iLmRhdGFbZF07ZSYmYy5wdXNoKHtyb3c6ZS5saW5lLTEsY29sdW1uOmUuY2hhcmFjdGVyLTEsdGV4dDplLnJlYXNvbix0eXBlOiJ3YXJuaW5nIixsaW50OmV9KX1hLnNldEFubm90YXRpb25zKGMpfSksYi5vbigibmFyY2lzc3VzIixmdW5jdGlvbihiKXthLnNldEFubm90YXRpb25zKFtiLmRhdGFdKX0pLGIub24oInRlcm1pbmF0ZSIsZnVuY3Rpb24oKXthLmNsZWFyQW5ub3RhdGlvbnMoKX0pLGJ9fS5jYWxsKG0ucHJvdG90eXBlKSxiLk1vZGU9bX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvdW5pY29kZSIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi4vdW5pY29kZSIpLGc9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0Ii5zcGxpdCgifCIpKSxjPSJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkIixkPWUuYXJyYXlUb01hcCgiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19fIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIuc3BsaXQoInwiKSksaT1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksaj1lLmFycmF5VG9NYXAoImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIi5zcGxpdCgifCIpKSxrPSJbIitmLnBhY2thZ2VzLkwrIlxcJF9dWyIrZi5wYWNrYWdlcy5MK2YucGFja2FnZXMuTW4rZi5wYWNrYWdlcy5NYytmLnBhY2thZ2VzLk5kK2YucGFja2FnZXMuUGMrIlxcJF9dKlxcYiI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGcpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46WyJrZXl3b3JkLmRlZmluaXRpb24iLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSxyZWdleDoiKGZ1bmN0aW9uKShcXHMrKSgiK2srIikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiIrYysiKVxcYiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShjKT8idmFyaWFibGUubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuZGVwcmVjYXRlZCI6aC5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZC5kZWZpbml0aW9uIjpiLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjppLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ai5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5pbGxlZ2FsIjpjPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6a30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwvPT8iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJeIyEuKiQifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHJlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudF9yZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiXFwvIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6Ii9cXHcqIixuZXh0OiJzdGFydCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlteXFxcXC9cXFtdKyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXFxbIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6Il0iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlteXFxcXFxcXV0rIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxjb21tZW50X3JlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGcsImRvYy0iLFsobmV3IGcpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhpLGgpLGIuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzPWl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudC5kb2MudGFnIixyZWdleDoiQFtcXHdcXGRfXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFxzKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJUT0RPIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlteQFxcKl0rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6Ii4ifV19fTtkLmluaGVyaXRzKGYsZSksZnVuY3Rpb24oKXt0aGlzLmdldFN0YXJ0UnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwvXFwqKD89XFwqKSIsbmV4dDphfX0sdGhpcy5nZXRFbmRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXCpcXC8iLG5leHQ6YX19fS5jYWxsKGYucHJvdG90eXBlKSxiLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcz1mfSksYWNlLmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGFjZS5kZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWZ1bmN0aW9uKGIsZCxlLGYpe3RoaXMuY2hhbmdlTGlzdGVuZXI9dGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO2lmKGMucGFja2FnZWQpe3ZhciBnPXRoaXMuJGd1ZXNzQmFzZVBhdGgoKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihnK2QpfWVsc2V7dmFyIGg9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXIiLG51bGwsIl8iKSk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoaCk7dmFyIGk9e307Zm9yKHZhciBqPTA7ajxiLmxlbmd0aDtqKyspe3ZhciBrPWJbal0sbD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKGssbnVsbCwiXyIpLnJlcGxhY2UoLy5qcyQvLCIiKSk7aVtrXT1sfX10aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczppLG1vZHVsZTplLGNsYXNzbmFtZTpmfSksdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5jYWxsYmFja3M9e307dmFyIG09dGhpczt0aGlzLiR3b3JrZXIub25lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyB3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpLGF9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLnR5cGUpe2Nhc2UibG9nIjp3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGIuZGF0YSk7YnJlYWs7Y2FzZSJldmVudCI6bS5fZW1pdChiLm5hbWUse2RhdGE6Yi5kYXRhfSk7YnJlYWs7Y2FzZSJjYWxsIjp2YXIgYz1tLmNhbGxiYWNrc1tiLmlkXTtjJiYoYyhiLmRhdGEpLGRlbGV0ZSBtLmNhbGxiYWNrc1tiLmlkXSl9fX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoL15bYS16XSs6XC9cL1teXC9dK1wvLywiIiksYT1sb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QrKGEuY2hhckF0KDApPT0iLyI/IiI6bG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywiIikpKyIvIithLnJlcGxhY2UoL15bXC9dKy8sIiIpLGF9LHRoaXMuJGd1ZXNzQmFzZVBhdGg9ZnVuY3Rpb24oKXtpZihhLmFjZUJhc2VVcmwpcmV0dXJuIGEuYWNlQmFzZVVybDt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS1hY2UtYmFzZSIpO2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvXC8qJC8sIi8iKTt2YXIgZj1kLnNyY3x8ZC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFmKWNvbnRpbnVlO3ZhciBnPWYubWF0Y2goL14oPzooLipcLylhY2VcLmpzfCguKlwvKWFjZSgtdW5jb21wcmVzc2VkKT8oLW5vY29uZmxpY3QpP1wuanMpKD86XD98JCkvKTtpZihnKXJldHVybiBnWzFdfHxnWzJdfXJldHVybiIifSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX2VtaXQoInRlcm1pbmF0ZSIse30pLHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbCx0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmEsYXJnczpifSl9LHRoaXMuY2FsbD1mdW5jdGlvbihhLGIsYyl7aWYoYyl7dmFyIGQ9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3NbZF09YyxiLnB1c2goZCl9dGhpcy5zZW5kKGEsYil9LHRoaXMuZW1pdD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmEsZGF0YTp7ZGF0YTpiLmRhdGF9fSl9Y2F0Y2goYyl7fX0sdGhpcy5hdHRhY2hUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe3RoaXMuJGRvYyYmdGhpcy50ZXJtaW5hdGUoKSx0aGlzLiRkb2M9YSx0aGlzLmNhbGwoInNldFZhbHVlIixbYS5nZXRWYWx1ZSgpXSksYS5vbigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKX0sdGhpcy5jaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbihhKXthLnJhbmdlPXtzdGFydDphLmRhdGEucmFuZ2Uuc3RhcnQsZW5kOmEuZGF0YS5yYW5nZS5lbmR9LHRoaXMuZW1pdCgiY2hhbmdlIixhKX19KSkuY2FsbChmLnByb3RvdHlwZSksYi5Xb3JrZXJDbGllbnQ9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGY9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxnPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9O2QuaW5oZXJpdHMoZyxmKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPS8oXHt8XFspW15cfVxdXSokfF5ccyooXC9cKikvLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9L15bXlxbXHtdKihcfXxcXSl8Xltcc1wqXSooXCpcLykvLHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyksZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4O2lmKGZbMV0pcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhhLGZbMV0sYyxnKTt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnK2ZbMF0ubGVuZ3RoKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9aWYoYiE9PSJtYXJrYmVnaW5lbmQiKXJldHVybjt2YXIgZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXgrZlswXS5sZW5ndGg7aWYoZlsyXSl7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZyk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofXZhciBpPXtyb3c6Yyxjb2x1bW46Z30saj1hLiRmaW5kT3BlbmluZ0JyYWNrZXQoZlsxXSxpKTtpZighailyZXR1cm47cmV0dXJuIGouY29sdW1uKyssaS5jb2x1bW4tLSxlLmZyb21Qb2ludHMoaixpKX19fS5jYWxsKGcucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxnPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaD1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYWJzdHJhY3R8Y29udGludWV8Zm9yfG5ld3xzd2l0Y2h8YXNzZXJ0fGRlZmF1bHR8Z290b3xwYWNrYWdlfHN5bmNocm9uaXplZHxib29sZWFufGRvfGlmfHByaXZhdGV8dGhpc3xicmVha3xkb3VibGV8aW1wbGVtZW50c3xwcm90ZWN0ZWR8dGhyb3d8Ynl0ZXxlbHNlfGltcG9ydHxwdWJsaWN8dGhyb3dzfGNhc2V8ZW51bXxpbnN0YW5jZW9mfHJldHVybnx0cmFuc2llbnR8Y2F0Y2h8ZXh0ZW5kc3xpbnR8c2hvcnR8dHJ5fGNoYXJ8ZmluYWx8aW50ZXJmYWNlfHN0YXRpY3x2b2lkfGNsYXNzfGZpbmFsbHl8bG9uZ3xzdHJpY3RmcHx2b2xhdGlsZXxjb25zdHxmbG9hdHxuYXRpdmV8c3VwZXJ8d2hpbGUiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJBYnN0cmFjdE1ldGhvZEVycm9yfEFzc2VydGlvbkVycm9yfENsYXNzQ2lyY3VsYXJpdHlFcnJvcnxDbGFzc0Zvcm1hdEVycm9yfERlcHJlY2F0ZWR8RW51bUNvbnN0YW50Tm90UHJlc2VudEV4Y2VwdGlvbnxFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3J8SWxsZWdhbEFjY2Vzc0Vycm9yfElsbGVnYWxUaHJlYWRTdGF0ZUV4Y2VwdGlvbnxJbnN0YW50aWF0aW9uRXJyb3J8SW50ZXJuYWxFcnJvcnxOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbnxOb1N1Y2hGaWVsZEVycm9yfE92ZXJyaWRlfFByb2Nlc3N8UHJvY2Vzc0J1aWxkZXJ8U2VjdXJpdHlNYW5hZ2VyfFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258U3VwcHJlc3NXYXJuaW5nc3xUeXBlTm90UHJlc2VudEV4Y2VwdGlvbnxVbmtub3duRXJyb3J8VW5zYXRpc2ZpZWRMaW5rRXJyb3J8VW5zdXBwb3J0ZWRDbGFzc1ZlcnNpb25FcnJvcnxWZXJpZnlFcnJvcnxJbnN0YW50aWF0aW9uRXhjZXB0aW9ufEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258QXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9ufE5vU3VjaEZpZWxkRXhjZXB0aW9ufElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbnxOdW1iZXJGb3JtYXRFeGNlcHRpb258U2VjdXJpdHlFeGNlcHRpb258Vm9pZHxJbmhlcml0YWJsZVRocmVhZExvY2FsfElsbGVnYWxTdGF0ZUV4Y2VwdGlvbnxJbnRlcnJ1cHRlZEV4Y2VwdGlvbnxOb1N1Y2hNZXRob2RFeGNlcHRpb258SWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbnxVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbnxFbnVtfFN0cmljdE1hdGh8UGFja2FnZXxDb21waWxlcnxSZWFkYWJsZXxSdW50aW1lfFN0cmluZ0J1aWxkZXJ8TWF0aHxJbmNvbXBhdGlibGVDbGFzc0NoYW5nZUVycm9yfE5vU3VjaE1ldGhvZEVycm9yfFRocmVhZExvY2FsfFJ1bnRpbWVQZXJtaXNzaW9ufEFyaXRobWV0aWNFeGNlcHRpb258TnVsbFBvaW50ZXJFeGNlcHRpb258TG9uZ3xJbnRlZ2VyfFNob3J0fEJ5dGV8RG91YmxlfE51bWJlcnxGbG9hdHxDaGFyYWN0ZXJ8Qm9vbGVhbnxTdGFja1RyYWNlRWxlbWVudHxBcHBlbmRhYmxlfFN0cmluZ0J1ZmZlcnxJdGVyYWJsZXxUaHJlYWRHcm91cHxSdW5uYWJsZXxUaHJlYWR8SWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbnxTdGFja092ZXJmbG93RXJyb3J8T3V0T2ZNZW1vcnlFcnJvcnxWaXJ0dWFsTWFjaGluZUVycm9yfEFycmF5U3RvcmVFeGNlcHRpb258Q2xhc3NDYXN0RXhjZXB0aW9ufExpbmthZ2VFcnJvcnxOb0NsYXNzRGVmRm91bmRFcnJvcnxDbGFzc05vdEZvdW5kRXhjZXB0aW9ufFJ1bnRpbWVFeGNlcHRpb258RXhjZXB0aW9ufFRocmVhZERlYXRofEVycm9yfFRocm93YWJsZXxTeXN0ZW18Q2xhc3NMb2FkZXJ8Q2xvbmVhYmxlfENsYXNzfENoYXJTZXF1ZW5jZXxDb21wYXJhYmxlfFN0cmluZ3xPYmplY3QiLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCIiLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBmKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PSJ0aGlzIj8idmFyaWFibGUubGFuZ3VhZ2UiOmEuaGFzT3duUHJvcGVydHkoZSk/ImtleXdvcmQiOmMuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOmQuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOmIuaGFzT3duUHJvcGVydHkoZSk/ImNvbnN0YW50Lmxhbmd1YWdlIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkifSx7dG9rZW46ImxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhmLCJkb2MtIixbKG5ldyBmKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaCxnKSxiLkphdmFIaWdobGlnaHRSdWxlcz1ofSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-java.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9qYXZhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9qYXZhX2hpZ2hsaWdodF9ydWxlcyIpLkphdmFIaWdobGlnaHRSdWxlcyxoPWZ1bmN0aW9uKCl7ZS5jYWxsKHRoaXMpLHRoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpfTtkLmluaGVyaXRzKGgsZSksZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbH19LmNhbGwoaC5wcm90b3R5cGUpLGIuTW9kZT1ofSksZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvdW5pY29kZSIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi4vdW5pY29kZSIpLGc9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0Ii5zcGxpdCgifCIpKSxjPSJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkIixkPWUuYXJyYXlUb01hcCgiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19fIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIuc3BsaXQoInwiKSksaT1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksaj1lLmFycmF5VG9NYXAoImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIi5zcGxpdCgifCIpKSxrPSJbIitmLnBhY2thZ2VzLkwrIlxcJF9dWyIrZi5wYWNrYWdlcy5MK2YucGFja2FnZXMuTW4rZi5wYWNrYWdlcy5NYytmLnBhY2thZ2VzLk5kK2YucGFja2FnZXMuUGMrIlxcJF9dKlxcYiI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGcpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46WyJrZXl3b3JkLmRlZmluaXRpb24iLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSxyZWdleDoiKGZ1bmN0aW9uKShcXHMrKSgiK2srIikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiIrYysiKVxcYiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShjKT8idmFyaWFibGUubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuZGVwcmVjYXRlZCI6aC5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZC5kZWZpbml0aW9uIjpiLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjppLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ai5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5pbGxlZ2FsIjpjPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6a30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwvPT8iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJeIyEuKiQifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHJlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudF9yZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiXFwvIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6Ii9cXHcqIixuZXh0OiJzdGFydCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlteXFxcXC9cXFtdKyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXFxbIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6Il0iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlteXFxcXFxcXV0rIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxjb21tZW50X3JlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGcsImRvYy0iLFsobmV3IGcpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhpLGgpLGIuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzPWl9KSxkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWZ1bmN0aW9uKGIsZCxlLGYpe3RoaXMuY2hhbmdlTGlzdGVuZXI9dGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO2lmKGMucGFja2FnZWQpe3ZhciBnPXRoaXMuJGd1ZXNzQmFzZVBhdGgoKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihnK2QpfWVsc2V7dmFyIGg9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXIiLG51bGwsIl8iKSk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoaCk7dmFyIGk9e307Zm9yKHZhciBqPTA7ajxiLmxlbmd0aDtqKyspe3ZhciBrPWJbal0sbD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKGssbnVsbCwiXyIpLnJlcGxhY2UoLy5qcyQvLCIiKSk7aVtrXT1sfX10aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczppLG1vZHVsZTplLGNsYXNzbmFtZTpmfSksdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5jYWxsYmFja3M9e307dmFyIG09dGhpczt0aGlzLiR3b3JrZXIub25lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyB3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpLGF9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLnR5cGUpe2Nhc2UibG9nIjp3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGIuZGF0YSk7YnJlYWs7Y2FzZSJldmVudCI6bS5fZW1pdChiLm5hbWUse2RhdGE6Yi5kYXRhfSk7YnJlYWs7Y2FzZSJjYWxsIjp2YXIgYz1tLmNhbGxiYWNrc1tiLmlkXTtjJiYoYyhiLmRhdGEpLGRlbGV0ZSBtLmNhbGxiYWNrc1tiLmlkXSl9fX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoL15bYS16XSs6XC9cL1teXC9dK1wvLywiIiksYT1sb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QrKGEuY2hhckF0KDApPT0iLyI/IiI6bG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywiIikpKyIvIithLnJlcGxhY2UoL15bXC9dKy8sIiIpLGF9LHRoaXMuJGd1ZXNzQmFzZVBhdGg9ZnVuY3Rpb24oKXtpZihhLmFjZUJhc2VVcmwpcmV0dXJuIGEuYWNlQmFzZVVybDt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS1hY2UtYmFzZSIpO2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvXC8qJC8sIi8iKTt2YXIgZj1kLnNyY3x8ZC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFmKWNvbnRpbnVlO3ZhciBnPWYubWF0Y2goL14oPzooLipcLylhY2VcLmpzfCguKlwvKWFjZSgtdW5jb21wcmVzc2VkKT8oLW5vY29uZmxpY3QpP1wuanMpKD86XD98JCkvKTtpZihnKXJldHVybiBnWzFdfHxnWzJdfXJldHVybiIifSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX2VtaXQoInRlcm1pbmF0ZSIse30pLHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbCx0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmEsYXJnczpifSl9LHRoaXMuY2FsbD1mdW5jdGlvbihhLGIsYyl7aWYoYyl7dmFyIGQ9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3NbZF09YyxiLnB1c2goZCl9dGhpcy5zZW5kKGEsYil9LHRoaXMuZW1pdD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmEsZGF0YTp7ZGF0YTpiLmRhdGF9fSl9Y2F0Y2goYyl7fX0sdGhpcy5hdHRhY2hUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe3RoaXMuJGRvYyYmdGhpcy50ZXJtaW5hdGUoKSx0aGlzLiRkb2M9YSx0aGlzLmNhbGwoInNldFZhbHVlIixbYS5nZXRWYWx1ZSgpXSksYS5vbigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKX0sdGhpcy5jaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbihhKXthLnJhbmdlPXtzdGFydDphLmRhdGEucmFuZ2Uuc3RhcnQsZW5kOmEuZGF0YS5yYW5nZS5lbmR9LHRoaXMuZW1pdCgiY2hhbmdlIixhKX19KSkuY2FsbChmLnByb3RvdHlwZSksYi5Xb3JrZXJDbGllbnQ9Zn0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2phdmFfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGc9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxoPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJhYnN0cmFjdHxjb250aW51ZXxmb3J8bmV3fHN3aXRjaHxhc3NlcnR8ZGVmYXVsdHxnb3RvfHBhY2thZ2V8c3luY2hyb25pemVkfGJvb2xlYW58ZG98aWZ8cHJpdmF0ZXx0aGlzfGJyZWFrfGRvdWJsZXxpbXBsZW1lbnRzfHByb3RlY3RlZHx0aHJvd3xieXRlfGVsc2V8aW1wb3J0fHB1YmxpY3x0aHJvd3N8Y2FzZXxlbnVtfGluc3RhbmNlb2Z8cmV0dXJufHRyYW5zaWVudHxjYXRjaHxleHRlbmRzfGludHxzaG9ydHx0cnl8Y2hhcnxmaW5hbHxpbnRlcmZhY2V8c3RhdGljfHZvaWR8Y2xhc3N8ZmluYWxseXxsb25nfHN0cmljdGZwfHZvbGF0aWxlfGNvbnN0fGZsb2F0fG5hdGl2ZXxzdXBlcnx3aGlsZSIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoIkFic3RyYWN0TWV0aG9kRXJyb3J8QXNzZXJ0aW9uRXJyb3J8Q2xhc3NDaXJjdWxhcml0eUVycm9yfENsYXNzRm9ybWF0RXJyb3J8RGVwcmVjYXRlZHxFbnVtQ29uc3RhbnROb3RQcmVzZW50RXhjZXB0aW9ufEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvcnxJbGxlZ2FsQWNjZXNzRXJyb3J8SWxsZWdhbFRocmVhZFN0YXRlRXhjZXB0aW9ufEluc3RhbnRpYXRpb25FcnJvcnxJbnRlcm5hbEVycm9yfE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9ufE5vU3VjaEZpZWxkRXJyb3J8T3ZlcnJpZGV8UHJvY2Vzc3xQcm9jZXNzQnVpbGRlcnxTZWN1cml0eU1hbmFnZXJ8U3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxTdXBwcmVzc1dhcm5pbmdzfFR5cGVOb3RQcmVzZW50RXhjZXB0aW9ufFVua25vd25FcnJvcnxVbnNhdGlzZmllZExpbmtFcnJvcnxVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yfFZlcmlmeUVycm9yfEluc3RhbnRpYXRpb25FeGNlcHRpb258SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258Q2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb258Tm9TdWNoRmllbGRFeGNlcHRpb258SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9ufE51bWJlckZvcm1hdEV4Y2VwdGlvbnxTZWN1cml0eUV4Y2VwdGlvbnxWb2lkfEluaGVyaXRhYmxlVGhyZWFkTG9jYWx8SWxsZWdhbFN0YXRlRXhjZXB0aW9ufEludGVycnVwdGVkRXhjZXB0aW9ufE5vU3VjaE1ldGhvZEV4Y2VwdGlvbnxJbGxlZ2FsQWNjZXNzRXhjZXB0aW9ufFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ufEVudW18U3RyaWN0TWF0aHxQYWNrYWdlfENvbXBpbGVyfFJlYWRhYmxlfFJ1bnRpbWV8U3RyaW5nQnVpbGRlcnxNYXRofEluY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3J8Tm9TdWNoTWV0aG9kRXJyb3J8VGhyZWFkTG9jYWx8UnVudGltZVBlcm1pc3Npb258QXJpdGhtZXRpY0V4Y2VwdGlvbnxOdWxsUG9pbnRlckV4Y2VwdGlvbnxMb25nfEludGVnZXJ8U2hvcnR8Qnl0ZXxEb3VibGV8TnVtYmVyfEZsb2F0fENoYXJhY3RlcnxCb29sZWFufFN0YWNrVHJhY2VFbGVtZW50fEFwcGVuZGFibGV8U3RyaW5nQnVmZmVyfEl0ZXJhYmxlfFRocmVhZEdyb3VwfFJ1bm5hYmxlfFRocmVhZHxJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufFN0YWNrT3ZlcmZsb3dFcnJvcnxPdXRPZk1lbW9yeUVycm9yfFZpcnR1YWxNYWNoaW5lRXJyb3J8QXJyYXlTdG9yZUV4Y2VwdGlvbnxDbGFzc0Nhc3RFeGNlcHRpb258TGlua2FnZUVycm9yfE5vQ2xhc3NEZWZGb3VuZEVycm9yfENsYXNzTm90Rm91bmRFeGNlcHRpb258UnVudGltZUV4Y2VwdGlvbnxFeGNlcHRpb258VGhyZWFkRGVhdGh8RXJyb3J8VGhyb3dhYmxlfFN5c3RlbXxDbGFzc0xvYWRlcnxDbG9uZWFibGV8Q2xhc3N8Q2hhclNlcXVlbmNlfENvbXBhcmFibGV8U3RyaW5nfE9iamVjdCIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoIiIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGYpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiWy9dKD86KD86XFxbKD86XFxcXF18W15cXF1dKStcXF0pfCg/OlxcXFwvfFteXFxdL10pKSpbL11cXHcqXFxzKig/PVspLiw7XXwkKSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gZT09InRoaXMiPyJ2YXJpYWJsZS5sYW5ndWFnZSI6YS5oYXNPd25Qcm9wZXJ0eShlKT8ia2V5d29yZCI6Yy5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6ZC5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShlKT8iY29uc3RhbnQubGFuZ3VhZ2UiOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSJ9LHt0b2tlbjoibHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGYsImRvYy0iLFsobmV3IGYpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhoLGcpLGIuSmF2YUhpZ2hsaWdodFJ1bGVzPWh9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-javascript-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9YSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaz1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsbD1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsbT1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBrLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBsfTtkLmluaGVyaXRzKG0sZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKilcL1wvLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiLy8iKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zLGc9ZS5zdGF0ZTtpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Inx8YT09InJlZ2V4X2FsbG93ZWQiKXt2YXIgaD1iLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7XChcW10pXHMqJC8pO2gmJihkKz1jKX1lbHNlIGlmKGE9PSJkb2Mtc3RhcnQiKXtpZihnPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpcmV0dXJuIiI7dmFyIGg9Yi5tYXRjaCgvXlxzKihcLz8pXCovKTtoJiYoaFsxXSYmKGQrPSIgIiksZCs9IiogIil9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgaihbImFjZSJdLCJ3b3JrZXItamF2YXNjcmlwdC5qcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwiSmF2YVNjcmlwdFdvcmtlciIpO3JldHVybiBiLmF0dGFjaFRvRG9jdW1lbnQoYS5nZXREb2N1bWVudCgpKSxiLm9uKCJqc2xpbnQiLGZ1bmN0aW9uKGIpe3ZhciBjPVtdO2Zvcih2YXIgZD0wO2Q8Yi5kYXRhLmxlbmd0aDtkKyspe3ZhciBlPWIuZGF0YVtkXTtlJiZjLnB1c2goe3JvdzplLmxpbmUtMSxjb2x1bW46ZS5jaGFyYWN0ZXItMSx0ZXh0OmUucmVhc29uLHR5cGU6Indhcm5pbmciLGxpbnQ6ZX0pfWEuc2V0QW5ub3RhdGlvbnMoYyl9KSxiLm9uKCJuYXJjaXNzdXMiLGZ1bmN0aW9uKGIpe2Euc2V0QW5ub3RhdGlvbnMoW2IuZGF0YV0pfSksYi5vbigidGVybWluYXRlIixmdW5jdGlvbigpe2EuY2xlYXJBbm5vdGF0aW9ucygpfSksYn19LmNhbGwobS5wcm90b3R5cGUpLGIuTW9kZT1tfSksYWNlLmRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS91bmljb2RlIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuLi91bmljb2RlIiksZz1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxoPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaT1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXxOYW1lc3BhY2V8UU5hbWV8WE1MfFhNTExpc3R8QXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fFVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXl8RXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufFN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnxkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNvZGVVUklDb21wb25lbnR8ZXZhbHxpc0Zpbml0ZXxpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fEpTT058TWF0aHx0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50Ii5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGlmfGlufGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8Y29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXQiLnNwbGl0KCJ8IikpLGM9ImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGQiLGQ9ZS5hcnJheVRvTWFwKCJfX3BhcmVudF9ffF9fY291bnRfX3xlc2NhcGV8dW5lc2NhcGV8d2l0aHxfX3Byb3RvX18iLnNwbGl0KCJ8IikpLGg9ZS5hcnJheVRvTWFwKCJjb25zdHxsZXR8dmFyfGZ1bmN0aW9uIi5zcGxpdCgifCIpKSxpPWUuYXJyYXlUb01hcCgibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIi5zcGxpdCgifCIpKSxqPWUuYXJyYXlUb01hcCgiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLnNwbGl0KCJ8IikpLGs9IlsiK2YucGFja2FnZXMuTCsiXFwkX11bIitmLnBhY2thZ2VzLkwrZi5wYWNrYWdlcy5NbitmLnBhY2thZ2VzLk1jK2YucGFja2FnZXMuTmQrZi5wYWNrYWdlcy5QYysiXFwkX10qXFxiIjt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LChuZXcgZykuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qXFxcXCQnLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKlxcXFwkIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjpbImtleXdvcmQuZGVmaW5pdGlvbiIsInRleHQiLCJlbnRpdHkubmFtZS5mdW5jdGlvbiJdLHJlZ2V4OiIoZnVuY3Rpb24pKFxccyspKCIraysiKSJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIscmVnZXg6Iig/OnRydWV8ZmFsc2UpXFxiIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiKD86IitjKyIpXFxiIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOmZ1bmN0aW9uKGMpe3JldHVybiBhLmhhc093blByb3BlcnR5KGMpPyJ2YXJpYWJsZS5sYW5ndWFnZSI6ZC5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5kZXByZWNhdGVkIjpoLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkLmRlZmluaXRpb24iOmIuaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQiOmkuaGFzT3duUHJvcGVydHkoYyk/ImNvbnN0YW50Lmxhbmd1YWdlIjpqLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmlsbGVnYWwiOmM9PSJkZWJ1Z2dlciI/ImludmFsaWQuZGVwcmVjYXRlZCI6ImlkZW50aWZpZXIifSxyZWdleDprfSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InB1bmN0dWF0aW9uLm9wZXJhdG9yIixyZWdleDoiXFw/fFxcOnxcXCx8XFw7fFxcLiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXC89PyIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6Il4jIS4qJCJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0scmVnZXhfYWxsb3dlZDpbe3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50X3JlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJcXC8iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLHJlZ2V4Olt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4In0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiL1xcdyoiLG5leHQ6InN0YXJ0IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiW15cXFxcL1xcW10rIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJcXFsiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIsbWVyZ2U6ITB9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLHJlZ2V4X2NoYXJhY3Rlcl9jbGFzczpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MifSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXSIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiW15cXFxcXFxdXSsiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIsbWVyZ2U6ITB9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLGNvbW1lbnRfcmVnZXhfYWxsb3dlZDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixtZXJnZTohMCxuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixtZXJnZTohMCxuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj8iJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSx0aGlzLmVtYmVkUnVsZXMoZywiZG9jLSIsWyhuZXcgZykuZ2V0RW5kUnVsZSgic3RhcnQiKV0pfTtkLmluaGVyaXRzKGksaCksYi5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM9aX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlx9Ly50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcfSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KSkuY2FsbChlLnByb3RvdHlwZSksYi5NYXRjaGluZ0JyYWNlT3V0ZGVudD1lfSksYWNlLmRlZmluZSgiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLGY9ZnVuY3Rpb24oYixkLGUsZil7dGhpcy5jaGFuZ2VMaXN0ZW5lcj10aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyk7aWYoYy5wYWNrYWdlZCl7dmFyIGc9dGhpcy4kZ3Vlc3NCYXNlUGF0aCgpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGcrZCl9ZWxzZXt2YXIgaD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlciIsbnVsbCwiXyIpKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihoKTt2YXIgaT17fTtmb3IodmFyIGo9MDtqPGIubGVuZ3RoO2orKyl7dmFyIGs9YltqXSxsPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoayxudWxsLCJfIikucmVwbGFjZSgvLmpzJC8sIiIpKTtpW2tdPWx9fXRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7aW5pdDohMCx0bG5zOmksbW9kdWxlOmUsY2xhc3NuYW1lOmZ9KSx0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLmNhbGxiYWNrcz17fTt2YXIgbT10aGlzO3RoaXMuJHdvcmtlci5vbmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IHdpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2coYSksYX0sdGhpcy4kd29ya2VyLm9ubWVzc2FnZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRhdGE7c3dpdGNoKGIudHlwZSl7Y2FzZSJsb2ciOndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2coYi5kYXRhKTticmVhaztjYXNlImV2ZW50IjptLl9lbWl0KGIubmFtZSx7ZGF0YTpiLmRhdGF9KTticmVhaztjYXNlImNhbGwiOnZhciBjPW0uY2FsbGJhY2tzW2IuaWRdO2MmJihjKGIuZGF0YSksZGVsZXRlIG0uY2FsbGJhY2tzW2IuaWRdKX19fTsoKGZ1bmN0aW9uKCl7ZC5pbXBsZW1lbnQodGhpcyxlKSx0aGlzLiRub3JtYWxpemVQYXRoPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZSgvXlthLXpdKzpcL1wvW15cL10rXC8vLCIiKSxhPWxvY2F0aW9uLnByb3RvY29sKyIvLyIrbG9jYXRpb24uaG9zdCsoYS5jaGFyQXQoMCk9PSIvIj8iIjpsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cL1teXC9dKiQvLCIiKSkrIi8iK2EucmVwbGFjZSgvXltcL10rLywiIiksYX0sdGhpcy4kZ3Vlc3NCYXNlUGF0aD1mdW5jdGlvbigpe2lmKGEuYWNlQmFzZVVybClyZXR1cm4gYS5hY2VCYXNlVXJsO3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXSxlPWQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjZS1iYXNlIik7aWYoZSlyZXR1cm4gZS5yZXBsYWNlKC9cLyokLywiLyIpO3ZhciBmPWQuc3JjfHxkLmdldEF0dHJpYnV0ZSgic3JjIik7aWYoIWYpY29udGludWU7dmFyIGc9Zi5tYXRjaCgvXig/OiguKlwvKWFjZVwuanN8KC4qXC8pYWNlKC11bmNvbXByZXNzZWQpPygtbm9jb25mbGljdCk/XC5qcykoPzpcP3wkKS8pO2lmKGcpcmV0dXJuIGdbMV18fGdbMl19cmV0dXJuIiJ9LHRoaXMudGVybWluYXRlPWZ1bmN0aW9uKCl7dGhpcy5fZW1pdCgidGVybWluYXRlIix7fSksdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpLHRoaXMuJHdvcmtlcj1udWxsLHRoaXMuJGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuY2hhbmdlTGlzdGVuZXIpLHRoaXMuJGRvYz1udWxsfSx0aGlzLnNlbmQ9ZnVuY3Rpb24oYSxiKXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6YSxhcmdzOmJ9KX0sdGhpcy5jYWxsPWZ1bmN0aW9uKGEsYixjKXtpZihjKXt2YXIgZD10aGlzLmNhbGxiYWNrSWQrKzt0aGlzLmNhbGxiYWNrc1tkXT1jLGIucHVzaChkKX10aGlzLnNlbmQoYSxiKX0sdGhpcy5lbWl0PWZ1bmN0aW9uKGEsYil7dHJ5e3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7ZXZlbnQ6YSxkYXRhOntkYXRhOmIuZGF0YX19KX1jYXRjaChjKXt9fSx0aGlzLmF0dGFjaFRvRG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dGhpcy4kZG9jJiZ0aGlzLnRlcm1pbmF0ZSgpLHRoaXMuJGRvYz1hLHRoaXMuY2FsbCgic2V0VmFsdWUiLFthLmdldFZhbHVlKCldKSxhLm9uKCJjaGFuZ2UiLHRoaXMuY2hhbmdlTGlzdGVuZXIpfSx0aGlzLmNoYW5nZUxpc3RlbmVyPWZ1bmN0aW9uKGEpe2EucmFuZ2U9e3N0YXJ0OmEuZGF0YS5yYW5nZS5zdGFydCxlbmQ6YS5kYXRhLnJhbmdlLmVuZH0sdGhpcy5lbWl0KCJjaGFuZ2UiLGEpfX0pKS5jYWxsKGYucHJvdG90eXBlKSxiLldvcmtlckNsaWVudD1mfSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvdW5pY29kZSIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi4vdW5pY29kZSIpLGc9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0Ii5zcGxpdCgifCIpKSxjPSJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkIixkPWUuYXJyYXlUb01hcCgiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19fIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIuc3BsaXQoInwiKSksaT1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksaj1lLmFycmF5VG9NYXAoImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIi5zcGxpdCgifCIpKSxrPSJbIitmLnBhY2thZ2VzLkwrIlxcJF9dWyIrZi5wYWNrYWdlcy5MK2YucGFja2FnZXMuTW4rZi5wYWNrYWdlcy5NYytmLnBhY2thZ2VzLk5kK2YucGFja2FnZXMuUGMrIlxcJF9dKlxcYiI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGcpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46WyJrZXl3b3JkLmRlZmluaXRpb24iLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSxyZWdleDoiKGZ1bmN0aW9uKShcXHMrKSgiK2srIikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiIrYysiKVxcYiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShjKT8idmFyaWFibGUubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuZGVwcmVjYXRlZCI6aC5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZC5kZWZpbml0aW9uIjpiLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjppLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ai5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5pbGxlZ2FsIjpjPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6a30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwvPT8iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJeIyEuKiQifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHJlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudF9yZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiXFwvIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6Ii9cXHcqIixuZXh0OiJzdGFydCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlteXFxcXC9cXFtdKyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXFxbIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6Il0iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlteXFxcXFxcXV0rIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxjb21tZW50X3JlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGcsImRvYy0iLFsobmV3IGcpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhpLGgpLGIuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzPWl9KSxkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWZ1bmN0aW9uKGIsZCxlLGYpe3RoaXMuY2hhbmdlTGlzdGVuZXI9dGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO2lmKGMucGFja2FnZWQpe3ZhciBnPXRoaXMuJGd1ZXNzQmFzZVBhdGgoKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihnK2QpfWVsc2V7dmFyIGg9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXIiLG51bGwsIl8iKSk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoaCk7dmFyIGk9e307Zm9yKHZhciBqPTA7ajxiLmxlbmd0aDtqKyspe3ZhciBrPWJbal0sbD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKGssbnVsbCwiXyIpLnJlcGxhY2UoLy5qcyQvLCIiKSk7aVtrXT1sfX10aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczppLG1vZHVsZTplLGNsYXNzbmFtZTpmfSksdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5jYWxsYmFja3M9e307dmFyIG09dGhpczt0aGlzLiR3b3JrZXIub25lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyB3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpLGF9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLnR5cGUpe2Nhc2UibG9nIjp3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGIuZGF0YSk7YnJlYWs7Y2FzZSJldmVudCI6bS5fZW1pdChiLm5hbWUse2RhdGE6Yi5kYXRhfSk7YnJlYWs7Y2FzZSJjYWxsIjp2YXIgYz1tLmNhbGxiYWNrc1tiLmlkXTtjJiYoYyhiLmRhdGEpLGRlbGV0ZSBtLmNhbGxiYWNrc1tiLmlkXSl9fX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoL15bYS16XSs6XC9cL1teXC9dK1wvLywiIiksYT1sb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QrKGEuY2hhckF0KDApPT0iLyI/IiI6bG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywiIikpKyIvIithLnJlcGxhY2UoL15bXC9dKy8sIiIpLGF9LHRoaXMuJGd1ZXNzQmFzZVBhdGg9ZnVuY3Rpb24oKXtpZihhLmFjZUJhc2VVcmwpcmV0dXJuIGEuYWNlQmFzZVVybDt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS1hY2UtYmFzZSIpO2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvXC8qJC8sIi8iKTt2YXIgZj1kLnNyY3x8ZC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFmKWNvbnRpbnVlO3ZhciBnPWYubWF0Y2goL14oPzooLipcLylhY2VcLmpzfCguKlwvKWFjZSgtdW5jb21wcmVzc2VkKT8oLW5vY29uZmxpY3QpP1wuanMpKD86XD98JCkvKTtpZihnKXJldHVybiBnWzFdfHxnWzJdfXJldHVybiIifSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX2VtaXQoInRlcm1pbmF0ZSIse30pLHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbCx0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmEsYXJnczpifSl9LHRoaXMuY2FsbD1mdW5jdGlvbihhLGIsYyl7aWYoYyl7dmFyIGQ9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3NbZF09YyxiLnB1c2goZCl9dGhpcy5zZW5kKGEsYil9LHRoaXMuZW1pdD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmEsZGF0YTp7ZGF0YTpiLmRhdGF9fSl9Y2F0Y2goYyl7fX0sdGhpcy5hdHRhY2hUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe3RoaXMuJGRvYyYmdGhpcy50ZXJtaW5hdGUoKSx0aGlzLiRkb2M9YSx0aGlzLmNhbGwoInNldFZhbHVlIixbYS5nZXRWYWx1ZSgpXSksYS5vbigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKX0sdGhpcy5jaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbihhKXthLnJhbmdlPXtzdGFydDphLmRhdGEucmFuZ2Uuc3RhcnQsZW5kOmEuZGF0YS5yYW5nZS5lbmR9LHRoaXMuZW1pdCgiY2hhbmdlIixhKX19KSkuY2FsbChmLnByb3RvdHlwZSksYi5Xb3JrZXJDbGllbnQ9Zn0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-json-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvanNvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9qc29uX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2pzb25faGlnaGxpZ2h0X3J1bGVzIikuSnNvbkhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsaj1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsaz1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBpLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBqfTtkLmluaGVyaXRzKGssZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYik7aWYoYT09InN0YXJ0Iil7dmFyIGU9Yi5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7ZSYmKGQrPWMpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX19LmNhbGwoay5wcm90b3R5cGUpLGIuTW9kZT1rfSksYWNlLmRlZmluZSgiYWNlL21vZGUvanNvbl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjoiaW52YWxpZC5pbGxlZ2FsIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoiaW52YWxpZC5pbGxlZ2FsIixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV19fTtkLmluaGVyaXRzKGYsZSksYi5Kc29uSGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWZ1bmN0aW9uKCl7dGhpcy5hZGQoImJyYWNlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0ieyIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiJ7IitnKyJ9IixzZWxlY3Rpb246ITF9Ont0ZXh0OiJ7fSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0ifSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgbD1kLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpoLnJvdyxjb2x1bW46aC5jb2x1bW4rMX0pO2lmKCFsKXJldHVybiBudWxsO3ZhciBtPXRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoYSxpLnN1YnN0cmluZygwLGkubGVuZ3RoLTEpLGQuZ2V0VGFiU3RyaW5nKCkpLG49dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUobC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK20rIlxuIituLHNlbGVjdGlvbjpbMSxtLmxlbmd0aCwxLG0ubGVuZ3RoXX19fX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09InsiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixlLmVuZC5jb2x1bW4rMSk7aWYoaD09In0iKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IigiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoiKCIrZysiKSIsc2VsZWN0aW9uOiExfTp7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09IikiKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSIpIil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCIpIix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInBhcmVucyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0iKCIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0iKSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSciJyl7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO2lmKGchPT0iIilyZXR1cm57dGV4dDonIicrZysnIicsc2VsZWN0aW9uOiExfTt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLTEsaC5jb2x1bW4pO2lmKGo9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGs9ZC5nZXRUb2tlbnMoZi5zdGFydC5yb3csZi5zdGFydC5yb3cpWzBdLnRva2VucyxsPTAsbSxuPS0xO2Zvcih2YXIgbz0wO288ay5sZW5ndGg7bysrKXttPWtbb10sbS50eXBlPT0ic3RyaW5nIj9uPS0xOm48MCYmKG49bS52YWx1ZS5pbmRleE9mKCciJykpO2lmKG0udmFsdWUubGVuZ3RoK2w+Zi5zdGFydC5jb2x1bW4pYnJlYWs7bCs9a1tvXS52YWx1ZS5sZW5ndGh9aWYoIW18fG48MCYmbS50eXBlIT09ImNvbW1lbnQiJiYobS50eXBlIT09InN0cmluZyJ8fGYuc3RhcnQuY29sdW1uIT09bS52YWx1ZS5sZW5ndGgrbC0xJiZtLnZhbHVlLmxhc3RJbmRleE9mKCciJyk9PT1tLnZhbHVlLmxlbmd0aC0xKSlyZXR1cm57dGV4dDonIiInLHNlbGVjdGlvbjpbMSwxXX07aWYobSYmbS50eXBlPT09InN0cmluZyIpe3ZhciBwPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKHA9PSciJylyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09JyInKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09JyInKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pfTtkLmluaGVyaXRzKGYsZSksYi5Dc3R5bGVCZWhhdmlvdXI9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-json.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9qc29uIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2pzb25faGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vanNvbl9oaWdobGlnaHRfcnVsZXMiKS5Kc29uSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGksdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKTtpZihhPT0ic3RhcnQiKXt2YXIgZT1iLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTtlJiYoZCs9Yyl9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxkZWZpbmUoImFjZS9tb2RlL2pzb25faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ImludmFsaWQuaWxsZWdhbCIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImludmFsaWQuaWxsZWdhbCIscmVnZXg6IlxcL1xcLy4qJCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dfX07ZC5pbmhlcml0cyhmLGUpLGIuSnNvbkhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-latex-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvbGF0ZXgiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvbGF0ZXhfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9sYXRleF9oaWdobGlnaHRfcnVsZXMiKS5MYXRleEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi4vcmFuZ2UiKS5SYW5nZSxpPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSl9O2QuaW5oZXJpdHMoaSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwlLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGk9bmV3IGgoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aS5zdGFydC5yb3c9ZyxpLmVuZC5yb3c9ZyxpLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGksa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiJSIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChpLnByb3RvdHlwZSksYi5Nb2RlPWl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9sYXRleF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoia2V5d29yZCIscmVnZXg6IlxcXFwoPzpbXmEtekEtWl18W2EtekEtWl0rKSJ9LHt0b2tlbjoibHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlxcJCg/Oig/OlxcXFwuKXwoPzpbXlxcJFxcXFxdKSkqP1xcJCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IiUuKiQifV19fTtkLmluaGVyaXRzKGYsZSksYi5MYXRleEhpZ2hsaWdodFJ1bGVzPWZ9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-latex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sYXRleCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9sYXRleF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2xhdGV4X2hpZ2hsaWdodF9ydWxlcyIpLkxhdGV4SGlnaGxpZ2h0UnVsZXMsaD1hKCIuLi9yYW5nZSIpLlJhbmdlLGk9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKX07ZC5pbmhlcml0cyhpLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopXCUvO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaT1uZXcgaCgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtpLnN0YXJ0LnJvdz1nLGkuZW5kLnJvdz1nLGkuZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaSxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIlIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRnZXRJbmRlbnQoYil9fS5jYWxsKGkucHJvdG90eXBlKSxiLk1vZGU9aX0pLGRlZmluZSgiYWNlL21vZGUvbGF0ZXhfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJcXFxcKD86W15hLXpBLVpdfFthLXpBLVpdKykifSx7dG9rZW46ImxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXCQoPzooPzpcXFxcLil8KD86W15cXCRcXFxcXSkpKj9cXCQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIlLiokIn1dfX07ZC5pbmhlcml0cyhmLGUpLGIuTGF0ZXhIaWdobGlnaHRSdWxlcz1mfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-lua-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvbHVhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2x1YV9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2x1YV9oaWdobGlnaHRfcnVsZXMiKS5MdWFIaWdobGlnaHRSdWxlcyxoPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSl9O2QuaW5oZXJpdHMoaCxlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucyxnPVsiZnVuY3Rpb24iLCJ0aGVuIiwiZG8iLCJyZXBlYXQiXTtpZihhPT0ic3RhcnQiKXt2YXIgaD1iLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTtpZihoKWQrPWM7ZWxzZSBmb3IodmFyIGkgaW4gZil7dmFyIGo9ZltpXTtpZihqLnR5cGUhPSJrZXl3b3JkIiljb250aW51ZTt2YXIgaz1nLmluZGV4T2Yoai52YWx1ZSk7aWYoayE9LTEpe2QrPWM7YnJlYWt9fX1yZXR1cm4gZH19LmNhbGwoaC5wcm90b3R5cGUpLGIuTW9kZT1ofSksYWNlLmRlZmluZSgiYWNlL21vZGUvbHVhX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImJyZWFrfGRvfGVsc2V8ZWxzZWlmfGVuZHxmb3J8ZnVuY3Rpb258aWZ8aW58bG9jYWx8cmVwZWF0fHJldHVybnx0aGVufHVudGlsfHdoaWxlfG9yfGFuZHxub3QiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJ0cnVlfGZhbHNlfG5pbHxfR3xfVkVSU0lPTiIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoInN0cmluZ3x4cGNhbGx8cGFja2FnZXx0b3N0cmluZ3xwcmludHxvc3x1bnBhY2t8cmVxdWlyZXxnZXRmZW52fHNldG1ldGF0YWJsZXxuZXh0fGFzc2VydHx0b251bWJlcnxpb3xyYXdlcXVhbHxjb2xsZWN0Z2FyYmFnZXxnZXRtZXRhdGFibGV8bW9kdWxlfHJhd3NldHxtYXRofGRlYnVnfHBjYWxsfHRhYmxlfG5ld3Byb3h5fHR5cGV8Y29yb3V0aW5lfF9HfHNlbGVjdHxnY2luZm98cGFpcnN8cmF3Z2V0fGxvYWRzdHJpbmd8aXBhaXJzfF9WRVJTSU9OfGRvZmlsZXxzZXRmZW52fGxvYWR8ZXJyb3J8bG9hZGZpbGV8c3VifHVwcGVyfGxlbnxnZmluZHxyZXB8ZmluZHxtYXRjaHxjaGFyfGR1bXB8Z21hdGNofHJldmVyc2V8Ynl0ZXxmb3JtYXR8Z3N1Ynxsb3dlcnxwcmVsb2FkfGxvYWRsaWJ8bG9hZGVkfGxvYWRlcnN8Y3BhdGh8Y29uZmlnfHBhdGh8c2VlYWxsfGV4aXR8c2V0bG9jYWxlfGRhdGV8Z2V0ZW52fGRpZmZ0aW1lfHJlbW92ZXx0aW1lfGNsb2NrfHRtcG5hbWV8cmVuYW1lfGV4ZWN1dGV8bGluZXN8d3JpdGV8Y2xvc2V8Zmx1c2h8b3BlbnxvdXRwdXR8dHlwZXxyZWFkfHN0ZGVycnxzdGRpbnxpbnB1dHxzdGRvdXR8cG9wZW58dG1wZmlsZXxsb2d8bWF4fGFjb3N8aHVnZXxsZGV4cHxwaXxjb3N8dGFuaHxwb3d8ZGVnfHRhbnxjb3NofHNpbmh8cmFuZG9tfHJhbmRvbXNlZWR8ZnJleHB8Y2VpbHxmbG9vcnxyYWR8YWJzfHNxcnR8bW9kZnxhc2lufG1pbnxtb2R8Zm1vZHxsb2cxMHxhdGFuMnxleHB8c2lufGF0YW58Z2V0dXB2YWx1ZXxkZWJ1Z3xzZXRob29rfGdldG1ldGF0YWJsZXxnZXRob29rfHNldG1ldGF0YWJsZXxzZXRsb2NhbHx0cmFjZWJhY2t8c2V0ZmVudnxnZXRpbmZvfHNldHVwdmFsdWV8Z2V0bG9jYWx8Z2V0cmVnaXN0cnl8Z2V0ZmVudnxzZXRufGluc2VydHxnZXRufGZvcmVhY2hpfG1heG58Zm9yZWFjaHxjb25jYXR8c29ydHxyZW1vdmV8cmVzdW1lfHlpZWxkfHN0YXR1c3x3cmFwfGNyZWF0ZXxydW5uaW5nIi5zcGxpdCgifCIpKSxkPWUuYXJyYXlUb01hcCgic3RyaW5nfHBhY2thZ2V8b3N8aW98bWF0aHxkZWJ1Z3x0YWJsZXxjb3JvdXRpbmUiLnNwbGl0KCJ8IikpLGY9ZS5hcnJheVRvTWFwKCJfX2FkZHxfX3N1YnxfX21vZHxfX3VubXxfX2NvbmNhdHxfX2x0fF9faW5kZXh8X19jYWxsfF9fZ2N8X19tZXRhdGFibGV8X19tdWx8X19kaXZ8X19wb3d8X19sZW58X19lcXxfX2xlfF9fbmV3aW5kZXh8X190b3N0cmluZ3xfX21vZGV8X190b251bWJlciIuc3BsaXQoInwiKSksZz1lLmFycmF5VG9NYXAoIiIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoInNldG58Zm9yZWFjaHxmb3JlYWNoaXxnY2luZm98bG9nMTB8bWF4biIuc3BsaXQoInwiKSksaT0iIixqPSIoPzooPzpbMS05XVxcZCopfCg/OjApKSIsaz0iKD86MFt4WF1bXFxkQS1GYS1mXSspIixsPSIoPzoiK2orInwiK2srIikiLG09Iig/OlxcLlxcZCspIixuPSIoPzpcXGQrKSIsbz0iKD86KD86IituKyI/IittKyIpfCg/OiIrbisiXFwuKSkiLHA9Iig/OiIrbysiKSIscT1bXTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFxbLipcXF1cXF0ifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPVxcWy4qXFxdXFw9XFxdIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD17Mn1cXFsuKlxcXVxcPXsyfVxcXSJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9ezN9XFxbLipcXF1cXD17M31cXF0ifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPXs0fVxcWy4qXFxdXFw9ezR9XFxdIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD17NX1cXD0qXFxbLipcXF1cXD17NX1cXD0qXFxdIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFjb21tZW50In0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD1cXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFjb21tZW50MSJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9ezJ9XFxbLiokIixtZXJnZTohMCxuZXh0OiJxY29tbWVudDIifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPXszfVxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicWNvbW1lbnQzIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD17NH1cXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFjb21tZW50NCJ9LHt0b2tlbjpmdW5jdGlvbihhKXt2YXIgYj0vXC1cLVxbKFw9KylcWy8sYztyZXR1cm4oYz1iLmV4ZWMoYSkpIT1udWxsJiYoYz1jWzFdKSE9dW5kZWZpbmVkJiZxLnB1c2goYy5sZW5ndGgpLCJjb21tZW50In0scmVnZXg6aSsiXFwtXFwtXFxbXFw9ezV9XFw9KlxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicWNvbW1lbnQ1In0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwtXFwtLiokIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcWy4qXFxdXFxdIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPVxcWy4qXFxdXFw9XFxdIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPXsyfVxcWy4qXFxdXFw9ezJ9XFxdIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPXszfVxcWy4qXFxdXFw9ezN9XFxdIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPXs0fVxcWy4qXFxdXFw9ezR9XFxdIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPXs1fVxcPSpcXFsuKlxcXVxcPXs1fVxcPSpcXF0ifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFxbLiokIixtZXJnZTohMCxuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPVxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicXN0cmluZzEifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9ezJ9XFxbLiokIixtZXJnZTohMCxuZXh0OiJxc3RyaW5nMiJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD17M31cXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFzdHJpbmczIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPXs0fVxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicXN0cmluZzQifSx7dG9rZW46ZnVuY3Rpb24oYSl7dmFyIGI9L1xbKFw9KylcWy8sYztyZXR1cm4oYz1iLmV4ZWMoYSkpIT1udWxsJiYoYz1jWzFdKSE9dW5kZWZpbmVkJiZxLnB1c2goYy5sZW5ndGgpLCJzdHJpbmcifSxyZWdleDppKyJcXFtcXD17NX1cXD0qXFxbLiokIixtZXJnZTohMCxuZXh0OiJxc3RyaW5nNSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyciKD86W15cXFxcXXxcXFxcLikqPyInfSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiJyg/OlteXFxcXF18XFxcXC4pKj8nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDpwfSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmwrIlxcYiJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShlKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShlKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmcuaGFzT3duUHJvcGVydHkoZSk/ImludmFsaWQuaWxsZWdhbCI6ZC5oYXNPd25Qcm9wZXJ0eShlKT8iY29uc3RhbnQubGlicmFyeSI6aC5oYXNPd25Qcm9wZXJ0eShlKT8iaW52YWxpZC5kZXByZWNhdGVkIjpjLmhhc093blByb3BlcnR5KGUpPyJzdXBwb3J0LmZ1bmN0aW9uIjpmLmhhc093blByb3BlcnR5KGUpPyJzdXBwb3J0LmZ1bmN0aW9uIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXCt8XFwtfFxcKnxcXC98JXxcXCN8XFxefH58PHw+fDw9fD0+fD09fH49fD18XFw6fFxcLlxcLlxcLnxcXC5cXC4ifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltcXFtcXChcXHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdXFwpXFx9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0scWNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scWNvbW1lbnQxOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9XFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFjb21tZW50Mjpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPXsyfVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxY29tbWVudDM6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD17M31cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scWNvbW1lbnQ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9ezR9XFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFjb21tZW50NTpbe3Rva2VuOmZ1bmN0aW9uKGEpe3ZhciBiPS9cXShcPSspXF0vLGM9dGhpcy5ydWxlcy5xY29tbWVudDVbMF0sZDtjLm5leHQ9InN0YXJ0IjtpZigoZD1iLmV4ZWMoYSkpIT1udWxsJiYoZD1kWzFdKSE9dW5kZWZpbmVkKXt2YXIgZT1kLmxlbmd0aCxmOyhmPXEucG9wKCkpIT1lJiYocS5wdXNoKGYpLGMubmV4dD0icWNvbW1lbnQ1Iil9cmV0dXJuImNvbW1lbnQifSxyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPXs1fVxcPSpcXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzE6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmcyOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD17Mn1cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nMzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9ezN9XFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzQ6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPXs0fVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc1Olt7dG9rZW46ZnVuY3Rpb24oYSl7dmFyIGI9L1xdKFw9KylcXS8sYz10aGlzLnJ1bGVzLnFzdHJpbmc1WzBdLGQ7Yy5uZXh0PSJzdGFydCI7aWYoKGQ9Yi5leGVjKGEpKSE9bnVsbCYmKGQ9ZFsxXSkhPXVuZGVmaW5lZCl7dmFyIGU9ZC5sZW5ndGgsZjsoZj1xLnBvcCgpKSE9ZSYmKHEucHVzaChmKSxjLm5leHQ9InFzdHJpbmc1Iil9cmV0dXJuInN0cmluZyJ9LHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9ezV9XFw9KlxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfX07ZC5pbmhlcml0cyhnLGYpLGIuTHVhSGlnaGxpZ2h0UnVsZXM9Z30pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sdWEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvbHVhX2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vbHVhX2hpZ2hsaWdodF9ydWxlcyIpLkx1YUhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKX07ZC5pbmhlcml0cyhoLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zLGc9WyJmdW5jdGlvbiIsInRoZW4iLCJkbyIsInJlcGVhdCJdO2lmKGE9PSJzdGFydCIpe3ZhciBoPWIubWF0Y2goL14uKltce1woXFtdXHMqJC8pO2lmKGgpZCs9YztlbHNlIGZvcih2YXIgaSBpbiBmKXt2YXIgaj1mW2ldO2lmKGoudHlwZSE9ImtleXdvcmQiKWNvbnRpbnVlO3ZhciBrPWcuaW5kZXhPZihqLnZhbHVlKTtpZihrIT0tMSl7ZCs9YzticmVha319fXJldHVybiBkfX0uY2FsbChoLnByb3RvdHlwZSksYi5Nb2RlPWh9KSxkZWZpbmUoImFjZS9tb2RlL2x1YV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJicmVha3xkb3xlbHNlfGVsc2VpZnxlbmR8Zm9yfGZ1bmN0aW9ufGlmfGlufGxvY2FsfHJlcGVhdHxyZXR1cm58dGhlbnx1bnRpbHx3aGlsZXxvcnxhbmR8bm90Ii5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgidHJ1ZXxmYWxzZXxuaWx8X0d8X1ZFUlNJT04iLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJzdHJpbmd8eHBjYWxsfHBhY2thZ2V8dG9zdHJpbmd8cHJpbnR8b3N8dW5wYWNrfHJlcXVpcmV8Z2V0ZmVudnxzZXRtZXRhdGFibGV8bmV4dHxhc3NlcnR8dG9udW1iZXJ8aW98cmF3ZXF1YWx8Y29sbGVjdGdhcmJhZ2V8Z2V0bWV0YXRhYmxlfG1vZHVsZXxyYXdzZXR8bWF0aHxkZWJ1Z3xwY2FsbHx0YWJsZXxuZXdwcm94eXx0eXBlfGNvcm91dGluZXxfR3xzZWxlY3R8Z2NpbmZvfHBhaXJzfHJhd2dldHxsb2Fkc3RyaW5nfGlwYWlyc3xfVkVSU0lPTnxkb2ZpbGV8c2V0ZmVudnxsb2FkfGVycm9yfGxvYWRmaWxlfHN1Ynx1cHBlcnxsZW58Z2ZpbmR8cmVwfGZpbmR8bWF0Y2h8Y2hhcnxkdW1wfGdtYXRjaHxyZXZlcnNlfGJ5dGV8Zm9ybWF0fGdzdWJ8bG93ZXJ8cHJlbG9hZHxsb2FkbGlifGxvYWRlZHxsb2FkZXJzfGNwYXRofGNvbmZpZ3xwYXRofHNlZWFsbHxleGl0fHNldGxvY2FsZXxkYXRlfGdldGVudnxkaWZmdGltZXxyZW1vdmV8dGltZXxjbG9ja3x0bXBuYW1lfHJlbmFtZXxleGVjdXRlfGxpbmVzfHdyaXRlfGNsb3NlfGZsdXNofG9wZW58b3V0cHV0fHR5cGV8cmVhZHxzdGRlcnJ8c3RkaW58aW5wdXR8c3Rkb3V0fHBvcGVufHRtcGZpbGV8bG9nfG1heHxhY29zfGh1Z2V8bGRleHB8cGl8Y29zfHRhbmh8cG93fGRlZ3x0YW58Y29zaHxzaW5ofHJhbmRvbXxyYW5kb21zZWVkfGZyZXhwfGNlaWx8Zmxvb3J8cmFkfGFic3xzcXJ0fG1vZGZ8YXNpbnxtaW58bW9kfGZtb2R8bG9nMTB8YXRhbjJ8ZXhwfHNpbnxhdGFufGdldHVwdmFsdWV8ZGVidWd8c2V0aG9va3xnZXRtZXRhdGFibGV8Z2V0aG9va3xzZXRtZXRhdGFibGV8c2V0bG9jYWx8dHJhY2ViYWNrfHNldGZlbnZ8Z2V0aW5mb3xzZXR1cHZhbHVlfGdldGxvY2FsfGdldHJlZ2lzdHJ5fGdldGZlbnZ8c2V0bnxpbnNlcnR8Z2V0bnxmb3JlYWNoaXxtYXhufGZvcmVhY2h8Y29uY2F0fHNvcnR8cmVtb3ZlfHJlc3VtZXx5aWVsZHxzdGF0dXN8d3JhcHxjcmVhdGV8cnVubmluZyIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoInN0cmluZ3xwYWNrYWdlfG9zfGlvfG1hdGh8ZGVidWd8dGFibGV8Y29yb3V0aW5lIi5zcGxpdCgifCIpKSxmPWUuYXJyYXlUb01hcCgiX19hZGR8X19zdWJ8X19tb2R8X191bm18X19jb25jYXR8X19sdHxfX2luZGV4fF9fY2FsbHxfX2djfF9fbWV0YXRhYmxlfF9fbXVsfF9fZGl2fF9fcG93fF9fbGVufF9fZXF8X19sZXxfX25ld2luZGV4fF9fdG9zdHJpbmd8X19tb2RlfF9fdG9udW1iZXIiLnNwbGl0KCJ8IikpLGc9ZS5hcnJheVRvTWFwKCIiLnNwbGl0KCJ8IikpLGg9ZS5hcnJheVRvTWFwKCJzZXRufGZvcmVhY2h8Zm9yZWFjaGl8Z2NpbmZvfGxvZzEwfG1heG4iLnNwbGl0KCJ8IikpLGk9IiIsaj0iKD86KD86WzEtOV1cXGQqKXwoPzowKSkiLGs9Iig/OjBbeFhdW1xcZEEtRmEtZl0rKSIsbD0iKD86IitqKyJ8IitrKyIpIixtPSIoPzpcXC5cXGQrKSIsbj0iKD86XFxkKykiLG89Iig/Oig/OiIrbisiPyIrbSsiKXwoPzoiK24rIlxcLikpIixwPSIoPzoiK28rIikiLHE9W107dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcWy4qXFxdXFxdIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD1cXFsuKlxcXVxcPVxcXSJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9ezJ9XFxbLipcXF1cXD17Mn1cXF0ifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPXszfVxcWy4qXFxdXFw9ezN9XFxdIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD17NH1cXFsuKlxcXVxcPXs0fVxcXSJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9ezV9XFw9KlxcWy4qXFxdXFw9ezV9XFw9KlxcXSJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFxbLiokIixtZXJnZTohMCxuZXh0OiJxY29tbWVudCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9XFxbLiokIixtZXJnZTohMCxuZXh0OiJxY29tbWVudDEifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPXsyfVxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicWNvbW1lbnQyIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD17M31cXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFjb21tZW50MyJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9ezR9XFxbLiokIixtZXJnZTohMCxuZXh0OiJxY29tbWVudDQifSx7dG9rZW46ZnVuY3Rpb24oYSl7dmFyIGI9L1wtXC1cWyhcPSspXFsvLGM7cmV0dXJuKGM9Yi5leGVjKGEpKSE9bnVsbCYmKGM9Y1sxXSkhPXVuZGVmaW5lZCYmcS5wdXNoKGMubGVuZ3RoKSwiY29tbWVudCJ9LHJlZ2V4OmkrIlxcLVxcLVxcW1xcPXs1fVxcPSpcXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFjb21tZW50NSJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcLVxcLS4qJCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXFsuKlxcXVxcXSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD1cXFsuKlxcXVxcPVxcXSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD17Mn1cXFsuKlxcXVxcPXsyfVxcXSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD17M31cXFsuKlxcXVxcPXszfVxcXSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD17NH1cXFsuKlxcXVxcPXs0fVxcXSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD17NX1cXD0qXFxbLipcXF1cXD17NX1cXD0qXFxdIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD1cXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFzdHJpbmcxIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPXsyfVxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicXN0cmluZzIifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9ezN9XFxbLiokIixtZXJnZTohMCxuZXh0OiJxc3RyaW5nMyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD17NH1cXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFzdHJpbmc0In0se3Rva2VuOmZ1bmN0aW9uKGEpe3ZhciBiPS9cWyhcPSspXFsvLGM7cmV0dXJuKGM9Yi5leGVjKGEpKSE9bnVsbCYmKGM9Y1sxXSkhPXVuZGVmaW5lZCYmcS5wdXNoKGMubGVuZ3RoKSwic3RyaW5nIn0scmVnZXg6aSsiXFxbXFw9ezV9XFw9KlxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicXN0cmluZzUifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsnIig/OlteXFxcXF18XFxcXC4pKj8iJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIicoPzpbXlxcXFxdfFxcXFwuKSo/JyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6cH0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDpsKyJcXGIifSx7dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoZSk/ImtleXdvcmQiOmIuaGFzT3duUHJvcGVydHkoZSk/ImNvbnN0YW50Lmxhbmd1YWdlIjpnLmhhc093blByb3BlcnR5KGUpPyJpbnZhbGlkLmlsbGVnYWwiOmQuaGFzT3duUHJvcGVydHkoZSk/ImNvbnN0YW50LmxpYnJhcnkiOmguaGFzT3duUHJvcGVydHkoZSk/ImludmFsaWQuZGVwcmVjYXRlZCI6Yy5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6Zi5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwrfFxcLXxcXCp8XFwvfCV8XFwjfFxcXnx+fDx8Pnw8PXw9Pnw9PXx+PXw9fFxcOnxcXC5cXC5cXC58XFwuXFwuIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbXFxbXFwoXFx7XSJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXVxcKVxcfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHFjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFjb21tZW50MTpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxY29tbWVudDI6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD17Mn1cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scWNvbW1lbnQzOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9ezN9XFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFjb21tZW50NDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPXs0fVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxY29tbWVudDU6W3t0b2tlbjpmdW5jdGlvbihhKXt2YXIgYj0vXF0oXD0rKVxdLyxjPXRoaXMucnVsZXMucWNvbW1lbnQ1WzBdLGQ7Yy5uZXh0PSJzdGFydCI7aWYoKGQ9Yi5leGVjKGEpKSE9bnVsbCYmKGQ9ZFsxXSkhPXVuZGVmaW5lZCl7dmFyIGU9ZC5sZW5ndGgsZjsoZj1xLnBvcCgpKSE9ZSYmKHEucHVzaChmKSxjLm5leHQ9InFjb21tZW50NSIpfXJldHVybiJjb21tZW50In0scmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD17NX1cXD0qXFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmcxOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD1cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nMjpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9ezJ9XFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzM6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPXszfVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc0Olt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD17NH1cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nNTpbe3Rva2VuOmZ1bmN0aW9uKGEpe3ZhciBiPS9cXShcPSspXF0vLGM9dGhpcy5ydWxlcy5xc3RyaW5nNVswXSxkO2MubmV4dD0ic3RhcnQiO2lmKChkPWIuZXhlYyhhKSkhPW51bGwmJihkPWRbMV0pIT11bmRlZmluZWQpe3ZhciBlPWQubGVuZ3RoLGY7KGY9cS5wb3AoKSkhPWUmJihxLnB1c2goZiksYy5uZXh0PSJxc3RyaW5nNSIpfXJldHVybiJzdHJpbmcifSxyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPXs1fVxcPSpcXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX19O2QuaW5oZXJpdHMoZyxmKSxiLkx1YUhpZ2hsaWdodFJ1bGVzPWd9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-markdown-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvbWFya2Rvd24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUveG1sIiwiYWNlL21vZGUvaHRtbCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9tYXJrZG93bl9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGc9YSgiLi94bWwiKS5Nb2RlLGg9YSgiLi9odG1sIikuTW9kZSxpPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixqPWEoIi4vbWFya2Rvd25faGlnaGxpZ2h0X3J1bGVzIikuTWFya2Rvd25IaWdobGlnaHRSdWxlcyxrPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGo7dGhpcy4kdG9rZW5pemVyPW5ldyBpKGEuZ2V0UnVsZXMoKSksdGhpcy4kZW1iZWRzPWEuZ2V0RW1iZWRzKCksdGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzKHsianMtIjpmLCJ4bWwtIjpnLCJodG1sLSI6aH0pfTtkLmluaGVyaXRzKGssZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtpZihhPT0ibGlzdGJsb2NrIil7dmFyIGQ9L14oKD86LispPykoWy0rKl1bIF0rKS8uZXhlYyhiKTtyZXR1cm4gZD8obmV3IEFycmF5KGRbMV0ubGVuZ3RoKzEpKS5qb2luKCIgIikrZFsyXToiIn1yZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3VuaWNvZGUiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4uL3VuaWNvZGUiKSxnPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxpPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldCIuc3BsaXQoInwiKSksYz0iY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZCIsZD1lLmFycmF5VG9NYXAoIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fXyIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLnNwbGl0KCJ8IikpLGk9ZS5hcnJheVRvTWFwKCJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLnNwbGl0KCJ8IikpLGo9ZS5hcnJheVRvTWFwKCJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIuc3BsaXQoInwiKSksaz0iWyIrZi5wYWNrYWdlcy5MKyJcXCRfXVsiK2YucGFja2FnZXMuTCtmLnBhY2thZ2VzLk1uK2YucGFja2FnZXMuTWMrZi5wYWNrYWdlcy5OZCtmLnBhY2thZ2VzLlBjKyJcXCRfXSpcXGIiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBnKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOlsia2V5d29yZC5kZWZpbml0aW9uIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitrKyIpIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIoPzoiK2MrIilcXGIiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoYyk/InZhcmlhYmxlLmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmguaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQuZGVmaW5pdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6aS5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmouaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuaWxsZWdhbCI6Yz09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4Omt9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJcXD98XFw6fFxcLHxcXDt8XFwuIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcLz0/IixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXiMhLiokIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxyZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnRfcmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlxcLyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXg6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXgifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiIvXFx3KiIsbmV4dDoic3RhcnQiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbXlxcXFwvXFxbXSsiLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlxcWyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXhfY2hhcmFjdGVyX2NsYXNzOlt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJdIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJbXlxcXFxcXF1dKyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0sY29tbWVudF9yZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhnLCJkb2MtIixbKG5ldyBnKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaSxoKSxiLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1pfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWZ1bmN0aW9uKCl7dGhpcy5hZGQoImJyYWNlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0ieyIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiJ7IitnKyJ9IixzZWxlY3Rpb246ITF9Ont0ZXh0OiJ7fSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0ifSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgbD1kLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpoLnJvdyxjb2x1bW46aC5jb2x1bW4rMX0pO2lmKCFsKXJldHVybiBudWxsO3ZhciBtPXRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoYSxpLnN1YnN0cmluZygwLGkubGVuZ3RoLTEpLGQuZ2V0VGFiU3RyaW5nKCkpLG49dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUobC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK20rIlxuIituLHNlbGVjdGlvbjpbMSxtLmxlbmd0aCwxLG0ubGVuZ3RoXX19fX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09InsiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixlLmVuZC5jb2x1bW4rMSk7aWYoaD09In0iKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IigiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoiKCIrZysiKSIsc2VsZWN0aW9uOiExfTp7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09IikiKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSIpIil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCIpIix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInBhcmVucyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0iKCIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0iKSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSciJyl7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO2lmKGchPT0iIilyZXR1cm57dGV4dDonIicrZysnIicsc2VsZWN0aW9uOiExfTt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLTEsaC5jb2x1bW4pO2lmKGo9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGs9ZC5nZXRUb2tlbnMoZi5zdGFydC5yb3csZi5zdGFydC5yb3cpWzBdLnRva2VucyxsPTAsbSxuPS0xO2Zvcih2YXIgbz0wO288ay5sZW5ndGg7bysrKXttPWtbb10sbS50eXBlPT0ic3RyaW5nIj9uPS0xOm48MCYmKG49bS52YWx1ZS5pbmRleE9mKCciJykpO2lmKG0udmFsdWUubGVuZ3RoK2w+Zi5zdGFydC5jb2x1bW4pYnJlYWs7bCs9a1tvXS52YWx1ZS5sZW5ndGh9aWYoIW18fG48MCYmbS50eXBlIT09ImNvbW1lbnQiJiYobS50eXBlIT09InN0cmluZyJ8fGYuc3RhcnQuY29sdW1uIT09bS52YWx1ZS5sZW5ndGgrbC0xJiZtLnZhbHVlLmxhc3RJbmRleE9mKCciJyk9PT1tLnZhbHVlLmxlbmd0aC0xKSlyZXR1cm57dGV4dDonIiInLHNlbGVjdGlvbjpbMSwxXX07aWYobSYmbS50eXBlPT09InN0cmluZyIpe3ZhciBwPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKHA9PSciJylyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09JyInKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09JyInKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pfTtkLmluaGVyaXRzKGYsZSksYi5Dc3R5bGVCZWhhdmlvdXI9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy94bWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlcyxoPWEoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cixpPWEoIi4vZm9sZGluZy94bWwiKS5Gb2xkTW9kZSxqPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kYmVoYXZpb3VyPW5ldyBoLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBpfTtkLmluaGVyaXRzKGosZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChqLnByb3RvdHlwZSksYi5Nb2RlPWp9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS94bWxfdXRpbCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3htbF91dGlsIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/IixuZXh0OiJ0YWcifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6Iig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZS50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0Iil9O2QuaW5oZXJpdHMoZyxmKSxiLlhtbEhpZ2hsaWdodFJ1bGVzPWd9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS94bWxfdXRpbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEpe3JldHVyblt7dG9rZW46InN0cmluZyIscmVnZXg6JyIuKj8iJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKicsbmV4dDphKyItcXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKj8nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKiIsbmV4dDphKyItcXN0cmluZyJ9XX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLio/IithLG5leHQ6Yn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2xhbmciKSxlPWQuYXJyYXlUb01hcCgiYnV0dG9ufGZvcm18aW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhIi5zcGxpdCgifCIpKSxmPWQuYXJyYXlUb01hcCgidGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dHIiLnNwbGl0KCJ8IikpO2IudGFnPWZ1bmN0aW9uKGEsYixjKXthW2JdPVt7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09ImEiPyJtZXRhLnRhZy5hbmNob3IiOmE9PT0iaW1nIj8ibWV0YS50YWcuaW1hZ2UiOmE9PT0ic2NyaXB0Ij8ibWV0YS50YWcuc2NyaXB0IjphPT09InN0eWxlIj8ibWV0YS50YWcuc3R5bGUiOmUuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcuZm9ybSI6Zi5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy50YWJsZSI6Im1ldGEudGFnIn0sbWVyZ2U6ITAscmVnZXg6IlstX2EtekEtWjAtOTohXSsiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OmIrImVtYmVkLWF0dHJpYnV0ZS1saXN0In1dLGFbYisiLXFzdHJpbmciXT1oKCInIixiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiLXFxc3RyaW5nIl09aCgnIicsYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiKSxhW2IrImVtYmVkLWF0dHJpYnV0ZS1saXN0Il09W3t0b2tlbjoibWV0YS50YWciLG1lcmdlOiEwLHJlZ2V4OiIvPz4iLG5leHQ6Y30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiPSJ9LHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLmNvbmNhdChnKGIpKX19KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1hKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixnPWZ1bmN0aW9uKCl7dGhpcy5pbmhlcml0KGYsWyJzdHJpbmdfZHF1b3RlcyJdKSx0aGlzLmFkZCgiYnJhY2tldHMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IjwiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj8hMTp7dGV4dDoiPD4iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09Ij4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSI+IilyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaz1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisyKTtpZihrPT0iPC8iKXt2YXIgbD10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpK2QuZ2V0VGFiU3RyaW5nKCksbT10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbCsiXG4iK20sc2VsZWN0aW9uOlsxLGwubGVuZ3RoLDEsbC5sZW5ndGhdfX19fSl9O2QuaW5oZXJpdHMoZyxlKSxiLlhtbEJlaGF2aW91cj1nfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi8uLi9saWIvbGFuZyIpLGY9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxnPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsaD1hKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3IsaT1iLkZvbGRNb2RlPWZ1bmN0aW9uKGEpe2cuY2FsbCh0aGlzKSx0aGlzLnZvaWRFbGVtZW50cz1hfHx7fX07ZC5pbmhlcml0cyhpLGcpLGZ1bmN0aW9uKCl7dGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9nZXRGaXJzdFRhZ0luTGluZShhLGMpO3JldHVybiBkLmNsb3Npbmc/Yj09Im1hcmtiZWdpbmVuZCI/ImVuZCI6IiI6IWQudGFnTmFtZXx8dGhpcy52b2lkRWxlbWVudHNbZC50YWdOYW1lLnRvTG93ZXJDYXNlKCldPyIiOmQuc2VsZkNsb3Npbmc/IiI6ZC52YWx1ZS5pbmRleE9mKCIvIitkLnRhZ05hbWUpIT09LTE/IiI6InN0YXJ0In0sdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldFRva2VucyhiLGIpWzBdLnRva2VucyxkPSIiO2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZz1jW2ZdO2cudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MD9kKz1nLnZhbHVlOmQrPWUuc3RyaW5nUmVwZWF0KCIgIixnLnZhbHVlLmxlbmd0aCl9cmV0dXJuIHRoaXMuX3BhcnNlVGFnKGQpfSx0aGlzLnRhZ1JlPS9eKFxzKikoPD8oXC8/KShbLV9hLXpBLVowLTk6IV0qKVxzKihcLz8pPj8pLyx0aGlzLl9wYXJzZVRhZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnRhZ1JlLmV4ZWMoYSksYz10aGlzLnRhZ1JlLmxhc3RJbmRleHx8MDtyZXR1cm4gdGhpcy50YWdSZS5sYXN0SW5kZXg9MCx7dmFsdWU6YSxtYXRjaDpiP2JbMl06IiIsY2xvc2luZzpiPyEhYlszXTohMSxzZWxmQ2xvc2luZzpiPyEhYls1XXx8YlsyXT09Ii8+IjohMSx0YWdOYW1lOmI/Yls0XToiIixjb2x1bW46YlsxXT9jK2JbMV0ubGVuZ3RoOmN9fSx0aGlzLl9yZWFkVGFnRm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLmdldEN1cnJlbnRUb2tlbigpO2lmKCFiKXJldHVybiBudWxsO3ZhciBjPSIiLGQ7ZG8gaWYoYi50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wKXtpZighZCl2YXIgZD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9O2MrPWIudmFsdWU7aWYoYy5pbmRleE9mKCI+IikhPT0tMSl7dmFyIGU9dGhpcy5fcGFyc2VUYWcoYyk7cmV0dXJuIGUuc3RhcnQ9ZCxlLmVuZD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrYi52YWx1ZS5sZW5ndGh9LGEuc3RlcEZvcndhcmQoKSxlfX13aGlsZShiPWEuc3RlcEZvcndhcmQoKSk7cmV0dXJuIG51bGx9LHRoaXMuX3JlYWRUYWdCYWNrd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLmdldEN1cnJlbnRUb2tlbigpO2lmKCFiKXJldHVybiBudWxsO3ZhciBjPSIiLGQ7ZG8gaWYoYi50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wKXtkfHwoZD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrYi52YWx1ZS5sZW5ndGh9KSxjPWIudmFsdWUrYztpZihjLmluZGV4T2YoIjwiKSE9PS0xKXt2YXIgZT10aGlzLl9wYXJzZVRhZyhjKTtyZXR1cm4gZS5lbmQ9ZCxlLnN0YXJ0PXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX0sYS5zdGVwQmFja3dhcmQoKSxlfX13aGlsZShiPWEuc3RlcEJhY2t3YXJkKCkpO3JldHVybiBudWxsfSx0aGlzLl9wb3A9ZnVuY3Rpb24oYSxiKXt3aGlsZShhLmxlbmd0aCl7dmFyIGM9YVthLmxlbmd0aC0xXTtpZighYnx8Yy50YWdOYW1lPT1iLnRhZ05hbWUpcmV0dXJuIGEucG9wKCk7aWYodGhpcy52b2lkRWxlbWVudHNbYi50YWdOYW1lXSlyZXR1cm47aWYodGhpcy52b2lkRWxlbWVudHNbYy50YWdOYW1lXSl7YS5wb3AoKTtjb250aW51ZX1yZXR1cm4gbnVsbH19LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9nZXRGaXJzdFRhZ0luTGluZShhLGMpO2lmKCFkLm1hdGNoKXJldHVybiBudWxsO3ZhciBlPWQuY2xvc2luZ3x8ZC5zZWxmQ2xvc2luZyxnPVtdLGk7aWYoIWUpe3ZhciBqPW5ldyBoKGEsYyxkLmNvbHVtbiksaz17cm93OmMsY29sdW1uOmQuY29sdW1uK2QudGFnTmFtZS5sZW5ndGgrMn07d2hpbGUoaT10aGlzLl9yZWFkVGFnRm9yd2FyZChqKSl7aWYoaS5zZWxmQ2xvc2luZyl7aWYoIWcubGVuZ3RoKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGkuZW5kLmNvbHVtbi09MixmLmZyb21Qb2ludHMoaS5zdGFydCxpLmVuZCk7Y29udGludWV9aWYoaS5jbG9zaW5nKXt0aGlzLl9wb3AoZyxpKTtpZihnLmxlbmd0aD09MClyZXR1cm4gZi5mcm9tUG9pbnRzKGssaS5zdGFydCl9ZWxzZSBnLnB1c2goaSl9fWVsc2V7dmFyIGo9bmV3IGgoYSxjLGQuY29sdW1uK2QubWF0Y2gubGVuZ3RoKSxsPXtyb3c6Yyxjb2x1bW46ZC5jb2x1bW59O3doaWxlKGk9dGhpcy5fcmVhZFRhZ0JhY2t3YXJkKGopKXtpZihpLnNlbGZDbG9zaW5nKXtpZighZy5sZW5ndGgpcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsaS5lbmQuY29sdW1uLT0yLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGkuZW5kKTtjb250aW51ZX1pZighaS5jbG9zaW5nKXt0aGlzLl9wb3AoZyxpKTtpZihnLmxlbmd0aD09MClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixmLmZyb21Qb2ludHMoaS5zdGFydCxsKX1lbHNlIGcucHVzaChpKX19fX0uY2FsbChpLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2NzcyIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2h0bWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGc9YSgiLi9jc3MiKS5Nb2RlLGg9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGk9YSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlcyxqPWEoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cixrPWEoIi4vZm9sZGluZy9odG1sIikuRm9sZE1vZGUsbD1mdW5jdGlvbigpe3ZhciBhPW5ldyBpO3RoaXMuJHRva2VuaXplcj1uZXcgaChhLmdldFJ1bGVzKCkpLHRoaXMuJGJlaGF2aW91cj1uZXcgaix0aGlzLiRlbWJlZHM9YS5nZXRFbWJlZHMoKSx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeyJqcy0iOmYsImNzcy0iOmd9KSx0aGlzLmZvbGRpbmdSdWxlcz1uZXcga307ZC5pbmhlcml0cyhsLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIDB9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRnZXRJbmRlbnQoYil9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hMX19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaj1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsaz1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCksImkiKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBqfTtkLmluaGVyaXRzKGssZSksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdSdWxlcz0iY1N0eWxlIix0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLnRva2VucztpZihlLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7dmFyIGY9Yi5tYXRjaCgvXi4qXHtccyokLyk7cmV0dXJuIGYmJihkKz1jKSxkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGkoWyJhY2UiXSwid29ya2VyLWNzcy5qcyIsImFjZS9tb2RlL2Nzc193b3JrZXIiLCJXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigiY3NzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Yi5kYXRhLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5wdXNoKHtyb3c6YS5saW5lLTEsY29sdW1uOmEuY29sLTEsdGV4dDphLm1lc3NhZ2UsdHlwZTphLnR5cGUsbGludDphfSl9KSxhLnNldEFubm90YXRpb25zKGMpfSksYn19LmNhbGwoay5wcm90b3R5cGUpLGIuTW9kZT1rfSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIi1tb3otYXBwZWFyYW5jZXwtbW96LWJveC1zaXppbmd8LXdlYmtpdC1ib3gtc2l6aW5nfC1tb3otb3V0bGluZS1yYWRpdXN8LW1vei10cmFuc2Zvcm18LXdlYmtpdC10cmFuc2Zvcm18YXBwZWFyYW5jZXxhemltdXRofGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kfGJvcmRlci1ib3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1ib3R0b218Ym9yZGVyLWNvbGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVmdC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItbGVmdHxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItcmlnaHR8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci10b3B8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3VlLWFmdGVyfGN1ZS1iZWZvcmV8Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxlbGV2YXRpb258ZW1wdHktY2VsbHN8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9udC1zaXplLWFkanVzdHxmb250LXNpemV8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2VpZ2h0fGZvbnR8aGVpZ2h0fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxsaXN0LXN0eWxlfG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWFya2VyLW9mZnNldHxtYXJnaW58bWFya3N8bWF4LWhlaWdodHxtYXgtd2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8LW1vei1ib3JkZXItcmFkaXVzfG9wYWNpdHl8b3JwaGFuc3xvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtcmFkaXVzfG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdXRsaW5lfG92ZXJmbG93fG92ZXJmbG93LXh8b3ZlcmZsb3cteXxwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWRkaW5nfHBhZ2UtYnJlYWstYWZ0ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZXxwYXVzZS1hZnRlcnxwYXVzZS1iZWZvcmV8cGF1c2V8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9pbnRlci1ldmVudHN8cG9zaXRpb258cXVvdGVzfHJlc2l6ZXxyaWNobmVzc3xyaWdodHxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNwZWVjaC1yYXRlfHNwZWFrfHN0cmVzc3x0YWJsZS1sYXlvdXR8dGV4dC1hbGlnbnx0ZXh0LWRlY29yYXRpb258dGV4dC1pbmRlbnR8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dG9wfHRyYW5zZm9ybXx1bmljb2RlLWJpZGl8dmVydGljYWwtYWxpZ258dmlzaWJpbGl0eXx2b2ljZS1mYW1pbHl8dm9sdW1lfHdoaXRlLXNwYWNlfHdpZG93c3x3aWR0aHx3b3JkLXNwYWNpbmd8ei1pbmRleCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJhYnNvbHV0ZXxhbGwtc2Nyb2xsfGFsd2F5c3xhcm1lbmlhbnxhdXRvfGJhc2VsaW5lfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXplfGNlbnRlcnxjaGFyfGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb250ZW50LWJveHxjcm9zc2hhaXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxkaXNjfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVsbGlwc2lzfGZpeGVkfGdlb3JnaWFufGdyb292ZXxoYW5kfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFsfGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLXNwYWNlfGluYWN0aXZlfGluaGVyaXR8aW5saW5lLWJsb2NrfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdvcmR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaXN0LWl0ZW18bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtZWRpdW18bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1kcm9wfG5vLXJlcGVhdHxudy1yZXNpemV8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG9ibGlxdWV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cG9pbnRlcnxwcm9ncmVzc3xyZWxhdGl2ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmlnaHR8cmlkZ2V8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbWFsbC1jYXBzfHNvbGlkfHNxdWFyZXxzdGF0aWN8c3RyaWN0fHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRiLXJsfHRleHQtYm90dG9tfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0b3B8dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhhfHVwcGVyLWxhdGlufHVwcGVyLXJvbWFufHVwcGVyY2FzZXx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHplcm8iLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCJhcXVhfGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8b2xpdmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93Ii5zcGxpdCgifCIpKSxmPSJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSIsZz1be3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJydWxlc2V0X2NvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmYrIig/OmVtfGV4fHB4fGNtfG1tfGlufHB0fHBjfGRlZ3xyYWR8Z3JhZHxtc3xzfGh6fGtoenwlKSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXs2fSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXszfSJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LnR5cGUiOmIuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5mdW5jdGlvbiI6Yy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmNvbnN0YW50IjpkLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiJ0ZXh0In0scmVnZXg6IlxcLT9bYS16QS1aX11bYS16QS1aMC05X1xcLV0qIn1dLGg9ZS5jb3B5QXJyYXkoZyk7aC51bnNoaWZ0KHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiXFx9IixuZXh0OiJzdGFydCJ9KTt2YXIgaT1lLmNvcHlBcnJheShnKTtpLnVuc2hpZnQoe3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJcXH0iLG5leHQ6Im1lZGlhIn0pO3ZhciBqPVt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxrPWUuY29weUFycmF5KGopO2sudW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0pO3ZhciBsPWUuY29weUFycmF5KGopO2wudW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6Im1lZGlhIn0pO3ZhciBtPWUuY29weUFycmF5KGopO20udW5zaGlmdCh7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InJ1bGVzZXQifSksdGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IlxceyIsbmV4dDoicnVsZXNldCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiQC4qP3siLG5leHQ6Im1lZGlhIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifV0sbWVkaWE6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoibWVkaWFfY29tbWVudCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiXFx7IixuZXh0OiJtZWRpYV9ydWxlc2V0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXH0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifV0sY29tbWVudDprLHJ1bGVzZXQ6aCxydWxlc2V0X2NvbW1lbnQ6bSxtZWRpYV9ydWxlc2V0OmksbWVkaWFfY29tbWVudDpsfX07ZC5pbmhlcml0cyhnLGYpLGIuQ3NzSGlnaGxpZ2h0UnVsZXM9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfdXRpbCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxmPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3htbF91dGlsIiksaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjwoPz1zKnNjcmlwdFxcYikiLG5leHQ6InNjcmlwdCJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8KD89cypzdHlsZVxcYikiLG5leHQ6ImNzcyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvPyIsbmV4dDoidGFnIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IltePF0rIn1dLGNkYXRhOlt7dG9rZW46InRleHQiLHJlZ2V4OiJcXF1cXF0+IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46InRleHQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj8tLT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LGcudGFnKHRoaXMuJHJ1bGVzLCJ0YWciLCJzdGFydCIpLGcudGFnKHRoaXMuJHJ1bGVzLCJjc3MiLCJjc3Mtc3RhcnQiKSxnLnRhZyh0aGlzLiRydWxlcywic2NyaXB0IiwianMtc3RhcnQiKSx0aGlzLmVtYmVkUnVsZXMoZiwianMtIixbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiooPz08XFwvc2NyaXB0PikiLG5leHQ6InRhZyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvKD89c2NyaXB0KSIsbmV4dDoidGFnIn1dKSx0aGlzLmVtYmVkUnVsZXMoZSwiY3NzLSIsW3t0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvKD89c3R5bGUpIixuZXh0OiJ0YWcifV0pfTtkLmluaGVyaXRzKGksaCksYi5IdG1sSGlnaGxpZ2h0UnVsZXM9aX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4vbWl4ZWQiKS5Gb2xkTW9kZSxmPWEoIi4veG1sIikuRm9sZE1vZGUsZz1hKCIuL2NzdHlsZSIpLkZvbGRNb2RlLGg9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe2UuY2FsbCh0aGlzLG5ldyBmKHthcmVhOjEsYmFzZToxLGJyOjEsY29sOjEsY29tbWFuZDoxLGVtYmVkOjEsaHI6MSxpbWc6MSxpbnB1dDoxLGtleWdlbjoxLGxpbms6MSxtZXRhOjEscGFyYW06MSxzb3VyY2U6MSx0cmFjazoxLHdicjoxLGxpOjEsZHQ6MSxkZDoxLHA6MSxydDoxLHJwOjEsb3B0Z3JvdXA6MSxvcHRpb246MSxjb2xncm91cDoxLHRkOjEsdGg6MX0pLHsianMtIjpuZXcgZywiY3NzLSI6bmV3IGd9KX07ZC5pbmhlcml0cyhoLGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZj1iLkZvbGRNb2RlPWZ1bmN0aW9uKGEsYil7dGhpcy5kZWZhdWx0TW9kZT1hLHRoaXMuc3ViTW9kZXM9Yn07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy4kZ2V0TW9kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gdGhpcy5zdWJNb2RlcylpZihhLmluZGV4T2YoYik9PT0wKXJldHVybiB0aGlzLnN1Yk1vZGVzW2JdO3JldHVybiBudWxsfSx0aGlzLiR0cnlNb2RlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJGdldE1vZGUoYSk7cmV0dXJuIGU/ZS5nZXRGb2xkV2lkZ2V0KGIsYyxkKToiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kdHJ5TW9kZShhLmdldFN0YXRlKGMtMSksYSxiLGMpfHx0aGlzLiR0cnlNb2RlKGEuZ2V0U3RhdGUoYyksYSxiLGMpfHx0aGlzLmRlZmF1bHRNb2RlLmdldEZvbGRXaWRnZXQoYSxiLGMpfSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0TW9kZShhLmdldFN0YXRlKGMtMSkpO2lmKCFkfHwhZC5nZXRGb2xkV2lkZ2V0KGEsYixjKSlkPXRoaXMuJGdldE1vZGUoYS5nZXRTdGF0ZShjKSk7aWYoIWR8fCFkLmdldEZvbGRXaWRnZXQoYSxiLGMpKWQ9dGhpcy5kZWZhdWx0TW9kZTtyZXR1cm4gZC5nZXRGb2xkV2lkZ2V0UmFuZ2UoYSxiLGMpfX0uY2FsbChmLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9tYXJrZG93bl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGooYSxiKXtyZXR1cm57dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiJeYGBgIithKyJcXHMqJCIsbmV4dDpiKyJzdGFydCJ9fSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9YSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyxnPWEoIi4veG1sX2hpZ2hsaWdodF9ydWxlcyIpLlhtbEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlcyxpPWEoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzLGs9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiZW1wdHlfbGluZSIscmVnZXg6Il4kIn0se3Rva2VuOiJzdXBwb3J0LmZ1bmN0aW9uIixyZWdleDoiKGArKShbXlxccl0qP1teYF0pKFxcMSkifSx7dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiJeWyBdezR9LisifSx7dG9rZW46Im1hcmt1cC5oZWFkaW5nLjEiLHJlZ2V4OiJePSsoPz1cXHMqJCkifSx7dG9rZW46Im1hcmt1cC5oZWFkaW5nLjEiLHJlZ2V4OiJeXFwtKyg/PVxccyokKSJ9LHt0b2tlbjpmdW5jdGlvbihhKXtyZXR1cm4ibWFya3VwLmhlYWRpbmcuIithLmxlbmd0aH0scmVnZXg6Il4jezEsNn0ifSxqKCJqYXZhc2NyaXB0IiwianMtIiksaigieG1sIiwieG1sLSIpLGooImh0bWwiLCJodG1sLSIpLGooImNzcyIsImNzcy0iKSx7dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiJeYGBgW2EtekEtWl0rXFxzKiQiLG5leHQ6ImdpdGh1YmJsb2NrIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJePlsgXS4rJCIsbmV4dDoiYmxvY2txdW90ZSJ9LHt0b2tlbjpbInRleHQiLCJjb25zdGFudCIsInRleHQiLCJ1cmwiLCJzdHJpbmciLCJ0ZXh0Il0scmVnZXg6J14oWyBdezAsM31cXFspKFteXFxdXSspKFxcXTpcXHMqKShbXiBdKykoXFxzKig/OlsiXVteIl0rWyJdKT9cXHMqKSQnfSx7dG9rZW46WyJ0ZXh0Iiwic3RyaW5nIiwidGV4dCIsImNvbnN0YW50IiwidGV4dCJdLHJlZ2V4OiIoXFxbKSgoPzpbW15cXF1dKlxcXXxbXlxcW1xcXV0pKikoXFxdWyBdPyg/OlxcblsgXSopP1xcWykoLio/KShcXF0pIn0se3Rva2VuOlsidGV4dCIsInN0cmluZyIsInRleHQiLCJtYXJrdXAudW5kZXJsaW5lIiwic3RyaW5nIiwidGV4dCJdLHJlZ2V4OicoXFxbKShcXFtbXlxcXV0qXFxdfFteXFxbXFxdXSopKFxcXVxcKFsgXFx0XSopKDw/KD86KD86W15cXChdKj9cXChbXlxcKV0qP1xcKVxcUyo/KXwoPzouKj8pKT4/KSgoPzpbIFx0XSoiKD86Lio/KSJbIFxcdF0qKT8pKFxcKSknfSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiXlsgXXswLDJ9KD86WyBdP1xcKlsgXT8pezMsfVxccyokIn0se3Rva2VuOiJjb25zdGFudCIscmVnZXg6Il5bIF17MCwyfSg/OlsgXT9cXC1bIF0/KXszLH1cXHMqJCJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJeWyBdezAsMn0oPzpbIF0/XFxfWyBdPyl7Myx9XFxzKiQifSx7dG9rZW46Im1hcmt1cC5saXN0IixyZWdleDoiXlxcc3swLDN9KD86WyorLV18XFxkK1xcLilcXHMrIixuZXh0OiJsaXN0YmxvY2sifSx7dG9rZW46InN0cmluZyIscmVnZXg6IihbKl17Mn18W19dezJ9KD89XFxTKSkoW15cXHJdKj9cXFNbKl9dKikoXFwxKSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiKFsqXXxbX10oPz1cXFMpKShbXlxccl0qP1xcU1sqX10qKShcXDEpIn0se3Rva2VuOlsidGV4dCIsInVybCIsInRleHQiXSxyZWdleDoiKDwpKCg/Omh0dHBzP3xmdHB8ZGljdCk6W14nXCI+XFxzXSt8KD86bWFpbHRvOik/Wy0uXFx3XStcXEBbLWEtejAtOV0rKD86XFwuWy1hLXowLTldKykqXFwuW2Etel0rKSg+KSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlteXFwqXyUkYFxcWyM8Pl0rIn1dLGxpc3RibG9jazpbe3Rva2VuOiJlbXB0eV9saW5lIixyZWdleDoiXiQiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJtYXJrdXAubGlzdCIscmVnZXg6Ii4rIn1dLGJsb2NrcXVvdGU6W3t0b2tlbjoiZW1wdHlfbGluZSIscmVnZXg6Il5cXHMqJCIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6Ii4rIn1dLGdpdGh1YmJsb2NrOlt7dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiJeYGBgIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6Ii4rIn1dfSx0aGlzLmVtYmVkUnVsZXMoZiwianMtIixbe3Rva2VuOiJzdXBwb3J0LmZ1bmN0aW9uIixyZWdleDoiXmBgYCIsbmV4dDoic3RhcnQifV0pLHRoaXMuZW1iZWRSdWxlcyhoLCJodG1sLSIsW3t0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6Il5gYGAiLG5leHQ6InN0YXJ0In1dKSx0aGlzLmVtYmVkUnVsZXMoaSwiY3NzLSIsW3t0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6Il5gYGAiLG5leHQ6InN0YXJ0In1dKSx0aGlzLmVtYmVkUnVsZXMoZywieG1sLSIsW3t0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6Il5gYGAiLG5leHQ6InN0YXJ0In1dKX07ZC5pbmhlcml0cyhrLGUpLGIuTWFya2Rvd25IaWdobGlnaHRSdWxlcz1rfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-markdown.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9tYXJrZG93biIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS94bWwiLCJhY2UvbW9kZS9odG1sIiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL21hcmtkb3duX2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4vamF2YXNjcmlwdCIpLk1vZGUsZz1hKCIuL3htbCIpLk1vZGUsaD1hKCIuL2h0bWwiKS5Nb2RlLGk9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGo9YSgiLi9tYXJrZG93bl9oaWdobGlnaHRfcnVsZXMiKS5NYXJrZG93bkhpZ2hsaWdodFJ1bGVzLGs9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgajt0aGlzLiR0b2tlbml6ZXI9bmV3IGkoYS5nZXRSdWxlcygpKSx0aGlzLiRlbWJlZHM9YS5nZXRFbWJlZHMoKSx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeyJqcy0iOmYsInhtbC0iOmcsImh0bWwtIjpofSl9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PSJsaXN0YmxvY2siKXt2YXIgZD0vXigoPzouKyk/KShbLSsqXVsgXSspLy5leGVjKGIpO3JldHVybiBkPyhuZXcgQXJyYXkoZFsxXS5sZW5ndGgrMSkpLmpvaW4oIiAiKStkWzJdOiIifXJldHVybiB0aGlzLiRnZXRJbmRlbnQoYil9fS5jYWxsKGsucHJvdG90eXBlKSxiLk1vZGU9a30pLGRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9YSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaz1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsbD1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsbT1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBrLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBsfTtkLmluaGVyaXRzKG0sZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKilcL1wvLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiLy8iKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zLGc9ZS5zdGF0ZTtpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Inx8YT09InJlZ2V4X2FsbG93ZWQiKXt2YXIgaD1iLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7XChcW10pXHMqJC8pO2gmJihkKz1jKX1lbHNlIGlmKGE9PSJkb2Mtc3RhcnQiKXtpZihnPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpcmV0dXJuIiI7dmFyIGg9Yi5tYXRjaCgvXlxzKihcLz8pXCovKTtoJiYoaFsxXSYmKGQrPSIgIiksZCs9IiogIil9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgaihbImFjZSJdLCJ3b3JrZXItamF2YXNjcmlwdC5qcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwiSmF2YVNjcmlwdFdvcmtlciIpO3JldHVybiBiLmF0dGFjaFRvRG9jdW1lbnQoYS5nZXREb2N1bWVudCgpKSxiLm9uKCJqc2xpbnQiLGZ1bmN0aW9uKGIpe3ZhciBjPVtdO2Zvcih2YXIgZD0wO2Q8Yi5kYXRhLmxlbmd0aDtkKyspe3ZhciBlPWIuZGF0YVtkXTtlJiZjLnB1c2goe3JvdzplLmxpbmUtMSxjb2x1bW46ZS5jaGFyYWN0ZXItMSx0ZXh0OmUucmVhc29uLHR5cGU6Indhcm5pbmciLGxpbnQ6ZX0pfWEuc2V0QW5ub3RhdGlvbnMoYyl9KSxiLm9uKCJuYXJjaXNzdXMiLGZ1bmN0aW9uKGIpe2Euc2V0QW5ub3RhdGlvbnMoW2IuZGF0YV0pfSksYi5vbigidGVybWluYXRlIixmdW5jdGlvbigpe2EuY2xlYXJBbm5vdGF0aW9ucygpfSksYn19LmNhbGwobS5wcm90b3R5cGUpLGIuTW9kZT1tfSksZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3VuaWNvZGUiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4uL3VuaWNvZGUiKSxnPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxpPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldCIuc3BsaXQoInwiKSksYz0iY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZCIsZD1lLmFycmF5VG9NYXAoIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fXyIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLnNwbGl0KCJ8IikpLGk9ZS5hcnJheVRvTWFwKCJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLnNwbGl0KCJ8IikpLGo9ZS5hcnJheVRvTWFwKCJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIuc3BsaXQoInwiKSksaz0iWyIrZi5wYWNrYWdlcy5MKyJcXCRfXVsiK2YucGFja2FnZXMuTCtmLnBhY2thZ2VzLk1uK2YucGFja2FnZXMuTWMrZi5wYWNrYWdlcy5OZCtmLnBhY2thZ2VzLlBjKyJcXCRfXSpcXGIiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBnKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOlsia2V5d29yZC5kZWZpbml0aW9uIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitrKyIpIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIoPzoiK2MrIilcXGIiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoYyk/InZhcmlhYmxlLmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmguaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQuZGVmaW5pdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6aS5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmouaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuaWxsZWdhbCI6Yz09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4Omt9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJcXD98XFw6fFxcLHxcXDt8XFwuIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcLz0/IixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXiMhLiokIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxyZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnRfcmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlxcLyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXg6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXgifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiIvXFx3KiIsbmV4dDoic3RhcnQiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbXlxcXFwvXFxbXSsiLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlxcWyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXhfY2hhcmFjdGVyX2NsYXNzOlt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJdIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJbXlxcXFxcXF1dKyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0sY29tbWVudF9yZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhnLCJkb2MtIixbKG5ldyBnKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaSxoKSxiLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1pfSksZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudC5kb2MudGFnIixyZWdleDoiQFtcXHdcXGRfXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFxzKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJUT0RPIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlteQFxcKl0rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6Ii4ifV19fTtkLmluaGVyaXRzKGYsZSksZnVuY3Rpb24oKXt0aGlzLmdldFN0YXJ0UnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwvXFwqKD89XFwqKSIsbmV4dDphfX0sdGhpcy5nZXRFbmRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXCpcXC8iLG5leHQ6YX19fS5jYWxsKGYucHJvdG90eXBlKSxiLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcz1mfSksZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlx9Ly50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcfSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KSkuY2FsbChlLnByb3RvdHlwZSksYi5NYXRjaGluZ0JyYWNlT3V0ZGVudD1lfSksZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL3htbCJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4veG1sX2hpZ2hsaWdodF9ydWxlcyIpLlhtbEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9iZWhhdmlvdXIveG1sIikuWG1sQmVoYXZpb3VyLGk9YSgiLi9mb2xkaW5nL3htbCIpLkZvbGRNb2RlLGo9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRiZWhhdmlvdXI9bmV3IGgsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGl9O2QuaW5oZXJpdHMoaixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRnZXRJbmRlbnQoYil9fS5jYWxsKGoucHJvdG90eXBlKSxiLk1vZGU9an0pLGRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUveG1sX3V0aWwiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi94bWxfdXRpbCIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46InRleHQiLHJlZ2V4OiI8XFwhXFxbQ0RBVEFcXFsiLG5leHQ6ImNkYXRhIn0se3Rva2VuOiJ4bWxfcGUiLHJlZ2V4OiI8XFw/Lio/XFw/PiJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IjxcXCEtLSIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvPyIsbmV4dDoidGFnIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IltePF0rIn1dLGNkYXRhOlt7dG9rZW46InRleHQiLHJlZ2V4OiJcXF1cXF0+IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46InRleHQiLHJlZ2V4OiIoPzpbXlxcXV18XFxdKD8hXFxdPikpKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj8tLT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LGUudGFnKHRoaXMuJHJ1bGVzLCJ0YWciLCJzdGFydCIpfTtkLmluaGVyaXRzKGcsZiksYi5YbWxIaWdobGlnaHRSdWxlcz1nfSksZGVmaW5lKCJhY2UvbW9kZS94bWxfdXRpbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEpe3JldHVyblt7dG9rZW46InN0cmluZyIscmVnZXg6JyIuKj8iJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKicsbmV4dDphKyItcXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKj8nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKiIsbmV4dDphKyItcXN0cmluZyJ9XX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLio/IithLG5leHQ6Yn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2xhbmciKSxlPWQuYXJyYXlUb01hcCgiYnV0dG9ufGZvcm18aW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhIi5zcGxpdCgifCIpKSxmPWQuYXJyYXlUb01hcCgidGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dHIiLnNwbGl0KCJ8IikpO2IudGFnPWZ1bmN0aW9uKGEsYixjKXthW2JdPVt7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09ImEiPyJtZXRhLnRhZy5hbmNob3IiOmE9PT0iaW1nIj8ibWV0YS50YWcuaW1hZ2UiOmE9PT0ic2NyaXB0Ij8ibWV0YS50YWcuc2NyaXB0IjphPT09InN0eWxlIj8ibWV0YS50YWcuc3R5bGUiOmUuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcuZm9ybSI6Zi5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy50YWJsZSI6Im1ldGEudGFnIn0sbWVyZ2U6ITAscmVnZXg6IlstX2EtekEtWjAtOTohXSsiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OmIrImVtYmVkLWF0dHJpYnV0ZS1saXN0In1dLGFbYisiLXFzdHJpbmciXT1oKCInIixiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiLXFxc3RyaW5nIl09aCgnIicsYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiKSxhW2IrImVtYmVkLWF0dHJpYnV0ZS1saXN0Il09W3t0b2tlbjoibWV0YS50YWciLG1lcmdlOiEwLHJlZ2V4OiIvPz4iLG5leHQ6Y30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiPSJ9LHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLmNvbmNhdChnKGIpKX19KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWEoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGc9ZnVuY3Rpb24oKXt0aGlzLmluaGVyaXQoZixbInN0cmluZ19kcXVvdGVzIl0pLHRoaXMuYWRkKCJicmFja2V0cyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iPCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiPyExOnt0ZXh0OiI8PiIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iPiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09Ij4iKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxrPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzIpO2lmKGs9PSI8LyIpe3ZhciBsPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGgucm93KSkrZC5nZXRUYWJTdHJpbmcoKSxtPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGgucm93KSk7cmV0dXJue3RleHQ6IlxuIitsKyJcbiIrbSxzZWxlY3Rpb246WzEsbC5sZW5ndGgsMSxsLmxlbmd0aF19fX19KX07ZC5pbmhlcml0cyhnLGUpLGIuWG1sQmVoYXZpb3VyPWd9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vbGliL2xhbmciKSxmPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZz1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGg9YSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLGk9Yi5Gb2xkTW9kZT1mdW5jdGlvbihhKXtnLmNhbGwodGhpcyksdGhpcy52b2lkRWxlbWVudHM9YXx8e319O2QuaW5oZXJpdHMoaSxnKSxmdW5jdGlvbigpe3RoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoYSxjKTtyZXR1cm4gZC5jbG9zaW5nP2I9PSJtYXJrYmVnaW5lbmQiPyJlbmQiOiIiOiFkLnRhZ05hbWV8fHRoaXMudm9pZEVsZW1lbnRzW2QudGFnTmFtZS50b0xvd2VyQ2FzZSgpXT8iIjpkLnNlbGZDbG9zaW5nPyIiOmQudmFsdWUuaW5kZXhPZigiLyIrZC50YWdOYW1lKSE9PS0xPyIiOiJzdGFydCJ9LHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRUb2tlbnMoYixiKVswXS50b2tlbnMsZD0iIjtmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl7dmFyIGc9Y1tmXTtnLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTA/ZCs9Zy52YWx1ZTpkKz1lLnN0cmluZ1JlcGVhdCgiICIsZy52YWx1ZS5sZW5ndGgpfXJldHVybiB0aGlzLl9wYXJzZVRhZyhkKX0sdGhpcy50YWdSZT0vXihccyopKDw/KFwvPykoWy1fYS16QS1aMC05OiFdKilccyooXC8/KT4/KS8sdGhpcy5fcGFyc2VUYWc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50YWdSZS5leGVjKGEpLGM9dGhpcy50YWdSZS5sYXN0SW5kZXh8fDA7cmV0dXJuIHRoaXMudGFnUmUubGFzdEluZGV4PTAse3ZhbHVlOmEsbWF0Y2g6Yj9iWzJdOiIiLGNsb3Npbmc6Yj8hIWJbM106ITEsc2VsZkNsb3Npbmc6Yj8hIWJbNV18fGJbMl09PSIvPiI6ITEsdGFnTmFtZTpiP2JbNF06IiIsY29sdW1uOmJbMV0/YytiWzFdLmxlbmd0aDpjfX0sdGhpcy5fcmVhZFRhZ0ZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRDdXJyZW50VG9rZW4oKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz0iIixkO2RvIGlmKGIudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MCl7aWYoIWQpdmFyIGQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfTtjKz1iLnZhbHVlO2lmKGMuaW5kZXhPZigiPiIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLnN0YXJ0PWQsZS5lbmQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2IudmFsdWUubGVuZ3RofSxhLnN0ZXBGb3J3YXJkKCksZX19d2hpbGUoYj1hLnN0ZXBGb3J3YXJkKCkpO3JldHVybiBudWxsfSx0aGlzLl9yZWFkVGFnQmFja3dhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRDdXJyZW50VG9rZW4oKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz0iIixkO2RvIGlmKGIudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MCl7ZHx8KGQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2IudmFsdWUubGVuZ3RofSksYz1iLnZhbHVlK2M7aWYoYy5pbmRleE9mKCI8IikhPT0tMSl7dmFyIGU9dGhpcy5fcGFyc2VUYWcoYyk7cmV0dXJuIGUuZW5kPWQsZS5zdGFydD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9LGEuc3RlcEJhY2t3YXJkKCksZX19d2hpbGUoYj1hLnN0ZXBCYWNrd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcG9wPWZ1bmN0aW9uKGEsYil7d2hpbGUoYS5sZW5ndGgpe3ZhciBjPWFbYS5sZW5ndGgtMV07aWYoIWJ8fGMudGFnTmFtZT09Yi50YWdOYW1lKXJldHVybiBhLnBvcCgpO2lmKHRoaXMudm9pZEVsZW1lbnRzW2IudGFnTmFtZV0pcmV0dXJuO2lmKHRoaXMudm9pZEVsZW1lbnRzW2MudGFnTmFtZV0pe2EucG9wKCk7Y29udGludWV9cmV0dXJuIG51bGx9fSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoYSxjKTtpZighZC5tYXRjaClyZXR1cm4gbnVsbDt2YXIgZT1kLmNsb3Npbmd8fGQuc2VsZkNsb3NpbmcsZz1bXSxpO2lmKCFlKXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4pLGs9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbitkLnRhZ05hbWUubGVuZ3RoKzJ9O3doaWxlKGk9dGhpcy5fcmVhZFRhZ0ZvcndhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKGkuY2xvc2luZyl7dGhpcy5fcG9wKGcsaSk7aWYoZy5sZW5ndGg9PTApcmV0dXJuIGYuZnJvbVBvaW50cyhrLGkuc3RhcnQpfWVsc2UgZy5wdXNoKGkpfX1lbHNle3ZhciBqPW5ldyBoKGEsYyxkLmNvbHVtbitkLm1hdGNoLmxlbmd0aCksbD17cm93OmMsY29sdW1uOmQuY29sdW1ufTt3aGlsZShpPXRoaXMuX3JlYWRUYWdCYWNrd2FyZChqKSl7aWYoaS5zZWxmQ2xvc2luZyl7aWYoIWcubGVuZ3RoKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGkuZW5kLmNvbHVtbi09MixmLmZyb21Qb2ludHMoaS5zdGFydCxpLmVuZCk7Y29udGludWV9aWYoIWkuY2xvc2luZyl7dGhpcy5fcG9wKGcsaSk7aWYoZy5sZW5ndGg9PTApcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsbCl9ZWxzZSBnLnB1c2goaSl9fX19LmNhbGwoaS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2NzcyIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2h0bWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGc9YSgiLi9jc3MiKS5Nb2RlLGg9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGk9YSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlcyxqPWEoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cixrPWEoIi4vZm9sZGluZy9odG1sIikuRm9sZE1vZGUsbD1mdW5jdGlvbigpe3ZhciBhPW5ldyBpO3RoaXMuJHRva2VuaXplcj1uZXcgaChhLmdldFJ1bGVzKCkpLHRoaXMuJGJlaGF2aW91cj1uZXcgaix0aGlzLiRlbWJlZHM9YS5nZXRFbWJlZHMoKSx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeyJqcy0iOmYsImNzcy0iOmd9KSx0aGlzLmZvbGRpbmdSdWxlcz1uZXcga307ZC5pbmhlcml0cyhsLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIDB9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRnZXRJbmRlbnQoYil9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hMX19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksZGVmaW5lKCJhY2UvbW9kZS9jc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSwiaSIpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1J1bGVzPSJjU3R5bGUiLHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSkudG9rZW5zO2lmKGUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDt2YXIgZj1iLm1hdGNoKC9eLipce1xzKiQvKTtyZXR1cm4gZiYmKGQrPWMpLGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgaShbImFjZSJdLCJ3b3JrZXItY3NzLmpzIiwiYWNlL21vZGUvY3NzX3dvcmtlciIsIldvcmtlciIpO3JldHVybiBiLmF0dGFjaFRvRG9jdW1lbnQoYS5nZXREb2N1bWVudCgpKSxiLm9uKCJjc3NsaW50IixmdW5jdGlvbihiKXt2YXIgYz1bXTtiLmRhdGEuZm9yRWFjaChmdW5jdGlvbihhKXtjLnB1c2goe3JvdzphLmxpbmUtMSxjb2x1bW46YS5jb2wtMSx0ZXh0OmEubWVzc2FnZSx0eXBlOmEudHlwZSxsaW50OmF9KX0pLGEuc2V0QW5ub3RhdGlvbnMoYyl9KSxifX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxkZWZpbmUoImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCItbW96LWFwcGVhcmFuY2V8LW1vei1ib3gtc2l6aW5nfC13ZWJraXQtYm94LXNpemluZ3wtbW96LW91dGxpbmUtcmFkaXVzfC1tb3otdHJhbnNmb3JtfC13ZWJraXQtdHJhbnNmb3JtfGFwcGVhcmFuY2V8YXppbXV0aHxiYWNrZ3JvdW5kLWF0dGFjaG1lbnR8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtb3JpZ2lufGJhY2tncm91bmQtcG9zaXRpb258YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZHxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItYm90dG9tfGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXJpZ2h0fGJvcmRlci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItdG9wfGJvcmRlci13aWR0aHxib3JkZXJ8Ym90dG9tfGJveC1zaXppbmd8Y2FwdGlvbi1zaWRlfGNsZWFyfGNsaXB8Y29sb3J8Y29udGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGN1ZS1hZnRlcnxjdWUtYmVmb3JlfGN1ZXxjdXJzb3J8ZGlyZWN0aW9ufGRpc3BsYXl8ZWxldmF0aW9ufGVtcHR5LWNlbGxzfGZsb2F0fGZvbnQtZmFtaWx5fGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zaXplfGZvbnQtc3RyZXRjaHxmb250LXN0eWxlfGZvbnQtdmFyaWFudHxmb250LXdlaWdodHxmb250fGhlaWdodHxsZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpc3Qtc3R5bGUtaW1hZ2V8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLXR5cGV8bGlzdC1zdHlsZXxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1hcmtlci1vZmZzZXR8bWFyZ2lufG1hcmtzfG1heC1oZWlnaHR8bWF4LXdpZHRofG1pbi1oZWlnaHR8bWluLXdpZHRofC1tb3otYm9yZGVyLXJhZGl1c3xvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLXJhZGl1c3xvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZy1ib3R0b218cGFkZGluZy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2V8cGF1c2UtYWZ0ZXJ8cGF1c2UtYmVmb3JlfHBhdXNlfHBpdGNoLXJhbmdlfHBpdGNofHBsYXktZHVyaW5nfHBvaW50ZXItZXZlbnRzfHBvc2l0aW9ufHF1b3Rlc3xyZXNpemV8cmljaG5lc3N8cmlnaHR8c2l6ZXxzcGVhay1oZWFkZXJ8c3BlYWstbnVtZXJhbHxzcGVhay1wdW5jdHVhdGlvbnxzcGVlY2gtcmF0ZXxzcGVha3xzdHJlc3N8dGFibGUtbGF5b3V0fHRleHQtYWxpZ258dGV4dC1kZWNvcmF0aW9ufHRleHQtaW5kZW50fHRleHQtc2hhZG93fHRleHQtdHJhbnNmb3JtfHRvcHx0cmFuc2Zvcm18dW5pY29kZS1iaWRpfHZlcnRpY2FsLWFsaWdufHZpc2liaWxpdHl8dm9pY2UtZmFtaWx5fHZvbHVtZXx3aGl0ZS1zcGFjZXx3aWRvd3N8d2lkdGh8d29yZC1zcGFjaW5nfHotaW5kZXgiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJyZ2J8cmdiYXx1cmx8YXR0cnxjb3VudGVyfGNvdW50ZXJzIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgiYWJzb2x1dGV8YWxsLXNjcm9sbHxhbHdheXN8YXJtZW5pYW58YXV0b3xiYXNlbGluZXxiZWxvd3xiaWRpLW92ZXJyaWRlfGJsb2NrfGJvbGR8Ym9sZGVyfGJvcmRlci1ib3h8Ym90aHxib3R0b218YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjZW50ZXJ8Y2hhcnxjaXJjbGV8Y2prLWlkZW9ncmFwaGljfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29udGVudC1ib3h8Y3Jvc3NoYWlyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXN0cmlidXRlLWFsbC1saW5lc3xkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGV8ZG90dGVkfGRvdWJsZXxlLXJlc2l6ZXxlbGxpcHNpc3xmaXhlZHxnZW9yZ2lhbnxncm9vdmV8aGFuZHxoZWJyZXd8aGVscHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRhbHxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpbmFjdGl2ZXxpbmhlcml0fGlubGluZS1ibG9ja3xpbmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13b3JkfGl0YWxpY3xqdXN0aWZ5fGthdGFrYW5hLWlyb2hhfGthdGFrYW5hfGtlZXAtYWxsfGxlZnR8bGlnaHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGlzdC1pdGVtfGxvb3NlfGxvd2VyLWFscGhhfGxvd2VyLWdyZWVrfGxvd2VyLWxhdGlufGxvd2VyLXJvbWFufGxvd2VyY2FzZXxsci10YnxsdHJ8bWVkaXVtfG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJlc2l6ZXxuZXdzcGFwZXJ8bm8tZHJvcHxuby1yZXBlYXR8bnctcmVzaXplfG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxvYmxpcXVlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBvaW50ZXJ8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJpZ2h0fHJpZGdlfHJvdy1yZXNpemV8cnRsfHMtcmVzaXplfHNjcm9sbHxzZS1yZXNpemV8c2VwYXJhdGV8c21hbGwtY2Fwc3xzb2xpZHxzcXVhcmV8c3RhdGljfHN0cmljdHxzdXBlcnxzdy1yZXNpemV8dGFibGUtZm9vdGVyLWdyb3VwfHRhYmxlLWhlYWRlci1ncm91cHx0Yi1ybHx0ZXh0LWJvdHRvbXx0ZXh0LXRvcHx0ZXh0fHRoaWNrfHRoaW58dG9wfHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1cHBlci1yb21hbnx1cHBlcmNhc2V8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6ZXJvIi5zcGxpdCgifCIpKSxkPWUuYXJyYXlUb01hcCgiYXF1YXxibGFja3xibHVlfGZ1Y2hzaWF8Z3JheXxncmVlbnxsaW1lfG1hcm9vbnxuYXZ5fG9saXZlfG9yYW5nZXxwdXJwbGV8cmVkfHNpbHZlcnx0ZWFsfHdoaXRlfHllbGxvdyIuc3BsaXQoInwiKSksZj0iXFwtPyg/Oig/OlswLTldKyl8KD86WzAtOV0qXFwuWzAtOV0rKSkiLGc9W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoicnVsZXNldF9jb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDpmKyIoPzplbXxleHxweHxjbXxtbXxpbnxwdHxwY3xkZWd8cmFkfGdyYWR8bXN8c3xoenxraHp8JSkifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIjW2EtZjAtOV17Nn0ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIjW2EtZjAtOV17M30ifSx7dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC50eXBlIjpiLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuZnVuY3Rpb24iOmMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5jb25zdGFudCI6ZC5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmNvbnN0YW50LmNvbG9yIjoidGV4dCJ9LHJlZ2V4OiJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiJ9XSxoPWUuY29weUFycmF5KGcpO2gudW5zaGlmdCh7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IlxcfSIsbmV4dDoic3RhcnQifSk7dmFyIGk9ZS5jb3B5QXJyYXkoZyk7aS51bnNoaWZ0KHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiXFx9IixuZXh0OiJtZWRpYSJ9KTt2YXIgaj1be3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0saz1lLmNvcHlBcnJheShqKTtrLnVuc2hpZnQoe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9KTt2YXIgbD1lLmNvcHlBcnJheShqKTtsLnVuc2hpZnQoe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJtZWRpYSJ9KTt2YXIgbT1lLmNvcHlBcnJheShqKTttLnVuc2hpZnQoe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJydWxlc2V0In0pLHRoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJcXHsiLG5leHQ6InJ1bGVzZXQifSx7dG9rZW46InN0cmluZyIscmVnZXg6IkAuKj97IixuZXh0OiJtZWRpYSJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IiNbYS16MC05LV9dKyJ9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiJcXC5bYS16MC05LV9dKyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiOlthLXowLTktX10rIn0se3Rva2VuOiJjb25zdGFudCIscmVnZXg6IlthLXowLTktX10rIn1dLG1lZGlhOlt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6Im1lZGlhX2NvbW1lbnQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IlxceyIsbmV4dDoibWVkaWFfcnVsZXNldCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFx9IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IiNbYS16MC05LV9dKyJ9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiJcXC5bYS16MC05LV9dKyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiOlthLXowLTktX10rIn0se3Rva2VuOiJjb25zdGFudCIscmVnZXg6IlthLXowLTktX10rIn1dLGNvbW1lbnQ6ayxydWxlc2V0OmgscnVsZXNldF9jb21tZW50Om0sbWVkaWFfcnVsZXNldDppLG1lZGlhX2NvbW1lbnQ6bH19O2QuaW5oZXJpdHMoZyxmKSxiLkNzc0hpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfdXRpbCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxmPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3htbF91dGlsIiksaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjwoPz1zKnNjcmlwdFxcYikiLG5leHQ6InNjcmlwdCJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8KD89cypzdHlsZVxcYikiLG5leHQ6ImNzcyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvPyIsbmV4dDoidGFnIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IltePF0rIn1dLGNkYXRhOlt7dG9rZW46InRleHQiLHJlZ2V4OiJcXF1cXF0+IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46InRleHQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj8tLT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LGcudGFnKHRoaXMuJHJ1bGVzLCJ0YWciLCJzdGFydCIpLGcudGFnKHRoaXMuJHJ1bGVzLCJjc3MiLCJjc3Mtc3RhcnQiKSxnLnRhZyh0aGlzLiRydWxlcywic2NyaXB0IiwianMtc3RhcnQiKSx0aGlzLmVtYmVkUnVsZXMoZiwianMtIixbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiooPz08XFwvc2NyaXB0PikiLG5leHQ6InRhZyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvKD89c2NyaXB0KSIsbmV4dDoidGFnIn1dKSx0aGlzLmVtYmVkUnVsZXMoZSwiY3NzLSIsW3t0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvKD89c3R5bGUpIixuZXh0OiJ0YWcifV0pfTtkLmluaGVyaXRzKGksaCksYi5IdG1sSGlnaGxpZ2h0UnVsZXM9aX0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi9taXhlZCIpLkZvbGRNb2RlLGY9YSgiLi94bWwiKS5Gb2xkTW9kZSxnPWEoIi4vY3N0eWxlIikuRm9sZE1vZGUsaD1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7ZS5jYWxsKHRoaXMsbmV3IGYoe2FyZWE6MSxiYXNlOjEsYnI6MSxjb2w6MSxjb21tYW5kOjEsZW1iZWQ6MSxocjoxLGltZzoxLGlucHV0OjEsa2V5Z2VuOjEsbGluazoxLG1ldGE6MSxwYXJhbToxLHNvdXJjZToxLHRyYWNrOjEsd2JyOjEsbGk6MSxkdDoxLGRkOjEscDoxLHJ0OjEscnA6MSxvcHRncm91cDoxLG9wdGlvbjoxLGNvbGdyb3VwOjEsdGQ6MSx0aDoxfSkseyJqcy0iOm5ldyBnLCJjc3MtIjpuZXcgZ30pfTtkLmluaGVyaXRzKGgsZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGY9Yi5Gb2xkTW9kZT1mdW5jdGlvbihhLGIpe3RoaXMuZGVmYXVsdE1vZGU9YSx0aGlzLnN1Yk1vZGVzPWJ9O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuJGdldE1vZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIHRoaXMuc3ViTW9kZXMpaWYoYS5pbmRleE9mKGIpPT09MClyZXR1cm4gdGhpcy5zdWJNb2Rlc1tiXTtyZXR1cm4gbnVsbH0sdGhpcy4kdHJ5TW9kZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLiRnZXRNb2RlKGEpO3JldHVybiBlP2UuZ2V0Rm9sZFdpZGdldChiLGMsZCk6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJHRyeU1vZGUoYS5nZXRTdGF0ZShjLTEpLGEsYixjKXx8dGhpcy4kdHJ5TW9kZShhLmdldFN0YXRlKGMpLGEsYixjKXx8dGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KGEsYixjKX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldE1vZGUoYS5nZXRTdGF0ZShjLTEpKTtpZighZHx8IWQuZ2V0Rm9sZFdpZGdldChhLGIsYykpZD10aGlzLiRnZXRNb2RlKGEuZ2V0U3RhdGUoYykpO2lmKCFkfHwhZC5nZXRGb2xkV2lkZ2V0KGEsYixjKSlkPXRoaXMuZGVmYXVsdE1vZGU7cmV0dXJuIGQuZ2V0Rm9sZFdpZGdldFJhbmdlKGEsYixjKX19LmNhbGwoZi5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9tYXJrZG93bl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGooYSxiKXtyZXR1cm57dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiJeYGBgIithKyJcXHMqJCIsbmV4dDpiKyJzdGFydCJ9fSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9YSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyxnPWEoIi4veG1sX2hpZ2hsaWdodF9ydWxlcyIpLlhtbEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlcyxpPWEoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzLGs9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiZW1wdHlfbGluZSIscmVnZXg6Il4kIn0se3Rva2VuOiJzdXBwb3J0LmZ1bmN0aW9uIixyZWdleDoiKGArKShbXlxccl0qP1teYF0pKFxcMSkifSx7dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiJeWyBdezR9LisifSx7dG9rZW46Im1hcmt1cC5oZWFkaW5nLjEiLHJlZ2V4OiJePSsoPz1cXHMqJCkifSx7dG9rZW46Im1hcmt1cC5oZWFkaW5nLjEiLHJlZ2V4OiJeXFwtKyg/PVxccyokKSJ9LHt0b2tlbjpmdW5jdGlvbihhKXtyZXR1cm4ibWFya3VwLmhlYWRpbmcuIithLmxlbmd0aH0scmVnZXg6Il4jezEsNn0ifSxqKCJqYXZhc2NyaXB0IiwianMtIiksaigieG1sIiwieG1sLSIpLGooImh0bWwiLCJodG1sLSIpLGooImNzcyIsImNzcy0iKSx7dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiJeYGBgW2EtekEtWl0rXFxzKiQiLG5leHQ6ImdpdGh1YmJsb2NrIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJePlsgXS4rJCIsbmV4dDoiYmxvY2txdW90ZSJ9LHt0b2tlbjpbInRleHQiLCJjb25zdGFudCIsInRleHQiLCJ1cmwiLCJzdHJpbmciLCJ0ZXh0Il0scmVnZXg6J14oWyBdezAsM31cXFspKFteXFxdXSspKFxcXTpcXHMqKShbXiBdKykoXFxzKig/OlsiXVteIl0rWyJdKT9cXHMqKSQnfSx7dG9rZW46WyJ0ZXh0Iiwic3RyaW5nIiwidGV4dCIsImNvbnN0YW50IiwidGV4dCJdLHJlZ2V4OiIoXFxbKSgoPzpbW15cXF1dKlxcXXxbXlxcW1xcXV0pKikoXFxdWyBdPyg/OlxcblsgXSopP1xcWykoLio/KShcXF0pIn0se3Rva2VuOlsidGV4dCIsInN0cmluZyIsInRleHQiLCJtYXJrdXAudW5kZXJsaW5lIiwic3RyaW5nIiwidGV4dCJdLHJlZ2V4OicoXFxbKShcXFtbXlxcXV0qXFxdfFteXFxbXFxdXSopKFxcXVxcKFsgXFx0XSopKDw/KD86KD86W15cXChdKj9cXChbXlxcKV0qP1xcKVxcUyo/KXwoPzouKj8pKT4/KSgoPzpbIFx0XSoiKD86Lio/KSJbIFxcdF0qKT8pKFxcKSknfSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiXlsgXXswLDJ9KD86WyBdP1xcKlsgXT8pezMsfVxccyokIn0se3Rva2VuOiJjb25zdGFudCIscmVnZXg6Il5bIF17MCwyfSg/OlsgXT9cXC1bIF0/KXszLH1cXHMqJCJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJeWyBdezAsMn0oPzpbIF0/XFxfWyBdPyl7Myx9XFxzKiQifSx7dG9rZW46Im1hcmt1cC5saXN0IixyZWdleDoiXlxcc3swLDN9KD86WyorLV18XFxkK1xcLilcXHMrIixuZXh0OiJsaXN0YmxvY2sifSx7dG9rZW46InN0cmluZyIscmVnZXg6IihbKl17Mn18W19dezJ9KD89XFxTKSkoW15cXHJdKj9cXFNbKl9dKikoXFwxKSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiKFsqXXxbX10oPz1cXFMpKShbXlxccl0qP1xcU1sqX10qKShcXDEpIn0se3Rva2VuOlsidGV4dCIsInVybCIsInRleHQiXSxyZWdleDoiKDwpKCg/Omh0dHBzP3xmdHB8ZGljdCk6W14nXCI+XFxzXSt8KD86bWFpbHRvOik/Wy0uXFx3XStcXEBbLWEtejAtOV0rKD86XFwuWy1hLXowLTldKykqXFwuW2Etel0rKSg+KSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlteXFwqXyUkYFxcWyM8Pl0rIn1dLGxpc3RibG9jazpbe3Rva2VuOiJlbXB0eV9saW5lIixyZWdleDoiXiQiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJtYXJrdXAubGlzdCIscmVnZXg6Ii4rIn1dLGJsb2NrcXVvdGU6W3t0b2tlbjoiZW1wdHlfbGluZSIscmVnZXg6Il5cXHMqJCIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6Ii4rIn1dLGdpdGh1YmJsb2NrOlt7dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiJeYGBgIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6Ii4rIn1dfSx0aGlzLmVtYmVkUnVsZXMoZiwianMtIixbe3Rva2VuOiJzdXBwb3J0LmZ1bmN0aW9uIixyZWdleDoiXmBgYCIsbmV4dDoic3RhcnQifV0pLHRoaXMuZW1iZWRSdWxlcyhoLCJodG1sLSIsW3t0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6Il5gYGAiLG5leHQ6InN0YXJ0In1dKSx0aGlzLmVtYmVkUnVsZXMoaSwiY3NzLSIsW3t0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6Il5gYGAiLG5leHQ6InN0YXJ0In1dKSx0aGlzLmVtYmVkUnVsZXMoZywieG1sLSIsW3t0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6Il5gYGAiLG5leHQ6InN0YXJ0In1dKX07ZC5pbmhlcml0cyhrLGUpLGIuTWFya2Rvd25IaWdobGlnaHRSdWxlcz1rfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-ocaml-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvb2NhbWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvb2NhbWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vb2NhbWxfaGlnaGxpZ2h0X3J1bGVzIikuT2NhbWxIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaH07ZC5pbmhlcml0cyhqLGUpO3ZhciBrPS8oPzpbKHtbPTpdfFstPV0+fFxiKD86ZWxzZXx0cnl8d2l0aCkpXHMqJC87KChmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZz0hMCxoPS9eXHMqXChcKiguKilcKlwpLztmb3IoZT1jO2U8PWQ7ZSsrKWlmKCFoLnRlc3QoYi5nZXRMaW5lKGUpKSl7Zz0hMTticmVha312YXIgaj1uZXcgaSgwLDAsMCwwKTtmb3IoZT1jO2U8PWQ7ZSsrKWY9Yi5nZXRMaW5lKGUpLGouc3RhcnQucm93PWUsai5lbmQucm93PWUsai5lbmQuY29sdW1uPWYubGVuZ3RoLGIucmVwbGFjZShqLGc/Zi5tYXRjaChoKVsxXToiKCoiK2YrIiopIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSkudG9rZW5zO3JldHVybighZS5sZW5ndGh8fGVbZS5sZW5ndGgtMV0udHlwZSE9PSJjb21tZW50IikmJmE9PT0ic3RhcnQiJiZrLnRlc3QoYikmJihkKz1jKSxkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX19KSkuY2FsbChqLnByb3RvdHlwZSksYi5Nb2RlPWp9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9vY2FtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJhbmR8YXN8YXNzZXJ0fGJlZ2lufGNsYXNzfGNvbnN0cmFpbnR8ZG98ZG9uZXxkb3dudG98ZWxzZXxlbmR8ZXhjZXB0aW9ufGV4dGVybmFsfGZvcnxmdW58ZnVuY3Rpb258ZnVuY3RvcnxpZnxpbnxpbmNsdWRlfGluaGVyaXR8aW5pdGlhbGl6ZXJ8bGF6eXxsZXR8bWF0Y2h8bWV0aG9kfG1vZHVsZXxtdXRhYmxlfG5ld3xvYmplY3R8b2Z8b3Blbnxvcnxwcml2YXRlfHJlY3xzaWd8c3RydWN0fHRoZW58dG98dHJ5fHR5cGV8dmFsfHZpcnR1YWx8d2hlbnx3aGlsZXx3aXRoIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgidHJ1ZXxmYWxzZSIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImFic3xhYnNfYmlnX2ludHxhYnNfZmxvYXR8YWJzX251bXxhYnN0cmFjdF90YWd8YWNjZXB0fGFjY2Vzc3xhY29zfGFkZHxhZGRfYXZhaWxhYmxlX3VuaXRzfGFkZF9iaWdfaW50fGFkZF9idWZmZXJ8YWRkX2NoYW5uZWx8YWRkX2NoYXJ8YWRkX2luaXRpYWxpemVyfGFkZF9pbnRfYmlnX2ludHxhZGRfaW50ZXJmYWNlc3xhZGRfbnVtfGFkZF9zdHJpbmd8YWRkX3N1YnN0aXR1dGV8YWRkX3N1YnN0cmluZ3xhbGFybXxhbGxvY2F0ZWRfYnl0ZXN8YWxsb3dfb25seXxhbGxvd191bnNhZmVfbW9kdWxlc3xhbHdheXN8YXBwZW5kfGFwcG5hbWVfZ2V0fGFwcG5hbWVfc2V0fGFwcHJveF9udW1fZXhwfGFwcHJveF9udW1fZml4fGFyZ3xhcmd2fGFyaXRoX3N0YXR1c3xhcnJheXxhcnJheTFfb2ZfZ2VuYXJyYXl8YXJyYXkyX29mX2dlbmFycmF5fGFycmF5M19vZl9nZW5hcnJheXxhc2lufGFzcnxhc3NvY3xhc3NxfGF0X2V4aXR8YXRhbnxhdGFuMnxhdXRvX3N5bmNocm9uaXplfGJhY2tncm91bmR8YmFzZW5hbWV8YmVnaW5uaW5nX29mX2lucHV0fGJpZ19pbnRfb2ZfaW50fGJpZ19pbnRfb2ZfbnVtfGJpZ19pbnRfb2Zfc3RyaW5nfGJpbmR8YmluZF9jbGFzc3xiaW5kX3RhZ3xiaXRzfGJpdHNfb2ZfZmxvYXR8YmxhY2t8YmxpdHxibGl0X2ltYWdlfGJsdWV8Ym9vbHxib29sX29mX3N0cmluZ3xib3VuZGVkX2Z1bGxfc3BsaXR8Ym91bmRlZF9zcGxpdHxib3VuZGVkX3NwbGl0X2RlbGltfGJwcmludGZ8YnJlYWt8YnJvYWRjYXN0fGJzY2FuZnxidXR0b25fZG93bnxjX2xheW91dHxjYXBpdGFsaXplfGNhcmRpbmFsfGNhcmRpbmFsfGNhdGNofGNhdGNoX2JyZWFrfGNlaWx8Y2VpbGluZ19udW18Y2hhbm5lbHxjaGFyfGNoYXJfb2ZfaW50fGNoZGlyfGNoZWNrfGNoZWNrX3N1ZmZpeHxjaG1vZHxjaG9vc2V8Y2hvcF9leHRlbnNpb258Y2hvcF9zdWZmaXh8Y2hvd258Y2hvd258Y2hyfGNocm9vdHxjbGFzc2lmeV9mbG9hdHxjbGVhcnxjbGVhcl9hdmFpbGFibGVfdW5pdHN8Y2xlYXJfY2xvc2Vfb25fZXhlY3xjbGVhcl9ncmFwaHxjbGVhcl9ub25ibG9ja3xjbGVhcl9wYXJzZXJ8Y2xvc2V8Y2xvc2V8Y2xvc2VUa3xjbG9zZV9ib3h8Y2xvc2VfZ3JhcGh8Y2xvc2VfaW58Y2xvc2VfaW5fbm9lcnJ8Y2xvc2Vfb3V0fGNsb3NlX291dF9ub2VycnxjbG9zZV9wcm9jZXNzfGNsb3NlX3Byb2Nlc3N8Y2xvc2VfcHJvY2Vzc19mdWxsfGNsb3NlX3Byb2Nlc3NfaW58Y2xvc2VfcHJvY2Vzc19vdXR8Y2xvc2Vfc3Vid2luZG93fGNsb3NlX3RhZ3xjbG9zZV90Ym94fGNsb3NlZGlyfGNsb3NlZGlyfGNsb3N1cmVfdGFnfGNvZGV8Y29tYmluZXxjb21iaW5lfGNvbWJpbmV8Y29tbWFuZHxjb21wYWN0fGNvbXBhcmV8Y29tcGFyZV9iaWdfaW50fGNvbXBhcmVfbnVtfGNvbXBsZXgzMnxjb21wbGV4NjR8Y29uY2F0fGNvbmp8Y29ubmVjdHxjb250YWluc3xjb250YWluc19mcm9tfGNvbnRlbnRzfGNvcHl8Y29zfGNvc2h8Y291bnR8Y291bnR8Y291bnRlcnN8Y3JlYXRlfGNyZWF0ZV9hbGFybXxjcmVhdGVfaW1hZ2V8Y3JlYXRlX21hdHJpeHxjcmVhdGVfbWF0cml4fGNyZWF0ZV9tYXRyaXh8Y3JlYXRlX29iamVjdHxjcmVhdGVfb2JqZWN0X2FuZF9ydW5faW5pdGlhbGl6ZXJzfGNyZWF0ZV9vYmplY3Rfb3B0fGNyZWF0ZV9wcm9jZXNzfGNyZWF0ZV9wcm9jZXNzfGNyZWF0ZV9wcm9jZXNzX2VudnxjcmVhdGVfcHJvY2Vzc19lbnZ8Y3JlYXRlX3RhYmxlfGN1cnJlbnR8Y3VycmVudF9kaXJfbmFtZXxjdXJyZW50X3BvaW50fGN1cnJlbnRfeHxjdXJyZW50X3l8Y3VydmV0b3xjdXN0b21fdGFnfGN5YW58ZGF0YV9zaXplfGRlY3J8ZGVjcl9udW18ZGVmYXVsdF9hdmFpbGFibGVfdW5pdHN8ZGVsYXl8ZGVsZXRlX2FsYXJtfGRlc2NyX29mX2luX2NoYW5uZWx8ZGVzY3Jfb2Zfb3V0X2NoYW5uZWx8ZGVzdHJveXxkaWZmfGRpbXxkaW0xfGRpbTJ8ZGltM3xkaW1zfGRpcm5hbWV8ZGlzcGxheV9tb2RlfGRpdnxkaXZfYmlnX2ludHxkaXZfbnVtfGRvdWJsZV9hcnJheV90YWd8ZG91YmxlX3RhZ3xkcmF3X2FyY3xkcmF3X2NoYXJ8ZHJhd19jaXJjbGV8ZHJhd19lbGxpcHNlfGRyYXdfaW1hZ2V8ZHJhd19wb2x5fGRyYXdfcG9seV9saW5lfGRyYXdfcmVjdHxkcmF3X3NlZ21lbnRzfGRyYXdfc3RyaW5nfGR1bW15X3Bvc3xkdW1teV90YWJsZXxkdW1wX2ltYWdlfGR1cHxkdXAyfGVsZW1lbnRzfGVtcHR5fGVuZF9vZl9pbnB1dHxlbnZpcm9ubWVudHxlcHJpbnRmfGVwc2lsb25fZmxvYXR8ZXFfYmlnX2ludHxlcV9udW18ZXF1YWx8ZXJyX2Zvcm1hdHRlcnxlcnJvcl9tZXNzYWdlfGVzY2FwZWR8ZXN0YWJsaXNoX3NlcnZlcnxleGVjdXRhYmxlX25hbWV8ZXhlY3Z8ZXhlY3ZlfGV4ZWN2cHxleGVjdnBlfGV4aXN0c3xleGlzdHMyfGV4aXR8ZXhwfGZhaWx3aXRofGZhc3Rfc29ydHxmY2htb2R8ZmNob3dufGZpZWxkfGZpbGV8ZmlsZV9leGlzdHN8ZmlsbHxmaWxsX2FyY3xmaWxsX2NpcmNsZXxmaWxsX2VsbGlwc2V8ZmlsbF9wb2x5fGZpbGxfcmVjdHxmaWx0ZXJ8ZmluYWxfdGFnfGZpbmFsaXNlfGZpbmR8ZmluZF9hbGx8Zmlyc3RfY2hhcnN8Zmlyc3RrZXl8ZmxhdHRlbnxmbG9hdHxmbG9hdDMyfGZsb2F0NjR8ZmxvYXRfb2ZfYmlnX2ludHxmbG9hdF9vZl9iaXRzfGZsb2F0X29mX2ludHxmbG9hdF9vZl9udW18ZmxvYXRfb2Zfc3RyaW5nfGZsb29yfGZsb29yX251bXxmbHVzaHxmbHVzaF9hbGx8Zmx1c2hfaW5wdXR8Zmx1c2hfc3RyX2Zvcm1hdHRlcnxmb2xkfGZvbGRfbGVmdHxmb2xkX2xlZnQyfGZvbGRfcmlnaHR8Zm9sZF9yaWdodDJ8Zm9yX2FsbHxmb3JfYWxsMnxmb3JjZXxmb3JjZV9uZXdsaW5lfGZvcmNlX3ZhbHxmb3JlZ3JvdW5kfGZvcmt8Zm9ybWF0X29mX3N0cmluZ3xmb3JtYXR0ZXJfb2ZfYnVmZmVyfGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbHxmb3J0cmFuX2xheW91dHxmb3J3YXJkX3RhZ3xmcHJpbnRmfGZyZXhwfGZyb218ZnJvbV9jaGFubmVsfGZyb21fZmlsZXxmcm9tX2ZpbGVfYmlufGZyb21fZnVuY3Rpb258ZnJvbV9zdHJpbmd8ZnNjYW5mfGZzdHxmc3RhdHxmdHJ1bmNhdGV8ZnVsbF9pbml0fGZ1bGxfbWFqb3J8ZnVsbF9zcGxpdHxnY2RfYmlnX2ludHxnZV9iaWdfaW50fGdlX251bXxnZW5hcnJheV9vZl9hcnJheTF8Z2VuYXJyYXlfb2ZfYXJyYXkyfGdlbmFycmF5X29mX2FycmF5M3xnZXR8Z2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9uc3xnZXRfYXBwcm94X3ByaW50aW5nfGdldF9jb3B5fGdldF9lbGxpcHNpc190ZXh0fGdldF9lcnJvcl93aGVuX251bGxfZGVub21pbmF0b3J8Z2V0X2Zsb2F0aW5nX3ByZWNpc2lvbnxnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8Z2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zfGdldF9pbWFnZXxnZXRfbWFyZ2lufGdldF9tYXJrX3RhZ3N8Z2V0X21heF9ib3hlc3xnZXRfbWF4X2luZGVudHxnZXRfbWV0aG9kfGdldF9tZXRob2RfbGFiZWx8Z2V0X25vcm1hbGl6ZV9yYXRpb3xnZXRfbm9ybWFsaXplX3JhdGlvX3doZW5fcHJpbnRpbmd8Z2V0X3ByaW50X3RhZ3N8Z2V0X3N0YXRlfGdldF92YXJpYWJsZXxnZXRjd2R8Z2V0ZWdpZHxnZXRlZ2lkfGdldGVudnxnZXRlbnZ8Z2V0ZW52fGdldGV1aWR8Z2V0ZXVpZHxnZXRnaWR8Z2V0Z2lkfGdldGdyZ2lkfGdldGdyZ2lkfGdldGdybmFtfGdldGdybmFtfGdldGdyb3Vwc3xnZXRob3N0YnlhZGRyfGdldGhvc3RieW5hbWV8Z2V0aG9zdG5hbWV8Z2V0aXRpbWVyfGdldGxvZ2lufGdldHBlZXJuYW1lfGdldHBpZHxnZXRwcGlkfGdldHByb3RvYnluYW1lfGdldHByb3RvYnludW1iZXJ8Z2V0cHduYW18Z2V0cHd1aWR8Z2V0c2VydmJ5bmFtZXxnZXRzZXJ2Ynlwb3J0fGdldHNvY2tuYW1lfGdldHNvY2tvcHR8Z2V0c29ja29wdF9mbG9hdHxnZXRzb2Nrb3B0X2ludHxnZXRzb2Nrb3B0X29wdGludHxnZXR0aW1lb2ZkYXl8Z2V0dWlkfGdsb2JhbF9yZXBsYWNlfGdsb2JhbF9zdWJzdGl0dXRlfGdtdGltZXxncmVlbnxncmlkfGdyb3VwX2JlZ2lubmluZ3xncm91cF9lbmR8Z3RfYmlnX2ludHxndF9udW18Z3VhcmR8aGFuZGxlX3VuaXhfZXJyb3J8aGFzaHxoYXNoX3BhcmFtfGhkfGhlYWRlcl9zaXplfGl8aWR8aWdub3JlfGluX2NoYW5uZWxfbGVuZ3RofGluX2NoYW5uZWxfb2ZfZGVzY3J8aW5jcnxpbmNyX251bXxpbmRleHxpbmRleF9mcm9tfGluZXRfYWRkcl9hbnl8aW5ldF9hZGRyX29mX3N0cmluZ3xpbmZpbml0eXxpbmZpeF90YWd8aW5pdHxpbml0X2NsYXNzfGlucHV0fGlucHV0X2JpbmFyeV9pbnR8aW5wdXRfYnl0ZXxpbnB1dF9jaGFyfGlucHV0X2xpbmV8aW5wdXRfdmFsdWV8aW50fGludDE2X3NpZ25lZHxpbnQxNl91bnNpZ25lZHxpbnQzMnxpbnQ2NHxpbnQ4X3NpZ25lZHxpbnQ4X3Vuc2lnbmVkfGludF9vZl9iaWdfaW50fGludF9vZl9jaGFyfGludF9vZl9mbG9hdHxpbnRfb2ZfbnVtfGludF9vZl9zdHJpbmd8aW50ZWdlcl9udW18aW50ZXJ8aW50ZXJhY3RpdmV8aW52fGludmFsaWRfYXJnfGlzX2Jsb2NrfGlzX2VtcHR5fGlzX2ltcGxpY2l0fGlzX2ludHxpc19pbnRfYmlnX2ludHxpc19pbnRlZ2VyX251bXxpc19yZWxhdGl2ZXxpdGVyfGl0ZXIyfGl0ZXJpfGpvaW58anVua3xrZXlfcHJlc3NlZHxraWxsfGtpbmR8a3ByaW50Znxrc2NhbmZ8bGFuZHxsYXN0X2NoYXJzfGxheW91dHxsYXp5X2Zyb21fZnVufGxhenlfZnJvbV92YWx8bGF6eV9pc192YWx8bGF6eV90YWd8bGRleHB8bGVfYmlnX2ludHxsZV9udW18bGVuZ3RofGxleGVtZXxsZXhlbWVfY2hhcnxsZXhlbWVfZW5kfGxleGVtZV9lbmRfcHxsZXhlbWVfc3RhcnR8bGV4ZW1lX3N0YXJ0X3B8bGluZXRvfGxpbmt8bGlzdHxsaXN0ZW58bG5vdHxsb2FkZmlsZXxsb2FkZmlsZV9wcml2YXRlfGxvY2FsdGltZXxsb2NrfGxvY2tmfGxvZ3xsb2cxMHxsb2dhbmR8bG9nbm90fGxvZ29yfGxvZ3hvcnxsb3J8bG93ZXJfd2luZG93fGxvd2VyY2FzZXxsc2Vla3xsc2x8bHNyfGxzdGF0fGx0X2JpZ19pbnR8bHRfbnVtfGx4b3J8bWFnZW50YXxtYWdpY3xtYWluTG9vcHxtYWpvcnxtYWpvcl9zbGljZXxtYWtlfG1ha2VfZm9ybWF0dGVyfG1ha2VfaW1hZ2V8bWFrZV9sZXhlcnxtYWtlX21hdHJpeHxtYWtlX3NlbGZfaW5pdHxtYXB8bWFwMnxtYXBfZmlsZXxtYXBpfG1hcnNoYWx8bWF0Y2hfYmVnaW5uaW5nfG1hdGNoX2VuZHxtYXRjaGVkX2dyb3VwfG1hdGNoZWRfc3RyaW5nfG1heHxtYXhfYXJyYXlfbGVuZ3RofG1heF9iaWdfaW50fG1heF9lbHR8bWF4X2Zsb2F0fG1heF9pbnR8bWF4X251bXxtYXhfc3RyaW5nX2xlbmd0aHxtZW18bWVtX2Fzc29jfG1lbV9hc3NxfG1lbXF8bWVyZ2V8bWlufG1pbl9iaWdfaW50fG1pbl9lbHR8bWluX2Zsb2F0fG1pbl9pbnR8bWluX251bXxtaW5vcnxtaW51c19iaWdfaW50fG1pbnVzX251bXxtaW51c19vbmV8bWtkaXJ8bWtmaWZvfG1rdGltZXxtb2R8bW9kX2JpZ19pbnR8bW9kX2Zsb2F0fG1vZF9udW18bW9kZnxtb3VzZV9wb3N8bW92ZXRvfG11bHxtdWx0X2JpZ19pbnR8bXVsdF9pbnRfYmlnX2ludHxtdWx0X251bXxuYW58bmFycm93fG5hdF9vZl9udW18bmF0aXZlaW50fG5lZ3xuZWdfaW5maW5pdHl8bmV3X2Jsb2NrfG5ld19jaGFubmVsfG5ld19tZXRob2R8bmV3X3ZhcmlhYmxlfG5leHR8bmV4dGtleXxuaWNlfG5pY2V8bm9fc2Nhbl90YWd8bm9ybXxub3JtMnxub3R8bnBlZWt8bnRofG50aF9kaW18bnVtX2RpZ2l0c19iaWdfaW50fG51bV9kaW1zfG51bV9vZl9iaWdfaW50fG51bV9vZl9pbnR8bnVtX29mX25hdHxudW1fb2ZfcmF0aW98bnVtX29mX3N0cmluZ3xPfG9ianxvYmplY3RfdGFnfG9jYW1sX3ZlcnNpb258b2ZfYXJyYXl8b2ZfY2hhbm5lbHxvZl9mbG9hdHxvZl9pbnR8b2ZfaW50MzJ8b2ZfbGlzdHxvZl9uYXRpdmVpbnR8b2Zfc3RyaW5nfG9uZXxvcGVuVGt8b3Blbl9ib3h8b3Blbl9jb25uZWN0aW9ufG9wZW5fZ3JhcGh8b3Blbl9oYm94fG9wZW5faG92Ym94fG9wZW5faHZib3h8b3Blbl9pbnxvcGVuX2luX2JpbnxvcGVuX2luX2dlbnxvcGVuX291dHxvcGVuX291dF9iaW58b3Blbl9vdXRfZ2VufG9wZW5fcHJvY2Vzc3xvcGVuX3Byb2Nlc3NfZnVsbHxvcGVuX3Byb2Nlc3NfaW58b3Blbl9wcm9jZXNzX291dHxvcGVuX3N1YndpbmRvd3xvcGVuX3RhZ3xvcGVuX3Rib3h8b3Blbl90ZW1wX2ZpbGV8b3Blbl92Ym94fG9wZW5kYm18b3BlbmRpcnxvcGVuZmlsZXxvcnxvc190eXBlfG91dF9jaGFubmVsX2xlbmd0aHxvdXRfY2hhbm5lbF9vZl9kZXNjcnxvdXRwdXR8b3V0cHV0X2JpbmFyeV9pbnR8b3V0cHV0X2J1ZmZlcnxvdXRwdXRfYnl0ZXxvdXRwdXRfY2hhcnxvdXRwdXRfc3RyaW5nfG91dHB1dF92YWx1ZXxvdmVyX21heF9ib3hlc3xwYWNrfHBhcmFtc3xwYXJlbnRfZGlyX25hbWV8cGFyc2V8cGFyc2VfYXJndnxwYXJ0aXRpb258cGF1c2V8cGVla3xwaXBlfHBpeGVsc3xwbGFjZXxwbG90fHBsb3RzfHBvaW50X2NvbG9yfHBvbGFyfHBvbGx8cG9wfHBvc19pbnxwb3Nfb3V0fHBvd3xwb3dlcl9iaWdfaW50X3Bvc2l0aXZlX2JpZ19pbnR8cG93ZXJfYmlnX2ludF9wb3NpdGl2ZV9pbnR8cG93ZXJfaW50X3Bvc2l0aXZlX2JpZ19pbnR8cG93ZXJfaW50X3Bvc2l0aXZlX2ludHxwb3dlcl9udW18cHBfY2xvc2VfYm94fHBwX2Nsb3NlX3RhZ3xwcF9jbG9zZV90Ym94fHBwX2ZvcmNlX25ld2xpbmV8cHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9uc3xwcF9nZXRfZWxsaXBzaXNfdGV4dHxwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8cHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zfHBwX2dldF9tYXJnaW58cHBfZ2V0X21hcmtfdGFnc3xwcF9nZXRfbWF4X2JveGVzfHBwX2dldF9tYXhfaW5kZW50fHBwX2dldF9wcmludF90YWdzfHBwX29wZW5fYm94fHBwX29wZW5faGJveHxwcF9vcGVuX2hvdmJveHxwcF9vcGVuX2h2Ym94fHBwX29wZW5fdGFnfHBwX29wZW5fdGJveHxwcF9vcGVuX3Zib3h8cHBfb3Zlcl9tYXhfYm94ZXN8cHBfcHJpbnRfYXN8cHBfcHJpbnRfYm9vbHxwcF9wcmludF9icmVha3xwcF9wcmludF9jaGFyfHBwX3ByaW50X2N1dHxwcF9wcmludF9mbG9hdHxwcF9wcmludF9mbHVzaHxwcF9wcmludF9pZl9uZXdsaW5lfHBwX3ByaW50X2ludHxwcF9wcmludF9uZXdsaW5lfHBwX3ByaW50X3NwYWNlfHBwX3ByaW50X3N0cmluZ3xwcF9wcmludF90YWJ8cHBfcHJpbnRfdGJyZWFrfHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8cHBfc2V0X2VsbGlwc2lzX3RleHR8cHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbHxwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8cHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zfHBwX3NldF9tYXJnaW58cHBfc2V0X21hcmtfdGFnc3xwcF9zZXRfbWF4X2JveGVzfHBwX3NldF9tYXhfaW5kZW50fHBwX3NldF9wcmludF90YWdzfHBwX3NldF90YWJ8cHBfc2V0X3RhZ3N8cHJlZHxwcmVkX2JpZ19pbnR8cHJlZF9udW18cHJlcnJfY2hhcnxwcmVycl9lbmRsaW5lfHByZXJyX2Zsb2F0fHByZXJyX2ludHxwcmVycl9uZXdsaW5lfHByZXJyX3N0cmluZ3xwcmludHxwcmludF9hc3xwcmludF9ib29sfHByaW50X2JyZWFrfHByaW50X2NoYXJ8cHJpbnRfY3V0fHByaW50X2VuZGxpbmV8cHJpbnRfZmxvYXR8cHJpbnRfZmx1c2h8cHJpbnRfaWZfbmV3bGluZXxwcmludF9pbnR8cHJpbnRfbmV3bGluZXxwcmludF9zcGFjZXxwcmludF9zdGF0fHByaW50X3N0cmluZ3xwcmludF90YWJ8cHJpbnRfdGJyZWFrfHByaW50Znxwcm9oaWJpdHxwdWJsaWNfbWV0aG9kX2xhYmVsfHB1c2h8cHV0ZW52fHF1b19udW18cXVvbW9kX2JpZ19pbnR8cXVvdGV8cmFpc2V8cmFpc2Vfd2luZG93fHJhdGlvX29mX251bXxyY29udGFpbnNfZnJvbXxyZWFkfHJlYWRfZmxvYXR8cmVhZF9pbnR8cmVhZF9rZXl8cmVhZF9saW5lfHJlYWRkaXJ8cmVhZGRpcnxyZWFkbGlua3xyZWFsbHlfaW5wdXR8cmVjZWl2ZXxyZWN2fHJlY3Zmcm9tfHJlZHxyZWZ8cmVnZXhwfHJlZ2V4cF9jYXNlX2ZvbGR8cmVnZXhwX3N0cmluZ3xyZWdleHBfc3RyaW5nX2Nhc2VfZm9sZHxyZWdpc3RlcnxyZWdpc3Rlcl9leGNlcHRpb258cmVtfHJlbWVtYmVyX21vZGV8cmVtb3ZlfHJlbW92ZV9hc3NvY3xyZW1vdmVfYXNzcXxyZW5hbWV8cmVwbGFjZXxyZXBsYWNlX2ZpcnN0fHJlcGxhY2VfbWF0Y2hlZHxyZXByfHJlc2V0fHJlc2hhcGV8cmVzaGFwZV8xfHJlc2hhcGVfMnxyZXNoYXBlXzN8cmV2fHJldl9hcHBlbmR8cmV2X21hcHxyZXZfbWFwMnxyZXdpbmRkaXJ8cmdifHJoc19lbmR8cmhzX2VuZF9wb3N8cmhzX3N0YXJ0fHJoc19zdGFydF9wb3N8cmluZGV4fHJpbmRleF9mcm9tfHJsaW5ldG98cm1kaXJ8cm1vdmV0b3xyb3VuZF9udW18cnVuX2luaXRpYWxpemVyc3xydW5faW5pdGlhbGl6ZXJzX29wdHxzY2FuZnxzZWFyY2hfYmFja3dhcmR8c2VhcmNoX2ZvcndhcmR8c2Vla19pbnxzZWVrX291dHxzZWxlY3R8c2VsZnxzZWxmX2luaXR8c2VuZHxzZW5kdG98c2V0fHNldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8c2V0X2FwcHJveF9wcmludGluZ3xzZXRfYmluYXJ5X21vZGVfaW58c2V0X2JpbmFyeV9tb2RlX291dHxzZXRfY2xvc2Vfb25fZXhlY3xzZXRfY2xvc2Vfb25fZXhlY3xzZXRfY29sb3J8c2V0X2VsbGlwc2lzX3RleHR8c2V0X2Vycm9yX3doZW5fbnVsbF9kZW5vbWluYXRvcnxzZXRfZmllbGR8c2V0X2Zsb2F0aW5nX3ByZWNpc2lvbnxzZXRfZm9udHxzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsfHNldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9uc3xzZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnN8c2V0X2xpbmVfd2lkdGh8c2V0X21hcmdpbnxzZXRfbWFya190YWdzfHNldF9tYXhfYm94ZXN8c2V0X21heF9pbmRlbnR8c2V0X21ldGhvZHxzZXRfbm9uYmxvY2t8c2V0X25vbmJsb2NrfHNldF9ub3JtYWxpemVfcmF0aW98c2V0X25vcm1hbGl6ZV9yYXRpb193aGVuX3ByaW50aW5nfHNldF9wcmludF90YWdzfHNldF9zaWduYWx8c2V0X3N0YXRlfHNldF90YWJ8c2V0X3RhZ3xzZXRfdGFnc3xzZXRfdGV4dF9zaXplfHNldF93aW5kb3dfdGl0bGV8c2V0Z2lkfHNldGdpZHxzZXRpdGltZXJ8c2V0aXRpbWVyfHNldHNpZHxzZXRzaWR8c2V0c29ja29wdHxzZXRzb2Nrb3B0fHNldHNvY2tvcHRfZmxvYXR8c2V0c29ja29wdF9mbG9hdHxzZXRzb2Nrb3B0X2ludHxzZXRzb2Nrb3B0X2ludHxzZXRzb2Nrb3B0X29wdGludHxzZXRzb2Nrb3B0X29wdGludHxzZXR1aWR8c2V0dWlkfHNoaWZ0X2xlZnR8c2hpZnRfbGVmdHxzaGlmdF9sZWZ0fHNoaWZ0X3JpZ2h0fHNoaWZ0X3JpZ2h0fHNoaWZ0X3JpZ2h0fHNoaWZ0X3JpZ2h0X2xvZ2ljYWx8c2hpZnRfcmlnaHRfbG9naWNhbHxzaGlmdF9yaWdodF9sb2dpY2FsfHNob3dfYnVja2V0c3xzaHV0ZG93bnxzaHV0ZG93bnxzaHV0ZG93bl9jb25uZWN0aW9ufHNodXRkb3duX2Nvbm5lY3Rpb258c2lnYWJydHxzaWdhbHJtfHNpZ2NobGR8c2lnY29udHxzaWdmcGV8c2lnaHVwfHNpZ2lsbHxzaWdpbnR8c2lna2lsbHxzaWduX2JpZ19pbnR8c2lnbl9udW18c2lnbmFsfHNpZ25hbHxzaWdwZW5kaW5nfHNpZ3BlbmRpbmd8c2lncGlwZXxzaWdwcm9jbWFza3xzaWdwcm9jbWFza3xzaWdwcm9mfHNpZ3F1aXR8c2lnc2VndnxzaWdzdG9wfHNpZ3N1c3BlbmR8c2lnc3VzcGVuZHxzaWd0ZXJtfHNpZ3RzdHB8c2lndHRpbnxzaWd0dG91fHNpZ3VzcjF8c2lndXNyMnxzaWd2dGFscm18c2lufHNpbmdsZXRvbnxzaW5ofHNpemV8c2l6ZXxzaXplX3h8c2l6ZV95fHNsZWVwfHNsZWVwfHNsZWVwfHNsaWNlX2xlZnR8c2xpY2VfbGVmdHxzbGljZV9sZWZ0XzF8c2xpY2VfbGVmdF8yfHNsaWNlX3JpZ2h0fHNsaWNlX3JpZ2h0fHNsaWNlX3JpZ2h0XzF8c2xpY2VfcmlnaHRfMnxzbmR8c29ja2V0fHNvY2tldHxzb2NrZXR8c29ja2V0cGFpcnxzb2NrZXRwYWlyfHNvcnR8c291bmR8c3BsaXR8c3BsaXRfZGVsaW18c3ByaW50ZnxzcHJpbnRmfHNxcnR8c3FydHxzcXJ0X2JpZ19pbnR8c3F1YXJlX2JpZ19pbnR8c3F1YXJlX251bXxzc2NhbmZ8c3RhYmxlX3NvcnR8c3RhYmxlX3NvcnR8c3RhYmxlX3NvcnR8c3RhYmxlX3NvcnR8c3RhYmxlX3NvcnR8c3RhYmxlX3NvcnR8c3RhdHxzdGF0fHN0YXR8c3RhdHxzdGF0fHN0YXRzfHN0YXRzfHN0ZF9mb3JtYXR0ZXJ8c3RkYnVmfHN0ZGVycnxzdGRlcnJ8c3RkZXJyfHN0ZGlifHN0ZGlufHN0ZGlufHN0ZGlufHN0ZG91dHxzdGRvdXR8c3Rkb3V0fHN0cl9mb3JtYXR0ZXJ8c3RyaW5nfHN0cmluZ19hZnRlcnxzdHJpbmdfYmVmb3JlfHN0cmluZ19tYXRjaHxzdHJpbmdfb2ZfYmlnX2ludHxzdHJpbmdfb2ZfYm9vbHxzdHJpbmdfb2ZfZmxvYXR8c3RyaW5nX29mX2Zvcm1hdHxzdHJpbmdfb2ZfaW5ldF9hZGRyfHN0cmluZ19vZl9pbmV0X2FkZHJ8c3RyaW5nX29mX2ludHxzdHJpbmdfb2ZfbnVtfHN0cmluZ19wYXJ0aWFsX21hdGNofHN0cmluZ190YWd8c3VifHN1YnxzdWJfYmlnX2ludHxzdWJfbGVmdHxzdWJfbnVtfHN1Yl9yaWdodHxzdWJzZXR8c3Vic2V0fHN1YnN0aXR1dGVfZmlyc3R8c3Vic3RyaW5nfHN1Y2N8c3VjY3xzdWNjfHN1Y2N8c3VjY19iaWdfaW50fHN1Y2NfbnVtfHN5bWJvbF9lbmR8c3ltYm9sX2VuZF9wb3N8c3ltYm9sX3N0YXJ0fHN5bWJvbF9zdGFydF9wb3N8c3ltbGlua3xzeW1saW5rfHN5bmN8c3luY2hyb25pemV8c3lzdGVtfHN5c3RlbXxzeXN0ZW18dGFnfHRha2V8dGFufHRhbmh8dGNkcmFpbnx0Y2RyYWlufHRjZmxvd3x0Y2Zsb3d8dGNmbHVzaHx0Y2ZsdXNofHRjZ2V0YXR0cnx0Y2dldGF0dHJ8dGNzZW5kYnJlYWt8dGNzZW5kYnJlYWt8dGNzZXRhdHRyfHRjc2V0YXR0cnx0ZW1wX2ZpbGV8dGV4dF9zaXplfHRpbWV8dGltZXx0aW1lfHRpbWVkX3JlYWR8dGltZWRfd3JpdGV8dGltZXN8dGltZXN8dGx8dGx8dGx8dG9fYnVmZmVyfHRvX2NoYW5uZWx8dG9fZmxvYXR8dG9faGV4fHRvX2ludHx0b19pbnQzMnx0b19saXN0fHRvX2xpc3R8dG9fbGlzdHx0b19uYXRpdmVpbnR8dG9fc3RyaW5nfHRvX3N0cmluZ3x0b19zdHJpbmd8dG9fc3RyaW5nfHRvX3N0cmluZ3x0b3B8dG9wfHRvdGFsX3NpemV8dHJhbnNmZXJ8dHJhbnNwfHRydW5jYXRlfHRydW5jYXRlfHRydW5jYXRlfHRydW5jYXRlfHRydW5jYXRlfHRydW5jYXRlfHRyeV9sb2NrfHVtYXNrfHVtYXNrfHVuY2FwaXRhbGl6ZXx1bmNhcGl0YWxpemV8dW5jYXBpdGFsaXplfHVuaW9ufHVuaW9ufHVuaXRfYmlnX2ludHx1bmxpbmt8dW5saW5rfHVubG9ja3x1bm1hcnNoYWx8dW5zYWZlX2JsaXR8dW5zYWZlX2ZpbGx8dW5zYWZlX2dldHx1bnNhZmVfZ2V0fHVuc2FmZV9zZXR8dW5zYWZlX3NldHx1cGRhdGV8dXBwZXJjYXNlfHVwcGVyY2FzZXx1cHBlcmNhc2V8dXBwZXJjYXNlfHVzYWdlfHV0aW1lc3x1dGltZXN8d2FpdHx3YWl0fHdhaXR8d2FpdHx3YWl0X25leHRfZXZlbnR8d2FpdF9waWR8d2FpdF9yZWFkfHdhaXRfc2lnbmFsfHdhaXRfdGltZWRfcmVhZHx3YWl0X3RpbWVkX3dyaXRlfHdhaXRfd3JpdGV8d2FpdHBpZHx3aGl0ZXx3aWRlbnx3aW5kb3dfaWR8d29yZF9zaXplfHdyYXB8d3JhcF9hYm9ydHx3cml0ZXx5ZWxsb3d8eWllbGR8emVyb3x6ZXJvX2JpZ19pbnR8QXJnfEFyaXRoX3N0YXR1c3xBcnJheXxBcnJheTF8QXJyYXkyfEFycmF5M3xBcnJheUxhYmVsc3xCaWdfaW50fEJpZ2FycmF5fEJ1ZmZlcnxDYWxsYmFja3xDYW1saW50ZXJuYWxPT3xDaGFyfENvbXBsZXh8Q29uZGl0aW9ufERibXxEaWdlc3R8RHlubGlua3xFdmVudHxGaWxlbmFtZXxGb3JtYXR8R2N8R2VuYXJyYXl8R2VubGV4fEdyYXBoaWNzfEdyYXBoaWNzWDExfEhhc2h0Ymx8SW50MzJ8SW50NjR8TGFyZ2VGaWxlfExhenl8TGV4aW5nfExpc3R8TGlzdExhYmVsc3xNYWtlfE1hcHxNYXJzaGFsfE1vcmVMYWJlbHN8TXV0ZXh8TmF0aXZlaW50fE51bXxPYmp8T298UGFyc2luZ3xQZXJ2YXNpdmVzfFByaW50ZXhjfFByaW50ZnxRdWV1ZXxSYW5kb218U2NhbmZ8U2Nhbm5pbmd8U2V0fFNvcnR8U3RhY2t8U3RhdGV8U3RkTGFiZWxzfFN0cnxTdHJlYW18U3RyaW5nfFN0cmluZ0xhYmVsc3xTeXN8VGhyZWFkfFRocmVhZFVuaXh8VGt8VW5peHxVbml4TGFiZWxzfFdlYWsiLnNwbGl0KCJ8IikpLGQ9Iig/Oig/OlsxLTldXFxkKil8KD86MCkpIixmPSIoPzowW29PXT9bMC03XSspIixnPSIoPzowW3hYXVtcXGRBLUZhLWZdKykiLGg9Iig/OjBbYkJdWzAxXSspIixpPSIoPzoiK2QrInwiK2YrInwiK2crInwiK2grIikiLGo9Iig/OltlRV1bKy1dP1xcZCspIixrPSIoPzpcXC5cXGQrKSIsbD0iKD86XFxkKykiLG09Iig/Oig/OiIrbCsiPyIraysiKXwoPzoiK2wrIlxcLikpIixuPSIoPzooPzoiK20rInwiK2wrIikiK2orIikiLG89Iig/OiIrbisifCIrbSsiKSI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXChcXCouKj9cXCpcXClcXHMqPyQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXChcXCouKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiJy4nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiciJyxuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiKD86IitvKyJ8XFxkKylbakpdXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDpvfSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmkrIlxcYiJ9LHt0b2tlbjpmdW5jdGlvbihkKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShkKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShkKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmMuaGFzT3duUHJvcGVydHkoZCk/InN1cHBvcnQuZnVuY3Rpb24iOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcK1xcLnxcXC1cXC58XFwqXFwufFxcL1xcLnwjfDs7fFxcK3xcXC18XFwqfFxcKlxcKlxcL3xcXC9cXC98JXw8PHw+PnwmfFxcfHxcXF58fnw8fD58PD18PT58PT18IT18PD58PC18PSJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcKSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6JyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX19O2QuaW5oZXJpdHMoZyxmKSxiLk9jYW1sSGlnaGxpZ2h0UnVsZXM9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-ocaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9vY2FtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9vY2FtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9vY2FtbF9oaWdobGlnaHRfcnVsZXMiKS5PY2FtbEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBofTtkLmluaGVyaXRzKGosZSk7dmFyIGs9Lyg/Olsoe1s9Ol18Wy09XT58XGIoPzplbHNlfHRyeXx3aXRoKSlccyokLzsoKGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPSEwLGg9L15ccypcKFwqKC4qKVwqXCkvO2ZvcihlPWM7ZTw9ZDtlKyspaWYoIWgudGVzdChiLmdldExpbmUoZSkpKXtnPSExO2JyZWFrfXZhciBqPW5ldyBpKDAsMCwwLDApO2ZvcihlPWM7ZTw9ZDtlKyspZj1iLmdldExpbmUoZSksai5zdGFydC5yb3c9ZSxqLmVuZC5yb3c9ZSxqLmVuZC5jb2x1bW49Zi5sZW5ndGgsYi5yZXBsYWNlKGosZz9mLm1hdGNoKGgpWzFdOiIoKiIrZisiKikiKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKS50b2tlbnM7cmV0dXJuKCFlLmxlbmd0aHx8ZVtlLmxlbmd0aC0xXS50eXBlIT09ImNvbW1lbnQiKSYmYT09PSJzdGFydCImJmsudGVzdChiKSYmKGQrPWMpLGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfX0pKS5jYWxsKGoucHJvdG90eXBlKSxiLk1vZGU9an0pLGRlZmluZSgiYWNlL21vZGUvb2NhbWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZz1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYW5kfGFzfGFzc2VydHxiZWdpbnxjbGFzc3xjb25zdHJhaW50fGRvfGRvbmV8ZG93bnRvfGVsc2V8ZW5kfGV4Y2VwdGlvbnxleHRlcm5hbHxmb3J8ZnVufGZ1bmN0aW9ufGZ1bmN0b3J8aWZ8aW58aW5jbHVkZXxpbmhlcml0fGluaXRpYWxpemVyfGxhenl8bGV0fG1hdGNofG1ldGhvZHxtb2R1bGV8bXV0YWJsZXxuZXd8b2JqZWN0fG9mfG9wZW58b3J8cHJpdmF0ZXxyZWN8c2lnfHN0cnVjdHx0aGVufHRvfHRyeXx0eXBlfHZhbHx2aXJ0dWFsfHdoZW58d2hpbGV8d2l0aCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoInRydWV8ZmFsc2UiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJhYnN8YWJzX2JpZ19pbnR8YWJzX2Zsb2F0fGFic19udW18YWJzdHJhY3RfdGFnfGFjY2VwdHxhY2Nlc3N8YWNvc3xhZGR8YWRkX2F2YWlsYWJsZV91bml0c3xhZGRfYmlnX2ludHxhZGRfYnVmZmVyfGFkZF9jaGFubmVsfGFkZF9jaGFyfGFkZF9pbml0aWFsaXplcnxhZGRfaW50X2JpZ19pbnR8YWRkX2ludGVyZmFjZXN8YWRkX251bXxhZGRfc3RyaW5nfGFkZF9zdWJzdGl0dXRlfGFkZF9zdWJzdHJpbmd8YWxhcm18YWxsb2NhdGVkX2J5dGVzfGFsbG93X29ubHl8YWxsb3dfdW5zYWZlX21vZHVsZXN8YWx3YXlzfGFwcGVuZHxhcHBuYW1lX2dldHxhcHBuYW1lX3NldHxhcHByb3hfbnVtX2V4cHxhcHByb3hfbnVtX2ZpeHxhcmd8YXJndnxhcml0aF9zdGF0dXN8YXJyYXl8YXJyYXkxX29mX2dlbmFycmF5fGFycmF5Ml9vZl9nZW5hcnJheXxhcnJheTNfb2ZfZ2VuYXJyYXl8YXNpbnxhc3J8YXNzb2N8YXNzcXxhdF9leGl0fGF0YW58YXRhbjJ8YXV0b19zeW5jaHJvbml6ZXxiYWNrZ3JvdW5kfGJhc2VuYW1lfGJlZ2lubmluZ19vZl9pbnB1dHxiaWdfaW50X29mX2ludHxiaWdfaW50X29mX251bXxiaWdfaW50X29mX3N0cmluZ3xiaW5kfGJpbmRfY2xhc3N8YmluZF90YWd8Yml0c3xiaXRzX29mX2Zsb2F0fGJsYWNrfGJsaXR8YmxpdF9pbWFnZXxibHVlfGJvb2x8Ym9vbF9vZl9zdHJpbmd8Ym91bmRlZF9mdWxsX3NwbGl0fGJvdW5kZWRfc3BsaXR8Ym91bmRlZF9zcGxpdF9kZWxpbXxicHJpbnRmfGJyZWFrfGJyb2FkY2FzdHxic2NhbmZ8YnV0dG9uX2Rvd258Y19sYXlvdXR8Y2FwaXRhbGl6ZXxjYXJkaW5hbHxjYXJkaW5hbHxjYXRjaHxjYXRjaF9icmVha3xjZWlsfGNlaWxpbmdfbnVtfGNoYW5uZWx8Y2hhcnxjaGFyX29mX2ludHxjaGRpcnxjaGVja3xjaGVja19zdWZmaXh8Y2htb2R8Y2hvb3NlfGNob3BfZXh0ZW5zaW9ufGNob3Bfc3VmZml4fGNob3dufGNob3dufGNocnxjaHJvb3R8Y2xhc3NpZnlfZmxvYXR8Y2xlYXJ8Y2xlYXJfYXZhaWxhYmxlX3VuaXRzfGNsZWFyX2Nsb3NlX29uX2V4ZWN8Y2xlYXJfZ3JhcGh8Y2xlYXJfbm9uYmxvY2t8Y2xlYXJfcGFyc2VyfGNsb3NlfGNsb3NlfGNsb3NlVGt8Y2xvc2VfYm94fGNsb3NlX2dyYXBofGNsb3NlX2lufGNsb3NlX2luX25vZXJyfGNsb3NlX291dHxjbG9zZV9vdXRfbm9lcnJ8Y2xvc2VfcHJvY2Vzc3xjbG9zZV9wcm9jZXNzfGNsb3NlX3Byb2Nlc3NfZnVsbHxjbG9zZV9wcm9jZXNzX2lufGNsb3NlX3Byb2Nlc3Nfb3V0fGNsb3NlX3N1YndpbmRvd3xjbG9zZV90YWd8Y2xvc2VfdGJveHxjbG9zZWRpcnxjbG9zZWRpcnxjbG9zdXJlX3RhZ3xjb2RlfGNvbWJpbmV8Y29tYmluZXxjb21iaW5lfGNvbW1hbmR8Y29tcGFjdHxjb21wYXJlfGNvbXBhcmVfYmlnX2ludHxjb21wYXJlX251bXxjb21wbGV4MzJ8Y29tcGxleDY0fGNvbmNhdHxjb25qfGNvbm5lY3R8Y29udGFpbnN8Y29udGFpbnNfZnJvbXxjb250ZW50c3xjb3B5fGNvc3xjb3NofGNvdW50fGNvdW50fGNvdW50ZXJzfGNyZWF0ZXxjcmVhdGVfYWxhcm18Y3JlYXRlX2ltYWdlfGNyZWF0ZV9tYXRyaXh8Y3JlYXRlX21hdHJpeHxjcmVhdGVfbWF0cml4fGNyZWF0ZV9vYmplY3R8Y3JlYXRlX29iamVjdF9hbmRfcnVuX2luaXRpYWxpemVyc3xjcmVhdGVfb2JqZWN0X29wdHxjcmVhdGVfcHJvY2Vzc3xjcmVhdGVfcHJvY2Vzc3xjcmVhdGVfcHJvY2Vzc19lbnZ8Y3JlYXRlX3Byb2Nlc3NfZW52fGNyZWF0ZV90YWJsZXxjdXJyZW50fGN1cnJlbnRfZGlyX25hbWV8Y3VycmVudF9wb2ludHxjdXJyZW50X3h8Y3VycmVudF95fGN1cnZldG98Y3VzdG9tX3RhZ3xjeWFufGRhdGFfc2l6ZXxkZWNyfGRlY3JfbnVtfGRlZmF1bHRfYXZhaWxhYmxlX3VuaXRzfGRlbGF5fGRlbGV0ZV9hbGFybXxkZXNjcl9vZl9pbl9jaGFubmVsfGRlc2NyX29mX291dF9jaGFubmVsfGRlc3Ryb3l8ZGlmZnxkaW18ZGltMXxkaW0yfGRpbTN8ZGltc3xkaXJuYW1lfGRpc3BsYXlfbW9kZXxkaXZ8ZGl2X2JpZ19pbnR8ZGl2X251bXxkb3VibGVfYXJyYXlfdGFnfGRvdWJsZV90YWd8ZHJhd19hcmN8ZHJhd19jaGFyfGRyYXdfY2lyY2xlfGRyYXdfZWxsaXBzZXxkcmF3X2ltYWdlfGRyYXdfcG9seXxkcmF3X3BvbHlfbGluZXxkcmF3X3JlY3R8ZHJhd19zZWdtZW50c3xkcmF3X3N0cmluZ3xkdW1teV9wb3N8ZHVtbXlfdGFibGV8ZHVtcF9pbWFnZXxkdXB8ZHVwMnxlbGVtZW50c3xlbXB0eXxlbmRfb2ZfaW5wdXR8ZW52aXJvbm1lbnR8ZXByaW50ZnxlcHNpbG9uX2Zsb2F0fGVxX2JpZ19pbnR8ZXFfbnVtfGVxdWFsfGVycl9mb3JtYXR0ZXJ8ZXJyb3JfbWVzc2FnZXxlc2NhcGVkfGVzdGFibGlzaF9zZXJ2ZXJ8ZXhlY3V0YWJsZV9uYW1lfGV4ZWN2fGV4ZWN2ZXxleGVjdnB8ZXhlY3ZwZXxleGlzdHN8ZXhpc3RzMnxleGl0fGV4cHxmYWlsd2l0aHxmYXN0X3NvcnR8ZmNobW9kfGZjaG93bnxmaWVsZHxmaWxlfGZpbGVfZXhpc3RzfGZpbGx8ZmlsbF9hcmN8ZmlsbF9jaXJjbGV8ZmlsbF9lbGxpcHNlfGZpbGxfcG9seXxmaWxsX3JlY3R8ZmlsdGVyfGZpbmFsX3RhZ3xmaW5hbGlzZXxmaW5kfGZpbmRfYWxsfGZpcnN0X2NoYXJzfGZpcnN0a2V5fGZsYXR0ZW58ZmxvYXR8ZmxvYXQzMnxmbG9hdDY0fGZsb2F0X29mX2JpZ19pbnR8ZmxvYXRfb2ZfYml0c3xmbG9hdF9vZl9pbnR8ZmxvYXRfb2ZfbnVtfGZsb2F0X29mX3N0cmluZ3xmbG9vcnxmbG9vcl9udW18Zmx1c2h8Zmx1c2hfYWxsfGZsdXNoX2lucHV0fGZsdXNoX3N0cl9mb3JtYXR0ZXJ8Zm9sZHxmb2xkX2xlZnR8Zm9sZF9sZWZ0Mnxmb2xkX3JpZ2h0fGZvbGRfcmlnaHQyfGZvcl9hbGx8Zm9yX2FsbDJ8Zm9yY2V8Zm9yY2VfbmV3bGluZXxmb3JjZV92YWx8Zm9yZWdyb3VuZHxmb3JrfGZvcm1hdF9vZl9zdHJpbmd8Zm9ybWF0dGVyX29mX2J1ZmZlcnxmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWx8Zm9ydHJhbl9sYXlvdXR8Zm9yd2FyZF90YWd8ZnByaW50ZnxmcmV4cHxmcm9tfGZyb21fY2hhbm5lbHxmcm9tX2ZpbGV8ZnJvbV9maWxlX2Jpbnxmcm9tX2Z1bmN0aW9ufGZyb21fc3RyaW5nfGZzY2FuZnxmc3R8ZnN0YXR8ZnRydW5jYXRlfGZ1bGxfaW5pdHxmdWxsX21ham9yfGZ1bGxfc3BsaXR8Z2NkX2JpZ19pbnR8Z2VfYmlnX2ludHxnZV9udW18Z2VuYXJyYXlfb2ZfYXJyYXkxfGdlbmFycmF5X29mX2FycmF5MnxnZW5hcnJheV9vZl9hcnJheTN8Z2V0fGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8Z2V0X2FwcHJveF9wcmludGluZ3xnZXRfY29weXxnZXRfZWxsaXBzaXNfdGV4dHxnZXRfZXJyb3Jfd2hlbl9udWxsX2Rlbm9taW5hdG9yfGdldF9mbG9hdGluZ19wcmVjaXNpb258Z2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zfGdldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9uc3xnZXRfaW1hZ2V8Z2V0X21hcmdpbnxnZXRfbWFya190YWdzfGdldF9tYXhfYm94ZXN8Z2V0X21heF9pbmRlbnR8Z2V0X21ldGhvZHxnZXRfbWV0aG9kX2xhYmVsfGdldF9ub3JtYWxpemVfcmF0aW98Z2V0X25vcm1hbGl6ZV9yYXRpb193aGVuX3ByaW50aW5nfGdldF9wcmludF90YWdzfGdldF9zdGF0ZXxnZXRfdmFyaWFibGV8Z2V0Y3dkfGdldGVnaWR8Z2V0ZWdpZHxnZXRlbnZ8Z2V0ZW52fGdldGVudnxnZXRldWlkfGdldGV1aWR8Z2V0Z2lkfGdldGdpZHxnZXRncmdpZHxnZXRncmdpZHxnZXRncm5hbXxnZXRncm5hbXxnZXRncm91cHN8Z2V0aG9zdGJ5YWRkcnxnZXRob3N0YnluYW1lfGdldGhvc3RuYW1lfGdldGl0aW1lcnxnZXRsb2dpbnxnZXRwZWVybmFtZXxnZXRwaWR8Z2V0cHBpZHxnZXRwcm90b2J5bmFtZXxnZXRwcm90b2J5bnVtYmVyfGdldHB3bmFtfGdldHB3dWlkfGdldHNlcnZieW5hbWV8Z2V0c2VydmJ5cG9ydHxnZXRzb2NrbmFtZXxnZXRzb2Nrb3B0fGdldHNvY2tvcHRfZmxvYXR8Z2V0c29ja29wdF9pbnR8Z2V0c29ja29wdF9vcHRpbnR8Z2V0dGltZW9mZGF5fGdldHVpZHxnbG9iYWxfcmVwbGFjZXxnbG9iYWxfc3Vic3RpdHV0ZXxnbXRpbWV8Z3JlZW58Z3JpZHxncm91cF9iZWdpbm5pbmd8Z3JvdXBfZW5kfGd0X2JpZ19pbnR8Z3RfbnVtfGd1YXJkfGhhbmRsZV91bml4X2Vycm9yfGhhc2h8aGFzaF9wYXJhbXxoZHxoZWFkZXJfc2l6ZXxpfGlkfGlnbm9yZXxpbl9jaGFubmVsX2xlbmd0aHxpbl9jaGFubmVsX29mX2Rlc2NyfGluY3J8aW5jcl9udW18aW5kZXh8aW5kZXhfZnJvbXxpbmV0X2FkZHJfYW55fGluZXRfYWRkcl9vZl9zdHJpbmd8aW5maW5pdHl8aW5maXhfdGFnfGluaXR8aW5pdF9jbGFzc3xpbnB1dHxpbnB1dF9iaW5hcnlfaW50fGlucHV0X2J5dGV8aW5wdXRfY2hhcnxpbnB1dF9saW5lfGlucHV0X3ZhbHVlfGludHxpbnQxNl9zaWduZWR8aW50MTZfdW5zaWduZWR8aW50MzJ8aW50NjR8aW50OF9zaWduZWR8aW50OF91bnNpZ25lZHxpbnRfb2ZfYmlnX2ludHxpbnRfb2ZfY2hhcnxpbnRfb2ZfZmxvYXR8aW50X29mX251bXxpbnRfb2Zfc3RyaW5nfGludGVnZXJfbnVtfGludGVyfGludGVyYWN0aXZlfGludnxpbnZhbGlkX2FyZ3xpc19ibG9ja3xpc19lbXB0eXxpc19pbXBsaWNpdHxpc19pbnR8aXNfaW50X2JpZ19pbnR8aXNfaW50ZWdlcl9udW18aXNfcmVsYXRpdmV8aXRlcnxpdGVyMnxpdGVyaXxqb2lufGp1bmt8a2V5X3ByZXNzZWR8a2lsbHxraW5kfGtwcmludGZ8a3NjYW5mfGxhbmR8bGFzdF9jaGFyc3xsYXlvdXR8bGF6eV9mcm9tX2Z1bnxsYXp5X2Zyb21fdmFsfGxhenlfaXNfdmFsfGxhenlfdGFnfGxkZXhwfGxlX2JpZ19pbnR8bGVfbnVtfGxlbmd0aHxsZXhlbWV8bGV4ZW1lX2NoYXJ8bGV4ZW1lX2VuZHxsZXhlbWVfZW5kX3B8bGV4ZW1lX3N0YXJ0fGxleGVtZV9zdGFydF9wfGxpbmV0b3xsaW5rfGxpc3R8bGlzdGVufGxub3R8bG9hZGZpbGV8bG9hZGZpbGVfcHJpdmF0ZXxsb2NhbHRpbWV8bG9ja3xsb2NrZnxsb2d8bG9nMTB8bG9nYW5kfGxvZ25vdHxsb2dvcnxsb2d4b3J8bG9yfGxvd2VyX3dpbmRvd3xsb3dlcmNhc2V8bHNlZWt8bHNsfGxzcnxsc3RhdHxsdF9iaWdfaW50fGx0X251bXxseG9yfG1hZ2VudGF8bWFnaWN8bWFpbkxvb3B8bWFqb3J8bWFqb3Jfc2xpY2V8bWFrZXxtYWtlX2Zvcm1hdHRlcnxtYWtlX2ltYWdlfG1ha2VfbGV4ZXJ8bWFrZV9tYXRyaXh8bWFrZV9zZWxmX2luaXR8bWFwfG1hcDJ8bWFwX2ZpbGV8bWFwaXxtYXJzaGFsfG1hdGNoX2JlZ2lubmluZ3xtYXRjaF9lbmR8bWF0Y2hlZF9ncm91cHxtYXRjaGVkX3N0cmluZ3xtYXh8bWF4X2FycmF5X2xlbmd0aHxtYXhfYmlnX2ludHxtYXhfZWx0fG1heF9mbG9hdHxtYXhfaW50fG1heF9udW18bWF4X3N0cmluZ19sZW5ndGh8bWVtfG1lbV9hc3NvY3xtZW1fYXNzcXxtZW1xfG1lcmdlfG1pbnxtaW5fYmlnX2ludHxtaW5fZWx0fG1pbl9mbG9hdHxtaW5faW50fG1pbl9udW18bWlub3J8bWludXNfYmlnX2ludHxtaW51c19udW18bWludXNfb25lfG1rZGlyfG1rZmlmb3xta3RpbWV8bW9kfG1vZF9iaWdfaW50fG1vZF9mbG9hdHxtb2RfbnVtfG1vZGZ8bW91c2VfcG9zfG1vdmV0b3xtdWx8bXVsdF9iaWdfaW50fG11bHRfaW50X2JpZ19pbnR8bXVsdF9udW18bmFufG5hcnJvd3xuYXRfb2ZfbnVtfG5hdGl2ZWludHxuZWd8bmVnX2luZmluaXR5fG5ld19ibG9ja3xuZXdfY2hhbm5lbHxuZXdfbWV0aG9kfG5ld192YXJpYWJsZXxuZXh0fG5leHRrZXl8bmljZXxuaWNlfG5vX3NjYW5fdGFnfG5vcm18bm9ybTJ8bm90fG5wZWVrfG50aHxudGhfZGltfG51bV9kaWdpdHNfYmlnX2ludHxudW1fZGltc3xudW1fb2ZfYmlnX2ludHxudW1fb2ZfaW50fG51bV9vZl9uYXR8bnVtX29mX3JhdGlvfG51bV9vZl9zdHJpbmd8T3xvYmp8b2JqZWN0X3RhZ3xvY2FtbF92ZXJzaW9ufG9mX2FycmF5fG9mX2NoYW5uZWx8b2ZfZmxvYXR8b2ZfaW50fG9mX2ludDMyfG9mX2xpc3R8b2ZfbmF0aXZlaW50fG9mX3N0cmluZ3xvbmV8b3BlblRrfG9wZW5fYm94fG9wZW5fY29ubmVjdGlvbnxvcGVuX2dyYXBofG9wZW5faGJveHxvcGVuX2hvdmJveHxvcGVuX2h2Ym94fG9wZW5faW58b3Blbl9pbl9iaW58b3Blbl9pbl9nZW58b3Blbl9vdXR8b3Blbl9vdXRfYmlufG9wZW5fb3V0X2dlbnxvcGVuX3Byb2Nlc3N8b3Blbl9wcm9jZXNzX2Z1bGx8b3Blbl9wcm9jZXNzX2lufG9wZW5fcHJvY2Vzc19vdXR8b3Blbl9zdWJ3aW5kb3d8b3Blbl90YWd8b3Blbl90Ym94fG9wZW5fdGVtcF9maWxlfG9wZW5fdmJveHxvcGVuZGJtfG9wZW5kaXJ8b3BlbmZpbGV8b3J8b3NfdHlwZXxvdXRfY2hhbm5lbF9sZW5ndGh8b3V0X2NoYW5uZWxfb2ZfZGVzY3J8b3V0cHV0fG91dHB1dF9iaW5hcnlfaW50fG91dHB1dF9idWZmZXJ8b3V0cHV0X2J5dGV8b3V0cHV0X2NoYXJ8b3V0cHV0X3N0cmluZ3xvdXRwdXRfdmFsdWV8b3Zlcl9tYXhfYm94ZXN8cGFja3xwYXJhbXN8cGFyZW50X2Rpcl9uYW1lfHBhcnNlfHBhcnNlX2FyZ3Z8cGFydGl0aW9ufHBhdXNlfHBlZWt8cGlwZXxwaXhlbHN8cGxhY2V8cGxvdHxwbG90c3xwb2ludF9jb2xvcnxwb2xhcnxwb2xsfHBvcHxwb3NfaW58cG9zX291dHxwb3d8cG93ZXJfYmlnX2ludF9wb3NpdGl2ZV9iaWdfaW50fHBvd2VyX2JpZ19pbnRfcG9zaXRpdmVfaW50fHBvd2VyX2ludF9wb3NpdGl2ZV9iaWdfaW50fHBvd2VyX2ludF9wb3NpdGl2ZV9pbnR8cG93ZXJfbnVtfHBwX2Nsb3NlX2JveHxwcF9jbG9zZV90YWd8cHBfY2xvc2VfdGJveHxwcF9mb3JjZV9uZXdsaW5lfHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8cHBfZ2V0X2VsbGlwc2lzX3RleHR8cHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zfHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9uc3xwcF9nZXRfbWFyZ2lufHBwX2dldF9tYXJrX3RhZ3N8cHBfZ2V0X21heF9ib3hlc3xwcF9nZXRfbWF4X2luZGVudHxwcF9nZXRfcHJpbnRfdGFnc3xwcF9vcGVuX2JveHxwcF9vcGVuX2hib3h8cHBfb3Blbl9ob3Zib3h8cHBfb3Blbl9odmJveHxwcF9vcGVuX3RhZ3xwcF9vcGVuX3Rib3h8cHBfb3Blbl92Ym94fHBwX292ZXJfbWF4X2JveGVzfHBwX3ByaW50X2FzfHBwX3ByaW50X2Jvb2x8cHBfcHJpbnRfYnJlYWt8cHBfcHJpbnRfY2hhcnxwcF9wcmludF9jdXR8cHBfcHJpbnRfZmxvYXR8cHBfcHJpbnRfZmx1c2h8cHBfcHJpbnRfaWZfbmV3bGluZXxwcF9wcmludF9pbnR8cHBfcHJpbnRfbmV3bGluZXxwcF9wcmludF9zcGFjZXxwcF9wcmludF9zdHJpbmd8cHBfcHJpbnRfdGFifHBwX3ByaW50X3RicmVha3xwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zfHBwX3NldF9lbGxpcHNpc190ZXh0fHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWx8cHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zfHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9uc3xwcF9zZXRfbWFyZ2lufHBwX3NldF9tYXJrX3RhZ3N8cHBfc2V0X21heF9ib3hlc3xwcF9zZXRfbWF4X2luZGVudHxwcF9zZXRfcHJpbnRfdGFnc3xwcF9zZXRfdGFifHBwX3NldF90YWdzfHByZWR8cHJlZF9iaWdfaW50fHByZWRfbnVtfHByZXJyX2NoYXJ8cHJlcnJfZW5kbGluZXxwcmVycl9mbG9hdHxwcmVycl9pbnR8cHJlcnJfbmV3bGluZXxwcmVycl9zdHJpbmd8cHJpbnR8cHJpbnRfYXN8cHJpbnRfYm9vbHxwcmludF9icmVha3xwcmludF9jaGFyfHByaW50X2N1dHxwcmludF9lbmRsaW5lfHByaW50X2Zsb2F0fHByaW50X2ZsdXNofHByaW50X2lmX25ld2xpbmV8cHJpbnRfaW50fHByaW50X25ld2xpbmV8cHJpbnRfc3BhY2V8cHJpbnRfc3RhdHxwcmludF9zdHJpbmd8cHJpbnRfdGFifHByaW50X3RicmVha3xwcmludGZ8cHJvaGliaXR8cHVibGljX21ldGhvZF9sYWJlbHxwdXNofHB1dGVudnxxdW9fbnVtfHF1b21vZF9iaWdfaW50fHF1b3RlfHJhaXNlfHJhaXNlX3dpbmRvd3xyYXRpb19vZl9udW18cmNvbnRhaW5zX2Zyb218cmVhZHxyZWFkX2Zsb2F0fHJlYWRfaW50fHJlYWRfa2V5fHJlYWRfbGluZXxyZWFkZGlyfHJlYWRkaXJ8cmVhZGxpbmt8cmVhbGx5X2lucHV0fHJlY2VpdmV8cmVjdnxyZWN2ZnJvbXxyZWR8cmVmfHJlZ2V4cHxyZWdleHBfY2FzZV9mb2xkfHJlZ2V4cF9zdHJpbmd8cmVnZXhwX3N0cmluZ19jYXNlX2ZvbGR8cmVnaXN0ZXJ8cmVnaXN0ZXJfZXhjZXB0aW9ufHJlbXxyZW1lbWJlcl9tb2RlfHJlbW92ZXxyZW1vdmVfYXNzb2N8cmVtb3ZlX2Fzc3F8cmVuYW1lfHJlcGxhY2V8cmVwbGFjZV9maXJzdHxyZXBsYWNlX21hdGNoZWR8cmVwcnxyZXNldHxyZXNoYXBlfHJlc2hhcGVfMXxyZXNoYXBlXzJ8cmVzaGFwZV8zfHJldnxyZXZfYXBwZW5kfHJldl9tYXB8cmV2X21hcDJ8cmV3aW5kZGlyfHJnYnxyaHNfZW5kfHJoc19lbmRfcG9zfHJoc19zdGFydHxyaHNfc3RhcnRfcG9zfHJpbmRleHxyaW5kZXhfZnJvbXxybGluZXRvfHJtZGlyfHJtb3ZldG98cm91bmRfbnVtfHJ1bl9pbml0aWFsaXplcnN8cnVuX2luaXRpYWxpemVyc19vcHR8c2NhbmZ8c2VhcmNoX2JhY2t3YXJkfHNlYXJjaF9mb3J3YXJkfHNlZWtfaW58c2Vla19vdXR8c2VsZWN0fHNlbGZ8c2VsZl9pbml0fHNlbmR8c2VuZHRvfHNldHxzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zfHNldF9hcHByb3hfcHJpbnRpbmd8c2V0X2JpbmFyeV9tb2RlX2lufHNldF9iaW5hcnlfbW9kZV9vdXR8c2V0X2Nsb3NlX29uX2V4ZWN8c2V0X2Nsb3NlX29uX2V4ZWN8c2V0X2NvbG9yfHNldF9lbGxpcHNpc190ZXh0fHNldF9lcnJvcl93aGVuX251bGxfZGVub21pbmF0b3J8c2V0X2ZpZWxkfHNldF9mbG9hdGluZ19wcmVjaXNpb258c2V0X2ZvbnR8c2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbHxzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8c2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zfHNldF9saW5lX3dpZHRofHNldF9tYXJnaW58c2V0X21hcmtfdGFnc3xzZXRfbWF4X2JveGVzfHNldF9tYXhfaW5kZW50fHNldF9tZXRob2R8c2V0X25vbmJsb2NrfHNldF9ub25ibG9ja3xzZXRfbm9ybWFsaXplX3JhdGlvfHNldF9ub3JtYWxpemVfcmF0aW9fd2hlbl9wcmludGluZ3xzZXRfcHJpbnRfdGFnc3xzZXRfc2lnbmFsfHNldF9zdGF0ZXxzZXRfdGFifHNldF90YWd8c2V0X3RhZ3N8c2V0X3RleHRfc2l6ZXxzZXRfd2luZG93X3RpdGxlfHNldGdpZHxzZXRnaWR8c2V0aXRpbWVyfHNldGl0aW1lcnxzZXRzaWR8c2V0c2lkfHNldHNvY2tvcHR8c2V0c29ja29wdHxzZXRzb2Nrb3B0X2Zsb2F0fHNldHNvY2tvcHRfZmxvYXR8c2V0c29ja29wdF9pbnR8c2V0c29ja29wdF9pbnR8c2V0c29ja29wdF9vcHRpbnR8c2V0c29ja29wdF9vcHRpbnR8c2V0dWlkfHNldHVpZHxzaGlmdF9sZWZ0fHNoaWZ0X2xlZnR8c2hpZnRfbGVmdHxzaGlmdF9yaWdodHxzaGlmdF9yaWdodHxzaGlmdF9yaWdodHxzaGlmdF9yaWdodF9sb2dpY2FsfHNoaWZ0X3JpZ2h0X2xvZ2ljYWx8c2hpZnRfcmlnaHRfbG9naWNhbHxzaG93X2J1Y2tldHN8c2h1dGRvd258c2h1dGRvd258c2h1dGRvd25fY29ubmVjdGlvbnxzaHV0ZG93bl9jb25uZWN0aW9ufHNpZ2FicnR8c2lnYWxybXxzaWdjaGxkfHNpZ2NvbnR8c2lnZnBlfHNpZ2h1cHxzaWdpbGx8c2lnaW50fHNpZ2tpbGx8c2lnbl9iaWdfaW50fHNpZ25fbnVtfHNpZ25hbHxzaWduYWx8c2lncGVuZGluZ3xzaWdwZW5kaW5nfHNpZ3BpcGV8c2lncHJvY21hc2t8c2lncHJvY21hc2t8c2lncHJvZnxzaWdxdWl0fHNpZ3NlZ3Z8c2lnc3RvcHxzaWdzdXNwZW5kfHNpZ3N1c3BlbmR8c2lndGVybXxzaWd0c3RwfHNpZ3R0aW58c2lndHRvdXxzaWd1c3IxfHNpZ3VzcjJ8c2lndnRhbHJtfHNpbnxzaW5nbGV0b258c2luaHxzaXplfHNpemV8c2l6ZV94fHNpemVfeXxzbGVlcHxzbGVlcHxzbGVlcHxzbGljZV9sZWZ0fHNsaWNlX2xlZnR8c2xpY2VfbGVmdF8xfHNsaWNlX2xlZnRfMnxzbGljZV9yaWdodHxzbGljZV9yaWdodHxzbGljZV9yaWdodF8xfHNsaWNlX3JpZ2h0XzJ8c25kfHNvY2tldHxzb2NrZXR8c29ja2V0fHNvY2tldHBhaXJ8c29ja2V0cGFpcnxzb3J0fHNvdW5kfHNwbGl0fHNwbGl0X2RlbGltfHNwcmludGZ8c3ByaW50ZnxzcXJ0fHNxcnR8c3FydF9iaWdfaW50fHNxdWFyZV9iaWdfaW50fHNxdWFyZV9udW18c3NjYW5mfHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fHN0YXR8c3RhdHxzdGF0fHN0YXR8c3RhdHxzdGF0c3xzdGF0c3xzdGRfZm9ybWF0dGVyfHN0ZGJ1ZnxzdGRlcnJ8c3RkZXJyfHN0ZGVycnxzdGRpYnxzdGRpbnxzdGRpbnxzdGRpbnxzdGRvdXR8c3Rkb3V0fHN0ZG91dHxzdHJfZm9ybWF0dGVyfHN0cmluZ3xzdHJpbmdfYWZ0ZXJ8c3RyaW5nX2JlZm9yZXxzdHJpbmdfbWF0Y2h8c3RyaW5nX29mX2JpZ19pbnR8c3RyaW5nX29mX2Jvb2x8c3RyaW5nX29mX2Zsb2F0fHN0cmluZ19vZl9mb3JtYXR8c3RyaW5nX29mX2luZXRfYWRkcnxzdHJpbmdfb2ZfaW5ldF9hZGRyfHN0cmluZ19vZl9pbnR8c3RyaW5nX29mX251bXxzdHJpbmdfcGFydGlhbF9tYXRjaHxzdHJpbmdfdGFnfHN1YnxzdWJ8c3ViX2JpZ19pbnR8c3ViX2xlZnR8c3ViX251bXxzdWJfcmlnaHR8c3Vic2V0fHN1YnNldHxzdWJzdGl0dXRlX2ZpcnN0fHN1YnN0cmluZ3xzdWNjfHN1Y2N8c3VjY3xzdWNjfHN1Y2NfYmlnX2ludHxzdWNjX251bXxzeW1ib2xfZW5kfHN5bWJvbF9lbmRfcG9zfHN5bWJvbF9zdGFydHxzeW1ib2xfc3RhcnRfcG9zfHN5bWxpbmt8c3ltbGlua3xzeW5jfHN5bmNocm9uaXplfHN5c3RlbXxzeXN0ZW18c3lzdGVtfHRhZ3x0YWtlfHRhbnx0YW5ofHRjZHJhaW58dGNkcmFpbnx0Y2Zsb3d8dGNmbG93fHRjZmx1c2h8dGNmbHVzaHx0Y2dldGF0dHJ8dGNnZXRhdHRyfHRjc2VuZGJyZWFrfHRjc2VuZGJyZWFrfHRjc2V0YXR0cnx0Y3NldGF0dHJ8dGVtcF9maWxlfHRleHRfc2l6ZXx0aW1lfHRpbWV8dGltZXx0aW1lZF9yZWFkfHRpbWVkX3dyaXRlfHRpbWVzfHRpbWVzfHRsfHRsfHRsfHRvX2J1ZmZlcnx0b19jaGFubmVsfHRvX2Zsb2F0fHRvX2hleHx0b19pbnR8dG9faW50MzJ8dG9fbGlzdHx0b19saXN0fHRvX2xpc3R8dG9fbmF0aXZlaW50fHRvX3N0cmluZ3x0b19zdHJpbmd8dG9fc3RyaW5nfHRvX3N0cmluZ3x0b19zdHJpbmd8dG9wfHRvcHx0b3RhbF9zaXplfHRyYW5zZmVyfHRyYW5zcHx0cnVuY2F0ZXx0cnVuY2F0ZXx0cnVuY2F0ZXx0cnVuY2F0ZXx0cnVuY2F0ZXx0cnVuY2F0ZXx0cnlfbG9ja3x1bWFza3x1bWFza3x1bmNhcGl0YWxpemV8dW5jYXBpdGFsaXplfHVuY2FwaXRhbGl6ZXx1bmlvbnx1bmlvbnx1bml0X2JpZ19pbnR8dW5saW5rfHVubGlua3x1bmxvY2t8dW5tYXJzaGFsfHVuc2FmZV9ibGl0fHVuc2FmZV9maWxsfHVuc2FmZV9nZXR8dW5zYWZlX2dldHx1bnNhZmVfc2V0fHVuc2FmZV9zZXR8dXBkYXRlfHVwcGVyY2FzZXx1cHBlcmNhc2V8dXBwZXJjYXNlfHVwcGVyY2FzZXx1c2FnZXx1dGltZXN8dXRpbWVzfHdhaXR8d2FpdHx3YWl0fHdhaXR8d2FpdF9uZXh0X2V2ZW50fHdhaXRfcGlkfHdhaXRfcmVhZHx3YWl0X3NpZ25hbHx3YWl0X3RpbWVkX3JlYWR8d2FpdF90aW1lZF93cml0ZXx3YWl0X3dyaXRlfHdhaXRwaWR8d2hpdGV8d2lkZW58d2luZG93X2lkfHdvcmRfc2l6ZXx3cmFwfHdyYXBfYWJvcnR8d3JpdGV8eWVsbG93fHlpZWxkfHplcm98emVyb19iaWdfaW50fEFyZ3xBcml0aF9zdGF0dXN8QXJyYXl8QXJyYXkxfEFycmF5MnxBcnJheTN8QXJyYXlMYWJlbHN8QmlnX2ludHxCaWdhcnJheXxCdWZmZXJ8Q2FsbGJhY2t8Q2FtbGludGVybmFsT098Q2hhcnxDb21wbGV4fENvbmRpdGlvbnxEYm18RGlnZXN0fER5bmxpbmt8RXZlbnR8RmlsZW5hbWV8Rm9ybWF0fEdjfEdlbmFycmF5fEdlbmxleHxHcmFwaGljc3xHcmFwaGljc1gxMXxIYXNodGJsfEludDMyfEludDY0fExhcmdlRmlsZXxMYXp5fExleGluZ3xMaXN0fExpc3RMYWJlbHN8TWFrZXxNYXB8TWFyc2hhbHxNb3JlTGFiZWxzfE11dGV4fE5hdGl2ZWludHxOdW18T2JqfE9vfFBhcnNpbmd8UGVydmFzaXZlc3xQcmludGV4Y3xQcmludGZ8UXVldWV8UmFuZG9tfFNjYW5mfFNjYW5uaW5nfFNldHxTb3J0fFN0YWNrfFN0YXRlfFN0ZExhYmVsc3xTdHJ8U3RyZWFtfFN0cmluZ3xTdHJpbmdMYWJlbHN8U3lzfFRocmVhZHxUaHJlYWRVbml4fFRrfFVuaXh8VW5peExhYmVsc3xXZWFrIi5zcGxpdCgifCIpKSxkPSIoPzooPzpbMS05XVxcZCopfCg/OjApKSIsZj0iKD86MFtvT10/WzAtN10rKSIsZz0iKD86MFt4WF1bXFxkQS1GYS1mXSspIixoPSIoPzowW2JCXVswMV0rKSIsaT0iKD86IitkKyJ8IitmKyJ8IitnKyJ8IitoKyIpIixqPSIoPzpbZUVdWystXT9cXGQrKSIsaz0iKD86XFwuXFxkKykiLGw9Iig/OlxcZCspIixtPSIoPzooPzoiK2wrIj8iK2srIil8KD86IitsKyJcXC4pKSIsbj0iKD86KD86IittKyJ8IitsKyIpIitqKyIpIixvPSIoPzoiK24rInwiK20rIikiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwoXFwqLio/XFwqXFwpXFxzKj8kIn0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwoXFwqLioiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuJyJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonIicsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6Iig/OiIrbysifFxcZCspW2pKXVxcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6b30se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDppKyJcXGIifSx7dG9rZW46ZnVuY3Rpb24oZCl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoZCk/ImtleXdvcmQiOmIuaGFzT3duUHJvcGVydHkoZCk/ImNvbnN0YW50Lmxhbmd1YWdlIjpjLmhhc093blByb3BlcnR5KGQpPyJzdXBwb3J0LmZ1bmN0aW9uIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXCtcXC58XFwtXFwufFxcKlxcLnxcXC9cXC58I3w7O3xcXCt8XFwtfFxcKnxcXCpcXCpcXC98XFwvXFwvfCV8PDx8Pj58JnxcXHx8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fDwtfD0ifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXCkiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiciJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19fTtkLmluaGVyaXRzKGcsZiksYi5PY2FtbEhpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-perl-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvcGVybCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9wZXJsX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vcGVybF9oaWdobGlnaHRfcnVsZXMiKS5QZXJsSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsaz1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKSMvO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIjIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucztpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Iil7dmFyIGc9Yi5tYXRjaCgvXi4qW1x7XChcW1w6XVxzKiQvKTtnJiYoZCs9Yyl9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9wZXJsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImJhc2V8Y29uc3RhbnR8Y29udGludWV8ZWxzZXxlbHNpZnxmb3J8Zm9yZWFjaHxmb3JtYXR8Z290b3xpZnxsYXN0fGxvY2FsfG15fG5leHR8bm98cGFja2FnZXxwYXJlbnR8cmVkb3xyZXF1aXJlfHNjYWxhcnxzdWJ8dW5sZXNzfHVudGlsfHdoaWxlfHVzZXx2YXJzIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgiQVJHVnxFTlZ8SU5DfFNJRyIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImdldHByb3RvYnludW1iZXJ8Z2V0cHJvdG9ieW5hbWV8Z2V0c2VydmJ5bmFtZXxnZXRob3N0YnlhZGRyfGdldGhvc3RieW5hbWV8Z2V0c2VydmJ5cG9ydHxnZXRuZXRieWFkZHJ8Z2V0bmV0YnluYW1lfGdldHNvY2tuYW1lfGdldHBlZXJuYW1lfHNldHByaW9yaXR5fGdldHByb3RvZW50fHNldHByb3RvZW50fGdldHByaW9yaXR5fGVuZHByb3RvZW50fGdldHNlcnZlbnR8c2V0c2VydmVudHxlbmRzZXJ2ZW50fHNldGhvc3RlbnR8c29ja2V0cGFpcnxnZXRzb2Nrb3B0fGdldGhvc3RlbnR8ZW5kaG9zdGVudHxzZXRzb2Nrb3B0fHNldG5ldGVudHxxdW90ZW1ldGF8bG9jYWx0aW1lfHByb3RvdHlwZXxnZXRuZXRlbnR8ZW5kbmV0ZW50fHJld2luZGRpcnx3YW50YXJyYXl8Z2V0cHd1aWR8Y2xvc2VkaXJ8Z2V0bG9naW58cmVhZGxpbmt8ZW5kZ3JlbnR8Z2V0Z3JnaWR8Z2V0Z3JuYW18c2htd3JpdGV8c2h1dGRvd258cmVhZGxpbmV8ZW5kcHdlbnR8c2V0Z3JlbnR8cmVhZHBpcGV8Zm9ybWxpbmV8dHJ1bmNhdGV8ZGJtY2xvc2V8c3lzd3JpdGV8c2V0cHdlbnR8Z2V0cHduYW18Z2V0Z3JlbnR8Z2V0cHdlbnR8dWNmaXJzdHxzeXNyZWFkfHNldHBncnB8c2htcmVhZHxzeXNzZWVrfHN5c29wZW58dGVsbGRpcnxkZWZpbmVkfG9wZW5kaXJ8Y29ubmVjdHxsY2ZpcnN0fGdldHBwaWR8YmlubW9kZXxzeXNjYWxsfHNwcmludGZ8Z2V0cGdycHxyZWFkZGlyfHNlZWtkaXJ8d2FpdHBpZHxyZXZlcnNlfHVuc2hpZnR8c3ltbGlua3xkYm1vcGVufHNlbWdldHxtc2dyY3Z8cmVuYW1lfGxpc3RlbnxjaHJvb3R8bXNnc25kfHNobWN0bHxhY2NlcHR8dW5wYWNrfGV4aXN0c3xmaWxlbm98c2htZ2V0fHN5c3RlbXx1bmxpbmt8cHJpbnRmfGdtdGltZXxtc2djdGx8c2VtY3RsfHZhbHVlc3xyaW5kZXh8c3Vic3RyfHNwbGljZXxsZW5ndGh8bXNnZ2V0fHNlbGVjdHxzb2NrZXR8cmV0dXJufGNhbGxlcnxkZWxldGV8YWxhcm18aW9jdGx8aW5kZXh8dW5kZWZ8bHN0YXR8dGltZXN8c3JhbmR8Y2hvd258ZmNudGx8Y2xvc2V8d3JpdGV8dW1hc2t8cm1kaXJ8c3R1ZHl8c2xlZXB8Y2hvbXB8dW50aWV8cHJpbnR8dXRpbWV8bWtkaXJ8YXRhbjJ8c3BsaXR8Y3J5cHR8ZmxvY2t8Y2htb2R8QkVHSU58Ymxlc3N8Y2hkaXJ8c2Vtb3B8c2hpZnR8cmVzZXR8bGlua3xzdGF0fGNob3B8Z3JlcHxmb3JrfGR1bXB8am9pbnxvcGVufHRlbGx8cGlwZXxleGl0fGdsb2J8d2FybnxlYWNofGJpbmR8c29ydHxwYWNrfGV2YWx8cHVzaHxrZXlzfGdldGN8a2lsbHxzZWVrfHNxcnR8c2VuZHx3YWl0fHJhbmR8dGllZHxyZWFkfHRpbWV8ZXhlY3xyZWN2fGVvZnxjaHJ8aW50fG9yZHxleHB8cG9zfHBvcHxzaW58bG9nfGFic3xvY3R8aGV4fHRpZXxjb3N8dmVjfEVORHxyZWZ8bWFwfGRpZXx1Y3xsY3xkbyIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIjLiokIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiWy9dKD86KD86XFxbKD86XFxcXF18W15cXF1dKStcXF0pfCg/OlxcXFwvfFteXFxdL10pKSpbL11cXHcqXFxzKig/PVspLiw7XXwkKSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIweFswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOmZ1bmN0aW9uKGQpe3JldHVybiBhLmhhc093blByb3BlcnR5KGQpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGQpPyJjb25zdGFudC5sYW5ndWFnZSI6Yy5oYXNPd25Qcm9wZXJ0eShkKT8ic3VwcG9ydC5mdW5jdGlvbiI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwuXFwuXFwufFxcfFxcfD18Pj49fDw8PXw8PT58JiY9fD0+fCF+fFxcXj18Jj18XFx8PXxcXC49fHg9fCU9fFxcLz18XFwqPXxcXC09fFxcKz18PX58XFwqXFwqfFxcLVxcLXxcXC5cXC58XFx8XFx8fCYmfFxcK1xcK3xcXC0+fCE9fD09fD49fDw9fD4+fDw8fCx8PXxcXD9cXDp8XFxefFxcfHx4fCV8XFwvfFxcKnw8fCZ8XFxcXHx+fCF8PnxcXC58XFwtfFxcK3xcXC1DfFxcLWJ8XFwtU3xcXC11fFxcLXR8XFwtcHxcXC1sfFxcLWR8XFwtZnxcXC1nfFxcLXN8XFwtenxcXC1rfFxcLWV8XFwtT3xcXC1UfFxcLUJ8XFwtTXxcXC1BfFxcLVh8XFwtV3xcXC1jfFxcLVJ8XFwtb3xcXC14fFxcLXd8XFwtcnxcXGIoPzphbmR8Y21wfGVxfGdlfGd0fGxlfGx0fG5lfG5vdHxvcnx4b3IpIn0se3Rva2VuOiJscGFyZW4iLHJlZ2V4OiJbWyh7XSJ9LHt0b2tlbjoicnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19fTtkLmluaGVyaXRzKGcsZiksYi5QZXJsSGlnaGxpZ2h0UnVsZXM9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-perl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wZXJsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3BlcmxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9wZXJsX2hpZ2hsaWdodF9ydWxlcyIpLlBlcmxIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgan07ZC5pbmhlcml0cyhrLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopIy87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBoPW5ldyBpKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2guc3RhcnQucm93PWcsaC5lbmQucm93PWcsaC5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShoLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIiMiKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQiKXt2YXIgZz1iLm1hdGNoKC9eLipbXHtcKFxbXDpdXHMqJC8pO2cmJihkKz1jKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9fS5jYWxsKGsucHJvdG90eXBlKSxiLk1vZGU9a30pLGRlZmluZSgiYWNlL21vZGUvcGVybF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJiYXNlfGNvbnN0YW50fGNvbnRpbnVlfGVsc2V8ZWxzaWZ8Zm9yfGZvcmVhY2h8Zm9ybWF0fGdvdG98aWZ8bGFzdHxsb2NhbHxteXxuZXh0fG5vfHBhY2thZ2V8cGFyZW50fHJlZG98cmVxdWlyZXxzY2FsYXJ8c3VifHVubGVzc3x1bnRpbHx3aGlsZXx1c2V8dmFycyIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIkFSR1Z8RU5WfElOQ3xTSUciLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJnZXRwcm90b2J5bnVtYmVyfGdldHByb3RvYnluYW1lfGdldHNlcnZieW5hbWV8Z2V0aG9zdGJ5YWRkcnxnZXRob3N0YnluYW1lfGdldHNlcnZieXBvcnR8Z2V0bmV0YnlhZGRyfGdldG5ldGJ5bmFtZXxnZXRzb2NrbmFtZXxnZXRwZWVybmFtZXxzZXRwcmlvcml0eXxnZXRwcm90b2VudHxzZXRwcm90b2VudHxnZXRwcmlvcml0eXxlbmRwcm90b2VudHxnZXRzZXJ2ZW50fHNldHNlcnZlbnR8ZW5kc2VydmVudHxzZXRob3N0ZW50fHNvY2tldHBhaXJ8Z2V0c29ja29wdHxnZXRob3N0ZW50fGVuZGhvc3RlbnR8c2V0c29ja29wdHxzZXRuZXRlbnR8cXVvdGVtZXRhfGxvY2FsdGltZXxwcm90b3R5cGV8Z2V0bmV0ZW50fGVuZG5ldGVudHxyZXdpbmRkaXJ8d2FudGFycmF5fGdldHB3dWlkfGNsb3NlZGlyfGdldGxvZ2lufHJlYWRsaW5rfGVuZGdyZW50fGdldGdyZ2lkfGdldGdybmFtfHNobXdyaXRlfHNodXRkb3dufHJlYWRsaW5lfGVuZHB3ZW50fHNldGdyZW50fHJlYWRwaXBlfGZvcm1saW5lfHRydW5jYXRlfGRibWNsb3NlfHN5c3dyaXRlfHNldHB3ZW50fGdldHB3bmFtfGdldGdyZW50fGdldHB3ZW50fHVjZmlyc3R8c3lzcmVhZHxzZXRwZ3JwfHNobXJlYWR8c3lzc2Vla3xzeXNvcGVufHRlbGxkaXJ8ZGVmaW5lZHxvcGVuZGlyfGNvbm5lY3R8bGNmaXJzdHxnZXRwcGlkfGJpbm1vZGV8c3lzY2FsbHxzcHJpbnRmfGdldHBncnB8cmVhZGRpcnxzZWVrZGlyfHdhaXRwaWR8cmV2ZXJzZXx1bnNoaWZ0fHN5bWxpbmt8ZGJtb3BlbnxzZW1nZXR8bXNncmN2fHJlbmFtZXxsaXN0ZW58Y2hyb290fG1zZ3NuZHxzaG1jdGx8YWNjZXB0fHVucGFja3xleGlzdHN8ZmlsZW5vfHNobWdldHxzeXN0ZW18dW5saW5rfHByaW50ZnxnbXRpbWV8bXNnY3RsfHNlbWN0bHx2YWx1ZXN8cmluZGV4fHN1YnN0cnxzcGxpY2V8bGVuZ3RofG1zZ2dldHxzZWxlY3R8c29ja2V0fHJldHVybnxjYWxsZXJ8ZGVsZXRlfGFsYXJtfGlvY3RsfGluZGV4fHVuZGVmfGxzdGF0fHRpbWVzfHNyYW5kfGNob3dufGZjbnRsfGNsb3NlfHdyaXRlfHVtYXNrfHJtZGlyfHN0dWR5fHNsZWVwfGNob21wfHVudGllfHByaW50fHV0aW1lfG1rZGlyfGF0YW4yfHNwbGl0fGNyeXB0fGZsb2NrfGNobW9kfEJFR0lOfGJsZXNzfGNoZGlyfHNlbW9wfHNoaWZ0fHJlc2V0fGxpbmt8c3RhdHxjaG9wfGdyZXB8Zm9ya3xkdW1wfGpvaW58b3Blbnx0ZWxsfHBpcGV8ZXhpdHxnbG9ifHdhcm58ZWFjaHxiaW5kfHNvcnR8cGFja3xldmFsfHB1c2h8a2V5c3xnZXRjfGtpbGx8c2Vla3xzcXJ0fHNlbmR8d2FpdHxyYW5kfHRpZWR8cmVhZHx0aW1lfGV4ZWN8cmVjdnxlb2Z8Y2hyfGludHxvcmR8ZXhwfHBvc3xwb3B8c2lufGxvZ3xhYnN8b2N0fGhleHx0aWV8Y29zfHZlY3xFTkR8cmVmfG1hcHxkaWV8dWN8bGN8ZG8iLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiIy4qJCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qXFxcXCQnLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKlxcXFwkIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMHhbMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjpmdW5jdGlvbihkKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShkKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShkKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmMuaGFzT3duUHJvcGVydHkoZCk/InN1cHBvcnQuZnVuY3Rpb24iOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcLlxcLlxcLnxcXHxcXHw9fD4+PXw8PD18PD0+fCYmPXw9PnwhfnxcXF49fCY9fFxcfD18XFwuPXx4PXwlPXxcXC89fFxcKj18XFwtPXxcXCs9fD1+fFxcKlxcKnxcXC1cXC18XFwuXFwufFxcfFxcfHwmJnxcXCtcXCt8XFwtPnwhPXw9PXw+PXw8PXw+Pnw8PHwsfD18XFw/XFw6fFxcXnxcXHx8eHwlfFxcL3xcXCp8PHwmfFxcXFx8fnwhfD58XFwufFxcLXxcXCt8XFwtQ3xcXC1ifFxcLVN8XFwtdXxcXC10fFxcLXB8XFwtbHxcXC1kfFxcLWZ8XFwtZ3xcXC1zfFxcLXp8XFwta3xcXC1lfFxcLU98XFwtVHxcXC1CfFxcLU18XFwtQXxcXC1YfFxcLVd8XFwtY3xcXC1SfFxcLW98XFwteHxcXC13fFxcLXJ8XFxiKD86YW5kfGNtcHxlcXxnZXxndHxsZXxsdHxuZXxub3R8b3J8eG9yKSJ9LHt0b2tlbjoibHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj8iJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfX07ZC5pbmhlcml0cyhnLGYpLGIuUGVybEhpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-pgsql-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvcGdzcWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvcGdzcWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoImFjZS9saWIvb29wIiksZT1hKCJhY2UvbW9kZS90ZXh0IikuTW9kZSxmPWEoImFjZS90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCJhY2UvbW9kZS9wZ3NxbF9oaWdobGlnaHRfcnVsZXMiKS5QZ3NxbEhpZ2hsaWdodFJ1bGVzLGg9YSgiYWNlL3JhbmdlIikuUmFuZ2UsaT1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpfTtkLmluaGVyaXRzKGksZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKiktLS87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBpPW5ldyBoKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2kuc3RhcnQucm93PWcsaS5lbmQucm93PWcsaS5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShpLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIi0tIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPT0ic3RhcnQifHxhPT0ia2V5d29yZC5zdGF0ZW1lbnRFbmQiPyIiOnRoaXMuJGdldEluZGVudChiKX19LmNhbGwoaS5wcm90b3R5cGUpLGIuTW9kZT1pfSksYWNlLmRlZmluZSgiYWNlL21vZGUvcGdzcWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3BlcmxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCJhY2UvbGliL29vcCIpLGU9YSgiYWNlL2xpYi9sYW5nIiksZj1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxnPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL3BlcmxfaGlnaGxpZ2h0X3J1bGVzIikuUGVybEhpZ2hsaWdodFJ1bGVzLGk9YSgiLi9weXRob25faGlnaGxpZ2h0X3J1bGVzIikuUHl0aG9uSGlnaGxpZ2h0UnVsZXMsaj1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYWJvcnR8YWJzb2x1dGV8YWJzdGltZXxhY2Nlc3N8YWNsaXRlbXxhY3Rpb258YWRkfGFkbWlufGFmdGVyfGFnZ3JlZ2F0ZXxhbGx8YWxzb3xhbHRlcnxhbHdheXN8YW5hbHlzZXxhbmFseXplfGFuZHxhbnl8YW55YXJyYXl8YW55ZWxlbWVudHxhbnllbnVtfGFueW5vbmFycmF5fGFycmF5fGFzfGFzY3xhc3NlcnRpb258YXNzaWdubWVudHxhc3ltbWV0cmljfGF0fGF0dHJpYnV0ZXxhdXRob3JpemF0aW9ufGJhY2t3YXJkfGJlZm9yZXxiZWdpbnxiZXR3ZWVufGJpZ2ludHxiaW5hcnl8Yml0fGJvb2x8Ym9vbGVhbnxib3RofGJveHxicGNoYXJ8Ynl8Ynl0ZWF8Y2FjaGV8Y2FsbGVkfGNhc2NhZGV8Y2FzY2FkZWR8Y2FzZXxjYXN0fGNhdGFsb2d8Y2hhaW58Y2hhcnxjaGFyYWN0ZXJ8Y2hhcmFjdGVyaXN0aWNzfGNoZWNrfGNoZWNrcG9pbnR8Y2lkfGNpZHJ8Y2lyY2xlfGNsYXNzfGNsb3NlfGNsdXN0ZXJ8Y29hbGVzY2V8Y29sbGF0ZXxjb2xsYXRpb258Y29sdW1ufGNvbW1lbnR8Y29tbWVudHN8Y29tbWl0fGNvbW1pdHRlZHxjb25jdXJyZW50bHl8Y29uZmlndXJhdGlvbnxjb25uZWN0aW9ufGNvbnN0cmFpbnR8Y29uc3RyYWludHN8Y29udGVudHxjb250aW51ZXxjb252ZXJzaW9ufGNvcHl8Y29zdHxjcmVhdGV8Y3Jvc3N8Y3N0cmluZ3xjc3Z8Y3VycmVudHxjdXJyZW50X2NhdGFsb2d8Y3VycmVudF9kYXRlfGN1cnJlbnRfcm9sZXxjdXJyZW50X3NjaGVtYXxjdXJyZW50X3RpbWV8Y3VycmVudF90aW1lc3RhbXB8Y3VycmVudF91c2VyfGN1cnNvcnxjeWNsZXxkYXRhfGRhdGFiYXNlfGRhdGV8ZGF5fGRlYWxsb2NhdGV8ZGVjfGRlY2ltYWx8ZGVjbGFyZXxkZWZhdWx0fGRlZmF1bHRzfGRlZmVycmFibGV8ZGVmZXJyZWR8ZGVmaW5lcnxkZWxldGV8ZGVsaW1pdGVyfGRlbGltaXRlcnN8ZGVzY3xkaWN0aW9uYXJ5fGRpc2FibGV8ZGlzY2FyZHxkaXN0aW5jdHxkb3xkb2N1bWVudHxkb21haW58ZG91YmxlfGRyb3B8ZWFjaHxlbHNlfGVuYWJsZXxlbmNvZGluZ3xlbmNyeXB0ZWR8ZW5kfGVudW18ZXNjYXBlfGV4Y2VwdHxleGNsdWRlfGV4Y2x1ZGluZ3xleGNsdXNpdmV8ZXhlY3V0ZXxleGlzdHN8ZXhwbGFpbnxleHRlbnNpb258ZXh0ZXJuYWx8ZXh0cmFjdHxmYWxzZXxmYW1pbHl8ZmR3X2hhbmRsZXJ8ZmV0Y2h8Zmlyc3R8ZmxvYXR8ZmxvYXQ0fGZsb2F0OHxmb2xsb3dpbmd8Zm9yfGZvcmNlfGZvcmVpZ258Zm9yd2FyZHxmcmVlemV8ZnJvbXxmdWxsfGZ1bmN0aW9ufGZ1bmN0aW9uc3xnbG9iYWx8Z3JhbnR8Z3JhbnRlZHxncmVhdGVzdHxncm91cHxndHN2ZWN0b3J8aGFuZGxlcnxoYXZpbmd8aGVhZGVyfGhvbGR8aG91cnxpZGVudGl0eXxpZnxpbGlrZXxpbW1lZGlhdGV8aW1tdXRhYmxlfGltcGxpY2l0fGlufGluY2x1ZGluZ3xpbmNyZW1lbnR8aW5kZXh8aW5kZXhlc3xpbmV0fGluaGVyaXR8aW5oZXJpdHN8aW5pdGlhbGx5fGlubGluZXxpbm5lcnxpbm91dHxpbnB1dHxpbnNlbnNpdGl2ZXxpbnNlcnR8aW5zdGVhZHxpbnR8aW50MnxpbnQydmVjdG9yfGludDR8aW50OHxpbnRlZ2VyfGludGVybmFsfGludGVyc2VjdHxpbnRlcnZhbHxpbnRvfGludm9rZXJ8aXN8aXNudWxsfGlzb2xhdGlvbnxqb2lufGtleXxsYWJlbHxsYW5ndWFnZXxsYW5ndWFnZV9oYW5kbGVyfGxhcmdlfGxhc3R8bGNfY29sbGF0ZXxsY19jdHlwZXxsZWFkaW5nfGxlYXN0fGxlZnR8bGV2ZWx8bGlrZXxsaW1pdHxsaW5lfGxpc3Rlbnxsb2FkfGxvY2FsfGxvY2FsdGltZXxsb2NhbHRpbWVzdGFtcHxsb2NhdGlvbnxsb2NrfGxzZWd8bWFjYWRkcnxtYXBwaW5nfG1hdGNofG1heHZhbHVlfG1pbnV0ZXxtaW52YWx1ZXxtb2RlfG1vbmV5fG1vbnRofG1vdmV8bmFtZXxuYW1lc3xuYXRpb25hbHxuYXR1cmFsfG5jaGFyfG5leHR8bm98bm9uZXxub3R8bm90aGluZ3xub3RpZnl8bm90bnVsbHxub3dhaXR8bnVsbHxudWxsaWZ8bnVsbHN8bnVtZXJpY3xvYmplY3R8b2Z8b2ZmfG9mZnNldHxvaWR8b2lkc3xvaWR2ZWN0b3J8b258b25seXxvcGFxdWV8b3BlcmF0b3J8b3B0aW9ufG9wdGlvbnN8b3J8b3JkZXJ8b3V0fG91dGVyfG92ZXJ8b3ZlcmxhcHN8b3ZlcmxheXxvd25lZHxvd25lcnxwYXJzZXJ8cGFydGlhbHxwYXJ0aXRpb258cGFzc2luZ3xwYXNzd29yZHxwYXRofHBnX2F0dHJpYnV0ZXxwZ19hdXRoX21lbWJlcnN8cGdfYXV0aGlkfHBnX2NsYXNzfHBnX2RhdGFiYXNlfHBnX25vZGVfdHJlZXxwZ19wcm9jfHBnX3R5cGV8cGxhY2luZ3xwbGFuc3xwb2ludHxwb2x5Z29ufHBvc2l0aW9ufHByZWNlZGluZ3xwcmVjaXNpb258cHJlcGFyZXxwcmVwYXJlZHxwcmVzZXJ2ZXxwcmltYXJ5fHByaW9yfHByaXZpbGVnZXN8cHJvY2VkdXJhbHxwcm9jZWR1cmV8cXVvdGV8cmFuZ2V8cmVhZHxyZWFsfHJlYXNzaWdufHJlY2hlY2t8cmVjb3JkfHJlY3Vyc2l2ZXxyZWZ8cmVmY3Vyc29yfHJlZmVyZW5jZXN8cmVnY2xhc3N8cmVnY29uZmlnfHJlZ2RpY3Rpb25hcnl8cmVnb3BlcnxyZWdvcGVyYXRvcnxyZWdwcm9jfHJlZ3Byb2NlZHVyZXxyZWd0eXBlfHJlaW5kZXh8cmVsYXRpdmV8cmVsZWFzZXxyZWx0aW1lfHJlbmFtZXxyZXBlYXRhYmxlfHJlcGxhY2V8cmVwbGljYXxyZXNldHxyZXN0YXJ0fHJlc3RyaWN0fHJldHVybmluZ3xyZXR1cm5zfHJldm9rZXxyaWdodHxyb2xlfHJvbGxiYWNrfHJvd3xyb3dzfHJ1bGV8c2F2ZXBvaW50fHNjaGVtYXxzY3JvbGx8c2VhcmNofHNlY29uZHxzZWN1cml0eXxzZWxlY3R8c2VxdWVuY2V8c2VxdWVuY2VzfHNlcmlhbGl6YWJsZXxzZXJ2ZXJ8c2Vzc2lvbnxzZXNzaW9uX3VzZXJ8c2V0fHNldG9mfHNoYXJlfHNob3d8c2ltaWxhcnxzaW1wbGV8c21hbGxpbnR8c21ncnxzb21lfHN0YWJsZXxzdGFuZGFsb25lfHN0YXJ0fHN0YXRlbWVudHxzdGF0aXN0aWNzfHN0ZGlufHN0ZG91dHxzdG9yYWdlfHN0cmljdHxzdHJpcHxzdWJzdHJpbmd8c3ltbWV0cmljfHN5c2lkfHN5c3RlbXx0YWJsZXx0YWJsZXN8dGFibGVzcGFjZXx0ZW1wfHRlbXBsYXRlfHRlbXBvcmFyeXx0ZXh0fHRoZW58dGlkfHRpbWV8dGltZXN0YW1wfHRpbWVzdGFtcHR6fHRpbWV0enx0aW50ZXJ2YWx8dG98dHJhaWxpbmd8dHJhbnNhY3Rpb258dHJlYXR8dHJpZ2dlcnx0cmltfHRydWV8dHJ1bmNhdGV8dHJ1c3RlZHx0c3F1ZXJ5fHRzdmVjdG9yfHR4aWRfc25hcHNob3R8dHlwZXx1bmJvdW5kZWR8dW5jb21taXR0ZWR8dW5lbmNyeXB0ZWR8dW5pb258dW5pcXVlfHVua25vd258dW5saXN0ZW58dW5sb2dnZWR8dW50aWx8dXBkYXRlfHVzZXJ8dXNpbmd8dXVpZHx2YWN1dW18dmFsaWR8dmFsaWRhdGV8dmFsaWRhdG9yfHZhbHVlfHZhbHVlc3x2YXJiaXR8dmFyY2hhcnx2YXJpYWRpY3x2YXJ5aW5nfHZlcmJvc2V8dmVyc2lvbnx2aWV3fHZvaWR8dm9sYXRpbGV8d2hlbnx3aGVyZXx3aGl0ZXNwYWNlfHdpbmRvd3x3aXRofHdpdGhvdXR8d29ya3x3cmFwcGVyfHdyaXRlfHhpZHx4bWx8eG1sYXR0cmlidXRlc3x4bWxjb25jYXR8eG1sZWxlbWVudHx4bWxleGlzdHN8eG1sZm9yZXN0fHhtbHBhcnNlfHhtbHBpfHhtbHJvb3R8eG1sc2VyaWFsaXplfHllYXJ8eWVzfHpvbmUiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJSSV9GS2V5X2Nhc2NhZGVfZGVsfFJJX0ZLZXlfY2FzY2FkZV91cGR8UklfRktleV9jaGVja19pbnN8UklfRktleV9jaGVja191cGR8UklfRktleV9ub2FjdGlvbl9kZWx8UklfRktleV9ub2FjdGlvbl91cGR8UklfRktleV9yZXN0cmljdF9kZWx8UklfRktleV9yZXN0cmljdF91cGR8UklfRktleV9zZXRkZWZhdWx0X2RlbHxSSV9GS2V5X3NldGRlZmF1bHRfdXBkfFJJX0ZLZXlfc2V0bnVsbF9kZWx8UklfRktleV9zZXRudWxsX3VwZHxhYmJyZXZ8YWJzfGFic3RpbWV8YWJzdGltZWVxfGFic3RpbWVnZXxhYnN0aW1lZ3R8YWJzdGltZWlufGFic3RpbWVsZXxhYnN0aW1lbHR8YWJzdGltZW5lfGFic3RpbWVvdXR8YWJzdGltZXJlY3Z8YWJzdGltZXNlbmR8YWNsY29udGFpbnN8YWNsZXhwbG9kZXxhY2xpbnNlcnR8YWNsaXRlbWVxfGFjbGl0ZW1pbnxhY2xpdGVtb3V0fGFjbHJlbW92ZXxhY29zfGFnZXxhbnlfaW58YW55X291dHxhbnlhcnJheV9pbnxhbnlhcnJheV9vdXR8YW55YXJyYXlfcmVjdnxhbnlhcnJheV9zZW5kfGFueWVsZW1lbnRfaW58YW55ZWxlbWVudF9vdXR8YW55ZW51bV9pbnxhbnllbnVtX291dHxhbnlub25hcnJheV9pbnxhbnlub25hcnJheV9vdXR8YW55dGV4dGNhdHxhcmVhfGFyZWFqb2luc2VsfGFyZWFzZWx8YXJyYXlfYWdnfGFycmF5X2FnZ19maW5hbGZufGFycmF5X2FnZ190cmFuc2ZufGFycmF5X2FwcGVuZHxhcnJheV9jYXR8YXJyYXlfZGltc3xhcnJheV9lcXxhcnJheV9maWxsfGFycmF5X2dlfGFycmF5X2d0fGFycmF5X2lufGFycmF5X2xhcmdlcnxhcnJheV9sZXxhcnJheV9sZW5ndGh8YXJyYXlfbG93ZXJ8YXJyYXlfbHR8YXJyYXlfbmRpbXN8YXJyYXlfbmV8YXJyYXlfb3V0fGFycmF5X3ByZXBlbmR8YXJyYXlfcmVjdnxhcnJheV9zZW5kfGFycmF5X3NtYWxsZXJ8YXJyYXlfdG9fc3RyaW5nfGFycmF5X3VwcGVyfGFycmF5Y29udGFpbmVkfGFycmF5Y29udGFpbnN8YXJyYXlvdmVybGFwfGFzY2lpfGFzY2lpX3RvX21pY3xhc2NpaV90b191dGY4fGFzaW58YXRhbnxhdGFuMnxhdmd8YmlnNV90b19ldWNfdHd8YmlnNV90b19taWN8YmlnNV90b191dGY4fGJpdF9hbmR8Yml0X2lufGJpdF9sZW5ndGh8Yml0X29yfGJpdF9vdXR8Yml0X3JlY3Z8Yml0X3NlbmR8Yml0YW5kfGJpdGNhdHxiaXRjbXB8Yml0ZXF8Yml0Z2V8Yml0Z3R8Yml0bGV8Yml0bHR8Yml0bmV8Yml0bm90fGJpdG9yfGJpdHNoaWZ0bGVmdHxiaXRzaGlmdHJpZ2h0fGJpdHR5cG1vZGlufGJpdHR5cG1vZG91dHxiaXR4b3J8Ym9vbHxib29sX2FuZHxib29sX29yfGJvb2xhbmRfc3RhdGVmdW5jfGJvb2xlcXxib29sZ2V8Ym9vbGd0fGJvb2xpbnxib29sbGV8Ym9vbGx0fGJvb2xuZXxib29sb3Jfc3RhdGVmdW5jfGJvb2xvdXR8Ym9vbHJlY3Z8Ym9vbHNlbmR8Ym94fGJveF9hYm92ZXxib3hfYWJvdmVfZXF8Ym94X2FkZHxib3hfYmVsb3d8Ym94X2JlbG93X2VxfGJveF9jZW50ZXJ8Ym94X2NvbnRhaW58Ym94X2NvbnRhaW5fcHR8Ym94X2NvbnRhaW5lZHxib3hfZGlzdGFuY2V8Ym94X2Rpdnxib3hfZXF8Ym94X2dlfGJveF9ndHxib3hfaW58Ym94X2ludGVyc2VjdHxib3hfbGV8Ym94X2xlZnR8Ym94X2x0fGJveF9tdWx8Ym94X291dHxib3hfb3ZlcmFib3ZlfGJveF9vdmVyYmVsb3d8Ym94X292ZXJsYXB8Ym94X292ZXJsZWZ0fGJveF9vdmVycmlnaHR8Ym94X3JlY3Z8Ym94X3JpZ2h0fGJveF9zYW1lfGJveF9zZW5kfGJveF9zdWJ8YnBjaGFyX2xhcmdlcnxicGNoYXJfcGF0dGVybl9nZXxicGNoYXJfcGF0dGVybl9ndHxicGNoYXJfcGF0dGVybl9sZXxicGNoYXJfcGF0dGVybl9sdHxicGNoYXJfc21hbGxlcnxicGNoYXJjbXB8YnBjaGFyZXF8YnBjaGFyZ2V8YnBjaGFyZ3R8YnBjaGFyaWNsaWtlfGJwY2hhcmljbmxpa2V8YnBjaGFyaWNyZWdleGVxfGJwY2hhcmljcmVnZXhuZXxicGNoYXJpbnxicGNoYXJsZXxicGNoYXJsaWtlfGJwY2hhcmx0fGJwY2hhcm5lfGJwY2hhcm5saWtlfGJwY2hhcm91dHxicGNoYXJyZWN2fGJwY2hhcnJlZ2V4ZXF8YnBjaGFycmVnZXhuZXxicGNoYXJzZW5kfGJwY2hhcnR5cG1vZGlufGJwY2hhcnR5cG1vZG91dHxicm9hZGNhc3R8YnRhYnN0aW1lY21wfGJ0YXJyYXljbXB8YnRiZWdpbnNjYW58YnRib29sY21wfGJ0YnBjaGFyX3BhdHRlcm5fY21wfGJ0YnVpbGR8YnRidWlsZGVtcHR5fGJ0YnVsa2RlbGV0ZXxidGNoYXJjbXB8YnRjb3N0ZXN0aW1hdGV8YnRlbmRzY2FufGJ0ZmxvYXQ0OGNtcHxidGZsb2F0NGNtcHxidGZsb2F0ODRjbXB8YnRmbG9hdDhjbXB8YnRnZXRiaXRtYXB8YnRnZXR0dXBsZXxidGluc2VydHxidGludDI0Y21wfGJ0aW50MjhjbXB8YnRpbnQyY21wfGJ0aW50NDJjbXB8YnRpbnQ0OGNtcHxidGludDRjbXB8YnRpbnQ4MmNtcHxidGludDg0Y21wfGJ0aW50OGNtcHxidG1hcmtwb3N8YnRuYW1lY21wfGJ0b2lkY21wfGJ0b2lkdmVjdG9yY21wfGJ0b3B0aW9uc3xidHJlY29yZGNtcHxidHJlbHRpbWVjbXB8YnRyZXNjYW58YnRyZXN0cnBvc3xidHJpbXxidHRleHRfcGF0dGVybl9jbXB8YnR0ZXh0Y21wfGJ0dGlkY21wfGJ0dGludGVydmFsY21wfGJ0dmFjdXVtY2xlYW51cHxieXRlYWNhdHxieXRlYWNtcHxieXRlYWVxfGJ5dGVhZ2V8Ynl0ZWFndHxieXRlYWlufGJ5dGVhbGV8Ynl0ZWFsaWtlfGJ5dGVhbHR8Ynl0ZWFuZXxieXRlYW5saWtlfGJ5dGVhb3V0fGJ5dGVhcmVjdnxieXRlYXNlbmR8Y2FzaF9jbXB8Y2FzaF9kaXZfY2FzaHxjYXNoX2Rpdl9mbHQ0fGNhc2hfZGl2X2ZsdDh8Y2FzaF9kaXZfaW50MnxjYXNoX2Rpdl9pbnQ0fGNhc2hfZXF8Y2FzaF9nZXxjYXNoX2d0fGNhc2hfaW58Y2FzaF9sZXxjYXNoX2x0fGNhc2hfbWl8Y2FzaF9tdWxfZmx0NHxjYXNoX211bF9mbHQ4fGNhc2hfbXVsX2ludDJ8Y2FzaF9tdWxfaW50NHxjYXNoX25lfGNhc2hfb3V0fGNhc2hfcGx8Y2FzaF9yZWN2fGNhc2hfc2VuZHxjYXNoX3dvcmRzfGNhc2hsYXJnZXJ8Y2FzaHNtYWxsZXJ8Y2JydHxjZWlsfGNlaWxpbmd8Y2VudGVyfGNoYXJ8Y2hhcl9sZW5ndGh8Y2hhcmFjdGVyX2xlbmd0aHxjaGFyZXF8Y2hhcmdlfGNoYXJndHxjaGFyaW58Y2hhcmxlfGNoYXJsdHxjaGFybmV8Y2hhcm91dHxjaGFycmVjdnxjaGFyc2VuZHxjaHJ8Y2lkZXF8Y2lkaW58Y2lkb3V0fGNpZHJ8Y2lkcl9pbnxjaWRyX291dHxjaWRyX3JlY3Z8Y2lkcl9zZW5kfGNpZHJlY3Z8Y2lkc2VuZHxjaXJjbGV8Y2lyY2xlX2Fib3ZlfGNpcmNsZV9hZGRfcHR8Y2lyY2xlX2JlbG93fGNpcmNsZV9jZW50ZXJ8Y2lyY2xlX2NvbnRhaW58Y2lyY2xlX2NvbnRhaW5fcHR8Y2lyY2xlX2NvbnRhaW5lZHxjaXJjbGVfZGlzdGFuY2V8Y2lyY2xlX2Rpdl9wdHxjaXJjbGVfZXF8Y2lyY2xlX2dlfGNpcmNsZV9ndHxjaXJjbGVfaW58Y2lyY2xlX2xlfGNpcmNsZV9sZWZ0fGNpcmNsZV9sdHxjaXJjbGVfbXVsX3B0fGNpcmNsZV9uZXxjaXJjbGVfb3V0fGNpcmNsZV9vdmVyYWJvdmV8Y2lyY2xlX292ZXJiZWxvd3xjaXJjbGVfb3ZlcmxhcHxjaXJjbGVfb3ZlcmxlZnR8Y2lyY2xlX292ZXJyaWdodHxjaXJjbGVfcmVjdnxjaXJjbGVfcmlnaHR8Y2lyY2xlX3NhbWV8Y2lyY2xlX3NlbmR8Y2lyY2xlX3N1Yl9wdHxjbG9ja190aW1lc3RhbXB8Y2xvc2VfbGJ8Y2xvc2VfbHN8Y2xvc2VfbHNlZ3xjbG9zZV9wYnxjbG9zZV9wbHxjbG9zZV9wc3xjbG9zZV9zYnxjbG9zZV9zbHxjb2xfZGVzY3JpcHRpb258Y29uY2F0fGNvbmNhdF93c3xjb250am9pbnNlbHxjb250c2VsfGNvbnZlcnR8Y29udmVydF9mcm9tfGNvbnZlcnRfdG98Y29ycnxjb3N8Y290fGNvdW50fGNvdmFyX3BvcHxjb3Zhcl9zYW1wfGNzdHJpbmdfaW58Y3N0cmluZ19vdXR8Y3N0cmluZ19yZWN2fGNzdHJpbmdfc2VuZHxjdW1lX2Rpc3R8Y3VycmVudF9kYXRhYmFzZXxjdXJyZW50X3F1ZXJ5fGN1cnJlbnRfc2NoZW1hfGN1cnJlbnRfc2NoZW1hc3xjdXJyZW50X3NldHRpbmd8Y3VycmVudF91c2VyfGN1cnJ0aWR8Y3VycnRpZDJ8Y3VycnZhbHxjdXJzb3JfdG9feG1sfGN1cnNvcl90b194bWxzY2hlbWF8ZGF0YWJhc2VfdG9feG1sfGRhdGFiYXNlX3RvX3htbF9hbmRfeG1sc2NoZW1hfGRhdGFiYXNlX3RvX3htbHNjaGVtYXxkYXRlfGRhdGVfY21wfGRhdGVfY21wX3RpbWVzdGFtcHxkYXRlX2NtcF90aW1lc3RhbXB0enxkYXRlX2VxfGRhdGVfZXFfdGltZXN0YW1wfGRhdGVfZXFfdGltZXN0YW1wdHp8ZGF0ZV9nZXxkYXRlX2dlX3RpbWVzdGFtcHxkYXRlX2dlX3RpbWVzdGFtcHR6fGRhdGVfZ3R8ZGF0ZV9ndF90aW1lc3RhbXB8ZGF0ZV9ndF90aW1lc3RhbXB0enxkYXRlX2lufGRhdGVfbGFyZ2VyfGRhdGVfbGV8ZGF0ZV9sZV90aW1lc3RhbXB8ZGF0ZV9sZV90aW1lc3RhbXB0enxkYXRlX2x0fGRhdGVfbHRfdGltZXN0YW1wfGRhdGVfbHRfdGltZXN0YW1wdHp8ZGF0ZV9taXxkYXRlX21pX2ludGVydmFsfGRhdGVfbWlpfGRhdGVfbmV8ZGF0ZV9uZV90aW1lc3RhbXB8ZGF0ZV9uZV90aW1lc3RhbXB0enxkYXRlX291dHxkYXRlX3BhcnR8ZGF0ZV9wbF9pbnRlcnZhbHxkYXRlX3BsaXxkYXRlX3JlY3Z8ZGF0ZV9zZW5kfGRhdGVfc21hbGxlcnxkYXRlX3RydW5jfGRhdGV0aW1lX3BsfGRhdGV0aW1ldHpfcGx8ZGNicnR8ZGVjb2RlfGRlZ3JlZXN8ZGVuc2VfcmFua3xkZXhwfGRpYWdvbmFsfGRpYW1ldGVyfGRpc3BlbGxfaW5pdHxkaXNwZWxsX2xleGl6ZXxkaXN0X2Nwb2x5fGRpc3RfbGJ8ZGlzdF9wYnxkaXN0X3BjfGRpc3RfcGx8ZGlzdF9wcGF0aHxkaXN0X3BzfGRpc3Rfc2J8ZGlzdF9zbHxkaXZ8ZGxvZzF8ZGxvZzEwfGRvbWFpbl9pbnxkb21haW5fcmVjdnxkcG93fGRyb3VuZHxkc2ltcGxlX2luaXR8ZHNpbXBsZV9sZXhpemV8ZHNub3diYWxsX2luaXR8ZHNub3diYWxsX2xleGl6ZXxkc3FydHxkc3lub255bV9pbml0fGRzeW5vbnltX2xleGl6ZXxkdHJ1bmN8ZW5jb2RlfGVudW1fY21wfGVudW1fZXF8ZW51bV9maXJzdHxlbnVtX2dlfGVudW1fZ3R8ZW51bV9pbnxlbnVtX2xhcmdlcnxlbnVtX2xhc3R8ZW51bV9sZXxlbnVtX2x0fGVudW1fbmV8ZW51bV9vdXR8ZW51bV9yYW5nZXxlbnVtX3JlY3Z8ZW51bV9zZW5kfGVudW1fc21hbGxlcnxlcWpvaW5zZWx8ZXFzZWx8ZXVjX2NuX3RvX21pY3xldWNfY25fdG9fdXRmOHxldWNfamlzXzIwMDRfdG9fc2hpZnRfamlzXzIwMDR8ZXVjX2ppc18yMDA0X3RvX3V0Zjh8ZXVjX2pwX3RvX21pY3xldWNfanBfdG9fc2ppc3xldWNfanBfdG9fdXRmOHxldWNfa3JfdG9fbWljfGV1Y19rcl90b191dGY4fGV1Y190d190b19iaWc1fGV1Y190d190b19taWN8ZXVjX3R3X3RvX3V0Zjh8ZXZlcnl8ZXhwfGZhY3RvcmlhbHxmYW1pbHl8ZmR3X2hhbmRsZXJfaW58ZmR3X2hhbmRsZXJfb3V0fGZpcnN0X3ZhbHVlfGZsb2F0NHxmbG9hdDQ4ZGl2fGZsb2F0NDhlcXxmbG9hdDQ4Z2V8ZmxvYXQ0OGd0fGZsb2F0NDhsZXxmbG9hdDQ4bHR8ZmxvYXQ0OG1pfGZsb2F0NDhtdWx8ZmxvYXQ0OG5lfGZsb2F0NDhwbHxmbG9hdDRfYWNjdW18ZmxvYXQ0YWJzfGZsb2F0NGRpdnxmbG9hdDRlcXxmbG9hdDRnZXxmbG9hdDRndHxmbG9hdDRpbnxmbG9hdDRsYXJnZXJ8ZmxvYXQ0bGV8ZmxvYXQ0bHR8ZmxvYXQ0bWl8ZmxvYXQ0bXVsfGZsb2F0NG5lfGZsb2F0NG91dHxmbG9hdDRwbHxmbG9hdDRyZWN2fGZsb2F0NHNlbmR8ZmxvYXQ0c21hbGxlcnxmbG9hdDR1bXxmbG9hdDR1cHxmbG9hdDh8ZmxvYXQ4NGRpdnxmbG9hdDg0ZXF8ZmxvYXQ4NGdlfGZsb2F0ODRndHxmbG9hdDg0bGV8ZmxvYXQ4NGx0fGZsb2F0ODRtaXxmbG9hdDg0bXVsfGZsb2F0ODRuZXxmbG9hdDg0cGx8ZmxvYXQ4X2FjY3VtfGZsb2F0OF9hdmd8ZmxvYXQ4X2NvcnJ8ZmxvYXQ4X2NvdmFyX3BvcHxmbG9hdDhfY292YXJfc2FtcHxmbG9hdDhfcmVncl9hY2N1bXxmbG9hdDhfcmVncl9hdmd4fGZsb2F0OF9yZWdyX2F2Z3l8ZmxvYXQ4X3JlZ3JfaW50ZXJjZXB0fGZsb2F0OF9yZWdyX3IyfGZsb2F0OF9yZWdyX3Nsb3BlfGZsb2F0OF9yZWdyX3N4eHxmbG9hdDhfcmVncl9zeHl8ZmxvYXQ4X3JlZ3Jfc3l5fGZsb2F0OF9zdGRkZXZfcG9wfGZsb2F0OF9zdGRkZXZfc2FtcHxmbG9hdDhfdmFyX3BvcHxmbG9hdDhfdmFyX3NhbXB8ZmxvYXQ4YWJzfGZsb2F0OGRpdnxmbG9hdDhlcXxmbG9hdDhnZXxmbG9hdDhndHxmbG9hdDhpbnxmbG9hdDhsYXJnZXJ8ZmxvYXQ4bGV8ZmxvYXQ4bHR8ZmxvYXQ4bWl8ZmxvYXQ4bXVsfGZsb2F0OG5lfGZsb2F0OG91dHxmbG9hdDhwbHxmbG9hdDhyZWN2fGZsb2F0OHNlbmR8ZmxvYXQ4c21hbGxlcnxmbG9hdDh1bXxmbG9hdDh1cHxmbG9vcnxmbHQ0X211bF9jYXNofGZsdDhfbXVsX2Nhc2h8Zm1ncl9jX3ZhbGlkYXRvcnxmbWdyX2ludGVybmFsX3ZhbGlkYXRvcnxmbWdyX3NxbF92YWxpZGF0b3J8Zm9ybWF0fGZvcm1hdF90eXBlfGdiMTgwMzBfdG9fdXRmOHxnYmtfdG9fdXRmOHxnZW5lcmF0ZV9zZXJpZXN8Z2VuZXJhdGVfc3Vic2NyaXB0c3xnZXRfYml0fGdldF9ieXRlfGdldF9jdXJyZW50X3RzX2NvbmZpZ3xnZXRkYXRhYmFzZWVuY29kaW5nfGdldHBndXNlcm5hbWV8Z2luX2NtcF9wcmVmaXh8Z2luX2NtcF90c2xleGVtZXxnaW5fZXh0cmFjdF90c3F1ZXJ5fGdpbl9leHRyYWN0X3RzdmVjdG9yfGdpbl90c3F1ZXJ5X2NvbnNpc3RlbnR8Z2luYXJyYXljb25zaXN0ZW50fGdpbmFycmF5ZXh0cmFjdHxnaW5iZWdpbnNjYW58Z2luYnVpbGR8Z2luYnVpbGRlbXB0eXxnaW5idWxrZGVsZXRlfGdpbmNvc3Rlc3RpbWF0ZXxnaW5lbmRzY2FufGdpbmdldGJpdG1hcHxnaW5pbnNlcnR8Z2lubWFya3Bvc3xnaW5vcHRpb25zfGdpbnF1ZXJ5YXJyYXlleHRyYWN0fGdpbnJlc2NhbnxnaW5yZXN0cnBvc3xnaW52YWN1dW1jbGVhbnVwfGdpc3RfYm94X2NvbXByZXNzfGdpc3RfYm94X2NvbnNpc3RlbnR8Z2lzdF9ib3hfZGVjb21wcmVzc3xnaXN0X2JveF9wZW5hbHR5fGdpc3RfYm94X3BpY2tzcGxpdHxnaXN0X2JveF9zYW1lfGdpc3RfYm94X3VuaW9ufGdpc3RfY2lyY2xlX2NvbXByZXNzfGdpc3RfY2lyY2xlX2NvbnNpc3RlbnR8Z2lzdF9wb2ludF9jb21wcmVzc3xnaXN0X3BvaW50X2NvbnNpc3RlbnR8Z2lzdF9wb2ludF9kaXN0YW5jZXxnaXN0X3BvbHlfY29tcHJlc3N8Z2lzdF9wb2x5X2NvbnNpc3RlbnR8Z2lzdGJlZ2luc2NhbnxnaXN0YnVpbGR8Z2lzdGJ1aWxkZW1wdHl8Z2lzdGJ1bGtkZWxldGV8Z2lzdGNvc3Rlc3RpbWF0ZXxnaXN0ZW5kc2NhbnxnaXN0Z2V0Yml0bWFwfGdpc3RnZXR0dXBsZXxnaXN0aW5zZXJ0fGdpc3RtYXJrcG9zfGdpc3RvcHRpb25zfGdpc3RyZXNjYW58Z2lzdHJlc3RycG9zfGdpc3R2YWN1dW1jbGVhbnVwfGd0c3F1ZXJ5X2NvbXByZXNzfGd0c3F1ZXJ5X2NvbnNpc3RlbnR8Z3RzcXVlcnlfZGVjb21wcmVzc3xndHNxdWVyeV9wZW5hbHR5fGd0c3F1ZXJ5X3BpY2tzcGxpdHxndHNxdWVyeV9zYW1lfGd0c3F1ZXJ5X3VuaW9ufGd0c3ZlY3Rvcl9jb21wcmVzc3xndHN2ZWN0b3JfY29uc2lzdGVudHxndHN2ZWN0b3JfZGVjb21wcmVzc3xndHN2ZWN0b3JfcGVuYWx0eXxndHN2ZWN0b3JfcGlja3NwbGl0fGd0c3ZlY3Rvcl9zYW1lfGd0c3ZlY3Rvcl91bmlvbnxndHN2ZWN0b3JpbnxndHN2ZWN0b3JvdXR8aGFzX2FueV9jb2x1bW5fcHJpdmlsZWdlfGhhc19jb2x1bW5fcHJpdmlsZWdlfGhhc19kYXRhYmFzZV9wcml2aWxlZ2V8aGFzX2ZvcmVpZ25fZGF0YV93cmFwcGVyX3ByaXZpbGVnZXxoYXNfZnVuY3Rpb25fcHJpdmlsZWdlfGhhc19sYW5ndWFnZV9wcml2aWxlZ2V8aGFzX3NjaGVtYV9wcml2aWxlZ2V8aGFzX3NlcXVlbmNlX3ByaXZpbGVnZXxoYXNfc2VydmVyX3ByaXZpbGVnZXxoYXNfdGFibGVfcHJpdmlsZWdlfGhhc190YWJsZXNwYWNlX3ByaXZpbGVnZXxoYXNoX2FjbGl0ZW18aGFzaF9hcnJheXxoYXNoX251bWVyaWN8aGFzaGJlZ2luc2NhbnxoYXNoYnBjaGFyfGhhc2hidWlsZHxoYXNoYnVpbGRlbXB0eXxoYXNoYnVsa2RlbGV0ZXxoYXNoY2hhcnxoYXNoY29zdGVzdGltYXRlfGhhc2hlbmRzY2FufGhhc2hlbnVtfGhhc2hmbG9hdDR8aGFzaGZsb2F0OHxoYXNoZ2V0Yml0bWFwfGhhc2hnZXR0dXBsZXxoYXNoaW5ldHxoYXNoaW5zZXJ0fGhhc2hpbnQyfGhhc2hpbnQydmVjdG9yfGhhc2hpbnQ0fGhhc2hpbnQ4fGhhc2htYWNhZGRyfGhhc2htYXJrcG9zfGhhc2huYW1lfGhhc2hvaWR8aGFzaG9pZHZlY3RvcnxoYXNob3B0aW9uc3xoYXNocmVzY2FufGhhc2hyZXN0cnBvc3xoYXNodGV4dHxoYXNodmFjdXVtY2xlYW51cHxoYXNodmFybGVuYXxoZWlnaHR8aG9zdHxob3N0bWFza3xpY2xpa2Vqb2luc2VsfGljbGlrZXNlbHxpY25saWtlam9pbnNlbHxpY25saWtlc2VsfGljcmVnZXhlcWpvaW5zZWx8aWNyZWdleGVxc2VsfGljcmVnZXhuZWpvaW5zZWx8aWNyZWdleG5lc2VsfGluZXRfY2xpZW50X2FkZHJ8aW5ldF9jbGllbnRfcG9ydHxpbmV0X2lufGluZXRfb3V0fGluZXRfcmVjdnxpbmV0X3NlbmR8aW5ldF9zZXJ2ZXJfYWRkcnxpbmV0X3NlcnZlcl9wb3J0fGluZXRhbmR8aW5ldG1pfGluZXRtaV9pbnQ4fGluZXRub3R8aW5ldG9yfGluZXRwbHxpbml0Y2FwfGludDJ8aW50MjRkaXZ8aW50MjRlcXxpbnQyNGdlfGludDI0Z3R8aW50MjRsZXxpbnQyNGx0fGludDI0bWl8aW50MjRtdWx8aW50MjRuZXxpbnQyNHBsfGludDI4ZGl2fGludDI4ZXF8aW50MjhnZXxpbnQyOGd0fGludDI4bGV8aW50MjhsdHxpbnQyOG1pfGludDI4bXVsfGludDI4bmV8aW50MjhwbHxpbnQyX2FjY3VtfGludDJfYXZnX2FjY3VtfGludDJfbXVsX2Nhc2h8aW50Ml9zdW18aW50MmFic3xpbnQyYW5kfGludDJkaXZ8aW50MmVxfGludDJnZXxpbnQyZ3R8aW50MmlufGludDJsYXJnZXJ8aW50MmxlfGludDJsdHxpbnQybWl8aW50Mm1vZHxpbnQybXVsfGludDJuZXxpbnQybm90fGludDJvcnxpbnQyb3V0fGludDJwbHxpbnQycmVjdnxpbnQyc2VuZHxpbnQyc2hsfGludDJzaHJ8aW50MnNtYWxsZXJ8aW50MnVtfGludDJ1cHxpbnQydmVjdG9yZXF8aW50MnZlY3RvcmlufGludDJ2ZWN0b3JvdXR8aW50MnZlY3RvcnJlY3Z8aW50MnZlY3RvcnNlbmR8aW50MnhvcnxpbnQ0fGludDQyZGl2fGludDQyZXF8aW50NDJnZXxpbnQ0Mmd0fGludDQybGV8aW50NDJsdHxpbnQ0Mm1pfGludDQybXVsfGludDQybmV8aW50NDJwbHxpbnQ0OGRpdnxpbnQ0OGVxfGludDQ4Z2V8aW50NDhndHxpbnQ0OGxlfGludDQ4bHR8aW50NDhtaXxpbnQ0OG11bHxpbnQ0OG5lfGludDQ4cGx8aW50NF9hY2N1bXxpbnQ0X2F2Z19hY2N1bXxpbnQ0X211bF9jYXNofGludDRfc3VtfGludDRhYnN8aW50NGFuZHxpbnQ0ZGl2fGludDRlcXxpbnQ0Z2V8aW50NGd0fGludDRpbnxpbnQ0aW5jfGludDRsYXJnZXJ8aW50NGxlfGludDRsdHxpbnQ0bWl8aW50NG1vZHxpbnQ0bXVsfGludDRuZXxpbnQ0bm90fGludDRvcnxpbnQ0b3V0fGludDRwbHxpbnQ0cmVjdnxpbnQ0c2VuZHxpbnQ0c2hsfGludDRzaHJ8aW50NHNtYWxsZXJ8aW50NHVtfGludDR1cHxpbnQ0eG9yfGludDh8aW50ODJkaXZ8aW50ODJlcXxpbnQ4MmdlfGludDgyZ3R8aW50ODJsZXxpbnQ4Mmx0fGludDgybWl8aW50ODJtdWx8aW50ODJuZXxpbnQ4MnBsfGludDg0ZGl2fGludDg0ZXF8aW50ODRnZXxpbnQ4NGd0fGludDg0bGV8aW50ODRsdHxpbnQ4NG1pfGludDg0bXVsfGludDg0bmV8aW50ODRwbHxpbnQ4X2FjY3VtfGludDhfYXZnfGludDhfYXZnX2FjY3VtfGludDhfc3VtfGludDhhYnN8aW50OGFuZHxpbnQ4ZGl2fGludDhlcXxpbnQ4Z2V8aW50OGd0fGludDhpbnxpbnQ4aW5jfGludDhpbmNfYW55fGludDhpbmNfZmxvYXQ4X2Zsb2F0OHxpbnQ4bGFyZ2VyfGludDhsZXxpbnQ4bHR8aW50OG1pfGludDhtb2R8aW50OG11bHxpbnQ4bmV8aW50OG5vdHxpbnQ4b3J8aW50OG91dHxpbnQ4cGx8aW50OHBsX2luZXR8aW50OHJlY3Z8aW50OHNlbmR8aW50OHNobHxpbnQ4c2hyfGludDhzbWFsbGVyfGludDh1bXxpbnQ4dXB8aW50OHhvcnxpbnRlZ2VyX3BsX2RhdGV8aW50ZXJfbGJ8aW50ZXJfc2J8aW50ZXJfc2x8aW50ZXJuYWxfaW58aW50ZXJuYWxfb3V0fGludGVydmFsX2FjY3VtfGludGVydmFsX2F2Z3xpbnRlcnZhbF9jbXB8aW50ZXJ2YWxfZGl2fGludGVydmFsX2VxfGludGVydmFsX2dlfGludGVydmFsX2d0fGludGVydmFsX2hhc2h8aW50ZXJ2YWxfaW58aW50ZXJ2YWxfbGFyZ2VyfGludGVydmFsX2xlfGludGVydmFsX2x0fGludGVydmFsX21pfGludGVydmFsX211bHxpbnRlcnZhbF9uZXxpbnRlcnZhbF9vdXR8aW50ZXJ2YWxfcGx8aW50ZXJ2YWxfcGxfZGF0ZXxpbnRlcnZhbF9wbF90aW1lfGludGVydmFsX3BsX3RpbWVzdGFtcHxpbnRlcnZhbF9wbF90aW1lc3RhbXB0enxpbnRlcnZhbF9wbF90aW1ldHp8aW50ZXJ2YWxfcmVjdnxpbnRlcnZhbF9zZW5kfGludGVydmFsX3NtYWxsZXJ8aW50ZXJ2YWxfdW18aW50ZXJ2YWx0eXBtb2RpbnxpbnRlcnZhbHR5cG1vZG91dHxpbnRpbnRlcnZhbHxpc2Nsb3NlZHxpc2Zpbml0ZXxpc2hvcml6b250YWx8aXNvODg1OV8xX3RvX3V0Zjh8aXNvODg1OV90b191dGY4fGlzb190b19rb2k4cnxpc29fdG9fbWljfGlzb190b193aW4xMjUxfGlzb190b193aW44NjZ8aXNvcGVufGlzcGFyYWxsZWx8aXNwZXJwfGlzdmVydGljYWx8am9oYWJfdG9fdXRmOHxqdXN0aWZ5X2RheXN8anVzdGlmeV9ob3Vyc3xqdXN0aWZ5X2ludGVydmFsfGtvaThyX3RvX2lzb3xrb2k4cl90b19taWN8a29pOHJfdG9fdXRmOHxrb2k4cl90b193aW4xMjUxfGtvaThyX3RvX3dpbjg2Nnxrb2k4dV90b191dGY4fGxhZ3xsYW5ndWFnZV9oYW5kbGVyX2lufGxhbmd1YWdlX2hhbmRsZXJfb3V0fGxhc3RfdmFsdWV8bGFzdHZhbHxsYXRpbjFfdG9fbWljfGxhdGluMl90b19taWN8bGF0aW4yX3RvX3dpbjEyNTB8bGF0aW4zX3RvX21pY3xsYXRpbjRfdG9fbWljfGxlYWR8bGVmdHxsZW5ndGh8bGlrZXxsaWtlX2VzY2FwZXxsaWtlam9pbnNlbHxsaWtlc2VsfGxpbmV8bGluZV9kaXN0YW5jZXxsaW5lX2VxfGxpbmVfaG9yaXpvbnRhbHxsaW5lX2lufGxpbmVfaW50ZXJwdHxsaW5lX2ludGVyc2VjdHxsaW5lX291dHxsaW5lX3BhcmFsbGVsfGxpbmVfcGVycHxsaW5lX3JlY3Z8bGluZV9zZW5kfGxpbmVfdmVydGljYWx8bG58bG9fY2xvc2V8bG9fY3JlYXR8bG9fY3JlYXRlfGxvX2V4cG9ydHxsb19pbXBvcnR8bG9fbHNlZWt8bG9fb3Blbnxsb190ZWxsfGxvX3RydW5jYXRlfGxvX3VubGlua3xsb2d8bG9yZWFkfGxvd2VyfGxvd3JpdGV8bHBhZHxsc2VnfGxzZWdfY2VudGVyfGxzZWdfZGlzdGFuY2V8bHNlZ19lcXxsc2VnX2dlfGxzZWdfZ3R8bHNlZ19ob3Jpem9udGFsfGxzZWdfaW58bHNlZ19pbnRlcnB0fGxzZWdfaW50ZXJzZWN0fGxzZWdfbGV8bHNlZ19sZW5ndGh8bHNlZ19sdHxsc2VnX25lfGxzZWdfb3V0fGxzZWdfcGFyYWxsZWx8bHNlZ19wZXJwfGxzZWdfcmVjdnxsc2VnX3NlbmR8bHNlZ192ZXJ0aWNhbHxsdHJpbXxtYWNhZGRyX2NtcHxtYWNhZGRyX2VxfG1hY2FkZHJfZ2V8bWFjYWRkcl9ndHxtYWNhZGRyX2lufG1hY2FkZHJfbGV8bWFjYWRkcl9sdHxtYWNhZGRyX25lfG1hY2FkZHJfb3V0fG1hY2FkZHJfcmVjdnxtYWNhZGRyX3NlbmR8bWFrZWFjbGl0ZW18bWFza2xlbnxtYXh8bWQ1fG1pY190b19hc2NpaXxtaWNfdG9fYmlnNXxtaWNfdG9fZXVjX2NufG1pY190b19ldWNfanB8bWljX3RvX2V1Y19rcnxtaWNfdG9fZXVjX3R3fG1pY190b19pc298bWljX3RvX2tvaThyfG1pY190b19sYXRpbjF8bWljX3RvX2xhdGluMnxtaWNfdG9fbGF0aW4zfG1pY190b19sYXRpbjR8bWljX3RvX3NqaXN8bWljX3RvX3dpbjEyNTB8bWljX3RvX3dpbjEyNTF8bWljX3RvX3dpbjg2NnxtaW58bWt0aW50ZXJ2YWx8bW9kfG1vbmV5fG11bF9kX2ludGVydmFsfG5hbWV8bmFtZWVxfG5hbWVnZXxuYW1lZ3R8bmFtZWljbGlrZXxuYW1laWNubGlrZXxuYW1laWNyZWdleGVxfG5hbWVpY3JlZ2V4bmV8bmFtZWlufG5hbWVsZXxuYW1lbGlrZXxuYW1lbHR8bmFtZW5lfG5hbWVubGlrZXxuYW1lb3V0fG5hbWVyZWN2fG5hbWVyZWdleGVxfG5hbWVyZWdleG5lfG5hbWVzZW5kfG5lcWpvaW5zZWx8bmVxc2VsfG5ldG1hc2t8bmV0d29ya3xuZXR3b3JrX2NtcHxuZXR3b3JrX2VxfG5ldHdvcmtfZ2V8bmV0d29ya19ndHxuZXR3b3JrX2xlfG5ldHdvcmtfbHR8bmV0d29ya19uZXxuZXR3b3JrX3N1YnxuZXR3b3JrX3N1YmVxfG5ldHdvcmtfc3VwfG5ldHdvcmtfc3VwZXF8bmV4dHZhbHxubGlrZWpvaW5zZWx8bmxpa2VzZWx8bm90bGlrZXxub3d8bnBvaW50c3xudGhfdmFsdWV8bnRpbGV8bnVtZXJpY19hYnN8bnVtZXJpY19hY2N1bXxudW1lcmljX2FkZHxudW1lcmljX2F2Z3xudW1lcmljX2F2Z19hY2N1bXxudW1lcmljX2NtcHxudW1lcmljX2RpdnxudW1lcmljX2Rpdl90cnVuY3xudW1lcmljX2VxfG51bWVyaWNfZXhwfG51bWVyaWNfZmFjfG51bWVyaWNfZ2V8bnVtZXJpY19ndHxudW1lcmljX2lufG51bWVyaWNfaW5jfG51bWVyaWNfbGFyZ2VyfG51bWVyaWNfbGV8bnVtZXJpY19sbnxudW1lcmljX2xvZ3xudW1lcmljX2x0fG51bWVyaWNfbW9kfG51bWVyaWNfbXVsfG51bWVyaWNfbmV8bnVtZXJpY19vdXR8bnVtZXJpY19wb3dlcnxudW1lcmljX3JlY3Z8bnVtZXJpY19zZW5kfG51bWVyaWNfc21hbGxlcnxudW1lcmljX3NxcnR8bnVtZXJpY19zdGRkZXZfcG9wfG51bWVyaWNfc3RkZGV2X3NhbXB8bnVtZXJpY19zdWJ8bnVtZXJpY191bWludXN8bnVtZXJpY191cGx1c3xudW1lcmljX3Zhcl9wb3B8bnVtZXJpY192YXJfc2FtcHxudW1lcmljdHlwbW9kaW58bnVtZXJpY3R5cG1vZG91dHxudW1ub2RlfG9ial9kZXNjcmlwdGlvbnxvY3RldF9sZW5ndGh8b2lkfG9pZGVxfG9pZGdlfG9pZGd0fG9pZGlufG9pZGxhcmdlcnxvaWRsZXxvaWRsdHxvaWRuZXxvaWRvdXR8b2lkcmVjdnxvaWRzZW5kfG9pZHNtYWxsZXJ8b2lkdmVjdG9yZXF8b2lkdmVjdG9yZ2V8b2lkdmVjdG9yZ3R8b2lkdmVjdG9yaW58b2lkdmVjdG9ybGV8b2lkdmVjdG9ybHR8b2lkdmVjdG9ybmV8b2lkdmVjdG9yb3V0fG9pZHZlY3RvcnJlY3Z8b2lkdmVjdG9yc2VuZHxvaWR2ZWN0b3J0eXBlc3xvbl9wYnxvbl9wbHxvbl9wcGF0aHxvbl9wc3xvbl9zYnxvbl9zbHxvcGFxdWVfaW58b3BhcXVlX291dHxvdmVybGFwc3xvdmVybGF5fHBhdGh8cGF0aF9hZGR8cGF0aF9hZGRfcHR8cGF0aF9jZW50ZXJ8cGF0aF9jb250YWluX3B0fHBhdGhfZGlzdGFuY2V8cGF0aF9kaXZfcHR8cGF0aF9pbnxwYXRoX2ludGVyfHBhdGhfbGVuZ3RofHBhdGhfbXVsX3B0fHBhdGhfbl9lcXxwYXRoX25fZ2V8cGF0aF9uX2d0fHBhdGhfbl9sZXxwYXRoX25fbHR8cGF0aF9ucG9pbnRzfHBhdGhfb3V0fHBhdGhfcmVjdnxwYXRoX3NlbmR8cGF0aF9zdWJfcHR8cGNsb3NlfHBlcmNlbnRfcmFua3xwZ19hZHZpc29yeV9sb2NrfHBnX2Fkdmlzb3J5X2xvY2tfc2hhcmVkfHBnX2Fkdmlzb3J5X3VubG9ja3xwZ19hZHZpc29yeV91bmxvY2tfYWxsfHBnX2Fkdmlzb3J5X3VubG9ja19zaGFyZWR8cGdfYWR2aXNvcnlfeGFjdF9sb2NrfHBnX2Fkdmlzb3J5X3hhY3RfbG9ja19zaGFyZWR8cGdfYXZhaWxhYmxlX2V4dGVuc2lvbl92ZXJzaW9uc3xwZ19hdmFpbGFibGVfZXh0ZW5zaW9uc3xwZ19iYWNrZW5kX3BpZHxwZ19jYW5jZWxfYmFja2VuZHxwZ19jaGFyX3RvX2VuY29kaW5nfHBnX2NsaWVudF9lbmNvZGluZ3xwZ19jb2xsYXRpb25faXNfdmlzaWJsZXxwZ19jb2x1bW5fc2l6ZXxwZ19jb25mX2xvYWRfdGltZXxwZ19jb252ZXJzaW9uX2lzX3Zpc2libGV8cGdfY3JlYXRlX3Jlc3RvcmVfcG9pbnR8cGdfY3VycmVudF94bG9nX2luc2VydF9sb2NhdGlvbnxwZ19jdXJyZW50X3hsb2dfbG9jYXRpb258cGdfY3Vyc29yfHBnX2RhdGFiYXNlX3NpemV8cGdfZGVzY3JpYmVfb2JqZWN0fHBnX2VuY29kaW5nX21heF9sZW5ndGh8cGdfZW5jb2RpbmdfdG9fY2hhcnxwZ19leHRlbnNpb25fY29uZmlnX2R1bXB8cGdfZXh0ZW5zaW9uX3VwZGF0ZV9wYXRoc3xwZ19mdW5jdGlvbl9pc192aXNpYmxlfHBnX2dldF9jb25zdHJhaW50ZGVmfHBnX2dldF9leHByfHBnX2dldF9mdW5jdGlvbl9hcmd1bWVudHN8cGdfZ2V0X2Z1bmN0aW9uX2lkZW50aXR5X2FyZ3VtZW50c3xwZ19nZXRfZnVuY3Rpb25fcmVzdWx0fHBnX2dldF9mdW5jdGlvbmRlZnxwZ19nZXRfaW5kZXhkZWZ8cGdfZ2V0X2tleXdvcmRzfHBnX2dldF9ydWxlZGVmfHBnX2dldF9zZXJpYWxfc2VxdWVuY2V8cGdfZ2V0X3RyaWdnZXJkZWZ8cGdfZ2V0X3VzZXJieWlkfHBnX2dldF92aWV3ZGVmfHBnX2hhc19yb2xlfHBnX2luZGV4ZXNfc2l6ZXxwZ19pc19pbl9yZWNvdmVyeXxwZ19pc19vdGhlcl90ZW1wX3NjaGVtYXxwZ19pc194bG9nX3JlcGxheV9wYXVzZWR8cGdfbGFzdF94YWN0X3JlcGxheV90aW1lc3RhbXB8cGdfbGFzdF94bG9nX3JlY2VpdmVfbG9jYXRpb258cGdfbGFzdF94bG9nX3JlcGxheV9sb2NhdGlvbnxwZ19saXN0ZW5pbmdfY2hhbm5lbHN8cGdfbG9ja19zdGF0dXN8cGdfbHNfZGlyfHBnX215X3RlbXBfc2NoZW1hfHBnX25vZGVfdHJlZV9pbnxwZ19ub2RlX3RyZWVfb3V0fHBnX25vZGVfdHJlZV9yZWN2fHBnX25vZGVfdHJlZV9zZW5kfHBnX25vdGlmeXxwZ19vcGNsYXNzX2lzX3Zpc2libGV8cGdfb3BlcmF0b3JfaXNfdmlzaWJsZXxwZ19vcHRpb25zX3RvX3RhYmxlfHBnX3Bvc3RtYXN0ZXJfc3RhcnRfdGltZXxwZ19wcmVwYXJlZF9zdGF0ZW1lbnR8cGdfcHJlcGFyZWRfeGFjdHxwZ19yZWFkX2JpbmFyeV9maWxlfHBnX3JlYWRfZmlsZXxwZ19yZWxhdGlvbl9maWxlbm9kZXxwZ19yZWxhdGlvbl9maWxlcGF0aHxwZ19yZWxhdGlvbl9zaXplfHBnX3JlbG9hZF9jb25mfHBnX3JvdGF0ZV9sb2dmaWxlfHBnX3NlcXVlbmNlX3BhcmFtZXRlcnN8cGdfc2hvd19hbGxfc2V0dGluZ3N8cGdfc2l6ZV9wcmV0dHl8cGdfc2xlZXB8cGdfc3RhcnRfYmFja3VwfHBnX3N0YXRfY2xlYXJfc25hcHNob3R8cGdfc3RhdF9maWxlfHBnX3N0YXRfZ2V0X2FjdGl2aXR5fHBnX3N0YXRfZ2V0X2FuYWx5emVfY291bnR8cGdfc3RhdF9nZXRfYXV0b2FuYWx5emVfY291bnR8cGdfc3RhdF9nZXRfYXV0b3ZhY3V1bV9jb3VudHxwZ19zdGF0X2dldF9iYWNrZW5kX2FjdGl2aXR5fHBnX3N0YXRfZ2V0X2JhY2tlbmRfYWN0aXZpdHlfc3RhcnR8cGdfc3RhdF9nZXRfYmFja2VuZF9jbGllbnRfYWRkcnxwZ19zdGF0X2dldF9iYWNrZW5kX2NsaWVudF9wb3J0fHBnX3N0YXRfZ2V0X2JhY2tlbmRfZGJpZHxwZ19zdGF0X2dldF9iYWNrZW5kX2lkc2V0fHBnX3N0YXRfZ2V0X2JhY2tlbmRfcGlkfHBnX3N0YXRfZ2V0X2JhY2tlbmRfc3RhcnR8cGdfc3RhdF9nZXRfYmFja2VuZF91c2VyaWR8cGdfc3RhdF9nZXRfYmFja2VuZF93YWl0aW5nfHBnX3N0YXRfZ2V0X2JhY2tlbmRfeGFjdF9zdGFydHxwZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZfd3JpdHRlbl9jaGVja3BvaW50c3xwZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZfd3JpdHRlbl9jbGVhbnxwZ19zdGF0X2dldF9iZ3dyaXRlcl9tYXh3cml0dGVuX2NsZWFufHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX3JlcXVlc3RlZF9jaGVja3BvaW50c3xwZ19zdGF0X2dldF9iZ3dyaXRlcl9zdGF0X3Jlc2V0X3RpbWV8cGdfc3RhdF9nZXRfYmd3cml0ZXJfdGltZWRfY2hlY2twb2ludHN8cGdfc3RhdF9nZXRfYmxvY2tzX2ZldGNoZWR8cGdfc3RhdF9nZXRfYmxvY2tzX2hpdHxwZ19zdGF0X2dldF9idWZfYWxsb2N8cGdfc3RhdF9nZXRfYnVmX2ZzeW5jX2JhY2tlbmR8cGdfc3RhdF9nZXRfYnVmX3dyaXR0ZW5fYmFja2VuZHxwZ19zdGF0X2dldF9kYl9ibG9ja3NfZmV0Y2hlZHxwZ19zdGF0X2dldF9kYl9ibG9ja3NfaGl0fHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X2FsbHxwZ19zdGF0X2dldF9kYl9jb25mbGljdF9idWZmZXJwaW58cGdfc3RhdF9nZXRfZGJfY29uZmxpY3RfbG9ja3xwZ19zdGF0X2dldF9kYl9jb25mbGljdF9zbmFwc2hvdHxwZ19zdGF0X2dldF9kYl9jb25mbGljdF9zdGFydHVwX2RlYWRsb2NrfHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X3RhYmxlc3BhY2V8cGdfc3RhdF9nZXRfZGJfbnVtYmFja2VuZHN8cGdfc3RhdF9nZXRfZGJfc3RhdF9yZXNldF90aW1lfHBnX3N0YXRfZ2V0X2RiX3R1cGxlc19kZWxldGVkfHBnX3N0YXRfZ2V0X2RiX3R1cGxlc19mZXRjaGVkfHBnX3N0YXRfZ2V0X2RiX3R1cGxlc19pbnNlcnRlZHxwZ19zdGF0X2dldF9kYl90dXBsZXNfcmV0dXJuZWR8cGdfc3RhdF9nZXRfZGJfdHVwbGVzX3VwZGF0ZWR8cGdfc3RhdF9nZXRfZGJfeGFjdF9jb21taXR8cGdfc3RhdF9nZXRfZGJfeGFjdF9yb2xsYmFja3xwZ19zdGF0X2dldF9kZWFkX3R1cGxlc3xwZ19zdGF0X2dldF9mdW5jdGlvbl9jYWxsc3xwZ19zdGF0X2dldF9mdW5jdGlvbl9zZWxmX3RpbWV8cGdfc3RhdF9nZXRfZnVuY3Rpb25fdGltZXxwZ19zdGF0X2dldF9sYXN0X2FuYWx5emVfdGltZXxwZ19zdGF0X2dldF9sYXN0X2F1dG9hbmFseXplX3RpbWV8cGdfc3RhdF9nZXRfbGFzdF9hdXRvdmFjdXVtX3RpbWV8cGdfc3RhdF9nZXRfbGFzdF92YWN1dW1fdGltZXxwZ19zdGF0X2dldF9saXZlX3R1cGxlc3xwZ19zdGF0X2dldF9udW1zY2Fuc3xwZ19zdGF0X2dldF90dXBsZXNfZGVsZXRlZHxwZ19zdGF0X2dldF90dXBsZXNfZmV0Y2hlZHxwZ19zdGF0X2dldF90dXBsZXNfaG90X3VwZGF0ZWR8cGdfc3RhdF9nZXRfdHVwbGVzX2luc2VydGVkfHBnX3N0YXRfZ2V0X3R1cGxlc19yZXR1cm5lZHxwZ19zdGF0X2dldF90dXBsZXNfdXBkYXRlZHxwZ19zdGF0X2dldF92YWN1dW1fY291bnR8cGdfc3RhdF9nZXRfd2FsX3NlbmRlcnN8cGdfc3RhdF9nZXRfeGFjdF9ibG9ja3NfZmV0Y2hlZHxwZ19zdGF0X2dldF94YWN0X2Jsb2Nrc19oaXR8cGdfc3RhdF9nZXRfeGFjdF9mdW5jdGlvbl9jYWxsc3xwZ19zdGF0X2dldF94YWN0X2Z1bmN0aW9uX3NlbGZfdGltZXxwZ19zdGF0X2dldF94YWN0X2Z1bmN0aW9uX3RpbWV8cGdfc3RhdF9nZXRfeGFjdF9udW1zY2Fuc3xwZ19zdGF0X2dldF94YWN0X3R1cGxlc19kZWxldGVkfHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2ZldGNoZWR8cGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWR8cGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaW5zZXJ0ZWR8cGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfcmV0dXJuZWR8cGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfdXBkYXRlZHxwZ19zdGF0X3Jlc2V0fHBnX3N0YXRfcmVzZXRfc2hhcmVkfHBnX3N0YXRfcmVzZXRfc2luZ2xlX2Z1bmN0aW9uX2NvdW50ZXJzfHBnX3N0YXRfcmVzZXRfc2luZ2xlX3RhYmxlX2NvdW50ZXJzfHBnX3N0b3BfYmFja3VwfHBnX3N3aXRjaF94bG9nfHBnX3RhYmxlX2lzX3Zpc2libGV8cGdfdGFibGVfc2l6ZXxwZ190YWJsZXNwYWNlX2RhdGFiYXNlc3xwZ190YWJsZXNwYWNlX3NpemV8cGdfdGVybWluYXRlX2JhY2tlbmR8cGdfdGltZXpvbmVfYWJicmV2c3xwZ190aW1lem9uZV9uYW1lc3xwZ190b3RhbF9yZWxhdGlvbl9zaXplfHBnX3RyeV9hZHZpc29yeV9sb2NrfHBnX3RyeV9hZHZpc29yeV9sb2NrX3NoYXJlZHxwZ190cnlfYWR2aXNvcnlfeGFjdF9sb2NrfHBnX3RyeV9hZHZpc29yeV94YWN0X2xvY2tfc2hhcmVkfHBnX3RzX2NvbmZpZ19pc192aXNpYmxlfHBnX3RzX2RpY3RfaXNfdmlzaWJsZXxwZ190c19wYXJzZXJfaXNfdmlzaWJsZXxwZ190c190ZW1wbGF0ZV9pc192aXNpYmxlfHBnX3R5cGVfaXNfdmlzaWJsZXxwZ190eXBlb2Z8cGdfeGxvZ19yZXBsYXlfcGF1c2V8cGdfeGxvZ19yZXBsYXlfcmVzdW1lfHBnX3hsb2dmaWxlX25hbWV8cGdfeGxvZ2ZpbGVfbmFtZV9vZmZzZXR8cGl8cGxhaW50b190c3F1ZXJ5fHBscGdzcWxfY2FsbF9oYW5kbGVyfHBscGdzcWxfaW5saW5lX2hhbmRsZXJ8cGxwZ3NxbF92YWxpZGF0b3J8cG9pbnR8cG9pbnRfYWJvdmV8cG9pbnRfYWRkfHBvaW50X2JlbG93fHBvaW50X2Rpc3RhbmNlfHBvaW50X2Rpdnxwb2ludF9lcXxwb2ludF9ob3Jpenxwb2ludF9pbnxwb2ludF9sZWZ0fHBvaW50X211bHxwb2ludF9uZXxwb2ludF9vdXR8cG9pbnRfcmVjdnxwb2ludF9yaWdodHxwb2ludF9zZW5kfHBvaW50X3N1Ynxwb2ludF92ZXJ0fHBvbHlfYWJvdmV8cG9seV9iZWxvd3xwb2x5X2NlbnRlcnxwb2x5X2NvbnRhaW58cG9seV9jb250YWluX3B0fHBvbHlfY29udGFpbmVkfHBvbHlfZGlzdGFuY2V8cG9seV9pbnxwb2x5X2xlZnR8cG9seV9ucG9pbnRzfHBvbHlfb3V0fHBvbHlfb3ZlcmFib3ZlfHBvbHlfb3ZlcmJlbG93fHBvbHlfb3ZlcmxhcHxwb2x5X292ZXJsZWZ0fHBvbHlfb3ZlcnJpZ2h0fHBvbHlfcmVjdnxwb2x5X3JpZ2h0fHBvbHlfc2FtZXxwb2x5X3NlbmR8cG9seWdvbnxwb3Blbnxwb3NpdGlvbnxwb3NpdGlvbmpvaW5zZWx8cG9zaXRpb25zZWx8cG9zdGdyZXNxbF9mZHdfdmFsaWRhdG9yfHBvd3xwb3dlcnxwcnNkX2VuZHxwcnNkX2hlYWRsaW5lfHByc2RfbGV4dHlwZXxwcnNkX25leHR0b2tlbnxwcnNkX3N0YXJ0fHB0X2NvbnRhaW5lZF9jaXJjbGV8cHRfY29udGFpbmVkX3BvbHl8cXVlcnlfdG9feG1sfHF1ZXJ5X3RvX3htbF9hbmRfeG1sc2NoZW1hfHF1ZXJ5X3RvX3htbHNjaGVtYXxxdWVyeXRyZWV8cXVvdGVfaWRlbnR8cXVvdGVfbGl0ZXJhbHxxdW90ZV9udWxsYWJsZXxyYWRpYW5zfHJhZGl1c3xyYW5kb218cmFua3xyZWNvcmRfZXF8cmVjb3JkX2dlfHJlY29yZF9ndHxyZWNvcmRfaW58cmVjb3JkX2xlfHJlY29yZF9sdHxyZWNvcmRfbmV8cmVjb3JkX291dHxyZWNvcmRfcmVjdnxyZWNvcmRfc2VuZHxyZWdjbGFzc3xyZWdjbGFzc2lufHJlZ2NsYXNzb3V0fHJlZ2NsYXNzcmVjdnxyZWdjbGFzc3NlbmR8cmVnY29uZmlnaW58cmVnY29uZmlnb3V0fHJlZ2NvbmZpZ3JlY3Z8cmVnY29uZmlnc2VuZHxyZWdkaWN0aW9uYXJ5aW58cmVnZGljdGlvbmFyeW91dHxyZWdkaWN0aW9uYXJ5cmVjdnxyZWdkaWN0aW9uYXJ5c2VuZHxyZWdleGVxam9pbnNlbHxyZWdleGVxc2VsfHJlZ2V4bmVqb2luc2VsfHJlZ2V4bmVzZWx8cmVnZXhwX21hdGNoZXN8cmVnZXhwX3JlcGxhY2V8cmVnZXhwX3NwbGl0X3RvX2FycmF5fHJlZ2V4cF9zcGxpdF90b190YWJsZXxyZWdvcGVyYXRvcmlufHJlZ29wZXJhdG9yb3V0fHJlZ29wZXJhdG9ycmVjdnxyZWdvcGVyYXRvcnNlbmR8cmVnb3BlcmlufHJlZ29wZXJvdXR8cmVnb3BlcnJlY3Z8cmVnb3BlcnNlbmR8cmVncHJvY2VkdXJlaW58cmVncHJvY2VkdXJlb3V0fHJlZ3Byb2NlZHVyZXJlY3Z8cmVncHJvY2VkdXJlc2VuZHxyZWdwcm9jaW58cmVncHJvY291dHxyZWdwcm9jcmVjdnxyZWdwcm9jc2VuZHxyZWdyX2F2Z3h8cmVncl9hdmd5fHJlZ3JfY291bnR8cmVncl9pbnRlcmNlcHR8cmVncl9yMnxyZWdyX3Nsb3BlfHJlZ3Jfc3h4fHJlZ3Jfc3h5fHJlZ3Jfc3l5fHJlZ3R5cGVpbnxyZWd0eXBlb3V0fHJlZ3R5cGVyZWN2fHJlZ3R5cGVzZW5kfHJlbHRpbWV8cmVsdGltZWVxfHJlbHRpbWVnZXxyZWx0aW1lZ3R8cmVsdGltZWlufHJlbHRpbWVsZXxyZWx0aW1lbHR8cmVsdGltZW5lfHJlbHRpbWVvdXR8cmVsdGltZXJlY3Z8cmVsdGltZXNlbmR8cmVwZWF0fHJlcGxhY2V8cmV2ZXJzZXxyaWdodHxyb3VuZHxyb3dfbnVtYmVyfHJwYWR8cnRyaW18c2NhbGFyZ3Rqb2luc2VsfHNjYWxhcmd0c2VsfHNjYWxhcmx0am9pbnNlbHxzY2FsYXJsdHNlbHxzY2hlbWFfdG9feG1sfHNjaGVtYV90b194bWxfYW5kX3htbHNjaGVtYXxzY2hlbWFfdG9feG1sc2NoZW1hfHNlc3Npb25fdXNlcnxzZXRfYml0fHNldF9ieXRlfHNldF9jb25maWd8c2V0X21hc2tsZW58c2V0c2VlZHxzZXR2YWx8c2V0d2VpZ2h0fHNoZWxsX2lufHNoZWxsX291dHxzaGlmdF9qaXNfMjAwNF90b19ldWNfamlzXzIwMDR8c2hpZnRfamlzXzIwMDRfdG9fdXRmOHxzaG9ial9kZXNjcmlwdGlvbnxzaWdufHNpbWlsYXJfZXNjYXBlfHNpbnxzamlzX3RvX2V1Y19qcHxzamlzX3RvX21pY3xzamlzX3RvX3V0Zjh8c2xvcGV8c21ncmVxfHNtZ3JpbnxzbWdybmV8c21ncm91dHxzcGxpdF9wYXJ0fHNxcnR8c3RhdGVtZW50X3RpbWVzdGFtcHxzdGRkZXZ8c3RkZGV2X3BvcHxzdGRkZXZfc2FtcHxzdHJpbmdfYWdnfHN0cmluZ19hZ2dfZmluYWxmbnxzdHJpbmdfYWdnX3RyYW5zZm58c3RyaW5nX3RvX2FycmF5fHN0cmlwfHN0cnBvc3xzdWJzdHJ8c3Vic3RyaW5nfHN1bXxzdXBwcmVzc19yZWR1bmRhbnRfdXBkYXRlc190cmlnZ2VyfHRhYmxlX3RvX3htbHx0YWJsZV90b194bWxfYW5kX3htbHNjaGVtYXx0YWJsZV90b194bWxzY2hlbWF8dGFufHRleHR8dGV4dF9nZXx0ZXh0X2d0fHRleHRfbGFyZ2VyfHRleHRfbGV8dGV4dF9sdHx0ZXh0X3BhdHRlcm5fZ2V8dGV4dF9wYXR0ZXJuX2d0fHRleHRfcGF0dGVybl9sZXx0ZXh0X3BhdHRlcm5fbHR8dGV4dF9zbWFsbGVyfHRleHRhbnljYXR8dGV4dGNhdHx0ZXh0ZXF8dGV4dGljbGlrZXx0ZXh0aWNubGlrZXx0ZXh0aWNyZWdleGVxfHRleHRpY3JlZ2V4bmV8dGV4dGlufHRleHRsZW58dGV4dGxpa2V8dGV4dG5lfHRleHRubGlrZXx0ZXh0b3V0fHRleHRyZWN2fHRleHRyZWdleGVxfHRleHRyZWdleG5lfHRleHRzZW5kfHRoZXNhdXJ1c19pbml0fHRoZXNhdXJ1c19sZXhpemV8dGlkZXF8dGlkZ2V8dGlkZ3R8dGlkaW58dGlkbGFyZ2VyfHRpZGxlfHRpZGx0fHRpZG5lfHRpZG91dHx0aWRyZWN2fHRpZHNlbmR8dGlkc21hbGxlcnx0aW1lX2NtcHx0aW1lX2VxfHRpbWVfZ2V8dGltZV9ndHx0aW1lX2hhc2h8dGltZV9pbnx0aW1lX2xhcmdlcnx0aW1lX2xlfHRpbWVfbHR8dGltZV9taV9pbnRlcnZhbHx0aW1lX21pX3RpbWV8dGltZV9uZXx0aW1lX291dHx0aW1lX3BsX2ludGVydmFsfHRpbWVfcmVjdnx0aW1lX3NlbmR8dGltZV9zbWFsbGVyfHRpbWVkYXRlX3BsfHRpbWVtaXx0aW1lbm93fHRpbWVvZmRheXx0aW1lcGx8dGltZXN0YW1wX2NtcHx0aW1lc3RhbXBfY21wX2RhdGV8dGltZXN0YW1wX2NtcF90aW1lc3RhbXB0enx0aW1lc3RhbXBfZXF8dGltZXN0YW1wX2VxX2RhdGV8dGltZXN0YW1wX2VxX3RpbWVzdGFtcHR6fHRpbWVzdGFtcF9nZXx0aW1lc3RhbXBfZ2VfZGF0ZXx0aW1lc3RhbXBfZ2VfdGltZXN0YW1wdHp8dGltZXN0YW1wX2d0fHRpbWVzdGFtcF9ndF9kYXRlfHRpbWVzdGFtcF9ndF90aW1lc3RhbXB0enx0aW1lc3RhbXBfaGFzaHx0aW1lc3RhbXBfaW58dGltZXN0YW1wX2xhcmdlcnx0aW1lc3RhbXBfbGV8dGltZXN0YW1wX2xlX2RhdGV8dGltZXN0YW1wX2xlX3RpbWVzdGFtcHR6fHRpbWVzdGFtcF9sdHx0aW1lc3RhbXBfbHRfZGF0ZXx0aW1lc3RhbXBfbHRfdGltZXN0YW1wdHp8dGltZXN0YW1wX21pfHRpbWVzdGFtcF9taV9pbnRlcnZhbHx0aW1lc3RhbXBfbmV8dGltZXN0YW1wX25lX2RhdGV8dGltZXN0YW1wX25lX3RpbWVzdGFtcHR6fHRpbWVzdGFtcF9vdXR8dGltZXN0YW1wX3BsX2ludGVydmFsfHRpbWVzdGFtcF9yZWN2fHRpbWVzdGFtcF9zZW5kfHRpbWVzdGFtcF9zbWFsbGVyfHRpbWVzdGFtcHR5cG1vZGlufHRpbWVzdGFtcHR5cG1vZG91dHx0aW1lc3RhbXB0el9jbXB8dGltZXN0YW1wdHpfY21wX2RhdGV8dGltZXN0YW1wdHpfY21wX3RpbWVzdGFtcHx0aW1lc3RhbXB0el9lcXx0aW1lc3RhbXB0el9lcV9kYXRlfHRpbWVzdGFtcHR6X2VxX3RpbWVzdGFtcHx0aW1lc3RhbXB0el9nZXx0aW1lc3RhbXB0el9nZV9kYXRlfHRpbWVzdGFtcHR6X2dlX3RpbWVzdGFtcHx0aW1lc3RhbXB0el9ndHx0aW1lc3RhbXB0el9ndF9kYXRlfHRpbWVzdGFtcHR6X2d0X3RpbWVzdGFtcHx0aW1lc3RhbXB0el9pbnx0aW1lc3RhbXB0el9sYXJnZXJ8dGltZXN0YW1wdHpfbGV8dGltZXN0YW1wdHpfbGVfZGF0ZXx0aW1lc3RhbXB0el9sZV90aW1lc3RhbXB8dGltZXN0YW1wdHpfbHR8dGltZXN0YW1wdHpfbHRfZGF0ZXx0aW1lc3RhbXB0el9sdF90aW1lc3RhbXB8dGltZXN0YW1wdHpfbWl8dGltZXN0YW1wdHpfbWlfaW50ZXJ2YWx8dGltZXN0YW1wdHpfbmV8dGltZXN0YW1wdHpfbmVfZGF0ZXx0aW1lc3RhbXB0el9uZV90aW1lc3RhbXB8dGltZXN0YW1wdHpfb3V0fHRpbWVzdGFtcHR6X3BsX2ludGVydmFsfHRpbWVzdGFtcHR6X3JlY3Z8dGltZXN0YW1wdHpfc2VuZHx0aW1lc3RhbXB0el9zbWFsbGVyfHRpbWVzdGFtcHR6dHlwbW9kaW58dGltZXN0YW1wdHp0eXBtb2RvdXR8dGltZXR5cG1vZGlufHRpbWV0eXBtb2RvdXR8dGltZXR6X2NtcHx0aW1ldHpfZXF8dGltZXR6X2dlfHRpbWV0el9ndHx0aW1ldHpfaGFzaHx0aW1ldHpfaW58dGltZXR6X2xhcmdlcnx0aW1ldHpfbGV8dGltZXR6X2x0fHRpbWV0el9taV9pbnRlcnZhbHx0aW1ldHpfbmV8dGltZXR6X291dHx0aW1ldHpfcGxfaW50ZXJ2YWx8dGltZXR6X3JlY3Z8dGltZXR6X3NlbmR8dGltZXR6X3NtYWxsZXJ8dGltZXR6ZGF0ZV9wbHx0aW1ldHp0eXBtb2Rpbnx0aW1ldHp0eXBtb2RvdXR8dGltZXpvbmV8dGludGVydmFsfHRpbnRlcnZhbGN0fHRpbnRlcnZhbGVuZHx0aW50ZXJ2YWxlcXx0aW50ZXJ2YWxnZXx0aW50ZXJ2YWxndHx0aW50ZXJ2YWxpbnx0aW50ZXJ2YWxsZXx0aW50ZXJ2YWxsZW5lcXx0aW50ZXJ2YWxsZW5nZXx0aW50ZXJ2YWxsZW5ndHx0aW50ZXJ2YWxsZW5sZXx0aW50ZXJ2YWxsZW5sdHx0aW50ZXJ2YWxsZW5uZXx0aW50ZXJ2YWxsdHx0aW50ZXJ2YWxuZXx0aW50ZXJ2YWxvdXR8dGludGVydmFsb3Z8dGludGVydmFscmVjdnx0aW50ZXJ2YWxyZWx8dGludGVydmFsc2FtZXx0aW50ZXJ2YWxzZW5kfHRpbnRlcnZhbHN0YXJ0fHRvX2FzY2lpfHRvX2NoYXJ8dG9fZGF0ZXx0b19oZXh8dG9fbnVtYmVyfHRvX3RpbWVzdGFtcHx0b190c3F1ZXJ5fHRvX3RzdmVjdG9yfHRyYW5zYWN0aW9uX3RpbWVzdGFtcHx0cmFuc2xhdGV8dHJpZ2dlcl9pbnx0cmlnZ2VyX291dHx0cnVuY3x0c19kZWJ1Z3x0c19oZWFkbGluZXx0c19sZXhpemV8dHNfbWF0Y2hfcXZ8dHNfbWF0Y2hfdHF8dHNfbWF0Y2hfdHR8dHNfbWF0Y2hfdnF8dHNfcGFyc2V8dHNfcmFua3x0c19yYW5rX2NkfHRzX3Jld3JpdGV8dHNfc3RhdHx0c190b2tlbl90eXBlfHRzX3R5cGFuYWx5emV8dHNtYXRjaGpvaW5zZWx8dHNtYXRjaHNlbHx0c3FfbWNvbnRhaW5lZHx0c3FfbWNvbnRhaW5zfHRzcXVlcnlfYW5kfHRzcXVlcnlfY21wfHRzcXVlcnlfZXF8dHNxdWVyeV9nZXx0c3F1ZXJ5X2d0fHRzcXVlcnlfbGV8dHNxdWVyeV9sdHx0c3F1ZXJ5X25lfHRzcXVlcnlfbm90fHRzcXVlcnlfb3J8dHNxdWVyeWlufHRzcXVlcnlvdXR8dHNxdWVyeXJlY3Z8dHNxdWVyeXNlbmR8dHN2ZWN0b3JfY21wfHRzdmVjdG9yX2NvbmNhdHx0c3ZlY3Rvcl9lcXx0c3ZlY3Rvcl9nZXx0c3ZlY3Rvcl9ndHx0c3ZlY3Rvcl9sZXx0c3ZlY3Rvcl9sdHx0c3ZlY3Rvcl9uZXx0c3ZlY3Rvcl91cGRhdGVfdHJpZ2dlcnx0c3ZlY3Rvcl91cGRhdGVfdHJpZ2dlcl9jb2x1bW58dHN2ZWN0b3Jpbnx0c3ZlY3Rvcm91dHx0c3ZlY3RvcnJlY3Z8dHN2ZWN0b3JzZW5kfHR4aWRfY3VycmVudHx0eGlkX2N1cnJlbnRfc25hcHNob3R8dHhpZF9zbmFwc2hvdF9pbnx0eGlkX3NuYXBzaG90X291dHx0eGlkX3NuYXBzaG90X3JlY3Z8dHhpZF9zbmFwc2hvdF9zZW5kfHR4aWRfc25hcHNob3RfeGlwfHR4aWRfc25hcHNob3RfeG1heHx0eGlkX3NuYXBzaG90X3htaW58dHhpZF92aXNpYmxlX2luX3NuYXBzaG90fHVoY190b191dGY4fHVuaXF1ZV9rZXlfcmVjaGVja3x1bmtub3duaW58dW5rbm93bm91dHx1bmtub3ducmVjdnx1bmtub3duc2VuZHx1bm5lc3R8dXBwZXJ8dXRmOF90b19hc2NpaXx1dGY4X3RvX2JpZzV8dXRmOF90b19ldWNfY258dXRmOF90b19ldWNfamlzXzIwMDR8dXRmOF90b19ldWNfanB8dXRmOF90b19ldWNfa3J8dXRmOF90b19ldWNfdHd8dXRmOF90b19nYjE4MDMwfHV0ZjhfdG9fZ2JrfHV0ZjhfdG9faXNvODg1OXx1dGY4X3RvX2lzbzg4NTlfMXx1dGY4X3RvX2pvaGFifHV0ZjhfdG9fa29pOHJ8dXRmOF90b19rb2k4dXx1dGY4X3RvX3NoaWZ0X2ppc18yMDA0fHV0ZjhfdG9fc2ppc3x1dGY4X3RvX3VoY3x1dGY4X3RvX3dpbnx1dWlkX2NtcHx1dWlkX2VxfHV1aWRfZ2V8dXVpZF9ndHx1dWlkX2hhc2h8dXVpZF9pbnx1dWlkX2xlfHV1aWRfbHR8dXVpZF9uZXx1dWlkX291dHx1dWlkX3JlY3Z8dXVpZF9zZW5kfHZhcl9wb3B8dmFyX3NhbXB8dmFyYml0X2lufHZhcmJpdF9vdXR8dmFyYml0X3JlY3Z8dmFyYml0X3NlbmR8dmFyYml0Y21wfHZhcmJpdGVxfHZhcmJpdGdlfHZhcmJpdGd0fHZhcmJpdGxlfHZhcmJpdGx0fHZhcmJpdG5lfHZhcmJpdHR5cG1vZGlufHZhcmJpdHR5cG1vZG91dHx2YXJjaGFyaW58dmFyY2hhcm91dHx2YXJjaGFycmVjdnx2YXJjaGFyc2VuZHx2YXJjaGFydHlwbW9kaW58dmFyY2hhcnR5cG1vZG91dHx2YXJpYW5jZXx2ZXJzaW9ufHZvaWRfaW58dm9pZF9vdXR8dm9pZF9yZWN2fHZvaWRfc2VuZHx3aWR0aHx3aWR0aF9idWNrZXR8d2luMTI1MF90b19sYXRpbjJ8d2luMTI1MF90b19taWN8d2luMTI1MV90b19pc298d2luMTI1MV90b19rb2k4cnx3aW4xMjUxX3RvX21pY3x3aW4xMjUxX3RvX3dpbjg2Nnx3aW44NjZfdG9faXNvfHdpbjg2Nl90b19rb2k4cnx3aW44NjZfdG9fbWljfHdpbjg2Nl90b193aW4xMjUxfHdpbl90b191dGY4fHhpZGVxfHhpZGVxaW50NHx4aWRpbnx4aWRvdXR8eGlkcmVjdnx4aWRzZW5kfHhtbHx4bWxfaW58eG1sX2lzX3dlbGxfZm9ybWVkfHhtbF9pc193ZWxsX2Zvcm1lZF9jb250ZW50fHhtbF9pc193ZWxsX2Zvcm1lZF9kb2N1bWVudHx4bWxfb3V0fHhtbF9yZWN2fHhtbF9zZW5kfHhtbGFnZ3x4bWxjb21tZW50fHhtbGNvbmNhdDJ8eG1sZXhpc3RzfHhtbHZhbGlkYXRlfHhwYXRofHhwYXRoX2V4aXN0cyIuc3BsaXQoInwiKSksYz1be3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJ2YXJpYWJsZS5sYW5ndWFnZSIscmVnZXg6JyIuKj8iJ30se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGEuaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQiOmIuaGFzT3duUHJvcGVydHkoYyk/InN1cHBvcnQuZnVuY3Rpb24iOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXwhIXwhfnwhflxcKnwhfn58IX5+XFwqfCN8IyN8Izx8Izw9fCM8PnwjPXwjPnwjPj18JXxcXCZ8XFwmXFwmfFxcJjx8XFwmPFxcfHxcXCY+fFxcKnxcXCt8XFwtfC98PHw8Iz58PFxcLT58PDx8PDw9fDw8XFx8fDw9fDw+fDxcXD8+fDxAfDxcXF58PXw+fD49fD4+fD4+PXw+XFxefFxcPyN8XFw/XFwtfFxcP1xcLVxcfHxcXD9cXHx8XFw/XFx8XFx8fEB8QFxcLUB8QD58QEB8QEBAfFxcXnxcXHx8XFx8XFwmPnxcXHwvfFxcfD4+fFxcfFxcfHxcXHxcXHwvfH58flxcKnx+PD1+fH48fnx+PXx+Pj1+fH4+fnx+fnx+flxcKiJ9LHt0b2tlbjoibHBhcmVuLnBhcmVuIixyZWdleDoiW1xcKF0ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXCldIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii0tLiokIn0sKG5ldyBmKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoia2V5d29yZC5zdGF0ZW1lbnRCZWdpbiIscmVnZXg6Il5bYS16QS1aXSsiLG5leHQ6InN0YXRlbWVudCJ9LHt0b2tlbjoic3VwcG9ydC5idWlsZGluIixyZWdleDoiXlxcXFxbXFxTXSsuKiQifV0sc3RhdGVtZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiItLS4qJCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudFN0YXRlbWVudCJ9LHt0b2tlbjoic3RhdGVtZW50RW5kIixyZWdleDoiOyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlxcJHBlcmxcXCQiLG5leHQ6InBlcmwtc3RhcnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlxcJHB5dGhvblxcJCIsbmV4dDoicHl0aG9uLXN0YXJ0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXCRbXFx3XzAtOV0qXFwkJCIsbmV4dDoiZG9sbGFyU3FsIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXCRbXFx3XzAtOV0qXFwkIixuZXh0OiJkb2xsYXJTdGF0ZW1lbnRTdHJpbmcifV0uY29uY2F0KGMpLGRvbGxhclNxbDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLS0uKiQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnREb2xsYXJTcWwifSx7dG9rZW46InN0cmluZyIscmVnZXg6Il5cXCRbXFx3XzAtOV0qXFwkIixuZXh0OiJzdGF0ZW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlxcJFtcXHdfMC05XSpcXCQiLG5leHQ6ImRvbGxhclNxbFN0cmluZyJ9XS5jb25jYXQoYyksY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnRTdGF0ZW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhdGVtZW50In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0sY29tbWVudERvbGxhclNxbDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJkb2xsYXJTcWwifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxkb2xsYXJTdGF0ZW1lbnRTdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiLio/XFwkW1xcd18wLTldKlxcJCIsbmV4dDoic3RhdGVtZW50In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxkb2xsYXJTcWxTdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiLio/XFwkW1xcd18wLTldKlxcJCIsbmV4dDoiZG9sbGFyU3FsIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGYsImRvYy0iLFsobmV3IGYpLmdldEVuZFJ1bGUoInN0YXJ0IildKSx0aGlzLmVtYmVkUnVsZXMoaCwicGVybC0iLFt7dG9rZW46InN0cmluZyIscmVnZXg6IlxcJHBlcmxcXCQiLG5leHQ6InN0YXRlbWVudCJ9XSksdGhpcy5lbWJlZFJ1bGVzKGksInB5dGhvbi0iLFt7dG9rZW46InN0cmluZyIscmVnZXg6IlxcJHB5dGhvblxcJCIsbmV4dDoic3RhdGVtZW50In1dKX07ZC5pbmhlcml0cyhqLGcpLGIuUGdzcWxIaWdobGlnaHRSdWxlcz1qfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL3BlcmxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZz1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYmFzZXxjb25zdGFudHxjb250aW51ZXxlbHNlfGVsc2lmfGZvcnxmb3JlYWNofGZvcm1hdHxnb3RvfGlmfGxhc3R8bG9jYWx8bXl8bmV4dHxub3xwYWNrYWdlfHBhcmVudHxyZWRvfHJlcXVpcmV8c2NhbGFyfHN1Ynx1bmxlc3N8dW50aWx8d2hpbGV8dXNlfHZhcnMiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJBUkdWfEVOVnxJTkN8U0lHIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgiZ2V0cHJvdG9ieW51bWJlcnxnZXRwcm90b2J5bmFtZXxnZXRzZXJ2YnluYW1lfGdldGhvc3RieWFkZHJ8Z2V0aG9zdGJ5bmFtZXxnZXRzZXJ2Ynlwb3J0fGdldG5ldGJ5YWRkcnxnZXRuZXRieW5hbWV8Z2V0c29ja25hbWV8Z2V0cGVlcm5hbWV8c2V0cHJpb3JpdHl8Z2V0cHJvdG9lbnR8c2V0cHJvdG9lbnR8Z2V0cHJpb3JpdHl8ZW5kcHJvdG9lbnR8Z2V0c2VydmVudHxzZXRzZXJ2ZW50fGVuZHNlcnZlbnR8c2V0aG9zdGVudHxzb2NrZXRwYWlyfGdldHNvY2tvcHR8Z2V0aG9zdGVudHxlbmRob3N0ZW50fHNldHNvY2tvcHR8c2V0bmV0ZW50fHF1b3RlbWV0YXxsb2NhbHRpbWV8cHJvdG90eXBlfGdldG5ldGVudHxlbmRuZXRlbnR8cmV3aW5kZGlyfHdhbnRhcnJheXxnZXRwd3VpZHxjbG9zZWRpcnxnZXRsb2dpbnxyZWFkbGlua3xlbmRncmVudHxnZXRncmdpZHxnZXRncm5hbXxzaG13cml0ZXxzaHV0ZG93bnxyZWFkbGluZXxlbmRwd2VudHxzZXRncmVudHxyZWFkcGlwZXxmb3JtbGluZXx0cnVuY2F0ZXxkYm1jbG9zZXxzeXN3cml0ZXxzZXRwd2VudHxnZXRwd25hbXxnZXRncmVudHxnZXRwd2VudHx1Y2ZpcnN0fHN5c3JlYWR8c2V0cGdycHxzaG1yZWFkfHN5c3NlZWt8c3lzb3Blbnx0ZWxsZGlyfGRlZmluZWR8b3BlbmRpcnxjb25uZWN0fGxjZmlyc3R8Z2V0cHBpZHxiaW5tb2RlfHN5c2NhbGx8c3ByaW50ZnxnZXRwZ3JwfHJlYWRkaXJ8c2Vla2Rpcnx3YWl0cGlkfHJldmVyc2V8dW5zaGlmdHxzeW1saW5rfGRibW9wZW58c2VtZ2V0fG1zZ3JjdnxyZW5hbWV8bGlzdGVufGNocm9vdHxtc2dzbmR8c2htY3RsfGFjY2VwdHx1bnBhY2t8ZXhpc3RzfGZpbGVub3xzaG1nZXR8c3lzdGVtfHVubGlua3xwcmludGZ8Z210aW1lfG1zZ2N0bHxzZW1jdGx8dmFsdWVzfHJpbmRleHxzdWJzdHJ8c3BsaWNlfGxlbmd0aHxtc2dnZXR8c2VsZWN0fHNvY2tldHxyZXR1cm58Y2FsbGVyfGRlbGV0ZXxhbGFybXxpb2N0bHxpbmRleHx1bmRlZnxsc3RhdHx0aW1lc3xzcmFuZHxjaG93bnxmY250bHxjbG9zZXx3cml0ZXx1bWFza3xybWRpcnxzdHVkeXxzbGVlcHxjaG9tcHx1bnRpZXxwcmludHx1dGltZXxta2RpcnxhdGFuMnxzcGxpdHxjcnlwdHxmbG9ja3xjaG1vZHxCRUdJTnxibGVzc3xjaGRpcnxzZW1vcHxzaGlmdHxyZXNldHxsaW5rfHN0YXR8Y2hvcHxncmVwfGZvcmt8ZHVtcHxqb2lufG9wZW58dGVsbHxwaXBlfGV4aXR8Z2xvYnx3YXJufGVhY2h8YmluZHxzb3J0fHBhY2t8ZXZhbHxwdXNofGtleXN8Z2V0Y3xraWxsfHNlZWt8c3FydHxzZW5kfHdhaXR8cmFuZHx0aWVkfHJlYWR8dGltZXxleGVjfHJlY3Z8ZW9mfGNocnxpbnR8b3JkfGV4cHxwb3N8cG9wfHNpbnxsb2d8YWJzfG9jdHxoZXh8dGllfGNvc3x2ZWN8RU5EfHJlZnxtYXB8ZGllfHVjfGxjfGRvIi5zcGxpdCgifCIpKTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IiMuKiQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjB4WzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ZnVuY3Rpb24oZCl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoZCk/ImtleXdvcmQiOmIuaGFzT3duUHJvcGVydHkoZCk/ImNvbnN0YW50Lmxhbmd1YWdlIjpjLmhhc093blByb3BlcnR5KGQpPyJzdXBwb3J0LmZ1bmN0aW9uIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXC5cXC5cXC58XFx8XFx8PXw+Pj18PDw9fDw9PnwmJj18PT58IX58XFxePXwmPXxcXHw9fFxcLj18eD18JT18XFwvPXxcXCo9fFxcLT18XFwrPXw9fnxcXCpcXCp8XFwtXFwtfFxcLlxcLnxcXHxcXHx8JiZ8XFwrXFwrfFxcLT58IT18PT18Pj18PD18Pj58PDx8LHw9fFxcP1xcOnxcXF58XFx8fHh8JXxcXC98XFwqfDx8JnxcXFxcfH58IXw+fFxcLnxcXC18XFwrfFxcLUN8XFwtYnxcXC1TfFxcLXV8XFwtdHxcXC1wfFxcLWx8XFwtZHxcXC1mfFxcLWd8XFwtc3xcXC16fFxcLWt8XFwtZXxcXC1PfFxcLVR8XFwtQnxcXC1NfFxcLUF8XFwtWHxcXC1XfFxcLWN8XFwtUnxcXC1vfFxcLXh8XFwtd3xcXC1yfFxcYig/OmFuZHxjbXB8ZXF8Z2V8Z3R8bGV8bHR8bmV8bm90fG9yfHhvcikifSx7dG9rZW46ImxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX19O2QuaW5oZXJpdHMoZyxmKSxiLlBlcmxIaWdobGlnaHRSdWxlcz1nfSksYWNlLmRlZmluZSgiYWNlL21vZGUvcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImFuZHxhc3xhc3NlcnR8YnJlYWt8Y2xhc3N8Y29udGludWV8ZGVmfGRlbHxlbGlmfGVsc2V8ZXhjZXB0fGV4ZWN8ZmluYWxseXxmb3J8ZnJvbXxnbG9iYWx8aWZ8aW1wb3J0fGlufGlzfGxhbWJkYXxub3R8b3J8cGFzc3xwcmludHxyYWlzZXxyZXR1cm58dHJ5fHdoaWxlfHdpdGh8eWllbGQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJUcnVlfEZhbHNlfE5vbmV8Tm90SW1wbGVtZW50ZWR8RWxsaXBzaXN8X19kZWJ1Z19fIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgiYWJzfGRpdm1vZHxpbnB1dHxvcGVufHN0YXRpY21ldGhvZHxhbGx8ZW51bWVyYXRlfGludHxvcmR8c3RyfGFueXxldmFsfGlzaW5zdGFuY2V8cG93fHN1bXxiYXNlc3RyaW5nfGV4ZWNmaWxlfGlzc3ViY2xhc3N8cHJpbnR8c3VwZXJ8YmluZmlsZXxpdGVyfHByb3BlcnR5fHR1cGxlfGJvb2x8ZmlsdGVyfGxlbnxyYW5nZXx0eXBlfGJ5dGVhcnJheXxmbG9hdHxsaXN0fHJhd19pbnB1dHx1bmljaHJ8Y2FsbGFibGV8Zm9ybWF0fGxvY2Fsc3xyZWR1Y2V8dW5pY29kZXxjaHJ8ZnJvemVuc2V0fGxvbmd8cmVsb2FkfHZhcnN8Y2xhc3NtZXRob2R8Z2V0YXR0cnxtYXB8cmVwcnx4cmFuZ2V8Y21wfGdsb2JhbHN8bWF4fHJldmVyc2VkfHppcHxjb21waWxlfGhhc2F0dHJ8bWVtb3J5dmlld3xyb3VuZHxfX2ltcG9ydF9ffGNvbXBsZXh8aGFzaHxtaW58c2V0fGFwcGx5fGRlbGF0dHJ8aGVscHxuZXh0fHNldGF0dHJ8YnVmZmVyfGRpY3R8aGV4fG9iamVjdHxzbGljZXxjb2VyY2V8ZGlyfGlkfG9jdHxzb3J0ZWR8aW50ZXJuIi5zcGxpdCgifCIpKSxkPWUuYXJyYXlUb01hcCgiIi5zcGxpdCgifCIpKSxmPSIoPzpyfHV8dXJ8UnxVfFVSfFVyfHVSKT8iLGc9Iig/Oig/OlsxLTldXFxkKil8KD86MCkpIixoPSIoPzowW29PXT9bMC03XSspIixpPSIoPzowW3hYXVtcXGRBLUZhLWZdKykiLGo9Iig/OjBbYkJdWzAxXSspIixrPSIoPzoiK2crInwiK2grInwiK2krInwiK2orIikiLGw9Iig/OltlRV1bKy1dP1xcZCspIixtPSIoPzpcXC5cXGQrKSIsbj0iKD86XFxkKykiLG89Iig/Oig/OiIrbisiPyIrbSsiKXwoPzoiK24rIlxcLikpIixwPSIoPzooPzoiK28rInwiK24rIikiK2wrIikiLHE9Iig/OiIrcCsifCIrbysiKSI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIjLiokIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmYrJyJ7M30oPzpbXlxcXFxdfFxcXFwuKSo/InszfSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDpmKyciezN9LiokJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDpmKyciKD86W15cXFxcXXxcXFxcLikqPyInfSx7dG9rZW46InN0cmluZyIscmVnZXg6ZisiJ3szfSg/OlteXFxcXF18XFxcXC4pKj8nezN9In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OmYrIid7M30uKiQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6ZisiJyg/OlteXFxcXF18XFxcXC4pKj8nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiKD86IitxKyJ8XFxkKylbakpdXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDpxfSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmsrIltsTF1cXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmsrIlxcYiJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShlKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShlKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoZSk/ImludmFsaWQuaWxsZWdhbCI6Yy5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6ZT09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXCt8XFwtfFxcKnxcXCpcXCp8XFwvfFxcL1xcL3wlfDw8fD4+fCZ8XFx8fFxcXnx+fDx8Pnw8PXw9Pnw9PXwhPXw8Pnw9In0se3Rva2VuOiJscGFyZW4ucGFyZW4iLHJlZ2V4OiJbXFxbXFwoXFx7XSJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXVxcKVxcfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/OlteXFxcXF18XFxcXC4pKj8iezN9JyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/J3szfSIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfX07ZC5pbmhlcml0cyhnLGYpLGIuUHl0aG9uSGlnaGxpZ2h0UnVsZXM9Z30pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-pgsql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wZ3NxbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9wZ3NxbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiYWNlL2xpYi9vb3AiKSxlPWEoImFjZS9tb2RlL3RleHQiKS5Nb2RlLGY9YSgiYWNlL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoImFjZS9tb2RlL3Bnc3FsX2hpZ2hsaWdodF9ydWxlcyIpLlBnc3FsSGlnaGxpZ2h0UnVsZXMsaD1hKCJhY2UvcmFuZ2UiKS5SYW5nZSxpPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSl9O2QuaW5oZXJpdHMoaSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKS0tLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGk9bmV3IGgoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aS5zdGFydC5yb3c9ZyxpLmVuZC5yb3c9ZyxpLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGksa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiLS0iKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9PSJzdGFydCJ8fGE9PSJrZXl3b3JkLnN0YXRlbWVudEVuZCI/IiI6dGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChpLnByb3RvdHlwZSksYi5Nb2RlPWl9KSxkZWZpbmUoImFjZS9tb2RlL3Bnc3FsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9wZXJsX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3B5dGhvbl9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiYWNlL2xpYi9vb3AiKSxlPWEoImFjZS9saWIvbGFuZyIpLGY9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9wZXJsX2hpZ2hsaWdodF9ydWxlcyIpLlBlcmxIaWdobGlnaHRSdWxlcyxpPWEoIi4vcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyIpLlB5dGhvbkhpZ2hsaWdodFJ1bGVzLGo9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImFib3J0fGFic29sdXRlfGFic3RpbWV8YWNjZXNzfGFjbGl0ZW18YWN0aW9ufGFkZHxhZG1pbnxhZnRlcnxhZ2dyZWdhdGV8YWxsfGFsc298YWx0ZXJ8YWx3YXlzfGFuYWx5c2V8YW5hbHl6ZXxhbmR8YW55fGFueWFycmF5fGFueWVsZW1lbnR8YW55ZW51bXxhbnlub25hcnJheXxhcnJheXxhc3xhc2N8YXNzZXJ0aW9ufGFzc2lnbm1lbnR8YXN5bW1ldHJpY3xhdHxhdHRyaWJ1dGV8YXV0aG9yaXphdGlvbnxiYWNrd2FyZHxiZWZvcmV8YmVnaW58YmV0d2VlbnxiaWdpbnR8YmluYXJ5fGJpdHxib29sfGJvb2xlYW58Ym90aHxib3h8YnBjaGFyfGJ5fGJ5dGVhfGNhY2hlfGNhbGxlZHxjYXNjYWRlfGNhc2NhZGVkfGNhc2V8Y2FzdHxjYXRhbG9nfGNoYWlufGNoYXJ8Y2hhcmFjdGVyfGNoYXJhY3RlcmlzdGljc3xjaGVja3xjaGVja3BvaW50fGNpZHxjaWRyfGNpcmNsZXxjbGFzc3xjbG9zZXxjbHVzdGVyfGNvYWxlc2NlfGNvbGxhdGV8Y29sbGF0aW9ufGNvbHVtbnxjb21tZW50fGNvbW1lbnRzfGNvbW1pdHxjb21taXR0ZWR8Y29uY3VycmVudGx5fGNvbmZpZ3VyYXRpb258Y29ubmVjdGlvbnxjb25zdHJhaW50fGNvbnN0cmFpbnRzfGNvbnRlbnR8Y29udGludWV8Y29udmVyc2lvbnxjb3B5fGNvc3R8Y3JlYXRlfGNyb3NzfGNzdHJpbmd8Y3N2fGN1cnJlbnR8Y3VycmVudF9jYXRhbG9nfGN1cnJlbnRfZGF0ZXxjdXJyZW50X3JvbGV8Y3VycmVudF9zY2hlbWF8Y3VycmVudF90aW1lfGN1cnJlbnRfdGltZXN0YW1wfGN1cnJlbnRfdXNlcnxjdXJzb3J8Y3ljbGV8ZGF0YXxkYXRhYmFzZXxkYXRlfGRheXxkZWFsbG9jYXRlfGRlY3xkZWNpbWFsfGRlY2xhcmV8ZGVmYXVsdHxkZWZhdWx0c3xkZWZlcnJhYmxlfGRlZmVycmVkfGRlZmluZXJ8ZGVsZXRlfGRlbGltaXRlcnxkZWxpbWl0ZXJzfGRlc2N8ZGljdGlvbmFyeXxkaXNhYmxlfGRpc2NhcmR8ZGlzdGluY3R8ZG98ZG9jdW1lbnR8ZG9tYWlufGRvdWJsZXxkcm9wfGVhY2h8ZWxzZXxlbmFibGV8ZW5jb2Rpbmd8ZW5jcnlwdGVkfGVuZHxlbnVtfGVzY2FwZXxleGNlcHR8ZXhjbHVkZXxleGNsdWRpbmd8ZXhjbHVzaXZlfGV4ZWN1dGV8ZXhpc3RzfGV4cGxhaW58ZXh0ZW5zaW9ufGV4dGVybmFsfGV4dHJhY3R8ZmFsc2V8ZmFtaWx5fGZkd19oYW5kbGVyfGZldGNofGZpcnN0fGZsb2F0fGZsb2F0NHxmbG9hdDh8Zm9sbG93aW5nfGZvcnxmb3JjZXxmb3JlaWdufGZvcndhcmR8ZnJlZXplfGZyb218ZnVsbHxmdW5jdGlvbnxmdW5jdGlvbnN8Z2xvYmFsfGdyYW50fGdyYW50ZWR8Z3JlYXRlc3R8Z3JvdXB8Z3RzdmVjdG9yfGhhbmRsZXJ8aGF2aW5nfGhlYWRlcnxob2xkfGhvdXJ8aWRlbnRpdHl8aWZ8aWxpa2V8aW1tZWRpYXRlfGltbXV0YWJsZXxpbXBsaWNpdHxpbnxpbmNsdWRpbmd8aW5jcmVtZW50fGluZGV4fGluZGV4ZXN8aW5ldHxpbmhlcml0fGluaGVyaXRzfGluaXRpYWxseXxpbmxpbmV8aW5uZXJ8aW5vdXR8aW5wdXR8aW5zZW5zaXRpdmV8aW5zZXJ0fGluc3RlYWR8aW50fGludDJ8aW50MnZlY3RvcnxpbnQ0fGludDh8aW50ZWdlcnxpbnRlcm5hbHxpbnRlcnNlY3R8aW50ZXJ2YWx8aW50b3xpbnZva2VyfGlzfGlzbnVsbHxpc29sYXRpb258am9pbnxrZXl8bGFiZWx8bGFuZ3VhZ2V8bGFuZ3VhZ2VfaGFuZGxlcnxsYXJnZXxsYXN0fGxjX2NvbGxhdGV8bGNfY3R5cGV8bGVhZGluZ3xsZWFzdHxsZWZ0fGxldmVsfGxpa2V8bGltaXR8bGluZXxsaXN0ZW58bG9hZHxsb2NhbHxsb2NhbHRpbWV8bG9jYWx0aW1lc3RhbXB8bG9jYXRpb258bG9ja3xsc2VnfG1hY2FkZHJ8bWFwcGluZ3xtYXRjaHxtYXh2YWx1ZXxtaW51dGV8bWludmFsdWV8bW9kZXxtb25leXxtb250aHxtb3ZlfG5hbWV8bmFtZXN8bmF0aW9uYWx8bmF0dXJhbHxuY2hhcnxuZXh0fG5vfG5vbmV8bm90fG5vdGhpbmd8bm90aWZ5fG5vdG51bGx8bm93YWl0fG51bGx8bnVsbGlmfG51bGxzfG51bWVyaWN8b2JqZWN0fG9mfG9mZnxvZmZzZXR8b2lkfG9pZHN8b2lkdmVjdG9yfG9ufG9ubHl8b3BhcXVlfG9wZXJhdG9yfG9wdGlvbnxvcHRpb25zfG9yfG9yZGVyfG91dHxvdXRlcnxvdmVyfG92ZXJsYXBzfG92ZXJsYXl8b3duZWR8b3duZXJ8cGFyc2VyfHBhcnRpYWx8cGFydGl0aW9ufHBhc3Npbmd8cGFzc3dvcmR8cGF0aHxwZ19hdHRyaWJ1dGV8cGdfYXV0aF9tZW1iZXJzfHBnX2F1dGhpZHxwZ19jbGFzc3xwZ19kYXRhYmFzZXxwZ19ub2RlX3RyZWV8cGdfcHJvY3xwZ190eXBlfHBsYWNpbmd8cGxhbnN8cG9pbnR8cG9seWdvbnxwb3NpdGlvbnxwcmVjZWRpbmd8cHJlY2lzaW9ufHByZXBhcmV8cHJlcGFyZWR8cHJlc2VydmV8cHJpbWFyeXxwcmlvcnxwcml2aWxlZ2VzfHByb2NlZHVyYWx8cHJvY2VkdXJlfHF1b3RlfHJhbmdlfHJlYWR8cmVhbHxyZWFzc2lnbnxyZWNoZWNrfHJlY29yZHxyZWN1cnNpdmV8cmVmfHJlZmN1cnNvcnxyZWZlcmVuY2VzfHJlZ2NsYXNzfHJlZ2NvbmZpZ3xyZWdkaWN0aW9uYXJ5fHJlZ29wZXJ8cmVnb3BlcmF0b3J8cmVncHJvY3xyZWdwcm9jZWR1cmV8cmVndHlwZXxyZWluZGV4fHJlbGF0aXZlfHJlbGVhc2V8cmVsdGltZXxyZW5hbWV8cmVwZWF0YWJsZXxyZXBsYWNlfHJlcGxpY2F8cmVzZXR8cmVzdGFydHxyZXN0cmljdHxyZXR1cm5pbmd8cmV0dXJuc3xyZXZva2V8cmlnaHR8cm9sZXxyb2xsYmFja3xyb3d8cm93c3xydWxlfHNhdmVwb2ludHxzY2hlbWF8c2Nyb2xsfHNlYXJjaHxzZWNvbmR8c2VjdXJpdHl8c2VsZWN0fHNlcXVlbmNlfHNlcXVlbmNlc3xzZXJpYWxpemFibGV8c2VydmVyfHNlc3Npb258c2Vzc2lvbl91c2VyfHNldHxzZXRvZnxzaGFyZXxzaG93fHNpbWlsYXJ8c2ltcGxlfHNtYWxsaW50fHNtZ3J8c29tZXxzdGFibGV8c3RhbmRhbG9uZXxzdGFydHxzdGF0ZW1lbnR8c3RhdGlzdGljc3xzdGRpbnxzdGRvdXR8c3RvcmFnZXxzdHJpY3R8c3RyaXB8c3Vic3RyaW5nfHN5bW1ldHJpY3xzeXNpZHxzeXN0ZW18dGFibGV8dGFibGVzfHRhYmxlc3BhY2V8dGVtcHx0ZW1wbGF0ZXx0ZW1wb3Jhcnl8dGV4dHx0aGVufHRpZHx0aW1lfHRpbWVzdGFtcHx0aW1lc3RhbXB0enx0aW1ldHp8dGludGVydmFsfHRvfHRyYWlsaW5nfHRyYW5zYWN0aW9ufHRyZWF0fHRyaWdnZXJ8dHJpbXx0cnVlfHRydW5jYXRlfHRydXN0ZWR8dHNxdWVyeXx0c3ZlY3Rvcnx0eGlkX3NuYXBzaG90fHR5cGV8dW5ib3VuZGVkfHVuY29tbWl0dGVkfHVuZW5jcnlwdGVkfHVuaW9ufHVuaXF1ZXx1bmtub3dufHVubGlzdGVufHVubG9nZ2VkfHVudGlsfHVwZGF0ZXx1c2VyfHVzaW5nfHV1aWR8dmFjdXVtfHZhbGlkfHZhbGlkYXRlfHZhbGlkYXRvcnx2YWx1ZXx2YWx1ZXN8dmFyYml0fHZhcmNoYXJ8dmFyaWFkaWN8dmFyeWluZ3x2ZXJib3NlfHZlcnNpb258dmlld3x2b2lkfHZvbGF0aWxlfHdoZW58d2hlcmV8d2hpdGVzcGFjZXx3aW5kb3d8d2l0aHx3aXRob3V0fHdvcmt8d3JhcHBlcnx3cml0ZXx4aWR8eG1sfHhtbGF0dHJpYnV0ZXN8eG1sY29uY2F0fHhtbGVsZW1lbnR8eG1sZXhpc3RzfHhtbGZvcmVzdHx4bWxwYXJzZXx4bWxwaXx4bWxyb290fHhtbHNlcmlhbGl6ZXx5ZWFyfHllc3x6b25lIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgiUklfRktleV9jYXNjYWRlX2RlbHxSSV9GS2V5X2Nhc2NhZGVfdXBkfFJJX0ZLZXlfY2hlY2tfaW5zfFJJX0ZLZXlfY2hlY2tfdXBkfFJJX0ZLZXlfbm9hY3Rpb25fZGVsfFJJX0ZLZXlfbm9hY3Rpb25fdXBkfFJJX0ZLZXlfcmVzdHJpY3RfZGVsfFJJX0ZLZXlfcmVzdHJpY3RfdXBkfFJJX0ZLZXlfc2V0ZGVmYXVsdF9kZWx8UklfRktleV9zZXRkZWZhdWx0X3VwZHxSSV9GS2V5X3NldG51bGxfZGVsfFJJX0ZLZXlfc2V0bnVsbF91cGR8YWJicmV2fGFic3xhYnN0aW1lfGFic3RpbWVlcXxhYnN0aW1lZ2V8YWJzdGltZWd0fGFic3RpbWVpbnxhYnN0aW1lbGV8YWJzdGltZWx0fGFic3RpbWVuZXxhYnN0aW1lb3V0fGFic3RpbWVyZWN2fGFic3RpbWVzZW5kfGFjbGNvbnRhaW5zfGFjbGV4cGxvZGV8YWNsaW5zZXJ0fGFjbGl0ZW1lcXxhY2xpdGVtaW58YWNsaXRlbW91dHxhY2xyZW1vdmV8YWNvc3xhZ2V8YW55X2lufGFueV9vdXR8YW55YXJyYXlfaW58YW55YXJyYXlfb3V0fGFueWFycmF5X3JlY3Z8YW55YXJyYXlfc2VuZHxhbnllbGVtZW50X2lufGFueWVsZW1lbnRfb3V0fGFueWVudW1faW58YW55ZW51bV9vdXR8YW55bm9uYXJyYXlfaW58YW55bm9uYXJyYXlfb3V0fGFueXRleHRjYXR8YXJlYXxhcmVham9pbnNlbHxhcmVhc2VsfGFycmF5X2FnZ3xhcnJheV9hZ2dfZmluYWxmbnxhcnJheV9hZ2dfdHJhbnNmbnxhcnJheV9hcHBlbmR8YXJyYXlfY2F0fGFycmF5X2RpbXN8YXJyYXlfZXF8YXJyYXlfZmlsbHxhcnJheV9nZXxhcnJheV9ndHxhcnJheV9pbnxhcnJheV9sYXJnZXJ8YXJyYXlfbGV8YXJyYXlfbGVuZ3RofGFycmF5X2xvd2VyfGFycmF5X2x0fGFycmF5X25kaW1zfGFycmF5X25lfGFycmF5X291dHxhcnJheV9wcmVwZW5kfGFycmF5X3JlY3Z8YXJyYXlfc2VuZHxhcnJheV9zbWFsbGVyfGFycmF5X3RvX3N0cmluZ3xhcnJheV91cHBlcnxhcnJheWNvbnRhaW5lZHxhcnJheWNvbnRhaW5zfGFycmF5b3ZlcmxhcHxhc2NpaXxhc2NpaV90b19taWN8YXNjaWlfdG9fdXRmOHxhc2lufGF0YW58YXRhbjJ8YXZnfGJpZzVfdG9fZXVjX3R3fGJpZzVfdG9fbWljfGJpZzVfdG9fdXRmOHxiaXRfYW5kfGJpdF9pbnxiaXRfbGVuZ3RofGJpdF9vcnxiaXRfb3V0fGJpdF9yZWN2fGJpdF9zZW5kfGJpdGFuZHxiaXRjYXR8Yml0Y21wfGJpdGVxfGJpdGdlfGJpdGd0fGJpdGxlfGJpdGx0fGJpdG5lfGJpdG5vdHxiaXRvcnxiaXRzaGlmdGxlZnR8Yml0c2hpZnRyaWdodHxiaXR0eXBtb2RpbnxiaXR0eXBtb2RvdXR8Yml0eG9yfGJvb2x8Ym9vbF9hbmR8Ym9vbF9vcnxib29sYW5kX3N0YXRlZnVuY3xib29sZXF8Ym9vbGdlfGJvb2xndHxib29saW58Ym9vbGxlfGJvb2xsdHxib29sbmV8Ym9vbG9yX3N0YXRlZnVuY3xib29sb3V0fGJvb2xyZWN2fGJvb2xzZW5kfGJveHxib3hfYWJvdmV8Ym94X2Fib3ZlX2VxfGJveF9hZGR8Ym94X2JlbG93fGJveF9iZWxvd19lcXxib3hfY2VudGVyfGJveF9jb250YWlufGJveF9jb250YWluX3B0fGJveF9jb250YWluZWR8Ym94X2Rpc3RhbmNlfGJveF9kaXZ8Ym94X2VxfGJveF9nZXxib3hfZ3R8Ym94X2lufGJveF9pbnRlcnNlY3R8Ym94X2xlfGJveF9sZWZ0fGJveF9sdHxib3hfbXVsfGJveF9vdXR8Ym94X292ZXJhYm92ZXxib3hfb3ZlcmJlbG93fGJveF9vdmVybGFwfGJveF9vdmVybGVmdHxib3hfb3ZlcnJpZ2h0fGJveF9yZWN2fGJveF9yaWdodHxib3hfc2FtZXxib3hfc2VuZHxib3hfc3VifGJwY2hhcl9sYXJnZXJ8YnBjaGFyX3BhdHRlcm5fZ2V8YnBjaGFyX3BhdHRlcm5fZ3R8YnBjaGFyX3BhdHRlcm5fbGV8YnBjaGFyX3BhdHRlcm5fbHR8YnBjaGFyX3NtYWxsZXJ8YnBjaGFyY21wfGJwY2hhcmVxfGJwY2hhcmdlfGJwY2hhcmd0fGJwY2hhcmljbGlrZXxicGNoYXJpY25saWtlfGJwY2hhcmljcmVnZXhlcXxicGNoYXJpY3JlZ2V4bmV8YnBjaGFyaW58YnBjaGFybGV8YnBjaGFybGlrZXxicGNoYXJsdHxicGNoYXJuZXxicGNoYXJubGlrZXxicGNoYXJvdXR8YnBjaGFycmVjdnxicGNoYXJyZWdleGVxfGJwY2hhcnJlZ2V4bmV8YnBjaGFyc2VuZHxicGNoYXJ0eXBtb2RpbnxicGNoYXJ0eXBtb2RvdXR8YnJvYWRjYXN0fGJ0YWJzdGltZWNtcHxidGFycmF5Y21wfGJ0YmVnaW5zY2FufGJ0Ym9vbGNtcHxidGJwY2hhcl9wYXR0ZXJuX2NtcHxidGJ1aWxkfGJ0YnVpbGRlbXB0eXxidGJ1bGtkZWxldGV8YnRjaGFyY21wfGJ0Y29zdGVzdGltYXRlfGJ0ZW5kc2NhbnxidGZsb2F0NDhjbXB8YnRmbG9hdDRjbXB8YnRmbG9hdDg0Y21wfGJ0ZmxvYXQ4Y21wfGJ0Z2V0Yml0bWFwfGJ0Z2V0dHVwbGV8YnRpbnNlcnR8YnRpbnQyNGNtcHxidGludDI4Y21wfGJ0aW50MmNtcHxidGludDQyY21wfGJ0aW50NDhjbXB8YnRpbnQ0Y21wfGJ0aW50ODJjbXB8YnRpbnQ4NGNtcHxidGludDhjbXB8YnRtYXJrcG9zfGJ0bmFtZWNtcHxidG9pZGNtcHxidG9pZHZlY3RvcmNtcHxidG9wdGlvbnN8YnRyZWNvcmRjbXB8YnRyZWx0aW1lY21wfGJ0cmVzY2FufGJ0cmVzdHJwb3N8YnRyaW18YnR0ZXh0X3BhdHRlcm5fY21wfGJ0dGV4dGNtcHxidHRpZGNtcHxidHRpbnRlcnZhbGNtcHxidHZhY3V1bWNsZWFudXB8Ynl0ZWFjYXR8Ynl0ZWFjbXB8Ynl0ZWFlcXxieXRlYWdlfGJ5dGVhZ3R8Ynl0ZWFpbnxieXRlYWxlfGJ5dGVhbGlrZXxieXRlYWx0fGJ5dGVhbmV8Ynl0ZWFubGlrZXxieXRlYW91dHxieXRlYXJlY3Z8Ynl0ZWFzZW5kfGNhc2hfY21wfGNhc2hfZGl2X2Nhc2h8Y2FzaF9kaXZfZmx0NHxjYXNoX2Rpdl9mbHQ4fGNhc2hfZGl2X2ludDJ8Y2FzaF9kaXZfaW50NHxjYXNoX2VxfGNhc2hfZ2V8Y2FzaF9ndHxjYXNoX2lufGNhc2hfbGV8Y2FzaF9sdHxjYXNoX21pfGNhc2hfbXVsX2ZsdDR8Y2FzaF9tdWxfZmx0OHxjYXNoX211bF9pbnQyfGNhc2hfbXVsX2ludDR8Y2FzaF9uZXxjYXNoX291dHxjYXNoX3BsfGNhc2hfcmVjdnxjYXNoX3NlbmR8Y2FzaF93b3Jkc3xjYXNobGFyZ2VyfGNhc2hzbWFsbGVyfGNicnR8Y2VpbHxjZWlsaW5nfGNlbnRlcnxjaGFyfGNoYXJfbGVuZ3RofGNoYXJhY3Rlcl9sZW5ndGh8Y2hhcmVxfGNoYXJnZXxjaGFyZ3R8Y2hhcmlufGNoYXJsZXxjaGFybHR8Y2hhcm5lfGNoYXJvdXR8Y2hhcnJlY3Z8Y2hhcnNlbmR8Y2hyfGNpZGVxfGNpZGlufGNpZG91dHxjaWRyfGNpZHJfaW58Y2lkcl9vdXR8Y2lkcl9yZWN2fGNpZHJfc2VuZHxjaWRyZWN2fGNpZHNlbmR8Y2lyY2xlfGNpcmNsZV9hYm92ZXxjaXJjbGVfYWRkX3B0fGNpcmNsZV9iZWxvd3xjaXJjbGVfY2VudGVyfGNpcmNsZV9jb250YWlufGNpcmNsZV9jb250YWluX3B0fGNpcmNsZV9jb250YWluZWR8Y2lyY2xlX2Rpc3RhbmNlfGNpcmNsZV9kaXZfcHR8Y2lyY2xlX2VxfGNpcmNsZV9nZXxjaXJjbGVfZ3R8Y2lyY2xlX2lufGNpcmNsZV9sZXxjaXJjbGVfbGVmdHxjaXJjbGVfbHR8Y2lyY2xlX211bF9wdHxjaXJjbGVfbmV8Y2lyY2xlX291dHxjaXJjbGVfb3ZlcmFib3ZlfGNpcmNsZV9vdmVyYmVsb3d8Y2lyY2xlX292ZXJsYXB8Y2lyY2xlX292ZXJsZWZ0fGNpcmNsZV9vdmVycmlnaHR8Y2lyY2xlX3JlY3Z8Y2lyY2xlX3JpZ2h0fGNpcmNsZV9zYW1lfGNpcmNsZV9zZW5kfGNpcmNsZV9zdWJfcHR8Y2xvY2tfdGltZXN0YW1wfGNsb3NlX2xifGNsb3NlX2xzfGNsb3NlX2xzZWd8Y2xvc2VfcGJ8Y2xvc2VfcGx8Y2xvc2VfcHN8Y2xvc2Vfc2J8Y2xvc2Vfc2x8Y29sX2Rlc2NyaXB0aW9ufGNvbmNhdHxjb25jYXRfd3N8Y29udGpvaW5zZWx8Y29udHNlbHxjb252ZXJ0fGNvbnZlcnRfZnJvbXxjb252ZXJ0X3RvfGNvcnJ8Y29zfGNvdHxjb3VudHxjb3Zhcl9wb3B8Y292YXJfc2FtcHxjc3RyaW5nX2lufGNzdHJpbmdfb3V0fGNzdHJpbmdfcmVjdnxjc3RyaW5nX3NlbmR8Y3VtZV9kaXN0fGN1cnJlbnRfZGF0YWJhc2V8Y3VycmVudF9xdWVyeXxjdXJyZW50X3NjaGVtYXxjdXJyZW50X3NjaGVtYXN8Y3VycmVudF9zZXR0aW5nfGN1cnJlbnRfdXNlcnxjdXJydGlkfGN1cnJ0aWQyfGN1cnJ2YWx8Y3Vyc29yX3RvX3htbHxjdXJzb3JfdG9feG1sc2NoZW1hfGRhdGFiYXNlX3RvX3htbHxkYXRhYmFzZV90b194bWxfYW5kX3htbHNjaGVtYXxkYXRhYmFzZV90b194bWxzY2hlbWF8ZGF0ZXxkYXRlX2NtcHxkYXRlX2NtcF90aW1lc3RhbXB8ZGF0ZV9jbXBfdGltZXN0YW1wdHp8ZGF0ZV9lcXxkYXRlX2VxX3RpbWVzdGFtcHxkYXRlX2VxX3RpbWVzdGFtcHR6fGRhdGVfZ2V8ZGF0ZV9nZV90aW1lc3RhbXB8ZGF0ZV9nZV90aW1lc3RhbXB0enxkYXRlX2d0fGRhdGVfZ3RfdGltZXN0YW1wfGRhdGVfZ3RfdGltZXN0YW1wdHp8ZGF0ZV9pbnxkYXRlX2xhcmdlcnxkYXRlX2xlfGRhdGVfbGVfdGltZXN0YW1wfGRhdGVfbGVfdGltZXN0YW1wdHp8ZGF0ZV9sdHxkYXRlX2x0X3RpbWVzdGFtcHxkYXRlX2x0X3RpbWVzdGFtcHR6fGRhdGVfbWl8ZGF0ZV9taV9pbnRlcnZhbHxkYXRlX21paXxkYXRlX25lfGRhdGVfbmVfdGltZXN0YW1wfGRhdGVfbmVfdGltZXN0YW1wdHp8ZGF0ZV9vdXR8ZGF0ZV9wYXJ0fGRhdGVfcGxfaW50ZXJ2YWx8ZGF0ZV9wbGl8ZGF0ZV9yZWN2fGRhdGVfc2VuZHxkYXRlX3NtYWxsZXJ8ZGF0ZV90cnVuY3xkYXRldGltZV9wbHxkYXRldGltZXR6X3BsfGRjYnJ0fGRlY29kZXxkZWdyZWVzfGRlbnNlX3Jhbmt8ZGV4cHxkaWFnb25hbHxkaWFtZXRlcnxkaXNwZWxsX2luaXR8ZGlzcGVsbF9sZXhpemV8ZGlzdF9jcG9seXxkaXN0X2xifGRpc3RfcGJ8ZGlzdF9wY3xkaXN0X3BsfGRpc3RfcHBhdGh8ZGlzdF9wc3xkaXN0X3NifGRpc3Rfc2x8ZGl2fGRsb2cxfGRsb2cxMHxkb21haW5faW58ZG9tYWluX3JlY3Z8ZHBvd3xkcm91bmR8ZHNpbXBsZV9pbml0fGRzaW1wbGVfbGV4aXplfGRzbm93YmFsbF9pbml0fGRzbm93YmFsbF9sZXhpemV8ZHNxcnR8ZHN5bm9ueW1faW5pdHxkc3lub255bV9sZXhpemV8ZHRydW5jfGVuY29kZXxlbnVtX2NtcHxlbnVtX2VxfGVudW1fZmlyc3R8ZW51bV9nZXxlbnVtX2d0fGVudW1faW58ZW51bV9sYXJnZXJ8ZW51bV9sYXN0fGVudW1fbGV8ZW51bV9sdHxlbnVtX25lfGVudW1fb3V0fGVudW1fcmFuZ2V8ZW51bV9yZWN2fGVudW1fc2VuZHxlbnVtX3NtYWxsZXJ8ZXFqb2luc2VsfGVxc2VsfGV1Y19jbl90b19taWN8ZXVjX2NuX3RvX3V0Zjh8ZXVjX2ppc18yMDA0X3RvX3NoaWZ0X2ppc18yMDA0fGV1Y19qaXNfMjAwNF90b191dGY4fGV1Y19qcF90b19taWN8ZXVjX2pwX3RvX3NqaXN8ZXVjX2pwX3RvX3V0Zjh8ZXVjX2tyX3RvX21pY3xldWNfa3JfdG9fdXRmOHxldWNfdHdfdG9fYmlnNXxldWNfdHdfdG9fbWljfGV1Y190d190b191dGY4fGV2ZXJ5fGV4cHxmYWN0b3JpYWx8ZmFtaWx5fGZkd19oYW5kbGVyX2lufGZkd19oYW5kbGVyX291dHxmaXJzdF92YWx1ZXxmbG9hdDR8ZmxvYXQ0OGRpdnxmbG9hdDQ4ZXF8ZmxvYXQ0OGdlfGZsb2F0NDhndHxmbG9hdDQ4bGV8ZmxvYXQ0OGx0fGZsb2F0NDhtaXxmbG9hdDQ4bXVsfGZsb2F0NDhuZXxmbG9hdDQ4cGx8ZmxvYXQ0X2FjY3VtfGZsb2F0NGFic3xmbG9hdDRkaXZ8ZmxvYXQ0ZXF8ZmxvYXQ0Z2V8ZmxvYXQ0Z3R8ZmxvYXQ0aW58ZmxvYXQ0bGFyZ2VyfGZsb2F0NGxlfGZsb2F0NGx0fGZsb2F0NG1pfGZsb2F0NG11bHxmbG9hdDRuZXxmbG9hdDRvdXR8ZmxvYXQ0cGx8ZmxvYXQ0cmVjdnxmbG9hdDRzZW5kfGZsb2F0NHNtYWxsZXJ8ZmxvYXQ0dW18ZmxvYXQ0dXB8ZmxvYXQ4fGZsb2F0ODRkaXZ8ZmxvYXQ4NGVxfGZsb2F0ODRnZXxmbG9hdDg0Z3R8ZmxvYXQ4NGxlfGZsb2F0ODRsdHxmbG9hdDg0bWl8ZmxvYXQ4NG11bHxmbG9hdDg0bmV8ZmxvYXQ4NHBsfGZsb2F0OF9hY2N1bXxmbG9hdDhfYXZnfGZsb2F0OF9jb3JyfGZsb2F0OF9jb3Zhcl9wb3B8ZmxvYXQ4X2NvdmFyX3NhbXB8ZmxvYXQ4X3JlZ3JfYWNjdW18ZmxvYXQ4X3JlZ3JfYXZneHxmbG9hdDhfcmVncl9hdmd5fGZsb2F0OF9yZWdyX2ludGVyY2VwdHxmbG9hdDhfcmVncl9yMnxmbG9hdDhfcmVncl9zbG9wZXxmbG9hdDhfcmVncl9zeHh8ZmxvYXQ4X3JlZ3Jfc3h5fGZsb2F0OF9yZWdyX3N5eXxmbG9hdDhfc3RkZGV2X3BvcHxmbG9hdDhfc3RkZGV2X3NhbXB8ZmxvYXQ4X3Zhcl9wb3B8ZmxvYXQ4X3Zhcl9zYW1wfGZsb2F0OGFic3xmbG9hdDhkaXZ8ZmxvYXQ4ZXF8ZmxvYXQ4Z2V8ZmxvYXQ4Z3R8ZmxvYXQ4aW58ZmxvYXQ4bGFyZ2VyfGZsb2F0OGxlfGZsb2F0OGx0fGZsb2F0OG1pfGZsb2F0OG11bHxmbG9hdDhuZXxmbG9hdDhvdXR8ZmxvYXQ4cGx8ZmxvYXQ4cmVjdnxmbG9hdDhzZW5kfGZsb2F0OHNtYWxsZXJ8ZmxvYXQ4dW18ZmxvYXQ4dXB8Zmxvb3J8Zmx0NF9tdWxfY2FzaHxmbHQ4X211bF9jYXNofGZtZ3JfY192YWxpZGF0b3J8Zm1ncl9pbnRlcm5hbF92YWxpZGF0b3J8Zm1ncl9zcWxfdmFsaWRhdG9yfGZvcm1hdHxmb3JtYXRfdHlwZXxnYjE4MDMwX3RvX3V0Zjh8Z2JrX3RvX3V0Zjh8Z2VuZXJhdGVfc2VyaWVzfGdlbmVyYXRlX3N1YnNjcmlwdHN8Z2V0X2JpdHxnZXRfYnl0ZXxnZXRfY3VycmVudF90c19jb25maWd8Z2V0ZGF0YWJhc2VlbmNvZGluZ3xnZXRwZ3VzZXJuYW1lfGdpbl9jbXBfcHJlZml4fGdpbl9jbXBfdHNsZXhlbWV8Z2luX2V4dHJhY3RfdHNxdWVyeXxnaW5fZXh0cmFjdF90c3ZlY3RvcnxnaW5fdHNxdWVyeV9jb25zaXN0ZW50fGdpbmFycmF5Y29uc2lzdGVudHxnaW5hcnJheWV4dHJhY3R8Z2luYmVnaW5zY2FufGdpbmJ1aWxkfGdpbmJ1aWxkZW1wdHl8Z2luYnVsa2RlbGV0ZXxnaW5jb3N0ZXN0aW1hdGV8Z2luZW5kc2NhbnxnaW5nZXRiaXRtYXB8Z2luaW5zZXJ0fGdpbm1hcmtwb3N8Z2lub3B0aW9uc3xnaW5xdWVyeWFycmF5ZXh0cmFjdHxnaW5yZXNjYW58Z2lucmVzdHJwb3N8Z2ludmFjdXVtY2xlYW51cHxnaXN0X2JveF9jb21wcmVzc3xnaXN0X2JveF9jb25zaXN0ZW50fGdpc3RfYm94X2RlY29tcHJlc3N8Z2lzdF9ib3hfcGVuYWx0eXxnaXN0X2JveF9waWNrc3BsaXR8Z2lzdF9ib3hfc2FtZXxnaXN0X2JveF91bmlvbnxnaXN0X2NpcmNsZV9jb21wcmVzc3xnaXN0X2NpcmNsZV9jb25zaXN0ZW50fGdpc3RfcG9pbnRfY29tcHJlc3N8Z2lzdF9wb2ludF9jb25zaXN0ZW50fGdpc3RfcG9pbnRfZGlzdGFuY2V8Z2lzdF9wb2x5X2NvbXByZXNzfGdpc3RfcG9seV9jb25zaXN0ZW50fGdpc3RiZWdpbnNjYW58Z2lzdGJ1aWxkfGdpc3RidWlsZGVtcHR5fGdpc3RidWxrZGVsZXRlfGdpc3Rjb3N0ZXN0aW1hdGV8Z2lzdGVuZHNjYW58Z2lzdGdldGJpdG1hcHxnaXN0Z2V0dHVwbGV8Z2lzdGluc2VydHxnaXN0bWFya3Bvc3xnaXN0b3B0aW9uc3xnaXN0cmVzY2FufGdpc3RyZXN0cnBvc3xnaXN0dmFjdXVtY2xlYW51cHxndHNxdWVyeV9jb21wcmVzc3xndHNxdWVyeV9jb25zaXN0ZW50fGd0c3F1ZXJ5X2RlY29tcHJlc3N8Z3RzcXVlcnlfcGVuYWx0eXxndHNxdWVyeV9waWNrc3BsaXR8Z3RzcXVlcnlfc2FtZXxndHNxdWVyeV91bmlvbnxndHN2ZWN0b3JfY29tcHJlc3N8Z3RzdmVjdG9yX2NvbnNpc3RlbnR8Z3RzdmVjdG9yX2RlY29tcHJlc3N8Z3RzdmVjdG9yX3BlbmFsdHl8Z3RzdmVjdG9yX3BpY2tzcGxpdHxndHN2ZWN0b3Jfc2FtZXxndHN2ZWN0b3JfdW5pb258Z3RzdmVjdG9yaW58Z3RzdmVjdG9yb3V0fGhhc19hbnlfY29sdW1uX3ByaXZpbGVnZXxoYXNfY29sdW1uX3ByaXZpbGVnZXxoYXNfZGF0YWJhc2VfcHJpdmlsZWdlfGhhc19mb3JlaWduX2RhdGFfd3JhcHBlcl9wcml2aWxlZ2V8aGFzX2Z1bmN0aW9uX3ByaXZpbGVnZXxoYXNfbGFuZ3VhZ2VfcHJpdmlsZWdlfGhhc19zY2hlbWFfcHJpdmlsZWdlfGhhc19zZXF1ZW5jZV9wcml2aWxlZ2V8aGFzX3NlcnZlcl9wcml2aWxlZ2V8aGFzX3RhYmxlX3ByaXZpbGVnZXxoYXNfdGFibGVzcGFjZV9wcml2aWxlZ2V8aGFzaF9hY2xpdGVtfGhhc2hfYXJyYXl8aGFzaF9udW1lcmljfGhhc2hiZWdpbnNjYW58aGFzaGJwY2hhcnxoYXNoYnVpbGR8aGFzaGJ1aWxkZW1wdHl8aGFzaGJ1bGtkZWxldGV8aGFzaGNoYXJ8aGFzaGNvc3Rlc3RpbWF0ZXxoYXNoZW5kc2NhbnxoYXNoZW51bXxoYXNoZmxvYXQ0fGhhc2hmbG9hdDh8aGFzaGdldGJpdG1hcHxoYXNoZ2V0dHVwbGV8aGFzaGluZXR8aGFzaGluc2VydHxoYXNoaW50MnxoYXNoaW50MnZlY3RvcnxoYXNoaW50NHxoYXNoaW50OHxoYXNobWFjYWRkcnxoYXNobWFya3Bvc3xoYXNobmFtZXxoYXNob2lkfGhhc2hvaWR2ZWN0b3J8aGFzaG9wdGlvbnN8aGFzaHJlc2NhbnxoYXNocmVzdHJwb3N8aGFzaHRleHR8aGFzaHZhY3V1bWNsZWFudXB8aGFzaHZhcmxlbmF8aGVpZ2h0fGhvc3R8aG9zdG1hc2t8aWNsaWtlam9pbnNlbHxpY2xpa2VzZWx8aWNubGlrZWpvaW5zZWx8aWNubGlrZXNlbHxpY3JlZ2V4ZXFqb2luc2VsfGljcmVnZXhlcXNlbHxpY3JlZ2V4bmVqb2luc2VsfGljcmVnZXhuZXNlbHxpbmV0X2NsaWVudF9hZGRyfGluZXRfY2xpZW50X3BvcnR8aW5ldF9pbnxpbmV0X291dHxpbmV0X3JlY3Z8aW5ldF9zZW5kfGluZXRfc2VydmVyX2FkZHJ8aW5ldF9zZXJ2ZXJfcG9ydHxpbmV0YW5kfGluZXRtaXxpbmV0bWlfaW50OHxpbmV0bm90fGluZXRvcnxpbmV0cGx8aW5pdGNhcHxpbnQyfGludDI0ZGl2fGludDI0ZXF8aW50MjRnZXxpbnQyNGd0fGludDI0bGV8aW50MjRsdHxpbnQyNG1pfGludDI0bXVsfGludDI0bmV8aW50MjRwbHxpbnQyOGRpdnxpbnQyOGVxfGludDI4Z2V8aW50MjhndHxpbnQyOGxlfGludDI4bHR8aW50MjhtaXxpbnQyOG11bHxpbnQyOG5lfGludDI4cGx8aW50Ml9hY2N1bXxpbnQyX2F2Z19hY2N1bXxpbnQyX211bF9jYXNofGludDJfc3VtfGludDJhYnN8aW50MmFuZHxpbnQyZGl2fGludDJlcXxpbnQyZ2V8aW50Mmd0fGludDJpbnxpbnQybGFyZ2VyfGludDJsZXxpbnQybHR8aW50Mm1pfGludDJtb2R8aW50Mm11bHxpbnQybmV8aW50Mm5vdHxpbnQyb3J8aW50Mm91dHxpbnQycGx8aW50MnJlY3Z8aW50MnNlbmR8aW50MnNobHxpbnQyc2hyfGludDJzbWFsbGVyfGludDJ1bXxpbnQydXB8aW50MnZlY3RvcmVxfGludDJ2ZWN0b3JpbnxpbnQydmVjdG9yb3V0fGludDJ2ZWN0b3JyZWN2fGludDJ2ZWN0b3JzZW5kfGludDJ4b3J8aW50NHxpbnQ0MmRpdnxpbnQ0MmVxfGludDQyZ2V8aW50NDJndHxpbnQ0MmxlfGludDQybHR8aW50NDJtaXxpbnQ0Mm11bHxpbnQ0Mm5lfGludDQycGx8aW50NDhkaXZ8aW50NDhlcXxpbnQ0OGdlfGludDQ4Z3R8aW50NDhsZXxpbnQ0OGx0fGludDQ4bWl8aW50NDhtdWx8aW50NDhuZXxpbnQ0OHBsfGludDRfYWNjdW18aW50NF9hdmdfYWNjdW18aW50NF9tdWxfY2FzaHxpbnQ0X3N1bXxpbnQ0YWJzfGludDRhbmR8aW50NGRpdnxpbnQ0ZXF8aW50NGdlfGludDRndHxpbnQ0aW58aW50NGluY3xpbnQ0bGFyZ2VyfGludDRsZXxpbnQ0bHR8aW50NG1pfGludDRtb2R8aW50NG11bHxpbnQ0bmV8aW50NG5vdHxpbnQ0b3J8aW50NG91dHxpbnQ0cGx8aW50NHJlY3Z8aW50NHNlbmR8aW50NHNobHxpbnQ0c2hyfGludDRzbWFsbGVyfGludDR1bXxpbnQ0dXB8aW50NHhvcnxpbnQ4fGludDgyZGl2fGludDgyZXF8aW50ODJnZXxpbnQ4Mmd0fGludDgybGV8aW50ODJsdHxpbnQ4Mm1pfGludDgybXVsfGludDgybmV8aW50ODJwbHxpbnQ4NGRpdnxpbnQ4NGVxfGludDg0Z2V8aW50ODRndHxpbnQ4NGxlfGludDg0bHR8aW50ODRtaXxpbnQ4NG11bHxpbnQ4NG5lfGludDg0cGx8aW50OF9hY2N1bXxpbnQ4X2F2Z3xpbnQ4X2F2Z19hY2N1bXxpbnQ4X3N1bXxpbnQ4YWJzfGludDhhbmR8aW50OGRpdnxpbnQ4ZXF8aW50OGdlfGludDhndHxpbnQ4aW58aW50OGluY3xpbnQ4aW5jX2FueXxpbnQ4aW5jX2Zsb2F0OF9mbG9hdDh8aW50OGxhcmdlcnxpbnQ4bGV8aW50OGx0fGludDhtaXxpbnQ4bW9kfGludDhtdWx8aW50OG5lfGludDhub3R8aW50OG9yfGludDhvdXR8aW50OHBsfGludDhwbF9pbmV0fGludDhyZWN2fGludDhzZW5kfGludDhzaGx8aW50OHNocnxpbnQ4c21hbGxlcnxpbnQ4dW18aW50OHVwfGludDh4b3J8aW50ZWdlcl9wbF9kYXRlfGludGVyX2xifGludGVyX3NifGludGVyX3NsfGludGVybmFsX2lufGludGVybmFsX291dHxpbnRlcnZhbF9hY2N1bXxpbnRlcnZhbF9hdmd8aW50ZXJ2YWxfY21wfGludGVydmFsX2RpdnxpbnRlcnZhbF9lcXxpbnRlcnZhbF9nZXxpbnRlcnZhbF9ndHxpbnRlcnZhbF9oYXNofGludGVydmFsX2lufGludGVydmFsX2xhcmdlcnxpbnRlcnZhbF9sZXxpbnRlcnZhbF9sdHxpbnRlcnZhbF9taXxpbnRlcnZhbF9tdWx8aW50ZXJ2YWxfbmV8aW50ZXJ2YWxfb3V0fGludGVydmFsX3BsfGludGVydmFsX3BsX2RhdGV8aW50ZXJ2YWxfcGxfdGltZXxpbnRlcnZhbF9wbF90aW1lc3RhbXB8aW50ZXJ2YWxfcGxfdGltZXN0YW1wdHp8aW50ZXJ2YWxfcGxfdGltZXR6fGludGVydmFsX3JlY3Z8aW50ZXJ2YWxfc2VuZHxpbnRlcnZhbF9zbWFsbGVyfGludGVydmFsX3VtfGludGVydmFsdHlwbW9kaW58aW50ZXJ2YWx0eXBtb2RvdXR8aW50aW50ZXJ2YWx8aXNjbG9zZWR8aXNmaW5pdGV8aXNob3Jpem9udGFsfGlzbzg4NTlfMV90b191dGY4fGlzbzg4NTlfdG9fdXRmOHxpc29fdG9fa29pOHJ8aXNvX3RvX21pY3xpc29fdG9fd2luMTI1MXxpc29fdG9fd2luODY2fGlzb3Blbnxpc3BhcmFsbGVsfGlzcGVycHxpc3ZlcnRpY2FsfGpvaGFiX3RvX3V0Zjh8anVzdGlmeV9kYXlzfGp1c3RpZnlfaG91cnN8anVzdGlmeV9pbnRlcnZhbHxrb2k4cl90b19pc298a29pOHJfdG9fbWljfGtvaThyX3RvX3V0Zjh8a29pOHJfdG9fd2luMTI1MXxrb2k4cl90b193aW44NjZ8a29pOHVfdG9fdXRmOHxsYWd8bGFuZ3VhZ2VfaGFuZGxlcl9pbnxsYW5ndWFnZV9oYW5kbGVyX291dHxsYXN0X3ZhbHVlfGxhc3R2YWx8bGF0aW4xX3RvX21pY3xsYXRpbjJfdG9fbWljfGxhdGluMl90b193aW4xMjUwfGxhdGluM190b19taWN8bGF0aW40X3RvX21pY3xsZWFkfGxlZnR8bGVuZ3RofGxpa2V8bGlrZV9lc2NhcGV8bGlrZWpvaW5zZWx8bGlrZXNlbHxsaW5lfGxpbmVfZGlzdGFuY2V8bGluZV9lcXxsaW5lX2hvcml6b250YWx8bGluZV9pbnxsaW5lX2ludGVycHR8bGluZV9pbnRlcnNlY3R8bGluZV9vdXR8bGluZV9wYXJhbGxlbHxsaW5lX3BlcnB8bGluZV9yZWN2fGxpbmVfc2VuZHxsaW5lX3ZlcnRpY2FsfGxufGxvX2Nsb3NlfGxvX2NyZWF0fGxvX2NyZWF0ZXxsb19leHBvcnR8bG9faW1wb3J0fGxvX2xzZWVrfGxvX29wZW58bG9fdGVsbHxsb190cnVuY2F0ZXxsb191bmxpbmt8bG9nfGxvcmVhZHxsb3dlcnxsb3dyaXRlfGxwYWR8bHNlZ3xsc2VnX2NlbnRlcnxsc2VnX2Rpc3RhbmNlfGxzZWdfZXF8bHNlZ19nZXxsc2VnX2d0fGxzZWdfaG9yaXpvbnRhbHxsc2VnX2lufGxzZWdfaW50ZXJwdHxsc2VnX2ludGVyc2VjdHxsc2VnX2xlfGxzZWdfbGVuZ3RofGxzZWdfbHR8bHNlZ19uZXxsc2VnX291dHxsc2VnX3BhcmFsbGVsfGxzZWdfcGVycHxsc2VnX3JlY3Z8bHNlZ19zZW5kfGxzZWdfdmVydGljYWx8bHRyaW18bWFjYWRkcl9jbXB8bWFjYWRkcl9lcXxtYWNhZGRyX2dlfG1hY2FkZHJfZ3R8bWFjYWRkcl9pbnxtYWNhZGRyX2xlfG1hY2FkZHJfbHR8bWFjYWRkcl9uZXxtYWNhZGRyX291dHxtYWNhZGRyX3JlY3Z8bWFjYWRkcl9zZW5kfG1ha2VhY2xpdGVtfG1hc2tsZW58bWF4fG1kNXxtaWNfdG9fYXNjaWl8bWljX3RvX2JpZzV8bWljX3RvX2V1Y19jbnxtaWNfdG9fZXVjX2pwfG1pY190b19ldWNfa3J8bWljX3RvX2V1Y190d3xtaWNfdG9faXNvfG1pY190b19rb2k4cnxtaWNfdG9fbGF0aW4xfG1pY190b19sYXRpbjJ8bWljX3RvX2xhdGluM3xtaWNfdG9fbGF0aW40fG1pY190b19zamlzfG1pY190b193aW4xMjUwfG1pY190b193aW4xMjUxfG1pY190b193aW44NjZ8bWlufG1rdGludGVydmFsfG1vZHxtb25leXxtdWxfZF9pbnRlcnZhbHxuYW1lfG5hbWVlcXxuYW1lZ2V8bmFtZWd0fG5hbWVpY2xpa2V8bmFtZWljbmxpa2V8bmFtZWljcmVnZXhlcXxuYW1laWNyZWdleG5lfG5hbWVpbnxuYW1lbGV8bmFtZWxpa2V8bmFtZWx0fG5hbWVuZXxuYW1lbmxpa2V8bmFtZW91dHxuYW1lcmVjdnxuYW1lcmVnZXhlcXxuYW1lcmVnZXhuZXxuYW1lc2VuZHxuZXFqb2luc2VsfG5lcXNlbHxuZXRtYXNrfG5ldHdvcmt8bmV0d29ya19jbXB8bmV0d29ya19lcXxuZXR3b3JrX2dlfG5ldHdvcmtfZ3R8bmV0d29ya19sZXxuZXR3b3JrX2x0fG5ldHdvcmtfbmV8bmV0d29ya19zdWJ8bmV0d29ya19zdWJlcXxuZXR3b3JrX3N1cHxuZXR3b3JrX3N1cGVxfG5leHR2YWx8bmxpa2Vqb2luc2VsfG5saWtlc2VsfG5vdGxpa2V8bm93fG5wb2ludHN8bnRoX3ZhbHVlfG50aWxlfG51bWVyaWNfYWJzfG51bWVyaWNfYWNjdW18bnVtZXJpY19hZGR8bnVtZXJpY19hdmd8bnVtZXJpY19hdmdfYWNjdW18bnVtZXJpY19jbXB8bnVtZXJpY19kaXZ8bnVtZXJpY19kaXZfdHJ1bmN8bnVtZXJpY19lcXxudW1lcmljX2V4cHxudW1lcmljX2ZhY3xudW1lcmljX2dlfG51bWVyaWNfZ3R8bnVtZXJpY19pbnxudW1lcmljX2luY3xudW1lcmljX2xhcmdlcnxudW1lcmljX2xlfG51bWVyaWNfbG58bnVtZXJpY19sb2d8bnVtZXJpY19sdHxudW1lcmljX21vZHxudW1lcmljX211bHxudW1lcmljX25lfG51bWVyaWNfb3V0fG51bWVyaWNfcG93ZXJ8bnVtZXJpY19yZWN2fG51bWVyaWNfc2VuZHxudW1lcmljX3NtYWxsZXJ8bnVtZXJpY19zcXJ0fG51bWVyaWNfc3RkZGV2X3BvcHxudW1lcmljX3N0ZGRldl9zYW1wfG51bWVyaWNfc3VifG51bWVyaWNfdW1pbnVzfG51bWVyaWNfdXBsdXN8bnVtZXJpY192YXJfcG9wfG51bWVyaWNfdmFyX3NhbXB8bnVtZXJpY3R5cG1vZGlufG51bWVyaWN0eXBtb2RvdXR8bnVtbm9kZXxvYmpfZGVzY3JpcHRpb258b2N0ZXRfbGVuZ3RofG9pZHxvaWRlcXxvaWRnZXxvaWRndHxvaWRpbnxvaWRsYXJnZXJ8b2lkbGV8b2lkbHR8b2lkbmV8b2lkb3V0fG9pZHJlY3Z8b2lkc2VuZHxvaWRzbWFsbGVyfG9pZHZlY3RvcmVxfG9pZHZlY3RvcmdlfG9pZHZlY3Rvcmd0fG9pZHZlY3RvcmlufG9pZHZlY3RvcmxlfG9pZHZlY3Rvcmx0fG9pZHZlY3Rvcm5lfG9pZHZlY3Rvcm91dHxvaWR2ZWN0b3JyZWN2fG9pZHZlY3RvcnNlbmR8b2lkdmVjdG9ydHlwZXN8b25fcGJ8b25fcGx8b25fcHBhdGh8b25fcHN8b25fc2J8b25fc2x8b3BhcXVlX2lufG9wYXF1ZV9vdXR8b3ZlcmxhcHN8b3ZlcmxheXxwYXRofHBhdGhfYWRkfHBhdGhfYWRkX3B0fHBhdGhfY2VudGVyfHBhdGhfY29udGFpbl9wdHxwYXRoX2Rpc3RhbmNlfHBhdGhfZGl2X3B0fHBhdGhfaW58cGF0aF9pbnRlcnxwYXRoX2xlbmd0aHxwYXRoX211bF9wdHxwYXRoX25fZXF8cGF0aF9uX2dlfHBhdGhfbl9ndHxwYXRoX25fbGV8cGF0aF9uX2x0fHBhdGhfbnBvaW50c3xwYXRoX291dHxwYXRoX3JlY3Z8cGF0aF9zZW5kfHBhdGhfc3ViX3B0fHBjbG9zZXxwZXJjZW50X3Jhbmt8cGdfYWR2aXNvcnlfbG9ja3xwZ19hZHZpc29yeV9sb2NrX3NoYXJlZHxwZ19hZHZpc29yeV91bmxvY2t8cGdfYWR2aXNvcnlfdW5sb2NrX2FsbHxwZ19hZHZpc29yeV91bmxvY2tfc2hhcmVkfHBnX2Fkdmlzb3J5X3hhY3RfbG9ja3xwZ19hZHZpc29yeV94YWN0X2xvY2tfc2hhcmVkfHBnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVyc2lvbnN8cGdfYXZhaWxhYmxlX2V4dGVuc2lvbnN8cGdfYmFja2VuZF9waWR8cGdfY2FuY2VsX2JhY2tlbmR8cGdfY2hhcl90b19lbmNvZGluZ3xwZ19jbGllbnRfZW5jb2Rpbmd8cGdfY29sbGF0aW9uX2lzX3Zpc2libGV8cGdfY29sdW1uX3NpemV8cGdfY29uZl9sb2FkX3RpbWV8cGdfY29udmVyc2lvbl9pc192aXNpYmxlfHBnX2NyZWF0ZV9yZXN0b3JlX3BvaW50fHBnX2N1cnJlbnRfeGxvZ19pbnNlcnRfbG9jYXRpb258cGdfY3VycmVudF94bG9nX2xvY2F0aW9ufHBnX2N1cnNvcnxwZ19kYXRhYmFzZV9zaXplfHBnX2Rlc2NyaWJlX29iamVjdHxwZ19lbmNvZGluZ19tYXhfbGVuZ3RofHBnX2VuY29kaW5nX3RvX2NoYXJ8cGdfZXh0ZW5zaW9uX2NvbmZpZ19kdW1wfHBnX2V4dGVuc2lvbl91cGRhdGVfcGF0aHN8cGdfZnVuY3Rpb25faXNfdmlzaWJsZXxwZ19nZXRfY29uc3RyYWludGRlZnxwZ19nZXRfZXhwcnxwZ19nZXRfZnVuY3Rpb25fYXJndW1lbnRzfHBnX2dldF9mdW5jdGlvbl9pZGVudGl0eV9hcmd1bWVudHN8cGdfZ2V0X2Z1bmN0aW9uX3Jlc3VsdHxwZ19nZXRfZnVuY3Rpb25kZWZ8cGdfZ2V0X2luZGV4ZGVmfHBnX2dldF9rZXl3b3Jkc3xwZ19nZXRfcnVsZWRlZnxwZ19nZXRfc2VyaWFsX3NlcXVlbmNlfHBnX2dldF90cmlnZ2VyZGVmfHBnX2dldF91c2VyYnlpZHxwZ19nZXRfdmlld2RlZnxwZ19oYXNfcm9sZXxwZ19pbmRleGVzX3NpemV8cGdfaXNfaW5fcmVjb3Zlcnl8cGdfaXNfb3RoZXJfdGVtcF9zY2hlbWF8cGdfaXNfeGxvZ19yZXBsYXlfcGF1c2VkfHBnX2xhc3RfeGFjdF9yZXBsYXlfdGltZXN0YW1wfHBnX2xhc3RfeGxvZ19yZWNlaXZlX2xvY2F0aW9ufHBnX2xhc3RfeGxvZ19yZXBsYXlfbG9jYXRpb258cGdfbGlzdGVuaW5nX2NoYW5uZWxzfHBnX2xvY2tfc3RhdHVzfHBnX2xzX2RpcnxwZ19teV90ZW1wX3NjaGVtYXxwZ19ub2RlX3RyZWVfaW58cGdfbm9kZV90cmVlX291dHxwZ19ub2RlX3RyZWVfcmVjdnxwZ19ub2RlX3RyZWVfc2VuZHxwZ19ub3RpZnl8cGdfb3BjbGFzc19pc192aXNpYmxlfHBnX29wZXJhdG9yX2lzX3Zpc2libGV8cGdfb3B0aW9uc190b190YWJsZXxwZ19wb3N0bWFzdGVyX3N0YXJ0X3RpbWV8cGdfcHJlcGFyZWRfc3RhdGVtZW50fHBnX3ByZXBhcmVkX3hhY3R8cGdfcmVhZF9iaW5hcnlfZmlsZXxwZ19yZWFkX2ZpbGV8cGdfcmVsYXRpb25fZmlsZW5vZGV8cGdfcmVsYXRpb25fZmlsZXBhdGh8cGdfcmVsYXRpb25fc2l6ZXxwZ19yZWxvYWRfY29uZnxwZ19yb3RhdGVfbG9nZmlsZXxwZ19zZXF1ZW5jZV9wYXJhbWV0ZXJzfHBnX3Nob3dfYWxsX3NldHRpbmdzfHBnX3NpemVfcHJldHR5fHBnX3NsZWVwfHBnX3N0YXJ0X2JhY2t1cHxwZ19zdGF0X2NsZWFyX3NuYXBzaG90fHBnX3N0YXRfZmlsZXxwZ19zdGF0X2dldF9hY3Rpdml0eXxwZ19zdGF0X2dldF9hbmFseXplX2NvdW50fHBnX3N0YXRfZ2V0X2F1dG9hbmFseXplX2NvdW50fHBnX3N0YXRfZ2V0X2F1dG92YWN1dW1fY291bnR8cGdfc3RhdF9nZXRfYmFja2VuZF9hY3Rpdml0eXxwZ19zdGF0X2dldF9iYWNrZW5kX2FjdGl2aXR5X3N0YXJ0fHBnX3N0YXRfZ2V0X2JhY2tlbmRfY2xpZW50X2FkZHJ8cGdfc3RhdF9nZXRfYmFja2VuZF9jbGllbnRfcG9ydHxwZ19zdGF0X2dldF9iYWNrZW5kX2RiaWR8cGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldHxwZ19zdGF0X2dldF9iYWNrZW5kX3BpZHxwZ19zdGF0X2dldF9iYWNrZW5kX3N0YXJ0fHBnX3N0YXRfZ2V0X2JhY2tlbmRfdXNlcmlkfHBnX3N0YXRfZ2V0X2JhY2tlbmRfd2FpdGluZ3xwZ19zdGF0X2dldF9iYWNrZW5kX3hhY3Rfc3RhcnR8cGdfc3RhdF9nZXRfYmd3cml0ZXJfYnVmX3dyaXR0ZW5fY2hlY2twb2ludHN8cGdfc3RhdF9nZXRfYmd3cml0ZXJfYnVmX3dyaXR0ZW5fY2xlYW58cGdfc3RhdF9nZXRfYmd3cml0ZXJfbWF4d3JpdHRlbl9jbGVhbnxwZ19zdGF0X2dldF9iZ3dyaXRlcl9yZXF1ZXN0ZWRfY2hlY2twb2ludHN8cGdfc3RhdF9nZXRfYmd3cml0ZXJfc3RhdF9yZXNldF90aW1lfHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX3RpbWVkX2NoZWNrcG9pbnRzfHBnX3N0YXRfZ2V0X2Jsb2Nrc19mZXRjaGVkfHBnX3N0YXRfZ2V0X2Jsb2Nrc19oaXR8cGdfc3RhdF9nZXRfYnVmX2FsbG9jfHBnX3N0YXRfZ2V0X2J1Zl9mc3luY19iYWNrZW5kfHBnX3N0YXRfZ2V0X2J1Zl93cml0dGVuX2JhY2tlbmR8cGdfc3RhdF9nZXRfZGJfYmxvY2tzX2ZldGNoZWR8cGdfc3RhdF9nZXRfZGJfYmxvY2tzX2hpdHxwZ19zdGF0X2dldF9kYl9jb25mbGljdF9hbGx8cGdfc3RhdF9nZXRfZGJfY29uZmxpY3RfYnVmZmVycGlufHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X2xvY2t8cGdfc3RhdF9nZXRfZGJfY29uZmxpY3Rfc25hcHNob3R8cGdfc3RhdF9nZXRfZGJfY29uZmxpY3Rfc3RhcnR1cF9kZWFkbG9ja3xwZ19zdGF0X2dldF9kYl9jb25mbGljdF90YWJsZXNwYWNlfHBnX3N0YXRfZ2V0X2RiX251bWJhY2tlbmRzfHBnX3N0YXRfZ2V0X2RiX3N0YXRfcmVzZXRfdGltZXxwZ19zdGF0X2dldF9kYl90dXBsZXNfZGVsZXRlZHxwZ19zdGF0X2dldF9kYl90dXBsZXNfZmV0Y2hlZHxwZ19zdGF0X2dldF9kYl90dXBsZXNfaW5zZXJ0ZWR8cGdfc3RhdF9nZXRfZGJfdHVwbGVzX3JldHVybmVkfHBnX3N0YXRfZ2V0X2RiX3R1cGxlc191cGRhdGVkfHBnX3N0YXRfZ2V0X2RiX3hhY3RfY29tbWl0fHBnX3N0YXRfZ2V0X2RiX3hhY3Rfcm9sbGJhY2t8cGdfc3RhdF9nZXRfZGVhZF90dXBsZXN8cGdfc3RhdF9nZXRfZnVuY3Rpb25fY2FsbHN8cGdfc3RhdF9nZXRfZnVuY3Rpb25fc2VsZl90aW1lfHBnX3N0YXRfZ2V0X2Z1bmN0aW9uX3RpbWV8cGdfc3RhdF9nZXRfbGFzdF9hbmFseXplX3RpbWV8cGdfc3RhdF9nZXRfbGFzdF9hdXRvYW5hbHl6ZV90aW1lfHBnX3N0YXRfZ2V0X2xhc3RfYXV0b3ZhY3V1bV90aW1lfHBnX3N0YXRfZ2V0X2xhc3RfdmFjdXVtX3RpbWV8cGdfc3RhdF9nZXRfbGl2ZV90dXBsZXN8cGdfc3RhdF9nZXRfbnVtc2NhbnN8cGdfc3RhdF9nZXRfdHVwbGVzX2RlbGV0ZWR8cGdfc3RhdF9nZXRfdHVwbGVzX2ZldGNoZWR8cGdfc3RhdF9nZXRfdHVwbGVzX2hvdF91cGRhdGVkfHBnX3N0YXRfZ2V0X3R1cGxlc19pbnNlcnRlZHxwZ19zdGF0X2dldF90dXBsZXNfcmV0dXJuZWR8cGdfc3RhdF9nZXRfdHVwbGVzX3VwZGF0ZWR8cGdfc3RhdF9nZXRfdmFjdXVtX2NvdW50fHBnX3N0YXRfZ2V0X3dhbF9zZW5kZXJzfHBnX3N0YXRfZ2V0X3hhY3RfYmxvY2tzX2ZldGNoZWR8cGdfc3RhdF9nZXRfeGFjdF9ibG9ja3NfaGl0fHBnX3N0YXRfZ2V0X3hhY3RfZnVuY3Rpb25fY2FsbHN8cGdfc3RhdF9nZXRfeGFjdF9mdW5jdGlvbl9zZWxmX3RpbWV8cGdfc3RhdF9nZXRfeGFjdF9mdW5jdGlvbl90aW1lfHBnX3N0YXRfZ2V0X3hhY3RfbnVtc2NhbnN8cGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfZGVsZXRlZHxwZ19zdGF0X2dldF94YWN0X3R1cGxlc19mZXRjaGVkfHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkfHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2luc2VydGVkfHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3JldHVybmVkfHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3VwZGF0ZWR8cGdfc3RhdF9yZXNldHxwZ19zdGF0X3Jlc2V0X3NoYXJlZHxwZ19zdGF0X3Jlc2V0X3NpbmdsZV9mdW5jdGlvbl9jb3VudGVyc3xwZ19zdGF0X3Jlc2V0X3NpbmdsZV90YWJsZV9jb3VudGVyc3xwZ19zdG9wX2JhY2t1cHxwZ19zd2l0Y2hfeGxvZ3xwZ190YWJsZV9pc192aXNpYmxlfHBnX3RhYmxlX3NpemV8cGdfdGFibGVzcGFjZV9kYXRhYmFzZXN8cGdfdGFibGVzcGFjZV9zaXplfHBnX3Rlcm1pbmF0ZV9iYWNrZW5kfHBnX3RpbWV6b25lX2FiYnJldnN8cGdfdGltZXpvbmVfbmFtZXN8cGdfdG90YWxfcmVsYXRpb25fc2l6ZXxwZ190cnlfYWR2aXNvcnlfbG9ja3xwZ190cnlfYWR2aXNvcnlfbG9ja19zaGFyZWR8cGdfdHJ5X2Fkdmlzb3J5X3hhY3RfbG9ja3xwZ190cnlfYWR2aXNvcnlfeGFjdF9sb2NrX3NoYXJlZHxwZ190c19jb25maWdfaXNfdmlzaWJsZXxwZ190c19kaWN0X2lzX3Zpc2libGV8cGdfdHNfcGFyc2VyX2lzX3Zpc2libGV8cGdfdHNfdGVtcGxhdGVfaXNfdmlzaWJsZXxwZ190eXBlX2lzX3Zpc2libGV8cGdfdHlwZW9mfHBnX3hsb2dfcmVwbGF5X3BhdXNlfHBnX3hsb2dfcmVwbGF5X3Jlc3VtZXxwZ194bG9nZmlsZV9uYW1lfHBnX3hsb2dmaWxlX25hbWVfb2Zmc2V0fHBpfHBsYWludG9fdHNxdWVyeXxwbHBnc3FsX2NhbGxfaGFuZGxlcnxwbHBnc3FsX2lubGluZV9oYW5kbGVyfHBscGdzcWxfdmFsaWRhdG9yfHBvaW50fHBvaW50X2Fib3ZlfHBvaW50X2FkZHxwb2ludF9iZWxvd3xwb2ludF9kaXN0YW5jZXxwb2ludF9kaXZ8cG9pbnRfZXF8cG9pbnRfaG9yaXp8cG9pbnRfaW58cG9pbnRfbGVmdHxwb2ludF9tdWx8cG9pbnRfbmV8cG9pbnRfb3V0fHBvaW50X3JlY3Z8cG9pbnRfcmlnaHR8cG9pbnRfc2VuZHxwb2ludF9zdWJ8cG9pbnRfdmVydHxwb2x5X2Fib3ZlfHBvbHlfYmVsb3d8cG9seV9jZW50ZXJ8cG9seV9jb250YWlufHBvbHlfY29udGFpbl9wdHxwb2x5X2NvbnRhaW5lZHxwb2x5X2Rpc3RhbmNlfHBvbHlfaW58cG9seV9sZWZ0fHBvbHlfbnBvaW50c3xwb2x5X291dHxwb2x5X292ZXJhYm92ZXxwb2x5X292ZXJiZWxvd3xwb2x5X292ZXJsYXB8cG9seV9vdmVybGVmdHxwb2x5X292ZXJyaWdodHxwb2x5X3JlY3Z8cG9seV9yaWdodHxwb2x5X3NhbWV8cG9seV9zZW5kfHBvbHlnb258cG9wZW58cG9zaXRpb258cG9zaXRpb25qb2luc2VsfHBvc2l0aW9uc2VsfHBvc3RncmVzcWxfZmR3X3ZhbGlkYXRvcnxwb3d8cG93ZXJ8cHJzZF9lbmR8cHJzZF9oZWFkbGluZXxwcnNkX2xleHR5cGV8cHJzZF9uZXh0dG9rZW58cHJzZF9zdGFydHxwdF9jb250YWluZWRfY2lyY2xlfHB0X2NvbnRhaW5lZF9wb2x5fHF1ZXJ5X3RvX3htbHxxdWVyeV90b194bWxfYW5kX3htbHNjaGVtYXxxdWVyeV90b194bWxzY2hlbWF8cXVlcnl0cmVlfHF1b3RlX2lkZW50fHF1b3RlX2xpdGVyYWx8cXVvdGVfbnVsbGFibGV8cmFkaWFuc3xyYWRpdXN8cmFuZG9tfHJhbmt8cmVjb3JkX2VxfHJlY29yZF9nZXxyZWNvcmRfZ3R8cmVjb3JkX2lufHJlY29yZF9sZXxyZWNvcmRfbHR8cmVjb3JkX25lfHJlY29yZF9vdXR8cmVjb3JkX3JlY3Z8cmVjb3JkX3NlbmR8cmVnY2xhc3N8cmVnY2xhc3NpbnxyZWdjbGFzc291dHxyZWdjbGFzc3JlY3Z8cmVnY2xhc3NzZW5kfHJlZ2NvbmZpZ2lufHJlZ2NvbmZpZ291dHxyZWdjb25maWdyZWN2fHJlZ2NvbmZpZ3NlbmR8cmVnZGljdGlvbmFyeWlufHJlZ2RpY3Rpb25hcnlvdXR8cmVnZGljdGlvbmFyeXJlY3Z8cmVnZGljdGlvbmFyeXNlbmR8cmVnZXhlcWpvaW5zZWx8cmVnZXhlcXNlbHxyZWdleG5lam9pbnNlbHxyZWdleG5lc2VsfHJlZ2V4cF9tYXRjaGVzfHJlZ2V4cF9yZXBsYWNlfHJlZ2V4cF9zcGxpdF90b19hcnJheXxyZWdleHBfc3BsaXRfdG9fdGFibGV8cmVnb3BlcmF0b3JpbnxyZWdvcGVyYXRvcm91dHxyZWdvcGVyYXRvcnJlY3Z8cmVnb3BlcmF0b3JzZW5kfHJlZ29wZXJpbnxyZWdvcGVyb3V0fHJlZ29wZXJyZWN2fHJlZ29wZXJzZW5kfHJlZ3Byb2NlZHVyZWlufHJlZ3Byb2NlZHVyZW91dHxyZWdwcm9jZWR1cmVyZWN2fHJlZ3Byb2NlZHVyZXNlbmR8cmVncHJvY2lufHJlZ3Byb2NvdXR8cmVncHJvY3JlY3Z8cmVncHJvY3NlbmR8cmVncl9hdmd4fHJlZ3JfYXZneXxyZWdyX2NvdW50fHJlZ3JfaW50ZXJjZXB0fHJlZ3JfcjJ8cmVncl9zbG9wZXxyZWdyX3N4eHxyZWdyX3N4eXxyZWdyX3N5eXxyZWd0eXBlaW58cmVndHlwZW91dHxyZWd0eXBlcmVjdnxyZWd0eXBlc2VuZHxyZWx0aW1lfHJlbHRpbWVlcXxyZWx0aW1lZ2V8cmVsdGltZWd0fHJlbHRpbWVpbnxyZWx0aW1lbGV8cmVsdGltZWx0fHJlbHRpbWVuZXxyZWx0aW1lb3V0fHJlbHRpbWVyZWN2fHJlbHRpbWVzZW5kfHJlcGVhdHxyZXBsYWNlfHJldmVyc2V8cmlnaHR8cm91bmR8cm93X251bWJlcnxycGFkfHJ0cmltfHNjYWxhcmd0am9pbnNlbHxzY2FsYXJndHNlbHxzY2FsYXJsdGpvaW5zZWx8c2NhbGFybHRzZWx8c2NoZW1hX3RvX3htbHxzY2hlbWFfdG9feG1sX2FuZF94bWxzY2hlbWF8c2NoZW1hX3RvX3htbHNjaGVtYXxzZXNzaW9uX3VzZXJ8c2V0X2JpdHxzZXRfYnl0ZXxzZXRfY29uZmlnfHNldF9tYXNrbGVufHNldHNlZWR8c2V0dmFsfHNldHdlaWdodHxzaGVsbF9pbnxzaGVsbF9vdXR8c2hpZnRfamlzXzIwMDRfdG9fZXVjX2ppc18yMDA0fHNoaWZ0X2ppc18yMDA0X3RvX3V0Zjh8c2hvYmpfZGVzY3JpcHRpb258c2lnbnxzaW1pbGFyX2VzY2FwZXxzaW58c2ppc190b19ldWNfanB8c2ppc190b19taWN8c2ppc190b191dGY4fHNsb3BlfHNtZ3JlcXxzbWdyaW58c21ncm5lfHNtZ3JvdXR8c3BsaXRfcGFydHxzcXJ0fHN0YXRlbWVudF90aW1lc3RhbXB8c3RkZGV2fHN0ZGRldl9wb3B8c3RkZGV2X3NhbXB8c3RyaW5nX2FnZ3xzdHJpbmdfYWdnX2ZpbmFsZm58c3RyaW5nX2FnZ190cmFuc2ZufHN0cmluZ190b19hcnJheXxzdHJpcHxzdHJwb3N8c3Vic3RyfHN1YnN0cmluZ3xzdW18c3VwcHJlc3NfcmVkdW5kYW50X3VwZGF0ZXNfdHJpZ2dlcnx0YWJsZV90b194bWx8dGFibGVfdG9feG1sX2FuZF94bWxzY2hlbWF8dGFibGVfdG9feG1sc2NoZW1hfHRhbnx0ZXh0fHRleHRfZ2V8dGV4dF9ndHx0ZXh0X2xhcmdlcnx0ZXh0X2xlfHRleHRfbHR8dGV4dF9wYXR0ZXJuX2dlfHRleHRfcGF0dGVybl9ndHx0ZXh0X3BhdHRlcm5fbGV8dGV4dF9wYXR0ZXJuX2x0fHRleHRfc21hbGxlcnx0ZXh0YW55Y2F0fHRleHRjYXR8dGV4dGVxfHRleHRpY2xpa2V8dGV4dGljbmxpa2V8dGV4dGljcmVnZXhlcXx0ZXh0aWNyZWdleG5lfHRleHRpbnx0ZXh0bGVufHRleHRsaWtlfHRleHRuZXx0ZXh0bmxpa2V8dGV4dG91dHx0ZXh0cmVjdnx0ZXh0cmVnZXhlcXx0ZXh0cmVnZXhuZXx0ZXh0c2VuZHx0aGVzYXVydXNfaW5pdHx0aGVzYXVydXNfbGV4aXplfHRpZGVxfHRpZGdlfHRpZGd0fHRpZGlufHRpZGxhcmdlcnx0aWRsZXx0aWRsdHx0aWRuZXx0aWRvdXR8dGlkcmVjdnx0aWRzZW5kfHRpZHNtYWxsZXJ8dGltZV9jbXB8dGltZV9lcXx0aW1lX2dlfHRpbWVfZ3R8dGltZV9oYXNofHRpbWVfaW58dGltZV9sYXJnZXJ8dGltZV9sZXx0aW1lX2x0fHRpbWVfbWlfaW50ZXJ2YWx8dGltZV9taV90aW1lfHRpbWVfbmV8dGltZV9vdXR8dGltZV9wbF9pbnRlcnZhbHx0aW1lX3JlY3Z8dGltZV9zZW5kfHRpbWVfc21hbGxlcnx0aW1lZGF0ZV9wbHx0aW1lbWl8dGltZW5vd3x0aW1lb2ZkYXl8dGltZXBsfHRpbWVzdGFtcF9jbXB8dGltZXN0YW1wX2NtcF9kYXRlfHRpbWVzdGFtcF9jbXBfdGltZXN0YW1wdHp8dGltZXN0YW1wX2VxfHRpbWVzdGFtcF9lcV9kYXRlfHRpbWVzdGFtcF9lcV90aW1lc3RhbXB0enx0aW1lc3RhbXBfZ2V8dGltZXN0YW1wX2dlX2RhdGV8dGltZXN0YW1wX2dlX3RpbWVzdGFtcHR6fHRpbWVzdGFtcF9ndHx0aW1lc3RhbXBfZ3RfZGF0ZXx0aW1lc3RhbXBfZ3RfdGltZXN0YW1wdHp8dGltZXN0YW1wX2hhc2h8dGltZXN0YW1wX2lufHRpbWVzdGFtcF9sYXJnZXJ8dGltZXN0YW1wX2xlfHRpbWVzdGFtcF9sZV9kYXRlfHRpbWVzdGFtcF9sZV90aW1lc3RhbXB0enx0aW1lc3RhbXBfbHR8dGltZXN0YW1wX2x0X2RhdGV8dGltZXN0YW1wX2x0X3RpbWVzdGFtcHR6fHRpbWVzdGFtcF9taXx0aW1lc3RhbXBfbWlfaW50ZXJ2YWx8dGltZXN0YW1wX25lfHRpbWVzdGFtcF9uZV9kYXRlfHRpbWVzdGFtcF9uZV90aW1lc3RhbXB0enx0aW1lc3RhbXBfb3V0fHRpbWVzdGFtcF9wbF9pbnRlcnZhbHx0aW1lc3RhbXBfcmVjdnx0aW1lc3RhbXBfc2VuZHx0aW1lc3RhbXBfc21hbGxlcnx0aW1lc3RhbXB0eXBtb2Rpbnx0aW1lc3RhbXB0eXBtb2RvdXR8dGltZXN0YW1wdHpfY21wfHRpbWVzdGFtcHR6X2NtcF9kYXRlfHRpbWVzdGFtcHR6X2NtcF90aW1lc3RhbXB8dGltZXN0YW1wdHpfZXF8dGltZXN0YW1wdHpfZXFfZGF0ZXx0aW1lc3RhbXB0el9lcV90aW1lc3RhbXB8dGltZXN0YW1wdHpfZ2V8dGltZXN0YW1wdHpfZ2VfZGF0ZXx0aW1lc3RhbXB0el9nZV90aW1lc3RhbXB8dGltZXN0YW1wdHpfZ3R8dGltZXN0YW1wdHpfZ3RfZGF0ZXx0aW1lc3RhbXB0el9ndF90aW1lc3RhbXB8dGltZXN0YW1wdHpfaW58dGltZXN0YW1wdHpfbGFyZ2VyfHRpbWVzdGFtcHR6X2xlfHRpbWVzdGFtcHR6X2xlX2RhdGV8dGltZXN0YW1wdHpfbGVfdGltZXN0YW1wfHRpbWVzdGFtcHR6X2x0fHRpbWVzdGFtcHR6X2x0X2RhdGV8dGltZXN0YW1wdHpfbHRfdGltZXN0YW1wfHRpbWVzdGFtcHR6X21pfHRpbWVzdGFtcHR6X21pX2ludGVydmFsfHRpbWVzdGFtcHR6X25lfHRpbWVzdGFtcHR6X25lX2RhdGV8dGltZXN0YW1wdHpfbmVfdGltZXN0YW1wfHRpbWVzdGFtcHR6X291dHx0aW1lc3RhbXB0el9wbF9pbnRlcnZhbHx0aW1lc3RhbXB0el9yZWN2fHRpbWVzdGFtcHR6X3NlbmR8dGltZXN0YW1wdHpfc21hbGxlcnx0aW1lc3RhbXB0enR5cG1vZGlufHRpbWVzdGFtcHR6dHlwbW9kb3V0fHRpbWV0eXBtb2Rpbnx0aW1ldHlwbW9kb3V0fHRpbWV0el9jbXB8dGltZXR6X2VxfHRpbWV0el9nZXx0aW1ldHpfZ3R8dGltZXR6X2hhc2h8dGltZXR6X2lufHRpbWV0el9sYXJnZXJ8dGltZXR6X2xlfHRpbWV0el9sdHx0aW1ldHpfbWlfaW50ZXJ2YWx8dGltZXR6X25lfHRpbWV0el9vdXR8dGltZXR6X3BsX2ludGVydmFsfHRpbWV0el9yZWN2fHRpbWV0el9zZW5kfHRpbWV0el9zbWFsbGVyfHRpbWV0emRhdGVfcGx8dGltZXR6dHlwbW9kaW58dGltZXR6dHlwbW9kb3V0fHRpbWV6b25lfHRpbnRlcnZhbHx0aW50ZXJ2YWxjdHx0aW50ZXJ2YWxlbmR8dGludGVydmFsZXF8dGludGVydmFsZ2V8dGludGVydmFsZ3R8dGludGVydmFsaW58dGludGVydmFsbGV8dGludGVydmFsbGVuZXF8dGludGVydmFsbGVuZ2V8dGludGVydmFsbGVuZ3R8dGludGVydmFsbGVubGV8dGludGVydmFsbGVubHR8dGludGVydmFsbGVubmV8dGludGVydmFsbHR8dGludGVydmFsbmV8dGludGVydmFsb3V0fHRpbnRlcnZhbG92fHRpbnRlcnZhbHJlY3Z8dGludGVydmFscmVsfHRpbnRlcnZhbHNhbWV8dGludGVydmFsc2VuZHx0aW50ZXJ2YWxzdGFydHx0b19hc2NpaXx0b19jaGFyfHRvX2RhdGV8dG9faGV4fHRvX251bWJlcnx0b190aW1lc3RhbXB8dG9fdHNxdWVyeXx0b190c3ZlY3Rvcnx0cmFuc2FjdGlvbl90aW1lc3RhbXB8dHJhbnNsYXRlfHRyaWdnZXJfaW58dHJpZ2dlcl9vdXR8dHJ1bmN8dHNfZGVidWd8dHNfaGVhZGxpbmV8dHNfbGV4aXplfHRzX21hdGNoX3F2fHRzX21hdGNoX3RxfHRzX21hdGNoX3R0fHRzX21hdGNoX3ZxfHRzX3BhcnNlfHRzX3Jhbmt8dHNfcmFua19jZHx0c19yZXdyaXRlfHRzX3N0YXR8dHNfdG9rZW5fdHlwZXx0c190eXBhbmFseXplfHRzbWF0Y2hqb2luc2VsfHRzbWF0Y2hzZWx8dHNxX21jb250YWluZWR8dHNxX21jb250YWluc3x0c3F1ZXJ5X2FuZHx0c3F1ZXJ5X2NtcHx0c3F1ZXJ5X2VxfHRzcXVlcnlfZ2V8dHNxdWVyeV9ndHx0c3F1ZXJ5X2xlfHRzcXVlcnlfbHR8dHNxdWVyeV9uZXx0c3F1ZXJ5X25vdHx0c3F1ZXJ5X29yfHRzcXVlcnlpbnx0c3F1ZXJ5b3V0fHRzcXVlcnlyZWN2fHRzcXVlcnlzZW5kfHRzdmVjdG9yX2NtcHx0c3ZlY3Rvcl9jb25jYXR8dHN2ZWN0b3JfZXF8dHN2ZWN0b3JfZ2V8dHN2ZWN0b3JfZ3R8dHN2ZWN0b3JfbGV8dHN2ZWN0b3JfbHR8dHN2ZWN0b3JfbmV8dHN2ZWN0b3JfdXBkYXRlX3RyaWdnZXJ8dHN2ZWN0b3JfdXBkYXRlX3RyaWdnZXJfY29sdW1ufHRzdmVjdG9yaW58dHN2ZWN0b3JvdXR8dHN2ZWN0b3JyZWN2fHRzdmVjdG9yc2VuZHx0eGlkX2N1cnJlbnR8dHhpZF9jdXJyZW50X3NuYXBzaG90fHR4aWRfc25hcHNob3RfaW58dHhpZF9zbmFwc2hvdF9vdXR8dHhpZF9zbmFwc2hvdF9yZWN2fHR4aWRfc25hcHNob3Rfc2VuZHx0eGlkX3NuYXBzaG90X3hpcHx0eGlkX3NuYXBzaG90X3htYXh8dHhpZF9zbmFwc2hvdF94bWlufHR4aWRfdmlzaWJsZV9pbl9zbmFwc2hvdHx1aGNfdG9fdXRmOHx1bmlxdWVfa2V5X3JlY2hlY2t8dW5rbm93bmlufHVua25vd25vdXR8dW5rbm93bnJlY3Z8dW5rbm93bnNlbmR8dW5uZXN0fHVwcGVyfHV0ZjhfdG9fYXNjaWl8dXRmOF90b19iaWc1fHV0ZjhfdG9fZXVjX2NufHV0ZjhfdG9fZXVjX2ppc18yMDA0fHV0ZjhfdG9fZXVjX2pwfHV0ZjhfdG9fZXVjX2tyfHV0ZjhfdG9fZXVjX3R3fHV0ZjhfdG9fZ2IxODAzMHx1dGY4X3RvX2dia3x1dGY4X3RvX2lzbzg4NTl8dXRmOF90b19pc284ODU5XzF8dXRmOF90b19qb2hhYnx1dGY4X3RvX2tvaThyfHV0ZjhfdG9fa29pOHV8dXRmOF90b19zaGlmdF9qaXNfMjAwNHx1dGY4X3RvX3NqaXN8dXRmOF90b191aGN8dXRmOF90b193aW58dXVpZF9jbXB8dXVpZF9lcXx1dWlkX2dlfHV1aWRfZ3R8dXVpZF9oYXNofHV1aWRfaW58dXVpZF9sZXx1dWlkX2x0fHV1aWRfbmV8dXVpZF9vdXR8dXVpZF9yZWN2fHV1aWRfc2VuZHx2YXJfcG9wfHZhcl9zYW1wfHZhcmJpdF9pbnx2YXJiaXRfb3V0fHZhcmJpdF9yZWN2fHZhcmJpdF9zZW5kfHZhcmJpdGNtcHx2YXJiaXRlcXx2YXJiaXRnZXx2YXJiaXRndHx2YXJiaXRsZXx2YXJiaXRsdHx2YXJiaXRuZXx2YXJiaXR0eXBtb2Rpbnx2YXJiaXR0eXBtb2RvdXR8dmFyY2hhcmlufHZhcmNoYXJvdXR8dmFyY2hhcnJlY3Z8dmFyY2hhcnNlbmR8dmFyY2hhcnR5cG1vZGlufHZhcmNoYXJ0eXBtb2RvdXR8dmFyaWFuY2V8dmVyc2lvbnx2b2lkX2lufHZvaWRfb3V0fHZvaWRfcmVjdnx2b2lkX3NlbmR8d2lkdGh8d2lkdGhfYnVja2V0fHdpbjEyNTBfdG9fbGF0aW4yfHdpbjEyNTBfdG9fbWljfHdpbjEyNTFfdG9faXNvfHdpbjEyNTFfdG9fa29pOHJ8d2luMTI1MV90b19taWN8d2luMTI1MV90b193aW44NjZ8d2luODY2X3RvX2lzb3x3aW44NjZfdG9fa29pOHJ8d2luODY2X3RvX21pY3x3aW44NjZfdG9fd2luMTI1MXx3aW5fdG9fdXRmOHx4aWRlcXx4aWRlcWludDR8eGlkaW58eGlkb3V0fHhpZHJlY3Z8eGlkc2VuZHx4bWx8eG1sX2lufHhtbF9pc193ZWxsX2Zvcm1lZHx4bWxfaXNfd2VsbF9mb3JtZWRfY29udGVudHx4bWxfaXNfd2VsbF9mb3JtZWRfZG9jdW1lbnR8eG1sX291dHx4bWxfcmVjdnx4bWxfc2VuZHx4bWxhZ2d8eG1sY29tbWVudHx4bWxjb25jYXQyfHhtbGV4aXN0c3x4bWx2YWxpZGF0ZXx4cGF0aHx4cGF0aF9leGlzdHMiLnNwbGl0KCJ8IikpLGM9W3t0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoidmFyaWFibGUubGFuZ3VhZ2UiLHJlZ2V4OiciLio/Iid9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOmZ1bmN0aW9uKGMpe3JldHVybiBjPWMudG9Mb3dlckNhc2UoKSxhLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGMpPyJzdXBwb3J0LmZ1bmN0aW9uIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aX11bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8ISF8IX58IX5cXCp8IX5+fCF+flxcKnwjfCMjfCM8fCM8PXwjPD58Iz18Iz58Iz49fCV8XFwmfFxcJlxcJnxcXCY8fFxcJjxcXHx8XFwmPnxcXCp8XFwrfFxcLXwvfDx8PCM+fDxcXC0+fDw8fDw8PXw8PFxcfHw8PXw8Pnw8XFw/Pnw8QHw8XFxefD18Pnw+PXw+Pnw+Pj18PlxcXnxcXD8jfFxcP1xcLXxcXD9cXC1cXHx8XFw/XFx8fFxcP1xcfFxcfHxAfEBcXC1AfEA+fEBAfEBAQHxcXF58XFx8fFxcfFxcJj58XFx8L3xcXHw+PnxcXHxcXHx8XFx8XFx8L3x+fH5cXCp8fjw9fnx+PH58fj18fj49fnx+Pn58fn58fn5cXCoifSx7dG9rZW46ImxwYXJlbi5wYXJlbiIscmVnZXg6IltcXChdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFwpXSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV07dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiItLS4qJCJ9LChuZXcgZikuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46ImtleXdvcmQuc3RhdGVtZW50QmVnaW4iLHJlZ2V4OiJeW2EtekEtWl0rIixuZXh0OiJzdGF0ZW1lbnQifSx7dG9rZW46InN1cHBvcnQuYnVpbGRpbiIscmVnZXg6Il5cXFxcW1xcU10rLiokIn1dLHN0YXRlbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLS0uKiQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnRTdGF0ZW1lbnQifSx7dG9rZW46InN0YXRlbWVudEVuZCIscmVnZXg6IjsiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXCRwZXJsXFwkIixuZXh0OiJwZXJsLXN0YXJ0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXCRweXRob25cXCQiLG5leHQ6InB5dGhvbi1zdGFydCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFwkW1xcd18wLTldKlxcJCQiLG5leHQ6ImRvbGxhclNxbCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFwkW1xcd18wLTldKlxcJCIsbmV4dDoiZG9sbGFyU3RhdGVtZW50U3RyaW5nIn1dLmNvbmNhdChjKSxkb2xsYXJTcWw6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii0tLiokIn0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50RG9sbGFyU3FsIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJeXFwkW1xcd18wLTldKlxcJCIsbmV4dDoic3RhdGVtZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXCRbXFx3XzAtOV0qXFwkIixuZXh0OiJkb2xsYXJTcWxTdHJpbmcifV0uY29uY2F0KGMpLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50U3RhdGVtZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXRlbWVudCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnREb2xsYXJTcWw6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoiZG9sbGFyU3FsIn0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0sZG9sbGFyU3RhdGVtZW50U3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Ii4qP1xcJFtcXHdfMC05XSpcXCQiLG5leHQ6InN0YXRlbWVudCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0sZG9sbGFyU3FsU3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Ii4qP1xcJFtcXHdfMC05XSpcXCQiLG5leHQ6ImRvbGxhclNxbCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhmLCJkb2MtIixbKG5ldyBmKS5nZXRFbmRSdWxlKCJzdGFydCIpXSksdGhpcy5lbWJlZFJ1bGVzKGgsInBlcmwtIixbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXCRwZXJsXFwkIixuZXh0OiJzdGF0ZW1lbnQifV0pLHRoaXMuZW1iZWRSdWxlcyhpLCJweXRob24tIixbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJcXCRweXRob25cXCQiLG5leHQ6InN0YXRlbWVudCJ9XSl9O2QuaW5oZXJpdHMoaixnKSxiLlBnc3FsSGlnaGxpZ2h0UnVsZXM9an0pLGRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGRlZmluZSgiYWNlL21vZGUvcGVybF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJiYXNlfGNvbnN0YW50fGNvbnRpbnVlfGVsc2V8ZWxzaWZ8Zm9yfGZvcmVhY2h8Zm9ybWF0fGdvdG98aWZ8bGFzdHxsb2NhbHxteXxuZXh0fG5vfHBhY2thZ2V8cGFyZW50fHJlZG98cmVxdWlyZXxzY2FsYXJ8c3VifHVubGVzc3x1bnRpbHx3aGlsZXx1c2V8dmFycyIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIkFSR1Z8RU5WfElOQ3xTSUciLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJnZXRwcm90b2J5bnVtYmVyfGdldHByb3RvYnluYW1lfGdldHNlcnZieW5hbWV8Z2V0aG9zdGJ5YWRkcnxnZXRob3N0YnluYW1lfGdldHNlcnZieXBvcnR8Z2V0bmV0YnlhZGRyfGdldG5ldGJ5bmFtZXxnZXRzb2NrbmFtZXxnZXRwZWVybmFtZXxzZXRwcmlvcml0eXxnZXRwcm90b2VudHxzZXRwcm90b2VudHxnZXRwcmlvcml0eXxlbmRwcm90b2VudHxnZXRzZXJ2ZW50fHNldHNlcnZlbnR8ZW5kc2VydmVudHxzZXRob3N0ZW50fHNvY2tldHBhaXJ8Z2V0c29ja29wdHxnZXRob3N0ZW50fGVuZGhvc3RlbnR8c2V0c29ja29wdHxzZXRuZXRlbnR8cXVvdGVtZXRhfGxvY2FsdGltZXxwcm90b3R5cGV8Z2V0bmV0ZW50fGVuZG5ldGVudHxyZXdpbmRkaXJ8d2FudGFycmF5fGdldHB3dWlkfGNsb3NlZGlyfGdldGxvZ2lufHJlYWRsaW5rfGVuZGdyZW50fGdldGdyZ2lkfGdldGdybmFtfHNobXdyaXRlfHNodXRkb3dufHJlYWRsaW5lfGVuZHB3ZW50fHNldGdyZW50fHJlYWRwaXBlfGZvcm1saW5lfHRydW5jYXRlfGRibWNsb3NlfHN5c3dyaXRlfHNldHB3ZW50fGdldHB3bmFtfGdldGdyZW50fGdldHB3ZW50fHVjZmlyc3R8c3lzcmVhZHxzZXRwZ3JwfHNobXJlYWR8c3lzc2Vla3xzeXNvcGVufHRlbGxkaXJ8ZGVmaW5lZHxvcGVuZGlyfGNvbm5lY3R8bGNmaXJzdHxnZXRwcGlkfGJpbm1vZGV8c3lzY2FsbHxzcHJpbnRmfGdldHBncnB8cmVhZGRpcnxzZWVrZGlyfHdhaXRwaWR8cmV2ZXJzZXx1bnNoaWZ0fHN5bWxpbmt8ZGJtb3BlbnxzZW1nZXR8bXNncmN2fHJlbmFtZXxsaXN0ZW58Y2hyb290fG1zZ3NuZHxzaG1jdGx8YWNjZXB0fHVucGFja3xleGlzdHN8ZmlsZW5vfHNobWdldHxzeXN0ZW18dW5saW5rfHByaW50ZnxnbXRpbWV8bXNnY3RsfHNlbWN0bHx2YWx1ZXN8cmluZGV4fHN1YnN0cnxzcGxpY2V8bGVuZ3RofG1zZ2dldHxzZWxlY3R8c29ja2V0fHJldHVybnxjYWxsZXJ8ZGVsZXRlfGFsYXJtfGlvY3RsfGluZGV4fHVuZGVmfGxzdGF0fHRpbWVzfHNyYW5kfGNob3dufGZjbnRsfGNsb3NlfHdyaXRlfHVtYXNrfHJtZGlyfHN0dWR5fHNsZWVwfGNob21wfHVudGllfHByaW50fHV0aW1lfG1rZGlyfGF0YW4yfHNwbGl0fGNyeXB0fGZsb2NrfGNobW9kfEJFR0lOfGJsZXNzfGNoZGlyfHNlbW9wfHNoaWZ0fHJlc2V0fGxpbmt8c3RhdHxjaG9wfGdyZXB8Zm9ya3xkdW1wfGpvaW58b3Blbnx0ZWxsfHBpcGV8ZXhpdHxnbG9ifHdhcm58ZWFjaHxiaW5kfHNvcnR8cGFja3xldmFsfHB1c2h8a2V5c3xnZXRjfGtpbGx8c2Vla3xzcXJ0fHNlbmR8d2FpdHxyYW5kfHRpZWR8cmVhZHx0aW1lfGV4ZWN8cmVjdnxlb2Z8Y2hyfGludHxvcmR8ZXhwfHBvc3xwb3B8c2lufGxvZ3xhYnN8b2N0fGhleHx0aWV8Y29zfHZlY3xFTkR8cmVmfG1hcHxkaWV8dWN8bGN8ZG8iLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiIy4qJCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qXFxcXCQnLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKlxcXFwkIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMHhbMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjpmdW5jdGlvbihkKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShkKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShkKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmMuaGFzT3duUHJvcGVydHkoZCk/InN1cHBvcnQuZnVuY3Rpb24iOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcLlxcLlxcLnxcXHxcXHw9fD4+PXw8PD18PD0+fCYmPXw9PnwhfnxcXF49fCY9fFxcfD18XFwuPXx4PXwlPXxcXC89fFxcKj18XFwtPXxcXCs9fD1+fFxcKlxcKnxcXC1cXC18XFwuXFwufFxcfFxcfHwmJnxcXCtcXCt8XFwtPnwhPXw9PXw+PXw8PXw+Pnw8PHwsfD18XFw/XFw6fFxcXnxcXHx8eHwlfFxcL3xcXCp8PHwmfFxcXFx8fnwhfD58XFwufFxcLXxcXCt8XFwtQ3xcXC1ifFxcLVN8XFwtdXxcXC10fFxcLXB8XFwtbHxcXC1kfFxcLWZ8XFwtZ3xcXC1zfFxcLXp8XFwta3xcXC1lfFxcLU98XFwtVHxcXC1CfFxcLU18XFwtQXxcXC1YfFxcLVd8XFwtY3xcXC1SfFxcLW98XFwteHxcXC13fFxcLXJ8XFxiKD86YW5kfGNtcHxlcXxnZXxndHxsZXxsdHxuZXxub3R8b3J8eG9yKSJ9LHt0b2tlbjoibHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj8iJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfX07ZC5pbmhlcml0cyhnLGYpLGIuUGVybEhpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL3B5dGhvbl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJhbmR8YXN8YXNzZXJ0fGJyZWFrfGNsYXNzfGNvbnRpbnVlfGRlZnxkZWx8ZWxpZnxlbHNlfGV4Y2VwdHxleGVjfGZpbmFsbHl8Zm9yfGZyb218Z2xvYmFsfGlmfGltcG9ydHxpbnxpc3xsYW1iZGF8bm90fG9yfHBhc3N8cHJpbnR8cmFpc2V8cmV0dXJufHRyeXx3aGlsZXx3aXRofHlpZWxkIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgiVHJ1ZXxGYWxzZXxOb25lfE5vdEltcGxlbWVudGVkfEVsbGlwc2lzfF9fZGVidWdfXyIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImFic3xkaXZtb2R8aW5wdXR8b3BlbnxzdGF0aWNtZXRob2R8YWxsfGVudW1lcmF0ZXxpbnR8b3JkfHN0cnxhbnl8ZXZhbHxpc2luc3RhbmNlfHBvd3xzdW18YmFzZXN0cmluZ3xleGVjZmlsZXxpc3N1YmNsYXNzfHByaW50fHN1cGVyfGJpbmZpbGV8aXRlcnxwcm9wZXJ0eXx0dXBsZXxib29sfGZpbHRlcnxsZW58cmFuZ2V8dHlwZXxieXRlYXJyYXl8ZmxvYXR8bGlzdHxyYXdfaW5wdXR8dW5pY2hyfGNhbGxhYmxlfGZvcm1hdHxsb2NhbHN8cmVkdWNlfHVuaWNvZGV8Y2hyfGZyb3plbnNldHxsb25nfHJlbG9hZHx2YXJzfGNsYXNzbWV0aG9kfGdldGF0dHJ8bWFwfHJlcHJ8eHJhbmdlfGNtcHxnbG9iYWxzfG1heHxyZXZlcnNlZHx6aXB8Y29tcGlsZXxoYXNhdHRyfG1lbW9yeXZpZXd8cm91bmR8X19pbXBvcnRfX3xjb21wbGV4fGhhc2h8bWlufHNldHxhcHBseXxkZWxhdHRyfGhlbHB8bmV4dHxzZXRhdHRyfGJ1ZmZlcnxkaWN0fGhleHxvYmplY3R8c2xpY2V8Y29lcmNlfGRpcnxpZHxvY3R8c29ydGVkfGludGVybiIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoIiIuc3BsaXQoInwiKSksZj0iKD86cnx1fHVyfFJ8VXxVUnxVcnx1Uik/IixnPSIoPzooPzpbMS05XVxcZCopfCg/OjApKSIsaD0iKD86MFtvT10/WzAtN10rKSIsaT0iKD86MFt4WF1bXFxkQS1GYS1mXSspIixqPSIoPzowW2JCXVswMV0rKSIsaz0iKD86IitnKyJ8IitoKyJ8IitpKyJ8IitqKyIpIixsPSIoPzpbZUVdWystXT9cXGQrKSIsbT0iKD86XFwuXFxkKykiLG49Iig/OlxcZCspIixvPSIoPzooPzoiK24rIj8iK20rIil8KD86IituKyJcXC4pKSIscD0iKD86KD86IitvKyJ8IituKyIpIitsKyIpIixxPSIoPzoiK3ArInwiK28rIikiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiIy4qJCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDpmKyciezN9KD86W15cXFxcXXxcXFxcLikqPyJ7M30nfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6ZisnInszfS4qJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6ZisnIig/OlteXFxcXF18XFxcXC4pKj8iJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmYrIid7M30oPzpbXlxcXFxdfFxcXFwuKSo/J3szfSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDpmKyInezN9LiokIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmYrIicoPzpbXlxcXFxdfFxcXFwuKSo/JyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6Iig/OiIrcSsifFxcZCspW2pKXVxcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6cX0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDprKyJbbExdXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDprKyJcXGIifSx7dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoZSk/ImtleXdvcmQiOmIuaGFzT3duUHJvcGVydHkoZSk/ImNvbnN0YW50Lmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGUpPyJpbnZhbGlkLmlsbGVnYWwiOmMuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOmU9PSJkZWJ1Z2dlciI/ImludmFsaWQuZGVwcmVjYXRlZCI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwrfFxcLXxcXCp8XFwqXFwqfFxcL3xcXC9cXC98JXw8PHw+PnwmfFxcfHxcXF58fnw8fD58PD18PT58PT18IT18PD58PSJ9LHt0b2tlbjoibHBhcmVuLnBhcmVuIixyZWdleDoiW1xcW1xcKFxce10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF1cXClcXH1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzpbXlxcXFxdfFxcXFwuKSo/InszfScsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqPyd7M30iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX19O2QuaW5oZXJpdHMoZyxmKSxiLlB5dGhvbkhpZ2hsaWdodFJ1bGVzPWd9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-php-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvcGhwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3BocF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9waHBfaGlnaGxpZ2h0X3J1bGVzIikuUGhwSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsaz1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsbD1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBqLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBrfTtkLmluaGVyaXRzKGwsZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKikjLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiIyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnM7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCIpe3ZhciBnPWIubWF0Y2goL14uKltce1woXFtcOl1ccyokLyk7ZyYmKGQrPWMpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksYWNlLmRlZmluZSgiYWNlL21vZGUvcGhwX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxnPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaD1mdW5jdGlvbigpe3ZhciBhPW5ldyBmLGI9ZS5hcnJheVRvTWFwKCJhYnN8YWNvc3xhY29zaHxhZGRjc2xhc2hlc3xhZGRzbGFzaGVzfGFnZ3JlZ2F0ZXxhZ2dyZWdhdGVfaW5mb3xhZ2dyZWdhdGVfbWV0aG9kc3xhZ2dyZWdhdGVfbWV0aG9kc19ieV9saXN0fGFnZ3JlZ2F0ZV9tZXRob2RzX2J5X3JlZ2V4cHxhZ2dyZWdhdGVfcHJvcGVydGllc3xhZ2dyZWdhdGVfcHJvcGVydGllc19ieV9saXN0fGFnZ3JlZ2F0ZV9wcm9wZXJ0aWVzX2J5X3JlZ2V4cHxhZ2dyZWdhdGlvbl9pbmZvfGFtcXBjb25uZWN0aW9ufGFtcXBleGNoYW5nZXxhbXFwcXVldWV8YXBhY2hlX2NoaWxkX3Rlcm1pbmF0ZXxhcGFjaGVfZ2V0X21vZHVsZXN8YXBhY2hlX2dldF92ZXJzaW9ufGFwYWNoZV9nZXRlbnZ8YXBhY2hlX2xvb2t1cF91cml8YXBhY2hlX25vdGV8YXBhY2hlX3JlcXVlc3RfaGVhZGVyc3xhcGFjaGVfcmVzZXRfdGltZW91dHxhcGFjaGVfcmVzcG9uc2VfaGVhZGVyc3xhcGFjaGVfc2V0ZW52fGFwY19hZGR8YXBjX2Jpbl9kdW1wfGFwY19iaW5fZHVtcGZpbGV8YXBjX2Jpbl9sb2FkfGFwY19iaW5fbG9hZGZpbGV8YXBjX2NhY2hlX2luZm98YXBjX2Nhc3xhcGNfY2xlYXJfY2FjaGV8YXBjX2NvbXBpbGVfZmlsZXxhcGNfZGVjfGFwY19kZWZpbmVfY29uc3RhbnRzfGFwY19kZWxldGV8YXBjX2RlbGV0ZV9maWxlfGFwY19leGlzdHN8YXBjX2ZldGNofGFwY19pbmN8YXBjX2xvYWRfY29uc3RhbnRzfGFwY19zbWFfaW5mb3xhcGNfc3RvcmV8YXBjaXRlcmF0b3J8YXBkX2JyZWFrcG9pbnR8YXBkX2NhbGxzdGFja3xhcGRfY2x1bmt8YXBkX2NvbnRpbnVlfGFwZF9jcm9ha3xhcGRfZHVtcF9mdW5jdGlvbl90YWJsZXxhcGRfZHVtcF9wZXJzaXN0ZW50X3Jlc291cmNlc3xhcGRfZHVtcF9yZWd1bGFyX3Jlc291cmNlc3xhcGRfZWNob3xhcGRfZ2V0X2FjdGl2ZV9zeW1ib2xzfGFwZF9zZXRfcHByb2ZfdHJhY2V8YXBkX3NldF9zZXNzaW9ufGFwZF9zZXRfc2Vzc2lvbl90cmFjZXxhcGRfc2V0X3Nlc3Npb25fdHJhY2Vfc29ja2V0fGFwcGVuZGl0ZXJhdG9yfGFycmF5fGFycmF5X2NoYW5nZV9rZXlfY2FzZXxhcnJheV9jaHVua3xhcnJheV9jb21iaW5lfGFycmF5X2NvdW50X3ZhbHVlc3xhcnJheV9kaWZmfGFycmF5X2RpZmZfYXNzb2N8YXJyYXlfZGlmZl9rZXl8YXJyYXlfZGlmZl91YXNzb2N8YXJyYXlfZGlmZl91a2V5fGFycmF5X2ZpbGx8YXJyYXlfZmlsbF9rZXlzfGFycmF5X2ZpbHRlcnxhcnJheV9mbGlwfGFycmF5X2ludGVyc2VjdHxhcnJheV9pbnRlcnNlY3RfYXNzb2N8YXJyYXlfaW50ZXJzZWN0X2tleXxhcnJheV9pbnRlcnNlY3RfdWFzc29jfGFycmF5X2ludGVyc2VjdF91a2V5fGFycmF5X2tleV9leGlzdHN8YXJyYXlfa2V5c3xhcnJheV9tYXB8YXJyYXlfbWVyZ2V8YXJyYXlfbWVyZ2VfcmVjdXJzaXZlfGFycmF5X211bHRpc29ydHxhcnJheV9wYWR8YXJyYXlfcG9wfGFycmF5X3Byb2R1Y3R8YXJyYXlfcHVzaHxhcnJheV9yYW5kfGFycmF5X3JlZHVjZXxhcnJheV9yZXBsYWNlfGFycmF5X3JlcGxhY2VfcmVjdXJzaXZlfGFycmF5X3JldmVyc2V8YXJyYXlfc2VhcmNofGFycmF5X3NoaWZ0fGFycmF5X3NsaWNlfGFycmF5X3NwbGljZXxhcnJheV9zdW18YXJyYXlfdWRpZmZ8YXJyYXlfdWRpZmZfYXNzb2N8YXJyYXlfdWRpZmZfdWFzc29jfGFycmF5X3VpbnRlcnNlY3R8YXJyYXlfdWludGVyc2VjdF9hc3NvY3xhcnJheV91aW50ZXJzZWN0X3Vhc3NvY3xhcnJheV91bmlxdWV8YXJyYXlfdW5zaGlmdHxhcnJheV92YWx1ZXN8YXJyYXlfd2Fsa3xhcnJheV93YWxrX3JlY3Vyc2l2ZXxhcnJheWFjY2Vzc3xhcnJheWl0ZXJhdG9yfGFycmF5b2JqZWN0fGFyc29ydHxhc2lufGFzaW5ofGFzb3J0fGFzc2VydHxhc3NlcnRfb3B0aW9uc3xhdGFufGF0YW4yfGF0YW5ofGF1ZGlvcHJvcGVydGllc3xiYWRmdW5jdGlvbmNhbGxleGNlcHRpb258YmFkbWV0aG9kY2FsbGV4Y2VwdGlvbnxiYXNlNjRfZGVjb2RlfGJhc2U2NF9lbmNvZGV8YmFzZV9jb252ZXJ0fGJhc2VuYW1lfGJiY29kZV9hZGRfZWxlbWVudHxiYmNvZGVfYWRkX3NtaWxleXxiYmNvZGVfY3JlYXRlfGJiY29kZV9kZXN0cm95fGJiY29kZV9wYXJzZXxiYmNvZGVfc2V0X2FyZ19wYXJzZXJ8YmJjb2RlX3NldF9mbGFnc3xiY2FkZHxiY2NvbXB8YmNkaXZ8YmNtb2R8YmNtdWx8YmNvbXBpbGVyX2xvYWR8YmNvbXBpbGVyX2xvYWRfZXhlfGJjb21waWxlcl9wYXJzZV9jbGFzc3xiY29tcGlsZXJfcmVhZHxiY29tcGlsZXJfd3JpdGVfY2xhc3N8YmNvbXBpbGVyX3dyaXRlX2NvbnN0YW50fGJjb21waWxlcl93cml0ZV9leGVfZm9vdGVyfGJjb21waWxlcl93cml0ZV9maWxlfGJjb21waWxlcl93cml0ZV9mb290ZXJ8YmNvbXBpbGVyX3dyaXRlX2Z1bmN0aW9ufGJjb21waWxlcl93cml0ZV9mdW5jdGlvbnNfZnJvbV9maWxlfGJjb21waWxlcl93cml0ZV9oZWFkZXJ8YmNvbXBpbGVyX3dyaXRlX2luY2x1ZGVkX2ZpbGVuYW1lfGJjcG93fGJjcG93bW9kfGJjc2NhbGV8YmNzcXJ0fGJjc3VifGJpbjJoZXh8YmluZF90ZXh0ZG9tYWluX2NvZGVzZXR8YmluZGVjfGJpbmR0ZXh0ZG9tYWlufGJzb25fZGVjb2RlfGJzb25fZW5jb2RlfGJ1bXBWYWx1ZXxiemNsb3NlfGJ6Y29tcHJlc3N8YnpkZWNvbXByZXNzfGJ6ZXJybm98YnplcnJvcnxiemVycnN0cnxiemZsdXNofGJ6b3BlbnxienJlYWR8Ynp3cml0ZXxjYWNoaW5naXRlcmF0b3J8Y2Fpcm98Y2Fpcm9fY3JlYXRlfGNhaXJvX2ZvbnRfZmFjZV9nZXRfdHlwZXxjYWlyb19mb250X2ZhY2Vfc3RhdHVzfGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGV8Y2Fpcm9fZm9udF9vcHRpb25zX2VxdWFsfGNhaXJvX2ZvbnRfb3B0aW9uc19nZXRfYW50aWFsaWFzfGNhaXJvX2ZvbnRfb3B0aW9uc19nZXRfaGludF9tZXRyaWNzfGNhaXJvX2ZvbnRfb3B0aW9uc19nZXRfaGludF9zdHlsZXxjYWlyb19mb250X29wdGlvbnNfZ2V0X3N1YnBpeGVsX29yZGVyfGNhaXJvX2ZvbnRfb3B0aW9uc19oYXNofGNhaXJvX2ZvbnRfb3B0aW9uc19tZXJnZXxjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhc3xjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfbWV0cmljc3xjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGV8Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9zdWJwaXhlbF9vcmRlcnxjYWlyb19mb250X29wdGlvbnNfc3RhdHVzfGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRofGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlfGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhfGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zyb21fcG5nfGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGF8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0fGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodHxjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGV8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGh8Y2Fpcm9fbWF0cml4X2NyZWF0ZV9zY2FsZXxjYWlyb19tYXRyaXhfY3JlYXRlX3RyYW5zbGF0ZXxjYWlyb19tYXRyaXhfaW52ZXJ0fGNhaXJvX21hdHJpeF9tdWx0aXBseXxjYWlyb19tYXRyaXhfcm90YXRlfGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fZGlzdGFuY2V8Y2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9wb2ludHxjYWlyb19tYXRyaXhfdHJhbnNsYXRlfGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdifGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYXxjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZXxjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXJ8Y2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsfGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYnxjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yZ2JhfGNhaXJvX3BhdHRlcm5fZ2V0X2NvbG9yX3N0b3BfY291bnR8Y2Fpcm9fcGF0dGVybl9nZXRfY29sb3Jfc3RvcF9yZ2JhfGNhaXJvX3BhdHRlcm5fZ2V0X2V4dGVuZHxjYWlyb19wYXR0ZXJuX2dldF9maWx0ZXJ8Y2Fpcm9fcGF0dGVybl9nZXRfbGluZWFyX3BvaW50c3xjYWlyb19wYXR0ZXJuX2dldF9tYXRyaXh8Y2Fpcm9fcGF0dGVybl9nZXRfcmFkaWFsX2NpcmNsZXN8Y2Fpcm9fcGF0dGVybl9nZXRfcmdiYXxjYWlyb19wYXR0ZXJuX2dldF9zdXJmYWNlfGNhaXJvX3BhdHRlcm5fZ2V0X3R5cGV8Y2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kfGNhaXJvX3BhdHRlcm5fc2V0X2ZpbHRlcnxjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXh8Y2Fpcm9fcGF0dGVybl9zdGF0dXN8Y2Fpcm9fcGRmX3N1cmZhY2VfY3JlYXRlfGNhaXJvX3BkZl9zdXJmYWNlX3NldF9zaXplfGNhaXJvX3BzX2dldF9sZXZlbHN8Y2Fpcm9fcHNfbGV2ZWxfdG9fc3RyaW5nfGNhaXJvX3BzX3N1cmZhY2VfY3JlYXRlfGNhaXJvX3BzX3N1cmZhY2VfZHNjX2JlZ2luX3BhZ2Vfc2V0dXB8Y2Fpcm9fcHNfc3VyZmFjZV9kc2NfYmVnaW5fc2V0dXB8Y2Fpcm9fcHNfc3VyZmFjZV9kc2NfY29tbWVudHxjYWlyb19wc19zdXJmYWNlX2dldF9lcHN8Y2Fpcm9fcHNfc3VyZmFjZV9yZXN0cmljdF90b19sZXZlbHxjYWlyb19wc19zdXJmYWNlX3NldF9lcHN8Y2Fpcm9fcHNfc3VyZmFjZV9zZXRfc2l6ZXxjYWlyb19zY2FsZWRfZm9udF9jcmVhdGV8Y2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50c3xjYWlyb19zY2FsZWRfZm9udF9nZXRfY3RtfGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2V8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfbWF0cml4fGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X29wdGlvbnN8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X3NjYWxlX21hdHJpeHxjYWlyb19zY2FsZWRfZm9udF9nZXRfdHlwZXxjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzfGNhaXJvX3NjYWxlZF9mb250X3N0YXR1c3xjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHN8Y2Fpcm9fc3VyZmFjZV9jb3B5X3BhZ2V8Y2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcnxjYWlyb19zdXJmYWNlX2ZpbmlzaHxjYWlyb19zdXJmYWNlX2ZsdXNofGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnR8Y2Fpcm9fc3VyZmFjZV9nZXRfZGV2aWNlX29mZnNldHxjYWlyb19zdXJmYWNlX2dldF9mb250X29wdGlvbnN8Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZXxjYWlyb19zdXJmYWNlX21hcmtfZGlydHl8Y2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZXxjYWlyb19zdXJmYWNlX3NldF9kZXZpY2Vfb2Zmc2V0fGNhaXJvX3N1cmZhY2Vfc2V0X2ZhbGxiYWNrX3Jlc29sdXRpb258Y2Fpcm9fc3VyZmFjZV9zaG93X3BhZ2V8Y2Fpcm9fc3VyZmFjZV9zdGF0dXN8Y2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmd8Y2Fpcm9fc3ZnX3N1cmZhY2VfY3JlYXRlfGNhaXJvX3N2Z19zdXJmYWNlX3Jlc3RyaWN0X3RvX3ZlcnNpb258Y2Fpcm9fc3ZnX3ZlcnNpb25fdG9fc3RyaW5nfGNhaXJvYW50aWFsaWFzfGNhaXJvY29udGVudHxjYWlyb2NvbnRleHR8Y2Fpcm9leGNlcHRpb258Y2Fpcm9leHRlbmR8Y2Fpcm9maWxscnVsZXxjYWlyb2ZpbHRlcnxjYWlyb2ZvbnRmYWNlfGNhaXJvZm9udG9wdGlvbnN8Y2Fpcm9mb250c2xhbnR8Y2Fpcm9mb250dHlwZXxjYWlyb2ZvbnR3ZWlnaHR8Y2Fpcm9mb3JtYXR8Y2Fpcm9ncmFkaWVudHBhdHRlcm58Y2Fpcm9oaW50bWV0cmljc3xjYWlyb2hpbnRzdHlsZXxjYWlyb2ltYWdlc3VyZmFjZXxjYWlyb2xpbmVhcmdyYWRpZW50fGNhaXJvbGluZWNhcHxjYWlyb2xpbmVqb2lufGNhaXJvbWF0cml4fGNhaXJvb3BlcmF0b3J8Y2Fpcm9wYXRofGNhaXJvcGF0dGVybnxjYWlyb3BhdHRlcm50eXBlfGNhaXJvcGRmc3VyZmFjZXxjYWlyb3BzbGV2ZWx8Y2Fpcm9wc3N1cmZhY2V8Y2Fpcm9yYWRpYWxncmFkaWVudHxjYWlyb3NjYWxlZGZvbnR8Y2Fpcm9zb2xpZHBhdHRlcm58Y2Fpcm9zdGF0dXN8Y2Fpcm9zdWJwaXhlbG9yZGVyfGNhaXJvc3VyZmFjZXxjYWlyb3N1cmZhY2VwYXR0ZXJufGNhaXJvc3VyZmFjZXR5cGV8Y2Fpcm9zdmdzdXJmYWNlfGNhaXJvc3ZndmVyc2lvbnxjYWlyb3RveWZvbnRmYWNlfGNhbF9kYXlzX2luX21vbnRofGNhbF9mcm9tX2pkfGNhbF9pbmZvfGNhbF90b19qZHxjYWxjdWxfaG1hY3xjYWxjdWxobWFjfGNhbGxfdXNlcl9mdW5jfGNhbGxfdXNlcl9mdW5jX2FycmF5fGNhbGxfdXNlcl9tZXRob2R8Y2FsbF91c2VyX21ldGhvZF9hcnJheXxjYWxsYmFja2ZpbHRlcml0ZXJhdG9yfGNlaWx8Y2hkYnxjaGRiX2NyZWF0ZXxjaGRpcnxjaGVja2RhdGV8Y2hlY2tkbnNycnxjaGdycHxjaG1vZHxjaG9wfGNob3dufGNocnxjaHJvb3R8Y2h1bmtfc3BsaXR8Y2xhc3NfYWxpYXN8Y2xhc3NfZXhpc3RzfGNsYXNzX2ltcGxlbWVudHN8Y2xhc3NfcGFyZW50c3xjbGFzc2tpdF9pbXBvcnR8Y2xhc3NraXRfbWV0aG9kX2FkZHxjbGFzc2tpdF9tZXRob2RfY29weXxjbGFzc2tpdF9tZXRob2RfcmVkZWZpbmV8Y2xhc3NraXRfbWV0aG9kX3JlbW92ZXxjbGFzc2tpdF9tZXRob2RfcmVuYW1lfGNsZWFyc3RhdGNhY2hlfGNsb25lfGNsb3NlZGlyfGNsb3NlbG9nfGNvbGxhdG9yfGNvbXxjb21fYWRkcmVmfGNvbV9jcmVhdGVfZ3VpZHxjb21fZXZlbnRfc2lua3xjb21fZ2V0fGNvbV9nZXRfYWN0aXZlX29iamVjdHxjb21faW52b2tlfGNvbV9pc2VudW18Y29tX2xvYWR8Y29tX2xvYWRfdHlwZWxpYnxjb21fbWVzc2FnZV9wdW1wfGNvbV9wcmludF90eXBlaW5mb3xjb21fcHJvcGdldHxjb21fcHJvcHB1dHxjb21fcHJvcHNldHxjb21fcmVsZWFzZXxjb21fc2V0fGNvbXBhY3R8Y29ubmVjdGlvbl9hYm9ydGVkfGNvbm5lY3Rpb25fc3RhdHVzfGNvbm5lY3Rpb25fdGltZW91dHxjb25zdGFudHxjb25zdHJ1Y3R8Y29uc3RydWN0fGNvbnN0cnVjdHxjb252ZXJ0X2N5cl9zdHJpbmd8Y29udmVydF91dWRlY29kZXxjb252ZXJ0X3V1ZW5jb2RlfGNvcHl8Y29zfGNvc2h8Y291bnR8Y291bnRfY2hhcnN8Y291bnRhYmxlfGNvdW50ZXJfYnVtcHxjb3VudGVyX2J1bXBfdmFsdWV8Y291bnRlcl9jcmVhdGV8Y291bnRlcl9nZXR8Y291bnRlcl9nZXRfbWV0YXxjb3VudGVyX2dldF9uYW1lZHxjb3VudGVyX2dldF92YWx1ZXxjb3VudGVyX3Jlc2V0fGNvdW50ZXJfcmVzZXRfdmFsdWV8Y3JhY2tfY2hlY2t8Y3JhY2tfY2xvc2VkaWN0fGNyYWNrX2dldGxhc3RtZXNzYWdlfGNyYWNrX29wZW5kaWN0fGNyYzMyfGNyZWF0ZV9mdW5jdGlvbnxjcnlwdHxjdHlwZV9hbG51bXxjdHlwZV9hbHBoYXxjdHlwZV9jbnRybHxjdHlwZV9kaWdpdHxjdHlwZV9ncmFwaHxjdHlwZV9sb3dlcnxjdHlwZV9wcmludHxjdHlwZV9wdW5jdHxjdHlwZV9zcGFjZXxjdHlwZV91cHBlcnxjdHlwZV94ZGlnaXR8Y3VicmlkX2FmZmVjdGVkX3Jvd3N8Y3VicmlkX2JpbmR8Y3VicmlkX2NsaWVudF9lbmNvZGluZ3xjdWJyaWRfY2xvc2V8Y3VicmlkX2Nsb3NlX3ByZXBhcmV8Y3VicmlkX2Nsb3NlX3JlcXVlc3R8Y3VicmlkX2NvbF9nZXR8Y3VicmlkX2NvbF9zaXplfGN1YnJpZF9jb2x1bW5fbmFtZXN8Y3VicmlkX2NvbHVtbl90eXBlc3xjdWJyaWRfY29tbWl0fGN1YnJpZF9jb25uZWN0fGN1YnJpZF9jb25uZWN0X3dpdGhfdXJsfGN1YnJpZF9jdXJyZW50X29pZHxjdWJyaWRfZGF0YV9zZWVrfGN1YnJpZF9kYl9uYW1lfGN1YnJpZF9kaXNjb25uZWN0fGN1YnJpZF9kcm9wfGN1YnJpZF9lcnJub3xjdWJyaWRfZXJyb3J8Y3VicmlkX2Vycm9yX2NvZGV8Y3VicmlkX2Vycm9yX2NvZGVfZmFjaWxpdHl8Y3VicmlkX2Vycm9yX21zZ3xjdWJyaWRfZXhlY3V0ZXxjdWJyaWRfZmV0Y2h8Y3VicmlkX2ZldGNoX2FycmF5fGN1YnJpZF9mZXRjaF9hc3NvY3xjdWJyaWRfZmV0Y2hfZmllbGR8Y3VicmlkX2ZldGNoX2xlbmd0aHN8Y3VicmlkX2ZldGNoX29iamVjdHxjdWJyaWRfZmV0Y2hfcm93fGN1YnJpZF9maWVsZF9mbGFnc3xjdWJyaWRfZmllbGRfbGVufGN1YnJpZF9maWVsZF9uYW1lfGN1YnJpZF9maWVsZF9zZWVrfGN1YnJpZF9maWVsZF90YWJsZXxjdWJyaWRfZmllbGRfdHlwZXxjdWJyaWRfZnJlZV9yZXN1bHR8Y3VicmlkX2dldHxjdWJyaWRfZ2V0X2F1dG9jb21taXR8Y3VicmlkX2dldF9jaGFyc2V0fGN1YnJpZF9nZXRfY2xhc3NfbmFtZXxjdWJyaWRfZ2V0X2NsaWVudF9pbmZvfGN1YnJpZF9nZXRfZGJfcGFyYW1ldGVyfGN1YnJpZF9nZXRfc2VydmVyX2luZm98Y3VicmlkX2luc2VydF9pZHxjdWJyaWRfaXNfaW5zdGFuY2V8Y3VicmlkX2xpc3RfZGJzfGN1YnJpZF9sb2FkX2Zyb21fZ2xvfGN1YnJpZF9sb2JfY2xvc2V8Y3VicmlkX2xvYl9leHBvcnR8Y3VicmlkX2xvYl9nZXR8Y3VicmlkX2xvYl9zZW5kfGN1YnJpZF9sb2Jfc2l6ZXxjdWJyaWRfbG9ja19yZWFkfGN1YnJpZF9sb2NrX3dyaXRlfGN1YnJpZF9tb3ZlX2N1cnNvcnxjdWJyaWRfbmV3X2dsb3xjdWJyaWRfbmV4dF9yZXN1bHR8Y3VicmlkX251bV9jb2xzfGN1YnJpZF9udW1fZmllbGRzfGN1YnJpZF9udW1fcm93c3xjdWJyaWRfcGluZ3xjdWJyaWRfcHJlcGFyZXxjdWJyaWRfcHV0fGN1YnJpZF9xdWVyeXxjdWJyaWRfcmVhbF9lc2NhcGVfc3RyaW5nfGN1YnJpZF9yZXN1bHR8Y3VicmlkX3JvbGxiYWNrfGN1YnJpZF9zYXZlX3RvX2dsb3xjdWJyaWRfc2NoZW1hfGN1YnJpZF9zZW5kX2dsb3xjdWJyaWRfc2VxX2Ryb3B8Y3VicmlkX3NlcV9pbnNlcnR8Y3VicmlkX3NlcV9wdXR8Y3VicmlkX3NldF9hZGR8Y3VicmlkX3NldF9hdXRvY29tbWl0fGN1YnJpZF9zZXRfZGJfcGFyYW1ldGVyfGN1YnJpZF9zZXRfZHJvcHxjdWJyaWRfdW5idWZmZXJlZF9xdWVyeXxjdWJyaWRfdmVyc2lvbnxjdXJsX2Nsb3NlfGN1cmxfY29weV9oYW5kbGV8Y3VybF9lcnJub3xjdXJsX2Vycm9yfGN1cmxfZXhlY3xjdXJsX2dldGluZm98Y3VybF9pbml0fGN1cmxfbXVsdGlfYWRkX2hhbmRsZXxjdXJsX211bHRpX2Nsb3NlfGN1cmxfbXVsdGlfZXhlY3xjdXJsX211bHRpX2dldGNvbnRlbnR8Y3VybF9tdWx0aV9pbmZvX3JlYWR8Y3VybF9tdWx0aV9pbml0fGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZXxjdXJsX211bHRpX3NlbGVjdHxjdXJsX3NldG9wdHxjdXJsX3NldG9wdF9hcnJheXxjdXJsX3ZlcnNpb258Y3VycmVudHxjeXJ1c19hdXRoZW50aWNhdGV8Y3lydXNfYmluZHxjeXJ1c19jbG9zZXxjeXJ1c19jb25uZWN0fGN5cnVzX3F1ZXJ5fGN5cnVzX3VuYmluZHxkYXRlfGRhdGVfYWRkfGRhdGVfY3JlYXRlfGRhdGVfY3JlYXRlX2Zyb21fZm9ybWF0fGRhdGVfZGF0ZV9zZXR8ZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldHxkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0fGRhdGVfZGlmZnxkYXRlX2Zvcm1hdHxkYXRlX2dldF9sYXN0X2Vycm9yc3xkYXRlX2ludGVydmFsX2NyZWF0ZV9mcm9tX2RhdGVfc3RyaW5nfGRhdGVfaW50ZXJ2YWxfZm9ybWF0fGRhdGVfaXNvZGF0ZV9zZXR8ZGF0ZV9tb2RpZnl8ZGF0ZV9vZmZzZXRfZ2V0fGRhdGVfcGFyc2V8ZGF0ZV9wYXJzZV9mcm9tX2Zvcm1hdHxkYXRlX3N1YnxkYXRlX3N1bl9pbmZvfGRhdGVfc3VucmlzZXxkYXRlX3N1bnNldHxkYXRlX3RpbWVfc2V0fGRhdGVfdGltZXN0YW1wX2dldHxkYXRlX3RpbWVzdGFtcF9zZXR8ZGF0ZV90aW1lem9uZV9nZXR8ZGF0ZV90aW1lem9uZV9zZXR8ZGF0ZWludGVydmFsfGRhdGVwZXJpb2R8ZGF0ZXRpbWV8ZGF0ZXRpbWV6b25lfGRiMl9hdXRvY29tbWl0fGRiMl9iaW5kX3BhcmFtfGRiMl9jbGllbnRfaW5mb3xkYjJfY2xvc2V8ZGIyX2NvbHVtbl9wcml2aWxlZ2VzfGRiMl9jb2x1bW5zfGRiMl9jb21taXR8ZGIyX2Nvbm5fZXJyb3J8ZGIyX2Nvbm5fZXJyb3Jtc2d8ZGIyX2Nvbm5lY3R8ZGIyX2N1cnNvcl90eXBlfGRiMl9lc2NhcGVfc3RyaW5nfGRiMl9leGVjfGRiMl9leGVjdXRlfGRiMl9mZXRjaF9hcnJheXxkYjJfZmV0Y2hfYXNzb2N8ZGIyX2ZldGNoX2JvdGh8ZGIyX2ZldGNoX29iamVjdHxkYjJfZmV0Y2hfcm93fGRiMl9maWVsZF9kaXNwbGF5X3NpemV8ZGIyX2ZpZWxkX25hbWV8ZGIyX2ZpZWxkX251bXxkYjJfZmllbGRfcHJlY2lzaW9ufGRiMl9maWVsZF9zY2FsZXxkYjJfZmllbGRfdHlwZXxkYjJfZmllbGRfd2lkdGh8ZGIyX2ZvcmVpZ25fa2V5c3xkYjJfZnJlZV9yZXN1bHR8ZGIyX2ZyZWVfc3RtdHxkYjJfZ2V0X29wdGlvbnxkYjJfbGFzdF9pbnNlcnRfaWR8ZGIyX2xvYl9yZWFkfGRiMl9uZXh0X3Jlc3VsdHxkYjJfbnVtX2ZpZWxkc3xkYjJfbnVtX3Jvd3N8ZGIyX3BjbG9zZXxkYjJfcGNvbm5lY3R8ZGIyX3ByZXBhcmV8ZGIyX3ByaW1hcnlfa2V5c3xkYjJfcHJvY2VkdXJlX2NvbHVtbnN8ZGIyX3Byb2NlZHVyZXN8ZGIyX3Jlc3VsdHxkYjJfcm9sbGJhY2t8ZGIyX3NlcnZlcl9pbmZvfGRiMl9zZXRfb3B0aW9ufGRiMl9zcGVjaWFsX2NvbHVtbnN8ZGIyX3N0YXRpc3RpY3N8ZGIyX3N0bXRfZXJyb3J8ZGIyX3N0bXRfZXJyb3Jtc2d8ZGIyX3RhYmxlX3ByaXZpbGVnZXN8ZGIyX3RhYmxlc3xkYmFfY2xvc2V8ZGJhX2RlbGV0ZXxkYmFfZXhpc3RzfGRiYV9mZXRjaHxkYmFfZmlyc3RrZXl8ZGJhX2hhbmRsZXJzfGRiYV9pbnNlcnR8ZGJhX2tleV9zcGxpdHxkYmFfbGlzdHxkYmFfbmV4dGtleXxkYmFfb3BlbnxkYmFfb3B0aW1pemV8ZGJhX3BvcGVufGRiYV9yZXBsYWNlfGRiYV9zeW5jfGRiYXNlX2FkZF9yZWNvcmR8ZGJhc2VfY2xvc2V8ZGJhc2VfY3JlYXRlfGRiYXNlX2RlbGV0ZV9yZWNvcmR8ZGJhc2VfZ2V0X2hlYWRlcl9pbmZvfGRiYXNlX2dldF9yZWNvcmR8ZGJhc2VfZ2V0X3JlY29yZF93aXRoX25hbWVzfGRiYXNlX251bWZpZWxkc3xkYmFzZV9udW1yZWNvcmRzfGRiYXNlX29wZW58ZGJhc2VfcGFja3xkYmFzZV9yZXBsYWNlX3JlY29yZHxkYnBsdXNfYWRkfGRicGx1c19hcWx8ZGJwbHVzX2NoZGlyfGRicGx1c19jbG9zZXxkYnBsdXNfY3VycnxkYnBsdXNfZXJyY29kZXxkYnBsdXNfZXJybm98ZGJwbHVzX2ZpbmR8ZGJwbHVzX2ZpcnN0fGRicGx1c19mbHVzaHxkYnBsdXNfZnJlZWFsbGxvY2tzfGRicGx1c19mcmVlbG9ja3xkYnBsdXNfZnJlZXJsb2Nrc3xkYnBsdXNfZ2V0bG9ja3xkYnBsdXNfZ2V0dW5pcXVlfGRicGx1c19pbmZvfGRicGx1c19sYXN0fGRicGx1c19sb2NrcmVsfGRicGx1c19uZXh0fGRicGx1c19vcGVufGRicGx1c19wcmV2fGRicGx1c19yY2hwZXJtfGRicGx1c19yY3JlYXRlfGRicGx1c19yY3J0ZXhhY3R8ZGJwbHVzX3JjcnRsaWtlfGRicGx1c19yZXNvbHZlfGRicGx1c19yZXN0b3JlcG9zfGRicGx1c19ya2V5c3xkYnBsdXNfcm9wZW58ZGJwbHVzX3JxdWVyeXxkYnBsdXNfcnJlbmFtZXxkYnBsdXNfcnNlY2luZGV4fGRicGx1c19ydW5saW5rfGRicGx1c19yemFwfGRicGx1c19zYXZlcG9zfGRicGx1c19zZXRpbmRleHxkYnBsdXNfc2V0aW5kZXhieW51bWJlcnxkYnBsdXNfc3FsfGRicGx1c190Y2x8ZGJwbHVzX3RyZW1vdmV8ZGJwbHVzX3VuZG98ZGJwbHVzX3VuZG9wcmVwYXJlfGRicGx1c191bmxvY2tyZWx8ZGJwbHVzX3Vuc2VsZWN0fGRicGx1c191cGRhdGV8ZGJwbHVzX3hsb2NrcmVsfGRicGx1c194dW5sb2NrcmVsfGRieF9jbG9zZXxkYnhfY29tcGFyZXxkYnhfY29ubmVjdHxkYnhfZXJyb3J8ZGJ4X2VzY2FwZV9zdHJpbmd8ZGJ4X2ZldGNoX3Jvd3xkYnhfcXVlcnl8ZGJ4X3NvcnR8ZGNnZXR0ZXh0fGRjbmdldHRleHR8ZGVhZ2dyZWdhdGV8ZGVidWdfYmFja3RyYWNlfGRlYnVnX3ByaW50X2JhY2t0cmFjZXxkZWJ1Z196dmFsX2R1bXB8ZGVjYmlufGRlY2hleHxkZWNvY3R8ZGVmaW5lfGRlZmluZV9zeXNsb2dfdmFyaWFibGVzfGRlZmluZWR8ZGVnMnJhZHxkZWxldGV8ZGdldHRleHR8ZGllfGRpb19jbG9zZXxkaW9fZmNudGx8ZGlvX29wZW58ZGlvX3JlYWR8ZGlvX3NlZWt8ZGlvX3N0YXR8ZGlvX3Rjc2V0YXR0cnxkaW9fdHJ1bmNhdGV8ZGlvX3dyaXRlfGRpcnxkaXJlY3RvcnlpdGVyYXRvcnxkaXJuYW1lfGRpc2tfZnJlZV9zcGFjZXxkaXNrX3RvdGFsX3NwYWNlfGRpc2tmcmVlc3BhY2V8ZGx8ZG5nZXR0ZXh0fGRuc19jaGVja19yZWNvcmR8ZG5zX2dldF9teHxkbnNfZ2V0X3JlY29yZHxkb21faW1wb3J0X3NpbXBsZXhtbHxkb21haW5leGNlcHRpb258ZG9tYXR0cnxkb21hdHRyaWJ1dGVfbmFtZXxkb21hdHRyaWJ1dGVfc2V0X3ZhbHVlfGRvbWF0dHJpYnV0ZV9zcGVjaWZpZWR8ZG9tYXR0cmlidXRlX3ZhbHVlfGRvbWNoYXJhY3RlcmRhdGF8ZG9tY29tbWVudHxkb21kb2N1bWVudHxkb21kb2N1bWVudF9hZGRfcm9vdHxkb21kb2N1bWVudF9jcmVhdGVfYXR0cmlidXRlfGRvbWRvY3VtZW50X2NyZWF0ZV9jZGF0YV9zZWN0aW9ufGRvbWRvY3VtZW50X2NyZWF0ZV9jb21tZW50fGRvbWRvY3VtZW50X2NyZWF0ZV9lbGVtZW50fGRvbWRvY3VtZW50X2NyZWF0ZV9lbGVtZW50X25zfGRvbWRvY3VtZW50X2NyZWF0ZV9lbnRpdHlfcmVmZXJlbmNlfGRvbWRvY3VtZW50X2NyZWF0ZV9wcm9jZXNzaW5nX2luc3RydWN0aW9ufGRvbWRvY3VtZW50X2NyZWF0ZV90ZXh0X25vZGV8ZG9tZG9jdW1lbnRfZG9jdHlwZXxkb21kb2N1bWVudF9kb2N1bWVudF9lbGVtZW50fGRvbWRvY3VtZW50X2R1bXBfZmlsZXxkb21kb2N1bWVudF9kdW1wX21lbXxkb21kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZHxkb21kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnbmFtZXxkb21kb2N1bWVudF9odG1sX2R1bXBfbWVtfGRvbWRvY3VtZW50X3hpbmNsdWRlfGRvbWRvY3VtZW50ZnJhZ21lbnR8ZG9tZG9jdW1lbnR0eXBlfGRvbWRvY3VtZW50dHlwZV9lbnRpdGllc3xkb21kb2N1bWVudHR5cGVfaW50ZXJuYWxfc3Vic2V0fGRvbWRvY3VtZW50dHlwZV9uYW1lfGRvbWRvY3VtZW50dHlwZV9ub3RhdGlvbnN8ZG9tZG9jdW1lbnR0eXBlX3B1YmxpY19pZHxkb21kb2N1bWVudHR5cGVfc3lzdGVtX2lkfGRvbWVsZW1lbnR8ZG9tZWxlbWVudF9nZXRfYXR0cmlidXRlfGRvbWVsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2RlfGRvbWVsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ25hbWV8ZG9tZWxlbWVudF9oYXNfYXR0cmlidXRlfGRvbWVsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZXxkb21lbGVtZW50X3NldF9hdHRyaWJ1dGV8ZG9tZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGV8ZG9tZWxlbWVudF90YWduYW1lfGRvbWVudGl0eXxkb21lbnRpdHlyZWZlcmVuY2V8ZG9tZXhjZXB0aW9ufGRvbWltcGxlbWVudGF0aW9ufGRvbW5hbWVkbm9kZW1hcHxkb21ub2RlfGRvbW5vZGVfYWRkX25hbWVzcGFjZXxkb21ub2RlX2FwcGVuZF9jaGlsZHxkb21ub2RlX2FwcGVuZF9zaWJsaW5nfGRvbW5vZGVfYXR0cmlidXRlc3xkb21ub2RlX2NoaWxkX25vZGVzfGRvbW5vZGVfY2xvbmVfbm9kZXxkb21ub2RlX2R1bXBfbm9kZXxkb21ub2RlX2ZpcnN0X2NoaWxkfGRvbW5vZGVfZ2V0X2NvbnRlbnR8ZG9tbm9kZV9oYXNfYXR0cmlidXRlc3xkb21ub2RlX2hhc19jaGlsZF9ub2Rlc3xkb21ub2RlX2luc2VydF9iZWZvcmV8ZG9tbm9kZV9pc19ibGFua19ub2RlfGRvbW5vZGVfbGFzdF9jaGlsZHxkb21ub2RlX25leHRfc2libGluZ3xkb21ub2RlX25vZGVfbmFtZXxkb21ub2RlX25vZGVfdHlwZXxkb21ub2RlX25vZGVfdmFsdWV8ZG9tbm9kZV9vd25lcl9kb2N1bWVudHxkb21ub2RlX3BhcmVudF9ub2RlfGRvbW5vZGVfcHJlZml4fGRvbW5vZGVfcHJldmlvdXNfc2libGluZ3xkb21ub2RlX3JlbW92ZV9jaGlsZHxkb21ub2RlX3JlcGxhY2VfY2hpbGR8ZG9tbm9kZV9yZXBsYWNlX25vZGV8ZG9tbm9kZV9zZXRfY29udGVudHxkb21ub2RlX3NldF9uYW1lfGRvbW5vZGVfc2V0X25hbWVzcGFjZXxkb21ub2RlX3VubGlua19ub2RlfGRvbW5vZGVsaXN0fGRvbW5vdGF0aW9ufGRvbXByb2Nlc3NpbmdpbnN0cnVjdGlvbnxkb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb25fZGF0YXxkb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb25fdGFyZ2V0fGRvbXRleHR8ZG9teG1sX25ld19kb2N8ZG9teG1sX29wZW5fZmlsZXxkb214bWxfb3Blbl9tZW18ZG9teG1sX3ZlcnNpb258ZG9teG1sX3htbHRyZWV8ZG9teG1sX3hzbHRfc3R5bGVzaGVldHxkb214bWxfeHNsdF9zdHlsZXNoZWV0X2RvY3xkb214bWxfeHNsdF9zdHlsZXNoZWV0X2ZpbGV8ZG9teG1sX3hzbHRfdmVyc2lvbnxkb214cGF0aHxkb214c2x0c3R5bGVzaGVldF9wcm9jZXNzfGRvbXhzbHRzdHlsZXNoZWV0X3Jlc3VsdF9kdW1wX2ZpbGV8ZG9teHNsdHN0eWxlc2hlZXRfcmVzdWx0X2R1bXBfbWVtfGRvdG5ldHxkb3RuZXRfbG9hZHxkb3VibGV2YWx8ZWFjaHxlYXN0ZXJfZGF0ZXxlYXN0ZXJfZGF5c3xlY2hvfGVtcHR5fGVtcHR5aXRlcmF0b3J8ZW5jaGFudF9icm9rZXJfZGVzY3JpYmV8ZW5jaGFudF9icm9rZXJfZGljdF9leGlzdHN8ZW5jaGFudF9icm9rZXJfZnJlZXxlbmNoYW50X2Jyb2tlcl9mcmVlX2RpY3R8ZW5jaGFudF9icm9rZXJfZ2V0X2Vycm9yfGVuY2hhbnRfYnJva2VyX2luaXR8ZW5jaGFudF9icm9rZXJfbGlzdF9kaWN0c3xlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3R8ZW5jaGFudF9icm9rZXJfcmVxdWVzdF9wd2xfZGljdHxlbmNoYW50X2Jyb2tlcl9zZXRfb3JkZXJpbmd8ZW5jaGFudF9kaWN0X2FkZF90b19wZXJzb25hbHxlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb258ZW5jaGFudF9kaWN0X2NoZWNrfGVuY2hhbnRfZGljdF9kZXNjcmliZXxlbmNoYW50X2RpY3RfZ2V0X2Vycm9yfGVuY2hhbnRfZGljdF9pc19pbl9zZXNzaW9ufGVuY2hhbnRfZGljdF9xdWlja19jaGVja3xlbmNoYW50X2RpY3Rfc3RvcmVfcmVwbGFjZW1lbnR8ZW5jaGFudF9kaWN0X3N1Z2dlc3R8ZW5kfGVyZWd8ZXJlZ19yZXBsYWNlfGVyZWdpfGVyZWdpX3JlcGxhY2V8ZXJyb3JfZ2V0X2xhc3R8ZXJyb3JfbG9nfGVycm9yX3JlcG9ydGluZ3xlcnJvcmV4Y2VwdGlvbnxlc2NhcGVzaGVsbGFyZ3xlc2NhcGVzaGVsbGNtZHxldmFsfGV2ZW50X2FkZHxldmVudF9iYXNlX2ZyZWV8ZXZlbnRfYmFzZV9sb29wfGV2ZW50X2Jhc2VfbG9vcGJyZWFrfGV2ZW50X2Jhc2VfbG9vcGV4aXR8ZXZlbnRfYmFzZV9uZXd8ZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0fGV2ZW50X2Jhc2Vfc2V0fGV2ZW50X2J1ZmZlcl9iYXNlX3NldHxldmVudF9idWZmZXJfZGlzYWJsZXxldmVudF9idWZmZXJfZW5hYmxlfGV2ZW50X2J1ZmZlcl9mZF9zZXR8ZXZlbnRfYnVmZmVyX2ZyZWV8ZXZlbnRfYnVmZmVyX25ld3xldmVudF9idWZmZXJfcHJpb3JpdHlfc2V0fGV2ZW50X2J1ZmZlcl9yZWFkfGV2ZW50X2J1ZmZlcl9zZXRfY2FsbGJhY2t8ZXZlbnRfYnVmZmVyX3RpbWVvdXRfc2V0fGV2ZW50X2J1ZmZlcl93YXRlcm1hcmtfc2V0fGV2ZW50X2J1ZmZlcl93cml0ZXxldmVudF9kZWx8ZXZlbnRfZnJlZXxldmVudF9uZXd8ZXZlbnRfc2V0fGV4Y2VwdGlvbnxleGVjfGV4aWZfaW1hZ2V0eXBlfGV4aWZfcmVhZF9kYXRhfGV4aWZfdGFnbmFtZXxleGlmX3RodW1ibmFpbHxleGl0fGV4cHxleHBlY3RfZXhwZWN0bHxleHBlY3RfcG9wZW58ZXhwbG9kZXxleHBtMXxleHBvcnR8ZXhwb3J0fGV4dGVuc2lvbl9sb2FkZWR8ZXh0cmFjdHxlem1sbV9oYXNofGZhbV9jYW5jZWxfbW9uaXRvcnxmYW1fY2xvc2V8ZmFtX21vbml0b3JfY29sbGVjdGlvbnxmYW1fbW9uaXRvcl9kaXJlY3Rvcnl8ZmFtX21vbml0b3JfZmlsZXxmYW1fbmV4dF9ldmVudHxmYW1fb3BlbnxmYW1fcGVuZGluZ3xmYW1fcmVzdW1lX21vbml0b3J8ZmFtX3N1c3BlbmRfbW9uaXRvcnxmYnNxbF9hZmZlY3RlZF9yb3dzfGZic3FsX2F1dG9jb21taXR8ZmJzcWxfYmxvYl9zaXplfGZic3FsX2NoYW5nZV91c2VyfGZic3FsX2Nsb2Jfc2l6ZXxmYnNxbF9jbG9zZXxmYnNxbF9jb21taXR8ZmJzcWxfY29ubmVjdHxmYnNxbF9jcmVhdGVfYmxvYnxmYnNxbF9jcmVhdGVfY2xvYnxmYnNxbF9jcmVhdGVfZGJ8ZmJzcWxfZGF0YV9zZWVrfGZic3FsX2RhdGFiYXNlfGZic3FsX2RhdGFiYXNlX3Bhc3N3b3JkfGZic3FsX2RiX3F1ZXJ5fGZic3FsX2RiX3N0YXR1c3xmYnNxbF9kcm9wX2RifGZic3FsX2Vycm5vfGZic3FsX2Vycm9yfGZic3FsX2ZldGNoX2FycmF5fGZic3FsX2ZldGNoX2Fzc29jfGZic3FsX2ZldGNoX2ZpZWxkfGZic3FsX2ZldGNoX2xlbmd0aHN8ZmJzcWxfZmV0Y2hfb2JqZWN0fGZic3FsX2ZldGNoX3Jvd3xmYnNxbF9maWVsZF9mbGFnc3xmYnNxbF9maWVsZF9sZW58ZmJzcWxfZmllbGRfbmFtZXxmYnNxbF9maWVsZF9zZWVrfGZic3FsX2ZpZWxkX3RhYmxlfGZic3FsX2ZpZWxkX3R5cGV8ZmJzcWxfZnJlZV9yZXN1bHR8ZmJzcWxfZ2V0X2F1dG9zdGFydF9pbmZvfGZic3FsX2hvc3RuYW1lfGZic3FsX2luc2VydF9pZHxmYnNxbF9saXN0X2Ric3xmYnNxbF9saXN0X2ZpZWxkc3xmYnNxbF9saXN0X3RhYmxlc3xmYnNxbF9uZXh0X3Jlc3VsdHxmYnNxbF9udW1fZmllbGRzfGZic3FsX251bV9yb3dzfGZic3FsX3Bhc3N3b3JkfGZic3FsX3Bjb25uZWN0fGZic3FsX3F1ZXJ5fGZic3FsX3JlYWRfYmxvYnxmYnNxbF9yZWFkX2Nsb2J8ZmJzcWxfcmVzdWx0fGZic3FsX3JvbGxiYWNrfGZic3FsX3Jvd3NfZmV0Y2hlZHxmYnNxbF9zZWxlY3RfZGJ8ZmJzcWxfc2V0X2NoYXJhY3RlcnNldHxmYnNxbF9zZXRfbG9iX21vZGV8ZmJzcWxfc2V0X3Bhc3N3b3JkfGZic3FsX3NldF90cmFuc2FjdGlvbnxmYnNxbF9zdGFydF9kYnxmYnNxbF9zdG9wX2RifGZic3FsX3RhYmxlX25hbWV8ZmJzcWxfdGFibGVuYW1lfGZic3FsX3VzZXJuYW1lfGZic3FsX3dhcm5pbmdzfGZjbG9zZXxmZGZfYWRkX2RvY19qYXZhc2NyaXB0fGZkZl9hZGRfdGVtcGxhdGV8ZmRmX2Nsb3NlfGZkZl9jcmVhdGV8ZmRmX2VudW1fdmFsdWVzfGZkZl9lcnJub3xmZGZfZXJyb3J8ZmRmX2dldF9hcHxmZGZfZ2V0X2F0dGFjaG1lbnR8ZmRmX2dldF9lbmNvZGluZ3xmZGZfZ2V0X2ZpbGV8ZmRmX2dldF9mbGFnc3xmZGZfZ2V0X29wdHxmZGZfZ2V0X3N0YXR1c3xmZGZfZ2V0X3ZhbHVlfGZkZl9nZXRfdmVyc2lvbnxmZGZfaGVhZGVyfGZkZl9uZXh0X2ZpZWxkX25hbWV8ZmRmX29wZW58ZmRmX29wZW5fc3RyaW5nfGZkZl9yZW1vdmVfaXRlbXxmZGZfc2F2ZXxmZGZfc2F2ZV9zdHJpbmd8ZmRmX3NldF9hcHxmZGZfc2V0X2VuY29kaW5nfGZkZl9zZXRfZmlsZXxmZGZfc2V0X2ZsYWdzfGZkZl9zZXRfamF2YXNjcmlwdF9hY3Rpb258ZmRmX3NldF9vbl9pbXBvcnRfamF2YXNjcmlwdHxmZGZfc2V0X29wdHxmZGZfc2V0X3N0YXR1c3xmZGZfc2V0X3N1Ym1pdF9mb3JtX2FjdGlvbnxmZGZfc2V0X3RhcmdldF9mcmFtZXxmZGZfc2V0X3ZhbHVlfGZkZl9zZXRfdmVyc2lvbnxmZW9mfGZmbHVzaHxmZ2V0Y3xmZ2V0Y3N2fGZnZXRzfGZnZXRzc3xmaWxlfGZpbGVfZXhpc3RzfGZpbGVfZ2V0X2NvbnRlbnRzfGZpbGVfcHV0X2NvbnRlbnRzfGZpbGVhdGltZXxmaWxlY3RpbWV8ZmlsZWdyb3VwfGZpbGVpbm9kZXxmaWxlbXRpbWV8ZmlsZW93bmVyfGZpbGVwZXJtc3xmaWxlcHJvfGZpbGVwcm9fZmllbGRjb3VudHxmaWxlcHJvX2ZpZWxkbmFtZXxmaWxlcHJvX2ZpZWxkdHlwZXxmaWxlcHJvX2ZpZWxkd2lkdGh8ZmlsZXByb19yZXRyaWV2ZXxmaWxlcHJvX3Jvd2NvdW50fGZpbGVzaXplfGZpbGVzeXN0ZW1pdGVyYXRvcnxmaWxldHlwZXxmaWx0ZXJfaGFzX3ZhcnxmaWx0ZXJfaWR8ZmlsdGVyX2lucHV0fGZpbHRlcl9pbnB1dF9hcnJheXxmaWx0ZXJfbGlzdHxmaWx0ZXJfdmFyfGZpbHRlcl92YXJfYXJyYXl8ZmlsdGVyaXRlcmF0b3J8ZmluZm9fYnVmZmVyfGZpbmZvX2Nsb3NlfGZpbmZvX2ZpbGV8ZmluZm9fb3BlbnxmaW5mb19zZXRfZmxhZ3N8ZmxvYXR2YWx8ZmxvY2t8Zmxvb3J8Zmx1c2h8Zm1vZHxmbm1hdGNofGZvcGVufGZvcndhcmRfc3RhdGljX2NhbGx8Zm9yd2FyZF9zdGF0aWNfY2FsbF9hcnJheXxmcGFzc3RocnV8ZnByaW50ZnxmcHV0Y3N2fGZwdXRzfGZyZWFkfGZyZW5jaHRvamR8ZnJpYmlkaV9sb2cydmlzfGZzY2FuZnxmc2Vla3xmc29ja29wZW58ZnN0YXR8ZnRlbGx8ZnRva3xmdHBfYWxsb2N8ZnRwX2NkdXB8ZnRwX2NoZGlyfGZ0cF9jaG1vZHxmdHBfY2xvc2V8ZnRwX2Nvbm5lY3R8ZnRwX2RlbGV0ZXxmdHBfZXhlY3xmdHBfZmdldHxmdHBfZnB1dHxmdHBfZ2V0fGZ0cF9nZXRfb3B0aW9ufGZ0cF9sb2dpbnxmdHBfbWR0bXxmdHBfbWtkaXJ8ZnRwX25iX2NvbnRpbnVlfGZ0cF9uYl9mZ2V0fGZ0cF9uYl9mcHV0fGZ0cF9uYl9nZXR8ZnRwX25iX3B1dHxmdHBfbmxpc3R8ZnRwX3Bhc3Z8ZnRwX3B1dHxmdHBfcHdkfGZ0cF9xdWl0fGZ0cF9yYXd8ZnRwX3Jhd2xpc3R8ZnRwX3JlbmFtZXxmdHBfcm1kaXJ8ZnRwX3NldF9vcHRpb258ZnRwX3NpdGV8ZnRwX3NpemV8ZnRwX3NzbF9jb25uZWN0fGZ0cF9zeXN0eXBlfGZ0cnVuY2F0ZXxmdW5jX2dldF9hcmd8ZnVuY19nZXRfYXJnc3xmdW5jX251bV9hcmdzfGZ1bmN0aW9uX2V4aXN0c3xmd3JpdGV8Z2NfY29sbGVjdF9jeWNsZXN8Z2NfZGlzYWJsZXxnY19lbmFibGV8Z2NfZW5hYmxlZHxnZF9pbmZvfGdlYXJtYW5jbGllbnR8Z2Vhcm1hbmpvYnxnZWFybWFudGFza3xnZWFybWFud29ya2VyfGdlb2lwX2NvbnRpbmVudF9jb2RlX2J5X25hbWV8Z2VvaXBfY291bnRyeV9jb2RlM19ieV9uYW1lfGdlb2lwX2NvdW50cnlfY29kZV9ieV9uYW1lfGdlb2lwX2NvdW50cnlfbmFtZV9ieV9uYW1lfGdlb2lwX2RhdGFiYXNlX2luZm98Z2VvaXBfZGJfYXZhaWx8Z2VvaXBfZGJfZmlsZW5hbWV8Z2VvaXBfZGJfZ2V0X2FsbF9pbmZvfGdlb2lwX2lkX2J5X25hbWV8Z2VvaXBfaXNwX2J5X25hbWV8Z2VvaXBfb3JnX2J5X25hbWV8Z2VvaXBfcmVjb3JkX2J5X25hbWV8Z2VvaXBfcmVnaW9uX2J5X25hbWV8Z2VvaXBfcmVnaW9uX25hbWVfYnlfY29kZXxnZW9pcF90aW1lX3pvbmVfYnlfY291bnRyeV9hbmRfcmVnaW9ufGdldE1ldGF8Z2V0TmFtZWR8Z2V0VmFsdWV8Z2V0X2Jyb3dzZXJ8Z2V0X2NhbGxlZF9jbGFzc3xnZXRfY2ZnX3ZhcnxnZXRfY2xhc3N8Z2V0X2NsYXNzX21ldGhvZHN8Z2V0X2NsYXNzX3ZhcnN8Z2V0X2N1cnJlbnRfdXNlcnxnZXRfZGVjbGFyZWRfY2xhc3Nlc3xnZXRfZGVjbGFyZWRfaW50ZXJmYWNlc3xnZXRfZGVmaW5lZF9jb25zdGFudHN8Z2V0X2RlZmluZWRfZnVuY3Rpb25zfGdldF9kZWZpbmVkX3ZhcnN8Z2V0X2V4dGVuc2lvbl9mdW5jc3xnZXRfaGVhZGVyc3xnZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZXxnZXRfaW5jbHVkZV9wYXRofGdldF9pbmNsdWRlZF9maWxlc3xnZXRfbG9hZGVkX2V4dGVuc2lvbnN8Z2V0X21hZ2ljX3F1b3Rlc19ncGN8Z2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lfGdldF9tZXRhX3RhZ3N8Z2V0X29iamVjdF92YXJzfGdldF9wYXJlbnRfY2xhc3N8Z2V0X3JlcXVpcmVkX2ZpbGVzfGdldF9yZXNvdXJjZV90eXBlfGdldGFsbGhlYWRlcnN8Z2V0Y29uc3RhbnR8Z2V0Y29uc3RhbnRzfGdldGNvbnN0cnVjdG9yfGdldGN3ZHxnZXRkYXRlfGdldGRlZmF1bHRwcm9wZXJ0aWVzfGdldGRvY2NvbW1lbnR8Z2V0ZW5kbGluZXxnZXRlbnZ8Z2V0ZXh0ZW5zaW9ufGdldGV4dGVuc2lvbm5hbWV8Z2V0ZmlsZW5hbWV8Z2V0aG9zdGJ5YWRkcnxnZXRob3N0YnluYW1lfGdldGhvc3RieW5hbWVsfGdldGhvc3RuYW1lfGdldGltYWdlc2l6ZXxnZXRpbnRlcmZhY2VuYW1lc3xnZXRpbnRlcmZhY2VzfGdldGxhc3Rtb2R8Z2V0bWV0aG9kfGdldG1ldGhvZHN8Z2V0bW9kaWZpZXJzfGdldG14cnJ8Z2V0bXlnaWR8Z2V0bXlpbm9kZXxnZXRteXBpZHxnZXRteXVpZHxnZXRuYW1lfGdldG5hbWVzcGFjZW5hbWV8Z2V0b3B0fGdldHBhcmVudGNsYXNzfGdldHByb3BlcnRpZXN8Z2V0cHJvcGVydHl8Z2V0cHJvdG9ieW5hbWV8Z2V0cHJvdG9ieW51bWJlcnxnZXRyYW5kbWF4fGdldHJ1c2FnZXxnZXRzZXJ2YnluYW1lfGdldHNlcnZieXBvcnR8Z2V0c2hvcnRuYW1lfGdldHN0YXJ0bGluZXxnZXRzdGF0aWNwcm9wZXJ0aWVzfGdldHN0YXRpY3Byb3BlcnR5dmFsdWV8Z2V0dGV4dHxnZXR0aW1lb2ZkYXl8Z2V0dHlwZXxnbG9ifGdsb2JpdGVyYXRvcnxnbWFnaWNrfGdtYWdpY2tkcmF3fGdtYWdpY2twaXhlbHxnbWRhdGV8Z21ta3RpbWV8Z21wX2Fic3xnbXBfYWRkfGdtcF9hbmR8Z21wX2NscmJpdHxnbXBfY21wfGdtcF9jb218Z21wX2RpdnxnbXBfZGl2X3F8Z21wX2Rpdl9xcnxnbXBfZGl2X3J8Z21wX2RpdmV4YWN0fGdtcF9mYWN0fGdtcF9nY2R8Z21wX2djZGV4dHxnbXBfaGFtZGlzdHxnbXBfaW5pdHxnbXBfaW50dmFsfGdtcF9pbnZlcnR8Z21wX2phY29iaXxnbXBfbGVnZW5kcmV8Z21wX21vZHxnbXBfbXVsfGdtcF9uZWd8Z21wX25leHRwcmltZXxnbXBfb3J8Z21wX3BlcmZlY3Rfc3F1YXJlfGdtcF9wb3Bjb3VudHxnbXBfcG93fGdtcF9wb3dtfGdtcF9wcm9iX3ByaW1lfGdtcF9yYW5kb218Z21wX3NjYW4wfGdtcF9zY2FuMXxnbXBfc2V0Yml0fGdtcF9zaWdufGdtcF9zcXJ0fGdtcF9zcXJ0cmVtfGdtcF9zdHJ2YWx8Z21wX3N1YnxnbXBfdGVzdGJpdHxnbXBfeG9yfGdtc3RyZnRpbWV8Z251cGdfYWRkZGVjcnlwdGtleXxnbnVwZ19hZGRlbmNyeXB0a2V5fGdudXBnX2FkZHNpZ25rZXl8Z251cGdfY2xlYXJkZWNyeXB0a2V5c3xnbnVwZ19jbGVhcmVuY3J5cHRrZXlzfGdudXBnX2NsZWFyc2lnbmtleXN8Z251cGdfZGVjcnlwdHxnbnVwZ19kZWNyeXB0dmVyaWZ5fGdudXBnX2VuY3J5cHR8Z251cGdfZW5jcnlwdHNpZ258Z251cGdfZXhwb3J0fGdudXBnX2dldGVycm9yfGdudXBnX2dldHByb3RvY29sfGdudXBnX2ltcG9ydHxnbnVwZ19pbml0fGdudXBnX2tleWluZm98Z251cGdfc2V0YXJtb3J8Z251cGdfc2V0ZXJyb3Jtb2RlfGdudXBnX3NldHNpZ25tb2RlfGdudXBnX3NpZ258Z251cGdfdmVyaWZ5fGdvcGhlcl9wYXJzZWRpcnxncmFwaGVtZV9leHRyYWN0fGdyYXBoZW1lX3N0cmlwb3N8Z3JhcGhlbWVfc3RyaXN0cnxncmFwaGVtZV9zdHJsZW58Z3JhcGhlbWVfc3RycG9zfGdyYXBoZW1lX3N0cnJpcG9zfGdyYXBoZW1lX3N0cnJwb3N8Z3JhcGhlbWVfc3Ryc3RyfGdyYXBoZW1lX3N1YnN0cnxncmVnb3JpYW50b2pkfGd1cG5wX2NvbnRleHRfZ2V0X2hvc3RfaXB8Z3VwbnBfY29udGV4dF9nZXRfcG9ydHxndXBucF9jb250ZXh0X2dldF9zdWJzY3JpcHRpb25fdGltZW91dHxndXBucF9jb250ZXh0X2hvc3RfcGF0aHxndXBucF9jb250ZXh0X25ld3xndXBucF9jb250ZXh0X3NldF9zdWJzY3JpcHRpb25fdGltZW91dHxndXBucF9jb250ZXh0X3RpbWVvdXRfYWRkfGd1cG5wX2NvbnRleHRfdW5ob3N0X3BhdGh8Z3VwbnBfY29udHJvbF9wb2ludF9icm93c2Vfc3RhcnR8Z3VwbnBfY29udHJvbF9wb2ludF9icm93c2Vfc3RvcHxndXBucF9jb250cm9sX3BvaW50X2NhbGxiYWNrX3NldHxndXBucF9jb250cm9sX3BvaW50X25ld3xndXBucF9kZXZpY2VfYWN0aW9uX2NhbGxiYWNrX3NldHxndXBucF9kZXZpY2VfaW5mb19nZXR8Z3VwbnBfZGV2aWNlX2luZm9fZ2V0X3NlcnZpY2V8Z3VwbnBfcm9vdF9kZXZpY2VfZ2V0X2F2YWlsYWJsZXxndXBucF9yb290X2RldmljZV9nZXRfcmVsYXRpdmVfbG9jYXRpb258Z3VwbnBfcm9vdF9kZXZpY2VfbmV3fGd1cG5wX3Jvb3RfZGV2aWNlX3NldF9hdmFpbGFibGV8Z3VwbnBfcm9vdF9kZXZpY2Vfc3RhcnR8Z3VwbnBfcm9vdF9kZXZpY2Vfc3RvcHxndXBucF9zZXJ2aWNlX2FjdGlvbl9nZXR8Z3VwbnBfc2VydmljZV9hY3Rpb25fcmV0dXJufGd1cG5wX3NlcnZpY2VfYWN0aW9uX3JldHVybl9lcnJvcnxndXBucF9zZXJ2aWNlX2FjdGlvbl9zZXR8Z3VwbnBfc2VydmljZV9mcmVlemVfbm90aWZ5fGd1cG5wX3NlcnZpY2VfaW5mb19nZXR8Z3VwbnBfc2VydmljZV9pbmZvX2dldF9pbnRyb3NwZWN0aW9ufGd1cG5wX3NlcnZpY2VfaW50cm9zcGVjdGlvbl9nZXRfc3RhdGVfdmFyaWFibGV8Z3VwbnBfc2VydmljZV9ub3RpZnl8Z3VwbnBfc2VydmljZV9wcm94eV9hY3Rpb25fZ2V0fGd1cG5wX3NlcnZpY2VfcHJveHlfYWN0aW9uX3NldHxndXBucF9zZXJ2aWNlX3Byb3h5X2FkZF9ub3RpZnl8Z3VwbnBfc2VydmljZV9wcm94eV9jYWxsYmFja19zZXR8Z3VwbnBfc2VydmljZV9wcm94eV9nZXRfc3Vic2NyaWJlZHxndXBucF9zZXJ2aWNlX3Byb3h5X3JlbW92ZV9ub3RpZnl8Z3VwbnBfc2VydmljZV9wcm94eV9zZXRfc3Vic2NyaWJlZHxndXBucF9zZXJ2aWNlX3RoYXdfbm90aWZ5fGd6Y2xvc2V8Z3pjb21wcmVzc3xnemRlY29kZXxnemRlZmxhdGV8Z3plbmNvZGV8Z3plb2Z8Z3pmaWxlfGd6Z2V0Y3xnemdldHN8Z3pnZXRzc3xnemluZmxhdGV8Z3pvcGVufGd6cGFzc3RocnV8Z3pwdXRzfGd6cmVhZHxnenJld2luZHxnenNlZWt8Z3p0ZWxsfGd6dW5jb21wcmVzc3xnendyaXRlfGhhbHRfY29tcGlsZXJ8aGFydWFubm90YXRpb258aGFydWFubm90YXRpb25fc2V0Ym9yZGVyc3R5bGV8aGFydWFubm90YXRpb25fc2V0aGlnaGxpZ2h0bW9kZXxoYXJ1YW5ub3RhdGlvbl9zZXRpY29ufGhhcnVhbm5vdGF0aW9uX3NldG9wZW5lZHxoYXJ1ZGVzdGluYXRpb258aGFydWRlc3RpbmF0aW9uX3NldGZpdHxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0YnxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0Ymh8aGFydWRlc3RpbmF0aW9uX3NldGZpdGJ2fGhhcnVkZXN0aW5hdGlvbl9zZXRmaXRofGhhcnVkZXN0aW5hdGlvbl9zZXRmaXRyfGhhcnVkZXN0aW5hdGlvbl9zZXRmaXR2fGhhcnVkZXN0aW5hdGlvbl9zZXR4eXp8aGFydWRvY3xoYXJ1ZG9jX2FkZHBhZ2V8aGFydWRvY19hZGRwYWdlbGFiZWx8aGFydWRvY19jb25zdHJ1Y3R8aGFydWRvY19jcmVhdGVvdXRsaW5lfGhhcnVkb2NfZ2V0Y3VycmVudGVuY29kZXJ8aGFydWRvY19nZXRjdXJyZW50cGFnZXxoYXJ1ZG9jX2dldGVuY29kZXJ8aGFydWRvY19nZXRmb250fGhhcnVkb2NfZ2V0aW5mb2F0dHJ8aGFydWRvY19nZXRwYWdlbGF5b3V0fGhhcnVkb2NfZ2V0cGFnZW1vZGV8aGFydWRvY19nZXRzdHJlYW1zaXplfGhhcnVkb2NfaW5zZXJ0cGFnZXxoYXJ1ZG9jX2xvYWRqcGVnfGhhcnVkb2NfbG9hZHBuZ3xoYXJ1ZG9jX2xvYWRyYXd8aGFydWRvY19sb2FkdHRjfGhhcnVkb2NfbG9hZHR0ZnxoYXJ1ZG9jX2xvYWR0eXBlMXxoYXJ1ZG9jX291dHB1dHxoYXJ1ZG9jX3JlYWRmcm9tc3RyZWFtfGhhcnVkb2NfcmVzZXRlcnJvcnxoYXJ1ZG9jX3Jlc2V0c3RyZWFtfGhhcnVkb2Nfc2F2ZXxoYXJ1ZG9jX3NhdmV0b3N0cmVhbXxoYXJ1ZG9jX3NldGNvbXByZXNzaW9ubW9kZXxoYXJ1ZG9jX3NldGN1cnJlbnRlbmNvZGVyfGhhcnVkb2Nfc2V0ZW5jcnlwdGlvbm1vZGV8aGFydWRvY19zZXRpbmZvYXR0cnxoYXJ1ZG9jX3NldGluZm9kYXRlYXR0cnxoYXJ1ZG9jX3NldG9wZW5hY3Rpb258aGFydWRvY19zZXRwYWdlbGF5b3V0fGhhcnVkb2Nfc2V0cGFnZW1vZGV8aGFydWRvY19zZXRwYWdlc2NvbmZpZ3VyYXRpb258aGFydWRvY19zZXRwYXNzd29yZHxoYXJ1ZG9jX3NldHBlcm1pc3Npb258aGFydWRvY191c2VjbnNlbmNvZGluZ3N8aGFydWRvY191c2VjbnNmb250c3xoYXJ1ZG9jX3VzZWNudGVuY29kaW5nc3xoYXJ1ZG9jX3VzZWNudGZvbnRzfGhhcnVkb2NfdXNlanBlbmNvZGluZ3N8aGFydWRvY191c2VqcGZvbnRzfGhhcnVkb2NfdXNla3JlbmNvZGluZ3N8aGFydWRvY191c2VrcmZvbnRzfGhhcnVlbmNvZGVyfGhhcnVlbmNvZGVyX2dldGJ5dGV0eXBlfGhhcnVlbmNvZGVyX2dldHR5cGV8aGFydWVuY29kZXJfZ2V0dW5pY29kZXxoYXJ1ZW5jb2Rlcl9nZXR3cml0aW5nbW9kZXxoYXJ1ZXhjZXB0aW9ufGhhcnVmb250fGhhcnVmb250X2dldGFzY2VudHxoYXJ1Zm9udF9nZXRjYXBoZWlnaHR8aGFydWZvbnRfZ2V0ZGVzY2VudHxoYXJ1Zm9udF9nZXRlbmNvZGluZ25hbWV8aGFydWZvbnRfZ2V0Zm9udG5hbWV8aGFydWZvbnRfZ2V0dGV4dHdpZHRofGhhcnVmb250X2dldHVuaWNvZGV3aWR0aHxoYXJ1Zm9udF9nZXR4aGVpZ2h0fGhhcnVmb250X21lYXN1cmV0ZXh0fGhhcnVpbWFnZXxoYXJ1aW1hZ2VfZ2V0Yml0c3BlcmNvbXBvbmVudHxoYXJ1aW1hZ2VfZ2V0Y29sb3JzcGFjZXxoYXJ1aW1hZ2VfZ2V0aGVpZ2h0fGhhcnVpbWFnZV9nZXRzaXplfGhhcnVpbWFnZV9nZXR3aWR0aHxoYXJ1aW1hZ2Vfc2V0Y29sb3JtYXNrfGhhcnVpbWFnZV9zZXRtYXNraW1hZ2V8aGFydW91dGxpbmV8aGFydW91dGxpbmVfc2V0ZGVzdGluYXRpb258aGFydW91dGxpbmVfc2V0b3BlbmVkfGhhcnVwYWdlfGhhcnVwYWdlX2FyY3xoYXJ1cGFnZV9iZWdpbnRleHR8aGFydXBhZ2VfY2lyY2xlfGhhcnVwYWdlX2Nsb3NlcGF0aHxoYXJ1cGFnZV9jb25jYXR8aGFydXBhZ2VfY3JlYXRlZGVzdGluYXRpb258aGFydXBhZ2VfY3JlYXRlbGlua2Fubm90YXRpb258aGFydXBhZ2VfY3JlYXRldGV4dGFubm90YXRpb258aGFydXBhZ2VfY3JlYXRldXJsYW5ub3RhdGlvbnxoYXJ1cGFnZV9jdXJ2ZXRvfGhhcnVwYWdlX2N1cnZldG8yfGhhcnVwYWdlX2N1cnZldG8zfGhhcnVwYWdlX2RyYXdpbWFnZXxoYXJ1cGFnZV9lbGxpcHNlfGhhcnVwYWdlX2VuZHBhdGh8aGFydXBhZ2VfZW5kdGV4dHxoYXJ1cGFnZV9lb2ZpbGx8aGFydXBhZ2VfZW9maWxsc3Ryb2tlfGhhcnVwYWdlX2ZpbGx8aGFydXBhZ2VfZmlsbHN0cm9rZXxoYXJ1cGFnZV9nZXRjaGFyc3BhY2V8aGFydXBhZ2VfZ2V0Y215a2ZpbGx8aGFydXBhZ2VfZ2V0Y215a3N0cm9rZXxoYXJ1cGFnZV9nZXRjdXJyZW50Zm9udHxoYXJ1cGFnZV9nZXRjdXJyZW50Zm9udHNpemV8aGFydXBhZ2VfZ2V0Y3VycmVudHBvc3xoYXJ1cGFnZV9nZXRjdXJyZW50dGV4dHBvc3xoYXJ1cGFnZV9nZXRkYXNofGhhcnVwYWdlX2dldGZpbGxpbmdjb2xvcnNwYWNlfGhhcnVwYWdlX2dldGZsYXRuZXNzfGhhcnVwYWdlX2dldGdtb2RlfGhhcnVwYWdlX2dldGdyYXlmaWxsfGhhcnVwYWdlX2dldGdyYXlzdHJva2V8aGFydXBhZ2VfZ2V0aGVpZ2h0fGhhcnVwYWdlX2dldGhvcml6b250YWxzY2FsaW5nfGhhcnVwYWdlX2dldGxpbmVjYXB8aGFydXBhZ2VfZ2V0bGluZWpvaW58aGFydXBhZ2VfZ2V0bGluZXdpZHRofGhhcnVwYWdlX2dldG1pdGVybGltaXR8aGFydXBhZ2VfZ2V0cmdiZmlsbHxoYXJ1cGFnZV9nZXRyZ2JzdHJva2V8aGFydXBhZ2VfZ2V0c3Ryb2tpbmdjb2xvcnNwYWNlfGhhcnVwYWdlX2dldHRleHRsZWFkaW5nfGhhcnVwYWdlX2dldHRleHRtYXRyaXh8aGFydXBhZ2VfZ2V0dGV4dHJlbmRlcmluZ21vZGV8aGFydXBhZ2VfZ2V0dGV4dHJpc2V8aGFydXBhZ2VfZ2V0dGV4dHdpZHRofGhhcnVwYWdlX2dldHRyYW5zbWF0cml4fGhhcnVwYWdlX2dldHdpZHRofGhhcnVwYWdlX2dldHdvcmRzcGFjZXxoYXJ1cGFnZV9saW5ldG98aGFydXBhZ2VfbWVhc3VyZXRleHR8aGFydXBhZ2VfbW92ZXRleHRwb3N8aGFydXBhZ2VfbW92ZXRvfGhhcnVwYWdlX21vdmV0b25leHRsaW5lfGhhcnVwYWdlX3JlY3RhbmdsZXxoYXJ1cGFnZV9zZXRjaGFyc3BhY2V8aGFydXBhZ2Vfc2V0Y215a2ZpbGx8aGFydXBhZ2Vfc2V0Y215a3N0cm9rZXxoYXJ1cGFnZV9zZXRkYXNofGhhcnVwYWdlX3NldGZsYXRuZXNzfGhhcnVwYWdlX3NldGZvbnRhbmRzaXplfGhhcnVwYWdlX3NldGdyYXlmaWxsfGhhcnVwYWdlX3NldGdyYXlzdHJva2V8aGFydXBhZ2Vfc2V0aGVpZ2h0fGhhcnVwYWdlX3NldGhvcml6b250YWxzY2FsaW5nfGhhcnVwYWdlX3NldGxpbmVjYXB8aGFydXBhZ2Vfc2V0bGluZWpvaW58aGFydXBhZ2Vfc2V0bGluZXdpZHRofGhhcnVwYWdlX3NldG1pdGVybGltaXR8aGFydXBhZ2Vfc2V0cmdiZmlsbHxoYXJ1cGFnZV9zZXRyZ2JzdHJva2V8aGFydXBhZ2Vfc2V0cm90YXRlfGhhcnVwYWdlX3NldHNpemV8aGFydXBhZ2Vfc2V0c2xpZGVzaG93fGhhcnVwYWdlX3NldHRleHRsZWFkaW5nfGhhcnVwYWdlX3NldHRleHRtYXRyaXh8aGFydXBhZ2Vfc2V0dGV4dHJlbmRlcmluZ21vZGV8aGFydXBhZ2Vfc2V0dGV4dHJpc2V8aGFydXBhZ2Vfc2V0d2lkdGh8aGFydXBhZ2Vfc2V0d29yZHNwYWNlfGhhcnVwYWdlX3Nob3d0ZXh0fGhhcnVwYWdlX3Nob3d0ZXh0bmV4dGxpbmV8aGFydXBhZ2Vfc3Ryb2tlfGhhcnVwYWdlX3RleHRvdXR8aGFydXBhZ2VfdGV4dHJlY3R8aGFzY29uc3RhbnR8aGFzaHxoYXNoX2FsZ29zfGhhc2hfY29weXxoYXNoX2ZpbGV8aGFzaF9maW5hbHxoYXNoX2htYWN8aGFzaF9obWFjX2ZpbGV8aGFzaF9pbml0fGhhc2hfdXBkYXRlfGhhc2hfdXBkYXRlX2ZpbGV8aGFzaF91cGRhdGVfc3RyZWFtfGhhc21ldGhvZHxoYXNwcm9wZXJ0eXxoZWFkZXJ8aGVhZGVyX3JlZ2lzdGVyX2NhbGxiYWNrfGhlYWRlcl9yZW1vdmV8aGVhZGVyc19saXN0fGhlYWRlcnNfc2VudHxoZWJyZXZ8aGVicmV2Y3xoZXgyYmlufGhleGRlY3xoaWdobGlnaHRfZmlsZXxoaWdobGlnaHRfc3RyaW5nfGh0bWxfZW50aXR5X2RlY29kZXxodG1sZW50aXRpZXN8aHRtbHNwZWNpYWxjaGFyc3xodG1sc3BlY2lhbGNoYXJzX2RlY29kZXxodHRwX2J1aWxkX2Nvb2tpZXxodHRwX2J1aWxkX3F1ZXJ5fGh0dHBfYnVpbGRfc3RyfGh0dHBfYnVpbGRfdXJsfGh0dHBfY2FjaGVfZXRhZ3xodHRwX2NhY2hlX2xhc3RfbW9kaWZpZWR8aHR0cF9jaHVua2VkX2RlY29kZXxodHRwX2RhdGV8aHR0cF9kZWZsYXRlfGh0dHBfZ2V0fGh0dHBfZ2V0X3JlcXVlc3RfYm9keXxodHRwX2dldF9yZXF1ZXN0X2JvZHlfc3RyZWFtfGh0dHBfZ2V0X3JlcXVlc3RfaGVhZGVyc3xodHRwX2hlYWR8aHR0cF9pbmZsYXRlfGh0dHBfbWF0Y2hfZXRhZ3xodHRwX21hdGNoX21vZGlmaWVkfGh0dHBfbWF0Y2hfcmVxdWVzdF9oZWFkZXJ8aHR0cF9uZWdvdGlhdGVfY2hhcnNldHxodHRwX25lZ290aWF0ZV9jb250ZW50X3R5cGV8aHR0cF9uZWdvdGlhdGVfbGFuZ3VhZ2V8aHR0cF9wYXJzZV9jb29raWV8aHR0cF9wYXJzZV9oZWFkZXJzfGh0dHBfcGFyc2VfbWVzc2FnZXxodHRwX3BhcnNlX3BhcmFtc3xodHRwX3BlcnNpc3RlbnRfaGFuZGxlc19jbGVhbnxodHRwX3BlcnNpc3RlbnRfaGFuZGxlc19jb3VudHxodHRwX3BlcnNpc3RlbnRfaGFuZGxlc19pZGVudHxodHRwX3Bvc3RfZGF0YXxodHRwX3Bvc3RfZmllbGRzfGh0dHBfcHV0X2RhdGF8aHR0cF9wdXRfZmlsZXxodHRwX3B1dF9zdHJlYW18aHR0cF9yZWRpcmVjdHxodHRwX3JlcXVlc3R8aHR0cF9yZXF1ZXN0X2JvZHlfZW5jb2RlfGh0dHBfcmVxdWVzdF9tZXRob2RfZXhpc3RzfGh0dHBfcmVxdWVzdF9tZXRob2RfbmFtZXxodHRwX3JlcXVlc3RfbWV0aG9kX3JlZ2lzdGVyfGh0dHBfcmVxdWVzdF9tZXRob2RfdW5yZWdpc3RlcnxodHRwX3Jlc3BvbnNlX2NvZGV8aHR0cF9zZW5kX2NvbnRlbnRfZGlzcG9zaXRpb258aHR0cF9zZW5kX2NvbnRlbnRfdHlwZXxodHRwX3NlbmRfZGF0YXxodHRwX3NlbmRfZmlsZXxodHRwX3NlbmRfbGFzdF9tb2RpZmllZHxodHRwX3NlbmRfc3RhdHVzfGh0dHBfc2VuZF9zdHJlYW18aHR0cF9zdXBwb3J0fGh0dHBfdGhyb3R0bGV8aHR0cGRlZmxhdGVzdHJlYW18aHR0cGRlZmxhdGVzdHJlYW1fY29uc3RydWN0fGh0dHBkZWZsYXRlc3RyZWFtX2ZhY3Rvcnl8aHR0cGRlZmxhdGVzdHJlYW1fZmluaXNofGh0dHBkZWZsYXRlc3RyZWFtX2ZsdXNofGh0dHBkZWZsYXRlc3RyZWFtX3VwZGF0ZXxodHRwaW5mbGF0ZXN0cmVhbXxodHRwaW5mbGF0ZXN0cmVhbV9jb25zdHJ1Y3R8aHR0cGluZmxhdGVzdHJlYW1fZmFjdG9yeXxodHRwaW5mbGF0ZXN0cmVhbV9maW5pc2h8aHR0cGluZmxhdGVzdHJlYW1fZmx1c2h8aHR0cGluZmxhdGVzdHJlYW1fdXBkYXRlfGh0dHBtZXNzYWdlfGh0dHBtZXNzYWdlX2FkZGhlYWRlcnN8aHR0cG1lc3NhZ2VfY29uc3RydWN0fGh0dHBtZXNzYWdlX2RldGFjaHxodHRwbWVzc2FnZV9mYWN0b3J5fGh0dHBtZXNzYWdlX2Zyb21lbnZ8aHR0cG1lc3NhZ2VfZnJvbXN0cmluZ3xodHRwbWVzc2FnZV9nZXRib2R5fGh0dHBtZXNzYWdlX2dldGhlYWRlcnxodHRwbWVzc2FnZV9nZXRoZWFkZXJzfGh0dHBtZXNzYWdlX2dldGh0dHB2ZXJzaW9ufGh0dHBtZXNzYWdlX2dldHBhcmVudG1lc3NhZ2V8aHR0cG1lc3NhZ2VfZ2V0cmVxdWVzdG1ldGhvZHxodHRwbWVzc2FnZV9nZXRyZXF1ZXN0dXJsfGh0dHBtZXNzYWdlX2dldHJlc3BvbnNlY29kZXxodHRwbWVzc2FnZV9nZXRyZXNwb25zZXN0YXR1c3xodHRwbWVzc2FnZV9nZXR0eXBlfGh0dHBtZXNzYWdlX2d1ZXNzY29udGVudHR5cGV8aHR0cG1lc3NhZ2VfcHJlcGVuZHxodHRwbWVzc2FnZV9yZXZlcnNlfGh0dHBtZXNzYWdlX3NlbmR8aHR0cG1lc3NhZ2Vfc2V0Ym9keXxodHRwbWVzc2FnZV9zZXRoZWFkZXJzfGh0dHBtZXNzYWdlX3NldGh0dHB2ZXJzaW9ufGh0dHBtZXNzYWdlX3NldHJlcXVlc3RtZXRob2R8aHR0cG1lc3NhZ2Vfc2V0cmVxdWVzdHVybHxodHRwbWVzc2FnZV9zZXRyZXNwb25zZWNvZGV8aHR0cG1lc3NhZ2Vfc2V0cmVzcG9uc2VzdGF0dXN8aHR0cG1lc3NhZ2Vfc2V0dHlwZXxodHRwbWVzc2FnZV90b21lc3NhZ2V0eXBlb2JqZWN0fGh0dHBtZXNzYWdlX3Rvc3RyaW5nfGh0dHBxdWVyeXN0cmluZ3xodHRwcXVlcnlzdHJpbmdfY29uc3RydWN0fGh0dHBxdWVyeXN0cmluZ19nZXR8aHR0cHF1ZXJ5c3RyaW5nX21vZHxodHRwcXVlcnlzdHJpbmdfc2V0fGh0dHBxdWVyeXN0cmluZ19zaW5nbGV0b258aHR0cHF1ZXJ5c3RyaW5nX3RvYXJyYXl8aHR0cHF1ZXJ5c3RyaW5nX3Rvc3RyaW5nfGh0dHBxdWVyeXN0cmluZ194bGF0ZXxodHRwcmVxdWVzdHxodHRwcmVxdWVzdF9hZGRjb29raWVzfGh0dHByZXF1ZXN0X2FkZGhlYWRlcnN8aHR0cHJlcXVlc3RfYWRkcG9zdGZpZWxkc3xodHRwcmVxdWVzdF9hZGRwb3N0ZmlsZXxodHRwcmVxdWVzdF9hZGRwdXRkYXRhfGh0dHByZXF1ZXN0X2FkZHF1ZXJ5ZGF0YXxodHRwcmVxdWVzdF9hZGRyYXdwb3N0ZGF0YXxodHRwcmVxdWVzdF9hZGRzc2xvcHRpb25zfGh0dHByZXF1ZXN0X2NsZWFyaGlzdG9yeXxodHRwcmVxdWVzdF9jb25zdHJ1Y3R8aHR0cHJlcXVlc3RfZW5hYmxlY29va2llc3xodHRwcmVxdWVzdF9nZXRjb250ZW50dHlwZXxodHRwcmVxdWVzdF9nZXRjb29raWVzfGh0dHByZXF1ZXN0X2dldGhlYWRlcnN8aHR0cHJlcXVlc3RfZ2V0aGlzdG9yeXxodHRwcmVxdWVzdF9nZXRtZXRob2R8aHR0cHJlcXVlc3RfZ2V0b3B0aW9uc3xodHRwcmVxdWVzdF9nZXRwb3N0ZmllbGRzfGh0dHByZXF1ZXN0X2dldHBvc3RmaWxlc3xodHRwcmVxdWVzdF9nZXRwdXRkYXRhfGh0dHByZXF1ZXN0X2dldHB1dGZpbGV8aHR0cHJlcXVlc3RfZ2V0cXVlcnlkYXRhfGh0dHByZXF1ZXN0X2dldHJhd3Bvc3RkYXRhfGh0dHByZXF1ZXN0X2dldHJhd3JlcXVlc3RtZXNzYWdlfGh0dHByZXF1ZXN0X2dldHJhd3Jlc3BvbnNlbWVzc2FnZXxodHRwcmVxdWVzdF9nZXRyZXF1ZXN0bWVzc2FnZXxodHRwcmVxdWVzdF9nZXRyZXNwb25zZWJvZHl8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2Vjb2RlfGh0dHByZXF1ZXN0X2dldHJlc3BvbnNlY29va2llc3xodHRwcmVxdWVzdF9nZXRyZXNwb25zZWRhdGF8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2VoZWFkZXJ8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2VpbmZvfGh0dHByZXF1ZXN0X2dldHJlc3BvbnNlbWVzc2FnZXxodHRwcmVxdWVzdF9nZXRyZXNwb25zZXN0YXR1c3xodHRwcmVxdWVzdF9nZXRzc2xvcHRpb25zfGh0dHByZXF1ZXN0X2dldHVybHxodHRwcmVxdWVzdF9yZXNldGNvb2tpZXN8aHR0cHJlcXVlc3Rfc2VuZHxodHRwcmVxdWVzdF9zZXRjb250ZW50dHlwZXxodHRwcmVxdWVzdF9zZXRjb29raWVzfGh0dHByZXF1ZXN0X3NldGhlYWRlcnN8aHR0cHJlcXVlc3Rfc2V0bWV0aG9kfGh0dHByZXF1ZXN0X3NldG9wdGlvbnN8aHR0cHJlcXVlc3Rfc2V0cG9zdGZpZWxkc3xodHRwcmVxdWVzdF9zZXRwb3N0ZmlsZXN8aHR0cHJlcXVlc3Rfc2V0cHV0ZGF0YXxodHRwcmVxdWVzdF9zZXRwdXRmaWxlfGh0dHByZXF1ZXN0X3NldHF1ZXJ5ZGF0YXxodHRwcmVxdWVzdF9zZXRyYXdwb3N0ZGF0YXxodHRwcmVxdWVzdF9zZXRzc2xvcHRpb25zfGh0dHByZXF1ZXN0X3NldHVybHxodHRwcmVxdWVzdHBvb2x8aHR0cHJlcXVlc3Rwb29sX2F0dGFjaHxodHRwcmVxdWVzdHBvb2xfY29uc3RydWN0fGh0dHByZXF1ZXN0cG9vbF9kZXN0cnVjdHxodHRwcmVxdWVzdHBvb2xfZGV0YWNofGh0dHByZXF1ZXN0cG9vbF9nZXRhdHRhY2hlZHJlcXVlc3RzfGh0dHByZXF1ZXN0cG9vbF9nZXRmaW5pc2hlZHJlcXVlc3RzfGh0dHByZXF1ZXN0cG9vbF9yZXNldHxodHRwcmVxdWVzdHBvb2xfc2VuZHxodHRwcmVxdWVzdHBvb2xfc29ja2V0cGVyZm9ybXxodHRwcmVxdWVzdHBvb2xfc29ja2V0c2VsZWN0fGh0dHByZXNwb25zZXxodHRwcmVzcG9uc2VfY2FwdHVyZXxodHRwcmVzcG9uc2VfZ2V0YnVmZmVyc2l6ZXxodHRwcmVzcG9uc2VfZ2V0Y2FjaGV8aHR0cHJlc3BvbnNlX2dldGNhY2hlY29udHJvbHxodHRwcmVzcG9uc2VfZ2V0Y29udGVudGRpc3Bvc2l0aW9ufGh0dHByZXNwb25zZV9nZXRjb250ZW50dHlwZXxodHRwcmVzcG9uc2VfZ2V0ZGF0YXxodHRwcmVzcG9uc2VfZ2V0ZXRhZ3xodHRwcmVzcG9uc2VfZ2V0ZmlsZXxodHRwcmVzcG9uc2VfZ2V0Z3ppcHxodHRwcmVzcG9uc2VfZ2V0aGVhZGVyfGh0dHByZXNwb25zZV9nZXRsYXN0bW9kaWZpZWR8aHR0cHJlc3BvbnNlX2dldHJlcXVlc3Rib2R5fGh0dHByZXNwb25zZV9nZXRyZXF1ZXN0Ym9keXN0cmVhbXxodHRwcmVzcG9uc2VfZ2V0cmVxdWVzdGhlYWRlcnN8aHR0cHJlc3BvbnNlX2dldHN0cmVhbXxodHRwcmVzcG9uc2VfZ2V0dGhyb3R0bGVkZWxheXxodHRwcmVzcG9uc2VfZ3Vlc3Njb250ZW50dHlwZXxodHRwcmVzcG9uc2VfcmVkaXJlY3R8aHR0cHJlc3BvbnNlX3NlbmR8aHR0cHJlc3BvbnNlX3NldGJ1ZmZlcnNpemV8aHR0cHJlc3BvbnNlX3NldGNhY2hlfGh0dHByZXNwb25zZV9zZXRjYWNoZWNvbnRyb2x8aHR0cHJlc3BvbnNlX3NldGNvbnRlbnRkaXNwb3NpdGlvbnxodHRwcmVzcG9uc2Vfc2V0Y29udGVudHR5cGV8aHR0cHJlc3BvbnNlX3NldGRhdGF8aHR0cHJlc3BvbnNlX3NldGV0YWd8aHR0cHJlc3BvbnNlX3NldGZpbGV8aHR0cHJlc3BvbnNlX3NldGd6aXB8aHR0cHJlc3BvbnNlX3NldGhlYWRlcnxodHRwcmVzcG9uc2Vfc2V0bGFzdG1vZGlmaWVkfGh0dHByZXNwb25zZV9zZXRzdHJlYW18aHR0cHJlc3BvbnNlX3NldHRocm90dGxlZGVsYXl8aHR0cHJlc3BvbnNlX3N0YXR1c3xod19hcnJheTJvYmpyZWN8aHdfY2hhbmdlb2JqZWN0fGh3X2NoaWxkcmVufGh3X2NoaWxkcmVub2JqfGh3X2Nsb3NlfGh3X2Nvbm5lY3R8aHdfY29ubmVjdGlvbl9pbmZvfGh3X2NwfGh3X2RlbGV0ZW9iamVjdHxod19kb2NieWFuY2hvcnxod19kb2NieWFuY2hvcm9ianxod19kb2N1bWVudF9hdHRyaWJ1dGVzfGh3X2RvY3VtZW50X2JvZHl0YWd8aHdfZG9jdW1lbnRfY29udGVudHxod19kb2N1bWVudF9zZXRjb250ZW50fGh3X2RvY3VtZW50X3NpemV8aHdfZHVtbXl8aHdfZWRpdHRleHR8aHdfZXJyb3J8aHdfZXJyb3Jtc2d8aHdfZnJlZV9kb2N1bWVudHxod19nZXRhbmNob3JzfGh3X2dldGFuY2hvcnNvYmp8aHdfZ2V0YW5kbG9ja3xod19nZXRjaGlsZGNvbGx8aHdfZ2V0Y2hpbGRjb2xsb2JqfGh3X2dldGNoaWxkZG9jY29sbHxod19nZXRjaGlsZGRvY2NvbGxvYmp8aHdfZ2V0b2JqZWN0fGh3X2dldG9iamVjdGJ5cXVlcnl8aHdfZ2V0b2JqZWN0YnlxdWVyeWNvbGx8aHdfZ2V0b2JqZWN0YnlxdWVyeWNvbGxvYmp8aHdfZ2V0b2JqZWN0YnlxdWVyeW9ianxod19nZXRwYXJlbnRzfGh3X2dldHBhcmVudHNvYmp8aHdfZ2V0cmVsbGlua3xod19nZXRyZW1vdGV8aHdfZ2V0cmVtb3RlY2hpbGRyZW58aHdfZ2V0c3JjYnlkZXN0b2JqfGh3X2dldHRleHR8aHdfZ2V0dXNlcm5hbWV8aHdfaWRlbnRpZnl8aHdfaW5jb2xsZWN0aW9uc3xod19pbmZvfGh3X2luc2NvbGx8aHdfaW5zZG9jfGh3X2luc2VydGFuY2hvcnN8aHdfaW5zZXJ0ZG9jdW1lbnR8aHdfaW5zZXJ0b2JqZWN0fGh3X21hcGlkfGh3X21vZGlmeW9iamVjdHxod19tdnxod19uZXdfZG9jdW1lbnR8aHdfb2JqcmVjMmFycmF5fGh3X291dHB1dF9kb2N1bWVudHxod19wY29ubmVjdHxod19waXBlZG9jdW1lbnR8aHdfcm9vdHxod19zZXRsaW5rcm9vdHxod19zdGF0fGh3X3VubG9ja3xod193aG98aHdhcGlfYXR0cmlidXRlfGh3YXBpX2F0dHJpYnV0ZV9rZXl8aHdhcGlfYXR0cmlidXRlX2xhbmdkZXB2YWx1ZXxod2FwaV9hdHRyaWJ1dGVfdmFsdWV8aHdhcGlfYXR0cmlidXRlX3ZhbHVlc3xod2FwaV9jaGVja2lufGh3YXBpX2NoZWNrb3V0fGh3YXBpX2NoaWxkcmVufGh3YXBpX2NvbnRlbnR8aHdhcGlfY29udGVudF9taW1ldHlwZXxod2FwaV9jb250ZW50X3JlYWR8aHdhcGlfY29weXxod2FwaV9kYnN0YXR8aHdhcGlfZGNzdGF0fGh3YXBpX2RzdGFuY2hvcnN8aHdhcGlfZHN0b2ZzcmNhbmNob3J8aHdhcGlfZXJyb3JfY291bnR8aHdhcGlfZXJyb3JfcmVhc29ufGh3YXBpX2ZpbmR8aHdhcGlfZnRzdGF0fGh3YXBpX2hnY3NwfGh3YXBpX2h3c3RhdHxod2FwaV9pZGVudGlmeXxod2FwaV9pbmZvfGh3YXBpX2luc2VydHxod2FwaV9pbnNlcnRhbmNob3J8aHdhcGlfaW5zZXJ0Y29sbGVjdGlvbnxod2FwaV9pbnNlcnRkb2N1bWVudHxod2FwaV9saW5rfGh3YXBpX2xvY2t8aHdhcGlfbW92ZXxod2FwaV9uZXdfY29udGVudHxod2FwaV9vYmplY3R8aHdhcGlfb2JqZWN0X2Fzc2lnbnxod2FwaV9vYmplY3RfYXR0cmVkaXRhYmxlfGh3YXBpX29iamVjdF9jb3VudHxod2FwaV9vYmplY3RfaW5zZXJ0fGh3YXBpX29iamVjdF9uZXd8aHdhcGlfb2JqZWN0X3JlbW92ZXxod2FwaV9vYmplY3RfdGl0bGV8aHdhcGlfb2JqZWN0X3ZhbHVlfGh3YXBpX29iamVjdGJ5YW5jaG9yfGh3YXBpX3BhcmVudHN8aHdhcGlfcmVhc29uX2Rlc2NyaXB0aW9ufGh3YXBpX3JlYXNvbl90eXBlfGh3YXBpX3JlbW92ZXxod2FwaV9yZXBsYWNlfGh3YXBpX3NldGNvbW1pdHRlZHZlcnNpb258aHdhcGlfc3JjYW5jaG9yc3xod2FwaV9zcmNzb2Zkc3R8aHdhcGlfdW5sb2NrfGh3YXBpX3VzZXJ8aHdhcGlfdXNlcmxpc3R8aHlwb3R8aWJhc2VfYWRkX3VzZXJ8aWJhc2VfYWZmZWN0ZWRfcm93c3xpYmFzZV9iYWNrdXB8aWJhc2VfYmxvYl9hZGR8aWJhc2VfYmxvYl9jYW5jZWx8aWJhc2VfYmxvYl9jbG9zZXxpYmFzZV9ibG9iX2NyZWF0ZXxpYmFzZV9ibG9iX2VjaG98aWJhc2VfYmxvYl9nZXR8aWJhc2VfYmxvYl9pbXBvcnR8aWJhc2VfYmxvYl9pbmZvfGliYXNlX2Jsb2Jfb3BlbnxpYmFzZV9jbG9zZXxpYmFzZV9jb21taXR8aWJhc2VfY29tbWl0X3JldHxpYmFzZV9jb25uZWN0fGliYXNlX2RiX2luZm98aWJhc2VfZGVsZXRlX3VzZXJ8aWJhc2VfZHJvcF9kYnxpYmFzZV9lcnJjb2RlfGliYXNlX2Vycm1zZ3xpYmFzZV9leGVjdXRlfGliYXNlX2ZldGNoX2Fzc29jfGliYXNlX2ZldGNoX29iamVjdHxpYmFzZV9mZXRjaF9yb3d8aWJhc2VfZmllbGRfaW5mb3xpYmFzZV9mcmVlX2V2ZW50X2hhbmRsZXJ8aWJhc2VfZnJlZV9xdWVyeXxpYmFzZV9mcmVlX3Jlc3VsdHxpYmFzZV9nZW5faWR8aWJhc2VfbWFpbnRhaW5fZGJ8aWJhc2VfbW9kaWZ5X3VzZXJ8aWJhc2VfbmFtZV9yZXN1bHR8aWJhc2VfbnVtX2ZpZWxkc3xpYmFzZV9udW1fcGFyYW1zfGliYXNlX3BhcmFtX2luZm98aWJhc2VfcGNvbm5lY3R8aWJhc2VfcHJlcGFyZXxpYmFzZV9xdWVyeXxpYmFzZV9yZXN0b3JlfGliYXNlX3JvbGxiYWNrfGliYXNlX3JvbGxiYWNrX3JldHxpYmFzZV9zZXJ2ZXJfaW5mb3xpYmFzZV9zZXJ2aWNlX2F0dGFjaHxpYmFzZV9zZXJ2aWNlX2RldGFjaHxpYmFzZV9zZXRfZXZlbnRfaGFuZGxlcnxpYmFzZV90aW1lZm10fGliYXNlX3RyYW5zfGliYXNlX3dhaXRfZXZlbnR8aWNvbnZ8aWNvbnZfZ2V0X2VuY29kaW5nfGljb252X21pbWVfZGVjb2RlfGljb252X21pbWVfZGVjb2RlX2hlYWRlcnN8aWNvbnZfbWltZV9lbmNvZGV8aWNvbnZfc2V0X2VuY29kaW5nfGljb252X3N0cmxlbnxpY29udl9zdHJwb3N8aWNvbnZfc3RycnBvc3xpY29udl9zdWJzdHJ8aWQzX2dldF9mcmFtZV9sb25nX25hbWV8aWQzX2dldF9mcmFtZV9zaG9ydF9uYW1lfGlkM19nZXRfZ2VucmVfaWR8aWQzX2dldF9nZW5yZV9saXN0fGlkM19nZXRfZ2VucmVfbmFtZXxpZDNfZ2V0X3RhZ3xpZDNfZ2V0X3ZlcnNpb258aWQzX3JlbW92ZV90YWd8aWQzX3NldF90YWd8aWQzdjJhdHRhY2hlZHBpY3R1cmVmcmFtZXxpZDN2MmZyYW1lfGlkM3YydGFnfGlkYXRlfGlkbl90b19hc2NpaXxpZG5fdG9fdW5pY29kZXxpZG5fdG9fdXRmOHxpZnhfYWZmZWN0ZWRfcm93c3xpZnhfYmxvYmluZmlsZV9tb2RlfGlmeF9ieXRlYXN2YXJjaGFyfGlmeF9jbG9zZXxpZnhfY29ubmVjdHxpZnhfY29weV9ibG9ifGlmeF9jcmVhdGVfYmxvYnxpZnhfY3JlYXRlX2NoYXJ8aWZ4X2RvfGlmeF9lcnJvcnxpZnhfZXJyb3Jtc2d8aWZ4X2ZldGNoX3Jvd3xpZnhfZmllbGRwcm9wZXJ0aWVzfGlmeF9maWVsZHR5cGVzfGlmeF9mcmVlX2Jsb2J8aWZ4X2ZyZWVfY2hhcnxpZnhfZnJlZV9yZXN1bHR8aWZ4X2dldF9ibG9ifGlmeF9nZXRfY2hhcnxpZnhfZ2V0c3FsY2F8aWZ4X2h0bWx0YmxfcmVzdWx0fGlmeF9udWxsZm9ybWF0fGlmeF9udW1fZmllbGRzfGlmeF9udW1fcm93c3xpZnhfcGNvbm5lY3R8aWZ4X3ByZXBhcmV8aWZ4X3F1ZXJ5fGlmeF90ZXh0YXN2YXJjaGFyfGlmeF91cGRhdGVfYmxvYnxpZnhfdXBkYXRlX2NoYXJ8aWZ4dXNfY2xvc2Vfc2xvYnxpZnh1c19jcmVhdGVfc2xvYnxpZnh1c19mcmVlX3Nsb2J8aWZ4dXNfb3Blbl9zbG9ifGlmeHVzX3JlYWRfc2xvYnxpZnh1c19zZWVrX3Nsb2J8aWZ4dXNfdGVsbF9zbG9ifGlmeHVzX3dyaXRlX3Nsb2J8aWdub3JlX3VzZXJfYWJvcnR8aWlzX2FkZF9zZXJ2ZXJ8aWlzX2dldF9kaXJfc2VjdXJpdHl8aWlzX2dldF9zY3JpcHRfbWFwfGlpc19nZXRfc2VydmVyX2J5X2NvbW1lbnR8aWlzX2dldF9zZXJ2ZXJfYnlfcGF0aHxpaXNfZ2V0X3NlcnZlcl9yaWdodHN8aWlzX2dldF9zZXJ2aWNlX3N0YXRlfGlpc19yZW1vdmVfc2VydmVyfGlpc19zZXRfYXBwX3NldHRpbmdzfGlpc19zZXRfZGlyX3NlY3VyaXR5fGlpc19zZXRfc2NyaXB0X21hcHxpaXNfc2V0X3NlcnZlcl9yaWdodHN8aWlzX3N0YXJ0X3NlcnZlcnxpaXNfc3RhcnRfc2VydmljZXxpaXNfc3RvcF9zZXJ2ZXJ8aWlzX3N0b3Bfc2VydmljZXxpbWFnZTJ3Ym1wfGltYWdlX3R5cGVfdG9fZXh0ZW5zaW9ufGltYWdlX3R5cGVfdG9fbWltZV90eXBlfGltYWdlYWxwaGFibGVuZGluZ3xpbWFnZWFudGlhbGlhc3xpbWFnZWFyY3xpbWFnZWNoYXJ8aW1hZ2VjaGFydXB8aW1hZ2Vjb2xvcmFsbG9jYXRlfGltYWdlY29sb3JhbGxvY2F0ZWFscGhhfGltYWdlY29sb3JhdHxpbWFnZWNvbG9yY2xvc2VzdHxpbWFnZWNvbG9yY2xvc2VzdGFscGhhfGltYWdlY29sb3JjbG9zZXN0aHdifGltYWdlY29sb3JkZWFsbG9jYXRlfGltYWdlY29sb3JleGFjdHxpbWFnZWNvbG9yZXhhY3RhbHBoYXxpbWFnZWNvbG9ybWF0Y2h8aW1hZ2Vjb2xvcnJlc29sdmV8aW1hZ2Vjb2xvcnJlc29sdmVhbHBoYXxpbWFnZWNvbG9yc2V0fGltYWdlY29sb3JzZm9yaW5kZXh8aW1hZ2Vjb2xvcnN0b3RhbHxpbWFnZWNvbG9ydHJhbnNwYXJlbnR8aW1hZ2Vjb252b2x1dGlvbnxpbWFnZWNvcHl8aW1hZ2Vjb3B5bWVyZ2V8aW1hZ2Vjb3B5bWVyZ2VncmF5fGltYWdlY29weXJlc2FtcGxlZHxpbWFnZWNvcHlyZXNpemVkfGltYWdlY3JlYXRlfGltYWdlY3JlYXRlZnJvbWdkfGltYWdlY3JlYXRlZnJvbWdkMnxpbWFnZWNyZWF0ZWZyb21nZDJwYXJ0fGltYWdlY3JlYXRlZnJvbWdpZnxpbWFnZWNyZWF0ZWZyb21qcGVnfGltYWdlY3JlYXRlZnJvbXBuZ3xpbWFnZWNyZWF0ZWZyb21zdHJpbmd8aW1hZ2VjcmVhdGVmcm9td2JtcHxpbWFnZWNyZWF0ZWZyb214Ym18aW1hZ2VjcmVhdGVmcm9teHBtfGltYWdlY3JlYXRldHJ1ZWNvbG9yfGltYWdlZGFzaGVkbGluZXxpbWFnZWRlc3Ryb3l8aW1hZ2VlbGxpcHNlfGltYWdlZmlsbHxpbWFnZWZpbGxlZGFyY3xpbWFnZWZpbGxlZGVsbGlwc2V8aW1hZ2VmaWxsZWRwb2x5Z29ufGltYWdlZmlsbGVkcmVjdGFuZ2xlfGltYWdlZmlsbHRvYm9yZGVyfGltYWdlZmlsdGVyfGltYWdlZm9udGhlaWdodHxpbWFnZWZvbnR3aWR0aHxpbWFnZWZ0YmJveHxpbWFnZWZ0dGV4dHxpbWFnZWdhbW1hY29ycmVjdHxpbWFnZWdkfGltYWdlZ2QyfGltYWdlZ2lmfGltYWdlZ3JhYnNjcmVlbnxpbWFnZWdyYWJ3aW5kb3d8aW1hZ2VpbnRlcmxhY2V8aW1hZ2Vpc3RydWVjb2xvcnxpbWFnZWpwZWd8aW1hZ2VsYXllcmVmZmVjdHxpbWFnZWxpbmV8aW1hZ2Vsb2FkZm9udHxpbWFnZXBhbGV0dGVjb3B5fGltYWdlcG5nfGltYWdlcG9seWdvbnxpbWFnZXBzYmJveHxpbWFnZXBzZW5jb2RlZm9udHxpbWFnZXBzZXh0ZW5kZm9udHxpbWFnZXBzZnJlZWZvbnR8aW1hZ2Vwc2xvYWRmb250fGltYWdlcHNzbGFudGZvbnR8aW1hZ2Vwc3RleHR8aW1hZ2VyZWN0YW5nbGV8aW1hZ2Vyb3RhdGV8aW1hZ2VzYXZlYWxwaGF8aW1hZ2VzZXRicnVzaHxpbWFnZXNldHBpeGVsfGltYWdlc2V0c3R5bGV8aW1hZ2VzZXR0aGlja25lc3N8aW1hZ2VzZXR0aWxlfGltYWdlc3RyaW5nfGltYWdlc3RyaW5ndXB8aW1hZ2VzeHxpbWFnZXN5fGltYWdldHJ1ZWNvbG9ydG9wYWxldHRlfGltYWdldHRmYmJveHxpbWFnZXR0ZnRleHR8aW1hZ2V0eXBlc3xpbWFnZXdibXB8aW1hZ2V4Ym18aW1hZ2lja3xpbWFnaWNrX2FkYXB0aXZlYmx1cmltYWdlfGltYWdpY2tfYWRhcHRpdmVyZXNpemVpbWFnZXxpbWFnaWNrX2FkYXB0aXZlc2hhcnBlbmltYWdlfGltYWdpY2tfYWRhcHRpdmV0aHJlc2hvbGRpbWFnZXxpbWFnaWNrX2FkZGltYWdlfGltYWdpY2tfYWRkbm9pc2VpbWFnZXxpbWFnaWNrX2FmZmluZXRyYW5zZm9ybWltYWdlfGltYWdpY2tfYW5pbWF0ZWltYWdlc3xpbWFnaWNrX2Fubm90YXRlaW1hZ2V8aW1hZ2lja19hcHBlbmRpbWFnZXN8aW1hZ2lja19hdmVyYWdlaW1hZ2VzfGltYWdpY2tfYmxhY2t0aHJlc2hvbGRpbWFnZXxpbWFnaWNrX2JsdXJpbWFnZXxpbWFnaWNrX2JvcmRlcmltYWdlfGltYWdpY2tfY2hhcmNvYWxpbWFnZXxpbWFnaWNrX2Nob3BpbWFnZXxpbWFnaWNrX2NsZWFyfGltYWdpY2tfY2xpcGltYWdlfGltYWdpY2tfY2xpcHBhdGhpbWFnZXxpbWFnaWNrX2Nsb25lfGltYWdpY2tfY2x1dGltYWdlfGltYWdpY2tfY29hbGVzY2VpbWFnZXN8aW1hZ2lja19jb2xvcmZsb29kZmlsbGltYWdlfGltYWdpY2tfY29sb3JpemVpbWFnZXxpbWFnaWNrX2NvbWJpbmVpbWFnZXN8aW1hZ2lja19jb21tZW50aW1hZ2V8aW1hZ2lja19jb21wYXJlaW1hZ2VjaGFubmVsc3xpbWFnaWNrX2NvbXBhcmVpbWFnZWxheWVyc3xpbWFnaWNrX2NvbXBhcmVpbWFnZXN8aW1hZ2lja19jb21wb3NpdGVpbWFnZXxpbWFnaWNrX2NvbnN0cnVjdHxpbWFnaWNrX2NvbnRyYXN0aW1hZ2V8aW1hZ2lja19jb250cmFzdHN0cmV0Y2hpbWFnZXxpbWFnaWNrX2NvbnZvbHZlaW1hZ2V8aW1hZ2lja19jcm9waW1hZ2V8aW1hZ2lja19jcm9wdGh1bWJuYWlsaW1hZ2V8aW1hZ2lja19jdXJyZW50fGltYWdpY2tfY3ljbGVjb2xvcm1hcGltYWdlfGltYWdpY2tfZGVjaXBoZXJpbWFnZXxpbWFnaWNrX2RlY29uc3RydWN0aW1hZ2VzfGltYWdpY2tfZGVsZXRlaW1hZ2VhcnRpZmFjdHxpbWFnaWNrX2Rlc3BlY2tsZWltYWdlfGltYWdpY2tfZGVzdHJveXxpbWFnaWNrX2Rpc3BsYXlpbWFnZXxpbWFnaWNrX2Rpc3BsYXlpbWFnZXN8aW1hZ2lja19kaXN0b3J0aW1hZ2V8aW1hZ2lja19kcmF3aW1hZ2V8aW1hZ2lja19lZGdlaW1hZ2V8aW1hZ2lja19lbWJvc3NpbWFnZXxpbWFnaWNrX2VuY2lwaGVyaW1hZ2V8aW1hZ2lja19lbmhhbmNlaW1hZ2V8aW1hZ2lja19lcXVhbGl6ZWltYWdlfGltYWdpY2tfZXZhbHVhdGVpbWFnZXxpbWFnaWNrX2V4dGVudGltYWdlfGltYWdpY2tfZmxhdHRlbmltYWdlc3xpbWFnaWNrX2ZsaXBpbWFnZXxpbWFnaWNrX2Zsb29kZmlsbHBhaW50aW1hZ2V8aW1hZ2lja19mbG9waW1hZ2V8aW1hZ2lja19mcmFtZWltYWdlfGltYWdpY2tfZnhpbWFnZXxpbWFnaWNrX2dhbW1haW1hZ2V8aW1hZ2lja19nYXVzc2lhbmJsdXJpbWFnZXxpbWFnaWNrX2dldGNvbG9yc3BhY2V8aW1hZ2lja19nZXRjb21wcmVzc2lvbnxpbWFnaWNrX2dldGNvbXByZXNzaW9ucXVhbGl0eXxpbWFnaWNrX2dldGNvcHlyaWdodHxpbWFnaWNrX2dldGZpbGVuYW1lfGltYWdpY2tfZ2V0Zm9udHxpbWFnaWNrX2dldGZvcm1hdHxpbWFnaWNrX2dldGdyYXZpdHl8aW1hZ2lja19nZXRob21ldXJsfGltYWdpY2tfZ2V0aW1hZ2V8aW1hZ2lja19nZXRpbWFnZWFscGhhY2hhbm5lbHxpbWFnaWNrX2dldGltYWdlYXJ0aWZhY3R8aW1hZ2lja19nZXRpbWFnZWJhY2tncm91bmRjb2xvcnxpbWFnaWNrX2dldGltYWdlYmxvYnxpbWFnaWNrX2dldGltYWdlYmx1ZXByaW1hcnl8aW1hZ2lja19nZXRpbWFnZWJvcmRlcmNvbG9yfGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsZGVwdGh8aW1hZ2lja19nZXRpbWFnZWNoYW5uZWxkaXN0b3J0aW9ufGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsZGlzdG9ydGlvbnN8aW1hZ2lja19nZXRpbWFnZWNoYW5uZWxleHRyZW1hfGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsbWVhbnxpbWFnaWNrX2dldGltYWdlY2hhbm5lbHJhbmdlfGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsc3RhdGlzdGljc3xpbWFnaWNrX2dldGltYWdlY2xpcG1hc2t8aW1hZ2lja19nZXRpbWFnZWNvbG9ybWFwY29sb3J8aW1hZ2lja19nZXRpbWFnZWNvbG9yc3xpbWFnaWNrX2dldGltYWdlY29sb3JzcGFjZXxpbWFnaWNrX2dldGltYWdlY29tcG9zZXxpbWFnaWNrX2dldGltYWdlY29tcHJlc3Npb258aW1hZ2lja19nZXRpbWFnZWNvbXByZXNzaW9ucXVhbGl0eXxpbWFnaWNrX2dldGltYWdlZGVsYXl8aW1hZ2lja19nZXRpbWFnZWRlcHRofGltYWdpY2tfZ2V0aW1hZ2VkaXNwb3NlfGltYWdpY2tfZ2V0aW1hZ2VkaXN0b3J0aW9ufGltYWdpY2tfZ2V0aW1hZ2VleHRyZW1hfGltYWdpY2tfZ2V0aW1hZ2VmaWxlbmFtZXxpbWFnaWNrX2dldGltYWdlZm9ybWF0fGltYWdpY2tfZ2V0aW1hZ2VnYW1tYXxpbWFnaWNrX2dldGltYWdlZ2VvbWV0cnl8aW1hZ2lja19nZXRpbWFnZWdyYXZpdHl8aW1hZ2lja19nZXRpbWFnZWdyZWVucHJpbWFyeXxpbWFnaWNrX2dldGltYWdlaGVpZ2h0fGltYWdpY2tfZ2V0aW1hZ2VoaXN0b2dyYW18aW1hZ2lja19nZXRpbWFnZWluZGV4fGltYWdpY2tfZ2V0aW1hZ2VpbnRlcmxhY2VzY2hlbWV8aW1hZ2lja19nZXRpbWFnZWludGVycG9sYXRlbWV0aG9kfGltYWdpY2tfZ2V0aW1hZ2VpdGVyYXRpb25zfGltYWdpY2tfZ2V0aW1hZ2VsZW5ndGh8aW1hZ2lja19nZXRpbWFnZW1hZ2lja2xpY2Vuc2V8aW1hZ2lja19nZXRpbWFnZW1hdHRlfGltYWdpY2tfZ2V0aW1hZ2VtYXR0ZWNvbG9yfGltYWdpY2tfZ2V0aW1hZ2VvcmllbnRhdGlvbnxpbWFnaWNrX2dldGltYWdlcGFnZXxpbWFnaWNrX2dldGltYWdlcGl4ZWxjb2xvcnxpbWFnaWNrX2dldGltYWdlcHJvZmlsZXxpbWFnaWNrX2dldGltYWdlcHJvZmlsZXN8aW1hZ2lja19nZXRpbWFnZXByb3BlcnRpZXN8aW1hZ2lja19nZXRpbWFnZXByb3BlcnR5fGltYWdpY2tfZ2V0aW1hZ2VyZWRwcmltYXJ5fGltYWdpY2tfZ2V0aW1hZ2VyZWdpb258aW1hZ2lja19nZXRpbWFnZXJlbmRlcmluZ2ludGVudHxpbWFnaWNrX2dldGltYWdlcmVzb2x1dGlvbnxpbWFnaWNrX2dldGltYWdlc2Jsb2J8aW1hZ2lja19nZXRpbWFnZXNjZW5lfGltYWdpY2tfZ2V0aW1hZ2VzaWduYXR1cmV8aW1hZ2lja19nZXRpbWFnZXNpemV8aW1hZ2lja19nZXRpbWFnZXRpY2tzcGVyc2Vjb25kfGltYWdpY2tfZ2V0aW1hZ2V0b3RhbGlua2RlbnNpdHl8aW1hZ2lja19nZXRpbWFnZXR5cGV8aW1hZ2lja19nZXRpbWFnZXVuaXRzfGltYWdpY2tfZ2V0aW1hZ2V2aXJ0dWFscGl4ZWxtZXRob2R8aW1hZ2lja19nZXRpbWFnZXdoaXRlcG9pbnR8aW1hZ2lja19nZXRpbWFnZXdpZHRofGltYWdpY2tfZ2V0aW50ZXJsYWNlc2NoZW1lfGltYWdpY2tfZ2V0aXRlcmF0b3JpbmRleHxpbWFnaWNrX2dldG51bWJlcmltYWdlc3xpbWFnaWNrX2dldG9wdGlvbnxpbWFnaWNrX2dldHBhY2thZ2VuYW1lfGltYWdpY2tfZ2V0cGFnZXxpbWFnaWNrX2dldHBpeGVsaXRlcmF0b3J8aW1hZ2lja19nZXRwaXhlbHJlZ2lvbml0ZXJhdG9yfGltYWdpY2tfZ2V0cG9pbnRzaXplfGltYWdpY2tfZ2V0cXVhbnR1bWRlcHRofGltYWdpY2tfZ2V0cXVhbnR1bXJhbmdlfGltYWdpY2tfZ2V0cmVsZWFzZWRhdGV8aW1hZ2lja19nZXRyZXNvdXJjZXxpbWFnaWNrX2dldHJlc291cmNlbGltaXR8aW1hZ2lja19nZXRzYW1wbGluZ2ZhY3RvcnN8aW1hZ2lja19nZXRzaXplfGltYWdpY2tfZ2V0c2l6ZW9mZnNldHxpbWFnaWNrX2dldHZlcnNpb258aW1hZ2lja19oYXNuZXh0aW1hZ2V8aW1hZ2lja19oYXNwcmV2aW91c2ltYWdlfGltYWdpY2tfaWRlbnRpZnlpbWFnZXxpbWFnaWNrX2ltcGxvZGVpbWFnZXxpbWFnaWNrX2xhYmVsaW1hZ2V8aW1hZ2lja19sZXZlbGltYWdlfGltYWdpY2tfbGluZWFyc3RyZXRjaGltYWdlfGltYWdpY2tfbGlxdWlkcmVzY2FsZWltYWdlfGltYWdpY2tfbWFnbmlmeWltYWdlfGltYWdpY2tfbWFwaW1hZ2V8aW1hZ2lja19tYXR0ZWZsb29kZmlsbGltYWdlfGltYWdpY2tfbWVkaWFuZmlsdGVyaW1hZ2V8aW1hZ2lja19tZXJnZWltYWdlbGF5ZXJzfGltYWdpY2tfbWluaWZ5aW1hZ2V8aW1hZ2lja19tb2R1bGF0ZWltYWdlfGltYWdpY2tfbW9udGFnZWltYWdlfGltYWdpY2tfbW9ycGhpbWFnZXN8aW1hZ2lja19tb3NhaWNpbWFnZXN8aW1hZ2lja19tb3Rpb25ibHVyaW1hZ2V8aW1hZ2lja19uZWdhdGVpbWFnZXxpbWFnaWNrX25ld2ltYWdlfGltYWdpY2tfbmV3cHNldWRvaW1hZ2V8aW1hZ2lja19uZXh0aW1hZ2V8aW1hZ2lja19ub3JtYWxpemVpbWFnZXxpbWFnaWNrX29pbHBhaW50aW1hZ2V8aW1hZ2lja19vcGFxdWVwYWludGltYWdlfGltYWdpY2tfb3B0aW1pemVpbWFnZWxheWVyc3xpbWFnaWNrX29yZGVyZWRwb3N0ZXJpemVpbWFnZXxpbWFnaWNrX3BhaW50Zmxvb2RmaWxsaW1hZ2V8aW1hZ2lja19wYWludG9wYXF1ZWltYWdlfGltYWdpY2tfcGFpbnR0cmFuc3BhcmVudGltYWdlfGltYWdpY2tfcGluZ2ltYWdlfGltYWdpY2tfcGluZ2ltYWdlYmxvYnxpbWFnaWNrX3BpbmdpbWFnZWZpbGV8aW1hZ2lja19wb2xhcm9pZGltYWdlfGltYWdpY2tfcG9zdGVyaXplaW1hZ2V8aW1hZ2lja19wcmV2aWV3aW1hZ2VzfGltYWdpY2tfcHJldmlvdXNpbWFnZXxpbWFnaWNrX3Byb2ZpbGVpbWFnZXxpbWFnaWNrX3F1YW50aXplaW1hZ2V8aW1hZ2lja19xdWFudGl6ZWltYWdlc3xpbWFnaWNrX3F1ZXJ5Zm9udG1ldHJpY3N8aW1hZ2lja19xdWVyeWZvbnRzfGltYWdpY2tfcXVlcnlmb3JtYXRzfGltYWdpY2tfcmFkaWFsYmx1cmltYWdlfGltYWdpY2tfcmFpc2VpbWFnZXxpbWFnaWNrX3JhbmRvbXRocmVzaG9sZGltYWdlfGltYWdpY2tfcmVhZGltYWdlfGltYWdpY2tfcmVhZGltYWdlYmxvYnxpbWFnaWNrX3JlYWRpbWFnZWZpbGV8aW1hZ2lja19yZWNvbG9yaW1hZ2V8aW1hZ2lja19yZWR1Y2Vub2lzZWltYWdlfGltYWdpY2tfcmVtb3ZlaW1hZ2V8aW1hZ2lja19yZW1vdmVpbWFnZXByb2ZpbGV8aW1hZ2lja19yZW5kZXJ8aW1hZ2lja19yZXNhbXBsZWltYWdlfGltYWdpY2tfcmVzZXRpbWFnZXBhZ2V8aW1hZ2lja19yZXNpemVpbWFnZXxpbWFnaWNrX3JvbGxpbWFnZXxpbWFnaWNrX3JvdGF0ZWltYWdlfGltYWdpY2tfcm91bmRjb3JuZXJzfGltYWdpY2tfc2FtcGxlaW1hZ2V8aW1hZ2lja19zY2FsZWltYWdlfGltYWdpY2tfc2VwYXJhdGVpbWFnZWNoYW5uZWx8aW1hZ2lja19zZXBpYXRvbmVpbWFnZXxpbWFnaWNrX3NldGJhY2tncm91bmRjb2xvcnxpbWFnaWNrX3NldGNvbG9yc3BhY2V8aW1hZ2lja19zZXRjb21wcmVzc2lvbnxpbWFnaWNrX3NldGNvbXByZXNzaW9ucXVhbGl0eXxpbWFnaWNrX3NldGZpbGVuYW1lfGltYWdpY2tfc2V0Zmlyc3RpdGVyYXRvcnxpbWFnaWNrX3NldGZvbnR8aW1hZ2lja19zZXRmb3JtYXR8aW1hZ2lja19zZXRncmF2aXR5fGltYWdpY2tfc2V0aW1hZ2V8aW1hZ2lja19zZXRpbWFnZWFscGhhY2hhbm5lbHxpbWFnaWNrX3NldGltYWdlYXJ0aWZhY3R8aW1hZ2lja19zZXRpbWFnZWJhY2tncm91bmRjb2xvcnxpbWFnaWNrX3NldGltYWdlYmlhc3xpbWFnaWNrX3NldGltYWdlYmx1ZXByaW1hcnl8aW1hZ2lja19zZXRpbWFnZWJvcmRlcmNvbG9yfGltYWdpY2tfc2V0aW1hZ2VjaGFubmVsZGVwdGh8aW1hZ2lja19zZXRpbWFnZWNsaXBtYXNrfGltYWdpY2tfc2V0aW1hZ2Vjb2xvcm1hcGNvbG9yfGltYWdpY2tfc2V0aW1hZ2Vjb2xvcnNwYWNlfGltYWdpY2tfc2V0aW1hZ2Vjb21wb3NlfGltYWdpY2tfc2V0aW1hZ2Vjb21wcmVzc2lvbnxpbWFnaWNrX3NldGltYWdlY29tcHJlc3Npb25xdWFsaXR5fGltYWdpY2tfc2V0aW1hZ2VkZWxheXxpbWFnaWNrX3NldGltYWdlZGVwdGh8aW1hZ2lja19zZXRpbWFnZWRpc3Bvc2V8aW1hZ2lja19zZXRpbWFnZWV4dGVudHxpbWFnaWNrX3NldGltYWdlZmlsZW5hbWV8aW1hZ2lja19zZXRpbWFnZWZvcm1hdHxpbWFnaWNrX3NldGltYWdlZ2FtbWF8aW1hZ2lja19zZXRpbWFnZWdyYXZpdHl8aW1hZ2lja19zZXRpbWFnZWdyZWVucHJpbWFyeXxpbWFnaWNrX3NldGltYWdlaW5kZXh8aW1hZ2lja19zZXRpbWFnZWludGVybGFjZXNjaGVtZXxpbWFnaWNrX3NldGltYWdlaW50ZXJwb2xhdGVtZXRob2R8aW1hZ2lja19zZXRpbWFnZWl0ZXJhdGlvbnN8aW1hZ2lja19zZXRpbWFnZW1hdHRlfGltYWdpY2tfc2V0aW1hZ2VtYXR0ZWNvbG9yfGltYWdpY2tfc2V0aW1hZ2VvcGFjaXR5fGltYWdpY2tfc2V0aW1hZ2VvcmllbnRhdGlvbnxpbWFnaWNrX3NldGltYWdlcGFnZXxpbWFnaWNrX3NldGltYWdlcHJvZmlsZXxpbWFnaWNrX3NldGltYWdlcHJvcGVydHl8aW1hZ2lja19zZXRpbWFnZXJlZHByaW1hcnl8aW1hZ2lja19zZXRpbWFnZXJlbmRlcmluZ2ludGVudHxpbWFnaWNrX3NldGltYWdlcmVzb2x1dGlvbnxpbWFnaWNrX3NldGltYWdlc2NlbmV8aW1hZ2lja19zZXRpbWFnZXRpY2tzcGVyc2Vjb25kfGltYWdpY2tfc2V0aW1hZ2V0eXBlfGltYWdpY2tfc2V0aW1hZ2V1bml0c3xpbWFnaWNrX3NldGltYWdldmlydHVhbHBpeGVsbWV0aG9kfGltYWdpY2tfc2V0aW1hZ2V3aGl0ZXBvaW50fGltYWdpY2tfc2V0aW50ZXJsYWNlc2NoZW1lfGltYWdpY2tfc2V0aXRlcmF0b3JpbmRleHxpbWFnaWNrX3NldGxhc3RpdGVyYXRvcnxpbWFnaWNrX3NldG9wdGlvbnxpbWFnaWNrX3NldHBhZ2V8aW1hZ2lja19zZXRwb2ludHNpemV8aW1hZ2lja19zZXRyZXNvbHV0aW9ufGltYWdpY2tfc2V0cmVzb3VyY2VsaW1pdHxpbWFnaWNrX3NldHNhbXBsaW5nZmFjdG9yc3xpbWFnaWNrX3NldHNpemV8aW1hZ2lja19zZXRzaXplb2Zmc2V0fGltYWdpY2tfc2V0dHlwZXxpbWFnaWNrX3NoYWRlaW1hZ2V8aW1hZ2lja19zaGFkb3dpbWFnZXxpbWFnaWNrX3NoYXJwZW5pbWFnZXxpbWFnaWNrX3NoYXZlaW1hZ2V8aW1hZ2lja19zaGVhcmltYWdlfGltYWdpY2tfc2lnbW9pZGFsY29udHJhc3RpbWFnZXxpbWFnaWNrX3NrZXRjaGltYWdlfGltYWdpY2tfc29sYXJpemVpbWFnZXxpbWFnaWNrX3NwbGljZWltYWdlfGltYWdpY2tfc3ByZWFkaW1hZ2V8aW1hZ2lja19zdGVnYW5vaW1hZ2V8aW1hZ2lja19zdGVyZW9pbWFnZXxpbWFnaWNrX3N0cmlwaW1hZ2V8aW1hZ2lja19zd2lybGltYWdlfGltYWdpY2tfdGV4dHVyZWltYWdlfGltYWdpY2tfdGhyZXNob2xkaW1hZ2V8aW1hZ2lja190aHVtYm5haWxpbWFnZXxpbWFnaWNrX3RpbnRpbWFnZXxpbWFnaWNrX3RyYW5zZm9ybWltYWdlfGltYWdpY2tfdHJhbnNwYXJlbnRwYWludGltYWdlfGltYWdpY2tfdHJhbnNwb3NlaW1hZ2V8aW1hZ2lja190cmFuc3ZlcnNlaW1hZ2V8aW1hZ2lja190cmltaW1hZ2V8aW1hZ2lja191bmlxdWVpbWFnZWNvbG9yc3xpbWFnaWNrX3Vuc2hhcnBtYXNraW1hZ2V8aW1hZ2lja192YWxpZHxpbWFnaWNrX3ZpZ25ldHRlaW1hZ2V8aW1hZ2lja193YXZlaW1hZ2V8aW1hZ2lja193aGl0ZXRocmVzaG9sZGltYWdlfGltYWdpY2tfd3JpdGVpbWFnZXxpbWFnaWNrX3dyaXRlaW1hZ2VmaWxlfGltYWdpY2tfd3JpdGVpbWFnZXN8aW1hZ2lja193cml0ZWltYWdlc2ZpbGV8aW1hZ2lja2RyYXd8aW1hZ2lja2RyYXdfYWZmaW5lfGltYWdpY2tkcmF3X2Fubm90YXRpb258aW1hZ2lja2RyYXdfYXJjfGltYWdpY2tkcmF3X2JlemllcnxpbWFnaWNrZHJhd19jaXJjbGV8aW1hZ2lja2RyYXdfY2xlYXJ8aW1hZ2lja2RyYXdfY2xvbmV8aW1hZ2lja2RyYXdfY29sb3J8aW1hZ2lja2RyYXdfY29tbWVudHxpbWFnaWNrZHJhd19jb21wb3NpdGV8aW1hZ2lja2RyYXdfY29uc3RydWN0fGltYWdpY2tkcmF3X2Rlc3Ryb3l8aW1hZ2lja2RyYXdfZWxsaXBzZXxpbWFnaWNrZHJhd19nZXRjbGlwcGF0aHxpbWFnaWNrZHJhd19nZXRjbGlwcnVsZXxpbWFnaWNrZHJhd19nZXRjbGlwdW5pdHN8aW1hZ2lja2RyYXdfZ2V0ZmlsbGNvbG9yfGltYWdpY2tkcmF3X2dldGZpbGxvcGFjaXR5fGltYWdpY2tkcmF3X2dldGZpbGxydWxlfGltYWdpY2tkcmF3X2dldGZvbnR8aW1hZ2lja2RyYXdfZ2V0Zm9udGZhbWlseXxpbWFnaWNrZHJhd19nZXRmb250c2l6ZXxpbWFnaWNrZHJhd19nZXRmb250c3R5bGV8aW1hZ2lja2RyYXdfZ2V0Zm9udHdlaWdodHxpbWFnaWNrZHJhd19nZXRncmF2aXR5fGltYWdpY2tkcmF3X2dldHN0cm9rZWFudGlhbGlhc3xpbWFnaWNrZHJhd19nZXRzdHJva2Vjb2xvcnxpbWFnaWNrZHJhd19nZXRzdHJva2VkYXNoYXJyYXl8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlZGFzaG9mZnNldHxpbWFnaWNrZHJhd19nZXRzdHJva2VsaW5lY2FwfGltYWdpY2tkcmF3X2dldHN0cm9rZWxpbmVqb2lufGltYWdpY2tkcmF3X2dldHN0cm9rZW1pdGVybGltaXR8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlb3BhY2l0eXxpbWFnaWNrZHJhd19nZXRzdHJva2V3aWR0aHxpbWFnaWNrZHJhd19nZXR0ZXh0YWxpZ25tZW50fGltYWdpY2tkcmF3X2dldHRleHRhbnRpYWxpYXN8aW1hZ2lja2RyYXdfZ2V0dGV4dGRlY29yYXRpb258aW1hZ2lja2RyYXdfZ2V0dGV4dGVuY29kaW5nfGltYWdpY2tkcmF3X2dldHRleHR1bmRlcmNvbG9yfGltYWdpY2tkcmF3X2dldHZlY3RvcmdyYXBoaWNzfGltYWdpY2tkcmF3X2xpbmV8aW1hZ2lja2RyYXdfbWF0dGV8aW1hZ2lja2RyYXdfcGF0aGNsb3NlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9xdWFkcmF0aWNiZXppZXJhYnNvbHV0ZXxpbWFnaWNrZHJhd19wYXRoY3VydmV0b3F1YWRyYXRpY2JlemllcnJlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVyc21vb3RoYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9xdWFkcmF0aWNiZXppZXJzbW9vdGhyZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRoY3VydmV0b3JlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvc21vb3RoYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9zbW9vdGhyZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRoZWxsaXB0aWNhcmNhYnNvbHV0ZXxpbWFnaWNrZHJhd19wYXRoZWxsaXB0aWNhcmNyZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRoZmluaXNofGltYWdpY2tkcmF3X3BhdGhsaW5ldG9hYnNvbHV0ZXxpbWFnaWNrZHJhd19wYXRobGluZXRvaG9yaXpvbnRhbGFic29sdXRlfGltYWdpY2tkcmF3X3BhdGhsaW5ldG9ob3Jpem9udGFscmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aGxpbmV0b3JlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhsaW5ldG92ZXJ0aWNhbGFic29sdXRlfGltYWdpY2tkcmF3X3BhdGhsaW5ldG92ZXJ0aWNhbHJlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhtb3ZldG9hYnNvbHV0ZXxpbWFnaWNrZHJhd19wYXRobW92ZXRvcmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aHN0YXJ0fGltYWdpY2tkcmF3X3BvaW50fGltYWdpY2tkcmF3X3BvbHlnb258aW1hZ2lja2RyYXdfcG9seWxpbmV8aW1hZ2lja2RyYXdfcG9wfGltYWdpY2tkcmF3X3BvcGNsaXBwYXRofGltYWdpY2tkcmF3X3BvcGRlZnN8aW1hZ2lja2RyYXdfcG9wcGF0dGVybnxpbWFnaWNrZHJhd19wdXNofGltYWdpY2tkcmF3X3B1c2hjbGlwcGF0aHxpbWFnaWNrZHJhd19wdXNoZGVmc3xpbWFnaWNrZHJhd19wdXNocGF0dGVybnxpbWFnaWNrZHJhd19yZWN0YW5nbGV8aW1hZ2lja2RyYXdfcmVuZGVyfGltYWdpY2tkcmF3X3JvdGF0ZXxpbWFnaWNrZHJhd19yb3VuZHJlY3RhbmdsZXxpbWFnaWNrZHJhd19zY2FsZXxpbWFnaWNrZHJhd19zZXRjbGlwcGF0aHxpbWFnaWNrZHJhd19zZXRjbGlwcnVsZXxpbWFnaWNrZHJhd19zZXRjbGlwdW5pdHN8aW1hZ2lja2RyYXdfc2V0ZmlsbGFscGhhfGltYWdpY2tkcmF3X3NldGZpbGxjb2xvcnxpbWFnaWNrZHJhd19zZXRmaWxsb3BhY2l0eXxpbWFnaWNrZHJhd19zZXRmaWxscGF0dGVybnVybHxpbWFnaWNrZHJhd19zZXRmaWxscnVsZXxpbWFnaWNrZHJhd19zZXRmb250fGltYWdpY2tkcmF3X3NldGZvbnRmYW1pbHl8aW1hZ2lja2RyYXdfc2V0Zm9udHNpemV8aW1hZ2lja2RyYXdfc2V0Zm9udHN0cmV0Y2h8aW1hZ2lja2RyYXdfc2V0Zm9udHN0eWxlfGltYWdpY2tkcmF3X3NldGZvbnR3ZWlnaHR8aW1hZ2lja2RyYXdfc2V0Z3Jhdml0eXxpbWFnaWNrZHJhd19zZXRzdHJva2VhbHBoYXxpbWFnaWNrZHJhd19zZXRzdHJva2VhbnRpYWxpYXN8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlY29sb3J8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlZGFzaGFycmF5fGltYWdpY2tkcmF3X3NldHN0cm9rZWRhc2hvZmZzZXR8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlbGluZWNhcHxpbWFnaWNrZHJhd19zZXRzdHJva2VsaW5lam9pbnxpbWFnaWNrZHJhd19zZXRzdHJva2VtaXRlcmxpbWl0fGltYWdpY2tkcmF3X3NldHN0cm9rZW9wYWNpdHl8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlcGF0dGVybnVybHxpbWFnaWNrZHJhd19zZXRzdHJva2V3aWR0aHxpbWFnaWNrZHJhd19zZXR0ZXh0YWxpZ25tZW50fGltYWdpY2tkcmF3X3NldHRleHRhbnRpYWxpYXN8aW1hZ2lja2RyYXdfc2V0dGV4dGRlY29yYXRpb258aW1hZ2lja2RyYXdfc2V0dGV4dGVuY29kaW5nfGltYWdpY2tkcmF3X3NldHRleHR1bmRlcmNvbG9yfGltYWdpY2tkcmF3X3NldHZlY3RvcmdyYXBoaWNzfGltYWdpY2tkcmF3X3NldHZpZXdib3h8aW1hZ2lja2RyYXdfc2tld3h8aW1hZ2lja2RyYXdfc2tld3l8aW1hZ2lja2RyYXdfdHJhbnNsYXRlfGltYWdpY2twaXhlbHxpbWFnaWNrcGl4ZWxfY2xlYXJ8aW1hZ2lja3BpeGVsX2NvbnN0cnVjdHxpbWFnaWNrcGl4ZWxfZGVzdHJveXxpbWFnaWNrcGl4ZWxfZ2V0Y29sb3J8aW1hZ2lja3BpeGVsX2dldGNvbG9yYXNzdHJpbmd8aW1hZ2lja3BpeGVsX2dldGNvbG9yY291bnR8aW1hZ2lja3BpeGVsX2dldGNvbG9ydmFsdWV8aW1hZ2lja3BpeGVsX2dldGhzbHxpbWFnaWNrcGl4ZWxfaXNzaW1pbGFyfGltYWdpY2twaXhlbF9zZXRjb2xvcnxpbWFnaWNrcGl4ZWxfc2V0Y29sb3J2YWx1ZXxpbWFnaWNrcGl4ZWxfc2V0aHNsfGltYWdpY2twaXhlbGl0ZXJhdG9yfGltYWdpY2twaXhlbGl0ZXJhdG9yX2NsZWFyfGltYWdpY2twaXhlbGl0ZXJhdG9yX2NvbnN0cnVjdHxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9kZXN0cm95fGltYWdpY2twaXhlbGl0ZXJhdG9yX2dldGN1cnJlbnRpdGVyYXRvcnJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRpdGVyYXRvcnJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRuZXh0aXRlcmF0b3Jyb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3JfZ2V0cHJldmlvdXNpdGVyYXRvcnJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9uZXdwaXhlbGl0ZXJhdG9yfGltYWdpY2twaXhlbGl0ZXJhdG9yX25ld3BpeGVscmVnaW9uaXRlcmF0b3J8aW1hZ2lja3BpeGVsaXRlcmF0b3JfcmVzZXRpdGVyYXRvcnxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9zZXRpdGVyYXRvcmZpcnN0cm93fGltYWdpY2twaXhlbGl0ZXJhdG9yX3NldGl0ZXJhdG9ybGFzdHJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9zZXRpdGVyYXRvcnJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9zeW5jaXRlcmF0b3J8aW1hcF84Yml0fGltYXBfYWxlcnRzfGltYXBfYXBwZW5kfGltYXBfYmFzZTY0fGltYXBfYmluYXJ5fGltYXBfYm9keXxpbWFwX2JvZHlzdHJ1Y3R8aW1hcF9jaGVja3xpbWFwX2NsZWFyZmxhZ19mdWxsfGltYXBfY2xvc2V8aW1hcF9jcmVhdGV8aW1hcF9jcmVhdGVtYWlsYm94fGltYXBfZGVsZXRlfGltYXBfZGVsZXRlbWFpbGJveHxpbWFwX2Vycm9yc3xpbWFwX2V4cHVuZ2V8aW1hcF9mZXRjaF9vdmVydmlld3xpbWFwX2ZldGNoYm9keXxpbWFwX2ZldGNoaGVhZGVyfGltYXBfZmV0Y2htaW1lfGltYXBfZmV0Y2hzdHJ1Y3R1cmV8aW1hcF9mZXRjaHRleHR8aW1hcF9nY3xpbWFwX2dldF9xdW90YXxpbWFwX2dldF9xdW90YXJvb3R8aW1hcF9nZXRhY2x8aW1hcF9nZXRtYWlsYm94ZXN8aW1hcF9nZXRzdWJzY3JpYmVkfGltYXBfaGVhZGVyfGltYXBfaGVhZGVyaW5mb3xpbWFwX2hlYWRlcnN8aW1hcF9sYXN0X2Vycm9yfGltYXBfbGlzdHxpbWFwX2xpc3RtYWlsYm94fGltYXBfbGlzdHNjYW58aW1hcF9saXN0c3Vic2NyaWJlZHxpbWFwX2xzdWJ8aW1hcF9tYWlsfGltYXBfbWFpbF9jb21wb3NlfGltYXBfbWFpbF9jb3B5fGltYXBfbWFpbF9tb3ZlfGltYXBfbWFpbGJveG1zZ2luZm98aW1hcF9taW1lX2hlYWRlcl9kZWNvZGV8aW1hcF9tc2dub3xpbWFwX251bV9tc2d8aW1hcF9udW1fcmVjZW50fGltYXBfb3BlbnxpbWFwX3Bpbmd8aW1hcF9xcHJpbnR8aW1hcF9yZW5hbWV8aW1hcF9yZW5hbWVtYWlsYm94fGltYXBfcmVvcGVufGltYXBfcmZjODIyX3BhcnNlX2Fkcmxpc3R8aW1hcF9yZmM4MjJfcGFyc2VfaGVhZGVyc3xpbWFwX3JmYzgyMl93cml0ZV9hZGRyZXNzfGltYXBfc2F2ZWJvZHl8aW1hcF9zY2FufGltYXBfc2Nhbm1haWxib3h8aW1hcF9zZWFyY2h8aW1hcF9zZXRfcXVvdGF8aW1hcF9zZXRhY2x8aW1hcF9zZXRmbGFnX2Z1bGx8aW1hcF9zb3J0fGltYXBfc3RhdHVzfGltYXBfc3Vic2NyaWJlfGltYXBfdGhyZWFkfGltYXBfdGltZW91dHxpbWFwX3VpZHxpbWFwX3VuZGVsZXRlfGltYXBfdW5zdWJzY3JpYmV8aW1hcF91dGY3X2RlY29kZXxpbWFwX3V0ZjdfZW5jb2RlfGltYXBfdXRmOHxpbXBsZW1lbnRzaW50ZXJmYWNlfGltcGxvZGV8aW1wb3J0X3JlcXVlc3RfdmFyaWFibGVzfGluX2FycmF5fGluY2x1ZGV8aW5jbHVkZV9vbmNlfGluY2x1ZWRfZ2V0X2RhdGF8aW5ldF9udG9wfGluZXRfcHRvbnxpbmZpbml0ZWl0ZXJhdG9yfGluZ3Jlc19hdXRvY29tbWl0fGluZ3Jlc19hdXRvY29tbWl0X3N0YXRlfGluZ3Jlc19jaGFyc2V0fGluZ3Jlc19jbG9zZXxpbmdyZXNfY29tbWl0fGluZ3Jlc19jb25uZWN0fGluZ3Jlc19jdXJzb3J8aW5ncmVzX2Vycm5vfGluZ3Jlc19lcnJvcnxpbmdyZXNfZXJyc3Fsc3RhdGV8aW5ncmVzX2VzY2FwZV9zdHJpbmd8aW5ncmVzX2V4ZWN1dGV8aW5ncmVzX2ZldGNoX2FycmF5fGluZ3Jlc19mZXRjaF9hc3NvY3xpbmdyZXNfZmV0Y2hfb2JqZWN0fGluZ3Jlc19mZXRjaF9wcm9jX3JldHVybnxpbmdyZXNfZmV0Y2hfcm93fGluZ3Jlc19maWVsZF9sZW5ndGh8aW5ncmVzX2ZpZWxkX25hbWV8aW5ncmVzX2ZpZWxkX251bGxhYmxlfGluZ3Jlc19maWVsZF9wcmVjaXNpb258aW5ncmVzX2ZpZWxkX3NjYWxlfGluZ3Jlc19maWVsZF90eXBlfGluZ3Jlc19mcmVlX3Jlc3VsdHxpbmdyZXNfbmV4dF9lcnJvcnxpbmdyZXNfbnVtX2ZpZWxkc3xpbmdyZXNfbnVtX3Jvd3N8aW5ncmVzX3Bjb25uZWN0fGluZ3Jlc19wcmVwYXJlfGluZ3Jlc19xdWVyeXxpbmdyZXNfcmVzdWx0X3NlZWt8aW5ncmVzX3JvbGxiYWNrfGluZ3Jlc19zZXRfZW52aXJvbm1lbnR8aW5ncmVzX3VuYnVmZmVyZWRfcXVlcnl8aW5pX2FsdGVyfGluaV9nZXR8aW5pX2dldF9hbGx8aW5pX3Jlc3RvcmV8aW5pX3NldHxpbm5hbWVzcGFjZXxpbm90aWZ5X2FkZF93YXRjaHxpbm90aWZ5X2luaXR8aW5vdGlmeV9xdWV1ZV9sZW58aW5vdGlmeV9yZWFkfGlub3RpZnlfcm1fd2F0Y2h8aW50ZXJmYWNlX2V4aXN0c3xpbnRsX2Vycm9yX25hbWV8aW50bF9nZXRfZXJyb3JfY29kZXxpbnRsX2dldF9lcnJvcl9tZXNzYWdlfGludGxfaXNfZmFpbHVyZXxpbnRsZGF0ZWZvcm1hdHRlcnxpbnR2YWx8aW52YWxpZGFyZ3VtZW50ZXhjZXB0aW9ufGludm9rZXxpbnZva2VhcmdzfGlwMmxvbmd8aXB0Y2VtYmVkfGlwdGNwYXJzZXxpc19hfGlzX2FycmF5fGlzX2Jvb2x8aXNfY2FsbGFibGV8aXNfZGlyfGlzX2RvdWJsZXxpc19leGVjdXRhYmxlfGlzX2ZpbGV8aXNfZmluaXRlfGlzX2Zsb2F0fGlzX2luZmluaXRlfGlzX2ludHxpc19pbnRlZ2VyfGlzX2xpbmt8aXNfbG9uZ3xpc19uYW58aXNfbnVsbHxpc19udW1lcmljfGlzX29iamVjdHxpc19yZWFkYWJsZXxpc19yZWFsfGlzX3Jlc291cmNlfGlzX3NjYWxhcnxpc19zb2FwX2ZhdWx0fGlzX3N0cmluZ3xpc19zdWJjbGFzc19vZnxpc191cGxvYWRlZF9maWxlfGlzX3dyaXRhYmxlfGlzX3dyaXRlYWJsZXxpc2Fic3RyYWN0fGlzY2xvbmVhYmxlfGlzZGlzYWJsZWR8aXNmaW5hbHxpc2luc3RhbmNlfGlzaW5zdGFudGlhYmxlfGlzaW50ZXJmYWNlfGlzaW50ZXJuYWx8aXNpdGVyYXRlYWJsZXxpc3NldHxpc3N1YmNsYXNzb2Z8aXN1c2VyZGVmaW5lZHxpdGVyYXRvcnxpdGVyYXRvcl9hcHBseXxpdGVyYXRvcl9jb3VudHxpdGVyYXRvcl90b19hcnJheXxpdGVyYXRvcmFnZ3JlZ2F0ZXxpdGVyYXRvcml0ZXJhdG9yfGphdmFfbGFzdF9leGNlcHRpb25fY2xlYXJ8amF2YV9sYXN0X2V4Y2VwdGlvbl9nZXR8amRkYXlvZndlZWt8amRtb250aG5hbWV8amR0b2ZyZW5jaHxqZHRvZ3JlZ29yaWFufGpkdG9qZXdpc2h8amR0b2p1bGlhbnxqZHRvdW5peHxqZXdpc2h0b2pkfGpvaW58anBlZzJ3Ym1wfGpzb25fZGVjb2RlfGpzb25fZW5jb2RlfGpzb25fbGFzdF9lcnJvcnxqc29uc2VyaWFsaXphYmxlfGp1ZHl8anVkeV90eXBlfGp1ZHlfdmVyc2lvbnxqdWxpYW50b2pkfGthZG01X2NocGFzc19wcmluY2lwYWx8a2FkbTVfY3JlYXRlX3ByaW5jaXBhbHxrYWRtNV9kZWxldGVfcHJpbmNpcGFsfGthZG01X2Rlc3Ryb3l8a2FkbTVfZmx1c2h8a2FkbTVfZ2V0X3BvbGljaWVzfGthZG01X2dldF9wcmluY2lwYWx8a2FkbTVfZ2V0X3ByaW5jaXBhbHN8a2FkbTVfaW5pdF93aXRoX3Bhc3N3b3JkfGthZG01X21vZGlmeV9wcmluY2lwYWx8a2V5fGtyc29ydHxrc29ydHxsY2ZpcnN0fGxjZ192YWx1ZXxsY2hncnB8bGNob3dufGxkYXBfODg1OV90b190NjF8bGRhcF9hZGR8bGRhcF9iaW5kfGxkYXBfY2xvc2V8bGRhcF9jb21wYXJlfGxkYXBfY29ubmVjdHxsZGFwX2NvdW50X2VudHJpZXN8bGRhcF9kZWxldGV8bGRhcF9kbjJ1Zm58bGRhcF9lcnIyc3RyfGxkYXBfZXJybm98bGRhcF9lcnJvcnxsZGFwX2V4cGxvZGVfZG58bGRhcF9maXJzdF9hdHRyaWJ1dGV8bGRhcF9maXJzdF9lbnRyeXxsZGFwX2ZpcnN0X3JlZmVyZW5jZXxsZGFwX2ZyZWVfcmVzdWx0fGxkYXBfZ2V0X2F0dHJpYnV0ZXN8bGRhcF9nZXRfZG58bGRhcF9nZXRfZW50cmllc3xsZGFwX2dldF9vcHRpb258bGRhcF9nZXRfdmFsdWVzfGxkYXBfZ2V0X3ZhbHVlc19sZW58bGRhcF9saXN0fGxkYXBfbW9kX2FkZHxsZGFwX21vZF9kZWx8bGRhcF9tb2RfcmVwbGFjZXxsZGFwX21vZGlmeXxsZGFwX25leHRfYXR0cmlidXRlfGxkYXBfbmV4dF9lbnRyeXxsZGFwX25leHRfcmVmZXJlbmNlfGxkYXBfcGFyc2VfcmVmZXJlbmNlfGxkYXBfcGFyc2VfcmVzdWx0fGxkYXBfcmVhZHxsZGFwX3JlbmFtZXxsZGFwX3Nhc2xfYmluZHxsZGFwX3NlYXJjaHxsZGFwX3NldF9vcHRpb258bGRhcF9zZXRfcmViaW5kX3Byb2N8bGRhcF9zb3J0fGxkYXBfc3RhcnRfdGxzfGxkYXBfdDYxX3RvXzg4NTl8bGRhcF91bmJpbmR8bGVuZ3RoZXhjZXB0aW9ufGxldmVuc2h0ZWlufGxpYnhtbF9jbGVhcl9lcnJvcnN8bGlieG1sX2Rpc2FibGVfZW50aXR5X2xvYWRlcnxsaWJ4bWxfZ2V0X2Vycm9yc3xsaWJ4bWxfZ2V0X2xhc3RfZXJyb3J8bGlieG1sX3NldF9zdHJlYW1zX2NvbnRleHR8bGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnN8bGlieG1sZXJyb3J8bGltaXRpdGVyYXRvcnxsaW5rfGxpbmtpbmZvfGxpc3R8bG9jYWxlfGxvY2FsZWNvbnZ8bG9jYWx0aW1lfGxvZ3xsb2cxMHxsb2cxcHxsb2dpY2V4Y2VwdGlvbnxsb25nMmlwfGxzdGF0fGx0cmltfGx6Zl9jb21wcmVzc3xsemZfZGVjb21wcmVzc3xsemZfb3B0aW1pemVkX2ZvcnxtX2NoZWNrc3RhdHVzfG1fY29tcGxldGVhdXRob3JpemF0aW9uc3xtX2Nvbm5lY3R8bV9jb25uZWN0aW9uZXJyb3J8bV9kZWxldGV0cmFuc3xtX2Rlc3Ryb3ljb25ufG1fZGVzdHJveWVuZ2luZXxtX2dldGNlbGx8bV9nZXRjZWxsYnludW18bV9nZXRjb21tYWRlbGltaXRlZHxtX2dldGhlYWRlcnxtX2luaXRjb25ufG1faW5pdGVuZ2luZXxtX2lzY29tbWFkZWxpbWl0ZWR8bV9tYXhjb25udGltZW91dHxtX21vbml0b3J8bV9udW1jb2x1bW5zfG1fbnVtcm93c3xtX3BhcnNlY29tbWFkZWxpbWl0ZWR8bV9yZXNwb25zZWtleXN8bV9yZXNwb25zZXBhcmFtfG1fcmV0dXJuc3RhdHVzfG1fc2V0YmxvY2tpbmd8bV9zZXRkcm9wZmlsZXxtX3NldGlwfG1fc2V0c3NsfG1fc2V0c3NsX2NhZmlsZXxtX3NldHNzbF9maWxlc3xtX3NldHRpbWVvdXR8bV9zc2xjZXJ0X2dlbl9oYXNofG1fdHJhbnNhY3Rpb25zc2VudHxtX3RyYW5zaW5xdWV1ZXxtX3RyYW5za2V5dmFsfG1fdHJhbnNuZXd8bV90cmFuc3NlbmR8bV91d2FpdHxtX3ZhbGlkYXRlaWRlbnRpZmllcnxtX3ZlcmlmeWNvbm5lY3Rpb258bV92ZXJpZnlzc2xjZXJ0fG1hZ2ljX3F1b3Rlc19ydW50aW1lfG1haWx8bWFpbHBhcnNlX2RldGVybWluZV9iZXN0X3hmZXJfZW5jb2Rpbmd8bWFpbHBhcnNlX21zZ19jcmVhdGV8bWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnR8bWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnRfZmlsZXxtYWlscGFyc2VfbXNnX2V4dHJhY3Rfd2hvbGVfcGFydF9maWxlfG1haWxwYXJzZV9tc2dfZnJlZXxtYWlscGFyc2VfbXNnX2dldF9wYXJ0fG1haWxwYXJzZV9tc2dfZ2V0X3BhcnRfZGF0YXxtYWlscGFyc2VfbXNnX2dldF9zdHJ1Y3R1cmV8bWFpbHBhcnNlX21zZ19wYXJzZXxtYWlscGFyc2VfbXNnX3BhcnNlX2ZpbGV8bWFpbHBhcnNlX3JmYzgyMl9wYXJzZV9hZGRyZXNzZXN8bWFpbHBhcnNlX3N0cmVhbV9lbmNvZGV8bWFpbHBhcnNlX3V1ZGVjb2RlX2FsbHxtYWlufG1heHxtYXhkYl9hZmZlY3RlZF9yb3dzfG1heGRiX2F1dG9jb21taXR8bWF4ZGJfYmluZF9wYXJhbXxtYXhkYl9iaW5kX3Jlc3VsdHxtYXhkYl9jaGFuZ2VfdXNlcnxtYXhkYl9jaGFyYWN0ZXJfc2V0X25hbWV8bWF4ZGJfY2xpZW50X2VuY29kaW5nfG1heGRiX2Nsb3NlfG1heGRiX2Nsb3NlX2xvbmdfZGF0YXxtYXhkYl9jb21taXR8bWF4ZGJfY29ubmVjdHxtYXhkYl9jb25uZWN0X2Vycm5vfG1heGRiX2Nvbm5lY3RfZXJyb3J8bWF4ZGJfZGF0YV9zZWVrfG1heGRiX2RlYnVnfG1heGRiX2Rpc2FibGVfcmVhZHNfZnJvbV9tYXN0ZXJ8bWF4ZGJfZGlzYWJsZV9ycGxfcGFyc2V8bWF4ZGJfZHVtcF9kZWJ1Z19pbmZvfG1heGRiX2VtYmVkZGVkX2Nvbm5lY3R8bWF4ZGJfZW5hYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG1heGRiX2VuYWJsZV9ycGxfcGFyc2V8bWF4ZGJfZXJybm98bWF4ZGJfZXJyb3J8bWF4ZGJfZXNjYXBlX3N0cmluZ3xtYXhkYl9leGVjdXRlfG1heGRiX2ZldGNofG1heGRiX2ZldGNoX2FycmF5fG1heGRiX2ZldGNoX2Fzc29jfG1heGRiX2ZldGNoX2ZpZWxkfG1heGRiX2ZldGNoX2ZpZWxkX2RpcmVjdHxtYXhkYl9mZXRjaF9maWVsZHN8bWF4ZGJfZmV0Y2hfbGVuZ3Roc3xtYXhkYl9mZXRjaF9vYmplY3R8bWF4ZGJfZmV0Y2hfcm93fG1heGRiX2ZpZWxkX2NvdW50fG1heGRiX2ZpZWxkX3NlZWt8bWF4ZGJfZmllbGRfdGVsbHxtYXhkYl9mcmVlX3Jlc3VsdHxtYXhkYl9nZXRfY2xpZW50X2luZm98bWF4ZGJfZ2V0X2NsaWVudF92ZXJzaW9ufG1heGRiX2dldF9ob3N0X2luZm98bWF4ZGJfZ2V0X21ldGFkYXRhfG1heGRiX2dldF9wcm90b19pbmZvfG1heGRiX2dldF9zZXJ2ZXJfaW5mb3xtYXhkYl9nZXRfc2VydmVyX3ZlcnNpb258bWF4ZGJfaW5mb3xtYXhkYl9pbml0fG1heGRiX2luc2VydF9pZHxtYXhkYl9raWxsfG1heGRiX21hc3Rlcl9xdWVyeXxtYXhkYl9tb3JlX3Jlc3VsdHN8bWF4ZGJfbXVsdGlfcXVlcnl8bWF4ZGJfbmV4dF9yZXN1bHR8bWF4ZGJfbnVtX2ZpZWxkc3xtYXhkYl9udW1fcm93c3xtYXhkYl9vcHRpb25zfG1heGRiX3BhcmFtX2NvdW50fG1heGRiX3Bpbmd8bWF4ZGJfcHJlcGFyZXxtYXhkYl9xdWVyeXxtYXhkYl9yZWFsX2Nvbm5lY3R8bWF4ZGJfcmVhbF9lc2NhcGVfc3RyaW5nfG1heGRiX3JlYWxfcXVlcnl8bWF4ZGJfcmVwb3J0fG1heGRiX3JvbGxiYWNrfG1heGRiX3JwbF9wYXJzZV9lbmFibGVkfG1heGRiX3JwbF9wcm9iZXxtYXhkYl9ycGxfcXVlcnlfdHlwZXxtYXhkYl9zZWxlY3RfZGJ8bWF4ZGJfc2VuZF9sb25nX2RhdGF8bWF4ZGJfc2VuZF9xdWVyeXxtYXhkYl9zZXJ2ZXJfZW5kfG1heGRiX3NlcnZlcl9pbml0fG1heGRiX3NldF9vcHR8bWF4ZGJfc3Fsc3RhdGV8bWF4ZGJfc3NsX3NldHxtYXhkYl9zdGF0fG1heGRiX3N0bXRfYWZmZWN0ZWRfcm93c3xtYXhkYl9zdG10X2JpbmRfcGFyYW18bWF4ZGJfc3RtdF9iaW5kX3Jlc3VsdHxtYXhkYl9zdG10X2Nsb3NlfG1heGRiX3N0bXRfY2xvc2VfbG9uZ19kYXRhfG1heGRiX3N0bXRfZGF0YV9zZWVrfG1heGRiX3N0bXRfZXJybm98bWF4ZGJfc3RtdF9lcnJvcnxtYXhkYl9zdG10X2V4ZWN1dGV8bWF4ZGJfc3RtdF9mZXRjaHxtYXhkYl9zdG10X2ZyZWVfcmVzdWx0fG1heGRiX3N0bXRfaW5pdHxtYXhkYl9zdG10X251bV9yb3dzfG1heGRiX3N0bXRfcGFyYW1fY291bnR8bWF4ZGJfc3RtdF9wcmVwYXJlfG1heGRiX3N0bXRfcmVzZXR8bWF4ZGJfc3RtdF9yZXN1bHRfbWV0YWRhdGF8bWF4ZGJfc3RtdF9zZW5kX2xvbmdfZGF0YXxtYXhkYl9zdG10X3NxbHN0YXRlfG1heGRiX3N0bXRfc3RvcmVfcmVzdWx0fG1heGRiX3N0b3JlX3Jlc3VsdHxtYXhkYl90aHJlYWRfaWR8bWF4ZGJfdGhyZWFkX3NhZmV8bWF4ZGJfdXNlX3Jlc3VsdHxtYXhkYl93YXJuaW5nX2NvdW50fG1iX2NoZWNrX2VuY29kaW5nfG1iX2NvbnZlcnRfY2FzZXxtYl9jb252ZXJ0X2VuY29kaW5nfG1iX2NvbnZlcnRfa2FuYXxtYl9jb252ZXJ0X3ZhcmlhYmxlc3xtYl9kZWNvZGVfbWltZWhlYWRlcnxtYl9kZWNvZGVfbnVtZXJpY2VudGl0eXxtYl9kZXRlY3RfZW5jb2Rpbmd8bWJfZGV0ZWN0X29yZGVyfG1iX2VuY29kZV9taW1laGVhZGVyfG1iX2VuY29kZV9udW1lcmljZW50aXR5fG1iX2VuY29kaW5nX2FsaWFzZXN8bWJfZXJlZ3xtYl9lcmVnX21hdGNofG1iX2VyZWdfcmVwbGFjZXxtYl9lcmVnX3NlYXJjaHxtYl9lcmVnX3NlYXJjaF9nZXRwb3N8bWJfZXJlZ19zZWFyY2hfZ2V0cmVnc3xtYl9lcmVnX3NlYXJjaF9pbml0fG1iX2VyZWdfc2VhcmNoX3Bvc3xtYl9lcmVnX3NlYXJjaF9yZWdzfG1iX2VyZWdfc2VhcmNoX3NldHBvc3xtYl9lcmVnaXxtYl9lcmVnaV9yZXBsYWNlfG1iX2dldF9pbmZvfG1iX2h0dHBfaW5wdXR8bWJfaHR0cF9vdXRwdXR8bWJfaW50ZXJuYWxfZW5jb2Rpbmd8bWJfbGFuZ3VhZ2V8bWJfbGlzdF9lbmNvZGluZ3N8bWJfb3V0cHV0X2hhbmRsZXJ8bWJfcGFyc2Vfc3RyfG1iX3ByZWZlcnJlZF9taW1lX25hbWV8bWJfcmVnZXhfZW5jb2Rpbmd8bWJfcmVnZXhfc2V0X29wdGlvbnN8bWJfc2VuZF9tYWlsfG1iX3NwbGl0fG1iX3N0cmN1dHxtYl9zdHJpbXdpZHRofG1iX3N0cmlwb3N8bWJfc3RyaXN0cnxtYl9zdHJsZW58bWJfc3RycG9zfG1iX3N0cnJjaHJ8bWJfc3RycmljaHJ8bWJfc3Rycmlwb3N8bWJfc3RycnBvc3xtYl9zdHJzdHJ8bWJfc3RydG9sb3dlcnxtYl9zdHJ0b3VwcGVyfG1iX3N0cndpZHRofG1iX3N1YnN0aXR1dGVfY2hhcmFjdGVyfG1iX3N1YnN0cnxtYl9zdWJzdHJfY291bnR8bWNyeXB0X2NiY3xtY3J5cHRfY2ZifG1jcnlwdF9jcmVhdGVfaXZ8bWNyeXB0X2RlY3J5cHR8bWNyeXB0X2VjYnxtY3J5cHRfZW5jX2dldF9hbGdvcml0aG1zX25hbWV8bWNyeXB0X2VuY19nZXRfYmxvY2tfc2l6ZXxtY3J5cHRfZW5jX2dldF9pdl9zaXplfG1jcnlwdF9lbmNfZ2V0X2tleV9zaXplfG1jcnlwdF9lbmNfZ2V0X21vZGVzX25hbWV8bWNyeXB0X2VuY19nZXRfc3VwcG9ydGVkX2tleV9zaXplc3xtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobXxtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlfG1jcnlwdF9lbmNfaXNfYmxvY2tfbW9kZXxtY3J5cHRfZW5jX3NlbGZfdGVzdHxtY3J5cHRfZW5jcnlwdHxtY3J5cHRfZ2VuZXJpY3xtY3J5cHRfZ2VuZXJpY19kZWluaXR8bWNyeXB0X2dlbmVyaWNfZW5kfG1jcnlwdF9nZW5lcmljX2luaXR8bWNyeXB0X2dldF9ibG9ja19zaXplfG1jcnlwdF9nZXRfY2lwaGVyX25hbWV8bWNyeXB0X2dldF9pdl9zaXplfG1jcnlwdF9nZXRfa2V5X3NpemV8bWNyeXB0X2xpc3RfYWxnb3JpdGhtc3xtY3J5cHRfbGlzdF9tb2Rlc3xtY3J5cHRfbW9kdWxlX2Nsb3NlfG1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fYmxvY2tfc2l6ZXxtY3J5cHRfbW9kdWxlX2dldF9hbGdvX2tleV9zaXplfG1jcnlwdF9tb2R1bGVfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXN8bWNyeXB0X21vZHVsZV9pc19ibG9ja19hbGdvcml0aG18bWNyeXB0X21vZHVsZV9pc19ibG9ja19hbGdvcml0aG1fbW9kZXxtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX21vZGV8bWNyeXB0X21vZHVsZV9vcGVufG1jcnlwdF9tb2R1bGVfc2VsZl90ZXN0fG1jcnlwdF9vZmJ8bWQ1fG1kNV9maWxlfG1kZWNyeXB0X2dlbmVyaWN8bWVtY2FjaGV8bWVtY2FjaGVfZGVidWd8bWVtY2FjaGVkfG1lbW9yeV9nZXRfcGVha191c2FnZXxtZW1vcnlfZ2V0X3VzYWdlfG1lc3NhZ2Vmb3JtYXR0ZXJ8bWV0YXBob25lfG1ldGhvZF9leGlzdHN8bWhhc2h8bWhhc2hfY291bnR8bWhhc2hfZ2V0X2Jsb2NrX3NpemV8bWhhc2hfZ2V0X2hhc2hfbmFtZXxtaGFzaF9rZXlnZW5fczJrfG1pY3JvdGltZXxtaW1lX2NvbnRlbnRfdHlwZXxtaW58bWluZ19rZXlwcmVzc3xtaW5nX3NldGN1YmljdGhyZXNob2xkfG1pbmdfc2V0c2NhbGV8bWluZ19zZXRzd2Zjb21wcmVzc2lvbnxtaW5nX3VzZWNvbnN0YW50c3xtaW5nX3VzZXN3ZnZlcnNpb258bWtkaXJ8bWt0aW1lfG1vbmV5X2Zvcm1hdHxtb25nb3xtb25nb2JpbmRhdGF8bW9uZ29jb2RlfG1vbmdvY29sbGVjdGlvbnxtb25nb2Nvbm5lY3Rpb25leGNlcHRpb258bW9uZ29jdXJzb3J8bW9uZ29jdXJzb3JleGNlcHRpb258bW9uZ29jdXJzb3J0aW1lb3V0ZXhjZXB0aW9ufG1vbmdvZGF0ZXxtb25nb2RifG1vbmdvZGJyZWZ8bW9uZ29leGNlcHRpb258bW9uZ29ncmlkZnN8bW9uZ29ncmlkZnNjdXJzb3J8bW9uZ29ncmlkZnNleGNlcHRpb258bW9uZ29ncmlkZnNmaWxlfG1vbmdvaWR8bW9uZ29pbnQzMnxtb25nb2ludDY0fG1vbmdvbWF4a2V5fG1vbmdvbWlua2V5fG1vbmdvcmVnZXh8bW9uZ290aW1lc3RhbXB8bW92ZV91cGxvYWRlZF9maWxlfG1wZWdmaWxlfG1xc2VyaWVzX2JhY2t8bXFzZXJpZXNfYmVnaW58bXFzZXJpZXNfY2xvc2V8bXFzZXJpZXNfY21pdHxtcXNlcmllc19jb25ufG1xc2VyaWVzX2Nvbm54fG1xc2VyaWVzX2Rpc2N8bXFzZXJpZXNfZ2V0fG1xc2VyaWVzX2lucXxtcXNlcmllc19vcGVufG1xc2VyaWVzX3B1dHxtcXNlcmllc19wdXQxfG1xc2VyaWVzX3NldHxtcXNlcmllc19zdHJlcnJvcnxtc2Vzc2lvbl9jb25uZWN0fG1zZXNzaW9uX2NvdW50fG1zZXNzaW9uX2NyZWF0ZXxtc2Vzc2lvbl9kZXN0cm95fG1zZXNzaW9uX2Rpc2Nvbm5lY3R8bXNlc3Npb25fZmluZHxtc2Vzc2lvbl9nZXR8bXNlc3Npb25fZ2V0X2FycmF5fG1zZXNzaW9uX2dldF9kYXRhfG1zZXNzaW9uX2luY3xtc2Vzc2lvbl9saXN0fG1zZXNzaW9uX2xpc3R2YXJ8bXNlc3Npb25fbG9ja3xtc2Vzc2lvbl9wbHVnaW58bXNlc3Npb25fcmFuZHN0cnxtc2Vzc2lvbl9zZXR8bXNlc3Npb25fc2V0X2FycmF5fG1zZXNzaW9uX3NldF9kYXRhfG1zZXNzaW9uX3RpbWVvdXR8bXNlc3Npb25fdW5pcXxtc2Vzc2lvbl91bmxvY2t8bXNnX2dldF9xdWV1ZXxtc2dfcXVldWVfZXhpc3RzfG1zZ19yZWNlaXZlfG1zZ19yZW1vdmVfcXVldWV8bXNnX3NlbmR8bXNnX3NldF9xdWV1ZXxtc2dfc3RhdF9xdWV1ZXxtc3FsfG1zcWxfYWZmZWN0ZWRfcm93c3xtc3FsX2Nsb3NlfG1zcWxfY29ubmVjdHxtc3FsX2NyZWF0ZV9kYnxtc3FsX2NyZWF0ZWRifG1zcWxfZGF0YV9zZWVrfG1zcWxfZGJfcXVlcnl8bXNxbF9kYm5hbWV8bXNxbF9kcm9wX2RifG1zcWxfZXJyb3J8bXNxbF9mZXRjaF9hcnJheXxtc3FsX2ZldGNoX2ZpZWxkfG1zcWxfZmV0Y2hfb2JqZWN0fG1zcWxfZmV0Y2hfcm93fG1zcWxfZmllbGRfZmxhZ3N8bXNxbF9maWVsZF9sZW58bXNxbF9maWVsZF9uYW1lfG1zcWxfZmllbGRfc2Vla3xtc3FsX2ZpZWxkX3RhYmxlfG1zcWxfZmllbGRfdHlwZXxtc3FsX2ZpZWxkZmxhZ3N8bXNxbF9maWVsZGxlbnxtc3FsX2ZpZWxkbmFtZXxtc3FsX2ZpZWxkdGFibGV8bXNxbF9maWVsZHR5cGV8bXNxbF9mcmVlX3Jlc3VsdHxtc3FsX2xpc3RfZGJzfG1zcWxfbGlzdF9maWVsZHN8bXNxbF9saXN0X3RhYmxlc3xtc3FsX251bV9maWVsZHN8bXNxbF9udW1fcm93c3xtc3FsX251bWZpZWxkc3xtc3FsX251bXJvd3N8bXNxbF9wY29ubmVjdHxtc3FsX3F1ZXJ5fG1zcWxfcmVnY2FzZXxtc3FsX3Jlc3VsdHxtc3FsX3NlbGVjdF9kYnxtc3FsX3RhYmxlbmFtZXxtc3NxbF9iaW5kfG1zc3FsX2Nsb3NlfG1zc3FsX2Nvbm5lY3R8bXNzcWxfZGF0YV9zZWVrfG1zc3FsX2V4ZWN1dGV8bXNzcWxfZmV0Y2hfYXJyYXl8bXNzcWxfZmV0Y2hfYXNzb2N8bXNzcWxfZmV0Y2hfYmF0Y2h8bXNzcWxfZmV0Y2hfZmllbGR8bXNzcWxfZmV0Y2hfb2JqZWN0fG1zc3FsX2ZldGNoX3Jvd3xtc3NxbF9maWVsZF9sZW5ndGh8bXNzcWxfZmllbGRfbmFtZXxtc3NxbF9maWVsZF9zZWVrfG1zc3FsX2ZpZWxkX3R5cGV8bXNzcWxfZnJlZV9yZXN1bHR8bXNzcWxfZnJlZV9zdGF0ZW1lbnR8bXNzcWxfZ2V0X2xhc3RfbWVzc2FnZXxtc3NxbF9ndWlkX3N0cmluZ3xtc3NxbF9pbml0fG1zc3FsX21pbl9lcnJvcl9zZXZlcml0eXxtc3NxbF9taW5fbWVzc2FnZV9zZXZlcml0eXxtc3NxbF9uZXh0X3Jlc3VsdHxtc3NxbF9udW1fZmllbGRzfG1zc3FsX251bV9yb3dzfG1zc3FsX3Bjb25uZWN0fG1zc3FsX3F1ZXJ5fG1zc3FsX3Jlc3VsdHxtc3NxbF9yb3dzX2FmZmVjdGVkfG1zc3FsX3NlbGVjdF9kYnxtdF9nZXRyYW5kbWF4fG10X3JhbmR8bXRfc3JhbmR8bXVsdGlwbGVpdGVyYXRvcnxteXNxbF9hZmZlY3RlZF9yb3dzfG15c3FsX2NsaWVudF9lbmNvZGluZ3xteXNxbF9jbG9zZXxteXNxbF9jb25uZWN0fG15c3FsX2NyZWF0ZV9kYnxteXNxbF9kYXRhX3NlZWt8bXlzcWxfZGJfbmFtZXxteXNxbF9kYl9xdWVyeXxteXNxbF9kcm9wX2RifG15c3FsX2Vycm5vfG15c3FsX2Vycm9yfG15c3FsX2VzY2FwZV9zdHJpbmd8bXlzcWxfZmV0Y2hfYXJyYXl8bXlzcWxfZmV0Y2hfYXNzb2N8bXlzcWxfZmV0Y2hfZmllbGR8bXlzcWxfZmV0Y2hfbGVuZ3Roc3xteXNxbF9mZXRjaF9vYmplY3R8bXlzcWxfZmV0Y2hfcm93fG15c3FsX2ZpZWxkX2ZsYWdzfG15c3FsX2ZpZWxkX2xlbnxteXNxbF9maWVsZF9uYW1lfG15c3FsX2ZpZWxkX3NlZWt8bXlzcWxfZmllbGRfdGFibGV8bXlzcWxfZmllbGRfdHlwZXxteXNxbF9mcmVlX3Jlc3VsdHxteXNxbF9nZXRfY2xpZW50X2luZm98bXlzcWxfZ2V0X2hvc3RfaW5mb3xteXNxbF9nZXRfcHJvdG9faW5mb3xteXNxbF9nZXRfc2VydmVyX2luZm98bXlzcWxfaW5mb3xteXNxbF9pbnNlcnRfaWR8bXlzcWxfbGlzdF9kYnN8bXlzcWxfbGlzdF9maWVsZHN8bXlzcWxfbGlzdF9wcm9jZXNzZXN8bXlzcWxfbGlzdF90YWJsZXN8bXlzcWxfbnVtX2ZpZWxkc3xteXNxbF9udW1fcm93c3xteXNxbF9wY29ubmVjdHxteXNxbF9waW5nfG15c3FsX3F1ZXJ5fG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZ3xteXNxbF9yZXN1bHR8bXlzcWxfc2VsZWN0X2RifG15c3FsX3NldF9jaGFyc2V0fG15c3FsX3N0YXR8bXlzcWxfdGFibGVuYW1lfG15c3FsX3RocmVhZF9pZHxteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5fG15c3FsaXxteXNxbGlfYmluZF9wYXJhbXxteXNxbGlfYmluZF9yZXN1bHR8bXlzcWxpX2NsaWVudF9lbmNvZGluZ3xteXNxbGlfY29ubmVjdHxteXNxbGlfZGlzYWJsZV9yZWFkc19mcm9tX21hc3RlcnxteXNxbGlfZGlzYWJsZV9ycGxfcGFyc2V8bXlzcWxpX2RyaXZlcnxteXNxbGlfZW5hYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG15c3FsaV9lbmFibGVfcnBsX3BhcnNlfG15c3FsaV9lc2NhcGVfc3RyaW5nfG15c3FsaV9leGVjdXRlfG15c3FsaV9mZXRjaHxteXNxbGlfZ2V0X21ldGFkYXRhfG15c3FsaV9tYXN0ZXJfcXVlcnl8bXlzcWxpX3BhcmFtX2NvdW50fG15c3FsaV9yZXBvcnR8bXlzcWxpX3Jlc3VsdHxteXNxbGlfcnBsX3BhcnNlX2VuYWJsZWR8bXlzcWxpX3JwbF9wcm9iZXxteXNxbGlfcnBsX3F1ZXJ5X3R5cGV8bXlzcWxpX3NlbmRfbG9uZ19kYXRhfG15c3FsaV9zZW5kX3F1ZXJ5fG15c3FsaV9zZXRfb3B0fG15c3FsaV9zbGF2ZV9xdWVyeXxteXNxbGlfc3RtdHxteXNxbGlfd2FybmluZ3xteXNxbG5kX21zX2dldF9zdGF0c3xteXNxbG5kX21zX3F1ZXJ5X2lzX3NlbGVjdHxteXNxbG5kX21zX3NldF91c2VyX3BpY2tfc2VydmVyfG15c3FsbmRfcWNfY2hhbmdlX2hhbmRsZXJ8bXlzcWxuZF9xY19jbGVhcl9jYWNoZXxteXNxbG5kX3FjX2dldF9jYWNoZV9pbmZvfG15c3FsbmRfcWNfZ2V0X2NvcmVfc3RhdHN8bXlzcWxuZF9xY19nZXRfaGFuZGxlcnxteXNxbG5kX3FjX2dldF9xdWVyeV90cmFjZV9sb2d8bXlzcWxuZF9xY19zZXRfdXNlcl9oYW5kbGVyc3xuYXRjYXNlc29ydHxuYXRzb3J0fG5jdXJzZXNfYWRkY2h8bmN1cnNlc19hZGRjaG5zdHJ8bmN1cnNlc19hZGRjaHN0cnxuY3Vyc2VzX2FkZG5zdHJ8bmN1cnNlc19hZGRzdHJ8bmN1cnNlc19hc3N1bWVfZGVmYXVsdF9jb2xvcnN8bmN1cnNlc19hdHRyb2ZmfG5jdXJzZXNfYXR0cm9ufG5jdXJzZXNfYXR0cnNldHxuY3Vyc2VzX2JhdWRyYXRlfG5jdXJzZXNfYmVlcHxuY3Vyc2VzX2JrZ2R8bmN1cnNlc19ia2dkc2V0fG5jdXJzZXNfYm9yZGVyfG5jdXJzZXNfYm90dG9tX3BhbmVsfG5jdXJzZXNfY2FuX2NoYW5nZV9jb2xvcnxuY3Vyc2VzX2NicmVha3xuY3Vyc2VzX2NsZWFyfG5jdXJzZXNfY2xydG9ib3R8bmN1cnNlc19jbHJ0b2VvbHxuY3Vyc2VzX2NvbG9yX2NvbnRlbnR8bmN1cnNlc19jb2xvcl9zZXR8bmN1cnNlc19jdXJzX3NldHxuY3Vyc2VzX2RlZl9wcm9nX21vZGV8bmN1cnNlc19kZWZfc2hlbGxfbW9kZXxuY3Vyc2VzX2RlZmluZV9rZXl8bmN1cnNlc19kZWxfcGFuZWx8bmN1cnNlc19kZWxheV9vdXRwdXR8bmN1cnNlc19kZWxjaHxuY3Vyc2VzX2RlbGV0ZWxufG5jdXJzZXNfZGVsd2lufG5jdXJzZXNfZG91cGRhdGV8bmN1cnNlc19lY2hvfG5jdXJzZXNfZWNob2NoYXJ8bmN1cnNlc19lbmR8bmN1cnNlc19lcmFzZXxuY3Vyc2VzX2VyYXNlY2hhcnxuY3Vyc2VzX2ZpbHRlcnxuY3Vyc2VzX2ZsYXNofG5jdXJzZXNfZmx1c2hpbnB8bmN1cnNlc19nZXRjaHxuY3Vyc2VzX2dldG1heHl4fG5jdXJzZXNfZ2V0bW91c2V8bmN1cnNlc19nZXR5eHxuY3Vyc2VzX2hhbGZkZWxheXxuY3Vyc2VzX2hhc19jb2xvcnN8bmN1cnNlc19oYXNfaWN8bmN1cnNlc19oYXNfaWx8bmN1cnNlc19oYXNfa2V5fG5jdXJzZXNfaGlkZV9wYW5lbHxuY3Vyc2VzX2hsaW5lfG5jdXJzZXNfaW5jaHxuY3Vyc2VzX2luaXR8bmN1cnNlc19pbml0X2NvbG9yfG5jdXJzZXNfaW5pdF9wYWlyfG5jdXJzZXNfaW5zY2h8bmN1cnNlc19pbnNkZWxsbnxuY3Vyc2VzX2luc2VydGxufG5jdXJzZXNfaW5zc3RyfG5jdXJzZXNfaW5zdHJ8bmN1cnNlc19pc2VuZHdpbnxuY3Vyc2VzX2tleW9rfG5jdXJzZXNfa2V5cGFkfG5jdXJzZXNfa2lsbGNoYXJ8bmN1cnNlc19sb25nbmFtZXxuY3Vyc2VzX21ldGF8bmN1cnNlc19tb3VzZV90cmFmb3xuY3Vyc2VzX21vdXNlaW50ZXJ2YWx8bmN1cnNlc19tb3VzZW1hc2t8bmN1cnNlc19tb3ZlfG5jdXJzZXNfbW92ZV9wYW5lbHxuY3Vyc2VzX212YWRkY2h8bmN1cnNlc19tdmFkZGNobnN0cnxuY3Vyc2VzX212YWRkY2hzdHJ8bmN1cnNlc19tdmFkZG5zdHJ8bmN1cnNlc19tdmFkZHN0cnxuY3Vyc2VzX212Y3VyfG5jdXJzZXNfbXZkZWxjaHxuY3Vyc2VzX212Z2V0Y2h8bmN1cnNlc19tdmhsaW5lfG5jdXJzZXNfbXZpbmNofG5jdXJzZXNfbXZ2bGluZXxuY3Vyc2VzX212d2FkZHN0cnxuY3Vyc2VzX25hcG1zfG5jdXJzZXNfbmV3X3BhbmVsfG5jdXJzZXNfbmV3cGFkfG5jdXJzZXNfbmV3d2lufG5jdXJzZXNfbmx8bmN1cnNlc19ub2NicmVha3xuY3Vyc2VzX25vZWNob3xuY3Vyc2VzX25vbmx8bmN1cnNlc19ub3FpZmx1c2h8bmN1cnNlc19ub3Jhd3xuY3Vyc2VzX3BhaXJfY29udGVudHxuY3Vyc2VzX3BhbmVsX2Fib3ZlfG5jdXJzZXNfcGFuZWxfYmVsb3d8bmN1cnNlc19wYW5lbF93aW5kb3d8bmN1cnNlc19wbm91dHJlZnJlc2h8bmN1cnNlc19wcmVmcmVzaHxuY3Vyc2VzX3B1dHB8bmN1cnNlc19xaWZsdXNofG5jdXJzZXNfcmF3fG5jdXJzZXNfcmVmcmVzaHxuY3Vyc2VzX3JlcGxhY2VfcGFuZWx8bmN1cnNlc19yZXNldF9wcm9nX21vZGV8bmN1cnNlc19yZXNldF9zaGVsbF9tb2RlfG5jdXJzZXNfcmVzZXR0eXxuY3Vyc2VzX3NhdmV0dHl8bmN1cnNlc19zY3JfZHVtcHxuY3Vyc2VzX3Njcl9pbml0fG5jdXJzZXNfc2NyX3Jlc3RvcmV8bmN1cnNlc19zY3Jfc2V0fG5jdXJzZXNfc2NybHxuY3Vyc2VzX3Nob3dfcGFuZWx8bmN1cnNlc19zbGtfYXR0cnxuY3Vyc2VzX3Nsa19hdHRyb2ZmfG5jdXJzZXNfc2xrX2F0dHJvbnxuY3Vyc2VzX3Nsa19hdHRyc2V0fG5jdXJzZXNfc2xrX2NsZWFyfG5jdXJzZXNfc2xrX2NvbG9yfG5jdXJzZXNfc2xrX2luaXR8bmN1cnNlc19zbGtfbm91dHJlZnJlc2h8bmN1cnNlc19zbGtfcmVmcmVzaHxuY3Vyc2VzX3Nsa19yZXN0b3JlfG5jdXJzZXNfc2xrX3NldHxuY3Vyc2VzX3Nsa190b3VjaHxuY3Vyc2VzX3N0YW5kZW5kfG5jdXJzZXNfc3RhbmRvdXR8bmN1cnNlc19zdGFydF9jb2xvcnxuY3Vyc2VzX3Rlcm1hdHRyc3xuY3Vyc2VzX3Rlcm1uYW1lfG5jdXJzZXNfdGltZW91dHxuY3Vyc2VzX3RvcF9wYW5lbHxuY3Vyc2VzX3R5cGVhaGVhZHxuY3Vyc2VzX3VuZ2V0Y2h8bmN1cnNlc191bmdldG1vdXNlfG5jdXJzZXNfdXBkYXRlX3BhbmVsc3xuY3Vyc2VzX3VzZV9kZWZhdWx0X2NvbG9yc3xuY3Vyc2VzX3VzZV9lbnZ8bmN1cnNlc191c2VfZXh0ZW5kZWRfbmFtZXN8bmN1cnNlc192aWRhdHRyfG5jdXJzZXNfdmxpbmV8bmN1cnNlc193YWRkY2h8bmN1cnNlc193YWRkc3RyfG5jdXJzZXNfd2F0dHJvZmZ8bmN1cnNlc193YXR0cm9ufG5jdXJzZXNfd2F0dHJzZXR8bmN1cnNlc193Ym9yZGVyfG5jdXJzZXNfd2NsZWFyfG5jdXJzZXNfd2NvbG9yX3NldHxuY3Vyc2VzX3dlcmFzZXxuY3Vyc2VzX3dnZXRjaHxuY3Vyc2VzX3dobGluZXxuY3Vyc2VzX3dtb3VzZV90cmFmb3xuY3Vyc2VzX3dtb3ZlfG5jdXJzZXNfd25vdXRyZWZyZXNofG5jdXJzZXNfd3JlZnJlc2h8bmN1cnNlc193c3RhbmRlbmR8bmN1cnNlc193c3RhbmRvdXR8bmN1cnNlc193dmxpbmV8bmV3aW5zdGFuY2V8bmV3aW5zdGFuY2VhcmdzfG5ld3RfYmVsbHxuZXd0X2J1dHRvbnxuZXd0X2J1dHRvbl9iYXJ8bmV3dF9jZW50ZXJlZF93aW5kb3d8bmV3dF9jaGVja2JveHxuZXd0X2NoZWNrYm94X2dldF92YWx1ZXxuZXd0X2NoZWNrYm94X3NldF9mbGFnc3xuZXd0X2NoZWNrYm94X3NldF92YWx1ZXxuZXd0X2NoZWNrYm94X3RyZWV8bmV3dF9jaGVja2JveF90cmVlX2FkZF9pdGVtfG5ld3RfY2hlY2tib3hfdHJlZV9maW5kX2l0ZW18bmV3dF9jaGVja2JveF90cmVlX2dldF9jdXJyZW50fG5ld3RfY2hlY2tib3hfdHJlZV9nZXRfZW50cnlfdmFsdWV8bmV3dF9jaGVja2JveF90cmVlX2dldF9tdWx0aV9zZWxlY3Rpb258bmV3dF9jaGVja2JveF90cmVlX2dldF9zZWxlY3Rpb258bmV3dF9jaGVja2JveF90cmVlX211bHRpfG5ld3RfY2hlY2tib3hfdHJlZV9zZXRfY3VycmVudHxuZXd0X2NoZWNrYm94X3RyZWVfc2V0X2VudHJ5fG5ld3RfY2hlY2tib3hfdHJlZV9zZXRfZW50cnlfdmFsdWV8bmV3dF9jaGVja2JveF90cmVlX3NldF93aWR0aHxuZXd0X2NsZWFyX2tleV9idWZmZXJ8bmV3dF9jbHN8bmV3dF9jb21wYWN0X2J1dHRvbnxuZXd0X2NvbXBvbmVudF9hZGRfY2FsbGJhY2t8bmV3dF9jb21wb25lbnRfdGFrZXNfZm9jdXN8bmV3dF9jcmVhdGVfZ3JpZHxuZXd0X2N1cnNvcl9vZmZ8bmV3dF9jdXJzb3Jfb258bmV3dF9kZWxheXxuZXd0X2RyYXdfZm9ybXxuZXd0X2RyYXdfcm9vdF90ZXh0fG5ld3RfZW50cnl8bmV3dF9lbnRyeV9nZXRfdmFsdWV8bmV3dF9lbnRyeV9zZXR8bmV3dF9lbnRyeV9zZXRfZmlsdGVyfG5ld3RfZW50cnlfc2V0X2ZsYWdzfG5ld3RfZmluaXNoZWR8bmV3dF9mb3JtfG5ld3RfZm9ybV9hZGRfY29tcG9uZW50fG5ld3RfZm9ybV9hZGRfY29tcG9uZW50c3xuZXd0X2Zvcm1fYWRkX2hvdF9rZXl8bmV3dF9mb3JtX2Rlc3Ryb3l8bmV3dF9mb3JtX2dldF9jdXJyZW50fG5ld3RfZm9ybV9ydW58bmV3dF9mb3JtX3NldF9iYWNrZ3JvdW5kfG5ld3RfZm9ybV9zZXRfaGVpZ2h0fG5ld3RfZm9ybV9zZXRfc2l6ZXxuZXd0X2Zvcm1fc2V0X3RpbWVyfG5ld3RfZm9ybV9zZXRfd2lkdGh8bmV3dF9mb3JtX3dhdGNoX2ZkfG5ld3RfZ2V0X3NjcmVlbl9zaXplfG5ld3RfZ3JpZF9hZGRfY29tcG9uZW50c190b19mb3JtfG5ld3RfZ3JpZF9iYXNpY193aW5kb3d8bmV3dF9ncmlkX2ZyZWV8bmV3dF9ncmlkX2dldF9zaXplfG5ld3RfZ3JpZF9oX2Nsb3NlX3N0YWNrZWR8bmV3dF9ncmlkX2hfc3RhY2tlZHxuZXd0X2dyaWRfcGxhY2V8bmV3dF9ncmlkX3NldF9maWVsZHxuZXd0X2dyaWRfc2ltcGxlX3dpbmRvd3xuZXd0X2dyaWRfdl9jbG9zZV9zdGFja2VkfG5ld3RfZ3JpZF92X3N0YWNrZWR8bmV3dF9ncmlkX3dyYXBwZWRfd2luZG93fG5ld3RfZ3JpZF93cmFwcGVkX3dpbmRvd19hdHxuZXd0X2luaXR8bmV3dF9sYWJlbHxuZXd0X2xhYmVsX3NldF90ZXh0fG5ld3RfbGlzdGJveHxuZXd0X2xpc3Rib3hfYXBwZW5kX2VudHJ5fG5ld3RfbGlzdGJveF9jbGVhcnxuZXd0X2xpc3Rib3hfY2xlYXJfc2VsZWN0aW9ufG5ld3RfbGlzdGJveF9kZWxldGVfZW50cnl8bmV3dF9saXN0Ym94X2dldF9jdXJyZW50fG5ld3RfbGlzdGJveF9nZXRfc2VsZWN0aW9ufG5ld3RfbGlzdGJveF9pbnNlcnRfZW50cnl8bmV3dF9saXN0Ym94X2l0ZW1fY291bnR8bmV3dF9saXN0Ym94X3NlbGVjdF9pdGVtfG5ld3RfbGlzdGJveF9zZXRfY3VycmVudHxuZXd0X2xpc3Rib3hfc2V0X2N1cnJlbnRfYnlfa2V5fG5ld3RfbGlzdGJveF9zZXRfZGF0YXxuZXd0X2xpc3Rib3hfc2V0X2VudHJ5fG5ld3RfbGlzdGJveF9zZXRfd2lkdGh8bmV3dF9saXN0aXRlbXxuZXd0X2xpc3RpdGVtX2dldF9kYXRhfG5ld3RfbGlzdGl0ZW1fc2V0fG5ld3Rfb3Blbl93aW5kb3d8bmV3dF9wb3BfaGVscF9saW5lfG5ld3RfcG9wX3dpbmRvd3xuZXd0X3B1c2hfaGVscF9saW5lfG5ld3RfcmFkaW9fZ2V0X2N1cnJlbnR8bmV3dF9yYWRpb2J1dHRvbnxuZXd0X3JlZHJhd19oZWxwX2xpbmV8bmV3dF9yZWZsb3dfdGV4dHxuZXd0X3JlZnJlc2h8bmV3dF9yZXNpemVfc2NyZWVufG5ld3RfcmVzdW1lfG5ld3RfcnVuX2Zvcm18bmV3dF9zY2FsZXxuZXd0X3NjYWxlX3NldHxuZXd0X3Njcm9sbGJhcl9zZXR8bmV3dF9zZXRfaGVscF9jYWxsYmFja3xuZXd0X3NldF9zdXNwZW5kX2NhbGxiYWNrfG5ld3Rfc3VzcGVuZHxuZXd0X3RleHRib3h8bmV3dF90ZXh0Ym94X2dldF9udW1fbGluZXN8bmV3dF90ZXh0Ym94X3JlZmxvd2VkfG5ld3RfdGV4dGJveF9zZXRfaGVpZ2h0fG5ld3RfdGV4dGJveF9zZXRfdGV4dHxuZXd0X3ZlcnRpY2FsX3Njcm9sbGJhcnxuZXd0X3dhaXRfZm9yX2tleXxuZXd0X3dpbl9jaG9pY2V8bmV3dF93aW5fZW50cmllc3xuZXd0X3dpbl9tZW51fG5ld3Rfd2luX21lc3NhZ2V8bmV3dF93aW5fbWVzc2FnZXZ8bmV3dF93aW5fdGVybmFyeXxuZXh0fG5nZXR0ZXh0fG5sMmJyfG5sX2xhbmdpbmZvfG5vcmV3aW5kaXRlcmF0b3J8bm9ybWFsaXplcnxub3Rlc19ib2R5fG5vdGVzX2NvcHlfZGJ8bm90ZXNfY3JlYXRlX2RifG5vdGVzX2NyZWF0ZV9ub3RlfG5vdGVzX2Ryb3BfZGJ8bm90ZXNfZmluZF9ub3RlfG5vdGVzX2hlYWRlcl9pbmZvfG5vdGVzX2xpc3RfbXNnc3xub3Rlc19tYXJrX3JlYWR8bm90ZXNfbWFya191bnJlYWR8bm90ZXNfbmF2X2NyZWF0ZXxub3Rlc19zZWFyY2h8bm90ZXNfdW5yZWFkfG5vdGVzX3ZlcnNpb258bnNhcGlfcmVxdWVzdF9oZWFkZXJzfG5zYXBpX3Jlc3BvbnNlX2hlYWRlcnN8bnNhcGlfdmlydHVhbHxudGhtYWN8bnVtYmVyX2Zvcm1hdHxudW1iZXJmb3JtYXR0ZXJ8b2F1dGh8b2F1dGhfZ2V0X3Nic3xvYXV0aF91cmxlbmNvZGV8b2F1dGhleGNlcHRpb258b2F1dGhwcm92aWRlcnxvYl9jbGVhbnxvYl9kZWZsYXRlaGFuZGxlcnxvYl9lbmRfY2xlYW58b2JfZW5kX2ZsdXNofG9iX2V0YWdoYW5kbGVyfG9iX2ZsdXNofG9iX2dldF9jbGVhbnxvYl9nZXRfY29udGVudHN8b2JfZ2V0X2ZsdXNofG9iX2dldF9sZW5ndGh8b2JfZ2V0X2xldmVsfG9iX2dldF9zdGF0dXN8b2JfZ3poYW5kbGVyfG9iX2ljb252X2hhbmRsZXJ8b2JfaW1wbGljaXRfZmx1c2h8b2JfaW5mbGF0ZWhhbmRsZXJ8b2JfbGlzdF9oYW5kbGVyc3xvYl9zdGFydHxvYl90aWR5aGFuZGxlcnxvY2lfYmluZF9hcnJheV9ieV9uYW1lfG9jaV9iaW5kX2J5X25hbWV8b2NpX2NhbmNlbHxvY2lfY2xpZW50X3ZlcnNpb258b2NpX2Nsb3NlfG9jaV9jb2xsZWN0aW9uX2FwcGVuZHxvY2lfY29sbGVjdGlvbl9hc3NpZ258b2NpX2NvbGxlY3Rpb25fZWxlbWVudF9hc3NpZ258b2NpX2NvbGxlY3Rpb25fZWxlbWVudF9nZXR8b2NpX2NvbGxlY3Rpb25fZnJlZXxvY2lfY29sbGVjdGlvbl9tYXh8b2NpX2NvbGxlY3Rpb25fc2l6ZXxvY2lfY29sbGVjdGlvbl90cmltfG9jaV9jb21taXR8b2NpX2Nvbm5lY3R8b2NpX2RlZmluZV9ieV9uYW1lfG9jaV9lcnJvcnxvY2lfZXhlY3V0ZXxvY2lfZmV0Y2h8b2NpX2ZldGNoX2FsbHxvY2lfZmV0Y2hfYXJyYXl8b2NpX2ZldGNoX2Fzc29jfG9jaV9mZXRjaF9vYmplY3R8b2NpX2ZldGNoX3Jvd3xvY2lfZmllbGRfaXNfbnVsbHxvY2lfZmllbGRfbmFtZXxvY2lfZmllbGRfcHJlY2lzaW9ufG9jaV9maWVsZF9zY2FsZXxvY2lfZmllbGRfc2l6ZXxvY2lfZmllbGRfdHlwZXxvY2lfZmllbGRfdHlwZV9yYXd8b2NpX2ZyZWVfc3RhdGVtZW50fG9jaV9pbnRlcm5hbF9kZWJ1Z3xvY2lfbG9iX2FwcGVuZHxvY2lfbG9iX2Nsb3NlfG9jaV9sb2JfY29weXxvY2lfbG9iX2VvZnxvY2lfbG9iX2VyYXNlfG9jaV9sb2JfZXhwb3J0fG9jaV9sb2JfZmx1c2h8b2NpX2xvYl9mcmVlfG9jaV9sb2JfZ2V0YnVmZmVyaW5nfG9jaV9sb2JfaW1wb3J0fG9jaV9sb2JfaXNfZXF1YWx8b2NpX2xvYl9sb2FkfG9jaV9sb2JfcmVhZHxvY2lfbG9iX3Jld2luZHxvY2lfbG9iX3NhdmV8b2NpX2xvYl9zYXZlZmlsZXxvY2lfbG9iX3NlZWt8b2NpX2xvYl9zZXRidWZmZXJpbmd8b2NpX2xvYl9zaXplfG9jaV9sb2JfdGVsbHxvY2lfbG9iX3RydW5jYXRlfG9jaV9sb2Jfd3JpdGV8b2NpX2xvYl93cml0ZXRlbXBvcmFyeXxvY2lfbG9iX3dyaXRldG9maWxlfG9jaV9uZXdfY29sbGVjdGlvbnxvY2lfbmV3X2Nvbm5lY3R8b2NpX25ld19jdXJzb3J8b2NpX25ld19kZXNjcmlwdG9yfG9jaV9udW1fZmllbGRzfG9jaV9udW1fcm93c3xvY2lfcGFyc2V8b2NpX3Bhc3N3b3JkX2NoYW5nZXxvY2lfcGNvbm5lY3R8b2NpX3Jlc3VsdHxvY2lfcm9sbGJhY2t8b2NpX3NlcnZlcl92ZXJzaW9ufG9jaV9zZXRfYWN0aW9ufG9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXJ8b2NpX3NldF9jbGllbnRfaW5mb3xvY2lfc2V0X2VkaXRpb258b2NpX3NldF9tb2R1bGVfbmFtZXxvY2lfc2V0X3ByZWZldGNofG9jaV9zdGF0ZW1lbnRfdHlwZXxvY2liaW5kYnluYW1lfG9jaWNhbmNlbHxvY2ljbG9zZWxvYnxvY2ljb2xsYXBwZW5kfG9jaWNvbGxhc3NpZ258b2NpY29sbGFzc2lnbmVsZW18b2NpY29sbGdldGVsZW18b2NpY29sbG1heHxvY2ljb2xsc2l6ZXxvY2ljb2xsdHJpbXxvY2ljb2x1bW5pc251bGx8b2NpY29sdW1ubmFtZXxvY2ljb2x1bW5wcmVjaXNpb258b2NpY29sdW1uc2NhbGV8b2NpY29sdW1uc2l6ZXxvY2ljb2x1bW50eXBlfG9jaWNvbHVtbnR5cGVyYXd8b2NpY29tbWl0fG9jaWRlZmluZWJ5bmFtZXxvY2llcnJvcnxvY2lleGVjdXRlfG9jaWZldGNofG9jaWZldGNoaW50b3xvY2lmZXRjaHN0YXRlbWVudHxvY2lmcmVlY29sbGVjdGlvbnxvY2lmcmVlY3Vyc29yfG9jaWZyZWVkZXNjfG9jaWZyZWVzdGF0ZW1lbnR8b2NpaW50ZXJuYWxkZWJ1Z3xvY2lsb2FkbG9ifG9jaWxvZ29mZnxvY2lsb2dvbnxvY2luZXdjb2xsZWN0aW9ufG9jaW5ld2N1cnNvcnxvY2luZXdkZXNjcmlwdG9yfG9jaW5sb2dvbnxvY2ludW1jb2xzfG9jaXBhcnNlfG9jaXBsb2dvbnxvY2lyZXN1bHR8b2Npcm9sbGJhY2t8b2Npcm93Y291bnR8b2Npc2F2ZWxvYnxvY2lzYXZlbG9iZmlsZXxvY2lzZXJ2ZXJ2ZXJzaW9ufG9jaXNldHByZWZldGNofG9jaXN0YXRlbWVudHR5cGV8b2Npd3JpdGVsb2J0b2ZpbGV8b2Npd3JpdGV0ZW1wb3Jhcnlsb2J8b2N0ZGVjfG9kYmNfYXV0b2NvbW1pdHxvZGJjX2Jpbm1vZGV8b2RiY19jbG9zZXxvZGJjX2Nsb3NlX2FsbHxvZGJjX2NvbHVtbnByaXZpbGVnZXN8b2RiY19jb2x1bW5zfG9kYmNfY29tbWl0fG9kYmNfY29ubmVjdHxvZGJjX2N1cnNvcnxvZGJjX2RhdGFfc291cmNlfG9kYmNfZG98b2RiY19lcnJvcnxvZGJjX2Vycm9ybXNnfG9kYmNfZXhlY3xvZGJjX2V4ZWN1dGV8b2RiY19mZXRjaF9hcnJheXxvZGJjX2ZldGNoX2ludG98b2RiY19mZXRjaF9vYmplY3R8b2RiY19mZXRjaF9yb3d8b2RiY19maWVsZF9sZW58b2RiY19maWVsZF9uYW1lfG9kYmNfZmllbGRfbnVtfG9kYmNfZmllbGRfcHJlY2lzaW9ufG9kYmNfZmllbGRfc2NhbGV8b2RiY19maWVsZF90eXBlfG9kYmNfZm9yZWlnbmtleXN8b2RiY19mcmVlX3Jlc3VsdHxvZGJjX2dldHR5cGVpbmZvfG9kYmNfbG9uZ3JlYWRsZW58b2RiY19uZXh0X3Jlc3VsdHxvZGJjX251bV9maWVsZHN8b2RiY19udW1fcm93c3xvZGJjX3Bjb25uZWN0fG9kYmNfcHJlcGFyZXxvZGJjX3ByaW1hcnlrZXlzfG9kYmNfcHJvY2VkdXJlY29sdW1uc3xvZGJjX3Byb2NlZHVyZXN8b2RiY19yZXN1bHR8b2RiY19yZXN1bHRfYWxsfG9kYmNfcm9sbGJhY2t8b2RiY19zZXRvcHRpb258b2RiY19zcGVjaWFsY29sdW1uc3xvZGJjX3N0YXRpc3RpY3N8b2RiY190YWJsZXByaXZpbGVnZXN8b2RiY190YWJsZXN8b3BlbmFsX2J1ZmZlcl9jcmVhdGV8b3BlbmFsX2J1ZmZlcl9kYXRhfG9wZW5hbF9idWZmZXJfZGVzdHJveXxvcGVuYWxfYnVmZmVyX2dldHxvcGVuYWxfYnVmZmVyX2xvYWR3YXZ8b3BlbmFsX2NvbnRleHRfY3JlYXRlfG9wZW5hbF9jb250ZXh0X2N1cnJlbnR8b3BlbmFsX2NvbnRleHRfZGVzdHJveXxvcGVuYWxfY29udGV4dF9wcm9jZXNzfG9wZW5hbF9jb250ZXh0X3N1c3BlbmR8b3BlbmFsX2RldmljZV9jbG9zZXxvcGVuYWxfZGV2aWNlX29wZW58b3BlbmFsX2xpc3RlbmVyX2dldHxvcGVuYWxfbGlzdGVuZXJfc2V0fG9wZW5hbF9zb3VyY2VfY3JlYXRlfG9wZW5hbF9zb3VyY2VfZGVzdHJveXxvcGVuYWxfc291cmNlX2dldHxvcGVuYWxfc291cmNlX3BhdXNlfG9wZW5hbF9zb3VyY2VfcGxheXxvcGVuYWxfc291cmNlX3Jld2luZHxvcGVuYWxfc291cmNlX3NldHxvcGVuYWxfc291cmNlX3N0b3B8b3BlbmFsX3N0cmVhbXxvcGVuZGlyfG9wZW5sb2d8b3BlbnNzbF9jaXBoZXJfaXZfbGVuZ3RofG9wZW5zc2xfY3NyX2V4cG9ydHxvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZXxvcGVuc3NsX2Nzcl9nZXRfcHVibGljX2tleXxvcGVuc3NsX2Nzcl9nZXRfc3ViamVjdHxvcGVuc3NsX2Nzcl9uZXd8b3BlbnNzbF9jc3Jfc2lnbnxvcGVuc3NsX2RlY3J5cHR8b3BlbnNzbF9kaF9jb21wdXRlX2tleXxvcGVuc3NsX2RpZ2VzdHxvcGVuc3NsX2VuY3J5cHR8b3BlbnNzbF9lcnJvcl9zdHJpbmd8b3BlbnNzbF9mcmVlX2tleXxvcGVuc3NsX2dldF9jaXBoZXJfbWV0aG9kc3xvcGVuc3NsX2dldF9tZF9tZXRob2RzfG9wZW5zc2xfZ2V0X3ByaXZhdGVrZXl8b3BlbnNzbF9nZXRfcHVibGlja2V5fG9wZW5zc2xfb3BlbnxvcGVuc3NsX3BrY3MxMl9leHBvcnR8b3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGV8b3BlbnNzbF9wa2NzMTJfcmVhZHxvcGVuc3NsX3BrY3M3X2RlY3J5cHR8b3BlbnNzbF9wa2NzN19lbmNyeXB0fG9wZW5zc2xfcGtjczdfc2lnbnxvcGVuc3NsX3BrY3M3X3ZlcmlmeXxvcGVuc3NsX3BrZXlfZXhwb3J0fG9wZW5zc2xfcGtleV9leHBvcnRfdG9fZmlsZXxvcGVuc3NsX3BrZXlfZnJlZXxvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHN8b3BlbnNzbF9wa2V5X2dldF9wcml2YXRlfG9wZW5zc2xfcGtleV9nZXRfcHVibGljfG9wZW5zc2xfcGtleV9uZXd8b3BlbnNzbF9wcml2YXRlX2RlY3J5cHR8b3BlbnNzbF9wcml2YXRlX2VuY3J5cHR8b3BlbnNzbF9wdWJsaWNfZGVjcnlwdHxvcGVuc3NsX3B1YmxpY19lbmNyeXB0fG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlc3xvcGVuc3NsX3NlYWx8b3BlbnNzbF9zaWdufG9wZW5zc2xfdmVyaWZ5fG9wZW5zc2xfeDUwOV9jaGVja19wcml2YXRlX2tleXxvcGVuc3NsX3g1MDlfY2hlY2twdXJwb3NlfG9wZW5zc2xfeDUwOV9leHBvcnR8b3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlfG9wZW5zc2xfeDUwOV9mcmVlfG9wZW5zc2xfeDUwOV9wYXJzZXxvcGVuc3NsX3g1MDlfcmVhZHxvcmR8b3V0ZXJpdGVyYXRvcnxvdXRvZmJvdW5kc2V4Y2VwdGlvbnxvdXRvZnJhbmdlZXhjZXB0aW9ufG91dHB1dF9hZGRfcmV3cml0ZV92YXJ8b3V0cHV0X3Jlc2V0X3Jld3JpdGVfdmFyc3xvdmVyZmxvd2V4Y2VwdGlvbnxvdmVybG9hZHxvdmVycmlkZV9mdW5jdGlvbnxvdnJpbW9zX2Nsb3NlfG92cmltb3NfY29tbWl0fG92cmltb3NfY29ubmVjdHxvdnJpbW9zX2N1cnNvcnxvdnJpbW9zX2V4ZWN8b3ZyaW1vc19leGVjdXRlfG92cmltb3NfZmV0Y2hfaW50b3xvdnJpbW9zX2ZldGNoX3Jvd3xvdnJpbW9zX2ZpZWxkX2xlbnxvdnJpbW9zX2ZpZWxkX25hbWV8b3ZyaW1vc19maWVsZF9udW18b3ZyaW1vc19maWVsZF90eXBlfG92cmltb3NfZnJlZV9yZXN1bHR8b3ZyaW1vc19sb25ncmVhZGxlbnxvdnJpbW9zX251bV9maWVsZHN8b3ZyaW1vc19udW1fcm93c3xvdnJpbW9zX3ByZXBhcmV8b3ZyaW1vc19yZXN1bHR8b3ZyaW1vc19yZXN1bHRfYWxsfG92cmltb3Nfcm9sbGJhY2t8cGFja3xwYXJlbnRpdGVyYXRvcnxwYXJzZV9pbmlfZmlsZXxwYXJzZV9pbmlfc3RyaW5nfHBhcnNlX3N0cnxwYXJzZV91cmx8cGFyc2VraXRfY29tcGlsZV9maWxlfHBhcnNla2l0X2NvbXBpbGVfc3RyaW5nfHBhcnNla2l0X2Z1bmNfYXJnaW5mb3xwYXNzdGhydXxwYXRoaW5mb3xwY2xvc2V8cGNudGxfYWxhcm18cGNudGxfZXhlY3xwY250bF9mb3JrfHBjbnRsX2dldHByaW9yaXR5fHBjbnRsX3NldHByaW9yaXR5fHBjbnRsX3NpZ25hbHxwY250bF9zaWduYWxfZGlzcGF0Y2h8cGNudGxfc2lncHJvY21hc2t8cGNudGxfc2lndGltZWR3YWl0fHBjbnRsX3NpZ3dhaXRpbmZvfHBjbnRsX3dhaXR8cGNudGxfd2FpdHBpZHxwY250bF93ZXhpdHN0YXR1c3xwY250bF93aWZleGl0ZWR8cGNudGxfd2lmc2lnbmFsZWR8cGNudGxfd2lmc3RvcHBlZHxwY250bF93c3RvcHNpZ3xwY250bF93dGVybXNpZ3xwZGZfYWN0aXZhdGVfaXRlbXxwZGZfYWRkX2Fubm90YXRpb258cGRmX2FkZF9ib29rbWFya3xwZGZfYWRkX2xhdW5jaGxpbmt8cGRmX2FkZF9sb2NhbGxpbmt8cGRmX2FkZF9uYW1lZGRlc3R8cGRmX2FkZF9ub3RlfHBkZl9hZGRfb3V0bGluZXxwZGZfYWRkX3BkZmxpbmt8cGRmX2FkZF90YWJsZV9jZWxsfHBkZl9hZGRfdGV4dGZsb3d8cGRmX2FkZF90aHVtYm5haWx8cGRmX2FkZF93ZWJsaW5rfHBkZl9hcmN8cGRmX2FyY258cGRmX2F0dGFjaF9maWxlfHBkZl9iZWdpbl9kb2N1bWVudHxwZGZfYmVnaW5fZm9udHxwZGZfYmVnaW5fZ2x5cGh8cGRmX2JlZ2luX2l0ZW18cGRmX2JlZ2luX2xheWVyfHBkZl9iZWdpbl9wYWdlfHBkZl9iZWdpbl9wYWdlX2V4dHxwZGZfYmVnaW5fcGF0dGVybnxwZGZfYmVnaW5fdGVtcGxhdGV8cGRmX2JlZ2luX3RlbXBsYXRlX2V4dHxwZGZfY2lyY2xlfHBkZl9jbGlwfHBkZl9jbG9zZXxwZGZfY2xvc2VfaW1hZ2V8cGRmX2Nsb3NlX3BkaXxwZGZfY2xvc2VfcGRpX3BhZ2V8cGRmX2Nsb3NlcGF0aHxwZGZfY2xvc2VwYXRoX2ZpbGxfc3Ryb2tlfHBkZl9jbG9zZXBhdGhfc3Ryb2tlfHBkZl9jb25jYXR8cGRmX2NvbnRpbnVlX3RleHR8cGRmX2NyZWF0ZV8zZHZpZXd8cGRmX2NyZWF0ZV9hY3Rpb258cGRmX2NyZWF0ZV9hbm5vdGF0aW9ufHBkZl9jcmVhdGVfYm9va21hcmt8cGRmX2NyZWF0ZV9maWVsZHxwZGZfY3JlYXRlX2ZpZWxkZ3JvdXB8cGRmX2NyZWF0ZV9nc3RhdGV8cGRmX2NyZWF0ZV9wdmZ8cGRmX2NyZWF0ZV90ZXh0Zmxvd3xwZGZfY3VydmV0b3xwZGZfZGVmaW5lX2xheWVyfHBkZl9kZWxldGV8cGRmX2RlbGV0ZV9wdmZ8cGRmX2RlbGV0ZV90YWJsZXxwZGZfZGVsZXRlX3RleHRmbG93fHBkZl9lbmNvZGluZ19zZXRfY2hhcnxwZGZfZW5kX2RvY3VtZW50fHBkZl9lbmRfZm9udHxwZGZfZW5kX2dseXBofHBkZl9lbmRfaXRlbXxwZGZfZW5kX2xheWVyfHBkZl9lbmRfcGFnZXxwZGZfZW5kX3BhZ2VfZXh0fHBkZl9lbmRfcGF0dGVybnxwZGZfZW5kX3RlbXBsYXRlfHBkZl9lbmRwYXRofHBkZl9maWxsfHBkZl9maWxsX2ltYWdlYmxvY2t8cGRmX2ZpbGxfcGRmYmxvY2t8cGRmX2ZpbGxfc3Ryb2tlfHBkZl9maWxsX3RleHRibG9ja3xwZGZfZmluZGZvbnR8cGRmX2ZpdF9pbWFnZXxwZGZfZml0X3BkaV9wYWdlfHBkZl9maXRfdGFibGV8cGRmX2ZpdF90ZXh0Zmxvd3xwZGZfZml0X3RleHRsaW5lfHBkZl9nZXRfYXBpbmFtZXxwZGZfZ2V0X2J1ZmZlcnxwZGZfZ2V0X2Vycm1zZ3xwZGZfZ2V0X2Vycm51bXxwZGZfZ2V0X2ZvbnR8cGRmX2dldF9mb250bmFtZXxwZGZfZ2V0X2ZvbnRzaXplfHBkZl9nZXRfaW1hZ2VfaGVpZ2h0fHBkZl9nZXRfaW1hZ2Vfd2lkdGh8cGRmX2dldF9tYWpvcnZlcnNpb258cGRmX2dldF9taW5vcnZlcnNpb258cGRmX2dldF9wYXJhbWV0ZXJ8cGRmX2dldF9wZGlfcGFyYW1ldGVyfHBkZl9nZXRfcGRpX3ZhbHVlfHBkZl9nZXRfdmFsdWV8cGRmX2luZm9fZm9udHxwZGZfaW5mb19tYXRjaGJveHxwZGZfaW5mb190YWJsZXxwZGZfaW5mb190ZXh0Zmxvd3xwZGZfaW5mb190ZXh0bGluZXxwZGZfaW5pdGdyYXBoaWNzfHBkZl9saW5ldG98cGRmX2xvYWRfM2RkYXRhfHBkZl9sb2FkX2ZvbnR8cGRmX2xvYWRfaWNjcHJvZmlsZXxwZGZfbG9hZF9pbWFnZXxwZGZfbWFrZXNwb3Rjb2xvcnxwZGZfbW92ZXRvfHBkZl9uZXd8cGRmX29wZW5fY2NpdHR8cGRmX29wZW5fZmlsZXxwZGZfb3Blbl9naWZ8cGRmX29wZW5faW1hZ2V8cGRmX29wZW5faW1hZ2VfZmlsZXxwZGZfb3Blbl9qcGVnfHBkZl9vcGVuX21lbW9yeV9pbWFnZXxwZGZfb3Blbl9wZGl8cGRmX29wZW5fcGRpX2RvY3VtZW50fHBkZl9vcGVuX3BkaV9wYWdlfHBkZl9vcGVuX3RpZmZ8cGRmX3Bjb3NfZ2V0X251bWJlcnxwZGZfcGNvc19nZXRfc3RyZWFtfHBkZl9wY29zX2dldF9zdHJpbmd8cGRmX3BsYWNlX2ltYWdlfHBkZl9wbGFjZV9wZGlfcGFnZXxwZGZfcHJvY2Vzc19wZGl8cGRmX3JlY3R8cGRmX3Jlc3RvcmV8cGRmX3Jlc3VtZV9wYWdlfHBkZl9yb3RhdGV8cGRmX3NhdmV8cGRmX3NjYWxlfHBkZl9zZXRfYm9yZGVyX2NvbG9yfHBkZl9zZXRfYm9yZGVyX2Rhc2h8cGRmX3NldF9ib3JkZXJfc3R5bGV8cGRmX3NldF9jaGFyX3NwYWNpbmd8cGRmX3NldF9kdXJhdGlvbnxwZGZfc2V0X2dzdGF0ZXxwZGZfc2V0X2hvcml6X3NjYWxpbmd8cGRmX3NldF9pbmZvfHBkZl9zZXRfaW5mb19hdXRob3J8cGRmX3NldF9pbmZvX2NyZWF0b3J8cGRmX3NldF9pbmZvX2tleXdvcmRzfHBkZl9zZXRfaW5mb19zdWJqZWN0fHBkZl9zZXRfaW5mb190aXRsZXxwZGZfc2V0X2xheWVyX2RlcGVuZGVuY3l8cGRmX3NldF9sZWFkaW5nfHBkZl9zZXRfcGFyYW1ldGVyfHBkZl9zZXRfdGV4dF9tYXRyaXh8cGRmX3NldF90ZXh0X3Bvc3xwZGZfc2V0X3RleHRfcmVuZGVyaW5nfHBkZl9zZXRfdGV4dF9yaXNlfHBkZl9zZXRfdmFsdWV8cGRmX3NldF93b3JkX3NwYWNpbmd8cGRmX3NldGNvbG9yfHBkZl9zZXRkYXNofHBkZl9zZXRkYXNocGF0dGVybnxwZGZfc2V0ZmxhdHxwZGZfc2V0Zm9udHxwZGZfc2V0Z3JheXxwZGZfc2V0Z3JheV9maWxsfHBkZl9zZXRncmF5X3N0cm9rZXxwZGZfc2V0bGluZWNhcHxwZGZfc2V0bGluZWpvaW58cGRmX3NldGxpbmV3aWR0aHxwZGZfc2V0bWF0cml4fHBkZl9zZXRtaXRlcmxpbWl0fHBkZl9zZXRwb2x5ZGFzaHxwZGZfc2V0cmdiY29sb3J8cGRmX3NldHJnYmNvbG9yX2ZpbGx8cGRmX3NldHJnYmNvbG9yX3N0cm9rZXxwZGZfc2hhZGluZ3xwZGZfc2hhZGluZ19wYXR0ZXJufHBkZl9zaGZpbGx8cGRmX3Nob3d8cGRmX3Nob3dfYm94ZWR8cGRmX3Nob3dfeHl8cGRmX3NrZXd8cGRmX3N0cmluZ3dpZHRofHBkZl9zdHJva2V8cGRmX3N1c3BlbmRfcGFnZXxwZGZfdHJhbnNsYXRlfHBkZl91dGYxNl90b191dGY4fHBkZl91dGYzMl90b191dGYxNnxwZGZfdXRmOF90b191dGYxNnxwZG98cGRvX2N1YnJpZF9zY2hlbWF8cGRvX3Bnc3FsbG9iY3JlYXRlfHBkb19wZ3NxbGxvYm9wZW58cGRvX3Bnc3FsbG9idW5saW5rfHBkb19zcWxpdGVjcmVhdGVhZ2dyZWdhdGV8cGRvX3NxbGl0ZWNyZWF0ZWZ1bmN0aW9ufHBkb2V4Y2VwdGlvbnxwZG9zdGF0ZW1lbnR8cGZzb2Nrb3BlbnxwZ19hZmZlY3RlZF9yb3dzfHBnX2NhbmNlbF9xdWVyeXxwZ19jbGllbnRfZW5jb2Rpbmd8cGdfY2xvc2V8cGdfY29ubmVjdHxwZ19jb25uZWN0aW9uX2J1c3l8cGdfY29ubmVjdGlvbl9yZXNldHxwZ19jb25uZWN0aW9uX3N0YXR1c3xwZ19jb252ZXJ0fHBnX2NvcHlfZnJvbXxwZ19jb3B5X3RvfHBnX2RibmFtZXxwZ19kZWxldGV8cGdfZW5kX2NvcHl8cGdfZXNjYXBlX2J5dGVhfHBnX2VzY2FwZV9zdHJpbmd8cGdfZXhlY3V0ZXxwZ19mZXRjaF9hbGx8cGdfZmV0Y2hfYWxsX2NvbHVtbnN8cGdfZmV0Y2hfYXJyYXl8cGdfZmV0Y2hfYXNzb2N8cGdfZmV0Y2hfb2JqZWN0fHBnX2ZldGNoX3Jlc3VsdHxwZ19mZXRjaF9yb3d8cGdfZmllbGRfaXNfbnVsbHxwZ19maWVsZF9uYW1lfHBnX2ZpZWxkX251bXxwZ19maWVsZF9wcnRsZW58cGdfZmllbGRfc2l6ZXxwZ19maWVsZF90YWJsZXxwZ19maWVsZF90eXBlfHBnX2ZpZWxkX3R5cGVfb2lkfHBnX2ZyZWVfcmVzdWx0fHBnX2dldF9ub3RpZnl8cGdfZ2V0X3BpZHxwZ19nZXRfcmVzdWx0fHBnX2hvc3R8cGdfaW5zZXJ0fHBnX2xhc3RfZXJyb3J8cGdfbGFzdF9ub3RpY2V8cGdfbGFzdF9vaWR8cGdfbG9fY2xvc2V8cGdfbG9fY3JlYXRlfHBnX2xvX2V4cG9ydHxwZ19sb19pbXBvcnR8cGdfbG9fb3BlbnxwZ19sb19yZWFkfHBnX2xvX3JlYWRfYWxsfHBnX2xvX3NlZWt8cGdfbG9fdGVsbHxwZ19sb191bmxpbmt8cGdfbG9fd3JpdGV8cGdfbWV0YV9kYXRhfHBnX251bV9maWVsZHN8cGdfbnVtX3Jvd3N8cGdfb3B0aW9uc3xwZ19wYXJhbWV0ZXJfc3RhdHVzfHBnX3Bjb25uZWN0fHBnX3Bpbmd8cGdfcG9ydHxwZ19wcmVwYXJlfHBnX3B1dF9saW5lfHBnX3F1ZXJ5fHBnX3F1ZXJ5X3BhcmFtc3xwZ19yZXN1bHRfZXJyb3J8cGdfcmVzdWx0X2Vycm9yX2ZpZWxkfHBnX3Jlc3VsdF9zZWVrfHBnX3Jlc3VsdF9zdGF0dXN8cGdfc2VsZWN0fHBnX3NlbmRfZXhlY3V0ZXxwZ19zZW5kX3ByZXBhcmV8cGdfc2VuZF9xdWVyeXxwZ19zZW5kX3F1ZXJ5X3BhcmFtc3xwZ19zZXRfY2xpZW50X2VuY29kaW5nfHBnX3NldF9lcnJvcl92ZXJib3NpdHl8cGdfdHJhY2V8cGdfdHJhbnNhY3Rpb25fc3RhdHVzfHBnX3R0eXxwZ191bmVzY2FwZV9ieXRlYXxwZ191bnRyYWNlfHBnX3VwZGF0ZXxwZ192ZXJzaW9ufHBocF9jaGVja19zeW50YXh8cGhwX2luaV9sb2FkZWRfZmlsZXxwaHBfaW5pX3NjYW5uZWRfZmlsZXN8cGhwX2xvZ29fZ3VpZHxwaHBfc2FwaV9uYW1lfHBocF9zdHJpcF93aGl0ZXNwYWNlfHBocF91bmFtZXxwaHBjcmVkaXRzfHBocGluZm98cGhwdmVyc2lvbnxwaXxwbmcyd2JtcHxwb3Blbnxwb3N8cG9zaXhfYWNjZXNzfHBvc2l4X2N0ZXJtaWR8cG9zaXhfZXJybm98cG9zaXhfZ2V0X2xhc3RfZXJyb3J8cG9zaXhfZ2V0Y3dkfHBvc2l4X2dldGVnaWR8cG9zaXhfZ2V0ZXVpZHxwb3NpeF9nZXRnaWR8cG9zaXhfZ2V0Z3JnaWR8cG9zaXhfZ2V0Z3JuYW18cG9zaXhfZ2V0Z3JvdXBzfHBvc2l4X2dldGxvZ2lufHBvc2l4X2dldHBnaWR8cG9zaXhfZ2V0cGdycHxwb3NpeF9nZXRwaWR8cG9zaXhfZ2V0cHBpZHxwb3NpeF9nZXRwd25hbXxwb3NpeF9nZXRwd3VpZHxwb3NpeF9nZXRybGltaXR8cG9zaXhfZ2V0c2lkfHBvc2l4X2dldHVpZHxwb3NpeF9pbml0Z3JvdXBzfHBvc2l4X2lzYXR0eXxwb3NpeF9raWxsfHBvc2l4X21rZmlmb3xwb3NpeF9ta25vZHxwb3NpeF9zZXRlZ2lkfHBvc2l4X3NldGV1aWR8cG9zaXhfc2V0Z2lkfHBvc2l4X3NldHBnaWR8cG9zaXhfc2V0c2lkfHBvc2l4X3NldHVpZHxwb3NpeF9zdHJlcnJvcnxwb3NpeF90aW1lc3xwb3NpeF90dHluYW1lfHBvc2l4X3VuYW1lfHBvd3xwcmVnX2ZpbHRlcnxwcmVnX2dyZXB8cHJlZ19sYXN0X2Vycm9yfHByZWdfbWF0Y2h8cHJlZ19tYXRjaF9hbGx8cHJlZ19xdW90ZXxwcmVnX3JlcGxhY2V8cHJlZ19yZXBsYWNlX2NhbGxiYWNrfHByZWdfc3BsaXR8cHJldnxwcmludHxwcmludF9yfHByaW50ZXJfYWJvcnR8cHJpbnRlcl9jbG9zZXxwcmludGVyX2NyZWF0ZV9icnVzaHxwcmludGVyX2NyZWF0ZV9kY3xwcmludGVyX2NyZWF0ZV9mb250fHByaW50ZXJfY3JlYXRlX3BlbnxwcmludGVyX2RlbGV0ZV9icnVzaHxwcmludGVyX2RlbGV0ZV9kY3xwcmludGVyX2RlbGV0ZV9mb250fHByaW50ZXJfZGVsZXRlX3BlbnxwcmludGVyX2RyYXdfYm1wfHByaW50ZXJfZHJhd19jaG9yZHxwcmludGVyX2RyYXdfZWxpcHNlfHByaW50ZXJfZHJhd19saW5lfHByaW50ZXJfZHJhd19waWV8cHJpbnRlcl9kcmF3X3JlY3RhbmdsZXxwcmludGVyX2RyYXdfcm91bmRyZWN0fHByaW50ZXJfZHJhd190ZXh0fHByaW50ZXJfZW5kX2RvY3xwcmludGVyX2VuZF9wYWdlfHByaW50ZXJfZ2V0X29wdGlvbnxwcmludGVyX2xpc3R8cHJpbnRlcl9sb2dpY2FsX2ZvbnRoZWlnaHR8cHJpbnRlcl9vcGVufHByaW50ZXJfc2VsZWN0X2JydXNofHByaW50ZXJfc2VsZWN0X2ZvbnR8cHJpbnRlcl9zZWxlY3RfcGVufHByaW50ZXJfc2V0X29wdGlvbnxwcmludGVyX3N0YXJ0X2RvY3xwcmludGVyX3N0YXJ0X3BhZ2V8cHJpbnRlcl93cml0ZXxwcmludGZ8cHJvY19jbG9zZXxwcm9jX2dldF9zdGF0dXN8cHJvY19uaWNlfHByb2Nfb3Blbnxwcm9jX3Rlcm1pbmF0ZXxwcm9wZXJ0eV9leGlzdHN8cHNfYWRkX2Jvb2ttYXJrfHBzX2FkZF9sYXVuY2hsaW5rfHBzX2FkZF9sb2NhbGxpbmt8cHNfYWRkX25vdGV8cHNfYWRkX3BkZmxpbmt8cHNfYWRkX3dlYmxpbmt8cHNfYXJjfHBzX2FyY258cHNfYmVnaW5fcGFnZXxwc19iZWdpbl9wYXR0ZXJufHBzX2JlZ2luX3RlbXBsYXRlfHBzX2NpcmNsZXxwc19jbGlwfHBzX2Nsb3NlfHBzX2Nsb3NlX2ltYWdlfHBzX2Nsb3NlcGF0aHxwc19jbG9zZXBhdGhfc3Ryb2tlfHBzX2NvbnRpbnVlX3RleHR8cHNfY3VydmV0b3xwc19kZWxldGV8cHNfZW5kX3BhZ2V8cHNfZW5kX3BhdHRlcm58cHNfZW5kX3RlbXBsYXRlfHBzX2ZpbGx8cHNfZmlsbF9zdHJva2V8cHNfZmluZGZvbnR8cHNfZ2V0X2J1ZmZlcnxwc19nZXRfcGFyYW1ldGVyfHBzX2dldF92YWx1ZXxwc19oeXBoZW5hdGV8cHNfaW5jbHVkZV9maWxlfHBzX2xpbmV0b3xwc19tYWtlc3BvdGNvbG9yfHBzX21vdmV0b3xwc19uZXd8cHNfb3Blbl9maWxlfHBzX29wZW5faW1hZ2V8cHNfb3Blbl9pbWFnZV9maWxlfHBzX29wZW5fbWVtb3J5X2ltYWdlfHBzX3BsYWNlX2ltYWdlfHBzX3JlY3R8cHNfcmVzdG9yZXxwc19yb3RhdGV8cHNfc2F2ZXxwc19zY2FsZXxwc19zZXRfYm9yZGVyX2NvbG9yfHBzX3NldF9ib3JkZXJfZGFzaHxwc19zZXRfYm9yZGVyX3N0eWxlfHBzX3NldF9pbmZvfHBzX3NldF9wYXJhbWV0ZXJ8cHNfc2V0X3RleHRfcG9zfHBzX3NldF92YWx1ZXxwc19zZXRjb2xvcnxwc19zZXRkYXNofHBzX3NldGZsYXR8cHNfc2V0Zm9udHxwc19zZXRncmF5fHBzX3NldGxpbmVjYXB8cHNfc2V0bGluZWpvaW58cHNfc2V0bGluZXdpZHRofHBzX3NldG1pdGVybGltaXR8cHNfc2V0b3ZlcnByaW50bW9kZXxwc19zZXRwb2x5ZGFzaHxwc19zaGFkaW5nfHBzX3NoYWRpbmdfcGF0dGVybnxwc19zaGZpbGx8cHNfc2hvd3xwc19zaG93Mnxwc19zaG93X2JveGVkfHBzX3Nob3dfeHl8cHNfc2hvd194eTJ8cHNfc3RyaW5nX2dlb21ldHJ5fHBzX3N0cmluZ3dpZHRofHBzX3N0cm9rZXxwc19zeW1ib2x8cHNfc3ltYm9sX25hbWV8cHNfc3ltYm9sX3dpZHRofHBzX3RyYW5zbGF0ZXxwc3BlbGxfYWRkX3RvX3BlcnNvbmFsfHBzcGVsbF9hZGRfdG9fc2Vzc2lvbnxwc3BlbGxfY2hlY2t8cHNwZWxsX2NsZWFyX3Nlc3Npb258cHNwZWxsX2NvbmZpZ19jcmVhdGV8cHNwZWxsX2NvbmZpZ19kYXRhX2Rpcnxwc3BlbGxfY29uZmlnX2RpY3RfZGlyfHBzcGVsbF9jb25maWdfaWdub3JlfHBzcGVsbF9jb25maWdfbW9kZXxwc3BlbGxfY29uZmlnX3BlcnNvbmFsfHBzcGVsbF9jb25maWdfcmVwbHxwc3BlbGxfY29uZmlnX3J1bnRvZ2V0aGVyfHBzcGVsbF9jb25maWdfc2F2ZV9yZXBsfHBzcGVsbF9uZXd8cHNwZWxsX25ld19jb25maWd8cHNwZWxsX25ld19wZXJzb25hbHxwc3BlbGxfc2F2ZV93b3JkbGlzdHxwc3BlbGxfc3RvcmVfcmVwbGFjZW1lbnR8cHNwZWxsX3N1Z2dlc3R8cHV0ZW52fHB4X2Nsb3NlfHB4X2NyZWF0ZV9mcHxweF9kYXRlMnN0cmluZ3xweF9kZWxldGV8cHhfZGVsZXRlX3JlY29yZHxweF9nZXRfZmllbGR8cHhfZ2V0X2luZm98cHhfZ2V0X3BhcmFtZXRlcnxweF9nZXRfcmVjb3JkfHB4X2dldF9zY2hlbWF8cHhfZ2V0X3ZhbHVlfHB4X2luc2VydF9yZWNvcmR8cHhfbmV3fHB4X251bWZpZWxkc3xweF9udW1yZWNvcmRzfHB4X29wZW5fZnB8cHhfcHV0X3JlY29yZHxweF9yZXRyaWV2ZV9yZWNvcmR8cHhfc2V0X2Jsb2JfZmlsZXxweF9zZXRfcGFyYW1ldGVyfHB4X3NldF90YWJsZW5hbWV8cHhfc2V0X3RhcmdldGVuY29kaW5nfHB4X3NldF92YWx1ZXxweF90aW1lc3RhbXAyc3RyaW5nfHB4X3VwZGF0ZV9yZWNvcmR8cWRvbV9lcnJvcnxxZG9tX3RyZWV8cXVvdGVkX3ByaW50YWJsZV9kZWNvZGV8cXVvdGVkX3ByaW50YWJsZV9lbmNvZGV8cXVvdGVtZXRhfHJhZDJkZWd8cmFkaXVzX2FjY3Rfb3BlbnxyYWRpdXNfYWRkX3NlcnZlcnxyYWRpdXNfYXV0aF9vcGVufHJhZGl1c19jbG9zZXxyYWRpdXNfY29uZmlnfHJhZGl1c19jcmVhdGVfcmVxdWVzdHxyYWRpdXNfY3Z0X2FkZHJ8cmFkaXVzX2N2dF9pbnR8cmFkaXVzX2N2dF9zdHJpbmd8cmFkaXVzX2RlbWFuZ2xlfHJhZGl1c19kZW1hbmdsZV9tcHBlX2tleXxyYWRpdXNfZ2V0X2F0dHJ8cmFkaXVzX2dldF92ZW5kb3JfYXR0cnxyYWRpdXNfcHV0X2FkZHJ8cmFkaXVzX3B1dF9hdHRyfHJhZGl1c19wdXRfaW50fHJhZGl1c19wdXRfc3RyaW5nfHJhZGl1c19wdXRfdmVuZG9yX2FkZHJ8cmFkaXVzX3B1dF92ZW5kb3JfYXR0cnxyYWRpdXNfcHV0X3ZlbmRvcl9pbnR8cmFkaXVzX3B1dF92ZW5kb3Jfc3RyaW5nfHJhZGl1c19yZXF1ZXN0X2F1dGhlbnRpY2F0b3J8cmFkaXVzX3NlbmRfcmVxdWVzdHxyYWRpdXNfc2VydmVyX3NlY3JldHxyYWRpdXNfc3RyZXJyb3J8cmFuZHxyYW5nZXxyYW5nZWV4Y2VwdGlvbnxyYXJfd3JhcHBlcl9jYWNoZV9zdGF0c3xyYXJhcmNoaXZlfHJhcmVudHJ5fHJhcmV4Y2VwdGlvbnxyYXd1cmxkZWNvZGV8cmF3dXJsZW5jb2RlfHJlYWRfZXhpZl9kYXRhfHJlYWRkaXJ8cmVhZGZpbGV8cmVhZGd6ZmlsZXxyZWFkbGluZXxyZWFkbGluZV9hZGRfaGlzdG9yeXxyZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGx8cmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9yZW1vdmV8cmVhZGxpbmVfY2FsbGJhY2tfcmVhZF9jaGFyfHJlYWRsaW5lX2NsZWFyX2hpc3Rvcnl8cmVhZGxpbmVfY29tcGxldGlvbl9mdW5jdGlvbnxyZWFkbGluZV9pbmZvfHJlYWRsaW5lX2xpc3RfaGlzdG9yeXxyZWFkbGluZV9vbl9uZXdfbGluZXxyZWFkbGluZV9yZWFkX2hpc3Rvcnl8cmVhZGxpbmVfcmVkaXNwbGF5fHJlYWRsaW5lX3dyaXRlX2hpc3Rvcnl8cmVhZGxpbmt8cmVhbHBhdGh8cmVhbHBhdGhfY2FjaGVfZ2V0fHJlYWxwYXRoX2NhY2hlX3NpemV8cmVjb2RlfHJlY29kZV9maWxlfHJlY29kZV9zdHJpbmd8cmVjdXJzaXZlYXJyYXlpdGVyYXRvcnxyZWN1cnNpdmVjYWNoaW5naXRlcmF0b3J8cmVjdXJzaXZlY2FsbGJhY2tmaWx0ZXJpdGVyYXRvcnxyZWN1cnNpdmVkaXJlY3RvcnlpdGVyYXRvcnxyZWN1cnNpdmVmaWx0ZXJpdGVyYXRvcnxyZWN1cnNpdmVpdGVyYXRvcnxyZWN1cnNpdmVpdGVyYXRvcml0ZXJhdG9yfHJlY3Vyc2l2ZXJlZ2V4aXRlcmF0b3J8cmVjdXJzaXZldHJlZWl0ZXJhdG9yfHJlZmxlY3Rpb258cmVmbGVjdGlvbmNsYXNzfHJlZmxlY3Rpb25leGNlcHRpb258cmVmbGVjdGlvbmV4dGVuc2lvbnxyZWZsZWN0aW9uZnVuY3Rpb258cmVmbGVjdGlvbmZ1bmN0aW9uYWJzdHJhY3R8cmVmbGVjdGlvbm1ldGhvZHxyZWZsZWN0aW9ub2JqZWN0fHJlZmxlY3Rpb25wYXJhbWV0ZXJ8cmVmbGVjdGlvbnByb3BlcnR5fHJlZmxlY3RvcnxyZWdleGl0ZXJhdG9yfHJlZ2lzdGVyX3NodXRkb3duX2Z1bmN0aW9ufHJlZ2lzdGVyX3RpY2tfZnVuY3Rpb258cmVuYW1lfHJlbmFtZV9mdW5jdGlvbnxyZXF1aXJlfHJlcXVpcmVfb25jZXxyZXNldHxyZXNldFZhbHVlfHJlc291cmNlYnVuZGxlfHJlc3RvcmVfZXJyb3JfaGFuZGxlcnxyZXN0b3JlX2V4Y2VwdGlvbl9oYW5kbGVyfHJlc3RvcmVfaW5jbHVkZV9wYXRofHJldHVybnxyZXdpbmR8cmV3aW5kZGlyfHJtZGlyfHJvdW5kfHJwbV9jbG9zZXxycG1fZ2V0X3RhZ3xycG1faXNfdmFsaWR8cnBtX29wZW58cnBtX3ZlcnNpb258cnJkX2NyZWF0ZXxycmRfZXJyb3J8cnJkX2ZldGNofHJyZF9maXJzdHxycmRfZ3JhcGh8cnJkX2luZm98cnJkX2xhc3R8cnJkX2xhc3R1cGRhdGV8cnJkX3Jlc3RvcmV8cnJkX3R1bmV8cnJkX3VwZGF0ZXxycmRfeHBvcnR8cnJkY3JlYXRvcnxycmRncmFwaHxycmR1cGRhdGVyfHJzb3J0fHJ0cmltfHJ1bmtpdF9jbGFzc19hZG9wdHxydW5raXRfY2xhc3NfZW1hbmNpcGF0ZXxydW5raXRfY29uc3RhbnRfYWRkfHJ1bmtpdF9jb25zdGFudF9yZWRlZmluZXxydW5raXRfY29uc3RhbnRfcmVtb3ZlfHJ1bmtpdF9mdW5jdGlvbl9hZGR8cnVua2l0X2Z1bmN0aW9uX2NvcHl8cnVua2l0X2Z1bmN0aW9uX3JlZGVmaW5lfHJ1bmtpdF9mdW5jdGlvbl9yZW1vdmV8cnVua2l0X2Z1bmN0aW9uX3JlbmFtZXxydW5raXRfaW1wb3J0fHJ1bmtpdF9saW50fHJ1bmtpdF9saW50X2ZpbGV8cnVua2l0X21ldGhvZF9hZGR8cnVua2l0X21ldGhvZF9jb3B5fHJ1bmtpdF9tZXRob2RfcmVkZWZpbmV8cnVua2l0X21ldGhvZF9yZW1vdmV8cnVua2l0X21ldGhvZF9yZW5hbWV8cnVua2l0X3JldHVybl92YWx1ZV91c2VkfHJ1bmtpdF9zYW5kYm94X291dHB1dF9oYW5kbGVyfHJ1bmtpdF9zdXBlcmdsb2JhbHN8cnVudGltZWV4Y2VwdGlvbnxzYW1jb25uZWN0aW9uX2NvbW1pdHxzYW1jb25uZWN0aW9uX2Nvbm5lY3R8c2FtY29ubmVjdGlvbl9jb25zdHJ1Y3RvcnxzYW1jb25uZWN0aW9uX2Rpc2Nvbm5lY3R8c2FtY29ubmVjdGlvbl9lcnJub3xzYW1jb25uZWN0aW9uX2Vycm9yfHNhbWNvbm5lY3Rpb25faXNjb25uZWN0ZWR8c2FtY29ubmVjdGlvbl9wZWVrfHNhbWNvbm5lY3Rpb25fcGVla2FsbHxzYW1jb25uZWN0aW9uX3JlY2VpdmV8c2FtY29ubmVjdGlvbl9yZW1vdmV8c2FtY29ubmVjdGlvbl9yb2xsYmFja3xzYW1jb25uZWN0aW9uX3NlbmR8c2FtY29ubmVjdGlvbl9zZXREZWJ1Z3xzYW1jb25uZWN0aW9uX3N1YnNjcmliZXxzYW1jb25uZWN0aW9uX3Vuc3Vic2NyaWJlfHNhbW1lc3NhZ2VfYm9keXxzYW1tZXNzYWdlX2NvbnN0cnVjdG9yfHNhbW1lc3NhZ2VfaGVhZGVyfHNjYV9jcmVhdGVkYXRhb2JqZWN0fHNjYV9nZXRzZXJ2aWNlfHNjYV9sb2NhbHByb3h5X2NyZWF0ZWRhdGFvYmplY3R8c2NhX3NvYXBwcm94eV9jcmVhdGVkYXRhb2JqZWN0fHNjYW5kaXJ8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2JlZ2lubG9nZ2luZ3xzZG9fZGFzX2NoYW5nZXN1bW1hcnlfZW5kbG9nZ2luZ3xzZG9fZGFzX2NoYW5nZXN1bW1hcnlfZ2V0Y2hhbmdlZGRhdGFvYmplY3RzfHNkb19kYXNfY2hhbmdlc3VtbWFyeV9nZXRjaGFuZ2V0eXBlfHNkb19kYXNfY2hhbmdlc3VtbWFyeV9nZXRvbGRjb250YWluZXJ8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2dldG9sZHZhbHVlc3xzZG9fZGFzX2NoYW5nZXN1bW1hcnlfaXNsb2dnaW5nfHNkb19kYXNfZGF0YWZhY3RvcnlfYWRkcHJvcGVydHl0b3R5cGV8c2RvX2Rhc19kYXRhZmFjdG9yeV9hZGR0eXBlfHNkb19kYXNfZGF0YWZhY3RvcnlfZ2V0ZGF0YWZhY3Rvcnl8c2RvX2Rhc19kYXRhb2JqZWN0X2dldGNoYW5nZXN1bW1hcnl8c2RvX2Rhc19yZWxhdGlvbmFsX2FwcGx5Y2hhbmdlc3xzZG9fZGFzX3JlbGF0aW9uYWxfY29uc3RydWN0fHNkb19kYXNfcmVsYXRpb25hbF9jcmVhdGVyb290ZGF0YW9iamVjdHxzZG9fZGFzX3JlbGF0aW9uYWxfZXhlY3V0ZXByZXBhcmVkcXVlcnl8c2RvX2Rhc19yZWxhdGlvbmFsX2V4ZWN1dGVxdWVyeXxzZG9fZGFzX3NldHRpbmdfZ2V0bGlzdGluZGV4fHNkb19kYXNfc2V0dGluZ19nZXRwcm9wZXJ0eWluZGV4fHNkb19kYXNfc2V0dGluZ19nZXRwcm9wZXJ0eW5hbWV8c2RvX2Rhc19zZXR0aW5nX2dldHZhbHVlfHNkb19kYXNfc2V0dGluZ19pc3NldHxzZG9fZGFzX3htbF9hZGR0eXBlc3xzZG9fZGFzX3htbF9jcmVhdGV8c2RvX2Rhc194bWxfY3JlYXRlZGF0YW9iamVjdHxzZG9fZGFzX3htbF9jcmVhdGVkb2N1bWVudHxzZG9fZGFzX3htbF9kb2N1bWVudF9nZXRyb290ZGF0YW9iamVjdHxzZG9fZGFzX3htbF9kb2N1bWVudF9nZXRyb290ZWxlbWVudG5hbWV8c2RvX2Rhc194bWxfZG9jdW1lbnRfZ2V0cm9vdGVsZW1lbnR1cml8c2RvX2Rhc194bWxfZG9jdW1lbnRfc2V0ZW5jb2Rpbmd8c2RvX2Rhc194bWxfZG9jdW1lbnRfc2V0eG1sZGVjbGFyYXRpb258c2RvX2Rhc194bWxfZG9jdW1lbnRfc2V0eG1sdmVyc2lvbnxzZG9fZGFzX3htbF9sb2FkZmlsZXxzZG9fZGFzX3htbF9sb2Fkc3RyaW5nfHNkb19kYXNfeG1sX3NhdmVmaWxlfHNkb19kYXNfeG1sX3NhdmVzdHJpbmd8c2RvX2RhdGFmYWN0b3J5X2NyZWF0ZXxzZG9fZGF0YW9iamVjdF9jbGVhcnxzZG9fZGF0YW9iamVjdF9jcmVhdGVkYXRhb2JqZWN0fHNkb19kYXRhb2JqZWN0X2dldGNvbnRhaW5lcnxzZG9fZGF0YW9iamVjdF9nZXRzZXF1ZW5jZXxzZG9fZGF0YW9iamVjdF9nZXR0eXBlbmFtZXxzZG9fZGF0YW9iamVjdF9nZXR0eXBlbmFtZXNwYWNldXJpfHNkb19leGNlcHRpb25fZ2V0Y2F1c2V8c2RvX2xpc3RfaW5zZXJ0fHNkb19tb2RlbF9wcm9wZXJ0eV9nZXRjb250YWluaW5ndHlwZXxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0ZGVmYXVsdHxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0bmFtZXxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0dHlwZXxzZG9fbW9kZWxfcHJvcGVydHlfaXNjb250YWlubWVudHxzZG9fbW9kZWxfcHJvcGVydHlfaXNtYW55fHNkb19tb2RlbF9yZWZsZWN0aW9uZGF0YW9iamVjdF9jb25zdHJ1Y3R8c2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2V4cG9ydHxzZG9fbW9kZWxfcmVmbGVjdGlvbmRhdGFvYmplY3RfZ2V0Y29udGFpbm1lbnRwcm9wZXJ0eXxzZG9fbW9kZWxfcmVmbGVjdGlvbmRhdGFvYmplY3RfZ2V0aW5zdGFuY2Vwcm9wZXJ0aWVzfHNkb19tb2RlbF9yZWZsZWN0aW9uZGF0YW9iamVjdF9nZXR0eXBlfHNkb19tb2RlbF90eXBlX2dldGJhc2V0eXBlfHNkb19tb2RlbF90eXBlX2dldG5hbWV8c2RvX21vZGVsX3R5cGVfZ2V0bmFtZXNwYWNldXJpfHNkb19tb2RlbF90eXBlX2dldHByb3BlcnRpZXN8c2RvX21vZGVsX3R5cGVfZ2V0cHJvcGVydHl8c2RvX21vZGVsX3R5cGVfaXNhYnN0cmFjdHR5cGV8c2RvX21vZGVsX3R5cGVfaXNkYXRhdHlwZXxzZG9fbW9kZWxfdHlwZV9pc2luc3RhbmNlfHNkb19tb2RlbF90eXBlX2lzb3BlbnR5cGV8c2RvX21vZGVsX3R5cGVfaXNzZXF1ZW5jZWR0eXBlfHNkb19zZXF1ZW5jZV9nZXRwcm9wZXJ0eXxzZG9fc2VxdWVuY2VfaW5zZXJ0fHNkb19zZXF1ZW5jZV9tb3ZlfHNlZWthYmxlaXRlcmF0b3J8c2VtX2FjcXVpcmV8c2VtX2dldHxzZW1fcmVsZWFzZXxzZW1fcmVtb3ZlfHNlcmlhbGl6YWJsZXxzZXJpYWxpemV8c2Vzc2lvbl9jYWNoZV9leHBpcmV8c2Vzc2lvbl9jYWNoZV9saW1pdGVyfHNlc3Npb25fY29tbWl0fHNlc3Npb25fZGVjb2RlfHNlc3Npb25fZGVzdHJveXxzZXNzaW9uX2VuY29kZXxzZXNzaW9uX2dldF9jb29raWVfcGFyYW1zfHNlc3Npb25faWR8c2Vzc2lvbl9pc19yZWdpc3RlcmVkfHNlc3Npb25fbW9kdWxlX25hbWV8c2Vzc2lvbl9uYW1lfHNlc3Npb25fcGdzcWxfYWRkX2Vycm9yfHNlc3Npb25fcGdzcWxfZ2V0X2Vycm9yfHNlc3Npb25fcGdzcWxfZ2V0X2ZpZWxkfHNlc3Npb25fcGdzcWxfcmVzZXR8c2Vzc2lvbl9wZ3NxbF9zZXRfZmllbGR8c2Vzc2lvbl9wZ3NxbF9zdGF0dXN8c2Vzc2lvbl9yZWdlbmVyYXRlX2lkfHNlc3Npb25fcmVnaXN0ZXJ8c2Vzc2lvbl9zYXZlX3BhdGh8c2Vzc2lvbl9zZXRfY29va2llX3BhcmFtc3xzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXJ8c2Vzc2lvbl9zdGFydHxzZXNzaW9uX3VucmVnaXN0ZXJ8c2Vzc2lvbl91bnNldHxzZXNzaW9uX3dyaXRlX2Nsb3NlfHNldENvdW50ZXJDbGFzc3xzZXRfZXJyb3JfaGFuZGxlcnxzZXRfZXhjZXB0aW9uX2hhbmRsZXJ8c2V0X2ZpbGVfYnVmZmVyfHNldF9pbmNsdWRlX3BhdGh8c2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lfHNldF9zb2NrZXRfYmxvY2tpbmd8c2V0X3RpbWVfbGltaXR8c2V0Y29va2llfHNldGxvY2FsZXxzZXRwcm9jdGl0bGV8c2V0cmF3Y29va2llfHNldHN0YXRpY3Byb3BlcnR5dmFsdWV8c2V0dGhyZWFkdGl0bGV8c2V0dHlwZXxzaGExfHNoYTFfZmlsZXxzaGVsbF9leGVjfHNobV9hdHRhY2h8c2htX2RldGFjaHxzaG1fZ2V0X3ZhcnxzaG1faGFzX3ZhcnxzaG1fcHV0X3ZhcnxzaG1fcmVtb3ZlfHNobV9yZW1vdmVfdmFyfHNobW9wX2Nsb3NlfHNobW9wX2RlbGV0ZXxzaG1vcF9vcGVufHNobW9wX3JlYWR8c2htb3Bfc2l6ZXxzaG1vcF93cml0ZXxzaG93X3NvdXJjZXxzaHVmZmxlfHNpZ25ldXJscGFpZW1lbnR8c2ltaWxhcl90ZXh0fHNpbXBsZXhtbF9pbXBvcnRfZG9tfHNpbXBsZXhtbF9sb2FkX2ZpbGV8c2ltcGxleG1sX2xvYWRfc3RyaW5nfHNpbXBsZXhtbGVsZW1lbnR8c2ltcGxleG1saXRlcmF0b3J8c2lufHNpbmh8c2l6ZW9mfHNsZWVwfHNubXB8c25tcDJfZ2V0fHNubXAyX2dldG5leHR8c25tcDJfcmVhbF93YWxrfHNubXAyX3NldHxzbm1wMl93YWxrfHNubXAzX2dldHxzbm1wM19nZXRuZXh0fHNubXAzX3JlYWxfd2Fsa3xzbm1wM19zZXR8c25tcDNfd2Fsa3xzbm1wX2dldF9xdWlja19wcmludHxzbm1wX2dldF92YWx1ZXJldHJpZXZhbHxzbm1wX3JlYWRfbWlifHNubXBfc2V0X2VudW1fcHJpbnR8c25tcF9zZXRfb2lkX251bWVyaWNfcHJpbnR8c25tcF9zZXRfb2lkX291dHB1dF9mb3JtYXR8c25tcF9zZXRfcXVpY2tfcHJpbnR8c25tcF9zZXRfdmFsdWVyZXRyaWV2YWx8c25tcGdldHxzbm1wZ2V0bmV4dHxzbm1wcmVhbHdhbGt8c25tcHNldHxzbm1wd2Fsa3xzbm1wd2Fsa29pZHxzb2FwY2xpZW50fHNvYXBmYXVsdHxzb2FwaGVhZGVyfHNvYXBwYXJhbXxzb2Fwc2VydmVyfHNvYXB2YXJ8c29ja2V0X2FjY2VwdHxzb2NrZXRfYmluZHxzb2NrZXRfY2xlYXJfZXJyb3J8c29ja2V0X2Nsb3NlfHNvY2tldF9jb25uZWN0fHNvY2tldF9jcmVhdGV8c29ja2V0X2NyZWF0ZV9saXN0ZW58c29ja2V0X2NyZWF0ZV9wYWlyfHNvY2tldF9nZXRfb3B0aW9ufHNvY2tldF9nZXRfc3RhdHVzfHNvY2tldF9nZXRwZWVybmFtZXxzb2NrZXRfZ2V0c29ja25hbWV8c29ja2V0X2xhc3RfZXJyb3J8c29ja2V0X2xpc3Rlbnxzb2NrZXRfcmVhZHxzb2NrZXRfcmVjdnxzb2NrZXRfcmVjdmZyb218c29ja2V0X3NlbGVjdHxzb2NrZXRfc2VuZHxzb2NrZXRfc2VuZHRvfHNvY2tldF9zZXRfYmxvY2t8c29ja2V0X3NldF9ibG9ja2luZ3xzb2NrZXRfc2V0X25vbmJsb2NrfHNvY2tldF9zZXRfb3B0aW9ufHNvY2tldF9zZXRfdGltZW91dHxzb2NrZXRfc2h1dGRvd258c29ja2V0X3N0cmVycm9yfHNvY2tldF93cml0ZXxzb2xyX2dldF92ZXJzaW9ufHNvbHJjbGllbnR8c29scmNsaWVudGV4Y2VwdGlvbnxzb2xyZG9jdW1lbnR8c29scmRvY3VtZW50ZmllbGR8c29scmV4Y2VwdGlvbnxzb2xyZ2VuZXJpY3Jlc3BvbnNlfHNvbHJpbGxlZ2FsYXJndW1lbnRleGNlcHRpb258c29scmlsbGVnYWxvcGVyYXRpb25leGNlcHRpb258c29scmlucHV0ZG9jdW1lbnR8c29scm1vZGlmaWFibGVwYXJhbXN8c29scm9iamVjdHxzb2xycGFyYW1zfHNvbHJwaW5ncmVzcG9uc2V8c29scnF1ZXJ5fHNvbHJxdWVyeXJlc3BvbnNlfHNvbHJyZXNwb25zZXxzb2xydXBkYXRlcmVzcG9uc2V8c29scnV0aWxzfHNvcnR8c291bmRleHxzcGhpbnhjbGllbnR8c3BsX2F1dG9sb2FkfHNwbF9hdXRvbG9hZF9jYWxsfHNwbF9hdXRvbG9hZF9leHRlbnNpb25zfHNwbF9hdXRvbG9hZF9mdW5jdGlvbnN8c3BsX2F1dG9sb2FkX3JlZ2lzdGVyfHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyfHNwbF9jbGFzc2VzfHNwbF9vYmplY3RfaGFzaHxzcGxib29sfHNwbGRvdWJseWxpbmtlZGxpc3R8c3BsZW51bXxzcGxmaWxlaW5mb3xzcGxmaWxlb2JqZWN0fHNwbGZpeGVkYXJyYXl8c3BsZmxvYXR8c3BsaGVhcHxzcGxpbnR8c3BsaXR8c3BsaXRpfHNwbG1heGhlYXB8c3BsbWluaGVhcHxzcGxvYmplY3RzdG9yYWdlfHNwbG9ic2VydmVyfHNwbHByaW9yaXR5cXVldWV8c3BscXVldWV8c3Bsc3RhY2t8c3Bsc3RyaW5nfHNwbHN1YmplY3R8c3BsdGVtcGZpbGVvYmplY3R8c3Bvb2ZjaGVja2VyfHNwcmludGZ8c3FsX3JlZ2Nhc2V8c3FsaXRlM3xzcWxpdGUzcmVzdWx0fHNxbGl0ZTNzdG10fHNxbGl0ZV9hcnJheV9xdWVyeXxzcWxpdGVfYnVzeV90aW1lb3V0fHNxbGl0ZV9jaGFuZ2VzfHNxbGl0ZV9jbG9zZXxzcWxpdGVfY29sdW1ufHNxbGl0ZV9jcmVhdGVfYWdncmVnYXRlfHNxbGl0ZV9jcmVhdGVfZnVuY3Rpb258c3FsaXRlX2N1cnJlbnR8c3FsaXRlX2Vycm9yX3N0cmluZ3xzcWxpdGVfZXNjYXBlX3N0cmluZ3xzcWxpdGVfZXhlY3xzcWxpdGVfZmFjdG9yeXxzcWxpdGVfZmV0Y2hfYWxsfHNxbGl0ZV9mZXRjaF9hcnJheXxzcWxpdGVfZmV0Y2hfY29sdW1uX3R5cGVzfHNxbGl0ZV9mZXRjaF9vYmplY3R8c3FsaXRlX2ZldGNoX3NpbmdsZXxzcWxpdGVfZmV0Y2hfc3RyaW5nfHNxbGl0ZV9maWVsZF9uYW1lfHNxbGl0ZV9oYXNfbW9yZXxzcWxpdGVfaGFzX3ByZXZ8c3FsaXRlX2tleXxzcWxpdGVfbGFzdF9lcnJvcnxzcWxpdGVfbGFzdF9pbnNlcnRfcm93aWR8c3FsaXRlX2xpYmVuY29kaW5nfHNxbGl0ZV9saWJ2ZXJzaW9ufHNxbGl0ZV9uZXh0fHNxbGl0ZV9udW1fZmllbGRzfHNxbGl0ZV9udW1fcm93c3xzcWxpdGVfb3BlbnxzcWxpdGVfcG9wZW58c3FsaXRlX3ByZXZ8c3FsaXRlX3F1ZXJ5fHNxbGl0ZV9yZXdpbmR8c3FsaXRlX3NlZWt8c3FsaXRlX3NpbmdsZV9xdWVyeXxzcWxpdGVfdWRmX2RlY29kZV9iaW5hcnl8c3FsaXRlX3VkZl9lbmNvZGVfYmluYXJ5fHNxbGl0ZV91bmJ1ZmZlcmVkX3F1ZXJ5fHNxbGl0ZV92YWxpZHxzcXJ0fHNyYW5kfHNzY2FuZnxzc2RlZXBfZnV6enlfY29tcGFyZXxzc2RlZXBfZnV6enlfaGFzaHxzc2RlZXBfZnV6enlfaGFzaF9maWxlbmFtZXxzc2gyX2F1dGhfaG9zdGJhc2VkX2ZpbGV8c3NoMl9hdXRoX25vbmV8c3NoMl9hdXRoX3Bhc3N3b3JkfHNzaDJfYXV0aF9wdWJrZXlfZmlsZXxzc2gyX2Nvbm5lY3R8c3NoMl9leGVjfHNzaDJfZmV0Y2hfc3RyZWFtfHNzaDJfZmluZ2VycHJpbnR8c3NoMl9tZXRob2RzX25lZ290aWF0ZWR8c3NoMl9wdWJsaWNrZXlfYWRkfHNzaDJfcHVibGlja2V5X2luaXR8c3NoMl9wdWJsaWNrZXlfbGlzdHxzc2gyX3B1YmxpY2tleV9yZW1vdmV8c3NoMl9zY3BfcmVjdnxzc2gyX3NjcF9zZW5kfHNzaDJfc2Z0cHxzc2gyX3NmdHBfbHN0YXR8c3NoMl9zZnRwX21rZGlyfHNzaDJfc2Z0cF9yZWFkbGlua3xzc2gyX3NmdHBfcmVhbHBhdGh8c3NoMl9zZnRwX3JlbmFtZXxzc2gyX3NmdHBfcm1kaXJ8c3NoMl9zZnRwX3N0YXR8c3NoMl9zZnRwX3N5bWxpbmt8c3NoMl9zZnRwX3VubGlua3xzc2gyX3NoZWxsfHNzaDJfdHVubmVsfHN0YXR8c3RhdHNfYWJzb2x1dGVfZGV2aWF0aW9ufHN0YXRzX2NkZl9iZXRhfHN0YXRzX2NkZl9iaW5vbWlhbHxzdGF0c19jZGZfY2F1Y2h5fHN0YXRzX2NkZl9jaGlzcXVhcmV8c3RhdHNfY2RmX2V4cG9uZW50aWFsfHN0YXRzX2NkZl9mfHN0YXRzX2NkZl9nYW1tYXxzdGF0c19jZGZfbGFwbGFjZXxzdGF0c19jZGZfbG9naXN0aWN8c3RhdHNfY2RmX25lZ2F0aXZlX2Jpbm9taWFsfHN0YXRzX2NkZl9ub25jZW50cmFsX2NoaXNxdWFyZXxzdGF0c19jZGZfbm9uY2VudHJhbF9mfHN0YXRzX2NkZl9wb2lzc29ufHN0YXRzX2NkZl90fHN0YXRzX2NkZl91bmlmb3JtfHN0YXRzX2NkZl93ZWlidWxsfHN0YXRzX2NvdmFyaWFuY2V8c3RhdHNfZGVuX3VuaWZvcm18c3RhdHNfZGVuc19iZXRhfHN0YXRzX2RlbnNfY2F1Y2h5fHN0YXRzX2RlbnNfY2hpc3F1YXJlfHN0YXRzX2RlbnNfZXhwb25lbnRpYWx8c3RhdHNfZGVuc19mfHN0YXRzX2RlbnNfZ2FtbWF8c3RhdHNfZGVuc19sYXBsYWNlfHN0YXRzX2RlbnNfbG9naXN0aWN8c3RhdHNfZGVuc19uZWdhdGl2ZV9iaW5vbWlhbHxzdGF0c19kZW5zX25vcm1hbHxzdGF0c19kZW5zX3BtZl9iaW5vbWlhbHxzdGF0c19kZW5zX3BtZl9oeXBlcmdlb21ldHJpY3xzdGF0c19kZW5zX3BtZl9wb2lzc29ufHN0YXRzX2RlbnNfdHxzdGF0c19kZW5zX3dlaWJ1bGx8c3RhdHNfaGFybW9uaWNfbWVhbnxzdGF0c19rdXJ0b3Npc3xzdGF0c19yYW5kX2dlbl9iZXRhfHN0YXRzX3JhbmRfZ2VuX2NoaXNxdWFyZXxzdGF0c19yYW5kX2dlbl9leHBvbmVudGlhbHxzdGF0c19yYW5kX2dlbl9mfHN0YXRzX3JhbmRfZ2VuX2Z1bmlmb3JtfHN0YXRzX3JhbmRfZ2VuX2dhbW1hfHN0YXRzX3JhbmRfZ2VuX2liaW5vbWlhbHxzdGF0c19yYW5kX2dlbl9pYmlub21pYWxfbmVnYXRpdmV8c3RhdHNfcmFuZF9nZW5faW50fHN0YXRzX3JhbmRfZ2VuX2lwb2lzc29ufHN0YXRzX3JhbmRfZ2VuX2l1bmlmb3JtfHN0YXRzX3JhbmRfZ2VuX25vbmNlbnJhbF9jaGlzcXVhcmV8c3RhdHNfcmFuZF9nZW5fbm9uY2VudHJhbF9mfHN0YXRzX3JhbmRfZ2VuX25vbmNlbnRyYWxfdHxzdGF0c19yYW5kX2dlbl9ub3JtYWx8c3RhdHNfcmFuZF9nZW5fdHxzdGF0c19yYW5kX2dldF9zZWVkc3xzdGF0c19yYW5kX3BocmFzZV90b19zZWVkc3xzdGF0c19yYW5kX3JhbmZ8c3RhdHNfcmFuZF9zZXRhbGx8c3RhdHNfc2tld3xzdGF0c19zdGFuZGFyZF9kZXZpYXRpb258c3RhdHNfc3RhdF9iaW5vbWlhbF9jb2VmfHN0YXRzX3N0YXRfY29ycmVsYXRpb258c3RhdHNfc3RhdF9nZW5uY2h8c3RhdHNfc3RhdF9pbmRlcGVuZGVudF90fHN0YXRzX3N0YXRfaW5uZXJwcm9kdWN0fHN0YXRzX3N0YXRfbm9uY2VudHJhbF90fHN0YXRzX3N0YXRfcGFpcmVkX3R8c3RhdHNfc3RhdF9wZXJjZW50aWxlfHN0YXRzX3N0YXRfcG93ZXJzdW18c3RhdHNfdmFyaWFuY2V8c3RvbXB8c3RvbXBfY29ubmVjdF9lcnJvcnxzdG9tcF92ZXJzaW9ufHN0b21wZXhjZXB0aW9ufHN0b21wZnJhbWV8c3RyX2dldGNzdnxzdHJfaXJlcGxhY2V8c3RyX3BhZHxzdHJfcmVwZWF0fHN0cl9yZXBsYWNlfHN0cl9yb3QxM3xzdHJfc2h1ZmZsZXxzdHJfc3BsaXR8c3RyX3dvcmRfY291bnR8c3RyY2FzZWNtcHxzdHJjaHJ8c3RyY21wfHN0cmNvbGx8c3RyY3NwbnxzdHJlYW1fYnVja2V0X2FwcGVuZHxzdHJlYW1fYnVja2V0X21ha2Vfd3JpdGVhYmxlfHN0cmVhbV9idWNrZXRfbmV3fHN0cmVhbV9idWNrZXRfcHJlcGVuZHxzdHJlYW1fY29udGV4dF9jcmVhdGV8c3RyZWFtX2NvbnRleHRfZ2V0X2RlZmF1bHR8c3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnN8c3RyZWFtX2NvbnRleHRfZ2V0X3BhcmFtc3xzdHJlYW1fY29udGV4dF9zZXRfZGVmYXVsdHxzdHJlYW1fY29udGV4dF9zZXRfb3B0aW9ufHN0cmVhbV9jb250ZXh0X3NldF9wYXJhbXN8c3RyZWFtX2NvcHlfdG9fc3RyZWFtfHN0cmVhbV9lbmNvZGluZ3xzdHJlYW1fZmlsdGVyX2FwcGVuZHxzdHJlYW1fZmlsdGVyX3ByZXBlbmR8c3RyZWFtX2ZpbHRlcl9yZWdpc3RlcnxzdHJlYW1fZmlsdGVyX3JlbW92ZXxzdHJlYW1fZ2V0X2NvbnRlbnRzfHN0cmVhbV9nZXRfZmlsdGVyc3xzdHJlYW1fZ2V0X2xpbmV8c3RyZWFtX2dldF9tZXRhX2RhdGF8c3RyZWFtX2dldF90cmFuc3BvcnRzfHN0cmVhbV9nZXRfd3JhcHBlcnN8c3RyZWFtX2lzX2xvY2FsfHN0cmVhbV9ub3RpZmljYXRpb25fY2FsbGJhY2t8c3RyZWFtX3JlZ2lzdGVyX3dyYXBwZXJ8c3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRofHN0cmVhbV9zZWxlY3R8c3RyZWFtX3NldF9ibG9ja2luZ3xzdHJlYW1fc2V0X3JlYWRfYnVmZmVyfHN0cmVhbV9zZXRfdGltZW91dHxzdHJlYW1fc2V0X3dyaXRlX2J1ZmZlcnxzdHJlYW1fc29ja2V0X2FjY2VwdHxzdHJlYW1fc29ja2V0X2NsaWVudHxzdHJlYW1fc29ja2V0X2VuYWJsZV9jcnlwdG98c3RyZWFtX3NvY2tldF9nZXRfbmFtZXxzdHJlYW1fc29ja2V0X3BhaXJ8c3RyZWFtX3NvY2tldF9yZWN2ZnJvbXxzdHJlYW1fc29ja2V0X3NlbmR0b3xzdHJlYW1fc29ja2V0X3NlcnZlcnxzdHJlYW1fc29ja2V0X3NodXRkb3dufHN0cmVhbV9zdXBwb3J0c19sb2NrfHN0cmVhbV93cmFwcGVyX3JlZ2lzdGVyfHN0cmVhbV93cmFwcGVyX3Jlc3RvcmV8c3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlcnxzdHJlYW13cmFwcGVyfHN0cmZ0aW1lfHN0cmlwX3RhZ3N8c3RyaXBjc2xhc2hlc3xzdHJpcG9zfHN0cmlwc2xhc2hlc3xzdHJpc3RyfHN0cmxlbnxzdHJuYXRjYXNlY21wfHN0cm5hdGNtcHxzdHJuY2FzZWNtcHxzdHJuY21wfHN0cnBicmt8c3RycG9zfHN0cnB0aW1lfHN0cnJjaHJ8c3RycmV2fHN0cnJpcG9zfHN0cnJwb3N8c3Ryc3BufHN0cnN0cnxzdHJ0b2t8c3RydG9sb3dlcnxzdHJ0b3RpbWV8c3RydG91cHBlcnxzdHJ0cnxzdHJ2YWx8c3Vic3RyfHN1YnN0cl9jb21wYXJlfHN1YnN0cl9jb3VudHxzdWJzdHJfcmVwbGFjZXxzdm18c3ZtbW9kZWx8c3ZuX2FkZHxzdm5fYXV0aF9nZXRfcGFyYW1ldGVyfHN2bl9hdXRoX3NldF9wYXJhbWV0ZXJ8c3ZuX2JsYW1lfHN2bl9jYXR8c3ZuX2NoZWNrb3V0fHN2bl9jbGVhbnVwfHN2bl9jbGllbnRfdmVyc2lvbnxzdm5fY29tbWl0fHN2bl9kZWxldGV8c3ZuX2RpZmZ8c3ZuX2V4cG9ydHxzdm5fZnNfYWJvcnRfdHhufHN2bl9mc19hcHBseV90ZXh0fHN2bl9mc19iZWdpbl90eG4yfHN2bl9mc19jaGFuZ2Vfbm9kZV9wcm9wfHN2bl9mc19jaGVja19wYXRofHN2bl9mc19jb250ZW50c19jaGFuZ2VkfHN2bl9mc19jb3B5fHN2bl9mc19kZWxldGV8c3ZuX2ZzX2Rpcl9lbnRyaWVzfHN2bl9mc19maWxlX2NvbnRlbnRzfHN2bl9mc19maWxlX2xlbmd0aHxzdm5fZnNfaXNfZGlyfHN2bl9mc19pc19maWxlfHN2bl9mc19tYWtlX2Rpcnxzdm5fZnNfbWFrZV9maWxlfHN2bl9mc19ub2RlX2NyZWF0ZWRfcmV2fHN2bl9mc19ub2RlX3Byb3B8c3ZuX2ZzX3Byb3BzX2NoYW5nZWR8c3ZuX2ZzX3JldmlzaW9uX3Byb3B8c3ZuX2ZzX3JldmlzaW9uX3Jvb3R8c3ZuX2ZzX3R4bl9yb290fHN2bl9mc195b3VuZ2VzdF9yZXZ8c3ZuX2ltcG9ydHxzdm5fbG9nfHN2bl9sc3xzdm5fbWtkaXJ8c3ZuX3JlcG9zX2NyZWF0ZXxzdm5fcmVwb3NfZnN8c3ZuX3JlcG9zX2ZzX2JlZ2luX3R4bl9mb3JfY29tbWl0fHN2bl9yZXBvc19mc19jb21taXRfdHhufHN2bl9yZXBvc19ob3Rjb3B5fHN2bl9yZXBvc19vcGVufHN2bl9yZXBvc19yZWNvdmVyfHN2bl9yZXZlcnR8c3ZuX3N0YXR1c3xzdm5fdXBkYXRlfHN3Zl9hY3Rpb25nZXR1cmx8c3dmX2FjdGlvbmdvdG9mcmFtZXxzd2ZfYWN0aW9uZ290b2xhYmVsfHN3Zl9hY3Rpb25uZXh0ZnJhbWV8c3dmX2FjdGlvbnBsYXl8c3dmX2FjdGlvbnByZXZmcmFtZXxzd2ZfYWN0aW9uc2V0dGFyZ2V0fHN3Zl9hY3Rpb25zdG9wfHN3Zl9hY3Rpb250b2dnbGVxdWFsaXR5fHN3Zl9hY3Rpb253YWl0Zm9yZnJhbWV8c3dmX2FkZGJ1dHRvbnJlY29yZHxzd2ZfYWRkY29sb3J8c3dmX2Nsb3NlZmlsZXxzd2ZfZGVmaW5lYml0bWFwfHN3Zl9kZWZpbmVmb250fHN3Zl9kZWZpbmVsaW5lfHN3Zl9kZWZpbmVwb2x5fHN3Zl9kZWZpbmVyZWN0fHN3Zl9kZWZpbmV0ZXh0fHN3Zl9lbmRidXR0b258c3dmX2VuZGRvYWN0aW9ufHN3Zl9lbmRzaGFwZXxzd2ZfZW5kc3ltYm9sfHN3Zl9mb250c2l6ZXxzd2ZfZm9udHNsYW50fHN3Zl9mb250dHJhY2tpbmd8c3dmX2dldGJpdG1hcGluZm98c3dmX2dldGZvbnRpbmZvfHN3Zl9nZXRmcmFtZXxzd2ZfbGFiZWxmcmFtZXxzd2ZfbG9va2F0fHN3Zl9tb2RpZnlvYmplY3R8c3dmX211bGNvbG9yfHN3Zl9uZXh0aWR8c3dmX29uY29uZGl0aW9ufHN3Zl9vcGVuZmlsZXxzd2Zfb3J0aG98c3dmX29ydGhvMnxzd2ZfcGVyc3BlY3RpdmV8c3dmX3BsYWNlb2JqZWN0fHN3Zl9wb2xhcnZpZXd8c3dmX3BvcG1hdHJpeHxzd2ZfcG9zcm91bmR8c3dmX3B1c2htYXRyaXh8c3dmX3JlbW92ZW9iamVjdHxzd2Zfcm90YXRlfHN3Zl9zY2FsZXxzd2Zfc2V0Zm9udHxzd2Zfc2V0ZnJhbWV8c3dmX3NoYXBlYXJjfHN3Zl9zaGFwZWN1cnZldG98c3dmX3NoYXBlY3VydmV0bzN8c3dmX3NoYXBlZmlsbGJpdG1hcGNsaXB8c3dmX3NoYXBlZmlsbGJpdG1hcHRpbGV8c3dmX3NoYXBlZmlsbG9mZnxzd2Zfc2hhcGVmaWxsc29saWR8c3dmX3NoYXBlbGluZXNvbGlkfHN3Zl9zaGFwZWxpbmV0b3xzd2Zfc2hhcGVtb3ZldG98c3dmX3Nob3dmcmFtZXxzd2Zfc3RhcnRidXR0b258c3dmX3N0YXJ0ZG9hY3Rpb258c3dmX3N0YXJ0c2hhcGV8c3dmX3N0YXJ0c3ltYm9sfHN3Zl90ZXh0d2lkdGh8c3dmX3RyYW5zbGF0ZXxzd2Zfdmlld3BvcnR8c3dmYWN0aW9ufHN3ZmJpdG1hcHxzd2ZidXR0b258c3dmZGlzcGxheWl0ZW18c3dmZmlsbHxzd2Zmb250fHN3ZmZvbnRjaGFyfHN3ZmdyYWRpZW50fHN3Zm1vcnBofHN3Zm1vdmllfHN3ZnByZWJ1aWx0Y2xpcHxzd2ZzaGFwZXxzd2Zzb3VuZHxzd2Zzb3VuZGluc3RhbmNlfHN3ZnNwcml0ZXxzd2Z0ZXh0fHN3ZnRleHRmaWVsZHxzd2Z2aWRlb3N0cmVhbXxzd2lzaF9jb25zdHJ1Y3R8c3dpc2hfZ2V0bWV0YWxpc3R8c3dpc2hfZ2V0cHJvcGVydHlsaXN0fHN3aXNoX3ByZXBhcmV8c3dpc2hfcXVlcnl8c3dpc2hyZXN1bHRfZ2V0bWV0YWxpc3R8c3dpc2hyZXN1bHRfc3RlbXxzd2lzaHJlc3VsdHNfZ2V0cGFyc2Vkd29yZHN8c3dpc2hyZXN1bHRzX2dldHJlbW92ZWRzdG9wd29yZHN8c3dpc2hyZXN1bHRzX25leHRyZXN1bHR8c3dpc2hyZXN1bHRzX3NlZWtyZXN1bHR8c3dpc2hzZWFyY2hfZXhlY3V0ZXxzd2lzaHNlYXJjaF9yZXNldGxpbWl0fHN3aXNoc2VhcmNoX3NldGxpbWl0fHN3aXNoc2VhcmNoX3NldHBocmFzZWRlbGltaXRlcnxzd2lzaHNlYXJjaF9zZXRzb3J0fHN3aXNoc2VhcmNoX3NldHN0cnVjdHVyZXxzeWJhc2VfYWZmZWN0ZWRfcm93c3xzeWJhc2VfY2xvc2V8c3liYXNlX2Nvbm5lY3R8c3liYXNlX2RhdGFfc2Vla3xzeWJhc2VfZGVhZGxvY2tfcmV0cnlfY291bnR8c3liYXNlX2ZldGNoX2FycmF5fHN5YmFzZV9mZXRjaF9hc3NvY3xzeWJhc2VfZmV0Y2hfZmllbGR8c3liYXNlX2ZldGNoX29iamVjdHxzeWJhc2VfZmV0Y2hfcm93fHN5YmFzZV9maWVsZF9zZWVrfHN5YmFzZV9mcmVlX3Jlc3VsdHxzeWJhc2VfZ2V0X2xhc3RfbWVzc2FnZXxzeWJhc2VfbWluX2NsaWVudF9zZXZlcml0eXxzeWJhc2VfbWluX2Vycm9yX3NldmVyaXR5fHN5YmFzZV9taW5fbWVzc2FnZV9zZXZlcml0eXxzeWJhc2VfbWluX3NlcnZlcl9zZXZlcml0eXxzeWJhc2VfbnVtX2ZpZWxkc3xzeWJhc2VfbnVtX3Jvd3N8c3liYXNlX3Bjb25uZWN0fHN5YmFzZV9xdWVyeXxzeWJhc2VfcmVzdWx0fHN5YmFzZV9zZWxlY3RfZGJ8c3liYXNlX3NldF9tZXNzYWdlX2hhbmRsZXJ8c3liYXNlX3VuYnVmZmVyZWRfcXVlcnl8c3ltbGlua3xzeXNfZ2V0X3RlbXBfZGlyfHN5c19nZXRsb2FkYXZnfHN5c2xvZ3xzeXN0ZW18dGFnfHRhbnx0YW5ofHRjcHdyYXBfY2hlY2t8dGVtcG5hbXx0ZXh0ZG9tYWlufHRpZHl8dGlkeV9hY2Nlc3NfY291bnR8dGlkeV9jb25maWdfY291bnR8dGlkeV9kaWFnbm9zZXx0aWR5X2Vycm9yX2NvdW50fHRpZHlfZ2V0X2Vycm9yX2J1ZmZlcnx0aWR5X2dldF9vdXRwdXR8dGlkeV9sb2FkX2NvbmZpZ3x0aWR5X3Jlc2V0X2NvbmZpZ3x0aWR5X3NhdmVfY29uZmlnfHRpZHlfc2V0X2VuY29kaW5nfHRpZHlfc2V0b3B0fHRpZHlfd2FybmluZ19jb3VudHx0aWR5bm9kZXx0aW1lfHRpbWVfbmFub3NsZWVwfHRpbWVfc2xlZXBfdW50aWx8dGltZXpvbmVfYWJicmV2aWF0aW9uc19saXN0fHRpbWV6b25lX2lkZW50aWZpZXJzX2xpc3R8dGltZXpvbmVfbG9jYXRpb25fZ2V0fHRpbWV6b25lX25hbWVfZnJvbV9hYmJyfHRpbWV6b25lX25hbWVfZ2V0fHRpbWV6b25lX29mZnNldF9nZXR8dGltZXpvbmVfb3Blbnx0aW1lem9uZV90cmFuc2l0aW9uc19nZXR8dGltZXpvbmVfdmVyc2lvbl9nZXR8dG1wZmlsZXx0b2tlbl9nZXRfYWxsfHRva2VuX25hbWV8dG9reW90eXJhbnR8dG9reW90eXJhbnRxdWVyeXx0b2t5b3R5cmFudHRhYmxlfHRvc3RyaW5nfHRvc3RyaW5nfHRvdWNofHRyYW5zbGl0ZXJhdG9yfHRyYXZlcnNhYmxlfHRyaWdnZXJfZXJyb3J8dHJpbXx1YXNvcnR8dWNmaXJzdHx1Y3dvcmRzfHVkbV9hZGRfc2VhcmNoX2xpbWl0fHVkbV9hbGxvY19hZ2VudHx1ZG1fYWxsb2NfYWdlbnRfYXJyYXl8dWRtX2FwaV92ZXJzaW9ufHVkbV9jYXRfbGlzdHx1ZG1fY2F0X3BhdGh8dWRtX2NoZWNrX2NoYXJzZXR8dWRtX2NoZWNrX3N0b3JlZHx1ZG1fY2xlYXJfc2VhcmNoX2xpbWl0c3x1ZG1fY2xvc2Vfc3RvcmVkfHVkbV9jcmMzMnx1ZG1fZXJybm98dWRtX2Vycm9yfHVkbV9maW5kfHVkbV9mcmVlX2FnZW50fHVkbV9mcmVlX2lzcGVsbF9kYXRhfHVkbV9mcmVlX3Jlc3x1ZG1fZ2V0X2RvY19jb3VudHx1ZG1fZ2V0X3Jlc19maWVsZHx1ZG1fZ2V0X3Jlc19wYXJhbXx1ZG1faGFzaDMyfHVkbV9sb2FkX2lzcGVsbF9kYXRhfHVkbV9vcGVuX3N0b3JlZHx1ZG1fc2V0X2FnZW50X3BhcmFtfHVrc29ydHx1bWFza3x1bmRlcmZsb3dleGNlcHRpb258dW5leHBlY3RlZHZhbHVlZXhjZXB0aW9ufHVuaXFpZHx1bml4dG9qZHx1bmxpbmt8dW5wYWNrfHVucmVnaXN0ZXJfdGlja19mdW5jdGlvbnx1bnNlcmlhbGl6ZXx1bnNldHx1cmxkZWNvZGV8dXJsZW5jb2RlfHVzZV9zb2FwX2Vycm9yX2hhbmRsZXJ8dXNlcl9lcnJvcnx1c2xlZXB8dXNvcnR8dXRmOF9kZWNvZGV8dXRmOF9lbmNvZGV8djhqc3x2OGpzZXhjZXB0aW9ufHZhcl9kdW1wfHZhcl9leHBvcnR8dmFyaWFudHx2YXJpYW50X2Fic3x2YXJpYW50X2FkZHx2YXJpYW50X2FuZHx2YXJpYW50X2Nhc3R8dmFyaWFudF9jYXR8dmFyaWFudF9jbXB8dmFyaWFudF9kYXRlX2Zyb21fdGltZXN0YW1wfHZhcmlhbnRfZGF0ZV90b190aW1lc3RhbXB8dmFyaWFudF9kaXZ8dmFyaWFudF9lcXZ8dmFyaWFudF9maXh8dmFyaWFudF9nZXRfdHlwZXx2YXJpYW50X2lkaXZ8dmFyaWFudF9pbXB8dmFyaWFudF9pbnR8dmFyaWFudF9tb2R8dmFyaWFudF9tdWx8dmFyaWFudF9uZWd8dmFyaWFudF9ub3R8dmFyaWFudF9vcnx2YXJpYW50X3Bvd3x2YXJpYW50X3JvdW5kfHZhcmlhbnRfc2V0fHZhcmlhbnRfc2V0X3R5cGV8dmFyaWFudF9zdWJ8dmFyaWFudF94b3J8dmVyc2lvbl9jb21wYXJlfHZmcHJpbnRmfHZpcnR1YWx8dnBvcG1haWxfYWRkX2FsaWFzX2RvbWFpbnx2cG9wbWFpbF9hZGRfYWxpYXNfZG9tYWluX2V4fHZwb3BtYWlsX2FkZF9kb21haW58dnBvcG1haWxfYWRkX2RvbWFpbl9leHx2cG9wbWFpbF9hZGRfdXNlcnx2cG9wbWFpbF9hbGlhc19hZGR8dnBvcG1haWxfYWxpYXNfZGVsfHZwb3BtYWlsX2FsaWFzX2RlbF9kb21haW58dnBvcG1haWxfYWxpYXNfZ2V0fHZwb3BtYWlsX2FsaWFzX2dldF9hbGx8dnBvcG1haWxfYXV0aF91c2VyfHZwb3BtYWlsX2RlbF9kb21haW58dnBvcG1haWxfZGVsX2RvbWFpbl9leHx2cG9wbWFpbF9kZWxfdXNlcnx2cG9wbWFpbF9lcnJvcnx2cG9wbWFpbF9wYXNzd2R8dnBvcG1haWxfc2V0X3VzZXJfcXVvdGF8dnByaW50Znx2c3ByaW50Znx3MzJhcGlfZGVmdHlwZXx3MzJhcGlfaW5pdF9kdHlwZXx3MzJhcGlfaW52b2tlX2Z1bmN0aW9ufHczMmFwaV9yZWdpc3Rlcl9mdW5jdGlvbnx3MzJhcGlfc2V0X2NhbGxfbWV0aG9kfHdkZHhfYWRkX3ZhcnN8d2RkeF9kZXNlcmlhbGl6ZXx3ZGR4X3BhY2tldF9lbmR8d2RkeF9wYWNrZXRfc3RhcnR8d2RkeF9zZXJpYWxpemVfdmFsdWV8d2RkeF9zZXJpYWxpemVfdmFyc3x3aW4zMl9jb250aW51ZV9zZXJ2aWNlfHdpbjMyX2NyZWF0ZV9zZXJ2aWNlfHdpbjMyX2RlbGV0ZV9zZXJ2aWNlfHdpbjMyX2dldF9sYXN0X2NvbnRyb2xfbWVzc2FnZXx3aW4zMl9wYXVzZV9zZXJ2aWNlfHdpbjMyX3BzX2xpc3RfcHJvY3N8d2luMzJfcHNfc3RhdF9tZW18d2luMzJfcHNfc3RhdF9wcm9jfHdpbjMyX3F1ZXJ5X3NlcnZpY2Vfc3RhdHVzfHdpbjMyX3NldF9zZXJ2aWNlX3N0YXR1c3x3aW4zMl9zdGFydF9zZXJ2aWNlfHdpbjMyX3N0YXJ0X3NlcnZpY2VfY3RybF9kaXNwYXRjaGVyfHdpbjMyX3N0b3Bfc2VydmljZXx3aW5jYWNoZV9mY2FjaGVfZmlsZWluZm98d2luY2FjaGVfZmNhY2hlX21lbWluZm98d2luY2FjaGVfbG9ja3x3aW5jYWNoZV9vY2FjaGVfZmlsZWluZm98d2luY2FjaGVfb2NhY2hlX21lbWluZm98d2luY2FjaGVfcmVmcmVzaF9pZl9jaGFuZ2VkfHdpbmNhY2hlX3JwbGlzdF9maWxlaW5mb3x3aW5jYWNoZV9ycGxpc3RfbWVtaW5mb3x3aW5jYWNoZV9zY2FjaGVfaW5mb3x3aW5jYWNoZV9zY2FjaGVfbWVtaW5mb3x3aW5jYWNoZV91Y2FjaGVfYWRkfHdpbmNhY2hlX3VjYWNoZV9jYXN8d2luY2FjaGVfdWNhY2hlX2NsZWFyfHdpbmNhY2hlX3VjYWNoZV9kZWN8d2luY2FjaGVfdWNhY2hlX2RlbGV0ZXx3aW5jYWNoZV91Y2FjaGVfZXhpc3RzfHdpbmNhY2hlX3VjYWNoZV9nZXR8d2luY2FjaGVfdWNhY2hlX2luY3x3aW5jYWNoZV91Y2FjaGVfaW5mb3x3aW5jYWNoZV91Y2FjaGVfbWVtaW5mb3x3aW5jYWNoZV91Y2FjaGVfc2V0fHdpbmNhY2hlX3VubG9ja3x3b3Jkd3JhcHx4YXR0cl9nZXR8eGF0dHJfbGlzdHx4YXR0cl9yZW1vdmV8eGF0dHJfc2V0fHhhdHRyX3N1cHBvcnRlZHx4ZGlmZl9maWxlX2JkaWZmfHhkaWZmX2ZpbGVfYmRpZmZfc2l6ZXx4ZGlmZl9maWxlX2JwYXRjaHx4ZGlmZl9maWxlX2RpZmZ8eGRpZmZfZmlsZV9kaWZmX2JpbmFyeXx4ZGlmZl9maWxlX21lcmdlM3x4ZGlmZl9maWxlX3BhdGNofHhkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5fHhkaWZmX2ZpbGVfcmFiZGlmZnx4ZGlmZl9zdHJpbmdfYmRpZmZ8eGRpZmZfc3RyaW5nX2JkaWZmX3NpemV8eGRpZmZfc3RyaW5nX2JwYXRjaHx4ZGlmZl9zdHJpbmdfZGlmZnx4ZGlmZl9zdHJpbmdfZGlmZl9iaW5hcnl8eGRpZmZfc3RyaW5nX21lcmdlM3x4ZGlmZl9zdHJpbmdfcGF0Y2h8eGRpZmZfc3RyaW5nX3BhdGNoX2JpbmFyeXx4ZGlmZl9zdHJpbmdfcmFiZGlmZnx4aHByb2ZfZGlzYWJsZXx4aHByb2ZfZW5hYmxlfHhocHJvZl9zYW1wbGVfZGlzYWJsZXx4aHByb2Zfc2FtcGxlX2VuYWJsZXx4bWxfZXJyb3Jfc3RyaW5nfHhtbF9nZXRfY3VycmVudF9ieXRlX2luZGV4fHhtbF9nZXRfY3VycmVudF9jb2x1bW5fbnVtYmVyfHhtbF9nZXRfY3VycmVudF9saW5lX251bWJlcnx4bWxfZ2V0X2Vycm9yX2NvZGV8eG1sX3BhcnNlfHhtbF9wYXJzZV9pbnRvX3N0cnVjdHx4bWxfcGFyc2VyX2NyZWF0ZXx4bWxfcGFyc2VyX2NyZWF0ZV9uc3x4bWxfcGFyc2VyX2ZyZWV8eG1sX3BhcnNlcl9nZXRfb3B0aW9ufHhtbF9wYXJzZXJfc2V0X29wdGlvbnx4bWxfc2V0X2NoYXJhY3Rlcl9kYXRhX2hhbmRsZXJ8eG1sX3NldF9kZWZhdWx0X2hhbmRsZXJ8eG1sX3NldF9lbGVtZW50X2hhbmRsZXJ8eG1sX3NldF9lbmRfbmFtZXNwYWNlX2RlY2xfaGFuZGxlcnx4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9yZWZfaGFuZGxlcnx4bWxfc2V0X25vdGF0aW9uX2RlY2xfaGFuZGxlcnx4bWxfc2V0X29iamVjdHx4bWxfc2V0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25faGFuZGxlcnx4bWxfc2V0X3N0YXJ0X25hbWVzcGFjZV9kZWNsX2hhbmRsZXJ8eG1sX3NldF91bnBhcnNlZF9lbnRpdHlfZGVjbF9oYW5kbGVyfHhtbHJlYWRlcnx4bWxycGNfZGVjb2RlfHhtbHJwY19kZWNvZGVfcmVxdWVzdHx4bWxycGNfZW5jb2RlfHhtbHJwY19lbmNvZGVfcmVxdWVzdHx4bWxycGNfZ2V0X3R5cGV8eG1scnBjX2lzX2ZhdWx0fHhtbHJwY19wYXJzZV9tZXRob2RfZGVzY3JpcHRpb25zfHhtbHJwY19zZXJ2ZXJfYWRkX2ludHJvc3BlY3Rpb25fZGF0YXx4bWxycGNfc2VydmVyX2NhbGxfbWV0aG9kfHhtbHJwY19zZXJ2ZXJfY3JlYXRlfHhtbHJwY19zZXJ2ZXJfZGVzdHJveXx4bWxycGNfc2VydmVyX3JlZ2lzdGVyX2ludHJvc3BlY3Rpb25fY2FsbGJhY2t8eG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9tZXRob2R8eG1scnBjX3NldF90eXBlfHhtbHdyaXRlcl9lbmRfYXR0cmlidXRlfHhtbHdyaXRlcl9lbmRfY2RhdGF8eG1sd3JpdGVyX2VuZF9jb21tZW50fHhtbHdyaXRlcl9lbmRfZG9jdW1lbnR8eG1sd3JpdGVyX2VuZF9kdGR8eG1sd3JpdGVyX2VuZF9kdGRfYXR0bGlzdHx4bWx3cml0ZXJfZW5kX2R0ZF9lbGVtZW50fHhtbHdyaXRlcl9lbmRfZHRkX2VudGl0eXx4bWx3cml0ZXJfZW5kX2VsZW1lbnR8eG1sd3JpdGVyX2VuZF9waXx4bWx3cml0ZXJfZmx1c2h8eG1sd3JpdGVyX2Z1bGxfZW5kX2VsZW1lbnR8eG1sd3JpdGVyX29wZW5fbWVtb3J5fHhtbHdyaXRlcl9vcGVuX3VyaXx4bWx3cml0ZXJfb3V0cHV0X21lbW9yeXx4bWx3cml0ZXJfc2V0X2luZGVudHx4bWx3cml0ZXJfc2V0X2luZGVudF9zdHJpbmd8eG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZXx4bWx3cml0ZXJfc3RhcnRfYXR0cmlidXRlX25zfHhtbHdyaXRlcl9zdGFydF9jZGF0YXx4bWx3cml0ZXJfc3RhcnRfY29tbWVudHx4bWx3cml0ZXJfc3RhcnRfZG9jdW1lbnR8eG1sd3JpdGVyX3N0YXJ0X2R0ZHx4bWx3cml0ZXJfc3RhcnRfZHRkX2F0dGxpc3R8eG1sd3JpdGVyX3N0YXJ0X2R0ZF9lbGVtZW50fHhtbHdyaXRlcl9zdGFydF9kdGRfZW50aXR5fHhtbHdyaXRlcl9zdGFydF9lbGVtZW50fHhtbHdyaXRlcl9zdGFydF9lbGVtZW50X25zfHhtbHdyaXRlcl9zdGFydF9waXx4bWx3cml0ZXJfdGV4dHx4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlfHhtbHdyaXRlcl93cml0ZV9hdHRyaWJ1dGVfbnN8eG1sd3JpdGVyX3dyaXRlX2NkYXRhfHhtbHdyaXRlcl93cml0ZV9jb21tZW50fHhtbHdyaXRlcl93cml0ZV9kdGR8eG1sd3JpdGVyX3dyaXRlX2R0ZF9hdHRsaXN0fHhtbHdyaXRlcl93cml0ZV9kdGRfZWxlbWVudHx4bWx3cml0ZXJfd3JpdGVfZHRkX2VudGl0eXx4bWx3cml0ZXJfd3JpdGVfZWxlbWVudHx4bWx3cml0ZXJfd3JpdGVfZWxlbWVudF9uc3x4bWx3cml0ZXJfd3JpdGVfcGl8eG1sd3JpdGVyX3dyaXRlX3Jhd3x4cGF0aF9ldmFsfHhwYXRoX2V2YWxfZXhwcmVzc2lvbnx4cGF0aF9uZXdfY29udGV4dHx4cGF0aF9yZWdpc3Rlcl9uc3x4cGF0aF9yZWdpc3Rlcl9uc19hdXRvfHhwdHJfZXZhbHx4cHRyX25ld19jb250ZXh0fHhzbHRfYmFja2VuZF9pbmZvfHhzbHRfYmFja2VuZF9uYW1lfHhzbHRfYmFja2VuZF92ZXJzaW9ufHhzbHRfY3JlYXRlfHhzbHRfZXJybm98eHNsdF9lcnJvcnx4c2x0X2ZyZWV8eHNsdF9nZXRvcHR8eHNsdF9wcm9jZXNzfHhzbHRfc2V0X2Jhc2V8eHNsdF9zZXRfZW5jb2Rpbmd8eHNsdF9zZXRfZXJyb3JfaGFuZGxlcnx4c2x0X3NldF9sb2d8eHNsdF9zZXRfb2JqZWN0fHhzbHRfc2V0X3NheF9oYW5kbGVyfHhzbHRfc2V0X3NheF9oYW5kbGVyc3x4c2x0X3NldF9zY2hlbWVfaGFuZGxlcnx4c2x0X3NldF9zY2hlbWVfaGFuZGxlcnN8eHNsdF9zZXRvcHR8eHNsdHByb2Nlc3Nvcnx5YW1sX2VtaXR8eWFtbF9lbWl0X2ZpbGV8eWFtbF9wYXJzZXx5YW1sX3BhcnNlX2ZpbGV8eWFtbF9wYXJzZV91cmx8eWF6X2FkZGluZm98eWF6X2NjbF9jb25mfHlhel9jY2xfcGFyc2V8eWF6X2Nsb3NlfHlhel9jb25uZWN0fHlhel9kYXRhYmFzZXx5YXpfZWxlbWVudHx5YXpfZXJybm98eWF6X2Vycm9yfHlhel9lc3x5YXpfZXNfcmVzdWx0fHlhel9nZXRfb3B0aW9ufHlhel9oaXRzfHlhel9pdGVtb3JkZXJ8eWF6X3ByZXNlbnR8eWF6X3JhbmdlfHlhel9yZWNvcmR8eWF6X3NjYW58eWF6X3NjYW5fcmVzdWx0fHlhel9zY2hlbWF8eWF6X3NlYXJjaHx5YXpfc2V0X29wdGlvbnx5YXpfc29ydHx5YXpfc3ludGF4fHlhel93YWl0fHlwX2FsbHx5cF9jYXR8eXBfZXJyX3N0cmluZ3x5cF9lcnJub3x5cF9maXJzdHx5cF9nZXRfZGVmYXVsdF9kb21haW58eXBfbWFzdGVyfHlwX21hdGNofHlwX25leHR8eXBfb3JkZXJ8emVuZF9sb2dvX2d1aWR8emVuZF90aHJlYWRfaWR8emVuZF92ZXJzaW9ufHppcF9jbG9zZXx6aXBfZW50cnlfY2xvc2V8emlwX2VudHJ5X2NvbXByZXNzZWRzaXplfHppcF9lbnRyeV9jb21wcmVzc2lvbm1ldGhvZHx6aXBfZW50cnlfZmlsZXNpemV8emlwX2VudHJ5X25hbWV8emlwX2VudHJ5X29wZW58emlwX2VudHJ5X3JlYWR8emlwX29wZW58emlwX3JlYWR8emlwYXJjaGl2ZXx6aXBhcmNoaXZlX2FkZGVtcHR5ZGlyfHppcGFyY2hpdmVfYWRkZmlsZXx6aXBhcmNoaXZlX2FkZGZyb21zdHJpbmd8emlwYXJjaGl2ZV9jbG9zZXx6aXBhcmNoaXZlX2RlbGV0ZWluZGV4fHppcGFyY2hpdmVfZGVsZXRlbmFtZXx6aXBhcmNoaXZlX2V4dHJhY3R0b3x6aXBhcmNoaXZlX2dldGFyY2hpdmVjb21tZW50fHppcGFyY2hpdmVfZ2V0Y29tbWVudGluZGV4fHppcGFyY2hpdmVfZ2V0Y29tbWVudG5hbWV8emlwYXJjaGl2ZV9nZXRmcm9taW5kZXh8emlwYXJjaGl2ZV9nZXRmcm9tbmFtZXx6aXBhcmNoaXZlX2dldG5hbWVpbmRleHx6aXBhcmNoaXZlX2dldHN0YXR1c3N0cmluZ3x6aXBhcmNoaXZlX2dldHN0cmVhbXx6aXBhcmNoaXZlX2xvY2F0ZW5hbWV8emlwYXJjaGl2ZV9vcGVufHppcGFyY2hpdmVfcmVuYW1laW5kZXh8emlwYXJjaGl2ZV9yZW5hbWVuYW1lfHppcGFyY2hpdmVfc2V0Q29tbWVudE5hbWV8emlwYXJjaGl2ZV9zZXRhcmNoaXZlY29tbWVudHx6aXBhcmNoaXZlX3NldGNvbW1lbnRpbmRleHx6aXBhcmNoaXZlX3N0YXRpbmRleHx6aXBhcmNoaXZlX3N0YXRuYW1lfHppcGFyY2hpdmVfdW5jaGFuZ2VhbGx8emlwYXJjaGl2ZV91bmNoYW5nZWFyY2hpdmV8emlwYXJjaGl2ZV91bmNoYW5nZWluZGV4fHppcGFyY2hpdmVfdW5jaGFuZ2VuYW1lfHpsaWJfZ2V0X2NvZGluZ190eXBlIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgiYWJzdHJhY3R8YW5kfGFycmF5fGFzfGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y2xvbmV8Y29uc3R8Y29udGludWV8ZGVjbGFyZXxkZWZhdWx0fGRvfGVsc2V8ZWxzZWlmfGVuZGRlY2xhcmV8ZW5kZm9yfGVuZGZvcmVhY2h8ZW5kaWZ8ZW5kc3dpdGNofGVuZHdoaWxlfGV4dGVuZHN8ZmluYWx8Zm9yfGZvcmVhY2h8ZnVuY3Rpb258Z2xvYmFsfGdvdG98aWZ8aW1wbGVtZW50c3xpbnRlcmZhY2V8aW5zdGFuY2VvZnxuYW1lc3BhY2V8bmV3fG9yfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xzdGF0aWN8c3dpdGNofHRocm93fHRyeXx1c2V8dmFyfHdoaWxlfHhvciIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoImRpZXxlY2hvfGVtcHR5fGV4aXR8ZXZhbHxpbmNsdWRlfGluY2x1ZGVfb25jZXxpc3NldHxsaXN0fHJlcXVpcmV8cmVxdWlyZV9vbmNlfHJldHVybnxwcmludHx1bnNldCIuc3BsaXQoInwiKSksZz1lLmFycmF5VG9NYXAoInRydWV8ZmFsc2V8bnVsbHxfX0NMQVNTX198X19ESVJfX3xfX0ZJTEVfX3xfX0xJTkVfX3xfX01FVEhPRF9ffF9fRlVOQ1RJT05fX3xfX05BTUVTUEFDRV9fIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgiJEdMT0JBTFN8JF9TRVJWRVJ8JF9HRVR8JF9QT1NUfCRfRklMRVN8JF9SRVFVRVNUfCRfU0VTU0lPTnwkX0VOVnwkX0NPT0tJRXwkcGhwX2Vycm9ybXNnfCRIVFRQX1JBV19QT1NUX0RBVEF8JGh0dHBfcmVzcG9uc2VfaGVhZGVyfCRhcmdjfCRhcmd2Ii5zcGxpdCgifCIpKSxpPWUuYXJyYXlUb01hcCgia2V5X2V4aXN0c3xjYWlyb19tYXRyaXhfY3JlYXRlX3NjYWxlfGNhaXJvX21hdHJpeF9jcmVhdGVfdHJhbnNsYXRlfGNhbGxfdXNlcl9tZXRob2R8Y2FsbF91c2VyX21ldGhvZF9hcnJheXxjb21fYWRkcmVmfGNvbV9nZXR8Y29tX2ludm9rZXxjb21faXNlbnVtfGNvbV9sb2FkfGNvbV9yZWxlYXNlfGNvbV9zZXR8Y29ubmVjdGlvbl90aW1lb3V0fGN1YnJpZF9sb2FkX2Zyb21fZ2xvfGN1YnJpZF9uZXdfZ2xvfGN1YnJpZF9zYXZlX3RvX2dsb3xjdWJyaWRfc2VuZF9nbG98ZGVmaW5lX3N5c2xvZ192YXJpYWJsZXN8ZGx8ZXJlZ3xlcmVnX3JlcGxhY2V8ZXJlZ2l8ZXJlZ2lfcmVwbGFjZXxod19kb2N1bWVudGF0dHJpYnV0ZXN8aHdfZG9jdW1lbnRib2R5dGFnfGh3X2RvY3VtZW50c2l6ZXxod19vdXRwdXRkb2N1bWVudHxpbWFnZWRhc2hlZGxpbmV8bWF4ZGJfYmluZF9wYXJhbXxtYXhkYl9iaW5kX3Jlc3VsdHxtYXhkYl9jbGllbnRfZW5jb2Rpbmd8bWF4ZGJfY2xvc2VfbG9uZ19kYXRhfG1heGRiX2V4ZWN1dGV8bWF4ZGJfZmV0Y2h8bWF4ZGJfZ2V0X21ldGFkYXRhfG1heGRiX3BhcmFtX2NvdW50fG1heGRiX3NlbmRfbG9uZ19kYXRhfG1jcnlwdF9lY2J8bWNyeXB0X2dlbmVyaWNfZW5kfG1pbWVfY29udGVudF90eXBlfG15c3FsX2NyZWF0ZWRifG15c3FsX2RibmFtZXxteXNxbF9kYl9xdWVyeXxteXNxbF9kcm9wX2RifG15c3FsX2Ryb3BkYnxteXNxbF9lc2NhcGVfc3RyaW5nfG15c3FsX2ZpZWxkZmxhZ3N8bXlzcWxfZmllbGRmbGFnc3xteXNxbF9maWVsZG5hbWV8bXlzcWxfZmllbGR0YWJsZXxteXNxbF9maWVsZHR5cGV8bXlzcWxfZnJlZXJlc3VsdHxteXNxbF9saXN0ZGJzfG15c3FsX2xpc3RfZmllbGRzfG15c3FsX2xpc3RmaWVsZHN8bXlzcWxfbGlzdF90YWJsZXN8bXlzcWxfbGlzdHRhYmxlc3xteXNxbF9udW1maWVsZHN8bXlzcWxfbnVtcm93c3xteXNxbF9zZWxlY3RkYnxteXNxbF90YWJsZW5hbWV8bXlzcWxpX2JpbmRfcGFyYW18bXlzcWxpX2JpbmRfcmVzdWx0fG15c3FsaV9kaXNhYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG15c3FsaV9kaXNhYmxlX3JwbF9wYXJzZXxteXNxbGlfZW5hYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG15c3FsaV9lbmFibGVfcnBsX3BhcnNlfG15c3FsaV9leGVjdXRlfG15c3FsaV9mZXRjaHxteXNxbGlfZ2V0X21ldGFkYXRhfG15c3FsaV9tYXN0ZXJfcXVlcnl8bXlzcWxpX3BhcmFtX2NvdW50fG15c3FsaV9ycGxfcGFyc2VfZW5hYmxlZHxteXNxbGlfcnBsX3Byb2JlfG15c3FsaV9ycGxfcXVlcnlfdHlwZXxteXNxbGlfc2VuZF9sb25nX2RhdGF8bXlzcWxpX3NlbmRfcXVlcnl8bXlzcWxpX3NsYXZlX3F1ZXJ5fG9jaWJpbmRieW5hbWV8b2NpY2FuY2VsfG9jaWNsb3NlbG9ifG9jaWNvbGxhcHBlbmR8b2NpY29sbGFzc2lnbnxvY2ljb2xsYXNzaWduZWxlbXxvY2ljb2xsZ2V0ZWxlbXxvY2ljb2xsbWF4fG9jaWNvbGxzaXplfG9jaWNvbGx0cmltfG9jaWNvbHVtbmlzbnVsbHxvY2ljb2x1bW5uYW1lfG9jaWNvbHVtbnByZWNpc2lvbnxvY2ljb2x1bW5zY2FsZXxvY2ljb2x1bW5zaXplfG9jaWNvbHVtbnR5cGV8b2NpY29sdW1udHlwZXJhd3xvY2ljb21taXR8b2NpZGVmaW5lYnluYW1lfG9jaWVycm9yfG9jaWV4ZWN1dGV8b2NpZmV0Y2h8b2NpZmV0Y2hpbnRvfG9jaWZldGNoc3RhdGVtZW50fG9jaWZyZWVjb2xsZWN0aW9ufG9jaWZyZWVjdXJzb3J8b2NpZnJlZWRlc2N8b2NpZnJlZXN0YXRlbWVudHxvY2lpbnRlcm5hbGRlYnVnfG9jaWxvYWRsb2J8b2NpbG9nb2ZmfG9jaWxvZ29ufG9jaW5ld2NvbGxlY3Rpb258b2NpbmV3Y3Vyc29yfG9jaW5ld2Rlc2NyaXB0b3J8b2NpbmxvZ29ufG9jaW51bWNvbHN8b2NpcGFyc2V8b2NpcGxvZ29ufG9jaXJlc3VsdHxvY2lyb2xsYmFja3xvY2lyb3djb3VudHxvY2lzYXZlbG9ifG9jaXNhdmVsb2JmaWxlfG9jaXNlcnZlcnZlcnNpb258b2Npc2V0cHJlZmV0Y2h8b2Npc3RhdGVtZW50dHlwZXxvY2l3cml0ZWxvYnRvZmlsZXxvY2l3cml0ZXRlbXBvcmFyeWxvYnxQREZfYWRkX2Fubm90YXRpb258UERGX2FkZF9ib29rbWFya3xQREZfYWRkX2xhdW5jaGxpbmt8UERGX2FkZF9sb2NhbGxpbmt8UERGX2FkZF9ub3RlfFBERl9hZGRfb3V0bGluZXxQREZfYWRkX3BkZmxpbmt8UERGX2FkZF93ZWJsaW5rfFBERl9hdHRhY2hfZmlsZXxQREZfYmVnaW5fcGFnZXxQREZfYmVnaW5fdGVtcGxhdGV8UERGX2Nsb3NlX3BkaXxQREZfY2xvc2V8UERGX2ZpbmRmb250fFBERl9nZXRfZm9udHxQREZfZ2V0X2ZvbnRuYW1lfFBERl9nZXRfZm9udHNpemV8UERGX2dldF9pbWFnZV9oZWlnaHR8UERGX2dldF9pbWFnZV93aWR0aHxQREZfZ2V0X21ham9ydmVyc2lvbnxQREZfZ2V0X21pbm9ydmVyc2lvbnxQREZfZ2V0X3BkaV9wYXJhbWV0ZXJ8UERGX2dldF9wZGlfdmFsdWV8UERGX29wZW5fY2NpdHR8UERGX29wZW5fZmlsZXxQREZfb3Blbl9naWZ8UERGX29wZW5faW1hZ2VfZmlsZXxQREZfb3Blbl9pbWFnZXxQREZfb3Blbl9qcGVnfFBERl9vcGVuX3BkaXxQREZfb3Blbl90aWZmfFBERl9wbGFjZV9pbWFnZXxQREZfcGxhY2VfcGRpX3BhZ2V8UERGX3NldF9ib3JkZXJfY29sb3J8UERGX3NldF9ib3JkZXJfZGFzaHxQREZfc2V0X2JvcmRlcl9zdHlsZXxQREZfc2V0X2NoYXJfc3BhY2luZ3xQREZfc2V0X2R1cmF0aW9ufFBERl9zZXRfaG9yaXpfc2NhbGluZ3xQREZfc2V0X2luZm9fYXV0aG9yfFBERl9zZXRfaW5mb19jcmVhdG9yfFBERl9zZXRfaW5mb19rZXl3b3Jkc3xQREZfc2V0X2luZm9fc3ViamVjdHxQREZfc2V0X2luZm9fdGl0bGV8UERGX3NldF9sZWFkaW5nfFBERl9zZXRfdGV4dF9tYXRyaXh8UERGX3NldF90ZXh0X3JlbmRlcmluZ3xQREZfc2V0X3RleHRfcmlzZXxQREZfc2V0X3dvcmRfc3BhY2luZ3xQREZfc2V0Z3JheV9maWxsfFBERl9zZXRncmF5X3N0cm9rZXxQREZfc2V0Z3JheXxQREZfc2V0cG9seWRhc2h8UERGX3NldHJnYmNvbG9yX2ZpbGx8UERGX3NldHJnYmNvbG9yX3N0cm9rZXxQREZfc2V0cmdiY29sb3J8UERGX3Nob3dfYm94ZWR8cGhwX2NoZWNrX3N5bnRheHxweF9zZXRfdGFibGVuYW1lfHB4X3NldF90YXJnZXRlbmNvZGluZ3xydW5raXRfc2FuZGJveF9vdXRwdXRfaGFuZGxlcnxzZXNzaW9uX2lzX3JlZ2lzdGVyZWR8c2Vzc2lvbl9yZWdpc3RlcnxzZXNzaW9uX3VucmVnaXN0ZXJzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWV8bWFnaWNfcXVvdGVzX3J1bnRpbWV8c2V0X3NvY2tldF9ibG9ja2luZ3xzb2NrZXRfc2V0X2Jsb2NraW5nfHNldF9zb2NrZXRfdGltZW91dHxzb2NrZXRfc2V0X3RpbWVvdXR8c3BsaXR8c3BsaXRpfHNxbF9yZWdjYXNlIi5zcGxpdCgifCIpKSxqPWUuYXJyYXlUb01hcCgiY2Z1bmN0aW9ufG9sZF9mdW5jdGlvbiIuc3BsaXQoInwiKSksaz1lLmFycmF5VG9NYXAoW10pO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJzdXBwb3J0LnBocF90YWciLHJlZ2V4OiI8XFw/KD86cGhwfFxcPSkifSx7dG9rZW46InN1cHBvcnQucGhwX3RhZyIscmVnZXg6IlxcPz4ifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiI8XFwhLS0iLG5leHQ6Imh0bWxjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxzdHlsZSIsbmV4dDoiY3NzIn0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/Wy1fYS16QS1aMC05Ol0rIixuZXh0OiJodG1sdGFnIn0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjwhRE9DVFlQRS4qPz4ifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIjLiokIn0sYS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dW2dpbXldKlxccyooPz1bKS4sO118JCkifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXS4qXFxcXCQnLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10uKlxcXFwkIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UiLHJlZ2V4OiJcXGIoPzpERUZBVUxUX0lOQ0xVREVfUEFUSHxFXyg/OkFMTHxDTyg/Ok1QSUxFXyg/OkVSUk9SfFdBUk5JTkcpfFJFXyg/OkVSUk9SfFdBUk5JTkcpKXxFUlJPUnxOT1RJQ0V8UEFSU0V8U1RSSUNUfFVTRVJfKD86RVJST1J8Tk9USUNFfFdBUk5JTkcpfFdBUk5JTkcpfFAoPzpFQVJfKD86RVhURU5TSU9OX0RJUnxJTlNUQUxMX0RJUil8SFBfKD86QklORElSfENPTkZJR19GSUxFXyg/OlBBVEh8U0NBTl9ESVIpfERBVEFESVJ8RSg/Ok9MfFhURU5TSU9OX0RJUil8SU5UXyg/Ok1BWHxTSVpFKXxMKD86SUJESVJ8T0NBTFNUQVRFRElSKXxPKD86U3xVVFBVVF9IQU5ETEVSXyg/OkNPTlR8RU5EfFNUQVJUKSl8UFJFRklYfFMoPzpBUEl8SExJQl9TVUZGSVh8WVNDT05GRElSKXxWRVJTSU9OKSl8X19DT01QSUxFUl9IQUxUX09GRlNFVF9fKVxcYiJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UiLHJlZ2V4OiJcXGIoPzpBKD86Qig/OkRBWV8oPzoxfDJ8M3w0fDV8Nnw3KXxNT05fKD86MSg/OjB8MXwyfCl8MnwzfDR8NXw2fDd8OHw5KSl8TFRfRElHSVRTfE1fU1RSfFNTRVJUXyg/OkFDVElWRXxCQUlMfENBTExCQUNLfFFVSUVUX0VWQUx8V0FSTklORykpfEMoPzpBU0VfKD86TE9XRVJ8VVBQRVIpfEhBUl9NQVh8Tyg/OkRFU0VUfE5ORUNUSU9OXyg/OkFCT1JURUR8Tk9STUFMfFRJTUVPVVQpfFVOVF8oPzpOT1JNQUx8UkVDVVJTSVZFKSl8Uig/OkVESVRTXyg/OkFMTHxET0NTfEZVTExQQUdFfEcoPzpFTkVSQUx8Uk9VUCl8TU9EVUxFU3xRQXxTQVBJKXxOQ1lTVFJ8WVBUXyg/OkJMT1dGSVNIfEVYVF9ERVN8TUQ1fFMoPzpBTFRfTEVOR1RIfFREX0RFUykpKXxVUlJFTkNZX1NZTUJPTCl8RCg/OkFZXyg/OjF8MnwzfDR8NXw2fDcpfEVDSU1BTF9QT0lOVHxJUkVDVE9SWV9TRVBBUkFUT1J8Xyg/OkZNVHxUX0ZNVCkpfEUoPzpOVF8oPzpDT01QQVR8Tk9RVU9URVN8UVVPVEVTKXxSQSg/Ol8oPzpEXyg/OkZNVHxUX0ZNVCl8VF9GTVR8WUVBUil8KXxYVFJfKD86SUZfRVhJU1RTfE9WRVJXUklURXxQUkVGSVhfKD86QUxMfEkoPzpGX0VYSVNUU3xOVkFMSUQpfFNBTUUpfFNLSVApKXxGUkFDX0RJR0lUU3xHUk9VUElOR3xIVE1MXyg/OkVOVElUSUVTfFNQRUNJQUxDSEFSUyl8SU4oPzpGT18oPzpBTEx8Qyg/Ok9ORklHVVJBVElPTnxSRURJVFMpfEVOVklST05NRU5UfEdFTkVSQUx8TElDRU5TRXxNT0RVTEVTfFZBUklBQkxFUyl8SV8oPzpBTEx8UEVSRElSfFNZU1RFTXxVU0VSKXxUXyg/OkNVUlJfU1lNQk9MfEZSQUNfRElHSVRTKSl8TCg/OkNfKD86QUxMfEMoPzpPTExBVEV8VFlQRSl8TSg/OkVTU0FHRVN8T05FVEFSWSl8TlVNRVJJQ3xUSU1FKXxPKD86Q0tfKD86RVh8TkJ8U0h8VU4pfEdfKD86QSg/OkxFUlR8VVRIKD86UFJJVnwpKXxDKD86T05TfFIoPzpJVHxPTikpfEQoPzpBRU1PTnxFQlVHKXxFKD86TUVSR3xSUil8SU5GT3xLRVJOfEwoPzpPQ0FMKD86MHwxfDJ8M3w0fDV8Nnw3KXxQUil8TUFJTHxOKD86REVMQVl8RVdTfE8oPzpUSUNFfFdBSVQpKXxPREVMQVl8UCg/OkVSUk9SfElEKXxTWVNMT0d8VSg/OlNFUnxVQ1ApfFdBUk5JTkcpKSl8TSg/Ok9OXyg/OjEoPzowfDF8MnwpfDJ8M3w0fDV8Nnw3fDh8OXxERUNJTUFMX1BPSU5UfEdST1VQSU5HfFRIT1VTQU5EU19TRVApfF8oPzoxX1BJfDJfKD86UEl8U1FSVFBJKXxFfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxQSSg/Ol8oPzoyfDQpfCl8U1FSVCg/OjFfMnwyKSkpfE4oPzpFR0FUSVZFX1NJR058Tyg/OkVYUFJ8U1RSKXxfKD86Q1NfUFJFQ0VERVN8Uyg/OkVQX0JZX1NQQUNFfElHTl9QT1NOKSkpfFAoPzpBVEgoPzpJTkZPXyg/OkJBU0VOQU1FfERJUk5BTUV8RVhURU5TSU9OKXxfU0VQQVJBVE9SKXxNX1NUUnxPU0lUSVZFX1NJR058Xyg/OkNTX1BSRUNFREVTfFMoPzpFUF9CWV9TUEFDRXxJR05fUE9TTikpKXxSQURJWENIQVJ8Uyg/OkVFS18oPzpDVVJ8RU5EfFNFVCl8T1JUXyg/OkFTQ3xERVNDfE5VTUVSSUN8UkVHVUxBUnxTVFJJTkcpfFRSX1BBRF8oPzpCT1RIfExFRlR8UklHSFQpKXxUKD86SE9VUyg/OkFORFNfU0VQfEVQKXxfRk1UKD86X0FNUE18KSl8WUVTKD86RVhQUnxTVFIpfFNURCg/OklOfE9VVHxFUlIpKVxcYiJ9LHt0b2tlbjpmdW5jdGlvbihhKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShhKT8ia2V5d29yZCI6Zy5oYXNPd25Qcm9wZXJ0eShhKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmguaGFzT3duUHJvcGVydHkoYSk/InZhcmlhYmxlLmxhbmd1YWdlIjprLmhhc093blByb3BlcnR5KGEpPyJpbnZhbGlkLmlsbGVnYWwiOmIuaGFzT3duUHJvcGVydHkoYSk/InN1cHBvcnQuZnVuY3Rpb24iOmE9PSJkZWJ1Z2dlciI/ImludmFsaWQuZGVwcmVjYXRlZCI6YS5tYXRjaCgvXihcJFthLXpBLVpdW2EtekEtWjAtOV9dKnxzZWxmfHBhcmVudCkkLyk/InZhcmlhYmxlIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkifSx7dG9rZW46ImxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiLisifV0saHRtbGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKyJ9XSxodG1sdGFnOlt7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPiIsbmV4dDoic3RhcnQifSx7dG9rZW46InRleHQiLHJlZ2V4OiJbLV9hLXpBLVowLTk6XSsifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiciLio/Iid9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiJy4qPycifV0sY3NzOlt7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPC9zdHlsZT4iLG5leHQ6Imh0bWx0YWcifSx7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPiJ9LHt0b2tlbjoidGV4dCIscmVnZXg6Iig/Om1lZGlhfHR5cGV8aHJlZikifSx7dG9rZW46InN0cmluZyIscmVnZXg6Jz0iLio/Iid9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoieyIsbmV4dDoiY3NzZGVjbGFyYXRpb24ifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjW0EtWmEtejAtOS1fLl0rIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLltBLVphLXowLTktXy5dKyJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbQS1aYS16MC05XSsifV0sY3NzZGVjbGFyYXRpb246W3t0b2tlbjoic3VwcG9ydC50eXBlIixyZWdleDoiWy1hLXpBLVpdKyIsbmV4dDoiY3NzdmFsdWUifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6In0iLG5leHQ6ImNzcyJ9XSxjc3N2YWx1ZTpbe3Rva2VuOiJ0ZXh0IixyZWdleDoiOiJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiIjWzAtOWEtekEtWl0rIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiWy1fMC05YS16QS1aXCInICwlXSsifSx7dG9rZW46InRleHQiLHJlZ2V4OiI7IixuZXh0OiJjc3NkZWNsYXJhdGlvbiJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGYsImRvYy0iLFsobmV3IGYpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhoLGcpLGIuUGhwSGlnaGxpZ2h0UnVsZXM9aH0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlx9Ly50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcfSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KSkuY2FsbChlLnByb3RvdHlwZSksYi5NYXRjaGluZ0JyYWNlT3V0ZGVudD1lfSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9waHAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvcGhwX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3BocF9oaWdobGlnaHRfcnVsZXMiKS5QaHBIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixrPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxsPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGosdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGt9O2QuaW5oZXJpdHMobCxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKSMvO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIjIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucztpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Iil7dmFyIGc9Yi5tYXRjaCgvXi4qW1x7XChcW1w6XVxzKiQvKTtnJiYoZCs9Yyl9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfX0uY2FsbChsLnByb3RvdHlwZSksYi5Nb2RlPWx9KSxkZWZpbmUoImFjZS9tb2RlL3BocF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZixiPWUuYXJyYXlUb01hcCgiYWJzfGFjb3N8YWNvc2h8YWRkY3NsYXNoZXN8YWRkc2xhc2hlc3xhZ2dyZWdhdGV8YWdncmVnYXRlX2luZm98YWdncmVnYXRlX21ldGhvZHN8YWdncmVnYXRlX21ldGhvZHNfYnlfbGlzdHxhZ2dyZWdhdGVfbWV0aG9kc19ieV9yZWdleHB8YWdncmVnYXRlX3Byb3BlcnRpZXN8YWdncmVnYXRlX3Byb3BlcnRpZXNfYnlfbGlzdHxhZ2dyZWdhdGVfcHJvcGVydGllc19ieV9yZWdleHB8YWdncmVnYXRpb25faW5mb3xhbXFwY29ubmVjdGlvbnxhbXFwZXhjaGFuZ2V8YW1xcHF1ZXVlfGFwYWNoZV9jaGlsZF90ZXJtaW5hdGV8YXBhY2hlX2dldF9tb2R1bGVzfGFwYWNoZV9nZXRfdmVyc2lvbnxhcGFjaGVfZ2V0ZW52fGFwYWNoZV9sb29rdXBfdXJpfGFwYWNoZV9ub3RlfGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnN8YXBhY2hlX3Jlc2V0X3RpbWVvdXR8YXBhY2hlX3Jlc3BvbnNlX2hlYWRlcnN8YXBhY2hlX3NldGVudnxhcGNfYWRkfGFwY19iaW5fZHVtcHxhcGNfYmluX2R1bXBmaWxlfGFwY19iaW5fbG9hZHxhcGNfYmluX2xvYWRmaWxlfGFwY19jYWNoZV9pbmZvfGFwY19jYXN8YXBjX2NsZWFyX2NhY2hlfGFwY19jb21waWxlX2ZpbGV8YXBjX2RlY3xhcGNfZGVmaW5lX2NvbnN0YW50c3xhcGNfZGVsZXRlfGFwY19kZWxldGVfZmlsZXxhcGNfZXhpc3RzfGFwY19mZXRjaHxhcGNfaW5jfGFwY19sb2FkX2NvbnN0YW50c3xhcGNfc21hX2luZm98YXBjX3N0b3JlfGFwY2l0ZXJhdG9yfGFwZF9icmVha3BvaW50fGFwZF9jYWxsc3RhY2t8YXBkX2NsdW5rfGFwZF9jb250aW51ZXxhcGRfY3JvYWt8YXBkX2R1bXBfZnVuY3Rpb25fdGFibGV8YXBkX2R1bXBfcGVyc2lzdGVudF9yZXNvdXJjZXN8YXBkX2R1bXBfcmVndWxhcl9yZXNvdXJjZXN8YXBkX2VjaG98YXBkX2dldF9hY3RpdmVfc3ltYm9sc3xhcGRfc2V0X3Bwcm9mX3RyYWNlfGFwZF9zZXRfc2Vzc2lvbnxhcGRfc2V0X3Nlc3Npb25fdHJhY2V8YXBkX3NldF9zZXNzaW9uX3RyYWNlX3NvY2tldHxhcHBlbmRpdGVyYXRvcnxhcnJheXxhcnJheV9jaGFuZ2Vfa2V5X2Nhc2V8YXJyYXlfY2h1bmt8YXJyYXlfY29tYmluZXxhcnJheV9jb3VudF92YWx1ZXN8YXJyYXlfZGlmZnxhcnJheV9kaWZmX2Fzc29jfGFycmF5X2RpZmZfa2V5fGFycmF5X2RpZmZfdWFzc29jfGFycmF5X2RpZmZfdWtleXxhcnJheV9maWxsfGFycmF5X2ZpbGxfa2V5c3xhcnJheV9maWx0ZXJ8YXJyYXlfZmxpcHxhcnJheV9pbnRlcnNlY3R8YXJyYXlfaW50ZXJzZWN0X2Fzc29jfGFycmF5X2ludGVyc2VjdF9rZXl8YXJyYXlfaW50ZXJzZWN0X3Vhc3NvY3xhcnJheV9pbnRlcnNlY3RfdWtleXxhcnJheV9rZXlfZXhpc3RzfGFycmF5X2tleXN8YXJyYXlfbWFwfGFycmF5X21lcmdlfGFycmF5X21lcmdlX3JlY3Vyc2l2ZXxhcnJheV9tdWx0aXNvcnR8YXJyYXlfcGFkfGFycmF5X3BvcHxhcnJheV9wcm9kdWN0fGFycmF5X3B1c2h8YXJyYXlfcmFuZHxhcnJheV9yZWR1Y2V8YXJyYXlfcmVwbGFjZXxhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZXxhcnJheV9yZXZlcnNlfGFycmF5X3NlYXJjaHxhcnJheV9zaGlmdHxhcnJheV9zbGljZXxhcnJheV9zcGxpY2V8YXJyYXlfc3VtfGFycmF5X3VkaWZmfGFycmF5X3VkaWZmX2Fzc29jfGFycmF5X3VkaWZmX3Vhc3NvY3xhcnJheV91aW50ZXJzZWN0fGFycmF5X3VpbnRlcnNlY3RfYXNzb2N8YXJyYXlfdWludGVyc2VjdF91YXNzb2N8YXJyYXlfdW5pcXVlfGFycmF5X3Vuc2hpZnR8YXJyYXlfdmFsdWVzfGFycmF5X3dhbGt8YXJyYXlfd2Fsa19yZWN1cnNpdmV8YXJyYXlhY2Nlc3N8YXJyYXlpdGVyYXRvcnxhcnJheW9iamVjdHxhcnNvcnR8YXNpbnxhc2luaHxhc29ydHxhc3NlcnR8YXNzZXJ0X29wdGlvbnN8YXRhbnxhdGFuMnxhdGFuaHxhdWRpb3Byb3BlcnRpZXN8YmFkZnVuY3Rpb25jYWxsZXhjZXB0aW9ufGJhZG1ldGhvZGNhbGxleGNlcHRpb258YmFzZTY0X2RlY29kZXxiYXNlNjRfZW5jb2RlfGJhc2VfY29udmVydHxiYXNlbmFtZXxiYmNvZGVfYWRkX2VsZW1lbnR8YmJjb2RlX2FkZF9zbWlsZXl8YmJjb2RlX2NyZWF0ZXxiYmNvZGVfZGVzdHJveXxiYmNvZGVfcGFyc2V8YmJjb2RlX3NldF9hcmdfcGFyc2VyfGJiY29kZV9zZXRfZmxhZ3N8YmNhZGR8YmNjb21wfGJjZGl2fGJjbW9kfGJjbXVsfGJjb21waWxlcl9sb2FkfGJjb21waWxlcl9sb2FkX2V4ZXxiY29tcGlsZXJfcGFyc2VfY2xhc3N8YmNvbXBpbGVyX3JlYWR8YmNvbXBpbGVyX3dyaXRlX2NsYXNzfGJjb21waWxlcl93cml0ZV9jb25zdGFudHxiY29tcGlsZXJfd3JpdGVfZXhlX2Zvb3RlcnxiY29tcGlsZXJfd3JpdGVfZmlsZXxiY29tcGlsZXJfd3JpdGVfZm9vdGVyfGJjb21waWxlcl93cml0ZV9mdW5jdGlvbnxiY29tcGlsZXJfd3JpdGVfZnVuY3Rpb25zX2Zyb21fZmlsZXxiY29tcGlsZXJfd3JpdGVfaGVhZGVyfGJjb21waWxlcl93cml0ZV9pbmNsdWRlZF9maWxlbmFtZXxiY3Bvd3xiY3Bvd21vZHxiY3NjYWxlfGJjc3FydHxiY3N1YnxiaW4yaGV4fGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0fGJpbmRlY3xiaW5kdGV4dGRvbWFpbnxic29uX2RlY29kZXxic29uX2VuY29kZXxidW1wVmFsdWV8YnpjbG9zZXxiemNvbXByZXNzfGJ6ZGVjb21wcmVzc3xiemVycm5vfGJ6ZXJyb3J8YnplcnJzdHJ8YnpmbHVzaHxiem9wZW58YnpyZWFkfGJ6d3JpdGV8Y2FjaGluZ2l0ZXJhdG9yfGNhaXJvfGNhaXJvX2NyZWF0ZXxjYWlyb19mb250X2ZhY2VfZ2V0X3R5cGV8Y2Fpcm9fZm9udF9mYWNlX3N0YXR1c3xjYWlyb19mb250X29wdGlvbnNfY3JlYXRlfGNhaXJvX2ZvbnRfb3B0aW9uc19lcXVhbHxjYWlyb19mb250X29wdGlvbnNfZ2V0X2FudGlhbGlhc3xjYWlyb19mb250X29wdGlvbnNfZ2V0X2hpbnRfbWV0cmljc3xjYWlyb19mb250X29wdGlvbnNfZ2V0X2hpbnRfc3R5bGV8Y2Fpcm9fZm9udF9vcHRpb25zX2dldF9zdWJwaXhlbF9vcmRlcnxjYWlyb19mb250X29wdGlvbnNfaGFzaHxjYWlyb19mb250X29wdGlvbnNfbWVyZ2V8Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXN8Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X21ldHJpY3N8Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlfGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfc3VicGl4ZWxfb3JkZXJ8Y2Fpcm9fZm9udF9vcHRpb25zX3N0YXR1c3xjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aHxjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZXxjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YXxjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mcm9tX3BuZ3xjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhfGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdHxjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHR8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlfGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRofGNhaXJvX21hdHJpeF9jcmVhdGVfc2NhbGV8Y2Fpcm9fbWF0cml4X2NyZWF0ZV90cmFuc2xhdGV8Y2Fpcm9fbWF0cml4X2ludmVydHxjYWlyb19tYXRyaXhfbXVsdGlwbHl8Y2Fpcm9fbWF0cml4X3JvdGF0ZXxjYWlyb19tYXRyaXhfdHJhbnNmb3JtX2Rpc3RhbmNlfGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnR8Y2Fpcm9fbWF0cml4X3RyYW5zbGF0ZXxjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYnxjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmF8Y2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2V8Y2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyfGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JhZGlhbHxjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yZ2J8Y2Fpcm9fcGF0dGVybl9jcmVhdGVfcmdiYXxjYWlyb19wYXR0ZXJuX2dldF9jb2xvcl9zdG9wX2NvdW50fGNhaXJvX3BhdHRlcm5fZ2V0X2NvbG9yX3N0b3BfcmdiYXxjYWlyb19wYXR0ZXJuX2dldF9leHRlbmR8Y2Fpcm9fcGF0dGVybl9nZXRfZmlsdGVyfGNhaXJvX3BhdHRlcm5fZ2V0X2xpbmVhcl9wb2ludHN8Y2Fpcm9fcGF0dGVybl9nZXRfbWF0cml4fGNhaXJvX3BhdHRlcm5fZ2V0X3JhZGlhbF9jaXJjbGVzfGNhaXJvX3BhdHRlcm5fZ2V0X3JnYmF8Y2Fpcm9fcGF0dGVybl9nZXRfc3VyZmFjZXxjYWlyb19wYXR0ZXJuX2dldF90eXBlfGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZHxjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXJ8Y2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4fGNhaXJvX3BhdHRlcm5fc3RhdHVzfGNhaXJvX3BkZl9zdXJmYWNlX2NyZWF0ZXxjYWlyb19wZGZfc3VyZmFjZV9zZXRfc2l6ZXxjYWlyb19wc19nZXRfbGV2ZWxzfGNhaXJvX3BzX2xldmVsX3RvX3N0cmluZ3xjYWlyb19wc19zdXJmYWNlX2NyZWF0ZXxjYWlyb19wc19zdXJmYWNlX2RzY19iZWdpbl9wYWdlX3NldHVwfGNhaXJvX3BzX3N1cmZhY2VfZHNjX2JlZ2luX3NldHVwfGNhaXJvX3BzX3N1cmZhY2VfZHNjX2NvbW1lbnR8Y2Fpcm9fcHNfc3VyZmFjZV9nZXRfZXBzfGNhaXJvX3BzX3N1cmZhY2VfcmVzdHJpY3RfdG9fbGV2ZWx8Y2Fpcm9fcHNfc3VyZmFjZV9zZXRfZXBzfGNhaXJvX3BzX3N1cmZhY2Vfc2V0X3NpemV8Y2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlfGNhaXJvX3NjYWxlZF9mb250X2V4dGVudHN8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2N0bXxjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9mYWNlfGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X21hdHJpeHxjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9vcHRpb25zfGNhaXJvX3NjYWxlZF9mb250X2dldF9zY2FsZV9tYXRyaXh8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X3R5cGV8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50c3xjYWlyb19zY2FsZWRfZm9udF9zdGF0dXN8Y2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzfGNhaXJvX3N1cmZhY2VfY29weV9wYWdlfGNhaXJvX3N1cmZhY2VfY3JlYXRlX3NpbWlsYXJ8Y2Fpcm9fc3VyZmFjZV9maW5pc2h8Y2Fpcm9fc3VyZmFjZV9mbHVzaHxjYWlyb19zdXJmYWNlX2dldF9jb250ZW50fGNhaXJvX3N1cmZhY2VfZ2V0X2RldmljZV9vZmZzZXR8Y2Fpcm9fc3VyZmFjZV9nZXRfZm9udF9vcHRpb25zfGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGV8Y2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5fGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGV8Y2Fpcm9fc3VyZmFjZV9zZXRfZGV2aWNlX29mZnNldHxjYWlyb19zdXJmYWNlX3NldF9mYWxsYmFja19yZXNvbHV0aW9ufGNhaXJvX3N1cmZhY2Vfc2hvd19wYWdlfGNhaXJvX3N1cmZhY2Vfc3RhdHVzfGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nfGNhaXJvX3N2Z19zdXJmYWNlX2NyZWF0ZXxjYWlyb19zdmdfc3VyZmFjZV9yZXN0cmljdF90b192ZXJzaW9ufGNhaXJvX3N2Z192ZXJzaW9uX3RvX3N0cmluZ3xjYWlyb2FudGlhbGlhc3xjYWlyb2NvbnRlbnR8Y2Fpcm9jb250ZXh0fGNhaXJvZXhjZXB0aW9ufGNhaXJvZXh0ZW5kfGNhaXJvZmlsbHJ1bGV8Y2Fpcm9maWx0ZXJ8Y2Fpcm9mb250ZmFjZXxjYWlyb2ZvbnRvcHRpb25zfGNhaXJvZm9udHNsYW50fGNhaXJvZm9udHR5cGV8Y2Fpcm9mb250d2VpZ2h0fGNhaXJvZm9ybWF0fGNhaXJvZ3JhZGllbnRwYXR0ZXJufGNhaXJvaGludG1ldHJpY3N8Y2Fpcm9oaW50c3R5bGV8Y2Fpcm9pbWFnZXN1cmZhY2V8Y2Fpcm9saW5lYXJncmFkaWVudHxjYWlyb2xpbmVjYXB8Y2Fpcm9saW5lam9pbnxjYWlyb21hdHJpeHxjYWlyb29wZXJhdG9yfGNhaXJvcGF0aHxjYWlyb3BhdHRlcm58Y2Fpcm9wYXR0ZXJudHlwZXxjYWlyb3BkZnN1cmZhY2V8Y2Fpcm9wc2xldmVsfGNhaXJvcHNzdXJmYWNlfGNhaXJvcmFkaWFsZ3JhZGllbnR8Y2Fpcm9zY2FsZWRmb250fGNhaXJvc29saWRwYXR0ZXJufGNhaXJvc3RhdHVzfGNhaXJvc3VicGl4ZWxvcmRlcnxjYWlyb3N1cmZhY2V8Y2Fpcm9zdXJmYWNlcGF0dGVybnxjYWlyb3N1cmZhY2V0eXBlfGNhaXJvc3Znc3VyZmFjZXxjYWlyb3N2Z3ZlcnNpb258Y2Fpcm90b3lmb250ZmFjZXxjYWxfZGF5c19pbl9tb250aHxjYWxfZnJvbV9qZHxjYWxfaW5mb3xjYWxfdG9famR8Y2FsY3VsX2htYWN8Y2FsY3VsaG1hY3xjYWxsX3VzZXJfZnVuY3xjYWxsX3VzZXJfZnVuY19hcnJheXxjYWxsX3VzZXJfbWV0aG9kfGNhbGxfdXNlcl9tZXRob2RfYXJyYXl8Y2FsbGJhY2tmaWx0ZXJpdGVyYXRvcnxjZWlsfGNoZGJ8Y2hkYl9jcmVhdGV8Y2hkaXJ8Y2hlY2tkYXRlfGNoZWNrZG5zcnJ8Y2hncnB8Y2htb2R8Y2hvcHxjaG93bnxjaHJ8Y2hyb290fGNodW5rX3NwbGl0fGNsYXNzX2FsaWFzfGNsYXNzX2V4aXN0c3xjbGFzc19pbXBsZW1lbnRzfGNsYXNzX3BhcmVudHN8Y2xhc3NraXRfaW1wb3J0fGNsYXNza2l0X21ldGhvZF9hZGR8Y2xhc3NraXRfbWV0aG9kX2NvcHl8Y2xhc3NraXRfbWV0aG9kX3JlZGVmaW5lfGNsYXNza2l0X21ldGhvZF9yZW1vdmV8Y2xhc3NraXRfbWV0aG9kX3JlbmFtZXxjbGVhcnN0YXRjYWNoZXxjbG9uZXxjbG9zZWRpcnxjbG9zZWxvZ3xjb2xsYXRvcnxjb218Y29tX2FkZHJlZnxjb21fY3JlYXRlX2d1aWR8Y29tX2V2ZW50X3Npbmt8Y29tX2dldHxjb21fZ2V0X2FjdGl2ZV9vYmplY3R8Y29tX2ludm9rZXxjb21faXNlbnVtfGNvbV9sb2FkfGNvbV9sb2FkX3R5cGVsaWJ8Y29tX21lc3NhZ2VfcHVtcHxjb21fcHJpbnRfdHlwZWluZm98Y29tX3Byb3BnZXR8Y29tX3Byb3BwdXR8Y29tX3Byb3BzZXR8Y29tX3JlbGVhc2V8Y29tX3NldHxjb21wYWN0fGNvbm5lY3Rpb25fYWJvcnRlZHxjb25uZWN0aW9uX3N0YXR1c3xjb25uZWN0aW9uX3RpbWVvdXR8Y29uc3RhbnR8Y29uc3RydWN0fGNvbnN0cnVjdHxjb25zdHJ1Y3R8Y29udmVydF9jeXJfc3RyaW5nfGNvbnZlcnRfdXVkZWNvZGV8Y29udmVydF91dWVuY29kZXxjb3B5fGNvc3xjb3NofGNvdW50fGNvdW50X2NoYXJzfGNvdW50YWJsZXxjb3VudGVyX2J1bXB8Y291bnRlcl9idW1wX3ZhbHVlfGNvdW50ZXJfY3JlYXRlfGNvdW50ZXJfZ2V0fGNvdW50ZXJfZ2V0X21ldGF8Y291bnRlcl9nZXRfbmFtZWR8Y291bnRlcl9nZXRfdmFsdWV8Y291bnRlcl9yZXNldHxjb3VudGVyX3Jlc2V0X3ZhbHVlfGNyYWNrX2NoZWNrfGNyYWNrX2Nsb3NlZGljdHxjcmFja19nZXRsYXN0bWVzc2FnZXxjcmFja19vcGVuZGljdHxjcmMzMnxjcmVhdGVfZnVuY3Rpb258Y3J5cHR8Y3R5cGVfYWxudW18Y3R5cGVfYWxwaGF8Y3R5cGVfY250cmx8Y3R5cGVfZGlnaXR8Y3R5cGVfZ3JhcGh8Y3R5cGVfbG93ZXJ8Y3R5cGVfcHJpbnR8Y3R5cGVfcHVuY3R8Y3R5cGVfc3BhY2V8Y3R5cGVfdXBwZXJ8Y3R5cGVfeGRpZ2l0fGN1YnJpZF9hZmZlY3RlZF9yb3dzfGN1YnJpZF9iaW5kfGN1YnJpZF9jbGllbnRfZW5jb2Rpbmd8Y3VicmlkX2Nsb3NlfGN1YnJpZF9jbG9zZV9wcmVwYXJlfGN1YnJpZF9jbG9zZV9yZXF1ZXN0fGN1YnJpZF9jb2xfZ2V0fGN1YnJpZF9jb2xfc2l6ZXxjdWJyaWRfY29sdW1uX25hbWVzfGN1YnJpZF9jb2x1bW5fdHlwZXN8Y3VicmlkX2NvbW1pdHxjdWJyaWRfY29ubmVjdHxjdWJyaWRfY29ubmVjdF93aXRoX3VybHxjdWJyaWRfY3VycmVudF9vaWR8Y3VicmlkX2RhdGFfc2Vla3xjdWJyaWRfZGJfbmFtZXxjdWJyaWRfZGlzY29ubmVjdHxjdWJyaWRfZHJvcHxjdWJyaWRfZXJybm98Y3VicmlkX2Vycm9yfGN1YnJpZF9lcnJvcl9jb2RlfGN1YnJpZF9lcnJvcl9jb2RlX2ZhY2lsaXR5fGN1YnJpZF9lcnJvcl9tc2d8Y3VicmlkX2V4ZWN1dGV8Y3VicmlkX2ZldGNofGN1YnJpZF9mZXRjaF9hcnJheXxjdWJyaWRfZmV0Y2hfYXNzb2N8Y3VicmlkX2ZldGNoX2ZpZWxkfGN1YnJpZF9mZXRjaF9sZW5ndGhzfGN1YnJpZF9mZXRjaF9vYmplY3R8Y3VicmlkX2ZldGNoX3Jvd3xjdWJyaWRfZmllbGRfZmxhZ3N8Y3VicmlkX2ZpZWxkX2xlbnxjdWJyaWRfZmllbGRfbmFtZXxjdWJyaWRfZmllbGRfc2Vla3xjdWJyaWRfZmllbGRfdGFibGV8Y3VicmlkX2ZpZWxkX3R5cGV8Y3VicmlkX2ZyZWVfcmVzdWx0fGN1YnJpZF9nZXR8Y3VicmlkX2dldF9hdXRvY29tbWl0fGN1YnJpZF9nZXRfY2hhcnNldHxjdWJyaWRfZ2V0X2NsYXNzX25hbWV8Y3VicmlkX2dldF9jbGllbnRfaW5mb3xjdWJyaWRfZ2V0X2RiX3BhcmFtZXRlcnxjdWJyaWRfZ2V0X3NlcnZlcl9pbmZvfGN1YnJpZF9pbnNlcnRfaWR8Y3VicmlkX2lzX2luc3RhbmNlfGN1YnJpZF9saXN0X2Ric3xjdWJyaWRfbG9hZF9mcm9tX2dsb3xjdWJyaWRfbG9iX2Nsb3NlfGN1YnJpZF9sb2JfZXhwb3J0fGN1YnJpZF9sb2JfZ2V0fGN1YnJpZF9sb2Jfc2VuZHxjdWJyaWRfbG9iX3NpemV8Y3VicmlkX2xvY2tfcmVhZHxjdWJyaWRfbG9ja193cml0ZXxjdWJyaWRfbW92ZV9jdXJzb3J8Y3VicmlkX25ld19nbG98Y3VicmlkX25leHRfcmVzdWx0fGN1YnJpZF9udW1fY29sc3xjdWJyaWRfbnVtX2ZpZWxkc3xjdWJyaWRfbnVtX3Jvd3N8Y3VicmlkX3Bpbmd8Y3VicmlkX3ByZXBhcmV8Y3VicmlkX3B1dHxjdWJyaWRfcXVlcnl8Y3VicmlkX3JlYWxfZXNjYXBlX3N0cmluZ3xjdWJyaWRfcmVzdWx0fGN1YnJpZF9yb2xsYmFja3xjdWJyaWRfc2F2ZV90b19nbG98Y3VicmlkX3NjaGVtYXxjdWJyaWRfc2VuZF9nbG98Y3VicmlkX3NlcV9kcm9wfGN1YnJpZF9zZXFfaW5zZXJ0fGN1YnJpZF9zZXFfcHV0fGN1YnJpZF9zZXRfYWRkfGN1YnJpZF9zZXRfYXV0b2NvbW1pdHxjdWJyaWRfc2V0X2RiX3BhcmFtZXRlcnxjdWJyaWRfc2V0X2Ryb3B8Y3VicmlkX3VuYnVmZmVyZWRfcXVlcnl8Y3VicmlkX3ZlcnNpb258Y3VybF9jbG9zZXxjdXJsX2NvcHlfaGFuZGxlfGN1cmxfZXJybm98Y3VybF9lcnJvcnxjdXJsX2V4ZWN8Y3VybF9nZXRpbmZvfGN1cmxfaW5pdHxjdXJsX211bHRpX2FkZF9oYW5kbGV8Y3VybF9tdWx0aV9jbG9zZXxjdXJsX211bHRpX2V4ZWN8Y3VybF9tdWx0aV9nZXRjb250ZW50fGN1cmxfbXVsdGlfaW5mb19yZWFkfGN1cmxfbXVsdGlfaW5pdHxjdXJsX211bHRpX3JlbW92ZV9oYW5kbGV8Y3VybF9tdWx0aV9zZWxlY3R8Y3VybF9zZXRvcHR8Y3VybF9zZXRvcHRfYXJyYXl8Y3VybF92ZXJzaW9ufGN1cnJlbnR8Y3lydXNfYXV0aGVudGljYXRlfGN5cnVzX2JpbmR8Y3lydXNfY2xvc2V8Y3lydXNfY29ubmVjdHxjeXJ1c19xdWVyeXxjeXJ1c191bmJpbmR8ZGF0ZXxkYXRlX2FkZHxkYXRlX2NyZWF0ZXxkYXRlX2NyZWF0ZV9mcm9tX2Zvcm1hdHxkYXRlX2RhdGVfc2V0fGRhdGVfZGVmYXVsdF90aW1lem9uZV9nZXR8ZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldHxkYXRlX2RpZmZ8ZGF0ZV9mb3JtYXR8ZGF0ZV9nZXRfbGFzdF9lcnJvcnN8ZGF0ZV9pbnRlcnZhbF9jcmVhdGVfZnJvbV9kYXRlX3N0cmluZ3xkYXRlX2ludGVydmFsX2Zvcm1hdHxkYXRlX2lzb2RhdGVfc2V0fGRhdGVfbW9kaWZ5fGRhdGVfb2Zmc2V0X2dldHxkYXRlX3BhcnNlfGRhdGVfcGFyc2VfZnJvbV9mb3JtYXR8ZGF0ZV9zdWJ8ZGF0ZV9zdW5faW5mb3xkYXRlX3N1bnJpc2V8ZGF0ZV9zdW5zZXR8ZGF0ZV90aW1lX3NldHxkYXRlX3RpbWVzdGFtcF9nZXR8ZGF0ZV90aW1lc3RhbXBfc2V0fGRhdGVfdGltZXpvbmVfZ2V0fGRhdGVfdGltZXpvbmVfc2V0fGRhdGVpbnRlcnZhbHxkYXRlcGVyaW9kfGRhdGV0aW1lfGRhdGV0aW1lem9uZXxkYjJfYXV0b2NvbW1pdHxkYjJfYmluZF9wYXJhbXxkYjJfY2xpZW50X2luZm98ZGIyX2Nsb3NlfGRiMl9jb2x1bW5fcHJpdmlsZWdlc3xkYjJfY29sdW1uc3xkYjJfY29tbWl0fGRiMl9jb25uX2Vycm9yfGRiMl9jb25uX2Vycm9ybXNnfGRiMl9jb25uZWN0fGRiMl9jdXJzb3JfdHlwZXxkYjJfZXNjYXBlX3N0cmluZ3xkYjJfZXhlY3xkYjJfZXhlY3V0ZXxkYjJfZmV0Y2hfYXJyYXl8ZGIyX2ZldGNoX2Fzc29jfGRiMl9mZXRjaF9ib3RofGRiMl9mZXRjaF9vYmplY3R8ZGIyX2ZldGNoX3Jvd3xkYjJfZmllbGRfZGlzcGxheV9zaXplfGRiMl9maWVsZF9uYW1lfGRiMl9maWVsZF9udW18ZGIyX2ZpZWxkX3ByZWNpc2lvbnxkYjJfZmllbGRfc2NhbGV8ZGIyX2ZpZWxkX3R5cGV8ZGIyX2ZpZWxkX3dpZHRofGRiMl9mb3JlaWduX2tleXN8ZGIyX2ZyZWVfcmVzdWx0fGRiMl9mcmVlX3N0bXR8ZGIyX2dldF9vcHRpb258ZGIyX2xhc3RfaW5zZXJ0X2lkfGRiMl9sb2JfcmVhZHxkYjJfbmV4dF9yZXN1bHR8ZGIyX251bV9maWVsZHN8ZGIyX251bV9yb3dzfGRiMl9wY2xvc2V8ZGIyX3Bjb25uZWN0fGRiMl9wcmVwYXJlfGRiMl9wcmltYXJ5X2tleXN8ZGIyX3Byb2NlZHVyZV9jb2x1bW5zfGRiMl9wcm9jZWR1cmVzfGRiMl9yZXN1bHR8ZGIyX3JvbGxiYWNrfGRiMl9zZXJ2ZXJfaW5mb3xkYjJfc2V0X29wdGlvbnxkYjJfc3BlY2lhbF9jb2x1bW5zfGRiMl9zdGF0aXN0aWNzfGRiMl9zdG10X2Vycm9yfGRiMl9zdG10X2Vycm9ybXNnfGRiMl90YWJsZV9wcml2aWxlZ2VzfGRiMl90YWJsZXN8ZGJhX2Nsb3NlfGRiYV9kZWxldGV8ZGJhX2V4aXN0c3xkYmFfZmV0Y2h8ZGJhX2ZpcnN0a2V5fGRiYV9oYW5kbGVyc3xkYmFfaW5zZXJ0fGRiYV9rZXlfc3BsaXR8ZGJhX2xpc3R8ZGJhX25leHRrZXl8ZGJhX29wZW58ZGJhX29wdGltaXplfGRiYV9wb3BlbnxkYmFfcmVwbGFjZXxkYmFfc3luY3xkYmFzZV9hZGRfcmVjb3JkfGRiYXNlX2Nsb3NlfGRiYXNlX2NyZWF0ZXxkYmFzZV9kZWxldGVfcmVjb3JkfGRiYXNlX2dldF9oZWFkZXJfaW5mb3xkYmFzZV9nZXRfcmVjb3JkfGRiYXNlX2dldF9yZWNvcmRfd2l0aF9uYW1lc3xkYmFzZV9udW1maWVsZHN8ZGJhc2VfbnVtcmVjb3Jkc3xkYmFzZV9vcGVufGRiYXNlX3BhY2t8ZGJhc2VfcmVwbGFjZV9yZWNvcmR8ZGJwbHVzX2FkZHxkYnBsdXNfYXFsfGRicGx1c19jaGRpcnxkYnBsdXNfY2xvc2V8ZGJwbHVzX2N1cnJ8ZGJwbHVzX2VycmNvZGV8ZGJwbHVzX2Vycm5vfGRicGx1c19maW5kfGRicGx1c19maXJzdHxkYnBsdXNfZmx1c2h8ZGJwbHVzX2ZyZWVhbGxsb2Nrc3xkYnBsdXNfZnJlZWxvY2t8ZGJwbHVzX2ZyZWVybG9ja3N8ZGJwbHVzX2dldGxvY2t8ZGJwbHVzX2dldHVuaXF1ZXxkYnBsdXNfaW5mb3xkYnBsdXNfbGFzdHxkYnBsdXNfbG9ja3JlbHxkYnBsdXNfbmV4dHxkYnBsdXNfb3BlbnxkYnBsdXNfcHJldnxkYnBsdXNfcmNocGVybXxkYnBsdXNfcmNyZWF0ZXxkYnBsdXNfcmNydGV4YWN0fGRicGx1c19yY3J0bGlrZXxkYnBsdXNfcmVzb2x2ZXxkYnBsdXNfcmVzdG9yZXBvc3xkYnBsdXNfcmtleXN8ZGJwbHVzX3JvcGVufGRicGx1c19ycXVlcnl8ZGJwbHVzX3JyZW5hbWV8ZGJwbHVzX3JzZWNpbmRleHxkYnBsdXNfcnVubGlua3xkYnBsdXNfcnphcHxkYnBsdXNfc2F2ZXBvc3xkYnBsdXNfc2V0aW5kZXh8ZGJwbHVzX3NldGluZGV4YnludW1iZXJ8ZGJwbHVzX3NxbHxkYnBsdXNfdGNsfGRicGx1c190cmVtb3ZlfGRicGx1c191bmRvfGRicGx1c191bmRvcHJlcGFyZXxkYnBsdXNfdW5sb2NrcmVsfGRicGx1c191bnNlbGVjdHxkYnBsdXNfdXBkYXRlfGRicGx1c194bG9ja3JlbHxkYnBsdXNfeHVubG9ja3JlbHxkYnhfY2xvc2V8ZGJ4X2NvbXBhcmV8ZGJ4X2Nvbm5lY3R8ZGJ4X2Vycm9yfGRieF9lc2NhcGVfc3RyaW5nfGRieF9mZXRjaF9yb3d8ZGJ4X3F1ZXJ5fGRieF9zb3J0fGRjZ2V0dGV4dHxkY25nZXR0ZXh0fGRlYWdncmVnYXRlfGRlYnVnX2JhY2t0cmFjZXxkZWJ1Z19wcmludF9iYWNrdHJhY2V8ZGVidWdfenZhbF9kdW1wfGRlY2JpbnxkZWNoZXh8ZGVjb2N0fGRlZmluZXxkZWZpbmVfc3lzbG9nX3ZhcmlhYmxlc3xkZWZpbmVkfGRlZzJyYWR8ZGVsZXRlfGRnZXR0ZXh0fGRpZXxkaW9fY2xvc2V8ZGlvX2ZjbnRsfGRpb19vcGVufGRpb19yZWFkfGRpb19zZWVrfGRpb19zdGF0fGRpb190Y3NldGF0dHJ8ZGlvX3RydW5jYXRlfGRpb193cml0ZXxkaXJ8ZGlyZWN0b3J5aXRlcmF0b3J8ZGlybmFtZXxkaXNrX2ZyZWVfc3BhY2V8ZGlza190b3RhbF9zcGFjZXxkaXNrZnJlZXNwYWNlfGRsfGRuZ2V0dGV4dHxkbnNfY2hlY2tfcmVjb3JkfGRuc19nZXRfbXh8ZG5zX2dldF9yZWNvcmR8ZG9tX2ltcG9ydF9zaW1wbGV4bWx8ZG9tYWluZXhjZXB0aW9ufGRvbWF0dHJ8ZG9tYXR0cmlidXRlX25hbWV8ZG9tYXR0cmlidXRlX3NldF92YWx1ZXxkb21hdHRyaWJ1dGVfc3BlY2lmaWVkfGRvbWF0dHJpYnV0ZV92YWx1ZXxkb21jaGFyYWN0ZXJkYXRhfGRvbWNvbW1lbnR8ZG9tZG9jdW1lbnR8ZG9tZG9jdW1lbnRfYWRkX3Jvb3R8ZG9tZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0ZXxkb21kb2N1bWVudF9jcmVhdGVfY2RhdGFfc2VjdGlvbnxkb21kb2N1bWVudF9jcmVhdGVfY29tbWVudHxkb21kb2N1bWVudF9jcmVhdGVfZWxlbWVudHxkb21kb2N1bWVudF9jcmVhdGVfZWxlbWVudF9uc3xkb21kb2N1bWVudF9jcmVhdGVfZW50aXR5X3JlZmVyZW5jZXxkb21kb2N1bWVudF9jcmVhdGVfcHJvY2Vzc2luZ19pbnN0cnVjdGlvbnxkb21kb2N1bWVudF9jcmVhdGVfdGV4dF9ub2RlfGRvbWRvY3VtZW50X2RvY3R5cGV8ZG9tZG9jdW1lbnRfZG9jdW1lbnRfZWxlbWVudHxkb21kb2N1bWVudF9kdW1wX2ZpbGV8ZG9tZG9jdW1lbnRfZHVtcF9tZW18ZG9tZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWR8ZG9tZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ25hbWV8ZG9tZG9jdW1lbnRfaHRtbF9kdW1wX21lbXxkb21kb2N1bWVudF94aW5jbHVkZXxkb21kb2N1bWVudGZyYWdtZW50fGRvbWRvY3VtZW50dHlwZXxkb21kb2N1bWVudHR5cGVfZW50aXRpZXN8ZG9tZG9jdW1lbnR0eXBlX2ludGVybmFsX3N1YnNldHxkb21kb2N1bWVudHR5cGVfbmFtZXxkb21kb2N1bWVudHR5cGVfbm90YXRpb25zfGRvbWRvY3VtZW50dHlwZV9wdWJsaWNfaWR8ZG9tZG9jdW1lbnR0eXBlX3N5c3RlbV9pZHxkb21lbGVtZW50fGRvbWVsZW1lbnRfZ2V0X2F0dHJpYnV0ZXxkb21lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZXxkb21lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWduYW1lfGRvbWVsZW1lbnRfaGFzX2F0dHJpYnV0ZXxkb21lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGV8ZG9tZWxlbWVudF9zZXRfYXR0cmlidXRlfGRvbWVsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlfGRvbWVsZW1lbnRfdGFnbmFtZXxkb21lbnRpdHl8ZG9tZW50aXR5cmVmZXJlbmNlfGRvbWV4Y2VwdGlvbnxkb21pbXBsZW1lbnRhdGlvbnxkb21uYW1lZG5vZGVtYXB8ZG9tbm9kZXxkb21ub2RlX2FkZF9uYW1lc3BhY2V8ZG9tbm9kZV9hcHBlbmRfY2hpbGR8ZG9tbm9kZV9hcHBlbmRfc2libGluZ3xkb21ub2RlX2F0dHJpYnV0ZXN8ZG9tbm9kZV9jaGlsZF9ub2Rlc3xkb21ub2RlX2Nsb25lX25vZGV8ZG9tbm9kZV9kdW1wX25vZGV8ZG9tbm9kZV9maXJzdF9jaGlsZHxkb21ub2RlX2dldF9jb250ZW50fGRvbW5vZGVfaGFzX2F0dHJpYnV0ZXN8ZG9tbm9kZV9oYXNfY2hpbGRfbm9kZXN8ZG9tbm9kZV9pbnNlcnRfYmVmb3JlfGRvbW5vZGVfaXNfYmxhbmtfbm9kZXxkb21ub2RlX2xhc3RfY2hpbGR8ZG9tbm9kZV9uZXh0X3NpYmxpbmd8ZG9tbm9kZV9ub2RlX25hbWV8ZG9tbm9kZV9ub2RlX3R5cGV8ZG9tbm9kZV9ub2RlX3ZhbHVlfGRvbW5vZGVfb3duZXJfZG9jdW1lbnR8ZG9tbm9kZV9wYXJlbnRfbm9kZXxkb21ub2RlX3ByZWZpeHxkb21ub2RlX3ByZXZpb3VzX3NpYmxpbmd8ZG9tbm9kZV9yZW1vdmVfY2hpbGR8ZG9tbm9kZV9yZXBsYWNlX2NoaWxkfGRvbW5vZGVfcmVwbGFjZV9ub2RlfGRvbW5vZGVfc2V0X2NvbnRlbnR8ZG9tbm9kZV9zZXRfbmFtZXxkb21ub2RlX3NldF9uYW1lc3BhY2V8ZG9tbm9kZV91bmxpbmtfbm9kZXxkb21ub2RlbGlzdHxkb21ub3RhdGlvbnxkb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb258ZG9tcHJvY2Vzc2luZ2luc3RydWN0aW9uX2RhdGF8ZG9tcHJvY2Vzc2luZ2luc3RydWN0aW9uX3RhcmdldHxkb210ZXh0fGRvbXhtbF9uZXdfZG9jfGRvbXhtbF9vcGVuX2ZpbGV8ZG9teG1sX29wZW5fbWVtfGRvbXhtbF92ZXJzaW9ufGRvbXhtbF94bWx0cmVlfGRvbXhtbF94c2x0X3N0eWxlc2hlZXR8ZG9teG1sX3hzbHRfc3R5bGVzaGVldF9kb2N8ZG9teG1sX3hzbHRfc3R5bGVzaGVldF9maWxlfGRvbXhtbF94c2x0X3ZlcnNpb258ZG9teHBhdGh8ZG9teHNsdHN0eWxlc2hlZXRfcHJvY2Vzc3xkb214c2x0c3R5bGVzaGVldF9yZXN1bHRfZHVtcF9maWxlfGRvbXhzbHRzdHlsZXNoZWV0X3Jlc3VsdF9kdW1wX21lbXxkb3RuZXR8ZG90bmV0X2xvYWR8ZG91YmxldmFsfGVhY2h8ZWFzdGVyX2RhdGV8ZWFzdGVyX2RheXN8ZWNob3xlbXB0eXxlbXB0eWl0ZXJhdG9yfGVuY2hhbnRfYnJva2VyX2Rlc2NyaWJlfGVuY2hhbnRfYnJva2VyX2RpY3RfZXhpc3RzfGVuY2hhbnRfYnJva2VyX2ZyZWV8ZW5jaGFudF9icm9rZXJfZnJlZV9kaWN0fGVuY2hhbnRfYnJva2VyX2dldF9lcnJvcnxlbmNoYW50X2Jyb2tlcl9pbml0fGVuY2hhbnRfYnJva2VyX2xpc3RfZGljdHN8ZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0fGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfcHdsX2RpY3R8ZW5jaGFudF9icm9rZXJfc2V0X29yZGVyaW5nfGVuY2hhbnRfZGljdF9hZGRfdG9fcGVyc29uYWx8ZW5jaGFudF9kaWN0X2FkZF90b19zZXNzaW9ufGVuY2hhbnRfZGljdF9jaGVja3xlbmNoYW50X2RpY3RfZGVzY3JpYmV8ZW5jaGFudF9kaWN0X2dldF9lcnJvcnxlbmNoYW50X2RpY3RfaXNfaW5fc2Vzc2lvbnxlbmNoYW50X2RpY3RfcXVpY2tfY2hlY2t8ZW5jaGFudF9kaWN0X3N0b3JlX3JlcGxhY2VtZW50fGVuY2hhbnRfZGljdF9zdWdnZXN0fGVuZHxlcmVnfGVyZWdfcmVwbGFjZXxlcmVnaXxlcmVnaV9yZXBsYWNlfGVycm9yX2dldF9sYXN0fGVycm9yX2xvZ3xlcnJvcl9yZXBvcnRpbmd8ZXJyb3JleGNlcHRpb258ZXNjYXBlc2hlbGxhcmd8ZXNjYXBlc2hlbGxjbWR8ZXZhbHxldmVudF9hZGR8ZXZlbnRfYmFzZV9mcmVlfGV2ZW50X2Jhc2VfbG9vcHxldmVudF9iYXNlX2xvb3BicmVha3xldmVudF9iYXNlX2xvb3BleGl0fGV2ZW50X2Jhc2VfbmV3fGV2ZW50X2Jhc2VfcHJpb3JpdHlfaW5pdHxldmVudF9iYXNlX3NldHxldmVudF9idWZmZXJfYmFzZV9zZXR8ZXZlbnRfYnVmZmVyX2Rpc2FibGV8ZXZlbnRfYnVmZmVyX2VuYWJsZXxldmVudF9idWZmZXJfZmRfc2V0fGV2ZW50X2J1ZmZlcl9mcmVlfGV2ZW50X2J1ZmZlcl9uZXd8ZXZlbnRfYnVmZmVyX3ByaW9yaXR5X3NldHxldmVudF9idWZmZXJfcmVhZHxldmVudF9idWZmZXJfc2V0X2NhbGxiYWNrfGV2ZW50X2J1ZmZlcl90aW1lb3V0X3NldHxldmVudF9idWZmZXJfd2F0ZXJtYXJrX3NldHxldmVudF9idWZmZXJfd3JpdGV8ZXZlbnRfZGVsfGV2ZW50X2ZyZWV8ZXZlbnRfbmV3fGV2ZW50X3NldHxleGNlcHRpb258ZXhlY3xleGlmX2ltYWdldHlwZXxleGlmX3JlYWRfZGF0YXxleGlmX3RhZ25hbWV8ZXhpZl90aHVtYm5haWx8ZXhpdHxleHB8ZXhwZWN0X2V4cGVjdGx8ZXhwZWN0X3BvcGVufGV4cGxvZGV8ZXhwbTF8ZXhwb3J0fGV4cG9ydHxleHRlbnNpb25fbG9hZGVkfGV4dHJhY3R8ZXptbG1faGFzaHxmYW1fY2FuY2VsX21vbml0b3J8ZmFtX2Nsb3NlfGZhbV9tb25pdG9yX2NvbGxlY3Rpb258ZmFtX21vbml0b3JfZGlyZWN0b3J5fGZhbV9tb25pdG9yX2ZpbGV8ZmFtX25leHRfZXZlbnR8ZmFtX29wZW58ZmFtX3BlbmRpbmd8ZmFtX3Jlc3VtZV9tb25pdG9yfGZhbV9zdXNwZW5kX21vbml0b3J8ZmJzcWxfYWZmZWN0ZWRfcm93c3xmYnNxbF9hdXRvY29tbWl0fGZic3FsX2Jsb2Jfc2l6ZXxmYnNxbF9jaGFuZ2VfdXNlcnxmYnNxbF9jbG9iX3NpemV8ZmJzcWxfY2xvc2V8ZmJzcWxfY29tbWl0fGZic3FsX2Nvbm5lY3R8ZmJzcWxfY3JlYXRlX2Jsb2J8ZmJzcWxfY3JlYXRlX2Nsb2J8ZmJzcWxfY3JlYXRlX2RifGZic3FsX2RhdGFfc2Vla3xmYnNxbF9kYXRhYmFzZXxmYnNxbF9kYXRhYmFzZV9wYXNzd29yZHxmYnNxbF9kYl9xdWVyeXxmYnNxbF9kYl9zdGF0dXN8ZmJzcWxfZHJvcF9kYnxmYnNxbF9lcnJub3xmYnNxbF9lcnJvcnxmYnNxbF9mZXRjaF9hcnJheXxmYnNxbF9mZXRjaF9hc3NvY3xmYnNxbF9mZXRjaF9maWVsZHxmYnNxbF9mZXRjaF9sZW5ndGhzfGZic3FsX2ZldGNoX29iamVjdHxmYnNxbF9mZXRjaF9yb3d8ZmJzcWxfZmllbGRfZmxhZ3N8ZmJzcWxfZmllbGRfbGVufGZic3FsX2ZpZWxkX25hbWV8ZmJzcWxfZmllbGRfc2Vla3xmYnNxbF9maWVsZF90YWJsZXxmYnNxbF9maWVsZF90eXBlfGZic3FsX2ZyZWVfcmVzdWx0fGZic3FsX2dldF9hdXRvc3RhcnRfaW5mb3xmYnNxbF9ob3N0bmFtZXxmYnNxbF9pbnNlcnRfaWR8ZmJzcWxfbGlzdF9kYnN8ZmJzcWxfbGlzdF9maWVsZHN8ZmJzcWxfbGlzdF90YWJsZXN8ZmJzcWxfbmV4dF9yZXN1bHR8ZmJzcWxfbnVtX2ZpZWxkc3xmYnNxbF9udW1fcm93c3xmYnNxbF9wYXNzd29yZHxmYnNxbF9wY29ubmVjdHxmYnNxbF9xdWVyeXxmYnNxbF9yZWFkX2Jsb2J8ZmJzcWxfcmVhZF9jbG9ifGZic3FsX3Jlc3VsdHxmYnNxbF9yb2xsYmFja3xmYnNxbF9yb3dzX2ZldGNoZWR8ZmJzcWxfc2VsZWN0X2RifGZic3FsX3NldF9jaGFyYWN0ZXJzZXR8ZmJzcWxfc2V0X2xvYl9tb2RlfGZic3FsX3NldF9wYXNzd29yZHxmYnNxbF9zZXRfdHJhbnNhY3Rpb258ZmJzcWxfc3RhcnRfZGJ8ZmJzcWxfc3RvcF9kYnxmYnNxbF90YWJsZV9uYW1lfGZic3FsX3RhYmxlbmFtZXxmYnNxbF91c2VybmFtZXxmYnNxbF93YXJuaW5nc3xmY2xvc2V8ZmRmX2FkZF9kb2NfamF2YXNjcmlwdHxmZGZfYWRkX3RlbXBsYXRlfGZkZl9jbG9zZXxmZGZfY3JlYXRlfGZkZl9lbnVtX3ZhbHVlc3xmZGZfZXJybm98ZmRmX2Vycm9yfGZkZl9nZXRfYXB8ZmRmX2dldF9hdHRhY2htZW50fGZkZl9nZXRfZW5jb2Rpbmd8ZmRmX2dldF9maWxlfGZkZl9nZXRfZmxhZ3N8ZmRmX2dldF9vcHR8ZmRmX2dldF9zdGF0dXN8ZmRmX2dldF92YWx1ZXxmZGZfZ2V0X3ZlcnNpb258ZmRmX2hlYWRlcnxmZGZfbmV4dF9maWVsZF9uYW1lfGZkZl9vcGVufGZkZl9vcGVuX3N0cmluZ3xmZGZfcmVtb3ZlX2l0ZW18ZmRmX3NhdmV8ZmRmX3NhdmVfc3RyaW5nfGZkZl9zZXRfYXB8ZmRmX3NldF9lbmNvZGluZ3xmZGZfc2V0X2ZpbGV8ZmRmX3NldF9mbGFnc3xmZGZfc2V0X2phdmFzY3JpcHRfYWN0aW9ufGZkZl9zZXRfb25faW1wb3J0X2phdmFzY3JpcHR8ZmRmX3NldF9vcHR8ZmRmX3NldF9zdGF0dXN8ZmRmX3NldF9zdWJtaXRfZm9ybV9hY3Rpb258ZmRmX3NldF90YXJnZXRfZnJhbWV8ZmRmX3NldF92YWx1ZXxmZGZfc2V0X3ZlcnNpb258ZmVvZnxmZmx1c2h8ZmdldGN8ZmdldGNzdnxmZ2V0c3xmZ2V0c3N8ZmlsZXxmaWxlX2V4aXN0c3xmaWxlX2dldF9jb250ZW50c3xmaWxlX3B1dF9jb250ZW50c3xmaWxlYXRpbWV8ZmlsZWN0aW1lfGZpbGVncm91cHxmaWxlaW5vZGV8ZmlsZW10aW1lfGZpbGVvd25lcnxmaWxlcGVybXN8ZmlsZXByb3xmaWxlcHJvX2ZpZWxkY291bnR8ZmlsZXByb19maWVsZG5hbWV8ZmlsZXByb19maWVsZHR5cGV8ZmlsZXByb19maWVsZHdpZHRofGZpbGVwcm9fcmV0cmlldmV8ZmlsZXByb19yb3djb3VudHxmaWxlc2l6ZXxmaWxlc3lzdGVtaXRlcmF0b3J8ZmlsZXR5cGV8ZmlsdGVyX2hhc192YXJ8ZmlsdGVyX2lkfGZpbHRlcl9pbnB1dHxmaWx0ZXJfaW5wdXRfYXJyYXl8ZmlsdGVyX2xpc3R8ZmlsdGVyX3ZhcnxmaWx0ZXJfdmFyX2FycmF5fGZpbHRlcml0ZXJhdG9yfGZpbmZvX2J1ZmZlcnxmaW5mb19jbG9zZXxmaW5mb19maWxlfGZpbmZvX29wZW58ZmluZm9fc2V0X2ZsYWdzfGZsb2F0dmFsfGZsb2NrfGZsb29yfGZsdXNofGZtb2R8Zm5tYXRjaHxmb3Blbnxmb3J3YXJkX3N0YXRpY19jYWxsfGZvcndhcmRfc3RhdGljX2NhbGxfYXJyYXl8ZnBhc3N0aHJ1fGZwcmludGZ8ZnB1dGNzdnxmcHV0c3xmcmVhZHxmcmVuY2h0b2pkfGZyaWJpZGlfbG9nMnZpc3xmc2NhbmZ8ZnNlZWt8ZnNvY2tvcGVufGZzdGF0fGZ0ZWxsfGZ0b2t8ZnRwX2FsbG9jfGZ0cF9jZHVwfGZ0cF9jaGRpcnxmdHBfY2htb2R8ZnRwX2Nsb3NlfGZ0cF9jb25uZWN0fGZ0cF9kZWxldGV8ZnRwX2V4ZWN8ZnRwX2ZnZXR8ZnRwX2ZwdXR8ZnRwX2dldHxmdHBfZ2V0X29wdGlvbnxmdHBfbG9naW58ZnRwX21kdG18ZnRwX21rZGlyfGZ0cF9uYl9jb250aW51ZXxmdHBfbmJfZmdldHxmdHBfbmJfZnB1dHxmdHBfbmJfZ2V0fGZ0cF9uYl9wdXR8ZnRwX25saXN0fGZ0cF9wYXN2fGZ0cF9wdXR8ZnRwX3B3ZHxmdHBfcXVpdHxmdHBfcmF3fGZ0cF9yYXdsaXN0fGZ0cF9yZW5hbWV8ZnRwX3JtZGlyfGZ0cF9zZXRfb3B0aW9ufGZ0cF9zaXRlfGZ0cF9zaXplfGZ0cF9zc2xfY29ubmVjdHxmdHBfc3lzdHlwZXxmdHJ1bmNhdGV8ZnVuY19nZXRfYXJnfGZ1bmNfZ2V0X2FyZ3N8ZnVuY19udW1fYXJnc3xmdW5jdGlvbl9leGlzdHN8ZndyaXRlfGdjX2NvbGxlY3RfY3ljbGVzfGdjX2Rpc2FibGV8Z2NfZW5hYmxlfGdjX2VuYWJsZWR8Z2RfaW5mb3xnZWFybWFuY2xpZW50fGdlYXJtYW5qb2J8Z2Vhcm1hbnRhc2t8Z2Vhcm1hbndvcmtlcnxnZW9pcF9jb250aW5lbnRfY29kZV9ieV9uYW1lfGdlb2lwX2NvdW50cnlfY29kZTNfYnlfbmFtZXxnZW9pcF9jb3VudHJ5X2NvZGVfYnlfbmFtZXxnZW9pcF9jb3VudHJ5X25hbWVfYnlfbmFtZXxnZW9pcF9kYXRhYmFzZV9pbmZvfGdlb2lwX2RiX2F2YWlsfGdlb2lwX2RiX2ZpbGVuYW1lfGdlb2lwX2RiX2dldF9hbGxfaW5mb3xnZW9pcF9pZF9ieV9uYW1lfGdlb2lwX2lzcF9ieV9uYW1lfGdlb2lwX29yZ19ieV9uYW1lfGdlb2lwX3JlY29yZF9ieV9uYW1lfGdlb2lwX3JlZ2lvbl9ieV9uYW1lfGdlb2lwX3JlZ2lvbl9uYW1lX2J5X2NvZGV8Z2VvaXBfdGltZV96b25lX2J5X2NvdW50cnlfYW5kX3JlZ2lvbnxnZXRNZXRhfGdldE5hbWVkfGdldFZhbHVlfGdldF9icm93c2VyfGdldF9jYWxsZWRfY2xhc3N8Z2V0X2NmZ192YXJ8Z2V0X2NsYXNzfGdldF9jbGFzc19tZXRob2RzfGdldF9jbGFzc192YXJzfGdldF9jdXJyZW50X3VzZXJ8Z2V0X2RlY2xhcmVkX2NsYXNzZXN8Z2V0X2RlY2xhcmVkX2ludGVyZmFjZXN8Z2V0X2RlZmluZWRfY29uc3RhbnRzfGdldF9kZWZpbmVkX2Z1bmN0aW9uc3xnZXRfZGVmaW5lZF92YXJzfGdldF9leHRlbnNpb25fZnVuY3N8Z2V0X2hlYWRlcnN8Z2V0X2h0bWxfdHJhbnNsYXRpb25fdGFibGV8Z2V0X2luY2x1ZGVfcGF0aHxnZXRfaW5jbHVkZWRfZmlsZXN8Z2V0X2xvYWRlZF9leHRlbnNpb25zfGdldF9tYWdpY19xdW90ZXNfZ3BjfGdldF9tYWdpY19xdW90ZXNfcnVudGltZXxnZXRfbWV0YV90YWdzfGdldF9vYmplY3RfdmFyc3xnZXRfcGFyZW50X2NsYXNzfGdldF9yZXF1aXJlZF9maWxlc3xnZXRfcmVzb3VyY2VfdHlwZXxnZXRhbGxoZWFkZXJzfGdldGNvbnN0YW50fGdldGNvbnN0YW50c3xnZXRjb25zdHJ1Y3RvcnxnZXRjd2R8Z2V0ZGF0ZXxnZXRkZWZhdWx0cHJvcGVydGllc3xnZXRkb2Njb21tZW50fGdldGVuZGxpbmV8Z2V0ZW52fGdldGV4dGVuc2lvbnxnZXRleHRlbnNpb25uYW1lfGdldGZpbGVuYW1lfGdldGhvc3RieWFkZHJ8Z2V0aG9zdGJ5bmFtZXxnZXRob3N0YnluYW1lbHxnZXRob3N0bmFtZXxnZXRpbWFnZXNpemV8Z2V0aW50ZXJmYWNlbmFtZXN8Z2V0aW50ZXJmYWNlc3xnZXRsYXN0bW9kfGdldG1ldGhvZHxnZXRtZXRob2RzfGdldG1vZGlmaWVyc3xnZXRteHJyfGdldG15Z2lkfGdldG15aW5vZGV8Z2V0bXlwaWR8Z2V0bXl1aWR8Z2V0bmFtZXxnZXRuYW1lc3BhY2VuYW1lfGdldG9wdHxnZXRwYXJlbnRjbGFzc3xnZXRwcm9wZXJ0aWVzfGdldHByb3BlcnR5fGdldHByb3RvYnluYW1lfGdldHByb3RvYnludW1iZXJ8Z2V0cmFuZG1heHxnZXRydXNhZ2V8Z2V0c2VydmJ5bmFtZXxnZXRzZXJ2Ynlwb3J0fGdldHNob3J0bmFtZXxnZXRzdGFydGxpbmV8Z2V0c3RhdGljcHJvcGVydGllc3xnZXRzdGF0aWNwcm9wZXJ0eXZhbHVlfGdldHRleHR8Z2V0dGltZW9mZGF5fGdldHR5cGV8Z2xvYnxnbG9iaXRlcmF0b3J8Z21hZ2lja3xnbWFnaWNrZHJhd3xnbWFnaWNrcGl4ZWx8Z21kYXRlfGdtbWt0aW1lfGdtcF9hYnN8Z21wX2FkZHxnbXBfYW5kfGdtcF9jbHJiaXR8Z21wX2NtcHxnbXBfY29tfGdtcF9kaXZ8Z21wX2Rpdl9xfGdtcF9kaXZfcXJ8Z21wX2Rpdl9yfGdtcF9kaXZleGFjdHxnbXBfZmFjdHxnbXBfZ2NkfGdtcF9nY2RleHR8Z21wX2hhbWRpc3R8Z21wX2luaXR8Z21wX2ludHZhbHxnbXBfaW52ZXJ0fGdtcF9qYWNvYml8Z21wX2xlZ2VuZHJlfGdtcF9tb2R8Z21wX211bHxnbXBfbmVnfGdtcF9uZXh0cHJpbWV8Z21wX29yfGdtcF9wZXJmZWN0X3NxdWFyZXxnbXBfcG9wY291bnR8Z21wX3Bvd3xnbXBfcG93bXxnbXBfcHJvYl9wcmltZXxnbXBfcmFuZG9tfGdtcF9zY2FuMHxnbXBfc2NhbjF8Z21wX3NldGJpdHxnbXBfc2lnbnxnbXBfc3FydHxnbXBfc3FydHJlbXxnbXBfc3RydmFsfGdtcF9zdWJ8Z21wX3Rlc3RiaXR8Z21wX3hvcnxnbXN0cmZ0aW1lfGdudXBnX2FkZGRlY3J5cHRrZXl8Z251cGdfYWRkZW5jcnlwdGtleXxnbnVwZ19hZGRzaWdua2V5fGdudXBnX2NsZWFyZGVjcnlwdGtleXN8Z251cGdfY2xlYXJlbmNyeXB0a2V5c3xnbnVwZ19jbGVhcnNpZ25rZXlzfGdudXBnX2RlY3J5cHR8Z251cGdfZGVjcnlwdHZlcmlmeXxnbnVwZ19lbmNyeXB0fGdudXBnX2VuY3J5cHRzaWdufGdudXBnX2V4cG9ydHxnbnVwZ19nZXRlcnJvcnxnbnVwZ19nZXRwcm90b2NvbHxnbnVwZ19pbXBvcnR8Z251cGdfaW5pdHxnbnVwZ19rZXlpbmZvfGdudXBnX3NldGFybW9yfGdudXBnX3NldGVycm9ybW9kZXxnbnVwZ19zZXRzaWdubW9kZXxnbnVwZ19zaWdufGdudXBnX3ZlcmlmeXxnb3BoZXJfcGFyc2VkaXJ8Z3JhcGhlbWVfZXh0cmFjdHxncmFwaGVtZV9zdHJpcG9zfGdyYXBoZW1lX3N0cmlzdHJ8Z3JhcGhlbWVfc3RybGVufGdyYXBoZW1lX3N0cnBvc3xncmFwaGVtZV9zdHJyaXBvc3xncmFwaGVtZV9zdHJycG9zfGdyYXBoZW1lX3N0cnN0cnxncmFwaGVtZV9zdWJzdHJ8Z3JlZ29yaWFudG9qZHxndXBucF9jb250ZXh0X2dldF9ob3N0X2lwfGd1cG5wX2NvbnRleHRfZ2V0X3BvcnR8Z3VwbnBfY29udGV4dF9nZXRfc3Vic2NyaXB0aW9uX3RpbWVvdXR8Z3VwbnBfY29udGV4dF9ob3N0X3BhdGh8Z3VwbnBfY29udGV4dF9uZXd8Z3VwbnBfY29udGV4dF9zZXRfc3Vic2NyaXB0aW9uX3RpbWVvdXR8Z3VwbnBfY29udGV4dF90aW1lb3V0X2FkZHxndXBucF9jb250ZXh0X3VuaG9zdF9wYXRofGd1cG5wX2NvbnRyb2xfcG9pbnRfYnJvd3NlX3N0YXJ0fGd1cG5wX2NvbnRyb2xfcG9pbnRfYnJvd3NlX3N0b3B8Z3VwbnBfY29udHJvbF9wb2ludF9jYWxsYmFja19zZXR8Z3VwbnBfY29udHJvbF9wb2ludF9uZXd8Z3VwbnBfZGV2aWNlX2FjdGlvbl9jYWxsYmFja19zZXR8Z3VwbnBfZGV2aWNlX2luZm9fZ2V0fGd1cG5wX2RldmljZV9pbmZvX2dldF9zZXJ2aWNlfGd1cG5wX3Jvb3RfZGV2aWNlX2dldF9hdmFpbGFibGV8Z3VwbnBfcm9vdF9kZXZpY2VfZ2V0X3JlbGF0aXZlX2xvY2F0aW9ufGd1cG5wX3Jvb3RfZGV2aWNlX25ld3xndXBucF9yb290X2RldmljZV9zZXRfYXZhaWxhYmxlfGd1cG5wX3Jvb3RfZGV2aWNlX3N0YXJ0fGd1cG5wX3Jvb3RfZGV2aWNlX3N0b3B8Z3VwbnBfc2VydmljZV9hY3Rpb25fZ2V0fGd1cG5wX3NlcnZpY2VfYWN0aW9uX3JldHVybnxndXBucF9zZXJ2aWNlX2FjdGlvbl9yZXR1cm5fZXJyb3J8Z3VwbnBfc2VydmljZV9hY3Rpb25fc2V0fGd1cG5wX3NlcnZpY2VfZnJlZXplX25vdGlmeXxndXBucF9zZXJ2aWNlX2luZm9fZ2V0fGd1cG5wX3NlcnZpY2VfaW5mb19nZXRfaW50cm9zcGVjdGlvbnxndXBucF9zZXJ2aWNlX2ludHJvc3BlY3Rpb25fZ2V0X3N0YXRlX3ZhcmlhYmxlfGd1cG5wX3NlcnZpY2Vfbm90aWZ5fGd1cG5wX3NlcnZpY2VfcHJveHlfYWN0aW9uX2dldHxndXBucF9zZXJ2aWNlX3Byb3h5X2FjdGlvbl9zZXR8Z3VwbnBfc2VydmljZV9wcm94eV9hZGRfbm90aWZ5fGd1cG5wX3NlcnZpY2VfcHJveHlfY2FsbGJhY2tfc2V0fGd1cG5wX3NlcnZpY2VfcHJveHlfZ2V0X3N1YnNjcmliZWR8Z3VwbnBfc2VydmljZV9wcm94eV9yZW1vdmVfbm90aWZ5fGd1cG5wX3NlcnZpY2VfcHJveHlfc2V0X3N1YnNjcmliZWR8Z3VwbnBfc2VydmljZV90aGF3X25vdGlmeXxnemNsb3NlfGd6Y29tcHJlc3N8Z3pkZWNvZGV8Z3pkZWZsYXRlfGd6ZW5jb2RlfGd6ZW9mfGd6ZmlsZXxnemdldGN8Z3pnZXRzfGd6Z2V0c3N8Z3ppbmZsYXRlfGd6b3BlbnxnenBhc3N0aHJ1fGd6cHV0c3xnenJlYWR8Z3pyZXdpbmR8Z3pzZWVrfGd6dGVsbHxnenVuY29tcHJlc3N8Z3p3cml0ZXxoYWx0X2NvbXBpbGVyfGhhcnVhbm5vdGF0aW9ufGhhcnVhbm5vdGF0aW9uX3NldGJvcmRlcnN0eWxlfGhhcnVhbm5vdGF0aW9uX3NldGhpZ2hsaWdodG1vZGV8aGFydWFubm90YXRpb25fc2V0aWNvbnxoYXJ1YW5ub3RhdGlvbl9zZXRvcGVuZWR8aGFydWRlc3RpbmF0aW9ufGhhcnVkZXN0aW5hdGlvbl9zZXRmaXR8aGFydWRlc3RpbmF0aW9uX3NldGZpdGJ8aGFydWRlc3RpbmF0aW9uX3NldGZpdGJofGhhcnVkZXN0aW5hdGlvbl9zZXRmaXRidnxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0aHxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0cnxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0dnxoYXJ1ZGVzdGluYXRpb25fc2V0eHl6fGhhcnVkb2N8aGFydWRvY19hZGRwYWdlfGhhcnVkb2NfYWRkcGFnZWxhYmVsfGhhcnVkb2NfY29uc3RydWN0fGhhcnVkb2NfY3JlYXRlb3V0bGluZXxoYXJ1ZG9jX2dldGN1cnJlbnRlbmNvZGVyfGhhcnVkb2NfZ2V0Y3VycmVudHBhZ2V8aGFydWRvY19nZXRlbmNvZGVyfGhhcnVkb2NfZ2V0Zm9udHxoYXJ1ZG9jX2dldGluZm9hdHRyfGhhcnVkb2NfZ2V0cGFnZWxheW91dHxoYXJ1ZG9jX2dldHBhZ2Vtb2RlfGhhcnVkb2NfZ2V0c3RyZWFtc2l6ZXxoYXJ1ZG9jX2luc2VydHBhZ2V8aGFydWRvY19sb2FkanBlZ3xoYXJ1ZG9jX2xvYWRwbmd8aGFydWRvY19sb2FkcmF3fGhhcnVkb2NfbG9hZHR0Y3xoYXJ1ZG9jX2xvYWR0dGZ8aGFydWRvY19sb2FkdHlwZTF8aGFydWRvY19vdXRwdXR8aGFydWRvY19yZWFkZnJvbXN0cmVhbXxoYXJ1ZG9jX3Jlc2V0ZXJyb3J8aGFydWRvY19yZXNldHN0cmVhbXxoYXJ1ZG9jX3NhdmV8aGFydWRvY19zYXZldG9zdHJlYW18aGFydWRvY19zZXRjb21wcmVzc2lvbm1vZGV8aGFydWRvY19zZXRjdXJyZW50ZW5jb2RlcnxoYXJ1ZG9jX3NldGVuY3J5cHRpb25tb2RlfGhhcnVkb2Nfc2V0aW5mb2F0dHJ8aGFydWRvY19zZXRpbmZvZGF0ZWF0dHJ8aGFydWRvY19zZXRvcGVuYWN0aW9ufGhhcnVkb2Nfc2V0cGFnZWxheW91dHxoYXJ1ZG9jX3NldHBhZ2Vtb2RlfGhhcnVkb2Nfc2V0cGFnZXNjb25maWd1cmF0aW9ufGhhcnVkb2Nfc2V0cGFzc3dvcmR8aGFydWRvY19zZXRwZXJtaXNzaW9ufGhhcnVkb2NfdXNlY25zZW5jb2RpbmdzfGhhcnVkb2NfdXNlY25zZm9udHN8aGFydWRvY191c2VjbnRlbmNvZGluZ3N8aGFydWRvY191c2VjbnRmb250c3xoYXJ1ZG9jX3VzZWpwZW5jb2RpbmdzfGhhcnVkb2NfdXNlanBmb250c3xoYXJ1ZG9jX3VzZWtyZW5jb2RpbmdzfGhhcnVkb2NfdXNla3Jmb250c3xoYXJ1ZW5jb2RlcnxoYXJ1ZW5jb2Rlcl9nZXRieXRldHlwZXxoYXJ1ZW5jb2Rlcl9nZXR0eXBlfGhhcnVlbmNvZGVyX2dldHVuaWNvZGV8aGFydWVuY29kZXJfZ2V0d3JpdGluZ21vZGV8aGFydWV4Y2VwdGlvbnxoYXJ1Zm9udHxoYXJ1Zm9udF9nZXRhc2NlbnR8aGFydWZvbnRfZ2V0Y2FwaGVpZ2h0fGhhcnVmb250X2dldGRlc2NlbnR8aGFydWZvbnRfZ2V0ZW5jb2RpbmduYW1lfGhhcnVmb250X2dldGZvbnRuYW1lfGhhcnVmb250X2dldHRleHR3aWR0aHxoYXJ1Zm9udF9nZXR1bmljb2Rld2lkdGh8aGFydWZvbnRfZ2V0eGhlaWdodHxoYXJ1Zm9udF9tZWFzdXJldGV4dHxoYXJ1aW1hZ2V8aGFydWltYWdlX2dldGJpdHNwZXJjb21wb25lbnR8aGFydWltYWdlX2dldGNvbG9yc3BhY2V8aGFydWltYWdlX2dldGhlaWdodHxoYXJ1aW1hZ2VfZ2V0c2l6ZXxoYXJ1aW1hZ2VfZ2V0d2lkdGh8aGFydWltYWdlX3NldGNvbG9ybWFza3xoYXJ1aW1hZ2Vfc2V0bWFza2ltYWdlfGhhcnVvdXRsaW5lfGhhcnVvdXRsaW5lX3NldGRlc3RpbmF0aW9ufGhhcnVvdXRsaW5lX3NldG9wZW5lZHxoYXJ1cGFnZXxoYXJ1cGFnZV9hcmN8aGFydXBhZ2VfYmVnaW50ZXh0fGhhcnVwYWdlX2NpcmNsZXxoYXJ1cGFnZV9jbG9zZXBhdGh8aGFydXBhZ2VfY29uY2F0fGhhcnVwYWdlX2NyZWF0ZWRlc3RpbmF0aW9ufGhhcnVwYWdlX2NyZWF0ZWxpbmthbm5vdGF0aW9ufGhhcnVwYWdlX2NyZWF0ZXRleHRhbm5vdGF0aW9ufGhhcnVwYWdlX2NyZWF0ZXVybGFubm90YXRpb258aGFydXBhZ2VfY3VydmV0b3xoYXJ1cGFnZV9jdXJ2ZXRvMnxoYXJ1cGFnZV9jdXJ2ZXRvM3xoYXJ1cGFnZV9kcmF3aW1hZ2V8aGFydXBhZ2VfZWxsaXBzZXxoYXJ1cGFnZV9lbmRwYXRofGhhcnVwYWdlX2VuZHRleHR8aGFydXBhZ2VfZW9maWxsfGhhcnVwYWdlX2VvZmlsbHN0cm9rZXxoYXJ1cGFnZV9maWxsfGhhcnVwYWdlX2ZpbGxzdHJva2V8aGFydXBhZ2VfZ2V0Y2hhcnNwYWNlfGhhcnVwYWdlX2dldGNteWtmaWxsfGhhcnVwYWdlX2dldGNteWtzdHJva2V8aGFydXBhZ2VfZ2V0Y3VycmVudGZvbnR8aGFydXBhZ2VfZ2V0Y3VycmVudGZvbnRzaXplfGhhcnVwYWdlX2dldGN1cnJlbnRwb3N8aGFydXBhZ2VfZ2V0Y3VycmVudHRleHRwb3N8aGFydXBhZ2VfZ2V0ZGFzaHxoYXJ1cGFnZV9nZXRmaWxsaW5nY29sb3JzcGFjZXxoYXJ1cGFnZV9nZXRmbGF0bmVzc3xoYXJ1cGFnZV9nZXRnbW9kZXxoYXJ1cGFnZV9nZXRncmF5ZmlsbHxoYXJ1cGFnZV9nZXRncmF5c3Ryb2tlfGhhcnVwYWdlX2dldGhlaWdodHxoYXJ1cGFnZV9nZXRob3Jpem9udGFsc2NhbGluZ3xoYXJ1cGFnZV9nZXRsaW5lY2FwfGhhcnVwYWdlX2dldGxpbmVqb2lufGhhcnVwYWdlX2dldGxpbmV3aWR0aHxoYXJ1cGFnZV9nZXRtaXRlcmxpbWl0fGhhcnVwYWdlX2dldHJnYmZpbGx8aGFydXBhZ2VfZ2V0cmdic3Ryb2tlfGhhcnVwYWdlX2dldHN0cm9raW5nY29sb3JzcGFjZXxoYXJ1cGFnZV9nZXR0ZXh0bGVhZGluZ3xoYXJ1cGFnZV9nZXR0ZXh0bWF0cml4fGhhcnVwYWdlX2dldHRleHRyZW5kZXJpbmdtb2RlfGhhcnVwYWdlX2dldHRleHRyaXNlfGhhcnVwYWdlX2dldHRleHR3aWR0aHxoYXJ1cGFnZV9nZXR0cmFuc21hdHJpeHxoYXJ1cGFnZV9nZXR3aWR0aHxoYXJ1cGFnZV9nZXR3b3Jkc3BhY2V8aGFydXBhZ2VfbGluZXRvfGhhcnVwYWdlX21lYXN1cmV0ZXh0fGhhcnVwYWdlX21vdmV0ZXh0cG9zfGhhcnVwYWdlX21vdmV0b3xoYXJ1cGFnZV9tb3ZldG9uZXh0bGluZXxoYXJ1cGFnZV9yZWN0YW5nbGV8aGFydXBhZ2Vfc2V0Y2hhcnNwYWNlfGhhcnVwYWdlX3NldGNteWtmaWxsfGhhcnVwYWdlX3NldGNteWtzdHJva2V8aGFydXBhZ2Vfc2V0ZGFzaHxoYXJ1cGFnZV9zZXRmbGF0bmVzc3xoYXJ1cGFnZV9zZXRmb250YW5kc2l6ZXxoYXJ1cGFnZV9zZXRncmF5ZmlsbHxoYXJ1cGFnZV9zZXRncmF5c3Ryb2tlfGhhcnVwYWdlX3NldGhlaWdodHxoYXJ1cGFnZV9zZXRob3Jpem9udGFsc2NhbGluZ3xoYXJ1cGFnZV9zZXRsaW5lY2FwfGhhcnVwYWdlX3NldGxpbmVqb2lufGhhcnVwYWdlX3NldGxpbmV3aWR0aHxoYXJ1cGFnZV9zZXRtaXRlcmxpbWl0fGhhcnVwYWdlX3NldHJnYmZpbGx8aGFydXBhZ2Vfc2V0cmdic3Ryb2tlfGhhcnVwYWdlX3NldHJvdGF0ZXxoYXJ1cGFnZV9zZXRzaXplfGhhcnVwYWdlX3NldHNsaWRlc2hvd3xoYXJ1cGFnZV9zZXR0ZXh0bGVhZGluZ3xoYXJ1cGFnZV9zZXR0ZXh0bWF0cml4fGhhcnVwYWdlX3NldHRleHRyZW5kZXJpbmdtb2RlfGhhcnVwYWdlX3NldHRleHRyaXNlfGhhcnVwYWdlX3NldHdpZHRofGhhcnVwYWdlX3NldHdvcmRzcGFjZXxoYXJ1cGFnZV9zaG93dGV4dHxoYXJ1cGFnZV9zaG93dGV4dG5leHRsaW5lfGhhcnVwYWdlX3N0cm9rZXxoYXJ1cGFnZV90ZXh0b3V0fGhhcnVwYWdlX3RleHRyZWN0fGhhc2NvbnN0YW50fGhhc2h8aGFzaF9hbGdvc3xoYXNoX2NvcHl8aGFzaF9maWxlfGhhc2hfZmluYWx8aGFzaF9obWFjfGhhc2hfaG1hY19maWxlfGhhc2hfaW5pdHxoYXNoX3VwZGF0ZXxoYXNoX3VwZGF0ZV9maWxlfGhhc2hfdXBkYXRlX3N0cmVhbXxoYXNtZXRob2R8aGFzcHJvcGVydHl8aGVhZGVyfGhlYWRlcl9yZWdpc3Rlcl9jYWxsYmFja3xoZWFkZXJfcmVtb3ZlfGhlYWRlcnNfbGlzdHxoZWFkZXJzX3NlbnR8aGVicmV2fGhlYnJldmN8aGV4MmJpbnxoZXhkZWN8aGlnaGxpZ2h0X2ZpbGV8aGlnaGxpZ2h0X3N0cmluZ3xodG1sX2VudGl0eV9kZWNvZGV8aHRtbGVudGl0aWVzfGh0bWxzcGVjaWFsY2hhcnN8aHRtbHNwZWNpYWxjaGFyc19kZWNvZGV8aHR0cF9idWlsZF9jb29raWV8aHR0cF9idWlsZF9xdWVyeXxodHRwX2J1aWxkX3N0cnxodHRwX2J1aWxkX3VybHxodHRwX2NhY2hlX2V0YWd8aHR0cF9jYWNoZV9sYXN0X21vZGlmaWVkfGh0dHBfY2h1bmtlZF9kZWNvZGV8aHR0cF9kYXRlfGh0dHBfZGVmbGF0ZXxodHRwX2dldHxodHRwX2dldF9yZXF1ZXN0X2JvZHl8aHR0cF9nZXRfcmVxdWVzdF9ib2R5X3N0cmVhbXxodHRwX2dldF9yZXF1ZXN0X2hlYWRlcnN8aHR0cF9oZWFkfGh0dHBfaW5mbGF0ZXxodHRwX21hdGNoX2V0YWd8aHR0cF9tYXRjaF9tb2RpZmllZHxodHRwX21hdGNoX3JlcXVlc3RfaGVhZGVyfGh0dHBfbmVnb3RpYXRlX2NoYXJzZXR8aHR0cF9uZWdvdGlhdGVfY29udGVudF90eXBlfGh0dHBfbmVnb3RpYXRlX2xhbmd1YWdlfGh0dHBfcGFyc2VfY29va2llfGh0dHBfcGFyc2VfaGVhZGVyc3xodHRwX3BhcnNlX21lc3NhZ2V8aHR0cF9wYXJzZV9wYXJhbXN8aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfY2xlYW58aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfY291bnR8aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfaWRlbnR8aHR0cF9wb3N0X2RhdGF8aHR0cF9wb3N0X2ZpZWxkc3xodHRwX3B1dF9kYXRhfGh0dHBfcHV0X2ZpbGV8aHR0cF9wdXRfc3RyZWFtfGh0dHBfcmVkaXJlY3R8aHR0cF9yZXF1ZXN0fGh0dHBfcmVxdWVzdF9ib2R5X2VuY29kZXxodHRwX3JlcXVlc3RfbWV0aG9kX2V4aXN0c3xodHRwX3JlcXVlc3RfbWV0aG9kX25hbWV8aHR0cF9yZXF1ZXN0X21ldGhvZF9yZWdpc3RlcnxodHRwX3JlcXVlc3RfbWV0aG9kX3VucmVnaXN0ZXJ8aHR0cF9yZXNwb25zZV9jb2RlfGh0dHBfc2VuZF9jb250ZW50X2Rpc3Bvc2l0aW9ufGh0dHBfc2VuZF9jb250ZW50X3R5cGV8aHR0cF9zZW5kX2RhdGF8aHR0cF9zZW5kX2ZpbGV8aHR0cF9zZW5kX2xhc3RfbW9kaWZpZWR8aHR0cF9zZW5kX3N0YXR1c3xodHRwX3NlbmRfc3RyZWFtfGh0dHBfc3VwcG9ydHxodHRwX3Rocm90dGxlfGh0dHBkZWZsYXRlc3RyZWFtfGh0dHBkZWZsYXRlc3RyZWFtX2NvbnN0cnVjdHxodHRwZGVmbGF0ZXN0cmVhbV9mYWN0b3J5fGh0dHBkZWZsYXRlc3RyZWFtX2ZpbmlzaHxodHRwZGVmbGF0ZXN0cmVhbV9mbHVzaHxodHRwZGVmbGF0ZXN0cmVhbV91cGRhdGV8aHR0cGluZmxhdGVzdHJlYW18aHR0cGluZmxhdGVzdHJlYW1fY29uc3RydWN0fGh0dHBpbmZsYXRlc3RyZWFtX2ZhY3Rvcnl8aHR0cGluZmxhdGVzdHJlYW1fZmluaXNofGh0dHBpbmZsYXRlc3RyZWFtX2ZsdXNofGh0dHBpbmZsYXRlc3RyZWFtX3VwZGF0ZXxodHRwbWVzc2FnZXxodHRwbWVzc2FnZV9hZGRoZWFkZXJzfGh0dHBtZXNzYWdlX2NvbnN0cnVjdHxodHRwbWVzc2FnZV9kZXRhY2h8aHR0cG1lc3NhZ2VfZmFjdG9yeXxodHRwbWVzc2FnZV9mcm9tZW52fGh0dHBtZXNzYWdlX2Zyb21zdHJpbmd8aHR0cG1lc3NhZ2VfZ2V0Ym9keXxodHRwbWVzc2FnZV9nZXRoZWFkZXJ8aHR0cG1lc3NhZ2VfZ2V0aGVhZGVyc3xodHRwbWVzc2FnZV9nZXRodHRwdmVyc2lvbnxodHRwbWVzc2FnZV9nZXRwYXJlbnRtZXNzYWdlfGh0dHBtZXNzYWdlX2dldHJlcXVlc3RtZXRob2R8aHR0cG1lc3NhZ2VfZ2V0cmVxdWVzdHVybHxodHRwbWVzc2FnZV9nZXRyZXNwb25zZWNvZGV8aHR0cG1lc3NhZ2VfZ2V0cmVzcG9uc2VzdGF0dXN8aHR0cG1lc3NhZ2VfZ2V0dHlwZXxodHRwbWVzc2FnZV9ndWVzc2NvbnRlbnR0eXBlfGh0dHBtZXNzYWdlX3ByZXBlbmR8aHR0cG1lc3NhZ2VfcmV2ZXJzZXxodHRwbWVzc2FnZV9zZW5kfGh0dHBtZXNzYWdlX3NldGJvZHl8aHR0cG1lc3NhZ2Vfc2V0aGVhZGVyc3xodHRwbWVzc2FnZV9zZXRodHRwdmVyc2lvbnxodHRwbWVzc2FnZV9zZXRyZXF1ZXN0bWV0aG9kfGh0dHBtZXNzYWdlX3NldHJlcXVlc3R1cmx8aHR0cG1lc3NhZ2Vfc2V0cmVzcG9uc2Vjb2RlfGh0dHBtZXNzYWdlX3NldHJlc3BvbnNlc3RhdHVzfGh0dHBtZXNzYWdlX3NldHR5cGV8aHR0cG1lc3NhZ2VfdG9tZXNzYWdldHlwZW9iamVjdHxodHRwbWVzc2FnZV90b3N0cmluZ3xodHRwcXVlcnlzdHJpbmd8aHR0cHF1ZXJ5c3RyaW5nX2NvbnN0cnVjdHxodHRwcXVlcnlzdHJpbmdfZ2V0fGh0dHBxdWVyeXN0cmluZ19tb2R8aHR0cHF1ZXJ5c3RyaW5nX3NldHxodHRwcXVlcnlzdHJpbmdfc2luZ2xldG9ufGh0dHBxdWVyeXN0cmluZ190b2FycmF5fGh0dHBxdWVyeXN0cmluZ190b3N0cmluZ3xodHRwcXVlcnlzdHJpbmdfeGxhdGV8aHR0cHJlcXVlc3R8aHR0cHJlcXVlc3RfYWRkY29va2llc3xodHRwcmVxdWVzdF9hZGRoZWFkZXJzfGh0dHByZXF1ZXN0X2FkZHBvc3RmaWVsZHN8aHR0cHJlcXVlc3RfYWRkcG9zdGZpbGV8aHR0cHJlcXVlc3RfYWRkcHV0ZGF0YXxodHRwcmVxdWVzdF9hZGRxdWVyeWRhdGF8aHR0cHJlcXVlc3RfYWRkcmF3cG9zdGRhdGF8aHR0cHJlcXVlc3RfYWRkc3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9jbGVhcmhpc3Rvcnl8aHR0cHJlcXVlc3RfY29uc3RydWN0fGh0dHByZXF1ZXN0X2VuYWJsZWNvb2tpZXN8aHR0cHJlcXVlc3RfZ2V0Y29udGVudHR5cGV8aHR0cHJlcXVlc3RfZ2V0Y29va2llc3xodHRwcmVxdWVzdF9nZXRoZWFkZXJzfGh0dHByZXF1ZXN0X2dldGhpc3Rvcnl8aHR0cHJlcXVlc3RfZ2V0bWV0aG9kfGh0dHByZXF1ZXN0X2dldG9wdGlvbnN8aHR0cHJlcXVlc3RfZ2V0cG9zdGZpZWxkc3xodHRwcmVxdWVzdF9nZXRwb3N0ZmlsZXN8aHR0cHJlcXVlc3RfZ2V0cHV0ZGF0YXxodHRwcmVxdWVzdF9nZXRwdXRmaWxlfGh0dHByZXF1ZXN0X2dldHF1ZXJ5ZGF0YXxodHRwcmVxdWVzdF9nZXRyYXdwb3N0ZGF0YXxodHRwcmVxdWVzdF9nZXRyYXdyZXF1ZXN0bWVzc2FnZXxodHRwcmVxdWVzdF9nZXRyYXdyZXNwb25zZW1lc3NhZ2V8aHR0cHJlcXVlc3RfZ2V0cmVxdWVzdG1lc3NhZ2V8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2Vib2R5fGh0dHByZXF1ZXN0X2dldHJlc3BvbnNlY29kZXxodHRwcmVxdWVzdF9nZXRyZXNwb25zZWNvb2tpZXN8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2VkYXRhfGh0dHByZXF1ZXN0X2dldHJlc3BvbnNlaGVhZGVyfGh0dHByZXF1ZXN0X2dldHJlc3BvbnNlaW5mb3xodHRwcmVxdWVzdF9nZXRyZXNwb25zZW1lc3NhZ2V8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2VzdGF0dXN8aHR0cHJlcXVlc3RfZ2V0c3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9nZXR1cmx8aHR0cHJlcXVlc3RfcmVzZXRjb29raWVzfGh0dHByZXF1ZXN0X3NlbmR8aHR0cHJlcXVlc3Rfc2V0Y29udGVudHR5cGV8aHR0cHJlcXVlc3Rfc2V0Y29va2llc3xodHRwcmVxdWVzdF9zZXRoZWFkZXJzfGh0dHByZXF1ZXN0X3NldG1ldGhvZHxodHRwcmVxdWVzdF9zZXRvcHRpb25zfGh0dHByZXF1ZXN0X3NldHBvc3RmaWVsZHN8aHR0cHJlcXVlc3Rfc2V0cG9zdGZpbGVzfGh0dHByZXF1ZXN0X3NldHB1dGRhdGF8aHR0cHJlcXVlc3Rfc2V0cHV0ZmlsZXxodHRwcmVxdWVzdF9zZXRxdWVyeWRhdGF8aHR0cHJlcXVlc3Rfc2V0cmF3cG9zdGRhdGF8aHR0cHJlcXVlc3Rfc2V0c3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9zZXR1cmx8aHR0cHJlcXVlc3Rwb29sfGh0dHByZXF1ZXN0cG9vbF9hdHRhY2h8aHR0cHJlcXVlc3Rwb29sX2NvbnN0cnVjdHxodHRwcmVxdWVzdHBvb2xfZGVzdHJ1Y3R8aHR0cHJlcXVlc3Rwb29sX2RldGFjaHxodHRwcmVxdWVzdHBvb2xfZ2V0YXR0YWNoZWRyZXF1ZXN0c3xodHRwcmVxdWVzdHBvb2xfZ2V0ZmluaXNoZWRyZXF1ZXN0c3xodHRwcmVxdWVzdHBvb2xfcmVzZXR8aHR0cHJlcXVlc3Rwb29sX3NlbmR8aHR0cHJlcXVlc3Rwb29sX3NvY2tldHBlcmZvcm18aHR0cHJlcXVlc3Rwb29sX3NvY2tldHNlbGVjdHxodHRwcmVzcG9uc2V8aHR0cHJlc3BvbnNlX2NhcHR1cmV8aHR0cHJlc3BvbnNlX2dldGJ1ZmZlcnNpemV8aHR0cHJlc3BvbnNlX2dldGNhY2hlfGh0dHByZXNwb25zZV9nZXRjYWNoZWNvbnRyb2x8aHR0cHJlc3BvbnNlX2dldGNvbnRlbnRkaXNwb3NpdGlvbnxodHRwcmVzcG9uc2VfZ2V0Y29udGVudHR5cGV8aHR0cHJlc3BvbnNlX2dldGRhdGF8aHR0cHJlc3BvbnNlX2dldGV0YWd8aHR0cHJlc3BvbnNlX2dldGZpbGV8aHR0cHJlc3BvbnNlX2dldGd6aXB8aHR0cHJlc3BvbnNlX2dldGhlYWRlcnxodHRwcmVzcG9uc2VfZ2V0bGFzdG1vZGlmaWVkfGh0dHByZXNwb25zZV9nZXRyZXF1ZXN0Ym9keXxodHRwcmVzcG9uc2VfZ2V0cmVxdWVzdGJvZHlzdHJlYW18aHR0cHJlc3BvbnNlX2dldHJlcXVlc3RoZWFkZXJzfGh0dHByZXNwb25zZV9nZXRzdHJlYW18aHR0cHJlc3BvbnNlX2dldHRocm90dGxlZGVsYXl8aHR0cHJlc3BvbnNlX2d1ZXNzY29udGVudHR5cGV8aHR0cHJlc3BvbnNlX3JlZGlyZWN0fGh0dHByZXNwb25zZV9zZW5kfGh0dHByZXNwb25zZV9zZXRidWZmZXJzaXplfGh0dHByZXNwb25zZV9zZXRjYWNoZXxodHRwcmVzcG9uc2Vfc2V0Y2FjaGVjb250cm9sfGh0dHByZXNwb25zZV9zZXRjb250ZW50ZGlzcG9zaXRpb258aHR0cHJlc3BvbnNlX3NldGNvbnRlbnR0eXBlfGh0dHByZXNwb25zZV9zZXRkYXRhfGh0dHByZXNwb25zZV9zZXRldGFnfGh0dHByZXNwb25zZV9zZXRmaWxlfGh0dHByZXNwb25zZV9zZXRnemlwfGh0dHByZXNwb25zZV9zZXRoZWFkZXJ8aHR0cHJlc3BvbnNlX3NldGxhc3Rtb2RpZmllZHxodHRwcmVzcG9uc2Vfc2V0c3RyZWFtfGh0dHByZXNwb25zZV9zZXR0aHJvdHRsZWRlbGF5fGh0dHByZXNwb25zZV9zdGF0dXN8aHdfYXJyYXkyb2JqcmVjfGh3X2NoYW5nZW9iamVjdHxod19jaGlsZHJlbnxod19jaGlsZHJlbm9ianxod19jbG9zZXxod19jb25uZWN0fGh3X2Nvbm5lY3Rpb25faW5mb3xod19jcHxod19kZWxldGVvYmplY3R8aHdfZG9jYnlhbmNob3J8aHdfZG9jYnlhbmNob3JvYmp8aHdfZG9jdW1lbnRfYXR0cmlidXRlc3xod19kb2N1bWVudF9ib2R5dGFnfGh3X2RvY3VtZW50X2NvbnRlbnR8aHdfZG9jdW1lbnRfc2V0Y29udGVudHxod19kb2N1bWVudF9zaXplfGh3X2R1bW15fGh3X2VkaXR0ZXh0fGh3X2Vycm9yfGh3X2Vycm9ybXNnfGh3X2ZyZWVfZG9jdW1lbnR8aHdfZ2V0YW5jaG9yc3xod19nZXRhbmNob3Jzb2JqfGh3X2dldGFuZGxvY2t8aHdfZ2V0Y2hpbGRjb2xsfGh3X2dldGNoaWxkY29sbG9ianxod19nZXRjaGlsZGRvY2NvbGx8aHdfZ2V0Y2hpbGRkb2Njb2xsb2JqfGh3X2dldG9iamVjdHxod19nZXRvYmplY3RieXF1ZXJ5fGh3X2dldG9iamVjdGJ5cXVlcnljb2xsfGh3X2dldG9iamVjdGJ5cXVlcnljb2xsb2JqfGh3X2dldG9iamVjdGJ5cXVlcnlvYmp8aHdfZ2V0cGFyZW50c3xod19nZXRwYXJlbnRzb2JqfGh3X2dldHJlbGxpbmt8aHdfZ2V0cmVtb3RlfGh3X2dldHJlbW90ZWNoaWxkcmVufGh3X2dldHNyY2J5ZGVzdG9ianxod19nZXR0ZXh0fGh3X2dldHVzZXJuYW1lfGh3X2lkZW50aWZ5fGh3X2luY29sbGVjdGlvbnN8aHdfaW5mb3xod19pbnNjb2xsfGh3X2luc2RvY3xod19pbnNlcnRhbmNob3JzfGh3X2luc2VydGRvY3VtZW50fGh3X2luc2VydG9iamVjdHxod19tYXBpZHxod19tb2RpZnlvYmplY3R8aHdfbXZ8aHdfbmV3X2RvY3VtZW50fGh3X29ianJlYzJhcnJheXxod19vdXRwdXRfZG9jdW1lbnR8aHdfcGNvbm5lY3R8aHdfcGlwZWRvY3VtZW50fGh3X3Jvb3R8aHdfc2V0bGlua3Jvb3R8aHdfc3RhdHxod191bmxvY2t8aHdfd2hvfGh3YXBpX2F0dHJpYnV0ZXxod2FwaV9hdHRyaWJ1dGVfa2V5fGh3YXBpX2F0dHJpYnV0ZV9sYW5nZGVwdmFsdWV8aHdhcGlfYXR0cmlidXRlX3ZhbHVlfGh3YXBpX2F0dHJpYnV0ZV92YWx1ZXN8aHdhcGlfY2hlY2tpbnxod2FwaV9jaGVja291dHxod2FwaV9jaGlsZHJlbnxod2FwaV9jb250ZW50fGh3YXBpX2NvbnRlbnRfbWltZXR5cGV8aHdhcGlfY29udGVudF9yZWFkfGh3YXBpX2NvcHl8aHdhcGlfZGJzdGF0fGh3YXBpX2Rjc3RhdHxod2FwaV9kc3RhbmNob3JzfGh3YXBpX2RzdG9mc3JjYW5jaG9yfGh3YXBpX2Vycm9yX2NvdW50fGh3YXBpX2Vycm9yX3JlYXNvbnxod2FwaV9maW5kfGh3YXBpX2Z0c3RhdHxod2FwaV9oZ2NzcHxod2FwaV9od3N0YXR8aHdhcGlfaWRlbnRpZnl8aHdhcGlfaW5mb3xod2FwaV9pbnNlcnR8aHdhcGlfaW5zZXJ0YW5jaG9yfGh3YXBpX2luc2VydGNvbGxlY3Rpb258aHdhcGlfaW5zZXJ0ZG9jdW1lbnR8aHdhcGlfbGlua3xod2FwaV9sb2NrfGh3YXBpX21vdmV8aHdhcGlfbmV3X2NvbnRlbnR8aHdhcGlfb2JqZWN0fGh3YXBpX29iamVjdF9hc3NpZ258aHdhcGlfb2JqZWN0X2F0dHJlZGl0YWJsZXxod2FwaV9vYmplY3RfY291bnR8aHdhcGlfb2JqZWN0X2luc2VydHxod2FwaV9vYmplY3RfbmV3fGh3YXBpX29iamVjdF9yZW1vdmV8aHdhcGlfb2JqZWN0X3RpdGxlfGh3YXBpX29iamVjdF92YWx1ZXxod2FwaV9vYmplY3RieWFuY2hvcnxod2FwaV9wYXJlbnRzfGh3YXBpX3JlYXNvbl9kZXNjcmlwdGlvbnxod2FwaV9yZWFzb25fdHlwZXxod2FwaV9yZW1vdmV8aHdhcGlfcmVwbGFjZXxod2FwaV9zZXRjb21taXR0ZWR2ZXJzaW9ufGh3YXBpX3NyY2FuY2hvcnN8aHdhcGlfc3Jjc29mZHN0fGh3YXBpX3VubG9ja3xod2FwaV91c2VyfGh3YXBpX3VzZXJsaXN0fGh5cG90fGliYXNlX2FkZF91c2VyfGliYXNlX2FmZmVjdGVkX3Jvd3N8aWJhc2VfYmFja3VwfGliYXNlX2Jsb2JfYWRkfGliYXNlX2Jsb2JfY2FuY2VsfGliYXNlX2Jsb2JfY2xvc2V8aWJhc2VfYmxvYl9jcmVhdGV8aWJhc2VfYmxvYl9lY2hvfGliYXNlX2Jsb2JfZ2V0fGliYXNlX2Jsb2JfaW1wb3J0fGliYXNlX2Jsb2JfaW5mb3xpYmFzZV9ibG9iX29wZW58aWJhc2VfY2xvc2V8aWJhc2VfY29tbWl0fGliYXNlX2NvbW1pdF9yZXR8aWJhc2VfY29ubmVjdHxpYmFzZV9kYl9pbmZvfGliYXNlX2RlbGV0ZV91c2VyfGliYXNlX2Ryb3BfZGJ8aWJhc2VfZXJyY29kZXxpYmFzZV9lcnJtc2d8aWJhc2VfZXhlY3V0ZXxpYmFzZV9mZXRjaF9hc3NvY3xpYmFzZV9mZXRjaF9vYmplY3R8aWJhc2VfZmV0Y2hfcm93fGliYXNlX2ZpZWxkX2luZm98aWJhc2VfZnJlZV9ldmVudF9oYW5kbGVyfGliYXNlX2ZyZWVfcXVlcnl8aWJhc2VfZnJlZV9yZXN1bHR8aWJhc2VfZ2VuX2lkfGliYXNlX21haW50YWluX2RifGliYXNlX21vZGlmeV91c2VyfGliYXNlX25hbWVfcmVzdWx0fGliYXNlX251bV9maWVsZHN8aWJhc2VfbnVtX3BhcmFtc3xpYmFzZV9wYXJhbV9pbmZvfGliYXNlX3Bjb25uZWN0fGliYXNlX3ByZXBhcmV8aWJhc2VfcXVlcnl8aWJhc2VfcmVzdG9yZXxpYmFzZV9yb2xsYmFja3xpYmFzZV9yb2xsYmFja19yZXR8aWJhc2Vfc2VydmVyX2luZm98aWJhc2Vfc2VydmljZV9hdHRhY2h8aWJhc2Vfc2VydmljZV9kZXRhY2h8aWJhc2Vfc2V0X2V2ZW50X2hhbmRsZXJ8aWJhc2VfdGltZWZtdHxpYmFzZV90cmFuc3xpYmFzZV93YWl0X2V2ZW50fGljb252fGljb252X2dldF9lbmNvZGluZ3xpY29udl9taW1lX2RlY29kZXxpY29udl9taW1lX2RlY29kZV9oZWFkZXJzfGljb252X21pbWVfZW5jb2RlfGljb252X3NldF9lbmNvZGluZ3xpY29udl9zdHJsZW58aWNvbnZfc3RycG9zfGljb252X3N0cnJwb3N8aWNvbnZfc3Vic3RyfGlkM19nZXRfZnJhbWVfbG9uZ19uYW1lfGlkM19nZXRfZnJhbWVfc2hvcnRfbmFtZXxpZDNfZ2V0X2dlbnJlX2lkfGlkM19nZXRfZ2VucmVfbGlzdHxpZDNfZ2V0X2dlbnJlX25hbWV8aWQzX2dldF90YWd8aWQzX2dldF92ZXJzaW9ufGlkM19yZW1vdmVfdGFnfGlkM19zZXRfdGFnfGlkM3YyYXR0YWNoZWRwaWN0dXJlZnJhbWV8aWQzdjJmcmFtZXxpZDN2MnRhZ3xpZGF0ZXxpZG5fdG9fYXNjaWl8aWRuX3RvX3VuaWNvZGV8aWRuX3RvX3V0Zjh8aWZ4X2FmZmVjdGVkX3Jvd3N8aWZ4X2Jsb2JpbmZpbGVfbW9kZXxpZnhfYnl0ZWFzdmFyY2hhcnxpZnhfY2xvc2V8aWZ4X2Nvbm5lY3R8aWZ4X2NvcHlfYmxvYnxpZnhfY3JlYXRlX2Jsb2J8aWZ4X2NyZWF0ZV9jaGFyfGlmeF9kb3xpZnhfZXJyb3J8aWZ4X2Vycm9ybXNnfGlmeF9mZXRjaF9yb3d8aWZ4X2ZpZWxkcHJvcGVydGllc3xpZnhfZmllbGR0eXBlc3xpZnhfZnJlZV9ibG9ifGlmeF9mcmVlX2NoYXJ8aWZ4X2ZyZWVfcmVzdWx0fGlmeF9nZXRfYmxvYnxpZnhfZ2V0X2NoYXJ8aWZ4X2dldHNxbGNhfGlmeF9odG1sdGJsX3Jlc3VsdHxpZnhfbnVsbGZvcm1hdHxpZnhfbnVtX2ZpZWxkc3xpZnhfbnVtX3Jvd3N8aWZ4X3Bjb25uZWN0fGlmeF9wcmVwYXJlfGlmeF9xdWVyeXxpZnhfdGV4dGFzdmFyY2hhcnxpZnhfdXBkYXRlX2Jsb2J8aWZ4X3VwZGF0ZV9jaGFyfGlmeHVzX2Nsb3NlX3Nsb2J8aWZ4dXNfY3JlYXRlX3Nsb2J8aWZ4dXNfZnJlZV9zbG9ifGlmeHVzX29wZW5fc2xvYnxpZnh1c19yZWFkX3Nsb2J8aWZ4dXNfc2Vla19zbG9ifGlmeHVzX3RlbGxfc2xvYnxpZnh1c193cml0ZV9zbG9ifGlnbm9yZV91c2VyX2Fib3J0fGlpc19hZGRfc2VydmVyfGlpc19nZXRfZGlyX3NlY3VyaXR5fGlpc19nZXRfc2NyaXB0X21hcHxpaXNfZ2V0X3NlcnZlcl9ieV9jb21tZW50fGlpc19nZXRfc2VydmVyX2J5X3BhdGh8aWlzX2dldF9zZXJ2ZXJfcmlnaHRzfGlpc19nZXRfc2VydmljZV9zdGF0ZXxpaXNfcmVtb3ZlX3NlcnZlcnxpaXNfc2V0X2FwcF9zZXR0aW5nc3xpaXNfc2V0X2Rpcl9zZWN1cml0eXxpaXNfc2V0X3NjcmlwdF9tYXB8aWlzX3NldF9zZXJ2ZXJfcmlnaHRzfGlpc19zdGFydF9zZXJ2ZXJ8aWlzX3N0YXJ0X3NlcnZpY2V8aWlzX3N0b3Bfc2VydmVyfGlpc19zdG9wX3NlcnZpY2V8aW1hZ2Uyd2JtcHxpbWFnZV90eXBlX3RvX2V4dGVuc2lvbnxpbWFnZV90eXBlX3RvX21pbWVfdHlwZXxpbWFnZWFscGhhYmxlbmRpbmd8aW1hZ2VhbnRpYWxpYXN8aW1hZ2VhcmN8aW1hZ2VjaGFyfGltYWdlY2hhcnVwfGltYWdlY29sb3JhbGxvY2F0ZXxpbWFnZWNvbG9yYWxsb2NhdGVhbHBoYXxpbWFnZWNvbG9yYXR8aW1hZ2Vjb2xvcmNsb3Nlc3R8aW1hZ2Vjb2xvcmNsb3Nlc3RhbHBoYXxpbWFnZWNvbG9yY2xvc2VzdGh3YnxpbWFnZWNvbG9yZGVhbGxvY2F0ZXxpbWFnZWNvbG9yZXhhY3R8aW1hZ2Vjb2xvcmV4YWN0YWxwaGF8aW1hZ2Vjb2xvcm1hdGNofGltYWdlY29sb3JyZXNvbHZlfGltYWdlY29sb3JyZXNvbHZlYWxwaGF8aW1hZ2Vjb2xvcnNldHxpbWFnZWNvbG9yc2ZvcmluZGV4fGltYWdlY29sb3JzdG90YWx8aW1hZ2Vjb2xvcnRyYW5zcGFyZW50fGltYWdlY29udm9sdXRpb258aW1hZ2Vjb3B5fGltYWdlY29weW1lcmdlfGltYWdlY29weW1lcmdlZ3JheXxpbWFnZWNvcHlyZXNhbXBsZWR8aW1hZ2Vjb3B5cmVzaXplZHxpbWFnZWNyZWF0ZXxpbWFnZWNyZWF0ZWZyb21nZHxpbWFnZWNyZWF0ZWZyb21nZDJ8aW1hZ2VjcmVhdGVmcm9tZ2QycGFydHxpbWFnZWNyZWF0ZWZyb21naWZ8aW1hZ2VjcmVhdGVmcm9tanBlZ3xpbWFnZWNyZWF0ZWZyb21wbmd8aW1hZ2VjcmVhdGVmcm9tc3RyaW5nfGltYWdlY3JlYXRlZnJvbXdibXB8aW1hZ2VjcmVhdGVmcm9teGJtfGltYWdlY3JlYXRlZnJvbXhwbXxpbWFnZWNyZWF0ZXRydWVjb2xvcnxpbWFnZWRhc2hlZGxpbmV8aW1hZ2VkZXN0cm95fGltYWdlZWxsaXBzZXxpbWFnZWZpbGx8aW1hZ2VmaWxsZWRhcmN8aW1hZ2VmaWxsZWRlbGxpcHNlfGltYWdlZmlsbGVkcG9seWdvbnxpbWFnZWZpbGxlZHJlY3RhbmdsZXxpbWFnZWZpbGx0b2JvcmRlcnxpbWFnZWZpbHRlcnxpbWFnZWZvbnRoZWlnaHR8aW1hZ2Vmb250d2lkdGh8aW1hZ2VmdGJib3h8aW1hZ2VmdHRleHR8aW1hZ2VnYW1tYWNvcnJlY3R8aW1hZ2VnZHxpbWFnZWdkMnxpbWFnZWdpZnxpbWFnZWdyYWJzY3JlZW58aW1hZ2VncmFid2luZG93fGltYWdlaW50ZXJsYWNlfGltYWdlaXN0cnVlY29sb3J8aW1hZ2VqcGVnfGltYWdlbGF5ZXJlZmZlY3R8aW1hZ2VsaW5lfGltYWdlbG9hZGZvbnR8aW1hZ2VwYWxldHRlY29weXxpbWFnZXBuZ3xpbWFnZXBvbHlnb258aW1hZ2Vwc2Jib3h8aW1hZ2Vwc2VuY29kZWZvbnR8aW1hZ2Vwc2V4dGVuZGZvbnR8aW1hZ2Vwc2ZyZWVmb250fGltYWdlcHNsb2FkZm9udHxpbWFnZXBzc2xhbnRmb250fGltYWdlcHN0ZXh0fGltYWdlcmVjdGFuZ2xlfGltYWdlcm90YXRlfGltYWdlc2F2ZWFscGhhfGltYWdlc2V0YnJ1c2h8aW1hZ2VzZXRwaXhlbHxpbWFnZXNldHN0eWxlfGltYWdlc2V0dGhpY2tuZXNzfGltYWdlc2V0dGlsZXxpbWFnZXN0cmluZ3xpbWFnZXN0cmluZ3VwfGltYWdlc3h8aW1hZ2VzeXxpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZXxpbWFnZXR0ZmJib3h8aW1hZ2V0dGZ0ZXh0fGltYWdldHlwZXN8aW1hZ2V3Ym1wfGltYWdleGJtfGltYWdpY2t8aW1hZ2lja19hZGFwdGl2ZWJsdXJpbWFnZXxpbWFnaWNrX2FkYXB0aXZlcmVzaXplaW1hZ2V8aW1hZ2lja19hZGFwdGl2ZXNoYXJwZW5pbWFnZXxpbWFnaWNrX2FkYXB0aXZldGhyZXNob2xkaW1hZ2V8aW1hZ2lja19hZGRpbWFnZXxpbWFnaWNrX2FkZG5vaXNlaW1hZ2V8aW1hZ2lja19hZmZpbmV0cmFuc2Zvcm1pbWFnZXxpbWFnaWNrX2FuaW1hdGVpbWFnZXN8aW1hZ2lja19hbm5vdGF0ZWltYWdlfGltYWdpY2tfYXBwZW5kaW1hZ2VzfGltYWdpY2tfYXZlcmFnZWltYWdlc3xpbWFnaWNrX2JsYWNrdGhyZXNob2xkaW1hZ2V8aW1hZ2lja19ibHVyaW1hZ2V8aW1hZ2lja19ib3JkZXJpbWFnZXxpbWFnaWNrX2NoYXJjb2FsaW1hZ2V8aW1hZ2lja19jaG9waW1hZ2V8aW1hZ2lja19jbGVhcnxpbWFnaWNrX2NsaXBpbWFnZXxpbWFnaWNrX2NsaXBwYXRoaW1hZ2V8aW1hZ2lja19jbG9uZXxpbWFnaWNrX2NsdXRpbWFnZXxpbWFnaWNrX2NvYWxlc2NlaW1hZ2VzfGltYWdpY2tfY29sb3JmbG9vZGZpbGxpbWFnZXxpbWFnaWNrX2NvbG9yaXplaW1hZ2V8aW1hZ2lja19jb21iaW5laW1hZ2VzfGltYWdpY2tfY29tbWVudGltYWdlfGltYWdpY2tfY29tcGFyZWltYWdlY2hhbm5lbHN8aW1hZ2lja19jb21wYXJlaW1hZ2VsYXllcnN8aW1hZ2lja19jb21wYXJlaW1hZ2VzfGltYWdpY2tfY29tcG9zaXRlaW1hZ2V8aW1hZ2lja19jb25zdHJ1Y3R8aW1hZ2lja19jb250cmFzdGltYWdlfGltYWdpY2tfY29udHJhc3RzdHJldGNoaW1hZ2V8aW1hZ2lja19jb252b2x2ZWltYWdlfGltYWdpY2tfY3JvcGltYWdlfGltYWdpY2tfY3JvcHRodW1ibmFpbGltYWdlfGltYWdpY2tfY3VycmVudHxpbWFnaWNrX2N5Y2xlY29sb3JtYXBpbWFnZXxpbWFnaWNrX2RlY2lwaGVyaW1hZ2V8aW1hZ2lja19kZWNvbnN0cnVjdGltYWdlc3xpbWFnaWNrX2RlbGV0ZWltYWdlYXJ0aWZhY3R8aW1hZ2lja19kZXNwZWNrbGVpbWFnZXxpbWFnaWNrX2Rlc3Ryb3l8aW1hZ2lja19kaXNwbGF5aW1hZ2V8aW1hZ2lja19kaXNwbGF5aW1hZ2VzfGltYWdpY2tfZGlzdG9ydGltYWdlfGltYWdpY2tfZHJhd2ltYWdlfGltYWdpY2tfZWRnZWltYWdlfGltYWdpY2tfZW1ib3NzaW1hZ2V8aW1hZ2lja19lbmNpcGhlcmltYWdlfGltYWdpY2tfZW5oYW5jZWltYWdlfGltYWdpY2tfZXF1YWxpemVpbWFnZXxpbWFnaWNrX2V2YWx1YXRlaW1hZ2V8aW1hZ2lja19leHRlbnRpbWFnZXxpbWFnaWNrX2ZsYXR0ZW5pbWFnZXN8aW1hZ2lja19mbGlwaW1hZ2V8aW1hZ2lja19mbG9vZGZpbGxwYWludGltYWdlfGltYWdpY2tfZmxvcGltYWdlfGltYWdpY2tfZnJhbWVpbWFnZXxpbWFnaWNrX2Z4aW1hZ2V8aW1hZ2lja19nYW1tYWltYWdlfGltYWdpY2tfZ2F1c3NpYW5ibHVyaW1hZ2V8aW1hZ2lja19nZXRjb2xvcnNwYWNlfGltYWdpY2tfZ2V0Y29tcHJlc3Npb258aW1hZ2lja19nZXRjb21wcmVzc2lvbnF1YWxpdHl8aW1hZ2lja19nZXRjb3B5cmlnaHR8aW1hZ2lja19nZXRmaWxlbmFtZXxpbWFnaWNrX2dldGZvbnR8aW1hZ2lja19nZXRmb3JtYXR8aW1hZ2lja19nZXRncmF2aXR5fGltYWdpY2tfZ2V0aG9tZXVybHxpbWFnaWNrX2dldGltYWdlfGltYWdpY2tfZ2V0aW1hZ2VhbHBoYWNoYW5uZWx8aW1hZ2lja19nZXRpbWFnZWFydGlmYWN0fGltYWdpY2tfZ2V0aW1hZ2ViYWNrZ3JvdW5kY29sb3J8aW1hZ2lja19nZXRpbWFnZWJsb2J8aW1hZ2lja19nZXRpbWFnZWJsdWVwcmltYXJ5fGltYWdpY2tfZ2V0aW1hZ2Vib3JkZXJjb2xvcnxpbWFnaWNrX2dldGltYWdlY2hhbm5lbGRlcHRofGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsZGlzdG9ydGlvbnxpbWFnaWNrX2dldGltYWdlY2hhbm5lbGRpc3RvcnRpb25zfGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsZXh0cmVtYXxpbWFnaWNrX2dldGltYWdlY2hhbm5lbG1lYW58aW1hZ2lja19nZXRpbWFnZWNoYW5uZWxyYW5nZXxpbWFnaWNrX2dldGltYWdlY2hhbm5lbHN0YXRpc3RpY3N8aW1hZ2lja19nZXRpbWFnZWNsaXBtYXNrfGltYWdpY2tfZ2V0aW1hZ2Vjb2xvcm1hcGNvbG9yfGltYWdpY2tfZ2V0aW1hZ2Vjb2xvcnN8aW1hZ2lja19nZXRpbWFnZWNvbG9yc3BhY2V8aW1hZ2lja19nZXRpbWFnZWNvbXBvc2V8aW1hZ2lja19nZXRpbWFnZWNvbXByZXNzaW9ufGltYWdpY2tfZ2V0aW1hZ2Vjb21wcmVzc2lvbnF1YWxpdHl8aW1hZ2lja19nZXRpbWFnZWRlbGF5fGltYWdpY2tfZ2V0aW1hZ2VkZXB0aHxpbWFnaWNrX2dldGltYWdlZGlzcG9zZXxpbWFnaWNrX2dldGltYWdlZGlzdG9ydGlvbnxpbWFnaWNrX2dldGltYWdlZXh0cmVtYXxpbWFnaWNrX2dldGltYWdlZmlsZW5hbWV8aW1hZ2lja19nZXRpbWFnZWZvcm1hdHxpbWFnaWNrX2dldGltYWdlZ2FtbWF8aW1hZ2lja19nZXRpbWFnZWdlb21ldHJ5fGltYWdpY2tfZ2V0aW1hZ2VncmF2aXR5fGltYWdpY2tfZ2V0aW1hZ2VncmVlbnByaW1hcnl8aW1hZ2lja19nZXRpbWFnZWhlaWdodHxpbWFnaWNrX2dldGltYWdlaGlzdG9ncmFtfGltYWdpY2tfZ2V0aW1hZ2VpbmRleHxpbWFnaWNrX2dldGltYWdlaW50ZXJsYWNlc2NoZW1lfGltYWdpY2tfZ2V0aW1hZ2VpbnRlcnBvbGF0ZW1ldGhvZHxpbWFnaWNrX2dldGltYWdlaXRlcmF0aW9uc3xpbWFnaWNrX2dldGltYWdlbGVuZ3RofGltYWdpY2tfZ2V0aW1hZ2VtYWdpY2tsaWNlbnNlfGltYWdpY2tfZ2V0aW1hZ2VtYXR0ZXxpbWFnaWNrX2dldGltYWdlbWF0dGVjb2xvcnxpbWFnaWNrX2dldGltYWdlb3JpZW50YXRpb258aW1hZ2lja19nZXRpbWFnZXBhZ2V8aW1hZ2lja19nZXRpbWFnZXBpeGVsY29sb3J8aW1hZ2lja19nZXRpbWFnZXByb2ZpbGV8aW1hZ2lja19nZXRpbWFnZXByb2ZpbGVzfGltYWdpY2tfZ2V0aW1hZ2Vwcm9wZXJ0aWVzfGltYWdpY2tfZ2V0aW1hZ2Vwcm9wZXJ0eXxpbWFnaWNrX2dldGltYWdlcmVkcHJpbWFyeXxpbWFnaWNrX2dldGltYWdlcmVnaW9ufGltYWdpY2tfZ2V0aW1hZ2VyZW5kZXJpbmdpbnRlbnR8aW1hZ2lja19nZXRpbWFnZXJlc29sdXRpb258aW1hZ2lja19nZXRpbWFnZXNibG9ifGltYWdpY2tfZ2V0aW1hZ2VzY2VuZXxpbWFnaWNrX2dldGltYWdlc2lnbmF0dXJlfGltYWdpY2tfZ2V0aW1hZ2VzaXplfGltYWdpY2tfZ2V0aW1hZ2V0aWNrc3BlcnNlY29uZHxpbWFnaWNrX2dldGltYWdldG90YWxpbmtkZW5zaXR5fGltYWdpY2tfZ2V0aW1hZ2V0eXBlfGltYWdpY2tfZ2V0aW1hZ2V1bml0c3xpbWFnaWNrX2dldGltYWdldmlydHVhbHBpeGVsbWV0aG9kfGltYWdpY2tfZ2V0aW1hZ2V3aGl0ZXBvaW50fGltYWdpY2tfZ2V0aW1hZ2V3aWR0aHxpbWFnaWNrX2dldGludGVybGFjZXNjaGVtZXxpbWFnaWNrX2dldGl0ZXJhdG9yaW5kZXh8aW1hZ2lja19nZXRudW1iZXJpbWFnZXN8aW1hZ2lja19nZXRvcHRpb258aW1hZ2lja19nZXRwYWNrYWdlbmFtZXxpbWFnaWNrX2dldHBhZ2V8aW1hZ2lja19nZXRwaXhlbGl0ZXJhdG9yfGltYWdpY2tfZ2V0cGl4ZWxyZWdpb25pdGVyYXRvcnxpbWFnaWNrX2dldHBvaW50c2l6ZXxpbWFnaWNrX2dldHF1YW50dW1kZXB0aHxpbWFnaWNrX2dldHF1YW50dW1yYW5nZXxpbWFnaWNrX2dldHJlbGVhc2VkYXRlfGltYWdpY2tfZ2V0cmVzb3VyY2V8aW1hZ2lja19nZXRyZXNvdXJjZWxpbWl0fGltYWdpY2tfZ2V0c2FtcGxpbmdmYWN0b3JzfGltYWdpY2tfZ2V0c2l6ZXxpbWFnaWNrX2dldHNpemVvZmZzZXR8aW1hZ2lja19nZXR2ZXJzaW9ufGltYWdpY2tfaGFzbmV4dGltYWdlfGltYWdpY2tfaGFzcHJldmlvdXNpbWFnZXxpbWFnaWNrX2lkZW50aWZ5aW1hZ2V8aW1hZ2lja19pbXBsb2RlaW1hZ2V8aW1hZ2lja19sYWJlbGltYWdlfGltYWdpY2tfbGV2ZWxpbWFnZXxpbWFnaWNrX2xpbmVhcnN0cmV0Y2hpbWFnZXxpbWFnaWNrX2xpcXVpZHJlc2NhbGVpbWFnZXxpbWFnaWNrX21hZ25pZnlpbWFnZXxpbWFnaWNrX21hcGltYWdlfGltYWdpY2tfbWF0dGVmbG9vZGZpbGxpbWFnZXxpbWFnaWNrX21lZGlhbmZpbHRlcmltYWdlfGltYWdpY2tfbWVyZ2VpbWFnZWxheWVyc3xpbWFnaWNrX21pbmlmeWltYWdlfGltYWdpY2tfbW9kdWxhdGVpbWFnZXxpbWFnaWNrX21vbnRhZ2VpbWFnZXxpbWFnaWNrX21vcnBoaW1hZ2VzfGltYWdpY2tfbW9zYWljaW1hZ2VzfGltYWdpY2tfbW90aW9uYmx1cmltYWdlfGltYWdpY2tfbmVnYXRlaW1hZ2V8aW1hZ2lja19uZXdpbWFnZXxpbWFnaWNrX25ld3BzZXVkb2ltYWdlfGltYWdpY2tfbmV4dGltYWdlfGltYWdpY2tfbm9ybWFsaXplaW1hZ2V8aW1hZ2lja19vaWxwYWludGltYWdlfGltYWdpY2tfb3BhcXVlcGFpbnRpbWFnZXxpbWFnaWNrX29wdGltaXplaW1hZ2VsYXllcnN8aW1hZ2lja19vcmRlcmVkcG9zdGVyaXplaW1hZ2V8aW1hZ2lja19wYWludGZsb29kZmlsbGltYWdlfGltYWdpY2tfcGFpbnRvcGFxdWVpbWFnZXxpbWFnaWNrX3BhaW50dHJhbnNwYXJlbnRpbWFnZXxpbWFnaWNrX3BpbmdpbWFnZXxpbWFnaWNrX3BpbmdpbWFnZWJsb2J8aW1hZ2lja19waW5naW1hZ2VmaWxlfGltYWdpY2tfcG9sYXJvaWRpbWFnZXxpbWFnaWNrX3Bvc3Rlcml6ZWltYWdlfGltYWdpY2tfcHJldmlld2ltYWdlc3xpbWFnaWNrX3ByZXZpb3VzaW1hZ2V8aW1hZ2lja19wcm9maWxlaW1hZ2V8aW1hZ2lja19xdWFudGl6ZWltYWdlfGltYWdpY2tfcXVhbnRpemVpbWFnZXN8aW1hZ2lja19xdWVyeWZvbnRtZXRyaWNzfGltYWdpY2tfcXVlcnlmb250c3xpbWFnaWNrX3F1ZXJ5Zm9ybWF0c3xpbWFnaWNrX3JhZGlhbGJsdXJpbWFnZXxpbWFnaWNrX3JhaXNlaW1hZ2V8aW1hZ2lja19yYW5kb210aHJlc2hvbGRpbWFnZXxpbWFnaWNrX3JlYWRpbWFnZXxpbWFnaWNrX3JlYWRpbWFnZWJsb2J8aW1hZ2lja19yZWFkaW1hZ2VmaWxlfGltYWdpY2tfcmVjb2xvcmltYWdlfGltYWdpY2tfcmVkdWNlbm9pc2VpbWFnZXxpbWFnaWNrX3JlbW92ZWltYWdlfGltYWdpY2tfcmVtb3ZlaW1hZ2Vwcm9maWxlfGltYWdpY2tfcmVuZGVyfGltYWdpY2tfcmVzYW1wbGVpbWFnZXxpbWFnaWNrX3Jlc2V0aW1hZ2VwYWdlfGltYWdpY2tfcmVzaXplaW1hZ2V8aW1hZ2lja19yb2xsaW1hZ2V8aW1hZ2lja19yb3RhdGVpbWFnZXxpbWFnaWNrX3JvdW5kY29ybmVyc3xpbWFnaWNrX3NhbXBsZWltYWdlfGltYWdpY2tfc2NhbGVpbWFnZXxpbWFnaWNrX3NlcGFyYXRlaW1hZ2VjaGFubmVsfGltYWdpY2tfc2VwaWF0b25laW1hZ2V8aW1hZ2lja19zZXRiYWNrZ3JvdW5kY29sb3J8aW1hZ2lja19zZXRjb2xvcnNwYWNlfGltYWdpY2tfc2V0Y29tcHJlc3Npb258aW1hZ2lja19zZXRjb21wcmVzc2lvbnF1YWxpdHl8aW1hZ2lja19zZXRmaWxlbmFtZXxpbWFnaWNrX3NldGZpcnN0aXRlcmF0b3J8aW1hZ2lja19zZXRmb250fGltYWdpY2tfc2V0Zm9ybWF0fGltYWdpY2tfc2V0Z3Jhdml0eXxpbWFnaWNrX3NldGltYWdlfGltYWdpY2tfc2V0aW1hZ2VhbHBoYWNoYW5uZWx8aW1hZ2lja19zZXRpbWFnZWFydGlmYWN0fGltYWdpY2tfc2V0aW1hZ2ViYWNrZ3JvdW5kY29sb3J8aW1hZ2lja19zZXRpbWFnZWJpYXN8aW1hZ2lja19zZXRpbWFnZWJsdWVwcmltYXJ5fGltYWdpY2tfc2V0aW1hZ2Vib3JkZXJjb2xvcnxpbWFnaWNrX3NldGltYWdlY2hhbm5lbGRlcHRofGltYWdpY2tfc2V0aW1hZ2VjbGlwbWFza3xpbWFnaWNrX3NldGltYWdlY29sb3JtYXBjb2xvcnxpbWFnaWNrX3NldGltYWdlY29sb3JzcGFjZXxpbWFnaWNrX3NldGltYWdlY29tcG9zZXxpbWFnaWNrX3NldGltYWdlY29tcHJlc3Npb258aW1hZ2lja19zZXRpbWFnZWNvbXByZXNzaW9ucXVhbGl0eXxpbWFnaWNrX3NldGltYWdlZGVsYXl8aW1hZ2lja19zZXRpbWFnZWRlcHRofGltYWdpY2tfc2V0aW1hZ2VkaXNwb3NlfGltYWdpY2tfc2V0aW1hZ2VleHRlbnR8aW1hZ2lja19zZXRpbWFnZWZpbGVuYW1lfGltYWdpY2tfc2V0aW1hZ2Vmb3JtYXR8aW1hZ2lja19zZXRpbWFnZWdhbW1hfGltYWdpY2tfc2V0aW1hZ2VncmF2aXR5fGltYWdpY2tfc2V0aW1hZ2VncmVlbnByaW1hcnl8aW1hZ2lja19zZXRpbWFnZWluZGV4fGltYWdpY2tfc2V0aW1hZ2VpbnRlcmxhY2VzY2hlbWV8aW1hZ2lja19zZXRpbWFnZWludGVycG9sYXRlbWV0aG9kfGltYWdpY2tfc2V0aW1hZ2VpdGVyYXRpb25zfGltYWdpY2tfc2V0aW1hZ2VtYXR0ZXxpbWFnaWNrX3NldGltYWdlbWF0dGVjb2xvcnxpbWFnaWNrX3NldGltYWdlb3BhY2l0eXxpbWFnaWNrX3NldGltYWdlb3JpZW50YXRpb258aW1hZ2lja19zZXRpbWFnZXBhZ2V8aW1hZ2lja19zZXRpbWFnZXByb2ZpbGV8aW1hZ2lja19zZXRpbWFnZXByb3BlcnR5fGltYWdpY2tfc2V0aW1hZ2VyZWRwcmltYXJ5fGltYWdpY2tfc2V0aW1hZ2VyZW5kZXJpbmdpbnRlbnR8aW1hZ2lja19zZXRpbWFnZXJlc29sdXRpb258aW1hZ2lja19zZXRpbWFnZXNjZW5lfGltYWdpY2tfc2V0aW1hZ2V0aWNrc3BlcnNlY29uZHxpbWFnaWNrX3NldGltYWdldHlwZXxpbWFnaWNrX3NldGltYWdldW5pdHN8aW1hZ2lja19zZXRpbWFnZXZpcnR1YWxwaXhlbG1ldGhvZHxpbWFnaWNrX3NldGltYWdld2hpdGVwb2ludHxpbWFnaWNrX3NldGludGVybGFjZXNjaGVtZXxpbWFnaWNrX3NldGl0ZXJhdG9yaW5kZXh8aW1hZ2lja19zZXRsYXN0aXRlcmF0b3J8aW1hZ2lja19zZXRvcHRpb258aW1hZ2lja19zZXRwYWdlfGltYWdpY2tfc2V0cG9pbnRzaXplfGltYWdpY2tfc2V0cmVzb2x1dGlvbnxpbWFnaWNrX3NldHJlc291cmNlbGltaXR8aW1hZ2lja19zZXRzYW1wbGluZ2ZhY3RvcnN8aW1hZ2lja19zZXRzaXplfGltYWdpY2tfc2V0c2l6ZW9mZnNldHxpbWFnaWNrX3NldHR5cGV8aW1hZ2lja19zaGFkZWltYWdlfGltYWdpY2tfc2hhZG93aW1hZ2V8aW1hZ2lja19zaGFycGVuaW1hZ2V8aW1hZ2lja19zaGF2ZWltYWdlfGltYWdpY2tfc2hlYXJpbWFnZXxpbWFnaWNrX3NpZ21vaWRhbGNvbnRyYXN0aW1hZ2V8aW1hZ2lja19za2V0Y2hpbWFnZXxpbWFnaWNrX3NvbGFyaXplaW1hZ2V8aW1hZ2lja19zcGxpY2VpbWFnZXxpbWFnaWNrX3NwcmVhZGltYWdlfGltYWdpY2tfc3RlZ2Fub2ltYWdlfGltYWdpY2tfc3RlcmVvaW1hZ2V8aW1hZ2lja19zdHJpcGltYWdlfGltYWdpY2tfc3dpcmxpbWFnZXxpbWFnaWNrX3RleHR1cmVpbWFnZXxpbWFnaWNrX3RocmVzaG9sZGltYWdlfGltYWdpY2tfdGh1bWJuYWlsaW1hZ2V8aW1hZ2lja190aW50aW1hZ2V8aW1hZ2lja190cmFuc2Zvcm1pbWFnZXxpbWFnaWNrX3RyYW5zcGFyZW50cGFpbnRpbWFnZXxpbWFnaWNrX3RyYW5zcG9zZWltYWdlfGltYWdpY2tfdHJhbnN2ZXJzZWltYWdlfGltYWdpY2tfdHJpbWltYWdlfGltYWdpY2tfdW5pcXVlaW1hZ2Vjb2xvcnN8aW1hZ2lja191bnNoYXJwbWFza2ltYWdlfGltYWdpY2tfdmFsaWR8aW1hZ2lja192aWduZXR0ZWltYWdlfGltYWdpY2tfd2F2ZWltYWdlfGltYWdpY2tfd2hpdGV0aHJlc2hvbGRpbWFnZXxpbWFnaWNrX3dyaXRlaW1hZ2V8aW1hZ2lja193cml0ZWltYWdlZmlsZXxpbWFnaWNrX3dyaXRlaW1hZ2VzfGltYWdpY2tfd3JpdGVpbWFnZXNmaWxlfGltYWdpY2tkcmF3fGltYWdpY2tkcmF3X2FmZmluZXxpbWFnaWNrZHJhd19hbm5vdGF0aW9ufGltYWdpY2tkcmF3X2FyY3xpbWFnaWNrZHJhd19iZXppZXJ8aW1hZ2lja2RyYXdfY2lyY2xlfGltYWdpY2tkcmF3X2NsZWFyfGltYWdpY2tkcmF3X2Nsb25lfGltYWdpY2tkcmF3X2NvbG9yfGltYWdpY2tkcmF3X2NvbW1lbnR8aW1hZ2lja2RyYXdfY29tcG9zaXRlfGltYWdpY2tkcmF3X2NvbnN0cnVjdHxpbWFnaWNrZHJhd19kZXN0cm95fGltYWdpY2tkcmF3X2VsbGlwc2V8aW1hZ2lja2RyYXdfZ2V0Y2xpcHBhdGh8aW1hZ2lja2RyYXdfZ2V0Y2xpcHJ1bGV8aW1hZ2lja2RyYXdfZ2V0Y2xpcHVuaXRzfGltYWdpY2tkcmF3X2dldGZpbGxjb2xvcnxpbWFnaWNrZHJhd19nZXRmaWxsb3BhY2l0eXxpbWFnaWNrZHJhd19nZXRmaWxscnVsZXxpbWFnaWNrZHJhd19nZXRmb250fGltYWdpY2tkcmF3X2dldGZvbnRmYW1pbHl8aW1hZ2lja2RyYXdfZ2V0Zm9udHNpemV8aW1hZ2lja2RyYXdfZ2V0Zm9udHN0eWxlfGltYWdpY2tkcmF3X2dldGZvbnR3ZWlnaHR8aW1hZ2lja2RyYXdfZ2V0Z3Jhdml0eXxpbWFnaWNrZHJhd19nZXRzdHJva2VhbnRpYWxpYXN8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlY29sb3J8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlZGFzaGFycmF5fGltYWdpY2tkcmF3X2dldHN0cm9rZWRhc2hvZmZzZXR8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlbGluZWNhcHxpbWFnaWNrZHJhd19nZXRzdHJva2VsaW5lam9pbnxpbWFnaWNrZHJhd19nZXRzdHJva2VtaXRlcmxpbWl0fGltYWdpY2tkcmF3X2dldHN0cm9rZW9wYWNpdHl8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tld2lkdGh8aW1hZ2lja2RyYXdfZ2V0dGV4dGFsaWdubWVudHxpbWFnaWNrZHJhd19nZXR0ZXh0YW50aWFsaWFzfGltYWdpY2tkcmF3X2dldHRleHRkZWNvcmF0aW9ufGltYWdpY2tkcmF3X2dldHRleHRlbmNvZGluZ3xpbWFnaWNrZHJhd19nZXR0ZXh0dW5kZXJjb2xvcnxpbWFnaWNrZHJhd19nZXR2ZWN0b3JncmFwaGljc3xpbWFnaWNrZHJhd19saW5lfGltYWdpY2tkcmF3X21hdHRlfGltYWdpY2tkcmF3X3BhdGhjbG9zZXxpbWFnaWNrZHJhd19wYXRoY3VydmV0b2Fic29sdXRlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVyYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9xdWFkcmF0aWNiZXppZXJyZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRoY3VydmV0b3F1YWRyYXRpY2JlemllcnNtb290aGFic29sdXRlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVyc21vb3RocmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9yZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRoY3VydmV0b3Ntb290aGFic29sdXRlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvc21vb3RocmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aGVsbGlwdGljYXJjYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aGVsbGlwdGljYXJjcmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aGZpbmlzaHxpbWFnaWNrZHJhd19wYXRobGluZXRvYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aGxpbmV0b2hvcml6b250YWxhYnNvbHV0ZXxpbWFnaWNrZHJhd19wYXRobGluZXRvaG9yaXpvbnRhbHJlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhsaW5ldG9yZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRobGluZXRvdmVydGljYWxhYnNvbHV0ZXxpbWFnaWNrZHJhd19wYXRobGluZXRvdmVydGljYWxyZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRobW92ZXRvYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aG1vdmV0b3JlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhzdGFydHxpbWFnaWNrZHJhd19wb2ludHxpbWFnaWNrZHJhd19wb2x5Z29ufGltYWdpY2tkcmF3X3BvbHlsaW5lfGltYWdpY2tkcmF3X3BvcHxpbWFnaWNrZHJhd19wb3BjbGlwcGF0aHxpbWFnaWNrZHJhd19wb3BkZWZzfGltYWdpY2tkcmF3X3BvcHBhdHRlcm58aW1hZ2lja2RyYXdfcHVzaHxpbWFnaWNrZHJhd19wdXNoY2xpcHBhdGh8aW1hZ2lja2RyYXdfcHVzaGRlZnN8aW1hZ2lja2RyYXdfcHVzaHBhdHRlcm58aW1hZ2lja2RyYXdfcmVjdGFuZ2xlfGltYWdpY2tkcmF3X3JlbmRlcnxpbWFnaWNrZHJhd19yb3RhdGV8aW1hZ2lja2RyYXdfcm91bmRyZWN0YW5nbGV8aW1hZ2lja2RyYXdfc2NhbGV8aW1hZ2lja2RyYXdfc2V0Y2xpcHBhdGh8aW1hZ2lja2RyYXdfc2V0Y2xpcHJ1bGV8aW1hZ2lja2RyYXdfc2V0Y2xpcHVuaXRzfGltYWdpY2tkcmF3X3NldGZpbGxhbHBoYXxpbWFnaWNrZHJhd19zZXRmaWxsY29sb3J8aW1hZ2lja2RyYXdfc2V0ZmlsbG9wYWNpdHl8aW1hZ2lja2RyYXdfc2V0ZmlsbHBhdHRlcm51cmx8aW1hZ2lja2RyYXdfc2V0ZmlsbHJ1bGV8aW1hZ2lja2RyYXdfc2V0Zm9udHxpbWFnaWNrZHJhd19zZXRmb250ZmFtaWx5fGltYWdpY2tkcmF3X3NldGZvbnRzaXplfGltYWdpY2tkcmF3X3NldGZvbnRzdHJldGNofGltYWdpY2tkcmF3X3NldGZvbnRzdHlsZXxpbWFnaWNrZHJhd19zZXRmb250d2VpZ2h0fGltYWdpY2tkcmF3X3NldGdyYXZpdHl8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlYWxwaGF8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlYW50aWFsaWFzfGltYWdpY2tkcmF3X3NldHN0cm9rZWNvbG9yfGltYWdpY2tkcmF3X3NldHN0cm9rZWRhc2hhcnJheXxpbWFnaWNrZHJhd19zZXRzdHJva2VkYXNob2Zmc2V0fGltYWdpY2tkcmF3X3NldHN0cm9rZWxpbmVjYXB8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlbGluZWpvaW58aW1hZ2lja2RyYXdfc2V0c3Ryb2tlbWl0ZXJsaW1pdHxpbWFnaWNrZHJhd19zZXRzdHJva2VvcGFjaXR5fGltYWdpY2tkcmF3X3NldHN0cm9rZXBhdHRlcm51cmx8aW1hZ2lja2RyYXdfc2V0c3Ryb2tld2lkdGh8aW1hZ2lja2RyYXdfc2V0dGV4dGFsaWdubWVudHxpbWFnaWNrZHJhd19zZXR0ZXh0YW50aWFsaWFzfGltYWdpY2tkcmF3X3NldHRleHRkZWNvcmF0aW9ufGltYWdpY2tkcmF3X3NldHRleHRlbmNvZGluZ3xpbWFnaWNrZHJhd19zZXR0ZXh0dW5kZXJjb2xvcnxpbWFnaWNrZHJhd19zZXR2ZWN0b3JncmFwaGljc3xpbWFnaWNrZHJhd19zZXR2aWV3Ym94fGltYWdpY2tkcmF3X3NrZXd4fGltYWdpY2tkcmF3X3NrZXd5fGltYWdpY2tkcmF3X3RyYW5zbGF0ZXxpbWFnaWNrcGl4ZWx8aW1hZ2lja3BpeGVsX2NsZWFyfGltYWdpY2twaXhlbF9jb25zdHJ1Y3R8aW1hZ2lja3BpeGVsX2Rlc3Ryb3l8aW1hZ2lja3BpeGVsX2dldGNvbG9yfGltYWdpY2twaXhlbF9nZXRjb2xvcmFzc3RyaW5nfGltYWdpY2twaXhlbF9nZXRjb2xvcmNvdW50fGltYWdpY2twaXhlbF9nZXRjb2xvcnZhbHVlfGltYWdpY2twaXhlbF9nZXRoc2x8aW1hZ2lja3BpeGVsX2lzc2ltaWxhcnxpbWFnaWNrcGl4ZWxfc2V0Y29sb3J8aW1hZ2lja3BpeGVsX3NldGNvbG9ydmFsdWV8aW1hZ2lja3BpeGVsX3NldGhzbHxpbWFnaWNrcGl4ZWxpdGVyYXRvcnxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9jbGVhcnxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9jb25zdHJ1Y3R8aW1hZ2lja3BpeGVsaXRlcmF0b3JfZGVzdHJveXxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRjdXJyZW50aXRlcmF0b3Jyb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3JfZ2V0aXRlcmF0b3Jyb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3JfZ2V0bmV4dGl0ZXJhdG9ycm93fGltYWdpY2twaXhlbGl0ZXJhdG9yX2dldHByZXZpb3VzaXRlcmF0b3Jyb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3JfbmV3cGl4ZWxpdGVyYXRvcnxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9uZXdwaXhlbHJlZ2lvbml0ZXJhdG9yfGltYWdpY2twaXhlbGl0ZXJhdG9yX3Jlc2V0aXRlcmF0b3J8aW1hZ2lja3BpeGVsaXRlcmF0b3Jfc2V0aXRlcmF0b3JmaXJzdHJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9zZXRpdGVyYXRvcmxhc3Ryb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3Jfc2V0aXRlcmF0b3Jyb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3Jfc3luY2l0ZXJhdG9yfGltYXBfOGJpdHxpbWFwX2FsZXJ0c3xpbWFwX2FwcGVuZHxpbWFwX2Jhc2U2NHxpbWFwX2JpbmFyeXxpbWFwX2JvZHl8aW1hcF9ib2R5c3RydWN0fGltYXBfY2hlY2t8aW1hcF9jbGVhcmZsYWdfZnVsbHxpbWFwX2Nsb3NlfGltYXBfY3JlYXRlfGltYXBfY3JlYXRlbWFpbGJveHxpbWFwX2RlbGV0ZXxpbWFwX2RlbGV0ZW1haWxib3h8aW1hcF9lcnJvcnN8aW1hcF9leHB1bmdlfGltYXBfZmV0Y2hfb3ZlcnZpZXd8aW1hcF9mZXRjaGJvZHl8aW1hcF9mZXRjaGhlYWRlcnxpbWFwX2ZldGNobWltZXxpbWFwX2ZldGNoc3RydWN0dXJlfGltYXBfZmV0Y2h0ZXh0fGltYXBfZ2N8aW1hcF9nZXRfcXVvdGF8aW1hcF9nZXRfcXVvdGFyb290fGltYXBfZ2V0YWNsfGltYXBfZ2V0bWFpbGJveGVzfGltYXBfZ2V0c3Vic2NyaWJlZHxpbWFwX2hlYWRlcnxpbWFwX2hlYWRlcmluZm98aW1hcF9oZWFkZXJzfGltYXBfbGFzdF9lcnJvcnxpbWFwX2xpc3R8aW1hcF9saXN0bWFpbGJveHxpbWFwX2xpc3RzY2FufGltYXBfbGlzdHN1YnNjcmliZWR8aW1hcF9sc3VifGltYXBfbWFpbHxpbWFwX21haWxfY29tcG9zZXxpbWFwX21haWxfY29weXxpbWFwX21haWxfbW92ZXxpbWFwX21haWxib3htc2dpbmZvfGltYXBfbWltZV9oZWFkZXJfZGVjb2RlfGltYXBfbXNnbm98aW1hcF9udW1fbXNnfGltYXBfbnVtX3JlY2VudHxpbWFwX29wZW58aW1hcF9waW5nfGltYXBfcXByaW50fGltYXBfcmVuYW1lfGltYXBfcmVuYW1lbWFpbGJveHxpbWFwX3Jlb3BlbnxpbWFwX3JmYzgyMl9wYXJzZV9hZHJsaXN0fGltYXBfcmZjODIyX3BhcnNlX2hlYWRlcnN8aW1hcF9yZmM4MjJfd3JpdGVfYWRkcmVzc3xpbWFwX3NhdmVib2R5fGltYXBfc2NhbnxpbWFwX3NjYW5tYWlsYm94fGltYXBfc2VhcmNofGltYXBfc2V0X3F1b3RhfGltYXBfc2V0YWNsfGltYXBfc2V0ZmxhZ19mdWxsfGltYXBfc29ydHxpbWFwX3N0YXR1c3xpbWFwX3N1YnNjcmliZXxpbWFwX3RocmVhZHxpbWFwX3RpbWVvdXR8aW1hcF91aWR8aW1hcF91bmRlbGV0ZXxpbWFwX3Vuc3Vic2NyaWJlfGltYXBfdXRmN19kZWNvZGV8aW1hcF91dGY3X2VuY29kZXxpbWFwX3V0Zjh8aW1wbGVtZW50c2ludGVyZmFjZXxpbXBsb2RlfGltcG9ydF9yZXF1ZXN0X3ZhcmlhYmxlc3xpbl9hcnJheXxpbmNsdWRlfGluY2x1ZGVfb25jZXxpbmNsdWVkX2dldF9kYXRhfGluZXRfbnRvcHxpbmV0X3B0b258aW5maW5pdGVpdGVyYXRvcnxpbmdyZXNfYXV0b2NvbW1pdHxpbmdyZXNfYXV0b2NvbW1pdF9zdGF0ZXxpbmdyZXNfY2hhcnNldHxpbmdyZXNfY2xvc2V8aW5ncmVzX2NvbW1pdHxpbmdyZXNfY29ubmVjdHxpbmdyZXNfY3Vyc29yfGluZ3Jlc19lcnJub3xpbmdyZXNfZXJyb3J8aW5ncmVzX2VycnNxbHN0YXRlfGluZ3Jlc19lc2NhcGVfc3RyaW5nfGluZ3Jlc19leGVjdXRlfGluZ3Jlc19mZXRjaF9hcnJheXxpbmdyZXNfZmV0Y2hfYXNzb2N8aW5ncmVzX2ZldGNoX29iamVjdHxpbmdyZXNfZmV0Y2hfcHJvY19yZXR1cm58aW5ncmVzX2ZldGNoX3Jvd3xpbmdyZXNfZmllbGRfbGVuZ3RofGluZ3Jlc19maWVsZF9uYW1lfGluZ3Jlc19maWVsZF9udWxsYWJsZXxpbmdyZXNfZmllbGRfcHJlY2lzaW9ufGluZ3Jlc19maWVsZF9zY2FsZXxpbmdyZXNfZmllbGRfdHlwZXxpbmdyZXNfZnJlZV9yZXN1bHR8aW5ncmVzX25leHRfZXJyb3J8aW5ncmVzX251bV9maWVsZHN8aW5ncmVzX251bV9yb3dzfGluZ3Jlc19wY29ubmVjdHxpbmdyZXNfcHJlcGFyZXxpbmdyZXNfcXVlcnl8aW5ncmVzX3Jlc3VsdF9zZWVrfGluZ3Jlc19yb2xsYmFja3xpbmdyZXNfc2V0X2Vudmlyb25tZW50fGluZ3Jlc191bmJ1ZmZlcmVkX3F1ZXJ5fGluaV9hbHRlcnxpbmlfZ2V0fGluaV9nZXRfYWxsfGluaV9yZXN0b3JlfGluaV9zZXR8aW5uYW1lc3BhY2V8aW5vdGlmeV9hZGRfd2F0Y2h8aW5vdGlmeV9pbml0fGlub3RpZnlfcXVldWVfbGVufGlub3RpZnlfcmVhZHxpbm90aWZ5X3JtX3dhdGNofGludGVyZmFjZV9leGlzdHN8aW50bF9lcnJvcl9uYW1lfGludGxfZ2V0X2Vycm9yX2NvZGV8aW50bF9nZXRfZXJyb3JfbWVzc2FnZXxpbnRsX2lzX2ZhaWx1cmV8aW50bGRhdGVmb3JtYXR0ZXJ8aW50dmFsfGludmFsaWRhcmd1bWVudGV4Y2VwdGlvbnxpbnZva2V8aW52b2tlYXJnc3xpcDJsb25nfGlwdGNlbWJlZHxpcHRjcGFyc2V8aXNfYXxpc19hcnJheXxpc19ib29sfGlzX2NhbGxhYmxlfGlzX2Rpcnxpc19kb3VibGV8aXNfZXhlY3V0YWJsZXxpc19maWxlfGlzX2Zpbml0ZXxpc19mbG9hdHxpc19pbmZpbml0ZXxpc19pbnR8aXNfaW50ZWdlcnxpc19saW5rfGlzX2xvbmd8aXNfbmFufGlzX251bGx8aXNfbnVtZXJpY3xpc19vYmplY3R8aXNfcmVhZGFibGV8aXNfcmVhbHxpc19yZXNvdXJjZXxpc19zY2FsYXJ8aXNfc29hcF9mYXVsdHxpc19zdHJpbmd8aXNfc3ViY2xhc3Nfb2Z8aXNfdXBsb2FkZWRfZmlsZXxpc193cml0YWJsZXxpc193cml0ZWFibGV8aXNhYnN0cmFjdHxpc2Nsb25lYWJsZXxpc2Rpc2FibGVkfGlzZmluYWx8aXNpbnN0YW5jZXxpc2luc3RhbnRpYWJsZXxpc2ludGVyZmFjZXxpc2ludGVybmFsfGlzaXRlcmF0ZWFibGV8aXNzZXR8aXNzdWJjbGFzc29mfGlzdXNlcmRlZmluZWR8aXRlcmF0b3J8aXRlcmF0b3JfYXBwbHl8aXRlcmF0b3JfY291bnR8aXRlcmF0b3JfdG9fYXJyYXl8aXRlcmF0b3JhZ2dyZWdhdGV8aXRlcmF0b3JpdGVyYXRvcnxqYXZhX2xhc3RfZXhjZXB0aW9uX2NsZWFyfGphdmFfbGFzdF9leGNlcHRpb25fZ2V0fGpkZGF5b2Z3ZWVrfGpkbW9udGhuYW1lfGpkdG9mcmVuY2h8amR0b2dyZWdvcmlhbnxqZHRvamV3aXNofGpkdG9qdWxpYW58amR0b3VuaXh8amV3aXNodG9qZHxqb2lufGpwZWcyd2JtcHxqc29uX2RlY29kZXxqc29uX2VuY29kZXxqc29uX2xhc3RfZXJyb3J8anNvbnNlcmlhbGl6YWJsZXxqdWR5fGp1ZHlfdHlwZXxqdWR5X3ZlcnNpb258anVsaWFudG9qZHxrYWRtNV9jaHBhc3NfcHJpbmNpcGFsfGthZG01X2NyZWF0ZV9wcmluY2lwYWx8a2FkbTVfZGVsZXRlX3ByaW5jaXBhbHxrYWRtNV9kZXN0cm95fGthZG01X2ZsdXNofGthZG01X2dldF9wb2xpY2llc3xrYWRtNV9nZXRfcHJpbmNpcGFsfGthZG01X2dldF9wcmluY2lwYWxzfGthZG01X2luaXRfd2l0aF9wYXNzd29yZHxrYWRtNV9tb2RpZnlfcHJpbmNpcGFsfGtleXxrcnNvcnR8a3NvcnR8bGNmaXJzdHxsY2dfdmFsdWV8bGNoZ3JwfGxjaG93bnxsZGFwXzg4NTlfdG9fdDYxfGxkYXBfYWRkfGxkYXBfYmluZHxsZGFwX2Nsb3NlfGxkYXBfY29tcGFyZXxsZGFwX2Nvbm5lY3R8bGRhcF9jb3VudF9lbnRyaWVzfGxkYXBfZGVsZXRlfGxkYXBfZG4ydWZufGxkYXBfZXJyMnN0cnxsZGFwX2Vycm5vfGxkYXBfZXJyb3J8bGRhcF9leHBsb2RlX2RufGxkYXBfZmlyc3RfYXR0cmlidXRlfGxkYXBfZmlyc3RfZW50cnl8bGRhcF9maXJzdF9yZWZlcmVuY2V8bGRhcF9mcmVlX3Jlc3VsdHxsZGFwX2dldF9hdHRyaWJ1dGVzfGxkYXBfZ2V0X2RufGxkYXBfZ2V0X2VudHJpZXN8bGRhcF9nZXRfb3B0aW9ufGxkYXBfZ2V0X3ZhbHVlc3xsZGFwX2dldF92YWx1ZXNfbGVufGxkYXBfbGlzdHxsZGFwX21vZF9hZGR8bGRhcF9tb2RfZGVsfGxkYXBfbW9kX3JlcGxhY2V8bGRhcF9tb2RpZnl8bGRhcF9uZXh0X2F0dHJpYnV0ZXxsZGFwX25leHRfZW50cnl8bGRhcF9uZXh0X3JlZmVyZW5jZXxsZGFwX3BhcnNlX3JlZmVyZW5jZXxsZGFwX3BhcnNlX3Jlc3VsdHxsZGFwX3JlYWR8bGRhcF9yZW5hbWV8bGRhcF9zYXNsX2JpbmR8bGRhcF9zZWFyY2h8bGRhcF9zZXRfb3B0aW9ufGxkYXBfc2V0X3JlYmluZF9wcm9jfGxkYXBfc29ydHxsZGFwX3N0YXJ0X3Rsc3xsZGFwX3Q2MV90b184ODU5fGxkYXBfdW5iaW5kfGxlbmd0aGV4Y2VwdGlvbnxsZXZlbnNodGVpbnxsaWJ4bWxfY2xlYXJfZXJyb3JzfGxpYnhtbF9kaXNhYmxlX2VudGl0eV9sb2FkZXJ8bGlieG1sX2dldF9lcnJvcnN8bGlieG1sX2dldF9sYXN0X2Vycm9yfGxpYnhtbF9zZXRfc3RyZWFtc19jb250ZXh0fGxpYnhtbF91c2VfaW50ZXJuYWxfZXJyb3JzfGxpYnhtbGVycm9yfGxpbWl0aXRlcmF0b3J8bGlua3xsaW5raW5mb3xsaXN0fGxvY2FsZXxsb2NhbGVjb252fGxvY2FsdGltZXxsb2d8bG9nMTB8bG9nMXB8bG9naWNleGNlcHRpb258bG9uZzJpcHxsc3RhdHxsdHJpbXxsemZfY29tcHJlc3N8bHpmX2RlY29tcHJlc3N8bHpmX29wdGltaXplZF9mb3J8bV9jaGVja3N0YXR1c3xtX2NvbXBsZXRlYXV0aG9yaXphdGlvbnN8bV9jb25uZWN0fG1fY29ubmVjdGlvbmVycm9yfG1fZGVsZXRldHJhbnN8bV9kZXN0cm95Y29ubnxtX2Rlc3Ryb3llbmdpbmV8bV9nZXRjZWxsfG1fZ2V0Y2VsbGJ5bnVtfG1fZ2V0Y29tbWFkZWxpbWl0ZWR8bV9nZXRoZWFkZXJ8bV9pbml0Y29ubnxtX2luaXRlbmdpbmV8bV9pc2NvbW1hZGVsaW1pdGVkfG1fbWF4Y29ubnRpbWVvdXR8bV9tb25pdG9yfG1fbnVtY29sdW1uc3xtX251bXJvd3N8bV9wYXJzZWNvbW1hZGVsaW1pdGVkfG1fcmVzcG9uc2VrZXlzfG1fcmVzcG9uc2VwYXJhbXxtX3JldHVybnN0YXR1c3xtX3NldGJsb2NraW5nfG1fc2V0ZHJvcGZpbGV8bV9zZXRpcHxtX3NldHNzbHxtX3NldHNzbF9jYWZpbGV8bV9zZXRzc2xfZmlsZXN8bV9zZXR0aW1lb3V0fG1fc3NsY2VydF9nZW5faGFzaHxtX3RyYW5zYWN0aW9uc3NlbnR8bV90cmFuc2lucXVldWV8bV90cmFuc2tleXZhbHxtX3RyYW5zbmV3fG1fdHJhbnNzZW5kfG1fdXdhaXR8bV92YWxpZGF0ZWlkZW50aWZpZXJ8bV92ZXJpZnljb25uZWN0aW9ufG1fdmVyaWZ5c3NsY2VydHxtYWdpY19xdW90ZXNfcnVudGltZXxtYWlsfG1haWxwYXJzZV9kZXRlcm1pbmVfYmVzdF94ZmVyX2VuY29kaW5nfG1haWxwYXJzZV9tc2dfY3JlYXRlfG1haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0fG1haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0X2ZpbGV8bWFpbHBhcnNlX21zZ19leHRyYWN0X3dob2xlX3BhcnRfZmlsZXxtYWlscGFyc2VfbXNnX2ZyZWV8bWFpbHBhcnNlX21zZ19nZXRfcGFydHxtYWlscGFyc2VfbXNnX2dldF9wYXJ0X2RhdGF8bWFpbHBhcnNlX21zZ19nZXRfc3RydWN0dXJlfG1haWxwYXJzZV9tc2dfcGFyc2V8bWFpbHBhcnNlX21zZ19wYXJzZV9maWxlfG1haWxwYXJzZV9yZmM4MjJfcGFyc2VfYWRkcmVzc2VzfG1haWxwYXJzZV9zdHJlYW1fZW5jb2RlfG1haWxwYXJzZV91dWRlY29kZV9hbGx8bWFpbnxtYXh8bWF4ZGJfYWZmZWN0ZWRfcm93c3xtYXhkYl9hdXRvY29tbWl0fG1heGRiX2JpbmRfcGFyYW18bWF4ZGJfYmluZF9yZXN1bHR8bWF4ZGJfY2hhbmdlX3VzZXJ8bWF4ZGJfY2hhcmFjdGVyX3NldF9uYW1lfG1heGRiX2NsaWVudF9lbmNvZGluZ3xtYXhkYl9jbG9zZXxtYXhkYl9jbG9zZV9sb25nX2RhdGF8bWF4ZGJfY29tbWl0fG1heGRiX2Nvbm5lY3R8bWF4ZGJfY29ubmVjdF9lcnJub3xtYXhkYl9jb25uZWN0X2Vycm9yfG1heGRiX2RhdGFfc2Vla3xtYXhkYl9kZWJ1Z3xtYXhkYl9kaXNhYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG1heGRiX2Rpc2FibGVfcnBsX3BhcnNlfG1heGRiX2R1bXBfZGVidWdfaW5mb3xtYXhkYl9lbWJlZGRlZF9jb25uZWN0fG1heGRiX2VuYWJsZV9yZWFkc19mcm9tX21hc3RlcnxtYXhkYl9lbmFibGVfcnBsX3BhcnNlfG1heGRiX2Vycm5vfG1heGRiX2Vycm9yfG1heGRiX2VzY2FwZV9zdHJpbmd8bWF4ZGJfZXhlY3V0ZXxtYXhkYl9mZXRjaHxtYXhkYl9mZXRjaF9hcnJheXxtYXhkYl9mZXRjaF9hc3NvY3xtYXhkYl9mZXRjaF9maWVsZHxtYXhkYl9mZXRjaF9maWVsZF9kaXJlY3R8bWF4ZGJfZmV0Y2hfZmllbGRzfG1heGRiX2ZldGNoX2xlbmd0aHN8bWF4ZGJfZmV0Y2hfb2JqZWN0fG1heGRiX2ZldGNoX3Jvd3xtYXhkYl9maWVsZF9jb3VudHxtYXhkYl9maWVsZF9zZWVrfG1heGRiX2ZpZWxkX3RlbGx8bWF4ZGJfZnJlZV9yZXN1bHR8bWF4ZGJfZ2V0X2NsaWVudF9pbmZvfG1heGRiX2dldF9jbGllbnRfdmVyc2lvbnxtYXhkYl9nZXRfaG9zdF9pbmZvfG1heGRiX2dldF9tZXRhZGF0YXxtYXhkYl9nZXRfcHJvdG9faW5mb3xtYXhkYl9nZXRfc2VydmVyX2luZm98bWF4ZGJfZ2V0X3NlcnZlcl92ZXJzaW9ufG1heGRiX2luZm98bWF4ZGJfaW5pdHxtYXhkYl9pbnNlcnRfaWR8bWF4ZGJfa2lsbHxtYXhkYl9tYXN0ZXJfcXVlcnl8bWF4ZGJfbW9yZV9yZXN1bHRzfG1heGRiX211bHRpX3F1ZXJ5fG1heGRiX25leHRfcmVzdWx0fG1heGRiX251bV9maWVsZHN8bWF4ZGJfbnVtX3Jvd3N8bWF4ZGJfb3B0aW9uc3xtYXhkYl9wYXJhbV9jb3VudHxtYXhkYl9waW5nfG1heGRiX3ByZXBhcmV8bWF4ZGJfcXVlcnl8bWF4ZGJfcmVhbF9jb25uZWN0fG1heGRiX3JlYWxfZXNjYXBlX3N0cmluZ3xtYXhkYl9yZWFsX3F1ZXJ5fG1heGRiX3JlcG9ydHxtYXhkYl9yb2xsYmFja3xtYXhkYl9ycGxfcGFyc2VfZW5hYmxlZHxtYXhkYl9ycGxfcHJvYmV8bWF4ZGJfcnBsX3F1ZXJ5X3R5cGV8bWF4ZGJfc2VsZWN0X2RifG1heGRiX3NlbmRfbG9uZ19kYXRhfG1heGRiX3NlbmRfcXVlcnl8bWF4ZGJfc2VydmVyX2VuZHxtYXhkYl9zZXJ2ZXJfaW5pdHxtYXhkYl9zZXRfb3B0fG1heGRiX3NxbHN0YXRlfG1heGRiX3NzbF9zZXR8bWF4ZGJfc3RhdHxtYXhkYl9zdG10X2FmZmVjdGVkX3Jvd3N8bWF4ZGJfc3RtdF9iaW5kX3BhcmFtfG1heGRiX3N0bXRfYmluZF9yZXN1bHR8bWF4ZGJfc3RtdF9jbG9zZXxtYXhkYl9zdG10X2Nsb3NlX2xvbmdfZGF0YXxtYXhkYl9zdG10X2RhdGFfc2Vla3xtYXhkYl9zdG10X2Vycm5vfG1heGRiX3N0bXRfZXJyb3J8bWF4ZGJfc3RtdF9leGVjdXRlfG1heGRiX3N0bXRfZmV0Y2h8bWF4ZGJfc3RtdF9mcmVlX3Jlc3VsdHxtYXhkYl9zdG10X2luaXR8bWF4ZGJfc3RtdF9udW1fcm93c3xtYXhkYl9zdG10X3BhcmFtX2NvdW50fG1heGRiX3N0bXRfcHJlcGFyZXxtYXhkYl9zdG10X3Jlc2V0fG1heGRiX3N0bXRfcmVzdWx0X21ldGFkYXRhfG1heGRiX3N0bXRfc2VuZF9sb25nX2RhdGF8bWF4ZGJfc3RtdF9zcWxzdGF0ZXxtYXhkYl9zdG10X3N0b3JlX3Jlc3VsdHxtYXhkYl9zdG9yZV9yZXN1bHR8bWF4ZGJfdGhyZWFkX2lkfG1heGRiX3RocmVhZF9zYWZlfG1heGRiX3VzZV9yZXN1bHR8bWF4ZGJfd2FybmluZ19jb3VudHxtYl9jaGVja19lbmNvZGluZ3xtYl9jb252ZXJ0X2Nhc2V8bWJfY29udmVydF9lbmNvZGluZ3xtYl9jb252ZXJ0X2thbmF8bWJfY29udmVydF92YXJpYWJsZXN8bWJfZGVjb2RlX21pbWVoZWFkZXJ8bWJfZGVjb2RlX251bWVyaWNlbnRpdHl8bWJfZGV0ZWN0X2VuY29kaW5nfG1iX2RldGVjdF9vcmRlcnxtYl9lbmNvZGVfbWltZWhlYWRlcnxtYl9lbmNvZGVfbnVtZXJpY2VudGl0eXxtYl9lbmNvZGluZ19hbGlhc2VzfG1iX2VyZWd8bWJfZXJlZ19tYXRjaHxtYl9lcmVnX3JlcGxhY2V8bWJfZXJlZ19zZWFyY2h8bWJfZXJlZ19zZWFyY2hfZ2V0cG9zfG1iX2VyZWdfc2VhcmNoX2dldHJlZ3N8bWJfZXJlZ19zZWFyY2hfaW5pdHxtYl9lcmVnX3NlYXJjaF9wb3N8bWJfZXJlZ19zZWFyY2hfcmVnc3xtYl9lcmVnX3NlYXJjaF9zZXRwb3N8bWJfZXJlZ2l8bWJfZXJlZ2lfcmVwbGFjZXxtYl9nZXRfaW5mb3xtYl9odHRwX2lucHV0fG1iX2h0dHBfb3V0cHV0fG1iX2ludGVybmFsX2VuY29kaW5nfG1iX2xhbmd1YWdlfG1iX2xpc3RfZW5jb2RpbmdzfG1iX291dHB1dF9oYW5kbGVyfG1iX3BhcnNlX3N0cnxtYl9wcmVmZXJyZWRfbWltZV9uYW1lfG1iX3JlZ2V4X2VuY29kaW5nfG1iX3JlZ2V4X3NldF9vcHRpb25zfG1iX3NlbmRfbWFpbHxtYl9zcGxpdHxtYl9zdHJjdXR8bWJfc3RyaW13aWR0aHxtYl9zdHJpcG9zfG1iX3N0cmlzdHJ8bWJfc3RybGVufG1iX3N0cnBvc3xtYl9zdHJyY2hyfG1iX3N0cnJpY2hyfG1iX3N0cnJpcG9zfG1iX3N0cnJwb3N8bWJfc3Ryc3RyfG1iX3N0cnRvbG93ZXJ8bWJfc3RydG91cHBlcnxtYl9zdHJ3aWR0aHxtYl9zdWJzdGl0dXRlX2NoYXJhY3RlcnxtYl9zdWJzdHJ8bWJfc3Vic3RyX2NvdW50fG1jcnlwdF9jYmN8bWNyeXB0X2NmYnxtY3J5cHRfY3JlYXRlX2l2fG1jcnlwdF9kZWNyeXB0fG1jcnlwdF9lY2J8bWNyeXB0X2VuY19nZXRfYWxnb3JpdGhtc19uYW1lfG1jcnlwdF9lbmNfZ2V0X2Jsb2NrX3NpemV8bWNyeXB0X2VuY19nZXRfaXZfc2l6ZXxtY3J5cHRfZW5jX2dldF9rZXlfc2l6ZXxtY3J5cHRfZW5jX2dldF9tb2Rlc19uYW1lfG1jcnlwdF9lbmNfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXN8bWNyeXB0X2VuY19pc19ibG9ja19hbGdvcml0aG18bWNyeXB0X2VuY19pc19ibG9ja19hbGdvcml0aG1fbW9kZXxtY3J5cHRfZW5jX2lzX2Jsb2NrX21vZGV8bWNyeXB0X2VuY19zZWxmX3Rlc3R8bWNyeXB0X2VuY3J5cHR8bWNyeXB0X2dlbmVyaWN8bWNyeXB0X2dlbmVyaWNfZGVpbml0fG1jcnlwdF9nZW5lcmljX2VuZHxtY3J5cHRfZ2VuZXJpY19pbml0fG1jcnlwdF9nZXRfYmxvY2tfc2l6ZXxtY3J5cHRfZ2V0X2NpcGhlcl9uYW1lfG1jcnlwdF9nZXRfaXZfc2l6ZXxtY3J5cHRfZ2V0X2tleV9zaXplfG1jcnlwdF9saXN0X2FsZ29yaXRobXN8bWNyeXB0X2xpc3RfbW9kZXN8bWNyeXB0X21vZHVsZV9jbG9zZXxtY3J5cHRfbW9kdWxlX2dldF9hbGdvX2Jsb2NrX3NpemV8bWNyeXB0X21vZHVsZV9nZXRfYWxnb19rZXlfc2l6ZXxtY3J5cHRfbW9kdWxlX2dldF9zdXBwb3J0ZWRfa2V5X3NpemVzfG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfYWxnb3JpdGhtfG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfYWxnb3JpdGhtX21vZGV8bWNyeXB0X21vZHVsZV9pc19ibG9ja19tb2RlfG1jcnlwdF9tb2R1bGVfb3BlbnxtY3J5cHRfbW9kdWxlX3NlbGZfdGVzdHxtY3J5cHRfb2ZifG1kNXxtZDVfZmlsZXxtZGVjcnlwdF9nZW5lcmljfG1lbWNhY2hlfG1lbWNhY2hlX2RlYnVnfG1lbWNhY2hlZHxtZW1vcnlfZ2V0X3BlYWtfdXNhZ2V8bWVtb3J5X2dldF91c2FnZXxtZXNzYWdlZm9ybWF0dGVyfG1ldGFwaG9uZXxtZXRob2RfZXhpc3RzfG1oYXNofG1oYXNoX2NvdW50fG1oYXNoX2dldF9ibG9ja19zaXplfG1oYXNoX2dldF9oYXNoX25hbWV8bWhhc2hfa2V5Z2VuX3Mya3xtaWNyb3RpbWV8bWltZV9jb250ZW50X3R5cGV8bWlufG1pbmdfa2V5cHJlc3N8bWluZ19zZXRjdWJpY3RocmVzaG9sZHxtaW5nX3NldHNjYWxlfG1pbmdfc2V0c3dmY29tcHJlc3Npb258bWluZ191c2Vjb25zdGFudHN8bWluZ191c2Vzd2Z2ZXJzaW9ufG1rZGlyfG1rdGltZXxtb25leV9mb3JtYXR8bW9uZ298bW9uZ29iaW5kYXRhfG1vbmdvY29kZXxtb25nb2NvbGxlY3Rpb258bW9uZ29jb25uZWN0aW9uZXhjZXB0aW9ufG1vbmdvY3Vyc29yfG1vbmdvY3Vyc29yZXhjZXB0aW9ufG1vbmdvY3Vyc29ydGltZW91dGV4Y2VwdGlvbnxtb25nb2RhdGV8bW9uZ29kYnxtb25nb2RicmVmfG1vbmdvZXhjZXB0aW9ufG1vbmdvZ3JpZGZzfG1vbmdvZ3JpZGZzY3Vyc29yfG1vbmdvZ3JpZGZzZXhjZXB0aW9ufG1vbmdvZ3JpZGZzZmlsZXxtb25nb2lkfG1vbmdvaW50MzJ8bW9uZ29pbnQ2NHxtb25nb21heGtleXxtb25nb21pbmtleXxtb25nb3JlZ2V4fG1vbmdvdGltZXN0YW1wfG1vdmVfdXBsb2FkZWRfZmlsZXxtcGVnZmlsZXxtcXNlcmllc19iYWNrfG1xc2VyaWVzX2JlZ2lufG1xc2VyaWVzX2Nsb3NlfG1xc2VyaWVzX2NtaXR8bXFzZXJpZXNfY29ubnxtcXNlcmllc19jb25ueHxtcXNlcmllc19kaXNjfG1xc2VyaWVzX2dldHxtcXNlcmllc19pbnF8bXFzZXJpZXNfb3BlbnxtcXNlcmllc19wdXR8bXFzZXJpZXNfcHV0MXxtcXNlcmllc19zZXR8bXFzZXJpZXNfc3RyZXJyb3J8bXNlc3Npb25fY29ubmVjdHxtc2Vzc2lvbl9jb3VudHxtc2Vzc2lvbl9jcmVhdGV8bXNlc3Npb25fZGVzdHJveXxtc2Vzc2lvbl9kaXNjb25uZWN0fG1zZXNzaW9uX2ZpbmR8bXNlc3Npb25fZ2V0fG1zZXNzaW9uX2dldF9hcnJheXxtc2Vzc2lvbl9nZXRfZGF0YXxtc2Vzc2lvbl9pbmN8bXNlc3Npb25fbGlzdHxtc2Vzc2lvbl9saXN0dmFyfG1zZXNzaW9uX2xvY2t8bXNlc3Npb25fcGx1Z2lufG1zZXNzaW9uX3JhbmRzdHJ8bXNlc3Npb25fc2V0fG1zZXNzaW9uX3NldF9hcnJheXxtc2Vzc2lvbl9zZXRfZGF0YXxtc2Vzc2lvbl90aW1lb3V0fG1zZXNzaW9uX3VuaXF8bXNlc3Npb25fdW5sb2NrfG1zZ19nZXRfcXVldWV8bXNnX3F1ZXVlX2V4aXN0c3xtc2dfcmVjZWl2ZXxtc2dfcmVtb3ZlX3F1ZXVlfG1zZ19zZW5kfG1zZ19zZXRfcXVldWV8bXNnX3N0YXRfcXVldWV8bXNxbHxtc3FsX2FmZmVjdGVkX3Jvd3N8bXNxbF9jbG9zZXxtc3FsX2Nvbm5lY3R8bXNxbF9jcmVhdGVfZGJ8bXNxbF9jcmVhdGVkYnxtc3FsX2RhdGFfc2Vla3xtc3FsX2RiX3F1ZXJ5fG1zcWxfZGJuYW1lfG1zcWxfZHJvcF9kYnxtc3FsX2Vycm9yfG1zcWxfZmV0Y2hfYXJyYXl8bXNxbF9mZXRjaF9maWVsZHxtc3FsX2ZldGNoX29iamVjdHxtc3FsX2ZldGNoX3Jvd3xtc3FsX2ZpZWxkX2ZsYWdzfG1zcWxfZmllbGRfbGVufG1zcWxfZmllbGRfbmFtZXxtc3FsX2ZpZWxkX3NlZWt8bXNxbF9maWVsZF90YWJsZXxtc3FsX2ZpZWxkX3R5cGV8bXNxbF9maWVsZGZsYWdzfG1zcWxfZmllbGRsZW58bXNxbF9maWVsZG5hbWV8bXNxbF9maWVsZHRhYmxlfG1zcWxfZmllbGR0eXBlfG1zcWxfZnJlZV9yZXN1bHR8bXNxbF9saXN0X2Ric3xtc3FsX2xpc3RfZmllbGRzfG1zcWxfbGlzdF90YWJsZXN8bXNxbF9udW1fZmllbGRzfG1zcWxfbnVtX3Jvd3N8bXNxbF9udW1maWVsZHN8bXNxbF9udW1yb3dzfG1zcWxfcGNvbm5lY3R8bXNxbF9xdWVyeXxtc3FsX3JlZ2Nhc2V8bXNxbF9yZXN1bHR8bXNxbF9zZWxlY3RfZGJ8bXNxbF90YWJsZW5hbWV8bXNzcWxfYmluZHxtc3NxbF9jbG9zZXxtc3NxbF9jb25uZWN0fG1zc3FsX2RhdGFfc2Vla3xtc3NxbF9leGVjdXRlfG1zc3FsX2ZldGNoX2FycmF5fG1zc3FsX2ZldGNoX2Fzc29jfG1zc3FsX2ZldGNoX2JhdGNofG1zc3FsX2ZldGNoX2ZpZWxkfG1zc3FsX2ZldGNoX29iamVjdHxtc3NxbF9mZXRjaF9yb3d8bXNzcWxfZmllbGRfbGVuZ3RofG1zc3FsX2ZpZWxkX25hbWV8bXNzcWxfZmllbGRfc2Vla3xtc3NxbF9maWVsZF90eXBlfG1zc3FsX2ZyZWVfcmVzdWx0fG1zc3FsX2ZyZWVfc3RhdGVtZW50fG1zc3FsX2dldF9sYXN0X21lc3NhZ2V8bXNzcWxfZ3VpZF9zdHJpbmd8bXNzcWxfaW5pdHxtc3NxbF9taW5fZXJyb3Jfc2V2ZXJpdHl8bXNzcWxfbWluX21lc3NhZ2Vfc2V2ZXJpdHl8bXNzcWxfbmV4dF9yZXN1bHR8bXNzcWxfbnVtX2ZpZWxkc3xtc3NxbF9udW1fcm93c3xtc3NxbF9wY29ubmVjdHxtc3NxbF9xdWVyeXxtc3NxbF9yZXN1bHR8bXNzcWxfcm93c19hZmZlY3RlZHxtc3NxbF9zZWxlY3RfZGJ8bXRfZ2V0cmFuZG1heHxtdF9yYW5kfG10X3NyYW5kfG11bHRpcGxlaXRlcmF0b3J8bXlzcWxfYWZmZWN0ZWRfcm93c3xteXNxbF9jbGllbnRfZW5jb2Rpbmd8bXlzcWxfY2xvc2V8bXlzcWxfY29ubmVjdHxteXNxbF9jcmVhdGVfZGJ8bXlzcWxfZGF0YV9zZWVrfG15c3FsX2RiX25hbWV8bXlzcWxfZGJfcXVlcnl8bXlzcWxfZHJvcF9kYnxteXNxbF9lcnJub3xteXNxbF9lcnJvcnxteXNxbF9lc2NhcGVfc3RyaW5nfG15c3FsX2ZldGNoX2FycmF5fG15c3FsX2ZldGNoX2Fzc29jfG15c3FsX2ZldGNoX2ZpZWxkfG15c3FsX2ZldGNoX2xlbmd0aHN8bXlzcWxfZmV0Y2hfb2JqZWN0fG15c3FsX2ZldGNoX3Jvd3xteXNxbF9maWVsZF9mbGFnc3xteXNxbF9maWVsZF9sZW58bXlzcWxfZmllbGRfbmFtZXxteXNxbF9maWVsZF9zZWVrfG15c3FsX2ZpZWxkX3RhYmxlfG15c3FsX2ZpZWxkX3R5cGV8bXlzcWxfZnJlZV9yZXN1bHR8bXlzcWxfZ2V0X2NsaWVudF9pbmZvfG15c3FsX2dldF9ob3N0X2luZm98bXlzcWxfZ2V0X3Byb3RvX2luZm98bXlzcWxfZ2V0X3NlcnZlcl9pbmZvfG15c3FsX2luZm98bXlzcWxfaW5zZXJ0X2lkfG15c3FsX2xpc3RfZGJzfG15c3FsX2xpc3RfZmllbGRzfG15c3FsX2xpc3RfcHJvY2Vzc2VzfG15c3FsX2xpc3RfdGFibGVzfG15c3FsX251bV9maWVsZHN8bXlzcWxfbnVtX3Jvd3N8bXlzcWxfcGNvbm5lY3R8bXlzcWxfcGluZ3xteXNxbF9xdWVyeXxteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmd8bXlzcWxfcmVzdWx0fG15c3FsX3NlbGVjdF9kYnxteXNxbF9zZXRfY2hhcnNldHxteXNxbF9zdGF0fG15c3FsX3RhYmxlbmFtZXxteXNxbF90aHJlYWRfaWR8bXlzcWxfdW5idWZmZXJlZF9xdWVyeXxteXNxbGl8bXlzcWxpX2JpbmRfcGFyYW18bXlzcWxpX2JpbmRfcmVzdWx0fG15c3FsaV9jbGllbnRfZW5jb2Rpbmd8bXlzcWxpX2Nvbm5lY3R8bXlzcWxpX2Rpc2FibGVfcmVhZHNfZnJvbV9tYXN0ZXJ8bXlzcWxpX2Rpc2FibGVfcnBsX3BhcnNlfG15c3FsaV9kcml2ZXJ8bXlzcWxpX2VuYWJsZV9yZWFkc19mcm9tX21hc3RlcnxteXNxbGlfZW5hYmxlX3JwbF9wYXJzZXxteXNxbGlfZXNjYXBlX3N0cmluZ3xteXNxbGlfZXhlY3V0ZXxteXNxbGlfZmV0Y2h8bXlzcWxpX2dldF9tZXRhZGF0YXxteXNxbGlfbWFzdGVyX3F1ZXJ5fG15c3FsaV9wYXJhbV9jb3VudHxteXNxbGlfcmVwb3J0fG15c3FsaV9yZXN1bHR8bXlzcWxpX3JwbF9wYXJzZV9lbmFibGVkfG15c3FsaV9ycGxfcHJvYmV8bXlzcWxpX3JwbF9xdWVyeV90eXBlfG15c3FsaV9zZW5kX2xvbmdfZGF0YXxteXNxbGlfc2VuZF9xdWVyeXxteXNxbGlfc2V0X29wdHxteXNxbGlfc2xhdmVfcXVlcnl8bXlzcWxpX3N0bXR8bXlzcWxpX3dhcm5pbmd8bXlzcWxuZF9tc19nZXRfc3RhdHN8bXlzcWxuZF9tc19xdWVyeV9pc19zZWxlY3R8bXlzcWxuZF9tc19zZXRfdXNlcl9waWNrX3NlcnZlcnxteXNxbG5kX3FjX2NoYW5nZV9oYW5kbGVyfG15c3FsbmRfcWNfY2xlYXJfY2FjaGV8bXlzcWxuZF9xY19nZXRfY2FjaGVfaW5mb3xteXNxbG5kX3FjX2dldF9jb3JlX3N0YXRzfG15c3FsbmRfcWNfZ2V0X2hhbmRsZXJ8bXlzcWxuZF9xY19nZXRfcXVlcnlfdHJhY2VfbG9nfG15c3FsbmRfcWNfc2V0X3VzZXJfaGFuZGxlcnN8bmF0Y2FzZXNvcnR8bmF0c29ydHxuY3Vyc2VzX2FkZGNofG5jdXJzZXNfYWRkY2huc3RyfG5jdXJzZXNfYWRkY2hzdHJ8bmN1cnNlc19hZGRuc3RyfG5jdXJzZXNfYWRkc3RyfG5jdXJzZXNfYXNzdW1lX2RlZmF1bHRfY29sb3JzfG5jdXJzZXNfYXR0cm9mZnxuY3Vyc2VzX2F0dHJvbnxuY3Vyc2VzX2F0dHJzZXR8bmN1cnNlc19iYXVkcmF0ZXxuY3Vyc2VzX2JlZXB8bmN1cnNlc19ia2dkfG5jdXJzZXNfYmtnZHNldHxuY3Vyc2VzX2JvcmRlcnxuY3Vyc2VzX2JvdHRvbV9wYW5lbHxuY3Vyc2VzX2Nhbl9jaGFuZ2VfY29sb3J8bmN1cnNlc19jYnJlYWt8bmN1cnNlc19jbGVhcnxuY3Vyc2VzX2NscnRvYm90fG5jdXJzZXNfY2xydG9lb2x8bmN1cnNlc19jb2xvcl9jb250ZW50fG5jdXJzZXNfY29sb3Jfc2V0fG5jdXJzZXNfY3Vyc19zZXR8bmN1cnNlc19kZWZfcHJvZ19tb2RlfG5jdXJzZXNfZGVmX3NoZWxsX21vZGV8bmN1cnNlc19kZWZpbmVfa2V5fG5jdXJzZXNfZGVsX3BhbmVsfG5jdXJzZXNfZGVsYXlfb3V0cHV0fG5jdXJzZXNfZGVsY2h8bmN1cnNlc19kZWxldGVsbnxuY3Vyc2VzX2RlbHdpbnxuY3Vyc2VzX2RvdXBkYXRlfG5jdXJzZXNfZWNob3xuY3Vyc2VzX2VjaG9jaGFyfG5jdXJzZXNfZW5kfG5jdXJzZXNfZXJhc2V8bmN1cnNlc19lcmFzZWNoYXJ8bmN1cnNlc19maWx0ZXJ8bmN1cnNlc19mbGFzaHxuY3Vyc2VzX2ZsdXNoaW5wfG5jdXJzZXNfZ2V0Y2h8bmN1cnNlc19nZXRtYXh5eHxuY3Vyc2VzX2dldG1vdXNlfG5jdXJzZXNfZ2V0eXh8bmN1cnNlc19oYWxmZGVsYXl8bmN1cnNlc19oYXNfY29sb3JzfG5jdXJzZXNfaGFzX2ljfG5jdXJzZXNfaGFzX2lsfG5jdXJzZXNfaGFzX2tleXxuY3Vyc2VzX2hpZGVfcGFuZWx8bmN1cnNlc19obGluZXxuY3Vyc2VzX2luY2h8bmN1cnNlc19pbml0fG5jdXJzZXNfaW5pdF9jb2xvcnxuY3Vyc2VzX2luaXRfcGFpcnxuY3Vyc2VzX2luc2NofG5jdXJzZXNfaW5zZGVsbG58bmN1cnNlc19pbnNlcnRsbnxuY3Vyc2VzX2luc3N0cnxuY3Vyc2VzX2luc3RyfG5jdXJzZXNfaXNlbmR3aW58bmN1cnNlc19rZXlva3xuY3Vyc2VzX2tleXBhZHxuY3Vyc2VzX2tpbGxjaGFyfG5jdXJzZXNfbG9uZ25hbWV8bmN1cnNlc19tZXRhfG5jdXJzZXNfbW91c2VfdHJhZm98bmN1cnNlc19tb3VzZWludGVydmFsfG5jdXJzZXNfbW91c2VtYXNrfG5jdXJzZXNfbW92ZXxuY3Vyc2VzX21vdmVfcGFuZWx8bmN1cnNlc19tdmFkZGNofG5jdXJzZXNfbXZhZGRjaG5zdHJ8bmN1cnNlc19tdmFkZGNoc3RyfG5jdXJzZXNfbXZhZGRuc3RyfG5jdXJzZXNfbXZhZGRzdHJ8bmN1cnNlc19tdmN1cnxuY3Vyc2VzX212ZGVsY2h8bmN1cnNlc19tdmdldGNofG5jdXJzZXNfbXZobGluZXxuY3Vyc2VzX212aW5jaHxuY3Vyc2VzX212dmxpbmV8bmN1cnNlc19tdndhZGRzdHJ8bmN1cnNlc19uYXBtc3xuY3Vyc2VzX25ld19wYW5lbHxuY3Vyc2VzX25ld3BhZHxuY3Vyc2VzX25ld3dpbnxuY3Vyc2VzX25sfG5jdXJzZXNfbm9jYnJlYWt8bmN1cnNlc19ub2VjaG98bmN1cnNlc19ub25sfG5jdXJzZXNfbm9xaWZsdXNofG5jdXJzZXNfbm9yYXd8bmN1cnNlc19wYWlyX2NvbnRlbnR8bmN1cnNlc19wYW5lbF9hYm92ZXxuY3Vyc2VzX3BhbmVsX2JlbG93fG5jdXJzZXNfcGFuZWxfd2luZG93fG5jdXJzZXNfcG5vdXRyZWZyZXNofG5jdXJzZXNfcHJlZnJlc2h8bmN1cnNlc19wdXRwfG5jdXJzZXNfcWlmbHVzaHxuY3Vyc2VzX3Jhd3xuY3Vyc2VzX3JlZnJlc2h8bmN1cnNlc19yZXBsYWNlX3BhbmVsfG5jdXJzZXNfcmVzZXRfcHJvZ19tb2RlfG5jdXJzZXNfcmVzZXRfc2hlbGxfbW9kZXxuY3Vyc2VzX3Jlc2V0dHl8bmN1cnNlc19zYXZldHR5fG5jdXJzZXNfc2NyX2R1bXB8bmN1cnNlc19zY3JfaW5pdHxuY3Vyc2VzX3Njcl9yZXN0b3JlfG5jdXJzZXNfc2NyX3NldHxuY3Vyc2VzX3Njcmx8bmN1cnNlc19zaG93X3BhbmVsfG5jdXJzZXNfc2xrX2F0dHJ8bmN1cnNlc19zbGtfYXR0cm9mZnxuY3Vyc2VzX3Nsa19hdHRyb258bmN1cnNlc19zbGtfYXR0cnNldHxuY3Vyc2VzX3Nsa19jbGVhcnxuY3Vyc2VzX3Nsa19jb2xvcnxuY3Vyc2VzX3Nsa19pbml0fG5jdXJzZXNfc2xrX25vdXRyZWZyZXNofG5jdXJzZXNfc2xrX3JlZnJlc2h8bmN1cnNlc19zbGtfcmVzdG9yZXxuY3Vyc2VzX3Nsa19zZXR8bmN1cnNlc19zbGtfdG91Y2h8bmN1cnNlc19zdGFuZGVuZHxuY3Vyc2VzX3N0YW5kb3V0fG5jdXJzZXNfc3RhcnRfY29sb3J8bmN1cnNlc190ZXJtYXR0cnN8bmN1cnNlc190ZXJtbmFtZXxuY3Vyc2VzX3RpbWVvdXR8bmN1cnNlc190b3BfcGFuZWx8bmN1cnNlc190eXBlYWhlYWR8bmN1cnNlc191bmdldGNofG5jdXJzZXNfdW5nZXRtb3VzZXxuY3Vyc2VzX3VwZGF0ZV9wYW5lbHN8bmN1cnNlc191c2VfZGVmYXVsdF9jb2xvcnN8bmN1cnNlc191c2VfZW52fG5jdXJzZXNfdXNlX2V4dGVuZGVkX25hbWVzfG5jdXJzZXNfdmlkYXR0cnxuY3Vyc2VzX3ZsaW5lfG5jdXJzZXNfd2FkZGNofG5jdXJzZXNfd2FkZHN0cnxuY3Vyc2VzX3dhdHRyb2ZmfG5jdXJzZXNfd2F0dHJvbnxuY3Vyc2VzX3dhdHRyc2V0fG5jdXJzZXNfd2JvcmRlcnxuY3Vyc2VzX3djbGVhcnxuY3Vyc2VzX3djb2xvcl9zZXR8bmN1cnNlc193ZXJhc2V8bmN1cnNlc193Z2V0Y2h8bmN1cnNlc193aGxpbmV8bmN1cnNlc193bW91c2VfdHJhZm98bmN1cnNlc193bW92ZXxuY3Vyc2VzX3dub3V0cmVmcmVzaHxuY3Vyc2VzX3dyZWZyZXNofG5jdXJzZXNfd3N0YW5kZW5kfG5jdXJzZXNfd3N0YW5kb3V0fG5jdXJzZXNfd3ZsaW5lfG5ld2luc3RhbmNlfG5ld2luc3RhbmNlYXJnc3xuZXd0X2JlbGx8bmV3dF9idXR0b258bmV3dF9idXR0b25fYmFyfG5ld3RfY2VudGVyZWRfd2luZG93fG5ld3RfY2hlY2tib3h8bmV3dF9jaGVja2JveF9nZXRfdmFsdWV8bmV3dF9jaGVja2JveF9zZXRfZmxhZ3N8bmV3dF9jaGVja2JveF9zZXRfdmFsdWV8bmV3dF9jaGVja2JveF90cmVlfG5ld3RfY2hlY2tib3hfdHJlZV9hZGRfaXRlbXxuZXd0X2NoZWNrYm94X3RyZWVfZmluZF9pdGVtfG5ld3RfY2hlY2tib3hfdHJlZV9nZXRfY3VycmVudHxuZXd0X2NoZWNrYm94X3RyZWVfZ2V0X2VudHJ5X3ZhbHVlfG5ld3RfY2hlY2tib3hfdHJlZV9nZXRfbXVsdGlfc2VsZWN0aW9ufG5ld3RfY2hlY2tib3hfdHJlZV9nZXRfc2VsZWN0aW9ufG5ld3RfY2hlY2tib3hfdHJlZV9tdWx0aXxuZXd0X2NoZWNrYm94X3RyZWVfc2V0X2N1cnJlbnR8bmV3dF9jaGVja2JveF90cmVlX3NldF9lbnRyeXxuZXd0X2NoZWNrYm94X3RyZWVfc2V0X2VudHJ5X3ZhbHVlfG5ld3RfY2hlY2tib3hfdHJlZV9zZXRfd2lkdGh8bmV3dF9jbGVhcl9rZXlfYnVmZmVyfG5ld3RfY2xzfG5ld3RfY29tcGFjdF9idXR0b258bmV3dF9jb21wb25lbnRfYWRkX2NhbGxiYWNrfG5ld3RfY29tcG9uZW50X3Rha2VzX2ZvY3VzfG5ld3RfY3JlYXRlX2dyaWR8bmV3dF9jdXJzb3Jfb2ZmfG5ld3RfY3Vyc29yX29ufG5ld3RfZGVsYXl8bmV3dF9kcmF3X2Zvcm18bmV3dF9kcmF3X3Jvb3RfdGV4dHxuZXd0X2VudHJ5fG5ld3RfZW50cnlfZ2V0X3ZhbHVlfG5ld3RfZW50cnlfc2V0fG5ld3RfZW50cnlfc2V0X2ZpbHRlcnxuZXd0X2VudHJ5X3NldF9mbGFnc3xuZXd0X2ZpbmlzaGVkfG5ld3RfZm9ybXxuZXd0X2Zvcm1fYWRkX2NvbXBvbmVudHxuZXd0X2Zvcm1fYWRkX2NvbXBvbmVudHN8bmV3dF9mb3JtX2FkZF9ob3Rfa2V5fG5ld3RfZm9ybV9kZXN0cm95fG5ld3RfZm9ybV9nZXRfY3VycmVudHxuZXd0X2Zvcm1fcnVufG5ld3RfZm9ybV9zZXRfYmFja2dyb3VuZHxuZXd0X2Zvcm1fc2V0X2hlaWdodHxuZXd0X2Zvcm1fc2V0X3NpemV8bmV3dF9mb3JtX3NldF90aW1lcnxuZXd0X2Zvcm1fc2V0X3dpZHRofG5ld3RfZm9ybV93YXRjaF9mZHxuZXd0X2dldF9zY3JlZW5fc2l6ZXxuZXd0X2dyaWRfYWRkX2NvbXBvbmVudHNfdG9fZm9ybXxuZXd0X2dyaWRfYmFzaWNfd2luZG93fG5ld3RfZ3JpZF9mcmVlfG5ld3RfZ3JpZF9nZXRfc2l6ZXxuZXd0X2dyaWRfaF9jbG9zZV9zdGFja2VkfG5ld3RfZ3JpZF9oX3N0YWNrZWR8bmV3dF9ncmlkX3BsYWNlfG5ld3RfZ3JpZF9zZXRfZmllbGR8bmV3dF9ncmlkX3NpbXBsZV93aW5kb3d8bmV3dF9ncmlkX3ZfY2xvc2Vfc3RhY2tlZHxuZXd0X2dyaWRfdl9zdGFja2VkfG5ld3RfZ3JpZF93cmFwcGVkX3dpbmRvd3xuZXd0X2dyaWRfd3JhcHBlZF93aW5kb3dfYXR8bmV3dF9pbml0fG5ld3RfbGFiZWx8bmV3dF9sYWJlbF9zZXRfdGV4dHxuZXd0X2xpc3Rib3h8bmV3dF9saXN0Ym94X2FwcGVuZF9lbnRyeXxuZXd0X2xpc3Rib3hfY2xlYXJ8bmV3dF9saXN0Ym94X2NsZWFyX3NlbGVjdGlvbnxuZXd0X2xpc3Rib3hfZGVsZXRlX2VudHJ5fG5ld3RfbGlzdGJveF9nZXRfY3VycmVudHxuZXd0X2xpc3Rib3hfZ2V0X3NlbGVjdGlvbnxuZXd0X2xpc3Rib3hfaW5zZXJ0X2VudHJ5fG5ld3RfbGlzdGJveF9pdGVtX2NvdW50fG5ld3RfbGlzdGJveF9zZWxlY3RfaXRlbXxuZXd0X2xpc3Rib3hfc2V0X2N1cnJlbnR8bmV3dF9saXN0Ym94X3NldF9jdXJyZW50X2J5X2tleXxuZXd0X2xpc3Rib3hfc2V0X2RhdGF8bmV3dF9saXN0Ym94X3NldF9lbnRyeXxuZXd0X2xpc3Rib3hfc2V0X3dpZHRofG5ld3RfbGlzdGl0ZW18bmV3dF9saXN0aXRlbV9nZXRfZGF0YXxuZXd0X2xpc3RpdGVtX3NldHxuZXd0X29wZW5fd2luZG93fG5ld3RfcG9wX2hlbHBfbGluZXxuZXd0X3BvcF93aW5kb3d8bmV3dF9wdXNoX2hlbHBfbGluZXxuZXd0X3JhZGlvX2dldF9jdXJyZW50fG5ld3RfcmFkaW9idXR0b258bmV3dF9yZWRyYXdfaGVscF9saW5lfG5ld3RfcmVmbG93X3RleHR8bmV3dF9yZWZyZXNofG5ld3RfcmVzaXplX3NjcmVlbnxuZXd0X3Jlc3VtZXxuZXd0X3J1bl9mb3JtfG5ld3Rfc2NhbGV8bmV3dF9zY2FsZV9zZXR8bmV3dF9zY3JvbGxiYXJfc2V0fG5ld3Rfc2V0X2hlbHBfY2FsbGJhY2t8bmV3dF9zZXRfc3VzcGVuZF9jYWxsYmFja3xuZXd0X3N1c3BlbmR8bmV3dF90ZXh0Ym94fG5ld3RfdGV4dGJveF9nZXRfbnVtX2xpbmVzfG5ld3RfdGV4dGJveF9yZWZsb3dlZHxuZXd0X3RleHRib3hfc2V0X2hlaWdodHxuZXd0X3RleHRib3hfc2V0X3RleHR8bmV3dF92ZXJ0aWNhbF9zY3JvbGxiYXJ8bmV3dF93YWl0X2Zvcl9rZXl8bmV3dF93aW5fY2hvaWNlfG5ld3Rfd2luX2VudHJpZXN8bmV3dF93aW5fbWVudXxuZXd0X3dpbl9tZXNzYWdlfG5ld3Rfd2luX21lc3NhZ2V2fG5ld3Rfd2luX3Rlcm5hcnl8bmV4dHxuZ2V0dGV4dHxubDJicnxubF9sYW5naW5mb3xub3Jld2luZGl0ZXJhdG9yfG5vcm1hbGl6ZXJ8bm90ZXNfYm9keXxub3Rlc19jb3B5X2RifG5vdGVzX2NyZWF0ZV9kYnxub3Rlc19jcmVhdGVfbm90ZXxub3Rlc19kcm9wX2RifG5vdGVzX2ZpbmRfbm90ZXxub3Rlc19oZWFkZXJfaW5mb3xub3Rlc19saXN0X21zZ3N8bm90ZXNfbWFya19yZWFkfG5vdGVzX21hcmtfdW5yZWFkfG5vdGVzX25hdl9jcmVhdGV8bm90ZXNfc2VhcmNofG5vdGVzX3VucmVhZHxub3Rlc192ZXJzaW9ufG5zYXBpX3JlcXVlc3RfaGVhZGVyc3xuc2FwaV9yZXNwb25zZV9oZWFkZXJzfG5zYXBpX3ZpcnR1YWx8bnRobWFjfG51bWJlcl9mb3JtYXR8bnVtYmVyZm9ybWF0dGVyfG9hdXRofG9hdXRoX2dldF9zYnN8b2F1dGhfdXJsZW5jb2RlfG9hdXRoZXhjZXB0aW9ufG9hdXRocHJvdmlkZXJ8b2JfY2xlYW58b2JfZGVmbGF0ZWhhbmRsZXJ8b2JfZW5kX2NsZWFufG9iX2VuZF9mbHVzaHxvYl9ldGFnaGFuZGxlcnxvYl9mbHVzaHxvYl9nZXRfY2xlYW58b2JfZ2V0X2NvbnRlbnRzfG9iX2dldF9mbHVzaHxvYl9nZXRfbGVuZ3RofG9iX2dldF9sZXZlbHxvYl9nZXRfc3RhdHVzfG9iX2d6aGFuZGxlcnxvYl9pY29udl9oYW5kbGVyfG9iX2ltcGxpY2l0X2ZsdXNofG9iX2luZmxhdGVoYW5kbGVyfG9iX2xpc3RfaGFuZGxlcnN8b2Jfc3RhcnR8b2JfdGlkeWhhbmRsZXJ8b2NpX2JpbmRfYXJyYXlfYnlfbmFtZXxvY2lfYmluZF9ieV9uYW1lfG9jaV9jYW5jZWx8b2NpX2NsaWVudF92ZXJzaW9ufG9jaV9jbG9zZXxvY2lfY29sbGVjdGlvbl9hcHBlbmR8b2NpX2NvbGxlY3Rpb25fYXNzaWdufG9jaV9jb2xsZWN0aW9uX2VsZW1lbnRfYXNzaWdufG9jaV9jb2xsZWN0aW9uX2VsZW1lbnRfZ2V0fG9jaV9jb2xsZWN0aW9uX2ZyZWV8b2NpX2NvbGxlY3Rpb25fbWF4fG9jaV9jb2xsZWN0aW9uX3NpemV8b2NpX2NvbGxlY3Rpb25fdHJpbXxvY2lfY29tbWl0fG9jaV9jb25uZWN0fG9jaV9kZWZpbmVfYnlfbmFtZXxvY2lfZXJyb3J8b2NpX2V4ZWN1dGV8b2NpX2ZldGNofG9jaV9mZXRjaF9hbGx8b2NpX2ZldGNoX2FycmF5fG9jaV9mZXRjaF9hc3NvY3xvY2lfZmV0Y2hfb2JqZWN0fG9jaV9mZXRjaF9yb3d8b2NpX2ZpZWxkX2lzX251bGx8b2NpX2ZpZWxkX25hbWV8b2NpX2ZpZWxkX3ByZWNpc2lvbnxvY2lfZmllbGRfc2NhbGV8b2NpX2ZpZWxkX3NpemV8b2NpX2ZpZWxkX3R5cGV8b2NpX2ZpZWxkX3R5cGVfcmF3fG9jaV9mcmVlX3N0YXRlbWVudHxvY2lfaW50ZXJuYWxfZGVidWd8b2NpX2xvYl9hcHBlbmR8b2NpX2xvYl9jbG9zZXxvY2lfbG9iX2NvcHl8b2NpX2xvYl9lb2Z8b2NpX2xvYl9lcmFzZXxvY2lfbG9iX2V4cG9ydHxvY2lfbG9iX2ZsdXNofG9jaV9sb2JfZnJlZXxvY2lfbG9iX2dldGJ1ZmZlcmluZ3xvY2lfbG9iX2ltcG9ydHxvY2lfbG9iX2lzX2VxdWFsfG9jaV9sb2JfbG9hZHxvY2lfbG9iX3JlYWR8b2NpX2xvYl9yZXdpbmR8b2NpX2xvYl9zYXZlfG9jaV9sb2Jfc2F2ZWZpbGV8b2NpX2xvYl9zZWVrfG9jaV9sb2Jfc2V0YnVmZmVyaW5nfG9jaV9sb2Jfc2l6ZXxvY2lfbG9iX3RlbGx8b2NpX2xvYl90cnVuY2F0ZXxvY2lfbG9iX3dyaXRlfG9jaV9sb2Jfd3JpdGV0ZW1wb3Jhcnl8b2NpX2xvYl93cml0ZXRvZmlsZXxvY2lfbmV3X2NvbGxlY3Rpb258b2NpX25ld19jb25uZWN0fG9jaV9uZXdfY3Vyc29yfG9jaV9uZXdfZGVzY3JpcHRvcnxvY2lfbnVtX2ZpZWxkc3xvY2lfbnVtX3Jvd3N8b2NpX3BhcnNlfG9jaV9wYXNzd29yZF9jaGFuZ2V8b2NpX3Bjb25uZWN0fG9jaV9yZXN1bHR8b2NpX3JvbGxiYWNrfG9jaV9zZXJ2ZXJfdmVyc2lvbnxvY2lfc2V0X2FjdGlvbnxvY2lfc2V0X2NsaWVudF9pZGVudGlmaWVyfG9jaV9zZXRfY2xpZW50X2luZm98b2NpX3NldF9lZGl0aW9ufG9jaV9zZXRfbW9kdWxlX25hbWV8b2NpX3NldF9wcmVmZXRjaHxvY2lfc3RhdGVtZW50X3R5cGV8b2NpYmluZGJ5bmFtZXxvY2ljYW5jZWx8b2NpY2xvc2Vsb2J8b2NpY29sbGFwcGVuZHxvY2ljb2xsYXNzaWdufG9jaWNvbGxhc3NpZ25lbGVtfG9jaWNvbGxnZXRlbGVtfG9jaWNvbGxtYXh8b2NpY29sbHNpemV8b2NpY29sbHRyaW18b2NpY29sdW1uaXNudWxsfG9jaWNvbHVtbm5hbWV8b2NpY29sdW1ucHJlY2lzaW9ufG9jaWNvbHVtbnNjYWxlfG9jaWNvbHVtbnNpemV8b2NpY29sdW1udHlwZXxvY2ljb2x1bW50eXBlcmF3fG9jaWNvbW1pdHxvY2lkZWZpbmVieW5hbWV8b2NpZXJyb3J8b2NpZXhlY3V0ZXxvY2lmZXRjaHxvY2lmZXRjaGludG98b2NpZmV0Y2hzdGF0ZW1lbnR8b2NpZnJlZWNvbGxlY3Rpb258b2NpZnJlZWN1cnNvcnxvY2lmcmVlZGVzY3xvY2lmcmVlc3RhdGVtZW50fG9jaWludGVybmFsZGVidWd8b2NpbG9hZGxvYnxvY2lsb2dvZmZ8b2NpbG9nb258b2NpbmV3Y29sbGVjdGlvbnxvY2luZXdjdXJzb3J8b2NpbmV3ZGVzY3JpcHRvcnxvY2lubG9nb258b2NpbnVtY29sc3xvY2lwYXJzZXxvY2lwbG9nb258b2NpcmVzdWx0fG9jaXJvbGxiYWNrfG9jaXJvd2NvdW50fG9jaXNhdmVsb2J8b2Npc2F2ZWxvYmZpbGV8b2Npc2VydmVydmVyc2lvbnxvY2lzZXRwcmVmZXRjaHxvY2lzdGF0ZW1lbnR0eXBlfG9jaXdyaXRlbG9idG9maWxlfG9jaXdyaXRldGVtcG9yYXJ5bG9ifG9jdGRlY3xvZGJjX2F1dG9jb21taXR8b2RiY19iaW5tb2RlfG9kYmNfY2xvc2V8b2RiY19jbG9zZV9hbGx8b2RiY19jb2x1bW5wcml2aWxlZ2VzfG9kYmNfY29sdW1uc3xvZGJjX2NvbW1pdHxvZGJjX2Nvbm5lY3R8b2RiY19jdXJzb3J8b2RiY19kYXRhX3NvdXJjZXxvZGJjX2RvfG9kYmNfZXJyb3J8b2RiY19lcnJvcm1zZ3xvZGJjX2V4ZWN8b2RiY19leGVjdXRlfG9kYmNfZmV0Y2hfYXJyYXl8b2RiY19mZXRjaF9pbnRvfG9kYmNfZmV0Y2hfb2JqZWN0fG9kYmNfZmV0Y2hfcm93fG9kYmNfZmllbGRfbGVufG9kYmNfZmllbGRfbmFtZXxvZGJjX2ZpZWxkX251bXxvZGJjX2ZpZWxkX3ByZWNpc2lvbnxvZGJjX2ZpZWxkX3NjYWxlfG9kYmNfZmllbGRfdHlwZXxvZGJjX2ZvcmVpZ25rZXlzfG9kYmNfZnJlZV9yZXN1bHR8b2RiY19nZXR0eXBlaW5mb3xvZGJjX2xvbmdyZWFkbGVufG9kYmNfbmV4dF9yZXN1bHR8b2RiY19udW1fZmllbGRzfG9kYmNfbnVtX3Jvd3N8b2RiY19wY29ubmVjdHxvZGJjX3ByZXBhcmV8b2RiY19wcmltYXJ5a2V5c3xvZGJjX3Byb2NlZHVyZWNvbHVtbnN8b2RiY19wcm9jZWR1cmVzfG9kYmNfcmVzdWx0fG9kYmNfcmVzdWx0X2FsbHxvZGJjX3JvbGxiYWNrfG9kYmNfc2V0b3B0aW9ufG9kYmNfc3BlY2lhbGNvbHVtbnN8b2RiY19zdGF0aXN0aWNzfG9kYmNfdGFibGVwcml2aWxlZ2VzfG9kYmNfdGFibGVzfG9wZW5hbF9idWZmZXJfY3JlYXRlfG9wZW5hbF9idWZmZXJfZGF0YXxvcGVuYWxfYnVmZmVyX2Rlc3Ryb3l8b3BlbmFsX2J1ZmZlcl9nZXR8b3BlbmFsX2J1ZmZlcl9sb2Fkd2F2fG9wZW5hbF9jb250ZXh0X2NyZWF0ZXxvcGVuYWxfY29udGV4dF9jdXJyZW50fG9wZW5hbF9jb250ZXh0X2Rlc3Ryb3l8b3BlbmFsX2NvbnRleHRfcHJvY2Vzc3xvcGVuYWxfY29udGV4dF9zdXNwZW5kfG9wZW5hbF9kZXZpY2VfY2xvc2V8b3BlbmFsX2RldmljZV9vcGVufG9wZW5hbF9saXN0ZW5lcl9nZXR8b3BlbmFsX2xpc3RlbmVyX3NldHxvcGVuYWxfc291cmNlX2NyZWF0ZXxvcGVuYWxfc291cmNlX2Rlc3Ryb3l8b3BlbmFsX3NvdXJjZV9nZXR8b3BlbmFsX3NvdXJjZV9wYXVzZXxvcGVuYWxfc291cmNlX3BsYXl8b3BlbmFsX3NvdXJjZV9yZXdpbmR8b3BlbmFsX3NvdXJjZV9zZXR8b3BlbmFsX3NvdXJjZV9zdG9wfG9wZW5hbF9zdHJlYW18b3BlbmRpcnxvcGVubG9nfG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aHxvcGVuc3NsX2Nzcl9leHBvcnR8b3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGV8b3BlbnNzbF9jc3JfZ2V0X3B1YmxpY19rZXl8b3BlbnNzbF9jc3JfZ2V0X3N1YmplY3R8b3BlbnNzbF9jc3JfbmV3fG9wZW5zc2xfY3NyX3NpZ258b3BlbnNzbF9kZWNyeXB0fG9wZW5zc2xfZGhfY29tcHV0ZV9rZXl8b3BlbnNzbF9kaWdlc3R8b3BlbnNzbF9lbmNyeXB0fG9wZW5zc2xfZXJyb3Jfc3RyaW5nfG9wZW5zc2xfZnJlZV9rZXl8b3BlbnNzbF9nZXRfY2lwaGVyX21ldGhvZHN8b3BlbnNzbF9nZXRfbWRfbWV0aG9kc3xvcGVuc3NsX2dldF9wcml2YXRla2V5fG9wZW5zc2xfZ2V0X3B1YmxpY2tleXxvcGVuc3NsX29wZW58b3BlbnNzbF9wa2NzMTJfZXhwb3J0fG9wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlfG9wZW5zc2xfcGtjczEyX3JlYWR8b3BlbnNzbF9wa2NzN19kZWNyeXB0fG9wZW5zc2xfcGtjczdfZW5jcnlwdHxvcGVuc3NsX3BrY3M3X3NpZ258b3BlbnNzbF9wa2NzN192ZXJpZnl8b3BlbnNzbF9wa2V5X2V4cG9ydHxvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGV8b3BlbnNzbF9wa2V5X2ZyZWV8b3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzfG9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZXxvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpY3xvcGVuc3NsX3BrZXlfbmV3fG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0fG9wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0fG9wZW5zc2xfcHVibGljX2RlY3J5cHR8b3BlbnNzbF9wdWJsaWNfZW5jcnlwdHxvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXN8b3BlbnNzbF9zZWFsfG9wZW5zc2xfc2lnbnxvcGVuc3NsX3ZlcmlmeXxvcGVuc3NsX3g1MDlfY2hlY2tfcHJpdmF0ZV9rZXl8b3BlbnNzbF94NTA5X2NoZWNrcHVycG9zZXxvcGVuc3NsX3g1MDlfZXhwb3J0fG9wZW5zc2xfeDUwOV9leHBvcnRfdG9fZmlsZXxvcGVuc3NsX3g1MDlfZnJlZXxvcGVuc3NsX3g1MDlfcGFyc2V8b3BlbnNzbF94NTA5X3JlYWR8b3JkfG91dGVyaXRlcmF0b3J8b3V0b2Zib3VuZHNleGNlcHRpb258b3V0b2ZyYW5nZWV4Y2VwdGlvbnxvdXRwdXRfYWRkX3Jld3JpdGVfdmFyfG91dHB1dF9yZXNldF9yZXdyaXRlX3ZhcnN8b3ZlcmZsb3dleGNlcHRpb258b3ZlcmxvYWR8b3ZlcnJpZGVfZnVuY3Rpb258b3ZyaW1vc19jbG9zZXxvdnJpbW9zX2NvbW1pdHxvdnJpbW9zX2Nvbm5lY3R8b3ZyaW1vc19jdXJzb3J8b3ZyaW1vc19leGVjfG92cmltb3NfZXhlY3V0ZXxvdnJpbW9zX2ZldGNoX2ludG98b3ZyaW1vc19mZXRjaF9yb3d8b3ZyaW1vc19maWVsZF9sZW58b3ZyaW1vc19maWVsZF9uYW1lfG92cmltb3NfZmllbGRfbnVtfG92cmltb3NfZmllbGRfdHlwZXxvdnJpbW9zX2ZyZWVfcmVzdWx0fG92cmltb3NfbG9uZ3JlYWRsZW58b3ZyaW1vc19udW1fZmllbGRzfG92cmltb3NfbnVtX3Jvd3N8b3ZyaW1vc19wcmVwYXJlfG92cmltb3NfcmVzdWx0fG92cmltb3NfcmVzdWx0X2FsbHxvdnJpbW9zX3JvbGxiYWNrfHBhY2t8cGFyZW50aXRlcmF0b3J8cGFyc2VfaW5pX2ZpbGV8cGFyc2VfaW5pX3N0cmluZ3xwYXJzZV9zdHJ8cGFyc2VfdXJsfHBhcnNla2l0X2NvbXBpbGVfZmlsZXxwYXJzZWtpdF9jb21waWxlX3N0cmluZ3xwYXJzZWtpdF9mdW5jX2FyZ2luZm98cGFzc3RocnV8cGF0aGluZm98cGNsb3NlfHBjbnRsX2FsYXJtfHBjbnRsX2V4ZWN8cGNudGxfZm9ya3xwY250bF9nZXRwcmlvcml0eXxwY250bF9zZXRwcmlvcml0eXxwY250bF9zaWduYWx8cGNudGxfc2lnbmFsX2Rpc3BhdGNofHBjbnRsX3NpZ3Byb2NtYXNrfHBjbnRsX3NpZ3RpbWVkd2FpdHxwY250bF9zaWd3YWl0aW5mb3xwY250bF93YWl0fHBjbnRsX3dhaXRwaWR8cGNudGxfd2V4aXRzdGF0dXN8cGNudGxfd2lmZXhpdGVkfHBjbnRsX3dpZnNpZ25hbGVkfHBjbnRsX3dpZnN0b3BwZWR8cGNudGxfd3N0b3BzaWd8cGNudGxfd3Rlcm1zaWd8cGRmX2FjdGl2YXRlX2l0ZW18cGRmX2FkZF9hbm5vdGF0aW9ufHBkZl9hZGRfYm9va21hcmt8cGRmX2FkZF9sYXVuY2hsaW5rfHBkZl9hZGRfbG9jYWxsaW5rfHBkZl9hZGRfbmFtZWRkZXN0fHBkZl9hZGRfbm90ZXxwZGZfYWRkX291dGxpbmV8cGRmX2FkZF9wZGZsaW5rfHBkZl9hZGRfdGFibGVfY2VsbHxwZGZfYWRkX3RleHRmbG93fHBkZl9hZGRfdGh1bWJuYWlsfHBkZl9hZGRfd2VibGlua3xwZGZfYXJjfHBkZl9hcmNufHBkZl9hdHRhY2hfZmlsZXxwZGZfYmVnaW5fZG9jdW1lbnR8cGRmX2JlZ2luX2ZvbnR8cGRmX2JlZ2luX2dseXBofHBkZl9iZWdpbl9pdGVtfHBkZl9iZWdpbl9sYXllcnxwZGZfYmVnaW5fcGFnZXxwZGZfYmVnaW5fcGFnZV9leHR8cGRmX2JlZ2luX3BhdHRlcm58cGRmX2JlZ2luX3RlbXBsYXRlfHBkZl9iZWdpbl90ZW1wbGF0ZV9leHR8cGRmX2NpcmNsZXxwZGZfY2xpcHxwZGZfY2xvc2V8cGRmX2Nsb3NlX2ltYWdlfHBkZl9jbG9zZV9wZGl8cGRmX2Nsb3NlX3BkaV9wYWdlfHBkZl9jbG9zZXBhdGh8cGRmX2Nsb3NlcGF0aF9maWxsX3N0cm9rZXxwZGZfY2xvc2VwYXRoX3N0cm9rZXxwZGZfY29uY2F0fHBkZl9jb250aW51ZV90ZXh0fHBkZl9jcmVhdGVfM2R2aWV3fHBkZl9jcmVhdGVfYWN0aW9ufHBkZl9jcmVhdGVfYW5ub3RhdGlvbnxwZGZfY3JlYXRlX2Jvb2ttYXJrfHBkZl9jcmVhdGVfZmllbGR8cGRmX2NyZWF0ZV9maWVsZGdyb3VwfHBkZl9jcmVhdGVfZ3N0YXRlfHBkZl9jcmVhdGVfcHZmfHBkZl9jcmVhdGVfdGV4dGZsb3d8cGRmX2N1cnZldG98cGRmX2RlZmluZV9sYXllcnxwZGZfZGVsZXRlfHBkZl9kZWxldGVfcHZmfHBkZl9kZWxldGVfdGFibGV8cGRmX2RlbGV0ZV90ZXh0Zmxvd3xwZGZfZW5jb2Rpbmdfc2V0X2NoYXJ8cGRmX2VuZF9kb2N1bWVudHxwZGZfZW5kX2ZvbnR8cGRmX2VuZF9nbHlwaHxwZGZfZW5kX2l0ZW18cGRmX2VuZF9sYXllcnxwZGZfZW5kX3BhZ2V8cGRmX2VuZF9wYWdlX2V4dHxwZGZfZW5kX3BhdHRlcm58cGRmX2VuZF90ZW1wbGF0ZXxwZGZfZW5kcGF0aHxwZGZfZmlsbHxwZGZfZmlsbF9pbWFnZWJsb2NrfHBkZl9maWxsX3BkZmJsb2NrfHBkZl9maWxsX3N0cm9rZXxwZGZfZmlsbF90ZXh0YmxvY2t8cGRmX2ZpbmRmb250fHBkZl9maXRfaW1hZ2V8cGRmX2ZpdF9wZGlfcGFnZXxwZGZfZml0X3RhYmxlfHBkZl9maXRfdGV4dGZsb3d8cGRmX2ZpdF90ZXh0bGluZXxwZGZfZ2V0X2FwaW5hbWV8cGRmX2dldF9idWZmZXJ8cGRmX2dldF9lcnJtc2d8cGRmX2dldF9lcnJudW18cGRmX2dldF9mb250fHBkZl9nZXRfZm9udG5hbWV8cGRmX2dldF9mb250c2l6ZXxwZGZfZ2V0X2ltYWdlX2hlaWdodHxwZGZfZ2V0X2ltYWdlX3dpZHRofHBkZl9nZXRfbWFqb3J2ZXJzaW9ufHBkZl9nZXRfbWlub3J2ZXJzaW9ufHBkZl9nZXRfcGFyYW1ldGVyfHBkZl9nZXRfcGRpX3BhcmFtZXRlcnxwZGZfZ2V0X3BkaV92YWx1ZXxwZGZfZ2V0X3ZhbHVlfHBkZl9pbmZvX2ZvbnR8cGRmX2luZm9fbWF0Y2hib3h8cGRmX2luZm9fdGFibGV8cGRmX2luZm9fdGV4dGZsb3d8cGRmX2luZm9fdGV4dGxpbmV8cGRmX2luaXRncmFwaGljc3xwZGZfbGluZXRvfHBkZl9sb2FkXzNkZGF0YXxwZGZfbG9hZF9mb250fHBkZl9sb2FkX2ljY3Byb2ZpbGV8cGRmX2xvYWRfaW1hZ2V8cGRmX21ha2VzcG90Y29sb3J8cGRmX21vdmV0b3xwZGZfbmV3fHBkZl9vcGVuX2NjaXR0fHBkZl9vcGVuX2ZpbGV8cGRmX29wZW5fZ2lmfHBkZl9vcGVuX2ltYWdlfHBkZl9vcGVuX2ltYWdlX2ZpbGV8cGRmX29wZW5fanBlZ3xwZGZfb3Blbl9tZW1vcnlfaW1hZ2V8cGRmX29wZW5fcGRpfHBkZl9vcGVuX3BkaV9kb2N1bWVudHxwZGZfb3Blbl9wZGlfcGFnZXxwZGZfb3Blbl90aWZmfHBkZl9wY29zX2dldF9udW1iZXJ8cGRmX3Bjb3NfZ2V0X3N0cmVhbXxwZGZfcGNvc19nZXRfc3RyaW5nfHBkZl9wbGFjZV9pbWFnZXxwZGZfcGxhY2VfcGRpX3BhZ2V8cGRmX3Byb2Nlc3NfcGRpfHBkZl9yZWN0fHBkZl9yZXN0b3JlfHBkZl9yZXN1bWVfcGFnZXxwZGZfcm90YXRlfHBkZl9zYXZlfHBkZl9zY2FsZXxwZGZfc2V0X2JvcmRlcl9jb2xvcnxwZGZfc2V0X2JvcmRlcl9kYXNofHBkZl9zZXRfYm9yZGVyX3N0eWxlfHBkZl9zZXRfY2hhcl9zcGFjaW5nfHBkZl9zZXRfZHVyYXRpb258cGRmX3NldF9nc3RhdGV8cGRmX3NldF9ob3Jpel9zY2FsaW5nfHBkZl9zZXRfaW5mb3xwZGZfc2V0X2luZm9fYXV0aG9yfHBkZl9zZXRfaW5mb19jcmVhdG9yfHBkZl9zZXRfaW5mb19rZXl3b3Jkc3xwZGZfc2V0X2luZm9fc3ViamVjdHxwZGZfc2V0X2luZm9fdGl0bGV8cGRmX3NldF9sYXllcl9kZXBlbmRlbmN5fHBkZl9zZXRfbGVhZGluZ3xwZGZfc2V0X3BhcmFtZXRlcnxwZGZfc2V0X3RleHRfbWF0cml4fHBkZl9zZXRfdGV4dF9wb3N8cGRmX3NldF90ZXh0X3JlbmRlcmluZ3xwZGZfc2V0X3RleHRfcmlzZXxwZGZfc2V0X3ZhbHVlfHBkZl9zZXRfd29yZF9zcGFjaW5nfHBkZl9zZXRjb2xvcnxwZGZfc2V0ZGFzaHxwZGZfc2V0ZGFzaHBhdHRlcm58cGRmX3NldGZsYXR8cGRmX3NldGZvbnR8cGRmX3NldGdyYXl8cGRmX3NldGdyYXlfZmlsbHxwZGZfc2V0Z3JheV9zdHJva2V8cGRmX3NldGxpbmVjYXB8cGRmX3NldGxpbmVqb2lufHBkZl9zZXRsaW5ld2lkdGh8cGRmX3NldG1hdHJpeHxwZGZfc2V0bWl0ZXJsaW1pdHxwZGZfc2V0cG9seWRhc2h8cGRmX3NldHJnYmNvbG9yfHBkZl9zZXRyZ2Jjb2xvcl9maWxsfHBkZl9zZXRyZ2Jjb2xvcl9zdHJva2V8cGRmX3NoYWRpbmd8cGRmX3NoYWRpbmdfcGF0dGVybnxwZGZfc2hmaWxsfHBkZl9zaG93fHBkZl9zaG93X2JveGVkfHBkZl9zaG93X3h5fHBkZl9za2V3fHBkZl9zdHJpbmd3aWR0aHxwZGZfc3Ryb2tlfHBkZl9zdXNwZW5kX3BhZ2V8cGRmX3RyYW5zbGF0ZXxwZGZfdXRmMTZfdG9fdXRmOHxwZGZfdXRmMzJfdG9fdXRmMTZ8cGRmX3V0ZjhfdG9fdXRmMTZ8cGRvfHBkb19jdWJyaWRfc2NoZW1hfHBkb19wZ3NxbGxvYmNyZWF0ZXxwZG9fcGdzcWxsb2JvcGVufHBkb19wZ3NxbGxvYnVubGlua3xwZG9fc3FsaXRlY3JlYXRlYWdncmVnYXRlfHBkb19zcWxpdGVjcmVhdGVmdW5jdGlvbnxwZG9leGNlcHRpb258cGRvc3RhdGVtZW50fHBmc29ja29wZW58cGdfYWZmZWN0ZWRfcm93c3xwZ19jYW5jZWxfcXVlcnl8cGdfY2xpZW50X2VuY29kaW5nfHBnX2Nsb3NlfHBnX2Nvbm5lY3R8cGdfY29ubmVjdGlvbl9idXN5fHBnX2Nvbm5lY3Rpb25fcmVzZXR8cGdfY29ubmVjdGlvbl9zdGF0dXN8cGdfY29udmVydHxwZ19jb3B5X2Zyb218cGdfY29weV90b3xwZ19kYm5hbWV8cGdfZGVsZXRlfHBnX2VuZF9jb3B5fHBnX2VzY2FwZV9ieXRlYXxwZ19lc2NhcGVfc3RyaW5nfHBnX2V4ZWN1dGV8cGdfZmV0Y2hfYWxsfHBnX2ZldGNoX2FsbF9jb2x1bW5zfHBnX2ZldGNoX2FycmF5fHBnX2ZldGNoX2Fzc29jfHBnX2ZldGNoX29iamVjdHxwZ19mZXRjaF9yZXN1bHR8cGdfZmV0Y2hfcm93fHBnX2ZpZWxkX2lzX251bGx8cGdfZmllbGRfbmFtZXxwZ19maWVsZF9udW18cGdfZmllbGRfcHJ0bGVufHBnX2ZpZWxkX3NpemV8cGdfZmllbGRfdGFibGV8cGdfZmllbGRfdHlwZXxwZ19maWVsZF90eXBlX29pZHxwZ19mcmVlX3Jlc3VsdHxwZ19nZXRfbm90aWZ5fHBnX2dldF9waWR8cGdfZ2V0X3Jlc3VsdHxwZ19ob3N0fHBnX2luc2VydHxwZ19sYXN0X2Vycm9yfHBnX2xhc3Rfbm90aWNlfHBnX2xhc3Rfb2lkfHBnX2xvX2Nsb3NlfHBnX2xvX2NyZWF0ZXxwZ19sb19leHBvcnR8cGdfbG9faW1wb3J0fHBnX2xvX29wZW58cGdfbG9fcmVhZHxwZ19sb19yZWFkX2FsbHxwZ19sb19zZWVrfHBnX2xvX3RlbGx8cGdfbG9fdW5saW5rfHBnX2xvX3dyaXRlfHBnX21ldGFfZGF0YXxwZ19udW1fZmllbGRzfHBnX251bV9yb3dzfHBnX29wdGlvbnN8cGdfcGFyYW1ldGVyX3N0YXR1c3xwZ19wY29ubmVjdHxwZ19waW5nfHBnX3BvcnR8cGdfcHJlcGFyZXxwZ19wdXRfbGluZXxwZ19xdWVyeXxwZ19xdWVyeV9wYXJhbXN8cGdfcmVzdWx0X2Vycm9yfHBnX3Jlc3VsdF9lcnJvcl9maWVsZHxwZ19yZXN1bHRfc2Vla3xwZ19yZXN1bHRfc3RhdHVzfHBnX3NlbGVjdHxwZ19zZW5kX2V4ZWN1dGV8cGdfc2VuZF9wcmVwYXJlfHBnX3NlbmRfcXVlcnl8cGdfc2VuZF9xdWVyeV9wYXJhbXN8cGdfc2V0X2NsaWVudF9lbmNvZGluZ3xwZ19zZXRfZXJyb3JfdmVyYm9zaXR5fHBnX3RyYWNlfHBnX3RyYW5zYWN0aW9uX3N0YXR1c3xwZ190dHl8cGdfdW5lc2NhcGVfYnl0ZWF8cGdfdW50cmFjZXxwZ191cGRhdGV8cGdfdmVyc2lvbnxwaHBfY2hlY2tfc3ludGF4fHBocF9pbmlfbG9hZGVkX2ZpbGV8cGhwX2luaV9zY2FubmVkX2ZpbGVzfHBocF9sb2dvX2d1aWR8cGhwX3NhcGlfbmFtZXxwaHBfc3RyaXBfd2hpdGVzcGFjZXxwaHBfdW5hbWV8cGhwY3JlZGl0c3xwaHBpbmZvfHBocHZlcnNpb258cGl8cG5nMndibXB8cG9wZW58cG9zfHBvc2l4X2FjY2Vzc3xwb3NpeF9jdGVybWlkfHBvc2l4X2Vycm5vfHBvc2l4X2dldF9sYXN0X2Vycm9yfHBvc2l4X2dldGN3ZHxwb3NpeF9nZXRlZ2lkfHBvc2l4X2dldGV1aWR8cG9zaXhfZ2V0Z2lkfHBvc2l4X2dldGdyZ2lkfHBvc2l4X2dldGdybmFtfHBvc2l4X2dldGdyb3Vwc3xwb3NpeF9nZXRsb2dpbnxwb3NpeF9nZXRwZ2lkfHBvc2l4X2dldHBncnB8cG9zaXhfZ2V0cGlkfHBvc2l4X2dldHBwaWR8cG9zaXhfZ2V0cHduYW18cG9zaXhfZ2V0cHd1aWR8cG9zaXhfZ2V0cmxpbWl0fHBvc2l4X2dldHNpZHxwb3NpeF9nZXR1aWR8cG9zaXhfaW5pdGdyb3Vwc3xwb3NpeF9pc2F0dHl8cG9zaXhfa2lsbHxwb3NpeF9ta2ZpZm98cG9zaXhfbWtub2R8cG9zaXhfc2V0ZWdpZHxwb3NpeF9zZXRldWlkfHBvc2l4X3NldGdpZHxwb3NpeF9zZXRwZ2lkfHBvc2l4X3NldHNpZHxwb3NpeF9zZXR1aWR8cG9zaXhfc3RyZXJyb3J8cG9zaXhfdGltZXN8cG9zaXhfdHR5bmFtZXxwb3NpeF91bmFtZXxwb3d8cHJlZ19maWx0ZXJ8cHJlZ19ncmVwfHByZWdfbGFzdF9lcnJvcnxwcmVnX21hdGNofHByZWdfbWF0Y2hfYWxsfHByZWdfcXVvdGV8cHJlZ19yZXBsYWNlfHByZWdfcmVwbGFjZV9jYWxsYmFja3xwcmVnX3NwbGl0fHByZXZ8cHJpbnR8cHJpbnRfcnxwcmludGVyX2Fib3J0fHByaW50ZXJfY2xvc2V8cHJpbnRlcl9jcmVhdGVfYnJ1c2h8cHJpbnRlcl9jcmVhdGVfZGN8cHJpbnRlcl9jcmVhdGVfZm9udHxwcmludGVyX2NyZWF0ZV9wZW58cHJpbnRlcl9kZWxldGVfYnJ1c2h8cHJpbnRlcl9kZWxldGVfZGN8cHJpbnRlcl9kZWxldGVfZm9udHxwcmludGVyX2RlbGV0ZV9wZW58cHJpbnRlcl9kcmF3X2JtcHxwcmludGVyX2RyYXdfY2hvcmR8cHJpbnRlcl9kcmF3X2VsaXBzZXxwcmludGVyX2RyYXdfbGluZXxwcmludGVyX2RyYXdfcGllfHByaW50ZXJfZHJhd19yZWN0YW5nbGV8cHJpbnRlcl9kcmF3X3JvdW5kcmVjdHxwcmludGVyX2RyYXdfdGV4dHxwcmludGVyX2VuZF9kb2N8cHJpbnRlcl9lbmRfcGFnZXxwcmludGVyX2dldF9vcHRpb258cHJpbnRlcl9saXN0fHByaW50ZXJfbG9naWNhbF9mb250aGVpZ2h0fHByaW50ZXJfb3BlbnxwcmludGVyX3NlbGVjdF9icnVzaHxwcmludGVyX3NlbGVjdF9mb250fHByaW50ZXJfc2VsZWN0X3BlbnxwcmludGVyX3NldF9vcHRpb258cHJpbnRlcl9zdGFydF9kb2N8cHJpbnRlcl9zdGFydF9wYWdlfHByaW50ZXJfd3JpdGV8cHJpbnRmfHByb2NfY2xvc2V8cHJvY19nZXRfc3RhdHVzfHByb2NfbmljZXxwcm9jX29wZW58cHJvY190ZXJtaW5hdGV8cHJvcGVydHlfZXhpc3RzfHBzX2FkZF9ib29rbWFya3xwc19hZGRfbGF1bmNobGlua3xwc19hZGRfbG9jYWxsaW5rfHBzX2FkZF9ub3RlfHBzX2FkZF9wZGZsaW5rfHBzX2FkZF93ZWJsaW5rfHBzX2FyY3xwc19hcmNufHBzX2JlZ2luX3BhZ2V8cHNfYmVnaW5fcGF0dGVybnxwc19iZWdpbl90ZW1wbGF0ZXxwc19jaXJjbGV8cHNfY2xpcHxwc19jbG9zZXxwc19jbG9zZV9pbWFnZXxwc19jbG9zZXBhdGh8cHNfY2xvc2VwYXRoX3N0cm9rZXxwc19jb250aW51ZV90ZXh0fHBzX2N1cnZldG98cHNfZGVsZXRlfHBzX2VuZF9wYWdlfHBzX2VuZF9wYXR0ZXJufHBzX2VuZF90ZW1wbGF0ZXxwc19maWxsfHBzX2ZpbGxfc3Ryb2tlfHBzX2ZpbmRmb250fHBzX2dldF9idWZmZXJ8cHNfZ2V0X3BhcmFtZXRlcnxwc19nZXRfdmFsdWV8cHNfaHlwaGVuYXRlfHBzX2luY2x1ZGVfZmlsZXxwc19saW5ldG98cHNfbWFrZXNwb3Rjb2xvcnxwc19tb3ZldG98cHNfbmV3fHBzX29wZW5fZmlsZXxwc19vcGVuX2ltYWdlfHBzX29wZW5faW1hZ2VfZmlsZXxwc19vcGVuX21lbW9yeV9pbWFnZXxwc19wbGFjZV9pbWFnZXxwc19yZWN0fHBzX3Jlc3RvcmV8cHNfcm90YXRlfHBzX3NhdmV8cHNfc2NhbGV8cHNfc2V0X2JvcmRlcl9jb2xvcnxwc19zZXRfYm9yZGVyX2Rhc2h8cHNfc2V0X2JvcmRlcl9zdHlsZXxwc19zZXRfaW5mb3xwc19zZXRfcGFyYW1ldGVyfHBzX3NldF90ZXh0X3Bvc3xwc19zZXRfdmFsdWV8cHNfc2V0Y29sb3J8cHNfc2V0ZGFzaHxwc19zZXRmbGF0fHBzX3NldGZvbnR8cHNfc2V0Z3JheXxwc19zZXRsaW5lY2FwfHBzX3NldGxpbmVqb2lufHBzX3NldGxpbmV3aWR0aHxwc19zZXRtaXRlcmxpbWl0fHBzX3NldG92ZXJwcmludG1vZGV8cHNfc2V0cG9seWRhc2h8cHNfc2hhZGluZ3xwc19zaGFkaW5nX3BhdHRlcm58cHNfc2hmaWxsfHBzX3Nob3d8cHNfc2hvdzJ8cHNfc2hvd19ib3hlZHxwc19zaG93X3h5fHBzX3Nob3dfeHkyfHBzX3N0cmluZ19nZW9tZXRyeXxwc19zdHJpbmd3aWR0aHxwc19zdHJva2V8cHNfc3ltYm9sfHBzX3N5bWJvbF9uYW1lfHBzX3N5bWJvbF93aWR0aHxwc190cmFuc2xhdGV8cHNwZWxsX2FkZF90b19wZXJzb25hbHxwc3BlbGxfYWRkX3RvX3Nlc3Npb258cHNwZWxsX2NoZWNrfHBzcGVsbF9jbGVhcl9zZXNzaW9ufHBzcGVsbF9jb25maWdfY3JlYXRlfHBzcGVsbF9jb25maWdfZGF0YV9kaXJ8cHNwZWxsX2NvbmZpZ19kaWN0X2Rpcnxwc3BlbGxfY29uZmlnX2lnbm9yZXxwc3BlbGxfY29uZmlnX21vZGV8cHNwZWxsX2NvbmZpZ19wZXJzb25hbHxwc3BlbGxfY29uZmlnX3JlcGx8cHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcnxwc3BlbGxfY29uZmlnX3NhdmVfcmVwbHxwc3BlbGxfbmV3fHBzcGVsbF9uZXdfY29uZmlnfHBzcGVsbF9uZXdfcGVyc29uYWx8cHNwZWxsX3NhdmVfd29yZGxpc3R8cHNwZWxsX3N0b3JlX3JlcGxhY2VtZW50fHBzcGVsbF9zdWdnZXN0fHB1dGVudnxweF9jbG9zZXxweF9jcmVhdGVfZnB8cHhfZGF0ZTJzdHJpbmd8cHhfZGVsZXRlfHB4X2RlbGV0ZV9yZWNvcmR8cHhfZ2V0X2ZpZWxkfHB4X2dldF9pbmZvfHB4X2dldF9wYXJhbWV0ZXJ8cHhfZ2V0X3JlY29yZHxweF9nZXRfc2NoZW1hfHB4X2dldF92YWx1ZXxweF9pbnNlcnRfcmVjb3JkfHB4X25ld3xweF9udW1maWVsZHN8cHhfbnVtcmVjb3Jkc3xweF9vcGVuX2ZwfHB4X3B1dF9yZWNvcmR8cHhfcmV0cmlldmVfcmVjb3JkfHB4X3NldF9ibG9iX2ZpbGV8cHhfc2V0X3BhcmFtZXRlcnxweF9zZXRfdGFibGVuYW1lfHB4X3NldF90YXJnZXRlbmNvZGluZ3xweF9zZXRfdmFsdWV8cHhfdGltZXN0YW1wMnN0cmluZ3xweF91cGRhdGVfcmVjb3JkfHFkb21fZXJyb3J8cWRvbV90cmVlfHF1b3RlZF9wcmludGFibGVfZGVjb2RlfHF1b3RlZF9wcmludGFibGVfZW5jb2RlfHF1b3RlbWV0YXxyYWQyZGVnfHJhZGl1c19hY2N0X29wZW58cmFkaXVzX2FkZF9zZXJ2ZXJ8cmFkaXVzX2F1dGhfb3BlbnxyYWRpdXNfY2xvc2V8cmFkaXVzX2NvbmZpZ3xyYWRpdXNfY3JlYXRlX3JlcXVlc3R8cmFkaXVzX2N2dF9hZGRyfHJhZGl1c19jdnRfaW50fHJhZGl1c19jdnRfc3RyaW5nfHJhZGl1c19kZW1hbmdsZXxyYWRpdXNfZGVtYW5nbGVfbXBwZV9rZXl8cmFkaXVzX2dldF9hdHRyfHJhZGl1c19nZXRfdmVuZG9yX2F0dHJ8cmFkaXVzX3B1dF9hZGRyfHJhZGl1c19wdXRfYXR0cnxyYWRpdXNfcHV0X2ludHxyYWRpdXNfcHV0X3N0cmluZ3xyYWRpdXNfcHV0X3ZlbmRvcl9hZGRyfHJhZGl1c19wdXRfdmVuZG9yX2F0dHJ8cmFkaXVzX3B1dF92ZW5kb3JfaW50fHJhZGl1c19wdXRfdmVuZG9yX3N0cmluZ3xyYWRpdXNfcmVxdWVzdF9hdXRoZW50aWNhdG9yfHJhZGl1c19zZW5kX3JlcXVlc3R8cmFkaXVzX3NlcnZlcl9zZWNyZXR8cmFkaXVzX3N0cmVycm9yfHJhbmR8cmFuZ2V8cmFuZ2VleGNlcHRpb258cmFyX3dyYXBwZXJfY2FjaGVfc3RhdHN8cmFyYXJjaGl2ZXxyYXJlbnRyeXxyYXJleGNlcHRpb258cmF3dXJsZGVjb2RlfHJhd3VybGVuY29kZXxyZWFkX2V4aWZfZGF0YXxyZWFkZGlyfHJlYWRmaWxlfHJlYWRnemZpbGV8cmVhZGxpbmV8cmVhZGxpbmVfYWRkX2hpc3Rvcnl8cmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsfHJlYWRsaW5lX2NhbGxiYWNrX2hhbmRsZXJfcmVtb3ZlfHJlYWRsaW5lX2NhbGxiYWNrX3JlYWRfY2hhcnxyZWFkbGluZV9jbGVhcl9oaXN0b3J5fHJlYWRsaW5lX2NvbXBsZXRpb25fZnVuY3Rpb258cmVhZGxpbmVfaW5mb3xyZWFkbGluZV9saXN0X2hpc3Rvcnl8cmVhZGxpbmVfb25fbmV3X2xpbmV8cmVhZGxpbmVfcmVhZF9oaXN0b3J5fHJlYWRsaW5lX3JlZGlzcGxheXxyZWFkbGluZV93cml0ZV9oaXN0b3J5fHJlYWRsaW5rfHJlYWxwYXRofHJlYWxwYXRoX2NhY2hlX2dldHxyZWFscGF0aF9jYWNoZV9zaXplfHJlY29kZXxyZWNvZGVfZmlsZXxyZWNvZGVfc3RyaW5nfHJlY3Vyc2l2ZWFycmF5aXRlcmF0b3J8cmVjdXJzaXZlY2FjaGluZ2l0ZXJhdG9yfHJlY3Vyc2l2ZWNhbGxiYWNrZmlsdGVyaXRlcmF0b3J8cmVjdXJzaXZlZGlyZWN0b3J5aXRlcmF0b3J8cmVjdXJzaXZlZmlsdGVyaXRlcmF0b3J8cmVjdXJzaXZlaXRlcmF0b3J8cmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvcnxyZWN1cnNpdmVyZWdleGl0ZXJhdG9yfHJlY3Vyc2l2ZXRyZWVpdGVyYXRvcnxyZWZsZWN0aW9ufHJlZmxlY3Rpb25jbGFzc3xyZWZsZWN0aW9uZXhjZXB0aW9ufHJlZmxlY3Rpb25leHRlbnNpb258cmVmbGVjdGlvbmZ1bmN0aW9ufHJlZmxlY3Rpb25mdW5jdGlvbmFic3RyYWN0fHJlZmxlY3Rpb25tZXRob2R8cmVmbGVjdGlvbm9iamVjdHxyZWZsZWN0aW9ucGFyYW1ldGVyfHJlZmxlY3Rpb25wcm9wZXJ0eXxyZWZsZWN0b3J8cmVnZXhpdGVyYXRvcnxyZWdpc3Rlcl9zaHV0ZG93bl9mdW5jdGlvbnxyZWdpc3Rlcl90aWNrX2Z1bmN0aW9ufHJlbmFtZXxyZW5hbWVfZnVuY3Rpb258cmVxdWlyZXxyZXF1aXJlX29uY2V8cmVzZXR8cmVzZXRWYWx1ZXxyZXNvdXJjZWJ1bmRsZXxyZXN0b3JlX2Vycm9yX2hhbmRsZXJ8cmVzdG9yZV9leGNlcHRpb25faGFuZGxlcnxyZXN0b3JlX2luY2x1ZGVfcGF0aHxyZXR1cm58cmV3aW5kfHJld2luZGRpcnxybWRpcnxyb3VuZHxycG1fY2xvc2V8cnBtX2dldF90YWd8cnBtX2lzX3ZhbGlkfHJwbV9vcGVufHJwbV92ZXJzaW9ufHJyZF9jcmVhdGV8cnJkX2Vycm9yfHJyZF9mZXRjaHxycmRfZmlyc3R8cnJkX2dyYXBofHJyZF9pbmZvfHJyZF9sYXN0fHJyZF9sYXN0dXBkYXRlfHJyZF9yZXN0b3JlfHJyZF90dW5lfHJyZF91cGRhdGV8cnJkX3hwb3J0fHJyZGNyZWF0b3J8cnJkZ3JhcGh8cnJkdXBkYXRlcnxyc29ydHxydHJpbXxydW5raXRfY2xhc3NfYWRvcHR8cnVua2l0X2NsYXNzX2VtYW5jaXBhdGV8cnVua2l0X2NvbnN0YW50X2FkZHxydW5raXRfY29uc3RhbnRfcmVkZWZpbmV8cnVua2l0X2NvbnN0YW50X3JlbW92ZXxydW5raXRfZnVuY3Rpb25fYWRkfHJ1bmtpdF9mdW5jdGlvbl9jb3B5fHJ1bmtpdF9mdW5jdGlvbl9yZWRlZmluZXxydW5raXRfZnVuY3Rpb25fcmVtb3ZlfHJ1bmtpdF9mdW5jdGlvbl9yZW5hbWV8cnVua2l0X2ltcG9ydHxydW5raXRfbGludHxydW5raXRfbGludF9maWxlfHJ1bmtpdF9tZXRob2RfYWRkfHJ1bmtpdF9tZXRob2RfY29weXxydW5raXRfbWV0aG9kX3JlZGVmaW5lfHJ1bmtpdF9tZXRob2RfcmVtb3ZlfHJ1bmtpdF9tZXRob2RfcmVuYW1lfHJ1bmtpdF9yZXR1cm5fdmFsdWVfdXNlZHxydW5raXRfc2FuZGJveF9vdXRwdXRfaGFuZGxlcnxydW5raXRfc3VwZXJnbG9iYWxzfHJ1bnRpbWVleGNlcHRpb258c2FtY29ubmVjdGlvbl9jb21taXR8c2FtY29ubmVjdGlvbl9jb25uZWN0fHNhbWNvbm5lY3Rpb25fY29uc3RydWN0b3J8c2FtY29ubmVjdGlvbl9kaXNjb25uZWN0fHNhbWNvbm5lY3Rpb25fZXJybm98c2FtY29ubmVjdGlvbl9lcnJvcnxzYW1jb25uZWN0aW9uX2lzY29ubmVjdGVkfHNhbWNvbm5lY3Rpb25fcGVla3xzYW1jb25uZWN0aW9uX3BlZWthbGx8c2FtY29ubmVjdGlvbl9yZWNlaXZlfHNhbWNvbm5lY3Rpb25fcmVtb3ZlfHNhbWNvbm5lY3Rpb25fcm9sbGJhY2t8c2FtY29ubmVjdGlvbl9zZW5kfHNhbWNvbm5lY3Rpb25fc2V0RGVidWd8c2FtY29ubmVjdGlvbl9zdWJzY3JpYmV8c2FtY29ubmVjdGlvbl91bnN1YnNjcmliZXxzYW1tZXNzYWdlX2JvZHl8c2FtbWVzc2FnZV9jb25zdHJ1Y3RvcnxzYW1tZXNzYWdlX2hlYWRlcnxzY2FfY3JlYXRlZGF0YW9iamVjdHxzY2FfZ2V0c2VydmljZXxzY2FfbG9jYWxwcm94eV9jcmVhdGVkYXRhb2JqZWN0fHNjYV9zb2FwcHJveHlfY3JlYXRlZGF0YW9iamVjdHxzY2FuZGlyfHNkb19kYXNfY2hhbmdlc3VtbWFyeV9iZWdpbmxvZ2dpbmd8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2VuZGxvZ2dpbmd8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2dldGNoYW5nZWRkYXRhb2JqZWN0c3xzZG9fZGFzX2NoYW5nZXN1bW1hcnlfZ2V0Y2hhbmdldHlwZXxzZG9fZGFzX2NoYW5nZXN1bW1hcnlfZ2V0b2xkY29udGFpbmVyfHNkb19kYXNfY2hhbmdlc3VtbWFyeV9nZXRvbGR2YWx1ZXN8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2lzbG9nZ2luZ3xzZG9fZGFzX2RhdGFmYWN0b3J5X2FkZHByb3BlcnR5dG90eXBlfHNkb19kYXNfZGF0YWZhY3RvcnlfYWRkdHlwZXxzZG9fZGFzX2RhdGFmYWN0b3J5X2dldGRhdGFmYWN0b3J5fHNkb19kYXNfZGF0YW9iamVjdF9nZXRjaGFuZ2VzdW1tYXJ5fHNkb19kYXNfcmVsYXRpb25hbF9hcHBseWNoYW5nZXN8c2RvX2Rhc19yZWxhdGlvbmFsX2NvbnN0cnVjdHxzZG9fZGFzX3JlbGF0aW9uYWxfY3JlYXRlcm9vdGRhdGFvYmplY3R8c2RvX2Rhc19yZWxhdGlvbmFsX2V4ZWN1dGVwcmVwYXJlZHF1ZXJ5fHNkb19kYXNfcmVsYXRpb25hbF9leGVjdXRlcXVlcnl8c2RvX2Rhc19zZXR0aW5nX2dldGxpc3RpbmRleHxzZG9fZGFzX3NldHRpbmdfZ2V0cHJvcGVydHlpbmRleHxzZG9fZGFzX3NldHRpbmdfZ2V0cHJvcGVydHluYW1lfHNkb19kYXNfc2V0dGluZ19nZXR2YWx1ZXxzZG9fZGFzX3NldHRpbmdfaXNzZXR8c2RvX2Rhc194bWxfYWRkdHlwZXN8c2RvX2Rhc194bWxfY3JlYXRlfHNkb19kYXNfeG1sX2NyZWF0ZWRhdGFvYmplY3R8c2RvX2Rhc194bWxfY3JlYXRlZG9jdW1lbnR8c2RvX2Rhc194bWxfZG9jdW1lbnRfZ2V0cm9vdGRhdGFvYmplY3R8c2RvX2Rhc194bWxfZG9jdW1lbnRfZ2V0cm9vdGVsZW1lbnRuYW1lfHNkb19kYXNfeG1sX2RvY3VtZW50X2dldHJvb3RlbGVtZW50dXJpfHNkb19kYXNfeG1sX2RvY3VtZW50X3NldGVuY29kaW5nfHNkb19kYXNfeG1sX2RvY3VtZW50X3NldHhtbGRlY2xhcmF0aW9ufHNkb19kYXNfeG1sX2RvY3VtZW50X3NldHhtbHZlcnNpb258c2RvX2Rhc194bWxfbG9hZGZpbGV8c2RvX2Rhc194bWxfbG9hZHN0cmluZ3xzZG9fZGFzX3htbF9zYXZlZmlsZXxzZG9fZGFzX3htbF9zYXZlc3RyaW5nfHNkb19kYXRhZmFjdG9yeV9jcmVhdGV8c2RvX2RhdGFvYmplY3RfY2xlYXJ8c2RvX2RhdGFvYmplY3RfY3JlYXRlZGF0YW9iamVjdHxzZG9fZGF0YW9iamVjdF9nZXRjb250YWluZXJ8c2RvX2RhdGFvYmplY3RfZ2V0c2VxdWVuY2V8c2RvX2RhdGFvYmplY3RfZ2V0dHlwZW5hbWV8c2RvX2RhdGFvYmplY3RfZ2V0dHlwZW5hbWVzcGFjZXVyaXxzZG9fZXhjZXB0aW9uX2dldGNhdXNlfHNkb19saXN0X2luc2VydHxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0Y29udGFpbmluZ3R5cGV8c2RvX21vZGVsX3Byb3BlcnR5X2dldGRlZmF1bHR8c2RvX21vZGVsX3Byb3BlcnR5X2dldG5hbWV8c2RvX21vZGVsX3Byb3BlcnR5X2dldHR5cGV8c2RvX21vZGVsX3Byb3BlcnR5X2lzY29udGFpbm1lbnR8c2RvX21vZGVsX3Byb3BlcnR5X2lzbWFueXxzZG9fbW9kZWxfcmVmbGVjdGlvbmRhdGFvYmplY3RfY29uc3RydWN0fHNkb19tb2RlbF9yZWZsZWN0aW9uZGF0YW9iamVjdF9leHBvcnR8c2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2dldGNvbnRhaW5tZW50cHJvcGVydHl8c2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2dldGluc3RhbmNlcHJvcGVydGllc3xzZG9fbW9kZWxfcmVmbGVjdGlvbmRhdGFvYmplY3RfZ2V0dHlwZXxzZG9fbW9kZWxfdHlwZV9nZXRiYXNldHlwZXxzZG9fbW9kZWxfdHlwZV9nZXRuYW1lfHNkb19tb2RlbF90eXBlX2dldG5hbWVzcGFjZXVyaXxzZG9fbW9kZWxfdHlwZV9nZXRwcm9wZXJ0aWVzfHNkb19tb2RlbF90eXBlX2dldHByb3BlcnR5fHNkb19tb2RlbF90eXBlX2lzYWJzdHJhY3R0eXBlfHNkb19tb2RlbF90eXBlX2lzZGF0YXR5cGV8c2RvX21vZGVsX3R5cGVfaXNpbnN0YW5jZXxzZG9fbW9kZWxfdHlwZV9pc29wZW50eXBlfHNkb19tb2RlbF90eXBlX2lzc2VxdWVuY2VkdHlwZXxzZG9fc2VxdWVuY2VfZ2V0cHJvcGVydHl8c2RvX3NlcXVlbmNlX2luc2VydHxzZG9fc2VxdWVuY2VfbW92ZXxzZWVrYWJsZWl0ZXJhdG9yfHNlbV9hY3F1aXJlfHNlbV9nZXR8c2VtX3JlbGVhc2V8c2VtX3JlbW92ZXxzZXJpYWxpemFibGV8c2VyaWFsaXplfHNlc3Npb25fY2FjaGVfZXhwaXJlfHNlc3Npb25fY2FjaGVfbGltaXRlcnxzZXNzaW9uX2NvbW1pdHxzZXNzaW9uX2RlY29kZXxzZXNzaW9uX2Rlc3Ryb3l8c2Vzc2lvbl9lbmNvZGV8c2Vzc2lvbl9nZXRfY29va2llX3BhcmFtc3xzZXNzaW9uX2lkfHNlc3Npb25faXNfcmVnaXN0ZXJlZHxzZXNzaW9uX21vZHVsZV9uYW1lfHNlc3Npb25fbmFtZXxzZXNzaW9uX3Bnc3FsX2FkZF9lcnJvcnxzZXNzaW9uX3Bnc3FsX2dldF9lcnJvcnxzZXNzaW9uX3Bnc3FsX2dldF9maWVsZHxzZXNzaW9uX3Bnc3FsX3Jlc2V0fHNlc3Npb25fcGdzcWxfc2V0X2ZpZWxkfHNlc3Npb25fcGdzcWxfc3RhdHVzfHNlc3Npb25fcmVnZW5lcmF0ZV9pZHxzZXNzaW9uX3JlZ2lzdGVyfHNlc3Npb25fc2F2ZV9wYXRofHNlc3Npb25fc2V0X2Nvb2tpZV9wYXJhbXN8c2Vzc2lvbl9zZXRfc2F2ZV9oYW5kbGVyfHNlc3Npb25fc3RhcnR8c2Vzc2lvbl91bnJlZ2lzdGVyfHNlc3Npb25fdW5zZXR8c2Vzc2lvbl93cml0ZV9jbG9zZXxzZXRDb3VudGVyQ2xhc3N8c2V0X2Vycm9yX2hhbmRsZXJ8c2V0X2V4Y2VwdGlvbl9oYW5kbGVyfHNldF9maWxlX2J1ZmZlcnxzZXRfaW5jbHVkZV9wYXRofHNldF9tYWdpY19xdW90ZXNfcnVudGltZXxzZXRfc29ja2V0X2Jsb2NraW5nfHNldF90aW1lX2xpbWl0fHNldGNvb2tpZXxzZXRsb2NhbGV8c2V0cHJvY3RpdGxlfHNldHJhd2Nvb2tpZXxzZXRzdGF0aWNwcm9wZXJ0eXZhbHVlfHNldHRocmVhZHRpdGxlfHNldHR5cGV8c2hhMXxzaGExX2ZpbGV8c2hlbGxfZXhlY3xzaG1fYXR0YWNofHNobV9kZXRhY2h8c2htX2dldF92YXJ8c2htX2hhc192YXJ8c2htX3B1dF92YXJ8c2htX3JlbW92ZXxzaG1fcmVtb3ZlX3ZhcnxzaG1vcF9jbG9zZXxzaG1vcF9kZWxldGV8c2htb3Bfb3BlbnxzaG1vcF9yZWFkfHNobW9wX3NpemV8c2htb3Bfd3JpdGV8c2hvd19zb3VyY2V8c2h1ZmZsZXxzaWduZXVybHBhaWVtZW50fHNpbWlsYXJfdGV4dHxzaW1wbGV4bWxfaW1wb3J0X2RvbXxzaW1wbGV4bWxfbG9hZF9maWxlfHNpbXBsZXhtbF9sb2FkX3N0cmluZ3xzaW1wbGV4bWxlbGVtZW50fHNpbXBsZXhtbGl0ZXJhdG9yfHNpbnxzaW5ofHNpemVvZnxzbGVlcHxzbm1wfHNubXAyX2dldHxzbm1wMl9nZXRuZXh0fHNubXAyX3JlYWxfd2Fsa3xzbm1wMl9zZXR8c25tcDJfd2Fsa3xzbm1wM19nZXR8c25tcDNfZ2V0bmV4dHxzbm1wM19yZWFsX3dhbGt8c25tcDNfc2V0fHNubXAzX3dhbGt8c25tcF9nZXRfcXVpY2tfcHJpbnR8c25tcF9nZXRfdmFsdWVyZXRyaWV2YWx8c25tcF9yZWFkX21pYnxzbm1wX3NldF9lbnVtX3ByaW50fHNubXBfc2V0X29pZF9udW1lcmljX3ByaW50fHNubXBfc2V0X29pZF9vdXRwdXRfZm9ybWF0fHNubXBfc2V0X3F1aWNrX3ByaW50fHNubXBfc2V0X3ZhbHVlcmV0cmlldmFsfHNubXBnZXR8c25tcGdldG5leHR8c25tcHJlYWx3YWxrfHNubXBzZXR8c25tcHdhbGt8c25tcHdhbGtvaWR8c29hcGNsaWVudHxzb2FwZmF1bHR8c29hcGhlYWRlcnxzb2FwcGFyYW18c29hcHNlcnZlcnxzb2FwdmFyfHNvY2tldF9hY2NlcHR8c29ja2V0X2JpbmR8c29ja2V0X2NsZWFyX2Vycm9yfHNvY2tldF9jbG9zZXxzb2NrZXRfY29ubmVjdHxzb2NrZXRfY3JlYXRlfHNvY2tldF9jcmVhdGVfbGlzdGVufHNvY2tldF9jcmVhdGVfcGFpcnxzb2NrZXRfZ2V0X29wdGlvbnxzb2NrZXRfZ2V0X3N0YXR1c3xzb2NrZXRfZ2V0cGVlcm5hbWV8c29ja2V0X2dldHNvY2tuYW1lfHNvY2tldF9sYXN0X2Vycm9yfHNvY2tldF9saXN0ZW58c29ja2V0X3JlYWR8c29ja2V0X3JlY3Z8c29ja2V0X3JlY3Zmcm9tfHNvY2tldF9zZWxlY3R8c29ja2V0X3NlbmR8c29ja2V0X3NlbmR0b3xzb2NrZXRfc2V0X2Jsb2NrfHNvY2tldF9zZXRfYmxvY2tpbmd8c29ja2V0X3NldF9ub25ibG9ja3xzb2NrZXRfc2V0X29wdGlvbnxzb2NrZXRfc2V0X3RpbWVvdXR8c29ja2V0X3NodXRkb3dufHNvY2tldF9zdHJlcnJvcnxzb2NrZXRfd3JpdGV8c29scl9nZXRfdmVyc2lvbnxzb2xyY2xpZW50fHNvbHJjbGllbnRleGNlcHRpb258c29scmRvY3VtZW50fHNvbHJkb2N1bWVudGZpZWxkfHNvbHJleGNlcHRpb258c29scmdlbmVyaWNyZXNwb25zZXxzb2xyaWxsZWdhbGFyZ3VtZW50ZXhjZXB0aW9ufHNvbHJpbGxlZ2Fsb3BlcmF0aW9uZXhjZXB0aW9ufHNvbHJpbnB1dGRvY3VtZW50fHNvbHJtb2RpZmlhYmxlcGFyYW1zfHNvbHJvYmplY3R8c29scnBhcmFtc3xzb2xycGluZ3Jlc3BvbnNlfHNvbHJxdWVyeXxzb2xycXVlcnlyZXNwb25zZXxzb2xycmVzcG9uc2V8c29scnVwZGF0ZXJlc3BvbnNlfHNvbHJ1dGlsc3xzb3J0fHNvdW5kZXh8c3BoaW54Y2xpZW50fHNwbF9hdXRvbG9hZHxzcGxfYXV0b2xvYWRfY2FsbHxzcGxfYXV0b2xvYWRfZXh0ZW5zaW9uc3xzcGxfYXV0b2xvYWRfZnVuY3Rpb25zfHNwbF9hdXRvbG9hZF9yZWdpc3RlcnxzcGxfYXV0b2xvYWRfdW5yZWdpc3RlcnxzcGxfY2xhc3Nlc3xzcGxfb2JqZWN0X2hhc2h8c3BsYm9vbHxzcGxkb3VibHlsaW5rZWRsaXN0fHNwbGVudW18c3BsZmlsZWluZm98c3BsZmlsZW9iamVjdHxzcGxmaXhlZGFycmF5fHNwbGZsb2F0fHNwbGhlYXB8c3BsaW50fHNwbGl0fHNwbGl0aXxzcGxtYXhoZWFwfHNwbG1pbmhlYXB8c3Bsb2JqZWN0c3RvcmFnZXxzcGxvYnNlcnZlcnxzcGxwcmlvcml0eXF1ZXVlfHNwbHF1ZXVlfHNwbHN0YWNrfHNwbHN0cmluZ3xzcGxzdWJqZWN0fHNwbHRlbXBmaWxlb2JqZWN0fHNwb29mY2hlY2tlcnxzcHJpbnRmfHNxbF9yZWdjYXNlfHNxbGl0ZTN8c3FsaXRlM3Jlc3VsdHxzcWxpdGUzc3RtdHxzcWxpdGVfYXJyYXlfcXVlcnl8c3FsaXRlX2J1c3lfdGltZW91dHxzcWxpdGVfY2hhbmdlc3xzcWxpdGVfY2xvc2V8c3FsaXRlX2NvbHVtbnxzcWxpdGVfY3JlYXRlX2FnZ3JlZ2F0ZXxzcWxpdGVfY3JlYXRlX2Z1bmN0aW9ufHNxbGl0ZV9jdXJyZW50fHNxbGl0ZV9lcnJvcl9zdHJpbmd8c3FsaXRlX2VzY2FwZV9zdHJpbmd8c3FsaXRlX2V4ZWN8c3FsaXRlX2ZhY3Rvcnl8c3FsaXRlX2ZldGNoX2FsbHxzcWxpdGVfZmV0Y2hfYXJyYXl8c3FsaXRlX2ZldGNoX2NvbHVtbl90eXBlc3xzcWxpdGVfZmV0Y2hfb2JqZWN0fHNxbGl0ZV9mZXRjaF9zaW5nbGV8c3FsaXRlX2ZldGNoX3N0cmluZ3xzcWxpdGVfZmllbGRfbmFtZXxzcWxpdGVfaGFzX21vcmV8c3FsaXRlX2hhc19wcmV2fHNxbGl0ZV9rZXl8c3FsaXRlX2xhc3RfZXJyb3J8c3FsaXRlX2xhc3RfaW5zZXJ0X3Jvd2lkfHNxbGl0ZV9saWJlbmNvZGluZ3xzcWxpdGVfbGlidmVyc2lvbnxzcWxpdGVfbmV4dHxzcWxpdGVfbnVtX2ZpZWxkc3xzcWxpdGVfbnVtX3Jvd3N8c3FsaXRlX29wZW58c3FsaXRlX3BvcGVufHNxbGl0ZV9wcmV2fHNxbGl0ZV9xdWVyeXxzcWxpdGVfcmV3aW5kfHNxbGl0ZV9zZWVrfHNxbGl0ZV9zaW5nbGVfcXVlcnl8c3FsaXRlX3VkZl9kZWNvZGVfYmluYXJ5fHNxbGl0ZV91ZGZfZW5jb2RlX2JpbmFyeXxzcWxpdGVfdW5idWZmZXJlZF9xdWVyeXxzcWxpdGVfdmFsaWR8c3FydHxzcmFuZHxzc2NhbmZ8c3NkZWVwX2Z1enp5X2NvbXBhcmV8c3NkZWVwX2Z1enp5X2hhc2h8c3NkZWVwX2Z1enp5X2hhc2hfZmlsZW5hbWV8c3NoMl9hdXRoX2hvc3RiYXNlZF9maWxlfHNzaDJfYXV0aF9ub25lfHNzaDJfYXV0aF9wYXNzd29yZHxzc2gyX2F1dGhfcHVia2V5X2ZpbGV8c3NoMl9jb25uZWN0fHNzaDJfZXhlY3xzc2gyX2ZldGNoX3N0cmVhbXxzc2gyX2ZpbmdlcnByaW50fHNzaDJfbWV0aG9kc19uZWdvdGlhdGVkfHNzaDJfcHVibGlja2V5X2FkZHxzc2gyX3B1YmxpY2tleV9pbml0fHNzaDJfcHVibGlja2V5X2xpc3R8c3NoMl9wdWJsaWNrZXlfcmVtb3ZlfHNzaDJfc2NwX3JlY3Z8c3NoMl9zY3Bfc2VuZHxzc2gyX3NmdHB8c3NoMl9zZnRwX2xzdGF0fHNzaDJfc2Z0cF9ta2Rpcnxzc2gyX3NmdHBfcmVhZGxpbmt8c3NoMl9zZnRwX3JlYWxwYXRofHNzaDJfc2Z0cF9yZW5hbWV8c3NoMl9zZnRwX3JtZGlyfHNzaDJfc2Z0cF9zdGF0fHNzaDJfc2Z0cF9zeW1saW5rfHNzaDJfc2Z0cF91bmxpbmt8c3NoMl9zaGVsbHxzc2gyX3R1bm5lbHxzdGF0fHN0YXRzX2Fic29sdXRlX2RldmlhdGlvbnxzdGF0c19jZGZfYmV0YXxzdGF0c19jZGZfYmlub21pYWx8c3RhdHNfY2RmX2NhdWNoeXxzdGF0c19jZGZfY2hpc3F1YXJlfHN0YXRzX2NkZl9leHBvbmVudGlhbHxzdGF0c19jZGZfZnxzdGF0c19jZGZfZ2FtbWF8c3RhdHNfY2RmX2xhcGxhY2V8c3RhdHNfY2RmX2xvZ2lzdGljfHN0YXRzX2NkZl9uZWdhdGl2ZV9iaW5vbWlhbHxzdGF0c19jZGZfbm9uY2VudHJhbF9jaGlzcXVhcmV8c3RhdHNfY2RmX25vbmNlbnRyYWxfZnxzdGF0c19jZGZfcG9pc3NvbnxzdGF0c19jZGZfdHxzdGF0c19jZGZfdW5pZm9ybXxzdGF0c19jZGZfd2VpYnVsbHxzdGF0c19jb3ZhcmlhbmNlfHN0YXRzX2Rlbl91bmlmb3JtfHN0YXRzX2RlbnNfYmV0YXxzdGF0c19kZW5zX2NhdWNoeXxzdGF0c19kZW5zX2NoaXNxdWFyZXxzdGF0c19kZW5zX2V4cG9uZW50aWFsfHN0YXRzX2RlbnNfZnxzdGF0c19kZW5zX2dhbW1hfHN0YXRzX2RlbnNfbGFwbGFjZXxzdGF0c19kZW5zX2xvZ2lzdGljfHN0YXRzX2RlbnNfbmVnYXRpdmVfYmlub21pYWx8c3RhdHNfZGVuc19ub3JtYWx8c3RhdHNfZGVuc19wbWZfYmlub21pYWx8c3RhdHNfZGVuc19wbWZfaHlwZXJnZW9tZXRyaWN8c3RhdHNfZGVuc19wbWZfcG9pc3NvbnxzdGF0c19kZW5zX3R8c3RhdHNfZGVuc193ZWlidWxsfHN0YXRzX2hhcm1vbmljX21lYW58c3RhdHNfa3VydG9zaXN8c3RhdHNfcmFuZF9nZW5fYmV0YXxzdGF0c19yYW5kX2dlbl9jaGlzcXVhcmV8c3RhdHNfcmFuZF9nZW5fZXhwb25lbnRpYWx8c3RhdHNfcmFuZF9nZW5fZnxzdGF0c19yYW5kX2dlbl9mdW5pZm9ybXxzdGF0c19yYW5kX2dlbl9nYW1tYXxzdGF0c19yYW5kX2dlbl9pYmlub21pYWx8c3RhdHNfcmFuZF9nZW5faWJpbm9taWFsX25lZ2F0aXZlfHN0YXRzX3JhbmRfZ2VuX2ludHxzdGF0c19yYW5kX2dlbl9pcG9pc3NvbnxzdGF0c19yYW5kX2dlbl9pdW5pZm9ybXxzdGF0c19yYW5kX2dlbl9ub25jZW5yYWxfY2hpc3F1YXJlfHN0YXRzX3JhbmRfZ2VuX25vbmNlbnRyYWxfZnxzdGF0c19yYW5kX2dlbl9ub25jZW50cmFsX3R8c3RhdHNfcmFuZF9nZW5fbm9ybWFsfHN0YXRzX3JhbmRfZ2VuX3R8c3RhdHNfcmFuZF9nZXRfc2VlZHN8c3RhdHNfcmFuZF9waHJhc2VfdG9fc2VlZHN8c3RhdHNfcmFuZF9yYW5mfHN0YXRzX3JhbmRfc2V0YWxsfHN0YXRzX3NrZXd8c3RhdHNfc3RhbmRhcmRfZGV2aWF0aW9ufHN0YXRzX3N0YXRfYmlub21pYWxfY29lZnxzdGF0c19zdGF0X2NvcnJlbGF0aW9ufHN0YXRzX3N0YXRfZ2VubmNofHN0YXRzX3N0YXRfaW5kZXBlbmRlbnRfdHxzdGF0c19zdGF0X2lubmVycHJvZHVjdHxzdGF0c19zdGF0X25vbmNlbnRyYWxfdHxzdGF0c19zdGF0X3BhaXJlZF90fHN0YXRzX3N0YXRfcGVyY2VudGlsZXxzdGF0c19zdGF0X3Bvd2Vyc3VtfHN0YXRzX3ZhcmlhbmNlfHN0b21wfHN0b21wX2Nvbm5lY3RfZXJyb3J8c3RvbXBfdmVyc2lvbnxzdG9tcGV4Y2VwdGlvbnxzdG9tcGZyYW1lfHN0cl9nZXRjc3Z8c3RyX2lyZXBsYWNlfHN0cl9wYWR8c3RyX3JlcGVhdHxzdHJfcmVwbGFjZXxzdHJfcm90MTN8c3RyX3NodWZmbGV8c3RyX3NwbGl0fHN0cl93b3JkX2NvdW50fHN0cmNhc2VjbXB8c3RyY2hyfHN0cmNtcHxzdHJjb2xsfHN0cmNzcG58c3RyZWFtX2J1Y2tldF9hcHBlbmR8c3RyZWFtX2J1Y2tldF9tYWtlX3dyaXRlYWJsZXxzdHJlYW1fYnVja2V0X25ld3xzdHJlYW1fYnVja2V0X3ByZXBlbmR8c3RyZWFtX2NvbnRleHRfY3JlYXRlfHN0cmVhbV9jb250ZXh0X2dldF9kZWZhdWx0fHN0cmVhbV9jb250ZXh0X2dldF9vcHRpb25zfHN0cmVhbV9jb250ZXh0X2dldF9wYXJhbXN8c3RyZWFtX2NvbnRleHRfc2V0X2RlZmF1bHR8c3RyZWFtX2NvbnRleHRfc2V0X29wdGlvbnxzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zfHN0cmVhbV9jb3B5X3RvX3N0cmVhbXxzdHJlYW1fZW5jb2Rpbmd8c3RyZWFtX2ZpbHRlcl9hcHBlbmR8c3RyZWFtX2ZpbHRlcl9wcmVwZW5kfHN0cmVhbV9maWx0ZXJfcmVnaXN0ZXJ8c3RyZWFtX2ZpbHRlcl9yZW1vdmV8c3RyZWFtX2dldF9jb250ZW50c3xzdHJlYW1fZ2V0X2ZpbHRlcnN8c3RyZWFtX2dldF9saW5lfHN0cmVhbV9nZXRfbWV0YV9kYXRhfHN0cmVhbV9nZXRfdHJhbnNwb3J0c3xzdHJlYW1fZ2V0X3dyYXBwZXJzfHN0cmVhbV9pc19sb2NhbHxzdHJlYW1fbm90aWZpY2F0aW9uX2NhbGxiYWNrfHN0cmVhbV9yZWdpc3Rlcl93cmFwcGVyfHN0cmVhbV9yZXNvbHZlX2luY2x1ZGVfcGF0aHxzdHJlYW1fc2VsZWN0fHN0cmVhbV9zZXRfYmxvY2tpbmd8c3RyZWFtX3NldF9yZWFkX2J1ZmZlcnxzdHJlYW1fc2V0X3RpbWVvdXR8c3RyZWFtX3NldF93cml0ZV9idWZmZXJ8c3RyZWFtX3NvY2tldF9hY2NlcHR8c3RyZWFtX3NvY2tldF9jbGllbnR8c3RyZWFtX3NvY2tldF9lbmFibGVfY3J5cHRvfHN0cmVhbV9zb2NrZXRfZ2V0X25hbWV8c3RyZWFtX3NvY2tldF9wYWlyfHN0cmVhbV9zb2NrZXRfcmVjdmZyb218c3RyZWFtX3NvY2tldF9zZW5kdG98c3RyZWFtX3NvY2tldF9zZXJ2ZXJ8c3RyZWFtX3NvY2tldF9zaHV0ZG93bnxzdHJlYW1fc3VwcG9ydHNfbG9ja3xzdHJlYW1fd3JhcHBlcl9yZWdpc3RlcnxzdHJlYW1fd3JhcHBlcl9yZXN0b3JlfHN0cmVhbV93cmFwcGVyX3VucmVnaXN0ZXJ8c3RyZWFtd3JhcHBlcnxzdHJmdGltZXxzdHJpcF90YWdzfHN0cmlwY3NsYXNoZXN8c3RyaXBvc3xzdHJpcHNsYXNoZXN8c3RyaXN0cnxzdHJsZW58c3RybmF0Y2FzZWNtcHxzdHJuYXRjbXB8c3RybmNhc2VjbXB8c3RybmNtcHxzdHJwYnJrfHN0cnBvc3xzdHJwdGltZXxzdHJyY2hyfHN0cnJldnxzdHJyaXBvc3xzdHJycG9zfHN0cnNwbnxzdHJzdHJ8c3RydG9rfHN0cnRvbG93ZXJ8c3RydG90aW1lfHN0cnRvdXBwZXJ8c3RydHJ8c3RydmFsfHN1YnN0cnxzdWJzdHJfY29tcGFyZXxzdWJzdHJfY291bnR8c3Vic3RyX3JlcGxhY2V8c3ZtfHN2bW1vZGVsfHN2bl9hZGR8c3ZuX2F1dGhfZ2V0X3BhcmFtZXRlcnxzdm5fYXV0aF9zZXRfcGFyYW1ldGVyfHN2bl9ibGFtZXxzdm5fY2F0fHN2bl9jaGVja291dHxzdm5fY2xlYW51cHxzdm5fY2xpZW50X3ZlcnNpb258c3ZuX2NvbW1pdHxzdm5fZGVsZXRlfHN2bl9kaWZmfHN2bl9leHBvcnR8c3ZuX2ZzX2Fib3J0X3R4bnxzdm5fZnNfYXBwbHlfdGV4dHxzdm5fZnNfYmVnaW5fdHhuMnxzdm5fZnNfY2hhbmdlX25vZGVfcHJvcHxzdm5fZnNfY2hlY2tfcGF0aHxzdm5fZnNfY29udGVudHNfY2hhbmdlZHxzdm5fZnNfY29weXxzdm5fZnNfZGVsZXRlfHN2bl9mc19kaXJfZW50cmllc3xzdm5fZnNfZmlsZV9jb250ZW50c3xzdm5fZnNfZmlsZV9sZW5ndGh8c3ZuX2ZzX2lzX2Rpcnxzdm5fZnNfaXNfZmlsZXxzdm5fZnNfbWFrZV9kaXJ8c3ZuX2ZzX21ha2VfZmlsZXxzdm5fZnNfbm9kZV9jcmVhdGVkX3Jldnxzdm5fZnNfbm9kZV9wcm9wfHN2bl9mc19wcm9wc19jaGFuZ2VkfHN2bl9mc19yZXZpc2lvbl9wcm9wfHN2bl9mc19yZXZpc2lvbl9yb290fHN2bl9mc190eG5fcm9vdHxzdm5fZnNfeW91bmdlc3RfcmV2fHN2bl9pbXBvcnR8c3ZuX2xvZ3xzdm5fbHN8c3ZuX21rZGlyfHN2bl9yZXBvc19jcmVhdGV8c3ZuX3JlcG9zX2ZzfHN2bl9yZXBvc19mc19iZWdpbl90eG5fZm9yX2NvbW1pdHxzdm5fcmVwb3NfZnNfY29tbWl0X3R4bnxzdm5fcmVwb3NfaG90Y29weXxzdm5fcmVwb3Nfb3Blbnxzdm5fcmVwb3NfcmVjb3Zlcnxzdm5fcmV2ZXJ0fHN2bl9zdGF0dXN8c3ZuX3VwZGF0ZXxzd2ZfYWN0aW9uZ2V0dXJsfHN3Zl9hY3Rpb25nb3RvZnJhbWV8c3dmX2FjdGlvbmdvdG9sYWJlbHxzd2ZfYWN0aW9ubmV4dGZyYW1lfHN3Zl9hY3Rpb25wbGF5fHN3Zl9hY3Rpb25wcmV2ZnJhbWV8c3dmX2FjdGlvbnNldHRhcmdldHxzd2ZfYWN0aW9uc3RvcHxzd2ZfYWN0aW9udG9nZ2xlcXVhbGl0eXxzd2ZfYWN0aW9ud2FpdGZvcmZyYW1lfHN3Zl9hZGRidXR0b25yZWNvcmR8c3dmX2FkZGNvbG9yfHN3Zl9jbG9zZWZpbGV8c3dmX2RlZmluZWJpdG1hcHxzd2ZfZGVmaW5lZm9udHxzd2ZfZGVmaW5lbGluZXxzd2ZfZGVmaW5lcG9seXxzd2ZfZGVmaW5lcmVjdHxzd2ZfZGVmaW5ldGV4dHxzd2ZfZW5kYnV0dG9ufHN3Zl9lbmRkb2FjdGlvbnxzd2ZfZW5kc2hhcGV8c3dmX2VuZHN5bWJvbHxzd2ZfZm9udHNpemV8c3dmX2ZvbnRzbGFudHxzd2ZfZm9udHRyYWNraW5nfHN3Zl9nZXRiaXRtYXBpbmZvfHN3Zl9nZXRmb250aW5mb3xzd2ZfZ2V0ZnJhbWV8c3dmX2xhYmVsZnJhbWV8c3dmX2xvb2thdHxzd2ZfbW9kaWZ5b2JqZWN0fHN3Zl9tdWxjb2xvcnxzd2ZfbmV4dGlkfHN3Zl9vbmNvbmRpdGlvbnxzd2Zfb3BlbmZpbGV8c3dmX29ydGhvfHN3Zl9vcnRobzJ8c3dmX3BlcnNwZWN0aXZlfHN3Zl9wbGFjZW9iamVjdHxzd2ZfcG9sYXJ2aWV3fHN3Zl9wb3BtYXRyaXh8c3dmX3Bvc3JvdW5kfHN3Zl9wdXNobWF0cml4fHN3Zl9yZW1vdmVvYmplY3R8c3dmX3JvdGF0ZXxzd2Zfc2NhbGV8c3dmX3NldGZvbnR8c3dmX3NldGZyYW1lfHN3Zl9zaGFwZWFyY3xzd2Zfc2hhcGVjdXJ2ZXRvfHN3Zl9zaGFwZWN1cnZldG8zfHN3Zl9zaGFwZWZpbGxiaXRtYXBjbGlwfHN3Zl9zaGFwZWZpbGxiaXRtYXB0aWxlfHN3Zl9zaGFwZWZpbGxvZmZ8c3dmX3NoYXBlZmlsbHNvbGlkfHN3Zl9zaGFwZWxpbmVzb2xpZHxzd2Zfc2hhcGVsaW5ldG98c3dmX3NoYXBlbW92ZXRvfHN3Zl9zaG93ZnJhbWV8c3dmX3N0YXJ0YnV0dG9ufHN3Zl9zdGFydGRvYWN0aW9ufHN3Zl9zdGFydHNoYXBlfHN3Zl9zdGFydHN5bWJvbHxzd2ZfdGV4dHdpZHRofHN3Zl90cmFuc2xhdGV8c3dmX3ZpZXdwb3J0fHN3ZmFjdGlvbnxzd2ZiaXRtYXB8c3dmYnV0dG9ufHN3ZmRpc3BsYXlpdGVtfHN3ZmZpbGx8c3dmZm9udHxzd2Zmb250Y2hhcnxzd2ZncmFkaWVudHxzd2Ztb3JwaHxzd2Ztb3ZpZXxzd2ZwcmVidWlsdGNsaXB8c3dmc2hhcGV8c3dmc291bmR8c3dmc291bmRpbnN0YW5jZXxzd2ZzcHJpdGV8c3dmdGV4dHxzd2Z0ZXh0ZmllbGR8c3dmdmlkZW9zdHJlYW18c3dpc2hfY29uc3RydWN0fHN3aXNoX2dldG1ldGFsaXN0fHN3aXNoX2dldHByb3BlcnR5bGlzdHxzd2lzaF9wcmVwYXJlfHN3aXNoX3F1ZXJ5fHN3aXNocmVzdWx0X2dldG1ldGFsaXN0fHN3aXNocmVzdWx0X3N0ZW18c3dpc2hyZXN1bHRzX2dldHBhcnNlZHdvcmRzfHN3aXNocmVzdWx0c19nZXRyZW1vdmVkc3RvcHdvcmRzfHN3aXNocmVzdWx0c19uZXh0cmVzdWx0fHN3aXNocmVzdWx0c19zZWVrcmVzdWx0fHN3aXNoc2VhcmNoX2V4ZWN1dGV8c3dpc2hzZWFyY2hfcmVzZXRsaW1pdHxzd2lzaHNlYXJjaF9zZXRsaW1pdHxzd2lzaHNlYXJjaF9zZXRwaHJhc2VkZWxpbWl0ZXJ8c3dpc2hzZWFyY2hfc2V0c29ydHxzd2lzaHNlYXJjaF9zZXRzdHJ1Y3R1cmV8c3liYXNlX2FmZmVjdGVkX3Jvd3N8c3liYXNlX2Nsb3NlfHN5YmFzZV9jb25uZWN0fHN5YmFzZV9kYXRhX3NlZWt8c3liYXNlX2RlYWRsb2NrX3JldHJ5X2NvdW50fHN5YmFzZV9mZXRjaF9hcnJheXxzeWJhc2VfZmV0Y2hfYXNzb2N8c3liYXNlX2ZldGNoX2ZpZWxkfHN5YmFzZV9mZXRjaF9vYmplY3R8c3liYXNlX2ZldGNoX3Jvd3xzeWJhc2VfZmllbGRfc2Vla3xzeWJhc2VfZnJlZV9yZXN1bHR8c3liYXNlX2dldF9sYXN0X21lc3NhZ2V8c3liYXNlX21pbl9jbGllbnRfc2V2ZXJpdHl8c3liYXNlX21pbl9lcnJvcl9zZXZlcml0eXxzeWJhc2VfbWluX21lc3NhZ2Vfc2V2ZXJpdHl8c3liYXNlX21pbl9zZXJ2ZXJfc2V2ZXJpdHl8c3liYXNlX251bV9maWVsZHN8c3liYXNlX251bV9yb3dzfHN5YmFzZV9wY29ubmVjdHxzeWJhc2VfcXVlcnl8c3liYXNlX3Jlc3VsdHxzeWJhc2Vfc2VsZWN0X2RifHN5YmFzZV9zZXRfbWVzc2FnZV9oYW5kbGVyfHN5YmFzZV91bmJ1ZmZlcmVkX3F1ZXJ5fHN5bWxpbmt8c3lzX2dldF90ZW1wX2RpcnxzeXNfZ2V0bG9hZGF2Z3xzeXNsb2d8c3lzdGVtfHRhZ3x0YW58dGFuaHx0Y3B3cmFwX2NoZWNrfHRlbXBuYW18dGV4dGRvbWFpbnx0aWR5fHRpZHlfYWNjZXNzX2NvdW50fHRpZHlfY29uZmlnX2NvdW50fHRpZHlfZGlhZ25vc2V8dGlkeV9lcnJvcl9jb3VudHx0aWR5X2dldF9lcnJvcl9idWZmZXJ8dGlkeV9nZXRfb3V0cHV0fHRpZHlfbG9hZF9jb25maWd8dGlkeV9yZXNldF9jb25maWd8dGlkeV9zYXZlX2NvbmZpZ3x0aWR5X3NldF9lbmNvZGluZ3x0aWR5X3NldG9wdHx0aWR5X3dhcm5pbmdfY291bnR8dGlkeW5vZGV8dGltZXx0aW1lX25hbm9zbGVlcHx0aW1lX3NsZWVwX3VudGlsfHRpbWV6b25lX2FiYnJldmlhdGlvbnNfbGlzdHx0aW1lem9uZV9pZGVudGlmaWVyc19saXN0fHRpbWV6b25lX2xvY2F0aW9uX2dldHx0aW1lem9uZV9uYW1lX2Zyb21fYWJicnx0aW1lem9uZV9uYW1lX2dldHx0aW1lem9uZV9vZmZzZXRfZ2V0fHRpbWV6b25lX29wZW58dGltZXpvbmVfdHJhbnNpdGlvbnNfZ2V0fHRpbWV6b25lX3ZlcnNpb25fZ2V0fHRtcGZpbGV8dG9rZW5fZ2V0X2FsbHx0b2tlbl9uYW1lfHRva3lvdHlyYW50fHRva3lvdHlyYW50cXVlcnl8dG9reW90eXJhbnR0YWJsZXx0b3N0cmluZ3x0b3N0cmluZ3x0b3VjaHx0cmFuc2xpdGVyYXRvcnx0cmF2ZXJzYWJsZXx0cmlnZ2VyX2Vycm9yfHRyaW18dWFzb3J0fHVjZmlyc3R8dWN3b3Jkc3x1ZG1fYWRkX3NlYXJjaF9saW1pdHx1ZG1fYWxsb2NfYWdlbnR8dWRtX2FsbG9jX2FnZW50X2FycmF5fHVkbV9hcGlfdmVyc2lvbnx1ZG1fY2F0X2xpc3R8dWRtX2NhdF9wYXRofHVkbV9jaGVja19jaGFyc2V0fHVkbV9jaGVja19zdG9yZWR8dWRtX2NsZWFyX3NlYXJjaF9saW1pdHN8dWRtX2Nsb3NlX3N0b3JlZHx1ZG1fY3JjMzJ8dWRtX2Vycm5vfHVkbV9lcnJvcnx1ZG1fZmluZHx1ZG1fZnJlZV9hZ2VudHx1ZG1fZnJlZV9pc3BlbGxfZGF0YXx1ZG1fZnJlZV9yZXN8dWRtX2dldF9kb2NfY291bnR8dWRtX2dldF9yZXNfZmllbGR8dWRtX2dldF9yZXNfcGFyYW18dWRtX2hhc2gzMnx1ZG1fbG9hZF9pc3BlbGxfZGF0YXx1ZG1fb3Blbl9zdG9yZWR8dWRtX3NldF9hZ2VudF9wYXJhbXx1a3NvcnR8dW1hc2t8dW5kZXJmbG93ZXhjZXB0aW9ufHVuZXhwZWN0ZWR2YWx1ZWV4Y2VwdGlvbnx1bmlxaWR8dW5peHRvamR8dW5saW5rfHVucGFja3x1bnJlZ2lzdGVyX3RpY2tfZnVuY3Rpb258dW5zZXJpYWxpemV8dW5zZXR8dXJsZGVjb2RlfHVybGVuY29kZXx1c2Vfc29hcF9lcnJvcl9oYW5kbGVyfHVzZXJfZXJyb3J8dXNsZWVwfHVzb3J0fHV0ZjhfZGVjb2RlfHV0ZjhfZW5jb2RlfHY4anN8djhqc2V4Y2VwdGlvbnx2YXJfZHVtcHx2YXJfZXhwb3J0fHZhcmlhbnR8dmFyaWFudF9hYnN8dmFyaWFudF9hZGR8dmFyaWFudF9hbmR8dmFyaWFudF9jYXN0fHZhcmlhbnRfY2F0fHZhcmlhbnRfY21wfHZhcmlhbnRfZGF0ZV9mcm9tX3RpbWVzdGFtcHx2YXJpYW50X2RhdGVfdG9fdGltZXN0YW1wfHZhcmlhbnRfZGl2fHZhcmlhbnRfZXF2fHZhcmlhbnRfZml4fHZhcmlhbnRfZ2V0X3R5cGV8dmFyaWFudF9pZGl2fHZhcmlhbnRfaW1wfHZhcmlhbnRfaW50fHZhcmlhbnRfbW9kfHZhcmlhbnRfbXVsfHZhcmlhbnRfbmVnfHZhcmlhbnRfbm90fHZhcmlhbnRfb3J8dmFyaWFudF9wb3d8dmFyaWFudF9yb3VuZHx2YXJpYW50X3NldHx2YXJpYW50X3NldF90eXBlfHZhcmlhbnRfc3VifHZhcmlhbnRfeG9yfHZlcnNpb25fY29tcGFyZXx2ZnByaW50Znx2aXJ0dWFsfHZwb3BtYWlsX2FkZF9hbGlhc19kb21haW58dnBvcG1haWxfYWRkX2FsaWFzX2RvbWFpbl9leHx2cG9wbWFpbF9hZGRfZG9tYWlufHZwb3BtYWlsX2FkZF9kb21haW5fZXh8dnBvcG1haWxfYWRkX3VzZXJ8dnBvcG1haWxfYWxpYXNfYWRkfHZwb3BtYWlsX2FsaWFzX2RlbHx2cG9wbWFpbF9hbGlhc19kZWxfZG9tYWlufHZwb3BtYWlsX2FsaWFzX2dldHx2cG9wbWFpbF9hbGlhc19nZXRfYWxsfHZwb3BtYWlsX2F1dGhfdXNlcnx2cG9wbWFpbF9kZWxfZG9tYWlufHZwb3BtYWlsX2RlbF9kb21haW5fZXh8dnBvcG1haWxfZGVsX3VzZXJ8dnBvcG1haWxfZXJyb3J8dnBvcG1haWxfcGFzc3dkfHZwb3BtYWlsX3NldF91c2VyX3F1b3RhfHZwcmludGZ8dnNwcmludGZ8dzMyYXBpX2RlZnR5cGV8dzMyYXBpX2luaXRfZHR5cGV8dzMyYXBpX2ludm9rZV9mdW5jdGlvbnx3MzJhcGlfcmVnaXN0ZXJfZnVuY3Rpb258dzMyYXBpX3NldF9jYWxsX21ldGhvZHx3ZGR4X2FkZF92YXJzfHdkZHhfZGVzZXJpYWxpemV8d2RkeF9wYWNrZXRfZW5kfHdkZHhfcGFja2V0X3N0YXJ0fHdkZHhfc2VyaWFsaXplX3ZhbHVlfHdkZHhfc2VyaWFsaXplX3ZhcnN8d2luMzJfY29udGludWVfc2VydmljZXx3aW4zMl9jcmVhdGVfc2VydmljZXx3aW4zMl9kZWxldGVfc2VydmljZXx3aW4zMl9nZXRfbGFzdF9jb250cm9sX21lc3NhZ2V8d2luMzJfcGF1c2Vfc2VydmljZXx3aW4zMl9wc19saXN0X3Byb2NzfHdpbjMyX3BzX3N0YXRfbWVtfHdpbjMyX3BzX3N0YXRfcHJvY3x3aW4zMl9xdWVyeV9zZXJ2aWNlX3N0YXR1c3x3aW4zMl9zZXRfc2VydmljZV9zdGF0dXN8d2luMzJfc3RhcnRfc2VydmljZXx3aW4zMl9zdGFydF9zZXJ2aWNlX2N0cmxfZGlzcGF0Y2hlcnx3aW4zMl9zdG9wX3NlcnZpY2V8d2luY2FjaGVfZmNhY2hlX2ZpbGVpbmZvfHdpbmNhY2hlX2ZjYWNoZV9tZW1pbmZvfHdpbmNhY2hlX2xvY2t8d2luY2FjaGVfb2NhY2hlX2ZpbGVpbmZvfHdpbmNhY2hlX29jYWNoZV9tZW1pbmZvfHdpbmNhY2hlX3JlZnJlc2hfaWZfY2hhbmdlZHx3aW5jYWNoZV9ycGxpc3RfZmlsZWluZm98d2luY2FjaGVfcnBsaXN0X21lbWluZm98d2luY2FjaGVfc2NhY2hlX2luZm98d2luY2FjaGVfc2NhY2hlX21lbWluZm98d2luY2FjaGVfdWNhY2hlX2FkZHx3aW5jYWNoZV91Y2FjaGVfY2FzfHdpbmNhY2hlX3VjYWNoZV9jbGVhcnx3aW5jYWNoZV91Y2FjaGVfZGVjfHdpbmNhY2hlX3VjYWNoZV9kZWxldGV8d2luY2FjaGVfdWNhY2hlX2V4aXN0c3x3aW5jYWNoZV91Y2FjaGVfZ2V0fHdpbmNhY2hlX3VjYWNoZV9pbmN8d2luY2FjaGVfdWNhY2hlX2luZm98d2luY2FjaGVfdWNhY2hlX21lbWluZm98d2luY2FjaGVfdWNhY2hlX3NldHx3aW5jYWNoZV91bmxvY2t8d29yZHdyYXB8eGF0dHJfZ2V0fHhhdHRyX2xpc3R8eGF0dHJfcmVtb3ZlfHhhdHRyX3NldHx4YXR0cl9zdXBwb3J0ZWR8eGRpZmZfZmlsZV9iZGlmZnx4ZGlmZl9maWxlX2JkaWZmX3NpemV8eGRpZmZfZmlsZV9icGF0Y2h8eGRpZmZfZmlsZV9kaWZmfHhkaWZmX2ZpbGVfZGlmZl9iaW5hcnl8eGRpZmZfZmlsZV9tZXJnZTN8eGRpZmZfZmlsZV9wYXRjaHx4ZGlmZl9maWxlX3BhdGNoX2JpbmFyeXx4ZGlmZl9maWxlX3JhYmRpZmZ8eGRpZmZfc3RyaW5nX2JkaWZmfHhkaWZmX3N0cmluZ19iZGlmZl9zaXplfHhkaWZmX3N0cmluZ19icGF0Y2h8eGRpZmZfc3RyaW5nX2RpZmZ8eGRpZmZfc3RyaW5nX2RpZmZfYmluYXJ5fHhkaWZmX3N0cmluZ19tZXJnZTN8eGRpZmZfc3RyaW5nX3BhdGNofHhkaWZmX3N0cmluZ19wYXRjaF9iaW5hcnl8eGRpZmZfc3RyaW5nX3JhYmRpZmZ8eGhwcm9mX2Rpc2FibGV8eGhwcm9mX2VuYWJsZXx4aHByb2Zfc2FtcGxlX2Rpc2FibGV8eGhwcm9mX3NhbXBsZV9lbmFibGV8eG1sX2Vycm9yX3N0cmluZ3x4bWxfZ2V0X2N1cnJlbnRfYnl0ZV9pbmRleHx4bWxfZ2V0X2N1cnJlbnRfY29sdW1uX251bWJlcnx4bWxfZ2V0X2N1cnJlbnRfbGluZV9udW1iZXJ8eG1sX2dldF9lcnJvcl9jb2RlfHhtbF9wYXJzZXx4bWxfcGFyc2VfaW50b19zdHJ1Y3R8eG1sX3BhcnNlcl9jcmVhdGV8eG1sX3BhcnNlcl9jcmVhdGVfbnN8eG1sX3BhcnNlcl9mcmVlfHhtbF9wYXJzZXJfZ2V0X29wdGlvbnx4bWxfcGFyc2VyX3NldF9vcHRpb258eG1sX3NldF9jaGFyYWN0ZXJfZGF0YV9oYW5kbGVyfHhtbF9zZXRfZGVmYXVsdF9oYW5kbGVyfHhtbF9zZXRfZWxlbWVudF9oYW5kbGVyfHhtbF9zZXRfZW5kX25hbWVzcGFjZV9kZWNsX2hhbmRsZXJ8eG1sX3NldF9leHRlcm5hbF9lbnRpdHlfcmVmX2hhbmRsZXJ8eG1sX3NldF9ub3RhdGlvbl9kZWNsX2hhbmRsZXJ8eG1sX3NldF9vYmplY3R8eG1sX3NldF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2hhbmRsZXJ8eG1sX3NldF9zdGFydF9uYW1lc3BhY2VfZGVjbF9oYW5kbGVyfHhtbF9zZXRfdW5wYXJzZWRfZW50aXR5X2RlY2xfaGFuZGxlcnx4bWxyZWFkZXJ8eG1scnBjX2RlY29kZXx4bWxycGNfZGVjb2RlX3JlcXVlc3R8eG1scnBjX2VuY29kZXx4bWxycGNfZW5jb2RlX3JlcXVlc3R8eG1scnBjX2dldF90eXBlfHhtbHJwY19pc19mYXVsdHx4bWxycGNfcGFyc2VfbWV0aG9kX2Rlc2NyaXB0aW9uc3x4bWxycGNfc2VydmVyX2FkZF9pbnRyb3NwZWN0aW9uX2RhdGF8eG1scnBjX3NlcnZlcl9jYWxsX21ldGhvZHx4bWxycGNfc2VydmVyX2NyZWF0ZXx4bWxycGNfc2VydmVyX2Rlc3Ryb3l8eG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2NhbGxiYWNrfHhtbHJwY19zZXJ2ZXJfcmVnaXN0ZXJfbWV0aG9kfHhtbHJwY19zZXRfdHlwZXx4bWx3cml0ZXJfZW5kX2F0dHJpYnV0ZXx4bWx3cml0ZXJfZW5kX2NkYXRhfHhtbHdyaXRlcl9lbmRfY29tbWVudHx4bWx3cml0ZXJfZW5kX2RvY3VtZW50fHhtbHdyaXRlcl9lbmRfZHRkfHhtbHdyaXRlcl9lbmRfZHRkX2F0dGxpc3R8eG1sd3JpdGVyX2VuZF9kdGRfZWxlbWVudHx4bWx3cml0ZXJfZW5kX2R0ZF9lbnRpdHl8eG1sd3JpdGVyX2VuZF9lbGVtZW50fHhtbHdyaXRlcl9lbmRfcGl8eG1sd3JpdGVyX2ZsdXNofHhtbHdyaXRlcl9mdWxsX2VuZF9lbGVtZW50fHhtbHdyaXRlcl9vcGVuX21lbW9yeXx4bWx3cml0ZXJfb3Blbl91cml8eG1sd3JpdGVyX291dHB1dF9tZW1vcnl8eG1sd3JpdGVyX3NldF9pbmRlbnR8eG1sd3JpdGVyX3NldF9pbmRlbnRfc3RyaW5nfHhtbHdyaXRlcl9zdGFydF9hdHRyaWJ1dGV8eG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZV9uc3x4bWx3cml0ZXJfc3RhcnRfY2RhdGF8eG1sd3JpdGVyX3N0YXJ0X2NvbW1lbnR8eG1sd3JpdGVyX3N0YXJ0X2RvY3VtZW50fHhtbHdyaXRlcl9zdGFydF9kdGR8eG1sd3JpdGVyX3N0YXJ0X2R0ZF9hdHRsaXN0fHhtbHdyaXRlcl9zdGFydF9kdGRfZWxlbWVudHx4bWx3cml0ZXJfc3RhcnRfZHRkX2VudGl0eXx4bWx3cml0ZXJfc3RhcnRfZWxlbWVudHx4bWx3cml0ZXJfc3RhcnRfZWxlbWVudF9uc3x4bWx3cml0ZXJfc3RhcnRfcGl8eG1sd3JpdGVyX3RleHR8eG1sd3JpdGVyX3dyaXRlX2F0dHJpYnV0ZXx4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlX25zfHhtbHdyaXRlcl93cml0ZV9jZGF0YXx4bWx3cml0ZXJfd3JpdGVfY29tbWVudHx4bWx3cml0ZXJfd3JpdGVfZHRkfHhtbHdyaXRlcl93cml0ZV9kdGRfYXR0bGlzdHx4bWx3cml0ZXJfd3JpdGVfZHRkX2VsZW1lbnR8eG1sd3JpdGVyX3dyaXRlX2R0ZF9lbnRpdHl8eG1sd3JpdGVyX3dyaXRlX2VsZW1lbnR8eG1sd3JpdGVyX3dyaXRlX2VsZW1lbnRfbnN8eG1sd3JpdGVyX3dyaXRlX3BpfHhtbHdyaXRlcl93cml0ZV9yYXd8eHBhdGhfZXZhbHx4cGF0aF9ldmFsX2V4cHJlc3Npb258eHBhdGhfbmV3X2NvbnRleHR8eHBhdGhfcmVnaXN0ZXJfbnN8eHBhdGhfcmVnaXN0ZXJfbnNfYXV0b3x4cHRyX2V2YWx8eHB0cl9uZXdfY29udGV4dHx4c2x0X2JhY2tlbmRfaW5mb3x4c2x0X2JhY2tlbmRfbmFtZXx4c2x0X2JhY2tlbmRfdmVyc2lvbnx4c2x0X2NyZWF0ZXx4c2x0X2Vycm5vfHhzbHRfZXJyb3J8eHNsdF9mcmVlfHhzbHRfZ2V0b3B0fHhzbHRfcHJvY2Vzc3x4c2x0X3NldF9iYXNlfHhzbHRfc2V0X2VuY29kaW5nfHhzbHRfc2V0X2Vycm9yX2hhbmRsZXJ8eHNsdF9zZXRfbG9nfHhzbHRfc2V0X29iamVjdHx4c2x0X3NldF9zYXhfaGFuZGxlcnx4c2x0X3NldF9zYXhfaGFuZGxlcnN8eHNsdF9zZXRfc2NoZW1lX2hhbmRsZXJ8eHNsdF9zZXRfc2NoZW1lX2hhbmRsZXJzfHhzbHRfc2V0b3B0fHhzbHRwcm9jZXNzb3J8eWFtbF9lbWl0fHlhbWxfZW1pdF9maWxlfHlhbWxfcGFyc2V8eWFtbF9wYXJzZV9maWxlfHlhbWxfcGFyc2VfdXJsfHlhel9hZGRpbmZvfHlhel9jY2xfY29uZnx5YXpfY2NsX3BhcnNlfHlhel9jbG9zZXx5YXpfY29ubmVjdHx5YXpfZGF0YWJhc2V8eWF6X2VsZW1lbnR8eWF6X2Vycm5vfHlhel9lcnJvcnx5YXpfZXN8eWF6X2VzX3Jlc3VsdHx5YXpfZ2V0X29wdGlvbnx5YXpfaGl0c3x5YXpfaXRlbW9yZGVyfHlhel9wcmVzZW50fHlhel9yYW5nZXx5YXpfcmVjb3JkfHlhel9zY2FufHlhel9zY2FuX3Jlc3VsdHx5YXpfc2NoZW1hfHlhel9zZWFyY2h8eWF6X3NldF9vcHRpb258eWF6X3NvcnR8eWF6X3N5bnRheHx5YXpfd2FpdHx5cF9hbGx8eXBfY2F0fHlwX2Vycl9zdHJpbmd8eXBfZXJybm98eXBfZmlyc3R8eXBfZ2V0X2RlZmF1bHRfZG9tYWlufHlwX21hc3Rlcnx5cF9tYXRjaHx5cF9uZXh0fHlwX29yZGVyfHplbmRfbG9nb19ndWlkfHplbmRfdGhyZWFkX2lkfHplbmRfdmVyc2lvbnx6aXBfY2xvc2V8emlwX2VudHJ5X2Nsb3NlfHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZXx6aXBfZW50cnlfY29tcHJlc3Npb25tZXRob2R8emlwX2VudHJ5X2ZpbGVzaXplfHppcF9lbnRyeV9uYW1lfHppcF9lbnRyeV9vcGVufHppcF9lbnRyeV9yZWFkfHppcF9vcGVufHppcF9yZWFkfHppcGFyY2hpdmV8emlwYXJjaGl2ZV9hZGRlbXB0eWRpcnx6aXBhcmNoaXZlX2FkZGZpbGV8emlwYXJjaGl2ZV9hZGRmcm9tc3RyaW5nfHppcGFyY2hpdmVfY2xvc2V8emlwYXJjaGl2ZV9kZWxldGVpbmRleHx6aXBhcmNoaXZlX2RlbGV0ZW5hbWV8emlwYXJjaGl2ZV9leHRyYWN0dG98emlwYXJjaGl2ZV9nZXRhcmNoaXZlY29tbWVudHx6aXBhcmNoaXZlX2dldGNvbW1lbnRpbmRleHx6aXBhcmNoaXZlX2dldGNvbW1lbnRuYW1lfHppcGFyY2hpdmVfZ2V0ZnJvbWluZGV4fHppcGFyY2hpdmVfZ2V0ZnJvbW5hbWV8emlwYXJjaGl2ZV9nZXRuYW1laW5kZXh8emlwYXJjaGl2ZV9nZXRzdGF0dXNzdHJpbmd8emlwYXJjaGl2ZV9nZXRzdHJlYW18emlwYXJjaGl2ZV9sb2NhdGVuYW1lfHppcGFyY2hpdmVfb3Blbnx6aXBhcmNoaXZlX3JlbmFtZWluZGV4fHppcGFyY2hpdmVfcmVuYW1lbmFtZXx6aXBhcmNoaXZlX3NldENvbW1lbnROYW1lfHppcGFyY2hpdmVfc2V0YXJjaGl2ZWNvbW1lbnR8emlwYXJjaGl2ZV9zZXRjb21tZW50aW5kZXh8emlwYXJjaGl2ZV9zdGF0aW5kZXh8emlwYXJjaGl2ZV9zdGF0bmFtZXx6aXBhcmNoaXZlX3VuY2hhbmdlYWxsfHppcGFyY2hpdmVfdW5jaGFuZ2VhcmNoaXZlfHppcGFyY2hpdmVfdW5jaGFuZ2VpbmRleHx6aXBhcmNoaXZlX3VuY2hhbmdlbmFtZXx6bGliX2dldF9jb2RpbmdfdHlwZSIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImFic3RyYWN0fGFuZHxhcnJheXxhc3xicmVha3xjYXNlfGNhdGNofGNsYXNzfGNsb25lfGNvbnN0fGNvbnRpbnVlfGRlY2xhcmV8ZGVmYXVsdHxkb3xlbHNlfGVsc2VpZnxlbmRkZWNsYXJlfGVuZGZvcnxlbmRmb3JlYWNofGVuZGlmfGVuZHN3aXRjaHxlbmR3aGlsZXxleHRlbmRzfGZpbmFsfGZvcnxmb3JlYWNofGZ1bmN0aW9ufGdsb2JhbHxnb3RvfGlmfGltcGxlbWVudHN8aW50ZXJmYWNlfGluc3RhbmNlb2Z8bmFtZXNwYWNlfG5ld3xvcnxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8c3RhdGljfHN3aXRjaHx0aHJvd3x0cnl8dXNlfHZhcnx3aGlsZXx4b3IiLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCJkaWV8ZWNob3xlbXB0eXxleGl0fGV2YWx8aW5jbHVkZXxpbmNsdWRlX29uY2V8aXNzZXR8bGlzdHxyZXF1aXJlfHJlcXVpcmVfb25jZXxyZXR1cm58cHJpbnR8dW5zZXQiLnNwbGl0KCJ8IikpLGc9ZS5hcnJheVRvTWFwKCJ0cnVlfGZhbHNlfG51bGx8X19DTEFTU19ffF9fRElSX198X19GSUxFX198X19MSU5FX198X19NRVRIT0RfX3xfX0ZVTkNUSU9OX198X19OQU1FU1BBQ0VfXyIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoIiRHTE9CQUxTfCRfU0VSVkVSfCRfR0VUfCRfUE9TVHwkX0ZJTEVTfCRfUkVRVUVTVHwkX1NFU1NJT058JF9FTlZ8JF9DT09LSUV8JHBocF9lcnJvcm1zZ3wkSFRUUF9SQVdfUE9TVF9EQVRBfCRodHRwX3Jlc3BvbnNlX2hlYWRlcnwkYXJnY3wkYXJndiIuc3BsaXQoInwiKSksaT1lLmFycmF5VG9NYXAoImtleV9leGlzdHN8Y2Fpcm9fbWF0cml4X2NyZWF0ZV9zY2FsZXxjYWlyb19tYXRyaXhfY3JlYXRlX3RyYW5zbGF0ZXxjYWxsX3VzZXJfbWV0aG9kfGNhbGxfdXNlcl9tZXRob2RfYXJyYXl8Y29tX2FkZHJlZnxjb21fZ2V0fGNvbV9pbnZva2V8Y29tX2lzZW51bXxjb21fbG9hZHxjb21fcmVsZWFzZXxjb21fc2V0fGNvbm5lY3Rpb25fdGltZW91dHxjdWJyaWRfbG9hZF9mcm9tX2dsb3xjdWJyaWRfbmV3X2dsb3xjdWJyaWRfc2F2ZV90b19nbG98Y3VicmlkX3NlbmRfZ2xvfGRlZmluZV9zeXNsb2dfdmFyaWFibGVzfGRsfGVyZWd8ZXJlZ19yZXBsYWNlfGVyZWdpfGVyZWdpX3JlcGxhY2V8aHdfZG9jdW1lbnRhdHRyaWJ1dGVzfGh3X2RvY3VtZW50Ym9keXRhZ3xod19kb2N1bWVudHNpemV8aHdfb3V0cHV0ZG9jdW1lbnR8aW1hZ2VkYXNoZWRsaW5lfG1heGRiX2JpbmRfcGFyYW18bWF4ZGJfYmluZF9yZXN1bHR8bWF4ZGJfY2xpZW50X2VuY29kaW5nfG1heGRiX2Nsb3NlX2xvbmdfZGF0YXxtYXhkYl9leGVjdXRlfG1heGRiX2ZldGNofG1heGRiX2dldF9tZXRhZGF0YXxtYXhkYl9wYXJhbV9jb3VudHxtYXhkYl9zZW5kX2xvbmdfZGF0YXxtY3J5cHRfZWNifG1jcnlwdF9nZW5lcmljX2VuZHxtaW1lX2NvbnRlbnRfdHlwZXxteXNxbF9jcmVhdGVkYnxteXNxbF9kYm5hbWV8bXlzcWxfZGJfcXVlcnl8bXlzcWxfZHJvcF9kYnxteXNxbF9kcm9wZGJ8bXlzcWxfZXNjYXBlX3N0cmluZ3xteXNxbF9maWVsZGZsYWdzfG15c3FsX2ZpZWxkZmxhZ3N8bXlzcWxfZmllbGRuYW1lfG15c3FsX2ZpZWxkdGFibGV8bXlzcWxfZmllbGR0eXBlfG15c3FsX2ZyZWVyZXN1bHR8bXlzcWxfbGlzdGRic3xteXNxbF9saXN0X2ZpZWxkc3xteXNxbF9saXN0ZmllbGRzfG15c3FsX2xpc3RfdGFibGVzfG15c3FsX2xpc3R0YWJsZXN8bXlzcWxfbnVtZmllbGRzfG15c3FsX251bXJvd3N8bXlzcWxfc2VsZWN0ZGJ8bXlzcWxfdGFibGVuYW1lfG15c3FsaV9iaW5kX3BhcmFtfG15c3FsaV9iaW5kX3Jlc3VsdHxteXNxbGlfZGlzYWJsZV9yZWFkc19mcm9tX21hc3RlcnxteXNxbGlfZGlzYWJsZV9ycGxfcGFyc2V8bXlzcWxpX2VuYWJsZV9yZWFkc19mcm9tX21hc3RlcnxteXNxbGlfZW5hYmxlX3JwbF9wYXJzZXxteXNxbGlfZXhlY3V0ZXxteXNxbGlfZmV0Y2h8bXlzcWxpX2dldF9tZXRhZGF0YXxteXNxbGlfbWFzdGVyX3F1ZXJ5fG15c3FsaV9wYXJhbV9jb3VudHxteXNxbGlfcnBsX3BhcnNlX2VuYWJsZWR8bXlzcWxpX3JwbF9wcm9iZXxteXNxbGlfcnBsX3F1ZXJ5X3R5cGV8bXlzcWxpX3NlbmRfbG9uZ19kYXRhfG15c3FsaV9zZW5kX3F1ZXJ5fG15c3FsaV9zbGF2ZV9xdWVyeXxvY2liaW5kYnluYW1lfG9jaWNhbmNlbHxvY2ljbG9zZWxvYnxvY2ljb2xsYXBwZW5kfG9jaWNvbGxhc3NpZ258b2NpY29sbGFzc2lnbmVsZW18b2NpY29sbGdldGVsZW18b2NpY29sbG1heHxvY2ljb2xsc2l6ZXxvY2ljb2xsdHJpbXxvY2ljb2x1bW5pc251bGx8b2NpY29sdW1ubmFtZXxvY2ljb2x1bW5wcmVjaXNpb258b2NpY29sdW1uc2NhbGV8b2NpY29sdW1uc2l6ZXxvY2ljb2x1bW50eXBlfG9jaWNvbHVtbnR5cGVyYXd8b2NpY29tbWl0fG9jaWRlZmluZWJ5bmFtZXxvY2llcnJvcnxvY2lleGVjdXRlfG9jaWZldGNofG9jaWZldGNoaW50b3xvY2lmZXRjaHN0YXRlbWVudHxvY2lmcmVlY29sbGVjdGlvbnxvY2lmcmVlY3Vyc29yfG9jaWZyZWVkZXNjfG9jaWZyZWVzdGF0ZW1lbnR8b2NpaW50ZXJuYWxkZWJ1Z3xvY2lsb2FkbG9ifG9jaWxvZ29mZnxvY2lsb2dvbnxvY2luZXdjb2xsZWN0aW9ufG9jaW5ld2N1cnNvcnxvY2luZXdkZXNjcmlwdG9yfG9jaW5sb2dvbnxvY2ludW1jb2xzfG9jaXBhcnNlfG9jaXBsb2dvbnxvY2lyZXN1bHR8b2Npcm9sbGJhY2t8b2Npcm93Y291bnR8b2Npc2F2ZWxvYnxvY2lzYXZlbG9iZmlsZXxvY2lzZXJ2ZXJ2ZXJzaW9ufG9jaXNldHByZWZldGNofG9jaXN0YXRlbWVudHR5cGV8b2Npd3JpdGVsb2J0b2ZpbGV8b2Npd3JpdGV0ZW1wb3Jhcnlsb2J8UERGX2FkZF9hbm5vdGF0aW9ufFBERl9hZGRfYm9va21hcmt8UERGX2FkZF9sYXVuY2hsaW5rfFBERl9hZGRfbG9jYWxsaW5rfFBERl9hZGRfbm90ZXxQREZfYWRkX291dGxpbmV8UERGX2FkZF9wZGZsaW5rfFBERl9hZGRfd2VibGlua3xQREZfYXR0YWNoX2ZpbGV8UERGX2JlZ2luX3BhZ2V8UERGX2JlZ2luX3RlbXBsYXRlfFBERl9jbG9zZV9wZGl8UERGX2Nsb3NlfFBERl9maW5kZm9udHxQREZfZ2V0X2ZvbnR8UERGX2dldF9mb250bmFtZXxQREZfZ2V0X2ZvbnRzaXplfFBERl9nZXRfaW1hZ2VfaGVpZ2h0fFBERl9nZXRfaW1hZ2Vfd2lkdGh8UERGX2dldF9tYWpvcnZlcnNpb258UERGX2dldF9taW5vcnZlcnNpb258UERGX2dldF9wZGlfcGFyYW1ldGVyfFBERl9nZXRfcGRpX3ZhbHVlfFBERl9vcGVuX2NjaXR0fFBERl9vcGVuX2ZpbGV8UERGX29wZW5fZ2lmfFBERl9vcGVuX2ltYWdlX2ZpbGV8UERGX29wZW5faW1hZ2V8UERGX29wZW5fanBlZ3xQREZfb3Blbl9wZGl8UERGX29wZW5fdGlmZnxQREZfcGxhY2VfaW1hZ2V8UERGX3BsYWNlX3BkaV9wYWdlfFBERl9zZXRfYm9yZGVyX2NvbG9yfFBERl9zZXRfYm9yZGVyX2Rhc2h8UERGX3NldF9ib3JkZXJfc3R5bGV8UERGX3NldF9jaGFyX3NwYWNpbmd8UERGX3NldF9kdXJhdGlvbnxQREZfc2V0X2hvcml6X3NjYWxpbmd8UERGX3NldF9pbmZvX2F1dGhvcnxQREZfc2V0X2luZm9fY3JlYXRvcnxQREZfc2V0X2luZm9fa2V5d29yZHN8UERGX3NldF9pbmZvX3N1YmplY3R8UERGX3NldF9pbmZvX3RpdGxlfFBERl9zZXRfbGVhZGluZ3xQREZfc2V0X3RleHRfbWF0cml4fFBERl9zZXRfdGV4dF9yZW5kZXJpbmd8UERGX3NldF90ZXh0X3Jpc2V8UERGX3NldF93b3JkX3NwYWNpbmd8UERGX3NldGdyYXlfZmlsbHxQREZfc2V0Z3JheV9zdHJva2V8UERGX3NldGdyYXl8UERGX3NldHBvbHlkYXNofFBERl9zZXRyZ2Jjb2xvcl9maWxsfFBERl9zZXRyZ2Jjb2xvcl9zdHJva2V8UERGX3NldHJnYmNvbG9yfFBERl9zaG93X2JveGVkfHBocF9jaGVja19zeW50YXh8cHhfc2V0X3RhYmxlbmFtZXxweF9zZXRfdGFyZ2V0ZW5jb2Rpbmd8cnVua2l0X3NhbmRib3hfb3V0cHV0X2hhbmRsZXJ8c2Vzc2lvbl9pc19yZWdpc3RlcmVkfHNlc3Npb25fcmVnaXN0ZXJ8c2Vzc2lvbl91bnJlZ2lzdGVyc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lfG1hZ2ljX3F1b3Rlc19ydW50aW1lfHNldF9zb2NrZXRfYmxvY2tpbmd8c29ja2V0X3NldF9ibG9ja2luZ3xzZXRfc29ja2V0X3RpbWVvdXR8c29ja2V0X3NldF90aW1lb3V0fHNwbGl0fHNwbGl0aXxzcWxfcmVnY2FzZSIuc3BsaXQoInwiKSksaj1lLmFycmF5VG9NYXAoImNmdW5jdGlvbnxvbGRfZnVuY3Rpb24iLnNwbGl0KCJ8IikpLGs9ZS5hcnJheVRvTWFwKFtdKTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoic3VwcG9ydC5waHBfdGFnIixyZWdleDoiPFxcPyg/OnBocHxcXD0pIn0se3Rva2VuOiJzdXBwb3J0LnBocF90YWciLHJlZ2V4OiJcXD8+In0se3Rva2VuOiJjb21tZW50IixyZWdleDoiPFxcIS0tIixuZXh0OiJodG1sY29tbWVudCJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8c3R5bGUiLG5leHQ6ImNzcyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvP1stX2EtekEtWjAtOTpdKyIsbmV4dDoiaHRtbHRhZyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8IURPQ1RZUEUuKj8+In0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiIy4qJCJ9LGEuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVtnaW15XSpcXHMqKD89WykuLDtdfCQpIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlIixyZWdleDoiXFxiKD86REVGQVVMVF9JTkNMVURFX1BBVEh8RV8oPzpBTEx8Q08oPzpNUElMRV8oPzpFUlJPUnxXQVJOSU5HKXxSRV8oPzpFUlJPUnxXQVJOSU5HKSl8RVJST1J8Tk9USUNFfFBBUlNFfFNUUklDVHxVU0VSXyg/OkVSUk9SfE5PVElDRXxXQVJOSU5HKXxXQVJOSU5HKXxQKD86RUFSXyg/OkVYVEVOU0lPTl9ESVJ8SU5TVEFMTF9ESVIpfEhQXyg/OkJJTkRJUnxDT05GSUdfRklMRV8oPzpQQVRIfFNDQU5fRElSKXxEQVRBRElSfEUoPzpPTHxYVEVOU0lPTl9ESVIpfElOVF8oPzpNQVh8U0laRSl8TCg/OklCRElSfE9DQUxTVEFURURJUil8Tyg/OlN8VVRQVVRfSEFORExFUl8oPzpDT05UfEVORHxTVEFSVCkpfFBSRUZJWHxTKD86QVBJfEhMSUJfU1VGRklYfFlTQ09ORkRJUil8VkVSU0lPTikpfF9fQ09NUElMRVJfSEFMVF9PRkZTRVRfXylcXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlIixyZWdleDoiXFxiKD86QSg/OkIoPzpEQVlfKD86MXwyfDN8NHw1fDZ8Nyl8TU9OXyg/OjEoPzowfDF8MnwpfDJ8M3w0fDV8Nnw3fDh8OSkpfExUX0RJR0lUU3xNX1NUUnxTU0VSVF8oPzpBQ1RJVkV8QkFJTHxDQUxMQkFDS3xRVUlFVF9FVkFMfFdBUk5JTkcpKXxDKD86QVNFXyg/OkxPV0VSfFVQUEVSKXxIQVJfTUFYfE8oPzpERVNFVHxOTkVDVElPTl8oPzpBQk9SVEVEfE5PUk1BTHxUSU1FT1VUKXxVTlRfKD86Tk9STUFMfFJFQ1VSU0lWRSkpfFIoPzpFRElUU18oPzpBTEx8RE9DU3xGVUxMUEFHRXxHKD86RU5FUkFMfFJPVVApfE1PRFVMRVN8UUF8U0FQSSl8TkNZU1RSfFlQVF8oPzpCTE9XRklTSHxFWFRfREVTfE1ENXxTKD86QUxUX0xFTkdUSHxURF9ERVMpKSl8VVJSRU5DWV9TWU1CT0wpfEQoPzpBWV8oPzoxfDJ8M3w0fDV8Nnw3KXxFQ0lNQUxfUE9JTlR8SVJFQ1RPUllfU0VQQVJBVE9SfF8oPzpGTVR8VF9GTVQpKXxFKD86TlRfKD86Q09NUEFUfE5PUVVPVEVTfFFVT1RFUyl8UkEoPzpfKD86RF8oPzpGTVR8VF9GTVQpfFRfRk1UfFlFQVIpfCl8WFRSXyg/OklGX0VYSVNUU3xPVkVSV1JJVEV8UFJFRklYXyg/OkFMTHxJKD86Rl9FWElTVFN8TlZBTElEKXxTQU1FKXxTS0lQKSl8RlJBQ19ESUdJVFN8R1JPVVBJTkd8SFRNTF8oPzpFTlRJVElFU3xTUEVDSUFMQ0hBUlMpfElOKD86Rk9fKD86QUxMfEMoPzpPTkZJR1VSQVRJT058UkVESVRTKXxFTlZJUk9OTUVOVHxHRU5FUkFMfExJQ0VOU0V8TU9EVUxFU3xWQVJJQUJMRVMpfElfKD86QUxMfFBFUkRJUnxTWVNURU18VVNFUil8VF8oPzpDVVJSX1NZTUJPTHxGUkFDX0RJR0lUUykpfEwoPzpDXyg/OkFMTHxDKD86T0xMQVRFfFRZUEUpfE0oPzpFU1NBR0VTfE9ORVRBUlkpfE5VTUVSSUN8VElNRSl8Tyg/OkNLXyg/OkVYfE5CfFNIfFVOKXxHXyg/OkEoPzpMRVJUfFVUSCg/OlBSSVZ8KSl8Qyg/Ok9OU3xSKD86SVR8T04pKXxEKD86QUVNT058RUJVRyl8RSg/Ok1FUkd8UlIpfElORk98S0VSTnxMKD86T0NBTCg/OjB8MXwyfDN8NHw1fDZ8Nyl8UFIpfE1BSUx8Tig/OkRFTEFZfEVXU3xPKD86VElDRXxXQUlUKSl8T0RFTEFZfFAoPzpFUlJPUnxJRCl8U1lTTE9HfFUoPzpTRVJ8VUNQKXxXQVJOSU5HKSkpfE0oPzpPTl8oPzoxKD86MHwxfDJ8KXwyfDN8NHw1fDZ8N3w4fDl8REVDSU1BTF9QT0lOVHxHUk9VUElOR3xUSE9VU0FORFNfU0VQKXxfKD86MV9QSXwyXyg/OlBJfFNRUlRQSSl8RXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8UEkoPzpfKD86Mnw0KXwpfFNRUlQoPzoxXzJ8MikpKXxOKD86RUdBVElWRV9TSUdOfE8oPzpFWFBSfFNUUil8Xyg/OkNTX1BSRUNFREVTfFMoPzpFUF9CWV9TUEFDRXxJR05fUE9TTikpKXxQKD86QVRIKD86SU5GT18oPzpCQVNFTkFNRXxESVJOQU1FfEVYVEVOU0lPTil8X1NFUEFSQVRPUil8TV9TVFJ8T1NJVElWRV9TSUdOfF8oPzpDU19QUkVDRURFU3xTKD86RVBfQllfU1BBQ0V8SUdOX1BPU04pKSl8UkFESVhDSEFSfFMoPzpFRUtfKD86Q1VSfEVORHxTRVQpfE9SVF8oPzpBU0N8REVTQ3xOVU1FUklDfFJFR1VMQVJ8U1RSSU5HKXxUUl9QQURfKD86Qk9USHxMRUZUfFJJR0hUKSl8VCg/OkhPVVMoPzpBTkRTX1NFUHxFUCl8X0ZNVCg/Ol9BTVBNfCkpfFlFUyg/OkVYUFJ8U1RSKXxTVEQoPzpJTnxPVVR8RVJSKSlcXGIifSx7dG9rZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoYSk/ImtleXdvcmQiOmcuaGFzT3duUHJvcGVydHkoYSk/ImNvbnN0YW50Lmxhbmd1YWdlIjpoLmhhc093blByb3BlcnR5KGEpPyJ2YXJpYWJsZS5sYW5ndWFnZSI6ay5oYXNPd25Qcm9wZXJ0eShhKT8iaW52YWxpZC5pbGxlZ2FsIjpiLmhhc093blByb3BlcnR5KGEpPyJzdXBwb3J0LmZ1bmN0aW9uIjphPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmEubWF0Y2goL14oXCRbYS16QS1aXVthLXpBLVowLTlfXSp8c2VsZnxwYXJlbnQpJC8pPyJ2YXJpYWJsZSI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIn0se3Rva2VuOiJscGFyZW4iLHJlZ2V4OiJbWyh7XSJ9LHt0b2tlbjoicnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4rIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj8iJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6Ii4rIn1dLGh0bWxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj8tLT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixyZWdleDoiLisifV0saHRtbHRhZzpbe3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6Ij4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonIi4qPyInfSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKj8nIn1dLGNzczpbe3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6Ijwvc3R5bGU+IixuZXh0OiJodG1sdGFnIn0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6Ij4ifSx7dG9rZW46InRleHQiLHJlZ2V4OiIoPzptZWRpYXx0eXBlfGhyZWYpIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4Oic9Ii4qPyInfSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6InsiLG5leHQ6ImNzc2RlY2xhcmF0aW9uIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiI1tBLVphLXowLTktXy5dKyJ9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiJcXC5bQS1aYS16MC05LV8uXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW0EtWmEtejAtOV0rIn1dLGNzc2RlY2xhcmF0aW9uOlt7dG9rZW46InN1cHBvcnQudHlwZSIscmVnZXg6IlstYS16QS1aXSsiLG5leHQ6ImNzc3ZhbHVlIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJ9IixuZXh0OiJjc3MifV0sY3NzdmFsdWU6W3t0b2tlbjoidGV4dCIscmVnZXg6IjoifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiI1swLTlhLXpBLVpdKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlstXzAtOWEtekEtWlwiJyAsJV0rIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiOyIsbmV4dDoiY3NzZGVjbGFyYXRpb24ifV19LHRoaXMuZW1iZWRSdWxlcyhmLCJkb2MtIixbKG5ldyBmKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaCxnKSxiLlBocEhpZ2hsaWdodFJ1bGVzPWh9KSxkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-powershell-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvcG93ZXJzaGVsbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9wb3dlcnNoZWxsX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3Bvd2Vyc2hlbGxfaGlnaGxpZ2h0X3J1bGVzIikuUG93ZXJzaGVsbEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsaj1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsaz1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBpLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBqfTtkLmluaGVyaXRzKGssZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnM7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCIpe3ZhciBnPWIubWF0Y2goL14uKltce1woXFtdXHMqJC8pO2cmJihkKz1jKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsfX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9wb3dlcnNoZWxsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImZ1bmN0aW9ufGlmfGVsc2V8ZWxzZWlmfHN3aXRjaHx3aGlsZXxkZWZhdWx0fGZvcnxkb3x1bnRpbHxicmVha3xjb250aW51ZXxmb3JlYWNofHJldHVybnxmaWx0ZXJ8aW58dHJhcHx0aHJvd3xwYXJhbXxiZWdpbnxwcm9jZXNzfGVuZCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIkdldC1BbGlhc3xJbXBvcnQtQWxpYXN8TmV3LUFsaWFzfFNldC1BbGlhc3xHZXQtQXV0aGVudGljb2RlU2lnbmF0dXJlfFNldC1BdXRoZW50aWNvZGVTaWduYXR1cmV8U2V0LUxvY2F0aW9ufEdldC1DaGlsZEl0ZW18Q2xlYXItSXRlbXxHZXQtQ29tbWFuZHxNZWFzdXJlLUNvbW1hbmR8VHJhY2UtQ29tbWFuZHxBZGQtQ29tcHV0ZXJ8Q2hlY2twb2ludC1Db21wdXRlcnxSZW1vdmUtQ29tcHV0ZXJ8UmVzdGFydC1Db21wdXRlcnxSZXN0b3JlLUNvbXB1dGVyfFN0b3AtQ29tcHV0ZXJ8UmVzZXQtQ29tcHV0ZXJNYWNoaW5lUGFzc3dvcmR8VGVzdC1Db21wdXRlclNlY3VyZUNoYW5uZWx8QWRkLUNvbnRlbnR8R2V0LUNvbnRlbnR8U2V0LUNvbnRlbnR8Q2xlYXItQ29udGVudHxHZXQtQ29tbWFuZHxJbnZva2UtQ29tbWFuZHxFbmFibGUtQ29tcHV0ZXJSZXN0b3JlfERpc2FibGUtQ29tcHV0ZXJSZXN0b3JlfEdldC1Db21wdXRlclJlc3RvcmVQb2ludHxUZXN0LUNvbm5lY3Rpb258Q29udmVydEZyb20tQ1NWfENvbnZlcnRUby1DU1Z8Q29udmVydFRvLUh0bWx8Q29udmVydFRvLVhtbHxDb252ZXJ0RnJvbS1TZWN1cmVTdHJpbmd8Q29udmVydFRvLVNlY3VyZVN0cmluZ3xDb3B5LUl0ZW18RXhwb3J0LUNvdW50ZXJ8R2V0LUNvdW50ZXJ8SW1wb3J0LUNvdW50ZXJ8R2V0LUNyZWRlbnRpYWx8R2V0LUN1bHR1cmV8R2V0LUNoaWxkSXRlbXxHZXQtRGF0ZXxTZXQtRGF0ZXxSZW1vdmUtSXRlbXxDb21wYXJlLU9iamVjdHxHZXQtRXZlbnR8R2V0LVdpbkV2ZW50fE5ldy1FdmVudHxSZW1vdmUtRXZlbnR8VW5yZWdpc3Rlci1FdmVudHxXYWl0LUV2ZW50fENsZWFyLUV2ZW50TG9nfEdldC1FdmVudGxvZ3xMaW1pdC1FdmVudExvZ3xOZXctRXZlbnRsb2d8UmVtb3ZlLUV2ZW50TG9nfFNob3ctRXZlbnRMb2d8V3JpdGUtRXZlbnRMb2d8R2V0LUV2ZW50U3Vic2NyaWJlcnxSZWdpc3Rlci1FbmdpbmVFdmVudHxSZWdpc3Rlci1PYmplY3RFdmVudHxSZWdpc3Rlci1XbWlFdmVudHxHZXQtRXhlY3V0aW9uUG9saWN5fFNldC1FeGVjdXRpb25Qb2xpY3l8RXhwb3J0LUFsaWFzfEV4cG9ydC1DbGl4bWx8RXhwb3J0LUNvbnNvbGV8RXhwb3J0LUNzdnxGb3JFYWNoLU9iamVjdHxGb3JtYXQtQ3VzdG9tfEZvcm1hdC1MaXN0fEZvcm1hdC1UYWJsZXxGb3JtYXQtV2lkZXxFeHBvcnQtRm9ybWF0RGF0YXxHZXQtRm9ybWF0RGF0YXxHZXQtSXRlbXxHZXQtQ2hpbGRJdGVtfEdldC1IZWxwfEFkZC1IaXN0b3J5fENsZWFyLUhpc3Rvcnl8R2V0LUhpc3Rvcnl8SW52b2tlLUhpc3Rvcnl8R2V0LUhvc3R8UmVhZC1Ib3N0fFdyaXRlLUhvc3R8R2V0LUhvdEZpeHxJbXBvcnQtQ2xpeG1sfEltcG9ydC1Dc3Z8SW52b2tlLUNvbW1hbmR8SW52b2tlLUV4cHJlc3Npb258R2V0LUl0ZW18SW52b2tlLUl0ZW18TmV3LUl0ZW18UmVtb3ZlLUl0ZW18U2V0LUl0ZW18Q2xlYXItSXRlbVByb3BlcnR5fENvcHktSXRlbVByb3BlcnR5fEdldC1JdGVtUHJvcGVydHl8TW92ZS1JdGVtUHJvcGVydHl8TmV3LUl0ZW1Qcm9wZXJ0eXxSZW1vdmUtSXRlbVByb3BlcnR5fFJlbmFtZS1JdGVtUHJvcGVydHl8U2V0LUl0ZW1Qcm9wZXJ0eXxHZXQtSm9ifFJlY2VpdmUtSm9ifFJlbW92ZS1Kb2J8U3RhcnQtSm9ifFN0b3AtSm9ifFdhaXQtSm9ifFN0b3AtUHJvY2Vzc3xVcGRhdGUtTGlzdHxHZXQtTG9jYXRpb258UG9wLUxvY2F0aW9ufFB1c2gtTG9jYXRpb258U2V0LUxvY2F0aW9ufFNlbmQtTWFpbE1lc3NhZ2V8QWRkLU1lbWJlcnxHZXQtTWVtYmVyfE1vdmUtSXRlbXxDb21wYXJlLU9iamVjdHxHcm91cC1PYmplY3R8TWVhc3VyZS1PYmplY3R8TmV3LU9iamVjdHxTZWxlY3QtT2JqZWN0fFNvcnQtT2JqZWN0fFdoZXJlLU9iamVjdHxPdXQtRGVmYXVsdHxPdXQtRmlsZXxPdXQtR3JpZFZpZXd8T3V0LUhvc3R8T3V0LU51bGx8T3V0LVByaW50ZXJ8T3V0LVN0cmluZ3xDb252ZXJ0LVBhdGh8Sm9pbi1QYXRofFJlc29sdmUtUGF0aHxTcGxpdC1QYXRofFRlc3QtUGF0aHxHZXQtUGZ4Y2VydGlmaWNhdGV8UG9wLUxvY2F0aW9ufFB1c2gtTG9jYXRpb258R2V0LVByb2Nlc3N8U3RhcnQtUHJvY2Vzc3xTdG9wLVByb2Nlc3N8V2FpdC1Qcm9jZXNzfEVuYWJsZS1QU0JyZWFrcG9pbnR8RGlzYWJsZS1QU0JyZWFrcG9pbnR8R2V0LVBTQnJlYWtwb2ludHxTZXQtUFNCcmVha3BvaW50fFJlbW92ZS1QU0JyZWFrcG9pbnR8R2V0LVBTRHJpdmV8TmV3LVBTRHJpdmV8UmVtb3ZlLVBTRHJpdmV8R2V0LVBTUHJvdmlkZXJ8U2V0LVBTZGVidWd8RW50ZXItUFNTZXNzaW9ufEV4aXQtUFNTZXNzaW9ufEV4cG9ydC1QU1Nlc3Npb258R2V0LVBTU2Vzc2lvbnxJbXBvcnQtUFNTZXNzaW9ufE5ldy1QU1Nlc3Npb258UmVtb3ZlLVBTU2Vzc2lvbnxEaXNhYmxlLVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb258RW5hYmxlLVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb258R2V0LVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb258UmVnaXN0ZXItUFNTZXNzaW9uQ29uZmlndXJhdGlvbnxTZXQtUFNTZXNzaW9uQ29uZmlndXJhdGlvbnxVbnJlZ2lzdGVyLVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb258TmV3LVBTU2Vzc2lvbk9wdGlvbnxBZGQtUHNTbmFwSW58R2V0LVBzU25hcGlufFJlbW92ZS1QU1NuYXBpbnxHZXQtUmFuZG9tfFJlYWQtSG9zdHxSZW1vdmUtSXRlbXxSZW5hbWUtSXRlbXxSZW5hbWUtSXRlbVByb3BlcnR5fFNlbGVjdC1PYmplY3R8U2VsZWN0LVhNTHxTZW5kLU1haWxNZXNzYWdlfEdldC1TZXJ2aWNlfE5ldy1TZXJ2aWNlfFJlc3RhcnQtU2VydmljZXxSZXN1bWUtU2VydmljZXxTZXQtU2VydmljZXxTdGFydC1TZXJ2aWNlfFN0b3AtU2VydmljZXxTdXNwZW5kLVNlcnZpY2V8U29ydC1PYmplY3R8U3RhcnQtU2xlZXB8Q29udmVydEZyb20tU3RyaW5nRGF0YXxTZWxlY3QtU3RyaW5nfFRlZS1PYmplY3R8TmV3LVRpbWVzcGFufFRyYWNlLUNvbW1hbmR8R2V0LVRyYWNlc291cmNlfFNldC1UcmFjZXNvdXJjZXxTdGFydC1UcmFuc2FjdGlvbnxDb21wbGV0ZS1UcmFuc2FjdGlvbnxHZXQtVHJhbnNhY3Rpb258VXNlLVRyYW5zYWN0aW9ufFVuZG8tVHJhbnNhY3Rpb258U3RhcnQtVHJhbnNjcmlwdHxTdG9wLVRyYW5zY3JpcHR8QWRkLVR5cGV8VXBkYXRlLVR5cGVEYXRhfEdldC1VaWN1bHR1cmV8R2V0LVVuaXF1ZXxVcGRhdGUtRm9ybWF0ZGF0YXxVcGRhdGUtVHlwZWRhdGF8Q2xlYXItVmFyaWFibGV8R2V0LVZhcmlhYmxlfE5ldy1WYXJpYWJsZXxSZW1vdmUtVmFyaWFibGV8U2V0LVZhcmlhYmxlfE5ldy1XZWJTZXJ2aWNlUHJveHl8V2hlcmUtT2JqZWN0fFdyaXRlLURlYnVnfFdyaXRlLUVycm9yfFdyaXRlLUhvc3R8V3JpdGUtT3V0cHV0fFdyaXRlLVByb2dyZXNzfFdyaXRlLVZlcmJvc2V8V3JpdGUtV2FybmluZ3xTZXQtV21pSW5zdGFuY2V8SW52b2tlLVdtaU1ldGhvZHxHZXQtV21pT2JqZWN0fFJlbW92ZS1XbWlPYmplY3R8Q29ubmVjdC1XU01hbnxEaXNjb25uZWN0LVdTTWFufFRlc3QtV1NNYW58SW52b2tlLVdTTWFuQWN0aW9ufERpc2FibGUtV1NNYW5DcmVkU1NQfEVuYWJsZS1XU01hbkNyZWRTU1B8R2V0LVdTTWFuQ3JlZFNTUHxOZXctV1NNYW5JbnN0YW5jZXxHZXQtV1NNYW5JbnN0YW5jZXxTZXQtV1NNYW5JbnN0YW5jZXxSZW1vdmUtV1NNYW5JbnN0YW5jZXxTZXQtV1NNYW5RdWlja0NvbmZpZ3xOZXctV1NNYW5TZXNzaW9uT3B0aW9uIi5zcGxpdCgifCIpKSxjPSJlcXxuZXxnZXxndHxsdHxsZXxsaWtlfG5vdGxpa2V8bWF0Y2h8bm90bWF0Y2h8cmVwbGFjZXxjb250YWluc3xub3Rjb250YWluc3xpZXF8aW5lfGlnZXxpZ3R8aWxlfGlsdHxpbGlrZXxpbm90bGlrZXxpbWF0Y2h8aW5vdG1hdGNofGlyZXBsYWNlfGljb250YWluc3xpbm90Y29udGFpbnN8aXN8aXNub3R8YXN8YW5kfG9yfGJhbmR8Ym9yfG5vdCI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIjLiokIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXStcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIscmVnZXg6IlskXSg/OltUdF1ydWV8W0ZmXWFsc2UpXFxiIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZSIscmVnZXg6IlskXVtObl11bGxcXGIifSx7dG9rZW46InZhcmlhYmxlLmluc3RhbmNlIixyZWdleDoiWyRdW2EtekEtWl1bYS16QS1aMC05X10qXFxiIn0se3Rva2VuOmZ1bmN0aW9uKGMpe3JldHVybiBhLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGMpPyJzdXBwb3J0LmZ1bmN0aW9uIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXFwtXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXC0oPzoiK2MrIikifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiImfFxcKnxcXCt8XFwtfFxcPXxcXCs9fFxcLT0ifSx7dG9rZW46ImxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19fTtkLmluaGVyaXRzKGcsZiksYi5Qb3dlcnNoZWxsSGlnaGxpZ2h0UnVsZXM9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWZ1bmN0aW9uKCl7dGhpcy5hZGQoImJyYWNlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0ieyIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiJ7IitnKyJ9IixzZWxlY3Rpb246ITF9Ont0ZXh0OiJ7fSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0ifSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgbD1kLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpoLnJvdyxjb2x1bW46aC5jb2x1bW4rMX0pO2lmKCFsKXJldHVybiBudWxsO3ZhciBtPXRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoYSxpLnN1YnN0cmluZygwLGkubGVuZ3RoLTEpLGQuZ2V0VGFiU3RyaW5nKCkpLG49dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUobC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK20rIlxuIituLHNlbGVjdGlvbjpbMSxtLmxlbmd0aCwxLG0ubGVuZ3RoXX19fX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09InsiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixlLmVuZC5jb2x1bW4rMSk7aWYoaD09In0iKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IigiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoiKCIrZysiKSIsc2VsZWN0aW9uOiExfTp7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09IikiKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSIpIil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCIpIix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInBhcmVucyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0iKCIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0iKSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSciJyl7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO2lmKGchPT0iIilyZXR1cm57dGV4dDonIicrZysnIicsc2VsZWN0aW9uOiExfTt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLTEsaC5jb2x1bW4pO2lmKGo9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGs9ZC5nZXRUb2tlbnMoZi5zdGFydC5yb3csZi5zdGFydC5yb3cpWzBdLnRva2VucyxsPTAsbSxuPS0xO2Zvcih2YXIgbz0wO288ay5sZW5ndGg7bysrKXttPWtbb10sbS50eXBlPT0ic3RyaW5nIj9uPS0xOm48MCYmKG49bS52YWx1ZS5pbmRleE9mKCciJykpO2lmKG0udmFsdWUubGVuZ3RoK2w+Zi5zdGFydC5jb2x1bW4pYnJlYWs7bCs9a1tvXS52YWx1ZS5sZW5ndGh9aWYoIW18fG48MCYmbS50eXBlIT09ImNvbW1lbnQiJiYobS50eXBlIT09InN0cmluZyJ8fGYuc3RhcnQuY29sdW1uIT09bS52YWx1ZS5sZW5ndGgrbC0xJiZtLnZhbHVlLmxhc3RJbmRleE9mKCciJyk9PT1tLnZhbHVlLmxlbmd0aC0xKSlyZXR1cm57dGV4dDonIiInLHNlbGVjdGlvbjpbMSwxXX07aWYobSYmbS50eXBlPT09InN0cmluZyIpe3ZhciBwPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKHA9PSciJylyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09JyInKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09JyInKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pfTtkLmluaGVyaXRzKGYsZSksYi5Dc3R5bGVCZWhhdmlvdXI9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-powershell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wb3dlcnNoZWxsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3Bvd2Vyc2hlbGxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vcG93ZXJzaGVsbF9oaWdobGlnaHRfcnVsZXMiKS5Qb3dlcnNoZWxsSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGksdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucztpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Iil7dmFyIGc9Yi5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7ZyYmKGQrPWMpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGx9fS5jYWxsKGsucHJvdG90eXBlKSxiLk1vZGU9a30pLGRlZmluZSgiYWNlL21vZGUvcG93ZXJzaGVsbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJmdW5jdGlvbnxpZnxlbHNlfGVsc2VpZnxzd2l0Y2h8d2hpbGV8ZGVmYXVsdHxmb3J8ZG98dW50aWx8YnJlYWt8Y29udGludWV8Zm9yZWFjaHxyZXR1cm58ZmlsdGVyfGlufHRyYXB8dGhyb3d8cGFyYW18YmVnaW58cHJvY2Vzc3xlbmQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJHZXQtQWxpYXN8SW1wb3J0LUFsaWFzfE5ldy1BbGlhc3xTZXQtQWxpYXN8R2V0LUF1dGhlbnRpY29kZVNpZ25hdHVyZXxTZXQtQXV0aGVudGljb2RlU2lnbmF0dXJlfFNldC1Mb2NhdGlvbnxHZXQtQ2hpbGRJdGVtfENsZWFyLUl0ZW18R2V0LUNvbW1hbmR8TWVhc3VyZS1Db21tYW5kfFRyYWNlLUNvbW1hbmR8QWRkLUNvbXB1dGVyfENoZWNrcG9pbnQtQ29tcHV0ZXJ8UmVtb3ZlLUNvbXB1dGVyfFJlc3RhcnQtQ29tcHV0ZXJ8UmVzdG9yZS1Db21wdXRlcnxTdG9wLUNvbXB1dGVyfFJlc2V0LUNvbXB1dGVyTWFjaGluZVBhc3N3b3JkfFRlc3QtQ29tcHV0ZXJTZWN1cmVDaGFubmVsfEFkZC1Db250ZW50fEdldC1Db250ZW50fFNldC1Db250ZW50fENsZWFyLUNvbnRlbnR8R2V0LUNvbW1hbmR8SW52b2tlLUNvbW1hbmR8RW5hYmxlLUNvbXB1dGVyUmVzdG9yZXxEaXNhYmxlLUNvbXB1dGVyUmVzdG9yZXxHZXQtQ29tcHV0ZXJSZXN0b3JlUG9pbnR8VGVzdC1Db25uZWN0aW9ufENvbnZlcnRGcm9tLUNTVnxDb252ZXJ0VG8tQ1NWfENvbnZlcnRUby1IdG1sfENvbnZlcnRUby1YbWx8Q29udmVydEZyb20tU2VjdXJlU3RyaW5nfENvbnZlcnRUby1TZWN1cmVTdHJpbmd8Q29weS1JdGVtfEV4cG9ydC1Db3VudGVyfEdldC1Db3VudGVyfEltcG9ydC1Db3VudGVyfEdldC1DcmVkZW50aWFsfEdldC1DdWx0dXJlfEdldC1DaGlsZEl0ZW18R2V0LURhdGV8U2V0LURhdGV8UmVtb3ZlLUl0ZW18Q29tcGFyZS1PYmplY3R8R2V0LUV2ZW50fEdldC1XaW5FdmVudHxOZXctRXZlbnR8UmVtb3ZlLUV2ZW50fFVucmVnaXN0ZXItRXZlbnR8V2FpdC1FdmVudHxDbGVhci1FdmVudExvZ3xHZXQtRXZlbnRsb2d8TGltaXQtRXZlbnRMb2d8TmV3LUV2ZW50bG9nfFJlbW92ZS1FdmVudExvZ3xTaG93LUV2ZW50TG9nfFdyaXRlLUV2ZW50TG9nfEdldC1FdmVudFN1YnNjcmliZXJ8UmVnaXN0ZXItRW5naW5lRXZlbnR8UmVnaXN0ZXItT2JqZWN0RXZlbnR8UmVnaXN0ZXItV21pRXZlbnR8R2V0LUV4ZWN1dGlvblBvbGljeXxTZXQtRXhlY3V0aW9uUG9saWN5fEV4cG9ydC1BbGlhc3xFeHBvcnQtQ2xpeG1sfEV4cG9ydC1Db25zb2xlfEV4cG9ydC1Dc3Z8Rm9yRWFjaC1PYmplY3R8Rm9ybWF0LUN1c3RvbXxGb3JtYXQtTGlzdHxGb3JtYXQtVGFibGV8Rm9ybWF0LVdpZGV8RXhwb3J0LUZvcm1hdERhdGF8R2V0LUZvcm1hdERhdGF8R2V0LUl0ZW18R2V0LUNoaWxkSXRlbXxHZXQtSGVscHxBZGQtSGlzdG9yeXxDbGVhci1IaXN0b3J5fEdldC1IaXN0b3J5fEludm9rZS1IaXN0b3J5fEdldC1Ib3N0fFJlYWQtSG9zdHxXcml0ZS1Ib3N0fEdldC1Ib3RGaXh8SW1wb3J0LUNsaXhtbHxJbXBvcnQtQ3N2fEludm9rZS1Db21tYW5kfEludm9rZS1FeHByZXNzaW9ufEdldC1JdGVtfEludm9rZS1JdGVtfE5ldy1JdGVtfFJlbW92ZS1JdGVtfFNldC1JdGVtfENsZWFyLUl0ZW1Qcm9wZXJ0eXxDb3B5LUl0ZW1Qcm9wZXJ0eXxHZXQtSXRlbVByb3BlcnR5fE1vdmUtSXRlbVByb3BlcnR5fE5ldy1JdGVtUHJvcGVydHl8UmVtb3ZlLUl0ZW1Qcm9wZXJ0eXxSZW5hbWUtSXRlbVByb3BlcnR5fFNldC1JdGVtUHJvcGVydHl8R2V0LUpvYnxSZWNlaXZlLUpvYnxSZW1vdmUtSm9ifFN0YXJ0LUpvYnxTdG9wLUpvYnxXYWl0LUpvYnxTdG9wLVByb2Nlc3N8VXBkYXRlLUxpc3R8R2V0LUxvY2F0aW9ufFBvcC1Mb2NhdGlvbnxQdXNoLUxvY2F0aW9ufFNldC1Mb2NhdGlvbnxTZW5kLU1haWxNZXNzYWdlfEFkZC1NZW1iZXJ8R2V0LU1lbWJlcnxNb3ZlLUl0ZW18Q29tcGFyZS1PYmplY3R8R3JvdXAtT2JqZWN0fE1lYXN1cmUtT2JqZWN0fE5ldy1PYmplY3R8U2VsZWN0LU9iamVjdHxTb3J0LU9iamVjdHxXaGVyZS1PYmplY3R8T3V0LURlZmF1bHR8T3V0LUZpbGV8T3V0LUdyaWRWaWV3fE91dC1Ib3N0fE91dC1OdWxsfE91dC1QcmludGVyfE91dC1TdHJpbmd8Q29udmVydC1QYXRofEpvaW4tUGF0aHxSZXNvbHZlLVBhdGh8U3BsaXQtUGF0aHxUZXN0LVBhdGh8R2V0LVBmeGNlcnRpZmljYXRlfFBvcC1Mb2NhdGlvbnxQdXNoLUxvY2F0aW9ufEdldC1Qcm9jZXNzfFN0YXJ0LVByb2Nlc3N8U3RvcC1Qcm9jZXNzfFdhaXQtUHJvY2Vzc3xFbmFibGUtUFNCcmVha3BvaW50fERpc2FibGUtUFNCcmVha3BvaW50fEdldC1QU0JyZWFrcG9pbnR8U2V0LVBTQnJlYWtwb2ludHxSZW1vdmUtUFNCcmVha3BvaW50fEdldC1QU0RyaXZlfE5ldy1QU0RyaXZlfFJlbW92ZS1QU0RyaXZlfEdldC1QU1Byb3ZpZGVyfFNldC1QU2RlYnVnfEVudGVyLVBTU2Vzc2lvbnxFeGl0LVBTU2Vzc2lvbnxFeHBvcnQtUFNTZXNzaW9ufEdldC1QU1Nlc3Npb258SW1wb3J0LVBTU2Vzc2lvbnxOZXctUFNTZXNzaW9ufFJlbW92ZS1QU1Nlc3Npb258RGlzYWJsZS1QU1Nlc3Npb25Db25maWd1cmF0aW9ufEVuYWJsZS1QU1Nlc3Npb25Db25maWd1cmF0aW9ufEdldC1QU1Nlc3Npb25Db25maWd1cmF0aW9ufFJlZ2lzdGVyLVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb258U2V0LVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb258VW5yZWdpc3Rlci1QU1Nlc3Npb25Db25maWd1cmF0aW9ufE5ldy1QU1Nlc3Npb25PcHRpb258QWRkLVBzU25hcElufEdldC1Qc1NuYXBpbnxSZW1vdmUtUFNTbmFwaW58R2V0LVJhbmRvbXxSZWFkLUhvc3R8UmVtb3ZlLUl0ZW18UmVuYW1lLUl0ZW18UmVuYW1lLUl0ZW1Qcm9wZXJ0eXxTZWxlY3QtT2JqZWN0fFNlbGVjdC1YTUx8U2VuZC1NYWlsTWVzc2FnZXxHZXQtU2VydmljZXxOZXctU2VydmljZXxSZXN0YXJ0LVNlcnZpY2V8UmVzdW1lLVNlcnZpY2V8U2V0LVNlcnZpY2V8U3RhcnQtU2VydmljZXxTdG9wLVNlcnZpY2V8U3VzcGVuZC1TZXJ2aWNlfFNvcnQtT2JqZWN0fFN0YXJ0LVNsZWVwfENvbnZlcnRGcm9tLVN0cmluZ0RhdGF8U2VsZWN0LVN0cmluZ3xUZWUtT2JqZWN0fE5ldy1UaW1lc3BhbnxUcmFjZS1Db21tYW5kfEdldC1UcmFjZXNvdXJjZXxTZXQtVHJhY2Vzb3VyY2V8U3RhcnQtVHJhbnNhY3Rpb258Q29tcGxldGUtVHJhbnNhY3Rpb258R2V0LVRyYW5zYWN0aW9ufFVzZS1UcmFuc2FjdGlvbnxVbmRvLVRyYW5zYWN0aW9ufFN0YXJ0LVRyYW5zY3JpcHR8U3RvcC1UcmFuc2NyaXB0fEFkZC1UeXBlfFVwZGF0ZS1UeXBlRGF0YXxHZXQtVWljdWx0dXJlfEdldC1VbmlxdWV8VXBkYXRlLUZvcm1hdGRhdGF8VXBkYXRlLVR5cGVkYXRhfENsZWFyLVZhcmlhYmxlfEdldC1WYXJpYWJsZXxOZXctVmFyaWFibGV8UmVtb3ZlLVZhcmlhYmxlfFNldC1WYXJpYWJsZXxOZXctV2ViU2VydmljZVByb3h5fFdoZXJlLU9iamVjdHxXcml0ZS1EZWJ1Z3xXcml0ZS1FcnJvcnxXcml0ZS1Ib3N0fFdyaXRlLU91dHB1dHxXcml0ZS1Qcm9ncmVzc3xXcml0ZS1WZXJib3NlfFdyaXRlLVdhcm5pbmd8U2V0LVdtaUluc3RhbmNlfEludm9rZS1XbWlNZXRob2R8R2V0LVdtaU9iamVjdHxSZW1vdmUtV21pT2JqZWN0fENvbm5lY3QtV1NNYW58RGlzY29ubmVjdC1XU01hbnxUZXN0LVdTTWFufEludm9rZS1XU01hbkFjdGlvbnxEaXNhYmxlLVdTTWFuQ3JlZFNTUHxFbmFibGUtV1NNYW5DcmVkU1NQfEdldC1XU01hbkNyZWRTU1B8TmV3LVdTTWFuSW5zdGFuY2V8R2V0LVdTTWFuSW5zdGFuY2V8U2V0LVdTTWFuSW5zdGFuY2V8UmVtb3ZlLVdTTWFuSW5zdGFuY2V8U2V0LVdTTWFuUXVpY2tDb25maWd8TmV3LVdTTWFuU2Vzc2lvbk9wdGlvbiIuc3BsaXQoInwiKSksYz0iZXF8bmV8Z2V8Z3R8bHR8bGV8bGlrZXxub3RsaWtlfG1hdGNofG5vdG1hdGNofHJlcGxhY2V8Y29udGFpbnN8bm90Y29udGFpbnN8aWVxfGluZXxpZ2V8aWd0fGlsZXxpbHR8aWxpa2V8aW5vdGxpa2V8aW1hdGNofGlub3RtYXRjaHxpcmVwbGFjZXxpY29udGFpbnN8aW5vdGNvbnRhaW5zfGlzfGlzbm90fGFzfGFuZHxvcnxiYW5kfGJvcnxub3QiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiIy4qJCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiJbJF0oPzpbVHRdcnVlfFtGZl1hbHNlKVxcYiJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UiLHJlZ2V4OiJbJF1bTm5ddWxsXFxiIn0se3Rva2VuOiJ2YXJpYWJsZS5pbnN0YW5jZSIscmVnZXg6IlskXVthLXpBLVpdW2EtekEtWjAtOV9dKlxcYiJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8ic3VwcG9ydC5mdW5jdGlvbiI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJFxcLV0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwtKD86IitjKyIpIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiJnxcXCp8XFwrfFxcLXxcXD18XFwrPXxcXC09In0se3Rva2VuOiJscGFyZW4iLHJlZ2V4OiJbWyh7XSJ9LHt0b2tlbjoicnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfX07ZC5pbmhlcml0cyhnLGYpLGIuUG93ZXJzaGVsbEhpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-python-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvcHl0aG9uIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3B5dGhvbl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL3B5dGhvbmljIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9weXRob25faGlnaGxpZ2h0X3J1bGVzIikuUHl0aG9uSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL2ZvbGRpbmcvcHl0aG9uaWMiKS5Gb2xkTW9kZSxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBoKCJcXDoiKX07ZC5pbmhlcml0cyhqLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopIy87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBoPW5ldyBpKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2guc3RhcnQucm93PWcsaC5lbmQucm93PWcsaC5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShoLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIiMiKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQiKXt2YXIgZz1iLm1hdGNoKC9eLipbXHtcKFxbXDpdXHMqJC8pO2cmJihkKz1jKX1yZXR1cm4gZH07dmFyIGE9e3Bhc3M6MSwicmV0dXJuIjoxLHJhaXNlOjEsImJyZWFrIjoxLCJjb250aW51ZSI6MX07dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYixjLGQpe2lmKGQhPT0iXHJcbiImJmQhPT0iXHIiJiZkIT09IlxuIilyZXR1cm4hMTt2YXIgZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhjLnRyaW0oKSxiKS50b2tlbnM7aWYoIWUpcmV0dXJuITE7ZG8gdmFyIGY9ZS5wb3AoKTt3aGlsZShmJiYoZi50eXBlPT0iY29tbWVudCJ8fGYudHlwZT09InRleHQiJiZmLnZhbHVlLm1hdGNoKC9eXHMrJC8pKSk7cmV0dXJuIGY/Zi50eXBlPT0ia2V5d29yZCImJmFbZi52YWx1ZV06ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe2MrPTE7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIuZ2V0TGluZShjKSksZT1iLmdldFRhYlN0cmluZygpO2Quc2xpY2UoLWUubGVuZ3RoKT09ZSYmYi5yZW1vdmUobmV3IGkoYyxkLmxlbmd0aC1lLmxlbmd0aCxjLGQubGVuZ3RoKSl9fS5jYWxsKGoucHJvdG90eXBlKSxiLk1vZGU9an0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL3B5dGhvbl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJhbmR8YXN8YXNzZXJ0fGJyZWFrfGNsYXNzfGNvbnRpbnVlfGRlZnxkZWx8ZWxpZnxlbHNlfGV4Y2VwdHxleGVjfGZpbmFsbHl8Zm9yfGZyb218Z2xvYmFsfGlmfGltcG9ydHxpbnxpc3xsYW1iZGF8bm90fG9yfHBhc3N8cHJpbnR8cmFpc2V8cmV0dXJufHRyeXx3aGlsZXx3aXRofHlpZWxkIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgiVHJ1ZXxGYWxzZXxOb25lfE5vdEltcGxlbWVudGVkfEVsbGlwc2lzfF9fZGVidWdfXyIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImFic3xkaXZtb2R8aW5wdXR8b3BlbnxzdGF0aWNtZXRob2R8YWxsfGVudW1lcmF0ZXxpbnR8b3JkfHN0cnxhbnl8ZXZhbHxpc2luc3RhbmNlfHBvd3xzdW18YmFzZXN0cmluZ3xleGVjZmlsZXxpc3N1YmNsYXNzfHByaW50fHN1cGVyfGJpbmZpbGV8aXRlcnxwcm9wZXJ0eXx0dXBsZXxib29sfGZpbHRlcnxsZW58cmFuZ2V8dHlwZXxieXRlYXJyYXl8ZmxvYXR8bGlzdHxyYXdfaW5wdXR8dW5pY2hyfGNhbGxhYmxlfGZvcm1hdHxsb2NhbHN8cmVkdWNlfHVuaWNvZGV8Y2hyfGZyb3plbnNldHxsb25nfHJlbG9hZHx2YXJzfGNsYXNzbWV0aG9kfGdldGF0dHJ8bWFwfHJlcHJ8eHJhbmdlfGNtcHxnbG9iYWxzfG1heHxyZXZlcnNlZHx6aXB8Y29tcGlsZXxoYXNhdHRyfG1lbW9yeXZpZXd8cm91bmR8X19pbXBvcnRfX3xjb21wbGV4fGhhc2h8bWlufHNldHxhcHBseXxkZWxhdHRyfGhlbHB8bmV4dHxzZXRhdHRyfGJ1ZmZlcnxkaWN0fGhleHxvYmplY3R8c2xpY2V8Y29lcmNlfGRpcnxpZHxvY3R8c29ydGVkfGludGVybiIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoIiIuc3BsaXQoInwiKSksZj0iKD86cnx1fHVyfFJ8VXxVUnxVcnx1Uik/IixnPSIoPzooPzpbMS05XVxcZCopfCg/OjApKSIsaD0iKD86MFtvT10/WzAtN10rKSIsaT0iKD86MFt4WF1bXFxkQS1GYS1mXSspIixqPSIoPzowW2JCXVswMV0rKSIsaz0iKD86IitnKyJ8IitoKyJ8IitpKyJ8IitqKyIpIixsPSIoPzpbZUVdWystXT9cXGQrKSIsbT0iKD86XFwuXFxkKykiLG49Iig/OlxcZCspIixvPSIoPzooPzoiK24rIj8iK20rIil8KD86IituKyJcXC4pKSIscD0iKD86KD86IitvKyJ8IituKyIpIitsKyIpIixxPSIoPzoiK3ArInwiK28rIikiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiIy4qJCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDpmKyciezN9KD86W15cXFxcXXxcXFxcLikqPyJ7M30nfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6ZisnInszfS4qJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6ZisnIig/OlteXFxcXF18XFxcXC4pKj8iJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmYrIid7M30oPzpbXlxcXFxdfFxcXFwuKSo/J3szfSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDpmKyInezN9LiokIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmYrIicoPzpbXlxcXFxdfFxcXFwuKSo/JyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6Iig/OiIrcSsifFxcZCspW2pKXVxcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6cX0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDprKyJbbExdXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDprKyJcXGIifSx7dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoZSk/ImtleXdvcmQiOmIuaGFzT3duUHJvcGVydHkoZSk/ImNvbnN0YW50Lmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGUpPyJpbnZhbGlkLmlsbGVnYWwiOmMuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOmU9PSJkZWJ1Z2dlciI/ImludmFsaWQuZGVwcmVjYXRlZCI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwrfFxcLXxcXCp8XFwqXFwqfFxcL3xcXC9cXC98JXw8PHw+PnwmfFxcfHxcXF58fnw8fD58PD18PT58PT18IT18PD58PSJ9LHt0b2tlbjoibHBhcmVuLnBhcmVuIixyZWdleDoiW1xcW1xcKFxce10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF1cXClcXH1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzpbXlxcXFxdfFxcXFwuKSo/InszfScsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqPyd7M30iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX19O2QuaW5oZXJpdHMoZyxmKSxiLlB5dGhvbkhpZ2hsaWdodFJ1bGVzPWd9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3B5dGhvbmljIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxmPWIuRm9sZE1vZGU9ZnVuY3Rpb24oYSl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bmV3IFJlZ0V4cCgiKD86KFtcXFt7XSl8KCIrYSsiKSkoPzpcXHMqKSg/OiMuKik/JCIpfTtkLmluaGVyaXRzKGYsZSksZnVuY3Rpb24oKXt0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGU9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZSlyZXR1cm4gZVsxXT90aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxlWzFdLGMsZS5pbmRleCk6ZVsyXT90aGlzLmluZGVudGF0aW9uQmxvY2soYSxjLGUuaW5kZXgrZVsyXS5sZW5ndGgpOnRoaXMuaW5kZW50YXRpb25CbG9jayhhLGMpfX0uY2FsbChmLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-python.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9weXRob24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvcHl0aG9uaWMiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3B5dGhvbl9oaWdobGlnaHRfcnVsZXMiKS5QeXRob25IaWdobGlnaHRSdWxlcyxoPWEoIi4vZm9sZGluZy9weXRob25pYyIpLkZvbGRNb2RlLGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGgoIlxcOiIpfTtkLmluaGVyaXRzKGosZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKikjLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiIyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnM7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCIpe3ZhciBnPWIubWF0Y2goL14uKltce1woXFtcOl1ccyokLyk7ZyYmKGQrPWMpfXJldHVybiBkfTt2YXIgYT17cGFzczoxLCJyZXR1cm4iOjEscmFpc2U6MSwiYnJlYWsiOjEsImNvbnRpbnVlIjoxfTt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihiLGMsZCl7aWYoZCE9PSJcclxuIiYmZCE9PSJcciImJmQhPT0iXG4iKXJldHVybiExO3ZhciBlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGMudHJpbSgpLGIpLnRva2VucztpZighZSlyZXR1cm4hMTtkbyB2YXIgZj1lLnBvcCgpO3doaWxlKGYmJihmLnR5cGU9PSJjb21tZW50Inx8Zi50eXBlPT0idGV4dCImJmYudmFsdWUubWF0Y2goL15ccyskLykpKTtyZXR1cm4gZj9mLnR5cGU9PSJrZXl3b3JkIiYmYVtmLnZhbHVlXTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7Yys9MTt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYi5nZXRMaW5lKGMpKSxlPWIuZ2V0VGFiU3RyaW5nKCk7ZC5zbGljZSgtZS5sZW5ndGgpPT1lJiZiLnJlbW92ZShuZXcgaShjLGQubGVuZ3RoLWUubGVuZ3RoLGMsZC5sZW5ndGgpKX19LmNhbGwoai5wcm90b3R5cGUpLGIuTW9kZT1qfSksZGVmaW5lKCJhY2UvbW9kZS9weXRob25faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZz1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYW5kfGFzfGFzc2VydHxicmVha3xjbGFzc3xjb250aW51ZXxkZWZ8ZGVsfGVsaWZ8ZWxzZXxleGNlcHR8ZXhlY3xmaW5hbGx5fGZvcnxmcm9tfGdsb2JhbHxpZnxpbXBvcnR8aW58aXN8bGFtYmRhfG5vdHxvcnxwYXNzfHByaW50fHJhaXNlfHJldHVybnx0cnl8d2hpbGV8d2l0aHx5aWVsZCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIlRydWV8RmFsc2V8Tm9uZXxOb3RJbXBsZW1lbnRlZHxFbGxpcHNpc3xfX2RlYnVnX18iLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJhYnN8ZGl2bW9kfGlucHV0fG9wZW58c3RhdGljbWV0aG9kfGFsbHxlbnVtZXJhdGV8aW50fG9yZHxzdHJ8YW55fGV2YWx8aXNpbnN0YW5jZXxwb3d8c3VtfGJhc2VzdHJpbmd8ZXhlY2ZpbGV8aXNzdWJjbGFzc3xwcmludHxzdXBlcnxiaW5maWxlfGl0ZXJ8cHJvcGVydHl8dHVwbGV8Ym9vbHxmaWx0ZXJ8bGVufHJhbmdlfHR5cGV8Ynl0ZWFycmF5fGZsb2F0fGxpc3R8cmF3X2lucHV0fHVuaWNocnxjYWxsYWJsZXxmb3JtYXR8bG9jYWxzfHJlZHVjZXx1bmljb2RlfGNocnxmcm96ZW5zZXR8bG9uZ3xyZWxvYWR8dmFyc3xjbGFzc21ldGhvZHxnZXRhdHRyfG1hcHxyZXByfHhyYW5nZXxjbXB8Z2xvYmFsc3xtYXh8cmV2ZXJzZWR8emlwfGNvbXBpbGV8aGFzYXR0cnxtZW1vcnl2aWV3fHJvdW5kfF9faW1wb3J0X198Y29tcGxleHxoYXNofG1pbnxzZXR8YXBwbHl8ZGVsYXR0cnxoZWxwfG5leHR8c2V0YXR0cnxidWZmZXJ8ZGljdHxoZXh8b2JqZWN0fHNsaWNlfGNvZXJjZXxkaXJ8aWR8b2N0fHNvcnRlZHxpbnRlcm4iLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCIiLnNwbGl0KCJ8IikpLGY9Iig/OnJ8dXx1cnxSfFV8VVJ8VXJ8dVIpPyIsZz0iKD86KD86WzEtOV1cXGQqKXwoPzowKSkiLGg9Iig/OjBbb09dP1swLTddKykiLGk9Iig/OjBbeFhdW1xcZEEtRmEtZl0rKSIsaj0iKD86MFtiQl1bMDFdKykiLGs9Iig/OiIrZysifCIraCsifCIraSsifCIraisiKSIsbD0iKD86W2VFXVsrLV0/XFxkKykiLG09Iig/OlxcLlxcZCspIixuPSIoPzpcXGQrKSIsbz0iKD86KD86IituKyI/IittKyIpfCg/OiIrbisiXFwuKSkiLHA9Iig/Oig/OiIrbysifCIrbisiKSIrbCsiKSIscT0iKD86IitwKyJ8IitvKyIpIjt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IiMuKiQifSx7dG9rZW46InN0cmluZyIscmVnZXg6ZisnInszfSg/OlteXFxcXF18XFxcXC4pKj8iezN9J30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OmYrJyJ7M30uKiQnLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmYrJyIoPzpbXlxcXFxdfFxcXFwuKSo/Iid9LHt0b2tlbjoic3RyaW5nIixyZWdleDpmKyInezN9KD86W15cXFxcXXxcXFxcLikqPyd7M30ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6ZisiJ3szfS4qJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDpmKyInKD86W15cXFxcXXxcXFxcLikqPycifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIoPzoiK3ErInxcXGQrKVtqSl1cXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OnF9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6aysiW2xMXVxcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6aysiXFxiIn0se3Rva2VuOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhc093blByb3BlcnR5KGUpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGUpPyJjb25zdGFudC5sYW5ndWFnZSI6ZC5oYXNPd25Qcm9wZXJ0eShlKT8iaW52YWxpZC5pbGxlZ2FsIjpjLmhhc093blByb3BlcnR5KGUpPyJzdXBwb3J0LmZ1bmN0aW9uIjplPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcK3xcXC18XFwqfFxcKlxcKnxcXC98XFwvXFwvfCV8PDx8Pj58JnxcXHx8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fD0ifSx7dG9rZW46ImxwYXJlbi5wYXJlbiIscmVnZXg6IltcXFtcXChcXHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdXFwpXFx9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86W15cXFxcXXxcXFxcLikqPyJ7M30nLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj8nezN9IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19fTtkLmluaGVyaXRzKGcsZiksYi5QeXRob25IaWdobGlnaHRSdWxlcz1nfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3B5dGhvbmljIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxmPWIuRm9sZE1vZGU9ZnVuY3Rpb24oYSl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bmV3IFJlZ0V4cCgiKD86KFtcXFt7XSl8KCIrYSsiKSkoPzpcXHMqKSg/OiMuKik/JCIpfTtkLmluaGVyaXRzKGYsZSksZnVuY3Rpb24oKXt0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGU9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZSlyZXR1cm4gZVsxXT90aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxlWzFdLGMsZS5pbmRleCk6ZVsyXT90aGlzLmluZGVudGF0aW9uQmxvY2soYSxjLGUuaW5kZXgrZVsyXS5sZW5ndGgpOnRoaXMuaW5kZW50YXRpb25CbG9jayhhLGMpfX0uY2FsbChmLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-ruby-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvcnVieSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3J1YnlfaGlnaGxpZ2h0X3J1bGVzIikuUnVieUhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBofTtkLmluaGVyaXRzKGosZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKikjLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiIyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnM7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCIpe3ZhciBnPWIubWF0Y2goL14uKltce1woXFtdXHMqJC8pO2cmJihkKz1jKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9fS5jYWxsKGoucHJvdG90eXBlKSxiLk1vZGU9an0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL3J1YnlfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZz1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYWJvcnR8QXJyYXl8YXNzZXJ0fGFzc2VydF9lcXVhbHxhc3NlcnRfbm90X2VxdWFsfGFzc2VydF9zYW1lfGFzc2VydF9ub3Rfc2FtZXxhc3NlcnRfbmlsfGFzc2VydF9ub3RfbmlsfGFzc2VydF9tYXRjaHxhc3NlcnRfbm9fbWF0Y2h8YXNzZXJ0X2luX2RlbHRhfGFzc2VydF90aHJvd3N8YXNzZXJ0X3JhaXNlfGFzc2VydF9ub3RoaW5nX3JhaXNlZHxhc3NlcnRfaW5zdGFuY2Vfb2Z8YXNzZXJ0X2tpbmRfb2Z8YXNzZXJ0X3Jlc3BvbmRfdG98YXNzZXJ0X29wZXJhdG9yfGFzc2VydF9zZW5kfGFzc2VydF9kaWZmZXJlbmNlfGFzc2VydF9ub19kaWZmZXJlbmNlfGFzc2VydF9yZWNvZ25pemVzfGFzc2VydF9nZW5lcmF0ZXN8YXNzZXJ0X3Jlc3BvbnNlfGFzc2VydF9yZWRpcmVjdGVkX3RvfGFzc2VydF90ZW1wbGF0ZXxhc3NlcnRfc2VsZWN0fGFzc2VydF9zZWxlY3RfZW1haWx8YXNzZXJ0X3NlbGVjdF9yanN8YXNzZXJ0X3NlbGVjdF9lbmNvZGVkfGNzc19zZWxlY3R8YXRfZXhpdHxhdHRyfGF0dHJfd3JpdGVyfGF0dHJfcmVhZGVyfGF0dHJfYWNjZXNzb3J8YXR0cl9hY2Nlc3NpYmxlfGF1dG9sb2FkfGJpbmRpbmd8YmxvY2tfZ2l2ZW4/fGNhbGxjY3xjYWxsZXJ8Y2F0Y2h8Y2hvbXB8Y2hvbXAhfGNob3B8Y2hvcCF8ZGVmaW5lZD98ZGVsZXRlX3ZpYV9yZWRpcmVjdHxldmFsfGV4ZWN8ZXhpdHxleGl0IXxmYWlsfEZsb2F0fGZsdW5rfGZvbGxvd19yZWRpcmVjdCF8Zm9ya3xmb3JtX2Zvcnxmb3JtX3RhZ3xmb3JtYXR8Z2V0c3xnbG9iYWxfdmFyaWFibGVzfGdzdWJ8Z3N1YiF8Z2V0X3ZpYV9yZWRpcmVjdHxofGhvc3QhfGh0dHBzP3xodHRwcyF8aW5jbHVkZXxJbnRlZ2VyfGxhbWJkYXxsaW5rX3RvfGxpbmtfdG9fdW5sZXNzX2N1cnJlbnR8bGlua190b19mdW5jdGlvbnxsaW5rX3RvX3JlbW90ZXxsb2FkfGxvY2FsX3ZhcmlhYmxlc3xsb29wfG9wZW58b3Blbl9zZXNzaW9ufHB8cHJpbnR8cHJpbnRmfHByb2N8cHV0Y3xwdXRzfHBvc3RfdmlhX3JlZGlyZWN0fHB1dF92aWFfcmVkaXJlY3R8cmFpc2V8cmFuZHxyYXd8cmVhZGxpbmV8cmVhZGxpbmVzfHJlZGlyZWN0P3xyZXF1ZXN0X3ZpYV9yZWRpcmVjdHxyZXF1aXJlfHNjYW58c2VsZWN0fHNldF90cmFjZV9mdW5jfHNsZWVwfHNwbGl0fHNwcmludGZ8c3JhbmR8U3RyaW5nfHN0eWxlc2hlZXRfbGlua190YWd8c3lzY2FsbHxzeXN0ZW18c3VifHN1YiF8dGVzdHx0aHJvd3x0cmFjZV92YXJ8dHJhcHx1bnRyYWNlX3ZhcnxhdGFuMnxjb3N8ZXhwfGZyZXhwfGxkZXhwfGxvZ3xsb2cxMHxzaW58c3FydHx0YW58cmVuZGVyfGphdmFzY3JpcHRfaW5jbHVkZV90YWd8Y3NyZl9tZXRhX3RhZ3xsYWJlbF90YWd8dGV4dF9maWVsZF90YWd8c3VibWl0X3RhZ3xjaGVja19ib3hfdGFnfGNvbnRlbnRfdGFnfHJhZGlvX2J1dHRvbl90YWd8dGV4dF9hcmVhX3RhZ3xwYXNzd29yZF9maWVsZF90YWd8aGlkZGVuX2ZpZWxkX3RhZ3xmaWVsZHNfZm9yfHNlbGVjdF90YWd8b3B0aW9uc19mb3Jfc2VsZWN0fG9wdGlvbnNfZnJvbV9jb2xsZWN0aW9uX2Zvcl9zZWxlY3R8Y29sbGVjdGlvbl9zZWxlY3R8dGltZV96b25lX3NlbGVjdHxzZWxlY3RfZGF0ZXxzZWxlY3RfdGltZXxzZWxlY3RfZGF0ZXRpbWV8ZGF0ZV9zZWxlY3R8dGltZV9zZWxlY3R8ZGF0ZXRpbWVfc2VsZWN0fHNlbGVjdF95ZWFyfHNlbGVjdF9tb250aHxzZWxlY3RfZGF5fHNlbGVjdF9ob3VyfHNlbGVjdF9taW51dGV8c2VsZWN0X3NlY29uZHxmaWxlX2ZpZWxkX3RhZ3xmaWxlX2ZpZWxkfHJlc3BvbmRfdG98c2tpcF9iZWZvcmVfZmlsdGVyfGFyb3VuZF9maWx0ZXJ8YWZ0ZXJfZmlsdGVyfHZlcmlmeXxwcm90ZWN0X2Zyb21fZm9yZ2VyeXxyZXNjdWVfZnJvbXxoZWxwZXJfbWV0aG9kfHJlZGlyZWN0X3RvfGJlZm9yZV9maWx0ZXJ8c2VuZF9kYXRhfHNlbmRfZmlsZXx2YWxpZGF0ZXNfcHJlc2VuY2Vfb2Z8dmFsaWRhdGVzX3VuaXF1ZW5lc3Nfb2Z8dmFsaWRhdGVzX2xlbmd0aF9vZnx2YWxpZGF0ZXNfZm9ybWF0X29mfHZhbGlkYXRlc19hY2NlcHRhbmNlX29mfHZhbGlkYXRlc19hc3NvY2lhdGVkfHZhbGlkYXRlc19leGNsdXNpb25fb2Z8dmFsaWRhdGVzX2luY2x1c2lvbl9vZnx2YWxpZGF0ZXNfbnVtZXJpY2FsaXR5X29mfHZhbGlkYXRlc193aXRofHZhbGlkYXRlc19lYWNofGF1dGhlbnRpY2F0ZV9vcl9yZXF1ZXN0X3dpdGhfaHR0cF9iYXNpY3xhdXRoZW50aWNhdGVfb3JfcmVxdWVzdF93aXRoX2h0dHBfZGlnZXN0fGZpbHRlcl9wYXJhbWV0ZXJfbG9nZ2luZ3xtYXRjaHxnZXR8cG9zdHxyZXNvdXJjZXN8cmVkaXJlY3R8c2NvcGV8YXNzZXJ0X3JvdXRpbmd8dHJhbnNsYXRlfGxvY2FsaXplfGV4dHJhY3RfbG9jYWxlX2Zyb21fdGxkfHR8bHxjYWNoZXNfcGFnZXxleHBpcmVfcGFnZXxjYWNoZXNfYWN0aW9ufGV4cGlyZV9hY3Rpb258Y2FjaGV8ZXhwaXJlX2ZyYWdtZW50fGV4cGlyZV9jYWNoZV9mb3J8b2JzZXJ2ZXxjYWNoZV9zd2VlcGVyfGhhc19tYW55fGhhc19vbmV8YmVsb25nc190b3xoYXNfYW5kX2JlbG9uZ3NfdG9fbWFueSIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoImFsaWFzfGFuZHxCRUdJTnxiZWdpbnxicmVha3xjYXNlfGNsYXNzfGRlZnxkZWZpbmVkfGRvfGVsc2V8ZWxzaWZ8RU5EfGVuZHxlbnN1cmV8X19GSUxFX198ZmluYWxseXxmb3J8Z2VtfGlmfGlufF9fTElORV9ffG1vZHVsZXxuZXh0fG5vdHxvcnxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmVkb3xyZXNjdWV8cmV0cnl8cmV0dXJufHN1cGVyfHRoZW58dW5kZWZ8dW5sZXNzfHVudGlsfHdoZW58d2hpbGV8eWllbGQiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJ0cnVlfFRSVUV8ZmFsc2V8RkFMU0V8bmlsfE5JTHxBUkdGfEFSR1Z8REFUQXxFTlZ8UlVCWV9QTEFURk9STXxSVUJZX1JFTEVBU0VfREFURXxSVUJZX1ZFUlNJT058U1RERVJSfFNURElOfFNURE9VVHxUT1BMRVZFTF9CSU5ESU5HIi5zcGxpdCgifCIpKSxkPWUuYXJyYXlUb01hcCgiJERFQlVHfCRkZWZvdXR8JEZJTEVOQU1FfCRMT0FEX1BBVEh8JFNBRkV8JHN0ZGlufCRzdGRvdXR8JHN0ZGVycnwkVkVSQk9TRXwkIXxyb290X3VybHxmbGFzaHxzZXNzaW9ufGNvb2tpZXN8cGFyYW1zfHJlcXVlc3R8cmVzcG9uc2V8bG9nZ2VyIi5zcGxpdCgifCIpKTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IiMuKiQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJePWJlZ2luJCIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIscmVnZXg6IltgXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bYF0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiI6OiJ9LHt0b2tlbjoidmFyaWFibGUuaW5zdGFuY2NlIixyZWdleDoiQHsxLDJ9KD86W2EtekEtWl9dfGQpKyJ9LHt0b2tlbjoidmFyaWFibGUuY2xhc3MiLHJlZ2V4OiJbQS1aXSg/OlthLXpBLVpfXXxkKSsifSx7dG9rZW46InN0cmluZyIscmVnZXg6Ils6XSg/OltBLVphLXpfXXxbQCRdKD89W2EtekEtWjAtOV9dKSlbYS16QS1aMC05X10qWyE9P10/In0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiMFt4WF1bMC05YS1mQS1GXSg/OlswLTlhLWZBLUZdfF8oPz1bMC05YS1mQS1GXSkpKlxcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKD86XFxkfF8oPz1cXGQpKSooPzooPzpcXC5cXGQoPzpcXGR8Xyg/PVxcZCkpKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gZT09InNlbGYiPyJ2YXJpYWJsZS5sYW5ndWFnZSI6Yi5oYXNPd25Qcm9wZXJ0eShlKT8ia2V5d29yZCI6Yy5oYXNPd25Qcm9wZXJ0eShlKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoZSk/InZhcmlhYmxlLmxhbmd1YWdlIjphLmhhc093blByb3BlcnR5KGUpPyJzdXBwb3J0LmZ1bmN0aW9uIjplPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Il49ZW5kJCIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX19O2QuaW5oZXJpdHMoZyxmKSxiLlJ1YnlIaWdobGlnaHRSdWxlcz1nfSksYWNlLmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9ydWJ5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3J1YnlfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vcnVieV9oaWdobGlnaHRfcnVsZXMiKS5SdWJ5SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGh9O2QuaW5oZXJpdHMoaixlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKSMvO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIjIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucztpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Iil7dmFyIGc9Yi5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7ZyYmKGQrPWMpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX19LmNhbGwoai5wcm90b3R5cGUpLGIuTW9kZT1qfSksZGVmaW5lKCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImFib3J0fEFycmF5fGFzc2VydHxhc3NlcnRfZXF1YWx8YXNzZXJ0X25vdF9lcXVhbHxhc3NlcnRfc2FtZXxhc3NlcnRfbm90X3NhbWV8YXNzZXJ0X25pbHxhc3NlcnRfbm90X25pbHxhc3NlcnRfbWF0Y2h8YXNzZXJ0X25vX21hdGNofGFzc2VydF9pbl9kZWx0YXxhc3NlcnRfdGhyb3dzfGFzc2VydF9yYWlzZXxhc3NlcnRfbm90aGluZ19yYWlzZWR8YXNzZXJ0X2luc3RhbmNlX29mfGFzc2VydF9raW5kX29mfGFzc2VydF9yZXNwb25kX3RvfGFzc2VydF9vcGVyYXRvcnxhc3NlcnRfc2VuZHxhc3NlcnRfZGlmZmVyZW5jZXxhc3NlcnRfbm9fZGlmZmVyZW5jZXxhc3NlcnRfcmVjb2duaXplc3xhc3NlcnRfZ2VuZXJhdGVzfGFzc2VydF9yZXNwb25zZXxhc3NlcnRfcmVkaXJlY3RlZF90b3xhc3NlcnRfdGVtcGxhdGV8YXNzZXJ0X3NlbGVjdHxhc3NlcnRfc2VsZWN0X2VtYWlsfGFzc2VydF9zZWxlY3RfcmpzfGFzc2VydF9zZWxlY3RfZW5jb2RlZHxjc3Nfc2VsZWN0fGF0X2V4aXR8YXR0cnxhdHRyX3dyaXRlcnxhdHRyX3JlYWRlcnxhdHRyX2FjY2Vzc29yfGF0dHJfYWNjZXNzaWJsZXxhdXRvbG9hZHxiaW5kaW5nfGJsb2NrX2dpdmVuP3xjYWxsY2N8Y2FsbGVyfGNhdGNofGNob21wfGNob21wIXxjaG9wfGNob3AhfGRlZmluZWQ/fGRlbGV0ZV92aWFfcmVkaXJlY3R8ZXZhbHxleGVjfGV4aXR8ZXhpdCF8ZmFpbHxGbG9hdHxmbHVua3xmb2xsb3dfcmVkaXJlY3QhfGZvcmt8Zm9ybV9mb3J8Zm9ybV90YWd8Zm9ybWF0fGdldHN8Z2xvYmFsX3ZhcmlhYmxlc3xnc3VifGdzdWIhfGdldF92aWFfcmVkaXJlY3R8aHxob3N0IXxodHRwcz98aHR0cHMhfGluY2x1ZGV8SW50ZWdlcnxsYW1iZGF8bGlua190b3xsaW5rX3RvX3VubGVzc19jdXJyZW50fGxpbmtfdG9fZnVuY3Rpb258bGlua190b19yZW1vdGV8bG9hZHxsb2NhbF92YXJpYWJsZXN8bG9vcHxvcGVufG9wZW5fc2Vzc2lvbnxwfHByaW50fHByaW50Znxwcm9jfHB1dGN8cHV0c3xwb3N0X3ZpYV9yZWRpcmVjdHxwdXRfdmlhX3JlZGlyZWN0fHJhaXNlfHJhbmR8cmF3fHJlYWRsaW5lfHJlYWRsaW5lc3xyZWRpcmVjdD98cmVxdWVzdF92aWFfcmVkaXJlY3R8cmVxdWlyZXxzY2FufHNlbGVjdHxzZXRfdHJhY2VfZnVuY3xzbGVlcHxzcGxpdHxzcHJpbnRmfHNyYW5kfFN0cmluZ3xzdHlsZXNoZWV0X2xpbmtfdGFnfHN5c2NhbGx8c3lzdGVtfHN1YnxzdWIhfHRlc3R8dGhyb3d8dHJhY2VfdmFyfHRyYXB8dW50cmFjZV92YXJ8YXRhbjJ8Y29zfGV4cHxmcmV4cHxsZGV4cHxsb2d8bG9nMTB8c2lufHNxcnR8dGFufHJlbmRlcnxqYXZhc2NyaXB0X2luY2x1ZGVfdGFnfGNzcmZfbWV0YV90YWd8bGFiZWxfdGFnfHRleHRfZmllbGRfdGFnfHN1Ym1pdF90YWd8Y2hlY2tfYm94X3RhZ3xjb250ZW50X3RhZ3xyYWRpb19idXR0b25fdGFnfHRleHRfYXJlYV90YWd8cGFzc3dvcmRfZmllbGRfdGFnfGhpZGRlbl9maWVsZF90YWd8ZmllbGRzX2ZvcnxzZWxlY3RfdGFnfG9wdGlvbnNfZm9yX3NlbGVjdHxvcHRpb25zX2Zyb21fY29sbGVjdGlvbl9mb3Jfc2VsZWN0fGNvbGxlY3Rpb25fc2VsZWN0fHRpbWVfem9uZV9zZWxlY3R8c2VsZWN0X2RhdGV8c2VsZWN0X3RpbWV8c2VsZWN0X2RhdGV0aW1lfGRhdGVfc2VsZWN0fHRpbWVfc2VsZWN0fGRhdGV0aW1lX3NlbGVjdHxzZWxlY3RfeWVhcnxzZWxlY3RfbW9udGh8c2VsZWN0X2RheXxzZWxlY3RfaG91cnxzZWxlY3RfbWludXRlfHNlbGVjdF9zZWNvbmR8ZmlsZV9maWVsZF90YWd8ZmlsZV9maWVsZHxyZXNwb25kX3RvfHNraXBfYmVmb3JlX2ZpbHRlcnxhcm91bmRfZmlsdGVyfGFmdGVyX2ZpbHRlcnx2ZXJpZnl8cHJvdGVjdF9mcm9tX2Zvcmdlcnl8cmVzY3VlX2Zyb218aGVscGVyX21ldGhvZHxyZWRpcmVjdF90b3xiZWZvcmVfZmlsdGVyfHNlbmRfZGF0YXxzZW5kX2ZpbGV8dmFsaWRhdGVzX3ByZXNlbmNlX29mfHZhbGlkYXRlc191bmlxdWVuZXNzX29mfHZhbGlkYXRlc19sZW5ndGhfb2Z8dmFsaWRhdGVzX2Zvcm1hdF9vZnx2YWxpZGF0ZXNfYWNjZXB0YW5jZV9vZnx2YWxpZGF0ZXNfYXNzb2NpYXRlZHx2YWxpZGF0ZXNfZXhjbHVzaW9uX29mfHZhbGlkYXRlc19pbmNsdXNpb25fb2Z8dmFsaWRhdGVzX251bWVyaWNhbGl0eV9vZnx2YWxpZGF0ZXNfd2l0aHx2YWxpZGF0ZXNfZWFjaHxhdXRoZW50aWNhdGVfb3JfcmVxdWVzdF93aXRoX2h0dHBfYmFzaWN8YXV0aGVudGljYXRlX29yX3JlcXVlc3Rfd2l0aF9odHRwX2RpZ2VzdHxmaWx0ZXJfcGFyYW1ldGVyX2xvZ2dpbmd8bWF0Y2h8Z2V0fHBvc3R8cmVzb3VyY2VzfHJlZGlyZWN0fHNjb3BlfGFzc2VydF9yb3V0aW5nfHRyYW5zbGF0ZXxsb2NhbGl6ZXxleHRyYWN0X2xvY2FsZV9mcm9tX3RsZHx0fGx8Y2FjaGVzX3BhZ2V8ZXhwaXJlX3BhZ2V8Y2FjaGVzX2FjdGlvbnxleHBpcmVfYWN0aW9ufGNhY2hlfGV4cGlyZV9mcmFnbWVudHxleHBpcmVfY2FjaGVfZm9yfG9ic2VydmV8Y2FjaGVfc3dlZXBlcnxoYXNfbWFueXxoYXNfb25lfGJlbG9uZ3NfdG98aGFzX2FuZF9iZWxvbmdzX3RvX21hbnkiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJhbGlhc3xhbmR8QkVHSU58YmVnaW58YnJlYWt8Y2FzZXxjbGFzc3xkZWZ8ZGVmaW5lZHxkb3xlbHNlfGVsc2lmfEVORHxlbmR8ZW5zdXJlfF9fRklMRV9ffGZpbmFsbHl8Zm9yfGdlbXxpZnxpbnxfX0xJTkVfX3xtb2R1bGV8bmV4dHxub3R8b3J8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJlZG98cmVzY3VlfHJldHJ5fHJldHVybnxzdXBlcnx0aGVufHVuZGVmfHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHlpZWxkIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgidHJ1ZXxUUlVFfGZhbHNlfEZBTFNFfG5pbHxOSUx8QVJHRnxBUkdWfERBVEF8RU5WfFJVQllfUExBVEZPUk18UlVCWV9SRUxFQVNFX0RBVEV8UlVCWV9WRVJTSU9OfFNUREVSUnxTVERJTnxTVERPVVR8VE9QTEVWRUxfQklORElORyIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoIiRERUJVR3wkZGVmb3V0fCRGSUxFTkFNRXwkTE9BRF9QQVRIfCRTQUZFfCRzdGRpbnwkc3Rkb3V0fCRzdGRlcnJ8JFZFUkJPU0V8JCF8cm9vdF91cmx8Zmxhc2h8c2Vzc2lvbnxjb29raWVzfHBhcmFtc3xyZXF1ZXN0fHJlc3BvbnNlfGxvZ2dlciIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIjLiokIn0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXj1iZWdpbiQiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbYF0oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/W2BdIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiOjoifSx7dG9rZW46InZhcmlhYmxlLmluc3RhbmNjZSIscmVnZXg6IkB7MSwyfSg/OlthLXpBLVpfXXxkKSsifSx7dG9rZW46InZhcmlhYmxlLmNsYXNzIixyZWdleDoiW0EtWl0oPzpbYS16QS1aX118ZCkrIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbOl0oPzpbQS1aYS16X118W0AkXSg/PVthLXpBLVowLTlfXSkpW2EtekEtWjAtOV9dKlshPT9dPyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0oPzpbMC05YS1mQS1GXXxfKD89WzAtOWEtZkEtRl0pKSpcXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCg/OlxcZHxfKD89XFxkKSkqKD86KD86XFwuXFxkKD86XFxkfF8oPz1cXGQpKSopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PSJzZWxmIj8idmFyaWFibGUubGFuZ3VhZ2UiOmIuaGFzT3duUHJvcGVydHkoZSk/ImtleXdvcmQiOmMuaGFzT3duUHJvcGVydHkoZSk/ImNvbnN0YW50Lmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGUpPyJ2YXJpYWJsZS5sYW5ndWFnZSI6YS5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6ZT09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJePWVuZCQiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19fTtkLmluaGVyaXRzKGcsZiksYi5SdWJ5SGlnaGxpZ2h0UnVsZXM9Z30pLGRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-scad-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvc2NhZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9zY2FkX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3NjYWRfaGlnaGxpZ2h0X3J1bGVzIikuc2NhZEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9YSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGs9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLGw9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuJGJlaGF2aW91cj1uZXcgaix0aGlzLmZvbGRpbmdSdWxlcz1uZXcga307ZC5pbmhlcml0cyhsLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopXC9cLy87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBoPW5ldyBpKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2guc3RhcnQucm93PWcsaC5lbmQucm93PWcsaC5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShoLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIi8vIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucyxnPWUuc3RhdGU7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCIpe3ZhciBoPWIubWF0Y2goL14uKltce1woXFtdXHMqJC8pO2gmJihkKz1jKX1lbHNlIGlmKGE9PSJkb2Mtc3RhcnQiKXtpZihnPT0ic3RhcnQiKXJldHVybiIiO3ZhciBoPWIubWF0Y2goL15ccyooXC8/KVwqLyk7aCYmKGhbMV0mJihkKz0iICIpLGQrPSIqICIpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksYWNlLmRlZmluZSgiYWNlL21vZGUvc2NhZF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIm1vZHVsZXxpZnxlbHNlfGZvciIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoIk5VTEwiLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBmKS5nZXRTdGFydFJ1bGUoInN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiPFthLXpBLVowLTkuXSs+In0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiKD86dXNlfGluY2x1ZGUpIn0se3Rva2VuOmZ1bmN0aW9uKGMpe3JldHVybiBjPT0idGhpcyI/InZhcmlhYmxlLmxhbmd1YWdlIjphLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PXw9fCE9fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhmLCJkb2MtIixbKG5ldyBmKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaCxnKSxiLnNjYWRIaWdobGlnaHRSdWxlcz1ofSksYWNlLmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWZ1bmN0aW9uKCl7dGhpcy5hZGQoImJyYWNlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0ieyIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiJ7IitnKyJ9IixzZWxlY3Rpb246ITF9Ont0ZXh0OiJ7fSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0ifSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgbD1kLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpoLnJvdyxjb2x1bW46aC5jb2x1bW4rMX0pO2lmKCFsKXJldHVybiBudWxsO3ZhciBtPXRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoYSxpLnN1YnN0cmluZygwLGkubGVuZ3RoLTEpLGQuZ2V0VGFiU3RyaW5nKCkpLG49dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUobC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK20rIlxuIituLHNlbGVjdGlvbjpbMSxtLmxlbmd0aCwxLG0ubGVuZ3RoXX19fX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09InsiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixlLmVuZC5jb2x1bW4rMSk7aWYoaD09In0iKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IigiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoiKCIrZysiKSIsc2VsZWN0aW9uOiExfTp7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09IikiKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSIpIil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCIpIix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInBhcmVucyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0iKCIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0iKSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSciJyl7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO2lmKGchPT0iIilyZXR1cm57dGV4dDonIicrZysnIicsc2VsZWN0aW9uOiExfTt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLTEsaC5jb2x1bW4pO2lmKGo9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGs9ZC5nZXRUb2tlbnMoZi5zdGFydC5yb3csZi5zdGFydC5yb3cpWzBdLnRva2VucyxsPTAsbSxuPS0xO2Zvcih2YXIgbz0wO288ay5sZW5ndGg7bysrKXttPWtbb10sbS50eXBlPT0ic3RyaW5nIj9uPS0xOm48MCYmKG49bS52YWx1ZS5pbmRleE9mKCciJykpO2lmKG0udmFsdWUubGVuZ3RoK2w+Zi5zdGFydC5jb2x1bW4pYnJlYWs7bCs9a1tvXS52YWx1ZS5sZW5ndGh9aWYoIW18fG48MCYmbS50eXBlIT09ImNvbW1lbnQiJiYobS50eXBlIT09InN0cmluZyJ8fGYuc3RhcnQuY29sdW1uIT09bS52YWx1ZS5sZW5ndGgrbC0xJiZtLnZhbHVlLmxhc3RJbmRleE9mKCciJyk9PT1tLnZhbHVlLmxlbmd0aC0xKSlyZXR1cm57dGV4dDonIiInLHNlbGVjdGlvbjpbMSwxXX07aWYobSYmbS50eXBlPT09InN0cmluZyIpe3ZhciBwPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKHA9PSciJylyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09JyInKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09JyInKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pfTtkLmluaGVyaXRzKGYsZSksYi5Dc3R5bGVCZWhhdmlvdXI9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-scad.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zY2FkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3NjYWRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vc2NhZF9oaWdobGlnaHRfcnVsZXMiKS5zY2FkSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsaz1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsbD1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBqLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBrfTtkLmluaGVyaXRzKGwsZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKilcL1wvLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiLy8iKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zLGc9ZS5zdGF0ZTtpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Iil7dmFyIGg9Yi5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCIpcmV0dXJuIiI7dmFyIGg9Yi5tYXRjaCgvXlxzKihcLz8pXCovKTtoJiYoaFsxXSYmKGQrPSIgIiksZCs9IiogIil9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfX0uY2FsbChsLnByb3RvdHlwZSksYi5Nb2RlPWx9KSxkZWZpbmUoImFjZS9tb2RlL3NjYWRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGc9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxoPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJtb2R1bGV8aWZ8ZWxzZXxmb3IiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJOVUxMIi5zcGxpdCgifCIpKTt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LChuZXcgZikuZ2V0U3RhcnRSdWxlKCJzdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJjb25zdGFudCIscmVnZXg6IjxbYS16QS1aMC05Ll0rPiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OnVzZXxpbmNsdWRlKSJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYz09InRoaXMiPyJ2YXJpYWJsZS5sYW5ndWFnZSI6YS5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT18PXwhPXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj8iJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSx0aGlzLmVtYmVkUnVsZXMoZiwiZG9jLSIsWyhuZXcgZikuZ2V0RW5kUnVsZSgic3RhcnQiKV0pfTtkLmluaGVyaXRzKGgsZyksYi5zY2FkSGlnaGxpZ2h0UnVsZXM9aH0pLGRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4vXlxzKyQvLnRlc3QoYSk/L15ccypcfS8udGVzdChiKTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0TGluZShiKSxlPWMubWF0Y2goL14oXHMqXH0pLyk7aWYoIWUpcmV0dXJuIDA7dmFyIGY9ZVsxXS5sZW5ndGgsZz1hLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpiLGNvbHVtbjpmfSk7aWYoIWd8fGcucm93PT1iKXJldHVybiAwO3ZhciBoPXRoaXMuJGdldEluZGVudChhLmdldExpbmUoZy5yb3cpKTthLnJlcGxhY2UobmV3IGQoYiwwLGIsZi0xKSxoKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL14oXHMrKS8pO3JldHVybiBiP2JbMV06IiJ9fSkpLmNhbGwoZS5wcm90b3R5cGUpLGIuTWF0Y2hpbmdCcmFjZU91dGRlbnQ9ZX0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-scala-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvc2NhbGEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvc2NhbGFfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9zY2FsYV9oaWdobGlnaHRfcnVsZXMiKS5TY2FsYUhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXtlLmNhbGwodGhpcyksdGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSl9O2QuaW5oZXJpdHMoaCxlKSxmdW5jdGlvbigpe3RoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsfX0uY2FsbChoLnByb3RvdHlwZSksYi5Nb2RlPWh9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3VuaWNvZGUiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4uL3VuaWNvZGUiKSxnPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxpPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldCIuc3BsaXQoInwiKSksYz0iY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZCIsZD1lLmFycmF5VG9NYXAoIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fXyIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLnNwbGl0KCJ8IikpLGk9ZS5hcnJheVRvTWFwKCJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLnNwbGl0KCJ8IikpLGo9ZS5hcnJheVRvTWFwKCJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIuc3BsaXQoInwiKSksaz0iWyIrZi5wYWNrYWdlcy5MKyJcXCRfXVsiK2YucGFja2FnZXMuTCtmLnBhY2thZ2VzLk1uK2YucGFja2FnZXMuTWMrZi5wYWNrYWdlcy5OZCtmLnBhY2thZ2VzLlBjKyJcXCRfXSpcXGIiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBnKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOlsia2V5d29yZC5kZWZpbml0aW9uIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitrKyIpIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIoPzoiK2MrIilcXGIiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoYyk/InZhcmlhYmxlLmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmguaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQuZGVmaW5pdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6aS5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmouaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuaWxsZWdhbCI6Yz09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4Omt9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJcXD98XFw6fFxcLHxcXDt8XFwuIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcLz0/IixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXiMhLiokIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxyZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnRfcmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlxcLyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXg6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXgifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiIvXFx3KiIsbmV4dDoic3RhcnQiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbXlxcXFwvXFxbXSsiLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlxcWyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXhfY2hhcmFjdGVyX2NsYXNzOlt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJdIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJbXlxcXFxcXF1dKyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0sY29tbWVudF9yZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhnLCJkb2MtIixbKG5ldyBnKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaSxoKSxiLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1pfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWZ1bmN0aW9uKCl7dGhpcy5hZGQoImJyYWNlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0ieyIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiJ7IitnKyJ9IixzZWxlY3Rpb246ITF9Ont0ZXh0OiJ7fSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0ifSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09In0iKXt2YXIgbD1kLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpoLnJvdyxjb2x1bW46aC5jb2x1bW4rMX0pO2lmKCFsKXJldHVybiBudWxsO3ZhciBtPXRoaXMuZ2V0TmV4dExpbmVJbmRlbnQoYSxpLnN1YnN0cmluZygwLGkubGVuZ3RoLTEpLGQuZ2V0VGFiU3RyaW5nKCkpLG49dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUobC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK20rIlxuIituLHNlbGVjdGlvbjpbMSxtLmxlbmd0aCwxLG0ubGVuZ3RoXX19fX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09InsiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuZW5kLmNvbHVtbixlLmVuZC5jb2x1bW4rMSk7aWYoaD09In0iKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IigiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoiKCIrZysiKSIsc2VsZWN0aW9uOiExfTp7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09IikiKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSIpIil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCIpIix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInBhcmVucyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0iKCIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0iKSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSciJyl7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO2lmKGchPT0iIilyZXR1cm57dGV4dDonIicrZysnIicsc2VsZWN0aW9uOiExfTt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLTEsaC5jb2x1bW4pO2lmKGo9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGs9ZC5nZXRUb2tlbnMoZi5zdGFydC5yb3csZi5zdGFydC5yb3cpWzBdLnRva2VucyxsPTAsbSxuPS0xO2Zvcih2YXIgbz0wO288ay5sZW5ndGg7bysrKXttPWtbb10sbS50eXBlPT0ic3RyaW5nIj9uPS0xOm48MCYmKG49bS52YWx1ZS5pbmRleE9mKCciJykpO2lmKG0udmFsdWUubGVuZ3RoK2w+Zi5zdGFydC5jb2x1bW4pYnJlYWs7bCs9a1tvXS52YWx1ZS5sZW5ndGh9aWYoIW18fG48MCYmbS50eXBlIT09ImNvbW1lbnQiJiYobS50eXBlIT09InN0cmluZyJ8fGYuc3RhcnQuY29sdW1uIT09bS52YWx1ZS5sZW5ndGgrbC0xJiZtLnZhbHVlLmxhc3RJbmRleE9mKCciJyk9PT1tLnZhbHVlLmxlbmd0aC0xKSlyZXR1cm57dGV4dDonIiInLHNlbGVjdGlvbjpbMSwxXX07aWYobSYmbS50eXBlPT09InN0cmluZyIpe3ZhciBwPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKHA9PSciJylyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09JyInKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09JyInKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pfTtkLmluaGVyaXRzKGYsZSksYi5Dc3R5bGVCZWhhdmlvdXI9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvc2NhbGFfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGc9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxoPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJjYXNlfGRlZmF1bHR8ZG98ZWxzZXxmb3J8aWZ8bWF0Y2h8d2hpbGV8dGhyb3d8cmV0dXJufHRyeXxjYXRjaHxmaW5hbGx5fHlpZWxkfGFic3RyYWN0fGNsYXNzfGRlZnxleHRlbmRzfGZpbmFsfGZvclNvbWV8aW1wbGljaXR8aW1wbGljaXRzfGltcG9ydHxsYXp5fG5ld3xvYmplY3R8b3ZlcnJpZGV8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxzZWFsZWR8c3VwZXJ8dGhpc3x0cmFpdHx0eXBlfHZhbHx2YXJ8d2l0aCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoInRydWV8ZmFsc2UiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJBYnN0cmFjdE1ldGhvZEVycm9yfEFzc2VydGlvbkVycm9yfENsYXNzQ2lyY3VsYXJpdHlFcnJvcnxDbGFzc0Zvcm1hdEVycm9yfERlcHJlY2F0ZWR8RW51bUNvbnN0YW50Tm90UHJlc2VudEV4Y2VwdGlvbnxFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3J8SWxsZWdhbEFjY2Vzc0Vycm9yfElsbGVnYWxUaHJlYWRTdGF0ZUV4Y2VwdGlvbnxJbnN0YW50aWF0aW9uRXJyb3J8SW50ZXJuYWxFcnJvcnxOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbnxOb1N1Y2hGaWVsZEVycm9yfE92ZXJyaWRlfFByb2Nlc3N8UHJvY2Vzc0J1aWxkZXJ8U2VjdXJpdHlNYW5hZ2VyfFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258U3VwcHJlc3NXYXJuaW5nc3xUeXBlTm90UHJlc2VudEV4Y2VwdGlvbnxVbmtub3duRXJyb3J8VW5zYXRpc2ZpZWRMaW5rRXJyb3J8VW5zdXBwb3J0ZWRDbGFzc1ZlcnNpb25FcnJvcnxWZXJpZnlFcnJvcnxJbnN0YW50aWF0aW9uRXhjZXB0aW9ufEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258QXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9ufE5vU3VjaEZpZWxkRXhjZXB0aW9ufElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbnxOdW1iZXJGb3JtYXRFeGNlcHRpb258U2VjdXJpdHlFeGNlcHRpb258Vm9pZHxJbmhlcml0YWJsZVRocmVhZExvY2FsfElsbGVnYWxTdGF0ZUV4Y2VwdGlvbnxJbnRlcnJ1cHRlZEV4Y2VwdGlvbnxOb1N1Y2hNZXRob2RFeGNlcHRpb258SWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbnxVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbnxFbnVtfFN0cmljdE1hdGh8UGFja2FnZXxDb21waWxlcnxSZWFkYWJsZXxSdW50aW1lfFN0cmluZ0J1aWxkZXJ8TWF0aHxJbmNvbXBhdGlibGVDbGFzc0NoYW5nZUVycm9yfE5vU3VjaE1ldGhvZEVycm9yfFRocmVhZExvY2FsfFJ1bnRpbWVQZXJtaXNzaW9ufEFyaXRobWV0aWNFeGNlcHRpb258TnVsbFBvaW50ZXJFeGNlcHRpb258TG9uZ3xJbnRlZ2VyfFNob3J0fEJ5dGV8RG91YmxlfE51bWJlcnxGbG9hdHxDaGFyYWN0ZXJ8Qm9vbGVhbnxTdGFja1RyYWNlRWxlbWVudHxBcHBlbmRhYmxlfFN0cmluZ0J1ZmZlcnxJdGVyYWJsZXxUaHJlYWRHcm91cHxSdW5uYWJsZXxUaHJlYWR8SWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbnxTdGFja092ZXJmbG93RXJyb3J8T3V0T2ZNZW1vcnlFcnJvcnxWaXJ0dWFsTWFjaGluZUVycm9yfEFycmF5U3RvcmVFeGNlcHRpb258Q2xhc3NDYXN0RXhjZXB0aW9ufExpbmthZ2VFcnJvcnxOb0NsYXNzRGVmRm91bmRFcnJvcnxDbGFzc05vdEZvdW5kRXhjZXB0aW9ufFJ1bnRpbWVFeGNlcHRpb258RXhjZXB0aW9ufFRocmVhZERlYXRofEVycm9yfFRocm93YWJsZXxTeXN0ZW18Q2xhc3NMb2FkZXJ8Q2xvbmVhYmxlfENsYXNzfENoYXJTZXF1ZW5jZXxDb21wYXJhYmxlfFN0cmluZ3xPYmplY3R8VW5pdHxBbnl8QW55VmFsfEFueVJlZnxOdWxsfFNjYWxhT2JqZWN0fFNpbmdsZXRvbnxTZXF8SXRlcmFibGV8TGlzdHxPcHRpb258QXJyYXl8Q2hhcnxCeXRlfFNob3J0fEludHxMb25nfE5vdGhpbmciLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCIiLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBmKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PSJ0aGlzIj8idmFyaWFibGUubGFuZ3VhZ2UiOmEuaGFzT3duUHJvcGVydHkoZSk/ImtleXdvcmQiOmMuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOmQuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOmIuaGFzT3duUHJvcGVydHkoZSk/ImNvbnN0YW50Lmxhbmd1YWdlIjoiaWRlbnRpZmllciJ9LHJlZ2V4OiJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhmLCJkb2MtIixbKG5ldyBmKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaCxnKSxiLlNjYWxhSGlnaGxpZ2h0UnVsZXM9aH0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-scala.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zY2FsYSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9zY2FsYV9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vamF2YXNjcmlwdCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3NjYWxhX2hpZ2hsaWdodF9ydWxlcyIpLlNjYWxhSGlnaGxpZ2h0UnVsZXMsaD1mdW5jdGlvbigpe2UuY2FsbCh0aGlzKSx0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKX07ZC5pbmhlcml0cyhoLGUpLGZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGx9fS5jYWxsKGgucHJvdG90eXBlKSxiLk1vZGU9aH0pLGRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi9yYW5nZSIpLlJhbmdlLGo9YSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaz1hKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsbD1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsbT1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy4kYmVoYXZpb3VyPW5ldyBrLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBsfTtkLmluaGVyaXRzKG0sZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPS9eKFxzKilcL1wvLztmb3IodmFyIGc9YztnPD1kO2crKylpZighZi50ZXN0KGIuZ2V0TGluZShnKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGg9bmV3IGkoMCwwLDAsMCk7Zm9yKHZhciBnPWM7Zzw9ZDtnKyspe3ZhciBqPWIuZ2V0TGluZShnKSxrPWoubWF0Y2goZik7aC5zdGFydC5yb3c9ZyxoLmVuZC5yb3c9ZyxoLmVuZC5jb2x1bW49a1swXS5sZW5ndGgsYi5yZXBsYWNlKGgsa1sxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiLy8iKX0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKSxmPWUudG9rZW5zLGc9ZS5zdGF0ZTtpZihmLmxlbmd0aCYmZltmLmxlbmd0aC0xXS50eXBlPT0iY29tbWVudCIpcmV0dXJuIGQ7aWYoYT09InN0YXJ0Inx8YT09InJlZ2V4X2FsbG93ZWQiKXt2YXIgaD1iLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7XChcW10pXHMqJC8pO2gmJihkKz1jKX1lbHNlIGlmKGE9PSJkb2Mtc3RhcnQiKXtpZihnPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpcmV0dXJuIiI7dmFyIGg9Yi5tYXRjaCgvXlxzKihcLz8pXCovKTtoJiYoaFsxXSYmKGQrPSIgIiksZCs9IiogIil9cmV0dXJuIGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgaihbImFjZSJdLCJ3b3JrZXItamF2YXNjcmlwdC5qcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwiSmF2YVNjcmlwdFdvcmtlciIpO3JldHVybiBiLmF0dGFjaFRvRG9jdW1lbnQoYS5nZXREb2N1bWVudCgpKSxiLm9uKCJqc2xpbnQiLGZ1bmN0aW9uKGIpe3ZhciBjPVtdO2Zvcih2YXIgZD0wO2Q8Yi5kYXRhLmxlbmd0aDtkKyspe3ZhciBlPWIuZGF0YVtkXTtlJiZjLnB1c2goe3JvdzplLmxpbmUtMSxjb2x1bW46ZS5jaGFyYWN0ZXItMSx0ZXh0OmUucmVhc29uLHR5cGU6Indhcm5pbmciLGxpbnQ6ZX0pfWEuc2V0QW5ub3RhdGlvbnMoYyl9KSxiLm9uKCJuYXJjaXNzdXMiLGZ1bmN0aW9uKGIpe2Euc2V0QW5ub3RhdGlvbnMoW2IuZGF0YV0pfSksYi5vbigidGVybWluYXRlIixmdW5jdGlvbigpe2EuY2xlYXJBbm5vdGF0aW9ucygpfSksYn19LmNhbGwobS5wcm90b3R5cGUpLGIuTW9kZT1tfSksZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3VuaWNvZGUiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4uL3VuaWNvZGUiKSxnPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxpPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldCIuc3BsaXQoInwiKSksYz0iY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZCIsZD1lLmFycmF5VG9NYXAoIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fXyIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLnNwbGl0KCJ8IikpLGk9ZS5hcnJheVRvTWFwKCJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLnNwbGl0KCJ8IikpLGo9ZS5hcnJheVRvTWFwKCJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIuc3BsaXQoInwiKSksaz0iWyIrZi5wYWNrYWdlcy5MKyJcXCRfXVsiK2YucGFja2FnZXMuTCtmLnBhY2thZ2VzLk1uK2YucGFja2FnZXMuTWMrZi5wYWNrYWdlcy5OZCtmLnBhY2thZ2VzLlBjKyJcXCRfXSpcXGIiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBnKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOlsia2V5d29yZC5kZWZpbml0aW9uIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitrKyIpIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIoPzoiK2MrIilcXGIiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoYyk/InZhcmlhYmxlLmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmguaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQuZGVmaW5pdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6aS5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmouaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuaWxsZWdhbCI6Yz09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4Omt9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJcXD98XFw6fFxcLHxcXDt8XFwuIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcLz0/IixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXiMhLiokIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxyZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnRfcmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlxcLyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXg6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXgifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiIvXFx3KiIsbmV4dDoic3RhcnQiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbXlxcXFwvXFxbXSsiLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlxcWyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXhfY2hhcmFjdGVyX2NsYXNzOlt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJdIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJbXlxcXFxcXF1dKyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0sY29tbWVudF9yZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhnLCJkb2MtIixbKG5ldyBnKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaSxoKSxiLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1pfSksZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudC5kb2MudGFnIixyZWdleDoiQFtcXHdcXGRfXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFxzKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJUT0RPIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlteQFxcKl0rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6Ii4ifV19fTtkLmluaGVyaXRzKGYsZSksZnVuY3Rpb24oKXt0aGlzLmdldFN0YXJ0UnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwvXFwqKD89XFwqKSIsbmV4dDphfX0sdGhpcy5nZXRFbmRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXCpcXC8iLG5leHQ6YX19fS5jYWxsKGYucHJvdG90eXBlKSxiLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcz1mfSksZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9yYW5nZSIpLlJhbmdlLGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlx9Ly50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcfSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KSkuY2FsbChlLnByb3RvdHlwZSksYi5NYXRjaGluZ0JyYWNlT3V0ZGVudD1lfSksZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9zY2FsYV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGg9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImNhc2V8ZGVmYXVsdHxkb3xlbHNlfGZvcnxpZnxtYXRjaHx3aGlsZXx0aHJvd3xyZXR1cm58dHJ5fGNhdGNofGZpbmFsbHl8eWllbGR8YWJzdHJhY3R8Y2xhc3N8ZGVmfGV4dGVuZHN8ZmluYWx8Zm9yU29tZXxpbXBsaWNpdHxpbXBsaWNpdHN8aW1wb3J0fGxhenl8bmV3fG9iamVjdHxvdmVycmlkZXxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHNlYWxlZHxzdXBlcnx0aGlzfHRyYWl0fHR5cGV8dmFsfHZhcnx3aXRoIi5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgidHJ1ZXxmYWxzZSIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoIkFic3RyYWN0TWV0aG9kRXJyb3J8QXNzZXJ0aW9uRXJyb3J8Q2xhc3NDaXJjdWxhcml0eUVycm9yfENsYXNzRm9ybWF0RXJyb3J8RGVwcmVjYXRlZHxFbnVtQ29uc3RhbnROb3RQcmVzZW50RXhjZXB0aW9ufEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvcnxJbGxlZ2FsQWNjZXNzRXJyb3J8SWxsZWdhbFRocmVhZFN0YXRlRXhjZXB0aW9ufEluc3RhbnRpYXRpb25FcnJvcnxJbnRlcm5hbEVycm9yfE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9ufE5vU3VjaEZpZWxkRXJyb3J8T3ZlcnJpZGV8UHJvY2Vzc3xQcm9jZXNzQnVpbGRlcnxTZWN1cml0eU1hbmFnZXJ8U3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxTdXBwcmVzc1dhcm5pbmdzfFR5cGVOb3RQcmVzZW50RXhjZXB0aW9ufFVua25vd25FcnJvcnxVbnNhdGlzZmllZExpbmtFcnJvcnxVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yfFZlcmlmeUVycm9yfEluc3RhbnRpYXRpb25FeGNlcHRpb258SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258Q2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb258Tm9TdWNoRmllbGRFeGNlcHRpb258SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9ufE51bWJlckZvcm1hdEV4Y2VwdGlvbnxTZWN1cml0eUV4Y2VwdGlvbnxWb2lkfEluaGVyaXRhYmxlVGhyZWFkTG9jYWx8SWxsZWdhbFN0YXRlRXhjZXB0aW9ufEludGVycnVwdGVkRXhjZXB0aW9ufE5vU3VjaE1ldGhvZEV4Y2VwdGlvbnxJbGxlZ2FsQWNjZXNzRXhjZXB0aW9ufFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ufEVudW18U3RyaWN0TWF0aHxQYWNrYWdlfENvbXBpbGVyfFJlYWRhYmxlfFJ1bnRpbWV8U3RyaW5nQnVpbGRlcnxNYXRofEluY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3J8Tm9TdWNoTWV0aG9kRXJyb3J8VGhyZWFkTG9jYWx8UnVudGltZVBlcm1pc3Npb258QXJpdGhtZXRpY0V4Y2VwdGlvbnxOdWxsUG9pbnRlckV4Y2VwdGlvbnxMb25nfEludGVnZXJ8U2hvcnR8Qnl0ZXxEb3VibGV8TnVtYmVyfEZsb2F0fENoYXJhY3RlcnxCb29sZWFufFN0YWNrVHJhY2VFbGVtZW50fEFwcGVuZGFibGV8U3RyaW5nQnVmZmVyfEl0ZXJhYmxlfFRocmVhZEdyb3VwfFJ1bm5hYmxlfFRocmVhZHxJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufFN0YWNrT3ZlcmZsb3dFcnJvcnxPdXRPZk1lbW9yeUVycm9yfFZpcnR1YWxNYWNoaW5lRXJyb3J8QXJyYXlTdG9yZUV4Y2VwdGlvbnxDbGFzc0Nhc3RFeGNlcHRpb258TGlua2FnZUVycm9yfE5vQ2xhc3NEZWZGb3VuZEVycm9yfENsYXNzTm90Rm91bmRFeGNlcHRpb258UnVudGltZUV4Y2VwdGlvbnxFeGNlcHRpb258VGhyZWFkRGVhdGh8RXJyb3J8VGhyb3dhYmxlfFN5c3RlbXxDbGFzc0xvYWRlcnxDbG9uZWFibGV8Q2xhc3N8Q2hhclNlcXVlbmNlfENvbXBhcmFibGV8U3RyaW5nfE9iamVjdHxVbml0fEFueXxBbnlWYWx8QW55UmVmfE51bGx8U2NhbGFPYmplY3R8U2luZ2xldG9ufFNlcXxJdGVyYWJsZXxMaXN0fE9wdGlvbnxBcnJheXxDaGFyfEJ5dGV8U2hvcnR8SW50fExvbmd8Tm90aGluZyIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoIiIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGYpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiWy9dKD86KD86XFxbKD86XFxcXF18W15cXF1dKStcXF0pfCg/OlxcXFwvfFteXFxdL10pKSpbL11cXHcqXFxzKig/PVspLiw7XXwkKSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gZT09InRoaXMiPyJ2YXJpYWJsZS5sYW5ndWFnZSI6YS5oYXNPd25Qcm9wZXJ0eShlKT8ia2V5d29yZCI6Yy5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6ZC5oYXNPd25Qcm9wZXJ0eShlKT8ic3VwcG9ydC5mdW5jdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShlKT8iY29uc3RhbnQubGFuZ3VhZ2UiOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1soe10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF0pfV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGYsImRvYy0iLFsobmV3IGYpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhoLGcpLGIuU2NhbGFIaWdobGlnaHRSdWxlcz1ofSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-scss-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvc2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9zY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vc2Nzc19oaWdobGlnaHRfcnVsZXMiKS5TY3NzSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxqPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSwiaSIpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGl9O2QuaW5oZXJpdHMoaixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSkudG9rZW5zO2lmKGUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDt2YXIgZj1iLm1hdGNoKC9eLipce1xzKiQvKTtyZXR1cm4gZiYmKGQrPWMpLGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfX0uY2FsbChqLnByb3RvdHlwZSksYi5Nb2RlPWp9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9zY3NzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoZnVuY3Rpb24oKXt2YXIgYT0iLXdlYmtpdC18LW1vei18LW8tfC1tcy18LXN2Zy18LXBpZS18LWtodG1sLSIuc3BsaXQoInwiKSxiPSJhcHBlYXJhbmNlfGJhY2tncm91bmQtY2xpcHxiYWNrZ3JvdW5kLWlubGluZS1wb2xpY3l8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1zaXplfGJpbmRpbmd8Ym9yZGVyLWJvdHRvbS1jb2xvcnN8Ym9yZGVyLWxlZnQtY29sb3JzfGJvcmRlci1yaWdodC1jb2xvcnN8Ym9yZGVyLXRvcC1jb2xvcnN8Ym9yZGVyLWVuZHxib3JkZXItZW5kLWNvbG9yfGJvcmRlci1lbmQtc3R5bGV8Ym9yZGVyLWVuZC13aWR0aHxib3JkZXItaW1hZ2V8Ym9yZGVyLXN0YXJ0fGJvcmRlci1zdGFydC1jb2xvcnxib3JkZXItc3RhcnQtc3R5bGV8Ym9yZGVyLXN0YXJ0LXdpZHRofGJveC1hbGlnbnxib3gtZGlyZWN0aW9ufGJveC1mbGV4fGJveC1mbGV4Z3JvdXB8Ym94LW9yZGluYWwtZ3JvdXB8Ym94LW9yaWVudHxib3gtcGFja3xib3gtc2l6aW5nfGNvbHVtbi1jb3VudHxjb2x1bW4tZ2FwfGNvbHVtbi13aWR0aHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS1jb2xvcnxmbG9hdC1lZGdlfGZvbnQtZmVhdHVyZS1zZXR0aW5nc3xmb250LWxhbmd1YWdlLW92ZXJyaWRlfGZvcmNlLWJyb2tlbi1pbWFnZS1pY29ufGltYWdlLXJlZ2lvbnxtYXJnaW4tZW5kfG1hcmdpbi1zdGFydHxvcGFjaXR5fG91dGxpbmV8b3V0bGluZS1jb2xvcnxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLXJhZGl1c3xvdXRsaW5lLXJhZGl1cy1ib3R0b21sZWZ0fG91dGxpbmUtcmFkaXVzLWJvdHRvbXJpZ2h0fG91dGxpbmUtcmFkaXVzLXRvcGxlZnR8b3V0bGluZS1yYWRpdXMtdG9wcmlnaHR8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofHBhZGRpbmctZW5kfHBhZGRpbmctc3RhcnR8c3RhY2stc2l6aW5nfHRhYi1zaXplfHRleHQtYmxpbmt8dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0cmFuc2Zvcm18dHJhbnNmb3JtLW9yaWdpbnx0cmFuc2l0aW9ufHRyYW5zaXRpb24tZGVsYXl8dHJhbnNpdGlvbi1kdXJhdGlvbnx0cmFuc2l0aW9uLXByb3BlcnR5fHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9ufHVzZXItZm9jdXN8dXNlci1pbnB1dHx1c2VyLW1vZGlmeXx1c2VyLXNlbGVjdHx3aW5kb3ctc2hhZG93fGJvcmRlci1yYWRpdXMiLnNwbGl0KCJ8IiksYz0iYXppbXV0aHxiYWNrZ3JvdW5kLWF0dGFjaG1lbnR8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtcG9zaXRpb258YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZHxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItYm90dG9tfGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXJpZ2h0fGJvcmRlci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItdG9wfGJvcmRlci13aWR0aHxib3JkZXJ8Ym90dG9tfGJveC1zaXppbmd8Y2FwdGlvbi1zaWRlfGNsZWFyfGNsaXB8Y29sb3J8Y29udGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGN1ZS1hZnRlcnxjdWUtYmVmb3JlfGN1ZXxjdXJzb3J8ZGlyZWN0aW9ufGRpc3BsYXl8ZWxldmF0aW9ufGVtcHR5LWNlbGxzfGZsb2F0fGZvbnQtZmFtaWx5fGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zaXplfGZvbnQtc3RyZXRjaHxmb250LXN0eWxlfGZvbnQtdmFyaWFudHxmb250LXdlaWdodHxmb250fGhlaWdodHxsZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpc3Qtc3R5bGUtaW1hZ2V8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLXR5cGV8bGlzdC1zdHlsZXxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1hcmtlci1vZmZzZXR8bWFyZ2lufG1hcmtzfG1heC1oZWlnaHR8bWF4LXdpZHRofG1pbi1oZWlnaHR8bWluLXdpZHRofG9wYWNpdHl8b3JwaGFuc3xvdXRsaW5lLWNvbG9yfG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdXRsaW5lfG92ZXJmbG93fG92ZXJmbG93LXh8b3ZlcmZsb3cteXxwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWRkaW5nfHBhZ2UtYnJlYWstYWZ0ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZXxwYXVzZS1hZnRlcnxwYXVzZS1iZWZvcmV8cGF1c2V8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9zaXRpb258cXVvdGVzfHJpY2huZXNzfHJpZ2h0fHNpemV8c3BlYWstaGVhZGVyfHNwZWFrLW51bWVyYWx8c3BlYWstcHVuY3R1YXRpb258c3BlZWNoLXJhdGV8c3BlYWt8c3RyZXNzfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtZGVjb3JhdGlvbnx0ZXh0LWluZGVudHx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dW5pY29kZS1iaWRpfHZlcnRpY2FsLWFsaWdufHZpc2liaWxpdHl8dm9pY2UtZmFtaWx5fHZvbHVtZXx3aGl0ZS1zcGFjZXx3aWRvd3N8d2lkdGh8d29yZC1zcGFjaW5nfHotaW5kZXgiLnNwbGl0KCJ8IiksZD1bXTtmb3IodmFyIGU9MCxmPWEubGVuZ3RoO2U8ZjtlKyspQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCwoYVtlXStiLmpvaW4oInwiK2FbZV0pKS5zcGxpdCgifCIpKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxiKSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGMpLGR9KCkpLGI9ZS5hcnJheVRvTWFwKCJoc2x8aHNsYXxyZ2J8cmdiYXx1cmx8YXR0cnxjb3VudGVyfGNvdW50ZXJzfGFic3xhZGp1c3RfY29sb3J8YWRqdXN0X2h1ZXxhbHBoYXxqb2lufGJsdWV8Y2VpbHxjaGFuZ2VfY29sb3J8Y29tcGFyYWJsZXxjb21wbGVtZW50fGRhcmtlbnxkZXNhdHVyYXRlfGZsb29yfGdyYXlzY2FsZXxncmVlbnxodWV8aWZ8aW52ZXJ0fGpvaW58bGVuZ3RofGxpZ2h0ZW58bGlnaHRuZXNzfG1peHxudGh8b3BhY2lmeXxvcGFjaXR5fHBlcmNlbnRhZ2V8cXVvdGV8cmVkfHJvdW5kfHNhdHVyYXRlfHNhdHVyYXRpb258c2NhbGVfY29sb3J8dHJhbnNwYXJlbnRpemV8dHlwZV9vZnx1bml0fHVuaXRsZXNzfHVucW91dGUiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJhYnNvbHV0ZXxhbGwtc2Nyb2xsfGFsd2F5c3xhcm1lbmlhbnxhdXRvfGJhc2VsaW5lfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXplfGNlbnRlcnxjaGFyfGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb250ZW50LWJveHxjcm9zc2hhaXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxkaXNjfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVsbGlwc2lzfGZpeGVkfGdlb3JnaWFufGdyb292ZXxoYW5kfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFsfGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLXNwYWNlfGluYWN0aXZlfGluaGVyaXR8aW5saW5lLWJsb2NrfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdvcmR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaXN0LWl0ZW18bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtZWRpdW18bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1kcm9wfG5vLXJlcGVhdHxudy1yZXNpemV8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG9ibGlxdWV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cG9pbnRlcnxwcm9ncmVzc3xyZWxhdGl2ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmlnaHR8cmlkZ2V8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbWFsbC1jYXBzfHNvbGlkfHNxdWFyZXxzdGF0aWN8c3RyaWN0fHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRiLXJsfHRleHQtYm90dG9tfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0b3B8dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhhfHVwcGVyLWxhdGlufHVwcGVyLXJvbWFufHVwcGVyY2FzZXx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHplcm8iLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCJhcXVhfGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFyb29ufG5hdnl8b2xpdmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93Ii5zcGxpdCgifCIpKSxmPWUuYXJyYXlUb01hcCgiQG1peGlufEBleHRlbmR8QGluY2x1ZGV8QGltcG9ydHxAbWVkaWF8QGRlYnVnfEB3YXJufEBpZnxAZm9yfEBlYWNofEB3aGlsZXxAZWxzZXxAZm9udC1mYWNlfEAtd2Via2l0LWtleWZyYW1lc3xpZnxhbmR8IWRlZmF1bHR8bW9kdWxlfGRlZnxlbmR8ZGVjbGFyZSIuc3BsaXQoInwiKSksZz1lLmFycmF5VG9NYXAoImF8YWJicnxhY3JvbnltfGFkZHJlc3N8YXBwbGV0fGFyZWF8YXJ0aWNsZXxhc2lkZXxhdWRpb3xifGJhc2V8YmFzZWZvbnR8YmRvfGJpZ3xibG9ja3F1b3RlfGJvZHl8YnJ8YnV0dG9ufGNhbnZhc3xjYXB0aW9ufGNlbnRlcnxjaXRlfGNvZGV8Y29sfGNvbGdyb3VwfGNvbW1hbmR8ZGF0YWxpc3R8ZGR8ZGVsfGRldGFpbHN8ZGZufGRpcnxkaXZ8ZGx8ZHR8ZW18ZW1iZWR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9udHxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoMnxoM3xoNHxoNXxoNnxoZWFkfGhlYWRlcnxoZ3JvdXB8aHJ8aHRtbHxpfGlmcmFtZXxpbWd8aW5wdXR8aW5zfGtleWdlbnxrYmR8bGFiZWx8bGVnZW5kfGxpfGxpbmt8bWFwfG1hcmt8bWVudXxtZXRhfG1ldGVyfG5hdnxub2ZyYW1lc3xub3NjcmlwdHxvYmplY3R8b2x8b3B0Z3JvdXB8b3B0aW9ufG91dHB1dHxwfHBhcmFtfHByZXxwcm9ncmVzc3xxfHJwfHJ0fHJ1Ynl8c3xzYW1wfHNjcmlwdHxzZWN0aW9ufHNlbGVjdHxzbWFsbHxzb3VyY2V8c3BhbnxzdHJpa2V8c3Ryb25nfHN0eWxlfHN1YnxzdW1tYXJ5fHN1cHx0YWJsZXx0Ym9keXx0ZHx0ZXh0YXJlYXx0Zm9vdHx0aHx0aGVhZHx0aW1lfHRpdGxlfHRyfHR0fHV8dWx8dmFyfHZpZGVvfHdicnx4bXAiLnNwbGl0KCJ8IikpLGg9IlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OmgrIig/OmVtfGV4fHB4fGNtfG1tfGlufHB0fHBjfGRlZ3xyYWR8Z3JhZHxtc3xzfGh6fGtoenwlKSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXs2fSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IiNbYS1mMC05XXszfSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6aH0se3Rva2VuOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQudHlwZSI6Zi5oYXNPd25Qcm9wZXJ0eShlKT8ia2V5d29yZCI6Yy5oYXNPd25Qcm9wZXJ0eShlKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmIuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOmQuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5jb25zdGFudC5jb2xvciI6Zy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJ2YXJpYWJsZS5sYW5ndWFnZSI6InRleHQifSxyZWdleDoiXFwtP1tAYS16X11bQGEtejAtOV9cXC1dKiJ9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiJbYS16X1xcLSRdW2EtejAtOV9cXC0kXSpcXGIifSx7dG9rZW46InZhcmlhYmxlLmxhbmd1YWdlIixyZWdleDoiI1thLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZS5sYW5ndWFnZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJ2YXJpYWJsZS5sYW5ndWFnZSIscmVnZXg6IjpbYS16MC05LV9dKyJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbYS16MC05LV9dKyJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6Ijx8Pnw8PXw+PXw9PXwhPXwtfCV8I3xcXCt8XFwkfFxcK3xcXCoifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19fTtkLmluaGVyaXRzKGcsZiksYi5TY3NzSGlnaGxpZ2h0UnVsZXM9Z30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-scss.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9zY3NzX2hpZ2hsaWdodF9ydWxlcyIpLlNjc3NIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLGo9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpLCJpIiksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgaX07ZC5pbmhlcml0cyhqLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0SW5kZW50KGIpLGU9dGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMoYixhKS50b2tlbnM7aWYoZS5sZW5ndGgmJmVbZS5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO3ZhciBmPWIubWF0Y2goL14uKlx7XHMqJC8pO3JldHVybiBmJiYoZCs9YyksZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9fS5jYWxsKGoucHJvdG90eXBlKSxiLk1vZGU9an0pLGRlZmluZSgiYWNlL21vZGUvc2Nzc19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKGZ1bmN0aW9uKCl7dmFyIGE9Ii13ZWJraXQtfC1tb3otfC1vLXwtbXMtfC1zdmctfC1waWUtfC1raHRtbC0iLnNwbGl0KCJ8IiksYj0iYXBwZWFyYW5jZXxiYWNrZ3JvdW5kLWNsaXB8YmFja2dyb3VuZC1pbmxpbmUtcG9saWN5fGJhY2tncm91bmQtb3JpZ2lufGJhY2tncm91bmQtc2l6ZXxiaW5kaW5nfGJvcmRlci1ib3R0b20tY29sb3JzfGJvcmRlci1sZWZ0LWNvbG9yc3xib3JkZXItcmlnaHQtY29sb3JzfGJvcmRlci10b3AtY29sb3JzfGJvcmRlci1lbmR8Ym9yZGVyLWVuZC1jb2xvcnxib3JkZXItZW5kLXN0eWxlfGJvcmRlci1lbmQtd2lkdGh8Ym9yZGVyLWltYWdlfGJvcmRlci1zdGFydHxib3JkZXItc3RhcnQtY29sb3J8Ym9yZGVyLXN0YXJ0LXN0eWxlfGJvcmRlci1zdGFydC13aWR0aHxib3gtYWxpZ258Ym94LWRpcmVjdGlvbnxib3gtZmxleHxib3gtZmxleGdyb3VwfGJveC1vcmRpbmFsLWdyb3VwfGJveC1vcmllbnR8Ym94LXBhY2t8Ym94LXNpemluZ3xjb2x1bW4tY291bnR8Y29sdW1uLWdhcHxjb2x1bW4td2lkdGh8Y29sdW1uLXJ1bGV8Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXJ1bGUtc3R5bGV8Y29sdW1uLXJ1bGUtY29sb3J8ZmxvYXQtZWRnZXxmb250LWZlYXR1cmUtc2V0dGluZ3N8Zm9udC1sYW5ndWFnZS1vdmVycmlkZXxmb3JjZS1icm9rZW4taW1hZ2UtaWNvbnxpbWFnZS1yZWdpb258bWFyZ2luLWVuZHxtYXJnaW4tc3RhcnR8b3BhY2l0eXxvdXRsaW5lfG91dGxpbmUtY29sb3J8b3V0bGluZS1vZmZzZXR8b3V0bGluZS1yYWRpdXN8b3V0bGluZS1yYWRpdXMtYm90dG9tbGVmdHxvdXRsaW5lLXJhZGl1cy1ib3R0b21yaWdodHxvdXRsaW5lLXJhZGl1cy10b3BsZWZ0fG91dGxpbmUtcmFkaXVzLXRvcHJpZ2h0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxwYWRkaW5nLWVuZHxwYWRkaW5nLXN0YXJ0fHN0YWNrLXNpemluZ3x0YWItc2l6ZXx0ZXh0LWJsaW5rfHRleHQtZGVjb3JhdGlvbi1jb2xvcnx0ZXh0LWRlY29yYXRpb24tbGluZXx0ZXh0LWRlY29yYXRpb24tc3R5bGV8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNpdGlvbnx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0eXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx1c2VyLWZvY3VzfHVzZXItaW5wdXR8dXNlci1tb2RpZnl8dXNlci1zZWxlY3R8d2luZG93LXNoYWRvd3xib3JkZXItcmFkaXVzIi5zcGxpdCgifCIpLGM9ImF6aW11dGh8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmR8Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVyLWJvdHRvbXxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1yaWdodHxib3JkZXItc3BhY2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLXN0eWxlfGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXRvcHxib3JkZXItd2lkdGh8Ym9yZGVyfGJvdHRvbXxib3gtc2l6aW5nfGNhcHRpb24tc2lkZXxjbGVhcnxjbGlwfGNvbG9yfGNvbnRlbnR8Y291bnRlci1pbmNyZW1lbnR8Y291bnRlci1yZXNldHxjdWUtYWZ0ZXJ8Y3VlLWJlZm9yZXxjdWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmbG9hdHxmb250LWZhbWlseXxmb250LXNpemUtYWRqdXN0fGZvbnQtc2l6ZXxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8Zm9udHxoZWlnaHR8bGVmdHxsZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGV8bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJrZXItb2Zmc2V0fG1hcmdpbnxtYXJrc3xtYXgtaGVpZ2h0fG1heC13aWR0aHxtaW4taGVpZ2h0fG1pbi13aWR0aHxvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZy1ib3R0b218cGFkZGluZy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2V8cGF1c2UtYWZ0ZXJ8cGF1c2UtYmVmb3JlfHBhdXNlfHBpdGNoLXJhbmdlfHBpdGNofHBsYXktZHVyaW5nfHBvc2l0aW9ufHF1b3Rlc3xyaWNobmVzc3xyaWdodHxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNwZWVjaC1yYXRlfHNwZWFrfHN0cmVzc3x0YWJsZS1sYXlvdXR8dGV4dC1hbGlnbnx0ZXh0LWRlY29yYXRpb258dGV4dC1pbmRlbnR8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dG9wfHVuaWNvZGUtYmlkaXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHZvaWNlLWZhbWlseXx2b2x1bWV8d2hpdGUtc3BhY2V8d2lkb3dzfHdpZHRofHdvcmQtc3BhY2luZ3x6LWluZGV4Ii5zcGxpdCgifCIpLGQ9W107Zm9yKHZhciBlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsKGFbZV0rYi5qb2luKCJ8IithW2VdKSkuc3BsaXQoInwiKSk7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsYiksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxjKSxkfSgpKSxiPWUuYXJyYXlUb01hcCgiaHNsfGhzbGF8cmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVyc3xhYnN8YWRqdXN0X2NvbG9yfGFkanVzdF9odWV8YWxwaGF8am9pbnxibHVlfGNlaWx8Y2hhbmdlX2NvbG9yfGNvbXBhcmFibGV8Y29tcGxlbWVudHxkYXJrZW58ZGVzYXR1cmF0ZXxmbG9vcnxncmF5c2NhbGV8Z3JlZW58aHVlfGlmfGludmVydHxqb2lufGxlbmd0aHxsaWdodGVufGxpZ2h0bmVzc3xtaXh8bnRofG9wYWNpZnl8b3BhY2l0eXxwZXJjZW50YWdlfHF1b3RlfHJlZHxyb3VuZHxzYXR1cmF0ZXxzYXR1cmF0aW9ufHNjYWxlX2NvbG9yfHRyYW5zcGFyZW50aXplfHR5cGVfb2Z8dW5pdHx1bml0bGVzc3x1bnFvdXRlIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgiYWJzb2x1dGV8YWxsLXNjcm9sbHxhbHdheXN8YXJtZW5pYW58YXV0b3xiYXNlbGluZXxiZWxvd3xiaWRpLW92ZXJyaWRlfGJsb2NrfGJvbGR8Ym9sZGVyfGJvcmRlci1ib3h8Ym90aHxib3R0b218YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjZW50ZXJ8Y2hhcnxjaXJjbGV8Y2prLWlkZW9ncmFwaGljfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29udGVudC1ib3h8Y3Jvc3NoYWlyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXN0cmlidXRlLWFsbC1saW5lc3xkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGV8ZG90dGVkfGRvdWJsZXxlLXJlc2l6ZXxlbGxpcHNpc3xmaXhlZHxnZW9yZ2lhbnxncm9vdmV8aGFuZHxoZWJyZXd8aGVscHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRhbHxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpbmFjdGl2ZXxpbmhlcml0fGlubGluZS1ibG9ja3xpbmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13b3JkfGl0YWxpY3xqdXN0aWZ5fGthdGFrYW5hLWlyb2hhfGthdGFrYW5hfGtlZXAtYWxsfGxlZnR8bGlnaHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGlzdC1pdGVtfGxvb3NlfGxvd2VyLWFscGhhfGxvd2VyLWdyZWVrfGxvd2VyLWxhdGlufGxvd2VyLXJvbWFufGxvd2VyY2FzZXxsci10YnxsdHJ8bWVkaXVtfG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJlc2l6ZXxuZXdzcGFwZXJ8bm8tZHJvcHxuby1yZXBlYXR8bnctcmVzaXplfG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxvYmxpcXVlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBvaW50ZXJ8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJpZ2h0fHJpZGdlfHJvdy1yZXNpemV8cnRsfHMtcmVzaXplfHNjcm9sbHxzZS1yZXNpemV8c2VwYXJhdGV8c21hbGwtY2Fwc3xzb2xpZHxzcXVhcmV8c3RhdGljfHN0cmljdHxzdXBlcnxzdy1yZXNpemV8dGFibGUtZm9vdGVyLWdyb3VwfHRhYmxlLWhlYWRlci1ncm91cHx0Yi1ybHx0ZXh0LWJvdHRvbXx0ZXh0LXRvcHx0ZXh0fHRoaWNrfHRoaW58dG9wfHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1cHBlci1yb21hbnx1cHBlcmNhc2V8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6ZXJvIi5zcGxpdCgifCIpKSxkPWUuYXJyYXlUb01hcCgiYXF1YXxibGFja3xibHVlfGZ1Y2hzaWF8Z3JheXxncmVlbnxsaW1lfG1hcm9vbnxuYXZ5fG9saXZlfG9yYW5nZXxwdXJwbGV8cmVkfHNpbHZlcnx0ZWFsfHdoaXRlfHllbGxvdyIuc3BsaXQoInwiKSksZj1lLmFycmF5VG9NYXAoIkBtaXhpbnxAZXh0ZW5kfEBpbmNsdWRlfEBpbXBvcnR8QG1lZGlhfEBkZWJ1Z3xAd2FybnxAaWZ8QGZvcnxAZWFjaHxAd2hpbGV8QGVsc2V8QGZvbnQtZmFjZXxALXdlYmtpdC1rZXlmcmFtZXN8aWZ8YW5kfCFkZWZhdWx0fG1vZHVsZXxkZWZ8ZW5kfGRlY2xhcmUiLnNwbGl0KCJ8IikpLGc9ZS5hcnJheVRvTWFwKCJhfGFiYnJ8YWNyb255bXxhZGRyZXNzfGFwcGxldHxhcmVhfGFydGljbGV8YXNpZGV8YXVkaW98YnxiYXNlfGJhc2Vmb250fGJkb3xiaWd8YmxvY2txdW90ZXxib2R5fGJyfGJ1dHRvbnxjYW52YXN8Y2FwdGlvbnxjZW50ZXJ8Y2l0ZXxjb2RlfGNvbHxjb2xncm91cHxjb21tYW5kfGRhdGFsaXN0fGRkfGRlbHxkZXRhaWxzfGRmbnxkaXJ8ZGl2fGRsfGR0fGVtfGVtYmVkfGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvbnR8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aGdyb3VwfGhyfGh0bWx8aXxpZnJhbWV8aW1nfGlucHV0fGluc3xrZXlnZW58a2JkfGxhYmVsfGxlZ2VuZHxsaXxsaW5rfG1hcHxtYXJrfG1lbnV8bWV0YXxtZXRlcnxuYXZ8bm9mcmFtZXN8bm9zY3JpcHR8b2JqZWN0fG9sfG9wdGdyb3VwfG9wdGlvbnxvdXRwdXR8cHxwYXJhbXxwcmV8cHJvZ3Jlc3N8cXxycHxydHxydWJ5fHN8c2FtcHxzY3JpcHR8c2VjdGlvbnxzZWxlY3R8c21hbGx8c291cmNlfHNwYW58c3RyaWtlfHN0cm9uZ3xzdHlsZXxzdWJ8c3VtbWFyeXxzdXB8dGFibGV8dGJvZHl8dGR8dGV4dGFyZWF8dGZvb3R8dGh8dGhlYWR8dGltZXx0aXRsZXx0cnx0dHx1fHVsfHZhcnx2aWRlb3x3YnJ8eG1wIi5zcGxpdCgifCIpKSxoPSJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnQifSx7dG9rZW46InN0cmluZyIscmVnZXg6J1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qXFxcXCQnLG5leHQ6InFxc3RyaW5nIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKlxcXFwkIixuZXh0OiJxc3RyaW5nIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDpoKyIoPzplbXxleHxweHxjbXxtbXxpbnxwdHxwY3xkZWd8cmFkfGdyYWR8bXN8c3xoenxraHp8JSkifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIjW2EtZjAtOV17Nn0ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIjW2EtZjAtOV17M30ifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4Omh9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LnR5cGUiOmYuaGFzT3duUHJvcGVydHkoZSk/ImtleXdvcmQiOmMuaGFzT3duUHJvcGVydHkoZSk/ImNvbnN0YW50Lmxhbmd1YWdlIjpiLmhhc093blByb3BlcnR5KGUpPyJzdXBwb3J0LmZ1bmN0aW9uIjpkLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuY29uc3RhbnQuY29sb3IiOmcuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8idmFyaWFibGUubGFuZ3VhZ2UiOiJ0ZXh0In0scmVnZXg6IlxcLT9bQGEtel9dW0BhLXowLTlfXFwtXSoifSx7dG9rZW46InZhcmlhYmxlIixyZWdleDoiW2Etel9cXC0kXVthLXowLTlfXFwtJF0qXFxiIn0se3Rva2VuOiJ2YXJpYWJsZS5sYW5ndWFnZSIscmVnZXg6IiNbYS16MC05LV9dKyJ9LHt0b2tlbjoidmFyaWFibGUubGFuZ3VhZ2UiLHJlZ2V4OiJcXC5bYS16MC05LV9dKyJ9LHt0b2tlbjoidmFyaWFibGUubGFuZ3VhZ2UiLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50IixyZWdleDoiW2EtejAtOS1fXSsifSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiI8fD58PD18Pj18PT18IT18LXwlfCN8XFwrfFxcJHxcXCt8XFwqIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0sY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLio/XFwqXFwvIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Jyg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj8iJyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfX07ZC5pbmhlcml0cyhnLGYpLGIuU2Nzc0hpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-sql-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvc3FsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3NxbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3NxbF9oaWdobGlnaHRfcnVsZXMiKS5TcWxIaWdobGlnaHRSdWxlcyxoPWEoIi4uL3JhbmdlIikuUmFuZ2UsaT1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpfTtkLmluaGVyaXRzKGksZSksZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0hMCxmPVtdLGc9L14oXHMqKS0tLztmb3IodmFyIGk9YztpPD1kO2krKylpZighZy50ZXN0KGIuZ2V0TGluZShpKSkpe2U9ITE7YnJlYWt9aWYoZSl7dmFyIGo9bmV3IGgoMCwwLDAsMCk7Zm9yKHZhciBpPWM7aTw9ZDtpKyspe3ZhciBrPWIuZ2V0TGluZShpKSxsPWsubWF0Y2goZyk7ai5zdGFydC5yb3c9aSxqLmVuZC5yb3c9aSxqLmVuZC5jb2x1bW49bFswXS5sZW5ndGgsYi5yZXBsYWNlKGosbFsxXSl9fWVsc2UgYi5pbmRlbnRSb3dzKGMsZCwiLS0iKX19LmNhbGwoaS5wcm90b3R5cGUpLGIuTW9kZT1pfSksYWNlLmRlZmluZSgiYWNlL21vZGUvc3FsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoInNlbGVjdHxmcm9tfHdoZXJlfGFuZHxvcnxncm91cHxieXxvcmRlcnxsaW1pdHxvZmZzZXR8aGF2aW5nfGFzfGNhc2V8d2hlbnxlbHNlfGVuZHx0eXBlfGxlZnR8cmlnaHR8am9pbnxvbnxvdXRlcnxkZXNjfGFzYyIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoInRydWV8ZmFsc2V8bnVsbCIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImNvdW50fG1pbnxtYXh8YXZnfHN1bXxyYW5rfG5vd3xjb2FsZXNjZSIuc3BsaXQoInwiKSk7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiItLS4qJCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonIi4qIid9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiJy4qJyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOmZ1bmN0aW9uKGQpe3JldHVybiBkPWQudG9Mb3dlckNhc2UoKSxhLmhhc093blByb3BlcnR5KGQpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGQpPyJjb25zdGFudC5sYW5ndWFnZSI6Yy5oYXNPd25Qcm9wZXJ0eShkKT8ic3VwcG9ydC5mdW5jdGlvbiI6ImlkZW50aWZpZXIifSxyZWdleDoiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwrfFxcLXxcXC98XFwvXFwvfCV8PEA+fEA+fDxAfCZ8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fD0ifSx7dG9rZW46ImxwYXJlbi5wYXJlbiIscmVnZXg6IltcXChdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFwpXSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV19fTtkLmluaGVyaXRzKGcsZiksYi5TcWxIaWdobGlnaHRSdWxlcz1nfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-sql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zcWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvc3FsX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vc3FsX2hpZ2hsaWdodF9ydWxlcyIpLlNxbEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi4vcmFuZ2UiKS5SYW5nZSxpPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSl9O2QuaW5oZXJpdHMoaSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9W10sZz0vXihccyopLS0vO2Zvcih2YXIgaT1jO2k8PWQ7aSsrKWlmKCFnLnRlc3QoYi5nZXRMaW5lKGkpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaj1uZXcgaCgwLDAsMCwwKTtmb3IodmFyIGk9YztpPD1kO2krKyl7dmFyIGs9Yi5nZXRMaW5lKGkpLGw9ay5tYXRjaChnKTtqLnN0YXJ0LnJvdz1pLGouZW5kLnJvdz1pLGouZW5kLmNvbHVtbj1sWzBdLmxlbmd0aCxiLnJlcGxhY2UoaixsWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCItLSIpfX0uY2FsbChpLnByb3RvdHlwZSksYi5Nb2RlPWl9KSxkZWZpbmUoImFjZS9tb2RlL3NxbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJzZWxlY3R8ZnJvbXx3aGVyZXxhbmR8b3J8Z3JvdXB8Ynl8b3JkZXJ8bGltaXR8b2Zmc2V0fGhhdmluZ3xhc3xjYXNlfHdoZW58ZWxzZXxlbmR8dHlwZXxsZWZ0fHJpZ2h0fGpvaW58b258b3V0ZXJ8ZGVzY3xhc2MiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJ0cnVlfGZhbHNlfG51bGwiLnNwbGl0KCJ8IikpLGM9ZS5hcnJheVRvTWFwKCJjb3VudHxtaW58bWF4fGF2Z3xzdW18cmFua3xub3d8Y29hbGVzY2UiLnNwbGl0KCJ8IikpO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiLS0uKiQifSx7dG9rZW46InN0cmluZyIscmVnZXg6JyIuKiInfSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKicifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjpmdW5jdGlvbihkKXtyZXR1cm4gZD1kLnRvTG93ZXJDYXNlKCksYS5oYXNPd25Qcm9wZXJ0eShkKT8ia2V5d29yZCI6Yi5oYXNPd25Qcm9wZXJ0eShkKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmMuaGFzT3duUHJvcGVydHkoZCk/InN1cHBvcnQuZnVuY3Rpb24iOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcK3xcXC18XFwvfFxcL1xcL3wlfDxAPnxAPnw8QHwmfFxcXnx+fDx8Pnw8PXw9Pnw9PXwhPXw8Pnw9In0se3Rva2VuOiJscGFyZW4ucGFyZW4iLHJlZ2V4OiJbXFwoXSJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcKV0ifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dfX07ZC5pbmhlcml0cyhnLGYpLGIuU3FsSGlnaGxpZ2h0UnVsZXM9Z30pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-svg-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvc3ZnIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS94bWwiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3N2Z19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi94bWwiKS5Nb2RlLGY9YSgiLi9qYXZhc2NyaXB0IikuTW9kZSxnPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixoPWEoIi4vc3ZnX2hpZ2hsaWdodF9ydWxlcyIpLlN2Z0hpZ2hsaWdodFJ1bGVzLGk9YSgiLi9mb2xkaW5nL21peGVkIikuRm9sZE1vZGUsaj1hKCIuL2ZvbGRpbmcveG1sIikuRm9sZE1vZGUsaz1hKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGUsbD1mdW5jdGlvbigpe2UuY2FsbCh0aGlzKSx0aGlzLmhpZ2hsaWdodGVyPW5ldyBoLHRoaXMuJHRva2VuaXplcj1uZXcgZyh0aGlzLmhpZ2hsaWdodGVyLmdldFJ1bGVzKCkpLHRoaXMuJGVtYmVkcz10aGlzLmhpZ2hsaWdodGVyLmdldEVtYmVkcygpLHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7ImpzLSI6Zn0pLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBpKG5ldyBqKHt9KSx7ImpzLSI6bmV3IGt9KX07ZC5pbmhlcml0cyhsLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJGdldEluZGVudChiKX19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksYWNlLmRlZmluZSgiYWNlL21vZGUveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy94bWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlcyxoPWEoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cixpPWEoIi4vZm9sZGluZy94bWwiKS5Gb2xkTW9kZSxqPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kYmVoYXZpb3VyPW5ldyBoLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBpfTtkLmluaGVyaXRzKGosZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChqLnByb3RvdHlwZSksYi5Nb2RlPWp9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS94bWxfdXRpbCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3htbF91dGlsIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/IixuZXh0OiJ0YWcifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6Iig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZS50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0Iil9O2QuaW5oZXJpdHMoZyxmKSxiLlhtbEhpZ2hsaWdodFJ1bGVzPWd9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS94bWxfdXRpbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEpe3JldHVyblt7dG9rZW46InN0cmluZyIscmVnZXg6JyIuKj8iJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKicsbmV4dDphKyItcXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKj8nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKiIsbmV4dDphKyItcXN0cmluZyJ9XX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLio/IithLG5leHQ6Yn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2xhbmciKSxlPWQuYXJyYXlUb01hcCgiYnV0dG9ufGZvcm18aW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhIi5zcGxpdCgifCIpKSxmPWQuYXJyYXlUb01hcCgidGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dHIiLnNwbGl0KCJ8IikpO2IudGFnPWZ1bmN0aW9uKGEsYixjKXthW2JdPVt7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09ImEiPyJtZXRhLnRhZy5hbmNob3IiOmE9PT0iaW1nIj8ibWV0YS50YWcuaW1hZ2UiOmE9PT0ic2NyaXB0Ij8ibWV0YS50YWcuc2NyaXB0IjphPT09InN0eWxlIj8ibWV0YS50YWcuc3R5bGUiOmUuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcuZm9ybSI6Zi5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy50YWJsZSI6Im1ldGEudGFnIn0sbWVyZ2U6ITAscmVnZXg6IlstX2EtekEtWjAtOTohXSsiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OmIrImVtYmVkLWF0dHJpYnV0ZS1saXN0In1dLGFbYisiLXFzdHJpbmciXT1oKCInIixiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiLXFxc3RyaW5nIl09aCgnIicsYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiKSxhW2IrImVtYmVkLWF0dHJpYnV0ZS1saXN0Il09W3t0b2tlbjoibWV0YS50YWciLG1lcmdlOiEwLHJlZ2V4OiIvPz4iLG5leHQ6Y30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiPSJ9LHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLmNvbmNhdChnKGIpKX19KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1hKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixnPWZ1bmN0aW9uKCl7dGhpcy5pbmhlcml0KGYsWyJzdHJpbmdfZHF1b3RlcyJdKSx0aGlzLmFkZCgiYnJhY2tldHMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IjwiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj8hMTp7dGV4dDoiPD4iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09Ij4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSI+IilyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaz1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisyKTtpZihrPT0iPC8iKXt2YXIgbD10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpK2QuZ2V0VGFiU3RyaW5nKCksbT10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbCsiXG4iK20sc2VsZWN0aW9uOlsxLGwubGVuZ3RoLDEsbC5sZW5ndGhdfX19fSl9O2QuaW5oZXJpdHMoZyxlKSxiLlhtbEJlaGF2aW91cj1nfSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL2xpYi9sYW5nIiksZj1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGc9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxoPWEoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixpPWIuRm9sZE1vZGU9ZnVuY3Rpb24oYSl7Zy5jYWxsKHRoaXMpLHRoaXMudm9pZEVsZW1lbnRzPWF8fHt9fTtkLmluaGVyaXRzKGksZyksZnVuY3Rpb24oKXt0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7cmV0dXJuIGQuY2xvc2luZz9iPT0ibWFya2JlZ2luZW5kIj8iZW5kIjoiIjohZC50YWdOYW1lfHx0aGlzLnZvaWRFbGVtZW50c1tkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0/IiI6ZC5zZWxmQ2xvc2luZz8iIjpkLnZhbHVlLmluZGV4T2YoIi8iK2QudGFnTmFtZSkhPT0tMT8iIjoic3RhcnQifSx0aGlzLl9nZXRGaXJzdFRhZ0luTGluZT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0VG9rZW5zKGIsYilbMF0udG9rZW5zLGQ9IiI7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBnPWNbZl07Zy50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wP2QrPWcudmFsdWU6ZCs9ZS5zdHJpbmdSZXBlYXQoIiAiLGcudmFsdWUubGVuZ3RoKX1yZXR1cm4gdGhpcy5fcGFyc2VUYWcoZCl9LHRoaXMudGFnUmU9L14oXHMqKSg8PyhcLz8pKFstX2EtekEtWjAtOTohXSopXHMqKFwvPyk+PykvLHRoaXMuX3BhcnNlVGFnPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudGFnUmUuZXhlYyhhKSxjPXRoaXMudGFnUmUubGFzdEluZGV4fHwwO3JldHVybiB0aGlzLnRhZ1JlLmxhc3RJbmRleD0wLHt2YWx1ZTphLG1hdGNoOmI/YlsyXToiIixjbG9zaW5nOmI/ISFiWzNdOiExLHNlbGZDbG9zaW5nOmI/ISFiWzVdfHxiWzJdPT0iLz4iOiExLHRhZ05hbWU6Yj9iWzRdOiIiLGNvbHVtbjpiWzFdP2MrYlsxXS5sZW5ndGg6Y319LHRoaXMuX3JlYWRUYWdGb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2lmKCFkKXZhciBkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07Yys9Yi52YWx1ZTtpZihjLmluZGV4T2YoIj4iKSE9PS0xKXt2YXIgZT10aGlzLl9wYXJzZVRhZyhjKTtyZXR1cm4gZS5zdGFydD1kLGUuZW5kPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0sYS5zdGVwRm9yd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwRm9yd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcmVhZFRhZ0JhY2t3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2R8fChkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0pLGM9Yi52YWx1ZStjO2lmKGMuaW5kZXhPZigiPCIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLmVuZD1kLGUuc3RhcnQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfSxhLnN0ZXBCYWNrd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwQmFja3dhcmQoKSk7cmV0dXJuIG51bGx9LHRoaXMuX3BvcD1mdW5jdGlvbihhLGIpe3doaWxlKGEubGVuZ3RoKXt2YXIgYz1hW2EubGVuZ3RoLTFdO2lmKCFifHxjLnRhZ05hbWU9PWIudGFnTmFtZSlyZXR1cm4gYS5wb3AoKTtpZih0aGlzLnZvaWRFbGVtZW50c1tiLnRhZ05hbWVdKXJldHVybjtpZih0aGlzLnZvaWRFbGVtZW50c1tjLnRhZ05hbWVdKXthLnBvcCgpO2NvbnRpbnVlfXJldHVybiBudWxsfX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7aWYoIWQubWF0Y2gpcmV0dXJuIG51bGw7dmFyIGU9ZC5jbG9zaW5nfHxkLnNlbGZDbG9zaW5nLGc9W10saTtpZighZSl7dmFyIGo9bmV3IGgoYSxjLGQuY29sdW1uKSxrPXtyb3c6Yyxjb2x1bW46ZC5jb2x1bW4rZC50YWdOYW1lLmxlbmd0aCsyfTt3aGlsZShpPXRoaXMuX3JlYWRUYWdGb3J3YXJkKGopKXtpZihpLnNlbGZDbG9zaW5nKXtpZighZy5sZW5ndGgpcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsaS5lbmQuY29sdW1uLT0yLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGkuZW5kKTtjb250aW51ZX1pZihpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBmLmZyb21Qb2ludHMoayxpLnN0YXJ0KX1lbHNlIGcucHVzaChpKX19ZWxzZXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4rZC5tYXRjaC5sZW5ndGgpLGw9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbn07d2hpbGUoaT10aGlzLl9yZWFkVGFnQmFja3dhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKCFpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGwpfWVsc2UgZy5wdXNoKGkpfX19fS5jYWxsKGkucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3VuaWNvZGUiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4uL3VuaWNvZGUiKSxnPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxpPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldCIuc3BsaXQoInwiKSksYz0iY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZCIsZD1lLmFycmF5VG9NYXAoIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fXyIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLnNwbGl0KCJ8IikpLGk9ZS5hcnJheVRvTWFwKCJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLnNwbGl0KCJ8IikpLGo9ZS5hcnJheVRvTWFwKCJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIuc3BsaXQoInwiKSksaz0iWyIrZi5wYWNrYWdlcy5MKyJcXCRfXVsiK2YucGFja2FnZXMuTCtmLnBhY2thZ2VzLk1uK2YucGFja2FnZXMuTWMrZi5wYWNrYWdlcy5OZCtmLnBhY2thZ2VzLlBjKyJcXCRfXSpcXGIiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0sKG5ldyBnKS5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXSd9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDonWyJdLipcXFxcJCcsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10ifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qXFxcXCQiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIwW3hYXVswLTlhLWZBLUZdK1xcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIn0se3Rva2VuOlsia2V5d29yZC5kZWZpbml0aW9uIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitrKyIpIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDoiKD86dHJ1ZXxmYWxzZSlcXGIifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIoPzoiK2MrIilcXGIiLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoYyk/InZhcmlhYmxlLmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmguaGFzT3duUHJvcGVydHkoYyk/ImtleXdvcmQuZGVmaW5pdGlvbiI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6aS5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmouaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuaWxsZWdhbCI6Yz09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4Omt9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJcXD98XFw6fFxcLHxcXDt8XFwuIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJbWyh7XSIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDoiW1xcXSl9XSJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcLz0/IixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXiMhLiokIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxyZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCoiLG5leHQ6ImNvbW1lbnRfcmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qJCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlxcLyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXg6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXgifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiIvXFx3KiIsbmV4dDoic3RhcnQiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbXlxcXFwvXFxbXSsiLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlxcWyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0scmVnZXhfY2hhcmFjdGVyX2NsYXNzOlt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiLG5leHQ6InJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJdIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJbXlxcXFxcXF1dKyIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0sY29tbWVudF9yZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDonKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19LHRoaXMuZW1iZWRSdWxlcyhnLCJkb2MtIixbKG5ldyBnKS5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaSxoKSxiLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1pfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxmPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQuZG9jLnRhZyIscmVnZXg6IkBbXFx3XFxkX10rIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxccysifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiVE9ETyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJbXkBcXCpdKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiIuIn1dfX07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXRTdGFydFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKig/PVxcKikiLG5leHQ6YX19LHRoaXMuZ2V0RW5kUnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwqXFwvIixuZXh0OmF9fX0uY2FsbChmLnByb3RvdHlwZSksYi5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxhY2UuZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsZj1mdW5jdGlvbihiLGQsZSxmKXt0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKTtpZihjLnBhY2thZ2VkKXt2YXIgZz10aGlzLiRndWVzc0Jhc2VQYXRoKCk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoZytkKX1lbHNle3ZhciBoPXRoaXMuJG5vcm1hbGl6ZVBhdGgoYS5uYW1lVG9VcmwoImFjZS93b3JrZXIvd29ya2VyIixudWxsLCJfIikpO3RoaXMuJHdvcmtlcj1uZXcgV29ya2VyKGgpO3ZhciBpPXt9O2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7aisrKXt2YXIgaz1iW2pdLGw9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybChrLG51bGwsIl8iKS5yZXBsYWNlKC8uanMkLywiIikpO2lba109bH19dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtpbml0OiEwLHRsbnM6aSxtb2R1bGU6ZSxjbGFzc25hbWU6Zn0pLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9O3ZhciBtPXRoaXM7dGhpcy4kd29ya2VyLm9uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgd2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhhKSxhfSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZGF0YTtzd2l0Y2goYi50eXBlKXtjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiLmRhdGEpO2JyZWFrO2Nhc2UiZXZlbnQiOm0uX2VtaXQoYi5uYW1lLHtkYXRhOmIuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIGM9bS5jYWxsYmFja3NbYi5pZF07YyYmKGMoYi5kYXRhKSxkZWxldGUgbS5jYWxsYmFja3NbYi5pZF0pfX19OygoZnVuY3Rpb24oKXtkLmltcGxlbWVudCh0aGlzLGUpLHRoaXMuJG5vcm1hbGl6ZVBhdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKC9eW2Etel0rOlwvXC9bXlwvXStcLy8sIiIpLGE9bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KyhhLmNoYXJBdCgwKT09Ii8iPyIiOmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpKSsiLyIrYS5yZXBsYWNlKC9eW1wvXSsvLCIiKSxhfSx0aGlzLiRndWVzc0Jhc2VQYXRoPWZ1bmN0aW9uKCl7aWYoYS5hY2VCYXNlVXJsKXJldHVybiBhLmFjZUJhc2VVcmw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZC5nZXRBdHRyaWJ1dGUoImRhdGEtYWNlLWJhc2UiKTtpZihlKXJldHVybiBlLnJlcGxhY2UoL1wvKiQvLCIvIik7dmFyIGY9ZC5zcmN8fGQuZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighZiljb250aW51ZTt2YXIgZz1mLm1hdGNoKC9eKD86KC4qXC8pYWNlXC5qc3woLipcLylhY2UoLXVuY29tcHJlc3NlZCk/KC1ub2NvbmZsaWN0KT9cLmpzKSg/Olw/fCQpLyk7aWYoZylyZXR1cm4gZ1sxXXx8Z1syXX1yZXR1cm4iIn0sdGhpcy50ZXJtaW5hdGU9ZnVuY3Rpb24oKXt0aGlzLl9lbWl0KCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciksdGhpcy4kZG9jPW51bGx9LHRoaXMuc2VuZD1mdW5jdGlvbihhLGIpe3RoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDphLGFyZ3M6Yn0pfSx0aGlzLmNhbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPXRoaXMuY2FsbGJhY2tJZCsrO3RoaXMuY2FsbGJhY2tzW2RdPWMsYi5wdXNoKGQpfXRoaXMuc2VuZChhLGIpfSx0aGlzLmVtaXQ9ZnVuY3Rpb24oYSxiKXt0cnl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDphLGRhdGE6e2RhdGE6Yi5kYXRhfX0pfWNhdGNoKGMpe319LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWEsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2EuZ2V0VmFsdWUoKV0pLGEub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oYSl7YS5yYW5nZT17c3RhcnQ6YS5kYXRhLnJhbmdlLnN0YXJ0LGVuZDphLmRhdGEucmFuZ2UuZW5kfSx0aGlzLmVtaXQoImNoYW5nZSIsYSl9fSkpLmNhbGwoZi5wcm90b3R5cGUpLGIuV29ya2VyQ2xpZW50PWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZj1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGc9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307ZC5pbmhlcml0cyhnLGYpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9Lyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS8sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKSxmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXg7aWYoZlsxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGEsZlsxXSxjLGcpO3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcrZlswXS5sZW5ndGgpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH1pZihiIT09Im1hcmtiZWdpbmVuZCIpcmV0dXJuO3ZhciBmPWQubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihmWzJdKXt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9dmFyIGk9e3JvdzpjLGNvbHVtbjpnfSxqPWEuJGZpbmRPcGVuaW5nQnJhY2tldChmWzFdLGkpO2lmKCFqKXJldHVybjtyZXR1cm4gai5jb2x1bW4rKyxpLmNvbHVtbi0tLGUuZnJvbVBvaW50cyhqLGkpfX19LmNhbGwoZy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvc3ZnX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUveG1sX3V0aWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsZj1hKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlcyxnPWEoIi4veG1sX3V0aWwiKSxoPWZ1bmN0aW9uKCl7Zi5jYWxsKHRoaXMpLHRoaXMuJHJ1bGVzLnN0YXJ0LnNwbGljZSgzLDAse3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjwoPz1zKnNjcmlwdCkiLG5leHQ6InNjcmlwdCJ9KSxnLnRhZyh0aGlzLiRydWxlcywic2NyaXB0IiwianMtc3RhcnQiKSx0aGlzLmVtYmVkUnVsZXMoZSwianMtIixbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiooPz08XFwvc2NyaXB0PikiLG5leHQ6InRhZyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvKD89c2NyaXB0KSIsbmV4dDoidGFnIn1dKX07ZC5pbmhlcml0cyhoLGYpLGIuU3ZnSGlnaGxpZ2h0UnVsZXM9aH0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGY9Yi5Gb2xkTW9kZT1mdW5jdGlvbihhLGIpe3RoaXMuZGVmYXVsdE1vZGU9YSx0aGlzLnN1Yk1vZGVzPWJ9O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuJGdldE1vZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIHRoaXMuc3ViTW9kZXMpaWYoYS5pbmRleE9mKGIpPT09MClyZXR1cm4gdGhpcy5zdWJNb2Rlc1tiXTtyZXR1cm4gbnVsbH0sdGhpcy4kdHJ5TW9kZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLiRnZXRNb2RlKGEpO3JldHVybiBlP2UuZ2V0Rm9sZFdpZGdldChiLGMsZCk6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJHRyeU1vZGUoYS5nZXRTdGF0ZShjLTEpLGEsYixjKXx8dGhpcy4kdHJ5TW9kZShhLmdldFN0YXRlKGMpLGEsYixjKXx8dGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KGEsYixjKX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldE1vZGUoYS5nZXRTdGF0ZShjLTEpKTtpZighZHx8IWQuZ2V0Rm9sZFdpZGdldChhLGIsYykpZD10aGlzLiRnZXRNb2RlKGEuZ2V0U3RhdGUoYykpO2lmKCFkfHwhZC5nZXRGb2xkV2lkZ2V0KGEsYixjKSlkPXRoaXMuZGVmYXVsdE1vZGU7cmV0dXJuIGQuZ2V0Rm9sZFdpZGdldFJhbmdlKGEsYixjKX19LmNhbGwoZi5wcm90b3R5cGUpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-svg.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zdmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3htbCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvc3ZnX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3htbCIpLk1vZGUsZj1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGc9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGg9YSgiLi9zdmdfaGlnaGxpZ2h0X3J1bGVzIikuU3ZnSGlnaGxpZ2h0UnVsZXMsaT1hKCIuL2ZvbGRpbmcvbWl4ZWQiKS5Gb2xkTW9kZSxqPWEoIi4vZm9sZGluZy94bWwiKS5Gb2xkTW9kZSxrPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxsPWZ1bmN0aW9uKCl7ZS5jYWxsKHRoaXMpLHRoaXMuaGlnaGxpZ2h0ZXI9bmV3IGgsdGhpcy4kdG9rZW5pemVyPW5ldyBnKHRoaXMuaGlnaGxpZ2h0ZXIuZ2V0UnVsZXMoKSksdGhpcy4kZW1iZWRzPXRoaXMuaGlnaGxpZ2h0ZXIuZ2V0RW1iZWRzKCksdGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzKHsianMtIjpmfSksdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGkobmV3IGooe30pLHsianMtIjpuZXcga30pfTtkLmluaGVyaXRzKGwsZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChsLnByb3RvdHlwZSksYi5Nb2RlPWx9KSxkZWZpbmUoImFjZS9tb2RlL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXIsaT1hKCIuL2ZvbGRpbmcveG1sIikuRm9sZE1vZGUsaj1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJGJlaGF2aW91cj1uZXcgaCx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgaX07ZC5pbmhlcml0cyhqLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJGdldEluZGVudChiKX19LmNhbGwoai5wcm90b3R5cGUpLGIuTW9kZT1qfSksZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS94bWxfdXRpbCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3htbF91dGlsIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/IixuZXh0OiJ0YWcifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6Iig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZS50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0Iil9O2QuaW5oZXJpdHMoZyxmKSxiLlhtbEhpZ2hsaWdodFJ1bGVzPWd9KSxkZWZpbmUoImFjZS9tb2RlL3htbF91dGlsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGcoYSl7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixyZWdleDonIi4qPyInfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qJyxuZXh0OmErIi1xcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiJy4qPycifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qIixuZXh0OmErIi1xc3RyaW5nIn1dfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm5be3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKj8iK2EsbmV4dDpifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfSJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvbGFuZyIpLGU9ZC5hcnJheVRvTWFwKCJidXR0b258Zm9ybXxpbnB1dHxsYWJlbHxzZWxlY3R8dGV4dGFyZWEiLnNwbGl0KCJ8IikpLGY9ZC5hcnJheVRvTWFwKCJ0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0ciIuc3BsaXQoInwiKSk7Yi50YWc9ZnVuY3Rpb24oYSxiLGMpe2FbYl09W3t0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0iYSI/Im1ldGEudGFnLmFuY2hvciI6YT09PSJpbWciPyJtZXRhLnRhZy5pbWFnZSI6YT09PSJzY3JpcHQiPyJtZXRhLnRhZy5zY3JpcHQiOmE9PT0ic3R5bGUiPyJtZXRhLnRhZy5zdHlsZSI6ZS5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy5mb3JtIjpmLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/Im1ldGEudGFnLnRhYmxlIjoibWV0YS50YWcifSxtZXJnZTohMCxyZWdleDoiWy1fYS16QS1aMC05OiFdKyIsbmV4dDpiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCJ9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifV0sYVtiKyItcXN0cmluZyJdPWgoIiciLGIrImVtYmVkLWF0dHJpYnV0ZS1saXN0IiksYVtiKyItcXFzdHJpbmciXT1oKCciJyxiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiXT1be3Rva2VuOiJtZXRhLnRhZyIsbWVyZ2U6ITAscmVnZXg6Ii8/PiIsbmV4dDpjfSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiI9In0se3Rva2VuOiJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUiLHJlZ2V4OiJbLV9hLXpBLVowLTk6XSsifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0uY29uY2F0KGcoYikpfX0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9YSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXIsZz1mdW5jdGlvbigpe3RoaXMuaW5oZXJpdChmLFsic3RyaW5nX2RxdW90ZXMiXSksdGhpcy5hZGQoImJyYWNrZXRzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSI8Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/ITE6e3RleHQ6Ijw+IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSI+Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iPiIpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX1lbHNlIGlmKGU9PSJcbiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGs9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMik7aWYoaz09IjwvIil7dmFyIGw9dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUoaC5yb3cpKStkLmdldFRhYlN0cmluZygpLG09dGhpcy4kZ2V0SW5kZW50KGQuZG9jLmdldExpbmUoaC5yb3cpKTtyZXR1cm57dGV4dDoiXG4iK2wrIlxuIittLHNlbGVjdGlvbjpbMSxsLmxlbmd0aCwxLGwubGVuZ3RoXX19fX0pfTtkLmluaGVyaXRzKGcsZSksYi5YbWxCZWhhdmlvdXI9Z30pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vbGliL2xhbmciKSxmPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZz1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGg9YSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLGk9Yi5Gb2xkTW9kZT1mdW5jdGlvbihhKXtnLmNhbGwodGhpcyksdGhpcy52b2lkRWxlbWVudHM9YXx8e319O2QuaW5oZXJpdHMoaSxnKSxmdW5jdGlvbigpe3RoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoYSxjKTtyZXR1cm4gZC5jbG9zaW5nP2I9PSJtYXJrYmVnaW5lbmQiPyJlbmQiOiIiOiFkLnRhZ05hbWV8fHRoaXMudm9pZEVsZW1lbnRzW2QudGFnTmFtZS50b0xvd2VyQ2FzZSgpXT8iIjpkLnNlbGZDbG9zaW5nPyIiOmQudmFsdWUuaW5kZXhPZigiLyIrZC50YWdOYW1lKSE9PS0xPyIiOiJzdGFydCJ9LHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRUb2tlbnMoYixiKVswXS50b2tlbnMsZD0iIjtmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl7dmFyIGc9Y1tmXTtnLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTA/ZCs9Zy52YWx1ZTpkKz1lLnN0cmluZ1JlcGVhdCgiICIsZy52YWx1ZS5sZW5ndGgpfXJldHVybiB0aGlzLl9wYXJzZVRhZyhkKX0sdGhpcy50YWdSZT0vXihccyopKDw/KFwvPykoWy1fYS16QS1aMC05OiFdKilccyooXC8/KT4/KS8sdGhpcy5fcGFyc2VUYWc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50YWdSZS5leGVjKGEpLGM9dGhpcy50YWdSZS5sYXN0SW5kZXh8fDA7cmV0dXJuIHRoaXMudGFnUmUubGFzdEluZGV4PTAse3ZhbHVlOmEsbWF0Y2g6Yj9iWzJdOiIiLGNsb3Npbmc6Yj8hIWJbM106ITEsc2VsZkNsb3Npbmc6Yj8hIWJbNV18fGJbMl09PSIvPiI6ITEsdGFnTmFtZTpiP2JbNF06IiIsY29sdW1uOmJbMV0/YytiWzFdLmxlbmd0aDpjfX0sdGhpcy5fcmVhZFRhZ0ZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRDdXJyZW50VG9rZW4oKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz0iIixkO2RvIGlmKGIudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MCl7aWYoIWQpdmFyIGQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfTtjKz1iLnZhbHVlO2lmKGMuaW5kZXhPZigiPiIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLnN0YXJ0PWQsZS5lbmQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2IudmFsdWUubGVuZ3RofSxhLnN0ZXBGb3J3YXJkKCksZX19d2hpbGUoYj1hLnN0ZXBGb3J3YXJkKCkpO3JldHVybiBudWxsfSx0aGlzLl9yZWFkVGFnQmFja3dhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRDdXJyZW50VG9rZW4oKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz0iIixkO2RvIGlmKGIudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MCl7ZHx8KGQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2IudmFsdWUubGVuZ3RofSksYz1iLnZhbHVlK2M7aWYoYy5pbmRleE9mKCI8IikhPT0tMSl7dmFyIGU9dGhpcy5fcGFyc2VUYWcoYyk7cmV0dXJuIGUuZW5kPWQsZS5zdGFydD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9LGEuc3RlcEJhY2t3YXJkKCksZX19d2hpbGUoYj1hLnN0ZXBCYWNrd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcG9wPWZ1bmN0aW9uKGEsYil7d2hpbGUoYS5sZW5ndGgpe3ZhciBjPWFbYS5sZW5ndGgtMV07aWYoIWJ8fGMudGFnTmFtZT09Yi50YWdOYW1lKXJldHVybiBhLnBvcCgpO2lmKHRoaXMudm9pZEVsZW1lbnRzW2IudGFnTmFtZV0pcmV0dXJuO2lmKHRoaXMudm9pZEVsZW1lbnRzW2MudGFnTmFtZV0pe2EucG9wKCk7Y29udGludWV9cmV0dXJuIG51bGx9fSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoYSxjKTtpZighZC5tYXRjaClyZXR1cm4gbnVsbDt2YXIgZT1kLmNsb3Npbmd8fGQuc2VsZkNsb3NpbmcsZz1bXSxpO2lmKCFlKXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4pLGs9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbitkLnRhZ05hbWUubGVuZ3RoKzJ9O3doaWxlKGk9dGhpcy5fcmVhZFRhZ0ZvcndhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKGkuY2xvc2luZyl7dGhpcy5fcG9wKGcsaSk7aWYoZy5sZW5ndGg9PTApcmV0dXJuIGYuZnJvbVBvaW50cyhrLGkuc3RhcnQpfWVsc2UgZy5wdXNoKGkpfX1lbHNle3ZhciBqPW5ldyBoKGEsYyxkLmNvbHVtbitkLm1hdGNoLmxlbmd0aCksbD17cm93OmMsY29sdW1uOmQuY29sdW1ufTt3aGlsZShpPXRoaXMuX3JlYWRUYWdCYWNrd2FyZChqKSl7aWYoaS5zZWxmQ2xvc2luZyl7aWYoIWcubGVuZ3RoKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGkuZW5kLmNvbHVtbi09MixmLmZyb21Qb2ludHMoaS5zdGFydCxpLmVuZCk7Y29udGludWV9aWYoIWkuY2xvc2luZyl7dGhpcy5fcG9wKGcsaSk7aWYoZy5sZW5ndGg9PTApcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsbCl9ZWxzZSBnLnB1c2goaSl9fX19LmNhbGwoaS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxlPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9OygoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXtyb3c6Yyxjb2x1bW46ZSsxfSxnPWEuJGZpbmRDbG9zaW5nQnJhY2tldChiLGYpO2lmKCFnKXJldHVybjt2YXIgaD1hLmZvbGRXaWRnZXRzW2cucm93XTtyZXR1cm4gaD09bnVsbCYmKGg9dGhpcy5nZXRGb2xkV2lkZ2V0KGEsZy5yb3cpKSxoPT0ic3RhcnQiJiYoZy5yb3ctLSxnLmNvbHVtbj1hLmdldExpbmUoZy5yb3cpLmxlbmd0aCksZC5mcm9tUG9pbnRzKGYsZyl9fSkpLmNhbGwoZS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWEoIi4uL3JhbmdlIikuUmFuZ2Usaj1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxrPWEoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixsPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxtPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaCx0aGlzLiRiZWhhdmlvdXI9bmV3IGssdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGx9O2QuaW5oZXJpdHMobSxlKSxmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ29tbWVudExpbmVzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSEwLGY9L14oXHMqKVwvXC8vO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKWlmKCFmLnRlc3QoYi5nZXRMaW5lKGcpKSl7ZT0hMTticmVha31pZihlKXt2YXIgaD1uZXcgaSgwLDAsMCwwKTtmb3IodmFyIGc9YztnPD1kO2crKyl7dmFyIGo9Yi5nZXRMaW5lKGcpLGs9ai5tYXRjaChmKTtoLnN0YXJ0LnJvdz1nLGguZW5kLnJvdz1nLGguZW5kLmNvbHVtbj1rWzBdLmxlbmd0aCxiLnJlcGxhY2UoaCxrWzFdKX19ZWxzZSBiLmluZGVudFJvd3MoYyxkLCIvLyIpfSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1lLnN0YXRlO2lmKGYubGVuZ3RoJiZmW2YubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDtpZihhPT0ic3RhcnQifHxhPT0icmVnZXhfYWxsb3dlZCIpe3ZhciBoPWIubWF0Y2goL14uKig/OlxiY2FzZVxiLipcOnxbXHtcKFxbXSlccyokLyk7aCYmKGQrPWMpfWVsc2UgaWYoYT09ImRvYy1zdGFydCIpe2lmKGc9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIilyZXR1cm4iIjt2YXIgaD1iLm1hdGNoKC9eXHMqKFwvPylcKi8pO2gmJihoWzFdJiYoZCs9IiAiKSxkKz0iKiAiKX1yZXR1cm4gZH0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBqKFsiYWNlIl0sIndvcmtlci1qYXZhc2NyaXB0LmpzIiwiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCJKYXZhU2NyaXB0V29ya2VyIik7cmV0dXJuIGIuYXR0YWNoVG9Eb2N1bWVudChhLmdldERvY3VtZW50KCkpLGIub24oImpzbGludCIsZnVuY3Rpb24oYil7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxiLmRhdGEubGVuZ3RoO2QrKyl7dmFyIGU9Yi5kYXRhW2RdO2UmJmMucHVzaCh7cm93OmUubGluZS0xLGNvbHVtbjplLmNoYXJhY3Rlci0xLHRleHQ6ZS5yZWFzb24sdHlwZToid2FybmluZyIsbGludDplfSl9YS5zZXRBbm5vdGF0aW9ucyhjKX0pLGIub24oIm5hcmNpc3N1cyIsZnVuY3Rpb24oYil7YS5zZXRBbm5vdGF0aW9ucyhbYi5kYXRhXSl9KSxiLm9uKCJ0ZXJtaW5hdGUiLGZ1bmN0aW9uKCl7YS5jbGVhckFubm90YXRpb25zKCl9KSxifX0uY2FsbChtLnByb3RvdHlwZSksYi5Nb2RlPW19KSxkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvdW5pY29kZSIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvbGFuZyIpLGY9YSgiLi4vdW5pY29kZSIpLGc9YSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0Ii5zcGxpdCgifCIpKSxjPSJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkIixkPWUuYXJyYXlUb01hcCgiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19fIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIuc3BsaXQoInwiKSksaT1lLmFycmF5VG9NYXAoIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIuc3BsaXQoInwiKSksaj1lLmFycmF5VG9NYXAoImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIi5zcGxpdCgifCIpKSxrPSJbIitmLnBhY2thZ2VzLkwrIlxcJF9dWyIrZi5wYWNrYWdlcy5MK2YucGFja2FnZXMuTW4rZi5wYWNrYWdlcy5NYytmLnBhY2thZ2VzLk5kK2YucGFja2FnZXMuUGMrIlxcJF9dKlxcYiI7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSwobmV3IGcpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKlxcXFwkJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiWyddLipcXFxcJCIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6IjBbeFhdWzAtOWEtZkEtRl0rXFxiIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46WyJrZXl3b3JkLmRlZmluaXRpb24iLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSxyZWdleDoiKGZ1bmN0aW9uKShcXHMrKSgiK2srIikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLHJlZ2V4OiIoPzp0cnVlfGZhbHNlKVxcYiJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiIrYysiKVxcYiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjpmdW5jdGlvbihjKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShjKT8idmFyaWFibGUubGFuZ3VhZ2UiOmQuaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuZGVwcmVjYXRlZCI6aC5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZC5kZWZpbml0aW9uIjpiLmhhc093blByb3BlcnR5KGMpPyJrZXl3b3JkIjppLmhhc093blByb3BlcnR5KGMpPyJjb25zdGFudC5sYW5ndWFnZSI6ai5oYXNPd25Qcm9wZXJ0eShjKT8iaW52YWxpZC5pbGxlZ2FsIjpjPT0iZGVidWdnZXIiPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOiJpZGVudGlmaWVyIn0scmVnZXg6a30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlxcP3xcXDp8XFwsfFxcO3xcXC4iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltbKHtdIixuZXh0OiJyZWdleF9hbGxvd2VkIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdKX1dIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFwvPT8iLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJeIyEuKiQifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLHJlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudF9yZWdleF9hbGxvd2VkIn0se3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiokIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiXFwvIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIixuZXh0OiJyZWdleCJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6Ii9cXHcqIixuZXh0OiJzdGFydCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cCIscmVnZXg6IlteXFxcXC9cXFtdKyIsbmV4dDoicmVnZXgiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXFxbIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIsbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6Il0iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIscmVnZXg6IlteXFxcXFxcXV0rIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxjb21tZW50X3JlZ2V4X2FsbG93ZWQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbWVyZ2U6ITAsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxcXN0cmluZzpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OicoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmc6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqPyciLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sdGhpcy5lbWJlZFJ1bGVzKGcsImRvYy0iLFsobmV3IGcpLmdldEVuZFJ1bGUoInN0YXJ0IildKX07ZC5pbmhlcml0cyhpLGgpLGIuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzPWl9KSxkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmF9fSx0aGlzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oYSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlxcKlxcLyIsbmV4dDphfX19LmNhbGwoZi5wcm90b3R5cGUpLGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixmPWZ1bmN0aW9uKGIsZCxlLGYpe3RoaXMuY2hhbmdlTGlzdGVuZXI9dGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO2lmKGMucGFja2FnZWQpe3ZhciBnPXRoaXMuJGd1ZXNzQmFzZVBhdGgoKTt0aGlzLiR3b3JrZXI9bmV3IFdvcmtlcihnK2QpfWVsc2V7dmFyIGg9dGhpcy4kbm9ybWFsaXplUGF0aChhLm5hbWVUb1VybCgiYWNlL3dvcmtlci93b3JrZXIiLG51bGwsIl8iKSk7dGhpcy4kd29ya2VyPW5ldyBXb3JrZXIoaCk7dmFyIGk9e307Zm9yKHZhciBqPTA7ajxiLmxlbmd0aDtqKyspe3ZhciBrPWJbal0sbD10aGlzLiRub3JtYWxpemVQYXRoKGEubmFtZVRvVXJsKGssbnVsbCwiXyIpLnJlcGxhY2UoLy5qcyQvLCIiKSk7aVtrXT1sfX10aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczppLG1vZHVsZTplLGNsYXNzbmFtZTpmfSksdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5jYWxsYmFja3M9e307dmFyIG09dGhpczt0aGlzLiR3b3JrZXIub25lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyB3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGEpLGF9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLnR5cGUpe2Nhc2UibG9nIjp3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGIuZGF0YSk7YnJlYWs7Y2FzZSJldmVudCI6bS5fZW1pdChiLm5hbWUse2RhdGE6Yi5kYXRhfSk7YnJlYWs7Y2FzZSJjYWxsIjp2YXIgYz1tLmNhbGxiYWNrc1tiLmlkXTtjJiYoYyhiLmRhdGEpLGRlbGV0ZSBtLmNhbGxiYWNrc1tiLmlkXSl9fX07KChmdW5jdGlvbigpe2QuaW1wbGVtZW50KHRoaXMsZSksdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoL15bYS16XSs6XC9cL1teXC9dK1wvLywiIiksYT1sb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QrKGEuY2hhckF0KDApPT0iLyI/IiI6bG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywiIikpKyIvIithLnJlcGxhY2UoL15bXC9dKy8sIiIpLGF9LHRoaXMuJGd1ZXNzQmFzZVBhdGg9ZnVuY3Rpb24oKXtpZihhLmFjZUJhc2VVcmwpcmV0dXJuIGEuYWNlQmFzZVVybDt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS1hY2UtYmFzZSIpO2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvXC8qJC8sIi8iKTt2YXIgZj1kLnNyY3x8ZC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFmKWNvbnRpbnVlO3ZhciBnPWYubWF0Y2goL14oPzooLipcLylhY2VcLmpzfCguKlwvKWFjZSgtdW5jb21wcmVzc2VkKT8oLW5vY29uZmxpY3QpP1wuanMpKD86XD98JCkvKTtpZihnKXJldHVybiBnWzFdfHxnWzJdfXJldHVybiIifSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX2VtaXQoInRlcm1pbmF0ZSIse30pLHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLiR3b3JrZXI9bnVsbCx0aGlzLiRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmEsYXJnczpifSl9LHRoaXMuY2FsbD1mdW5jdGlvbihhLGIsYyl7aWYoYyl7dmFyIGQ9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3NbZF09YyxiLnB1c2goZCl9dGhpcy5zZW5kKGEsYil9LHRoaXMuZW1pdD1mdW5jdGlvbihhLGIpe3RyeXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmEsZGF0YTp7ZGF0YTpiLmRhdGF9fSl9Y2F0Y2goYyl7fX0sdGhpcy5hdHRhY2hUb0RvY3VtZW50PWZ1bmN0aW9uKGEpe3RoaXMuJGRvYyYmdGhpcy50ZXJtaW5hdGUoKSx0aGlzLiRkb2M9YSx0aGlzLmNhbGwoInNldFZhbHVlIixbYS5nZXRWYWx1ZSgpXSksYS5vbigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKX0sdGhpcy5jaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbihhKXthLnJhbmdlPXtzdGFydDphLmRhdGEucmFuZ2Uuc3RhcnQsZW5kOmEuZGF0YS5yYW5nZS5lbmR9LHRoaXMuZW1pdCgiY2hhbmdlIixhKX19KSkuY2FsbChmLnByb3RvdHlwZSksYi5Xb3JrZXJDbGllbnQ9Zn0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGY9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxnPWIuRm9sZE1vZGU9ZnVuY3Rpb24oKXt9O2QuaW5oZXJpdHMoZyxmKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPS8oXHt8XFspW15cfVxdXSokfF5ccyooXC9cKikvLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9L15bXlxbXHtdKihcfXxcXSl8Xltcc1wqXSooXCpcLykvLHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyksZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4O2lmKGZbMV0pcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhhLGZbMV0sYyxnKTt2YXIgaD1hLmdldENvbW1lbnRGb2xkUmFuZ2UoYyxnK2ZbMF0ubGVuZ3RoKTtyZXR1cm4gaC5lbmQuY29sdW1uLT0yLGh9aWYoYiE9PSJtYXJrYmVnaW5lbmQiKXJldHVybjt2YXIgZj1kLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpO2lmKGYpe3ZhciBnPWYuaW5kZXgrZlswXS5sZW5ndGg7aWYoZlsyXSl7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZyk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofXZhciBpPXtyb3c6Yyxjb2x1bW46Z30saj1hLiRmaW5kT3BlbmluZ0JyYWNrZXQoZlsxXSxpKTtpZighailyZXR1cm47cmV0dXJuIGouY29sdW1uKyssaS5jb2x1bW4tLSxlLmZyb21Qb2ludHMoaixpKX19fS5jYWxsKGcucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL21vZGUvc3ZnX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUveG1sX3V0aWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsZj1hKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlcyxnPWEoIi4veG1sX3V0aWwiKSxoPWZ1bmN0aW9uKCl7Zi5jYWxsKHRoaXMpLHRoaXMuJHJ1bGVzLnN0YXJ0LnNwbGljZSgzLDAse3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjwoPz1zKnNjcmlwdCkiLG5leHQ6InNjcmlwdCJ9KSxnLnRhZyh0aGlzLiRydWxlcywic2NyaXB0IiwianMtc3RhcnQiKSx0aGlzLmVtYmVkUnVsZXMoZSwianMtIixbe3Rva2VuOiJjb21tZW50IixyZWdleDoiXFwvXFwvLiooPz08XFwvc2NyaXB0PikiLG5leHQ6InRhZyJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvKD89c2NyaXB0KSIsbmV4dDoidGFnIn1dKX07ZC5pbmhlcml0cyhoLGYpLGIuU3ZnSGlnaGxpZ2h0UnVsZXM9aH0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZj1iLkZvbGRNb2RlPWZ1bmN0aW9uKGEsYil7dGhpcy5kZWZhdWx0TW9kZT1hLHRoaXMuc3ViTW9kZXM9Yn07ZC5pbmhlcml0cyhmLGUpLGZ1bmN0aW9uKCl7dGhpcy4kZ2V0TW9kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gdGhpcy5zdWJNb2RlcylpZihhLmluZGV4T2YoYik9PT0wKXJldHVybiB0aGlzLnN1Yk1vZGVzW2JdO3JldHVybiBudWxsfSx0aGlzLiR0cnlNb2RlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJGdldE1vZGUoYSk7cmV0dXJuIGU/ZS5nZXRGb2xkV2lkZ2V0KGIsYyxkKToiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kdHJ5TW9kZShhLmdldFN0YXRlKGMtMSksYSxiLGMpfHx0aGlzLiR0cnlNb2RlKGEuZ2V0U3RhdGUoYyksYSxiLGMpfHx0aGlzLmRlZmF1bHRNb2RlLmdldEZvbGRXaWRnZXQoYSxiLGMpfSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy4kZ2V0TW9kZShhLmdldFN0YXRlKGMtMSkpO2lmKCFkfHwhZC5nZXRGb2xkV2lkZ2V0KGEsYixjKSlkPXRoaXMuJGdldE1vZGUoYS5nZXRTdGF0ZShjKSk7aWYoIWR8fCFkLmdldEZvbGRXaWRnZXQoYSxiLGMpKWQ9dGhpcy5kZWZhdWx0TW9kZTtyZXR1cm4gZC5nZXRGb2xkV2lkZ2V0UmFuZ2UoYSxiLGMpfX0uY2FsbChmLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-textile-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUvdGV4dGlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS90ZXh0aWxlX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3RleHRpbGVfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dGlsZUhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpLHRoaXMuJG91dGRlbnQ9bmV3IGh9O2QuaW5oZXJpdHMoaSxlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPT0iaW50YWciP2M6IiJ9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfX0uY2FsbChpLnByb3RvdHlwZSksYi5Nb2RlPWl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS90ZXh0aWxlX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoKC9eaFxkJC8pPyJtYXJrdXAuaGVhZGluZy4iK2EuY2hhckF0KDEpOiJtYXJrdXAuaGVhZGluZyJ9LHJlZ2V4OiJoMXxoMnxoM3xoNHxoNXxoNnxicXxwfGJjfHByZSIsbmV4dDoiYmxvY2t0YWcifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJbXFwqXSt8WyNdKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6Ii4rIn1dLGJsb2NrdGFnOlt7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJcXC4gIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IlxcKCIsbmV4dDoiYmxvY2t0YWdwcm9wZXJ0aWVzIn1dLGJsb2NrdGFncHJvcGVydGllczpbe3Rva2VuOiJrZXl3b3JkIixyZWdleDoiXFwpIixuZXh0OiJibG9ja3RhZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiW2EtekEtWjAtOVxcLV9dKyJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6IiMifV19fTtkLmluaGVyaXRzKGYsZSksYi5UZXh0aWxlSGlnaGxpZ2h0UnVsZXM9Zn0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-textile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS90ZXh0aWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3RleHRpbGVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vdGV4dGlsZV9oaWdobGlnaHRfcnVsZXMiKS5UZXh0aWxlSGlnaGxpZ2h0UnVsZXMsaD1hKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxpPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kb3V0ZGVudD1uZXcgaH07ZC5pbmhlcml0cyhpLGUpLGZ1bmN0aW9uKCl7dGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9PSJpbnRhZyI/YzoiIn0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChiLGMpfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGIsYyl9fS5jYWxsKGkucHJvdG90eXBlKSxiLk1vZGU9aX0pLGRlZmluZSgiYWNlL21vZGUvdGV4dGlsZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGY9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjpmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaCgvXmhcZCQvKT8ibWFya3VwLmhlYWRpbmcuIithLmNoYXJBdCgxKToibWFya3VwLmhlYWRpbmcifSxyZWdleDoiaDF8aDJ8aDN8aDR8aDV8aDZ8YnF8cHxiY3xwcmUiLG5leHQ6ImJsb2NrdGFnIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiW1xcKl0rfFsjXSsifSx7dG9rZW46InRleHQiLHJlZ2V4OiIuKyJ9XSxibG9ja3RhZzpbe3Rva2VuOiJrZXl3b3JkIixyZWdleDoiXFwuICIsbmV4dDoic3RhcnQifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiJcXCgiLG5leHQ6ImJsb2NrdGFncHJvcGVydGllcyJ9XSxibG9ja3RhZ3Byb3BlcnRpZXM6W3t0b2tlbjoia2V5d29yZCIscmVnZXg6IlxcKSIsbmV4dDoiYmxvY2t0YWcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlthLXpBLVowLTlcXC1fXSsifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjIn1dfX07ZC5pbmhlcml0cyhmLGUpLGIuVGV4dGlsZUhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL3JhbmdlIikuUmFuZ2UsZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuL15ccyskLy50ZXN0KGEpPy9eXHMqXH0vLnRlc3QoYik6ITF9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldExpbmUoYiksZT1jLm1hdGNoKC9eKFxzKlx9KS8pO2lmKCFlKXJldHVybiAwO3ZhciBmPWVbMV0ubGVuZ3RoLGc9YS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6Yixjb2x1bW46Zn0pO2lmKCFnfHxnLnJvdz09YilyZXR1cm4gMDt2YXIgaD10aGlzLiRnZXRJbmRlbnQoYS5nZXRMaW5lKGcucm93KSk7YS5yZXBsYWNlKG5ldyBkKGIsMCxiLGYtMSksaCl9LHRoaXMuJGdldEluZGVudD1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKC9eKFxzKykvKTtyZXR1cm4gYj9iWzFdOiIifX0pKS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-xml-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL21vZGUveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy94bWwiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsZz1hKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlcyxoPWEoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cixpPWEoIi4vZm9sZGluZy94bWwiKS5Gb2xkTW9kZSxqPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSksdGhpcy4kYmVoYXZpb3VyPW5ldyBoLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBpfTtkLmluaGVyaXRzKGosZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGIpfX0uY2FsbChqLnByb3RvdHlwZSksYi5Nb2RlPWp9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS94bWxfdXRpbCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3htbF91dGlsIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJtZXRhLnRhZyIscmVnZXg6IjxcXC8/IixuZXh0OiJ0YWcifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6Iig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZS50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0Iil9O2QuaW5oZXJpdHMoZyxmKSxiLlhtbEhpZ2hsaWdodFJ1bGVzPWd9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS94bWxfdXRpbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEpe3JldHVyblt7dG9rZW46InN0cmluZyIscmVnZXg6JyIuKj8iJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKicsbmV4dDphKyItcXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKj8nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKiIsbmV4dDphKyItcXN0cmluZyJ9XX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLio/IithLG5leHQ6Yn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2xhbmciKSxlPWQuYXJyYXlUb01hcCgiYnV0dG9ufGZvcm18aW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhIi5zcGxpdCgifCIpKSxmPWQuYXJyYXlUb01hcCgidGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dHIiLnNwbGl0KCJ8IikpO2IudGFnPWZ1bmN0aW9uKGEsYixjKXthW2JdPVt7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09ImEiPyJtZXRhLnRhZy5hbmNob3IiOmE9PT0iaW1nIj8ibWV0YS50YWcuaW1hZ2UiOmE9PT0ic2NyaXB0Ij8ibWV0YS50YWcuc2NyaXB0IjphPT09InN0eWxlIj8ibWV0YS50YWcuc3R5bGUiOmUuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcuZm9ybSI6Zi5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy50YWJsZSI6Im1ldGEudGFnIn0sbWVyZ2U6ITAscmVnZXg6IlstX2EtekEtWjAtOTohXSsiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OmIrImVtYmVkLWF0dHJpYnV0ZS1saXN0In1dLGFbYisiLXFzdHJpbmciXT1oKCInIixiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiLXFxc3RyaW5nIl09aCgnIicsYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiKSxhW2IrImVtYmVkLWF0dHJpYnV0ZS1saXN0Il09W3t0b2tlbjoibWV0YS50YWciLG1lcmdlOiEwLHJlZ2V4OiIvPz4iLG5leHQ6Y30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiPSJ9LHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLmNvbmNhdChnKGIpKX19KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1hKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixnPWZ1bmN0aW9uKCl7dGhpcy5pbmhlcml0KGYsWyJzdHJpbmdfZHF1b3RlcyJdKSx0aGlzLmFkZCgiYnJhY2tldHMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IjwiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj8hMTp7dGV4dDoiPD4iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09Ij4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSI+IilyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaz1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisyKTtpZihrPT0iPC8iKXt2YXIgbD10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpK2QuZ2V0VGFiU3RyaW5nKCksbT10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbCsiXG4iK20sc2VsZWN0aW9uOlsxLGwubGVuZ3RoLDEsbC5sZW5ndGhdfX19fSl9O2QuaW5oZXJpdHMoZyxlKSxiLlhtbEJlaGF2aW91cj1nfSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIicpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtpZihnIT09IiIpcmV0dXJue3RleHQ6JyInK2crJyInLHNlbGVjdGlvbjohMX07dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbi0xLGguY29sdW1uKTtpZihqPT0iXFwiKXJldHVybiBudWxsO3ZhciBrPWQuZ2V0VG9rZW5zKGYuc3RhcnQucm93LGYuc3RhcnQucm93KVswXS50b2tlbnMsbD0wLG0sbj0tMTtmb3IodmFyIG89MDtvPGsubGVuZ3RoO28rKyl7bT1rW29dLG0udHlwZT09InN0cmluZyI/bj0tMTpuPDAmJihuPW0udmFsdWUuaW5kZXhPZignIicpKTtpZihtLnZhbHVlLmxlbmd0aCtsPmYuc3RhcnQuY29sdW1uKWJyZWFrO2wrPWtbb10udmFsdWUubGVuZ3RofWlmKCFtfHxuPDAmJm0udHlwZSE9PSJjb21tZW50IiYmKG0udHlwZSE9PSJzdHJpbmcifHxmLnN0YXJ0LmNvbHVtbiE9PW0udmFsdWUubGVuZ3RoK2wtMSYmbS52YWx1ZS5sYXN0SW5kZXhPZignIicpPT09bS52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6JyIiJyxzZWxlY3Rpb246WzEsMV19O2lmKG0mJm0udHlwZT09PSJzdHJpbmciKXt2YXIgcD1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihwPT0nIicpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSciJyl7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSciJylyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KX07ZC5pbmhlcml0cyhmLGUpLGIuQ3N0eWxlQmVoYXZpb3VyPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL2xpYi9sYW5nIiksZj1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGc9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxoPWEoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixpPWIuRm9sZE1vZGU9ZnVuY3Rpb24oYSl7Zy5jYWxsKHRoaXMpLHRoaXMudm9pZEVsZW1lbnRzPWF8fHt9fTtkLmluaGVyaXRzKGksZyksZnVuY3Rpb24oKXt0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7cmV0dXJuIGQuY2xvc2luZz9iPT0ibWFya2JlZ2luZW5kIj8iZW5kIjoiIjohZC50YWdOYW1lfHx0aGlzLnZvaWRFbGVtZW50c1tkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0/IiI6ZC5zZWxmQ2xvc2luZz8iIjpkLnZhbHVlLmluZGV4T2YoIi8iK2QudGFnTmFtZSkhPT0tMT8iIjoic3RhcnQifSx0aGlzLl9nZXRGaXJzdFRhZ0luTGluZT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0VG9rZW5zKGIsYilbMF0udG9rZW5zLGQ9IiI7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBnPWNbZl07Zy50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wP2QrPWcudmFsdWU6ZCs9ZS5zdHJpbmdSZXBlYXQoIiAiLGcudmFsdWUubGVuZ3RoKX1yZXR1cm4gdGhpcy5fcGFyc2VUYWcoZCl9LHRoaXMudGFnUmU9L14oXHMqKSg8PyhcLz8pKFstX2EtekEtWjAtOTohXSopXHMqKFwvPyk+PykvLHRoaXMuX3BhcnNlVGFnPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudGFnUmUuZXhlYyhhKSxjPXRoaXMudGFnUmUubGFzdEluZGV4fHwwO3JldHVybiB0aGlzLnRhZ1JlLmxhc3RJbmRleD0wLHt2YWx1ZTphLG1hdGNoOmI/YlsyXToiIixjbG9zaW5nOmI/ISFiWzNdOiExLHNlbGZDbG9zaW5nOmI/ISFiWzVdfHxiWzJdPT0iLz4iOiExLHRhZ05hbWU6Yj9iWzRdOiIiLGNvbHVtbjpiWzFdP2MrYlsxXS5sZW5ndGg6Y319LHRoaXMuX3JlYWRUYWdGb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2lmKCFkKXZhciBkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07Yys9Yi52YWx1ZTtpZihjLmluZGV4T2YoIj4iKSE9PS0xKXt2YXIgZT10aGlzLl9wYXJzZVRhZyhjKTtyZXR1cm4gZS5zdGFydD1kLGUuZW5kPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0sYS5zdGVwRm9yd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwRm9yd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcmVhZFRhZ0JhY2t3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2R8fChkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0pLGM9Yi52YWx1ZStjO2lmKGMuaW5kZXhPZigiPCIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLmVuZD1kLGUuc3RhcnQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfSxhLnN0ZXBCYWNrd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwQmFja3dhcmQoKSk7cmV0dXJuIG51bGx9LHRoaXMuX3BvcD1mdW5jdGlvbihhLGIpe3doaWxlKGEubGVuZ3RoKXt2YXIgYz1hW2EubGVuZ3RoLTFdO2lmKCFifHxjLnRhZ05hbWU9PWIudGFnTmFtZSlyZXR1cm4gYS5wb3AoKTtpZih0aGlzLnZvaWRFbGVtZW50c1tiLnRhZ05hbWVdKXJldHVybjtpZih0aGlzLnZvaWRFbGVtZW50c1tjLnRhZ05hbWVdKXthLnBvcCgpO2NvbnRpbnVlfXJldHVybiBudWxsfX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7aWYoIWQubWF0Y2gpcmV0dXJuIG51bGw7dmFyIGU9ZC5jbG9zaW5nfHxkLnNlbGZDbG9zaW5nLGc9W10saTtpZighZSl7dmFyIGo9bmV3IGgoYSxjLGQuY29sdW1uKSxrPXtyb3c6Yyxjb2x1bW46ZC5jb2x1bW4rZC50YWdOYW1lLmxlbmd0aCsyfTt3aGlsZShpPXRoaXMuX3JlYWRUYWdGb3J3YXJkKGopKXtpZihpLnNlbGZDbG9zaW5nKXtpZighZy5sZW5ndGgpcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsaS5lbmQuY29sdW1uLT0yLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGkuZW5kKTtjb250aW51ZX1pZihpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBmLmZyb21Qb2ludHMoayxpLnN0YXJ0KX1lbHNlIGcucHVzaChpKX19ZWxzZXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4rZC5tYXRjaC5sZW5ndGgpLGw9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbn07d2hpbGUoaT10aGlzLl9yZWFkVGFnQmFja3dhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKCFpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGwpfWVsc2UgZy5wdXNoKGkpfX19fS5jYWxsKGkucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGU9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe307KChmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW51bGwsdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj1udWxsLHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpO3JldHVybiB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGQpPyJzdGFydCI6Yj09Im1hcmtiZWdpbmVuZCImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXImJnRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChkKT8iZW5kIjoiIn0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsfSx0aGlzLmluZGVudGF0aW9uQmxvY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPS9eXHMqLyxmPWIsZz1iLGg9YS5nZXRMaW5lKGIpLGk9Y3x8aC5sZW5ndGgsaj1oLm1hdGNoKGUpWzBdLmxlbmd0aCxrPWEuZ2V0TGVuZ3RoKCk7d2hpbGUoKytiPGspe2g9YS5nZXRMaW5lKGIpO3ZhciBsPWgubWF0Y2goZSlbMF0ubGVuZ3RoO2lmKGw9PWgubGVuZ3RoKWNvbnRpbnVlO2lmKGw8PWopYnJlYWs7Zz1ifWlmKGc+Zil7dmFyIG09YS5nZXRMaW5lKGcpLmxlbmd0aDtyZXR1cm4gbmV3IGQoZixpLGcsbSl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9e3JvdzpjLGNvbHVtbjplKzF9LGc9YS4kZmluZENsb3NpbmdCcmFja2V0KGIsZik7aWYoIWcpcmV0dXJuO3ZhciBoPWEuZm9sZFdpZGdldHNbZy5yb3ddO3JldHVybiBoPT1udWxsJiYoaD10aGlzLmdldEZvbGRXaWRnZXQoYSxnLnJvdykpLGg9PSJzdGFydCImJihnLnJvdy0tLGcuY29sdW1uPWEuZ2V0TGluZShnLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoZixnKX19KSkuY2FsbChlLnByb3RvdHlwZSl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/mode-xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL3htbCJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4veG1sX2hpZ2hsaWdodF9ydWxlcyIpLlhtbEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi9iZWhhdmlvdXIveG1sIikuWG1sQmVoYXZpb3VyLGk9YSgiLi9mb2xkaW5nL3htbCIpLkZvbGRNb2RlLGo9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRiZWhhdmlvdXI9bmV3IGgsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGl9O2QuaW5oZXJpdHMoaixlKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRnZXRJbmRlbnQoYil9fS5jYWxsKGoucHJvdG90eXBlKSxiLk1vZGU9an0pLGRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUveG1sX3V0aWwiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi94bWxfdXRpbCIpLGY9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46InRleHQiLHJlZ2V4OiI8XFwhXFxbQ0RBVEFcXFsiLG5leHQ6ImNkYXRhIn0se3Rva2VuOiJ4bWxfcGUiLHJlZ2V4OiI8XFw/Lio/XFw/PiJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IjxcXCEtLSIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvPyIsbmV4dDoidGFnIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IltePF0rIn1dLGNkYXRhOlt7dG9rZW46InRleHQiLHJlZ2V4OiJcXF1cXF0+IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46InRleHQiLHJlZ2V4OiIoPzpbXlxcXV18XFxdKD8hXFxdPikpKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj8tLT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV19LGUudGFnKHRoaXMuJHJ1bGVzLCJ0YWciLCJzdGFydCIpfTtkLmluaGVyaXRzKGcsZiksYi5YbWxIaWdobGlnaHRSdWxlcz1nfSksZGVmaW5lKCJhY2UvbW9kZS94bWxfdXRpbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEpe3JldHVyblt7dG9rZW46InN0cmluZyIscmVnZXg6JyIuKj8iJ30se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OidbIl0uKicsbmV4dDphKyItcXFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6IicuKj8nIn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiJbJ10uKiIsbmV4dDphKyItcXN0cmluZyJ9XX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLio/IithLG5leHQ6Yn0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0idXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vbGliL2xhbmciKSxlPWQuYXJyYXlUb01hcCgiYnV0dG9ufGZvcm18aW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhIi5zcGxpdCgifCIpKSxmPWQuYXJyYXlUb01hcCgidGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dHIiLnNwbGl0KCJ8IikpO2IudGFnPWZ1bmN0aW9uKGEsYixjKXthW2JdPVt7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09ImEiPyJtZXRhLnRhZy5hbmNob3IiOmE9PT0iaW1nIj8ibWV0YS50YWcuaW1hZ2UiOmE9PT0ic2NyaXB0Ij8ibWV0YS50YWcuc2NyaXB0IjphPT09InN0eWxlIj8ibWV0YS50YWcuc3R5bGUiOmUuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcuZm9ybSI6Zi5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpPyJtZXRhLnRhZy50YWJsZSI6Im1ldGEudGFnIn0sbWVyZ2U6ITAscmVnZXg6IlstX2EtekEtWjAtOTohXSsiLG5leHQ6YisiZW1iZWQtYXR0cmlidXRlLWxpc3QifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OmIrImVtYmVkLWF0dHJpYnV0ZS1saXN0In1dLGFbYisiLXFzdHJpbmciXT1oKCInIixiKyJlbWJlZC1hdHRyaWJ1dGUtbGlzdCIpLGFbYisiLXFxc3RyaW5nIl09aCgnIicsYisiZW1iZWQtYXR0cmlidXRlLWxpc3QiKSxhW2IrImVtYmVkLWF0dHJpYnV0ZS1saXN0Il09W3t0b2tlbjoibWV0YS50YWciLG1lcmdlOiEwLHJlZ2V4OiIvPz4iLG5leHQ6Y30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiPSJ9LHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIifSx7dG9rZW46InRleHQiLHJlZ2V4OiJcXHMrIn1dLmNvbmNhdChnKGIpKX19KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixmPWEoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGc9ZnVuY3Rpb24oKXt0aGlzLmluaGVyaXQoZixbInN0cmluZ19kcXVvdGVzIl0pLHRoaXMuYWRkKCJicmFja2V0cyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iPCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiPyExOnt0ZXh0OiI8PiIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iPiIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09Ij4iKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxrPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzIpO2lmKGs9PSI8LyIpe3ZhciBsPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGgucm93KSkrZC5nZXRUYWJTdHJpbmcoKSxtPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGgucm93KSk7cmV0dXJue3RleHQ6IlxuIitsKyJcbiIrbSxzZWxlY3Rpb246WzEsbC5sZW5ndGgsMSxsLmxlbmd0aF19fX19KX07ZC5pbmhlcml0cyhnLGUpLGIuWG1sQmVoYXZpb3VyPWd9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGY9ZnVuY3Rpb24oKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSJ7Iil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6InsiK2crIn0iLHNlbGVjdGlvbjohMX06e3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSJ9Iil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0ifSIpe3ZhciBsPWQuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93Omgucm93LGNvbHVtbjpoLmNvbHVtbisxfSk7aWYoIWwpcmV0dXJuIG51bGw7dmFyIG09dGhpcy5nZXROZXh0TGluZUluZGVudChhLGkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSksZC5nZXRUYWJTdHJpbmcoKSksbj10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShsLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbSsiXG4iK24sc2VsZWN0aW9uOlsxLG0ubGVuZ3RoLDEsbS5sZW5ndGhdfX19fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0ieyIpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5lbmQuY29sdW1uLGUuZW5kLmNvbHVtbisxKTtpZihoPT0ifSIpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSksdGhpcy5hZGQoInBhcmVucyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0iKCIpe3ZhciBmPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxnPWQuZG9jLmdldFRleHRSYW5nZShmKTtyZXR1cm4gZyE9PSIiP3t0ZXh0OiIoIitnKyIpIixzZWxlY3Rpb246ITF9Ont0ZXh0OiIoKSIsc2VsZWN0aW9uOlsxLDFdfX1pZihlPT0iKSIpe3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYoaj09IikiKXt2YXIgaz1kLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46aC5jb2x1bW4rMSxyb3c6aC5yb3d9KTtpZihrIT09bnVsbClyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSIoIil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbisxLGUuc3RhcnQuY29sdW1uKzIpO2lmKGg9PSIpIilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09JyInKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7aWYoZyE9PSIiKXJldHVybnt0ZXh0OiciJytnKyciJyxzZWxlY3Rpb246ITF9O3ZhciBoPWMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPWQuZG9jLmdldExpbmUoaC5yb3cpLGo9aS5zdWJzdHJpbmcoaC5jb2x1bW4tMSxoLmNvbHVtbik7aWYoaj09IlxcIilyZXR1cm4gbnVsbDt2YXIgaz1kLmdldFRva2VucyhmLnN0YXJ0LnJvdyxmLnN0YXJ0LnJvdylbMF0udG9rZW5zLGw9MCxtLG49LTE7Zm9yKHZhciBvPTA7bzxrLmxlbmd0aDtvKyspe209a1tvXSxtLnR5cGU9PSJzdHJpbmciP249LTE6bjwwJiYobj1tLnZhbHVlLmluZGV4T2YoJyInKSk7aWYobS52YWx1ZS5sZW5ndGgrbD5mLnN0YXJ0LmNvbHVtbilicmVhaztsKz1rW29dLnZhbHVlLmxlbmd0aH1pZighbXx8bjwwJiZtLnR5cGUhPT0iY29tbWVudCImJihtLnR5cGUhPT0ic3RyaW5nInx8Zi5zdGFydC5jb2x1bW4hPT1tLnZhbHVlLmxlbmd0aCtsLTEmJm0udmFsdWUubGFzdEluZGV4T2YoJyInKT09PW0udmFsdWUubGVuZ3RoLTEpKXJldHVybnt0ZXh0OiciIicsc2VsZWN0aW9uOlsxLDFdfTtpZihtJiZtLnR5cGU9PT0ic3RyaW5nIil7dmFyIHA9aS5zdWJzdHJpbmcoaC5jb2x1bW4saC5jb2x1bW4rMSk7aWYocD09JyInKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWQuZG9jLmdldFRleHRSYW5nZShlKTtpZighZS5pc011bHRpTGluZSgpJiZmPT0nIicpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4uLy4uL2xpYi9sYW5nIiksZj1hKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGc9YSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxoPWEoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixpPWIuRm9sZE1vZGU9ZnVuY3Rpb24oYSl7Zy5jYWxsKHRoaXMpLHRoaXMudm9pZEVsZW1lbnRzPWF8fHt9fTtkLmluaGVyaXRzKGksZyksZnVuY3Rpb24oKXt0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7cmV0dXJuIGQuY2xvc2luZz9iPT0ibWFya2JlZ2luZW5kIj8iZW5kIjoiIjohZC50YWdOYW1lfHx0aGlzLnZvaWRFbGVtZW50c1tkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0/IiI6ZC5zZWxmQ2xvc2luZz8iIjpkLnZhbHVlLmluZGV4T2YoIi8iK2QudGFnTmFtZSkhPT0tMT8iIjoic3RhcnQifSx0aGlzLl9nZXRGaXJzdFRhZ0luTGluZT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0VG9rZW5zKGIsYilbMF0udG9rZW5zLGQ9IiI7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBnPWNbZl07Zy50eXBlLmluZGV4T2YoIm1ldGEudGFnIik9PT0wP2QrPWcudmFsdWU6ZCs9ZS5zdHJpbmdSZXBlYXQoIiAiLGcudmFsdWUubGVuZ3RoKX1yZXR1cm4gdGhpcy5fcGFyc2VUYWcoZCl9LHRoaXMudGFnUmU9L14oXHMqKSg8PyhcLz8pKFstX2EtekEtWjAtOTohXSopXHMqKFwvPyk+PykvLHRoaXMuX3BhcnNlVGFnPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudGFnUmUuZXhlYyhhKSxjPXRoaXMudGFnUmUubGFzdEluZGV4fHwwO3JldHVybiB0aGlzLnRhZ1JlLmxhc3RJbmRleD0wLHt2YWx1ZTphLG1hdGNoOmI/YlsyXToiIixjbG9zaW5nOmI/ISFiWzNdOiExLHNlbGZDbG9zaW5nOmI/ISFiWzVdfHxiWzJdPT0iLz4iOiExLHRhZ05hbWU6Yj9iWzRdOiIiLGNvbHVtbjpiWzFdP2MrYlsxXS5sZW5ndGg6Y319LHRoaXMuX3JlYWRUYWdGb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2lmKCFkKXZhciBkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07Yys9Yi52YWx1ZTtpZihjLmluZGV4T2YoIj4iKSE9PS0xKXt2YXIgZT10aGlzLl9wYXJzZVRhZyhjKTtyZXR1cm4gZS5zdGFydD1kLGUuZW5kPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0sYS5zdGVwRm9yd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwRm9yd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcmVhZFRhZ0JhY2t3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9IiIsZDtkbyBpZihiLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTApe2R8fChkPXtyb3c6YS5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStiLnZhbHVlLmxlbmd0aH0pLGM9Yi52YWx1ZStjO2lmKGMuaW5kZXhPZigiPCIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLmVuZD1kLGUuc3RhcnQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfSxhLnN0ZXBCYWNrd2FyZCgpLGV9fXdoaWxlKGI9YS5zdGVwQmFja3dhcmQoKSk7cmV0dXJuIG51bGx9LHRoaXMuX3BvcD1mdW5jdGlvbihhLGIpe3doaWxlKGEubGVuZ3RoKXt2YXIgYz1hW2EubGVuZ3RoLTFdO2lmKCFifHxjLnRhZ05hbWU9PWIudGFnTmFtZSlyZXR1cm4gYS5wb3AoKTtpZih0aGlzLnZvaWRFbGVtZW50c1tiLnRhZ05hbWVdKXJldHVybjtpZih0aGlzLnZvaWRFbGVtZW50c1tjLnRhZ05hbWVdKXthLnBvcCgpO2NvbnRpbnVlfXJldHVybiBudWxsfX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGEsYyk7aWYoIWQubWF0Y2gpcmV0dXJuIG51bGw7dmFyIGU9ZC5jbG9zaW5nfHxkLnNlbGZDbG9zaW5nLGc9W10saTtpZighZSl7dmFyIGo9bmV3IGgoYSxjLGQuY29sdW1uKSxrPXtyb3c6Yyxjb2x1bW46ZC5jb2x1bW4rZC50YWdOYW1lLmxlbmd0aCsyfTt3aGlsZShpPXRoaXMuX3JlYWRUYWdGb3J3YXJkKGopKXtpZihpLnNlbGZDbG9zaW5nKXtpZighZy5sZW5ndGgpcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsaS5lbmQuY29sdW1uLT0yLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGkuZW5kKTtjb250aW51ZX1pZihpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBmLmZyb21Qb2ludHMoayxpLnN0YXJ0KX1lbHNlIGcucHVzaChpKX19ZWxzZXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4rZC5tYXRjaC5sZW5ndGgpLGw9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbn07d2hpbGUoaT10aGlzLl9yZWFkVGFnQmFja3dhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKCFpLmNsb3Npbmcpe3RoaXMuX3BvcChnLGkpO2lmKGcubGVuZ3RoPT0wKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGYuZnJvbVBvaW50cyhpLnN0YXJ0LGwpfWVsc2UgZy5wdXNoKGkpfX19fS5jYWxsKGkucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoKGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldExpbmUoYyk7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QoZCk/InN0YXJ0IjpiPT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGQpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGU9L15ccyovLGY9YixnPWIsaD1hLmdldExpbmUoYiksaT1jfHxoLmxlbmd0aCxqPWgubWF0Y2goZSlbMF0ubGVuZ3RoLGs9YS5nZXRMZW5ndGgoKTt3aGlsZSgrK2I8ayl7aD1hLmdldExpbmUoYik7dmFyIGw9aC5tYXRjaChlKVswXS5sZW5ndGg7aWYobD09aC5sZW5ndGgpY29udGludWU7aWYobDw9ailicmVhaztnPWJ9aWYoZz5mKXt2YXIgbT1hLmdldExpbmUoZykubGVuZ3RoO3JldHVybiBuZXcgZChmLGksZyxtKX19LHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jaz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj17cm93OmMsY29sdW1uOmUrMX0sZz1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixmKTtpZighZylyZXR1cm47dmFyIGg9YS5mb2xkV2lkZ2V0c1tnLnJvd107cmV0dXJuIGg9PW51bGwmJihoPXRoaXMuZ2V0Rm9sZFdpZGdldChhLGcucm93KSksaD09InN0YXJ0IiYmKGcucm93LS0sZy5jb2x1bW49YS5nZXRMaW5lKGcucm93KS5sZW5ndGgpLGQuZnJvbVBvaW50cyhmLGcpfX0pKS5jYWxsKGUucHJvdG90eXBlKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-chrome-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2Nocm9tZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmNzc0NsYXNzPSJhY2UtY2hyb21lIixiLmNzc1RleHQ9Ii5hY2UtY2hyb21lIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1jaHJvbWUgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtY2hyb21lIC5hY2VfZ3V0dGVyIHsgIHdpZHRoOiA1MHB4OyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzOyAgb3ZlcmZsb3cgOiBoaWRkZW47fS5hY2UtY2hyb21lIC5hY2VfZ3V0dGVyLWxheWVyIHsgIHdpZHRoOiAxMDAlOyAgdGV4dC1hbGlnbjogcmlnaHQ7fS5hY2UtY2hyb21lIC5hY2VfZ3V0dGVyLWxheWVyIC5hY2VfZ3V0dGVyLWNlbGwgeyAgcGFkZGluZy1yaWdodDogNnB4O30uYWNlLWNocm9tZSAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1jaHJvbWUgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDt9LmFjZS1jaHJvbWUgLmFjZV9jdXJzb3IgeyAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazt9LmFjZS1jaHJvbWUgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30gICAgICAgIC5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiBibHVlO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7ICBjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiByZ2IoODgsIDkyLCAyNDYpO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7ICBjb2xvcjogcmdiKDYsIDE1MCwgMTQpO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9pbnZhbGlkIHsgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNTMsIDAsIDApOyAgY29sb3I6IHdoaXRlO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9mb2xkIHt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IHJnYig2MCwgNzYsIDExNCk7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsLmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3MgeyAgY29sb3I6IHJnYigxMDksIDEyMSwgMjIyKTt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IHJnYigxMDQsIDExOCwgMTM1KTt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiAjMTkxOWE2O30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9jb21tZW50IHsgIGNvbG9yOiAjMjM2ZTI0O30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9jb21tZW50LmFjZV9kb2MgeyAgY29sb3I6ICMyMzZlMjQ7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHsgIGNvbG9yOiAjMjM2ZTI0O30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjogcmdiKDAsIDAsIDIwNSk7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiByZ2IoNDksIDEzMiwgMTQ5KTt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2VfeG1sX3BlIHsgIGNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTt9LmFjZS1jaHJvbWUgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiAjMDAwMEEyO30uYWNlLWNocm9tZSAuYWNlX21hcmt1cC5hY2VfbWFya3VwaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LmFjZS1jaHJvbWUgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6IHJnYigxMiwgNywgMjU1KTt9LmFjZS1jaHJvbWUgLmFjZV9tYXJrdXAuYWNlX2xpc3QgeyAgY29sb3I6cmdiKDE4NSwgNiwgMTQ0KTt9LmFjZS1jaHJvbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO30uYWNlLWNocm9tZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTt9LmFjZS1jaHJvbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGFjayB7ICBiYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7fS5hY2UtY2hyb21lIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7fS5hY2UtY2hyb21lIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTt9LmFjZS1jaHJvbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTt9LmFjZS1jaHJvbWUgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6IHJnYigxNDcsIDE1LCAxMjgpO30uYWNlLWNocm9tZSAuYWNlX3N0cmluZy5hY2VfcmVnZXggeyAgY29sb3I6IHJnYigyNTUsIDAsIDApfS5hY2UtY2hyb21lIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWV7ICBjb2xvcjogIzk5NDQwOTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-chrome.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY2hyb21lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuY3NzQ2xhc3M9ImFjZS1jaHJvbWUiLGIuY3NzVGV4dD0iLmFjZS1jaHJvbWUgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLWNocm9tZSAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1jaHJvbWUgLmFjZV9ndXR0ZXIgeyAgd2lkdGg6IDUwcHg7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7ICBvdmVyZmxvdyA6IGhpZGRlbjt9LmFjZS1jaHJvbWUgLmFjZV9ndXR0ZXItbGF5ZXIgeyAgd2lkdGg6IDEwMCU7ICB0ZXh0LWFsaWduOiByaWdodDt9LmFjZS1jaHJvbWUgLmFjZV9ndXR0ZXItbGF5ZXIgLmFjZV9ndXR0ZXItY2VsbCB7ICBwYWRkaW5nLXJpZ2h0OiA2cHg7fS5hY2UtY2hyb21lIC5hY2VfcHJpbnRfbWFyZ2luIHsgIHdpZHRoOiAxcHg7ICBiYWNrZ3JvdW5kOiAjZThlOGU4O30uYWNlLWNocm9tZSAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0O30uYWNlLWNocm9tZSAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsYWNrO30uYWNlLWNocm9tZSAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fSAgICAgICAgLmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2IoMTkxLCAxOTEsIDE5MSk7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2tleXdvcmQgeyAgY29sb3I6IGJsdWU7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHsgIGNvbG9yOiByZ2IoODgsIDcyLCAyNDYpO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IHJnYig4OCwgOTIsIDI0Nik7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHsgIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2ludmFsaWQgeyAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE1MywgMCwgMCk7ICBjb2xvcjogd2hpdGU7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2ZvbGQge30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjogcmdiKDYwLCA3NiwgMTE0KTt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSwuYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7ICBjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjogcmdiKDEwNCwgMTE4LCAxMzUpO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV9zdHJpbmcgeyAgY29sb3I6ICMxOTE5YTY7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQgeyAgY29sb3I6ICMyMzZlMjQ7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7ICBjb2xvcjogIzIzNmUyNDt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcgeyAgY29sb3I6ICMyMzZlMjQ7fS5hY2UtY2hyb21lIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiByZ2IoMCwgMCwgMjA1KTt9LmFjZS1jaHJvbWUgLmFjZV9saW5lIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO30uYWNlLWNocm9tZSAuYWNlX2xpbmUgLmFjZV94bWxfcGUgeyAgY29sb3I6IHJnYigxMDQsIDEwNCwgOTEpO30uYWNlLWNocm9tZSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6ICMwMDAwQTI7fS5hY2UtY2hyb21lIC5hY2VfbWFya3VwLmFjZV9tYXJrdXBpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLWNocm9tZSAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7ICBjb2xvcjogcmdiKDEyLCA3LCAyNTUpO30uYWNlLWNocm9tZSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7ICBjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO30uYWNlLWNocm9tZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7fS5hY2UtY2hyb21lIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7ICBiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUsIDApO30uYWNlLWNocm9tZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHsgIGJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTt9LmFjZS1jaHJvbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTt9LmFjZS1jaHJvbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO30uYWNlLWNocm9tZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpOyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwMCwgMjAwLCAyNTApO30uYWNlLWNocm9tZSAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjogcmdiKDE0NywgMTUsIDEyOCk7fS5hY2UtY2hyb21lIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7ICBjb2xvcjogcmdiKDI1NSwgMCwgMCl9LmFjZS1jaHJvbWUgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZXsgIGNvbG9yOiAjOTk0NDA5O30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-clouds-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2Nsb3VkcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMSxiLmNzc0NsYXNzPSJhY2UtY2xvdWRzIixiLmNzc1RleHQ9Ii5hY2UtY2xvdWRzIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1jbG91ZHMgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtY2xvdWRzIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1jbG91ZHMgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtY2xvdWRzIC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjt9LmFjZS1jbG91ZHMgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjMDAwMDAwO30uYWNlLWNsb3VkcyAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICMwMDAwMDA7fS5hY2UtY2xvdWRzIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDAwMDAwO30gLmFjZS1jbG91ZHMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogI0JERDVGQzt9LmFjZS1jbG91ZHMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1jbG91ZHMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkICNCRkJGQkY7fS5hY2UtY2xvdWRzIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogI0ZGRkJEMTt9LmFjZS1jbG91ZHMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICNCREQ1RkM7fSAgICAgICAuYWNlLWNsb3VkcyAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogI0JGQkZCRjt9LmFjZS1jbG91ZHMgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNBRjk1NkY7fS5hY2UtY2xvdWRzIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IzQ4NDg0ODt9LmFjZS1jbG91ZHMgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IzM5OTQ2QTt9LmFjZS1jbG91ZHMgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojNDZBNjA5O30uYWNlLWNsb3VkcyAuYWNlX2ludmFsaWQgeyAgYmFja2dyb3VuZC1jb2xvcjojRkYwMDJBO30uYWNlLWNsb3VkcyAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQUY5NTZGOyAgICBib3JkZXItY29sb3I6ICMwMDAwMDA7fS5hY2UtY2xvdWRzIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0M1MjcyNzt9LmFjZS1jbG91ZHMgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzVEOTBDRDt9LmFjZS1jbG91ZHMgLmFjZV9jb21tZW50IHsgIGNvbG9yOiNCQ0M4QkE7fS5hY2UtY2xvdWRzIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6IzYwNjA2MDt9LmFjZS1jbG91ZHMgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-clouds.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY2xvdWRzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSExLGIuY3NzQ2xhc3M9ImFjZS1jbG91ZHMiLGIuY3NzVGV4dD0iLmFjZS1jbG91ZHMgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLWNsb3VkcyAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1jbG91ZHMgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLWNsb3VkcyAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1jbG91ZHMgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO30uYWNlLWNsb3VkcyAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICMwMDAwMDA7fS5hY2UtY2xvdWRzIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzAwMDAwMDt9LmFjZS1jbG91ZHMgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7fSAuYWNlLWNsb3VkcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiAjQkRENUZDO30uYWNlLWNsb3VkcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLWNsb3VkcyAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgI0JGQkZCRjt9LmFjZS1jbG91ZHMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiAjRkZGQkQxO30uYWNlLWNsb3VkcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgI0JERDVGQzt9ICAgICAgIC5hY2UtY2xvdWRzIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiAjQkZCRkJGO30uYWNlLWNsb3VkcyAuYWNlX2tleXdvcmQgeyAgY29sb3I6I0FGOTU2Rjt9LmFjZS1jbG91ZHMgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjojNDg0ODQ4O30uYWNlLWNsb3VkcyAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojMzk5NDZBO30uYWNlLWNsb3VkcyAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiM0NkE2MDk7fS5hY2UtY2xvdWRzIC5hY2VfaW52YWxpZCB7ICBiYWNrZ3JvdW5kLWNvbG9yOiNGRjAwMkE7fS5hY2UtY2xvdWRzIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICNBRjk1NkY7ICAgIGJvcmRlci1jb2xvcjogIzAwMDAwMDt9LmFjZS1jbG91ZHMgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojQzUyNzI3O30uYWNlLWNsb3VkcyAuYWNlX3N0cmluZyB7ICBjb2xvcjojNUQ5MENEO30uYWNlLWNsb3VkcyAuYWNlX2NvbW1lbnQgeyAgY29sb3I6I0JDQzhCQTt9LmFjZS1jbG91ZHMgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjojNjA2MDYwO30uYWNlLWNsb3VkcyAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-clouds_midnight-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2Nsb3Vkc19taWRuaWdodCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMCxiLmNzc0NsYXNzPSJhY2UtY2xvdWRzLW1pZG5pZ2h0IixiLmNzc1RleHQ9Ii5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogIzE5MTkxOTt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjOTI5MjkyO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICM3REE1REM7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjN0RBNURDO30gLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzAwMDAwMDt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkICNCRkJGQkY7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgyMTUsIDIxNSwgMjE1LCAwLjAzMSk7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWRfd29yZCB7ICBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwO30gICAgICAgLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICNCRkJGQkY7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojOTI3QzVEO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHsgIGNvbG9yOiM0QjRCNEI7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiMzOTk0NkE7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6IzQ2QTYwOTt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjojRTkyRTJFO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTI3QzVEOyAgICBib3JkZXItY29sb3I6ICM5MjkyOTI7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0U5MkUyRTt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzVEOTBDRDt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9jb21tZW50IHsgIGNvbG9yOiMzQzQwM0I7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6IzYwNjA2MDt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-clouds_midnight.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY2xvdWRzX21pZG5pZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1jbG91ZHMtbWlkbmlnaHQiLGIuY3NzVGV4dD0iLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTkxOTE5O30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICM5MjkyOTI7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzdEQTVEQzt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM3REE1REM7fSAuYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiAjMDAwMDAwO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgI0JGQkZCRjt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiByZ2JhKDIxNSwgMjE1LCAyMTUsIDAuMDMxKTt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7fSAgICAgICAuYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogI0JGQkZCRjt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiM5MjdDNUQ7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IzRCNEI0Qjt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IzM5OTQ2QTt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojNDZBNjA5O30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNFOTJFMkU7fS5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICM5MjdDNUQ7ICAgIGJvcmRlci1jb2xvcjogIzkyOTI5Mjt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojRTkyRTJFO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX3N0cmluZyB7ICBjb2xvcjojNUQ5MENEO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2NvbW1lbnQgeyAgY29sb3I6IzNDNDAzQjt9LmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjojNjA2MDYwO30uYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-cobalt-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2NvYmFsdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMCxiLmNzc0NsYXNzPSJhY2UtY29iYWx0IixiLmNzc1RleHQ9Ii5hY2UtY29iYWx0IC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1jb2JhbHQgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtY29iYWx0IC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1jb2JhbHQgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtY29iYWx0IC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogIzAwMjI0MDt9LmFjZS1jb2JhbHQgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjRkZGRkZGO30uYWNlLWNvYmFsdCAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7fS5hY2UtY29iYWx0IC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRkZGRkZGO30gLmFjZS1jb2JhbHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiYSgxNzksIDEwMSwgNTcsIDAuNzUpO30uYWNlLWNvYmFsdCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLWNvYmFsdCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTt9LmFjZS1jb2JhbHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzUpO30uYWNlLWNvYmFsdCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNzksIDEwMSwgNTcsIDAuNzUpO30gICAgICAgLmFjZS1jb2JhbHQgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7fS5hY2UtY29iYWx0IC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojRkY5RDAwO30uYWNlLWNvYmFsdCAuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiNGRjYyOEM7fS5hY2UtY29iYWx0IC5hY2VfaW52YWxpZCB7ICBjb2xvcjojRjhGOEY4O2JhY2tncm91bmQtY29sb3I6IzgwMEYwMDt9LmFjZS1jb2JhbHQgLmFjZV9zdXBwb3J0IHsgIGNvbG9yOiM4MEZGQkI7fS5hY2UtY29iYWx0IC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICNGRjlEMDA7ICAgIGJvcmRlci1jb2xvcjogI0ZGRkZGRjt9LmFjZS1jb2JhbHQgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojRkZCMDU0O30uYWNlLWNvYmFsdCAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOiM4MEZGQzI7fS5hY2UtY29iYWx0IC5hY2VfY29tbWVudCB7ICBmb250LXN0eWxlOml0YWxpYztjb2xvcjojMDA4OEZGO30uYWNlLWNvYmFsdCAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiNDQ0NDQ0M7fS5hY2UtY29iYWx0IC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNGRjgwRTE7fS5hY2UtY29iYWx0IC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiM5RUZGRkY7fS5hY2UtY29iYWx0IC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLWNvYmFsdCAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7ICBjb2xvcjojQzhFNEZEO2JhY2tncm91bmQtY29sb3I6IzAwMTIyMTt9LmFjZS1jb2JhbHQgLmFjZV9tYXJrdXAuYWNlX2xpc3QgeyAgYmFja2dyb3VuZC1jb2xvcjojMTMwRDI2O30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-cobalt.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY29iYWx0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1jb2JhbHQiLGIuY3NzVGV4dD0iLmFjZS1jb2JhbHQgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLWNvYmFsdCAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1jb2JhbHQgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLWNvYmFsdCAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1jb2JhbHQgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAyMjQwO30uYWNlLWNvYmFsdCAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICNGRkZGRkY7fS5hY2UtY29iYWx0IC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjt9LmFjZS1jb2JhbHQgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRkZGRkY7fSAuYWNlLWNvYmFsdCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiByZ2JhKDE3OSwgMTAxLCA1NywgMC43NSk7fS5hY2UtY29iYWx0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7ICBiYWNrZ3JvdW5kOiByZ2IoMTk4LCAyMTksIDE3NCk7fS5hY2UtY29iYWx0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpO30uYWNlLWNvYmFsdCAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zNSk7fS5hY2UtY29iYWx0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWRfd29yZCB7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE3OSwgMTAxLCA1NywgMC43NSk7fSAgICAgICAuYWNlLWNvYmFsdCAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTt9LmFjZS1jb2JhbHQgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNGRjlEMDA7fS5hY2UtY29iYWx0IC5hY2VfY29uc3RhbnQgeyAgY29sb3I6I0ZGNjI4Qzt9LmFjZS1jb2JhbHQgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNGOEY4Rjg7YmFja2dyb3VuZC1jb2xvcjojODAwRjAwO30uYWNlLWNvYmFsdCAuYWNlX3N1cHBvcnQgeyAgY29sb3I6IzgwRkZCQjt9LmFjZS1jb2JhbHQgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGOUQwMDsgICAgYm9yZGVyLWNvbG9yOiAjRkZGRkZGO30uYWNlLWNvYmFsdCAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNGRkIwNTQ7fS5hY2UtY29iYWx0IC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAgeyAgY29sb3I6IzgwRkZDMjt9LmFjZS1jb2JhbHQgLmFjZV9jb21tZW50IHsgIGZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiMwMDg4RkY7fS5hY2UtY29iYWx0IC5hY2VfdmFyaWFibGUgeyAgY29sb3I6I0NDQ0NDQzt9LmFjZS1jb2JhbHQgLmFjZV92YXJpYWJsZS5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6I0ZGODBFMTt9LmFjZS1jb2JhbHQgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6IzlFRkZGRjt9LmFjZS1jb2JhbHQgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtY29iYWx0IC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHsgIGNvbG9yOiNDOEU0RkQ7YmFja2dyb3VuZC1jb2xvcjojMDAxMjIxO30uYWNlLWNvYmFsdCAuYWNlX21hcmt1cC5hY2VfbGlzdCB7ICBiYWNrZ3JvdW5kLWNvbG9yOiMxMzBEMjY7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-crimson_editor-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2NyaW1zb25fZWRpdG9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSExLGIuY3NzVGV4dD0iLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2VkaXRvciB7ICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTU5LCAxNTksIDE1OSk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9ndXR0ZXIgeyAgd2lkdGg6IDUwcHg7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7ICBvdmVyZmxvdyA6IGhpZGRlbjt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2d1dHRlci1sYXllciB7ICB3aWR0aDogMTAwJTsgIHRleHQtYWxpZ246IHJpZ2h0O30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfZ3V0dGVyLWxheWVyIC5hY2VfZ3V0dGVyLWNlbGwgeyAgcGFkZGluZy1yaWdodDogNnB4O30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfcHJpbnRfbWFyZ2luIHsgIHdpZHRoOiAxcHg7ICBiYWNrZ3JvdW5kOiAjZThlOGU4O30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogcmdiKDY0LCA2NCwgNjQpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2lkZW50aWZpZXIgeyAgY29sb3I6IGJsYWNrO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2tleXdvcmQgeyAgY29sb3I6IGJsdWU7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2J1aWxkaW4geyAgY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiByZ2IoMjU1LCAxNTYsIDApO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHsgIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfaW52YWxpZCB7ICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsgIGNvbG9yOiByZ2IoMjI0LCAwLCAwKTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9mb2xkIHt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjogcmdiKDE5MiwgMCwgMCk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV90eXBlLC5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3MgeyAgY29sb3I6IHJnYigxMDksIDEyMSwgMjIyKTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjogcmdiKDQ5LCAxMzIsIDE0OSk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiByZ2IoMTI4LCAwLCAxMjgpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQgeyAgY29sb3I6IHJnYig3NiwgMTM2LCAxMDcpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7ICBjb2xvcjogcmdiKDAsIDEwMiwgMjU1KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7ICBjb2xvcjogcmdiKDEyOCwgMTU5LCAxOTEpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiByZ2IoMCwgMCwgNjQpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiByZ2IoMCwgNjQsIDEyOCk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfeG1sX3BlIHsgIGNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigyNTIsIDI1NSwgMCk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGFjayB7ICBiYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6IHJnYigyMzIsIDI0MiwgMjU0KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjpyZ2IoMjgsIDIsIDI1NSk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX3N0cmluZy5hY2VfcmVnZXggeyAgY29sb3I6IHJnYigxOTIsIDAsIDE5Mik7fSIsYi5jc3NDbGFzcz0iYWNlLWNyaW1zb24tZWRpdG9yIjt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-crimson_editor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY3JpbXNvbl9lZGl0b3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITEsYi5jc3NUZXh0PSIuYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2d1dHRlciB7ICB3aWR0aDogNTBweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzsgIG92ZXJmbG93IDogaGlkZGVuO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfZ3V0dGVyLWxheWVyIHsgIHdpZHRoOiAxMDAlOyAgdGV4dC1hbGlnbjogcmlnaHQ7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9ndXR0ZXItbGF5ZXIgLmFjZV9ndXR0ZXItY2VsbCB7ICBwYWRkaW5nLXJpZ2h0OiA2cHg7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiByZ2IoNjQsIDY0LCA2NCk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9jdXJzb3IgeyAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2IoMTkxLCAxOTEsIDE5MSk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfaWRlbnRpZmllciB7ICBjb2xvcjogYmxhY2s7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjogYmx1ZTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7ICBjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IHJnYigyNTUsIDE1NiwgMCk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9pbnZhbGlkIHsgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyAgY29sb3I6IHJnYigyMjQsIDAsIDApO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2ZvbGQge30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiByZ2IoMTkyLCAwLCAwKTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7ICBjb2xvcjogcmdiKDYsIDE1MCwgMTQpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7ICBjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHsgIGNvbG9yOiByZ2IoNDksIDEzMiwgMTQ5KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV9zdHJpbmcgeyAgY29sb3I6IHJnYigxMjgsIDAsIDEyOCk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfY29tbWVudCB7ICBjb2xvcjogcmdiKDc2LCAxMzYsIDEwNyk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfY29tbWVudC5hY2VfZG9jIHsgIGNvbG9yOiByZ2IoMCwgMTAyLCAyNTUpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHsgIGNvbG9yOiByZ2IoMTI4LCAxNTksIDE5MSk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6IHJnYigwLCAwLCA2NCk7fS5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9saW5lIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6IHJnYigwLCA2NCwgMTI4KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2xpbmUgLmFjZV94bWxfcGUgeyAgY29sb3I6IHJnYigxMDQsIDEwNCwgOTEpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHsgIGJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAxOTIpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiKDIzMiwgMjQyLCAyNTQpO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOnJnYigyOCwgMiwgMjU1KTt9LmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpOyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwMCwgMjAwLCAyNTApO30uYWNlLWNyaW1zb24tZWRpdG9yIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7ICBjb2xvcjogcmdiKDE5MiwgMCwgMTkyKTt9IixiLmNzc0NsYXNzPSJhY2UtY3JpbXNvbi1lZGl0b3IiO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-dawn-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2Rhd24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITEsYi5jc3NDbGFzcz0iYWNlLWRhd24iLGIuY3NzVGV4dD0iLmFjZS1kYXduIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1kYXduIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLWRhd24gLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLWRhd24gLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtZGF3biAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICNGOUY5Rjk7fS5hY2UtZGF3biAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICMwODA4MDg7fS5hY2UtZGF3biAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICMwMDAwMDA7fS5hY2UtZGF3biAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzAwMDAwMDt9IC5hY2UtZGF3biAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiByZ2JhKDM5LCA5NSwgMjU1LCAwLjMwKTt9LmFjZS1kYXduIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7ICBiYWNrZ3JvdW5kOiByZ2IoMTk4LCAyMTksIDE3NCk7fS5hY2UtZGF3biAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NSwgNzUsIDEyNiwgMC41MCk7fS5hY2UtZGF3biAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6IHJnYmEoMzYsIDk5LCAxODAsIDAuMTIpO30uYWNlLWRhd24gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzksIDk1LCAyNTUsIDAuMzApO30gICAgICAgLmFjZS1kYXduIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2JhKDc1LCA3NSwgMTI2LCAwLjUwKTt9LmFjZS1kYXduIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojNzk0OTM4O30uYWNlLWRhd24gLmFjZV9jb25zdGFudCB7ICBjb2xvcjojODExRjI0O30uYWNlLWRhd24gLmFjZV9pbnZhbGlkLmFjZV9pbGxlZ2FsIHsgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6I0Y4RjhGODtiYWNrZ3JvdW5kLWNvbG9yOiNCNTJBMUQ7fS5hY2UtZGF3biAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQgeyAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXN0eWxlOml0YWxpYztjb2xvcjojQjUyQTFEO30uYWNlLWRhd24gLmFjZV9zdXBwb3J0IHsgIGNvbG9yOiM2OTFDOTc7fS5hY2UtZGF3biAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk0OTM4OyAgICBib3JkZXItY29sb3I6ICMwODA4MDg7fS5hY2UtZGF3biAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM2OTNBMTc7fS5hY2UtZGF3biAuYWNlX3N0cmluZyB7ICBjb2xvcjojMEI2MTI1O30uYWNlLWRhd24gLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjojQ0Y1NjI4O30uYWNlLWRhd24gLmFjZV9jb21tZW50IHsgIGZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiM1QTUyNUY7fS5hY2UtZGF3biAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiMyMzRBOTc7fS5hY2UtZGF3biAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LmFjZS1kYXduIC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHsgIGNvbG9yOiMxOTM1NkQ7fS5hY2UtZGF3biAuYWNlX21hcmt1cC5hY2VfbGlzdCB7ICBjb2xvcjojNjkzQTE3O30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-dawn.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZGF3biIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMSxiLmNzc0NsYXNzPSJhY2UtZGF3biIsYi5jc3NUZXh0PSIuYWNlLWRhd24gLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLWRhd24gLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtZGF3biAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtZGF3biAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1kYXduIC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGOTt9LmFjZS1kYXduIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogIzA4MDgwODt9LmFjZS1kYXduIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzAwMDAwMDt9LmFjZS1kYXduIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDAwMDAwO30gLmFjZS1kYXduIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYmEoMzksIDk1LCAyNTUsIDAuMzApO30uYWNlLWRhd24gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1kYXduIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc1LCA3NSwgMTI2LCAwLjUwKTt9LmFjZS1kYXduIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgzNiwgOTksIDE4MCwgMC4xMik7fS5hY2UtZGF3biAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzOSwgOTUsIDI1NSwgMC4zMCk7fSAgICAgICAuYWNlLWRhd24gLmFjZV9pbnZpc2libGUgeyAgY29sb3I6IHJnYmEoNzUsIDc1LCAxMjYsIDAuNTApO30uYWNlLWRhd24gLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiM3OTQ5Mzg7fS5hY2UtZGF3biAuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiM4MTFGMjQ7fS5hY2UtZGF3biAuYWNlX2ludmFsaWQuYWNlX2lsbGVnYWwgeyAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXN0eWxlOml0YWxpYztjb2xvcjojRjhGOEY4O2JhY2tncm91bmQtY29sb3I6I0I1MkExRDt9LmFjZS1kYXduIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7ICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiNCNTJBMUQ7fS5hY2UtZGF3biAuYWNlX3N1cHBvcnQgeyAgY29sb3I6IzY5MUM5Nzt9LmFjZS1kYXduIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICM3OTQ5Mzg7ICAgIGJvcmRlci1jb2xvcjogIzA4MDgwODt9LmFjZS1kYXduIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzY5M0ExNzt9LmFjZS1kYXduIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiMwQjYxMjU7fS5hY2UtZGF3biAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOiNDRjU2Mjg7fS5hY2UtZGF3biAuYWNlX2NvbW1lbnQgeyAgZm9udC1zdHlsZTppdGFsaWM7Y29sb3I6IzVBNTI1Rjt9LmFjZS1kYXduIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6IzIzNEE5Nzt9LmFjZS1kYXduIC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLWRhd24gLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6IzE5MzU2RDt9LmFjZS1kYXduIC5hY2VfbWFya3VwLmFjZV9saXN0IHsgIGNvbG9yOiM2OTNBMTc7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-dreamweaver-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2RyZWFtd2VhdmVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSExLGIuY3NzQ2xhc3M9ImFjZS10bSIsYi5jc3NUZXh0PSIuYWNlLXRtIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10bSAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS10bSAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdG0gLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG0gLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwRjt9LmFjZS10bSAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0O30uYWNlLXRtIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7fS5hY2UtdG0gLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30gICAgICAgIC5hY2UtdG0gLmFjZV9saW5lIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2IoMTkxLCAxOTEsIDE5MSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjogYmx1ZTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7ICBjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IHJnYig4OCwgOTIsIDI0Nik7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9pbnZhbGlkIHsgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNTMsIDAsIDApOyAgY29sb3I6IHdoaXRlO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSwuYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzIHsgIGNvbG9yOiAjMDA5O30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX3BocF90YWcgeyAgY29sb3I6ICNmMDA7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IHJnYigxMDQsIDExOCwgMTM1KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9zdHJpbmcgeyAgY29sb3I6ICMwMEY7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29tbWVudCB7ICBjb2xvcjogcmdiKDc2LCAxMzYsIDEwNyk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29tbWVudC5hY2VfZG9jIHsgIGNvbG9yOiByZ2IoMCwgMTAyLCAyNTUpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHsgIGNvbG9yOiByZ2IoMTI4LCAxNTksIDE5MSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6IHJnYigwLCAwLCAyMDUpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiAjMDZGfS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfeG1sX3BlIHsgIGNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTt9LmFjZS10bSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6ICMwMEY7fS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX21hcmt1cGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6IHJnYigxMiwgNywgMjU1KTt9LmFjZS10bSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7ICBjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHsgIGJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAxOTIpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpOyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwMCwgMjAwLCAyNTApO30uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiMwMDk7fS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcuYWNlX2FuY2hvciB7ICBjb2xvcjojMDYwO30uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnLmFjZV9mb3JtIHsgIGNvbG9yOiNGOTA7fS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcuYWNlX2ltYWdlIHsgIGNvbG9yOiM5MDk7fS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcuYWNlX3NjcmlwdCB7ICBjb2xvcjojOTAwO30uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnLmFjZV9zdHlsZSB7ICBjb2xvcjojOTA5O30uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnLmFjZV90YWJsZSB7ICBjb2xvcjojMDk5O30uYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7ICBjb2xvcjogcmdiKDI1NSwgMCwgMCl9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-dreamweaver.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZHJlYW13ZWF2ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITEsYi5jc3NDbGFzcz0iYWNlLXRtIixiLmNzc1RleHQ9Ii5hY2UtdG0gLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXRtIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXRtIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS10bSAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS10bSAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBGO30uYWNlLXRtIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7fS5hY2UtdG0gLmFjZV9jdXJzb3IgeyAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazt9LmFjZS10bSAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fSAgICAgICAgLmFjZS10bSAuYWNlX2xpbmUgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6IHJnYigxOTEsIDE5MSwgMTkxKTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiBibHVlO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHsgIGNvbG9yOiByZ2IoODgsIDcyLCAyNDYpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjogcmdiKDg4LCA5MiwgMjQ2KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7ICBjb2xvcjogcmdiKDYsIDE1MCwgMTQpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2ludmFsaWQgeyAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE1MywgMCwgMCk7ICBjb2xvcjogd2hpdGU7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IHJnYig2MCwgNzYsIDExNCk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV90eXBlLC5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3MgeyAgY29sb3I6ICMwMDk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfcGhwX3RhZyB7ICBjb2xvcjogI2YwMDt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjogcmdiKDEwNCwgMTE4LCAxMzUpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N0cmluZyB7ICBjb2xvcjogIzAwRjt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb21tZW50IHsgIGNvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb21tZW50LmFjZV9kb2MgeyAgY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcgeyAgY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjogcmdiKDAsIDAsIDIwNSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6ICMwNkZ9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV94bWxfcGUgeyAgY29sb3I6IHJnYigxMDQsIDEwNCwgOTEpO30uYWNlLXRtIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjogIzAwRjt9LmFjZS10bSAuYWNlX21hcmt1cC5hY2VfbWFya3VwaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LmFjZS10bSAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7ICBjb2xvcjogcmdiKDEyLCA3LCAyNTUpO30uYWNlLXRtIC5hY2VfbWFya3VwLmFjZV9saXN0IHsgIGNvbG9yOnJnYigxODUsIDYsIDE0NCk7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7ICBiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUsIDApO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sgeyAgYmFja2dyb3VuZDogcmdiKDE2NCwgMjI5LCAxMDEpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWRfd29yZCB7ICBiYWNrZ3JvdW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7ICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjAwLCAyMDAsIDI1MCk7fS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6IzAwOTt9LmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZy5hY2VfYW5jaG9yIHsgIGNvbG9yOiMwNjA7fS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcuYWNlX2Zvcm0geyAgY29sb3I6I0Y5MDt9LmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZy5hY2VfaW1hZ2UgeyAgY29sb3I6IzkwOTt9LmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZy5hY2Vfc2NyaXB0IHsgIGNvbG9yOiM5MDA7fS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcuYWNlX3N0eWxlIHsgIGNvbG9yOiM5MDk7fS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcuYWNlX3RhYmxlIHsgIGNvbG9yOiMwOTk7fS5hY2UtdG0gLmFjZV9zdHJpbmcuYWNlX3JlZ2V4IHsgIGNvbG9yOiByZ2IoMjU1LCAwLCAwKX0iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-eclipse-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2VjbGlwc2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiLGIuaXNEYXJrPSExLGIuY3NzVGV4dD0iLmFjZS1lY2xpcHNlIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1lY2xpcHNlIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLWVjbGlwc2UgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogcmdiKDIyNywgMjI3LCAyMjcpOyAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpOyAgY29sb3I6IHJnYigxMzYsIDEzNiwgMTM2KTt9LmFjZS1lY2xpcHNlIC5hY2VfcHJpbnRfbWFyZ2luIHsgIHdpZHRoOiAxcHg7ICBiYWNrZ3JvdW5kOiAjYjFiNGJhO30uYWNlLWVjbGlwc2UgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDYwLCA3NiwgMTE0KTt9LmFjZS1lY2xpcHNlIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7fS5hY2UtZWNsaXBzZSAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2Vfa2V5d29yZCwgLmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiByZ2IoMTI3LCAwLCA4NSk7fS5hY2UtZWNsaXBzZSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7ICBjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHsgIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7fS5hY2UtZWNsaXBzZSAuYWNlX2xpbmUgLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjogcmdiKDYwLCA3NiwgMTE0KTt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX3N0cmluZyB7ICBjb2xvcjogcmdiKDQyLCAwLCAyNTUpO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2VfY29tbWVudCB7ICBjb2xvcjogcmdiKDYzLCAxMjcsIDk1KTt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7ICBjb2xvcjogcmdiKDYzLCA5NSwgMTkxKTt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHsgIGNvbG9yOiByZ2IoMTI3LCAxNTksIDE5MSk7fS5hY2UtZWNsaXBzZSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7fS5hY2UtZWNsaXBzZSAuYWNlX2xpbmUgLmFjZV90YWcgeyAgY29sb3I6IHJnYig2MywgMTI3LCAxMjcpO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2VfdHlwZSB7ICBjb2xvcjogcmdiKDEyNywgMCwgMTI3KTt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX3htbF9wZSB7ICBjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7fS5hY2UtZWNsaXBzZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7fS5hY2UtZWNsaXBzZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAxOTIpO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOnJnYig2MywgMTI3LCAxMjcpO30uYWNlLWVjbGlwc2UgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjpyZ2IoMTI3LCAwLCAxMjcpO30uYWNlLWVjbGlwc2UgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiByZ2IoMjMyLCAyNDIsIDI1NCk7fSIsYi5jc3NDbGFzcz0iYWNlLWVjbGlwc2UiO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-eclipse.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZWNsaXBzZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCIsYi5pc0Rhcms9ITEsYi5jc3NUZXh0PSIuYWNlLWVjbGlwc2UgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLWVjbGlwc2UgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtZWNsaXBzZSAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiByZ2IoMjI3LCAyMjcsIDIyNyk7ICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2IoMTU5LCAxNTksIDE1OSk7ICBjb2xvcjogcmdiKDEzNiwgMTM2LCAxMzYpO30uYWNlLWVjbGlwc2UgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNiMWI0YmE7fS5hY2UtZWNsaXBzZSAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO30uYWNlLWVjbGlwc2UgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDt9LmFjZS1lY2xpcHNlIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7fS5hY2UtZWNsaXBzZSAuYWNlX2xpbmUgLmFjZV9rZXl3b3JkLCAuYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6IHJnYigxMjcsIDAsIDg1KTt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHsgIGNvbG9yOiByZ2IoODgsIDcyLCAyNDYpO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiByZ2IoNDIsIDAsIDI1NSk7fS5hY2UtZWNsaXBzZSAuYWNlX2xpbmUgLmFjZV9jb21tZW50IHsgIGNvbG9yOiByZ2IoNjMsIDEyNywgOTUpO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2VfY29tbWVudC5hY2VfZG9jIHsgIGNvbG9yOiByZ2IoNjMsIDk1LCAxOTEpO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcgeyAgY29sb3I6IHJnYigxMjcsIDE1OSwgMTkxKTt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHt9LmFjZS1lY2xpcHNlIC5hY2VfbGluZSAuYWNlX3RhZyB7ICBjb2xvcjogcmdiKDYzLCAxMjcsIDEyNyk7fS5hY2UtZWNsaXBzZSAuYWNlX2xpbmUgLmFjZV90eXBlIHsgIGNvbG9yOiByZ2IoMTI3LCAwLCAxMjcpO30uYWNlLWVjbGlwc2UgLmFjZV9saW5lIC5hY2VfeG1sX3BlIHsgIGNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTt9LmFjZS1lY2xpcHNlIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTt9LmFjZS1lY2xpcHNlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7fS5hY2UtZWNsaXBzZSAuYWNlX2xpbmUgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6cmdiKDYzLCAxMjcsIDEyNyk7fS5hY2UtZWNsaXBzZSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOnJnYigxMjcsIDAsIDEyNyk7fS5hY2UtZWNsaXBzZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6IHJnYigyMzIsIDI0MiwgMjU0KTt9IixiLmNzc0NsYXNzPSJhY2UtZWNsaXBzZSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-idle_fingers-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2lkbGVfZmluZ2VycyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMCxiLmNzc0NsYXNzPSJhY2UtaWRsZS1maW5nZXJzIixiLmNzc1RleHQ9Ii5hY2UtaWRsZS1maW5nZXJzIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogIzMyMzIzMjt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjRkZGRkZGO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICM5MUZGMDA7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOTFGRjAwO30gLmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiYSg5MCwgMTAwLCAxMjYsIDAuODgpO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgIzQwNDA0MDt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiAjMzUzNjM3O30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg5MCwgMTAwLCAxMjYsIDAuODgpO30gICAgICAgLmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICM0MDQwNDA7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojQ0M3ODMzO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiM2Qzk5QkI7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfaW52YWxpZCB7ICBjb2xvcjojRkZGRkZGO2JhY2tncm91bmQtY29sb3I6I0ZGMDAwMDt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogI0NDNzgzMzsgICAgYm9yZGVyLWNvbG9yOiAjRkZGRkZGO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNCODM0MjY7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiNBNUMyNjE7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAgeyAgY29sb3I6I0NDQ0MzMzt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9jb21tZW50IHsgIGZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiNCQzk0NTg7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiNGRkU1QkI7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfZW50aXR5LmFjZV9uYW1lIHsgIGNvbG9yOiNGRkM2NkQ7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX2NvbGxhYi5hY2VfdXNlcjEgeyAgY29sb3I6IzMyMzIzMjtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY5ODA7ICAgfSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-idle_fingers.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvaWRsZV9maW5nZXJzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1pZGxlLWZpbmdlcnMiLGIuY3NzVGV4dD0iLmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzIzMjMyO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICNGRkZGRkY7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzkxRkYwMDt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM5MUZGMDA7fSAuYWNlLWlkbGUtZmluZ2VycyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiByZ2JhKDkwLCAxMDAsIDEyNiwgMC44OCk7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7ICBiYWNrZ3JvdW5kOiByZ2IoMTk4LCAyMTksIDE3NCk7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICMzNTM2Mzc7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWRfd29yZCB7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDkwLCAxMDAsIDEyNiwgMC44OCk7fSAgICAgICAuYWNlLWlkbGUtZmluZ2VycyAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogIzQwNDA0MDt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNDQzc4MzM7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfY29uc3RhbnQgeyAgY29sb3I6IzZDOTlCQjt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjojRkYwMDAwO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0M3ODMzOyAgICBib3JkZXItY29sb3I6ICNGRkZGRkY7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0I4MzQyNjt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9zdHJpbmcgeyAgY29sb3I6I0E1QzI2MTt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjojQ0NDQzMzO30uYWNlLWlkbGUtZmluZ2VycyAuYWNlX2NvbW1lbnQgeyAgZm9udC1zdHlsZTppdGFsaWM7Y29sb3I6I0JDOTQ1ODt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6I0ZGRTVCQjt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9lbnRpdHkuYWNlX25hbWUgeyAgY29sb3I6I0ZGQzY2RDt9LmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtaWRsZS1maW5nZXJzIC5hY2VfY29sbGFiLmFjZV91c2VyMSB7ICBjb2xvcjojMzIzMjMyO2JhY2tncm91bmQtY29sb3I6I0ZGRjk4MDsgICB9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-kr_theme-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL2tyX3RoZW1lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1rci10aGVtZSIsYi5jc3NUZXh0PSIuYWNlLWtyLXRoZW1lIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1rci10aGVtZSAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1rci10aGVtZSAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2Uta3ItdGhlbWUgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2Uta3ItdGhlbWUgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEIwQTA5O30uYWNlLWtyLXRoZW1lIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogI0ZDRkZFMDt9LmFjZS1rci10aGVtZSAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRjk5MDA7fS5hY2Uta3ItdGhlbWUgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRjk5MDA7fSAuYWNlLWtyLXRoZW1lIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYmEoMTcwLCAwLCAyNTUsIDAuNDUpO30uYWNlLWtyLXRoZW1lIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7ICBiYWNrZ3JvdW5kOiByZ2IoMTk4LCAyMTksIDE3NCk7fS5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAxNzcsIDExMSwgMC4zMik7fS5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiAjMzg0MDNEO30uYWNlLWtyLXRoZW1lIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWRfd29yZCB7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE3MCwgMCwgMjU1LCAwLjQ1KTt9ICAgICAgIC5hY2Uta3ItdGhlbWUgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6IHJnYmEoMjU1LCAxNzcsIDExMSwgMC4zMik7fS5hY2Uta3ItdGhlbWUgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiM5NDlDOEI7fS5hY2Uta3ItdGhlbWUgLmFjZV9jb25zdGFudCB7ICBjb2xvcjpyZ2JhKDIxMCwgMTE3LCAyNCwgMC43Nik7fS5hY2Uta3ItdGhlbWUgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNGOEY4Rjg7YmFja2dyb3VuZC1jb2xvcjojQTQxMzAwO30uYWNlLWtyLXRoZW1lIC5hY2Vfc3VwcG9ydCB7ICBjb2xvcjojOUZDMjhBO30uYWNlLWtyLXRoZW1lIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICM5NDlDOEI7ICAgIGJvcmRlci1jb2xvcjogI0ZDRkZFMDt9LmFjZS1rci10aGVtZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM4NTg3M0E7fS5hY2Uta3ItdGhlbWUgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjpyZ2JhKDEyNSwgMjU1LCAxOTIsIDAuNjUpO30uYWNlLWtyLXRoZW1lIC5hY2VfY29tbWVudCB7ICBmb250LXN0eWxlOml0YWxpYztjb2xvcjojNzA2RDVCO30uYWNlLWtyLXRoZW1lIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6I0QxQTc5Njt9LmFjZS1rci10aGVtZSAuYWNlX3ZhcmlhYmxlLmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojRkY4MEUxO30uYWNlLWtyLXRoZW1lIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiNCQUJEOUM7fS5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrdXAuYWNlX2xpc3QgeyAgYmFja2dyb3VuZC1jb2xvcjojMEYwMDQwO30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-kr_theme.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUva3JfdGhlbWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLWtyLXRoZW1lIixiLmNzc1RleHQ9Ii5hY2Uta3ItdGhlbWUgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLWtyLXRoZW1lIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLWtyLXRoZW1lIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1rci10aGVtZSAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1rci10aGVtZSAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMwQjBBMDk7fS5hY2Uta3ItdGhlbWUgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjRkNGRkUwO30uYWNlLWtyLXRoZW1lIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGOTkwMDt9LmFjZS1rci10aGVtZSAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0ZGOTkwMDt9IC5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiYSgxNzAsIDAsIDI1NSwgMC40NSk7fS5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1rci10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE3NywgMTExLCAwLjMyKTt9LmFjZS1rci10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICMzODQwM0Q7fS5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTcwLCAwLCAyNTUsIDAuNDUpO30gICAgICAgLmFjZS1rci10aGVtZSAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiYSgyNTUsIDE3NywgMTExLCAwLjMyKTt9LmFjZS1rci10aGVtZSAuYWNlX2tleXdvcmQgeyAgY29sb3I6Izk0OUM4Qjt9LmFjZS1rci10aGVtZSAuYWNlX2NvbnN0YW50IHsgIGNvbG9yOnJnYmEoMjEwLCAxMTcsIDI0LCAwLjc2KTt9LmFjZS1rci10aGVtZSAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0Y4RjhGODtiYWNrZ3JvdW5kLWNvbG9yOiNBNDEzMDA7fS5hY2Uta3ItdGhlbWUgLmFjZV9zdXBwb3J0IHsgIGNvbG9yOiM5RkMyOEE7fS5hY2Uta3ItdGhlbWUgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzk0OUM4QjsgICAgYm9yZGVyLWNvbG9yOiAjRkNGRkUwO30uYWNlLWtyLXRoZW1lIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6Izg1ODczQTt9LmFjZS1rci10aGVtZSAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOnJnYmEoMTI1LCAyNTUsIDE5MiwgMC42NSk7fS5hY2Uta3ItdGhlbWUgLmFjZV9jb21tZW50IHsgIGZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiM3MDZENUI7fS5hY2Uta3ItdGhlbWUgLmFjZV92YXJpYWJsZSB7ICBjb2xvcjojRDFBNzk2O30uYWNlLWtyLXRoZW1lIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNGRjgwRTE7fS5hY2Uta3ItdGhlbWUgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6I0JBQkQ5Qzt9LmFjZS1rci10aGVtZSAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LmFjZS1rci10aGVtZSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7ICBiYWNrZ3JvdW5kLWNvbG9yOiMwRjAwNDA7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-merbivore-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL21lcmJpdm9yZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMCxiLmNzc0NsYXNzPSJhY2UtbWVyYml2b3JlIixiLmNzc1RleHQ9Ii5hY2UtbWVyYml2b3JlIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtbWVyYml2b3JlIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1tZXJiaXZvcmUgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtbWVyYml2b3JlIC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogIzE2MTYxNjt9LmFjZS1tZXJiaXZvcmUgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjRTZFMURDO30uYWNlLW1lcmJpdm9yZSAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7fS5hY2UtbWVyYml2b3JlIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRkZGRkZGO30gLmFjZS1tZXJiaXZvcmUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzQ1NDU0NTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7fS5hY2UtbWVyYml2b3JlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogIzMzMzQzNTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICM0NTQ1NDU7fSAgICAgICAuYWNlLW1lcmJpdm9yZSAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogIzQwNDA0MDt9LmFjZS1tZXJiaXZvcmUgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNGQzZGMDk7fS5hY2UtbWVyYml2b3JlIC5hY2VfY29uc3RhbnQgeyAgY29sb3I6IzFFREFGQjt9LmFjZS1tZXJiaXZvcmUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6I0ZEQzI1MTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7ICBjb2xvcjojOERGRjBBO30uYWNlLW1lcmJpdm9yZSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiM1OEM1NTQ7fS5hY2UtbWVyYml2b3JlIC5hY2VfaW52YWxpZCB7ICBjb2xvcjojRkZGRkZGO2JhY2tncm91bmQtY29sb3I6Izk5MDAwMDt9LmFjZS1tZXJiaXZvcmUgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZDNkYwOTsgICAgYm9yZGVyLWNvbG9yOiAjRTZFMURDO30uYWNlLW1lcmJpdm9yZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNGQzZGMDk7fS5hY2UtbWVyYml2b3JlIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiM4REZGMEE7fS5hY2UtbWVyYml2b3JlIC5hY2VfY29tbWVudCB7ICBmb250LXN0eWxlOml0YWxpYztjb2xvcjojQUQyRUE0O30uYWNlLW1lcmJpdm9yZSAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjojRkM2RjA5O30uYWNlLW1lcmJpdm9yZSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiNGRkZGODk7fS5hY2UtbWVyYml2b3JlIC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-merbivore.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvbWVyYml2b3JlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1tZXJiaXZvcmUiLGIuY3NzVGV4dD0iLmFjZS1tZXJiaXZvcmUgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLW1lcmJpdm9yZSAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1tZXJiaXZvcmUgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLW1lcmJpdm9yZSAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1tZXJiaXZvcmUgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTYxNjE2O30uYWNlLW1lcmJpdm9yZSAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICNFNkUxREM7fS5hY2UtbWVyYml2b3JlIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjt9LmFjZS1tZXJiaXZvcmUgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRkZGRkY7fSAuYWNlLW1lcmJpdm9yZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiAjNDU0NTQ1O30uYWNlLW1lcmJpdm9yZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLW1lcmJpdm9yZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgIzQwNDA0MDt9LmFjZS1tZXJiaXZvcmUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiAjMzMzNDM1O30uYWNlLW1lcmJpdm9yZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzQ1NDU0NTt9ICAgICAgIC5hY2UtbWVyYml2b3JlIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiAjNDA0MDQwO30uYWNlLW1lcmJpdm9yZSAuYWNlX2tleXdvcmQgeyAgY29sb3I6I0ZDNkYwOTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9jb25zdGFudCB7ICBjb2xvcjojMUVEQUZCO30uYWNlLW1lcmJpdm9yZSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojRkRDMjUxO30uYWNlLW1lcmJpdm9yZSAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHsgIGNvbG9yOiM4REZGMEE7fS5hY2UtbWVyYml2b3JlIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6IzU4QzU1NDt9LmFjZS1tZXJiaXZvcmUgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjojOTkwMDAwO30uYWNlLW1lcmJpdm9yZSAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkM2RjA5OyAgICBib3JkZXItY29sb3I6ICNFNkUxREM7fS5hY2UtbWVyYml2b3JlIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0ZDNkYwOTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzhERkYwQTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9jb21tZW50IHsgIGZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiNBRDJFQTQ7fS5hY2UtbWVyYml2b3JlIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiNGQzZGMDk7fS5hY2UtbWVyYml2b3JlIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6I0ZGRkY4OTt9LmFjZS1tZXJiaXZvcmUgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-merbivore_soft-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL21lcmJpdm9yZV9zb2Z0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1tZXJiaXZvcmUtc29mdCIsYi5jc3NUZXh0PSIuYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUMxQzFDO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogI0U2RTFEQzt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRkZGRkY7fSAuYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6ICM0OTQ5NDk7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgIzQwNDA0MDt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICMzMzM0MzU7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICM0OTQ5NDk7fSAgICAgICAuYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiAjNDA0MDQwO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojRkM4MDNBO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY29uc3RhbnQgeyAgY29sb3I6IzY4QzFEODt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojRTFDNTgyO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkgeyAgY29sb3I6IzhFQzY1Rjt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiM3RkM1Nzg7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjojRkUzODM4O30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7ICBjb2xvcjojRkZGRkZGO2JhY2tncm91bmQtY29sb3I6I0ZFMzgzODt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkM4MDNBOyAgICBib3JkZXItY29sb3I6ICNFNkUxREM7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzhFQzY1Rjt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2NvbW1lbnQgeyAgZm9udC1zdHlsZTppdGFsaWM7Y29sb3I6I0FDNEJCODt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21ldGEgeyAgZm9udC1zdHlsZTppdGFsaWM7Y29sb3I6I0FDNEJCODt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjojRkM4MDNBO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6I0VBRjFBMzt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-merbivore_soft.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvbWVyYml2b3JlX3NvZnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLW1lcmJpdm9yZS1zb2Z0IixiLmNzc1RleHQ9Ii5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMxQzFDMUM7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjRTZFMURDO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0ZGRkZGRjt9IC5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzQ5NDk0OTt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogIzMzMzQzNTt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzQ5NDk0OTt9ICAgICAgIC5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICM0MDQwNDA7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNGQzgwM0E7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jb25zdGFudCB7ICBjb2xvcjojNjhDMUQ4O30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNFMUM1ODI7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7ICBjb2xvcjojOEVDNjVGO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6IzdGQzU3ODt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNGRTM4Mzg7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHsgIGNvbG9yOiNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjojRkUzODM4O30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICNGQzgwM0E7ICAgIGJvcmRlci1jb2xvcjogI0U2RTFEQzt9LmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX3N0cmluZyB7ICBjb2xvcjojOEVDNjVGO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY29tbWVudCB7ICBmb250LXN0eWxlOml0YWxpYztjb2xvcjojQUM0QkI4O30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWV0YSB7ICBmb250LXN0eWxlOml0YWxpYztjb2xvcjojQUM0QkI4O30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiNGQzgwM0E7fS5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjojRUFGMUEzO30uYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-monokai-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL21vbm9rYWkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLW1vbm9rYWkiLGIuY3NzVGV4dD0iLmFjZS1tb25va2FpIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1tb25va2FpIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLW1vbm9rYWkgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLW1vbm9rYWkgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtbW9ub2thaSAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMyNzI4MjI7fS5hY2UtbW9ub2thaSAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICNGOEY4RjI7fS5hY2UtbW9ub2thaSAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNGOEY4RjA7fS5hY2UtbW9ub2thaSAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0Y4RjhGMDt9IC5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiAjNDk0ODNFO30uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1tb25va2FpIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCAjNDk0ODNFO30uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiAjNDk0ODNFO30uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICM0OTQ4M0U7fSAgICAgICAuYWNlLW1vbm9rYWkgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICM0OTQ4M0U7fS5hY2UtbW9ub2thaSAuYWNlX2tleXdvcmQgeyAgY29sb3I6I0Y5MjY3Mjt9LmFjZS1tb25va2FpIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNBRTgxRkY7fS5hY2UtbW9ub2thaSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiNBRTgxRkY7fS5hY2UtbW9ub2thaSAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0Y4RjhGMDtiYWNrZ3JvdW5kLWNvbG9yOiNGOTI2NzI7fS5hY2UtbW9ub2thaSAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQgeyAgY29sb3I6I0Y4RjhGMDtiYWNrZ3JvdW5kLWNvbG9yOiNBRTgxRkY7fS5hY2UtbW9ub2thaSAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQTZFMjJFOyAgICBib3JkZXItY29sb3I6ICNGOEY4RjI7fS5hY2UtbW9ub2thaSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM2NkQ5RUY7fS5hY2UtbW9ub2thaSAuYWNlX3N0cmluZyB7ICBjb2xvcjojRTZEQjc0O30uYWNlLW1vbm9rYWkgLmFjZV9jb21tZW50IHsgIGNvbG9yOiM3NTcxNUU7fS5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiNBNkUyMkU7fS5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0E2RTIyRTt9LmFjZS1tb25va2FpIC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-monokai.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvbW9ub2thaSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMCxiLmNzc0NsYXNzPSJhY2UtbW9ub2thaSIsYi5jc3NUZXh0PSIuYWNlLW1vbm9rYWkgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLW1vbm9rYWkgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtbW9ub2thaSAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtbW9ub2thaSAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1tb25va2FpIC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogIzI3MjgyMjt9LmFjZS1tb25va2FpIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogI0Y4RjhGMjt9LmFjZS1tb25va2FpIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y4RjhGMDt9LmFjZS1tb25va2FpIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRjhGOEYwO30gLmFjZS1tb25va2FpIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6ICM0OTQ4M0U7fS5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkICM0OTQ4M0U7fS5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICM0OTQ4M0U7fS5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzQ5NDgzRTt9ICAgICAgIC5hY2UtbW9ub2thaSAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogIzQ5NDgzRTt9LmFjZS1tb25va2FpIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojRjkyNjcyO30uYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6I0FFODFGRjt9LmFjZS1tb25va2FpIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6I0FFODFGRjt9LmFjZS1tb25va2FpIC5hY2VfaW52YWxpZCB7ICBjb2xvcjojRjhGOEYwO2JhY2tncm91bmQtY29sb3I6I0Y5MjY3Mjt9LmFjZS1tb25va2FpIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7ICBjb2xvcjojRjhGOEYwO2JhY2tncm91bmQtY29sb3I6I0FFODFGRjt9LmFjZS1tb25va2FpIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICNBNkUyMkU7ICAgIGJvcmRlci1jb2xvcjogI0Y4RjhGMjt9LmFjZS1tb25va2FpIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzY2RDlFRjt9LmFjZS1tb25va2FpIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiNFNkRCNzQ7fS5hY2UtbW9ub2thaSAuYWNlX2NvbW1lbnQgeyAgY29sb3I6Izc1NzE1RTt9LmFjZS1tb25va2FpIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6I0E2RTIyRTt9LmFjZS1tb25va2FpIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojQTZFMjJFO30uYWNlLW1vbm9rYWkgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-mono_industrial-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL21vbm9faW5kdXN0cmlhbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMCxiLmNzc0NsYXNzPSJhY2UtbW9uby1pbmR1c3RyaWFsIixiLmNzc1RleHQ9Ii5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogIzIyMkMyODt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjRkZGRkZGO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRkZGRkZGO30gLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiYSgxNDUsIDE1MywgMTQ4LCAwLjQwKTt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTAyLCAxMDgsIDEwNCwgMC41MCk7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgxMiwgMTMsIDEyLCAwLjI1KTt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ1LCAxNTMsIDE0OCwgMC40MCk7fSAgICAgICAuYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiYSgxMDIsIDEwOCwgMTA0LCAwLjUwKTt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNBMzlFNjQ7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6I0E4QjNBQjt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9jb25zdGFudCB7ICBjb2xvcjojRTk4ODAwO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiNFOTg4MDA7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfaW52YWxpZCB7ICBjb2xvcjojRkZGRkZGO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTMsIDAsIDAsIDAuNjgpO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQThCM0FCOyAgICBib3JkZXItY29sb3I6ICNGRkZGRkY7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzU4OEU2MDt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9jb21tZW50IHsgIGNvbG9yOiM2NjZDNjg7YmFja2dyb3VuZC1jb2xvcjojMTUxQzE5O30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX3ZhcmlhYmxlLmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojNjQ4QkQyO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiM5MDk5OTM7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZW50aXR5LmFjZV9uYW1lIHsgIGNvbG9yOiM1Nzc4QjY7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojQThCM0FCO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-mono_industrial.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvbW9ub19pbmR1c3RyaWFsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1tb25vLWluZHVzdHJpYWwiLGIuY3NzVGV4dD0iLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyQzI4O30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICNGRkZGRkY7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRkZGRkY7fSAuYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiByZ2JhKDE0NSwgMTUzLCAxNDgsIDAuNDApO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMDIsIDEwOCwgMTA0LCAwLjUwKTt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiByZ2JhKDEyLCAxMywgMTIsIDAuMjUpO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDUsIDE1MywgMTQ4LCAwLjQwKTt9ICAgICAgIC5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2JhKDEwMiwgMTA4LCAxMDQsIDAuNTApO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2tleXdvcmQgeyAgY29sb3I6I0EzOUU2NDt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjojQThCM0FCO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiNFOTg4MDA7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6I0U5ODgwMDt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MywgMCwgMCwgMC42OCk7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICNBOEIzQUI7ICAgIGJvcmRlci1jb2xvcjogI0ZGRkZGRjt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojNTg4RTYwO30uYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2NvbW1lbnQgeyAgY29sb3I6IzY2NkM2ODtiYWNrZ3JvdW5kLWNvbG9yOiMxNTFDMTk7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiM2NDhCRDI7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6IzkwOTk5Mzt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9lbnRpdHkuYWNlX25hbWUgeyAgY29sb3I6IzU3NzhCNjt9LmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNBOEIzQUI7fS5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-pastel_on_dark-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3Bhc3RlbF9vbl9kYXJrIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1wYXN0ZWwtb24tZGFyayIsYi5jc3NUZXh0PSIuYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMkMyODI4O30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogIzhGOTM4Rjt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNBN0E3QTc7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBN0E3QTc7fSAuYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYmEoMjIxLCAyNDAsIDI1NSwgMC4yMCk7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMzEpO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWRfd29yZCB7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIyMSwgMjQwLCAyNTUsIDAuMjApO30gICAgICAgLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2tleXdvcmQgeyAgY29sb3I6Izc1N2FEODt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHsgIGNvbG9yOiM3OTc4Nzg7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb25zdGFudCB7ICBjb2xvcjojNEZCN0M1O30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNERThFMzA7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojQ0NDQ0NDO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfaW52YWxpZCB7ICBjb2xvcjojRjhGOEY4O2JhY2tncm91bmQtY29sb3I6cmdiYSg4NiwgNDUsIDg2LCAwLjc1KTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2ludmFsaWQuYWNlX2lsbGVnYWwgeyAgY29sb3I6I0Y4RjhGODtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoODYsIDQ1LCA4NiwgMC43NSk7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHsgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6I0QyQThBMTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzU3YUQ4OyAgICBib3JkZXItY29sb3I6ICM4RjkzOEY7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojQUVCMkY4O30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiM2NkE5Njg7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjojRTlDMDYyO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfY29tbWVudCB7ICBjb2xvcjojQTZDNkZGO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6I0JFQkY1NTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX3ZhcmlhYmxlLmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojQzFDMTQ0O30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfeG1sX3BlIHsgIGNvbG9yOiM0OTQ5NDk7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-pastel_on_dark.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvcGFzdGVsX29uX2RhcmsiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLXBhc3RlbC1vbi1kYXJrIixiLmNzc1RleHQ9Ii5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMyQzI4Mjg7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjOEY5MzhGO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0E3QTdBNzt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0E3QTdBNzt9IC5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiYSgyMjEsIDI0MCwgMjU1LCAwLjIwKTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzMSk7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjIxLCAyNDAsIDI1NSwgMC4yMCk7fSAgICAgICAuYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojNzU3YUQ4O30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6Izc5Nzg3ODt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiM0RkI3QzU7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6I0RFOEUzMDt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiNDQ0NDQ0M7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNGOEY4Rjg7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDg2LCA0NSwgODYsIDAuNzUpO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfaW52YWxpZC5hY2VfaWxsZWdhbCB7ICBjb2xvcjojRjhGOEY4O2JhY2tncm91bmQtY29sb3I6cmdiYSg4NiwgNDUsIDg2LCAwLjc1KTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQgeyAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXN0eWxlOml0YWxpYztjb2xvcjojRDJBOEExO30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICM3NTdhRDg7ICAgIGJvcmRlci1jb2xvcjogIzhGOTM4Rjt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNBRUIyRjg7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzY2QTk2ODt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOiNFOUMwNjI7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb21tZW50IHsgIGNvbG9yOiNBNkM2RkY7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV92YXJpYWJsZSB7ICBjb2xvcjojQkVCRjU1O30uYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNDMUMxNDQ7fS5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV94bWxfcGUgeyAgY29sb3I6IzQ5NDk0OTt9LmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-solarized_dark-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3NvbGFyaXplZF9kYXJrIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS1zb2xhcml6ZWQtZGFyayIsYi5jc3NUZXh0PSIuYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAyQjM2O30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogIzkzQTFBMTt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNEMzAxMDI7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNEMzAxMDI7fSAuYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6ICMwNzM2NDI7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDcsIDE2MSwgMTYxLCAwLjUwKTt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICMwNzM2NDI7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICMwNzM2NDI7fSAgICAgICAuYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2JhKDE0NywgMTYxLCAxNjEsIDAuNTApO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojODU5OTAwO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNCNTg5MDA7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojRDMzNjgyO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICMyNjhCRDI7ICAgIGJvcmRlci1jb2xvcjogIzkzQTFBMTt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiMyNjhCRDI7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzJBQTE5ODt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOiNEMzAxMDI7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9jb21tZW50IHsgIGZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiM2NTdCODM7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV92YXJpYWJsZS5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IzI2OEJEMjt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiM5M0ExQTE7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiMyNjhCRDI7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-solarized_dark.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvc29sYXJpemVkX2RhcmsiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLXNvbGFyaXplZC1kYXJrIixiLmNzc1RleHQ9Ii5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMwMDJCMzY7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjOTNBMUExO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0QzMDEwMjt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0QzMDEwMjt9IC5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzA3MzY0Mjt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0NywgMTYxLCAxNjEsIDAuNTApO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogIzA3MzY0Mjt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzA3MzY0Mjt9ICAgICAgIC5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6IHJnYmEoMTQ3LCAxNjEsIDE2MSwgMC41MCk7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiM4NTk5MDA7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6I0I1ODkwMDt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiNEMzM2ODI7fS5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzI2OEJEMjsgICAgYm9yZGVyLWNvbG9yOiAjOTNBMUExO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzI2OEJEMjt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3N0cmluZyB7ICBjb2xvcjojMkFBMTk4O30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAgeyAgY29sb3I6I0QzMDEwMjt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2NvbW1lbnQgeyAgZm9udC1zdHlsZTppdGFsaWM7Y29sb3I6IzY1N0I4Mzt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3ZhcmlhYmxlLmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojMjY4QkQyO30uYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6IzkzQTFBMTt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzI2OEJEMjt9LmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-solarized_light-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3NvbGFyaXplZF9saWdodCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMSxiLmNzc0NsYXNzPSJhY2Utc29sYXJpemVkLWxpZ2h0IixiLmNzc1RleHQ9Ii5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogI0ZERjZFMzt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjNTg2RTc1O30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICMwMDAwMDA7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDAwMDAwO30gLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzA3MzY0Mjt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ3LCAxNjEsIDE2MSwgMC41MCk7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogI0VFRThENTt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICMwNzM2NDI7fSAgICAgICAuYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiYSgxNDcsIDE2MSwgMTYxLCAwLjUwKTt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiM4NTk5MDA7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNCNTg5MDA7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6I0QzMzY4Mjt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzI2OEJEMjsgICAgYm9yZGVyLWNvbG9yOiAjNTg2RTc1O30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiMyNjhCRDI7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiMyQUExOTg7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAgeyAgY29sb3I6I0QzMDEwMjt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9jb21tZW50IHsgIGNvbG9yOiM5M0ExQTE7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiMyNjhCRDI7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6IzkzQTFBMTt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiMyNjhCRDI7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-solarized_light.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvc29sYXJpemVkX2xpZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSExLGIuY3NzQ2xhc3M9ImFjZS1zb2xhcml6ZWQtbGlnaHQiLGIuY3NzVGV4dD0iLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkRGNkUzO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICM1ODZFNzU7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzAwMDAwMDt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7fSAuYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiAjMDczNjQyO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDcsIDE2MSwgMTYxLCAwLjUwKTt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiAjRUVFOEQ1O30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzA3MzY0Mjt9ICAgICAgIC5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2JhKDE0NywgMTYxLCAxNjEsIDAuNTApO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2tleXdvcmQgeyAgY29sb3I6Izg1OTkwMDt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6I0I1ODkwMDt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojRDMzNjgyO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjY4QkQyOyAgICBib3JkZXItY29sb3I6ICM1ODZFNzU7fS5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzI2OEJEMjt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzJBQTE5ODt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjojRDMwMTAyO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2NvbW1lbnQgeyAgY29sb3I6IzkzQTFBMTt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV92YXJpYWJsZS5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IzI2OEJEMjt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjojOTNBMUExO30uYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzI2OEJEMjt9LmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-textmate-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3RleHRtYXRlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IixiLmlzRGFyaz0hMSxiLmNzc0NsYXNzPSJhY2UtdG0iLGIuY3NzVGV4dD0iLmFjZS10bSAuYWNlX2VkaXRvciB7ICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTU5LCAxNTksIDE1OSk7fS5hY2UtdG0gLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtdG0gLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLXRtIC5hY2VfcHJpbnRfbWFyZ2luIHsgIHdpZHRoOiAxcHg7ICBiYWNrZ3JvdW5kOiAjZThlOGU4O30uYWNlLXRtIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwQTI7fS5hY2UtdG0gLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDt9LmFjZS10bSAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsYWNrO30uYWNlLXRtIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9ICAgICAgICAuYWNlLXRtIC5hY2VfbGluZSAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2tleXdvcmQgeyAgY29sb3I6IGJsdWU7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2J1aWxkaW4geyAgY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiByZ2IoODgsIDkyLCAyNDYpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHsgIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfaW52YWxpZCB7ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTUzLCAwLCAwKTsgIGNvbG9yOiB3aGl0ZTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjogcmdiKDYwLCA3NiwgMTE0KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7ICBjb2xvcjogcmdiKDYsIDE1MCwgMTQpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsLmFjZS10bSAuYWNlX2xpbmUgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7ICBjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHsgIGNvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiByZ2IoMywgMTA2LCA3KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb21tZW50IHsgIGNvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb21tZW50LmFjZV9kb2MgeyAgY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcgeyAgY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjogcmdiKDAsIDAsIDIwNSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3htbF9wZSB7ICBjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7fS5hY2UtdG0gLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiAjMDAwMEEyO30uYWNlLXRtIC5hY2VfbWFya3VwLmFjZV9tYXJrdXBpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLXRtIC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHsgIGNvbG9yOiByZ2IoMTIsIDcsIDI1NSk7fS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX2xpc3QgeyAgY29sb3I6cmdiKDE4NSwgNiwgMTQ0KTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigyNTIsIDI1NSwgMCk7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGFjayB7ICBiYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNyk7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTt9LmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjpyZ2IoMjgsIDIsIDI1NSk7fS5hY2UtdG0gLmFjZV9zdHJpbmcuYWNlX3JlZ2V4IHsgIGNvbG9yOiByZ2IoMjU1LCAwLCAwKX0iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe2FjZS5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-textmate.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdGV4dG1hdGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiLGIuaXNEYXJrPSExLGIuY3NzQ2xhc3M9ImFjZS10bSIsYi5jc3NUZXh0PSIuYWNlLXRtIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10bSAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS10bSAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdG0gLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG0gLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDBBMjt9LmFjZS10bSAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0O30uYWNlLXRtIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7fS5hY2UtdG0gLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30gICAgICAgIC5hY2UtdG0gLmFjZV9saW5lIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2IoMTkxLCAxOTEsIDE5MSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjogYmx1ZTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7ICBjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6IHJnYig4OCwgOTIsIDI0Nik7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkgeyAgY29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9pbnZhbGlkIHsgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNTMsIDAsIDApOyAgY29sb3I6IHdoaXRlO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSwuYWNlLXRtIC5hY2VfbGluZSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzIHsgIGNvbG9yOiByZ2IoMTA5LCAxMjEsIDIyMik7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IHJnYigxMDQsIDExOCwgMTM1KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9zdHJpbmcgeyAgY29sb3I6IHJnYigzLCAxMDYsIDcpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQgeyAgY29sb3I6IHJnYig3NiwgMTM2LCAxMDcpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7ICBjb2xvcjogcmdiKDAsIDEwMiwgMjU1KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7ICBjb2xvcjogcmdiKDEyOCwgMTU5LCAxOTEpO30uYWNlLXRtIC5hY2VfbGluZSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiByZ2IoMCwgMCwgMjA1KTt9LmFjZS10bSAuYWNlX2xpbmUgLmFjZV92YXJpYWJsZSB7ICBjb2xvcjogcmdiKDQ5LCAxMzIsIDE0OSk7fS5hY2UtdG0gLmFjZV9saW5lIC5hY2VfeG1sX3BlIHsgIGNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTt9LmFjZS10bSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6ICMwMDAwQTI7fS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX21hcmt1cGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6IHJnYigxMiwgNywgMjU1KTt9LmFjZS10bSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7ICBjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHsgIGJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAxOTIpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpOyAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwMCwgMjAwLCAyNTApO30uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOnJnYigyOCwgMiwgMjU1KTt9LmFjZS10bSAuYWNlX3N0cmluZy5hY2VfcmVnZXggeyAgY29sb3I6IHJnYigyNTUsIDAsIDApfSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7d2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3RvbW9ycm93IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSExLGIuY3NzQ2xhc3M9ImFjZS10b21vcnJvdyIsYi5jc3NUZXh0PSIuYWNlLXRvbW9ycm93IC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10b21vcnJvdyAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS10b21vcnJvdyAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdG9tb3Jyb3cgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG9tb3Jyb3cgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO30uYWNlLXRvbW9ycm93IC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogIzRENEQ0Qzt9LmFjZS10b21vcnJvdyAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNBRUFGQUQ7fS5hY2UtdG9tb3Jyb3cgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBRUFGQUQ7fSAuYWNlLXRvbW9ycm93IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6ICNENkQ2RDY7fS5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS10b21vcnJvdyAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgI0QxRDFEMTt9LmFjZS10b21vcnJvdyAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICNFRkVGRUY7fS5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICNENkQ2RDY7fSAgICAgICAuYWNlLXRvbW9ycm93IC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiAjRDFEMUQxO30uYWNlLXRvbW9ycm93IC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojODk1OUE4O30uYWNlLXRvbW9ycm93IC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IzNFOTk5Rjt9LmFjZS10b21vcnJvdyAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojRjU4NzFGO30uYWNlLXRvbW9ycm93IC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6I0Y1ODcxRjt9LmFjZS10b21vcnJvdyAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNDODI4Mjk7fS5hY2UtdG9tb3Jyb3cgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHsgIGNvbG9yOiNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjojODk1OUE4O30uYWNlLXRvbW9ycm93IC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjcxQUU7ICAgIGJvcmRlci1jb2xvcjogIzRENEQ0Qzt9LmFjZS10b21vcnJvdyAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM0MjcxQUU7fS5hY2UtdG9tb3Jyb3cgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzcxOEMwMDt9LmFjZS10b21vcnJvdyAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOiNDODI4Mjk7fS5hY2UtdG9tb3Jyb3cgLmFjZV9jb21tZW50IHsgIGNvbG9yOiM4RTkwOEM7fS5hY2UtdG9tb3Jyb3cgLmFjZV92YXJpYWJsZSB7ICBjb2xvcjojQzgyODI5O30uYWNlLXRvbW9ycm93IC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiNDODI4Mjk7fS5hY2UtdG9tb3Jyb3cgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjojQzgyODI5O30uYWNlLXRvbW9ycm93IC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojNDI3MUFFO30uYWNlLXRvbW9ycm93IC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLXRvbW9ycm93IC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHsgIGNvbG9yOiM3MThDMDA7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3ciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITEsYi5jc3NDbGFzcz0iYWNlLXRvbW9ycm93IixiLmNzc1RleHQ9Ii5hY2UtdG9tb3Jyb3cgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXRvbW9ycm93IC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXRvbW9ycm93IC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS10b21vcnJvdyAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS10b21vcnJvdyAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7fS5hY2UtdG9tb3Jyb3cgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjNEQ0RDRDO30uYWNlLXRvbW9ycm93IC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0FFQUZBRDt9LmFjZS10b21vcnJvdyAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0FFQUZBRDt9IC5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogI0Q2RDZENjt9LmFjZS10b21vcnJvdyAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXRvbW9ycm93IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCAjRDFEMUQxO30uYWNlLXRvbW9ycm93IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogI0VGRUZFRjt9LmFjZS10b21vcnJvdyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgI0Q2RDZENjt9ICAgICAgIC5hY2UtdG9tb3Jyb3cgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICNEMUQxRDE7fS5hY2UtdG9tb3Jyb3cgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiM4OTU5QTg7fS5hY2UtdG9tb3Jyb3cgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjojM0U5OTlGO30uYWNlLXRvbW9ycm93IC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNGNTg3MUY7fS5hY2UtdG9tb3Jyb3cgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojRjU4NzFGO30uYWNlLXRvbW9ycm93IC5hY2VfaW52YWxpZCB7ICBjb2xvcjojRkZGRkZGO2JhY2tncm91bmQtY29sb3I6I0M4MjgyOTt9LmFjZS10b21vcnJvdyAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQgeyAgY29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM4OTU5QTg7fS5hY2UtdG9tb3Jyb3cgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyNzFBRTsgICAgYm9yZGVyLWNvbG9yOiAjNEQ0RDRDO30uYWNlLXRvbW9ycm93IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzQyNzFBRTt9LmFjZS10b21vcnJvdyAuYWNlX3N0cmluZyB7ICBjb2xvcjojNzE4QzAwO30uYWNlLXRvbW9ycm93IC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAgeyAgY29sb3I6I0M4MjgyOTt9LmFjZS10b21vcnJvdyAuYWNlX2NvbW1lbnQgeyAgY29sb3I6IzhFOTA4Qzt9LmFjZS10b21vcnJvdyAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiNDODI4Mjk7fS5hY2UtdG9tb3Jyb3cgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6I0M4MjgyOTt9LmFjZS10b21vcnJvdyAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiNDODI4Mjk7fS5hY2UtdG9tb3Jyb3cgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM0MjcxQUU7fS5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6IzcxOEMwMDt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow_night-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3RvbW9ycm93X25pZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS10b21vcnJvdy1uaWdodCIsYi5jc3NUZXh0PSIuYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUQxRjIxO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogI0M1QzhDNjt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNBRUFGQUQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBRUFGQUQ7fSAuYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6ICMzNzNCNDE7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgIzRCNEU1NTt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICMyODJBMkU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICMzNzNCNDE7fSAgICAgICAuYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiAjNEI0RTU1O30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojQjI5NEJCO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IzhBQkVCNzt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojREU5MzVGO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6I0RFOTM1Rjt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0NFRDJDRjtiYWNrZ3JvdW5kLWNvbG9yOiNERjVGNUY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHsgIGNvbG9yOiNDRUQyQ0Y7YmFja2dyb3VuZC1jb2xvcjojQjc5OEJGO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICM4MUEyQkU7ICAgIGJvcmRlci1jb2xvcjogI0M1QzhDNjt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM4MUEyQkU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9zdHJpbmcgeyAgY29sb3I6I0I1QkQ2ODt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOiNDQzY2NjY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9jb21tZW50IHsgIGNvbG9yOiM5Njk4OTY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV92YXJpYWJsZSB7ICBjb2xvcjojQ0M2NjY2O30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiNDQzY2NjY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjojQ0M2NjY2O30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojODFBMkJFO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHsgIGNvbG9yOiNCNUJENjg7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow_night.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLXRvbW9ycm93LW5pZ2h0IixiLmNzc1RleHQ9Ii5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMxRDFGMjE7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjQzVDOEM2O30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0FFQUZBRDt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0FFQUZBRDt9IC5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzM3M0I0MTt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCAjNEI0RTU1O30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogIzI4MkEyRTt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzM3M0I0MTt9ICAgICAgIC5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICM0QjRFNTU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNCMjk0QkI7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjojOEFCRUI3O30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNERTkzNUY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojREU5MzVGO30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfaW52YWxpZCB7ICBjb2xvcjojQ0VEMkNGO2JhY2tncm91bmQtY29sb3I6I0RGNUY1Rjt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQgeyAgY29sb3I6I0NFRDJDRjtiYWNrZ3JvdW5kLWNvbG9yOiNCNzk4QkY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzgxQTJCRTsgICAgYm9yZGVyLWNvbG9yOiAjQzVDOEM2O30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzgxQTJCRTt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3N0cmluZyB7ICBjb2xvcjojQjVCRDY4O30uYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAgeyAgY29sb3I6I0NDNjY2Njt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2NvbW1lbnQgeyAgY29sb3I6Izk2OTg5Njt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiNDQzY2NjY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6I0NDNjY2Njt9LmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiNDQzY2NjY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM4MUEyQkU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6I0I1QkQ2ODt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow_night_blue-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3RvbW9ycm93X25pZ2h0X2JsdWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUiLGIuY3NzVGV4dD0iLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMwMDI0NTE7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICNGRkZGRkY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0ZGRkZGRjt9IC5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiAjMDAzRjhFO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCAjNDA0RjdEO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiAjMDAzNDZFO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICMwMDNGOEU7fSAgICAgICAuYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICM0MDRGN0Q7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2tleXdvcmQgeyAgY29sb3I6I0VCQkJGRjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6Izk5RkZGRjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNGRkM1OEY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiNGRkM1OEY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNGOTlEQTU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQgeyAgY29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNFQkJCRkY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQkJEQUZGOyAgICBib3JkZXItY29sb3I6ICNGRkZGRkY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNCQkRBRkY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3N0cmluZyB7ICBjb2xvcjojRDFGMUE5O30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjojRkY5REE0O30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9jb21tZW50IHsgIGNvbG9yOiM3Mjg1Qjc7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiNGRjlEQTQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjojRkY5REE0O30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjojRkY5REE0O30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNCQkRBRkY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHsgIGNvbG9yOiNEMUYxQTk7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow_night_blue.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHRfYmx1ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMCxiLmNzc0NsYXNzPSJhY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSIsYi5jc3NUZXh0PSIuYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogIzAwMjQ1MTt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogI0ZGRkZGRjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRkZGRkZGO30gLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6ICMwMDNGOEU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkICM0MDRGN0Q7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICMwMDM0NkU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzAwM0Y4RTt9ICAgICAgIC5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogIzQwNEY3RDt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojRUJCQkZGO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjojOTlGRkZGO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6I0ZGQzU4Rjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6I0ZGQzU4Rjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfaW52YWxpZCB7ICBjb2xvcjojRkZGRkZGO2JhY2tncm91bmQtY29sb3I6I0Y5OURBNTt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7ICBjb2xvcjojRkZGRkZGO2JhY2tncm91bmQtY29sb3I6I0VCQkJGRjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICNCQkRBRkY7ICAgIGJvcmRlci1jb2xvcjogI0ZGRkZGRjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0JCREFGRjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiNEMUYxQTk7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOiNGRjlEQTQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2NvbW1lbnQgeyAgY29sb3I6IzcyODVCNzt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6I0ZGOURBNDt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiNGRjlEQTQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiNGRjlEQTQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0JCREFGRjt9LmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6I0QxRjFBOTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow_night_bright-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3RvbW9ycm93X25pZ2h0X2JyaWdodCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGEsYixjKXtiLmlzRGFyaz0hMCxiLmNzc0NsYXNzPSJhY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IixiLmNzc1RleHQ9Ii5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9lZGl0b3IuYWNlX2ZvY3VzIHsgIGJvcmRlcjogMnB4IHNvbGlkICMzMjdmYmQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2Vfc2Nyb2xsZXIgeyAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjREVERURFO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICM5RjlGOUY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUgeyAgYm9yZGVyLWxlZnQ6IDBweDsgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOUY5RjlGO30gLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzQyNDI0Mjt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHsgIG1hcmdpbjogLTFweCAwIDAgLTFweDsgIGJvcmRlcjogMXB4IHNvbGlkICMzNDM0MzQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogIzJBMkEyQTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICM0MjQyNDI7fSAgICAgICAuYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogIzM0MzQzNDt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNDMzk3RDg7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IzcwQzBCMTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UgeyAgY29sb3I6I0U3OEM0NTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojRTc4QzQ1O30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0NFRDJDRjtiYWNrZ3JvdW5kLWNvbG9yOiNERjVGNUY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7ICBjb2xvcjojQ0VEMkNGO2JhY2tncm91bmQtY29sb3I6I0I3OThCRjt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzdBQTZEQTsgICAgYm9yZGVyLWNvbG9yOiAjREVERURFO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM3QUE2REE7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiNCOUNBNEE7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAgeyAgY29sb3I6I0Q1NEU1Mzt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9jb21tZW50IHsgIGNvbG9yOiM5Njk4OTY7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfdmFyaWFibGUgeyAgY29sb3I6I0Q1NEU1Mzt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6I0Q1NEU1Mzt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBjb2xvcjojRDU0RTUzO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzdBQTZEQTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHsgIGNvbG9yOiNCOUNBNEE7fSI7dmFyIGQ9YSgiLi4vbGliL2RvbSIpO2QuaW1wb3J0Q3NzU3RyaW5nKGIuY3NzVGV4dCxiLmNzc0NsYXNzKX0pLGZ1bmN0aW9uKCl7YWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sZnVuY3Rpb24oYSl7d2luZG93LmFjZXx8KHdpbmRvdy5hY2U9e30pO2Zvcih2YXIgYiBpbiBhKWEuaGFzT3duUHJvcGVydHkoYikmJihhY2VbYl09YVtiXSl9KX0oKQ==]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow_night_bright.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHRfYnJpZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS10b21vcnJvdy1uaWdodC1icmlnaHQiLGIuY3NzVGV4dD0iLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9ndXR0ZXIgeyAgYmFja2dyb3VuZDogI2U4ZThlODsgIGNvbG9yOiAjMzMzO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX3RleHQtbGF5ZXIgeyAgY3Vyc29yOiB0ZXh0OyAgY29sb3I6ICNERURFREU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzlGOUY5Rjt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM5RjlGOUY7fSAuYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7ICBiYWNrZ3JvdW5kOiAjNDI0MjQyO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgIzM0MzQzNDt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmVfbGluZSB7ICBiYWNrZ3JvdW5kOiAjMkEyQTJBO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzQyNDI0Mjt9ICAgICAgIC5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiAjMzQzNDM0O30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2tleXdvcmQgeyAgY29sb3I6I0MzOTdEODt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjojNzBDMEIxO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojRTc4QzQ1O30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiNFNzhDNDU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfaW52YWxpZCB7ICBjb2xvcjojQ0VEMkNGO2JhY2tncm91bmQtY29sb3I6I0RGNUY1Rjt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHsgIGNvbG9yOiNDRUQyQ0Y7YmFja2dyb3VuZC1jb2xvcjojQjc5OEJGO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjN0FBNkRBOyAgICBib3JkZXItY29sb3I6ICNERURFREU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzdBQTZEQTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdHJpbmcgeyAgY29sb3I6I0I5Q0E0QTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjojRDU0RTUzO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2NvbW1lbnQgeyAgY29sb3I6Izk2OTg5Njt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV92YXJpYWJsZSB7ICBjb2xvcjojRDU0RTUzO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjojRDU0RTUzO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiNENTRFNTM7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojN0FBNkRBO30uYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6I0I5Q0E0QTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXt3aW5kb3cucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow_night_eighties-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3RvbW9ycm93X25pZ2h0X2VpZ2h0aWVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyIsYi5jc3NUZXh0PSIuYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMkQyRDJEO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogI0NDQ0NDQzt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNDQ0NDQ0M7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNDQ0NDQ0M7fSAuYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6ICM1MTUxNTE7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgIzZBNkE2QTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICMzOTM5Mzk7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICM1MTUxNTE7fSAgICAgICAuYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiAjNkE2QTZBO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojQ0M5OUNDO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IgeyAgY29sb3I6IzY2Q0NDQzt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7ICBjb2xvcjojRjk5MTU3O30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6I0Y5OTE1Nzt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0NEQ0RDRDtiYWNrZ3JvdW5kLWNvbG9yOiNGMjc3N0E7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHsgIGNvbG9yOiNDRENEQ0Q7YmFja2dyb3VuZC1jb2xvcjojQ0M5OUNDO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICM2Njk5Q0M7ICAgIGJvcmRlci1jb2xvcjogI0NDQ0NDQzt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM2Njk5Q0M7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9zdHJpbmcgeyAgY29sb3I6Izk5Q0M5OTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2NvbW1lbnQgeyAgY29sb3I6Izk5OTk5OTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiNGMjc3N0E7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tZXRhLmFjZV90YWcgeyAgY29sb3I6I0YyNzc3QTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHsgIGNvbG9yOiNGMjc3N0E7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiM2Njk5Q0M7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6Izk5Q0M5OTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-tomorrow_night_eighties.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIixiLmNzc1RleHQ9Ii5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMyRDJEMkQ7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjQ0NDQ0NDO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0NDQ0NDQzt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0NDQ0NDQzt9IC5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzUxNTE1MTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCAjNkE2QTZBO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogIzM5MzkzOTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzUxNTE1MTt9ICAgICAgIC5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICM2QTZBNkE7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNDQzk5Q0M7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7ICBjb2xvcjojNjZDQ0NDO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHsgIGNvbG9yOiNGOTkxNTc7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7ICBjb2xvcjojRjk5MTU3O30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfaW52YWxpZCB7ICBjb2xvcjojQ0RDRENEO2JhY2tncm91bmQtY29sb3I6I0YyNzc3QTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQgeyAgY29sb3I6I0NEQ0RDRDtiYWNrZ3JvdW5kLWNvbG9yOiNDQzk5Q0M7fS5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogIzY2OTlDQzsgICAgYm9yZGVyLWNvbG9yOiAjQ0NDQ0NDO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzY2OTlDQzt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3N0cmluZyB7ICBjb2xvcjojOTlDQzk5O30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfY29tbWVudCB7ICBjb2xvcjojOTk5OTk5O30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfdmFyaWFibGUgeyAgY29sb3I6I0YyNzc3QTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjojRjI3NzdBO30uYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgY29sb3I6I0YyNzc3QTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6IzY2OTlDQzt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7ICBjb2xvcjojOTlDQzk5O30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-twilight-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3R3aWxpZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS10d2lsaWdodCIsYi5jc3NUZXh0PSIuYWNlLXR3aWxpZ2h0IC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS10d2lsaWdodCAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS10d2lsaWdodCAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdHdpbGlnaHQgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdHdpbGlnaHQgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTQxNDE0O30uYWNlLXR3aWxpZ2h0IC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogI0Y4RjhGODt9LmFjZS10d2lsaWdodCAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNBN0E3QTc7fS5hY2UtdHdpbGlnaHQgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBN0E3QTc7fSAuYWNlLXR3aWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6IHJnYmEoMjIxLCAyNDAsIDI1NSwgMC4yMCk7fS5hY2UtdHdpbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS10d2lsaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTt9LmFjZS10d2lsaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMzEpO30uYWNlLXR3aWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWRfd29yZCB7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIyMSwgMjQwLCAyNTUsIDAuMjApO30gICAgICAgLmFjZS10d2lsaWdodCAuYWNlX2ludmlzaWJsZSB7ICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTt9LmFjZS10d2lsaWdodCAuYWNlX2tleXdvcmQgeyAgY29sb3I6I0NEQTg2OTt9LmFjZS10d2lsaWdodCAuYWNlX2NvbnN0YW50IHsgIGNvbG9yOiNDRjZBNEM7fS5hY2UtdHdpbGlnaHQgLmFjZV9pbnZhbGlkLmFjZV9pbGxlZ2FsIHsgIGNvbG9yOiNGOEY4Rjg7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDg2LCA0NSwgODYsIDAuNzUpO30uYWNlLXR3aWxpZ2h0IC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7ICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiNEMkE4QTE7fS5hY2UtdHdpbGlnaHQgLmFjZV9zdXBwb3J0IHsgIGNvbG9yOiM5Qjg1OUQ7fS5hY2UtdHdpbGlnaHQgLmFjZV9mb2xkIHsgICAgYmFja2dyb3VuZC1jb2xvcjogI0FDODg1QjsgICAgYm9yZGVyLWNvbG9yOiAjRjhGOEY4O30uYWNlLXR3aWxpZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0RBRDA4NTt9LmFjZS10d2lsaWdodCAuYWNlX3N0cmluZyB7ICBjb2xvcjojOEY5RDZBO30uYWNlLXR3aWxpZ2h0IC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAgeyAgY29sb3I6I0U5QzA2Mjt9LmFjZS10d2lsaWdodCAuYWNlX2NvbW1lbnQgeyAgZm9udC1zdHlsZTppdGFsaWM7Y29sb3I6IzVGNUE2MDt9LmFjZS10d2lsaWdodCAuYWNlX3ZhcmlhYmxlIHsgIGNvbG9yOiM3NTg3QTY7fS5hY2UtdHdpbGlnaHQgLmFjZV94bWxfcGUgeyAgY29sb3I6IzQ5NDk0OTt9LmFjZS10d2lsaWdodCAuYWNlX21ldGEuYWNlX3RhZyB7ICBjb2xvcjojQUM4ODVCO30uYWNlLXR3aWxpZ2h0IC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojQUM4ODVCO30uYWNlLXR3aWxpZ2h0IC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30uYWNlLXR3aWxpZ2h0IC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHsgIGNvbG9yOiNDRjZBNEM7fS5hY2UtdHdpbGlnaHQgLmFjZV9tYXJrdXAuYWNlX2xpc3QgeyAgY29sb3I6I0Y5RUU5ODt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-twilight.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdHdpbGlnaHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLXR3aWxpZ2h0IixiLmNzc1RleHQ9Ii5hY2UtdHdpbGlnaHQgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXR3aWxpZ2h0IC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXR3aWxpZ2h0IC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS10d2lsaWdodCAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS10d2lsaWdodCAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMxNDE0MTQ7fS5hY2UtdHdpbGlnaHQgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjRjhGOEY4O30uYWNlLXR3aWxpZ2h0IC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0E3QTdBNzt9LmFjZS10d2lsaWdodCAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0E3QTdBNzt9IC5hY2UtdHdpbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogcmdiYSgyMjEsIDI0MCwgMjU1LCAwLjIwKTt9LmFjZS10d2lsaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXR3aWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO30uYWNlLXR3aWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzMSk7fS5hY2UtdHdpbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjIxLCAyNDAsIDI1NSwgMC4yMCk7fSAgICAgICAuYWNlLXR3aWxpZ2h0IC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO30uYWNlLXR3aWxpZ2h0IC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojQ0RBODY5O30uYWNlLXR3aWxpZ2h0IC5hY2VfY29uc3RhbnQgeyAgY29sb3I6I0NGNkE0Qzt9LmFjZS10d2lsaWdodCAuYWNlX2ludmFsaWQuYWNlX2lsbGVnYWwgeyAgY29sb3I6I0Y4RjhGODtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoODYsIDQ1LCA4NiwgMC43NSk7fS5hY2UtdHdpbGlnaHQgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHsgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6I0QyQThBMTt9LmFjZS10d2lsaWdodCAuYWNlX3N1cHBvcnQgeyAgY29sb3I6IzlCODU5RDt9LmFjZS10d2lsaWdodCAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQUM4ODVCOyAgICBib3JkZXItY29sb3I6ICNGOEY4Rjg7fS5hY2UtdHdpbGlnaHQgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojREFEMDg1O30uYWNlLXR3aWxpZ2h0IC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiM4RjlENkE7fS5hY2UtdHdpbGlnaHQgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjojRTlDMDYyO30uYWNlLXR3aWxpZ2h0IC5hY2VfY29tbWVudCB7ICBmb250LXN0eWxlOml0YWxpYztjb2xvcjojNUY1QTYwO30uYWNlLXR3aWxpZ2h0IC5hY2VfdmFyaWFibGUgeyAgY29sb3I6Izc1ODdBNjt9LmFjZS10d2lsaWdodCAuYWNlX3htbF9wZSB7ICBjb2xvcjojNDk0OTQ5O30uYWNlLXR3aWxpZ2h0IC5hY2VfbWV0YS5hY2VfdGFnIHsgIGNvbG9yOiNBQzg4NUI7fS5hY2UtdHdpbGlnaHQgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNBQzg4NUI7fS5hY2UtdHdpbGlnaHQgLmFjZV9tYXJrdXAuYWNlX3VuZGVybGluZSB7ICAgIHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5hY2UtdHdpbGlnaHQgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcgeyAgY29sb3I6I0NGNkE0Qzt9LmFjZS10d2lsaWdodCAuYWNlX21hcmt1cC5hY2VfbGlzdCB7ICBjb2xvcjojRjlFRTk4O30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-vibrant_ink-noconflict.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWNlLmRlZmluZSgiYWNlL3RoZW1lL3ZpYnJhbnRfaW5rIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYSxiLGMpe2IuaXNEYXJrPSEwLGIuY3NzQ2xhc3M9ImFjZS12aWJyYW50LWluayIsYi5jc3NUZXh0PSIuYWNlLXZpYnJhbnQtaW5rIC5hY2VfZWRpdG9yIHsgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTt9LmFjZS12aWJyYW50LWluayAuYWNlX2VkaXRvci5hY2VfZm9jdXMgeyAgYm9yZGVyOiAycHggc29saWQgIzMyN2ZiZDt9LmFjZS12aWJyYW50LWluayAuYWNlX2d1dHRlciB7ICBiYWNrZ3JvdW5kOiAjZThlOGU4OyAgY29sb3I6ICMzMzM7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9wcmludF9tYXJnaW4geyAgd2lkdGg6IDFweDsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9zY3JvbGxlciB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEYwRjBGO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfdGV4dC1sYXllciB7ICBjdXJzb3I6IHRleHQ7ICBjb2xvcjogI0ZGRkZGRjt9LmFjZS12aWJyYW50LWluayAuYWNlX2N1cnNvciB7ICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9jdXJzb3IuYWNlX292ZXJ3cml0ZSB7ICBib3JkZXItbGVmdDogMHB4OyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRkZGRkY7fSAuYWNlLXZpYnJhbnQtaW5rIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHsgIGJhY2tncm91bmQ6ICM2Njk5Q0M7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHsgIGJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KTt9LmFjZS12aWJyYW50LWluayAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQgeyAgbWFyZ2luOiAtMXB4IDAgMCAtMXB4OyAgYm9yZGVyOiAxcHggc29saWQgIzQwNDA0MDt9LmFjZS12aWJyYW50LWluayAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZV9saW5lIHsgIGJhY2tncm91bmQ6ICMzMzMzMzM7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZF93b3JkIHsgIGJvcmRlcjogMXB4IHNvbGlkICM2Njk5Q0M7fSAgICAgICAuYWNlLXZpYnJhbnQtaW5rIC5hY2VfaW52aXNpYmxlIHsgIGNvbG9yOiAjNDA0MDQwO30uYWNlLXZpYnJhbnQtaW5rIC5hY2Vfa2V5d29yZCB7ICBjb2xvcjojRkY2NjAwO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfY29uc3RhbnQgeyAgY29sb3I6IzMzOTk5OTt9LmFjZS12aWJyYW50LWluayAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHsgIGNvbG9yOiM5OUNDOTk7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9pbnZhbGlkIHsgIGNvbG9yOiNDQ0ZGMzM7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7ICBjb2xvcjojQ0NGRjMzO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDt9LmFjZS12aWJyYW50LWluayAuYWNlX2ZvbGQgeyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDQzAwOyAgICBib3JkZXItY29sb3I6ICNGRkZGRkY7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojRkZDQzAwO30uYWNlLXZpYnJhbnQtaW5rIC5hY2Vfc3RyaW5nIHsgIGNvbG9yOiM2NkZGMDA7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7ICBjb2xvcjojNDRCNENDO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfY29tbWVudCB7ICBjb2xvcjojOTkzM0NDO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUgeyAgZm9udC1zdHlsZTppdGFsaWM7Y29sb3I6Izk5Q0M5OTt9LmFjZS12aWJyYW50LWluayAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24geyAgY29sb3I6I0ZGQ0MwMDt9LmFjZS12aWJyYW50LWluayAuYWNlX21hcmt1cC5hY2VfdW5kZXJsaW5lIHsgICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ijt2YXIgZD1hKCIuLi9saWIvZG9tIik7ZC5pbXBvcnRDc3NTdHJpbmcoYi5jc3NUZXh0LGIuY3NzQ2xhc3MpfSksZnVuY3Rpb24oKXthY2UucmVxdWlyZShbImFjZS9hY2UiXSxmdW5jdGlvbihhKXt3aW5kb3cuYWNlfHwod2luZG93LmFjZT17fSk7Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKGFjZVtiXT1hW2JdKX0pfSgp]]></data>
	</file>
	<file>
	  <filename>/ace/src/theme-vibrant_ink.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdmlicmFudF9pbmsiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhLGIsYyl7Yi5pc0Rhcms9ITAsYi5jc3NDbGFzcz0iYWNlLXZpYnJhbnQtaW5rIixiLmNzc1RleHQ9Ii5hY2UtdmlicmFudC1pbmsgLmFjZV9lZGl0b3IgeyAgYm9yZGVyOiAycHggc29saWQgcmdiKDE1OSwgMTU5LCAxNTkpO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfZWRpdG9yLmFjZV9mb2N1cyB7ICBib3JkZXI6IDJweCBzb2xpZCAjMzI3ZmJkO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfZ3V0dGVyIHsgIGJhY2tncm91bmQ6ICNlOGU4ZTg7ICBjb2xvcjogIzMzMzt9LmFjZS12aWJyYW50LWluayAuYWNlX3ByaW50X21hcmdpbiB7ICB3aWR0aDogMXB4OyAgYmFja2dyb3VuZDogI2U4ZThlODt9LmFjZS12aWJyYW50LWluayAuYWNlX3Njcm9sbGVyIHsgIGJhY2tncm91bmQtY29sb3I6ICMwRjBGMEY7fS5hY2UtdmlicmFudC1pbmsgLmFjZV90ZXh0LWxheWVyIHsgIGN1cnNvcjogdGV4dDsgIGNvbG9yOiAjRkZGRkZGO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfY3Vyc29yIHsgIGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjt9LmFjZS12aWJyYW50LWluayAuYWNlX2N1cnNvci5hY2Vfb3ZlcndyaXRlIHsgIGJvcmRlci1sZWZ0OiAwcHg7ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0ZGRkZGRjt9IC5hY2UtdmlicmFudC1pbmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24geyAgYmFja2dyb3VuZDogIzY2OTlDQzt9LmFjZS12aWJyYW50LWluayAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAgeyAgYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7ICBtYXJnaW46IC0xcHggMCAwIC0xcHg7ICBib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlX2xpbmUgeyAgYmFja2dyb3VuZDogIzMzMzMzMzt9LmFjZS12aWJyYW50LWluayAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkX3dvcmQgeyAgYm9yZGVyOiAxcHggc29saWQgIzY2OTlDQzt9ICAgICAgIC5hY2UtdmlicmFudC1pbmsgLmFjZV9pbnZpc2libGUgeyAgY29sb3I6ICM0MDQwNDA7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9rZXl3b3JkIHsgIGNvbG9yOiNGRjY2MDA7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9jb25zdGFudCB7ICBjb2xvcjojMzM5OTk5O30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMgeyAgY29sb3I6Izk5Q0M5OTt9LmFjZS12aWJyYW50LWluayAuYWNlX2ludmFsaWQgeyAgY29sb3I6I0NDRkYzMztiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHsgIGNvbG9yOiNDQ0ZGMzM7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfZm9sZCB7ICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkNDMDA7ICAgIGJvcmRlci1jb2xvcjogI0ZGRkZGRjt9LmFjZS12aWJyYW50LWluayAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHsgIGNvbG9yOiNGRkNDMDA7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9zdHJpbmcgeyAgY29sb3I6IzY2RkYwMDt9LmFjZS12aWJyYW50LWluayAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHsgIGNvbG9yOiM0NEI0Q0M7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9jb21tZW50IHsgIGNvbG9yOiM5OTMzQ0M7fS5hY2UtdmlicmFudC1pbmsgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7ICBmb250LXN0eWxlOml0YWxpYztjb2xvcjojOTlDQzk5O30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7ICBjb2xvcjojRkZDQzAwO30uYWNlLXZpYnJhbnQtaW5rIC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUgeyAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30iO3ZhciBkPWEoIi4uL2xpYi9kb20iKTtkLmltcG9ydENzc1N0cmluZyhiLmNzc1RleHQsYi5jc3NDbGFzcyl9KSxmdW5jdGlvbigpe3dpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLGZ1bmN0aW9uKGEpe3dpbmRvdy5hY2V8fCh3aW5kb3cuYWNlPXt9KTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoYWNlW2JdPWFbYl0pfSl9KCk=]]></data>
	</file>
	<file>
	  <filename>/ace/src/worker-coffee.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOw0KDQp2YXIgY29uc29sZSA9IHsNCiAgICBsb2c6IGZ1bmN0aW9uKG1zZykgew0KICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZTogImxvZyIsIGRhdGE6IG1zZ30pOw0KICAgIH0NCn07DQp2YXIgd2luZG93ID0gew0KICAgIGNvbnNvbGU6IGNvbnNvbGUNCn07DQoNCnZhciBub3JtYWxpemVNb2R1bGUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkgew0KICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMNCiAgICBpZiAobW9kdWxlTmFtZS5pbmRleE9mKCIhIikgIT09IC0xKSB7DQogICAgICAgIHZhciBjaHVua3MgPSBtb2R1bGVOYW1lLnNwbGl0KCIhIik7DQogICAgICAgIHJldHVybiBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1swXSkgKyAiISIgKyBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1sxXSk7DQogICAgfQ0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcw0KICAgIGlmIChtb2R1bGVOYW1lLmNoYXJBdCgwKSA9PSAiLiIpIHsNCiAgICAgICAgdmFyIGJhc2UgPSBwYXJlbnRJZC5zcGxpdCgiLyIpLnNsaWNlKDAsIC0xKS5qb2luKCIvIik7DQogICAgICAgIHZhciBtb2R1bGVOYW1lID0gYmFzZSArICIvIiArIG1vZHVsZU5hbWU7DQogICAgICAgIA0KICAgICAgICB3aGlsZShtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgew0KICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gbW9kdWxlTmFtZTsNCiAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBtb2R1bGVOYW1lOw0KfTsNCg0KdmFyIHJlcXVpcmUgPSBmdW5jdGlvbihwYXJlbnRJZCwgaWQpIHsNCiAgICB2YXIgaWQgPSBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGlkKTsNCiAgICANCiAgICB2YXIgbW9kdWxlID0gcmVxdWlyZS5tb2R1bGVzW2lkXTsNCiAgICBpZiAobW9kdWxlKSB7DQogICAgICAgIGlmICghbW9kdWxlLmluaXRpYWxpemVkKSB7DQogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsNCiAgICAgICAgICAgIG1vZHVsZS5pbml0aWFsaXplZCA9IHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOw0KICAgIH0NCiAgICANCiAgICB2YXIgY2h1bmtzID0gaWQuc3BsaXQoIi8iKTsNCiAgICBjaHVua3NbMF0gPSByZXF1aXJlLnRsbnNbY2h1bmtzWzBdXSB8fCBjaHVua3NbMF07DQogICAgdmFyIHBhdGggPSBjaHVua3Muam9pbigiLyIpICsgIi5qcyI7DQogICAgDQogICAgcmVxdWlyZS5pZCA9IGlkOw0KICAgIGltcG9ydFNjcmlwdHMocGF0aCk7DQogICAgcmV0dXJuIHJlcXVpcmUocGFyZW50SWQsIGlkKTsgICAgDQp9Ow0KDQpyZXF1aXJlLm1vZHVsZXMgPSB7fTsNCnJlcXVpcmUudGxucyA9IHt9Ow0KDQp2YXIgZGVmaW5lID0gZnVuY3Rpb24oaWQsIGRlcHMsIGZhY3RvcnkpIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7DQogICAgICAgIGZhY3RvcnkgPSBkZXBzOw0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICAgIGZhY3RvcnkgPSBpZDsNCiAgICAgICAgaWQgPSByZXF1aXJlLmlkOw0KICAgIH0NCg0KICAgIGlmIChpZC5pbmRleE9mKCJ0ZXh0ISIpID09PSAwKSANCiAgICAgICAgcmV0dXJuOw0KICAgIA0KICAgIHZhciByZXEgPSBmdW5jdGlvbihkZXBzLCBmYWN0b3J5KSB7DQogICAgICAgIHJldHVybiByZXF1aXJlKGlkLCBkZXBzLCBmYWN0b3J5KTsNCiAgICB9Ow0KDQogICAgcmVxdWlyZS5tb2R1bGVzW2lkXSA9IHsNCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgbW9kdWxlID0gew0KICAgICAgICAgICAgICAgIGV4cG9ydHM6IHt9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdmFyIHJldHVybkV4cG9ydHMgPSBmYWN0b3J5KHJlcSwgbW9kdWxlLmV4cG9ydHMsIG1vZHVsZSk7DQogICAgICAgICAgICBpZiAocmV0dXJuRXhwb3J0cykNCiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJldHVybkV4cG9ydHM7DQogICAgICAgICAgICByZXR1cm4gbW9kdWxlOw0KICAgICAgICB9DQogICAgfTsNCn07DQoNCmZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsNCiAgICByZXF1aXJlLnRsbnMgPSB0b3BMZXZlbE5hbWVzcGFjZXM7DQp9DQoNCmZ1bmN0aW9uIGluaXRTZW5kZXIoKSB7DQoNCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShudWxsLCAiYWNlL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOw0KICAgIHZhciBvb3AgPSByZXF1aXJlKG51bGwsICJhY2UvbGliL29vcCIpOw0KICAgIA0KICAgIHZhciBTZW5kZXIgPSBmdW5jdGlvbigpIHt9Ow0KICAgIA0KICAgIChmdW5jdGlvbigpIHsNCiAgICAgICAgDQogICAgICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGZ1bmN0aW9uKGRhdGEsIGNhbGxiYWNrSWQpIHsNCiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsDQogICAgICAgICAgICAgICAgaWQ6IGNhbGxiYWNrSWQsDQogICAgICAgICAgICAgICAgZGF0YTogZGF0YQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH07DQogICAgDQogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsNCiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAiZXZlbnQiLA0KICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsDQogICAgICAgICAgICAgICAgZGF0YTogZGF0YQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH07DQogICAgICAgIA0KICAgIH0pLmNhbGwoU2VuZGVyLnByb3RvdHlwZSk7DQogICAgDQogICAgcmV0dXJuIG5ldyBTZW5kZXIoKTsNCn0NCg0KdmFyIG1haW47DQp2YXIgc2VuZGVyOw0KDQpvbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7DQogICAgdmFyIG1zZyA9IGUuZGF0YTsNCiAgICBpZiAobXNnLmNvbW1hbmQpIHsNCiAgICAgICAgbWFpblttc2cuY29tbWFuZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpOw0KICAgIH0NCiAgICBlbHNlIGlmIChtc2cuaW5pdCkgeyAgICAgICAgDQogICAgICAgIGluaXRCYXNlVXJscyhtc2cudGxucyk7DQogICAgICAgIHJlcXVpcmUobnVsbCwgImFjZS9saWIvZml4b2xkYnJvd3NlcnMiKTsNCiAgICAgICAgc2VuZGVyID0gaW5pdFNlbmRlcigpOw0KICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG51bGwsIG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOw0KICAgICAgICBtYWluID0gbmV3IGNsYXp6KHNlbmRlcik7DQogICAgfSANCiAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgc2VuZGVyKSB7DQogICAgICAgIHNlbmRlci5fZW1pdChtc2cuZXZlbnQsIG1zZy5kYXRhKTsNCiAgICB9DQp9Ow0KLy8gdmltOnNldCB0cz00IHN0cz00IHN3PTQgc3Q6DQovLyAtLSBrcmlza293YWwgS3JpcyBLb3dhbCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNSVQgTGljZW5zZQ0KLy8gLS0gdGxyb2JpbnNvbiBUb20gUm9iaW5zb24gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTUlUIExpY2Vuc2UgKE5hcndoYWwgUHJvamVjdCkNCi8vIC0tIGRhbnRtYW4gRGFuaWVsIEZyaWVzZW4gQ29weXJpZ2h0KEMpIDIwMTAgWFhYIE5vIExpY2Vuc2UgU3BlY2lmaWVkDQovLyAtLSBmc2NoYWVmZXIgRmxvcmlhbiBTY2jDpGZlciBDb3B5cmlnaHQgKEMpIDIwMTAgTUlUIExpY2Vuc2UNCi8vIC0tIElyYWtsaSBHb3phbGlzaHZpbGkgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQoNCi8qIQ0KICAgIENvcHlyaWdodCAoYykgMjAwOSwgMjgwIE5vcnRoIEluYy4gaHR0cDovLzI4MG5vcnRoLmNvbS8NCiAgICBNSVQgTGljZW5zZS4gaHR0cDovL2dpdGh1Yi5jb20vMjgwbm9ydGgvbmFyd2hhbC9ibG9iL21hc3Rlci9SRUFETUUubWQNCiovDQoNCmRlZmluZSgnYWNlL2xpYi9maXhvbGRicm93c2VycycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9yZWdleHAnLCAnYWNlL2xpYi9lczUtc2hpbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KcmVxdWlyZSgiLi9yZWdleHAiKTsNCnJlcXVpcmUoIi4vZXM1LXNoaW0iKTsNCg0KfSk7LyoqDQogKiAgQmFzZWQgb24gY29kZSBmcm9tOg0KICoNCiAqIFhSZWdFeHAgMS41LjANCiAqIChjKSAyMDA3LTIwMTAgU3RldmVuIExldml0aGFuDQogKiBNSVQgTGljZW5zZQ0KICogPGh0dHA6Ly94cmVnZXhwLmNvbT4NCiAqIFByb3ZpZGVzIGFuIGF1Z21lbnRlZCwgZXh0ZW5zaWJsZSwgY3Jvc3MtYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiByZWd1bGFyIGV4cHJlc3Npb25zLA0KICogaW5jbHVkaW5nIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc3ludGF4LCBmbGFncywgYW5kIG1ldGhvZHMNCiAqLw0KIA0KZGVmaW5lKCdhY2UvbGliL3JlZ2V4cCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vICBQcml2YXRlIHZhcmlhYmxlcw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICB2YXIgcmVhbCA9IHsNCiAgICAgICAgICAgIGV4ZWM6IFJlZ0V4cC5wcm90b3R5cGUuZXhlYywNCiAgICAgICAgICAgIHRlc3Q6IFJlZ0V4cC5wcm90b3R5cGUudGVzdCwNCiAgICAgICAgICAgIG1hdGNoOiBTdHJpbmcucHJvdG90eXBlLm1hdGNoLA0KICAgICAgICAgICAgcmVwbGFjZTogU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLA0KICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXQNCiAgICAgICAgfSwNCiAgICAgICAgY29tcGxpYW50RXhlY05wY2cgPSByZWFsLmV4ZWMuY2FsbCgvKCk/Py8sICIiKVsxXSA9PT0gdW5kZWZpbmVkLCAvLyBjaGVjayBgZXhlY2AgaGFuZGxpbmcgb2Ygbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzDQogICAgICAgIGNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB4ID0gL14vZzsNCiAgICAgICAgICAgIHJlYWwudGVzdC5jYWxsKHgsICIiKTsNCiAgICAgICAgICAgIHJldHVybiAheC5sYXN0SW5kZXg7DQogICAgICAgIH0oKTsNCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gIE92ZXJyaWRlbiBuYXRpdmUgbWV0aG9kcw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAvLyBBZGRzIG5hbWVkIGNhcHR1cmUgc3VwcG9ydCAod2l0aCBiYWNrcmVmZXJlbmNlcyByZXR1cm5lZCBhcyBgcmVzdWx0Lm5hbWVgKSwgYW5kIGZpeGVzIHR3bw0KICAgIC8vIGNyb3NzLWJyb3dzZXIgaXNzdWVzIHBlciBFUzM6DQogICAgLy8gLSBDYXB0dXJlZCB2YWx1ZXMgZm9yIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYHVuZGVmaW5lZGAsDQogICAgLy8gICByYXRoZXIgdGhhbiB0aGUgZW1wdHkgc3RyaW5nLg0KICAgIC8vIC0gYGxhc3RJbmRleGAgc2hvdWxkIG5vdCBiZSBpbmNyZW1lbnRlZCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzLg0KICAgIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChzdHIpIHsNCiAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksDQogICAgICAgICAgICBuYW1lLCByMjsNCiAgICAgICAgaWYgKG1hdGNoKSB7DQogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYCBmb3INCiAgICAgICAgICAgIC8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3Vwcw0KICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAxICYmIGluZGV4T2YobWF0Y2gsICIiKSA+IC0xKSB7DQogICAgICAgICAgICAgICAgcjIgPSBSZWdFeHAodGhpcy5zb3VyY2UsIHJlYWwucmVwbGFjZS5jYWxsKGdldE5hdGl2ZUZsYWdzKHRoaXMpLCAiZyIsICIiKSk7DQogICAgICAgICAgICAgICAgLy8gVXNpbmcgYHN0ci5zbGljZShtYXRjaC5pbmRleClgIHJhdGhlciB0aGFuIGBtYXRjaFswXWAgaW4gY2FzZSBsb29rYWhlYWQgYWxsb3dlZA0KICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIGR1ZSB0byBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIG1hdGNoDQogICAgICAgICAgICAgICAgcmVhbC5yZXBsYWNlLmNhbGwoc3RyLnNsaWNlKG1hdGNoLmluZGV4KSwgcjIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIEF0dGFjaCBuYW1lZCBjYXB0dXJlIHByb3BlcnRpZXMNCiAgICAgICAgICAgIGlmICh0aGlzLl94cmVnZXhwICYmIHRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzKSB7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXNbaSAtIDFdOw0KICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbbmFtZV0gPSBtYXRjaFtpXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgdGhhdCBpbmNyZW1lbnQgYGxhc3RJbmRleGAgYWZ0ZXIgemVyby1sZW5ndGggbWF0Y2hlcw0KICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpDQogICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgtLTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gbWF0Y2g7DQogICAgfTsNCg0KICAgIC8vIERvbid0IG92ZXJyaWRlIGB0ZXN0YCBpZiBpdCB3b24ndCBjaGFuZ2UgYW55dGhpbmcNCiAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCkgew0KICAgICAgICAvLyBGaXggYnJvd3NlciBidWcgaW4gbmF0aXZlIG1ldGhvZA0KICAgICAgICBSZWdFeHAucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAoc3RyKSB7DQogICAgICAgICAgICAvLyBVc2UgdGhlIG5hdGl2ZSBgZXhlY2AgdG8gc2tpcCBzb21lIHByb2Nlc3Npbmcgb3ZlcmhlYWQsIGV2ZW4gdGhvdWdoIHRoZSBvdmVycmlkZW4NCiAgICAgICAgICAgIC8vIGBleGVjYCB3b3VsZCB0YWtlIGNhcmUgb2YgdGhlIGBsYXN0SW5kZXhgIGZpeA0KICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmNhbGwodGhpcywgc3RyKTsNCiAgICAgICAgICAgIC8vIEZpeCBicm93c2VycyB0aGF0IGluY3JlbWVudCBgbGFzdEluZGV4YCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzDQogICAgICAgICAgICBpZiAobWF0Y2ggJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpDQogICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgtLTsNCiAgICAgICAgICAgIHJldHVybiAhIW1hdGNoOw0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICBmdW5jdGlvbiBnZXROYXRpdmVGbGFncyAocmVnZXgpIHsNCiAgICAgICAgcmV0dXJuIChyZWdleC5nbG9iYWwgICAgID8gImciIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5pZ25vcmVDYXNlID8gImkiIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5tdWx0aWxpbmUgID8gIm0iIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5leHRlbmRlZCAgID8gIngiIDogIiIpICsgLy8gUHJvcG9zZWQgZm9yIEVTNDsgaW5jbHVkZWQgaW4gQVMzDQogICAgICAgICAgICAgICAocmVnZXguc3RpY2t5ICAgICA/ICJ5IiA6ICIiKTsNCiAgICB9Ow0KDQogICAgZnVuY3Rpb24gaW5kZXhPZiAoYXJyYXksIGl0ZW0sIGZyb20pIHsNCiAgICAgICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSAvLyBVc2UgdGhlIG5hdGl2ZSBhcnJheSBtZXRob2QgaWYgYXZhaWxhYmxlDQogICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtLCBmcm9tKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IGZyb20gfHwgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoYXJyYXlbaV0gPT09IGl0ZW0pDQogICAgICAgICAgICAgICAgcmV0dXJuIGk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIC0xOw0KICAgIH07DQoNCn0pOy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYg0KLy8gLS0ga3Jpc2tvd2FsIEtyaXMgS293YWwgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIHRscm9iaW5zb24gVG9tIFJvYmluc29uIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1JVCBMaWNlbnNlIChOYXJ3aGFsIFByb2plY3QpDQovLyAtLSBkYW50bWFuIERhbmllbCBGcmllc2VuIENvcHlyaWdodCAoQykgMjAxMCBYWFggVE9ETyBMaWNlbnNlIG9yIENMQQ0KLy8gLS0gZnNjaGFlZmVyIEZsb3JpYW4gU2Now6RmZXIgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQovLyAtLSBHb3phbGEgSXJha2xpIEdvemFsaXNodmlsaSBDb3B5cmlnaHQgKEMpIDIwMTAgTUlUIExpY2Vuc2UNCi8vIC0tIGtpdGNhbWJyaWRnZSBLaXQgQ2FtYnJpZGdlIENvcHlyaWdodCAoQykgMjAxMSBNSVQgTGljZW5zZQ0KLy8gLS0ga29zc25vY29ycCBTYXNoYSBLb3NzIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBicnlhbmZvcmJlcyBCcnlhbiBGb3JiZXMgWFhYIFRPRE8gTGljZW5zZSBvciBDTEENCi8vIC0tIGtpbGxkcmVhbSBRdWlsZHJlZW4gTW90dGEgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbmNlDQovLyAtLSBtaWNoYWVsZmljYXJyYSBNaWNoYWVsIEZpY2FycmEgQ29weXJpZ2h0IChDKSAyMDExIDMtY2xhdXNlIEJTRCBMaWNlbnNlDQovLyAtLSBzaGFya2JyYWluZ3V5IEdlcmFyZCBQYWFwdSBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIGJicXNyYyBCcmVuZGFuIE1vbGxveSAoQykgMjAxMSBDcmVhdGl2ZSBDb21tb25zIFplcm8gKHB1YmxpYyBkb21haW4pDQovLyAtLSBpd3lnIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBEb21lbmljRGVuaWNvbGEgRG9tZW5pYyBEZW5pY29sYSBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIHhhdmllcm0wMiBNb250aWxsZXQgWGF2aWVyIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBSYXlub3MgUmF5bm9zIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBzYW1zb25qcyBTYW1pIFNhbWh1cmkgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQovLyAtLSByd2xkcm4gUmljayBXYWxkcm9uIENvcHlyaWdodCAoQykgMjAxMSBNSVQgTGljZW5zZQ0KLy8gLS0gbGV4ZXIgQWxleGV5IFpha2hhcm92IFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQoNCi8qIQ0KICAgIENvcHlyaWdodCAoYykgMjAwOSwgMjgwIE5vcnRoIEluYy4gaHR0cDovLzI4MG5vcnRoLmNvbS8NCiAgICBNSVQgTGljZW5zZS4gaHR0cDovL2dpdGh1Yi5jb20vMjgwbm9ydGgvbmFyd2hhbC9ibG9iL21hc3Rlci9SRUFETUUubWQNCiovDQoNCmRlZmluZSgnYWNlL2xpYi9lczUtc2hpbScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoNCi8qKg0KICogQnJpbmdzIGFuIGVudmlyb25tZW50IGFzIGNsb3NlIHRvIEVDTUFTY3JpcHQgNSBjb21wbGlhbmNlDQogKiBhcyBpcyBwb3NzaWJsZSB3aXRoIHRoZSBmYWNpbGl0aWVzIG9mIGVyc3R3aGlsZSBlbmdpbmVzLg0KICoNCiAqIEFubm90YXRlZCBFUzU6IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8gKHNwZWNpZmljIGxpbmtzIGJlbG93KQ0KICogRVM1IFNwZWM6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FY21hLTI2Mi5wZGYNCiAqDQogKiBAbW9kdWxlDQogKi8NCg0KLyp3aGF0c3VwZG9jKi8NCg0KLy8NCi8vIEZ1bmN0aW9uDQovLyA9PT09PT09PQ0KLy8NCg0KLy8gRVMtNSAxNS4zLjQuNQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMy40LjUNCg0KaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkgew0KICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8vIC5sZW5ndGggaXMgMQ0KICAgICAgICAvLyAxLiBMZXQgVGFyZ2V0IGJlIHRoZSB0aGlzIHZhbHVlLg0KICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsNCiAgICAgICAgLy8gMi4gSWYgSXNDYWxsYWJsZShUYXJnZXQpIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uDQogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KICAgICAgICAvLyAzLiBMZXQgQSBiZSBhIG5ldyAocG9zc2libHkgZW1wdHkpIGludGVybmFsIGxpc3Qgb2YgYWxsIG9mIHRoZQ0KICAgICAgICAvLyAgIGFyZ3VtZW50IHZhbHVlcyBwcm92aWRlZCBhZnRlciB0aGlzQXJnIChhcmcxLCBhcmcyIGV0YyksIGluIG9yZGVyLg0KICAgICAgICAvLyBYWFggc2xpY2VkQXJncyB3aWxsIHN0YW5kIGluIGZvciAiQSIgaWYgdXNlZA0KICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsDQogICAgICAgIC8vIDQuIExldCBGIGJlIGEgbmV3IG5hdGl2ZSBFQ01BU2NyaXB0IG9iamVjdC4NCiAgICAgICAgLy8gMTEuIFNldCB0aGUgW1tQcm90b3R5cGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRoZSBzdGFuZGFyZA0KICAgICAgICAvLyAgIGJ1aWx0LWluIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QgYXMgc3BlY2lmaWVkIGluIDE1LjMuMy4xLg0KICAgICAgICAvLyAxMi4gU2V0IHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbg0KICAgICAgICAvLyAgIDE1LjMuNC41LjEuDQogICAgICAgIC8vIDEzLiBTZXQgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW4NCiAgICAgICAgLy8gICAxNS4zLjQuNS4yLg0KICAgICAgICAvLyAxNC4gU2V0IHRoZSBbW0hhc0luc3RhbmNlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW4NCiAgICAgICAgLy8gICAxNS4zLjQuNS4zLg0KICAgICAgICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7DQoNCiAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHsNCiAgICAgICAgICAgICAgICAvLyAxNS4zLjQuNS4yIFtbQ29uc3RydWN0XV0NCiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwNCiAgICAgICAgICAgICAgICAvLyBGIHRoYXQgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGJpbmQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYQ0KICAgICAgICAgICAgICAgIC8vIGxpc3Qgb2YgYXJndW1lbnRzIEV4dHJhQXJncywgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46DQogICAgICAgICAgICAgICAgLy8gMS4gTGV0IHRhcmdldCBiZSB0aGUgdmFsdWUgb2YgRidzIFtbVGFyZ2V0RnVuY3Rpb25dXQ0KICAgICAgICAgICAgICAgIC8vICAgaW50ZXJuYWwgcHJvcGVydHkuDQogICAgICAgICAgICAgICAgLy8gMi4gSWYgdGFyZ2V0IGhhcyBubyBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCwgYQ0KICAgICAgICAgICAgICAgIC8vICAgVHlwZUVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24uDQogICAgICAgICAgICAgICAgLy8gMy4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwNCiAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5Lg0KICAgICAgICAgICAgICAgIC8vIDQuIExldCBhcmdzIGJlIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlDQogICAgICAgICAgICAgICAgLy8gICBsaXN0IGJvdW5kQXJncyBpbiB0aGUgc2FtZSBvcmRlciBmb2xsb3dlZCBieSB0aGUgc2FtZQ0KICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4NCiAgICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIA0KICAgICAgICAgICAgICAgIC8vICAgbWV0aG9kIG9mIHRhcmdldCBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLg0KDQogICAgICAgICAgICAgICAgdmFyIEYgPSBmdW5jdGlvbigpe307DQogICAgICAgICAgICAgICAgRi5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOw0KICAgICAgICAgICAgICAgIHZhciBzZWxmID0gbmV3IEY7DQoNCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KA0KICAgICAgICAgICAgICAgICAgICBzZWxmLA0KICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7DQoNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgLy8gMTUuMy40LjUuMSBbW0NhbGxdXQ0KICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwgRiwNCiAgICAgICAgICAgICAgICAvLyB3aGljaCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhDQogICAgICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcNCiAgICAgICAgICAgICAgICAvLyBzdGVwcyBhcmUgdGFrZW46DQogICAgICAgICAgICAgICAgLy8gMS4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwNCiAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5Lg0KICAgICAgICAgICAgICAgIC8vIDIuIExldCBib3VuZFRoaXMgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kVGhpc11dIGludGVybmFsDQogICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4NCiAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dIGludGVybmFsDQogICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4NCiAgICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSANCiAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1lIA0KICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4NCiAgICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QgDQogICAgICAgICAgICAgICAgLy8gICBvZiB0YXJnZXQgcHJvdmlkaW5nIGJvdW5kVGhpcyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgDQogICAgICAgICAgICAgICAgLy8gICBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLg0KDQogICAgICAgICAgICAgICAgLy8gZXF1aXY6IHRhcmdldC5jYWxsKHRoaXMsIC4uLmJvdW5kQXJncywgLi4uYXJncykNCiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KA0KICAgICAgICAgICAgICAgICAgICB0aGF0LA0KICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH07DQogICAgICAgIC8vIFhYWCBib3VuZC5sZW5ndGggaXMgbmV2ZXIgd3JpdGFibGUsIHNvIGRvbid0IGV2ZW4gdHJ5DQogICAgICAgIC8vDQogICAgICAgIC8vIDE1LiBJZiB0aGUgW1tDbGFzc11dIGludGVybmFsIHByb3BlcnR5IG9mIFRhcmdldCBpcyAiRnVuY3Rpb24iLCB0aGVuDQogICAgICAgIC8vICAgICBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUgbGVuZ3RoIG9mIEEuDQogICAgICAgIC8vICAgICBiLiBTZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byBlaXRoZXIgMCBvciBMLCB3aGljaGV2ZXIgaXMgDQogICAgICAgIC8vICAgICAgIGxhcmdlci4NCiAgICAgICAgLy8gMTYuIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC4NCiAgICAgICAgLy8gMTcuIFNldCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIHRoZSB2YWx1ZXMNCiAgICAgICAgLy8gICBzcGVjaWZpZWQgaW4gMTUuMy41LjEuDQoNCiAgICAgICAgLy8gVE9ETw0KICAgICAgICAvLyAxOC4gU2V0IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRydWUuDQogICAgICAgIA0KICAgICAgICAvLyBUT0RPDQogICAgICAgIC8vIDE5LiBMZXQgdGhyb3dlciBiZSB0aGUgW1tUaHJvd1R5cGVFcnJvcl1dIGZ1bmN0aW9uIE9iamVjdCAoMTMuMi4zKS4NCiAgICAgICAgLy8gMjAuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgRiB3aXRoIA0KICAgICAgICAvLyAgIGFyZ3VtZW50cyAiY2FsbGVyIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLCBbW1NldF1dOg0KICAgICAgICAvLyAgIHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LCBhbmQgDQogICAgICAgIC8vICAgZmFsc2UuDQogICAgICAgIC8vIDIxLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aCANCiAgICAgICAgLy8gICBhcmd1bWVudHMgImFyZ3VtZW50cyIsIFByb3BlcnR5RGVzY3JpcHRvciB7W1tHZXRdXTogdGhyb3dlciwgDQogICAgICAgIC8vICAgW1tTZXRdXTogdGhyb3dlciwgW1tFbnVtZXJhYmxlXV06IGZhbHNlLCBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZX0sDQogICAgICAgIC8vICAgYW5kIGZhbHNlLg0KDQogICAgICAgIC8vIFRPRE8NCiAgICAgICAgLy8gTk9URSBGdW5jdGlvbiBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgZG8gbm90IA0KICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5IG9yIHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJhbWV0ZXJzXV0sIGFuZA0KICAgICAgICAvLyBbW1Njb3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy4NCiAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0ZSBwcm90b3R5cGUgaW4gcHVyZS1qcy4NCg0KICAgICAgICAvLyAyMi4gUmV0dXJuIEYuDQogICAgICAgIHJldHVybiBib3VuZDsNCiAgICB9Ow0KfQ0KDQovLyBTaG9ydGN1dCB0byBhbiBvZnRlbiBhY2Nlc3NlZCBwcm9wZXJ0aWVzLCBpbiBvcmRlciB0byBhdm9pZCBtdWx0aXBsZQ0KLy8gZGVyZWZlcmVuY2UgdGhhdCBjb3N0cyB1bml2ZXJzYWxseS4NCi8vIF9QbGVhc2Ugbm90ZTogU2hvcnRjdXRzIGFyZSBkZWZpbmVkIGFmdGVyIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgYXMgd2UNCi8vIHVzIGl0IGluIGRlZmluaW5nIHNob3J0Y3V0cy4NCnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7DQp2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsNCnZhciBwcm90b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7DQp2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNsaWNlOw0KdmFyIHRvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsNCnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsNCg0KLy8gSWYgSlMgZW5naW5lIHN1cHBvcnRzIGFjY2Vzc29ycyBjcmVhdGluZyBzaG9ydGN1dHMuDQp2YXIgZGVmaW5lR2V0dGVyOw0KdmFyIGRlZmluZVNldHRlcjsNCnZhciBsb29rdXBHZXR0ZXI7DQp2YXIgbG9va3VwU2V0dGVyOw0KdmFyIHN1cHBvcnRzQWNjZXNzb3JzOw0KaWYgKChzdXBwb3J0c0FjY2Vzc29ycyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmluZUdldHRlcl9fIikpKSB7DQogICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOw0KICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsNCiAgICBsb29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7DQogICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOw0KfQ0KDQovLw0KLy8gQXJyYXkNCi8vID09PT09DQovLw0KDQovLyBFUzUgMTUuNC4zLjINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuMy4yDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5DQppZiAoIUFycmF5LmlzQXJyYXkpIHsNCiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsNCiAgICAgICAgcmV0dXJuIHRvU3RyaW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsNCiAgICB9Ow0KfQ0KDQovLyBUaGUgSXNDYWxsYWJsZSgpIGNoZWNrIGluIHRoZSBBcnJheSBmdW5jdGlvbnMNCi8vIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBzdHJpY3QgY2hlY2sgb24gdGhlDQovLyBpbnRlcm5hbCBjbGFzcyBvZiB0aGUgb2JqZWN0IHRvIHRyYXAgY2FzZXMgd2hlcmUNCi8vIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3YXMgYWN0dWFsbHkgYSByZWd1bGFyDQovLyBleHByZXNzaW9uIGxpdGVyYWwsIHdoaWNoIGluIFY4IGFuZA0KLy8gSmF2YVNjcmlwdENvcmUgaXMgYSB0eXBlb2YgImZ1bmN0aW9uIi4gIE9ubHkgaW4NCi8vIFY4IGFyZSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbHMgcGVybWl0dGVkIGFzDQovLyByZWR1Y2UgcGFyYW1ldGVycywgc28gaXQgaXMgZGVzaXJhYmxlIGluIHRoZQ0KLy8gZ2VuZXJhbCBjYXNlIGZvciB0aGUgc2hpbSB0byBtYXRjaCB0aGUgbW9yZQ0KLy8gc3RyaWN0IGFuZCBjb21tb24gYmVoYXZpb3Igb2YgcmVqZWN0aW5nIHJlZ3VsYXINCi8vIGV4cHJlc3Npb25zLg0KDQovLyBFUzUgMTUuNC40LjE4DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTgNCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2FycmF5L2ZvckVhY2gNCmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsNCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSwNCiAgICAgICAgICAgIGkgPSAwLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7DQogICAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGNhbGwsIHBhc3NpbmcgYXJndW1lbnRzOg0KICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHByb3BlcnR5IHZhbHVlLCBwcm9wZXJ0eSBrZXksIHRoaXNBcmcgb2JqZWN0IGNvbnRleHQNCiAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpKys7DQogICAgICAgIH0NCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuNC40LjE5DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTkNCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvbWFwDQppZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsNCiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsDQogICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLA0KICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpDQogICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4yMA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIwDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L2ZpbHRlcg0KaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7DQogICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHJlc3VsdCA9IFtdLA0KICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpKQ0KICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNlbGZbaV0pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNg0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE2DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9ldmVyeQ0KaWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHsNCiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZikpDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS40LjQuMTcNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNw0KLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc29tZQ0KaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgew0KICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBzZWxmKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4yMQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIxDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVjZQ0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7DQogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIG5vIHZhbHVlIHRvIHJldHVybiBpZiBubyBpbml0aWFsIHZhbHVlIGFuZCBhbiBlbXB0eSBhcnJheQ0KICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KDQogICAgICAgIHZhciBpID0gMDsNCiAgICAgICAgdmFyIHJlc3VsdDsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgew0KICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytdOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJuDQogICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpDQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuNC40LjIyDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMjINCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvcmVkdWNlUmlnaHQNCmlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KSB7DQogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8pIHsNCiAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwNCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICAvLyBubyB2YWx1ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkNCiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKQ0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCg0KICAgICAgICB2YXIgcmVzdWx0LCBpID0gbGVuZ3RoIC0gMTsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgew0KICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJuDQogICAgICAgICAgICAgICAgaWYgKC0taSA8IDApDQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGRvIHsNCiAgICAgICAgICAgIGlmIChpIGluIHRoaXMpDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9IHdoaWxlIChpLS0pOw0KDQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE0DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pbmRleE9mDQppZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7DQogICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgaWYgKCFsZW5ndGgpDQogICAgICAgICAgICByZXR1cm4gLTE7DQoNCiAgICAgICAgdmFyIGkgPSAwOw0KICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpDQogICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7DQoNCiAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMNCiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsNCiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gaTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gLTE7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE1DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9sYXN0SW5kZXhPZg0KaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpIHsNCiAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgaWYgKCFsZW5ndGgpDQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKQ0KICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsNCiAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMNCiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsNCiAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkNCiAgICAgICAgICAgICAgICByZXR1cm4gaTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gLTE7DQogICAgfTsNCn0NCg0KLy8NCi8vIE9iamVjdA0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgMTUuMi4zLjINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4yDQppZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgew0KICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0vaXNzdWVzI2lzc3VlLzINCiAgICAvLyBodHRwOi8vZWpvaG4ub3JnL2Jsb2cvb2JqZWN0Z2V0cHJvdG90eXBlb2YvDQogICAgLy8gcmVjb21tZW5kZWQgYnkgZnNjaGFlZmVyIG9uIGdpdGh1Yg0KICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkgew0KICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoDQogICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IgPw0KICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSA6DQogICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdA0KICAgICAgICApOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMw0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjMNCmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgew0KICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhICIgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0OiAiOw0KICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgew0KICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsNCiAgICAgICAgLy8gSWYgb2JqZWN0IGRvZXMgbm90IG93bnMgcHJvcGVydHkgcmV0dXJuIHVuZGVmaW5lZCBpbW1lZGlhdGVseS4NCiAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKQ0KICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIsIHNldHRlcjsNCg0KICAgICAgICAvLyBJZiBvYmplY3QgaGFzIGEgcHJvcGVydHkgdGhlbiBpdCdzIGZvciBzdXJlIGJvdGggYGVudW1lcmFibGVgIGFuZA0KICAgICAgICAvLyBgY29uZmlndXJhYmxlYC4NCiAgICAgICAgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9Ow0KDQogICAgICAgIC8vIElmIEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvciBwcm9wZXJ0aWVzIHRoZW4gcHJvcGVydHkgbWF5IGJlIGENCiAgICAgICAgLy8gZ2V0dGVyIG9yIHNldHRlci4NCiAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7DQogICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBhIGdldHRlciBldmVuDQogICAgICAgICAgICAvLyBpZiBvYmplY3QgaGFzIG93biBub24gZ2V0dGVyIHByb3BlcnR5IGFsb25nIHdpdGggYSBzYW1lIG5hbWVkDQogICAgICAgICAgICAvLyBpbmhlcml0ZWQgZ2V0dGVyLiBUbyBhdm9pZCBtaXNiZWhhdmlvciB3ZSB0ZW1wb3JhcnkgcmVtb3ZlDQogICAgICAgICAgICAvLyBgX19wcm90b19fYCBzbyB0aGF0IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBnZXR0ZXIgb25seQ0KICAgICAgICAgICAgLy8gaWYgaXQncyBvd25lZCBieSBhbiBvYmplY3QuDQogICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsNCiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsNCg0KICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KTsNCiAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7DQoNCiAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSBnZXR0ZXIgYW5kIHNldHRlciB3ZSBjYW4gcHV0IHZhbHVlcyBiYWNrLg0KICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsNCg0KICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsNCiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjsNCiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsNCg0KICAgICAgICAgICAgICAgIC8vIElmIGl0IHdhcyBhY2Nlc3NvciBwcm9wZXJ0eSB3ZSdyZSBkb25lIGFuZCByZXR1cm4gaGVyZQ0KICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGFkZGluZyBgdmFsdWVgIHRvIHRoZSBkZXNjcmlwdG9yLg0KICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHdlIGtub3cgdGhhdCBvYmplY3QgaGFzIGFuIG93biBwcm9wZXJ0eSB0aGF0IGlzDQogICAgICAgIC8vIG5vdCBhbiBhY2Nlc3NvciBzbyB3ZSBzZXQgaXQgYXMgYSB2YWx1ZSBhbmQgcmV0dXJuIGRlc2NyaXB0b3IuDQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOw0KICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjQNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy40DQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7DQogICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgew0KICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjUNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy41DQppZiAoIU9iamVjdC5jcmVhdGUpIHsNCiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgew0KICAgICAgICB2YXIgb2JqZWN0Ow0KICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7DQogICAgICAgICAgICBvYmplY3QgPSB7ICJfX3Byb3RvX18iOiBudWxsIH07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSAhPSAib2JqZWN0IikNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7DQogICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9Ow0KICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7DQogICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOw0KICAgICAgICAgICAgLy8gSUUgaGFzIG5vIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgDQogICAgICAgICAgICAvLyBuZWl0aGVyIGBfX3Byb3RvX19gLCBidXQgdGhpcyBtYW51YWxseSBzZXR0aW5nIGBfX3Byb3RvX19gIHdpbGwNCiAgICAgICAgICAgIC8vIGd1YXJhbnRlZSB0aGF0IGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIHdpbGwgd29yayBhcyBleHBlY3RlZCB3aXRoDQogICAgICAgICAgICAvLyBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgYE9iamVjdC5jcmVhdGVgDQogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOw0KICAgICAgICB9DQogICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApDQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOw0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuNg0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjYNCg0KLy8gUGF0Y2ggZm9yIFdlYktpdCBhbmQgSUU4IHN0YW5kYXJkIG1vZGUNCi8vIERlc2lnbmVkIGJ5IGhheCA8aGF4LmdpdGh1Yi5jb20+DQovLyByZWxhdGVkIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGltL2lzc3VlcyNpc3N1ZS81DQovLyBJRTggUmVmZXJlbmNlOg0KLy8gICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDI4MjkwMC5hc3B4DQovLyAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2RkMjI5OTE2LmFzcHgNCi8vIFdlYktpdCBCdWdzOg0KLy8gICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQyMw0KDQpmdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCkgew0KICAgIHRyeSB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsICJzZW50aW5lbCIsIHt9KTsNCiAgICAgICAgcmV0dXJuICJzZW50aW5lbCIgaW4gb2JqZWN0Ow0KICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgew0KICAgICAgICAvLyByZXR1cm5zIGZhbHN5DQogICAgfQ0KfQ0KDQovLyBjaGVjayB3aGV0aGVyIGRlZmluZVByb3BlcnR5IHdvcmtzIGlmIGl0J3MgZ2l2ZW4uIE90aGVyd2lzZSwNCi8vIHNoaW0gcGFydGlhbGx5Lg0KaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgew0KICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTsNCiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tID0gdHlwZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiIHx8DQogICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOw0KICAgIGlmICghZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsNCiAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5RmFsbGJhY2sgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7DQogICAgfQ0KfQ0KDQppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7DQogICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7DQogICAgdmFyIEVSUl9OT05fT0JKRUNUX1RBUkdFVCA9ICJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICINCiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCAiICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOw0KDQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikgew0KICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7DQogICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOw0KDQogICAgICAgIC8vIG1ha2UgYSB2YWxpYW50IGF0dGVtcHQgdG8gdXNlIHRoZSByZWFsIGRlZmluZVByb3BlcnR5DQogICAgICAgIC8vIGZvciBJOCdzIERPTSBlbGVtZW50cy4NCiAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmplY3QsIG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpOw0KICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7DQogICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBzaGltIGlmIHRoZSByZWFsIG9uZSBkb2Vzbid0IHdvcmsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIElmIGl0J3MgYSBkYXRhIHByb3BlcnR5Lg0KICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAidmFsdWUiKSkgew0KICAgICAgICAgICAgLy8gZmFpbCBzaWxlbnRseSBpZiAid3JpdGFibGUiLCAiZW51bWVyYWJsZSIsIG9yICJjb25maWd1cmFibGUiDQogICAgICAgICAgICAvLyBhcmUgcmVxdWVzdGVkIGJ1dCBub3Qgc3VwcG9ydGVkDQogICAgICAgICAgICAvKg0KICAgICAgICAgICAgLy8gYWx0ZXJuYXRlIGFwcHJvYWNoOg0KICAgICAgICAgICAgaWYgKCAvLyBjYW4ndCBpbXBsZW1lbnQgdGhlc2UgZmVhdHVyZXM7IGFsbG93IGZhbHNlIGJ1dCBub3QgdHJ1ZQ0KICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAid3JpdGFibGUiKSA/IGRlc2NyaXB0b3Iud3JpdGFibGUgOiB0cnVlKSB8fA0KICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAiZW51bWVyYWJsZSIpID8gZGVzY3JpcHRvci5lbnVtZXJhYmxlIDogdHJ1ZSkgfHwNCiAgICAgICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgImNvbmZpZ3VyYWJsZSIpID8gZGVzY3JpcHRvci5jb25maWd1cmFibGUgOiB0cnVlKQ0KICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKA0KICAgICAgICAgICAgICAgICAgICAiVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgZG9lcyBub3QgIiArDQogICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSwgb3Igd3JpdGFibGUuIg0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAqLw0KDQogICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIC8vIEFzIGFjY2Vzc29ycyBhcmUgc3VwcG9ydGVkIG9ubHkgb24gZW5naW5lcyBpbXBsZW1lbnRpbmcNCiAgICAgICAgICAgICAgICAvLyBgX19wcm90b19fYCB3ZSBjYW4gc2FmZWx5IG92ZXJyaWRlIGBfX3Byb3RvX19gIHdoaWxlIGRlZmluaW5nDQogICAgICAgICAgICAgICAgLy8gYSBwcm9wZXJ0eSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBoaXQgYW4gaW5oZXJpdGVkDQogICAgICAgICAgICAgICAgLy8gYWNjZXNzb3IuDQogICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187DQogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0Ow0KICAgICAgICAgICAgICAgIC8vIERlbGV0aW5nIGEgcHJvcGVydHkgYW55d2F5IHNpbmNlIGdldHRlciAvIHNldHRlciBtYXkgYmUNCiAgICAgICAgICAgICAgICAvLyBkZWZpbmVkIG9uIG9iamVjdCBpdHNlbGYuDQogICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07DQogICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7DQogICAgICAgICAgICAgICAgLy8gU2V0dGluZyBvcmlnaW5hbCBgX19wcm90b19fYCBiYWNrIG5vdy4NCiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nlc3NvcnMpDQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQpOw0KICAgICAgICAgICAgLy8gSWYgd2UgZ290IHRoYXQgZmFyIHRoZW4gZ2V0dGVycyBhbmQgc2V0dGVycyBjYW4gYmUgZGVmaW5lZCAhIQ0KICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKQ0KICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7DQogICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAic2V0IikpDQogICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBvYmplY3Q7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjIuMy43DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNw0KaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcykgew0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsNCiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgew0KICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJvcGVydHkpKQ0KICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iamVjdDsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjgNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy44DQppZiAoIU9iamVjdC5zZWFsKSB7DQogICAgT2JqZWN0LnNlYWwgPSBmdW5jdGlvbiBzZWFsKG9iamVjdCkgew0KICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcgYW5kIGJyZWFrcyBmZWF0dXJlLWRldGVjdGlvbiwgYnV0DQogICAgICAgIC8vIGFsbG93cyAic2VjdXJhYmxlIiBjb2RlIHRvICJncmFjZWZ1bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcNCiAgICAgICAgLy8gYnV0IGluc2VjdXJlIGNvZGUuDQogICAgICAgIHJldHVybiBvYmplY3Q7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjIuMy45DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOQ0KaWYgKCFPYmplY3QuZnJlZXplKSB7DQogICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsNCiAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dA0KICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nDQogICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLg0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIGRldGVjdCBhIFJoaW5vIGJ1ZyBhbmQgcGF0Y2ggaXQNCnRyeSB7DQogICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7fSk7DQp9IGNhdGNoIChleGNlcHRpb24pIHsNCiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsNCiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7DQogICAgICAgICAgICB9DQogICAgICAgIH07DQogICAgfSkoT2JqZWN0LmZyZWV6ZSk7DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTANCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMA0KaWYgKCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHsNCiAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsNCiAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dA0KICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nDQogICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLg0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTENCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMQ0KaWYgKCFPYmplY3QuaXNTZWFsZWQpIHsNCiAgICBPYmplY3QuaXNTZWFsZWQgPSBmdW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMg0KaWYgKCFPYmplY3QuaXNGcm96ZW4pIHsNCiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTMNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMw0KaWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKSB7DQogICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsNCiAgICAgICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0IHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4NCiAgICAgICAgaWYgKE9iamVjdChvYmplY3QpID09PSBvYmplY3QpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCiAgICAgICAgLy8gMi4gUmV0dXJuIHRoZSBCb29sZWFuIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLg0KICAgICAgICB2YXIgbmFtZSA9ICcnOw0KICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7DQogICAgICAgICAgICBuYW1lICs9ICc/JzsNCiAgICAgICAgfQ0KICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOw0KICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7DQogICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07DQogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjE0DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTQNCmlmICghT2JqZWN0LmtleXMpIHsNCiAgICAvLyBodHRwOi8vd2hhdHRoZWhlYWRzYWlkLmNvbS8yMDEwLzEwL2Etc2FmZXItb2JqZWN0LWtleXMtY29tcGF0aWJpbGl0eS1pbXBsZW1lbnRhdGlvbg0KICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsDQogICAgICAgIGRvbnRFbnVtcyA9IFsNCiAgICAgICAgICAgICJ0b1N0cmluZyIsDQogICAgICAgICAgICAidG9Mb2NhbGVTdHJpbmciLA0KICAgICAgICAgICAgInZhbHVlT2YiLA0KICAgICAgICAgICAgImhhc093blByb3BlcnR5IiwNCiAgICAgICAgICAgICJpc1Byb3RvdHlwZU9mIiwNCiAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsDQogICAgICAgICAgICAiY29uc3RydWN0b3IiDQogICAgICAgIF0sDQogICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7DQoNCiAgICBmb3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KQ0KICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOw0KDQogICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgew0KDQogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsNCg0KICAgICAgICB2YXIga2V5cyA9IFtdOw0KICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgew0KICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgew0KICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChoYXNEb250RW51bUJ1Zykgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsNCiAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgew0KICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBrZXlzOw0KICAgIH07DQoNCn0NCg0KLy8NCi8vIERhdGUNCi8vID09PT0NCi8vDQoNCi8vIEVTNSAxNS45LjUuNDMNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40Mw0KLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHJlcHJlc2VudCB0aGUgaW5zdGFuY2UgaW4gdGltZSANCi8vIHJlcHJlc2VudGVkIGJ5IHRoaXMgRGF0ZSBvYmplY3QuIFRoZSBmb3JtYXQgb2YgdGhlIFN0cmluZyBpcyB0aGUgRGF0ZSBUaW1lIA0KLy8gc3RyaW5nIGZvcm1hdCBkZWZpbmVkIGluIDE1LjkuMS4xNS4gQWxsIGZpZWxkcyBhcmUgcHJlc2VudCBpbiB0aGUgU3RyaW5nLiANCi8vIFRoZSB0aW1lIHpvbmUgaXMgYWx3YXlzIFVUQywgZGVub3RlZCBieSB0aGUgc3VmZml4IFouIElmIHRoZSB0aW1lIHZhbHVlIG9mIA0KLy8gdGhpcyBvYmplY3QgaXMgbm90IGEgZmluaXRlIE51bWJlciBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4NCmlmICghRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgfHwgKG5ldyBEYXRlKC02MjE5ODc1NTIwMDAwMCkudG9JU09TdHJpbmcoKS5pbmRleE9mKCctMDAwMDAxJykgPT09IC0xKSkgew0KICAgIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nID0gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7DQogICAgICAgIHZhciByZXN1bHQsIGxlbmd0aCwgdmFsdWUsIHllYXI7DQogICAgICAgIGlmICghaXNGaW5pdGUodGhpcykpDQogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcjsNCg0KICAgICAgICAvLyB0aGUgZGF0ZSB0aW1lIHN0cmluZyBmb3JtYXQgaXMgc3BlY2lmaWVkIGluIDE1LjkuMS4xNS4NCiAgICAgICAgcmVzdWx0ID0gW3RoaXMuZ2V0VVRDTW9udGgoKSArIDEsIHRoaXMuZ2V0VVRDRGF0ZSgpLA0KICAgICAgICAgICAgdGhpcy5nZXRVVENIb3VycygpLCB0aGlzLmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5nZXRVVENTZWNvbmRzKCldOw0KICAgICAgICB5ZWFyID0gdGhpcy5nZXRVVENGdWxsWWVhcigpOw0KICAgICAgICB5ZWFyID0gKHllYXIgPCAwID8gJy0nIDogKHllYXIgPiA5OTk5ID8gJysnIDogJycpKSArICgnMDAwMDAnICsgTWF0aC5hYnMoeWVhcikpLnNsaWNlKDAgPD0geWVhciAmJiB5ZWFyIDw9IDk5OTkgPyAtNCA6IC02KTsNCg0KICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoOw0KICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsNCiAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0W2xlbmd0aF07DQogICAgICAgICAgICAvLyBwYWQgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgdG8gaGF2ZSB0d28gZGlnaXRzLg0KICAgICAgICAgICAgaWYgKHZhbHVlIDwgMTApDQogICAgICAgICAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSAiMCIgKyB2YWx1ZTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBwYWQgbWlsbGlzZWNvbmRzIHRvIGhhdmUgdGhyZWUgZGlnaXRzLg0KICAgICAgICByZXR1cm4geWVhciArICItIiArIHJlc3VsdC5zbGljZSgwLCAyKS5qb2luKCItIikgKyAiVCIgKyByZXN1bHQuc2xpY2UoMikuam9pbigiOiIpICsgIi4iICsNCiAgICAgICAgICAgICgiMDAwIiArIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLnNsaWNlKC0zKSArICJaIjsNCiAgICB9DQp9DQoNCi8vIEVTNSAxNS45LjQuNA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjQNCmlmICghRGF0ZS5ub3cpIHsNCiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsNCiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS45LjUuNDQNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40NA0KLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIERhdGUgb2JqZWN0IGZvciB1c2UgYnkgDQovLyBKU09OLnN0cmluZ2lmeSAoMTUuMTIuMykuDQppZiAoIURhdGUucHJvdG90eXBlLnRvSlNPTikgew0KICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHsNCiAgICAgICAgLy8gV2hlbiB0aGUgdG9KU09OIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudCBrZXksIHRoZSBmb2xsb3dpbmcgDQogICAgICAgIC8vIHN0ZXBzIGFyZSB0YWtlbjoNCg0KICAgICAgICAvLyAxLiAgTGV0IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0LCBnaXZpbmcgaXQgdGhlIHRoaXMNCiAgICAgICAgLy8gdmFsdWUgYXMgaXRzIGFyZ3VtZW50Lg0KICAgICAgICAvLyAyLiBMZXQgdHYgYmUgVG9QcmltaXRpdmUoTywgaGludCBOdW1iZXIpLg0KICAgICAgICAvLyAzLiBJZiB0diBpcyBhIE51bWJlciBhbmQgaXMgbm90IGZpbml0ZSwgcmV0dXJuIG51bGwuDQogICAgICAgIC8vIFhYWA0KICAgICAgICAvLyA0LiBMZXQgdG9JU08gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZg0KICAgICAgICAvLyBPIHdpdGggYXJndW1lbnQgInRvSVNPU3RyaW5nIi4NCiAgICAgICAgLy8gNS4gSWYgSXNDYWxsYWJsZSh0b0lTTykgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4NCiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvSVNPU3RyaW5nICE9ICJmdW5jdGlvbiIpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KICAgICAgICAvLyA2LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YNCiAgICAgICAgLy8gIHRvSVNPIHdpdGggTyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnQgbGlzdC4NCiAgICAgICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTsNCg0KICAgICAgICAvLyBOT1RFIDEgVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuDQoNCiAgICAgICAgLy8gTk9URSAyIFRoZSB0b0pTT04gZnVuY3Rpb24gaXMgaW50ZW50aW9uYWxseSBnZW5lcmljOyBpdCBkb2VzIG5vdA0KICAgICAgICAvLyByZXF1aXJlIHRoYXQgaXRzIHRoaXMgdmFsdWUgYmUgYSBEYXRlIG9iamVjdC4gVGhlcmVmb3JlLCBpdCBjYW4gYmUNCiAgICAgICAgLy8gdHJhbnNmZXJyZWQgdG8gb3RoZXIga2luZHMgb2Ygb2JqZWN0cyBmb3IgdXNlIGFzIGEgbWV0aG9kLiBIb3dldmVyLA0KICAgICAgICAvLyBpdCBkb2VzIHJlcXVpcmUgdGhhdCBhbnkgc3VjaCBvYmplY3QgaGF2ZSBhIHRvSVNPU3RyaW5nIG1ldGhvZC4gQW4NCiAgICAgICAgLy8gb2JqZWN0IGlzIGZyZWUgdG8gdXNlIHRoZSBhcmd1bWVudCBrZXkgdG8gZmlsdGVyIGl0cw0KICAgICAgICAvLyBzdHJpbmdpZmljYXRpb24uDQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjkuNC4yDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjQuMg0KLy8gYmFzZWQgb24gd29yayBzaGFyZWQgYnkgRGFuaWVsIEZyaWVzZW4gKGRhbnRtYW4pDQovLyBodHRwOi8vZ2lzdC5naXRodWIuY29tLzMwMzI0OQ0KaWYgKERhdGUucGFyc2UoIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWiIpICE9PSA4LjY0ZTE1KSB7DQogICAgLy8gWFhYIGdsb2JhbCBhc3NpZ25tZW50IHdvbid0IHdvcmsgaW4gZW1iZWRkaW5ncyB0aGF0IHVzZQ0KICAgIC8vIGFuIGFsdGVybmF0ZSBvYmplY3QgZm9yIHRoZSBjb250ZXh0Lg0KICAgIERhdGUgPSAoZnVuY3Rpb24oTmF0aXZlRGF0ZSkgew0KDQogICAgICAgIC8vIERhdGUubGVuZ3RoID09PSA3DQogICAgICAgIHZhciBEYXRlID0gZnVuY3Rpb24gRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgew0KICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7DQogICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZURhdGUpIHsNCiAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IGxlbmd0aCA9PSAxICYmIFN0cmluZyhZKSA9PT0gWSA/IC8vIGlzU3RyaW5nKFkpDQogICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4cGxpY2l0bHkgcGFzcyBpdCB0aHJvdWdoIHBhcnNlOg0KICAgICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZShEYXRlLnBhcnNlKFkpKSA6DQogICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgbWFrZSBjYWxscyBkZXBlbmRpbmcgb24gYXJndW1lbnQNCiAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIGhlcmUNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDcgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgOg0KICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNiA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgsIG0sIHMpIDoNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDUgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtKSA6DQogICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA0ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCkgOg0KICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gMyA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQpIDoNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDIgPyBuZXcgTmF0aXZlRGF0ZShZLCBNKSA6DQogICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSAxID8gbmV3IE5hdGl2ZURhdGUoWSkgOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOYXRpdmVEYXRlKCk7DQogICAgICAgICAgICAgICAgLy8gUHJldmVudCBtaXh1cHMgd2l0aCB1bmZpeGVkIERhdGUgb2JqZWN0DQogICAgICAgICAgICAgICAgZGF0ZS5jb25zdHJ1Y3RvciA9IERhdGU7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOw0KICAgICAgICB9Ow0KDQogICAgICAgIC8vIDE1LjkuMS4xNSBEYXRlIFRpbWUgU3RyaW5nIEZvcm1hdC4NCiAgICAgICAgdmFyIGlzb0RhdGVFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgiXiIgKw0KICAgICAgICAgICAgIihcXGR7NH18W1wrXC1dXFxkezZ9KSIgKyAvLyBmb3VyLWRpZ2l0IHllYXIgY2FwdHVyZSBvciBzaWduICsgNi1kaWdpdCBleHRlbmRlZCB5ZWFyDQogICAgICAgICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIG1vbnRoIGNhcHR1cmUNCiAgICAgICAgICAgICIoPzotKFxcZHsyfSkiICsgLy8gb3B0aW9uYWwgZGF5IGNhcHR1cmUNCiAgICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVyZSBob3VyczptaW51dGVzOnNlY29uZHMubWlsbGlzZWNvbmRzDQogICAgICAgICAgICAgICAgIlQoXFxkezJ9KSIgKyAvLyBob3VycyBjYXB0dXJlDQogICAgICAgICAgICAgICAgIjooXFxkezJ9KSIgKyAvLyBtaW51dGVzIGNhcHR1cmUNCiAgICAgICAgICAgICAgICAiKD86IiArIC8vIG9wdGlvbmFsIDpzZWNvbmRzLm1pbGxpc2Vjb25kcw0KICAgICAgICAgICAgICAgICAgICAiOihcXGR7Mn0pIiArIC8vIHNlY29uZHMgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICAgICAiKD86XFwuKFxcZHszfSkpPyIgKyAvLyBtaWxsaXNlY29uZHMgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICIpPyIgKw0KICAgICAgICAgICAgIig/OiIgKyAvLyBjYXB0dXJlIFVUQyBvZmZzZXQgY29tcG9uZW50DQogICAgICAgICAgICAgICAgIlp8IiArIC8vIFVUQyBjYXB0dXJlDQogICAgICAgICAgICAgICAgIig/OiIgKyAvLyBvZmZzZXQgc3BlY2lmaWVyICsvLWhvdXJzOm1pbnV0ZXMNCiAgICAgICAgICAgICAgICAgICAgIihbLStdKSIgKyAvLyBzaWduIGNhcHR1cmUNCiAgICAgICAgICAgICAgICAgICAgIihcXGR7Mn0pIiArIC8vIGhvdXJzIG9mZnNldCBjYXB0dXJlDQogICAgICAgICAgICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBvZmZzZXQgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICIpIiArDQogICAgICAgICAgICAiKT8pPyk/KT8iICsNCiAgICAgICAgIiQiKTsNCg0KICAgICAgICAvLyBDb3B5IGFueSBjdXN0b20gbWV0aG9kcyBhIDNyZCBwYXJ0eSBsaWJyYXJ5IG1heSBoYXZlIGFkZGVkDQogICAgICAgIGZvciAodmFyIGtleSBpbiBOYXRpdmVEYXRlKQ0KICAgICAgICAgICAgRGF0ZVtrZXldID0gTmF0aXZlRGF0ZVtrZXldOw0KDQogICAgICAgIC8vIENvcHkgIm5hdGl2ZSIgbWV0aG9kcyBleHBsaWNpdGx5OyB0aGV5IG1heSBiZSBub24tZW51bWVyYWJsZQ0KICAgICAgICBEYXRlLm5vdyA9IE5hdGl2ZURhdGUubm93Ow0KICAgICAgICBEYXRlLlVUQyA9IE5hdGl2ZURhdGUuVVRDOw0KICAgICAgICBEYXRlLnByb3RvdHlwZSA9IE5hdGl2ZURhdGUucHJvdG90eXBlOw0KICAgICAgICBEYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERhdGU7DQoNCiAgICAgICAgLy8gVXBncmFkZSBEYXRlLnBhcnNlIHRvIGhhbmRsZSBzaW1wbGlmaWVkIElTTyA4NjAxIHN0cmluZ3MNCiAgICAgICAgRGF0ZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHN0cmluZykgew0KICAgICAgICAgICAgdmFyIG1hdGNoID0gaXNvRGF0ZUV4cHJlc3Npb24uZXhlYyhzdHJpbmcpOw0KICAgICAgICAgICAgaWYgKG1hdGNoKSB7DQogICAgICAgICAgICAgICAgbWF0Y2guc2hpZnQoKTsgLy8ga2lsbCBtYXRjaFswXSwgdGhlIGZ1bGwgbWF0Y2gNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgbWlsbGlzZWNvbmRzDQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkNCiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSArKG1hdGNoW2ldIHx8IChpIDwgMyA/IDEgOiAwKSk7DQogICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzFdIGlzIHRoZSBtb250aC4gTW9udGhzIGFyZSAwLTExIGluIEphdmFTY3JpcHQNCiAgICAgICAgICAgICAgICAgICAgLy8gYERhdGVgIG9iamVjdHMsIGJ1dCAxLTEyIGluIElTTyBub3RhdGlvbiwgc28gd2UNCiAgICAgICAgICAgICAgICAgICAgLy8gZGVjcmVtZW50Lg0KICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0tLTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUgVVRDIG9mZnNldCBjb21wb25lbnQNCiAgICAgICAgICAgICAgICB2YXIgbWludXRlT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBob3VyT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBzaWduID0gbWF0Y2gucG9wKCk7DQoNCiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBleHBsaWNpdCB0aW1lIHpvbmUgb2Zmc2V0IGlmIHNwZWNpZmllZA0KICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwOw0KICAgICAgICAgICAgICAgIGlmIChzaWduKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIGRldGVjdCBpbnZhbGlkIG9mZnNldHMgYW5kIHJldHVybiBlYXJseQ0KICAgICAgICAgICAgICAgICAgICBpZiAoaG91ck9mZnNldCA+IDIzIHx8IG1pbnV0ZU9mZnNldCA+IDU5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBleHByZXNzIHRoZSBwcm92aWRlZCB0aW1lIHpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMuIFRoZSBvZmZzZXQgaXMNCiAgICAgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgZm9yIHRpbWUgem9uZXMgd2VzdCBvZiBVVEM7IHBvc2l0aXZlIG90aGVyd2lzZS4NCiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldCkgKiA2ZTQgKiAoc2lnbiA9PSAiKyIgPyAtMSA6IDEpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIERhdGUuVVRDIGZvciB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGNvbnZlcnRzIHllYXIgdG8gMTkwMCArIHllYXINCiAgICAgICAgICAgICAgICAvLyBUaGUgR3JlZ29yaWFuIGNhbGVuZGFyIGhhcyBhIDQwMC15ZWFyIGN5Y2xlLCBzbyANCiAgICAgICAgICAgICAgICAvLyB0byBEYXRlLlVUQyh5ZWFyICsgNDAwLCAuLi4uICkgLSAxMjYyMjc4MDgwMDAwMCA9PSBEYXRlLlVUQyh5ZWFyLCAuLi4pLA0KICAgICAgICAgICAgICAgIC8vIHdoZXJlIDEyNjIyNzgwODAwMDAwIC0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBHcmVnb3JpYW4gY2FsZW5kYXIgNDAwIHllYXJzDQogICAgICAgICAgICAgICAgdmFyIHllYXIgPSArbWF0Y2hbMF07DQogICAgICAgICAgICAgICAgaWYgKDAgPD0geWVhciAmJiB5ZWFyIDw9IDk5KSB7DQogICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0geWVhciArIDQwMDsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuVVRDLmFwcGx5KHRoaXMsIG1hdGNoKSArIG9mZnNldCAtIDEyNjIyNzgwODAwMDAwOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgYSBuZXcgVVRDIGRhdGUgdmFsdWUsIGFjY291bnRpbmcgZm9yIHRoZSBvcHRpb25hbCBvZmZzZXQNCiAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5VVEMuYXBwbHkodGhpcywgbWF0Y2gpICsgb2Zmc2V0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsNCiAgICAgICAgfTsNCg0KICAgICAgICByZXR1cm4gRGF0ZTsNCiAgICB9KShEYXRlKTsNCn0NCg0KLy8NCi8vIFN0cmluZw0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgMTUuNS40LjIwDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMjANCnZhciB3cyA9ICJceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArDQogICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKw0KICAgICJcdTIwMjlcdUZFRkYiOw0KaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7DQogICAgLy8gaHR0cDovL2Jsb2cuc3RldmVubGV2aXRoYW4uY29tL2FyY2hpdmVzL2Zhc3Rlci10cmltLWphdmFzY3JpcHQNCiAgICAvLyBodHRwOi8vcGVyZmVjdGlvbmtpbGxzLmNvbS93aGl0ZXNwYWNlLWRldmlhdGlvbnMvDQogICAgd3MgPSAiWyIgKyB3cyArICJdIjsNCiAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3cyArIHdzICsgIioiKSwNCiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArICIqJCIpOw0KICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7DQogICAgICAgIHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsNCiAgICB9Ow0KfQ0KDQovLw0KLy8gVXRpbA0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgOS40DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjQNCi8vIGh0dHA6Ly9qc3BlcmYuY29tL3RvLWludGVnZXINCnZhciB0b0ludGVnZXIgPSBmdW5jdGlvbiAobikgew0KICAgIG4gPSArbjsNCiAgICBpZiAobiAhPT0gbikgLy8gaXNOYU4NCiAgICAgICAgbiA9IDA7DQogICAgZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9PSAtKDEvMCkpDQogICAgICAgIG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7DQogICAgcmV0dXJuIG47DQp9Ow0KDQp2YXIgcHJlcGFyZVN0cmluZyA9ICJhIlswXSAhPSAiYSIsDQogICAgLy8gRVM1IDkuOQ0KICAgIC8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDkuOQ0KICAgIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsNCiAgICAgICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCiAgICAgICAgLy8gSWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBieS1pbmRleCBhY2Nlc3Mgb2YNCiAgICAgICAgLy8gc3RyaW5nIGNoYXJhY3RlcnMgKGV4LiBJRSA8IDcpLCBzcGxpdCB0aGUgc3RyaW5nDQogICAgICAgIGlmIChwcmVwYXJlU3RyaW5nICYmIHR5cGVvZiBvID09ICJzdHJpbmciICYmIG8pIHsNCiAgICAgICAgICAgIHJldHVybiBvLnNwbGl0KCIiKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gT2JqZWN0KG8pOw0KICAgIH07DQp9KTsvKiB2aW06dHM9NDpzdHM9NDpzdz00Og0KICogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKg0KICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xDQogKg0KICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KICoNCiAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsDQogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCiAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogKiBMaWNlbnNlLg0KICoNCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIEFqYXgub3JnIENvZGUgRWRpdG9yIChBQ0UpLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQWpheC5vcmcgQi5WLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMA0KICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIENvbnRyaWJ1dG9yKHMpOg0KICogICAgICBGYWJpYW4gSmFrb2JzIDxmYWJpYW4gQVQgYWpheCBET1Qgb3JnPg0KICogICAgICBJcmFrbGkgR296YWxpc2h2aWxpIDxyZm9iaWNAZ21haWwuY29tPiAoaHR0cDovL2plZGl0b29sa2l0LmNvbSkNCiAqICAgICAgTWlrZSBkZSBCb2VyIDxtaWtlIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsNCg0KRXZlbnRFbWl0dGVyLl9lbWl0ID0NCkV2ZW50RW1pdHRlci5fZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZSkgew0KICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9Ow0KICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVycyB8fCB7fTsNCg0KICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gfHwgW107DQogICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV07DQogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikNCiAgICAgICAgcmV0dXJuOw0KDQogICAgZSA9IGUgfHwge307DQogICAgZS50eXBlID0gZXZlbnROYW1lOw0KICAgIA0KICAgIGlmICghZS5zdG9wUHJvcGFnYXRpb24pIHsNCiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsNCiAgICAgICAgfTsNCiAgICB9DQogICAgDQogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KSB7DQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7DQogICAgICAgIH07DQogICAgfQ0KDQogICAgZm9yICh2YXIgaT0wOyBpPGxpc3RlbmVycy5sZW5ndGg7IGkrKykgew0KICAgICAgICBsaXN0ZW5lcnNbaV0oZSk7DQogICAgICAgIGlmIChlLnByb3BhZ2F0aW9uU3RvcHBlZCkNCiAgICAgICAgICAgIGJyZWFrOw0KICAgIH0NCiAgICANCiAgICBpZiAoZGVmYXVsdEhhbmRsZXIgJiYgIWUuZGVmYXVsdFByZXZlbnRlZCkNCiAgICAgICAgZGVmYXVsdEhhbmRsZXIoZSk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8IHt9Ow0KICAgIA0KICAgIGlmICh0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXSkNCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVmYXVsdCBoYW5kbGVyIGZvciAnIiArIGV2ZW50TmFtZSArICInIGlzIGFscmVhZHkgc2V0Iik7DQogICAgICAgIA0KICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gY2FsbGJhY2s7DQp9Ow0KDQpFdmVudEVtaXR0ZXIub24gPQ0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307DQoNCiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOw0KICAgIGlmICghbGlzdGVuZXJzKQ0KICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107DQoNCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQ0KICAgICAgICBsaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQ0KRXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307DQoNCiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOw0KICAgIGlmICghbGlzdGVuZXJzKQ0KICAgICAgICByZXR1cm47DQoNCiAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjayk7DQogICAgaWYgKGluZGV4ICE9PSAtMSkNCiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7DQogICAgaWYgKHRoaXMuX2V2ZW50UmVnaXN0cnkpIHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdOw0KfTsNCg0KZXhwb3J0cy5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7DQoNCn0pOy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9saWIvb29wJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KZXhwb3J0cy5pbmhlcml0cyA9IChmdW5jdGlvbigpIHsNCiAgICB2YXIgdGVtcEN0b3IgPSBmdW5jdGlvbigpIHt9Ow0KICAgIHJldHVybiBmdW5jdGlvbihjdG9yLCBzdXBlckN0b3IpIHsNCiAgICAgICAgdGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTsNCiAgICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3IucHJvdG90eXBlOw0KICAgICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyB0ZW1wQ3RvcigpOw0KICAgICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7DQogICAgfTsNCn0oKSk7DQoNCmV4cG9ydHMubWl4aW4gPSBmdW5jdGlvbihvYmosIG1peGluKSB7DQogICAgZm9yICh2YXIga2V5IGluIG1peGluKSB7DQogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsNCiAgICB9DQp9Ow0KDQpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgew0KICAgIGV4cG9ydHMubWl4aW4ocHJvdG8sIG1peGluKTsNCn07DQoNCn0pOw0KLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKg0KICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xDQogKg0KICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KICoNCiAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsDQogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCiAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogKiBMaWNlbnNlLg0KICoNCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIEFqYXgub3JnIENvZGUgRWRpdG9yIChBQ0UpLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQWpheC5vcmcgQi5WLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMA0KICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIENvbnRyaWJ1dG9yKHMpOg0KICogICAgICBGYWJpYW4gSmFrb2JzIDxmYWJpYW4gQVQgYWpheCBET1Qgb3JnPg0KICoNCiAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mDQogKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3INCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLA0KICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQNCiAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5DQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvDQogKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cg0KICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UNCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlDQogKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyDQogKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLg0KICoNCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovDQogDQpkZWZpbmUoJ2FjZS9tb2RlL2NvZmZlZV93b3JrZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS93b3JrZXIvbWlycm9yJywgJ2FjZS9tb2RlL2NvZmZlZS9jb2ZmZWUtc2NyaXB0J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KInVzZSBzdHJpY3QiOw0KICAgIA0KdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsNCnZhciBNaXJyb3IgPSByZXF1aXJlKCIuLi93b3JrZXIvbWlycm9yIikuTWlycm9yOw0KdmFyIGNvZmZlZSA9IHJlcXVpcmUoIi4uL21vZGUvY29mZmVlL2NvZmZlZS1zY3JpcHQiKTsNCg0Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbigpIHt9Ow0KDQoNCnZhciBXb3JrZXIgPSBleHBvcnRzLldvcmtlciA9IGZ1bmN0aW9uKHNlbmRlcikgew0KICAgIE1pcnJvci5jYWxsKHRoaXMsIHNlbmRlcik7DQogICAgdGhpcy5zZXRUaW1lb3V0KDIwMCk7DQp9Ow0KDQpvb3AuaW5oZXJpdHMoV29ya2VyLCBNaXJyb3IpOw0KDQooZnVuY3Rpb24oKSB7DQogICAgDQogICAgdGhpcy5vblVwZGF0ZSA9IGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRvYy5nZXRWYWx1ZSgpOw0KICAgICAgICANCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvZmZlZS5wYXJzZSh2YWx1ZSk7DQogICAgICAgIH0gY2F0Y2goZSkgew0KICAgICAgICAgICAgdmFyIG0gPSBlLm1lc3NhZ2UubWF0Y2goL1BhcnNlIGVycm9yIG9uIGxpbmUgKFxkKyk6ICguKikvKTsNCiAgICAgICAgICAgIGlmIChtKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zZW5kZXIuZW1pdCgiZXJyb3IiLCB7DQogICAgICAgICAgICAgICAgICAgIHJvdzogcGFyc2VJbnQobVsxXSkgLSAxLA0KICAgICAgICAgICAgICAgICAgICBjb2x1bW46IG51bGwsDQogICAgICAgICAgICAgICAgICAgIHRleHQ6IG1bMl0sDQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJlcnJvciINCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHsNCiAgICAgICAgICAgICAgICB2YXIgbSA9IGUubWVzc2FnZS5tYXRjaCgvIG9uIGxpbmUgKFxkKykvKTsNCiAgICAgICAgICAgICAgICBpZiAobSkgeyAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZGVyLmVtaXQoImVycm9yIiwgew0KICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBwYXJzZUludChtWzFdKSAtIDEsDQogICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IG51bGwsDQogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlLm1lc3NhZ2UucmVwbGFjZShtWzBdLCAiIiksDQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZXJyb3IiDQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLnNlbmRlci5lbWl0KCJvayIpOw0KICAgIH07DQogICAgDQp9KS5jYWxsKFdvcmtlci5wcm90b3R5cGUpOw0KDQp9KTtkZWZpbmUoJ2FjZS93b3JrZXIvbWlycm9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvZG9jdW1lbnQnLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KInVzZSBzdHJpY3QiOw0KDQp2YXIgRG9jdW1lbnQgPSByZXF1aXJlKCIuLi9kb2N1bWVudCIpLkRvY3VtZW50Ow0KdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOw0KICAgIA0KdmFyIE1pcnJvciA9IGV4cG9ydHMuTWlycm9yID0gZnVuY3Rpb24oc2VuZGVyKSB7DQogICAgdGhpcy5zZW5kZXIgPSBzZW5kZXI7DQogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsNCiAgICANCiAgICB2YXIgZGVmZXJyZWRVcGRhdGUgPSB0aGlzLmRlZmVycmVkVXBkYXRlID0gbGFuZy5kZWZlcnJlZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsNCiAgICANCiAgICB2YXIgX3NlbGYgPSB0aGlzOw0KICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgew0KICAgICAgICBkb2MuYXBwbHlEZWx0YXMoW2UuZGF0YV0pOyAgICAgICAgDQogICAgICAgIGRlZmVycmVkVXBkYXRlLnNjaGVkdWxlKF9zZWxmLiR0aW1lb3V0KTsNCiAgICB9KTsNCn07DQoNCihmdW5jdGlvbigpIHsNCiAgICANCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOw0KICAgIA0KICAgIHRoaXMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsNCiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7DQogICAgfTsNCiAgICANCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsNCiAgICAgICAgdGhpcy5kb2Muc2V0VmFsdWUodmFsdWUpOw0KICAgICAgICB0aGlzLmRlZmVycmVkVXBkYXRlLnNjaGVkdWxlKHRoaXMuJHRpbWVvdXQpOw0KICAgIH07DQogICAgDQogICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrSWQpIHsNCiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7DQogICAgICAgIC8vIGFic3RyYWN0IG1ldGhvZA0KICAgIH07DQogICAgDQp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOw0KDQp9KTsvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqDQogKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjENCiAqDQogKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24NCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvDQogKg0KICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywNCiAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQ0KICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUNCiAqIExpY2Vuc2UuDQogKg0KICogVGhlIE9yaWdpbmFsIENvZGUgaXMgQWpheC5vcmcgQ29kZSBFZGl0b3IgKEFDRSkuDQogKg0KICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzDQogKiBBamF4Lm9yZyBCLlYuDQogKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDEwDQogKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQogKg0KICogQ29udHJpYnV0b3Iocyk6DQogKiAgICAgIEZhYmlhbiBKYWtvYnMgPGZhYmlhbiBBVCBhamF4IERPVCBvcmc+DQogKg0KICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YNCiAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcg0KICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksDQogKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZA0KICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkNCiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8NCiAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyDQogKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQ0KICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUNCiAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXINCiAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuDQogKg0KICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8NCg0KZGVmaW5lKCdhY2UvZG9jdW1lbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsICdhY2UvcmFuZ2UnLCAnYWNlL2FuY2hvciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOw0KdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7DQp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7DQp2YXIgQW5jaG9yID0gcmVxdWlyZSgiLi9hbmNob3IiKS5BbmNob3I7DQoNCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHQpIHsNCiAgICB0aGlzLiRsaW5lcyA9IFtdOw0KDQogICAgaWYgKEFycmF5LmlzQXJyYXkodGV4dCkpIHsNCiAgICAgICAgdGhpcy5pbnNlcnRMaW5lcygwLCB0ZXh0KTsNCiAgICB9DQogICAgLy8gVGhlcmUgaGFzIHRvIGJlIG9uZSBsaW5lIGF0IGxlYXN0IGluIHRoZSBkb2N1bWVudC4gSWYgeW91IHBhc3MgYW4gZW1wdHkNCiAgICAvLyBzdHJpbmcgdG8gdGhlIGluc2VydCBmdW5jdGlvbiwgbm90aGluZyB3aWxsIGhhcHBlbi4gV29ya2Fyb3VuZC4NCiAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA9PSAwKSB7DQogICAgICAgIHRoaXMuJGxpbmVzID0gWyIiXTsNCiAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHQpOw0KICAgIH0NCn07DQoNCihmdW5jdGlvbigpIHsNCg0KICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsNCg0KICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7DQogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpOw0KICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuLTEpLmxlbmd0aCkpOw0KICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHQpOw0KICAgIH07DQoNCiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLmdldEFsbExpbmVzKCkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7DQogICAgfTsNCg0KICAgIHRoaXMuY3JlYXRlQW5jaG9yID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOw0KICAgIH07DQoNCiAgICAvLyBjaGVjayBmb3IgSUUgc3BsaXQgYnVnDQogICAgaWYgKCJhYWEiLnNwbGl0KC9hLykubGVuZ3RoID09IDApDQogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgew0KICAgICAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXHJcbnxcci9nLCAiXG4iKS5zcGxpdCgiXG4iKTsNCiAgICAgICAgfQ0KICAgIGVsc2UNCiAgICAgICAgdGhpcy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7DQogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOw0KICAgICAgICB9Ow0KDQoNCiAgICB0aGlzLiRkZXRlY3ROZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgew0KICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eLio/KFxyXG58XHJ8XG4pL20pOw0KICAgICAgICBpZiAobWF0Y2gpIHsNCiAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gbWF0Y2hbMV07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9ICJcbiI7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyID0gZnVuY3Rpb24oKSB7DQogICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7DQogICAgICAgICAgY2FzZSAid2luZG93cyI6DQogICAgICAgICAgICAgIHJldHVybiAiXHJcbiI7DQoNCiAgICAgICAgICBjYXNlICJ1bml4IjoNCiAgICAgICAgICAgICAgcmV0dXJuICJcbiI7DQoNCiAgICAgICAgICBjYXNlICJhdXRvIjoNCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF1dG9OZXdMaW5lOw0KICAgICAgfQ0KICAgIH07DQoNCiAgICB0aGlzLiRhdXRvTmV3TGluZSA9ICJcbiI7DQogICAgdGhpcy4kbmV3TGluZU1vZGUgPSAiYXV0byI7DQogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7DQogICAgICAgIGlmICh0aGlzLiRuZXdMaW5lTW9kZSA9PT0gbmV3TGluZU1vZGUpDQogICAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgdGhpcy4kbmV3TGluZU1vZGUgPSBuZXdMaW5lTW9kZTsNCiAgICB9Ow0KDQogICAgdGhpcy5nZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKCkgew0KICAgICAgICByZXR1cm4gdGhpcy4kbmV3TGluZU1vZGU7DQogICAgfTsNCg0KICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgew0KICAgICAgICByZXR1cm4gKHRleHQgPT0gIlxyXG4iIHx8IHRleHQgPT0gIlxyIiB8fCB0ZXh0ID09ICJcbiIpOw0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBHZXQgYSB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBnaXZlbiBsaW5lIGFzIGl0IGlzIGluIHRoZSBkb2N1bWVudA0KICAgICAqLw0KICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykgew0KICAgICAgICByZXR1cm4gdGhpcy4kbGluZXNbcm93XSB8fCAiIjsNCiAgICB9Ow0KDQogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7DQogICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5zbGljZShmaXJzdFJvdywgbGFzdFJvdyArIDEpOw0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIGFsbCBsaW5lcyBpbiB0aGUgZG9jdW1lbnQgYXMgc3RyaW5nIGFycmF5LiBXYXJuaW5nOiBUaGUgY2FsbGVyDQogICAgICogc2hvdWxkIG5vdCBtb2RpZnkgdGhpcyBhcnJheSENCiAgICAgKi8NCiAgICB0aGlzLmdldEFsbExpbmVzID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOw0KICAgIH07DQoNCiAgICB0aGlzLmdldExlbmd0aCA9IGZ1bmN0aW9uKCkgew0KICAgICAgICByZXR1cm4gdGhpcy4kbGluZXMubGVuZ3RoOw0KICAgIH07DQoNCiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7DQogICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdykgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3JhbmdlLnN0YXJ0LnJvd10uc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4pOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgdmFyIGxpbmVzID0gW107DQogICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuJGxpbmVzW3JhbmdlLnN0YXJ0LnJvd10uc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbikpOw0KICAgICAgICAgICAgbGluZXMucHVzaC5hcHBseShsaW5lcywgdGhpcy5nZXRMaW5lcyhyYW5nZS5zdGFydC5yb3crMSwgcmFuZ2UuZW5kLnJvdy0xKSk7DQogICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuJGxpbmVzW3JhbmdlLmVuZC5yb3ddLnN1YnN0cmluZygwLCByYW5nZS5lbmQuY29sdW1uKSk7DQogICAgICAgICAgICByZXR1cm4gbGluZXMuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgdGhpcy4kY2xpcFBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHsNCiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuZ2V0TGVuZ3RoKCk7DQogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7DQogICAgICAgICAgICBwb3NpdGlvbi5yb3cgPSBNYXRoLm1heCgwLCBsZW5ndGggLSAxKTsNCiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IHRoaXMuZ2V0TGluZShsZW5ndGgtMSkubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBwb3NpdGlvbjsNCiAgICB9Ow0KDQogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgew0KICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMCkNCiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsNCg0KICAgICAgICBwb3NpdGlvbiA9IHRoaXMuJGNsaXBQb3NpdGlvbihwb3NpdGlvbik7DQoNCiAgICAgICAgaWYgKHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMSkNCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7DQoNCiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kc3BsaXQodGV4dCk7DQogICAgICAgIHZhciBmaXJzdExpbmUgPSBsaW5lcy5zcGxpY2UoMCwgMSlbMF07DQogICAgICAgIHZhciBsYXN0TGluZSA9IGxpbmVzLmxlbmd0aCA9PSAwID8gbnVsbCA6IGxpbmVzLnNwbGljZShsaW5lcy5sZW5ndGggLSAxLCAxKVswXTsNCg0KICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0SW5MaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUpOw0KICAgICAgICBpZiAobGFzdExpbmUgIT09IG51bGwpIHsNCiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnROZXdMaW5lKHBvc2l0aW9uKTsgLy8gdGVybWluYXRlIGZpcnN0IGxpbmUNCiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnRMaW5lcyhwb3NpdGlvbi5yb3csIGxpbmVzKTsNCiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnRJbkxpbmUocG9zaXRpb24sIGxhc3RMaW5lIHx8ICIiKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gcG9zaXRpb247DQogICAgfTsNCg0KICAgIHRoaXMuaW5zZXJ0TGluZXMgPSBmdW5jdGlvbihyb3csIGxpbmVzKSB7DQogICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT0gMCkNCiAgICAgICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogMH07DQoNCiAgICAgICAgdmFyIGFyZ3MgPSBbcm93LCAwXTsNCiAgICAgICAgYXJncy5wdXNoLmFwcGx5KGFyZ3MsIGxpbmVzKTsNCiAgICAgICAgdGhpcy4kbGluZXMuc3BsaWNlLmFwcGx5KHRoaXMuJGxpbmVzLCBhcmdzKTsNCg0KICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCAwLCByb3cgKyBsaW5lcy5sZW5ndGgsIDApOw0KICAgICAgICB2YXIgZGVsdGEgPSB7DQogICAgICAgICAgICBhY3Rpb246ICJpbnNlcnRMaW5lcyIsDQogICAgICAgICAgICByYW5nZTogcmFuZ2UsDQogICAgICAgICAgICBsaW5lczogbGluZXMNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsNCiAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsNCiAgICB9Ow0KDQogICAgdGhpcy5pbnNlcnROZXdMaW5lID0gZnVuY3Rpb24ocG9zaXRpb24pIHsNCiAgICAgICAgcG9zaXRpb24gPSB0aGlzLiRjbGlwUG9zaXRpb24ocG9zaXRpb24pOw0KICAgICAgICB2YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gfHwgIiI7DQoNCiAgICAgICAgdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbik7DQogICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShwb3NpdGlvbi5yb3cgKyAxLCAwLCBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4sIGxpbmUubGVuZ3RoKSk7DQoNCiAgICAgICAgdmFyIGVuZCA9IHsNCiAgICAgICAgICAgIHJvdyA6IHBvc2l0aW9uLnJvdyArIDEsDQogICAgICAgICAgICBjb2x1bW4gOiAwDQogICAgICAgIH07DQoNCiAgICAgICAgdmFyIGRlbHRhID0gew0KICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0VGV4dCIsDQogICAgICAgICAgICByYW5nZTogUmFuZ2UuZnJvbVBvaW50cyhwb3NpdGlvbiwgZW5kKSwNCiAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpDQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7DQoNCiAgICAgICAgcmV0dXJuIGVuZDsNCiAgICB9Ow0KDQogICAgdGhpcy5pbnNlcnRJbkxpbmUgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgew0KICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMCkNCiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsNCg0KICAgICAgICB2YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gfHwgIiI7DQoNCiAgICAgICAgdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbikgKyB0ZXh0DQogICAgICAgICAgICAgICAgKyBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4pOw0KDQogICAgICAgIHZhciBlbmQgPSB7DQogICAgICAgICAgICByb3cgOiBwb3NpdGlvbi5yb3csDQogICAgICAgICAgICBjb2x1bW4gOiBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aA0KICAgICAgICB9Ow0KDQogICAgICAgIHZhciBkZWx0YSA9IHsNCiAgICAgICAgICAgIGFjdGlvbjogImluc2VydFRleHQiLA0KICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmZyb21Qb2ludHMocG9zaXRpb24sIGVuZCksDQogICAgICAgICAgICB0ZXh0OiB0ZXh0DQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7DQoNCiAgICAgICAgcmV0dXJuIGVuZDsNCiAgICB9Ow0KDQogICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkgew0KICAgICAgICAvLyBjbGlwIHRvIGRvY3VtZW50DQogICAgICAgIHJhbmdlLnN0YXJ0ID0gdGhpcy4kY2xpcFBvc2l0aW9uKHJhbmdlLnN0YXJ0KTsNCiAgICAgICAgcmFuZ2UuZW5kID0gdGhpcy4kY2xpcFBvc2l0aW9uKHJhbmdlLmVuZCk7DQoNCiAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkNCiAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsNCg0KICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZS5zdGFydC5yb3c7DQogICAgICAgIHZhciBsYXN0Um93ID0gcmFuZ2UuZW5kLnJvdzsNCg0KICAgICAgICBpZiAocmFuZ2UuaXNNdWx0aUxpbmUoKSkgew0KICAgICAgICAgICAgdmFyIGZpcnN0RnVsbFJvdyA9IHJhbmdlLnN0YXJ0LmNvbHVtbiA9PSAwID8gZmlyc3RSb3cgOiBmaXJzdFJvdyArIDE7DQogICAgICAgICAgICB2YXIgbGFzdEZ1bGxSb3cgPSBsYXN0Um93IC0gMTsNCg0KICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5jb2x1bW4gPiAwKQ0KICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5lKGxhc3RSb3csIDAsIHJhbmdlLmVuZC5jb2x1bW4pOw0KDQogICAgICAgICAgICBpZiAobGFzdEZ1bGxSb3cgPj0gZmlyc3RGdWxsUm93KQ0KICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMoZmlyc3RGdWxsUm93LCBsYXN0RnVsbFJvdyk7DQoNCiAgICAgICAgICAgIGlmIChmaXJzdEZ1bGxSb3cgIT0gZmlyc3RSb3cpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJzdFJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCB0aGlzLmdldExpbmUoZmlyc3RSb3cpLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOZXdMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJzdFJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7DQogICAgfTsNCg0KICAgIHRoaXMucmVtb3ZlSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7DQogICAgICAgIGlmIChzdGFydENvbHVtbiA9PSBlbmRDb2x1bW4pDQogICAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHJvdywgc3RhcnRDb2x1bW4sIHJvdywgZW5kQ29sdW1uKTsNCiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsNCiAgICAgICAgdmFyIHJlbW92ZWQgPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsNCiAgICAgICAgdmFyIG5ld0xpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4sIGxpbmUubGVuZ3RoKTsNCiAgICAgICAgdGhpcy4kbGluZXMuc3BsaWNlKHJvdywgMSwgbmV3TGluZSk7DQoNCiAgICAgICAgdmFyIGRlbHRhID0gew0KICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlVGV4dCIsDQogICAgICAgICAgICByYW5nZTogcmFuZ2UsDQogICAgICAgICAgICB0ZXh0OiByZW1vdmVkDQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7DQogICAgICAgIHJldHVybiByYW5nZS5zdGFydDsNCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogUmVtb3ZlcyBhIHJhbmdlIG9mIGZ1bGwgbGluZXMNCiAgICAgKg0KICAgICAqIEBwYXJhbSBmaXJzdFJvdyB7SW50ZWdlcn0gVGhlIGZpcnN0IHJvdyB0byBiZSByZW1vdmVkDQogICAgICogQHBhcmFtIGxhc3RSb3cge0ludGVnZXJ9IFRoZSBsYXN0IHJvdyB0byBiZSByZW1vdmVkDQogICAgICogQHJldHVybiB7U3RyaW5nW119IFRoZSByZW1vdmVkIGxpbmVzDQogICAgICovDQogICAgdGhpcy5yZW1vdmVMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7DQogICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShmaXJzdFJvdywgMCwgbGFzdFJvdyArIDEsIDApOw0KICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuJGxpbmVzLnNwbGljZShmaXJzdFJvdywgbGFzdFJvdyAtIGZpcnN0Um93ICsgMSk7DQoNCiAgICAgICAgdmFyIGRlbHRhID0gew0KICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlTGluZXMiLA0KICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLA0KICAgICAgICAgICAgbmw6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLA0KICAgICAgICAgICAgbGluZXM6IHJlbW92ZWQNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsNCiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7DQogICAgfTsNCg0KICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgew0KICAgICAgICB2YXIgZmlyc3RMaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7DQogICAgICAgIHZhciBzZWNvbmRMaW5lID0gdGhpcy5nZXRMaW5lKHJvdysxKTsNCg0KICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBmaXJzdExpbmUubGVuZ3RoLCByb3crMSwgMCk7DQogICAgICAgIHZhciBsaW5lID0gZmlyc3RMaW5lICsgc2Vjb25kTGluZTsNCg0KICAgICAgICB0aGlzLiRsaW5lcy5zcGxpY2Uocm93LCAyLCBsaW5lKTsNCg0KICAgICAgICB2YXIgZGVsdGEgPSB7DQogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVUZXh0IiwNCiAgICAgICAgICAgIHJhbmdlOiByYW5nZSwNCiAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpDQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7DQogICAgfTsNCg0KICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KSB7DQogICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkNCiAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsNCg0KICAgICAgICAvLyBTaG9ydGN1dDogSWYgdGhlIHRleHQgd2Ugd2FudCB0byBpbnNlcnQgaXMgdGhlIHNhbWUgYXMgaXQgaXMgYWxyZWFkeQ0KICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQsIHdlIGRvbid0IGhhdmUgdG8gcmVwbGFjZSBhbnl0aGluZy4NCiAgICAgICAgaWYgKHRleHQgPT0gdGhpcy5nZXRUZXh0UmFuZ2UocmFuZ2UpKQ0KICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsNCg0KICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7DQogICAgICAgIGlmICh0ZXh0KSB7DQogICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZW5kOw0KICAgIH07DQoNCiAgICB0aGlzLmFwcGx5RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7DQogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTsNCiAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdlLmVuZCk7DQoNCiAgICAgICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2VydExpbmVzIikNCiAgICAgICAgICAgICAgICB0aGlzLmluc2VydExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgZGVsdGEubGluZXMpOw0KICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnRUZXh0IikNCiAgICAgICAgICAgICAgICB0aGlzLmluc2VydChyYW5nZS5zdGFydCwgZGVsdGEudGV4dCk7DQogICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyAtIDEpOw0KICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IikNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgdGhpcy5yZXZlcnREZWx0YXMgPSBmdW5jdGlvbihkZWx0YXMpIHsNCiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgew0KICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOw0KDQogICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGRlbHRhLnJhbmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5lbmQpOw0KDQogICAgICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnRMaW5lcyIpDQogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lcyhyYW5nZS5zdGFydC5yb3csIHJhbmdlLmVuZC5yb3cgLSAxKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0VGV4dCIpDQogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOw0KICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpDQogICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5lcyhyYW5nZS5zdGFydC5yb3csIGRlbHRhLmxpbmVzKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIpDQogICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIGRlbHRhLnRleHQpOw0KICAgICAgICB9DQogICAgfTsNCg0KfSkuY2FsbChEb2N1bWVudC5wcm90b3R5cGUpOw0KDQpleHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7DQp9KTsNCi8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9yYW5nZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCnZhciBSYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pIHsNCiAgICB0aGlzLnN0YXJ0ID0gew0KICAgICAgICByb3c6IHN0YXJ0Um93LA0KICAgICAgICBjb2x1bW46IHN0YXJ0Q29sdW1uDQogICAgfTsNCg0KICAgIHRoaXMuZW5kID0gew0KICAgICAgICByb3c6IGVuZFJvdywNCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4NCiAgICB9Ow0KfTsNCg0KKGZ1bmN0aW9uKCkgew0KICAgIHRoaXMuaXNFZXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgew0KICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcmFuZ2Uuc3RhcnQucm93ICYmDQogICAgICAgICAgICB0aGlzLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJvdyAmJg0KICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmDQogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPT0gcmFuZ2UuZW5kLmNvbHVtbg0KICAgIH07DQoNCiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiAoIlJhbmdlOiBbIiArIHRoaXMuc3RhcnQucm93ICsgIi8iICsgdGhpcy5zdGFydC5jb2x1bW4gKw0KICAgICAgICAgICAgIl0gLT4gWyIgKyB0aGlzLmVuZC5yb3cgKyAiLyIgKyB0aGlzLmVuZC5jb2x1bW4gKyAiXSIpOw0KICAgIH07DQoNCiAgICB0aGlzLmNvbnRhaW5zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsNCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogQ29tcGFyZXMgdGhpcyByYW5nZSAoQSkgd2l0aCBhbm90aGVyIHJhbmdlIChCKSwgd2hlcmUgQiBpcyB0aGUgcGFzc2VkIGluDQogICAgICogcmFuZ2UuDQogICAgICoNCiAgICAgKiBSZXR1cm4gdmFsdWVzOg0KICAgICAqICAtMjogKEIpIGlzIGluZnJvbnQgb2YgKEEpIGFuZCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIChBKQ0KICAgICAqICAtMTogKEIpIGJlZ2lucyBiZWZvcmUgKEEpIGJ1dCBlbmRzIGluc2lkZSBvZiAoQSkNCiAgICAgKiAgIDA6IChCKSBpcyBjb21wbGV0bHkgaW5zaWRlIG9mIChBKSBPUiAoQSkgaXMgY29tcGxldHkgaW5zaWRlIG9mIChCKQ0KICAgICAqICArMTogKEIpIGJlZ2lucyBpbnNpZGUgb2YgKEEpIGJ1dCBlbmRzIG91dHNpZGUgb2YgKEEpDQogICAgICogICsyOiAoQikgaXMgYWZ0ZXIgKEEpIGFuZCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIChBKQ0KICAgICAqDQogICAgICogIDQyOiBGVFcgc3RhdGU6IChCKSBlbmRzIGluIChBKSBidXQgc3RhcnRzIG91dHNpZGUgb2YgKEEpDQogICAgICovDQogICAgdGhpcy5jb21wYXJlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgew0KICAgICAgICB2YXIgY21wLA0KICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLA0KICAgICAgICAgICAgc3RhcnQgPSByYW5nZS5zdGFydDsNCg0KICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7DQogICAgICAgIGlmIChjbXAgPT0gMSkgew0KICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsNCiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAyOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMCkgew0KICAgICAgICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gLTEpIHsNCiAgICAgICAgICAgIHJldHVybiAtMjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7DQogICAgICAgICAgICBpZiAoY21wID09IC0xKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMSkgew0KICAgICAgICAgICAgICAgIHJldHVybiA0MjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShwLnJvdywgcC5jb2x1bW4pOw0KICAgIH0NCg0KICAgIHRoaXMuY29udGFpbnNSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7DQogICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkgPT0gMCAmJiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5lbmQpID09IDA7DQogICAgfQ0KDQogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIHJldHVybiB0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW47DQogICAgfQ0KDQogICAgdGhpcy5pc1N0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW47DQogICAgfQ0KDQogICAgdGhpcy5zZXRTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7DQogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IHJvdy5jb2x1bW47DQogICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IHJvdy5yb3c7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IHJvdzsNCiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gY29sdW1uOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0Iikgew0KICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gcm93LmNvbHVtbjsNCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3c7DQogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0aGlzLmluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsNCiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsNCiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIHRoaXMuaW5zaWRlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgew0KICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICB0aGlzLmNvbXBhcmUgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aUxpbmUoKSkgew0KICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uIDwgdGhpcy5zdGFydC5jb2x1bW4gPyAtMSA6IChjb2x1bW4gPiB0aGlzLmVuZC5jb2x1bW4gPyAxIDogMCk7DQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQ0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpDQogICAgICAgICAgICByZXR1cm4gMTsNCg0KICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykNCiAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPj0gdGhpcy5zdGFydC5jb2x1bW4gPyAwIDogLTE7DQoNCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQ0KICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8PSB0aGlzLmVuZC5jb2x1bW4gPyAwIDogMTsNCg0KICAgICAgICByZXR1cm4gMDsNCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogTGlrZSAuY29tcGFyZSgpLCBidXQgaWYgaXNTdGFydCBpcyB0cnVlLCByZXR1cm4gLTE7DQogICAgICovDQogICAgdGhpcy5jb21wYXJlU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikgew0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBMaWtlIC5jb21wYXJlKCksIGJ1dCBpZiBpc0VuZCBpcyB0cnVlLCByZXR1cm4gMTsNCiAgICAgKi8NCiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAodGhpcy5lbmQucm93ID09IHJvdyAmJiB0aGlzLmVuZC5jb2x1bW4gPT0gY29sdW1uKSB7DQogICAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgdGhpcy5jb21wYXJlSW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgew0KICAgICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikgew0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsNCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA+IGxhc3RSb3cpIHsNCiAgICAgICAgICAgIHZhciBlbmQgPSB7DQogICAgICAgICAgICAgICAgcm93OiBsYXN0Um93KzEsDQogICAgICAgICAgICAgICAgY29sdW1uOiAwDQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFzdFJvdykgew0KICAgICAgICAgICAgdmFyIHN0YXJ0ID0gew0KICAgICAgICAgICAgICAgIHJvdzogbGFzdFJvdysxLA0KICAgICAgICAgICAgICAgIGNvbHVtbjogMA0KICAgICAgICAgICAgfTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA8IGZpcnN0Um93KSB7DQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7DQogICAgICAgICAgICAgICAgcm93OiBmaXJzdFJvdywNCiAgICAgICAgICAgICAgICBjb2x1bW46IDANCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodGhpcy5lbmQucm93IDwgZmlyc3RSb3cpIHsNCiAgICAgICAgICAgIHZhciBlbmQgPSB7DQogICAgICAgICAgICAgICAgcm93OiBmaXJzdFJvdywNCiAgICAgICAgICAgICAgICBjb2x1bW46IDANCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTsNCiAgICB9Ow0KDQogICAgdGhpcy5leHRlbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsNCg0KICAgICAgICBpZiAoY21wID09IDApDQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgZWxzZSBpZiAoY21wID09IC0xKQ0KICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsNCg0KICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOw0KICAgIH07DQoNCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyA9PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gdGhpcy5lbmQuY29sdW1uKTsNCiAgICB9Ow0KDQogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgew0KICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ICE9PSB0aGlzLmVuZC5yb3cpOw0KICAgIH07DQoNCiAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsNCiAgICB9Ow0KDQogICAgdGhpcy5jb2xsYXBzZVJvd3MgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgaWYgKHRoaXMuZW5kLmNvbHVtbiA9PSAwKQ0KICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCkNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgdGhpcy5lbmQucm93LCAwKQ0KICAgIH07DQoNCiAgICB0aGlzLnRvU2NyZWVuUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uKSB7DQogICAgICAgIHZhciBzY3JlZW5Qb3NTdGFydCA9DQogICAgICAgICAgICBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsNCiAgICAgICAgdmFyIHNjcmVlblBvc0VuZCA9DQogICAgICAgICAgICBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmVuZCk7DQoNCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSgNCiAgICAgICAgICAgIHNjcmVlblBvc1N0YXJ0LnJvdywgc2NyZWVuUG9zU3RhcnQuY29sdW1uLA0KICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbg0KICAgICAgICApOw0KICAgIH07DQoNCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsNCg0KDQpSYW5nZS5mcm9tUG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgew0KICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOw0KfTsNCg0KZXhwb3J0cy5SYW5nZSA9IFJhbmdlOw0KfSk7DQovKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqDQogKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjENCiAqDQogKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24NCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvDQogKg0KICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywNCiAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQ0KICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUNCiAqIExpY2Vuc2UuDQogKg0KICogVGhlIE9yaWdpbmFsIENvZGUgaXMgQWpheC5vcmcgQ29kZSBFZGl0b3IgKEFDRSkuDQogKg0KICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzDQogKiBBamF4Lm9yZyBCLlYuDQogKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDEwDQogKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQogKg0KICogQ29udHJpYnV0b3Iocyk6DQogKiAgICAgIEZhYmlhbiBKYWtvYnMgPGZhYmlhbiBBVCBhamF4IERPVCBvcmc+DQogKg0KICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YNCiAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcg0KICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksDQogKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZA0KICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkNCiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8NCiAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyDQogKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQ0KICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUNCiAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXINCiAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuDQogKg0KICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8NCg0KZGVmaW5lKCdhY2UvYW5jaG9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsNCnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOw0KDQovKioNCiAqIEFuIEFuY2hvciBpcyBhIGZsb2F0aW5nIHBvaW50ZXIgaW4gdGhlIGRvY3VtZW50LiBXaGVuZXZlciB0ZXh0IGlzIGluc2VydGVkIG9yDQogKiBkZWxldGVkIGJlZm9yZSB0aGUgY3Vyc29yLCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvciBpcyB1cGRhdGVkDQogKi8NCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsNCiAgICB0aGlzLmRvY3VtZW50ID0gZG9jOw0KICAgIA0KICAgIGlmICh0eXBlb2YgY29sdW1uID09ICJ1bmRlZmluZWQiKQ0KICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdy5yb3csIHJvdy5jb2x1bW4pOw0KICAgIGVsc2UNCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3csIGNvbHVtbik7DQoNCiAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTsNCiAgICBkb2Mub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsNCn07DQoNCihmdW5jdGlvbigpIHsNCg0KICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsNCiAgICANCiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LCB0aGlzLmNvbHVtbik7DQogICAgfTsNCiAgICANCiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50Ow0KICAgIH07DQogICAgDQogICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgdmFyIGRlbHRhID0gZS5kYXRhOw0KICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsNCiAgICAgICAgICAgIA0KICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYgcmFuZ2Uuc3RhcnQucm93ICE9IHRoaXMucm93KQ0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgDQogICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPiB0aGlzLnJvdykNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIA0KICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHRoaXMucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA+IHRoaXMuY29sdW1uKQ0KICAgICAgICAgICAgcmV0dXJuOw0KICAgIA0KICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3c7DQogICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbjsNCiAgICAgICAgDQogICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0Iikgew0KICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSBjb2x1bW4pIHsNCiAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93KSB7DQogICAgICAgICAgICAgICAgICAgIGNvbHVtbiArPSByYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1uOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uIC09IHJhbmdlLnN0YXJ0LmNvbHVtbjsNCiAgICAgICAgICAgICAgICAgICAgcm93ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5lbmQucm93ICYmIHJhbmdlLnN0YXJ0LnJvdyA8IHJvdykgew0KICAgICAgICAgICAgICAgIHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydExpbmVzIikgew0KICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8PSByb3cpIHsNCiAgICAgICAgICAgICAgICByb3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRleHQiKSB7DQogICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJvdyAmJiByYW5nZS5zdGFydC5jb2x1bW4gPCBjb2x1bW4pIHsNCiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLmNvbHVtbiA+PSBjb2x1bW4pDQogICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsNCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIChyYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1uKSk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdyAmJiByYW5nZS5zdGFydC5yb3cgPCByb3cpIHsNCiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA9PSByb3cpIHsNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbikgKyByYW5nZS5zdGFydC5jb2x1bW47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJvdyAtPSAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmIChyYW5nZS5lbmQucm93ID09IHJvdykgew0KICAgICAgICAgICAgICAgIHJvdyAtPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93Ow0KICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIHJhbmdlLmVuZC5jb2x1bW4pICsgcmFuZ2Uuc3RhcnQuY29sdW1uOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7DQogICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDw9IHJvdykgew0KICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93IDw9IHJvdykNCiAgICAgICAgICAgICAgICAgICAgcm93IC09IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uLCB0cnVlKTsNCiAgICB9Ow0KDQogICAgdGhpcy5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBub0NsaXApIHsNCiAgICAgICAgdmFyIHBvczsNCiAgICAgICAgaWYgKG5vQ2xpcCkgew0KICAgICAgICAgICAgcG9zID0gew0KICAgICAgICAgICAgICAgIHJvdzogcm93LA0KICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uDQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmICh0aGlzLnJvdyA9PSBwb3Mucm93ICYmIHRoaXMuY29sdW1uID09IHBvcy5jb2x1bW4pDQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICANCiAgICAgICAgdmFyIG9sZCA9IHsNCiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csDQogICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uDQogICAgICAgIH07DQogICAgICAgIA0KICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7DQogICAgICAgIHRoaXMuY29sdW1uID0gcG9zLmNvbHVtbjsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgew0KICAgICAgICAgICAgb2xkOiBvbGQsDQogICAgICAgICAgICB2YWx1ZTogcG9zDQogICAgICAgIH0pOw0KICAgIH07DQogICAgDQogICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbigpIHsNCiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgdmFyIHBvcyA9IHt9Ow0KICAgIA0KICAgICAgICBpZiAocm93ID49IHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIHsNCiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7DQogICAgICAgICAgICBwb3MuY29sdW1uID0gdGhpcy5kb2N1bWVudC5nZXRMaW5lKHBvcy5yb3cpLmxlbmd0aDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7DQogICAgICAgICAgICBwb3Mucm93ID0gMDsNCiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSAwOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgcG9zLnJvdyA9IHJvdzsNCiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKGNvbHVtbiA8IDApDQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsNCiAgICAgICAgICAgIA0KICAgICAgICByZXR1cm4gcG9zOw0KICAgIH07DQogICAgDQp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOw0KDQp9KTsNCi8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9saWIvbGFuZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCmV4cG9ydHMuc3RyaW5nUmV2ZXJzZSA9IGZ1bmN0aW9uKHN0cmluZykgew0KICAgIHJldHVybiBzdHJpbmcuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKTsNCn07DQoNCmV4cG9ydHMuc3RyaW5nUmVwZWF0ID0gZnVuY3Rpb24gKHN0cmluZywgY291bnQpIHsNCiAgICAgcmV0dXJuIG5ldyBBcnJheShjb3VudCArIDEpLmpvaW4oc3RyaW5nKTsNCn07DQoNCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsNCnZhciB0cmltRW5kUmVnZXhwID0gL1xzXHMqJC87DQoNCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7DQogICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgJycpOw0KfTsNCg0KZXhwb3J0cy5zdHJpbmdUcmltUmlnaHQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7DQogICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICcnKTsNCn07DQoNCmV4cG9ydHMuY29weU9iamVjdCA9IGZ1bmN0aW9uKG9iaikgew0KICAgIHZhciBjb3B5ID0ge307DQogICAgZm9yICh2YXIga2V5IGluIG9iaikgew0KICAgICAgICBjb3B5W2tleV0gPSBvYmpba2V5XTsNCiAgICB9DQogICAgcmV0dXJuIGNvcHk7DQp9Ow0KDQpleHBvcnRzLmNvcHlBcnJheSA9IGZ1bmN0aW9uKGFycmF5KXsNCiAgICB2YXIgY29weSA9IFtdOw0KICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7DQogICAgICAgIGlmIChhcnJheVtpXSAmJiB0eXBlb2YgYXJyYXlbaV0gPT0gIm9iamVjdCIpDQogICAgICAgICAgICBjb3B5W2ldID0gdGhpcy5jb3B5T2JqZWN0KCBhcnJheVtpXSApOw0KICAgICAgICBlbHNlIA0KICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOw0KICAgIH0NCiAgICByZXR1cm4gY29weTsNCn07DQoNCmV4cG9ydHMuZGVlcENvcHkgPSBmdW5jdGlvbiAob2JqKSB7DQogICAgaWYgKHR5cGVvZiBvYmogIT0gIm9iamVjdCIpIHsNCiAgICAgICAgcmV0dXJuIG9iajsNCiAgICB9DQogICAgDQogICAgdmFyIGNvcHkgPSBvYmouY29uc3RydWN0b3IoKTsNCiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7DQogICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT0gIm9iamVjdCIpIHsNCiAgICAgICAgICAgIGNvcHlba2V5XSA9IHRoaXMuZGVlcENvcHkob2JqW2tleV0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIGNvcHk7DQp9Ow0KDQpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsNCiAgICB2YXIgbWFwID0ge307DQogICAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykgew0KICAgICAgICBtYXBbYXJyW2ldXSA9IDE7DQogICAgfQ0KICAgIHJldHVybiBtYXA7DQoNCn07DQoNCi8qKg0KICogc3BsaWNlIG91dCBvZiAnYXJyYXknIGFueXRoaW5nIHRoYXQgPT09ICd2YWx1ZScNCiAqLw0KZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgew0KICBmb3IgKHZhciBpID0gMDsgaSA8PSBhcnJheS5sZW5ndGg7IGkrKykgew0KICAgIGlmICh2YWx1ZSA9PT0gYXJyYXlbaV0pIHsNCiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsNCiAgICB9DQogIH0NCn07DQoNCmV4cG9ydHMuZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyKSB7DQogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7DQp9Ow0KDQpleHBvcnRzLmRlZmVycmVkQ2FsbCA9IGZ1bmN0aW9uKGZjbikgew0KDQogICAgdmFyIHRpbWVyID0gbnVsbDsNCiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgdGltZXIgPSBudWxsOw0KICAgICAgICBmY24oKTsNCiAgICB9Ow0KDQogICAgdmFyIGRlZmVycmVkID0gZnVuY3Rpb24odGltZW91dCkgew0KICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsNCiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IDApOw0KICAgICAgICByZXR1cm4gZGVmZXJyZWQ7DQogICAgfTsNCg0KICAgIGRlZmVycmVkLnNjaGVkdWxlID0gZGVmZXJyZWQ7DQoNCiAgICBkZWZlcnJlZC5jYWxsID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHRoaXMuY2FuY2VsKCk7DQogICAgICAgIGZjbigpOw0KICAgICAgICByZXR1cm4gZGVmZXJyZWQ7DQogICAgfTsNCg0KICAgIGRlZmVycmVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkgew0KICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOw0KICAgICAgICB0aW1lciA9IG51bGw7DQogICAgICAgIHJldHVybiBkZWZlcnJlZDsNCiAgICB9Ow0KDQogICAgcmV0dXJuIGRlZmVycmVkOw0KfTsNCg0KfSk7DQovKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqDQogKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjENCiAqDQogKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24NCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvDQogKg0KICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywNCiAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQ0KICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUNCiAqIExpY2Vuc2UuDQogKg0KICogVGhlIE9yaWdpbmFsIENvZGUgaXMgQWpheC5vcmcgQ29kZSBFZGl0b3IgKEFDRSkuDQogKg0KICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzDQogKiBBamF4Lm9yZyBCLlYuDQogKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDEwDQogKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQogKg0KICogQ29udHJpYnV0b3Iocyk6DQogKiAgICAgIEZhYmlhbiBKYWtvYnMgPGZhYmlhbiBBVCBhamF4IERPVCBvcmc+DQogKg0KICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YNCiAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcg0KICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksDQogKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZA0KICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkNCiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8NCiAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyDQogKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQ0KICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUNCiAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXINCiAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuDQogKg0KICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8NCiANCmRlZmluZSgnYWNlL21vZGUvY29mZmVlL2NvZmZlZS1zY3JpcHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9tb2RlL2NvZmZlZS9sZXhlcicsICdhY2UvbW9kZS9jb2ZmZWUvcGFyc2VyJywgJ2FjZS9tb2RlL2NvZmZlZS9ub2RlcyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiAgICANCiAgICB2YXIgTGV4ZXIgPSByZXF1aXJlKCIuL2xleGVyIikuTGV4ZXI7DQogICAgdmFyIHBhcnNlciA9IHJlcXVpcmUoIi4vcGFyc2VyIik7DQoNCiAgICB2YXIgbGV4ZXIgPSBuZXcgTGV4ZXIoKTsNCiAgICBwYXJzZXIubGV4ZXIgPSB7DQogICAgICAgIGxleDogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgdGFnLCBfcmVmMjsNCiAgICAgICAgICAgIF9yZWYyID0gdGhpcy50b2tlbnNbdGhpcy5wb3MrK10gfHwgWycnXSwgdGFnID0gX3JlZjJbMF0sIHRoaXMueXl0ZXh0ID0gX3JlZjJbMV0sIHRoaXMueXlsaW5lbm8gPSBfcmVmMlsyXTsNCiAgICAgICAgICAgIHJldHVybiB0YWc7DQogICAgICAgIH0sDQogICAgICAgIHNldElucHV0OiBmdW5jdGlvbih0b2tlbnMpIHsNCiAgICAgICAgICAgIHRoaXMudG9rZW5zID0gdG9rZW5zOw0KICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zID0gMDsNCiAgICAgICAgfSwNCiAgICAgICAgdXBjb21pbmdJbnB1dDogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICByZXR1cm4gIiI7DQogICAgICAgIH0NCiAgICB9Ow0KICAgIHBhcnNlci55eSA9IHJlcXVpcmUoJy4vbm9kZXMnKTsNCiAgICANCiAgICBleHBvcnRzLnBhcnNlID0gZnVuY3Rpb24oY29kZSkgew0KICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGxleGVyLnRva2VuaXplKGNvZGUpKTsNCiAgICB9Ow0KfSk7LyoqDQogKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVyZW15IEFzaGtlbmFzDQogKg0KICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24NCiAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uDQogKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0DQogKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwNCiAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCiAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nDQogKiBjb25kaXRpb25zOg0KICogDQogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQogKiANCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTDQogKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORA0KICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQNCiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLA0KICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HDQogKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SDQogKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQogKi8NCg0KZGVmaW5lKCdhY2UvbW9kZS9jb2ZmZWUvbGV4ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9tb2RlL2NvZmZlZS9yZXdyaXRlcicsICdhY2UvbW9kZS9jb2ZmZWUvaGVscGVycyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiAgICANCiAgdmFyIEFTU0lHTkVELCBCT09MLCBDQUxMQUJMRSwgQ09ERSwgQ09GRkVFX0FMSUFTRVMsIENPRkZFRV9BTElBU19NQVAsIENPRkZFRV9LRVlXT1JEUywgQ09NTUVOVCwgQ09NUEFSRSwgQ09NUE9VTkRfQVNTSUdOLCBIRVJFRE9DLCBIRVJFRE9DX0lMTEVHQUwsIEhFUkVET0NfSU5ERU5ULCBIRVJFR0VYLCBIRVJFR0VYX09NSVQsIElERU5USUZJRVIsIElOREVYQUJMRSwgSlNUT0tFTiwgSlNfRk9SQklEREVOLCBKU19LRVlXT1JEUywgTElORV9CUkVBSywgTElORV9DT05USU5VRVIsIExPR0lDLCBMZXhlciwgTUFUSCwgTVVMVElMSU5FUiwgTVVMVElfREVOVCwgTk9UX1JFR0VYLCBOT1RfU1BBQ0VEX1JFR0VYLCBOT19ORVdMSU5FLCBOVU1CRVIsIE9QRVJBVE9SLCBSRUdFWCwgUkVMQVRJT04sIFJFU0VSVkVELCBSZXdyaXRlciwgU0hJRlQsIFNJTVBMRVNUUiwgVFJBSUxJTkdfU1BBQ0VTLCBVTkFSWSwgV0hJVEVTUEFDRSwgY29tcGFjdCwgY291bnQsIGtleSwgbGFzdCwgc3RhcnRzLCBfcmVmOw0KICB2YXIgX19pbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgZnVuY3Rpb24oaXRlbSkgew0KICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCiAgICAgIGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTsNCiAgICB9DQogICAgcmV0dXJuIC0xOw0KICB9Ow0KICBSZXdyaXRlciA9IHJlcXVpcmUoJy4vcmV3cml0ZXInKS5SZXdyaXRlcjsNCiAgX3JlZiA9IHJlcXVpcmUoJy4vaGVscGVycycpLCBjb3VudCA9IF9yZWYuY291bnQsIHN0YXJ0cyA9IF9yZWYuc3RhcnRzLCBjb21wYWN0ID0gX3JlZi5jb21wYWN0LCBsYXN0ID0gX3JlZi5sYXN0Ow0KICBleHBvcnRzLkxleGVyID0gTGV4ZXIgPSAoZnVuY3Rpb24oKSB7DQogICAgZnVuY3Rpb24gTGV4ZXIoKSB7fQ0KICAgIExleGVyLnByb3RvdHlwZS50b2tlbml6ZSA9IGZ1bmN0aW9uKGNvZGUsIG9wdHMpIHsNCiAgICAgIHZhciBpOw0KICAgICAgaWYgKG9wdHMgPT0gbnVsbCkgew0KICAgICAgICBvcHRzID0ge307DQogICAgICB9DQogICAgICBpZiAoV0hJVEVTUEFDRS50ZXN0KGNvZGUpKSB7DQogICAgICAgIGNvZGUgPSAiXG4iICsgY29kZTsNCiAgICAgIH0NCiAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL1xyL2csICcnKS5yZXBsYWNlKFRSQUlMSU5HX1NQQUNFUywgJycpOw0KICAgICAgdGhpcy5jb2RlID0gY29kZTsNCiAgICAgIHRoaXMubGluZSA9IG9wdHMubGluZSB8fCAwOw0KICAgICAgdGhpcy5pbmRlbnQgPSAwOw0KICAgICAgdGhpcy5pbmRlYnQgPSAwOw0KICAgICAgdGhpcy5vdXRkZWJ0ID0gMDsNCiAgICAgIHRoaXMuaW5kZW50cyA9IFtdOw0KICAgICAgdGhpcy50b2tlbnMgPSBbXTsNCiAgICAgIGkgPSAwOw0KICAgICAgd2hpbGUgKHRoaXMuY2h1bmsgPSBjb2RlLnNsaWNlKGkpKSB7DQogICAgICAgIGkgKz0gdGhpcy5pZGVudGlmaWVyVG9rZW4oKSB8fCB0aGlzLmNvbW1lbnRUb2tlbigpIHx8IHRoaXMud2hpdGVzcGFjZVRva2VuKCkgfHwgdGhpcy5saW5lVG9rZW4oKSB8fCB0aGlzLmhlcmVkb2NUb2tlbigpIHx8IHRoaXMuc3RyaW5nVG9rZW4oKSB8fCB0aGlzLm51bWJlclRva2VuKCkgfHwgdGhpcy5yZWdleFRva2VuKCkgfHwgdGhpcy5qc1Rva2VuKCkgfHwgdGhpcy5saXRlcmFsVG9rZW4oKTsNCiAgICAgIH0NCiAgICAgIHRoaXMuY2xvc2VJbmRlbnRhdGlvbigpOw0KICAgICAgaWYgKG9wdHMucmV3cml0ZSA9PT0gZmFsc2UpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIChuZXcgUmV3cml0ZXIpLnJld3JpdGUodGhpcy50b2tlbnMpOw0KICAgIH07DQogICAgTGV4ZXIucHJvdG90eXBlLmlkZW50aWZpZXJUb2tlbiA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGNvbG9uLCBmb3JjZWRJZGVudGlmaWVyLCBpZCwgaW5wdXQsIG1hdGNoLCBwcmV2LCB0YWcsIF9yZWYyLCBfcmVmMzsNCiAgICAgIGlmICghKG1hdGNoID0gSURFTlRJRklFUi5leGVjKHRoaXMuY2h1bmspKSkgew0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICAgIGlucHV0ID0gbWF0Y2hbMF0sIGlkID0gbWF0Y2hbMV0sIGNvbG9uID0gbWF0Y2hbMl07DQogICAgICBpZiAoaWQgPT09ICdvd24nICYmIHRoaXMudGFnKCkgPT09ICdGT1InKSB7DQogICAgICAgIHRoaXMudG9rZW4oJ09XTicsIGlkKTsNCiAgICAgICAgcmV0dXJuIGlkLmxlbmd0aDsNCiAgICAgIH0NCiAgICAgIGZvcmNlZElkZW50aWZpZXIgPSBjb2xvbiB8fCAocHJldiA9IGxhc3QodGhpcy50b2tlbnMpKSAmJiAoKChfcmVmMiA9IHByZXZbMF0pID09PSAnLicgfHwgX3JlZjIgPT09ICc/LicgfHwgX3JlZjIgPT09ICc6OicpIHx8ICFwcmV2LnNwYWNlZCAmJiBwcmV2WzBdID09PSAnQCcpOw0KICAgICAgdGFnID0gJ0lERU5USUZJRVInOw0KICAgICAgaWYgKF9faW5kZXhPZi5jYWxsKEpTX0tFWVdPUkRTLCBpZCkgPj0gMCB8fCAhZm9yY2VkSWRlbnRpZmllciAmJiBfX2luZGV4T2YuY2FsbChDT0ZGRUVfS0VZV09SRFMsIGlkKSA+PSAwKSB7DQogICAgICAgIHRhZyA9IGlkLnRvVXBwZXJDYXNlKCk7DQogICAgICAgIGlmICh0YWcgPT09ICdXSEVOJyAmJiAoX3JlZjMgPSB0aGlzLnRhZygpLCBfX2luZGV4T2YuY2FsbChMSU5FX0JSRUFLLCBfcmVmMykgPj0gMCkpIHsNCiAgICAgICAgICB0YWcgPSAnTEVBRElOR19XSEVOJzsNCiAgICAgICAgfSBlbHNlIGlmICh0YWcgPT09ICdGT1InKSB7DQogICAgICAgICAgdGhpcy5zZWVuRm9yID0gdHJ1ZTsNCiAgICAgICAgfSBlbHNlIGlmICh0YWcgPT09ICdVTkxFU1MnKSB7DQogICAgICAgICAgdGFnID0gJ0lGJzsNCiAgICAgICAgfSBlbHNlIGlmIChfX2luZGV4T2YuY2FsbChVTkFSWSwgdGFnKSA+PSAwKSB7DQogICAgICAgICAgdGFnID0gJ1VOQVJZJzsNCiAgICAgICAgfSBlbHNlIGlmIChfX2luZGV4T2YuY2FsbChSRUxBVElPTiwgdGFnKSA+PSAwKSB7DQogICAgICAgICAgaWYgKHRhZyAhPT0gJ0lOU1RBTkNFT0YnICYmIHRoaXMuc2VlbkZvcikgew0KICAgICAgICAgICAgdGFnID0gJ0ZPUicgKyB0YWc7DQogICAgICAgICAgICB0aGlzLnNlZW5Gb3IgPSBmYWxzZTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGFnID0gJ1JFTEFUSU9OJzsNCiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKCkgPT09ICchJykgew0KICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wb3AoKTsNCiAgICAgICAgICAgICAgaWQgPSAnIScgKyBpZDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmIChfX2luZGV4T2YuY2FsbChKU19GT1JCSURERU4sIGlkKSA+PSAwKSB7DQogICAgICAgIGlmIChmb3JjZWRJZGVudGlmaWVyKSB7DQogICAgICAgICAgdGFnID0gJ0lERU5USUZJRVInOw0KICAgICAgICAgIGlkID0gbmV3IFN0cmluZyhpZCk7DQogICAgICAgICAgaWQucmVzZXJ2ZWQgPSB0cnVlOw0KICAgICAgICB9IGVsc2UgaWYgKF9faW5kZXhPZi5jYWxsKFJFU0VSVkVELCBpZCkgPj0gMCkgew0KICAgICAgICAgIHRoaXMuaWRlbnRpZmllckVycm9yKGlkKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCFmb3JjZWRJZGVudGlmaWVyKSB7DQogICAgICAgIGlmIChfX2luZGV4T2YuY2FsbChDT0ZGRUVfQUxJQVNFUywgaWQpID49IDApIHsNCiAgICAgICAgICBpZCA9IENPRkZFRV9BTElBU19NQVBbaWRdOw0KICAgICAgICB9DQogICAgICAgIHRhZyA9IChmdW5jdGlvbigpIHsNCiAgICAgICAgICBzd2l0Y2ggKGlkKSB7DQogICAgICAgICAgICBjYXNlICchJzoNCiAgICAgICAgICAgICAgcmV0dXJuICdVTkFSWSc7DQogICAgICAgICAgICBjYXNlICc9PSc6DQogICAgICAgICAgICBjYXNlICchPSc6DQogICAgICAgICAgICAgIHJldHVybiAnQ09NUEFSRSc7DQogICAgICAgICAgICBjYXNlICcmJic6DQogICAgICAgICAgICBjYXNlICd8fCc6DQogICAgICAgICAgICAgIHJldHVybiAnTE9HSUMnOw0KICAgICAgICAgICAgY2FzZSAndHJ1ZSc6DQogICAgICAgICAgICBjYXNlICdmYWxzZSc6DQogICAgICAgICAgICBjYXNlICdudWxsJzoNCiAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6DQogICAgICAgICAgICAgIHJldHVybiAnQk9PTCc7DQogICAgICAgICAgICBjYXNlICdicmVhayc6DQogICAgICAgICAgICBjYXNlICdjb250aW51ZSc6DQogICAgICAgICAgICBjYXNlICdkZWJ1Z2dlcic6DQogICAgICAgICAgICAgIHJldHVybiAnU1RBVEVNRU5UJzsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgIHJldHVybiB0YWc7DQogICAgICAgICAgfQ0KICAgICAgICB9KSgpOw0KICAgICAgfQ0KICAgICAgdGhpcy50b2tlbih0YWcsIGlkKTsNCiAgICAgIGlmIChjb2xvbikgew0KICAgICAgICB0aGlzLnRva2VuKCc6JywgJzonKTsNCiAgICAgIH0NCiAgICAgIHJldHVybiBpbnB1dC5sZW5ndGg7DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUubnVtYmVyVG9rZW4gPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBtYXRjaCwgbnVtYmVyOw0KICAgICAgaWYgKCEobWF0Y2ggPSBOVU1CRVIuZXhlYyh0aGlzLmNodW5rKSkpIHsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgICBudW1iZXIgPSBtYXRjaFswXTsNCiAgICAgIHRoaXMudG9rZW4oJ05VTUJFUicsIG51bWJlcik7DQogICAgICByZXR1cm4gbnVtYmVyLmxlbmd0aDsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5zdHJpbmdUb2tlbiA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIG1hdGNoLCBzdHJpbmc7DQogICAgICBzd2l0Y2ggKHRoaXMuY2h1bmsuY2hhckF0KDApKSB7DQogICAgICAgIGNhc2UgIiciOg0KICAgICAgICAgIGlmICghKG1hdGNoID0gU0lNUExFU1RSLmV4ZWModGhpcy5jaHVuaykpKSB7DQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICB9DQogICAgICAgICAgdGhpcy50b2tlbignU1RSSU5HJywgKHN0cmluZyA9IG1hdGNoWzBdKS5yZXBsYWNlKE1VTFRJTElORVIsICdcXFxuJykpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICciJzoNCiAgICAgICAgICBpZiAoIShzdHJpbmcgPSB0aGlzLmJhbGFuY2VkU3RyaW5nKHRoaXMuY2h1bmssICciJykpKSB7DQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKDAgPCBzdHJpbmcuaW5kZXhPZignI3snLCAxKSkgew0KICAgICAgICAgICAgdGhpcy5pbnRlcnBvbGF0ZVN0cmluZyhzdHJpbmcuc2xpY2UoMSwgLTEpKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy50b2tlbignU1RSSU5HJywgdGhpcy5lc2NhcGVMaW5lcyhzdHJpbmcpKTsNCiAgICAgICAgICB9DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgICB0aGlzLmxpbmUgKz0gY291bnQoc3RyaW5nLCAnXG4nKTsNCiAgICAgIHJldHVybiBzdHJpbmcubGVuZ3RoOw0KICAgIH07DQogICAgTGV4ZXIucHJvdG90eXBlLmhlcmVkb2NUb2tlbiA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGRvYywgaGVyZWRvYywgbWF0Y2gsIHF1b3RlOw0KICAgICAgaWYgKCEobWF0Y2ggPSBIRVJFRE9DLmV4ZWModGhpcy5jaHVuaykpKSB7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgaGVyZWRvYyA9IG1hdGNoWzBdOw0KICAgICAgcXVvdGUgPSBoZXJlZG9jLmNoYXJBdCgwKTsNCiAgICAgIGRvYyA9IHRoaXMuc2FuaXRpemVIZXJlZG9jKG1hdGNoWzJdLCB7DQogICAgICAgIHF1b3RlOiBxdW90ZSwNCiAgICAgICAgaW5kZW50OiBudWxsDQogICAgICB9KTsNCiAgICAgIGlmIChxdW90ZSA9PT0gJyInICYmIDAgPD0gZG9jLmluZGV4T2YoJyN7JykpIHsNCiAgICAgICAgdGhpcy5pbnRlcnBvbGF0ZVN0cmluZyhkb2MsIHsNCiAgICAgICAgICBoZXJlZG9jOiB0cnVlDQogICAgICAgIH0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy50b2tlbignU1RSSU5HJywgdGhpcy5tYWtlU3RyaW5nKGRvYywgcXVvdGUsIHRydWUpKTsNCiAgICAgIH0NCiAgICAgIHRoaXMubGluZSArPSBjb3VudChoZXJlZG9jLCAnXG4nKTsNCiAgICAgIHJldHVybiBoZXJlZG9jLmxlbmd0aDsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5jb21tZW50VG9rZW4gPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBjb21tZW50LCBoZXJlLCBtYXRjaDsNCiAgICAgIGlmICghKG1hdGNoID0gdGhpcy5jaHVuay5tYXRjaChDT01NRU5UKSkpIHsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgICBjb21tZW50ID0gbWF0Y2hbMF0sIGhlcmUgPSBtYXRjaFsxXTsNCiAgICAgIGlmIChoZXJlKSB7DQogICAgICAgIHRoaXMudG9rZW4oJ0hFUkVDT01NRU5UJywgdGhpcy5zYW5pdGl6ZUhlcmVkb2MoaGVyZSwgew0KICAgICAgICAgIGhlcmVjb21tZW50OiB0cnVlLA0KICAgICAgICAgIGluZGVudDogQXJyYXkodGhpcy5pbmRlbnQgKyAxKS5qb2luKCcgJykNCiAgICAgICAgfSkpOw0KICAgICAgICB0aGlzLnRva2VuKCdURVJNSU5BVE9SJywgJ1xuJyk7DQogICAgICB9DQogICAgICB0aGlzLmxpbmUgKz0gY291bnQoY29tbWVudCwgJ1xuJyk7DQogICAgICByZXR1cm4gY29tbWVudC5sZW5ndGg7DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUuanNUb2tlbiA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIG1hdGNoLCBzY3JpcHQ7DQogICAgICBpZiAoISh0aGlzLmNodW5rLmNoYXJBdCgwKSA9PT0gJ2AnICYmIChtYXRjaCA9IEpTVE9LRU4uZXhlYyh0aGlzLmNodW5rKSkpKSB7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgdGhpcy50b2tlbignSlMnLCAoc2NyaXB0ID0gbWF0Y2hbMF0pLnNsaWNlKDEsIC0xKSk7DQogICAgICByZXR1cm4gc2NyaXB0Lmxlbmd0aDsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5yZWdleFRva2VuID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgbWF0Y2gsIHByZXYsIHJlZ2V4LCBfcmVmMjsNCiAgICAgIGlmICh0aGlzLmNodW5rLmNoYXJBdCgwKSAhPT0gJy8nKSB7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgaWYgKG1hdGNoID0gSEVSRUdFWC5leGVjKHRoaXMuY2h1bmspKSB7DQogICAgICAgIHRoaXMubGluZSArPSBjb3VudChtYXRjaFswXSwgJ1xuJyk7ICAgICAgICANCiAgICAgICAgcmV0dXJuIHRoaXMuaGVyZWdleFRva2VuKG1hdGNoKTsNCiAgICAgIH0NCiAgICAgIHByZXYgPSBsYXN0KHRoaXMudG9rZW5zKTsNCiAgICAgIGlmIChwcmV2ICYmIChfcmVmMiA9IHByZXZbMF0sIF9faW5kZXhPZi5jYWxsKChwcmV2LnNwYWNlZCA/IE5PVF9SRUdFWCA6IE5PVF9TUEFDRURfUkVHRVgpLCBfcmVmMikgPj0gMCkpIHsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgICBpZiAoIShtYXRjaCA9IFJFR0VYLmV4ZWModGhpcy5jaHVuaykpKSB7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgcmVnZXggPSBtYXRjaFswXTsNCiAgICAgIHRoaXMudG9rZW4oJ1JFR0VYJywgcmVnZXggPT09ICcvLycgPyAnLyg/OikvJyA6IHJlZ2V4KTsNCiAgICAgIHJldHVybiByZWdleC5sZW5ndGg7DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUuaGVyZWdleFRva2VuID0gZnVuY3Rpb24obWF0Y2gpIHsNCiAgICAgIHZhciBib2R5LCBmbGFncywgaGVyZWdleCwgcmUsIHRhZywgdG9rZW5zLCB2YWx1ZSwgX2ksIF9sZW4sIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9yZWY1Ow0KICAgICAgaGVyZWdleCA9IG1hdGNoWzBdLCBib2R5ID0gbWF0Y2hbMV0sIGZsYWdzID0gbWF0Y2hbMl07DQogICAgICBpZiAoMCA+IGJvZHkuaW5kZXhPZignI3snKSkgew0KICAgICAgICByZSA9IGJvZHkucmVwbGFjZShIRVJFR0VYX09NSVQsICcnKS5yZXBsYWNlKC9cLy9nLCAnXFwvJyk7DQogICAgICAgIHRoaXMudG9rZW4oJ1JFR0VYJywgIi8iICsgKHJlIHx8ICcoPzopJykgKyAiLyIgKyBmbGFncyk7DQogICAgICAgIHJldHVybiBoZXJlZ2V4Lmxlbmd0aDsNCiAgICAgIH0NCiAgICAgIHRoaXMudG9rZW4oJ0lERU5USUZJRVInLCAnUmVnRXhwJyk7DQogICAgICB0aGlzLnRva2Vucy5wdXNoKFsnQ0FMTF9TVEFSVCcsICcoJ10pOw0KICAgICAgdG9rZW5zID0gW107DQogICAgICBfcmVmMiA9IHRoaXMuaW50ZXJwb2xhdGVTdHJpbmcoYm9keSwgew0KICAgICAgICByZWdleDogdHJ1ZQ0KICAgICAgfSk7DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIF9yZWYzID0gX3JlZjJbX2ldLCB0YWcgPSBfcmVmM1swXSwgdmFsdWUgPSBfcmVmM1sxXTsNCiAgICAgICAgaWYgKHRhZyA9PT0gJ1RPS0VOUycpIHsNCiAgICAgICAgICB0b2tlbnMucHVzaC5hcHBseSh0b2tlbnMsIHZhbHVlKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBpZiAoISh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoSEVSRUdFWF9PTUlULCAnJykpKSB7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICB9DQogICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXC9nLCAnXFxcXCcpOw0KICAgICAgICAgIHRva2Vucy5wdXNoKFsnU1RSSU5HJywgdGhpcy5tYWtlU3RyaW5nKHZhbHVlLCAnIicsIHRydWUpXSk7DQogICAgICAgIH0NCiAgICAgICAgdG9rZW5zLnB1c2goWycrJywgJysnXSk7DQogICAgICB9DQogICAgICB0b2tlbnMucG9wKCk7DQogICAgICBpZiAoKChfcmVmNCA9IHRva2Vuc1swXSkgIT0gbnVsbCA/IF9yZWY0WzBdIDogdm9pZCAwKSAhPT0gJ1NUUklORycpIHsNCiAgICAgICAgdGhpcy50b2tlbnMucHVzaChbJ1NUUklORycsICciIiddLCBbJysnLCAnKyddKTsNCiAgICAgIH0NCiAgICAgIChfcmVmNSA9IHRoaXMudG9rZW5zKS5wdXNoLmFwcGx5KF9yZWY1LCB0b2tlbnMpOw0KICAgICAgaWYgKGZsYWdzKSB7DQogICAgICAgIHRoaXMudG9rZW5zLnB1c2goWycsJywgJywnXSwgWydTVFJJTkcnLCAnIicgKyBmbGFncyArICciJ10pOw0KICAgICAgfQ0KICAgICAgdGhpcy50b2tlbignKScsICcpJyk7DQogICAgICByZXR1cm4gaGVyZWdleC5sZW5ndGg7DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUubGluZVRva2VuID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgZGlmZiwgaW5kZW50LCBtYXRjaCwgbm9OZXdsaW5lcywgcHJldiwgc2l6ZTsNCiAgICAgIGlmICghKG1hdGNoID0gTVVMVElfREVOVC5leGVjKHRoaXMuY2h1bmspKSkgew0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICAgIGluZGVudCA9IG1hdGNoWzBdOw0KICAgICAgdGhpcy5saW5lICs9IGNvdW50KGluZGVudCwgJ1xuJyk7DQogICAgICBwcmV2ID0gbGFzdCh0aGlzLnRva2VucywgMSk7DQogICAgICBzaXplID0gaW5kZW50Lmxlbmd0aCAtIDEgLSBpbmRlbnQubGFzdEluZGV4T2YoJ1xuJyk7DQogICAgICBub05ld2xpbmVzID0gdGhpcy51bmZpbmlzaGVkKCk7DQogICAgICBpZiAoc2l6ZSAtIHRoaXMuaW5kZWJ0ID09PSB0aGlzLmluZGVudCkgew0KICAgICAgICBpZiAobm9OZXdsaW5lcykgew0KICAgICAgICAgIHRoaXMuc3VwcHJlc3NOZXdsaW5lcygpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMubmV3bGluZVRva2VuKCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGluZGVudC5sZW5ndGg7DQogICAgICB9DQogICAgICBpZiAoc2l6ZSA+IHRoaXMuaW5kZW50KSB7DQogICAgICAgIGlmIChub05ld2xpbmVzKSB7DQogICAgICAgICAgdGhpcy5pbmRlYnQgPSBzaXplIC0gdGhpcy5pbmRlbnQ7DQogICAgICAgICAgdGhpcy5zdXBwcmVzc05ld2xpbmVzKCk7DQogICAgICAgICAgcmV0dXJuIGluZGVudC5sZW5ndGg7DQogICAgICAgIH0NCiAgICAgICAgZGlmZiA9IHNpemUgLSB0aGlzLmluZGVudCArIHRoaXMub3V0ZGVidDsNCiAgICAgICAgdGhpcy50b2tlbignSU5ERU5UJywgZGlmZik7DQogICAgICAgIHRoaXMuaW5kZW50cy5wdXNoKGRpZmYpOw0KICAgICAgICB0aGlzLm91dGRlYnQgPSB0aGlzLmluZGVidCA9IDA7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLmluZGVidCA9IDA7DQogICAgICAgIHRoaXMub3V0ZGVudFRva2VuKHRoaXMuaW5kZW50IC0gc2l6ZSwgbm9OZXdsaW5lcyk7DQogICAgICB9DQogICAgICB0aGlzLmluZGVudCA9IHNpemU7DQogICAgICByZXR1cm4gaW5kZW50Lmxlbmd0aDsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5vdXRkZW50VG9rZW4gPSBmdW5jdGlvbihtb3ZlT3V0LCBub05ld2xpbmVzLCBjbG9zZSkgew0KICAgICAgdmFyIGRlbnQsIGxlbjsNCiAgICAgIHdoaWxlIChtb3ZlT3V0ID4gMCkgew0KICAgICAgICBsZW4gPSB0aGlzLmluZGVudHMubGVuZ3RoIC0gMTsNCiAgICAgICAgaWYgKHRoaXMuaW5kZW50c1tsZW5dID09PSB2b2lkIDApIHsNCiAgICAgICAgICBtb3ZlT3V0ID0gMDsNCiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGVudHNbbGVuXSA9PT0gdGhpcy5vdXRkZWJ0KSB7DQogICAgICAgICAgbW92ZU91dCAtPSB0aGlzLm91dGRlYnQ7DQogICAgICAgICAgdGhpcy5vdXRkZWJ0ID0gMDsNCiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGVudHNbbGVuXSA8IHRoaXMub3V0ZGVidCkgew0KICAgICAgICAgIHRoaXMub3V0ZGVidCAtPSB0aGlzLmluZGVudHNbbGVuXTsNCiAgICAgICAgICBtb3ZlT3V0IC09IHRoaXMuaW5kZW50c1tsZW5dOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGRlbnQgPSB0aGlzLmluZGVudHMucG9wKCkgLSB0aGlzLm91dGRlYnQ7DQogICAgICAgICAgbW92ZU91dCAtPSBkZW50Ow0KICAgICAgICAgIHRoaXMub3V0ZGVidCA9IDA7DQogICAgICAgICAgdGhpcy50b2tlbignT1VUREVOVCcsIGRlbnQpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAoZGVudCkgew0KICAgICAgICB0aGlzLm91dGRlYnQgLT0gbW92ZU91dDsNCiAgICAgIH0NCiAgICAgIGlmICghKHRoaXMudGFnKCkgPT09ICdURVJNSU5BVE9SJyB8fCBub05ld2xpbmVzKSkgew0KICAgICAgICB0aGlzLnRva2VuKCdURVJNSU5BVE9SJywgJ1xuJyk7DQogICAgICB9DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS53aGl0ZXNwYWNlVG9rZW4gPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBtYXRjaCwgbmxpbmUsIHByZXY7DQogICAgICBpZiAoISgobWF0Y2ggPSBXSElURVNQQUNFLmV4ZWModGhpcy5jaHVuaykpIHx8IChubGluZSA9IHRoaXMuY2h1bmsuY2hhckF0KDApID09PSAnXG4nKSkpIHsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgICBwcmV2ID0gbGFzdCh0aGlzLnRva2Vucyk7DQogICAgICBpZiAocHJldikgew0KICAgICAgICBwcmV2W21hdGNoID8gJ3NwYWNlZCcgOiAnbmV3TGluZSddID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIGlmIChtYXRjaCkgew0KICAgICAgICByZXR1cm4gbWF0Y2hbMF0ubGVuZ3RoOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUubmV3bGluZVRva2VuID0gZnVuY3Rpb24oKSB7DQogICAgICBpZiAodGhpcy50YWcoKSAhPT0gJ1RFUk1JTkFUT1InKSB7DQogICAgICAgIHRoaXMudG9rZW4oJ1RFUk1JTkFUT1InLCAnXG4nKTsNCiAgICAgIH0NCiAgICAgIHJldHVybiB0aGlzOw0KICAgIH07DQogICAgTGV4ZXIucHJvdG90eXBlLnN1cHByZXNzTmV3bGluZXMgPSBmdW5jdGlvbigpIHsNCiAgICAgIGlmICh0aGlzLnZhbHVlKCkgPT09ICdcXCcpIHsNCiAgICAgICAgdGhpcy50b2tlbnMucG9wKCk7DQogICAgICB9DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5saXRlcmFsVG9rZW4gPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBtYXRjaCwgcHJldiwgdGFnLCB2YWx1ZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX3JlZjU7DQogICAgICBpZiAobWF0Y2ggPSBPUEVSQVRPUi5leGVjKHRoaXMuY2h1bmspKSB7DQogICAgICAgIHZhbHVlID0gbWF0Y2hbMF07DQogICAgICAgIGlmIChDT0RFLnRlc3QodmFsdWUpKSB7DQogICAgICAgICAgdGhpcy50YWdQYXJhbWV0ZXJzKCk7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHZhbHVlID0gdGhpcy5jaHVuay5jaGFyQXQoMCk7DQogICAgICB9DQogICAgICB0YWcgPSB2YWx1ZTsNCiAgICAgIHByZXYgPSBsYXN0KHRoaXMudG9rZW5zKTsNCiAgICAgIGlmICh2YWx1ZSA9PT0gJz0nICYmIHByZXYpIHsNCiAgICAgICAgaWYgKCFwcmV2WzFdLnJlc2VydmVkICYmIChfcmVmMiA9IHByZXZbMV0sIF9faW5kZXhPZi5jYWxsKEpTX0ZPUkJJRERFTiwgX3JlZjIpID49IDApKSB7DQogICAgICAgICAgdGhpcy5hc3NpZ25tZW50RXJyb3IoKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoKF9yZWYzID0gcHJldlsxXSkgPT09ICd8fCcgfHwgX3JlZjMgPT09ICcmJicpIHsNCiAgICAgICAgICBwcmV2WzBdID0gJ0NPTVBPVU5EX0FTU0lHTic7DQogICAgICAgICAgcHJldlsxXSArPSAnPSc7DQogICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aDsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKHZhbHVlID09PSAnOycpIHsNCiAgICAgICAgdGFnID0gJ1RFUk1JTkFUT1InOw0KICAgICAgfSBlbHNlIGlmIChfX2luZGV4T2YuY2FsbChNQVRILCB2YWx1ZSkgPj0gMCkgew0KICAgICAgICB0YWcgPSAnTUFUSCc7DQogICAgICB9IGVsc2UgaWYgKF9faW5kZXhPZi5jYWxsKENPTVBBUkUsIHZhbHVlKSA+PSAwKSB7DQogICAgICAgIHRhZyA9ICdDT01QQVJFJzsNCiAgICAgIH0gZWxzZSBpZiAoX19pbmRleE9mLmNhbGwoQ09NUE9VTkRfQVNTSUdOLCB2YWx1ZSkgPj0gMCkgew0KICAgICAgICB0YWcgPSAnQ09NUE9VTkRfQVNTSUdOJzsNCiAgICAgIH0gZWxzZSBpZiAoX19pbmRleE9mLmNhbGwoVU5BUlksIHZhbHVlKSA+PSAwKSB7DQogICAgICAgIHRhZyA9ICdVTkFSWSc7DQogICAgICB9IGVsc2UgaWYgKF9faW5kZXhPZi5jYWxsKFNISUZULCB2YWx1ZSkgPj0gMCkgew0KICAgICAgICB0YWcgPSAnU0hJRlQnOw0KICAgICAgfSBlbHNlIGlmIChfX2luZGV4T2YuY2FsbChMT0dJQywgdmFsdWUpID49IDAgfHwgdmFsdWUgPT09ICc/JyAmJiAocHJldiAhPSBudWxsID8gcHJldi5zcGFjZWQgOiB2b2lkIDApKSB7DQogICAgICAgIHRhZyA9ICdMT0dJQyc7DQogICAgICB9IGVsc2UgaWYgKHByZXYgJiYgIXByZXYuc3BhY2VkKSB7DQogICAgICAgIGlmICh2YWx1ZSA9PT0gJygnICYmIChfcmVmNCA9IHByZXZbMF0sIF9faW5kZXhPZi5jYWxsKENBTExBQkxFLCBfcmVmNCkgPj0gMCkpIHsNCiAgICAgICAgICBpZiAocHJldlswXSA9PT0gJz8nKSB7DQogICAgICAgICAgICBwcmV2WzBdID0gJ0ZVTkNfRVhJU1QnOw0KICAgICAgICAgIH0NCiAgICAgICAgICB0YWcgPSAnQ0FMTF9TVEFSVCc7DQogICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdbJyAmJiAoX3JlZjUgPSBwcmV2WzBdLCBfX2luZGV4T2YuY2FsbChJTkRFWEFCTEUsIF9yZWY1KSA+PSAwKSkgew0KICAgICAgICAgIHRhZyA9ICdJTkRFWF9TVEFSVCc7DQogICAgICAgICAgc3dpdGNoIChwcmV2WzBdKSB7DQogICAgICAgICAgICBjYXNlICc/JzoNCiAgICAgICAgICAgICAgcHJldlswXSA9ICdJTkRFWF9TT0FLJzsNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICc6Oic6DQogICAgICAgICAgICAgIHByZXZbMF0gPSAnSU5ERVhfUFJPVE8nOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgdGhpcy50b2tlbih0YWcsIHZhbHVlKTsNCiAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUuc2FuaXRpemVIZXJlZG9jID0gZnVuY3Rpb24oZG9jLCBvcHRpb25zKSB7DQogICAgICB2YXIgYXR0ZW1wdCwgaGVyZWNvbW1lbnQsIGluZGVudCwgbWF0Y2gsIF9yZWYyOw0KICAgICAgaW5kZW50ID0gb3B0aW9ucy5pbmRlbnQsIGhlcmVjb21tZW50ID0gb3B0aW9ucy5oZXJlY29tbWVudDsNCiAgICAgIGlmIChoZXJlY29tbWVudCkgew0KICAgICAgICBpZiAoSEVSRURPQ19JTExFR0FMLnRlc3QoZG9jKSkgew0KICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmxvY2sgY29tbWVudCBjYW5ub3QgY29udGFpbiBcIiovXCIsIHN0YXJ0aW5nIG9uIGxpbmUgIiArICh0aGlzLmxpbmUgKyAxKSk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRvYy5pbmRleE9mKCdcbicpIDw9IDApIHsNCiAgICAgICAgICByZXR1cm4gZG9jOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICB3aGlsZSAobWF0Y2ggPSBIRVJFRE9DX0lOREVOVC5leGVjKGRvYykpIHsNCiAgICAgICAgICBhdHRlbXB0ID0gbWF0Y2hbMV07DQogICAgICAgICAgaWYgKGluZGVudCA9PT0gbnVsbCB8fCAoMCA8IChfcmVmMiA9IGF0dGVtcHQubGVuZ3RoKSAmJiBfcmVmMiA8IGluZGVudC5sZW5ndGgpKSB7DQogICAgICAgICAgICBpbmRlbnQgPSBhdHRlbXB0Ow0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKGluZGVudCkgew0KICAgICAgICBkb2MgPSBkb2MucmVwbGFjZShSZWdFeHAoIlxcbiIgKyBpbmRlbnQsICJnIiksICdcbicpOw0KICAgICAgfQ0KICAgICAgaWYgKCFoZXJlY29tbWVudCkgew0KICAgICAgICBkb2MgPSBkb2MucmVwbGFjZSgvXlxuLywgJycpOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIGRvYzsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS50YWdQYXJhbWV0ZXJzID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgaSwgc3RhY2ssIHRvaywgdG9rZW5zOw0KICAgICAgaWYgKHRoaXMudGFnKCkgIT09ICcpJykgew0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgIH0NCiAgICAgIHN0YWNrID0gW107DQogICAgICB0b2tlbnMgPSB0aGlzLnRva2VuczsNCiAgICAgIGkgPSB0b2tlbnMubGVuZ3RoOw0KICAgICAgdG9rZW5zWy0taV1bMF0gPSAnUEFSQU1fRU5EJzsNCiAgICAgIHdoaWxlICh0b2sgPSB0b2tlbnNbLS1pXSkgew0KICAgICAgICBzd2l0Y2ggKHRva1swXSkgew0KICAgICAgICAgIGNhc2UgJyknOg0KICAgICAgICAgICAgc3RhY2sucHVzaCh0b2spOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgY2FzZSAnKCc6DQogICAgICAgICAgY2FzZSAnQ0FMTF9TVEFSVCc6DQogICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoKSB7DQogICAgICAgICAgICAgIHN0YWNrLnBvcCgpOw0KICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tbMF0gPT09ICcoJykgew0KICAgICAgICAgICAgICB0b2tbMF0gPSAnUEFSQU1fU1RBUlQnOw0KICAgICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRoaXM7DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUuY2xvc2VJbmRlbnRhdGlvbiA9IGZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuIHRoaXMub3V0ZGVudFRva2VuKHRoaXMuaW5kZW50KTsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5pZGVudGlmaWVyRXJyb3IgPSBmdW5jdGlvbih3b3JkKSB7DQogICAgICB0aHJvdyBTeW50YXhFcnJvcigiUmVzZXJ2ZWQgd29yZCBcIiIgKyB3b3JkICsgIlwiIG9uIGxpbmUgIiArICh0aGlzLmxpbmUgKyAxKSk7DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUuYXNzaWdubWVudEVycm9yID0gZnVuY3Rpb24oKSB7DQogICAgICB0aHJvdyBTeW50YXhFcnJvcigiUmVzZXJ2ZWQgd29yZCBcIiIgKyAodGhpcy52YWx1ZSgpKSArICJcIiBvbiBsaW5lICIgKyAodGhpcy5saW5lICsgMSkgKyAiIGNhbid0IGJlIGFzc2lnbmVkIik7DQogICAgfTsNCiAgICBMZXhlci5wcm90b3R5cGUuYmFsYW5jZWRTdHJpbmcgPSBmdW5jdGlvbihzdHIsIGVuZCkgew0KICAgICAgdmFyIGksIGxldHRlciwgcHJldiwgc3RhY2ssIF9yZWYyOw0KICAgICAgc3RhY2sgPSBbZW5kXTsNCiAgICAgIGZvciAoaSA9IDEsIF9yZWYyID0gc3RyLmxlbmd0aDsgMSA8PSBfcmVmMiA/IGkgPCBfcmVmMiA6IGkgPiBfcmVmMjsgMSA8PSBfcmVmMiA/IGkrKyA6IGktLSkgew0KICAgICAgICBzd2l0Y2ggKGxldHRlciA9IHN0ci5jaGFyQXQoaSkpIHsNCiAgICAgICAgICBjYXNlICdcXCc6DQogICAgICAgICAgICBpKys7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICBjYXNlIGVuZDoNCiAgICAgICAgICAgIHN0YWNrLnBvcCgpOw0KICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIHN0ci5zbGljZSgwLCBpICsgMSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbmQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogICAgICAgIGlmIChlbmQgPT09ICd9JyAmJiAobGV0dGVyID09PSAnIicgfHwgbGV0dGVyID09PSAiJyIpKSB7DQogICAgICAgICAgc3RhY2sucHVzaChlbmQgPSBsZXR0ZXIpOw0KICAgICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gJ30nICYmIGxldHRlciA9PT0gJ3snKSB7DQogICAgICAgICAgc3RhY2sucHVzaChlbmQgPSAnfScpOw0KICAgICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gJyInICYmIHByZXYgPT09ICcjJyAmJiBsZXR0ZXIgPT09ICd7Jykgew0KICAgICAgICAgIHN0YWNrLnB1c2goZW5kID0gJ30nKTsNCiAgICAgICAgfQ0KICAgICAgICBwcmV2ID0gbGV0dGVyOw0KICAgICAgfQ0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nICIgKyAoc3RhY2sucG9wKCkpICsgIiwgc3RhcnRpbmcgb24gbGluZSAiICsgKHRoaXMubGluZSArIDEpKTsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgb3B0aW9ucykgew0KICAgICAgdmFyIGV4cHIsIGhlcmVkb2MsIGksIGlubmVyLCBpbnRlcnBvbGF0ZWQsIGxlbiwgbGV0dGVyLCBuZXN0ZWQsIHBpLCByZWdleCwgdGFnLCB0b2tlbnMsIHZhbHVlLCBfbGVuLCBfcmVmMiwgX3JlZjMsIF9yZWY0Ow0KICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgew0KICAgICAgICBvcHRpb25zID0ge307DQogICAgICB9DQogICAgICBoZXJlZG9jID0gb3B0aW9ucy5oZXJlZG9jLCByZWdleCA9IG9wdGlvbnMucmVnZXg7DQogICAgICB0b2tlbnMgPSBbXTsNCiAgICAgIHBpID0gMDsNCiAgICAgIGkgPSAtMTsNCiAgICAgIHdoaWxlIChsZXR0ZXIgPSBzdHIuY2hhckF0KGkgKz0gMSkpIHsNCiAgICAgICAgaWYgKGxldHRlciA9PT0gJ1xcJykgew0KICAgICAgICAgIGkgKz0gMTsNCiAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIShsZXR0ZXIgPT09ICcjJyAmJiBzdHIuY2hhckF0KGkgKyAxKSA9PT0gJ3snICYmIChleHByID0gdGhpcy5iYWxhbmNlZFN0cmluZyhzdHIuc2xpY2UoaSArIDEpLCAnfScpKSkpIHsNCiAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocGkgPCBpKSB7DQogICAgICAgICAgdG9rZW5zLnB1c2goWydORU9TVFJJTkcnLCBzdHIuc2xpY2UocGksIGkpXSk7DQogICAgICAgIH0NCiAgICAgICAgaW5uZXIgPSBleHByLnNsaWNlKDEsIC0xKTsNCiAgICAgICAgaWYgKGlubmVyLmxlbmd0aCkgew0KICAgICAgICAgIG5lc3RlZCA9IG5ldyBMZXhlcigpLnRva2VuaXplKGlubmVyLCB7DQogICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsDQogICAgICAgICAgICByZXdyaXRlOiBmYWxzZQ0KICAgICAgICAgIH0pOw0KICAgICAgICAgIG5lc3RlZC5wb3AoKTsNCiAgICAgICAgICBpZiAoKChfcmVmMiA9IG5lc3RlZFswXSkgIT0gbnVsbCA/IF9yZWYyWzBdIDogdm9pZCAwKSA9PT0gJ1RFUk1JTkFUT1InKSB7DQogICAgICAgICAgICBuZXN0ZWQuc2hpZnQoKTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKGxlbiA9IG5lc3RlZC5sZW5ndGgpIHsNCiAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7DQogICAgICAgICAgICAgIG5lc3RlZC51bnNoaWZ0KFsnKCcsICcoJ10pOw0KICAgICAgICAgICAgICBuZXN0ZWQucHVzaChbJyknLCAnKSddKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRva2Vucy5wdXNoKFsnVE9LRU5TJywgbmVzdGVkXSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGkgKz0gZXhwci5sZW5ndGg7DQogICAgICAgIHBpID0gaSArIDE7DQogICAgICB9DQogICAgICBpZiAoKGkgPiBwaSAmJiBwaSA8IHN0ci5sZW5ndGgpKSB7DQogICAgICAgIHRva2Vucy5wdXNoKFsnTkVPU1RSSU5HJywgc3RyLnNsaWNlKHBpKV0pOw0KICAgICAgfQ0KICAgICAgaWYgKHJlZ2V4KSB7DQogICAgICAgIHJldHVybiB0b2tlbnM7DQogICAgICB9DQogICAgICBpZiAoIXRva2Vucy5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW4oJ1NUUklORycsICciIicpOw0KICAgICAgfQ0KICAgICAgaWYgKHRva2Vuc1swXVswXSAhPT0gJ05FT1NUUklORycpIHsNCiAgICAgICAgdG9rZW5zLnVuc2hpZnQoWycnLCAnJ10pOw0KICAgICAgfQ0KICAgICAgaWYgKGludGVycG9sYXRlZCA9IHRva2Vucy5sZW5ndGggPiAxKSB7DQogICAgICAgIHRoaXMudG9rZW4oJygnLCAnKCcpOw0KICAgICAgfQ0KICAgICAgZm9yIChpID0gMCwgX2xlbiA9IHRva2Vucy5sZW5ndGg7IGkgPCBfbGVuOyBpKyspIHsNCiAgICAgICAgX3JlZjMgPSB0b2tlbnNbaV0sIHRhZyA9IF9yZWYzWzBdLCB2YWx1ZSA9IF9yZWYzWzFdOw0KICAgICAgICBpZiAoaSkgew0KICAgICAgICAgIHRoaXMudG9rZW4oJysnLCAnKycpOw0KICAgICAgICB9DQogICAgICAgIGlmICh0YWcgPT09ICdUT0tFTlMnKSB7DQogICAgICAgICAgKF9yZWY0ID0gdGhpcy50b2tlbnMpLnB1c2guYXBwbHkoX3JlZjQsIHZhbHVlKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLnRva2VuKCdTVFJJTkcnLCB0aGlzLm1ha2VTdHJpbmcodmFsdWUsICciJywgaGVyZWRvYykpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAoaW50ZXJwb2xhdGVkKSB7DQogICAgICAgIHRoaXMudG9rZW4oJyknLCAnKScpOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRva2VuczsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS50b2tlbiA9IGZ1bmN0aW9uKHRhZywgdmFsdWUpIHsNCiAgICAgIHJldHVybiB0aGlzLnRva2Vucy5wdXNoKFt0YWcsIHZhbHVlLCB0aGlzLmxpbmVdKTsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS50YWcgPSBmdW5jdGlvbihpbmRleCwgdGFnKSB7DQogICAgICB2YXIgdG9rOw0KICAgICAgcmV0dXJuICh0b2sgPSBsYXN0KHRoaXMudG9rZW5zLCBpbmRleCkpICYmICh0YWcgPyB0b2tbMF0gPSB0YWcgOiB0b2tbMF0pOw0KICAgIH07DQogICAgTGV4ZXIucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oaW5kZXgsIHZhbCkgew0KICAgICAgdmFyIHRvazsNCiAgICAgIHJldHVybiAodG9rID0gbGFzdCh0aGlzLnRva2VucywgaW5kZXgpKSAmJiAodmFsID8gdG9rWzFdID0gdmFsIDogdG9rWzFdKTsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS51bmZpbmlzaGVkID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgcHJldiwgdmFsdWU7DQogICAgICByZXR1cm4gTElORV9DT05USU5VRVIudGVzdCh0aGlzLmNodW5rKSB8fCAocHJldiA9IGxhc3QodGhpcy50b2tlbnMsIDEpKSAmJiBwcmV2WzBdICE9PSAnLicgJiYgKHZhbHVlID0gdGhpcy52YWx1ZSgpKSAmJiAhdmFsdWUucmVzZXJ2ZWQgJiYgTk9fTkVXTElORS50ZXN0KHZhbHVlKSAmJiAhQ09ERS50ZXN0KHZhbHVlKSAmJiAhQVNTSUdORUQudGVzdCh0aGlzLmNodW5rKTsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5lc2NhcGVMaW5lcyA9IGZ1bmN0aW9uKHN0ciwgaGVyZWRvYykgew0KICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKE1VTFRJTElORVIsIGhlcmVkb2MgPyAnXFxuJyA6ICcnKTsNCiAgICB9Ow0KICAgIExleGVyLnByb3RvdHlwZS5tYWtlU3RyaW5nID0gZnVuY3Rpb24oYm9keSwgcXVvdGUsIGhlcmVkb2MpIHsNCiAgICAgIGlmICghYm9keSkgew0KICAgICAgICByZXR1cm4gcXVvdGUgKyBxdW90ZTsNCiAgICAgIH0NCiAgICAgIGJvZHkgPSBib2R5LnJlcGxhY2UoL1xcKFtcc1xTXSkvZywgZnVuY3Rpb24obWF0Y2gsIGNvbnRlbnRzKSB7DQogICAgICAgIGlmIChjb250ZW50cyA9PT0gJ1xuJyB8fCBjb250ZW50cyA9PT0gcXVvdGUpIHsNCiAgICAgICAgICByZXR1cm4gY29udGVudHM7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcmV0dXJuIG1hdGNoOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICAgIGJvZHkgPSBib2R5LnJlcGxhY2UoUmVnRXhwKCIiICsgcXVvdGUsICJnIiksICdcXCQmJyk7DQogICAgICByZXR1cm4gcXVvdGUgKyB0aGlzLmVzY2FwZUxpbmVzKGJvZHksIGhlcmVkb2MpICsgcXVvdGU7DQogICAgfTsNCiAgICByZXR1cm4gTGV4ZXI7DQogIH0pKCk7DQogIEpTX0tFWVdPUkRTID0gWyd0cnVlJywgJ2ZhbHNlJywgJ251bGwnLCAndGhpcycsICduZXcnLCAnZGVsZXRlJywgJ3R5cGVvZicsICdpbicsICdpbnN0YW5jZW9mJywgJ3JldHVybicsICd0aHJvdycsICdicmVhaycsICdjb250aW51ZScsICdkZWJ1Z2dlcicsICdpZicsICdlbHNlJywgJ3N3aXRjaCcsICdmb3InLCAnd2hpbGUnLCAnZG8nLCAndHJ5JywgJ2NhdGNoJywgJ2ZpbmFsbHknLCAnY2xhc3MnLCAnZXh0ZW5kcycsICdzdXBlciddOw0KICBDT0ZGRUVfS0VZV09SRFMgPSBbJ3VuZGVmaW5lZCcsICd0aGVuJywgJ3VubGVzcycsICd1bnRpbCcsICdsb29wJywgJ29mJywgJ2J5JywgJ3doZW4nXTsNCiAgQ09GRkVFX0FMSUFTX01BUCA9IHsNCiAgICBhbmQ6ICcmJicsDQogICAgb3I6ICd8fCcsDQogICAgaXM6ICc9PScsDQogICAgaXNudDogJyE9JywNCiAgICBub3Q6ICchJywNCiAgICB5ZXM6ICd0cnVlJywNCiAgICBubzogJ2ZhbHNlJywNCiAgICBvbjogJ3RydWUnLA0KICAgIG9mZjogJ2ZhbHNlJw0KICB9Ow0KICBDT0ZGRUVfQUxJQVNFUyA9IChmdW5jdGlvbigpIHsNCiAgICB2YXIgX3Jlc3VsdHM7DQogICAgX3Jlc3VsdHMgPSBbXTsNCiAgICBmb3IgKGtleSBpbiBDT0ZGRUVfQUxJQVNfTUFQKSB7DQogICAgICBfcmVzdWx0cy5wdXNoKGtleSk7DQogICAgfQ0KICAgIHJldHVybiBfcmVzdWx0czsNCiAgfSkoKTsNCiAgQ09GRkVFX0tFWVdPUkRTID0gQ09GRkVFX0tFWVdPUkRTLmNvbmNhdChDT0ZGRUVfQUxJQVNFUyk7DQogIFJFU0VSVkVEID0gWydjYXNlJywgJ2RlZmF1bHQnLCAnZnVuY3Rpb24nLCAndmFyJywgJ3ZvaWQnLCAnd2l0aCcsICdjb25zdCcsICdsZXQnLCAnZW51bScsICdleHBvcnQnLCAnaW1wb3J0JywgJ25hdGl2ZScsICdfX2hhc1Byb3AnLCAnX19leHRlbmRzJywgJ19fc2xpY2UnLCAnX19iaW5kJywgJ19faW5kZXhPZiddOw0KICBKU19GT1JCSURERU4gPSBKU19LRVlXT1JEUy5jb25jYXQoUkVTRVJWRUQpOw0KICBleHBvcnRzLlJFU0VSVkVEID0gUkVTRVJWRUQuY29uY2F0KEpTX0tFWVdPUkRTKS5jb25jYXQoQ09GRkVFX0tFWVdPUkRTKTsNCiAgSURFTlRJRklFUiA9IC9eKFskQS1aYS16X1x4N2YtXHVmZmZmXVskXHdceDdmLVx1ZmZmZl0qKShbXlxuXFNdKjooPyE6KSk/LzsNCiAgTlVNQkVSID0gL14weFtcZGEtZl0rfF4oPzpcZCsoXC5cZCspP3xcLlxkKykoPzplWystXT9cZCspPy9pOw0KICBIRVJFRE9DID0gL14oIiIifCcnJykoW1xzXFNdKj8pKD86XG5bXlxuXFNdKik/XDEvOw0KICBPUEVSQVRPUiA9IC9eKD86Wy09XT58Wy0rKlwvJTw+JnxeIT89XT18Pj4+PT98KFstKzpdKVwxfChbJnw8Pl0pXDI9P3xcP1wufFwuezIsM30pLzsNCiAgV0hJVEVTUEFDRSA9IC9eW15cblxTXSsvOw0KICBDT01NRU5UID0gL14jIyMoW14jXVtcc1xTXSo/KSg/OiMjI1teXG5cU10qfCg/OiMjIyk/JCl8Xig/OlxzKiMoPyEjI1teI10pLiopKy87DQogIENPREUgPSAvXlstPV0+LzsNCiAgTVVMVElfREVOVCA9IC9eKD86XG5bXlxuXFNdKikrLzsNCiAgU0lNUExFU1RSID0gL14nW15cXCddKig/OlxcLlteXFwnXSopKicvOw0KICBKU1RPS0VOID0gL15gW15cXGBdKig/OlxcLlteXFxgXSopKmAvOw0KICBSRUdFWCA9IC9eXC8oPyFbXHM9XSlbXltcL1xuXFxdKig/Oig/OlxcW1xzXFNdfFxbW15cXVxuXFxdKig/OlxcW1xzXFNdW15cXVxuXFxdKikqXSlbXltcL1xuXFxdKikqXC9baW1neV17MCw0fSg/IVx3KS87DQogIEhFUkVHRVggPSAvXlwvezN9KFtcc1xTXSs/KVwvezN9KFtpbWd5XXswLDR9KSg/IVx3KS87DQogIEhFUkVHRVhfT01JVCA9IC9ccysoPzojLiopPy9nOw0KICBNVUxUSUxJTkVSID0gL1xuL2c7DQogIEhFUkVET0NfSU5ERU5UID0gL1xuKyhbXlxuXFNdKikvZzsNCiAgSEVSRURPQ19JTExFR0FMID0gL1wqXC8vOw0KICBBU1NJR05FRCA9IC9eXHMqQD8oWyRBLVphLXpfXVskXHdceDdmLVx1ZmZmZl0qfFsnIl0uKlsnIl0pW15cblxTXSo/Wzo9XVteOj0+XS87DQogIExJTkVfQ09OVElOVUVSID0gL15ccyooPzosfFw/P1wuKD8hWy5cZF0pfDo6KS87DQogIFRSQUlMSU5HX1NQQUNFUyA9IC9ccyskLzsNCiAgTk9fTkVXTElORSA9IC9eKD86Wy0rKiZ8XC8lPTw+IS5cXF1bPD49JnxdKnxhbmR8b3J8aXMoPzpudCk/fG4oPzpvdHxldyl8ZGVsZXRlfHR5cGVvZnxpbnN0YW5jZW9mKSQvOw0KICBDT01QT1VORF9BU1NJR04gPSBbJy09JywgJys9JywgJy89JywgJyo9JywgJyU9JywgJ3x8PScsICcmJj0nLCAnPz0nLCAnPDw9JywgJz4+PScsICc+Pj49JywgJyY9JywgJ149JywgJ3w9J107DQogIFVOQVJZID0gWychJywgJ34nLCAnTkVXJywgJ1RZUEVPRicsICdERUxFVEUnLCAnRE8nXTsNCiAgTE9HSUMgPSBbJyYmJywgJ3x8JywgJyYnLCAnfCcsICdeJ107DQogIFNISUZUID0gWyc8PCcsICc+PicsICc+Pj4nXTsNCiAgQ09NUEFSRSA9IFsnPT0nLCAnIT0nLCAnPCcsICc+JywgJzw9JywgJz49J107DQogIE1BVEggPSBbJyonLCAnLycsICclJ107DQogIFJFTEFUSU9OID0gWydJTicsICdPRicsICdJTlNUQU5DRU9GJ107DQogIEJPT0wgPSBbJ1RSVUUnLCAnRkFMU0UnLCAnTlVMTCcsICdVTkRFRklORUQnXTsNCiAgTk9UX1JFR0VYID0gWydOVU1CRVInLCAnUkVHRVgnLCAnQk9PTCcsICcrKycsICctLScsICddJ107DQogIE5PVF9TUEFDRURfUkVHRVggPSBOT1RfUkVHRVguY29uY2F0KCcpJywgJ30nLCAnVEhJUycsICdJREVOVElGSUVSJywgJ1NUUklORycpOw0KICBDQUxMQUJMRSA9IFsnSURFTlRJRklFUicsICdTVFJJTkcnLCAnUkVHRVgnLCAnKScsICddJywgJ30nLCAnPycsICc6OicsICdAJywgJ1RISVMnLCAnU1VQRVInXTsNCiAgSU5ERVhBQkxFID0gQ0FMTEFCTEUuY29uY2F0KCdOVU1CRVInLCAnQk9PTCcpOw0KICBMSU5FX0JSRUFLID0gWydJTkRFTlQnLCAnT1VUREVOVCcsICdURVJNSU5BVE9SJ107DQp9KTsNCi8qKg0KICogQ29weXJpZ2h0IChjKSAyMDExIEplcmVteSBBc2hrZW5hcw0KICoNCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uDQogKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbg0KICogZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dA0KICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsDQogKiBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbA0KICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQogKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZw0KICogY29uZGl0aW9uczoNCiAqIA0KICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUNCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KICogDQogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwNCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUw0KICogT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQNCiAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUDQogKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwNCiAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUg0KICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KICovDQoNCmRlZmluZSgnYWNlL21vZGUvY29mZmVlL3Jld3JpdGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiAgICANCiAgdmFyIEJBTEFOQ0VEX1BBSVJTLCBFWFBSRVNTSU9OX0NMT1NFLCBFWFBSRVNTSU9OX0VORCwgRVhQUkVTU0lPTl9TVEFSVCwgSU1QTElDSVRfQkxPQ0ssIElNUExJQ0lUX0NBTEwsIElNUExJQ0lUX0VORCwgSU1QTElDSVRfRlVOQywgSU1QTElDSVRfVU5TUEFDRURfQ0FMTCwgSU5WRVJTRVMsIExJTkVCUkVBS1MsIFNJTkdMRV9DTE9TRVJTLCBTSU5HTEVfTElORVJTLCBsZWZ0LCByaXRlLCBfaSwgX2xlbiwgX3JlZjsNCiAgdmFyIF9faW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mIHx8IGZ1bmN0aW9uKGl0ZW0pIHsNCiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7DQogICAgICBpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7DQogICAgfQ0KICAgIHJldHVybiAtMTsNCiAgfSwgX19zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsNCiAgZXhwb3J0cy5SZXdyaXRlciA9IChmdW5jdGlvbigpIHsNCiAgICBmdW5jdGlvbiBSZXdyaXRlcigpIHt9DQogICAgUmV3cml0ZXIucHJvdG90eXBlLnJld3JpdGUgPSBmdW5jdGlvbih0b2tlbnMpIHsNCiAgICAgIHRoaXMudG9rZW5zID0gdG9rZW5zOw0KICAgICAgdGhpcy5yZW1vdmVMZWFkaW5nTmV3bGluZXMoKTsNCiAgICAgIHRoaXMucmVtb3ZlTWlkRXhwcmVzc2lvbk5ld2xpbmVzKCk7DQogICAgICB0aGlzLmNsb3NlT3BlbkNhbGxzKCk7DQogICAgICB0aGlzLmNsb3NlT3BlbkluZGV4ZXMoKTsNCiAgICAgIHRoaXMuYWRkSW1wbGljaXRJbmRlbnRhdGlvbigpOw0KICAgICAgdGhpcy50YWdQb3N0Zml4Q29uZGl0aW9uYWxzKCk7DQogICAgICB0aGlzLmFkZEltcGxpY2l0QnJhY2VzKCk7DQogICAgICB0aGlzLmFkZEltcGxpY2l0UGFyZW50aGVzZXMoKTsNCiAgICAgIHRoaXMuZW5zdXJlQmFsYW5jZShCQUxBTkNFRF9QQUlSUyk7DQogICAgICB0aGlzLnJld3JpdGVDbG9zaW5nUGFyZW5zKCk7DQogICAgICByZXR1cm4gdGhpcy50b2tlbnM7DQogICAgfTsNCiAgICBSZXdyaXRlci5wcm90b3R5cGUuc2NhblRva2VucyA9IGZ1bmN0aW9uKGJsb2NrKSB7DQogICAgICB2YXIgaSwgdG9rZW4sIHRva2VuczsNCiAgICAgIHRva2VucyA9IHRoaXMudG9rZW5zOw0KICAgICAgaSA9IDA7DQogICAgICB3aGlsZSAodG9rZW4gPSB0b2tlbnNbaV0pIHsNCiAgICAgICAgaSArPSBibG9jay5jYWxsKHRoaXMsIHRva2VuLCBpLCB0b2tlbnMpOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfTsNCiAgICBSZXdyaXRlci5wcm90b3R5cGUuZGV0ZWN0RW5kID0gZnVuY3Rpb24oaSwgY29uZGl0aW9uLCBhY3Rpb24pIHsNCiAgICAgIHZhciBsZXZlbHMsIHRva2VuLCB0b2tlbnMsIF9yZWYsIF9yZWYyOw0KICAgICAgdG9rZW5zID0gdGhpcy50b2tlbnM7DQogICAgICBsZXZlbHMgPSAwOw0KICAgICAgd2hpbGUgKHRva2VuID0gdG9rZW5zW2ldKSB7DQogICAgICAgIGlmIChsZXZlbHMgPT09IDAgJiYgY29uZGl0aW9uLmNhbGwodGhpcywgdG9rZW4sIGkpKSB7DQogICAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsKHRoaXMsIHRva2VuLCBpKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIXRva2VuIHx8IGxldmVscyA8IDApIHsNCiAgICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGwodGhpcywgdG9rZW4sIGkgLSAxKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoX3JlZiA9IHRva2VuWzBdLCBfX2luZGV4T2YuY2FsbChFWFBSRVNTSU9OX1NUQVJULCBfcmVmKSA+PSAwKSB7DQogICAgICAgICAgbGV2ZWxzICs9IDE7DQogICAgICAgIH0gZWxzZSBpZiAoX3JlZjIgPSB0b2tlblswXSwgX19pbmRleE9mLmNhbGwoRVhQUkVTU0lPTl9FTkQsIF9yZWYyKSA+PSAwKSB7DQogICAgICAgICAgbGV2ZWxzIC09IDE7DQogICAgICAgIH0NCiAgICAgICAgaSArPSAxOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIGkgLSAxOw0KICAgIH07DQogICAgUmV3cml0ZXIucHJvdG90eXBlLnJlbW92ZUxlYWRpbmdOZXdsaW5lcyA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGksIHRhZywgX2xlbiwgX3JlZjsNCiAgICAgIF9yZWYgPSB0aGlzLnRva2VuczsNCiAgICAgIGZvciAoaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgaSA8IF9sZW47IGkrKykgew0KICAgICAgICB0YWcgPSBfcmVmW2ldWzBdOw0KICAgICAgICBpZiAodGFnICE9PSAnVEVSTUlOQVRPUicpIHsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKGkpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnNwbGljZSgwLCBpKTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIFJld3JpdGVyLnByb3RvdHlwZS5yZW1vdmVNaWRFeHByZXNzaW9uTmV3bGluZXMgPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLnNjYW5Ub2tlbnMoZnVuY3Rpb24odG9rZW4sIGksIHRva2Vucykgew0KICAgICAgICB2YXIgX3JlZjsNCiAgICAgICAgaWYgKCEodG9rZW5bMF0gPT09ICdURVJNSU5BVE9SJyAmJiAoX3JlZiA9IHRoaXMudGFnKGkgKyAxKSwgX19pbmRleE9mLmNhbGwoRVhQUkVTU0lPTl9DTE9TRSwgX3JlZikgPj0gMCkpKSB7DQogICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0NCiAgICAgICAgdG9rZW5zLnNwbGljZShpLCAxKTsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9KTsNCiAgICB9Ow0KICAgIFJld3JpdGVyLnByb3RvdHlwZS5jbG9zZU9wZW5DYWxscyA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGFjdGlvbiwgY29uZGl0aW9uOw0KICAgICAgY29uZGl0aW9uID0gZnVuY3Rpb24odG9rZW4sIGkpIHsNCiAgICAgICAgdmFyIF9yZWY7DQogICAgICAgIHJldHVybiAoKF9yZWYgPSB0b2tlblswXSkgPT09ICcpJyB8fCBfcmVmID09PSAnQ0FMTF9FTkQnKSB8fCB0b2tlblswXSA9PT0gJ09VVERFTlQnICYmIHRoaXMudGFnKGkgLSAxKSA9PT0gJyknOw0KICAgICAgfTsNCiAgICAgIGFjdGlvbiA9IGZ1bmN0aW9uKHRva2VuLCBpKSB7DQogICAgICAgIHJldHVybiB0aGlzLnRva2Vuc1t0b2tlblswXSA9PT0gJ09VVERFTlQnID8gaSAtIDEgOiBpXVswXSA9ICdDQUxMX0VORCc7DQogICAgICB9Ow0KICAgICAgcmV0dXJuIHRoaXMuc2NhblRva2VucyhmdW5jdGlvbih0b2tlbiwgaSkgew0KICAgICAgICBpZiAodG9rZW5bMF0gPT09ICdDQUxMX1NUQVJUJykgew0KICAgICAgICAgIHRoaXMuZGV0ZWN0RW5kKGkgKyAxLCBjb25kaXRpb24sIGFjdGlvbik7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIDE7DQogICAgICB9KTsNCiAgICB9Ow0KICAgIFJld3JpdGVyLnByb3RvdHlwZS5jbG9zZU9wZW5JbmRleGVzID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgYWN0aW9uLCBjb25kaXRpb247DQogICAgICBjb25kaXRpb24gPSBmdW5jdGlvbih0b2tlbiwgaSkgew0KICAgICAgICB2YXIgX3JlZjsNCiAgICAgICAgcmV0dXJuIChfcmVmID0gdG9rZW5bMF0pID09PSAnXScgfHwgX3JlZiA9PT0gJ0lOREVYX0VORCc7DQogICAgICB9Ow0KICAgICAgYWN0aW9uID0gZnVuY3Rpb24odG9rZW4sIGkpIHsNCiAgICAgICAgcmV0dXJuIHRva2VuWzBdID0gJ0lOREVYX0VORCc7DQogICAgICB9Ow0KICAgICAgcmV0dXJuIHRoaXMuc2NhblRva2VucyhmdW5jdGlvbih0b2tlbiwgaSkgew0KICAgICAgICBpZiAodG9rZW5bMF0gPT09ICdJTkRFWF9TVEFSVCcpIHsNCiAgICAgICAgICB0aGlzLmRldGVjdEVuZChpICsgMSwgY29uZGl0aW9uLCBhY3Rpb24pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAxOw0KICAgICAgfSk7DQogICAgfTsNCiAgICBSZXdyaXRlci5wcm90b3R5cGUuYWRkSW1wbGljaXRCcmFjZXMgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBhY3Rpb24sIGNvbmRpdGlvbiwgc3RhY2ssIHN0YXJ0LCBzdGFydEluZGVudDsNCiAgICAgIHN0YWNrID0gW107DQogICAgICBzdGFydCA9IG51bGw7DQogICAgICBzdGFydEluZGVudCA9IDA7DQogICAgICBjb25kaXRpb24gPSBmdW5jdGlvbih0b2tlbiwgaSkgew0KICAgICAgICB2YXIgb25lLCB0YWcsIHRocmVlLCB0d28sIF9yZWYsIF9yZWYyOw0KICAgICAgICBfcmVmID0gdGhpcy50b2tlbnMuc2xpY2UoaSArIDEsIChpICsgMyArIDEpIHx8IDllOSksIG9uZSA9IF9yZWZbMF0sIHR3byA9IF9yZWZbMV0sIHRocmVlID0gX3JlZlsyXTsNCiAgICAgICAgaWYgKCdIRVJFQ09NTUVOVCcgPT09IChvbmUgIT0gbnVsbCA/IG9uZVswXSA6IHZvaWQgMCkpIHsNCiAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgdGFnID0gdG9rZW5bMF07DQogICAgICAgIHJldHVybiAoKHRhZyA9PT0gJ1RFUk1JTkFUT1InIHx8IHRhZyA9PT0gJ09VVERFTlQnKSAmJiAhKCh0d28gIT0gbnVsbCA/IHR3b1swXSA6IHZvaWQgMCkgPT09ICc6JyB8fCAob25lICE9IG51bGwgPyBvbmVbMF0gOiB2b2lkIDApID09PSAnQCcgJiYgKHRocmVlICE9IG51bGwgPyB0aHJlZVswXSA6IHZvaWQgMCkgPT09ICc6JykpIHx8ICh0YWcgPT09ICcsJyAmJiBvbmUgJiYgKChfcmVmMiA9IG9uZVswXSkgIT09ICdJREVOVElGSUVSJyAmJiBfcmVmMiAhPT0gJ05VTUJFUicgJiYgX3JlZjIgIT09ICdTVFJJTkcnICYmIF9yZWYyICE9PSAnQCcgJiYgX3JlZjIgIT09ICdURVJNSU5BVE9SJyAmJiBfcmVmMiAhPT0gJ09VVERFTlQnKSk7DQogICAgICB9Ow0KICAgICAgYWN0aW9uID0gZnVuY3Rpb24odG9rZW4sIGkpIHsNCiAgICAgICAgdmFyIHRvazsNCiAgICAgICAgdG9rID0gWyd9JywgJ30nLCB0b2tlblsyXV07DQogICAgICAgIHRvay5nZW5lcmF0ZWQgPSB0cnVlOw0KICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc3BsaWNlKGksIDAsIHRvayk7DQogICAgICB9Ow0KICAgICAgcmV0dXJuIHRoaXMuc2NhblRva2VucyhmdW5jdGlvbih0b2tlbiwgaSwgdG9rZW5zKSB7DQogICAgICAgIHZhciBhZ28sIGlkeCwgdGFnLCB0b2ssIHZhbHVlLCBfcmVmLCBfcmVmMjsNCiAgICAgICAgaWYgKF9yZWYgPSAodGFnID0gdG9rZW5bMF0pLCBfX2luZGV4T2YuY2FsbChFWFBSRVNTSU9OX1NUQVJULCBfcmVmKSA+PSAwKSB7DQogICAgICAgICAgc3RhY2sucHVzaChbKHRhZyA9PT0gJ0lOREVOVCcgJiYgdGhpcy50YWcoaSAtIDEpID09PSAneycgPyAneycgOiB0YWcpLCBpXSk7DQogICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0NCiAgICAgICAgaWYgKF9faW5kZXhPZi5jYWxsKEVYUFJFU1NJT05fRU5ELCB0YWcpID49IDApIHsNCiAgICAgICAgICBzdGFydCA9IHN0YWNrLnBvcCgpOw0KICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICB9DQogICAgICAgIGlmICghKHRhZyA9PT0gJzonICYmICgoYWdvID0gdGhpcy50YWcoaSAtIDIpKSA9PT0gJzonIHx8ICgoX3JlZjIgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXSkgIT0gbnVsbCA/IF9yZWYyWzBdIDogdm9pZCAwKSAhPT0gJ3snKSkpIHsNCiAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAgfQ0KICAgICAgICBzdGFjay5wdXNoKFsneyddKTsNCiAgICAgICAgaWR4ID0gYWdvID09PSAnQCcgPyBpIC0gMiA6IGkgLSAxOw0KICAgICAgICB3aGlsZSAodGhpcy50YWcoaWR4IC0gMikgPT09ICdIRVJFQ09NTUVOVCcpIHsNCiAgICAgICAgICBpZHggLT0gMjsNCiAgICAgICAgfQ0KICAgICAgICB2YWx1ZSA9IG5ldyBTdHJpbmcoJ3snKTsNCiAgICAgICAgdmFsdWUuZ2VuZXJhdGVkID0gdHJ1ZTsNCiAgICAgICAgdG9rID0gWyd7JywgdmFsdWUsIHRva2VuWzJdXTsNCiAgICAgICAgdG9rLmdlbmVyYXRlZCA9IHRydWU7DQogICAgICAgIHRva2Vucy5zcGxpY2UoaWR4LCAwLCB0b2spOw0KICAgICAgICB0aGlzLmRldGVjdEVuZChpICsgMiwgY29uZGl0aW9uLCBhY3Rpb24pOw0KICAgICAgICByZXR1cm4gMjsNCiAgICAgIH0pOw0KICAgIH07DQogICAgUmV3cml0ZXIucHJvdG90eXBlLmFkZEltcGxpY2l0UGFyZW50aGVzZXMgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBhY3Rpb24sIG5vQ2FsbDsNCiAgICAgIG5vQ2FsbCA9IGZhbHNlOw0KICAgICAgYWN0aW9uID0gZnVuY3Rpb24odG9rZW4sIGkpIHsNCiAgICAgICAgdmFyIGlkeDsNCiAgICAgICAgaWR4ID0gdG9rZW5bMF0gPT09ICdPVVRERU5UJyA/IGkgKyAxIDogaTsNCiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnNwbGljZShpZHgsIDAsIFsnQ0FMTF9FTkQnLCAnKScsIHRva2VuWzJdXSk7DQogICAgICB9Ow0KICAgICAgcmV0dXJuIHRoaXMuc2NhblRva2VucyhmdW5jdGlvbih0b2tlbiwgaSwgdG9rZW5zKSB7DQogICAgICAgIHZhciBjYWxsT2JqZWN0LCBjdXJyZW50LCBuZXh0LCBwcmV2LCBzZWVuQ29udHJvbCwgc2VlblNpbmdsZSwgdGFnLCBfcmVmLCBfcmVmMiwgX3JlZjM7DQogICAgICAgIHRhZyA9IHRva2VuWzBdOw0KICAgICAgICBpZiAodGFnID09PSAnQ0xBU1MnIHx8IHRhZyA9PT0gJ0lGJykgew0KICAgICAgICAgIG5vQ2FsbCA9IHRydWU7DQogICAgICAgIH0NCiAgICAgICAgX3JlZiA9IHRva2Vucy5zbGljZShpIC0gMSwgKGkgKyAxICsgMSkgfHwgOWU5KSwgcHJldiA9IF9yZWZbMF0sIGN1cnJlbnQgPSBfcmVmWzFdLCBuZXh0ID0gX3JlZlsyXTsNCiAgICAgICAgY2FsbE9iamVjdCA9ICFub0NhbGwgJiYgdGFnID09PSAnSU5ERU5UJyAmJiBuZXh0ICYmIG5leHQuZ2VuZXJhdGVkICYmIG5leHRbMF0gPT09ICd7JyAmJiBwcmV2ICYmIChfcmVmMiA9IHByZXZbMF0sIF9faW5kZXhPZi5jYWxsKElNUExJQ0lUX0ZVTkMsIF9yZWYyKSA+PSAwKTsNCiAgICAgICAgc2VlblNpbmdsZSA9IGZhbHNlOw0KICAgICAgICBzZWVuQ29udHJvbCA9IGZhbHNlOw0KICAgICAgICBpZiAoX19pbmRleE9mLmNhbGwoTElORUJSRUFLUywgdGFnKSA+PSAwKSB7DQogICAgICAgICAgbm9DYWxsID0gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHByZXYgJiYgIXByZXYuc3BhY2VkICYmIHRhZyA9PT0gJz8nKSB7DQogICAgICAgICAgdG9rZW4uY2FsbCA9IHRydWU7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHRva2VuLmZyb21UaGVuKSB7DQogICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEoY2FsbE9iamVjdCB8fCAocHJldiAhPSBudWxsID8gcHJldi5zcGFjZWQgOiB2b2lkIDApICYmIChwcmV2LmNhbGwgfHwgKF9yZWYzID0gcHJldlswXSwgX19pbmRleE9mLmNhbGwoSU1QTElDSVRfRlVOQywgX3JlZjMpID49IDApKSAmJiAoX19pbmRleE9mLmNhbGwoSU1QTElDSVRfQ0FMTCwgdGFnKSA+PSAwIHx8ICEodG9rZW4uc3BhY2VkIHx8IHRva2VuLm5ld0xpbmUpICYmIF9faW5kZXhPZi5jYWxsKElNUExJQ0lUX1VOU1BBQ0VEX0NBTEwsIHRhZykgPj0gMCkpKSB7DQogICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0NCiAgICAgICAgdG9rZW5zLnNwbGljZShpLCAwLCBbJ0NBTExfU1RBUlQnLCAnKCcsIHRva2VuWzJdXSk7DQogICAgICAgIHRoaXMuZGV0ZWN0RW5kKGkgKyAxLCBmdW5jdGlvbih0b2tlbiwgaSkgew0KICAgICAgICAgIHZhciBwb3N0LCBfcmVmNDsNCiAgICAgICAgICB0YWcgPSB0b2tlblswXTsNCiAgICAgICAgICBpZiAoIXNlZW5TaW5nbGUgJiYgdG9rZW4uZnJvbVRoZW4pIHsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGFnID09PSAnSUYnIHx8IHRhZyA9PT0gJ0VMU0UnIHx8IHRhZyA9PT0gJ0NBVENIJyB8fCB0YWcgPT09ICctPicgfHwgdGFnID09PSAnPT4nKSB7DQogICAgICAgICAgICBzZWVuU2luZ2xlID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRhZyA9PT0gJ0lGJyB8fCB0YWcgPT09ICdFTFNFJyB8fCB0YWcgPT09ICdTV0lUQ0gnIHx8IHRhZyA9PT0gJ1RSWScpIHsNCiAgICAgICAgICAgIHNlZW5Db250cm9sID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKCh0YWcgPT09ICcuJyB8fCB0YWcgPT09ICc/LicgfHwgdGFnID09PSAnOjonKSAmJiB0aGlzLnRhZyhpIC0gMSkgPT09ICdPVVRERU5UJykgew0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgfQ0KICAgICAgICAgIHJldHVybiAhdG9rZW4uZ2VuZXJhdGVkICYmIHRoaXMudGFnKGkgLSAxKSAhPT0gJywnICYmIChfX2luZGV4T2YuY2FsbChJTVBMSUNJVF9FTkQsIHRhZykgPj0gMCB8fCAodGFnID09PSAnSU5ERU5UJyAmJiAhc2VlbkNvbnRyb2wpKSAmJiAodGFnICE9PSAnSU5ERU5UJyB8fCAodGhpcy50YWcoaSAtIDIpICE9PSAnQ0xBU1MnICYmIChfcmVmNCA9IHRoaXMudGFnKGkgLSAxKSwgX19pbmRleE9mLmNhbGwoSU1QTElDSVRfQkxPQ0ssIF9yZWY0KSA8IDApICYmICEoKHBvc3QgPSB0aGlzLnRva2Vuc1tpICsgMV0pICYmIHBvc3QuZ2VuZXJhdGVkICYmIHBvc3RbMF0gPT09ICd7JykpKTsNCiAgICAgICAgfSwgYWN0aW9uKTsNCiAgICAgICAgaWYgKHByZXZbMF0gPT09ICc/Jykgew0KICAgICAgICAgIHByZXZbMF0gPSAnRlVOQ19FWElTVCc7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIDI7DQogICAgICB9KTsNCiAgICB9Ow0KICAgIFJld3JpdGVyLnByb3RvdHlwZS5hZGRJbXBsaWNpdEluZGVudGF0aW9uID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gdGhpcy5zY2FuVG9rZW5zKGZ1bmN0aW9uKHRva2VuLCBpLCB0b2tlbnMpIHsNCiAgICAgICAgdmFyIGFjdGlvbiwgY29uZGl0aW9uLCBpbmRlbnQsIG91dGRlbnQsIHN0YXJ0ZXIsIHRhZywgX3JlZiwgX3JlZjI7DQogICAgICAgIHRhZyA9IHRva2VuWzBdOw0KICAgICAgICBpZiAodGFnID09PSAnVEVSTUlOQVRPUicgJiYgdGhpcy50YWcoaSArIDEpID09PSAnVEhFTicpIHsNCiAgICAgICAgICB0b2tlbnMuc3BsaWNlKGksIDEpOw0KICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgICAgIGlmICh0YWcgPT09ICdFTFNFJyAmJiB0aGlzLnRhZyhpIC0gMSkgIT09ICdPVVRERU5UJykgew0KICAgICAgICAgIHRva2Vucy5zcGxpY2UuYXBwbHkodG9rZW5zLCBbaSwgMF0uY29uY2F0KF9fc2xpY2UuY2FsbCh0aGlzLmluZGVudGF0aW9uKHRva2VuKSkpKTsNCiAgICAgICAgICByZXR1cm4gMjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodGFnID09PSAnQ0FUQ0gnICYmICgoX3JlZiA9IHRoaXMudGFnKGkgKyAyKSkgPT09ICdPVVRERU5UJyB8fCBfcmVmID09PSAnVEVSTUlOQVRPUicgfHwgX3JlZiA9PT0gJ0ZJTkFMTFknKSkgew0KICAgICAgICAgIHRva2Vucy5zcGxpY2UuYXBwbHkodG9rZW5zLCBbaSArIDIsIDBdLmNvbmNhdChfX3NsaWNlLmNhbGwodGhpcy5pbmRlbnRhdGlvbih0b2tlbikpKSk7DQogICAgICAgICAgcmV0dXJuIDQ7DQogICAgICAgIH0NCiAgICAgICAgaWYgKF9faW5kZXhPZi5jYWxsKFNJTkdMRV9MSU5FUlMsIHRhZykgPj0gMCAmJiB0aGlzLnRhZyhpICsgMSkgIT09ICdJTkRFTlQnICYmICEodGFnID09PSAnRUxTRScgJiYgdGhpcy50YWcoaSArIDEpID09PSAnSUYnKSkgew0KICAgICAgICAgIHN0YXJ0ZXIgPSB0YWc7DQogICAgICAgICAgX3JlZjIgPSB0aGlzLmluZGVudGF0aW9uKHRva2VuKSwgaW5kZW50ID0gX3JlZjJbMF0sIG91dGRlbnQgPSBfcmVmMlsxXTsNCiAgICAgICAgICBpZiAoc3RhcnRlciA9PT0gJ1RIRU4nKSB7DQogICAgICAgICAgICBpbmRlbnQuZnJvbVRoZW4gPSB0cnVlOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpbmRlbnQuZ2VuZXJhdGVkID0gb3V0ZGVudC5nZW5lcmF0ZWQgPSB0cnVlOw0KICAgICAgICAgIHRva2Vucy5zcGxpY2UoaSArIDEsIDAsIGluZGVudCk7DQogICAgICAgICAgY29uZGl0aW9uID0gZnVuY3Rpb24odG9rZW4sIGkpIHsNCiAgICAgICAgICAgIHZhciBfcmVmMzsNCiAgICAgICAgICAgIHJldHVybiB0b2tlblsxXSAhPT0gJzsnICYmIChfcmVmMyA9IHRva2VuWzBdLCBfX2luZGV4T2YuY2FsbChTSU5HTEVfQ0xPU0VSUywgX3JlZjMpID49IDApICYmICEodG9rZW5bMF0gPT09ICdFTFNFJyAmJiAoc3RhcnRlciAhPT0gJ0lGJyAmJiBzdGFydGVyICE9PSAnVEhFTicpKTsNCiAgICAgICAgICB9Ow0KICAgICAgICAgIGFjdGlvbiA9IGZ1bmN0aW9uKHRva2VuLCBpKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc3BsaWNlKCh0aGlzLnRhZyhpIC0gMSkgPT09ICcsJyA/IGkgLSAxIDogaSksIDAsIG91dGRlbnQpOw0KICAgICAgICAgIH07DQogICAgICAgICAgdGhpcy5kZXRlY3RFbmQoaSArIDIsIGNvbmRpdGlvbiwgYWN0aW9uKTsNCiAgICAgICAgICBpZiAodGFnID09PSAnVEhFTicpIHsNCiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoaSwgMSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAxOw0KICAgICAgfSk7DQogICAgfTsNCiAgICBSZXdyaXRlci5wcm90b3R5cGUudGFnUG9zdGZpeENvbmRpdGlvbmFscyA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGNvbmRpdGlvbjsNCiAgICAgIGNvbmRpdGlvbiA9IGZ1bmN0aW9uKHRva2VuLCBpKSB7DQogICAgICAgIHZhciBfcmVmOw0KICAgICAgICByZXR1cm4gKF9yZWYgPSB0b2tlblswXSkgPT09ICdURVJNSU5BVE9SJyB8fCBfcmVmID09PSAnSU5ERU5UJzsNCiAgICAgIH07DQogICAgICByZXR1cm4gdGhpcy5zY2FuVG9rZW5zKGZ1bmN0aW9uKHRva2VuLCBpKSB7DQogICAgICAgIHZhciBvcmlnaW5hbDsNCiAgICAgICAgaWYgKHRva2VuWzBdICE9PSAnSUYnKSB7DQogICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0NCiAgICAgICAgb3JpZ2luYWwgPSB0b2tlbjsNCiAgICAgICAgdGhpcy5kZXRlY3RFbmQoaSArIDEsIGNvbmRpdGlvbiwgZnVuY3Rpb24odG9rZW4sIGkpIHsNCiAgICAgICAgICBpZiAodG9rZW5bMF0gIT09ICdJTkRFTlQnKSB7DQogICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxbMF0gPSAnUE9TVF8nICsgb3JpZ2luYWxbMF07DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgcmV0dXJuIDE7DQogICAgICB9KTsNCiAgICB9Ow0KICAgIFJld3JpdGVyLnByb3RvdHlwZS5lbnN1cmVCYWxhbmNlID0gZnVuY3Rpb24ocGFpcnMpIHsNCiAgICAgIHZhciBjbG9zZSwgbGV2ZWwsIGxldmVscywgb3Blbiwgb3BlbkxpbmUsIHRhZywgdG9rZW4sIF9pLCBfaiwgX2xlbiwgX2xlbjIsIF9yZWYsIF9yZWYyOw0KICAgICAgbGV2ZWxzID0ge307DQogICAgICBvcGVuTGluZSA9IHt9Ow0KICAgICAgX3JlZiA9IHRoaXMudG9rZW5zOw0KICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIHRva2VuID0gX3JlZltfaV07DQogICAgICAgIHRhZyA9IHRva2VuWzBdOw0KICAgICAgICBmb3IgKF9qID0gMCwgX2xlbjIgPSBwYWlycy5sZW5ndGg7IF9qIDwgX2xlbjI7IF9qKyspIHsNCiAgICAgICAgICBfcmVmMiA9IHBhaXJzW19qXSwgb3BlbiA9IF9yZWYyWzBdLCBjbG9zZSA9IF9yZWYyWzFdOw0KICAgICAgICAgIGxldmVsc1tvcGVuXSB8PSAwOw0KICAgICAgICAgIGlmICh0YWcgPT09IG9wZW4pIHsNCiAgICAgICAgICAgIGlmIChsZXZlbHNbb3Blbl0rKyA9PT0gMCkgew0KICAgICAgICAgICAgICBvcGVuTGluZVtvcGVuXSA9IHRva2VuWzJdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09PSBjbG9zZSAmJiAtLWxldmVsc1tvcGVuXSA8IDApIHsNCiAgICAgICAgICAgIHRocm93IEVycm9yKCJ0b28gbWFueSAiICsgdG9rZW5bMV0gKyAiIG9uIGxpbmUgIiArICh0b2tlblsyXSArIDEpKTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGZvciAob3BlbiBpbiBsZXZlbHMpIHsNCiAgICAgICAgbGV2ZWwgPSBsZXZlbHNbb3Blbl07DQogICAgICAgIGlmIChsZXZlbCA+IDApIHsNCiAgICAgICAgICB0aHJvdyBFcnJvcigidW5jbG9zZWQgIiArIG9wZW4gKyAiIG9uIGxpbmUgIiArIChvcGVuTGluZVtvcGVuXSArIDEpKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRoaXM7DQogICAgfTsNCiAgICBSZXdyaXRlci5wcm90b3R5cGUucmV3cml0ZUNsb3NpbmdQYXJlbnMgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBkZWJ0LCBrZXksIHN0YWNrOw0KICAgICAgc3RhY2sgPSBbXTsNCiAgICAgIGRlYnQgPSB7fTsNCiAgICAgIGZvciAoa2V5IGluIElOVkVSU0VTKSB7DQogICAgICAgIGRlYnRba2V5XSA9IDA7DQogICAgICB9DQogICAgICByZXR1cm4gdGhpcy5zY2FuVG9rZW5zKGZ1bmN0aW9uKHRva2VuLCBpLCB0b2tlbnMpIHsNCiAgICAgICAgdmFyIGludiwgbWF0Y2gsIG10YWcsIG9wcG9zLCB0YWcsIHZhbCwgX3JlZjsNCiAgICAgICAgaWYgKF9yZWYgPSAodGFnID0gdG9rZW5bMF0pLCBfX2luZGV4T2YuY2FsbChFWFBSRVNTSU9OX1NUQVJULCBfcmVmKSA+PSAwKSB7DQogICAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7DQogICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0NCiAgICAgICAgaWYgKF9faW5kZXhPZi5jYWxsKEVYUFJFU1NJT05fRU5ELCB0YWcpIDwgMCkgew0KICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICB9DQogICAgICAgIGlmIChkZWJ0W2ludiA9IElOVkVSU0VTW3RhZ11dID4gMCkgew0KICAgICAgICAgIGRlYnRbaW52XSAtPSAxOw0KICAgICAgICAgIHRva2Vucy5zcGxpY2UoaSwgMSk7DQogICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICAgICAgbWF0Y2ggPSBzdGFjay5wb3AoKTsNCiAgICAgICAgbXRhZyA9IG1hdGNoWzBdOw0KICAgICAgICBvcHBvcyA9IElOVkVSU0VTW210YWddOw0KICAgICAgICBpZiAodGFnID09PSBvcHBvcykgew0KICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICB9DQogICAgICAgIGRlYnRbbXRhZ10gKz0gMTsNCiAgICAgICAgdmFsID0gW29wcG9zLCBtdGFnID09PSAnSU5ERU5UJyA/IG1hdGNoWzFdIDogb3Bwb3NdOw0KICAgICAgICBpZiAodGhpcy50YWcoaSArIDIpID09PSBtdGFnKSB7DQogICAgICAgICAgdG9rZW5zLnNwbGljZShpICsgMywgMCwgdmFsKTsNCiAgICAgICAgICBzdGFjay5wdXNoKG1hdGNoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0b2tlbnMuc3BsaWNlKGksIDAsIHZhbCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIDE7DQogICAgICB9KTsNCiAgICB9Ow0KICAgIFJld3JpdGVyLnByb3RvdHlwZS5pbmRlbnRhdGlvbiA9IGZ1bmN0aW9uKHRva2VuKSB7DQogICAgICByZXR1cm4gW1snSU5ERU5UJywgMiwgdG9rZW5bMl1dLCBbJ09VVERFTlQnLCAyLCB0b2tlblsyXV1dOw0KICAgIH07DQogICAgUmV3cml0ZXIucHJvdG90eXBlLnRhZyA9IGZ1bmN0aW9uKGkpIHsNCiAgICAgIHZhciBfcmVmOw0KICAgICAgcmV0dXJuIChfcmVmID0gdGhpcy50b2tlbnNbaV0pICE9IG51bGwgPyBfcmVmWzBdIDogdm9pZCAwOw0KICAgIH07DQogICAgcmV0dXJuIFJld3JpdGVyOw0KICB9KSgpOw0KICBCQUxBTkNFRF9QQUlSUyA9IFtbJygnLCAnKSddLCBbJ1snLCAnXSddLCBbJ3snLCAnfSddLCBbJ0lOREVOVCcsICdPVVRERU5UJ10sIFsnQ0FMTF9TVEFSVCcsICdDQUxMX0VORCddLCBbJ1BBUkFNX1NUQVJUJywgJ1BBUkFNX0VORCddLCBbJ0lOREVYX1NUQVJUJywgJ0lOREVYX0VORCddXTsNCiAgSU5WRVJTRVMgPSB7fTsNCiAgRVhQUkVTU0lPTl9TVEFSVCA9IFtdOw0KICBFWFBSRVNTSU9OX0VORCA9IFtdOw0KICBmb3IgKF9pID0gMCwgX2xlbiA9IEJBTEFOQ0VEX1BBSVJTLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgX3JlZiA9IEJBTEFOQ0VEX1BBSVJTW19pXSwgbGVmdCA9IF9yZWZbMF0sIHJpdGUgPSBfcmVmWzFdOw0KICAgIEVYUFJFU1NJT05fU1RBUlQucHVzaChJTlZFUlNFU1tyaXRlXSA9IGxlZnQpOw0KICAgIEVYUFJFU1NJT05fRU5ELnB1c2goSU5WRVJTRVNbbGVmdF0gPSByaXRlKTsNCiAgfQ0KICBFWFBSRVNTSU9OX0NMT1NFID0gWydDQVRDSCcsICdXSEVOJywgJ0VMU0UnLCAnRklOQUxMWSddLmNvbmNhdChFWFBSRVNTSU9OX0VORCk7DQogIElNUExJQ0lUX0ZVTkMgPSBbJ0lERU5USUZJRVInLCAnU1VQRVInLCAnKScsICdDQUxMX0VORCcsICddJywgJ0lOREVYX0VORCcsICdAJywgJ1RISVMnXTsNCiAgSU1QTElDSVRfQ0FMTCA9IFsnSURFTlRJRklFUicsICdOVU1CRVInLCAnU1RSSU5HJywgJ0pTJywgJ1JFR0VYJywgJ05FVycsICdQQVJBTV9TVEFSVCcsICdDTEFTUycsICdJRicsICdUUlknLCAnU1dJVENIJywgJ1RISVMnLCAnQk9PTCcsICdVTkFSWScsICdTVVBFUicsICdAJywgJy0+JywgJz0+JywgJ1snLCAnKCcsICd7JywgJy0tJywgJysrJ107DQogIElNUExJQ0lUX1VOU1BBQ0VEX0NBTEwgPSBbJysnLCAnLSddOw0KICBJTVBMSUNJVF9CTE9DSyA9IFsnLT4nLCAnPT4nLCAneycsICdbJywgJywnXTsNCiAgSU1QTElDSVRfRU5EID0gWydQT1NUX0lGJywgJ0ZPUicsICdXSElMRScsICdVTlRJTCcsICdXSEVOJywgJ0JZJywgJ0xPT1AnLCAnVEVSTUlOQVRPUiddOw0KICBTSU5HTEVfTElORVJTID0gWydFTFNFJywgJy0+JywgJz0+JywgJ1RSWScsICdGSU5BTExZJywgJ1RIRU4nXTsNCiAgU0lOR0xFX0NMT1NFUlMgPSBbJ1RFUk1JTkFUT1InLCAnQ0FUQ0gnLCAnRklOQUxMWScsICdFTFNFJywgJ09VVERFTlQnLCAnTEVBRElOR19XSEVOJ107DQogIExJTkVCUkVBS1MgPSBbJ1RFUk1JTkFUT1InLCAnSU5ERU5UJywgJ09VVERFTlQnXTsNCn0pOw0KLyoqDQogKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVyZW15IEFzaGtlbmFzDQogKg0KICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24NCiAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uDQogKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0DQogKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwNCiAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCiAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nDQogKiBjb25kaXRpb25zOg0KICogDQogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQogKiANCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTDQogKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORA0KICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQNCiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLA0KICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HDQogKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SDQogKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQogKi8NCg0KZGVmaW5lKCdhY2UvbW9kZS9jb2ZmZWUvaGVscGVycycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQogICAgDQogIHZhciBleHRlbmQsIGZsYXR0ZW47DQogIGV4cG9ydHMuc3RhcnRzID0gZnVuY3Rpb24oc3RyaW5nLCBsaXRlcmFsLCBzdGFydCkgew0KICAgIHJldHVybiBsaXRlcmFsID09PSBzdHJpbmcuc3Vic3RyKHN0YXJ0LCBsaXRlcmFsLmxlbmd0aCk7DQogIH07DQogIGV4cG9ydHMuZW5kcyA9IGZ1bmN0aW9uKHN0cmluZywgbGl0ZXJhbCwgYmFjaykgew0KICAgIHZhciBsZW47DQogICAgbGVuID0gbGl0ZXJhbC5sZW5ndGg7DQogICAgcmV0dXJuIGxpdGVyYWwgPT09IHN0cmluZy5zdWJzdHIoc3RyaW5nLmxlbmd0aCAtIGxlbiAtIChiYWNrIHx8IDApLCBsZW4pOw0KICB9Ow0KICBleHBvcnRzLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkgew0KICAgIHZhciBpdGVtLCBfaSwgX2xlbiwgX3Jlc3VsdHM7DQogICAgX3Jlc3VsdHMgPSBbXTsNCiAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGFycmF5Lmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICBpdGVtID0gYXJyYXlbX2ldOw0KICAgICAgaWYgKGl0ZW0pIHsNCiAgICAgICAgX3Jlc3VsdHMucHVzaChpdGVtKTsNCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIF9yZXN1bHRzOw0KICB9Ow0KICBleHBvcnRzLmNvdW50ID0gZnVuY3Rpb24oc3RyaW5nLCBzdWJzdHIpIHsNCiAgICB2YXIgbnVtLCBwb3M7DQogICAgbnVtID0gcG9zID0gMDsNCiAgICBpZiAoIXN1YnN0ci5sZW5ndGgpIHsNCiAgICAgIHJldHVybiAxIC8gMDsNCiAgICB9DQogICAgd2hpbGUgKHBvcyA9IDEgKyBzdHJpbmcuaW5kZXhPZihzdWJzdHIsIHBvcykpIHsNCiAgICAgIG51bSsrOw0KICAgIH0NCiAgICByZXR1cm4gbnVtOw0KICB9Ow0KICBleHBvcnRzLm1lcmdlID0gZnVuY3Rpb24ob3B0aW9ucywgb3ZlcnJpZGVzKSB7DQogICAgcmV0dXJuIGV4dGVuZChleHRlbmQoe30sIG9wdGlvbnMpLCBvdmVycmlkZXMpOw0KICB9Ow0KICBleHRlbmQgPSBleHBvcnRzLmV4dGVuZCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydGllcykgew0KICAgIHZhciBrZXksIHZhbDsNCiAgICBmb3IgKGtleSBpbiBwcm9wZXJ0aWVzKSB7DQogICAgICB2YWwgPSBwcm9wZXJ0aWVzW2tleV07DQogICAgICBvYmplY3Rba2V5XSA9IHZhbDsNCiAgICB9DQogICAgcmV0dXJuIG9iamVjdDsNCiAgfTsNCiAgZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5KSB7DQogICAgdmFyIGVsZW1lbnQsIGZsYXR0ZW5lZCwgX2ksIF9sZW47DQogICAgZmxhdHRlbmVkID0gW107DQogICAgZm9yIChfaSA9IDAsIF9sZW4gPSBhcnJheS5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgew0KICAgICAgZWxlbWVudCA9IGFycmF5W19pXTsNCiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQXJyYXkpIHsNCiAgICAgICAgZmxhdHRlbmVkID0gZmxhdHRlbmVkLmNvbmNhdChmbGF0dGVuKGVsZW1lbnQpKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGZsYXR0ZW5lZC5wdXNoKGVsZW1lbnQpOw0KICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gZmxhdHRlbmVkOw0KICB9Ow0KICBleHBvcnRzLmRlbCA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7DQogICAgdmFyIHZhbDsNCiAgICB2YWwgPSBvYmpba2V5XTsNCiAgICBkZWxldGUgb2JqW2tleV07DQogICAgcmV0dXJuIHZhbDsNCiAgfTsNCiAgZXhwb3J0cy5sYXN0ID0gZnVuY3Rpb24oYXJyYXksIGJhY2spIHsNCiAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gKGJhY2sgfHwgMCkgLSAxXTsNCiAgfTsNCn0pOw0KLyoqDQogKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVyZW15IEFzaGtlbmFzDQogKg0KICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24NCiAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uDQogKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0DQogKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwNCiAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCiAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nDQogKiBjb25kaXRpb25zOg0KICogDQogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQogKiANCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTDQogKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORA0KICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQNCiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLA0KICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HDQogKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SDQogKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQogKi8NCg0KZGVmaW5lKCdhY2UvbW9kZS9jb2ZmZWUvcGFyc2VyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCg0KLyogSmlzb24gZ2VuZXJhdGVkIHBhcnNlciAqLw0KdmFyIHBhcnNlciA9IHt0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7IH0sDQp5eToge30sDQpzeW1ib2xzXzogeyJlcnJvciI6MiwiUm9vdCI6MywiQm9keSI6NCwiQmxvY2siOjUsIlRFUk1JTkFUT1IiOjYsIkxpbmUiOjcsIkV4cHJlc3Npb24iOjgsIlN0YXRlbWVudCI6OSwiUmV0dXJuIjoxMCwiVGhyb3ciOjExLCJDb21tZW50IjoxMiwiU1RBVEVNRU5UIjoxMywiVmFsdWUiOjE0LCJJbnZvY2F0aW9uIjoxNSwiQ29kZSI6MTYsIk9wZXJhdGlvbiI6MTcsIkFzc2lnbiI6MTgsIklmIjoxOSwiVHJ5IjoyMCwiV2hpbGUiOjIxLCJGb3IiOjIyLCJTd2l0Y2giOjIzLCJDbGFzcyI6MjQsIklOREVOVCI6MjUsIk9VVERFTlQiOjI2LCJJZGVudGlmaWVyIjoyNywiSURFTlRJRklFUiI6MjgsIkFscGhhTnVtZXJpYyI6MjksIk5VTUJFUiI6MzAsIlNUUklORyI6MzEsIkxpdGVyYWwiOjMyLCJKUyI6MzMsIlJFR0VYIjozNCwiQk9PTCI6MzUsIkFzc2lnbmFibGUiOjM2LCI9IjozNywiQXNzaWduT2JqIjozOCwiT2JqQXNzaWduYWJsZSI6MzksIjoiOjQwLCJUaGlzUHJvcGVydHkiOjQxLCJSRVRVUk4iOjQyLCJIRVJFQ09NTUVOVCI6NDMsIlBBUkFNX1NUQVJUIjo0NCwiUGFyYW1MaXN0Ijo0NSwiUEFSQU1fRU5EIjo0NiwiRnVuY0dseXBoIjo0NywiLT4iOjQ4LCI9PiI6NDksIk9wdENvbW1hIjo1MCwiLCI6NTEsIlBhcmFtIjo1MiwiUGFyYW1WYXIiOjUzLCIuLi4iOjU0LCJBcnJheSI6NTUsIk9iamVjdCI6NTYsIlNwbGF0Ijo1NywiU2ltcGxlQXNzaWduYWJsZSI6NTgsIkFjY2Vzc29yIjo1OSwiUGFyZW50aGV0aWNhbCI6NjAsIlJhbmdlIjo2MSwiVGhpcyI6NjIsIi4iOjYzLCI/LiI6NjQsIjo6Ijo2NSwiSW5kZXgiOjY2LCJJTkRFWF9TVEFSVCI6NjcsIkluZGV4VmFsdWUiOjY4LCJJTkRFWF9FTkQiOjY5LCJJTkRFWF9TT0FLIjo3MCwiSU5ERVhfUFJPVE8iOjcxLCJTbGljZSI6NzIsInsiOjczLCJBc3NpZ25MaXN0Ijo3NCwifSI6NzUsIkNMQVNTIjo3NiwiRVhURU5EUyI6NzcsIk9wdEZ1bmNFeGlzdCI6NzgsIkFyZ3VtZW50cyI6NzksIlNVUEVSIjo4MCwiRlVOQ19FWElTVCI6ODEsIkNBTExfU1RBUlQiOjgyLCJDQUxMX0VORCI6ODMsIkFyZ0xpc3QiOjg0LCJUSElTIjo4NSwiQCI6ODYsIlsiOjg3LCJdIjo4OCwiUmFuZ2VEb3RzIjo4OSwiLi4iOjkwLCJBcmciOjkxLCJTaW1wbGVBcmdzIjo5MiwiVFJZIjo5MywiQ2F0Y2giOjk0LCJGSU5BTExZIjo5NSwiQ0FUQ0giOjk2LCJUSFJPVyI6OTcsIigiOjk4LCIpIjo5OSwiV2hpbGVTb3VyY2UiOjEwMCwiV0hJTEUiOjEwMSwiV0hFTiI6MTAyLCJVTlRJTCI6MTAzLCJMb29wIjoxMDQsIkxPT1AiOjEwNSwiRm9yQm9keSI6MTA2LCJGT1IiOjEwNywiRm9yU3RhcnQiOjEwOCwiRm9yU291cmNlIjoxMDksIkZvclZhcmlhYmxlcyI6MTEwLCJPV04iOjExMSwiRm9yVmFsdWUiOjExMiwiRk9SSU4iOjExMywiRk9ST0YiOjExNCwiQlkiOjExNSwiU1dJVENIIjoxMTYsIldoZW5zIjoxMTcsIkVMU0UiOjExOCwiV2hlbiI6MTE5LCJMRUFESU5HX1dIRU4iOjEyMCwiSWZCbG9jayI6MTIxLCJJRiI6MTIyLCJQT1NUX0lGIjoxMjMsIlVOQVJZIjoxMjQsIi0iOjEyNSwiKyI6MTI2LCItLSI6MTI3LCIrKyI6MTI4LCI/IjoxMjksIk1BVEgiOjEzMCwiU0hJRlQiOjEzMSwiQ09NUEFSRSI6MTMyLCJMT0dJQyI6MTMzLCJSRUxBVElPTiI6MTM0LCJDT01QT1VORF9BU1NJR04iOjEzNSwiJGFjY2VwdCI6MCwiJGVuZCI6MX0sDQp0ZXJtaW5hbHNfOiB7MjoiZXJyb3IiLDY6IlRFUk1JTkFUT1IiLDEzOiJTVEFURU1FTlQiLDI1OiJJTkRFTlQiLDI2OiJPVVRERU5UIiwyODoiSURFTlRJRklFUiIsMzA6Ik5VTUJFUiIsMzE6IlNUUklORyIsMzM6IkpTIiwzNDoiUkVHRVgiLDM1OiJCT09MIiwzNzoiPSIsNDA6IjoiLDQyOiJSRVRVUk4iLDQzOiJIRVJFQ09NTUVOVCIsNDQ6IlBBUkFNX1NUQVJUIiw0NjoiUEFSQU1fRU5EIiw0ODoiLT4iLDQ5OiI9PiIsNTE6IiwiLDU0OiIuLi4iLDYzOiIuIiw2NDoiPy4iLDY1OiI6OiIsNjc6IklOREVYX1NUQVJUIiw2OToiSU5ERVhfRU5EIiw3MDoiSU5ERVhfU09BSyIsNzE6IklOREVYX1BST1RPIiw3MzoieyIsNzU6In0iLDc2OiJDTEFTUyIsNzc6IkVYVEVORFMiLDgwOiJTVVBFUiIsODE6IkZVTkNfRVhJU1QiLDgyOiJDQUxMX1NUQVJUIiw4MzoiQ0FMTF9FTkQiLDg1OiJUSElTIiw4NjoiQCIsODc6IlsiLDg4OiJdIiw5MDoiLi4iLDkzOiJUUlkiLDk1OiJGSU5BTExZIiw5NjoiQ0FUQ0giLDk3OiJUSFJPVyIsOTg6IigiLDk5OiIpIiwxMDE6IldISUxFIiwxMDI6IldIRU4iLDEwMzoiVU5USUwiLDEwNToiTE9PUCIsMTA3OiJGT1IiLDExMToiT1dOIiwxMTM6IkZPUklOIiwxMTQ6IkZPUk9GIiwxMTU6IkJZIiwxMTY6IlNXSVRDSCIsMTE4OiJFTFNFIiwxMjA6IkxFQURJTkdfV0hFTiIsMTIyOiJJRiIsMTIzOiJQT1NUX0lGIiwxMjQ6IlVOQVJZIiwxMjU6Ii0iLDEyNjoiKyIsMTI3OiItLSIsMTI4OiIrKyIsMTI5OiI/IiwxMzA6Ik1BVEgiLDEzMToiU0hJRlQiLDEzMjoiQ09NUEFSRSIsMTMzOiJMT0dJQyIsMTM0OiJSRUxBVElPTiIsMTM1OiJDT01QT1VORF9BU1NJR04ifSwNCnByb2R1Y3Rpb25zXzogWzAsWzMsMF0sWzMsMV0sWzMsMl0sWzQsMV0sWzQsM10sWzQsMl0sWzcsMV0sWzcsMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzgsMV0sWzUsMl0sWzUsM10sWzI3LDFdLFsyOSwxXSxbMjksMV0sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFsxOCwzXSxbMTgsNV0sWzM4LDFdLFszOCwzXSxbMzgsNV0sWzM4LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFsxMCwyXSxbMTAsMV0sWzEyLDFdLFsxNiw1XSxbMTYsMl0sWzQ3LDFdLFs0NywxXSxbNTAsMF0sWzUwLDFdLFs0NSwwXSxbNDUsMV0sWzQ1LDNdLFs1MiwxXSxbNTIsMl0sWzUyLDNdLFs1MywxXSxbNTMsMV0sWzUzLDFdLFs1MywxXSxbNTcsMl0sWzU4LDFdLFs1OCwyXSxbNTgsMl0sWzU4LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdLFsxNCwxXSxbMTQsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV0sWzU5LDJdLFs1OSwyXSxbNTksMl0sWzU5LDFdLFs1OSwxXSxbNjYsM10sWzY2LDJdLFs2NiwyXSxbNjgsMV0sWzY4LDFdLFs1Niw0XSxbNzQsMF0sWzc0LDFdLFs3NCwzXSxbNzQsNF0sWzc0LDZdLFsyNCwxXSxbMjQsMl0sWzI0LDNdLFsyNCw0XSxbMjQsMl0sWzI0LDNdLFsyNCw0XSxbMjQsNV0sWzE1LDNdLFsxNSwzXSxbMTUsMV0sWzE1LDJdLFs3OCwwXSxbNzgsMV0sWzc5LDJdLFs3OSw0XSxbNjIsMV0sWzYyLDFdLFs0MSwyXSxbNTUsMl0sWzU1LDRdLFs4OSwxXSxbODksMV0sWzYxLDVdLFs3MiwzXSxbNzIsMl0sWzcyLDJdLFs4NCwxXSxbODQsM10sWzg0LDRdLFs4NCw0XSxbODQsNl0sWzkxLDFdLFs5MSwxXSxbOTIsMV0sWzkyLDNdLFsyMCwyXSxbMjAsM10sWzIwLDRdLFsyMCw1XSxbOTQsM10sWzExLDJdLFs2MCwzXSxbNjAsNV0sWzEwMCwyXSxbMTAwLDRdLFsxMDAsMl0sWzEwMCw0XSxbMjEsMl0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzEwNCwyXSxbMTA0LDJdLFsyMiwyXSxbMjIsMl0sWzIyLDJdLFsxMDYsMl0sWzEwNiwyXSxbMTA4LDJdLFsxMDgsM10sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMCwxXSxbMTEwLDNdLFsxMDksMl0sWzEwOSwyXSxbMTA5LDRdLFsxMDksNF0sWzEwOSw0XSxbMTA5LDZdLFsxMDksNl0sWzIzLDVdLFsyMyw3XSxbMjMsNF0sWzIzLDZdLFsxMTcsMV0sWzExNywyXSxbMTE5LDNdLFsxMTksNF0sWzEyMSwzXSxbMTIxLDVdLFsxOSwxXSxbMTksM10sWzE5LDNdLFsxOSwzXSxbMTcsMl0sWzE3LDJdLFsxNywyXSxbMTcsMl0sWzE3LDJdLFsxNywyXSxbMTcsMl0sWzE3LDJdLFsxNywzXSxbMTcsM10sWzE3LDNdLFsxNywzXSxbMTcsM10sWzE3LDNdLFsxNywzXSxbMTcsM10sWzE3LDVdLFsxNywzXV0sDQpwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LHl5bGVuZyx5eWxpbmVubyx5eSx5eXN0YXRlLCQkLF8kKSB7DQoNCnZhciAkMCA9ICQkLmxlbmd0aCAtIDE7DQpzd2l0Y2ggKHl5c3RhdGUpIHsNCmNhc2UgMTpyZXR1cm4gdGhpcy4kID0gbmV3IHl5LkJsb2NrOw0KYnJlYWs7DQpjYXNlIDI6cmV0dXJuIHRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAzOnJldHVybiB0aGlzLiQgPSAkJFskMC0xXTsNCmJyZWFrOw0KY2FzZSA0OnRoaXMuJCA9IHl5LkJsb2NrLndyYXAoWyQkWyQwXV0pOw0KYnJlYWs7DQpjYXNlIDU6dGhpcy4kID0gJCRbJDAtMl0ucHVzaCgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDY6dGhpcy4kID0gJCRbJDAtMV07DQpicmVhazsNCmNhc2UgNzp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgODp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgOTp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgMTA6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDExOnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAxMjp0aGlzLiQgPSBuZXcgeXkuTGl0ZXJhbCgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDEzOnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAxNDp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgMTU6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDE2OnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAxNzp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgMTg6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDE5OnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAyMDp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgMjE6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDIyOnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAyMzp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgMjQ6dGhpcy4kID0gbmV3IHl5LkJsb2NrOw0KYnJlYWs7DQpjYXNlIDI1OnRoaXMuJCA9ICQkWyQwLTFdOw0KYnJlYWs7DQpjYXNlIDI2OnRoaXMuJCA9IG5ldyB5eS5MaXRlcmFsKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgMjc6dGhpcy4kID0gbmV3IHl5LkxpdGVyYWwoJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSAyODp0aGlzLiQgPSBuZXcgeXkuTGl0ZXJhbCgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDI5OnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAzMDp0aGlzLiQgPSBuZXcgeXkuTGl0ZXJhbCgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDMxOnRoaXMuJCA9IG5ldyB5eS5MaXRlcmFsKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgMzI6dGhpcy4kID0gKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHZhbDsNCiAgICAgICAgdmFsID0gbmV3IHl5LkxpdGVyYWwoJCRbJDBdKTsNCiAgICAgICAgaWYgKCQkWyQwXSA9PT0gJ3VuZGVmaW5lZCcpIHsNCiAgICAgICAgICB2YWwuaXNVbmRlZmluZWQgPSB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB2YWw7DQogICAgICB9KCkpOw0KYnJlYWs7DQpjYXNlIDMzOnRoaXMuJCA9IG5ldyB5eS5Bc3NpZ24oJCRbJDAtMl0sICQkWyQwXSk7DQpicmVhazsNCmNhc2UgMzQ6dGhpcy4kID0gbmV3IHl5LkFzc2lnbigkJFskMC00XSwgJCRbJDAtMV0pOw0KYnJlYWs7DQpjYXNlIDM1OnRoaXMuJCA9IG5ldyB5eS5WYWx1ZSgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDM2OnRoaXMuJCA9IG5ldyB5eS5Bc3NpZ24obmV3IHl5LlZhbHVlKCQkWyQwLTJdKSwgJCRbJDBdLCAnb2JqZWN0Jyk7DQpicmVhazsNCmNhc2UgMzc6dGhpcy4kID0gbmV3IHl5LkFzc2lnbihuZXcgeXkuVmFsdWUoJCRbJDAtNF0pLCAkJFskMC0xXSwgJ29iamVjdCcpOw0KYnJlYWs7DQpjYXNlIDM4OnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAzOTp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgNDA6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDQxOnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSA0Mjp0aGlzLiQgPSBuZXcgeXkuUmV0dXJuKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgNDM6dGhpcy4kID0gbmV3IHl5LlJldHVybjsNCmJyZWFrOw0KY2FzZSA0NDp0aGlzLiQgPSBuZXcgeXkuQ29tbWVudCgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDQ1OnRoaXMuJCA9IG5ldyB5eS5Db2RlKCQkWyQwLTNdLCAkJFskMF0sICQkWyQwLTFdKTsNCmJyZWFrOw0KY2FzZSA0Njp0aGlzLiQgPSBuZXcgeXkuQ29kZShbXSwgJCRbJDBdLCAkJFskMC0xXSk7DQpicmVhazsNCmNhc2UgNDc6dGhpcy4kID0gJ2Z1bmMnOw0KYnJlYWs7DQpjYXNlIDQ4OnRoaXMuJCA9ICdib3VuZGZ1bmMnOw0KYnJlYWs7DQpjYXNlIDQ5OnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSA1MDp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgNTE6dGhpcy4kID0gW107DQpicmVhazsNCmNhc2UgNTI6dGhpcy4kID0gWyQkWyQwXV07DQpicmVhazsNCmNhc2UgNTM6dGhpcy4kID0gJCRbJDAtMl0uY29uY2F0KCQkWyQwXSk7DQpicmVhazsNCmNhc2UgNTQ6dGhpcy4kID0gbmV3IHl5LlBhcmFtKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgNTU6dGhpcy4kID0gbmV3IHl5LlBhcmFtKCQkWyQwLTFdLCBudWxsLCB0cnVlKTsNCmJyZWFrOw0KY2FzZSA1Njp0aGlzLiQgPSBuZXcgeXkuUGFyYW0oJCRbJDAtMl0sICQkWyQwXSk7DQpicmVhazsNCmNhc2UgNTc6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDU4OnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSA1OTp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgNjA6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDYxOnRoaXMuJCA9IG5ldyB5eS5TcGxhdCgkJFskMC0xXSk7DQpicmVhazsNCmNhc2UgNjI6dGhpcy4kID0gbmV3IHl5LlZhbHVlKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgNjM6dGhpcy4kID0gJCRbJDAtMV0ucHVzaCgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDY0OnRoaXMuJCA9IG5ldyB5eS5WYWx1ZSgkJFskMC0xXSwgWyQkWyQwXV0pOw0KYnJlYWs7DQpjYXNlIDY1OnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSA2Njp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgNjc6dGhpcy4kID0gbmV3IHl5LlZhbHVlKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgNjg6dGhpcy4kID0gbmV3IHl5LlZhbHVlKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgNjk6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDcwOnRoaXMuJCA9IG5ldyB5eS5WYWx1ZSgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDcxOnRoaXMuJCA9IG5ldyB5eS5WYWx1ZSgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDcyOnRoaXMuJCA9IG5ldyB5eS5WYWx1ZSgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDczOnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSA3NDp0aGlzLiQgPSBuZXcgeXkuQWNjZXNzKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgNzU6dGhpcy4kID0gbmV3IHl5LkFjY2VzcygkJFskMF0sICdzb2FrJyk7DQpicmVhazsNCmNhc2UgNzY6dGhpcy4kID0gbmV3IHl5LkFjY2VzcygkJFskMF0sICdwcm90bycpOw0KYnJlYWs7DQpjYXNlIDc3OnRoaXMuJCA9IG5ldyB5eS5BY2Nlc3MobmV3IHl5LkxpdGVyYWwoJ3Byb3RvdHlwZScpKTsNCmJyZWFrOw0KY2FzZSA3ODp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgNzk6dGhpcy4kID0gJCRbJDAtMV07DQpicmVhazsNCmNhc2UgODA6dGhpcy4kID0geXkuZXh0ZW5kKCQkWyQwXSwgew0KICAgICAgICAgIHNvYWs6IHRydWUNCiAgICAgICAgfSk7DQpicmVhazsNCmNhc2UgODE6dGhpcy4kID0geXkuZXh0ZW5kKCQkWyQwXSwgew0KICAgICAgICAgIHByb3RvOiB0cnVlDQogICAgICAgIH0pOw0KYnJlYWs7DQpjYXNlIDgyOnRoaXMuJCA9IG5ldyB5eS5JbmRleCgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDgzOnRoaXMuJCA9IG5ldyB5eS5TbGljZSgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDg0OnRoaXMuJCA9IG5ldyB5eS5PYmooJCRbJDAtMl0sICQkWyQwLTNdLmdlbmVyYXRlZCk7DQpicmVhazsNCmNhc2UgODU6dGhpcy4kID0gW107DQpicmVhazsNCmNhc2UgODY6dGhpcy4kID0gWyQkWyQwXV07DQpicmVhazsNCmNhc2UgODc6dGhpcy4kID0gJCRbJDAtMl0uY29uY2F0KCQkWyQwXSk7DQpicmVhazsNCmNhc2UgODg6dGhpcy4kID0gJCRbJDAtM10uY29uY2F0KCQkWyQwXSk7DQpicmVhazsNCmNhc2UgODk6dGhpcy4kID0gJCRbJDAtNV0uY29uY2F0KCQkWyQwLTJdKTsNCmJyZWFrOw0KY2FzZSA5MDp0aGlzLiQgPSBuZXcgeXkuQ2xhc3M7DQpicmVhazsNCmNhc2UgOTE6dGhpcy4kID0gbmV3IHl5LkNsYXNzKG51bGwsIG51bGwsICQkWyQwXSk7DQpicmVhazsNCmNhc2UgOTI6dGhpcy4kID0gbmV3IHl5LkNsYXNzKG51bGwsICQkWyQwXSk7DQpicmVhazsNCmNhc2UgOTM6dGhpcy4kID0gbmV3IHl5LkNsYXNzKG51bGwsICQkWyQwLTFdLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDk0OnRoaXMuJCA9IG5ldyB5eS5DbGFzcygkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDk1OnRoaXMuJCA9IG5ldyB5eS5DbGFzcygkJFskMC0xXSwgbnVsbCwgJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSA5Njp0aGlzLiQgPSBuZXcgeXkuQ2xhc3MoJCRbJDAtMl0sICQkWyQwXSk7DQpicmVhazsNCmNhc2UgOTc6dGhpcy4kID0gbmV3IHl5LkNsYXNzKCQkWyQwLTNdLCAkJFskMC0xXSwgJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSA5ODp0aGlzLiQgPSBuZXcgeXkuQ2FsbCgkJFskMC0yXSwgJCRbJDBdLCAkJFskMC0xXSk7DQpicmVhazsNCmNhc2UgOTk6dGhpcy4kID0gbmV3IHl5LkNhbGwoJCRbJDAtMl0sICQkWyQwXSwgJCRbJDAtMV0pOw0KYnJlYWs7DQpjYXNlIDEwMDp0aGlzLiQgPSBuZXcgeXkuQ2FsbCgnc3VwZXInLCBbbmV3IHl5LlNwbGF0KG5ldyB5eS5MaXRlcmFsKCdhcmd1bWVudHMnKSldKTsNCmJyZWFrOw0KY2FzZSAxMDE6dGhpcy4kID0gbmV3IHl5LkNhbGwoJ3N1cGVyJywgJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSAxMDI6dGhpcy4kID0gZmFsc2U7DQpicmVhazsNCmNhc2UgMTAzOnRoaXMuJCA9IHRydWU7DQpicmVhazsNCmNhc2UgMTA0OnRoaXMuJCA9IFtdOw0KYnJlYWs7DQpjYXNlIDEwNTp0aGlzLiQgPSAkJFskMC0yXTsNCmJyZWFrOw0KY2FzZSAxMDY6dGhpcy4kID0gbmV3IHl5LlZhbHVlKG5ldyB5eS5MaXRlcmFsKCd0aGlzJykpOw0KYnJlYWs7DQpjYXNlIDEwNzp0aGlzLiQgPSBuZXcgeXkuVmFsdWUobmV3IHl5LkxpdGVyYWwoJ3RoaXMnKSk7DQpicmVhazsNCmNhc2UgMTA4OnRoaXMuJCA9IG5ldyB5eS5WYWx1ZShuZXcgeXkuTGl0ZXJhbCgndGhpcycpLCBbbmV3IHl5LkFjY2VzcygkJFskMF0pXSwgJ3RoaXMnKTsNCmJyZWFrOw0KY2FzZSAxMDk6dGhpcy4kID0gbmV3IHl5LkFycihbXSk7DQpicmVhazsNCmNhc2UgMTEwOnRoaXMuJCA9IG5ldyB5eS5BcnIoJCRbJDAtMl0pOw0KYnJlYWs7DQpjYXNlIDExMTp0aGlzLiQgPSAnaW5jbHVzaXZlJzsNCmJyZWFrOw0KY2FzZSAxMTI6dGhpcy4kID0gJ2V4Y2x1c2l2ZSc7DQpicmVhazsNCmNhc2UgMTEzOnRoaXMuJCA9IG5ldyB5eS5SYW5nZSgkJFskMC0zXSwgJCRbJDAtMV0sICQkWyQwLTJdKTsNCmJyZWFrOw0KY2FzZSAxMTQ6dGhpcy4kID0gbmV3IHl5LlJhbmdlKCQkWyQwLTJdLCAkJFskMF0sICQkWyQwLTFdKTsNCmJyZWFrOw0KY2FzZSAxMTU6dGhpcy4kID0gbmV3IHl5LlJhbmdlKCQkWyQwLTFdLCBudWxsLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDExNjp0aGlzLiQgPSBuZXcgeXkuUmFuZ2UobnVsbCwgJCRbJDBdLCAkJFskMC0xXSk7DQpicmVhazsNCmNhc2UgMTE3OnRoaXMuJCA9IFskJFskMF1dOw0KYnJlYWs7DQpjYXNlIDExODp0aGlzLiQgPSAkJFskMC0yXS5jb25jYXQoJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSAxMTk6dGhpcy4kID0gJCRbJDAtM10uY29uY2F0KCQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTIwOnRoaXMuJCA9ICQkWyQwLTJdOw0KYnJlYWs7DQpjYXNlIDEyMTp0aGlzLiQgPSAkJFskMC01XS5jb25jYXQoJCRbJDAtMl0pOw0KYnJlYWs7DQpjYXNlIDEyMjp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgMTIzOnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAxMjQ6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDEyNTp0aGlzLiQgPSBbXS5jb25jYXQoJCRbJDAtMl0sICQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTI2OnRoaXMuJCA9IG5ldyB5eS5UcnkoJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSAxMjc6dGhpcy4kID0gbmV3IHl5LlRyeSgkJFskMC0xXSwgJCRbJDBdWzBdLCAkJFskMF1bMV0pOw0KYnJlYWs7DQpjYXNlIDEyODp0aGlzLiQgPSBuZXcgeXkuVHJ5KCQkWyQwLTJdLCBudWxsLCBudWxsLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDEyOTp0aGlzLiQgPSBuZXcgeXkuVHJ5KCQkWyQwLTNdLCAkJFskMC0yXVswXSwgJCRbJDAtMl1bMV0sICQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTMwOnRoaXMuJCA9IFskJFskMC0xXSwgJCRbJDBdXTsNCmJyZWFrOw0KY2FzZSAxMzE6dGhpcy4kID0gbmV3IHl5LlRocm93KCQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTMyOnRoaXMuJCA9IG5ldyB5eS5QYXJlbnMoJCRbJDAtMV0pOw0KYnJlYWs7DQpjYXNlIDEzMzp0aGlzLiQgPSBuZXcgeXkuUGFyZW5zKCQkWyQwLTJdKTsNCmJyZWFrOw0KY2FzZSAxMzQ6dGhpcy4kID0gbmV3IHl5LldoaWxlKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTM1OnRoaXMuJCA9IG5ldyB5eS5XaGlsZSgkJFskMC0yXSwgew0KICAgICAgICAgIGd1YXJkOiAkJFskMF0NCiAgICAgICAgfSk7DQpicmVhazsNCmNhc2UgMTM2OnRoaXMuJCA9IG5ldyB5eS5XaGlsZSgkJFskMF0sIHsNCiAgICAgICAgICBpbnZlcnQ6IHRydWUNCiAgICAgICAgfSk7DQpicmVhazsNCmNhc2UgMTM3OnRoaXMuJCA9IG5ldyB5eS5XaGlsZSgkJFskMC0yXSwgew0KICAgICAgICAgIGludmVydDogdHJ1ZSwNCiAgICAgICAgICBndWFyZDogJCRbJDBdDQogICAgICAgIH0pOw0KYnJlYWs7DQpjYXNlIDEzODp0aGlzLiQgPSAkJFskMC0xXS5hZGRCb2R5KCQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTM5OnRoaXMuJCA9ICQkWyQwXS5hZGRCb2R5KHl5LkJsb2NrLndyYXAoWyQkWyQwLTFdXSkpOw0KYnJlYWs7DQpjYXNlIDE0MDp0aGlzLiQgPSAkJFskMF0uYWRkQm9keSh5eS5CbG9jay53cmFwKFskJFskMC0xXV0pKTsNCmJyZWFrOw0KY2FzZSAxNDE6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDE0Mjp0aGlzLiQgPSBuZXcgeXkuV2hpbGUobmV3IHl5LkxpdGVyYWwoJ3RydWUnKSkuYWRkQm9keSgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE0Mzp0aGlzLiQgPSBuZXcgeXkuV2hpbGUobmV3IHl5LkxpdGVyYWwoJ3RydWUnKSkuYWRkQm9keSh5eS5CbG9jay53cmFwKFskJFskMF1dKSk7DQpicmVhazsNCmNhc2UgMTQ0OnRoaXMuJCA9IG5ldyB5eS5Gb3IoJCRbJDAtMV0sICQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTQ1OnRoaXMuJCA9IG5ldyB5eS5Gb3IoJCRbJDAtMV0sICQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTQ2OnRoaXMuJCA9IG5ldyB5eS5Gb3IoJCRbJDBdLCAkJFskMC0xXSk7DQpicmVhazsNCmNhc2UgMTQ3OnRoaXMuJCA9IHsNCiAgICAgICAgICBzb3VyY2U6IG5ldyB5eS5WYWx1ZSgkJFskMF0pDQogICAgICAgIH07DQpicmVhazsNCmNhc2UgMTQ4OnRoaXMuJCA9IChmdW5jdGlvbiAoKSB7DQogICAgICAgICQkWyQwXS5vd24gPSAkJFskMC0xXS5vd247DQogICAgICAgICQkWyQwXS5uYW1lID0gJCRbJDAtMV1bMF07DQogICAgICAgICQkWyQwXS5pbmRleCA9ICQkWyQwLTFdWzFdOw0KICAgICAgICByZXR1cm4gJCRbJDBdOw0KICAgICAgfSgpKTsNCmJyZWFrOw0KY2FzZSAxNDk6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDE1MDp0aGlzLiQgPSAoZnVuY3Rpb24gKCkgew0KICAgICAgICAkJFskMF0ub3duID0gdHJ1ZTsNCiAgICAgICAgcmV0dXJuICQkWyQwXTsNCiAgICAgIH0oKSk7DQpicmVhazsNCmNhc2UgMTUxOnRoaXMuJCA9ICQkWyQwXTsNCmJyZWFrOw0KY2FzZSAxNTI6dGhpcy4kID0gbmV3IHl5LlZhbHVlKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTUzOnRoaXMuJCA9IG5ldyB5eS5WYWx1ZSgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE1NDp0aGlzLiQgPSBbJCRbJDBdXTsNCmJyZWFrOw0KY2FzZSAxNTU6dGhpcy4kID0gWyQkWyQwLTJdLCAkJFskMF1dOw0KYnJlYWs7DQpjYXNlIDE1Njp0aGlzLiQgPSB7DQogICAgICAgICAgc291cmNlOiAkJFskMF0NCiAgICAgICAgfTsNCmJyZWFrOw0KY2FzZSAxNTc6dGhpcy4kID0gew0KICAgICAgICAgIHNvdXJjZTogJCRbJDBdLA0KICAgICAgICAgIG9iamVjdDogdHJ1ZQ0KICAgICAgICB9Ow0KYnJlYWs7DQpjYXNlIDE1ODp0aGlzLiQgPSB7DQogICAgICAgICAgc291cmNlOiAkJFskMC0yXSwNCiAgICAgICAgICBndWFyZDogJCRbJDBdDQogICAgICAgIH07DQpicmVhazsNCmNhc2UgMTU5OnRoaXMuJCA9IHsNCiAgICAgICAgICBzb3VyY2U6ICQkWyQwLTJdLA0KICAgICAgICAgIGd1YXJkOiAkJFskMF0sDQogICAgICAgICAgb2JqZWN0OiB0cnVlDQogICAgICAgIH07DQpicmVhazsNCmNhc2UgMTYwOnRoaXMuJCA9IHsNCiAgICAgICAgICBzb3VyY2U6ICQkWyQwLTJdLA0KICAgICAgICAgIHN0ZXA6ICQkWyQwXQ0KICAgICAgICB9Ow0KYnJlYWs7DQpjYXNlIDE2MTp0aGlzLiQgPSB7DQogICAgICAgICAgc291cmNlOiAkJFskMC00XSwNCiAgICAgICAgICBndWFyZDogJCRbJDAtMl0sDQogICAgICAgICAgc3RlcDogJCRbJDBdDQogICAgICAgIH07DQpicmVhazsNCmNhc2UgMTYyOnRoaXMuJCA9IHsNCiAgICAgICAgICBzb3VyY2U6ICQkWyQwLTRdLA0KICAgICAgICAgIHN0ZXA6ICQkWyQwLTJdLA0KICAgICAgICAgIGd1YXJkOiAkJFskMF0NCiAgICAgICAgfTsNCmJyZWFrOw0KY2FzZSAxNjM6dGhpcy4kID0gbmV3IHl5LlN3aXRjaCgkJFskMC0zXSwgJCRbJDAtMV0pOw0KYnJlYWs7DQpjYXNlIDE2NDp0aGlzLiQgPSBuZXcgeXkuU3dpdGNoKCQkWyQwLTVdLCAkJFskMC0zXSwgJCRbJDAtMV0pOw0KYnJlYWs7DQpjYXNlIDE2NTp0aGlzLiQgPSBuZXcgeXkuU3dpdGNoKG51bGwsICQkWyQwLTFdKTsNCmJyZWFrOw0KY2FzZSAxNjY6dGhpcy4kID0gbmV3IHl5LlN3aXRjaChudWxsLCAkJFskMC0zXSwgJCRbJDAtMV0pOw0KYnJlYWs7DQpjYXNlIDE2Nzp0aGlzLiQgPSAkJFskMF07DQpicmVhazsNCmNhc2UgMTY4OnRoaXMuJCA9ICQkWyQwLTFdLmNvbmNhdCgkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE2OTp0aGlzLiQgPSBbWyQkWyQwLTFdLCAkJFskMF1dXTsNCmJyZWFrOw0KY2FzZSAxNzA6dGhpcy4kID0gW1skJFskMC0yXSwgJCRbJDAtMV1dXTsNCmJyZWFrOw0KY2FzZSAxNzE6dGhpcy4kID0gbmV3IHl5LklmKCQkWyQwLTFdLCAkJFskMF0sIHsNCiAgICAgICAgICB0eXBlOiAkJFskMC0yXQ0KICAgICAgICB9KTsNCmJyZWFrOw0KY2FzZSAxNzI6dGhpcy4kID0gJCRbJDAtNF0uYWRkRWxzZShuZXcgeXkuSWYoJCRbJDAtMV0sICQkWyQwXSwgew0KICAgICAgICAgIHR5cGU6ICQkWyQwLTJdDQogICAgICAgIH0pKTsNCmJyZWFrOw0KY2FzZSAxNzM6dGhpcy4kID0gJCRbJDBdOw0KYnJlYWs7DQpjYXNlIDE3NDp0aGlzLiQgPSAkJFskMC0yXS5hZGRFbHNlKCQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTc1OnRoaXMuJCA9IG5ldyB5eS5JZigkJFskMF0sIHl5LkJsb2NrLndyYXAoWyQkWyQwLTJdXSksIHsNCiAgICAgICAgICB0eXBlOiAkJFskMC0xXSwNCiAgICAgICAgICBzdGF0ZW1lbnQ6IHRydWUNCiAgICAgICAgfSk7DQpicmVhazsNCmNhc2UgMTc2OnRoaXMuJCA9IG5ldyB5eS5JZigkJFskMF0sIHl5LkJsb2NrLndyYXAoWyQkWyQwLTJdXSksIHsNCiAgICAgICAgICB0eXBlOiAkJFskMC0xXSwNCiAgICAgICAgICBzdGF0ZW1lbnQ6IHRydWUNCiAgICAgICAgfSk7DQpicmVhazsNCmNhc2UgMTc3OnRoaXMuJCA9IG5ldyB5eS5PcCgkJFskMC0xXSwgJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSAxNzg6dGhpcy4kID0gbmV3IHl5Lk9wKCctJywgJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSAxNzk6dGhpcy4kID0gbmV3IHl5Lk9wKCcrJywgJCRbJDBdKTsNCmJyZWFrOw0KY2FzZSAxODA6dGhpcy4kID0gbmV3IHl5Lk9wKCctLScsICQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTgxOnRoaXMuJCA9IG5ldyB5eS5PcCgnKysnLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE4Mjp0aGlzLiQgPSBuZXcgeXkuT3AoJy0tJywgJCRbJDAtMV0sIG51bGwsIHRydWUpOw0KYnJlYWs7DQpjYXNlIDE4Mzp0aGlzLiQgPSBuZXcgeXkuT3AoJysrJywgJCRbJDAtMV0sIG51bGwsIHRydWUpOw0KYnJlYWs7DQpjYXNlIDE4NDp0aGlzLiQgPSBuZXcgeXkuRXhpc3RlbmNlKCQkWyQwLTFdKTsNCmJyZWFrOw0KY2FzZSAxODU6dGhpcy4kID0gbmV3IHl5Lk9wKCcrJywgJCRbJDAtMl0sICQkWyQwXSk7DQpicmVhazsNCmNhc2UgMTg2OnRoaXMuJCA9IG5ldyB5eS5PcCgnLScsICQkWyQwLTJdLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE4Nzp0aGlzLiQgPSBuZXcgeXkuT3AoJCRbJDAtMV0sICQkWyQwLTJdLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE4ODp0aGlzLiQgPSBuZXcgeXkuT3AoJCRbJDAtMV0sICQkWyQwLTJdLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE4OTp0aGlzLiQgPSBuZXcgeXkuT3AoJCRbJDAtMV0sICQkWyQwLTJdLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE5MDp0aGlzLiQgPSBuZXcgeXkuT3AoJCRbJDAtMV0sICQkWyQwLTJdLCAkJFskMF0pOw0KYnJlYWs7DQpjYXNlIDE5MTp0aGlzLiQgPSAoZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoJCRbJDAtMV0uY2hhckF0KDApID09PSAnIScpIHsNCiAgICAgICAgICByZXR1cm4gbmV3IHl5Lk9wKCQkWyQwLTFdLnNsaWNlKDEpLCAkJFskMC0yXSwgJCRbJDBdKS5pbnZlcnQoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICByZXR1cm4gbmV3IHl5Lk9wKCQkWyQwLTFdLCAkJFskMC0yXSwgJCRbJDBdKTsNCiAgICAgICAgfQ0KICAgICAgfSgpKTsNCmJyZWFrOw0KY2FzZSAxOTI6dGhpcy4kID0gbmV3IHl5LkFzc2lnbigkJFskMC0yXSwgJCRbJDBdLCAkJFskMC0xXSk7DQpicmVhazsNCmNhc2UgMTkzOnRoaXMuJCA9IG5ldyB5eS5Bc3NpZ24oJCRbJDAtNF0sICQkWyQwLTFdLCAkJFskMC0zXSk7DQpicmVhazsNCmNhc2UgMTk0OnRoaXMuJCA9IG5ldyB5eS5FeHRlbmRzKCQkWyQwLTJdLCAkJFskMF0pOw0KYnJlYWs7DQp9DQp9LA0KdGFibGU6IFt7MTpbMiwxXSwzOjEsNDoyLDU6Myw3OjQsODo2LDk6NywxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI1OlsxLDVdLDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjIzLDQxOjYwLDQyOlsxLDQ0XSw0MzpbMSw0Nl0sNDQ6WzEsMjldLDQ3OjMwLDQ4OlsxLDU3XSw0OTpbMSw1OF0sNTU6NDcsNTY6NDgsNTg6MzYsNjA6MjUsNjE6MjYsNjI6MjcsNzM6WzEsNjddLDc2OlsxLDQzXSw4MDpbMSwyOF0sODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHsxOlszXX0sezE6WzIsMl0sNjpbMSw3MV19LHs2OlsxLDcyXX0sezE6WzIsNF0sNjpbMiw0XSwyNjpbMiw0XSw5OTpbMiw0XX0sezQ6NzQsNzo0LDg6Niw5OjcsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNjpbMSw3M10sMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezE6WzIsN10sNjpbMiw3XSwyNjpbMiw3XSw5OTpbMiw3XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMjM6WzEsODNdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezE6WzIsOF0sNjpbMiw4XSwyNjpbMiw4XSw5OTpbMiw4XSwxMDA6ODcsMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNjo4OCwxMDc6WzEsNjVdLDEwODo2NiwxMjM6WzEsODZdfSx7MTpbMiwxM10sNjpbMiwxM10sMjU6WzIsMTNdLDI2OlsyLDEzXSw0NjpbMiwxM10sNTE6WzIsMTNdLDU0OlsyLDEzXSw1OTo5MCw2MzpbMSw5Ml0sNjQ6WzEsOTNdLDY1OlsxLDk0XSw2Njo5NSw2NzpbMSw5Nl0sNjk6WzIsMTNdLDcwOlsxLDk3XSw3MTpbMSw5OF0sNzU6WzIsMTNdLDc4Ojg5LDgxOlsxLDkxXSw4MjpbMiwxMDJdLDgzOlsyLDEzXSw4ODpbMiwxM10sOTA6WzIsMTNdLDk5OlsyLDEzXSwxMDE6WzIsMTNdLDEwMjpbMiwxM10sMTAzOlsyLDEzXSwxMDc6WzIsMTNdLDExNTpbMiwxM10sMTIzOlsyLDEzXSwxMjU6WzIsMTNdLDEyNjpbMiwxM10sMTI5OlsyLDEzXSwxMzA6WzIsMTNdLDEzMTpbMiwxM10sMTMyOlsyLDEzXSwxMzM6WzIsMTNdLDEzNDpbMiwxM119LHsxOlsyLDE0XSw2OlsyLDE0XSwyNTpbMiwxNF0sMjY6WzIsMTRdLDQ2OlsyLDE0XSw1MTpbMiwxNF0sNTQ6WzIsMTRdLDU5OjEwMCw2MzpbMSw5Ml0sNjQ6WzEsOTNdLDY1OlsxLDk0XSw2Njo5NSw2NzpbMSw5Nl0sNjk6WzIsMTRdLDcwOlsxLDk3XSw3MTpbMSw5OF0sNzU6WzIsMTRdLDc4Ojk5LDgxOlsxLDkxXSw4MjpbMiwxMDJdLDgzOlsyLDE0XSw4ODpbMiwxNF0sOTA6WzIsMTRdLDk5OlsyLDE0XSwxMDE6WzIsMTRdLDEwMjpbMiwxNF0sMTAzOlsyLDE0XSwxMDc6WzIsMTRdLDExNTpbMiwxNF0sMTIzOlsyLDE0XSwxMjU6WzIsMTRdLDEyNjpbMiwxNF0sMTI5OlsyLDE0XSwxMzA6WzIsMTRdLDEzMTpbMiwxNF0sMTMyOlsyLDE0XSwxMzM6WzIsMTRdLDEzNDpbMiwxNF19LHsxOlsyLDE1XSw2OlsyLDE1XSwyNTpbMiwxNV0sMjY6WzIsMTVdLDQ2OlsyLDE1XSw1MTpbMiwxNV0sNTQ6WzIsMTVdLDY5OlsyLDE1XSw3NTpbMiwxNV0sODM6WzIsMTVdLDg4OlsyLDE1XSw5MDpbMiwxNV0sOTk6WzIsMTVdLDEwMTpbMiwxNV0sMTAyOlsyLDE1XSwxMDM6WzIsMTVdLDEwNzpbMiwxNV0sMTE1OlsyLDE1XSwxMjM6WzIsMTVdLDEyNTpbMiwxNV0sMTI2OlsyLDE1XSwxMjk6WzIsMTVdLDEzMDpbMiwxNV0sMTMxOlsyLDE1XSwxMzI6WzIsMTVdLDEzMzpbMiwxNV0sMTM0OlsyLDE1XX0sezE6WzIsMTZdLDY6WzIsMTZdLDI1OlsyLDE2XSwyNjpbMiwxNl0sNDY6WzIsMTZdLDUxOlsyLDE2XSw1NDpbMiwxNl0sNjk6WzIsMTZdLDc1OlsyLDE2XSw4MzpbMiwxNl0sODg6WzIsMTZdLDkwOlsyLDE2XSw5OTpbMiwxNl0sMTAxOlsyLDE2XSwxMDI6WzIsMTZdLDEwMzpbMiwxNl0sMTA3OlsyLDE2XSwxMTU6WzIsMTZdLDEyMzpbMiwxNl0sMTI1OlsyLDE2XSwxMjY6WzIsMTZdLDEyOTpbMiwxNl0sMTMwOlsyLDE2XSwxMzE6WzIsMTZdLDEzMjpbMiwxNl0sMTMzOlsyLDE2XSwxMzQ6WzIsMTZdfSx7MTpbMiwxN10sNjpbMiwxN10sMjU6WzIsMTddLDI2OlsyLDE3XSw0NjpbMiwxN10sNTE6WzIsMTddLDU0OlsyLDE3XSw2OTpbMiwxN10sNzU6WzIsMTddLDgzOlsyLDE3XSw4ODpbMiwxN10sOTA6WzIsMTddLDk5OlsyLDE3XSwxMDE6WzIsMTddLDEwMjpbMiwxN10sMTAzOlsyLDE3XSwxMDc6WzIsMTddLDExNTpbMiwxN10sMTIzOlsyLDE3XSwxMjU6WzIsMTddLDEyNjpbMiwxN10sMTI5OlsyLDE3XSwxMzA6WzIsMTddLDEzMTpbMiwxN10sMTMyOlsyLDE3XSwxMzM6WzIsMTddLDEzNDpbMiwxN119LHsxOlsyLDE4XSw2OlsyLDE4XSwyNTpbMiwxOF0sMjY6WzIsMThdLDQ2OlsyLDE4XSw1MTpbMiwxOF0sNTQ6WzIsMThdLDY5OlsyLDE4XSw3NTpbMiwxOF0sODM6WzIsMThdLDg4OlsyLDE4XSw5MDpbMiwxOF0sOTk6WzIsMThdLDEwMTpbMiwxOF0sMTAyOlsyLDE4XSwxMDM6WzIsMThdLDEwNzpbMiwxOF0sMTE1OlsyLDE4XSwxMjM6WzIsMThdLDEyNTpbMiwxOF0sMTI2OlsyLDE4XSwxMjk6WzIsMThdLDEzMDpbMiwxOF0sMTMxOlsyLDE4XSwxMzI6WzIsMThdLDEzMzpbMiwxOF0sMTM0OlsyLDE4XX0sezE6WzIsMTldLDY6WzIsMTldLDI1OlsyLDE5XSwyNjpbMiwxOV0sNDY6WzIsMTldLDUxOlsyLDE5XSw1NDpbMiwxOV0sNjk6WzIsMTldLDc1OlsyLDE5XSw4MzpbMiwxOV0sODg6WzIsMTldLDkwOlsyLDE5XSw5OTpbMiwxOV0sMTAxOlsyLDE5XSwxMDI6WzIsMTldLDEwMzpbMiwxOV0sMTA3OlsyLDE5XSwxMTU6WzIsMTldLDEyMzpbMiwxOV0sMTI1OlsyLDE5XSwxMjY6WzIsMTldLDEyOTpbMiwxOV0sMTMwOlsyLDE5XSwxMzE6WzIsMTldLDEzMjpbMiwxOV0sMTMzOlsyLDE5XSwxMzQ6WzIsMTldfSx7MTpbMiwyMF0sNjpbMiwyMF0sMjU6WzIsMjBdLDI2OlsyLDIwXSw0NjpbMiwyMF0sNTE6WzIsMjBdLDU0OlsyLDIwXSw2OTpbMiwyMF0sNzU6WzIsMjBdLDgzOlsyLDIwXSw4ODpbMiwyMF0sOTA6WzIsMjBdLDk5OlsyLDIwXSwxMDE6WzIsMjBdLDEwMjpbMiwyMF0sMTAzOlsyLDIwXSwxMDc6WzIsMjBdLDExNTpbMiwyMF0sMTIzOlsyLDIwXSwxMjU6WzIsMjBdLDEyNjpbMiwyMF0sMTI5OlsyLDIwXSwxMzA6WzIsMjBdLDEzMTpbMiwyMF0sMTMyOlsyLDIwXSwxMzM6WzIsMjBdLDEzNDpbMiwyMF19LHsxOlsyLDIxXSw2OlsyLDIxXSwyNTpbMiwyMV0sMjY6WzIsMjFdLDQ2OlsyLDIxXSw1MTpbMiwyMV0sNTQ6WzIsMjFdLDY5OlsyLDIxXSw3NTpbMiwyMV0sODM6WzIsMjFdLDg4OlsyLDIxXSw5MDpbMiwyMV0sOTk6WzIsMjFdLDEwMTpbMiwyMV0sMTAyOlsyLDIxXSwxMDM6WzIsMjFdLDEwNzpbMiwyMV0sMTE1OlsyLDIxXSwxMjM6WzIsMjFdLDEyNTpbMiwyMV0sMTI2OlsyLDIxXSwxMjk6WzIsMjFdLDEzMDpbMiwyMV0sMTMxOlsyLDIxXSwxMzI6WzIsMjFdLDEzMzpbMiwyMV0sMTM0OlsyLDIxXX0sezE6WzIsMjJdLDY6WzIsMjJdLDI1OlsyLDIyXSwyNjpbMiwyMl0sNDY6WzIsMjJdLDUxOlsyLDIyXSw1NDpbMiwyMl0sNjk6WzIsMjJdLDc1OlsyLDIyXSw4MzpbMiwyMl0sODg6WzIsMjJdLDkwOlsyLDIyXSw5OTpbMiwyMl0sMTAxOlsyLDIyXSwxMDI6WzIsMjJdLDEwMzpbMiwyMl0sMTA3OlsyLDIyXSwxMTU6WzIsMjJdLDEyMzpbMiwyMl0sMTI1OlsyLDIyXSwxMjY6WzIsMjJdLDEyOTpbMiwyMl0sMTMwOlsyLDIyXSwxMzE6WzIsMjJdLDEzMjpbMiwyMl0sMTMzOlsyLDIyXSwxMzQ6WzIsMjJdfSx7MTpbMiwyM10sNjpbMiwyM10sMjU6WzIsMjNdLDI2OlsyLDIzXSw0NjpbMiwyM10sNTE6WzIsMjNdLDU0OlsyLDIzXSw2OTpbMiwyM10sNzU6WzIsMjNdLDgzOlsyLDIzXSw4ODpbMiwyM10sOTA6WzIsMjNdLDk5OlsyLDIzXSwxMDE6WzIsMjNdLDEwMjpbMiwyM10sMTAzOlsyLDIzXSwxMDc6WzIsMjNdLDExNTpbMiwyM10sMTIzOlsyLDIzXSwxMjU6WzIsMjNdLDEyNjpbMiwyM10sMTI5OlsyLDIzXSwxMzA6WzIsMjNdLDEzMTpbMiwyM10sMTMyOlsyLDIzXSwxMzM6WzIsMjNdLDEzNDpbMiwyM119LHsxOlsyLDldLDY6WzIsOV0sMjY6WzIsOV0sOTk6WzIsOV0sMTAxOlsyLDldLDEwMzpbMiw5XSwxMDc6WzIsOV0sMTIzOlsyLDldfSx7MTpbMiwxMF0sNjpbMiwxMF0sMjY6WzIsMTBdLDk5OlsyLDEwXSwxMDE6WzIsMTBdLDEwMzpbMiwxMF0sMTA3OlsyLDEwXSwxMjM6WzIsMTBdfSx7MTpbMiwxMV0sNjpbMiwxMV0sMjY6WzIsMTFdLDk5OlsyLDExXSwxMDE6WzIsMTFdLDEwMzpbMiwxMV0sMTA3OlsyLDExXSwxMjM6WzIsMTFdfSx7MTpbMiwxMl0sNjpbMiwxMl0sMjY6WzIsMTJdLDk5OlsyLDEyXSwxMDE6WzIsMTJdLDEwMzpbMiwxMl0sMTA3OlsyLDEyXSwxMjM6WzIsMTJdfSx7MTpbMiw2OV0sNjpbMiw2OV0sMjU6WzIsNjldLDI2OlsyLDY5XSwzNzpbMSwxMDFdLDQ2OlsyLDY5XSw1MTpbMiw2OV0sNTQ6WzIsNjldLDYzOlsyLDY5XSw2NDpbMiw2OV0sNjU6WzIsNjldLDY3OlsyLDY5XSw2OTpbMiw2OV0sNzA6WzIsNjldLDcxOlsyLDY5XSw3NTpbMiw2OV0sODE6WzIsNjldLDgyOlsyLDY5XSw4MzpbMiw2OV0sODg6WzIsNjldLDkwOlsyLDY5XSw5OTpbMiw2OV0sMTAxOlsyLDY5XSwxMDI6WzIsNjldLDEwMzpbMiw2OV0sMTA3OlsyLDY5XSwxMTU6WzIsNjldLDEyMzpbMiw2OV0sMTI1OlsyLDY5XSwxMjY6WzIsNjldLDEyOTpbMiw2OV0sMTMwOlsyLDY5XSwxMzE6WzIsNjldLDEzMjpbMiw2OV0sMTMzOlsyLDY5XSwxMzQ6WzIsNjldfSx7MTpbMiw3MF0sNjpbMiw3MF0sMjU6WzIsNzBdLDI2OlsyLDcwXSw0NjpbMiw3MF0sNTE6WzIsNzBdLDU0OlsyLDcwXSw2MzpbMiw3MF0sNjQ6WzIsNzBdLDY1OlsyLDcwXSw2NzpbMiw3MF0sNjk6WzIsNzBdLDcwOlsyLDcwXSw3MTpbMiw3MF0sNzU6WzIsNzBdLDgxOlsyLDcwXSw4MjpbMiw3MF0sODM6WzIsNzBdLDg4OlsyLDcwXSw5MDpbMiw3MF0sOTk6WzIsNzBdLDEwMTpbMiw3MF0sMTAyOlsyLDcwXSwxMDM6WzIsNzBdLDEwNzpbMiw3MF0sMTE1OlsyLDcwXSwxMjM6WzIsNzBdLDEyNTpbMiw3MF0sMTI2OlsyLDcwXSwxMjk6WzIsNzBdLDEzMDpbMiw3MF0sMTMxOlsyLDcwXSwxMzI6WzIsNzBdLDEzMzpbMiw3MF0sMTM0OlsyLDcwXX0sezE6WzIsNzFdLDY6WzIsNzFdLDI1OlsyLDcxXSwyNjpbMiw3MV0sNDY6WzIsNzFdLDUxOlsyLDcxXSw1NDpbMiw3MV0sNjM6WzIsNzFdLDY0OlsyLDcxXSw2NTpbMiw3MV0sNjc6WzIsNzFdLDY5OlsyLDcxXSw3MDpbMiw3MV0sNzE6WzIsNzFdLDc1OlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4ODpbMiw3MV0sOTA6WzIsNzFdLDk5OlsyLDcxXSwxMDE6WzIsNzFdLDEwMjpbMiw3MV0sMTAzOlsyLDcxXSwxMDc6WzIsNzFdLDExNTpbMiw3MV0sMTIzOlsyLDcxXSwxMjU6WzIsNzFdLDEyNjpbMiw3MV0sMTI5OlsyLDcxXSwxMzA6WzIsNzFdLDEzMTpbMiw3MV0sMTMyOlsyLDcxXSwxMzM6WzIsNzFdLDEzNDpbMiw3MV19LHsxOlsyLDcyXSw2OlsyLDcyXSwyNTpbMiw3Ml0sMjY6WzIsNzJdLDQ2OlsyLDcyXSw1MTpbMiw3Ml0sNTQ6WzIsNzJdLDYzOlsyLDcyXSw2NDpbMiw3Ml0sNjU6WzIsNzJdLDY3OlsyLDcyXSw2OTpbMiw3Ml0sNzA6WzIsNzJdLDcxOlsyLDcyXSw3NTpbMiw3Ml0sODE6WzIsNzJdLDgyOlsyLDcyXSw4MzpbMiw3Ml0sODg6WzIsNzJdLDkwOlsyLDcyXSw5OTpbMiw3Ml0sMTAxOlsyLDcyXSwxMDI6WzIsNzJdLDEwMzpbMiw3Ml0sMTA3OlsyLDcyXSwxMTU6WzIsNzJdLDEyMzpbMiw3Ml0sMTI1OlsyLDcyXSwxMjY6WzIsNzJdLDEyOTpbMiw3Ml0sMTMwOlsyLDcyXSwxMzE6WzIsNzJdLDEzMjpbMiw3Ml0sMTMzOlsyLDcyXSwxMzQ6WzIsNzJdfSx7MTpbMiw3M10sNjpbMiw3M10sMjU6WzIsNzNdLDI2OlsyLDczXSw0NjpbMiw3M10sNTE6WzIsNzNdLDU0OlsyLDczXSw2MzpbMiw3M10sNjQ6WzIsNzNdLDY1OlsyLDczXSw2NzpbMiw3M10sNjk6WzIsNzNdLDcwOlsyLDczXSw3MTpbMiw3M10sNzU6WzIsNzNdLDgxOlsyLDczXSw4MjpbMiw3M10sODM6WzIsNzNdLDg4OlsyLDczXSw5MDpbMiw3M10sOTk6WzIsNzNdLDEwMTpbMiw3M10sMTAyOlsyLDczXSwxMDM6WzIsNzNdLDEwNzpbMiw3M10sMTE1OlsyLDczXSwxMjM6WzIsNzNdLDEyNTpbMiw3M10sMTI2OlsyLDczXSwxMjk6WzIsNzNdLDEzMDpbMiw3M10sMTMxOlsyLDczXSwxMzI6WzIsNzNdLDEzMzpbMiw3M10sMTM0OlsyLDczXX0sezE6WzIsMTAwXSw2OlsyLDEwMF0sMjU6WzIsMTAwXSwyNjpbMiwxMDBdLDQ2OlsyLDEwMF0sNTE6WzIsMTAwXSw1NDpbMiwxMDBdLDYzOlsyLDEwMF0sNjQ6WzIsMTAwXSw2NTpbMiwxMDBdLDY3OlsyLDEwMF0sNjk6WzIsMTAwXSw3MDpbMiwxMDBdLDcxOlsyLDEwMF0sNzU6WzIsMTAwXSw3OToxMDIsODE6WzIsMTAwXSw4MjpbMSwxMDNdLDgzOlsyLDEwMF0sODg6WzIsMTAwXSw5MDpbMiwxMDBdLDk5OlsyLDEwMF0sMTAxOlsyLDEwMF0sMTAyOlsyLDEwMF0sMTAzOlsyLDEwMF0sMTA3OlsyLDEwMF0sMTE1OlsyLDEwMF0sMTIzOlsyLDEwMF0sMTI1OlsyLDEwMF0sMTI2OlsyLDEwMF0sMTI5OlsyLDEwMF0sMTMwOlsyLDEwMF0sMTMxOlsyLDEwMF0sMTMyOlsyLDEwMF0sMTMzOlsyLDEwMF0sMTM0OlsyLDEwMF19LHsyNzoxMDcsMjg6WzEsNzBdLDQxOjEwOCw0NToxMDQsNDY6WzIsNTFdLDUxOlsyLDUxXSw1MjoxMDUsNTM6MTA2LDU1OjEwOSw1NjoxMTAsNzM6WzEsNjddLDg2OlsxLDExMV0sODc6WzEsMTEyXX0sezU6MTEzLDI1OlsxLDVdfSx7ODoxMTQsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxMTYsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxMTcsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7MTQ6MTE5LDE1OjEyMCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoxMjEsNDE6NjAsNTU6NDcsNTY6NDgsNTg6MTE4LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw4MDpbMSwyOF0sODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTg6WzEsNTNdfSx7MTQ6MTE5LDE1OjEyMCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoxMjEsNDE6NjAsNTU6NDcsNTY6NDgsNTg6MTIyLDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw4MDpbMSwyOF0sODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTg6WzEsNTNdfSx7MTpbMiw2Nl0sNjpbMiw2Nl0sMjU6WzIsNjZdLDI2OlsyLDY2XSwzNzpbMiw2Nl0sNDY6WzIsNjZdLDUxOlsyLDY2XSw1NDpbMiw2Nl0sNjM6WzIsNjZdLDY0OlsyLDY2XSw2NTpbMiw2Nl0sNjc6WzIsNjZdLDY5OlsyLDY2XSw3MDpbMiw2Nl0sNzE6WzIsNjZdLDc1OlsyLDY2XSw3NzpbMSwxMjZdLDgxOlsyLDY2XSw4MjpbMiw2Nl0sODM6WzIsNjZdLDg4OlsyLDY2XSw5MDpbMiw2Nl0sOTk6WzIsNjZdLDEwMTpbMiw2Nl0sMTAyOlsyLDY2XSwxMDM6WzIsNjZdLDEwNzpbMiw2Nl0sMTE1OlsyLDY2XSwxMjM6WzIsNjZdLDEyNTpbMiw2Nl0sMTI2OlsyLDY2XSwxMjc6WzEsMTIzXSwxMjg6WzEsMTI0XSwxMjk6WzIsNjZdLDEzMDpbMiw2Nl0sMTMxOlsyLDY2XSwxMzI6WzIsNjZdLDEzMzpbMiw2Nl0sMTM0OlsyLDY2XSwxMzU6WzEsMTI1XX0sezE6WzIsMTczXSw2OlsyLDE3M10sMjU6WzIsMTczXSwyNjpbMiwxNzNdLDQ2OlsyLDE3M10sNTE6WzIsMTczXSw1NDpbMiwxNzNdLDY5OlsyLDE3M10sNzU6WzIsMTczXSw4MzpbMiwxNzNdLDg4OlsyLDE3M10sOTA6WzIsMTczXSw5OTpbMiwxNzNdLDEwMTpbMiwxNzNdLDEwMjpbMiwxNzNdLDEwMzpbMiwxNzNdLDEwNzpbMiwxNzNdLDExNTpbMiwxNzNdLDExODpbMSwxMjddLDEyMzpbMiwxNzNdLDEyNTpbMiwxNzNdLDEyNjpbMiwxNzNdLDEyOTpbMiwxNzNdLDEzMDpbMiwxNzNdLDEzMTpbMiwxNzNdLDEzMjpbMiwxNzNdLDEzMzpbMiwxNzNdLDEzNDpbMiwxNzNdfSx7NToxMjgsMjU6WzEsNV19LHs1OjEyOSwyNTpbMSw1XX0sezE6WzIsMTQxXSw2OlsyLDE0MV0sMjU6WzIsMTQxXSwyNjpbMiwxNDFdLDQ2OlsyLDE0MV0sNTE6WzIsMTQxXSw1NDpbMiwxNDFdLDY5OlsyLDE0MV0sNzU6WzIsMTQxXSw4MzpbMiwxNDFdLDg4OlsyLDE0MV0sOTA6WzIsMTQxXSw5OTpbMiwxNDFdLDEwMTpbMiwxNDFdLDEwMjpbMiwxNDFdLDEwMzpbMiwxNDFdLDEwNzpbMiwxNDFdLDExNTpbMiwxNDFdLDEyMzpbMiwxNDFdLDEyNTpbMiwxNDFdLDEyNjpbMiwxNDFdLDEyOTpbMiwxNDFdLDEzMDpbMiwxNDFdLDEzMTpbMiwxNDFdLDEzMjpbMiwxNDFdLDEzMzpbMiwxNDFdLDEzNDpbMiwxNDFdfSx7NToxMzAsMjU6WzEsNV19LHs4OjEzMSw5OjExNSwxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI1OlsxLDEzMl0sMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezE6WzIsOTBdLDU6MTMzLDY6WzIsOTBdLDE0OjExOSwxNToxMjAsMjU6WzEsNV0sMjY6WzIsOTBdLDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjEyMSw0MTo2MCw0NjpbMiw5MF0sNTE6WzIsOTBdLDU0OlsyLDkwXSw1NTo0Nyw1Njo0OCw1ODoxMzUsNjA6MjUsNjE6MjYsNjI6MjcsNjk6WzIsOTBdLDczOlsxLDY3XSw3NTpbMiw5MF0sNzc6WzEsMTM0XSw4MDpbMSwyOF0sODM6WzIsOTBdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDg4OlsyLDkwXSw5MDpbMiw5MF0sOTg6WzEsNTNdLDk5OlsyLDkwXSwxMDE6WzIsOTBdLDEwMjpbMiw5MF0sMTAzOlsyLDkwXSwxMDc6WzIsOTBdLDExNTpbMiw5MF0sMTIzOlsyLDkwXSwxMjU6WzIsOTBdLDEyNjpbMiw5MF0sMTI5OlsyLDkwXSwxMzA6WzIsOTBdLDEzMTpbMiw5MF0sMTMyOlsyLDkwXSwxMzM6WzIsOTBdLDEzNDpbMiw5MF19LHsxOlsyLDQzXSw2OlsyLDQzXSw4OjEzNiw5OjExNSwxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI2OlsyLDQzXSwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDk5OlsyLDQzXSwxMDA6MzksMTAxOlsyLDQzXSwxMDM6WzIsNDNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzIsNDNdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyMzpbMiw0M10sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxMzcsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7MTpbMiw0NF0sNjpbMiw0NF0sMjU6WzIsNDRdLDI2OlsyLDQ0XSw1MTpbMiw0NF0sNzU6WzIsNDRdLDk5OlsyLDQ0XSwxMDE6WzIsNDRdLDEwMzpbMiw0NF0sMTA3OlsyLDQ0XSwxMjM6WzIsNDRdfSx7MTpbMiw2N10sNjpbMiw2N10sMjU6WzIsNjddLDI2OlsyLDY3XSwzNzpbMiw2N10sNDY6WzIsNjddLDUxOlsyLDY3XSw1NDpbMiw2N10sNjM6WzIsNjddLDY0OlsyLDY3XSw2NTpbMiw2N10sNjc6WzIsNjddLDY5OlsyLDY3XSw3MDpbMiw2N10sNzE6WzIsNjddLDc1OlsyLDY3XSw4MTpbMiw2N10sODI6WzIsNjddLDgzOlsyLDY3XSw4ODpbMiw2N10sOTA6WzIsNjddLDk5OlsyLDY3XSwxMDE6WzIsNjddLDEwMjpbMiw2N10sMTAzOlsyLDY3XSwxMDc6WzIsNjddLDExNTpbMiw2N10sMTIzOlsyLDY3XSwxMjU6WzIsNjddLDEyNjpbMiw2N10sMTI5OlsyLDY3XSwxMzA6WzIsNjddLDEzMTpbMiw2N10sMTMyOlsyLDY3XSwxMzM6WzIsNjddLDEzNDpbMiw2N119LHsxOlsyLDY4XSw2OlsyLDY4XSwyNTpbMiw2OF0sMjY6WzIsNjhdLDM3OlsyLDY4XSw0NjpbMiw2OF0sNTE6WzIsNjhdLDU0OlsyLDY4XSw2MzpbMiw2OF0sNjQ6WzIsNjhdLDY1OlsyLDY4XSw2NzpbMiw2OF0sNjk6WzIsNjhdLDcwOlsyLDY4XSw3MTpbMiw2OF0sNzU6WzIsNjhdLDgxOlsyLDY4XSw4MjpbMiw2OF0sODM6WzIsNjhdLDg4OlsyLDY4XSw5MDpbMiw2OF0sOTk6WzIsNjhdLDEwMTpbMiw2OF0sMTAyOlsyLDY4XSwxMDM6WzIsNjhdLDEwNzpbMiw2OF0sMTE1OlsyLDY4XSwxMjM6WzIsNjhdLDEyNTpbMiw2OF0sMTI2OlsyLDY4XSwxMjk6WzIsNjhdLDEzMDpbMiw2OF0sMTMxOlsyLDY4XSwxMzI6WzIsNjhdLDEzMzpbMiw2OF0sMTM0OlsyLDY4XX0sezE6WzIsMjldLDY6WzIsMjldLDI1OlsyLDI5XSwyNjpbMiwyOV0sNDY6WzIsMjldLDUxOlsyLDI5XSw1NDpbMiwyOV0sNjM6WzIsMjldLDY0OlsyLDI5XSw2NTpbMiwyOV0sNjc6WzIsMjldLDY5OlsyLDI5XSw3MDpbMiwyOV0sNzE6WzIsMjldLDc1OlsyLDI5XSw4MTpbMiwyOV0sODI6WzIsMjldLDgzOlsyLDI5XSw4ODpbMiwyOV0sOTA6WzIsMjldLDk5OlsyLDI5XSwxMDE6WzIsMjldLDEwMjpbMiwyOV0sMTAzOlsyLDI5XSwxMDc6WzIsMjldLDExNTpbMiwyOV0sMTIzOlsyLDI5XSwxMjU6WzIsMjldLDEyNjpbMiwyOV0sMTI5OlsyLDI5XSwxMzA6WzIsMjldLDEzMTpbMiwyOV0sMTMyOlsyLDI5XSwxMzM6WzIsMjldLDEzNDpbMiwyOV19LHsxOlsyLDMwXSw2OlsyLDMwXSwyNTpbMiwzMF0sMjY6WzIsMzBdLDQ2OlsyLDMwXSw1MTpbMiwzMF0sNTQ6WzIsMzBdLDYzOlsyLDMwXSw2NDpbMiwzMF0sNjU6WzIsMzBdLDY3OlsyLDMwXSw2OTpbMiwzMF0sNzA6WzIsMzBdLDcxOlsyLDMwXSw3NTpbMiwzMF0sODE6WzIsMzBdLDgyOlsyLDMwXSw4MzpbMiwzMF0sODg6WzIsMzBdLDkwOlsyLDMwXSw5OTpbMiwzMF0sMTAxOlsyLDMwXSwxMDI6WzIsMzBdLDEwMzpbMiwzMF0sMTA3OlsyLDMwXSwxMTU6WzIsMzBdLDEyMzpbMiwzMF0sMTI1OlsyLDMwXSwxMjY6WzIsMzBdLDEyOTpbMiwzMF0sMTMwOlsyLDMwXSwxMzE6WzIsMzBdLDEzMjpbMiwzMF0sMTMzOlsyLDMwXSwxMzQ6WzIsMzBdfSx7MTpbMiwzMV0sNjpbMiwzMV0sMjU6WzIsMzFdLDI2OlsyLDMxXSw0NjpbMiwzMV0sNTE6WzIsMzFdLDU0OlsyLDMxXSw2MzpbMiwzMV0sNjQ6WzIsMzFdLDY1OlsyLDMxXSw2NzpbMiwzMV0sNjk6WzIsMzFdLDcwOlsyLDMxXSw3MTpbMiwzMV0sNzU6WzIsMzFdLDgxOlsyLDMxXSw4MjpbMiwzMV0sODM6WzIsMzFdLDg4OlsyLDMxXSw5MDpbMiwzMV0sOTk6WzIsMzFdLDEwMTpbMiwzMV0sMTAyOlsyLDMxXSwxMDM6WzIsMzFdLDEwNzpbMiwzMV0sMTE1OlsyLDMxXSwxMjM6WzIsMzFdLDEyNTpbMiwzMV0sMTI2OlsyLDMxXSwxMjk6WzIsMzFdLDEzMDpbMiwzMV0sMTMxOlsyLDMxXSwxMzI6WzIsMzFdLDEzMzpbMiwzMV0sMTM0OlsyLDMxXX0sezE6WzIsMzJdLDY6WzIsMzJdLDI1OlsyLDMyXSwyNjpbMiwzMl0sNDY6WzIsMzJdLDUxOlsyLDMyXSw1NDpbMiwzMl0sNjM6WzIsMzJdLDY0OlsyLDMyXSw2NTpbMiwzMl0sNjc6WzIsMzJdLDY5OlsyLDMyXSw3MDpbMiwzMl0sNzE6WzIsMzJdLDc1OlsyLDMyXSw4MTpbMiwzMl0sODI6WzIsMzJdLDgzOlsyLDMyXSw4ODpbMiwzMl0sOTA6WzIsMzJdLDk5OlsyLDMyXSwxMDE6WzIsMzJdLDEwMjpbMiwzMl0sMTAzOlsyLDMyXSwxMDc6WzIsMzJdLDExNTpbMiwzMl0sMTIzOlsyLDMyXSwxMjU6WzIsMzJdLDEyNjpbMiwzMl0sMTI5OlsyLDMyXSwxMzA6WzIsMzJdLDEzMTpbMiwzMl0sMTMyOlsyLDMyXSwxMzM6WzIsMzJdLDEzNDpbMiwzMl19LHs0OjEzOCw3OjQsODo2LDk6NywxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI1OlsxLDEzOV0sMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezg6MTQwLDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjU6WzEsMTQ0XSwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU3OjE0NSw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NDoxNDIsODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sODg6WzEsMTQxXSw5MToxNDMsOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHsxOlsyLDEwNl0sNjpbMiwxMDZdLDI1OlsyLDEwNl0sMjY6WzIsMTA2XSw0NjpbMiwxMDZdLDUxOlsyLDEwNl0sNTQ6WzIsMTA2XSw2MzpbMiwxMDZdLDY0OlsyLDEwNl0sNjU6WzIsMTA2XSw2NzpbMiwxMDZdLDY5OlsyLDEwNl0sNzA6WzIsMTA2XSw3MTpbMiwxMDZdLDc1OlsyLDEwNl0sODE6WzIsMTA2XSw4MjpbMiwxMDZdLDgzOlsyLDEwNl0sODg6WzIsMTA2XSw5MDpbMiwxMDZdLDk5OlsyLDEwNl0sMTAxOlsyLDEwNl0sMTAyOlsyLDEwNl0sMTAzOlsyLDEwNl0sMTA3OlsyLDEwNl0sMTE1OlsyLDEwNl0sMTIzOlsyLDEwNl0sMTI1OlsyLDEwNl0sMTI2OlsyLDEwNl0sMTI5OlsyLDEwNl0sMTMwOlsyLDEwNl0sMTMxOlsyLDEwNl0sMTMyOlsyLDEwNl0sMTMzOlsyLDEwNl0sMTM0OlsyLDEwNl19LHsxOlsyLDEwN10sNjpbMiwxMDddLDI1OlsyLDEwN10sMjY6WzIsMTA3XSwyNzoxNDYsMjg6WzEsNzBdLDQ2OlsyLDEwN10sNTE6WzIsMTA3XSw1NDpbMiwxMDddLDYzOlsyLDEwN10sNjQ6WzIsMTA3XSw2NTpbMiwxMDddLDY3OlsyLDEwN10sNjk6WzIsMTA3XSw3MDpbMiwxMDddLDcxOlsyLDEwN10sNzU6WzIsMTA3XSw4MTpbMiwxMDddLDgyOlsyLDEwN10sODM6WzIsMTA3XSw4ODpbMiwxMDddLDkwOlsyLDEwN10sOTk6WzIsMTA3XSwxMDE6WzIsMTA3XSwxMDI6WzIsMTA3XSwxMDM6WzIsMTA3XSwxMDc6WzIsMTA3XSwxMTU6WzIsMTA3XSwxMjM6WzIsMTA3XSwxMjU6WzIsMTA3XSwxMjY6WzIsMTA3XSwxMjk6WzIsMTA3XSwxMzA6WzIsMTA3XSwxMzE6WzIsMTA3XSwxMzI6WzIsMTA3XSwxMzM6WzIsMTA3XSwxMzQ6WzIsMTA3XX0sezI1OlsyLDQ3XX0sezI1OlsyLDQ4XX0sezE6WzIsNjJdLDY6WzIsNjJdLDI1OlsyLDYyXSwyNjpbMiw2Ml0sMzc6WzIsNjJdLDQ2OlsyLDYyXSw1MTpbMiw2Ml0sNTQ6WzIsNjJdLDYzOlsyLDYyXSw2NDpbMiw2Ml0sNjU6WzIsNjJdLDY3OlsyLDYyXSw2OTpbMiw2Ml0sNzA6WzIsNjJdLDcxOlsyLDYyXSw3NTpbMiw2Ml0sNzc6WzIsNjJdLDgxOlsyLDYyXSw4MjpbMiw2Ml0sODM6WzIsNjJdLDg4OlsyLDYyXSw5MDpbMiw2Ml0sOTk6WzIsNjJdLDEwMTpbMiw2Ml0sMTAyOlsyLDYyXSwxMDM6WzIsNjJdLDEwNzpbMiw2Ml0sMTE1OlsyLDYyXSwxMjM6WzIsNjJdLDEyNTpbMiw2Ml0sMTI2OlsyLDYyXSwxMjc6WzIsNjJdLDEyODpbMiw2Ml0sMTI5OlsyLDYyXSwxMzA6WzIsNjJdLDEzMTpbMiw2Ml0sMTMyOlsyLDYyXSwxMzM6WzIsNjJdLDEzNDpbMiw2Ml0sMTM1OlsyLDYyXX0sezE6WzIsNjVdLDY6WzIsNjVdLDI1OlsyLDY1XSwyNjpbMiw2NV0sMzc6WzIsNjVdLDQ2OlsyLDY1XSw1MTpbMiw2NV0sNTQ6WzIsNjVdLDYzOlsyLDY1XSw2NDpbMiw2NV0sNjU6WzIsNjVdLDY3OlsyLDY1XSw2OTpbMiw2NV0sNzA6WzIsNjVdLDcxOlsyLDY1XSw3NTpbMiw2NV0sNzc6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg4OlsyLDY1XSw5MDpbMiw2NV0sOTk6WzIsNjVdLDEwMTpbMiw2NV0sMTAyOlsyLDY1XSwxMDM6WzIsNjVdLDEwNzpbMiw2NV0sMTE1OlsyLDY1XSwxMjM6WzIsNjVdLDEyNTpbMiw2NV0sMTI2OlsyLDY1XSwxMjc6WzIsNjVdLDEyODpbMiw2NV0sMTI5OlsyLDY1XSwxMzA6WzIsNjVdLDEzMTpbMiw2NV0sMTMyOlsyLDY1XSwxMzM6WzIsNjVdLDEzNDpbMiw2NV0sMTM1OlsyLDY1XX0sezg6MTQ3LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezg6MTQ4LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezg6MTQ5LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezU6MTUwLDg6MTUxLDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjU6WzEsNV0sMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezI3OjE1NiwyODpbMSw3MF0sNTU6MTU3LDU2OjE1OCw2MToxNTIsNzM6WzEsNjddLDg3OlsxLDU0XSwxMTA6MTUzLDExMTpbMSwxNTRdLDExMjoxNTV9LHsxMDk6MTU5LDExMzpbMSwxNjBdLDExNDpbMSwxNjFdfSx7NjpbMiw4NV0sMTI6MTY1LDI1OlsyLDg1XSwyNzoxNjYsMjg6WzEsNzBdLDI5OjE2NywzMDpbMSw2OF0sMzE6WzEsNjldLDM4OjE2MywzOToxNjQsNDE6MTY4LDQzOlsxLDQ2XSw1MTpbMiw4NV0sNzQ6MTYyLDc1OlsyLDg1XSw4NjpbMSwxMTFdfSx7MTpbMiwyN10sNjpbMiwyN10sMjU6WzIsMjddLDI2OlsyLDI3XSw0MDpbMiwyN10sNDY6WzIsMjddLDUxOlsyLDI3XSw1NDpbMiwyN10sNjM6WzIsMjddLDY0OlsyLDI3XSw2NTpbMiwyN10sNjc6WzIsMjddLDY5OlsyLDI3XSw3MDpbMiwyN10sNzE6WzIsMjddLDc1OlsyLDI3XSw4MTpbMiwyN10sODI6WzIsMjddLDgzOlsyLDI3XSw4ODpbMiwyN10sOTA6WzIsMjddLDk5OlsyLDI3XSwxMDE6WzIsMjddLDEwMjpbMiwyN10sMTAzOlsyLDI3XSwxMDc6WzIsMjddLDExNTpbMiwyN10sMTIzOlsyLDI3XSwxMjU6WzIsMjddLDEyNjpbMiwyN10sMTI5OlsyLDI3XSwxMzA6WzIsMjddLDEzMTpbMiwyN10sMTMyOlsyLDI3XSwxMzM6WzIsMjddLDEzNDpbMiwyN119LHsxOlsyLDI4XSw2OlsyLDI4XSwyNTpbMiwyOF0sMjY6WzIsMjhdLDQwOlsyLDI4XSw0NjpbMiwyOF0sNTE6WzIsMjhdLDU0OlsyLDI4XSw2MzpbMiwyOF0sNjQ6WzIsMjhdLDY1OlsyLDI4XSw2NzpbMiwyOF0sNjk6WzIsMjhdLDcwOlsyLDI4XSw3MTpbMiwyOF0sNzU6WzIsMjhdLDgxOlsyLDI4XSw4MjpbMiwyOF0sODM6WzIsMjhdLDg4OlsyLDI4XSw5MDpbMiwyOF0sOTk6WzIsMjhdLDEwMTpbMiwyOF0sMTAyOlsyLDI4XSwxMDM6WzIsMjhdLDEwNzpbMiwyOF0sMTE1OlsyLDI4XSwxMjM6WzIsMjhdLDEyNTpbMiwyOF0sMTI2OlsyLDI4XSwxMjk6WzIsMjhdLDEzMDpbMiwyOF0sMTMxOlsyLDI4XSwxMzI6WzIsMjhdLDEzMzpbMiwyOF0sMTM0OlsyLDI4XX0sezE6WzIsMjZdLDY6WzIsMjZdLDI1OlsyLDI2XSwyNjpbMiwyNl0sMzc6WzIsMjZdLDQwOlsyLDI2XSw0NjpbMiwyNl0sNTE6WzIsMjZdLDU0OlsyLDI2XSw2MzpbMiwyNl0sNjQ6WzIsMjZdLDY1OlsyLDI2XSw2NzpbMiwyNl0sNjk6WzIsMjZdLDcwOlsyLDI2XSw3MTpbMiwyNl0sNzU6WzIsMjZdLDc3OlsyLDI2XSw4MTpbMiwyNl0sODI6WzIsMjZdLDgzOlsyLDI2XSw4ODpbMiwyNl0sOTA6WzIsMjZdLDk5OlsyLDI2XSwxMDE6WzIsMjZdLDEwMjpbMiwyNl0sMTAzOlsyLDI2XSwxMDc6WzIsMjZdLDExMzpbMiwyNl0sMTE0OlsyLDI2XSwxMTU6WzIsMjZdLDEyMzpbMiwyNl0sMTI1OlsyLDI2XSwxMjY6WzIsMjZdLDEyNzpbMiwyNl0sMTI4OlsyLDI2XSwxMjk6WzIsMjZdLDEzMDpbMiwyNl0sMTMxOlsyLDI2XSwxMzI6WzIsMjZdLDEzMzpbMiwyNl0sMTM0OlsyLDI2XSwxMzU6WzIsMjZdfSx7MTpbMiw2XSw2OlsyLDZdLDc6MTY5LDg6Niw5OjcsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNjpbMiw2XSwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDk5OlsyLDZdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7MTpbMiwzXX0sezE6WzIsMjRdLDY6WzIsMjRdLDI1OlsyLDI0XSwyNjpbMiwyNF0sNDY6WzIsMjRdLDUxOlsyLDI0XSw1NDpbMiwyNF0sNjk6WzIsMjRdLDc1OlsyLDI0XSw4MzpbMiwyNF0sODg6WzIsMjRdLDkwOlsyLDI0XSw5NTpbMiwyNF0sOTY6WzIsMjRdLDk5OlsyLDI0XSwxMDE6WzIsMjRdLDEwMjpbMiwyNF0sMTAzOlsyLDI0XSwxMDc6WzIsMjRdLDExNTpbMiwyNF0sMTE4OlsyLDI0XSwxMjA6WzIsMjRdLDEyMzpbMiwyNF0sMTI1OlsyLDI0XSwxMjY6WzIsMjRdLDEyOTpbMiwyNF0sMTMwOlsyLDI0XSwxMzE6WzIsMjRdLDEzMjpbMiwyNF0sMTMzOlsyLDI0XSwxMzQ6WzIsMjRdfSx7NjpbMSw3MV0sMjY6WzEsMTcwXX0sezE6WzIsMTg0XSw2OlsyLDE4NF0sMjU6WzIsMTg0XSwyNjpbMiwxODRdLDQ2OlsyLDE4NF0sNTE6WzIsMTg0XSw1NDpbMiwxODRdLDY5OlsyLDE4NF0sNzU6WzIsMTg0XSw4MzpbMiwxODRdLDg4OlsyLDE4NF0sOTA6WzIsMTg0XSw5OTpbMiwxODRdLDEwMTpbMiwxODRdLDEwMjpbMiwxODRdLDEwMzpbMiwxODRdLDEwNzpbMiwxODRdLDExNTpbMiwxODRdLDEyMzpbMiwxODRdLDEyNTpbMiwxODRdLDEyNjpbMiwxODRdLDEyOTpbMiwxODRdLDEzMDpbMiwxODRdLDEzMTpbMiwxODRdLDEzMjpbMiwxODRdLDEzMzpbMiwxODRdLDEzNDpbMiwxODRdfSx7ODoxNzEsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxNzIsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxNzMsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxNzQsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxNzUsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxNzYsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxNzcsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoxNzgsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7MTpbMiwxNDBdLDY6WzIsMTQwXSwyNTpbMiwxNDBdLDI2OlsyLDE0MF0sNDY6WzIsMTQwXSw1MTpbMiwxNDBdLDU0OlsyLDE0MF0sNjk6WzIsMTQwXSw3NTpbMiwxNDBdLDgzOlsyLDE0MF0sODg6WzIsMTQwXSw5MDpbMiwxNDBdLDk5OlsyLDE0MF0sMTAxOlsyLDE0MF0sMTAyOlsyLDE0MF0sMTAzOlsyLDE0MF0sMTA3OlsyLDE0MF0sMTE1OlsyLDE0MF0sMTIzOlsyLDE0MF0sMTI1OlsyLDE0MF0sMTI2OlsyLDE0MF0sMTI5OlsyLDE0MF0sMTMwOlsyLDE0MF0sMTMxOlsyLDE0MF0sMTMyOlsyLDE0MF0sMTMzOlsyLDE0MF0sMTM0OlsyLDE0MF19LHsxOlsyLDE0NV0sNjpbMiwxNDVdLDI1OlsyLDE0NV0sMjY6WzIsMTQ1XSw0NjpbMiwxNDVdLDUxOlsyLDE0NV0sNTQ6WzIsMTQ1XSw2OTpbMiwxNDVdLDc1OlsyLDE0NV0sODM6WzIsMTQ1XSw4ODpbMiwxNDVdLDkwOlsyLDE0NV0sOTk6WzIsMTQ1XSwxMDE6WzIsMTQ1XSwxMDI6WzIsMTQ1XSwxMDM6WzIsMTQ1XSwxMDc6WzIsMTQ1XSwxMTU6WzIsMTQ1XSwxMjM6WzIsMTQ1XSwxMjU6WzIsMTQ1XSwxMjY6WzIsMTQ1XSwxMjk6WzIsMTQ1XSwxMzA6WzIsMTQ1XSwxMzE6WzIsMTQ1XSwxMzI6WzIsMTQ1XSwxMzM6WzIsMTQ1XSwxMzQ6WzIsMTQ1XX0sezg6MTc5LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezE6WzIsMTM5XSw2OlsyLDEzOV0sMjU6WzIsMTM5XSwyNjpbMiwxMzldLDQ2OlsyLDEzOV0sNTE6WzIsMTM5XSw1NDpbMiwxMzldLDY5OlsyLDEzOV0sNzU6WzIsMTM5XSw4MzpbMiwxMzldLDg4OlsyLDEzOV0sOTA6WzIsMTM5XSw5OTpbMiwxMzldLDEwMTpbMiwxMzldLDEwMjpbMiwxMzldLDEwMzpbMiwxMzldLDEwNzpbMiwxMzldLDExNTpbMiwxMzldLDEyMzpbMiwxMzldLDEyNTpbMiwxMzldLDEyNjpbMiwxMzldLDEyOTpbMiwxMzldLDEzMDpbMiwxMzldLDEzMTpbMiwxMzldLDEzMjpbMiwxMzldLDEzMzpbMiwxMzldLDEzNDpbMiwxMzldfSx7MTpbMiwxNDRdLDY6WzIsMTQ0XSwyNTpbMiwxNDRdLDI2OlsyLDE0NF0sNDY6WzIsMTQ0XSw1MTpbMiwxNDRdLDU0OlsyLDE0NF0sNjk6WzIsMTQ0XSw3NTpbMiwxNDRdLDgzOlsyLDE0NF0sODg6WzIsMTQ0XSw5MDpbMiwxNDRdLDk5OlsyLDE0NF0sMTAxOlsyLDE0NF0sMTAyOlsyLDE0NF0sMTAzOlsyLDE0NF0sMTA3OlsyLDE0NF0sMTE1OlsyLDE0NF0sMTIzOlsyLDE0NF0sMTI1OlsyLDE0NF0sMTI2OlsyLDE0NF0sMTI5OlsyLDE0NF0sMTMwOlsyLDE0NF0sMTMxOlsyLDE0NF0sMTMyOlsyLDE0NF0sMTMzOlsyLDE0NF0sMTM0OlsyLDE0NF19LHs3OToxODAsODI6WzEsMTAzXX0sezE6WzIsNjNdLDY6WzIsNjNdLDI1OlsyLDYzXSwyNjpbMiw2M10sMzc6WzIsNjNdLDQ2OlsyLDYzXSw1MTpbMiw2M10sNTQ6WzIsNjNdLDYzOlsyLDYzXSw2NDpbMiw2M10sNjU6WzIsNjNdLDY3OlsyLDYzXSw2OTpbMiw2M10sNzA6WzIsNjNdLDcxOlsyLDYzXSw3NTpbMiw2M10sNzc6WzIsNjNdLDgxOlsyLDYzXSw4MjpbMiw2M10sODM6WzIsNjNdLDg4OlsyLDYzXSw5MDpbMiw2M10sOTk6WzIsNjNdLDEwMTpbMiw2M10sMTAyOlsyLDYzXSwxMDM6WzIsNjNdLDEwNzpbMiw2M10sMTE1OlsyLDYzXSwxMjM6WzIsNjNdLDEyNTpbMiw2M10sMTI2OlsyLDYzXSwxMjc6WzIsNjNdLDEyODpbMiw2M10sMTI5OlsyLDYzXSwxMzA6WzIsNjNdLDEzMTpbMiw2M10sMTMyOlsyLDYzXSwxMzM6WzIsNjNdLDEzNDpbMiw2M10sMTM1OlsyLDYzXX0sezgyOlsyLDEwM119LHsyNzoxODEsMjg6WzEsNzBdfSx7Mjc6MTgyLDI4OlsxLDcwXX0sezE6WzIsNzddLDY6WzIsNzddLDI1OlsyLDc3XSwyNjpbMiw3N10sMjc6MTgzLDI4OlsxLDcwXSwzNzpbMiw3N10sNDY6WzIsNzddLDUxOlsyLDc3XSw1NDpbMiw3N10sNjM6WzIsNzddLDY0OlsyLDc3XSw2NTpbMiw3N10sNjc6WzIsNzddLDY5OlsyLDc3XSw3MDpbMiw3N10sNzE6WzIsNzddLDc1OlsyLDc3XSw3NzpbMiw3N10sODE6WzIsNzddLDgyOlsyLDc3XSw4MzpbMiw3N10sODg6WzIsNzddLDkwOlsyLDc3XSw5OTpbMiw3N10sMTAxOlsyLDc3XSwxMDI6WzIsNzddLDEwMzpbMiw3N10sMTA3OlsyLDc3XSwxMTU6WzIsNzddLDEyMzpbMiw3N10sMTI1OlsyLDc3XSwxMjY6WzIsNzddLDEyNzpbMiw3N10sMTI4OlsyLDc3XSwxMjk6WzIsNzddLDEzMDpbMiw3N10sMTMxOlsyLDc3XSwxMzI6WzIsNzddLDEzMzpbMiw3N10sMTM0OlsyLDc3XSwxMzU6WzIsNzddfSx7MTpbMiw3OF0sNjpbMiw3OF0sMjU6WzIsNzhdLDI2OlsyLDc4XSwzNzpbMiw3OF0sNDY6WzIsNzhdLDUxOlsyLDc4XSw1NDpbMiw3OF0sNjM6WzIsNzhdLDY0OlsyLDc4XSw2NTpbMiw3OF0sNjc6WzIsNzhdLDY5OlsyLDc4XSw3MDpbMiw3OF0sNzE6WzIsNzhdLDc1OlsyLDc4XSw3NzpbMiw3OF0sODE6WzIsNzhdLDgyOlsyLDc4XSw4MzpbMiw3OF0sODg6WzIsNzhdLDkwOlsyLDc4XSw5OTpbMiw3OF0sMTAxOlsyLDc4XSwxMDI6WzIsNzhdLDEwMzpbMiw3OF0sMTA3OlsyLDc4XSwxMTU6WzIsNzhdLDEyMzpbMiw3OF0sMTI1OlsyLDc4XSwxMjY6WzIsNzhdLDEyNzpbMiw3OF0sMTI4OlsyLDc4XSwxMjk6WzIsNzhdLDEzMDpbMiw3OF0sMTMxOlsyLDc4XSwxMzI6WzIsNzhdLDEzMzpbMiw3OF0sMTM0OlsyLDc4XSwxMzU6WzIsNzhdfSx7ODoxODUsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU0OlsxLDE4OV0sNTU6NDcsNTY6NDgsNTg6MzYsNjA6MjUsNjE6MjYsNjI6MjcsNjg6MTg0LDcyOjE4Niw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw4OToxODcsOTA6WzEsMTg4XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezY2OjE5MCw2NzpbMSw5Nl0sNzA6WzEsOTddLDcxOlsxLDk4XX0sezY2OjE5MSw2NzpbMSw5Nl0sNzA6WzEsOTddLDcxOlsxLDk4XX0sezc5OjE5Miw4MjpbMSwxMDNdfSx7MTpbMiw2NF0sNjpbMiw2NF0sMjU6WzIsNjRdLDI2OlsyLDY0XSwzNzpbMiw2NF0sNDY6WzIsNjRdLDUxOlsyLDY0XSw1NDpbMiw2NF0sNjM6WzIsNjRdLDY0OlsyLDY0XSw2NTpbMiw2NF0sNjc6WzIsNjRdLDY5OlsyLDY0XSw3MDpbMiw2NF0sNzE6WzIsNjRdLDc1OlsyLDY0XSw3NzpbMiw2NF0sODE6WzIsNjRdLDgyOlsyLDY0XSw4MzpbMiw2NF0sODg6WzIsNjRdLDkwOlsyLDY0XSw5OTpbMiw2NF0sMTAxOlsyLDY0XSwxMDI6WzIsNjRdLDEwMzpbMiw2NF0sMTA3OlsyLDY0XSwxMTU6WzIsNjRdLDEyMzpbMiw2NF0sMTI1OlsyLDY0XSwxMjY6WzIsNjRdLDEyNzpbMiw2NF0sMTI4OlsyLDY0XSwxMjk6WzIsNjRdLDEzMDpbMiw2NF0sMTMxOlsyLDY0XSwxMzI6WzIsNjRdLDEzMzpbMiw2NF0sMTM0OlsyLDY0XSwxMzU6WzIsNjRdfSx7ODoxOTMsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNTpbMSwxOTRdLDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjIzLDQxOjYwLDQyOlsxLDQ0XSw0MzpbMSw0Nl0sNDQ6WzEsMjldLDQ3OjMwLDQ4OlsxLDU3XSw0OTpbMSw1OF0sNTU6NDcsNTY6NDgsNTg6MzYsNjA6MjUsNjE6MjYsNjI6MjcsNzM6WzEsNjddLDc2OlsxLDQzXSw4MDpbMSwyOF0sODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHsxOlsyLDEwMV0sNjpbMiwxMDFdLDI1OlsyLDEwMV0sMjY6WzIsMTAxXSw0NjpbMiwxMDFdLDUxOlsyLDEwMV0sNTQ6WzIsMTAxXSw2MzpbMiwxMDFdLDY0OlsyLDEwMV0sNjU6WzIsMTAxXSw2NzpbMiwxMDFdLDY5OlsyLDEwMV0sNzA6WzIsMTAxXSw3MTpbMiwxMDFdLDc1OlsyLDEwMV0sODE6WzIsMTAxXSw4MjpbMiwxMDFdLDgzOlsyLDEwMV0sODg6WzIsMTAxXSw5MDpbMiwxMDFdLDk5OlsyLDEwMV0sMTAxOlsyLDEwMV0sMTAyOlsyLDEwMV0sMTAzOlsyLDEwMV0sMTA3OlsyLDEwMV0sMTE1OlsyLDEwMV0sMTIzOlsyLDEwMV0sMTI1OlsyLDEwMV0sMTI2OlsyLDEwMV0sMTI5OlsyLDEwMV0sMTMwOlsyLDEwMV0sMTMxOlsyLDEwMV0sMTMyOlsyLDEwMV0sMTMzOlsyLDEwMV0sMTM0OlsyLDEwMV19LHs4OjE5Nyw5OjExNSwxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI1OlsxLDE0NF0sMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1NzoxNDUsNTg6MzYsNjA6MjUsNjE6MjYsNjI6MjcsNzM6WzEsNjddLDc2OlsxLDQzXSw4MDpbMSwyOF0sODM6WzEsMTk1XSw4NDoxOTYsODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTE6MTQzLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7NDY6WzEsMTk4XSw1MTpbMSwxOTldfSx7NDY6WzIsNTJdLDUxOlsyLDUyXX0sezM3OlsxLDIwMV0sNDY6WzIsNTRdLDUxOlsyLDU0XSw1NDpbMSwyMDBdfSx7Mzc6WzIsNTddLDQ2OlsyLDU3XSw1MTpbMiw1N10sNTQ6WzIsNTddfSx7Mzc6WzIsNThdLDQ2OlsyLDU4XSw1MTpbMiw1OF0sNTQ6WzIsNThdfSx7Mzc6WzIsNTldLDQ2OlsyLDU5XSw1MTpbMiw1OV0sNTQ6WzIsNTldfSx7Mzc6WzIsNjBdLDQ2OlsyLDYwXSw1MTpbMiw2MF0sNTQ6WzIsNjBdfSx7Mjc6MTQ2LDI4OlsxLDcwXX0sezg6MTk3LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjU6WzEsMTQ0XSwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU3OjE0NSw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NDoxNDIsODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sODg6WzEsMTQxXSw5MToxNDMsOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHsxOlsyLDQ2XSw2OlsyLDQ2XSwyNTpbMiw0Nl0sMjY6WzIsNDZdLDQ2OlsyLDQ2XSw1MTpbMiw0Nl0sNTQ6WzIsNDZdLDY5OlsyLDQ2XSw3NTpbMiw0Nl0sODM6WzIsNDZdLDg4OlsyLDQ2XSw5MDpbMiw0Nl0sOTk6WzIsNDZdLDEwMTpbMiw0Nl0sMTAyOlsyLDQ2XSwxMDM6WzIsNDZdLDEwNzpbMiw0Nl0sMTE1OlsyLDQ2XSwxMjM6WzIsNDZdLDEyNTpbMiw0Nl0sMTI2OlsyLDQ2XSwxMjk6WzIsNDZdLDEzMDpbMiw0Nl0sMTMxOlsyLDQ2XSwxMzI6WzIsNDZdLDEzMzpbMiw0Nl0sMTM0OlsyLDQ2XX0sezE6WzIsMTc3XSw2OlsyLDE3N10sMjU6WzIsMTc3XSwyNjpbMiwxNzddLDQ2OlsyLDE3N10sNTE6WzIsMTc3XSw1NDpbMiwxNzddLDY5OlsyLDE3N10sNzU6WzIsMTc3XSw4MzpbMiwxNzddLDg4OlsyLDE3N10sOTA6WzIsMTc3XSw5OTpbMiwxNzddLDEwMDo4NCwxMDE6WzIsMTc3XSwxMDI6WzIsMTc3XSwxMDM6WzIsMTc3XSwxMDY6ODUsMTA3OlsyLDE3N10sMTA4OjY2LDExNTpbMiwxNzddLDEyMzpbMiwxNzddLDEyNTpbMiwxNzddLDEyNjpbMiwxNzddLDEyOTpbMSw3NV0sMTMwOlsyLDE3N10sMTMxOlsyLDE3N10sMTMyOlsyLDE3N10sMTMzOlsyLDE3N10sMTM0OlsyLDE3N119LHsxMDA6ODcsMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNjo4OCwxMDc6WzEsNjVdLDEwODo2NiwxMjM6WzEsODZdfSx7MTpbMiwxNzhdLDY6WzIsMTc4XSwyNTpbMiwxNzhdLDI2OlsyLDE3OF0sNDY6WzIsMTc4XSw1MTpbMiwxNzhdLDU0OlsyLDE3OF0sNjk6WzIsMTc4XSw3NTpbMiwxNzhdLDgzOlsyLDE3OF0sODg6WzIsMTc4XSw5MDpbMiwxNzhdLDk5OlsyLDE3OF0sMTAwOjg0LDEwMTpbMiwxNzhdLDEwMjpbMiwxNzhdLDEwMzpbMiwxNzhdLDEwNjo4NSwxMDc6WzIsMTc4XSwxMDg6NjYsMTE1OlsyLDE3OF0sMTIzOlsyLDE3OF0sMTI1OlsyLDE3OF0sMTI2OlsyLDE3OF0sMTI5OlsxLDc1XSwxMzA6WzIsMTc4XSwxMzE6WzIsMTc4XSwxMzI6WzIsMTc4XSwxMzM6WzIsMTc4XSwxMzQ6WzIsMTc4XX0sezE6WzIsMTc5XSw2OlsyLDE3OV0sMjU6WzIsMTc5XSwyNjpbMiwxNzldLDQ2OlsyLDE3OV0sNTE6WzIsMTc5XSw1NDpbMiwxNzldLDY5OlsyLDE3OV0sNzU6WzIsMTc5XSw4MzpbMiwxNzldLDg4OlsyLDE3OV0sOTA6WzIsMTc5XSw5OTpbMiwxNzldLDEwMDo4NCwxMDE6WzIsMTc5XSwxMDI6WzIsMTc5XSwxMDM6WzIsMTc5XSwxMDY6ODUsMTA3OlsyLDE3OV0sMTA4OjY2LDExNTpbMiwxNzldLDEyMzpbMiwxNzldLDEyNTpbMiwxNzldLDEyNjpbMiwxNzldLDEyOTpbMSw3NV0sMTMwOlsyLDE3OV0sMTMxOlsyLDE3OV0sMTMyOlsyLDE3OV0sMTMzOlsyLDE3OV0sMTM0OlsyLDE3OV19LHsxOlsyLDE4MF0sNjpbMiwxODBdLDI1OlsyLDE4MF0sMjY6WzIsMTgwXSw0NjpbMiwxODBdLDUxOlsyLDE4MF0sNTQ6WzIsMTgwXSw2MzpbMiw2Nl0sNjQ6WzIsNjZdLDY1OlsyLDY2XSw2NzpbMiw2Nl0sNjk6WzIsMTgwXSw3MDpbMiw2Nl0sNzE6WzIsNjZdLDc1OlsyLDE4MF0sODE6WzIsNjZdLDgyOlsyLDY2XSw4MzpbMiwxODBdLDg4OlsyLDE4MF0sOTA6WzIsMTgwXSw5OTpbMiwxODBdLDEwMTpbMiwxODBdLDEwMjpbMiwxODBdLDEwMzpbMiwxODBdLDEwNzpbMiwxODBdLDExNTpbMiwxODBdLDEyMzpbMiwxODBdLDEyNTpbMiwxODBdLDEyNjpbMiwxODBdLDEyOTpbMiwxODBdLDEzMDpbMiwxODBdLDEzMTpbMiwxODBdLDEzMjpbMiwxODBdLDEzMzpbMiwxODBdLDEzNDpbMiwxODBdfSx7NTk6OTAsNjM6WzEsOTJdLDY0OlsxLDkzXSw2NTpbMSw5NF0sNjY6OTUsNjc6WzEsOTZdLDcwOlsxLDk3XSw3MTpbMSw5OF0sNzg6ODksODE6WzEsOTFdLDgyOlsyLDEwMl19LHs1OToxMDAsNjM6WzEsOTJdLDY0OlsxLDkzXSw2NTpbMSw5NF0sNjY6OTUsNjc6WzEsOTZdLDcwOlsxLDk3XSw3MTpbMSw5OF0sNzg6OTksODE6WzEsOTFdLDgyOlsyLDEwMl19LHsxOlsyLDY5XSw2OlsyLDY5XSwyNTpbMiw2OV0sMjY6WzIsNjldLDQ2OlsyLDY5XSw1MTpbMiw2OV0sNTQ6WzIsNjldLDYzOlsyLDY5XSw2NDpbMiw2OV0sNjU6WzIsNjldLDY3OlsyLDY5XSw2OTpbMiw2OV0sNzA6WzIsNjldLDcxOlsyLDY5XSw3NTpbMiw2OV0sODE6WzIsNjldLDgyOlsyLDY5XSw4MzpbMiw2OV0sODg6WzIsNjldLDkwOlsyLDY5XSw5OTpbMiw2OV0sMTAxOlsyLDY5XSwxMDI6WzIsNjldLDEwMzpbMiw2OV0sMTA3OlsyLDY5XSwxMTU6WzIsNjldLDEyMzpbMiw2OV0sMTI1OlsyLDY5XSwxMjY6WzIsNjldLDEyOTpbMiw2OV0sMTMwOlsyLDY5XSwxMzE6WzIsNjldLDEzMjpbMiw2OV0sMTMzOlsyLDY5XSwxMzQ6WzIsNjldfSx7MTpbMiwxODFdLDY6WzIsMTgxXSwyNTpbMiwxODFdLDI2OlsyLDE4MV0sNDY6WzIsMTgxXSw1MTpbMiwxODFdLDU0OlsyLDE4MV0sNjM6WzIsNjZdLDY0OlsyLDY2XSw2NTpbMiw2Nl0sNjc6WzIsNjZdLDY5OlsyLDE4MV0sNzA6WzIsNjZdLDcxOlsyLDY2XSw3NTpbMiwxODFdLDgxOlsyLDY2XSw4MjpbMiw2Nl0sODM6WzIsMTgxXSw4ODpbMiwxODFdLDkwOlsyLDE4MV0sOTk6WzIsMTgxXSwxMDE6WzIsMTgxXSwxMDI6WzIsMTgxXSwxMDM6WzIsMTgxXSwxMDc6WzIsMTgxXSwxMTU6WzIsMTgxXSwxMjM6WzIsMTgxXSwxMjU6WzIsMTgxXSwxMjY6WzIsMTgxXSwxMjk6WzIsMTgxXSwxMzA6WzIsMTgxXSwxMzE6WzIsMTgxXSwxMzI6WzIsMTgxXSwxMzM6WzIsMTgxXSwxMzQ6WzIsMTgxXX0sezE6WzIsMTgyXSw2OlsyLDE4Ml0sMjU6WzIsMTgyXSwyNjpbMiwxODJdLDQ2OlsyLDE4Ml0sNTE6WzIsMTgyXSw1NDpbMiwxODJdLDY5OlsyLDE4Ml0sNzU6WzIsMTgyXSw4MzpbMiwxODJdLDg4OlsyLDE4Ml0sOTA6WzIsMTgyXSw5OTpbMiwxODJdLDEwMTpbMiwxODJdLDEwMjpbMiwxODJdLDEwMzpbMiwxODJdLDEwNzpbMiwxODJdLDExNTpbMiwxODJdLDEyMzpbMiwxODJdLDEyNTpbMiwxODJdLDEyNjpbMiwxODJdLDEyOTpbMiwxODJdLDEzMDpbMiwxODJdLDEzMTpbMiwxODJdLDEzMjpbMiwxODJdLDEzMzpbMiwxODJdLDEzNDpbMiwxODJdfSx7MTpbMiwxODNdLDY6WzIsMTgzXSwyNTpbMiwxODNdLDI2OlsyLDE4M10sNDY6WzIsMTgzXSw1MTpbMiwxODNdLDU0OlsyLDE4M10sNjk6WzIsMTgzXSw3NTpbMiwxODNdLDgzOlsyLDE4M10sODg6WzIsMTgzXSw5MDpbMiwxODNdLDk5OlsyLDE4M10sMTAxOlsyLDE4M10sMTAyOlsyLDE4M10sMTAzOlsyLDE4M10sMTA3OlsyLDE4M10sMTE1OlsyLDE4M10sMTIzOlsyLDE4M10sMTI1OlsyLDE4M10sMTI2OlsyLDE4M10sMTI5OlsyLDE4M10sMTMwOlsyLDE4M10sMTMxOlsyLDE4M10sMTMyOlsyLDE4M10sMTMzOlsyLDE4M10sMTM0OlsyLDE4M119LHs4OjIwMiw5OjExNSwxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI1OlsxLDIwM10sMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezg6MjA0LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezU6MjA1LDI1OlsxLDVdLDEyMjpbMSwyMDZdfSx7MTpbMiwxMjZdLDY6WzIsMTI2XSwyNTpbMiwxMjZdLDI2OlsyLDEyNl0sNDY6WzIsMTI2XSw1MTpbMiwxMjZdLDU0OlsyLDEyNl0sNjk6WzIsMTI2XSw3NTpbMiwxMjZdLDgzOlsyLDEyNl0sODg6WzIsMTI2XSw5MDpbMiwxMjZdLDk0OjIwNyw5NTpbMSwyMDhdLDk2OlsxLDIwOV0sOTk6WzIsMTI2XSwxMDE6WzIsMTI2XSwxMDI6WzIsMTI2XSwxMDM6WzIsMTI2XSwxMDc6WzIsMTI2XSwxMTU6WzIsMTI2XSwxMjM6WzIsMTI2XSwxMjU6WzIsMTI2XSwxMjY6WzIsMTI2XSwxMjk6WzIsMTI2XSwxMzA6WzIsMTI2XSwxMzE6WzIsMTI2XSwxMzI6WzIsMTI2XSwxMzM6WzIsMTI2XSwxMzQ6WzIsMTI2XX0sezE6WzIsMTM4XSw2OlsyLDEzOF0sMjU6WzIsMTM4XSwyNjpbMiwxMzhdLDQ2OlsyLDEzOF0sNTE6WzIsMTM4XSw1NDpbMiwxMzhdLDY5OlsyLDEzOF0sNzU6WzIsMTM4XSw4MzpbMiwxMzhdLDg4OlsyLDEzOF0sOTA6WzIsMTM4XSw5OTpbMiwxMzhdLDEwMTpbMiwxMzhdLDEwMjpbMiwxMzhdLDEwMzpbMiwxMzhdLDEwNzpbMiwxMzhdLDExNTpbMiwxMzhdLDEyMzpbMiwxMzhdLDEyNTpbMiwxMzhdLDEyNjpbMiwxMzhdLDEyOTpbMiwxMzhdLDEzMDpbMiwxMzhdLDEzMTpbMiwxMzhdLDEzMjpbMiwxMzhdLDEzMzpbMiwxMzhdLDEzNDpbMiwxMzhdfSx7MTpbMiwxNDZdLDY6WzIsMTQ2XSwyNTpbMiwxNDZdLDI2OlsyLDE0Nl0sNDY6WzIsMTQ2XSw1MTpbMiwxNDZdLDU0OlsyLDE0Nl0sNjk6WzIsMTQ2XSw3NTpbMiwxNDZdLDgzOlsyLDE0Nl0sODg6WzIsMTQ2XSw5MDpbMiwxNDZdLDk5OlsyLDE0Nl0sMTAxOlsyLDE0Nl0sMTAyOlsyLDE0Nl0sMTAzOlsyLDE0Nl0sMTA3OlsyLDE0Nl0sMTE1OlsyLDE0Nl0sMTIzOlsyLDE0Nl0sMTI1OlsyLDE0Nl0sMTI2OlsyLDE0Nl0sMTI5OlsyLDE0Nl0sMTMwOlsyLDE0Nl0sMTMxOlsyLDE0Nl0sMTMyOlsyLDE0Nl0sMTMzOlsyLDE0Nl0sMTM0OlsyLDE0Nl19LHsyNTpbMSwyMTBdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDEyMzpbMSw4M10sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7MTE3OjIxMSwxMTk6MjEyLDEyMDpbMSwyMTNdfSx7MTpbMiw5MV0sNjpbMiw5MV0sMjU6WzIsOTFdLDI2OlsyLDkxXSw0NjpbMiw5MV0sNTE6WzIsOTFdLDU0OlsyLDkxXSw2OTpbMiw5MV0sNzU6WzIsOTFdLDgzOlsyLDkxXSw4ODpbMiw5MV0sOTA6WzIsOTFdLDk5OlsyLDkxXSwxMDE6WzIsOTFdLDEwMjpbMiw5MV0sMTAzOlsyLDkxXSwxMDc6WzIsOTFdLDExNTpbMiw5MV0sMTIzOlsyLDkxXSwxMjU6WzIsOTFdLDEyNjpbMiw5MV0sMTI5OlsyLDkxXSwxMzA6WzIsOTFdLDEzMTpbMiw5MV0sMTMyOlsyLDkxXSwxMzM6WzIsOTFdLDEzNDpbMiw5MV19LHsxNDoyMTQsMTU6MTIwLDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjEyMSw0MTo2MCw1NTo0Nyw1Njo0OCw1ODoyMTUsNjA6MjUsNjE6MjYsNjI6MjcsNzM6WzEsNjddLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5ODpbMSw1M119LHsxOlsyLDk0XSw1OjIxNiw2OlsyLDk0XSwyNTpbMSw1XSwyNjpbMiw5NF0sNDY6WzIsOTRdLDUxOlsyLDk0XSw1NDpbMiw5NF0sNjM6WzIsNjZdLDY0OlsyLDY2XSw2NTpbMiw2Nl0sNjc6WzIsNjZdLDY5OlsyLDk0XSw3MDpbMiw2Nl0sNzE6WzIsNjZdLDc1OlsyLDk0XSw3NzpbMSwyMTddLDgxOlsyLDY2XSw4MjpbMiw2Nl0sODM6WzIsOTRdLDg4OlsyLDk0XSw5MDpbMiw5NF0sOTk6WzIsOTRdLDEwMTpbMiw5NF0sMTAyOlsyLDk0XSwxMDM6WzIsOTRdLDEwNzpbMiw5NF0sMTE1OlsyLDk0XSwxMjM6WzIsOTRdLDEyNTpbMiw5NF0sMTI2OlsyLDk0XSwxMjk6WzIsOTRdLDEzMDpbMiw5NF0sMTMxOlsyLDk0XSwxMzI6WzIsOTRdLDEzMzpbMiw5NF0sMTM0OlsyLDk0XX0sezE6WzIsNDJdLDY6WzIsNDJdLDI2OlsyLDQyXSw5OTpbMiw0Ml0sMTAwOjg0LDEwMTpbMiw0Ml0sMTAzOlsyLDQyXSwxMDY6ODUsMTA3OlsyLDQyXSwxMDg6NjYsMTIzOlsyLDQyXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDEzMV0sNjpbMiwxMzFdLDI2OlsyLDEzMV0sOTk6WzIsMTMxXSwxMDA6ODQsMTAxOlsyLDEzMV0sMTAzOlsyLDEzMV0sMTA2Ojg1LDEwNzpbMiwxMzFdLDEwODo2NiwxMjM6WzIsMTMxXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHs2OlsxLDcxXSw5OTpbMSwyMThdfSx7NDoyMTksNzo0LDg6Niw5OjcsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7NjpbMiwxMjJdLDI1OlsyLDEyMl0sNTE6WzIsMTIyXSw1NDpbMSwyMjFdLDg4OlsyLDEyMl0sODk6MjIwLDkwOlsxLDE4OF0sMTAwOjg0LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDY6ODUsMTA3OlsxLDY1XSwxMDg6NjYsMTIzOlsxLDgzXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDEwOV0sNjpbMiwxMDldLDI1OlsyLDEwOV0sMjY6WzIsMTA5XSwzNzpbMiwxMDldLDQ2OlsyLDEwOV0sNTE6WzIsMTA5XSw1NDpbMiwxMDldLDYzOlsyLDEwOV0sNjQ6WzIsMTA5XSw2NTpbMiwxMDldLDY3OlsyLDEwOV0sNjk6WzIsMTA5XSw3MDpbMiwxMDldLDcxOlsyLDEwOV0sNzU6WzIsMTA5XSw4MTpbMiwxMDldLDgyOlsyLDEwOV0sODM6WzIsMTA5XSw4ODpbMiwxMDldLDkwOlsyLDEwOV0sOTk6WzIsMTA5XSwxMDE6WzIsMTA5XSwxMDI6WzIsMTA5XSwxMDM6WzIsMTA5XSwxMDc6WzIsMTA5XSwxMTM6WzIsMTA5XSwxMTQ6WzIsMTA5XSwxMTU6WzIsMTA5XSwxMjM6WzIsMTA5XSwxMjU6WzIsMTA5XSwxMjY6WzIsMTA5XSwxMjk6WzIsMTA5XSwxMzA6WzIsMTA5XSwxMzE6WzIsMTA5XSwxMzI6WzIsMTA5XSwxMzM6WzIsMTA5XSwxMzQ6WzIsMTA5XX0sezY6WzIsNDldLDI1OlsyLDQ5XSw1MDoyMjIsNTE6WzEsMjIzXSw4ODpbMiw0OV19LHs2OlsyLDExN10sMjU6WzIsMTE3XSwyNjpbMiwxMTddLDUxOlsyLDExN10sODM6WzIsMTE3XSw4ODpbMiwxMTddfSx7ODoxOTcsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNTpbMSwxNDRdLDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjIzLDQxOjYwLDQyOlsxLDQ0XSw0MzpbMSw0Nl0sNDQ6WzEsMjldLDQ3OjMwLDQ4OlsxLDU3XSw0OTpbMSw1OF0sNTU6NDcsNTY6NDgsNTc6MTQ1LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg0OjIyNCw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MToxNDMsOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHs2OlsyLDEyM10sMjU6WzIsMTIzXSwyNjpbMiwxMjNdLDUxOlsyLDEyM10sODM6WzIsMTIzXSw4ODpbMiwxMjNdfSx7MTpbMiwxMDhdLDY6WzIsMTA4XSwyNTpbMiwxMDhdLDI2OlsyLDEwOF0sMzc6WzIsMTA4XSw0MDpbMiwxMDhdLDQ2OlsyLDEwOF0sNTE6WzIsMTA4XSw1NDpbMiwxMDhdLDYzOlsyLDEwOF0sNjQ6WzIsMTA4XSw2NTpbMiwxMDhdLDY3OlsyLDEwOF0sNjk6WzIsMTA4XSw3MDpbMiwxMDhdLDcxOlsyLDEwOF0sNzU6WzIsMTA4XSw3NzpbMiwxMDhdLDgxOlsyLDEwOF0sODI6WzIsMTA4XSw4MzpbMiwxMDhdLDg4OlsyLDEwOF0sOTA6WzIsMTA4XSw5OTpbMiwxMDhdLDEwMTpbMiwxMDhdLDEwMjpbMiwxMDhdLDEwMzpbMiwxMDhdLDEwNzpbMiwxMDhdLDExNTpbMiwxMDhdLDEyMzpbMiwxMDhdLDEyNTpbMiwxMDhdLDEyNjpbMiwxMDhdLDEyNzpbMiwxMDhdLDEyODpbMiwxMDhdLDEyOTpbMiwxMDhdLDEzMDpbMiwxMDhdLDEzMTpbMiwxMDhdLDEzMjpbMiwxMDhdLDEzMzpbMiwxMDhdLDEzNDpbMiwxMDhdLDEzNTpbMiwxMDhdfSx7NToyMjUsMjU6WzEsNV0sMTAwOjg0LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDY6ODUsMTA3OlsxLDY1XSwxMDg6NjYsMTIzOlsxLDgzXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDEzNF0sNjpbMiwxMzRdLDI1OlsyLDEzNF0sMjY6WzIsMTM0XSw0NjpbMiwxMzRdLDUxOlsyLDEzNF0sNTQ6WzIsMTM0XSw2OTpbMiwxMzRdLDc1OlsyLDEzNF0sODM6WzIsMTM0XSw4ODpbMiwxMzRdLDkwOlsyLDEzNF0sOTk6WzIsMTM0XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDI6WzEsMjI2XSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMTU6WzIsMTM0XSwxMjM6WzIsMTM0XSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDEzNl0sNjpbMiwxMzZdLDI1OlsyLDEzNl0sMjY6WzIsMTM2XSw0NjpbMiwxMzZdLDUxOlsyLDEzNl0sNTQ6WzIsMTM2XSw2OTpbMiwxMzZdLDc1OlsyLDEzNl0sODM6WzIsMTM2XSw4ODpbMiwxMzZdLDkwOlsyLDEzNl0sOTk6WzIsMTM2XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDI6WzEsMjI3XSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMTU6WzIsMTM2XSwxMjM6WzIsMTM2XSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDE0Ml0sNjpbMiwxNDJdLDI1OlsyLDE0Ml0sMjY6WzIsMTQyXSw0NjpbMiwxNDJdLDUxOlsyLDE0Ml0sNTQ6WzIsMTQyXSw2OTpbMiwxNDJdLDc1OlsyLDE0Ml0sODM6WzIsMTQyXSw4ODpbMiwxNDJdLDkwOlsyLDE0Ml0sOTk6WzIsMTQyXSwxMDE6WzIsMTQyXSwxMDI6WzIsMTQyXSwxMDM6WzIsMTQyXSwxMDc6WzIsMTQyXSwxMTU6WzIsMTQyXSwxMjM6WzIsMTQyXSwxMjU6WzIsMTQyXSwxMjY6WzIsMTQyXSwxMjk6WzIsMTQyXSwxMzA6WzIsMTQyXSwxMzE6WzIsMTQyXSwxMzI6WzIsMTQyXSwxMzM6WzIsMTQyXSwxMzQ6WzIsMTQyXX0sezE6WzIsMTQzXSw2OlsyLDE0M10sMjU6WzIsMTQzXSwyNjpbMiwxNDNdLDQ2OlsyLDE0M10sNTE6WzIsMTQzXSw1NDpbMiwxNDNdLDY5OlsyLDE0M10sNzU6WzIsMTQzXSw4MzpbMiwxNDNdLDg4OlsyLDE0M10sOTA6WzIsMTQzXSw5OTpbMiwxNDNdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMjpbMiwxNDNdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDExNTpbMiwxNDNdLDEyMzpbMiwxNDNdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezE6WzIsMTQ3XSw2OlsyLDE0N10sMjU6WzIsMTQ3XSwyNjpbMiwxNDddLDQ2OlsyLDE0N10sNTE6WzIsMTQ3XSw1NDpbMiwxNDddLDY5OlsyLDE0N10sNzU6WzIsMTQ3XSw4MzpbMiwxNDddLDg4OlsyLDE0N10sOTA6WzIsMTQ3XSw5OTpbMiwxNDddLDEwMTpbMiwxNDddLDEwMjpbMiwxNDddLDEwMzpbMiwxNDddLDEwNzpbMiwxNDddLDExNTpbMiwxNDddLDEyMzpbMiwxNDddLDEyNTpbMiwxNDddLDEyNjpbMiwxNDddLDEyOTpbMiwxNDddLDEzMDpbMiwxNDddLDEzMTpbMiwxNDddLDEzMjpbMiwxNDddLDEzMzpbMiwxNDddLDEzNDpbMiwxNDddfSx7MTEzOlsyLDE0OV0sMTE0OlsyLDE0OV19LHsyNzoxNTYsMjg6WzEsNzBdLDU1OjE1Nyw1NjoxNTgsNzM6WzEsNjddLDg3OlsxLDExMl0sMTEwOjIyOCwxMTI6MTU1fSx7NTE6WzEsMjI5XSwxMTM6WzIsMTU0XSwxMTQ6WzIsMTU0XX0sezUxOlsyLDE1MV0sMTEzOlsyLDE1MV0sMTE0OlsyLDE1MV19LHs1MTpbMiwxNTJdLDExMzpbMiwxNTJdLDExNDpbMiwxNTJdfSx7NTE6WzIsMTUzXSwxMTM6WzIsMTUzXSwxMTQ6WzIsMTUzXX0sezE6WzIsMTQ4XSw2OlsyLDE0OF0sMjU6WzIsMTQ4XSwyNjpbMiwxNDhdLDQ2OlsyLDE0OF0sNTE6WzIsMTQ4XSw1NDpbMiwxNDhdLDY5OlsyLDE0OF0sNzU6WzIsMTQ4XSw4MzpbMiwxNDhdLDg4OlsyLDE0OF0sOTA6WzIsMTQ4XSw5OTpbMiwxNDhdLDEwMTpbMiwxNDhdLDEwMjpbMiwxNDhdLDEwMzpbMiwxNDhdLDEwNzpbMiwxNDhdLDExNTpbMiwxNDhdLDEyMzpbMiwxNDhdLDEyNTpbMiwxNDhdLDEyNjpbMiwxNDhdLDEyOTpbMiwxNDhdLDEzMDpbMiwxNDhdLDEzMTpbMiwxNDhdLDEzMjpbMiwxNDhdLDEzMzpbMiwxNDhdLDEzNDpbMiwxNDhdfSx7ODoyMzAsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoyMzEsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7NjpbMiw0OV0sMjU6WzIsNDldLDUwOjIzMiw1MTpbMSwyMzNdLDc1OlsyLDQ5XX0sezY6WzIsODZdLDI1OlsyLDg2XSwyNjpbMiw4Nl0sNTE6WzIsODZdLDc1OlsyLDg2XX0sezY6WzIsMzVdLDI1OlsyLDM1XSwyNjpbMiwzNV0sNDA6WzEsMjM0XSw1MTpbMiwzNV0sNzU6WzIsMzVdfSx7NjpbMiwzOF0sMjU6WzIsMzhdLDI2OlsyLDM4XSw1MTpbMiwzOF0sNzU6WzIsMzhdfSx7NjpbMiwzOV0sMjU6WzIsMzldLDI2OlsyLDM5XSw0MDpbMiwzOV0sNTE6WzIsMzldLDc1OlsyLDM5XX0sezY6WzIsNDBdLDI1OlsyLDQwXSwyNjpbMiw0MF0sNDA6WzIsNDBdLDUxOlsyLDQwXSw3NTpbMiw0MF19LHs2OlsyLDQxXSwyNTpbMiw0MV0sMjY6WzIsNDFdLDQwOlsyLDQxXSw1MTpbMiw0MV0sNzU6WzIsNDFdfSx7MTpbMiw1XSw2OlsyLDVdLDI2OlsyLDVdLDk5OlsyLDVdfSx7MTpbMiwyNV0sNjpbMiwyNV0sMjU6WzIsMjVdLDI2OlsyLDI1XSw0NjpbMiwyNV0sNTE6WzIsMjVdLDU0OlsyLDI1XSw2OTpbMiwyNV0sNzU6WzIsMjVdLDgzOlsyLDI1XSw4ODpbMiwyNV0sOTA6WzIsMjVdLDk1OlsyLDI1XSw5NjpbMiwyNV0sOTk6WzIsMjVdLDEwMTpbMiwyNV0sMTAyOlsyLDI1XSwxMDM6WzIsMjVdLDEwNzpbMiwyNV0sMTE1OlsyLDI1XSwxMTg6WzIsMjVdLDEyMDpbMiwyNV0sMTIzOlsyLDI1XSwxMjU6WzIsMjVdLDEyNjpbMiwyNV0sMTI5OlsyLDI1XSwxMzA6WzIsMjVdLDEzMTpbMiwyNV0sMTMyOlsyLDI1XSwxMzM6WzIsMjVdLDEzNDpbMiwyNV19LHsxOlsyLDE4NV0sNjpbMiwxODVdLDI1OlsyLDE4NV0sMjY6WzIsMTg1XSw0NjpbMiwxODVdLDUxOlsyLDE4NV0sNTQ6WzIsMTg1XSw2OTpbMiwxODVdLDc1OlsyLDE4NV0sODM6WzIsMTg1XSw4ODpbMiwxODVdLDkwOlsyLDE4NV0sOTk6WzIsMTg1XSwxMDA6ODQsMTAxOlsyLDE4NV0sMTAyOlsyLDE4NV0sMTAzOlsyLDE4NV0sMTA2Ojg1LDEwNzpbMiwxODVdLDEwODo2NiwxMTU6WzIsMTg1XSwxMjM6WzIsMTg1XSwxMjU6WzIsMTg1XSwxMjY6WzIsMTg1XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsyLDE4NV0sMTMyOlsyLDE4NV0sMTMzOlsyLDE4NV0sMTM0OlsyLDE4NV19LHsxOlsyLDE4Nl0sNjpbMiwxODZdLDI1OlsyLDE4Nl0sMjY6WzIsMTg2XSw0NjpbMiwxODZdLDUxOlsyLDE4Nl0sNTQ6WzIsMTg2XSw2OTpbMiwxODZdLDc1OlsyLDE4Nl0sODM6WzIsMTg2XSw4ODpbMiwxODZdLDkwOlsyLDE4Nl0sOTk6WzIsMTg2XSwxMDA6ODQsMTAxOlsyLDE4Nl0sMTAyOlsyLDE4Nl0sMTAzOlsyLDE4Nl0sMTA2Ojg1LDEwNzpbMiwxODZdLDEwODo2NiwxMTU6WzIsMTg2XSwxMjM6WzIsMTg2XSwxMjU6WzIsMTg2XSwxMjY6WzIsMTg2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsyLDE4Nl0sMTMyOlsyLDE4Nl0sMTMzOlsyLDE4Nl0sMTM0OlsyLDE4Nl19LHsxOlsyLDE4N10sNjpbMiwxODddLDI1OlsyLDE4N10sMjY6WzIsMTg3XSw0NjpbMiwxODddLDUxOlsyLDE4N10sNTQ6WzIsMTg3XSw2OTpbMiwxODddLDc1OlsyLDE4N10sODM6WzIsMTg3XSw4ODpbMiwxODddLDkwOlsyLDE4N10sOTk6WzIsMTg3XSwxMDA6ODQsMTAxOlsyLDE4N10sMTAyOlsyLDE4N10sMTAzOlsyLDE4N10sMTA2Ojg1LDEwNzpbMiwxODddLDEwODo2NiwxMTU6WzIsMTg3XSwxMjM6WzIsMTg3XSwxMjU6WzIsMTg3XSwxMjY6WzIsMTg3XSwxMjk6WzEsNzVdLDEzMDpbMiwxODddLDEzMTpbMiwxODddLDEzMjpbMiwxODddLDEzMzpbMiwxODddLDEzNDpbMiwxODddfSx7MTpbMiwxODhdLDY6WzIsMTg4XSwyNTpbMiwxODhdLDI2OlsyLDE4OF0sNDY6WzIsMTg4XSw1MTpbMiwxODhdLDU0OlsyLDE4OF0sNjk6WzIsMTg4XSw3NTpbMiwxODhdLDgzOlsyLDE4OF0sODg6WzIsMTg4XSw5MDpbMiwxODhdLDk5OlsyLDE4OF0sMTAwOjg0LDEwMTpbMiwxODhdLDEwMjpbMiwxODhdLDEwMzpbMiwxODhdLDEwNjo4NSwxMDc6WzIsMTg4XSwxMDg6NjYsMTE1OlsyLDE4OF0sMTIzOlsyLDE4OF0sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzIsMTg4XSwxMzI6WzIsMTg4XSwxMzM6WzIsMTg4XSwxMzQ6WzIsMTg4XX0sezE6WzIsMTg5XSw2OlsyLDE4OV0sMjU6WzIsMTg5XSwyNjpbMiwxODldLDQ2OlsyLDE4OV0sNTE6WzIsMTg5XSw1NDpbMiwxODldLDY5OlsyLDE4OV0sNzU6WzIsMTg5XSw4MzpbMiwxODldLDg4OlsyLDE4OV0sOTA6WzIsMTg5XSw5OTpbMiwxODldLDEwMDo4NCwxMDE6WzIsMTg5XSwxMDI6WzIsMTg5XSwxMDM6WzIsMTg5XSwxMDY6ODUsMTA3OlsyLDE4OV0sMTA4OjY2LDExNTpbMiwxODldLDEyMzpbMiwxODldLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzIsMTg5XSwxMzM6WzIsMTg5XSwxMzQ6WzEsODJdfSx7MTpbMiwxOTBdLDY6WzIsMTkwXSwyNTpbMiwxOTBdLDI2OlsyLDE5MF0sNDY6WzIsMTkwXSw1MTpbMiwxOTBdLDU0OlsyLDE5MF0sNjk6WzIsMTkwXSw3NTpbMiwxOTBdLDgzOlsyLDE5MF0sODg6WzIsMTkwXSw5MDpbMiwxOTBdLDk5OlsyLDE5MF0sMTAwOjg0LDEwMTpbMiwxOTBdLDEwMjpbMiwxOTBdLDEwMzpbMiwxOTBdLDEwNjo4NSwxMDc6WzIsMTkwXSwxMDg6NjYsMTE1OlsyLDE5MF0sMTIzOlsyLDE5MF0sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsyLDE5MF0sMTM0OlsxLDgyXX0sezE6WzIsMTkxXSw2OlsyLDE5MV0sMjU6WzIsMTkxXSwyNjpbMiwxOTFdLDQ2OlsyLDE5MV0sNTE6WzIsMTkxXSw1NDpbMiwxOTFdLDY5OlsyLDE5MV0sNzU6WzIsMTkxXSw4MzpbMiwxOTFdLDg4OlsyLDE5MV0sOTA6WzIsMTkxXSw5OTpbMiwxOTFdLDEwMDo4NCwxMDE6WzIsMTkxXSwxMDI6WzIsMTkxXSwxMDM6WzIsMTkxXSwxMDY6ODUsMTA3OlsyLDE5MV0sMTA4OjY2LDExNTpbMiwxOTFdLDEyMzpbMiwxOTFdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzIsMTkxXSwxMzM6WzIsMTkxXSwxMzQ6WzIsMTkxXX0sezE6WzIsMTc2XSw2OlsyLDE3Nl0sMjU6WzIsMTc2XSwyNjpbMiwxNzZdLDQ2OlsyLDE3Nl0sNTE6WzIsMTc2XSw1NDpbMiwxNzZdLDY5OlsyLDE3Nl0sNzU6WzIsMTc2XSw4MzpbMiwxNzZdLDg4OlsyLDE3Nl0sOTA6WzIsMTc2XSw5OTpbMiwxNzZdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMjpbMiwxNzZdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDExNTpbMiwxNzZdLDEyMzpbMSw4M10sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7MTpbMiwxNzVdLDY6WzIsMTc1XSwyNTpbMiwxNzVdLDI2OlsyLDE3NV0sNDY6WzIsMTc1XSw1MTpbMiwxNzVdLDU0OlsyLDE3NV0sNjk6WzIsMTc1XSw3NTpbMiwxNzVdLDgzOlsyLDE3NV0sODg6WzIsMTc1XSw5MDpbMiwxNzVdLDk5OlsyLDE3NV0sMTAwOjg0LDEwMTpbMSw2Ml0sMTAyOlsyLDE3NV0sMTAzOlsxLDYzXSwxMDY6ODUsMTA3OlsxLDY1XSwxMDg6NjYsMTE1OlsyLDE3NV0sMTIzOlsxLDgzXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDk4XSw2OlsyLDk4XSwyNTpbMiw5OF0sMjY6WzIsOThdLDQ2OlsyLDk4XSw1MTpbMiw5OF0sNTQ6WzIsOThdLDYzOlsyLDk4XSw2NDpbMiw5OF0sNjU6WzIsOThdLDY3OlsyLDk4XSw2OTpbMiw5OF0sNzA6WzIsOThdLDcxOlsyLDk4XSw3NTpbMiw5OF0sODE6WzIsOThdLDgyOlsyLDk4XSw4MzpbMiw5OF0sODg6WzIsOThdLDkwOlsyLDk4XSw5OTpbMiw5OF0sMTAxOlsyLDk4XSwxMDI6WzIsOThdLDEwMzpbMiw5OF0sMTA3OlsyLDk4XSwxMTU6WzIsOThdLDEyMzpbMiw5OF0sMTI1OlsyLDk4XSwxMjY6WzIsOThdLDEyOTpbMiw5OF0sMTMwOlsyLDk4XSwxMzE6WzIsOThdLDEzMjpbMiw5OF0sMTMzOlsyLDk4XSwxMzQ6WzIsOThdfSx7MTpbMiw3NF0sNjpbMiw3NF0sMjU6WzIsNzRdLDI2OlsyLDc0XSwzNzpbMiw3NF0sNDY6WzIsNzRdLDUxOlsyLDc0XSw1NDpbMiw3NF0sNjM6WzIsNzRdLDY0OlsyLDc0XSw2NTpbMiw3NF0sNjc6WzIsNzRdLDY5OlsyLDc0XSw3MDpbMiw3NF0sNzE6WzIsNzRdLDc1OlsyLDc0XSw3NzpbMiw3NF0sODE6WzIsNzRdLDgyOlsyLDc0XSw4MzpbMiw3NF0sODg6WzIsNzRdLDkwOlsyLDc0XSw5OTpbMiw3NF0sMTAxOlsyLDc0XSwxMDI6WzIsNzRdLDEwMzpbMiw3NF0sMTA3OlsyLDc0XSwxMTU6WzIsNzRdLDEyMzpbMiw3NF0sMTI1OlsyLDc0XSwxMjY6WzIsNzRdLDEyNzpbMiw3NF0sMTI4OlsyLDc0XSwxMjk6WzIsNzRdLDEzMDpbMiw3NF0sMTMxOlsyLDc0XSwxMzI6WzIsNzRdLDEzMzpbMiw3NF0sMTM0OlsyLDc0XSwxMzU6WzIsNzRdfSx7MTpbMiw3NV0sNjpbMiw3NV0sMjU6WzIsNzVdLDI2OlsyLDc1XSwzNzpbMiw3NV0sNDY6WzIsNzVdLDUxOlsyLDc1XSw1NDpbMiw3NV0sNjM6WzIsNzVdLDY0OlsyLDc1XSw2NTpbMiw3NV0sNjc6WzIsNzVdLDY5OlsyLDc1XSw3MDpbMiw3NV0sNzE6WzIsNzVdLDc1OlsyLDc1XSw3NzpbMiw3NV0sODE6WzIsNzVdLDgyOlsyLDc1XSw4MzpbMiw3NV0sODg6WzIsNzVdLDkwOlsyLDc1XSw5OTpbMiw3NV0sMTAxOlsyLDc1XSwxMDI6WzIsNzVdLDEwMzpbMiw3NV0sMTA3OlsyLDc1XSwxMTU6WzIsNzVdLDEyMzpbMiw3NV0sMTI1OlsyLDc1XSwxMjY6WzIsNzVdLDEyNzpbMiw3NV0sMTI4OlsyLDc1XSwxMjk6WzIsNzVdLDEzMDpbMiw3NV0sMTMxOlsyLDc1XSwxMzI6WzIsNzVdLDEzMzpbMiw3NV0sMTM0OlsyLDc1XSwxMzU6WzIsNzVdfSx7MTpbMiw3Nl0sNjpbMiw3Nl0sMjU6WzIsNzZdLDI2OlsyLDc2XSwzNzpbMiw3Nl0sNDY6WzIsNzZdLDUxOlsyLDc2XSw1NDpbMiw3Nl0sNjM6WzIsNzZdLDY0OlsyLDc2XSw2NTpbMiw3Nl0sNjc6WzIsNzZdLDY5OlsyLDc2XSw3MDpbMiw3Nl0sNzE6WzIsNzZdLDc1OlsyLDc2XSw3NzpbMiw3Nl0sODE6WzIsNzZdLDgyOlsyLDc2XSw4MzpbMiw3Nl0sODg6WzIsNzZdLDkwOlsyLDc2XSw5OTpbMiw3Nl0sMTAxOlsyLDc2XSwxMDI6WzIsNzZdLDEwMzpbMiw3Nl0sMTA3OlsyLDc2XSwxMTU6WzIsNzZdLDEyMzpbMiw3Nl0sMTI1OlsyLDc2XSwxMjY6WzIsNzZdLDEyNzpbMiw3Nl0sMTI4OlsyLDc2XSwxMjk6WzIsNzZdLDEzMDpbMiw3Nl0sMTMxOlsyLDc2XSwxMzI6WzIsNzZdLDEzMzpbMiw3Nl0sMTM0OlsyLDc2XSwxMzU6WzIsNzZdfSx7Njk6WzEsMjM1XX0sezU0OlsxLDE4OV0sNjk6WzIsODJdLDg5OjIzNiw5MDpbMSwxODhdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDEyMzpbMSw4M10sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7Njk6WzIsODNdfSx7ODoyMzcsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7MTM6WzIsMTExXSwyODpbMiwxMTFdLDMwOlsyLDExMV0sMzE6WzIsMTExXSwzMzpbMiwxMTFdLDM0OlsyLDExMV0sMzU6WzIsMTExXSw0MjpbMiwxMTFdLDQzOlsyLDExMV0sNDQ6WzIsMTExXSw0ODpbMiwxMTFdLDQ5OlsyLDExMV0sNjk6WzIsMTExXSw3MzpbMiwxMTFdLDc2OlsyLDExMV0sODA6WzIsMTExXSw4NTpbMiwxMTFdLDg2OlsyLDExMV0sODc6WzIsMTExXSw5MzpbMiwxMTFdLDk3OlsyLDExMV0sOTg6WzIsMTExXSwxMDE6WzIsMTExXSwxMDM6WzIsMTExXSwxMDU6WzIsMTExXSwxMDc6WzIsMTExXSwxMTY6WzIsMTExXSwxMjI6WzIsMTExXSwxMjQ6WzIsMTExXSwxMjU6WzIsMTExXSwxMjY6WzIsMTExXSwxMjc6WzIsMTExXSwxMjg6WzIsMTExXX0sezEzOlsyLDExMl0sMjg6WzIsMTEyXSwzMDpbMiwxMTJdLDMxOlsyLDExMl0sMzM6WzIsMTEyXSwzNDpbMiwxMTJdLDM1OlsyLDExMl0sNDI6WzIsMTEyXSw0MzpbMiwxMTJdLDQ0OlsyLDExMl0sNDg6WzIsMTEyXSw0OTpbMiwxMTJdLDY5OlsyLDExMl0sNzM6WzIsMTEyXSw3NjpbMiwxMTJdLDgwOlsyLDExMl0sODU6WzIsMTEyXSw4NjpbMiwxMTJdLDg3OlsyLDExMl0sOTM6WzIsMTEyXSw5NzpbMiwxMTJdLDk4OlsyLDExMl0sMTAxOlsyLDExMl0sMTAzOlsyLDExMl0sMTA1OlsyLDExMl0sMTA3OlsyLDExMl0sMTE2OlsyLDExMl0sMTIyOlsyLDExMl0sMTI0OlsyLDExMl0sMTI1OlsyLDExMl0sMTI2OlsyLDExMl0sMTI3OlsyLDExMl0sMTI4OlsyLDExMl19LHsxOlsyLDgwXSw2OlsyLDgwXSwyNTpbMiw4MF0sMjY6WzIsODBdLDM3OlsyLDgwXSw0NjpbMiw4MF0sNTE6WzIsODBdLDU0OlsyLDgwXSw2MzpbMiw4MF0sNjQ6WzIsODBdLDY1OlsyLDgwXSw2NzpbMiw4MF0sNjk6WzIsODBdLDcwOlsyLDgwXSw3MTpbMiw4MF0sNzU6WzIsODBdLDc3OlsyLDgwXSw4MTpbMiw4MF0sODI6WzIsODBdLDgzOlsyLDgwXSw4ODpbMiw4MF0sOTA6WzIsODBdLDk5OlsyLDgwXSwxMDE6WzIsODBdLDEwMjpbMiw4MF0sMTAzOlsyLDgwXSwxMDc6WzIsODBdLDExNTpbMiw4MF0sMTIzOlsyLDgwXSwxMjU6WzIsODBdLDEyNjpbMiw4MF0sMTI3OlsyLDgwXSwxMjg6WzIsODBdLDEyOTpbMiw4MF0sMTMwOlsyLDgwXSwxMzE6WzIsODBdLDEzMjpbMiw4MF0sMTMzOlsyLDgwXSwxMzQ6WzIsODBdLDEzNTpbMiw4MF19LHsxOlsyLDgxXSw2OlsyLDgxXSwyNTpbMiw4MV0sMjY6WzIsODFdLDM3OlsyLDgxXSw0NjpbMiw4MV0sNTE6WzIsODFdLDU0OlsyLDgxXSw2MzpbMiw4MV0sNjQ6WzIsODFdLDY1OlsyLDgxXSw2NzpbMiw4MV0sNjk6WzIsODFdLDcwOlsyLDgxXSw3MTpbMiw4MV0sNzU6WzIsODFdLDc3OlsyLDgxXSw4MTpbMiw4MV0sODI6WzIsODFdLDgzOlsyLDgxXSw4ODpbMiw4MV0sOTA6WzIsODFdLDk5OlsyLDgxXSwxMDE6WzIsODFdLDEwMjpbMiw4MV0sMTAzOlsyLDgxXSwxMDc6WzIsODFdLDExNTpbMiw4MV0sMTIzOlsyLDgxXSwxMjU6WzIsODFdLDEyNjpbMiw4MV0sMTI3OlsyLDgxXSwxMjg6WzIsODFdLDEyOTpbMiw4MV0sMTMwOlsyLDgxXSwxMzE6WzIsODFdLDEzMjpbMiw4MV0sMTMzOlsyLDgxXSwxMzQ6WzIsODFdLDEzNTpbMiw4MV19LHsxOlsyLDk5XSw2OlsyLDk5XSwyNTpbMiw5OV0sMjY6WzIsOTldLDQ2OlsyLDk5XSw1MTpbMiw5OV0sNTQ6WzIsOTldLDYzOlsyLDk5XSw2NDpbMiw5OV0sNjU6WzIsOTldLDY3OlsyLDk5XSw2OTpbMiw5OV0sNzA6WzIsOTldLDcxOlsyLDk5XSw3NTpbMiw5OV0sODE6WzIsOTldLDgyOlsyLDk5XSw4MzpbMiw5OV0sODg6WzIsOTldLDkwOlsyLDk5XSw5OTpbMiw5OV0sMTAxOlsyLDk5XSwxMDI6WzIsOTldLDEwMzpbMiw5OV0sMTA3OlsyLDk5XSwxMTU6WzIsOTldLDEyMzpbMiw5OV0sMTI1OlsyLDk5XSwxMjY6WzIsOTldLDEyOTpbMiw5OV0sMTMwOlsyLDk5XSwxMzE6WzIsOTldLDEzMjpbMiw5OV0sMTMzOlsyLDk5XSwxMzQ6WzIsOTldfSx7MTpbMiwzM10sNjpbMiwzM10sMjU6WzIsMzNdLDI2OlsyLDMzXSw0NjpbMiwzM10sNTE6WzIsMzNdLDU0OlsyLDMzXSw2OTpbMiwzM10sNzU6WzIsMzNdLDgzOlsyLDMzXSw4ODpbMiwzM10sOTA6WzIsMzNdLDk5OlsyLDMzXSwxMDA6ODQsMTAxOlsyLDMzXSwxMDI6WzIsMzNdLDEwMzpbMiwzM10sMTA2Ojg1LDEwNzpbMiwzM10sMTA4OjY2LDExNTpbMiwzM10sMTIzOlsyLDMzXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHs4OjIzOCw5OjExNSwxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjIzLDQxOjYwLDQyOlsxLDQ0XSw0MzpbMSw0Nl0sNDQ6WzEsMjldLDQ3OjMwLDQ4OlsxLDU3XSw0OTpbMSw1OF0sNTU6NDcsNTY6NDgsNTg6MzYsNjA6MjUsNjE6MjYsNjI6MjcsNzM6WzEsNjddLDc2OlsxLDQzXSw4MDpbMSwyOF0sODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHsxOlsyLDEwNF0sNjpbMiwxMDRdLDI1OlsyLDEwNF0sMjY6WzIsMTA0XSw0NjpbMiwxMDRdLDUxOlsyLDEwNF0sNTQ6WzIsMTA0XSw2MzpbMiwxMDRdLDY0OlsyLDEwNF0sNjU6WzIsMTA0XSw2NzpbMiwxMDRdLDY5OlsyLDEwNF0sNzA6WzIsMTA0XSw3MTpbMiwxMDRdLDc1OlsyLDEwNF0sODE6WzIsMTA0XSw4MjpbMiwxMDRdLDgzOlsyLDEwNF0sODg6WzIsMTA0XSw5MDpbMiwxMDRdLDk5OlsyLDEwNF0sMTAxOlsyLDEwNF0sMTAyOlsyLDEwNF0sMTAzOlsyLDEwNF0sMTA3OlsyLDEwNF0sMTE1OlsyLDEwNF0sMTIzOlsyLDEwNF0sMTI1OlsyLDEwNF0sMTI2OlsyLDEwNF0sMTI5OlsyLDEwNF0sMTMwOlsyLDEwNF0sMTMxOlsyLDEwNF0sMTMyOlsyLDEwNF0sMTMzOlsyLDEwNF0sMTM0OlsyLDEwNF19LHs2OlsyLDQ5XSwyNTpbMiw0OV0sNTA6MjM5LDUxOlsxLDIyM10sODM6WzIsNDldfSx7NjpbMiwxMjJdLDI1OlsyLDEyMl0sMjY6WzIsMTIyXSw1MTpbMiwxMjJdLDU0OlsxLDI0MF0sODM6WzIsMTIyXSw4ODpbMiwxMjJdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDEyMzpbMSw4M10sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7NDc6MjQxLDQ4OlsxLDU3XSw0OTpbMSw1OF19LHsyNzoxMDcsMjg6WzEsNzBdLDQxOjEwOCw1MjoyNDIsNTM6MTA2LDU1OjEwOSw1NjoxMTAsNzM6WzEsNjddLDg2OlsxLDExMV0sODc6WzEsMTEyXX0sezQ2OlsyLDU1XSw1MTpbMiw1NV19LHs4OjI0Myw5OjExNSwxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjIzLDQxOjYwLDQyOlsxLDQ0XSw0MzpbMSw0Nl0sNDQ6WzEsMjldLDQ3OjMwLDQ4OlsxLDU3XSw0OTpbMSw1OF0sNTU6NDcsNTY6NDgsNTg6MzYsNjA6MjUsNjE6MjYsNjI6MjcsNzM6WzEsNjddLDc2OlsxLDQzXSw4MDpbMSwyOF0sODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHsxOlsyLDE5Ml0sNjpbMiwxOTJdLDI1OlsyLDE5Ml0sMjY6WzIsMTkyXSw0NjpbMiwxOTJdLDUxOlsyLDE5Ml0sNTQ6WzIsMTkyXSw2OTpbMiwxOTJdLDc1OlsyLDE5Ml0sODM6WzIsMTkyXSw4ODpbMiwxOTJdLDkwOlsyLDE5Ml0sOTk6WzIsMTkyXSwxMDA6ODQsMTAxOlsyLDE5Ml0sMTAyOlsyLDE5Ml0sMTAzOlsyLDE5Ml0sMTA2Ojg1LDEwNzpbMiwxOTJdLDEwODo2NiwxMTU6WzIsMTkyXSwxMjM6WzIsMTkyXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHs4OjI0NCw5OjExNSwxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjIzLDQxOjYwLDQyOlsxLDQ0XSw0MzpbMSw0Nl0sNDQ6WzEsMjldLDQ3OjMwLDQ4OlsxLDU3XSw0OTpbMSw1OF0sNTU6NDcsNTY6NDgsNTg6MzYsNjA6MjUsNjE6MjYsNjI6MjcsNzM6WzEsNjddLDc2OlsxLDQzXSw4MDpbMSwyOF0sODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHsxOlsyLDE5NF0sNjpbMiwxOTRdLDI1OlsyLDE5NF0sMjY6WzIsMTk0XSw0NjpbMiwxOTRdLDUxOlsyLDE5NF0sNTQ6WzIsMTk0XSw2OTpbMiwxOTRdLDc1OlsyLDE5NF0sODM6WzIsMTk0XSw4ODpbMiwxOTRdLDkwOlsyLDE5NF0sOTk6WzIsMTk0XSwxMDA6ODQsMTAxOlsyLDE5NF0sMTAyOlsyLDE5NF0sMTAzOlsyLDE5NF0sMTA2Ojg1LDEwNzpbMiwxOTRdLDEwODo2NiwxMTU6WzIsMTk0XSwxMjM6WzIsMTk0XSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDE3NF0sNjpbMiwxNzRdLDI1OlsyLDE3NF0sMjY6WzIsMTc0XSw0NjpbMiwxNzRdLDUxOlsyLDE3NF0sNTQ6WzIsMTc0XSw2OTpbMiwxNzRdLDc1OlsyLDE3NF0sODM6WzIsMTc0XSw4ODpbMiwxNzRdLDkwOlsyLDE3NF0sOTk6WzIsMTc0XSwxMDE6WzIsMTc0XSwxMDI6WzIsMTc0XSwxMDM6WzIsMTc0XSwxMDc6WzIsMTc0XSwxMTU6WzIsMTc0XSwxMjM6WzIsMTc0XSwxMjU6WzIsMTc0XSwxMjY6WzIsMTc0XSwxMjk6WzIsMTc0XSwxMzA6WzIsMTc0XSwxMzE6WzIsMTc0XSwxMzI6WzIsMTc0XSwxMzM6WzIsMTc0XSwxMzQ6WzIsMTc0XX0sezg6MjQ1LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezE6WzIsMTI3XSw2OlsyLDEyN10sMjU6WzIsMTI3XSwyNjpbMiwxMjddLDQ2OlsyLDEyN10sNTE6WzIsMTI3XSw1NDpbMiwxMjddLDY5OlsyLDEyN10sNzU6WzIsMTI3XSw4MzpbMiwxMjddLDg4OlsyLDEyN10sOTA6WzIsMTI3XSw5NTpbMSwyNDZdLDk5OlsyLDEyN10sMTAxOlsyLDEyN10sMTAyOlsyLDEyN10sMTAzOlsyLDEyN10sMTA3OlsyLDEyN10sMTE1OlsyLDEyN10sMTIzOlsyLDEyN10sMTI1OlsyLDEyN10sMTI2OlsyLDEyN10sMTI5OlsyLDEyN10sMTMwOlsyLDEyN10sMTMxOlsyLDEyN10sMTMyOlsyLDEyN10sMTMzOlsyLDEyN10sMTM0OlsyLDEyN119LHs1OjI0NywyNTpbMSw1XX0sezI3OjI0OCwyODpbMSw3MF19LHsxMTc6MjQ5LDExOToyMTIsMTIwOlsxLDIxM119LHsyNjpbMSwyNTBdLDExODpbMSwyNTFdLDExOToyNTIsMTIwOlsxLDIxM119LHsyNjpbMiwxNjddLDExODpbMiwxNjddLDEyMDpbMiwxNjddfSx7ODoyNTQsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkyOjI1Myw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezE6WzIsOTJdLDU6MjU1LDY6WzIsOTJdLDI1OlsxLDVdLDI2OlsyLDkyXSw0NjpbMiw5Ml0sNTE6WzIsOTJdLDU0OlsyLDkyXSw1OTo5MCw2MzpbMSw5Ml0sNjQ6WzEsOTNdLDY1OlsxLDk0XSw2Njo5NSw2NzpbMSw5Nl0sNjk6WzIsOTJdLDcwOlsxLDk3XSw3MTpbMSw5OF0sNzU6WzIsOTJdLDc4Ojg5LDgxOlsxLDkxXSw4MjpbMiwxMDJdLDgzOlsyLDkyXSw4ODpbMiw5Ml0sOTA6WzIsOTJdLDk5OlsyLDkyXSwxMDE6WzIsOTJdLDEwMjpbMiw5Ml0sMTAzOlsyLDkyXSwxMDc6WzIsOTJdLDExNTpbMiw5Ml0sMTIzOlsyLDkyXSwxMjU6WzIsOTJdLDEyNjpbMiw5Ml0sMTI5OlsyLDkyXSwxMzA6WzIsOTJdLDEzMTpbMiw5Ml0sMTMyOlsyLDkyXSwxMzM6WzIsOTJdLDEzNDpbMiw5Ml19LHsxOlsyLDY2XSw2OlsyLDY2XSwyNTpbMiw2Nl0sMjY6WzIsNjZdLDQ2OlsyLDY2XSw1MTpbMiw2Nl0sNTQ6WzIsNjZdLDYzOlsyLDY2XSw2NDpbMiw2Nl0sNjU6WzIsNjZdLDY3OlsyLDY2XSw2OTpbMiw2Nl0sNzA6WzIsNjZdLDcxOlsyLDY2XSw3NTpbMiw2Nl0sODE6WzIsNjZdLDgyOlsyLDY2XSw4MzpbMiw2Nl0sODg6WzIsNjZdLDkwOlsyLDY2XSw5OTpbMiw2Nl0sMTAxOlsyLDY2XSwxMDI6WzIsNjZdLDEwMzpbMiw2Nl0sMTA3OlsyLDY2XSwxMTU6WzIsNjZdLDEyMzpbMiw2Nl0sMTI1OlsyLDY2XSwxMjY6WzIsNjZdLDEyOTpbMiw2Nl0sMTMwOlsyLDY2XSwxMzE6WzIsNjZdLDEzMjpbMiw2Nl0sMTMzOlsyLDY2XSwxMzQ6WzIsNjZdfSx7MTpbMiw5NV0sNjpbMiw5NV0sMjU6WzIsOTVdLDI2OlsyLDk1XSw0NjpbMiw5NV0sNTE6WzIsOTVdLDU0OlsyLDk1XSw2OTpbMiw5NV0sNzU6WzIsOTVdLDgzOlsyLDk1XSw4ODpbMiw5NV0sOTA6WzIsOTVdLDk5OlsyLDk1XSwxMDE6WzIsOTVdLDEwMjpbMiw5NV0sMTAzOlsyLDk1XSwxMDc6WzIsOTVdLDExNTpbMiw5NV0sMTIzOlsyLDk1XSwxMjU6WzIsOTVdLDEyNjpbMiw5NV0sMTI5OlsyLDk1XSwxMzA6WzIsOTVdLDEzMTpbMiw5NV0sMTMyOlsyLDk1XSwxMzM6WzIsOTVdLDEzNDpbMiw5NV19LHsxNDoyNTYsMTU6MTIwLDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjEyMSw0MTo2MCw1NTo0Nyw1Njo0OCw1ODoyMTUsNjA6MjUsNjE6MjYsNjI6MjcsNzM6WzEsNjddLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5ODpbMSw1M119LHsxOlsyLDEzMl0sNjpbMiwxMzJdLDI1OlsyLDEzMl0sMjY6WzIsMTMyXSw0NjpbMiwxMzJdLDUxOlsyLDEzMl0sNTQ6WzIsMTMyXSw2MzpbMiwxMzJdLDY0OlsyLDEzMl0sNjU6WzIsMTMyXSw2NzpbMiwxMzJdLDY5OlsyLDEzMl0sNzA6WzIsMTMyXSw3MTpbMiwxMzJdLDc1OlsyLDEzMl0sODE6WzIsMTMyXSw4MjpbMiwxMzJdLDgzOlsyLDEzMl0sODg6WzIsMTMyXSw5MDpbMiwxMzJdLDk5OlsyLDEzMl0sMTAxOlsyLDEzMl0sMTAyOlsyLDEzMl0sMTAzOlsyLDEzMl0sMTA3OlsyLDEzMl0sMTE1OlsyLDEzMl0sMTIzOlsyLDEzMl0sMTI1OlsyLDEzMl0sMTI2OlsyLDEzMl0sMTI5OlsyLDEzMl0sMTMwOlsyLDEzMl0sMTMxOlsyLDEzMl0sMTMyOlsyLDEzMl0sMTMzOlsyLDEzMl0sMTM0OlsyLDEzMl19LHs2OlsxLDcxXSwyNjpbMSwyNTddfSx7ODoyNTgsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7NjpbMiw2MV0sMTM6WzIsMTEyXSwyNTpbMiw2MV0sMjg6WzIsMTEyXSwzMDpbMiwxMTJdLDMxOlsyLDExMl0sMzM6WzIsMTEyXSwzNDpbMiwxMTJdLDM1OlsyLDExMl0sNDI6WzIsMTEyXSw0MzpbMiwxMTJdLDQ0OlsyLDExMl0sNDg6WzIsMTEyXSw0OTpbMiwxMTJdLDUxOlsyLDYxXSw3MzpbMiwxMTJdLDc2OlsyLDExMl0sODA6WzIsMTEyXSw4NTpbMiwxMTJdLDg2OlsyLDExMl0sODc6WzIsMTEyXSw4ODpbMiw2MV0sOTM6WzIsMTEyXSw5NzpbMiwxMTJdLDk4OlsyLDExMl0sMTAxOlsyLDExMl0sMTAzOlsyLDExMl0sMTA1OlsyLDExMl0sMTA3OlsyLDExMl0sMTE2OlsyLDExMl0sMTIyOlsyLDExMl0sMTI0OlsyLDExMl0sMTI1OlsyLDExMl0sMTI2OlsyLDExMl0sMTI3OlsyLDExMl0sMTI4OlsyLDExMl19LHs2OlsxLDI2MF0sMjU6WzEsMjYxXSw4ODpbMSwyNTldfSx7NjpbMiw1MF0sODoxOTcsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNTpbMiw1MF0sMjY6WzIsNTBdLDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjIzLDQxOjYwLDQyOlsxLDQ0XSw0MzpbMSw0Nl0sNDQ6WzEsMjldLDQ3OjMwLDQ4OlsxLDU3XSw0OTpbMSw1OF0sNTU6NDcsNTY6NDgsNTc6MTQ1LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDgzOlsyLDUwXSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw4ODpbMiw1MF0sOTE6MjYyLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7NjpbMiw0OV0sMjU6WzIsNDldLDI2OlsyLDQ5XSw1MDoyNjMsNTE6WzEsMjIzXX0sezE6WzIsMTcxXSw2OlsyLDE3MV0sMjU6WzIsMTcxXSwyNjpbMiwxNzFdLDQ2OlsyLDE3MV0sNTE6WzIsMTcxXSw1NDpbMiwxNzFdLDY5OlsyLDE3MV0sNzU6WzIsMTcxXSw4MzpbMiwxNzFdLDg4OlsyLDE3MV0sOTA6WzIsMTcxXSw5OTpbMiwxNzFdLDEwMTpbMiwxNzFdLDEwMjpbMiwxNzFdLDEwMzpbMiwxNzFdLDEwNzpbMiwxNzFdLDExNTpbMiwxNzFdLDExODpbMiwxNzFdLDEyMzpbMiwxNzFdLDEyNTpbMiwxNzFdLDEyNjpbMiwxNzFdLDEyOTpbMiwxNzFdLDEzMDpbMiwxNzFdLDEzMTpbMiwxNzFdLDEzMjpbMiwxNzFdLDEzMzpbMiwxNzFdLDEzNDpbMiwxNzFdfSx7ODoyNjQsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7ODoyNjUsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7MTEzOlsyLDE1MF0sMTE0OlsyLDE1MF19LHsyNzoxNTYsMjg6WzEsNzBdLDU1OjE1Nyw1NjoxNTgsNzM6WzEsNjddLDg3OlsxLDExMl0sMTEyOjI2Nn0sezE6WzIsMTU2XSw2OlsyLDE1Nl0sMjU6WzIsMTU2XSwyNjpbMiwxNTZdLDQ2OlsyLDE1Nl0sNTE6WzIsMTU2XSw1NDpbMiwxNTZdLDY5OlsyLDE1Nl0sNzU6WzIsMTU2XSw4MzpbMiwxNTZdLDg4OlsyLDE1Nl0sOTA6WzIsMTU2XSw5OTpbMiwxNTZdLDEwMDo4NCwxMDE6WzIsMTU2XSwxMDI6WzEsMjY3XSwxMDM6WzIsMTU2XSwxMDY6ODUsMTA3OlsyLDE1Nl0sMTA4OjY2LDExNTpbMSwyNjhdLDEyMzpbMiwxNTZdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezE6WzIsMTU3XSw2OlsyLDE1N10sMjU6WzIsMTU3XSwyNjpbMiwxNTddLDQ2OlsyLDE1N10sNTE6WzIsMTU3XSw1NDpbMiwxNTddLDY5OlsyLDE1N10sNzU6WzIsMTU3XSw4MzpbMiwxNTddLDg4OlsyLDE1N10sOTA6WzIsMTU3XSw5OTpbMiwxNTddLDEwMDo4NCwxMDE6WzIsMTU3XSwxMDI6WzEsMjY5XSwxMDM6WzIsMTU3XSwxMDY6ODUsMTA3OlsyLDE1N10sMTA4OjY2LDExNTpbMiwxNTddLDEyMzpbMiwxNTddLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezY6WzEsMjcxXSwyNTpbMSwyNzJdLDc1OlsxLDI3MF19LHs2OlsyLDUwXSwxMjoxNjUsMjU6WzIsNTBdLDI2OlsyLDUwXSwyNzoxNjYsMjg6WzEsNzBdLDI5OjE2NywzMDpbMSw2OF0sMzE6WzEsNjldLDM4OjI3MywzOToxNjQsNDE6MTY4LDQzOlsxLDQ2XSw3NTpbMiw1MF0sODY6WzEsMTExXX0sezg6Mjc0LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjU6WzEsMjc1XSwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7MTpbMiw3OV0sNjpbMiw3OV0sMjU6WzIsNzldLDI2OlsyLDc5XSwzNzpbMiw3OV0sNDY6WzIsNzldLDUxOlsyLDc5XSw1NDpbMiw3OV0sNjM6WzIsNzldLDY0OlsyLDc5XSw2NTpbMiw3OV0sNjc6WzIsNzldLDY5OlsyLDc5XSw3MDpbMiw3OV0sNzE6WzIsNzldLDc1OlsyLDc5XSw3NzpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODg6WzIsNzldLDkwOlsyLDc5XSw5OTpbMiw3OV0sMTAxOlsyLDc5XSwxMDI6WzIsNzldLDEwMzpbMiw3OV0sMTA3OlsyLDc5XSwxMTU6WzIsNzldLDEyMzpbMiw3OV0sMTI1OlsyLDc5XSwxMjY6WzIsNzldLDEyNzpbMiw3OV0sMTI4OlsyLDc5XSwxMjk6WzIsNzldLDEzMDpbMiw3OV0sMTMxOlsyLDc5XSwxMzI6WzIsNzldLDEzMzpbMiw3OV0sMTM0OlsyLDc5XSwxMzU6WzIsNzldfSx7ODoyNzYsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDY5OlsyLDExNV0sNzM6WzEsNjddLDc2OlsxLDQzXSw4MDpbMSwyOF0sODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTM6WzEsMzhdLDk3OlsxLDQ1XSw5ODpbMSw1M10sMTAwOjM5LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDQ6NDAsMTA1OlsxLDY0XSwxMDY6NDEsMTA3OlsxLDY1XSwxMDg6NjYsMTE2OlsxLDQyXSwxMjE6MzcsMTIyOlsxLDYxXSwxMjQ6WzEsMzFdLDEyNTpbMSwzMl0sMTI2OlsxLDMzXSwxMjc6WzEsMzRdLDEyODpbMSwzNV19LHs2OTpbMiwxMTZdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDEyMzpbMSw4M10sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7MjY6WzEsMjc3XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMjM6WzEsODNdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezY6WzEsMjYwXSwyNTpbMSwyNjFdLDgzOlsxLDI3OF19LHs2OlsyLDYxXSwyNTpbMiw2MV0sMjY6WzIsNjFdLDUxOlsyLDYxXSw4MzpbMiw2MV0sODg6WzIsNjFdfSx7NToyNzksMjU6WzEsNV19LHs0NjpbMiw1M10sNTE6WzIsNTNdfSx7NDY6WzIsNTZdLDUxOlsyLDU2XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMjM6WzEsODNdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezI2OlsxLDI4MF0sMTAwOjg0LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDY6ODUsMTA3OlsxLDY1XSwxMDg6NjYsMTIzOlsxLDgzXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHs1OjI4MSwyNTpbMSw1XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMjM6WzEsODNdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezU6MjgyLDI1OlsxLDVdfSx7MTpbMiwxMjhdLDY6WzIsMTI4XSwyNTpbMiwxMjhdLDI2OlsyLDEyOF0sNDY6WzIsMTI4XSw1MTpbMiwxMjhdLDU0OlsyLDEyOF0sNjk6WzIsMTI4XSw3NTpbMiwxMjhdLDgzOlsyLDEyOF0sODg6WzIsMTI4XSw5MDpbMiwxMjhdLDk5OlsyLDEyOF0sMTAxOlsyLDEyOF0sMTAyOlsyLDEyOF0sMTAzOlsyLDEyOF0sMTA3OlsyLDEyOF0sMTE1OlsyLDEyOF0sMTIzOlsyLDEyOF0sMTI1OlsyLDEyOF0sMTI2OlsyLDEyOF0sMTI5OlsyLDEyOF0sMTMwOlsyLDEyOF0sMTMxOlsyLDEyOF0sMTMyOlsyLDEyOF0sMTMzOlsyLDEyOF0sMTM0OlsyLDEyOF19LHs1OjI4MywyNTpbMSw1XX0sezI2OlsxLDI4NF0sMTE4OlsxLDI4NV0sMTE5OjI1MiwxMjA6WzEsMjEzXX0sezE6WzIsMTY1XSw2OlsyLDE2NV0sMjU6WzIsMTY1XSwyNjpbMiwxNjVdLDQ2OlsyLDE2NV0sNTE6WzIsMTY1XSw1NDpbMiwxNjVdLDY5OlsyLDE2NV0sNzU6WzIsMTY1XSw4MzpbMiwxNjVdLDg4OlsyLDE2NV0sOTA6WzIsMTY1XSw5OTpbMiwxNjVdLDEwMTpbMiwxNjVdLDEwMjpbMiwxNjVdLDEwMzpbMiwxNjVdLDEwNzpbMiwxNjVdLDExNTpbMiwxNjVdLDEyMzpbMiwxNjVdLDEyNTpbMiwxNjVdLDEyNjpbMiwxNjVdLDEyOTpbMiwxNjVdLDEzMDpbMiwxNjVdLDEzMTpbMiwxNjVdLDEzMjpbMiwxNjVdLDEzMzpbMiwxNjVdLDEzNDpbMiwxNjVdfSx7NToyODYsMjU6WzEsNV19LHsyNjpbMiwxNjhdLDExODpbMiwxNjhdLDEyMDpbMiwxNjhdfSx7NToyODcsMjU6WzEsNV0sNTE6WzEsMjg4XX0sezI1OlsyLDEyNF0sNTE6WzIsMTI0XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMjM6WzEsODNdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezE6WzIsOTNdLDY6WzIsOTNdLDI1OlsyLDkzXSwyNjpbMiw5M10sNDY6WzIsOTNdLDUxOlsyLDkzXSw1NDpbMiw5M10sNjk6WzIsOTNdLDc1OlsyLDkzXSw4MzpbMiw5M10sODg6WzIsOTNdLDkwOlsyLDkzXSw5OTpbMiw5M10sMTAxOlsyLDkzXSwxMDI6WzIsOTNdLDEwMzpbMiw5M10sMTA3OlsyLDkzXSwxMTU6WzIsOTNdLDEyMzpbMiw5M10sMTI1OlsyLDkzXSwxMjY6WzIsOTNdLDEyOTpbMiw5M10sMTMwOlsyLDkzXSwxMzE6WzIsOTNdLDEzMjpbMiw5M10sMTMzOlsyLDkzXSwxMzQ6WzIsOTNdfSx7MTpbMiw5Nl0sNToyODksNjpbMiw5Nl0sMjU6WzEsNV0sMjY6WzIsOTZdLDQ2OlsyLDk2XSw1MTpbMiw5Nl0sNTQ6WzIsOTZdLDU5OjkwLDYzOlsxLDkyXSw2NDpbMSw5M10sNjU6WzEsOTRdLDY2Ojk1LDY3OlsxLDk2XSw2OTpbMiw5Nl0sNzA6WzEsOTddLDcxOlsxLDk4XSw3NTpbMiw5Nl0sNzg6ODksODE6WzEsOTFdLDgyOlsyLDEwMl0sODM6WzIsOTZdLDg4OlsyLDk2XSw5MDpbMiw5Nl0sOTk6WzIsOTZdLDEwMTpbMiw5Nl0sMTAyOlsyLDk2XSwxMDM6WzIsOTZdLDEwNzpbMiw5Nl0sMTE1OlsyLDk2XSwxMjM6WzIsOTZdLDEyNTpbMiw5Nl0sMTI2OlsyLDk2XSwxMjk6WzIsOTZdLDEzMDpbMiw5Nl0sMTMxOlsyLDk2XSwxMzI6WzIsOTZdLDEzMzpbMiw5Nl0sMTM0OlsyLDk2XX0sezk5OlsxLDI5MF19LHs4ODpbMSwyOTFdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDEyMzpbMSw4M10sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7MTpbMiwxMTBdLDY6WzIsMTEwXSwyNTpbMiwxMTBdLDI2OlsyLDExMF0sMzc6WzIsMTEwXSw0NjpbMiwxMTBdLDUxOlsyLDExMF0sNTQ6WzIsMTEwXSw2MzpbMiwxMTBdLDY0OlsyLDExMF0sNjU6WzIsMTEwXSw2NzpbMiwxMTBdLDY5OlsyLDExMF0sNzA6WzIsMTEwXSw3MTpbMiwxMTBdLDc1OlsyLDExMF0sODE6WzIsMTEwXSw4MjpbMiwxMTBdLDgzOlsyLDExMF0sODg6WzIsMTEwXSw5MDpbMiwxMTBdLDk5OlsyLDExMF0sMTAxOlsyLDExMF0sMTAyOlsyLDExMF0sMTAzOlsyLDExMF0sMTA3OlsyLDExMF0sMTEzOlsyLDExMF0sMTE0OlsyLDExMF0sMTE1OlsyLDExMF0sMTIzOlsyLDExMF0sMTI1OlsyLDExMF0sMTI2OlsyLDExMF0sMTI5OlsyLDExMF0sMTMwOlsyLDExMF0sMTMxOlsyLDExMF0sMTMyOlsyLDExMF0sMTMzOlsyLDExMF0sMTM0OlsyLDExMF19LHs4OjE5Nyw5OjExNSwxMDoxOSwxMToyMCwxMjoyMSwxMzpbMSwyMl0sMTQ6OCwxNTo5LDE2OjEwLDE3OjExLDE4OjEyLDE5OjEzLDIwOjE0LDIxOjE1LDIyOjE2LDIzOjE3LDI0OjE4LDI3OjU5LDI4OlsxLDcwXSwyOTo0OSwzMDpbMSw2OF0sMzE6WzEsNjldLDMyOjI0LDMzOlsxLDUwXSwzNDpbMSw1MV0sMzU6WzEsNTJdLDM2OjIzLDQxOjYwLDQyOlsxLDQ0XSw0MzpbMSw0Nl0sNDQ6WzEsMjldLDQ3OjMwLDQ4OlsxLDU3XSw0OTpbMSw1OF0sNTU6NDcsNTY6NDgsNTc6MTQ1LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkxOjI5Miw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezg6MTk3LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjU6WzEsMTQ0XSwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU3OjE0NSw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NDoyOTMsODU6WzEsNTVdLDg2OlsxLDU2XSw4NzpbMSw1NF0sOTE6MTQzLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7NjpbMiwxMThdLDI1OlsyLDExOF0sMjY6WzIsMTE4XSw1MTpbMiwxMThdLDgzOlsyLDExOF0sODg6WzIsMTE4XX0sezY6WzEsMjYwXSwyNTpbMSwyNjFdLDI2OlsxLDI5NF19LHsxOlsyLDEzNV0sNjpbMiwxMzVdLDI1OlsyLDEzNV0sMjY6WzIsMTM1XSw0NjpbMiwxMzVdLDUxOlsyLDEzNV0sNTQ6WzIsMTM1XSw2OTpbMiwxMzVdLDc1OlsyLDEzNV0sODM6WzIsMTM1XSw4ODpbMiwxMzVdLDkwOlsyLDEzNV0sOTk6WzIsMTM1XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDI6WzIsMTM1XSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMTU6WzIsMTM1XSwxMjM6WzIsMTM1XSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDEzN10sNjpbMiwxMzddLDI1OlsyLDEzN10sMjY6WzIsMTM3XSw0NjpbMiwxMzddLDUxOlsyLDEzN10sNTQ6WzIsMTM3XSw2OTpbMiwxMzddLDc1OlsyLDEzN10sODM6WzIsMTM3XSw4ODpbMiwxMzddLDkwOlsyLDEzN10sOTk6WzIsMTM3XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDI6WzIsMTM3XSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMTU6WzIsMTM3XSwxMjM6WzIsMTM3XSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxMTM6WzIsMTU1XSwxMTQ6WzIsMTU1XX0sezg6Mjk1LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezg6Mjk2LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezg6Mjk3LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezE6WzIsODRdLDY6WzIsODRdLDI1OlsyLDg0XSwyNjpbMiw4NF0sMzc6WzIsODRdLDQ2OlsyLDg0XSw1MTpbMiw4NF0sNTQ6WzIsODRdLDYzOlsyLDg0XSw2NDpbMiw4NF0sNjU6WzIsODRdLDY3OlsyLDg0XSw2OTpbMiw4NF0sNzA6WzIsODRdLDcxOlsyLDg0XSw3NTpbMiw4NF0sODE6WzIsODRdLDgyOlsyLDg0XSw4MzpbMiw4NF0sODg6WzIsODRdLDkwOlsyLDg0XSw5OTpbMiw4NF0sMTAxOlsyLDg0XSwxMDI6WzIsODRdLDEwMzpbMiw4NF0sMTA3OlsyLDg0XSwxMTM6WzIsODRdLDExNDpbMiw4NF0sMTE1OlsyLDg0XSwxMjM6WzIsODRdLDEyNTpbMiw4NF0sMTI2OlsyLDg0XSwxMjk6WzIsODRdLDEzMDpbMiw4NF0sMTMxOlsyLDg0XSwxMzI6WzIsODRdLDEzMzpbMiw4NF0sMTM0OlsyLDg0XX0sezEyOjE2NSwyNzoxNjYsMjg6WzEsNzBdLDI5OjE2NywzMDpbMSw2OF0sMzE6WzEsNjldLDM4OjI5OCwzOToxNjQsNDE6MTY4LDQzOlsxLDQ2XSw4NjpbMSwxMTFdfSx7NjpbMiw4NV0sMTI6MTY1LDI1OlsyLDg1XSwyNjpbMiw4NV0sMjc6MTY2LDI4OlsxLDcwXSwyOToxNjcsMzA6WzEsNjhdLDMxOlsxLDY5XSwzODoxNjMsMzk6MTY0LDQxOjE2OCw0MzpbMSw0Nl0sNTE6WzIsODVdLDc0OjI5OSw4NjpbMSwxMTFdfSx7NjpbMiw4N10sMjU6WzIsODddLDI2OlsyLDg3XSw1MTpbMiw4N10sNzU6WzIsODddfSx7NjpbMiwzNl0sMjU6WzIsMzZdLDI2OlsyLDM2XSw1MTpbMiwzNl0sNzU6WzIsMzZdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDEyMzpbMSw4M10sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7ODozMDAsOToxMTUsMTA6MTksMTE6MjAsMTI6MjEsMTM6WzEsMjJdLDE0OjgsMTU6OSwxNjoxMCwxNzoxMSwxODoxMiwxOToxMywyMDoxNCwyMToxNSwyMjoxNiwyMzoxNywyNDoxOCwyNzo1OSwyODpbMSw3MF0sMjk6NDksMzA6WzEsNjhdLDMxOlsxLDY5XSwzMjoyNCwzMzpbMSw1MF0sMzQ6WzEsNTFdLDM1OlsxLDUyXSwzNjoyMyw0MTo2MCw0MjpbMSw0NF0sNDM6WzEsNDZdLDQ0OlsxLDI5XSw0NzozMCw0ODpbMSw1N10sNDk6WzEsNThdLDU1OjQ3LDU2OjQ4LDU4OjM2LDYwOjI1LDYxOjI2LDYyOjI3LDczOlsxLDY3XSw3NjpbMSw0M10sODA6WzEsMjhdLDg1OlsxLDU1XSw4NjpbMSw1Nl0sODc6WzEsNTRdLDkzOlsxLDM4XSw5NzpbMSw0NV0sOTg6WzEsNTNdLDEwMDozOSwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA0OjQwLDEwNTpbMSw2NF0sMTA2OjQxLDEwNzpbMSw2NV0sMTA4OjY2LDExNjpbMSw0Ml0sMTIxOjM3LDEyMjpbMSw2MV0sMTI0OlsxLDMxXSwxMjU6WzEsMzJdLDEyNjpbMSwzM10sMTI3OlsxLDM0XSwxMjg6WzEsMzVdfSx7Njk6WzIsMTE0XSwxMDA6ODQsMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNjo4NSwxMDc6WzEsNjVdLDEwODo2NiwxMjM6WzEsODNdLDEyNTpbMSw3N10sMTI2OlsxLDc2XSwxMjk6WzEsNzVdLDEzMDpbMSw3OF0sMTMxOlsxLDc5XSwxMzI6WzEsODBdLDEzMzpbMSw4MV0sMTM0OlsxLDgyXX0sezE6WzIsMzRdLDY6WzIsMzRdLDI1OlsyLDM0XSwyNjpbMiwzNF0sNDY6WzIsMzRdLDUxOlsyLDM0XSw1NDpbMiwzNF0sNjk6WzIsMzRdLDc1OlsyLDM0XSw4MzpbMiwzNF0sODg6WzIsMzRdLDkwOlsyLDM0XSw5OTpbMiwzNF0sMTAxOlsyLDM0XSwxMDI6WzIsMzRdLDEwMzpbMiwzNF0sMTA3OlsyLDM0XSwxMTU6WzIsMzRdLDEyMzpbMiwzNF0sMTI1OlsyLDM0XSwxMjY6WzIsMzRdLDEyOTpbMiwzNF0sMTMwOlsyLDM0XSwxMzE6WzIsMzRdLDEzMjpbMiwzNF0sMTMzOlsyLDM0XSwxMzQ6WzIsMzRdfSx7MTpbMiwxMDVdLDY6WzIsMTA1XSwyNTpbMiwxMDVdLDI2OlsyLDEwNV0sNDY6WzIsMTA1XSw1MTpbMiwxMDVdLDU0OlsyLDEwNV0sNjM6WzIsMTA1XSw2NDpbMiwxMDVdLDY1OlsyLDEwNV0sNjc6WzIsMTA1XSw2OTpbMiwxMDVdLDcwOlsyLDEwNV0sNzE6WzIsMTA1XSw3NTpbMiwxMDVdLDgxOlsyLDEwNV0sODI6WzIsMTA1XSw4MzpbMiwxMDVdLDg4OlsyLDEwNV0sOTA6WzIsMTA1XSw5OTpbMiwxMDVdLDEwMTpbMiwxMDVdLDEwMjpbMiwxMDVdLDEwMzpbMiwxMDVdLDEwNzpbMiwxMDVdLDExNTpbMiwxMDVdLDEyMzpbMiwxMDVdLDEyNTpbMiwxMDVdLDEyNjpbMiwxMDVdLDEyOTpbMiwxMDVdLDEzMDpbMiwxMDVdLDEzMTpbMiwxMDVdLDEzMjpbMiwxMDVdLDEzMzpbMiwxMDVdLDEzNDpbMiwxMDVdfSx7MTpbMiw0NV0sNjpbMiw0NV0sMjU6WzIsNDVdLDI2OlsyLDQ1XSw0NjpbMiw0NV0sNTE6WzIsNDVdLDU0OlsyLDQ1XSw2OTpbMiw0NV0sNzU6WzIsNDVdLDgzOlsyLDQ1XSw4ODpbMiw0NV0sOTA6WzIsNDVdLDk5OlsyLDQ1XSwxMDE6WzIsNDVdLDEwMjpbMiw0NV0sMTAzOlsyLDQ1XSwxMDc6WzIsNDVdLDExNTpbMiw0NV0sMTIzOlsyLDQ1XSwxMjU6WzIsNDVdLDEyNjpbMiw0NV0sMTI5OlsyLDQ1XSwxMzA6WzIsNDVdLDEzMTpbMiw0NV0sMTMyOlsyLDQ1XSwxMzM6WzIsNDVdLDEzNDpbMiw0NV19LHsxOlsyLDE5M10sNjpbMiwxOTNdLDI1OlsyLDE5M10sMjY6WzIsMTkzXSw0NjpbMiwxOTNdLDUxOlsyLDE5M10sNTQ6WzIsMTkzXSw2OTpbMiwxOTNdLDc1OlsyLDE5M10sODM6WzIsMTkzXSw4ODpbMiwxOTNdLDkwOlsyLDE5M10sOTk6WzIsMTkzXSwxMDE6WzIsMTkzXSwxMDI6WzIsMTkzXSwxMDM6WzIsMTkzXSwxMDc6WzIsMTkzXSwxMTU6WzIsMTkzXSwxMjM6WzIsMTkzXSwxMjU6WzIsMTkzXSwxMjY6WzIsMTkzXSwxMjk6WzIsMTkzXSwxMzA6WzIsMTkzXSwxMzE6WzIsMTkzXSwxMzI6WzIsMTkzXSwxMzM6WzIsMTkzXSwxMzQ6WzIsMTkzXX0sezE6WzIsMTcyXSw2OlsyLDE3Ml0sMjU6WzIsMTcyXSwyNjpbMiwxNzJdLDQ2OlsyLDE3Ml0sNTE6WzIsMTcyXSw1NDpbMiwxNzJdLDY5OlsyLDE3Ml0sNzU6WzIsMTcyXSw4MzpbMiwxNzJdLDg4OlsyLDE3Ml0sOTA6WzIsMTcyXSw5OTpbMiwxNzJdLDEwMTpbMiwxNzJdLDEwMjpbMiwxNzJdLDEwMzpbMiwxNzJdLDEwNzpbMiwxNzJdLDExNTpbMiwxNzJdLDExODpbMiwxNzJdLDEyMzpbMiwxNzJdLDEyNTpbMiwxNzJdLDEyNjpbMiwxNzJdLDEyOTpbMiwxNzJdLDEzMDpbMiwxNzJdLDEzMTpbMiwxNzJdLDEzMjpbMiwxNzJdLDEzMzpbMiwxNzJdLDEzNDpbMiwxNzJdfSx7MTpbMiwxMjldLDY6WzIsMTI5XSwyNTpbMiwxMjldLDI2OlsyLDEyOV0sNDY6WzIsMTI5XSw1MTpbMiwxMjldLDU0OlsyLDEyOV0sNjk6WzIsMTI5XSw3NTpbMiwxMjldLDgzOlsyLDEyOV0sODg6WzIsMTI5XSw5MDpbMiwxMjldLDk5OlsyLDEyOV0sMTAxOlsyLDEyOV0sMTAyOlsyLDEyOV0sMTAzOlsyLDEyOV0sMTA3OlsyLDEyOV0sMTE1OlsyLDEyOV0sMTIzOlsyLDEyOV0sMTI1OlsyLDEyOV0sMTI2OlsyLDEyOV0sMTI5OlsyLDEyOV0sMTMwOlsyLDEyOV0sMTMxOlsyLDEyOV0sMTMyOlsyLDEyOV0sMTMzOlsyLDEyOV0sMTM0OlsyLDEyOV19LHsxOlsyLDEzMF0sNjpbMiwxMzBdLDI1OlsyLDEzMF0sMjY6WzIsMTMwXSw0NjpbMiwxMzBdLDUxOlsyLDEzMF0sNTQ6WzIsMTMwXSw2OTpbMiwxMzBdLDc1OlsyLDEzMF0sODM6WzIsMTMwXSw4ODpbMiwxMzBdLDkwOlsyLDEzMF0sOTU6WzIsMTMwXSw5OTpbMiwxMzBdLDEwMTpbMiwxMzBdLDEwMjpbMiwxMzBdLDEwMzpbMiwxMzBdLDEwNzpbMiwxMzBdLDExNTpbMiwxMzBdLDEyMzpbMiwxMzBdLDEyNTpbMiwxMzBdLDEyNjpbMiwxMzBdLDEyOTpbMiwxMzBdLDEzMDpbMiwxMzBdLDEzMTpbMiwxMzBdLDEzMjpbMiwxMzBdLDEzMzpbMiwxMzBdLDEzNDpbMiwxMzBdfSx7MTpbMiwxNjNdLDY6WzIsMTYzXSwyNTpbMiwxNjNdLDI2OlsyLDE2M10sNDY6WzIsMTYzXSw1MTpbMiwxNjNdLDU0OlsyLDE2M10sNjk6WzIsMTYzXSw3NTpbMiwxNjNdLDgzOlsyLDE2M10sODg6WzIsMTYzXSw5MDpbMiwxNjNdLDk5OlsyLDE2M10sMTAxOlsyLDE2M10sMTAyOlsyLDE2M10sMTAzOlsyLDE2M10sMTA3OlsyLDE2M10sMTE1OlsyLDE2M10sMTIzOlsyLDE2M10sMTI1OlsyLDE2M10sMTI2OlsyLDE2M10sMTI5OlsyLDE2M10sMTMwOlsyLDE2M10sMTMxOlsyLDE2M10sMTMyOlsyLDE2M10sMTMzOlsyLDE2M10sMTM0OlsyLDE2M119LHs1OjMwMSwyNTpbMSw1XX0sezI2OlsxLDMwMl19LHs2OlsxLDMwM10sMjY6WzIsMTY5XSwxMTg6WzIsMTY5XSwxMjA6WzIsMTY5XX0sezg6MzA0LDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezE6WzIsOTddLDY6WzIsOTddLDI1OlsyLDk3XSwyNjpbMiw5N10sNDY6WzIsOTddLDUxOlsyLDk3XSw1NDpbMiw5N10sNjk6WzIsOTddLDc1OlsyLDk3XSw4MzpbMiw5N10sODg6WzIsOTddLDkwOlsyLDk3XSw5OTpbMiw5N10sMTAxOlsyLDk3XSwxMDI6WzIsOTddLDEwMzpbMiw5N10sMTA3OlsyLDk3XSwxMTU6WzIsOTddLDEyMzpbMiw5N10sMTI1OlsyLDk3XSwxMjY6WzIsOTddLDEyOTpbMiw5N10sMTMwOlsyLDk3XSwxMzE6WzIsOTddLDEzMjpbMiw5N10sMTMzOlsyLDk3XSwxMzQ6WzIsOTddfSx7MTpbMiwxMzNdLDY6WzIsMTMzXSwyNTpbMiwxMzNdLDI2OlsyLDEzM10sNDY6WzIsMTMzXSw1MTpbMiwxMzNdLDU0OlsyLDEzM10sNjM6WzIsMTMzXSw2NDpbMiwxMzNdLDY1OlsyLDEzM10sNjc6WzIsMTMzXSw2OTpbMiwxMzNdLDcwOlsyLDEzM10sNzE6WzIsMTMzXSw3NTpbMiwxMzNdLDgxOlsyLDEzM10sODI6WzIsMTMzXSw4MzpbMiwxMzNdLDg4OlsyLDEzM10sOTA6WzIsMTMzXSw5OTpbMiwxMzNdLDEwMTpbMiwxMzNdLDEwMjpbMiwxMzNdLDEwMzpbMiwxMzNdLDEwNzpbMiwxMzNdLDExNTpbMiwxMzNdLDEyMzpbMiwxMzNdLDEyNTpbMiwxMzNdLDEyNjpbMiwxMzNdLDEyOTpbMiwxMzNdLDEzMDpbMiwxMzNdLDEzMTpbMiwxMzNdLDEzMjpbMiwxMzNdLDEzMzpbMiwxMzNdLDEzNDpbMiwxMzNdfSx7MTpbMiwxMTNdLDY6WzIsMTEzXSwyNTpbMiwxMTNdLDI2OlsyLDExM10sNDY6WzIsMTEzXSw1MTpbMiwxMTNdLDU0OlsyLDExM10sNjM6WzIsMTEzXSw2NDpbMiwxMTNdLDY1OlsyLDExM10sNjc6WzIsMTEzXSw2OTpbMiwxMTNdLDcwOlsyLDExM10sNzE6WzIsMTEzXSw3NTpbMiwxMTNdLDgxOlsyLDExM10sODI6WzIsMTEzXSw4MzpbMiwxMTNdLDg4OlsyLDExM10sOTA6WzIsMTEzXSw5OTpbMiwxMTNdLDEwMTpbMiwxMTNdLDEwMjpbMiwxMTNdLDEwMzpbMiwxMTNdLDEwNzpbMiwxMTNdLDExNTpbMiwxMTNdLDEyMzpbMiwxMTNdLDEyNTpbMiwxMTNdLDEyNjpbMiwxMTNdLDEyOTpbMiwxMTNdLDEzMDpbMiwxMTNdLDEzMTpbMiwxMTNdLDEzMjpbMiwxMTNdLDEzMzpbMiwxMTNdLDEzNDpbMiwxMTNdfSx7NjpbMiwxMTldLDI1OlsyLDExOV0sMjY6WzIsMTE5XSw1MTpbMiwxMTldLDgzOlsyLDExOV0sODg6WzIsMTE5XX0sezY6WzIsNDldLDI1OlsyLDQ5XSwyNjpbMiw0OV0sNTA6MzA1LDUxOlsxLDIyM119LHs2OlsyLDEyMF0sMjU6WzIsMTIwXSwyNjpbMiwxMjBdLDUxOlsyLDEyMF0sODM6WzIsMTIwXSw4ODpbMiwxMjBdfSx7MTpbMiwxNThdLDY6WzIsMTU4XSwyNTpbMiwxNThdLDI2OlsyLDE1OF0sNDY6WzIsMTU4XSw1MTpbMiwxNThdLDU0OlsyLDE1OF0sNjk6WzIsMTU4XSw3NTpbMiwxNThdLDgzOlsyLDE1OF0sODg6WzIsMTU4XSw5MDpbMiwxNThdLDk5OlsyLDE1OF0sMTAwOjg0LDEwMTpbMiwxNThdLDEwMjpbMiwxNThdLDEwMzpbMiwxNThdLDEwNjo4NSwxMDc6WzIsMTU4XSwxMDg6NjYsMTE1OlsxLDMwNl0sMTIzOlsyLDE1OF0sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7MTpbMiwxNjBdLDY6WzIsMTYwXSwyNTpbMiwxNjBdLDI2OlsyLDE2MF0sNDY6WzIsMTYwXSw1MTpbMiwxNjBdLDU0OlsyLDE2MF0sNjk6WzIsMTYwXSw3NTpbMiwxNjBdLDgzOlsyLDE2MF0sODg6WzIsMTYwXSw5MDpbMiwxNjBdLDk5OlsyLDE2MF0sMTAwOjg0LDEwMTpbMiwxNjBdLDEwMjpbMSwzMDddLDEwMzpbMiwxNjBdLDEwNjo4NSwxMDc6WzIsMTYwXSwxMDg6NjYsMTE1OlsyLDE2MF0sMTIzOlsyLDE2MF0sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7MTpbMiwxNTldLDY6WzIsMTU5XSwyNTpbMiwxNTldLDI2OlsyLDE1OV0sNDY6WzIsMTU5XSw1MTpbMiwxNTldLDU0OlsyLDE1OV0sNjk6WzIsMTU5XSw3NTpbMiwxNTldLDgzOlsyLDE1OV0sODg6WzIsMTU5XSw5MDpbMiwxNTldLDk5OlsyLDE1OV0sMTAwOjg0LDEwMTpbMiwxNTldLDEwMjpbMiwxNTldLDEwMzpbMiwxNTldLDEwNjo4NSwxMDc6WzIsMTU5XSwxMDg6NjYsMTE1OlsyLDE1OV0sMTIzOlsyLDE1OV0sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7NjpbMiw4OF0sMjU6WzIsODhdLDI2OlsyLDg4XSw1MTpbMiw4OF0sNzU6WzIsODhdfSx7NjpbMiw0OV0sMjU6WzIsNDldLDI2OlsyLDQ5XSw1MDozMDgsNTE6WzEsMjMzXX0sezI2OlsxLDMwOV0sMTAwOjg0LDEwMTpbMSw2Ml0sMTAzOlsxLDYzXSwxMDY6ODUsMTA3OlsxLDY1XSwxMDg6NjYsMTIzOlsxLDgzXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsyNjpbMSwzMTBdfSx7MTpbMiwxNjZdLDY6WzIsMTY2XSwyNTpbMiwxNjZdLDI2OlsyLDE2Nl0sNDY6WzIsMTY2XSw1MTpbMiwxNjZdLDU0OlsyLDE2Nl0sNjk6WzIsMTY2XSw3NTpbMiwxNjZdLDgzOlsyLDE2Nl0sODg6WzIsMTY2XSw5MDpbMiwxNjZdLDk5OlsyLDE2Nl0sMTAxOlsyLDE2Nl0sMTAyOlsyLDE2Nl0sMTAzOlsyLDE2Nl0sMTA3OlsyLDE2Nl0sMTE1OlsyLDE2Nl0sMTIzOlsyLDE2Nl0sMTI1OlsyLDE2Nl0sMTI2OlsyLDE2Nl0sMTI5OlsyLDE2Nl0sMTMwOlsyLDE2Nl0sMTMxOlsyLDE2Nl0sMTMyOlsyLDE2Nl0sMTMzOlsyLDE2Nl0sMTM0OlsyLDE2Nl19LHsyNjpbMiwxNzBdLDExODpbMiwxNzBdLDEyMDpbMiwxNzBdfSx7MjU6WzIsMTI1XSw1MTpbMiwxMjVdLDEwMDo4NCwxMDE6WzEsNjJdLDEwMzpbMSw2M10sMTA2Ojg1LDEwNzpbMSw2NV0sMTA4OjY2LDEyMzpbMSw4M10sMTI1OlsxLDc3XSwxMjY6WzEsNzZdLDEyOTpbMSw3NV0sMTMwOlsxLDc4XSwxMzE6WzEsNzldLDEzMjpbMSw4MF0sMTMzOlsxLDgxXSwxMzQ6WzEsODJdfSx7NjpbMSwyNjBdLDI1OlsxLDI2MV0sMjY6WzEsMzExXX0sezg6MzEyLDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezg6MzEzLDk6MTE1LDEwOjE5LDExOjIwLDEyOjIxLDEzOlsxLDIyXSwxNDo4LDE1OjksMTY6MTAsMTc6MTEsMTg6MTIsMTk6MTMsMjA6MTQsMjE6MTUsMjI6MTYsMjM6MTcsMjQ6MTgsMjc6NTksMjg6WzEsNzBdLDI5OjQ5LDMwOlsxLDY4XSwzMTpbMSw2OV0sMzI6MjQsMzM6WzEsNTBdLDM0OlsxLDUxXSwzNTpbMSw1Ml0sMzY6MjMsNDE6NjAsNDI6WzEsNDRdLDQzOlsxLDQ2XSw0NDpbMSwyOV0sNDc6MzAsNDg6WzEsNTddLDQ5OlsxLDU4XSw1NTo0Nyw1Njo0OCw1ODozNiw2MDoyNSw2MToyNiw2MjoyNyw3MzpbMSw2N10sNzY6WzEsNDNdLDgwOlsxLDI4XSw4NTpbMSw1NV0sODY6WzEsNTZdLDg3OlsxLDU0XSw5MzpbMSwzOF0sOTc6WzEsNDVdLDk4OlsxLDUzXSwxMDA6MzksMTAxOlsxLDYyXSwxMDM6WzEsNjNdLDEwNDo0MCwxMDU6WzEsNjRdLDEwNjo0MSwxMDc6WzEsNjVdLDEwODo2NiwxMTY6WzEsNDJdLDEyMTozNywxMjI6WzEsNjFdLDEyNDpbMSwzMV0sMTI1OlsxLDMyXSwxMjY6WzEsMzNdLDEyNzpbMSwzNF0sMTI4OlsxLDM1XX0sezY6WzEsMjcxXSwyNTpbMSwyNzJdLDI2OlsxLDMxNF19LHs2OlsyLDM3XSwyNTpbMiwzN10sMjY6WzIsMzddLDUxOlsyLDM3XSw3NTpbMiwzN119LHsxOlsyLDE2NF0sNjpbMiwxNjRdLDI1OlsyLDE2NF0sMjY6WzIsMTY0XSw0NjpbMiwxNjRdLDUxOlsyLDE2NF0sNTQ6WzIsMTY0XSw2OTpbMiwxNjRdLDc1OlsyLDE2NF0sODM6WzIsMTY0XSw4ODpbMiwxNjRdLDkwOlsyLDE2NF0sOTk6WzIsMTY0XSwxMDE6WzIsMTY0XSwxMDI6WzIsMTY0XSwxMDM6WzIsMTY0XSwxMDc6WzIsMTY0XSwxMTU6WzIsMTY0XSwxMjM6WzIsMTY0XSwxMjU6WzIsMTY0XSwxMjY6WzIsMTY0XSwxMjk6WzIsMTY0XSwxMzA6WzIsMTY0XSwxMzE6WzIsMTY0XSwxMzI6WzIsMTY0XSwxMzM6WzIsMTY0XSwxMzQ6WzIsMTY0XX0sezY6WzIsMTIxXSwyNTpbMiwxMjFdLDI2OlsyLDEyMV0sNTE6WzIsMTIxXSw4MzpbMiwxMjFdLDg4OlsyLDEyMV19LHsxOlsyLDE2MV0sNjpbMiwxNjFdLDI1OlsyLDE2MV0sMjY6WzIsMTYxXSw0NjpbMiwxNjFdLDUxOlsyLDE2MV0sNTQ6WzIsMTYxXSw2OTpbMiwxNjFdLDc1OlsyLDE2MV0sODM6WzIsMTYxXSw4ODpbMiwxNjFdLDkwOlsyLDE2MV0sOTk6WzIsMTYxXSwxMDA6ODQsMTAxOlsyLDE2MV0sMTAyOlsyLDE2MV0sMTAzOlsyLDE2MV0sMTA2Ojg1LDEwNzpbMiwxNjFdLDEwODo2NiwxMTU6WzIsMTYxXSwxMjM6WzIsMTYxXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHsxOlsyLDE2Ml0sNjpbMiwxNjJdLDI1OlsyLDE2Ml0sMjY6WzIsMTYyXSw0NjpbMiwxNjJdLDUxOlsyLDE2Ml0sNTQ6WzIsMTYyXSw2OTpbMiwxNjJdLDc1OlsyLDE2Ml0sODM6WzIsMTYyXSw4ODpbMiwxNjJdLDkwOlsyLDE2Ml0sOTk6WzIsMTYyXSwxMDA6ODQsMTAxOlsyLDE2Ml0sMTAyOlsyLDE2Ml0sMTAzOlsyLDE2Ml0sMTA2Ojg1LDEwNzpbMiwxNjJdLDEwODo2NiwxMTU6WzIsMTYyXSwxMjM6WzIsMTYyXSwxMjU6WzEsNzddLDEyNjpbMSw3Nl0sMTI5OlsxLDc1XSwxMzA6WzEsNzhdLDEzMTpbMSw3OV0sMTMyOlsxLDgwXSwxMzM6WzEsODFdLDEzNDpbMSw4Ml19LHs2OlsyLDg5XSwyNTpbMiw4OV0sMjY6WzIsODldLDUxOlsyLDg5XSw3NTpbMiw4OV19XSwNCmRlZmF1bHRBY3Rpb25zOiB7NTc6WzIsNDddLDU4OlsyLDQ4XSw3MjpbMiwzXSw5MTpbMiwxMDNdLDE4NjpbMiw4M119LA0KcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHsNCiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTsNCn0sDQpwYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHsNCiAgICB2YXIgc2VsZiA9IHRoaXMsDQogICAgICAgIHN0YWNrID0gWzBdLA0KICAgICAgICB2c3RhY2sgPSBbbnVsbF0sIC8vIHNlbWFudGljIHZhbHVlIHN0YWNrDQogICAgICAgIGxzdGFjayA9IFtdLCAvLyBsb2NhdGlvbiBzdGFjaw0KICAgICAgICB0YWJsZSA9IHRoaXMudGFibGUsDQogICAgICAgIHl5dGV4dCA9ICcnLA0KICAgICAgICB5eWxpbmVubyA9IDAsDQogICAgICAgIHl5bGVuZyA9IDAsDQogICAgICAgIHJlY292ZXJpbmcgPSAwLA0KICAgICAgICBURVJST1IgPSAyLA0KICAgICAgICBFT0YgPSAxOw0KDQogICAgLy90aGlzLnJlZHVjdGlvbkNvdW50ID0gdGhpcy5zaGlmdENvdW50ID0gMDsNCg0KICAgIHRoaXMubGV4ZXIuc2V0SW5wdXQoaW5wdXQpOw0KICAgIHRoaXMubGV4ZXIueXkgPSB0aGlzLnl5Ow0KICAgIHRoaXMueXkubGV4ZXIgPSB0aGlzLmxleGVyOw0KICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gJ3VuZGVmaW5lZCcpDQogICAgICAgIHRoaXMubGV4ZXIueXlsbG9jID0ge307DQogICAgdmFyIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7DQogICAgbHN0YWNrLnB1c2goeXlsb2MpOw0KDQogICAgaWYgKHR5cGVvZiB0aGlzLnl5LnBhcnNlRXJyb3IgPT09ICdmdW5jdGlvbicpDQogICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjsNCg0KICAgIGZ1bmN0aW9uIHBvcFN0YWNrIChuKSB7DQogICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIqbjsNCiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuOw0KICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47DQogICAgfQ0KDQogICAgZnVuY3Rpb24gbGV4KCkgew0KICAgICAgICB2YXIgdG9rZW47DQogICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxOyAvLyAkZW5kID0gMQ0KICAgICAgICAvLyBpZiB0b2tlbiBpc24ndCBpdHMgbnVtZXJpYyB2YWx1ZSwgY29udmVydA0KICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSAnbnVtYmVyJykgew0KICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdG9rZW47DQogICAgfTsNCg0KICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbD17fSxwLGxlbixuZXdTdGF0ZSwgZXhwZWN0ZWQ7DQogICAgd2hpbGUgKHRydWUpIHsNCiAgICAgICAgLy8gcmV0cmVpdmUgc3RhdGUgbnVtYmVyIGZyb20gdG9wIG9mIHN0YWNrDQogICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdOw0KDQogICAgICAgIC8vIHVzZSBkZWZhdWx0IGFjdGlvbnMgaWYgYXZhaWxhYmxlDQogICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkgew0KICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAoc3ltYm9sID09IG51bGwpDQogICAgICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7DQogICAgICAgICAgICAvLyByZWFkIGFjdGlvbiBmb3IgY3VycmVudCBzdGF0ZSBhbmQgZmlyc3QgaW5wdXQNCiAgICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIGhhbmRsZSBwYXJzZSBlcnJvcg0KICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3VuZGVmaW5lZCcgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkgew0KDQogICAgICAgICAgICBpZiAoIXJlY292ZXJpbmcpIHsNCiAgICAgICAgICAgICAgICAvLyBSZXBvcnQgZXJyb3INCiAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFtdOw0KICAgICAgICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IDIpIHsNCiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3BdKyInIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhciBlcnJTdHIgPSAnJzsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5sZXhlci5zaG93UG9zaXRpb24pIHsNCiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gJ1BhcnNlIGVycm9yIG9uIGxpbmUgJysoeXlsaW5lbm8rMSkrIjpcbiIrdGhpcy5sZXhlci5zaG93UG9zaXRpb24oKSsnXG5FeHBlY3RpbmcgJytleHBlY3RlZC5qb2luKCcsICcpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGVyclN0ciA9ICdQYXJzZSBlcnJvciBvbiBsaW5lICcrKHl5bGluZW5vKzEpKyI6IFVuZXhwZWN0ZWQgIiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbCA9PSAxIC8qRU9GKi8gPyAiZW5kIG9mIGlucHV0IiA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCInIisodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSsiJyIpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwNCiAgICAgICAgICAgICAgICAgICAge3RleHQ6IHRoaXMubGV4ZXIubWF0Y2gsIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsIGxpbmU6IHRoaXMubGV4ZXIueXlsaW5lbm8sIGxvYzogeXlsb2MsIGV4cGVjdGVkOiBleHBlY3RlZH0pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBqdXN0IHJlY292ZXJlZCBmcm9tIGFub3RoZXIgZXJyb3INCiAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID09IDMpIHsNCiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09IEVPRikgew0KICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyU3RyIHx8ICdQYXJzaW5nIGhhbHRlZC4nKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBkaXNjYXJkIGN1cnJlbnQgbG9va2FoZWFkIGFuZCBncmFiIGFub3RoZXINCiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZzsNCiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDsNCiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87DQogICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYzsNCiAgICAgICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gdHJ5IHRvIHJlY292ZXIgZnJvbSBlcnJvcg0KICAgICAgICAgICAgd2hpbGUgKDEpIHsNCiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgZXJyb3IgcmVjb3ZlcnkgcnVsZSBpbiB0aGlzIHN0YXRlDQogICAgICAgICAgICAgICAgaWYgKChURVJST1IudG9TdHJpbmcoKSkgaW4gdGFibGVbc3RhdGVdKSB7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyU3RyIHx8ICdQYXJzaW5nIGhhbHRlZC4nKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcG9wU3RhY2soMSk7DQogICAgICAgICAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gc3ltYm9sOyAvLyBzYXZlIHRoZSBsb29rYWhlYWQgdG9rZW4NCiAgICAgICAgICAgIHN5bWJvbCA9IFRFUlJPUjsgICAgICAgICAvLyBpbnNlcnQgZ2VuZXJpYyBlcnJvciBzeW1ib2wgYXMgbmV3IGxvb2thaGVhZA0KICAgICAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07DQogICAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW1RFUlJPUl07DQogICAgICAgICAgICByZWNvdmVyaW5nID0gMzsgLy8gYWxsb3cgMyByZWFsIHN5bWJvbHMgdG8gYmUgc2hpZnRlZCBiZWZvcmUgcmVwb3J0aW5nIGEgbmV3IGVycm9yDQogICAgICAgIH0NCg0KICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCBoYXBwZW4sIHVubGVzcyByZXNvbHZlIGRlZmF1bHRzIGFyZSBvZmYNCiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAnK3N0YXRlKycsIHRva2VuOiAnK3N5bWJvbCk7DQogICAgICAgIH0NCg0KICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkgew0KDQogICAgICAgICAgICBjYXNlIDE6IC8vIHNoaWZ0DQogICAgICAgICAgICAgICAgLy90aGlzLnNoaWZ0Q291bnQrKzsNCg0KICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTsNCiAgICAgICAgICAgICAgICB2c3RhY2sucHVzaCh0aGlzLmxleGVyLnl5dGV4dCk7DQogICAgICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpOw0KICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTsgLy8gcHVzaCBzdGF0ZQ0KICAgICAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7DQogICAgICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkgeyAvLyBub3JtYWwgZXhlY3V0aW9uL25vIGVycm9yDQogICAgICAgICAgICAgICAgICAgIHl5bGVuZyA9IHRoaXMubGV4ZXIueXlsZW5nOw0KICAgICAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDsNCiAgICAgICAgICAgICAgICAgICAgeXlsaW5lbm8gPSB0aGlzLmxleGVyLnl5bGluZW5vOw0KICAgICAgICAgICAgICAgICAgICB5eWxvYyA9IHRoaXMubGV4ZXIueXlsbG9jOw0KICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApDQogICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07DQogICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gZXJyb3IganVzdCBvY2N1cnJlZCwgcmVzdW1lIG9sZCBsb29rYWhlYWQgZi8gYmVmb3JlIGVycm9yDQogICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sOw0KICAgICAgICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlIDI6IC8vIHJlZHVjZQ0KICAgICAgICAgICAgICAgIC8vdGhpcy5yZWR1Y3Rpb25Db3VudCsrOw0KDQogICAgICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTsNCg0KICAgICAgICAgICAgICAgIC8vIHBlcmZvcm0gc2VtYW50aWMgYWN0aW9uDQogICAgICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoLWxlbl07IC8vIGRlZmF1bHQgdG8gJCQgPSAkMQ0KICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgbG9jYXRpb24sIHVzZXMgZmlyc3QgdG9rZW4gZm9yIGZpcnN0cywgbGFzdCBmb3IgbGFzdHMNCiAgICAgICAgICAgICAgICB5eXZhbC5fJCA9IHsNCiAgICAgICAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGgtKGxlbnx8MSldLmZpcnN0X2xpbmUsDQogICAgICAgICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGgtMV0ubGFzdF9saW5lLA0KICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoLShsZW58fDEpXS5maXJzdF9jb2x1bW4sDQogICAgICAgICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aC0xXS5sYXN0X2NvbHVtbg0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHl5dmFsLCB5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHRoaXMueXksIGFjdGlvblsxXSwgdnN0YWNrLCBsc3RhY2spOw0KDQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSAndW5kZWZpbmVkJykgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBwb3Agb2ZmIHN0YWNrDQogICAgICAgICAgICAgICAgaWYgKGxlbikgew0KICAgICAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsLTEqbGVuKjIpOw0KICAgICAgICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEqbGVuKTsNCiAgICAgICAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xKmxlbik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTsgICAgLy8gcHVzaCBub250ZXJtaW5hbCAocmVkdWNlKQ0KICAgICAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpOw0KICAgICAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTsNCiAgICAgICAgICAgICAgICAvLyBnb3RvIG5ldyBzdGF0ZSA9IHRhYmxlW1NUQVRFXVtOT05URVJNSU5BTF0NCiAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aC0yXV1bc3RhY2tbc3RhY2subGVuZ3RoLTFdXTsNCiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgY2FzZSAzOiAvLyBhY2NlcHQNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgcmV0dXJuIHRydWU7DQp9fTsNCg0KbW9kdWxlLmV4cG9ydHMgPSBwYXJzZXI7DQp9KTsvKioNCiAqIENvcHlyaWdodCAoYykgMjAxMSBKZXJlbXkgQXNoa2VuYXMNCiAqDQogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbg0KICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24NCiAqIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQNCiAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLA0KICogY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcNCiAqIGNvbmRpdGlvbnM6DQogKiANCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlDQogKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCiAqIA0KICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQogKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMNCiAqIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EDQogKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVA0KICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksDQogKiBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcNCiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1INCiAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCiAqLw0KDQpkZWZpbmUoJ2FjZS9tb2RlL2NvZmZlZS9ub2RlcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL21vZGUvY29mZmVlL3Njb3BlJywgJ2FjZS9tb2RlL2NvZmZlZS9oZWxwZXJzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KICB2YXIgQWNjZXNzLCBBcnIsIEFzc2lnbiwgQmFzZSwgQmxvY2ssIENhbGwsIENsYXNzLCBDbG9zdXJlLCBDb2RlLCBDb21tZW50LCBFeGlzdGVuY2UsIEV4dGVuZHMsIEZvciwgSURFTlRJRklFUiwgSVNfU1RSSU5HLCBJZiwgSW4sIEluZGV4LCBMRVZFTF9BQ0NFU1MsIExFVkVMX0NPTkQsIExFVkVMX0xJU1QsIExFVkVMX09QLCBMRVZFTF9QQVJFTiwgTEVWRUxfVE9QLCBMaXRlcmFsLCBNRVRIT0RfREVGLCBORUdBVEUsIE5PLCBPYmosIE9wLCBQYXJhbSwgUGFyZW5zLCBQdXNoLCBSYW5nZSwgUmV0dXJuLCBTSU1QTEVOVU0sIFNjb3BlLCBTbGljZSwgU3BsYXQsIFN3aXRjaCwgVEFCLCBUSElTLCBUaHJvdywgVHJ5LCBVVElMSVRJRVMsIFZhbHVlLCBXaGlsZSwgWUVTLCBjb21wYWN0LCBkZWwsIGVuZHMsIGV4dGVuZCwgZmxhdHRlbiwgbGFzdCwgbWVyZ2UsIG11bHRpZGVudCwgc3RhcnRzLCB1bmZvbGRTb2FrLCB1dGlsaXR5LCBfcmVmOw0KICB2YXIgX19oYXNQcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwgX19leHRlbmRzID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgew0KICAgIGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKF9faGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9DQogICAgZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9DQogICAgY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOw0KICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yOw0KICAgIGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7DQogICAgcmV0dXJuIGNoaWxkOw0KICB9LCBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9LCBfX2luZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB8fCBmdW5jdGlvbihpdGVtKSB7DQogICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KICAgICAgaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJldHVybiBpOw0KICAgIH0NCiAgICByZXR1cm4gLTE7DQogIH07DQogIFNjb3BlID0gcmVxdWlyZSgnLi9zY29wZScpLlNjb3BlOw0KICBfcmVmID0gcmVxdWlyZSgnLi9oZWxwZXJzJyksIGNvbXBhY3QgPSBfcmVmLmNvbXBhY3QsIGZsYXR0ZW4gPSBfcmVmLmZsYXR0ZW4sIGV4dGVuZCA9IF9yZWYuZXh0ZW5kLCBtZXJnZSA9IF9yZWYubWVyZ2UsIGRlbCA9IF9yZWYuZGVsLCBzdGFydHMgPSBfcmVmLnN0YXJ0cywgZW5kcyA9IF9yZWYuZW5kcywgbGFzdCA9IF9yZWYubGFzdDsNCiAgZXhwb3J0cy5leHRlbmQgPSBleHRlbmQ7DQogIFlFUyA9IGZ1bmN0aW9uKCkgew0KICAgIHJldHVybiB0cnVlOw0KICB9Ow0KICBOTyA9IGZ1bmN0aW9uKCkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfTsNCiAgVEhJUyA9IGZ1bmN0aW9uKCkgew0KICAgIHJldHVybiB0aGlzOw0KICB9Ow0KICBORUdBVEUgPSBmdW5jdGlvbigpIHsNCiAgICB0aGlzLm5lZ2F0ZWQgPSAhdGhpcy5uZWdhdGVkOw0KICAgIHJldHVybiB0aGlzOw0KICB9Ow0KICBleHBvcnRzLkJhc2UgPSBCYXNlID0gKGZ1bmN0aW9uKCkgew0KICAgIGZ1bmN0aW9uIEJhc2UoKSB7fQ0KICAgIEJhc2UucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbihvLCBsdmwpIHsNCiAgICAgIHZhciBub2RlOw0KICAgICAgbyA9IGV4dGVuZCh7fSwgbyk7DQogICAgICBpZiAobHZsKSB7DQogICAgICAgIG8ubGV2ZWwgPSBsdmw7DQogICAgICB9DQogICAgICBub2RlID0gdGhpcy51bmZvbGRTb2FrKG8pIHx8IHRoaXM7DQogICAgICBub2RlLnRhYiA9IG8uaW5kZW50Ow0KICAgICAgaWYgKG8ubGV2ZWwgPT09IExFVkVMX1RPUCB8fCAhbm9kZS5pc1N0YXRlbWVudChvKSkgew0KICAgICAgICByZXR1cm4gbm9kZS5jb21waWxlTm9kZShvKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBub2RlLmNvbXBpbGVDbG9zdXJlKG8pOw0KICAgICAgfQ0KICAgIH07DQogICAgQmFzZS5wcm90b3R5cGUuY29tcGlsZUNsb3N1cmUgPSBmdW5jdGlvbihvKSB7DQogICAgICBpZiAodGhpcy5qdW1wcygpIHx8IHRoaXMgaW5zdGFuY2VvZiBUaHJvdykgew0KICAgICAgICB0aHJvdyBTeW50YXhFcnJvcignY2Fubm90IHVzZSBhIHB1cmUgc3RhdGVtZW50IGluIGFuIGV4cHJlc3Npb24uJyk7DQogICAgICB9DQogICAgICBvLnNoYXJlZFNjb3BlID0gdHJ1ZTsNCiAgICAgIHJldHVybiBDbG9zdXJlLndyYXAodGhpcykuY29tcGlsZU5vZGUobyk7DQogICAgfTsNCiAgICBCYXNlLnByb3RvdHlwZS5jYWNoZSA9IGZ1bmN0aW9uKG8sIGxldmVsLCByZXVzZWQpIHsNCiAgICAgIHZhciByZWYsIHN1YjsNCiAgICAgIGlmICghdGhpcy5pc0NvbXBsZXgoKSkgew0KICAgICAgICByZWYgPSBsZXZlbCA/IHRoaXMuY29tcGlsZShvLCBsZXZlbCkgOiB0aGlzOw0KICAgICAgICByZXR1cm4gW3JlZiwgcmVmXTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJlZiA9IG5ldyBMaXRlcmFsKHJldXNlZCB8fCBvLnNjb3BlLmZyZWVWYXJpYWJsZSgncmVmJykpOw0KICAgICAgICBzdWIgPSBuZXcgQXNzaWduKHJlZiwgdGhpcyk7DQogICAgICAgIGlmIChsZXZlbCkgew0KICAgICAgICAgIHJldHVybiBbc3ViLmNvbXBpbGUobywgbGV2ZWwpLCByZWYudmFsdWVdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHJldHVybiBbc3ViLCByZWZdOw0KICAgICAgICB9DQogICAgICB9DQogICAgfTsNCiAgICBCYXNlLnByb3RvdHlwZS5jb21waWxlTG9vcFJlZmVyZW5jZSA9IGZ1bmN0aW9uKG8sIG5hbWUpIHsNCiAgICAgIHZhciBzcmMsIHRtcDsNCiAgICAgIHNyYyA9IHRtcCA9IHRoaXMuY29tcGlsZShvLCBMRVZFTF9MSVNUKTsNCiAgICAgIGlmICghKCgtSW5maW5pdHkgPCArc3JjICYmICtzcmMgPCBJbmZpbml0eSkgfHwgSURFTlRJRklFUi50ZXN0KHNyYykgJiYgby5zY29wZS5jaGVjayhzcmMsIHRydWUpKSkgew0KICAgICAgICBzcmMgPSAiIiArICh0bXAgPSBvLnNjb3BlLmZyZWVWYXJpYWJsZShuYW1lKSkgKyAiID0gIiArIHNyYzsNCiAgICAgIH0NCiAgICAgIHJldHVybiBbc3JjLCB0bXBdOw0KICAgIH07DQogICAgQmFzZS5wcm90b3R5cGUubWFrZVJldHVybiA9IGZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuIG5ldyBSZXR1cm4odGhpcyk7DQogICAgfTsNCiAgICBCYXNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHByZWQpIHsNCiAgICAgIHZhciBjb250YWluczsNCiAgICAgIGNvbnRhaW5zID0gZmFsc2U7DQogICAgICB0aGlzLnRyYXZlcnNlQ2hpbGRyZW4oZmFsc2UsIGZ1bmN0aW9uKG5vZGUpIHsNCiAgICAgICAgaWYgKHByZWQobm9kZSkpIHsNCiAgICAgICAgICBjb250YWlucyA9IHRydWU7DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICAgIHJldHVybiBjb250YWluczsNCiAgICB9Ow0KICAgIEJhc2UucHJvdG90eXBlLmNvbnRhaW5zVHlwZSA9IGZ1bmN0aW9uKHR5cGUpIHsNCiAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgdHlwZSB8fCB0aGlzLmNvbnRhaW5zKGZ1bmN0aW9uKG5vZGUpIHsNCiAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiB0eXBlOw0KICAgICAgfSk7DQogICAgfTsNCiAgICBCYXNlLnByb3RvdHlwZS5sYXN0Tm9uQ29tbWVudCA9IGZ1bmN0aW9uKGxpc3QpIHsNCiAgICAgIHZhciBpOw0KICAgICAgaSA9IGxpc3QubGVuZ3RoOw0KICAgICAgd2hpbGUgKGktLSkgew0KICAgICAgICBpZiAoIShsaXN0W2ldIGluc3RhbmNlb2YgQ29tbWVudCkpIHsNCiAgICAgICAgICByZXR1cm4gbGlzdFtpXTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIG51bGw7DQogICAgfTsNCiAgICBCYXNlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGlkdCwgbmFtZSkgew0KICAgICAgdmFyIHRyZWU7DQogICAgICBpZiAoaWR0ID09IG51bGwpIHsNCiAgICAgICAgaWR0ID0gJyc7DQogICAgICB9DQogICAgICBpZiAobmFtZSA9PSBudWxsKSB7DQogICAgICAgIG5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7DQogICAgICB9DQogICAgICB0cmVlID0gJ1xuJyArIGlkdCArIG5hbWU7DQogICAgICBpZiAodGhpcy5zb2FrKSB7DQogICAgICAgIHRyZWUgKz0gJz8nOw0KICAgICAgfQ0KICAgICAgdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24obm9kZSkgew0KICAgICAgICByZXR1cm4gdHJlZSArPSBub2RlLnRvU3RyaW5nKGlkdCArIFRBQik7DQogICAgICB9KTsNCiAgICAgIHJldHVybiB0cmVlOw0KICAgIH07DQogICAgQmFzZS5wcm90b3R5cGUuZWFjaENoaWxkID0gZnVuY3Rpb24oZnVuYykgew0KICAgICAgdmFyIGF0dHIsIGNoaWxkLCBfaSwgX2osIF9sZW4sIF9sZW4yLCBfcmVmMiwgX3JlZjM7DQogICAgICBpZiAoIXRoaXMuY2hpbGRyZW4pIHsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICB9DQogICAgICBfcmVmMiA9IHRoaXMuY2hpbGRyZW47DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIGF0dHIgPSBfcmVmMltfaV07DQogICAgICAgIGlmICh0aGlzW2F0dHJdKSB7DQogICAgICAgICAgX3JlZjMgPSBmbGF0dGVuKFt0aGlzW2F0dHJdXSk7DQogICAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4yID0gX3JlZjMubGVuZ3RoOyBfaiA8IF9sZW4yOyBfaisrKSB7DQogICAgICAgICAgICBjaGlsZCA9IF9yZWYzW19qXTsNCiAgICAgICAgICAgIGlmIChmdW5jKGNoaWxkKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9Ow0KICAgIEJhc2UucHJvdG90eXBlLnRyYXZlcnNlQ2hpbGRyZW4gPSBmdW5jdGlvbihjcm9zc1Njb3BlLCBmdW5jKSB7DQogICAgICByZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oY2hpbGQpIHsNCiAgICAgICAgaWYgKGZ1bmMoY2hpbGQpID09PSBmYWxzZSkgew0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gY2hpbGQudHJhdmVyc2VDaGlsZHJlbihjcm9zc1Njb3BlLCBmdW5jKTsNCiAgICAgIH0pOw0KICAgIH07DQogICAgQmFzZS5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gbmV3IE9wKCchJywgdGhpcyk7DQogICAgfTsNCiAgICBCYXNlLnByb3RvdHlwZS51bndyYXBBbGwgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBub2RlOw0KICAgICAgbm9kZSA9IHRoaXM7DQogICAgICB3aGlsZSAobm9kZSAhPT0gKG5vZGUgPSBub2RlLnVud3JhcCgpKSkgew0KICAgICAgICBjb250aW51ZTsNCiAgICAgIH0NCiAgICAgIHJldHVybiBub2RlOw0KICAgIH07DQogICAgQmFzZS5wcm90b3R5cGUuY2hpbGRyZW4gPSBbXTsNCiAgICBCYXNlLnByb3RvdHlwZS5pc1N0YXRlbWVudCA9IE5POw0KICAgIEJhc2UucHJvdG90eXBlLmp1bXBzID0gTk87DQogICAgQmFzZS5wcm90b3R5cGUuaXNDb21wbGV4ID0gWUVTOw0KICAgIEJhc2UucHJvdG90eXBlLmlzQ2hhaW5hYmxlID0gTk87DQogICAgQmFzZS5wcm90b3R5cGUuaXNBc3NpZ25hYmxlID0gTk87DQogICAgQmFzZS5wcm90b3R5cGUudW53cmFwID0gVEhJUzsNCiAgICBCYXNlLnByb3RvdHlwZS51bmZvbGRTb2FrID0gTk87DQogICAgQmFzZS5wcm90b3R5cGUuYXNzaWducyA9IE5POw0KICAgIHJldHVybiBCYXNlOw0KICB9KSgpOw0KICBleHBvcnRzLkJsb2NrID0gQmxvY2sgPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKEJsb2NrLCBCYXNlKTsNCiAgICBmdW5jdGlvbiBCbG9jayhub2Rlcykgew0KICAgICAgdGhpcy5leHByZXNzaW9ucyA9IGNvbXBhY3QoZmxhdHRlbihub2RlcyB8fCBbXSkpOw0KICAgIH0NCiAgICBCbG9jay5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ2V4cHJlc3Npb25zJ107DQogICAgQmxvY2sucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihub2RlKSB7DQogICAgICB0aGlzLmV4cHJlc3Npb25zLnB1c2gobm9kZSk7DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9Ow0KICAgIEJsb2NrLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25zLnBvcCgpOw0KICAgIH07DQogICAgQmxvY2sucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbihub2RlKSB7DQogICAgICB0aGlzLmV4cHJlc3Npb25zLnVuc2hpZnQobm9kZSk7DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9Ow0KICAgIEJsb2NrLnByb3RvdHlwZS51bndyYXAgPSBmdW5jdGlvbigpIHsNCiAgICAgIGlmICh0aGlzLmV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSkgew0KICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uc1swXTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgfQ0KICAgIH07DQogICAgQmxvY2sucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiAhdGhpcy5leHByZXNzaW9ucy5sZW5ndGg7DQogICAgfTsNCiAgICBCbG9jay5wcm90b3R5cGUuaXNTdGF0ZW1lbnQgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgZXhwLCBfaSwgX2xlbiwgX3JlZjI7DQogICAgICBfcmVmMiA9IHRoaXMuZXhwcmVzc2lvbnM7DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIGV4cCA9IF9yZWYyW19pXTsNCiAgICAgICAgaWYgKGV4cC5pc1N0YXRlbWVudChvKSkgew0KICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfTsNCiAgICBCbG9jay5wcm90b3R5cGUuanVtcHMgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgZXhwLCBfaSwgX2xlbiwgX3JlZjI7DQogICAgICBfcmVmMiA9IHRoaXMuZXhwcmVzc2lvbnM7DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIGV4cCA9IF9yZWYyW19pXTsNCiAgICAgICAgaWYgKGV4cC5qdW1wcyhvKSkgew0KICAgICAgICAgIHJldHVybiBleHA7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9Ow0KICAgIEJsb2NrLnByb3RvdHlwZS5tYWtlUmV0dXJuID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgZXhwciwgbGVuOw0KICAgICAgbGVuID0gdGhpcy5leHByZXNzaW9ucy5sZW5ndGg7DQogICAgICB3aGlsZSAobGVuLS0pIHsNCiAgICAgICAgZXhwciA9IHRoaXMuZXhwcmVzc2lvbnNbbGVuXTsNCiAgICAgICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIENvbW1lbnQpKSB7DQogICAgICAgICAgdGhpcy5leHByZXNzaW9uc1tsZW5dID0gZXhwci5tYWtlUmV0dXJuKCk7DQogICAgICAgICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBSZXR1cm4gJiYgIWV4cHIuZXhwcmVzc2lvbikgew0KICAgICAgICAgICAgdGhpcy5leHByZXNzaW9ucy5zcGxpY2UobGVuLCAxKTsNCiAgICAgICAgICB9DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiB0aGlzOw0KICAgIH07DQogICAgQmxvY2sucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbihvLCBsZXZlbCkgew0KICAgICAgaWYgKG8gPT0gbnVsbCkgew0KICAgICAgICBvID0ge307DQogICAgICB9DQogICAgICBpZiAoby5zY29wZSkgew0KICAgICAgICByZXR1cm4gQmxvY2suX19zdXBlcl9fLmNvbXBpbGUuY2FsbCh0aGlzLCBvLCBsZXZlbCk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlUm9vdChvKTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIEJsb2NrLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBjb2RlLCBjb2Rlcywgbm9kZSwgdG9wLCBfaSwgX2xlbiwgX3JlZjI7DQogICAgICB0aGlzLnRhYiA9IG8uaW5kZW50Ow0KICAgICAgdG9wID0gby5sZXZlbCA9PT0gTEVWRUxfVE9QOw0KICAgICAgY29kZXMgPSBbXTsNCiAgICAgIF9yZWYyID0gdGhpcy5leHByZXNzaW9uczsNCiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjIubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsNCiAgICAgICAgbm9kZSA9IF9yZWYyW19pXTsNCiAgICAgICAgbm9kZSA9IG5vZGUudW53cmFwQWxsKCk7DQogICAgICAgIG5vZGUgPSBub2RlLnVuZm9sZFNvYWsobykgfHwgbm9kZTsNCiAgICAgICAgaWYgKHRvcCkgew0KICAgICAgICAgIG5vZGUuZnJvbnQgPSB0cnVlOw0KICAgICAgICAgIGNvZGUgPSBub2RlLmNvbXBpbGUobyk7DQogICAgICAgICAgY29kZXMucHVzaChub2RlLmlzU3RhdGVtZW50KG8pID8gY29kZSA6IHRoaXMudGFiICsgY29kZSArICc7Jyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgY29kZXMucHVzaChub2RlLmNvbXBpbGUobywgTEVWRUxfTElTVCkpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAodG9wKSB7DQogICAgICAgIHJldHVybiBjb2Rlcy5qb2luKCdcbicpOw0KICAgICAgfQ0KICAgICAgY29kZSA9IGNvZGVzLmpvaW4oJywgJykgfHwgJ3ZvaWQgMCc7DQogICAgICBpZiAoY29kZXMubGVuZ3RoID4gMSAmJiBvLmxldmVsID49IExFVkVMX0xJU1QpIHsNCiAgICAgICAgcmV0dXJuICIoIiArIGNvZGUgKyAiKSI7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gY29kZTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIEJsb2NrLnByb3RvdHlwZS5jb21waWxlUm9vdCA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBjb2RlOw0KICAgICAgby5pbmRlbnQgPSB0aGlzLnRhYiA9IG8uYmFyZSA/ICcnIDogVEFCOw0KICAgICAgby5zY29wZSA9IG5ldyBTY29wZShudWxsLCB0aGlzLCBudWxsKTsNCiAgICAgIG8ubGV2ZWwgPSBMRVZFTF9UT1A7DQogICAgICBjb2RlID0gdGhpcy5jb21waWxlV2l0aERlY2xhcmF0aW9ucyhvKTsNCiAgICAgIGlmIChvLmJhcmUpIHsNCiAgICAgICAgcmV0dXJuIGNvZGU7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gIihmdW5jdGlvbigpIHtcbiIgKyBjb2RlICsgIlxufSkuY2FsbCh0aGlzKTtcbiI7DQogICAgICB9DQogICAgfTsNCiAgICBCbG9jay5wcm90b3R5cGUuY29tcGlsZVdpdGhEZWNsYXJhdGlvbnMgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgYXNzaWducywgY29kZSwgZGVjbGFycywgZXhwLCBpLCBwb3N0LCByZXN0LCBzY29wZSwgX2xlbiwgX3JlZjI7DQogICAgICBjb2RlID0gcG9zdCA9ICcnOw0KICAgICAgX3JlZjIgPSB0aGlzLmV4cHJlc3Npb25zOw0KICAgICAgZm9yIChpID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgaSA8IF9sZW47IGkrKykgew0KICAgICAgICBleHAgPSBfcmVmMltpXTsNCiAgICAgICAgZXhwID0gZXhwLnVud3JhcCgpOw0KICAgICAgICBpZiAoIShleHAgaW5zdGFuY2VvZiBDb21tZW50IHx8IGV4cCBpbnN0YW5jZW9mIExpdGVyYWwpKSB7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIG8gPSBtZXJnZShvLCB7DQogICAgICAgIGxldmVsOiBMRVZFTF9UT1ANCiAgICAgIH0pOw0KICAgICAgaWYgKGkpIHsNCiAgICAgICAgcmVzdCA9IHRoaXMuZXhwcmVzc2lvbnMuc3BsaWNlKGksIHRoaXMuZXhwcmVzc2lvbnMubGVuZ3RoKTsNCiAgICAgICAgY29kZSA9IHRoaXMuY29tcGlsZU5vZGUobyk7DQogICAgICAgIHRoaXMuZXhwcmVzc2lvbnMgPSByZXN0Ow0KICAgICAgfQ0KICAgICAgcG9zdCA9IHRoaXMuY29tcGlsZU5vZGUobyk7DQogICAgICBzY29wZSA9IG8uc2NvcGU7DQogICAgICBpZiAoc2NvcGUuZXhwcmVzc2lvbnMgPT09IHRoaXMpIHsNCiAgICAgICAgZGVjbGFycyA9IG8uc2NvcGUuaGFzRGVjbGFyYXRpb25zKCk7DQogICAgICAgIGFzc2lnbnMgPSBzY29wZS5oYXNBc3NpZ25tZW50czsNCiAgICAgICAgaWYgKChkZWNsYXJzIHx8IGFzc2lnbnMpICYmIGkpIHsNCiAgICAgICAgICBjb2RlICs9ICdcbic7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRlY2xhcnMpIHsNCiAgICAgICAgICBjb2RlICs9ICIiICsgdGhpcy50YWIgKyAidmFyICIgKyAoc2NvcGUuZGVjbGFyZWRWYXJpYWJsZXMoKS5qb2luKCcsICcpKSArICI7XG4iOw0KICAgICAgICB9DQogICAgICAgIGlmIChhc3NpZ25zKSB7DQogICAgICAgICAgY29kZSArPSAiIiArIHRoaXMudGFiICsgInZhciAiICsgKG11bHRpZGVudChzY29wZS5hc3NpZ25lZFZhcmlhYmxlcygpLmpvaW4oJywgJyksIHRoaXMudGFiKSkgKyAiO1xuIjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIGNvZGUgKyBwb3N0Ow0KICAgIH07DQogICAgQmxvY2sud3JhcCA9IGZ1bmN0aW9uKG5vZGVzKSB7DQogICAgICBpZiAobm9kZXMubGVuZ3RoID09PSAxICYmIG5vZGVzWzBdIGluc3RhbmNlb2YgQmxvY2spIHsNCiAgICAgICAgcmV0dXJuIG5vZGVzWzBdOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIG5ldyBCbG9jayhub2Rlcyk7DQogICAgfTsNCiAgICByZXR1cm4gQmxvY2s7DQogIH0pKCk7DQogIGV4cG9ydHMuTGl0ZXJhbCA9IExpdGVyYWwgPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKExpdGVyYWwsIEJhc2UpOw0KICAgIGZ1bmN0aW9uIExpdGVyYWwodmFsdWUpIHsNCiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsNCiAgICB9DQogICAgTGl0ZXJhbC5wcm90b3R5cGUubWFrZVJldHVybiA9IGZ1bmN0aW9uKCkgew0KICAgICAgaWYgKHRoaXMuaXNTdGF0ZW1lbnQoKSkgew0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBuZXcgUmV0dXJuKHRoaXMpOw0KICAgICAgfQ0KICAgIH07DQogICAgTGl0ZXJhbC5wcm90b3R5cGUuaXNBc3NpZ25hYmxlID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gSURFTlRJRklFUi50ZXN0KHRoaXMudmFsdWUpOw0KICAgIH07DQogICAgTGl0ZXJhbC5wcm90b3R5cGUuaXNTdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBfcmVmMjsNCiAgICAgIHJldHVybiAoX3JlZjIgPSB0aGlzLnZhbHVlKSA9PT0gJ2JyZWFrJyB8fCBfcmVmMiA9PT0gJ2NvbnRpbnVlJyB8fCBfcmVmMiA9PT0gJ2RlYnVnZ2VyJzsNCiAgICB9Ow0KICAgIExpdGVyYWwucHJvdG90eXBlLmlzQ29tcGxleCA9IE5POw0KICAgIExpdGVyYWwucHJvdG90eXBlLmFzc2lnbnMgPSBmdW5jdGlvbihuYW1lKSB7DQogICAgICByZXR1cm4gbmFtZSA9PT0gdGhpcy52YWx1ZTsNCiAgICB9Ow0KICAgIExpdGVyYWwucHJvdG90eXBlLmp1bXBzID0gZnVuY3Rpb24obykgew0KICAgICAgaWYgKCF0aGlzLmlzU3RhdGVtZW50KCkpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgaWYgKCEobyAmJiAoby5sb29wIHx8IG8uYmxvY2sgJiYgKHRoaXMudmFsdWUgIT09ICdjb250aW51ZScpKSkpIHsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgfTsNCiAgICBMaXRlcmFsLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBjb2RlOw0KICAgICAgY29kZSA9IHRoaXMuaXNVbmRlZmluZWQgPyBvLmxldmVsID49IExFVkVMX0FDQ0VTUyA/ICcodm9pZCAwKScgOiAndm9pZCAwJyA6IHRoaXMudmFsdWUucmVzZXJ2ZWQgPyAiXCIiICsgdGhpcy52YWx1ZSArICJcIiIgOiB0aGlzLnZhbHVlOw0KICAgICAgaWYgKHRoaXMuaXNTdGF0ZW1lbnQoKSkgew0KICAgICAgICByZXR1cm4gIiIgKyB0aGlzLnRhYiArIGNvZGUgKyAiOyI7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gY29kZTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIExpdGVyYWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gJyAiJyArIHRoaXMudmFsdWUgKyAnIic7DQogICAgfTsNCiAgICByZXR1cm4gTGl0ZXJhbDsNCiAgfSkoKTsNCiAgZXhwb3J0cy5SZXR1cm4gPSBSZXR1cm4gPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKFJldHVybiwgQmFzZSk7DQogICAgZnVuY3Rpb24gUmV0dXJuKGV4cHIpIHsNCiAgICAgIGlmIChleHByICYmICFleHByLnVud3JhcCgpLmlzVW5kZWZpbmVkKSB7DQogICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHI7DQogICAgICB9DQogICAgfQ0KICAgIFJldHVybi5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ2V4cHJlc3Npb24nXTsNCiAgICBSZXR1cm4ucHJvdG90eXBlLmlzU3RhdGVtZW50ID0gWUVTOw0KICAgIFJldHVybi5wcm90b3R5cGUubWFrZVJldHVybiA9IFRISVM7DQogICAgUmV0dXJuLnByb3RvdHlwZS5qdW1wcyA9IFRISVM7DQogICAgUmV0dXJuLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24obywgbGV2ZWwpIHsNCiAgICAgIHZhciBleHByLCBfcmVmMjsNCiAgICAgIGV4cHIgPSAoX3JlZjIgPSB0aGlzLmV4cHJlc3Npb24pICE9IG51bGwgPyBfcmVmMi5tYWtlUmV0dXJuKCkgOiB2b2lkIDA7DQogICAgICBpZiAoZXhwciAmJiAhKGV4cHIgaW5zdGFuY2VvZiBSZXR1cm4pKSB7DQogICAgICAgIHJldHVybiBleHByLmNvbXBpbGUobywgbGV2ZWwpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuIFJldHVybi5fX3N1cGVyX18uY29tcGlsZS5jYWxsKHRoaXMsIG8sIGxldmVsKTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIFJldHVybi5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICByZXR1cm4gdGhpcy50YWIgKyAoInJldHVybiIgKyAodGhpcy5leHByZXNzaW9uID8gJyAnICsgdGhpcy5leHByZXNzaW9uLmNvbXBpbGUobywgTEVWRUxfUEFSRU4pIDogJycpICsgIjsiKTsNCiAgICB9Ow0KICAgIHJldHVybiBSZXR1cm47DQogIH0pKCk7DQogIGV4cG9ydHMuVmFsdWUgPSBWYWx1ZSA9IChmdW5jdGlvbigpIHsNCiAgICBfX2V4dGVuZHMoVmFsdWUsIEJhc2UpOw0KICAgIGZ1bmN0aW9uIFZhbHVlKGJhc2UsIHByb3BzLCB0YWcpIHsNCiAgICAgIGlmICghcHJvcHMgJiYgYmFzZSBpbnN0YW5jZW9mIFZhbHVlKSB7DQogICAgICAgIHJldHVybiBiYXNlOw0KICAgICAgfQ0KICAgICAgdGhpcy5iYXNlID0gYmFzZTsNCiAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BzIHx8IFtdOw0KICAgICAgaWYgKHRhZykgew0KICAgICAgICB0aGlzW3RhZ10gPSB0cnVlOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRoaXM7DQogICAgfQ0KICAgIFZhbHVlLnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnYmFzZScsICdwcm9wZXJ0aWVzJ107DQogICAgVmFsdWUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihwcm9wKSB7DQogICAgICB0aGlzLnByb3BlcnRpZXMucHVzaChwcm9wKTsNCiAgICAgIHJldHVybiB0aGlzOw0KICAgIH07DQogICAgVmFsdWUucHJvdG90eXBlLmhhc1Byb3BlcnRpZXMgPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiAhIXRoaXMucHJvcGVydGllcy5sZW5ndGg7DQogICAgfTsNCiAgICBWYWx1ZS5wcm90b3R5cGUuaXNBcnJheSA9IGZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuICF0aGlzLnByb3BlcnRpZXMubGVuZ3RoICYmIHRoaXMuYmFzZSBpbnN0YW5jZW9mIEFycjsNCiAgICB9Ow0KICAgIFZhbHVlLnByb3RvdHlwZS5pc0NvbXBsZXggPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLmhhc1Byb3BlcnRpZXMoKSB8fCB0aGlzLmJhc2UuaXNDb21wbGV4KCk7DQogICAgfTsNCiAgICBWYWx1ZS5wcm90b3R5cGUuaXNBc3NpZ25hYmxlID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gdGhpcy5oYXNQcm9wZXJ0aWVzKCkgfHwgdGhpcy5iYXNlLmlzQXNzaWduYWJsZSgpOw0KICAgIH07DQogICAgVmFsdWUucHJvdG90eXBlLmlzU2ltcGxlTnVtYmVyID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gdGhpcy5iYXNlIGluc3RhbmNlb2YgTGl0ZXJhbCAmJiBTSU1QTEVOVU0udGVzdCh0aGlzLmJhc2UudmFsdWUpOw0KICAgIH07DQogICAgVmFsdWUucHJvdG90eXBlLmlzQXRvbWljID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYyOw0KICAgICAgX3JlZjIgPSB0aGlzLnByb3BlcnRpZXMuY29uY2F0KHRoaXMuYmFzZSk7DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIG5vZGUgPSBfcmVmMltfaV07DQogICAgICAgIGlmIChub2RlLnNvYWsgfHwgbm9kZSBpbnN0YW5jZW9mIENhbGwpIHsNCiAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH07DQogICAgVmFsdWUucHJvdG90eXBlLmlzU3RhdGVtZW50ID0gZnVuY3Rpb24obykgew0KICAgICAgcmV0dXJuICF0aGlzLnByb3BlcnRpZXMubGVuZ3RoICYmIHRoaXMuYmFzZS5pc1N0YXRlbWVudChvKTsNCiAgICB9Ow0KICAgIFZhbHVlLnByb3RvdHlwZS5hc3NpZ25zID0gZnVuY3Rpb24obmFtZSkgew0KICAgICAgcmV0dXJuICF0aGlzLnByb3BlcnRpZXMubGVuZ3RoICYmIHRoaXMuYmFzZS5hc3NpZ25zKG5hbWUpOw0KICAgIH07DQogICAgVmFsdWUucHJvdG90eXBlLmp1bXBzID0gZnVuY3Rpb24obykgew0KICAgICAgcmV0dXJuICF0aGlzLnByb3BlcnRpZXMubGVuZ3RoICYmIHRoaXMuYmFzZS5qdW1wcyhvKTsNCiAgICB9Ow0KICAgIFZhbHVlLnByb3RvdHlwZS5pc09iamVjdCA9IGZ1bmN0aW9uKG9ubHlHZW5lcmF0ZWQpIHsNCiAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMubGVuZ3RoKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIHJldHVybiAodGhpcy5iYXNlIGluc3RhbmNlb2YgT2JqKSAmJiAoIW9ubHlHZW5lcmF0ZWQgfHwgdGhpcy5iYXNlLmdlbmVyYXRlZCk7DQogICAgfTsNCiAgICBWYWx1ZS5wcm90b3R5cGUuaXNTcGxpY2UgPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiBsYXN0KHRoaXMucHJvcGVydGllcykgaW5zdGFuY2VvZiBTbGljZTsNCiAgICB9Ow0KICAgIFZhbHVlLnByb3RvdHlwZS5tYWtlUmV0dXJuID0gZnVuY3Rpb24oKSB7DQogICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzLmxlbmd0aCkgew0KICAgICAgICByZXR1cm4gVmFsdWUuX19zdXBlcl9fLm1ha2VSZXR1cm4uY2FsbCh0aGlzKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiB0aGlzLmJhc2UubWFrZVJldHVybigpOw0KICAgICAgfQ0KICAgIH07DQogICAgVmFsdWUucHJvdG90eXBlLnVud3JhcCA9IGZ1bmN0aW9uKCkgew0KICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gdGhpcy5iYXNlOw0KICAgICAgfQ0KICAgIH07DQogICAgVmFsdWUucHJvdG90eXBlLmNhY2hlUmVmZXJlbmNlID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIGJhc2UsIGJyZWYsIG5hbWUsIG5yZWY7DQogICAgICBuYW1lID0gbGFzdCh0aGlzLnByb3BlcnRpZXMpOw0KICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5sZW5ndGggPCAyICYmICF0aGlzLmJhc2UuaXNDb21wbGV4KCkgJiYgIShuYW1lICE9IG51bGwgPyBuYW1lLmlzQ29tcGxleCgpIDogdm9pZCAwKSkgew0KICAgICAgICByZXR1cm4gW3RoaXMsIHRoaXNdOw0KICAgICAgfQ0KICAgICAgYmFzZSA9IG5ldyBWYWx1ZSh0aGlzLmJhc2UsIHRoaXMucHJvcGVydGllcy5zbGljZSgwLCAtMSkpOw0KICAgICAgaWYgKGJhc2UuaXNDb21wbGV4KCkpIHsNCiAgICAgICAgYnJlZiA9IG5ldyBMaXRlcmFsKG8uc2NvcGUuZnJlZVZhcmlhYmxlKCdiYXNlJykpOw0KICAgICAgICBiYXNlID0gbmV3IFZhbHVlKG5ldyBQYXJlbnMobmV3IEFzc2lnbihicmVmLCBiYXNlKSkpOw0KICAgICAgfQ0KICAgICAgaWYgKCFuYW1lKSB7DQogICAgICAgIHJldHVybiBbYmFzZSwgYnJlZl07DQogICAgICB9DQogICAgICBpZiAobmFtZS5pc0NvbXBsZXgoKSkgew0KICAgICAgICBucmVmID0gbmV3IExpdGVyYWwoby5zY29wZS5mcmVlVmFyaWFibGUoJ25hbWUnKSk7DQogICAgICAgIG5hbWUgPSBuZXcgSW5kZXgobmV3IEFzc2lnbihucmVmLCBuYW1lLmluZGV4KSk7DQogICAgICAgIG5yZWYgPSBuZXcgSW5kZXgobnJlZik7DQogICAgICB9DQogICAgICByZXR1cm4gW2Jhc2UucHVzaChuYW1lKSwgbmV3IFZhbHVlKGJyZWYgfHwgYmFzZS5iYXNlLCBbbnJlZiB8fCBuYW1lXSldOw0KICAgIH07DQogICAgVmFsdWUucHJvdG90eXBlLmNvbXBpbGVOb2RlID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIGNvZGUsIHByb3AsIHByb3BzLCBfaSwgX2xlbjsNCiAgICAgIHRoaXMuYmFzZS5mcm9udCA9IHRoaXMuZnJvbnQ7DQogICAgICBwcm9wcyA9IHRoaXMucHJvcGVydGllczsNCiAgICAgIGNvZGUgPSB0aGlzLmJhc2UuY29tcGlsZShvLCBwcm9wcy5sZW5ndGggPyBMRVZFTF9BQ0NFU1MgOiBudWxsKTsNCiAgICAgIGlmIChwcm9wc1swXSBpbnN0YW5jZW9mIEFjY2VzcyAmJiB0aGlzLmlzU2ltcGxlTnVtYmVyKCkpIHsNCiAgICAgICAgY29kZSA9ICIoIiArIGNvZGUgKyAiKSI7DQogICAgICB9DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IHByb3BzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIHByb3AgPSBwcm9wc1tfaV07DQogICAgICAgIGNvZGUgKz0gcHJvcC5jb21waWxlKG8pOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIGNvZGU7DQogICAgfTsNCiAgICBWYWx1ZS5wcm90b3R5cGUudW5mb2xkU29hayA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciByZXN1bHQ7DQogICAgICBpZiAodGhpcy51bmZvbGRlZFNvYWsgIT0gbnVsbCkgew0KICAgICAgICByZXR1cm4gdGhpcy51bmZvbGRlZFNvYWs7DQogICAgICB9DQogICAgICByZXN1bHQgPSBfX2JpbmQoZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBmc3QsIGksIGlmbiwgcHJvcCwgcmVmLCBzbmQsIF9sZW4sIF9yZWYyOw0KICAgICAgICBpZiAoaWZuID0gdGhpcy5iYXNlLnVuZm9sZFNvYWsobykpIHsNCiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpZm4uYm9keS5wcm9wZXJ0aWVzLCB0aGlzLnByb3BlcnRpZXMpOw0KICAgICAgICAgIHJldHVybiBpZm47DQogICAgICAgIH0NCiAgICAgICAgX3JlZjIgPSB0aGlzLnByb3BlcnRpZXM7DQogICAgICAgIGZvciAoaSA9IDAsIF9sZW4gPSBfcmVmMi5sZW5ndGg7IGkgPCBfbGVuOyBpKyspIHsNCiAgICAgICAgICBwcm9wID0gX3JlZjJbaV07DQogICAgICAgICAgaWYgKHByb3Auc29haykgew0KICAgICAgICAgICAgcHJvcC5zb2FrID0gZmFsc2U7DQogICAgICAgICAgICBmc3QgPSBuZXcgVmFsdWUodGhpcy5iYXNlLCB0aGlzLnByb3BlcnRpZXMuc2xpY2UoMCwgaSkpOw0KICAgICAgICAgICAgc25kID0gbmV3IFZhbHVlKHRoaXMuYmFzZSwgdGhpcy5wcm9wZXJ0aWVzLnNsaWNlKGkpKTsNCiAgICAgICAgICAgIGlmIChmc3QuaXNDb21wbGV4KCkpIHsNCiAgICAgICAgICAgICAgcmVmID0gbmV3IExpdGVyYWwoby5zY29wZS5mcmVlVmFyaWFibGUoJ3JlZicpKTsNCiAgICAgICAgICAgICAgZnN0ID0gbmV3IFBhcmVucyhuZXcgQXNzaWduKHJlZiwgZnN0KSk7DQogICAgICAgICAgICAgIHNuZC5iYXNlID0gcmVmOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIG5ldyBJZihuZXcgRXhpc3RlbmNlKGZzdCksIHNuZCwgew0KICAgICAgICAgICAgICBzb2FrOiB0cnVlDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICB9LCB0aGlzKSgpOw0KICAgICAgcmV0dXJuIHRoaXMudW5mb2xkZWRTb2FrID0gcmVzdWx0IHx8IGZhbHNlOw0KICAgIH07DQogICAgcmV0dXJuIFZhbHVlOw0KICB9KSgpOw0KICBleHBvcnRzLkNvbW1lbnQgPSBDb21tZW50ID0gKGZ1bmN0aW9uKCkgew0KICAgIF9fZXh0ZW5kcyhDb21tZW50LCBCYXNlKTsNCiAgICBmdW5jdGlvbiBDb21tZW50KGNvbW1lbnQpIHsNCiAgICAgIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7DQogICAgfQ0KICAgIENvbW1lbnQucHJvdG90eXBlLmlzU3RhdGVtZW50ID0gWUVTOw0KICAgIENvbW1lbnQucHJvdG90eXBlLm1ha2VSZXR1cm4gPSBUSElTOw0KICAgIENvbW1lbnQucHJvdG90eXBlLmNvbXBpbGVOb2RlID0gZnVuY3Rpb24obywgbGV2ZWwpIHsNCiAgICAgIHZhciBjb2RlOw0KICAgICAgY29kZSA9ICcvKicgKyBtdWx0aWRlbnQodGhpcy5jb21tZW50LCB0aGlzLnRhYikgKyAnKi8nOw0KICAgICAgaWYgKChsZXZlbCB8fCBvLmxldmVsKSA9PT0gTEVWRUxfVE9QKSB7DQogICAgICAgIGNvZGUgPSBvLmluZGVudCArIGNvZGU7DQogICAgICB9DQogICAgICByZXR1cm4gY29kZTsNCiAgICB9Ow0KICAgIHJldHVybiBDb21tZW50Ow0KICB9KSgpOw0KICBleHBvcnRzLkNhbGwgPSBDYWxsID0gKGZ1bmN0aW9uKCkgew0KICAgIF9fZXh0ZW5kcyhDYWxsLCBCYXNlKTsNCiAgICBmdW5jdGlvbiBDYWxsKHZhcmlhYmxlLCBhcmdzLCBzb2FrKSB7DQogICAgICB0aGlzLmFyZ3MgPSBhcmdzICE9IG51bGwgPyBhcmdzIDogW107DQogICAgICB0aGlzLnNvYWsgPSBzb2FrOw0KICAgICAgdGhpcy5pc05ldyA9IGZhbHNlOw0KICAgICAgdGhpcy5pc1N1cGVyID0gdmFyaWFibGUgPT09ICdzdXBlcic7DQogICAgICB0aGlzLnZhcmlhYmxlID0gdGhpcy5pc1N1cGVyID8gbnVsbCA6IHZhcmlhYmxlOw0KICAgIH0NCiAgICBDYWxsLnByb3RvdHlwZS5jaGlsZHJlbiA9IFsndmFyaWFibGUnLCAnYXJncyddOw0KICAgIENhbGwucHJvdG90eXBlLm5ld0luc3RhbmNlID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgYmFzZTsNCiAgICAgIGJhc2UgPSB0aGlzLnZhcmlhYmxlLmJhc2UgfHwgdGhpcy52YXJpYWJsZTsNCiAgICAgIGlmIChiYXNlIGluc3RhbmNlb2YgQ2FsbCkgew0KICAgICAgICBiYXNlLm5ld0luc3RhbmNlKCk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLmlzTmV3ID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIHJldHVybiB0aGlzOw0KICAgIH07DQogICAgQ2FsbC5wcm90b3R5cGUuc3VwZXJSZWZlcmVuY2UgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgbWV0aG9kLCBuYW1lOw0KICAgICAgbWV0aG9kID0gby5zY29wZS5tZXRob2Q7DQogICAgICBpZiAoIW1ldGhvZCkgew0KICAgICAgICB0aHJvdyBTeW50YXhFcnJvcignY2Fubm90IGNhbGwgc3VwZXIgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uLicpOw0KICAgICAgfQ0KICAgICAgbmFtZSA9IG1ldGhvZC5uYW1lOw0KICAgICAgaWYgKCFuYW1lKSB7DQogICAgICAgIHRocm93IFN5bnRheEVycm9yKCdjYW5ub3QgY2FsbCBzdXBlciBvbiBhbiBhbm9ueW1vdXMgZnVuY3Rpb24uJyk7DQogICAgICB9DQogICAgICBpZiAobWV0aG9kLmtsYXNzKSB7DQogICAgICAgIHJldHVybiAiIiArIG1ldGhvZC5rbGFzcyArICIuX19zdXBlcl9fLiIgKyBuYW1lOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICIiICsgbmFtZSArICIuX19zdXBlcl9fLmNvbnN0cnVjdG9yIjsNCiAgICAgIH0NCiAgICB9Ow0KICAgIENhbGwucHJvdG90eXBlLnVuZm9sZFNvYWsgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgY2FsbCwgaWZuLCBsZWZ0LCBsaXN0LCByaXRlLCBfaSwgX2xlbiwgX3JlZjIsIF9yZWYzOw0KICAgICAgaWYgKHRoaXMuc29haykgew0KICAgICAgICBpZiAodGhpcy52YXJpYWJsZSkgew0KICAgICAgICAgIGlmIChpZm4gPSB1bmZvbGRTb2FrKG8sIHRoaXMsICd2YXJpYWJsZScpKSB7DQogICAgICAgICAgICByZXR1cm4gaWZuOw0KICAgICAgICAgIH0NCiAgICAgICAgICBfcmVmMiA9IG5ldyBWYWx1ZSh0aGlzLnZhcmlhYmxlKS5jYWNoZVJlZmVyZW5jZShvKSwgbGVmdCA9IF9yZWYyWzBdLCByaXRlID0gX3JlZjJbMV07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgbGVmdCA9IG5ldyBMaXRlcmFsKHRoaXMuc3VwZXJSZWZlcmVuY2UobykpOw0KICAgICAgICAgIHJpdGUgPSBuZXcgVmFsdWUobGVmdCk7DQogICAgICAgIH0NCiAgICAgICAgcml0ZSA9IG5ldyBDYWxsKHJpdGUsIHRoaXMuYXJncyk7DQogICAgICAgIHJpdGUuaXNOZXcgPSB0aGlzLmlzTmV3Ow0KICAgICAgICBsZWZ0ID0gbmV3IExpdGVyYWwoInR5cGVvZiAiICsgKGxlZnQuY29tcGlsZShvKSkgKyAiID09PSBcImZ1bmN0aW9uXCIiKTsNCiAgICAgICAgcmV0dXJuIG5ldyBJZihsZWZ0LCBuZXcgVmFsdWUocml0ZSksIHsNCiAgICAgICAgICBzb2FrOiB0cnVlDQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgICAgY2FsbCA9IHRoaXM7DQogICAgICBsaXN0ID0gW107DQogICAgICB3aGlsZSAodHJ1ZSkgew0KICAgICAgICBpZiAoY2FsbC52YXJpYWJsZSBpbnN0YW5jZW9mIENhbGwpIHsNCiAgICAgICAgICBsaXN0LnB1c2goY2FsbCk7DQogICAgICAgICAgY2FsbCA9IGNhbGwudmFyaWFibGU7DQogICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEoY2FsbC52YXJpYWJsZSBpbnN0YW5jZW9mIFZhbHVlKSkgew0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGxpc3QucHVzaChjYWxsKTsNCiAgICAgICAgaWYgKCEoKGNhbGwgPSBjYWxsLnZhcmlhYmxlLmJhc2UpIGluc3RhbmNlb2YgQ2FsbCkpIHsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgX3JlZjMgPSBsaXN0LnJldmVyc2UoKTsNCiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsNCiAgICAgICAgY2FsbCA9IF9yZWYzW19pXTsNCiAgICAgICAgaWYgKGlmbikgew0KICAgICAgICAgIGlmIChjYWxsLnZhcmlhYmxlIGluc3RhbmNlb2YgQ2FsbCkgew0KICAgICAgICAgICAgY2FsbC52YXJpYWJsZSA9IGlmbjsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgY2FsbC52YXJpYWJsZS5iYXNlID0gaWZuOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZm4gPSB1bmZvbGRTb2FrKG8sIGNhbGwsICd2YXJpYWJsZScpOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIGlmbjsNCiAgICB9Ow0KICAgIENhbGwucHJvdG90eXBlLmZpbHRlckltcGxpY2l0T2JqZWN0cyA9IGZ1bmN0aW9uKGxpc3QpIHsNCiAgICAgIHZhciBub2RlLCBub2Rlcywgb2JqLCBwcm9wLCBwcm9wZXJ0aWVzLCBfaSwgX2osIF9sZW4sIF9sZW4yLCBfcmVmMjsNCiAgICAgIG5vZGVzID0gW107DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGxpc3QubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsNCiAgICAgICAgbm9kZSA9IGxpc3RbX2ldOw0KICAgICAgICBpZiAoISgodHlwZW9mIG5vZGUuaXNPYmplY3QgPT09ICJmdW5jdGlvbiIgPyBub2RlLmlzT2JqZWN0KCkgOiB2b2lkIDApICYmIG5vZGUuYmFzZS5nZW5lcmF0ZWQpKSB7DQogICAgICAgICAgbm9kZXMucHVzaChub2RlKTsNCiAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgICAgICBvYmogPSBudWxsOw0KICAgICAgICBfcmVmMiA9IG5vZGUuYmFzZS5wcm9wZXJ0aWVzOw0KICAgICAgICBmb3IgKF9qID0gMCwgX2xlbjIgPSBfcmVmMi5sZW5ndGg7IF9qIDwgX2xlbjI7IF9qKyspIHsNCiAgICAgICAgICBwcm9wID0gX3JlZjJbX2pdOw0KICAgICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgQXNzaWduKSB7DQogICAgICAgICAgICBpZiAoIW9iaikgew0KICAgICAgICAgICAgICBub2Rlcy5wdXNoKG9iaiA9IG5ldyBPYmoocHJvcGVydGllcyA9IFtdLCB0cnVlKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcCk7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIG5vZGVzLnB1c2gocHJvcCk7DQogICAgICAgICAgICBvYmogPSBudWxsOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIG5vZGVzOw0KICAgIH07DQogICAgQ2FsbC5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgYXJnLCBhcmdzLCBjb2RlLCBfcmVmMjsNCiAgICAgIGlmICgoX3JlZjIgPSB0aGlzLnZhcmlhYmxlKSAhPSBudWxsKSB7DQogICAgICAgIF9yZWYyLmZyb250ID0gdGhpcy5mcm9udDsNCiAgICAgIH0NCiAgICAgIGlmIChjb2RlID0gU3BsYXQuY29tcGlsZVNwbGF0dGVkQXJyYXkobywgdGhpcy5hcmdzLCB0cnVlKSkgew0KICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlU3BsYXQobywgY29kZSk7DQogICAgICB9DQogICAgICBhcmdzID0gdGhpcy5maWx0ZXJJbXBsaWNpdE9iamVjdHModGhpcy5hcmdzKTsNCiAgICAgIGFyZ3MgPSAoKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgX2ksIF9sZW4sIF9yZXN1bHRzOw0KICAgICAgICBfcmVzdWx0cyA9IFtdOw0KICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGFyZ3MubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsNCiAgICAgICAgICBhcmcgPSBhcmdzW19pXTsNCiAgICAgICAgICBfcmVzdWx0cy5wdXNoKGFyZy5jb21waWxlKG8sIExFVkVMX0xJU1QpKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX3Jlc3VsdHM7DQogICAgICB9KSgpKS5qb2luKCcsICcpOw0KICAgICAgaWYgKHRoaXMuaXNTdXBlcikgew0KICAgICAgICByZXR1cm4gdGhpcy5zdXBlclJlZmVyZW5jZShvKSArICgiLmNhbGwodGhpcyIgKyAoYXJncyAmJiAnLCAnICsgYXJncykgKyAiKSIpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICh0aGlzLmlzTmV3ID8gJ25ldyAnIDogJycpICsgdGhpcy52YXJpYWJsZS5jb21waWxlKG8sIExFVkVMX0FDQ0VTUykgKyAoIigiICsgYXJncyArICIpIik7DQogICAgICB9DQogICAgfTsNCiAgICBDYWxsLnByb3RvdHlwZS5jb21waWxlU3VwZXIgPSBmdW5jdGlvbihhcmdzLCBvKSB7DQogICAgICByZXR1cm4gIiIgKyAodGhpcy5zdXBlclJlZmVyZW5jZShvKSkgKyAiLmNhbGwodGhpcyIgKyAoYXJncy5sZW5ndGggPyAnLCAnIDogJycpICsgYXJncyArICIpIjsNCiAgICB9Ow0KICAgIENhbGwucHJvdG90eXBlLmNvbXBpbGVTcGxhdCA9IGZ1bmN0aW9uKG8sIHNwbGF0QXJncykgew0KICAgICAgdmFyIGJhc2UsIGZ1biwgaWR0LCBuYW1lLCByZWY7DQogICAgICBpZiAodGhpcy5pc1N1cGVyKSB7DQogICAgICAgIHJldHVybiAiIiArICh0aGlzLnN1cGVyUmVmZXJlbmNlKG8pKSArICIuYXBwbHkodGhpcywgIiArIHNwbGF0QXJncyArICIpIjsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmlzTmV3KSB7DQogICAgICAgIGlkdCA9IHRoaXMudGFiICsgVEFCOw0KICAgICAgICByZXR1cm4gIihmdW5jdGlvbihmdW5jLCBhcmdzLCBjdG9yKSB7XG4iICsgaWR0ICsgImN0b3IucHJvdG90eXBlID0gZnVuYy5wcm90b3R5cGU7XG4iICsgaWR0ICsgInZhciBjaGlsZCA9IG5ldyBjdG9yLCByZXN1bHQgPSBmdW5jLmFwcGx5KGNoaWxkLCBhcmdzKTtcbiIgKyBpZHQgKyAicmV0dXJuIHR5cGVvZiByZXN1bHQgPT09IFwib2JqZWN0XCIgPyByZXN1bHQgOiBjaGlsZDtcbiIgKyB0aGlzLnRhYiArICJ9KSgiICsgKHRoaXMudmFyaWFibGUuY29tcGlsZShvLCBMRVZFTF9MSVNUKSkgKyAiLCAiICsgc3BsYXRBcmdzICsgIiwgZnVuY3Rpb24oKSB7fSkiOw0KICAgICAgfQ0KICAgICAgYmFzZSA9IG5ldyBWYWx1ZSh0aGlzLnZhcmlhYmxlKTsNCiAgICAgIGlmICgobmFtZSA9IGJhc2UucHJvcGVydGllcy5wb3AoKSkgJiYgYmFzZS5pc0NvbXBsZXgoKSkgew0KICAgICAgICByZWYgPSBvLnNjb3BlLmZyZWVWYXJpYWJsZSgncmVmJyk7DQogICAgICAgIGZ1biA9ICIoIiArIHJlZiArICIgPSAiICsgKGJhc2UuY29tcGlsZShvLCBMRVZFTF9MSVNUKSkgKyAiKSIgKyAobmFtZS5jb21waWxlKG8pKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGZ1biA9IGJhc2UuY29tcGlsZShvLCBMRVZFTF9BQ0NFU1MpOw0KICAgICAgICBpZiAoU0lNUExFTlVNLnRlc3QoZnVuKSkgew0KICAgICAgICAgIGZ1biA9ICIoIiArIGZ1biArICIpIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAobmFtZSkgew0KICAgICAgICAgIHJlZiA9IGZ1bjsNCiAgICAgICAgICBmdW4gKz0gbmFtZS5jb21waWxlKG8pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHJlZiA9ICdudWxsJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuICIiICsgZnVuICsgIi5hcHBseSgiICsgcmVmICsgIiwgIiArIHNwbGF0QXJncyArICIpIjsNCiAgICB9Ow0KICAgIHJldHVybiBDYWxsOw0KICB9KSgpOw0KICBleHBvcnRzLkV4dGVuZHMgPSBFeHRlbmRzID0gKGZ1bmN0aW9uKCkgew0KICAgIF9fZXh0ZW5kcyhFeHRlbmRzLCBCYXNlKTsNCiAgICBmdW5jdGlvbiBFeHRlbmRzKGNoaWxkLCBwYXJlbnQpIHsNCiAgICAgIHRoaXMuY2hpbGQgPSBjaGlsZDsNCiAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50Ow0KICAgIH0NCiAgICBFeHRlbmRzLnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnY2hpbGQnLCAncGFyZW50J107DQogICAgRXh0ZW5kcy5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHV0aWxpdHkoJ2hhc1Byb3AnKTsNCiAgICAgIHJldHVybiBuZXcgQ2FsbChuZXcgVmFsdWUobmV3IExpdGVyYWwodXRpbGl0eSgnZXh0ZW5kcycpKSksIFt0aGlzLmNoaWxkLCB0aGlzLnBhcmVudF0pLmNvbXBpbGUobyk7DQogICAgfTsNCiAgICByZXR1cm4gRXh0ZW5kczsNCiAgfSkoKTsNCiAgZXhwb3J0cy5BY2Nlc3MgPSBBY2Nlc3MgPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKEFjY2VzcywgQmFzZSk7DQogICAgZnVuY3Rpb24gQWNjZXNzKG5hbWUsIHRhZykgew0KICAgICAgdGhpcy5uYW1lID0gbmFtZTsNCiAgICAgIHRoaXMubmFtZS5hc0tleSA9IHRydWU7DQogICAgICB0aGlzLnByb3RvID0gdGFnID09PSAncHJvdG8nID8gJy5wcm90b3R5cGUnIDogJyc7DQogICAgICB0aGlzLnNvYWsgPSB0YWcgPT09ICdzb2FrJzsNCiAgICB9DQogICAgQWNjZXNzLnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnbmFtZSddOw0KICAgIEFjY2Vzcy5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBuYW1lOw0KICAgICAgbmFtZSA9IHRoaXMubmFtZS5jb21waWxlKG8pOw0KICAgICAgcmV0dXJuIHRoaXMucHJvdG8gKyAoSVNfU1RSSU5HLnRlc3QobmFtZSkgPyAiWyIgKyBuYW1lICsgIl0iIDogIi4iICsgbmFtZSk7DQogICAgfTsNCiAgICBBY2Nlc3MucHJvdG90eXBlLmlzQ29tcGxleCA9IE5POw0KICAgIHJldHVybiBBY2Nlc3M7DQogIH0pKCk7DQogIGV4cG9ydHMuSW5kZXggPSBJbmRleCA9IChmdW5jdGlvbigpIHsNCiAgICBfX2V4dGVuZHMoSW5kZXgsIEJhc2UpOw0KICAgIGZ1bmN0aW9uIEluZGV4KGluZGV4KSB7DQogICAgICB0aGlzLmluZGV4ID0gaW5kZXg7DQogICAgfQ0KICAgIEluZGV4LnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnaW5kZXgnXTsNCiAgICBJbmRleC5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHJldHVybiAodGhpcy5wcm90byA/ICcucHJvdG90eXBlJyA6ICcnKSArICgiWyIgKyAodGhpcy5pbmRleC5jb21waWxlKG8sIExFVkVMX1BBUkVOKSkgKyAiXSIpOw0KICAgIH07DQogICAgSW5kZXgucHJvdG90eXBlLmlzQ29tcGxleCA9IGZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaXNDb21wbGV4KCk7DQogICAgfTsNCiAgICByZXR1cm4gSW5kZXg7DQogIH0pKCk7DQogIGV4cG9ydHMuUmFuZ2UgPSBSYW5nZSA9IChmdW5jdGlvbigpIHsNCiAgICBfX2V4dGVuZHMoUmFuZ2UsIEJhc2UpOw0KICAgIFJhbmdlLnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnZnJvbScsICd0byddOw0KICAgIGZ1bmN0aW9uIFJhbmdlKGZyb20sIHRvLCB0YWcpIHsNCiAgICAgIHRoaXMuZnJvbSA9IGZyb207DQogICAgICB0aGlzLnRvID0gdG87DQogICAgICB0aGlzLmV4Y2x1c2l2ZSA9IHRhZyA9PT0gJ2V4Y2x1c2l2ZSc7DQogICAgICB0aGlzLmVxdWFscyA9IHRoaXMuZXhjbHVzaXZlID8gJycgOiAnPSc7DQogICAgfQ0KICAgIFJhbmdlLnByb3RvdHlwZS5jb21waWxlVmFyaWFibGVzID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIHN0ZXAsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9yZWY1Ow0KICAgICAgbyA9IG1lcmdlKG8sIHsNCiAgICAgICAgdG9wOiB0cnVlDQogICAgICB9KTsNCiAgICAgIF9yZWYyID0gdGhpcy5mcm9tLmNhY2hlKG8sIExFVkVMX0xJU1QpLCB0aGlzLmZyb20gPSBfcmVmMlswXSwgdGhpcy5mcm9tVmFyID0gX3JlZjJbMV07DQogICAgICBfcmVmMyA9IHRoaXMudG8uY2FjaGUobywgTEVWRUxfTElTVCksIHRoaXMudG8gPSBfcmVmM1swXSwgdGhpcy50b1ZhciA9IF9yZWYzWzFdOw0KICAgICAgaWYgKHN0ZXAgPSBkZWwobywgJ3N0ZXAnKSkgew0KICAgICAgICBfcmVmNCA9IHN0ZXAuY2FjaGUobywgTEVWRUxfTElTVCksIHRoaXMuc3RlcCA9IF9yZWY0WzBdLCB0aGlzLnN0ZXBWYXIgPSBfcmVmNFsxXTsNCiAgICAgIH0NCiAgICAgIF9yZWY1ID0gW3RoaXMuZnJvbVZhci5tYXRjaChTSU1QTEVOVU0pLCB0aGlzLnRvVmFyLm1hdGNoKFNJTVBMRU5VTSldLCB0aGlzLmZyb21OdW0gPSBfcmVmNVswXSwgdGhpcy50b051bSA9IF9yZWY1WzFdOw0KICAgICAgaWYgKHRoaXMuc3RlcFZhcikgew0KICAgICAgICByZXR1cm4gdGhpcy5zdGVwTnVtID0gdGhpcy5zdGVwVmFyLm1hdGNoKFNJTVBMRU5VTSk7DQogICAgICB9DQogICAgfTsNCiAgICBSYW5nZS5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgY29uZCwgY29uZFBhcnQsIGZyb20sIGd0LCBpZHgsIGtub3duLCBsdCwgc3RlcFBhcnQsIHRvLCB2YXJQYXJ0LCBfcmVmMiwgX3JlZjM7DQogICAgICBpZiAoIXRoaXMuZnJvbVZhcikgew0KICAgICAgICB0aGlzLmNvbXBpbGVWYXJpYWJsZXMobyk7DQogICAgICB9DQogICAgICBpZiAoIW8uaW5kZXgpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZUFycmF5KG8pOw0KICAgICAgfQ0KICAgICAga25vd24gPSB0aGlzLmZyb21OdW0gJiYgdGhpcy50b051bTsNCiAgICAgIGlkeCA9IGRlbChvLCAnaW5kZXgnKTsNCiAgICAgIHZhclBhcnQgPSAiIiArIGlkeCArICIgPSAiICsgdGhpcy5mcm9tOw0KICAgICAgaWYgKHRoaXMudG8gIT09IHRoaXMudG9WYXIpIHsNCiAgICAgICAgdmFyUGFydCArPSAiLCAiICsgdGhpcy50bzsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLnN0ZXAgIT09IHRoaXMuc3RlcFZhcikgew0KICAgICAgICB2YXJQYXJ0ICs9ICIsICIgKyB0aGlzLnN0ZXA7DQogICAgICB9DQogICAgICBfcmVmMiA9IFsiIiArIGlkeCArICIgPCIgKyB0aGlzLmVxdWFscywgIiIgKyBpZHggKyAiID4iICsgdGhpcy5lcXVhbHNdLCBsdCA9IF9yZWYyWzBdLCBndCA9IF9yZWYyWzFdOw0KICAgICAgY29uZFBhcnQgPSB0aGlzLnN0ZXBOdW0gPyBjb25kUGFydCA9ICt0aGlzLnN0ZXBOdW0gPiAwID8gIiIgKyBsdCArICIgIiArIHRoaXMudG9WYXIgOiAiIiArIGd0ICsgIiAiICsgdGhpcy50b1ZhciA6IGtub3duID8gKChfcmVmMyA9IFsrdGhpcy5mcm9tTnVtLCArdGhpcy50b051bV0sIGZyb20gPSBfcmVmM1swXSwgdG8gPSBfcmVmM1sxXSwgX3JlZjMpLCBjb25kUGFydCA9IGZyb20gPD0gdG8gPyAiIiArIGx0ICsgIiAiICsgdG8gOiAiIiArIGd0ICsgIiAiICsgdG8pIDogKGNvbmQgPSAiIiArIHRoaXMuZnJvbVZhciArICIgPD0gIiArIHRoaXMudG9WYXIsIGNvbmRQYXJ0ID0gIiIgKyBjb25kICsgIiA/ICIgKyBsdCArICIgIiArIHRoaXMudG9WYXIgKyAiIDogIiArIGd0ICsgIiAiICsgdGhpcy50b1Zhcik7DQogICAgICBzdGVwUGFydCA9IHRoaXMuc3RlcFZhciA/ICIiICsgaWR4ICsgIiArPSAiICsgdGhpcy5zdGVwVmFyIDoga25vd24gPyBmcm9tIDw9IHRvID8gIiIgKyBpZHggKyAiKysiIDogIiIgKyBpZHggKyAiLS0iIDogIiIgKyBjb25kICsgIiA/ICIgKyBpZHggKyAiKysgOiAiICsgaWR4ICsgIi0tIjsNCiAgICAgIHJldHVybiAiIiArIHZhclBhcnQgKyAiOyAiICsgY29uZFBhcnQgKyAiOyAiICsgc3RlcFBhcnQ7DQogICAgfTsNCiAgICBSYW5nZS5wcm90b3R5cGUuY29tcGlsZUFycmF5ID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIGJvZHksIGNvbmQsIGksIGlkdCwgcG9zdCwgcHJlLCByYW5nZSwgcmVzdWx0LCB2YXJzLCBfaSwgX3JlZjIsIF9yZWYzLCBfcmVzdWx0czsNCiAgICAgIGlmICh0aGlzLmZyb21OdW0gJiYgdGhpcy50b051bSAmJiBNYXRoLmFicyh0aGlzLmZyb21OdW0gLSB0aGlzLnRvTnVtKSA8PSAyMCkgew0KICAgICAgICByYW5nZSA9IChmdW5jdGlvbigpIHsNCiAgICAgICAgICBfcmVzdWx0cyA9IFtdOw0KICAgICAgICAgIGZvciAodmFyIF9pID0gX3JlZjIgPSArdGhpcy5mcm9tTnVtLCBfcmVmMyA9ICt0aGlzLnRvTnVtOyBfcmVmMiA8PSBfcmVmMyA/IF9pIDw9IF9yZWYzIDogX2kgPj0gX3JlZjM7IF9yZWYyIDw9IF9yZWYzID8gX2krKyA6IF9pLS0peyBfcmVzdWx0cy5wdXNoKF9pKTsgfQ0KICAgICAgICAgIHJldHVybiBfcmVzdWx0czsNCiAgICAgICAgfSkuYXBwbHkodGhpcywgYXJndW1lbnRzKTsNCiAgICAgICAgaWYgKHRoaXMuZXhjbHVzaXZlKSB7DQogICAgICAgICAgcmFuZ2UucG9wKCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICJbIiArIChyYW5nZS5qb2luKCcsICcpKSArICJdIjsNCiAgICAgIH0NCiAgICAgIGlkdCA9IHRoaXMudGFiICsgVEFCOw0KICAgICAgaSA9IG8uc2NvcGUuZnJlZVZhcmlhYmxlKCdpJyk7DQogICAgICByZXN1bHQgPSBvLnNjb3BlLmZyZWVWYXJpYWJsZSgncmVzdWx0cycpOw0KICAgICAgcHJlID0gIlxuIiArIGlkdCArIHJlc3VsdCArICIgPSBbXTsiOw0KICAgICAgaWYgKHRoaXMuZnJvbU51bSAmJiB0aGlzLnRvTnVtKSB7DQogICAgICAgIG8uaW5kZXggPSBpOw0KICAgICAgICBib2R5ID0gdGhpcy5jb21waWxlTm9kZShvKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHZhcnMgPSAoIiIgKyBpICsgIiA9ICIgKyB0aGlzLmZyb20pICsgKHRoaXMudG8gIT09IHRoaXMudG9WYXIgPyAiLCAiICsgdGhpcy50byA6ICcnKTsNCiAgICAgICAgY29uZCA9ICIiICsgdGhpcy5mcm9tVmFyICsgIiA8PSAiICsgdGhpcy50b1ZhcjsNCiAgICAgICAgYm9keSA9ICJ2YXIgIiArIHZhcnMgKyAiOyAiICsgY29uZCArICIgPyAiICsgaSArICIgPCIgKyB0aGlzLmVxdWFscyArICIgIiArIHRoaXMudG9WYXIgKyAiIDogIiArIGkgKyAiID4iICsgdGhpcy5lcXVhbHMgKyAiICIgKyB0aGlzLnRvVmFyICsgIjsgIiArIGNvbmQgKyAiID8gIiArIGkgKyAiKysgOiAiICsgaSArICItLSI7DQogICAgICB9DQogICAgICBwb3N0ID0gInsgIiArIHJlc3VsdCArICIucHVzaCgiICsgaSArICIpOyB9XG4iICsgaWR0ICsgInJldHVybiAiICsgcmVzdWx0ICsgIjtcbiIgKyBvLmluZGVudDsNCiAgICAgIHJldHVybiAiKGZ1bmN0aW9uKCkgeyIgKyBwcmUgKyAiXG4iICsgaWR0ICsgImZvciAoIiArIGJvZHkgKyAiKSIgKyBwb3N0ICsgIn0pLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiOw0KICAgIH07DQogICAgcmV0dXJuIFJhbmdlOw0KICB9KSgpOw0KICBleHBvcnRzLlNsaWNlID0gU2xpY2UgPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKFNsaWNlLCBCYXNlKTsNCiAgICBTbGljZS5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ3JhbmdlJ107DQogICAgZnVuY3Rpb24gU2xpY2UocmFuZ2UpIHsNCiAgICAgIHRoaXMucmFuZ2UgPSByYW5nZTsNCiAgICAgIFNsaWNlLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpOw0KICAgIH0NCiAgICBTbGljZS5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgY29tcGlsZWQsIGZyb20sIGZyb21TdHIsIHRvLCB0b1N0ciwgX3JlZjI7DQogICAgICBfcmVmMiA9IHRoaXMucmFuZ2UsIHRvID0gX3JlZjIudG8sIGZyb20gPSBfcmVmMi5mcm9tOw0KICAgICAgZnJvbVN0ciA9IGZyb20gJiYgZnJvbS5jb21waWxlKG8sIExFVkVMX1BBUkVOKSB8fCAnMCc7DQogICAgICBjb21waWxlZCA9IHRvICYmIHRvLmNvbXBpbGUobywgTEVWRUxfUEFSRU4pOw0KICAgICAgaWYgKHRvICYmICEoIXRoaXMucmFuZ2UuZXhjbHVzaXZlICYmICtjb21waWxlZCA9PT0gLTEpKSB7DQogICAgICAgIHRvU3RyID0gJywgJyArICh0aGlzLnJhbmdlLmV4Y2x1c2l2ZSA/IGNvbXBpbGVkIDogU0lNUExFTlVNLnRlc3QoY29tcGlsZWQpID8gKCtjb21waWxlZCArIDEpLnRvU3RyaW5nKCkgOiAiKCIgKyBjb21waWxlZCArICIgKyAxKSB8fCA5ZTkiKTsNCiAgICAgIH0NCiAgICAgIHJldHVybiAiLnNsaWNlKCIgKyBmcm9tU3RyICsgKHRvU3RyIHx8ICcnKSArICIpIjsNCiAgICB9Ow0KICAgIHJldHVybiBTbGljZTsNCiAgfSkoKTsNCiAgZXhwb3J0cy5PYmogPSBPYmogPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKE9iaiwgQmFzZSk7DQogICAgZnVuY3Rpb24gT2JqKHByb3BzLCBnZW5lcmF0ZWQpIHsNCiAgICAgIHRoaXMuZ2VuZXJhdGVkID0gZ2VuZXJhdGVkICE9IG51bGwgPyBnZW5lcmF0ZWQgOiBmYWxzZTsNCiAgICAgIHRoaXMub2JqZWN0cyA9IHRoaXMucHJvcGVydGllcyA9IHByb3BzIHx8IFtdOw0KICAgIH0NCiAgICBPYmoucHJvdG90eXBlLmNoaWxkcmVuID0gWydwcm9wZXJ0aWVzJ107DQogICAgT2JqLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBpLCBpZHQsIGluZGVudCwgam9pbiwgbGFzdE5vbmNvbSwgbm9kZSwgb2JqLCBwcm9wLCBwcm9wcywgX2ksIF9sZW47DQogICAgICBwcm9wcyA9IHRoaXMucHJvcGVydGllczsNCiAgICAgIGlmICghcHJvcHMubGVuZ3RoKSB7DQogICAgICAgIGlmICh0aGlzLmZyb250KSB7DQogICAgICAgICAgcmV0dXJuICcoe30pJzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICByZXR1cm4gJ3t9JzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVkKSB7DQogICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gcHJvcHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsNCiAgICAgICAgICBub2RlID0gcHJvcHNbX2ldOw0KICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgVmFsdWUpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGhhdmUgYW4gaW1wbGljaXQgdmFsdWUgaW4gYW4gaW1wbGljaXQgb2JqZWN0Jyk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZHQgPSBvLmluZGVudCArPSBUQUI7DQogICAgICBsYXN0Tm9uY29tID0gdGhpcy5sYXN0Tm9uQ29tbWVudCh0aGlzLnByb3BlcnRpZXMpOw0KICAgICAgcHJvcHMgPSAoZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBfbGVuMiwgX3Jlc3VsdHM7DQogICAgICAgIF9yZXN1bHRzID0gW107DQogICAgICAgIGZvciAoaSA9IDAsIF9sZW4yID0gcHJvcHMubGVuZ3RoOyBpIDwgX2xlbjI7IGkrKykgew0KICAgICAgICAgIHByb3AgPSBwcm9wc1tpXTsNCiAgICAgICAgICBqb2luID0gaSA9PT0gcHJvcHMubGVuZ3RoIC0gMSA/ICcnIDogcHJvcCA9PT0gbGFzdE5vbmNvbSB8fCBwcm9wIGluc3RhbmNlb2YgQ29tbWVudCA/ICdcbicgOiAnLFxuJzsNCiAgICAgICAgICBpbmRlbnQgPSBwcm9wIGluc3RhbmNlb2YgQ29tbWVudCA/ICcnIDogaWR0Ow0KICAgICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgVmFsdWUgJiYgcHJvcFsidGhpcyJdKSB7DQogICAgICAgICAgICBwcm9wID0gbmV3IEFzc2lnbihwcm9wLnByb3BlcnRpZXNbMF0ubmFtZSwgcHJvcCwgJ29iamVjdCcpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoIShwcm9wIGluc3RhbmNlb2YgQ29tbWVudCkpIHsNCiAgICAgICAgICAgIGlmICghKHByb3AgaW5zdGFuY2VvZiBBc3NpZ24pKSB7DQogICAgICAgICAgICAgIHByb3AgPSBuZXcgQXNzaWduKHByb3AsIHByb3AsICdvYmplY3QnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIChwcm9wLnZhcmlhYmxlLmJhc2UgfHwgcHJvcC52YXJpYWJsZSkuYXNLZXkgPSB0cnVlOw0KICAgICAgICAgIH0NCiAgICAgICAgICBfcmVzdWx0cy5wdXNoKGluZGVudCArIHByb3AuY29tcGlsZShvLCBMRVZFTF9UT1ApICsgam9pbik7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9yZXN1bHRzOw0KICAgICAgfSkoKTsNCiAgICAgIHByb3BzID0gcHJvcHMuam9pbignJyk7DQogICAgICBvYmogPSAieyIgKyAocHJvcHMgJiYgJ1xuJyArIHByb3BzICsgJ1xuJyArIHRoaXMudGFiKSArICJ9IjsNCiAgICAgIGlmICh0aGlzLmZyb250KSB7DQogICAgICAgIHJldHVybiAiKCIgKyBvYmogKyAiKSI7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gb2JqOw0KICAgICAgfQ0KICAgIH07DQogICAgT2JqLnByb3RvdHlwZS5hc3NpZ25zID0gZnVuY3Rpb24obmFtZSkgew0KICAgICAgdmFyIHByb3AsIF9pLCBfbGVuLCBfcmVmMjsNCiAgICAgIF9yZWYyID0gdGhpcy5wcm9wZXJ0aWVzOw0KICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmMi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgew0KICAgICAgICBwcm9wID0gX3JlZjJbX2ldOw0KICAgICAgICBpZiAocHJvcC5hc3NpZ25zKG5hbWUpKSB7DQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9Ow0KICAgIHJldHVybiBPYmo7DQogIH0pKCk7DQogIGV4cG9ydHMuQXJyID0gQXJyID0gKGZ1bmN0aW9uKCkgew0KICAgIF9fZXh0ZW5kcyhBcnIsIEJhc2UpOw0KICAgIGZ1bmN0aW9uIEFycihvYmpzKSB7DQogICAgICB0aGlzLm9iamVjdHMgPSBvYmpzIHx8IFtdOw0KICAgIH0NCiAgICBBcnIucHJvdG90eXBlLmNoaWxkcmVuID0gWydvYmplY3RzJ107DQogICAgQXJyLnByb3RvdHlwZS5maWx0ZXJJbXBsaWNpdE9iamVjdHMgPSBDYWxsLnByb3RvdHlwZS5maWx0ZXJJbXBsaWNpdE9iamVjdHM7DQogICAgQXJyLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBjb2RlLCBvYmosIG9ianM7DQogICAgICBpZiAoIXRoaXMub2JqZWN0cy5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuICdbXSc7DQogICAgICB9DQogICAgICBvLmluZGVudCArPSBUQUI7DQogICAgICBvYmpzID0gdGhpcy5maWx0ZXJJbXBsaWNpdE9iamVjdHModGhpcy5vYmplY3RzKTsNCiAgICAgIGlmIChjb2RlID0gU3BsYXQuY29tcGlsZVNwbGF0dGVkQXJyYXkobywgb2JqcykpIHsNCiAgICAgICAgcmV0dXJuIGNvZGU7DQogICAgICB9DQogICAgICBjb2RlID0gKChmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIF9pLCBfbGVuLCBfcmVzdWx0czsNCiAgICAgICAgX3Jlc3VsdHMgPSBbXTsNCiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBvYmpzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgICAgb2JqID0gb2Jqc1tfaV07DQogICAgICAgICAgX3Jlc3VsdHMucHVzaChvYmouY29tcGlsZShvLCBMRVZFTF9MSVNUKSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9yZXN1bHRzOw0KICAgICAgfSkoKSkuam9pbignLCAnKTsNCiAgICAgIGlmIChjb2RlLmluZGV4T2YoJ1xuJykgPj0gMCkgew0KICAgICAgICByZXR1cm4gIltcbiIgKyBvLmluZGVudCArIGNvZGUgKyAiXG4iICsgdGhpcy50YWIgKyAiXSI7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gIlsiICsgY29kZSArICJdIjsNCiAgICAgIH0NCiAgICB9Ow0KICAgIEFyci5wcm90b3R5cGUuYXNzaWducyA9IGZ1bmN0aW9uKG5hbWUpIHsNCiAgICAgIHZhciBvYmosIF9pLCBfbGVuLCBfcmVmMjsNCiAgICAgIF9yZWYyID0gdGhpcy5vYmplY3RzOw0KICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmMi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgew0KICAgICAgICBvYmogPSBfcmVmMltfaV07DQogICAgICAgIGlmIChvYmouYXNzaWducyhuYW1lKSkgew0KICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfTsNCiAgICByZXR1cm4gQXJyOw0KICB9KSgpOw0KICBleHBvcnRzLkNsYXNzID0gQ2xhc3MgPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKENsYXNzLCBCYXNlKTsNCiAgICBmdW5jdGlvbiBDbGFzcyh2YXJpYWJsZSwgcGFyZW50LCBib2R5KSB7DQogICAgICB0aGlzLnZhcmlhYmxlID0gdmFyaWFibGU7DQogICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsNCiAgICAgIHRoaXMuYm9keSA9IGJvZHkgIT0gbnVsbCA/IGJvZHkgOiBuZXcgQmxvY2s7DQogICAgICB0aGlzLmJvdW5kRnVuY3MgPSBbXTsNCiAgICAgIHRoaXMuYm9keS5jbGFzc0JvZHkgPSB0cnVlOw0KICAgIH0NCiAgICBDbGFzcy5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ3ZhcmlhYmxlJywgJ3BhcmVudCcsICdib2R5J107DQogICAgQ2xhc3MucHJvdG90eXBlLmRldGVybWluZU5hbWUgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBkZWNsLCB0YWlsOw0KICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlKSB7DQogICAgICAgIHJldHVybiBudWxsOw0KICAgICAgfQ0KICAgICAgZGVjbCA9ICh0YWlsID0gbGFzdCh0aGlzLnZhcmlhYmxlLnByb3BlcnRpZXMpKSA/IHRhaWwgaW5zdGFuY2VvZiBBY2Nlc3MgJiYgdGFpbC5uYW1lLnZhbHVlIDogdGhpcy52YXJpYWJsZS5iYXNlLnZhbHVlOw0KICAgICAgcmV0dXJuIGRlY2wgJiYgKGRlY2wgPSBJREVOVElGSUVSLnRlc3QoZGVjbCkgJiYgZGVjbCk7DQogICAgfTsNCiAgICBDbGFzcy5wcm90b3R5cGUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uKG5hbWUpIHsNCiAgICAgIHJldHVybiB0aGlzLmJvZHkudHJhdmVyc2VDaGlsZHJlbihmYWxzZSwgZnVuY3Rpb24obm9kZSkgew0KICAgICAgICBpZiAobm9kZS5jbGFzc0JvZHkpIHsNCiAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBMaXRlcmFsICYmIG5vZGUudmFsdWUgPT09ICd0aGlzJykgew0KICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlID0gbmFtZTsNCiAgICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQ29kZSkgew0KICAgICAgICAgIG5vZGUua2xhc3MgPSBuYW1lOw0KICAgICAgICAgIGlmIChub2RlLmJvdW5kKSB7DQogICAgICAgICAgICByZXR1cm4gbm9kZS5jb250ZXh0ID0gbmFtZTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH07DQogICAgQ2xhc3MucHJvdG90eXBlLmFkZEJvdW5kRnVuY3Rpb25zID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIGJuYW1lLCBidmFyLCBfaSwgX2xlbiwgX3JlZjIsIF9yZXN1bHRzOw0KICAgICAgaWYgKHRoaXMuYm91bmRGdW5jcy5sZW5ndGgpIHsNCiAgICAgICAgX3JlZjIgPSB0aGlzLmJvdW5kRnVuY3M7DQogICAgICAgIF9yZXN1bHRzID0gW107DQogICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjIubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsNCiAgICAgICAgICBidmFyID0gX3JlZjJbX2ldOw0KICAgICAgICAgIGJuYW1lID0gYnZhci5jb21waWxlKG8pOw0KICAgICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5jdG9yLmJvZHkudW5zaGlmdChuZXcgTGl0ZXJhbCgidGhpcy4iICsgYm5hbWUgKyAiID0gIiArICh1dGlsaXR5KCdiaW5kJykpICsgIih0aGlzLiIgKyBibmFtZSArICIsIHRoaXMpIikpKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX3Jlc3VsdHM7DQogICAgICB9DQogICAgfTsNCiAgICBDbGFzcy5wcm90b3R5cGUuYWRkUHJvcGVydGllcyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIG8pIHsNCiAgICAgIHZhciBhc3NpZ24sIGJhc2UsIGV4cHJzLCBmdW5jLCBwcm9wczsNCiAgICAgIHByb3BzID0gbm9kZS5iYXNlLnByb3BlcnRpZXMuc2xpY2UoMCk7DQogICAgICBleHBycyA9IChmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIF9yZXN1bHRzOw0KICAgICAgICBfcmVzdWx0cyA9IFtdOw0KICAgICAgICB3aGlsZSAoYXNzaWduID0gcHJvcHMuc2hpZnQoKSkgew0KICAgICAgICAgIGlmIChhc3NpZ24gaW5zdGFuY2VvZiBBc3NpZ24pIHsNCiAgICAgICAgICAgIGJhc2UgPSBhc3NpZ24udmFyaWFibGUuYmFzZTsNCiAgICAgICAgICAgIGRlbGV0ZSBhc3NpZ24uY29udGV4dDsNCiAgICAgICAgICAgIGZ1bmMgPSBhc3NpZ24udmFsdWU7DQogICAgICAgICAgICBpZiAoYmFzZS52YWx1ZSA9PT0gJ2NvbnN0cnVjdG9yJykgew0KICAgICAgICAgICAgICBpZiAodGhpcy5jdG9yKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZGVmaW5lIG1vcmUgdGhhbiBvbmUgY29uc3RydWN0b3IgaW4gYSBjbGFzcycpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChmdW5jLmJvdW5kKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZGVmaW5lIGEgY29uc3RydWN0b3IgYXMgYSBib3VuZCBmdW5jdGlvbicpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChmdW5jIGluc3RhbmNlb2YgQ29kZSkgew0KICAgICAgICAgICAgICAgIGFzc2lnbiA9IHRoaXMuY3RvciA9IGZ1bmM7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdGhpcy5leHRlcm5hbEN0b3IgPSBvLnNjb3BlLmZyZWVWYXJpYWJsZSgnY2xhc3MnKTsNCiAgICAgICAgICAgICAgICBhc3NpZ24gPSBuZXcgQXNzaWduKG5ldyBMaXRlcmFsKHRoaXMuZXh0ZXJuYWxDdG9yKSwgZnVuYyk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGlmICghYXNzaWduLnZhcmlhYmxlWyJ0aGlzIl0pIHsNCiAgICAgICAgICAgICAgICBhc3NpZ24udmFyaWFibGUgPSBuZXcgVmFsdWUobmV3IExpdGVyYWwobmFtZSksIFtuZXcgQWNjZXNzKGJhc2UsICdwcm90bycpXSk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBDb2RlICYmIGZ1bmMuYm91bmQpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmJvdW5kRnVuY3MucHVzaChiYXNlKTsNCiAgICAgICAgICAgICAgICBmdW5jLmJvdW5kID0gZmFsc2U7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgX3Jlc3VsdHMucHVzaChhc3NpZ24pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBfcmVzdWx0czsNCiAgICAgIH0pLmNhbGwodGhpcyk7DQogICAgICByZXR1cm4gY29tcGFjdChleHBycyk7DQogICAgfTsNCiAgICBDbGFzcy5wcm90b3R5cGUud2Fsa0JvZHkgPSBmdW5jdGlvbihuYW1lLCBvKSB7DQogICAgICByZXR1cm4gdGhpcy50cmF2ZXJzZUNoaWxkcmVuKGZhbHNlLCBfX2JpbmQoZnVuY3Rpb24oY2hpbGQpIHsNCiAgICAgICAgdmFyIGV4cHMsIGksIG5vZGUsIF9sZW4sIF9yZWYyOw0KICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBDbGFzcykgew0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBCbG9jaykgew0KICAgICAgICAgIF9yZWYyID0gZXhwcyA9IGNoaWxkLmV4cHJlc3Npb25zOw0KICAgICAgICAgIGZvciAoaSA9IDAsIF9sZW4gPSBfcmVmMi5sZW5ndGg7IGkgPCBfbGVuOyBpKyspIHsNCiAgICAgICAgICAgIG5vZGUgPSBfcmVmMltpXTsNCiAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgVmFsdWUgJiYgbm9kZS5pc09iamVjdCh0cnVlKSkgew0KICAgICAgICAgICAgICBleHBzW2ldID0gdGhpcy5hZGRQcm9wZXJ0aWVzKG5vZGUsIG5hbWUsIG8pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICByZXR1cm4gY2hpbGQuZXhwcmVzc2lvbnMgPSBleHBzID0gZmxhdHRlbihleHBzKTsNCiAgICAgICAgfQ0KICAgICAgfSwgdGhpcykpOw0KICAgIH07DQogICAgQ2xhc3MucHJvdG90eXBlLmVuc3VyZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24obmFtZSkgew0KICAgICAgaWYgKCF0aGlzLmN0b3IpIHsNCiAgICAgICAgdGhpcy5jdG9yID0gbmV3IENvZGU7DQogICAgICAgIGlmICh0aGlzLnBhcmVudCkgew0KICAgICAgICAgIHRoaXMuY3Rvci5ib2R5LnB1c2gobmV3IExpdGVyYWwoIiIgKyBuYW1lICsgIi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKSIpKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodGhpcy5leHRlcm5hbEN0b3IpIHsNCiAgICAgICAgICB0aGlzLmN0b3IuYm9keS5wdXNoKG5ldyBMaXRlcmFsKCIiICsgdGhpcy5leHRlcm5hbEN0b3IgKyAiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiKSk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5ib2R5LmV4cHJlc3Npb25zLnVuc2hpZnQodGhpcy5jdG9yKTsNCiAgICAgIH0NCiAgICAgIHRoaXMuY3Rvci5jdG9yID0gdGhpcy5jdG9yLm5hbWUgPSBuYW1lOw0KICAgICAgdGhpcy5jdG9yLmtsYXNzID0gbnVsbDsNCiAgICAgIHJldHVybiB0aGlzLmN0b3Iubm9SZXR1cm4gPSB0cnVlOw0KICAgIH07DQogICAgQ2xhc3MucHJvdG90eXBlLmNvbXBpbGVOb2RlID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIGRlY2wsIGtsYXNzLCBsbmFtZSwgbmFtZTsNCiAgICAgIGRlY2wgPSB0aGlzLmRldGVybWluZU5hbWUoKTsNCiAgICAgIG5hbWUgPSBkZWNsIHx8IHRoaXMubmFtZSB8fCAnX0NsYXNzJzsNCiAgICAgIGxuYW1lID0gbmV3IExpdGVyYWwobmFtZSk7DQogICAgICB0aGlzLnNldENvbnRleHQobmFtZSk7DQogICAgICB0aGlzLndhbGtCb2R5KG5hbWUsIG8pOw0KICAgICAgdGhpcy5lbnN1cmVDb25zdHJ1Y3RvcihuYW1lKTsNCiAgICAgIGlmICh0aGlzLnBhcmVudCkgew0KICAgICAgICB0aGlzLmJvZHkuZXhwcmVzc2lvbnMudW5zaGlmdChuZXcgRXh0ZW5kcyhsbmFtZSwgdGhpcy5wYXJlbnQpKTsNCiAgICAgIH0NCiAgICAgIGlmICghKHRoaXMuY3RvciBpbnN0YW5jZW9mIENvZGUpKSB7DQogICAgICAgIHRoaXMuYm9keS5leHByZXNzaW9ucy51bnNoaWZ0KHRoaXMuY3Rvcik7DQogICAgICB9DQogICAgICB0aGlzLmJvZHkuZXhwcmVzc2lvbnMucHVzaChsbmFtZSk7DQogICAgICB0aGlzLmFkZEJvdW5kRnVuY3Rpb25zKG8pOw0KICAgICAga2xhc3MgPSBuZXcgUGFyZW5zKENsb3N1cmUud3JhcCh0aGlzLmJvZHkpLCB0cnVlKTsNCiAgICAgIGlmICh0aGlzLnZhcmlhYmxlKSB7DQogICAgICAgIGtsYXNzID0gbmV3IEFzc2lnbih0aGlzLnZhcmlhYmxlLCBrbGFzcyk7DQogICAgICB9DQogICAgICByZXR1cm4ga2xhc3MuY29tcGlsZShvKTsNCiAgICB9Ow0KICAgIHJldHVybiBDbGFzczsNCiAgfSkoKTsNCiAgZXhwb3J0cy5Bc3NpZ24gPSBBc3NpZ24gPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKEFzc2lnbiwgQmFzZSk7DQogICAgZnVuY3Rpb24gQXNzaWduKHZhcmlhYmxlLCB2YWx1ZSwgY29udGV4dCwgb3B0aW9ucykgew0KICAgICAgdGhpcy52YXJpYWJsZSA9IHZhcmlhYmxlOw0KICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOw0KICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsNCiAgICAgIHRoaXMucGFyYW0gPSBvcHRpb25zICYmIG9wdGlvbnMucGFyYW07DQogICAgfQ0KICAgIEFzc2lnbi5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ3ZhcmlhYmxlJywgJ3ZhbHVlJ107DQogICAgQXNzaWduLnByb3RvdHlwZS5hc3NpZ25zID0gZnVuY3Rpb24obmFtZSkgew0KICAgICAgcmV0dXJuIHRoaXNbdGhpcy5jb250ZXh0ID09PSAnb2JqZWN0JyA/ICd2YWx1ZScgOiAndmFyaWFibGUnXS5hc3NpZ25zKG5hbWUpOw0KICAgIH07DQogICAgQXNzaWduLnByb3RvdHlwZS51bmZvbGRTb2FrID0gZnVuY3Rpb24obykgew0KICAgICAgcmV0dXJuIHVuZm9sZFNvYWsobywgdGhpcywgJ3ZhcmlhYmxlJyk7DQogICAgfTsNCiAgICBBc3NpZ24ucHJvdG90eXBlLmNvbXBpbGVOb2RlID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIGlzVmFsdWUsIG1hdGNoLCBuYW1lLCB2YWwsIF9yZWYyOw0KICAgICAgaWYgKGlzVmFsdWUgPSB0aGlzLnZhcmlhYmxlIGluc3RhbmNlb2YgVmFsdWUpIHsNCiAgICAgICAgaWYgKHRoaXMudmFyaWFibGUuaXNBcnJheSgpIHx8IHRoaXMudmFyaWFibGUuaXNPYmplY3QoKSkgew0KICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVQYXR0ZXJuTWF0Y2gobyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHRoaXMudmFyaWFibGUuaXNTcGxpY2UoKSkgew0KICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVTcGxpY2Uobyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKChfcmVmMiA9IHRoaXMuY29udGV4dCkgPT09ICd8fD0nIHx8IF9yZWYyID09PSAnJiY9JyB8fCBfcmVmMiA9PT0gJz89Jykgew0KICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVDb25kaXRpb25hbChvKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgbmFtZSA9IHRoaXMudmFyaWFibGUuY29tcGlsZShvLCBMRVZFTF9MSVNUKTsNCiAgICAgIGlmICghKHRoaXMuY29udGV4dCB8fCB0aGlzLnZhcmlhYmxlLmlzQXNzaWduYWJsZSgpKSkgew0KICAgICAgICB0aHJvdyBTeW50YXhFcnJvcigiXCIiICsgKHRoaXMudmFyaWFibGUuY29tcGlsZShvKSkgKyAiXCIgY2Fubm90IGJlIGFzc2lnbmVkLiIpOw0KICAgICAgfQ0KICAgICAgaWYgKCEodGhpcy5jb250ZXh0IHx8IGlzVmFsdWUgJiYgKHRoaXMudmFyaWFibGUubmFtZXNwYWNlZCB8fCB0aGlzLnZhcmlhYmxlLmhhc1Byb3BlcnRpZXMoKSkpKSB7DQogICAgICAgIGlmICh0aGlzLnBhcmFtKSB7DQogICAgICAgICAgby5zY29wZS5hZGQobmFtZSwgJ3ZhcicpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIG8uc2NvcGUuZmluZChuYW1lKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBDb2RlICYmIChtYXRjaCA9IE1FVEhPRF9ERUYuZXhlYyhuYW1lKSkpIHsNCiAgICAgICAgdGhpcy52YWx1ZS5uYW1lID0gbWF0Y2hbMl07DQogICAgICAgIGlmIChtYXRjaFsxXSkgew0KICAgICAgICAgIHRoaXMudmFsdWUua2xhc3MgPSBtYXRjaFsxXTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgdmFsID0gdGhpcy52YWx1ZS5jb21waWxlKG8sIExFVkVMX0xJU1QpOw0KICAgICAgaWYgKHRoaXMuY29udGV4dCA9PT0gJ29iamVjdCcpIHsNCiAgICAgICAgcmV0dXJuICIiICsgbmFtZSArICI6ICIgKyB2YWw7DQogICAgICB9DQogICAgICB2YWwgPSBuYW1lICsgKCIgIiArICh0aGlzLmNvbnRleHQgfHwgJz0nKSArICIgIikgKyB2YWw7DQogICAgICBpZiAoby5sZXZlbCA8PSBMRVZFTF9MSVNUKSB7DQogICAgICAgIHJldHVybiB2YWw7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gIigiICsgdmFsICsgIikiOw0KICAgICAgfQ0KICAgIH07DQogICAgQXNzaWduLnByb3RvdHlwZS5jb21waWxlUGF0dGVybk1hdGNoID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIGFjYywgYXNzaWducywgY29kZSwgaSwgaWR4LCBpc09iamVjdCwgaXZhciwgb2JqLCBvYmplY3RzLCBvbGVuLCByZWYsIHJlc3QsIHNwbGF0LCB0b3AsIHZhbCwgdmFsdWUsIHZ2YXIsIF9sZW4sIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9yZWY1Ow0KICAgICAgdG9wID0gby5sZXZlbCA9PT0gTEVWRUxfVE9QOw0KICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlOw0KICAgICAgb2JqZWN0cyA9IHRoaXMudmFyaWFibGUuYmFzZS5vYmplY3RzOw0KICAgICAgaWYgKCEob2xlbiA9IG9iamVjdHMubGVuZ3RoKSkgew0KICAgICAgICBjb2RlID0gdmFsdWUuY29tcGlsZShvKTsNCiAgICAgICAgaWYgKG8ubGV2ZWwgPj0gTEVWRUxfT1ApIHsNCiAgICAgICAgICByZXR1cm4gIigiICsgY29kZSArICIpIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICByZXR1cm4gY29kZTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaXNPYmplY3QgPSB0aGlzLnZhcmlhYmxlLmlzT2JqZWN0KCk7DQogICAgICBpZiAodG9wICYmIG9sZW4gPT09IDEgJiYgISgob2JqID0gb2JqZWN0c1swXSkgaW5zdGFuY2VvZiBTcGxhdCkpIHsNCiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFzc2lnbikgew0KICAgICAgICAgIF9yZWYyID0gb2JqLCBpZHggPSBfcmVmMi52YXJpYWJsZS5iYXNlLCBvYmogPSBfcmVmMi52YWx1ZTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBpZiAob2JqLmJhc2UgaW5zdGFuY2VvZiBQYXJlbnMpIHsNCiAgICAgICAgICAgIF9yZWYzID0gbmV3IFZhbHVlKG9iai51bndyYXBBbGwoKSkuY2FjaGVSZWZlcmVuY2UobyksIG9iaiA9IF9yZWYzWzBdLCBpZHggPSBfcmVmM1sxXTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaWR4ID0gaXNPYmplY3QgPyBvYmpbInRoaXMiXSA/IG9iai5wcm9wZXJ0aWVzWzBdLm5hbWUgOiBvYmogOiBuZXcgTGl0ZXJhbCgwKTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgYWNjID0gSURFTlRJRklFUi50ZXN0KGlkeC51bndyYXAoKS52YWx1ZSB8fCAwKTsNCiAgICAgICAgdmFsdWUgPSBuZXcgVmFsdWUodmFsdWUpOw0KICAgICAgICB2YWx1ZS5wcm9wZXJ0aWVzLnB1c2gobmV3IChhY2MgPyBBY2Nlc3MgOiBJbmRleCkoaWR4KSk7DQogICAgICAgIHJldHVybiBuZXcgQXNzaWduKG9iaiwgdmFsdWUsIG51bGwsIHsNCiAgICAgICAgICBwYXJhbTogdGhpcy5wYXJhbQ0KICAgICAgICB9KS5jb21waWxlKG8sIExFVkVMX1RPUCk7DQogICAgICB9DQogICAgICB2dmFyID0gdmFsdWUuY29tcGlsZShvLCBMRVZFTF9MSVNUKTsNCiAgICAgIGFzc2lnbnMgPSBbXTsNCiAgICAgIHNwbGF0ID0gZmFsc2U7DQogICAgICBpZiAoIUlERU5USUZJRVIudGVzdCh2dmFyKSB8fCB0aGlzLnZhcmlhYmxlLmFzc2lnbnModnZhcikpIHsNCiAgICAgICAgYXNzaWducy5wdXNoKCIiICsgKHJlZiA9IG8uc2NvcGUuZnJlZVZhcmlhYmxlKCdyZWYnKSkgKyAiID0gIiArIHZ2YXIpOw0KICAgICAgICB2dmFyID0gcmVmOw0KICAgICAgfQ0KICAgICAgZm9yIChpID0gMCwgX2xlbiA9IG9iamVjdHMubGVuZ3RoOyBpIDwgX2xlbjsgaSsrKSB7DQogICAgICAgIG9iaiA9IG9iamVjdHNbaV07DQogICAgICAgIGlkeCA9IGk7DQogICAgICAgIGlmIChpc09iamVjdCkgew0KICAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBBc3NpZ24pIHsNCiAgICAgICAgICAgIF9yZWY0ID0gb2JqLCBpZHggPSBfcmVmNC52YXJpYWJsZS5iYXNlLCBvYmogPSBfcmVmNC52YWx1ZTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaWYgKG9iai5iYXNlIGluc3RhbmNlb2YgUGFyZW5zKSB7DQogICAgICAgICAgICAgIF9yZWY1ID0gbmV3IFZhbHVlKG9iai51bndyYXBBbGwoKSkuY2FjaGVSZWZlcmVuY2UobyksIG9iaiA9IF9yZWY1WzBdLCBpZHggPSBfcmVmNVsxXTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGlkeCA9IG9ialsidGhpcyJdID8gb2JqLnByb3BlcnRpZXNbMF0ubmFtZSA6IG9iajsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFzcGxhdCAmJiBvYmogaW5zdGFuY2VvZiBTcGxhdCkgew0KICAgICAgICAgIHZhbCA9ICIiICsgb2xlbiArICIgPD0gIiArIHZ2YXIgKyAiLmxlbmd0aCA/ICIgKyAodXRpbGl0eSgnc2xpY2UnKSkgKyAiLmNhbGwoIiArIHZ2YXIgKyAiLCAiICsgaTsNCiAgICAgICAgICBpZiAocmVzdCA9IG9sZW4gLSBpIC0gMSkgew0KICAgICAgICAgICAgaXZhciA9IG8uc2NvcGUuZnJlZVZhcmlhYmxlKCdpJyk7DQogICAgICAgICAgICB2YWwgKz0gIiwgIiArIGl2YXIgKyAiID0gIiArIHZ2YXIgKyAiLmxlbmd0aCAtICIgKyByZXN0ICsgIikgOiAoIiArIGl2YXIgKyAiID0gIiArIGkgKyAiLCBbXSkiOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB2YWwgKz0gIikgOiBbXSI7DQogICAgICAgICAgfQ0KICAgICAgICAgIHZhbCA9IG5ldyBMaXRlcmFsKHZhbCk7DQogICAgICAgICAgc3BsYXQgPSAiIiArIGl2YXIgKyAiKysiOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTcGxhdCkgew0KICAgICAgICAgICAgb2JqID0gb2JqLm5hbWUuY29tcGlsZShvKTsNCiAgICAgICAgICAgIHRocm93IFN5bnRheEVycm9yKCJtdWx0aXBsZSBzcGxhdHMgYXJlIGRpc2FsbG93ZWQgaW4gYW4gYXNzaWdubWVudDogIiArIG9iaiArICIgLi4uIik7DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh0eXBlb2YgaWR4ID09PSAnbnVtYmVyJykgew0KICAgICAgICAgICAgaWR4ID0gbmV3IExpdGVyYWwoc3BsYXQgfHwgaWR4KTsNCiAgICAgICAgICAgIGFjYyA9IGZhbHNlOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhY2MgPSBpc09iamVjdCAmJiBJREVOVElGSUVSLnRlc3QoaWR4LnVud3JhcCgpLnZhbHVlIHx8IDApOw0KICAgICAgICAgIH0NCiAgICAgICAgICB2YWwgPSBuZXcgVmFsdWUobmV3IExpdGVyYWwodnZhciksIFtuZXcgKGFjYyA/IEFjY2VzcyA6IEluZGV4KShpZHgpXSk7DQogICAgICAgIH0NCiAgICAgICAgYXNzaWducy5wdXNoKG5ldyBBc3NpZ24ob2JqLCB2YWwsIG51bGwsIHsNCiAgICAgICAgICBwYXJhbTogdGhpcy5wYXJhbQ0KICAgICAgICB9KS5jb21waWxlKG8sIExFVkVMX1RPUCkpOw0KICAgICAgfQ0KICAgICAgaWYgKCF0b3ApIHsNCiAgICAgICAgYXNzaWducy5wdXNoKHZ2YXIpOw0KICAgICAgfQ0KICAgICAgY29kZSA9IGFzc2lnbnMuam9pbignLCAnKTsNCiAgICAgIGlmIChvLmxldmVsIDwgTEVWRUxfTElTVCkgew0KICAgICAgICByZXR1cm4gY29kZTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiAiKCIgKyBjb2RlICsgIikiOw0KICAgICAgfQ0KICAgIH07DQogICAgQXNzaWduLnByb3RvdHlwZS5jb21waWxlQ29uZGl0aW9uYWwgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgbGVmdCwgcml0ZSwgX3JlZjI7DQogICAgICBfcmVmMiA9IHRoaXMudmFyaWFibGUuY2FjaGVSZWZlcmVuY2UobyksIGxlZnQgPSBfcmVmMlswXSwgcml0ZSA9IF9yZWYyWzFdOw0KICAgICAgaWYgKF9faW5kZXhPZi5jYWxsKHRoaXMuY29udGV4dCwgIj8iKSA+PSAwKSB7DQogICAgICAgIG8uaXNFeGlzdGVudGlhbEVxdWFscyA9IHRydWU7DQogICAgICB9DQogICAgICByZXR1cm4gbmV3IE9wKHRoaXMuY29udGV4dC5zbGljZSgwLCAtMSksIGxlZnQsIG5ldyBBc3NpZ24ocml0ZSwgdGhpcy52YWx1ZSwgJz0nKSkuY29tcGlsZShvKTsNCiAgICB9Ow0KICAgIEFzc2lnbi5wcm90b3R5cGUuY29tcGlsZVNwbGljZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBjb2RlLCBleGNsdXNpdmUsIGZyb20sIGZyb21EZWNsLCBmcm9tUmVmLCBuYW1lLCB0bywgdmFsRGVmLCB2YWxSZWYsIF9yZWYyLCBfcmVmMywgX3JlZjQ7DQogICAgICBfcmVmMiA9IHRoaXMudmFyaWFibGUucHJvcGVydGllcy5wb3AoKS5yYW5nZSwgZnJvbSA9IF9yZWYyLmZyb20sIHRvID0gX3JlZjIudG8sIGV4Y2x1c2l2ZSA9IF9yZWYyLmV4Y2x1c2l2ZTsNCiAgICAgIG5hbWUgPSB0aGlzLnZhcmlhYmxlLmNvbXBpbGUobyk7DQogICAgICBfcmVmMyA9IChmcm9tICE9IG51bGwgPyBmcm9tLmNhY2hlKG8sIExFVkVMX09QKSA6IHZvaWQgMCkgfHwgWycwJywgJzAnXSwgZnJvbURlY2wgPSBfcmVmM1swXSwgZnJvbVJlZiA9IF9yZWYzWzFdOw0KICAgICAgaWYgKHRvKSB7DQogICAgICAgIGlmICgoZnJvbSAhPSBudWxsID8gZnJvbS5pc1NpbXBsZU51bWJlcigpIDogdm9pZCAwKSAmJiB0by5pc1NpbXBsZU51bWJlcigpKSB7DQogICAgICAgICAgdG8gPSArdG8uY29tcGlsZShvKSAtICtmcm9tUmVmOw0KICAgICAgICAgIGlmICghZXhjbHVzaXZlKSB7DQogICAgICAgICAgICB0byArPSAxOw0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0byA9IHRvLmNvbXBpbGUobykgKyAnIC0gJyArIGZyb21SZWY7DQogICAgICAgICAgaWYgKCFleGNsdXNpdmUpIHsNCiAgICAgICAgICAgIHRvICs9ICcgKyAxJzsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRvID0gIjllOSI7DQogICAgICB9DQogICAgICBfcmVmNCA9IHRoaXMudmFsdWUuY2FjaGUobywgTEVWRUxfTElTVCksIHZhbERlZiA9IF9yZWY0WzBdLCB2YWxSZWYgPSBfcmVmNFsxXTsNCiAgICAgIGNvZGUgPSAiW10uc3BsaWNlLmFwcGx5KCIgKyBuYW1lICsgIiwgWyIgKyBmcm9tRGVjbCArICIsICIgKyB0byArICJdLmNvbmNhdCgiICsgdmFsRGVmICsgIikpLCAiICsgdmFsUmVmOw0KICAgICAgaWYgKG8ubGV2ZWwgPiBMRVZFTF9UT1ApIHsNCiAgICAgICAgcmV0dXJuICIoIiArIGNvZGUgKyAiKSI7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gY29kZTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIHJldHVybiBBc3NpZ247DQogIH0pKCk7DQogIGV4cG9ydHMuQ29kZSA9IENvZGUgPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKENvZGUsIEJhc2UpOw0KICAgIGZ1bmN0aW9uIENvZGUocGFyYW1zLCBib2R5LCB0YWcpIHsNCiAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zIHx8IFtdOw0KICAgICAgdGhpcy5ib2R5ID0gYm9keSB8fCBuZXcgQmxvY2s7DQogICAgICB0aGlzLmJvdW5kID0gdGFnID09PSAnYm91bmRmdW5jJzsNCiAgICAgIGlmICh0aGlzLmJvdW5kKSB7DQogICAgICAgIHRoaXMuY29udGV4dCA9ICd0aGlzJzsNCiAgICAgIH0NCiAgICB9DQogICAgQ29kZS5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ3BhcmFtcycsICdib2R5J107DQogICAgQ29kZS5wcm90b3R5cGUuaXNTdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiAhIXRoaXMuY3RvcjsNCiAgICB9Ow0KICAgIENvZGUucHJvdG90eXBlLmp1bXBzID0gTk87DQogICAgQ29kZS5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgY29kZSwgZXhwcnMsIGksIGlkdCwgbGl0LCBwLCBwYXJhbSwgcmVmLCBzcGxhdHMsIHYsIHZhbCwgdmFycywgd2FzRW1wdHksIF9pLCBfaiwgX2ssIF9sZW4sIF9sZW4yLCBfbGVuMywgX2xlbjQsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9yZWY1Ow0KICAgICAgby5zY29wZSA9IG5ldyBTY29wZShvLnNjb3BlLCB0aGlzLmJvZHksIHRoaXMpOw0KICAgICAgby5zY29wZS5zaGFyZWQgPSBkZWwobywgJ3NoYXJlZFNjb3BlJyk7DQogICAgICBvLmluZGVudCArPSBUQUI7DQogICAgICBkZWxldGUgby5iYXJlOw0KICAgICAgdmFycyA9IFtdOw0KICAgICAgZXhwcnMgPSBbXTsNCiAgICAgIF9yZWYyID0gdGhpcy5wYXJhbXM7DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIHBhcmFtID0gX3JlZjJbX2ldOw0KICAgICAgICBpZiAocGFyYW0uc3BsYXQpIHsNCiAgICAgICAgICBfcmVmMyA9IHRoaXMucGFyYW1zOw0KICAgICAgICAgIGZvciAoX2ogPSAwLCBfbGVuMiA9IF9yZWYzLmxlbmd0aDsgX2ogPCBfbGVuMjsgX2orKykgew0KICAgICAgICAgICAgcCA9IF9yZWYzW19qXTsNCiAgICAgICAgICAgIGlmIChwLm5hbWUudmFsdWUpIHsNCiAgICAgICAgICAgICAgby5zY29wZS5hZGQocC5uYW1lLnZhbHVlLCAndmFyJywgdHJ1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIHNwbGF0cyA9IG5ldyBBc3NpZ24obmV3IFZhbHVlKG5ldyBBcnIoKGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgdmFyIF9rLCBfbGVuMywgX3JlZjQsIF9yZXN1bHRzOw0KICAgICAgICAgICAgX3JlZjQgPSB0aGlzLnBhcmFtczsNCiAgICAgICAgICAgIF9yZXN1bHRzID0gW107DQogICAgICAgICAgICBmb3IgKF9rID0gMCwgX2xlbjMgPSBfcmVmNC5sZW5ndGg7IF9rIDwgX2xlbjM7IF9rKyspIHsNCiAgICAgICAgICAgICAgcCA9IF9yZWY0W19rXTsNCiAgICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChwLmFzUmVmZXJlbmNlKG8pKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0czsNCiAgICAgICAgICB9KS5jYWxsKHRoaXMpKSksIG5ldyBWYWx1ZShuZXcgTGl0ZXJhbCgnYXJndW1lbnRzJykpKTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgX3JlZjQgPSB0aGlzLnBhcmFtczsNCiAgICAgIGZvciAoX2sgPSAwLCBfbGVuMyA9IF9yZWY0Lmxlbmd0aDsgX2sgPCBfbGVuMzsgX2srKykgew0KICAgICAgICBwYXJhbSA9IF9yZWY0W19rXTsNCiAgICAgICAgaWYgKHBhcmFtLmlzQ29tcGxleCgpKSB7DQogICAgICAgICAgdmFsID0gcmVmID0gcGFyYW0uYXNSZWZlcmVuY2Uobyk7DQogICAgICAgICAgaWYgKHBhcmFtLnZhbHVlKSB7DQogICAgICAgICAgICB2YWwgPSBuZXcgT3AoJz8nLCByZWYsIHBhcmFtLnZhbHVlKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZXhwcnMucHVzaChuZXcgQXNzaWduKG5ldyBWYWx1ZShwYXJhbS5uYW1lKSwgdmFsLCAnPScsIHsNCiAgICAgICAgICAgIHBhcmFtOiB0cnVlDQogICAgICAgICAgfSkpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHJlZiA9IHBhcmFtOw0KICAgICAgICAgIGlmIChwYXJhbS52YWx1ZSkgew0KICAgICAgICAgICAgbGl0ID0gbmV3IExpdGVyYWwocmVmLm5hbWUudmFsdWUgKyAnID09IG51bGwnKTsNCiAgICAgICAgICAgIHZhbCA9IG5ldyBBc3NpZ24obmV3IFZhbHVlKHBhcmFtLm5hbWUpLCBwYXJhbS52YWx1ZSwgJz0nKTsNCiAgICAgICAgICAgIGV4cHJzLnB1c2gobmV3IElmKGxpdCwgdmFsKSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICghc3BsYXRzKSB7DQogICAgICAgICAgdmFycy5wdXNoKHJlZik7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHdhc0VtcHR5ID0gdGhpcy5ib2R5LmlzRW1wdHkoKTsNCiAgICAgIGlmIChzcGxhdHMpIHsNCiAgICAgICAgZXhwcnMudW5zaGlmdChzcGxhdHMpOw0KICAgICAgfQ0KICAgICAgaWYgKGV4cHJzLmxlbmd0aCkgew0KICAgICAgICAoX3JlZjUgPSB0aGlzLmJvZHkuZXhwcmVzc2lvbnMpLnVuc2hpZnQuYXBwbHkoX3JlZjUsIGV4cHJzKTsNCiAgICAgIH0NCiAgICAgIGlmICghc3BsYXRzKSB7DQogICAgICAgIGZvciAoaSA9IDAsIF9sZW40ID0gdmFycy5sZW5ndGg7IGkgPCBfbGVuNDsgaSsrKSB7DQogICAgICAgICAgdiA9IHZhcnNbaV07DQogICAgICAgICAgby5zY29wZS5wYXJhbWV0ZXIodmFyc1tpXSA9IHYuY29tcGlsZShvKSk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICghKHdhc0VtcHR5IHx8IHRoaXMubm9SZXR1cm4pKSB7DQogICAgICAgIHRoaXMuYm9keS5tYWtlUmV0dXJuKCk7DQogICAgICB9DQogICAgICBpZHQgPSBvLmluZGVudDsNCiAgICAgIGNvZGUgPSAnZnVuY3Rpb24nOw0KICAgICAgaWYgKHRoaXMuY3Rvcikgew0KICAgICAgICBjb2RlICs9ICcgJyArIHRoaXMubmFtZTsNCiAgICAgIH0NCiAgICAgIGNvZGUgKz0gJygnICsgdmFycy5qb2luKCcsICcpICsgJykgeyc7DQogICAgICBpZiAoIXRoaXMuYm9keS5pc0VtcHR5KCkpIHsNCiAgICAgICAgY29kZSArPSAiXG4iICsgKHRoaXMuYm9keS5jb21waWxlV2l0aERlY2xhcmF0aW9ucyhvKSkgKyAiXG4iICsgdGhpcy50YWI7DQogICAgICB9DQogICAgICBjb2RlICs9ICd9JzsNCiAgICAgIGlmICh0aGlzLmN0b3IpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMudGFiICsgY29kZTsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmJvdW5kKSB7DQogICAgICAgIHJldHVybiB1dGlsaXR5KCdiaW5kJykgKyAoIigiICsgY29kZSArICIsICIgKyB0aGlzLmNvbnRleHQgKyAiKSIpOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuZnJvbnQgfHwgKG8ubGV2ZWwgPj0gTEVWRUxfQUNDRVNTKSkgew0KICAgICAgICByZXR1cm4gIigiICsgY29kZSArICIpIjsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBjb2RlOw0KICAgICAgfQ0KICAgIH07DQogICAgQ29kZS5wcm90b3R5cGUudHJhdmVyc2VDaGlsZHJlbiA9IGZ1bmN0aW9uKGNyb3NzU2NvcGUsIGZ1bmMpIHsNCiAgICAgIGlmIChjcm9zc1Njb3BlKSB7DQogICAgICAgIHJldHVybiBDb2RlLl9fc3VwZXJfXy50cmF2ZXJzZUNoaWxkcmVuLmNhbGwodGhpcywgY3Jvc3NTY29wZSwgZnVuYyk7DQogICAgICB9DQogICAgfTsNCiAgICByZXR1cm4gQ29kZTsNCiAgfSkoKTsNCiAgZXhwb3J0cy5QYXJhbSA9IFBhcmFtID0gKGZ1bmN0aW9uKCkgew0KICAgIF9fZXh0ZW5kcyhQYXJhbSwgQmFzZSk7DQogICAgZnVuY3Rpb24gUGFyYW0obmFtZSwgdmFsdWUsIHNwbGF0KSB7DQogICAgICB0aGlzLm5hbWUgPSBuYW1lOw0KICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOw0KICAgICAgdGhpcy5zcGxhdCA9IHNwbGF0Ow0KICAgIH0NCiAgICBQYXJhbS5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ25hbWUnLCAndmFsdWUnXTsNCiAgICBQYXJhbS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHJldHVybiB0aGlzLm5hbWUuY29tcGlsZShvLCBMRVZFTF9MSVNUKTsNCiAgICB9Ow0KICAgIFBhcmFtLnByb3RvdHlwZS5hc1JlZmVyZW5jZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBub2RlOw0KICAgICAgaWYgKHRoaXMucmVmZXJlbmNlKSB7DQogICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTsNCiAgICAgIH0NCiAgICAgIG5vZGUgPSB0aGlzLm5hbWU7DQogICAgICBpZiAobm9kZVsidGhpcyJdKSB7DQogICAgICAgIG5vZGUgPSBub2RlLnByb3BlcnRpZXNbMF0ubmFtZTsNCiAgICAgICAgaWYgKG5vZGUudmFsdWUucmVzZXJ2ZWQpIHsNCiAgICAgICAgICBub2RlID0gbmV3IExpdGVyYWwoJ18nICsgbm9kZS52YWx1ZSk7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSBpZiAobm9kZS5pc0NvbXBsZXgoKSkgew0KICAgICAgICBub2RlID0gbmV3IExpdGVyYWwoby5zY29wZS5mcmVlVmFyaWFibGUoJ2FyZycpKTsNCiAgICAgIH0NCiAgICAgIG5vZGUgPSBuZXcgVmFsdWUobm9kZSk7DQogICAgICBpZiAodGhpcy5zcGxhdCkgew0KICAgICAgICBub2RlID0gbmV3IFNwbGF0KG5vZGUpOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlID0gbm9kZTsNCiAgICB9Ow0KICAgIFBhcmFtLnByb3RvdHlwZS5pc0NvbXBsZXggPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLm5hbWUuaXNDb21wbGV4KCk7DQogICAgfTsNCiAgICByZXR1cm4gUGFyYW07DQogIH0pKCk7DQogIGV4cG9ydHMuU3BsYXQgPSBTcGxhdCA9IChmdW5jdGlvbigpIHsNCiAgICBfX2V4dGVuZHMoU3BsYXQsIEJhc2UpOw0KICAgIFNwbGF0LnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnbmFtZSddOw0KICAgIFNwbGF0LnByb3RvdHlwZS5pc0Fzc2lnbmFibGUgPSBZRVM7DQogICAgZnVuY3Rpb24gU3BsYXQobmFtZSkgew0KICAgICAgdGhpcy5uYW1lID0gbmFtZS5jb21waWxlID8gbmFtZSA6IG5ldyBMaXRlcmFsKG5hbWUpOw0KICAgIH0NCiAgICBTcGxhdC5wcm90b3R5cGUuYXNzaWducyA9IGZ1bmN0aW9uKG5hbWUpIHsNCiAgICAgIHJldHVybiB0aGlzLm5hbWUuYXNzaWducyhuYW1lKTsNCiAgICB9Ow0KICAgIFNwbGF0LnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24obykgew0KICAgICAgaWYgKHRoaXMuaW5kZXggIT0gbnVsbCkgew0KICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlUGFyYW0obyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gdGhpcy5uYW1lLmNvbXBpbGUobyk7DQogICAgICB9DQogICAgfTsNCiAgICBTcGxhdC5jb21waWxlU3BsYXR0ZWRBcnJheSA9IGZ1bmN0aW9uKG8sIGxpc3QsIGFwcGx5KSB7DQogICAgICB2YXIgYXJncywgYmFzZSwgY29kZSwgaSwgaW5kZXgsIG5vZGUsIF9sZW47DQogICAgICBpbmRleCA9IC0xOw0KICAgICAgd2hpbGUgKChub2RlID0gbGlzdFsrK2luZGV4XSkgJiYgIShub2RlIGluc3RhbmNlb2YgU3BsYXQpKSB7DQogICAgICAgIGNvbnRpbnVlOw0KICAgICAgfQ0KICAgICAgaWYgKGluZGV4ID49IGxpc3QubGVuZ3RoKSB7DQogICAgICAgIHJldHVybiAnJzsNCiAgICAgIH0NCiAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkgew0KICAgICAgICBjb2RlID0gbGlzdFswXS5jb21waWxlKG8sIExFVkVMX0xJU1QpOw0KICAgICAgICBpZiAoYXBwbHkpIHsNCiAgICAgICAgICByZXR1cm4gY29kZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gIiIgKyAodXRpbGl0eSgnc2xpY2UnKSkgKyAiLmNhbGwoIiArIGNvZGUgKyAiKSI7DQogICAgICB9DQogICAgICBhcmdzID0gbGlzdC5zbGljZShpbmRleCk7DQogICAgICBmb3IgKGkgPSAwLCBfbGVuID0gYXJncy5sZW5ndGg7IGkgPCBfbGVuOyBpKyspIHsNCiAgICAgICAgbm9kZSA9IGFyZ3NbaV07DQogICAgICAgIGNvZGUgPSBub2RlLmNvbXBpbGUobywgTEVWRUxfTElTVCk7DQogICAgICAgIGFyZ3NbaV0gPSBub2RlIGluc3RhbmNlb2YgU3BsYXQgPyAiIiArICh1dGlsaXR5KCdzbGljZScpKSArICIuY2FsbCgiICsgY29kZSArICIpIiA6ICJbIiArIGNvZGUgKyAiXSI7DQogICAgICB9DQogICAgICBpZiAoaW5kZXggPT09IDApIHsNCiAgICAgICAgcmV0dXJuIGFyZ3NbMF0gKyAoIi5jb25jYXQoIiArIChhcmdzLnNsaWNlKDEpLmpvaW4oJywgJykpICsgIikiKTsNCiAgICAgIH0NCiAgICAgIGJhc2UgPSAoZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBfaSwgX2xlbjIsIF9yZWYyLCBfcmVzdWx0czsNCiAgICAgICAgX3JlZjIgPSBsaXN0LnNsaWNlKDAsIGluZGV4KTsNCiAgICAgICAgX3Jlc3VsdHMgPSBbXTsNCiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4yID0gX3JlZjIubGVuZ3RoOyBfaSA8IF9sZW4yOyBfaSsrKSB7DQogICAgICAgICAgbm9kZSA9IF9yZWYyW19pXTsNCiAgICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUuY29tcGlsZShvLCBMRVZFTF9MSVNUKSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9yZXN1bHRzOw0KICAgICAgfSkoKTsNCiAgICAgIHJldHVybiAiWyIgKyAoYmFzZS5qb2luKCcsICcpKSArICJdLmNvbmNhdCgiICsgKGFyZ3Muam9pbignLCAnKSkgKyAiKSI7DQogICAgfTsNCiAgICByZXR1cm4gU3BsYXQ7DQogIH0pKCk7DQogIGV4cG9ydHMuV2hpbGUgPSBXaGlsZSA9IChmdW5jdGlvbigpIHsNCiAgICBfX2V4dGVuZHMoV2hpbGUsIEJhc2UpOw0KICAgIGZ1bmN0aW9uIFdoaWxlKGNvbmRpdGlvbiwgb3B0aW9ucykgew0KICAgICAgdGhpcy5jb25kaXRpb24gPSAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5pbnZlcnQgOiB2b2lkIDApID8gY29uZGl0aW9uLmludmVydCgpIDogY29uZGl0aW9uOw0KICAgICAgdGhpcy5ndWFyZCA9IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZ3VhcmQgOiB2b2lkIDA7DQogICAgfQ0KICAgIFdoaWxlLnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnY29uZGl0aW9uJywgJ2d1YXJkJywgJ2JvZHknXTsNCiAgICBXaGlsZS5wcm90b3R5cGUuaXNTdGF0ZW1lbnQgPSBZRVM7DQogICAgV2hpbGUucHJvdG90eXBlLm1ha2VSZXR1cm4gPSBmdW5jdGlvbigpIHsNCiAgICAgIHRoaXMucmV0dXJucyA9IHRydWU7DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9Ow0KICAgIFdoaWxlLnByb3RvdHlwZS5hZGRCb2R5ID0gZnVuY3Rpb24oYm9keSkgew0KICAgICAgdGhpcy5ib2R5ID0gYm9keTsNCiAgICAgIHJldHVybiB0aGlzOw0KICAgIH07DQogICAgV2hpbGUucHJvdG90eXBlLmp1bXBzID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgZXhwcmVzc2lvbnMsIG5vZGUsIF9pLCBfbGVuOw0KICAgICAgZXhwcmVzc2lvbnMgPSB0aGlzLmJvZHkuZXhwcmVzc2lvbnM7DQogICAgICBpZiAoIWV4cHJlc3Npb25zLmxlbmd0aCkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGV4cHJlc3Npb25zLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIG5vZGUgPSBleHByZXNzaW9uc1tfaV07DQogICAgICAgIGlmIChub2RlLmp1bXBzKHsNCiAgICAgICAgICBsb29wOiB0cnVlDQogICAgICAgIH0pKSB7DQogICAgICAgICAgcmV0dXJuIG5vZGU7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9Ow0KICAgIFdoaWxlLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBib2R5LCBjb2RlLCBydmFyLCBzZXQ7DQogICAgICBvLmluZGVudCArPSBUQUI7DQogICAgICBzZXQgPSAnJzsNCiAgICAgIGJvZHkgPSB0aGlzLmJvZHk7DQogICAgICBpZiAoYm9keS5pc0VtcHR5KCkpIHsNCiAgICAgICAgYm9keSA9ICcnOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgaWYgKG8ubGV2ZWwgPiBMRVZFTF9UT1AgfHwgdGhpcy5yZXR1cm5zKSB7DQogICAgICAgICAgcnZhciA9IG8uc2NvcGUuZnJlZVZhcmlhYmxlKCdyZXN1bHRzJyk7DQogICAgICAgICAgc2V0ID0gIiIgKyB0aGlzLnRhYiArIHJ2YXIgKyAiID0gW107XG4iOw0KICAgICAgICAgIGlmIChib2R5KSB7DQogICAgICAgICAgICBib2R5ID0gUHVzaC53cmFwKHJ2YXIsIGJvZHkpOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAodGhpcy5ndWFyZCkgew0KICAgICAgICAgIGJvZHkgPSBCbG9jay53cmFwKFtuZXcgSWYodGhpcy5ndWFyZCwgYm9keSldKTsNCiAgICAgICAgfQ0KICAgICAgICBib2R5ID0gIlxuIiArIChib2R5LmNvbXBpbGUobywgTEVWRUxfVE9QKSkgKyAiXG4iICsgdGhpcy50YWI7DQogICAgICB9DQogICAgICBjb2RlID0gc2V0ICsgdGhpcy50YWIgKyAoIndoaWxlICgiICsgKHRoaXMuY29uZGl0aW9uLmNvbXBpbGUobywgTEVWRUxfUEFSRU4pKSArICIpIHsiICsgYm9keSArICJ9Iik7DQogICAgICBpZiAodGhpcy5yZXR1cm5zKSB7DQogICAgICAgIGNvZGUgKz0gIlxuIiArIHRoaXMudGFiICsgInJldHVybiAiICsgcnZhciArICI7IjsNCiAgICAgIH0NCiAgICAgIHJldHVybiBjb2RlOw0KICAgIH07DQogICAgcmV0dXJuIFdoaWxlOw0KICB9KSgpOw0KICBleHBvcnRzLk9wID0gT3AgPSAoZnVuY3Rpb24oKSB7DQogICAgdmFyIENPTlZFUlNJT05TLCBJTlZFUlNJT05TOw0KICAgIF9fZXh0ZW5kcyhPcCwgQmFzZSk7DQogICAgZnVuY3Rpb24gT3Aob3AsIGZpcnN0LCBzZWNvbmQsIGZsaXApIHsNCiAgICAgIHZhciBjYWxsOw0KICAgICAgaWYgKG9wID09PSAnaW4nKSB7DQogICAgICAgIHJldHVybiBuZXcgSW4oZmlyc3QsIHNlY29uZCk7DQogICAgICB9DQogICAgICBpZiAob3AgPT09ICdkbycpIHsNCiAgICAgICAgY2FsbCA9IG5ldyBDYWxsKGZpcnN0LCBmaXJzdC5wYXJhbXMgfHwgW10pOw0KICAgICAgICBjYWxsWyJkbyJdID0gdHJ1ZTsNCiAgICAgICAgcmV0dXJuIGNhbGw7DQogICAgICB9DQogICAgICBpZiAob3AgPT09ICduZXcnKSB7DQogICAgICAgIGlmIChmaXJzdCBpbnN0YW5jZW9mIENhbGwgJiYgIWZpcnN0WyJkbyJdKSB7DQogICAgICAgICAgcmV0dXJuIGZpcnN0Lm5ld0luc3RhbmNlKCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGZpcnN0IGluc3RhbmNlb2YgQ29kZSAmJiBmaXJzdC5ib3VuZCB8fCBmaXJzdFsiZG8iXSkgew0KICAgICAgICAgIGZpcnN0ID0gbmV3IFBhcmVucyhmaXJzdCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHRoaXMub3BlcmF0b3IgPSBDT05WRVJTSU9OU1tvcF0gfHwgb3A7DQogICAgICB0aGlzLmZpcnN0ID0gZmlyc3Q7DQogICAgICB0aGlzLnNlY29uZCA9IHNlY29uZDsNCiAgICAgIHRoaXMuZmxpcCA9ICEhZmxpcDsNCiAgICAgIHJldHVybiB0aGlzOw0KICAgIH0NCiAgICBDT05WRVJTSU9OUyA9IHsNCiAgICAgICc9PSc6ICc9PT0nLA0KICAgICAgJyE9JzogJyE9PScsDQogICAgICAnb2YnOiAnaW4nDQogICAgfTsNCiAgICBJTlZFUlNJT05TID0gew0KICAgICAgJyE9PSc6ICc9PT0nLA0KICAgICAgJz09PSc6ICchPT0nDQogICAgfTsNCiAgICBPcC5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ2ZpcnN0JywgJ3NlY29uZCddOw0KICAgIE9wLnByb3RvdHlwZS5pc1NpbXBsZU51bWJlciA9IE5POw0KICAgIE9wLnByb3RvdHlwZS5pc1VuYXJ5ID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gIXRoaXMuc2Vjb25kOw0KICAgIH07DQogICAgT3AucHJvdG90eXBlLmlzQ29tcGxleCA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIF9yZWYyOw0KICAgICAgcmV0dXJuICEodGhpcy5pc1VuYXJ5KCkgJiYgKChfcmVmMiA9IHRoaXMub3BlcmF0b3IpID09PSAnKycgfHwgX3JlZjIgPT09ICctJykpIHx8IHRoaXMuZmlyc3QuaXNDb21wbGV4KCk7DQogICAgfTsNCiAgICBPcC5wcm90b3R5cGUuaXNDaGFpbmFibGUgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBfcmVmMjsNCiAgICAgIHJldHVybiAoX3JlZjIgPSB0aGlzLm9wZXJhdG9yKSA9PT0gJzwnIHx8IF9yZWYyID09PSAnPicgfHwgX3JlZjIgPT09ICc+PScgfHwgX3JlZjIgPT09ICc8PScgfHwgX3JlZjIgPT09ICc9PT0nIHx8IF9yZWYyID09PSAnIT09JzsNCiAgICB9Ow0KICAgIE9wLnByb3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBhbGxJbnZlcnRhYmxlLCBjdXJyLCBmc3QsIG9wLCBfcmVmMjsNCiAgICAgIGlmICh0aGlzLmlzQ2hhaW5hYmxlKCkgJiYgdGhpcy5maXJzdC5pc0NoYWluYWJsZSgpKSB7DQogICAgICAgIGFsbEludmVydGFibGUgPSB0cnVlOw0KICAgICAgICBjdXJyID0gdGhpczsNCiAgICAgICAgd2hpbGUgKGN1cnIgJiYgY3Vyci5vcGVyYXRvcikgew0KICAgICAgICAgIGFsbEludmVydGFibGUgJiYgKGFsbEludmVydGFibGUgPSBjdXJyLm9wZXJhdG9yIGluIElOVkVSU0lPTlMpOw0KICAgICAgICAgIGN1cnIgPSBjdXJyLmZpcnN0Ow0KICAgICAgICB9DQogICAgICAgIGlmICghYWxsSW52ZXJ0YWJsZSkgew0KICAgICAgICAgIHJldHVybiBuZXcgUGFyZW5zKHRoaXMpLmludmVydCgpOw0KICAgICAgICB9DQogICAgICAgIGN1cnIgPSB0aGlzOw0KICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJyLm9wZXJhdG9yKSB7DQogICAgICAgICAgY3Vyci5pbnZlcnQgPSAhY3Vyci5pbnZlcnQ7DQogICAgICAgICAgY3Vyci5vcGVyYXRvciA9IElOVkVSU0lPTlNbY3Vyci5vcGVyYXRvcl07DQogICAgICAgICAgY3VyciA9IGN1cnIuZmlyc3Q7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICB9IGVsc2UgaWYgKG9wID0gSU5WRVJTSU9OU1t0aGlzLm9wZXJhdG9yXSkgew0KICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3A7DQogICAgICAgIGlmICh0aGlzLmZpcnN0LnVud3JhcCgpIGluc3RhbmNlb2YgT3ApIHsNCiAgICAgICAgICB0aGlzLmZpcnN0LmludmVydCgpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLnNlY29uZCkgew0KICAgICAgICByZXR1cm4gbmV3IFBhcmVucyh0aGlzKS5pbnZlcnQoKTsNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvciA9PT0gJyEnICYmIChmc3QgPSB0aGlzLmZpcnN0LnVud3JhcCgpKSBpbnN0YW5jZW9mIE9wICYmICgoX3JlZjIgPSBmc3Qub3BlcmF0b3IpID09PSAnIScgfHwgX3JlZjIgPT09ICdpbicgfHwgX3JlZjIgPT09ICdpbnN0YW5jZW9mJykpIHsNCiAgICAgICAgcmV0dXJuIGZzdDsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBuZXcgT3AoJyEnLCB0aGlzKTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIE9wLnByb3RvdHlwZS51bmZvbGRTb2FrID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIF9yZWYyOw0KICAgICAgcmV0dXJuICgoX3JlZjIgPSB0aGlzLm9wZXJhdG9yKSA9PT0gJysrJyB8fCBfcmVmMiA9PT0gJy0tJyB8fCBfcmVmMiA9PT0gJ2RlbGV0ZScpICYmIHVuZm9sZFNvYWsobywgdGhpcywgJ2ZpcnN0Jyk7DQogICAgfTsNCiAgICBPcC5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgY29kZTsNCiAgICAgIGlmICh0aGlzLmlzVW5hcnkoKSkgew0KICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlVW5hcnkobyk7DQogICAgICB9DQogICAgICBpZiAodGhpcy5pc0NoYWluYWJsZSgpICYmIHRoaXMuZmlyc3QuaXNDaGFpbmFibGUoKSkgew0KICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlQ2hhaW4obyk7DQogICAgICB9DQogICAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz8nKSB7DQogICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVFeGlzdGVuY2Uobyk7DQogICAgICB9DQogICAgICB0aGlzLmZpcnN0LmZyb250ID0gdGhpcy5mcm9udDsNCiAgICAgIGNvZGUgPSB0aGlzLmZpcnN0LmNvbXBpbGUobywgTEVWRUxfT1ApICsgJyAnICsgdGhpcy5vcGVyYXRvciArICcgJyArIHRoaXMuc2Vjb25kLmNvbXBpbGUobywgTEVWRUxfT1ApOw0KICAgICAgaWYgKG8ubGV2ZWwgPD0gTEVWRUxfT1ApIHsNCiAgICAgICAgcmV0dXJuIGNvZGU7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gIigiICsgY29kZSArICIpIjsNCiAgICAgIH0NCiAgICB9Ow0KICAgIE9wLnByb3RvdHlwZS5jb21waWxlQ2hhaW4gPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgY29kZSwgZnN0LCBzaGFyZWQsIF9yZWYyOw0KICAgICAgX3JlZjIgPSB0aGlzLmZpcnN0LnNlY29uZC5jYWNoZShvKSwgdGhpcy5maXJzdC5zZWNvbmQgPSBfcmVmMlswXSwgc2hhcmVkID0gX3JlZjJbMV07DQogICAgICBmc3QgPSB0aGlzLmZpcnN0LmNvbXBpbGUobywgTEVWRUxfT1ApOw0KICAgICAgY29kZSA9ICIiICsgZnN0ICsgIiAiICsgKHRoaXMuaW52ZXJ0ID8gJyYmJyA6ICd8fCcpICsgIiAiICsgKHNoYXJlZC5jb21waWxlKG8pKSArICIgIiArIHRoaXMub3BlcmF0b3IgKyAiICIgKyAodGhpcy5zZWNvbmQuY29tcGlsZShvLCBMRVZFTF9PUCkpOw0KICAgICAgcmV0dXJuICIoIiArIGNvZGUgKyAiKSI7DQogICAgfTsNCiAgICBPcC5wcm90b3R5cGUuY29tcGlsZUV4aXN0ZW5jZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBmc3QsIHJlZjsNCiAgICAgIGlmICh0aGlzLmZpcnN0LmlzQ29tcGxleCgpKSB7DQogICAgICAgIHJlZiA9IG5ldyBMaXRlcmFsKG8uc2NvcGUuZnJlZVZhcmlhYmxlKCdyZWYnKSk7DQogICAgICAgIGZzdCA9IG5ldyBQYXJlbnMobmV3IEFzc2lnbihyZWYsIHRoaXMuZmlyc3QpKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGZzdCA9IHRoaXMuZmlyc3Q7DQogICAgICAgIHJlZiA9IGZzdDsNCiAgICAgIH0NCiAgICAgIHJldHVybiBuZXcgSWYobmV3IEV4aXN0ZW5jZShmc3QpLCByZWYsIHsNCiAgICAgICAgdHlwZTogJ2lmJw0KICAgICAgfSkuYWRkRWxzZSh0aGlzLnNlY29uZCkuY29tcGlsZShvKTsNCiAgICB9Ow0KICAgIE9wLnByb3RvdHlwZS5jb21waWxlVW5hcnkgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgb3AsIHBhcnRzOw0KICAgICAgcGFydHMgPSBbb3AgPSB0aGlzLm9wZXJhdG9yXTsNCiAgICAgIGlmICgob3AgPT09ICduZXcnIHx8IG9wID09PSAndHlwZW9mJyB8fCBvcCA9PT0gJ2RlbGV0ZScpIHx8IChvcCA9PT0gJysnIHx8IG9wID09PSAnLScpICYmIHRoaXMuZmlyc3QgaW5zdGFuY2VvZiBPcCAmJiB0aGlzLmZpcnN0Lm9wZXJhdG9yID09PSBvcCkgew0KICAgICAgICBwYXJ0cy5wdXNoKCcgJyk7DQogICAgICB9DQogICAgICBpZiAob3AgPT09ICduZXcnICYmIHRoaXMuZmlyc3QuaXNTdGF0ZW1lbnQobykpIHsNCiAgICAgICAgdGhpcy5maXJzdCA9IG5ldyBQYXJlbnModGhpcy5maXJzdCk7DQogICAgICB9DQogICAgICBwYXJ0cy5wdXNoKHRoaXMuZmlyc3QuY29tcGlsZShvLCBMRVZFTF9PUCkpOw0KICAgICAgaWYgKHRoaXMuZmxpcCkgew0KICAgICAgICBwYXJ0cy5yZXZlcnNlKCk7DQogICAgICB9DQogICAgICByZXR1cm4gcGFydHMuam9pbignJyk7DQogICAgfTsNCiAgICBPcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihpZHQpIHsNCiAgICAgIHJldHVybiBPcC5fX3N1cGVyX18udG9TdHJpbmcuY2FsbCh0aGlzLCBpZHQsIHRoaXMuY29uc3RydWN0b3IubmFtZSArICcgJyArIHRoaXMub3BlcmF0b3IpOw0KICAgIH07DQogICAgcmV0dXJuIE9wOw0KICB9KSgpOw0KICBleHBvcnRzLkluID0gSW4gPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKEluLCBCYXNlKTsNCiAgICBmdW5jdGlvbiBJbihvYmplY3QsIGFycmF5KSB7DQogICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsNCiAgICAgIHRoaXMuYXJyYXkgPSBhcnJheTsNCiAgICB9DQogICAgSW4ucHJvdG90eXBlLmNoaWxkcmVuID0gWydvYmplY3QnLCAnYXJyYXknXTsNCiAgICBJbi5wcm90b3R5cGUuaW52ZXJ0ID0gTkVHQVRFOw0KICAgIEluLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBoYXNTcGxhdCwgb2JqLCBfaSwgX2xlbiwgX3JlZjI7DQogICAgICBpZiAodGhpcy5hcnJheSBpbnN0YW5jZW9mIFZhbHVlICYmIHRoaXMuYXJyYXkuaXNBcnJheSgpKSB7DQogICAgICAgIF9yZWYyID0gdGhpcy5hcnJheS5iYXNlLm9iamVjdHM7DQogICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjIubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsNCiAgICAgICAgICBvYmogPSBfcmVmMltfaV07DQogICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNwbGF0KSB7DQogICAgICAgICAgICBoYXNTcGxhdCA9IHRydWU7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFoYXNTcGxhdCkgew0KICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVPclRlc3Qobyk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVMb29wVGVzdChvKTsNCiAgICB9Ow0KICAgIEluLnByb3RvdHlwZS5jb21waWxlT3JUZXN0ID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIGNtcCwgY25qLCBpLCBpdGVtLCByZWYsIHN1YiwgdGVzdHMsIF9yZWYyLCBfcmVmMzsNCiAgICAgIF9yZWYyID0gdGhpcy5vYmplY3QuY2FjaGUobywgTEVWRUxfT1ApLCBzdWIgPSBfcmVmMlswXSwgcmVmID0gX3JlZjJbMV07DQogICAgICBfcmVmMyA9IHRoaXMubmVnYXRlZCA/IFsnICE9PSAnLCAnICYmICddIDogWycgPT09ICcsICcgfHwgJ10sIGNtcCA9IF9yZWYzWzBdLCBjbmogPSBfcmVmM1sxXTsNCiAgICAgIHRlc3RzID0gKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgX2xlbiwgX3JlZjQsIF9yZXN1bHRzOw0KICAgICAgICBfcmVmNCA9IHRoaXMuYXJyYXkuYmFzZS5vYmplY3RzOw0KICAgICAgICBfcmVzdWx0cyA9IFtdOw0KICAgICAgICBmb3IgKGkgPSAwLCBfbGVuID0gX3JlZjQubGVuZ3RoOyBpIDwgX2xlbjsgaSsrKSB7DQogICAgICAgICAgaXRlbSA9IF9yZWY0W2ldOw0KICAgICAgICAgIF9yZXN1bHRzLnB1c2goKGkgPyByZWYgOiBzdWIpICsgY21wICsgaXRlbS5jb21waWxlKG8sIExFVkVMX09QKSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9yZXN1bHRzOw0KICAgICAgfSkuY2FsbCh0aGlzKTsNCiAgICAgIGlmICh0ZXN0cy5sZW5ndGggPT09IDApIHsNCiAgICAgICAgcmV0dXJuICdmYWxzZSc7DQogICAgICB9DQogICAgICB0ZXN0cyA9IHRlc3RzLmpvaW4oY25qKTsNCiAgICAgIGlmIChvLmxldmVsIDwgTEVWRUxfT1ApIHsNCiAgICAgICAgcmV0dXJuIHRlc3RzOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICIoIiArIHRlc3RzICsgIikiOw0KICAgICAgfQ0KICAgIH07DQogICAgSW4ucHJvdG90eXBlLmNvbXBpbGVMb29wVGVzdCA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBjb2RlLCByZWYsIHN1YiwgX3JlZjI7DQogICAgICBfcmVmMiA9IHRoaXMub2JqZWN0LmNhY2hlKG8sIExFVkVMX0xJU1QpLCBzdWIgPSBfcmVmMlswXSwgcmVmID0gX3JlZjJbMV07DQogICAgICBjb2RlID0gdXRpbGl0eSgnaW5kZXhPZicpICsgKCIuY2FsbCgiICsgKHRoaXMuYXJyYXkuY29tcGlsZShvLCBMRVZFTF9MSVNUKSkgKyAiLCAiICsgcmVmICsgIikgIikgKyAodGhpcy5uZWdhdGVkID8gJzwgMCcgOiAnPj0gMCcpOw0KICAgICAgaWYgKHN1YiA9PT0gcmVmKSB7DQogICAgICAgIHJldHVybiBjb2RlOw0KICAgICAgfQ0KICAgICAgY29kZSA9IHN1YiArICcsICcgKyBjb2RlOw0KICAgICAgaWYgKG8ubGV2ZWwgPCBMRVZFTF9MSVNUKSB7DQogICAgICAgIHJldHVybiBjb2RlOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICIoIiArIGNvZGUgKyAiKSI7DQogICAgICB9DQogICAgfTsNCiAgICBJbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihpZHQpIHsNCiAgICAgIHJldHVybiBJbi5fX3N1cGVyX18udG9TdHJpbmcuY2FsbCh0aGlzLCBpZHQsIHRoaXMuY29uc3RydWN0b3IubmFtZSArICh0aGlzLm5lZ2F0ZWQgPyAnIScgOiAnJykpOw0KICAgIH07DQogICAgcmV0dXJuIEluOw0KICB9KSgpOw0KICBleHBvcnRzLlRyeSA9IFRyeSA9IChmdW5jdGlvbigpIHsNCiAgICBfX2V4dGVuZHMoVHJ5LCBCYXNlKTsNCiAgICBmdW5jdGlvbiBUcnkoYXR0ZW1wdCwgZXJyb3IsIHJlY292ZXJ5LCBlbnN1cmUpIHsNCiAgICAgIHRoaXMuYXR0ZW1wdCA9IGF0dGVtcHQ7DQogICAgICB0aGlzLmVycm9yID0gZXJyb3I7DQogICAgICB0aGlzLnJlY292ZXJ5ID0gcmVjb3Zlcnk7DQogICAgICB0aGlzLmVuc3VyZSA9IGVuc3VyZTsNCiAgICB9DQogICAgVHJ5LnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnYXR0ZW1wdCcsICdyZWNvdmVyeScsICdlbnN1cmUnXTsNCiAgICBUcnkucHJvdG90eXBlLmlzU3RhdGVtZW50ID0gWUVTOw0KICAgIFRyeS5wcm90b3R5cGUuanVtcHMgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgX3JlZjI7DQogICAgICByZXR1cm4gdGhpcy5hdHRlbXB0Lmp1bXBzKG8pIHx8ICgoX3JlZjIgPSB0aGlzLnJlY292ZXJ5KSAhPSBudWxsID8gX3JlZjIuanVtcHMobykgOiB2b2lkIDApOw0KICAgIH07DQogICAgVHJ5LnByb3RvdHlwZS5tYWtlUmV0dXJuID0gZnVuY3Rpb24oKSB7DQogICAgICBpZiAodGhpcy5hdHRlbXB0KSB7DQogICAgICAgIHRoaXMuYXR0ZW1wdCA9IHRoaXMuYXR0ZW1wdC5tYWtlUmV0dXJuKCk7DQogICAgICB9DQogICAgICBpZiAodGhpcy5yZWNvdmVyeSkgew0KICAgICAgICB0aGlzLnJlY292ZXJ5ID0gdGhpcy5yZWNvdmVyeS5tYWtlUmV0dXJuKCk7DQogICAgICB9DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9Ow0KICAgIFRyeS5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgY2F0Y2hQYXJ0LCBlcnJvclBhcnQ7DQogICAgICBvLmluZGVudCArPSBUQUI7DQogICAgICBlcnJvclBhcnQgPSB0aGlzLmVycm9yID8gIiAoIiArICh0aGlzLmVycm9yLmNvbXBpbGUobykpICsgIikgIiA6ICcgJzsNCiAgICAgIGNhdGNoUGFydCA9IHRoaXMucmVjb3ZlcnkgPyAiIGNhdGNoIiArIGVycm9yUGFydCArICJ7XG4iICsgKHRoaXMucmVjb3ZlcnkuY29tcGlsZShvLCBMRVZFTF9UT1ApKSArICJcbiIgKyB0aGlzLnRhYiArICJ9IiA6ICEodGhpcy5lbnN1cmUgfHwgdGhpcy5yZWNvdmVyeSkgPyAnIGNhdGNoIChfZSkge30nIDogdm9pZCAwOw0KICAgICAgcmV0dXJuICgiIiArIHRoaXMudGFiICsgInRyeSB7XG4iICsgKHRoaXMuYXR0ZW1wdC5jb21waWxlKG8sIExFVkVMX1RPUCkpICsgIlxuIiArIHRoaXMudGFiICsgIn0iICsgKGNhdGNoUGFydCB8fCAnJykpICsgKHRoaXMuZW5zdXJlID8gIiBmaW5hbGx5IHtcbiIgKyAodGhpcy5lbnN1cmUuY29tcGlsZShvLCBMRVZFTF9UT1ApKSArICJcbiIgKyB0aGlzLnRhYiArICJ9IiA6ICcnKTsNCiAgICB9Ow0KICAgIHJldHVybiBUcnk7DQogIH0pKCk7DQogIGV4cG9ydHMuVGhyb3cgPSBUaHJvdyA9IChmdW5jdGlvbigpIHsNCiAgICBfX2V4dGVuZHMoVGhyb3csIEJhc2UpOw0KICAgIGZ1bmN0aW9uIFRocm93KGV4cHJlc3Npb24pIHsNCiAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247DQogICAgfQ0KICAgIFRocm93LnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnZXhwcmVzc2lvbiddOw0KICAgIFRocm93LnByb3RvdHlwZS5pc1N0YXRlbWVudCA9IFlFUzsNCiAgICBUaHJvdy5wcm90b3R5cGUuanVtcHMgPSBOTzsNCiAgICBUaHJvdy5wcm90b3R5cGUubWFrZVJldHVybiA9IFRISVM7DQogICAgVGhyb3cucHJvdG90eXBlLmNvbXBpbGVOb2RlID0gZnVuY3Rpb24obykgew0KICAgICAgcmV0dXJuIHRoaXMudGFiICsgKCJ0aHJvdyAiICsgKHRoaXMuZXhwcmVzc2lvbi5jb21waWxlKG8pKSArICI7Iik7DQogICAgfTsNCiAgICByZXR1cm4gVGhyb3c7DQogIH0pKCk7DQogIGV4cG9ydHMuRXhpc3RlbmNlID0gRXhpc3RlbmNlID0gKGZ1bmN0aW9uKCkgew0KICAgIF9fZXh0ZW5kcyhFeGlzdGVuY2UsIEJhc2UpOw0KICAgIGZ1bmN0aW9uIEV4aXN0ZW5jZShleHByZXNzaW9uKSB7DQogICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOw0KICAgIH0NCiAgICBFeGlzdGVuY2UucHJvdG90eXBlLmNoaWxkcmVuID0gWydleHByZXNzaW9uJ107DQogICAgRXhpc3RlbmNlLnByb3RvdHlwZS5pbnZlcnQgPSBORUdBVEU7DQogICAgRXhpc3RlbmNlLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBjbXAsIGNuaiwgY29kZSwgX3JlZjI7DQogICAgICBjb2RlID0gdGhpcy5leHByZXNzaW9uLmNvbXBpbGUobywgTEVWRUxfT1ApOw0KICAgICAgY29kZSA9IElERU5USUZJRVIudGVzdChjb2RlKSAmJiAhby5zY29wZS5jaGVjayhjb2RlKSA/ICgoX3JlZjIgPSB0aGlzLm5lZ2F0ZWQgPyBbJz09PScsICd8fCddIDogWychPT0nLCAnJiYnXSwgY21wID0gX3JlZjJbMF0sIGNuaiA9IF9yZWYyWzFdLCBfcmVmMiksICJ0eXBlb2YgIiArIGNvZGUgKyAiICIgKyBjbXAgKyAiIFwidW5kZWZpbmVkXCIgIiArIGNuaiArICIgIiArIGNvZGUgKyAiICIgKyBjbXAgKyAiIG51bGwiKSA6ICIiICsgY29kZSArICIgIiArICh0aGlzLm5lZ2F0ZWQgPyAnPT0nIDogJyE9JykgKyAiIG51bGwiOw0KICAgICAgaWYgKG8ubGV2ZWwgPD0gTEVWRUxfQ09ORCkgew0KICAgICAgICByZXR1cm4gY29kZTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiAiKCIgKyBjb2RlICsgIikiOw0KICAgICAgfQ0KICAgIH07DQogICAgcmV0dXJuIEV4aXN0ZW5jZTsNCiAgfSkoKTsNCiAgZXhwb3J0cy5QYXJlbnMgPSBQYXJlbnMgPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKFBhcmVucywgQmFzZSk7DQogICAgZnVuY3Rpb24gUGFyZW5zKGJvZHkpIHsNCiAgICAgIHRoaXMuYm9keSA9IGJvZHk7DQogICAgfQ0KICAgIFBhcmVucy5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ2JvZHknXTsNCiAgICBQYXJlbnMucHJvdG90eXBlLnVud3JhcCA9IGZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuIHRoaXMuYm9keTsNCiAgICB9Ow0KICAgIFBhcmVucy5wcm90b3R5cGUuaXNDb21wbGV4ID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gdGhpcy5ib2R5LmlzQ29tcGxleCgpOw0KICAgIH07DQogICAgUGFyZW5zLnByb3RvdHlwZS5tYWtlUmV0dXJuID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gdGhpcy5ib2R5Lm1ha2VSZXR1cm4oKTsNCiAgICB9Ow0KICAgIFBhcmVucy5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgYmFyZSwgY29kZSwgZXhwcjsNCiAgICAgIGV4cHIgPSB0aGlzLmJvZHkudW53cmFwKCk7DQogICAgICBpZiAoZXhwciBpbnN0YW5jZW9mIFZhbHVlICYmIGV4cHIuaXNBdG9taWMoKSkgew0KICAgICAgICBleHByLmZyb250ID0gdGhpcy5mcm9udDsNCiAgICAgICAgcmV0dXJuIGV4cHIuY29tcGlsZShvKTsNCiAgICAgIH0NCiAgICAgIGNvZGUgPSBleHByLmNvbXBpbGUobywgTEVWRUxfUEFSRU4pOw0KICAgICAgYmFyZSA9IG8ubGV2ZWwgPCBMRVZFTF9PUCAmJiAoZXhwciBpbnN0YW5jZW9mIE9wIHx8IGV4cHIgaW5zdGFuY2VvZiBDYWxsIHx8IChleHByIGluc3RhbmNlb2YgRm9yICYmIGV4cHIucmV0dXJucykpOw0KICAgICAgaWYgKGJhcmUpIHsNCiAgICAgICAgcmV0dXJuIGNvZGU7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gIigiICsgY29kZSArICIpIjsNCiAgICAgIH0NCiAgICB9Ow0KICAgIHJldHVybiBQYXJlbnM7DQogIH0pKCk7DQogIGV4cG9ydHMuRm9yID0gRm9yID0gKGZ1bmN0aW9uKCkgew0KICAgIF9fZXh0ZW5kcyhGb3IsIEJhc2UpOw0KICAgIGZ1bmN0aW9uIEZvcihib2R5LCBzb3VyY2UpIHsNCiAgICAgIHZhciBfcmVmMjsNCiAgICAgIHRoaXMuc291cmNlID0gc291cmNlLnNvdXJjZSwgdGhpcy5ndWFyZCA9IHNvdXJjZS5ndWFyZCwgdGhpcy5zdGVwID0gc291cmNlLnN0ZXAsIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lLCB0aGlzLmluZGV4ID0gc291cmNlLmluZGV4Ow0KICAgICAgdGhpcy5ib2R5ID0gQmxvY2sud3JhcChbYm9keV0pOw0KICAgICAgdGhpcy5vd24gPSAhIXNvdXJjZS5vd247DQogICAgICB0aGlzLm9iamVjdCA9ICEhc291cmNlLm9iamVjdDsNCiAgICAgIGlmICh0aGlzLm9iamVjdCkgew0KICAgICAgICBfcmVmMiA9IFt0aGlzLmluZGV4LCB0aGlzLm5hbWVdLCB0aGlzLm5hbWUgPSBfcmVmMlswXSwgdGhpcy5pbmRleCA9IF9yZWYyWzFdOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuaW5kZXggaW5zdGFuY2VvZiBWYWx1ZSkgew0KICAgICAgICB0aHJvdyBTeW50YXhFcnJvcignaW5kZXggY2Fubm90IGJlIGEgcGF0dGVybiBtYXRjaGluZyBleHByZXNzaW9uJyk7DQogICAgICB9DQogICAgICB0aGlzLnJhbmdlID0gdGhpcy5zb3VyY2UgaW5zdGFuY2VvZiBWYWx1ZSAmJiB0aGlzLnNvdXJjZS5iYXNlIGluc3RhbmNlb2YgUmFuZ2UgJiYgIXRoaXMuc291cmNlLnByb3BlcnRpZXMubGVuZ3RoOw0KICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5uYW1lIGluc3RhbmNlb2YgVmFsdWU7DQogICAgICBpZiAodGhpcy5yYW5nZSAmJiB0aGlzLmluZGV4KSB7DQogICAgICAgIHRocm93IFN5bnRheEVycm9yKCdpbmRleGVzIGRvIG5vdCBhcHBseSB0byByYW5nZSBsb29wcycpOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMucmFuZ2UgJiYgdGhpcy5wYXR0ZXJuKSB7DQogICAgICAgIHRocm93IFN5bnRheEVycm9yKCdjYW5ub3QgcGF0dGVybiBtYXRjaCBvdmVyIHJhbmdlIGxvb3BzJyk7DQogICAgICB9DQogICAgICB0aGlzLnJldHVybnMgPSBmYWxzZTsNCiAgICB9DQogICAgRm9yLnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnYm9keScsICdzb3VyY2UnLCAnZ3VhcmQnLCAnc3RlcCddOw0KICAgIEZvci5wcm90b3R5cGUuaXNTdGF0ZW1lbnQgPSBZRVM7DQogICAgRm9yLnByb3RvdHlwZS5qdW1wcyA9IFdoaWxlLnByb3RvdHlwZS5qdW1wczsNCiAgICBGb3IucHJvdG90eXBlLm1ha2VSZXR1cm4gPSBmdW5jdGlvbigpIHsNCiAgICAgIHRoaXMucmV0dXJucyA9IHRydWU7DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9Ow0KICAgIEZvci5wcm90b3R5cGUuY29tcGlsZU5vZGUgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgYm9keSwgZGVmUGFydCwgZm9yUGFydCwgZm9yVmFyUGFydCwgZ3VhcmRQYXJ0LCBpZHQxLCBpbmRleCwgaXZhciwgbGFzdEp1bXBzLCBsdmFyLCBuYW1lLCBuYW1lUGFydCwgcmVmLCByZXN1bHRQYXJ0LCByZXR1cm5SZXN1bHQsIHJ2YXIsIHNjb3BlLCBzb3VyY2UsIHN0ZXBQYXJ0LCBzdGVwdmFyLCBzdmFyLCB2YXJQYXJ0LCBfcmVmMjsNCiAgICAgIGJvZHkgPSBCbG9jay53cmFwKFt0aGlzLmJvZHldKTsNCiAgICAgIGxhc3RKdW1wcyA9IChfcmVmMiA9IGxhc3QoYm9keS5leHByZXNzaW9ucykpICE9IG51bGwgPyBfcmVmMi5qdW1wcygpIDogdm9pZCAwOw0KICAgICAgaWYgKGxhc3RKdW1wcyAmJiBsYXN0SnVtcHMgaW5zdGFuY2VvZiBSZXR1cm4pIHsNCiAgICAgICAgdGhpcy5yZXR1cm5zID0gZmFsc2U7DQogICAgICB9DQogICAgICBzb3VyY2UgPSB0aGlzLnJhbmdlID8gdGhpcy5zb3VyY2UuYmFzZSA6IHRoaXMuc291cmNlOw0KICAgICAgc2NvcGUgPSBvLnNjb3BlOw0KICAgICAgbmFtZSA9IHRoaXMubmFtZSAmJiB0aGlzLm5hbWUuY29tcGlsZShvLCBMRVZFTF9MSVNUKTsNCiAgICAgIGluZGV4ID0gdGhpcy5pbmRleCAmJiB0aGlzLmluZGV4LmNvbXBpbGUobywgTEVWRUxfTElTVCk7DQogICAgICBpZiAobmFtZSAmJiAhdGhpcy5wYXR0ZXJuKSB7DQogICAgICAgIHNjb3BlLmZpbmQobmFtZSwgew0KICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZQ0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICAgIGlmIChpbmRleCkgew0KICAgICAgICBzY29wZS5maW5kKGluZGV4LCB7DQogICAgICAgICAgaW1tZWRpYXRlOiB0cnVlDQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMucmV0dXJucykgew0KICAgICAgICBydmFyID0gc2NvcGUuZnJlZVZhcmlhYmxlKCdyZXN1bHRzJyk7DQogICAgICB9DQogICAgICBpdmFyID0gKHRoaXMucmFuZ2UgPyBuYW1lIDogaW5kZXgpIHx8IHNjb3BlLmZyZWVWYXJpYWJsZSgnaScpOw0KICAgICAgaWYgKHRoaXMuc3RlcCAmJiAhdGhpcy5yYW5nZSkgew0KICAgICAgICBzdGVwdmFyID0gc2NvcGUuZnJlZVZhcmlhYmxlKCJzdGVwIik7DQogICAgICB9DQogICAgICBpZiAodGhpcy5wYXR0ZXJuKSB7DQogICAgICAgIG5hbWUgPSBpdmFyOw0KICAgICAgfQ0KICAgICAgdmFyUGFydCA9ICcnOw0KICAgICAgZ3VhcmRQYXJ0ID0gJyc7DQogICAgICBkZWZQYXJ0ID0gJyc7DQogICAgICBpZHQxID0gdGhpcy50YWIgKyBUQUI7DQogICAgICBpZiAodGhpcy5yYW5nZSkgew0KICAgICAgICBmb3JQYXJ0ID0gc291cmNlLmNvbXBpbGUobWVyZ2Uobywgew0KICAgICAgICAgIGluZGV4OiBpdmFyLA0KICAgICAgICAgIHN0ZXA6IHRoaXMuc3RlcA0KICAgICAgICB9KSk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBzdmFyID0gdGhpcy5zb3VyY2UuY29tcGlsZShvLCBMRVZFTF9MSVNUKTsNCiAgICAgICAgaWYgKChuYW1lIHx8IHRoaXMub3duKSAmJiAhSURFTlRJRklFUi50ZXN0KHN2YXIpKSB7DQogICAgICAgICAgZGVmUGFydCA9ICIiICsgdGhpcy50YWIgKyAocmVmID0gc2NvcGUuZnJlZVZhcmlhYmxlKCdyZWYnKSkgKyAiID0gIiArIHN2YXIgKyAiO1xuIjsNCiAgICAgICAgICBzdmFyID0gcmVmOw0KICAgICAgICB9DQogICAgICAgIGlmIChuYW1lICYmICF0aGlzLnBhdHRlcm4pIHsNCiAgICAgICAgICBuYW1lUGFydCA9ICIiICsgbmFtZSArICIgPSAiICsgc3ZhciArICJbIiArIGl2YXIgKyAiXSI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCF0aGlzLm9iamVjdCkgew0KICAgICAgICAgIGx2YXIgPSBzY29wZS5mcmVlVmFyaWFibGUoJ2xlbicpOw0KICAgICAgICAgIGZvclZhclBhcnQgPSAoIiIgKyBpdmFyICsgIiA9IDAsICIgKyBsdmFyICsgIiA9ICIgKyBzdmFyICsgIi5sZW5ndGgiKSArICh0aGlzLnN0ZXAgPyAiLCAiICsgc3RlcHZhciArICIgPSAiICsgKHRoaXMuc3RlcC5jb21waWxlKG8sIExFVkVMX09QKSkgOiAnJyk7DQogICAgICAgICAgc3RlcFBhcnQgPSB0aGlzLnN0ZXAgPyAiIiArIGl2YXIgKyAiICs9ICIgKyBzdGVwdmFyIDogIiIgKyBpdmFyICsgIisrIjsNCiAgICAgICAgICBmb3JQYXJ0ID0gIiIgKyBmb3JWYXJQYXJ0ICsgIjsgIiArIGl2YXIgKyAiIDwgIiArIGx2YXIgKyAiOyAiICsgc3RlcFBhcnQ7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLnJldHVybnMpIHsNCiAgICAgICAgcmVzdWx0UGFydCA9ICIiICsgdGhpcy50YWIgKyBydmFyICsgIiA9IFtdO1xuIjsNCiAgICAgICAgcmV0dXJuUmVzdWx0ID0gIlxuIiArIHRoaXMudGFiICsgInJldHVybiAiICsgcnZhciArICI7IjsNCiAgICAgICAgYm9keSA9IFB1c2gud3JhcChydmFyLCBib2R5KTsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmd1YXJkKSB7DQogICAgICAgIGJvZHkgPSBCbG9jay53cmFwKFtuZXcgSWYodGhpcy5ndWFyZCwgYm9keSldKTsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLnBhdHRlcm4pIHsNCiAgICAgICAgYm9keS5leHByZXNzaW9ucy51bnNoaWZ0KG5ldyBBc3NpZ24odGhpcy5uYW1lLCBuZXcgTGl0ZXJhbCgiIiArIHN2YXIgKyAiWyIgKyBpdmFyICsgIl0iKSkpOw0KICAgICAgfQ0KICAgICAgZGVmUGFydCArPSB0aGlzLnBsdWNrRGlyZWN0Q2FsbChvLCBib2R5KTsNCiAgICAgIGlmIChuYW1lUGFydCkgew0KICAgICAgICB2YXJQYXJ0ID0gIlxuIiArIGlkdDEgKyBuYW1lUGFydCArICI7IjsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLm9iamVjdCkgew0KICAgICAgICBmb3JQYXJ0ID0gIiIgKyBpdmFyICsgIiBpbiAiICsgc3ZhcjsNCiAgICAgICAgaWYgKHRoaXMub3duKSB7DQogICAgICAgICAgZ3VhcmRQYXJ0ID0gIlxuIiArIGlkdDEgKyAiaWYgKCEiICsgKHV0aWxpdHkoJ2hhc1Byb3AnKSkgKyAiLmNhbGwoIiArIHN2YXIgKyAiLCAiICsgaXZhciArICIpKSBjb250aW51ZTsiOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBib2R5ID0gYm9keS5jb21waWxlKG1lcmdlKG8sIHsNCiAgICAgICAgaW5kZW50OiBpZHQxDQogICAgICB9KSwgTEVWRUxfVE9QKTsNCiAgICAgIGlmIChib2R5KSB7DQogICAgICAgIGJvZHkgPSAnXG4nICsgYm9keSArICdcbic7DQogICAgICB9DQogICAgICByZXR1cm4gIiIgKyBkZWZQYXJ0ICsgKHJlc3VsdFBhcnQgfHwgJycpICsgdGhpcy50YWIgKyAiZm9yICgiICsgZm9yUGFydCArICIpIHsiICsgZ3VhcmRQYXJ0ICsgdmFyUGFydCArIGJvZHkgKyB0aGlzLnRhYiArICJ9IiArIChyZXR1cm5SZXN1bHQgfHwgJycpOw0KICAgIH07DQogICAgRm9yLnByb3RvdHlwZS5wbHVja0RpcmVjdENhbGwgPSBmdW5jdGlvbihvLCBib2R5KSB7DQogICAgICB2YXIgYmFzZSwgZGVmcywgZXhwciwgZm4sIGlkeCwgcmVmLCB2YWwsIF9sZW4sIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9yZWY1LCBfcmVmNiwgX3JlZjc7DQogICAgICBkZWZzID0gJyc7DQogICAgICBfcmVmMiA9IGJvZHkuZXhwcmVzc2lvbnM7DQogICAgICBmb3IgKGlkeCA9IDAsIF9sZW4gPSBfcmVmMi5sZW5ndGg7IGlkeCA8IF9sZW47IGlkeCsrKSB7DQogICAgICAgIGV4cHIgPSBfcmVmMltpZHhdOw0KICAgICAgICBleHByID0gZXhwci51bndyYXBBbGwoKTsNCiAgICAgICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIENhbGwpKSB7DQogICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgdmFsID0gZXhwci52YXJpYWJsZS51bndyYXBBbGwoKTsNCiAgICAgICAgaWYgKCEoKHZhbCBpbnN0YW5jZW9mIENvZGUpIHx8ICh2YWwgaW5zdGFuY2VvZiBWYWx1ZSAmJiAoKF9yZWYzID0gdmFsLmJhc2UpICE9IG51bGwgPyBfcmVmMy51bndyYXBBbGwoKSA6IHZvaWQgMCkgaW5zdGFuY2VvZiBDb2RlICYmIHZhbC5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSAmJiAoKF9yZWY0ID0gKF9yZWY1ID0gdmFsLnByb3BlcnRpZXNbMF0ubmFtZSkgIT0gbnVsbCA/IF9yZWY1LnZhbHVlIDogdm9pZCAwKSA9PT0gJ2NhbGwnIHx8IF9yZWY0ID09PSAnYXBwbHknKSkpKSB7DQogICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgZm4gPSAoKF9yZWY2ID0gdmFsLmJhc2UpICE9IG51bGwgPyBfcmVmNi51bndyYXBBbGwoKSA6IHZvaWQgMCkgfHwgdmFsOw0KICAgICAgICByZWYgPSBuZXcgTGl0ZXJhbChvLnNjb3BlLmZyZWVWYXJpYWJsZSgnZm4nKSk7DQogICAgICAgIGJhc2UgPSBuZXcgVmFsdWUocmVmKTsNCiAgICAgICAgaWYgKHZhbC5iYXNlKSB7DQogICAgICAgICAgX3JlZjcgPSBbYmFzZSwgdmFsXSwgdmFsLmJhc2UgPSBfcmVmN1swXSwgYmFzZSA9IF9yZWY3WzFdOw0KICAgICAgICAgIGFyZ3MudW5zaGlmdChuZXcgTGl0ZXJhbCgndGhpcycpKTsNCiAgICAgICAgfQ0KICAgICAgICBib2R5LmV4cHJlc3Npb25zW2lkeF0gPSBuZXcgQ2FsbChiYXNlLCBleHByLmFyZ3MpOw0KICAgICAgICBkZWZzICs9IHRoaXMudGFiICsgbmV3IEFzc2lnbihyZWYsIGZuKS5jb21waWxlKG8sIExFVkVMX1RPUCkgKyAnO1xuJzsNCiAgICAgIH0NCiAgICAgIHJldHVybiBkZWZzOw0KICAgIH07DQogICAgcmV0dXJuIEZvcjsNCiAgfSkoKTsNCiAgZXhwb3J0cy5Td2l0Y2ggPSBTd2l0Y2ggPSAoZnVuY3Rpb24oKSB7DQogICAgX19leHRlbmRzKFN3aXRjaCwgQmFzZSk7DQogICAgZnVuY3Rpb24gU3dpdGNoKHN1YmplY3QsIGNhc2VzLCBvdGhlcndpc2UpIHsNCiAgICAgIHRoaXMuc3ViamVjdCA9IHN1YmplY3Q7DQogICAgICB0aGlzLmNhc2VzID0gY2FzZXM7DQogICAgICB0aGlzLm90aGVyd2lzZSA9IG90aGVyd2lzZTsNCiAgICB9DQogICAgU3dpdGNoLnByb3RvdHlwZS5jaGlsZHJlbiA9IFsnc3ViamVjdCcsICdjYXNlcycsICdvdGhlcndpc2UnXTsNCiAgICBTd2l0Y2gucHJvdG90eXBlLmlzU3RhdGVtZW50ID0gWUVTOw0KICAgIFN3aXRjaC5wcm90b3R5cGUuanVtcHMgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgYmxvY2ssIGNvbmRzLCBfaSwgX2xlbiwgX3JlZjIsIF9yZWYzLCBfcmVmNDsNCiAgICAgIGlmIChvID09IG51bGwpIHsNCiAgICAgICAgbyA9IHsNCiAgICAgICAgICBibG9jazogdHJ1ZQ0KICAgICAgICB9Ow0KICAgICAgfQ0KICAgICAgX3JlZjIgPSB0aGlzLmNhc2VzOw0KICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmMi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgew0KICAgICAgICBfcmVmMyA9IF9yZWYyW19pXSwgY29uZHMgPSBfcmVmM1swXSwgYmxvY2sgPSBfcmVmM1sxXTsNCiAgICAgICAgaWYgKGJsb2NrLmp1bXBzKG8pKSB7DQogICAgICAgICAgcmV0dXJuIGJsb2NrOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gKF9yZWY0ID0gdGhpcy5vdGhlcndpc2UpICE9IG51bGwgPyBfcmVmNC5qdW1wcyhvKSA6IHZvaWQgMDsNCiAgICB9Ow0KICAgIFN3aXRjaC5wcm90b3R5cGUubWFrZVJldHVybiA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIHBhaXIsIF9pLCBfbGVuLCBfcmVmMiwgX3JlZjM7DQogICAgICBfcmVmMiA9IHRoaXMuY2FzZXM7DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIHBhaXIgPSBfcmVmMltfaV07DQogICAgICAgIHBhaXJbMV0ubWFrZVJldHVybigpOw0KICAgICAgfQ0KICAgICAgaWYgKChfcmVmMyA9IHRoaXMub3RoZXJ3aXNlKSAhPSBudWxsKSB7DQogICAgICAgIF9yZWYzLm1ha2VSZXR1cm4oKTsNCiAgICAgIH0NCiAgICAgIHJldHVybiB0aGlzOw0KICAgIH07DQogICAgU3dpdGNoLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBibG9jaywgYm9keSwgY29kZSwgY29uZCwgY29uZGl0aW9ucywgZXhwciwgaSwgaWR0MSwgaWR0MiwgX2ksIF9sZW4sIF9sZW4yLCBfcmVmMiwgX3JlZjMsIF9yZWY0LCBfcmVmNTsNCiAgICAgIGlkdDEgPSBvLmluZGVudCArIFRBQjsNCiAgICAgIGlkdDIgPSBvLmluZGVudCA9IGlkdDEgKyBUQUI7DQogICAgICBjb2RlID0gdGhpcy50YWIgKyAoInN3aXRjaCAoIiArICgoKF9yZWYyID0gdGhpcy5zdWJqZWN0KSAhPSBudWxsID8gX3JlZjIuY29tcGlsZShvLCBMRVZFTF9QQVJFTikgOiB2b2lkIDApIHx8IGZhbHNlKSArICIpIHtcbiIpOw0KICAgICAgX3JlZjMgPSB0aGlzLmNhc2VzOw0KICAgICAgZm9yIChpID0gMCwgX2xlbiA9IF9yZWYzLmxlbmd0aDsgaSA8IF9sZW47IGkrKykgew0KICAgICAgICBfcmVmNCA9IF9yZWYzW2ldLCBjb25kaXRpb25zID0gX3JlZjRbMF0sIGJsb2NrID0gX3JlZjRbMV07DQogICAgICAgIF9yZWY1ID0gZmxhdHRlbihbY29uZGl0aW9uc10pOw0KICAgICAgICBmb3IgKF9pID0gMCwgX2xlbjIgPSBfcmVmNS5sZW5ndGg7IF9pIDwgX2xlbjI7IF9pKyspIHsNCiAgICAgICAgICBjb25kID0gX3JlZjVbX2ldOw0KICAgICAgICAgIGlmICghdGhpcy5zdWJqZWN0KSB7DQogICAgICAgICAgICBjb25kID0gY29uZC5pbnZlcnQoKTsNCiAgICAgICAgICB9DQogICAgICAgICAgY29kZSArPSBpZHQxICsgKCJjYXNlICIgKyAoY29uZC5jb21waWxlKG8sIExFVkVMX1BBUkVOKSkgKyAiOlxuIik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGJvZHkgPSBibG9jay5jb21waWxlKG8sIExFVkVMX1RPUCkpIHsNCiAgICAgICAgICBjb2RlICs9IGJvZHkgKyAnXG4nOw0KICAgICAgICB9DQogICAgICAgIGlmIChpID09PSB0aGlzLmNhc2VzLmxlbmd0aCAtIDEgJiYgIXRoaXMub3RoZXJ3aXNlKSB7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICAgICAgZXhwciA9IHRoaXMubGFzdE5vbkNvbW1lbnQoYmxvY2suZXhwcmVzc2lvbnMpOw0KICAgICAgICBpZiAoZXhwciBpbnN0YW5jZW9mIFJldHVybiB8fCAoZXhwciBpbnN0YW5jZW9mIExpdGVyYWwgJiYgZXhwci5qdW1wcygpICYmIGV4cHIudmFsdWUgIT09ICdkZWJ1Z2dlcicpKSB7DQogICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgY29kZSArPSBpZHQyICsgJ2JyZWFrO1xuJzsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLm90aGVyd2lzZSAmJiB0aGlzLm90aGVyd2lzZS5leHByZXNzaW9ucy5sZW5ndGgpIHsNCiAgICAgICAgY29kZSArPSBpZHQxICsgKCJkZWZhdWx0OlxuIiArICh0aGlzLm90aGVyd2lzZS5jb21waWxlKG8sIExFVkVMX1RPUCkpICsgIlxuIik7DQogICAgICB9DQogICAgICByZXR1cm4gY29kZSArIHRoaXMudGFiICsgJ30nOw0KICAgIH07DQogICAgcmV0dXJuIFN3aXRjaDsNCiAgfSkoKTsNCiAgZXhwb3J0cy5JZiA9IElmID0gKGZ1bmN0aW9uKCkgew0KICAgIF9fZXh0ZW5kcyhJZiwgQmFzZSk7DQogICAgZnVuY3Rpb24gSWYoY29uZGl0aW9uLCBib2R5LCBvcHRpb25zKSB7DQogICAgICB0aGlzLmJvZHkgPSBib2R5Ow0KICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgew0KICAgICAgICBvcHRpb25zID0ge307DQogICAgICB9DQogICAgICB0aGlzLmNvbmRpdGlvbiA9IG9wdGlvbnMudHlwZSA9PT0gJ3VubGVzcycgPyBjb25kaXRpb24uaW52ZXJ0KCkgOiBjb25kaXRpb247DQogICAgICB0aGlzLmVsc2VCb2R5ID0gbnVsbDsNCiAgICAgIHRoaXMuaXNDaGFpbiA9IGZhbHNlOw0KICAgICAgdGhpcy5zb2FrID0gb3B0aW9ucy5zb2FrOw0KICAgIH0NCiAgICBJZi5wcm90b3R5cGUuY2hpbGRyZW4gPSBbJ2NvbmRpdGlvbicsICdib2R5JywgJ2Vsc2VCb2R5J107DQogICAgSWYucHJvdG90eXBlLmJvZHlOb2RlID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgX3JlZjI7DQogICAgICByZXR1cm4gKF9yZWYyID0gdGhpcy5ib2R5KSAhPSBudWxsID8gX3JlZjIudW53cmFwKCkgOiB2b2lkIDA7DQogICAgfTsNCiAgICBJZi5wcm90b3R5cGUuZWxzZUJvZHlOb2RlID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgX3JlZjI7DQogICAgICByZXR1cm4gKF9yZWYyID0gdGhpcy5lbHNlQm9keSkgIT0gbnVsbCA/IF9yZWYyLnVud3JhcCgpIDogdm9pZCAwOw0KICAgIH07DQogICAgSWYucHJvdG90eXBlLmFkZEVsc2UgPSBmdW5jdGlvbihlbHNlQm9keSkgew0KICAgICAgaWYgKHRoaXMuaXNDaGFpbikgew0KICAgICAgICB0aGlzLmVsc2VCb2R5Tm9kZSgpLmFkZEVsc2UoZWxzZUJvZHkpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5pc0NoYWluID0gZWxzZUJvZHkgaW5zdGFuY2VvZiBJZjsNCiAgICAgICAgdGhpcy5lbHNlQm9keSA9IHRoaXMuZW5zdXJlQmxvY2soZWxzZUJvZHkpOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRoaXM7DQogICAgfTsNCiAgICBJZi5wcm90b3R5cGUuaXNTdGF0ZW1lbnQgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgX3JlZjI7DQogICAgICByZXR1cm4gKG8gIT0gbnVsbCA/IG8ubGV2ZWwgOiB2b2lkIDApID09PSBMRVZFTF9UT1AgfHwgdGhpcy5ib2R5Tm9kZSgpLmlzU3RhdGVtZW50KG8pIHx8ICgoX3JlZjIgPSB0aGlzLmVsc2VCb2R5Tm9kZSgpKSAhPSBudWxsID8gX3JlZjIuaXNTdGF0ZW1lbnQobykgOiB2b2lkIDApOw0KICAgIH07DQogICAgSWYucHJvdG90eXBlLmp1bXBzID0gZnVuY3Rpb24obykgew0KICAgICAgdmFyIF9yZWYyOw0KICAgICAgcmV0dXJuIHRoaXMuYm9keS5qdW1wcyhvKSB8fCAoKF9yZWYyID0gdGhpcy5lbHNlQm9keSkgIT0gbnVsbCA/IF9yZWYyLmp1bXBzKG8pIDogdm9pZCAwKTsNCiAgICB9Ow0KICAgIElmLnByb3RvdHlwZS5jb21waWxlTm9kZSA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIGlmICh0aGlzLmlzU3RhdGVtZW50KG8pKSB7DQogICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVTdGF0ZW1lbnQobyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlRXhwcmVzc2lvbihvKTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIElmLnByb3RvdHlwZS5tYWtlUmV0dXJuID0gZnVuY3Rpb24oKSB7DQogICAgICB0aGlzLmJvZHkgJiYgKHRoaXMuYm9keSA9IG5ldyBCbG9jayhbdGhpcy5ib2R5Lm1ha2VSZXR1cm4oKV0pKTsNCiAgICAgIHRoaXMuZWxzZUJvZHkgJiYgKHRoaXMuZWxzZUJvZHkgPSBuZXcgQmxvY2soW3RoaXMuZWxzZUJvZHkubWFrZVJldHVybigpXSkpOw0KICAgICAgcmV0dXJuIHRoaXM7DQogICAgfTsNCiAgICBJZi5wcm90b3R5cGUuZW5zdXJlQmxvY2sgPSBmdW5jdGlvbihub2RlKSB7DQogICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEJsb2NrKSB7DQogICAgICAgIHJldHVybiBub2RlOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuIG5ldyBCbG9jayhbbm9kZV0pOw0KICAgICAgfQ0KICAgIH07DQogICAgSWYucHJvdG90eXBlLmNvbXBpbGVTdGF0ZW1lbnQgPSBmdW5jdGlvbihvKSB7DQogICAgICB2YXIgYm9keSwgY2hpbGQsIGNvbmQsIGV4ZXEsIGlmUGFydDsNCiAgICAgIGNoaWxkID0gZGVsKG8sICdjaGFpbkNoaWxkJyk7DQogICAgICBleGVxID0gZGVsKG8sICdpc0V4aXN0ZW50aWFsRXF1YWxzJyk7DQogICAgICBpZiAoZXhlcSkgew0KICAgICAgICByZXR1cm4gbmV3IElmKHRoaXMuY29uZGl0aW9uLmludmVydCgpLCB0aGlzLmVsc2VCb2R5Tm9kZSgpLCB7DQogICAgICAgICAgdHlwZTogJ2lmJw0KICAgICAgICB9KS5jb21waWxlKG8pOw0KICAgICAgfQ0KICAgICAgY29uZCA9IHRoaXMuY29uZGl0aW9uLmNvbXBpbGUobywgTEVWRUxfUEFSRU4pOw0KICAgICAgby5pbmRlbnQgKz0gVEFCOw0KICAgICAgYm9keSA9IHRoaXMuZW5zdXJlQmxvY2sodGhpcy5ib2R5KS5jb21waWxlKG8pOw0KICAgICAgaWYgKGJvZHkpIHsNCiAgICAgICAgYm9keSA9ICJcbiIgKyBib2R5ICsgIlxuIiArIHRoaXMudGFiOw0KICAgICAgfQ0KICAgICAgaWZQYXJ0ID0gImlmICgiICsgY29uZCArICIpIHsiICsgYm9keSArICJ9IjsNCiAgICAgIGlmICghY2hpbGQpIHsNCiAgICAgICAgaWZQYXJ0ID0gdGhpcy50YWIgKyBpZlBhcnQ7DQogICAgICB9DQogICAgICBpZiAoIXRoaXMuZWxzZUJvZHkpIHsNCiAgICAgICAgcmV0dXJuIGlmUGFydDsNCiAgICAgIH0NCiAgICAgIHJldHVybiBpZlBhcnQgKyAnIGVsc2UgJyArICh0aGlzLmlzQ2hhaW4gPyAoby5pbmRlbnQgPSB0aGlzLnRhYiwgby5jaGFpbkNoaWxkID0gdHJ1ZSwgdGhpcy5lbHNlQm9keS51bndyYXAoKS5jb21waWxlKG8sIExFVkVMX1RPUCkpIDogIntcbiIgKyAodGhpcy5lbHNlQm9keS5jb21waWxlKG8sIExFVkVMX1RPUCkpICsgIlxuIiArIHRoaXMudGFiICsgIn0iKTsNCiAgICB9Ow0KICAgIElmLnByb3RvdHlwZS5jb21waWxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG8pIHsNCiAgICAgIHZhciBhbHQsIGJvZHksIGNvZGUsIGNvbmQ7DQogICAgICBjb25kID0gdGhpcy5jb25kaXRpb24uY29tcGlsZShvLCBMRVZFTF9DT05EKTsNCiAgICAgIGJvZHkgPSB0aGlzLmJvZHlOb2RlKCkuY29tcGlsZShvLCBMRVZFTF9MSVNUKTsNCiAgICAgIGFsdCA9IHRoaXMuZWxzZUJvZHlOb2RlKCkgPyB0aGlzLmVsc2VCb2R5Tm9kZSgpLmNvbXBpbGUobywgTEVWRUxfTElTVCkgOiAndm9pZCAwJzsNCiAgICAgIGNvZGUgPSAiIiArIGNvbmQgKyAiID8gIiArIGJvZHkgKyAiIDogIiArIGFsdDsNCiAgICAgIGlmIChvLmxldmVsID49IExFVkVMX0NPTkQpIHsNCiAgICAgICAgcmV0dXJuICIoIiArIGNvZGUgKyAiKSI7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gY29kZTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIElmLnByb3RvdHlwZS51bmZvbGRTb2FrID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gdGhpcy5zb2FrICYmIHRoaXM7DQogICAgfTsNCiAgICByZXR1cm4gSWY7DQogIH0pKCk7DQogIFB1c2ggPSB7DQogICAgd3JhcDogZnVuY3Rpb24obmFtZSwgZXhwcykgew0KICAgICAgaWYgKGV4cHMuaXNFbXB0eSgpIHx8IGxhc3QoZXhwcy5leHByZXNzaW9ucykuanVtcHMoKSkgew0KICAgICAgICByZXR1cm4gZXhwczsNCiAgICAgIH0NCiAgICAgIHJldHVybiBleHBzLnB1c2gobmV3IENhbGwobmV3IFZhbHVlKG5ldyBMaXRlcmFsKG5hbWUpLCBbbmV3IEFjY2VzcyhuZXcgTGl0ZXJhbCgncHVzaCcpKV0pLCBbZXhwcy5wb3AoKV0pKTsNCiAgICB9DQogIH07DQogIENsb3N1cmUgPSB7DQogICAgd3JhcDogZnVuY3Rpb24oZXhwcmVzc2lvbnMsIHN0YXRlbWVudCwgbm9SZXR1cm4pIHsNCiAgICAgIHZhciBhcmdzLCBjYWxsLCBmdW5jLCBtZW50aW9uc0FyZ3MsIG1ldGg7DQogICAgICBpZiAoZXhwcmVzc2lvbnMuanVtcHMoKSkgew0KICAgICAgICByZXR1cm4gZXhwcmVzc2lvbnM7DQogICAgICB9DQogICAgICBmdW5jID0gbmV3IENvZGUoW10sIEJsb2NrLndyYXAoW2V4cHJlc3Npb25zXSkpOw0KICAgICAgYXJncyA9IFtdOw0KICAgICAgaWYgKChtZW50aW9uc0FyZ3MgPSBleHByZXNzaW9ucy5jb250YWlucyh0aGlzLmxpdGVyYWxBcmdzKSkgfHwgZXhwcmVzc2lvbnMuY29udGFpbnModGhpcy5saXRlcmFsVGhpcykpIHsNCiAgICAgICAgbWV0aCA9IG5ldyBMaXRlcmFsKG1lbnRpb25zQXJncyA/ICdhcHBseScgOiAnY2FsbCcpOw0KICAgICAgICBhcmdzID0gW25ldyBMaXRlcmFsKCd0aGlzJyldOw0KICAgICAgICBpZiAobWVudGlvbnNBcmdzKSB7DQogICAgICAgICAgYXJncy5wdXNoKG5ldyBMaXRlcmFsKCdhcmd1bWVudHMnKSk7DQogICAgICAgIH0NCiAgICAgICAgZnVuYyA9IG5ldyBWYWx1ZShmdW5jLCBbbmV3IEFjY2VzcyhtZXRoKV0pOw0KICAgICAgfQ0KICAgICAgZnVuYy5ub1JldHVybiA9IG5vUmV0dXJuOw0KICAgICAgY2FsbCA9IG5ldyBDYWxsKGZ1bmMsIGFyZ3MpOw0KICAgICAgaWYgKHN0YXRlbWVudCkgew0KICAgICAgICByZXR1cm4gQmxvY2sud3JhcChbY2FsbF0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuIGNhbGw7DQogICAgICB9DQogICAgfSwNCiAgICBsaXRlcmFsQXJnczogZnVuY3Rpb24obm9kZSkgew0KICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBMaXRlcmFsICYmIG5vZGUudmFsdWUgPT09ICdhcmd1bWVudHMnICYmICFub2RlLmFzS2V5Ow0KICAgIH0sDQogICAgbGl0ZXJhbFRoaXM6IGZ1bmN0aW9uKG5vZGUpIHsNCiAgICAgIHJldHVybiAobm9kZSBpbnN0YW5jZW9mIExpdGVyYWwgJiYgbm9kZS52YWx1ZSA9PT0gJ3RoaXMnICYmICFub2RlLmFzS2V5KSB8fCAobm9kZSBpbnN0YW5jZW9mIENvZGUgJiYgbm9kZS5ib3VuZCk7DQogICAgfQ0KICB9Ow0KICB1bmZvbGRTb2FrID0gZnVuY3Rpb24obywgcGFyZW50LCBuYW1lKSB7DQogICAgdmFyIGlmbjsNCiAgICBpZiAoIShpZm4gPSBwYXJlbnRbbmFtZV0udW5mb2xkU29hayhvKSkpIHsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgcGFyZW50W25hbWVdID0gaWZuLmJvZHk7DQogICAgaWZuLmJvZHkgPSBuZXcgVmFsdWUocGFyZW50KTsNCiAgICByZXR1cm4gaWZuOw0KICB9Ow0KICBVVElMSVRJRVMgPSB7DQogICAgImV4dGVuZHMiOiAnZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkge1xuICBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChfX2hhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfVxuICBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH1cbiAgY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcjtcbiAgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuIGNoaWxkO1xufScsDQogICAgYmluZDogJ2Z1bmN0aW9uKGZuLCBtZSl7IHJldHVybiBmdW5jdGlvbigpeyByZXR1cm4gZm4uYXBwbHkobWUsIGFyZ3VtZW50cyk7IH07IH0nLA0KICAgIGluZGV4T2Y6ICdBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB8fCBmdW5jdGlvbihpdGVtKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufScsDQogICAgaGFzUHJvcDogJ09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHknLA0KICAgIHNsaWNlOiAnQXJyYXkucHJvdG90eXBlLnNsaWNlJw0KICB9Ow0KICBMRVZFTF9UT1AgPSAxOw0KICBMRVZFTF9QQVJFTiA9IDI7DQogIExFVkVMX0xJU1QgPSAzOw0KICBMRVZFTF9DT05EID0gNDsNCiAgTEVWRUxfT1AgPSA1Ow0KICBMRVZFTF9BQ0NFU1MgPSA2Ow0KICBUQUIgPSAnICAnOw0KICBJREVOVElGSUVSID0gL15bJEEtWmEtel9ceDdmLVx1ZmZmZl1bJFx3XHg3Zi1cdWZmZmZdKiQvOw0KICBTSU1QTEVOVU0gPSAvXlsrLV0/XGQrJC87DQogIE1FVEhPRF9ERUYgPSAvXig/OihbJEEtWmEtel9dWyRcd1x4N2YtXHVmZmZmXSopXC5wcm90b3R5cGVcLik/KFskQS1aYS16X11bJFx3XHg3Zi1cdWZmZmZdKikkLzsNCiAgSVNfU1RSSU5HID0gL15bJyJdLzsNCiAgdXRpbGl0eSA9IGZ1bmN0aW9uKG5hbWUpIHsNCiAgICB2YXIgcmVmOw0KICAgIHJlZiA9ICJfXyIgKyBuYW1lOw0KICAgIFNjb3BlLnJvb3QuYXNzaWduKHJlZiwgVVRJTElUSUVTW25hbWVdKTsNCiAgICByZXR1cm4gcmVmOw0KICB9Ow0KICBtdWx0aWRlbnQgPSBmdW5jdGlvbihjb2RlLCB0YWIpIHsNCiAgICByZXR1cm4gY29kZS5yZXBsYWNlKC9cbi9nLCAnJCYnICsgdGFiKTsNCiAgfTsNCn0pOw0KLyoqDQogKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmVyZW15IEFzaGtlbmFzDQogKg0KICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24NCiAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uDQogKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0DQogKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwNCiAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCiAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nDQogKiBjb25kaXRpb25zOg0KICogDQogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQogKiANCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTDQogKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORA0KICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQNCiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLA0KICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HDQogKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SDQogKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQogKi8NCg0KZGVmaW5lKCdhY2UvbW9kZS9jb2ZmZWUvc2NvcGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9tb2RlL2NvZmZlZS9oZWxwZXJzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KICB2YXIgU2NvcGUsIGV4dGVuZCwgbGFzdCwgX3JlZjsNCiAgX3JlZiA9IHJlcXVpcmUoJy4vaGVscGVycycpLCBleHRlbmQgPSBfcmVmLmV4dGVuZCwgbGFzdCA9IF9yZWYubGFzdDsNCiAgZXhwb3J0cy5TY29wZSA9IFNjb3BlID0gKGZ1bmN0aW9uKCkgew0KICAgIFNjb3BlLnJvb3QgPSBudWxsOw0KICAgIGZ1bmN0aW9uIFNjb3BlKHBhcmVudCwgZXhwcmVzc2lvbnMsIG1ldGhvZCkgew0KICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7DQogICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7DQogICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDsNCiAgICAgIHRoaXMudmFyaWFibGVzID0gWw0KICAgICAgICB7DQogICAgICAgICAgbmFtZTogJ2FyZ3VtZW50cycsDQogICAgICAgICAgdHlwZTogJ2FyZ3VtZW50cycNCiAgICAgICAgfQ0KICAgICAgXTsNCiAgICAgIHRoaXMucG9zaXRpb25zID0ge307DQogICAgICBpZiAoIXRoaXMucGFyZW50KSB7DQogICAgICAgIFNjb3BlLnJvb3QgPSB0aGlzOw0KICAgICAgfQ0KICAgIH0NCiAgICBTY29wZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24obmFtZSwgdHlwZSwgaW1tZWRpYXRlKSB7DQogICAgICB2YXIgcG9zOw0KICAgICAgaWYgKHRoaXMuc2hhcmVkICYmICFpbW1lZGlhdGUpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmFkZChuYW1lLCB0eXBlLCBpbW1lZGlhdGUpOw0KICAgICAgfQ0KICAgICAgaWYgKHR5cGVvZiAocG9zID0gdGhpcy5wb3NpdGlvbnNbbmFtZV0pID09PSAnbnVtYmVyJykgew0KICAgICAgICByZXR1cm4gdGhpcy52YXJpYWJsZXNbcG9zXS50eXBlID0gdHlwZTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uc1tuYW1lXSA9IHRoaXMudmFyaWFibGVzLnB1c2goew0KICAgICAgICAgIG5hbWU6IG5hbWUsDQogICAgICAgICAgdHlwZTogdHlwZQ0KICAgICAgICB9KSAtIDE7DQogICAgICB9DQogICAgfTsNCiAgICBTY29wZS5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbnMpIHsNCiAgICAgIGlmICh0aGlzLmNoZWNrKG5hbWUsIG9wdGlvbnMpKSB7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgfQ0KICAgICAgdGhpcy5hZGQobmFtZSwgJ3ZhcicpOw0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH07DQogICAgU2NvcGUucHJvdG90eXBlLnBhcmFtZXRlciA9IGZ1bmN0aW9uKG5hbWUpIHsNCiAgICAgIGlmICh0aGlzLnNoYXJlZCAmJiB0aGlzLnBhcmVudC5jaGVjayhuYW1lLCB0cnVlKSkgew0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgICByZXR1cm4gdGhpcy5hZGQobmFtZSwgJ3BhcmFtJyk7DQogICAgfTsNCiAgICBTY29wZS5wcm90b3R5cGUuY2hlY2sgPSBmdW5jdGlvbihuYW1lLCBpbW1lZGlhdGUpIHsNCiAgICAgIHZhciBmb3VuZCwgX3JlZjI7DQogICAgICBmb3VuZCA9ICEhdGhpcy50eXBlKG5hbWUpOw0KICAgICAgaWYgKGZvdW5kIHx8IGltbWVkaWF0ZSkgew0KICAgICAgICByZXR1cm4gZm91bmQ7DQogICAgICB9DQogICAgICByZXR1cm4gISEoKF9yZWYyID0gdGhpcy5wYXJlbnQpICE9IG51bGwgPyBfcmVmMi5jaGVjayhuYW1lKSA6IHZvaWQgMCk7DQogICAgfTsNCiAgICBTY29wZS5wcm90b3R5cGUudGVtcG9yYXJ5ID0gZnVuY3Rpb24obmFtZSwgaW5kZXgpIHsNCiAgICAgIGlmIChuYW1lLmxlbmd0aCA+IDEpIHsNCiAgICAgICAgcmV0dXJuICdfJyArIG5hbWUgKyAoaW5kZXggPiAxID8gaW5kZXggOiAnJyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gJ18nICsgKGluZGV4ICsgcGFyc2VJbnQobmFtZSwgMzYpKS50b1N0cmluZygzNikucmVwbGFjZSgvXGQvZywgJ2EnKTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIFNjb3BlLnByb3RvdHlwZS50eXBlID0gZnVuY3Rpb24obmFtZSkgew0KICAgICAgdmFyIHYsIF9pLCBfbGVuLCBfcmVmMjsNCiAgICAgIF9yZWYyID0gdGhpcy52YXJpYWJsZXM7DQogICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYyLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7DQogICAgICAgIHYgPSBfcmVmMltfaV07DQogICAgICAgIGlmICh2Lm5hbWUgPT09IG5hbWUpIHsNCiAgICAgICAgICByZXR1cm4gdi50eXBlOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gbnVsbDsNCiAgICB9Ow0KICAgIFNjb3BlLnByb3RvdHlwZS5mcmVlVmFyaWFibGUgPSBmdW5jdGlvbih0eXBlKSB7DQogICAgICB2YXIgaW5kZXgsIHRlbXA7DQogICAgICBpbmRleCA9IDA7DQogICAgICB3aGlsZSAodGhpcy5jaGVjaygodGVtcCA9IHRoaXMudGVtcG9yYXJ5KHR5cGUsIGluZGV4KSkpKSB7DQogICAgICAgIGluZGV4Kys7DQogICAgICB9DQogICAgICB0aGlzLmFkZCh0ZW1wLCAndmFyJywgdHJ1ZSk7DQogICAgICByZXR1cm4gdGVtcDsNCiAgICB9Ow0KICAgIFNjb3BlLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgew0KICAgICAgdGhpcy5hZGQobmFtZSwgew0KICAgICAgICB2YWx1ZTogdmFsdWUsDQogICAgICAgIGFzc2lnbmVkOiB0cnVlDQogICAgICB9KTsNCiAgICAgIHJldHVybiB0aGlzLmhhc0Fzc2lnbm1lbnRzID0gdHJ1ZTsNCiAgICB9Ow0KICAgIFNjb3BlLnByb3RvdHlwZS5oYXNEZWNsYXJhdGlvbnMgPSBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiAhIXRoaXMuZGVjbGFyZWRWYXJpYWJsZXMoKS5sZW5ndGg7DQogICAgfTsNCiAgICBTY29wZS5wcm90b3R5cGUuZGVjbGFyZWRWYXJpYWJsZXMgPSBmdW5jdGlvbigpIHsNCiAgICAgIHZhciByZWFsVmFycywgdGVtcFZhcnMsIHYsIF9pLCBfbGVuLCBfcmVmMjsNCiAgICAgIHJlYWxWYXJzID0gW107DQogICAgICB0ZW1wVmFycyA9IFtdOw0KICAgICAgX3JlZjIgPSB0aGlzLnZhcmlhYmxlczsNCiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjIubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsNCiAgICAgICAgdiA9IF9yZWYyW19pXTsNCiAgICAgICAgaWYgKHYudHlwZSA9PT0gJ3ZhcicpIHsNCiAgICAgICAgICAodi5uYW1lLmNoYXJBdCgwKSA9PT0gJ18nID8gdGVtcFZhcnMgOiByZWFsVmFycykucHVzaCh2Lm5hbWUpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gcmVhbFZhcnMuc29ydCgpLmNvbmNhdCh0ZW1wVmFycy5zb3J0KCkpOw0KICAgIH07DQogICAgU2NvcGUucHJvdG90eXBlLmFzc2lnbmVkVmFyaWFibGVzID0gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgdiwgX2ksIF9sZW4sIF9yZWYyLCBfcmVzdWx0czsNCiAgICAgIF9yZWYyID0gdGhpcy52YXJpYWJsZXM7DQogICAgICBfcmVzdWx0cyA9IFtdOw0KICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmMi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgew0KICAgICAgICB2ID0gX3JlZjJbX2ldOw0KICAgICAgICBpZiAodi50eXBlLmFzc2lnbmVkKSB7DQogICAgICAgICAgX3Jlc3VsdHMucHVzaCgiIiArIHYubmFtZSArICIgPSAiICsgdi50eXBlLnZhbHVlKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIF9yZXN1bHRzOw0KICAgIH07DQogICAgcmV0dXJuIFNjb3BlOw0KICB9KSgpOw0KfSk7DQo=]]></data>
	</file>
	<file>
	  <filename>/ace/src/worker-css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOw0KDQp2YXIgY29uc29sZSA9IHsNCiAgICBsb2c6IGZ1bmN0aW9uKG1zZykgew0KICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZTogImxvZyIsIGRhdGE6IG1zZ30pOw0KICAgIH0NCn07DQp2YXIgd2luZG93ID0gew0KICAgIGNvbnNvbGU6IGNvbnNvbGUNCn07DQoNCnZhciBub3JtYWxpemVNb2R1bGUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkgew0KICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMNCiAgICBpZiAobW9kdWxlTmFtZS5pbmRleE9mKCIhIikgIT09IC0xKSB7DQogICAgICAgIHZhciBjaHVua3MgPSBtb2R1bGVOYW1lLnNwbGl0KCIhIik7DQogICAgICAgIHJldHVybiBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1swXSkgKyAiISIgKyBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1sxXSk7DQogICAgfQ0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcw0KICAgIGlmIChtb2R1bGVOYW1lLmNoYXJBdCgwKSA9PSAiLiIpIHsNCiAgICAgICAgdmFyIGJhc2UgPSBwYXJlbnRJZC5zcGxpdCgiLyIpLnNsaWNlKDAsIC0xKS5qb2luKCIvIik7DQogICAgICAgIHZhciBtb2R1bGVOYW1lID0gYmFzZSArICIvIiArIG1vZHVsZU5hbWU7DQogICAgICAgIA0KICAgICAgICB3aGlsZShtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgew0KICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gbW9kdWxlTmFtZTsNCiAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBtb2R1bGVOYW1lOw0KfTsNCg0KdmFyIHJlcXVpcmUgPSBmdW5jdGlvbihwYXJlbnRJZCwgaWQpIHsNCiAgICB2YXIgaWQgPSBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGlkKTsNCiAgICANCiAgICB2YXIgbW9kdWxlID0gcmVxdWlyZS5tb2R1bGVzW2lkXTsNCiAgICBpZiAobW9kdWxlKSB7DQogICAgICAgIGlmICghbW9kdWxlLmluaXRpYWxpemVkKSB7DQogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsNCiAgICAgICAgICAgIG1vZHVsZS5pbml0aWFsaXplZCA9IHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOw0KICAgIH0NCiAgICANCiAgICB2YXIgY2h1bmtzID0gaWQuc3BsaXQoIi8iKTsNCiAgICBjaHVua3NbMF0gPSByZXF1aXJlLnRsbnNbY2h1bmtzWzBdXSB8fCBjaHVua3NbMF07DQogICAgdmFyIHBhdGggPSBjaHVua3Muam9pbigiLyIpICsgIi5qcyI7DQogICAgDQogICAgcmVxdWlyZS5pZCA9IGlkOw0KICAgIGltcG9ydFNjcmlwdHMocGF0aCk7DQogICAgcmV0dXJuIHJlcXVpcmUocGFyZW50SWQsIGlkKTsgICAgDQp9Ow0KDQpyZXF1aXJlLm1vZHVsZXMgPSB7fTsNCnJlcXVpcmUudGxucyA9IHt9Ow0KDQp2YXIgZGVmaW5lID0gZnVuY3Rpb24oaWQsIGRlcHMsIGZhY3RvcnkpIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7DQogICAgICAgIGZhY3RvcnkgPSBkZXBzOw0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICAgIGZhY3RvcnkgPSBpZDsNCiAgICAgICAgaWQgPSByZXF1aXJlLmlkOw0KICAgIH0NCg0KICAgIGlmIChpZC5pbmRleE9mKCJ0ZXh0ISIpID09PSAwKSANCiAgICAgICAgcmV0dXJuOw0KICAgIA0KICAgIHZhciByZXEgPSBmdW5jdGlvbihkZXBzLCBmYWN0b3J5KSB7DQogICAgICAgIHJldHVybiByZXF1aXJlKGlkLCBkZXBzLCBmYWN0b3J5KTsNCiAgICB9Ow0KDQogICAgcmVxdWlyZS5tb2R1bGVzW2lkXSA9IHsNCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgbW9kdWxlID0gew0KICAgICAgICAgICAgICAgIGV4cG9ydHM6IHt9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdmFyIHJldHVybkV4cG9ydHMgPSBmYWN0b3J5KHJlcSwgbW9kdWxlLmV4cG9ydHMsIG1vZHVsZSk7DQogICAgICAgICAgICBpZiAocmV0dXJuRXhwb3J0cykNCiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJldHVybkV4cG9ydHM7DQogICAgICAgICAgICByZXR1cm4gbW9kdWxlOw0KICAgICAgICB9DQogICAgfTsNCn07DQoNCmZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsNCiAgICByZXF1aXJlLnRsbnMgPSB0b3BMZXZlbE5hbWVzcGFjZXM7DQp9DQoNCmZ1bmN0aW9uIGluaXRTZW5kZXIoKSB7DQoNCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShudWxsLCAiYWNlL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOw0KICAgIHZhciBvb3AgPSByZXF1aXJlKG51bGwsICJhY2UvbGliL29vcCIpOw0KICAgIA0KICAgIHZhciBTZW5kZXIgPSBmdW5jdGlvbigpIHt9Ow0KICAgIA0KICAgIChmdW5jdGlvbigpIHsNCiAgICAgICAgDQogICAgICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGZ1bmN0aW9uKGRhdGEsIGNhbGxiYWNrSWQpIHsNCiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsDQogICAgICAgICAgICAgICAgaWQ6IGNhbGxiYWNrSWQsDQogICAgICAgICAgICAgICAgZGF0YTogZGF0YQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH07DQogICAgDQogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsNCiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAiZXZlbnQiLA0KICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsDQogICAgICAgICAgICAgICAgZGF0YTogZGF0YQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH07DQogICAgICAgIA0KICAgIH0pLmNhbGwoU2VuZGVyLnByb3RvdHlwZSk7DQogICAgDQogICAgcmV0dXJuIG5ldyBTZW5kZXIoKTsNCn0NCg0KdmFyIG1haW47DQp2YXIgc2VuZGVyOw0KDQpvbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7DQogICAgdmFyIG1zZyA9IGUuZGF0YTsNCiAgICBpZiAobXNnLmNvbW1hbmQpIHsNCiAgICAgICAgbWFpblttc2cuY29tbWFuZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpOw0KICAgIH0NCiAgICBlbHNlIGlmIChtc2cuaW5pdCkgeyAgICAgICAgDQogICAgICAgIGluaXRCYXNlVXJscyhtc2cudGxucyk7DQogICAgICAgIHJlcXVpcmUobnVsbCwgImFjZS9saWIvZml4b2xkYnJvd3NlcnMiKTsNCiAgICAgICAgc2VuZGVyID0gaW5pdFNlbmRlcigpOw0KICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG51bGwsIG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOw0KICAgICAgICBtYWluID0gbmV3IGNsYXp6KHNlbmRlcik7DQogICAgfSANCiAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgc2VuZGVyKSB7DQogICAgICAgIHNlbmRlci5fZW1pdChtc2cuZXZlbnQsIG1zZy5kYXRhKTsNCiAgICB9DQp9Ow0KLy8gdmltOnNldCB0cz00IHN0cz00IHN3PTQgc3Q6DQovLyAtLSBrcmlza293YWwgS3JpcyBLb3dhbCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNSVQgTGljZW5zZQ0KLy8gLS0gdGxyb2JpbnNvbiBUb20gUm9iaW5zb24gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTUlUIExpY2Vuc2UgKE5hcndoYWwgUHJvamVjdCkNCi8vIC0tIGRhbnRtYW4gRGFuaWVsIEZyaWVzZW4gQ29weXJpZ2h0KEMpIDIwMTAgWFhYIE5vIExpY2Vuc2UgU3BlY2lmaWVkDQovLyAtLSBmc2NoYWVmZXIgRmxvcmlhbiBTY2jDpGZlciBDb3B5cmlnaHQgKEMpIDIwMTAgTUlUIExpY2Vuc2UNCi8vIC0tIElyYWtsaSBHb3phbGlzaHZpbGkgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQoNCi8qIQ0KICAgIENvcHlyaWdodCAoYykgMjAwOSwgMjgwIE5vcnRoIEluYy4gaHR0cDovLzI4MG5vcnRoLmNvbS8NCiAgICBNSVQgTGljZW5zZS4gaHR0cDovL2dpdGh1Yi5jb20vMjgwbm9ydGgvbmFyd2hhbC9ibG9iL21hc3Rlci9SRUFETUUubWQNCiovDQoNCmRlZmluZSgnYWNlL2xpYi9maXhvbGRicm93c2VycycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9yZWdleHAnLCAnYWNlL2xpYi9lczUtc2hpbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KcmVxdWlyZSgiLi9yZWdleHAiKTsNCnJlcXVpcmUoIi4vZXM1LXNoaW0iKTsNCg0KfSk7LyoqDQogKiAgQmFzZWQgb24gY29kZSBmcm9tOg0KICoNCiAqIFhSZWdFeHAgMS41LjANCiAqIChjKSAyMDA3LTIwMTAgU3RldmVuIExldml0aGFuDQogKiBNSVQgTGljZW5zZQ0KICogPGh0dHA6Ly94cmVnZXhwLmNvbT4NCiAqIFByb3ZpZGVzIGFuIGF1Z21lbnRlZCwgZXh0ZW5zaWJsZSwgY3Jvc3MtYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiByZWd1bGFyIGV4cHJlc3Npb25zLA0KICogaW5jbHVkaW5nIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc3ludGF4LCBmbGFncywgYW5kIG1ldGhvZHMNCiAqLw0KIA0KZGVmaW5lKCdhY2UvbGliL3JlZ2V4cCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vICBQcml2YXRlIHZhcmlhYmxlcw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICB2YXIgcmVhbCA9IHsNCiAgICAgICAgICAgIGV4ZWM6IFJlZ0V4cC5wcm90b3R5cGUuZXhlYywNCiAgICAgICAgICAgIHRlc3Q6IFJlZ0V4cC5wcm90b3R5cGUudGVzdCwNCiAgICAgICAgICAgIG1hdGNoOiBTdHJpbmcucHJvdG90eXBlLm1hdGNoLA0KICAgICAgICAgICAgcmVwbGFjZTogU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLA0KICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXQNCiAgICAgICAgfSwNCiAgICAgICAgY29tcGxpYW50RXhlY05wY2cgPSByZWFsLmV4ZWMuY2FsbCgvKCk/Py8sICIiKVsxXSA9PT0gdW5kZWZpbmVkLCAvLyBjaGVjayBgZXhlY2AgaGFuZGxpbmcgb2Ygbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzDQogICAgICAgIGNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB4ID0gL14vZzsNCiAgICAgICAgICAgIHJlYWwudGVzdC5jYWxsKHgsICIiKTsNCiAgICAgICAgICAgIHJldHVybiAheC5sYXN0SW5kZXg7DQogICAgICAgIH0oKTsNCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gIE92ZXJyaWRlbiBuYXRpdmUgbWV0aG9kcw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAvLyBBZGRzIG5hbWVkIGNhcHR1cmUgc3VwcG9ydCAod2l0aCBiYWNrcmVmZXJlbmNlcyByZXR1cm5lZCBhcyBgcmVzdWx0Lm5hbWVgKSwgYW5kIGZpeGVzIHR3bw0KICAgIC8vIGNyb3NzLWJyb3dzZXIgaXNzdWVzIHBlciBFUzM6DQogICAgLy8gLSBDYXB0dXJlZCB2YWx1ZXMgZm9yIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYHVuZGVmaW5lZGAsDQogICAgLy8gICByYXRoZXIgdGhhbiB0aGUgZW1wdHkgc3RyaW5nLg0KICAgIC8vIC0gYGxhc3RJbmRleGAgc2hvdWxkIG5vdCBiZSBpbmNyZW1lbnRlZCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzLg0KICAgIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChzdHIpIHsNCiAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksDQogICAgICAgICAgICBuYW1lLCByMjsNCiAgICAgICAgaWYgKG1hdGNoKSB7DQogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYCBmb3INCiAgICAgICAgICAgIC8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3Vwcw0KICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAxICYmIGluZGV4T2YobWF0Y2gsICIiKSA+IC0xKSB7DQogICAgICAgICAgICAgICAgcjIgPSBSZWdFeHAodGhpcy5zb3VyY2UsIHJlYWwucmVwbGFjZS5jYWxsKGdldE5hdGl2ZUZsYWdzKHRoaXMpLCAiZyIsICIiKSk7DQogICAgICAgICAgICAgICAgLy8gVXNpbmcgYHN0ci5zbGljZShtYXRjaC5pbmRleClgIHJhdGhlciB0aGFuIGBtYXRjaFswXWAgaW4gY2FzZSBsb29rYWhlYWQgYWxsb3dlZA0KICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIGR1ZSB0byBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIG1hdGNoDQogICAgICAgICAgICAgICAgcmVhbC5yZXBsYWNlLmNhbGwoc3RyLnNsaWNlKG1hdGNoLmluZGV4KSwgcjIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIEF0dGFjaCBuYW1lZCBjYXB0dXJlIHByb3BlcnRpZXMNCiAgICAgICAgICAgIGlmICh0aGlzLl94cmVnZXhwICYmIHRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzKSB7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXNbaSAtIDFdOw0KICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbbmFtZV0gPSBtYXRjaFtpXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgdGhhdCBpbmNyZW1lbnQgYGxhc3RJbmRleGAgYWZ0ZXIgemVyby1sZW5ndGggbWF0Y2hlcw0KICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpDQogICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgtLTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gbWF0Y2g7DQogICAgfTsNCg0KICAgIC8vIERvbid0IG92ZXJyaWRlIGB0ZXN0YCBpZiBpdCB3b24ndCBjaGFuZ2UgYW55dGhpbmcNCiAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCkgew0KICAgICAgICAvLyBGaXggYnJvd3NlciBidWcgaW4gbmF0aXZlIG1ldGhvZA0KICAgICAgICBSZWdFeHAucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAoc3RyKSB7DQogICAgICAgICAgICAvLyBVc2UgdGhlIG5hdGl2ZSBgZXhlY2AgdG8gc2tpcCBzb21lIHByb2Nlc3Npbmcgb3ZlcmhlYWQsIGV2ZW4gdGhvdWdoIHRoZSBvdmVycmlkZW4NCiAgICAgICAgICAgIC8vIGBleGVjYCB3b3VsZCB0YWtlIGNhcmUgb2YgdGhlIGBsYXN0SW5kZXhgIGZpeA0KICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmNhbGwodGhpcywgc3RyKTsNCiAgICAgICAgICAgIC8vIEZpeCBicm93c2VycyB0aGF0IGluY3JlbWVudCBgbGFzdEluZGV4YCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzDQogICAgICAgICAgICBpZiAobWF0Y2ggJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpDQogICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgtLTsNCiAgICAgICAgICAgIHJldHVybiAhIW1hdGNoOw0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICBmdW5jdGlvbiBnZXROYXRpdmVGbGFncyAocmVnZXgpIHsNCiAgICAgICAgcmV0dXJuIChyZWdleC5nbG9iYWwgICAgID8gImciIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5pZ25vcmVDYXNlID8gImkiIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5tdWx0aWxpbmUgID8gIm0iIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5leHRlbmRlZCAgID8gIngiIDogIiIpICsgLy8gUHJvcG9zZWQgZm9yIEVTNDsgaW5jbHVkZWQgaW4gQVMzDQogICAgICAgICAgICAgICAocmVnZXguc3RpY2t5ICAgICA/ICJ5IiA6ICIiKTsNCiAgICB9Ow0KDQogICAgZnVuY3Rpb24gaW5kZXhPZiAoYXJyYXksIGl0ZW0sIGZyb20pIHsNCiAgICAgICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSAvLyBVc2UgdGhlIG5hdGl2ZSBhcnJheSBtZXRob2QgaWYgYXZhaWxhYmxlDQogICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtLCBmcm9tKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IGZyb20gfHwgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoYXJyYXlbaV0gPT09IGl0ZW0pDQogICAgICAgICAgICAgICAgcmV0dXJuIGk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIC0xOw0KICAgIH07DQoNCn0pOy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYg0KLy8gLS0ga3Jpc2tvd2FsIEtyaXMgS293YWwgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIHRscm9iaW5zb24gVG9tIFJvYmluc29uIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1JVCBMaWNlbnNlIChOYXJ3aGFsIFByb2plY3QpDQovLyAtLSBkYW50bWFuIERhbmllbCBGcmllc2VuIENvcHlyaWdodCAoQykgMjAxMCBYWFggVE9ETyBMaWNlbnNlIG9yIENMQQ0KLy8gLS0gZnNjaGFlZmVyIEZsb3JpYW4gU2Now6RmZXIgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQovLyAtLSBHb3phbGEgSXJha2xpIEdvemFsaXNodmlsaSBDb3B5cmlnaHQgKEMpIDIwMTAgTUlUIExpY2Vuc2UNCi8vIC0tIGtpdGNhbWJyaWRnZSBLaXQgQ2FtYnJpZGdlIENvcHlyaWdodCAoQykgMjAxMSBNSVQgTGljZW5zZQ0KLy8gLS0ga29zc25vY29ycCBTYXNoYSBLb3NzIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBicnlhbmZvcmJlcyBCcnlhbiBGb3JiZXMgWFhYIFRPRE8gTGljZW5zZSBvciBDTEENCi8vIC0tIGtpbGxkcmVhbSBRdWlsZHJlZW4gTW90dGEgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbmNlDQovLyAtLSBtaWNoYWVsZmljYXJyYSBNaWNoYWVsIEZpY2FycmEgQ29weXJpZ2h0IChDKSAyMDExIDMtY2xhdXNlIEJTRCBMaWNlbnNlDQovLyAtLSBzaGFya2JyYWluZ3V5IEdlcmFyZCBQYWFwdSBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIGJicXNyYyBCcmVuZGFuIE1vbGxveSAoQykgMjAxMSBDcmVhdGl2ZSBDb21tb25zIFplcm8gKHB1YmxpYyBkb21haW4pDQovLyAtLSBpd3lnIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBEb21lbmljRGVuaWNvbGEgRG9tZW5pYyBEZW5pY29sYSBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIHhhdmllcm0wMiBNb250aWxsZXQgWGF2aWVyIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBSYXlub3MgUmF5bm9zIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBzYW1zb25qcyBTYW1pIFNhbWh1cmkgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQovLyAtLSByd2xkcm4gUmljayBXYWxkcm9uIENvcHlyaWdodCAoQykgMjAxMSBNSVQgTGljZW5zZQ0KLy8gLS0gbGV4ZXIgQWxleGV5IFpha2hhcm92IFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQoNCi8qIQ0KICAgIENvcHlyaWdodCAoYykgMjAwOSwgMjgwIE5vcnRoIEluYy4gaHR0cDovLzI4MG5vcnRoLmNvbS8NCiAgICBNSVQgTGljZW5zZS4gaHR0cDovL2dpdGh1Yi5jb20vMjgwbm9ydGgvbmFyd2hhbC9ibG9iL21hc3Rlci9SRUFETUUubWQNCiovDQoNCmRlZmluZSgnYWNlL2xpYi9lczUtc2hpbScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoNCi8qKg0KICogQnJpbmdzIGFuIGVudmlyb25tZW50IGFzIGNsb3NlIHRvIEVDTUFTY3JpcHQgNSBjb21wbGlhbmNlDQogKiBhcyBpcyBwb3NzaWJsZSB3aXRoIHRoZSBmYWNpbGl0aWVzIG9mIGVyc3R3aGlsZSBlbmdpbmVzLg0KICoNCiAqIEFubm90YXRlZCBFUzU6IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8gKHNwZWNpZmljIGxpbmtzIGJlbG93KQ0KICogRVM1IFNwZWM6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FY21hLTI2Mi5wZGYNCiAqDQogKiBAbW9kdWxlDQogKi8NCg0KLyp3aGF0c3VwZG9jKi8NCg0KLy8NCi8vIEZ1bmN0aW9uDQovLyA9PT09PT09PQ0KLy8NCg0KLy8gRVMtNSAxNS4zLjQuNQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMy40LjUNCg0KaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkgew0KICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8vIC5sZW5ndGggaXMgMQ0KICAgICAgICAvLyAxLiBMZXQgVGFyZ2V0IGJlIHRoZSB0aGlzIHZhbHVlLg0KICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsNCiAgICAgICAgLy8gMi4gSWYgSXNDYWxsYWJsZShUYXJnZXQpIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uDQogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KICAgICAgICAvLyAzLiBMZXQgQSBiZSBhIG5ldyAocG9zc2libHkgZW1wdHkpIGludGVybmFsIGxpc3Qgb2YgYWxsIG9mIHRoZQ0KICAgICAgICAvLyAgIGFyZ3VtZW50IHZhbHVlcyBwcm92aWRlZCBhZnRlciB0aGlzQXJnIChhcmcxLCBhcmcyIGV0YyksIGluIG9yZGVyLg0KICAgICAgICAvLyBYWFggc2xpY2VkQXJncyB3aWxsIHN0YW5kIGluIGZvciAiQSIgaWYgdXNlZA0KICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsDQogICAgICAgIC8vIDQuIExldCBGIGJlIGEgbmV3IG5hdGl2ZSBFQ01BU2NyaXB0IG9iamVjdC4NCiAgICAgICAgLy8gMTEuIFNldCB0aGUgW1tQcm90b3R5cGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRoZSBzdGFuZGFyZA0KICAgICAgICAvLyAgIGJ1aWx0LWluIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QgYXMgc3BlY2lmaWVkIGluIDE1LjMuMy4xLg0KICAgICAgICAvLyAxMi4gU2V0IHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbg0KICAgICAgICAvLyAgIDE1LjMuNC41LjEuDQogICAgICAgIC8vIDEzLiBTZXQgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW4NCiAgICAgICAgLy8gICAxNS4zLjQuNS4yLg0KICAgICAgICAvLyAxNC4gU2V0IHRoZSBbW0hhc0luc3RhbmNlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW4NCiAgICAgICAgLy8gICAxNS4zLjQuNS4zLg0KICAgICAgICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7DQoNCiAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHsNCiAgICAgICAgICAgICAgICAvLyAxNS4zLjQuNS4yIFtbQ29uc3RydWN0XV0NCiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwNCiAgICAgICAgICAgICAgICAvLyBGIHRoYXQgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGJpbmQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYQ0KICAgICAgICAgICAgICAgIC8vIGxpc3Qgb2YgYXJndW1lbnRzIEV4dHJhQXJncywgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46DQogICAgICAgICAgICAgICAgLy8gMS4gTGV0IHRhcmdldCBiZSB0aGUgdmFsdWUgb2YgRidzIFtbVGFyZ2V0RnVuY3Rpb25dXQ0KICAgICAgICAgICAgICAgIC8vICAgaW50ZXJuYWwgcHJvcGVydHkuDQogICAgICAgICAgICAgICAgLy8gMi4gSWYgdGFyZ2V0IGhhcyBubyBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCwgYQ0KICAgICAgICAgICAgICAgIC8vICAgVHlwZUVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24uDQogICAgICAgICAgICAgICAgLy8gMy4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwNCiAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5Lg0KICAgICAgICAgICAgICAgIC8vIDQuIExldCBhcmdzIGJlIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlDQogICAgICAgICAgICAgICAgLy8gICBsaXN0IGJvdW5kQXJncyBpbiB0aGUgc2FtZSBvcmRlciBmb2xsb3dlZCBieSB0aGUgc2FtZQ0KICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4NCiAgICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIA0KICAgICAgICAgICAgICAgIC8vICAgbWV0aG9kIG9mIHRhcmdldCBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLg0KDQogICAgICAgICAgICAgICAgdmFyIEYgPSBmdW5jdGlvbigpe307DQogICAgICAgICAgICAgICAgRi5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOw0KICAgICAgICAgICAgICAgIHZhciBzZWxmID0gbmV3IEY7DQoNCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KA0KICAgICAgICAgICAgICAgICAgICBzZWxmLA0KICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7DQoNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgLy8gMTUuMy40LjUuMSBbW0NhbGxdXQ0KICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwgRiwNCiAgICAgICAgICAgICAgICAvLyB3aGljaCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhDQogICAgICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcNCiAgICAgICAgICAgICAgICAvLyBzdGVwcyBhcmUgdGFrZW46DQogICAgICAgICAgICAgICAgLy8gMS4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwNCiAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5Lg0KICAgICAgICAgICAgICAgIC8vIDIuIExldCBib3VuZFRoaXMgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kVGhpc11dIGludGVybmFsDQogICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4NCiAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dIGludGVybmFsDQogICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4NCiAgICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSANCiAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1lIA0KICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4NCiAgICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QgDQogICAgICAgICAgICAgICAgLy8gICBvZiB0YXJnZXQgcHJvdmlkaW5nIGJvdW5kVGhpcyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgDQogICAgICAgICAgICAgICAgLy8gICBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLg0KDQogICAgICAgICAgICAgICAgLy8gZXF1aXY6IHRhcmdldC5jYWxsKHRoaXMsIC4uLmJvdW5kQXJncywgLi4uYXJncykNCiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KA0KICAgICAgICAgICAgICAgICAgICB0aGF0LA0KICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH07DQogICAgICAgIC8vIFhYWCBib3VuZC5sZW5ndGggaXMgbmV2ZXIgd3JpdGFibGUsIHNvIGRvbid0IGV2ZW4gdHJ5DQogICAgICAgIC8vDQogICAgICAgIC8vIDE1LiBJZiB0aGUgW1tDbGFzc11dIGludGVybmFsIHByb3BlcnR5IG9mIFRhcmdldCBpcyAiRnVuY3Rpb24iLCB0aGVuDQogICAgICAgIC8vICAgICBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUgbGVuZ3RoIG9mIEEuDQogICAgICAgIC8vICAgICBiLiBTZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byBlaXRoZXIgMCBvciBMLCB3aGljaGV2ZXIgaXMgDQogICAgICAgIC8vICAgICAgIGxhcmdlci4NCiAgICAgICAgLy8gMTYuIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC4NCiAgICAgICAgLy8gMTcuIFNldCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIHRoZSB2YWx1ZXMNCiAgICAgICAgLy8gICBzcGVjaWZpZWQgaW4gMTUuMy41LjEuDQoNCiAgICAgICAgLy8gVE9ETw0KICAgICAgICAvLyAxOC4gU2V0IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRydWUuDQogICAgICAgIA0KICAgICAgICAvLyBUT0RPDQogICAgICAgIC8vIDE5LiBMZXQgdGhyb3dlciBiZSB0aGUgW1tUaHJvd1R5cGVFcnJvcl1dIGZ1bmN0aW9uIE9iamVjdCAoMTMuMi4zKS4NCiAgICAgICAgLy8gMjAuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgRiB3aXRoIA0KICAgICAgICAvLyAgIGFyZ3VtZW50cyAiY2FsbGVyIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLCBbW1NldF1dOg0KICAgICAgICAvLyAgIHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LCBhbmQgDQogICAgICAgIC8vICAgZmFsc2UuDQogICAgICAgIC8vIDIxLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aCANCiAgICAgICAgLy8gICBhcmd1bWVudHMgImFyZ3VtZW50cyIsIFByb3BlcnR5RGVzY3JpcHRvciB7W1tHZXRdXTogdGhyb3dlciwgDQogICAgICAgIC8vICAgW1tTZXRdXTogdGhyb3dlciwgW1tFbnVtZXJhYmxlXV06IGZhbHNlLCBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZX0sDQogICAgICAgIC8vICAgYW5kIGZhbHNlLg0KDQogICAgICAgIC8vIFRPRE8NCiAgICAgICAgLy8gTk9URSBGdW5jdGlvbiBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgZG8gbm90IA0KICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5IG9yIHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJhbWV0ZXJzXV0sIGFuZA0KICAgICAgICAvLyBbW1Njb3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy4NCiAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0ZSBwcm90b3R5cGUgaW4gcHVyZS1qcy4NCg0KICAgICAgICAvLyAyMi4gUmV0dXJuIEYuDQogICAgICAgIHJldHVybiBib3VuZDsNCiAgICB9Ow0KfQ0KDQovLyBTaG9ydGN1dCB0byBhbiBvZnRlbiBhY2Nlc3NlZCBwcm9wZXJ0aWVzLCBpbiBvcmRlciB0byBhdm9pZCBtdWx0aXBsZQ0KLy8gZGVyZWZlcmVuY2UgdGhhdCBjb3N0cyB1bml2ZXJzYWxseS4NCi8vIF9QbGVhc2Ugbm90ZTogU2hvcnRjdXRzIGFyZSBkZWZpbmVkIGFmdGVyIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgYXMgd2UNCi8vIHVzIGl0IGluIGRlZmluaW5nIHNob3J0Y3V0cy4NCnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7DQp2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsNCnZhciBwcm90b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7DQp2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNsaWNlOw0KdmFyIHRvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsNCnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsNCg0KLy8gSWYgSlMgZW5naW5lIHN1cHBvcnRzIGFjY2Vzc29ycyBjcmVhdGluZyBzaG9ydGN1dHMuDQp2YXIgZGVmaW5lR2V0dGVyOw0KdmFyIGRlZmluZVNldHRlcjsNCnZhciBsb29rdXBHZXR0ZXI7DQp2YXIgbG9va3VwU2V0dGVyOw0KdmFyIHN1cHBvcnRzQWNjZXNzb3JzOw0KaWYgKChzdXBwb3J0c0FjY2Vzc29ycyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmluZUdldHRlcl9fIikpKSB7DQogICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOw0KICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsNCiAgICBsb29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7DQogICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOw0KfQ0KDQovLw0KLy8gQXJyYXkNCi8vID09PT09DQovLw0KDQovLyBFUzUgMTUuNC4zLjINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuMy4yDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5DQppZiAoIUFycmF5LmlzQXJyYXkpIHsNCiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsNCiAgICAgICAgcmV0dXJuIHRvU3RyaW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsNCiAgICB9Ow0KfQ0KDQovLyBUaGUgSXNDYWxsYWJsZSgpIGNoZWNrIGluIHRoZSBBcnJheSBmdW5jdGlvbnMNCi8vIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBzdHJpY3QgY2hlY2sgb24gdGhlDQovLyBpbnRlcm5hbCBjbGFzcyBvZiB0aGUgb2JqZWN0IHRvIHRyYXAgY2FzZXMgd2hlcmUNCi8vIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3YXMgYWN0dWFsbHkgYSByZWd1bGFyDQovLyBleHByZXNzaW9uIGxpdGVyYWwsIHdoaWNoIGluIFY4IGFuZA0KLy8gSmF2YVNjcmlwdENvcmUgaXMgYSB0eXBlb2YgImZ1bmN0aW9uIi4gIE9ubHkgaW4NCi8vIFY4IGFyZSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbHMgcGVybWl0dGVkIGFzDQovLyByZWR1Y2UgcGFyYW1ldGVycywgc28gaXQgaXMgZGVzaXJhYmxlIGluIHRoZQ0KLy8gZ2VuZXJhbCBjYXNlIGZvciB0aGUgc2hpbSB0byBtYXRjaCB0aGUgbW9yZQ0KLy8gc3RyaWN0IGFuZCBjb21tb24gYmVoYXZpb3Igb2YgcmVqZWN0aW5nIHJlZ3VsYXINCi8vIGV4cHJlc3Npb25zLg0KDQovLyBFUzUgMTUuNC40LjE4DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTgNCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2FycmF5L2ZvckVhY2gNCmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsNCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSwNCiAgICAgICAgICAgIGkgPSAwLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7DQogICAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGNhbGwsIHBhc3NpbmcgYXJndW1lbnRzOg0KICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHByb3BlcnR5IHZhbHVlLCBwcm9wZXJ0eSBrZXksIHRoaXNBcmcgb2JqZWN0IGNvbnRleHQNCiAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpKys7DQogICAgICAgIH0NCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuNC40LjE5DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTkNCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvbWFwDQppZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsNCiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsDQogICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLA0KICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpDQogICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4yMA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIwDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L2ZpbHRlcg0KaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7DQogICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHJlc3VsdCA9IFtdLA0KICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpKQ0KICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNlbGZbaV0pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNg0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE2DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9ldmVyeQ0KaWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHsNCiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZikpDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS40LjQuMTcNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNw0KLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc29tZQ0KaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgew0KICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBzZWxmKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4yMQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIxDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVjZQ0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7DQogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIG5vIHZhbHVlIHRvIHJldHVybiBpZiBubyBpbml0aWFsIHZhbHVlIGFuZCBhbiBlbXB0eSBhcnJheQ0KICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KDQogICAgICAgIHZhciBpID0gMDsNCiAgICAgICAgdmFyIHJlc3VsdDsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgew0KICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytdOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJuDQogICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpDQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuNC40LjIyDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMjINCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvcmVkdWNlUmlnaHQNCmlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KSB7DQogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8pIHsNCiAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwNCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICAvLyBubyB2YWx1ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkNCiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKQ0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCg0KICAgICAgICB2YXIgcmVzdWx0LCBpID0gbGVuZ3RoIC0gMTsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgew0KICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJuDQogICAgICAgICAgICAgICAgaWYgKC0taSA8IDApDQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGRvIHsNCiAgICAgICAgICAgIGlmIChpIGluIHRoaXMpDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9IHdoaWxlIChpLS0pOw0KDQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE0DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pbmRleE9mDQppZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7DQogICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgaWYgKCFsZW5ndGgpDQogICAgICAgICAgICByZXR1cm4gLTE7DQoNCiAgICAgICAgdmFyIGkgPSAwOw0KICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpDQogICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7DQoNCiAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMNCiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsNCiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gaTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gLTE7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE1DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9sYXN0SW5kZXhPZg0KaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpIHsNCiAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgaWYgKCFsZW5ndGgpDQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKQ0KICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsNCiAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMNCiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsNCiAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkNCiAgICAgICAgICAgICAgICByZXR1cm4gaTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gLTE7DQogICAgfTsNCn0NCg0KLy8NCi8vIE9iamVjdA0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgMTUuMi4zLjINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4yDQppZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgew0KICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0vaXNzdWVzI2lzc3VlLzINCiAgICAvLyBodHRwOi8vZWpvaG4ub3JnL2Jsb2cvb2JqZWN0Z2V0cHJvdG90eXBlb2YvDQogICAgLy8gcmVjb21tZW5kZWQgYnkgZnNjaGFlZmVyIG9uIGdpdGh1Yg0KICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkgew0KICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoDQogICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IgPw0KICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSA6DQogICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdA0KICAgICAgICApOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMw0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjMNCmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgew0KICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhICIgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0OiAiOw0KICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgew0KICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsNCiAgICAgICAgLy8gSWYgb2JqZWN0IGRvZXMgbm90IG93bnMgcHJvcGVydHkgcmV0dXJuIHVuZGVmaW5lZCBpbW1lZGlhdGVseS4NCiAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKQ0KICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIsIHNldHRlcjsNCg0KICAgICAgICAvLyBJZiBvYmplY3QgaGFzIGEgcHJvcGVydHkgdGhlbiBpdCdzIGZvciBzdXJlIGJvdGggYGVudW1lcmFibGVgIGFuZA0KICAgICAgICAvLyBgY29uZmlndXJhYmxlYC4NCiAgICAgICAgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9Ow0KDQogICAgICAgIC8vIElmIEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvciBwcm9wZXJ0aWVzIHRoZW4gcHJvcGVydHkgbWF5IGJlIGENCiAgICAgICAgLy8gZ2V0dGVyIG9yIHNldHRlci4NCiAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7DQogICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBhIGdldHRlciBldmVuDQogICAgICAgICAgICAvLyBpZiBvYmplY3QgaGFzIG93biBub24gZ2V0dGVyIHByb3BlcnR5IGFsb25nIHdpdGggYSBzYW1lIG5hbWVkDQogICAgICAgICAgICAvLyBpbmhlcml0ZWQgZ2V0dGVyLiBUbyBhdm9pZCBtaXNiZWhhdmlvciB3ZSB0ZW1wb3JhcnkgcmVtb3ZlDQogICAgICAgICAgICAvLyBgX19wcm90b19fYCBzbyB0aGF0IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBnZXR0ZXIgb25seQ0KICAgICAgICAgICAgLy8gaWYgaXQncyBvd25lZCBieSBhbiBvYmplY3QuDQogICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsNCiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsNCg0KICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KTsNCiAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7DQoNCiAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSBnZXR0ZXIgYW5kIHNldHRlciB3ZSBjYW4gcHV0IHZhbHVlcyBiYWNrLg0KICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsNCg0KICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsNCiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjsNCiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsNCg0KICAgICAgICAgICAgICAgIC8vIElmIGl0IHdhcyBhY2Nlc3NvciBwcm9wZXJ0eSB3ZSdyZSBkb25lIGFuZCByZXR1cm4gaGVyZQ0KICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGFkZGluZyBgdmFsdWVgIHRvIHRoZSBkZXNjcmlwdG9yLg0KICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHdlIGtub3cgdGhhdCBvYmplY3QgaGFzIGFuIG93biBwcm9wZXJ0eSB0aGF0IGlzDQogICAgICAgIC8vIG5vdCBhbiBhY2Nlc3NvciBzbyB3ZSBzZXQgaXQgYXMgYSB2YWx1ZSBhbmQgcmV0dXJuIGRlc2NyaXB0b3IuDQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOw0KICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjQNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy40DQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7DQogICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgew0KICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjUNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy41DQppZiAoIU9iamVjdC5jcmVhdGUpIHsNCiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgew0KICAgICAgICB2YXIgb2JqZWN0Ow0KICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7DQogICAgICAgICAgICBvYmplY3QgPSB7ICJfX3Byb3RvX18iOiBudWxsIH07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSAhPSAib2JqZWN0IikNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7DQogICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9Ow0KICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7DQogICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOw0KICAgICAgICAgICAgLy8gSUUgaGFzIG5vIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgDQogICAgICAgICAgICAvLyBuZWl0aGVyIGBfX3Byb3RvX19gLCBidXQgdGhpcyBtYW51YWxseSBzZXR0aW5nIGBfX3Byb3RvX19gIHdpbGwNCiAgICAgICAgICAgIC8vIGd1YXJhbnRlZSB0aGF0IGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIHdpbGwgd29yayBhcyBleHBlY3RlZCB3aXRoDQogICAgICAgICAgICAvLyBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgYE9iamVjdC5jcmVhdGVgDQogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOw0KICAgICAgICB9DQogICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApDQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOw0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuNg0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjYNCg0KLy8gUGF0Y2ggZm9yIFdlYktpdCBhbmQgSUU4IHN0YW5kYXJkIG1vZGUNCi8vIERlc2lnbmVkIGJ5IGhheCA8aGF4LmdpdGh1Yi5jb20+DQovLyByZWxhdGVkIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGltL2lzc3VlcyNpc3N1ZS81DQovLyBJRTggUmVmZXJlbmNlOg0KLy8gICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDI4MjkwMC5hc3B4DQovLyAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2RkMjI5OTE2LmFzcHgNCi8vIFdlYktpdCBCdWdzOg0KLy8gICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQyMw0KDQpmdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCkgew0KICAgIHRyeSB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsICJzZW50aW5lbCIsIHt9KTsNCiAgICAgICAgcmV0dXJuICJzZW50aW5lbCIgaW4gb2JqZWN0Ow0KICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgew0KICAgICAgICAvLyByZXR1cm5zIGZhbHN5DQogICAgfQ0KfQ0KDQovLyBjaGVjayB3aGV0aGVyIGRlZmluZVByb3BlcnR5IHdvcmtzIGlmIGl0J3MgZ2l2ZW4uIE90aGVyd2lzZSwNCi8vIHNoaW0gcGFydGlhbGx5Lg0KaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgew0KICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTsNCiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tID0gdHlwZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiIHx8DQogICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOw0KICAgIGlmICghZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsNCiAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5RmFsbGJhY2sgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7DQogICAgfQ0KfQ0KDQppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7DQogICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7DQogICAgdmFyIEVSUl9OT05fT0JKRUNUX1RBUkdFVCA9ICJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICINCiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCAiICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOw0KDQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikgew0KICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7DQogICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOw0KDQogICAgICAgIC8vIG1ha2UgYSB2YWxpYW50IGF0dGVtcHQgdG8gdXNlIHRoZSByZWFsIGRlZmluZVByb3BlcnR5DQogICAgICAgIC8vIGZvciBJOCdzIERPTSBlbGVtZW50cy4NCiAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmplY3QsIG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpOw0KICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7DQogICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBzaGltIGlmIHRoZSByZWFsIG9uZSBkb2Vzbid0IHdvcmsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIElmIGl0J3MgYSBkYXRhIHByb3BlcnR5Lg0KICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAidmFsdWUiKSkgew0KICAgICAgICAgICAgLy8gZmFpbCBzaWxlbnRseSBpZiAid3JpdGFibGUiLCAiZW51bWVyYWJsZSIsIG9yICJjb25maWd1cmFibGUiDQogICAgICAgICAgICAvLyBhcmUgcmVxdWVzdGVkIGJ1dCBub3Qgc3VwcG9ydGVkDQogICAgICAgICAgICAvKg0KICAgICAgICAgICAgLy8gYWx0ZXJuYXRlIGFwcHJvYWNoOg0KICAgICAgICAgICAgaWYgKCAvLyBjYW4ndCBpbXBsZW1lbnQgdGhlc2UgZmVhdHVyZXM7IGFsbG93IGZhbHNlIGJ1dCBub3QgdHJ1ZQ0KICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAid3JpdGFibGUiKSA/IGRlc2NyaXB0b3Iud3JpdGFibGUgOiB0cnVlKSB8fA0KICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAiZW51bWVyYWJsZSIpID8gZGVzY3JpcHRvci5lbnVtZXJhYmxlIDogdHJ1ZSkgfHwNCiAgICAgICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgImNvbmZpZ3VyYWJsZSIpID8gZGVzY3JpcHRvci5jb25maWd1cmFibGUgOiB0cnVlKQ0KICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKA0KICAgICAgICAgICAgICAgICAgICAiVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgZG9lcyBub3QgIiArDQogICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSwgb3Igd3JpdGFibGUuIg0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAqLw0KDQogICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIC8vIEFzIGFjY2Vzc29ycyBhcmUgc3VwcG9ydGVkIG9ubHkgb24gZW5naW5lcyBpbXBsZW1lbnRpbmcNCiAgICAgICAgICAgICAgICAvLyBgX19wcm90b19fYCB3ZSBjYW4gc2FmZWx5IG92ZXJyaWRlIGBfX3Byb3RvX19gIHdoaWxlIGRlZmluaW5nDQogICAgICAgICAgICAgICAgLy8gYSBwcm9wZXJ0eSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBoaXQgYW4gaW5oZXJpdGVkDQogICAgICAgICAgICAgICAgLy8gYWNjZXNzb3IuDQogICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187DQogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0Ow0KICAgICAgICAgICAgICAgIC8vIERlbGV0aW5nIGEgcHJvcGVydHkgYW55d2F5IHNpbmNlIGdldHRlciAvIHNldHRlciBtYXkgYmUNCiAgICAgICAgICAgICAgICAvLyBkZWZpbmVkIG9uIG9iamVjdCBpdHNlbGYuDQogICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07DQogICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7DQogICAgICAgICAgICAgICAgLy8gU2V0dGluZyBvcmlnaW5hbCBgX19wcm90b19fYCBiYWNrIG5vdy4NCiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nlc3NvcnMpDQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQpOw0KICAgICAgICAgICAgLy8gSWYgd2UgZ290IHRoYXQgZmFyIHRoZW4gZ2V0dGVycyBhbmQgc2V0dGVycyBjYW4gYmUgZGVmaW5lZCAhIQ0KICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKQ0KICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7DQogICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAic2V0IikpDQogICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBvYmplY3Q7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjIuMy43DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNw0KaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcykgew0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsNCiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgew0KICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJvcGVydHkpKQ0KICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iamVjdDsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjgNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy44DQppZiAoIU9iamVjdC5zZWFsKSB7DQogICAgT2JqZWN0LnNlYWwgPSBmdW5jdGlvbiBzZWFsKG9iamVjdCkgew0KICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcgYW5kIGJyZWFrcyBmZWF0dXJlLWRldGVjdGlvbiwgYnV0DQogICAgICAgIC8vIGFsbG93cyAic2VjdXJhYmxlIiBjb2RlIHRvICJncmFjZWZ1bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcNCiAgICAgICAgLy8gYnV0IGluc2VjdXJlIGNvZGUuDQogICAgICAgIHJldHVybiBvYmplY3Q7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjIuMy45DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOQ0KaWYgKCFPYmplY3QuZnJlZXplKSB7DQogICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsNCiAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dA0KICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nDQogICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLg0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIGRldGVjdCBhIFJoaW5vIGJ1ZyBhbmQgcGF0Y2ggaXQNCnRyeSB7DQogICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7fSk7DQp9IGNhdGNoIChleGNlcHRpb24pIHsNCiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsNCiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7DQogICAgICAgICAgICB9DQogICAgICAgIH07DQogICAgfSkoT2JqZWN0LmZyZWV6ZSk7DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTANCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMA0KaWYgKCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHsNCiAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsNCiAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dA0KICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nDQogICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLg0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTENCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMQ0KaWYgKCFPYmplY3QuaXNTZWFsZWQpIHsNCiAgICBPYmplY3QuaXNTZWFsZWQgPSBmdW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMg0KaWYgKCFPYmplY3QuaXNGcm96ZW4pIHsNCiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTMNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMw0KaWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKSB7DQogICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsNCiAgICAgICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0IHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4NCiAgICAgICAgaWYgKE9iamVjdChvYmplY3QpID09PSBvYmplY3QpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCiAgICAgICAgLy8gMi4gUmV0dXJuIHRoZSBCb29sZWFuIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLg0KICAgICAgICB2YXIgbmFtZSA9ICcnOw0KICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7DQogICAgICAgICAgICBuYW1lICs9ICc/JzsNCiAgICAgICAgfQ0KICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOw0KICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7DQogICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07DQogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjE0DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTQNCmlmICghT2JqZWN0LmtleXMpIHsNCiAgICAvLyBodHRwOi8vd2hhdHRoZWhlYWRzYWlkLmNvbS8yMDEwLzEwL2Etc2FmZXItb2JqZWN0LWtleXMtY29tcGF0aWJpbGl0eS1pbXBsZW1lbnRhdGlvbg0KICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsDQogICAgICAgIGRvbnRFbnVtcyA9IFsNCiAgICAgICAgICAgICJ0b1N0cmluZyIsDQogICAgICAgICAgICAidG9Mb2NhbGVTdHJpbmciLA0KICAgICAgICAgICAgInZhbHVlT2YiLA0KICAgICAgICAgICAgImhhc093blByb3BlcnR5IiwNCiAgICAgICAgICAgICJpc1Byb3RvdHlwZU9mIiwNCiAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsDQogICAgICAgICAgICAiY29uc3RydWN0b3IiDQogICAgICAgIF0sDQogICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7DQoNCiAgICBmb3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KQ0KICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOw0KDQogICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgew0KDQogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsNCg0KICAgICAgICB2YXIga2V5cyA9IFtdOw0KICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgew0KICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgew0KICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChoYXNEb250RW51bUJ1Zykgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsNCiAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgew0KICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBrZXlzOw0KICAgIH07DQoNCn0NCg0KLy8NCi8vIERhdGUNCi8vID09PT0NCi8vDQoNCi8vIEVTNSAxNS45LjUuNDMNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40Mw0KLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHJlcHJlc2VudCB0aGUgaW5zdGFuY2UgaW4gdGltZSANCi8vIHJlcHJlc2VudGVkIGJ5IHRoaXMgRGF0ZSBvYmplY3QuIFRoZSBmb3JtYXQgb2YgdGhlIFN0cmluZyBpcyB0aGUgRGF0ZSBUaW1lIA0KLy8gc3RyaW5nIGZvcm1hdCBkZWZpbmVkIGluIDE1LjkuMS4xNS4gQWxsIGZpZWxkcyBhcmUgcHJlc2VudCBpbiB0aGUgU3RyaW5nLiANCi8vIFRoZSB0aW1lIHpvbmUgaXMgYWx3YXlzIFVUQywgZGVub3RlZCBieSB0aGUgc3VmZml4IFouIElmIHRoZSB0aW1lIHZhbHVlIG9mIA0KLy8gdGhpcyBvYmplY3QgaXMgbm90IGEgZmluaXRlIE51bWJlciBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4NCmlmICghRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgfHwgKG5ldyBEYXRlKC02MjE5ODc1NTIwMDAwMCkudG9JU09TdHJpbmcoKS5pbmRleE9mKCctMDAwMDAxJykgPT09IC0xKSkgew0KICAgIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nID0gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7DQogICAgICAgIHZhciByZXN1bHQsIGxlbmd0aCwgdmFsdWUsIHllYXI7DQogICAgICAgIGlmICghaXNGaW5pdGUodGhpcykpDQogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcjsNCg0KICAgICAgICAvLyB0aGUgZGF0ZSB0aW1lIHN0cmluZyBmb3JtYXQgaXMgc3BlY2lmaWVkIGluIDE1LjkuMS4xNS4NCiAgICAgICAgcmVzdWx0ID0gW3RoaXMuZ2V0VVRDTW9udGgoKSArIDEsIHRoaXMuZ2V0VVRDRGF0ZSgpLA0KICAgICAgICAgICAgdGhpcy5nZXRVVENIb3VycygpLCB0aGlzLmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5nZXRVVENTZWNvbmRzKCldOw0KICAgICAgICB5ZWFyID0gdGhpcy5nZXRVVENGdWxsWWVhcigpOw0KICAgICAgICB5ZWFyID0gKHllYXIgPCAwID8gJy0nIDogKHllYXIgPiA5OTk5ID8gJysnIDogJycpKSArICgnMDAwMDAnICsgTWF0aC5hYnMoeWVhcikpLnNsaWNlKDAgPD0geWVhciAmJiB5ZWFyIDw9IDk5OTkgPyAtNCA6IC02KTsNCg0KICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoOw0KICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsNCiAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0W2xlbmd0aF07DQogICAgICAgICAgICAvLyBwYWQgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgdG8gaGF2ZSB0d28gZGlnaXRzLg0KICAgICAgICAgICAgaWYgKHZhbHVlIDwgMTApDQogICAgICAgICAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSAiMCIgKyB2YWx1ZTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBwYWQgbWlsbGlzZWNvbmRzIHRvIGhhdmUgdGhyZWUgZGlnaXRzLg0KICAgICAgICByZXR1cm4geWVhciArICItIiArIHJlc3VsdC5zbGljZSgwLCAyKS5qb2luKCItIikgKyAiVCIgKyByZXN1bHQuc2xpY2UoMikuam9pbigiOiIpICsgIi4iICsNCiAgICAgICAgICAgICgiMDAwIiArIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLnNsaWNlKC0zKSArICJaIjsNCiAgICB9DQp9DQoNCi8vIEVTNSAxNS45LjQuNA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjQNCmlmICghRGF0ZS5ub3cpIHsNCiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsNCiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS45LjUuNDQNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40NA0KLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIERhdGUgb2JqZWN0IGZvciB1c2UgYnkgDQovLyBKU09OLnN0cmluZ2lmeSAoMTUuMTIuMykuDQppZiAoIURhdGUucHJvdG90eXBlLnRvSlNPTikgew0KICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHsNCiAgICAgICAgLy8gV2hlbiB0aGUgdG9KU09OIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudCBrZXksIHRoZSBmb2xsb3dpbmcgDQogICAgICAgIC8vIHN0ZXBzIGFyZSB0YWtlbjoNCg0KICAgICAgICAvLyAxLiAgTGV0IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0LCBnaXZpbmcgaXQgdGhlIHRoaXMNCiAgICAgICAgLy8gdmFsdWUgYXMgaXRzIGFyZ3VtZW50Lg0KICAgICAgICAvLyAyLiBMZXQgdHYgYmUgVG9QcmltaXRpdmUoTywgaGludCBOdW1iZXIpLg0KICAgICAgICAvLyAzLiBJZiB0diBpcyBhIE51bWJlciBhbmQgaXMgbm90IGZpbml0ZSwgcmV0dXJuIG51bGwuDQogICAgICAgIC8vIFhYWA0KICAgICAgICAvLyA0LiBMZXQgdG9JU08gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZg0KICAgICAgICAvLyBPIHdpdGggYXJndW1lbnQgInRvSVNPU3RyaW5nIi4NCiAgICAgICAgLy8gNS4gSWYgSXNDYWxsYWJsZSh0b0lTTykgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4NCiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvSVNPU3RyaW5nICE9ICJmdW5jdGlvbiIpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KICAgICAgICAvLyA2LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YNCiAgICAgICAgLy8gIHRvSVNPIHdpdGggTyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnQgbGlzdC4NCiAgICAgICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTsNCg0KICAgICAgICAvLyBOT1RFIDEgVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuDQoNCiAgICAgICAgLy8gTk9URSAyIFRoZSB0b0pTT04gZnVuY3Rpb24gaXMgaW50ZW50aW9uYWxseSBnZW5lcmljOyBpdCBkb2VzIG5vdA0KICAgICAgICAvLyByZXF1aXJlIHRoYXQgaXRzIHRoaXMgdmFsdWUgYmUgYSBEYXRlIG9iamVjdC4gVGhlcmVmb3JlLCBpdCBjYW4gYmUNCiAgICAgICAgLy8gdHJhbnNmZXJyZWQgdG8gb3RoZXIga2luZHMgb2Ygb2JqZWN0cyBmb3IgdXNlIGFzIGEgbWV0aG9kLiBIb3dldmVyLA0KICAgICAgICAvLyBpdCBkb2VzIHJlcXVpcmUgdGhhdCBhbnkgc3VjaCBvYmplY3QgaGF2ZSBhIHRvSVNPU3RyaW5nIG1ldGhvZC4gQW4NCiAgICAgICAgLy8gb2JqZWN0IGlzIGZyZWUgdG8gdXNlIHRoZSBhcmd1bWVudCBrZXkgdG8gZmlsdGVyIGl0cw0KICAgICAgICAvLyBzdHJpbmdpZmljYXRpb24uDQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjkuNC4yDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjQuMg0KLy8gYmFzZWQgb24gd29yayBzaGFyZWQgYnkgRGFuaWVsIEZyaWVzZW4gKGRhbnRtYW4pDQovLyBodHRwOi8vZ2lzdC5naXRodWIuY29tLzMwMzI0OQ0KaWYgKERhdGUucGFyc2UoIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWiIpICE9PSA4LjY0ZTE1KSB7DQogICAgLy8gWFhYIGdsb2JhbCBhc3NpZ25tZW50IHdvbid0IHdvcmsgaW4gZW1iZWRkaW5ncyB0aGF0IHVzZQ0KICAgIC8vIGFuIGFsdGVybmF0ZSBvYmplY3QgZm9yIHRoZSBjb250ZXh0Lg0KICAgIERhdGUgPSAoZnVuY3Rpb24oTmF0aXZlRGF0ZSkgew0KDQogICAgICAgIC8vIERhdGUubGVuZ3RoID09PSA3DQogICAgICAgIHZhciBEYXRlID0gZnVuY3Rpb24gRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgew0KICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7DQogICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZURhdGUpIHsNCiAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IGxlbmd0aCA9PSAxICYmIFN0cmluZyhZKSA9PT0gWSA/IC8vIGlzU3RyaW5nKFkpDQogICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4cGxpY2l0bHkgcGFzcyBpdCB0aHJvdWdoIHBhcnNlOg0KICAgICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZShEYXRlLnBhcnNlKFkpKSA6DQogICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgbWFrZSBjYWxscyBkZXBlbmRpbmcgb24gYXJndW1lbnQNCiAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIGhlcmUNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDcgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgOg0KICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNiA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgsIG0sIHMpIDoNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDUgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtKSA6DQogICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA0ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCkgOg0KICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gMyA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQpIDoNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDIgPyBuZXcgTmF0aXZlRGF0ZShZLCBNKSA6DQogICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSAxID8gbmV3IE5hdGl2ZURhdGUoWSkgOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOYXRpdmVEYXRlKCk7DQogICAgICAgICAgICAgICAgLy8gUHJldmVudCBtaXh1cHMgd2l0aCB1bmZpeGVkIERhdGUgb2JqZWN0DQogICAgICAgICAgICAgICAgZGF0ZS5jb25zdHJ1Y3RvciA9IERhdGU7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOw0KICAgICAgICB9Ow0KDQogICAgICAgIC8vIDE1LjkuMS4xNSBEYXRlIFRpbWUgU3RyaW5nIEZvcm1hdC4NCiAgICAgICAgdmFyIGlzb0RhdGVFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgiXiIgKw0KICAgICAgICAgICAgIihcXGR7NH18W1wrXC1dXFxkezZ9KSIgKyAvLyBmb3VyLWRpZ2l0IHllYXIgY2FwdHVyZSBvciBzaWduICsgNi1kaWdpdCBleHRlbmRlZCB5ZWFyDQogICAgICAgICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIG1vbnRoIGNhcHR1cmUNCiAgICAgICAgICAgICIoPzotKFxcZHsyfSkiICsgLy8gb3B0aW9uYWwgZGF5IGNhcHR1cmUNCiAgICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVyZSBob3VyczptaW51dGVzOnNlY29uZHMubWlsbGlzZWNvbmRzDQogICAgICAgICAgICAgICAgIlQoXFxkezJ9KSIgKyAvLyBob3VycyBjYXB0dXJlDQogICAgICAgICAgICAgICAgIjooXFxkezJ9KSIgKyAvLyBtaW51dGVzIGNhcHR1cmUNCiAgICAgICAgICAgICAgICAiKD86IiArIC8vIG9wdGlvbmFsIDpzZWNvbmRzLm1pbGxpc2Vjb25kcw0KICAgICAgICAgICAgICAgICAgICAiOihcXGR7Mn0pIiArIC8vIHNlY29uZHMgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICAgICAiKD86XFwuKFxcZHszfSkpPyIgKyAvLyBtaWxsaXNlY29uZHMgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICIpPyIgKw0KICAgICAgICAgICAgIig/OiIgKyAvLyBjYXB0dXJlIFVUQyBvZmZzZXQgY29tcG9uZW50DQogICAgICAgICAgICAgICAgIlp8IiArIC8vIFVUQyBjYXB0dXJlDQogICAgICAgICAgICAgICAgIig/OiIgKyAvLyBvZmZzZXQgc3BlY2lmaWVyICsvLWhvdXJzOm1pbnV0ZXMNCiAgICAgICAgICAgICAgICAgICAgIihbLStdKSIgKyAvLyBzaWduIGNhcHR1cmUNCiAgICAgICAgICAgICAgICAgICAgIihcXGR7Mn0pIiArIC8vIGhvdXJzIG9mZnNldCBjYXB0dXJlDQogICAgICAgICAgICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBvZmZzZXQgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICIpIiArDQogICAgICAgICAgICAiKT8pPyk/KT8iICsNCiAgICAgICAgIiQiKTsNCg0KICAgICAgICAvLyBDb3B5IGFueSBjdXN0b20gbWV0aG9kcyBhIDNyZCBwYXJ0eSBsaWJyYXJ5IG1heSBoYXZlIGFkZGVkDQogICAgICAgIGZvciAodmFyIGtleSBpbiBOYXRpdmVEYXRlKQ0KICAgICAgICAgICAgRGF0ZVtrZXldID0gTmF0aXZlRGF0ZVtrZXldOw0KDQogICAgICAgIC8vIENvcHkgIm5hdGl2ZSIgbWV0aG9kcyBleHBsaWNpdGx5OyB0aGV5IG1heSBiZSBub24tZW51bWVyYWJsZQ0KICAgICAgICBEYXRlLm5vdyA9IE5hdGl2ZURhdGUubm93Ow0KICAgICAgICBEYXRlLlVUQyA9IE5hdGl2ZURhdGUuVVRDOw0KICAgICAgICBEYXRlLnByb3RvdHlwZSA9IE5hdGl2ZURhdGUucHJvdG90eXBlOw0KICAgICAgICBEYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERhdGU7DQoNCiAgICAgICAgLy8gVXBncmFkZSBEYXRlLnBhcnNlIHRvIGhhbmRsZSBzaW1wbGlmaWVkIElTTyA4NjAxIHN0cmluZ3MNCiAgICAgICAgRGF0ZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHN0cmluZykgew0KICAgICAgICAgICAgdmFyIG1hdGNoID0gaXNvRGF0ZUV4cHJlc3Npb24uZXhlYyhzdHJpbmcpOw0KICAgICAgICAgICAgaWYgKG1hdGNoKSB7DQogICAgICAgICAgICAgICAgbWF0Y2guc2hpZnQoKTsgLy8ga2lsbCBtYXRjaFswXSwgdGhlIGZ1bGwgbWF0Y2gNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgbWlsbGlzZWNvbmRzDQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkNCiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSArKG1hdGNoW2ldIHx8IChpIDwgMyA/IDEgOiAwKSk7DQogICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzFdIGlzIHRoZSBtb250aC4gTW9udGhzIGFyZSAwLTExIGluIEphdmFTY3JpcHQNCiAgICAgICAgICAgICAgICAgICAgLy8gYERhdGVgIG9iamVjdHMsIGJ1dCAxLTEyIGluIElTTyBub3RhdGlvbiwgc28gd2UNCiAgICAgICAgICAgICAgICAgICAgLy8gZGVjcmVtZW50Lg0KICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0tLTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUgVVRDIG9mZnNldCBjb21wb25lbnQNCiAgICAgICAgICAgICAgICB2YXIgbWludXRlT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBob3VyT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBzaWduID0gbWF0Y2gucG9wKCk7DQoNCiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBleHBsaWNpdCB0aW1lIHpvbmUgb2Zmc2V0IGlmIHNwZWNpZmllZA0KICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwOw0KICAgICAgICAgICAgICAgIGlmIChzaWduKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIGRldGVjdCBpbnZhbGlkIG9mZnNldHMgYW5kIHJldHVybiBlYXJseQ0KICAgICAgICAgICAgICAgICAgICBpZiAoaG91ck9mZnNldCA+IDIzIHx8IG1pbnV0ZU9mZnNldCA+IDU5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBleHByZXNzIHRoZSBwcm92aWRlZCB0aW1lIHpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMuIFRoZSBvZmZzZXQgaXMNCiAgICAgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgZm9yIHRpbWUgem9uZXMgd2VzdCBvZiBVVEM7IHBvc2l0aXZlIG90aGVyd2lzZS4NCiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldCkgKiA2ZTQgKiAoc2lnbiA9PSAiKyIgPyAtMSA6IDEpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIERhdGUuVVRDIGZvciB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGNvbnZlcnRzIHllYXIgdG8gMTkwMCArIHllYXINCiAgICAgICAgICAgICAgICAvLyBUaGUgR3JlZ29yaWFuIGNhbGVuZGFyIGhhcyBhIDQwMC15ZWFyIGN5Y2xlLCBzbyANCiAgICAgICAgICAgICAgICAvLyB0byBEYXRlLlVUQyh5ZWFyICsgNDAwLCAuLi4uICkgLSAxMjYyMjc4MDgwMDAwMCA9PSBEYXRlLlVUQyh5ZWFyLCAuLi4pLA0KICAgICAgICAgICAgICAgIC8vIHdoZXJlIDEyNjIyNzgwODAwMDAwIC0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBHcmVnb3JpYW4gY2FsZW5kYXIgNDAwIHllYXJzDQogICAgICAgICAgICAgICAgdmFyIHllYXIgPSArbWF0Y2hbMF07DQogICAgICAgICAgICAgICAgaWYgKDAgPD0geWVhciAmJiB5ZWFyIDw9IDk5KSB7DQogICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0geWVhciArIDQwMDsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuVVRDLmFwcGx5KHRoaXMsIG1hdGNoKSArIG9mZnNldCAtIDEyNjIyNzgwODAwMDAwOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgYSBuZXcgVVRDIGRhdGUgdmFsdWUsIGFjY291bnRpbmcgZm9yIHRoZSBvcHRpb25hbCBvZmZzZXQNCiAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5VVEMuYXBwbHkodGhpcywgbWF0Y2gpICsgb2Zmc2V0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsNCiAgICAgICAgfTsNCg0KICAgICAgICByZXR1cm4gRGF0ZTsNCiAgICB9KShEYXRlKTsNCn0NCg0KLy8NCi8vIFN0cmluZw0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgMTUuNS40LjIwDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMjANCnZhciB3cyA9ICJceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArDQogICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKw0KICAgICJcdTIwMjlcdUZFRkYiOw0KaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7DQogICAgLy8gaHR0cDovL2Jsb2cuc3RldmVubGV2aXRoYW4uY29tL2FyY2hpdmVzL2Zhc3Rlci10cmltLWphdmFzY3JpcHQNCiAgICAvLyBodHRwOi8vcGVyZmVjdGlvbmtpbGxzLmNvbS93aGl0ZXNwYWNlLWRldmlhdGlvbnMvDQogICAgd3MgPSAiWyIgKyB3cyArICJdIjsNCiAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3cyArIHdzICsgIioiKSwNCiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArICIqJCIpOw0KICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7DQogICAgICAgIHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsNCiAgICB9Ow0KfQ0KDQovLw0KLy8gVXRpbA0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgOS40DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjQNCi8vIGh0dHA6Ly9qc3BlcmYuY29tL3RvLWludGVnZXINCnZhciB0b0ludGVnZXIgPSBmdW5jdGlvbiAobikgew0KICAgIG4gPSArbjsNCiAgICBpZiAobiAhPT0gbikgLy8gaXNOYU4NCiAgICAgICAgbiA9IDA7DQogICAgZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9PSAtKDEvMCkpDQogICAgICAgIG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7DQogICAgcmV0dXJuIG47DQp9Ow0KDQp2YXIgcHJlcGFyZVN0cmluZyA9ICJhIlswXSAhPSAiYSIsDQogICAgLy8gRVM1IDkuOQ0KICAgIC8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDkuOQ0KICAgIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsNCiAgICAgICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCiAgICAgICAgLy8gSWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBieS1pbmRleCBhY2Nlc3Mgb2YNCiAgICAgICAgLy8gc3RyaW5nIGNoYXJhY3RlcnMgKGV4LiBJRSA8IDcpLCBzcGxpdCB0aGUgc3RyaW5nDQogICAgICAgIGlmIChwcmVwYXJlU3RyaW5nICYmIHR5cGVvZiBvID09ICJzdHJpbmciICYmIG8pIHsNCiAgICAgICAgICAgIHJldHVybiBvLnNwbGl0KCIiKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gT2JqZWN0KG8pOw0KICAgIH07DQp9KTsvKiB2aW06dHM9NDpzdHM9NDpzdz00Og0KICogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKg0KICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xDQogKg0KICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KICoNCiAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsDQogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCiAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogKiBMaWNlbnNlLg0KICoNCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIEFqYXgub3JnIENvZGUgRWRpdG9yIChBQ0UpLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQWpheC5vcmcgQi5WLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMA0KICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIENvbnRyaWJ1dG9yKHMpOg0KICogICAgICBGYWJpYW4gSmFrb2JzIDxmYWJpYW4gQVQgYWpheCBET1Qgb3JnPg0KICogICAgICBJcmFrbGkgR296YWxpc2h2aWxpIDxyZm9iaWNAZ21haWwuY29tPiAoaHR0cDovL2plZGl0b29sa2l0LmNvbSkNCiAqICAgICAgTWlrZSBkZSBCb2VyIDxtaWtlIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsNCg0KRXZlbnRFbWl0dGVyLl9lbWl0ID0NCkV2ZW50RW1pdHRlci5fZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZSkgew0KICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9Ow0KICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVycyB8fCB7fTsNCg0KICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gfHwgW107DQogICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV07DQogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikNCiAgICAgICAgcmV0dXJuOw0KDQogICAgZSA9IGUgfHwge307DQogICAgZS50eXBlID0gZXZlbnROYW1lOw0KICAgIA0KICAgIGlmICghZS5zdG9wUHJvcGFnYXRpb24pIHsNCiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsNCiAgICAgICAgfTsNCiAgICB9DQogICAgDQogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KSB7DQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7DQogICAgICAgIH07DQogICAgfQ0KDQogICAgZm9yICh2YXIgaT0wOyBpPGxpc3RlbmVycy5sZW5ndGg7IGkrKykgew0KICAgICAgICBsaXN0ZW5lcnNbaV0oZSk7DQogICAgICAgIGlmIChlLnByb3BhZ2F0aW9uU3RvcHBlZCkNCiAgICAgICAgICAgIGJyZWFrOw0KICAgIH0NCiAgICANCiAgICBpZiAoZGVmYXVsdEhhbmRsZXIgJiYgIWUuZGVmYXVsdFByZXZlbnRlZCkNCiAgICAgICAgZGVmYXVsdEhhbmRsZXIoZSk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8IHt9Ow0KICAgIA0KICAgIGlmICh0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXSkNCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVmYXVsdCBoYW5kbGVyIGZvciAnIiArIGV2ZW50TmFtZSArICInIGlzIGFscmVhZHkgc2V0Iik7DQogICAgICAgIA0KICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gY2FsbGJhY2s7DQp9Ow0KDQpFdmVudEVtaXR0ZXIub24gPQ0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307DQoNCiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOw0KICAgIGlmICghbGlzdGVuZXJzKQ0KICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107DQoNCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQ0KICAgICAgICBsaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQ0KRXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307DQoNCiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOw0KICAgIGlmICghbGlzdGVuZXJzKQ0KICAgICAgICByZXR1cm47DQoNCiAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjayk7DQogICAgaWYgKGluZGV4ICE9PSAtMSkNCiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7DQogICAgaWYgKHRoaXMuX2V2ZW50UmVnaXN0cnkpIHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdOw0KfTsNCg0KZXhwb3J0cy5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7DQoNCn0pOy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9saWIvb29wJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KZXhwb3J0cy5pbmhlcml0cyA9IChmdW5jdGlvbigpIHsNCiAgICB2YXIgdGVtcEN0b3IgPSBmdW5jdGlvbigpIHt9Ow0KICAgIHJldHVybiBmdW5jdGlvbihjdG9yLCBzdXBlckN0b3IpIHsNCiAgICAgICAgdGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTsNCiAgICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3IucHJvdG90eXBlOw0KICAgICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyB0ZW1wQ3RvcigpOw0KICAgICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7DQogICAgfTsNCn0oKSk7DQoNCmV4cG9ydHMubWl4aW4gPSBmdW5jdGlvbihvYmosIG1peGluKSB7DQogICAgZm9yICh2YXIga2V5IGluIG1peGluKSB7DQogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsNCiAgICB9DQp9Ow0KDQpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgew0KICAgIGV4cG9ydHMubWl4aW4ocHJvdG8sIG1peGluKTsNCn07DQoNCn0pOw0KLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKg0KICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xDQogKg0KICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KICoNCiAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsDQogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCiAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogKiBMaWNlbnNlLg0KICoNCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIEFqYXgub3JnIENvZGUgRWRpdG9yIChBQ0UpLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQWpheC5vcmcgQi5WLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMA0KICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIENvbnRyaWJ1dG9yKHMpOg0KICogICAgICBGYWJpYW4gSmFrb2JzIDxmYWJpYW4gQVQgYWpheCBET1Qgb3JnPg0KICoNCiAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mDQogKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3INCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLA0KICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQNCiAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5DQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvDQogKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cg0KICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UNCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlDQogKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyDQogKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLg0KICoNCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovDQogDQpkZWZpbmUoJ2FjZS9tb2RlL2Nzc193b3JrZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS93b3JrZXIvbWlycm9yJywgJ2FjZS9tb2RlL2Nzcy9jc3NsaW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KInVzZSBzdHJpY3QiOw0KDQp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOw0KdmFyIE1pcnJvciA9IHJlcXVpcmUoIi4uL3dvcmtlci9taXJyb3IiKS5NaXJyb3I7DQp2YXIgQ1NTTGludCA9IHJlcXVpcmUoIi4vY3NzL2Nzc2xpbnQiKS5DU1NMaW50Ow0KDQp2YXIgV29ya2VyID0gZXhwb3J0cy5Xb3JrZXIgPSBmdW5jdGlvbihzZW5kZXIpIHsNCiAgICBNaXJyb3IuY2FsbCh0aGlzLCBzZW5kZXIpOw0KICAgIHRoaXMuc2V0VGltZW91dCgyMDApOw0KfTsNCg0Kb29wLmluaGVyaXRzKFdvcmtlciwgTWlycm9yKTsNCg0KKGZ1bmN0aW9uKCkgew0KICAgIA0KICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5kb2MuZ2V0VmFsdWUoKTsNCiAgICAgICAgDQogICAgICAgIHZhciByZXN1bHQgPSBDU1NMaW50LnZlcmlmeSh2YWx1ZSk7DQogICAgICAgIHRoaXMuc2VuZGVyLmVtaXQoImNzc2xpbnQiLCByZXN1bHQubWVzc2FnZXMubWFwKGZ1bmN0aW9uKG1zZykgew0KICAgICAgICAgICAgZGVsZXRlIG1zZy5ydWxlOw0KICAgICAgICAgICAgcmV0dXJuIG1zZzsNCiAgICAgICAgfSkpOw0KICAgIH07DQogICAgDQp9KS5jYWxsKFdvcmtlci5wcm90b3R5cGUpOw0KDQp9KTtkZWZpbmUoJ2FjZS93b3JrZXIvbWlycm9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvZG9jdW1lbnQnLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KInVzZSBzdHJpY3QiOw0KDQp2YXIgRG9jdW1lbnQgPSByZXF1aXJlKCIuLi9kb2N1bWVudCIpLkRvY3VtZW50Ow0KdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOw0KICAgIA0KdmFyIE1pcnJvciA9IGV4cG9ydHMuTWlycm9yID0gZnVuY3Rpb24oc2VuZGVyKSB7DQogICAgdGhpcy5zZW5kZXIgPSBzZW5kZXI7DQogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsNCiAgICANCiAgICB2YXIgZGVmZXJyZWRVcGRhdGUgPSB0aGlzLmRlZmVycmVkVXBkYXRlID0gbGFuZy5kZWZlcnJlZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsNCiAgICANCiAgICB2YXIgX3NlbGYgPSB0aGlzOw0KICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgew0KICAgICAgICBkb2MuYXBwbHlEZWx0YXMoW2UuZGF0YV0pOyAgICAgICAgDQogICAgICAgIGRlZmVycmVkVXBkYXRlLnNjaGVkdWxlKF9zZWxmLiR0aW1lb3V0KTsNCiAgICB9KTsNCn07DQoNCihmdW5jdGlvbigpIHsNCiAgICANCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOw0KICAgIA0KICAgIHRoaXMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsNCiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7DQogICAgfTsNCiAgICANCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsNCiAgICAgICAgdGhpcy5kb2Muc2V0VmFsdWUodmFsdWUpOw0KICAgICAgICB0aGlzLmRlZmVycmVkVXBkYXRlLnNjaGVkdWxlKHRoaXMuJHRpbWVvdXQpOw0KICAgIH07DQogICAgDQogICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrSWQpIHsNCiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7DQogICAgICAgIC8vIGFic3RyYWN0IG1ldGhvZA0KICAgIH07DQogICAgDQp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOw0KDQp9KTsvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqDQogKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjENCiAqDQogKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24NCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvDQogKg0KICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywNCiAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQ0KICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUNCiAqIExpY2Vuc2UuDQogKg0KICogVGhlIE9yaWdpbmFsIENvZGUgaXMgQWpheC5vcmcgQ29kZSBFZGl0b3IgKEFDRSkuDQogKg0KICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzDQogKiBBamF4Lm9yZyBCLlYuDQogKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDEwDQogKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQogKg0KICogQ29udHJpYnV0b3Iocyk6DQogKiAgICAgIEZhYmlhbiBKYWtvYnMgPGZhYmlhbiBBVCBhamF4IERPVCBvcmc+DQogKg0KICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YNCiAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcg0KICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksDQogKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZA0KICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkNCiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8NCiAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyDQogKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQ0KICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUNCiAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXINCiAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuDQogKg0KICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8NCg0KZGVmaW5lKCdhY2UvZG9jdW1lbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsICdhY2UvcmFuZ2UnLCAnYWNlL2FuY2hvciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOw0KdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7DQp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7DQp2YXIgQW5jaG9yID0gcmVxdWlyZSgiLi9hbmNob3IiKS5BbmNob3I7DQoNCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHQpIHsNCiAgICB0aGlzLiRsaW5lcyA9IFtdOw0KDQogICAgaWYgKEFycmF5LmlzQXJyYXkodGV4dCkpIHsNCiAgICAgICAgdGhpcy5pbnNlcnRMaW5lcygwLCB0ZXh0KTsNCiAgICB9DQogICAgLy8gVGhlcmUgaGFzIHRvIGJlIG9uZSBsaW5lIGF0IGxlYXN0IGluIHRoZSBkb2N1bWVudC4gSWYgeW91IHBhc3MgYW4gZW1wdHkNCiAgICAvLyBzdHJpbmcgdG8gdGhlIGluc2VydCBmdW5jdGlvbiwgbm90aGluZyB3aWxsIGhhcHBlbi4gV29ya2Fyb3VuZC4NCiAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA9PSAwKSB7DQogICAgICAgIHRoaXMuJGxpbmVzID0gWyIiXTsNCiAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHQpOw0KICAgIH0NCn07DQoNCihmdW5jdGlvbigpIHsNCg0KICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsNCg0KICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7DQogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpOw0KICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuLTEpLmxlbmd0aCkpOw0KICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHQpOw0KICAgIH07DQoNCiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLmdldEFsbExpbmVzKCkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7DQogICAgfTsNCg0KICAgIHRoaXMuY3JlYXRlQW5jaG9yID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOw0KICAgIH07DQoNCiAgICAvLyBjaGVjayBmb3IgSUUgc3BsaXQgYnVnDQogICAgaWYgKCJhYWEiLnNwbGl0KC9hLykubGVuZ3RoID09IDApDQogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgew0KICAgICAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXHJcbnxcci9nLCAiXG4iKS5zcGxpdCgiXG4iKTsNCiAgICAgICAgfQ0KICAgIGVsc2UNCiAgICAgICAgdGhpcy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7DQogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOw0KICAgICAgICB9Ow0KDQoNCiAgICB0aGlzLiRkZXRlY3ROZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgew0KICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eLio/KFxyXG58XHJ8XG4pL20pOw0KICAgICAgICBpZiAobWF0Y2gpIHsNCiAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gbWF0Y2hbMV07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9ICJcbiI7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyID0gZnVuY3Rpb24oKSB7DQogICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7DQogICAgICAgICAgY2FzZSAid2luZG93cyI6DQogICAgICAgICAgICAgIHJldHVybiAiXHJcbiI7DQoNCiAgICAgICAgICBjYXNlICJ1bml4IjoNCiAgICAgICAgICAgICAgcmV0dXJuICJcbiI7DQoNCiAgICAgICAgICBjYXNlICJhdXRvIjoNCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF1dG9OZXdMaW5lOw0KICAgICAgfQ0KICAgIH07DQoNCiAgICB0aGlzLiRhdXRvTmV3TGluZSA9ICJcbiI7DQogICAgdGhpcy4kbmV3TGluZU1vZGUgPSAiYXV0byI7DQogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7DQogICAgICAgIGlmICh0aGlzLiRuZXdMaW5lTW9kZSA9PT0gbmV3TGluZU1vZGUpDQogICAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgdGhpcy4kbmV3TGluZU1vZGUgPSBuZXdMaW5lTW9kZTsNCiAgICB9Ow0KDQogICAgdGhpcy5nZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKCkgew0KICAgICAgICByZXR1cm4gdGhpcy4kbmV3TGluZU1vZGU7DQogICAgfTsNCg0KICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgew0KICAgICAgICByZXR1cm4gKHRleHQgPT0gIlxyXG4iIHx8IHRleHQgPT0gIlxyIiB8fCB0ZXh0ID09ICJcbiIpOw0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBHZXQgYSB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBnaXZlbiBsaW5lIGFzIGl0IGlzIGluIHRoZSBkb2N1bWVudA0KICAgICAqLw0KICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykgew0KICAgICAgICByZXR1cm4gdGhpcy4kbGluZXNbcm93XSB8fCAiIjsNCiAgICB9Ow0KDQogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7DQogICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5zbGljZShmaXJzdFJvdywgbGFzdFJvdyArIDEpOw0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIGFsbCBsaW5lcyBpbiB0aGUgZG9jdW1lbnQgYXMgc3RyaW5nIGFycmF5LiBXYXJuaW5nOiBUaGUgY2FsbGVyDQogICAgICogc2hvdWxkIG5vdCBtb2RpZnkgdGhpcyBhcnJheSENCiAgICAgKi8NCiAgICB0aGlzLmdldEFsbExpbmVzID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOw0KICAgIH07DQoNCiAgICB0aGlzLmdldExlbmd0aCA9IGZ1bmN0aW9uKCkgew0KICAgICAgICByZXR1cm4gdGhpcy4kbGluZXMubGVuZ3RoOw0KICAgIH07DQoNCiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7DQogICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdykgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3JhbmdlLnN0YXJ0LnJvd10uc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4pOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgdmFyIGxpbmVzID0gW107DQogICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuJGxpbmVzW3JhbmdlLnN0YXJ0LnJvd10uc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbikpOw0KICAgICAgICAgICAgbGluZXMucHVzaC5hcHBseShsaW5lcywgdGhpcy5nZXRMaW5lcyhyYW5nZS5zdGFydC5yb3crMSwgcmFuZ2UuZW5kLnJvdy0xKSk7DQogICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuJGxpbmVzW3JhbmdlLmVuZC5yb3ddLnN1YnN0cmluZygwLCByYW5nZS5lbmQuY29sdW1uKSk7DQogICAgICAgICAgICByZXR1cm4gbGluZXMuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgdGhpcy4kY2xpcFBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHsNCiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuZ2V0TGVuZ3RoKCk7DQogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7DQogICAgICAgICAgICBwb3NpdGlvbi5yb3cgPSBNYXRoLm1heCgwLCBsZW5ndGggLSAxKTsNCiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IHRoaXMuZ2V0TGluZShsZW5ndGgtMSkubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBwb3NpdGlvbjsNCiAgICB9Ow0KDQogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgew0KICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMCkNCiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsNCg0KICAgICAgICBwb3NpdGlvbiA9IHRoaXMuJGNsaXBQb3NpdGlvbihwb3NpdGlvbik7DQoNCiAgICAgICAgaWYgKHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMSkNCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7DQoNCiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kc3BsaXQodGV4dCk7DQogICAgICAgIHZhciBmaXJzdExpbmUgPSBsaW5lcy5zcGxpY2UoMCwgMSlbMF07DQogICAgICAgIHZhciBsYXN0TGluZSA9IGxpbmVzLmxlbmd0aCA9PSAwID8gbnVsbCA6IGxpbmVzLnNwbGljZShsaW5lcy5sZW5ndGggLSAxLCAxKVswXTsNCg0KICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0SW5MaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUpOw0KICAgICAgICBpZiAobGFzdExpbmUgIT09IG51bGwpIHsNCiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnROZXdMaW5lKHBvc2l0aW9uKTsgLy8gdGVybWluYXRlIGZpcnN0IGxpbmUNCiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnRMaW5lcyhwb3NpdGlvbi5yb3csIGxpbmVzKTsNCiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnRJbkxpbmUocG9zaXRpb24sIGxhc3RMaW5lIHx8ICIiKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gcG9zaXRpb247DQogICAgfTsNCg0KICAgIHRoaXMuaW5zZXJ0TGluZXMgPSBmdW5jdGlvbihyb3csIGxpbmVzKSB7DQogICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT0gMCkNCiAgICAgICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogMH07DQoNCiAgICAgICAgdmFyIGFyZ3MgPSBbcm93LCAwXTsNCiAgICAgICAgYXJncy5wdXNoLmFwcGx5KGFyZ3MsIGxpbmVzKTsNCiAgICAgICAgdGhpcy4kbGluZXMuc3BsaWNlLmFwcGx5KHRoaXMuJGxpbmVzLCBhcmdzKTsNCg0KICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCAwLCByb3cgKyBsaW5lcy5sZW5ndGgsIDApOw0KICAgICAgICB2YXIgZGVsdGEgPSB7DQogICAgICAgICAgICBhY3Rpb246ICJpbnNlcnRMaW5lcyIsDQogICAgICAgICAgICByYW5nZTogcmFuZ2UsDQogICAgICAgICAgICBsaW5lczogbGluZXMNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsNCiAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsNCiAgICB9Ow0KDQogICAgdGhpcy5pbnNlcnROZXdMaW5lID0gZnVuY3Rpb24ocG9zaXRpb24pIHsNCiAgICAgICAgcG9zaXRpb24gPSB0aGlzLiRjbGlwUG9zaXRpb24ocG9zaXRpb24pOw0KICAgICAgICB2YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gfHwgIiI7DQoNCiAgICAgICAgdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbik7DQogICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShwb3NpdGlvbi5yb3cgKyAxLCAwLCBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4sIGxpbmUubGVuZ3RoKSk7DQoNCiAgICAgICAgdmFyIGVuZCA9IHsNCiAgICAgICAgICAgIHJvdyA6IHBvc2l0aW9uLnJvdyArIDEsDQogICAgICAgICAgICBjb2x1bW4gOiAwDQogICAgICAgIH07DQoNCiAgICAgICAgdmFyIGRlbHRhID0gew0KICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0VGV4dCIsDQogICAgICAgICAgICByYW5nZTogUmFuZ2UuZnJvbVBvaW50cyhwb3NpdGlvbiwgZW5kKSwNCiAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpDQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7DQoNCiAgICAgICAgcmV0dXJuIGVuZDsNCiAgICB9Ow0KDQogICAgdGhpcy5pbnNlcnRJbkxpbmUgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgew0KICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMCkNCiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsNCg0KICAgICAgICB2YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gfHwgIiI7DQoNCiAgICAgICAgdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbikgKyB0ZXh0DQogICAgICAgICAgICAgICAgKyBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4pOw0KDQogICAgICAgIHZhciBlbmQgPSB7DQogICAgICAgICAgICByb3cgOiBwb3NpdGlvbi5yb3csDQogICAgICAgICAgICBjb2x1bW4gOiBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aA0KICAgICAgICB9Ow0KDQogICAgICAgIHZhciBkZWx0YSA9IHsNCiAgICAgICAgICAgIGFjdGlvbjogImluc2VydFRleHQiLA0KICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmZyb21Qb2ludHMocG9zaXRpb24sIGVuZCksDQogICAgICAgICAgICB0ZXh0OiB0ZXh0DQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7DQoNCiAgICAgICAgcmV0dXJuIGVuZDsNCiAgICB9Ow0KDQogICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkgew0KICAgICAgICAvLyBjbGlwIHRvIGRvY3VtZW50DQogICAgICAgIHJhbmdlLnN0YXJ0ID0gdGhpcy4kY2xpcFBvc2l0aW9uKHJhbmdlLnN0YXJ0KTsNCiAgICAgICAgcmFuZ2UuZW5kID0gdGhpcy4kY2xpcFBvc2l0aW9uKHJhbmdlLmVuZCk7DQoNCiAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkNCiAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsNCg0KICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZS5zdGFydC5yb3c7DQogICAgICAgIHZhciBsYXN0Um93ID0gcmFuZ2UuZW5kLnJvdzsNCg0KICAgICAgICBpZiAocmFuZ2UuaXNNdWx0aUxpbmUoKSkgew0KICAgICAgICAgICAgdmFyIGZpcnN0RnVsbFJvdyA9IHJhbmdlLnN0YXJ0LmNvbHVtbiA9PSAwID8gZmlyc3RSb3cgOiBmaXJzdFJvdyArIDE7DQogICAgICAgICAgICB2YXIgbGFzdEZ1bGxSb3cgPSBsYXN0Um93IC0gMTsNCg0KICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5jb2x1bW4gPiAwKQ0KICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5lKGxhc3RSb3csIDAsIHJhbmdlLmVuZC5jb2x1bW4pOw0KDQogICAgICAgICAgICBpZiAobGFzdEZ1bGxSb3cgPj0gZmlyc3RGdWxsUm93KQ0KICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMoZmlyc3RGdWxsUm93LCBsYXN0RnVsbFJvdyk7DQoNCiAgICAgICAgICAgIGlmIChmaXJzdEZ1bGxSb3cgIT0gZmlyc3RSb3cpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJzdFJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCB0aGlzLmdldExpbmUoZmlyc3RSb3cpLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOZXdMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJzdFJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7DQogICAgfTsNCg0KICAgIHRoaXMucmVtb3ZlSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7DQogICAgICAgIGlmIChzdGFydENvbHVtbiA9PSBlbmRDb2x1bW4pDQogICAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHJvdywgc3RhcnRDb2x1bW4sIHJvdywgZW5kQ29sdW1uKTsNCiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsNCiAgICAgICAgdmFyIHJlbW92ZWQgPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsNCiAgICAgICAgdmFyIG5ld0xpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4sIGxpbmUubGVuZ3RoKTsNCiAgICAgICAgdGhpcy4kbGluZXMuc3BsaWNlKHJvdywgMSwgbmV3TGluZSk7DQoNCiAgICAgICAgdmFyIGRlbHRhID0gew0KICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlVGV4dCIsDQogICAgICAgICAgICByYW5nZTogcmFuZ2UsDQogICAgICAgICAgICB0ZXh0OiByZW1vdmVkDQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7DQogICAgICAgIHJldHVybiByYW5nZS5zdGFydDsNCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogUmVtb3ZlcyBhIHJhbmdlIG9mIGZ1bGwgbGluZXMNCiAgICAgKg0KICAgICAqIEBwYXJhbSBmaXJzdFJvdyB7SW50ZWdlcn0gVGhlIGZpcnN0IHJvdyB0byBiZSByZW1vdmVkDQogICAgICogQHBhcmFtIGxhc3RSb3cge0ludGVnZXJ9IFRoZSBsYXN0IHJvdyB0byBiZSByZW1vdmVkDQogICAgICogQHJldHVybiB7U3RyaW5nW119IFRoZSByZW1vdmVkIGxpbmVzDQogICAgICovDQogICAgdGhpcy5yZW1vdmVMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7DQogICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShmaXJzdFJvdywgMCwgbGFzdFJvdyArIDEsIDApOw0KICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuJGxpbmVzLnNwbGljZShmaXJzdFJvdywgbGFzdFJvdyAtIGZpcnN0Um93ICsgMSk7DQoNCiAgICAgICAgdmFyIGRlbHRhID0gew0KICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlTGluZXMiLA0KICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLA0KICAgICAgICAgICAgbmw6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLA0KICAgICAgICAgICAgbGluZXM6IHJlbW92ZWQNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsNCiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7DQogICAgfTsNCg0KICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgew0KICAgICAgICB2YXIgZmlyc3RMaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7DQogICAgICAgIHZhciBzZWNvbmRMaW5lID0gdGhpcy5nZXRMaW5lKHJvdysxKTsNCg0KICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBmaXJzdExpbmUubGVuZ3RoLCByb3crMSwgMCk7DQogICAgICAgIHZhciBsaW5lID0gZmlyc3RMaW5lICsgc2Vjb25kTGluZTsNCg0KICAgICAgICB0aGlzLiRsaW5lcy5zcGxpY2Uocm93LCAyLCBsaW5lKTsNCg0KICAgICAgICB2YXIgZGVsdGEgPSB7DQogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVUZXh0IiwNCiAgICAgICAgICAgIHJhbmdlOiByYW5nZSwNCiAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpDQogICAgICAgIH07DQogICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7DQogICAgfTsNCg0KICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KSB7DQogICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkNCiAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydDsNCg0KICAgICAgICAvLyBTaG9ydGN1dDogSWYgdGhlIHRleHQgd2Ugd2FudCB0byBpbnNlcnQgaXMgdGhlIHNhbWUgYXMgaXQgaXMgYWxyZWFkeQ0KICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQsIHdlIGRvbid0IGhhdmUgdG8gcmVwbGFjZSBhbnl0aGluZy4NCiAgICAgICAgaWYgKHRleHQgPT0gdGhpcy5nZXRUZXh0UmFuZ2UocmFuZ2UpKQ0KICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsNCg0KICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7DQogICAgICAgIGlmICh0ZXh0KSB7DQogICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZW5kOw0KICAgIH07DQoNCiAgICB0aGlzLmFwcGx5RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7DQogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTsNCiAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdlLmVuZCk7DQoNCiAgICAgICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2VydExpbmVzIikNCiAgICAgICAgICAgICAgICB0aGlzLmluc2VydExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgZGVsdGEubGluZXMpOw0KICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnRUZXh0IikNCiAgICAgICAgICAgICAgICB0aGlzLmluc2VydChyYW5nZS5zdGFydCwgZGVsdGEudGV4dCk7DQogICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyAtIDEpOw0KICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IikNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgdGhpcy5yZXZlcnREZWx0YXMgPSBmdW5jdGlvbihkZWx0YXMpIHsNCiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgew0KICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOw0KDQogICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGRlbHRhLnJhbmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5lbmQpOw0KDQogICAgICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnRMaW5lcyIpDQogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lcyhyYW5nZS5zdGFydC5yb3csIHJhbmdlLmVuZC5yb3cgLSAxKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0VGV4dCIpDQogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOw0KICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpDQogICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5lcyhyYW5nZS5zdGFydC5yb3csIGRlbHRhLmxpbmVzKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIpDQogICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIGRlbHRhLnRleHQpOw0KICAgICAgICB9DQogICAgfTsNCg0KfSkuY2FsbChEb2N1bWVudC5wcm90b3R5cGUpOw0KDQpleHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7DQp9KTsNCi8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9yYW5nZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCnZhciBSYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pIHsNCiAgICB0aGlzLnN0YXJ0ID0gew0KICAgICAgICByb3c6IHN0YXJ0Um93LA0KICAgICAgICBjb2x1bW46IHN0YXJ0Q29sdW1uDQogICAgfTsNCg0KICAgIHRoaXMuZW5kID0gew0KICAgICAgICByb3c6IGVuZFJvdywNCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4NCiAgICB9Ow0KfTsNCg0KKGZ1bmN0aW9uKCkgew0KICAgIHRoaXMuaXNFZXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgew0KICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcmFuZ2Uuc3RhcnQucm93ICYmDQogICAgICAgICAgICB0aGlzLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJvdyAmJg0KICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmDQogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPT0gcmFuZ2UuZW5kLmNvbHVtbg0KICAgIH07DQoNCiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiAoIlJhbmdlOiBbIiArIHRoaXMuc3RhcnQucm93ICsgIi8iICsgdGhpcy5zdGFydC5jb2x1bW4gKw0KICAgICAgICAgICAgIl0gLT4gWyIgKyB0aGlzLmVuZC5yb3cgKyAiLyIgKyB0aGlzLmVuZC5jb2x1bW4gKyAiXSIpOw0KICAgIH07DQoNCiAgICB0aGlzLmNvbnRhaW5zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsNCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogQ29tcGFyZXMgdGhpcyByYW5nZSAoQSkgd2l0aCBhbm90aGVyIHJhbmdlIChCKSwgd2hlcmUgQiBpcyB0aGUgcGFzc2VkIGluDQogICAgICogcmFuZ2UuDQogICAgICoNCiAgICAgKiBSZXR1cm4gdmFsdWVzOg0KICAgICAqICAtMjogKEIpIGlzIGluZnJvbnQgb2YgKEEpIGFuZCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIChBKQ0KICAgICAqICAtMTogKEIpIGJlZ2lucyBiZWZvcmUgKEEpIGJ1dCBlbmRzIGluc2lkZSBvZiAoQSkNCiAgICAgKiAgIDA6IChCKSBpcyBjb21wbGV0bHkgaW5zaWRlIG9mIChBKSBPUiAoQSkgaXMgY29tcGxldHkgaW5zaWRlIG9mIChCKQ0KICAgICAqICArMTogKEIpIGJlZ2lucyBpbnNpZGUgb2YgKEEpIGJ1dCBlbmRzIG91dHNpZGUgb2YgKEEpDQogICAgICogICsyOiAoQikgaXMgYWZ0ZXIgKEEpIGFuZCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIChBKQ0KICAgICAqDQogICAgICogIDQyOiBGVFcgc3RhdGU6IChCKSBlbmRzIGluIChBKSBidXQgc3RhcnRzIG91dHNpZGUgb2YgKEEpDQogICAgICovDQogICAgdGhpcy5jb21wYXJlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgew0KICAgICAgICB2YXIgY21wLA0KICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLA0KICAgICAgICAgICAgc3RhcnQgPSByYW5nZS5zdGFydDsNCg0KICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7DQogICAgICAgIGlmIChjbXAgPT0gMSkgew0KICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsNCiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAyOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMCkgew0KICAgICAgICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gLTEpIHsNCiAgICAgICAgICAgIHJldHVybiAtMjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7DQogICAgICAgICAgICBpZiAoY21wID09IC0xKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMSkgew0KICAgICAgICAgICAgICAgIHJldHVybiA0MjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShwLnJvdywgcC5jb2x1bW4pOw0KICAgIH0NCg0KICAgIHRoaXMuY29udGFpbnNSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7DQogICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkgPT0gMCAmJiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5lbmQpID09IDA7DQogICAgfQ0KDQogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIHJldHVybiB0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW47DQogICAgfQ0KDQogICAgdGhpcy5pc1N0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW47DQogICAgfQ0KDQogICAgdGhpcy5zZXRTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7DQogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IHJvdy5jb2x1bW47DQogICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IHJvdy5yb3c7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IHJvdzsNCiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gY29sdW1uOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0Iikgew0KICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gcm93LmNvbHVtbjsNCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3c7DQogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0aGlzLmluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsNCiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsNCiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIHRoaXMuaW5zaWRlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgew0KICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICB0aGlzLmNvbXBhcmUgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aUxpbmUoKSkgew0KICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uIDwgdGhpcy5zdGFydC5jb2x1bW4gPyAtMSA6IChjb2x1bW4gPiB0aGlzLmVuZC5jb2x1bW4gPyAxIDogMCk7DQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQ0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpDQogICAgICAgICAgICByZXR1cm4gMTsNCg0KICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykNCiAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPj0gdGhpcy5zdGFydC5jb2x1bW4gPyAwIDogLTE7DQoNCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQ0KICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8PSB0aGlzLmVuZC5jb2x1bW4gPyAwIDogMTsNCg0KICAgICAgICByZXR1cm4gMDsNCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogTGlrZSAuY29tcGFyZSgpLCBidXQgaWYgaXNTdGFydCBpcyB0cnVlLCByZXR1cm4gLTE7DQogICAgICovDQogICAgdGhpcy5jb21wYXJlU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikgew0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBMaWtlIC5jb21wYXJlKCksIGJ1dCBpZiBpc0VuZCBpcyB0cnVlLCByZXR1cm4gMTsNCiAgICAgKi8NCiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAodGhpcy5lbmQucm93ID09IHJvdyAmJiB0aGlzLmVuZC5jb2x1bW4gPT0gY29sdW1uKSB7DQogICAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgdGhpcy5jb21wYXJlSW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgew0KICAgICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikgew0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsNCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA+IGxhc3RSb3cpIHsNCiAgICAgICAgICAgIHZhciBlbmQgPSB7DQogICAgICAgICAgICAgICAgcm93OiBsYXN0Um93KzEsDQogICAgICAgICAgICAgICAgY29sdW1uOiAwDQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFzdFJvdykgew0KICAgICAgICAgICAgdmFyIHN0YXJ0ID0gew0KICAgICAgICAgICAgICAgIHJvdzogbGFzdFJvdysxLA0KICAgICAgICAgICAgICAgIGNvbHVtbjogMA0KICAgICAgICAgICAgfTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA8IGZpcnN0Um93KSB7DQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7DQogICAgICAgICAgICAgICAgcm93OiBmaXJzdFJvdywNCiAgICAgICAgICAgICAgICBjb2x1bW46IDANCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodGhpcy5lbmQucm93IDwgZmlyc3RSb3cpIHsNCiAgICAgICAgICAgIHZhciBlbmQgPSB7DQogICAgICAgICAgICAgICAgcm93OiBmaXJzdFJvdywNCiAgICAgICAgICAgICAgICBjb2x1bW46IDANCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTsNCiAgICB9Ow0KDQogICAgdGhpcy5leHRlbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsNCg0KICAgICAgICBpZiAoY21wID09IDApDQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgZWxzZSBpZiAoY21wID09IC0xKQ0KICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsNCg0KICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOw0KICAgIH07DQoNCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyA9PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gdGhpcy5lbmQuY29sdW1uKTsNCiAgICB9Ow0KDQogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgew0KICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ICE9PSB0aGlzLmVuZC5yb3cpOw0KICAgIH07DQoNCiAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsNCiAgICB9Ow0KDQogICAgdGhpcy5jb2xsYXBzZVJvd3MgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgaWYgKHRoaXMuZW5kLmNvbHVtbiA9PSAwKQ0KICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCkNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgdGhpcy5lbmQucm93LCAwKQ0KICAgIH07DQoNCiAgICB0aGlzLnRvU2NyZWVuUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uKSB7DQogICAgICAgIHZhciBzY3JlZW5Qb3NTdGFydCA9DQogICAgICAgICAgICBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsNCiAgICAgICAgdmFyIHNjcmVlblBvc0VuZCA9DQogICAgICAgICAgICBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmVuZCk7DQoNCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSgNCiAgICAgICAgICAgIHNjcmVlblBvc1N0YXJ0LnJvdywgc2NyZWVuUG9zU3RhcnQuY29sdW1uLA0KICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbg0KICAgICAgICApOw0KICAgIH07DQoNCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsNCg0KDQpSYW5nZS5mcm9tUG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgew0KICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOw0KfTsNCg0KZXhwb3J0cy5SYW5nZSA9IFJhbmdlOw0KfSk7DQovKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqDQogKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjENCiAqDQogKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24NCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvDQogKg0KICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywNCiAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQ0KICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUNCiAqIExpY2Vuc2UuDQogKg0KICogVGhlIE9yaWdpbmFsIENvZGUgaXMgQWpheC5vcmcgQ29kZSBFZGl0b3IgKEFDRSkuDQogKg0KICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzDQogKiBBamF4Lm9yZyBCLlYuDQogKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDEwDQogKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQogKg0KICogQ29udHJpYnV0b3Iocyk6DQogKiAgICAgIEZhYmlhbiBKYWtvYnMgPGZhYmlhbiBBVCBhamF4IERPVCBvcmc+DQogKg0KICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YNCiAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcg0KICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksDQogKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZA0KICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkNCiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8NCiAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyDQogKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQ0KICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUNCiAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXINCiAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuDQogKg0KICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8NCg0KZGVmaW5lKCdhY2UvYW5jaG9yJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsNCnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOw0KDQovKioNCiAqIEFuIEFuY2hvciBpcyBhIGZsb2F0aW5nIHBvaW50ZXIgaW4gdGhlIGRvY3VtZW50LiBXaGVuZXZlciB0ZXh0IGlzIGluc2VydGVkIG9yDQogKiBkZWxldGVkIGJlZm9yZSB0aGUgY3Vyc29yLCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvciBpcyB1cGRhdGVkDQogKi8NCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsNCiAgICB0aGlzLmRvY3VtZW50ID0gZG9jOw0KICAgIA0KICAgIGlmICh0eXBlb2YgY29sdW1uID09ICJ1bmRlZmluZWQiKQ0KICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdy5yb3csIHJvdy5jb2x1bW4pOw0KICAgIGVsc2UNCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3csIGNvbHVtbik7DQoNCiAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTsNCiAgICBkb2Mub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsNCn07DQoNCihmdW5jdGlvbigpIHsNCg0KICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsNCiAgICANCiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LCB0aGlzLmNvbHVtbik7DQogICAgfTsNCiAgICANCiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50Ow0KICAgIH07DQogICAgDQogICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgdmFyIGRlbHRhID0gZS5kYXRhOw0KICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsNCiAgICAgICAgICAgIA0KICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYgcmFuZ2Uuc3RhcnQucm93ICE9IHRoaXMucm93KQ0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgDQogICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPiB0aGlzLnJvdykNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIA0KICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHRoaXMucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA+IHRoaXMuY29sdW1uKQ0KICAgICAgICAgICAgcmV0dXJuOw0KICAgIA0KICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3c7DQogICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbjsNCiAgICAgICAgDQogICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0Iikgew0KICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSBjb2x1bW4pIHsNCiAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93KSB7DQogICAgICAgICAgICAgICAgICAgIGNvbHVtbiArPSByYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1uOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uIC09IHJhbmdlLnN0YXJ0LmNvbHVtbjsNCiAgICAgICAgICAgICAgICAgICAgcm93ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5lbmQucm93ICYmIHJhbmdlLnN0YXJ0LnJvdyA8IHJvdykgew0KICAgICAgICAgICAgICAgIHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydExpbmVzIikgew0KICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8PSByb3cpIHsNCiAgICAgICAgICAgICAgICByb3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRleHQiKSB7DQogICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJvdyAmJiByYW5nZS5zdGFydC5jb2x1bW4gPCBjb2x1bW4pIHsNCiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLmNvbHVtbiA+PSBjb2x1bW4pDQogICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsNCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIChyYW5nZS5lbmQuY29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1uKSk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdyAmJiByYW5nZS5zdGFydC5yb3cgPCByb3cpIHsNCiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA9PSByb3cpIHsNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbikgKyByYW5nZS5zdGFydC5jb2x1bW47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJvdyAtPSAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmIChyYW5nZS5lbmQucm93ID09IHJvdykgew0KICAgICAgICAgICAgICAgIHJvdyAtPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93Ow0KICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIHJhbmdlLmVuZC5jb2x1bW4pICsgcmFuZ2Uuc3RhcnQuY29sdW1uOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7DQogICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDw9IHJvdykgew0KICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93IDw9IHJvdykNCiAgICAgICAgICAgICAgICAgICAgcm93IC09IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uLCB0cnVlKTsNCiAgICB9Ow0KDQogICAgdGhpcy5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBub0NsaXApIHsNCiAgICAgICAgdmFyIHBvczsNCiAgICAgICAgaWYgKG5vQ2xpcCkgew0KICAgICAgICAgICAgcG9zID0gew0KICAgICAgICAgICAgICAgIHJvdzogcm93LA0KICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uDQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmICh0aGlzLnJvdyA9PSBwb3Mucm93ICYmIHRoaXMuY29sdW1uID09IHBvcy5jb2x1bW4pDQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICANCiAgICAgICAgdmFyIG9sZCA9IHsNCiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csDQogICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uDQogICAgICAgIH07DQogICAgICAgIA0KICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7DQogICAgICAgIHRoaXMuY29sdW1uID0gcG9zLmNvbHVtbjsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgew0KICAgICAgICAgICAgb2xkOiBvbGQsDQogICAgICAgICAgICB2YWx1ZTogcG9zDQogICAgICAgIH0pOw0KICAgIH07DQogICAgDQogICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbigpIHsNCiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgdmFyIHBvcyA9IHt9Ow0KICAgIA0KICAgICAgICBpZiAocm93ID49IHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIHsNCiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7DQogICAgICAgICAgICBwb3MuY29sdW1uID0gdGhpcy5kb2N1bWVudC5nZXRMaW5lKHBvcy5yb3cpLmxlbmd0aDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7DQogICAgICAgICAgICBwb3Mucm93ID0gMDsNCiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSAwOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgcG9zLnJvdyA9IHJvdzsNCiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKGNvbHVtbiA8IDApDQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsNCiAgICAgICAgICAgIA0KICAgICAgICByZXR1cm4gcG9zOw0KICAgIH07DQogICAgDQp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOw0KDQp9KTsNCi8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9saWIvbGFuZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCmV4cG9ydHMuc3RyaW5nUmV2ZXJzZSA9IGZ1bmN0aW9uKHN0cmluZykgew0KICAgIHJldHVybiBzdHJpbmcuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKTsNCn07DQoNCmV4cG9ydHMuc3RyaW5nUmVwZWF0ID0gZnVuY3Rpb24gKHN0cmluZywgY291bnQpIHsNCiAgICAgcmV0dXJuIG5ldyBBcnJheShjb3VudCArIDEpLmpvaW4oc3RyaW5nKTsNCn07DQoNCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsNCnZhciB0cmltRW5kUmVnZXhwID0gL1xzXHMqJC87DQoNCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7DQogICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgJycpOw0KfTsNCg0KZXhwb3J0cy5zdHJpbmdUcmltUmlnaHQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7DQogICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICcnKTsNCn07DQoNCmV4cG9ydHMuY29weU9iamVjdCA9IGZ1bmN0aW9uKG9iaikgew0KICAgIHZhciBjb3B5ID0ge307DQogICAgZm9yICh2YXIga2V5IGluIG9iaikgew0KICAgICAgICBjb3B5W2tleV0gPSBvYmpba2V5XTsNCiAgICB9DQogICAgcmV0dXJuIGNvcHk7DQp9Ow0KDQpleHBvcnRzLmNvcHlBcnJheSA9IGZ1bmN0aW9uKGFycmF5KXsNCiAgICB2YXIgY29weSA9IFtdOw0KICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7DQogICAgICAgIGlmIChhcnJheVtpXSAmJiB0eXBlb2YgYXJyYXlbaV0gPT0gIm9iamVjdCIpDQogICAgICAgICAgICBjb3B5W2ldID0gdGhpcy5jb3B5T2JqZWN0KCBhcnJheVtpXSApOw0KICAgICAgICBlbHNlIA0KICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOw0KICAgIH0NCiAgICByZXR1cm4gY29weTsNCn07DQoNCmV4cG9ydHMuZGVlcENvcHkgPSBmdW5jdGlvbiAob2JqKSB7DQogICAgaWYgKHR5cGVvZiBvYmogIT0gIm9iamVjdCIpIHsNCiAgICAgICAgcmV0dXJuIG9iajsNCiAgICB9DQogICAgDQogICAgdmFyIGNvcHkgPSBvYmouY29uc3RydWN0b3IoKTsNCiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7DQogICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT0gIm9iamVjdCIpIHsNCiAgICAgICAgICAgIGNvcHlba2V5XSA9IHRoaXMuZGVlcENvcHkob2JqW2tleV0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIGNvcHk7DQp9Ow0KDQpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsNCiAgICB2YXIgbWFwID0ge307DQogICAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykgew0KICAgICAgICBtYXBbYXJyW2ldXSA9IDE7DQogICAgfQ0KICAgIHJldHVybiBtYXA7DQoNCn07DQoNCi8qKg0KICogc3BsaWNlIG91dCBvZiAnYXJyYXknIGFueXRoaW5nIHRoYXQgPT09ICd2YWx1ZScNCiAqLw0KZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgew0KICBmb3IgKHZhciBpID0gMDsgaSA8PSBhcnJheS5sZW5ndGg7IGkrKykgew0KICAgIGlmICh2YWx1ZSA9PT0gYXJyYXlbaV0pIHsNCiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsNCiAgICB9DQogIH0NCn07DQoNCmV4cG9ydHMuZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyKSB7DQogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7DQp9Ow0KDQpleHBvcnRzLmRlZmVycmVkQ2FsbCA9IGZ1bmN0aW9uKGZjbikgew0KDQogICAgdmFyIHRpbWVyID0gbnVsbDsNCiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgdGltZXIgPSBudWxsOw0KICAgICAgICBmY24oKTsNCiAgICB9Ow0KDQogICAgdmFyIGRlZmVycmVkID0gZnVuY3Rpb24odGltZW91dCkgew0KICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsNCiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IDApOw0KICAgICAgICByZXR1cm4gZGVmZXJyZWQ7DQogICAgfTsNCg0KICAgIGRlZmVycmVkLnNjaGVkdWxlID0gZGVmZXJyZWQ7DQoNCiAgICBkZWZlcnJlZC5jYWxsID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHRoaXMuY2FuY2VsKCk7DQogICAgICAgIGZjbigpOw0KICAgICAgICByZXR1cm4gZGVmZXJyZWQ7DQogICAgfTsNCg0KICAgIGRlZmVycmVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkgew0KICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOw0KICAgICAgICB0aW1lciA9IG51bGw7DQogICAgICAgIHJldHVybiBkZWZlcnJlZDsNCiAgICB9Ow0KDQogICAgcmV0dXJuIGRlZmVycmVkOw0KfTsNCg0KfSk7DQovKiANCkNTU0xpbnQNCkNvcHlyaWdodCAoYykgMjAxMSBOaWNvbGUgU3VsbGl2YW4gYW5kIE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KDQpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5DQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbA0KaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cw0KdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbA0KY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KDQpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbg0KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQoNClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwNCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4NClRIRSBTT0ZUV0FSRS4NCg0KKi8NCmRlZmluZSgnYWNlL21vZGUvY3NzL2Nzc2xpbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KLyohDQpQYXJzZXItTGliDQpDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCg0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0Kb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMNCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4NCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KDQpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQpPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElODQpUSEUgU09GVFdBUkUuDQoNCiovDQovKiBCdWlsZCB0aW1lOiAxMy1KdWx5LTIwMTEgMDQ6MzU6MjggKi8NCnZhciBwYXJzZXJsaWIgPSB7fTsNCihmdW5jdGlvbigpew0KDQovKioNCiAqIEEgZ2VuZXJpYyBiYXNlIHRvIGluaGVyaXQgZnJvbSBmb3IgYW55IG9iamVjdA0KICogdGhhdCBuZWVkcyBldmVudCBoYW5kbGluZy4NCiAqIEBjbGFzcyBFdmVudFRhcmdldA0KICogQGNvbnN0cnVjdG9yDQogKi8NCmZ1bmN0aW9uIEV2ZW50VGFyZ2V0KCl7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgYXJyYXkgb2YgbGlzdGVuZXJzIGZvciB2YXJpb3VzIGV2ZW50cy4NCiAgICAgKiBAdHlwZSBPYmplY3QNCiAgICAgKiBAcHJvcGVydHkgX2xpc3RlbmVycw0KICAgICAqIEBwcml2YXRlDQogICAgICovDQogICAgdGhpcy5fbGlzdGVuZXJzID0ge307ICAgIA0KfQ0KDQpFdmVudFRhcmdldC5wcm90b3R5cGUgPSB7DQoNCiAgICAvL3Jlc3RvcmUgY29uc3RydWN0b3INCiAgICBjb25zdHJ1Y3RvcjogRXZlbnRUYXJnZXQsDQoNCiAgICAvKioNCiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZS4NCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiBldmVudCB0byBhZGQgYSBsaXN0ZW5lciBmb3IuDQogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgb2NjdXJzLg0KICAgICAqIEByZXR1cm4ge3ZvaWR9DQogICAgICogQG1ldGhvZCBhZGRMaXN0ZW5lcg0KICAgICAqLw0KICAgIGFkZExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcil7DQogICAgICAgIGlmICghdGhpcy5fbGlzdGVuZXJzW3R5cGVdKXsNCiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyc1t0eXBlXSA9IFtdOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy5fbGlzdGVuZXJzW3R5cGVdLnB1c2gobGlzdGVuZXIpOw0KICAgIH0sDQogICAgDQogICAgLyoqDQogICAgICogRmlyZXMgYW4gZXZlbnQgYmFzZWQgb24gdGhlIHBhc3NlZC1pbiBvYmplY3QuDQogICAgICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBldmVudCBBbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhICd0eXBlJyBhdHRyaWJ1dGUNCiAgICAgKiAgICAgIG9yIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGV2ZW50IG5hbWUuDQogICAgICogQHJldHVybiB7dm9pZH0NCiAgICAgKiBAbWV0aG9kIGZpcmUNCiAgICAgKi8gICAgDQogICAgZmlyZTogZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09ICJzdHJpbmciKXsNCiAgICAgICAgICAgIGV2ZW50ID0geyB0eXBlOiBldmVudCB9Ow0KICAgICAgICB9DQogICAgICAgIGlmICghZXZlbnQudGFyZ2V0KXsNCiAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IHRoaXM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmICghZXZlbnQudHlwZSl7DQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV2ZW50IG9iamVjdCBtaXNzaW5nICd0eXBlJyBwcm9wZXJ0eS4iKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyc1tldmVudC50eXBlXSl7DQogICAgICAgIA0KICAgICAgICAgICAgLy9jcmVhdGUgYSBjb3B5IG9mIHRoZSBhcnJheSBhbmQgdXNlIHRoYXQgc28gbGlzdGVuZXJzIGNhbid0IGNoYW5lDQogICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2ZW50LnR5cGVdLmNvbmNhdCgpOw0KICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsZW49bGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsNCiAgICAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uY2FsbCh0aGlzLCBldmVudCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gICAgICAgICAgICANCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUmVtb3ZlcyBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50IHR5cGUuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgZXZlbnQgdG8gcmVtb3ZlIGEgbGlzdGVuZXIgZnJvbS4NCiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gcmVtb3ZlIGZyb20gdGhlIGV2ZW50Lg0KICAgICAqIEByZXR1cm4ge3ZvaWR9DQogICAgICogQG1ldGhvZCByZW1vdmVMaXN0ZW5lcg0KICAgICAqLw0KICAgIHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcil7DQogICAgICAgIGlmICh0aGlzLl9saXN0ZW5lcnNbdHlwZV0pew0KICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXTsNCiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbGVuPWxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7DQogICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyc1tpXSA9PT0gbGlzdGVuZXIpew0KICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICB9ICAgICAgICAgICAgDQogICAgfQ0KfTsNCi8qKg0KICogQ29udmVuaWVudCB3YXkgdG8gcmVhZCB0aHJvdWdoIHN0cmluZ3MuDQogKiBAbmFtZXNwYWNlIHBhcnNlcmxpYi51dGlsDQogKiBAY2xhc3MgU3RyaW5nUmVhZGVyDQogKiBAY29uc3RydWN0b3INCiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRoZSB0ZXh0IHRvIHJlYWQuDQogKi8NCmZ1bmN0aW9uIFN0cmluZ1JlYWRlcih0ZXh0KXsNCg0KICAgIC8qKg0KICAgICAqIFRoZSBpbnB1dCB0ZXh0IHdpdGggbGluZSBlbmRpbmdzIG5vcm1hbGl6ZWQuDQogICAgICogQHByb3BlcnR5IF9pbnB1dA0KICAgICAqIEB0eXBlIFN0cmluZw0KICAgICAqIEBwcml2YXRlDQogICAgICovDQogICAgdGhpcy5faW5wdXQgPSB0ZXh0LnJlcGxhY2UoL1xuXHI/L2csICJcbiIpOw0KDQoNCiAgICAvKioNCiAgICAgKiBUaGUgcm93IGZvciB0aGUgY2hhcmFjdGVyIHRvIGJlIHJlYWQgbmV4dC4NCiAgICAgKiBAcHJvcGVydHkgX2xpbmUNCiAgICAgKiBAdHlwZSBpbnQNCiAgICAgKiBAcHJpdmF0ZQ0KICAgICAqLw0KICAgIHRoaXMuX2xpbmUgPSAxOw0KDQoNCiAgICAvKioNCiAgICAgKiBUaGUgY29sdW1uIGZvciB0aGUgY2hhcmFjdGVyIHRvIGJlIHJlYWQgbmV4dC4NCiAgICAgKiBAcHJvcGVydHkgX2NvbA0KICAgICAqIEB0eXBlIGludA0KICAgICAqIEBwcml2YXRlDQogICAgICovDQogICAgdGhpcy5fY29sID0gMTsNCg0KICAgIC8qKg0KICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCB0byBiZSByZWFkIG5leHQuDQogICAgICogQHByb3BlcnR5IF9jdXJzb3INCiAgICAgKiBAdHlwZSBpbnQNCiAgICAgKiBAcHJpdmF0ZQ0KICAgICAqLw0KICAgIHRoaXMuX2N1cnNvciA9IDA7DQp9DQoNClN0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7DQoNCiAgICAvL3Jlc3RvcmUgY29uc3RydWN0b3INCiAgICBjb25zdHJ1Y3RvcjogU3RyaW5nUmVhZGVyLA0KDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gUG9zaXRpb24gaW5mbw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgY29sdW1uIG9mIHRoZSBjaGFyYWN0ZXIgdG8gYmUgcmVhZCBuZXh0Lg0KICAgICAqIEByZXR1cm4ge2ludH0gVGhlIGNvbHVtbiBvZiB0aGUgY2hhcmFjdGVyIHRvIGJlIHJlYWQgbmV4dC4NCiAgICAgKiBAbWV0aG9kIGdldENvbA0KICAgICAqLw0KICAgIGdldENvbDogZnVuY3Rpb24oKXsNCiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbDsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgcm93IG9mIHRoZSBjaGFyYWN0ZXIgdG8gYmUgcmVhZCBuZXh0Lg0KICAgICAqIEByZXR1cm4ge2ludH0gVGhlIHJvdyBvZiB0aGUgY2hhcmFjdGVyIHRvIGJlIHJlYWQgbmV4dC4NCiAgICAgKiBAbWV0aG9kIGdldExpbmUNCiAgICAgKi8NCiAgICBnZXRMaW5lOiBmdW5jdGlvbigpew0KICAgICAgICByZXR1cm4gdGhpcy5fbGluZSA7DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZXMgaWYgeW91J3JlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0Lg0KICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhlcmUncyBubyBtb3JlIGlucHV0LCBmYWxzZSBvdGhlcndpc2UuDQogICAgICogQG1ldGhvZCBlb2YNCiAgICAgKi8NCiAgICBlb2Y6IGZ1bmN0aW9uKCl7DQogICAgICAgIHJldHVybiAodGhpcy5fY3Vyc29yID09IHRoaXMuX2lucHV0Lmxlbmd0aCk7DQogICAgfSwNCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vIEJhc2ljIHJlYWRpbmcNCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAgIC8qKg0KICAgICAqIFJlYWRzIHRoZSBuZXh0IGNoYXJhY3RlciB3aXRob3V0IGFkdmFuY2luZyB0aGUgY3Vyc29yLg0KICAgICAqIEBwYXJhbSB7aW50fSBjb3VudCBIb3cgbWFueSBjaGFyYWN0ZXJzIHRvIGxvb2sgYWhlYWQgKGRlZmF1bHQgaXMgMSkuDQogICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgbmV4dCBjaGFyYWN0ZXIgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBuZXh0IGNoYXJhY3Rlci4NCiAgICAgKiBAbWV0aG9kIHBlZWsNCiAgICAgKi8NCiAgICBwZWVrOiBmdW5jdGlvbihjb3VudCl7DQogICAgICAgIHZhciBjID0gbnVsbDsNCiAgICAgICAgY291bnQgPSAodHlwZW9mIGNvdW50ID09ICJ1bmRlZmluZWQiID8gMSA6IGNvdW50KTsNCg0KICAgICAgICAvL2lmIHdlJ3JlIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4uLg0KICAgICAgICBpZiAodGhpcy5fY3Vyc29yIDwgdGhpcy5faW5wdXQubGVuZ3RoKXsNCg0KICAgICAgICAgICAgLy9nZXQgY2hhcmFjdGVyIGFuZCBpbmNyZW1lbnQgY3Vyc29yIGFuZCBjb2x1bW4NCiAgICAgICAgICAgIGMgPSB0aGlzLl9pbnB1dC5jaGFyQXQodGhpcy5fY3Vyc29yICsgY291bnQgLSAxKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBjOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBSZWFkcyB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgaW5wdXQgYW5kIGFkanVzdHMgdGhlIHJvdyBhbmQgY29sdW1uDQogICAgICogYWNjb3JkaW5nbHkuDQogICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgbmV4dCBjaGFyYWN0ZXIgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBuZXh0IGNoYXJhY3Rlci4NCiAgICAgKiBAbWV0aG9kIHJlYWQNCiAgICAgKi8NCiAgICByZWFkOiBmdW5jdGlvbigpew0KICAgICAgICB2YXIgYyA9IG51bGw7DQoNCiAgICAgICAgLy9pZiB3ZSdyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuLi4NCiAgICAgICAgaWYgKHRoaXMuX2N1cnNvciA8IHRoaXMuX2lucHV0Lmxlbmd0aCl7DQoNCiAgICAgICAgICAgIC8vaWYgdGhlIGxhc3QgY2hhcmFjdGVyIHdhcyBhIG5ld2xpbmUsIGluY3JlbWVudCByb3cgY291bnQNCiAgICAgICAgICAgIC8vYW5kIHJlc2V0IGNvbHVtbiBjb3VudA0KICAgICAgICAgICAgaWYgKHRoaXMuX2lucHV0LmNoYXJBdCh0aGlzLl9jdXJzb3IpID09ICJcbiIpew0KICAgICAgICAgICAgICAgIHRoaXMuX2xpbmUrKzsNCiAgICAgICAgICAgICAgICB0aGlzLl9jb2w9MTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdGhpcy5fY29sKys7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vZ2V0IGNoYXJhY3RlciBhbmQgaW5jcmVtZW50IGN1cnNvciBhbmQgY29sdW1uDQogICAgICAgICAgICBjID0gdGhpcy5faW5wdXQuY2hhckF0KHRoaXMuX2N1cnNvcisrKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBjOw0KICAgIH0sDQoNCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAvLyBNaXNjDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAvKioNCiAgICAgKiBTYXZlcyB0aGUgY3VycmVudCBsb2NhdGlvbiBzbyBpdCBjYW4gYmUgcmV0dXJuZWQgdG8gbGF0ZXIuDQogICAgICogQG1ldGhvZCBtYXJrDQogICAgICogQHJldHVybiB7dm9pZH0NCiAgICAgKi8NCiAgICBtYXJrOiBmdW5jdGlvbigpew0KICAgICAgICB0aGlzLl9ib29rbWFyayA9IHsNCiAgICAgICAgICAgIGN1cnNvcjogdGhpcy5fY3Vyc29yLA0KICAgICAgICAgICAgbGluZTogICB0aGlzLl9saW5lLA0KICAgICAgICAgICAgY29sOiAgICB0aGlzLl9jb2wNCiAgICAgICAgfTsNCiAgICB9LA0KDQogICAgcmVzZXQ6IGZ1bmN0aW9uKCl7DQogICAgICAgIGlmICh0aGlzLl9ib29rbWFyayl7DQogICAgICAgICAgICB0aGlzLl9jdXJzb3IgPSB0aGlzLl9ib29rbWFyay5jdXJzb3I7DQogICAgICAgICAgICB0aGlzLl9saW5lID0gdGhpcy5fYm9va21hcmsubGluZTsNCiAgICAgICAgICAgIHRoaXMuX2NvbCA9IHRoaXMuX2Jvb2ttYXJrLmNvbDsNCiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ib29rbWFyazsNCiAgICAgICAgfQ0KICAgIH0sDQoNCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAvLyBBZHZhbmNlZCByZWFkaW5nDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAvKioNCiAgICAgKiBSZWFkcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBnaXZlbiBzdHJpbmcuIFRocm93cyBhbiBlcnJvciBpZiB0aGF0DQogICAgICogc3RyaW5nIGlzIG5vdCBmb3VuZC4NCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiBUaGUgc3RyaW5nIHRvIHJlYWQuDQogICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgc3RyaW5nIHdoZW4gaXQgaXMgZm91bmQuDQogICAgICogQHRocm93cyBFcnJvciB3aGVuIHRoZSBzdHJpbmcgcGF0dGVybiBpcyBub3QgZm91bmQuDQogICAgICogQG1ldGhvZCByZWFkVG8NCiAgICAgKi8NCiAgICByZWFkVG86IGZ1bmN0aW9uKHBhdHRlcm4pew0KDQogICAgICAgIHZhciBidWZmZXIgPSAiIiwNCiAgICAgICAgICAgIGM7DQoNCiAgICAgICAgLyoNCiAgICAgICAgICogRmlyc3QsIGJ1ZmZlciBtdXN0IGJlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgcGF0dGVybi4NCiAgICAgICAgICogVGhlbiwgYnVmZmVyIG11c3QgZW5kIHdpdGggdGhlIHBhdHRlcm4gb3IgZWxzZSByZWFjaCB0aGUNCiAgICAgICAgICogZW5kIG9mIHRoZSBpbnB1dC4NCiAgICAgICAgICovDQogICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoIDwgcGF0dGVybi5sZW5ndGggfHwgYnVmZmVyLmxhc3RJbmRleE9mKHBhdHRlcm4pICE9IGJ1ZmZlci5sZW5ndGggLSBwYXR0ZXJuLmxlbmd0aCl7DQogICAgICAgICAgICBjID0gdGhpcy5yZWFkKCk7DQogICAgICAgICAgICBpZiAoYyl7DQogICAgICAgICAgICAgICAgYnVmZmVyICs9IGM7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgXCIiICsgcGF0dGVybiArICJcIiBhdCBsaW5lICIgKyB0aGlzLl9saW5lICArICIsIGNvbCAiICsgdGhpcy5fY29sICsgIi4iKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBidWZmZXI7DQoNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUmVhZHMgY2hhcmFjdGVycyB3aGlsZSBlYWNoIGNoYXJhY3RlciBjYXVzZXMgdGhlIGdpdmVuDQogICAgICogZmlsdGVyIGZ1bmN0aW9uIHRvIHJldHVybiB0cnVlLiBUaGUgZnVuY3Rpb24gaXMgcGFzc2VkDQogICAgICogaW4gZWFjaCBjaGFyYWN0ZXIgYW5kIGVpdGhlciByZXR1cm5zIHRydWUgdG8gY29udGludWUNCiAgICAgKiByZWFkaW5nIG9yIGZhbHNlIHRvIHN0b3AuDQogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmlsdGVyIFRoZSBmdW5jdGlvbiB0byByZWFkIG9uIGVhY2ggY2hhcmFjdGVyLg0KICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHN0cmluZyBtYWRlIHVwIG9mIGFsbCBjaGFyYWN0ZXJzIHRoYXQgcGFzc2VkIHRoZQ0KICAgICAqICAgICAgZmlsdGVyIGNoZWNrLg0KICAgICAqIEBtZXRob2QgcmVhZFdoaWxlDQogICAgICovDQogICAgcmVhZFdoaWxlOiBmdW5jdGlvbihmaWx0ZXIpew0KDQogICAgICAgIHZhciBidWZmZXIgPSAiIiwNCiAgICAgICAgICAgIGMgPSB0aGlzLnJlYWQoKTsNCg0KICAgICAgICB3aGlsZShjICE9PSBudWxsICYmIGZpbHRlcihjKSl7DQogICAgICAgICAgICBidWZmZXIgKz0gYzsNCiAgICAgICAgICAgIGMgPSB0aGlzLnJlYWQoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBidWZmZXI7DQoNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUmVhZHMgY2hhcmFjdGVycyB0aGF0IG1hdGNoIGVpdGhlciB0ZXh0IG9yIGEgcmVndWxhciBleHByZXNzaW9uIGFuZA0KICAgICAqIHJldHVybnMgdGhvc2UgY2hhcmFjdGVycy4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlIHJvdyBhbmQgY29sdW1uDQogICAgICogYXJlIGFkanVzdGVkOyBpZiBubyBtYXRjaCBpcyBmb3VuZCwgdGhlIHJlYWRlcidzIHN0YXRlIGlzIHVuY2hhbmdlZC4NCiAgICAgKiByZWFkaW5nIG9yIGZhbHNlIHRvIHN0b3AuDQogICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBtYXRjaHRlciBJZiBhIHN0cmluZywgdGhlbiB0aGUgbGl0ZXJhbCBzdHJpbmcNCiAgICAgKiAgICAgIHZhbHVlIGlzIHNlYXJjaGVkIGZvci4gSWYgYSByZWd1bGFyIGV4cHJlc3Npb24sIHRoZW4gYW55IHN0cmluZw0KICAgICAqICAgICAgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gaXMgc2VhcmNoIGZvci4NCiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBzdHJpbmcgbWFkZSB1cCBvZiBhbGwgY2hhcmFjdGVycyB0aGF0IG1hdGNoZWQgb3INCiAgICAgKiAgICAgIG51bGwgaWYgdGhlcmUgd2FzIG5vIG1hdGNoLg0KICAgICAqIEBtZXRob2QgcmVhZE1hdGNoDQogICAgICovDQogICAgcmVhZE1hdGNoOiBmdW5jdGlvbihtYXRjaGVyKXsNCg0KICAgICAgICB2YXIgc291cmNlID0gdGhpcy5faW5wdXQuc3Vic3RyaW5nKHRoaXMuX2N1cnNvciksDQogICAgICAgICAgICB2YWx1ZSA9IG51bGw7DQoNCiAgICAgICAgLy9pZiBpdCdzIGEgc3RyaW5nLCBqdXN0IGRvIGEgc3RyYWlnaHQgbWF0Y2gNCiAgICAgICAgaWYgKHR5cGVvZiBtYXRjaGVyID09ICJzdHJpbmciKXsNCiAgICAgICAgICAgIGlmIChzb3VyY2UuaW5kZXhPZihtYXRjaGVyKSA9PT0gMCl7DQogICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJlYWRDb3VudChtYXRjaGVyLmxlbmd0aCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSBpZiAobWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCl7DQogICAgICAgICAgICBpZiAobWF0Y2hlci50ZXN0KHNvdXJjZSkpew0KICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yZWFkQ291bnQoUmVnRXhwLmxhc3RNYXRjaC5sZW5ndGgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHZhbHVlOw0KICAgIH0sDQoNCg0KICAgIC8qKg0KICAgICAqIFJlYWRzIGEgZ2l2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuIElmIHRoZSBlbmQgb2YgdGhlIGlucHV0IGlzIHJlYWNoZWQsDQogICAgICogaXQgcmVhZHMgb25seSB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYW5kIGRvZXMgbm90IHRocm93IGFuIGVycm9yLg0KICAgICAqIEBwYXJhbSB7aW50fSBjb3VudCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcmVhZC4NCiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBzdHJpbmcgbWFkZSB1cCB0aGUgcmVhZCBjaGFyYWN0ZXJzLg0KICAgICAqIEBtZXRob2QgcmVhZENvdW50DQogICAgICovDQogICAgcmVhZENvdW50OiBmdW5jdGlvbihjb3VudCl7DQogICAgICAgIHZhciBidWZmZXIgPSAiIjsNCg0KICAgICAgICB3aGlsZShjb3VudC0tKXsNCiAgICAgICAgICAgIGJ1ZmZlciArPSB0aGlzLnJlYWQoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBidWZmZXI7DQogICAgfQ0KDQp9Ow0KLyoqDQogKiBUeXBlIHRvIHVzZSB3aGVuIGEgc3ludGF4IGVycm9yIG9jY3Vycy4NCiAqIEBjbGFzcyBTeW50YXhFcnJvcg0KICogQG5hbWVzcGFjZSBwYXJzZXJsaWIudXRpbA0KICogQGNvbnN0cnVjdG9yDQogKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS4NCiAqIEBwYXJhbSB7aW50fSBsaW5lIFRoZSBsaW5lIGF0IHdoaWNoIHRoZSBlcnJvciBvY2N1cnJlZC4NCiAqIEBwYXJhbSB7aW50fSBjb2wgVGhlIGNvbHVtbiBhdCB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuDQogKi8NCmZ1bmN0aW9uIFN5bnRheEVycm9yKG1lc3NhZ2UsIGxpbmUsIGNvbCl7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgY29sdW1uIGF0IHdoaWNoIHRoZSBlcnJvciBvY2N1cnJlZC4NCiAgICAgKiBAdHlwZSBpbnQNCiAgICAgKiBAcHJvcGVydHkgY29sDQogICAgICovDQogICAgdGhpcy5jb2wgPSBjb2w7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgbGluZSBhdCB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuDQogICAgICogQHR5cGUgaW50DQogICAgICogQHByb3BlcnR5IGxpbmUNCiAgICAgKi8NCiAgICB0aGlzLmxpbmUgPSBsaW5lOw0KDQogICAgLyoqDQogICAgICogVGhlIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXQuDQogICAgICogQHR5cGUgU3RyaW5nDQogICAgICogQHByb3BlcnR5IHRleHQNCiAgICAgKi8NCiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOw0KDQp9DQoNCi8vaW5oZXJpdCBmcm9tIEVycm9yDQpTeW50YXhFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTsNCi8qKg0KICogQmFzZSB0eXBlIHRvIHJlcHJlc2VudCBhIHNpbmdsZSBzeW50YWN0aWMgdW5pdC4NCiAqIEBjbGFzcyBTeW50YXhVbml0DQogKiBAbmFtZXNwYWNlIHBhcnNlcmxpYi51dGlsDQogKiBAY29uc3RydWN0b3INCiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRoZSB0ZXh0IG9mIHRoZSB1bml0Lg0KICogQHBhcmFtIHtpbnR9IGxpbmUgVGhlIGxpbmUgb2YgdGV4dCBvbiB3aGljaCB0aGUgdW5pdCByZXNpZGVzLg0KICogQHBhcmFtIHtpbnR9IGNvbCBUaGUgY29sdW1uIG9mIHRleHQgb24gd2hpY2ggdGhlIHVuaXQgcmVzaWRlcy4NCiAqLw0KZnVuY3Rpb24gU3ludGF4VW5pdCh0ZXh0LCBsaW5lLCBjb2wpew0KDQoNCiAgICAvKioNCiAgICAgKiBUaGUgY29sdW1uIG9mIHRleHQgb24gd2hpY2ggdGhlIHVuaXQgcmVzaWRlcy4NCiAgICAgKiBAdHlwZSBpbnQNCiAgICAgKiBAcHJvcGVydHkgY29sDQogICAgICovDQogICAgdGhpcy5jb2wgPSBjb2w7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgbGluZSBvZiB0ZXh0IG9uIHdoaWNoIHRoZSB1bml0IHJlc2lkZXMuDQogICAgICogQHR5cGUgaW50DQogICAgICogQHByb3BlcnR5IGxpbmUNCiAgICAgKi8NCiAgICB0aGlzLmxpbmUgPSBsaW5lOw0KDQogICAgLyoqDQogICAgICogVGhlIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXQuDQogICAgICogQHR5cGUgU3RyaW5nDQogICAgICogQHByb3BlcnR5IHRleHQNCiAgICAgKi8NCiAgICB0aGlzLnRleHQgPSB0ZXh0Ow0KDQp9DQoNCi8qKg0KICogQ3JlYXRlIGEgbmV3IHN5bnRheCB1bml0IGJhc2VkIHNvbGVseSBvbiB0aGUgZ2l2ZW4gdG9rZW4uDQogKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgbmV3IHN5bnRheCB1bml0IHdoZW4NCiAqIGl0IHJlcHJlc2VudHMgYSBzaW5nbGUgdG9rZW4gaW5zdGVhZCBvZiBtdWx0aXBsZS4NCiAqIEBwYXJhbSB7T2JqZWN0fSB0b2tlbiBUaGUgdG9rZW4gb2JqZWN0IHRvIHJlcHJlc2VudC4NCiAqIEByZXR1cm4ge3BhcnNlcmxpYi51dGlsLlN5bnRheFVuaXR9IFRoZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4NCiAqIEBzdGF0aWMNCiAqIEBtZXRob2QgZnJvbVRva2VuDQogKi8NClN5bnRheFVuaXQuZnJvbVRva2VuID0gZnVuY3Rpb24odG9rZW4pew0KICAgIHJldHVybiBuZXcgU3ludGF4VW5pdCh0b2tlbi52YWx1ZSwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7DQp9Ow0KDQpTeW50YXhVbml0LnByb3RvdHlwZSA9IHsNCg0KICAgIC8vcmVzdG9yZSBjb25zdHJ1Y3Rvcg0KICAgIGNvbnN0cnVjdG9yOiBTeW50YXhVbml0LA0KICAgIA0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXQuDQogICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC4NCiAgICAgKiBAbWV0aG9kIHZhbHVlT2YNCiAgICAgKi8NCiAgICB2YWx1ZU9mOiBmdW5jdGlvbigpew0KICAgICAgICByZXR1cm4gdGhpcy50b1N0cmluZygpOw0KICAgIH0sDQogICAgDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC4NCiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0Lg0KICAgICAqIEBtZXRob2QgdG9TdHJpbmcNCiAgICAgKi8NCiAgICB0b1N0cmluZzogZnVuY3Rpb24oKXsNCiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDsNCiAgICB9DQoNCn07DQovKioNCiAqIEdlbmVyaWMgVG9rZW5TdHJlYW0gcHJvdmlkaW5nIGJhc2UgZnVuY3Rpb25hbGl0eS4NCiAqIEBjbGFzcyBUb2tlblN0cmVhbUJhc2UNCiAqIEBuYW1lc3BhY2UgcGFyc2VybGliLnV0aWwNCiAqIEBjb25zdHJ1Y3Rvcg0KICogQHBhcmFtIHtTdHJpbmd8U3RyaW5nUmVhZGVyfSBpbnB1dCBUaGUgdGV4dCB0byB0b2tlbml6ZSBvciBhIHJlYWRlciBmcm9tIA0KICogICAgICB3aGljaCB0byByZWFkIHRoZSBpbnB1dC4NCiAqLw0KZnVuY3Rpb24gVG9rZW5TdHJlYW1CYXNlKGlucHV0LCB0b2tlbkRhdGEpew0KDQogICAgLyoqDQogICAgICogVGhlIHN0cmluZyByZWFkZXIgZm9yIGVhc3kgYWNjZXNzIHRvIHRoZSB0ZXh0Lg0KICAgICAqIEB0eXBlIFN0cmluZ1JlYWRlcg0KICAgICAqIEBwcm9wZXJ0eSBfcmVhZGVyDQogICAgICogQHByaXZhdGUNCiAgICAgKi8NCiAgICAvL3RoaXMuX3JlYWRlciA9ICh0eXBlb2YgaW5wdXQgPT0gInN0cmluZyIpID8gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCkgOiBpbnB1dDsNCiAgICB0aGlzLl9yZWFkZXIgPSBpbnB1dCA/IG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQudG9TdHJpbmcoKSkgOiBudWxsOw0KICAgIA0KICAgIC8qKg0KICAgICAqIFRva2VuIG9iamVjdCBmb3IgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4uDQogICAgICogQHR5cGUgVG9rZW4NCiAgICAgKiBAcHJvcGVydHkgX3Rva2VuDQogICAgICogQHByaXZhdGUNCiAgICAgKi8NCiAgICB0aGlzLl90b2tlbiA9IG51bGw7ICAgIA0KICAgIA0KICAgIC8qKg0KICAgICAqIFRoZSBhcnJheSBvZiB0b2tlbiBpbmZvcm1hdGlvbi4NCiAgICAgKiBAdHlwZSBBcnJheQ0KICAgICAqIEBwcm9wZXJ0eSBfdG9rZW5EYXRhDQogICAgICogQHByaXZhdGUNCiAgICAgKi8NCiAgICB0aGlzLl90b2tlbkRhdGEgPSB0b2tlbkRhdGE7DQogICAgDQogICAgLyoqDQogICAgICogTG9va2FoZWFkIHRva2VuIGJ1ZmZlci4NCiAgICAgKiBAdHlwZSBBcnJheQ0KICAgICAqIEBwcm9wZXJ0eSBfbHQNCiAgICAgKiBAcHJpdmF0ZQ0KICAgICAqLw0KICAgIHRoaXMuX2x0ID0gW107DQogICAgDQogICAgLyoqDQogICAgICogTG9va2FoZWFkIHRva2VuIGJ1ZmZlciBpbmRleC4NCiAgICAgKiBAdHlwZSBpbnQNCiAgICAgKiBAcHJvcGVydHkgX2x0SW5kZXgNCiAgICAgKiBAcHJpdmF0ZQ0KICAgICAqLw0KICAgIHRoaXMuX2x0SW5kZXggPSAwOw0KICAgIA0KICAgIHRoaXMuX2x0SW5kZXhDYWNoZSA9IFtdOw0KfQ0KDQovKioNCiAqIEFjY2VwdHMgYW4gYXJyYXkgb2YgdG9rZW4gaW5mb3JtYXRpb24gYW5kIG91dHB1dHMNCiAqIGFuIGFycmF5IG9mIHRva2VuIGRhdGEgY29udGFpbmluZyBrZXktdmFsdWUgbWFwcGluZ3MNCiAqIGFuZCBtYXRjaGluZyBmdW5jdGlvbnMgdGhhdCB0aGUgVG9rZW5TdHJlYW0gbmVlZHMuDQogKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgQW4gYXJyYXkgb2YgdG9rZW4gZGVzY3JpcHRvcnMuDQogKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgcHJvY2Vzc2VkIHRva2VuIGRhdGEuDQogKiBAbWV0aG9kIGNyZWF0ZVRva2VuRGF0YQ0KICogQHN0YXRpYw0KICovDQpUb2tlblN0cmVhbUJhc2UuY3JlYXRlVG9rZW5EYXRhID0gZnVuY3Rpb24odG9rZW5zKXsNCg0KICAgIHZhciBuYW1lTWFwIAk9IFtdLA0KICAgICAgICB0eXBlTWFwIAk9IHt9LA0KCQl0b2tlbkRhdGEgCT0gdG9rZW5zLmNvbmNhdChbXSksDQoJCWkJCQk9IDAsDQoJCWxlbgkJCT0gdG9rZW5EYXRhLmxlbmd0aCsxOw0KICAgIA0KICAgIHRva2VuRGF0YS5VTktOT1dOID0gLTE7DQoJdG9rZW5EYXRhLnVuc2hpZnQoe25hbWU6IkVPRiJ9KTsNCg0KICAgIGZvciAoOyBpIDwgbGVuOyBpKyspew0KICAgICAgICBuYW1lTWFwLnB1c2godG9rZW5EYXRhW2ldLm5hbWUpOw0KICAgICAgICB0b2tlbkRhdGFbdG9rZW5EYXRhW2ldLm5hbWVdID0gaTsNCiAgICAgICAgaWYgKHRva2VuRGF0YVtpXS50ZXh0KXsNCiAgICAgICAgICAgIHR5cGVNYXBbdG9rZW5EYXRhW2ldLnRleHRdID0gaTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICB0b2tlbkRhdGEubmFtZSA9IGZ1bmN0aW9uKHR0KXsNCiAgICAgICAgcmV0dXJuIG5hbWVNYXBbdHRdOw0KICAgIH07DQogICAgDQogICAgdG9rZW5EYXRhLnR5cGUgPSBmdW5jdGlvbihjKXsNCiAgICAgICAgcmV0dXJuIHR5cGVNYXBbY107DQogICAgfTsNCgkNCglyZXR1cm4gdG9rZW5EYXRhOw0KfTsNCg0KVG9rZW5TdHJlYW1CYXNlLnByb3RvdHlwZSA9IHsNCg0KICAgIC8vcmVzdG9yZSBjb25zdHJ1Y3Rvcg0KICAgIGNvbnN0cnVjdG9yOiBUb2tlblN0cmVhbUJhc2UsICAgIA0KICAgIA0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vIE1hdGNoaW5nIG1ldGhvZHMNCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICANCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIGdpdmVuIHRva2VuIHR5cGUuDQogICAgICogSWYgc28sIHRoYXQgdG9rZW4gaXMgY29uc3VtZWQ7IGlmIG5vdCwgdGhlIHRva2VuIGlzIHBsYWNlZA0KICAgICAqIGJhY2sgb250byB0aGUgdG9rZW4gc3RyZWFtLiBZb3UgY2FuIHBhc3MgaW4gYW55IG51bWJlciBvZg0KICAgICAqIHRva2VuIHR5cGVzIGFuZCB0aGlzIHdpbGwgcmV0dXJuIHRydWUgaWYgYW55IG9mIHRoZSB0b2tlbg0KICAgICAqIHR5cGVzIGlzIGZvdW5kLg0KICAgICAqIEBwYXJhbSB7aW50fGludFtdfSB0b2tlblR5cGVzIEVpdGhlciBhIHNpbmdsZSB0b2tlbiB0eXBlIG9yIGFuIGFycmF5IG9mDQogICAgICogICAgICB0b2tlbiB0eXBlcyB0aGF0IHRoZSBuZXh0IHRva2VuIG1pZ2h0IGJlLiBJZiBhbiBhcnJheSBpcyBwYXNzZWQsDQogICAgICogICAgICBpdCdzIGFzc3VtZWQgdGhhdCB0aGUgdG9rZW4gY2FuIGJlIGFueSBvZiB0aGVzZS4NCiAgICAgKiBAcGFyYW0ge3ZhcmlhbnR9IGNoYW5uZWwgKE9wdGlvbmFsKSBUaGUgY2hhbm5lbCB0byByZWFkIGZyb20uIElmIG5vdA0KICAgICAqICAgICAgcHJvdmlkZWQsIHJlYWRzIGZyb20gdGhlIGRlZmF1bHQgKHVubmFtZWQpIGNoYW5uZWwuDQogICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdG9rZW4gdHlwZSBtYXRjaGVzLCBmYWxzZSBpZiBub3QuDQogICAgICogQG1ldGhvZCBtYXRjaA0KICAgICAqLw0KICAgIG1hdGNoOiBmdW5jdGlvbih0b2tlblR5cGVzLCBjaGFubmVsKXsNCiAgICANCiAgICAgICAgLy9hbHdheXMgY29udmVydCB0byBhbiBhcnJheSwgbWFrZXMgdGhpbmdzIGVhc2llcg0KICAgICAgICBpZiAoISh0b2tlblR5cGVzIGluc3RhbmNlb2YgQXJyYXkpKXsNCiAgICAgICAgICAgIHRva2VuVHlwZXMgPSBbdG9rZW5UeXBlc107DQogICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgdmFyIHR0ICA9IHRoaXMuZ2V0KGNoYW5uZWwpLA0KICAgICAgICAgICAgaSAgID0gMCwNCiAgICAgICAgICAgIGxlbiA9IHRva2VuVHlwZXMubGVuZ3RoOw0KICAgICAgICAgICAgDQogICAgICAgIHdoaWxlKGkgPCBsZW4pew0KICAgICAgICAgICAgaWYgKHR0ID09IHRva2VuVHlwZXNbaSsrXSl7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vbm8gbWF0Y2ggZm91bmQsIHB1dCB0aGUgdG9rZW4gYmFjaw0KICAgICAgICB0aGlzLnVuZ2V0KCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9LCAgICANCiAgICANCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIGdpdmVuIHRva2VuIHR5cGUuDQogICAgICogSWYgc28sIHRoYXQgdG9rZW4gaXMgY29uc3VtZWQ7IGlmIG5vdCwgYW4gZXJyb3IgaXMgdGhyb3duLg0KICAgICAqIEBwYXJhbSB7aW50fGludFtdfSB0b2tlblR5cGVzIEVpdGhlciBhIHNpbmdsZSB0b2tlbiB0eXBlIG9yIGFuIGFycmF5IG9mDQogICAgICogICAgICB0b2tlbiB0eXBlcyB0aGF0IHRoZSBuZXh0IHRva2VuIHNob3VsZCBiZS4gSWYgYW4gYXJyYXkgaXMgcGFzc2VkLA0KICAgICAqICAgICAgaXQncyBhc3N1bWVkIHRoYXQgdGhlIHRva2VuIG11c3QgYmUgb25lIG9mIHRoZXNlLg0KICAgICAqIEBwYXJhbSB7dmFyaWFudH0gY2hhbm5lbCAoT3B0aW9uYWwpIFRoZSBjaGFubmVsIHRvIHJlYWQgZnJvbS4gSWYgbm90DQogICAgICogICAgICBwcm92aWRlZCwgcmVhZHMgZnJvbSB0aGUgZGVmYXVsdCAodW5uYW1lZCkgY2hhbm5lbC4NCiAgICAgKiBAcmV0dXJuIHt2b2lkfQ0KICAgICAqIEBtZXRob2QgbXVzdE1hdGNoDQogICAgICovICAgIA0KICAgIG11c3RNYXRjaDogZnVuY3Rpb24odG9rZW5UeXBlcywgY2hhbm5lbCl7DQoNCiAgICAgICAgLy9hbHdheXMgY29udmVydCB0byBhbiBhcnJheSwgbWFrZXMgdGhpbmdzIGVhc2llcg0KICAgICAgICBpZiAoISh0b2tlblR5cGVzIGluc3RhbmNlb2YgQXJyYXkpKXsNCiAgICAgICAgICAgIHRva2VuVHlwZXMgPSBbdG9rZW5UeXBlc107DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIXRoaXMubWF0Y2guYXBwbHkodGhpcywgYXJndW1lbnRzKSl7ICAgIA0KICAgICAgICAgICAgdG9rZW4gPSB0aGlzLkxUKDEpOw0KICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCJFeHBlY3RlZCAiICsgdGhpcy5fdG9rZW5EYXRhW3Rva2VuVHlwZXNbMF1dLm5hbWUgKyANCiAgICAgICAgICAgICAgICAiIGF0IGxpbmUgIiArIHRva2VuLnN0YXJ0TGluZSArICIsIGNvbCAiICsgdG9rZW4uc3RhcnRDb2wgKyAiLiIsIHRva2VuLnN0YXJ0TGluZSwgdG9rZW4uc3RhcnRDb2wpOw0KICAgICAgICB9DQogICAgfSwNCiAgICANCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAvLyBDb25zdW1pbmcgbWV0aG9kcw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIA0KICAgIC8qKg0KICAgICAqIEtlZXBzIHJlYWRpbmcgZnJvbSB0aGUgdG9rZW4gc3RyZWFtIHVudGlsIGVpdGhlciBvbmUgb2YgdGhlIHNwZWNpZmllZA0KICAgICAqIHRva2VuIHR5cGVzIGlzIGZvdW5kIG9yIHVudGlsIHRoZSBlbmQgb2YgdGhlIGlucHV0IGlzIHJlYWNoZWQuDQogICAgICogQHBhcmFtIHtpbnR8aW50W119IHRva2VuVHlwZXMgRWl0aGVyIGEgc2luZ2xlIHRva2VuIHR5cGUgb3IgYW4gYXJyYXkgb2YNCiAgICAgKiAgICAgIHRva2VuIHR5cGVzIHRoYXQgdGhlIG5leHQgdG9rZW4gc2hvdWxkIGJlLiBJZiBhbiBhcnJheSBpcyBwYXNzZWQsDQogICAgICogICAgICBpdCdzIGFzc3VtZWQgdGhhdCB0aGUgdG9rZW4gbXVzdCBiZSBvbmUgb2YgdGhlc2UuDQogICAgICogQHBhcmFtIHt2YXJpYW50fSBjaGFubmVsIChPcHRpb25hbCkgVGhlIGNoYW5uZWwgdG8gcmVhZCBmcm9tLiBJZiBub3QNCiAgICAgKiAgICAgIHByb3ZpZGVkLCByZWFkcyBmcm9tIHRoZSBkZWZhdWx0ICh1bm5hbWVkKSBjaGFubmVsLg0KICAgICAqIEByZXR1cm4ge3ZvaWR9DQogICAgICogQG1ldGhvZCBhZHZhbmNlDQogICAgICovDQogICAgYWR2YW5jZTogZnVuY3Rpb24odG9rZW5UeXBlcywgY2hhbm5lbCl7DQogICAgICAgIA0KICAgICAgICB3aGlsZSh0aGlzLkxBKDApICE9IDAgJiYgIXRoaXMubWF0Y2godG9rZW5UeXBlcywgY2hhbm5lbCkpew0KICAgICAgICAgICAgdGhpcy5nZXQoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0aGlzLkxBKDApOyAgICANCiAgICB9LA0KICAgIA0KICAgIC8qKg0KICAgICAqIENvbnN1bWVzIHRoZSBuZXh0IHRva2VuIGZyb20gdGhlIHRva2VuIHN0cmVhbS4gDQogICAgICogQHJldHVybiB7aW50fSBUaGUgdG9rZW4gdHlwZSBvZiB0aGUgdG9rZW4gdGhhdCB3YXMganVzdCBjb25zdW1lZC4NCiAgICAgKiBAbWV0aG9kIGdldA0KICAgICAqLyAgICAgIA0KICAgIGdldDogZnVuY3Rpb24oY2hhbm5lbCl7DQogICAgDQogICAgICAgIHZhciB0b2tlbkluZm8gICA9IHRoaXMuX3Rva2VuRGF0YSwNCiAgICAgICAgICAgIHJlYWRlciAgICAgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgdmFsdWUsDQogICAgICAgICAgICBpICAgICAgICAgICA9MCwNCiAgICAgICAgICAgIGxlbiAgICAgICAgID0gdG9rZW5JbmZvLmxlbmd0aCwNCiAgICAgICAgICAgIGZvdW5kICAgICAgID0gZmFsc2UsDQogICAgICAgICAgICB0b2tlbiwNCiAgICAgICAgICAgIGluZm87DQogICAgICAgICAgICANCiAgICAgICAgLy9jaGVjayB0aGUgbG9va2FoZWFkIGJ1ZmZlciBmaXJzdA0KICAgICAgICBpZiAodGhpcy5fbHQubGVuZ3RoICYmIHRoaXMuX2x0SW5kZXggPj0gMCAmJiB0aGlzLl9sdEluZGV4IDwgdGhpcy5fbHQubGVuZ3RoKXsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICBpKys7DQogICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRoaXMuX2x0W3RoaXMuX2x0SW5kZXgrK107DQogICAgICAgICAgICBpbmZvID0gdG9rZW5JbmZvW3RoaXMuX3Rva2VuLnR5cGVdOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvL29iZXkgY2hhbm5lbHMgbG9naWMNCiAgICAgICAgICAgIHdoaWxlKChpbmZvLmNoYW5uZWwgIT09IHVuZGVmaW5lZCAmJiBjaGFubmVsICE9PSBpbmZvLmNoYW5uZWwpICYmDQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2x0SW5kZXggPCB0aGlzLl9sdC5sZW5ndGgpew0KICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuID0gdGhpcy5fbHRbdGhpcy5fbHRJbmRleCsrXTsNCiAgICAgICAgICAgICAgICBpbmZvID0gdG9rZW5JbmZvW3RoaXMuX3Rva2VuLnR5cGVdOw0KICAgICAgICAgICAgICAgIGkrKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy9oZXJlIGJlIGRyYWdvbnMNCiAgICAgICAgICAgIGlmICgoaW5mby5jaGFubmVsID09PSB1bmRlZmluZWQgfHwgY2hhbm5lbCA9PT0gaW5mby5jaGFubmVsKSAmJg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9sdEluZGV4IDw9IHRoaXMuX2x0Lmxlbmd0aCl7DQogICAgICAgICAgICAgICAgdGhpcy5fbHRJbmRleENhY2hlLnB1c2goaSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuLnR5cGU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vY2FsbCB0b2tlbiByZXRyaWV2ZXIgbWV0aG9kDQoJCXRva2VuID0gdGhpcy5fZ2V0VG9rZW4oKTsNCg0KICAgICAgICAvL2lmIGl0IHNob3VsZCBiZSBoaWRkZW4sIGRvbid0IHNhdmUgYSB0b2tlbg0KICAgICAgICBpZiAodG9rZW4udHlwZSA+IC0xICYmICF0b2tlbkluZm9bdG9rZW4udHlwZV0uaGlkZSl7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIC8vYXBwbHkgdG9rZW4gY2hhbm5lbA0KICAgICAgICAgICAgdG9rZW4uY2hhbm5lbCA9IHRva2VuSW5mb1t0b2tlbi50eXBlXS5jaGFubmVsOw0KICAgICAgICAgDQogICAgICAgICAgICAvL3NhdmUgZm9yIGxhdGVyDQogICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRva2VuOw0KICAgICAgICAgICAgdGhpcy5fbHQucHVzaCh0b2tlbik7DQoNCiAgICAgICAgICAgIC8vc2F2ZSBzcGFjZSB0aGF0IHdpbGwgYmUgbW92ZWQgKG11c3QgYmUgZG9uZSBiZWZvcmUgYXJyYXkgaXMgdHJ1bmNhdGVkKQ0KICAgICAgICAgICAgdGhpcy5fbHRJbmRleENhY2hlLnB1c2godGhpcy5fbHQubGVuZ3RoIC0gdGhpcy5fbHRJbmRleCArIGkpOyAgDQogICAgICAgIA0KICAgICAgICAgICAgLy9rZWVwIHRoZSBidWZmZXIgdW5kZXIgNSBpdGVtcw0KICAgICAgICAgICAgaWYgKHRoaXMuX2x0Lmxlbmd0aCA+IDUpew0KICAgICAgICAgICAgICAgIHRoaXMuX2x0LnNoaWZ0KCk7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAvL2Fsc28ga2VlcCB0aGUgc2hpZnQgYnVmZmVyIHVuZGVyIDUgaXRlbXMNCiAgICAgICAgICAgIGlmICh0aGlzLl9sdEluZGV4Q2FjaGUubGVuZ3RoID4gNSl7DQogICAgICAgICAgICAgICAgdGhpcy5fbHRJbmRleENhY2hlLnNoaWZ0KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAvL3VwZGF0ZSBsb29rYWhlYWQgaW5kZXgNCiAgICAgICAgICAgIHRoaXMuX2x0SW5kZXggPSB0aGlzLl9sdC5sZW5ndGg7DQogICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAvKg0KICAgICAgICAgKiBTa2lwIHRvIHRoZSBuZXh0IHRva2VuIGlmOg0KICAgICAgICAgKiAxLiBUaGUgdG9rZW4gdHlwZSBpcyBtYXJrZWQgYXMgaGlkZGVuLg0KICAgICAgICAgKiAyLiBUaGUgdG9rZW4gdHlwZSBoYXMgYSBjaGFubmVsIHNwZWNpZmllZCBhbmQgaXQgaXNuJ3QgdGhlIGN1cnJlbnQgY2hhbm5lbC4NCiAgICAgICAgICovDQogICAgICAgIGluZm8gPSB0b2tlbkluZm9bdG9rZW4udHlwZV07DQogICAgICAgIGlmIChpbmZvICYmIA0KICAgICAgICAgICAgICAgIChpbmZvLmhpZGUgfHwgDQogICAgICAgICAgICAgICAgKGluZm8uY2hhbm5lbCAhPT0gdW5kZWZpbmVkICYmIGNoYW5uZWwgIT09IGluZm8uY2hhbm5lbCkpKXsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChjaGFubmVsKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vcmV0dXJuIGp1c3QgdGhlIHR5cGUNCiAgICAgICAgICAgIHJldHVybiB0b2tlbi50eXBlOw0KICAgICAgICB9DQogICAgfSwNCiAgICANCiAgICAvKioNCiAgICAgKiBMb29rcyBhaGVhZCBhIGNlcnRhaW4gbnVtYmVyIG9mIHRva2VucyBhbmQgcmV0dXJucyB0aGUgdG9rZW4gdHlwZSBhdA0KICAgICAqIHRoYXQgcG9zaXRpb24uIFRoaXMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB5b3UgbG9va2FoZWFkIHBhc3QgdGhlDQogICAgICogZW5kIG9mIGlucHV0LCBwYXN0IHRoZSBzaXplIG9mIHRoZSBsb29rYWhlYWQgYnVmZmVyLCBvciBiYWNrIHBhc3QNCiAgICAgKiB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlIGxvb2thaGVhZCBidWZmZXIuDQogICAgICogQHBhcmFtIHtpbnR9IFRoZSBpbmRleCBvZiB0aGUgdG9rZW4gdHlwZSB0byByZXRyaWV2ZS4gMCBmb3IgdGhlDQogICAgICogICAgICBjdXJyZW50IHRva2VuLCAxIGZvciB0aGUgbmV4dCwgLTEgZm9yIHRoZSBwcmV2aW91cywgZXRjLg0KICAgICAqIEByZXR1cm4ge2ludH0gVGhlIHRva2VuIHR5cGUgb2YgdGhlIHRva2VuIGluIHRoZSBnaXZlbiBwb3NpdGlvbi4NCiAgICAgKiBAbWV0aG9kIExBDQogICAgICovDQogICAgTEE6IGZ1bmN0aW9uKGluZGV4KXsNCiAgICAgICAgdmFyIHRvdGFsID0gaW5kZXgsDQogICAgICAgICAgICB0dDsNCiAgICAgICAgaWYgKGluZGV4ID4gMCl7DQogICAgICAgICAgICAvL1RPRE86IFN0b3JlIDUgc29tZXdoZXJlDQogICAgICAgICAgICBpZiAoaW5kZXggPiA1KXsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRvbyBtdWNoIGxvb2thaGVhZC4iKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICAvL2dldCBhbGwgdGhvc2UgdG9rZW5zDQogICAgICAgICAgICB3aGlsZSh0b3RhbCl7DQogICAgICAgICAgICAgICAgdHQgPSB0aGlzLmdldCgpOyAgIA0KICAgICAgICAgICAgICAgIHRvdGFsLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAvL3VuZ2V0IGFsbCB0aG9zZSB0b2tlbnMNCiAgICAgICAgICAgIHdoaWxlKHRvdGFsIDwgaW5kZXgpew0KICAgICAgICAgICAgICAgIHRoaXMudW5nZXQoKTsNCiAgICAgICAgICAgICAgICB0b3RhbCsrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKGluZGV4IDwgMCl7DQogICAgICAgIA0KICAgICAgICAgICAgaWYodGhpcy5fbHRbdGhpcy5fbHRJbmRleCtpbmRleF0pew0KICAgICAgICAgICAgICAgIHR0ID0gdGhpcy5fbHRbdGhpcy5fbHRJbmRleCtpbmRleF0udHlwZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUb28gbXVjaCBsb29rYmVoaW5kLiIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHR0ID0gdGhpcy5fdG9rZW4udHlwZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuIHR0Ow0KICAgIA0KICAgIH0sDQogICAgDQogICAgLyoqDQogICAgICogTG9va3MgYWhlYWQgYSBjZXJ0YWluIG51bWJlciBvZiB0b2tlbnMgYW5kIHJldHVybnMgdGhlIHRva2VuIGF0DQogICAgICogdGhhdCBwb3NpdGlvbi4gVGhpcyB3aWxsIHRocm93IGFuIGVycm9yIGlmIHlvdSBsb29rYWhlYWQgcGFzdCB0aGUNCiAgICAgKiBlbmQgb2YgaW5wdXQsIHBhc3QgdGhlIHNpemUgb2YgdGhlIGxvb2thaGVhZCBidWZmZXIsIG9yIGJhY2sgcGFzdA0KICAgICAqIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgbG9va2FoZWFkIGJ1ZmZlci4NCiAgICAgKiBAcGFyYW0ge2ludH0gVGhlIGluZGV4IG9mIHRoZSB0b2tlbiB0eXBlIHRvIHJldHJpZXZlLiAwIGZvciB0aGUNCiAgICAgKiAgICAgIGN1cnJlbnQgdG9rZW4sIDEgZm9yIHRoZSBuZXh0LCAtMSBmb3IgdGhlIHByZXZpb3VzLCBldGMuDQogICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgdG9rZW4gb2YgdGhlIHRva2VuIGluIHRoZSBnaXZlbiBwb3NpdGlvbi4NCiAgICAgKiBAbWV0aG9kIExBDQogICAgICovICAgIA0KICAgIExUOiBmdW5jdGlvbihpbmRleCl7DQogICAgDQogICAgICAgIC8vbG9va2FoZWFkIGZpcnN0IHRvIHByaW1lIHRoZSB0b2tlbiBidWZmZXINCiAgICAgICAgdGhpcy5MQShpbmRleCk7DQogICAgICAgIA0KICAgICAgICAvL25vdyBmaW5kIHRoZSB0b2tlbiwgc3VidHJhY3Qgb25lIGJlY2F1c2UgX2x0SW5kZXggaXMgYWxyZWFkeSBhdCB0aGUgbmV4dCBpbmRleA0KICAgICAgICByZXR1cm4gdGhpcy5fbHRbdGhpcy5fbHRJbmRleCtpbmRleC0xXTsgICAgDQogICAgfSwNCiAgICANCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIHRoZSB0b2tlbiB0eXBlIGZvciB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgc3RyZWFtIHdpdGhvdXQgDQogICAgICogY29uc3VtaW5nIGl0Lg0KICAgICAqIEByZXR1cm4ge2ludH0gVGhlIHRva2VuIHR5cGUgb2YgdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmVhbS4NCiAgICAgKiBAbWV0aG9kIHBlZWsNCiAgICAgKi8NCiAgICBwZWVrOiBmdW5jdGlvbigpew0KICAgICAgICByZXR1cm4gdGhpcy5MQSgxKTsNCiAgICB9LA0KICAgIA0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCB0b2tlbiBvYmplY3QgZm9yIHRoZSBsYXN0IGNvbnN1bWVkIHRva2VuLg0KICAgICAqIEByZXR1cm4ge1Rva2VufSBUaGUgdG9rZW4gb2JqZWN0IGZvciB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbi4NCiAgICAgKiBAbWV0aG9kIHRva2VuDQogICAgICovDQogICAgdG9rZW46IGZ1bmN0aW9uKCl7DQogICAgICAgIHJldHVybiB0aGlzLl90b2tlbjsNCiAgICB9LA0KICAgIA0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRva2VuIGZvciB0aGUgZ2l2ZW4gdG9rZW4gdHlwZS4NCiAgICAgKiBAcGFyYW0ge2ludH0gdG9rZW5UeXBlIFRoZSB0eXBlIG9mIHRva2VuIHRvIGdldCB0aGUgbmFtZSBvZi4NCiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSB0b2tlbiBvciAiVU5LTk9XTl9UT0tFTiIgZm9yIGFueQ0KICAgICAqICAgICAgaW52YWxpZCB0b2tlbiB0eXBlLg0KICAgICAqIEBtZXRob2QgdG9rZW5OYW1lDQogICAgICovDQogICAgdG9rZW5OYW1lOiBmdW5jdGlvbih0b2tlblR5cGUpew0KICAgICAgICBpZiAodG9rZW5UeXBlIDwgMCB8fCB0b2tlblR5cGUgPiB0aGlzLl90b2tlbkRhdGEubGVuZ3RoKXsNCiAgICAgICAgICAgIHJldHVybiAiVU5LTk9XTl9UT0tFTiI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5EYXRhW3Rva2VuVHlwZV0ubmFtZTsNCiAgICAgICAgfQ0KICAgIH0sDQogICAgDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgdG9rZW4gdHlwZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHRva2VuIG5hbWUuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuTmFtZSBUaGUgbmFtZSBvZiB0aGUgdG9rZW4gd2hvc2UgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkLg0KICAgICAqIEByZXR1cm4ge2ludH0gVGhlIHRva2VuIHR5cGUgdmFsdWUgZm9yIHRoZSBnaXZlbiB0b2tlbiBuYW1lIG9yIC0xDQogICAgICogICAgICBmb3IgYW4gdW5rbm93biB0b2tlbi4NCiAgICAgKiBAbWV0aG9kIHRva2VuTmFtZQ0KICAgICAqLyAgICANCiAgICB0b2tlblR5cGU6IGZ1bmN0aW9uKHRva2VuTmFtZSl7DQogICAgICAgIHJldHVybiB0aGlzLl90b2tlbkRhdGFbdG9rZW5OYW1lXSB8fCAtMTsNCiAgICB9LA0KICAgIA0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4gdG8gdGhlIHRva2VuIHN0cmVhbS4NCiAgICAgKiBAbWV0aG9kIHVuZ2V0DQogICAgICovICAgICAgDQogICAgdW5nZXQ6IGZ1bmN0aW9uKCl7DQogICAgICAgIC8vaWYgKHRoaXMuX2x0SW5kZXggPiAtMSl7DQogICAgICAgIGlmICh0aGlzLl9sdEluZGV4Q2FjaGUubGVuZ3RoKXsNCiAgICAgICAgICAgIHRoaXMuX2x0SW5kZXggLT0gdGhpcy5fbHRJbmRleENhY2hlLnBvcCgpOy8vLS07DQogICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRoaXMuX2x0W3RoaXMuX2x0SW5kZXggLSAxXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVG9vIG11Y2ggbG9va2FoZWFkLiIpOw0KICAgICAgICB9DQogICAgfQ0KDQp9Ow0KDQoNCg0KcGFyc2VybGliLnV0aWwgPSB7DQpTdHJpbmdSZWFkZXI6IFN0cmluZ1JlYWRlciwNClN5bnRheEVycm9yIDogU3ludGF4RXJyb3IsDQpTeW50YXhVbml0ICA6IFN5bnRheFVuaXQsDQpFdmVudFRhcmdldCA6IEV2ZW50VGFyZ2V0LA0KVG9rZW5TdHJlYW1CYXNlIDogVG9rZW5TdHJlYW1CYXNlDQp9Ow0KfSkoKTsNCg0KLyogDQpQYXJzZXItTGliDQpDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCg0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0Kb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMNCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4NCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KDQpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQpPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElODQpUSEUgU09GVFdBUkUuDQoNCiovDQovKiBCdWlsZCB0aW1lOiAxMy1KdWx5LTIwMTEgMDQ6MzU6MjggKi8NCihmdW5jdGlvbigpew0KdmFyIEV2ZW50VGFyZ2V0ID0gcGFyc2VybGliLnV0aWwuRXZlbnRUYXJnZXQsDQpUb2tlblN0cmVhbUJhc2UgPSBwYXJzZXJsaWIudXRpbC5Ub2tlblN0cmVhbUJhc2UsDQpTdHJpbmdSZWFkZXIgPSBwYXJzZXJsaWIudXRpbC5TdHJpbmdSZWFkZXIsDQpTeW50YXhFcnJvciA9IHBhcnNlcmxpYi51dGlsLlN5bnRheEVycm9yLA0KU3ludGF4VW5pdCAgPSBwYXJzZXJsaWIudXRpbC5TeW50YXhVbml0Ow0KDQp2YXIgQ29sb3JzID0gew0KICAgIGFsaWNlYmx1ZSAgICAgICA6IiNmMGY4ZmYiLA0KICAgIGFudGlxdWV3aGl0ZSAgICA6IiNmYWViZDciLA0KICAgIGFxdWEgICAgICAgICAgICA6IiMwMGZmZmYiLA0KICAgIGFxdWFtYXJpbmUgICAgICA6IiM3ZmZmZDQiLA0KICAgIGF6dXJlICAgICAgICAgICA6IiNmMGZmZmYiLA0KICAgIGJlaWdlICAgICAgICAgICA6IiNmNWY1ZGMiLA0KICAgIGJpc3F1ZSAgICAgICAgICA6IiNmZmU0YzQiLA0KICAgIGJsYWNrICAgICAgICAgICA6IiMwMDAwMDAiLA0KICAgIGJsYW5jaGVkYWxtb25kICA6IiNmZmViY2QiLA0KICAgIGJsdWUgICAgICAgICAgICA6IiMwMDAwZmYiLA0KICAgIGJsdWV2aW9sZXQgICAgICA6IiM4YTJiZTIiLA0KICAgIGJyb3duICAgICAgICAgICA6IiNhNTJhMmEiLA0KICAgIGJ1cmx5d29vZCAgICAgICA6IiNkZWI4ODciLA0KICAgIGNhZGV0Ymx1ZSAgICAgICA6IiM1ZjllYTAiLA0KICAgIGNoYXJ0cmV1c2UgICAgICA6IiM3ZmZmMDAiLA0KICAgIGNob2NvbGF0ZSAgICAgICA6IiNkMjY5MWUiLA0KICAgIGNvcmFsICAgICAgICAgICA6IiNmZjdmNTAiLA0KICAgIGNvcm5mbG93ZXJibHVlICA6IiM2NDk1ZWQiLA0KICAgIGNvcm5zaWxrICAgICAgICA6IiNmZmY4ZGMiLA0KICAgIGNyaW1zb24gICAgICAgICA6IiNkYzE0M2MiLA0KICAgIGN5YW4gICAgICAgICAgICA6IiMwMGZmZmYiLA0KICAgIGRhcmtibHVlICAgICAgICA6IiMwMDAwOGIiLA0KICAgIGRhcmtjeWFuICAgICAgICA6IiMwMDhiOGIiLA0KICAgIGRhcmtnb2xkZW5yb2QgICA6IiNiODg2MGIiLA0KICAgIGRhcmtncmF5ICAgICAgICA6IiNhOWE5YTkiLA0KICAgIGRhcmtncmVlbiAgICAgICA6IiMwMDY0MDAiLA0KICAgIGRhcmtraGFraSAgICAgICA6IiNiZGI3NmIiLA0KICAgIGRhcmttYWdlbnRhICAgICA6IiM4YjAwOGIiLA0KICAgIGRhcmtvbGl2ZWdyZWVuICA6IiM1NTZiMmYiLA0KICAgIGRhcmtvcmFuZ2UgICAgICA6IiNmZjhjMDAiLA0KICAgIGRhcmtvcmNoaWQgICAgICA6IiM5OTMyY2MiLA0KICAgIGRhcmtyZWQgICAgICAgICA6IiM4YjAwMDAiLA0KICAgIGRhcmtzYWxtb24gICAgICA6IiNlOTk2N2EiLA0KICAgIGRhcmtzZWFncmVlbiAgICA6IiM4ZmJjOGYiLA0KICAgIGRhcmtzbGF0ZWJsdWUgICA6IiM0ODNkOGIiLA0KICAgIGRhcmtzbGF0ZWdyYXkgICA6IiMyZjRmNGYiLA0KICAgIGRhcmt0dXJxdW9pc2UgICA6IiMwMGNlZDEiLA0KICAgIGRhcmt2aW9sZXQgICAgICA6IiM5NDAwZDMiLA0KICAgIGRlZXBwaW5rICAgICAgICA6IiNmZjE0OTMiLA0KICAgIGRlZXBza3libHVlICAgICA6IiMwMGJmZmYiLA0KICAgIGRpbWdyYXkgICAgICAgICA6IiM2OTY5NjkiLA0KICAgIGRvZGdlcmJsdWUgICAgICA6IiMxZTkwZmYiLA0KICAgIGZpcmVicmljayAgICAgICA6IiNiMjIyMjIiLA0KICAgIGZsb3JhbHdoaXRlICAgICA6IiNmZmZhZjAiLA0KICAgIGZvcmVzdGdyZWVuICAgICA6IiMyMjhiMjIiLA0KICAgIGZ1Y2hzaWEgICAgICAgICA6IiNmZjAwZmYiLA0KICAgIGdhaW5zYm9ybyAgICAgICA6IiNkY2RjZGMiLA0KICAgIGdob3N0d2hpdGUgICAgICA6IiNmOGY4ZmYiLA0KICAgIGdvbGQgICAgICAgICAgICA6IiNmZmQ3MDAiLA0KICAgIGdvbGRlbnJvZCAgICAgICA6IiNkYWE1MjAiLA0KICAgIGdyYXkgICAgICAgICAgICA6IiM4MDgwODAiLA0KICAgIGdyZWVuICAgICAgICAgICA6IiMwMDgwMDAiLA0KICAgIGdyZWVueWVsbG93ICAgICA6IiNhZGZmMmYiLA0KICAgIGhvbmV5ZGV3ICAgICAgICA6IiNmMGZmZjAiLA0KICAgIGhvdHBpbmsgICAgICAgICA6IiNmZjY5YjQiLA0KICAgIGluZGlhbnJlZCAgICAgICA6IiNjZDVjNWMiLA0KICAgIGluZGlnbyAgICAgICAgICA6IiM0YjAwODIiLA0KICAgIGl2b3J5ICAgICAgICAgICA6IiNmZmZmZjAiLA0KICAgIGtoYWtpICAgICAgICAgICA6IiNmMGU2OGMiLA0KICAgIGxhdmVuZGVyICAgICAgICA6IiNlNmU2ZmEiLA0KICAgIGxhdmVuZGVyYmx1c2ggICA6IiNmZmYwZjUiLA0KICAgIGxhd25ncmVlbiAgICAgICA6IiM3Y2ZjMDAiLA0KICAgIGxlbW9uY2hpZmZvbiAgICA6IiNmZmZhY2QiLA0KICAgIGxpZ2h0Ymx1ZSAgICAgICA6IiNhZGQ4ZTYiLA0KICAgIGxpZ2h0Y29yYWwgICAgICA6IiNmMDgwODAiLA0KICAgIGxpZ2h0Y3lhbiAgICAgICA6IiNlMGZmZmYiLA0KICAgIGxpZ2h0Z29sZGVucm9keWVsbG93ICA6IiNmYWZhZDIiLA0KICAgIGxpZ2h0Z3JleSAgICAgICA6IiNkM2QzZDMiLA0KICAgIGxpZ2h0Z3JlZW4gICAgICA6IiM5MGVlOTAiLA0KICAgIGxpZ2h0cGluayAgICAgICA6IiNmZmI2YzEiLA0KICAgIGxpZ2h0c2FsbW9uICAgICA6IiNmZmEwN2EiLA0KICAgIGxpZ2h0c2VhZ3JlZW4gICA6IiMyMGIyYWEiLA0KICAgIGxpZ2h0c2t5Ymx1ZSAgICA6IiM4N2NlZmEiLA0KICAgIGxpZ2h0c2xhdGVncmF5ICA6IiM3Nzg4OTkiLA0KICAgIGxpZ2h0c3RlZWxibHVlICA6IiNiMGM0ZGUiLA0KICAgIGxpZ2h0eWVsbG93ICAgICA6IiNmZmZmZTAiLA0KICAgIGxpbWUgICAgICAgICAgICA6IiMwMGZmMDAiLA0KICAgIGxpbWVncmVlbiAgICAgICA6IiMzMmNkMzIiLA0KICAgIGxpbmVuICAgICAgICAgICA6IiNmYWYwZTYiLA0KICAgIG1hZ2VudGEgICAgICAgICA6IiNmZjAwZmYiLA0KICAgIG1hcm9vbiAgICAgICAgICA6IiM4MDAwMDAiLA0KICAgIG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLA0KICAgIG1lZGl1bWJsdWUgICAgICA6IiMwMDAwY2QiLA0KICAgIG1lZGl1bW9yY2hpZCAgICA6IiNiYTU1ZDMiLA0KICAgIG1lZGl1bXB1cnBsZSAgICA6IiM5MzcwZDgiLA0KICAgIG1lZGl1bXNlYWdyZWVuICA6IiMzY2IzNzEiLA0KICAgIG1lZGl1bXNsYXRlYmx1ZSA6IiM3YjY4ZWUiLA0KICAgIG1lZGl1bXNwcmluZ2dyZWVuICAgOiIjMDBmYTlhIiwNCiAgICBtZWRpdW10dXJxdW9pc2UgOiIjNDhkMWNjIiwNCiAgICBtZWRpdW12aW9sZXRyZWQgOiIjYzcxNTg1IiwNCiAgICBtaWRuaWdodGJsdWUgICAgOiIjMTkxOTcwIiwNCiAgICBtaW50Y3JlYW0gICAgICAgOiIjZjVmZmZhIiwNCiAgICBtaXN0eXJvc2UgICAgICAgOiIjZmZlNGUxIiwNCiAgICBtb2NjYXNpbiAgICAgICAgOiIjZmZlNGI1IiwNCiAgICBuYXZham93aGl0ZSAgICAgOiIjZmZkZWFkIiwNCiAgICBuYXZ5ICAgICAgICAgICAgOiIjMDAwMDgwIiwNCiAgICBvbGRsYWNlICAgICAgICAgOiIjZmRmNWU2IiwNCiAgICBvbGl2ZSAgICAgICAgICAgOiIjODA4MDAwIiwNCiAgICBvbGl2ZWRyYWIgICAgICAgOiIjNmI4ZTIzIiwNCiAgICBvcmFuZ2UgICAgICAgICAgOiIjZmZhNTAwIiwNCiAgICBvcmFuZ2VyZWQgICAgICAgOiIjZmY0NTAwIiwNCiAgICBvcmNoaWQgICAgICAgICAgOiIjZGE3MGQ2IiwNCiAgICBwYWxlZ29sZGVucm9kICAgOiIjZWVlOGFhIiwNCiAgICBwYWxlZ3JlZW4gICAgICAgOiIjOThmYjk4IiwNCiAgICBwYWxldHVycXVvaXNlICAgOiIjYWZlZWVlIiwNCiAgICBwYWxldmlvbGV0cmVkICAgOiIjZDg3MDkzIiwNCiAgICBwYXBheWF3aGlwICAgICAgOiIjZmZlZmQ1IiwNCiAgICBwZWFjaHB1ZmYgICAgICAgOiIjZmZkYWI5IiwNCiAgICBwZXJ1ICAgICAgICAgICAgOiIjY2Q4NTNmIiwNCiAgICBwaW5rICAgICAgICAgICAgOiIjZmZjMGNiIiwNCiAgICBwbHVtICAgICAgICAgICAgOiIjZGRhMGRkIiwNCiAgICBwb3dkZXJibHVlICAgICAgOiIjYjBlMGU2IiwNCiAgICBwdXJwbGUgICAgICAgICAgOiIjODAwMDgwIiwNCiAgICByZWQgICAgICAgICAgICAgOiIjZmYwMDAwIiwNCiAgICByb3N5YnJvd24gICAgICAgOiIjYmM4ZjhmIiwNCiAgICByb3lhbGJsdWUgICAgICAgOiIjNDE2OWUxIiwNCiAgICBzYWRkbGVicm93biAgICAgOiIjOGI0NTEzIiwNCiAgICBzYWxtb24gICAgICAgICAgOiIjZmE4MDcyIiwNCiAgICBzYW5keWJyb3duICAgICAgOiIjZjRhNDYwIiwNCiAgICBzZWFncmVlbiAgICAgICAgOiIjMmU4YjU3IiwNCiAgICBzZWFzaGVsbCAgICAgICAgOiIjZmZmNWVlIiwNCiAgICBzaWVubmEgICAgICAgICAgOiIjYTA1MjJkIiwNCiAgICBzaWx2ZXIgICAgICAgICAgOiIjYzBjMGMwIiwNCiAgICBza3libHVlICAgICAgICAgOiIjODdjZWViIiwNCiAgICBzbGF0ZWJsdWUgICAgICAgOiIjNmE1YWNkIiwNCiAgICBzbGF0ZWdyYXkgICAgICAgOiIjNzA4MDkwIiwNCiAgICBzbm93ICAgICAgICAgICAgOiIjZmZmYWZhIiwNCiAgICBzcHJpbmdncmVlbiAgICAgOiIjMDBmZjdmIiwNCiAgICBzdGVlbGJsdWUgICAgICAgOiIjNDY4MmI0IiwNCiAgICB0YW4gICAgICAgICAgICAgOiIjZDJiNDhjIiwNCiAgICB0ZWFsICAgICAgICAgICAgOiIjMDA4MDgwIiwNCiAgICB0aGlzdGxlICAgICAgICAgOiIjZDhiZmQ4IiwNCiAgICB0b21hdG8gICAgICAgICAgOiIjZmY2MzQ3IiwNCiAgICB0dXJxdW9pc2UgICAgICAgOiIjNDBlMGQwIiwNCiAgICB2aW9sZXQgICAgICAgICAgOiIjZWU4MmVlIiwNCiAgICB3aGVhdCAgICAgICAgICAgOiIjZjVkZWIzIiwNCiAgICB3aGl0ZSAgICAgICAgICAgOiIjZmZmZmZmIiwNCiAgICB3aGl0ZXNtb2tlICAgICAgOiIjZjVmNWY1IiwNCiAgICB5ZWxsb3cgICAgICAgICAgOiIjZmZmZjAwIiwNCiAgICB5ZWxsb3dncmVlbiAgICAgOiIjOWFjZDMyIg0KfTsNCi8qKg0KICogUmVwcmVzZW50cyBhIHNlbGVjdG9yIGNvbWJpbmF0b3IgKHdoaXRlc3BhY2UsICssID4pLg0KICogQG5hbWVzcGFjZSBwYXJzZXJsaWIuY3NzDQogKiBAY2xhc3MgQ29tYmluYXRvcg0KICogQGV4dGVuZHMgcGFyc2VybGliLnV0aWwuU3ludGF4VW5pdA0KICogQGNvbnN0cnVjdG9yDQogKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBUaGUgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC4gDQogKiBAcGFyYW0ge2ludH0gbGluZSBUaGUgbGluZSBvZiB0ZXh0IG9uIHdoaWNoIHRoZSB1bml0IHJlc2lkZXMuDQogKiBAcGFyYW0ge2ludH0gY29sIFRoZSBjb2x1bW4gb2YgdGV4dCBvbiB3aGljaCB0aGUgdW5pdCByZXNpZGVzLg0KICovDQpmdW5jdGlvbiBDb21iaW5hdG9yKHRleHQsIGxpbmUsIGNvbCl7DQogICAgDQogICAgU3ludGF4VW5pdC5jYWxsKHRoaXMsIHRleHQsIGxpbmUsIGNvbCk7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgdHlwZSBvZiBtb2RpZmllci4NCiAgICAgKiBAdHlwZSBTdHJpbmcNCiAgICAgKiBAcHJvcGVydHkgdHlwZQ0KICAgICAqLw0KICAgIHRoaXMudHlwZSA9ICJ1bmtub3duIjsNCiAgICANCiAgICAvL3ByZXR0eSBzaW1wbGUNCiAgICBpZiAoL15ccyskLy50ZXN0KHRleHQpKXsNCiAgICAgICAgdGhpcy50eXBlID0gImRlc2NlbmRhbnQiOw0KICAgIH0gZWxzZSBpZiAodGV4dCA9PSAiPiIpew0KICAgICAgICB0aGlzLnR5cGUgPSAiY2hpbGQiOw0KICAgIH0gZWxzZSBpZiAodGV4dCA9PSAiKyIpew0KICAgICAgICB0aGlzLnR5cGUgPSAiYWRqYWNlbnQtc2libGluZyI7DQogICAgfSBlbHNlIGlmICh0ZXh0ID09ICJ+Iil7DQogICAgICAgIHRoaXMudHlwZSA9ICJzaWJsaW5nIjsNCiAgICB9DQoNCn0NCg0KQ29tYmluYXRvci5wcm90b3R5cGUgPSBuZXcgU3ludGF4VW5pdCgpOw0KQ29tYmluYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21iaW5hdG9yOw0KDQoNCg0KdmFyIExldmVsMVByb3BlcnRpZXMgPSB7DQoNCiAgICAiYmFja2dyb3VuZCI6IDEsDQogICAgImJhY2tncm91bmQtYXR0YWNobWVudCI6IDEsDQogICAgImJhY2tncm91bmQtY29sb3IiOiAxLA0KICAgICJiYWNrZ3JvdW5kLWltYWdlIjogMSwNCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IDEsDQogICAgImJhY2tncm91bmQtcmVwZWF0IjogMSwNCiANCiAgICAiYm9yZGVyIjogMSwNCiAgICAiYm9yZGVyLWJvdHRvbSI6IDEsDQogICAgImJvcmRlci1ib3R0b20td2lkdGgiOiAxLA0KICAgICJib3JkZXItY29sb3IiOiAxLA0KICAgICJib3JkZXItbGVmdCI6IDEsDQogICAgImJvcmRlci1sZWZ0LXdpZHRoIjogMSwNCiAgICAiYm9yZGVyLXJpZ2h0IjogMSwNCiAgICAiYm9yZGVyLXJpZ2h0LXdpZHRoIjogMSwNCiAgICAiYm9yZGVyLXN0eWxlIjogMSwNCiAgICAiYm9yZGVyLXRvcCI6IDEsDQogICAgImJvcmRlci10b3Atd2lkdGgiOiAxLA0KICAgICJib3JkZXItd2lkdGgiOiAxLA0KIA0KICAgICJjbGVhciI6IDEsDQogICAgImNvbG9yIjogMSwNCiAgICAiZGlzcGxheSI6IDEsDQogICAgImZsb2F0IjogMSwNCiANCiAgICAiZm9udCI6IDEsDQogICAgImZvbnQtZmFtaWx5IjogMSwNCiAgICAiZm9udC1zaXplIjogMSwNCiAgICAiZm9udC1zdHlsZSI6IDEsDQogICAgImZvbnQtdmFyaWFudCI6IDEsDQogICAgImZvbnQtd2VpZ2h0IjogMSwNCiANCiAgICAiaGVpZ2h0IjogMSwNCiAgICAibGV0dGVyLXNwYWNpbmciOiAxLA0KICAgICJsaW5lLWhlaWdodCI6IDEsDQogDQogICAgImxpc3Qtc3R5bGUiOiAxLA0KICAgICJsaXN0LXN0eWxlLWltYWdlIjogMSwNCiAgICAibGlzdC1zdHlsZS1wb3NpdGlvbiI6IDEsDQogICAgImxpc3Qtc3R5bGUtdHlwZSI6IDEsDQogDQogICAgIm1hcmdpbiI6IDEsDQogICAgIm1hcmdpbi1ib3R0b20iOiAxLA0KICAgICJtYXJnaW4tbGVmdCI6IDEsDQogICAgIm1hcmdpbi1yaWdodCI6IDEsDQogICAgIm1hcmdpbi10b3AiOiAxLA0KIA0KICAgICJwYWRkaW5nIjogMSwNCiAgICAicGFkZGluZy1ib3R0b20iOiAxLA0KICAgICJwYWRkaW5nLWxlZnQiOiAxLA0KICAgICJwYWRkaW5nLXJpZ2h0IjogMSwNCiAgICAicGFkZGluZy10b3AiOiAxLA0KIA0KICAgICJ0ZXh0LWFsaWduIjogMSwNCiAgICAidGV4dC1kZWNvcmF0aW9uIjogMSwNCiAgICAidGV4dC1pbmRlbnQiOiAxLA0KICAgICJ0ZXh0LXRyYW5zZm9ybSI6IDEsDQogDQogICAgInZlcnRpY2FsLWFsaWduIjogMSwNCiAgICAid2hpdGUtc3BhY2UiOiAxLA0KICAgICJ3aWR0aCI6IDEsDQogICAgIndvcmQtc3BhY2luZyI6IDENCiAgICANCn07DQoNCnZhciBMZXZlbDJQcm9wZXJ0aWVzID0gew0KDQogICAgLy9BdXJhbA0KICAgICJhemltdXRoIjogMSwNCiAgICAiY3VlLWFmdGVyIjogMSwNCiAgICAiY3VlLWJlZm9yZSI6IDEsDQogICAgImN1ZSI6IDEsDQogICAgImVsZXZhdGlvbiI6IDEsDQogICAgInBhdXNlLWFmdGVyIjogMSwNCiAgICAicGF1c2UtYmVmb3JlIjogMSwNCiAgICAicGF1c2UiOiAxLA0KICAgICJwaXRjaC1yYW5nZSI6IDEsDQogICAgInBpdGNoIjogMSwNCiAgICAicGxheS1kdXJpbmciOiAxLA0KICAgICJyaWNobmVzcyI6IDEsDQogICAgInNwZWFrLWhlYWRlciI6IDEsDQogICAgInNwZWFrLW51bWVyYWwiOiAxLA0KICAgICJzcGVhay1wdW5jdHVhdGlvbiI6IDEsDQogICAgInNwZWFrIjogMSwNCiAgICAic3BlZWNoLXJhdGUiOiAxLA0KICAgICJzdHJlc3MiOiAxLA0KICAgICJ2b2ljZS1mYW1pbHkiOiAxLA0KICAgICJ2b2x1bWUiOiAxLA0KICAgIA0KICAgIC8vUGFnZWQNCiAgICAib3JwaGFucyI6IDEsDQogICAgInBhZ2UtYnJlYWstYWZ0ZXIiOiAxLA0KICAgICJwYWdlLWJyZWFrLWJlZm9yZSI6IDEsDQogICAgInBhZ2UtYnJlYWstaW5zaWRlIjogMSwNCiAgICAid2lkb3dzIjogMSwNCg0KICAgIC8vSW50ZXJhY3RpdmUNCiAgICAiY3Vyc29yIjogMSwNCiAgICAib3V0bGluZS1jb2xvciI6IDEsDQogICAgIm91dGxpbmUtc3R5bGUiOiAxLA0KICAgICJvdXRsaW5lLXdpZHRoIjogMSwNCiAgICAib3V0bGluZSI6IDEsICAgIA0KICAgIA0KICAgIC8vVmlzdWFsDQogICAgImJhY2tncm91bmQtYXR0YWNobWVudCI6IDEsDQogICAgImJhY2tncm91bmQtY29sb3IiOiAxLA0KICAgICJiYWNrZ3JvdW5kLWltYWdlIjogMSwNCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IDEsDQogICAgImJhY2tncm91bmQtcmVwZWF0IjogMSwNCiAgICAiYmFja2dyb3VuZCI6IDEsICAgIA0KICAgICJib3JkZXItY29sbGFwc2UiOiAxLA0KICAgICJib3JkZXItY29sb3IiOiAxLA0KICAgICJib3JkZXItc3BhY2luZyI6IDEsDQogICAgImJvcmRlci1zdHlsZSI6IDEsDQogICAgImJvcmRlci10b3AiOiAxLA0KICAgICJib3JkZXItdG9wLWNvbG9yIjogMSwNCiAgICAiYm9yZGVyLXRvcC1zdHlsZSI6IDEsDQogICAgImJvcmRlci10b3Atd2lkdGgiOiAxLA0KICAgICJib3JkZXItd2lkdGgiOiAxLA0KICAgICJib3JkZXIiOiAxLA0KICAgICJib3R0b20iOiAxLCAgICANCiAgICAiY2FwdGlvbi1zaWRlIjogMSwNCiAgICAiY2xlYXIiOiAxLA0KICAgICJjbGlwIjogMSwNCiAgICAiY29sb3IiOiAxLA0KICAgICJjb250ZW50IjogMSwNCiAgICAiY291bnRlci1pbmNyZW1lbnQiOiAxLA0KICAgICJjb3VudGVyLXJlc2V0IjogMSwNCiAgICAiZGlyZWN0aW9uIjogMSwNCiAgICAiZGlzcGxheSI6IDEsDQogICAgImVtcHR5LWNlbGxzIjogMSwNCiAgICAiZmxvYXQiOiAxLA0KICAgICJmb250LWZhbWlseSI6IDEsDQogICAgImZvbnQtc2l6ZSI6IDEsDQogICAgImZvbnQtc3R5bGUiOiAxLA0KICAgICJmb250LXZhcmlhbnQiOiAxLA0KICAgICJmb250LXdlaWdodCI6IDEsDQogICAgImZvbnQiOiAxLA0KICAgICJoZWlnaHQiOiAxLA0KICAgICJsZWZ0IjogMSwNCiAgICAibGV0dGVyLXNwYWNpbmciOiAxLA0KICAgICJsaW5lLWhlaWdodCI6IDEsDQogICAgImxpc3Qtc3R5bGUtaW1hZ2UiOiAxLA0KICAgICJsaXN0LXN0eWxlLXBvc2l0aW9uIjogMSwNCiAgICAibGlzdC1zdHlsZS10eXBlIjogMSwNCiAgICAibGlzdC1zdHlsZSI6IDEsDQogICAgIm1hcmdpbi1yaWdodCI6IDEsDQogICAgIm1hcmdpbi10b3AiOiAxLA0KICAgICJtYXJnaW4iOiAxLA0KICAgICJtYXgtaGVpZ2h0IjogMSwNCiAgICAibWF4LXdpZHRoIjogMSwNCiAgICAibWluLWhlaWdodCI6IDEsDQogICAgIm1pbi13aWR0aCI6IDEsDQogICAgIm92ZXJmbG93IjogMSwNCiAgICAicGFkZGluZy10b3AiOiAxLA0KICAgICJwYWRkaW5nIjogMSwNCiAgICAicG9zaXRpb24iOiAxLA0KICAgICJxdW90ZXMiOiAxLA0KICAgICJyaWdodCI6IDEsDQogICAgInRhYmxlLWxheW91dCI6IDEsDQogICAgInRleHQtYWxpZ24iOiAxLA0KICAgICJ0ZXh0LWRlY29yYXRpb24iOiAxLA0KICAgICJ0ZXh0LWluZGVudCI6IDEsDQogICAgInRleHQtdHJhbnNmb3JtIjogMSwNCiAgICAidG9wIjogMSwNCiAgICAidW5pY29kZS1iaWRpIjogMSwNCiAgICAidmVydGljYWwtYWxpZ24iOiAxLA0KICAgICJ2aXNpYmlsaXR5IjogMSwNCiAgICAid2hpdGUtc3BhY2UiOiAxLA0KICAgICJ3aWR0aCI6IDEsDQogICAgIndvcmQtc3BhY2luZyI6IDEsDQogICAgInotaW5kZXgiOiAxDQp9Ow0KLyoqDQogKiBSZXByZXNlbnRzIGEgbWVkaWEgZmVhdHVyZSwgc3VjaCBhcyBtYXgtd2lkdGg6NTAwLg0KICogQG5hbWVzcGFjZSBwYXJzZXJsaWIuY3NzDQogKiBAY2xhc3MgTWVkaWFGZWF0dXJlDQogKiBAZXh0ZW5kcyBwYXJzZXJsaWIudXRpbC5TeW50YXhVbml0DQogKiBAY29uc3RydWN0b3INCiAqIEBwYXJhbSB7U3ludGF4VW5pdH0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmVhdHVyZS4NCiAqIEBwYXJhbSB7U3ludGF4VW5pdH0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmZWF0dXJlIG9yIG51bGwgaWYgbm9uZS4NCiAqLw0KZnVuY3Rpb24gTWVkaWFGZWF0dXJlKG5hbWUsIHZhbHVlKXsNCiAgICANCiAgICBTeW50YXhVbml0LmNhbGwodGhpcywgIigiICsgbmFtZSArICh2YWx1ZSAhPT0gbnVsbCA/ICI6IiArIHZhbHVlIDogIiIpICsgIikiLCBuYW1lLnN0YXJ0TGluZSwgbmFtZS5zdGFydENvbCk7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgbWVkaWEgZmVhdHVyZQ0KICAgICAqIEB0eXBlIFN0cmluZw0KICAgICAqIEBwcm9wZXJ0eSBuYW1lDQogICAgICovDQogICAgdGhpcy5uYW1lID0gbmFtZTsNCg0KICAgIC8qKg0KICAgICAqIFRoZSB2YWx1ZSBmb3IgdGhlIGZlYXR1cmUgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLg0KICAgICAqIEB0eXBlIFN5bnRheFVuaXQNCiAgICAgKiBAcHJvcGVydHkgdmFsdWUNCiAgICAgKi8NCiAgICB0aGlzLnZhbHVlID0gdmFsdWU7DQp9DQoNCk1lZGlhRmVhdHVyZS5wcm90b3R5cGUgPSBuZXcgU3ludGF4VW5pdCgpOw0KTWVkaWFGZWF0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lZGlhRmVhdHVyZTsNCg0KDQovKioNCiAqIFJlcHJlc2VudHMgYW4gaW5kaXZpZHVhbCBtZWRpYSBxdWVyeS4NCiAqIEBuYW1lc3BhY2UgcGFyc2VybGliLmNzcw0KICogQGNsYXNzIE1lZGlhUXVlcnkNCiAqIEBleHRlbmRzIHBhcnNlcmxpYi51dGlsLlN5bnRheFVuaXQNCiAqIEBjb25zdHJ1Y3Rvcg0KICogQHBhcmFtIHtTdHJpbmd9IG1vZGlmaWVyIFRoZSBtb2RpZmllciAibm90IiBvciAib25seSIgKG9yIG51bGwpLg0KICogQHBhcmFtIHtTdHJpbmd9IG1lZGlhVHlwZSBUaGUgdHlwZSBvZiBtZWRpYSAoaS5lLiwgInByaW50IikuDQogKiBAcGFyYW0ge0FycmF5fSBwYXJ0cyBBcnJheSBvZiBzZWxlY3RvcnMgcGFydHMgbWFraW5nIHVwIHRoaXMgc2VsZWN0b3IuDQogKiBAcGFyYW0ge2ludH0gbGluZSBUaGUgbGluZSBvZiB0ZXh0IG9uIHdoaWNoIHRoZSB1bml0IHJlc2lkZXMuDQogKiBAcGFyYW0ge2ludH0gY29sIFRoZSBjb2x1bW4gb2YgdGV4dCBvbiB3aGljaCB0aGUgdW5pdCByZXNpZGVzLg0KICovDQpmdW5jdGlvbiBNZWRpYVF1ZXJ5KG1vZGlmaWVyLCBtZWRpYVR5cGUsIGZlYXR1cmVzLCBsaW5lLCBjb2wpew0KICAgIA0KICAgIFN5bnRheFVuaXQuY2FsbCh0aGlzLCAobW9kaWZpZXIgPyBtb2RpZmllciArICIgIjogIiIpICsgKG1lZGlhVHlwZSA/IG1lZGlhVHlwZSArICIgIiA6ICIiKSArIGZlYXR1cmVzLmpvaW4oIiBhbmQgIiksIGxpbmUsIGNvbCk7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgbWVkaWEgbW9kaWZpZXIgKCJub3QiIG9yICJvbmx5IikNCiAgICAgKiBAdHlwZSBTdHJpbmcNCiAgICAgKiBAcHJvcGVydHkgbW9kaWZpZXINCiAgICAgKi8NCiAgICB0aGlzLm1vZGlmaWVyID0gbW9kaWZpZXI7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgbWVkaWFUeXBlIChpLmUuLCAicHJpbnQiKQ0KICAgICAqIEB0eXBlIFN0cmluZw0KICAgICAqIEBwcm9wZXJ0eSBtZWRpYVR5cGUNCiAgICAgKi8NCiAgICB0aGlzLm1lZGlhVHlwZSA9IG1lZGlhVHlwZTsgICAgDQogICAgDQogICAgLyoqDQogICAgICogVGhlIHBhcnRzIHRoYXQgbWFrZSB1cCB0aGUgc2VsZWN0b3IuDQogICAgICogQHR5cGUgQXJyYXkNCiAgICAgKiBAcHJvcGVydHkgZmVhdHVyZXMNCiAgICAgKi8NCiAgICB0aGlzLmZlYXR1cmVzID0gZmVhdHVyZXM7DQoNCn0NCg0KTWVkaWFRdWVyeS5wcm90b3R5cGUgPSBuZXcgU3ludGF4VW5pdCgpOw0KTWVkaWFRdWVyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZWRpYVF1ZXJ5Ow0KDQoNCi8qKg0KICogQSBDU1MzIHBhcnNlci4NCiAqIEBuYW1lc3BhY2UgcGFyc2VybGliLmNzcw0KICogQGNsYXNzIFBhcnNlcg0KICogQGNvbnN0cnVjdG9yDQogKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAoT3B0aW9uYWwpIFZhcmlvdXMgb3B0aW9ucyBmb3IgdGhlIHBhcnNlcjoNCiAqICAgICAgc3RhckhhY2sgKHRydWV8ZmFsc2UpIHRvIGFsbG93IElFNiBzdGFyIGhhY2sgYXMgdmFsaWQsDQogKiAgICAgIHVuZGVyc2NvcmVIYWNrICh0cnVlfGZhbHNlKSB0byBpbnRlcnByZXQgbGVhZGluZyB1bmRlcnNjb3Jlcw0KICogICAgICBhcyBJRTYtNyB0YXJnZXRpbmcgZm9yIGtub3duIHByb3BlcnRpZXMsIGllRmlsdGVycyAodHJ1ZXxmYWxzZSkNCiAqICAgICAgdG8gaW5kaWNhdGUgdGhhdCBJRSA8IDggZmlsdGVycyBzaG91bGQgYmUgYWNjZXB0ZWQgYW5kIG5vdCB0aHJvdw0KICogICAgICBzeW50YXggZXJyb3JzLg0KICovDQpmdW5jdGlvbiBQYXJzZXIob3B0aW9ucyl7DQoNCiAgICAvL2luaGVyaXQgZXZlbnQgZnVuY3Rpb25hbGl0eQ0KICAgIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7DQoNCg0KICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307DQoNCiAgICB0aGlzLl90b2tlblN0cmVhbSA9IG51bGw7DQp9DQoNClBhcnNlci5wcm90b3R5cGUgPSBmdW5jdGlvbigpew0KDQogICAgdmFyIHByb3RvID0gbmV3IEV2ZW50VGFyZ2V0KCksICAvL25ldyBwcm90b3R5cGUNCiAgICAgICAgcHJvcCwNCiAgICAgICAgYWRkaXRpb25zID0gIHsNCiAgICAgICAgDQogICAgICAgICAgICAvL3Jlc3RvcmUgY29uc3RydWN0b3INCiAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBQYXJzZXIsDQogICAgICAgIA0KICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICAgICAgLy8gR3JhbW1hcg0KICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICANCiAgICAgICAgICAgIF9zdHlsZXNoZWV0OiBmdW5jdGlvbigpew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBzdHlsZXNoZWV0DQogICAgICAgICAgICAgICAgICogIDogWyBDSEFSU0VUX1NZTSBTKiBTVFJJTkcgUyogJzsnIF0/DQogICAgICAgICAgICAgICAgICogICAgW1N8Q0RPfENEQ10qIFsgaW1wb3J0IFtTfENET3xDRENdKiBdKg0KICAgICAgICAgICAgICAgICAqICAgIFsgbmFtZXNwYWNlIFtTfENET3xDRENdKiBdKg0KICAgICAgICAgICAgICAgICAqICAgIFsgWyBydWxlc2V0IHwgbWVkaWEgfCBwYWdlIHwgZm9udF9mYWNlIHwga2V5ZnJhbWVzIF0gW1N8Q0RPfENEQ10qIF0qDQogICAgICAgICAgICAgICAgICogIDsNCiAgICAgICAgICAgICAgICAgKi8gDQogICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCAgICAgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICB0b2tlbiwNCiAgICAgICAgICAgICAgICAgICAgdHQ7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuZmlyZSgic3RhcnRzdHlsZXNoZWV0Iik7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL3RyeSB0byByZWFkIGNoYXJhY3RlciBzZXQNCiAgICAgICAgICAgICAgICB0aGlzLl9jaGFyc2V0KCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdGhpcy5fc2tpcENydWZ0KCk7DQoNCiAgICAgICAgICAgICAgICAvL3RyeSB0byByZWFkIGltcG9ydHMgLSBtYXkgYmUgbW9yZSB0aGFuIG9uZQ0KICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLklNUE9SVF9TWU0pew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbXBvcnQoKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2tpcENydWZ0KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vdHJ5IHRvIHJlYWQgbmFtZXNwYWNlcyAtIG1heSBiZSBtb3JlIHRoYW4gb25lDQogICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuTkFNRVNQQUNFX1NZTSl7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX25hbWVzcGFjZSgpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9za2lwQ3J1ZnQoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9nZXQgdGhlIG5leHQgdG9rZW4NCiAgICAgICAgICAgICAgICB0dCA9IHRva2VuU3RyZWFtLnBlZWsoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL3RyeSB0byByZWFkIHRoZSByZXN0DQogICAgICAgICAgICAgICAgd2hpbGUodHQgPiBUb2tlbnMuRU9GKXsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0dCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuTUVESUFfU1lNOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZWRpYSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9za2lwQ3J1ZnQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuUEFHRV9TWU06DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2UoKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBDcnVmdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuRk9OVF9GQUNFX1NZTToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9udF9mYWNlKCk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9za2lwQ3J1ZnQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRva2Vucy5LRVlGUkFNRVNfU1lNOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlmcmFtZXMoKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBDcnVmdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5zLlM6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5fcnVsZXNldCgpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Vycm9yIGhhbmRsaW5nIGZvciBrbm93biBpc3N1ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0dCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuQ0hBUlNFVF9TWU06DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0uTFQoMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJzZXQoZmFsc2UpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkBjaGFyc2V0IG5vdCBhbGxvd2VkIGhlcmUuIiwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuSU1QT1JUX1NZTToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS5MVCgxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1wb3J0KGZhbHNlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCJAaW1wb3J0IG5vdCBhbGxvd2VkIGhlcmUuIiwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuTkFNRVNQQUNFX1NZTToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS5MVCgxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmFtZXNwYWNlKGZhbHNlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCJAbmFtZXNwYWNlIG5vdCBhbGxvd2VkIGhlcmUuIiwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0uZ2V0KCk7ICAvL2dldCB0aGUgbGFzdCB0b2tlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIFN5bnRheEVycm9yICYmICF0aGlzLm9wdGlvbnMuc3RyaWN0KXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAiZXJyb3IiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogICAgICBleCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogICAgZXgubWVzc2FnZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICAgICAgZXgubGluZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sOiAgICAgICAgZXguY29sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB0dCA9IHRva2VuU3RyZWFtLnBlZWsoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKHR0ICE9IFRva2Vucy5FT0Ypew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdGhpcy5maXJlKCJlbmRzdHlsZXNoZWV0Iik7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICBfY2hhcnNldDogZnVuY3Rpb24oZW1pdCl7DQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIGNoYXJzZXQsDQogICAgICAgICAgICAgICAgICAgIHRva2VuLA0KICAgICAgICAgICAgICAgICAgICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2w7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ0hBUlNFVF9TWU0pKXsNCiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOw0KICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlNUUklORyk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7DQogICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSB0b2tlbi52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuU0VNSUNPTE9OKTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmIChlbWl0ICE9PSBmYWxzZSl7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICJjaGFyc2V0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OmNoYXJzZXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sDQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICANCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIF9pbXBvcnQ6IGZ1bmN0aW9uKGVtaXQpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogaW1wb3J0DQogICAgICAgICAgICAgICAgICogICA6IElNUE9SVF9TWU0gUyoNCiAgICAgICAgICAgICAgICAgKiAgICBbU1RSSU5HfFVSSV0gUyogbWVkaWFfcXVlcnlfbGlzdD8gJzsnIFMqDQogICAgICAgICAgICAgICAgICovICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHR0LA0KICAgICAgICAgICAgICAgICAgICB1cmksDQogICAgICAgICAgICAgICAgICAgIGltcG9ydFRva2VuLA0KICAgICAgICAgICAgICAgICAgICBtZWRpYUxpc3QgICA9IFtdOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vcmVhZCBpbXBvcnQgc3ltYm9sDQogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5JTVBPUlRfU1lNKTsNCiAgICAgICAgICAgICAgICBpbXBvcnRUb2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goW1Rva2Vucy5TVFJJTkcsIFRva2Vucy5VUkldKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL2dyYWIgdGhlIFVSSSB2YWx1ZQ0KICAgICAgICAgICAgICAgIHVyaSA9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUucmVwbGFjZSgvKD86dXJsXCgpP1siJ10oW14iJ10rKVsiJ11cKT8vLCAiJDEiKTsgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIG1lZGlhTGlzdCA9IHRoaXMuX21lZGlhX3F1ZXJ5X2xpc3QoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL211c3QgZW5kIHdpdGggYSBzZW1pY29sb24NCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlNFTUlDT0xPTik7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoZW1pdCAhPT0gZmFsc2Upew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoew0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiaW1wb3J0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogICAgdXJpLA0KICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6ICBtZWRpYUxpc3QsDQogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGltcG9ydFRva2VuLnN0YXJ0TGluZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgaW1wb3J0VG9rZW4uc3RhcnRDb2wNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIF9uYW1lc3BhY2U6IGZ1bmN0aW9uKGVtaXQpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogbmFtZXNwYWNlDQogICAgICAgICAgICAgICAgICogICA6IE5BTUVTUEFDRV9TWU0gUyogW25hbWVzcGFjZV9wcmVmaXggUypdPyBbU1RSSU5HfFVSSV0gUyogJzsnIFMqDQogICAgICAgICAgICAgICAgICovICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbCwNCiAgICAgICAgICAgICAgICAgICAgcHJlZml4LA0KICAgICAgICAgICAgICAgICAgICB1cmk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9yZWFkIGltcG9ydCBzeW1ib2wNCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLk5BTUVTUEFDRV9TWU0pOw0KICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZTsNCiAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOw0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9pdCdzIGEgbmFtZXNwYWNlIHByZWZpeCAtIG5vIF9uYW1lc3BhY2VfcHJlZml4KCkgbWV0aG9kIGJlY2F1c2UgaXQncyBqdXN0IGFuIElERU5UDQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCkpew0KICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goW1Rva2Vucy5TVFJJTkcsIFRva2Vucy5VUkldKTsNCiAgICAgICAgICAgICAgICAvKmlmICghdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLlNUUklORykpew0KICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlVSSSk7DQogICAgICAgICAgICAgICAgfSovDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9ncmFiIHRoZSBVUkkgdmFsdWUNCiAgICAgICAgICAgICAgICB1cmkgPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLnJlcGxhY2UoLyg/OnVybFwoKT9bIiddKFteIiddKylbIiddXCk/LywgIiQxIik7ICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCg0KICAgICAgICAgICAgICAgIC8vbXVzdCBlbmQgd2l0aCBhIHNlbWljb2xvbg0KICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuU0VNSUNPTE9OKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmIChlbWl0ICE9PSBmYWxzZSl7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7DQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICJuYW1lc3BhY2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsDQogICAgICAgICAgICAgICAgICAgICAgICB1cmk6ICAgIHVyaSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgbGluZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sDQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICB9LCAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIF9tZWRpYTogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIG1lZGlhDQogICAgICAgICAgICAgICAgICogICA6IE1FRElBX1NZTSBTKiBtZWRpYV9xdWVyeV9saXN0IFMqICd7JyBTKiBydWxlc2V0KiAnfScgUyoNCiAgICAgICAgICAgICAgICAgKiAgIDsNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gICAgID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbCwNCiAgICAgICAgICAgICAgICAgICAgbWVkaWFMaXN0Oy8vICAgICAgID0gW107DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9sb29rIGZvciBAbWVkaWENCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLk1FRElBX1NZTSk7DQogICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOw0KICAgICAgICAgICAgICAgIGNvbCA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2w7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgIG1lZGlhTGlzdCA9IHRoaXMuX21lZGlhX3F1ZXJ5X2xpc3QoKTsNCg0KICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuTEJSQUNFKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgInN0YXJ0bWVkaWEiLA0KICAgICAgICAgICAgICAgICAgICBtZWRpYTogIG1lZGlhTGlzdCwNCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGNvbA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHdoaWxlKHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuUEFHRV9TWU0pew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFnZSgpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9ydWxlc2V0KCkpew0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUkJSQUNFKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLmZpcmUoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICJlbmRtZWRpYSIsDQogICAgICAgICAgICAgICAgICAgIG1lZGlhOiAgbWVkaWFMaXN0LA0KICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICANCg0KICAgICAgICAgICAgLy9DU1MzIE1lZGlhIFF1ZXJpZXMNCiAgICAgICAgICAgIF9tZWRpYV9xdWVyeV9saXN0OiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogbWVkaWFfcXVlcnlfbGlzdA0KICAgICAgICAgICAgICAgICAqICAgOiBTKiBbbWVkaWFfcXVlcnkgWyAnLCcgUyogbWVkaWFfcXVlcnkgXSogXT8NCiAgICAgICAgICAgICAgICAgKiAgIDsNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgbWVkaWFMaXN0ICAgPSBbXTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLklERU5UIHx8IHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuTFBBUkVOKXsNCiAgICAgICAgICAgICAgICAgICAgbWVkaWFMaXN0LnB1c2godGhpcy5fbWVkaWFfcXVlcnkoKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHdoaWxlKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5DT01NQSkpew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgICAgICBtZWRpYUxpc3QucHVzaCh0aGlzLl9tZWRpYV9xdWVyeSgpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhTGlzdDsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgKiBOb3RlOiAiZXhwcmVzc2lvbiIgaW4gdGhlIGdyYW1tYXIgbWFwcyB0byB0aGUgX21lZGlhX2V4cHJlc3Npb24NCiAgICAgICAgICAgICAqIG1ldGhvZC4NCiAgICAgICAgICAgICANCiAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgX21lZGlhX3F1ZXJ5OiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogbWVkaWFfcXVlcnkNCiAgICAgICAgICAgICAgICAgKiAgIDogW09OTFkgfCBOT1RdPyBTKiBtZWRpYV90eXBlIFMqIFsgQU5EIFMqIGV4cHJlc3Npb24gXSoNCiAgICAgICAgICAgICAgICAgKiAgIHwgZXhwcmVzc2lvbiBbIEFORCBTKiBleHByZXNzaW9uIF0qDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHR5cGUgICAgICAgID0gbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgaWRlbnQgICAgICAgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICB0b2tlbiAgICAgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zID0gW107DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpKXsNCiAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLnRvTG93ZXJDYXNlKCk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXJlJ3Mgbm8gY3VzdG9tIHRva2VucyBmb3IgdGhlc2UsIG5lZWQgdG8gbWFudWFsbHkgY2hlY2sNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50ICE9ICJvbmx5IiAmJiBpZGVudCAhPSAibm90Iil7DQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS51bmdldCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS50b2tlbigpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLklERU5UKXsNCiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHRoaXMuX21lZGlhX3R5cGUoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5TdHJlYW0ucGVlaygpID09IFRva2Vucy5MUEFSRU4pew0KICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IG51bGwpew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS5MVCgxKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX21lZGlhX2V4cHJlc3Npb24oKSk7DQogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gbnVsbCAmJiBleHByZXNzaW9ucy5sZW5ndGggPT09IDApew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCkpew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUudG9Mb3dlckNhc2UoKSAhPSAiYW5kIil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLnRva2VuKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLl9tZWRpYV9leHByZXNzaW9uKCkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYVF1ZXJ5KGlkZW50LCB0eXBlLCBleHByZXNzaW9ucywgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7DQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvL0NTUzMgTWVkaWEgUXVlcmllcw0KICAgICAgICAgICAgX21lZGlhX3R5cGU6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBtZWRpYV90eXBlDQogICAgICAgICAgICAgICAgICogICA6IElERU5UDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhX2ZlYXR1cmUoKTsgICAgICAgICAgIA0KICAgICAgICAgICAgfSwNCg0KICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgKiBOb3RlOiBpbiBDU1MzIE1lZGlhIFF1ZXJpZXMsIHRoaXMgaXMgY2FsbGVkICJleHByZXNzaW9uIi4NCiAgICAgICAgICAgICAqIFJlbmFtZWQgaGVyZSB0byBhdm9pZCBjb25mbGljdCB3aXRoIENTUzMgU2VsZWN0b3JzDQogICAgICAgICAgICAgKiBkZWZpbml0aW9uIG9mICJleHByZXNzaW9uIi4gQWxzbyBub3RlIHRoYXQgImV4cHIiIGluIHRoZQ0KICAgICAgICAgICAgICogZ3JhbW1hciBub3cgbWFwcyB0byAiZXhwcmVzc2lvbiIgZnJvbSBDU1MzIHNlbGVjdG9ycy4NCiAgICAgICAgICAgICAqIEBtZXRob2QgX21lZGlhX2V4cHJlc3Npb24NCiAgICAgICAgICAgICAqIEBwcml2YXRlDQogICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIF9tZWRpYV9leHByZXNzaW9uOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogZXhwcmVzc2lvbg0KICAgICAgICAgICAgICAgICAqICA6ICcoJyBTKiBtZWRpYV9mZWF0dXJlIFMqIFsgJzonIFMqIGV4cHIgXT8gJyknIFMqDQogICAgICAgICAgICAgICAgICogIDsNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSAgICAgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICB0b2tlbiwNCiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiAgPSBudWxsOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuTFBBUkVOKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBmZWF0dXJlID0gdGhpcy5fbWVkaWFfZmVhdHVyZSgpOw0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5DT0xPTikpew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLkxUKDEpOw0KICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdGhpcy5fZXhwcmVzc2lvbigpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlJQQVJFTik7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCg0KICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWVkaWFGZWF0dXJlKGZlYXR1cmUsIChleHByZXNzaW9uID8gbmV3IFN5bnRheFVuaXQoZXhwcmVzc2lvbiwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCkgOiBudWxsKSk7ICAgICAgICAgICAgDQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvL0NTUzMgTWVkaWEgUXVlcmllcw0KICAgICAgICAgICAgX21lZGlhX2ZlYXR1cmU6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBtZWRpYV9mZWF0dXJlDQogICAgICAgICAgICAgICAgICogICA6IElERU5UDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW07DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuSURFTlQpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHJldHVybiBTeW50YXhVbml0LmZyb21Ub2tlbih0b2tlblN0cmVhbS50b2tlbigpKTsgICAgICAgICAgICANCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vQ1NTMyBQYWdlZCBNZWRpYQ0KICAgICAgICAgICAgX3BhZ2U6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBwYWdlOg0KICAgICAgICAgICAgICAgICAqICAgIFBBR0VfU1lNIFMqIElERU5UPyBwc2V1ZG9fcGFnZT8gUyogDQogICAgICAgICAgICAgICAgICogICAgJ3snIFMqIFsgZGVjbGFyYXRpb24gfCBtYXJnaW4gXT8gWyAnOycgUyogWyBkZWNsYXJhdGlvbiB8IG1hcmdpbiBdPyBdKiAnfScgUyoNCiAgICAgICAgICAgICAgICAgKiAgICA7DQogICAgICAgICAgICAgICAgICovICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbCwNCiAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciAgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICBwc2V1ZG9QYWdlICA9IG51bGw7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9sb29rIGZvciBAcGFnZQ0KICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUEFHRV9TWU0pOw0KICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZTsNCiAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCkpew0KICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCg0KICAgICAgICAgICAgICAgICAgICAvL1RoZSB2YWx1ZSAnYXV0bycgbWF5IG5vdCBiZSB1c2VkIGFzIGEgcGFnZSBuYW1lIGFuZCBNVVNUIGJlIHRyZWF0ZWQgYXMgYSBzeW50YXggZXJyb3IuDQogICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLnRvTG93ZXJDYXNlKCkgPT09ICJhdXRvIil7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vc2VlIGlmIHRoZXJlJ3MgYSBjb2xvbiB1cGNvbWluZw0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLkNPTE9OKXsNCiAgICAgICAgICAgICAgICAgICAgcHNldWRvUGFnZSA9IHRoaXMuX3BzZXVkb19wYWdlKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLmZpcmUoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICJzdGFydHBhZ2UiLA0KICAgICAgICAgICAgICAgICAgICBpZDogICAgIGlkZW50aWZpZXIsDQogICAgICAgICAgICAgICAgICAgIHBzZXVkbzogcHNldWRvUGFnZSwNCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGNvbA0KICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWREZWNsYXJhdGlvbnModHJ1ZSwgdHJ1ZSk7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgImVuZHBhZ2UiLA0KICAgICAgICAgICAgICAgICAgICBpZDogICAgIGlkZW50aWZpZXIsDQogICAgICAgICAgICAgICAgICAgIHBzZXVkbzogcHNldWRvUGFnZSwNCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGNvbA0KICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy9DU1MzIFBhZ2VkIE1lZGlhDQogICAgICAgICAgICBfbWFyZ2luOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogbWFyZ2luIDoNCiAgICAgICAgICAgICAgICAgKiAgICBtYXJnaW5fc3ltIFMqICd7JyBkZWNsYXJhdGlvbiBbICc7JyBTKiBkZWNsYXJhdGlvbj8gXSogJ30nIFMqDQogICAgICAgICAgICAgICAgICogICAgOw0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2wsDQogICAgICAgICAgICAgICAgICAgIG1hcmdpblN5bSAgID0gdGhpcy5fbWFyZ2luX3N5bSgpOw0KDQogICAgICAgICAgICAgICAgaWYgKG1hcmdpblN5bSl7DQogICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZTsNCiAgICAgICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdGFydHBhZ2VtYXJnaW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBtYXJnaW5TeW0sDQogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGNvbA0KICAgICAgICAgICAgICAgICAgICB9KTsgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRGVjbGFyYXRpb25zKHRydWUpOw0KDQogICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7DQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZW5kcGFnZW1hcmdpbiIsDQogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG1hcmdpblN5bSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgbGluZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sDQogICAgICAgICAgICAgICAgICAgIH0pOyAgICANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgIC8vQ1NTMyBQYWdlZCBNZWRpYQ0KICAgICAgICAgICAgX21hcmdpbl9zeW06IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIG1hcmdpbl9zeW0gOg0KICAgICAgICAgICAgICAgICAqICAgIFRPUExFRlRDT1JORVJfU1lNIHwgDQogICAgICAgICAgICAgICAgICogICAgVE9QTEVGVF9TWU0gfCANCiAgICAgICAgICAgICAgICAgKiAgICBUT1BDRU5URVJfU1lNIHwgDQogICAgICAgICAgICAgICAgICogICAgVE9QUklHSFRfU1lNIHwgDQogICAgICAgICAgICAgICAgICogICAgVE9QUklHSFRDT1JORVJfU1lNIHwNCiAgICAgICAgICAgICAgICAgKiAgICBCT1RUT01MRUZUQ09STkVSX1NZTSB8IA0KICAgICAgICAgICAgICAgICAqICAgIEJPVFRPTUxFRlRfU1lNIHwgDQogICAgICAgICAgICAgICAgICogICAgQk9UVE9NQ0VOVEVSX1NZTSB8IA0KICAgICAgICAgICAgICAgICAqICAgIEJPVFRPTVJJR0hUX1NZTSB8DQogICAgICAgICAgICAgICAgICogICAgQk9UVE9NUklHSFRDT1JORVJfU1lNIHwNCiAgICAgICAgICAgICAgICAgKiAgICBMRUZUVE9QX1NZTSB8DQogICAgICAgICAgICAgICAgICogICAgTEVGVE1JRERMRV9TWU0gfA0KICAgICAgICAgICAgICAgICAqICAgIExFRlRCT1RUT01fU1lNIHwNCiAgICAgICAgICAgICAgICAgKiAgICBSSUdIVFRPUF9TWU0gfA0KICAgICAgICAgICAgICAgICAqICAgIFJJR0hUTUlERExFX1NZTSB8DQogICAgICAgICAgICAgICAgICogICAgUklHSFRCT1RUT01fU1lNIA0KICAgICAgICAgICAgICAgICAqICAgIDsNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYodG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5UT1BMRUZUQ09STkVSX1NZTSwgVG9rZW5zLlRPUExFRlRfU1lNLA0KICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLlRPUENFTlRFUl9TWU0sIFRva2Vucy5UT1BSSUdIVF9TWU0sIFRva2Vucy5UT1BSSUdIVENPUk5FUl9TWU0sDQogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuQk9UVE9NTEVGVENPUk5FUl9TWU0sIFRva2Vucy5CT1RUT01MRUZUX1NZTSwgDQogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuQk9UVE9NQ0VOVEVSX1NZTSwgVG9rZW5zLkJPVFRPTVJJR0hUX1NZTSwNCiAgICAgICAgICAgICAgICAgICAgICAgIFRva2Vucy5CT1RUT01SSUdIVENPUk5FUl9TWU0sIFRva2Vucy5MRUZUVE9QX1NZTSwgDQogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuTEVGVE1JRERMRV9TWU0sIFRva2Vucy5MRUZUQk9UVE9NX1NZTSwgVG9rZW5zLlJJR0hUVE9QX1NZTSwNCiAgICAgICAgICAgICAgICAgICAgICAgIFRva2Vucy5SSUdIVE1JRERMRV9TWU0sIFRva2Vucy5SSUdIVEJPVFRPTV9TWU1dKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBTeW50YXhVbml0LmZyb21Ub2tlbih0b2tlblN0cmVhbS50b2tlbigpKTsgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICBfcHNldWRvX3BhZ2U6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBwc2V1ZG9fcGFnZQ0KICAgICAgICAgICAgICAgICAqICAgOiAnOicgSURFTlQNCiAgICAgICAgICAgICAgICAgKiAgIDsgICAgDQogICAgICAgICAgICAgICAgICovDQogICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuQ09MT04pOw0KICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuSURFTlQpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vVE9ETzogQ1NTMyBQYWdlZCBNZWRpYSBzYXlzIG9ubHkgImxlZnQiLCAiY2VudGVyIiwgYW5kICJyaWdodCIgYXJlIGFsbG93ZWQNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIF9mb250X2ZhY2U6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBmb250X2ZhY2UNCiAgICAgICAgICAgICAgICAgKiAgIDogRk9OVF9GQUNFX1NZTSBTKiANCiAgICAgICAgICAgICAgICAgKiAgICAgJ3snIFMqIGRlY2xhcmF0aW9uIFsgJzsnIFMqIGRlY2xhcmF0aW9uIF0qICd9JyBTKg0KICAgICAgICAgICAgICAgICAqICAgOw0KICAgICAgICAgICAgICAgICAqLyAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL2xvb2sgZm9yIEBwYWdlDQogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5GT05UX0ZBQ0VfU1lNKTsNCiAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7DQogICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KDQogICAgICAgICAgICAgICAgdGhpcy5maXJlKHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAic3RhcnRmb250ZmFjZSIsDQogICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgbGluZSwNCiAgICAgICAgICAgICAgICAgICAgY29sOiAgICBjb2wNCiAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWREZWNsYXJhdGlvbnModHJ1ZSk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdGhpcy5maXJlKHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiZW5kZm9udGZhY2UiLA0KICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sDQogICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICANCiAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgIF9vcGVyYXRvcjogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogb3BlcmF0b3INCiAgICAgICAgICAgICAgICAgKiAgOiAnLycgUyogfCAnLCcgUyogfCAvKCBlbXB0eSApLw0KICAgICAgICAgICAgICAgICAqICA7DQogICAgICAgICAgICAgICAgICovICAgIA0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gICAgICAgPSBudWxsOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLlNMQVNILCBUb2tlbnMuQ09NTUFdKSl7DQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gIHRva2VuU3RyZWFtLnRva2VuKCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gPyBQcm9wZXJ0eVZhbHVlUGFydC5mcm9tVG9rZW4odG9rZW4pIDogbnVsbDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIF9jb21iaW5hdG9yOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBjb21iaW5hdG9yDQogICAgICAgICAgICAgICAgICogIDogUExVUyBTKiB8IEdSRUFURVIgUyogfCBUSUxERSBTKiB8IFMrDQogICAgICAgICAgICAgICAgICogIDsNCiAgICAgICAgICAgICAgICAgKi8gICAgDQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIHRva2VuOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuUExVUywgVG9rZW5zLkdSRUFURVIsIFRva2Vucy5USUxERV0pKXsgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgQ29tYmluYXRvcih0b2tlbi52YWx1ZSwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIF91bmFyeV9vcGVyYXRvcjogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogdW5hcnlfb3BlcmF0b3INCiAgICAgICAgICAgICAgICAgKiAgOiAnLScgfCAnKycNCiAgICAgICAgICAgICAgICAgKiAgOw0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5NSU5VUywgVG9rZW5zLlBMVVNdKSl7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgICAgIH0gICAgICAgICANCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIF9wcm9wZXJ0eTogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogcHJvcGVydHkNCiAgICAgICAgICAgICAgICAgKiAgIDogSURFTlQgUyoNCiAgICAgICAgICAgICAgICAgKiAgIDsgICAgICAgIA0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAgICAgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICBoYWNrICAgICAgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIHRva2VuVmFsdWUsDQogICAgICAgICAgICAgICAgICAgIHRva2VuLA0KICAgICAgICAgICAgICAgICAgICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2w7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vY2hlY2sgZm9yIHN0YXIgaGFjayAtIHRocm93cyBlcnJvciBpZiBub3QgYWxsb3dlZA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLlNUQVIgJiYgdGhpcy5vcHRpb25zLnN0YXJIYWNrKXsNCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0uZ2V0KCk7DQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsNCiAgICAgICAgICAgICAgICAgICAgaGFjayA9IHRva2VuLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW4uc3RhcnRMaW5lOw0KICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlbi5zdGFydENvbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklERU5UKSl7DQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsNCiAgICAgICAgICAgICAgICAgICAgdG9rZW5WYWx1ZSA9IHRva2VuLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgLy9jaGVjayBmb3IgdW5kZXJzY29yZSBoYWNrIC0gbm8gZXJyb3IgaWYgbm90IGFsbG93ZWQgYmVjYXVzZSBpdCdzIHZhbGlkIENTUyBzeW50YXgNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuVmFsdWUuY2hhckF0KDApID09ICJfIiAmJiB0aGlzLm9wdGlvbnMudW5kZXJzY29yZUhhY2spew0KICAgICAgICAgICAgICAgICAgICAgICAgaGFjayA9ICJfIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuVmFsdWUgPSB0b2tlblZhbHVlLnN1YnN0cmluZygxKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgUHJvcGVydHlOYW1lKHRva2VuVmFsdWUsIGhhY2ssIChsaW5lfHx0b2tlbi5zdGFydExpbmUpLCAoY29sfHx0b2tlbi5zdGFydENvbCkpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7DQogICAgICAgICAgICB9LA0KICAgICAgICANCiAgICAgICAgICAgIC8vQXVnbWVudGVkIHdpdGggQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF9ydWxlc2V0OiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogcnVsZXNldA0KICAgICAgICAgICAgICAgICAqICAgOiBzZWxlY3RvcnNfZ3JvdXANCiAgICAgICAgICAgICAgICAgKiAgICAgJ3snIFMqIGRlY2xhcmF0aW9uPyBbICc7JyBTKiBkZWNsYXJhdGlvbj8gXSogJ30nIFMqDQogICAgICAgICAgICAgICAgICogICA7ICAgIA0KICAgICAgICAgICAgICAgICAqLyAgICANCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHR0LA0KICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnM7DQoNCg0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogRXJyb3IgUmVjb3Zlcnk6IElmIGV2ZW4gYSBzaW5nbGUgc2VsZWN0b3IgZmFpbHMgdG8gcGFyc2UsDQogICAgICAgICAgICAgICAgICogdGhlbiB0aGUgZW50aXJlIHJ1bGVzZXQgc2hvdWxkIGJlIHRocm93biBhd2F5Lg0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycyA9IHRoaXMuX3NlbGVjdG9yc19ncm91cCgpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KXsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgU3ludGF4RXJyb3IgJiYgIXRoaXMub3B0aW9ucy5zdHJpY3Qpew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZmlyZSBlcnJvciBldmVudA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAiZXJyb3IiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAgICAgIGV4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICAgIGV4Lm1lc3NhZ2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICAgICAgZXgubGluZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgICAgICBleC5jb2wNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2tpcCBvdmVyIGV2ZXJ5dGhpbmcgdW50aWwgY2xvc2luZyBicmFjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgdHQgPSB0b2tlblN0cmVhbS5hZHZhbmNlKFtUb2tlbnMuUkJSQUNFXSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHQgPT0gVG9rZW5zLlJCUkFDRSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSdzIGEgcmlnaHQgYnJhY2UsIHRoZSBydWxlIGlzIGZpbmlzaGVkIHNvIGRvbid0IGRvIGFueXRoaW5nDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlLCByZXRocm93IHRoZSBlcnJvciBiZWNhdXNlIGl0IHdhc24ndCBoYW5kbGVkIHByb3Blcmx5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7DQogICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vbm90IGEgc3ludGF4IGVycm9yLCByZXRocm93IGl0DQogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDsNCiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgLy90cmlnZ2VyIHBhcnNlciB0byBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9pZiBpdCBnb3QgaGVyZSwgYWxsIHNlbGVjdG9ycyBwYXJzZWQNCiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JzKXsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgICAgICJzdGFydHJ1bGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzOiAgc2VsZWN0b3JzLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICAgICAgc2VsZWN0b3JzWzBdLmxpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgICAgICBzZWxlY3RvcnNbMF0uY29sDQogICAgICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWREZWNsYXJhdGlvbnModHJ1ZSk7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgICAgICJlbmRydWxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yczogIHNlbGVjdG9ycywNCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgICAgIHNlbGVjdG9yc1swXS5saW5lLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29sOiAgICAgICAgc2VsZWN0b3JzWzBdLmNvbA0KICAgICAgICAgICAgICAgICAgICB9KTsgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yczsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgIC8vQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF9zZWxlY3RvcnNfZ3JvdXA6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAqIHNlbGVjdG9yc19ncm91cA0KICAgICAgICAgICAgICAgICAqICAgOiBzZWxlY3RvciBbIENPTU1BIFMqIHNlbGVjdG9yIF0qDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzICAgPSBbXSwNCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdGhpcy5fc2VsZWN0b3IoKTsNCiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMucHVzaChzZWxlY3Rvcik7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5DT01NQSkpew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdGhpcy5fc2VsZWN0b3IoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0uTFQoMSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9ycy5sZW5ndGggPyBzZWxlY3RvcnMgOiBudWxsOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIC8vQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF9zZWxlY3RvcjogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIHNlbGVjdG9yDQogICAgICAgICAgICAgICAgICogICA6IHNpbXBsZV9zZWxlY3Rvcl9zZXF1ZW5jZSBbIGNvbWJpbmF0b3Igc2ltcGxlX3NlbGVjdG9yX3NlcXVlbmNlIF0qDQogICAgICAgICAgICAgICAgICogICA7ICAgIA0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgICAgPSBbXSwNCiAgICAgICAgICAgICAgICAgICAgbmV4dFNlbGVjdG9yID0gbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgY29tYmluYXRvciAgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICB3cyAgICAgICAgICA9IG51bGw7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9pZiB0aGVyZSdzIG5vIHNpbXBsZSBzZWxlY3RvciwgdGhlbiB0aGVyZSdzIG5vIHNlbGVjdG9yDQogICAgICAgICAgICAgICAgbmV4dFNlbGVjdG9yID0gdGhpcy5fc2ltcGxlX3NlbGVjdG9yX3NlcXVlbmNlKCk7DQogICAgICAgICAgICAgICAgaWYgKG5leHRTZWxlY3RvciA9PT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBzZWxlY3Rvci5wdXNoKG5leHRTZWxlY3Rvcik7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgLy9sb29rIGZvciBhIGNvbWJpbmF0b3INCiAgICAgICAgICAgICAgICAgICAgY29tYmluYXRvciA9IHRoaXMuX2NvbWJpbmF0b3IoKTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5hdG9yICE9PSBudWxsKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goY29tYmluYXRvcik7DQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0U2VsZWN0b3IgPSB0aGlzLl9zaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVyZSBtdXN0IGJlIGEgbmV4dCBzZWxlY3Rvcg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRTZWxlY3RvciA9PT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5leHBlY3RlZFRva2VuKHRoaXMuTFQoMSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbmV4dFNlbGVjdG9yIGlzIGFuIGluc3RhbmNlIG9mIFNlbGVjdG9yUGFydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2gobmV4dFNlbGVjdG9yKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSdzIG5vdCB3aGl0ZXNwYWNlLCB3ZSdyZSBkb25lDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZFdoaXRlc3BhY2UoKSl7ICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hZGQgd2hpdGVzcGFjZSBzZXBhcmF0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cyA9IG5ldyBDb21iaW5hdG9yKHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsIHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lLCB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbWJpbmF0b3IgaXMgbm90IHJlcXVpcmVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluYXRvciA9IHRoaXMuX2NvbWJpbmF0b3IoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlbGVjdG9yIGlzIHJlcXVpcmVkIGlmIHRoZXJlJ3MgYSBjb21iaW5hdG9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNlbGVjdG9yID0gdGhpcy5fc2ltcGxlX3NlbGVjdG9yX3NlcXVlbmNlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRTZWxlY3RvciA9PT0gbnVsbCl7ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5hdG9yICE9PSBudWxsKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0b2tlblN0cmVhbS5MVCgxKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbWJpbmF0b3IgIT09IG51bGwpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucHVzaChjb21iaW5hdG9yKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2god3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5wdXNoKG5leHRTZWxlY3Rvcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gd2hpbGUodHJ1ZSk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RvcihzZWxlY3Rvciwgc2VsZWN0b3JbMF0ubGluZSwgc2VsZWN0b3JbMF0uY29sKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF9zaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2U6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBzaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2UNCiAgICAgICAgICAgICAgICAgKiAgIDogWyB0eXBlX3NlbGVjdG9yIHwgdW5pdmVyc2FsIF0NCiAgICAgICAgICAgICAgICAgKiAgICAgWyBIQVNIIHwgY2xhc3MgfCBhdHRyaWIgfCBwc2V1ZG8gfCBuZWdhdGlvbiBdKg0KICAgICAgICAgICAgICAgICAqICAgfCBbIEhBU0ggfCBjbGFzcyB8IGF0dHJpYiB8IHBzZXVkbyB8IG5lZ2F0aW9uIF0rDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAvL3BhcnRzIG9mIGEgc2ltcGxlIHNlbGVjdG9yDQogICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzICAgPSBbXSwNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIC8vY29tcGxldGUgc2VsZWN0b3IgdGV4dA0KICAgICAgICAgICAgICAgICAgICBzZWxlY3RvclRleHQ9ICIiLA0KDQogICAgICAgICAgICAgICAgICAgIC8vdGhlIGRpZmZlcmVudCBwYXJ0cyBhZnRlciB0aGUgZWxlbWVudCBuYW1lIHRvIHNlYXJjaCBmb3INCiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cyAgPSBbDQogICAgICAgICAgICAgICAgICAgICAgICAvL0hBU0gNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5IQVNIKSA/DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2VsZWN0b3JTdWJQYXJ0KHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsICJpZCIsIHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lLCB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sKSA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsYXNzLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0cmliLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHNldWRvLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmVnYXRpb24NCiAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAgICAgaSAgICAgICAgICAgPSAwLA0KICAgICAgICAgICAgICAgICAgICBsZW4gICAgICAgICA9IGNvbXBvbmVudHMubGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIGZvdW5kICAgICAgID0gZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbDsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vZ2V0IHN0YXJ0aW5nIGxpbmUgYW5kIGNvbHVtbiBmb3IgdGhlIHNlbGVjdG9yDQogICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0TGluZTsNCiAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS5MVCgxKS5zdGFydENvbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9IHRoaXMuX3R5cGVfc2VsZWN0b3IoKTsNCiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnROYW1lKXsNCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB0aGlzLl91bml2ZXJzYWwoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnROYW1lICE9PSBudWxsKXsNCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JUZXh0ICs9IGVsZW1lbnROYW1lOw0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgd2hpbGUodHJ1ZSl7DQoNCiAgICAgICAgICAgICAgICAgICAgLy93aGl0ZXNwYWNlIG1lYW5zIHdlJ3JlIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnBlZWsoKSA9PT0gVG9rZW5zLlMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgLy9jaGVjayBmb3IgZWFjaCBjb21wb25lbnQNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUoaSA8IGxlbiAmJiBjb21wb25lbnQgPT09IG51bGwpew0KICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50c1tpKytdLmNhbGwodGhpcyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQgPT09IG51bGwpew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vd2UgZG9uJ3QgaGF2ZSBhIHNlbGVjdG9yDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JUZXh0ID09PSAiIil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChjb21wb25lbnQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JUZXh0ICs9IGNvbXBvbmVudC50b1N0cmluZygpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yVGV4dCAhPT0gIiIgPw0KICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNlbGVjdG9yUGFydChlbGVtZW50TmFtZSwgbW9kaWZpZXJzLCBzZWxlY3RvclRleHQsIGxpbmUsIGNvbCkgOg0KICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsNCiAgICAgICAgICAgIH0sICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF90eXBlX3NlbGVjdG9yOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogdHlwZV9zZWxlY3Rvcg0KICAgICAgICAgICAgICAgICAqICAgOiBbIG5hbWVzcGFjZV9wcmVmaXggXT8gZWxlbWVudF9uYW1lDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICBucyAgICAgICAgICA9IHRoaXMuX25hbWVzcGFjZV9wcmVmaXgoKSwNCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB0aGlzLl9lbGVtZW50X25hbWUoKTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50TmFtZSl7ICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICogTmVlZCB0byBiYWNrIG91dCB0aGUgbmFtZXNwYWNlIHRoYXQgd2FzIHJlYWQgZHVlIHRvIGJvdGgNCiAgICAgICAgICAgICAgICAgICAgICogdHlwZV9zZWxlY3RvciBhbmQgdW5pdmVyc2FsIHJlYWRpbmcgbmFtZXNwYWNlX3ByZWZpeA0KICAgICAgICAgICAgICAgICAgICAgKiBmaXJzdC4gS2luZCBvZiBoYWNreSwgYnV0IG9ubHkgd2F5IEkgY2FuIGZpZ3VyZSBvdXQNCiAgICAgICAgICAgICAgICAgICAgICogcmlnaHQgbm93IGhvdyB0byBub3QgY2hhbmdlIHRoZSBncmFtbWFyLg0KICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgaWYgKG5zKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLnVuZ2V0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobnMubGVuZ3RoID4gMSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0udW5nZXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmIChucyl7DQogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZS50ZXh0ID0gbnMgKyBlbGVtZW50TmFtZS50ZXh0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUuY29sIC09IG5zLmxlbmd0aDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudE5hbWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy9DU1MzIFNlbGVjdG9ycw0KICAgICAgICAgICAgX2NsYXNzOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogY2xhc3MNCiAgICAgICAgICAgICAgICAgKiAgIDogJy4nIElERU5UDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovICAgIA0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdG9rZW47DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5ET1QpKXsNCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5JREVOVCk7ICAgIA0KICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3JTdWJQYXJ0KCIuIiArIHRva2VuLnZhbHVlLCAiY2xhc3MiLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sIC0gMSk7ICAgICAgICANCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy9DU1MzIFNlbGVjdG9ycw0KICAgICAgICAgICAgX2VsZW1lbnRfbmFtZTogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIGVsZW1lbnRfbmFtZQ0KICAgICAgICAgICAgICAgICAqICAgOiBJREVOVA0KICAgICAgICAgICAgICAgICAqICAgOw0KICAgICAgICAgICAgICAgICAqLyAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdG9rZW47DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCkpew0KICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3JTdWJQYXJ0KHRva2VuLnZhbHVlLCAiZWxlbWVudE5hbWUiLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sKTsgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF9uYW1lc3BhY2VfcHJlZml4OiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICogbmFtZXNwYWNlX3ByZWZpeA0KICAgICAgICAgICAgICAgICAqICAgOiBbIElERU5UIHwgJyonIF0/ICd8Jw0KICAgICAgICAgICAgICAgICAqICAgOw0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9ICIiOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL3ZlcmlmeSB0aGF0IHRoaXMgaXMgYSBuYW1lc3BhY2UgcHJlZml4DQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLkxBKDEpID09PSBUb2tlbnMuUElQRSB8fCB0b2tlblN0cmVhbS5MQSgyKSA9PT0gVG9rZW5zLlBJUEUpew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuSURFTlQsIFRva2Vucy5TVEFSXSkpew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5QSVBFKTsNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gInwiOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA/IHZhbHVlIDogbnVsbDsgICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICAvL0NTUzMgU2VsZWN0b3JzDQogICAgICAgICAgICBfdW5pdmVyc2FsOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogdW5pdmVyc2FsDQogICAgICAgICAgICAgICAgICogICA6IFsgbmFtZXNwYWNlX3ByZWZpeCBdPyAnKicNCiAgICAgICAgICAgICAgICAgKiAgIDsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAgICAgPSAiIiwNCiAgICAgICAgICAgICAgICAgICAgbnM7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIG5zID0gdGhpcy5fbmFtZXNwYWNlX3ByZWZpeCgpOw0KICAgICAgICAgICAgICAgIGlmKG5zKXsNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gbnM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5TVEFSKSl7DQogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICIqIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA/IHZhbHVlIDogbnVsbDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy9DU1MzIFNlbGVjdG9ycw0KICAgICAgICAgICAgX2F0dHJpYjogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIGF0dHJpYg0KICAgICAgICAgICAgICAgICAqICAgOiAnWycgUyogWyBuYW1lc3BhY2VfcHJlZml4IF0/IElERU5UIFMqDQogICAgICAgICAgICAgICAgICogICAgICAgICBbIFsgUFJFRklYTUFUQ0ggfA0KICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgIFNVRkZJWE1BVENIIHwNCiAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICBTVUJTVFJJTkdNQVRDSCB8DQogICAgICAgICAgICAgICAgICogICAgICAgICAgICAgJz0nIHwNCiAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICBJTkNMVURFUyB8DQogICAgICAgICAgICAgICAgICogICAgICAgICAgICAgREFTSE1BVENIIF0gUyogWyBJREVOVCB8IFNUUklORyBdIFMqDQogICAgICAgICAgICAgICAgICogICAgICAgICBdPyAnXScNCiAgICAgICAgICAgICAgICAgKiAgIDsgICAgDQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIG5zLA0KICAgICAgICAgICAgICAgICAgICB0b2tlbjsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkxCUkFDS0VUKSl7DQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIG5zID0gdGhpcy5fbmFtZXNwYWNlX3ByZWZpeCgpOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgaWYgKG5zKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IG5zOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuSURFTlQpOw0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOyAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZih0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLlBSRUZJWE1BVENILCBUb2tlbnMuU1VGRklYTUFUQ0gsIFRva2Vucy5TVUJTVFJJTkdNQVRDSCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuRVFVQUxTLCBUb2tlbnMuSU5DTFVERVMsIFRva2Vucy5EQVNITUFUQ0hdKSl7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFtUb2tlbnMuSURFTlQsIFRva2Vucy5TVFJJTkddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7ICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUkJSQUNLRVQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNlbGVjdG9yU3ViUGFydCh2YWx1ZSArICJdIiwgImF0dHJpYnV0ZSIsIHRva2VuLnN0YXJ0TGluZSwgdG9rZW4uc3RhcnRDb2wpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF9wc2V1ZG86IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIHBzZXVkbw0KICAgICAgICAgICAgICAgICAqICAgOiAnOicgJzonPyBbIElERU5UIHwgZnVuY3Rpb25hbF9wc2V1ZG8gXQ0KICAgICAgICAgICAgICAgICAqICAgOyAgICANCiAgICAgICAgICAgICAgICAgKi8gICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICBwc2V1ZG8gICAgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIGNvbG9ucyAgICAgID0gIjoiLA0KICAgICAgICAgICAgICAgICAgICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2w7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5DT0xPTikpew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkNPTE9OKSl7DQogICAgICAgICAgICAgICAgICAgICAgICBjb2xvbnMgKz0gIjoiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkbyA9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7DQogICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sIC0gY29sb25zLmxlbmd0aDsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLkZVTkNUSU9OKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS5MVCgxKS5zdGFydExpbmU7DQogICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS5MVCgxKS5zdGFydENvbCAtIGNvbG9ucy5sZW5ndGg7DQogICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG8gPSB0aGlzLl9mdW5jdGlvbmFsX3BzZXVkbygpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZiAocHNldWRvKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkbyA9IG5ldyBTZWxlY3RvclN1YlBhcnQoY29sb25zICsgcHNldWRvLCAicHNldWRvIiwgbGluZSwgY29sKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIHBzZXVkbzsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF9mdW5jdGlvbmFsX3BzZXVkbzogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIGZ1bmN0aW9uYWxfcHNldWRvDQogICAgICAgICAgICAgICAgICogICA6IEZVTkNUSU9OIFMqIGV4cHJlc3Npb24gJyknDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgKi8gICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5GVU5DVElPTikpew0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7DQogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX2V4cHJlc3Npb24oKTsNCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5SUEFSRU4pOw0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiKSI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vQ1NTMyBTZWxlY3RvcnMNCiAgICAgICAgICAgIF9leHByZXNzaW9uOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogZXhwcmVzc2lvbg0KICAgICAgICAgICAgICAgICAqICAgOiBbIFsgUExVUyB8ICctJyB8IERJTUVOU0lPTiB8IE5VTUJFUiB8IFNUUklORyB8IElERU5UIF0gUyogXSsNCiAgICAgICAgICAgICAgICAgKiAgIDsNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgID0gIiI7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHdoaWxlKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuUExVUywgVG9rZW5zLk1JTlVTLCBUb2tlbnMuRElNRU5TSU9OLA0KICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLk5VTUJFUiwgVG9rZW5zLlNUUklORywgVG9rZW5zLklERU5ULCBUb2tlbnMuTEVOR1RILA0KICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLkZSRVEsIFRva2Vucy5BTkdMRSwgVG9rZW5zLlRJTUUsDQogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuUkVTT0xVVElPTl0pKXsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7DQogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPyB2YWx1ZSA6IG51bGw7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvL0NTUzMgU2VsZWN0b3JzDQogICAgICAgICAgICBfbmVnYXRpb246IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgLyogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgKiBuZWdhdGlvbg0KICAgICAgICAgICAgICAgICAqICAgOiBOT1QgUyogbmVnYXRpb25fYXJnIFMqICcpJw0KICAgICAgICAgICAgICAgICAqICAgOw0KICAgICAgICAgICAgICAgICAqLw0KDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbCwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAgICAgPSAiIiwNCiAgICAgICAgICAgICAgICAgICAgYXJnLA0KICAgICAgICAgICAgICAgICAgICBzdWJwYXJ0ICAgICA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuTk9UKSl7DQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOw0KICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOw0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgICAgICBhcmcgPSB0aGlzLl9uZWdhdGlvbl9hcmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gYXJnOw0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuUlBBUkVOKTsNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHN1YnBhcnQgPSBuZXcgU2VsZWN0b3JTdWJQYXJ0KHZhbHVlLCAibm90IiwgbGluZSwgY29sKTsNCiAgICAgICAgICAgICAgICAgICAgc3VicGFydC5hcmdzLnB1c2goYXJnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIHN1YnBhcnQ7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICAvL0NTUzMgU2VsZWN0b3JzDQogICAgICAgICAgICBfbmVnYXRpb25fYXJnOiBmdW5jdGlvbigpeyAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogbmVnYXRpb25fYXJnDQogICAgICAgICAgICAgICAgICogICA6IHR5cGVfc2VsZWN0b3IgfCB1bml2ZXJzYWwgfCBIQVNIIHwgY2xhc3MgfCBhdHRyaWIgfCBwc2V1ZG8NCiAgICAgICAgICAgICAgICAgKiAgIDsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgKi8gICAgICAgICAgIA0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgYXJncyAgICAgICAgPSBbDQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBlX3NlbGVjdG9yLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pdmVyc2FsLA0KICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkhBU0gpID8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTZWxlY3RvclN1YlBhcnQodG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSwgImlkIiwgdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmUsIHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2wpIDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xhc3MsDQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRyaWIsDQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wc2V1ZG8gICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICBhcmcgICAgICAgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgID0gMCwNCiAgICAgICAgICAgICAgICAgICAgbGVuICAgICAgICAgPSBhcmdzLmxlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUsDQogICAgICAgICAgICAgICAgICAgIGxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbCwNCiAgICAgICAgICAgICAgICAgICAgcGFydDsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0TGluZTsNCiAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS5MVCgxKS5zdGFydENvbDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB3aGlsZShpIDwgbGVuICYmIGFyZyA9PT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmdzW2ldLmNhbGwodGhpcyk7DQogICAgICAgICAgICAgICAgICAgIGkrKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9tdXN0IGJlIGEgbmVnYXRpb24gYXJnDQogICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0b2tlblN0cmVhbS5MVCgxKSk7DQogICAgICAgICAgICAgICAgfQ0KIA0KICAgICAgICAgICAgICAgIC8vaXQncyBhbiBlbGVtZW50IG5hbWUNCiAgICAgICAgICAgICAgICBpZiAoYXJnLnR5cGUgPT0gImVsZW1lbnROYW1lIil7DQogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBuZXcgU2VsZWN0b3JQYXJ0KGFyZywgW10sIGFyZy50b1N0cmluZygpLCBsaW5lLCBjb2wpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBuZXcgU2VsZWN0b3JQYXJ0KG51bGwsIFthcmddLCBhcmcudG9TdHJpbmcoKSwgbGluZSwgY29sKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQ7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgX2RlY2xhcmF0aW9uOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBkZWNsYXJhdGlvbg0KICAgICAgICAgICAgICAgICAqICAgOiBwcm9wZXJ0eSAnOicgUyogZXhwciBwcmlvPw0KICAgICAgICAgICAgICAgICAqICAgfCAvKCBlbXB0eSApLw0KICAgICAgICAgICAgICAgICAqICAgOyAgICAgDQogICAgICAgICAgICAgICAgICovICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ICAgID0gbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgZXhwciAgICAgICAgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICBwcmlvICAgICAgICA9IG51bGw7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcHJvcGVydHkgPSB0aGlzLl9wcm9wZXJ0eSgpOw0KICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPT0gbnVsbCl7DQoNCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5DT0xPTik7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5fZXhwcigpOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSdzIG5vIHBhcnRzIGZvciB0aGUgdmFsdWUsIGl0J3MgYW4gZXJyb3INCiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHByIHx8IGV4cHIubGVuZ3RoID09PSAwKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0b2tlblN0cmVhbS5MVCgxKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHByaW8gPSB0aGlzLl9wcmlvKCk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoew0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAgICAgInByb3BlcnR5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAgIHByb3BlcnR5LA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICAgICAgZXhwciwNCiAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFudDogIHByaW8sDQogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgICAgICBwcm9wZXJ0eS5saW5lLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29sOiAgICAgICAgcHJvcGVydHkuY29sDQogICAgICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICBfcHJpbzogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIHByaW8NCiAgICAgICAgICAgICAgICAgKiAgIDogSU1QT1JUQU5UX1NZTSBTKg0KICAgICAgICAgICAgICAgICAqICAgOyAgICANCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdCAgICAgID0gdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklNUE9SVEFOVF9TWU0pOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICBfZXhwcjogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIGV4cHINCiAgICAgICAgICAgICAgICAgKiAgIDogdGVybSBbIG9wZXJhdG9yIHRlcm0gXSoNCiAgICAgICAgICAgICAgICAgKiAgIDsNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHZhbHVlcyAgICAgID0gW10sDQoJCQkJCS8vdmFsdWVQYXJ0cwk9IFtdLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yICAgID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl90ZXJtKCk7DQogICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKXsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSB0aGlzLl9vcGVyYXRvcigpOw0KICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUncyBhbiBvcGVyYXRvciwga2VlcCBidWlsZGluZyB1cCB0aGUgdmFsdWUgcGFydHMNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvcil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2gob3BlcmF0b3IpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSAvKmVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUncyBub3QgYW4gb3BlcmF0b3IsIHlvdSBoYXZlIGEgZnVsbCB2YWx1ZQ0KCQkJCQkJCXZhbHVlcy5wdXNoKG5ldyBQcm9wZXJ0eVZhbHVlKHZhbHVlUGFydHMsIHZhbHVlUGFydHNbMF0ubGluZSwgdmFsdWVQYXJ0c1swXS5jb2wpKTsNCgkJCQkJCQl2YWx1ZVBhcnRzID0gW107DQoJCQkJCQl9Ki8NCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl90ZXJtKCk7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSh0cnVlKTsNCiAgICAgICAgICAgICAgICB9DQoJCQkJDQoJCQkJLy9jbGVhbnVwDQogICAgICAgICAgICAgICAgLyppZiAodmFsdWVQYXJ0cy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChuZXcgUHJvcGVydHlWYWx1ZSh2YWx1ZVBhcnRzLCB2YWx1ZVBhcnRzWzBdLmxpbmUsIHZhbHVlUGFydHNbMF0uY29sKSk7DQogICAgICAgICAgICAgICAgfSovDQogICAgICAgIA0KICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID4gMCA/IG5ldyBQcm9wZXJ0eVZhbHVlKHZhbHVlcywgdmFsdWVzWzBdLnN0YXJ0TGluZSwgdmFsdWVzWzBdLnN0YXJ0Q29sKSA6IG51bGw7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICBfdGVybTogZnVuY3Rpb24oKXsgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiB0ZXJtDQogICAgICAgICAgICAgICAgICogICA6IHVuYXJ5X29wZXJhdG9yPw0KICAgICAgICAgICAgICAgICAqICAgICBbIE5VTUJFUiBTKiB8IFBFUkNFTlRBR0UgUyogfCBMRU5HVEggUyogfCBBTkdMRSBTKiB8DQogICAgICAgICAgICAgICAgICogICAgICAgVElNRSBTKiB8IEZSRVEgUyogfCBmdW5jdGlvbiB8IGllX2Z1bmN0aW9uIF0NCiAgICAgICAgICAgICAgICAgKiAgIHwgU1RSSU5HIFMqIHwgSURFTlQgUyogfCBVUkkgUyogfCBVTklDT0RFUkFOR0UgUyogfCBoZXhjb2xvcg0KICAgICAgICAgICAgICAgICAqICAgOw0KICAgICAgICAgICAgICAgICAqLyAgICANCiAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHVuYXJ5ICAgICAgID0gbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAgICAgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICBsaW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2w7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vcmV0dXJucyB0aGUgb3BlcmF0b3Igb3IgbnVsbA0KICAgICAgICAgICAgICAgIHVuYXJ5ID0gdGhpcy5fdW5hcnlfb3BlcmF0b3IoKTsNCiAgICAgICAgICAgICAgICBpZiAodW5hcnkgIT09IG51bGwpew0KICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7DQogICAgICAgICAgICAgICAgICAgIGNvbCA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2w7DQogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vZXhjZXB0aW9uIGZvciBJRSBmaWx0ZXJzDQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuSUVfRlVOQ1RJT04gJiYgdGhpcy5vcHRpb25zLmllRmlsdGVycyl7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5faWVfZnVuY3Rpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHVuYXJ5ID09PSBudWxsKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2w7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL3NlZSBpZiB0aGVyZSdzIGEgc2ltcGxlIG1hdGNoDQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLk5VTUJFUiwgVG9rZW5zLlBFUkNFTlRBR0UsIFRva2Vucy5MRU5HVEgsDQogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuQU5HTEUsIFRva2Vucy5USU1FLA0KICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLkZSRVEsIFRva2Vucy5TVFJJTkcsIFRva2Vucy5JREVOVCwgVG9rZW5zLlVSSSwgVG9rZW5zLlVOSUNPREVfUkFOR0VdKSl7DQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7DQogICAgICAgICAgICAgICAgICAgIGlmICh1bmFyeSA9PT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7DQogICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgLy9zZWUgaWYgaXQncyBhIGNvbG9yDQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5faGV4Y29sb3IoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKXsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlJ3Mgbm8gdW5hcnksIGdldCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgdG9rZW4gZm9yIGxpbmUvY29sIGluZm8NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmFyeSA9PT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0TGluZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS5MVCgxKS5zdGFydENvbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGFzIHRvIGJlIGEgZnVuY3Rpb24NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIGNoZWNrcyBmb3IgYWxwaGEob3BhY2l0eT0wKSBzdHlsZSBvZiBJRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZ1bmN0aW9ucy4gSUVfRlVOQ1RJT04gb25seSBwcmVzZW50cyBwcm9naWQ6IHN0eWxlLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5MQSgzKSA9PSBUb2tlbnMuRVFVQUxTICYmIHRoaXMub3B0aW9ucy5pZUZpbHRlcnMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2llX2Z1bmN0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9mdW5jdGlvbigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAodmFsdWUgPT09IG51bGwpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIGF0IGxpbmUgIiArIHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lICsgIiwgY2hhcmFjdGVyICIgKyAgdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCArICIuIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9Ki8NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5hcnkgPT09IG51bGwpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCA/DQogICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHJvcGVydHlWYWx1ZVBhcnQodW5hcnkgIT09IG51bGwgPyB1bmFyeSArIHZhbHVlIDogdmFsdWUsIGxpbmUsIGNvbCkgOg0KICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsNCiAgICAgICAgDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICBfZnVuY3Rpb246IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIGZ1bmN0aW9uDQogICAgICAgICAgICAgICAgICogICA6IEZVTkNUSU9OIFMqIGV4cHIgJyknIFMqDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblRleHQgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICBleHByICAgICAgICA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuRlVOQ1RJT04pKXsNCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ID0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuX2V4cHIoKTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5SUEFSRU4pOyAgICANCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9IGV4cHIgKyAiKSI7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25UZXh0Ow0KICAgICAgICAgICAgfSwgDQogICAgICAgICAgICANCiAgICAgICAgICAgIF9pZV9mdW5jdGlvbjogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qIChNeSBvd24gZXh0ZW5zaW9uKQ0KICAgICAgICAgICAgICAgICAqIGllX2Z1bmN0aW9uDQogICAgICAgICAgICAgICAgICogICA6IElFX0ZVTkNUSU9OIFMqIElERU5UICc9JyB0ZXJtIFtTKiAnLCc/IElERU5UICc9JyB0ZXJtXSsgJyknIFMqDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblRleHQgPSBudWxsLA0KICAgICAgICAgICAgICAgICAgICBleHByICAgICAgICA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgIGx0Ow0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL0lFIGZ1bmN0aW9uIGNhbiBiZWdpbiBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgdG9vDQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuSUVfRlVOQ1RJT04sIFRva2Vucy5GVU5DVElPTl0pKXsNCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ID0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGRvIHsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZFdoaXRlc3BhY2UoKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vbWlnaHQgYmUgc2Vjb25kIHRpbWUgaW4gdGhlIGxvb3ANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5MQSgwKSA9PSBUb2tlbnMuQ09NTUEpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uVGV4dCArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCk7DQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblRleHQgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkVRVUFMUyk7DQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblRleHQgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgLy9mdW5jdGlvblRleHQgKz0gdGhpcy5fdGVybSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgbHQgPSB0b2tlblN0cmVhbS5wZWVrKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShsdCAhPSBUb2tlbnMuQ09NTUEgJiYgbHQgIT0gVG9rZW5zLlMgJiYgbHQgIT0gVG9rZW5zLlJQQVJFTil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0uZ2V0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbHQgPSB0b2tlblN0cmVhbS5wZWVrKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gd2hpbGUodG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5DT01NQSwgVG9rZW5zLlNdKSk7ICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5SUEFSRU4pOyAgICANCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9ICIpIjsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvblRleHQ7DQogICAgICAgICAgICB9LCANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgX2hleGNvbG9yOiBmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogVGhlcmUgaXMgYSBjb25zdHJhaW50IG9uIHRoZSBjb2xvciB0aGF0IGl0IG11c3QNCiAgICAgICAgICAgICAgICAgKiBoYXZlIGVpdGhlciAzIG9yIDYgaGV4LWRpZ2l0cyAoaS5lLiwgWzAtOWEtZkEtRl0pDQogICAgICAgICAgICAgICAgICogYWZ0ZXIgdGhlICIjIjsgZS5nLiwgIiMwMDAiIGlzIE9LLCBidXQgIiNhYmNkIiBpcyBub3QuDQogICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgKiBoZXhjb2xvcg0KICAgICAgICAgICAgICAgICAqICAgOiBIQVNIIFMqDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICB0b2tlbiwNCiAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBudWxsOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5IQVNIKSl7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIC8vbmVlZCB0byBkbyBzb21lIHZhbGlkYXRpb24gaGVyZQ0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS50b2tlbigpOw0KICAgICAgICAgICAgICAgICAgICBjb2xvciA9IHRva2VuLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIS8jW2EtZjAtOV17Myw2fS9pLnRlc3QoY29sb3IpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcigiRXhwZWN0ZWQgYSBoZXggY29sb3IgYnV0IGZvdW5kICciICsgY29sb3IgKyAiJyBhdCBsaW5lICIgKyB0b2tlbi5zdGFydExpbmUgKyAiLCBjb2wgIiArIHRva2VuLnN0YXJ0Q29sICsgIi4iLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAgICAvLyBBbmltYXRpb25zIG1ldGhvZHMNCiAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgX2tleWZyYW1lczogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICoga2V5ZnJhbWVzOg0KICAgICAgICAgICAgICAgICAqICAgOiBLRVlGUkFNRVNfU1lNIFMqIGtleWZyYW1lX25hbWUgUyogJ3snIFMqIGtleWZyYW1lX3J1bGUqICd9JyB7DQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHRva2VuLA0KICAgICAgICAgICAgICAgICAgICB0dCwNCiAgICAgICAgICAgICAgICAgICAgbmFtZTsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5LRVlGUkFNRVNfU1lNKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLl9rZXlmcmFtZV9uYW1lKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkxCUkFDRSk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgInN0YXJ0a2V5ZnJhbWVzIiwNCiAgICAgICAgICAgICAgICAgICAgbmFtZTogICBuYW1lLA0KICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIG5hbWUubGluZSwNCiAgICAgICAgICAgICAgICAgICAgY29sOiAgICBuYW1lLmNvbA0KICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIHR0ID0gdG9rZW5TdHJlYW0ucGVlaygpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vY2hlY2sgZm9yIGtleQ0KICAgICAgICAgICAgICAgIHdoaWxlKHR0ID09IFRva2Vucy5JREVOVCB8fCB0dCA9PSBUb2tlbnMuUEVSQ0VOVEFHRSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlmcmFtZV9ydWxlKCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgICAgIHR0ID0gdG9rZW5TdHJlYW0ucGVlaygpOw0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgImVuZGtleWZyYW1lcyIsDQogICAgICAgICAgICAgICAgICAgIG5hbWU6ICAgbmFtZSwNCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBuYW1lLmxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbDogICAgbmFtZS5jb2wNCiAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5SQlJBQ0UpOyAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICBfa2V5ZnJhbWVfbmFtZTogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICoga2V5ZnJhbWVfbmFtZToNCiAgICAgICAgICAgICAgICAgKiAgIDogSURFTlQNCiAgICAgICAgICAgICAgICAgKiAgIHwgU1RSSU5HDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHRva2VuOw0KDQogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFtUb2tlbnMuSURFTlQsIFRva2Vucy5TVFJJTkddKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gU3ludGF4VW5pdC5mcm9tVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7ICAgICAgICAgICAgDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICBfa2V5ZnJhbWVfcnVsZTogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICoga2V5ZnJhbWVfcnVsZToNCiAgICAgICAgICAgICAgICAgKiAgIDoga2V5X2xpc3QgUyogDQogICAgICAgICAgICAgICAgICogICAgICd7JyBTKiBkZWNsYXJhdGlvbiBbICc7JyBTKiBkZWNsYXJhdGlvbiBdKiAnfScgUyoNCiAgICAgICAgICAgICAgICAgKiAgIDsNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4sDQogICAgICAgICAgICAgICAgICAgIGtleUxpc3QgPSB0aGlzLl9rZXlfbGlzdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdGhpcy5maXJlKHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAic3RhcnRrZXlmcmFtZXJ1bGUiLA0KICAgICAgICAgICAgICAgICAgICBrZXlzOiAgIGtleUxpc3QsDQogICAgICAgICAgICAgICAgICAgIGxpbmU6ICAga2V5TGlzdFswXS5saW5lLA0KICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGtleUxpc3RbMF0uY29sDQogICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWREZWNsYXJhdGlvbnModHJ1ZSk7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgImVuZGtleWZyYW1lcnVsZSIsDQogICAgICAgICAgICAgICAgICAgIGtleXM6ICAga2V5TGlzdCwNCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBrZXlMaXN0WzBdLmxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNvbDogICAga2V5TGlzdFswXS5jb2wNCiAgICAgICAgICAgICAgICB9KTsgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgX2tleV9saXN0OiBmdW5jdGlvbigpew0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBrZXlfbGlzdDoNCiAgICAgICAgICAgICAgICAgKiAgIDoga2V5IFsgUyogJywnIFMqIGtleV0qDQogICAgICAgICAgICAgICAgICogICA7DQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sDQogICAgICAgICAgICAgICAgICAgIHRva2VuLA0KICAgICAgICAgICAgICAgICAgICBrZXksDQogICAgICAgICAgICAgICAgICAgIGtleUxpc3QgPSBbXTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9tdXN0IGJlIGxlYXN0IG9uZSBrZXkNCiAgICAgICAgICAgICAgICBrZXlMaXN0LnB1c2godGhpcy5fa2V5KCkpOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB3aGlsZSh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ09NTUEpKXsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICAgICAga2V5TGlzdC5wdXNoKHRoaXMuX2tleSgpKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICByZXR1cm4ga2V5TGlzdDsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIF9rZXk6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBUaGVyZSBpcyBhIHJlc3RyaWN0aW9uIHRoYXQgSURFTlQgY2FuIGJlIG9ubHkgImZyb20iIG9yICJ0byIuDQogICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgKiBrZXkNCiAgICAgICAgICAgICAgICAgKiAgIDogUEVSQ0VOVEFHRQ0KICAgICAgICAgICAgICAgICAqICAgfCBJREVOVA0KICAgICAgICAgICAgICAgICAqICAgOw0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdG9rZW47DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuUEVSQ0VOVEFHRSkpew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3ludGF4VW5pdC5mcm9tVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpKXsNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS50b2tlbigpOyAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZiAoL2Zyb218dG8vaS50ZXN0KHRva2VuLnZhbHVlKSl7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3ludGF4VW5pdC5mcm9tVG9rZW4odG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS51bmdldCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL2lmIGl0IGdldHMgaGVyZSwgdGhlcmUgd2Fzbid0IGEgdmFsaWQgdG9rZW4sIHNvIHRpbWUgdG8gZXhwbG9kZQ0KICAgICAgICAgICAgICAgIHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0b2tlblN0cmVhbS5MVCgxKSk7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAgICAvLyBIZWxwZXIgbWV0aG9kcw0KICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAqIE5vdCBwYXJ0IG9mIENTUyBncmFtbWFyLCBidXQgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyDQogICAgICAgICAgICAgKiBjb21iaW5hdGlvbiBvZiB3aGl0ZSBzcGFjZSBhbmQgSFRNTC1zdHlsZSBjb21tZW50cy4NCiAgICAgICAgICAgICAqIEByZXR1cm4ge3ZvaWR9DQogICAgICAgICAgICAgKiBAbWV0aG9kIF9za2lwQ3J1ZnQNCiAgICAgICAgICAgICAqIEBwcml2YXRlDQogICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIF9za2lwQ3J1ZnQ6IGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgd2hpbGUodGhpcy5fdG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5TLCBUb2tlbnMuQ0RPLCBUb2tlbnMuQ0RDXSkpew0KICAgICAgICAgICAgICAgICAgICAvL25vb3ANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAqIE5vdCBwYXJ0IG9mIENTUyBncmFtbWFyLCBidXQgdGhpcyBwYXR0ZXJuIG9jY3VycyBmcmVxdWVudGx5DQogICAgICAgICAgICAgKiBpbiB0aGUgb2ZmaWNpYWwgQ1NTIGdyYW1tYXIuIFNwbGl0IG91dCBoZXJlIHRvIGVsaW1pbmF0ZQ0KICAgICAgICAgICAgICogZHVwbGljYXRlIGNvZGUuDQogICAgICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGNoZWNrU3RhcnQgSW5kaWNhdGVzIGlmIHRoZSBydWxlIHNob3VsZCBjaGVjaw0KICAgICAgICAgICAgICogICAgICBmb3IgdGhlIGxlZnQgYnJhY2UgYXQgdGhlIGJlZ2lubmluZy4NCiAgICAgICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVhZE1hcmdpbnMgSW5kaWNhdGVzIGlmIHRoZSBydWxlIHNob3VsZCBjaGVjaw0KICAgICAgICAgICAgICogICAgICBmb3IgbWFyZ2luIHBhdHRlcm5zLg0KICAgICAgICAgICAgICogQHJldHVybiB7dm9pZH0NCiAgICAgICAgICAgICAqIEBtZXRob2QgX3JlYWREZWNsYXJhdGlvbnMNCiAgICAgICAgICAgICAqIEBwcml2YXRlDQogICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIF9yZWFkRGVjbGFyYXRpb25zOiBmdW5jdGlvbihjaGVja1N0YXJ0LCByZWFkTWFyZ2lucyl7DQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBSZWFkcyB0aGUgcGF0dGVybg0KICAgICAgICAgICAgICAgICAqIFMqICd7JyBTKiBkZWNsYXJhdGlvbiBbICc7JyBTKiBkZWNsYXJhdGlvbiBdKiAnfScgUyoNCiAgICAgICAgICAgICAgICAgKiBvcg0KICAgICAgICAgICAgICAgICAqIFMqICd7JyBTKiBbIGRlY2xhcmF0aW9uIHwgbWFyZ2luIF0/IFsgJzsnIFMqIFsgZGVjbGFyYXRpb24gfCBtYXJnaW4gXT8gXSogJ30nIFMqDQogICAgICAgICAgICAgICAgICogTm90ZSB0aGF0IHRoaXMgaXMgaG93IGl0IGlzIGRlc2NyaWJlZCBpbiBDU1MzIFBhZ2VkIE1lZGlhLCBidXQgaXMgYWN0dWFsbHkgaW5jb3JyZWN0Lg0KICAgICAgICAgICAgICAgICAqIEEgc2VtaWNvbG9uIGlzIG9ubHkgbmVjZXNzYXJ5IGZvbGxvd2luZyBhIGRlbGNhcmF0aW9uIGlzIHRoZXJlJ3MgYW5vdGhlciBkZWNsYXJhdGlvbg0KICAgICAgICAgICAgICAgICAqIG9yIG1hcmdpbiBhZnRlcndhcmRzLiANCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwNCiAgICAgICAgICAgICAgICAgICAgdHQ7DQogICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoY2hlY2tTdGFydCl7DQogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuTEJSQUNFKTsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCg0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB3aGlsZSh0cnVlKXsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZE1hcmdpbnMgJiYgdGhpcy5fbWFyZ2luKCkpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbm9vcA0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kZWNsYXJhdGlvbigpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5TRU1JQ09MT04pKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAvL2lmICgoIXRoaXMuX21hcmdpbigpICYmICF0aGlzLl9kZWNsYXJhdGlvbigpKSB8fCAhdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLlNFTUlDT0xPTikpew0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAvL30NCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUkJSQUNFKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgU3ludGF4RXJyb3IgJiYgIXRoaXMub3B0aW9ucy5zdHJpY3Qpew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZmlyZSBlcnJvciBldmVudA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAiZXJyb3IiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAgICAgIGV4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICAgIGV4Lm1lc3NhZ2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICAgICAgZXgubGluZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgICAgICBleC5jb2wNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2VlIGlmIHRoZXJlJ3MgYW5vdGhlciBkZWNsYXJhdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgdHQgPSB0b2tlblN0cmVhbS5hZHZhbmNlKFtUb2tlbnMuU0VNSUNPTE9OLCBUb2tlbnMuUkJSQUNFXSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHQgPT0gVG9rZW5zLlNFTUlDT0xPTil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSdzIGEgc2VtaWNvbG9uLCB0aGVuIHRoZXJlIG1pZ2h0IGJlIGFub3RoZXIgZGVjbGFyYXRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRGVjbGFyYXRpb25zKGZhbHNlLCByZWFkTWFyZ2lucyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR0ID09IFRva2Vucy5SQlJBQ0Upew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUncyBhIHJpZ2h0IGJyYWNlLCB0aGUgcnVsZSBpcyBmaW5pc2hlZCBzbyBkb24ndCBkbyBhbnl0aGluZw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL290aGVyd2lzZSwgcmV0aHJvdyB0aGUgZXJyb3IgYmVjYXVzZSBpdCB3YXNuJ3QgaGFuZGxlZCBwcm9wZXJseQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvL25vdCBhIHN5bnRheCBlcnJvciwgcmV0aHJvdyBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9ICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICB9LCAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAqIEluIHNvbWUgY2FzZXMsIHlvdSBjYW4gZW5kIHVwIHdpdGggdHdvIHdoaXRlIHNwYWNlIHRva2VucyBpbiBhDQogICAgICAgICAgICAgKiByb3cuIEluc3RlYWQgb2YgbWFraW5nIGEgY2hhbmdlIGluIGV2ZXJ5IGZ1bmN0aW9uIHRoYXQgbG9va3MgZm9yDQogICAgICAgICAgICAgKiB3aGl0ZSBzcGFjZSwgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hdGNoIGFzIG11Y2ggd2hpdGUgc3BhY2UNCiAgICAgICAgICAgICAqIGFzIG5lY2Vzc2FyeS4NCiAgICAgICAgICAgICAqIEBtZXRob2QgX3JlYWRXaGl0ZXNwYWNlDQogICAgICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSB3aGl0ZSBzcGFjZSBpZiBmb3VuZCwgZW1wdHkgc3RyaW5nIGlmIG5vdC4NCiAgICAgICAgICAgICAqIEBwcml2YXRlDQogICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIF9yZWFkV2hpdGVzcGFjZTogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICB3cyA9ICIiOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB3aGlsZSh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuUykpew0KICAgICAgICAgICAgICAgICAgICB3cyArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICByZXR1cm4gd3M7DQogICAgICAgICAgICB9LA0KICAgICAgICAgIA0KDQogICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAqIFRocm93cyBhbiBlcnJvciB3aGVuIGFuIHVuZXhwZWN0ZWQgdG9rZW4gaXMgZm91bmQuDQogICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gdG9rZW4gVGhlIHRva2VuIHRoYXQgd2FzIGZvdW5kLg0KICAgICAgICAgICAgICogQG1ldGhvZCBfdW5leHBlY3RlZFRva2VuDQogICAgICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQ0KICAgICAgICAgICAgICogQHByaXZhdGUNCiAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgX3VuZXhwZWN0ZWRUb2tlbjogZnVuY3Rpb24odG9rZW4pew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCB0b2tlbiAnIiArIHRva2VuLnZhbHVlICsgIicgYXQgbGluZSAiICsgdG9rZW4uc3RhcnRMaW5lICsgIiwgY29sICIgKyB0b2tlbi5zdGFydENvbCArICIuIiwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgDQogICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAqIEhlbHBlciBtZXRob2QgdXNlZCBmb3IgcGFyc2luZyBzdWJwYXJ0cyBvZiBhIHN0eWxlIHNoZWV0Lg0KICAgICAgICAgICAgICogQHJldHVybiB7dm9pZH0NCiAgICAgICAgICAgICAqIEBtZXRob2QgX3ZlcmlmeUVuZA0KICAgICAgICAgICAgICogQHByaXZhdGUNCiAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgX3ZlcmlmeUVuZDogZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdG9rZW5TdHJlYW0uTEEoMSkgIT0gVG9rZW5zLkVPRil7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0aGlzLl90b2tlblN0cmVhbS5MVCgxKSk7DQogICAgICAgICAgICAgICAgfSAgICAgICAgICAgIA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICAgICAgLy8gUGFyc2luZyBtZXRob2RzDQogICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAgICANCiAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbihpbnB1dCl7ICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RyZWFtID0gbmV3IFRva2VuU3RyZWFtKGlucHV0LCBUb2tlbnMpOw0KICAgICAgICAgICAgICAgIHRoaXMuX3N0eWxlc2hlZXQoKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIHBhcnNlU3R5bGVTaGVldDogZnVuY3Rpb24oaW5wdXQpew0KICAgICAgICAgICAgICAgIC8vanVzdCBwYXNzdGhyb3VnaA0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlKGlucHV0KTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIHBhcnNlTWVkaWFRdWVyeTogZnVuY3Rpb24oaW5wdXQpew0KICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RyZWFtID0gbmV3IFRva2VuU3RyZWFtKGlucHV0LCBUb2tlbnMpOw0KICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9tZWRpYV9xdWVyeSgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUncyBhbnl0aGluZyBtb3JlLCB0aGVuIGl0J3MgYW4gaW52YWxpZCBzZWxlY3Rvcg0KICAgICAgICAgICAgICAgIHRoaXMuX3ZlcmlmeUVuZCgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHJldHVybiByZXN1bHQNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OyAgICAgICAgICAgIA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgKiBQYXJzZXMgYSBwcm9wZXJ0eSB2YWx1ZSAoZXZlcnl0aGluZyBhZnRlciB0aGUgc2VtaWNvbG9uKS4NCiAgICAgICAgICAgICAqIEByZXR1cm4ge3BhcnNlcmxpYi5jc3MuUHJvcGVydHlWYWx1ZX0gVGhlIHByb3BlcnR5IHZhbHVlLg0KICAgICAgICAgICAgICogQHRocm93cyBwYXJzZXJsaWIudXRpbC5TeW50YXhFcnJvciBJZiBhbiB1bmV4cGVjdGVkIHRva2VuIGlzIGZvdW5kLg0KICAgICAgICAgICAgICogQG1ldGhvZCBwYXJzZXJQcm9wZXJ0eVZhbHVlDQogICAgICAgICAgICAgKi8gICAgICAgICAgICAgDQogICAgICAgICAgICBwYXJzZVByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uKGlucHV0KXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RyZWFtID0gbmV3IFRva2VuU3RyZWFtKGlucHV0LCBUb2tlbnMpOw0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2V4cHIoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL29rYXkgdG8gaGF2ZSBhIHRyYWlsaW5nIHdoaXRlIHNwYWNlDQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL2lmIHRoZXJlJ3MgYW55dGhpbmcgbW9yZSwgdGhlbiBpdCdzIGFuIGludmFsaWQgc2VsZWN0b3INCiAgICAgICAgICAgICAgICB0aGlzLl92ZXJpZnlFbmQoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL290aGVyd2lzZSByZXR1cm4gcmVzdWx0DQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICANCiAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICogUGFyc2VzIGEgY29tcGxldGUgQ1NTIHJ1bGUsIGluY2x1ZGluZyBzZWxlY3RvcnMgYW5kDQogICAgICAgICAgICAgKiBwcm9wZXJ0aWVzLg0KICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSB0ZXh0IHRvIHBhcnNlci4NCiAgICAgICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhlIHBhcnNlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGZhbHNlIGlmIG5vdC4NCiAgICAgICAgICAgICAqIEBtZXRob2QgcGFyc2VSdWxlDQogICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIHBhcnNlUnVsZTogZnVuY3Rpb24oaW5wdXQpew0KICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RyZWFtID0gbmV3IFRva2VuU3RyZWFtKGlucHV0LCBUb2tlbnMpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vc2tpcCBhbnkgbGVhZGluZyB3aGl0ZSBzcGFjZQ0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX3J1bGVzZXQoKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL3NraXAgYW55IHRyYWlsaW5nIHdoaXRlIHNwYWNlDQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsNCg0KICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUncyBhbnl0aGluZyBtb3JlLCB0aGVuIGl0J3MgYW4gaW52YWxpZCBzZWxlY3Rvcg0KICAgICAgICAgICAgICAgIHRoaXMuX3ZlcmlmeUVuZCgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHJldHVybiByZXN1bHQNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OyAgICAgICAgICAgIA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLyoqDQogICAgICAgICAgICAgKiBQYXJzZXMgYSBzaW5nbGUgQ1NTIHNlbGVjdG9yIChubyBjb21tYSkNCiAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgdGV4dCB0byBwYXJzZSBhcyBhIENTUyBzZWxlY3Rvci4NCiAgICAgICAgICAgICAqIEByZXR1cm4ge1NlbGVjdG9yfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3Rvci4NCiAgICAgICAgICAgICAqIEB0aHJvd3MgcGFyc2VybGliLnV0aWwuU3ludGF4RXJyb3IgSWYgYW4gdW5leHBlY3RlZCB0b2tlbiBpcyBmb3VuZC4NCiAgICAgICAgICAgICAqIEBtZXRob2QgcGFyc2VTZWxlY3Rvcg0KICAgICAgICAgICAgICovDQogICAgICAgICAgICBwYXJzZVNlbGVjdG9yOiBmdW5jdGlvbihpbnB1dCl7DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0aGlzLl90b2tlblN0cmVhbSA9IG5ldyBUb2tlblN0cmVhbShpbnB1dCwgVG9rZW5zKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvL3NraXAgYW55IGxlYWRpbmcgd2hpdGUgc3BhY2UNCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9zZWxlY3RvcigpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vc2tpcCBhbnkgdHJhaWxpbmcgd2hpdGUgc3BhY2UNCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOw0KDQogICAgICAgICAgICAgICAgLy9pZiB0aGVyZSdzIGFueXRoaW5nIG1vcmUsIHRoZW4gaXQncyBhbiBpbnZhbGlkIHNlbGVjdG9yDQogICAgICAgICAgICAgICAgdGhpcy5fdmVyaWZ5RW5kKCk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9vdGhlcndpc2UgcmV0dXJuIHJlc3VsdA0KICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgfTsNCiAgICAgICAgDQogICAgLy9jb3B5IG92ZXIgb250byBwcm90b3R5cGUNCiAgICBmb3IgKHByb3AgaW4gYWRkaXRpb25zKXsNCiAgICAgICAgcHJvdG9bcHJvcF0gPSBhZGRpdGlvbnNbcHJvcF07DQogICAgfSAgIA0KICAgIA0KICAgIHJldHVybiBwcm90bzsNCn0oKTsNCg0KDQovKg0KbnRoDQogIDogUyogWyBbJy0nfCcrJ10/IElOVEVHRVI/IHtOfSBbIFMqIFsnLSd8JysnXSBTKiBJTlRFR0VSIF0/IHwNCiAgICAgICAgIFsnLSd8JysnXT8gSU5URUdFUiB8IHtPfXtEfXtEfSB8IHtFfXtWfXtFfXtOfSBdIFMqDQogIDsNCiovDQovKioNCiAqIFJlcHJlc2VudHMgYSBzZWxlY3RvciBjb21iaW5hdG9yICh3aGl0ZXNwYWNlLCArLCA+KS4NCiAqIEBuYW1lc3BhY2UgcGFyc2VybGliLmNzcw0KICogQGNsYXNzIFByb3BlcnR5TmFtZQ0KICogQGV4dGVuZHMgcGFyc2VybGliLnV0aWwuU3ludGF4VW5pdA0KICogQGNvbnN0cnVjdG9yDQogKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBUaGUgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC4gDQogKiBAcGFyYW0ge1N0cmluZ30gaGFjayBUaGUgdHlwZSBvZiBJRSBoYWNrIGFwcGxpZWQgKCIqIiwgIl8iLCBvciBudWxsKS4NCiAqIEBwYXJhbSB7aW50fSBsaW5lIFRoZSBsaW5lIG9mIHRleHQgb24gd2hpY2ggdGhlIHVuaXQgcmVzaWRlcy4NCiAqIEBwYXJhbSB7aW50fSBjb2wgVGhlIGNvbHVtbiBvZiB0ZXh0IG9uIHdoaWNoIHRoZSB1bml0IHJlc2lkZXMuDQogKi8NCmZ1bmN0aW9uIFByb3BlcnR5TmFtZSh0ZXh0LCBoYWNrLCBsaW5lLCBjb2wpew0KICAgIA0KICAgIFN5bnRheFVuaXQuY2FsbCh0aGlzLCAoaGFja3x8IiIpICsgdGV4dCwgbGluZSwgY29sKTsNCg0KICAgIC8qKg0KICAgICAqIFRoZSB0eXBlIG9mIElFIGhhY2sgYXBwbGllZCAoIioiLCAiXyIsIG9yIG51bGwpLg0KICAgICAqIEB0eXBlIFN0cmluZw0KICAgICAqIEBwcm9wZXJ0eSBoYWNrDQogICAgICovDQogICAgdGhpcy5oYWNrID0gaGFjazsNCg0KfQ0KDQpQcm9wZXJ0eU5hbWUucHJvdG90eXBlID0gbmV3IFN5bnRheFVuaXQoKTsNClByb3BlcnR5TmFtZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm9wZXJ0eU5hbWU7DQoNCg0KLyoqDQogKiBSZXByZXNlbnRzIGEgc2luZ2xlIHBhcnQgb2YgYSBDU1MgcHJvcGVydHkgdmFsdWUsIG1lYW5pbmcgdGhhdCBpdCByZXByZXNlbnRzDQogKiBqdXN0IGV2ZXJ5dGhpbmcgc2luZ2xlIHBhcnQgYmV0d2VlbiAiOiIgYW5kICI7Ii4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhbHVlcw0KICogc2VwYXJhdGVkIGJ5IGNvbW1hcywgdGhpcyB0eXBlIHJlcHJlc2VudHMganVzdCBvbmUgb2YgdGhlIHZhbHVlcy4NCiAqIEBwYXJhbSB7U3RyaW5nW119IHBhcnRzIEFuIGFycmF5IG9mIHZhbHVlIHBhcnRzIG1ha2luZyB1cCB0aGlzIHZhbHVlLg0KICogQHBhcmFtIHtpbnR9IGxpbmUgVGhlIGxpbmUgb2YgdGV4dCBvbiB3aGljaCB0aGUgdW5pdCByZXNpZGVzLg0KICogQHBhcmFtIHtpbnR9IGNvbCBUaGUgY29sdW1uIG9mIHRleHQgb24gd2hpY2ggdGhlIHVuaXQgcmVzaWRlcy4NCiAqIEBuYW1lc3BhY2UgcGFyc2VybGliLmNzcw0KICogQGNsYXNzIFByb3BlcnR5VmFsdWUNCiAqIEBleHRlbmRzIHBhcnNlcmxpYi51dGlsLlN5bnRheFVuaXQNCiAqIEBjb25zdHJ1Y3Rvcg0KICovDQpmdW5jdGlvbiBQcm9wZXJ0eVZhbHVlKHBhcnRzLCBsaW5lLCBjb2wpew0KDQogICAgU3ludGF4VW5pdC5jYWxsKHRoaXMsIHBhcnRzLmpvaW4oIiAiKSwgbGluZSwgY29sKTsNCiAgICANCiAgICAvKioNCiAgICAgKiBUaGUgcGFydHMgdGhhdCBtYWtlIHVwIHRoZSBzZWxlY3Rvci4NCiAgICAgKiBAdHlwZSBBcnJheQ0KICAgICAqIEBwcm9wZXJ0eSBwYXJ0cw0KICAgICAqLw0KICAgIHRoaXMucGFydHMgPSBwYXJ0czsNCiAgICANCn0NCg0KUHJvcGVydHlWYWx1ZS5wcm90b3R5cGUgPSBuZXcgU3ludGF4VW5pdCgpOw0KUHJvcGVydHlWYWx1ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm9wZXJ0eVZhbHVlOw0KDQoNCi8qKg0KICogUmVwcmVzZW50cyBhIHNpbmdsZSBwYXJ0IG9mIGEgQ1NTIHByb3BlcnR5IHZhbHVlLCBtZWFuaW5nIHRoYXQgaXQgcmVwcmVzZW50cw0KICoganVzdCBvbmUgcGFydCBvZiB0aGUgZGF0YSBiZXR3ZWVuICI6IiBhbmQgIjsiLg0KICogQHBhcmFtIHtTdHJpbmd9IHRleHQgVGhlIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXQuDQogKiBAcGFyYW0ge2ludH0gbGluZSBUaGUgbGluZSBvZiB0ZXh0IG9uIHdoaWNoIHRoZSB1bml0IHJlc2lkZXMuDQogKiBAcGFyYW0ge2ludH0gY29sIFRoZSBjb2x1bW4gb2YgdGV4dCBvbiB3aGljaCB0aGUgdW5pdCByZXNpZGVzLg0KICogQG5hbWVzcGFjZSBwYXJzZXJsaWIuY3NzDQogKiBAY2xhc3MgUHJvcGVydHlWYWx1ZVBhcnQNCiAqIEBleHRlbmRzIHBhcnNlcmxpYi51dGlsLlN5bnRheFVuaXQNCiAqIEBjb25zdHJ1Y3Rvcg0KICovDQpmdW5jdGlvbiBQcm9wZXJ0eVZhbHVlUGFydCh0ZXh0LCBsaW5lLCBjb2wpew0KDQogICAgU3ludGF4VW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7DQogICAgDQogICAgLyoqDQogICAgICogSW5kaWNhdGVzIHRoZSB0eXBlIG9mIHZhbHVlIHVuaXQuDQogICAgICogQHR5cGUgU3RyaW5nDQogICAgICogQHByb3BlcnR5IHR5cGUNCiAgICAgKi8NCiAgICB0aGlzLnR5cGUgPSAidW5rbm93biI7DQoNCiAgICAvL2ZpZ3VyZSBvdXQgd2hhdCB0eXBlIG9mIGRhdGEgaXQgaXMNCiAgICANCiAgICB2YXIgdGVtcDsNCiAgICANCiAgICAvL2l0IGlzIGEgbWVhc3VyZW1lbnQ/DQogICAgaWYgKC9eKFsrXC1dP1tcZFwuXSspKFthLXpdKykkL2kudGVzdCh0ZXh0KSl7ICAvL2RpbWVuc2lvbg0KICAgICAgICB0aGlzLnR5cGUgPSAiZGltZW5zaW9uIjsNCiAgICAgICAgdGhpcy52YWx1ZSA9ICtSZWdFeHAuJDE7DQogICAgICAgIHRoaXMudW5pdHMgPSBSZWdFeHAuJDI7DQogICAgICAgIA0KICAgICAgICAvL3RyeSB0byBuYXJyb3cgZG93bg0KICAgICAgICBzd2l0Y2godGhpcy51bml0cy50b0xvd2VyQ2FzZSgpKXsNCiAgICAgICAgDQogICAgICAgICAgICBjYXNlICJlbSI6DQogICAgICAgICAgICBjYXNlICJyZW0iOg0KICAgICAgICAgICAgY2FzZSAiZXgiOg0KICAgICAgICAgICAgY2FzZSAicHgiOg0KICAgICAgICAgICAgY2FzZSAiY20iOg0KICAgICAgICAgICAgY2FzZSAibW0iOg0KICAgICAgICAgICAgY2FzZSAiaW4iOg0KICAgICAgICAgICAgY2FzZSAicHQiOg0KICAgICAgICAgICAgY2FzZSAicGMiOg0KICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9ICJsZW5ndGgiOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgY2FzZSAiZGVnIjoNCiAgICAgICAgICAgIGNhc2UgInJhZCI6DQogICAgICAgICAgICBjYXNlICJncmFkIjoNCiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAiYW5nbGUiOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBjYXNlICJtcyI6DQogICAgICAgICAgICBjYXNlICJzIjoNCiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAidGltZSI7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGNhc2UgImh6IjoNCiAgICAgICAgICAgIGNhc2UgImtoeiI6DQogICAgICAgICAgICAgICAgdGhpcy50eXBlID0gImZyZXF1ZW5jeSI7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGNhc2UgImRwaSI6DQogICAgICAgICAgICBjYXNlICJkcGNtIjoNCiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAicmVzb2x1dGlvbiI7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAvL2RlZmF1bHQNCiAgICAgICAgICAgICAgICANCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9IGVsc2UgaWYgKC9eKFsrXC1dP1tcZFwuXSspJSQvaS50ZXN0KHRleHQpKXsgIC8vcGVyY2VudGFnZQ0KICAgICAgICB0aGlzLnR5cGUgPSAicGVyY2VudGFnZSI7DQogICAgICAgIHRoaXMudmFsdWUgPSArUmVnRXhwLiQxOw0KICAgIH0gZWxzZSBpZiAoL14oWytcLV0/W1xkXC5dKyklJC9pLnRlc3QodGV4dCkpeyAgLy9wZXJjZW50YWdlDQogICAgICAgIHRoaXMudHlwZSA9ICJwZXJjZW50YWdlIjsNCiAgICAgICAgdGhpcy52YWx1ZSA9ICtSZWdFeHAuJDE7DQogICAgfSBlbHNlIGlmICgvXihbK1wtXT9cZCspJC9pLnRlc3QodGV4dCkpeyAgLy9pbnRlZ2VyDQogICAgICAgIHRoaXMudHlwZSA9ICJpbnRlZ2VyIjsNCiAgICAgICAgdGhpcy52YWx1ZSA9ICtSZWdFeHAuJDE7DQogICAgfSBlbHNlIGlmICgvXihbK1wtXT9bXGRcLl0rKSQvaS50ZXN0KHRleHQpKXsgIC8vbnVtYmVyDQogICAgICAgIHRoaXMudHlwZSA9ICJudW1iZXIiOw0KICAgICAgICB0aGlzLnZhbHVlID0gK1JlZ0V4cC4kMTsNCiAgICANCiAgICB9IGVsc2UgaWYgKC9eIyhbYS1mMC05XXszLDZ9KS9pLnRlc3QodGV4dCkpeyAgLy9oZXhjb2xvcg0KICAgICAgICB0aGlzLnR5cGUgPSAiY29sb3IiOw0KICAgICAgICB0ZW1wID0gUmVnRXhwLiQxOw0KICAgICAgICBpZiAodGVtcC5sZW5ndGggPT0gMyl7DQogICAgICAgICAgICB0aGlzLnJlZCAgICA9IHBhcnNlSW50KHRlbXAuY2hhckF0KDApK3RlbXAuY2hhckF0KDApLDE2KTsNCiAgICAgICAgICAgIHRoaXMuZ3JlZW4gID0gcGFyc2VJbnQodGVtcC5jaGFyQXQoMSkrdGVtcC5jaGFyQXQoMSksMTYpOw0KICAgICAgICAgICAgdGhpcy5ibHVlICAgPSBwYXJzZUludCh0ZW1wLmNoYXJBdCgyKSt0ZW1wLmNoYXJBdCgyKSwxNik7ICAgICAgICAgICAgDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLnJlZCAgICA9IHBhcnNlSW50KHRlbXAuc3Vic3RyaW5nKDAsMiksMTYpOw0KICAgICAgICAgICAgdGhpcy5ncmVlbiAgPSBwYXJzZUludCh0ZW1wLnN1YnN0cmluZygyLDQpLDE2KTsNCiAgICAgICAgICAgIHRoaXMuYmx1ZSAgID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoNCw2KSwxNik7ICAgICAgICAgICAgDQogICAgICAgIH0NCiAgICB9IGVsc2UgaWYgKC9ecmdiXChccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKlwpL2kudGVzdCh0ZXh0KSl7IC8vcmdiKCkgY29sb3Igd2l0aCBhYnNvbHV0ZSBudW1iZXJzDQogICAgICAgIHRoaXMudHlwZSAgID0gImNvbG9yIjsNCiAgICAgICAgdGhpcy5yZWQgICAgPSArUmVnRXhwLiQxOw0KICAgICAgICB0aGlzLmdyZWVuICA9ICtSZWdFeHAuJDI7DQogICAgICAgIHRoaXMuYmx1ZSAgID0gK1JlZ0V4cC4kMzsNCiAgICB9IGVsc2UgaWYgKC9ecmdiXChccyooXGQrKSVccyosXHMqKFxkKyklXHMqLFxzKihcZCspJVxzKlwpL2kudGVzdCh0ZXh0KSl7IC8vcmdiKCkgY29sb3Igd2l0aCBwZXJjZW50YWdlcw0KICAgICAgICB0aGlzLnR5cGUgICA9ICJjb2xvciI7DQogICAgICAgIHRoaXMucmVkICAgID0gK1JlZ0V4cC4kMSAqIDI1NSAvIDEwMDsNCiAgICAgICAgdGhpcy5ncmVlbiAgPSArUmVnRXhwLiQyICogMjU1IC8gMTAwOw0KICAgICAgICB0aGlzLmJsdWUgICA9ICtSZWdFeHAuJDMgKiAyNTUgLyAxMDA7DQogICAgfSBlbHNlIGlmICgvXnVybFwoWyInXT8oW15cKSInXSspWyInXT9cKS9pLnRlc3QodGV4dCkpeyAvL1VSSQ0KICAgICAgICB0aGlzLnR5cGUgICA9ICJ1cmkiOw0KICAgICAgICB0aGlzLnVyaSAgICA9IFJlZ0V4cC4kMTsNCiAgICB9IGVsc2UgaWYgKC9eWyInXVteIiddKlsiJ10vLnRlc3QodGV4dCkpeyAgICAvL3N0cmluZw0KICAgICAgICB0aGlzLnR5cGUgICA9ICJzdHJpbmciOw0KICAgICAgICB0aGlzLnZhbHVlICA9IGV2YWwodGV4dCk7DQogICAgfSBlbHNlIGlmIChDb2xvcnNbdGV4dC50b0xvd2VyQ2FzZSgpXSl7ICAvL25hbWVkIGNvbG9yDQogICAgICAgIHRoaXMudHlwZSAgID0gImNvbG9yIjsNCiAgICAgICAgdGVtcCAgICAgICAgPSBDb2xvcnNbdGV4dC50b0xvd2VyQ2FzZSgpXS5zdWJzdHJpbmcoMSk7DQogICAgICAgIHRoaXMucmVkICAgID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoMCwyKSwxNik7DQogICAgICAgIHRoaXMuZ3JlZW4gID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoMiw0KSwxNik7DQogICAgICAgIHRoaXMuYmx1ZSAgID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoNCw2KSwxNik7ICAgICAgICAgDQogICAgfSBlbHNlIGlmICgvXltcLFwvXSQvLnRlc3QodGV4dCkpew0KICAgICAgICB0aGlzLnR5cGUgICA9ICJvcGVyYXRvciI7DQogICAgICAgIHRoaXMudmFsdWUgID0gdGV4dDsNCiAgICB9IGVsc2UgaWYgKC9eW2EtelwtXHUwMDgwLVx1RkZGRl1bYS16MC05XC1cdTAwODAtXHVGRkZGXSokL2kudGVzdCh0ZXh0KSl7DQogICAgICAgIHRoaXMudHlwZSAgID0gImlkZW50aWZpZXIiOw0KICAgICAgICB0aGlzLnZhbHVlICA9IHRleHQ7DQogICAgfQ0KDQp9DQoNClByb3BlcnR5VmFsdWVQYXJ0LnByb3RvdHlwZSA9IG5ldyBTeW50YXhVbml0KCk7DQpQcm9wZXJ0eVZhbHVlUGFydC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm9wZXJ0eVZhbHVlOw0KDQovKioNCiAqIENyZWF0ZSBhIG5ldyBzeW50YXggdW5pdCBiYXNlZCBzb2xlbHkgb24gdGhlIGdpdmVuIHRva2VuLg0KICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjcmVhdGluZyBhIG5ldyBzeW50YXggdW5pdCB3aGVuDQogKiBpdCByZXByZXNlbnRzIGEgc2luZ2xlIHRva2VuIGluc3RlYWQgb2YgbXVsdGlwbGUuDQogKiBAcGFyYW0ge09iamVjdH0gdG9rZW4gVGhlIHRva2VuIG9iamVjdCB0byByZXByZXNlbnQuDQogKiBAcmV0dXJuIHtwYXJzZXJsaWIuY3NzLlByb3BlcnR5VmFsdWVQYXJ0fSBUaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdG9rZW4uDQogKiBAc3RhdGljDQogKiBAbWV0aG9kIGZyb21Ub2tlbg0KICovDQpQcm9wZXJ0eVZhbHVlUGFydC5mcm9tVG9rZW4gPSBmdW5jdGlvbih0b2tlbil7DQogICAgcmV0dXJuIG5ldyBQcm9wZXJ0eVZhbHVlUGFydCh0b2tlbi52YWx1ZSwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7DQp9Ow0KLyoqDQogKiBSZXByZXNlbnRzIGFuIGVudGlyZSBzaW5nbGUgc2VsZWN0b3IsIGluY2x1ZGluZyBhbGwgcGFydHMgYnV0IG5vdA0KICogaW5jbHVkaW5nIG11bHRpcGxlIHNlbGVjdG9ycyAodGhvc2Ugc2VwYXJhdGVkIGJ5IGNvbW1hcykuDQogKiBAbmFtZXNwYWNlIHBhcnNlcmxpYi5jc3MNCiAqIEBjbGFzcyBTZWxlY3Rvcg0KICogQGV4dGVuZHMgcGFyc2VybGliLnV0aWwuU3ludGF4VW5pdA0KICogQGNvbnN0cnVjdG9yDQogKiBAcGFyYW0ge0FycmF5fSBwYXJ0cyBBcnJheSBvZiBzZWxlY3RvcnMgcGFydHMgbWFraW5nIHVwIHRoaXMgc2VsZWN0b3IuDQogKiBAcGFyYW0ge2ludH0gbGluZSBUaGUgbGluZSBvZiB0ZXh0IG9uIHdoaWNoIHRoZSB1bml0IHJlc2lkZXMuDQogKiBAcGFyYW0ge2ludH0gY29sIFRoZSBjb2x1bW4gb2YgdGV4dCBvbiB3aGljaCB0aGUgdW5pdCByZXNpZGVzLg0KICovDQpmdW5jdGlvbiBTZWxlY3RvcihwYXJ0cywgbGluZSwgY29sKXsNCiAgICANCiAgICBTeW50YXhVbml0LmNhbGwodGhpcywgcGFydHMuam9pbigiICIpLCBsaW5lLCBjb2wpOw0KICAgIA0KICAgIC8qKg0KICAgICAqIFRoZSBwYXJ0cyB0aGF0IG1ha2UgdXAgdGhlIHNlbGVjdG9yLg0KICAgICAqIEB0eXBlIEFycmF5DQogICAgICogQHByb3BlcnR5IHBhcnRzDQogICAgICovDQogICAgdGhpcy5wYXJ0cyA9IHBhcnRzOw0KDQp9DQoNClNlbGVjdG9yLnByb3RvdHlwZSA9IG5ldyBTeW50YXhVbml0KCk7DQpTZWxlY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZWxlY3RvcjsNCg0KDQovKioNCiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgcGFydCBvZiBhIHNlbGVjdG9yIHN0cmluZywgbWVhbmluZyBhIHNpbmdsZSBzZXQgb2YNCiAqIGVsZW1lbnQgbmFtZSBhbmQgbW9kaWZpZXJzLiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgY29tYmluYXRvcnMgc3VjaCBhcw0KICogc3BhY2VzLCArLCA+LCBldGMuDQogKiBAbmFtZXNwYWNlIHBhcnNlcmxpYi5jc3MNCiAqIEBjbGFzcyBTZWxlY3RvclBhcnQNCiAqIEBleHRlbmRzIHBhcnNlcmxpYi51dGlsLlN5bnRheFVuaXQNCiAqIEBjb25zdHJ1Y3Rvcg0KICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnROYW1lIFRoZSBlbGVtZW50IG5hbWUgaW4gdGhlIHNlbGVjdG9yIG9yIG51bGwNCiAqICAgICAgaWYgdGhlcmUgaXMgbm8gZWxlbWVudCBuYW1lLg0KICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzIEFycmF5IG9mIGluZGl2aWR1YWwgbW9kaWZpZXJzIGZvciB0aGUgZWxlbWVudC4NCiAqICAgICAgTWF5IGJlIGVtcHR5IGlmIHRoZXJlIGFyZSBub25lLg0KICogQHBhcmFtIHtTdHJpbmd9IHRleHQgVGhlIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXQuIA0KICogQHBhcmFtIHtpbnR9IGxpbmUgVGhlIGxpbmUgb2YgdGV4dCBvbiB3aGljaCB0aGUgdW5pdCByZXNpZGVzLg0KICogQHBhcmFtIHtpbnR9IGNvbCBUaGUgY29sdW1uIG9mIHRleHQgb24gd2hpY2ggdGhlIHVuaXQgcmVzaWRlcy4NCiAqLw0KZnVuY3Rpb24gU2VsZWN0b3JQYXJ0KGVsZW1lbnROYW1lLCBtb2RpZmllcnMsIHRleHQsIGxpbmUsIGNvbCl7DQogICAgDQogICAgU3ludGF4VW5pdC5jYWxsKHRoaXMsIHRleHQsIGxpbmUsIGNvbCk7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgdGFnIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhpcyBwYXJ0DQogICAgICogb2YgdGhlIHNlbGVjdG9yIGFmZmVjdHMuDQogICAgICogQHR5cGUgU3RyaW5nDQogICAgICogQHByb3BlcnR5IGVsZW1lbnROYW1lDQogICAgICovDQogICAgdGhpcy5lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lOw0KICAgIA0KICAgIC8qKg0KICAgICAqIFRoZSBwYXJ0cyB0aGF0IGNvbWUgYWZ0ZXIgdGhlIGVsZW1lbnQgbmFtZSwgc3VjaCBhcyBjbGFzcyBuYW1lcywgSURzLA0KICAgICAqIHBzZXVkbyBjbGFzc2VzL2VsZW1lbnRzLCBldGMuDQogICAgICogQHR5cGUgQXJyYXkNCiAgICAgKiBAcHJvcGVydHkgbW9kaWZpZXJzDQogICAgICovDQogICAgdGhpcy5tb2RpZmllcnMgPSBtb2RpZmllcnM7DQoNCn0NCg0KU2VsZWN0b3JQYXJ0LnByb3RvdHlwZSA9IG5ldyBTeW50YXhVbml0KCk7DQpTZWxlY3RvclBhcnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VsZWN0b3JQYXJ0Ow0KDQoNCi8qKg0KICogUmVwcmVzZW50cyBhIHNlbGVjdG9yIG1vZGlmaWVyIHN0cmluZywgbWVhbmluZyBhIGNsYXNzIG5hbWUsIGVsZW1lbnQgbmFtZSwNCiAqIGVsZW1lbnQgSUQsIHBzZXVkbyBydWxlLCBldGMuDQogKiBAbmFtZXNwYWNlIHBhcnNlcmxpYi5jc3MNCiAqIEBjbGFzcyBTZWxlY3RvclN1YlBhcnQNCiAqIEBleHRlbmRzIHBhcnNlcmxpYi51dGlsLlN5bnRheFVuaXQNCiAqIEBjb25zdHJ1Y3Rvcg0KICogQHBhcmFtIHtTdHJpbmd9IHRleHQgVGhlIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXQuIA0KICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2Ygc2VsZWN0b3IgbW9kaWZpZXIuDQogKiBAcGFyYW0ge2ludH0gbGluZSBUaGUgbGluZSBvZiB0ZXh0IG9uIHdoaWNoIHRoZSB1bml0IHJlc2lkZXMuDQogKiBAcGFyYW0ge2ludH0gY29sIFRoZSBjb2x1bW4gb2YgdGV4dCBvbiB3aGljaCB0aGUgdW5pdCByZXNpZGVzLg0KICovDQpmdW5jdGlvbiBTZWxlY3RvclN1YlBhcnQodGV4dCwgdHlwZSwgbGluZSwgY29sKXsNCiAgICANCiAgICBTeW50YXhVbml0LmNhbGwodGhpcywgdGV4dCwgbGluZSwgY29sKTsNCg0KICAgIC8qKg0KICAgICAqIFRoZSB0eXBlIG9mIG1vZGlmaWVyLg0KICAgICAqIEB0eXBlIFN0cmluZw0KICAgICAqIEBwcm9wZXJ0eSB0eXBlDQogICAgICovDQogICAgdGhpcy50eXBlID0gdHlwZTsNCiAgICANCiAgICAvKioNCiAgICAgKiBTb21lIHN1YnBhcnRzIGhhdmUgYXJndW1lbnRzLCB0aGlzIHJlcHJlc2VudHMgdGhlbS4NCiAgICAgKiBAdHlwZSBBcnJheQ0KICAgICAqIEBwcm9wZXJ0eSBhcmdzDQogICAgICovDQogICAgdGhpcy5hcmdzID0gW107DQoNCn0NCg0KU2VsZWN0b3JTdWJQYXJ0LnByb3RvdHlwZSA9IG5ldyBTeW50YXhVbml0KCk7DQpTZWxlY3RvclN1YlBhcnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VsZWN0b3JTdWJQYXJ0Ow0KDQoNCg0KDQp2YXIgaCA9IC9eWzAtOWEtZkEtRl0kLywNCiAgICBub25hc2NpaSA9IC9eW1x1MDA4MC1cdUZGRkZdJC8sDQogICAgbmwgPSAvXG58XHJcbnxccnxcZi87DQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEhlbHBlciBmdW5jdGlvbnMNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQpmdW5jdGlvbiBpc0hleERpZ2l0KGMpew0KICAgIHJldHVybiBjICE9IG51bGwgJiYgaC50ZXN0KGMpOw0KfQ0KDQpmdW5jdGlvbiBpc0RpZ2l0KGMpew0KICAgIHJldHVybiBjICE9IG51bGwgJiYgL1xkLy50ZXN0KGMpOw0KfQ0KDQpmdW5jdGlvbiBpc1doaXRlc3BhY2UoYyl7DQogICAgcmV0dXJuIGMgIT0gbnVsbCAmJiAvXHMvLnRlc3QoYyk7DQp9DQoNCmZ1bmN0aW9uIGlzTmV3TGluZShjKXsNCiAgICByZXR1cm4gYyAhPSBudWxsICYmIG5sLnRlc3QoYyk7DQp9DQoNCmZ1bmN0aW9uIGlzTmFtZVN0YXJ0KGMpew0KICAgIHJldHVybiBjICE9IG51bGwgJiYgKC9bYS16X1x1MDA4MC1cdUZGRkZcXF0vaS50ZXN0KGMpKTsNCn0NCg0KZnVuY3Rpb24gaXNOYW1lQ2hhcihjKXsNCiAgICByZXR1cm4gYyAhPSBudWxsICYmIChpc05hbWVTdGFydChjKSB8fCAvWzAtOVwtXFxdLy50ZXN0KGMpKTsNCn0NCg0KZnVuY3Rpb24gaXNJZGVudFN0YXJ0KGMpew0KICAgIHJldHVybiBjICE9IG51bGwgJiYgKGlzTmFtZVN0YXJ0KGMpIHx8IC9cLVxcLy50ZXN0KGMpKTsNCn0NCg0KZnVuY3Rpb24gbWl4KHJlY2VpdmVyLCBzdXBwbGllcil7DQoJZm9yICh2YXIgcHJvcCBpbiBzdXBwbGllcil7DQoJCWlmIChzdXBwbGllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSl7DQoJCQlyZWNlaXZlcltwcm9wXSA9IHN1cHBsaWVyW3Byb3BdOw0KCQl9DQoJfQ0KCXJldHVybiByZWNlaXZlcjsNCn0NCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQ1NTIFRva2VuIFN0cmVhbQ0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoNCi8qKg0KICogQSB0b2tlbiBzdHJlYW0gdGhhdCBwcm9kdWNlcyBDU1MgdG9rZW5zLg0KICogQHBhcmFtIHtTdHJpbmd8UmVhZGVyfSBpbnB1dCBUaGUgc291cmNlIG9mIHRleHQgdG8gdG9rZW5pemUuDQogKiBAY29uc3RydWN0b3INCiAqIEBjbGFzcyBUb2tlblN0cmVhbQ0KICogQG5hbWVzcGFjZSBwYXJzZXJsaWIuY3NzDQogKi8NCmZ1bmN0aW9uIFRva2VuU3RyZWFtKGlucHV0KXsNCglUb2tlblN0cmVhbUJhc2UuY2FsbCh0aGlzLCBpbnB1dCwgVG9rZW5zKTsNCn0NCg0KVG9rZW5TdHJlYW0ucHJvdG90eXBlID0gbWl4KG5ldyBUb2tlblN0cmVhbUJhc2UoKSwgew0KDQogICAgLyoqDQogICAgICogT3ZlcnJpZGVzIHRoZSBUb2tlblN0cmVhbUJhc2UgbWV0aG9kIG9mIHRoZSBzYW1lIG5hbWUNCiAgICAgKiB0byBwcm9kdWNlIENTUyB0b2tlbnMuDQogICAgICogQHBhcmFtIHt2YXJpYW50fSBjaGFubmVsIFRoZSBuYW1lIG9mIHRoZSBjaGFubmVsIHRvIHVzZQ0KICAgICAqICAgICAgZm9yIHRoZSBuZXh0IHRva2VuLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gQSB0b2tlbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuZXh0IHRva2VuLg0KICAgICAqIEBtZXRob2QgX2dldFRva2VuDQogICAgICogQHByaXZhdGUNCiAgICAgKi8NCiAgICBfZ2V0VG9rZW46IGZ1bmN0aW9uKGNoYW5uZWwpew0KDQogICAgICAgIHZhciBjLA0KICAgICAgICAgICAgcmVhZGVyID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgdG9rZW4gICA9IG51bGwsDQogICAgICAgICAgICBzdGFydExpbmUgICA9IHJlYWRlci5nZXRMaW5lKCksDQogICAgICAgICAgICBzdGFydENvbCAgICA9IHJlYWRlci5nZXRDb2woKTsNCg0KICAgICAgICBjID0gcmVhZGVyLnJlYWQoKTsNCg0KDQogICAgICAgIHdoaWxlKGMpew0KICAgICAgICAgICAgc3dpdGNoKGMpew0KDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBQb3RlbnRpYWwgdG9rZW5zOg0KICAgICAgICAgICAgICAgICAqIC0gQ09NTUVOVA0KICAgICAgICAgICAgICAgICAqIC0gU0xBU0gNCiAgICAgICAgICAgICAgICAgKiAtIENIQVINCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICBjYXNlICIvIjoNCg0KICAgICAgICAgICAgICAgICAgICBpZihyZWFkZXIucGVlaygpID09ICIqIil7DQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuY29tbWVudFRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmNoYXJUb2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogUG90ZW50aWFsIHRva2VuczoNCiAgICAgICAgICAgICAgICAgKiAtIERBU0hNQVRDSA0KICAgICAgICAgICAgICAgICAqIC0gSU5DTFVERVMNCiAgICAgICAgICAgICAgICAgKiAtIFBSRUZJWE1BVENIDQogICAgICAgICAgICAgICAgICogLSBTVUZGSVhNQVRDSA0KICAgICAgICAgICAgICAgICAqIC0gU1VCU1RSSU5HTUFUQ0gNCiAgICAgICAgICAgICAgICAgKiAtIENIQVINCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICBjYXNlICJ8IjoNCiAgICAgICAgICAgICAgICBjYXNlICJ+IjoNCiAgICAgICAgICAgICAgICBjYXNlICJeIjoNCiAgICAgICAgICAgICAgICBjYXNlICIkIjoNCiAgICAgICAgICAgICAgICBjYXNlICIqIjoNCiAgICAgICAgICAgICAgICAgICAgaWYocmVhZGVyLnBlZWsoKSA9PSAiPSIpew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmNvbXBhcmlzb25Ub2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5jaGFyVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIFBvdGVudGlhbCB0b2tlbnM6DQogICAgICAgICAgICAgICAgICogLSBTVFJJTkcNCiAgICAgICAgICAgICAgICAgKiAtIElOVkFMSUQNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICBjYXNlICJcIiI6DQogICAgICAgICAgICAgICAgY2FzZSAiJyI6DQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5zdHJpbmdUb2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIFBvdGVudGlhbCB0b2tlbnM6DQogICAgICAgICAgICAgICAgICogLSBIQVNIDQogICAgICAgICAgICAgICAgICogLSBDSEFSDQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgY2FzZSAiIyI6DQogICAgICAgICAgICAgICAgICAgIGlmIChpc05hbWVDaGFyKHJlYWRlci5wZWVrKCkpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5oYXNoVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuY2hhclRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBQb3RlbnRpYWwgdG9rZW5zOg0KICAgICAgICAgICAgICAgICAqIC0gRE9UDQogICAgICAgICAgICAgICAgICogLSBOVU1CRVINCiAgICAgICAgICAgICAgICAgKiAtIERJTUVOU0lPTg0KICAgICAgICAgICAgICAgICAqIC0gUEVSQ0VOVEFHRQ0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIGNhc2UgIi4iOg0KICAgICAgICAgICAgICAgICAgICBpZiAoaXNEaWdpdChyZWFkZXIucGVlaygpKSl7DQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubnVtYmVyVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuY2hhclRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBQb3RlbnRpYWwgdG9rZW5zOg0KICAgICAgICAgICAgICAgICAqIC0gQ0RDDQogICAgICAgICAgICAgICAgICogLSBNSU5VUw0KICAgICAgICAgICAgICAgICAqIC0gTlVNQkVSDQogICAgICAgICAgICAgICAgICogLSBESU1FTlNJT04NCiAgICAgICAgICAgICAgICAgKiAtIFBFUkNFTlRBR0UNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICBjYXNlICItIjoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlci5wZWVrKCkgPT0gIi0iKXsgIC8vY291bGQgYmUgY2xvc2luZyBIVE1MLXN0eWxlIGNvbW1lbnQNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5odG1sQ29tbWVudEVuZFRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFtZVN0YXJ0KHJlYWRlci5wZWVrKCkpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5pZGVudE9yRnVuY3Rpb25Ub2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5jaGFyVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIFBvdGVudGlhbCB0b2tlbnM6DQogICAgICAgICAgICAgICAgICogLSBJTVBPUlRBTlRfU1lNDQogICAgICAgICAgICAgICAgICogLSBDSEFSDQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgY2FzZSAiISI6DQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5pbXBvcnRhbnRUb2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIEFueSBhdC1rZXl3b3JkIG9yIENIQVINCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICBjYXNlICJAIjoNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmF0UnVsZVRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogUG90ZW50aWFsIHRva2VuczoNCiAgICAgICAgICAgICAgICAgKiAtIE5PVA0KICAgICAgICAgICAgICAgICAqIC0gQ0hBUg0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIGNhc2UgIjoiOg0KICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubm90VG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBQb3RlbnRpYWwgdG9rZW5zOg0KICAgICAgICAgICAgICAgICAqIC0gQ0RPDQogICAgICAgICAgICAgICAgICogLSBDSEFSDQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgY2FzZSAiPCI6DQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5odG1sQ29tbWVudFN0YXJ0VG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiBQb3RlbnRpYWwgdG9rZW5zOg0KICAgICAgICAgICAgICAgICAqIC0gVU5JQ09ERV9SQU5HRQ0KICAgICAgICAgICAgICAgICAqIC0gVVJMDQogICAgICAgICAgICAgICAgICogLSBDSEFSDQogICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgY2FzZSAiVSI6DQogICAgICAgICAgICAgICAgY2FzZSAidSI6DQogICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucGVlaygpID09ICIrIil7DQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudW5pY29kZVJhbmdlVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAvKmZhbGxzIHRocm91Z2gqLw0KDQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCg0KICAgICAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAgICAgKiBQb3RlbnRpYWwgdG9rZW5zOg0KICAgICAgICAgICAgICAgICAgICAgKiAtIE5VTUJFUg0KICAgICAgICAgICAgICAgICAgICAgKiAtIERJTUVOU0lPTg0KICAgICAgICAgICAgICAgICAgICAgKiAtIExFTkdUSA0KICAgICAgICAgICAgICAgICAgICAgKiAtIEZSRVENCiAgICAgICAgICAgICAgICAgICAgICogLSBUSU1FDQogICAgICAgICAgICAgICAgICAgICAqIC0gRU1TDQogICAgICAgICAgICAgICAgICAgICAqIC0gRVhTDQogICAgICAgICAgICAgICAgICAgICAqIC0gQU5HTEUNCiAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgIGlmIChpc0RpZ2l0KGMpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5udW1iZXJUb2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlDQoNCiAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICogUG90ZW50aWFsIHRva2VuczoNCiAgICAgICAgICAgICAgICAgICAgICogLSBTDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy53aGl0ZXNwYWNlVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KDQogICAgICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICAgICAqIFBvdGVudGlhbCB0b2tlbnM6DQogICAgICAgICAgICAgICAgICAgICAqIC0gSURFTlQNCiAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgIGlmIChpc0lkZW50U3RhcnQoYykpew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmlkZW50T3JGdW5jdGlvblRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UNCg0KICAgICAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAgICAgKiBQb3RlbnRpYWwgdG9rZW5zOg0KICAgICAgICAgICAgICAgICAgICAgKiAtIENIQVINCiAgICAgICAgICAgICAgICAgICAgICogLSBQTFVTDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuY2hhclRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRoaXMgdG9rZW4gaXMgd2FudGVkDQogICAgICAgICAgICAvL1RPRE86IGNoZWNrIGNoYW5uZWwNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjID0gcmVhZGVyLnJlYWQoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghdG9rZW4gJiYgYyA9PSBudWxsKXsNCiAgICAgICAgICAgIHRva2VuID0gdGhpcy5jcmVhdGVUb2tlbihUb2tlbnMuRU9GLG51bGwsc3RhcnRMaW5lLHN0YXJ0Q29sKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0b2tlbjsNCiAgICB9LA0KDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gTWV0aG9kcyB0byBjcmVhdGUgdG9rZW5zDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAvKioNCiAgICAgKiBQcm9kdWNlcyBhIHRva2VuIGJhc2VkIG9uIGF2YWlsYWJsZSBkYXRhIGFuZCB0aGUgY3VycmVudA0KICAgICAqIHJlYWRlciBwb3NpdGlvbiBpbmZvcm1hdGlvbi4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IG90aGVyDQogICAgICogcHJpdmF0ZSBtZXRob2RzIHRvIGNyZWF0ZSB0b2tlbnMgYW5kIGlzIG5ldmVyIGNhbGxlZCBkaXJlY3RseS4NCiAgICAgKiBAcGFyYW0ge2ludH0gdHQgVGhlIHRva2VuIHR5cGUuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIFRoZSB0ZXh0IHZhbHVlIG9mIHRoZSB0b2tlbi4NCiAgICAgKiBAcGFyYW0ge2ludH0gc3RhcnRMaW5lIFRoZSBiZWdpbm5pbmcgbGluZSBmb3IgdGhlIGNoYXJhY3Rlci4NCiAgICAgKiBAcGFyYW0ge2ludH0gc3RhcnRDb2wgVGhlIGJlZ2lubmluZyBjb2x1bW4gZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgKE9wdGlvbmFsKSBTcGVjaWZpZXMgYSBjaGFubmVsIHByb3BlcnR5DQogICAgICogICAgICB0byBpbmRpY2F0ZSB0aGF0IGEgZGlmZmVyZW50IGNoYW5uZWwgc2hvdWxkIGJlIHNjYW5uZWQNCiAgICAgKiAgICAgIGFuZC9vciBhIGhpZGUgcHJvcGVydHkgaW5kaWNhdGluZyB0aGF0IHRoZSB0b2tlbiBzaG91bGQNCiAgICAgKiAgICAgIGJlIGhpZGRlbi4NCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgdG9rZW4gb2JqZWN0Lg0KICAgICAqIEBtZXRob2QgY3JlYXRlVG9rZW4NCiAgICAgKi8NCiAgICBjcmVhdGVUb2tlbjogZnVuY3Rpb24odHQsIHZhbHVlLCBzdGFydExpbmUsIHN0YXJ0Q29sLCBvcHRpb25zKXsNCiAgICAgICAgdmFyIHJlYWRlciA9IHRoaXMuX3JlYWRlcjsNCiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307DQoNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIHZhbHVlOiAgICAgIHZhbHVlLA0KICAgICAgICAgICAgdHlwZTogICAgICAgdHQsDQogICAgICAgICAgICBjaGFubmVsOiAgICBvcHRpb25zLmNoYW5uZWwsDQogICAgICAgICAgICBoaWRlOiAgICAgICBvcHRpb25zLmhpZGUgfHwgZmFsc2UsDQogICAgICAgICAgICBzdGFydExpbmU6ICBzdGFydExpbmUsDQogICAgICAgICAgICBzdGFydENvbDogICBzdGFydENvbCwNCiAgICAgICAgICAgIGVuZExpbmU6ICAgIHJlYWRlci5nZXRMaW5lKCksDQogICAgICAgICAgICBlbmRDb2w6ICAgICByZWFkZXIuZ2V0Q29sKCkNCiAgICAgICAgfTsNCiAgICB9LA0KDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gTWV0aG9kcyB0byBjcmVhdGUgc3BlY2lmaWMgdG9rZW5zDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAvKioNCiAgICAgKiBQcm9kdWNlcyBhIHRva2VuIGZvciBhbnkgYXQtcnVsZS4gSWYgdGhlIGF0LXJ1bGUgaXMgdW5rbm93biwgdGhlbg0KICAgICAqIHRoZSB0b2tlbiBpcyBmb3IgYSBzaW5nbGUgIkAiIGNoYXJhY3Rlci4NCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlyc3QgVGhlIGZpcnN0IGNoYXJhY3RlciBmb3IgdGhlIHRva2VuLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydExpbmUgVGhlIGJlZ2lubmluZyBsaW5lIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydENvbCBUaGUgYmVnaW5uaW5nIGNvbHVtbiBmb3IgdGhlIGNoYXJhY3Rlci4NCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgdG9rZW4gb2JqZWN0Lg0KICAgICAqIEBtZXRob2QgYXRSdWxlVG9rZW4NCiAgICAgKi8NCiAgICBhdFJ1bGVUb2tlbjogZnVuY3Rpb24oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpew0KICAgICAgICB2YXIgcnVsZSAgICA9IGZpcnN0LA0KICAgICAgICAgICAgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwNCiAgICAgICAgICAgIHR0ICAgICAgPSBUb2tlbnMuQ0hBUiwNCiAgICAgICAgICAgIHZhbGlkICAgPSBmYWxzZSwNCiAgICAgICAgICAgIGlkZW50LA0KICAgICAgICAgICAgYzsNCg0KICAgICAgICAvKg0KICAgICAgICAgKiBGaXJzdCwgbWFyayB3aGVyZSB3ZSBhcmUuIFRoZXJlIGFyZSBvbmx5IGZvdXIgQCBydWxlcywNCiAgICAgICAgICogc28gYW55dGhpbmcgZWxzZSBpcyByZWFsbHkganVzdCBhbiBpbnZhbGlkIHRva2VuLg0KICAgICAgICAgKiBCYXNpY2FsbHksIGlmIHRoaXMgZG9lc24ndCBtYXRjaCBvbmUgb2YgdGhlIGtub3duIEANCiAgICAgICAgICogcnVsZXMsIGp1c3QgcmV0dXJuICdAJyBhcyBhbiB1bmtub3duIHRva2VuIGFuZCBhbGxvdw0KICAgICAgICAgKiBwYXJzaW5nIHRvIGNvbnRpbnVlIGFmdGVyIHRoYXQgcG9pbnQuDQogICAgICAgICAqLw0KICAgICAgICByZWFkZXIubWFyaygpOw0KDQogICAgICAgIC8vdHJ5IHRvIGZpbmQgdGhlIGF0LWtleXdvcmQNCiAgICAgICAgaWRlbnQgPSB0aGlzLnJlYWROYW1lKCk7DQogICAgICAgIHJ1bGUgPSBmaXJzdCArIGlkZW50Ow0KICAgICAgICB0dCA9IFRva2Vucy50eXBlKHJ1bGUudG9Mb3dlckNhc2UoKSk7DQoNCiAgICAgICAgLy9pZiBpdCdzIG5vdCB2YWxpZCwgdXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb25seSBhbmQgcmVzZXQgdGhlIHJlYWRlcg0KICAgICAgICBpZiAodHQgPT0gVG9rZW5zLkNIQVIgfHwgdHQgPT0gVG9rZW5zLlVOS05PV04pew0KICAgICAgICAgICAgdHQgPSBUb2tlbnMuQ0hBUjsNCiAgICAgICAgICAgIHJ1bGUgPSBmaXJzdDsNCiAgICAgICAgICAgIHJlYWRlci5yZXNldCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4odHQsIHJ1bGUsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBQcm9kdWNlcyBhIGNoYXJhY3RlciB0b2tlbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2hhcmFjdGVyDQogICAgICogYW5kIGxvY2F0aW9uIGluIHRoZSBzdHJlYW0uIElmIHRoZXJlJ3MgYSBzcGVjaWFsIChub24tc3RhbmRhcmQpDQogICAgICogdG9rZW4gbmFtZSwgdGhpcyBpcyB1c2VkOyBvdGhlcndpc2UgQ0hBUiBpcyB1c2VkLg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjIFRoZSBjaGFyYWN0ZXIgZm9yIHRoZSB0b2tlbi4NCiAgICAgKiBAcGFyYW0ge2ludH0gc3RhcnRMaW5lIFRoZSBiZWdpbm5pbmcgbGluZSBmb3IgdGhlIGNoYXJhY3Rlci4NCiAgICAgKiBAcGFyYW0ge2ludH0gc3RhcnRDb2wgVGhlIGJlZ2lubmluZyBjb2x1bW4gZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHJldHVybiB7T2JqZWN0fSBBIHRva2VuIG9iamVjdC4NCiAgICAgKiBAbWV0aG9kIGNoYXJUb2tlbg0KICAgICAqLw0KICAgIGNoYXJUb2tlbjogZnVuY3Rpb24oYywgc3RhcnRMaW5lLCBzdGFydENvbCl7DQogICAgICAgIHZhciB0dCA9IFRva2Vucy50eXBlKGMpOw0KDQogICAgICAgIGlmICh0dCA9PSAtMSl7DQogICAgICAgICAgICB0dCA9IFRva2Vucy5DSEFSOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4odHQsIGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBQcm9kdWNlcyBhIGNoYXJhY3RlciB0b2tlbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2hhcmFjdGVyDQogICAgICogYW5kIGxvY2F0aW9uIGluIHRoZSBzdHJlYW0uIElmIHRoZXJlJ3MgYSBzcGVjaWFsIChub24tc3RhbmRhcmQpDQogICAgICogdG9rZW4gbmFtZSwgdGhpcyBpcyB1c2VkOyBvdGhlcndpc2UgQ0hBUiBpcyB1c2VkLg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaXJzdCBUaGUgZmlyc3QgY2hhcmFjdGVyIGZvciB0aGUgdG9rZW4uDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0TGluZSBUaGUgYmVnaW5uaW5nIGxpbmUgZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0Q29sIFRoZSBiZWdpbm5pbmcgY29sdW1uIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gQSB0b2tlbiBvYmplY3QuDQogICAgICogQG1ldGhvZCBjb21tZW50VG9rZW4NCiAgICAgKi8NCiAgICBjb21tZW50VG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsNCiAgICAgICAgdmFyIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsDQogICAgICAgICAgICBjb21tZW50ID0gdGhpcy5yZWFkQ29tbWVudChmaXJzdCk7DQoNCiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4oVG9rZW5zLkNPTU1FTlQsIGNvbW1lbnQsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBQcm9kdWNlcyBhIGNvbXBhcmlzb24gdG9rZW4gYmFzZWQgb24gdGhlIGdpdmVuIGNoYXJhY3Rlcg0KICAgICAqIGFuZCBsb2NhdGlvbiBpbiB0aGUgc3RyZWFtLiBUaGUgbmV4dCBjaGFyYWN0ZXIgbXVzdCBiZQ0KICAgICAqIHJlYWQgYW5kIGlzIGFscmVhZHkga25vd24gdG8gYmUgYW4gZXF1YWxzIHNpZ24uDQogICAgICogQHBhcmFtIHtTdHJpbmd9IGMgVGhlIGNoYXJhY3RlciBmb3IgdGhlIHRva2VuLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydExpbmUgVGhlIGJlZ2lubmluZyBsaW5lIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydENvbCBUaGUgYmVnaW5uaW5nIGNvbHVtbiBmb3IgdGhlIGNoYXJhY3Rlci4NCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgdG9rZW4gb2JqZWN0Lg0KICAgICAqIEBtZXRob2QgY29tcGFyaXNvblRva2VuDQogICAgICovDQogICAgY29tcGFyaXNvblRva2VuOiBmdW5jdGlvbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKXsNCiAgICAgICAgdmFyIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsDQogICAgICAgICAgICBjb21wYXJpc29uICA9IGMgKyByZWFkZXIucmVhZCgpLA0KICAgICAgICAgICAgdHQgICAgICA9IFRva2Vucy50eXBlKGNvbXBhcmlzb24pIHx8IFRva2Vucy5DSEFSOw0KDQogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKHR0LCBjb21wYXJpc29uLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUHJvZHVjZXMgYSBoYXNoIHRva2VuIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgaW5mb3JtYXRpb24uIFRoZQ0KICAgICAqIGZpcnN0IGNoYXJhY3RlciBwcm92aWRlZCBpcyB0aGUgcG91bmQgc2lnbiAoIykgYW5kIHRoZW4gdGhpcw0KICAgICAqIG1ldGhvZCByZWFkcyBhIG5hbWUgYWZ0ZXJ3YXJkLg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaXJzdCBUaGUgZmlyc3QgY2hhcmFjdGVyICgjKSBpbiB0aGUgaGFzaCBuYW1lLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydExpbmUgVGhlIGJlZ2lubmluZyBsaW5lIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydENvbCBUaGUgYmVnaW5uaW5nIGNvbHVtbiBmb3IgdGhlIGNoYXJhY3Rlci4NCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgdG9rZW4gb2JqZWN0Lg0KICAgICAqIEBtZXRob2QgaGFzaFRva2VuDQogICAgICovDQogICAgaGFzaFRva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgbmFtZSAgICA9IHRoaXMucmVhZE5hbWUoZmlyc3QpOw0KDQogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5IQVNILCBuYW1lLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUHJvZHVjZXMgYSBDRE8gb3IgQ0hBUiB0b2tlbiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGluZm9ybWF0aW9uLiBUaGUNCiAgICAgKiBmaXJzdCBjaGFyYWN0ZXIgaXMgcHJvdmlkZWQgYW5kIHRoZSByZXN0IGlzIHJlYWQgYnkgdGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZQ0KICAgICAqIHRoZSBjb3JyZWN0IHRva2VuIHRvIGNyZWF0ZS4NCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlyc3QgVGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdG9rZW4uDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0TGluZSBUaGUgYmVnaW5uaW5nIGxpbmUgZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0Q29sIFRoZSBiZWdpbm5pbmcgY29sdW1uIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gQSB0b2tlbiBvYmplY3QuDQogICAgICogQG1ldGhvZCBodG1sQ29tbWVudFN0YXJ0VG9rZW4NCiAgICAgKi8NCiAgICBodG1sQ29tbWVudFN0YXJ0VG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsNCiAgICAgICAgdmFyIHJlYWRlciAgICAgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgdGV4dCAgICAgICAgPSBmaXJzdDsNCg0KICAgICAgICByZWFkZXIubWFyaygpOw0KICAgICAgICB0ZXh0ICs9IHJlYWRlci5yZWFkQ291bnQoMyk7DQoNCiAgICAgICAgaWYgKHRleHQgPT0gIjwhLS0iKXsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5DRE8sIHRleHQsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmVhZGVyLnJlc2V0KCk7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5jaGFyVG9rZW4oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICB9DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIFByb2R1Y2VzIGEgQ0RDIG9yIENIQVIgdG9rZW4gYmFzZWQgb24gdGhlIHNwZWNpZmllZCBpbmZvcm1hdGlvbi4gVGhlDQogICAgICogZmlyc3QgY2hhcmFjdGVyIGlzIHByb3ZpZGVkIGFuZCB0aGUgcmVzdCBpcyByZWFkIGJ5IHRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUNCiAgICAgKiB0aGUgY29ycmVjdCB0b2tlbiB0byBjcmVhdGUuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IGZpcnN0IFRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHRva2VuLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydExpbmUgVGhlIGJlZ2lubmluZyBsaW5lIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydENvbCBUaGUgYmVnaW5uaW5nIGNvbHVtbiBmb3IgdGhlIGNoYXJhY3Rlci4NCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgdG9rZW4gb2JqZWN0Lg0KICAgICAqIEBtZXRob2QgaHRtbENvbW1lbnRFbmRUb2tlbg0KICAgICAqLw0KICAgIGh0bWxDb21tZW50RW5kVG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsNCiAgICAgICAgdmFyIHJlYWRlciAgICAgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgdGV4dCAgICAgICAgPSBmaXJzdDsNCg0KICAgICAgICByZWFkZXIubWFyaygpOw0KICAgICAgICB0ZXh0ICs9IHJlYWRlci5yZWFkQ291bnQoMik7DQoNCiAgICAgICAgaWYgKHRleHQgPT0gIi0tPiIpew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4oVG9rZW5zLkNEQywgdGV4dCwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZWFkZXIucmVzZXQoKTsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJUb2tlbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgIH0NCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUHJvZHVjZXMgYW4gSURFTlQgb3IgRlVOQ1RJT04gdG9rZW4gYmFzZWQgb24gdGhlIHNwZWNpZmllZCBpbmZvcm1hdGlvbi4gVGhlDQogICAgICogZmlyc3QgY2hhcmFjdGVyIGlzIHByb3ZpZGVkIGFuZCB0aGUgcmVzdCBpcyByZWFkIGJ5IHRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUNCiAgICAgKiB0aGUgY29ycmVjdCB0b2tlbiB0byBjcmVhdGUuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IGZpcnN0IFRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGlkZW50aWZpZXIuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0TGluZSBUaGUgYmVnaW5uaW5nIGxpbmUgZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0Q29sIFRoZSBiZWdpbm5pbmcgY29sdW1uIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gQSB0b2tlbiBvYmplY3QuDQogICAgICogQG1ldGhvZCBpZGVudE9yRnVuY3Rpb25Ub2tlbg0KICAgICAqLw0KICAgIGlkZW50T3JGdW5jdGlvblRva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgaWRlbnQgICA9IHRoaXMucmVhZE5hbWUoZmlyc3QpLA0KICAgICAgICAgICAgdHQgICAgICA9IFRva2Vucy5JREVOVDsNCg0KICAgICAgICAvL2lmIHRoZXJlJ3MgYSBsZWZ0IHBhcmVuIGltbWVkaWF0ZWx5IGFmdGVyLCBpdCdzIGEgVVJJIG9yIGZ1bmN0aW9uDQogICAgICAgIGlmIChyZWFkZXIucGVlaygpID09ICIoIil7DQogICAgICAgICAgICBpZGVudCArPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgaWYgKGlkZW50LnRvTG93ZXJDYXNlKCkgPT0gInVybCgiKXsNCiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5VUkk7DQogICAgICAgICAgICAgICAgaWRlbnQgPSB0aGlzLnJlYWRVUkkoaWRlbnQpOw0KDQogICAgICAgICAgICAgICAgLy9kaWRuJ3QgZmluZCBhIHZhbGlkIFVSTCBvciB0aGVyZSdzIG5vIGNsb3NpbmcgcGFyZW4NCiAgICAgICAgICAgICAgICBpZiAoaWRlbnQudG9Mb3dlckNhc2UoKSA9PSAidXJsKCIpew0KICAgICAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5GVU5DVElPTjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHR0ID0gVG9rZW5zLkZVTkNUSU9OOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKHJlYWRlci5wZWVrKCkgPT0gIjoiKXsgIC8vbWlnaHQgYmUgYW4gSUUgZnVuY3Rpb24NCg0KICAgICAgICAgICAgLy9JRS1zcGVjaWZpYyBmdW5jdGlvbnMgYWx3YXlzIGJlaW5nIHdpdGggcHJvZ2lkOg0KICAgICAgICAgICAgaWYgKGlkZW50LnRvTG93ZXJDYXNlKCkgPT0gInByb2dpZCIpew0KICAgICAgICAgICAgICAgIGlkZW50ICs9IHJlYWRlci5yZWFkVG8oIigiKTsNCiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5JRV9GVU5DVElPTjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKHR0LCBpZGVudCwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIFByb2R1Y2VzIGFuIElNUE9SVEFOVF9TWU0gb3IgQ0hBUiB0b2tlbiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGluZm9ybWF0aW9uLiBUaGUNCiAgICAgKiBmaXJzdCBjaGFyYWN0ZXIgaXMgcHJvdmlkZWQgYW5kIHRoZSByZXN0IGlzIHJlYWQgYnkgdGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZQ0KICAgICAqIHRoZSBjb3JyZWN0IHRva2VuIHRvIGNyZWF0ZS4NCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlyc3QgVGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdG9rZW4uDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0TGluZSBUaGUgYmVnaW5uaW5nIGxpbmUgZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0Q29sIFRoZSBiZWdpbm5pbmcgY29sdW1uIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gQSB0b2tlbiBvYmplY3QuDQogICAgICogQG1ldGhvZCBpbXBvcnRhbnRUb2tlbg0KICAgICAqLw0KICAgIGltcG9ydGFudFRva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7DQogICAgICAgIHZhciByZWFkZXIgICAgICA9IHRoaXMuX3JlYWRlciwNCiAgICAgICAgICAgIGltcG9ydGFudCAgID0gZmlyc3QsDQogICAgICAgICAgICB0dCAgICAgICAgICA9IFRva2Vucy5DSEFSLA0KICAgICAgICAgICAgdGVtcCwNCiAgICAgICAgICAgIGM7DQoNCiAgICAgICAgcmVhZGVyLm1hcmsoKTsNCiAgICAgICAgYyA9IHJlYWRlci5yZWFkKCk7DQoNCiAgICAgICAgd2hpbGUoYyl7DQoNCiAgICAgICAgICAgIC8vdGhlcmUgY2FuIGJlIGEgY29tbWVudCBpbiBoZXJlDQogICAgICAgICAgICBpZiAoYyA9PSAiLyIpew0KDQogICAgICAgICAgICAgICAgLy9pZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXNuJ3QgYSBzdGFyLCB0aGVuIHRoaXMgaXNuJ3QgYSB2YWxpZCAhaW1wb3J0YW50IHRva2VuDQogICAgICAgICAgICAgICAgaWYgKHJlYWRlci5wZWVrKCkgIT0gIioiKXsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRoaXMucmVhZENvbW1lbnQoYyk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICIiKXsgICAgLy9icm9rZW4hDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKGMpKXsNCiAgICAgICAgICAgICAgICBpbXBvcnRhbnQgKz0gYyArIHRoaXMucmVhZFdoaXRlc3BhY2UoKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoL2kvaS50ZXN0KGMpKXsNCiAgICAgICAgICAgICAgICB0ZW1wID0gcmVhZGVyLnJlYWRDb3VudCg4KTsNCiAgICAgICAgICAgICAgICBpZiAoL21wb3J0YW50L2kudGVzdCh0ZW1wKSl7DQogICAgICAgICAgICAgICAgICAgIGltcG9ydGFudCArPSBjICsgdGVtcDsNCiAgICAgICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuSU1QT1JUQU5UX1NZTTsNCg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsgIC8vd2UncmUgZG9uZQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgYyA9IHJlYWRlci5yZWFkKCk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodHQgPT0gVG9rZW5zLkNIQVIpew0KICAgICAgICAgICAgcmVhZGVyLnJlc2V0KCk7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5jaGFyVG9rZW4oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4odHQsIGltcG9ydGFudCwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgIH0NCg0KDQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIFByb2R1Y2VzIGEgTk9UIG9yIENIQVIgdG9rZW4gYmFzZWQgb24gdGhlIHNwZWNpZmllZCBpbmZvcm1hdGlvbi4gVGhlDQogICAgICogZmlyc3QgY2hhcmFjdGVyIGlzIHByb3ZpZGVkIGFuZCB0aGUgcmVzdCBpcyByZWFkIGJ5IHRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUNCiAgICAgKiB0aGUgY29ycmVjdCB0b2tlbiB0byBjcmVhdGUuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IGZpcnN0IFRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHRva2VuLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydExpbmUgVGhlIGJlZ2lubmluZyBsaW5lIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEBwYXJhbSB7aW50fSBzdGFydENvbCBUaGUgYmVnaW5uaW5nIGNvbHVtbiBmb3IgdGhlIGNoYXJhY3Rlci4NCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgdG9rZW4gb2JqZWN0Lg0KICAgICAqIEBtZXRob2Qgbm90VG9rZW4NCiAgICAgKi8NCiAgICBub3RUb2tlbjogZnVuY3Rpb24oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpew0KICAgICAgICB2YXIgcmVhZGVyICAgICAgPSB0aGlzLl9yZWFkZXIsDQogICAgICAgICAgICB0ZXh0ICAgICAgICA9IGZpcnN0Ow0KDQogICAgICAgIHJlYWRlci5tYXJrKCk7DQogICAgICAgIHRleHQgKz0gcmVhZGVyLnJlYWRDb3VudCg0KTsNCg0KICAgICAgICBpZiAodGV4dC50b0xvd2VyQ2FzZSgpID09ICI6bm90KCIpew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4oVG9rZW5zLk5PVCwgdGV4dCwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZWFkZXIucmVzZXQoKTsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJUb2tlbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgICAgIH0NCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUHJvZHVjZXMgYSBudW1iZXIgdG9rZW4gYmFzZWQgb24gdGhlIGdpdmVuIGNoYXJhY3Rlcg0KICAgICAqIGFuZCBsb2NhdGlvbiBpbiB0aGUgc3RyZWFtLiBUaGlzIG1heSByZXR1cm4gYSB0b2tlbiBvZg0KICAgICAqIE5VTUJFUiwgRU1TLCBFWFMsIExFTkdUSCwgQU5HTEUsIFRJTUUsIEZSRVEsIERJTUVOU0lPTiwNCiAgICAgKiBvciBQRVJDRU5UQUdFLg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaXJzdCBUaGUgZmlyc3QgY2hhcmFjdGVyIGZvciB0aGUgdG9rZW4uDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0TGluZSBUaGUgYmVnaW5uaW5nIGxpbmUgZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0Q29sIFRoZSBiZWdpbm5pbmcgY29sdW1uIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gQSB0b2tlbiBvYmplY3QuDQogICAgICogQG1ldGhvZCBudW1iZXJUb2tlbg0KICAgICAqLw0KICAgIG51bWJlclRva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgdmFsdWUgICA9IHRoaXMucmVhZE51bWJlcihmaXJzdCksDQogICAgICAgICAgICBpZGVudCwNCiAgICAgICAgICAgIHR0ICAgICAgPSBUb2tlbnMuTlVNQkVSLA0KICAgICAgICAgICAgYyAgICAgICA9IHJlYWRlci5wZWVrKCk7DQoNCiAgICAgICAgaWYgKGlzSWRlbnRTdGFydChjKSl7DQogICAgICAgICAgICBpZGVudCA9IHRoaXMucmVhZE5hbWUocmVhZGVyLnJlYWQoKSk7DQogICAgICAgICAgICB2YWx1ZSArPSBpZGVudDsNCg0KICAgICAgICAgICAgaWYgKC9eZW0kfF5leCR8XnB4JHxeZ2QkfF5yZW0kfF52dyR8XnZoJHxedm0kfF5jaCR8XmNtJHxebW0kfF5pbiR8XnB0JHxecGMkL2kudGVzdChpZGVudCkpew0KICAgICAgICAgICAgICAgIHR0ID0gVG9rZW5zLkxFTkdUSDsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoL15kZWd8XnJhZCR8XmdyYWQkL2kudGVzdChpZGVudCkpew0KICAgICAgICAgICAgICAgIHR0ID0gVG9rZW5zLkFOR0xFOw0KICAgICAgICAgICAgfSBlbHNlIGlmICgvXm1zJHxecyQvaS50ZXN0KGlkZW50KSl7DQogICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuVElNRTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoL15oeiR8XmtoeiQvaS50ZXN0KGlkZW50KSl7DQogICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuRlJFUTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoL15kcGkkfF5kcGNtJC9pLnRlc3QoaWRlbnQpKXsNCiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5SRVNPTFVUSU9OOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5ESU1FTlNJT047DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSBlbHNlIGlmIChjID09ICIlIil7DQogICAgICAgICAgICB2YWx1ZSArPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgdHQgPSBUb2tlbnMuUEVSQ0VOVEFHRTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKHR0LCB2YWx1ZSwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIFByb2R1Y2VzIGEgc3RyaW5nIHRva2VuIGJhc2VkIG9uIHRoZSBnaXZlbiBjaGFyYWN0ZXINCiAgICAgKiBhbmQgbG9jYXRpb24gaW4gdGhlIHN0cmVhbS4gU2luY2Ugc3RyaW5ncyBtYXkgYmUgaW5kaWNhdGVkDQogICAgICogYnkgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMsIGEgZmFpbHVyZSB0byBtYXRjaCBzdGFydGluZw0KICAgICAqIGFuZCBlbmRpbmcgcXVvdGVzIHJlc3VsdHMgaW4gYW4gSU5WQUxJRCB0b2tlbiBiZWluZyBnZW5lcmF0ZWQuDQogICAgICogVGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIHBhc3NlZCBpbiBhbmQgdGhlbg0KICAgICAqIHRoZSByZXN0IGFyZSByZWFkIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGZpbmFsIHF1b3RhdGlvbiBtYXJrLg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaXJzdCBUaGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0TGluZSBUaGUgYmVnaW5uaW5nIGxpbmUgZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0Q29sIFRoZSBiZWdpbm5pbmcgY29sdW1uIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gQSB0b2tlbiBvYmplY3QuDQogICAgICogQG1ldGhvZCBzdHJpbmdUb2tlbg0KICAgICAqLw0KICAgIHN0cmluZ1Rva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7DQogICAgICAgIHZhciBkZWxpbSAgID0gZmlyc3QsDQogICAgICAgICAgICBzdHJpbmcgID0gZmlyc3QsDQogICAgICAgICAgICByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgcHJldiAgICA9IGZpcnN0LA0KICAgICAgICAgICAgdHQgICAgICA9IFRva2Vucy5TVFJJTkcsDQogICAgICAgICAgICBjICAgICAgID0gcmVhZGVyLnJlYWQoKTsNCg0KICAgICAgICB3aGlsZShjKXsNCiAgICAgICAgICAgIHN0cmluZyArPSBjOw0KDQogICAgICAgICAgICAvL2lmIHRoZSBkZWxpbWl0ZXIgaXMgZm91bmQgd2l0aCBhbiBlc2NhcGVtZW50LCB3ZSdyZSBkb25lLg0KICAgICAgICAgICAgaWYgKGMgPT0gZGVsaW0gJiYgcHJldiAhPSAiXFwiKXsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy9pZiB0aGVyZSdzIGEgbmV3bGluZSB3aXRob3V0IGFuIGVzY2FwZW1lbnQsIGl0J3MgYW4gaW52YWxpZCBzdHJpbmcNCiAgICAgICAgICAgIGlmIChpc05ld0xpbmUocmVhZGVyLnBlZWsoKSkgJiYgYyAhPSAiXFwiKXsNCiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5JTlZBTElEOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvL3NhdmUgcHJldmlvdXMgYW5kIGdldCBuZXh0DQogICAgICAgICAgICBwcmV2ID0gYzsNCiAgICAgICAgICAgIGMgPSByZWFkZXIucmVhZCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy9pZiBjIGlzIG51bGwsIHRoYXQgbWVhbnMgd2UncmUgb3V0IG9mIGlucHV0IGFuZCB0aGUgc3RyaW5nIHdhcyBuZXZlciBjbG9zZWQNCiAgICAgICAgaWYgKGMgPT0gbnVsbCl7DQogICAgICAgICAgICB0dCA9IFRva2Vucy5JTlZBTElEOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4odHQsIHN0cmluZywgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgfSwNCg0KICAgIHVuaWNvZGVSYW5nZVRva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgdmFsdWUgICA9IGZpcnN0LA0KICAgICAgICAgICAgdGVtcCwNCiAgICAgICAgICAgIHR0ICAgICAgPSBUb2tlbnMuQ0hBUjsNCg0KICAgICAgICAvL3RoZW4gaXQgc2hvdWxkIGJlIGEgdW5pY29kZSByYW5nZQ0KICAgICAgICBpZiAocmVhZGVyLnBlZWsoKSA9PSAiKyIpew0KICAgICAgICAgICAgcmVhZGVyLm1hcmsoKTsNCiAgICAgICAgICAgIHZhbHVlICs9IHJlYWRlci5yZWFkKCk7DQogICAgICAgICAgICB2YWx1ZSArPSB0aGlzLnJlYWRVbmljb2RlUmFuZ2VQYXJ0KHRydWUpOw0KDQogICAgICAgICAgICAvL2Vuc3VyZSB0aGVyZSdzIGFuIGFjdHVhbCB1bmljb2RlIHJhbmdlIGhlcmUNCiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMil7DQogICAgICAgICAgICAgICAgcmVhZGVyLnJlc2V0KCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuVU5JQ09ERV9SQU5HRTsNCg0KICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUncyBhID8gaW4gdGhlIGZpcnN0IHBhcnQsIHRoZXJlIGNhbid0IGJlIGEgc2Vjb25kIHBhcnQNCiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiPyIpID09IC0xKXsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnBlZWsoKSA9PSAiLSIpew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm1hcmsoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCArPSB0aGlzLnJlYWRVbmljb2RlUmFuZ2VQYXJ0KGZhbHNlKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSdzIG5vdCBhbm90aGVyIHZhbHVlLCBiYWNrIHVwIGFuZCBqdXN0IHRha2UgdGhlIGZpcnN0DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcC5sZW5ndGggPT0gMSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlc2V0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRlbXA7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKHR0LCB2YWx1ZSwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIFByb2R1Y2VzIGEgUyB0b2tlbiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGluZm9ybWF0aW9uLiBTaW5jZSB3aGl0ZXNwYWNlDQogICAgICogbWF5IGhhdmUgbXVsdGlwbGUgY2hhcmFjdGVycywgdGhpcyBjb25zdW1lcyBhbGwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzDQogICAgICogaW50byBhIHNpbmdsZSB0b2tlbi4NCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlyc3QgVGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdG9rZW4uDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0TGluZSBUaGUgYmVnaW5uaW5nIGxpbmUgZm9yIHRoZSBjaGFyYWN0ZXIuDQogICAgICogQHBhcmFtIHtpbnR9IHN0YXJ0Q29sIFRoZSBiZWdpbm5pbmcgY29sdW1uIGZvciB0aGUgY2hhcmFjdGVyLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gQSB0b2tlbiBvYmplY3QuDQogICAgICogQG1ldGhvZCB3aGl0ZXNwYWNlVG9rZW4NCiAgICAgKi8NCiAgICB3aGl0ZXNwYWNlVG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsNCiAgICAgICAgdmFyIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsDQogICAgICAgICAgICB2YWx1ZSAgID0gZmlyc3QgKyB0aGlzLnJlYWRXaGl0ZXNwYWNlKCk7DQogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5TLCB2YWx1ZSwgc3RhcnRMaW5lLCBzdGFydENvbCk7DQogICAgfSwNCg0KDQoNCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vIE1ldGhvZHMgdG8gcmVhZCB2YWx1ZXMgZnJvbSB0aGUgc3RyaW5nIHN0cmVhbQ0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgcmVhZFVuaWNvZGVSYW5nZVBhcnQ6IGZ1bmN0aW9uKGFsbG93UXVlc3Rpb25NYXJrKXsNCiAgICAgICAgdmFyIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsDQogICAgICAgICAgICBwYXJ0ID0gIiIsDQogICAgICAgICAgICBjICAgICAgID0gcmVhZGVyLnBlZWsoKTsNCg0KICAgICAgICAvL2ZpcnN0IHJlYWQgaGV4IGRpZ2l0cw0KICAgICAgICB3aGlsZShpc0hleERpZ2l0KGMpICYmIHBhcnQubGVuZ3RoIDwgNil7DQogICAgICAgICAgICByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgcGFydCArPSBjOw0KICAgICAgICAgICAgYyA9IHJlYWRlci5wZWVrKCk7DQogICAgICAgIH0NCg0KICAgICAgICAvL3RoZW4gcmVhZCBxdWVzdGlvbiBtYXJrcyBpZiBhbGxvd2VkDQogICAgICAgIGlmIChhbGxvd1F1ZXN0aW9uTWFyayl7DQogICAgICAgICAgICB3aGlsZShjID09ICI/IiAmJiBwYXJ0Lmxlbmd0aCA8IDYpew0KICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkKCk7DQogICAgICAgICAgICAgICAgcGFydCArPSBjOw0KICAgICAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy90aGVyZSBjYW4ndCBiZSBhbnkgb3RoZXIgY2hhcmFjdGVycyBhZnRlciB0aGlzIHBvaW50DQoNCiAgICAgICAgcmV0dXJuIHBhcnQ7DQogICAgfSwNCg0KICAgIHJlYWRXaGl0ZXNwYWNlOiBmdW5jdGlvbigpew0KICAgICAgICB2YXIgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwNCiAgICAgICAgICAgIHdoaXRlc3BhY2UgPSAiIiwNCiAgICAgICAgICAgIGMgICAgICAgPSByZWFkZXIucGVlaygpOw0KDQogICAgICAgIHdoaWxlKGlzV2hpdGVzcGFjZShjKSl7DQogICAgICAgICAgICByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgd2hpdGVzcGFjZSArPSBjOw0KICAgICAgICAgICAgYyA9IHJlYWRlci5wZWVrKCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gd2hpdGVzcGFjZTsNCiAgICB9LA0KICAgIHJlYWROdW1iZXI6IGZ1bmN0aW9uKGZpcnN0KXsNCiAgICAgICAgdmFyIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsDQogICAgICAgICAgICBudW1iZXIgID0gZmlyc3QsDQogICAgICAgICAgICBoYXNEb3QgID0gKGZpcnN0ID09ICIuIiksDQogICAgICAgICAgICBjICAgICAgID0gcmVhZGVyLnBlZWsoKTsNCg0KDQogICAgICAgIHdoaWxlKGMpew0KICAgICAgICAgICAgaWYgKGlzRGlnaXQoYykpew0KICAgICAgICAgICAgICAgIG51bWJlciArPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICIuIil7DQogICAgICAgICAgICAgICAgaWYgKGhhc0RvdCl7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGhhc0RvdCA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIG51bWJlciArPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIG51bWJlcjsNCiAgICB9LA0KICAgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgZGVsaW0gICA9IHJlYWRlci5yZWFkKCksDQogICAgICAgICAgICBzdHJpbmcgID0gZGVsaW0sDQogICAgICAgICAgICBwcmV2ICAgID0gZGVsaW0sDQogICAgICAgICAgICBjICAgICAgID0gcmVhZGVyLnBlZWsoKTsNCg0KICAgICAgICB3aGlsZShjKXsNCiAgICAgICAgICAgIGMgPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgc3RyaW5nICs9IGM7DQoNCiAgICAgICAgICAgIC8vaWYgdGhlIGRlbGltaXRlciBpcyBmb3VuZCB3aXRoIGFuIGVzY2FwZW1lbnQsIHdlJ3JlIGRvbmUuDQogICAgICAgICAgICBpZiAoYyA9PSBkZWxpbSAmJiBwcmV2ICE9ICJcXCIpew0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvL2lmIHRoZXJlJ3MgYSBuZXdsaW5lIHdpdGhvdXQgYW4gZXNjYXBlbWVudCwgaXQncyBhbiBpbnZhbGlkIHN0cmluZw0KICAgICAgICAgICAgaWYgKGlzTmV3TGluZShyZWFkZXIucGVlaygpKSAmJiBjICE9ICJcXCIpew0KICAgICAgICAgICAgICAgIHN0cmluZyA9ICIiOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvL3NhdmUgcHJldmlvdXMgYW5kIGdldCBuZXh0DQogICAgICAgICAgICBwcmV2ID0gYzsNCiAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy9pZiBjIGlzIG51bGwsIHRoYXQgbWVhbnMgd2UncmUgb3V0IG9mIGlucHV0IGFuZCB0aGUgc3RyaW5nIHdhcyBuZXZlciBjbG9zZWQNCiAgICAgICAgaWYgKGMgPT0gbnVsbCl7DQogICAgICAgICAgICBzdHJpbmcgPSAiIjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBzdHJpbmc7DQogICAgfSwNCiAgICByZWFkVVJJOiBmdW5jdGlvbihmaXJzdCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgdXJpICAgICA9IGZpcnN0LA0KICAgICAgICAgICAgaW5uZXIgICA9ICIiLA0KICAgICAgICAgICAgYyAgICAgICA9IHJlYWRlci5wZWVrKCk7DQoNCiAgICAgICAgcmVhZGVyLm1hcmsoKTsNCg0KICAgICAgICAvL3NraXAgd2hpdGVzcGFjZSBiZWZvcmUNCiAgICAgICAgd2hpbGUoYyAmJiBpc1doaXRlc3BhY2UoYykpew0KICAgICAgICAgICAgcmVhZGVyLnJlYWQoKTsNCiAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy9pdCdzIGEgc3RyaW5nDQogICAgICAgIGlmIChjID09ICInIiB8fCBjID09ICJcIiIpew0KICAgICAgICAgICAgaW5uZXIgPSB0aGlzLnJlYWRTdHJpbmcoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlubmVyID0gdGhpcy5yZWFkVVJMKCk7DQogICAgICAgIH0NCg0KICAgICAgICBjID0gcmVhZGVyLnBlZWsoKTsNCg0KICAgICAgICAvL3NraXAgd2hpdGVzcGFjZSBhZnRlcg0KICAgICAgICB3aGlsZShjICYmIGlzV2hpdGVzcGFjZShjKSl7DQogICAgICAgICAgICByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgYyA9IHJlYWRlci5wZWVrKCk7DQogICAgICAgIH0NCg0KICAgICAgICAvL2lmIHRoZXJlIHdhcyBubyBpbm5lciB2YWx1ZSBvciB0aGUgbmV4dCBjaGFyYWN0ZXIgaXNuJ3QgY2xvc2luZyBwYXJlbiwgaXQncyBub3QgYSBVUkkNCiAgICAgICAgaWYgKGlubmVyID09ICIiIHx8IGMgIT0gIikiKXsNCiAgICAgICAgICAgIHVyaSA9IGZpcnN0Ow0KICAgICAgICAgICAgcmVhZGVyLnJlc2V0KCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB1cmkgKz0gaW5uZXIgKyByZWFkZXIucmVhZCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHVyaTsNCiAgICB9LA0KICAgIHJlYWRVUkw6IGZ1bmN0aW9uKCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgdXJsICAgICA9ICIiLA0KICAgICAgICAgICAgYyAgICAgICA9IHJlYWRlci5wZWVrKCk7DQoNCiAgICAgICAgLy9UT0RPOiBDaGVjayBmb3IgZXNjYXBlIGFuZCBub25hc2NpaQ0KICAgICAgICB3aGlsZSAoL15bISMkJSZcXCotfl0kLy50ZXN0KGMpKXsNCiAgICAgICAgICAgIHVybCArPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgYyA9IHJlYWRlci5wZWVrKCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdXJsOw0KDQogICAgfSwNCiAgICByZWFkTmFtZTogZnVuY3Rpb24oZmlyc3Qpew0KICAgICAgICB2YXIgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwNCiAgICAgICAgICAgIGlkZW50ICAgPSBmaXJzdCB8fCAiIiwNCiAgICAgICAgICAgIGMgICAgICAgPSByZWFkZXIucGVlaygpOw0KDQogICAgICAgIHdoaWxlKHRydWUpew0KICAgICAgICAgICAgaWYgKGMgPT0gIlxcIil7DQogICAgICAgICAgICAgICAgaWRlbnQgKz0gdGhpcy5yZWFkRXNjYXBlKHJlYWRlci5yZWFkKCkpOw0KICAgICAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOw0KICAgICAgICAgICAgfSBlbHNlIGlmKGMgJiYgaXNOYW1lQ2hhcihjKSl7DQogICAgICAgICAgICAgICAgaWRlbnQgKz0gcmVhZGVyLnJlYWQoKTsNCiAgICAgICAgICAgICAgICBjID0gcmVhZGVyLnBlZWsoKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gaWRlbnQ7DQogICAgfSwNCiAgICANCiAgICByZWFkRXNjYXBlOiBmdW5jdGlvbihmaXJzdCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgY3NzRXNjYXBlID0gZmlyc3QgfHwgIiIsDQogICAgICAgICAgICBpICAgICAgID0gMCwNCiAgICAgICAgICAgIGMgICAgICAgPSByZWFkZXIucGVlaygpOyAgICANCiAgICANCiAgICAgICAgaWYgKGlzSGV4RGlnaXQoYykpew0KICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgIGNzc0VzY2FwZSArPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOw0KICAgICAgICAgICAgfSB3aGlsZShjICYmIGlzSGV4RGlnaXQoYykgJiYgKytpIDwgNik7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmIChjc3NFc2NhcGUubGVuZ3RoID09IDMgJiYgL1xzLy50ZXN0KGMpIHx8DQogICAgICAgICAgICBjc3NFc2NhcGUubGVuZ3RoID09IDcgfHwgY3NzRXNjYXBlLmxlbmd0aCA9PSAxKXsNCiAgICAgICAgICAgICAgICByZWFkZXIucmVhZCgpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgYyA9ICIiOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICByZXR1cm4gY3NzRXNjYXBlICsgYzsNCiAgICB9LA0KICAgIA0KICAgIHJlYWRDb21tZW50OiBmdW5jdGlvbihmaXJzdCl7DQogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLA0KICAgICAgICAgICAgY29tbWVudCA9IGZpcnN0IHx8ICIiLA0KICAgICAgICAgICAgYyAgICAgICA9IHJlYWRlci5yZWFkKCk7DQoNCiAgICAgICAgaWYgKGMgPT0gIioiKXsNCiAgICAgICAgICAgIHdoaWxlKGMpew0KICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gYzsNCg0KICAgICAgICAgICAgICAgIC8vbG9vayBmb3IgZW5kIG9mIGNvbW1lbnQNCiAgICAgICAgICAgICAgICBpZiAoYyA9PSAiKiIgJiYgcmVhZGVyLnBlZWsoKSA9PSAiLyIpew0KICAgICAgICAgICAgICAgICAgICBjb21tZW50ICs9IHJlYWRlci5yZWFkKCk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGMgPSByZWFkZXIucmVhZCgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gY29tbWVudDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAiIjsNCiAgICAgICAgfQ0KDQogICAgfQ0KfSk7DQoNCg0KdmFyIFRva2VucyAgPSBbDQoNCiAgICAvKg0KICAgICAqIFRoZSBmb2xsb3dpbmcgdG9rZW4gbmFtZXMgYXJlIGRlZmluZWQgaW4gQ1NTMyBHcmFtbWFyOiBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXN5bnRheC8jbGV4aWNhbA0KICAgICAqLw0KICAgICANCiAgICAvL0hUTUwtc3R5bGUgY29tbWVudHMNCiAgICB7IG5hbWU6ICJDRE8ifSwNCiAgICB7IG5hbWU6ICJDREMifSwNCg0KICAgIC8vaWdub3JhYmxlcw0KICAgIHsgbmFtZTogIlMiLCB3aGl0ZXNwYWNlOiB0cnVlLyosIGNoYW5uZWw6ICJ3cyIqL30sDQogICAgeyBuYW1lOiAiQ09NTUVOVCIsIGNvbW1lbnQ6IHRydWUsIGhpZGU6IHRydWUsIGNoYW5uZWw6ICJjb21tZW50IiB9LA0KICAgICAgICANCiAgICAvL2F0dHJpYnV0ZSBlcXVhbGl0eQ0KICAgIHsgbmFtZTogIklOQ0xVREVTIiwgdGV4dDogIn49In0sDQogICAgeyBuYW1lOiAiREFTSE1BVENIIiwgdGV4dDogInw9In0sDQogICAgeyBuYW1lOiAiUFJFRklYTUFUQ0giLCB0ZXh0OiAiXj0ifSwNCiAgICB7IG5hbWU6ICJTVUZGSVhNQVRDSCIsIHRleHQ6ICIkPSJ9LA0KICAgIHsgbmFtZTogIlNVQlNUUklOR01BVENIIiwgdGV4dDogIio9In0sDQogICAgICAgIA0KICAgIC8vaWRlbnRpZmllciB0eXBlcw0KICAgIHsgbmFtZTogIlNUUklORyJ9LCAgICAgDQogICAgeyBuYW1lOiAiSURFTlQifSwNCiAgICB7IG5hbWU6ICJIQVNIIn0sDQoNCiAgICAvL2F0LWtleXdvcmRzDQogICAgeyBuYW1lOiAiSU1QT1JUX1NZTSIsIHRleHQ6ICJAaW1wb3J0In0sDQogICAgeyBuYW1lOiAiUEFHRV9TWU0iLCB0ZXh0OiAiQHBhZ2UifSwNCiAgICB7IG5hbWU6ICJNRURJQV9TWU0iLCB0ZXh0OiAiQG1lZGlhIn0sDQogICAgeyBuYW1lOiAiRk9OVF9GQUNFX1NZTSIsIHRleHQ6ICJAZm9udC1mYWNlIn0sDQogICAgeyBuYW1lOiAiQ0hBUlNFVF9TWU0iLCB0ZXh0OiAiQGNoYXJzZXQifSwNCiAgICB7IG5hbWU6ICJOQU1FU1BBQ0VfU1lNIiwgdGV4dDogIkBuYW1lc3BhY2UifSwNCiAgICAvL3sgbmFtZTogIkFUS0VZV09SRCJ9LA0KICAgIA0KICAgIC8vQ1NTMyBhbmltYXRpb25zDQogICAgeyBuYW1lOiAiS0VZRlJBTUVTX1NZTSIsIHRleHQ6IFsgIkBrZXlmcmFtZXMiLCAiQC13ZWJraXQta2V5ZnJhbWVzIiwgIkAtbW96LWtleWZyYW1lcyIgXSB9LA0KDQogICAgLy9pbXBvcnRhbnQgc3ltYm9sDQogICAgeyBuYW1lOiAiSU1QT1JUQU5UX1NZTSJ9LA0KDQogICAgLy9tZWFzdXJlbWVudHMNCiAgICB7IG5hbWU6ICJMRU5HVEgifSwNCiAgICB7IG5hbWU6ICJBTkdMRSJ9LA0KICAgIHsgbmFtZTogIlRJTUUifSwNCiAgICB7IG5hbWU6ICJGUkVRIn0sDQogICAgeyBuYW1lOiAiRElNRU5TSU9OIn0sDQogICAgeyBuYW1lOiAiUEVSQ0VOVEFHRSJ9LA0KICAgIHsgbmFtZTogIk5VTUJFUiJ9LA0KICAgIA0KICAgIC8vZnVuY3Rpb25zDQogICAgeyBuYW1lOiAiVVJJIn0sDQogICAgeyBuYW1lOiAiRlVOQ1RJT04ifSwNCiAgICANCiAgICAvL1VuaWNvZGUgcmFuZ2VzDQogICAgeyBuYW1lOiAiVU5JQ09ERV9SQU5HRSJ9LA0KICAgIA0KICAgIC8qDQogICAgICogVGhlIGZvbGxvd2luZyB0b2tlbiBuYW1lcyBhcmUgZGVmaW5lZCBpbiBDU1MzIFNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3NlbGVjdG9yLXN5bnRheA0KICAgICAqLyAgICANCiAgICANCiAgICAvL2ludmFsaWQgc3RyaW5nDQogICAgeyBuYW1lOiAiSU5WQUxJRCJ9LA0KICAgIA0KICAgIC8vY29tYmluYXRvcnMNCiAgICB7IG5hbWU6ICJQTFVTIiwgdGV4dDogIisiIH0sDQogICAgeyBuYW1lOiAiR1JFQVRFUiIsIHRleHQ6ICI+In0sDQogICAgeyBuYW1lOiAiQ09NTUEiLCB0ZXh0OiAiLCJ9LA0KICAgIHsgbmFtZTogIlRJTERFIiwgdGV4dDogIn4ifSwNCiAgICANCiAgICAvL21vZGlmaWVyDQogICAgeyBuYW1lOiAiTk9UIn0sICAgICAgICANCiAgICANCiAgICAvKg0KICAgICAqIERlZmluZWQgaW4gQ1NTMyBQYWdlZCBNZWRpYQ0KICAgICAqLw0KICAgIHsgbmFtZTogIlRPUExFRlRDT1JORVJfU1lNIiwgdGV4dDogIkB0b3AtbGVmdC1jb3JuZXIifSwNCiAgICB7IG5hbWU6ICJUT1BMRUZUX1NZTSIsIHRleHQ6ICJAdG9wLWxlZnQifSwNCiAgICB7IG5hbWU6ICJUT1BDRU5URVJfU1lNIiwgdGV4dDogIkB0b3AtY2VudGVyIn0sDQogICAgeyBuYW1lOiAiVE9QUklHSFRfU1lNIiwgdGV4dDogIkB0b3AtcmlnaHQifSwNCiAgICB7IG5hbWU6ICJUT1BSSUdIVENPUk5FUl9TWU0iLCB0ZXh0OiAiQHRvcC1yaWdodC1jb3JuZXIifSwNCiAgICB7IG5hbWU6ICJCT1RUT01MRUZUQ09STkVSX1NZTSIsIHRleHQ6ICJAYm90dG9tLWxlZnQtY29ybmVyIn0sDQogICAgeyBuYW1lOiAiQk9UVE9NTEVGVF9TWU0iLCB0ZXh0OiAiQGJvdHRvbS1sZWZ0In0sDQogICAgeyBuYW1lOiAiQk9UVE9NQ0VOVEVSX1NZTSIsIHRleHQ6ICJAYm90dG9tLWNlbnRlciJ9LA0KICAgIHsgbmFtZTogIkJPVFRPTVJJR0hUX1NZTSIsIHRleHQ6ICJAYm90dG9tLXJpZ2h0In0sDQogICAgeyBuYW1lOiAiQk9UVE9NUklHSFRDT1JORVJfU1lNIiwgdGV4dDogIkBib3R0b20tcmlnaHQtY29ybmVyIn0sDQogICAgeyBuYW1lOiAiTEVGVFRPUF9TWU0iLCB0ZXh0OiAiQGxlZnQtdG9wIn0sDQogICAgeyBuYW1lOiAiTEVGVE1JRERMRV9TWU0iLCB0ZXh0OiAiQGxlZnQtbWlkZGxlIn0sDQogICAgeyBuYW1lOiAiTEVGVEJPVFRPTV9TWU0iLCB0ZXh0OiAiQGxlZnQtYm90dG9tIn0sDQogICAgeyBuYW1lOiAiUklHSFRUT1BfU1lNIiwgdGV4dDogIkByaWdodC10b3AifSwNCiAgICB7IG5hbWU6ICJSSUdIVE1JRERMRV9TWU0iLCB0ZXh0OiAiQHJpZ2h0LW1pZGRsZSJ9LA0KICAgIHsgbmFtZTogIlJJR0hUQk9UVE9NX1NZTSIsIHRleHQ6ICJAcmlnaHQtYm90dG9tIn0sDQoNCiAgICAvKg0KICAgICAqIFRoZSBmb2xsb3dpbmcgdG9rZW4gbmFtZXMgYXJlIGRlZmluZWQgaW4gQ1NTMyBNZWRpYSBRdWVyaWVzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8jc3ludGF4DQogICAgICovDQogICAgLyp7IG5hbWU6ICJNRURJQV9PTkxZIiwgc3RhdGU6ICJtZWRpYSJ9LA0KICAgIHsgbmFtZTogIk1FRElBX05PVCIsIHN0YXRlOiAibWVkaWEifSwNCiAgICB7IG5hbWU6ICJNRURJQV9BTkQiLCBzdGF0ZTogIm1lZGlhIn0sKi8NCiAgICB7IG5hbWU6ICJSRVNPTFVUSU9OIiwgc3RhdGU6ICJtZWRpYSJ9LA0KDQogICAgLyoNCiAgICAgKiBUaGUgZm9sbG93aW5nIHRva2VuIG5hbWVzIGFyZSBub3QgZGVmaW5lZCBpbiBhbnkgQ1NTIHNwZWNpZmljYXRpb24gYnV0IGFyZSB1c2VkIGJ5IHRoZSBsZXhlci4NCiAgICAgKi8NCiAgICANCiAgICAvL25vdCBhIHJlYWwgdG9rZW4sIGJ1dCB1c2VmdWwgZm9yIHN0dXBpZCBJRSBmaWx0ZXJzDQogICAgeyBuYW1lOiAiSUVfRlVOQ1RJT04iIH0sDQoNCiAgICAvL3BhcnQgb2YgQ1NTMyBncmFtbWFyIGJ1dCBub3QgdGhlIEZsZXggY29kZQ0KICAgIHsgbmFtZTogIkNIQVIiIH0sDQogICAgDQogICAgLy9UT0RPOiBOZWVkZWQ/DQogICAgLy9Ob3QgZGVmaW5lZCBhcyB0b2tlbnMsIGJ1dCBtaWdodCBhcyB3ZWxsIGJlDQogICAgew0KICAgICAgICBuYW1lOiAiUElQRSIsDQogICAgICAgIHRleHQ6ICJ8Ig0KICAgIH0sDQogICAgew0KICAgICAgICBuYW1lOiAiU0xBU0giLA0KICAgICAgICB0ZXh0OiAiLyINCiAgICB9LA0KICAgIHsNCiAgICAgICAgbmFtZTogIk1JTlVTIiwNCiAgICAgICAgdGV4dDogIi0iDQogICAgfSwNCiAgICB7DQogICAgICAgIG5hbWU6ICJTVEFSIiwNCiAgICAgICAgdGV4dDogIioiDQogICAgfSwNCg0KICAgIHsNCiAgICAgICAgbmFtZTogIkxCUkFDRSIsDQogICAgICAgIHRleHQ6ICJ7Ig0KICAgIH0sICAgDQogICAgew0KICAgICAgICBuYW1lOiAiUkJSQUNFIiwNCiAgICAgICAgdGV4dDogIn0iDQogICAgfSwgICAgICANCiAgICB7DQogICAgICAgIG5hbWU6ICJMQlJBQ0tFVCIsDQogICAgICAgIHRleHQ6ICJbIg0KICAgIH0sICAgDQogICAgew0KICAgICAgICBuYW1lOiAiUkJSQUNLRVQiLA0KICAgICAgICB0ZXh0OiAiXSINCiAgICB9LCAgICANCiAgICB7DQogICAgICAgIG5hbWU6ICJFUVVBTFMiLA0KICAgICAgICB0ZXh0OiAiPSINCiAgICB9LA0KICAgIHsNCiAgICAgICAgbmFtZTogIkNPTE9OIiwNCiAgICAgICAgdGV4dDogIjoiDQogICAgfSwgICAgDQogICAgew0KICAgICAgICBuYW1lOiAiU0VNSUNPTE9OIiwNCiAgICAgICAgdGV4dDogIjsiDQogICAgfSwgICAgDQogDQogICAgew0KICAgICAgICBuYW1lOiAiTFBBUkVOIiwNCiAgICAgICAgdGV4dDogIigiDQogICAgfSwgICANCiAgICB7DQogICAgICAgIG5hbWU6ICJSUEFSRU4iLA0KICAgICAgICB0ZXh0OiAiKSINCiAgICB9LCAgICAgDQogICAgew0KICAgICAgICBuYW1lOiAiRE9UIiwNCiAgICAgICAgdGV4dDogIi4iDQogICAgfQ0KXTsNCg0KKGZ1bmN0aW9uKCl7DQoNCiAgICB2YXIgbmFtZU1hcCA9IFtdLA0KICAgICAgICB0eXBlTWFwID0ge307DQogICAgDQogICAgVG9rZW5zLlVOS05PV04gPSAtMTsNCiAgICBUb2tlbnMudW5zaGlmdCh7bmFtZToiRU9GIn0pOw0KICAgIGZvciAodmFyIGk9MCwgbGVuID0gVG9rZW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsNCiAgICAgICAgbmFtZU1hcC5wdXNoKFRva2Vuc1tpXS5uYW1lKTsNCiAgICAgICAgVG9rZW5zW1Rva2Vuc1tpXS5uYW1lXSA9IGk7DQogICAgICAgIGlmIChUb2tlbnNbaV0udGV4dCl7DQogICAgICAgICAgICBpZiAoVG9rZW5zW2ldLnRleHQgaW5zdGFuY2VvZiBBcnJheSl7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqIDwgVG9rZW5zW2ldLnRleHQubGVuZ3RoOyBqKyspew0KICAgICAgICAgICAgICAgICAgICB0eXBlTWFwW1Rva2Vuc1tpXS50ZXh0W2pdXSA9IGk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0eXBlTWFwW1Rva2Vuc1tpXS50ZXh0XSA9IGk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgVG9rZW5zLm5hbWUgPSBmdW5jdGlvbih0dCl7DQogICAgICAgIHJldHVybiBuYW1lTWFwW3R0XTsNCiAgICB9Ow0KICAgIA0KICAgIFRva2Vucy50eXBlID0gZnVuY3Rpb24oYyl7DQogICAgICAgIHJldHVybiB0eXBlTWFwW2NdIHx8IC0xOw0KICAgIH07DQoNCn0pKCk7DQoNCg0KDQoNCg0KcGFyc2VybGliLmNzcyA9IHsNCkNvbG9ycyAgICAgICAgICAgICAgOkNvbG9ycywgICAgDQpDb21iaW5hdG9yICAgICAgICAgIDpDb21iaW5hdG9yLCAgICAgICAgICAgICAgICANClBhcnNlciAgICAgICAgICAgICAgOlBhcnNlciwNClByb3BlcnR5TmFtZSAgICAgICAgOlByb3BlcnR5TmFtZSwNClByb3BlcnR5VmFsdWUgICAgICAgOlByb3BlcnR5VmFsdWUsDQpQcm9wZXJ0eVZhbHVlUGFydCAgIDpQcm9wZXJ0eVZhbHVlUGFydCwNCk1lZGlhRmVhdHVyZSAgICAgICAgOk1lZGlhRmVhdHVyZSwNCk1lZGlhUXVlcnkgICAgICAgICAgOk1lZGlhUXVlcnksDQpTZWxlY3RvciAgICAgICAgICAgIDpTZWxlY3RvciwNClNlbGVjdG9yUGFydCAgICAgICAgOlNlbGVjdG9yUGFydCwNClNlbGVjdG9yU3ViUGFydCAgICAgOlNlbGVjdG9yU3ViUGFydCwNClRva2VuU3RyZWFtICAgICAgICAgOlRva2VuU3RyZWFtLA0KVG9rZW5zICAgICAgICAgICAgICA6VG9rZW5zDQp9Ow0KfSkoKTsNCg0KLyoqDQogKiBNYWluIENTU0xpbnQgb2JqZWN0Lg0KICogQGNsYXNzIENTU0xpbnQNCiAqIEBzdGF0aWMNCiAqIEBleHRlbmRzIHBhcnNlcmxpYi51dGlsLkV2ZW50VGFyZ2V0DQogKi8NCnZhciBDU1NMaW50ID0gKGZ1bmN0aW9uKCl7DQoNCiAgICB2YXIgcnVsZXMgICAgICA9IFtdLA0KICAgICAgICBmb3JtYXR0ZXJzID0gW10sDQogICAgICAgIGFwaSAgICAgICAgPSBuZXcgcGFyc2VybGliLnV0aWwuRXZlbnRUYXJnZXQoKTsNCiAgICAgICAgDQogICAgYXBpLnZlcnNpb24gPSAiQFZFUlNJT05AIjsNCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vIFJ1bGUgTWFuYWdlbWVudA0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgLyoqDQogICAgICogQWRkcyBhIG5ldyBydWxlIHRvIHRoZSBlbmdpbmUuDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJ1bGUgVGhlIHJ1bGUgdG8gYWRkLg0KICAgICAqIEBtZXRob2QgYWRkUnVsZQ0KICAgICAqLw0KICAgIGFwaS5hZGRSdWxlID0gZnVuY3Rpb24ocnVsZSl7DQogICAgICAgIHJ1bGVzLnB1c2gocnVsZSk7DQogICAgICAgIHJ1bGVzW3J1bGUuaWRdID0gcnVsZTsNCiAgICB9Ow0KDQogICAgLyoqDQogICAgICogQ2xlYXJzIGFsbCBydWxlIGZyb20gdGhlIGVuZ2luZS4NCiAgICAgKiBAbWV0aG9kIGNsZWFyUnVsZXMNCiAgICAgKi8NCiAgICBhcGkuY2xlYXJSdWxlcyA9IGZ1bmN0aW9uKCl7DQogICAgICAgIHJ1bGVzID0gW107DQogICAgfTsNCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vIEZvcm1hdHRlcnMNCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAgIC8qKg0KICAgICAqIEFkZHMgYSBuZXcgZm9ybWF0dGVyIHRvIHRoZSBlbmdpbmUuDQogICAgICogQHBhcmFtIHtPYmplY3R9IGZvcm1hdHRlciBUaGUgZm9ybWF0dGVyIHRvIGFkZC4NCiAgICAgKiBAbWV0aG9kIGFkZEZvcm1hdHRlcg0KICAgICAqLw0KICAgIGFwaS5hZGRGb3JtYXR0ZXIgPSBmdW5jdGlvbihmb3JtYXR0ZXIpIHsNCiAgICAgICAgLy8gZm9ybWF0dGVycy5wdXNoKGZvcm1hdHRlcik7DQogICAgICAgIGZvcm1hdHRlcnNbZm9ybWF0dGVyLmlkXSA9IGZvcm1hdHRlcjsNCiAgICB9Ow0KICAgIA0KICAgIC8qKg0KICAgICAqIFJldHJpZXZlcyBhIGZvcm1hdHRlciBmb3IgdXNlLg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXRJZCBUaGUgbmFtZSBvZiB0aGUgZm9ybWF0IHRvIHJldHJpZXZlLg0KICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGZvcm1hdHRlciBvciB1bmRlZmluZWQuDQogICAgICogQG1ldGhvZCBnZXRGb3JtYXR0ZXINCiAgICAgKi8NCiAgICBhcGkuZ2V0Rm9ybWF0dGVyID0gZnVuY3Rpb24oZm9ybWF0SWQpew0KICAgICAgICByZXR1cm4gZm9ybWF0dGVyc1tmb3JtYXRJZF07DQogICAgfTsNCiAgICANCiAgICAvKioNCiAgICAgKiBGb3JtYXRzIHRoZSByZXN1bHRzIGluIGEgcGFydGljdWxhciBmb3JtYXQgZm9yIGEgc2luZ2xlIGZpbGUuDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJlc3VsdCBUaGUgcmVzdWx0cyByZXR1cm5lZCBmcm9tIENTU0xpbnQudmVyaWZ5KCkuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lIFRoZSBmaWxlbmFtZSBmb3Igd2hpY2ggdGhlIHJlc3VsdHMgYXBwbHkuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdElkIFRoZSBuYW1lIG9mIHRoZSBmb3JtYXR0ZXIgdG8gdXNlLg0KICAgICAqIEByZXR1cm4ge1N0cmluZ30gQSBmb3JtYXR0ZWQgc3RyaW5nIGZvciB0aGUgcmVzdWx0cy4NCiAgICAgKiBAbWV0aG9kIGZvcm1hdA0KICAgICAqLw0KICAgIGFwaS5mb3JtYXQgPSBmdW5jdGlvbihyZXN1bHRzLCBmaWxlbmFtZSwgZm9ybWF0SWQpIHsNCiAgICAgICAgdmFyIGZvcm1hdHRlciA9IHRoaXMuZ2V0Rm9ybWF0dGVyKGZvcm1hdElkKSwNCiAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7DQogICAgICAgICAgICANCiAgICAgICAgaWYgKGZvcm1hdHRlcil7DQogICAgICAgICAgICByZXN1bHQgPSBmb3JtYXR0ZXIuc3RhcnRGb3JtYXQoKTsNCiAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXR0ZXIuZm9ybWF0UmVzdWx0cyhyZXN1bHRzLCBmaWxlbmFtZSk7DQogICAgICAgICAgICByZXN1bHQgKz0gZm9ybWF0dGVyLmVuZEZvcm1hdCgpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgIH0gICAgDQogICAgDQogICAgLyoqDQogICAgICogSW5kaWNhdGVzIGlmIHRoZSBnaXZlbiBmb3JtYXQgaXMgc3VwcG9ydGVkLg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXRJZCBUaGUgSUQgb2YgdGhlIGZvcm1hdCB0byBjaGVjay4NCiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoZSBmb3JtYXQgZXhpc3RzLCBmYWxzZSBpZiBub3QuDQogICAgICogQG1ldGhvZCBoYXNGb3JtYXQNCiAgICAgKi8NCiAgICBhcGkuaGFzRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0SWQpew0KICAgICAgICByZXR1cm4gZm9ybWF0dGVycy5oYXNPd25Qcm9wZXJ0eShmb3JtYXRJZCk7DQogICAgfTsNCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vIFZlcmlmaWNhdGlvbg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgLyoqDQogICAgICogU3RhcnRzIHRoZSB2ZXJpZmljYXRpb24gcHJvY2VzcyBmb3IgdGhlIGdpdmVuIENTUyB0ZXh0Lg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRoZSBDU1MgdGV4dCB0byB2ZXJpZnkuDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJ1bGVzZXQgKE9wdGlvbmFsKSBMaXN0IG9mIHJ1bGVzIHRvIGFwcGx5LiBJZiBudWxsLCB0aGVuDQogICAgICogICAgICBhbGwgcnVsZXMgYXJlIHVzZWQuDQogICAgICogQHJldHVybiB7T2JqZWN0fSBSZXN1bHRzIG9mIHRoZSB2ZXJpZmljYXRpb24uDQogICAgICogQG1ldGhvZCB2ZXJpZnkNCiAgICAgKi8NCiAgICBhcGkudmVyaWZ5ID0gZnVuY3Rpb24odGV4dCwgcnVsZXNldCl7DQoNCiAgICAgICAgdmFyIGkgICAgICAgPSAwLA0KICAgICAgICAgICAgbGVuICAgICA9IHJ1bGVzLmxlbmd0aCwNCiAgICAgICAgICAgIHJlcG9ydGVyLA0KICAgICAgICAgICAgbGluZXMsDQogICAgICAgICAgICBwYXJzZXIgPSBuZXcgcGFyc2VybGliLmNzcy5QYXJzZXIoeyBzdGFySGFjazogdHJ1ZSwgaWVGaWx0ZXJzOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJzY29yZUhhY2s6IHRydWUsIHN0cmljdDogZmFsc2UgfSk7DQoNCiAgICAgICAgbGluZXMgPSB0ZXh0LnNwbGl0KC9cblxyPy9nKTsNCiAgICAgICAgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXIobGluZXMpOw0KDQogICAgICAgIGlmICghcnVsZXNldCl7DQogICAgICAgICAgICB3aGlsZSAoaSA8IGxlbil7DQogICAgICAgICAgICAgICAgcnVsZXNbaSsrXS5pbml0KHBhcnNlciwgcmVwb3J0ZXIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcnVsZXNldC5lcnJvcnMgPSAxOyAgICAgICAvL2Fsd2F5cyByZXBvcnQgcGFyc2luZyBlcnJvcnMNCiAgICAgICAgICAgIGZvciAoaSBpbiBydWxlc2V0KXsNCiAgICAgICAgICAgICAgICBpZihydWxlc2V0Lmhhc093blByb3BlcnR5KGkpKXsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzW2ldKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLmluaXQocGFyc2VyLCByZXBvcnRlcik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvL2NhcHR1cmUgbW9zdCBob3JyaWJsZSBlcnJvciB0eXBlDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBwYXJzZXIucGFyc2UodGV4dCk7DQogICAgICAgIH0gY2F0Y2ggKGV4KSB7DQogICAgICAgICAgICByZXBvcnRlci5lcnJvcigiRmF0YWwgZXJyb3IsIGNhbm5vdCBjb250aW51ZTogIiArIGV4Lm1lc3NhZ2UsIGV4LmxpbmUsIGV4LmNvbCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgbWVzc2FnZXMgICAgOiByZXBvcnRlci5tZXNzYWdlcywNCiAgICAgICAgICAgIHN0YXRzICAgICAgIDogcmVwb3J0ZXIuc3RhdHMNCiAgICAgICAgfTsNCiAgICB9Ow0KDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gUHVibGlzaCB0aGUgQVBJDQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICByZXR1cm4gYXBpOw0KDQp9KSgpOw0KLyoqDQogKiBBbiBpbnN0YW5jZSBvZiBSZXBvcnQgaXMgdXNlZCB0byByZXBvcnQgcmVzdWx0cyBvZiB0aGUNCiAqIHZlcmlmaWNhdGlvbiBiYWNrIHRvIHRoZSBtYWluIEFQSS4NCiAqIEBjbGFzcyBSZXBvcnRlcg0KICogQGNvbnN0cnVjdG9yDQogKiBAcGFyYW0ge1N0cmluZ1tdfSBsaW5lcyBUaGUgdGV4dCBsaW5lcyBvZiB0aGUgc291cmNlLg0KICovDQpmdW5jdGlvbiBSZXBvcnRlcihsaW5lcyl7DQoNCiAgICAvKioNCiAgICAgKiBMaXN0IG9mIG1lc3NhZ2VzIGJlaW5nIHJlcG9ydGVkLg0KICAgICAqIEBwcm9wZXJ0eSBtZXNzYWdlcw0KICAgICAqIEB0eXBlIFN0cmluZ1tdDQogICAgICovDQogICAgdGhpcy5tZXNzYWdlcyA9IFtdOw0KDQogICAgLyoqDQogICAgICogTGlzdCBvZiBzdGF0aXN0aWNzIGJlaW5nIHJlcG9ydGVkLg0KICAgICAqIEBwcm9wZXJ0eSBzdGF0cw0KICAgICAqIEB0eXBlIFN0cmluZ1tdDQogICAgICovDQogICAgdGhpcy5zdGF0cyA9IFtdOw0KDQogICAgLyoqDQogICAgICogTGluZXMgb2YgY29kZSBiZWluZyByZXBvcnRlZCBvbi4gVXNlZCB0byBwcm92aWRlIGNvbnRleHR1YWwgaW5mb3JtYXRpb24NCiAgICAgKiBmb3IgbWVzc2FnZXMuDQogICAgICogQHByb3BlcnR5IGxpbmVzDQogICAgICogQHR5cGUgU3RyaW5nW10NCiAgICAgKi8NCiAgICB0aGlzLmxpbmVzID0gbGluZXM7DQp9DQoNClJlcG9ydGVyLnByb3RvdHlwZSA9IHsNCg0KICAgIC8vcmVzdG9yZSBjb25zdHJ1Y3Rvcg0KICAgIGNvbnN0cnVjdG9yOiBSZXBvcnRlciwNCg0KICAgIC8qKg0KICAgICAqIFJlcG9ydCBhbiBlcnJvci4NCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzdG9yZS4NCiAgICAgKiBAcGFyYW0ge2ludH0gbGluZSBUaGUgbGluZSBudW1iZXIuDQogICAgICogQHBhcmFtIHtpbnR9IGNvbCBUaGUgY29sdW1uIG51bWJlci4NCiAgICAgKiBAcGFyYW0ge09iamVjdH0gcnVsZSBUaGUgcnVsZSB0aGlzIG1lc3NhZ2UgcmVsYXRlcyB0by4NCiAgICAgKiBAbWV0aG9kIGVycm9yDQogICAgICovDQogICAgZXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UsIGxpbmUsIGNvbCwgcnVsZSl7DQogICAgICAgIHRoaXMubWVzc2FnZXMucHVzaCh7DQogICAgICAgICAgICB0eXBlICAgIDogImVycm9yIiwNCiAgICAgICAgICAgIGxpbmUgICAgOiBsaW5lLA0KICAgICAgICAgICAgY29sICAgICA6IGNvbCwNCiAgICAgICAgICAgIG1lc3NhZ2UgOiBtZXNzYWdlLA0KICAgICAgICAgICAgZXZpZGVuY2U6IHRoaXMubGluZXNbbGluZS0xXSwNCiAgICAgICAgICAgIHJ1bGUgICAgOiBydWxlDQogICAgICAgIH0pOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBSZXBvcnQgYW4gd2FybmluZy4NCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzdG9yZS4NCiAgICAgKiBAcGFyYW0ge2ludH0gbGluZSBUaGUgbGluZSBudW1iZXIuDQogICAgICogQHBhcmFtIHtpbnR9IGNvbCBUaGUgY29sdW1uIG51bWJlci4NCiAgICAgKiBAcGFyYW0ge09iamVjdH0gcnVsZSBUaGUgcnVsZSB0aGlzIG1lc3NhZ2UgcmVsYXRlcyB0by4NCiAgICAgKiBAbWV0aG9kIHdhcm4NCiAgICAgKi8NCiAgICB3YXJuOiBmdW5jdGlvbihtZXNzYWdlLCBsaW5lLCBjb2wsIHJ1bGUpew0KICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2goew0KICAgICAgICAgICAgdHlwZSAgICA6ICJ3YXJuaW5nIiwNCiAgICAgICAgICAgIGxpbmUgICAgOiBsaW5lLA0KICAgICAgICAgICAgY29sICAgICA6IGNvbCwNCiAgICAgICAgICAgIG1lc3NhZ2UgOiBtZXNzYWdlLA0KICAgICAgICAgICAgZXZpZGVuY2U6IHRoaXMubGluZXNbbGluZS0xXSwNCiAgICAgICAgICAgIHJ1bGUgICAgOiBydWxlDQogICAgICAgIH0pOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBSZXBvcnQgc29tZSBpbmZvcm1hdGlvbmFsIHRleHQuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc3RvcmUuDQogICAgICogQHBhcmFtIHtpbnR9IGxpbmUgVGhlIGxpbmUgbnVtYmVyLg0KICAgICAqIEBwYXJhbSB7aW50fSBjb2wgVGhlIGNvbHVtbiBudW1iZXIuDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJ1bGUgVGhlIHJ1bGUgdGhpcyBtZXNzYWdlIHJlbGF0ZXMgdG8uDQogICAgICogQG1ldGhvZCBpbmZvDQogICAgICovDQogICAgaW5mbzogZnVuY3Rpb24obWVzc2FnZSwgbGluZSwgY29sLCBydWxlKXsNCiAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKHsNCiAgICAgICAgICAgIHR5cGUgICAgOiAiaW5mbyIsDQogICAgICAgICAgICBsaW5lICAgIDogbGluZSwNCiAgICAgICAgICAgIGNvbCAgICAgOiBjb2wsDQogICAgICAgICAgICBtZXNzYWdlIDogbWVzc2FnZSwNCiAgICAgICAgICAgIGV2aWRlbmNlOiB0aGlzLmxpbmVzW2xpbmUtMV0sDQogICAgICAgICAgICBydWxlICAgIDogcnVsZQ0KICAgICAgICB9KTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUmVwb3J0IHNvbWUgcm9sbHVwIGVycm9yIGluZm9ybWF0aW9uLg0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHN0b3JlLg0KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBydWxlIFRoZSBydWxlIHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLg0KICAgICAqIEBtZXRob2Qgcm9sbHVwRXJyb3INCiAgICAgKi8NCiAgICByb2xsdXBFcnJvcjogZnVuY3Rpb24obWVzc2FnZSwgcnVsZSl7DQogICAgICAgIHRoaXMubWVzc2FnZXMucHVzaCh7DQogICAgICAgICAgICB0eXBlICAgIDogImVycm9yIiwNCiAgICAgICAgICAgIHJvbGx1cCAgOiB0cnVlLA0KICAgICAgICAgICAgbWVzc2FnZSA6IG1lc3NhZ2UsDQogICAgICAgICAgICBydWxlICAgIDogcnVsZQ0KICAgICAgICB9KTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogUmVwb3J0IHNvbWUgcm9sbHVwIHdhcm5pbmcgaW5mb3JtYXRpb24uDQogICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc3RvcmUuDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJ1bGUgVGhlIHJ1bGUgdGhpcyBtZXNzYWdlIHJlbGF0ZXMgdG8uDQogICAgICogQG1ldGhvZCByb2xsdXBXYXJuDQogICAgICovDQogICAgcm9sbHVwV2FybjogZnVuY3Rpb24obWVzc2FnZSwgcnVsZSl7DQogICAgICAgIHRoaXMubWVzc2FnZXMucHVzaCh7DQogICAgICAgICAgICB0eXBlICAgIDogIndhcm5pbmciLA0KICAgICAgICAgICAgcm9sbHVwICA6IHRydWUsDQogICAgICAgICAgICBtZXNzYWdlIDogbWVzc2FnZSwNCiAgICAgICAgICAgIHJ1bGUgICAgOiBydWxlDQogICAgICAgIH0pOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiBSZXBvcnQgYSBzdGF0aXN0aWMuDQogICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHN0YXQgdG8gc3RvcmUuDQogICAgICogQHBhcmFtIHtWYXJpYW50fSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHN0YXQuDQogICAgICogQG1ldGhvZCBzdGF0DQogICAgICovDQogICAgc3RhdDogZnVuY3Rpb24obmFtZSwgdmFsdWUpew0KICAgICAgICB0aGlzLnN0YXRzW25hbWVdID0gdmFsdWU7DQogICAgfQ0KfTsNCi8qDQogKiBVdGlsaXR5IGZ1bmN0aW9ucyB0aGF0IG1ha2UgbGlmZSBlYXNpZXIuDQogKi8NCg0KLyoNCiAqIEFkZHMgYWxsIHByb3BlcnRpZXMgZnJvbSBzdXBwbGllciBvbnRvIHJlY2VpdmVyLA0KICogb3ZlcndyaXRpbmcgaWYgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBvbg0KICogcmVjaWV2ZXIuDQogKiBAcGFyYW0ge09iamVjdH0gVGhlIG9iamVjdCB0byByZWNlaXZlIHRoZSBwcm9wZXJ0aWVzLg0KICogQHBhcmFtIHtPYmplY3R9IFRoZSBvYmplY3QgdG8gcHJvdmlkZSB0aGUgcHJvcGVydGllcy4NCiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlY2VpdmVyDQogKi8NCmZ1bmN0aW9uIG1peChyZWNpZXZlciwgc3VwcGxpZXIpew0KICAgIHZhciBwcm9wOw0KDQogICAgZm9yIChwcm9wIGluIHN1cHBsaWVyKXsNCiAgICAgICAgaWYgKHN1cHBsaWVyLmhhc093blByb3BlcnR5KHByb3ApKXsNCiAgICAgICAgICAgIHJlY2VpdmVyW3Byb3BdID0gc3VwcGxpZXJbcHJvcF07DQogICAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4gcHJvcDsNCn0NCg0KLyoNCiAqIFBvbHlmaWxsIGZvciBhcnJheSBpbmRleE9mKCkgbWV0aG9kLg0KICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSBhcnJheSB0byBzZWFyY2guDQogKiBAcGFyYW0ge1ZhcmlhbnR9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLg0KICogQHJldHVybiB7aW50fSBUaGUgaW5kZXggb2YgdGhlIHZhbHVlIGlmIGZvdW5kLCAtMSBpZiBub3QuDQogKi8NCmZ1bmN0aW9uIGluZGV4T2YodmFsdWVzLCB2YWx1ZSl7DQogICAgaWYgKHZhbHVlcy5pbmRleE9mKXsNCiAgICAgICAgcmV0dXJuIHZhbHVlcy5pbmRleE9mKHZhbHVlKTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBmb3IgKHZhciBpPTAsIGxlbj12YWx1ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspew0KICAgICAgICAgICAgaWYgKHZhbHVlc1tpXSA9PT0gdmFsdWUpew0KICAgICAgICAgICAgICAgIHJldHVybiBpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiAtMTsNCiAgICB9DQp9DQovKg0KICogUnVsZTogRG9uJ3QgdXNlIGFkam9pbmluZyBjbGFzc2VzICguZm9vLmJhcikuDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogImFkam9pbmluZy1jbGFzc2VzIiwNCiAgICBuYW1lOiAiQWRqb2luaW5nIENsYXNzZXMiLA0KICAgIGRlc2M6ICJEb24ndCB1c2UgYWRqb2luaW5nIGNsYXNzZXMuIiwNCiAgICBicm93c2VyczogIklFNiIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpczsNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbihldmVudCl7DQogICAgICAgICAgICB2YXIgc2VsZWN0b3JzID0gZXZlbnQuc2VsZWN0b3JzLA0KICAgICAgICAgICAgICAgIHNlbGVjdG9yLA0KICAgICAgICAgICAgICAgIHBhcnQsDQogICAgICAgICAgICAgICAgbW9kaWZpZXIsDQogICAgICAgICAgICAgICAgY2xhc3NDb3VudCwNCiAgICAgICAgICAgICAgICBpLCBqLCBrOw0KDQogICAgICAgICAgICBmb3IgKGk9MDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKyl7DQogICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07DQogICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBzZWxlY3Rvci5wYXJ0cy5sZW5ndGg7IGorKyl7DQogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxlY3Rvci5wYXJ0c1tqXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBwYXJzZXJsaWIuY3NzLlNlbGVjdG9yUGFydCl7DQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0NvdW50ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaz0wOyBrIDwgcGFydC5tb2RpZmllcnMubGVuZ3RoOyBrKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gcGFydC5tb2RpZmllcnNba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyLnR5cGUgPT0gImNsYXNzIil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzQ291bnQrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzQ291bnQgPiAxKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiRG9uJ3QgdXNlIGFkam9pbmluZyBjbGFzc2VzLiIsIHBhcnQubGluZSwgcGFydC5jb2wsIHJ1bGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBEb24ndCB1c2Ugd2lkdGggb3IgaGVpZ2h0IHdoZW4gdXNpbmcgcGFkZGluZyBvciBib3JkZXIuIA0KICovDQpDU1NMaW50LmFkZFJ1bGUoew0KDQogICAgLy9ydWxlIGluZm9ybWF0aW9uDQogICAgaWQ6ICJib3gtbW9kZWwiLA0KICAgIG5hbWU6ICJCb3ggTW9kZWwiLA0KICAgIGRlc2M6ICJEb24ndCB1c2Ugd2lkdGggb3IgaGVpZ2h0IHdoZW4gdXNpbmcgcGFkZGluZyBvciBib3JkZXIuIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpcywNCiAgICAgICAgICAgIHdpZHRoUHJvcGVydGllcyA9IHsNCiAgICAgICAgICAgICAgICBib3JkZXI6IDEsDQogICAgICAgICAgICAgICAgImJvcmRlci1sZWZ0IjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXJpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nLWxlZnQiOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nLXJpZ2h0IjogMQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGhlaWdodFByb3BlcnRpZXMgPSB7DQogICAgICAgICAgICAgICAgYm9yZGVyOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItYm90dG9tIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXRvcCI6IDEsDQogICAgICAgICAgICAgICAgcGFkZGluZzogMSwNCiAgICAgICAgICAgICAgICAicGFkZGluZy1ib3R0b20iOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nLXRvcCI6IDENCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBwcm9wZXJ0aWVzOw0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7DQogICAgICAgICAgICB9Ow0KICAgICAgICB9KTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmIChoZWlnaHRQcm9wZXJ0aWVzW25hbWVdIHx8IHdpZHRoUHJvcGVydGllc1tuYW1lXSl7DQogICAgICAgICAgICAgICAgaWYgKCEvXjBcUyokLy50ZXN0KGV2ZW50LnZhbHVlKSAmJiAhKG5hbWUgPT0gImJvcmRlciIgJiYgZXZlbnQudmFsdWUgPT0gIm5vbmUiKSl7DQogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbbmFtZV0gPSB7IGxpbmU6IGV2ZW50LnByb3BlcnR5LmxpbmUsIGNvbDogZXZlbnQucHJvcGVydHkuY29sLCB2YWx1ZTogZXZlbnQudmFsdWUgfTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ3aWR0aCIgfHwgbmFtZSA9PSAiaGVpZ2h0Iil7DQogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbbmFtZV0gPSAxOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICB9KTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgdmFyIHByb3A7DQogICAgICAgICAgICBpZiAocHJvcGVydGllc1siaGVpZ2h0Il0pew0KICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiBoZWlnaHRQcm9wZXJ0aWVzKXsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodFByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcHJvcGVydGllc1twcm9wXSl7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgLy9zcGVjaWFsIGNhc2UgZm9yIHBhZGRpbmcNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09ICJwYWRkaW5nIiAmJiBwcm9wZXJ0aWVzW3Byb3BdLnZhbHVlLnBhcnRzLmxlbmd0aCA9PSAyICYmIHByb3BlcnRpZXNbcHJvcF0udmFsdWUucGFydHNbMF0udmFsdWUgPT0gMCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ub29wDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIkJyb2tlbiBib3ggbW9kZWw6IHVzaW5nIGhlaWdodCB3aXRoICIgKyBwcm9wICsgIi4iLCBwcm9wZXJ0aWVzW3Byb3BdLmxpbmUsIHByb3BlcnRpZXNbcHJvcF0uY29sLCBydWxlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbIndpZHRoIl0pew0KICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiB3aWR0aFByb3BlcnRpZXMpew0KICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3ApICYmIHByb3BlcnRpZXNbcHJvcF0pew0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PSAicGFkZGluZyIgJiYgcHJvcGVydGllc1twcm9wXS52YWx1ZS5wYXJ0cy5sZW5ndGggPT0gMiAmJiBwcm9wZXJ0aWVzW3Byb3BdLnZhbHVlLnBhcnRzWzFdLnZhbHVlID09IDApew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbm9vcA0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci53YXJuKCJCcm9rZW4gYm94IG1vZGVsOiB1c2luZyB3aWR0aCB3aXRoICIgKyBwcm9wICsgIi4iLCBwcm9wZXJ0aWVzW3Byb3BdLmxpbmUsIHByb3BlcnRpZXNbcHJvcF0uY29sLCBydWxlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9KTsNCiAgICB9DQoNCn0pOw0KLyoNCiAqIFJ1bGU6IEluY2x1ZGUgYWxsIGNvbXBhdGlibGUgdmVuZG9yIHByZWZpeGVzIHRvIHJlYWNoIGEgd2lkZXINCiAqIHJhbmdlIG9mIHVzZXJzLg0KICovDQovKmdsb2JhbCBDU1NMaW50Ki8gDQpDU1NMaW50LmFkZFJ1bGUoew0KDQogICAgLy9ydWxlIGluZm9ybWF0aW9uDQogICAgaWQ6ICJjb21wYXRpYmxlLXZlbmRvci1wcmVmaXhlcyIsDQogICAgbmFtZTogIkNvbXBhdGlibGUgVmVuZG9yIFByZWZpeGVzIiwNCiAgICBkZXNjOiAiSW5jbHVkZSBhbGwgY29tcGF0aWJsZSB2ZW5kb3IgcHJlZml4ZXMgdG8gcmVhY2ggYSB3aWRlciByYW5nZSBvZiB1c2Vycy4iLA0KICAgIGJyb3dzZXJzOiAiQWxsIiwNCg0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbiAocGFyc2VyLCByZXBvcnRlcikgew0KICAgICAgICB2YXIgcnVsZSA9IHRoaXMsDQogICAgICAgICAgICBjb21wYXRpYmxlUHJlZml4ZXMsDQogICAgICAgICAgICBwcm9wZXJ0aWVzLA0KICAgICAgICAgICAgcHJvcCwNCiAgICAgICAgICAgIHZhcmlhdGlvbnMsDQogICAgICAgICAgICBwcmVmaXhlZCwNCiAgICAgICAgICAgIGksDQogICAgICAgICAgICBsZW4sDQogICAgICAgICAgICBhcnJheVB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaCwNCiAgICAgICAgICAgIGFwcGx5VG8gPSBbXTsNCg0KICAgICAgICAvLyBTZWUgaHR0cDovL3BldGVyLnNoL2V4cGVyaW1lbnRzL3ZlbmRvci1wcmVmaXhlZC1jc3MtcHJvcGVydHktb3ZlcnZpZXcvIGZvciBkZXRhaWxzDQogICAgICAgIGNvbXBhdGlibGVQcmVmaXhlcyA9IHsNCiAgICAgICAgICAgICJhbmltYXRpb24iICAgICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiYW5pbWF0aW9uLWRlbGF5IiAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImFuaW1hdGlvbi1kaXJlY3Rpb24iICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJhbmltYXRpb24tZHVyYXRpb24iICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiYW5pbWF0aW9uLWZpbGwtbW9kZSIgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJhbmltYXRpb24tbmFtZSIgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiYW5pbWF0aW9uLXBsYXktc3RhdGUiICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJhcHBlYXJhbmNlIiAgICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiYm9yZGVyLWVuZCIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImJvcmRlci1lbmQtY29sb3IiICAgICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJib3JkZXItZW5kLXN0eWxlIiAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiYm9yZGVyLWVuZC13aWR0aCIgICAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImJvcmRlci1pbWFnZSIgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG8iLA0KICAgICAgICAgICAgImJvcmRlci1yYWRpdXMiICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJib3JkZXItc3RhcnQiICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiYm9yZGVyLXN0YXJ0LWNvbG9yIiAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImJvcmRlci1zdGFydC1zdHlsZSIgICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJib3JkZXItc3RhcnQtd2lkdGgiICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiYm94LWFsaWduIiAgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLA0KICAgICAgICAgICAgImJveC1kaXJlY3Rpb24iICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG1zIiwNCiAgICAgICAgICAgICJib3gtZmxleCIgICAgICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiBtcyIsDQogICAgICAgICAgICAiYm94LWxpbmVzIiAgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtcyIsDQogICAgICAgICAgICAiYm94LW9yZGluYWwtZ3JvdXAiICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLA0KICAgICAgICAgICAgImJveC1vcmllbnQiICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG1zIiwNCiAgICAgICAgICAgICJib3gtcGFjayIgICAgICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiBtcyIsDQogICAgICAgICAgICAiYm94LXNpemluZyIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImJveC1zaGFkb3ciICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJjb2x1bW4tY291bnQiICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiY29sdW1uLWdhcCIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImNvbHVtbi1ydWxlIiAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJjb2x1bW4tcnVsZS1jb2xvciIgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiY29sdW1uLXJ1bGUtc3R5bGUiICAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgImNvbHVtbi1ydWxlLXdpZHRoIiAgICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJjb2x1bW4td2lkdGgiICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAiaHlwaGVucyIgICAgICAgICAgICAgICAgICAgIDogImVwdWIgbW96IiwNCiAgICAgICAgICAgICJsaW5lLWJyZWFrIiAgICAgICAgICAgICAgICAgOiAid2Via2l0IG1zIiwNCiAgICAgICAgICAgICJtYXJnaW4tZW5kIiAgICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAibWFyZ2luLXN0YXJ0IiAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgIm1hcnF1ZWUtc3BlZWQiICAgICAgICAgICAgICA6ICJ3ZWJraXQgd2FwIiwNCiAgICAgICAgICAgICJtYXJxdWVlLXN0eWxlIiAgICAgICAgICAgICAgOiAid2Via2l0IHdhcCIsDQogICAgICAgICAgICAicGFkZGluZy1lbmQiICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLA0KICAgICAgICAgICAgInBhZGRpbmctc3RhcnQiICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJ0YWItc2l6ZSIgICAgICAgICAgICAgICAgICAgOiAibW96IG8iLA0KICAgICAgICAgICAgInRleHQtc2l6ZS1hZGp1c3QiICAgICAgICAgICA6ICJ3ZWJraXQgbXMiLA0KICAgICAgICAgICAgInRyYW5zZm9ybSIgICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG1zIG8iLA0KICAgICAgICAgICAgInRyYW5zZm9ybS1vcmlnaW4iICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG1zIG8iLA0KICAgICAgICAgICAgInRyYW5zaXRpb24iICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG8iLA0KICAgICAgICAgICAgInRyYW5zaXRpb24tZGVsYXkiICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG8iLA0KICAgICAgICAgICAgInRyYW5zaXRpb24tZHVyYXRpb24iICAgICAgICA6ICJ3ZWJraXQgbW96IG8iLA0KICAgICAgICAgICAgInRyYW5zaXRpb24tcHJvcGVydHkiICAgICAgICA6ICJ3ZWJraXQgbW96IG8iLA0KICAgICAgICAgICAgInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIiA6ICJ3ZWJraXQgbW96IG8iLA0KICAgICAgICAgICAgInVzZXItbW9kaWZ5IiAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IiwNCiAgICAgICAgICAgICJ1c2VyLXNlbGVjdCIgICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsDQogICAgICAgICAgICAid29yZC1icmVhayIgICAgICAgICAgICAgICAgIDogImVwdWIgbXMiLA0KICAgICAgICAgICAgIndyaXRpbmctbW9kZSIgICAgICAgICAgICAgICA6ICJlcHViIG1zIg0KICAgICAgICB9Ow0KDQogICAgICAgIGZvciAocHJvcCBpbiBjb21wYXRpYmxlUHJlZml4ZXMpIHsNCiAgICAgICAgICAgIGlmIChjb21wYXRpYmxlUHJlZml4ZXMuaGFzT3duUHJvcGVydHkocHJvcCkpIHsNCiAgICAgICAgICAgICAgICB2YXJpYXRpb25zID0gW107DQogICAgICAgICAgICAgICAgcHJlZml4ZWQgPSBjb21wYXRpYmxlUHJlZml4ZXNbcHJvcF0uc3BsaXQoJyAnKTsNCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcmVmaXhlZC5sZW5ndGg7IGkgPCBsZW47IGkrKykgew0KICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb25zLnB1c2goJy0nICsgcHJlZml4ZWRbaV0gKyAnLScgKyBwcm9wKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29tcGF0aWJsZVByZWZpeGVzW3Byb3BdID0gdmFyaWF0aW9uczsNCiAgICAgICAgICAgICAgICBhcnJheVB1c2guYXBwbHkoYXBwbHlUbywgdmFyaWF0aW9ucyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBwcm9wZXJ0aWVzID0gW107DQogICAgICAgIH0pOw0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbiAoZXZlbnQpIHsNCiAgICAgICAgICAgIHZhciBuYW1lID0gZXZlbnQucHJvcGVydHkudGV4dDsNCiAgICAgICAgICAgIGlmIChhcHBseVRvLmluZGV4T2YobmFtZSkgPiAtMSkgew0KICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChuYW1lKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRydWxlIiwgZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgcHJvcGVydHlHcm91cHMgPSB7fSwNCiAgICAgICAgICAgICAgICBpLA0KICAgICAgICAgICAgICAgIGxlbiwNCiAgICAgICAgICAgICAgICBuYW1lLA0KICAgICAgICAgICAgICAgIHByb3AsDQogICAgICAgICAgICAgICAgdmFyaWF0aW9ucywNCiAgICAgICAgICAgICAgICB2YWx1ZSwNCiAgICAgICAgICAgICAgICBmdWxsLA0KICAgICAgICAgICAgICAgIGFjdHVhbCwNCiAgICAgICAgICAgICAgICBpdGVtLA0KICAgICAgICAgICAgICAgIHByb3BlcnRpZXNTcGVjaWZpZWQ7DQoNCiAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsNCiAgICAgICAgICAgICAgICBuYW1lID0gcHJvcGVydGllc1tpXTsNCg0KICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiBjb21wYXRpYmxlUHJlZml4ZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBhdGlibGVQcmVmaXhlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9ucyA9IGNvbXBhdGlibGVQcmVmaXhlc1twcm9wXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb25zLmluZGV4T2YobmFtZSkgPiAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUdyb3Vwc1twcm9wXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXBzW3Byb3BdID0gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbCA6IHZhcmlhdGlvbnMuc2xpY2UoMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgOiBbXQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlHcm91cHNbcHJvcF0uYWN0dWFsLmluZGV4T2YobmFtZSkgPT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXBzW3Byb3BdLmFjdHVhbC5wdXNoKG5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZm9yIChwcm9wIGluIHByb3BlcnR5R3JvdXBzKSB7DQogICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5R3JvdXBzLmhhc093blByb3BlcnR5KHByb3ApKSB7DQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvcGVydHlHcm91cHNbcHJvcF07DQogICAgICAgICAgICAgICAgICAgIGZ1bGwgPSB2YWx1ZS5mdWxsOw0KICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSB2YWx1ZS5hY3R1YWw7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bGwubGVuZ3RoID4gYWN0dWFsLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZnVsbC5sZW5ndGg7IGkgPCBsZW47IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBmdWxsW2ldOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWwuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1NwZWNpZmllZCA9IChhY3R1YWwubGVuZ3RoID09PSAxKSA/IGFjdHVhbFswXSA6IChhY3R1YWwubGVuZ3RoID09IDIpID8gYWN0dWFsLmpvaW4oIiBhbmQgIikgOiBhY3R1YWwuam9pbigiLCAiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiVGhlIHByb3BlcnR5ICIgKyBpdGVtICsgIiBpcyBjb21wYXRpYmxlIHdpdGggIiArIHByb3BlcnRpZXNTcGVjaWZpZWQgKyAiIGFuZCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgd2VsbC4iLCBldmVudC5zZWxlY3RvcnNbMF0ubGluZSwgZXZlbnQuc2VsZWN0b3JzWzBdLmNvbCwgcnVsZSk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQp9KTsNCi8qDQogKiBSdWxlOiBDZXJ0YWluIHByb3BlcnRpZXMgZG9uJ3QgcGxheSB3ZWxsIHdpdGggY2VydGFpbiBkaXNwbGF5IHZhbHVlcy4gDQogKiAtIGZsb2F0IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIGlubGluZS1ibG9jaw0KICogLSBoZWlnaHQsIHdpZHRoLCBtYXJnaW4tdG9wLCBtYXJnaW4tYm90dG9tLCBmbG9hdCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBpbmxpbmUNCiAqIC0gdmVydGljYWwtYWxpZ24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggYmxvY2sNCiAqIC0gbWFyZ2luLCBmbG9hdCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCB0YWJsZS0qDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogImRpc3BsYXktcHJvcGVydHktZ3JvdXBpbmciLA0KICAgIG5hbWU6ICJEaXNwbGF5IFByb3BlcnR5IEdyb3VwaW5nIiwNCiAgICBkZXNjOiAiQ2VydGFpbiBwcm9wZXJ0aWVzIHNob3VsZG4ndCBiZSB1c2VkIHdpdGggY2VydGFpbiBkaXNwbGF5IHByb3BlcnR5IHZhbHVlcy4iLA0KICAgIGJyb3dzZXJzOiAiQWxsIiwNCg0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsNCiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOw0KDQogICAgICAgIHZhciBwcm9wZXJ0aWVzVG9DaGVjayA9IHsNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiAxLA0KICAgICAgICAgICAgICAgICJmbG9hdCI6ICJub25lIiwNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsDQogICAgICAgICAgICAgICAgd2lkdGg6IDEsDQogICAgICAgICAgICAgICAgbWFyZ2luOiAxLA0KICAgICAgICAgICAgICAgICJtYXJnaW4tbGVmdCI6IDEsDQogICAgICAgICAgICAgICAgIm1hcmdpbi1yaWdodCI6IDEsDQogICAgICAgICAgICAgICAgIm1hcmdpbi1ib3R0b20iOiAxLA0KICAgICAgICAgICAgICAgICJtYXJnaW4tdG9wIjogMSwNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nLWxlZnQiOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nLXJpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICAicGFkZGluZy1ib3R0b20iOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nLXRvcCI6IDEsDQogICAgICAgICAgICAgICAgInZlcnRpY2FsLWFsaWduIjogMQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHByb3BlcnRpZXM7DQoNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgcHJvcGVydGllcyA9IHt9Ow0KICAgICAgICB9KTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7DQoNCiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzVG9DaGVja1tuYW1lXSl7DQogICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IHsgdmFsdWU6IGV2ZW50LnZhbHVlLnRleHQsIGxpbmU6IGV2ZW50LnByb3BlcnR5LmxpbmUsIGNvbDogZXZlbnQucHJvcGVydHkuY29sIH07ICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRydWxlIiwgZnVuY3Rpb24oKXsNCg0KICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBwcm9wZXJ0aWVzLmRpc3BsYXkgPyBwcm9wZXJ0aWVzLmRpc3BsYXkudmFsdWUgOiBudWxsOw0KICAgICAgICAgICAgaWYgKGRpc3BsYXkpew0KICAgICAgICAgICAgICAgIHN3aXRjaChkaXNwbGF5KXsNCg0KICAgICAgICAgICAgICAgICAgICBjYXNlICJpbmxpbmUiOg0KICAgICAgICAgICAgICAgICAgICAgICAgLy9oZWlnaHQsIHdpZHRoLCBtYXJnaW4tdG9wLCBtYXJnaW4tYm90dG9tLCBmbG9hdCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBpbmxpbmUNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJoZWlnaHQiLCBkaXNwbGF5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJ3aWR0aCIsIGRpc3BsYXkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbiIsIGRpc3BsYXkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbi10b3AiLCBkaXNwbGF5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJtYXJnaW4tYm90dG9tIiwgZGlzcGxheSk7ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJmbG9hdCIsIGRpc3BsYXksICJkaXNwbGF5OmlubGluZSBoYXMgbm8gZWZmZWN0IG9uIGZsb2F0ZWQgZWxlbWVudHMgKGJ1dCBtYXkgYmUgdXNlZCB0byBmaXggdGhlIElFNiBkb3VibGUtbWFyZ2luIGJ1ZykuIik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICBjYXNlICJibG9jayI6DQogICAgICAgICAgICAgICAgICAgICAgICAvL3ZlcnRpY2FsLWFsaWduIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIGJsb2NrDQogICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9wZXJ0eSgidmVydGljYWwtYWxpZ24iLCBkaXNwbGF5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgIGNhc2UgImlubGluZS1ibG9jayI6DQogICAgICAgICAgICAgICAgICAgICAgICAvL2Zsb2F0IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIGlubGluZS1ibG9jaw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoImZsb2F0IiwgZGlzcGxheSk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgLy9tYXJnaW4sIGZsb2F0IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIHRhYmxlDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheS5pbmRleE9mKCJ0YWJsZS0iKSA9PSAwKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9wZXJ0eSgibWFyZ2luIiwgZGlzcGxheSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbi1sZWZ0IiwgZGlzcGxheSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbi1yaWdodCIsIGRpc3BsYXkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJtYXJnaW4tdG9wIiwgZGlzcGxheSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbi1ib3R0b20iLCBkaXNwbGF5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9wZXJ0eSgiZmxvYXQiLCBkaXNwbGF5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UgZG8gbm90aGluZw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgfSk7DQoNCg0KICAgICAgICBmdW5jdGlvbiByZXBvcnRQcm9wZXJ0eShuYW1lLCBkaXNwbGF5LCBtc2cpew0KICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbbmFtZV0pew0KICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiBwcm9wZXJ0aWVzVG9DaGVja1tuYW1lXSA9PSAic3RyaW5nIikgfHwgcHJvcGVydGllc1tuYW1lXS52YWx1ZS50b0xvd2VyQ2FzZSgpICE9IHByb3BlcnRpZXNUb0NoZWNrW25hbWVdKXsNCiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIud2Fybihtc2cgfHwgbmFtZSArICIgY2FuJ3QgYmUgdXNlZCB3aXRoIGRpc3BsYXk6ICIgKyBkaXNwbGF5ICsgIi4iLCBwcm9wZXJ0aWVzW25hbWVdLmxpbmUsIHByb3BlcnRpZXNbbmFtZV0uY29sLCBydWxlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCn0pOw0KLyoNCiAqIFJ1bGU6IER1cGxpY2F0ZSBwcm9wZXJ0aWVzIG11c3QgYXBwZWFyIG9uZSBhZnRlciB0aGUgb3RoZXIuIElmIGFuIGFscmVhZHktZGVmaW5lZA0KICogcHJvcGVydHkgYXBwZWFycyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgcnVsZSwgdGhlbiBpdCdzIGxpa2VseSBhbiBlcnJvci4NCiAqLw0KQ1NTTGludC5hZGRSdWxlKHsNCg0KICAgIC8vcnVsZSBpbmZvcm1hdGlvbg0KICAgIGlkOiAiZHVwbGljYXRlLXByb3BlcnRpZXMiLA0KICAgIG5hbWU6ICJEdXBsaWNhdGUgUHJvcGVydGllcyIsDQogICAgZGVzYzogIkR1cGxpY2F0ZSBwcm9wZXJ0aWVzIG11c3QgYXBwZWFyIG9uZSBhZnRlciB0aGUgb3RoZXIuIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpcywNCiAgICAgICAgICAgIHByb3BlcnRpZXMsDQogICAgICAgICAgICBsYXN0UHJvcGVydHk7ICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgZnVuY3Rpb24gc3RhcnRSdWxlKGV2ZW50KXsNCiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7fTsgICAgICAgIA0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIHN0YXJ0UnVsZSk7DQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsIHN0YXJ0UnVsZSk7DQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlIiwgc3RhcnRSdWxlKTsNCiAgICAgICAgDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7DQogICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBldmVudC5wcm9wZXJ0eSwNCiAgICAgICAgICAgICAgICBuYW1lID0gcHJvcGVydHkudGV4dC50b0xvd2VyQ2FzZSgpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAocHJvcGVydGllc1tuYW1lXSAmJiAobGFzdFByb3BlcnR5ICE9IG5hbWUgfHwgcHJvcGVydGllc1tuYW1lXSA9PSBldmVudC52YWx1ZS50ZXh0KSl7DQogICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiRHVwbGljYXRlIHByb3BlcnR5ICciICsgZXZlbnQucHJvcGVydHkgKyAiJyBmb3VuZC4iLCBldmVudC5saW5lLCBldmVudC5jb2wsIHJ1bGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBwcm9wZXJ0aWVzW25hbWVdID0gZXZlbnQudmFsdWUudGV4dDsNCiAgICAgICAgICAgIGxhc3RQcm9wZXJ0eSA9IG5hbWU7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgfSk7DQogICAgICAgICAgICANCiAgICAgICAgDQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBTdHlsZSBydWxlcyB3aXRob3V0IGFueSBwcm9wZXJ0aWVzIGRlZmluZWQgc2hvdWxkIGJlIHJlbW92ZWQuDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogImVtcHR5LXJ1bGVzIiwNCiAgICBuYW1lOiAiRW1wdHkgUnVsZXMiLA0KICAgIGRlc2M6ICJSdWxlcyB3aXRob3V0IGFueSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBzaG91bGQgYmUgcmVtb3ZlZC4iLA0KICAgIGJyb3dzZXJzOiAiQWxsIiwNCg0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsNCiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLA0KICAgICAgICAgICAgY291bnQgPSAwOw0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIGNvdW50PTA7DQogICAgICAgIH0pOw0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgY291bnQrKzsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRydWxlIiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IGV2ZW50LnNlbGVjdG9yczsNCiAgICAgICAgICAgIGlmIChjb3VudCA9PSAwKXsNCiAgICAgICAgICAgICAgICByZXBvcnRlci53YXJuKCJSdWxlIGlzIGVtcHR5LiIsIHNlbGVjdG9yc1swXS5saW5lLCBzZWxlY3RvcnNbMF0uY29sLCBydWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBUaGVyZSBzaG91bGQgYmUgbm8gc3ludGF4IGVycm9ycy4gKER1aC4pDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogImVycm9ycyIsDQogICAgbmFtZTogIlBhcnNpbmcgRXJyb3JzIiwNCiAgICBkZXNjOiAiVGhpcyBydWxlIGxvb2tzIGZvciByZWNvdmVyYWJsZSBzeW50YXggZXJyb3JzLiIsDQogICAgYnJvd3NlcnM6ICJBbGwiLA0KDQogICAgLy9pbml0aWFsaXphdGlvbg0KICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpew0KICAgICAgICB2YXIgcnVsZSA9IHRoaXM7DQoNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlcnJvciIsIGZ1bmN0aW9uKGV2ZW50KXsNCiAgICAgICAgICAgIHJlcG9ydGVyLmVycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmxpbmUsIGV2ZW50LmNvbCwgcnVsZSk7DQogICAgICAgIH0pOw0KDQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBZb3Ugc2hvdWxkbid0IHVzZSBtb3JlIHRoYW4gMTAgZmxvYXRzLiBJZiB5b3UgZG8sIHRoZXJlJ3MgcHJvYmFibHkNCiAqIHJvb20gZm9yIHNvbWUgYWJzdHJhY3Rpb24uDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogImZsb2F0cyIsDQogICAgbmFtZTogIkZsb2F0cyIsDQogICAgZGVzYzogIlRoaXMgcnVsZSB0ZXN0cyBpZiB0aGUgZmxvYXQgcHJvcGVydHkgaXMgdXNlZCB0b28gbWFueSB0aW1lcyIsDQogICAgYnJvd3NlcnM6ICJBbGwiLA0KDQogICAgLy9pbml0aWFsaXphdGlvbg0KICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpew0KICAgICAgICB2YXIgcnVsZSA9IHRoaXM7DQogICAgICAgIHZhciBjb3VudCA9IDA7DQoNCiAgICAgICAgLy9jb3VudCBob3cgbWFueSB0aW1lcyAiZmxvYXQiIGlzIHVzZWQNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsNCiAgICAgICAgICAgIGlmIChldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCkgPT0gImZsb2F0IiAmJg0KICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZS50ZXh0LnRvTG93ZXJDYXNlKCkgIT0gIm5vbmUiKXsNCiAgICAgICAgICAgICAgICBjb3VudCsrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICAvL3JlcG9ydCB0aGUgcmVzdWx0cw0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgcmVwb3J0ZXIuc3RhdCgiZmxvYXRzIiwgY291bnQpOw0KICAgICAgICAgICAgaWYgKGNvdW50ID49IDEwKXsNCiAgICAgICAgICAgICAgICByZXBvcnRlci5yb2xsdXBXYXJuKCJUb28gbWFueSBmbG9hdHMgKCIgKyBjb3VudCArICIpLCB5b3UncmUgcHJvYmFibHkgdXNpbmcgdGhlbSBmb3IgbGF5b3V0LiBDb25zaWRlciB1c2luZyBhIGdyaWQgc3lzdGVtIGluc3RlYWQuIiwgcnVsZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCg0KfSk7DQovKg0KICogUnVsZTogQXZvaWQgdG9vIG1hbnkgQGZvbnQtZmFjZSBkZWNsYXJhdGlvbnMgaW4gdGhlIHNhbWUgc3R5bGVzaGVldC4NCiAqLw0KQ1NTTGludC5hZGRSdWxlKHsNCg0KICAgIC8vcnVsZSBpbmZvcm1hdGlvbg0KICAgIGlkOiAiZm9udC1mYWNlcyIsDQogICAgbmFtZTogIkZvbnQgRmFjZXMiLA0KICAgIGRlc2M6ICJUb28gbWFueSBkaWZmZXJlbnQgd2ViIGZvbnRzIGluIHRoZSBzYW1lIHN0eWxlc2hlZXQuIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpcywNCiAgICAgICAgICAgIGNvdW50ID0gMDsNCg0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICBjb3VudCsrOw0KICAgICAgICB9KTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgaWYgKGNvdW50ID4gNSl7DQogICAgICAgICAgICAgICAgcmVwb3J0ZXIucm9sbHVwV2FybigiVG9vIG1hbnkgQGZvbnQtZmFjZSBkZWNsYXJhdGlvbnMgKCIgKyBjb3VudCArICIpLiIsIHJ1bGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQoNCn0pOw0KLyoNCiAqIFJ1bGU6IFlvdSBzaG91bGRuJ3QgbmVlZCBtb3JlIHRoYW4gOSBmb250LXNpemUgZGVjbGFyYXRpb25zLg0KICovDQoNCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogImZvbnQtc2l6ZXMiLA0KICAgIG5hbWU6ICJGb250IFNpemVzIiwNCiAgICBkZXNjOiAiQ2hlY2tzIHRoZSBudW1iZXIgb2YgZm9udC1zaXplIGRlY2xhcmF0aW9ucy4iLA0KICAgIGJyb3dzZXJzOiAiQWxsIiwNCg0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsNCiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLA0KICAgICAgICAgICAgY291bnQgPSAwOw0KDQogICAgICAgIC8vY2hlY2sgZm9yIHVzZSBvZiAiZm9udC1zaXplIg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgaWYgKGV2ZW50LnByb3BlcnR5ID09ICJmb250LXNpemUiKXsNCiAgICAgICAgICAgICAgICBjb3VudCsrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICAvL3JlcG9ydCB0aGUgcmVzdWx0cw0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgcmVwb3J0ZXIuc3RhdCgiZm9udC1zaXplcyIsIGNvdW50KTsNCiAgICAgICAgICAgIGlmIChjb3VudCA+PSAxMCl7DQogICAgICAgICAgICAgICAgcmVwb3J0ZXIucm9sbHVwV2FybigiVG9vIG1hbnkgZm9udC1zaXplIGRlY2xhcmF0aW9ucyAoIiArIGNvdW50ICsgIiksIGFic3RyYWN0aW9uIG5lZWRlZC4iLCBydWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBXaGVuIHVzaW5nIGEgdmVuZG9yLXByZWZpeGVkIGdyYWRpZW50LCBtYWtlIHN1cmUgdG8gdXNlIHRoZW0gYWxsLg0KICovDQpDU1NMaW50LmFkZFJ1bGUoew0KDQogICAgLy9ydWxlIGluZm9ybWF0aW9uDQogICAgaWQ6ICJncmFkaWVudHMiLA0KICAgIG5hbWU6ICJHcmFkaWVudHMiLA0KICAgIGRlc2M6ICJXaGVuIHVzaW5nIGEgdmVuZG9yLXByZWZpeGVkIGdyYWRpZW50LCBtYWtlIHN1cmUgdG8gdXNlIHRoZW0gYWxsLiIsDQogICAgYnJvd3NlcnM6ICJBbGwiLA0KDQogICAgLy9pbml0aWFsaXphdGlvbg0KICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpew0KICAgICAgICB2YXIgcnVsZSA9IHRoaXMsDQogICAgICAgICAgICBncmFkaWVudHM7DQoNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgZ3JhZGllbnRzID0gew0KICAgICAgICAgICAgICAgIG1vejogMCwNCiAgICAgICAgICAgICAgICB3ZWJraXQ6IDAsDQogICAgICAgICAgICAgICAgbXM6IDAsDQogICAgICAgICAgICAgICAgbzogMA0KICAgICAgICAgICAgfTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsNCg0KICAgICAgICAgICAgaWYgKC9cLShtb3p8bXN8b3x3ZWJraXQpKD86XC0oPzpsaW5lYXJ8cmFkaWFsKSlcLWdyYWRpZW50Ly50ZXN0KGV2ZW50LnZhbHVlKSl7DQogICAgICAgICAgICAgICAgZ3JhZGllbnRzW1JlZ0V4cC4kMV0gPSAxOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0pOw0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsIGZ1bmN0aW9uKGV2ZW50KXsNCiAgICAgICAgICAgIHZhciBtaXNzaW5nID0gW107DQoNCiAgICAgICAgICAgIGlmICghZ3JhZGllbnRzLm1veil7DQogICAgICAgICAgICAgICAgbWlzc2luZy5wdXNoKCJGaXJlZm94IDMuNisiKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKCFncmFkaWVudHMud2Via2l0KXsNCiAgICAgICAgICAgICAgICBtaXNzaW5nLnB1c2goIldlYmtpdCAoU2FmYXJpLCBDaHJvbWUpIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICghZ3JhZGllbnRzLm1zKXsNCiAgICAgICAgICAgICAgICBtaXNzaW5nLnB1c2goIkludGVybmV0IEV4cGxvcmVyIDEwKyIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIWdyYWRpZW50cy5vKXsNCiAgICAgICAgICAgICAgICBtaXNzaW5nLnB1c2goIk9wZXJhIDExLjErIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCAmJiBtaXNzaW5nLmxlbmd0aCA8IDQpeyAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIk1pc3NpbmcgdmVuZG9yLXByZWZpeGVkIENTUyBncmFkaWVudHMgZm9yICIgKyBtaXNzaW5nLmpvaW4oIiwgIikgKyAiLiIsIGV2ZW50LnNlbGVjdG9yc1swXS5saW5lLCBldmVudC5zZWxlY3RvcnNbMF0uY29sLCBydWxlKTsgDQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSk7DQoNCiAgICB9DQoNCn0pOw0KLyoNCiAqIFJ1bGU6IERvbid0IHVzZSBJRHMgZm9yIHNlbGVjdG9ycy4NCiAqLw0KQ1NTTGludC5hZGRSdWxlKHsNCg0KICAgIC8vcnVsZSBpbmZvcm1hdGlvbg0KICAgIGlkOiAiaWRzIiwNCiAgICBuYW1lOiAiSURzIiwNCiAgICBkZXNjOiAiU2VsZWN0b3JzIHNob3VsZCBub3QgY29udGFpbiBJRHMuIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpczsNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbihldmVudCl7DQogICAgICAgICAgICB2YXIgc2VsZWN0b3JzID0gZXZlbnQuc2VsZWN0b3JzLA0KICAgICAgICAgICAgICAgIHNlbGVjdG9yLA0KICAgICAgICAgICAgICAgIHBhcnQsDQogICAgICAgICAgICAgICAgbW9kaWZpZXIsDQogICAgICAgICAgICAgICAgaWRDb3VudCwNCiAgICAgICAgICAgICAgICBpLCBqLCBrOw0KDQogICAgICAgICAgICBmb3IgKGk9MDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKyl7DQogICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07DQogICAgICAgICAgICAgICAgaWRDb3VudCA9IDA7DQoNCiAgICAgICAgICAgICAgICBmb3IgKGo9MDsgaiA8IHNlbGVjdG9yLnBhcnRzLmxlbmd0aDsgaisrKXsNCiAgICAgICAgICAgICAgICAgICAgcGFydCA9IHNlbGVjdG9yLnBhcnRzW2pdOw0KICAgICAgICAgICAgICAgICAgICBpZiAocGFydCBpbnN0YW5jZW9mIHBhcnNlcmxpYi5jc3MuU2VsZWN0b3JQYXJ0KXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaz0wOyBrIDwgcGFydC5tb2RpZmllcnMubGVuZ3RoOyBrKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gcGFydC5tb2RpZmllcnNba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyLnR5cGUgPT0gImlkIil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQ291bnQrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoaWRDb3VudCA9PSAxKXsNCiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiRG9uJ3QgdXNlIElEcyBpbiBzZWxlY3RvcnMuIiwgc2VsZWN0b3IubGluZSwgc2VsZWN0b3IuY29sLCBydWxlKTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlkQ291bnQgPiAxKXsNCiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybihpZENvdW50ICsgIiBJRHMgaW4gdGhlIHNlbGVjdG9yLCByZWFsbHk/Iiwgc2VsZWN0b3IubGluZSwgc2VsZWN0b3IuY29sLCBydWxlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSk7DQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBEb24ndCB1c2UgQGltcG9ydCwgdXNlIDxsaW5rPiBpbnN0ZWFkLg0KICovDQpDU1NMaW50LmFkZFJ1bGUoew0KDQogICAgLy9ydWxlIGluZm9ybWF0aW9uDQogICAgaWQ6ICJpbXBvcnQiLA0KICAgIG5hbWU6ICJAaW1wb3J0IiwNCiAgICBkZXNjOiAiRG9uJ3QgdXNlIEBpbXBvcnQsIHVzZSA8bGluaz4gaW5zdGVhZC4iLA0KICAgIGJyb3dzZXJzOiAiQWxsIiwNCg0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsNCiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOw0KICAgICAgICANCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJpbXBvcnQiLCBmdW5jdGlvbihldmVudCl7ICAgICAgICANCiAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIkBpbXBvcnQgcHJldmVudHMgcGFyYWxsZWwgZG93bmxvYWRzLCB1c2UgPGxpbms+IGluc3RlYWQuIiwgZXZlbnQubGluZSwgZXZlbnQuY29sLCBydWxlKTsNCiAgICAgICAgfSk7DQoNCiAgICB9DQoNCn0pOw0KLyoNCiAqIFJ1bGU6IE1ha2Ugc3VyZSAhaW1wb3J0YW50IGlzIG5vdCBvdmVydXNlZCwgdGhpcyBjb3VsZCBsZWFkIHRvIHNwZWNpZmljaXR5DQogKiB3YXIuIERpc3BsYXkgYSB3YXJuaW5nIG9uICFpbXBvcnRhbnQgZGVjbGFyYXRpb25zLCBhbiBlcnJvciBpZiBpdCdzDQogKiB1c2VkIG1vcmUgYXQgbGVhc3QgMTAgdGltZXMuDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogImltcG9ydGFudCIsDQogICAgbmFtZTogIkltcG9ydGFudCIsDQogICAgZGVzYzogIkJlIGNhcmVmdWwgd2hlbiB1c2luZyAhaW1wb3J0YW50IGRlY2xhcmF0aW9uIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpcywNCiAgICAgICAgICAgIGNvdW50ID0gMDsNCg0KICAgICAgICAvL3dhcm4gdGhhdCBpbXBvcnRhbnQgaXMgdXNlZCBhbmQgaW5jcmVtZW50IHRoZSBkZWNsYXJhdGlvbiBjb3VudGVyDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7DQogICAgICAgICAgICBpZiAoZXZlbnQuaW1wb3J0YW50ID09PSB0cnVlKXsNCiAgICAgICAgICAgICAgICBjb3VudCsrOw0KICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIlVzZSBvZiAhaW1wb3J0YW50IiwgZXZlbnQubGluZSwgZXZlbnQuY29sLCBydWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgLy9pZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDEwLCBzaG93IGFuIGVycm9yDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kc3R5bGVzaGVldCIsIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICByZXBvcnRlci5zdGF0KCJpbXBvcnRhbnQiLCBjb3VudCk7DQogICAgICAgICAgICBpZiAoY291bnQgPj0gMTApew0KICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJvbGx1cFdhcm4oIlRvbyBtYW55ICFpbXBvcnRhbnQgZGVjbGFyYXRpb25zICgiICsgY291bnQgKyAiKSwgdHJ5IHRvIHVzZSBsZXNzIHRoYW4gMTAgdG8gYXZvaWQgc3BlY2lmaXR5IGlzc3Vlcy4iLCBydWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBQcm9wZXJ0aWVzIHNob3VsZCBiZSBrbm93biAobGlzdGVkIGluIENTUzMgc3BlY2lmaWNhdGlvbikgb3INCiAqIGJlIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5Lg0KICovDQpDU1NMaW50LmFkZFJ1bGUoew0KDQogICAgLy9ydWxlIGluZm9ybWF0aW9uDQogICAgaWQ6ICJrbm93bi1wcm9wZXJ0aWVzIiwNCiAgICBuYW1lOiAiS25vd24gUHJvcGVydGllcyIsDQogICAgZGVzYzogIlByb3BlcnRpZXMgc2hvdWxkIGJlIGtub3duIChsaXN0ZWQgaW4gQ1NTIHNwZWNpZmljYXRpb24pIG9yIGJlIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5LiIsDQogICAgYnJvd3NlcnM6ICJBbGwiLA0KDQogICAgLy9pbml0aWFsaXphdGlvbg0KICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpew0KICAgICAgICB2YXIgcnVsZSA9IHRoaXMsDQogICAgICAgICAgICBwcm9wZXJ0aWVzID0gew0KDQogICAgICAgICAgICAgICAgImFsaWdubWVudC1hZGp1c3QiOiAxLA0KICAgICAgICAgICAgICAgICJhbGlnbm1lbnQtYmFzZWxpbmUiOiAxLA0KICAgICAgICAgICAgICAgICJhbmltYXRpb24iOiAxLA0KICAgICAgICAgICAgICAgICJhbmltYXRpb24tZGVsYXkiOiAxLA0KICAgICAgICAgICAgICAgICJhbmltYXRpb24tZGlyZWN0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAiYW5pbWF0aW9uLWR1cmF0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCI6IDEsDQogICAgICAgICAgICAgICAgImFuaW1hdGlvbi1uYW1lIjogMSwNCiAgICAgICAgICAgICAgICAiYW5pbWF0aW9uLXBsYXktc3RhdGUiOiAxLA0KICAgICAgICAgICAgICAgICJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAiYXBwZWFyYW5jZSI6IDEsDQogICAgICAgICAgICAgICAgImF6aW11dGgiOiAxLA0KICAgICAgICAgICAgICAgICJiYWNrZmFjZS12aXNpYmlsaXR5IjogMSwNCiAgICAgICAgICAgICAgICAiYmFja2dyb3VuZCI6IDEsDQogICAgICAgICAgICAgICAgImJhY2tncm91bmQtYXR0YWNobWVudCI6IDEsDQogICAgICAgICAgICAgICAgImJhY2tncm91bmQtYnJlYWsiOiAxLA0KICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWNsaXAiOiAxLA0KICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWNvbG9yIjogMSwNCiAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFnZSI6IDEsDQogICAgICAgICAgICAgICAgImJhY2tncm91bmQtb3JpZ2luIjogMSwNCiAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IDEsDQogICAgICAgICAgICAgICAgImJhY2tncm91bmQtcmVwZWF0IjogMSwNCiAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1zaXplIjogMSwNCiAgICAgICAgICAgICAgICAiYmFzZWxpbmUtc2hpZnQiOiAxLA0KICAgICAgICAgICAgICAgICJiaW5kaW5nIjogMSwNCiAgICAgICAgICAgICAgICAiYmxlZWQiOiAxLA0KICAgICAgICAgICAgICAgICJib29rbWFyay1sYWJlbCI6IDEsDQogICAgICAgICAgICAgICAgImJvb2ttYXJrLWxldmVsIjogMSwNCiAgICAgICAgICAgICAgICAiYm9va21hcmstc3RhdGUiOiAxLA0KICAgICAgICAgICAgICAgICJib29rbWFyay10YXJnZXQiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXIiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItYm90dG9tIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLWJvdHRvbS1jb2xvciI6IDEsDQogICAgICAgICAgICAgICAgImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyI6IDEsDQogICAgICAgICAgICAgICAgImJvcmRlci1ib3R0b20tc3R5bGUiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItYm90dG9tLXdpZHRoIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLWNvbGxhcHNlIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLWNvbG9yIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLWltYWdlIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLWltYWdlLW91dHNldCI6IDEsDQogICAgICAgICAgICAgICAgImJvcmRlci1pbWFnZS1yZXBlYXQiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItaW1hZ2Utc2xpY2UiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItaW1hZ2Utc291cmNlIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLWltYWdlLXdpZHRoIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLWxlZnQiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItbGVmdC1jb2xvciI6IDEsDQogICAgICAgICAgICAgICAgImJvcmRlci1sZWZ0LXN0eWxlIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLWxlZnQtd2lkdGgiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItcmFkaXVzIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXJpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXJpZ2h0LWNvbG9yIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXJpZ2h0LXN0eWxlIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXJpZ2h0LXdpZHRoIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXNwYWNpbmciOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItc3R5bGUiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItdG9wIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXRvcC1jb2xvciI6IDEsDQogICAgICAgICAgICAgICAgImJvcmRlci10b3AtbGVmdC1yYWRpdXMiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsDQogICAgICAgICAgICAgICAgImJvcmRlci10b3Atc3R5bGUiOiAxLA0KICAgICAgICAgICAgICAgICJib3JkZXItdG9wLXdpZHRoIjogMSwNCiAgICAgICAgICAgICAgICAiYm9yZGVyLXdpZHRoIjogMSwNCiAgICAgICAgICAgICAgICAiYm90dG9tIjogMSwgDQogICAgICAgICAgICAgICAgImJveC1hbGlnbiI6IDEsDQogICAgICAgICAgICAgICAgImJveC1kZWNvcmF0aW9uLWJyZWFrIjogMSwNCiAgICAgICAgICAgICAgICAiYm94LWRpcmVjdGlvbiI6IDEsDQogICAgICAgICAgICAgICAgImJveC1mbGV4IjogMSwNCiAgICAgICAgICAgICAgICAiYm94LWZsZXgtZ3JvdXAiOiAxLA0KICAgICAgICAgICAgICAgICJib3gtbGluZXMiOiAxLA0KICAgICAgICAgICAgICAgICJib3gtb3JkaW5hbC1ncm91cCI6IDEsDQogICAgICAgICAgICAgICAgImJveC1vcmllbnQiOiAxLA0KICAgICAgICAgICAgICAgICJib3gtcGFjayI6IDEsDQogICAgICAgICAgICAgICAgImJveC1zaGFkb3ciOiAxLA0KICAgICAgICAgICAgICAgICJib3gtc2l6aW5nIjogMSwNCiAgICAgICAgICAgICAgICAiYnJlYWstYWZ0ZXIiOiAxLA0KICAgICAgICAgICAgICAgICJicmVhay1iZWZvcmUiOiAxLA0KICAgICAgICAgICAgICAgICJicmVhay1pbnNpZGUiOiAxLA0KICAgICAgICAgICAgICAgICJjYXB0aW9uLXNpZGUiOiAxLA0KICAgICAgICAgICAgICAgICJjbGVhciI6IDEsDQogICAgICAgICAgICAgICAgImNsaXAiOiAxLA0KICAgICAgICAgICAgICAgICJjb2xvciI6IDEsDQogICAgICAgICAgICAgICAgImNvbG9yLXByb2ZpbGUiOiAxLA0KICAgICAgICAgICAgICAgICJjb2x1bW4tY291bnQiOiAxLA0KICAgICAgICAgICAgICAgICJjb2x1bW4tZmlsbCI6IDEsDQogICAgICAgICAgICAgICAgImNvbHVtbi1nYXAiOiAxLA0KICAgICAgICAgICAgICAgICJjb2x1bW4tcnVsZSI6IDEsDQogICAgICAgICAgICAgICAgImNvbHVtbi1ydWxlLWNvbG9yIjogMSwNCiAgICAgICAgICAgICAgICAiY29sdW1uLXJ1bGUtc3R5bGUiOiAxLA0KICAgICAgICAgICAgICAgICJjb2x1bW4tcnVsZS13aWR0aCI6IDEsDQogICAgICAgICAgICAgICAgImNvbHVtbi1zcGFuIjogMSwNCiAgICAgICAgICAgICAgICAiY29sdW1uLXdpZHRoIjogMSwNCiAgICAgICAgICAgICAgICAiY29sdW1ucyI6IDEsDQogICAgICAgICAgICAgICAgImNvbnRlbnQiOiAxLA0KICAgICAgICAgICAgICAgICJjb3VudGVyLWluY3JlbWVudCI6IDEsDQogICAgICAgICAgICAgICAgImNvdW50ZXItcmVzZXQiOiAxLA0KICAgICAgICAgICAgICAgICJjcm9wIjogMSwNCiAgICAgICAgICAgICAgICAiY3VlIjogMSwNCiAgICAgICAgICAgICAgICAiY3VlLWFmdGVyIjogMSwNCiAgICAgICAgICAgICAgICAiY3VlLWJlZm9yZSI6IDEsDQogICAgICAgICAgICAgICAgImN1cnNvciI6IDEsDQogICAgICAgICAgICAgICAgImRpcmVjdGlvbiI6IDEsDQogICAgICAgICAgICAgICAgImRpc3BsYXkiOiAxLA0KICAgICAgICAgICAgICAgICJkb21pbmFudC1iYXNlbGluZSI6IDEsDQogICAgICAgICAgICAgICAgImRyb3AtaW5pdGlhbC1hZnRlci1hZGp1c3QiOiAxLA0KICAgICAgICAgICAgICAgICJkcm9wLWluaXRpYWwtYWZ0ZXItYWxpZ24iOiAxLA0KICAgICAgICAgICAgICAgICJkcm9wLWluaXRpYWwtYmVmb3JlLWFkanVzdCI6IDEsDQogICAgICAgICAgICAgICAgImRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ24iOiAxLA0KICAgICAgICAgICAgICAgICJkcm9wLWluaXRpYWwtc2l6ZSI6IDEsDQogICAgICAgICAgICAgICAgImRyb3AtaW5pdGlhbC12YWx1ZSI6IDEsDQogICAgICAgICAgICAgICAgImVsZXZhdGlvbiI6IDEsDQogICAgICAgICAgICAgICAgImVtcHR5LWNlbGxzIjogMSwNCiAgICAgICAgICAgICAgICAiZml0IjogMSwNCiAgICAgICAgICAgICAgICAiZml0LXBvc2l0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAiZmxvYXQiOiAxLCAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAiZmxvYXQtb2Zmc2V0IjogMSwNCiAgICAgICAgICAgICAgICAiZm9udCI6IDEsDQogICAgICAgICAgICAgICAgImZvbnQtZmFtaWx5IjogMSwNCiAgICAgICAgICAgICAgICAiZm9udC1zaXplIjogMSwNCiAgICAgICAgICAgICAgICAiZm9udC1zaXplLWFkanVzdCI6IDEsDQogICAgICAgICAgICAgICAgImZvbnQtc3RyZXRjaCI6IDEsDQogICAgICAgICAgICAgICAgImZvbnQtc3R5bGUiOiAxLA0KICAgICAgICAgICAgICAgICJmb250LXZhcmlhbnQiOiAxLA0KICAgICAgICAgICAgICAgICJmb250LXdlaWdodCI6IDEsDQogICAgICAgICAgICAgICAgImdyaWQtY29sdW1ucyI6IDEsDQogICAgICAgICAgICAgICAgImdyaWQtcm93cyI6IDEsDQogICAgICAgICAgICAgICAgImhhbmdpbmctcHVuY3R1YXRpb24iOiAxLA0KICAgICAgICAgICAgICAgICJoZWlnaHQiOiAxLA0KICAgICAgICAgICAgICAgICJoeXBoZW5hdGUtYWZ0ZXIiOiAxLA0KICAgICAgICAgICAgICAgICJoeXBoZW5hdGUtYmVmb3JlIjogMSwNCiAgICAgICAgICAgICAgICAiaHlwaGVuYXRlLWNoYXJhY3RlciI6IDEsDQogICAgICAgICAgICAgICAgImh5cGhlbmF0ZS1saW5lcyI6IDEsDQogICAgICAgICAgICAgICAgImh5cGhlbmF0ZS1yZXNvdXJjZSI6IDEsDQogICAgICAgICAgICAgICAgImh5cGhlbnMiOiAxLA0KICAgICAgICAgICAgICAgICJpY29uIjogMSwNCiAgICAgICAgICAgICAgICAiaW1hZ2Utb3JpZW50YXRpb24iOiAxLA0KICAgICAgICAgICAgICAgICJpbWFnZS1yZW5kZXJpbmciOiAxLA0KICAgICAgICAgICAgICAgICJpbWFnZS1yZXNvbHV0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAiaW5saW5lLWJveC1hbGlnbiI6IDEsDQogICAgICAgICAgICAgICAgImxlZnQiOiAxLA0KICAgICAgICAgICAgICAgICJsZXR0ZXItc3BhY2luZyI6IDEsDQogICAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICAibGluZS1zdGFja2luZyI6IDEsDQogICAgICAgICAgICAgICAgImxpbmUtc3RhY2tpbmctcnVieSI6IDEsDQogICAgICAgICAgICAgICAgImxpbmUtc3RhY2tpbmctc2hpZnQiOiAxLA0KICAgICAgICAgICAgICAgICJsaW5lLXN0YWNraW5nLXN0cmF0ZWd5IjogMSwNCiAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6IDEsDQogICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUtaW1hZ2UiOiAxLA0KICAgICAgICAgICAgICAgICJsaXN0LXN0eWxlLXBvc2l0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAibGlzdC1zdHlsZS10eXBlIjogMSwNCiAgICAgICAgICAgICAgICAibWFyZ2luIjogMSwNCiAgICAgICAgICAgICAgICAibWFyZ2luLWJvdHRvbSI6IDEsDQogICAgICAgICAgICAgICAgIm1hcmdpbi1sZWZ0IjogMSwNCiAgICAgICAgICAgICAgICAibWFyZ2luLXJpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICAibWFyZ2luLXRvcCI6IDEsDQogICAgICAgICAgICAgICAgIm1hcmsiOiAxLA0KICAgICAgICAgICAgICAgICJtYXJrLWFmdGVyIjogMSwNCiAgICAgICAgICAgICAgICAibWFyay1iZWZvcmUiOiAxLA0KICAgICAgICAgICAgICAgICJtYXJrcyI6IDEsDQogICAgICAgICAgICAgICAgIm1hcnF1ZWUtZGlyZWN0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAibWFycXVlZS1wbGF5LWNvdW50IjogMSwNCiAgICAgICAgICAgICAgICAibWFycXVlZS1zcGVlZCI6IDEsDQogICAgICAgICAgICAgICAgIm1hcnF1ZWUtc3R5bGUiOiAxLA0KICAgICAgICAgICAgICAgICJtYXgtaGVpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICAibWF4LXdpZHRoIjogMSwNCiAgICAgICAgICAgICAgICAibWluLWhlaWdodCI6IDEsDQogICAgICAgICAgICAgICAgIm1pbi13aWR0aCI6IDEsDQogICAgICAgICAgICAgICAgIm1vdmUtdG8iOiAxLA0KICAgICAgICAgICAgICAgICJuYXYtZG93biI6IDEsDQogICAgICAgICAgICAgICAgIm5hdi1pbmRleCI6IDEsDQogICAgICAgICAgICAgICAgIm5hdi1sZWZ0IjogMSwNCiAgICAgICAgICAgICAgICAibmF2LXJpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICAibmF2LXVwIjogMSwNCiAgICAgICAgICAgICAgICAib3BhY2l0eSI6IDEsDQogICAgICAgICAgICAgICAgIm9ycGhhbnMiOiAxLA0KICAgICAgICAgICAgICAgICJvdXRsaW5lIjogMSwNCiAgICAgICAgICAgICAgICAib3V0bGluZS1jb2xvciI6IDEsDQogICAgICAgICAgICAgICAgIm91dGxpbmUtb2Zmc2V0IjogMSwNCiAgICAgICAgICAgICAgICAib3V0bGluZS1zdHlsZSI6IDEsDQogICAgICAgICAgICAgICAgIm91dGxpbmUtd2lkdGgiOiAxLA0KICAgICAgICAgICAgICAgICJvdmVyZmxvdyI6IDEsDQogICAgICAgICAgICAgICAgIm92ZXJmbG93LXN0eWxlIjogMSwNCiAgICAgICAgICAgICAgICAib3ZlcmZsb3cteCI6IDEsDQogICAgICAgICAgICAgICAgIm92ZXJmbG93LXkiOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nIjogMSwNCiAgICAgICAgICAgICAgICAicGFkZGluZy1ib3R0b20iOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nLWxlZnQiOiAxLA0KICAgICAgICAgICAgICAgICJwYWRkaW5nLXJpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICAicGFkZGluZy10b3AiOiAxLA0KICAgICAgICAgICAgICAgICJwYWdlIjogMSwNCiAgICAgICAgICAgICAgICAicGFnZS1icmVhay1hZnRlciI6IDEsDQogICAgICAgICAgICAgICAgInBhZ2UtYnJlYWstYmVmb3JlIjogMSwNCiAgICAgICAgICAgICAgICAicGFnZS1icmVhay1pbnNpZGUiOiAxLA0KICAgICAgICAgICAgICAgICJwYWdlLXBvbGljeSI6IDEsDQogICAgICAgICAgICAgICAgInBhdXNlIjogMSwNCiAgICAgICAgICAgICAgICAicGF1c2UtYWZ0ZXIiOiAxLA0KICAgICAgICAgICAgICAgICJwYXVzZS1iZWZvcmUiOiAxLA0KICAgICAgICAgICAgICAgICJwZXJzcGVjdGl2ZSI6IDEsDQogICAgICAgICAgICAgICAgInBlcnNwZWN0aXZlLW9yaWdpbiI6IDEsDQogICAgICAgICAgICAgICAgInBob25lbWVzIjogMSwNCiAgICAgICAgICAgICAgICAicGl0Y2giOiAxLA0KICAgICAgICAgICAgICAgICJwaXRjaC1yYW5nZSI6IDEsDQogICAgICAgICAgICAgICAgInBsYXktZHVyaW5nIjogMSwNCiAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAxLA0KICAgICAgICAgICAgICAgICJwcmVzZW50YXRpb24tbGV2ZWwiOiAxLA0KICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi10cmltIjogMSwNCiAgICAgICAgICAgICAgICAicXVvdGVzIjogMSwNCiAgICAgICAgICAgICAgICAicmVuZGVyaW5nLWludGVudCI6IDEsDQogICAgICAgICAgICAgICAgInJlc2l6ZSI6IDEsDQogICAgICAgICAgICAgICAgInJlc3QiOiAxLA0KICAgICAgICAgICAgICAgICJyZXN0LWFmdGVyIjogMSwNCiAgICAgICAgICAgICAgICAicmVzdC1iZWZvcmUiOiAxLA0KICAgICAgICAgICAgICAgICJyaWNobmVzcyI6IDEsDQogICAgICAgICAgICAgICAgInJpZ2h0IjogMSwNCiAgICAgICAgICAgICAgICAicm90YXRpb24iOiAxLA0KICAgICAgICAgICAgICAgICJyb3RhdGlvbi1wb2ludCI6IDEsDQogICAgICAgICAgICAgICAgInJ1YnktYWxpZ24iOiAxLA0KICAgICAgICAgICAgICAgICJydWJ5LW92ZXJoYW5nIjogMSwNCiAgICAgICAgICAgICAgICAicnVieS1wb3NpdGlvbiI6IDEsDQogICAgICAgICAgICAgICAgInJ1Ynktc3BhbiI6IDEsDQogICAgICAgICAgICAgICAgInNpemUiOiAxLA0KICAgICAgICAgICAgICAgICJzcGVhayI6IDEsDQogICAgICAgICAgICAgICAgInNwZWFrLWhlYWRlciI6IDEsDQogICAgICAgICAgICAgICAgInNwZWFrLW51bWVyYWwiOiAxLA0KICAgICAgICAgICAgICAgICJzcGVhay1wdW5jdHVhdGlvbiI6IDEsDQogICAgICAgICAgICAgICAgInNwZWVjaC1yYXRlIjogMSwNCiAgICAgICAgICAgICAgICAic3RyZXNzIjogMSwNCiAgICAgICAgICAgICAgICAic3RyaW5nLXNldCI6IDEsDQogICAgICAgICAgICAgICAgInRhYmxlLWxheW91dCI6IDEsDQogICAgICAgICAgICAgICAgInRhcmdldCI6IDEsDQogICAgICAgICAgICAgICAgInRhcmdldC1uYW1lIjogMSwNCiAgICAgICAgICAgICAgICAidGFyZ2V0LW5ldyI6IDEsDQogICAgICAgICAgICAgICAgInRhcmdldC1wb3NpdGlvbiI6IDEsDQogICAgICAgICAgICAgICAgInRleHQtYWxpZ24iOiAxLA0KICAgICAgICAgICAgICAgICJ0ZXh0LWFsaWduLWxhc3QiOiAxLA0KICAgICAgICAgICAgICAgICJ0ZXh0LWRlY29yYXRpb24iOiAxLA0KICAgICAgICAgICAgICAgICJ0ZXh0LWVtcGhhc2lzIjogMSwNCiAgICAgICAgICAgICAgICAidGV4dC1oZWlnaHQiOiAxLA0KICAgICAgICAgICAgICAgICJ0ZXh0LWluZGVudCI6IDEsDQogICAgICAgICAgICAgICAgInRleHQtanVzdGlmeSI6IDEsDQogICAgICAgICAgICAgICAgInRleHQtb3V0bGluZSI6IDEsDQogICAgICAgICAgICAgICAgInRleHQtc2hhZG93IjogMSwNCiAgICAgICAgICAgICAgICAidGV4dC10cmFuc2Zvcm0iOiAxLA0KICAgICAgICAgICAgICAgICJ0ZXh0LXdyYXAiOiAxLA0KICAgICAgICAgICAgICAgICJ0b3AiOiAxLA0KICAgICAgICAgICAgICAgICJ0cmFuc2Zvcm0iOiAxLA0KICAgICAgICAgICAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIjogMSwNCiAgICAgICAgICAgICAgICAidHJhbnNmb3JtLXN0eWxlIjogMSwNCiAgICAgICAgICAgICAgICAidHJhbnNpdGlvbiI6IDEsDQogICAgICAgICAgICAgICAgInRyYW5zaXRpb24tZGVsYXkiOiAxLA0KICAgICAgICAgICAgICAgICJ0cmFuc2l0aW9uLWR1cmF0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAidHJhbnNpdGlvbi1wcm9wZXJ0eSI6IDEsDQogICAgICAgICAgICAgICAgInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAidW5pY29kZS1iaWRpIjogMSwNCiAgICAgICAgICAgICAgICAidmVydGljYWwtYWxpZ24iOiAxLA0KICAgICAgICAgICAgICAgICJ2aXNpYmlsaXR5IjogMSwNCiAgICAgICAgICAgICAgICAidm9pY2UtYmFsYW5jZSI6IDEsDQogICAgICAgICAgICAgICAgInZvaWNlLWR1cmF0aW9uIjogMSwNCiAgICAgICAgICAgICAgICAidm9pY2UtZmFtaWx5IjogMSwNCiAgICAgICAgICAgICAgICAidm9pY2UtcGl0Y2giOiAxLA0KICAgICAgICAgICAgICAgICJ2b2ljZS1waXRjaC1yYW5nZSI6IDEsDQogICAgICAgICAgICAgICAgInZvaWNlLXJhdGUiOiAxLA0KICAgICAgICAgICAgICAgICJ2b2ljZS1zdHJlc3MiOiAxLA0KICAgICAgICAgICAgICAgICJ2b2ljZS12b2x1bWUiOiAxLA0KICAgICAgICAgICAgICAgICJ2b2x1bWUiOiAxLA0KICAgICAgICAgICAgICAgICJ3aGl0ZS1zcGFjZSI6IDEsDQogICAgICAgICAgICAgICAgIndoaXRlLXNwYWNlLWNvbGxhcHNlIjogMSwNCiAgICAgICAgICAgICAgICAid2lkb3dzIjogMSwNCiAgICAgICAgICAgICAgICAid2lkdGgiOiAxLA0KICAgICAgICAgICAgICAgICJ3b3JkLWJyZWFrIjogMSwNCiAgICAgICAgICAgICAgICAid29yZC1zcGFjaW5nIjogMSwNCiAgICAgICAgICAgICAgICAid29yZC13cmFwIjogMSwNCiAgICAgICAgICAgICAgICAiei1pbmRleCI6IDEsDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgLy9JRQ0KICAgICAgICAgICAgICAgICJmaWx0ZXIiOiAxLA0KICAgICAgICAgICAgICAgICJ6b29tIjogMQ0KICAgICAgICAgICAgfTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7DQoNCiAgICAgICAgICAgIGlmICghcHJvcGVydGllc1tuYW1lXSAmJiBuYW1lLmNoYXJBdCgwKSAhPSAiLSIpew0KICAgICAgICAgICAgICAgIHJlcG9ydGVyLmVycm9yKCJVbmtub3duIHByb3BlcnR5ICciICsgZXZlbnQucHJvcGVydHkgKyAiJy4iLCBldmVudC5saW5lLCBldmVudC5jb2wsIHJ1bGUpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0pOw0KICAgIH0NCg0KfSk7DQovKg0KICogUnVsZTogRG9uJ3QgdXNlIGNsYXNzZXMgb3IgSURzIHdpdGggZWxlbWVudHMgKGEuZm9vIG9yIGEjZm9vKS4NCiAqLw0KQ1NTTGludC5hZGRSdWxlKHsNCg0KICAgIC8vcnVsZSBpbmZvcm1hdGlvbg0KICAgIGlkOiAib3ZlcnF1YWxpZmllZC1lbGVtZW50cyIsDQogICAgbmFtZTogIk92ZXJxdWFsaWZpZWQgRWxlbWVudHMiLA0KICAgIGRlc2M6ICJEb24ndCB1c2UgY2xhc3NlcyBvciBJRHMgd2l0aCBlbGVtZW50cyAoYS5mb28gb3IgYSNmb28pLiIsDQogICAgYnJvd3NlcnM6ICJBbGwiLA0KDQogICAgLy9pbml0aWFsaXphdGlvbg0KICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpew0KICAgICAgICB2YXIgcnVsZSA9IHRoaXMsDQogICAgICAgICAgICBjbGFzc2VzID0ge307DQogICAgICAgICAgICANCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbihldmVudCl7DQogICAgICAgICAgICB2YXIgc2VsZWN0b3JzID0gZXZlbnQuc2VsZWN0b3JzLA0KICAgICAgICAgICAgICAgIHNlbGVjdG9yLA0KICAgICAgICAgICAgICAgIHBhcnQsDQogICAgICAgICAgICAgICAgbW9kaWZpZXIsDQogICAgICAgICAgICAgICAgaSwgaiwgazsNCg0KICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBzZWxlY3RvcnMubGVuZ3RoOyBpKyspew0KICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldOw0KDQogICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBzZWxlY3Rvci5wYXJ0cy5sZW5ndGg7IGorKyl7DQogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxlY3Rvci5wYXJ0c1tqXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBwYXJzZXJsaWIuY3NzLlNlbGVjdG9yUGFydCl7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGs9MDsgayA8IHBhcnQubW9kaWZpZXJzLmxlbmd0aDsgaysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllciA9IHBhcnQubW9kaWZpZXJzW2tdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LmVsZW1lbnROYW1lICYmIG1vZGlmaWVyLnR5cGUgPT0gImlkIil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIkVsZW1lbnQgKCIgKyBwYXJ0ICsgIikgaXMgb3ZlcnF1YWxpZmllZCwganVzdCB1c2UgIiArIG1vZGlmaWVyICsgIiB3aXRob3V0IGVsZW1lbnQgbmFtZS4iLCBwYXJ0LmxpbmUsIHBhcnQuY29sLCBydWxlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGlmaWVyLnR5cGUgPT0gImNsYXNzIil7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYXNzZXNbbW9kaWZpZXJdKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXNbbW9kaWZpZXJdID0gW107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1ttb2RpZmllcl0ucHVzaCh7IG1vZGlmaWVyOiBtb2RpZmllciwgcGFydDogcGFydCB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICANCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRzdHlsZXNoZWV0IiwgZnVuY3Rpb24oKXsNCiAgICAgICAgDQogICAgICAgICAgICB2YXIgcHJvcDsNCiAgICAgICAgICAgIGZvciAocHJvcCBpbiBjbGFzc2VzKXsNCiAgICAgICAgICAgICAgICBpZiAoY2xhc3Nlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSl7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIC8vb25lIHVzZSBtZWFucyB0aGF0IHRoaXMgaXMgb3ZlcnF1YWxpZmllZA0KICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3Nlc1twcm9wXS5sZW5ndGggPT0gMSAmJiBjbGFzc2VzW3Byb3BdWzBdLnBhcnQuZWxlbWVudE5hbWUpew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiRWxlbWVudCAoIiArIGNsYXNzZXNbcHJvcF1bMF0ucGFydCArICIpIGlzIG92ZXJxdWFsaWZpZWQsIGp1c3QgdXNlICIgKyBjbGFzc2VzW3Byb3BdWzBdLm1vZGlmaWVyICsgIiB3aXRob3V0IGVsZW1lbnQgbmFtZS4iLCBjbGFzc2VzW3Byb3BdWzBdLnBhcnQubGluZSwgY2xhc3Nlc1twcm9wXVswXS5wYXJ0LmNvbCwgcnVsZSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9ICAgICAgICANCiAgICAgICAgfSk7DQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBIZWFkaW5ncyAoaDEtaDYpIHNob3VsZCBub3QgYmUgcXVhbGlmaWVkIChuYW1lc3BhY2VkKS4NCiAqLw0KQ1NTTGludC5hZGRSdWxlKHsNCg0KICAgIC8vcnVsZSBpbmZvcm1hdGlvbg0KICAgIGlkOiAicXVhbGlmaWVkLWhlYWRpbmdzIiwNCiAgICBuYW1lOiAiUXVhbGlmaWVkIEhlYWRpbmdzIiwNCiAgICBkZXNjOiAiSGVhZGluZ3Mgc2hvdWxkIG5vdCBiZSBxdWFsaWZpZWQgKG5hbWVzcGFjZWQpLiIsDQogICAgYnJvd3NlcnM6ICJBbGwiLA0KDQogICAgLy9pbml0aWFsaXphdGlvbg0KICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpew0KICAgICAgICB2YXIgcnVsZSA9IHRoaXM7DQoNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbihldmVudCl7DQogICAgICAgICAgICB2YXIgc2VsZWN0b3JzID0gZXZlbnQuc2VsZWN0b3JzLA0KICAgICAgICAgICAgICAgIHNlbGVjdG9yLA0KICAgICAgICAgICAgICAgIHBhcnQsDQogICAgICAgICAgICAgICAgaSwgajsNCg0KICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBzZWxlY3RvcnMubGVuZ3RoOyBpKyspew0KICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldOw0KDQogICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBzZWxlY3Rvci5wYXJ0cy5sZW5ndGg7IGorKyl7DQogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxlY3Rvci5wYXJ0c1tqXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBwYXJzZXJsaWIuY3NzLlNlbGVjdG9yUGFydCl7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydC5lbGVtZW50TmFtZSAmJiAvaFsxLTZdLy50ZXN0KHBhcnQuZWxlbWVudE5hbWUudG9TdHJpbmcoKSkgJiYgaiA+IDApew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIkhlYWRpbmcgKCIgKyBwYXJ0LmVsZW1lbnROYW1lICsgIikgc2hvdWxkIG5vdCBiZSBxdWFsaWZpZWQuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCwgcnVsZSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCg0KfSk7DQovKg0KICogUnVsZTogU2VsZWN0b3JzIHRoYXQgbG9vayBsaWtlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIHNsb3cgYW5kIHNob3VsZCBiZSBhdm9pZGVkLg0KICovDQpDU1NMaW50LmFkZFJ1bGUoew0KDQogICAgLy9ydWxlIGluZm9ybWF0aW9uDQogICAgaWQ6ICJyZWdleC1zZWxlY3RvcnMiLA0KICAgIG5hbWU6ICJSZWdleCBTZWxlY3RvcnMiLA0KICAgIGRlc2M6ICJTZWxlY3RvcnMgdGhhdCBsb29rIGxpa2UgcmVndWxhciBleHByZXNzaW9ucyBhcmUgc2xvdyBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpczsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIGZ1bmN0aW9uKGV2ZW50KXsNCiAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBldmVudC5zZWxlY3RvcnMsDQogICAgICAgICAgICAgICAgc2VsZWN0b3IsDQogICAgICAgICAgICAgICAgcGFydCwNCiAgICAgICAgICAgICAgICBtb2RpZmllciwNCiAgICAgICAgICAgICAgICBpLCBqLCBrOw0KDQogICAgICAgICAgICBmb3IgKGk9MDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKyl7DQogICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07DQogICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBzZWxlY3Rvci5wYXJ0cy5sZW5ndGg7IGorKyl7DQogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxlY3Rvci5wYXJ0c1tqXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBwYXJzZXJsaWIuY3NzLlNlbGVjdG9yUGFydCl7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGs9MDsgayA8IHBhcnQubW9kaWZpZXJzLmxlbmd0aDsgaysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllciA9IHBhcnQubW9kaWZpZXJzW2tdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllci50eXBlID09ICJhdHRyaWJ1dGUiKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC8oW1x+XHxcXlwkXCpdPSkvLnRlc3QobW9kaWZpZXIpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIkF0dHJpYnV0ZSBzZWxlY3RvcnMgd2l0aCAiICsgUmVnRXhwLiQxICsgIiBhcmUgc2xvdyEiLCBtb2RpZmllci5saW5lLCBtb2RpZmllci5jb2wsIHJ1bGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCg0KfSk7DQovKg0KICogUnVsZTogVG90YWwgbnVtYmVyIG9mIHJ1bGVzIHNob3VsZCBub3QgZXhjZWVkIHguDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogInJ1bGVzLWNvdW50IiwNCiAgICBuYW1lOiAiUnVsZXMgQ291bnQiLA0KICAgIGRlc2M6ICJUcmFjayBob3cgbWFueSBydWxlcyB0aGVyZSBhcmUuIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpcywNCiAgICAgICAgICAgIGNvdW50ID0gMDsNCg0KICAgICAgICAvL2NvdW50IGVhY2ggcnVsZQ0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICBjb3VudCsrOw0KICAgICAgICB9KTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgcmVwb3J0ZXIuc3RhdCgicnVsZS1jb3VudCIsIGNvdW50KTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQp9KTsNCi8qDQogKiBSdWxlOiBEb24ndCB1c2UgdGV4dC1pbmRlbnQgZm9yIGltYWdlIHJlcGxhY2VtZW50IGlmIHlvdSBuZWVkIHRvIHN1cHBvcnQgcnRsLiANCiAqIA0KICovDQovKg0KICogU2hvdWxkIHdlIGJlIGNoZWNraW5nIGZvciBydGwvbHRyPw0KICovDQovL0NvbW1lbnRlZCBvdXQgZHVlIHRvIGxhY2sgb2YgdGVzdHMNCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogInRleHQtaW5kZW50IiwNCiAgICBuYW1lOiAiVGV4dCBJbmRlbnQiLA0KICAgIGRlc2M6ICJDaGVja3MgZm9yIHRleHQgaW5kZW50IGxlc3MgdGhhbiAtOTlweCIsDQogICAgYnJvd3NlcnM6ICJBbGwiLA0KICAgIA0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsNCiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOw0KICAgIA0KICAgICAgICAvL2NoZWNrIGZvciB1c2Ugb2YgImZvbnQtc2l6ZSINCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsNCiAgICAgICAgICAgIHZhciBuYW1lID0gZXZlbnQucHJvcGVydHksDQogICAgICAgICAgICAgICAgdmFsdWUgPSBldmVudC52YWx1ZS5wYXJ0c1swXS52YWx1ZTsNCg0KICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHQtaW5kZW50IiAmJiB2YWx1ZSA8IC05OSl7DQogICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiTmVnYXRpdmUgdGV4dC1pbmRlbnQgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBSVEwuIElmIHlvdSB1c2UgdGV4dC1pbmRlbnQgZm9yIGltYWdlIHJlcGxhY2VtZW50IGV4cGxpY2l0bHkgc2V0IHRleHQtZGlyZWN0aW9uIGZvciB0aGF0IGl0ZW0gdG8gbHRyLiIsIG5hbWUubGluZSwgbmFtZS5jb2wsIHJ1bGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQoNCn0pOw0KLyoNCiAqIFJ1bGU6IEhlYWRpbmdzIChoMS1oNikgc2hvdWxkIGJlIGRlZmluZWQgb25seSBvbmNlLg0KICovDQpDU1NMaW50LmFkZFJ1bGUoew0KDQogICAgLy9ydWxlIGluZm9ybWF0aW9uDQogICAgaWQ6ICJ1bmlxdWUtaGVhZGluZ3MiLA0KICAgIG5hbWU6ICJVbmlxdWUgSGVhZGluZ3MiLA0KICAgIGRlc2M6ICJIZWFkaW5ncyBzaG91bGQgYmUgZGVmaW5lZCBvbmx5IG9uY2UuIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpczsNCg0KICAgICAgICB2YXIgaGVhZGluZ3MgPSAgew0KICAgICAgICAgICAgICAgIGgxOiAwLA0KICAgICAgICAgICAgICAgIGgyOiAwLA0KICAgICAgICAgICAgICAgIGgzOiAwLA0KICAgICAgICAgICAgICAgIGg0OiAwLA0KICAgICAgICAgICAgICAgIGg1OiAwLA0KICAgICAgICAgICAgICAgIGg2OiAwDQogICAgICAgICAgICB9Ow0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IGV2ZW50LnNlbGVjdG9ycywNCiAgICAgICAgICAgICAgICBzZWxlY3RvciwNCiAgICAgICAgICAgICAgICBwYXJ0LA0KICAgICAgICAgICAgICAgIGk7DQoNCiAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKXsNCiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsNCiAgICAgICAgICAgICAgICBwYXJ0ID0gc2VsZWN0b3IucGFydHNbc2VsZWN0b3IucGFydHMubGVuZ3RoLTFdOw0KDQogICAgICAgICAgICAgICAgaWYgKHBhcnQuZWxlbWVudE5hbWUgJiYgLyhoWzEtNl0pLy50ZXN0KHBhcnQuZWxlbWVudE5hbWUudG9TdHJpbmcoKSkpew0KICAgICAgICAgICAgICAgICAgICBoZWFkaW5nc1tSZWdFeHAuJDFdKys7DQogICAgICAgICAgICAgICAgICAgIGlmIChoZWFkaW5nc1tSZWdFeHAuJDFdID4gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiSGVhZGluZyAoIiArIHBhcnQuZWxlbWVudE5hbWUgKyAiKSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCwgcnVsZSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCg0KfSk7DQovKg0KICogUnVsZTogRG9uJ3QgdXNlIHVuaXZlcnNhbCBzZWxlY3RvciBiZWNhdXNlIGl0J3Mgc2xvdy4NCiAqLw0KQ1NTTGludC5hZGRSdWxlKHsNCg0KICAgIC8vcnVsZSBpbmZvcm1hdGlvbg0KICAgIGlkOiAidW5pdmVyc2FsLXNlbGVjdG9yIiwNCiAgICBuYW1lOiAiVW5pdmVyc2FsIFNlbGVjdG9yIiwNCiAgICBkZXNjOiAiVGhlIHVuaXZlcnNhbCBzZWxlY3RvciAoKikgaXMga25vd24gdG8gYmUgc2xvdy4iLA0KICAgIGJyb3dzZXJzOiAiQWxsIiwNCg0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsNCiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOw0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IGV2ZW50LnNlbGVjdG9ycywNCiAgICAgICAgICAgICAgICBzZWxlY3RvciwNCiAgICAgICAgICAgICAgICBwYXJ0LA0KICAgICAgICAgICAgICAgIG1vZGlmaWVyLA0KICAgICAgICAgICAgICAgIGksIGosIGs7DQoNCiAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKXsNCiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBwYXJ0ID0gc2VsZWN0b3IucGFydHNbc2VsZWN0b3IucGFydHMubGVuZ3RoLTFdOw0KICAgICAgICAgICAgICAgIGlmIChwYXJ0LmVsZW1lbnROYW1lID09ICIqIil7DQogICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4ocnVsZS5kZXNjLCBwYXJ0LmxpbmUsIHBhcnQuY29sLCBydWxlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCg0KfSk7DQovKg0KICogUnVsZTogV2hlbiB1c2luZyBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSwgbWFrZSBzdXJlIHRvDQogKiBpbmNsdWRlIHRoZSBzdGFuZGFyZCBvbmUuDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogInZlbmRvci1wcmVmaXgiLA0KICAgIG5hbWU6ICJWZW5kb3IgUHJlZml4IiwNCiAgICBkZXNjOiAiV2hlbiB1c2luZyBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIHN0YW5kYXJkIG9uZS4iLA0KICAgIGJyb3dzZXJzOiAiQWxsIiwNCg0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsNCiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLA0KICAgICAgICAgICAgcHJvcGVydGllcywNCiAgICAgICAgICAgIG51bSwNCiAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrID0gew0KICAgICAgICAgICAgICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAiYm9yZGVyLXJhZGl1cyIsDQogICAgICAgICAgICAgICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6ICJib3JkZXItcmFkaXVzIiwNCiAgICAgICAgICAgICAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLA0KICAgICAgICAgICAgICAgICItd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjogImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwNCiAgICAgICAgICAgICAgICAiLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjogImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiLA0KICAgICAgICAgICAgICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwNCiAgICAgICAgICAgICAgICAiLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQiOiAiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsDQogICAgICAgICAgICAgICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6ICJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyIsDQogICAgICAgICAgICAgICAgIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0IjogImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiLA0KICAgICAgICAgICAgICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQiOiAiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLA0KICAgICAgICAgICAgICAgICItbW96LWJveC1zaGFkb3ciOiAiYm94LXNoYWRvdyIsDQogICAgICAgICAgICAgICAgIi13ZWJraXQtYm94LXNoYWRvdyI6ICJib3gtc2hhZG93IiwNCiAgICAgICAgICAgICAgICAiLW1vei10cmFuc2Zvcm0iIDogInRyYW5zZm9ybSIsDQogICAgICAgICAgICAgICAgIi13ZWJraXQtdHJhbnNmb3JtIiA6ICJ0cmFuc2Zvcm0iLA0KICAgICAgICAgICAgICAgICItby10cmFuc2Zvcm0iIDogInRyYW5zZm9ybSIsDQogICAgICAgICAgICAgICAgIi1tcy10cmFuc2Zvcm0iIDogInRyYW5zZm9ybSIsDQogICAgICAgICAgICAgICAgIi1tb3otYm94LXNpemluZyIgOiAiYm94LXNpemluZyIsDQogICAgICAgICAgICAgICAgIi13ZWJraXQtYm94LXNpemluZyIgOiAiYm94LXNpemluZyIsDQogICAgICAgICAgICAgICAgIi1tb3otdXNlci1zZWxlY3QiIDogInVzZXItc2VsZWN0IiwNCiAgICAgICAgICAgICAgICAiLWtodG1sLXVzZXItc2VsZWN0IiA6ICJ1c2VyLXNlbGVjdCIsDQogICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3QiIDogInVzZXItc2VsZWN0IiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgLy9ldmVudCBoYW5kbGVyIGZvciBiZWdpbm5pbmcgb2YgcnVsZXMNCiAgICAgICAgZnVuY3Rpb24gc3RhcnRSdWxlKCl7DQogICAgICAgICAgICBwcm9wZXJ0aWVzID0ge307DQogICAgICAgICAgICBudW09MTsgICAgICAgIA0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvL2V2ZW50IGhhbmRsZXIgZm9yIGVuZCBvZiBydWxlcw0KICAgICAgICBmdW5jdGlvbiBlbmRSdWxlKGV2ZW50KXsNCiAgICAgICAgICAgIHZhciBwcm9wLA0KICAgICAgICAgICAgICAgIGksIGxlbiwNCiAgICAgICAgICAgICAgICBzdGFuZGFyZCwNCiAgICAgICAgICAgICAgICBuZWVkZWQsDQogICAgICAgICAgICAgICAgYWN0dWFsLA0KICAgICAgICAgICAgICAgIG5lZWRzU3RhbmRhcmQgPSBbXTsNCg0KICAgICAgICAgICAgZm9yIChwcm9wIGluIHByb3BlcnRpZXMpew0KICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzVG9DaGVja1twcm9wXSl7DQogICAgICAgICAgICAgICAgICAgIG5lZWRzU3RhbmRhcmQucHVzaCh7IGFjdHVhbDogcHJvcCwgbmVlZGVkOiBwcm9wZXJ0aWVzVG9DaGVja1twcm9wXX0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZm9yIChpPTAsIGxlbj1uZWVkc1N0YW5kYXJkLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsNCiAgICAgICAgICAgICAgICBuZWVkZWQgPSBuZWVkc1N0YW5kYXJkW2ldLm5lZWRlZDsNCiAgICAgICAgICAgICAgICBhY3R1YWwgPSBuZWVkc1N0YW5kYXJkW2ldLmFjdHVhbDsNCg0KICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllc1tuZWVkZWRdKXsgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiTWlzc2luZyBzdGFuZGFyZCBwcm9wZXJ0eSAnIiArIG5lZWRlZCArICInIHRvIGdvIGFsb25nIHdpdGggJyIgKyBhY3R1YWwgKyAiJy4iLCBldmVudC5saW5lLCBldmVudC5jb2wsIHJ1bGUpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIC8vbWFrZSBzdXJlIHN0YW5kYXJkIHByb3BlcnR5IGlzIGxhc3QNCiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbbmVlZGVkXVswXS5wb3MgPCBwcm9wZXJ0aWVzW2FjdHVhbF1bMF0ucG9zKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIlN0YW5kYXJkIHByb3BlcnR5ICciICsgbmVlZGVkICsgIicgc2hvdWxkIGNvbWUgYWZ0ZXIgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5ICciICsgYWN0dWFsICsgIicuIiwgZXZlbnQubGluZSwgZXZlbnQuY29sLCBydWxlKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9ICAgICAgICANCiAgICAgICAgDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgc3RhcnRSdWxlKTsNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGZvbnRmYWNlIiwgc3RhcnRSdWxlKTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7DQoNCiAgICAgICAgICAgIGlmICghcHJvcGVydGllc1tuYW1lXSl7DQogICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IFtdOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBwcm9wZXJ0aWVzW25hbWVdLnB1c2goeyBuYW1lOiBldmVudC5wcm9wZXJ0eSwgdmFsdWUgOiBldmVudC52YWx1ZSwgcG9zOm51bSsrIH0pOw0KICAgICAgICB9KTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLCBlbmRSdWxlKTsNCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRmb250ZmFjZSIsIGVuZFJ1bGUpOw0KICAgIH0NCg0KfSk7DQovKg0KICogUnVsZTogSWYgYW4gZWxlbWVudCBoYXMgYSB3aWR0aCBvZiAxMDAlLCBiZSBjYXJlZnVsIHdoZW4gcGxhY2luZyB3aXRoaW4NCiAqIGFuIGVsZW1lbnQgdGhhdCBoYXMgcGFkZGluZy4gSXQgbWF5IGxvb2sgc3RyYW5nZS4NCiAqLw0KLy9Db21tZW50ZWQgb3V0IHBlbmRpbmcgZnVydGhlciByZXZpZXcuDQovKkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogIndpZHRoLTEwMCIsDQogICAgbmFtZTogIldpZHRoIDEwMCUiLA0KICAgIGRlc2M6ICJCZSBjYXJlZnVsIHdoZW4gdXNpbmcgd2lkdGg6IDEwMCUgb24gZWxlbWVudHMuIiwNCiAgICBicm93c2VyczogIkFsbCIsDQoNCiAgICAvL2luaXRpYWxpemF0aW9uDQogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7DQogICAgICAgIHZhciBydWxlID0gdGhpcywNCiAgICAgICAgICAgIHdpZHRoMTAwLA0KICAgICAgICAgICAgYm94c2l6aW5nOw0KDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHdpZHRoMTAwID0gbnVsbDsNCiAgICAgICAgICAgIGJveHNpemluZyA9IGZhbHNlOw0KICAgICAgICB9KTsNCg0KICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpew0KICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCksDQogICAgICAgICAgICAgICAgdmFsdWUgPSBldmVudC52YWx1ZTsNCg0KICAgICAgICAgICAgaWYgKG5hbWUgPT0gIndpZHRoIiAmJiB2YWx1ZSA9PSAiMTAwJSIpew0KICAgICAgICAgICAgICAgIHdpZHRoMTAwID0gZXZlbnQucHJvcGVydHk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImJveC1zaXppbmciIHx8IC9cLSg/OndlYmtpdHxtc3xtb3opXC1ib3gtc2l6aW5nLy50ZXN0KG5hbWUpKXsgIC8vbWVhbnMgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcNCiAgICAgICAgICAgICAgICBib3hzaXppbmcgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICBpZiAod2lkdGgxMDAgJiYgIWJveHNpemluZyl7DQogICAgICAgICAgICAgICAgcmVwb3J0ZXIud2FybigiRWxlbWVudHMgd2l0aCBhIHdpZHRoIG9mIDEwMCUgbWF5IG5vdCBhcHBlYXIgYXMgeW91IGV4cGVjdCBpbnNpZGUgb2Ygb3RoZXIgZWxlbWVudHMuIiwgd2lkdGgxMDAubGluZSwgd2lkdGgxMDAuY29sLCBydWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KDQp9KTsqLw0KLyoNCiAqIFJ1bGU6IFlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgdW5pdHMgd2hlbiBhIHZhbHVlIGlzIDAuDQogKi8NCkNTU0xpbnQuYWRkUnVsZSh7DQoNCiAgICAvL3J1bGUgaW5mb3JtYXRpb24NCiAgICBpZDogInplcm8tdW5pdHMiLA0KICAgIG5hbWU6ICJaZXJvIFVuaXRzIiwNCiAgICBkZXNjOiAiWW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSB1bml0cyB3aGVuIGEgdmFsdWUgaXMgMC4iLA0KICAgIGJyb3dzZXJzOiAiQWxsIiwNCg0KICAgIC8vaW5pdGlhbGl6YXRpb24NCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsNCiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOw0KDQogICAgICAgIC8vY291bnQgaG93IG1hbnkgdGltZXMgImZsb2F0IiBpcyB1c2VkDQogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7DQogICAgICAgICAgICB2YXIgcGFydHMgPSBldmVudC52YWx1ZS5wYXJ0cywNCiAgICAgICAgICAgICAgICBpID0gMCwgDQogICAgICAgICAgICAgICAgbGVuID0gcGFydHMubGVuZ3RoOw0KDQogICAgICAgICAgICB3aGlsZShpIDwgbGVuKXsNCiAgICAgICAgICAgICAgICBpZiAoKHBhcnRzW2ldLnVuaXRzIHx8IHBhcnRzW2ldLnR5cGUgPT0gInBlcmNlbnRhZ2UiKSAmJiBwYXJ0c1tpXS52YWx1ZSA9PT0gMCl7DQogICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLndhcm4oIlZhbHVlcyBvZiAwIHNob3VsZG4ndCBoYXZlIHVuaXRzIHNwZWNpZmllZC4iLCBwYXJ0c1tpXS5saW5lLCBwYXJ0c1tpXS5jb2wsIHJ1bGUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpKys7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSk7DQoNCiAgICB9DQoNCn0pOw0KDQpleHBvcnRzLkNTU0xpbnQgPSBDU1NMaW50Ow0KfSk7DQo=]]></data>
	</file>
	<file>
	  <filename>/ace/src/worker-javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOw0KDQp2YXIgY29uc29sZSA9IHsNCiAgICBsb2c6IGZ1bmN0aW9uKG1zZykgew0KICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZTogImxvZyIsIGRhdGE6IG1zZ30pOw0KICAgIH0NCn07DQp2YXIgd2luZG93ID0gew0KICAgIGNvbnNvbGU6IGNvbnNvbGUNCn07DQoNCnZhciBub3JtYWxpemVNb2R1bGUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkgew0KICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMNCiAgICBpZiAobW9kdWxlTmFtZS5pbmRleE9mKCIhIikgIT09IC0xKSB7DQogICAgICAgIHZhciBjaHVua3MgPSBtb2R1bGVOYW1lLnNwbGl0KCIhIik7DQogICAgICAgIHJldHVybiBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1swXSkgKyAiISIgKyBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1sxXSk7DQogICAgfQ0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcw0KICAgIGlmIChtb2R1bGVOYW1lLmNoYXJBdCgwKSA9PSAiLiIpIHsNCiAgICAgICAgdmFyIGJhc2UgPSBwYXJlbnRJZC5zcGxpdCgiLyIpLnNsaWNlKDAsIC0xKS5qb2luKCIvIik7DQogICAgICAgIHZhciBtb2R1bGVOYW1lID0gYmFzZSArICIvIiArIG1vZHVsZU5hbWU7DQogICAgICAgIA0KICAgICAgICB3aGlsZShtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgew0KICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gbW9kdWxlTmFtZTsNCiAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBtb2R1bGVOYW1lOw0KfTsNCg0KdmFyIHJlcXVpcmUgPSBmdW5jdGlvbihwYXJlbnRJZCwgaWQpIHsNCiAgICB2YXIgaWQgPSBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGlkKTsNCiAgICANCiAgICB2YXIgbW9kdWxlID0gcmVxdWlyZS5tb2R1bGVzW2lkXTsNCiAgICBpZiAobW9kdWxlKSB7DQogICAgICAgIGlmICghbW9kdWxlLmluaXRpYWxpemVkKSB7DQogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsNCiAgICAgICAgICAgIG1vZHVsZS5pbml0aWFsaXplZCA9IHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOw0KICAgIH0NCiAgICANCiAgICB2YXIgY2h1bmtzID0gaWQuc3BsaXQoIi8iKTsNCiAgICBjaHVua3NbMF0gPSByZXF1aXJlLnRsbnNbY2h1bmtzWzBdXSB8fCBjaHVua3NbMF07DQogICAgdmFyIHBhdGggPSBjaHVua3Muam9pbigiLyIpICsgIi5qcyI7DQogICAgDQogICAgcmVxdWlyZS5pZCA9IGlkOw0KICAgIGltcG9ydFNjcmlwdHMocGF0aCk7DQogICAgcmV0dXJuIHJlcXVpcmUocGFyZW50SWQsIGlkKTsgICAgDQp9Ow0KDQpyZXF1aXJlLm1vZHVsZXMgPSB7fTsNCnJlcXVpcmUudGxucyA9IHt9Ow0KDQp2YXIgZGVmaW5lID0gZnVuY3Rpb24oaWQsIGRlcHMsIGZhY3RvcnkpIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7DQogICAgICAgIGZhY3RvcnkgPSBkZXBzOw0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICAgIGZhY3RvcnkgPSBpZDsNCiAgICAgICAgaWQgPSByZXF1aXJlLmlkOw0KICAgIH0NCg0KICAgIGlmIChpZC5pbmRleE9mKCJ0ZXh0ISIpID09PSAwKSANCiAgICAgICAgcmV0dXJuOw0KICAgIA0KICAgIHZhciByZXEgPSBmdW5jdGlvbihkZXBzLCBmYWN0b3J5KSB7DQogICAgICAgIHJldHVybiByZXF1aXJlKGlkLCBkZXBzLCBmYWN0b3J5KTsNCiAgICB9Ow0KDQogICAgcmVxdWlyZS5tb2R1bGVzW2lkXSA9IHsNCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgbW9kdWxlID0gew0KICAgICAgICAgICAgICAgIGV4cG9ydHM6IHt9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdmFyIHJldHVybkV4cG9ydHMgPSBmYWN0b3J5KHJlcSwgbW9kdWxlLmV4cG9ydHMsIG1vZHVsZSk7DQogICAgICAgICAgICBpZiAocmV0dXJuRXhwb3J0cykNCiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJldHVybkV4cG9ydHM7DQogICAgICAgICAgICByZXR1cm4gbW9kdWxlOw0KICAgICAgICB9DQogICAgfTsNCn07DQoNCmZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsNCiAgICByZXF1aXJlLnRsbnMgPSB0b3BMZXZlbE5hbWVzcGFjZXM7DQp9DQoNCmZ1bmN0aW9uIGluaXRTZW5kZXIoKSB7DQoNCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShudWxsLCAiYWNlL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOw0KICAgIHZhciBvb3AgPSByZXF1aXJlKG51bGwsICJhY2UvbGliL29vcCIpOw0KICAgIA0KICAgIHZhciBTZW5kZXIgPSBmdW5jdGlvbigpIHt9Ow0KICAgIA0KICAgIChmdW5jdGlvbigpIHsNCiAgICAgICAgDQogICAgICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGZ1bmN0aW9uKGRhdGEsIGNhbGxiYWNrSWQpIHsNCiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsDQogICAgICAgICAgICAgICAgaWQ6IGNhbGxiYWNrSWQsDQogICAgICAgICAgICAgICAgZGF0YTogZGF0YQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH07DQogICAgDQogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsNCiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAiZXZlbnQiLA0KICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsDQogICAgICAgICAgICAgICAgZGF0YTogZGF0YQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH07DQogICAgICAgIA0KICAgIH0pLmNhbGwoU2VuZGVyLnByb3RvdHlwZSk7DQogICAgDQogICAgcmV0dXJuIG5ldyBTZW5kZXIoKTsNCn0NCg0KdmFyIG1haW47DQp2YXIgc2VuZGVyOw0KDQpvbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7DQogICAgdmFyIG1zZyA9IGUuZGF0YTsNCiAgICBpZiAobXNnLmNvbW1hbmQpIHsNCiAgICAgICAgbWFpblttc2cuY29tbWFuZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpOw0KICAgIH0NCiAgICBlbHNlIGlmIChtc2cuaW5pdCkgeyAgICAgICAgDQogICAgICAgIGluaXRCYXNlVXJscyhtc2cudGxucyk7DQogICAgICAgIHJlcXVpcmUobnVsbCwgImFjZS9saWIvZml4b2xkYnJvd3NlcnMiKTsNCiAgICAgICAgc2VuZGVyID0gaW5pdFNlbmRlcigpOw0KICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG51bGwsIG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOw0KICAgICAgICBtYWluID0gbmV3IGNsYXp6KHNlbmRlcik7DQogICAgfSANCiAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgc2VuZGVyKSB7DQogICAgICAgIHNlbmRlci5fZW1pdChtc2cuZXZlbnQsIG1zZy5kYXRhKTsNCiAgICB9DQp9Ow0KLy8gdmltOnNldCB0cz00IHN0cz00IHN3PTQgc3Q6DQovLyAtLSBrcmlza293YWwgS3JpcyBLb3dhbCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNSVQgTGljZW5zZQ0KLy8gLS0gdGxyb2JpbnNvbiBUb20gUm9iaW5zb24gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTUlUIExpY2Vuc2UgKE5hcndoYWwgUHJvamVjdCkNCi8vIC0tIGRhbnRtYW4gRGFuaWVsIEZyaWVzZW4gQ29weXJpZ2h0KEMpIDIwMTAgWFhYIE5vIExpY2Vuc2UgU3BlY2lmaWVkDQovLyAtLSBmc2NoYWVmZXIgRmxvcmlhbiBTY2jDpGZlciBDb3B5cmlnaHQgKEMpIDIwMTAgTUlUIExpY2Vuc2UNCi8vIC0tIElyYWtsaSBHb3phbGlzaHZpbGkgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQoNCi8qIQ0KICAgIENvcHlyaWdodCAoYykgMjAwOSwgMjgwIE5vcnRoIEluYy4gaHR0cDovLzI4MG5vcnRoLmNvbS8NCiAgICBNSVQgTGljZW5zZS4gaHR0cDovL2dpdGh1Yi5jb20vMjgwbm9ydGgvbmFyd2hhbC9ibG9iL21hc3Rlci9SRUFETUUubWQNCiovDQoNCmRlZmluZSgnYWNlL2xpYi9maXhvbGRicm93c2VycycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9yZWdleHAnLCAnYWNlL2xpYi9lczUtc2hpbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KcmVxdWlyZSgiLi9yZWdleHAiKTsNCnJlcXVpcmUoIi4vZXM1LXNoaW0iKTsNCg0KfSk7LyoqDQogKiAgQmFzZWQgb24gY29kZSBmcm9tOg0KICoNCiAqIFhSZWdFeHAgMS41LjANCiAqIChjKSAyMDA3LTIwMTAgU3RldmVuIExldml0aGFuDQogKiBNSVQgTGljZW5zZQ0KICogPGh0dHA6Ly94cmVnZXhwLmNvbT4NCiAqIFByb3ZpZGVzIGFuIGF1Z21lbnRlZCwgZXh0ZW5zaWJsZSwgY3Jvc3MtYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiByZWd1bGFyIGV4cHJlc3Npb25zLA0KICogaW5jbHVkaW5nIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc3ludGF4LCBmbGFncywgYW5kIG1ldGhvZHMNCiAqLw0KIA0KZGVmaW5lKCdhY2UvbGliL3JlZ2V4cCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIC8vICBQcml2YXRlIHZhcmlhYmxlcw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICB2YXIgcmVhbCA9IHsNCiAgICAgICAgICAgIGV4ZWM6IFJlZ0V4cC5wcm90b3R5cGUuZXhlYywNCiAgICAgICAgICAgIHRlc3Q6IFJlZ0V4cC5wcm90b3R5cGUudGVzdCwNCiAgICAgICAgICAgIG1hdGNoOiBTdHJpbmcucHJvdG90eXBlLm1hdGNoLA0KICAgICAgICAgICAgcmVwbGFjZTogU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLA0KICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXQNCiAgICAgICAgfSwNCiAgICAgICAgY29tcGxpYW50RXhlY05wY2cgPSByZWFsLmV4ZWMuY2FsbCgvKCk/Py8sICIiKVsxXSA9PT0gdW5kZWZpbmVkLCAvLyBjaGVjayBgZXhlY2AgaGFuZGxpbmcgb2Ygbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzDQogICAgICAgIGNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB4ID0gL14vZzsNCiAgICAgICAgICAgIHJlYWwudGVzdC5jYWxsKHgsICIiKTsNCiAgICAgICAgICAgIHJldHVybiAheC5sYXN0SW5kZXg7DQogICAgICAgIH0oKTsNCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gIE92ZXJyaWRlbiBuYXRpdmUgbWV0aG9kcw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICAvLyBBZGRzIG5hbWVkIGNhcHR1cmUgc3VwcG9ydCAod2l0aCBiYWNrcmVmZXJlbmNlcyByZXR1cm5lZCBhcyBgcmVzdWx0Lm5hbWVgKSwgYW5kIGZpeGVzIHR3bw0KICAgIC8vIGNyb3NzLWJyb3dzZXIgaXNzdWVzIHBlciBFUzM6DQogICAgLy8gLSBDYXB0dXJlZCB2YWx1ZXMgZm9yIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYHVuZGVmaW5lZGAsDQogICAgLy8gICByYXRoZXIgdGhhbiB0aGUgZW1wdHkgc3RyaW5nLg0KICAgIC8vIC0gYGxhc3RJbmRleGAgc2hvdWxkIG5vdCBiZSBpbmNyZW1lbnRlZCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzLg0KICAgIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChzdHIpIHsNCiAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksDQogICAgICAgICAgICBuYW1lLCByMjsNCiAgICAgICAgaWYgKG1hdGNoKSB7DQogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYCBmb3INCiAgICAgICAgICAgIC8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3Vwcw0KICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAxICYmIGluZGV4T2YobWF0Y2gsICIiKSA+IC0xKSB7DQogICAgICAgICAgICAgICAgcjIgPSBSZWdFeHAodGhpcy5zb3VyY2UsIHJlYWwucmVwbGFjZS5jYWxsKGdldE5hdGl2ZUZsYWdzKHRoaXMpLCAiZyIsICIiKSk7DQogICAgICAgICAgICAgICAgLy8gVXNpbmcgYHN0ci5zbGljZShtYXRjaC5pbmRleClgIHJhdGhlciB0aGFuIGBtYXRjaFswXWAgaW4gY2FzZSBsb29rYWhlYWQgYWxsb3dlZA0KICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIGR1ZSB0byBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIG1hdGNoDQogICAgICAgICAgICAgICAgcmVhbC5yZXBsYWNlLmNhbGwoc3RyLnNsaWNlKG1hdGNoLmluZGV4KSwgcjIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIEF0dGFjaCBuYW1lZCBjYXB0dXJlIHByb3BlcnRpZXMNCiAgICAgICAgICAgIGlmICh0aGlzLl94cmVnZXhwICYmIHRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzKSB7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXNbaSAtIDFdOw0KICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbbmFtZV0gPSBtYXRjaFtpXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgdGhhdCBpbmNyZW1lbnQgYGxhc3RJbmRleGAgYWZ0ZXIgemVyby1sZW5ndGggbWF0Y2hlcw0KICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpDQogICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgtLTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gbWF0Y2g7DQogICAgfTsNCg0KICAgIC8vIERvbid0IG92ZXJyaWRlIGB0ZXN0YCBpZiBpdCB3b24ndCBjaGFuZ2UgYW55dGhpbmcNCiAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCkgew0KICAgICAgICAvLyBGaXggYnJvd3NlciBidWcgaW4gbmF0aXZlIG1ldGhvZA0KICAgICAgICBSZWdFeHAucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAoc3RyKSB7DQogICAgICAgICAgICAvLyBVc2UgdGhlIG5hdGl2ZSBgZXhlY2AgdG8gc2tpcCBzb21lIHByb2Nlc3Npbmcgb3ZlcmhlYWQsIGV2ZW4gdGhvdWdoIHRoZSBvdmVycmlkZW4NCiAgICAgICAgICAgIC8vIGBleGVjYCB3b3VsZCB0YWtlIGNhcmUgb2YgdGhlIGBsYXN0SW5kZXhgIGZpeA0KICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmNhbGwodGhpcywgc3RyKTsNCiAgICAgICAgICAgIC8vIEZpeCBicm93c2VycyB0aGF0IGluY3JlbWVudCBgbGFzdEluZGV4YCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzDQogICAgICAgICAgICBpZiAobWF0Y2ggJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpDQogICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgtLTsNCiAgICAgICAgICAgIHJldHVybiAhIW1hdGNoOw0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLy8gIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucw0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgICBmdW5jdGlvbiBnZXROYXRpdmVGbGFncyAocmVnZXgpIHsNCiAgICAgICAgcmV0dXJuIChyZWdleC5nbG9iYWwgICAgID8gImciIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5pZ25vcmVDYXNlID8gImkiIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5tdWx0aWxpbmUgID8gIm0iIDogIiIpICsNCiAgICAgICAgICAgICAgIChyZWdleC5leHRlbmRlZCAgID8gIngiIDogIiIpICsgLy8gUHJvcG9zZWQgZm9yIEVTNDsgaW5jbHVkZWQgaW4gQVMzDQogICAgICAgICAgICAgICAocmVnZXguc3RpY2t5ICAgICA/ICJ5IiA6ICIiKTsNCiAgICB9Ow0KDQogICAgZnVuY3Rpb24gaW5kZXhPZiAoYXJyYXksIGl0ZW0sIGZyb20pIHsNCiAgICAgICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSAvLyBVc2UgdGhlIG5hdGl2ZSBhcnJheSBtZXRob2QgaWYgYXZhaWxhYmxlDQogICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtLCBmcm9tKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IGZyb20gfHwgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoYXJyYXlbaV0gPT09IGl0ZW0pDQogICAgICAgICAgICAgICAgcmV0dXJuIGk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIC0xOw0KICAgIH07DQoNCn0pOy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYg0KLy8gLS0ga3Jpc2tvd2FsIEtyaXMgS293YWwgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIHRscm9iaW5zb24gVG9tIFJvYmluc29uIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1JVCBMaWNlbnNlIChOYXJ3aGFsIFByb2plY3QpDQovLyAtLSBkYW50bWFuIERhbmllbCBGcmllc2VuIENvcHlyaWdodCAoQykgMjAxMCBYWFggVE9ETyBMaWNlbnNlIG9yIENMQQ0KLy8gLS0gZnNjaGFlZmVyIEZsb3JpYW4gU2Now6RmZXIgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQovLyAtLSBHb3phbGEgSXJha2xpIEdvemFsaXNodmlsaSBDb3B5cmlnaHQgKEMpIDIwMTAgTUlUIExpY2Vuc2UNCi8vIC0tIGtpdGNhbWJyaWRnZSBLaXQgQ2FtYnJpZGdlIENvcHlyaWdodCAoQykgMjAxMSBNSVQgTGljZW5zZQ0KLy8gLS0ga29zc25vY29ycCBTYXNoYSBLb3NzIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBicnlhbmZvcmJlcyBCcnlhbiBGb3JiZXMgWFhYIFRPRE8gTGljZW5zZSBvciBDTEENCi8vIC0tIGtpbGxkcmVhbSBRdWlsZHJlZW4gTW90dGEgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbmNlDQovLyAtLSBtaWNoYWVsZmljYXJyYSBNaWNoYWVsIEZpY2FycmEgQ29weXJpZ2h0IChDKSAyMDExIDMtY2xhdXNlIEJTRCBMaWNlbnNlDQovLyAtLSBzaGFya2JyYWluZ3V5IEdlcmFyZCBQYWFwdSBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIGJicXNyYyBCcmVuZGFuIE1vbGxveSAoQykgMjAxMSBDcmVhdGl2ZSBDb21tb25zIFplcm8gKHB1YmxpYyBkb21haW4pDQovLyAtLSBpd3lnIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBEb21lbmljRGVuaWNvbGEgRG9tZW5pYyBEZW5pY29sYSBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UNCi8vIC0tIHhhdmllcm0wMiBNb250aWxsZXQgWGF2aWVyIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBSYXlub3MgUmF5bm9zIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQovLyAtLSBzYW1zb25qcyBTYW1pIFNhbWh1cmkgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlDQovLyAtLSByd2xkcm4gUmljayBXYWxkcm9uIENvcHlyaWdodCAoQykgMjAxMSBNSVQgTGljZW5zZQ0KLy8gLS0gbGV4ZXIgQWxleGV5IFpha2hhcm92IFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBDQoNCi8qIQ0KICAgIENvcHlyaWdodCAoYykgMjAwOSwgMjgwIE5vcnRoIEluYy4gaHR0cDovLzI4MG5vcnRoLmNvbS8NCiAgICBNSVQgTGljZW5zZS4gaHR0cDovL2dpdGh1Yi5jb20vMjgwbm9ydGgvbmFyd2hhbC9ibG9iL21hc3Rlci9SRUFETUUubWQNCiovDQoNCmRlZmluZSgnYWNlL2xpYi9lczUtc2hpbScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoNCi8qKg0KICogQnJpbmdzIGFuIGVudmlyb25tZW50IGFzIGNsb3NlIHRvIEVDTUFTY3JpcHQgNSBjb21wbGlhbmNlDQogKiBhcyBpcyBwb3NzaWJsZSB3aXRoIHRoZSBmYWNpbGl0aWVzIG9mIGVyc3R3aGlsZSBlbmdpbmVzLg0KICoNCiAqIEFubm90YXRlZCBFUzU6IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8gKHNwZWNpZmljIGxpbmtzIGJlbG93KQ0KICogRVM1IFNwZWM6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FY21hLTI2Mi5wZGYNCiAqDQogKiBAbW9kdWxlDQogKi8NCg0KLyp3aGF0c3VwZG9jKi8NCg0KLy8NCi8vIEZ1bmN0aW9uDQovLyA9PT09PT09PQ0KLy8NCg0KLy8gRVMtNSAxNS4zLjQuNQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMy40LjUNCg0KaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkgew0KICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8vIC5sZW5ndGggaXMgMQ0KICAgICAgICAvLyAxLiBMZXQgVGFyZ2V0IGJlIHRoZSB0aGlzIHZhbHVlLg0KICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsNCiAgICAgICAgLy8gMi4gSWYgSXNDYWxsYWJsZShUYXJnZXQpIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uDQogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KICAgICAgICAvLyAzLiBMZXQgQSBiZSBhIG5ldyAocG9zc2libHkgZW1wdHkpIGludGVybmFsIGxpc3Qgb2YgYWxsIG9mIHRoZQ0KICAgICAgICAvLyAgIGFyZ3VtZW50IHZhbHVlcyBwcm92aWRlZCBhZnRlciB0aGlzQXJnIChhcmcxLCBhcmcyIGV0YyksIGluIG9yZGVyLg0KICAgICAgICAvLyBYWFggc2xpY2VkQXJncyB3aWxsIHN0YW5kIGluIGZvciAiQSIgaWYgdXNlZA0KICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsDQogICAgICAgIC8vIDQuIExldCBGIGJlIGEgbmV3IG5hdGl2ZSBFQ01BU2NyaXB0IG9iamVjdC4NCiAgICAgICAgLy8gMTEuIFNldCB0aGUgW1tQcm90b3R5cGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRoZSBzdGFuZGFyZA0KICAgICAgICAvLyAgIGJ1aWx0LWluIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QgYXMgc3BlY2lmaWVkIGluIDE1LjMuMy4xLg0KICAgICAgICAvLyAxMi4gU2V0IHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbg0KICAgICAgICAvLyAgIDE1LjMuNC41LjEuDQogICAgICAgIC8vIDEzLiBTZXQgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW4NCiAgICAgICAgLy8gICAxNS4zLjQuNS4yLg0KICAgICAgICAvLyAxNC4gU2V0IHRoZSBbW0hhc0luc3RhbmNlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW4NCiAgICAgICAgLy8gICAxNS4zLjQuNS4zLg0KICAgICAgICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7DQoNCiAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHsNCiAgICAgICAgICAgICAgICAvLyAxNS4zLjQuNS4yIFtbQ29uc3RydWN0XV0NCiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwNCiAgICAgICAgICAgICAgICAvLyBGIHRoYXQgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGJpbmQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYQ0KICAgICAgICAgICAgICAgIC8vIGxpc3Qgb2YgYXJndW1lbnRzIEV4dHJhQXJncywgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46DQogICAgICAgICAgICAgICAgLy8gMS4gTGV0IHRhcmdldCBiZSB0aGUgdmFsdWUgb2YgRidzIFtbVGFyZ2V0RnVuY3Rpb25dXQ0KICAgICAgICAgICAgICAgIC8vICAgaW50ZXJuYWwgcHJvcGVydHkuDQogICAgICAgICAgICAgICAgLy8gMi4gSWYgdGFyZ2V0IGhhcyBubyBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCwgYQ0KICAgICAgICAgICAgICAgIC8vICAgVHlwZUVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24uDQogICAgICAgICAgICAgICAgLy8gMy4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwNCiAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5Lg0KICAgICAgICAgICAgICAgIC8vIDQuIExldCBhcmdzIGJlIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlDQogICAgICAgICAgICAgICAgLy8gICBsaXN0IGJvdW5kQXJncyBpbiB0aGUgc2FtZSBvcmRlciBmb2xsb3dlZCBieSB0aGUgc2FtZQ0KICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4NCiAgICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIA0KICAgICAgICAgICAgICAgIC8vICAgbWV0aG9kIG9mIHRhcmdldCBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLg0KDQogICAgICAgICAgICAgICAgdmFyIEYgPSBmdW5jdGlvbigpe307DQogICAgICAgICAgICAgICAgRi5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOw0KICAgICAgICAgICAgICAgIHZhciBzZWxmID0gbmV3IEY7DQoNCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KA0KICAgICAgICAgICAgICAgICAgICBzZWxmLA0KICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7DQoNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgLy8gMTUuMy40LjUuMSBbW0NhbGxdXQ0KICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwgRiwNCiAgICAgICAgICAgICAgICAvLyB3aGljaCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhDQogICAgICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcNCiAgICAgICAgICAgICAgICAvLyBzdGVwcyBhcmUgdGFrZW46DQogICAgICAgICAgICAgICAgLy8gMS4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwNCiAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5Lg0KICAgICAgICAgICAgICAgIC8vIDIuIExldCBib3VuZFRoaXMgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kVGhpc11dIGludGVybmFsDQogICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4NCiAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dIGludGVybmFsDQogICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4NCiAgICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSANCiAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1lIA0KICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4NCiAgICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QgDQogICAgICAgICAgICAgICAgLy8gICBvZiB0YXJnZXQgcHJvdmlkaW5nIGJvdW5kVGhpcyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgDQogICAgICAgICAgICAgICAgLy8gICBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLg0KDQogICAgICAgICAgICAgICAgLy8gZXF1aXY6IHRhcmdldC5jYWxsKHRoaXMsIC4uLmJvdW5kQXJncywgLi4uYXJncykNCiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KA0KICAgICAgICAgICAgICAgICAgICB0aGF0LA0KICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH07DQogICAgICAgIC8vIFhYWCBib3VuZC5sZW5ndGggaXMgbmV2ZXIgd3JpdGFibGUsIHNvIGRvbid0IGV2ZW4gdHJ5DQogICAgICAgIC8vDQogICAgICAgIC8vIDE1LiBJZiB0aGUgW1tDbGFzc11dIGludGVybmFsIHByb3BlcnR5IG9mIFRhcmdldCBpcyAiRnVuY3Rpb24iLCB0aGVuDQogICAgICAgIC8vICAgICBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUgbGVuZ3RoIG9mIEEuDQogICAgICAgIC8vICAgICBiLiBTZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byBlaXRoZXIgMCBvciBMLCB3aGljaGV2ZXIgaXMgDQogICAgICAgIC8vICAgICAgIGxhcmdlci4NCiAgICAgICAgLy8gMTYuIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC4NCiAgICAgICAgLy8gMTcuIFNldCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIHRoZSB2YWx1ZXMNCiAgICAgICAgLy8gICBzcGVjaWZpZWQgaW4gMTUuMy41LjEuDQoNCiAgICAgICAgLy8gVE9ETw0KICAgICAgICAvLyAxOC4gU2V0IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRydWUuDQogICAgICAgIA0KICAgICAgICAvLyBUT0RPDQogICAgICAgIC8vIDE5LiBMZXQgdGhyb3dlciBiZSB0aGUgW1tUaHJvd1R5cGVFcnJvcl1dIGZ1bmN0aW9uIE9iamVjdCAoMTMuMi4zKS4NCiAgICAgICAgLy8gMjAuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgRiB3aXRoIA0KICAgICAgICAvLyAgIGFyZ3VtZW50cyAiY2FsbGVyIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLCBbW1NldF1dOg0KICAgICAgICAvLyAgIHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LCBhbmQgDQogICAgICAgIC8vICAgZmFsc2UuDQogICAgICAgIC8vIDIxLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aCANCiAgICAgICAgLy8gICBhcmd1bWVudHMgImFyZ3VtZW50cyIsIFByb3BlcnR5RGVzY3JpcHRvciB7W1tHZXRdXTogdGhyb3dlciwgDQogICAgICAgIC8vICAgW1tTZXRdXTogdGhyb3dlciwgW1tFbnVtZXJhYmxlXV06IGZhbHNlLCBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZX0sDQogICAgICAgIC8vICAgYW5kIGZhbHNlLg0KDQogICAgICAgIC8vIFRPRE8NCiAgICAgICAgLy8gTk9URSBGdW5jdGlvbiBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgZG8gbm90IA0KICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5IG9yIHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJhbWV0ZXJzXV0sIGFuZA0KICAgICAgICAvLyBbW1Njb3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy4NCiAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0ZSBwcm90b3R5cGUgaW4gcHVyZS1qcy4NCg0KICAgICAgICAvLyAyMi4gUmV0dXJuIEYuDQogICAgICAgIHJldHVybiBib3VuZDsNCiAgICB9Ow0KfQ0KDQovLyBTaG9ydGN1dCB0byBhbiBvZnRlbiBhY2Nlc3NlZCBwcm9wZXJ0aWVzLCBpbiBvcmRlciB0byBhdm9pZCBtdWx0aXBsZQ0KLy8gZGVyZWZlcmVuY2UgdGhhdCBjb3N0cyB1bml2ZXJzYWxseS4NCi8vIF9QbGVhc2Ugbm90ZTogU2hvcnRjdXRzIGFyZSBkZWZpbmVkIGFmdGVyIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgYXMgd2UNCi8vIHVzIGl0IGluIGRlZmluaW5nIHNob3J0Y3V0cy4NCnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7DQp2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsNCnZhciBwcm90b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7DQp2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNsaWNlOw0KdmFyIHRvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsNCnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsNCg0KLy8gSWYgSlMgZW5naW5lIHN1cHBvcnRzIGFjY2Vzc29ycyBjcmVhdGluZyBzaG9ydGN1dHMuDQp2YXIgZGVmaW5lR2V0dGVyOw0KdmFyIGRlZmluZVNldHRlcjsNCnZhciBsb29rdXBHZXR0ZXI7DQp2YXIgbG9va3VwU2V0dGVyOw0KdmFyIHN1cHBvcnRzQWNjZXNzb3JzOw0KaWYgKChzdXBwb3J0c0FjY2Vzc29ycyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmluZUdldHRlcl9fIikpKSB7DQogICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOw0KICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsNCiAgICBsb29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7DQogICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOw0KfQ0KDQovLw0KLy8gQXJyYXkNCi8vID09PT09DQovLw0KDQovLyBFUzUgMTUuNC4zLjINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuMy4yDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5DQppZiAoIUFycmF5LmlzQXJyYXkpIHsNCiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsNCiAgICAgICAgcmV0dXJuIHRvU3RyaW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsNCiAgICB9Ow0KfQ0KDQovLyBUaGUgSXNDYWxsYWJsZSgpIGNoZWNrIGluIHRoZSBBcnJheSBmdW5jdGlvbnMNCi8vIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBzdHJpY3QgY2hlY2sgb24gdGhlDQovLyBpbnRlcm5hbCBjbGFzcyBvZiB0aGUgb2JqZWN0IHRvIHRyYXAgY2FzZXMgd2hlcmUNCi8vIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3YXMgYWN0dWFsbHkgYSByZWd1bGFyDQovLyBleHByZXNzaW9uIGxpdGVyYWwsIHdoaWNoIGluIFY4IGFuZA0KLy8gSmF2YVNjcmlwdENvcmUgaXMgYSB0eXBlb2YgImZ1bmN0aW9uIi4gIE9ubHkgaW4NCi8vIFY4IGFyZSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbHMgcGVybWl0dGVkIGFzDQovLyByZWR1Y2UgcGFyYW1ldGVycywgc28gaXQgaXMgZGVzaXJhYmxlIGluIHRoZQ0KLy8gZ2VuZXJhbCBjYXNlIGZvciB0aGUgc2hpbSB0byBtYXRjaCB0aGUgbW9yZQ0KLy8gc3RyaWN0IGFuZCBjb21tb24gYmVoYXZpb3Igb2YgcmVqZWN0aW5nIHJlZ3VsYXINCi8vIGV4cHJlc3Npb25zLg0KDQovLyBFUzUgMTUuNC40LjE4DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTgNCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2FycmF5L2ZvckVhY2gNCmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsNCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSwNCiAgICAgICAgICAgIGkgPSAwLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7DQogICAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGNhbGwsIHBhc3NpbmcgYXJndW1lbnRzOg0KICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHByb3BlcnR5IHZhbHVlLCBwcm9wZXJ0eSBrZXksIHRoaXNBcmcgb2JqZWN0IGNvbnRleHQNCiAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpKys7DQogICAgICAgIH0NCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuNC40LjE5DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTkNCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvbWFwDQppZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsNCiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsDQogICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLA0KICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpDQogICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4yMA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIwDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L2ZpbHRlcg0KaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7DQogICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHJlc3VsdCA9IFtdLA0KICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpKQ0KICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNlbGZbaV0pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNg0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE2DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9ldmVyeQ0KaWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHsNCiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZikpDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS40LjQuMTcNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNw0KLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc29tZQ0KaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgew0KICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7DQogICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksDQogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwNCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBzZWxmKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4yMQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIxDQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVjZQ0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7DQogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24NCiAgICAgICAgaWYgKHRvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgew0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIG5vIHZhbHVlIHRvIHJldHVybiBpZiBubyBpbml0aWFsIHZhbHVlIGFuZCBhbiBlbXB0eSBhcnJheQ0KICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KDQogICAgICAgIHZhciBpID0gMDsNCiAgICAgICAgdmFyIHJlc3VsdDsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgew0KICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytdOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJuDQogICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpDQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuNC40LjIyDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMjINCi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvcmVkdWNlUmlnaHQNCmlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KSB7DQogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8pIHsNCiAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwNCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOw0KDQogICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uDQogICAgICAgIGlmICh0b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCg0KICAgICAgICAvLyBubyB2YWx1ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkNCiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKQ0KICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UNCg0KICAgICAgICB2YXIgcmVzdWx0LCBpID0gbGVuZ3RoIC0gMTsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgew0KICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJuDQogICAgICAgICAgICAgICAgaWYgKC0taSA8IDApDQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGRvIHsNCiAgICAgICAgICAgIGlmIChpIGluIHRoaXMpDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIHNlbGYpOw0KICAgICAgICB9IHdoaWxlIChpLS0pOw0KDQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE0DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pbmRleE9mDQppZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7DQogICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgaWYgKCFsZW5ndGgpDQogICAgICAgICAgICByZXR1cm4gLTE7DQoNCiAgICAgICAgdmFyIGkgPSAwOw0KICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpDQogICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7DQoNCiAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMNCiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsNCiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gaTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gLTE7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjQuNC4xNQ0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE1DQovLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9sYXN0SW5kZXhPZg0KaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpIHsNCiAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgew0KICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLA0KICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7DQoNCiAgICAgICAgaWYgKCFsZW5ndGgpDQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTsNCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKQ0KICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsNCiAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMNCiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsNCiAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7DQogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkNCiAgICAgICAgICAgICAgICByZXR1cm4gaTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gLTE7DQogICAgfTsNCn0NCg0KLy8NCi8vIE9iamVjdA0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgMTUuMi4zLjINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4yDQppZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgew0KICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0vaXNzdWVzI2lzc3VlLzINCiAgICAvLyBodHRwOi8vZWpvaG4ub3JnL2Jsb2cvb2JqZWN0Z2V0cHJvdG90eXBlb2YvDQogICAgLy8gcmVjb21tZW5kZWQgYnkgZnNjaGFlZmVyIG9uIGdpdGh1Yg0KICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkgew0KICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoDQogICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IgPw0KICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSA6DQogICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdA0KICAgICAgICApOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMw0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjMNCmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgew0KICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhICIgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0OiAiOw0KICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgew0KICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsNCiAgICAgICAgLy8gSWYgb2JqZWN0IGRvZXMgbm90IG93bnMgcHJvcGVydHkgcmV0dXJuIHVuZGVmaW5lZCBpbW1lZGlhdGVseS4NCiAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKQ0KICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIsIHNldHRlcjsNCg0KICAgICAgICAvLyBJZiBvYmplY3QgaGFzIGEgcHJvcGVydHkgdGhlbiBpdCdzIGZvciBzdXJlIGJvdGggYGVudW1lcmFibGVgIGFuZA0KICAgICAgICAvLyBgY29uZmlndXJhYmxlYC4NCiAgICAgICAgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9Ow0KDQogICAgICAgIC8vIElmIEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvciBwcm9wZXJ0aWVzIHRoZW4gcHJvcGVydHkgbWF5IGJlIGENCiAgICAgICAgLy8gZ2V0dGVyIG9yIHNldHRlci4NCiAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7DQogICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBhIGdldHRlciBldmVuDQogICAgICAgICAgICAvLyBpZiBvYmplY3QgaGFzIG93biBub24gZ2V0dGVyIHByb3BlcnR5IGFsb25nIHdpdGggYSBzYW1lIG5hbWVkDQogICAgICAgICAgICAvLyBpbmhlcml0ZWQgZ2V0dGVyLiBUbyBhdm9pZCBtaXNiZWhhdmlvciB3ZSB0ZW1wb3JhcnkgcmVtb3ZlDQogICAgICAgICAgICAvLyBgX19wcm90b19fYCBzbyB0aGF0IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBnZXR0ZXIgb25seQ0KICAgICAgICAgICAgLy8gaWYgaXQncyBvd25lZCBieSBhbiBvYmplY3QuDQogICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsNCiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsNCg0KICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KTsNCiAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7DQoNCiAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSBnZXR0ZXIgYW5kIHNldHRlciB3ZSBjYW4gcHV0IHZhbHVlcyBiYWNrLg0KICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsNCg0KICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsNCiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjsNCiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsNCg0KICAgICAgICAgICAgICAgIC8vIElmIGl0IHdhcyBhY2Nlc3NvciBwcm9wZXJ0eSB3ZSdyZSBkb25lIGFuZCByZXR1cm4gaGVyZQ0KICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGFkZGluZyBgdmFsdWVgIHRvIHRoZSBkZXNjcmlwdG9yLg0KICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHdlIGtub3cgdGhhdCBvYmplY3QgaGFzIGFuIG93biBwcm9wZXJ0eSB0aGF0IGlzDQogICAgICAgIC8vIG5vdCBhbiBhY2Nlc3NvciBzbyB3ZSBzZXQgaXQgYXMgYSB2YWx1ZSBhbmQgcmV0dXJuIGRlc2NyaXB0b3IuDQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOw0KICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjQNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy40DQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7DQogICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgew0KICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjUNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy41DQppZiAoIU9iamVjdC5jcmVhdGUpIHsNCiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgew0KICAgICAgICB2YXIgb2JqZWN0Ow0KICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7DQogICAgICAgICAgICBvYmplY3QgPSB7ICJfX3Byb3RvX18iOiBudWxsIH07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSAhPSAib2JqZWN0IikNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7DQogICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9Ow0KICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7DQogICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOw0KICAgICAgICAgICAgLy8gSUUgaGFzIG5vIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgDQogICAgICAgICAgICAvLyBuZWl0aGVyIGBfX3Byb3RvX19gLCBidXQgdGhpcyBtYW51YWxseSBzZXR0aW5nIGBfX3Byb3RvX19gIHdpbGwNCiAgICAgICAgICAgIC8vIGd1YXJhbnRlZSB0aGF0IGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIHdpbGwgd29yayBhcyBleHBlY3RlZCB3aXRoDQogICAgICAgICAgICAvLyBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgYE9iamVjdC5jcmVhdGVgDQogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOw0KICAgICAgICB9DQogICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApDQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOw0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuNg0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjYNCg0KLy8gUGF0Y2ggZm9yIFdlYktpdCBhbmQgSUU4IHN0YW5kYXJkIG1vZGUNCi8vIERlc2lnbmVkIGJ5IGhheCA8aGF4LmdpdGh1Yi5jb20+DQovLyByZWxhdGVkIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGltL2lzc3VlcyNpc3N1ZS81DQovLyBJRTggUmVmZXJlbmNlOg0KLy8gICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDI4MjkwMC5hc3B4DQovLyAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2RkMjI5OTE2LmFzcHgNCi8vIFdlYktpdCBCdWdzOg0KLy8gICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQyMw0KDQpmdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCkgew0KICAgIHRyeSB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsICJzZW50aW5lbCIsIHt9KTsNCiAgICAgICAgcmV0dXJuICJzZW50aW5lbCIgaW4gb2JqZWN0Ow0KICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgew0KICAgICAgICAvLyByZXR1cm5zIGZhbHN5DQogICAgfQ0KfQ0KDQovLyBjaGVjayB3aGV0aGVyIGRlZmluZVByb3BlcnR5IHdvcmtzIGlmIGl0J3MgZ2l2ZW4uIE90aGVyd2lzZSwNCi8vIHNoaW0gcGFydGlhbGx5Lg0KaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgew0KICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTsNCiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tID0gdHlwZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiIHx8DQogICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOw0KICAgIGlmICghZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsNCiAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5RmFsbGJhY2sgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7DQogICAgfQ0KfQ0KDQppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7DQogICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7DQogICAgdmFyIEVSUl9OT05fT0JKRUNUX1RBUkdFVCA9ICJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICINCiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCAiICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOw0KDQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikgew0KICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7DQogICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOw0KDQogICAgICAgIC8vIG1ha2UgYSB2YWxpYW50IGF0dGVtcHQgdG8gdXNlIHRoZSByZWFsIGRlZmluZVByb3BlcnR5DQogICAgICAgIC8vIGZvciBJOCdzIERPTSBlbGVtZW50cy4NCiAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmplY3QsIG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpOw0KICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7DQogICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBzaGltIGlmIHRoZSByZWFsIG9uZSBkb2Vzbid0IHdvcmsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIElmIGl0J3MgYSBkYXRhIHByb3BlcnR5Lg0KICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAidmFsdWUiKSkgew0KICAgICAgICAgICAgLy8gZmFpbCBzaWxlbnRseSBpZiAid3JpdGFibGUiLCAiZW51bWVyYWJsZSIsIG9yICJjb25maWd1cmFibGUiDQogICAgICAgICAgICAvLyBhcmUgcmVxdWVzdGVkIGJ1dCBub3Qgc3VwcG9ydGVkDQogICAgICAgICAgICAvKg0KICAgICAgICAgICAgLy8gYWx0ZXJuYXRlIGFwcHJvYWNoOg0KICAgICAgICAgICAgaWYgKCAvLyBjYW4ndCBpbXBsZW1lbnQgdGhlc2UgZmVhdHVyZXM7IGFsbG93IGZhbHNlIGJ1dCBub3QgdHJ1ZQ0KICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAid3JpdGFibGUiKSA/IGRlc2NyaXB0b3Iud3JpdGFibGUgOiB0cnVlKSB8fA0KICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAiZW51bWVyYWJsZSIpID8gZGVzY3JpcHRvci5lbnVtZXJhYmxlIDogdHJ1ZSkgfHwNCiAgICAgICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgImNvbmZpZ3VyYWJsZSIpID8gZGVzY3JpcHRvci5jb25maWd1cmFibGUgOiB0cnVlKQ0KICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKA0KICAgICAgICAgICAgICAgICAgICAiVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgZG9lcyBub3QgIiArDQogICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSwgb3Igd3JpdGFibGUuIg0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAqLw0KDQogICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIC8vIEFzIGFjY2Vzc29ycyBhcmUgc3VwcG9ydGVkIG9ubHkgb24gZW5naW5lcyBpbXBsZW1lbnRpbmcNCiAgICAgICAgICAgICAgICAvLyBgX19wcm90b19fYCB3ZSBjYW4gc2FmZWx5IG92ZXJyaWRlIGBfX3Byb3RvX19gIHdoaWxlIGRlZmluaW5nDQogICAgICAgICAgICAgICAgLy8gYSBwcm9wZXJ0eSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBoaXQgYW4gaW5oZXJpdGVkDQogICAgICAgICAgICAgICAgLy8gYWNjZXNzb3IuDQogICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187DQogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0Ow0KICAgICAgICAgICAgICAgIC8vIERlbGV0aW5nIGEgcHJvcGVydHkgYW55d2F5IHNpbmNlIGdldHRlciAvIHNldHRlciBtYXkgYmUNCiAgICAgICAgICAgICAgICAvLyBkZWZpbmVkIG9uIG9iamVjdCBpdHNlbGYuDQogICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07DQogICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7DQogICAgICAgICAgICAgICAgLy8gU2V0dGluZyBvcmlnaW5hbCBgX19wcm90b19fYCBiYWNrIG5vdy4NCiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nlc3NvcnMpDQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQpOw0KICAgICAgICAgICAgLy8gSWYgd2UgZ290IHRoYXQgZmFyIHRoZW4gZ2V0dGVycyBhbmQgc2V0dGVycyBjYW4gYmUgZGVmaW5lZCAhIQ0KICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKQ0KICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7DQogICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAic2V0IikpDQogICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBvYmplY3Q7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjIuMy43DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNw0KaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcykgew0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsNCiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgew0KICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJvcGVydHkpKQ0KICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iamVjdDsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjgNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy44DQppZiAoIU9iamVjdC5zZWFsKSB7DQogICAgT2JqZWN0LnNlYWwgPSBmdW5jdGlvbiBzZWFsKG9iamVjdCkgew0KICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcgYW5kIGJyZWFrcyBmZWF0dXJlLWRldGVjdGlvbiwgYnV0DQogICAgICAgIC8vIGFsbG93cyAic2VjdXJhYmxlIiBjb2RlIHRvICJncmFjZWZ1bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcNCiAgICAgICAgLy8gYnV0IGluc2VjdXJlIGNvZGUuDQogICAgICAgIHJldHVybiBvYmplY3Q7DQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjIuMy45DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOQ0KaWYgKCFPYmplY3QuZnJlZXplKSB7DQogICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsNCiAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dA0KICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nDQogICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLg0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIGRldGVjdCBhIFJoaW5vIGJ1ZyBhbmQgcGF0Y2ggaXQNCnRyeSB7DQogICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7fSk7DQp9IGNhdGNoIChleGNlcHRpb24pIHsNCiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsNCiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7DQogICAgICAgICAgICB9DQogICAgICAgIH07DQogICAgfSkoT2JqZWN0LmZyZWV6ZSk7DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTANCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMA0KaWYgKCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHsNCiAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsNCiAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dA0KICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nDQogICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLg0KICAgICAgICByZXR1cm4gb2JqZWN0Ow0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTENCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMQ0KaWYgKCFPYmplY3QuaXNTZWFsZWQpIHsNCiAgICBPYmplY3QuaXNTZWFsZWQgPSBmdW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTINCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMg0KaWYgKCFPYmplY3QuaXNGcm96ZW4pIHsNCiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS4yLjMuMTMNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMw0KaWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKSB7DQogICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsNCiAgICAgICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0IHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4NCiAgICAgICAgaWYgKE9iamVjdChvYmplY3QpID09PSBvYmplY3QpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCiAgICAgICAgLy8gMi4gUmV0dXJuIHRoZSBCb29sZWFuIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLg0KICAgICAgICB2YXIgbmFtZSA9ICcnOw0KICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7DQogICAgICAgICAgICBuYW1lICs9ICc/JzsNCiAgICAgICAgfQ0KICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOw0KICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7DQogICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07DQogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsNCiAgICB9Ow0KfQ0KDQovLyBFUzUgMTUuMi4zLjE0DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTQNCmlmICghT2JqZWN0LmtleXMpIHsNCiAgICAvLyBodHRwOi8vd2hhdHRoZWhlYWRzYWlkLmNvbS8yMDEwLzEwL2Etc2FmZXItb2JqZWN0LWtleXMtY29tcGF0aWJpbGl0eS1pbXBsZW1lbnRhdGlvbg0KICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsDQogICAgICAgIGRvbnRFbnVtcyA9IFsNCiAgICAgICAgICAgICJ0b1N0cmluZyIsDQogICAgICAgICAgICAidG9Mb2NhbGVTdHJpbmciLA0KICAgICAgICAgICAgInZhbHVlT2YiLA0KICAgICAgICAgICAgImhhc093blByb3BlcnR5IiwNCiAgICAgICAgICAgICJpc1Byb3RvdHlwZU9mIiwNCiAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsDQogICAgICAgICAgICAiY29uc3RydWN0b3IiDQogICAgICAgIF0sDQogICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7DQoNCiAgICBmb3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KQ0KICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOw0KDQogICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgew0KDQogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsNCg0KICAgICAgICB2YXIga2V5cyA9IFtdOw0KICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgew0KICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgew0KICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChoYXNEb250RW51bUJ1Zykgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsNCiAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgew0KICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBrZXlzOw0KICAgIH07DQoNCn0NCg0KLy8NCi8vIERhdGUNCi8vID09PT0NCi8vDQoNCi8vIEVTNSAxNS45LjUuNDMNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40Mw0KLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHJlcHJlc2VudCB0aGUgaW5zdGFuY2UgaW4gdGltZSANCi8vIHJlcHJlc2VudGVkIGJ5IHRoaXMgRGF0ZSBvYmplY3QuIFRoZSBmb3JtYXQgb2YgdGhlIFN0cmluZyBpcyB0aGUgRGF0ZSBUaW1lIA0KLy8gc3RyaW5nIGZvcm1hdCBkZWZpbmVkIGluIDE1LjkuMS4xNS4gQWxsIGZpZWxkcyBhcmUgcHJlc2VudCBpbiB0aGUgU3RyaW5nLiANCi8vIFRoZSB0aW1lIHpvbmUgaXMgYWx3YXlzIFVUQywgZGVub3RlZCBieSB0aGUgc3VmZml4IFouIElmIHRoZSB0aW1lIHZhbHVlIG9mIA0KLy8gdGhpcyBvYmplY3QgaXMgbm90IGEgZmluaXRlIE51bWJlciBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4NCmlmICghRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgfHwgKG5ldyBEYXRlKC02MjE5ODc1NTIwMDAwMCkudG9JU09TdHJpbmcoKS5pbmRleE9mKCctMDAwMDAxJykgPT09IC0xKSkgew0KICAgIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nID0gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7DQogICAgICAgIHZhciByZXN1bHQsIGxlbmd0aCwgdmFsdWUsIHllYXI7DQogICAgICAgIGlmICghaXNGaW5pdGUodGhpcykpDQogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcjsNCg0KICAgICAgICAvLyB0aGUgZGF0ZSB0aW1lIHN0cmluZyBmb3JtYXQgaXMgc3BlY2lmaWVkIGluIDE1LjkuMS4xNS4NCiAgICAgICAgcmVzdWx0ID0gW3RoaXMuZ2V0VVRDTW9udGgoKSArIDEsIHRoaXMuZ2V0VVRDRGF0ZSgpLA0KICAgICAgICAgICAgdGhpcy5nZXRVVENIb3VycygpLCB0aGlzLmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5nZXRVVENTZWNvbmRzKCldOw0KICAgICAgICB5ZWFyID0gdGhpcy5nZXRVVENGdWxsWWVhcigpOw0KICAgICAgICB5ZWFyID0gKHllYXIgPCAwID8gJy0nIDogKHllYXIgPiA5OTk5ID8gJysnIDogJycpKSArICgnMDAwMDAnICsgTWF0aC5hYnMoeWVhcikpLnNsaWNlKDAgPD0geWVhciAmJiB5ZWFyIDw9IDk5OTkgPyAtNCA6IC02KTsNCg0KICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoOw0KICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsNCiAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0W2xlbmd0aF07DQogICAgICAgICAgICAvLyBwYWQgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgdG8gaGF2ZSB0d28gZGlnaXRzLg0KICAgICAgICAgICAgaWYgKHZhbHVlIDwgMTApDQogICAgICAgICAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSAiMCIgKyB2YWx1ZTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBwYWQgbWlsbGlzZWNvbmRzIHRvIGhhdmUgdGhyZWUgZGlnaXRzLg0KICAgICAgICByZXR1cm4geWVhciArICItIiArIHJlc3VsdC5zbGljZSgwLCAyKS5qb2luKCItIikgKyAiVCIgKyByZXN1bHQuc2xpY2UoMikuam9pbigiOiIpICsgIi4iICsNCiAgICAgICAgICAgICgiMDAwIiArIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLnNsaWNlKC0zKSArICJaIjsNCiAgICB9DQp9DQoNCi8vIEVTNSAxNS45LjQuNA0KLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjQNCmlmICghRGF0ZS5ub3cpIHsNCiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsNCiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOw0KICAgIH07DQp9DQoNCi8vIEVTNSAxNS45LjUuNDQNCi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40NA0KLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIERhdGUgb2JqZWN0IGZvciB1c2UgYnkgDQovLyBKU09OLnN0cmluZ2lmeSAoMTUuMTIuMykuDQppZiAoIURhdGUucHJvdG90eXBlLnRvSlNPTikgew0KICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHsNCiAgICAgICAgLy8gV2hlbiB0aGUgdG9KU09OIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudCBrZXksIHRoZSBmb2xsb3dpbmcgDQogICAgICAgIC8vIHN0ZXBzIGFyZSB0YWtlbjoNCg0KICAgICAgICAvLyAxLiAgTGV0IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0LCBnaXZpbmcgaXQgdGhlIHRoaXMNCiAgICAgICAgLy8gdmFsdWUgYXMgaXRzIGFyZ3VtZW50Lg0KICAgICAgICAvLyAyLiBMZXQgdHYgYmUgVG9QcmltaXRpdmUoTywgaGludCBOdW1iZXIpLg0KICAgICAgICAvLyAzLiBJZiB0diBpcyBhIE51bWJlciBhbmQgaXMgbm90IGZpbml0ZSwgcmV0dXJuIG51bGwuDQogICAgICAgIC8vIFhYWA0KICAgICAgICAvLyA0LiBMZXQgdG9JU08gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZg0KICAgICAgICAvLyBPIHdpdGggYXJndW1lbnQgInRvSVNPU3RyaW5nIi4NCiAgICAgICAgLy8gNS4gSWYgSXNDYWxsYWJsZSh0b0lTTykgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4NCiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvSVNPU3RyaW5nICE9ICJmdW5jdGlvbiIpDQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQ0KICAgICAgICAvLyA2LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YNCiAgICAgICAgLy8gIHRvSVNPIHdpdGggTyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnQgbGlzdC4NCiAgICAgICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTsNCg0KICAgICAgICAvLyBOT1RFIDEgVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuDQoNCiAgICAgICAgLy8gTk9URSAyIFRoZSB0b0pTT04gZnVuY3Rpb24gaXMgaW50ZW50aW9uYWxseSBnZW5lcmljOyBpdCBkb2VzIG5vdA0KICAgICAgICAvLyByZXF1aXJlIHRoYXQgaXRzIHRoaXMgdmFsdWUgYmUgYSBEYXRlIG9iamVjdC4gVGhlcmVmb3JlLCBpdCBjYW4gYmUNCiAgICAgICAgLy8gdHJhbnNmZXJyZWQgdG8gb3RoZXIga2luZHMgb2Ygb2JqZWN0cyBmb3IgdXNlIGFzIGEgbWV0aG9kLiBIb3dldmVyLA0KICAgICAgICAvLyBpdCBkb2VzIHJlcXVpcmUgdGhhdCBhbnkgc3VjaCBvYmplY3QgaGF2ZSBhIHRvSVNPU3RyaW5nIG1ldGhvZC4gQW4NCiAgICAgICAgLy8gb2JqZWN0IGlzIGZyZWUgdG8gdXNlIHRoZSBhcmd1bWVudCBrZXkgdG8gZmlsdGVyIGl0cw0KICAgICAgICAvLyBzdHJpbmdpZmljYXRpb24uDQogICAgfTsNCn0NCg0KLy8gRVM1IDE1LjkuNC4yDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjQuMg0KLy8gYmFzZWQgb24gd29yayBzaGFyZWQgYnkgRGFuaWVsIEZyaWVzZW4gKGRhbnRtYW4pDQovLyBodHRwOi8vZ2lzdC5naXRodWIuY29tLzMwMzI0OQ0KaWYgKERhdGUucGFyc2UoIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWiIpICE9PSA4LjY0ZTE1KSB7DQogICAgLy8gWFhYIGdsb2JhbCBhc3NpZ25tZW50IHdvbid0IHdvcmsgaW4gZW1iZWRkaW5ncyB0aGF0IHVzZQ0KICAgIC8vIGFuIGFsdGVybmF0ZSBvYmplY3QgZm9yIHRoZSBjb250ZXh0Lg0KICAgIERhdGUgPSAoZnVuY3Rpb24oTmF0aXZlRGF0ZSkgew0KDQogICAgICAgIC8vIERhdGUubGVuZ3RoID09PSA3DQogICAgICAgIHZhciBEYXRlID0gZnVuY3Rpb24gRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgew0KICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7DQogICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZURhdGUpIHsNCiAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IGxlbmd0aCA9PSAxICYmIFN0cmluZyhZKSA9PT0gWSA/IC8vIGlzU3RyaW5nKFkpDQogICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4cGxpY2l0bHkgcGFzcyBpdCB0aHJvdWdoIHBhcnNlOg0KICAgICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZShEYXRlLnBhcnNlKFkpKSA6DQogICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgbWFrZSBjYWxscyBkZXBlbmRpbmcgb24gYXJndW1lbnQNCiAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIGhlcmUNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDcgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgOg0KICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNiA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgsIG0sIHMpIDoNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDUgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtKSA6DQogICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA0ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCkgOg0KICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gMyA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQpIDoNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDIgPyBuZXcgTmF0aXZlRGF0ZShZLCBNKSA6DQogICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSAxID8gbmV3IE5hdGl2ZURhdGUoWSkgOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOYXRpdmVEYXRlKCk7DQogICAgICAgICAgICAgICAgLy8gUHJldmVudCBtaXh1cHMgd2l0aCB1bmZpeGVkIERhdGUgb2JqZWN0DQogICAgICAgICAgICAgICAgZGF0ZS5jb25zdHJ1Y3RvciA9IERhdGU7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOw0KICAgICAgICB9Ow0KDQogICAgICAgIC8vIDE1LjkuMS4xNSBEYXRlIFRpbWUgU3RyaW5nIEZvcm1hdC4NCiAgICAgICAgdmFyIGlzb0RhdGVFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgiXiIgKw0KICAgICAgICAgICAgIihcXGR7NH18W1wrXC1dXFxkezZ9KSIgKyAvLyBmb3VyLWRpZ2l0IHllYXIgY2FwdHVyZSBvciBzaWduICsgNi1kaWdpdCBleHRlbmRlZCB5ZWFyDQogICAgICAgICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIG1vbnRoIGNhcHR1cmUNCiAgICAgICAgICAgICIoPzotKFxcZHsyfSkiICsgLy8gb3B0aW9uYWwgZGF5IGNhcHR1cmUNCiAgICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVyZSBob3VyczptaW51dGVzOnNlY29uZHMubWlsbGlzZWNvbmRzDQogICAgICAgICAgICAgICAgIlQoXFxkezJ9KSIgKyAvLyBob3VycyBjYXB0dXJlDQogICAgICAgICAgICAgICAgIjooXFxkezJ9KSIgKyAvLyBtaW51dGVzIGNhcHR1cmUNCiAgICAgICAgICAgICAgICAiKD86IiArIC8vIG9wdGlvbmFsIDpzZWNvbmRzLm1pbGxpc2Vjb25kcw0KICAgICAgICAgICAgICAgICAgICAiOihcXGR7Mn0pIiArIC8vIHNlY29uZHMgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICAgICAiKD86XFwuKFxcZHszfSkpPyIgKyAvLyBtaWxsaXNlY29uZHMgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICIpPyIgKw0KICAgICAgICAgICAgIig/OiIgKyAvLyBjYXB0dXJlIFVUQyBvZmZzZXQgY29tcG9uZW50DQogICAgICAgICAgICAgICAgIlp8IiArIC8vIFVUQyBjYXB0dXJlDQogICAgICAgICAgICAgICAgIig/OiIgKyAvLyBvZmZzZXQgc3BlY2lmaWVyICsvLWhvdXJzOm1pbnV0ZXMNCiAgICAgICAgICAgICAgICAgICAgIihbLStdKSIgKyAvLyBzaWduIGNhcHR1cmUNCiAgICAgICAgICAgICAgICAgICAgIihcXGR7Mn0pIiArIC8vIGhvdXJzIG9mZnNldCBjYXB0dXJlDQogICAgICAgICAgICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBvZmZzZXQgY2FwdHVyZQ0KICAgICAgICAgICAgICAgICIpIiArDQogICAgICAgICAgICAiKT8pPyk/KT8iICsNCiAgICAgICAgIiQiKTsNCg0KICAgICAgICAvLyBDb3B5IGFueSBjdXN0b20gbWV0aG9kcyBhIDNyZCBwYXJ0eSBsaWJyYXJ5IG1heSBoYXZlIGFkZGVkDQogICAgICAgIGZvciAodmFyIGtleSBpbiBOYXRpdmVEYXRlKQ0KICAgICAgICAgICAgRGF0ZVtrZXldID0gTmF0aXZlRGF0ZVtrZXldOw0KDQogICAgICAgIC8vIENvcHkgIm5hdGl2ZSIgbWV0aG9kcyBleHBsaWNpdGx5OyB0aGV5IG1heSBiZSBub24tZW51bWVyYWJsZQ0KICAgICAgICBEYXRlLm5vdyA9IE5hdGl2ZURhdGUubm93Ow0KICAgICAgICBEYXRlLlVUQyA9IE5hdGl2ZURhdGUuVVRDOw0KICAgICAgICBEYXRlLnByb3RvdHlwZSA9IE5hdGl2ZURhdGUucHJvdG90eXBlOw0KICAgICAgICBEYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERhdGU7DQoNCiAgICAgICAgLy8gVXBncmFkZSBEYXRlLnBhcnNlIHRvIGhhbmRsZSBzaW1wbGlmaWVkIElTTyA4NjAxIHN0cmluZ3MNCiAgICAgICAgRGF0ZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHN0cmluZykgew0KICAgICAgICAgICAgdmFyIG1hdGNoID0gaXNvRGF0ZUV4cHJlc3Npb24uZXhlYyhzdHJpbmcpOw0KICAgICAgICAgICAgaWYgKG1hdGNoKSB7DQogICAgICAgICAgICAgICAgbWF0Y2guc2hpZnQoKTsgLy8ga2lsbCBtYXRjaFswXSwgdGhlIGZ1bGwgbWF0Y2gNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgbWlsbGlzZWNvbmRzDQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkNCiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSArKG1hdGNoW2ldIHx8IChpIDwgMyA/IDEgOiAwKSk7DQogICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzFdIGlzIHRoZSBtb250aC4gTW9udGhzIGFyZSAwLTExIGluIEphdmFTY3JpcHQNCiAgICAgICAgICAgICAgICAgICAgLy8gYERhdGVgIG9iamVjdHMsIGJ1dCAxLTEyIGluIElTTyBub3RhdGlvbiwgc28gd2UNCiAgICAgICAgICAgICAgICAgICAgLy8gZGVjcmVtZW50Lg0KICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0tLTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUgVVRDIG9mZnNldCBjb21wb25lbnQNCiAgICAgICAgICAgICAgICB2YXIgbWludXRlT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBob3VyT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBzaWduID0gbWF0Y2gucG9wKCk7DQoNCiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBleHBsaWNpdCB0aW1lIHpvbmUgb2Zmc2V0IGlmIHNwZWNpZmllZA0KICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwOw0KICAgICAgICAgICAgICAgIGlmIChzaWduKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIGRldGVjdCBpbnZhbGlkIG9mZnNldHMgYW5kIHJldHVybiBlYXJseQ0KICAgICAgICAgICAgICAgICAgICBpZiAoaG91ck9mZnNldCA+IDIzIHx8IG1pbnV0ZU9mZnNldCA+IDU5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBleHByZXNzIHRoZSBwcm92aWRlZCB0aW1lIHpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMuIFRoZSBvZmZzZXQgaXMNCiAgICAgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgZm9yIHRpbWUgem9uZXMgd2VzdCBvZiBVVEM7IHBvc2l0aXZlIG90aGVyd2lzZS4NCiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldCkgKiA2ZTQgKiAoc2lnbiA9PSAiKyIgPyAtMSA6IDEpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIERhdGUuVVRDIGZvciB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGNvbnZlcnRzIHllYXIgdG8gMTkwMCArIHllYXINCiAgICAgICAgICAgICAgICAvLyBUaGUgR3JlZ29yaWFuIGNhbGVuZGFyIGhhcyBhIDQwMC15ZWFyIGN5Y2xlLCBzbyANCiAgICAgICAgICAgICAgICAvLyB0byBEYXRlLlVUQyh5ZWFyICsgNDAwLCAuLi4uICkgLSAxMjYyMjc4MDgwMDAwMCA9PSBEYXRlLlVUQyh5ZWFyLCAuLi4pLA0KICAgICAgICAgICAgICAgIC8vIHdoZXJlIDEyNjIyNzgwODAwMDAwIC0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBHcmVnb3JpYW4gY2FsZW5kYXIgNDAwIHllYXJzDQogICAgICAgICAgICAgICAgdmFyIHllYXIgPSArbWF0Y2hbMF07DQogICAgICAgICAgICAgICAgaWYgKDAgPD0geWVhciAmJiB5ZWFyIDw9IDk5KSB7DQogICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0geWVhciArIDQwMDsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuVVRDLmFwcGx5KHRoaXMsIG1hdGNoKSArIG9mZnNldCAtIDEyNjIyNzgwODAwMDAwOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgYSBuZXcgVVRDIGRhdGUgdmFsdWUsIGFjY291bnRpbmcgZm9yIHRoZSBvcHRpb25hbCBvZmZzZXQNCiAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5VVEMuYXBwbHkodGhpcywgbWF0Y2gpICsgb2Zmc2V0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsNCiAgICAgICAgfTsNCg0KICAgICAgICByZXR1cm4gRGF0ZTsNCiAgICB9KShEYXRlKTsNCn0NCg0KLy8NCi8vIFN0cmluZw0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgMTUuNS40LjIwDQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMjANCnZhciB3cyA9ICJceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArDQogICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKw0KICAgICJcdTIwMjlcdUZFRkYiOw0KaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7DQogICAgLy8gaHR0cDovL2Jsb2cuc3RldmVubGV2aXRoYW4uY29tL2FyY2hpdmVzL2Zhc3Rlci10cmltLWphdmFzY3JpcHQNCiAgICAvLyBodHRwOi8vcGVyZmVjdGlvbmtpbGxzLmNvbS93aGl0ZXNwYWNlLWRldmlhdGlvbnMvDQogICAgd3MgPSAiWyIgKyB3cyArICJdIjsNCiAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3cyArIHdzICsgIioiKSwNCiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArICIqJCIpOw0KICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7DQogICAgICAgIHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsNCiAgICB9Ow0KfQ0KDQovLw0KLy8gVXRpbA0KLy8gPT09PT09DQovLw0KDQovLyBFUzUgOS40DQovLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjQNCi8vIGh0dHA6Ly9qc3BlcmYuY29tL3RvLWludGVnZXINCnZhciB0b0ludGVnZXIgPSBmdW5jdGlvbiAobikgew0KICAgIG4gPSArbjsNCiAgICBpZiAobiAhPT0gbikgLy8gaXNOYU4NCiAgICAgICAgbiA9IDA7DQogICAgZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9PSAtKDEvMCkpDQogICAgICAgIG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7DQogICAgcmV0dXJuIG47DQp9Ow0KDQp2YXIgcHJlcGFyZVN0cmluZyA9ICJhIlswXSAhPSAiYSIsDQogICAgLy8gRVM1IDkuOQ0KICAgIC8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDkuOQ0KICAgIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsNCiAgICAgICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQNCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlDQogICAgICAgIH0NCiAgICAgICAgLy8gSWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBieS1pbmRleCBhY2Nlc3Mgb2YNCiAgICAgICAgLy8gc3RyaW5nIGNoYXJhY3RlcnMgKGV4LiBJRSA8IDcpLCBzcGxpdCB0aGUgc3RyaW5nDQogICAgICAgIGlmIChwcmVwYXJlU3RyaW5nICYmIHR5cGVvZiBvID09ICJzdHJpbmciICYmIG8pIHsNCiAgICAgICAgICAgIHJldHVybiBvLnNwbGl0KCIiKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gT2JqZWN0KG8pOw0KICAgIH07DQp9KTsvKiB2aW06dHM9NDpzdHM9NDpzdz00Og0KICogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKg0KICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xDQogKg0KICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KICoNCiAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsDQogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCiAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogKiBMaWNlbnNlLg0KICoNCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIEFqYXgub3JnIENvZGUgRWRpdG9yIChBQ0UpLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQWpheC5vcmcgQi5WLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMA0KICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIENvbnRyaWJ1dG9yKHMpOg0KICogICAgICBGYWJpYW4gSmFrb2JzIDxmYWJpYW4gQVQgYWpheCBET1Qgb3JnPg0KICogICAgICBJcmFrbGkgR296YWxpc2h2aWxpIDxyZm9iaWNAZ21haWwuY29tPiAoaHR0cDovL2plZGl0b29sa2l0LmNvbSkNCiAqICAgICAgTWlrZSBkZSBCb2VyIDxtaWtlIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsNCg0KRXZlbnRFbWl0dGVyLl9lbWl0ID0NCkV2ZW50RW1pdHRlci5fZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZSkgew0KICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9Ow0KICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVycyB8fCB7fTsNCg0KICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gfHwgW107DQogICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV07DQogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikNCiAgICAgICAgcmV0dXJuOw0KDQogICAgZSA9IGUgfHwge307DQogICAgZS50eXBlID0gZXZlbnROYW1lOw0KICAgIA0KICAgIGlmICghZS5zdG9wUHJvcGFnYXRpb24pIHsNCiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsNCiAgICAgICAgfTsNCiAgICB9DQogICAgDQogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KSB7DQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7DQogICAgICAgIH07DQogICAgfQ0KDQogICAgZm9yICh2YXIgaT0wOyBpPGxpc3RlbmVycy5sZW5ndGg7IGkrKykgew0KICAgICAgICBsaXN0ZW5lcnNbaV0oZSk7DQogICAgICAgIGlmIChlLnByb3BhZ2F0aW9uU3RvcHBlZCkNCiAgICAgICAgICAgIGJyZWFrOw0KICAgIH0NCiAgICANCiAgICBpZiAoZGVmYXVsdEhhbmRsZXIgJiYgIWUuZGVmYXVsdFByZXZlbnRlZCkNCiAgICAgICAgZGVmYXVsdEhhbmRsZXIoZSk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8IHt9Ow0KICAgIA0KICAgIGlmICh0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXSkNCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVmYXVsdCBoYW5kbGVyIGZvciAnIiArIGV2ZW50TmFtZSArICInIGlzIGFscmVhZHkgc2V0Iik7DQogICAgICAgIA0KICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gY2FsbGJhY2s7DQp9Ow0KDQpFdmVudEVtaXR0ZXIub24gPQ0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307DQoNCiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOw0KICAgIGlmICghbGlzdGVuZXJzKQ0KICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107DQoNCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQ0KICAgICAgICBsaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQ0KRXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7DQogICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307DQoNCiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOw0KICAgIGlmICghbGlzdGVuZXJzKQ0KICAgICAgICByZXR1cm47DQoNCiAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjayk7DQogICAgaWYgKGluZGV4ICE9PSAtMSkNCiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7DQp9Ow0KDQpFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7DQogICAgaWYgKHRoaXMuX2V2ZW50UmVnaXN0cnkpIHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdOw0KfTsNCg0KZXhwb3J0cy5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7DQoNCn0pOy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9saWIvb29wJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KZXhwb3J0cy5pbmhlcml0cyA9IChmdW5jdGlvbigpIHsNCiAgICB2YXIgdGVtcEN0b3IgPSBmdW5jdGlvbigpIHt9Ow0KICAgIHJldHVybiBmdW5jdGlvbihjdG9yLCBzdXBlckN0b3IpIHsNCiAgICAgICAgdGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTsNCiAgICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3IucHJvdG90eXBlOw0KICAgICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyB0ZW1wQ3RvcigpOw0KICAgICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7DQogICAgfTsNCn0oKSk7DQoNCmV4cG9ydHMubWl4aW4gPSBmdW5jdGlvbihvYmosIG1peGluKSB7DQogICAgZm9yICh2YXIga2V5IGluIG1peGluKSB7DQogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsNCiAgICB9DQp9Ow0KDQpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgew0KICAgIGV4cG9ydHMubWl4aW4ocHJvdG8sIG1peGluKTsNCn07DQoNCn0pOw0KLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKg0KICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xDQogKg0KICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KICoNCiAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsDQogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCiAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogKiBMaWNlbnNlLg0KICoNCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIEFqYXgub3JnIENvZGUgRWRpdG9yIChBQ0UpLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQWpheC5vcmcgQi5WLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMA0KICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIENvbnRyaWJ1dG9yKHMpOg0KICogICAgICBGYWJpYW4gSmFrb2JzIDxmYWJpYW4gQVQgYWpheCBET1Qgb3JnPg0KICoNCiAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mDQogKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3INCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLA0KICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQNCiAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5DQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvDQogKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cg0KICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UNCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlDQogKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyDQogKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLg0KICoNCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovDQogDQpkZWZpbmUoJ2FjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uvd29ya2VyL21pcnJvcicsICdhY2Uvd29ya2VyL2pzaGludCcsICdhY2UvbmFyY2lzc3VzL2pzcGFyc2UnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQogICAgDQp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOw0KdmFyIE1pcnJvciA9IHJlcXVpcmUoIi4uL3dvcmtlci9taXJyb3IiKS5NaXJyb3I7DQp2YXIgbGludCA9IHJlcXVpcmUoIi4uL3dvcmtlci9qc2hpbnQiKS5KU0hJTlQ7DQogICAgDQp2YXIgSmF2YVNjcmlwdFdvcmtlciA9IGV4cG9ydHMuSmF2YVNjcmlwdFdvcmtlciA9IGZ1bmN0aW9uKHNlbmRlcikgew0KICAgIE1pcnJvci5jYWxsKHRoaXMsIHNlbmRlcik7DQogICAgdGhpcy5zZXRUaW1lb3V0KDUwMCk7DQp9Ow0KDQpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdFdvcmtlciwgTWlycm9yKTsNCg0KKGZ1bmN0aW9uKCkgew0KICAgIA0KICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5kb2MuZ2V0VmFsdWUoKTsNCiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eIyEuKlxuLywgIlxuIik7DQogICAgICAgIA0KLy8gICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCk7DQogICAgICAgIHZhciBwYXJzZXIgPSByZXF1aXJlKCIuLi9uYXJjaXNzdXMvanNwYXJzZSIpOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgcGFyc2VyLnBhcnNlKHZhbHVlKTsNCiAgICAgICAgfSBjYXRjaChlKSB7DQovLyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJuYXJjaXNzdXMiKQ0KLy8gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsNCiAgICAgICAgICAgIHZhciBjaHVua3MgPSBlLm1lc3NhZ2Uuc3BsaXQoIjoiKQ0KICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBjaHVua3MucG9wKCkudHJpbSgpOw0KICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBwYXJzZUludChjaHVua3MucG9wKCkudHJpbSgpKSAtIDE7DQogICAgICAgICAgICB0aGlzLnNlbmRlci5lbWl0KCJuYXJjaXNzdXMiLCB7DQogICAgICAgICAgICAgICAgcm93OiBsaW5lTnVtYmVyLA0KICAgICAgICAgICAgICAgIGNvbHVtbjogbnVsbCwgLy8gVE9ETyBjb252ZXJ0IGUuY3Vyc29yDQogICAgICAgICAgICAgICAgdGV4dDogbWVzc2FnZSwNCiAgICAgICAgICAgICAgICB0eXBlOiAiZXJyb3IiDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfSBmaW5hbGx5IHsNCi8vICAgICAgICAgICAgY29uc29sZS5sb2coInBhcnNlIHRpbWU6ICIgKyAobmV3IERhdGUoKSAtIHN0YXJ0KSk7DQogICAgICAgIH0NCiAgICAgICAgDQovLyAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsNCi8vICAgICAgICBjb25zb2xlLmxvZygianNsaW50IikNCiAgICAgICAgbGludCh2YWx1ZSwge3VuZGVmOiBmYWxzZSwgb25ldmFyOiBmYWxzZSwgcGFzc2ZhaWw6IGZhbHNlfSk7DQogICAgICAgIHRoaXMuc2VuZGVyLmVtaXQoImpzbGludCIsIGxpbnQuZXJyb3JzKTsgICAgICAgIA0KLy8gICAgICAgIGNvbnNvbGUubG9nKCJsaW50IHRpbWU6ICIgKyAobmV3IERhdGUoKSAtIHN0YXJ0KSk7DQogICAgfQ0KICAgIA0KfSkuY2FsbChKYXZhU2NyaXB0V29ya2VyLnByb3RvdHlwZSk7DQoNCn0pO2RlZmluZSgnYWNlL3dvcmtlci9taXJyb3InLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9kb2N1bWVudCcsICdhY2UvbGliL2xhbmcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoidXNlIHN0cmljdCI7DQoNCnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7DQp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7DQogICAgDQp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsNCiAgICB0aGlzLnNlbmRlciA9IHNlbmRlcjsNCiAgICB2YXIgZG9jID0gdGhpcy5kb2MgPSBuZXcgRG9jdW1lbnQoIiIpOw0KICAgIA0KICAgIHZhciBkZWZlcnJlZFVwZGF0ZSA9IHRoaXMuZGVmZXJyZWRVcGRhdGUgPSBsYW5nLmRlZmVycmVkQ2FsbCh0aGlzLm9uVXBkYXRlLmJpbmQodGhpcykpOw0KICAgIA0KICAgIHZhciBfc2VsZiA9IHRoaXM7DQogICAgc2VuZGVyLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbihlKSB7DQogICAgICAgIGRvYy5hcHBseURlbHRhcyhbZS5kYXRhXSk7ICAgICAgICANCiAgICAgICAgZGVmZXJyZWRVcGRhdGUuc2NoZWR1bGUoX3NlbGYuJHRpbWVvdXQpOw0KICAgIH0pOw0KfTsNCg0KKGZ1bmN0aW9uKCkgew0KICAgIA0KICAgIHRoaXMuJHRpbWVvdXQgPSA1MDA7DQogICAgDQogICAgdGhpcy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24odGltZW91dCkgew0KICAgICAgICB0aGlzLiR0aW1lb3V0ID0gdGltZW91dDsNCiAgICB9Ow0KICAgIA0KICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgew0KICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7DQogICAgICAgIHRoaXMuZGVmZXJyZWRVcGRhdGUuc2NoZWR1bGUodGhpcy4kdGltZW91dCk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oY2FsbGJhY2tJZCkgew0KICAgICAgICB0aGlzLnNlbmRlci5jYWxsYmFjayh0aGlzLmRvYy5nZXRWYWx1ZSgpLCBjYWxsYmFja0lkKTsNCiAgICB9Ow0KICAgIA0KICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgLy8gYWJzdHJhY3QgbWV0aG9kDQogICAgfTsNCiAgICANCn0pLmNhbGwoTWlycm9yLnByb3RvdHlwZSk7DQoNCn0pOy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9kb2N1bWVudCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJywgJ2FjZS9yYW5nZScsICdhY2UvYW5jaG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KInVzZSBzdHJpY3QiOw0KDQp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7DQp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsNCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsNCnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsNCg0KdmFyIERvY3VtZW50ID0gZnVuY3Rpb24odGV4dCkgew0KICAgIHRoaXMuJGxpbmVzID0gW107DQoNCiAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSkgew0KICAgICAgICB0aGlzLmluc2VydExpbmVzKDAsIHRleHQpOw0KICAgIH0NCiAgICAvLyBUaGVyZSBoYXMgdG8gYmUgb25lIGxpbmUgYXQgbGVhc3QgaW4gdGhlIGRvY3VtZW50LiBJZiB5b3UgcGFzcyBhbiBlbXB0eQ0KICAgIC8vIHN0cmluZyB0byB0aGUgaW5zZXJ0IGZ1bmN0aW9uLCBub3RoaW5nIHdpbGwgaGFwcGVuLiBXb3JrYXJvdW5kLg0KICAgIGVsc2UgaWYgKHRleHQubGVuZ3RoID09IDApIHsNCiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IDAsIGNvbHVtbjowfSwgdGV4dCk7DQogICAgfQ0KfTsNCg0KKGZ1bmN0aW9uKCkgew0KDQogICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOw0KDQogICAgdGhpcy5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHRleHQpIHsNCiAgICAgICAgdmFyIGxlbiA9IHRoaXMuZ2V0TGVuZ3RoKCk7DQogICAgICAgIHRoaXMucmVtb3ZlKG5ldyBSYW5nZSgwLCAwLCBsZW4sIHRoaXMuZ2V0TGluZShsZW4tMSkubGVuZ3RoKSk7DQogICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IDAsIGNvbHVtbjowfSwgdGV4dCk7DQogICAgfTsNCg0KICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsNCiAgICB9Ow0KDQogICAgdGhpcy5jcmVhdGVBbmNob3IgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLCByb3csIGNvbHVtbik7DQogICAgfTsNCg0KICAgIC8vIGNoZWNrIGZvciBJRSBzcGxpdCBidWcNCiAgICBpZiAoImFhYSIuc3BsaXQoL2EvKS5sZW5ndGggPT0gMCkNCiAgICAgICAgdGhpcy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7DQogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOw0KICAgICAgICB9DQogICAgZWxzZQ0KICAgICAgICB0aGlzLiRzcGxpdCA9IGZ1bmN0aW9uKHRleHQpIHsNCiAgICAgICAgICAgIHJldHVybiB0ZXh0LnNwbGl0KC9cclxufFxyfFxuLyk7DQogICAgICAgIH07DQoNCg0KICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7DQogICAgICAgIHZhciBtYXRjaCA9IHRleHQubWF0Y2goL14uKj8oXHJcbnxccnxcbikvbSk7DQogICAgICAgIGlmIChtYXRjaCkgew0KICAgICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSBtYXRjaFsxXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gIlxuIjsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsNCiAgICAgIHN3aXRjaCAodGhpcy4kbmV3TGluZU1vZGUpIHsNCiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoNCiAgICAgICAgICAgICAgcmV0dXJuICJcclxuIjsNCg0KICAgICAgICAgIGNhc2UgInVuaXgiOg0KICAgICAgICAgICAgICByZXR1cm4gIlxuIjsNCg0KICAgICAgICAgIGNhc2UgImF1dG8iOg0KICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kYXV0b05ld0xpbmU7DQogICAgICB9DQogICAgfTsNCg0KICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gIlxuIjsNCiAgICB0aGlzLiRuZXdMaW5lTW9kZSA9ICJhdXRvIjsNCiAgICB0aGlzLnNldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24obmV3TGluZU1vZGUpIHsNCiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkNCiAgICAgICAgICAgIHJldHVybjsNCg0KICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOw0KICAgIH07DQoNCiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLiRuZXdMaW5lTW9kZTsNCiAgICB9Ow0KDQogICAgdGhpcy5pc05ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7DQogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7DQogICAgfTsNCg0KICAgIC8qKg0KICAgICAqIEdldCBhIHZlcmJhdGltIGNvcHkgb2YgdGhlIGdpdmVuIGxpbmUgYXMgaXQgaXMgaW4gdGhlIGRvY3VtZW50DQogICAgICovDQogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7DQogICAgICAgIHJldHVybiB0aGlzLiRsaW5lc1tyb3ddIHx8ICIiOw0KICAgIH07DQoNCiAgICB0aGlzLmdldExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7DQogICAgfTsNCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgYWxsIGxpbmVzIGluIHRoZSBkb2N1bWVudCBhcyBzdHJpbmcgYXJyYXkuIFdhcm5pbmc6IFRoZSBjYWxsZXINCiAgICAgKiBzaG91bGQgbm90IG1vZGlmeSB0aGlzIGFycmF5IQ0KICAgICAqLw0KICAgIHRoaXMuZ2V0QWxsTGluZXMgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXMoMCwgdGhpcy5nZXRMZW5ndGgoKSk7DQogICAgfTsNCg0KICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5sZW5ndGg7DQogICAgfTsNCg0KICAgIHRoaXMuZ2V0VGV4dFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsNCiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy4kbGluZXNbcmFuZ2Uuc3RhcnQucm93XS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICB2YXIgbGluZXMgPSBbXTsNCiAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy4kbGluZXNbcmFuZ2Uuc3RhcnQucm93XS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKSk7DQogICAgICAgICAgICBsaW5lcy5wdXNoLmFwcGx5KGxpbmVzLCB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdysxLCByYW5nZS5lbmQucm93LTEpKTsNCiAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy4kbGluZXNbcmFuZ2UuZW5kLnJvd10uc3Vic3RyaW5nKDAsIHJhbmdlLmVuZC5jb2x1bW4pKTsNCiAgICAgICAgICAgIHJldHVybiBsaW5lcy5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgew0KICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5nZXRMZW5ndGgoKTsNCiAgICAgICAgaWYgKHBvc2l0aW9uLnJvdyA+PSBsZW5ndGgpIHsNCiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOw0KICAgICAgICAgICAgcG9zaXRpb24uY29sdW1uID0gdGhpcy5nZXRMaW5lKGxlbmd0aC0xKS5sZW5ndGg7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHBvc2l0aW9uOw0KICAgIH07DQoNCiAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7DQogICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwKQ0KICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOw0KDQogICAgICAgIHBvc2l0aW9uID0gdGhpcy4kY2xpcFBvc2l0aW9uKHBvc2l0aW9uKTsNCg0KICAgICAgICBpZiAodGhpcy5nZXRMZW5ndGgoKSA8PSAxKQ0KICAgICAgICAgICAgdGhpcy4kZGV0ZWN0TmV3TGluZSh0ZXh0KTsNCg0KICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRzcGxpdCh0ZXh0KTsNCiAgICAgICAgdmFyIGZpcnN0TGluZSA9IGxpbmVzLnNwbGljZSgwLCAxKVswXTsNCiAgICAgICAgdmFyIGxhc3RMaW5lID0gbGluZXMubGVuZ3RoID09IDAgPyBudWxsIDogbGluZXMuc3BsaWNlKGxpbmVzLmxlbmd0aCAtIDEsIDEpWzBdOw0KDQogICAgICAgIHBvc2l0aW9uID0gdGhpcy5pbnNlcnRJbkxpbmUocG9zaXRpb24sIGZpcnN0TGluZSk7DQogICAgICAgIGlmIChsYXN0TGluZSAhPT0gbnVsbCkgew0KICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLmluc2VydE5ld0xpbmUocG9zaXRpb24pOyAvLyB0ZXJtaW5hdGUgZmlyc3QgbGluZQ0KICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLmluc2VydExpbmVzKHBvc2l0aW9uLnJvdywgbGluZXMpOw0KICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLmluc2VydEluTGluZShwb3NpdGlvbiwgbGFzdExpbmUgfHwgIiIpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBwb3NpdGlvbjsNCiAgICB9Ow0KDQogICAgdGhpcy5pbnNlcnRMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsNCiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAwKQ0KICAgICAgICAgICAgcmV0dXJuIHtyb3c6IHJvdywgY29sdW1uOiAwfTsNCg0KICAgICAgICB2YXIgYXJncyA9IFtyb3csIDBdOw0KICAgICAgICBhcmdzLnB1c2guYXBwbHkoYXJncywgbGluZXMpOw0KICAgICAgICB0aGlzLiRsaW5lcy5zcGxpY2UuYXBwbHkodGhpcy4kbGluZXMsIGFyZ3MpOw0KDQogICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3csIDAsIHJvdyArIGxpbmVzLmxlbmd0aCwgMCk7DQogICAgICAgIHZhciBkZWx0YSA9IHsNCiAgICAgICAgICAgIGFjdGlvbjogImluc2VydExpbmVzIiwNCiAgICAgICAgICAgIHJhbmdlOiByYW5nZSwNCiAgICAgICAgICAgIGxpbmVzOiBsaW5lcw0KICAgICAgICB9Ow0KICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOw0KICAgICAgICByZXR1cm4gcmFuZ2UuZW5kOw0KICAgIH07DQoNCiAgICB0aGlzLmluc2VydE5ld0xpbmUgPSBmdW5jdGlvbihwb3NpdGlvbikgew0KICAgICAgICBwb3NpdGlvbiA9IHRoaXMuJGNsaXBQb3NpdGlvbihwb3NpdGlvbik7DQogICAgICAgIHZhciBsaW5lID0gdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSB8fCAiIjsNCg0KICAgICAgICB0aGlzLiRsaW5lc1twb3NpdGlvbi5yb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uKTsNCiAgICAgICAgdGhpcy4kbGluZXMuc3BsaWNlKHBvc2l0aW9uLnJvdyArIDEsIDAsIGxpbmUuc3Vic3RyaW5nKHBvc2l0aW9uLmNvbHVtbiwgbGluZS5sZW5ndGgpKTsNCg0KICAgICAgICB2YXIgZW5kID0gew0KICAgICAgICAgICAgcm93IDogcG9zaXRpb24ucm93ICsgMSwNCiAgICAgICAgICAgIGNvbHVtbiA6IDANCiAgICAgICAgfTsNCg0KICAgICAgICB2YXIgZGVsdGEgPSB7DQogICAgICAgICAgICBhY3Rpb246ICJpbnNlcnRUZXh0IiwNCiAgICAgICAgICAgIHJhbmdlOiBSYW5nZS5mcm9tUG9pbnRzKHBvc2l0aW9uLCBlbmQpLA0KICAgICAgICAgICAgdGV4dDogdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsNCg0KICAgICAgICByZXR1cm4gZW5kOw0KICAgIH07DQoNCiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7DQogICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwKQ0KICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOw0KDQogICAgICAgIHZhciBsaW5lID0gdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSB8fCAiIjsNCg0KICAgICAgICB0aGlzLiRsaW5lc1twb3NpdGlvbi5yb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uKSArIHRleHQNCiAgICAgICAgICAgICAgICArIGxpbmUuc3Vic3RyaW5nKHBvc2l0aW9uLmNvbHVtbik7DQoNCiAgICAgICAgdmFyIGVuZCA9IHsNCiAgICAgICAgICAgIHJvdyA6IHBvc2l0aW9uLnJvdywNCiAgICAgICAgICAgIGNvbHVtbiA6IHBvc2l0aW9uLmNvbHVtbiArIHRleHQubGVuZ3RoDQogICAgICAgIH07DQoNCiAgICAgICAgdmFyIGRlbHRhID0gew0KICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0VGV4dCIsDQogICAgICAgICAgICByYW5nZTogUmFuZ2UuZnJvbVBvaW50cyhwb3NpdGlvbiwgZW5kKSwNCiAgICAgICAgICAgIHRleHQ6IHRleHQNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsNCg0KICAgICAgICByZXR1cm4gZW5kOw0KICAgIH07DQoNCiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7DQogICAgICAgIC8vIGNsaXAgdG8gZG9jdW1lbnQNCiAgICAgICAgcmFuZ2Uuc3RhcnQgPSB0aGlzLiRjbGlwUG9zaXRpb24ocmFuZ2Uuc3RhcnQpOw0KICAgICAgICByYW5nZS5lbmQgPSB0aGlzLiRjbGlwUG9zaXRpb24ocmFuZ2UuZW5kKTsNCg0KICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKQ0KICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0Ow0KDQogICAgICAgIHZhciBmaXJzdFJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsNCiAgICAgICAgdmFyIGxhc3RSb3cgPSByYW5nZS5lbmQucm93Ow0KDQogICAgICAgIGlmIChyYW5nZS5pc011bHRpTGluZSgpKSB7DQogICAgICAgICAgICB2YXIgZmlyc3RGdWxsUm93ID0gcmFuZ2Uuc3RhcnQuY29sdW1uID09IDAgPyBmaXJzdFJvdyA6IGZpcnN0Um93ICsgMTsNCiAgICAgICAgICAgIHZhciBsYXN0RnVsbFJvdyA9IGxhc3RSb3cgLSAxOw0KDQogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLmNvbHVtbiA+IDApDQogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJbkxpbmUobGFzdFJvdywgMCwgcmFuZ2UuZW5kLmNvbHVtbik7DQoNCiAgICAgICAgICAgIGlmIChsYXN0RnVsbFJvdyA+PSBmaXJzdEZ1bGxSb3cpDQogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lcyhmaXJzdEZ1bGxSb3csIGxhc3RGdWxsUm93KTsNCg0KICAgICAgICAgICAgaWYgKGZpcnN0RnVsbFJvdyAhPSBmaXJzdFJvdykgew0KICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5lKGZpcnN0Um93LCByYW5nZS5zdGFydC5jb2x1bW4sIHRoaXMuZ2V0TGluZShmaXJzdFJvdykubGVuZ3RoKTsNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU5ld0xpbmUocmFuZ2Uuc3RhcnQucm93KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5lKGZpcnN0Um93LCByYW5nZS5zdGFydC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByYW5nZS5zdGFydDsNCiAgICB9Ow0KDQogICAgdGhpcy5yZW1vdmVJbkxpbmUgPSBmdW5jdGlvbihyb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHsNCiAgICAgICAgaWYgKHN0YXJ0Q29sdW1uID09IGVuZENvbHVtbikNCiAgICAgICAgICAgIHJldHVybjsNCg0KICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBzdGFydENvbHVtbiwgcm93LCBlbmRDb2x1bW4pOw0KICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShyb3cpOw0KICAgICAgICB2YXIgcmVtb3ZlZCA9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pOw0KICAgICAgICB2YXIgbmV3TGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGxpbmUuc3Vic3RyaW5nKGVuZENvbHVtbiwgbGluZS5sZW5ndGgpOw0KICAgICAgICB0aGlzLiRsaW5lcy5zcGxpY2Uocm93LCAxLCBuZXdMaW5lKTsNCg0KICAgICAgICB2YXIgZGVsdGEgPSB7DQogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVUZXh0IiwNCiAgICAgICAgICAgIHJhbmdlOiByYW5nZSwNCiAgICAgICAgICAgIHRleHQ6IHJlbW92ZWQNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsNCiAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0Ow0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBSZW1vdmVzIGEgcmFuZ2Ugb2YgZnVsbCBsaW5lcw0KICAgICAqDQogICAgICogQHBhcmFtIGZpcnN0Um93IHtJbnRlZ2VyfSBUaGUgZmlyc3Qgcm93IHRvIGJlIHJlbW92ZWQNCiAgICAgKiBAcGFyYW0gbGFzdFJvdyB7SW50ZWdlcn0gVGhlIGxhc3Qgcm93IHRvIGJlIHJlbW92ZWQNCiAgICAgKiBAcmV0dXJuIHtTdHJpbmdbXX0gVGhlIHJlbW92ZWQgbGluZXMNCiAgICAgKi8NCiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsNCiAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKGZpcnN0Um93LCAwLCBsYXN0Um93ICsgMSwgMCk7DQogICAgICAgIHZhciByZW1vdmVkID0gdGhpcy4kbGluZXMuc3BsaWNlKGZpcnN0Um93LCBsYXN0Um93IC0gZmlyc3RSb3cgKyAxKTsNCg0KICAgICAgICB2YXIgZGVsdGEgPSB7DQogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVMaW5lcyIsDQogICAgICAgICAgICByYW5nZTogcmFuZ2UsDQogICAgICAgICAgICBubDogdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCksDQogICAgICAgICAgICBsaW5lczogcmVtb3ZlZA0KICAgICAgICB9Ow0KICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOw0KICAgICAgICByZXR1cm4gcmVtb3ZlZDsNCiAgICB9Ow0KDQogICAgdGhpcy5yZW1vdmVOZXdMaW5lID0gZnVuY3Rpb24ocm93KSB7DQogICAgICAgIHZhciBmaXJzdExpbmUgPSB0aGlzLmdldExpbmUocm93KTsNCiAgICAgICAgdmFyIHNlY29uZExpbmUgPSB0aGlzLmdldExpbmUocm93KzEpOw0KDQogICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3csIGZpcnN0TGluZS5sZW5ndGgsIHJvdysxLCAwKTsNCiAgICAgICAgdmFyIGxpbmUgPSBmaXJzdExpbmUgKyBzZWNvbmRMaW5lOw0KDQogICAgICAgIHRoaXMuJGxpbmVzLnNwbGljZShyb3csIDIsIGxpbmUpOw0KDQogICAgICAgIHZhciBkZWx0YSA9IHsNCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZVRleHQiLA0KICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLA0KICAgICAgICAgICAgdGV4dDogdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgeyBkYXRhOiBkZWx0YSB9KTsNCiAgICB9Ow0KDQogICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHsNCiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09IDAgJiYgcmFuZ2UuaXNFbXB0eSgpKQ0KICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0Ow0KDQogICAgICAgIC8vIFNob3J0Y3V0OiBJZiB0aGUgdGV4dCB3ZSB3YW50IHRvIGluc2VydCBpcyB0aGUgc2FtZSBhcyBpdCBpcyBhbHJlYWR5DQogICAgICAgIC8vIGluIHRoZSBkb2N1bWVudCwgd2UgZG9uJ3QgaGF2ZSB0byByZXBsYWNlIGFueXRoaW5nLg0KICAgICAgICBpZiAodGV4dCA9PSB0aGlzLmdldFRleHRSYW5nZShyYW5nZSkpDQogICAgICAgICAgICByZXR1cm4gcmFuZ2UuZW5kOw0KDQogICAgICAgIHRoaXMucmVtb3ZlKHJhbmdlKTsNCiAgICAgICAgaWYgKHRleHQpIHsNCiAgICAgICAgICAgIHZhciBlbmQgPSB0aGlzLmluc2VydChyYW5nZS5zdGFydCwgdGV4dCk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBlbmQgPSByYW5nZS5zdGFydDsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBlbmQ7DQogICAgfTsNCg0KICAgIHRoaXMuYXBwbHlEZWx0YXMgPSBmdW5jdGlvbihkZWx0YXMpIHsNCiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGRlbHRhcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOw0KICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5yYW5nZS5zdGFydCwgZGVsdGEucmFuZ2UuZW5kKTsNCg0KICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0TGluZXMiKQ0KICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0TGluZXMocmFuZ2Uuc3RhcnQucm93LCBkZWx0YS5saW5lcyk7DQogICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2VydFRleHQiKQ0KICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHJhbmdlLnN0YXJ0LCBkZWx0YS50ZXh0KTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKQ0KICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5lbmQucm93IC0gMSk7DQogICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRleHQiKQ0KICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHJhbmdlKTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICB0aGlzLnJldmVydERlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgew0KICAgICAgICBmb3IgKHZhciBpPWRlbHRhcy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7DQogICAgICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07DQoNCiAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdlLmVuZCk7DQoNCiAgICAgICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2VydExpbmVzIikNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyAtIDEpOw0KICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnRUZXh0IikNCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7DQogICAgICAgICAgICBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikNCiAgICAgICAgICAgICAgICB0aGlzLmluc2VydExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgZGVsdGEubGluZXMpOw0KICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVUZXh0IikNCiAgICAgICAgICAgICAgICB0aGlzLmluc2VydChyYW5nZS5zdGFydCwgZGVsdGEudGV4dCk7DQogICAgICAgIH0NCiAgICB9Ow0KDQp9KS5jYWxsKERvY3VtZW50LnByb3RvdHlwZSk7DQoNCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsNCn0pOw0KLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKg0KICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xDQogKg0KICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KICoNCiAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsDQogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCiAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogKiBMaWNlbnNlLg0KICoNCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIEFqYXgub3JnIENvZGUgRWRpdG9yIChBQ0UpLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQWpheC5vcmcgQi5WLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMA0KICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIENvbnRyaWJ1dG9yKHMpOg0KICogICAgICBGYWJpYW4gSmFrb2JzIDxmYWJpYW4gQVQgYWpheCBET1Qgb3JnPg0KICoNCiAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mDQogKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3INCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLA0KICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQNCiAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5DQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvDQogKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cg0KICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UNCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlDQogKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyDQogKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLg0KICoNCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovDQoNCmRlZmluZSgnYWNlL3JhbmdlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgew0KICAgIHRoaXMuc3RhcnQgPSB7DQogICAgICAgIHJvdzogc3RhcnRSb3csDQogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4NCiAgICB9Ow0KDQogICAgdGhpcy5lbmQgPSB7DQogICAgICAgIHJvdzogZW5kUm93LA0KICAgICAgICBjb2x1bW46IGVuZENvbHVtbg0KICAgIH07DQp9Ow0KDQooZnVuY3Rpb24oKSB7DQogICAgdGhpcy5pc0VlcXVhbCA9IGZ1bmN0aW9uKHJhbmdlKSB7DQogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cgJiYNCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PSByYW5nZS5lbmQucm93ICYmDQogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PSByYW5nZS5zdGFydC5jb2x1bW4gJiYNCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PSByYW5nZS5lbmQuY29sdW1uDQogICAgfTsNCg0KICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArDQogICAgICAgICAgICAiXSAtPiBbIiArIHRoaXMuZW5kLnJvdyArICIvIiArIHRoaXMuZW5kLmNvbHVtbiArICJdIik7DQogICAgfTsNCg0KICAgIHRoaXMuY29udGFpbnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwOw0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBDb21wYXJlcyB0aGlzIHJhbmdlIChBKSB3aXRoIGFub3RoZXIgcmFuZ2UgKEIpLCB3aGVyZSBCIGlzIHRoZSBwYXNzZWQgaW4NCiAgICAgKiByYW5nZS4NCiAgICAgKg0KICAgICAqIFJldHVybiB2YWx1ZXM6DQogICAgICogIC0yOiAoQikgaXMgaW5mcm9udCBvZiAoQSkgYW5kIGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGggKEEpDQogICAgICogIC0xOiAoQikgYmVnaW5zIGJlZm9yZSAoQSkgYnV0IGVuZHMgaW5zaWRlIG9mIChBKQ0KICAgICAqICAgMDogKEIpIGlzIGNvbXBsZXRseSBpbnNpZGUgb2YgKEEpIE9SIChBKSBpcyBjb21wbGV0eSBpbnNpZGUgb2YgKEIpDQogICAgICogICsxOiAoQikgYmVnaW5zIGluc2lkZSBvZiAoQSkgYnV0IGVuZHMgb3V0c2lkZSBvZiAoQSkNCiAgICAgKiAgKzI6IChCKSBpcyBhZnRlciAoQSkgYW5kIGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGggKEEpDQogICAgICoNCiAgICAgKiAgNDI6IEZUVyBzdGF0ZTogKEIpIGVuZHMgaW4gKEEpIGJ1dCBzdGFydHMgb3V0c2lkZSBvZiAoQSkNCiAgICAgKi8NCiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7DQogICAgICAgIHZhciBjbXAsDQogICAgICAgICAgICBlbmQgPSByYW5nZS5lbmQsDQogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0Ow0KDQogICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShlbmQucm93LCBlbmQuY29sdW1uKTsNCiAgICAgICAgaWYgKGNtcCA9PSAxKSB7DQogICAgICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pOw0KICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIDI7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgew0KICAgICAgICAgICAgcmV0dXJuIC0yOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsNCiAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIDQyOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHRoaXMuY29tcGFyZVBvaW50ID0gZnVuY3Rpb24ocCkgew0KICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7DQogICAgfQ0KDQogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVBvaW50KHJhbmdlLnN0YXJ0KSA9PSAwICYmIHRoaXMuY29tcGFyZVBvaW50KHJhbmdlLmVuZCkgPT0gMDsNCiAgICB9DQoNCiAgICB0aGlzLmlzRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsNCiAgICB9DQoNCiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbjsNCiAgICB9DQoNCiAgICB0aGlzLnNldFN0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gIm9iamVjdCIpIHsNCiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsNCiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93LnJvdzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93Ow0KICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSBjb2x1bW47DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0aGlzLnNldEVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7DQogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSByb3cuY29sdW1uOw0KICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93LnJvdzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdzsNCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGNvbHVtbjsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgew0KICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pIHx8IHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICB0aGlzLmluc2lkZVN0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsNCiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgew0KICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgdGhpcy5pbnNpZGVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7DQogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICghdGhpcy5pc011bHRpTGluZSgpKSB7DQogICAgICAgICAgICBpZiAocm93ID09PSB0aGlzLnN0YXJ0LnJvdykgew0KICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsNCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCg0KICAgICAgICBpZiAocm93IDwgdGhpcy5zdGFydC5yb3cpDQogICAgICAgICAgICByZXR1cm4gLTE7DQoNCiAgICAgICAgaWYgKHJvdyA+IHRoaXMuZW5kLnJvdykNCiAgICAgICAgICAgIHJldHVybiAxOw0KDQogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PT0gcm93KQ0KICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsNCg0KICAgICAgICBpZiAodGhpcy5lbmQucm93ID09PSByb3cpDQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOw0KDQogICAgICAgIHJldHVybiAwOw0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBMaWtlIC5jb21wYXJlKCksIGJ1dCBpZiBpc1N0YXJ0IGlzIHRydWUsIHJldHVybiAtMTsNCiAgICAgKi8NCiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uKSB7DQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIExpa2UgLmNvbXBhcmUoKSwgYnV0IGlmIGlzRW5kIGlzIHRydWUsIHJldHVybiAxOw0KICAgICAqLw0KICAgIHRoaXMuY29tcGFyZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsNCiAgICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0aGlzLmNvbXBhcmVJbnNpZGUgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICBpZiAodGhpcy5lbmQucm93ID09IHJvdyAmJiB0aGlzLmVuZC5jb2x1bW4gPT0gY29sdW1uKSB7DQogICAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uKSB7DQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHRoaXMuY2xpcFJvd3MgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgew0KICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykgew0KICAgICAgICAgICAgdmFyIGVuZCA9IHsNCiAgICAgICAgICAgICAgICByb3c6IGxhc3RSb3crMSwNCiAgICAgICAgICAgICAgICBjb2x1bW46IDANCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPiBsYXN0Um93KSB7DQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7DQogICAgICAgICAgICAgICAgcm93OiBsYXN0Um93KzEsDQogICAgICAgICAgICAgICAgY29sdW1uOiAwDQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpIHsNCiAgICAgICAgICAgIHZhciBzdGFydCA9IHsNCiAgICAgICAgICAgICAgICByb3c6IGZpcnN0Um93LA0KICAgICAgICAgICAgICAgIGNvbHVtbjogMA0KICAgICAgICAgICAgfTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPCBmaXJzdFJvdykgew0KICAgICAgICAgICAgdmFyIGVuZCA9IHsNCiAgICAgICAgICAgICAgICByb3c6IGZpcnN0Um93LA0KICAgICAgICAgICAgICAgIGNvbHVtbjogMA0KICAgICAgICAgICAgfTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOw0KICAgIH07DQoNCiAgICB0aGlzLmV4dGVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7DQogICAgICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOw0KDQogICAgICAgIGlmIChjbXAgPT0gMCkNCiAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpDQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59Ow0KDQogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0IHx8IHRoaXMuc3RhcnQsIGVuZCB8fCB0aGlzLmVuZCk7DQogICAgfTsNCg0KICAgIHRoaXMuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgew0KICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09IHRoaXMuZW5kLnJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSB0aGlzLmVuZC5jb2x1bW4pOw0KICAgIH07DQoNCiAgICB0aGlzLmlzTXVsdGlMaW5lID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7DQogICAgfTsNCg0KICAgIHRoaXMuY2xvbmUgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy5zdGFydCwgdGhpcy5lbmQpOw0KICAgIH07DQoNCiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgew0KICAgICAgICBpZiAodGhpcy5lbmQuY29sdW1uID09IDApDQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCBNYXRoLm1heCh0aGlzLnN0YXJ0LnJvdywgdGhpcy5lbmQucm93LTEpLCAwKQ0KICAgICAgICBlbHNlDQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApDQogICAgfTsNCg0KICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsNCiAgICAgICAgdmFyIHNjcmVlblBvc1N0YXJ0ID0NCiAgICAgICAgICAgIHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc3RhcnQpOw0KICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0NCiAgICAgICAgICAgIHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZW5kKTsNCg0KICAgICAgICByZXR1cm4gbmV3IFJhbmdlKA0KICAgICAgICAgICAgc2NyZWVuUG9zU3RhcnQucm93LCBzY3JlZW5Qb3NTdGFydC5jb2x1bW4sDQogICAgICAgICAgICBzY3JlZW5Qb3NFbmQucm93LCBzY3JlZW5Qb3NFbmQuY29sdW1uDQogICAgICAgICk7DQogICAgfTsNCg0KfSkuY2FsbChSYW5nZS5wcm90b3R5cGUpOw0KDQoNClJhbmdlLmZyb21Qb2ludHMgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7DQogICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbiwgZW5kLnJvdywgZW5kLmNvbHVtbik7DQp9Ow0KDQpleHBvcnRzLlJhbmdlID0gUmFuZ2U7DQp9KTsNCi8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBBamF4Lm9yZyBDb2RlIEVkaXRvciAoQUNFKS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEFqYXgub3JnIEIuVi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTANCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgICAgRmFiaWFuIEpha29icyA8ZmFiaWFuIEFUIGFqYXggRE9UIG9yZz4NCiAqDQogKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yDQogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwNCiAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQ0KICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bw0KICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlDQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQ0KICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4NCiAqDQogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KDQpkZWZpbmUoJ2FjZS9hbmNob3InLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOw0KdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7DQoNCi8qKg0KICogQW4gQW5jaG9yIGlzIGEgZmxvYXRpbmcgcG9pbnRlciBpbiB0aGUgZG9jdW1lbnQuIFdoZW5ldmVyIHRleHQgaXMgaW5zZXJ0ZWQgb3INCiAqIGRlbGV0ZWQgYmVmb3JlIHRoZSBjdXJzb3IsIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIGlzIHVwZGF0ZWQNCiAqLw0KdmFyIEFuY2hvciA9IGV4cG9ydHMuQW5jaG9yID0gZnVuY3Rpb24oZG9jLCByb3csIGNvbHVtbikgew0KICAgIHRoaXMuZG9jdW1lbnQgPSBkb2M7DQogICAgDQogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpDQogICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LnJvdywgcm93LmNvbHVtbik7DQogICAgZWxzZQ0KICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsNCg0KICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOw0KICAgIGRvYy5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOw0KfTsNCg0KKGZ1bmN0aW9uKCkgew0KDQogICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOw0KICAgIA0KICAgIHRoaXMuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsNCiAgICB9Ow0KICAgIA0KICAgIHRoaXMuZ2V0RG9jdW1lbnQgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7DQogICAgfTsNCiAgICANCiAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgew0KICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7DQogICAgICAgIHZhciByYW5nZSA9IGRlbHRhLnJhbmdlOw0KICAgICAgICAgICAgDQogICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdyAmJiByYW5nZS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpDQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICANCiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA+IHRoaXMucm93KQ0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgDQogICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gdGhpcy5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uID4gdGhpcy5jb2x1bW4pDQogICAgICAgICAgICByZXR1cm47DQogICAgDQogICAgICAgIHZhciByb3cgPSB0aGlzLnJvdzsNCiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uOw0KICAgICAgICANCiAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRleHQiKSB7DQogICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09PSByb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDw9IGNvbHVtbikgew0KICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT09IHJhbmdlLmVuZC5yb3cpIHsNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uICs9IHJhbmdlLmVuZC5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBjb2x1bW4gLT0gcmFuZ2Uuc3RhcnQuY29sdW1uOw0KICAgICAgICAgICAgICAgICAgICByb3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmIChyYW5nZS5zdGFydC5yb3cgIT09IHJhbmdlLmVuZC5yb3cgJiYgcmFuZ2Uuc3RhcnQucm93IDwgcm93KSB7DQogICAgICAgICAgICAgICAgcm93ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09PSAiaW5zZXJ0TGluZXMiKSB7DQogICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDw9IHJvdykgew0KICAgICAgICAgICAgICAgIHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIpIHsNCiAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gcm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IGNvbHVtbikgew0KICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQuY29sdW1uID49IGNvbHVtbikNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gcmFuZ2Uuc3RhcnQuY29sdW1uOw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gKHJhbmdlLmVuZC5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW4pKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5lbmQucm93ICYmIHJhbmdlLnN0YXJ0LnJvdyA8IHJvdykgew0KICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93ID09IHJvdykgew0KICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBNYXRoLm1heCgwLCBjb2x1bW4gLSByYW5nZS5lbmQuY29sdW1uKSArIHJhbmdlLnN0YXJ0LmNvbHVtbjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcm93IC09IChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYgKHJhbmdlLmVuZC5yb3cgPT0gcm93KSB7DQogICAgICAgICAgICAgICAgcm93IC09IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7DQogICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbikgKyByYW5nZS5zdGFydC5jb2x1bW47DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpIHsNCiAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPD0gcm93KSB7DQogICAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5yb3cgPD0gcm93KQ0KICAgICAgICAgICAgICAgICAgICByb3cgLT0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsNCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgcm93ID0gcmFuZ2Uuc3RhcnQucm93Ow0KICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4sIHRydWUpOw0KICAgIH07DQoNCiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgew0KICAgICAgICB2YXIgcG9zOw0KICAgICAgICBpZiAobm9DbGlwKSB7DQogICAgICAgICAgICBwb3MgPSB7DQogICAgICAgICAgICAgICAgcm93OiByb3csDQogICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4NCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBwb3MgPSB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHJvdywgY29sdW1uKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKHRoaXMucm93ID09IHBvcy5yb3cgJiYgdGhpcy5jb2x1bW4gPT0gcG9zLmNvbHVtbikNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIA0KICAgICAgICB2YXIgb2xkID0gew0KICAgICAgICAgICAgcm93OiB0aGlzLnJvdywNCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4NCiAgICAgICAgfTsNCiAgICAgICAgDQogICAgICAgIHRoaXMucm93ID0gcG9zLnJvdzsNCiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOw0KICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7DQogICAgICAgICAgICBvbGQ6IG9sZCwNCiAgICAgICAgICAgIHZhbHVlOiBwb3MNCiAgICAgICAgfSk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgew0KICAgICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsNCiAgICB9Ow0KICAgIA0KICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgew0KICAgICAgICB2YXIgcG9zID0ge307DQogICAgDQogICAgICAgIGlmIChyb3cgPj0gdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSkgew0KICAgICAgICAgICAgcG9zLnJvdyA9IE1hdGgubWF4KDAsIHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgLSAxKTsNCiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKHJvdyA8IDApIHsNCiAgICAgICAgICAgIHBvcy5yb3cgPSAwOw0KICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBwb3Mucm93ID0gcm93Ow0KICAgICAgICAgICAgcG9zLmNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5ndGgsIE1hdGgubWF4KDAsIGNvbHVtbikpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBpZiAoY29sdW1uIDwgMCkNCiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSAwOw0KICAgICAgICAgICAgDQogICAgICAgIHJldHVybiBwb3M7DQogICAgfTsNCiAgICANCn0pLmNhbGwoQW5jaG9yLnByb3RvdHlwZSk7DQoNCn0pOw0KLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKg0KICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xDQogKg0KICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KICoNCiAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsDQogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCiAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogKiBMaWNlbnNlLg0KICoNCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIEFqYXgub3JnIENvZGUgRWRpdG9yIChBQ0UpLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQWpheC5vcmcgQi5WLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMA0KICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIENvbnRyaWJ1dG9yKHMpOg0KICogICAgICBGYWJpYW4gSmFrb2JzIDxmYWJpYW4gQVQgYWpheCBET1Qgb3JnPg0KICoNCiAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mDQogKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3INCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLA0KICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQNCiAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5DQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvDQogKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cg0KICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UNCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlDQogKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyDQogKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLg0KICoNCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovDQoNCmRlZmluZSgnYWNlL2xpYi9sYW5nJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsNCiJ1c2Ugc3RyaWN0IjsNCg0KZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7DQogICAgcmV0dXJuIHN0cmluZy5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpOw0KfTsNCg0KZXhwb3J0cy5zdHJpbmdSZXBlYXQgPSBmdW5jdGlvbiAoc3RyaW5nLCBjb3VudCkgew0KICAgICByZXR1cm4gbmV3IEFycmF5KGNvdW50ICsgMSkuam9pbihzdHJpbmcpOw0KfTsNCg0KdmFyIHRyaW1CZWdpblJlZ2V4cCA9IC9eXHNccyovOw0KdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsNCg0KZXhwb3J0cy5zdHJpbmdUcmltTGVmdCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsNCiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7DQp9Ow0KDQpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsNCiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgJycpOw0KfTsNCg0KZXhwb3J0cy5jb3B5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7DQogICAgdmFyIGNvcHkgPSB7fTsNCiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7DQogICAgICAgIGNvcHlba2V5XSA9IG9ialtrZXldOw0KICAgIH0NCiAgICByZXR1cm4gY29weTsNCn07DQoNCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpew0KICAgIHZhciBjb3B5ID0gW107DQogICAgZm9yICh2YXIgaT0wLCBsPWFycmF5Lmxlbmd0aDsgaTxsOyBpKyspIHsNCiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikNCiAgICAgICAgICAgIGNvcHlbaV0gPSB0aGlzLmNvcHlPYmplY3QoIGFycmF5W2ldICk7DQogICAgICAgIGVsc2UgDQogICAgICAgICAgICBjb3B5W2ldID0gYXJyYXlbaV07DQogICAgfQ0KICAgIHJldHVybiBjb3B5Ow0KfTsNCg0KZXhwb3J0cy5kZWVwQ29weSA9IGZ1bmN0aW9uIChvYmopIHsNCiAgICBpZiAodHlwZW9mIG9iaiAhPSAib2JqZWN0Iikgew0KICAgICAgICByZXR1cm4gb2JqOw0KICAgIH0NCiAgICANCiAgICB2YXIgY29weSA9IG9iai5jb25zdHJ1Y3RvcigpOw0KICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsNCiAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PSAib2JqZWN0Iikgew0KICAgICAgICAgICAgY29weVtrZXldID0gdGhpcy5kZWVwQ29weShvYmpba2V5XSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBjb3B5W2tleV0gPSBvYmpba2V5XTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gY29weTsNCn07DQoNCmV4cG9ydHMuYXJyYXlUb01hcCA9IGZ1bmN0aW9uKGFycikgew0KICAgIHZhciBtYXAgPSB7fTsNCiAgICBmb3IgKHZhciBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIG1hcFthcnJbaV1dID0gMTsNCiAgICB9DQogICAgcmV0dXJuIG1hcDsNCg0KfTsNCg0KLyoqDQogKiBzcGxpY2Ugb3V0IG9mICdhcnJheScgYW55dGhpbmcgdGhhdCA9PT0gJ3ZhbHVlJw0KICovDQpleHBvcnRzLmFycmF5UmVtb3ZlID0gZnVuY3Rpb24oYXJyYXksIHZhbHVlKSB7DQogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7DQogICAgaWYgKHZhbHVlID09PSBhcnJheVtpXSkgew0KICAgICAgYXJyYXkuc3BsaWNlKGksIDEpOw0KICAgIH0NCiAgfQ0KfTsNCg0KZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHIpIHsNCiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKTsNCn07DQoNCmV4cG9ydHMuZGVmZXJyZWRDYWxsID0gZnVuY3Rpb24oZmNuKSB7DQoNCiAgICB2YXIgdGltZXIgPSBudWxsOw0KICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgew0KICAgICAgICB0aW1lciA9IG51bGw7DQogICAgICAgIGZjbigpOw0KICAgIH07DQoNCiAgICB2YXIgZGVmZXJyZWQgPSBmdW5jdGlvbih0aW1lb3V0KSB7DQogICAgICAgIGRlZmVycmVkLmNhbmNlbCgpOw0KICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7DQogICAgICAgIHJldHVybiBkZWZlcnJlZDsNCiAgICB9Ow0KDQogICAgZGVmZXJyZWQuc2NoZWR1bGUgPSBkZWZlcnJlZDsNCg0KICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsNCiAgICAgICAgdGhpcy5jYW5jZWwoKTsNCiAgICAgICAgZmNuKCk7DQogICAgICAgIHJldHVybiBkZWZlcnJlZDsNCiAgICB9Ow0KDQogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7DQogICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7DQogICAgICAgIHRpbWVyID0gbnVsbDsNCiAgICAgICAgcmV0dXJuIGRlZmVycmVkOw0KICAgIH07DQoNCiAgICByZXR1cm4gZGVmZXJyZWQ7DQp9Ow0KDQp9KTsNCmRlZmluZSgnYWNlL3dvcmtlci9qc2hpbnQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KLyohDQogKiBKU0hpbnQsIGJ5IEpTSGludCBDb21tdW5pdHkuDQogKg0KICogTGljZW5zZWQgdW5kZXIgdGhlIHNhbWUgc2xpZ2h0bHkgbW9kaWZpZWQgTUlUIGxpY2Vuc2UgdGhhdCBKU0xpbnQgaXMuDQogKiBJdCBzdG9wcyBldmlsLWRvZXJzIGV2ZXJ5d2hlcmUuDQogKg0KICogSlNIaW50IGlzIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIEpTTGludDoNCiAqDQogKiAgIENvcHlyaWdodCAoYykgMjAwMiBEb3VnbGFzIENyb2NrZm9yZCAgKHd3dy5KU0xpbnQuY29tKQ0KICoNCiAqICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nDQogKiAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCiAqICAgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KICogICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCiAqICAgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20NCiAqICAgdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQogKg0KICogICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZA0KICogICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCiAqDQogKiAgIFRoZSBTb2Z0d2FyZSBzaGFsbCBiZSB1c2VkIGZvciBHb29kLCBub3QgRXZpbC4NCiAqDQogKiAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQogKiAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KICogICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCiAqICAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KICogICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KICogICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSDQogKiAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCiAqDQogKiBKU0hpbnQgd2FzIGZvcmtlZCBmcm9tIDIwMTAtMTItMTYgZWRpdGlvbiBvZiBKU0xpbnQuDQogKg0KICovDQoNCi8qDQogSlNISU5UIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLiBJdCB0YWtlcyB0d28gcGFyYW1ldGVycy4NCg0KICAgICB2YXIgbXlSZXN1bHQgPSBKU0hJTlQoc291cmNlLCBvcHRpb24pOw0KDQogVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy4gSWYgaXQgaXMgYQ0KIHN0cmluZywgaXQgd2lsbCBiZSBzcGxpdCBvbiAnXG4nIG9yICdccicuIElmIGl0IGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIGl0DQogaXMgYXNzdW1lZCB0aGF0IGVhY2ggc3RyaW5nIHJlcHJlc2VudHMgb25lIGxpbmUuIFRoZSBzb3VyY2UgY2FuIGJlIGENCiBKYXZhU2NyaXB0IHRleHQgb3IgYSBKU09OIHRleHQuDQoNCiBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyBhbiBvcHRpb25hbCBvYmplY3Qgb2Ygb3B0aW9ucyB3aGljaCBjb250cm9sIHRoZQ0KIG9wZXJhdGlvbiBvZiBKU0hJTlQuIE1vc3Qgb2YgdGhlIG9wdGlvbnMgYXJlIGJvb2xlYW5zOiBUaGV5IGFyZSBhbGwNCiBvcHRpb25hbCBhbmQgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgb2YgZmFsc2UuIE9uZSBvZiB0aGUgb3B0aW9ucywgcHJlZGVmLA0KIGNhbiBiZSBhbiBhcnJheSBvZiBuYW1lcywgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRlY2xhcmUgZ2xvYmFsIHZhcmlhYmxlcywNCiBvciBhbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgdXNlZCBhcyBnbG9iYWwgbmFtZXMsIHdpdGggYSBib29sZWFuIHZhbHVlDQogdGhhdCBkZXRlcm1pbmVzIGlmIHRoZXkgYXJlIGFzc2lnbmFibGUuDQoNCiBJZiBpdCBjaGVja3Mgb3V0LCBKU0hJTlQgcmV0dXJucyB0cnVlLiBPdGhlcndpc2UsIGl0IHJldHVybnMgZmFsc2UuDQoNCiBJZiBmYWxzZSwgeW91IGNhbiBpbnNwZWN0IEpTSElOVC5lcnJvcnMgdG8gZmluZCBvdXQgdGhlIHByb2JsZW1zLg0KIEpTSElOVC5lcnJvcnMgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIHRoZXNlIG1lbWJlcnM6DQoNCiB7DQogICAgIGxpbmUgICAgICA6IFRoZSBsaW5lIChyZWxhdGl2ZSB0byAwKSBhdCB3aGljaCB0aGUgbGludCB3YXMgZm91bmQNCiAgICAgY2hhcmFjdGVyIDogVGhlIGNoYXJhY3RlciAocmVsYXRpdmUgdG8gMCkgYXQgd2hpY2ggdGhlIGxpbnQgd2FzIGZvdW5kDQogICAgIHJlYXNvbiAgICA6IFRoZSBwcm9ibGVtDQogICAgIGV2aWRlbmNlICA6IFRoZSB0ZXh0IGxpbmUgaW4gd2hpY2ggdGhlIHByb2JsZW0gb2NjdXJyZWQNCiAgICAgcmF3ICAgICAgIDogVGhlIHJhdyBtZXNzYWdlIGJlZm9yZSB0aGUgZGV0YWlscyB3ZXJlIGluc2VydGVkDQogICAgIGEgICAgICAgICA6IFRoZSBmaXJzdCBkZXRhaWwNCiAgICAgYiAgICAgICAgIDogVGhlIHNlY29uZCBkZXRhaWwNCiAgICAgYyAgICAgICAgIDogVGhlIHRoaXJkIGRldGFpbA0KICAgICBkICAgICAgICAgOiBUaGUgZm91cnRoIGRldGFpbA0KIH0NCg0KIElmIGEgZmF0YWwgZXJyb3Igd2FzIGZvdW5kLCBhIG51bGwgd2lsbCBiZSB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZQ0KIEpTSElOVC5lcnJvcnMgYXJyYXkuDQoNCiBZb3UgY2FuIHJlcXVlc3QgYSBGdW5jdGlvbiBSZXBvcnQsIHdoaWNoIHNob3dzIGFsbCBvZiB0aGUgZnVuY3Rpb25zDQogYW5kIHRoZSBwYXJhbWV0ZXJzIGFuZCB2YXJzIHRoYXQgdGhleSB1c2UuIFRoaXMgY2FuIGJlIHVzZWQgdG8gZmluZA0KIGltcGxpZWQgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgb3RoZXIgcHJvYmxlbXMuIFRoZSByZXBvcnQgaXMgaW4gSFRNTCBhbmQNCiBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW4gSFRNTCA8Ym9keT4uDQoNCiAgICAgdmFyIG15UmVwb3J0ID0gSlNISU5ULnJlcG9ydChsaW1pdGVkKTsNCg0KIElmIGxpbWl0ZWQgaXMgdHJ1ZSwgdGhlbiB0aGUgcmVwb3J0IHdpbGwgYmUgbGltaXRlZCB0byBvbmx5IGVycm9ycy4NCg0KIFlvdSBjYW4gcmVxdWVzdCBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIEpTSGludCdzIHJlc3VsdHMuDQoNCiAgICAgdmFyIG15RGF0YSA9IEpTSElOVC5kYXRhKCk7DQoNCiBJdCByZXR1cm5zIGEgc3RydWN0dXJlIHdpdGggdGhpcyBmb3JtOg0KDQogew0KICAgICBlcnJvcnM6IFsNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBsaW5lOiBOVU1CRVIsDQogICAgICAgICAgICAgY2hhcmFjdGVyOiBOVU1CRVIsDQogICAgICAgICAgICAgcmVhc29uOiBTVFJJTkcsDQogICAgICAgICAgICAgZXZpZGVuY2U6IFNUUklORw0KICAgICAgICAgfQ0KICAgICBdLA0KICAgICBmdW5jdGlvbnM6IFsNCiAgICAgICAgIG5hbWU6IFNUUklORywNCiAgICAgICAgIGxpbmU6IE5VTUJFUiwNCiAgICAgICAgIGxhc3Q6IE5VTUJFUiwNCiAgICAgICAgIHBhcmFtOiBbDQogICAgICAgICAgICAgU1RSSU5HDQogICAgICAgICBdLA0KICAgICAgICAgY2xvc3VyZTogWw0KICAgICAgICAgICAgIFNUUklORw0KICAgICAgICAgXSwNCiAgICAgICAgIHZhcjogWw0KICAgICAgICAgICAgIFNUUklORw0KICAgICAgICAgXSwNCiAgICAgICAgIGV4Y2VwdGlvbjogWw0KICAgICAgICAgICAgIFNUUklORw0KICAgICAgICAgXSwNCiAgICAgICAgIG91dGVyOiBbDQogICAgICAgICAgICAgU1RSSU5HDQogICAgICAgICBdLA0KICAgICAgICAgdW51c2VkOiBbDQogICAgICAgICAgICAgU1RSSU5HDQogICAgICAgICBdLA0KICAgICAgICAgZ2xvYmFsOiBbDQogICAgICAgICAgICAgU1RSSU5HDQogICAgICAgICBdLA0KICAgICAgICAgbGFiZWw6IFsNCiAgICAgICAgICAgICBTVFJJTkcNCiAgICAgICAgIF0NCiAgICAgXSwNCiAgICAgZ2xvYmFsczogWw0KICAgICAgICAgU1RSSU5HDQogICAgIF0sDQogICAgIG1lbWJlcjogew0KICAgICAgICAgU1RSSU5HOiBOVU1CRVINCiAgICAgfSwNCiAgICAgdW51c2VkczogWw0KICAgICAgICAgew0KICAgICAgICAgICAgIG5hbWU6IFNUUklORywNCiAgICAgICAgICAgICBsaW5lOiBOVU1CRVINCiAgICAgICAgIH0NCiAgICAgXSwNCiAgICAgaW1wbGllZHM6IFsNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBuYW1lOiBTVFJJTkcsDQogICAgICAgICAgICAgbGluZTogTlVNQkVSDQogICAgICAgICB9DQogICAgIF0sDQogICAgIHVybHM6IFsNCiAgICAgICAgIFNUUklORw0KICAgICBdLA0KICAgICBqc29uOiBCT09MRUFODQogfQ0KDQogRW1wdHkgYXJyYXlzIHdpbGwgbm90IGJlIGluY2x1ZGVkLg0KDQoqLw0KDQovKmpzaGludA0KIGV2aWw6IHRydWUsIG5vbWVuOiBmYWxzZSwgb25ldmFyOiBmYWxzZSwgcmVnZXhwOiBmYWxzZSwgc3RyaWN0OiB0cnVlLCBib3NzOiB0cnVlLA0KIHVuZGVmOiB0cnVlLCBtYXhsZW46IDEwMA0KKi8NCg0KLyptZW1iZXJzICJcYiIsICJcdCIsICJcbiIsICJcZiIsICJcciIsICIhPSIsICIhPT0iLCAiXCIiLCAiJSIsICIoYmVnaW4pIiwNCiAiKGJyZWFrYWdlKSIsICIoY29udGV4dCkiLCAiKGVycm9yKSIsICIoZ2xvYmFsKSIsICIoaWRlbnRpZmllcikiLCAiKGxhc3QpIiwNCiAiKGxpbmUpIiwgIihsb29wYWdlKSIsICIobmFtZSkiLCAiKG9uZXZhcikiLCAiKHBhcmFtcykiLCAiKHNjb3BlKSIsDQogIihzdGF0ZW1lbnQpIiwgIih2ZXJiKSIsICIqIiwgIisiLCAiKysiLCAiLSIsICItLSIsICJcLyIsICI8IiwgIjw9IiwgIj09IiwNCiAiPT09IiwgIj4iLCAiPj0iLCAkLCAkJCwgJEEsICRGLCAkSCwgJFIsICRicmVhaywgJGNvbnRpbnVlLCAkdywgQWJzdHJhY3QsIEFqYXgsDQogX19maWxlbmFtZSwgX19kaXJuYW1lLCBBY3RpdmVYT2JqZWN0LCBBcnJheSwgQXJyYXlCdWZmZXIsIEFycmF5QnVmZmVyVmlldywNCiBBdXRvY29tcGxldGVyLCBBc3NldHMsIEJvb2xlYW4sIEJ1aWxkZXIsIEJ1ZmZlciwgQnJvd3NlciwgQ09NLCBDU2NyaXB0LCBDYW52YXMsDQogQ3VzdG9tQW5pbWF0aW9uLCBDbGFzcywgQ29udHJvbCwgQ2hhaW4sIENvbG9yLCBDb29raWUsIENvcmUsIERhdGFWaWV3LCBEYXRlLA0KIERlYnVnLCBEcmFnZ2FibGUsIERyYWdnYWJsZXMsIERyb3BwYWJsZXMsIERvY3VtZW50LCBEb21SZWFkeSwgRE9NUmVhZHksIERyYWcsDQogRSwgRW51bWVyYXRvciwgRW51bWVyYWJsZSwgRWxlbWVudCwgRWxlbWVudHMsIEVycm9yLCBFZmZlY3QsIEV2YWxFcnJvciwgRXZlbnQsDQogRXZlbnRzLCBGYWRlQW5pbWF0aW9uLCBGaWVsZCwgRmxhc2gsIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5LCBGb3JtLA0KIEZvcm1GaWVsZCwgRnJhbWUsIEZ1bmN0aW9uLCBGeCwgR2V0T2JqZWN0LCBHcm91cCwgSGFzaCwgSG90S2V5LCBIVE1MRWxlbWVudCwNCiBIdG1sVGFibGUsIElmcmFtZSwgSWZyYW1lU2hpbSwgSW1hZ2UsIEludDE2QXJyYXksIEludDMyQXJyYXksIEludDhBcnJheSwNCiBJbnNlcnRpb24sIElucHV0VmFsaWRhdG9yLCBKU09OLCBLZXlib2FyZCwgTG9jYWxlLCBMTjEwLCBMTjIsIExPRzEwRSwgTE9HMkUsDQogTUFYX1ZBTFVFLCBNSU5fVkFMVUUsIE1hc2ssIE1hdGgsIE1lbnVJdGVtLCBNb3ZlQW5pbWF0aW9uLCBNb29Ub29scywgTmF0aXZlLA0KIE5FR0FUSVZFX0lORklOSVRZLCBOdW1iZXIsIE9iamVjdCwgT2JqZWN0UmFuZ2UsIE9wdGlvbiwgT3B0aW9ucywgT3ZlclRleHQsIFBJLA0KIFBPU0lUSVZFX0lORklOSVRZLCBQZXJpb2RpY2FsRXhlY3V0ZXIsIFBvaW50LCBQb3NpdGlvbiwgUHJvdG90eXBlLCBSYW5nZUVycm9yLA0KIFJlY3RhbmdsZSwgUmVmZXJlbmNlRXJyb3IsIFJlZ0V4cCwgUmVzaXplQW5pbWF0aW9uLCBSZXF1ZXN0LCBSb3RhdGVBbmltYXRpb24sDQogU1FSVDFfMiwgU1FSVDIsIFNjcm9sbEJhciwgU2NyaXB0RW5naW5lLCBTY3JpcHRFbmdpbmVCdWlsZFZlcnNpb24sDQogU2NyaXB0RW5naW5lTWFqb3JWZXJzaW9uLCBTY3JpcHRFbmdpbmVNaW5vclZlcnNpb24sIFNjcmlwdGFjdWxvdXMsIFNjcm9sbGVyLA0KIFNsaWNrLCBTbGlkZXIsIFNlbGVjdG9yLCBTdHJpbmcsIFN0eWxlLCBTeW50YXhFcnJvciwgU29ydGFibGUsIFNvcnRhYmxlcywNCiBTb3J0YWJsZU9ic2VydmVyLCBTb3VuZCwgU3Bpbm5lciwgU3lzdGVtLCBTd2lmZiwgVGV4dCwgVGV4dEFyZWEsIFRlbXBsYXRlLA0KIFRpbWVyLCBUaXBzLCBUeXBlLCBUeXBlRXJyb3IsIFRvZ2dsZSwgVHJ5LCBVUkksIFVSSUVycm9yLCBVUkwsIFZCQXJyYXksIFdTSCwNCiBXU2NyaXB0LCBXZWIsIFdpbmRvdywgWE1MRE9NLCBYTUxIdHRwUmVxdWVzdCwgWFBhdGhFdmFsdWF0b3IsIFhQYXRoRXhjZXB0aW9uLA0KIFhQYXRoRXhwcmVzc2lvbiwgWFBhdGhOYW1lc3BhY2UsIFhQYXRoTlNSZXNvbHZlciwgWFBhdGhSZXN1bHQsICJcXCIsIGEsDQogYWRkRXZlbnRMaXN0ZW5lciwgYWRkcmVzcywgYWxlcnQsIGFwcGx5LCBhcHBsaWNhdGlvbkNhY2hlLCBhcmd1bWVudHMsIGFyaXR5LA0KIGFzaSwgYiwgYml0d2lzZSwgYmxvY2ssIGJsdXIsIGJvb2xPcHRpb25zLCBib3NzLCBicm93c2VyLCBjLCBjYWxsLCBjYWxsZWUsDQogY2FsbGVyLCBjYXNlcywgY2hhckF0LCBjaGFyQ29kZUF0LCBjaGFyYWN0ZXIsIGNsZWFySW50ZXJ2YWwsIGNsZWFyVGltZW91dCwNCiBjbG9zZSwgY2xvc2VkLCBjbG9zdXJlLCBjb21tZW50LCBjb25kaXRpb24sIGNvbmZpcm0sIGNvbnNvbGUsIGNvbnN0cnVjdG9yLA0KIGNvbnRlbnQsIGNvdWNoLCBjcmVhdGUsIGNzcywgY3VybHksIGQsIGRhdGEsIGRhdGFsaXN0LCBkZCwgZGVidWcsIGRlY29kZVVSSSwNCiBkZWNvZGVVUklDb21wb25lbnQsIGRlZmF1bHRTdGF0dXMsIGRlZmluZUNsYXNzLCBkZXNlcmlhbGl6ZSwgZGV2ZWwsIGRvY3VtZW50LA0KIGRvam8sIGRpaml0LCBkb2pveCwgZGVmaW5lLCBlZGl0aW9uLCBlbHNlLCBlbWl0LCBlbmNvZGVVUkksIGVuY29kZVVSSUNvbXBvbmVudCwNCiBlbnRpdHlpZnksIGVxZXFlcSwgZXFudWxsLCBlcnJvcnMsIGVzNSwgZXNjYXBlLCBldmFsLCBldmVudCwgZXZpZGVuY2UsIGV2aWwsDQogZXgsIGV4Y2VwdGlvbiwgZXhlYywgZXhwcywgZXhwciwgZXhwb3J0cywgRmlsZVJlYWRlciwgZmlyc3QsIGZsb29yLCBmb2N1cywNCiBmb3JpbiwgZnJhZ21lbnQsIGZyYW1lcywgZnJvbSwgZnJvbUNoYXJDb2RlLCBmdWQsIGZ1bmN0LCBmdW5jdGlvbiwgZnVuY3Rpb25zLA0KIGcsIGdjLCBnZXRDb21wdXRlZFN0eWxlLCBnZXRSb3csIEdMT0JBTCwgZ2xvYmFsLCBnbG9iYWxzLCBnbG9iYWxzdHJpY3QsDQogaGFzT3duUHJvcGVydHksIGhlbHAsIGhpc3RvcnksIGksIGlkLCBpZGVudGlmaWVyLCBpbW1lZCwgaW1wbGllZHMsIGluY2x1ZGUsDQogaW5kZW50LCBpbmRleE9mLCBpbml0LCBpbnMsIGluc3RhbmNlT2YsIGlzQWxwaGEsIGlzQXBwbGljYXRpb25SdW5uaW5nLCBpc0FycmF5LA0KIGlzRGlnaXQsIGlzRmluaXRlLCBpc05hTiwgaXRlcmF0b3IsIGpvaW4sIGpzaGludCwNCiBKU0hJTlQsIGpzb24sIGpxdWVyeSwgalF1ZXJ5LCBrZXlzLCBsYWJlbCwgbGFiZWxsZWQsIGxhc3QsIGxhc3RzZW1pYywgbGF4YnJlYWssDQogbGF0ZWRlZiwgbGJwLCBsZWQsIGxlZnQsIGxlbmd0aCwgbGluZSwgbG9hZCwgbG9hZENsYXNzLCBsb2NhbFN0b3JhZ2UsIGxvY2F0aW9uLA0KIGxvZywgbG9vcGZ1bmMsIG0sIG1hdGNoLCBtYXhlcnIsIG1heGxlbiwgbWVtYmVyLG1lc3NhZ2UsIG1ldGEsIG1vZHVsZSwgbW92ZUJ5LA0KIG1vdmVUbywgbW9vdG9vbHMsIG5hbWUsIG5hdmlnYXRvciwgbmV3LCBuZXdjYXAsIG5vYXJnLCBub2RlLCBub2VtcHR5LCBub21lbiwNCiBub25ldywgbnVkLCBvbmJlZm9yZXVubG9hZCwgb25ibHVyLCBvbmVycm9yLCBvbmV2YXIsIG9uZm9jdXMsIG9ubG9hZCwgb25yZXNpemUsDQogb251bmxvYWQsIG9wZW4sIG9wZW5EYXRhYmFzZSwgb3BlblVSTCwgb3BlbmVyLCBvcGVyYSwgb3V0ZXIsIHBhcmFtLCBwYXJlbnQsDQogcGFyc2VGbG9hdCwgcGFyc2VJbnQsIHBhc3NmYWlsLCBwbHVzcGx1cywgcHJlZGVmLCBwcmludCwgcHJvY2VzcywgcHJvbXB0LA0KIHByb3RvLCBwcm90b3R5cGUsIHByb3RvdHlwZWpzLCBwdXNoLCBxdWl0LCByYW5nZSwgcmF3LCByZWFjaCwgcmVhc29uLCByZWdleHAsDQogcmVhZEZpbGUsIHJlYWRVcmwsIHJlZ2V4ZGFzaCwgcmVtb3ZlRXZlbnRMaXN0ZW5lciwgcmVwbGFjZSwgcmVwb3J0LCByZXF1aXJlLA0KIHJlc2VydmVkLCByZXNpemVCeSwgcmVzaXplVG8sIHJlc29sdmVQYXRoLCByZXN1bWVVcGRhdGVzLCByZXNwb25kLCByaGlubywgcmlnaHQsDQogcnVuQ29tbWFuZCwgc2Nyb2xsLCBzY3JlZW4sIHNjcmlwdHVybCwgc2Nyb2xsQnksIHNjcm9sbFRvLCBzY3JvbGxiYXIsIHNlYXJjaCwgc2VhbCwgc2VuZCwNCiBzZXJpYWxpemUsIHNldEludGVydmFsLCBzZXRUaW1lb3V0LCBzaGlmdCwgc2xpY2UsIHNvcnQsc3Bhd24sIHNwbGl0LCBzdGFjaywNCiBzdGF0dXMsIHN0YXJ0LCBzdHJpY3QsIHN1Yiwgc3Vic3RyLCBzdXBlcm5ldywgc2hhZG93LCBzdXBwbGFudCwgc3VtLCBzeW5jLA0KIHRlc3QsIHRvTG93ZXJDYXNlLCB0b1N0cmluZywgdG9VcHBlckNhc2UsIHRvaW50MzIsIHRva2VuLCB0b3AsIHRyYWlsaW5nLCB0eXBlLA0KIHR5cGVPZiwgVWludDE2QXJyYXksIFVpbnQzMkFycmF5LCBVaW50OEFycmF5LCB1bmRlZiwgdW51c2VkLCB1cmxzLCB2YWx1ZSwgdmFsdWVPZiwNCiB2YXIsIHZlcnNpb24sIFdlYlNvY2tldCwgd2hpdGUsIHdpbmRvdywgV29ya2VyLCB3c2gqLw0KDQovKmdsb2JhbCBleHBvcnRzOiBmYWxzZSAqLw0KDQovLyBXZSBidWlsZCB0aGUgYXBwbGljYXRpb24gaW5zaWRlIGEgZnVuY3Rpb24gc28gdGhhdCB3ZSBwcm9kdWNlIG9ubHkgYSBzaW5nbGUNCi8vIGdsb2JhbCB2YXJpYWJsZS4gVGhhdCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgaW1tZWRpYXRlbHksIGFuZCBpdHMgcmV0dXJuDQovLyB2YWx1ZSBpcyB0aGUgSlNISU5UIGZ1bmN0aW9uIGl0c2VsZi4NCg0KdmFyIEpTSElOVCA9IChmdW5jdGlvbiAoKSB7DQogICAgInVzZSBzdHJpY3QiOw0KDQogICAgdmFyIGFub25uYW1lLCAgICAgICAvLyBUaGUgZ3Vlc3NlZCBuYW1lIGZvciBhbm9ueW1vdXMgZnVuY3Rpb25zLg0KDQovLyBUaGVzZSBhcmUgb3BlcmF0b3JzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggdGhlICEgb3BlcmF0b3IuDQoNCiAgICAgICAgYmFuZyA9IHsNCiAgICAgICAgICAgICc8JyAgOiB0cnVlLA0KICAgICAgICAgICAgJzw9JyA6IHRydWUsDQogICAgICAgICAgICAnPT0nIDogdHJ1ZSwNCiAgICAgICAgICAgICc9PT0nOiB0cnVlLA0KICAgICAgICAgICAgJyE9PSc6IHRydWUsDQogICAgICAgICAgICAnIT0nIDogdHJ1ZSwNCiAgICAgICAgICAgICc+JyAgOiB0cnVlLA0KICAgICAgICAgICAgJz49JyA6IHRydWUsDQogICAgICAgICAgICAnKycgIDogdHJ1ZSwNCiAgICAgICAgICAgICctJyAgOiB0cnVlLA0KICAgICAgICAgICAgJyonICA6IHRydWUsDQogICAgICAgICAgICAnLycgIDogdHJ1ZSwNCiAgICAgICAgICAgICclJyAgOiB0cnVlDQogICAgICAgIH0sDQoNCi8vIFRoZXNlIGFyZSB0aGUgSlNIaW50IGJvb2xlYW4gb3B0aW9ucy4NCg0KICAgICAgICBib29sT3B0aW9ucyA9IHsNCiAgICAgICAgICAgIGFzaSAgICAgICAgIDogdHJ1ZSwgLy8gaWYgYXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24gc2hvdWxkIGJlIHRvbGVyYXRlZA0KICAgICAgICAgICAgYml0d2lzZSAgICAgOiB0cnVlLCAvLyBpZiBiaXR3aXNlIG9wZXJhdG9ycyBzaG91bGQgbm90IGJlIGFsbG93ZWQNCiAgICAgICAgICAgIGJvc3MgICAgICAgIDogdHJ1ZSwgLy8gaWYgYWR2YW5jZWQgdXNhZ2Ugb2YgYXNzaWdubWVudHMgc2hvdWxkIGJlIGFsbG93ZWQNCiAgICAgICAgICAgIGJyb3dzZXIgICAgIDogdHJ1ZSwgLy8gaWYgdGhlIHN0YW5kYXJkIGJyb3dzZXIgZ2xvYmFscyBzaG91bGQgYmUgcHJlZGVmaW5lZA0KICAgICAgICAgICAgY291Y2ggICAgICAgOiB0cnVlLCAvLyBpZiBDb3VjaERCIGdsb2JhbHMgc2hvdWxkIGJlIHByZWRlZmluZWQNCiAgICAgICAgICAgIGN1cmx5ICAgICAgIDogdHJ1ZSwgLy8gaWYgY3VybHkgYnJhY2VzIGFyb3VuZCBhbGwgYmxvY2tzIHNob3VsZCBiZSByZXF1aXJlZA0KICAgICAgICAgICAgZGVidWcgICAgICAgOiB0cnVlLCAvLyBpZiBkZWJ1Z2dlciBzdGF0ZW1lbnRzIHNob3VsZCBiZSBhbGxvd2VkDQogICAgICAgICAgICBkZXZlbCAgICAgICA6IHRydWUsIC8vIGlmIGxvZ2dpbmcgZ2xvYmFscyBzaG91bGQgYmUgcHJlZGVmaW5lZCAoY29uc29sZSwgYWxlcnQsIGV0Yy4pDQogICAgICAgICAgICBkb2pvICAgICAgICA6IHRydWUsIC8vIGlmIERvam8gVG9vbGtpdCBnbG9iYWxzIHNob3VsZCBiZSBwcmVkZWZpbmVkDQogICAgICAgICAgICBlcWVxZXEgICAgICA6IHRydWUsIC8vIGlmID09PSBzaG91bGQgYmUgcmVxdWlyZWQNCiAgICAgICAgICAgIGVxbnVsbCAgICAgIDogdHJ1ZSwgLy8gaWYgPT0gbnVsbCBjb21wYXJpc29ucyBzaG91bGQgYmUgdG9sZXJhdGVkDQogICAgICAgICAgICBlczUgICAgICAgICA6IHRydWUsIC8vIGlmIEVTNSBzeW50YXggc2hvdWxkIGJlIGFsbG93ZWQNCiAgICAgICAgICAgIGV2aWwgICAgICAgIDogdHJ1ZSwgLy8gaWYgZXZhbCBzaG91bGQgYmUgYWxsb3dlZA0KICAgICAgICAgICAgZXhwciAgICAgICAgOiB0cnVlLCAvLyBpZiBFeHByZXNzaW9uU3RhdGVtZW50IHNob3VsZCBiZSBhbGxvd2VkIGFzIFByb2dyYW1zDQogICAgICAgICAgICBmb3JpbiAgICAgICA6IHRydWUsIC8vIGlmIGZvciBpbiBzdGF0ZW1lbnRzIG11c3QgZmlsdGVyDQogICAgICAgICAgICBnbG9iYWxzdHJpY3Q6IHRydWUsIC8vIGlmIGdsb2JhbCAidXNlIHN0cmljdCI7IHNob3VsZCBiZSBhbGxvd2VkIChhbHNvIGVuYWJsZXMgJ3N0cmljdCcpDQogICAgICAgICAgICBpbW1lZCAgICAgICA6IHRydWUsIC8vIGlmIGltbWVkaWF0ZSBpbnZvY2F0aW9ucyBtdXN0IGJlIHdyYXBwZWQgaW4gcGFyZW5zDQogICAgICAgICAgICBpdGVyYXRvciAgICA6IHRydWUsIC8vIGlmIHRoZSBgX19pdGVyYXRvcl9fYCBwcm9wZXJ0eSBzaG91bGQgYmUgZGlzYWxsb3dlZA0KICAgICAgICAgICAganF1ZXJ5ICAgICAgOiB0cnVlLCAvLyBpZiBqUXVlcnkgZ2xvYmFscyBzaG91bGQgYmUgcHJlZGVmaW5lZA0KICAgICAgICAgICAgbGF0ZWRlZiAgICAgOiB0cnVlLCAvLyBpZiB0aGUgdXNlIGJlZm9yZSBkZWZpbml0aW9uIHNob3VsZCBub3QgYmUgdG9sZXJhdGVkDQogICAgICAgICAgICBsYXhicmVhayAgICA6IHRydWUsIC8vIGlmIGxpbmUgYnJlYWtzIHNob3VsZCBub3QgYmUgY2hlY2tlZA0KICAgICAgICAgICAgbG9vcGZ1bmMgICAgOiB0cnVlLCAvLyBpZiBmdW5jdGlvbnMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgZGVmaW5lZCB3aXRoaW4gbG9vcHMNCiAgICAgICAgICAgIG1vb3Rvb2xzICAgIDogdHJ1ZSwgLy8gaWYgTW9vVG9vbHMgZ2xvYmFscyBzaG91bGQgYmUgcHJlZGVmaW5lZA0KICAgICAgICAgICAgbmV3Y2FwICAgICAgOiB0cnVlLCAvLyBpZiBjb25zdHJ1Y3RvciBuYW1lcyBtdXN0IGJlIGNhcGl0YWxpemVkDQogICAgICAgICAgICBub2FyZyAgICAgICA6IHRydWUsIC8vIGlmIGFyZ3VtZW50cy5jYWxsZXIgYW5kIGFyZ3VtZW50cy5jYWxsZWUgc2hvdWxkIGJlIGRpc2FsbG93ZWQNCiAgICAgICAgICAgIG5vZGUgICAgICAgIDogdHJ1ZSwgLy8gaWYgdGhlIE5vZGUuanMgZW52aXJvbm1lbnQgZ2xvYmFscyBzaG91bGQgYmUgcHJlZGVmaW5lZA0KICAgICAgICAgICAgbm9lbXB0eSAgICAgOiB0cnVlLCAvLyBpZiBlbXB0eSBibG9ja3Mgc2hvdWxkIGJlIGRpc2FsbG93ZWQNCiAgICAgICAgICAgIG5vbmV3ICAgICAgIDogdHJ1ZSwgLy8gaWYgdXNpbmcgYG5ld2AgZm9yIHNpZGUtZWZmZWN0cyBzaG91bGQgYmUgZGlzYWxsb3dlZA0KICAgICAgICAgICAgbm9tZW4gICAgICAgOiB0cnVlLCAvLyBpZiBuYW1lcyBzaG91bGQgYmUgY2hlY2tlZA0KICAgICAgICAgICAgb25ldmFyICAgICAgOiB0cnVlLCAvLyBpZiBvbmx5IG9uZSB2YXIgc3RhdGVtZW50IHBlciBmdW5jdGlvbiBzaG91bGQgYmUgYWxsb3dlZA0KICAgICAgICAgICAgcGFzc2ZhaWwgICAgOiB0cnVlLCAvLyBpZiB0aGUgc2NhbiBzaG91bGQgc3RvcCBvbiBmaXJzdCBlcnJvcg0KICAgICAgICAgICAgcGx1c3BsdXMgICAgOiB0cnVlLCAvLyBpZiBpbmNyZW1lbnQvZGVjcmVtZW50IHNob3VsZCBub3QgYmUgYWxsb3dlZA0KICAgICAgICAgICAgcHJvdG8gICAgICAgOiB0cnVlLCAvLyBpZiB0aGUgYF9fcHJvdG9fX2AgcHJvcGVydHkgc2hvdWxkIGJlIGRpc2FsbG93ZWQNCiAgICAgICAgICAgIHByb3RvdHlwZWpzIDogdHJ1ZSwgLy8gaWYgUHJvdG90eXBlIGFuZCBTY3JpcHRhY3Vsb3VzIGdsb2JhbHMgc2hvdWxkIGJlIHByZWRlZmluZWQNCiAgICAgICAgICAgIHJlZ2V4ZGFzaCAgIDogdHJ1ZSwgLy8gaWYgdW5lc2NhcGVkIGxhc3QgZGFzaCAoLSkgaW5zaWRlIGJyYWNrZXRzIHNob3VsZCBiZSB0b2xlcmF0ZWQNCiAgICAgICAgICAgIHJlZ2V4cCAgICAgIDogdHJ1ZSwgLy8gaWYgdGhlIC4gc2hvdWxkIG5vdCBiZSBhbGxvd2VkIGluIHJlZ2V4cCBsaXRlcmFscw0KICAgICAgICAgICAgcmhpbm8gICAgICAgOiB0cnVlLCAvLyBpZiB0aGUgUmhpbm8gZW52aXJvbm1lbnQgZ2xvYmFscyBzaG91bGQgYmUgcHJlZGVmaW5lZA0KICAgICAgICAgICAgdW5kZWYgICAgICAgOiB0cnVlLCAvLyBpZiB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlY2xhcmVkIGJlZm9yZSB1c2VkDQogICAgICAgICAgICBzY3JpcHR1cmwgICA6IHRydWUsIC8vIGlmIHNjcmlwdC10YXJnZXRlZCBVUkxzIHNob3VsZCBiZSB0b2xlcmF0ZWQNCiAgICAgICAgICAgIHNoYWRvdyAgICAgIDogdHJ1ZSwgLy8gaWYgdmFyaWFibGUgc2hhZG93aW5nIHNob3VsZCBiZSB0b2xlcmF0ZWQNCiAgICAgICAgICAgIHN0cmljdCAgICAgIDogdHJ1ZSwgLy8gcmVxdWlyZSB0aGUgInVzZSBzdHJpY3QiOyBwcmFnbWENCiAgICAgICAgICAgIHN1YiAgICAgICAgIDogdHJ1ZSwgLy8gaWYgYWxsIGZvcm1zIG9mIHN1YnNjcmlwdCBub3RhdGlvbiBhcmUgdG9sZXJhdGVkDQogICAgICAgICAgICBzdXBlcm5ldyAgICA6IHRydWUsIC8vIGlmIGBuZXcgZnVuY3Rpb24gKCkgeyAuLi4gfTtgIGFuZCBgbmV3IE9iamVjdDtgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSB0b2xlcmF0ZWQNCiAgICAgICAgICAgIHRyYWlsaW5nICAgIDogdHJ1ZSwgLy8gaWYgdHJhaWxpbmcgd2hpdGVzcGFjZSBydWxlcyBhcHBseQ0KICAgICAgICAgICAgd2hpdGUgICAgICAgOiB0cnVlLCAvLyBpZiBzdHJpY3Qgd2hpdGVzcGFjZSBydWxlcyBhcHBseQ0KICAgICAgICAgICAgd3NoICAgICAgICAgOiB0cnVlICAvLyBpZiB0aGUgV2luZG93cyBTY3JpcHRpbmcgSG9zdCBlbnZpcm9ubWVudCBnbG9iYWxzIHNob3VsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZSBwcmVkZWZpbmVkDQogICAgICAgIH0sDQoNCi8vIGJyb3dzZXIgY29udGFpbnMgYSBzZXQgb2YgZ2xvYmFsIG5hbWVzIHdoaWNoIGFyZSBjb21tb25seSBwcm92aWRlZCBieSBhDQovLyB3ZWIgYnJvd3NlciBlbnZpcm9ubWVudC4NCg0KICAgICAgICBicm93c2VyID0gew0KICAgICAgICAgICAgQXJyYXlCdWZmZXIgICAgIDogZmFsc2UsDQogICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcgOiBmYWxzZSwNCiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZhbHNlLA0KICAgICAgICAgICAgYXBwbGljYXRpb25DYWNoZTogZmFsc2UsDQogICAgICAgICAgICBibHVyICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwgICA6IGZhbHNlLA0KICAgICAgICAgICAgY2xlYXJUaW1lb3V0ICAgIDogZmFsc2UsDQogICAgICAgICAgICBjbG9zZSAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGNsb3NlZCAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgRGF0YVZpZXcgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBkZWZhdWx0U3RhdHVzICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGRvY3VtZW50ICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgZXZlbnQgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBGaWxlUmVhZGVyICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEZsb2F0MzJBcnJheSAgICA6IGZhbHNlLA0KICAgICAgICAgICAgRmxvYXQ2NEFycmF5ICAgIDogZmFsc2UsDQogICAgICAgICAgICBmb2N1cyAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGZyYW1lcyAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZTogZmFsc2UsDQogICAgICAgICAgICBIVE1MRWxlbWVudCAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGhpc3RvcnkgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgSW50MTZBcnJheSAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBJbnQzMkFycmF5ICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEludDhBcnJheSAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgSW1hZ2UgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBsZW5ndGggICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZSAgICA6IGZhbHNlLA0KICAgICAgICAgICAgbG9jYXRpb24gICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBtb3ZlQnkgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIG1vdmVUbyAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgbmFtZSAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBuYXZpZ2F0b3IgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIG9uYmVmb3JldW5sb2FkICA6IHRydWUsDQogICAgICAgICAgICBvbmJsdXIgICAgICAgICAgOiB0cnVlLA0KICAgICAgICAgICAgb25lcnJvciAgICAgICAgIDogdHJ1ZSwNCiAgICAgICAgICAgIG9uZm9jdXMgICAgICAgICA6IHRydWUsDQogICAgICAgICAgICBvbmxvYWQgICAgICAgICAgOiB0cnVlLA0KICAgICAgICAgICAgb25yZXNpemUgICAgICAgIDogdHJ1ZSwNCiAgICAgICAgICAgIG9udW5sb2FkICAgICAgICA6IHRydWUsDQogICAgICAgICAgICBvcGVuICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIG9wZW5EYXRhYmFzZSAgICA6IGZhbHNlLA0KICAgICAgICAgICAgb3BlbmVyICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBPcHRpb24gICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHBhcmVudCAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgcHJpbnQgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmYWxzZSwNCiAgICAgICAgICAgIHJlc2l6ZUJ5ICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgcmVzaXplVG8gICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBzY3JlZW4gICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHNjcm9sbCAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgc2Nyb2xsQnkgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBzY3JvbGxUbyAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHNldEludGVydmFsICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgc2V0VGltZW91dCAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBzdGF0dXMgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHRvcCAgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgVWludDE2QXJyYXkgICAgIDogZmFsc2UsDQogICAgICAgICAgICBVaW50MzJBcnJheSAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFVpbnQ4QXJyYXkgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgV2ViU29ja2V0ICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICB3aW5kb3cgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFdvcmtlciAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3QgIDogZmFsc2UsDQogICAgICAgICAgICBYUGF0aEV2YWx1YXRvciAgOiBmYWxzZSwNCiAgICAgICAgICAgIFhQYXRoRXhjZXB0aW9uICA6IGZhbHNlLA0KICAgICAgICAgICAgWFBhdGhFeHByZXNzaW9uIDogZmFsc2UsDQogICAgICAgICAgICBYUGF0aE5hbWVzcGFjZSAgOiBmYWxzZSwNCiAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciA6IGZhbHNlLA0KICAgICAgICAgICAgWFBhdGhSZXN1bHQgICAgIDogZmFsc2UNCiAgICAgICAgfSwNCg0KICAgICAgICBjb3VjaCA9IHsNCiAgICAgICAgICAgICJyZXF1aXJlIiA6IGZhbHNlLA0KICAgICAgICAgICAgcmVzcG9uZCAgIDogZmFsc2UsDQogICAgICAgICAgICBnZXRSb3cgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGVtaXQgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgc2VuZCAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBzdGFydCAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHN1bSAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgbG9nICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBleHBvcnRzICAgOiBmYWxzZSwNCiAgICAgICAgICAgIG1vZHVsZSAgICA6IGZhbHNlDQogICAgICAgIH0sDQoNCiAgICAgICAgZGV2ZWwgPSB7DQogICAgICAgICAgICBhbGVydCAgIDogZmFsc2UsDQogICAgICAgICAgICBjb25maXJtIDogZmFsc2UsDQogICAgICAgICAgICBjb25zb2xlIDogZmFsc2UsDQogICAgICAgICAgICBEZWJ1ZyAgIDogZmFsc2UsDQogICAgICAgICAgICBvcGVyYSAgIDogZmFsc2UsDQogICAgICAgICAgICBwcm9tcHQgIDogZmFsc2UNCiAgICAgICAgfSwNCg0KICAgICAgICBkb2pvID0gew0KICAgICAgICAgICAgZG9qbyAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBkaWppdCAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGRvam94ICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgZGVmaW5lICAgIDogZmFsc2UsDQogICAgICAgICAgICAicmVxdWlyZSIgOiBmYWxzZQ0KICAgICAgICB9LA0KDQogICAgICAgIGVzY2FwZXMgPSB7DQogICAgICAgICAgICAnXGInOiAnXFxiJywNCiAgICAgICAgICAgICdcdCc6ICdcXHQnLA0KICAgICAgICAgICAgJ1xuJzogJ1xcbicsDQogICAgICAgICAgICAnXGYnOiAnXFxmJywNCiAgICAgICAgICAgICdccic6ICdcXHInLA0KICAgICAgICAgICAgJyInIDogJ1xcIicsDQogICAgICAgICAgICAnLycgOiAnXFwvJywNCiAgICAgICAgICAgICdcXCc6ICdcXFxcJw0KICAgICAgICB9LA0KDQogICAgICAgIGZ1bmN0LCAgICAgICAgICAvLyBUaGUgY3VycmVudCBmdW5jdGlvbg0KDQogICAgICAgIGZ1bmN0aW9uaWNpdHkgPSBbDQogICAgICAgICAgICAnY2xvc3VyZScsICdleGNlcHRpb24nLCAnZ2xvYmFsJywgJ2xhYmVsJywNCiAgICAgICAgICAgICdvdXRlcicsICd1bnVzZWQnLCAndmFyJw0KICAgICAgICBdLA0KDQogICAgICAgIGZ1bmN0aW9ucywgICAgICAvLyBBbGwgb2YgdGhlIGZ1bmN0aW9ucw0KDQogICAgICAgIGdsb2JhbCwgICAgICAgICAvLyBUaGUgZ2xvYmFsIHNjb3BlDQogICAgICAgIGltcGxpZWQsICAgICAgICAvLyBJbXBsaWVkIGdsb2JhbHMNCiAgICAgICAgaW5ibG9jaywNCiAgICAgICAgaW5kZW50LA0KICAgICAgICBqc29ubW9kZSwNCg0KICAgICAgICBqcXVlcnkgPSB7DQogICAgICAgICAgICAnJCcgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGpRdWVyeSA6IGZhbHNlDQogICAgICAgIH0sDQoNCiAgICAgICAgbGluZXMsDQogICAgICAgIGxvb2thaGVhZCwNCiAgICAgICAgbWVtYmVyLA0KICAgICAgICBtZW1iZXJzT25seSwNCg0KICAgICAgICBtb290b29scyA9IHsNCiAgICAgICAgICAgICckJyAgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgJyQkJyAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBBc3NldHMgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEJyb3dzZXIgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgQ2hhaW4gICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBDbGFzcyAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIENvbG9yICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgQ29va2llICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBDb3JlICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIERvY3VtZW50ICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgRG9tUmVhZHkgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBET01SZWFkeSAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIERyYWcgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgRWxlbWVudCAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBFbGVtZW50cyAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEV2ZW50ICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgRXZlbnRzICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBGeCAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEdyb3VwICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgSGFzaCAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBIdG1sVGFibGUgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIElmcmFtZSAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgSWZyYW1lU2hpbSAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBJbnB1dFZhbGlkYXRvciAgOiBmYWxzZSwNCiAgICAgICAgICAgIGluc3RhbmNlT2YgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgS2V5Ym9hcmQgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBMb2NhbGUgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIE1hc2sgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgTW9vVG9vbHMgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBOYXRpdmUgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIE9wdGlvbnMgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgT3ZlclRleHQgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBSZXF1ZXN0ICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFNjcm9sbGVyICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgU2xpY2sgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBTbGlkZXIgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFNvcnRhYmxlcyAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgU3Bpbm5lciAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBTd2lmZiAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFRpcHMgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgVHlwZSAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICB0eXBlT2YgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFVSSSAgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgV2luZG93ICAgICAgICAgIDogZmFsc2UNCiAgICAgICAgfSwNCg0KICAgICAgICBuZXh0dG9rZW4sDQoNCiAgICAgICAgbm9kZSA9IHsNCiAgICAgICAgICAgIF9fZmlsZW5hbWUgIDogZmFsc2UsDQogICAgICAgICAgICBfX2Rpcm5hbWUgICA6IGZhbHNlLA0KICAgICAgICAgICAgZXhwb3J0cyAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEJ1ZmZlciAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBHTE9CQUwgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgZ2xvYmFsICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIG1vZHVsZSAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBwcm9jZXNzICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgcmVxdWlyZSAgICAgOiBmYWxzZQ0KICAgICAgICB9LA0KDQogICAgICAgIG5vcmVhY2gsDQogICAgICAgIG9wdGlvbiwNCiAgICAgICAgcHJlZGVmaW5lZCwgICAgIC8vIEdsb2JhbCB2YXJpYWJsZXMgZGVmaW5lZCBieSBvcHRpb24NCiAgICAgICAgcHJlcmVnLA0KICAgICAgICBwcmV2dG9rZW4sDQoNCiAgICAgICAgcHJvdG90eXBlanMgPSB7DQogICAgICAgICAgICAnJCcgICAgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgJyQkJyAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgICckQScgICAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICAnJEYnICAgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgJyRIJyAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgICckUicgICAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICAnJGJyZWFrJyAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgJyRjb250aW51ZScgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgICckdycgICAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBBYnN0cmFjdCAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgQWpheCAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBFbnVtZXJhYmxlICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEV2ZW50ICAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBGaWVsZCAgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgRm9ybSAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEhhc2ggICAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBJbnNlcnRpb24gICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgT2JqZWN0UmFuZ2UgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFBlcmlvZGljYWxFeGVjdXRlcjogZmFsc2UsDQogICAgICAgICAgICBQb3NpdGlvbiAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgUHJvdG90eXBlICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFNlbGVjdG9yICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBUZW1wbGF0ZSAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgVG9nZ2xlICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFRyeSAgICAgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBBdXRvY29tcGxldGVyICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgQnVpbGRlciAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIENvbnRyb2wgICAgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBEcmFnZ2FibGUgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgRHJhZ2dhYmxlcyAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIERyb3BwYWJsZXMgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBFZmZlY3QgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgU29ydGFibGUgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFNvcnRhYmxlT2JzZXJ2ZXIgIDogZmFsc2UsDQogICAgICAgICAgICBTb3VuZCAgICAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgU2NyaXB0YWN1bG91cyAgICAgOiBmYWxzZQ0KICAgICAgICB9LA0KDQogICAgICAgIHJoaW5vID0gew0KICAgICAgICAgICAgZGVmaW5lQ2xhc3MgOiBmYWxzZSwNCiAgICAgICAgICAgIGRlc2VyaWFsaXplIDogZmFsc2UsDQogICAgICAgICAgICBnYyAgICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgaGVscCAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGxvYWQgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBsb2FkQ2xhc3MgICA6IGZhbHNlLA0KICAgICAgICAgICAgcHJpbnQgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHF1aXQgICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICByZWFkRmlsZSAgICA6IGZhbHNlLA0KICAgICAgICAgICAgcmVhZFVybCAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHJ1bkNvbW1hbmQgIDogZmFsc2UsDQogICAgICAgICAgICBzZWFsICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgc2VyaWFsaXplICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHNwYXduICAgICAgIDogZmFsc2UsDQogICAgICAgICAgICBzeW5jICAgICAgICA6IGZhbHNlLA0KICAgICAgICAgICAgdG9pbnQzMiAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHZlcnNpb24gICAgIDogZmFsc2UNCiAgICAgICAgfSwNCg0KICAgICAgICBzY29wZSwgICAgICAvLyBUaGUgY3VycmVudCBzY29wZQ0KICAgICAgICBzcmMsDQogICAgICAgIHN0YWNrLA0KDQovLyBzdGFuZGFyZCBjb250YWlucyB0aGUgZ2xvYmFsIG5hbWVzIHRoYXQgYXJlIHByb3ZpZGVkIGJ5IHRoZQ0KLy8gRUNNQVNjcmlwdCBzdGFuZGFyZC4NCg0KICAgICAgICBzdGFuZGFyZCA9IHsNCiAgICAgICAgICAgIEFycmF5ICAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIERhdGUgICAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGRlY29kZVVSSSAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGRlY29kZVVSSUNvbXBvbmVudCAgOiBmYWxzZSwNCiAgICAgICAgICAgIGVuY29kZVVSSSAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudCAgOiBmYWxzZSwNCiAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgICdldmFsJyAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEV2YWxFcnJvciAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEZ1bmN0aW9uICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGhhc093blByb3BlcnR5ICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGlzRmluaXRlICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIGlzTmFOICAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIEpTT04gICAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIE1hdGggICAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIE51bWJlciAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHBhcnNlSW50ICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIHBhcnNlRmxvYXQgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFJhbmdlRXJyb3IgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFJlZmVyZW5jZUVycm9yICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFJlZ0V4cCAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFN5bnRheEVycm9yICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFR5cGVFcnJvciAgICAgICAgICAgOiBmYWxzZSwNCiAgICAgICAgICAgIFVSSUVycm9yICAgICAgICAgICAgOiBmYWxzZQ0KICAgICAgICB9LA0KDQogICAgICAgIHN0YW5kYXJkX21lbWJlciA9IHsNCiAgICAgICAgICAgIEUgICAgICAgICAgICAgICAgICAgOiB0cnVlLA0KICAgICAgICAgICAgTE4yICAgICAgICAgICAgICAgICA6IHRydWUsDQogICAgICAgICAgICBMTjEwICAgICAgICAgICAgICAgIDogdHJ1ZSwNCiAgICAgICAgICAgIExPRzJFICAgICAgICAgICAgICAgOiB0cnVlLA0KICAgICAgICAgICAgTE9HMTBFICAgICAgICAgICAgICA6IHRydWUsDQogICAgICAgICAgICBNQVhfVkFMVUUgICAgICAgICAgIDogdHJ1ZSwNCiAgICAgICAgICAgIE1JTl9WQUxVRSAgICAgICAgICAgOiB0cnVlLA0KICAgICAgICAgICAgTkVHQVRJVkVfSU5GSU5JVFkgICA6IHRydWUsDQogICAgICAgICAgICBQSSAgICAgICAgICAgICAgICAgIDogdHJ1ZSwNCiAgICAgICAgICAgIFBPU0lUSVZFX0lORklOSVRZICAgOiB0cnVlLA0KICAgICAgICAgICAgU1FSVDFfMiAgICAgICAgICAgICA6IHRydWUsDQogICAgICAgICAgICBTUVJUMiAgICAgICAgICAgICAgIDogdHJ1ZQ0KICAgICAgICB9LA0KDQogICAgICAgIHN0cmljdF9tb2RlLA0KICAgICAgICBzeW50YXggPSB7fSwNCiAgICAgICAgdGFiLA0KICAgICAgICB0b2tlbiwNCiAgICAgICAgdXJscywNCiAgICAgICAgd2FybmluZ3MsDQoNCiAgICAgICAgd3NoID0gew0KICAgICAgICAgICAgQWN0aXZlWE9iamVjdCAgICAgICAgICAgICA6IHRydWUsDQogICAgICAgICAgICBFbnVtZXJhdG9yICAgICAgICAgICAgICAgIDogdHJ1ZSwNCiAgICAgICAgICAgIEdldE9iamVjdCAgICAgICAgICAgICAgICAgOiB0cnVlLA0KICAgICAgICAgICAgU2NyaXB0RW5naW5lICAgICAgICAgICAgICA6IHRydWUsDQogICAgICAgICAgICBTY3JpcHRFbmdpbmVCdWlsZFZlcnNpb24gIDogdHJ1ZSwNCiAgICAgICAgICAgIFNjcmlwdEVuZ2luZU1ham9yVmVyc2lvbiAgOiB0cnVlLA0KICAgICAgICAgICAgU2NyaXB0RW5naW5lTWlub3JWZXJzaW9uICA6IHRydWUsDQogICAgICAgICAgICBWQkFycmF5ICAgICAgICAgICAgICAgICAgIDogdHJ1ZSwNCiAgICAgICAgICAgIFdTSCAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlLA0KICAgICAgICAgICAgV1NjcmlwdCAgICAgICAgICAgICAgICAgICA6IHRydWUNCiAgICAgICAgfTsNCg0KICAgICAgICAvLyBSZWd1bGFyIGV4cHJlc3Npb25zLiBTb21lIG9mIHRoZXNlIGFyZSBzdHVwaWRseSBsb25nLg0KICAgICAgICB2YXIgYXgsIGN4LCB0eCwgbngsIG54ZywgbHgsIGl4LCBqeCwgZnQ7DQogICAgICAgIChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAvKmpzaGludCBtYXhsZW46MzAwICovDQoNCiAgICAgICAgICAgIC8vIHVuc2FmZSBjb21tZW50IG9yIHN0cmluZw0KICAgICAgICAgICAgYXggPSAvQGNjfDxcLz98c2NyaXB0fFxdXHMqXF18PFxzKiF8Jmx0L2k7DQoNCiAgICAgICAgICAgIC8vIHVuc2FmZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHNpbGVudGx5IGRlbGV0ZWQgYnkgb25lIG9yIG1vcmUgYnJvd3NlcnMNCiAgICAgICAgICAgIGN4ID0gL1tcdTAwMDAtXHUwMDFmXHUwMDdmLVx1MDA5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS87DQoNCiAgICAgICAgICAgIC8vIHRva2VuDQogICAgICAgICAgICB0eCA9IC9eXHMqKFsoKXt9XFsuLDo7JyJ+XD9cXSNAXXw9PT89P3xcLyhcKihqc2hpbnR8anNsaW50fG1lbWJlcnM/fGdsb2JhbCk/fD18XC8pP3xcKltcLz1dP3xcKyg/Oj18XCsrKT98LSg/Oj18LSspP3wlPT98JlsmPV0/fFx8W3w9XT98Pj4/Pj89P3w8KFtcLz0hXXxcIShcW3wtLSk/fDw9Pyk/fFxePT98XCE9Pz0/fFthLXpBLVpfJF1bYS16QS1aMC05XyRdKnxbMC05XSsoW3hYXVswLTlhLWZBLUZdK3xcLlswLTldKik/KFtlRV1bK1wtXT9bMC05XSspPykvOw0KDQogICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGluIHN0cmluZ3MgdGhhdCBuZWVkIGVzY2FwZW1lbnQNCiAgICAgICAgICAgIG54ID0gL1tcdTAwMDAtXHUwMDFmJjwiXC9cXFx1MDA3Zi1cdTAwOWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vOw0KICAgICAgICAgICAgbnhnID0gL1tcdTAwMDAtXHUwMDFmJjwiXC9cXFx1MDA3Zi1cdTAwOWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZzsNCg0KICAgICAgICAgICAgLy8gc3RhciBzbGFzaA0KICAgICAgICAgICAgbHggPSAvXCpcL3xcL1wqLzsNCg0KICAgICAgICAgICAgLy8gaWRlbnRpZmllcg0KICAgICAgICAgICAgaXggPSAvXihbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopJC87DQoNCiAgICAgICAgICAgIC8vIGphdmFzY3JpcHQgdXJsDQogICAgICAgICAgICBqeCA9IC9eKD86amF2YXNjcmlwdHxqc2NyaXB0fGVjbWFzY3JpcHR8dmJzY3JpcHR8bW9jaGF8bGl2ZXNjcmlwdClccyo6L2k7DQoNCiAgICAgICAgICAgIC8vIGNhdGNoZXMgLyogZmFsbHMgdGhyb3VnaCAqLyBjb21tZW50cw0KICAgICAgICAgICAgZnQgPSAvXlxzKlwvXCpccypmYWxsc1xzdGhyb3VnaFxzKlwqXC9ccyokLzsNCiAgICAgICAgfSgpKTsNCg0KICAgIGZ1bmN0aW9uIEYoKSB7fSAgICAgLy8gVXNlZCBieSBPYmplY3QuY3JlYXRlDQoNCiAgICBmdW5jdGlvbiBpc19vd24ob2JqZWN0LCBuYW1lKSB7DQoNCi8vIFRoZSBvYmplY3QuaGFzT3duUHJvcGVydHkgbWV0aG9kIGZhaWxzIHdoZW4gdGhlIHByb3BlcnR5IHVuZGVyIGNvbnNpZGVyYXRpb24NCi8vIGlzIG5hbWVkICdoYXNPd25Qcm9wZXJ0eScuIFNvIHdlIGhhdmUgdG8gdXNlIHRoaXMgbW9yZSBjb252b2x1dGVkIGZvcm0uDQoNCiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIG5hbWUpOw0KICAgIH0NCg0KLy8gUHJvdmlkZSBjcml0aWNhbCBFUzUgZnVuY3Rpb25zIHRvIEVTMy4NCg0KICAgIGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSAhPT0gJ2Z1bmN0aW9uJykgew0KICAgICAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gKG8pIHsNCiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG8pID09PSAnW29iamVjdCBBcnJheV0nOw0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykgew0KICAgICAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKG8pIHsNCiAgICAgICAgICAgIEYucHJvdG90eXBlID0gbzsNCiAgICAgICAgICAgIHJldHVybiBuZXcgRigpOw0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIGlmICh0eXBlb2YgT2JqZWN0LmtleXMgIT09ICdmdW5jdGlvbicpIHsNCiAgICAgICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiAobykgew0KICAgICAgICAgICAgdmFyIGEgPSBbXSwgazsNCiAgICAgICAgICAgIGZvciAoayBpbiBvKSB7DQogICAgICAgICAgICAgICAgaWYgKGlzX293bihvLCBrKSkgew0KICAgICAgICAgICAgICAgICAgICBhLnB1c2goayk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGE7DQogICAgICAgIH07DQogICAgfQ0KDQovLyBOb24gc3RhbmRhcmQgbWV0aG9kcw0KDQogICAgaWYgKHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmVudGl0eWlmeSAhPT0gJ2Z1bmN0aW9uJykgew0KICAgICAgICBTdHJpbmcucHJvdG90eXBlLmVudGl0eWlmeSA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzDQogICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykNCiAgICAgICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpDQogICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTsNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICBpZiAodHlwZW9mIFN0cmluZy5wcm90b3R5cGUuaXNBbHBoYSAhPT0gJ2Z1bmN0aW9uJykgew0KICAgICAgICBTdHJpbmcucHJvdG90eXBlLmlzQWxwaGEgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gKHRoaXMgPj0gJ2EnICYmIHRoaXMgPD0gJ3pcdWZmZmYnKSB8fA0KICAgICAgICAgICAgICAgICh0aGlzID49ICdBJyAmJiB0aGlzIDw9ICdaXHVmZmZmJyk7DQogICAgICAgIH07DQogICAgfQ0KDQogICAgaWYgKHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmlzRGlnaXQgIT09ICdmdW5jdGlvbicpIHsNCiAgICAgICAgU3RyaW5nLnByb3RvdHlwZS5pc0RpZ2l0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmV0dXJuICh0aGlzID49ICcwJyAmJiB0aGlzIDw9ICc5Jyk7DQogICAgICAgIH07DQogICAgfQ0KDQogICAgaWYgKHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLnN1cHBsYW50ICE9PSAnZnVuY3Rpb24nKSB7DQogICAgICAgIFN0cmluZy5wcm90b3R5cGUuc3VwcGxhbnQgPSBmdW5jdGlvbiAobykgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvXHsoW157fV0qKVx9L2csIGZ1bmN0aW9uIChhLCBiKSB7DQogICAgICAgICAgICAgICAgdmFyIHIgPSBvW2JdOw0KICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHIgPT09ICdudW1iZXInID8gciA6IGE7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICBpZiAodHlwZW9mIFN0cmluZy5wcm90b3R5cGUubmFtZSAhPT0gJ2Z1bmN0aW9uJykgew0KICAgICAgICBTdHJpbmcucHJvdG90eXBlLm5hbWUgPSBmdW5jdGlvbiAoKSB7DQoNCi8vIElmIHRoZSBzdHJpbmcgbG9va3MgbGlrZSBhbiBpZGVudGlmaWVyLCB0aGVuIHdlIGNhbiByZXR1cm4gaXQgYXMgaXMuDQovLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vDQovLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2ltcGx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0Lg0KLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUNCi8vIHNlcXVlbmNlcy4NCg0KICAgICAgICAgICAgaWYgKGl4LnRlc3QodGhpcykpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChueC50ZXN0KHRoaXMpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICciJyArIHRoaXMucmVwbGFjZShueGcsIGZ1bmN0aW9uIChhKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjID0gZXNjYXBlc1thXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsNCiAgICAgICAgICAgICAgICB9KSArICciJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiAnIicgKyB0aGlzICsgJyInOw0KICAgICAgICB9Ow0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gY29tYmluZSh0LCBvKSB7DQogICAgICAgIHZhciBuOw0KICAgICAgICBmb3IgKG4gaW4gbykgew0KICAgICAgICAgICAgaWYgKGlzX293bihvLCBuKSkgew0KICAgICAgICAgICAgICAgIHRbbl0gPSBvW25dOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYXNzdW1lKCkgew0KICAgICAgICBpZiAob3B0aW9uLmNvdWNoKQ0KICAgICAgICAgICAgY29tYmluZShwcmVkZWZpbmVkLCBjb3VjaCk7DQoNCiAgICAgICAgaWYgKG9wdGlvbi5yaGlubykNCiAgICAgICAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgcmhpbm8pOw0KDQogICAgICAgIGlmIChvcHRpb24ucHJvdG90eXBlanMpDQogICAgICAgICAgICBjb21iaW5lKHByZWRlZmluZWQsIHByb3RvdHlwZWpzKTsNCg0KICAgICAgICBpZiAob3B0aW9uLm5vZGUpDQogICAgICAgICAgICBjb21iaW5lKHByZWRlZmluZWQsIG5vZGUpOw0KDQogICAgICAgIGlmIChvcHRpb24uZGV2ZWwpDQogICAgICAgICAgICBjb21iaW5lKHByZWRlZmluZWQsIGRldmVsKTsNCg0KICAgICAgICBpZiAob3B0aW9uLmRvam8pDQogICAgICAgICAgICBjb21iaW5lKHByZWRlZmluZWQsIGRvam8pOw0KDQogICAgICAgIGlmIChvcHRpb24uYnJvd3NlcikNCiAgICAgICAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgYnJvd3Nlcik7DQoNCiAgICAgICAgaWYgKG9wdGlvbi5qcXVlcnkpDQogICAgICAgICAgICBjb21iaW5lKHByZWRlZmluZWQsIGpxdWVyeSk7DQoNCiAgICAgICAgaWYgKG9wdGlvbi5tb290b29scykNCiAgICAgICAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgbW9vdG9vbHMpOw0KDQogICAgICAgIGlmIChvcHRpb24ud3NoKQ0KICAgICAgICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB3c2gpOw0KDQogICAgICAgIGlmIChvcHRpb24uZ2xvYmFsc3RyaWN0ICYmIG9wdGlvbi5zdHJpY3QgIT09IGZhbHNlKQ0KICAgICAgICAgICAgb3B0aW9uLnN0cmljdCA9IHRydWU7DQogICAgfQ0KDQoNCi8vIFByb2R1Y2UgYW4gZXJyb3Igd2FybmluZy4NCg0KICAgIGZ1bmN0aW9uIHF1aXQobWVzc2FnZSwgbGluZSwgY2hyKSB7DQogICAgICAgIHZhciBwZXJjZW50YWdlID0gTWF0aC5mbG9vcigobGluZSAvIGxpbmVzLmxlbmd0aCkgKiAxMDApOw0KDQogICAgICAgIHRocm93IHsNCiAgICAgICAgICAgIG5hbWU6ICdKU0hpbnRFcnJvcicsDQogICAgICAgICAgICBsaW5lOiBsaW5lLA0KICAgICAgICAgICAgY2hhcmFjdGVyOiBjaHIsDQogICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlICsgIiAoIiArIHBlcmNlbnRhZ2UgKyAiJSBzY2FubmVkKS4iDQogICAgICAgIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gd2FybmluZyhtLCB0LCBhLCBiLCBjLCBkKSB7DQogICAgICAgIHZhciBjaCwgbCwgdzsNCiAgICAgICAgdCA9IHQgfHwgbmV4dHRva2VuOw0KICAgICAgICBpZiAodC5pZCA9PT0gJyhlbmQpJykgeyAgLy8gYH4NCiAgICAgICAgICAgIHQgPSB0b2tlbjsNCiAgICAgICAgfQ0KICAgICAgICBsID0gdC5saW5lIHx8IDA7DQogICAgICAgIGNoID0gdC5mcm9tIHx8IDA7DQogICAgICAgIHcgPSB7DQogICAgICAgICAgICBpZDogJyhlcnJvciknLA0KICAgICAgICAgICAgcmF3OiBtLA0KICAgICAgICAgICAgZXZpZGVuY2U6IGxpbmVzW2wgLSAxXSB8fCAnJywNCiAgICAgICAgICAgIGxpbmU6IGwsDQogICAgICAgICAgICBjaGFyYWN0ZXI6IGNoLA0KICAgICAgICAgICAgYTogYSwNCiAgICAgICAgICAgIGI6IGIsDQogICAgICAgICAgICBjOiBjLA0KICAgICAgICAgICAgZDogZA0KICAgICAgICB9Ow0KICAgICAgICB3LnJlYXNvbiA9IG0uc3VwcGxhbnQodyk7DQogICAgICAgIEpTSElOVC5lcnJvcnMucHVzaCh3KTsNCiAgICAgICAgaWYgKG9wdGlvbi5wYXNzZmFpbCkgew0KICAgICAgICAgICAgcXVpdCgnU3RvcHBpbmcuICcsIGwsIGNoKTsNCiAgICAgICAgfQ0KICAgICAgICB3YXJuaW5ncyArPSAxOw0KICAgICAgICBpZiAod2FybmluZ3MgPj0gb3B0aW9uLm1heGVycikgew0KICAgICAgICAgICAgcXVpdCgiVG9vIG1hbnkgZXJyb3JzLiIsIGwsIGNoKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB3YXJuaW5nQXQobSwgbCwgY2gsIGEsIGIsIGMsIGQpIHsNCiAgICAgICAgcmV0dXJuIHdhcm5pbmcobSwgew0KICAgICAgICAgICAgbGluZTogbCwNCiAgICAgICAgICAgIGZyb206IGNoDQogICAgICAgIH0sIGEsIGIsIGMsIGQpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGVycm9yKG0sIHQsIGEsIGIsIGMsIGQpIHsNCiAgICAgICAgdmFyIHcgPSB3YXJuaW5nKG0sIHQsIGEsIGIsIGMsIGQpOw0KICAgICAgICBxdWl0KCJTdG9wcGluZywgdW5hYmxlIHRvIGNvbnRpbnVlLiIsIHcubGluZSwgdy5jaGFyYWN0ZXIpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGVycm9yQXQobSwgbCwgY2gsIGEsIGIsIGMsIGQpIHsNCiAgICAgICAgcmV0dXJuIGVycm9yKG0sIHsNCiAgICAgICAgICAgIGxpbmU6IGwsDQogICAgICAgICAgICBmcm9tOiBjaA0KICAgICAgICB9LCBhLCBiLCBjLCBkKTsNCiAgICB9DQoNCg0KDQovLyBsZXhpY2FsIGFuYWx5c2lzIGFuZCB0b2tlbiBjb25zdHJ1Y3Rpb24NCg0KICAgIHZhciBsZXggPSAoZnVuY3Rpb24gbGV4KCkgew0KICAgICAgICB2YXIgY2hhcmFjdGVyLCBmcm9tLCBsaW5lLCBzOw0KDQovLyBQcml2YXRlIGxleCBtZXRob2RzDQoNCiAgICAgICAgZnVuY3Rpb24gbmV4dExpbmUoKSB7DQogICAgICAgICAgICB2YXIgYXQsDQogICAgICAgICAgICAgICAgdHc7IC8vIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2hlY2sNCg0KICAgICAgICAgICAgaWYgKGxpbmUgPj0gbGluZXMubGVuZ3RoKQ0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCg0KICAgICAgICAgICAgY2hhcmFjdGVyID0gMTsNCiAgICAgICAgICAgIHMgPSBsaW5lc1tsaW5lXTsNCiAgICAgICAgICAgIGxpbmUgKz0gMTsNCiAgICAgICAgICAgIGF0ID0gcy5zZWFyY2goLyBcdC8pOw0KDQogICAgICAgICAgICBpZiAoYXQgPj0gMCkNCiAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIk1peGVkIHNwYWNlcyBhbmQgdGFicy4iLCBsaW5lLCBhdCArIDEpOw0KDQogICAgICAgICAgICBzID0gcy5yZXBsYWNlKC9cdC9nLCB0YWIpOw0KICAgICAgICAgICAgYXQgPSBzLnNlYXJjaChjeCk7DQoNCiAgICAgICAgICAgIGlmIChhdCA+PSAwKQ0KICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiVW5zYWZlIGNoYXJhY3Rlci4iLCBsaW5lLCBhdCk7DQoNCiAgICAgICAgICAgIGlmIChvcHRpb24ubWF4bGVuICYmIG9wdGlvbi5tYXhsZW4gPCBzLmxlbmd0aCkNCiAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIkxpbmUgdG9vIGxvbmcuIiwgbGluZSwgcy5sZW5ndGgpOw0KDQogICAgICAgICAgICAvLyBDaGVjayBmb3IgdHJhaWxpbmcgd2hpdGVzcGFjZXMNCiAgICAgICAgICAgIHR3ID0gcy5zZWFyY2goL1xzKyQvKTsNCiAgICAgICAgICAgIGlmIChvcHRpb24udHJhaWxpbmcgJiYgfnR3ICYmICF+cy5zZWFyY2goL15ccyskLykpDQogICAgICAgICAgICAgICAgd2FybmluZ0F0KCJUcmFpbGluZyB3aGl0ZXNwYWNlLiIsIGxpbmUsIHR3KTsNCg0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCg0KLy8gUHJvZHVjZSBhIHRva2VuIG9iamVjdC4gIFRoZSB0b2tlbiBpbmhlcml0cyBmcm9tIGEgc3ludGF4IHN5bWJvbC4NCg0KICAgICAgICBmdW5jdGlvbiBpdCh0eXBlLCB2YWx1ZSkgew0KICAgICAgICAgICAgdmFyIGksIHQ7DQogICAgICAgICAgICBpZiAodHlwZSA9PT0gJyhjb2xvciknIHx8IHR5cGUgPT09ICcocmFuZ2UpJykgew0KICAgICAgICAgICAgICAgIHQgPSB7dHlwZTogdHlwZX07DQogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICcocHVuY3R1YXRvciknIHx8DQogICAgICAgICAgICAgICAgICAgICh0eXBlID09PSAnKGlkZW50aWZpZXIpJyAmJiBpc19vd24oc3ludGF4LCB2YWx1ZSkpKSB7DQogICAgICAgICAgICAgICAgdCA9IHN5bnRheFt2YWx1ZV0gfHwgc3ludGF4WycoZXJyb3IpJ107DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHQgPSBzeW50YXhbdHlwZV07DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0ID0gT2JqZWN0LmNyZWF0ZSh0KTsNCiAgICAgICAgICAgIGlmICh0eXBlID09PSAnKHN0cmluZyknIHx8IHR5cGUgPT09ICcocmFuZ2UpJykgew0KICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLnNjcmlwdHVybCAmJiBqeC50ZXN0KHZhbHVlKSkgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIlNjcmlwdCBVUkwuIiwgbGluZSwgZnJvbSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHR5cGUgPT09ICcoaWRlbnRpZmllciknKSB7DQogICAgICAgICAgICAgICAgdC5pZGVudGlmaWVyID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdfX3Byb3RvX18nICYmICFvcHRpb24ucHJvdG8pIHsNCiAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJUaGUgJ3thfScgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwgZnJvbSwgdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdfX2l0ZXJhdG9yX18nICYmICFvcHRpb24uaXRlcmF0b3IpIHsNCiAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCIne2F9JyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBKYXZhU2NyaXB0IDEuNy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwgZnJvbSwgdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLm5vbWVuICYmICh2YWx1ZS5jaGFyQXQoMCkgPT09ICdfJyB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmNoYXJBdCh2YWx1ZS5sZW5ndGggLSAxKSA9PT0gJ18nKSkgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIlVuZXhwZWN0ZWQge2F9IGluICd7Yn0nLiIsIGxpbmUsIGZyb20sDQogICAgICAgICAgICAgICAgICAgICAgICAiZGFuZ2xpbmcgJ18nIiwgdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHQudmFsdWUgPSB2YWx1ZTsNCiAgICAgICAgICAgIHQubGluZSA9IGxpbmU7DQogICAgICAgICAgICB0LmNoYXJhY3RlciA9IGNoYXJhY3RlcjsNCiAgICAgICAgICAgIHQuZnJvbSA9IGZyb207DQogICAgICAgICAgICBpID0gdC5pZDsNCiAgICAgICAgICAgIGlmIChpICE9PSAnKGVuZGxpbmUpJykgew0KICAgICAgICAgICAgICAgIHByZXJlZyA9IGkgJiYNCiAgICAgICAgICAgICAgICAgICAgKCgnKCw9OlshJnw/e307Jy5pbmRleE9mKGkuY2hhckF0KGkubGVuZ3RoIC0gMSkpID49IDApIHx8DQogICAgICAgICAgICAgICAgICAgIGkgPT09ICdyZXR1cm4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0Ow0KICAgICAgICB9DQoNCi8vIFB1YmxpYyBsZXggbWV0aG9kcw0KDQogICAgICAgIHJldHVybiB7DQogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoc291cmNlKSB7DQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7DQogICAgICAgICAgICAgICAgICAgIGxpbmVzID0gc291cmNlDQogICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXHJcbi9nLCAnXG4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xyL2csICdcbicpDQogICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJ1xuJyk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBzb3VyY2U7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGxpbmUgaXMgYSBzaGViYW5nICgjISksIG1ha2UgaXQgYSBibGFuayBhbmQgbW92ZSBvbi4NCiAgICAgICAgICAgICAgICAvLyBTaGViYW5ncyBhcmUgdXNlZCBieSBOb2RlIHNjcmlwdHMuDQogICAgICAgICAgICAgICAgaWYgKGxpbmVzWzBdICYmIGxpbmVzWzBdLnN1YnN0cigwLCAyKSA9PSAnIyEnKQ0KICAgICAgICAgICAgICAgICAgICBsaW5lc1swXSA9ICcnOw0KDQogICAgICAgICAgICAgICAgbGluZSA9IDA7DQogICAgICAgICAgICAgICAgbmV4dExpbmUoKTsNCiAgICAgICAgICAgICAgICBmcm9tID0gMTsNCiAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgIHJhbmdlOiBmdW5jdGlvbiAoYmVnaW4sIGVuZCkgew0KICAgICAgICAgICAgICAgIHZhciBjLCB2YWx1ZSA9ICcnOw0KICAgICAgICAgICAgICAgIGZyb20gPSBjaGFyYWN0ZXI7DQogICAgICAgICAgICAgICAgaWYgKHMuY2hhckF0KDApICE9PSBiZWdpbikgew0KICAgICAgICAgICAgICAgICAgICBlcnJvckF0KCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCBjaGFyYWN0ZXIsIGJlZ2luLCBzLmNoYXJBdCgwKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICAgICAgcyA9IHMuc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciArPSAxOw0KICAgICAgICAgICAgICAgICAgICBjID0gcy5jaGFyQXQoMCk7DQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICcnOg0KICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JBdCgiTWlzc2luZyAne2F9Jy4iLCBsaW5lLCBjaGFyYWN0ZXIsIGMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgZW5kOg0KICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMuc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCgnKHJhbmdlKScsIHZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnXFwnOg0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJVbmV4cGVjdGVkICd7YX0nLiIsIGxpbmUsIGNoYXJhY3RlciwgYyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gYzsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIH0sDQoNCi8vIHRva2VuIC0tIHRoaXMgaXMgY2FsbGVkIGJ5IGFkdmFuY2UgdG8gZ2V0IHRoZSBuZXh0IHRva2VuLg0KDQogICAgICAgICAgICB0b2tlbjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIHZhciBiLCBjLCBjYXB0dXJlcywgZCwgZGVwdGgsIGhpZ2gsIGksIGwsIGxvdywgcSwgdDsNCg0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1hdGNoKHgpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSB4LmV4ZWMocyksIHIxOw0KICAgICAgICAgICAgICAgICAgICBpZiAocikgew0KICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHJbMF0ubGVuZ3RoOw0KICAgICAgICAgICAgICAgICAgICAgICAgcjEgPSByWzFdOw0KICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHIxLmNoYXJBdCgwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cihsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBjaGFyYWN0ZXIgKyBsIC0gcjEubGVuZ3RoOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyICs9IGw7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJpbmcoeCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgYywgaiwgciA9ICcnOw0KDQogICAgICAgICAgICAgICAgICAgIGlmIChqc29ubW9kZSAmJiB4ICE9PSAnIicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiU3RyaW5ncyBtdXN0IHVzZSBkb3VibGVxdW90ZS4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCBjaGFyYWN0ZXIpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXNjKG4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gcGFyc2VJbnQocy5zdWJzdHIoaiArIDEsIG4pLCAxNik7DQogICAgICAgICAgICAgICAgICAgICAgICBqICs9IG47DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSAzMiAmJiBpIDw9IDEyNiAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9PSAzNCAmJiBpICE9PSA5MiAmJiBpICE9PSAzOSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiVW5uZWNlc3NhcnkgZXNjYXBlbWVudC4iLCBsaW5lLCBjaGFyYWN0ZXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyICs9IG47DQogICAgICAgICAgICAgICAgICAgICAgICBjID0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBqID0gMDsNCiAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPj0gcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRMaW5lKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JBdCgiVW5jbG9zZWQgc3RyaW5nLiIsIGxpbmUsIGZyb20pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChqKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSB4KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyICs9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMuc3Vic3RyKGogKyAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQoJyhzdHJpbmcpJywgciwgeCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICcgJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXG4nIHx8IGMgPT09ICdccicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiQ29udHJvbCBjaGFyYWN0ZXIgaW4gc3RyaW5nOiB7YX0uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGNoYXJhY3RlciArIGosIHMuc2xpY2UoMCwgaikpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnXFwnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciArPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChqKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnIic6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1wnJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25tb2RlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIkF2b2lkIFxcJy4iLCBsaW5lLCBjaGFyYWN0ZXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gJ1xiJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnXGYnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICdcbic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gJ1xyJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnXHQnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjKDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25tb2RlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIkF2b2lkIFxcdi4iLCBsaW5lLCBjaGFyYWN0ZXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnXHYnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25tb2RlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIkF2b2lkIFxceC0uIiwgbGluZSwgY2hhcmFjdGVyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2MoMik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiQmFkIGVzY2FwZW1lbnQuIiwgbGluZSwgY2hhcmFjdGVyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByICs9IGM7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQobmV4dExpbmUoKSA/ICcoZW5kbGluZSknIDogJyhlbmQpJywgJycpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHQgPSBtYXRjaCh0eCk7DQogICAgICAgICAgICAgICAgICAgIGlmICghdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMgJiYgcyA8ICchJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cigxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JBdCgiVW5leHBlY3RlZCAne2F9Jy4iLCBsaW5lLCBjaGFyYWN0ZXIsIHMuc3Vic3RyKDAsIDEpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCg0KICAgIC8vICAgICAgaWRlbnRpZmllcg0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5pc0FscGhhKCkgfHwgYyA9PT0gJ18nIHx8IGMgPT09ICckJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCgnKGlkZW50aWZpZXIpJywgdCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAvLyAgICAgIG51bWJlcg0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5pc0RpZ2l0KCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKE51bWJlcih0KSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJCYWQgbnVtYmVyICd7YX0nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCBjaGFyYWN0ZXIsIHQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5zdWJzdHIoMCwgMSkuaXNBbHBoYSgpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiTWlzc2luZyBzcGFjZSBhZnRlciAne2F9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGNoYXJhY3RlciwgdCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnMCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHQuc3Vic3RyKDEsIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZC5pc0RpZ2l0KCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi5pZCAhPT0gJy4nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJEb24ndCB1c2UgZXh0cmEgbGVhZGluZyB6ZXJvcyAne2F9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCBjaGFyYWN0ZXIsIHQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25tb2RlICYmIChkID09PSAneCcgfHwgZCA9PT0gJ1gnKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJBdm9pZCAweC0uICd7YX0nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGNoYXJhY3RlciwgdCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuc3Vic3RyKHQubGVuZ3RoIC0gMSkgPT09ICcuJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoDQoiQSB0cmFpbGluZyBkZWNpbWFsIHBvaW50IGNhbiBiZSBjb25mdXNlZCB3aXRoIGEgZG90ICd7YX0nLiIsIGxpbmUsIGNoYXJhY3RlciwgdCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCgnKG51bWJlciknLCB0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodCkgew0KDQogICAgLy8gICAgICBzdHJpbmcNCg0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnIic6DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICInIjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nKHQpOw0KDQogICAgLy8gICAgICAvLyBjb21tZW50DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8vJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiVW5leHBlY3RlZCBjb21tZW50LiIsIGxpbmUsIGNoYXJhY3Rlcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5jb21tZW50ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgIC8vICAgICAgLyogY29tbWVudA0KDQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcvKic6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyYykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIlVuZXhwZWN0ZWQgY29tbWVudC4iLCBsaW5lLCBjaGFyYWN0ZXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzLnNlYXJjaChseCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID49IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV4dExpbmUoKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JBdCgiVW5jbG9zZWQgY29tbWVudC4iLCBsaW5lLCBjaGFyYWN0ZXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciArPSBpICsgMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5zdWJzdHIoaSwgMSkgPT09ICcvJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckF0KCJOZXN0ZWQgY29tbWVudC4iLCBsaW5lLCBjaGFyYWN0ZXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHIoaSArIDIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLmNvbW1lbnQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgLy8gICAgICAvKm1lbWJlcnMgLypqc2hpbnQgLypnbG9iYWwNCg0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyptZW1iZXJzJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8qbWVtYmVyJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8qanNoaW50JzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8qanNsaW50JzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8qZ2xvYmFsJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyovJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NwZWNpYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXI6IGNoYXJhY3RlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogZnJvbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgLy8gICAgICAvDQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4uaWQgPT09ICcvPScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JBdCgNCiJBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIGNhbiBiZSBjb25mdXNlZCB3aXRoICcvPScuIiwgbGluZSwgZnJvbSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVyZWcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlcyA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckF0KCJVbmNsb3NlZCByZWd1bGFyIGV4cHJlc3Npb24uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGZyb20pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJVbmVzY2FwZWQgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCBmcm9tICsgbCwgJy8nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHMuc3Vic3RyKDAsIGwgLSAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtOiB0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocVtzLmNoYXJBdChsKV0gPT09IHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcVtzLmNoYXJBdChsKV0gPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCArPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgKz0gbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHIobCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHMuY2hhckF0KDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxID09PSAnLycgfHwgcSA9PT0gJyonKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQXQoIkNvbmZ1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCBmcm9tKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0KCcocmVnZXhwKScsIGMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXFwnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICcgJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoDQoiVW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlciBpbiByZWd1bGFyIGV4cHJlc3Npb24uIiwgbGluZSwgZnJvbSArIGwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJzwnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgNCiJVbmV4cGVjdGVkIGVzY2FwZWQgY2hhcmFjdGVyICd7YX0nIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLCBsaW5lLCBmcm9tICsgbCwgYyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoICs9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmNoYXJBdChsKSA9PT0gJz8nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzLmNoYXJBdChsKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc6JzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnPSc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCArPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoDQoiRXhwZWN0ZWQgJ3thfScgYW5kIGluc3RlYWQgc2F3ICd7Yn0nLiIsIGxpbmUsIGZyb20gKyBsLCAnOicsIHMuY2hhckF0KGwpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVzICs9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnfCc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKSc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiVW5lc2NhcGVkICd7YX0nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwgZnJvbSArIGwsICcpJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggLT0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocy5jaGFyQXQobCkgPT09ICcgJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsICs9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPiAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgNCiJTcGFjZXMgYXJlIGhhcmQgdG8gY291bnQuIFVzZSB7e2F9fS4iLCBsaW5lLCBmcm9tICsgbCwgcSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHMuY2hhckF0KGwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCArPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnJlZ2V4cCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJJbnNlY3VyZSAne2F9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCBmcm9tICsgbCwgYyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5jaGFyQXQobCkgPT09ICddJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JBdCgiVW5lc2NhcGVkICd7YX0nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwgZnJvbSArIGwsICdeJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJFbXB0eSBjbGFzcy4iLCBsaW5lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKyBsIC0gMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCmtsYXNzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCArPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ14nOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJVbmVzY2FwZWQgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwgZnJvbSArIGwsIGMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJVbmVzY2FwZWQgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGZyb20gKyBsLCAnLScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ10nOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxICYmICFvcHRpb24ucmVnZXhkYXNoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KCJVbmVzY2FwZWQgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGZyb20gKyBsIC0gMSwgJy0nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGtsYXNzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gcy5jaGFyQXQobCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICcgJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgNCiJVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLCBsaW5lLCBmcm9tICsgbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc8Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgNCiJVbmV4cGVjdGVkIGVzY2FwZWQgY2hhcmFjdGVyICd7YX0nIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLCBsaW5lLCBmcm9tICsgbCwgYyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsICs9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgiVW5lc2NhcGVkICd7YX0nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGZyb20gKyBsIC0gMSwgJy8nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzwnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoYyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcuJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnJlZ2V4cCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIkluc2VjdXJlICd7YX0nLiIsIGxpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArIGwsIGMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ10nOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnPyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd7JzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ30nOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcqJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIlVuZXNjYXBlZCAne2F9Jy4iLCBsaW5lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSArIGwsIGMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHMuY2hhckF0KGwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnPyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKyc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKic6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuY2hhckF0KGwpID09PSAnPycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd7JzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCArPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gcy5jaGFyQXQobCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdBdCgNCiJFeHBlY3RlZCBhIG51bWJlciBhbmQgaW5zdGVhZCBzYXcgJ3thfScuIiwgbGluZSwgZnJvbSArIGwsIGMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ID0gK2M7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzLmNoYXJBdChsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdyA9ICtjICsgKGxvdyAqIDEwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoID0gbG93Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJywnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsICs9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoID0gSW5maW5pdHk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gcy5jaGFyQXQobCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsICs9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCA9ICtjOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHMuY2hhckF0KGwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsICs9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggPSArYyArIChoaWdoICogMTApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5jaGFyQXQobCkgIT09ICd9Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ0F0KA0KIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLCBsaW5lLCBmcm9tICsgbCwgJ30nLCBjKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5jaGFyQXQobCkgPT09ICc/Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCArPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb3cgPiBoaWdoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoDQoiJ3thfScgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gJ3tifScuIiwgbGluZSwgZnJvbSArIGwsIGxvdywgaGlnaCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHMuc3Vic3RyKDAsIGwgLSAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyICs9IGw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cihsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0KCcocmVnZXhwKScsIGMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQoJyhwdW5jdHVhdG9yKScsIHQpOw0KDQogICAgLy8gICAgICBwdW5jdHVhdG9yDQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyMnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCgnKHB1bmN0dWF0b3IpJywgdCk7DQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCgnKHB1bmN0dWF0b3IpJywgdCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH07DQogICAgfSgpKTsNCg0KDQogICAgZnVuY3Rpb24gYWRkbGFiZWwodCwgdHlwZSkgew0KDQogICAgICAgIGlmICh0ID09PSAnaGFzT3duUHJvcGVydHknKSB7DQogICAgICAgICAgICB3YXJuaW5nKCInaGFzT3duUHJvcGVydHknIGlzIGEgcmVhbGx5IGJhZCBuYW1lLiIpOw0KICAgICAgICB9DQoNCi8vIERlZmluZSB0IGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGluIHRoZSBjdXJyZW50IHNjb3BlLg0KDQogICAgICAgIGlmIChpc19vd24oZnVuY3QsIHQpICYmICFmdW5jdFsnKGdsb2JhbCknXSkgew0KICAgICAgICAgICAgaWYgKGZ1bmN0W3RdID09PSB0cnVlKSB7DQogICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5sYXRlZGVmKQ0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyB3YXMgdXNlZCBiZWZvcmUgaXQgd2FzIGRlZmluZWQuIiwgbmV4dHRva2VuLCB0KTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uc2hhZG93KQ0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyBpcyBhbHJlYWR5IGRlZmluZWQuIiwgbmV4dHRva2VuLCB0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0W3RdID0gdHlwZTsNCiAgICAgICAgaWYgKGZ1bmN0WycoZ2xvYmFsKSddKSB7DQogICAgICAgICAgICBnbG9iYWxbdF0gPSBmdW5jdDsNCiAgICAgICAgICAgIGlmIChpc19vd24oaW1wbGllZCwgdCkpIHsNCiAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmxhdGVkZWYpDQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIid7YX0nIHdhcyB1c2VkIGJlZm9yZSBpdCB3YXMgZGVmaW5lZC4iLCBuZXh0dG9rZW4sIHQpOw0KICAgICAgICAgICAgICAgIGRlbGV0ZSBpbXBsaWVkW3RdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgc2NvcGVbdF0gPSBmdW5jdDsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gZG9PcHRpb24oKSB7DQogICAgICAgIHZhciBiLCBvYmosIGZpbHRlciwgbyA9IG5leHR0b2tlbi52YWx1ZSwgdCwgdjsNCiAgICAgICAgc3dpdGNoIChvKSB7DQogICAgICAgIGNhc2UgJyovJzoNCiAgICAgICAgICAgIGVycm9yKCJVbmJlZ3VuIGNvbW1lbnQuIik7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnLyptZW1iZXJzJzoNCiAgICAgICAgY2FzZSAnLyptZW1iZXInOg0KICAgICAgICAgICAgbyA9ICcvKm1lbWJlcnMnOw0KICAgICAgICAgICAgaWYgKCFtZW1iZXJzT25seSkgew0KICAgICAgICAgICAgICAgIG1lbWJlcnNPbmx5ID0ge307DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmogPSBtZW1iZXJzT25seTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICcvKmpzaGludCc6DQogICAgICAgIGNhc2UgJy8qanNsaW50JzoNCiAgICAgICAgICAgIG9iaiA9IG9wdGlvbjsNCiAgICAgICAgICAgIGZpbHRlciA9IGJvb2xPcHRpb25zOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJy8qZ2xvYmFsJzoNCiAgICAgICAgICAgIG9iaiA9IHByZWRlZmluZWQ7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgIGVycm9yKCJXaGF0PyIpOw0KICAgICAgICB9DQogICAgICAgIHQgPSBsZXgudG9rZW4oKTsNCmxvb3A6ICAgZm9yICg7Oykgew0KICAgICAgICAgICAgZm9yICg7Oykgew0KICAgICAgICAgICAgICAgIGlmICh0LnR5cGUgPT09ICdzcGVjaWFsJyAmJiB0LnZhbHVlID09PSAnKi8nKSB7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh0LmlkICE9PSAnKGVuZGxpbmUpJyAmJiB0LmlkICE9PSAnLCcpIHsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHQgPSBsZXgudG9rZW4oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0LnR5cGUgIT09ICcoc3RyaW5nKScgJiYgdC50eXBlICE9PSAnKGlkZW50aWZpZXIpJyAmJg0KICAgICAgICAgICAgICAgICAgICBvICE9PSAnLyptZW1iZXJzJykgew0KICAgICAgICAgICAgICAgIGVycm9yKCJCYWQgb3B0aW9uLiIsIHQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdiA9IGxleC50b2tlbigpOw0KICAgICAgICAgICAgaWYgKHYuaWQgPT09ICc6Jykgew0KICAgICAgICAgICAgICAgIHYgPSBsZXgudG9rZW4oKTsNCiAgICAgICAgICAgICAgICBpZiAob2JqID09PSBtZW1iZXJzT25seSkgew0KICAgICAgICAgICAgICAgICAgICBlcnJvcigiRXhwZWN0ZWQgJ3thfScgYW5kIGluc3RlYWQgc2F3ICd7Yn0nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdCwgJyovJywgJzonKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHQudmFsdWUgPT09ICdpbmRlbnQnICYmIChvID09PSAnLypqc2hpbnQnIHx8IG8gPT09ICcvKmpzbGludCcpKSB7DQogICAgICAgICAgICAgICAgICAgIGIgPSArdi52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUoYikgfHwgYiA8PSAwIHx8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihiKSAhPT0gYikgew0KICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIkV4cGVjdGVkIGEgc21hbGwgaW50ZWdlciBhbmQgaW5zdGVhZCBzYXcgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwgdi52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgb2JqLndoaXRlID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgb2JqLmluZGVudCA9IGI7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0LnZhbHVlID09PSAnbWF4ZXJyJyAmJiAobyA9PT0gJy8qanNoaW50JyB8fCBvID09PSAnLypqc2xpbnQnKSkgew0KICAgICAgICAgICAgICAgICAgICBiID0gK3YudmFsdWU7DQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiAhPT0gJ251bWJlcicgfHwgIWlzRmluaXRlKGIpIHx8IGIgPD0gMCB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoYikgIT09IGIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJFeHBlY3RlZCBhIHNtYWxsIGludGVnZXIgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsIHYudmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIG9iai5tYXhlcnIgPSBiOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodC52YWx1ZSA9PT0gJ21heGxlbicgJiYgKG8gPT09ICcvKmpzaGludCcgfHwgbyA9PT0gJy8qanNsaW50JykpIHsNCiAgICAgICAgICAgICAgICAgICAgYiA9ICt2LnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGIgIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZShiKSB8fCBiIDw9IDAgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGIpICE9PSBiKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlcnJvcigiRXhwZWN0ZWQgYSBzbWFsbCBpbnRlZ2VyIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LCB2LnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBvYmoubWF4bGVuID0gYjsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYudmFsdWUgPT09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgICAgICBvYmpbdC52YWx1ZV0gPSB0cnVlOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodi52YWx1ZSA9PT0gJ2ZhbHNlJykgew0KICAgICAgICAgICAgICAgICAgICBvYmpbdC52YWx1ZV0gPSBmYWxzZTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBlcnJvcigiQmFkIG9wdGlvbiB2YWx1ZS4iLCB2KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdCA9IGxleC50b2tlbigpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBpZiAobyA9PT0gJy8qanNoaW50JyB8fCBvID09PSAnLypqc2xpbnQnKSB7DQogICAgICAgICAgICAgICAgICAgIGVycm9yKCJNaXNzaW5nIG9wdGlvbiB2YWx1ZS4iLCB0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgb2JqW3QudmFsdWVdID0gZmFsc2U7DQogICAgICAgICAgICAgICAgdCA9IHY7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKGZpbHRlcikgew0KICAgICAgICAgICAgYXNzdW1lKCk7DQogICAgICAgIH0NCiAgICB9DQoNCg0KLy8gV2UgbmVlZCBhIHBlZWsgZnVuY3Rpb24uIElmIGl0IGhhcyBhbiBhcmd1bWVudCwgaXQgcGVla3MgdGhhdCBtdWNoIGZhcnRoZXINCi8vIGFoZWFkLiBJdCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoDQovLyAgICAgZm9yICggdmFyIGkgaW4gLi4uDQovLyBmcm9tDQovLyAgICAgZm9yICggdmFyIGkgPSAuLi4NCg0KICAgIGZ1bmN0aW9uIHBlZWsocCkgew0KICAgICAgICB2YXIgaSA9IHAgfHwgMCwgaiA9IDAsIHQ7DQoNCiAgICAgICAgd2hpbGUgKGogPD0gaSkgew0KICAgICAgICAgICAgdCA9IGxvb2thaGVhZFtqXTsNCiAgICAgICAgICAgIGlmICghdCkgew0KICAgICAgICAgICAgICAgIHQgPSBsb29rYWhlYWRbal0gPSBsZXgudG9rZW4oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGogKz0gMTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdDsNCiAgICB9DQoNCg0KDQovLyBQcm9kdWNlIHRoZSBuZXh0IHRva2VuLiBJdCBsb29rcyBmb3IgcHJvZ3JhbW1pbmcgZXJyb3JzLg0KDQogICAgZnVuY3Rpb24gYWR2YW5jZShpZCwgdCkgew0KICAgICAgICBzd2l0Y2ggKHRva2VuLmlkKSB7DQogICAgICAgIGNhc2UgJyhudW1iZXIpJzoNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICcuJykgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIkEgZG90IGZvbGxvd2luZyBhIG51bWJlciBjYW4gYmUgY29uZnVzZWQgd2l0aCBhIGRlY2ltYWwgcG9pbnQuIiwgdG9rZW4pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJy0nOg0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJy0nIHx8IG5leHR0b2tlbi5pZCA9PT0gJy0tJykgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIkNvbmZ1c2luZyBtaW51c3Nlcy4iKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICcrJzoNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICcrJyB8fCBuZXh0dG9rZW4uaWQgPT09ICcrKycpIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJDb25mdXNpbmcgcGx1c3Nlcy4iKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAnKHN0cmluZyknIHx8IHRva2VuLmlkZW50aWZpZXIpIHsNCiAgICAgICAgICAgIGFub25uYW1lID0gdG9rZW4udmFsdWU7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoaWQgJiYgbmV4dHRva2VuLmlkICE9PSBpZCkgew0KICAgICAgICAgICAgaWYgKHQpIHsNCiAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkID09PSAnKGVuZCknKSB7DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlVubWF0Y2hlZCAne2F9Jy4iLCB0LCB0LmlkKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyB0byBtYXRjaCAne2J9JyBmcm9tIGxpbmUge2N9IGFuZCBpbnN0ZWFkIHNhdyAne2R9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgaWQsIHQuaWQsIHQubGluZSwgbmV4dHRva2VuLnZhbHVlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2UgaWYgKG5leHR0b2tlbi50eXBlICE9PSAnKGlkZW50aWZpZXIpJyB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbi52YWx1ZSAhPT0gaWQpIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgaWQsIG5leHR0b2tlbi52YWx1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcHJldnRva2VuID0gdG9rZW47DQogICAgICAgIHRva2VuID0gbmV4dHRva2VuOw0KICAgICAgICBmb3IgKDs7KSB7DQogICAgICAgICAgICBuZXh0dG9rZW4gPSBsb29rYWhlYWQuc2hpZnQoKSB8fCBsZXgudG9rZW4oKTsNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICcoZW5kKScgfHwgbmV4dHRva2VuLmlkID09PSAnKGVycm9yKScpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobmV4dHRva2VuLnR5cGUgPT09ICdzcGVjaWFsJykgew0KICAgICAgICAgICAgICAgIGRvT3B0aW9uKCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgIT09ICcoZW5kbGluZSknKSB7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KDQovLyBUaGlzIGlzIHRoZSBoZWFydCBvZiBKU0hJTlQsIHRoZSBQcmF0dCBwYXJzZXIuIEluIGFkZGl0aW9uIHRvIHBhcnNpbmcsIGl0DQovLyBpcyBsb29raW5nIGZvciBhZCBob2MgbGludCBwYXR0ZXJucy4gV2UgYWRkIC5mdWQgdG8gUHJhdHQncyBtb2RlbCwgd2hpY2ggaXMNCi8vIGxpa2UgLm51ZCBleGNlcHQgdGhhdCBpdCBpcyBvbmx5IHVzZWQgb24gdGhlIGZpcnN0IHRva2VuIG9mIGEgc3RhdGVtZW50Lg0KLy8gSGF2aW5nIC5mdWQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gZGVmaW5lIHN0YXRlbWVudC1vcmllbnRlZCBsYW5ndWFnZXMgbGlrZQ0KLy8gSmF2YVNjcmlwdC4gSSByZXRhaW5lZCBQcmF0dCdzIG5vbWVuY2xhdHVyZS4NCg0KLy8gLm51ZCAgICAgTnVsbCBkZW5vdGF0aW9uDQovLyAuZnVkICAgICBGaXJzdCBudWxsIGRlbm90YXRpb24NCi8vIC5sZWQgICAgIExlZnQgZGVub3RhdGlvbg0KLy8gIGxicCAgICAgTGVmdCBiaW5kaW5nIHBvd2VyDQovLyAgcmJwICAgICBSaWdodCBiaW5kaW5nIHBvd2VyDQoNCi8vIFRoZXkgYXJlIGVsZW1lbnRzIG9mIHRoZSBwYXJzaW5nIG1ldGhvZCBjYWxsZWQgVG9wIERvd24gT3BlcmF0b3IgUHJlY2VkZW5jZS4NCg0KICAgIGZ1bmN0aW9uIGV4cHJlc3Npb24ocmJwLCBpbml0aWFsKSB7DQogICAgICAgIHZhciBsZWZ0LCBpc0FycmF5ID0gZmFsc2U7DQoNCiAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJyhlbmQpJykNCiAgICAgICAgICAgIGVycm9yKCJVbmV4cGVjdGVkIGVhcmx5IGVuZCBvZiBwcm9ncmFtLiIsIHRva2VuKTsNCg0KICAgICAgICBhZHZhbmNlKCk7DQogICAgICAgIGlmIChpbml0aWFsKSB7DQogICAgICAgICAgICBhbm9ubmFtZSA9ICdhbm9ueW1vdXMnOw0KICAgICAgICAgICAgZnVuY3RbJyh2ZXJiKSddID0gdG9rZW4udmFsdWU7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGluaXRpYWwgPT09IHRydWUgJiYgdG9rZW4uZnVkKSB7DQogICAgICAgICAgICBsZWZ0ID0gdG9rZW4uZnVkKCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAodG9rZW4ubnVkKSB7DQogICAgICAgICAgICAgICAgbGVmdCA9IHRva2VuLm51ZCgpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLnR5cGUgPT09ICcobnVtYmVyKScgJiYgdG9rZW4uaWQgPT09ICcuJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJBIGxlYWRpbmcgZGVjaW1hbCBwb2ludCBjYW4gYmUgY29uZnVzZWQgd2l0aCBhIGRvdDogJy57YX0nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sIG5leHR0b2tlbi52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGVycm9yKCJFeHBlY3RlZCBhbiBpZGVudGlmaWVyIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCB0b2tlbi5pZCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgd2hpbGUgKHJicCA8IG5leHR0b2tlbi5sYnApIHsNCiAgICAgICAgICAgICAgICBpc0FycmF5ID0gdG9rZW4udmFsdWUgPT0gJ0FycmF5JzsNCiAgICAgICAgICAgICAgICBhZHZhbmNlKCk7DQogICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkgJiYgdG9rZW4uaWQgPT0gJygnICYmIG5leHR0b2tlbi5pZCA9PSAnKScpDQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlVzZSB0aGUgYXJyYXkgbGl0ZXJhbCBub3RhdGlvbiBbXS4iLCB0b2tlbik7DQogICAgICAgICAgICAgICAgaWYgKHRva2VuLmxlZCkgew0KICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gdG9rZW4ubGVkKGxlZnQpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGVycm9yKCJFeHBlY3RlZCBhbiBvcGVyYXRvciBhbmQgaW5zdGVhZCBzYXcgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCB0b2tlbi5pZCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBsZWZ0Ow0KICAgIH0NCg0KDQovLyBGdW5jdGlvbnMgZm9yIGNvbmZvcm1hbmNlIG9mIHN0eWxlLg0KDQogICAgZnVuY3Rpb24gYWRqYWNlbnQobGVmdCwgcmlnaHQpIHsNCiAgICAgICAgbGVmdCA9IGxlZnQgfHwgdG9rZW47DQogICAgICAgIHJpZ2h0ID0gcmlnaHQgfHwgbmV4dHRva2VuOw0KICAgICAgICBpZiAob3B0aW9uLndoaXRlKSB7DQogICAgICAgICAgICBpZiAobGVmdC5jaGFyYWN0ZXIgIT09IHJpZ2h0LmZyb20gJiYgbGVmdC5saW5lID09PSByaWdodC5saW5lKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCBzcGFjZSBhZnRlciAne2F9Jy4iLCByaWdodCwgbGVmdC52YWx1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBub2JyZWFrKGxlZnQsIHJpZ2h0KSB7DQogICAgICAgIGxlZnQgPSBsZWZ0IHx8IHRva2VuOw0KICAgICAgICByaWdodCA9IHJpZ2h0IHx8IG5leHR0b2tlbjsNCiAgICAgICAgaWYgKG9wdGlvbi53aGl0ZSAmJiAobGVmdC5jaGFyYWN0ZXIgIT09IHJpZ2h0LmZyb20gfHwgbGVmdC5saW5lICE9PSByaWdodC5saW5lKSkgew0KICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCBzcGFjZSBiZWZvcmUgJ3thfScuIiwgcmlnaHQsIHJpZ2h0LnZhbHVlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIG5vc3BhY2UobGVmdCwgcmlnaHQpIHsNCiAgICAgICAgbGVmdCA9IGxlZnQgfHwgdG9rZW47DQogICAgICAgIHJpZ2h0ID0gcmlnaHQgfHwgbmV4dHRva2VuOw0KICAgICAgICBpZiAob3B0aW9uLndoaXRlICYmICFsZWZ0LmNvbW1lbnQpIHsNCiAgICAgICAgICAgIGlmIChsZWZ0LmxpbmUgPT09IHJpZ2h0LmxpbmUpIHsNCiAgICAgICAgICAgICAgICBhZGphY2VudChsZWZ0LCByaWdodCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBub25hZGphY2VudChsZWZ0LCByaWdodCkgew0KICAgICAgICBpZiAob3B0aW9uLndoaXRlKSB7DQogICAgICAgICAgICBsZWZ0ID0gbGVmdCB8fCB0b2tlbjsNCiAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQgfHwgbmV4dHRva2VuOw0KICAgICAgICAgICAgaWYgKGxlZnQubGluZSA9PT0gcmlnaHQubGluZSAmJiBsZWZ0LmNoYXJhY3RlciA9PT0gcmlnaHQuZnJvbSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgbGVmdC52YWx1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBub2JyZWFrbm9uYWRqYWNlbnQobGVmdCwgcmlnaHQpIHsNCiAgICAgICAgbGVmdCA9IGxlZnQgfHwgdG9rZW47DQogICAgICAgIHJpZ2h0ID0gcmlnaHQgfHwgbmV4dHRva2VuOw0KICAgICAgICBpZiAoIW9wdGlvbi5sYXhicmVhayAmJiBsZWZ0LmxpbmUgIT09IHJpZ2h0LmxpbmUpIHsNCiAgICAgICAgICAgIHdhcm5pbmcoIkJhZCBsaW5lIGJyZWFraW5nIGJlZm9yZSAne2F9Jy4iLCByaWdodCwgcmlnaHQuaWQpOw0KICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi53aGl0ZSkgew0KICAgICAgICAgICAgbGVmdCA9IGxlZnQgfHwgdG9rZW47DQogICAgICAgICAgICByaWdodCA9IHJpZ2h0IHx8IG5leHR0b2tlbjsNCiAgICAgICAgICAgIGlmIChsZWZ0LmNoYXJhY3RlciA9PT0gcmlnaHQuZnJvbSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgbGVmdC52YWx1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpbmRlbnRhdGlvbihiaWFzKSB7DQogICAgICAgIHZhciBpOw0KICAgICAgICBpZiAob3B0aW9uLndoaXRlICYmIG5leHR0b2tlbi5pZCAhPT0gJyhlbmQpJykgew0KICAgICAgICAgICAgaSA9IGluZGVudCArIChiaWFzIHx8IDApOw0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5mcm9tICE9PSBpKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygNCiJFeHBlY3RlZCAne2F9JyB0byBoYXZlIGFuIGluZGVudGF0aW9uIGF0IHtifSBpbnN0ZWFkIGF0IHtjfS4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgbmV4dHRva2VuLCBuZXh0dG9rZW4udmFsdWUsIGksIG5leHR0b2tlbi5mcm9tKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIG5vbGluZWJyZWFrKHQpIHsNCiAgICAgICAgdCA9IHQgfHwgdG9rZW47DQogICAgICAgIGlmICh0LmxpbmUgIT09IG5leHR0b2tlbi5saW5lKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJMaW5lIGJyZWFraW5nIGVycm9yICd7YX0nLiIsIHQsIHQudmFsdWUpOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBmdW5jdGlvbiBjb21tYSgpIHsNCiAgICAgICAgaWYgKHRva2VuLmxpbmUgIT09IG5leHR0b2tlbi5saW5lKSB7DQogICAgICAgICAgICBpZiAoIW9wdGlvbi5sYXhicmVhaykgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIkJhZCBsaW5lIGJyZWFraW5nIGJlZm9yZSAne2F9Jy4iLCB0b2tlbiwgbmV4dHRva2VuLmlkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIGlmICh0b2tlbi5jaGFyYWN0ZXIgIT09IG5leHR0b2tlbi5mcm9tICYmIG9wdGlvbi53aGl0ZSkgew0KICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCBzcGFjZSBhZnRlciAne2F9Jy4iLCBuZXh0dG9rZW4sIHRva2VuLnZhbHVlKTsNCiAgICAgICAgfQ0KICAgICAgICBhZHZhbmNlKCcsJyk7DQogICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgIH0NCg0KDQovLyBGdW5jdGlvbmFsIGNvbnN0cnVjdG9ycyBmb3IgbWFraW5nIHRoZSBzeW1ib2xzIHRoYXQgd2lsbCBiZSBpbmhlcml0ZWQgYnkNCi8vIHRva2Vucy4NCg0KICAgIGZ1bmN0aW9uIHN5bWJvbChzLCBwKSB7DQogICAgICAgIHZhciB4ID0gc3ludGF4W3NdOw0KICAgICAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICBzeW50YXhbc10gPSB4ID0gew0KICAgICAgICAgICAgICAgIGlkOiBzLA0KICAgICAgICAgICAgICAgIGxicDogcCwNCiAgICAgICAgICAgICAgICB2YWx1ZTogcw0KICAgICAgICAgICAgfTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4geDsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIGRlbGltKHMpIHsNCiAgICAgICAgcmV0dXJuIHN5bWJvbChzLCAwKTsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIHN0bXQocywgZikgew0KICAgICAgICB2YXIgeCA9IGRlbGltKHMpOw0KICAgICAgICB4LmlkZW50aWZpZXIgPSB4LnJlc2VydmVkID0gdHJ1ZTsNCiAgICAgICAgeC5mdWQgPSBmOw0KICAgICAgICByZXR1cm4geDsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIGJsb2Nrc3RtdChzLCBmKSB7DQogICAgICAgIHZhciB4ID0gc3RtdChzLCBmKTsNCiAgICAgICAgeC5ibG9jayA9IHRydWU7DQogICAgICAgIHJldHVybiB4Ow0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gcmVzZXJ2ZU5hbWUoeCkgew0KICAgICAgICB2YXIgYyA9IHguaWQuY2hhckF0KDApOw0KICAgICAgICBpZiAoKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpKSB7DQogICAgICAgICAgICB4LmlkZW50aWZpZXIgPSB4LnJlc2VydmVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4geDsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIHByZWZpeChzLCBmKSB7DQogICAgICAgIHZhciB4ID0gc3ltYm9sKHMsIDE1MCk7DQogICAgICAgIHJlc2VydmVOYW1lKHgpOw0KICAgICAgICB4Lm51ZCA9ICh0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJykgPyBmIDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5yaWdodCA9IGV4cHJlc3Npb24oMTUwKTsNCiAgICAgICAgICAgIHRoaXMuYXJpdHkgPSAndW5hcnknOw0KICAgICAgICAgICAgaWYgKHRoaXMuaWQgPT09ICcrKycgfHwgdGhpcy5pZCA9PT0gJy0tJykgew0KICAgICAgICAgICAgICAgIGlmIChvcHRpb24ucGx1c3BsdXMpIHsNCiAgICAgICAgICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCB1c2Ugb2YgJ3thfScuIiwgdGhpcywgdGhpcy5pZCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoIXRoaXMucmlnaHQuaWRlbnRpZmllciB8fCB0aGlzLnJpZ2h0LnJlc2VydmVkKSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodC5pZCAhPT0gJy4nICYmIHRoaXMucmlnaHQuaWQgIT09ICdbJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJCYWQgb3BlcmFuZC4iLCB0aGlzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgfTsNCiAgICAgICAgcmV0dXJuIHg7DQogICAgfQ0KDQoNCiAgICBmdW5jdGlvbiB0eXBlKHMsIGYpIHsNCiAgICAgICAgdmFyIHggPSBkZWxpbShzKTsNCiAgICAgICAgeC50eXBlID0gczsNCiAgICAgICAgeC5udWQgPSBmOw0KICAgICAgICByZXR1cm4geDsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIHJlc2VydmUocywgZikgew0KICAgICAgICB2YXIgeCA9IHR5cGUocywgZik7DQogICAgICAgIHguaWRlbnRpZmllciA9IHgucmVzZXJ2ZWQgPSB0cnVlOw0KICAgICAgICByZXR1cm4geDsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIHJlc2VydmV2YXIocywgdikgew0KICAgICAgICByZXR1cm4gcmVzZXJ2ZShzLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicpIHsNCiAgICAgICAgICAgICAgICB2KHRoaXMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICAgIH0pOw0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gaW5maXgocywgZiwgcCwgdykgew0KICAgICAgICB2YXIgeCA9IHN5bWJvbChzLCBwKTsNCiAgICAgICAgcmVzZXJ2ZU5hbWUoeCk7DQogICAgICAgIHgubGVkID0gZnVuY3Rpb24gKGxlZnQpIHsNCiAgICAgICAgICAgIGlmICghdykgew0KICAgICAgICAgICAgICAgIG5vYnJlYWtub25hZGphY2VudChwcmV2dG9rZW4sIHRva2VuKTsNCiAgICAgICAgICAgICAgICBub25hZGphY2VudCh0b2tlbiwgbmV4dHRva2VuKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJykgew0KICAgICAgICAgICAgICAgIHJldHVybiBmKGxlZnQsIHRoaXMpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0Ow0KICAgICAgICAgICAgICAgIHRoaXMucmlnaHQgPSBleHByZXNzaW9uKHApOw0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgICByZXR1cm4geDsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIHJlbGF0aW9uKHMsIGYpIHsNCiAgICAgICAgdmFyIHggPSBzeW1ib2wocywgMTAwKTsNCiAgICAgICAgeC5sZWQgPSBmdW5jdGlvbiAobGVmdCkgew0KICAgICAgICAgICAgbm9icmVha25vbmFkamFjZW50KHByZXZ0b2tlbiwgdG9rZW4pOw0KICAgICAgICAgICAgbm9uYWRqYWNlbnQodG9rZW4sIG5leHR0b2tlbik7DQogICAgICAgICAgICB2YXIgcmlnaHQgPSBleHByZXNzaW9uKDEwMCk7DQogICAgICAgICAgICBpZiAoKGxlZnQgJiYgbGVmdC5pZCA9PT0gJ05hTicpIHx8IChyaWdodCAmJiByaWdodC5pZCA9PT0gJ05hTicpKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiVXNlIHRoZSBpc05hTiBmdW5jdGlvbiB0byBjb21wYXJlIHdpdGggTmFOLiIsIHRoaXMpOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChmKSB7DQogICAgICAgICAgICAgICAgZi5hcHBseSh0aGlzLCBbbGVmdCwgcmlnaHRdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChsZWZ0LmlkID09PSAnIScpIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJDb25mdXNpbmcgdXNlIG9mICd7YX0nLiIsIGxlZnQsICchJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAocmlnaHQuaWQgPT09ICchJykgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIkNvbmZ1c2luZyB1c2Ugb2YgJ3thfScuIiwgbGVmdCwgJyEnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7DQogICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7DQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgfTsNCiAgICAgICAgcmV0dXJuIHg7DQogICAgfQ0KDQoNCiAgICBmdW5jdGlvbiBpc1Bvb3JSZWxhdGlvbihub2RlKSB7DQogICAgICAgIHJldHVybiBub2RlICYmDQogICAgICAgICAgICAgICgobm9kZS50eXBlID09PSAnKG51bWJlciknICYmICtub2RlLnZhbHVlID09PSAwKSB8fA0KICAgICAgICAgICAgICAgKG5vZGUudHlwZSA9PT0gJyhzdHJpbmcpJyAmJiBub2RlLnZhbHVlID09PSAnJykgfHwNCiAgICAgICAgICAgICAgIChub2RlLnR5cGUgPT09ICdudWxsJyAmJiAhb3B0aW9uLmVxbnVsbCkgfHwNCiAgICAgICAgICAgICAgICBub2RlLnR5cGUgPT09ICd0cnVlJyB8fA0KICAgICAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gJ2ZhbHNlJyB8fA0KICAgICAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gJ3VuZGVmaW5lZCcpOw0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gYXNzaWdub3AocywgZikgew0KICAgICAgICBzeW1ib2wocywgMjApLmV4cHMgPSB0cnVlOw0KICAgICAgICByZXR1cm4gaW5maXgocywgZnVuY3Rpb24gKGxlZnQsIHRoYXQpIHsNCiAgICAgICAgICAgIHZhciBsOw0KICAgICAgICAgICAgdGhhdC5sZWZ0ID0gbGVmdDsNCiAgICAgICAgICAgIGlmIChwcmVkZWZpbmVkW2xlZnQudmFsdWVdID09PSBmYWxzZSAmJg0KICAgICAgICAgICAgICAgICAgICBzY29wZVtsZWZ0LnZhbHVlXVsnKGdsb2JhbCknXSA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIlJlYWQgb25seS4iLCBsZWZ0KTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFsnZnVuY3Rpb24nXSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIid7YX0nIGlzIGEgZnVuY3Rpb24uIiwgbGVmdCwgbGVmdC52YWx1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobGVmdCkgew0KICAgICAgICAgICAgICAgIGlmIChsZWZ0LmlkID09PSAnLicgfHwgbGVmdC5pZCA9PT0gJ1snKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghbGVmdC5sZWZ0IHx8IGxlZnQubGVmdC52YWx1ZSA9PT0gJ2FyZ3VtZW50cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoJ0JhZCBhc3NpZ25tZW50LicsIHRoYXQpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRoYXQucmlnaHQgPSBleHByZXNzaW9uKDE5KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQ7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LmlkZW50aWZpZXIgJiYgIWxlZnQucmVzZXJ2ZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0W2xlZnQudmFsdWVdID09PSAnZXhjZXB0aW9uJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiRG8gbm90IGFzc2lnbiB0byB0aGUgZXhjZXB0aW9uIHBhcmFtZXRlci4iLCBsZWZ0KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0aGF0LnJpZ2h0ID0gZXhwcmVzc2lvbigxOSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gc3ludGF4WydmdW5jdGlvbiddKSB7DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoDQoiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciBpbiBhbiBhc3NpZ25tZW50IGFuZCBpbnN0ZWFkIHNhdyBhIGZ1bmN0aW9uIGludm9jYXRpb24uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVycm9yKCJCYWQgYXNzaWdubWVudC4iLCB0aGF0KTsNCiAgICAgICAgfSwgMjApOw0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gYml0d2lzZShzLCBmLCBwKSB7DQogICAgICAgIHZhciB4ID0gc3ltYm9sKHMsIHApOw0KICAgICAgICByZXNlcnZlTmFtZSh4KTsNCiAgICAgICAgeC5sZWQgPSAodHlwZW9mIGYgPT09ICdmdW5jdGlvbicpID8gZiA6IGZ1bmN0aW9uIChsZWZ0KSB7DQogICAgICAgICAgICBpZiAob3B0aW9uLmJpdHdpc2UpIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJVbmV4cGVjdGVkIHVzZSBvZiAne2F9Jy4iLCB0aGlzLCB0aGlzLmlkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7DQogICAgICAgICAgICB0aGlzLnJpZ2h0ID0gZXhwcmVzc2lvbihwKTsNCiAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICB9Ow0KICAgICAgICByZXR1cm4geDsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIGJpdHdpc2Vhc3NpZ25vcChzKSB7DQogICAgICAgIHN5bWJvbChzLCAyMCkuZXhwcyA9IHRydWU7DQogICAgICAgIHJldHVybiBpbmZpeChzLCBmdW5jdGlvbiAobGVmdCwgdGhhdCkgew0KICAgICAgICAgICAgaWYgKG9wdGlvbi5iaXR3aXNlKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCB1c2Ugb2YgJ3thfScuIiwgdGhhdCwgdGhhdC5pZCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBub25hZGphY2VudChwcmV2dG9rZW4sIHRva2VuKTsNCiAgICAgICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgaWYgKGxlZnQpIHsNCiAgICAgICAgICAgICAgICBpZiAobGVmdC5pZCA9PT0gJy4nIHx8IGxlZnQuaWQgPT09ICdbJyB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnQuaWRlbnRpZmllciAmJiAhbGVmdC5yZXNlcnZlZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbigxOSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gc3ludGF4WydmdW5jdGlvbiddKSB7DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoDQoiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciBpbiBhbiBhc3NpZ25tZW50LCBhbmQgaW5zdGVhZCBzYXcgYSBmdW5jdGlvbiBpbnZvY2F0aW9uLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlcnJvcigiQmFkIGFzc2lnbm1lbnQuIiwgdGhhdCk7DQogICAgICAgIH0sIDIwKTsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIHN1ZmZpeChzLCBmKSB7DQogICAgICAgIHZhciB4ID0gc3ltYm9sKHMsIDE1MCk7DQogICAgICAgIHgubGVkID0gZnVuY3Rpb24gKGxlZnQpIHsNCiAgICAgICAgICAgIGlmIChvcHRpb24ucGx1c3BsdXMpIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJVbmV4cGVjdGVkIHVzZSBvZiAne2F9Jy4iLCB0aGlzLCB0aGlzLmlkKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoKCFsZWZ0LmlkZW50aWZpZXIgfHwgbGVmdC5yZXNlcnZlZCkgJiYNCiAgICAgICAgICAgICAgICAgICAgbGVmdC5pZCAhPT0gJy4nICYmIGxlZnQuaWQgIT09ICdbJykgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIkJhZCBvcGVyYW5kLiIsIHRoaXMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsNCiAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICB9Ow0KICAgICAgICByZXR1cm4geDsNCiAgICB9DQoNCg0KICAgIC8vIGZucGFyYW0gbWVhbnMgdGhhdCB0aGlzIGlkZW50aWZpZXIgaXMgYmVpbmcgZGVmaW5lZCBhcyBhIGZ1bmN0aW9uDQogICAgLy8gYXJndW1lbnQgKHNlZSBpZGVudGlmaWVyKCkpDQogICAgZnVuY3Rpb24gb3B0aW9uYWxpZGVudGlmaWVyKGZucGFyYW0pIHsNCiAgICAgICAgaWYgKG5leHR0b2tlbi5pZGVudGlmaWVyKSB7DQogICAgICAgICAgICBhZHZhbmNlKCk7DQogICAgICAgICAgICBpZiAodG9rZW4ucmVzZXJ2ZWQgJiYgIW9wdGlvbi5lczUpIHsNCiAgICAgICAgICAgICAgICAvLyBgdW5kZWZpbmVkYCBhcyBhIGZ1bmN0aW9uIHBhcmFtIGlzIGEgY29tbW9uIHBhdHRlcm4gdG8gcHJvdGVjdA0KICAgICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIGNhc2Ugd2hlbiBzb21lYm9keSBkb2VzIGB1bmRlZmluZWQgPSB0cnVlYCBhbmQNCiAgICAgICAgICAgICAgICAvLyBoZWxwIHdpdGggbWluaWZpY2F0aW9uLiBNb3JlIGluZm86IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzMxNTkxNg0KICAgICAgICAgICAgICAgIGlmICghZm5wYXJhbSB8fCB0b2tlbi52YWx1ZSAhPSAndW5kZWZpbmVkJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCBhbiBpZGVudGlmaWVyIGFuZCBpbnN0ZWFkIHNhdyAne2F9JyAoYSByZXNlcnZlZCB3b3JkKS4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCB0b2tlbi5pZCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gZm5wYXJhbSBtZWFucyB0aGF0IHRoaXMgaWRlbnRpZmllciBpcyBiZWluZyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24NCiAgICAvLyBhcmd1bWVudA0KICAgIGZ1bmN0aW9uIGlkZW50aWZpZXIoZm5wYXJhbSkgew0KICAgICAgICB2YXIgaSA9IG9wdGlvbmFsaWRlbnRpZmllcihmbnBhcmFtKTsNCiAgICAgICAgaWYgKGkpIHsNCiAgICAgICAgICAgIHJldHVybiBpOw0KICAgICAgICB9DQogICAgICAgIGlmICh0b2tlbi5pZCA9PT0gJ2Z1bmN0aW9uJyAmJiBuZXh0dG9rZW4uaWQgPT09ICcoJykgew0KICAgICAgICAgICAgd2FybmluZygiTWlzc2luZyBuYW1lIGluIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZXJyb3IoIkV4cGVjdGVkIGFuIGlkZW50aWZpZXIgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsDQogICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgbmV4dHRva2VuLnZhbHVlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gcmVhY2hhYmxlKHMpIHsNCiAgICAgICAgdmFyIGkgPSAwLCB0Ow0KICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnOycgfHwgbm9yZWFjaCkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgIHQgPSBwZWVrKGkpOw0KICAgICAgICAgICAgaWYgKHQucmVhY2gpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodC5pZCAhPT0gJyhlbmRsaW5lKScpIHsNCiAgICAgICAgICAgICAgICBpZiAodC5pZCA9PT0gJ2Z1bmN0aW9uJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKA0KIklubmVyIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkIGF0IHRoZSB0b3Agb2YgdGhlIG91dGVyIGZ1bmN0aW9uLiIsIHQpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgd2FybmluZygiVW5yZWFjaGFibGUgJ3thfScgYWZ0ZXIgJ3tifScuIiwgdCwgdC52YWx1ZSwgcyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpICs9IDE7DQogICAgICAgIH0NCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIHN0YXRlbWVudChub2luZGVudCkgew0KICAgICAgICB2YXIgaSA9IGluZGVudCwgciwgcyA9IHNjb3BlLCB0ID0gbmV4dHRva2VuOw0KDQovLyBXZSBkb24ndCBsaWtlIHRoZSBlbXB0eSBzdGF0ZW1lbnQuDQoNCiAgICAgICAgaWYgKHQuaWQgPT09ICc7Jykgew0KICAgICAgICAgICAgd2FybmluZygiVW5uZWNlc3Nhcnkgc2VtaWNvbG9uLiIsIHQpOw0KICAgICAgICAgICAgYWR2YW5jZSgnOycpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCi8vIElzIHRoaXMgYSBsYWJlbGxlZCBzdGF0ZW1lbnQ/DQoNCiAgICAgICAgaWYgKHQuaWRlbnRpZmllciAmJiAhdC5yZXNlcnZlZCAmJiBwZWVrKCkuaWQgPT09ICc6Jykgew0KICAgICAgICAgICAgYWR2YW5jZSgpOw0KICAgICAgICAgICAgYWR2YW5jZSgnOicpOw0KICAgICAgICAgICAgc2NvcGUgPSBPYmplY3QuY3JlYXRlKHMpOw0KICAgICAgICAgICAgYWRkbGFiZWwodC52YWx1ZSwgJ2xhYmVsJyk7DQogICAgICAgICAgICBpZiAoIW5leHR0b2tlbi5sYWJlbGxlZCkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIkxhYmVsICd7YX0nIG9uIHtifSBzdGF0ZW1lbnQuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgdC52YWx1ZSwgbmV4dHRva2VuLnZhbHVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChqeC50ZXN0KHQudmFsdWUgKyAnOicpKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiTGFiZWwgJ3thfScgbG9va3MgbGlrZSBhIGphdmFzY3JpcHQgdXJsLiIsDQogICAgICAgICAgICAgICAgICAgICAgICB0LCB0LnZhbHVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG5leHR0b2tlbi5sYWJlbCA9IHQudmFsdWU7DQogICAgICAgICAgICB0ID0gbmV4dHRva2VuOw0KICAgICAgICB9DQoNCi8vIFBhcnNlIHRoZSBzdGF0ZW1lbnQuDQoNCiAgICAgICAgaWYgKCFub2luZGVudCkgew0KICAgICAgICAgICAgaW5kZW50YXRpb24oKTsNCiAgICAgICAgfQ0KICAgICAgICByID0gZXhwcmVzc2lvbigwLCB0cnVlKTsNCg0KLy8gTG9vayBmb3IgdGhlIGZpbmFsIHNlbWljb2xvbi4NCg0KICAgICAgICBpZiAoIXQuYmxvY2spIHsNCiAgICAgICAgICAgIGlmICghb3B0aW9uLmV4cHIgJiYgKCFyIHx8ICFyLmV4cHMpKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiRXhwZWN0ZWQgYW4gYXNzaWdubWVudCBvciBmdW5jdGlvbiBjYWxsIGFuZCBpbnN0ZWFkIHNhdyBhbiBleHByZXNzaW9uLiIsDQogICAgICAgICAgICAgICAgICAgIHRva2VuKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLm5vbmV3ICYmIHIuaWQgPT09ICcoJyAmJiByLmxlZnQuaWQgPT09ICduZXcnKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiRG8gbm90IHVzZSAnbmV3JyBmb3Igc2lkZSBlZmZlY3RzLiIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCAhPT0gJzsnKSB7DQogICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uYXNpICYmICEob3B0aW9uLmxhc3RzZW1pYyAmJiBuZXh0dG9rZW4uaWQgPT0gJ30nICYmDQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0dG9rZW4ubGluZSA9PSB0b2tlbi5saW5lKSkgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQXQoIk1pc3Npbmcgc2VtaWNvbG9uLiIsIHRva2VuLmxpbmUsIHRva2VuLmZyb20gKyB0b2tlbi52YWx1ZS5sZW5ndGgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWRqYWNlbnQodG9rZW4sIG5leHR0b2tlbik7DQogICAgICAgICAgICAgICAgYWR2YW5jZSgnOycpOw0KICAgICAgICAgICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCi8vIFJlc3RvcmUgdGhlIGluZGVudGF0aW9uLg0KDQogICAgICAgIGluZGVudCA9IGk7DQogICAgICAgIHNjb3BlID0gczsNCiAgICAgICAgcmV0dXJuIHI7DQogICAgfQ0KDQoNCiAgICBmdW5jdGlvbiB1c2Vfc3RyaWN0KCkgew0KICAgICAgICBpZiAobmV4dHRva2VuLnZhbHVlID09PSAndXNlIHN0cmljdCcpIHsNCiAgICAgICAgICAgIGlmIChzdHJpY3RfbW9kZSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIlVubmVjZXNzYXJ5IFwidXNlIHN0cmljdFwiLiIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYWR2YW5jZSgpOw0KICAgICAgICAgICAgYWR2YW5jZSgnOycpOw0KICAgICAgICAgICAgc3RyaWN0X21vZGUgPSB0cnVlOw0KICAgICAgICAgICAgb3B0aW9uLm5ld2NhcCA9IHRydWU7DQogICAgICAgICAgICBvcHRpb24udW5kZWYgPSB0cnVlOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIHN0YXRlbWVudHMoYmVnaW4pIHsNCiAgICAgICAgdmFyIGEgPSBbXSwgZiwgcDsNCg0KICAgICAgICB3aGlsZSAoIW5leHR0b2tlbi5yZWFjaCAmJiBuZXh0dG9rZW4uaWQgIT09ICcoZW5kKScpIHsNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICc7Jykgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIlVubmVjZXNzYXJ5IHNlbWljb2xvbi4iKTsNCiAgICAgICAgICAgICAgICBhZHZhbmNlKCc7Jyk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGEucHVzaChzdGF0ZW1lbnQoKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGE7DQogICAgfQ0KDQoNCiAgICAvKg0KICAgICAqIFBhcnNlcyBhIHNpbmdsZSBibG9jay4gQSBibG9jayBpcyBhIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgd3JhcHBlZCBpbg0KICAgICAqIGJyYWNlcy4NCiAgICAgKg0KICAgICAqIG9yZGluYXJ5IC0gdHJ1ZSBmb3IgZXZlcnl0aGluZyBidXQgZnVuY3Rpb24gYm9kaWVzIGFuZCB0cnkgYmxvY2tzLg0KICAgICAqIHN0bXQgICAgIC0gdHJ1ZSBpZiBibG9jayBjYW4gYmUgYSBzaW5nbGUgc3RhdGVtZW50IChlLmcuIGluIGlmL2Zvci93aGlsZSkuDQogICAgICovDQogICAgZnVuY3Rpb24gYmxvY2sob3JkaW5hcnksIHN0bXQpIHsNCiAgICAgICAgdmFyIGEsDQogICAgICAgICAgICBiID0gaW5ibG9jaywNCiAgICAgICAgICAgIG9sZF9pbmRlbnQgPSBpbmRlbnQsDQogICAgICAgICAgICBtID0gc3RyaWN0X21vZGUsDQogICAgICAgICAgICBzID0gc2NvcGUsDQogICAgICAgICAgICB0Ow0KDQogICAgICAgIGluYmxvY2sgPSBvcmRpbmFyeTsNCiAgICAgICAgc2NvcGUgPSBPYmplY3QuY3JlYXRlKHNjb3BlKTsNCiAgICAgICAgbm9uYWRqYWNlbnQodG9rZW4sIG5leHR0b2tlbik7DQogICAgICAgIHQgPSBuZXh0dG9rZW47DQoNCiAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJ3snKSB7DQogICAgICAgICAgICBhZHZhbmNlKCd7Jyk7DQogICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnfScgfHwgdG9rZW4ubGluZSAhPT0gbmV4dHRva2VuLmxpbmUpIHsNCiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gb3B0aW9uLmluZGVudDsNCiAgICAgICAgICAgICAgICB3aGlsZSAoIW9yZGluYXJ5ICYmIG5leHR0b2tlbi5mcm9tID4gaW5kZW50KSB7DQogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSBvcHRpb24uaW5kZW50Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoIW9yZGluYXJ5ICYmICF1c2Vfc3RyaWN0KCkgJiYgIW0gJiYgb3B0aW9uLnN0cmljdCAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3RbJyhjb250ZXh0KSddWycoZ2xvYmFsKSddKSB7DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIk1pc3NpbmcgXCJ1c2Ugc3RyaWN0XCIgc3RhdGVtZW50LiIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBhID0gc3RhdGVtZW50cygpOw0KICAgICAgICAgICAgICAgIHN0cmljdF9tb2RlID0gbTsNCiAgICAgICAgICAgICAgICBpbmRlbnQgLT0gb3B0aW9uLmluZGVudDsNCiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbigpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYWR2YW5jZSgnfScsIHQpOw0KICAgICAgICAgICAgaW5kZW50ID0gb2xkX2luZGVudDsNCiAgICAgICAgfSBlbHNlIGlmICghb3JkaW5hcnkpIHsNCiAgICAgICAgICAgIGVycm9yKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIiwNCiAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgJ3snLCBuZXh0dG9rZW4udmFsdWUpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaWYgKCFzdG10IHx8IG9wdGlvbi5jdXJseSkNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgJ3snLCBuZXh0dG9rZW4udmFsdWUpOw0KDQogICAgICAgICAgICBub3JlYWNoID0gdHJ1ZTsNCiAgICAgICAgICAgIGEgPSBbc3RhdGVtZW50KCldOw0KICAgICAgICAgICAgbm9yZWFjaCA9IGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0WycodmVyYiknXSA9IG51bGw7DQogICAgICAgIHNjb3BlID0gczsNCiAgICAgICAgaW5ibG9jayA9IGI7DQogICAgICAgIGlmIChvcmRpbmFyeSAmJiBvcHRpb24ubm9lbXB0eSAmJiAoIWEgfHwgYS5sZW5ndGggPT09IDApKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJFbXB0eSBibG9jay4iKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gYTsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIGNvdW50TWVtYmVyKG0pIHsNCiAgICAgICAgaWYgKG1lbWJlcnNPbmx5ICYmIHR5cGVvZiBtZW1iZXJzT25seVttXSAhPT0gJ2Jvb2xlYW4nKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJVbmV4cGVjdGVkIC8qbWVtYmVyICd7YX0nLiIsIHRva2VuLCBtKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodHlwZW9mIG1lbWJlclttXSA9PT0gJ251bWJlcicpIHsNCiAgICAgICAgICAgIG1lbWJlclttXSArPSAxOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgbWVtYmVyW21dID0gMTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gbm90ZV9pbXBsaWVkKHRva2VuKSB7DQogICAgICAgIHZhciBuYW1lID0gdG9rZW4udmFsdWUsIGxpbmUgPSB0b2tlbi5saW5lLCBhID0gaW1wbGllZFtuYW1lXTsNCiAgICAgICAgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7DQogICAgICAgICAgICBhID0gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFhKSB7DQogICAgICAgICAgICBhID0gW2xpbmVdOw0KICAgICAgICAgICAgaW1wbGllZFtuYW1lXSA9IGE7DQogICAgICAgIH0gZWxzZSBpZiAoYVthLmxlbmd0aCAtIDFdICE9PSBsaW5lKSB7DQogICAgICAgICAgICBhLnB1c2gobGluZSk7DQogICAgICAgIH0NCiAgICB9DQoNCi8vIEJ1aWxkIHRoZSBzeW50YXggdGFibGUgYnkgZGVjbGFyaW5nIHRoZSBzeW50YWN0aWMgZWxlbWVudHMgb2YgdGhlIGxhbmd1YWdlLg0KDQogICAgdHlwZSgnKG51bWJlciknLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pOw0KICAgIHR5cGUoJyhzdHJpbmcpJywgZnVuY3Rpb24gKCkgew0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KTsNCg0KICAgIHN5bnRheFsnKGlkZW50aWZpZXIpJ10gPSB7DQogICAgICAgIHR5cGU6ICcoaWRlbnRpZmllciknLA0KICAgICAgICBsYnA6IDAsDQogICAgICAgIGlkZW50aWZpZXI6IHRydWUsDQogICAgICAgIG51ZDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlLA0KICAgICAgICAgICAgICAgIHMgPSBzY29wZVt2XSwNCiAgICAgICAgICAgICAgICBmOw0KICAgICAgICAgICAgaWYgKHR5cGVvZiBzID09PSAnZnVuY3Rpb24nKSB7DQoNCi8vIFByb3RlY3Rpb24gYWdhaW5zdCBhY2NpZGVudGFsIGluaGVyaXRhbmNlLg0KDQogICAgICAgICAgICAgICAgcyA9IHVuZGVmaW5lZDsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHMgPT09ICdib29sZWFuJykgew0KICAgICAgICAgICAgICAgIGYgPSBmdW5jdDsNCiAgICAgICAgICAgICAgICBmdW5jdCA9IGZ1bmN0aW9uc1swXTsNCiAgICAgICAgICAgICAgICBhZGRsYWJlbCh2LCAndmFyJyk7DQogICAgICAgICAgICAgICAgcyA9IGZ1bmN0Ow0KICAgICAgICAgICAgICAgIGZ1bmN0ID0gZjsNCiAgICAgICAgICAgIH0NCg0KLy8gVGhlIG5hbWUgaXMgaW4gc2NvcGUgYW5kIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uDQoNCiAgICAgICAgICAgIGlmIChmdW5jdCA9PT0gcykgew0KDQovLyAgICAgIENoYW5nZSAndW51c2VkJyB0byAndmFyJywgYW5kIHJlamVjdCBsYWJlbHMuDQoNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZ1bmN0W3ZdKSB7DQogICAgICAgICAgICAgICAgY2FzZSAndW51c2VkJzoNCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rbdl0gPSAndmFyJzsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAndW5jdGlvbic6DQogICAgICAgICAgICAgICAgICAgIGZ1bmN0W3ZdID0gJ2Z1bmN0aW9uJzsNCiAgICAgICAgICAgICAgICAgICAgdGhpc1snZnVuY3Rpb24nXSA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoNCiAgICAgICAgICAgICAgICAgICAgdGhpc1snZnVuY3Rpb24nXSA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2xhYmVsJzoNCiAgICAgICAgICAgICAgICAgICAgd2FybmluZygiJ3thfScgaXMgYSBzdGF0ZW1lbnQgbGFiZWwuIiwgdG9rZW4sIHYpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCi8vIFRoZSBuYW1lIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBmdW5jdGlvbi4gIElmIHdlIGFyZSBpbiB0aGUgZ2xvYmFsIHNjb3BlLA0KLy8gdGhlbiB3ZSBoYXZlIGFuIHVuZGVmaW5lZCB2YXJpYWJsZS4NCi8vDQovLyBPcGVyYXRvcnMgdHlwZW9mIGFuZCBkZWxldGUgZG8gbm90IHJhaXNlIHJ1bnRpbWUgZXJyb3JzIGV2ZW4gaWYgdGhlIGJhc2UNCi8vIG9iamVjdCBvZiBhIHJlZmVyZW5jZSBpcyBudWxsIHNvIG5vIG5lZWQgdG8gZGlzcGxheSB3YXJuaW5nIGlmIHdlJ3JlDQovLyBpbnNpZGUgb2YgdHlwZW9mIG9yIGRlbGV0ZS4NCg0KICAgICAgICAgICAgfSBlbHNlIGlmIChmdW5jdFsnKGdsb2JhbCknXSkgew0KICAgICAgICAgICAgICAgIGlmIChhbm9ubmFtZSAhPSAndHlwZW9mJyAmJiBhbm9ubmFtZSAhPSAnZGVsZXRlJyAmJg0KICAgICAgICAgICAgICAgICAgICBvcHRpb24udW5kZWYgJiYgdHlwZW9mIHByZWRlZmluZWRbdl0gIT09ICdib29sZWFuJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyBpcyBub3QgZGVmaW5lZC4iLCB0b2tlbiwgdik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIG5vdGVfaW1wbGllZCh0b2tlbik7DQoNCi8vIElmIHRoZSBuYW1lIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgY3VycmVudA0KLy8gZnVuY3Rpb24sIGJ1dCBub3QgYXMgb3V0ZXIsIHRoZW4gdGhlcmUgaXMgYSBzY29wZSBlcnJvci4NCg0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZ1bmN0W3ZdKSB7DQogICAgICAgICAgICAgICAgY2FzZSAnY2xvc3VyZSc6DQogICAgICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOg0KICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6DQogICAgICAgICAgICAgICAgY2FzZSAndW51c2VkJzoNCiAgICAgICAgICAgICAgICAgICAgd2FybmluZygiJ3thfScgdXNlZCBvdXQgb2Ygc2NvcGUuIiwgdG9rZW4sIHYpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdsYWJlbCc6DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIid7YX0nIGlzIGEgc3RhdGVtZW50IGxhYmVsLiIsIHRva2VuLCB2KTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnb3V0ZXInOg0KICAgICAgICAgICAgICAgIGNhc2UgJ2dsb2JhbCc6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQoNCi8vIElmIHRoZSBuYW1lIGlzIGRlZmluZWQgaW4gYW4gb3V0ZXIgZnVuY3Rpb24sIG1ha2UgYW4gb3V0ZXIgZW50cnksIGFuZCBpZg0KLy8gaXQgd2FzIHVudXNlZCwgbWFrZSBpdCB2YXIuDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT09IHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0W3ZdID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzID09PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyBpcyBub3QgYWxsb3dlZC4iLCB0b2tlbiwgdik7DQogICAgICAgICAgICAgICAgICAgICAgICBub3RlX2ltcGxpZWQodG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzICE9PSAnb2JqZWN0Jykgew0KDQovLyBPcGVyYXRvcnMgdHlwZW9mIGFuZCBkZWxldGUgZG8gbm90IHJhaXNlIHJ1bnRpbWUgZXJyb3JzIGV2ZW4gaWYgdGhlIGJhc2Ugb2JqZWN0IG9mDQovLyBhIHJlZmVyZW5jZSBpcyBudWxsIHNvIG5vIG5lZWQgdG8gZGlzcGxheSB3YXJuaW5nIGlmIHdlJ3JlIGluc2lkZSBvZiB0eXBlb2Ygb3IgZGVsZXRlLg0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5vbm5hbWUgIT0gJ3R5cGVvZicgJiYgYW5vbm5hbWUgIT0gJ2RlbGV0ZScgJiYgb3B0aW9uLnVuZGVmKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiJ3thfScgaXMgbm90IGRlZmluZWQuIiwgdG9rZW4sIHYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdFt2XSA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBub3RlX2ltcGxpZWQodG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzW3ZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1bmN0aW9uJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWydmdW5jdGlvbiddID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW3ZdID0gJ2Nsb3N1cmUnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0W3ZdID0gc1snKGdsb2JhbCknXSA/ICdnbG9iYWwnIDogJ291dGVyJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1bnVzZWQnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbdl0gPSAnY2xvc3VyZSc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rbdl0gPSBzWycoZ2xvYmFsKSddID8gJ2dsb2JhbCcgOiAnb3V0ZXInOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2xvc3VyZSc6DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwYXJhbWV0ZXInOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0W3ZdID0gc1snKGdsb2JhbCknXSA/ICdnbG9iYWwnIDogJ291dGVyJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhYmVsJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyBpcyBhIHN0YXRlbWVudCBsYWJlbC4iLCB0b2tlbiwgdik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgfSwNCiAgICAgICAgbGVkOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBlcnJvcigiRXhwZWN0ZWQgYW4gb3BlcmF0b3IgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsDQogICAgICAgICAgICAgICAgbmV4dHRva2VuLCBuZXh0dG9rZW4udmFsdWUpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIHR5cGUoJyhyZWdleHApJywgZnVuY3Rpb24gKCkgew0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KTsNCg0KDQovLyBFQ01BU2NyaXB0IHBhcnNlcg0KDQogICAgZGVsaW0oJyhlbmRsaW5lKScpOw0KICAgIGRlbGltKCcoYmVnaW4pJyk7DQogICAgZGVsaW0oJyhlbmQpJykucmVhY2ggPSB0cnVlOw0KICAgIGRlbGltKCc8LycpLnJlYWNoID0gdHJ1ZTsNCiAgICBkZWxpbSgnPCEnKTsNCiAgICBkZWxpbSgnPCEtLScpOw0KICAgIGRlbGltKCctLT4nKTsNCiAgICBkZWxpbSgnKGVycm9yKScpLnJlYWNoID0gdHJ1ZTsNCiAgICBkZWxpbSgnfScpLnJlYWNoID0gdHJ1ZTsNCiAgICBkZWxpbSgnKScpOw0KICAgIGRlbGltKCddJyk7DQogICAgZGVsaW0oJyInKS5yZWFjaCA9IHRydWU7DQogICAgZGVsaW0oIiciKS5yZWFjaCA9IHRydWU7DQogICAgZGVsaW0oJzsnKTsNCiAgICBkZWxpbSgnOicpLnJlYWNoID0gdHJ1ZTsNCiAgICBkZWxpbSgnLCcpOw0KICAgIGRlbGltKCcjJyk7DQogICAgZGVsaW0oJ0AnKTsNCiAgICByZXNlcnZlKCdlbHNlJyk7DQogICAgcmVzZXJ2ZSgnY2FzZScpLnJlYWNoID0gdHJ1ZTsNCiAgICByZXNlcnZlKCdjYXRjaCcpOw0KICAgIHJlc2VydmUoJ2RlZmF1bHQnKS5yZWFjaCA9IHRydWU7DQogICAgcmVzZXJ2ZSgnZmluYWxseScpOw0KICAgIHJlc2VydmV2YXIoJ2FyZ3VtZW50cycsIGZ1bmN0aW9uICh4KSB7DQogICAgICAgIGlmIChzdHJpY3RfbW9kZSAmJiBmdW5jdFsnKGdsb2JhbCknXSkgew0KICAgICAgICAgICAgd2FybmluZygiU3RyaWN0IHZpb2xhdGlvbi4iLCB4KTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgIHJlc2VydmV2YXIoJ2V2YWwnKTsNCiAgICByZXNlcnZldmFyKCdmYWxzZScpOw0KICAgIHJlc2VydmV2YXIoJ0luZmluaXR5Jyk7DQogICAgcmVzZXJ2ZXZhcignTmFOJyk7DQogICAgcmVzZXJ2ZXZhcignbnVsbCcpOw0KICAgIHJlc2VydmV2YXIoJ3RoaXMnLCBmdW5jdGlvbiAoeCkgew0KICAgICAgICBpZiAoc3RyaWN0X21vZGUgJiYgKChmdW5jdFsnKHN0YXRlbWVudCknXSAmJg0KICAgICAgICAgICAgICAgIGZ1bmN0WycobmFtZSknXS5jaGFyQXQoMCkgPiAnWicpIHx8IGZ1bmN0WycoZ2xvYmFsKSddKSkgew0KICAgICAgICAgICAgd2FybmluZygiU3RyaWN0IHZpb2xhdGlvbi4iLCB4KTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgIHJlc2VydmV2YXIoJ3RydWUnKTsNCiAgICByZXNlcnZldmFyKCd1bmRlZmluZWQnKTsNCiAgICBhc3NpZ25vcCgnPScsICdhc3NpZ24nLCAyMCk7DQogICAgYXNzaWdub3AoJys9JywgJ2Fzc2lnbmFkZCcsIDIwKTsNCiAgICBhc3NpZ25vcCgnLT0nLCAnYXNzaWduc3ViJywgMjApOw0KICAgIGFzc2lnbm9wKCcqPScsICdhc3NpZ25tdWx0JywgMjApOw0KICAgIGFzc2lnbm9wKCcvPScsICdhc3NpZ25kaXYnLCAyMCkubnVkID0gZnVuY3Rpb24gKCkgew0KICAgICAgICBlcnJvcigiQSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBjYW4gYmUgY29uZnVzZWQgd2l0aCAnLz0nLiIpOw0KICAgIH07DQogICAgYXNzaWdub3AoJyU9JywgJ2Fzc2lnbm1vZCcsIDIwKTsNCiAgICBiaXR3aXNlYXNzaWdub3AoJyY9JywgJ2Fzc2lnbmJpdGFuZCcsIDIwKTsNCiAgICBiaXR3aXNlYXNzaWdub3AoJ3w9JywgJ2Fzc2lnbmJpdG9yJywgMjApOw0KICAgIGJpdHdpc2Vhc3NpZ25vcCgnXj0nLCAnYXNzaWduYml0eG9yJywgMjApOw0KICAgIGJpdHdpc2Vhc3NpZ25vcCgnPDw9JywgJ2Fzc2lnbnNoaWZ0bGVmdCcsIDIwKTsNCiAgICBiaXR3aXNlYXNzaWdub3AoJz4+PScsICdhc3NpZ25zaGlmdHJpZ2h0JywgMjApOw0KICAgIGJpdHdpc2Vhc3NpZ25vcCgnPj4+PScsICdhc3NpZ25zaGlmdHJpZ2h0dW5zaWduZWQnLCAyMCk7DQogICAgaW5maXgoJz8nLCBmdW5jdGlvbiAobGVmdCwgdGhhdCkgew0KICAgICAgICB0aGF0LmxlZnQgPSBsZWZ0Ow0KICAgICAgICB0aGF0LnJpZ2h0ID0gZXhwcmVzc2lvbigxMCk7DQogICAgICAgIGFkdmFuY2UoJzonKTsNCiAgICAgICAgdGhhdFsnZWxzZSddID0gZXhwcmVzc2lvbigxMCk7DQogICAgICAgIHJldHVybiB0aGF0Ow0KICAgIH0sIDMwKTsNCg0KICAgIGluZml4KCd8fCcsICdvcicsIDQwKTsNCiAgICBpbmZpeCgnJiYnLCAnYW5kJywgNTApOw0KICAgIGJpdHdpc2UoJ3wnLCAnYml0b3InLCA3MCk7DQogICAgYml0d2lzZSgnXicsICdiaXR4b3InLCA4MCk7DQogICAgYml0d2lzZSgnJicsICdiaXRhbmQnLCA5MCk7DQogICAgcmVsYXRpb24oJz09JywgZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7DQogICAgICAgIHZhciBlcW51bGwgPSBvcHRpb24uZXFudWxsICYmDQogICAgICAgICAgICAgICAgKGxlZnQudmFsdWUgPT0gJ251bGwnIHx8IHJpZ2h0LnZhbHVlID09ICdudWxsJyk7DQoNCiAgICAgICAgaWYgKCFlcW51bGwgJiYgb3B0aW9uLmVxZXFlcSkgew0KICAgICAgICAgICAgd2FybmluZygiRXhwZWN0ZWQgJ3thfScgYW5kIGluc3RlYWQgc2F3ICd7Yn0nLiIsDQogICAgICAgICAgICAgICAgICAgIHRoaXMsICc9PT0nLCAnPT0nKTsNCiAgICAgICAgfSBlbHNlIGlmIChpc1Bvb3JSZWxhdGlvbihsZWZ0KSkgew0KICAgICAgICAgICAgd2FybmluZygiVXNlICd7YX0nIHRvIGNvbXBhcmUgd2l0aCAne2J9Jy4iLA0KICAgICAgICAgICAgICAgIHRoaXMsICc9PT0nLCBsZWZ0LnZhbHVlKTsNCiAgICAgICAgfSBlbHNlIGlmIChpc1Bvb3JSZWxhdGlvbihyaWdodCkpIHsNCiAgICAgICAgICAgIHdhcm5pbmcoIlVzZSAne2F9JyB0byBjb21wYXJlIHdpdGggJ3tifScuIiwNCiAgICAgICAgICAgICAgICB0aGlzLCAnPT09JywgcmlnaHQudmFsdWUpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pOw0KICAgIHJlbGF0aW9uKCc9PT0nKTsNCiAgICByZWxhdGlvbignIT0nLCBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsNCiAgICAgICAgdmFyIGVxbnVsbCA9IG9wdGlvbi5lcW51bGwgJiYNCiAgICAgICAgICAgICAgICAobGVmdC52YWx1ZSA9PSAnbnVsbCcgfHwgcmlnaHQudmFsdWUgPT0gJ251bGwnKTsNCg0KICAgICAgICBpZiAoIWVxbnVsbCAmJiBvcHRpb24uZXFlcWVxKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIiwNCiAgICAgICAgICAgICAgICAgICAgdGhpcywgJyE9PScsICchPScpOw0KICAgICAgICB9IGVsc2UgaWYgKGlzUG9vclJlbGF0aW9uKGxlZnQpKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJVc2UgJ3thfScgdG8gY29tcGFyZSB3aXRoICd7Yn0nLiIsDQogICAgICAgICAgICAgICAgICAgIHRoaXMsICchPT0nLCBsZWZ0LnZhbHVlKTsNCiAgICAgICAgfSBlbHNlIGlmIChpc1Bvb3JSZWxhdGlvbihyaWdodCkpIHsNCiAgICAgICAgICAgIHdhcm5pbmcoIlVzZSAne2F9JyB0byBjb21wYXJlIHdpdGggJ3tifScuIiwNCiAgICAgICAgICAgICAgICAgICAgdGhpcywgJyE9PScsIHJpZ2h0LnZhbHVlKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KTsNCiAgICByZWxhdGlvbignIT09Jyk7DQogICAgcmVsYXRpb24oJzwnKTsNCiAgICByZWxhdGlvbignPicpOw0KICAgIHJlbGF0aW9uKCc8PScpOw0KICAgIHJlbGF0aW9uKCc+PScpOw0KICAgIGJpdHdpc2UoJzw8JywgJ3NoaWZ0bGVmdCcsIDEyMCk7DQogICAgYml0d2lzZSgnPj4nLCAnc2hpZnRyaWdodCcsIDEyMCk7DQogICAgYml0d2lzZSgnPj4+JywgJ3NoaWZ0cmlnaHR1bnNpZ25lZCcsIDEyMCk7DQogICAgaW5maXgoJ2luJywgJ2luJywgMTIwKTsNCiAgICBpbmZpeCgnaW5zdGFuY2VvZicsICdpbnN0YW5jZW9mJywgMTIwKTsNCiAgICBpbmZpeCgnKycsIGZ1bmN0aW9uIChsZWZ0LCB0aGF0KSB7DQogICAgICAgIHZhciByaWdodCA9IGV4cHJlc3Npb24oMTMwKTsNCiAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pZCA9PT0gJyhzdHJpbmcpJyAmJiByaWdodC5pZCA9PT0gJyhzdHJpbmcpJykgew0KICAgICAgICAgICAgbGVmdC52YWx1ZSArPSByaWdodC52YWx1ZTsNCiAgICAgICAgICAgIGxlZnQuY2hhcmFjdGVyID0gcmlnaHQuY2hhcmFjdGVyOw0KICAgICAgICAgICAgaWYgKCFvcHRpb24uc2NyaXB0dXJsICYmIGp4LnRlc3QobGVmdC52YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJKYXZhU2NyaXB0IFVSTC4iLCBsZWZ0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBsZWZ0Ow0KICAgICAgICB9DQogICAgICAgIHRoYXQubGVmdCA9IGxlZnQ7DQogICAgICAgIHRoYXQucmlnaHQgPSByaWdodDsNCiAgICAgICAgcmV0dXJuIHRoYXQ7DQogICAgfSwgMTMwKTsNCiAgICBwcmVmaXgoJysnLCAnbnVtJyk7DQogICAgcHJlZml4KCcrKysnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIHdhcm5pbmcoIkNvbmZ1c2luZyBwbHVzZXMuIik7DQogICAgICAgIHRoaXMucmlnaHQgPSBleHByZXNzaW9uKDE1MCk7DQogICAgICAgIHRoaXMuYXJpdHkgPSAndW5hcnknOw0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KTsNCiAgICBpbmZpeCgnKysrJywgZnVuY3Rpb24gKGxlZnQpIHsNCiAgICAgICAgd2FybmluZygiQ29uZnVzaW5nIHBsdXNlcy4iKTsNCiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsNCiAgICAgICAgdGhpcy5yaWdodCA9IGV4cHJlc3Npb24oMTMwKTsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgfSwgMTMwKTsNCiAgICBpbmZpeCgnLScsICdzdWInLCAxMzApOw0KICAgIHByZWZpeCgnLScsICduZWcnKTsNCiAgICBwcmVmaXgoJy0tLScsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgd2FybmluZygiQ29uZnVzaW5nIG1pbnVzZXMuIik7DQogICAgICAgIHRoaXMucmlnaHQgPSBleHByZXNzaW9uKDE1MCk7DQogICAgICAgIHRoaXMuYXJpdHkgPSAndW5hcnknOw0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KTsNCiAgICBpbmZpeCgnLS0tJywgZnVuY3Rpb24gKGxlZnQpIHsNCiAgICAgICAgd2FybmluZygiQ29uZnVzaW5nIG1pbnVzZXMuIik7DQogICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7DQogICAgICAgIHRoaXMucmlnaHQgPSBleHByZXNzaW9uKDEzMCk7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0sIDEzMCk7DQogICAgaW5maXgoJyonLCAnbXVsdCcsIDE0MCk7DQogICAgaW5maXgoJy8nLCAnZGl2JywgMTQwKTsNCiAgICBpbmZpeCgnJScsICdtb2QnLCAxNDApOw0KDQogICAgc3VmZml4KCcrKycsICdwb3N0aW5jJyk7DQogICAgcHJlZml4KCcrKycsICdwcmVpbmMnKTsNCiAgICBzeW50YXhbJysrJ10uZXhwcyA9IHRydWU7DQoNCiAgICBzdWZmaXgoJy0tJywgJ3Bvc3RkZWMnKTsNCiAgICBwcmVmaXgoJy0tJywgJ3ByZWRlYycpOw0KICAgIHN5bnRheFsnLS0nXS5leHBzID0gdHJ1ZTsNCiAgICBwcmVmaXgoJ2RlbGV0ZScsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHAgPSBleHByZXNzaW9uKDApOw0KICAgICAgICBpZiAoIXAgfHwgKHAuaWQgIT09ICcuJyAmJiBwLmlkICE9PSAnWycpKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJWYXJpYWJsZXMgc2hvdWxkIG5vdCBiZSBkZWxldGVkLiIpOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuZmlyc3QgPSBwOw0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KS5leHBzID0gdHJ1ZTsNCg0KICAgIHByZWZpeCgnficsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKG9wdGlvbi5iaXR3aXNlKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJVbmV4cGVjdGVkICd7YX0nLiIsIHRoaXMsICd+Jyk7DQogICAgICAgIH0NCiAgICAgICAgZXhwcmVzc2lvbigxNTApOw0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KTsNCg0KICAgIHByZWZpeCgnIScsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdGhpcy5yaWdodCA9IGV4cHJlc3Npb24oMTUwKTsNCiAgICAgICAgdGhpcy5hcml0eSA9ICd1bmFyeSc7DQogICAgICAgIGlmIChiYW5nW3RoaXMucmlnaHQuaWRdID09PSB0cnVlKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJDb25mdXNpbmcgdXNlIG9mICd7YX0nLiIsIHRoaXMsICchJyk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgfSk7DQogICAgcHJlZml4KCd0eXBlb2YnLCAndHlwZW9mJyk7DQogICAgcHJlZml4KCduZXcnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBjID0gZXhwcmVzc2lvbigxNTUpLCBpOw0KICAgICAgICBpZiAoYyAmJiBjLmlkICE9PSAnZnVuY3Rpb24nKSB7DQogICAgICAgICAgICBpZiAoYy5pZGVudGlmaWVyKSB7DQogICAgICAgICAgICAgICAgY1snbmV3J10gPSB0cnVlOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoYy52YWx1ZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ09iamVjdCc6DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlVzZSB0aGUgb2JqZWN0IGxpdGVyYWwgbm90YXRpb24ge30uIiwgdG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdOdW1iZXInOg0KICAgICAgICAgICAgICAgIGNhc2UgJ1N0cmluZyc6DQogICAgICAgICAgICAgICAgY2FzZSAnQm9vbGVhbic6DQogICAgICAgICAgICAgICAgY2FzZSAnTWF0aCc6DQogICAgICAgICAgICAgICAgY2FzZSAnSlNPTic6DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIkRvIG5vdCB1c2Uge2F9IGFzIGEgY29uc3RydWN0b3IuIiwgdG9rZW4sIGMudmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdGdW5jdGlvbic6DQogICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmV2aWwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlRoZSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyBldmFsLiIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ0RhdGUnOg0KICAgICAgICAgICAgICAgIGNhc2UgJ1JlZ0V4cCc6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGlmIChjLmlkICE9PSAnZnVuY3Rpb24nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpID0gYy52YWx1ZS5zdWJzdHIoMCwgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLm5ld2NhcCAmJiAoaSA8ICdBJyB8fCBpID4gJ1onKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIkEgY29uc3RydWN0b3IgbmFtZSBzaG91bGQgc3RhcnQgd2l0aCAiKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW4gdXBwZXJjYXNlIGxldHRlci4iLCB0b2tlbik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmIChjLmlkICE9PSAnLicgJiYgYy5pZCAhPT0gJ1snICYmIGMuaWQgIT09ICcoJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJCYWQgY29uc3RydWN0b3IuIiwgdG9rZW4pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmICghb3B0aW9uLnN1cGVybmV3KQ0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIldlaXJkIGNvbnN0cnVjdGlvbi4gRGVsZXRlICduZXcnLiIsIHRoaXMpOw0KICAgICAgICB9DQogICAgICAgIGFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnKCcgJiYgIW9wdGlvbi5zdXBlcm5ldykgew0KICAgICAgICAgICAgd2FybmluZygiTWlzc2luZyAnKCknIGludm9raW5nIGEgY29uc3RydWN0b3IuIik7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5maXJzdCA9IGM7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pOw0KICAgIHN5bnRheFsnbmV3J10uZXhwcyA9IHRydWU7DQoNCiAgICBwcmVmaXgoJ3ZvaWQnKS5leHBzID0gdHJ1ZTsNCg0KICAgIGluZml4KCcuJywgZnVuY3Rpb24gKGxlZnQsIHRoYXQpIHsNCiAgICAgICAgYWRqYWNlbnQocHJldnRva2VuLCB0b2tlbik7DQogICAgICAgIG5vYnJlYWsoKTsNCiAgICAgICAgdmFyIG0gPSBpZGVudGlmaWVyKCk7DQogICAgICAgIGlmICh0eXBlb2YgbSA9PT0gJ3N0cmluZycpIHsNCiAgICAgICAgICAgIGNvdW50TWVtYmVyKG0pOw0KICAgICAgICB9DQogICAgICAgIHRoYXQubGVmdCA9IGxlZnQ7DQogICAgICAgIHRoYXQucmlnaHQgPSBtOw0KICAgICAgICBpZiAob3B0aW9uLm5vYXJnICYmIGxlZnQgJiYgbGVmdC52YWx1ZSA9PT0gJ2FyZ3VtZW50cycgJiYNCiAgICAgICAgICAgICAgICAobSA9PT0gJ2NhbGxlZScgfHwgbSA9PT0gJ2NhbGxlcicpKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJBdm9pZCBhcmd1bWVudHMue2F9LiIsIGxlZnQsIG0pOw0KICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb24uZXZpbCAmJiBsZWZ0ICYmIGxlZnQudmFsdWUgPT09ICdkb2N1bWVudCcgJiYNCiAgICAgICAgICAgICAgICAobSA9PT0gJ3dyaXRlJyB8fCBtID09PSAnd3JpdGVsbicpKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJkb2N1bWVudC53cml0ZSBjYW4gYmUgYSBmb3JtIG9mIGV2YWwuIiwgbGVmdCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFvcHRpb24uZXZpbCAmJiAobSA9PT0gJ2V2YWwnIHx8IG0gPT09ICdleGVjU2NyaXB0JykpIHsNCiAgICAgICAgICAgIHdhcm5pbmcoJ2V2YWwgaXMgZXZpbC4nKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdGhhdDsNCiAgICB9LCAxNjAsIHRydWUpOw0KDQogICAgaW5maXgoJygnLCBmdW5jdGlvbiAobGVmdCwgdGhhdCkgew0KICAgICAgICBpZiAocHJldnRva2VuLmlkICE9PSAnfScgJiYgcHJldnRva2VuLmlkICE9PSAnKScpIHsNCiAgICAgICAgICAgIG5vYnJlYWsocHJldnRva2VuLCB0b2tlbik7DQogICAgICAgIH0NCiAgICAgICAgbm9zcGFjZSgpOw0KICAgICAgICBpZiAob3B0aW9uLmltbWVkICYmICFsZWZ0LmltbWVkICYmIGxlZnQuaWQgPT09ICdmdW5jdGlvbicpIHsNCiAgICAgICAgICAgIHdhcm5pbmcoIldyYXAgYW4gaW1tZWRpYXRlIGZ1bmN0aW9uIGludm9jYXRpb24gaW4gcGFyZW50aGVzZXMgIiArDQogICAgICAgICAgICAgICAgInRvIGFzc2lzdCB0aGUgcmVhZGVyIGluIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgZXhwcmVzc2lvbiAiICsNCiAgICAgICAgICAgICAgICAiaXMgdGhlIHJlc3VsdCBvZiBhIGZ1bmN0aW9uLCBhbmQgbm90IHRoZSBmdW5jdGlvbiBpdHNlbGYuIik7DQogICAgICAgIH0NCiAgICAgICAgdmFyIG4gPSAwLA0KICAgICAgICAgICAgcCA9IFtdOw0KICAgICAgICBpZiAobGVmdCkgew0KICAgICAgICAgICAgaWYgKGxlZnQudHlwZSA9PT0gJyhpZGVudGlmaWVyKScpIHsNCiAgICAgICAgICAgICAgICBpZiAobGVmdC52YWx1ZS5tYXRjaCgvXltBLVpdKFtBLVowLTlfJF0qW2Etel1bQS1aYS16MC05XyRdKik/JC8pKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LnZhbHVlICE9PSAnTnVtYmVyJyAmJiBsZWZ0LnZhbHVlICE9PSAnU3RyaW5nJyAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQudmFsdWUgIT09ICdCb29sZWFuJyAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQudmFsdWUgIT09ICdEYXRlJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQudmFsdWUgPT09ICdNYXRoJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIk1hdGggaXMgbm90IGEgZnVuY3Rpb24uIiwgbGVmdCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5uZXdjYXApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKA0KIk1pc3NpbmcgJ25ldycgcHJlZml4IHdoZW4gaW52b2tpbmcgYSBjb25zdHJ1Y3Rvci4iLCBsZWZ0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnKScpIHsNCiAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICBwW3AubGVuZ3RoXSA9IGV4cHJlc3Npb24oMTApOw0KICAgICAgICAgICAgICAgIG4gKz0gMTsNCiAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnLCcpIHsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbW1hKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgYWR2YW5jZSgnKScpOw0KICAgICAgICBub3NwYWNlKHByZXZ0b2tlbiwgdG9rZW4pOw0KICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICBpZiAobGVmdC52YWx1ZSA9PT0gJ3BhcnNlSW50JyAmJiBuID09PSAxKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiTWlzc2luZyByYWRpeCBwYXJhbWV0ZXIuIiwgbGVmdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoIW9wdGlvbi5ldmlsKSB7DQogICAgICAgICAgICAgICAgaWYgKGxlZnQudmFsdWUgPT09ICdldmFsJyB8fCBsZWZ0LnZhbHVlID09PSAnRnVuY3Rpb24nIHx8DQogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LnZhbHVlID09PSAnZXhlY1NjcmlwdCcpIHsNCiAgICAgICAgICAgICAgICAgICAgd2FybmluZygiZXZhbCBpcyBldmlsLiIsIGxlZnQpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocFswXSAmJiBwWzBdLmlkID09PSAnKHN0cmluZyknICYmDQogICAgICAgICAgICAgICAgICAgICAgIChsZWZ0LnZhbHVlID09PSAnc2V0VGltZW91dCcgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQudmFsdWUgPT09ICdzZXRJbnRlcnZhbCcpKSB7DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoDQogICAgIkltcGxpZWQgZXZhbCBpcyBldmlsLiBQYXNzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHN0cmluZy4iLCBsZWZ0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoIWxlZnQuaWRlbnRpZmllciAmJiBsZWZ0LmlkICE9PSAnLicgJiYgbGVmdC5pZCAhPT0gJ1snICYmDQogICAgICAgICAgICAgICAgICAgIGxlZnQuaWQgIT09ICcoJyAmJiBsZWZ0LmlkICE9PSAnJiYnICYmIGxlZnQuaWQgIT09ICd8fCcgJiYNCiAgICAgICAgICAgICAgICAgICAgbGVmdC5pZCAhPT0gJz8nKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiQmFkIGludm9jYXRpb24uIiwgbGVmdCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhhdC5sZWZ0ID0gbGVmdDsNCiAgICAgICAgcmV0dXJuIHRoYXQ7DQogICAgfSwgMTU1LCB0cnVlKS5leHBzID0gdHJ1ZTsNCg0KICAgIHByZWZpeCgnKCcsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgbm9zcGFjZSgpOw0KICAgICAgICBpZiAobmV4dHRva2VuLmlkID09PSAnZnVuY3Rpb24nKSB7DQogICAgICAgICAgICBuZXh0dG9rZW4uaW1tZWQgPSB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHZhciB2ID0gZXhwcmVzc2lvbigwKTsNCiAgICAgICAgYWR2YW5jZSgnKScsIHRoaXMpOw0KICAgICAgICBub3NwYWNlKHByZXZ0b2tlbiwgdG9rZW4pOw0KICAgICAgICBpZiAob3B0aW9uLmltbWVkICYmIHYuaWQgPT09ICdmdW5jdGlvbicpIHsNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICcoJykgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoDQoiTW92ZSB0aGUgaW52b2NhdGlvbiBpbnRvIHRoZSBwYXJlbnMgdGhhdCBjb250YWluIHRoZSBmdW5jdGlvbi4iLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5nKA0KIkRvIG5vdCB3cmFwIGZ1bmN0aW9uIGxpdGVyYWxzIGluIHBhcmVucyB1bmxlc3MgdGhleSBhcmUgdG8gYmUgaW1tZWRpYXRlbHkgaW52b2tlZC4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHY7DQogICAgfSk7DQoNCiAgICBpbmZpeCgnWycsIGZ1bmN0aW9uIChsZWZ0LCB0aGF0KSB7DQogICAgICAgIG5vYnJlYWsocHJldnRva2VuLCB0b2tlbik7DQogICAgICAgIG5vc3BhY2UoKTsNCiAgICAgICAgdmFyIGUgPSBleHByZXNzaW9uKDApLCBzOw0KICAgICAgICBpZiAoZSAmJiBlLnR5cGUgPT09ICcoc3RyaW5nKScpIHsNCiAgICAgICAgICAgIGlmICghb3B0aW9uLmV2aWwgJiYgKGUudmFsdWUgPT09ICdldmFsJyB8fCBlLnZhbHVlID09PSAnZXhlY1NjcmlwdCcpKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiZXZhbCBpcyBldmlsLiIsIHRoYXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY291bnRNZW1iZXIoZS52YWx1ZSk7DQogICAgICAgICAgICBpZiAoIW9wdGlvbi5zdWIgJiYgaXgudGVzdChlLnZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHMgPSBzeW50YXhbZS52YWx1ZV07DQogICAgICAgICAgICAgICAgaWYgKCFzIHx8ICFzLnJlc2VydmVkKSB7DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlsne2F9J10gaXMgYmV0dGVyIHdyaXR0ZW4gaW4gZG90IG5vdGF0aW9uLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwgZS52YWx1ZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGFkdmFuY2UoJ10nLCB0aGF0KTsNCiAgICAgICAgbm9zcGFjZShwcmV2dG9rZW4sIHRva2VuKTsNCiAgICAgICAgdGhhdC5sZWZ0ID0gbGVmdDsNCiAgICAgICAgdGhhdC5yaWdodCA9IGU7DQogICAgICAgIHJldHVybiB0aGF0Ow0KICAgIH0sIDE2MCwgdHJ1ZSk7DQoNCiAgICBwcmVmaXgoJ1snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBiID0gdG9rZW4ubGluZSAhPT0gbmV4dHRva2VuLmxpbmU7DQogICAgICAgIHRoaXMuZmlyc3QgPSBbXTsNCiAgICAgICAgaWYgKGIpIHsNCiAgICAgICAgICAgIGluZGVudCArPSBvcHRpb24uaW5kZW50Ow0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5mcm9tID09PSBpbmRlbnQgKyBvcHRpb24uaW5kZW50KSB7DQogICAgICAgICAgICAgICAgaW5kZW50ICs9IG9wdGlvbi5pbmRlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKG5leHR0b2tlbi5pZCAhPT0gJyhlbmQpJykgew0KICAgICAgICAgICAgd2hpbGUgKG5leHR0b2tlbi5pZCA9PT0gJywnKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiRXh0cmEgY29tbWEuIik7DQogICAgICAgICAgICAgICAgYWR2YW5jZSgnLCcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJ10nKSB7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYiAmJiB0b2tlbi5saW5lICE9PSBuZXh0dG9rZW4ubGluZSkgew0KICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLmZpcnN0LnB1c2goZXhwcmVzc2lvbigxMCkpOw0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJywnKSB7DQogICAgICAgICAgICAgICAgY29tbWEoKTsNCiAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkID09PSAnXScgJiYgIW9wdGlvbi5lczUpIHsNCiAgICAgICAgICAgICAgICAgICAgd2FybmluZygiRXh0cmEgY29tbWEuIiwgdG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChiKSB7DQogICAgICAgICAgICBpbmRlbnQgLT0gb3B0aW9uLmluZGVudDsNCiAgICAgICAgICAgIGluZGVudGF0aW9uKCk7DQogICAgICAgIH0NCiAgICAgICAgYWR2YW5jZSgnXScsIHRoaXMpOw0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9LCAxNjApOw0KDQoNCiAgICBmdW5jdGlvbiBwcm9wZXJ0eV9uYW1lKCkgew0KICAgICAgICB2YXIgaWQgPSBvcHRpb25hbGlkZW50aWZpZXIodHJ1ZSk7DQogICAgICAgIGlmICghaWQpIHsNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICcoc3RyaW5nKScpIHsNCiAgICAgICAgICAgICAgICBpZCA9IG5leHR0b2tlbi52YWx1ZTsNCiAgICAgICAgICAgICAgICBhZHZhbmNlKCk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKG5leHR0b2tlbi5pZCA9PT0gJyhudW1iZXIpJykgew0KICAgICAgICAgICAgICAgIGlkID0gbmV4dHRva2VuLnZhbHVlLnRvU3RyaW5nKCk7DQogICAgICAgICAgICAgICAgYWR2YW5jZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBpZDsNCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIGZ1bmN0aW9ucGFyYW1zKCkgew0KICAgICAgICB2YXIgaSwgdCA9IG5leHR0b2tlbiwgcCA9IFtdOw0KICAgICAgICBhZHZhbmNlKCcoJyk7DQogICAgICAgIG5vc3BhY2UoKTsNCiAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJyknKSB7DQogICAgICAgICAgICBhZHZhbmNlKCcpJyk7DQogICAgICAgICAgICBub3NwYWNlKHByZXZ0b2tlbiwgdG9rZW4pOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgIGkgPSBpZGVudGlmaWVyKHRydWUpOw0KICAgICAgICAgICAgcC5wdXNoKGkpOw0KICAgICAgICAgICAgYWRkbGFiZWwoaSwgJ3BhcmFtZXRlcicpOw0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJywnKSB7DQogICAgICAgICAgICAgICAgY29tbWEoKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWR2YW5jZSgnKScsIHQpOw0KICAgICAgICAgICAgICAgIG5vc3BhY2UocHJldnRva2VuLCB0b2tlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIHA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCg0KICAgIGZ1bmN0aW9uIGRvRnVuY3Rpb24oaSwgc3RhdGVtZW50KSB7DQogICAgICAgIHZhciBmLA0KICAgICAgICAgICAgb2xkT3B0aW9uID0gb3B0aW9uLA0KICAgICAgICAgICAgb2xkU2NvcGUgID0gc2NvcGU7DQoNCiAgICAgICAgb3B0aW9uID0gT2JqZWN0LmNyZWF0ZShvcHRpb24pOw0KICAgICAgICBzY29wZSA9IE9iamVjdC5jcmVhdGUoc2NvcGUpOw0KDQogICAgICAgIGZ1bmN0ID0gew0KICAgICAgICAgICAgJyhuYW1lKScgICAgIDogaSB8fCAnIicgKyBhbm9ubmFtZSArICciJywNCiAgICAgICAgICAgICcobGluZSknICAgICA6IG5leHR0b2tlbi5saW5lLA0KICAgICAgICAgICAgJyhjb250ZXh0KScgIDogZnVuY3QsDQogICAgICAgICAgICAnKGJyZWFrYWdlKScgOiAwLA0KICAgICAgICAgICAgJyhsb29wYWdlKScgIDogMCwNCiAgICAgICAgICAgICcoc2NvcGUpJyAgICA6IHNjb3BlLA0KICAgICAgICAgICAgJyhzdGF0ZW1lbnQpJzogc3RhdGVtZW50DQogICAgICAgIH07DQogICAgICAgIGYgPSBmdW5jdDsNCiAgICAgICAgdG9rZW4uZnVuY3QgPSBmdW5jdDsNCiAgICAgICAgZnVuY3Rpb25zLnB1c2goZnVuY3QpOw0KICAgICAgICBpZiAoaSkgew0KICAgICAgICAgICAgYWRkbGFiZWwoaSwgJ2Z1bmN0aW9uJyk7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3RbJyhwYXJhbXMpJ10gPSBmdW5jdGlvbnBhcmFtcygpOw0KDQogICAgICAgIGJsb2NrKGZhbHNlKTsNCiAgICAgICAgc2NvcGUgPSBvbGRTY29wZTsNCiAgICAgICAgb3B0aW9uID0gb2xkT3B0aW9uOw0KICAgICAgICBmdW5jdFsnKGxhc3QpJ10gPSB0b2tlbi5saW5lOw0KICAgICAgICBmdW5jdCA9IGZ1bmN0WycoY29udGV4dCknXTsNCiAgICAgICAgcmV0dXJuIGY7DQogICAgfQ0KDQoNCiAgICAoZnVuY3Rpb24gKHgpIHsNCiAgICAgICAgeC5udWQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgYiwgZiwgaSwgaiwgcCwgc2VlbiA9IHt9LCB0Ow0KDQogICAgICAgICAgICBiID0gdG9rZW4ubGluZSAhPT0gbmV4dHRva2VuLmxpbmU7DQogICAgICAgICAgICBpZiAoYikgew0KICAgICAgICAgICAgICAgIGluZGVudCArPSBvcHRpb24uaW5kZW50Ow0KICAgICAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uZnJvbSA9PT0gaW5kZW50ICsgb3B0aW9uLmluZGVudCkgew0KICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gb3B0aW9uLmluZGVudDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3IgKDs7KSB7DQogICAgICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJ30nKSB7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYikgew0KICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbigpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiBwZWVrKCkuaWQgIT09ICc6Jykgew0KICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCdnZXQnKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZXM1KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlcnJvcigiZ2V0L3NldCBhcmUgRVM1IGZlYXR1cmVzLiIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGkgPSBwcm9wZXJ0eV9uYW1lKCk7DQogICAgICAgICAgICAgICAgICAgIGlmICghaSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIk1pc3NpbmcgcHJvcGVydHkgbmFtZS4iKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0ID0gbmV4dHRva2VuOw0KICAgICAgICAgICAgICAgICAgICBhZGphY2VudCh0b2tlbiwgbmV4dHRva2VuKTsNCiAgICAgICAgICAgICAgICAgICAgZiA9IGRvRnVuY3Rpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24ubG9vcGZ1bmMgJiYgZnVuY3RbJyhsb29wYWdlKSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJEb24ndCBtYWtlIGZ1bmN0aW9ucyB3aXRoaW4gYSBsb29wLiIsIHQpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHAgPSBmWycocGFyYW1zKSddOw0KICAgICAgICAgICAgICAgICAgICBpZiAocCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCBwYXJhbWV0ZXIgJ3thfScgaW4gZ2V0IHtifSBmdW5jdGlvbi4iLCB0LCBwWzBdLCBpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBhZGphY2VudCh0b2tlbiwgbmV4dHRva2VuKTsNCiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgnLCcpOw0KICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbigpOw0KICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCdzZXQnKTsNCiAgICAgICAgICAgICAgICAgICAgaiA9IHByb3BlcnR5X25hbWUoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IGopIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJFeHBlY3RlZCB7YX0gYW5kIGluc3RlYWQgc2F3IHtifS4iLCB0b2tlbiwgaSwgaik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgdCA9IG5leHR0b2tlbjsNCiAgICAgICAgICAgICAgICAgICAgYWRqYWNlbnQodG9rZW4sIG5leHR0b2tlbik7DQogICAgICAgICAgICAgICAgICAgIGYgPSBkb0Z1bmN0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIHAgPSBmWycocGFyYW1zKSddOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgcC5sZW5ndGggIT09IDEgfHwgcFswXSAhPT0gJ3ZhbHVlJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiRXhwZWN0ZWQgKHZhbHVlKSBpbiBzZXQge2F9IGZ1bmN0aW9uLiIsIHQsIGkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaSA9IHByb3BlcnR5X25hbWUoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpICE9PSAnc3RyaW5nJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgnOicpOw0KICAgICAgICAgICAgICAgICAgICBub25hZGphY2VudCh0b2tlbiwgbmV4dHRva2VuKTsNCiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbigxMCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChzZWVuW2ldID09PSB0cnVlKSB7DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIkR1cGxpY2F0ZSBtZW1iZXIgJ3thfScuIiwgbmV4dHRva2VuLCBpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgc2VlbltpXSA9IHRydWU7DQogICAgICAgICAgICAgICAgY291bnRNZW1iZXIoaSk7DQogICAgICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJywnKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbW1hKCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICcsJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiRXh0cmEgY29tbWEuIiwgdG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHR0b2tlbi5pZCA9PT0gJ30nICYmICFvcHRpb24uZXM1KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHRyYSBjb21tYS4iLCB0b2tlbik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYikgew0KICAgICAgICAgICAgICAgIGluZGVudCAtPSBvcHRpb24uaW5kZW50Ow0KICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBhZHZhbmNlKCd9JywgdGhpcyk7DQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgfTsNCiAgICAgICAgeC5mdWQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBlcnJvcigiRXhwZWN0ZWQgdG8gc2VlIGEgc3RhdGVtZW50IGFuZCBpbnN0ZWFkIHNhdyBhIGJsb2NrLiIsIHRva2VuKTsNCiAgICAgICAgfTsNCiAgICB9KGRlbGltKCd7JykpKTsNCg0KICAgIHZhciB2YXJzdGF0ZW1lbnQgPSBzdG10KCd2YXInLCBmdW5jdGlvbiAocHJlZml4KSB7DQogICAgICAgIC8vIEphdmFTY3JpcHQgZG9lcyBub3QgaGF2ZSBibG9jayBzY29wZS4gSXQgb25seSBoYXMgZnVuY3Rpb24gc2NvcGUuIFNvLA0KICAgICAgICAvLyBkZWNsYXJpbmcgYSB2YXJpYWJsZSBpbiBhIGJsb2NrIGNhbiBoYXZlIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLg0KICAgICAgICB2YXIgaWQsIG5hbWUsIHZhbHVlOw0KDQogICAgICAgIGlmIChmdW5jdFsnKG9uZXZhciknXSAmJiBvcHRpb24ub25ldmFyKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJUb28gbWFueSB2YXIgc3RhdGVtZW50cy4iKTsNCiAgICAgICAgfSBlbHNlIGlmICghZnVuY3RbJyhnbG9iYWwpJ10pIHsNCiAgICAgICAgICAgIGZ1bmN0Wycob25ldmFyKSddID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmZpcnN0ID0gW107DQogICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgaWQgPSBpZGVudGlmaWVyKCk7DQogICAgICAgICAgICBpZiAoZnVuY3RbJyhnbG9iYWwpJ10gJiYgcHJlZGVmaW5lZFtpZF0gPT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiUmVkZWZpbml0aW9uIG9mICd7YX0nLiIsIHRva2VuLCBpZCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBhZGRsYWJlbChpZCwgJ3VudXNlZCcpOw0KICAgICAgICAgICAgaWYgKHByZWZpeCkgew0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbmFtZSA9IHRva2VuOw0KICAgICAgICAgICAgdGhpcy5maXJzdC5wdXNoKHRva2VuKTsNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICc9Jykgew0KICAgICAgICAgICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgICAgIGFkdmFuY2UoJz0nKTsNCiAgICAgICAgICAgICAgICBub25hZGphY2VudCh0b2tlbiwgbmV4dHRva2VuKTsNCiAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkID09PSAndW5kZWZpbmVkJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGluaXRpYWxpemUgJ3thfScgdG8gJ3VuZGVmaW5lZCcuIiwgdG9rZW4sIGlkKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHBlZWsoMCkuaWQgPT09ICc9JyAmJiBuZXh0dG9rZW4uaWRlbnRpZmllcikgew0KICAgICAgICAgICAgICAgICAgICBlcnJvcigiVmFyaWFibGUge2F9IHdhcyBub3QgZGVjbGFyZWQgY29ycmVjdGx5LiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dHRva2VuLCBuZXh0dG9rZW4udmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB2YWx1ZSA9IGV4cHJlc3Npb24oMCk7DQogICAgICAgICAgICAgICAgbmFtZS5maXJzdCA9IHZhbHVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCAhPT0gJywnKSB7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjb21tYSgpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pOw0KICAgIHZhcnN0YXRlbWVudC5leHBzID0gdHJ1ZTsNCg0KICAgIGJsb2Nrc3RtdCgnZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmIChpbmJsb2NrKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJGdW5jdGlvbiBkZWNsYXJhdGlvbnMgc2hvdWxkIG5vdCBiZSBwbGFjZWQgaW4gYmxvY2tzLiAiICsNCiAgICAgICAgICAgICAgICAiVXNlIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiBvciBtb3ZlIHRoZSBzdGF0ZW1lbnQgdG8gdGhlIHRvcCBvZiAiICsNCiAgICAgICAgICAgICAgICAidGhlIG91dGVyIGZ1bmN0aW9uLiIsIHRva2VuKTsNCg0KICAgICAgICB9DQogICAgICAgIHZhciBpID0gaWRlbnRpZmllcigpOw0KICAgICAgICBhZGphY2VudCh0b2tlbiwgbmV4dHRva2VuKTsNCiAgICAgICAgYWRkbGFiZWwoaSwgJ3VuY3Rpb24nKTsNCiAgICAgICAgZG9GdW5jdGlvbihpLCB0cnVlKTsNCiAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJygnICYmIG5leHR0b2tlbi5saW5lID09PSB0b2tlbi5saW5lKSB7DQogICAgICAgICAgICBlcnJvcigNCiJGdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXJlIG5vdCBpbnZvY2FibGUuIFdyYXAgdGhlIHdob2xlIGZ1bmN0aW9uIGludm9jYXRpb24gaW4gcGFyZW5zLiIpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pOw0KDQogICAgcHJlZml4KCdmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGkgPSBvcHRpb25hbGlkZW50aWZpZXIoKTsNCiAgICAgICAgaWYgKGkpIHsNCiAgICAgICAgICAgIGFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgbm9uYWRqYWNlbnQodG9rZW4sIG5leHR0b2tlbik7DQogICAgICAgIH0NCiAgICAgICAgZG9GdW5jdGlvbihpKTsNCiAgICAgICAgaWYgKCFvcHRpb24ubG9vcGZ1bmMgJiYgZnVuY3RbJyhsb29wYWdlKSddKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJEb24ndCBtYWtlIGZ1bmN0aW9ucyB3aXRoaW4gYSBsb29wLiIpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pOw0KDQogICAgYmxvY2tzdG10KCdpZicsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHQgPSBuZXh0dG9rZW47DQogICAgICAgIGFkdmFuY2UoJygnKTsNCiAgICAgICAgbm9uYWRqYWNlbnQodGhpcywgdCk7DQogICAgICAgIG5vc3BhY2UoKTsNCiAgICAgICAgZXhwcmVzc2lvbigyMCk7DQogICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICc9Jykgew0KICAgICAgICAgICAgaWYgKCFvcHRpb24uYm9zcykNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYW5kIGluc3RlYWQgc2F3IGFuIGFzc2lnbm1lbnQuIik7DQogICAgICAgICAgICBhZHZhbmNlKCc9Jyk7DQogICAgICAgICAgICBleHByZXNzaW9uKDIwKTsNCiAgICAgICAgfQ0KICAgICAgICBhZHZhbmNlKCcpJywgdCk7DQogICAgICAgIG5vc3BhY2UocHJldnRva2VuLCB0b2tlbik7DQogICAgICAgIGJsb2NrKHRydWUsIHRydWUpOw0KICAgICAgICBpZiAobmV4dHRva2VuLmlkID09PSAnZWxzZScpIHsNCiAgICAgICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgYWR2YW5jZSgnZWxzZScpOw0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJ2lmJyB8fCBuZXh0dG9rZW4uaWQgPT09ICdzd2l0Y2gnKSB7DQogICAgICAgICAgICAgICAgc3RhdGVtZW50KHRydWUpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBibG9jayh0cnVlLCB0cnVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KTsNCg0KICAgIGJsb2Nrc3RtdCgndHJ5JywgZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgYiwgZSwgczsNCg0KICAgICAgICBibG9jayhmYWxzZSk7DQogICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICdjYXRjaCcpIHsNCiAgICAgICAgICAgIGFkdmFuY2UoJ2NhdGNoJyk7DQogICAgICAgICAgICBub25hZGphY2VudCh0b2tlbiwgbmV4dHRva2VuKTsNCiAgICAgICAgICAgIGFkdmFuY2UoJygnKTsNCiAgICAgICAgICAgIHMgPSBzY29wZTsNCiAgICAgICAgICAgIHNjb3BlID0gT2JqZWN0LmNyZWF0ZShzKTsNCiAgICAgICAgICAgIGUgPSBuZXh0dG9rZW4udmFsdWU7DQogICAgICAgICAgICBpZiAobmV4dHRva2VuLnR5cGUgIT09ICcoaWRlbnRpZmllciknKSB7DQogICAgICAgICAgICAgICAgd2FybmluZygiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciBhbmQgaW5zdGVhZCBzYXcgJ3thfScuIiwNCiAgICAgICAgICAgICAgICAgICAgbmV4dHRva2VuLCBlKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWRkbGFiZWwoZSwgJ2V4Y2VwdGlvbicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYWR2YW5jZSgpOw0KICAgICAgICAgICAgYWR2YW5jZSgnKScpOw0KICAgICAgICAgICAgYmxvY2soZmFsc2UpOw0KICAgICAgICAgICAgYiA9IHRydWU7DQogICAgICAgICAgICBzY29wZSA9IHM7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJ2ZpbmFsbHknKSB7DQogICAgICAgICAgICBhZHZhbmNlKCdmaW5hbGx5Jyk7DQogICAgICAgICAgICBibG9jayhmYWxzZSk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0gZWxzZSBpZiAoIWIpIHsNCiAgICAgICAgICAgIGVycm9yKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIiwNCiAgICAgICAgICAgICAgICAgICAgbmV4dHRva2VuLCAnY2F0Y2gnLCBuZXh0dG9rZW4udmFsdWUpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pOw0KDQogICAgYmxvY2tzdG10KCd3aGlsZScsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHQgPSBuZXh0dG9rZW47DQogICAgICAgIGZ1bmN0WycoYnJlYWthZ2UpJ10gKz0gMTsNCiAgICAgICAgZnVuY3RbJyhsb29wYWdlKSddICs9IDE7DQogICAgICAgIGFkdmFuY2UoJygnKTsNCiAgICAgICAgbm9uYWRqYWNlbnQodGhpcywgdCk7DQogICAgICAgIG5vc3BhY2UoKTsNCiAgICAgICAgZXhwcmVzc2lvbigyMCk7DQogICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICc9Jykgew0KICAgICAgICAgICAgaWYgKCFvcHRpb24uYm9zcykNCiAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYW5kIGluc3RlYWQgc2F3IGFuIGFzc2lnbm1lbnQuIik7DQogICAgICAgICAgICBhZHZhbmNlKCc9Jyk7DQogICAgICAgICAgICBleHByZXNzaW9uKDIwKTsNCiAgICAgICAgfQ0KICAgICAgICBhZHZhbmNlKCcpJywgdCk7DQogICAgICAgIG5vc3BhY2UocHJldnRva2VuLCB0b2tlbik7DQogICAgICAgIGJsb2NrKHRydWUsIHRydWUpOw0KICAgICAgICBmdW5jdFsnKGJyZWFrYWdlKSddIC09IDE7DQogICAgICAgIGZ1bmN0WycobG9vcGFnZSknXSAtPSAxOw0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KS5sYWJlbGxlZCA9IHRydWU7DQoNCiAgICByZXNlcnZlKCd3aXRoJyk7DQoNCiAgICBibG9ja3N0bXQoJ3N3aXRjaCcsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHQgPSBuZXh0dG9rZW4sDQogICAgICAgICAgICBnID0gZmFsc2U7DQogICAgICAgIGZ1bmN0WycoYnJlYWthZ2UpJ10gKz0gMTsNCiAgICAgICAgYWR2YW5jZSgnKCcpOw0KICAgICAgICBub25hZGphY2VudCh0aGlzLCB0KTsNCiAgICAgICAgbm9zcGFjZSgpOw0KICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGV4cHJlc3Npb24oMjApOw0KICAgICAgICBhZHZhbmNlKCcpJywgdCk7DQogICAgICAgIG5vc3BhY2UocHJldnRva2VuLCB0b2tlbik7DQogICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICB0ID0gbmV4dHRva2VuOw0KICAgICAgICBhZHZhbmNlKCd7Jyk7DQogICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICBpbmRlbnQgKz0gb3B0aW9uLmluZGVudDsNCiAgICAgICAgdGhpcy5jYXNlcyA9IFtdOw0KICAgICAgICBmb3IgKDs7KSB7DQogICAgICAgICAgICBzd2l0Y2ggKG5leHR0b2tlbi5pZCkgew0KICAgICAgICAgICAgY2FzZSAnY2FzZSc6DQogICAgICAgICAgICAgICAgc3dpdGNoIChmdW5jdFsnKHZlcmIpJ10pIHsNCiAgICAgICAgICAgICAgICBjYXNlICdicmVhayc6DQogICAgICAgICAgICAgICAgY2FzZSAnY2FzZSc6DQogICAgICAgICAgICAgICAgY2FzZSAnY29udGludWUnOg0KICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybic6DQogICAgICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzoNCiAgICAgICAgICAgICAgICBjYXNlICd0aHJvdyc6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIC8vIFlvdSBjYW4gdGVsbCBKU0hpbnQgdGhhdCB5b3UgZG9uJ3QgdXNlIGJyZWFrIGludGVudGlvbmFsbHkgYnkNCiAgICAgICAgICAgICAgICAgICAgLy8gYWRkaW5nIGEgY29tbWVudCAvKiBmYWxscyB0aHJvdWdoICovIG9uIGEgbGluZSBqdXN0IGJlZm9yZQ0KICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCBgY2FzZWAuDQogICAgICAgICAgICAgICAgICAgIGlmICghZnQudGVzdChsaW5lc1tuZXh0dG9rZW4ubGluZSAtIDJdKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSAnYnJlYWsnIHN0YXRlbWVudCBiZWZvcmUgJ2Nhc2UnLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKC1vcHRpb24uaW5kZW50KTsNCiAgICAgICAgICAgICAgICBhZHZhbmNlKCdjYXNlJyk7DQogICAgICAgICAgICAgICAgdGhpcy5jYXNlcy5wdXNoKGV4cHJlc3Npb24oMjApKTsNCiAgICAgICAgICAgICAgICBnID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBhZHZhbmNlKCc6Jyk7DQogICAgICAgICAgICAgICAgZnVuY3RbJyh2ZXJiKSddID0gJ2Nhc2UnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnZGVmYXVsdCc6DQogICAgICAgICAgICAgICAgc3dpdGNoIChmdW5jdFsnKHZlcmIpJ10pIHsNCiAgICAgICAgICAgICAgICBjYXNlICdicmVhayc6DQogICAgICAgICAgICAgICAgY2FzZSAnY29udGludWUnOg0KICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybic6DQogICAgICAgICAgICAgICAgY2FzZSAndGhyb3cnOg0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICBpZiAoIWZ0LnRlc3QobGluZXNbbmV4dHRva2VuLmxpbmUgLSAyXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgJ2JyZWFrJyBzdGF0ZW1lbnQgYmVmb3JlICdkZWZhdWx0Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbigtb3B0aW9uLmluZGVudCk7DQogICAgICAgICAgICAgICAgYWR2YW5jZSgnZGVmYXVsdCcpOw0KICAgICAgICAgICAgICAgIGcgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGFkdmFuY2UoJzonKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ30nOg0KICAgICAgICAgICAgICAgIGluZGVudCAtPSBvcHRpb24uaW5kZW50Ow0KICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKCk7DQogICAgICAgICAgICAgICAgYWR2YW5jZSgnfScsIHQpOw0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhc2VzLmxlbmd0aCA9PT0gMSB8fCB0aGlzLmNvbmRpdGlvbi5pZCA9PT0gJ3RydWUnIHx8DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi5pZCA9PT0gJ2ZhbHNlJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJUaGlzICdzd2l0Y2gnIHNob3VsZCBiZSBhbiAnaWYnLiIsIHRoaXMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmdW5jdFsnKGJyZWFrYWdlKSddIC09IDE7DQogICAgICAgICAgICAgICAgZnVuY3RbJyh2ZXJiKSddID0gdW5kZWZpbmVkOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIGNhc2UgJyhlbmQpJzoNCiAgICAgICAgICAgICAgICBlcnJvcigiTWlzc2luZyAne2F9Jy4iLCBuZXh0dG9rZW4sICd9Jyk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICBpZiAoZykgew0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuLmlkKSB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJywnOg0KICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIkVhY2ggdmFsdWUgc2hvdWxkIGhhdmUgaXRzIG93biBjYXNlIGxhYmVsLiIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICc6JzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIk1pc3NpbmcgJzonIG9uIGEgY2FzZSBjbGF1c2UuIiwgdG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgZXJyb3IoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgbmV4dHRva2VuLCAnY2FzZScsIG5leHR0b2tlbi52YWx1ZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSkubGFiZWxsZWQgPSB0cnVlOw0KDQogICAgc3RtdCgnZGVidWdnZXInLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICghb3B0aW9uLmRlYnVnKSB7DQogICAgICAgICAgICB3YXJuaW5nKCJBbGwgJ2RlYnVnZ2VyJyBzdGF0ZW1lbnRzIHNob3VsZCBiZSByZW1vdmVkLiIpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pLmV4cHMgPSB0cnVlOw0KDQogICAgKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHggPSBzdG10KCdkbycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGZ1bmN0WycoYnJlYWthZ2UpJ10gKz0gMTsNCiAgICAgICAgICAgIGZ1bmN0WycobG9vcGFnZSknXSArPSAxOw0KICAgICAgICAgICAgdGhpcy5maXJzdCA9IGJsb2NrKHRydWUpOw0KICAgICAgICAgICAgYWR2YW5jZSgnd2hpbGUnKTsNCiAgICAgICAgICAgIHZhciB0ID0gbmV4dHRva2VuOw0KICAgICAgICAgICAgbm9uYWRqYWNlbnQodG9rZW4sIHQpOw0KICAgICAgICAgICAgYWR2YW5jZSgnKCcpOw0KICAgICAgICAgICAgbm9zcGFjZSgpOw0KICAgICAgICAgICAgZXhwcmVzc2lvbigyMCk7DQogICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkID09PSAnPScpIHsNCiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5ib3NzKQ0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYW5kIGluc3RlYWQgc2F3IGFuIGFzc2lnbm1lbnQuIik7DQogICAgICAgICAgICAgICAgYWR2YW5jZSgnPScpOw0KICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oMjApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYWR2YW5jZSgnKScsIHQpOw0KICAgICAgICAgICAgbm9zcGFjZShwcmV2dG9rZW4sIHRva2VuKTsNCiAgICAgICAgICAgIGZ1bmN0WycoYnJlYWthZ2UpJ10gLT0gMTsNCiAgICAgICAgICAgIGZ1bmN0WycobG9vcGFnZSknXSAtPSAxOw0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICAgIH0pOw0KICAgICAgICB4LmxhYmVsbGVkID0gdHJ1ZTsNCiAgICAgICAgeC5leHBzID0gdHJ1ZTsNCiAgICB9KCkpOw0KDQogICAgYmxvY2tzdG10KCdmb3InLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBzLCB0ID0gbmV4dHRva2VuOw0KICAgICAgICBmdW5jdFsnKGJyZWFrYWdlKSddICs9IDE7DQogICAgICAgIGZ1bmN0WycobG9vcGFnZSknXSArPSAxOw0KICAgICAgICBhZHZhbmNlKCcoJyk7DQogICAgICAgIG5vbmFkamFjZW50KHRoaXMsIHQpOw0KICAgICAgICBub3NwYWNlKCk7DQogICAgICAgIGlmIChwZWVrKG5leHR0b2tlbi5pZCA9PT0gJ3ZhcicgPyAxIDogMCkuaWQgPT09ICdpbicpIHsNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICd2YXInKSB7DQogICAgICAgICAgICAgICAgYWR2YW5jZSgndmFyJyk7DQogICAgICAgICAgICAgICAgdmFyc3RhdGVtZW50LmZ1ZC5jYWxsKHZhcnN0YXRlbWVudCwgdHJ1ZSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHN3aXRjaCAoZnVuY3RbbmV4dHRva2VuLnZhbHVlXSkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ3VudXNlZCc6DQogICAgICAgICAgICAgICAgICAgIGZ1bmN0W25leHR0b2tlbi52YWx1ZV0gPSAndmFyJzsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAndmFyJzoNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgd2FybmluZygiQmFkIGZvciBpbiB2YXJpYWJsZSAne2F9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgbmV4dHRva2VuLnZhbHVlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYWR2YW5jZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYWR2YW5jZSgnaW4nKTsNCiAgICAgICAgICAgIGV4cHJlc3Npb24oMjApOw0KICAgICAgICAgICAgYWR2YW5jZSgnKScsIHQpOw0KICAgICAgICAgICAgcyA9IGJsb2NrKHRydWUsIHRydWUpOw0KICAgICAgICAgICAgaWYgKG9wdGlvbi5mb3JpbiAmJiAocy5sZW5ndGggPiAxIHx8IHR5cGVvZiBzWzBdICE9PSAnb2JqZWN0JyB8fA0KICAgICAgICAgICAgICAgICAgICBzWzBdLnZhbHVlICE9PSAnaWYnKSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIlRoZSBib2R5IG9mIGEgZm9yIGluIHNob3VsZCBiZSB3cmFwcGVkIGluIGFuIGlmIHN0YXRlbWVudCB0byBmaWx0ZXIgIiArDQogICAgICAgICAgICAgICAgICAgICAgICAidW53YW50ZWQgcHJvcGVydGllcyBmcm9tIHRoZSBwcm90b3R5cGUuIiwgdGhpcyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmdW5jdFsnKGJyZWFrYWdlKSddIC09IDE7DQogICAgICAgICAgICBmdW5jdFsnKGxvb3BhZ2UpJ10gLT0gMTsNCiAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCAhPT0gJzsnKSB7DQogICAgICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJ3ZhcicpIHsNCiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgndmFyJyk7DQogICAgICAgICAgICAgICAgICAgIHZhcnN0YXRlbWVudC5mdWQuY2FsbCh2YXJzdGF0ZW1lbnQpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oMCwgJ2ZvcicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCAhPT0gJywnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBjb21tYSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbm9saW5lYnJlYWsodG9rZW4pOw0KICAgICAgICAgICAgYWR2YW5jZSgnOycpOw0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCAhPT0gJzsnKSB7DQogICAgICAgICAgICAgICAgZXhwcmVzc2lvbigyMCk7DQogICAgICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJz0nKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmJvc3MpDQogICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJFeHBlY3RlZCBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYW5kIGluc3RlYWQgc2F3IGFuIGFzc2lnbm1lbnQuIik7DQogICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoJz0nKTsNCiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbigyMCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbm9saW5lYnJlYWsodG9rZW4pOw0KICAgICAgICAgICAgYWR2YW5jZSgnOycpOw0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJzsnKSB7DQogICAgICAgICAgICAgICAgZXJyb3IoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgbmV4dHRva2VuLCAnKScsICc7Jyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnKScpIHsNCiAgICAgICAgICAgICAgICBmb3IgKDs7KSB7DQogICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oMCwgJ2ZvcicpOw0KICAgICAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnLCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNvbW1hKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYWR2YW5jZSgnKScsIHQpOw0KICAgICAgICAgICAgbm9zcGFjZShwcmV2dG9rZW4sIHRva2VuKTsNCiAgICAgICAgICAgIGJsb2NrKHRydWUsIHRydWUpOw0KICAgICAgICAgICAgZnVuY3RbJyhicmVha2FnZSknXSAtPSAxOw0KICAgICAgICAgICAgZnVuY3RbJyhsb29wYWdlKSddIC09IDE7DQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgfQ0KICAgIH0pLmxhYmVsbGVkID0gdHJ1ZTsNCg0KDQogICAgc3RtdCgnYnJlYWsnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciB2ID0gbmV4dHRva2VuLnZhbHVlOw0KICAgICAgICBpZiAoZnVuY3RbJyhicmVha2FnZSknXSA9PT0gMCkgew0KICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCAne2F9Jy4iLCBuZXh0dG9rZW4sIHRoaXMudmFsdWUpOw0KICAgICAgICB9DQogICAgICAgIG5vbGluZWJyZWFrKHRoaXMpOw0KICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnOycpIHsNCiAgICAgICAgICAgIGlmICh0b2tlbi5saW5lID09PSBuZXh0dG9rZW4ubGluZSkgew0KICAgICAgICAgICAgICAgIGlmIChmdW5jdFt2XSAhPT0gJ2xhYmVsJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyBpcyBub3QgYSBzdGF0ZW1lbnQgbGFiZWwuIiwgbmV4dHRva2VuLCB2KTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjb3BlW3ZdICE9PSBmdW5jdCkgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyBpcyBvdXQgb2Ygc2NvcGUuIiwgbmV4dHRva2VuLCB2KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy5maXJzdCA9IG5leHR0b2tlbjsNCiAgICAgICAgICAgICAgICBhZHZhbmNlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmVhY2hhYmxlKCdicmVhaycpOw0KICAgICAgICByZXR1cm4gdGhpczsNCiAgICB9KS5leHBzID0gdHJ1ZTsNCg0KDQogICAgc3RtdCgnY29udGludWUnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciB2ID0gbmV4dHRva2VuLnZhbHVlOw0KICAgICAgICBpZiAoZnVuY3RbJyhicmVha2FnZSknXSA9PT0gMCkgew0KICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCAne2F9Jy4iLCBuZXh0dG9rZW4sIHRoaXMudmFsdWUpOw0KICAgICAgICB9DQogICAgICAgIG5vbGluZWJyZWFrKHRoaXMpOw0KICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnOycpIHsNCiAgICAgICAgICAgIGlmICh0b2tlbi5saW5lID09PSBuZXh0dG9rZW4ubGluZSkgew0KICAgICAgICAgICAgICAgIGlmIChmdW5jdFt2XSAhPT0gJ2xhYmVsJykgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyBpcyBub3QgYSBzdGF0ZW1lbnQgbGFiZWwuIiwgbmV4dHRva2VuLCB2KTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjb3BlW3ZdICE9PSBmdW5jdCkgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCIne2F9JyBpcyBvdXQgb2Ygc2NvcGUuIiwgbmV4dHRva2VuLCB2KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy5maXJzdCA9IG5leHR0b2tlbjsNCiAgICAgICAgICAgICAgICBhZHZhbmNlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSBpZiAoIWZ1bmN0WycobG9vcGFnZSknXSkgew0KICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCAne2F9Jy4iLCBuZXh0dG9rZW4sIHRoaXMudmFsdWUpOw0KICAgICAgICB9DQogICAgICAgIHJlYWNoYWJsZSgnY29udGludWUnKTsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgfSkuZXhwcyA9IHRydWU7DQoNCg0KICAgIHN0bXQoJ3JldHVybicsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgbm9saW5lYnJlYWsodGhpcyk7DQogICAgICAgIGlmIChuZXh0dG9rZW4uaWQgPT09ICcocmVnZXhwKScpIHsNCiAgICAgICAgICAgIHdhcm5pbmcoIldyYXAgdGhlIC9yZWdleHAvIGxpdGVyYWwgaW4gcGFyZW5zIHRvIGRpc2FtYmlndWF0ZSB0aGUgc2xhc2ggb3BlcmF0b3IuIik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG5leHR0b2tlbi5pZCAhPT0gJzsnICYmICFuZXh0dG9rZW4ucmVhY2gpIHsNCiAgICAgICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgdGhpcy5maXJzdCA9IGV4cHJlc3Npb24oMjApOw0KICAgICAgICB9DQogICAgICAgIHJlYWNoYWJsZSgncmV0dXJuJyk7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0pLmV4cHMgPSB0cnVlOw0KDQoNCiAgICBzdG10KCd0aHJvdycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgbm9saW5lYnJlYWsodGhpcyk7DQogICAgICAgIG5vbmFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICB0aGlzLmZpcnN0ID0gZXhwcmVzc2lvbigyMCk7DQogICAgICAgIHJlYWNoYWJsZSgndGhyb3cnKTsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgfSkuZXhwcyA9IHRydWU7DQoNCi8vICBTdXBlcmZsdW91cyByZXNlcnZlZCB3b3Jkcw0KDQogICAgcmVzZXJ2ZSgnY2xhc3MnKTsNCiAgICByZXNlcnZlKCdjb25zdCcpOw0KICAgIHJlc2VydmUoJ2VudW0nKTsNCiAgICByZXNlcnZlKCdleHBvcnQnKTsNCiAgICByZXNlcnZlKCdleHRlbmRzJyk7DQogICAgcmVzZXJ2ZSgnaW1wb3J0Jyk7DQogICAgcmVzZXJ2ZSgnc3VwZXInKTsNCg0KICAgIHJlc2VydmUoJ2xldCcpOw0KICAgIHJlc2VydmUoJ3lpZWxkJyk7DQogICAgcmVzZXJ2ZSgnaW1wbGVtZW50cycpOw0KICAgIHJlc2VydmUoJ2ludGVyZmFjZScpOw0KICAgIHJlc2VydmUoJ3BhY2thZ2UnKTsNCiAgICByZXNlcnZlKCdwcml2YXRlJyk7DQogICAgcmVzZXJ2ZSgncHJvdGVjdGVkJyk7DQogICAgcmVzZXJ2ZSgncHVibGljJyk7DQogICAgcmVzZXJ2ZSgnc3RhdGljJyk7DQoNCg0KLy8gUGFyc2UgSlNPTg0KDQogICAgZnVuY3Rpb24ganNvblZhbHVlKCkgew0KDQogICAgICAgIGZ1bmN0aW9uIGpzb25PYmplY3QoKSB7DQogICAgICAgICAgICB2YXIgbyA9IHt9LCB0ID0gbmV4dHRva2VuOw0KICAgICAgICAgICAgYWR2YW5jZSgneycpOw0KICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCAhPT0gJ30nKSB7DQogICAgICAgICAgICAgICAgZm9yICg7Oykgew0KICAgICAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkID09PSAnKGVuZCknKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlcnJvcigiTWlzc2luZyAnfScgdG8gbWF0Y2ggJ3snIGZyb20gbGluZSB7YX0uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dHRva2VuLCB0LmxpbmUpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHR0b2tlbi5pZCA9PT0gJ30nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKCJVbmV4cGVjdGVkIGNvbW1hLiIsIHRva2VuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHR0b2tlbi5pZCA9PT0gJywnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlcnJvcigiVW5leHBlY3RlZCBjb21tYS4iLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHR0b2tlbi5pZCAhPT0gJyhzdHJpbmcpJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiRXhwZWN0ZWQgYSBzdHJpbmcgYW5kIGluc3RlYWQgc2F3IHthfS4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0dG9rZW4sIG5leHR0b2tlbi52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKG9bbmV4dHRva2VuLnZhbHVlXSA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiRHVwbGljYXRlIGtleSAne2F9Jy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0dG9rZW4sIG5leHR0b2tlbi52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG5leHR0b2tlbi52YWx1ZSA9PT0gJ19fcHJvdG9fXycgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICFvcHRpb24ucHJvdG8pIHx8IChuZXh0dG9rZW4udmFsdWUgPT09ICdfX2l0ZXJhdG9yX18nICYmDQogICAgICAgICAgICAgICAgICAgICAgICAhb3B0aW9uLml0ZXJhdG9yKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlRoZSAne2F9JyBrZXkgbWF5IHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgbmV4dHRva2VuLnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG9bbmV4dHRva2VuLnZhbHVlXSA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOw0KICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCc6Jyk7DQogICAgICAgICAgICAgICAgICAgIGpzb25WYWx1ZSgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAobmV4dHRva2VuLmlkICE9PSAnLCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoJywnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBhZHZhbmNlKCd9Jyk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBqc29uQXJyYXkoKSB7DQogICAgICAgICAgICB2YXIgdCA9IG5leHR0b2tlbjsNCiAgICAgICAgICAgIGFkdmFuY2UoJ1snKTsNCiAgICAgICAgICAgIGlmIChuZXh0dG9rZW4uaWQgIT09ICddJykgew0KICAgICAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCA9PT0gJyhlbmQpJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIk1pc3NpbmcgJ10nIHRvIG1hdGNoICdbJyBmcm9tIGxpbmUge2F9LiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHR0b2tlbiwgdC5saW5lKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0dG9rZW4uaWQgPT09ICddJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiVW5leHBlY3RlZCBjb21tYS4iLCB0b2tlbik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0dG9rZW4uaWQgPT09ICcsJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIlVuZXhwZWN0ZWQgY29tbWEuIiwgbmV4dHRva2VuKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBqc29uVmFsdWUoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHR0b2tlbi5pZCAhPT0gJywnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCcsJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYWR2YW5jZSgnXScpOw0KICAgICAgICB9DQoNCiAgICAgICAgc3dpdGNoIChuZXh0dG9rZW4uaWQpIHsNCiAgICAgICAgY2FzZSAneyc6DQogICAgICAgICAgICBqc29uT2JqZWN0KCk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnWyc6DQogICAgICAgICAgICBqc29uQXJyYXkoKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICd0cnVlJzoNCiAgICAgICAgY2FzZSAnZmFsc2UnOg0KICAgICAgICBjYXNlICdudWxsJzoNCiAgICAgICAgY2FzZSAnKG51bWJlciknOg0KICAgICAgICBjYXNlICcoc3RyaW5nKSc6DQogICAgICAgICAgICBhZHZhbmNlKCk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnLSc6DQogICAgICAgICAgICBhZHZhbmNlKCctJyk7DQogICAgICAgICAgICBpZiAodG9rZW4uY2hhcmFjdGVyICE9PSBuZXh0dG9rZW4uZnJvbSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmcoIlVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgJy0nLiIsIHRva2VuKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGFkamFjZW50KHRva2VuLCBuZXh0dG9rZW4pOw0KICAgICAgICAgICAgYWR2YW5jZSgnKG51bWJlciknKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgZXJyb3IoIkV4cGVjdGVkIGEgSlNPTiB2YWx1ZS4iLCBuZXh0dG9rZW4pOw0KICAgICAgICB9DQogICAgfQ0KDQoNCi8vIFRoZSBhY3R1YWwgSlNISU5UIGZ1bmN0aW9uIGl0c2VsZi4NCg0KICAgIHZhciBpdHNlbGYgPSBmdW5jdGlvbiAocywgbywgZykgew0KICAgICAgICB2YXIgYSwgaSwgazsNCiAgICAgICAgSlNISU5ULmVycm9ycyA9IFtdOw0KICAgICAgICBwcmVkZWZpbmVkID0gT2JqZWN0LmNyZWF0ZShzdGFuZGFyZCk7DQogICAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgZyB8fCB7fSk7DQogICAgICAgIGlmIChvKSB7DQogICAgICAgICAgICBhID0gby5wcmVkZWY7DQogICAgICAgICAgICBpZiAoYSkgew0KICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7DQogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSArPSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWZpbmVkW2FbaV1dID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgICAgIGsgPSBPYmplY3Qua2V5cyhhKTsNCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGsubGVuZ3RoOyBpICs9IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlZmluZWRba1tpXV0gPSAhIWFba1tpXV07DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvcHRpb24gPSBvOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgb3B0aW9uID0ge307DQogICAgICAgIH0NCiAgICAgICAgb3B0aW9uLmluZGVudCA9IG9wdGlvbi5pbmRlbnQgfHwgNDsNCiAgICAgICAgb3B0aW9uLm1heGVyciA9IG9wdGlvbi5tYXhlcnIgfHwgNTA7DQoNCiAgICAgICAgdGFiID0gJyc7DQogICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb24uaW5kZW50OyBpICs9IDEpIHsNCiAgICAgICAgICAgIHRhYiArPSAnICc7DQogICAgICAgIH0NCiAgICAgICAgaW5kZW50ID0gMTsNCiAgICAgICAgZ2xvYmFsID0gT2JqZWN0LmNyZWF0ZShwcmVkZWZpbmVkKTsNCiAgICAgICAgc2NvcGUgPSBnbG9iYWw7DQogICAgICAgIGZ1bmN0ID0gew0KICAgICAgICAgICAgJyhnbG9iYWwpJzogdHJ1ZSwNCiAgICAgICAgICAgICcobmFtZSknOiAnKGdsb2JhbCknLA0KICAgICAgICAgICAgJyhzY29wZSknOiBzY29wZSwNCiAgICAgICAgICAgICcoYnJlYWthZ2UpJzogMCwNCiAgICAgICAgICAgICcobG9vcGFnZSknOiAwDQogICAgICAgIH07DQogICAgICAgIGZ1bmN0aW9ucyA9IFtmdW5jdF07DQogICAgICAgIHVybHMgPSBbXTsNCiAgICAgICAgc3JjID0gZmFsc2U7DQogICAgICAgIHN0YWNrID0gbnVsbDsNCiAgICAgICAgbWVtYmVyID0ge307DQogICAgICAgIG1lbWJlcnNPbmx5ID0gbnVsbDsNCiAgICAgICAgaW1wbGllZCA9IHt9Ow0KICAgICAgICBpbmJsb2NrID0gZmFsc2U7DQogICAgICAgIGxvb2thaGVhZCA9IFtdOw0KICAgICAgICBqc29ubW9kZSA9IGZhbHNlOw0KICAgICAgICB3YXJuaW5ncyA9IDA7DQogICAgICAgIGxleC5pbml0KHMpOw0KICAgICAgICBwcmVyZWcgPSB0cnVlOw0KICAgICAgICBzdHJpY3RfbW9kZSA9IGZhbHNlOw0KDQogICAgICAgIHByZXZ0b2tlbiA9IHRva2VuID0gbmV4dHRva2VuID0gc3ludGF4WycoYmVnaW4pJ107DQogICAgICAgIGFzc3VtZSgpOw0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBhZHZhbmNlKCk7DQogICAgICAgICAgICBzd2l0Y2ggKG5leHR0b2tlbi5pZCkgew0KICAgICAgICAgICAgY2FzZSAneyc6DQogICAgICAgICAgICBjYXNlICdbJzoNCiAgICAgICAgICAgICAgICBvcHRpb24ubGF4YnJlYWsgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGpzb25tb2RlID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBqc29uVmFsdWUoKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgaWYgKG5leHR0b2tlbi52YWx1ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmdsb2JhbHN0cmljdCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlVzZSB0aGUgZnVuY3Rpb24gZm9ybSBvZiBcInVzZSBzdHJpY3RcIi4iKTsNCiAgICAgICAgICAgICAgICAgICAgdXNlX3N0cmljdCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzKCdsaWInKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGFkdmFuY2UoJyhlbmQpJyk7DQogICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgIGlmIChlKSB7DQogICAgICAgICAgICAgICAgSlNISU5ULmVycm9ycy5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgcmVhc29uICAgIDogZS5tZXNzYWdlLA0KICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgOiBlLmxpbmUgfHwgbmV4dHRva2VuLmxpbmUsDQogICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA6IGUuY2hhcmFjdGVyIHx8IG5leHR0b2tlbi5mcm9tDQogICAgICAgICAgICAgICAgfSwgbnVsbCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIEpTSElOVC5lcnJvcnMubGVuZ3RoID09PSAwOw0KICAgIH07DQoNCg0KLy8gRGF0YSBzdW1tYXJ5Lg0KDQogICAgaXRzZWxmLmRhdGEgPSBmdW5jdGlvbiAoKSB7DQoNCiAgICAgICAgdmFyIGRhdGEgPSB7ZnVuY3Rpb25zOiBbXX0sIGZ1LCBnbG9iYWxzLCBpbXBsaWVkcyA9IFtdLCBmLCBpLCBqLA0KICAgICAgICAgICAgbWVtYmVycyA9IFtdLCBuLCB1bnVzZWQgPSBbXSwgdjsNCiAgICAgICAgaWYgKGl0c2VsZi5lcnJvcnMubGVuZ3RoKSB7DQogICAgICAgICAgICBkYXRhLmVycm9ycyA9IGl0c2VsZi5lcnJvcnM7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoanNvbm1vZGUpIHsNCiAgICAgICAgICAgIGRhdGEuanNvbiA9IHRydWU7DQogICAgICAgIH0NCg0KICAgICAgICBmb3IgKG4gaW4gaW1wbGllZCkgew0KICAgICAgICAgICAgaWYgKGlzX293bihpbXBsaWVkLCBuKSkgew0KICAgICAgICAgICAgICAgIGltcGxpZWRzLnB1c2goew0KICAgICAgICAgICAgICAgICAgICBuYW1lOiBuLA0KICAgICAgICAgICAgICAgICAgICBsaW5lOiBpbXBsaWVkW25dDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKGltcGxpZWRzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIGRhdGEuaW1wbGllZHMgPSBpbXBsaWVkczsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh1cmxzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIGRhdGEudXJscyA9IHVybHM7DQogICAgICAgIH0NCg0KICAgICAgICBnbG9iYWxzID0gT2JqZWN0LmtleXMoc2NvcGUpOw0KICAgICAgICBpZiAoZ2xvYmFscy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBkYXRhLmdsb2JhbHMgPSBnbG9iYWxzOw0KICAgICAgICB9DQoNCiAgICAgICAgZm9yIChpID0gMTsgaSA8IGZ1bmN0aW9ucy5sZW5ndGg7IGkgKz0gMSkgew0KICAgICAgICAgICAgZiA9IGZ1bmN0aW9uc1tpXTsNCiAgICAgICAgICAgIGZ1ID0ge307DQogICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZnVuY3Rpb25pY2l0eS5sZW5ndGg7IGogKz0gMSkgew0KICAgICAgICAgICAgICAgIGZ1W2Z1bmN0aW9uaWNpdHlbal1dID0gW107DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3IgKG4gaW4gZikgew0KICAgICAgICAgICAgICAgIGlmIChpc19vd24oZiwgbikgJiYgbi5jaGFyQXQoMCkgIT09ICcoJykgew0KICAgICAgICAgICAgICAgICAgICB2ID0gZltuXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT09ICd1bmN0aW9uJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdiA9ICd1bnVzZWQnOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZ1W3ZdKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZnVbdl0ucHVzaChuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09PSAndW51c2VkJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZC5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogZlsnKGxpbmUpJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmdW5jdGlvbic6IGZbJyhuYW1lKSddDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZnVuY3Rpb25pY2l0eS5sZW5ndGg7IGogKz0gMSkgew0KICAgICAgICAgICAgICAgIGlmIChmdVtmdW5jdGlvbmljaXR5W2pdXS5sZW5ndGggPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZ1W2Z1bmN0aW9uaWNpdHlbal1dOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZ1Lm5hbWUgPSBmWycobmFtZSknXTsNCiAgICAgICAgICAgIGZ1LnBhcmFtID0gZlsnKHBhcmFtcyknXTsNCiAgICAgICAgICAgIGZ1LmxpbmUgPSBmWycobGluZSknXTsNCiAgICAgICAgICAgIGZ1Lmxhc3QgPSBmWycobGFzdCknXTsNCiAgICAgICAgICAgIGRhdGEuZnVuY3Rpb25zLnB1c2goZnUpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHVudXNlZC5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBkYXRhLnVudXNlZCA9IHVudXNlZDsNCiAgICAgICAgfQ0KDQogICAgICAgIG1lbWJlcnMgPSBbXTsNCiAgICAgICAgZm9yIChuIGluIG1lbWJlcikgew0KICAgICAgICAgICAgaWYgKHR5cGVvZiBtZW1iZXJbbl0gPT09ICdudW1iZXInKSB7DQogICAgICAgICAgICAgICAgZGF0YS5tZW1iZXIgPSBtZW1iZXI7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZGF0YTsNCiAgICB9Ow0KDQogICAgaXRzZWxmLnJlcG9ydCA9IGZ1bmN0aW9uIChvcHRpb24pIHsNCiAgICAgICAgdmFyIGRhdGEgPSBpdHNlbGYuZGF0YSgpOw0KDQogICAgICAgIHZhciBhID0gW10sIGMsIGUsIGVyciwgZiwgaSwgaywgbCwgbSA9ICcnLCBuLCBvID0gW10sIHM7DQoNCiAgICAgICAgZnVuY3Rpb24gZGV0YWlsKGgsIGFycmF5KSB7DQogICAgICAgICAgICB2YXIgYiwgaSwgc2luZ3VsYXJpdHk7DQogICAgICAgICAgICBpZiAoYXJyYXkpIHsNCiAgICAgICAgICAgICAgICBvLnB1c2goJzxkaXY+PGk+JyArIGggKyAnPC9pPiAnKTsNCiAgICAgICAgICAgICAgICBhcnJheSA9IGFycmF5LnNvcnQoKTsNCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpICs9IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5W2ldICE9PSBzaW5ndWxhcml0eSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2luZ3VsYXJpdHkgPSBhcnJheVtpXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIG8ucHVzaCgoYiA/ICcsICcgOiAnJykgKyBzaW5ndWxhcml0eSk7DQogICAgICAgICAgICAgICAgICAgICAgICBiID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBvLnB1c2goJzwvZGl2PicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAoZGF0YS5lcnJvcnMgfHwgZGF0YS5pbXBsaWVkcyB8fCBkYXRhLnVudXNlZCkgew0KICAgICAgICAgICAgZXJyID0gdHJ1ZTsNCiAgICAgICAgICAgIG8ucHVzaCgnPGRpdiBpZD1lcnJvcnM+PGk+RXJyb3I6PC9pPicpOw0KICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JzKSB7DQogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEuZXJyb3JzLmxlbmd0aDsgaSArPSAxKSB7DQogICAgICAgICAgICAgICAgICAgIGMgPSBkYXRhLmVycm9yc1tpXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBjLmV2aWRlbmNlIHx8ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgby5wdXNoKCc8cD5Qcm9ibGVtJyArIChpc0Zpbml0ZShjLmxpbmUpID8gJyBhdCBsaW5lICcgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmxpbmUgKyAnIGNoYXJhY3RlciAnICsgYy5jaGFyYWN0ZXIgOiAnJykgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiAnICsgYy5yZWFzb24uZW50aXR5aWZ5KCkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9wPjxwIGNsYXNzPWV2aWRlbmNlPicgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSAmJiAoZS5sZW5ndGggPiA4MCA/IGUuc2xpY2UoMCwgNzcpICsgJy4uLicgOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlKS5lbnRpdHlpZnkoKSkgKyAnPC9wPicpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoZGF0YS5pbXBsaWVkcykgew0KICAgICAgICAgICAgICAgIHMgPSBbXTsNCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5pbXBsaWVkcy5sZW5ndGg7IGkgKz0gMSkgew0KICAgICAgICAgICAgICAgICAgICBzW2ldID0gJzxjb2RlPicgKyBkYXRhLmltcGxpZWRzW2ldLm5hbWUgKyAnPC9jb2RlPiZuYnNwOzxpPicgKw0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5pbXBsaWVkc1tpXS5saW5lICsgJzwvaT4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBvLnB1c2goJzxwPjxpPkltcGxpZWQgZ2xvYmFsOjwvaT4gJyArIHMuam9pbignLCAnKSArICc8L3A+Jyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChkYXRhLnVudXNlZCkgew0KICAgICAgICAgICAgICAgIHMgPSBbXTsNCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS51bnVzZWQubGVuZ3RoOyBpICs9IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgc1tpXSA9ICc8Y29kZT48dT4nICsgZGF0YS51bnVzZWRbaV0ubmFtZSArICc8L3U+PC9jb2RlPiZuYnNwOzxpPicgKw0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS51bnVzZWRbaV0ubGluZSArICc8L2k+IDxjb2RlPicgKw0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS51bnVzZWRbaV1bJ2Z1bmN0aW9uJ10gKyAnPC9jb2RlPic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIG8ucHVzaCgnPHA+PGk+VW51c2VkIHZhcmlhYmxlOjwvaT4gJyArIHMuam9pbignLCAnKSArICc8L3A+Jyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGF0YS5qc29uKSB7DQogICAgICAgICAgICAgICAgby5wdXNoKCc8cD5KU09OOiBiYWQuPC9wPicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgby5wdXNoKCc8L2Rpdj4nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghb3B0aW9uKSB7DQoNCiAgICAgICAgICAgIG8ucHVzaCgnPGJyPjxkaXYgaWQ9ZnVuY3Rpb25zPicpOw0KDQogICAgICAgICAgICBpZiAoZGF0YS51cmxzKSB7DQogICAgICAgICAgICAgICAgZGV0YWlsKCJVUkxzPGJyPiIsIGRhdGEudXJscywgJzxicj4nKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKGRhdGEuanNvbiAmJiAhZXJyKSB7DQogICAgICAgICAgICAgICAgby5wdXNoKCc8cD5KU09OOiBnb29kLjwvcD4nKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5nbG9iYWxzKSB7DQogICAgICAgICAgICAgICAgby5wdXNoKCc8ZGl2PjxpPkdsb2JhbDwvaT4gJyArDQogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdsb2JhbHMuc29ydCgpLmpvaW4oJywgJykgKyAnPC9kaXY+Jyk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIG8ucHVzaCgnPGRpdj48aT5ObyBuZXcgZ2xvYmFsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkLjwvaT48L2Rpdj4nKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEuZnVuY3Rpb25zLmxlbmd0aDsgaSArPSAxKSB7DQogICAgICAgICAgICAgICAgZiA9IGRhdGEuZnVuY3Rpb25zW2ldOw0KDQogICAgICAgICAgICAgICAgby5wdXNoKCc8YnI+PGRpdiBjbGFzcz1mdW5jdGlvbj48aT4nICsgZi5saW5lICsgJy0nICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGYubGFzdCArICc8L2k+ICcgKyAoZi5uYW1lIHx8ICcnKSArICcoJyArDQogICAgICAgICAgICAgICAgICAgICAgICAoZi5wYXJhbSA/IGYucGFyYW0uam9pbignLCAnKSA6ICcnKSArICcpPC9kaXY+Jyk7DQogICAgICAgICAgICAgICAgZGV0YWlsKCc8YmlnPjxiPlVudXNlZDwvYj48L2JpZz4nLCBmLnVudXNlZCk7DQogICAgICAgICAgICAgICAgZGV0YWlsKCdDbG9zdXJlJywgZi5jbG9zdXJlKTsNCiAgICAgICAgICAgICAgICBkZXRhaWwoJ1ZhcmlhYmxlJywgZlsndmFyJ10pOw0KICAgICAgICAgICAgICAgIGRldGFpbCgnRXhjZXB0aW9uJywgZi5leGNlcHRpb24pOw0KICAgICAgICAgICAgICAgIGRldGFpbCgnT3V0ZXInLCBmLm91dGVyKTsNCiAgICAgICAgICAgICAgICBkZXRhaWwoJ0dsb2JhbCcsIGYuZ2xvYmFsKTsNCiAgICAgICAgICAgICAgICBkZXRhaWwoJ0xhYmVsJywgZi5sYWJlbCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChkYXRhLm1lbWJlcikgew0KICAgICAgICAgICAgICAgIGEgPSBPYmplY3Qua2V5cyhkYXRhLm1lbWJlcik7DQogICAgICAgICAgICAgICAgaWYgKGEubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgIGEgPSBhLnNvcnQoKTsNCiAgICAgICAgICAgICAgICAgICAgbSA9ICc8YnI+PHByZSBpZD1tZW1iZXJzPi8qbWVtYmVycyAnOw0KICAgICAgICAgICAgICAgICAgICBsID0gMTA7DQogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSArPSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBrID0gYVtpXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBrLm5hbWUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsICsgbi5sZW5ndGggPiA3Mikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8ucHVzaChtICsgJzxicj4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gJyAgICAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgbCArPSBuLmxlbmd0aCArIDI7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZW1iZXJba10gPT09IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gJzxpPicgKyBuICsgJzwvaT4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhLmxlbmd0aCAtIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuICs9ICcsICc7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBtICs9IG47DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgby5wdXNoKG0gKyAnPGJyPiovPC9wcmU+Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIG8ucHVzaCgnPC9kaXY+Jyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG8uam9pbignJyk7DQogICAgfTsNCiAgICBpdHNlbGYuanNoaW50ID0gaXRzZWxmOw0KDQogICAgaXRzZWxmLmVkaXRpb24gPSAnMjAxMS0wNC0xNic7DQoNCiAgICByZXR1cm4gaXRzZWxmOw0KDQp9KCkpOw0KDQovLyBNYWtlIEpTSElOVCBhIE5vZGUgbW9kdWxlLCBpZiBwb3NzaWJsZS4NCmlmICh0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzKQ0KICAgIGV4cG9ydHMuSlNISU5UID0gSlNISU5UOw0KDQp9KTsvKiAtKi0gTW9kZTogSlM7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyAtKi0NCiAqIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz03ODoNCiAqICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqDQogKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjENCiAqDQogKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24NCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvDQogKg0KICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywNCiAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQ0KICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUNCiAqIExpY2Vuc2UuDQogKg0KICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE5hcmNpc3N1cyBKYXZhU2NyaXB0IGVuZ2luZS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEJyZW5kYW4gRWljaCA8YnJlbmRhbkBtb3ppbGxhLm9yZz4uDQogKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA0DQogKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQogKg0KICogQ29udHJpYnV0b3Iocyk6DQogKiAgIFRvbSBBdXN0aW4gPHRhdXN0aW5AdWNzYy5lZHU+DQogKiAgIEJyZW5kYW4gRWljaCA8YnJlbmRhbkBtb3ppbGxhLm9yZz4NCiAqICAgU2h1LVl1IEd1byA8c2h1QHJmcm4ub3JnPg0KICogICBEYXZlIEhlcm1hbiA8ZGhlcm1hbkBtb3ppbGxhLmNvbT4NCiAqICAgRGltaXRyaXMgVmFyZG91bGFraXMgPGRpbXZhckBjY3MubmV1LmVkdT4NCiAqICAgUGF0cmljayBXYWx0b24gPHBjd2FsdG9uQG1vemlsbGEuY29tPg0KICoNCiAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mDQogKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3INCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLA0KICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQNCiAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5DQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvDQogKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cg0KICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UNCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlDQogKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyDQogKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLg0KICoNCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovDQoNCi8qDQogKiBOYXJjaXNzdXMgLSBKUyBpbXBsZW1lbnRlZCBpbiBKUy4NCiAqDQogKiBQYXJzZXIuDQogKi8NCg0KZGVmaW5lKCdhY2UvbmFyY2lzc3VzL2pzcGFyc2UnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9uYXJjaXNzdXMvanNsZXgnLCAnYWNlL25hcmNpc3N1cy9qc2RlZnMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoNCiAgICB2YXIgbGV4ZXIgPSByZXF1aXJlKCIuL2pzbGV4Iik7DQogICAgdmFyIGRlZmluaXRpb25zID0gcmVxdWlyZSgiLi9qc2RlZnMiKTsNCg0KICAgIGNvbnN0IFN0cmluZ01hcCA9IGRlZmluaXRpb25zLlN0cmluZ01hcDsNCiAgICBjb25zdCBTdGFjayA9IGRlZmluaXRpb25zLlN0YWNrOw0KDQogICAgLy8gU2V0IGNvbnN0YW50cyBpbiB0aGUgbG9jYWwgc2NvcGUuDQogICAgZXZhbChkZWZpbml0aW9ucy5jb25zdHMpOw0KDQogICAgLy8gQmFubmVkIHN0YXRlbWVudCB0eXBlcyBieSBsYW5ndWFnZSB2ZXJzaW9uLg0KICAgIGNvbnN0IGJsYWNrTGlzdHMgPSB7IDE2MDoge30sIDE4NToge30sIGhhcm1vbnk6IHt9IH07DQogICAgYmxhY2tMaXN0c1sxNjBdW0lNUE9SVF0gPSB0cnVlOw0KICAgIGJsYWNrTGlzdHNbMTYwXVtFWFBPUlRdID0gdHJ1ZTsNCiAgICBibGFja0xpc3RzWzE2MF1bTEVUXSA9IHRydWU7DQogICAgYmxhY2tMaXN0c1sxNjBdW01PRFVMRV0gPSB0cnVlOw0KICAgIGJsYWNrTGlzdHNbMTYwXVtZSUVMRF0gPSB0cnVlOw0KICAgIGJsYWNrTGlzdHNbMTg1XVtJTVBPUlRdID0gdHJ1ZTsNCiAgICBibGFja0xpc3RzWzE4NV1bRVhQT1JUXSA9IHRydWU7DQogICAgYmxhY2tMaXN0c1sxODVdW01PRFVMRV0gPSB0cnVlOw0KICAgIGJsYWNrTGlzdHMuaGFybW9ueVtXSVRIXSA9IHRydWU7DQoNCiAgICAvKg0KICAgICAqIHB1c2hEZXN0cnVjdHVyaW5nVmFyRGVjbHMgOjogKG5vZGUsIGhvaXN0aW5nIG5vZGUpIC0+IHZvaWQNCiAgICAgKg0KICAgICAqIFJlY3Vyc2l2ZWx5IGFkZCBhbGwgZGVzdHJ1Y3R1cmVkIGRlY2xhcmF0aW9ucyB0byB2YXJEZWNscy4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBwdXNoRGVzdHJ1Y3R1cmluZ1ZhckRlY2xzKG4sIHMpIHsNCiAgICAgICAgZm9yICh2YXIgaSBpbiBuKSB7DQogICAgICAgICAgICB2YXIgc3ViID0gbltpXTsNCiAgICAgICAgICAgIGlmIChzdWIudHlwZSA9PT0gSURFTlRJRklFUikgew0KICAgICAgICAgICAgICAgIHMudmFyRGVjbHMucHVzaChzdWIpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBwdXNoRGVzdHJ1Y3R1cmluZ1ZhckRlY2xzKHN1Yiwgcyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBTdGF0aWNDb250ZXh0KHBhcmVudFNjcmlwdCwgcGFyZW50QmxvY2ssIGluTW9kdWxlLCBpbkZ1bmN0aW9uKSB7DQogICAgICAgIHRoaXMucGFyZW50U2NyaXB0ID0gcGFyZW50U2NyaXB0Ow0KICAgICAgICB0aGlzLnBhcmVudEJsb2NrID0gcGFyZW50QmxvY2sgfHwgcGFyZW50U2NyaXB0Ow0KICAgICAgICB0aGlzLmluTW9kdWxlID0gaW5Nb2R1bGUgfHwgZmFsc2U7DQogICAgICAgIHRoaXMuaW5GdW5jdGlvbiA9IGluRnVuY3Rpb24gfHwgZmFsc2U7DQogICAgICAgIHRoaXMuaW5Gb3JMb29wSW5pdCA9IGZhbHNlOw0KICAgICAgICB0aGlzLnRvcExldmVsID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5hbGxMYWJlbHMgPSBuZXcgU3RhY2soKTsNCiAgICAgICAgdGhpcy5jdXJyZW50TGFiZWxzID0gbmV3IFN0YWNrKCk7DQogICAgICAgIHRoaXMubGFiZWxlZFRhcmdldHMgPSBuZXcgU3RhY2soKTsNCiAgICAgICAgdGhpcy5kZWZhdWx0TG9vcFRhcmdldCA9IG51bGw7DQogICAgICAgIHRoaXMuZGVmYXVsdFRhcmdldCA9IG51bGw7DQogICAgICAgIHRoaXMuYmxhY2tMaXN0ID0gYmxhY2tMaXN0c1tOYXJjaXNzdXMub3B0aW9ucy52ZXJzaW9uXTsNCiAgICAgICAgTmFyY2lzc3VzLm9wdGlvbnMuZWNtYTNPbmx5TW9kZSAmJiAodGhpcy5lY21hM09ubHlNb2RlID0gdHJ1ZSk7DQogICAgICAgIE5hcmNpc3N1cy5vcHRpb25zLnBhcmVuRnJlZU1vZGUgJiYgKHRoaXMucGFyZW5GcmVlTW9kZSA9IHRydWUpOw0KICAgIH0NCg0KICAgIFN0YXRpY0NvbnRleHQucHJvdG90eXBlID0gew0KICAgICAgICBlY21hM09ubHlNb2RlOiBmYWxzZSwNCiAgICAgICAgcGFyZW5GcmVlTW9kZTogZmFsc2UsDQogICAgICAgIC8vIG5vbi1kZXN0cnVjdGl2ZSB1cGRhdGUgdmlhIHByb3RvdHlwZSBleHRlbnNpb24NCiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihleHQpIHsNCiAgICAgICAgICAgIHZhciBkZXNjID0ge307DQogICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXh0KSB7DQogICAgICAgICAgICAgICAgZGVzY1trZXldID0gew0KICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZXh0W2tleV0sDQogICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzLCBkZXNjKTsNCiAgICAgICAgfSwNCiAgICAgICAgcHVzaExhYmVsOiBmdW5jdGlvbihsYWJlbCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHsgY3VycmVudExhYmVsczogdGhpcy5jdXJyZW50TGFiZWxzLnB1c2gobGFiZWwpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsTGFiZWxzOiB0aGlzLmFsbExhYmVscy5wdXNoKGxhYmVsKSB9KTsNCiAgICAgICAgfSwNCiAgICAgICAgcHVzaFRhcmdldDogZnVuY3Rpb24odGFyZ2V0KSB7DQogICAgICAgICAgICB2YXIgaXNEZWZhdWx0TG9vcFRhcmdldCA9IHRhcmdldC5pc0xvb3A7DQogICAgICAgICAgICB2YXIgaXNEZWZhdWx0VGFyZ2V0ID0gaXNEZWZhdWx0TG9vcFRhcmdldCB8fCB0YXJnZXQudHlwZSA9PT0gU1dJVENIOw0KDQogICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50TGFiZWxzLmlzRW1wdHkoKSkgew0KICAgICAgICAgICAgICAgIGlmIChpc0RlZmF1bHRMb29wVGFyZ2V0KSB0aGlzLnVwZGF0ZSh7IGRlZmF1bHRMb29wVGFyZ2V0OiB0YXJnZXQgfSk7DQogICAgICAgICAgICAgICAgaWYgKGlzRGVmYXVsdFRhcmdldCkgdGhpcy51cGRhdGUoeyBkZWZhdWx0VGFyZ2V0OiB0YXJnZXQgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHRhcmdldC5sYWJlbHMgPSBuZXcgU3RyaW5nTWFwKCk7DQogICAgICAgICAgICB0aGlzLmN1cnJlbnRMYWJlbHMuZm9yRWFjaChmdW5jdGlvbihsYWJlbCkgew0KICAgICAgICAgICAgICAgIHRhcmdldC5sYWJlbHMuc2V0KGxhYmVsLCB0cnVlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHsgY3VycmVudExhYmVsczogbmV3IFN0YWNrKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbGVkVGFyZ2V0czogdGhpcy5sYWJlbGVkVGFyZ2V0cy5wdXNoKHRhcmdldCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TG9vcFRhcmdldDogaXNEZWZhdWx0TG9vcFRhcmdldA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGFyZ2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRMb29wVGFyZ2V0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRhcmdldDogaXNEZWZhdWx0VGFyZ2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhcmdldA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRUYXJnZXQgfSk7DQogICAgICAgIH0sDQogICAgICAgIG5lc3Q6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9wTGV2ZWwgPyB0aGlzLnVwZGF0ZSh7IHRvcExldmVsOiBmYWxzZSB9KSA6IHRoaXM7DQogICAgICAgIH0sDQogICAgICAgIGFsbG93OiBmdW5jdGlvbih0eXBlKSB7DQogICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsNCiAgICAgICAgICAgICAgY2FzZSBFWFBPUlQ6DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluTW9kdWxlIHx8IHRoaXMuaW5GdW5jdGlvbiB8fCAhdGhpcy50b3BMZXZlbCkNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIC8vIEZBTEwgVEhST1VHSA0KDQogICAgICAgICAgICAgIGNhc2UgSU1QT1JUOg0KICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5pbkZ1bmN0aW9uICYmIHRoaXMudG9wTGV2ZWw7DQoNCiAgICAgICAgICAgICAgY2FzZSBNT0RVTEU6DQogICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmluRnVuY3Rpb24gJiYgdGhpcy50b3BMZXZlbDsNCg0KICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfTsNCg0KICAgIC8qDQogICAgICogU2NyaXB0IDo6ICh0b2tlbml6ZXIsIGJvb2xlYW4sIGJvb2xlYW4pIC0+IG5vZGUNCiAgICAgKg0KICAgICAqIFBhcnNlcyB0aGUgdG9wbGV2ZWwgYW5kIG1vZHVsZS9mdW5jdGlvbiBib2RpZXMuDQogICAgICovDQogICAgZnVuY3Rpb24gU2NyaXB0KHQsIGluTW9kdWxlLCBpbkZ1bmN0aW9uKSB7DQogICAgICAgIHZhciBuID0gbmV3IE5vZGUodCwgc2NyaXB0SW5pdCgpKTsNCiAgICAgICAgU3RhdGVtZW50cyh0LCBuZXcgU3RhdGljQ29udGV4dChuLCBuLCBpbk1vZHVsZSwgaW5GdW5jdGlvbiksIG4pOw0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICAvLyBXZSBleHRlbmQgQXJyYXkgc2xpZ2h0bHkgd2l0aCBhIHRvcC1vZi1zdGFjayBtZXRob2QuDQogICAgZGVmaW5pdGlvbnMuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAidG9wIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoICYmIHRoaXNbdGhpcy5sZW5ndGgtMV07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsNCg0KICAgIC8qDQogICAgICogTm9kZSA6OiAodG9rZW5pemVyLCBvcHRpb25hbCBpbml0IG9iamVjdCkgLT4gbm9kZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIE5vZGUodCwgaW5pdCkgew0KICAgICAgICB2YXIgdG9rZW4gPSB0LnRva2VuOw0KICAgICAgICBpZiAodG9rZW4pIHsNCiAgICAgICAgICAgIC8vIElmIGluaXQudHlwZSBleGlzdHMgaXQgd2lsbCBvdmVycmlkZSB0b2tlbi50eXBlLg0KICAgICAgICAgICAgdGhpcy50eXBlID0gdG9rZW4udHlwZTsNCiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0b2tlbi52YWx1ZTsNCiAgICAgICAgICAgIHRoaXMubGluZW5vID0gdG9rZW4ubGluZW5vOw0KDQogICAgICAgICAgICAvLyBTdGFydCBhbmQgZW5kIGFyZSBmaWxlIHBvc2l0aW9ucyBmb3IgZXJyb3IgaGFuZGxpbmcuDQogICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdG9rZW4uc3RhcnQ7DQogICAgICAgICAgICB0aGlzLmVuZCA9IHRva2VuLmVuZDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMubGluZW5vID0gdC5saW5lbm87DQogICAgICAgIH0NCg0KICAgICAgICAvLyBOb2RlIHVzZXMgYSB0b2tlbml6ZXIgZm9yIGRlYnVnZ2luZyAoZ2V0U291cmNlLCBmaWxlbmFtZSBnZXR0ZXIpLg0KICAgICAgICB0aGlzLnRva2VuaXplciA9IHQ7DQogICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsNCg0KICAgICAgICBmb3IgKHZhciBwcm9wIGluIGluaXQpDQogICAgICAgICAgICB0aGlzW3Byb3BdID0gaW5pdFtwcm9wXTsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIFN5bnRoZXRpY05vZGUgOjogKHRva2VuaXplciwgb3B0aW9uYWwgaW5pdCBvYmplY3QpIC0+IG5vZGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBTeW50aGV0aWNOb2RlKHQsIGluaXQpIHsNCiAgICAgICAgLy8gcHJpbnQoIlNZTlRIRVRJQyBOT0RFIik7DQogICAgICAgIC8vIGlmIChpbml0LnR5cGUgPT09IENPTU1BKSB7DQogICAgICAgIC8vICAgICBwcmludCgiU1lOVEhFVElDIENPTU1BIik7DQogICAgICAgIC8vICAgICBwcmludChpbml0KTsNCiAgICAgICAgLy8gfQ0KICAgICAgICB0aGlzLnRva2VuaXplciA9IHQ7DQogICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsNCiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBpbml0KQ0KICAgICAgICAgICAgdGhpc1twcm9wXSA9IGluaXRbcHJvcF07DQogICAgICAgIHRoaXMuc3ludGhldGljID0gdHJ1ZTsNCiAgICB9DQoNCiAgICB2YXIgTnAgPSBOb2RlLnByb3RvdHlwZSA9IFN5bnRoZXRpY05vZGUucHJvdG90eXBlID0ge307DQogICAgTnAuY29uc3RydWN0b3IgPSBOb2RlOw0KDQogICAgY29uc3QgVE9fU09VUkNFX1NLSVAgPSB7DQogICAgICAgIHR5cGU6IHRydWUsDQogICAgICAgIHZhbHVlOiB0cnVlLA0KICAgICAgICBsaW5lbm86IHRydWUsDQogICAgICAgIHN0YXJ0OiB0cnVlLA0KICAgICAgICBlbmQ6IHRydWUsDQogICAgICAgIHRva2VuaXplcjogdHJ1ZSwNCiAgICAgICAgYXNzaWduT3A6IHRydWUNCiAgICB9Ow0KICAgIGZ1bmN0aW9uIHVuZXZhbGFibGVDb25zdChjb2RlKSB7DQogICAgICAgIHZhciB0b2tlbiA9IGRlZmluaXRpb25zLnRva2Vuc1tjb2RlXTsNCiAgICAgICAgdmFyIGNvbnN0TmFtZSA9IGRlZmluaXRpb25zLm9wVHlwZU5hbWVzLmhhc093blByb3BlcnR5KHRva2VuKQ0KICAgICAgICAgICAgICAgICAgICAgID8gZGVmaW5pdGlvbnMub3BUeXBlTmFtZXNbdG9rZW5dDQogICAgICAgICAgICAgICAgICAgICAgOiB0b2tlbiBpbiBkZWZpbml0aW9ucy5rZXl3b3Jkcw0KICAgICAgICAgICAgICAgICAgICAgID8gdG9rZW4udG9VcHBlckNhc2UoKQ0KICAgICAgICAgICAgICAgICAgICAgIDogdG9rZW47DQogICAgICAgIHJldHVybiB7IHRvU291cmNlOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnN0TmFtZSB9IH07DQogICAgfQ0KICAgIE5wLnRvU291cmNlID0gZnVuY3Rpb24gdG9Tb3VyY2UoKSB7DQogICAgICAgIHZhciBtb2NrID0ge307DQogICAgICAgIHZhciBzZWxmID0gdGhpczsNCiAgICAgICAgbW9jay50eXBlID0gdW5ldmFsYWJsZUNvbnN0KHRoaXMudHlwZSk7DQogICAgICAgIGlmICgidmFsdWUiIGluIHRoaXMpDQogICAgICAgICAgICBtb2NrLnZhbHVlID0gdGhpcy52YWx1ZTsNCiAgICAgICAgaWYgKCJsaW5lbm8iIGluIHRoaXMpDQogICAgICAgICAgICBtb2NrLmxpbmVubyA9IHRoaXMubGluZW5vOw0KICAgICAgICBpZiAoInN0YXJ0IiBpbiB0aGlzKQ0KICAgICAgICAgICAgbW9jay5zdGFydCA9IHRoaXMuc3RhcnQ7DQogICAgICAgIGlmICgiZW5kIiBpbiB0aGlzKQ0KICAgICAgICAgICAgbW9jay5lbmQgPSB0aGlzLmVuZDsNCiAgICAgICAgaWYgKHRoaXMuYXNzaWduT3ApDQogICAgICAgICAgICBtb2NrLmFzc2lnbk9wID0gdW5ldmFsYWJsZUNvbnN0KHRoaXMuYXNzaWduT3ApOw0KICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcykgew0KICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhKGtleSBpbiBUT19TT1VSQ0VfU0tJUCkpDQogICAgICAgICAgICAgICAgbW9ja1trZXldID0gdGhpc1trZXldOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBtb2NrLnRvU291cmNlKCk7DQogICAgfTsNCg0KICAgIC8vIEFsd2F5cyB1c2UgcHVzaCB0byBhZGQgb3BlcmFuZHMgdG8gYW4gZXhwcmVzc2lvbiwgdG8gdXBkYXRlIHN0YXJ0IGFuZCBlbmQuDQogICAgTnAucHVzaCA9IGZ1bmN0aW9uIChraWQpIHsNCiAgICAgICAgLy8ga2lkIGNhbiBiZSBudWxsIGUuZy4gWzEsICwgMl0uDQogICAgICAgIGlmIChraWQgIT09IG51bGwpIHsNCiAgICAgICAgICAgIGlmIChraWQuc3RhcnQgPCB0aGlzLnN0YXJ0KQ0KICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBraWQuc3RhcnQ7DQogICAgICAgICAgICBpZiAodGhpcy5lbmQgPCBraWQuZW5kKQ0KICAgICAgICAgICAgICAgIHRoaXMuZW5kID0ga2lkLmVuZDsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5wdXNoKGtpZCk7DQogICAgfQ0KDQogICAgTm9kZS5pbmRlbnRMZXZlbCA9IDA7DQoNCiAgICBmdW5jdGlvbiB0b2tlblN0cmluZyh0dCkgew0KICAgICAgICB2YXIgdCA9IGRlZmluaXRpb25zLnRva2Vuc1t0dF07DQogICAgICAgIHJldHVybiAvXlxXLy50ZXN0KHQpID8gZGVmaW5pdGlvbnMub3BUeXBlTmFtZXNbdF0gOiB0LnRvVXBwZXJDYXNlKCk7DQogICAgfQ0KDQogICAgTnAudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBhID0gW107DQogICAgICAgIGZvciAodmFyIGkgaW4gdGhpcykgew0KICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoaSkgJiYgaSAhPT0gJ3R5cGUnICYmIGkgIT09ICd0YXJnZXQnKQ0KICAgICAgICAgICAgICAgIGEucHVzaCh7aWQ6IGksIHZhbHVlOiB0aGlzW2ldfSk7DQogICAgICAgIH0NCiAgICAgICAgYS5zb3J0KGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIChhLmlkIDwgYi5pZCkgPyAtMSA6IDE7IH0pOw0KICAgICAgICBjb25zdCBJTkRFTlRBVElPTiA9ICIgICAgIjsNCiAgICAgICAgdmFyIG4gPSArK05vZGUuaW5kZW50TGV2ZWw7DQogICAgICAgIHZhciBzID0gIntcbiIgKyBJTkRFTlRBVElPTi5yZXBlYXQobikgKyAidHlwZTogIiArIHRva2VuU3RyaW5nKHRoaXMudHlwZSk7DQogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQ0KICAgICAgICAgICAgcyArPSAiLFxuIiArIElOREVOVEFUSU9OLnJlcGVhdChuKSArIGFbaV0uaWQgKyAiOiAiICsgYVtpXS52YWx1ZTsNCiAgICAgICAgbiA9IC0tTm9kZS5pbmRlbnRMZXZlbDsNCiAgICAgICAgcyArPSAiXG4iICsgSU5ERU5UQVRJT04ucmVwZWF0KG4pICsgIn0iOw0KICAgICAgICByZXR1cm4gczsNCiAgICB9DQoNCiAgICBOcC5nZXRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHJldHVybiB0aGlzLnRva2VuaXplci5zb3VyY2Uuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5lbmQpOw0KICAgIH07DQoNCiAgICAvKg0KICAgICAqIEhlbHBlciBpbml0IG9iamVjdHMgZm9yIGNvbW1vbiBub2Rlcy4NCiAgICAgKi8NCg0KICAgIGNvbnN0IExPT1BfSU5JVCA9IHsgaXNMb29wOiB0cnVlIH07DQoNCiAgICBmdW5jdGlvbiBibG9ja0luaXQoKSB7DQogICAgICAgIHJldHVybiB7IHR5cGU6IEJMT0NLLCB2YXJEZWNsczogW10gfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzY3JpcHRJbml0KCkgew0KICAgICAgICByZXR1cm4geyB0eXBlOiBTQ1JJUFQsDQogICAgICAgICAgICAgICAgIGZ1bkRlY2xzOiBbXSwNCiAgICAgICAgICAgICAgICAgdmFyRGVjbHM6IFtdLA0KICAgICAgICAgICAgICAgICBtb2REZWZuczogbmV3IFN0cmluZ01hcCgpLA0KICAgICAgICAgICAgICAgICBtb2RBc3NuczogbmV3IFN0cmluZ01hcCgpLA0KICAgICAgICAgICAgICAgICBtb2REZWNsczogbmV3IFN0cmluZ01hcCgpLA0KICAgICAgICAgICAgICAgICBtb2RMb2FkczogbmV3IFN0cmluZ01hcCgpLA0KICAgICAgICAgICAgICAgICBpbXBEZWNsczogW10sDQogICAgICAgICAgICAgICAgIGV4cERlY2xzOiBbXSwNCiAgICAgICAgICAgICAgICAgZXhwb3J0czogbmV3IFN0cmluZ01hcCgpLA0KICAgICAgICAgICAgICAgICBoYXNFbXB0eVJldHVybjogZmFsc2UsDQogICAgICAgICAgICAgICAgIGhhc1JldHVybldpdGhWYWx1ZTogZmFsc2UsDQogICAgICAgICAgICAgICAgIGlzR2VuZXJhdG9yOiBmYWxzZSB9Ow0KICAgIH0NCg0KICAgIGRlZmluaXRpb25zLmRlZmluZUdldHRlcihOcCwgImZpbGVuYW1lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbml6ZXIuZmlsZW5hbWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgZGVmaW5pdGlvbnMuZGVmaW5lR2V0dGVyKE5wLCAibGVuZ3RoIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vZGUucHJvdG90eXBlLmxlbmd0aCBpcyBnb25lOyAiICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIG4uY2hpbGRyZW4ubGVuZ3RoIGluc3RlYWQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICBkZWZpbml0aW9ucy5kZWZpbmVQcm9wZXJ0eShTdHJpbmcucHJvdG90eXBlLCAicmVwZWF0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gIiIsIHQgPSB0aGlzICsgczsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tbiA+PSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArPSB0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmYWxzZSwgZmFsc2UsIHRydWUpOw0KDQogICAgZnVuY3Rpb24gTWF5YmVMZWZ0UGFyZW4odCwgeCkgew0KICAgICAgICBpZiAoeC5wYXJlbkZyZWVNb2RlKQ0KICAgICAgICAgICAgcmV0dXJuIHQubWF0Y2goTEVGVF9QQVJFTikgPyBMRUZUX1BBUkVOIDogRU5EOw0KICAgICAgICByZXR1cm4gdC5tdXN0TWF0Y2goTEVGVF9QQVJFTikudHlwZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBNYXliZVJpZ2h0UGFyZW4odCwgcCkgew0KICAgICAgICBpZiAocCA9PT0gTEVGVF9QQVJFTikNCiAgICAgICAgICAgIHQubXVzdE1hdGNoKFJJR0hUX1BBUkVOKTsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIFN0YXRlbWVudHMgOjogKHRva2VuaXplciwgY29tcGlsZXIgY29udGV4dCwgbm9kZSkgLT4gdm9pZA0KICAgICAqDQogICAgICogUGFyc2VzIGEgc2VxdWVuY2Ugb2YgU3RhdGVtZW50cy4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBTdGF0ZW1lbnRzKHQsIHgsIG4pIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIHdoaWxlICghdC5kb25lICYmIHQucGVlayh0cnVlKSAhPT0gUklHSFRfQ1VSTFkpDQogICAgICAgICAgICAgICAgbi5wdXNoKFN0YXRlbWVudCh0LCB4KSk7DQogICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgIGlmICh0LmRvbmUpDQogICAgICAgICAgICAgICAgdC51bmV4cGVjdGVkRU9GID0gdHJ1ZTsNCiAgICAgICAgICAgIHRocm93IGU7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBCbG9jayh0LCB4KSB7DQogICAgICAgIHQubXVzdE1hdGNoKExFRlRfQ1VSTFkpOw0KICAgICAgICB2YXIgbiA9IG5ldyBOb2RlKHQsIGJsb2NrSW5pdCgpKTsNCiAgICAgICAgU3RhdGVtZW50cyh0LCB4LnVwZGF0ZSh7IHBhcmVudEJsb2NrOiBuIH0pLnB1c2hUYXJnZXQobiksIG4pOw0KICAgICAgICB0Lm11c3RNYXRjaChSSUdIVF9DVVJMWSk7DQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIGNvbnN0IERFQ0xBUkVEX0ZPUk0gPSAwLCBFWFBSRVNTRURfRk9STSA9IDEsIFNUQVRFTUVOVF9GT1JNID0gMjsNCg0KICAgIC8qDQogICAgICogRXhwb3J0IDo6IChiaW5kaW5nIG5vZGUsIGJvb2xlYW4pIC0+IEV4cG9ydA0KICAgICAqDQogICAgICogU3RhdGljIHNlbWFudGljIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9kdWxlIGV4cG9ydC4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBFeHBvcnQobm9kZSwgaXNEZWZpbml0aW9uKSB7DQogICAgICAgIHRoaXMubm9kZSA9IG5vZGU7ICAgICAgICAgICAgICAgICAvLyB0aGUgQVNUIG5vZGUgZGVjbGFyaW5nIHRoaXMgaW5kaXZpZHVhbCBleHBvcnQNCiAgICAgICAgdGhpcy5pc0RlZmluaXRpb24gPSBpc0RlZmluaXRpb247IC8vIGlzIHRoZSBub2RlIGFuICdleHBvcnQnLWFubm90YXRlZCBkZWZpbml0aW9uPw0KICAgICAgICB0aGlzLnJlc29sdmVkID0gbnVsbDsgICAgICAgICAgICAgLy8gcmVzb2x2ZWQgcG9pbnRlciB0byB0aGUgdGFyZ2V0IG9mIHRoaXMgZXhwb3J0DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiByZWdpc3RlckV4cG9ydCA6OiAoU3RyaW5nTWFwLCBFWFBPUlQgbm9kZSkgLT4gdm9pZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHJlZ2lzdGVyRXhwb3J0KGV4cG9ydHMsIGRlY2wpIHsNCiAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXIobmFtZSwgZXhwKSB7DQogICAgICAgICAgICBpZiAoZXhwb3J0cy5oYXMobmFtZSkpDQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCJtdWx0aXBsZSBleHBvcnRzIG9mICIgKyBuYW1lKTsNCiAgICAgICAgICAgIGV4cG9ydHMuc2V0KG5hbWUsIGV4cCk7DQogICAgICAgIH0NCg0KICAgICAgICBzd2l0Y2ggKGRlY2wudHlwZSkgew0KICAgICAgICAgIGNhc2UgTU9EVUxFOg0KICAgICAgICAgIGNhc2UgRlVOQ1RJT046DQogICAgICAgICAgICByZWdpc3RlcihkZWNsLm5hbWUsIG5ldyBFeHBvcnQoZGVjbCwgdHJ1ZSkpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBjYXNlIFZBUjoNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjbC5jaGlsZHJlbi5sZW5ndGg7IGkrKykNCiAgICAgICAgICAgICAgICByZWdpc3RlcihkZWNsLmNoaWxkcmVuW2ldLm5hbWUsIG5ldyBFeHBvcnQoZGVjbC5jaGlsZHJlbltpXSwgdHJ1ZSkpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBjYXNlIExFVDoNCiAgICAgICAgICBjYXNlIENPTlNUOg0KICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOWUk6ICIgKyBkZWZpbml0aW9ucy50b2tlbnNbZGVjbC50eXBlXSk7DQoNCiAgICAgICAgICBjYXNlIEVYUE9SVDoNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjbC5wYXRoTGlzdC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBwYXRoID0gZGVjbC5wYXRoTGlzdFtpXTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhdGgudHlwZSkgew0KICAgICAgICAgICAgICAgICAgY2FzZSBPQkpFQ1RfSU5JVDoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXRoLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0IDo6IElERU5USUZJRVIgfCBQUk9QRVJUWV9JTklUDQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IHBhdGguY2hpbGRyZW5bal07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdC50eXBlID09PSBJREVOVElGSUVSKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyKGluaXQudmFsdWUsIG5ldyBFeHBvcnQoaW5pdCwgZmFsc2UpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcihpbml0LmNoaWxkcmVuWzBdLnZhbHVlLCBuZXcgRXhwb3J0KGluaXQuY2hpbGRyZW5bMV0sIGZhbHNlKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgIGNhc2UgRE9UOg0KICAgICAgICAgICAgICAgICAgICByZWdpc3RlcihwYXRoLmNoaWxkcmVuWzFdLnZhbHVlLCBuZXcgRXhwb3J0KHBhdGgsIGZhbHNlKSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICBjYXNlIElERU5USUZJRVI6DQogICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyKHBhdGgudmFsdWUsIG5ldyBFeHBvcnQocGF0aCwgZmFsc2UpKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBleHBvcnQgcGF0aDogIiArIGRlZmluaXRpb25zLnRva2Vuc1twYXRoLnR5cGVdKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgZXhwb3J0IGRlY2w6ICIgKyBkZWZpbml0aW9ucy50b2tlbnNbZXhwLnR5cGVdKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qDQogICAgICogTW9kdWxlIDo6IChub2RlKSAtPiBNb2R1bGUNCiAgICAgKg0KICAgICAqIFN0YXRpYyBzZW1hbnRpYyByZXByZXNlbnRhdGlvbiBvZiBhIG1vZHVsZS4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBNb2R1bGUobm9kZSkgew0KICAgICAgICB2YXIgZXhwb3J0cyA9IG5vZGUuYm9keS5leHBvcnRzOw0KICAgICAgICB2YXIgbW9kRGVmbnMgPSBub2RlLmJvZHkubW9kRGVmbnM7DQoNCiAgICAgICAgdmFyIGV4cG9ydGVkTW9kdWxlcyA9IG5ldyBTdHJpbmdNYXAoKTsNCg0KICAgICAgICBleHBvcnRzLmZvckVhY2goZnVuY3Rpb24obmFtZSwgZXhwKSB7DQogICAgICAgICAgICB2YXIgbm9kZSA9IGV4cC5ub2RlOw0KICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gTU9EVUxFKSB7DQogICAgICAgICAgICAgICAgZXhwb3J0ZWRNb2R1bGVzLnNldChuYW1lLCBub2RlKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV4cC5pc0RlZmluaXRpb24gJiYgbm9kZS50eXBlID09PSBJREVOVElGSUVSICYmIG1vZERlZm5zLmhhcyhub2RlLnZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHZhciBtb2QgPSBtb2REZWZucy5nZXQobm9kZS52YWx1ZSk7DQogICAgICAgICAgICAgICAgZXhwb3J0ZWRNb2R1bGVzLnNldChuYW1lLCBtb2QpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICB0aGlzLm5vZGUgPSBub2RlOw0KICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOw0KICAgICAgICB0aGlzLmV4cG9ydGVkTW9kdWxlcyA9IGV4cG9ydGVkTW9kdWxlczsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIFN0YXRlbWVudCA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KSAtPiBub2RlDQogICAgICoNCiAgICAgKiBQYXJzZXMgYSBTdGF0ZW1lbnQuDQogICAgICovDQogICAgZnVuY3Rpb24gU3RhdGVtZW50KHQsIHgpIHsNCiAgICAgICAgdmFyIGksIGxhYmVsLCBuLCBuMiwgcCwgYywgc3MsIHR0ID0gdC5nZXQodHJ1ZSksIHR0MiwgeDIsIHgzOw0KDQogICAgICAgIHZhciBjb21tZW50cyA9IHQuYmxvY2tDb21tZW50czsNCg0KICAgICAgICBpZiAoeC5ibGFja0xpc3RbdHRdKQ0KICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcihkZWZpbml0aW9ucy50b2tlbnNbdHRdICsgIiBzdGF0ZW1lbnRzIG9ubHkgYWxsb3dlZCBpbiBIYXJtb255Iik7DQogICAgICAgIGlmICgheC5hbGxvdyh0dCkpDQogICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKGRlZmluaXRpb25zLnRva2Vuc1t0dF0gKyAiIHN0YXRlbWVudCBpbiBpbGxlZ2FsIGNvbnRleHQiKTsNCg0KICAgICAgICAvLyBDYXNlcyBmb3Igc3RhdGVtZW50cyBlbmRpbmcgaW4gYSByaWdodCBjdXJseSByZXR1cm4gZWFybHksIGF2b2lkaW5nIHRoZQ0KICAgICAgICAvLyBjb21tb24gc2VtaWNvbG9uIGluc2VydGlvbiBtYWdpYyBhZnRlciB0aGlzIHN3aXRjaC4NCiAgICAgICAgc3dpdGNoICh0dCkgew0KICAgICAgICAgIGNhc2UgSU1QT1JUOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgbi5wYXRoTGlzdCA9IEltcG9ydFBhdGhMaXN0KHQsIHgpOw0KICAgICAgICAgICAgeC5wYXJlbnRTY3JpcHQuaW1wRGVjbHMucHVzaChuKTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgY2FzZSBFWFBPUlQ6DQogICAgICAgICAgICBzd2l0Y2ggKHQucGVlaygpKSB7DQogICAgICAgICAgICAgIGNhc2UgTU9EVUxFOg0KICAgICAgICAgICAgICBjYXNlIEZVTkNUSU9OOg0KICAgICAgICAgICAgICBjYXNlIExFVDoNCiAgICAgICAgICAgICAgY2FzZSBWQVI6DQogICAgICAgICAgICAgIGNhc2UgQ09OU1Q6DQogICAgICAgICAgICAgICAgbiA9IFN0YXRlbWVudCh0LCB4KTsNCiAgICAgICAgICAgICAgICBuLmJsb2NrQ29tbWVudHMgPSBjb21tZW50czsNCiAgICAgICAgICAgICAgICBuLmV4cG9ydGVkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICB4LnBhcmVudFNjcmlwdC5leHBEZWNscy5wdXNoKG4pOw0KICAgICAgICAgICAgICAgIHJlZ2lzdGVyRXhwb3J0KHgucGFyZW50U2NyaXB0LmV4cG9ydHMsIG4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBuOw0KDQogICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgICAgIG4ucGF0aExpc3QgPSBFeHBvcnRQYXRoTGlzdCh0LCB4KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHgucGFyZW50U2NyaXB0LmV4cERlY2xzLnB1c2gobik7DQogICAgICAgICAgICByZWdpc3RlckV4cG9ydCh4LnBhcmVudFNjcmlwdC5leHBvcnRzLCBuKTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgY2FzZSBNT0RVTEU6DQogICAgICAgICAgICBuID0gbmV3IE5vZGUodCk7DQogICAgICAgICAgICBuLmJsb2NrQ29tbWVudHMgPSBjb21tZW50czsNCiAgICAgICAgICAgIHQubXVzdE1hdGNoKElERU5USUZJRVIpOw0KICAgICAgICAgICAgbGFiZWwgPSB0LnRva2VuLnZhbHVlOw0KDQogICAgICAgICAgICBpZiAodC5tYXRjaChMRUZUX0NVUkxZKSkgew0KICAgICAgICAgICAgICAgIG4ubmFtZSA9IGxhYmVsOw0KICAgICAgICAgICAgICAgIG4uYm9keSA9IFNjcmlwdCh0LCB0cnVlLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgbi5tb2R1bGUgPSBuZXcgTW9kdWxlKG4pOw0KICAgICAgICAgICAgICAgIHQubXVzdE1hdGNoKFJJR0hUX0NVUkxZKTsNCiAgICAgICAgICAgICAgICB4LnBhcmVudFNjcmlwdC5tb2REZWZucy5zZXQobi5uYW1lLCBuKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gbjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdC51bmdldCgpOw0KICAgICAgICAgICAgTW9kdWxlVmFyaWFibGVzKHQsIHgsIG4pOw0KICAgICAgICAgICAgcmV0dXJuIG47DQoNCiAgICAgICAgICBjYXNlIEZVTkNUSU9OOg0KICAgICAgICAgICAgLy8gREVDTEFSRURfRk9STSBleHRlbmRzIGZ1bkRlY2xzIG9mIHgsIFNUQVRFTUVOVF9GT1JNIGRvZXNuJ3QuDQogICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25EZWZpbml0aW9uKHQsIHgsIHRydWUsIHgudG9wTGV2ZWwgPyBERUNMQVJFRF9GT1JNIDogU1RBVEVNRU5UX0ZPUk0sIGNvbW1lbnRzKTsNCg0KICAgICAgICAgIGNhc2UgTEVGVF9DVVJMWToNCiAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0LCBibG9ja0luaXQoKSk7DQogICAgICAgICAgICBTdGF0ZW1lbnRzKHQsIHgudXBkYXRlKHsgcGFyZW50QmxvY2s6IG4gfSkucHVzaFRhcmdldChuKS5uZXN0KCksIG4pOw0KICAgICAgICAgICAgdC5tdXN0TWF0Y2goUklHSFRfQ1VSTFkpOw0KICAgICAgICAgICAgcmV0dXJuIG47DQoNCiAgICAgICAgICBjYXNlIElGOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgbi5jb25kaXRpb24gPSBIZWFkRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgICAgIHgyID0geC5wdXNoVGFyZ2V0KG4pLm5lc3QoKTsNCiAgICAgICAgICAgIG4udGhlblBhcnQgPSBTdGF0ZW1lbnQodCwgeDIpOw0KICAgICAgICAgICAgbi5lbHNlUGFydCA9IHQubWF0Y2goRUxTRSwgdHJ1ZSkgPyBTdGF0ZW1lbnQodCwgeDIpIDogbnVsbDsNCiAgICAgICAgICAgIHJldHVybiBuOw0KDQogICAgICAgICAgY2FzZSBTV0lUQ0g6DQogICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBDQVNFcyBhZnRlciBhIERFRkFVTFQsIHdoaWNoIGlzIGluIHRoZSBzdGFuZGFyZC4NCiAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IGNhc2VzOiBbXSwgZGVmYXVsdEluZGV4OiAtMSB9KTsNCiAgICAgICAgICAgIG4uZGlzY3JpbWluYW50ID0gSGVhZEV4cHJlc3Npb24odCwgeCk7DQogICAgICAgICAgICB4MiA9IHgucHVzaFRhcmdldChuKS5uZXN0KCk7DQogICAgICAgICAgICB0Lm11c3RNYXRjaChMRUZUX0NVUkxZKTsNCiAgICAgICAgICAgIHdoaWxlICgodHQgPSB0LmdldCgpKSAhPT0gUklHSFRfQ1VSTFkpIHsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR0KSB7DQogICAgICAgICAgICAgICAgICBjYXNlIERFRkFVTFQ6DQogICAgICAgICAgICAgICAgICAgIGlmIChuLmRlZmF1bHRJbmRleCA+PSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiTW9yZSB0aGFuIG9uZSBzd2l0Y2ggZGVmYXVsdCIpOw0KICAgICAgICAgICAgICAgICAgICAvLyBGQUxMIFRIUk9VR0gNCiAgICAgICAgICAgICAgICAgIGNhc2UgQ0FTRToNCiAgICAgICAgICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR0ID09PSBERUZBVUxUKQ0KICAgICAgICAgICAgICAgICAgICAgICAgbi5kZWZhdWx0SW5kZXggPSBuLmNhc2VzLmxlbmd0aDsNCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgbjIuY2FzZUxhYmVsID0gRXhwcmVzc2lvbih0LCB4MiwgQ09MT04pOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiSW52YWxpZCBzd2l0Y2ggY2FzZSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0Lm11c3RNYXRjaChDT0xPTik7DQogICAgICAgICAgICAgICAgbjIuc3RhdGVtZW50cyA9IG5ldyBOb2RlKHQsIGJsb2NrSW5pdCgpKTsNCiAgICAgICAgICAgICAgICB3aGlsZSAoKHR0PXQucGVlayh0cnVlKSkgIT09IENBU0UgJiYgdHQgIT09IERFRkFVTFQgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgIHR0ICE9PSBSSUdIVF9DVVJMWSkNCiAgICAgICAgICAgICAgICAgICAgbjIuc3RhdGVtZW50cy5wdXNoKFN0YXRlbWVudCh0LCB4MikpOw0KICAgICAgICAgICAgICAgIG4uY2FzZXMucHVzaChuMik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gbjsNCg0KICAgICAgICAgIGNhc2UgRk9SOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQsIExPT1BfSU5JVCk7DQogICAgICAgICAgICBuLmJsb2NrQ29tbWVudHMgPSBjb21tZW50czsNCiAgICAgICAgICAgIGlmICh0Lm1hdGNoKElERU5USUZJRVIpKSB7DQogICAgICAgICAgICAgICAgaWYgKHQudG9rZW4udmFsdWUgPT09ICJlYWNoIikNCiAgICAgICAgICAgICAgICAgICAgbi5pc0VhY2ggPSB0cnVlOw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgdC51bmdldCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCF4LnBhcmVuRnJlZU1vZGUpDQogICAgICAgICAgICAgICAgdC5tdXN0TWF0Y2goTEVGVF9QQVJFTik7DQogICAgICAgICAgICB4MiA9IHgucHVzaFRhcmdldChuKS5uZXN0KCk7DQogICAgICAgICAgICB4MyA9IHgudXBkYXRlKHsgaW5Gb3JMb29wSW5pdDogdHJ1ZSB9KTsNCiAgICAgICAgICAgIG4yID0gbnVsbDsNCiAgICAgICAgICAgIGlmICgodHQgPSB0LnBlZWsodHJ1ZSkpICE9PSBTRU1JQ09MT04pIHsNCiAgICAgICAgICAgICAgICBpZiAodHQgPT09IFZBUiB8fCB0dCA9PT0gQ09OU1QpIHsNCiAgICAgICAgICAgICAgICAgICAgdC5nZXQoKTsNCiAgICAgICAgICAgICAgICAgICAgbjIgPSBWYXJpYWJsZXModCwgeDMpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHQgPT09IExFVCkgew0KICAgICAgICAgICAgICAgICAgICB0LmdldCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodC5wZWVrKCkgPT09IExFRlRfUEFSRU4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG4yID0gTGV0QmxvY2sodCwgeDMsIGZhbHNlKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCBpbiBmb3IgaGVhZCwgd2UgbmVlZCB0byBhZGQgYW4gaW1wbGljaXQgYmxvY2sNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyb3VuZCB0aGUgcmVzdCBvZiB0aGUgZm9yLg0KICAgICAgICAgICAgICAgICAgICAgICAgeDMucGFyZW50QmxvY2sgPSBuOw0KICAgICAgICAgICAgICAgICAgICAgICAgbi52YXJEZWNscyA9IFtdOw0KICAgICAgICAgICAgICAgICAgICAgICAgbjIgPSBWYXJpYWJsZXModCwgeDMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgbjIgPSBFeHByZXNzaW9uKHQsIHgzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobjIgJiYgdC5tYXRjaChJTikpIHsNCiAgICAgICAgICAgICAgICBuLnR5cGUgPSBGT1JfSU47DQogICAgICAgICAgICAgICAgbi5vYmplY3QgPSBFeHByZXNzaW9uKHQsIHgzKTsNCiAgICAgICAgICAgICAgICBpZiAobjIudHlwZSA9PT0gVkFSIHx8IG4yLnR5cGUgPT09IExFVCkgew0KICAgICAgICAgICAgICAgICAgICBjID0gbjIuY2hpbGRyZW47DQoNCiAgICAgICAgICAgICAgICAgICAgLy8gRGVzdHJ1Y3R1cmluZyB0dXJucyBvbmUgZGVjbCBpbnRvIG11bHRpcGxlcywgc28gZWl0aGVyDQogICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIG11c3QgYmUgb25seSBvbmUgZGVzdHJ1Y3R1cmluZyBvciBvbmx5IG9uZQ0KICAgICAgICAgICAgICAgICAgICAvLyBkZWNsLg0KICAgICAgICAgICAgICAgICAgICBpZiAoYy5sZW5ndGggIT09IDEgJiYgbjIuZGVzdHJ1Y3R1cmluZ3MubGVuZ3RoICE9PSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkludmFsaWQgZm9yLi5pbiBsZWZ0LWhhbmQgc2lkZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5maWxlbmFtZSwgbjIubGluZW5vKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAobjIuZGVzdHJ1Y3R1cmluZ3MubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbi5pdGVyYXRvciA9IG4yLmRlc3RydWN0dXJpbmdzWzBdOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgbi5pdGVyYXRvciA9IGNbMF07DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgbi52YXJEZWNsID0gbjI7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG4yLnR5cGUgPT09IEFSUkFZX0lOSVQgfHwgbjIudHlwZSA9PT0gT0JKRUNUX0lOSVQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG4yLmRlc3RydWN0dXJlZE5hbWVzID0gY2hlY2tEZXN0cnVjdHVyaW5nKHQsIHgzLCBuMik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgbi5pdGVyYXRvciA9IG4yOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgeDMuaW5Gb3JMb29wSW5pdCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIG4uc2V0dXAgPSBuMjsNCiAgICAgICAgICAgICAgICB0Lm11c3RNYXRjaChTRU1JQ09MT04pOw0KICAgICAgICAgICAgICAgIGlmIChuLmlzRWFjaCkNCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiSW52YWxpZCBmb3IgZWFjaC4uaW4gbG9vcCIpOw0KICAgICAgICAgICAgICAgIG4uY29uZGl0aW9uID0gKHQucGVlayh0cnVlKSA9PT0gU0VNSUNPTE9OKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEV4cHJlc3Npb24odCwgeDMpOw0KICAgICAgICAgICAgICAgIHQubXVzdE1hdGNoKFNFTUlDT0xPTik7DQogICAgICAgICAgICAgICAgdHQyID0gdC5wZWVrKHRydWUpOw0KICAgICAgICAgICAgICAgIG4udXBkYXRlID0gKHgucGFyZW5GcmVlTW9kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHQyID09PSBMRUZUX0NVUkxZIHx8IGRlZmluaXRpb25zLmlzU3RhdGVtZW50U3RhcnRDb2RlW3R0Ml0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHR0MiA9PT0gUklHSFRfUEFSRU4pDQogICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRXhwcmVzc2lvbih0LCB4Myk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoIXgucGFyZW5GcmVlTW9kZSkNCiAgICAgICAgICAgICAgICB0Lm11c3RNYXRjaChSSUdIVF9QQVJFTik7DQogICAgICAgICAgICBuLmJvZHkgPSBTdGF0ZW1lbnQodCwgeDIpOw0KICAgICAgICAgICAgcmV0dXJuIG47DQoNCiAgICAgICAgICBjYXNlIFdISUxFOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQsIHsgaXNMb29wOiB0cnVlIH0pOw0KICAgICAgICAgICAgbi5ibG9ja0NvbW1lbnRzID0gY29tbWVudHM7DQogICAgICAgICAgICBuLmNvbmRpdGlvbiA9IEhlYWRFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICAgICAgbi5ib2R5ID0gU3RhdGVtZW50KHQsIHgucHVzaFRhcmdldChuKS5uZXN0KCkpOw0KICAgICAgICAgICAgcmV0dXJuIG47DQoNCiAgICAgICAgICBjYXNlIERPOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQsIHsgaXNMb29wOiB0cnVlIH0pOw0KICAgICAgICAgICAgbi5ibG9ja0NvbW1lbnRzID0gY29tbWVudHM7DQogICAgICAgICAgICBuLmJvZHkgPSBTdGF0ZW1lbnQodCwgeC5wdXNoVGFyZ2V0KG4pLm5lc3QoKSk7DQogICAgICAgICAgICB0Lm11c3RNYXRjaChXSElMRSk7DQogICAgICAgICAgICBuLmNvbmRpdGlvbiA9IEhlYWRFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICAgICAgaWYgKCF4LmVjbWFTdHJpY3RNb2RlKSB7DQogICAgICAgICAgICAgICAgLy8gPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+ICh3aXRob3V0IHZlcnNpb24gaGludHMpIG1heSBuZWVkDQogICAgICAgICAgICAgICAgLy8gYXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24gd2l0aG91dCBhIG5ld2xpbmUgYWZ0ZXIgZG8td2hpbGUuDQogICAgICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM4OTQ1Lg0KICAgICAgICAgICAgICAgIHQubWF0Y2goU0VNSUNPTE9OKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gbjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgY2FzZSBCUkVBSzoNCiAgICAgICAgICBjYXNlIENPTlRJTlVFOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgbi5ibG9ja0NvbW1lbnRzID0gY29tbWVudHM7DQoNCiAgICAgICAgICAgIC8vIGhhbmRsZSB0aGUgfGZvbzogYnJlYWsgZm9vO3wgY29ybmVyIGNhc2UNCiAgICAgICAgICAgIHgyID0geC5wdXNoVGFyZ2V0KG4pOw0KDQogICAgICAgICAgICBpZiAodC5wZWVrT25TYW1lTGluZSgpID09PSBJREVOVElGSUVSKSB7DQogICAgICAgICAgICAgICAgdC5nZXQoKTsNCiAgICAgICAgICAgICAgICBuLmxhYmVsID0gdC50b2tlbi52YWx1ZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKG4ubGFiZWwpIHsNCiAgICAgICAgICAgICAgICBuLnRhcmdldCA9IHgyLmxhYmVsZWRUYXJnZXRzLmZpbmQoZnVuY3Rpb24odGFyZ2V0KSB7IHJldHVybiB0YXJnZXQubGFiZWxzLmhhcyhuLmxhYmVsKSB9KTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAodHQgPT09IENPTlRJTlVFKSB7DQogICAgICAgICAgICAgICAgbi50YXJnZXQgPSB4Mi5kZWZhdWx0TG9vcFRhcmdldDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgbi50YXJnZXQgPSB4Mi5kZWZhdWx0VGFyZ2V0Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIW4udGFyZ2V0KQ0KICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIkludmFsaWQgIiArICgodHQgPT09IEJSRUFLKSA/ICJicmVhayIgOiAiY29udGludWUiKSk7DQogICAgICAgICAgICBpZiAoIW4udGFyZ2V0LmlzTG9vcCAmJiB0dCA9PT0gQ09OVElOVUUpDQogICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiSW52YWxpZCBjb250aW51ZSIpOw0KDQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgIGNhc2UgVFJZOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQsIHsgY2F0Y2hDbGF1c2VzOiBbXSB9KTsNCiAgICAgICAgICAgIG4uYmxvY2tDb21tZW50cyA9IGNvbW1lbnRzOw0KICAgICAgICAgICAgbi50cnlCbG9jayA9IEJsb2NrKHQsIHgpOw0KICAgICAgICAgICAgd2hpbGUgKHQubWF0Y2goQ0FUQ0gpKSB7DQogICAgICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgICAgICBwID0gTWF5YmVMZWZ0UGFyZW4odCwgeCk7DQogICAgICAgICAgICAgICAgc3dpdGNoICh0LmdldCgpKSB7DQogICAgICAgICAgICAgICAgICBjYXNlIExFRlRfQlJBQ0tFVDoNCiAgICAgICAgICAgICAgICAgIGNhc2UgTEVGVF9DVVJMWToNCiAgICAgICAgICAgICAgICAgICAgLy8gRGVzdHJ1Y3R1cmVkIGNhdGNoIGlkZW50aWZpZXJzLg0KICAgICAgICAgICAgICAgICAgICB0LnVuZ2V0KCk7DQogICAgICAgICAgICAgICAgICAgIG4yLnZhck5hbWUgPSBEZXN0cnVjdHVyaW5nRXhwcmVzc2lvbih0LCB4LCB0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICBjYXNlIElERU5USUZJRVI6DQogICAgICAgICAgICAgICAgICAgIG4yLnZhck5hbWUgPSB0LnRva2VuLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIm1pc3NpbmcgaWRlbnRpZmllciBpbiBjYXRjaCIpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHQubWF0Y2goSUYpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICh4LmVjbWEzT25seU1vZGUpDQogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJJbGxlZ2FsIGNhdGNoIGd1YXJkIik7DQogICAgICAgICAgICAgICAgICAgIGlmIChuLmNhdGNoQ2xhdXNlcy5sZW5ndGggJiYgIW4uY2F0Y2hDbGF1c2VzLnRvcCgpLmd1YXJkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiR3VhcmRlZCBjYXRjaCBhZnRlciB1bmd1YXJkZWQiKTsNCiAgICAgICAgICAgICAgICAgICAgbjIuZ3VhcmQgPSBFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBNYXliZVJpZ2h0UGFyZW4odCwgcCk7DQogICAgICAgICAgICAgICAgbjIuYmxvY2sgPSBCbG9jayh0LCB4KTsNCiAgICAgICAgICAgICAgICBuLmNhdGNoQ2xhdXNlcy5wdXNoKG4yKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0Lm1hdGNoKEZJTkFMTFkpKQ0KICAgICAgICAgICAgICAgIG4uZmluYWxseUJsb2NrID0gQmxvY2sodCwgeCk7DQogICAgICAgICAgICBpZiAoIW4uY2F0Y2hDbGF1c2VzLmxlbmd0aCAmJiAhbi5maW5hbGx5QmxvY2spDQogICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiSW52YWxpZCB0cnkgc3RhdGVtZW50Iik7DQogICAgICAgICAgICByZXR1cm4gbjsNCg0KICAgICAgICAgIGNhc2UgQ0FUQ0g6DQogICAgICAgICAgY2FzZSBGSU5BTExZOg0KICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcihkZWZpbml0aW9ucy50b2tlbnNbdHRdICsgIiB3aXRob3V0IHByZWNlZGluZyB0cnkiKTsNCg0KICAgICAgICAgIGNhc2UgVEhST1c6DQogICAgICAgICAgICBuID0gbmV3IE5vZGUodCk7DQogICAgICAgICAgICBuLmV4Y2VwdGlvbiA9IEV4cHJlc3Npb24odCwgeCk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgIGNhc2UgUkVUVVJOOg0KICAgICAgICAgICAgbiA9IFJldHVybk9yWWllbGQodCwgeCk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgIGNhc2UgV0lUSDoNCiAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgIG4uYmxvY2tDb21tZW50cyA9IGNvbW1lbnRzOw0KICAgICAgICAgICAgbi5vYmplY3QgPSBIZWFkRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgICAgIG4uYm9keSA9IFN0YXRlbWVudCh0LCB4LnB1c2hUYXJnZXQobikubmVzdCgpKTsNCiAgICAgICAgICAgIHJldHVybiBuOw0KDQogICAgICAgICAgY2FzZSBWQVI6DQogICAgICAgICAgY2FzZSBDT05TVDoNCiAgICAgICAgICAgIG4gPSBWYXJpYWJsZXModCwgeCk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgIGNhc2UgTEVUOg0KICAgICAgICAgICAgaWYgKHQucGVlaygpID09PSBMRUZUX1BBUkVOKQ0KICAgICAgICAgICAgICAgIG4gPSBMZXRCbG9jayh0LCB4LCB0cnVlKTsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBuID0gVmFyaWFibGVzKHQsIHgpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBjYXNlIERFQlVHR0VSOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBjYXNlIE5FV0xJTkU6DQogICAgICAgICAgY2FzZSBTRU1JQ09MT046DQogICAgICAgICAgICBuID0gbmV3IE5vZGUodCwgeyB0eXBlOiBTRU1JQ09MT04gfSk7DQogICAgICAgICAgICBuLmJsb2NrQ29tbWVudHMgPSBjb21tZW50czsNCiAgICAgICAgICAgIG4uZXhwcmVzc2lvbiA9IG51bGw7DQogICAgICAgICAgICByZXR1cm4gbjsNCg0KICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICBpZiAodHQgPT09IElERU5USUZJRVIpIHsNCiAgICAgICAgICAgICAgICB0dCA9IHQucGVlaygpOw0KICAgICAgICAgICAgICAgIC8vIExhYmVsZWQgc3RhdGVtZW50Lg0KICAgICAgICAgICAgICAgIGlmICh0dCA9PT0gQ09MT04pIHsNCiAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSB0LnRva2VuLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBpZiAoeC5hbGxMYWJlbHMuaGFzKGxhYmVsKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIkR1cGxpY2F0ZSBsYWJlbCIpOw0KICAgICAgICAgICAgICAgICAgICB0LmdldCgpOw0KICAgICAgICAgICAgICAgICAgICBuID0gbmV3IE5vZGUodCwgeyB0eXBlOiBMQUJFTCwgbGFiZWw6IGxhYmVsIH0pOw0KICAgICAgICAgICAgICAgICAgICBuLmJsb2NrQ29tbWVudHMgPSBjb21tZW50czsNCiAgICAgICAgICAgICAgICAgICAgbi5zdGF0ZW1lbnQgPSBTdGF0ZW1lbnQodCwgeC5wdXNoTGFiZWwobGFiZWwpLm5lc3QoKSk7DQogICAgICAgICAgICAgICAgICAgIG4udGFyZ2V0ID0gKG4uc3RhdGVtZW50LnR5cGUgPT09IExBQkVMKSA/IG4uc3RhdGVtZW50LnRhcmdldCA6IG4uc3RhdGVtZW50Ow0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIEV4cHJlc3Npb24gc3RhdGVtZW50Lg0KICAgICAgICAgICAgLy8gV2UgdW5nZXQgdGhlIGN1cnJlbnQgdG9rZW4gdG8gcGFyc2UgdGhlIGV4cHJlc3Npb24gYXMgYSB3aG9sZS4NCiAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IHR5cGU6IFNFTUlDT0xPTiB9KTsNCiAgICAgICAgICAgIHQudW5nZXQoKTsNCiAgICAgICAgICAgIG4uYmxvY2tDb21tZW50cyA9IGNvbW1lbnRzOw0KICAgICAgICAgICAgbi5leHByZXNzaW9uID0gRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgICAgIG4uZW5kID0gbi5leHByZXNzaW9uLmVuZDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQoNCiAgICAgICAgbi5ibG9ja0NvbW1lbnRzID0gY29tbWVudHM7DQogICAgICAgIE1hZ2ljYWxTZW1pY29sb24odCk7DQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogTWFnaWNhbFNlbWljb2xvbiA6OiAodG9rZW5pemVyKSAtPiB2b2lkDQogICAgICovDQogICAgZnVuY3Rpb24gTWFnaWNhbFNlbWljb2xvbih0KSB7DQogICAgICAgIHZhciB0dDsNCiAgICAgICAgaWYgKHQubGluZW5vID09PSB0LnRva2VuLmxpbmVubykgew0KICAgICAgICAgICAgdHQgPSB0LnBlZWtPblNhbWVMaW5lKCk7DQogICAgICAgICAgICBpZiAodHQgIT09IEVORCAmJiB0dCAhPT0gTkVXTElORSAmJiB0dCAhPT0gU0VNSUNPTE9OICYmIHR0ICE9PSBSSUdIVF9DVVJMWSkNCiAgICAgICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJtaXNzaW5nIDsgYmVmb3JlIHN0YXRlbWVudCIpOw0KICAgICAgICB9DQogICAgICAgIHQubWF0Y2goU0VNSUNPTE9OKTsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIFJldHVybk9yWWllbGQgOjogKHRva2VuaXplciwgY29tcGlsZXIgY29udGV4dCkgLT4gKFJFVFVSTiB8IFlJRUxEKSBub2RlDQogICAgICovDQogICAgZnVuY3Rpb24gUmV0dXJuT3JZaWVsZCh0LCB4KSB7DQogICAgICAgIHZhciBuLCBiLCB0dCA9IHQudG9rZW4udHlwZSwgdHQyOw0KDQogICAgICAgIHZhciBwYXJlbnRTY3JpcHQgPSB4LnBhcmVudFNjcmlwdDsNCg0KICAgICAgICBpZiAodHQgPT09IFJFVFVSTikgew0KICAgICAgICAgICAgaWYgKCF4LmluRnVuY3Rpb24pDQogICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiUmV0dXJuIG5vdCBpbiBmdW5jdGlvbiIpOw0KICAgICAgICB9IGVsc2UgLyogaWYgKHR0ID09PSBZSUVMRCkgKi8gew0KICAgICAgICAgICAgaWYgKCF4LmluRnVuY3Rpb24pDQogICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiWWllbGQgbm90IGluIGZ1bmN0aW9uIik7DQogICAgICAgICAgICBwYXJlbnRTY3JpcHQuaXNHZW5lcmF0b3IgPSB0cnVlOw0KICAgICAgICB9DQogICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IHZhbHVlOiB1bmRlZmluZWQgfSk7DQoNCiAgICAgICAgdHQyID0gKHR0ID09PSBSRVRVUk4pID8gdC5wZWVrT25TYW1lTGluZSh0cnVlKSA6IHQucGVlayh0cnVlKTsNCiAgICAgICAgaWYgKHR0MiAhPT0gRU5EICYmIHR0MiAhPT0gTkVXTElORSAmJg0KICAgICAgICAgICAgdHQyICE9PSBTRU1JQ09MT04gJiYgdHQyICE9PSBSSUdIVF9DVVJMWQ0KICAgICAgICAgICAgJiYgKHR0ICE9PSBZSUVMRCB8fA0KICAgICAgICAgICAgICAgICh0dDIgIT09IHR0ICYmIHR0MiAhPT0gUklHSFRfQlJBQ0tFVCAmJiB0dDIgIT09IFJJR0hUX1BBUkVOICYmDQogICAgICAgICAgICAgICAgIHR0MiAhPT0gQ09MT04gJiYgdHQyICE9PSBDT01NQSkpKSB7DQogICAgICAgICAgICBpZiAodHQgPT09IFJFVFVSTikgew0KICAgICAgICAgICAgICAgIG4udmFsdWUgPSBFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICAgICAgICAgIHBhcmVudFNjcmlwdC5oYXNSZXR1cm5XaXRoVmFsdWUgPSB0cnVlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBuLnZhbHVlID0gQXNzaWduRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIGlmICh0dCA9PT0gUkVUVVJOKSB7DQogICAgICAgICAgICBwYXJlbnRTY3JpcHQuaGFzRW1wdHlSZXR1cm4gPSB0cnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRGlzYWxsb3cgcmV0dXJuIHY7IGluIGdlbmVyYXRvci4NCiAgICAgICAgaWYgKHBhcmVudFNjcmlwdC5oYXNSZXR1cm5XaXRoVmFsdWUgJiYgcGFyZW50U2NyaXB0LmlzR2VuZXJhdG9yKQ0KICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiR2VuZXJhdG9yIHJldHVybnMgYSB2YWx1ZSIpOw0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogTW9kdWxlRXhwcmVzc2lvbiA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KSAtPiAoU1RSSU5HIHwgSURFTlRJRklFUiB8IERPVCkgbm9kZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIE1vZHVsZUV4cHJlc3Npb24odCwgeCkgew0KICAgICAgICByZXR1cm4gdC5tYXRjaChTVFJJTkcpID8gbmV3IE5vZGUodCkgOiBRdWFsaWZpZWRQYXRoKHQsIHgpOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogSW1wb3J0UGF0aExpc3QgOjogKHRva2VuaXplciwgY29tcGlsZXIgY29udGV4dCkgLT4gQXJyYXlbRE9UIG5vZGVdDQogICAgICovDQogICAgZnVuY3Rpb24gSW1wb3J0UGF0aExpc3QodCwgeCkgew0KICAgICAgICB2YXIgYSA9IFtdOw0KICAgICAgICBkbyB7DQogICAgICAgICAgICBhLnB1c2goSW1wb3J0UGF0aCh0LCB4KSk7DQogICAgICAgIH0gd2hpbGUgKHQubWF0Y2goQ09NTUEpKTsNCiAgICAgICAgcmV0dXJuIGE7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBJbXBvcnRQYXRoIDo6ICh0b2tlbml6ZXIsIGNvbXBpbGVyIGNvbnRleHQpIC0+IERPVCBub2RlDQogICAgICovDQogICAgZnVuY3Rpb24gSW1wb3J0UGF0aCh0LCB4KSB7DQogICAgICAgIHZhciBuID0gUXVhbGlmaWVkUGF0aCh0LCB4KTsNCiAgICAgICAgaWYgKCF0Lm1hdGNoKERPVCkpIHsNCiAgICAgICAgICAgIGlmIChuLnR5cGUgPT09IElERU5USUZJRVIpDQogICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiY2Fubm90IGltcG9ydCBsb2NhbCB2YXJpYWJsZSIpOw0KICAgICAgICAgICAgcmV0dXJuIG47DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgbjIgPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgbjIucHVzaChuKTsNCiAgICAgICAgbjIucHVzaChJbXBvcnRTcGVjaWZpZXJTZXQodCwgeCkpOw0KICAgICAgICByZXR1cm4gbjI7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBFeHBsaWNpdFNwZWNpZmllclNldCA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0LCAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KSAtPiBub2RlKQ0KICAgICAqICAgICAgICAgICAgICAgICAgICAgIC0+IE9CSkVDVF9JTklUIG5vZGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBFeHBsaWNpdFNwZWNpZmllclNldCh0LCB4LCBTcGVjaWZpZXJSSFMpIHsNCiAgICAgICAgdmFyIG4sIG4yLCBpZCwgdHQ7DQoNCiAgICAgICAgbiA9IG5ldyBOb2RlKHQsIHsgdHlwZTogT0JKRUNUX0lOSVQgfSk7DQogICAgICAgIHQubXVzdE1hdGNoKExFRlRfQ1VSTFkpOw0KDQogICAgICAgIGlmICghdC5tYXRjaChSSUdIVF9DVVJMWSkpIHsNCiAgICAgICAgICAgIGRvIHsNCiAgICAgICAgICAgICAgICBpZCA9IElkZW50aWZpZXIodCwgeCk7DQogICAgICAgICAgICAgICAgaWYgKHQubWF0Y2goQ09MT04pKSB7DQogICAgICAgICAgICAgICAgICAgIG4yID0gbmV3IE5vZGUodCwgeyB0eXBlOiBQUk9QRVJUWV9JTklUIH0pOw0KICAgICAgICAgICAgICAgICAgICBuMi5wdXNoKGlkKTsNCiAgICAgICAgICAgICAgICAgICAgbjIucHVzaChTcGVjaWZpZXJSSFModCwgeCkpOw0KICAgICAgICAgICAgICAgICAgICBuLnB1c2gobjIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIG4ucHVzaChpZCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSB3aGlsZSAoIXQubWF0Y2goUklHSFRfQ1VSTFkpICYmIHQubXVzdE1hdGNoKENPTU1BKSk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIEltcG9ydFNwZWNpZmllclNldCA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KSAtPiAoSURFTlRJRklFUiB8IE9CSkVDVF9JTklUKSBub2RlDQogICAgICovDQogICAgZnVuY3Rpb24gSW1wb3J0U3BlY2lmaWVyU2V0KHQsIHgpIHsNCiAgICAgICAgcmV0dXJuIHQubWF0Y2goTVVMKQ0KICAgICAgICAgICAgID8gbmV3IE5vZGUodCwgeyB0eXBlOiBJREVOVElGSUVSLCBuYW1lOiAiKiIgfSkNCiAgICAgICAgICAgICA6IEV4cGxpY2l0U3BlY2lmaWVyU2V0KHQsIHgsIElkZW50aWZpZXIpOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogSWRlbnRpZmllciA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KSAtPiBJREVOVElGSUVSIG5vZGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBJZGVudGlmaWVyKHQsIHgpIHsNCiAgICAgICAgdC5tdXN0TWF0Y2goSURFTlRJRklFUik7DQogICAgICAgIHJldHVybiBuZXcgTm9kZSh0LCB7IHR5cGU6IElERU5USUZJRVIgfSk7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBJZGVudGlmaWVyTmFtZSA6OiAodG9rZW5pemVyKSAtPiBJREVOVElGSUVSIG5vZGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBJZGVudGlmaWVyTmFtZSh0KSB7DQogICAgICAgIGlmICh0Lm1hdGNoKElERU5USUZJRVIpKQ0KICAgICAgICAgICAgcmV0dXJuIG5ldyBOb2RlKHQsIHsgdHlwZTogSURFTlRJRklFUiB9KTsNCiAgICAgICAgdC5nZXQoKTsNCiAgICAgICAgaWYgKHQudG9rZW4udmFsdWUgaW4gZGVmaW5pdGlvbnMua2V5d29yZHMpDQogICAgICAgICAgICByZXR1cm4gbmV3IE5vZGUodCwgeyB0eXBlOiBJREVOVElGSUVSIH0pOw0KICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJtaXNzaW5nIElkZW50aWZpZXJOYW1lIik7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBRdWFsaWZpZWRQYXRoIDo6ICh0b2tlbml6ZXIsIGNvbXBpbGVyIGNvbnRleHQpIC0+IChJREVOVElGSUVSIHwgRE9UKSBub2RlDQogICAgICovDQogICAgZnVuY3Rpb24gUXVhbGlmaWVkUGF0aCh0LCB4KSB7DQogICAgICAgIHZhciBuLCBuMjsNCg0KICAgICAgICBuID0gSWRlbnRpZmllcih0LCB4KTsNCg0KICAgICAgICB3aGlsZSAodC5tYXRjaChET1QpKSB7DQogICAgICAgICAgICBpZiAodC5wZWVrKCkgIT09IElERU5USUZJRVIpIHsNCiAgICAgICAgICAgICAgICAvLyBVbmdldCB0aGUgJy4nIHRva2VuLCB3aGljaCBpc24ndCBwYXJ0IG9mIHRoZSBRdWFsaWZpZWRQYXRoLg0KICAgICAgICAgICAgICAgIHQudW5nZXQoKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG4yID0gbmV3IE5vZGUodCk7DQogICAgICAgICAgICBuMi5wdXNoKG4pOw0KICAgICAgICAgICAgbjIucHVzaChJZGVudGlmaWVyKHQsIHgpKTsNCiAgICAgICAgICAgIG4gPSBuMjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogRXhwb3J0UGF0aCA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KSAtPiAoSURFTlRJRklFUiB8IERPVCB8IE9CSkVDVF9JTklUKSBub2RlDQogICAgICovDQogICAgZnVuY3Rpb24gRXhwb3J0UGF0aCh0LCB4KSB7DQogICAgICAgIGlmICh0LnBlZWsoKSA9PT0gTEVGVF9DVVJMWSkNCiAgICAgICAgICAgIHJldHVybiBFeHBsaWNpdFNwZWNpZmllclNldCh0LCB4LCBRdWFsaWZpZWRQYXRoKTsNCiAgICAgICAgcmV0dXJuIFF1YWxpZmllZFBhdGgodCwgeCk7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBFeHBvcnRQYXRoTGlzdCA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KQ0KICAgICAqICAgICAgICAgICAgICAgIC0+IEFycmF5WyhJREVOVElGSUVSIHwgRE9UIHwgT0JKRUNUX0lOSVQpIG5vZGVdDQogICAgICovDQogICAgZnVuY3Rpb24gRXhwb3J0UGF0aExpc3QodCwgeCkgew0KICAgICAgICB2YXIgYSA9IFtdOw0KICAgICAgICBkbyB7DQogICAgICAgICAgICBhLnB1c2goRXhwb3J0UGF0aCh0LCB4KSk7DQogICAgICAgIH0gd2hpbGUgKHQubWF0Y2goQ09NTUEpKTsNCiAgICAgICAgcmV0dXJuIGE7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBGdW5jdGlvbkRlZmluaXRpb24gOjogKHRva2VuaXplciwgY29tcGlsZXIgY29udGV4dCwgYm9vbGVhbiwNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xBUkVEX0ZPUk0gb3IgRVhQUkVTU0VEX0ZPUk0gb3IgU1RBVEVNRU5UX0ZPUk0sDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBbc3RyaW5nXSBvciBudWxsIG9yIHVuZGVmaW5lZCkNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgLT4gbm9kZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIEZ1bmN0aW9uRGVmaW5pdGlvbih0LCB4LCByZXF1aXJlTmFtZSwgZnVuY3Rpb25Gb3JtLCBjb21tZW50cykgew0KICAgICAgICB2YXIgdHQ7DQogICAgICAgIHZhciBmID0gbmV3IE5vZGUodCwgeyBwYXJhbXM6IFtdLCBwYXJhbUNvbW1lbnRzOiBbXSB9KTsNCiAgICAgICAgaWYgKHR5cGVvZiBjb21tZW50ID09PSAidW5kZWZpbmVkIikNCiAgICAgICAgICAgIGNvbW1lbnQgPSBudWxsOw0KICAgICAgICBmLmJsb2NrQ29tbWVudHMgPSBjb21tZW50czsNCiAgICAgICAgaWYgKGYudHlwZSAhPT0gRlVOQ1RJT04pDQogICAgICAgICAgICBmLnR5cGUgPSAoZi52YWx1ZSA9PT0gImdldCIpID8gR0VUVEVSIDogU0VUVEVSOw0KICAgICAgICBpZiAodC5tYXRjaChJREVOVElGSUVSKSkNCiAgICAgICAgICAgIGYubmFtZSA9IHQudG9rZW4udmFsdWU7DQogICAgICAgIGVsc2UgaWYgKHJlcXVpcmVOYW1lKQ0KICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigibWlzc2luZyBmdW5jdGlvbiBpZGVudGlmaWVyIik7DQoNCiAgICAgICAgdmFyIGluTW9kdWxlID0geCA/IHguaW5Nb2R1bGUgOiBmYWxzZTsNCiAgICAgICAgdmFyIHgyID0gbmV3IFN0YXRpY0NvbnRleHQobnVsbCwgbnVsbCwgaW5Nb2R1bGUsIHRydWUpOw0KDQogICAgICAgIHQubXVzdE1hdGNoKExFRlRfUEFSRU4pOw0KICAgICAgICBpZiAoIXQubWF0Y2goUklHSFRfUEFSRU4pKSB7DQogICAgICAgICAgICBkbyB7DQogICAgICAgICAgICAgICAgdHQgPSB0LmdldCgpOw0KICAgICAgICAgICAgICAgIGYucGFyYW1Db21tZW50cy5wdXNoKHQubGFzdEJsb2NrQ29tbWVudCgpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR0KSB7DQogICAgICAgICAgICAgICAgICBjYXNlIExFRlRfQlJBQ0tFVDoNCiAgICAgICAgICAgICAgICAgIGNhc2UgTEVGVF9DVVJMWToNCiAgICAgICAgICAgICAgICAgICAgLy8gRGVzdHJ1Y3R1cmVkIGZvcm1hbCBwYXJhbWV0ZXJzLg0KICAgICAgICAgICAgICAgICAgICB0LnVuZ2V0KCk7DQogICAgICAgICAgICAgICAgICAgIGYucGFyYW1zLnB1c2goRGVzdHJ1Y3R1cmluZ0V4cHJlc3Npb24odCwgeDIpKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICBjYXNlIElERU5USUZJRVI6DQogICAgICAgICAgICAgICAgICAgIGYucGFyYW1zLnB1c2godC50b2tlbi52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigibWlzc2luZyBmb3JtYWwgcGFyYW1ldGVyIik7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gd2hpbGUgKHQubWF0Y2goQ09NTUEpKTsNCiAgICAgICAgICAgIHQubXVzdE1hdGNoKFJJR0hUX1BBUkVOKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIERvIHdlIGhhdmUgYW4gZXhwcmVzc2lvbiBjbG9zdXJlIG9yIGEgbm9ybWFsIGJvZHk/DQogICAgICAgIHR0ID0gdC5nZXQoKTsNCiAgICAgICAgaWYgKHR0ICE9PSBMRUZUX0NVUkxZKQ0KICAgICAgICAgICAgdC51bmdldCgpOw0KDQogICAgICAgIGlmICh0dCAhPT0gTEVGVF9DVVJMWSkgew0KICAgICAgICAgICAgZi5ib2R5ID0gQXNzaWduRXhwcmVzc2lvbih0LCB4Mik7DQogICAgICAgICAgICBpZiAoZi5ib2R5LmlzR2VuZXJhdG9yKQ0KICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIkdlbmVyYXRvciByZXR1cm5zIGEgdmFsdWUiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGYuYm9keSA9IFNjcmlwdCh0LCBpbk1vZHVsZSwgdHJ1ZSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodHQgPT09IExFRlRfQ1VSTFkpDQogICAgICAgICAgICB0Lm11c3RNYXRjaChSSUdIVF9DVVJMWSk7DQoNCiAgICAgICAgZi5lbmQgPSB0LnRva2VuLmVuZDsNCiAgICAgICAgZi5mdW5jdGlvbkZvcm0gPSBmdW5jdGlvbkZvcm07DQogICAgICAgIGlmIChmdW5jdGlvbkZvcm0gPT09IERFQ0xBUkVEX0ZPUk0pDQogICAgICAgICAgICB4LnBhcmVudFNjcmlwdC5mdW5EZWNscy5wdXNoKGYpOw0KICAgICAgICByZXR1cm4gZjsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIE1vZHVsZVZhcmlhYmxlcyA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0LCBNT0RVTEUgbm9kZSkgLT4gdm9pZA0KICAgICAqDQogICAgICogUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIGRlY2xhcmF0aW9ucyAoYW5kIG1heWJlDQogICAgICogaW5pdGlhbGl6YXRpb25zKS4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBNb2R1bGVWYXJpYWJsZXModCwgeCwgbikgew0KICAgICAgICB2YXIgbjEsIG4yOw0KICAgICAgICBkbyB7DQogICAgICAgICAgICBuMSA9IElkZW50aWZpZXIodCwgeCk7DQogICAgICAgICAgICBpZiAodC5tYXRjaChBU1NJR04pKSB7DQogICAgICAgICAgICAgICAgbjIgPSBNb2R1bGVFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICAgICAgICAgIG4xLmluaXRpYWxpemVyID0gbjI7DQogICAgICAgICAgICAgICAgaWYgKG4yLnR5cGUgPT09IFNUUklORykNCiAgICAgICAgICAgICAgICAgICAgeC5wYXJlbnRTY3JpcHQubW9kTG9hZHMuc2V0KG4xLnZhbHVlLCBuMi52YWx1ZSk7DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB4LnBhcmVudFNjcmlwdC5tb2RBc3Nucy5zZXQobjEudmFsdWUsIG4xKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG4ucHVzaChuMSk7DQogICAgICAgIH0gd2hpbGUgKHQubWF0Y2goQ09NTUEpKTsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIFZhcmlhYmxlcyA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KSAtPiBub2RlDQogICAgICoNCiAgICAgKiBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB2YXIgZGVjbGFyYXRpb25zIChhbmQgbWF5YmUNCiAgICAgKiBpbml0aWFsaXphdGlvbnMpLg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIFZhcmlhYmxlcyh0LCB4LCBsZXRCbG9jaykgew0KICAgICAgICB2YXIgbiwgbjIsIHNzLCBpLCBzLCB0dDsNCg0KICAgICAgICB0dCA9IHQudG9rZW4udHlwZTsNCiAgICAgICAgc3dpdGNoICh0dCkgew0KICAgICAgICAgIGNhc2UgVkFSOg0KICAgICAgICAgIGNhc2UgQ09OU1Q6DQogICAgICAgICAgICBzID0geC5wYXJlbnRTY3JpcHQ7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICBjYXNlIExFVDoNCiAgICAgICAgICAgIHMgPSB4LnBhcmVudEJsb2NrOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgY2FzZSBMRUZUX1BBUkVOOg0KICAgICAgICAgICAgdHQgPSBMRVQ7DQogICAgICAgICAgICBzID0gbGV0QmxvY2s7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IHR5cGU6IHR0LCBkZXN0cnVjdHVyaW5nczogW10gfSk7DQoNCiAgICAgICAgZG8gew0KICAgICAgICAgICAgdHQgPSB0LmdldCgpOw0KICAgICAgICAgICAgaWYgKHR0ID09PSBMRUZUX0JSQUNLRVQgfHwgdHQgPT09IExFRlRfQ1VSTFkpIHsNCiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIHVuZ2V0IHRvIHBhcnNlIHRoZSBmdWxsIGRlc3RydWN0dXJlZCBleHByZXNzaW9uLg0KICAgICAgICAgICAgICAgIHQudW5nZXQoKTsNCg0KICAgICAgICAgICAgICAgIHZhciBkZXhwID0gRGVzdHJ1Y3R1cmluZ0V4cHJlc3Npb24odCwgeCwgdHJ1ZSk7DQoNCiAgICAgICAgICAgICAgICBuMiA9IG5ldyBOb2RlKHQsIHsgdHlwZTogSURFTlRJRklFUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZGV4cCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHk6IG4udHlwZSA9PT0gQ09OU1QgfSk7DQogICAgICAgICAgICAgICAgbi5wdXNoKG4yKTsNCiAgICAgICAgICAgICAgICBwdXNoRGVzdHJ1Y3R1cmluZ1ZhckRlY2xzKG4yLm5hbWUuZGVzdHJ1Y3R1cmVkTmFtZXMsIHMpOw0KICAgICAgICAgICAgICAgIG4uZGVzdHJ1Y3R1cmluZ3MucHVzaCh7IGV4cDogZGV4cCwgZGVjbDogbjIgfSk7DQoNCiAgICAgICAgICAgICAgICBpZiAoeC5pbkZvckxvb3BJbml0ICYmIHQucGVlaygpID09PSBJTikgew0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB0Lm11c3RNYXRjaChBU1NJR04pOw0KICAgICAgICAgICAgICAgIGlmICh0LnRva2VuLmFzc2lnbk9wKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJJbnZhbGlkIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIik7DQoNCiAgICAgICAgICAgICAgICBuMi5ibG9ja0NvbW1lbnQgPSB0Lmxhc3RCbG9ja0NvbW1lbnQoKTsNCiAgICAgICAgICAgICAgICBuMi5pbml0aWFsaXplciA9IEFzc2lnbkV4cHJlc3Npb24odCwgeCk7DQoNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHR0ICE9PSBJREVOVElGSUVSKQ0KICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIm1pc3NpbmcgdmFyaWFibGUgbmFtZSIpOw0KDQogICAgICAgICAgICBuMiA9IG5ldyBOb2RlKHQsIHsgdHlwZTogSURFTlRJRklFUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0LnRva2VuLnZhbHVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5OiBuLnR5cGUgPT09IENPTlNUIH0pOw0KICAgICAgICAgICAgbi5wdXNoKG4yKTsNCiAgICAgICAgICAgIHMudmFyRGVjbHMucHVzaChuMik7DQoNCiAgICAgICAgICAgIGlmICh0Lm1hdGNoKEFTU0lHTikpIHsNCiAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IHQubGFzdEJsb2NrQ29tbWVudCgpOw0KICAgICAgICAgICAgICAgIGlmICh0LnRva2VuLmFzc2lnbk9wKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJJbnZhbGlkIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIik7DQoNCiAgICAgICAgICAgICAgICBuMi5pbml0aWFsaXplciA9IEFzc2lnbkV4cHJlc3Npb24odCwgeCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdC5sYXN0QmxvY2tDb21tZW50KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBuMi5ibG9ja0NvbW1lbnQgPSBjb21tZW50Ow0KICAgICAgICB9IHdoaWxlICh0Lm1hdGNoKENPTU1BKSk7DQoNCiAgICAgICAgcmV0dXJuIG47DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBMZXRCbG9jayA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0LCBib29sZWFuKSAtPiBub2RlDQogICAgICoNCiAgICAgKiBEb2VzIG5vdCBoYW5kbGUgbGV0IGluc2lkZSBvZiBmb3IgbG9vcCBpbml0Lg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIExldEJsb2NrKHQsIHgsIGlzU3RhdGVtZW50KSB7DQogICAgICAgIHZhciBuLCBuMjsNCg0KICAgICAgICAvLyB0LnRva2VuLnR5cGUgbXVzdCBiZSBMRVQNCiAgICAgICAgbiA9IG5ldyBOb2RlKHQsIHsgdHlwZTogTEVUX0JMT0NLLCB2YXJEZWNsczogW10gfSk7DQogICAgICAgIHQubXVzdE1hdGNoKExFRlRfUEFSRU4pOw0KICAgICAgICBuLnZhcmlhYmxlcyA9IFZhcmlhYmxlcyh0LCB4LCBuKTsNCiAgICAgICAgdC5tdXN0TWF0Y2goUklHSFRfUEFSRU4pOw0KDQogICAgICAgIGlmIChpc1N0YXRlbWVudCAmJiB0LnBlZWsoKSAhPT0gTEVGVF9DVVJMWSkgew0KICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAqIElmIHRoaXMgaXMgcmVhbGx5IGFuIGV4cHJlc3Npb24gaW4gbGV0IHN0YXRlbWVudCBndWlzZSwgdGhlbiB3ZQ0KICAgICAgICAgICAgICogbmVlZCB0byB3cmFwIHRoZSBMRVRfQkxPQ0sgbm9kZSBpbiBhIFNFTUlDT0xPTiBub2RlIHNvIHRoYXQgd2UgcG9wDQogICAgICAgICAgICAgKiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLg0KICAgICAgICAgICAgICovDQogICAgICAgICAgICBuMiA9IG5ldyBOb2RlKHQsIHsgdHlwZTogU0VNSUNPTE9OLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IG4gfSk7DQogICAgICAgICAgICBpc1N0YXRlbWVudCA9IGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGlzU3RhdGVtZW50KQ0KICAgICAgICAgICAgbi5ibG9jayA9IEJsb2NrKHQsIHgpOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICBuLmV4cHJlc3Npb24gPSBBc3NpZ25FeHByZXNzaW9uKHQsIHgpOw0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNoZWNrRGVzdHJ1Y3R1cmluZyh0LCB4LCBuLCBzaW1wbGVOYW1lc09ubHkpIHsNCiAgICAgICAgaWYgKG4udHlwZSA9PT0gQVJSQVlfQ09NUCkNCiAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIkludmFsaWQgYXJyYXkgY29tcHJlaGVuc2lvbiBsZWZ0LWhhbmQgc2lkZSIpOw0KICAgICAgICBpZiAobi50eXBlICE9PSBBUlJBWV9JTklUICYmIG4udHlwZSAhPT0gT0JKRUNUX0lOSVQpDQogICAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgdmFyIGxoc3MgPSB7fTsNCiAgICAgICAgdmFyIG5uLCBuMiwgaWR4LCBzdWIsIGNjLCBjID0gbi5jaGlsZHJlbjsNCiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBjLmxlbmd0aDsgaSA8IGo7IGkrKykgew0KICAgICAgICAgICAgaWYgKCEobm4gPSBjW2ldKSkNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIGlmIChubi50eXBlID09PSBQUk9QRVJUWV9JTklUKSB7DQogICAgICAgICAgICAgICAgY2MgPSBubi5jaGlsZHJlbjsNCiAgICAgICAgICAgICAgICBzdWIgPSBjY1sxXTsNCiAgICAgICAgICAgICAgICBpZHggPSBjY1swXS52YWx1ZTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAobi50eXBlID09PSBPQkpFQ1RfSU5JVCkgew0KICAgICAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgZGVzdHJ1Y3R1cmluZyBzaG9ydGhhbmQge2ZvbywgYmFyfT8NCiAgICAgICAgICAgICAgICBzdWIgPSBubjsNCiAgICAgICAgICAgICAgICBpZHggPSBubi52YWx1ZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgc3ViID0gbm47DQogICAgICAgICAgICAgICAgaWR4ID0gaTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHN1Yi50eXBlID09PSBBUlJBWV9JTklUIHx8IHN1Yi50eXBlID09PSBPQkpFQ1RfSU5JVCkgew0KICAgICAgICAgICAgICAgIGxoc3NbaWR4XSA9IGNoZWNrRGVzdHJ1Y3R1cmluZyh0LCB4LCBzdWIsIHNpbXBsZU5hbWVzT25seSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmIChzaW1wbGVOYW1lc09ubHkgJiYgc3ViLnR5cGUgIT09IElERU5USUZJRVIpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gSW4gZGVjbGFyYXRpb25zLCBsaHMgbXVzdCBiZSBzaW1wbGUgbmFtZXMNCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigibWlzc2luZyBuYW1lIGluIHBhdHRlcm4iKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBsaHNzW2lkeF0gPSBzdWI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbGhzczsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBEZXN0cnVjdHVyaW5nRXhwcmVzc2lvbih0LCB4LCBzaW1wbGVOYW1lc09ubHkpIHsNCiAgICAgICAgdmFyIG4gPSBQcmltYXJ5RXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgLy8gS2VlcCB0aGUgbGlzdCBvZiBsZWZ0aGFuZCBzaWRlcyBmb3IgdmFyRGVjbHMNCiAgICAgICAgbi5kZXN0cnVjdHVyZWROYW1lcyA9IGNoZWNrRGVzdHJ1Y3R1cmluZyh0LCB4LCBuLCBzaW1wbGVOYW1lc09ubHkpOw0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBHZW5lcmF0b3JFeHByZXNzaW9uKHQsIHgsIGUpIHsNCiAgICAgICAgcmV0dXJuIG5ldyBOb2RlKHQsIHsgdHlwZTogR0VORVJBVE9SLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsOiBDb21wcmVoZW5zaW9uVGFpbCh0LCB4KSB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBDb21wcmVoZW5zaW9uVGFpbCh0LCB4KSB7DQogICAgICAgIHZhciBib2R5LCBuLCBuMiwgbjMsIHA7DQoNCiAgICAgICAgLy8gdC50b2tlbi50eXBlIG11c3QgYmUgRk9SDQogICAgICAgIGJvZHkgPSBuZXcgTm9kZSh0LCB7IHR5cGU6IENPTVBfVEFJTCB9KTsNCg0KICAgICAgICBkbyB7DQogICAgICAgICAgICAvLyBDb21wcmVoZW5zaW9uIHRhaWxzIGFyZSBhbHdheXMgZm9yLi5pbiBsb29wcy4NCiAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IHR5cGU6IEZPUl9JTiwgaXNMb29wOiB0cnVlIH0pOw0KICAgICAgICAgICAgaWYgKHQubWF0Y2goSURFTlRJRklFUikpIHsNCiAgICAgICAgICAgICAgICAvLyBCdXQgc29tZXRpbWVzIHRoZXkncmUgZm9yIGVhY2guLmluLg0KICAgICAgICAgICAgICAgIGlmICh0LnRva2VuLnZhbHVlID09PSAiZWFjaCIpDQogICAgICAgICAgICAgICAgICAgIG4uaXNFYWNoID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHQudW5nZXQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHAgPSBNYXliZUxlZnRQYXJlbih0LCB4KTsNCiAgICAgICAgICAgIHN3aXRjaCh0LmdldCgpKSB7DQogICAgICAgICAgICAgIGNhc2UgTEVGVF9CUkFDS0VUOg0KICAgICAgICAgICAgICBjYXNlIExFRlRfQ1VSTFk6DQogICAgICAgICAgICAgICAgdC51bmdldCgpOw0KICAgICAgICAgICAgICAgIC8vIERlc3RydWN0dXJlZCBsZWZ0IHNpZGUgb2YgZm9yIGluIGNvbXByZWhlbnNpb24gdGFpbHMuDQogICAgICAgICAgICAgICAgbi5pdGVyYXRvciA9IERlc3RydWN0dXJpbmdFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgIGNhc2UgSURFTlRJRklFUjoNCiAgICAgICAgICAgICAgICBuLml0ZXJhdG9yID0gbjMgPSBuZXcgTm9kZSh0LCB7IHR5cGU6IElERU5USUZJRVIgfSk7DQogICAgICAgICAgICAgICAgbjMubmFtZSA9IG4zLnZhbHVlOw0KICAgICAgICAgICAgICAgIG4udmFyRGVjbCA9IG4yID0gbmV3IE5vZGUodCwgeyB0eXBlOiBWQVIgfSk7DQogICAgICAgICAgICAgICAgbjIucHVzaChuMyk7DQogICAgICAgICAgICAgICAgeC5wYXJlbnRTY3JpcHQudmFyRGVjbHMucHVzaChuMyk7DQogICAgICAgICAgICAgICAgLy8gRG9uJ3QgYWRkIHRvIHZhckRlY2xzIHNpbmNlIHRoZSBzZW1hbnRpY3Mgb2YgY29tcHJlaGVuc2lvbnMgaXMNCiAgICAgICAgICAgICAgICAvLyBzdWNoIHRoYXQgdGhlIHZhcmlhYmxlcyBhcmUgaW4gdGhlaXIgb3duIGZ1bmN0aW9uIHdoZW4NCiAgICAgICAgICAgICAgICAvLyBkZXN1Z2FyZWQuDQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJtaXNzaW5nIGlkZW50aWZpZXIiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHQubXVzdE1hdGNoKElOKTsNCiAgICAgICAgICAgIG4ub2JqZWN0ID0gRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgICAgIE1heWJlUmlnaHRQYXJlbih0LCBwKTsNCiAgICAgICAgICAgIGJvZHkucHVzaChuKTsNCiAgICAgICAgfSB3aGlsZSAodC5tYXRjaChGT1IpKTsNCg0KICAgICAgICAvLyBPcHRpb25hbCBndWFyZC4NCiAgICAgICAgaWYgKHQubWF0Y2goSUYpKQ0KICAgICAgICAgICAgYm9keS5ndWFyZCA9IEhlYWRFeHByZXNzaW9uKHQsIHgpOw0KDQogICAgICAgIHJldHVybiBib2R5Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIEhlYWRFeHByZXNzaW9uKHQsIHgpIHsNCiAgICAgICAgdmFyIHAgPSBNYXliZUxlZnRQYXJlbih0LCB4KTsNCiAgICAgICAgdmFyIG4gPSBQYXJlbkV4cHJlc3Npb24odCwgeCk7DQogICAgICAgIE1heWJlUmlnaHRQYXJlbih0LCBwKTsNCiAgICAgICAgaWYgKHAgPT09IEVORCAmJiAhbi5wYXJlbnRoZXNpemVkKSB7DQogICAgICAgICAgICB2YXIgdHQgPSB0LnBlZWsoKTsNCiAgICAgICAgICAgIGlmICh0dCAhPT0gTEVGVF9DVVJMWSAmJiAhZGVmaW5pdGlvbnMuaXNTdGF0ZW1lbnRTdGFydENvZGVbdHRdKQ0KICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIlVucGFyZW50aGVzaXplZCBoZWFkIGZvbGxvd2VkIGJ5IHVuYnJhY2VkIGJvZHkiKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBQYXJlbkV4cHJlc3Npb24odCwgeCkgew0KICAgICAgICAvLyBBbHdheXMgYWNjZXB0IHRoZSAnaW4nIG9wZXJhdG9yIGluIGEgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLA0KICAgICAgICAvLyB3aGVyZSBpdCdzIHVuYW1iaWd1b3VzLCBldmVuIGlmIHdlIG1pZ2h0IGJlIHBhcnNpbmcgdGhlIGluaXQgb2YgYQ0KICAgICAgICAvLyBmb3Igc3RhdGVtZW50Lg0KICAgICAgICB2YXIgbiA9IEV4cHJlc3Npb24odCwgeC51cGRhdGUoeyBpbkZvckxvb3BJbml0OiB4LmluRm9yTG9vcEluaXQgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQudG9rZW4udHlwZSA9PT0gTEVGVF9QQVJFTikgfSkpOw0KDQogICAgICAgIGlmICh0Lm1hdGNoKEZPUikpIHsNCiAgICAgICAgICAgIGlmIChuLnR5cGUgPT09IFlJRUxEICYmICFuLnBhcmVudGhlc2l6ZWQpDQogICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiWWllbGQgZXhwcmVzc2lvbiBtdXN0IGJlIHBhcmVudGhlc2l6ZWQiKTsNCiAgICAgICAgICAgIGlmIChuLnR5cGUgPT09IENPTU1BICYmICFuLnBhcmVudGhlc2l6ZWQpDQogICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiR2VuZXJhdG9yIGV4cHJlc3Npb24gbXVzdCBiZSBwYXJlbnRoZXNpemVkIik7DQogICAgICAgICAgICBuID0gR2VuZXJhdG9yRXhwcmVzc2lvbih0LCB4LCBuKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogRXhwcmVzc2lvbiA6OiAodG9rZW5pemVyLCBjb21waWxlciBjb250ZXh0KSAtPiBub2RlDQogICAgICoNCiAgICAgKiBUb3AtZG93biBleHByZXNzaW9uIHBhcnNlciBtYXRjaGVkIGFnYWluc3QgU3BpZGVyTW9ua2V5Lg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIEV4cHJlc3Npb24odCwgeCkgew0KICAgICAgICB2YXIgbiwgbjI7DQoNCiAgICAgICAgbiA9IEFzc2lnbkV4cHJlc3Npb24odCwgeCk7DQogICAgICAgIGlmICh0Lm1hdGNoKENPTU1BKSkgew0KICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0LCB7IHR5cGU6IENPTU1BIH0pOw0KICAgICAgICAgICAgbjIucHVzaChuKTsNCiAgICAgICAgICAgIG4gPSBuMjsNCiAgICAgICAgICAgIGRvIHsNCiAgICAgICAgICAgICAgICBuMiA9IG4uY2hpbGRyZW5bbi5jaGlsZHJlbi5sZW5ndGgtMV07DQogICAgICAgICAgICAgICAgaWYgKG4yLnR5cGUgPT09IFlJRUxEICYmICFuMi5wYXJlbnRoZXNpemVkKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJZaWVsZCBleHByZXNzaW9uIG11c3QgYmUgcGFyZW50aGVzaXplZCIpOw0KICAgICAgICAgICAgICAgIG4ucHVzaChBc3NpZ25FeHByZXNzaW9uKHQsIHgpKTsNCiAgICAgICAgICAgIH0gd2hpbGUgKHQubWF0Y2goQ09NTUEpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIEFzc2lnbkV4cHJlc3Npb24odCwgeCkgew0KICAgICAgICB2YXIgbiwgbGhzOw0KDQogICAgICAgIC8vIEhhdmUgdG8gdHJlYXQgeWllbGQgbGlrZSBhbiBvcGVyYW5kIGJlY2F1c2UgaXQgY291bGQgYmUgdGhlIGxlZnRtb3N0DQogICAgICAgIC8vIG9wZXJhbmQgb2YgdGhlIGV4cHJlc3Npb24uDQogICAgICAgIGlmICh0Lm1hdGNoKFlJRUxELCB0cnVlKSkNCiAgICAgICAgICAgIHJldHVybiBSZXR1cm5PcllpZWxkKHQsIHgpOw0KDQogICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IHR5cGU6IEFTU0lHTiB9KTsNCiAgICAgICAgbGhzID0gQ29uZGl0aW9uYWxFeHByZXNzaW9uKHQsIHgpOw0KDQogICAgICAgIGlmICghdC5tYXRjaChBU1NJR04pKSB7DQogICAgICAgICAgICByZXR1cm4gbGhzOw0KICAgICAgICB9DQoNCiAgICAgICAgbi5ibG9ja0NvbW1lbnQgPSB0Lmxhc3RCbG9ja0NvbW1lbnQoKTsNCg0KICAgICAgICBzd2l0Y2ggKGxocy50eXBlKSB7DQogICAgICAgICAgY2FzZSBPQkpFQ1RfSU5JVDoNCiAgICAgICAgICBjYXNlIEFSUkFZX0lOSVQ6DQogICAgICAgICAgICBsaHMuZGVzdHJ1Y3R1cmVkTmFtZXMgPSBjaGVja0Rlc3RydWN0dXJpbmcodCwgeCwgbGhzKTsNCiAgICAgICAgICAgIC8vIEZBTEwgVEhST1VHSA0KICAgICAgICAgIGNhc2UgSURFTlRJRklFUjogY2FzZSBET1Q6IGNhc2UgSU5ERVg6IGNhc2UgQ0FMTDoNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJCYWQgbGVmdC1oYW5kIHNpZGUgb2YgYXNzaWdubWVudCIpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KICAgICAgICBuLmFzc2lnbk9wID0gbGhzLmFzc2lnbk9wID0gdC50b2tlbi5hc3NpZ25PcDsNCiAgICAgICAgbi5wdXNoKGxocyk7DQogICAgICAgIG4ucHVzaChBc3NpZ25FeHByZXNzaW9uKHQsIHgpKTsNCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBDb25kaXRpb25hbEV4cHJlc3Npb24odCwgeCkgew0KICAgICAgICB2YXIgbiwgbjI7DQoNCiAgICAgICAgbiA9IE9yRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgaWYgKHQubWF0Y2goSE9PSykpIHsNCiAgICAgICAgICAgIG4yID0gbjsNCiAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IHR5cGU6IEhPT0sgfSk7DQogICAgICAgICAgICBuLnB1c2gobjIpOw0KICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAqIEFsd2F5cyBhY2NlcHQgdGhlICdpbicgb3BlcmF0b3IgaW4gdGhlIG1pZGRsZSBjbGF1c2Ugb2YgYSB0ZXJuYXJ5LA0KICAgICAgICAgICAgICogd2hlcmUgaXQncyB1bmFtYmlndW91cywgZXZlbiBpZiB3ZSBtaWdodCBiZSBwYXJzaW5nIHRoZSBpbml0IG9mIGENCiAgICAgICAgICAgICAqIGZvciBzdGF0ZW1lbnQuDQogICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIG4ucHVzaChBc3NpZ25FeHByZXNzaW9uKHQsIHgudXBkYXRlKHsgaW5Gb3JMb29wSW5pdDogZmFsc2UgfSkpKTsNCiAgICAgICAgICAgIGlmICghdC5tYXRjaChDT0xPTikpDQogICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigibWlzc2luZyA6IGFmdGVyID8iKTsNCiAgICAgICAgICAgIG4ucHVzaChBc3NpZ25FeHByZXNzaW9uKHQsIHgpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIE9yRXhwcmVzc2lvbih0LCB4KSB7DQogICAgICAgIHZhciBuLCBuMjsNCg0KICAgICAgICBuID0gQW5kRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgd2hpbGUgKHQubWF0Y2goT1IpKSB7DQogICAgICAgICAgICBuMiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgbjIucHVzaChuKTsNCiAgICAgICAgICAgIG4yLnB1c2goQW5kRXhwcmVzc2lvbih0LCB4KSk7DQogICAgICAgICAgICBuID0gbjI7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBBbmRFeHByZXNzaW9uKHQsIHgpIHsNCiAgICAgICAgdmFyIG4sIG4yOw0KDQogICAgICAgIG4gPSBCaXR3aXNlT3JFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICB3aGlsZSAodC5tYXRjaChBTkQpKSB7DQogICAgICAgICAgICBuMiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgbjIucHVzaChuKTsNCiAgICAgICAgICAgIG4yLnB1c2goQml0d2lzZU9yRXhwcmVzc2lvbih0LCB4KSk7DQogICAgICAgICAgICBuID0gbjI7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBCaXR3aXNlT3JFeHByZXNzaW9uKHQsIHgpIHsNCiAgICAgICAgdmFyIG4sIG4yOw0KDQogICAgICAgIG4gPSBCaXR3aXNlWG9yRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgd2hpbGUgKHQubWF0Y2goQklUV0lTRV9PUikpIHsNCiAgICAgICAgICAgIG4yID0gbmV3IE5vZGUodCk7DQogICAgICAgICAgICBuMi5wdXNoKG4pOw0KICAgICAgICAgICAgbjIucHVzaChCaXR3aXNlWG9yRXhwcmVzc2lvbih0LCB4KSk7DQogICAgICAgICAgICBuID0gbjI7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBCaXR3aXNlWG9yRXhwcmVzc2lvbih0LCB4KSB7DQogICAgICAgIHZhciBuLCBuMjsNCg0KICAgICAgICBuID0gQml0d2lzZUFuZEV4cHJlc3Npb24odCwgeCk7DQogICAgICAgIHdoaWxlICh0Lm1hdGNoKEJJVFdJU0VfWE9SKSkgew0KICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgIG4yLnB1c2gobik7DQogICAgICAgICAgICBuMi5wdXNoKEJpdHdpc2VBbmRFeHByZXNzaW9uKHQsIHgpKTsNCiAgICAgICAgICAgIG4gPSBuMjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIEJpdHdpc2VBbmRFeHByZXNzaW9uKHQsIHgpIHsNCiAgICAgICAgdmFyIG4sIG4yOw0KDQogICAgICAgIG4gPSBFcXVhbGl0eUV4cHJlc3Npb24odCwgeCk7DQogICAgICAgIHdoaWxlICh0Lm1hdGNoKEJJVFdJU0VfQU5EKSkgew0KICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgIG4yLnB1c2gobik7DQogICAgICAgICAgICBuMi5wdXNoKEVxdWFsaXR5RXhwcmVzc2lvbih0LCB4KSk7DQogICAgICAgICAgICBuID0gbjI7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBFcXVhbGl0eUV4cHJlc3Npb24odCwgeCkgew0KICAgICAgICB2YXIgbiwgbjI7DQoNCiAgICAgICAgbiA9IFJlbGF0aW9uYWxFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICB3aGlsZSAodC5tYXRjaChFUSkgfHwgdC5tYXRjaChORSkgfHwNCiAgICAgICAgICAgICAgIHQubWF0Y2goU1RSSUNUX0VRKSB8fCB0Lm1hdGNoKFNUUklDVF9ORSkpIHsNCiAgICAgICAgICAgIG4yID0gbmV3IE5vZGUodCk7DQogICAgICAgICAgICBuMi5wdXNoKG4pOw0KICAgICAgICAgICAgbjIucHVzaChSZWxhdGlvbmFsRXhwcmVzc2lvbih0LCB4KSk7DQogICAgICAgICAgICBuID0gbjI7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBSZWxhdGlvbmFsRXhwcmVzc2lvbih0LCB4KSB7DQogICAgICAgIHZhciBuLCBuMjsNCg0KICAgICAgICAvKg0KICAgICAgICAgKiBVc2VzIG9mIHRoZSBpbiBvcGVyYXRvciBpbiBzaGlmdEV4cHJzIGFyZSBhbHdheXMgdW5hbWJpZ3VvdXMsDQogICAgICAgICAqIHNvIHVuc2V0IHRoZSBmbGFnIHRoYXQgcHJvaGliaXRzIHJlY29nbml6aW5nIGl0Lg0KICAgICAgICAgKi8NCiAgICAgICAgdmFyIHgyID0geC51cGRhdGUoeyBpbkZvckxvb3BJbml0OiBmYWxzZSB9KTsNCiAgICAgICAgbiA9IFNoaWZ0RXhwcmVzc2lvbih0LCB4Mik7DQogICAgICAgIHdoaWxlICgodC5tYXRjaChMVCkgfHwgdC5tYXRjaChMRSkgfHwgdC5tYXRjaChHRSkgfHwgdC5tYXRjaChHVCkgfHwNCiAgICAgICAgICAgICAgICgheC5pbkZvckxvb3BJbml0ICYmIHQubWF0Y2goSU4pKSB8fA0KICAgICAgICAgICAgICAgdC5tYXRjaChJTlNUQU5DRU9GKSkpIHsNCiAgICAgICAgICAgIG4yID0gbmV3IE5vZGUodCk7DQogICAgICAgICAgICBuMi5wdXNoKG4pOw0KICAgICAgICAgICAgbjIucHVzaChTaGlmdEV4cHJlc3Npb24odCwgeDIpKTsNCiAgICAgICAgICAgIG4gPSBuMjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIFNoaWZ0RXhwcmVzc2lvbih0LCB4KSB7DQogICAgICAgIHZhciBuLCBuMjsNCg0KICAgICAgICBuID0gQWRkRXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgd2hpbGUgKHQubWF0Y2goTFNIKSB8fCB0Lm1hdGNoKFJTSCkgfHwgdC5tYXRjaChVUlNIKSkgew0KICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgIG4yLnB1c2gobik7DQogICAgICAgICAgICBuMi5wdXNoKEFkZEV4cHJlc3Npb24odCwgeCkpOw0KICAgICAgICAgICAgbiA9IG4yOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIG47DQogICAgfQ0KDQogICAgZnVuY3Rpb24gQWRkRXhwcmVzc2lvbih0LCB4KSB7DQogICAgICAgIHZhciBuLCBuMjsNCg0KICAgICAgICBuID0gTXVsdGlwbHlFeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICB3aGlsZSAodC5tYXRjaChQTFVTKSB8fCB0Lm1hdGNoKE1JTlVTKSkgew0KICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgIG4yLnB1c2gobik7DQogICAgICAgICAgICBuMi5wdXNoKE11bHRpcGx5RXhwcmVzc2lvbih0LCB4KSk7DQogICAgICAgICAgICBuID0gbjI7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBNdWx0aXBseUV4cHJlc3Npb24odCwgeCkgew0KICAgICAgICB2YXIgbiwgbjI7DQoNCiAgICAgICAgbiA9IFVuYXJ5RXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgd2hpbGUgKHQubWF0Y2goTVVMKSB8fCB0Lm1hdGNoKERJVikgfHwgdC5tYXRjaChNT0QpKSB7DQogICAgICAgICAgICBuMiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgbjIucHVzaChuKTsNCiAgICAgICAgICAgIG4yLnB1c2goVW5hcnlFeHByZXNzaW9uKHQsIHgpKTsNCiAgICAgICAgICAgIG4gPSBuMjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIFVuYXJ5RXhwcmVzc2lvbih0LCB4KSB7DQogICAgICAgIHZhciBuLCBuMiwgdHQ7DQoNCiAgICAgICAgc3dpdGNoICh0dCA9IHQuZ2V0KHRydWUpKSB7DQogICAgICAgICAgY2FzZSBERUxFVEU6IGNhc2UgVk9JRDogY2FzZSBUWVBFT0Y6DQogICAgICAgICAgY2FzZSBOT1Q6IGNhc2UgQklUV0lTRV9OT1Q6IGNhc2UgUExVUzogY2FzZSBNSU5VUzoNCiAgICAgICAgICAgIGlmICh0dCA9PT0gUExVUykNCiAgICAgICAgICAgICAgICBuID0gbmV3IE5vZGUodCwgeyB0eXBlOiBVTkFSWV9QTFVTIH0pOw0KICAgICAgICAgICAgZWxzZSBpZiAodHQgPT09IE1JTlVTKQ0KICAgICAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IHR5cGU6IFVOQVJZX01JTlVTIH0pOw0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgIG4ucHVzaChVbmFyeUV4cHJlc3Npb24odCwgeCkpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBjYXNlIElOQ1JFTUVOVDoNCiAgICAgICAgICBjYXNlIERFQ1JFTUVOVDoNCiAgICAgICAgICAgIC8vIFByZWZpeCBpbmNyZW1lbnQvZGVjcmVtZW50Lg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgbi5wdXNoKE1lbWJlckV4cHJlc3Npb24odCwgeCwgdHJ1ZSkpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgdC51bmdldCgpOw0KICAgICAgICAgICAgbiA9IE1lbWJlckV4cHJlc3Npb24odCwgeCwgdHJ1ZSk7DQoNCiAgICAgICAgICAgIC8vIERvbid0IGxvb2sgYWNyb3NzIGEgbmV3bGluZSBib3VuZGFyeSBmb3IgYSBwb3N0Zml4IHtpbixkZX1jcmVtZW50Lg0KICAgICAgICAgICAgaWYgKHQudG9rZW5zWyh0LnRva2VuSW5kZXggKyB0Lmxvb2thaGVhZCAtIDEpICYgM10ubGluZW5vID09PQ0KICAgICAgICAgICAgICAgIHQubGluZW5vKSB7DQogICAgICAgICAgICAgICAgaWYgKHQubWF0Y2goSU5DUkVNRU5UKSB8fCB0Lm1hdGNoKERFQ1JFTUVOVCkpIHsNCiAgICAgICAgICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0LCB7IHBvc3RmaXg6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgICAgIG4yLnB1c2gobik7DQogICAgICAgICAgICAgICAgICAgIG4gPSBuMjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIE1lbWJlckV4cHJlc3Npb24odCwgeCwgYWxsb3dDYWxsU3ludGF4KSB7DQogICAgICAgIHZhciBuLCBuMiwgbmFtZSwgdHQ7DQoNCiAgICAgICAgaWYgKHQubWF0Y2goTkVXKSkgew0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQpOw0KICAgICAgICAgICAgbi5wdXNoKE1lbWJlckV4cHJlc3Npb24odCwgeCwgZmFsc2UpKTsNCiAgICAgICAgICAgIGlmICh0Lm1hdGNoKExFRlRfUEFSRU4pKSB7DQogICAgICAgICAgICAgICAgbi50eXBlID0gTkVXX1dJVEhfQVJHUzsNCiAgICAgICAgICAgICAgICBuLnB1c2goQXJndW1lbnRMaXN0KHQsIHgpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIG4gPSBQcmltYXJ5RXhwcmVzc2lvbih0LCB4KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHdoaWxlICgodHQgPSB0LmdldCgpKSAhPT0gRU5EKSB7DQogICAgICAgICAgICBzd2l0Y2ggKHR0KSB7DQogICAgICAgICAgICAgIGNhc2UgRE9UOg0KICAgICAgICAgICAgICAgIG4yID0gbmV3IE5vZGUodCk7DQogICAgICAgICAgICAgICAgbjIucHVzaChuKTsNCiAgICAgICAgICAgICAgICBuMi5wdXNoKElkZW50aWZpZXJOYW1lKHQpKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICBjYXNlIExFRlRfQlJBQ0tFVDoNCiAgICAgICAgICAgICAgICBuMiA9IG5ldyBOb2RlKHQsIHsgdHlwZTogSU5ERVggfSk7DQogICAgICAgICAgICAgICAgbjIucHVzaChuKTsNCiAgICAgICAgICAgICAgICBuMi5wdXNoKEV4cHJlc3Npb24odCwgeCkpOw0KICAgICAgICAgICAgICAgIHQubXVzdE1hdGNoKFJJR0hUX0JSQUNLRVQpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgIGNhc2UgTEVGVF9QQVJFTjoNCiAgICAgICAgICAgICAgICBpZiAoYWxsb3dDYWxsU3ludGF4KSB7DQogICAgICAgICAgICAgICAgICAgIG4yID0gbmV3IE5vZGUodCwgeyB0eXBlOiBDQUxMIH0pOw0KICAgICAgICAgICAgICAgICAgICBuMi5wdXNoKG4pOw0KICAgICAgICAgICAgICAgICAgICBuMi5wdXNoKEFyZ3VtZW50TGlzdCh0LCB4KSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIEZBTEwgVEhST1VHSA0KICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHQudW5nZXQoKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gbjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgbiA9IG4yOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIG47DQogICAgfQ0KDQogICAgZnVuY3Rpb24gQXJndW1lbnRMaXN0KHQsIHgpIHsNCiAgICAgICAgdmFyIG4sIG4yOw0KDQogICAgICAgIG4gPSBuZXcgTm9kZSh0LCB7IHR5cGU6IExJU1QgfSk7DQogICAgICAgIGlmICh0Lm1hdGNoKFJJR0hUX1BBUkVOLCB0cnVlKSkNCiAgICAgICAgICAgIHJldHVybiBuOw0KICAgICAgICBkbyB7DQogICAgICAgICAgICBuMiA9IEFzc2lnbkV4cHJlc3Npb24odCwgeCk7DQogICAgICAgICAgICBpZiAobjIudHlwZSA9PT0gWUlFTEQgJiYgIW4yLnBhcmVudGhlc2l6ZWQgJiYgdC5wZWVrKCkgPT09IENPTU1BKQ0KICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIllpZWxkIGV4cHJlc3Npb24gbXVzdCBiZSBwYXJlbnRoZXNpemVkIik7DQogICAgICAgICAgICBpZiAodC5tYXRjaChGT1IpKSB7DQogICAgICAgICAgICAgICAgbjIgPSBHZW5lcmF0b3JFeHByZXNzaW9uKHQsIHgsIG4yKTsNCiAgICAgICAgICAgICAgICBpZiAobi5jaGlsZHJlbi5sZW5ndGggPiAxIHx8IHQucGVlayh0cnVlKSA9PT0gQ09NTUEpDQogICAgICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIkdlbmVyYXRvciBleHByZXNzaW9uIG11c3QgYmUgcGFyZW50aGVzaXplZCIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbi5wdXNoKG4yKTsNCiAgICAgICAgfSB3aGlsZSAodC5tYXRjaChDT01NQSkpOw0KICAgICAgICB0Lm11c3RNYXRjaChSSUdIVF9QQVJFTik7DQoNCiAgICAgICAgcmV0dXJuIG47DQogICAgfQ0KDQogICAgZnVuY3Rpb24gUHJpbWFyeUV4cHJlc3Npb24odCwgeCkgew0KICAgICAgICB2YXIgbiwgbjIsIHR0ID0gdC5nZXQodHJ1ZSk7DQoNCiAgICAgICAgc3dpdGNoICh0dCkgew0KICAgICAgICAgIGNhc2UgRlVOQ1RJT046DQogICAgICAgICAgICBuID0gRnVuY3Rpb25EZWZpbml0aW9uKHQsIHgsIGZhbHNlLCBFWFBSRVNTRURfRk9STSk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgIGNhc2UgTEVGVF9CUkFDS0VUOg0KICAgICAgICAgICAgbiA9IG5ldyBOb2RlKHQsIHsgdHlwZTogQVJSQVlfSU5JVCB9KTsNCiAgICAgICAgICAgIHdoaWxlICgodHQgPSB0LnBlZWsodHJ1ZSkpICE9PSBSSUdIVF9CUkFDS0VUKSB7DQogICAgICAgICAgICAgICAgaWYgKHR0ID09PSBDT01NQSkgew0KICAgICAgICAgICAgICAgICAgICB0LmdldCgpOw0KICAgICAgICAgICAgICAgICAgICBuLnB1c2gobnVsbCk7DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBuLnB1c2goQXNzaWduRXhwcmVzc2lvbih0LCB4KSk7DQogICAgICAgICAgICAgICAgaWYgKHR0ICE9PSBDT01NQSAmJiAhdC5tYXRjaChDT01NQSkpDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBJZiB3ZSBtYXRjaGVkIGV4YWN0bHkgb25lIGVsZW1lbnQgYW5kIGdvdCBhIEZPUiwgd2UgaGF2ZSBhbg0KICAgICAgICAgICAgLy8gYXJyYXkgY29tcHJlaGVuc2lvbi4NCiAgICAgICAgICAgIGlmIChuLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiB0Lm1hdGNoKEZPUikpIHsNCiAgICAgICAgICAgICAgICBuMiA9IG5ldyBOb2RlKHQsIHsgdHlwZTogQVJSQVlfQ09NUCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogbi5jaGlsZHJlblswXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbDogQ29tcHJlaGVuc2lvblRhaWwodCwgeCkgfSk7DQogICAgICAgICAgICAgICAgbiA9IG4yOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdC5tdXN0TWF0Y2goUklHSFRfQlJBQ0tFVCk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgIGNhc2UgTEVGVF9DVVJMWToNCiAgICAgICAgICAgIHZhciBpZCwgZmQ7DQogICAgICAgICAgICBuID0gbmV3IE5vZGUodCwgeyB0eXBlOiBPQkpFQ1RfSU5JVCB9KTsNCg0KICAgICAgICAgIG9iamVjdF9pbml0Og0KICAgICAgICAgICAgaWYgKCF0Lm1hdGNoKFJJR0hUX0NVUkxZKSkgew0KICAgICAgICAgICAgICAgIGRvIHsNCiAgICAgICAgICAgICAgICAgICAgdHQgPSB0LmdldCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoKHQudG9rZW4udmFsdWUgPT09ICJnZXQiIHx8IHQudG9rZW4udmFsdWUgPT09ICJzZXQiKSAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgdC5wZWVrKCkgPT09IElERU5USUZJRVIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmVjbWEzT25seU1vZGUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdC5uZXdTeW50YXhFcnJvcigiSWxsZWdhbCBwcm9wZXJ0eSBhY2Nlc3NvciIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgbi5wdXNoKEZ1bmN0aW9uRGVmaW5pdGlvbih0LCB4LCB0cnVlLCBFWFBSRVNTRURfRk9STSkpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnRzID0gdC5ibG9ja0NvbW1lbnRzOw0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElERU5USUZJRVI6IGNhc2UgTlVNQkVSOiBjYXNlIFNUUklORzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG5ldyBOb2RlKHQsIHsgdHlwZTogSURFTlRJRklFUiB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSSUdIVF9DVVJMWToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5lY21hM09ubHlNb2RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB0Lm5ld1N5bnRheEVycm9yKCJJbGxlZ2FsIHRyYWlsaW5nICwiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvYmplY3RfaW5pdDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC50b2tlbi52YWx1ZSBpbiBkZWZpbml0aW9ucy5rZXl3b3Jkcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG5ldyBOb2RlKHQsIHsgdHlwZTogSURFTlRJRklFUiB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIkludmFsaWQgcHJvcGVydHkgbmFtZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQubWF0Y2goQ09MT04pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbjIgPSBuZXcgTm9kZSh0LCB7IHR5cGU6IFBST1BFUlRZX0lOSVQgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbjIucHVzaChpZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbjIucHVzaChBc3NpZ25FeHByZXNzaW9uKHQsIHgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuMi5ibG9ja0NvbW1lbnRzID0gY29tbWVudHM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbi5wdXNoKG4yKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCwgZS5nLiwgfHZhciB7eCwgeX0gPSBvfCBhcyBkZXN0cnVjdHVyaW5nIHNob3J0aGFuZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB8dmFyIHt4OiB4LCB5OiB5fSA9IG98LCBwZXIgcHJvcG9zZWQgSlMyL0VTNCBmb3IgSlMxLjguDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQucGVlaygpICE9PSBDT01NQSAmJiB0LnBlZWsoKSAhPT0gUklHSFRfQ1VSTFkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIm1pc3NpbmcgOiBhZnRlciBwcm9wZXJ0eSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4ucHVzaChpZCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IHdoaWxlICh0Lm1hdGNoKENPTU1BKSk7DQogICAgICAgICAgICAgICAgdC5tdXN0TWF0Y2goUklHSFRfQ1VSTFkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBjYXNlIExFRlRfUEFSRU46DQogICAgICAgICAgICBuID0gUGFyZW5FeHByZXNzaW9uKHQsIHgpOw0KICAgICAgICAgICAgdC5tdXN0TWF0Y2goUklHSFRfUEFSRU4pOw0KICAgICAgICAgICAgbi5wYXJlbnRoZXNpemVkID0gdHJ1ZTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgY2FzZSBMRVQ6DQogICAgICAgICAgICBuID0gTGV0QmxvY2sodCwgeCwgZmFsc2UpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBjYXNlIE5VTEw6IGNhc2UgVEhJUzogY2FzZSBUUlVFOiBjYXNlIEZBTFNFOg0KICAgICAgICAgIGNhc2UgSURFTlRJRklFUjogY2FzZSBOVU1CRVI6IGNhc2UgU1RSSU5HOiBjYXNlIFJFR0VYUDoNCiAgICAgICAgICAgIG4gPSBuZXcgTm9kZSh0KTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIm1pc3Npbmcgb3BlcmFuZCIpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIHBhcnNlIDo6IChzb3VyY2UsIGZpbGVuYW1lLCBsaW5lIG51bWJlcikgLT4gbm9kZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHBhcnNlKHMsIGYsIGwpIHsNCiAgICAgICAgdmFyIHQgPSBuZXcgbGV4ZXIuVG9rZW5pemVyKHMsIGYsIGwpOw0KICAgICAgICB2YXIgbiA9IFNjcmlwdCh0LCBmYWxzZSwgZmFsc2UpOw0KICAgICAgICBpZiAoIXQuZG9uZSkNCiAgICAgICAgICAgIHRocm93IHQubmV3U3ludGF4RXJyb3IoIlN5bnRheCBlcnJvciIpOw0KDQogICAgICAgIHJldHVybiBuOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogcGFyc2VTdGRpbiA6OiAoc291cmNlLCB7bGluZSBudW1iZXJ9LCBzdHJpbmcsIChzdHJpbmcpIC0+IGJvb2xlYW4pIC0+IHByb2dyYW0gbm9kZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHBhcnNlU3RkaW4ocywgbG4sIHByZWZpeCwgaXNDb21tYW5kKSB7DQogICAgICAgIC8vIHRoZSBzcGVjaWFsIC5iZWdpbiBjb21tYW5kIGlzIG9ubHkgcmVjb2duaXplZCBhdCB0aGUgYmVnaW5uaW5nDQogICAgICAgIGlmIChzLm1hdGNoKC9eW1xzXSpcLmJlZ2luW1xzXSokLykpIHsNCiAgICAgICAgICAgICsrbG4udmFsdWU7DQogICAgICAgICAgICByZXR1cm4gcGFyc2VNdWx0aWxpbmUobG4sIHByZWZpeCk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBjb21tYW5kcyBhdCB0aGUgYmVnaW5uaW5nIGFyZSB0cmVhdGVkIGFzIHRoZSBlbnRpcmUgaW5wdXQNCiAgICAgICAgaWYgKGlzQ29tbWFuZChzLnRyaW0oKSkpDQogICAgICAgICAgICBzID0gIiI7DQoNCiAgICAgICAgZm9yICg7Oykgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICB2YXIgdCA9IG5ldyBsZXhlci5Ub2tlbml6ZXIocywgInN0ZGluIiwgbG4udmFsdWUpOw0KICAgICAgICAgICAgICAgIHZhciBuID0gU2NyaXB0KHQsIGZhbHNlLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgbG4udmFsdWUgPSB0LmxpbmVubzsNCiAgICAgICAgICAgICAgICByZXR1cm4gbjsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICBpZiAoIXQudW5leHBlY3RlZEVPRikNCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsNCg0KICAgICAgICAgICAgICAgIC8vIGNvbW1hbmRzIGluIHRoZSBtaWRkbGUgYXJlIG5vdCB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIGlucHV0DQogICAgICAgICAgICAgICAgdmFyIG1vcmU7DQogICAgICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4KQ0KICAgICAgICAgICAgICAgICAgICAgICAgcHV0c3RyKHByZWZpeCk7DQogICAgICAgICAgICAgICAgICAgIG1vcmUgPSByZWFkbGluZSgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vcmUpDQogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOw0KICAgICAgICAgICAgICAgIH0gd2hpbGUgKGlzQ29tbWFuZChtb3JlLnRyaW0oKSkpOw0KDQogICAgICAgICAgICAgICAgcyArPSAiXG4iICsgbW9yZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qDQogICAgICogcGFyc2VNdWx0aWxpbmUgOjogKHtsaW5lIG51bWJlcn0sIHN0cmluZyB8IG51bGwpIC0+IHByb2dyYW0gbm9kZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHBhcnNlTXVsdGlsaW5lKGxuLCBwcmVmaXgpIHsNCiAgICAgICAgdmFyIHMgPSAiIjsNCiAgICAgICAgZm9yICg7Oykgew0KICAgICAgICAgICAgaWYgKHByZWZpeCkNCiAgICAgICAgICAgICAgICBwdXRzdHIocHJlZml4KTsNCiAgICAgICAgICAgIHZhciBtb3JlID0gcmVhZGxpbmUoKTsNCiAgICAgICAgICAgIGlmIChtb3JlID09PSBudWxsKQ0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgLy8gdGhlIG9ubHkgY29tbWFuZCByZWNvZ25pemVkIGluIG11bHRpbGluZSBtb2RlIGlzIC5lbmQNCiAgICAgICAgICAgIGlmIChtb3JlLm1hdGNoKC9eW1xzXSpcLmVuZFtcc10qJC8pKQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgcyArPSAiXG4iICsgbW9yZTsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgdCA9IG5ldyBsZXhlci5Ub2tlbml6ZXIocywgInN0ZGluIiwgbG4udmFsdWUpOw0KICAgICAgICB2YXIgbiA9IFNjcmlwdCh0LCBmYWxzZSwgZmFsc2UpOw0KICAgICAgICBsbi52YWx1ZSA9IHQubGluZW5vOw0KICAgICAgICByZXR1cm4gbjsNCiAgICB9DQoNCiAgICBtb2R1bGUuZXhwb3J0cyA9IHsNCiAgICAgICAgcGFyc2U6IHBhcnNlLA0KICAgICAgICBwYXJzZVN0ZGluOiBwYXJzZVN0ZGluLA0KICAgICAgICBOb2RlOiBOb2RlLA0KICAgICAgICBTeW50aGV0aWNOb2RlOiBTeW50aGV0aWNOb2RlLA0KICAgICAgICBERUNMQVJFRF9GT1JNOiBERUNMQVJFRF9GT1JNLA0KICAgICAgICBFWFBSRVNTRURfRk9STTogRVhQUkVTU0VEX0ZPUk0sDQogICAgICAgIFNUQVRFTUVOVF9GT1JNOiBTVEFURU1FTlRfRk9STSwNCiAgICAgICAgVG9rZW5pemVyOiBsZXhlci5Ub2tlbml6ZXIsDQogICAgICAgIEZ1bmN0aW9uRGVmaW5pdGlvbjogRnVuY3Rpb25EZWZpbml0aW9uLA0KICAgICAgICBNb2R1bGU6IE1vZHVsZSwNCiAgICAgICAgRXhwb3J0OiBFeHBvcnQNCiAgICB9Ow0KDQp9KTsvKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9Nzg6ICovDQovKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqDQogKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjENCiAqDQogKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24NCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvDQogKg0KICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywNCiAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQ0KICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUNCiAqIExpY2Vuc2UuDQogKg0KICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE5hcmNpc3N1cyBKYXZhU2NyaXB0IGVuZ2luZS4NCiAqDQogKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMNCiAqIEJyZW5kYW4gRWljaCA8YnJlbmRhbkBtb3ppbGxhLm9yZz4uDQogKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA0DQogKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQogKg0KICogQ29udHJpYnV0b3Iocyk6DQogKiAgIFRvbSBBdXN0aW4gPHRhdXN0aW5AdWNzYy5lZHU+DQogKiAgIEJyZW5kYW4gRWljaCA8YnJlbmRhbkBtb3ppbGxhLm9yZz4NCiAqICAgU2h1LVl1IEd1byA8c2h1QHJmcm4ub3JnPg0KICogICBEYXZlIEhlcm1hbiA8ZGhlcm1hbkBtb3ppbGxhLmNvbT4NCiAqICAgRGltaXRyaXMgVmFyZG91bGFraXMgPGRpbXZhckBjY3MubmV1LmVkdT4NCiAqICAgUGF0cmljayBXYWx0b24gPHBjd2FsdG9uQG1vemlsbGEuY29tPg0KICoNCiAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mDQogKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3INCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLA0KICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQNCiAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5DQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvDQogKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cg0KICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UNCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlDQogKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyDQogKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLg0KICoNCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovDQoNCi8qDQogKiBOYXJjaXNzdXMgLSBKUyBpbXBsZW1lbnRlZCBpbiBKUy4NCiAqDQogKiBMZXhpY2FsIHNjYW5uZXIuDQogKi8NCg0KIGRlZmluZSgnYWNlL25hcmNpc3N1cy9qc2xleCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL25hcmNpc3N1cy9qc2RlZnMnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7DQoNCiAgICB2YXIgZGVmaW5pdGlvbnMgPSByZXF1aXJlKCIuL2pzZGVmcyIpOw0KDQogICAgLy8gU2V0IGNvbnN0YW50cyBpbiB0aGUgbG9jYWwgc2NvcGUuDQogICAgZXZhbChkZWZpbml0aW9ucy5jb25zdHMpOw0KDQogICAgLy8gQmFubmVkIGtleXdvcmRzIGJ5IGxhbmd1YWdlIHZlcnNpb24NCiAgICBjb25zdCBibGFja0xpc3RzID0geyAxNjA6IHt9LCAxODU6IHt9LCBoYXJtb255OiB7fSB9Ow0KICAgIGJsYWNrTGlzdHNbMTYwXVtMRVRdID0gdHJ1ZTsNCiAgICBibGFja0xpc3RzWzE2MF1bTU9EVUxFXSA9IHRydWU7DQogICAgYmxhY2tMaXN0c1sxNjBdW1lJRUxEXSA9IHRydWU7DQogICAgYmxhY2tMaXN0c1sxODVdW01PRFVMRV0gPSB0cnVlOw0KDQogICAgLy8gQnVpbGQgdXAgYSB0cmllIG9mIG9wZXJhdG9yIHRva2Vucy4NCiAgICB2YXIgb3BUb2tlbnMgPSB7fTsNCiAgICBmb3IgKHZhciBvcCBpbiBkZWZpbml0aW9ucy5vcFR5cGVOYW1lcykgew0KICAgICAgICBpZiAob3AgPT09ICdcbicgfHwgb3AgPT09ICcuJykNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KDQogICAgICAgIHZhciBub2RlID0gb3BUb2tlbnM7DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3AubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaCA9IG9wW2ldOw0KICAgICAgICAgICAgaWYgKCEoY2ggaW4gbm9kZSkpDQogICAgICAgICAgICAgICAgbm9kZVtjaF0gPSB7fTsNCiAgICAgICAgICAgIG5vZGUgPSBub2RlW2NoXTsNCiAgICAgICAgICAgIG5vZGUub3AgPSBvcDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qDQogICAgICogVG9rZW5pemVyIDo6IChzb3VyY2UsIGZpbGVuYW1lLCBsaW5lIG51bWJlcikgLT4gVG9rZW5pemVyDQogICAgICovDQogICAgZnVuY3Rpb24gVG9rZW5pemVyKHMsIGYsIGwpIHsNCiAgICAgICAgdGhpcy5jdXJzb3IgPSAwOw0KICAgICAgICB0aGlzLnNvdXJjZSA9IFN0cmluZyhzKTsNCiAgICAgICAgdGhpcy50b2tlbnMgPSBbXTsNCiAgICAgICAgdGhpcy50b2tlbkluZGV4ID0gMDsNCiAgICAgICAgdGhpcy5sb29rYWhlYWQgPSAwOw0KICAgICAgICB0aGlzLnNjYW5OZXdsaW5lcyA9IGZhbHNlOw0KICAgICAgICB0aGlzLnVuZXhwZWN0ZWRFT0YgPSBmYWxzZTsNCiAgICAgICAgdGhpcy5maWxlbmFtZSA9IGYgfHwgIiI7DQogICAgICAgIHRoaXMubGluZW5vID0gbCB8fCAxOw0KICAgICAgICB0aGlzLmJsYWNrTGlzdCA9IGJsYWNrTGlzdHNbTmFyY2lzc3VzLm9wdGlvbnMudmVyc2lvbl07DQogICAgICAgIHRoaXMuYmxvY2tDb21tZW50cyA9IG51bGw7DQogICAgfQ0KDQogICAgVG9rZW5pemVyLnByb3RvdHlwZSA9IHsNCiAgICAgICAgZ2V0IGRvbmUoKSB7DQogICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCBzY2FuT3BlcmFuZCB0byB0cnVlIGhlcmUgYmVjYXVzZSB0aGUgZmlyc3QgdGhpbmcNCiAgICAgICAgICAgIC8vIG1pZ2h0IGJlIGEgcmVnZXhwLg0KICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVlayh0cnVlKSA9PT0gRU5EOw0KICAgICAgICB9LA0KDQogICAgICAgIGdldCB0b2tlbigpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdOw0KICAgICAgICB9LA0KDQogICAgICAgIG1hdGNoOiBmdW5jdGlvbiAodHQsIHNjYW5PcGVyYW5kKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoc2Nhbk9wZXJhbmQpID09PSB0dCB8fCB0aGlzLnVuZ2V0KCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgbXVzdE1hdGNoOiBmdW5jdGlvbiAodHQpIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCh0dCkpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm5ld1N5bnRheEVycm9yKCJNaXNzaW5nICIgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMudG9rZW5zW3R0XS50b0xvd2VyQ2FzZSgpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOw0KICAgICAgICB9LA0KDQogICAgICAgIHBlZWs6IGZ1bmN0aW9uIChzY2FuT3BlcmFuZCkgew0KICAgICAgICAgICAgdmFyIHR0LCBuZXh0Ow0KICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkKSB7DQogICAgICAgICAgICAgICAgbmV4dCA9IHRoaXMudG9rZW5zWyh0aGlzLnRva2VuSW5kZXggKyB0aGlzLmxvb2thaGVhZCkgJiAzXTsNCiAgICAgICAgICAgICAgICB0dCA9ICh0aGlzLnNjYW5OZXdsaW5lcyAmJiBuZXh0LmxpbmVubyAhPT0gdGhpcy5saW5lbm8pDQogICAgICAgICAgICAgICAgICAgICA/IE5FV0xJTkUNCiAgICAgICAgICAgICAgICAgICAgIDogbmV4dC50eXBlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0dCA9IHRoaXMuZ2V0KHNjYW5PcGVyYW5kKTsNCiAgICAgICAgICAgICAgICB0aGlzLnVuZ2V0KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gdHQ7DQogICAgICAgIH0sDQoNCiAgICAgICAgcGVla09uU2FtZUxpbmU6IGZ1bmN0aW9uIChzY2FuT3BlcmFuZCkgew0KICAgICAgICAgICAgdGhpcy5zY2FuTmV3bGluZXMgPSB0cnVlOw0KICAgICAgICAgICAgdmFyIHR0ID0gdGhpcy5wZWVrKHNjYW5PcGVyYW5kKTsNCiAgICAgICAgICAgIHRoaXMuc2Nhbk5ld2xpbmVzID0gZmFsc2U7DQogICAgICAgICAgICByZXR1cm4gdHQ7DQogICAgICAgIH0sDQoNCiAgICAgICAgbGFzdEJsb2NrQ29tbWVudDogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5ibG9ja0NvbW1lbnRzLmxlbmd0aDsNCiAgICAgICAgICAgIHJldHVybiBsZW5ndGggPyB0aGlzLmJsb2NrQ29tbWVudHNbbGVuZ3RoIC0gMV0gOiBudWxsOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIEVhdCBjb21tZW50cyBhbmQgd2hpdGVzcGFjZS4NCiAgICAgICAgc2tpcDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5zb3VyY2U7DQogICAgICAgICAgICB0aGlzLmJsb2NrQ29tbWVudHMgPSBbXTsNCiAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICB2YXIgY2ggPSBpbnB1dFt0aGlzLmN1cnNvcisrXTsNCiAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGlucHV0W3RoaXMuY3Vyc29yXTsNCiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgXHIsIFxyXG4gYW5kIChhbHdheXMgcHJlZmVyYWJsZSkgXG4NCiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIFxuLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoaXMgYXQgYWxsDQogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnXG4nKSBjb250aW51ZTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHdlIHdhbnQgdG8gY29uc2lkZXIgdGhpcyBhcyBhIG5ld2xpbmUNCiAgICAgICAgICAgICAgICAgICAgY2ggPSAnXG4nOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xuJyAmJiAhdGhpcy5zY2FuTmV3bGluZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lbm8rKzsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnLycgJiYgbmV4dCA9PT0gJyonKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50U3RhcnQgPSArK3RoaXMuY3Vyc29yOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGlucHV0W3RoaXMuY3Vyc29yKytdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSB1bmRlZmluZWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5uZXdTeW50YXhFcnJvcigiVW50ZXJtaW5hdGVkIGNvbW1lbnQiKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnKicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gaW5wdXRbdGhpcy5jdXJzb3JdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnLycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnRFbmQgPSB0aGlzLmN1cnNvciAtIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yKys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcbicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVubysrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tDb21tZW50cy5wdXNoKGlucHV0LnN1YnN0cmluZyhjb21tZW50U3RhcnQsIGNvbW1lbnRFbmQpKTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnLycgJiYgbmV4dCA9PT0gJy8nKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yKys7DQogICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gaW5wdXRbdGhpcy5jdXJzb3IrK107DQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gaW5wdXRbdGhpcy5jdXJzb3JdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSB1bmRlZmluZWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgXHJcbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSAnXG4nKSBjaCA9ICdcbic7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xuJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5OZXdsaW5lcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci0tOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZW5vKys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKGNoIGluIGRlZmluaXRpb25zLndoaXRlc3BhY2UpKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLS07DQogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8gTGV4IHRoZSBleHBvbmVudGlhbCBwYXJ0IG9mIGEgbnVtYmVyLCBpZiBwcmVzZW50LiBSZXR1cm4gdHJ1ZSBpZmYgYW4NCiAgICAgICAgLy8gZXhwb25lbnRpYWwgcGFydCB3YXMgZm91bmQuDQogICAgICAgIGxleEV4cG9uZW50OiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuc291cmNlOw0KICAgICAgICAgICAgdmFyIG5leHQgPSBpbnB1dFt0aGlzLmN1cnNvcl07DQogICAgICAgICAgICBpZiAobmV4dCA9PT0gJ2UnIHx8IG5leHQgPT09ICdFJykgew0KICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yKys7DQogICAgICAgICAgICAgICAgY2ggPSBpbnB1dFt0aGlzLmN1cnNvcisrXTsNCiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0gJy0nKQ0KICAgICAgICAgICAgICAgICAgICBjaCA9IGlucHV0W3RoaXMuY3Vyc29yKytdOw0KDQogICAgICAgICAgICAgICAgaWYgKGNoIDwgJzAnIHx8IGNoID4gJzknKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm5ld1N5bnRheEVycm9yKCJNaXNzaW5nIGV4cG9uZW50Iik7DQoNCiAgICAgICAgICAgICAgICBkbyB7DQogICAgICAgICAgICAgICAgICAgIGNoID0gaW5wdXRbdGhpcy5jdXJzb3IrK107DQogICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7DQogICAgICAgICAgICAgICAgdGhpcy5jdXJzb3ItLTsNCg0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0sDQoNCiAgICAgICAgbGV4WmVyb051bWJlcjogZnVuY3Rpb24gKGNoKSB7DQogICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuLCBpbnB1dCA9IHRoaXMuc291cmNlOw0KICAgICAgICAgICAgdG9rZW4udHlwZSA9IE5VTUJFUjsNCg0KICAgICAgICAgICAgY2ggPSBpbnB1dFt0aGlzLmN1cnNvcisrXTsNCiAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7DQogICAgICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgICAgICBjaCA9IGlucHV0W3RoaXMuY3Vyc29yKytdOw0KICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOw0KICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLS07DQoNCiAgICAgICAgICAgICAgICB0aGlzLmxleEV4cG9uZW50KCk7DQogICAgICAgICAgICAgICAgdG9rZW4udmFsdWUgPSBwYXJzZUZsb2F0KHRva2VuLnN0YXJ0LCB0aGlzLmN1cnNvcik7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgew0KICAgICAgICAgICAgICAgIGRvIHsNCiAgICAgICAgICAgICAgICAgICAgY2ggPSBpbnB1dFt0aGlzLmN1cnNvcisrXTsNCiAgICAgICAgICAgICAgICB9IHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpIHx8DQogICAgICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpKTsNCiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci0tOw0KDQogICAgICAgICAgICAgICAgdG9rZW4udmFsdWUgPSBwYXJzZUludChpbnB1dC5zdWJzdHJpbmcodG9rZW4uc3RhcnQsIHRoaXMuY3Vyc29yKSk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpIHsNCiAgICAgICAgICAgICAgICBkbyB7DQogICAgICAgICAgICAgICAgICAgIGNoID0gaW5wdXRbdGhpcy5jdXJzb3IrK107DQogICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc3Jyk7DQogICAgICAgICAgICAgICAgdGhpcy5jdXJzb3ItLTsNCg0KICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlID0gcGFyc2VJbnQoaW5wdXQuc3Vic3RyaW5nKHRva2VuLnN0YXJ0LCB0aGlzLmN1cnNvcikpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci0tOw0KICAgICAgICAgICAgICAgIHRoaXMubGV4RXhwb25lbnQoKTsgICAgIC8vIDBFMSwgJmMuDQogICAgICAgICAgICAgICAgdG9rZW4udmFsdWUgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIGxleE51bWJlcjogZnVuY3Rpb24gKGNoKSB7DQogICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuLCBpbnB1dCA9IHRoaXMuc291cmNlOw0KICAgICAgICAgICAgdG9rZW4udHlwZSA9IE5VTUJFUjsNCg0KICAgICAgICAgICAgdmFyIGZsb2F0aW5nID0gZmFsc2U7DQogICAgICAgICAgICBkbyB7DQogICAgICAgICAgICAgICAgY2ggPSBpbnB1dFt0aGlzLmN1cnNvcisrXTsNCiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcuJyAmJiAhZmxvYXRpbmcpIHsNCiAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmcgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICBjaCA9IGlucHV0W3RoaXMuY3Vyc29yKytdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOw0KDQogICAgICAgICAgICB0aGlzLmN1cnNvci0tOw0KDQogICAgICAgICAgICB2YXIgZXhwb25lbnQgPSB0aGlzLmxleEV4cG9uZW50KCk7DQogICAgICAgICAgICBmbG9hdGluZyA9IGZsb2F0aW5nIHx8IGV4cG9uZW50Ow0KDQogICAgICAgICAgICB2YXIgc3RyID0gaW5wdXQuc3Vic3RyaW5nKHRva2VuLnN0YXJ0LCB0aGlzLmN1cnNvcik7DQogICAgICAgICAgICB0b2tlbi52YWx1ZSA9IGZsb2F0aW5nID8gcGFyc2VGbG9hdChzdHIpIDogcGFyc2VJbnQoc3RyKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBsZXhEb3Q6IGZ1bmN0aW9uIChjaCkgew0KICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy50b2tlbiwgaW5wdXQgPSB0aGlzLnNvdXJjZTsNCiAgICAgICAgICAgIHZhciBuZXh0ID0gaW5wdXRbdGhpcy5jdXJzb3JdOw0KICAgICAgICAgICAgaWYgKG5leHQgPj0gJzAnICYmIG5leHQgPD0gJzknKSB7DQogICAgICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgICAgICBjaCA9IGlucHV0W3RoaXMuY3Vyc29yKytdOw0KICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOw0KICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLS07DQoNCiAgICAgICAgICAgICAgICB0aGlzLmxleEV4cG9uZW50KCk7DQoNCiAgICAgICAgICAgICAgICB0b2tlbi50eXBlID0gTlVNQkVSOw0KICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlID0gcGFyc2VGbG9hdCh0b2tlbi5zdGFydCwgdGhpcy5jdXJzb3IpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0b2tlbi50eXBlID0gRE9UOw0KICAgICAgICAgICAgICAgIHRva2VuLmFzc2lnbk9wID0gbnVsbDsNCiAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSA9ICcuJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBsZXhTdHJpbmc6IGZ1bmN0aW9uIChjaCkgew0KICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy50b2tlbiwgaW5wdXQgPSB0aGlzLnNvdXJjZTsNCiAgICAgICAgICAgIHRva2VuLnR5cGUgPSBTVFJJTkc7DQoNCiAgICAgICAgICAgIHZhciBoYXNFc2NhcGVzID0gZmFsc2U7DQogICAgICAgICAgICB2YXIgZGVsaW0gPSBjaDsNCiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPD0gdGhpcy5jdXJzb3IpDQogICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5uZXdTeW50YXhFcnJvcigiVW50ZXJtaW5hdGVkIHN0cmluZyBsaXRlcmFsIik7DQogICAgICAgICAgICB3aGlsZSAoKGNoID0gaW5wdXRbdGhpcy5jdXJzb3IrK10pICE9PSBkZWxpbSkgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnNvciA9PSBpbnB1dC5sZW5ndGgpDQogICAgICAgICAgICAgICAgICAgIHRocm93IHRoaXMubmV3U3ludGF4RXJyb3IoIlVudGVybWluYXRlZCBzdHJpbmcgbGl0ZXJhbCIpOw0KICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJykgew0KICAgICAgICAgICAgICAgICAgICBoYXNFc2NhcGVzID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCsrdGhpcy5jdXJzb3IgPT0gaW5wdXQubGVuZ3RoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5uZXdTeW50YXhFcnJvcigiVW50ZXJtaW5hdGVkIHN0cmluZyBsaXRlcmFsIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0b2tlbi52YWx1ZSA9IGhhc0VzY2FwZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBldmFsKGlucHV0LnN1YnN0cmluZyh0b2tlbi5zdGFydCwgdGhpcy5jdXJzb3IpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0LnN1YnN0cmluZyh0b2tlbi5zdGFydCArIDEsIHRoaXMuY3Vyc29yIC0gMSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgbGV4UmVnRXhwOiBmdW5jdGlvbiAoY2gpIHsNCiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW4sIGlucHV0ID0gdGhpcy5zb3VyY2U7DQogICAgICAgICAgICB0b2tlbi50eXBlID0gUkVHRVhQOw0KDQogICAgICAgICAgICBkbyB7DQogICAgICAgICAgICAgICAgY2ggPSBpbnB1dFt0aGlzLmN1cnNvcisrXTsNCiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IrKzsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnWycpIHsNCiAgICAgICAgICAgICAgICAgICAgZG8gew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSB1bmRlZmluZWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5uZXdTeW50YXhFcnJvcigiVW50ZXJtaW5hdGVkIGNoYXJhY3RlciBjbGFzcyIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IrKzsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBpbnB1dFt0aGlzLmN1cnNvcisrXTsNCiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT09ICddJyk7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgIHRocm93IHRoaXMubmV3U3ludGF4RXJyb3IoIlVudGVybWluYXRlZCByZWdleCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9PSAnLycpOw0KDQogICAgICAgICAgICBkbyB7DQogICAgICAgICAgICAgICAgY2ggPSBpbnB1dFt0aGlzLmN1cnNvcisrXTsNCiAgICAgICAgICAgIH0gd2hpbGUgKGNoID49ICdhJyAmJiBjaCA8PSAneicpOw0KDQogICAgICAgICAgICB0aGlzLmN1cnNvci0tOw0KDQogICAgICAgICAgICB0b2tlbi52YWx1ZSA9IGV2YWwoaW5wdXQuc3Vic3RyaW5nKHRva2VuLnN0YXJ0LCB0aGlzLmN1cnNvcikpOw0KICAgICAgICB9LA0KDQogICAgICAgIGxleE9wOiBmdW5jdGlvbiAoY2gpIHsNCiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW4sIGlucHV0ID0gdGhpcy5zb3VyY2U7DQoNCiAgICAgICAgICAgIC8vIEEgYml0IHVnbHksIGJ1dCBpdCBzZWVtcyB3YXN0ZWZ1bCB0byB3cml0ZSBhIHRyaWUgbG9va3VwIHJvdXRpbmUNCiAgICAgICAgICAgIC8vIGZvciBvbmx5IDMgY2hhcmFjdGVycy4uLg0KICAgICAgICAgICAgdmFyIG5vZGUgPSBvcFRva2Vuc1tjaF07DQogICAgICAgICAgICB2YXIgbmV4dCA9IGlucHV0W3RoaXMuY3Vyc29yXTsNCiAgICAgICAgICAgIGlmIChuZXh0IGluIG5vZGUpIHsNCiAgICAgICAgICAgICAgICBub2RlID0gbm9kZVtuZXh0XTsNCiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvcisrOw0KICAgICAgICAgICAgICAgIG5leHQgPSBpbnB1dFt0aGlzLmN1cnNvcl07DQogICAgICAgICAgICAgICAgaWYgKG5leHQgaW4gbm9kZSkgew0KICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZVtuZXh0XTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IrKzsNCiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGlucHV0W3RoaXMuY3Vyc29yXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBvcCA9IG5vZGUub3A7DQogICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnMuYXNzaWduT3BzW29wXSAmJiBpbnB1dFt0aGlzLmN1cnNvcl0gPT09ICc9Jykgew0KICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yKys7DQogICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9IEFTU0lHTjsNCiAgICAgICAgICAgICAgICB0b2tlbi5hc3NpZ25PcCA9IGRlZmluaXRpb25zLnRva2VuSWRzW2RlZmluaXRpb25zLm9wVHlwZU5hbWVzW29wXV07DQogICAgICAgICAgICAgICAgb3AgKz0gJz0nOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0b2tlbi50eXBlID0gZGVmaW5pdGlvbnMudG9rZW5JZHNbZGVmaW5pdGlvbnMub3BUeXBlTmFtZXNbb3BdXTsNCiAgICAgICAgICAgICAgICB0b2tlbi5hc3NpZ25PcCA9IG51bGw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHRva2VuLnZhbHVlID0gb3A7DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8gRklYTUU6IFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlcw0KICAgICAgICBsZXhJZGVudDogZnVuY3Rpb24gKGNoKSB7DQogICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuOw0KICAgICAgICAgICAgdmFyIGlkID0gY2g7DQoNCiAgICAgICAgICAgIHdoaWxlICgoY2ggPSB0aGlzLmdldFZhbGlkSWRlbnRpZmllckNoYXIoZmFsc2UpKSAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgIGlkICs9IGNoOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0b2tlbi50eXBlID0gZGVmaW5pdGlvbnMua2V5d29yZHNbaWRdIHx8IElERU5USUZJRVI7DQogICAgICAgICAgICBpZiAodG9rZW4udHlwZSBpbiB0aGlzLmJsYWNrTGlzdCkgew0KICAgICAgICAgICAgICAgIC8vIGJhbm5lZCBrZXl3b3JkLCB0aGlzIGlzIGFuIGlkZW50aWZpZXINCiAgICAgICAgICAgICAgICB0b2tlbi50eXBlID0gSURFTlRJRklFUjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRva2VuLnZhbHVlID0gaWQ7DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCiAgICAgICAgICogVG9rZW5pemVyLmdldCA6OiB2b2lkIC0+IHRva2VuIHR5cGUNCiAgICAgICAgICoNCiAgICAgICAgICogQ29uc3VtZSBpbnB1dCAqb25seSogaWYgdGhlcmUgaXMgbm8gbG9va2FoZWFkLg0KICAgICAgICAgKiBEaXNwYXRjaCB0byB0aGUgYXBwcm9wcmlhdGUgbGV4aW5nIGZ1bmN0aW9uIGRlcGVuZGluZyBvbiB0aGUgaW5wdXQuDQogICAgICAgICAqLw0KICAgICAgICBnZXQ6IGZ1bmN0aW9uIChzY2FuT3BlcmFuZCkgew0KICAgICAgICAgICAgdmFyIHRva2VuOw0KICAgICAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkKSB7DQogICAgICAgICAgICAgICAgLS10aGlzLmxvb2thaGVhZDsNCiAgICAgICAgICAgICAgICB0aGlzLnRva2VuSW5kZXggPSAodGhpcy50b2tlbkluZGV4ICsgMSkgJiAzOw0KICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XTsNCiAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gTkVXTElORSB8fCB0aGlzLnNjYW5OZXdsaW5lcykNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLnR5cGU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHRoaXMuc2tpcCgpOw0KDQogICAgICAgICAgICB0aGlzLnRva2VuSW5kZXggPSAodGhpcy50b2tlbkluZGV4ICsgMSkgJiAzOw0KICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdOw0KICAgICAgICAgICAgaWYgKCF0b2tlbikNCiAgICAgICAgICAgICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdID0gdG9rZW4gPSB7fTsNCg0KICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5zb3VyY2U7DQogICAgICAgICAgICBpZiAodGhpcy5jdXJzb3IgPj0gaW5wdXQubGVuZ3RoKQ0KICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbi50eXBlID0gRU5EOw0KDQogICAgICAgICAgICB0b2tlbi5zdGFydCA9IHRoaXMuY3Vyc29yOw0KICAgICAgICAgICAgdG9rZW4ubGluZW5vID0gdGhpcy5saW5lbm87DQoNCiAgICAgICAgICAgIHZhciBpY2ggPSB0aGlzLmdldFZhbGlkSWRlbnRpZmllckNoYXIodHJ1ZSk7DQogICAgICAgICAgICB2YXIgY2ggPSAoaWNoID09PSBudWxsKSA/IGlucHV0W3RoaXMuY3Vyc29yKytdIDogbnVsbDsNCiAgICAgICAgICAgIGlmIChpY2ggIT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmxleElkZW50KGljaCk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHNjYW5PcGVyYW5kICYmIGNoID09PSAnLycpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmxleFJlZ0V4cChjaCk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGNoIGluIG9wVG9rZW5zKSB7DQogICAgICAgICAgICAgICAgdGhpcy5sZXhPcChjaCk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnLicpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmxleERvdChjaCk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49ICcxJyAmJiBjaCA8PSAnOScpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmxleE51bWJlcihjaCk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnMCcpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmxleFplcm9OdW1iZXIoY2gpOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJyInIHx8IGNoID09PSAiJyIpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmxleFN0cmluZyhjaCk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Nhbk5ld2xpbmVzICYmIChjaCA9PT0gJ1xuJyB8fCBjaCA9PT0gJ1xyJykpIHsNCiAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIHdhcyBhIFxyLCBsb29rIGZvciBcclxuDQogICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXHInICYmIGlucHV0W3RoaXMuY3Vyc29yXSA9PT0gJ1xuJykgdGhpcy5jdXJzb3IrKzsNCiAgICAgICAgICAgICAgICB0b2tlbi50eXBlID0gTkVXTElORTsNCiAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSA9ICdcbic7DQogICAgICAgICAgICAgICAgdGhpcy5saW5lbm8rKzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5uZXdTeW50YXhFcnJvcigiSWxsZWdhbCB0b2tlbiIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0b2tlbi5lbmQgPSB0aGlzLmN1cnNvcjsNCiAgICAgICAgICAgIHJldHVybiB0b2tlbi50eXBlOw0KICAgICAgICB9LA0KDQogICAgICAgIC8qDQogICAgICAgICAqIFRva2VuaXplci51bmdldCA6OiB2b2lkIC0+IHVuZGVmaW5lZA0KICAgICAgICAgKg0KICAgICAgICAgKiBNYXRjaCBkZXBlbmRzIG9uIHVuZ2V0IHJldHVybmluZyB1bmRlZmluZWQuDQogICAgICAgICAqLw0KICAgICAgICB1bmdldDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKCsrdGhpcy5sb29rYWhlYWQgPT09IDQpIHRocm93ICJQQU5JQzogdG9vIG11Y2ggbG9va2FoZWFkISI7DQogICAgICAgICAgICB0aGlzLnRva2VuSW5kZXggPSAodGhpcy50b2tlbkluZGV4IC0gMSkgJiAzOw0KICAgICAgICB9LA0KDQogICAgICAgIG5ld1N5bnRheEVycm9yOiBmdW5jdGlvbiAobSkgew0KICAgICAgICAgICAgbSA9ICh0aGlzLmZpbGVuYW1lID8gdGhpcy5maWxlbmFtZSArICI6IiA6ICIiKSArIHRoaXMubGluZW5vICsgIjogIiArIG07DQogICAgICAgICAgICB2YXIgZSA9IG5ldyBTeW50YXhFcnJvcihtLCB0aGlzLmZpbGVuYW1lLCB0aGlzLmxpbmVubyk7DQogICAgICAgICAgICBlLnNvdXJjZSA9IHRoaXMuc291cmNlOw0KICAgICAgICAgICAgZS5jdXJzb3IgPSB0aGlzLmxvb2thaGVhZA0KICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudG9rZW5zWyh0aGlzLnRva2VuSW5kZXggKyB0aGlzLmxvb2thaGVhZCkgJiAzXS5zdGFydA0KICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY3Vyc29yOw0KICAgICAgICAgICAgcmV0dXJuIGU7DQogICAgICAgIH0sDQoNCiAgICAgICAgLyogR2V0cyBhIHNpbmdsZSB2YWxpZCBpZGVudGlmaWVyIGNoYXIgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCBvciBudWxsDQogICAgICAgICAqIGlmIHRoZXJlIGlzIG5vbmUuDQogICAgICAgICAqIFNpbmNlIEphdmFTY3JpcHQgcHJvdmlkZXMgbm8gY29udmVuaWVudCB3YXkgdG8gZGV0ZXJtaW5lIGlmIGENCiAgICAgICAgICogY2hhcmFjdGVyIGlzIGluIGEgcGFydGljdWxhciBVbmljb2RlIGNhdGVnb3J5LCB3ZSB1c2UNCiAgICAgICAgICogbWV0YWNpcmN1bGFyaXR5IHRvIGFjY29tcGxpc2ggdGhpcyAob2ggeWVhYWFhaCEpICovDQogICAgICAgIGdldFZhbGlkSWRlbnRpZmllckNoYXI6IGZ1bmN0aW9uKGZpcnN0KSB7DQogICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLnNvdXJjZTsNCiAgICAgICAgICAgIGlmICh0aGlzLmN1cnNvciA+PSBpbnB1dC5sZW5ndGgpIHJldHVybiBudWxsOw0KICAgICAgICAgICAgdmFyIGNoID0gaW5wdXRbdGhpcy5jdXJzb3JdOw0KDQogICAgICAgICAgICAvLyBmaXJzdCBjaGVjayBmb3IgXHUgZXNjYXBlcw0KICAgICAgICAgICAgaWYgKGNoID09PSAnXFwnICYmIGlucHV0W3RoaXMuY3Vyc29yKzFdID09PSAndScpIHsNCiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGNoYXJhY3RlciB2YWx1ZQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCgNCiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnN1YnN0cmluZyh0aGlzLmN1cnNvciArIDIsIHRoaXMuY3Vyc29yICsgNiksDQogICAgICAgICAgICAgICAgICAgICAgICAxNikpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvciArPSA1Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBjaGVjayBkaXJlY3RseSBmb3IgQVNDSUkNCiAgICAgICAgICAgIGlmIChjaCA8PSAiXHUwMDdGIikgew0KICAgICAgICAgICAgICAgIGlmICgoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8IGNoID09PSAnJCcgfHwgY2ggPT09ICdfJyB8fA0KICAgICAgICAgICAgICAgICAgICAoIWZpcnN0ICYmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IrKzsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICANCiAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBvYmplY3QgdG8gdGVzdCB0aGlzIGluDQogICAgICAgICAgICB2YXIgeCA9IHt9Ow0KICAgICAgICAgICAgeFsieCIrY2hdID0gdHJ1ZTsNCiAgICAgICAgICAgIHhbY2hdID0gdHJ1ZTsNCiAgICANCiAgICAgICAgICAgIC8vIHRoZW4gdXNlIGV2YWwgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYSB2YWxpZCBjaGFyYWN0ZXINCiAgICAgICAgICAgIHZhciB2YWxpZCA9IGZhbHNlOw0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICB2YWxpZCA9IChGdW5jdGlvbigieCIsICJyZXR1cm4gKHguIiArIChmaXJzdD8iIjoieCIpICsgY2ggKyAiKTsiKSh4KSA9PT0gdHJ1ZSk7DQogICAgICAgICAgICB9IGNhdGNoIChleCkge30NCiAgICAgICAgICAgIGlmICh2YWxpZCkgdGhpcy5jdXJzb3IrKzsNCiAgICAgICAgICAgIHJldHVybiAodmFsaWQgPyBjaCA6IG51bGwpOw0KICAgICAgICB9LA0KICAgIH07DQoNCg0KICAgIG1vZHVsZS5leHBvcnRzID0geyBUb2tlbml6ZXI6IFRva2VuaXplciB9Ow0KDQp9KTsNCi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz03ODogKi8NCi8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioNCiAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQ0KICoNCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbg0KICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8NCiAqDQogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLA0KICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlDQogKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KICogTGljZW5zZS4NCiAqDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgTmFyY2lzc3VzIEphdmFTY3JpcHQgZW5naW5lLg0KICoNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcw0KICogQnJlbmRhbiBFaWNoIDxicmVuZGFuQG1vemlsbGEub3JnPi4NCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDQNCiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqDQogKiBDb250cmlidXRvcihzKToNCiAqICAgVG9tIEF1c3RpbiA8dGF1c3RpbkB1Y3NjLmVkdT4NCiAqICAgQnJlbmRhbiBFaWNoIDxicmVuZGFuQG1vemlsbGEub3JnPg0KICogICBTaHUtWXUgR3VvIDxzaHVAcmZybi5vcmc+DQogKiAgIERhdmUgSGVybWFuIDxkaGVybWFuQG1vemlsbGEuY29tPg0KICogICBEaW1pdHJpcyBWYXJkb3VsYWtpcyA8ZGltdmFyQGNjcy5uZXUuZWR1Pg0KICogICBQYXRyaWNrIFdhbHRvbiA8cGN3YWx0b25AbW96aWxsYS5jb20+DQogKg0KICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YNCiAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcg0KICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksDQogKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZA0KICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkNCiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8NCiAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyDQogKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQ0KICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUNCiAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXINCiAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuDQogKg0KICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8NCg0KLyoNCiAqIE5hcmNpc3N1cyAtIEpTIGltcGxlbWVudGVkIGluIEpTLg0KICoNCiAqIFdlbGwta25vd24gY29uc3RhbnRzIGFuZCBsb29rdXAgdGFibGVzLiAgTWFueSBjb25zdHMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZQ0KICogdG9rZW5zIHRhYmxlIHZpYSBldmFsIHRvIG1pbmltaXplIHJlZHVuZGFuY3ksIHNvIGNvbnN1bWVycyBtdXN0IGJlIGNvbXBpbGVkDQogKiBzZXBhcmF0ZWx5IHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBzaW1wbGUgc3dpdGNoLWNhc2UgY29uc3RhbnQgcHJvcGFnYXRpb24NCiAqIGRvbmUgYnkgU3BpZGVyTW9ua2V5Lg0KICovDQoNCmRlZmluZSgnYWNlL25hcmNpc3N1cy9qc2RlZnMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgew0KDQogICAgdmFyIG5hcmNpc3N1cyA9IHsNCiAgICAgICAgb3B0aW9uczogew0KICAgICAgICAgICAgdmVyc2lvbjogMTg1LA0KICAgICAgICAgICAgLy8gR2xvYmFsIHZhcmlhYmxlcyB0byBoaWRlIGZyb20gdGhlIGludGVycHJldGVyDQogICAgICAgICAgICBoaWRkZW5Ib3N0R2xvYmFsczogeyBOYXJjaXNzdXM6IHRydWUgfSwNCiAgICAgICAgICAgIC8vIERlc3VnYXIgU3BpZGVyTW9ua2V5IGxhbmd1YWdlIGV4dGVuc2lvbnM/DQogICAgICAgICAgICBkZXN1Z2FyRXh0ZW5zaW9uczogZmFsc2UNCiAgICAgICAgfSwNCiAgICAgICAgaG9zdFN1cHBvcnRzRXZhbENvbnN0OiAoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHJldHVybiBldmFsKCIoZnVuY3Rpb24ocykgeyBldmFsKHMpOyByZXR1cm4geCB9KSgnY29uc3QgeCA9IHRydWU7JykiKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgIH0pKCksDQogICAgICAgIGhvc3RHbG9iYWw6IHRoaXMNCiAgICB9Ow0KICAgIE5hcmNpc3N1cyA9IG5hcmNpc3N1czsNCg0KICAgIHZhciB0b2tlbnMgPSBbDQogICAgICAgIC8vIEVuZCBvZiBzb3VyY2UuDQogICAgICAgICJFTkQiLA0KDQogICAgICAgIC8vIE9wZXJhdG9ycyBhbmQgcHVuY3R1YXRvcnMuICBTb21lIHBhaXItd2lzZSBvcmRlciBtYXR0ZXJzLCBlLmcuICgrLCAtKQ0KICAgICAgICAvLyBhbmQgKFVOQVJZX1BMVVMsIFVOQVJZX01JTlVTKS4NCiAgICAgICAgIlxuIiwgIjsiLA0KICAgICAgICAiLCIsDQogICAgICAgICI9IiwNCiAgICAgICAgIj8iLCAiOiIsICJDT05ESVRJT05BTCIsDQogICAgICAgICJ8fCIsDQogICAgICAgICImJiIsDQogICAgICAgICJ8IiwNCiAgICAgICAgIl4iLA0KICAgICAgICAiJiIsDQogICAgICAgICI9PSIsICIhPSIsICI9PT0iLCAiIT09IiwNCiAgICAgICAgIjwiLCAiPD0iLCAiPj0iLCAiPiIsDQogICAgICAgICI8PCIsICI+PiIsICI+Pj4iLA0KICAgICAgICAiKyIsICItIiwNCiAgICAgICAgIioiLCAiLyIsICIlIiwNCiAgICAgICAgIiEiLCAifiIsICJVTkFSWV9QTFVTIiwgIlVOQVJZX01JTlVTIiwNCiAgICAgICAgIisrIiwgIi0tIiwNCiAgICAgICAgIi4iLA0KICAgICAgICAiWyIsICJdIiwNCiAgICAgICAgInsiLCAifSIsDQogICAgICAgICIoIiwgIikiLA0KDQogICAgICAgIC8vIE5vbnRlcm1pbmFsIHRyZWUgbm9kZSB0eXBlIGNvZGVzLg0KICAgICAgICAiU0NSSVBUIiwgIkJMT0NLIiwgIkxBQkVMIiwgIkZPUl9JTiIsICJDQUxMIiwgIk5FV19XSVRIX0FSR1MiLCAiSU5ERVgiLA0KICAgICAgICAiQVJSQVlfSU5JVCIsICJPQkpFQ1RfSU5JVCIsICJQUk9QRVJUWV9JTklUIiwgIkdFVFRFUiIsICJTRVRURVIiLA0KICAgICAgICAiR1JPVVAiLCAiTElTVCIsICJMRVRfQkxPQ0siLCAiQVJSQVlfQ09NUCIsICJHRU5FUkFUT1IiLCAiQ09NUF9UQUlMIiwNCg0KICAgICAgICAvLyBUZXJtaW5hbHMuDQogICAgICAgICJJREVOVElGSUVSIiwgIk5VTUJFUiIsICJTVFJJTkciLCAiUkVHRVhQIiwNCg0KICAgICAgICAvLyBLZXl3b3Jkcy4NCiAgICAgICAgImJyZWFrIiwNCiAgICAgICAgImNhc2UiLCAiY2F0Y2giLCAiY29uc3QiLCAiY29udGludWUiLA0KICAgICAgICAiZGVidWdnZXIiLCAiZGVmYXVsdCIsICJkZWxldGUiLCAiZG8iLA0KICAgICAgICAiZWxzZSIsICJleHBvcnQiLA0KICAgICAgICAiZmFsc2UiLCAiZmluYWxseSIsICJmb3IiLCAiZnVuY3Rpb24iLA0KICAgICAgICAiaWYiLCAiaW1wb3J0IiwgImluIiwgImluc3RhbmNlb2YiLA0KICAgICAgICAibGV0IiwgIm1vZHVsZSIsDQogICAgICAgICJuZXciLCAibnVsbCIsDQogICAgICAgICJyZXR1cm4iLA0KICAgICAgICAic3dpdGNoIiwNCiAgICAgICAgInRoaXMiLCAidGhyb3ciLCAidHJ1ZSIsICJ0cnkiLCAidHlwZW9mIiwNCiAgICAgICAgInZhciIsICJ2b2lkIiwNCiAgICAgICAgInlpZWxkIiwNCiAgICAgICAgIndoaWxlIiwgIndpdGgiLA0KICAgIF07DQoNCiAgICB2YXIgc3RhdGVtZW50U3RhcnRUb2tlbnMgPSBbDQogICAgICAgICJicmVhayIsDQogICAgICAgICJjb25zdCIsICJjb250aW51ZSIsDQogICAgICAgICJkZWJ1Z2dlciIsICJkbyIsDQogICAgICAgICJmb3IiLA0KICAgICAgICAiaWYiLA0KICAgICAgICAicmV0dXJuIiwNCiAgICAgICAgInN3aXRjaCIsDQogICAgICAgICJ0aHJvdyIsICJ0cnkiLA0KICAgICAgICAidmFyIiwNCiAgICAgICAgInlpZWxkIiwNCiAgICAgICAgIndoaWxlIiwgIndpdGgiLA0KICAgIF07DQoNCiAgICAvLyBXaGl0ZXNwYWNlIGNoYXJhY3RlcnMgKHNlZSBFQ01BLTI2MiA3LjIpDQogICAgdmFyIHdoaXRlc3BhY2VDaGFycyA9IFsNCiAgICAgICAgLy8gbm9ybWFsIHdoaXRlc3BhY2U6DQogICAgICAgICJcdTAwMDkiLCAiXHUwMDBCIiwgIlx1MDAwQyIsICJcdTAwMjAiLCAiXHUwMEEwIiwgIlx1RkVGRiIsIA0KDQogICAgICAgIC8vIGhpZ2gtVW5pY29kZSB3aGl0ZXNwYWNlOg0KICAgICAgICAiXHUxNjgwIiwgIlx1MTgwRSIsDQogICAgICAgICJcdTIwMDAiLCAiXHUyMDAxIiwgIlx1MjAwMiIsICJcdTIwMDMiLCAiXHUyMDA0IiwgIlx1MjAwNSIsICJcdTIwMDYiLA0KICAgICAgICAiXHUyMDA3IiwgIlx1MjAwOCIsICJcdTIwMDkiLCAiXHUyMDBBIiwNCiAgICAgICAgIlx1MjAyRiIsICJcdTIwNUYiLCAiXHUzMDAwIg0KICAgIF07DQoNCiAgICB2YXIgd2hpdGVzcGFjZSA9IHt9Ow0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2hpdGVzcGFjZUNoYXJzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHdoaXRlc3BhY2Vbd2hpdGVzcGFjZUNoYXJzW2ldXSA9IHRydWU7DQogICAgfQ0KDQogICAgLy8gT3BlcmF0b3IgYW5kIHB1bmN0dWF0b3IgbWFwcGluZyBmcm9tIHRva2VuIHRvIHRyZWUgbm9kZSB0eXBlIG5hbWUuDQogICAgLy8gTkI6IGJlY2F1c2UgdGhlIGxleGVyIGRvZXNuJ3QgYmFja3RyYWNrLCBhbGwgdG9rZW4gcHJlZml4ZXMgbXVzdCB0aGVtc2VsdmVzDQogICAgLy8gYmUgdmFsaWQgdG9rZW5zIChlLmcuICE9PSBpcyBhY2NlcHRhYmxlIGJlY2F1c2UgaXRzIHByZWZpeGVzIGFyZSB0aGUgdmFsaWQNCiAgICAvLyB0b2tlbnMgIT0gYW5kICEpLg0KICAgIHZhciBvcFR5cGVOYW1lcyA9IHsNCiAgICAgICAgJ1xuJzogICAiTkVXTElORSIsDQogICAgICAgICc7JzogICAgIlNFTUlDT0xPTiIsDQogICAgICAgICcsJzogICAgIkNPTU1BIiwNCiAgICAgICAgJz8nOiAgICAiSE9PSyIsDQogICAgICAgICc6JzogICAgIkNPTE9OIiwNCiAgICAgICAgJ3x8JzogICAiT1IiLA0KICAgICAgICAnJiYnOiAgICJBTkQiLA0KICAgICAgICAnfCc6ICAgICJCSVRXSVNFX09SIiwNCiAgICAgICAgJ14nOiAgICAiQklUV0lTRV9YT1IiLA0KICAgICAgICAnJic6ICAgICJCSVRXSVNFX0FORCIsDQogICAgICAgICc9PT0nOiAgIlNUUklDVF9FUSIsDQogICAgICAgICc9PSc6ICAgIkVRIiwNCiAgICAgICAgJz0nOiAgICAiQVNTSUdOIiwNCiAgICAgICAgJyE9PSc6ICAiU1RSSUNUX05FIiwNCiAgICAgICAgJyE9JzogICAiTkUiLA0KICAgICAgICAnPDwnOiAgICJMU0giLA0KICAgICAgICAnPD0nOiAgICJMRSIsDQogICAgICAgICc8JzogICAgIkxUIiwNCiAgICAgICAgJz4+Pic6ICAiVVJTSCIsDQogICAgICAgICc+Pic6ICAgIlJTSCIsDQogICAgICAgICc+PSc6ICAgIkdFIiwNCiAgICAgICAgJz4nOiAgICAiR1QiLA0KICAgICAgICAnKysnOiAgICJJTkNSRU1FTlQiLA0KICAgICAgICAnLS0nOiAgICJERUNSRU1FTlQiLA0KICAgICAgICAnKyc6ICAgICJQTFVTIiwNCiAgICAgICAgJy0nOiAgICAiTUlOVVMiLA0KICAgICAgICAnKic6ICAgICJNVUwiLA0KICAgICAgICAnLyc6ICAgICJESVYiLA0KICAgICAgICAnJSc6ICAgICJNT0QiLA0KICAgICAgICAnISc6ICAgICJOT1QiLA0KICAgICAgICAnfic6ICAgICJCSVRXSVNFX05PVCIsDQogICAgICAgICcuJzogICAgIkRPVCIsDQogICAgICAgICdbJzogICAgIkxFRlRfQlJBQ0tFVCIsDQogICAgICAgICddJzogICAgIlJJR0hUX0JSQUNLRVQiLA0KICAgICAgICAneyc6ICAgICJMRUZUX0NVUkxZIiwNCiAgICAgICAgJ30nOiAgICAiUklHSFRfQ1VSTFkiLA0KICAgICAgICAnKCc6ICAgICJMRUZUX1BBUkVOIiwNCiAgICAgICAgJyknOiAgICAiUklHSFRfUEFSRU4iDQogICAgfTsNCg0KICAgIC8vIEhhc2ggb2Yga2V5d29yZCBpZGVudGlmaWVyIHRvIHRva2VucyBpbmRleC4gIE5COiB3ZSBtdXN0IG51bGwgX19wcm90b19fIHRvDQogICAgLy8gYXZvaWQgdG9TdHJpbmcsIGV0Yy4gbmFtZXNwYWNlIHBvbGx1dGlvbi4NCiAgICB2YXIga2V5d29yZHMgPSB7X19wcm90b19fOiBudWxsfTsNCg0KICAgIC8vIERlZmluZSBjb25zdCBFTkQsIGV0Yy4sIGJhc2VkIG9uIHRoZSB0b2tlbiBuYW1lcy4gIEFsc28gbWFwIG5hbWUgdG8gaW5kZXguDQogICAgdmFyIHRva2VuSWRzID0ge307DQoNCiAgICAvLyBCdWlsZGluZyB1cCBhIHN0cmluZyB0byBiZSBldmFsJ2QgaW4gZGlmZmVyZW50IGNvbnRleHRzLg0KICAgIHZhciBjb25zdHMgPSBOYXJjaXNzdXMuaG9zdFN1cHBvcnRzRXZhbENvbnN0ID8gImNvbnN0ICIgOiAidmFyICI7DQogICAgZm9yICh2YXIgaSA9IDAsIGogPSB0b2tlbnMubGVuZ3RoOyBpIDwgajsgaSsrKSB7DQogICAgICAgIGlmIChpID4gMCkNCiAgICAgICAgICAgIGNvbnN0cyArPSAiLCAiOw0KICAgICAgICB2YXIgdCA9IHRva2Vuc1tpXTsNCiAgICAgICAgdmFyIG5hbWU7DQogICAgICAgIGlmICgvXlthLXpdLy50ZXN0KHQpKSB7DQogICAgICAgICAgICBuYW1lID0gdC50b1VwcGVyQ2FzZSgpOw0KICAgICAgICAgICAga2V5d29yZHNbdF0gPSBpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgbmFtZSA9ICgvXlxXLy50ZXN0KHQpID8gb3BUeXBlTmFtZXNbdF0gOiB0KTsNCiAgICAgICAgfQ0KICAgICAgICBjb25zdHMgKz0gbmFtZSArICIgPSAiICsgaTsNCiAgICAgICAgdG9rZW5JZHNbbmFtZV0gPSBpOw0KICAgICAgICB0b2tlbnNbdF0gPSBpOw0KICAgIH0NCiAgICBjb25zdHMgKz0gIjsiOw0KDQogICAgdmFyIGlzU3RhdGVtZW50U3RhcnRDb2RlID0ge19fcHJvdG9fXzogbnVsbH07DQogICAgZm9yIChpID0gMCwgaiA9IHN0YXRlbWVudFN0YXJ0VG9rZW5zLmxlbmd0aDsgaSA8IGo7IGkrKykNCiAgICAgICAgaXNTdGF0ZW1lbnRTdGFydENvZGVba2V5d29yZHNbc3RhdGVtZW50U3RhcnRUb2tlbnNbaV1dXSA9IHRydWU7DQoNCiAgICAvLyBNYXAgYXNzaWdubWVudCBvcGVyYXRvcnMgdG8gdGhlaXIgaW5kZXhlcyBpbiB0aGUgdG9rZW5zIGFycmF5Lg0KICAgIHZhciBhc3NpZ25PcHMgPSBbJ3wnLCAnXicsICcmJywgJzw8JywgJz4+JywgJz4+PicsICcrJywgJy0nLCAnKicsICcvJywgJyUnXTsNCg0KICAgIGZvciAoaSA9IDAsIGogPSBhc3NpZ25PcHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7DQogICAgICAgIHQgPSBhc3NpZ25PcHNbaV07DQogICAgICAgIGFzc2lnbk9wc1t0XSA9IHRva2Vuc1t0XTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkZWZpbmVHZXR0ZXIob2JqLCBwcm9wLCBmbiwgZG9udERlbGV0ZSwgZG9udEVudW0pIHsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ2V0OiBmbiwgY29uZmlndXJhYmxlOiAhZG9udERlbGV0ZSwgZW51bWVyYWJsZTogIWRvbnRFbnVtIH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRlZmluZUdldHRlclNldHRlcihvYmosIHByb3AsIGdldHRlciwgc2V0dGVyLCBkb250RGVsZXRlLCBkb250RW51bSkgew0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7DQogICAgICAgICAgICBnZXQ6IGdldHRlciwNCiAgICAgICAgICAgIHNldDogc2V0dGVyLA0KICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhZG9udERlbGV0ZSwNCiAgICAgICAgICAgIGVudW1lcmFibGU6ICFkb250RW51bQ0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkZWZpbmVNZW1vR2V0dGVyKG9iaiwgcHJvcCwgZm4sIGRvbnREZWxldGUsIGRvbnRFbnVtKSB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsNCiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgdmFyIHZhbCA9IGZuKCk7DQogICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB2YWwsIGRvbnREZWxldGUsIHRydWUsIGRvbnRFbnVtKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdmFsOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwNCiAgICAgICAgICAgIGVudW1lcmFibGU6ICFkb250RW51bQ0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHZhbCwgZG9udERlbGV0ZSwgcmVhZE9ubHksIGRvbnRFbnVtKSB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiB2YWwsIHdyaXRhYmxlOiAhcmVhZE9ubHksIGNvbmZpZ3VyYWJsZTogIWRvbnREZWxldGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICFkb250RW51bSB9KTsNCiAgICB9DQoNCiAgICAvLyBSZXR1cm5zIHRydWUgaWYgZm4gaXMgYSBuYXRpdmUgZnVuY3Rpb24uICAoTm90ZTogU3BpZGVyTW9ua2V5IHNwZWNpZmljLikNCiAgICBmdW5jdGlvbiBpc05hdGl2ZUNvZGUoZm4pIHsNCiAgICAgICAgLy8gUmVsaWVzIG9uIHRoZSB0b1N0cmluZyBtZXRob2QgdG8gaWRlbnRpZnkgbmF0aXZlIGNvZGUuDQogICAgICAgIHJldHVybiAoKHR5cGVvZiBmbikgPT09ICJmdW5jdGlvbiIpICYmIGZuLnRvU3RyaW5nKCkubWF0Y2goL1xbbmF0aXZlIGNvZGVcXS8pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmosIG5hbWUpIHsNCiAgICAgICAgd2hpbGUgKG9iaikgew0KICAgICAgICAgICAgaWYgKCh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIG5hbWUpKQ0KICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgbmFtZSk7DQogICAgICAgICAgICBvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZXMob2JqKSB7DQogICAgICAgIHZhciB0YWJsZSA9IE9iamVjdC5jcmVhdGUobnVsbCwge30pOw0KICAgICAgICB3aGlsZSAob2JqKSB7DQogICAgICAgICAgICB2YXIgbmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopOw0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBuYW1lcy5sZW5ndGg7IGkgPCBuOyBpKyspDQogICAgICAgICAgICAgICAgdGFibGVbbmFtZXNbaV1dID0gdHJ1ZTsNCiAgICAgICAgICAgIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0YWJsZSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZ2V0T3duUHJvcGVydGllcyhvYmopIHsNCiAgICAgICAgdmFyIG1hcCA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBuYW1lIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikpDQogICAgICAgICAgICBtYXBbbmFtZV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgbmFtZSk7DQogICAgICAgIHJldHVybiBtYXA7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYmxhY2tsaXN0SGFuZGxlcih0YXJnZXQsIGJsYWNrbGlzdCkgew0KICAgICAgICB2YXIgbWFzayA9IE9iamVjdC5jcmVhdGUobnVsbCwge30pOw0KICAgICAgICB2YXIgcmVkaXJlY3QgPSBTdHJpbmdNYXAuY3JlYXRlKGJsYWNrbGlzdCkubWFwT2JqZWN0KGZ1bmN0aW9uKG5hbWUpIHsgcmV0dXJuIG1hc2s7IH0pOw0KICAgICAgICByZXR1cm4gbWl4aW5IYW5kbGVyKHJlZGlyZWN0LCB0YXJnZXQpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHdoaXRlbGlzdEhhbmRsZXIodGFyZ2V0LCB3aGl0ZWxpc3QpIHsNCiAgICAgICAgdmFyIGNhdGNoYWxsID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7fSk7DQogICAgICAgIHZhciByZWRpcmVjdCA9IFN0cmluZ01hcC5jcmVhdGUod2hpdGVsaXN0KS5tYXBPYmplY3QoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gdGFyZ2V0OyB9KTsNCiAgICAgICAgcmV0dXJuIG1peGluSGFuZGxlcihyZWRpcmVjdCwgY2F0Y2hhbGwpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIG1pcnJvckhhbmRsZXIodGFyZ2V0LCB3cml0YWJsZSkgew0KICAgICAgICB2YXIgaGFuZGxlciA9IG1ha2VQYXNzdGhydUhhbmRsZXIodGFyZ2V0KTsNCg0KICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBoYW5kbGVyLmRlZmluZVByb3BlcnR5Ow0KICAgICAgICBoYW5kbGVyLmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSwgZGVzYykgew0KICAgICAgICAgICAgaWYgKCFkZXNjLmVudW1lcmFibGUpDQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJtaXJyb3IgcHJvcGVydHkgbXVzdCBiZSBlbnVtZXJhYmxlIik7DQogICAgICAgICAgICBpZiAoIWRlc2MuY29uZmlndXJhYmxlKQ0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigibWlycm9yIHByb3BlcnR5IG11c3QgYmUgY29uZmlndXJhYmxlIik7DQogICAgICAgICAgICBpZiAoZGVzYy53cml0YWJsZSAhPT0gd3JpdGFibGUpDQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJtaXJyb3IgcHJvcGVydHkgbXVzdCAiICsgKHdyaXRhYmxlID8gIiIgOiAibm90ICIpICsgImJlIHdyaXRhYmxlIik7DQogICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShuYW1lLCBkZXNjKTsNCiAgICAgICAgfTsNCg0KICAgICAgICBoYW5kbGVyLmZpeCA9IGZ1bmN0aW9uKCkgeyB9Ow0KICAgICAgICBoYW5kbGVyLmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGhhbmRsZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9yOw0KICAgICAgICBoYW5kbGVyLmdldE93blByb3BlcnR5TmFtZXMgPSBnZXRQcm9wZXJ0eU5hbWVzLmJpbmQoaGFuZGxlciwgdGFyZ2V0KTsNCiAgICAgICAgaGFuZGxlci5rZXlzID0gaGFuZGxlci5lbnVtZXJhdGU7DQogICAgICAgIGhhbmRsZXJbImRlbGV0ZSJdID0gZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfTsNCiAgICAgICAgaGFuZGxlci5oYXNPd24gPSBoYW5kbGVyLmhhczsNCiAgICAgICAgcmV0dXJuIGhhbmRsZXI7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBNaXhpbiBwcm94aWVzIGJyZWFrIHRoZSBzaW5nbGUtaW5oZXJpdGFuY2UgbW9kZWwgb2YgcHJvdG90eXBlcywgc28NCiAgICAgKiB0aGUgaGFuZGxlciB0cmVhdHMgYWxsIHByb3BlcnRpZXMgYXMgb3duLXByb3BlcnRpZXM6DQogICAgICoNCiAgICAgKiAgICAgICAgICAgICAgICAgIFgNCiAgICAgKiAgICAgICAgICAgICAgICAgIHwNCiAgICAgKiAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rDQogICAgICogICAgIHwgICAgICAgICAgICAgICAgIE8gICAgICAgfA0KICAgICAqICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgIHwNCiAgICAgKiAgICAgfCAgTyAgICAgICAgIE8gICAgTyAgICAgICB8DQogICAgICogICAgIHwgIHwgICAgICAgICB8ICAgIHwgICAgICAgfA0KICAgICAqICAgICB8ICBPICAgIE8gICAgTyAgICBPICAgICAgIHwNCiAgICAgKiAgICAgfCAgfCAgICB8ICAgIHwgICAgfCAgICAgICB8DQogICAgICogICAgIHwgIE8gICAgTyAgICBPICAgIE8gICAgTyAgfA0KICAgICAqICAgICB8ICB8ICAgIHwgICAgfCAgICB8ICAgIHwgIHwNCiAgICAgKiAgICAgKy0oKiktLSh3KS0tKHgpLS0oeSktLSh6KS0rDQogICAgICovDQoNCiAgICBmdW5jdGlvbiBtaXhpbkhhbmRsZXIocmVkaXJlY3QsIGNhdGNoYWxsKSB7DQogICAgICAgIGZ1bmN0aW9uIHRhcmdldEZvcihuYW1lKSB7DQogICAgICAgICAgICByZXR1cm4gaGFzT3duKHJlZGlyZWN0LCBuYW1lKSA/IHJlZGlyZWN0W25hbWVdIDogY2F0Y2hhbGw7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBnZXRNdXhQcm9wZXJ0eURlc2NyaXB0b3IobmFtZSkgew0KICAgICAgICAgICAgdmFyIGRlc2MgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0Rm9yKG5hbWUpLCBuYW1lKTsNCiAgICAgICAgICAgIGlmIChkZXNjKQ0KICAgICAgICAgICAgICAgIGRlc2MuY29uZmlndXJhYmxlID0gdHJ1ZTsNCiAgICAgICAgICAgIHJldHVybiBkZXNjOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gZ2V0TXV4UHJvcGVydHlOYW1lcygpIHsNCiAgICAgICAgICAgIHZhciBuYW1lczEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyZWRpcmVjdCkuZmlsdGVyKGZ1bmN0aW9uKG5hbWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSBpbiByZWRpcmVjdFtuYW1lXTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgdmFyIG5hbWVzMiA9IGdldFByb3BlcnR5TmFtZXMoY2F0Y2hhbGwpLmZpbHRlcihmdW5jdGlvbihuYW1lKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICFoYXNPd24ocmVkaXJlY3QsIG5hbWUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gbmFtZXMxLmNvbmNhdChuYW1lczIpOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gZW51bWVyYXRlTXV4KCkgew0KICAgICAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHJlZGlyZWN0KS5maWx0ZXIoZnVuY3Rpb24obmFtZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBuYW1lIGluIHJlZGlyZWN0W25hbWVdOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBmb3IgKG5hbWUgaW4gY2F0Y2hhbGwpIHsNCiAgICAgICAgICAgICAgICBpZiAoIWhhc093bihyZWRpcmVjdCwgbmFtZSkpDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5hbWUpOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBoYXNNdXgobmFtZSkgew0KICAgICAgICAgICAgcmV0dXJuIG5hbWUgaW4gdGFyZ2V0Rm9yKG5hbWUpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZ2V0TXV4UHJvcGVydHlEZXNjcmlwdG9yLA0KICAgICAgICAgICAgZ2V0UHJvcGVydHlEZXNjcmlwdG9yOiBnZXRNdXhQcm9wZXJ0eURlc2NyaXB0b3IsDQogICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRNdXhQcm9wZXJ0eU5hbWVzLA0KICAgICAgICAgICAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUsIGRlc2MpIHsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Rm9yKG5hbWUpLCBuYW1lLCBkZXNjKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAiZGVsZXRlIjogZnVuY3Rpb24obmFtZSkgew0KICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0YXJnZXRGb3IobmFtZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZSB0YXJnZXRbbmFtZV07DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgLy8gRklYTUU6IGhhIGhhIGhhDQogICAgICAgICAgICBmaXg6IGZ1bmN0aW9uKCkgeyB9LA0KICAgICAgICAgICAgaGFzOiBoYXNNdXgsDQogICAgICAgICAgICBoYXNPd246IGhhc011eCwNCiAgICAgICAgICAgIGdldDogZnVuY3Rpb24ocmVjZWl2ZXIsIG5hbWUpIHsNCiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0Rm9yKG5hbWUpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbbmFtZV07DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihyZWNlaXZlciwgbmFtZSwgdmFsKSB7DQogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldEZvcihuYW1lKTsNCiAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWw7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgZW51bWVyYXRlOiBlbnVtZXJhdGVNdXgsDQogICAgICAgICAgICBrZXlzOiBlbnVtZXJhdGVNdXgNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBtYWtlUGFzc3RocnVIYW5kbGVyKG9iaikgew0KICAgICAgICAvLyBIYW5kbGVyIGNvcGllZCBmcm9tDQogICAgICAgIC8vIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6cHJveGllcyZzPXByb3h5JTIwb2JqZWN0I2V4YW1wbGVhX25vLW9wX2ZvcndhcmRpbmdfcHJveHkNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24obmFtZSkgew0KICAgICAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIG5hbWUpOw0KDQogICAgICAgICAgICAgICAgLy8gYSB0cmFwcGluZyBwcm94eSdzIHByb3BlcnRpZXMgbXVzdCBhbHdheXMgYmUgY29uZmlndXJhYmxlDQogICAgICAgICAgICAgICAgZGVzYy5jb25maWd1cmFibGUgPSB0cnVlOw0KICAgICAgICAgICAgICAgIHJldHVybiBkZXNjOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGdldFByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24obmFtZSkgew0KICAgICAgICAgICAgICAgIHZhciBkZXNjID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgbmFtZSk7DQoNCiAgICAgICAgICAgICAgICAvLyBhIHRyYXBwaW5nIHByb3h5J3MgcHJvcGVydGllcyBtdXN0IGFsd2F5cyBiZSBjb25maWd1cmFibGUNCiAgICAgICAgICAgICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWU7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRlc2M7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaik7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUsIGRlc2MpIHsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBuYW1lLCBkZXNjKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAiZGVsZXRlIjogZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gZGVsZXRlIG9ialtuYW1lXTsgfSwNCiAgICAgICAgICAgIGZpeDogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbihvYmopKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0aWVzKG9iaik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLy8gQXMgbG9uZyBhcyBvYmogaXMgbm90IGZyb3plbiwgdGhlIHByb3h5IHdvbid0IGFsbG93IGl0c2VsZiB0byBiZSBmaXhlZC4NCiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyB3aWxsIGNhdXNlIGEgVHlwZUVycm9yIHRvIGJlIHRocm93bg0KICAgICAgICAgICAgfSwNCg0KICAgICAgICAgICAgaGFzOiBmdW5jdGlvbihuYW1lKSB7IHJldHVybiBuYW1lIGluIG9iajsgfSwNCiAgICAgICAgICAgIGhhc093bjogZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgbmFtZSk7IH0sDQogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKHJlY2VpdmVyLCBuYW1lKSB7IHJldHVybiBvYmpbbmFtZV07IH0sDQoNCiAgICAgICAgICAgIC8vIGJhZCBiZWhhdmlvciB3aGVuIHNldCBmYWlscyBpbiBub24tc3RyaWN0IG1vZGUNCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24ocmVjZWl2ZXIsIG5hbWUsIHZhbCkgeyBvYmpbbmFtZV0gPSB2YWw7IHJldHVybiB0cnVlOyB9LA0KICAgICAgICAgICAgZW51bWVyYXRlOiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107DQogICAgICAgICAgICAgICAgZm9yIChuYW1lIGluIG9iaikgeyByZXN1bHQucHVzaChuYW1lKTsgfTsNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGtleXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gT2JqZWN0LmtleXMob2JqKTsgfQ0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIHZhciBoYXNPd25Qcm9wZXJ0eSA9ICh7fSkuaGFzT3duUHJvcGVydHk7DQoNCiAgICBmdW5jdGlvbiBoYXNPd24ob2JqLCBuYW1lKSB7DQogICAgICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgbmFtZSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gU3RyaW5nTWFwKHRhYmxlLCBzaXplKSB7DQogICAgICAgIHRoaXMudGFibGUgPSB0YWJsZSB8fCBPYmplY3QuY3JlYXRlKG51bGwsIHt9KTsNCiAgICAgICAgdGhpcy5zaXplID0gc2l6ZSB8fCAwOw0KICAgIH0NCg0KICAgIFN0cmluZ01hcC5jcmVhdGUgPSBmdW5jdGlvbih0YWJsZSkgew0KICAgICAgICB2YXIgaW5pdCA9IE9iamVjdC5jcmVhdGUobnVsbCwge30pOw0KICAgICAgICB2YXIgc2l6ZSA9IDA7DQogICAgICAgIHZhciBuYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhYmxlKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBuYW1lcy5sZW5ndGg7IGkgPCBuOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBuYW1lID0gbmFtZXNbaV07DQogICAgICAgICAgICBpbml0W25hbWVdID0gdGFibGVbbmFtZV07DQogICAgICAgICAgICBzaXplKys7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdNYXAoaW5pdCwgc2l6ZSk7DQogICAgfTsNCg0KICAgIFN0cmluZ01hcC5wcm90b3R5cGUgPSB7DQogICAgICAgIGhhczogZnVuY3Rpb24oeCkgeyByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnRhYmxlLCB4KTsgfSwNCiAgICAgICAgc2V0OiBmdW5jdGlvbih4LCB2KSB7DQogICAgICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwodGhpcy50YWJsZSwgeCkpDQogICAgICAgICAgICAgICAgdGhpcy5zaXplKys7DQogICAgICAgICAgICB0aGlzLnRhYmxlW3hdID0gdjsNCiAgICAgICAgfSwNCiAgICAgICAgZ2V0OiBmdW5jdGlvbih4KSB7IHJldHVybiB0aGlzLnRhYmxlW3hdOyB9LA0KICAgICAgICBnZXREZWY6IGZ1bmN0aW9uKHgsIHRodW5rKSB7DQogICAgICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwodGhpcy50YWJsZSwgeCkpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNpemUrKzsNCiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlW3hdID0gdGh1bmsoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhYmxlW3hdOw0KICAgICAgICB9LA0KICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbihmKSB7DQogICAgICAgICAgICB2YXIgdGFibGUgPSB0aGlzLnRhYmxlOw0KICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRhYmxlKQ0KICAgICAgICAgICAgICAgIGYuY2FsbCh0aGlzLCBrZXksIHRhYmxlW2tleV0pOw0KICAgICAgICB9LA0KICAgICAgICBtYXA6IGZ1bmN0aW9uKGYpIHsNCiAgICAgICAgICAgIHZhciB0YWJsZTEgPSB0aGlzLnRhYmxlOw0KICAgICAgICAgICAgdmFyIHRhYmxlMiA9IE9iamVjdC5jcmVhdGUobnVsbCwge30pOw0KICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgdmFsKSB7DQogICAgICAgICAgICAgICAgdGFibGUyW2tleV0gPSBmLmNhbGwodGhpcywgdmFsLCBrZXkpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ01hcCh0YWJsZTIsIHRoaXMuc2l6ZSk7DQogICAgICAgIH0sDQogICAgICAgIG1hcE9iamVjdDogZnVuY3Rpb24oZikgew0KICAgICAgICAgICAgdmFyIHRhYmxlMSA9IHRoaXMudGFibGU7DQogICAgICAgICAgICB2YXIgdGFibGUyID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7fSk7DQogICAgICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24oa2V5LCB2YWwpIHsNCiAgICAgICAgICAgICAgICB0YWJsZTJba2V5XSA9IGYuY2FsbCh0aGlzLCB2YWwsIGtleSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiB0YWJsZTI7DQogICAgICAgIH0sDQogICAgICAgIHRvT2JqZWN0OiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcE9iamVjdChmdW5jdGlvbih2YWwpIHsgcmV0dXJuIHZhbDsgfSk7DQogICAgICAgIH0sDQogICAgICAgIGNob29zZTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy50YWJsZSlbMF07DQogICAgICAgIH0sDQogICAgICAgIHJlbW92ZTogZnVuY3Rpb24oeCkgew0KICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodGhpcy50YWJsZSwgeCkpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNpemUtLTsNCiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50YWJsZVt4XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgY29weTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgdGFibGUgPSBPYmplY3QuY3JlYXRlKG51bGwsIHt9KTsNCiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnRhYmxlKQ0KICAgICAgICAgICAgICAgIHRhYmxlW2tleV0gPSB0aGlzLnRhYmxlW2tleV07DQogICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ01hcCh0YWJsZSwgdGhpcy5zaXplKTsNCiAgICAgICAgfSwNCiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4gIltvYmplY3QgU3RyaW5nTWFwXSIgfQ0KICAgIH07DQoNCiAgICAvLyBhbiBvYmplY3Qta2V5IHRhYmxlIHdpdGggcG9vciBhc3ltcHRvdGljcyAocmVwbGFjZSB3aXRoIFdlYWtNYXAgd2hlbiBwb3NzaWJsZSkNCiAgICBmdW5jdGlvbiBPYmplY3RNYXAoYXJyYXkpIHsNCiAgICAgICAgdGhpcy5hcnJheSA9IGFycmF5IHx8IFtdOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNlYXJjaE1hcChtYXAsIGtleSwgZm91bmQsIG5vdEZvdW5kKSB7DQogICAgICAgIHZhciBhID0gbWFwLmFycmF5Ow0KICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGEubGVuZ3RoOyBpIDwgbjsgaSsrKSB7DQogICAgICAgICAgICB2YXIgcGFpciA9IGFbaV07DQogICAgICAgICAgICBpZiAocGFpci5rZXkgPT09IGtleSkNCiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQocGFpciwgaSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG5vdEZvdW5kKCk7DQogICAgfQ0KDQogICAgT2JqZWN0TWFwLnByb3RvdHlwZSA9IHsNCiAgICAgICAgaGFzOiBmdW5jdGlvbih4KSB7DQogICAgICAgICAgICByZXR1cm4gc2VhcmNoTWFwKHRoaXMsIHgsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZSB9LCBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlIH0pOw0KICAgICAgICB9LA0KICAgICAgICBzZXQ6IGZ1bmN0aW9uKHgsIHYpIHsNCiAgICAgICAgICAgIHZhciBhID0gdGhpcy5hcnJheTsNCiAgICAgICAgICAgIHNlYXJjaE1hcCh0aGlzLCB4LA0KICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHBhaXIpIHsgcGFpci52YWx1ZSA9IHYgfSwNCiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgYS5wdXNoKHsga2V5OiB4LCB2YWx1ZTogdiB9KSB9KTsNCiAgICAgICAgfSwNCiAgICAgICAgZ2V0OiBmdW5jdGlvbih4KSB7DQogICAgICAgICAgICByZXR1cm4gc2VhcmNoTWFwKHRoaXMsIHgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHBhaXIpIHsgcmV0dXJuIHBhaXIudmFsdWUgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBudWxsIH0pOw0KICAgICAgICB9LA0KICAgICAgICBnZXREZWY6IGZ1bmN0aW9uKHgsIHRodW5rKSB7DQogICAgICAgICAgICB2YXIgYSA9IHRoaXMuYXJyYXk7DQogICAgICAgICAgICByZXR1cm4gc2VhcmNoTWFwKHRoaXMsIHgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHBhaXIpIHsgcmV0dXJuIHBhaXIudmFsdWUgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHRodW5rKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2goeyBrZXk6IHgsIHZhbHVlOiB2IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICB9LA0KICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbihmKSB7DQogICAgICAgICAgICB2YXIgYSA9IHRoaXMuYXJyYXk7DQogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGEubGVuZ3RoOyBpIDwgbjsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFyIHBhaXIgPSBhW2ldOw0KICAgICAgICAgICAgICAgIGYuY2FsbCh0aGlzLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgIGNob29zZTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXS5rZXk7DQogICAgICAgIH0sDQogICAgICAgIGdldCBzaXplKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RoOw0KICAgICAgICB9LA0KICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKHgpIHsNCiAgICAgICAgICAgIHZhciBhID0gdGhpcy5hcnJheTsNCiAgICAgICAgICAgIHNlYXJjaE1hcCh0aGlzLCB4LA0KICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHBhaXIsIGkpIHsgYS5zcGxpY2UoaSwgMSkgfSwNCiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgfSk7DQogICAgICAgIH0sDQogICAgICAgIGNvcHk6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RNYXAodGhpcy5hcnJheS5tYXAoZnVuY3Rpb24ocGFpcikgew0KICAgICAgICAgICAgICAgIHJldHVybiB7IGtleTogcGFpci5rZXksIHZhbHVlOiBwYWlyLnZhbHVlIH0NCiAgICAgICAgICAgIH0pKTsNCiAgICAgICAgfSwNCiAgICAgICAgY2xlYXI6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgdGhpcy5hcnJheSA9IFtdOw0KICAgICAgICB9LA0KICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7IHJldHVybiAiW29iamVjdCBPYmplY3RNYXBdIiB9DQogICAgfTsNCg0KICAgIC8vIG5vbi1kZXN0cnVjdGl2ZSBzdGFjaw0KICAgIGZ1bmN0aW9uIFN0YWNrKGVsdHMpIHsNCiAgICAgICAgdGhpcy5lbHRzID0gZWx0cyB8fCBudWxsOw0KICAgIH0NCg0KICAgIFN0YWNrLnByb3RvdHlwZSA9IHsNCiAgICAgICAgcHVzaDogZnVuY3Rpb24oeCkgew0KICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFjayh7IHRvcDogeCwgcmVzdDogdGhpcy5lbHRzIH0pOw0KICAgICAgICB9LA0KICAgICAgICB0b3A6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgaWYgKCF0aGlzLmVsdHMpDQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzdGFjayIpOw0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWx0cy50b3A7DQogICAgICAgIH0sDQogICAgICAgIGlzRW1wdHk6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9wID09PSBudWxsOw0KICAgICAgICB9LA0KICAgICAgICBmaW5kOiBmdW5jdGlvbih0ZXN0KSB7DQogICAgICAgICAgICBmb3IgKHZhciBlbHRzID0gdGhpcy5lbHRzOyBlbHRzOyBlbHRzID0gZWx0cy5yZXN0KSB7DQogICAgICAgICAgICAgICAgaWYgKHRlc3QoZWx0cy50b3ApKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWx0cy50b3A7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgfSwNCiAgICAgICAgaGFzOiBmdW5jdGlvbih4KSB7DQogICAgICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmZpbmQoZnVuY3Rpb24oZWx0KSB7IHJldHVybiBlbHQgPT09IHggfSkpOw0KICAgICAgICB9LA0KICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbihmKSB7DQogICAgICAgICAgICBmb3IgKHZhciBlbHRzID0gdGhpcy5lbHRzOyBlbHRzOyBlbHRzID0gZWx0cy5yZXN0KSB7DQogICAgICAgICAgICAgICAgZihlbHRzLnRvcCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgbW9kdWxlLmV4cG9ydHMgPSB7DQogICAgICAgIHRva2VuczogdG9rZW5zLA0KICAgICAgICB3aGl0ZXNwYWNlOiB3aGl0ZXNwYWNlLA0KICAgICAgICBvcFR5cGVOYW1lczogb3BUeXBlTmFtZXMsDQogICAgICAgIGtleXdvcmRzOiBrZXl3b3JkcywNCiAgICAgICAgaXNTdGF0ZW1lbnRTdGFydENvZGU6IGlzU3RhdGVtZW50U3RhcnRDb2RlLA0KICAgICAgICB0b2tlbklkczogdG9rZW5JZHMsDQogICAgICAgIGNvbnN0czogY29uc3RzLA0KICAgICAgICBhc3NpZ25PcHM6IGFzc2lnbk9wcywNCiAgICAgICAgZGVmaW5lR2V0dGVyOiBkZWZpbmVHZXR0ZXIsDQogICAgICAgIGRlZmluZUdldHRlclNldHRlcjogZGVmaW5lR2V0dGVyU2V0dGVyLA0KICAgICAgICBkZWZpbmVNZW1vR2V0dGVyOiBkZWZpbmVNZW1vR2V0dGVyLA0KICAgICAgICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHksDQogICAgICAgIGlzTmF0aXZlQ29kZTogaXNOYXRpdmVDb2RlLA0KICAgICAgICBtaXJyb3JIYW5kbGVyOiBtaXJyb3JIYW5kbGVyLA0KICAgICAgICBtaXhpbkhhbmRsZXI6IG1peGluSGFuZGxlciwNCiAgICAgICAgd2hpdGVsaXN0SGFuZGxlcjogd2hpdGVsaXN0SGFuZGxlciwNCiAgICAgICAgYmxhY2tsaXN0SGFuZGxlcjogYmxhY2tsaXN0SGFuZGxlciwNCiAgICAgICAgbWFrZVBhc3N0aHJ1SGFuZGxlcjogbWFrZVBhc3N0aHJ1SGFuZGxlciwNCiAgICAgICAgU3RyaW5nTWFwOiBTdHJpbmdNYXAsDQogICAgICAgIE9iamVjdE1hcDogT2JqZWN0TWFwLA0KICAgICAgICBTdGFjazogU3RhY2sNCiAgICB9Ow0KfSk7]]></data>
	</file>
	<file>
	  <filename>/AceEditor.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogQWNlRWRpdG9yIC0gU3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IgaHR0cDovL2FjZS5hamF4Lm9yZy8uDQojIFZlcnNpb246IDAuMSwgR29yYW4gSWxpYyB1bmlxdTNlQGdtYWlsLmNvbSBodHRwOi8vd3d3LmljaC1tYWNoLWRhcy5hdA0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA3IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEZvciBIZWxwIGJ1aWxkaW5nIG1vZHVsZXM6DQojIC0gUmVhZCB0aGUgRG9jdW1lbnRhdGlvbiBhcyBpdCBiZWNvbWVzIGF2YWlsYWJsZSBhdA0KIyAgIGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvDQojIC0gQ2hlY2sgb3V0IHRoZSBTa2VsZXRvbiBNb2R1bGUgZm9yIGEgY29tbWVudGVkIGV4YW1wbGUNCiMgLSBMb29rIGF0IG90aGVyIG1vZHVsZXMsIGFuZCBsZWFybiBmcm9tIHRoZSBzb3VyY2UNCiMgLSBDaGVjayBvdXQgdGhlIGZvcnVtcyBhdCBodHRwOi8vZm9ydW1zLmNtc21hZGVzaW1wbGUub3JnDQojIC0gQ2hhdCB3aXRoIGRldmVsb3BlcnMgb24gdGhlICNjbXMgSVJDIGNoYW5uZWwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmNsYXNzIEFjZUVkaXRvciBleHRlbmRzIENNU01vZHVsZSB7DQoJdmFyICRub2VkaXRvcnMgPSAwOw0KCXZhciAkaGVhZGVyaW5mb3NlbnQgPSBmYWxzZTsNCgl2YXIgJF9odG1sYWN0aXZlID0gZmFsc2U7DQoJdmFyICRfamF2YXNjcmlwdGFjdGl2ZSA9IGZhbHNlOw0KCXZhciAkX2Nzc2FjdGl2ZSA9IGZhbHNlOw0KCXZhciAkX3BocGFjdGl2ZSA9IGZhbHNlOw0KCXZhciAkX2RlZmF1bHRhY3RpdmUgPSBmYWxzZTsNCg0KCWZ1bmN0aW9uIEdldE5hbWUoKSB7DQoJCXJldHVybiAnQWNlRWRpdG9yJzsNCgl9DQoNCglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7DQoJCXJldHVybiAkdGhpcyAtPiBMYW5nKCdmcmllbmRseW5hbWUnKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRWZXJzaW9uKCkgew0KCQlyZXR1cm4gJzAuMic7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0SGVscCgpIHsNCg0KCQkkc21hcnR5ID0gY21zbXMoKSAtPiBHZXRTbWFydHkoKTsNCgkJJGNvbmZpZyA9IGNtc21zKCktPiBHZXRDb25maWcoKTsJCQkNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ21vZHVsZV9wYXRoJywgKCR0aGlzIC0+IEdldE1vZHVsZVVSTFBhdGgoKSkpOw0KCQkNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ2hlbHBfZ2VuZXJhbF90aXRsZScsICR0aGlzIC0+IExhbmcoJ2hlbHBfZ2VuZXJhbF90aXRsZScpKTsNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ2hlbHBfZ2VuZXJhbF90ZXh0JywgJHRoaXMgLT4gTGFuZygnaGVscF9nZW5lcmFsX3RleHQnKSk7DQoJCSRzbWFydHkgLT4gYXNzaWduKCdoZWxwX2tleWJvYXJkc2hvcnRjdXRzX3RpdGxlJywgJHRoaXMgLT4gTGFuZygnaGVscF9rZXlib2FyZHNob3J0Y3V0c190aXRsZScpKTsNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfY29udGVudCcsICR0aGlzIC0+IExhbmcoJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfY29udGVudCcpKTsNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ2hlbHBfZnJvbnRlbmRfdGl0bGUnLCAkdGhpcyAtPiBMYW5nKCdoZWxwX2Zyb250ZW5kX3RpdGxlJykpOwkJDQoJCSRzbWFydHkgLT4gYXNzaWduKCdoZWxwX2Zyb250ZW5kX2NvbnRlbnQnLCAkdGhpcyAtPiBMYW5nKCdoZWxwX2Zyb250ZW5kX2NvbnRlbnQnKSk7DQoJCSRzbWFydHkgLT4gYXNzaWduKCdoZWxwX2Fib3V0X3RpdGxlJywgJHRoaXMgLT4gTGFuZygnaGVscF9hYm91dF90aXRsZScpKTsNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ2hlbHBfYWJvdXRfdGV4dCcsICR0aGlzIC0+IExhbmcoJ2hlbHBfYWJvdXRfdGV4dCcpKTsNCg0KCQlyZXR1cm4gJHRoaXMgLT4gUHJvY2Vzc1RlbXBsYXRlKCdoZWxwLnRwbCcpOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvcigpIHsNCgkJcmV0dXJuICdHb3JhbiBJbGljJzsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsNCgkJcmV0dXJuICd1bmlxdTNlQGdtYWlsLmNvbSc7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgew0KCQlyZXR1cm4gJHRoaXMgLT4gTGFuZygnY2hhbmdlbG9nJyk7DQoJfQ0KDQoJZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7DQoJICByZXR1cm4gdHJ1ZTsNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpIA0KCXsNCgkJaWYgKHZlcnNpb25fY29tcGFyZShDTVNfVkVSU0lPTiwgJzEuMTAnKSA8IDApIHsNCgkJCSR0aGlzIC0+IEluaXRpYWxpemVGcm9udGVuZCgpOw0KCQkJJHRoaXMgLT4gSW5pdGlhbGl6ZUFkbWluKCk7DQoJCX0JCQ0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKQ0KCXsNCgkJJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7DQoJCSR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsNCgkJDQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhY3Rpb24nLCBDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbW9kZXMnLCBDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGhlbWVzJywgQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ21vZGUnLCBDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGhlbWUnLCBDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnd2lkdGgnLCBDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaGVpZ2h0JywgQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RpdmlkJywgQ0xFQU5fU1RSSU5HKTsNCg0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKQ0KCXsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignYWN0aW9uJywgJ2RlZmF1bHQnLCAkdGhpcy0+TGFuZygnaGVscF9wYXJhbV9hY3Rpb24nKSk7DQoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ21vZGVzJywgJ2h0bWwnLCAkdGhpcy0+TGFuZygnaGVscF9wYXJhbV9tb2RlcycpKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigndGhlbWVzJywgJ3RleHRtYXRlJywgJHRoaXMtPkxhbmcoJ2hlbHBfcGFyYW1fdGhlbWVzJykpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdtb2RlJywgJ2h0bWwnLCAkdGhpcy0+TGFuZygnaGVscF9wYXJhbV9tb2RlJykpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0aGVtZScsICd0ZXh0bWF0ZScsICR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX3RoZW1lJykpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd3aWR0aCcsICc0MDAnLCAkdGhpcy0+TGFuZygnaGVscF9wYXJhbV93aWR0aCcpKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignaGVpZ2h0JywgJzQwMCcsICR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX2hlaWdodCcpKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignZGl2aWQnLCAnZWRpdG9yJywgJHRoaXMtPkxhbmcoJ2hlbHBfcGFyYW1fZGl2aWQnKSk7DQoNCgl9CQ0KDQoJcHVibGljIGZ1bmN0aW9uIExhenlMb2FkRnJvbnRlbmQoKSANCgl7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7DQoJCXJldHVybiAnZXh0ZW5zaW9ucyc7DQoJfQkNCg0KCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7DQoJCXJldHVybiAkdGhpcyAtPiBMYW5nKCdhZG1pbmRlc2NyaXB0aW9uJyk7DQoJfQ0KDQoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgew0KCQlyZXR1cm4gJHRoaXMgLT4gQ2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpOw0KCX0NCg0KCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgew0KCQlyZXR1cm4gIjEuOSI7DQoJfQ0KDQoJZnVuY3Rpb24gTWF4aW11bUNNU1ZlcnNpb24oKSB7DQoJCXJldHVybiAiMS4xMSI7DQoJfQ0KDQoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgew0KCQlyZXR1cm4gJHRoaXMgLT4gTGFuZygncG9zdGluc3RhbGwnKTsNCgl9DQoNCglmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHsNCgkJcmV0dXJuICR0aGlzIC0+IExhbmcoJ3Bvc3R1bmluc3RhbGwnKTsNCgl9DQoNCglmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgew0KCQlyZXR1cm4gJHRoaXMgLT4gTGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOw0KCX0NCg0KCWZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksICRwYXJhbXMgPSBhcnJheSgpKSB7DQoJCWlmICgkY2FwYWJpbGl0eSA9PSAnd3lzaXd5ZycpDQoJCQlyZXR1cm4gZmFsc2U7DQoJCWlmICgkY2FwYWJpbGl0eSA9PSAnc3ludGF4aGlnaGxpZ2h0aW5nJykNCgkJCXJldHVybiB0cnVlOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJZnVuY3Rpb24gSXNXWVNJV1lHKCkgew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJZnVuY3Rpb24gSXNTeW50YXhIaWdobGlnaHRlcigpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gU3ludGF4UGFnZUZvcm1TdWJtaXQoKSB7DQoJCXJldHVybjsNCgl9DQoNCglmdW5jdGlvbiBTeW50YXhUZXh0YXJlYSgNCgkkbmFtZSA9ICd0ZXh0YXJlYScsIA0KCSRzeW50YXggPSAnaHRtbCcsIA0KCSRjb2x1bW5zID0gJzgwJywgDQoJJHJvd3MgPSAnMTUnLCANCgkkZW5jb2RpbmcgPSAnJywgDQoJJGNvbnRlbnQgPSAnJywgDQoJJHN0eWxlc2hlZXQgPSAnJywgDQoJJGFkZHRleHQgPSAnJykgew0KCSR0ZXh0YXJlYSA9ICIiOw0KCQkkdGhpcyAtPiBzeW50YXhhY3RpdmUgPSB0cnVlOw0KCQkkc21hcnR5ID0gJHRoaXMgLT4gc21hcnR5Ow0KICAgIAkkY29uZmlnID0gY21zbXMoKSAtPiBHZXRDb25maWcoKTsNCiAgICAJJHNtYXJ0eSAtPiBhc3NpZ24oJ3RleHRhcmVhaWQnLCAiZWRpdG9yIi4kdGhpcyAtPiBub2VkaXRvcnMpOw0KCQkkc21hcnR5IC0+IGFzc2lnbignZWRpdG9yaWQnLCAiYWNlLWVkaXRvciIuJHRoaXMgLT4gbm9lZGl0b3JzKTsNCiAgICAJJHNtYXJ0eSAtPiBhc3NpZ24oJ3RleHRhcmVhbmFtZScsICRuYW1lKTsNCiAgICAJJHNtYXJ0eSAtPiBhc3NpZ24oJ3N5bnRheF9jb250ZW50JywgJGNvbnRlbnQpOw0KICAgIAkkc21hcnR5IC0+IGFzc2lnbignaWQnLCAkdGhpcyAtPiBub2VkaXRvcnMpOwkNCgkJCQ0KCQkkd2lkdGggPSAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCd3aWR0aCcsJzgwJyk7DQoJCSRzbWFydHkgLT4gYXNzaWduKCd3aWR0aCcsICR3aWR0aCk7CQ0KCQkkaGVpZ2h0ID0gJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnaGVpZ2h0JywnNDAnKTsNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ2hlaWdodCcsICRoZWlnaHQpOwkJCQ0KCQkkdGhlbWUgPSAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCd0aGVtZScsJ3RleHRtYXRlJyk7DQoJCSRzbWFydHkgLT4gYXNzaWduKCd0aGVtZScsICR0aGVtZSk7CQ0KCQkkZm9udHNpemUgPSAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdmb250c2l6ZScsJzEycHgnKTsNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ2ZvbnRzaXplJywgJGZvbnRzaXplKTsJCQkJDQoJCWlmICgkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdmdWxsX2xpbmUnLCcxJykgPT0gJzEnKXsNCgkJCSAkc21hcnR5IC0+IGFzc2lnbignZnVsbF9saW5lJywgJ2xpbmUnKTsNCgkJfSBlbHNlIHsNCgkJCSRzbWFydHkgLT4gYXNzaWduKCdmdWxsX2xpbmUnLCAndGV4dCcpOw0KCQl9DQoJCWlmICgkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdoaWdobGlnaHRfYWN0aXZlJywxKSA9PSAxKXsNCgkJCSRzbWFydHkgLT4gYXNzaWduKCdoaWdobGlnaHRfYWN0aXZlJywgJ3RydWUnKTsNCgkJfSBlbHNlIHsNCgkJCSRzbWFydHkgLT4gYXNzaWduKCdoaWdobGlnaHRfYWN0aXZlJywgJ2ZhbHNlJyk7DQoJCX0NCgkJaWYgKCR0aGlzIC0+IEdldFByZWZlcmVuY2UoJ3Nob3dfaW52aXNpYmxlcycsJzEnKSA9PSAnMScpew0KCQkJJHNtYXJ0eSAtPiBhc3NpZ24oJ3Nob3dfaW52aXNpYmxlcycsICd0cnVlJyk7DQoJCX0gZWxzZSB7DQoJCQkkc21hcnR5IC0+IGFzc2lnbignc2hvd19pbnZpc2libGVzJywgJ2ZhbHNlJyk7DQoJCX0NCgkJaWYgKCR0aGlzIC0+IEdldFByZWZlcmVuY2UoJ3BlcnNpc3RlbnRfaHNjcm9sbCcsJzEnKSA9PSAnMScpew0KCQkJJHNtYXJ0eSAtPiBhc3NpZ24oJ3BlcnNpc3RlbnRfaHNjcm9sbCcsICd0cnVlJyk7DQoJCX0gZWxzZSB7DQoJCQkkc21hcnR5IC0+IGFzc2lnbigncGVyc2lzdGVudF9oc2Nyb2xsJywgJ2ZhbHNlJyk7DQoJCX0JDQoJCSRzb2Z0X3dyYXAgPSAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdzb2Z0X3dyYXAnLCc4MCw4MCcpOw0KCQkkc21hcnR5IC0+IGFzc2lnbignc29mdF93cmFwJywgJHNvZnRfd3JhcCk7CQkJCQ0KCQlpZiAoJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnc2hvd19ndXR0ZXInLCcxJykgPT0gJzEnKXsNCgkJCSRzbWFydHkgLT4gYXNzaWduKCdzaG93X2d1dHRlcicsICd0cnVlJyk7DQoJCX0gZWxzZSB7DQoJCQkkc21hcnR5IC0+IGFzc2lnbignc2hvd19ndXR0ZXInLCAnZmFsc2UnKTsNCgkJfQkNCgkJaWYgKCR0aGlzIC0+IEdldFByZWZlcmVuY2UoJ3ByaW50X21hcmdpbicsJzEnKSA9PSAnMScpew0KCQkJJHNtYXJ0eSAtPiBhc3NpZ24oJ3ByaW50X21hcmdpbicsICd0cnVlJyk7DQoJCX0gZWxzZSB7DQoJCQkkc21hcnR5IC0+IGFzc2lnbigncHJpbnRfbWFyZ2luJywgJ2ZhbHNlJyk7DQoJCX0NCgkJaWYgKCR0aGlzIC0+IEdldFByZWZlcmVuY2UoJ3NvZnRfdGFiJywxKSA9PSAxKXsNCgkJCSRzbWFydHkgLT4gYXNzaWduKCdzb2Z0X3RhYicsICd0cnVlJyk7DQoJCX0gZWxzZSB7DQoJCQkkc21hcnR5IC0+IGFzc2lnbignc29mdF90YWInLCAnZmFsc2UnKTsNCgkJfQ0KCQlpZiAoJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnaGlnaGxpZ2h0X3NlbGVjdGVkJywnMScpID09ICcxJyl7DQoJCQkkc21hcnR5IC0+IGFzc2lnbignaGlnaGxpZ2h0X3NlbGVjdGVkJywgJ3RydWUnKTsNCgkJfSBlbHNlIHsNCgkJCSRzbWFydHkgLT4gYXNzaWduKCdoaWdobGlnaHRfc2VsZWN0ZWQnLCAnZmFsc2UnKTsNCgkJfQ0KCQkNCgkJc3dpdGNoICgkc3ludGF4KSB7DQoJCQljYXNlICdodG1sJyA6ICRzbWFydHkgLT4gYXNzaWduKCdtb2RlJywgJ2h0bWwnKTsgJHRoaXMgLT4gX2h0bWxhY3RpdmUgPSB0cnVlOyBicmVhazsNCgkJCWNhc2UgJ2pzJzogY2FzZSAnamF2YXNjcmlwdCcgOiAkc21hcnR5IC0+IGFzc2lnbignbW9kZScsICdqYXZhc2NyaXB0Jyk7ICR0aGlzIC0+IF9qYXZhc2NyaXB0YWN0aXZlID0gdHJ1ZTsgYnJlYWs7DQoJCQljYXNlICdjc3MnIDogJHNtYXJ0eSAtPiBhc3NpZ24oJ21vZGUnLCAnY3NzJyk7ICR0aGlzIC0+IF9jc3NhY3RpdmUgPSB0cnVlOyBicmVhazsNCgkJCWNhc2UgJ3BocCcgOiAkc21hcnR5IC0+IGFzc2lnbignbW9kZScsICdwaHAnKTsgJHRoaXMgLT4gX3BocGFjdGl2ZSA9IHRydWU7IGJyZWFrOw0KCQkJZGVmYXVsdCA6ICRzeW50YXggPSAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdtb2RlJywnaHRtbCcpOyAkc21hcnR5IC0+IGFzc2lnbignbW9kZScsICRzeW50YXgpOyAkdGhpcyAtPiBfZGVmYXVsdGFjdGl2ZSA9IHRydWU7IGJyZWFrOwkNCgkJfQ0KCQkNCiAgICAJJHRleHRhcmVhID0gJHRoaXMgLT4gUHJvY2Vzc1RlbXBsYXRlKCdhY2UudHBsJyk7DQoJCSR0aGlzIC0+IG5vZWRpdG9ycysrOw0KDQoJCXJldHVybiAkdGV4dGFyZWE7CQkJCQkJCQkJCQkNCgl9DQoNCglmdW5jdGlvbiBTeW50YXhHZW5lcmF0ZUhlYWRlcigkaHRtbHJlc3VsdCA9ICcnKSB7DQoJCWlmICgkdGhpcyAtPiBoZWFkZXJpbmZvc2VudCkgcmV0dXJuICcnOw0KCQkkdGhlbWUgPSAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCd0aGVtZScsJ3RleHRtYXRlJyk7DQoJCQ0KCQlpZiAoJHRoaXMgLT4gX2Nzc2FjdGl2ZSkgew0KCQkJJHN5bnRheCA9ICdjc3MnOw0KCQl9DQoJCWlmICgkdGhpcyAtPiBfamF2YXNjcmlwdGFjdGl2ZSkgew0KCQkJJHN5bnRheCA9ICdqYXZhc2NyaXB0JzsNCgkJfQ0KCQlpZiAoJHRoaXMgLT4gX3BocGFjdGl2ZSkgew0KCQkJJHN5bnRheCA9ICdwaHAnOw0KCQl9DQoJCWlmICgkdGhpcyAtPiBfaHRtbGFjdGl2ZSkgew0KCQkJJHN5bnRheCA9ICdodG1sJzsNCgkJfQ0KCQlpZiAoJHRoaXMgLT4gX2RlZmF1bHRhY3RpdmUpew0KCQkJJHN5bnRheCA9ICR0aGlzIC0+IEdldFByZWZlcmVuY2UoJ21vZGUnLCdodG1sJyk7DQoJCX0JCQkJDQoNCgkJDQoJCWlmICgkc3ludGF4ID09ICdwbGFpbicpIHsNCgkJCSRoZWFkZXIgPSAnDQoJCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInIC4gJHRoaXMgLT4gR2V0TW9kdWxlVVJMUGF0aCgpIC4gJy9jc3MvanF1ZXJ5LXVpLTEuOC4xNi5jdXN0b20uY3NzIiAvPg0KCQkJPHNjcmlwdCBzcmM9IicgLiAkdGhpcyAtPiBHZXRNb2R1bGVVUkxQYXRoKCkgLiAnL2FjZS9zcmMvYWNlLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4NCgkJCTxzY3JpcHQgc3JjPSInIC4gJHRoaXMgLT4gR2V0TW9kdWxlVVJMUGF0aCgpIC4gJy9hY2Uvc3JjL3RoZW1lLScgLiAkdGhlbWUgLiAnLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4nOw0KCQkJDQoJCX0gZWxzZSB7DQoJCQkkaGVhZGVyID0gJw0KCQkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJyAuICR0aGlzIC0+IEdldE1vZHVsZVVSTFBhdGgoKSAuICcvY3NzL2pxdWVyeS11aS0xLjguMTYuY3VzdG9tLmNzcyIgLz4NCgkJCTxzY3JpcHQgc3JjPSInIC4gJHRoaXMgLT4gR2V0TW9kdWxlVVJMUGF0aCgpIC4gJy9hY2Uvc3JjL2FjZS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+DQoJCQk8c2NyaXB0IHNyYz0iJyAuICR0aGlzIC0+IEdldE1vZHVsZVVSTFBhdGgoKSAuICcvYWNlL3NyYy90aGVtZS0nIC4gJHRoZW1lIC4gJy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+DQoJCQk8c2NyaXB0IHNyYz0iJyAuICR0aGlzIC0+IEdldE1vZHVsZVVSTFBhdGgoKSAuICcvYWNlL3NyYy9tb2RlLScgLiAkc3ludGF4IC4gJy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+PC9zY3JpcHQ+JzsNCgkJfQ0KCQkNCgkJJHRoaXMgLT4gaGVhZGVyaW5mb3NlbnQgPSB0cnVlOw0KCQlyZXR1cm4gJGhlYWRlcjsNCgl9DQoNCglmdW5jdGlvbiBMYXp5TG9hZEFkbWluKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gR2V0SGVhZGVySFRNTCgpIHsNCgkJJGluY2RpciA9ICR0aGlzIC0+IEdldE1vZHVsZVVSTFBhdGgoKTsNCgkJJHRtcGwgPSA8PDxFT1QNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JGluY2Rpcn0vanMvZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4NCkVPVDsNCgkJcmV0dXJuICR0aGlzIC0+IFByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCR0bXBsKTsNCgl9DQoNCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKQ0KCWV4aXQgOw0KDQokZGl2aWQgPSAnJzsNCiRmb250c2l6ZSA9ICcxMnB4JzsNCiR0aGVtZSA9ICd0d2lsaWdodCc7DQoNCmlmICghaXNzZXQoJHBhcmFtc1snZGl2aWQnXSkpDQoJcmV0dXJuOw0KCS8vIGlkIG9mIHdyYXBwaW5nIGVsZW1lbnQNCgkkZGl2aWQgPSB0cmltKCRwYXJhbXNbJ2RpdmlkJ10pOw0KCS8vIGZvbnRzaXplDQoJJGZvbnRzaXplID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2ZvbnRzaXplJyk7DQoJLy8gd2lkdGggb2Ygd3JhcHBpbmcgZWxlbWVudA0KCSR3aWR0aCA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywnd2lkdGgnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdmcm9udGVuZF93aWR0aCcpKTsNCgkvLyBoZWlnaHQgb2Ygd3JhcHBpbmcgZWxlbWVudA0KCSRoZWlnaHQgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsJ2hlaWdodCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2hlaWdodCcpKTsNCgkvLyBtb2RlIGZvciBjdXJyZW50IGFyZWENCgkkbW9kZSA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywnbW9kZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9zeW50YXhhcmVhX21vZGUnKSk7DQoJLy8gdGhlbWUgZm9yIGN1cnJlbnQgYXJlYQ0KCSR0aGVtZSA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywndGhlbWUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfc3ludGF4YXJlYV90aGVtZScpKTsNCg0KCSRzbWFydHkgLT4gYXNzaWduKCdkaXZpZCcsICRkaXZpZCk7DQoJaWYgKCRtb2RlKQ0KCQkkc21hcnR5IC0+IGFzc2lnbignbW9kZScsICRtb2RlKTsNCglpZiAoJHRoZW1lKQ0KCQkkc21hcnR5IC0+IGFzc2lnbigndGhlbWUnLCAkdGhlbWUpOw0KCWlmICgkZm9udHNpemUpDQoJCSRzbWFydHkgLT4gYXNzaWduKCdmb250c2l6ZScsICRmb250c2l6ZSk7DQoJaWYgKCR3aWR0aCkNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ3dpZHRoJywgJHdpZHRoKTsNCglpZiAoJGhlaWdodCkNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ2hlaWdodCcsICRoZWlnaHQpOw0KCQ0KCSRzbWFydHkgLT4gYXNzaWduKCdhY2VfdXJsJywgJHRoaXMgLT4gR2V0TW9kdWxlVVJMUGF0aCgpKTsNCgkvLyBvdXRwdXQgdGVtcGxhdGUNCgllY2hvICR0aGlzIC0+IFByb2Nlc3NUZW1wbGF0ZSgnb3JpZ19kZWZhdWx0LnRwbCcpOw0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSANCmV4aXQ7DQoNCglpZiAoISR0aGlzIC0+IENoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkNCgl7DQoJCWVjaG8gJHRoaXMgLT4gU2hvd0Vycm9ycygkdGhpcyAtPiBMYW5nKCduZWVkcGVybWlzc2lvbicsIGFycmF5KCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSk7DQoJCXJldHVybjsNCgl9DQoJDQogCWlmICghZW1wdHkoJHBhcmFtc1snYWN0aXZlX3RhYiddKSkgew0KCSR0YWIgPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107DQoJfSBlbHNlIHsNCgkJJHRhYiA9ICdzZXR0aW5ncyc7DQoJfQkNCgkvKiBUYWJIZWFkZXJzICovDQoJZWNobyAkdGhpcyAtPiBTdGFydFRhYkhlYWRlcnMoKTsNCgkJLy8gYmFja2VuZA0KCQllY2hvICR0aGlzIC0+IFNldFRhYkhlYWRlcignc2V0dGluZ3MnLCAkdGhpcyAtPiBMYW5nKCdzZXR0aW5nc190YWInKSwgKCR0YWIgPT0gJ3NldHRpbmdzJykpOw0KCQkvLyBmcm9udGVuZA0KCQllY2hvICR0aGlzIC0+IFNldFRhYkhlYWRlcignZnJvbnRlbmRzZXR0aW5ncycsICR0aGlzIC0+IExhbmcoJ2Zyb250ZW5kc2V0dGluZ3NfdGFiJyksICgkdGFiID09ICdmcm9udGVuZHNldHRpbmdzJykpOw0KCWVjaG8gJHRoaXMgLT4gRW5kVGFiSGVhZGVycygpOw0KCQ0KCS8qIFRhYkNvbnRlbnQgKi8NCgllY2hvICR0aGlzIC0+IFN0YXJ0VGFiQ29udGVudCgpOw0KCQkvLyBiYWNrZW5kDQoJCWVjaG8gJHRoaXMgLT4gU3RhcnRUYWIoJ3NldHRpbmdzJywgJHBhcmFtcyk7DQoJCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9wcmVmc3RhYi5waHAnKTsNCgkJZWNobyAkdGhpcyAtPiBFbmRUYWIoKTsNCgkJLy8gZnJvbnRlbmQNCgkJZWNobyAkdGhpcyAtPiBTdGFydFRhYignZnJvbnRlbmRzZXR0aW5ncycsICRwYXJhbXMpOw0KCQlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5fZnJvbnRlbmRwcmVmc3RhYi5waHAnKTsNCgkJZWNobyAkdGhpcyAtPiBFbmRUYWIoKTsNCgllY2hvICR0aGlzIC0+IEVuZFRhYkNvbnRlbnQoKTsNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.head.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKQ0KCWV4aXQgOw0KDQovLyBpbml0aWFsaXplDQokdGhpcyAtPiBkaXZpZCA9ICcnOw0KLy8gc2VsZWN0ZWQgdGhlbWVzDQokdGhpcyAtPiB0aGVtZXMgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICd0aGVtZXMnLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdmcm9udGVuZF90aGVtZScpKTsNCi8vIHNlbGVjdGVkIG1vZGVzDQokdGhpcyAtPiBtb2RlcyA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ21vZGVzJywgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfbW9kZScpKTsNCg0KCWlmIChpc3NldCgkcGFyYW1zWydkaXZpZCddKSkNCgkJJHRoaXMgLT4gZGl2aWQgPSB0cmltKCRwYXJhbXNbJ2RpdmlkJ10pOw0KCWlmICghaXNfYXJyYXkoJHRoaXMgLT4gbW9kZSkpIHsNCgkJJHRoaXMgLT4gbW9kZXMgPSBleHBsb2RlKCcsJywgJHRoaXMgLT4gbW9kZXMpOw0KCX0NCglpZiAoaXNzZXQoJHRoaXMgLT4gdGhlbWVzKSAmJiAhaXNfYXJyYXkoJHRoaXMgLT4gdGhlbWVzKSkgew0KCQkkdGhpcyAtPiB0aGVtZXMgPSBleHBsb2RlKCcsJywgJHRoaXMgLT4gdGhlbWVzKTsNCgl9DQoJaWYgKGlzc2V0KCR0aGlzIC0+IHRoZW1lcykpIHsNCgkJJHNtYXJ0eSAtPiBhc3NpZ24oJ3RoZW1lcycsICR0aGlzIC0+IHRoZW1lcyk7DQoJfQ0KDQoJJHNtYXJ0eSAtPiBhc3NpZ24oJ21vZGVzJywgJHRoaXMgLT4gbW9kZXMpOw0KCSRzbWFydHkgLT4gYXNzaWduKCdhY2VfdXJsJywgJHRoaXMgLT4gR2V0TW9kdWxlVVJMUGF0aCgpKTsNCgkvLyBvdXRwdXQgdGVtcGxhdGUNCgllY2hvICR0aGlzIC0+IFByb2Nlc3NUZW1wbGF0ZSgnb3JpZ19oZWFkLmpzJyk7DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.savefrontendsettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSANCmV4aXQ7DQoNCglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykpIHsNCgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYoaXNzZXQoJHBhcmFtc1snZnJvbnRlbmRfd2lkdGgnXSkpIA0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF93aWR0aCcsICRwYXJhbXNbJ2Zyb250ZW5kX3dpZHRoJ10pOwkNCg0KCWlmKGlzc2V0KCRwYXJhbXNbJ2Zyb250ZW5kX2hlaWdodCddKSkgDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2hlaWdodCcsICRwYXJhbXNbJ2Zyb250ZW5kX2hlaWdodCddKTsJCQ0KDQoJaWYoaXNzZXQoJHBhcmFtc1snZnJvbnRlbmRfbW9kZSddKSkgDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX21vZGUnLCBpbXBsb2RlKCcsJywgJHBhcmFtc1snZnJvbnRlbmRfbW9kZSddKSk7DQoNCglpZihpc3NldCgkcGFyYW1zWydmcm9udGVuZF9zeW50YXhhcmVhX21vZGUnXSkpDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3N5bnRheGFyZWFfbW9kZScsICRwYXJhbXNbJ2Zyb250ZW5kX3N5bnRheGFyZWFfbW9kZSddKTsJDQoNCglpZihpc3NldCgkcGFyYW1zWydmcm9udGVuZF90aGVtZSddKSkgDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3RoZW1lJywgaW1wbG9kZSgnLCcsICRwYXJhbXNbJ2Zyb250ZW5kX3RoZW1lJ10pKTsJDQoJDQoJaWYoaXNzZXQoJHBhcmFtc1snZnJvbnRlbmRfc3ludGF4YXJlYV90aGVtZSddKSkNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfc3ludGF4YXJlYV90aGVtZScsICRwYXJhbXNbJ2Zyb250ZW5kX3N5bnRheGFyZWFfdGhlbWUnXSk7DQoJDQoJaWYoaXNzZXQoJHBhcmFtc1snZnJvbnRlbmRfZm9udHNpemUnXSkpDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2ZvbnRzaXplJywgJHBhcmFtc1snZnJvbnRlbmRfZm9udHNpemUnXSk7CQkJCQkNCg0KCS8vIHJlZGlyZWN0IHRvIHRhYgkJCQ0KCSRwYXJhbXMgPSBhcnJheSgnbW9kdWxlX21lc3NhZ2UnID0+ICR0aGlzLT5MYW5nKCdzZXR0aW5nc3NhdmVkJyksICdhY3RpdmVfdGFiJyA9PiAnZnJvbnRlbmRzZXR0aW5ncycpOw0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSANCmV4aXQ7DQoNCglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykpIHsNCgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOw0KCQlyZXR1cm47DQoJfQ0KCQ0KCWlmKGlzc2V0KCRwYXJhbXNbJ3dpZHRoJ10pKSANCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnd2lkdGgnLCAkcGFyYW1zWyd3aWR0aCddKTsJDQoNCglpZihpc3NldCgkcGFyYW1zWydoZWlnaHQnXSkpIA0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoZWlnaHQnLCAkcGFyYW1zWydoZWlnaHQnXSk7CQkNCgkNCglpZihpc3NldCgkcGFyYW1zWydtb2RlJ10pKSANCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbW9kZScsICRwYXJhbXNbJ21vZGUnXSk7DQoJDQoJaWYoaXNzZXQoJHBhcmFtc1sndGhlbWUnXSkpDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3RoZW1lJywgJHBhcmFtc1sndGhlbWUnXSk7DQoJDQoJaWYoaXNzZXQoJHBhcmFtc1snZm9udHNpemUnXSkpDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ZvbnRzaXplJywgJHBhcmFtc1snZm9udHNpemUnXSk7CQ0KCQ0KCWlmKGlzc2V0KCRwYXJhbXNbJ2Z1bGxfbGluZSddKSkgDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Z1bGxfbGluZScsICRwYXJhbXNbJ2Z1bGxfbGluZSddKTsNCgllbHNlDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Z1bGxfbGluZScsICcwJyk7DQoNCglpZihpc3NldCgkcGFyYW1zWydoaWdobGlnaHRfYWN0aXZlJ10pKSANCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlnaGxpZ2h0X2FjdGl2ZScsICRwYXJhbXNbJ2hpZ2hsaWdodF9hY3RpdmUnXSk7DQoJZWxzZQ0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoaWdobGlnaHRfYWN0aXZlJywgJzAnKTsNCg0KCWlmKGlzc2V0KCRwYXJhbXNbJ3Nob3dfaW52aXNpYmxlcyddKSkgDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Nob3dfaW52aXNpYmxlcycsICRwYXJhbXNbJ3Nob3dfaW52aXNpYmxlcyddKTsNCgllbHNlDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Nob3dfaW52aXNpYmxlcycsICcwJyk7CQ0KDQoJaWYoaXNzZXQoJHBhcmFtc1sncGVyc2lzdGVudF9oc2Nyb2xsJ10pKSANCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGVyc2lzdGVudF9oc2Nyb2xsJywgJHBhcmFtc1sncGVyc2lzdGVudF9oc2Nyb2xsJ10pOw0KCWVsc2UNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGVyc2lzdGVudF9oc2Nyb2xsJywgJzAnKTsNCg0KCWlmKGlzc2V0KCRwYXJhbXNbJ2tleWJpbmRpbmcnXSkpIA0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdrZXliaW5kaW5nJywgJHBhcmFtc1sna2V5YmluZGluZyddKTsNCgkNCglpZihpc3NldCgkcGFyYW1zWydzb2Z0X3dyYXAnXSkpIA0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzb2Z0X3dyYXAnLCAkcGFyYW1zWydzb2Z0X3dyYXAnXSk7DQoNCglpZihpc3NldCgkcGFyYW1zWydzaG93X2d1dHRlciddKSkgDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Nob3dfZ3V0dGVyJywgJHBhcmFtc1snc2hvd19ndXR0ZXInXSk7DQoJZWxzZQ0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzaG93X2d1dHRlcicsICcwJyk7DQoNCglpZihpc3NldCgkcGFyYW1zWydwcmludF9tYXJnaW4nXSkpIA0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcmludF9tYXJnaW4nLCAkcGFyYW1zWydwcmludF9tYXJnaW4nXSk7DQoJZWxzZQ0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcmludF9tYXJnaW4nLCAnMCcpOwkNCg0KCWlmKGlzc2V0KCRwYXJhbXNbJ3NvZnRfdGFiJ10pKSANCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc29mdF90YWInLCAkcGFyYW1zWydzb2Z0X3RhYiddKTsNCgllbHNlDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NvZnRfdGFiJywgJzAnKTsJDQoNCglpZihpc3NldCgkcGFyYW1zWydoaWdobGlnaHRfc2VsZWN0ZWQnXSkpIA0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoaWdobGlnaHRfc2VsZWN0ZWQnLCAkcGFyYW1zWydoaWdobGlnaHRfc2VsZWN0ZWQnXSk7DQoJZWxzZQ0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoaWdobGlnaHRfc2VsZWN0ZWQnLCAnMCcpOw0KCQ0KCWlmKGlzc2V0KCRwYXJhbXNbJ2VuYWJsZV9iZWhhdmlvcnMnXSkpIA0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlbmFibGVfYmVoYXZpb3JzJywgJHBhcmFtc1snZW5hYmxlX2JlaGF2aW9ycyddKTsNCgllbHNlDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9iZWhhdmlvcnMnLCAnMCcpOwkJCQkJCQ0KDQoJLy8gcmVkaXJlY3QgdG8gdGFiCQkJDQoJJHBhcmFtcyA9IGFycmF5KCdtb2R1bGVfbWVzc2FnZScgPT4gJHRoaXMtPkxhbmcoJ3NldHRpbmdzc2F2ZWQnKSwgJ2FjdGl2ZV90YWInID0+ICdzZXR0aW5ncycpOw0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/images/ui-bg_flat_75_ffffff_40x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAeUlEQVRoge3OMQHAIBAAsVL/nh8JDDfAkCjImpn5HvbfDpwIVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVhtqiwTEKTLXTgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-bg_flat_0_aaaaaa_40x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAe0lEQVRoge3OMQHAIBAAMcC/kjdZJHTI0A4XBdkz86wfO18H3hRUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUF8O8A8WdY6opAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-bg_glass_55_fbf9ee_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAP0lEQVQ4je3PMQrAMABC0a/3v2zX0mCXNkOgc6C4PARd5DqPGKCU8luS8SbAQhiCQRgJE56kZTfbbP9RSvnkBsWcEAZRWcgqAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-bg_glass_65_ffffff_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAMElEQVQ4je3LIQ4AIBTD0O3f/8wrFgmKhMy8pKJKwkhSKeVbbGuAPU9f4PIopTxgAeS0DRtI4yK0AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-bg_glass_75_dadada_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANklEQVQ4jWN48uTJfyYGBgaGUWKUGCWGLfHt2zcoi5GREYNgYmJCZiG42IiB98woMUqMEtgIAMdjCdyg+eEBAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-bg_glass_75_e6e6e6_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANUlEQVQ4je3LMQoAIBADwb38/6t5wFXaWAiCtUiaYZvF9hBACOFbuntVVe11B0CSjjeE8BwThQIJ8dhEl0YAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-bg_glass_95_fef1ec_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAPklEQVQ4je3PMQqAMABD0Z/c/7aCIAXjJIhD10LJ8vgZw30eMUApZV/GhZNgSTjoLYElY/hNMJ/S6gullCkPiCIPCr4NiEwAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAALElEQVQYlWN49OjRfyYGBgaGIUT8//8fSqBx0Yh///4RL8vAwAAVQ2MNOwIAl6g6KkOJwk8AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-icons_2e83ff_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvzLrJBNAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-icons_222222_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiTww4gUAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-icons_454545_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEVERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkQfbf86AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-icons_888888_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEWMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMiozJxoFPAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/css/images/ui-icons_cd0a0a_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEXMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzrDkZjAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/css/jquery-ui-1.8.16.custom.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIGpRdWVyeSBVSSBDU1MgRnJhbWV3b3JrIDEuOC4xNg0KICoNCiAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQ0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvVGhlbWluZy9BUEkNCiAqLw0KDQovKiBMYXlvdXQgaGVscGVycw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoudWktaGVscGVyLWhpZGRlbiB7IGRpc3BsYXk6IG5vbmU7IH0NCi51aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUgeyBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsgY2xpcDogcmVjdCgxcHggMXB4IDFweCAxcHgpOyBjbGlwOiByZWN0KDFweCwxcHgsMXB4LDFweCk7IH0NCi51aS1oZWxwZXItcmVzZXQgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJvcmRlcjogMDsgb3V0bGluZTogMDsgbGluZS1oZWlnaHQ6IDEuMzsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDEwMCU7IGxpc3Qtc3R5bGU6IG5vbmU7IH0NCi51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXIgeyBjb250ZW50OiAiLiI7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDA7IGNsZWFyOiBib3RoOyB2aXNpYmlsaXR5OiBoaWRkZW47IH0NCi51aS1oZWxwZXItY2xlYXJmaXggeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0NCi8qIHJlcXVpcmVkIGNvbW1lbnQgZm9yIGNsZWFyZml4IHRvIHdvcmsgaW4gT3BlcmEgXCovDQoqIGh0bWwgLnVpLWhlbHBlci1jbGVhcmZpeCB7IGhlaWdodDoxJTsgfQ0KLnVpLWhlbHBlci1jbGVhcmZpeCB7IGRpc3BsYXk6YmxvY2s7IH0NCi8qIGVuZCBjbGVhcmZpeCAqLw0KLnVpLWhlbHBlci16Zml4IHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgdG9wOiAwOyBsZWZ0OiAwOyBwb3NpdGlvbjogYWJzb2x1dGU7IG9wYWNpdHk6IDA7IGZpbHRlcjpBbHBoYShPcGFjaXR5PTApOyB9DQoNCg0KLyogSW50ZXJhY3Rpb24gQ3Vlcw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoudWktc3RhdGUtZGlzYWJsZWQgeyBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDsgfQ0KDQoNCi8qIEljb25zDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLyogc3RhdGVzIGFuZCBpbWFnZXMgKi8NCi51aS1pY29uIHsgZGlzcGxheTogYmxvY2s7IHRleHQtaW5kZW50OiAtOTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgfQ0KDQoNCi8qIE1pc2MgdmlzdWFscw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qIE92ZXJsYXlzICovDQoudWktd2lkZ2V0LW92ZXJsYXkgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgfQ0KDQoNCi8qDQogKiBqUXVlcnkgVUkgQ1NTIEZyYW1ld29yayAxLjguMTYNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1RoZW1pbmcvQVBJDQogKg0KICogVG8gdmlldyBhbmQgbW9kaWZ5IHRoaXMgdGhlbWUsIHZpc2l0IGh0dHA6Ly9qcXVlcnl1aS5jb20vdGhlbWVyb2xsZXIvP2ZmRGVmYXVsdD1WZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWYmZndEZWZhdWx0PW5vcm1hbCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTRweCZiZ0NvbG9ySGVhZGVyPWNjY2NjYyZiZ1RleHR1cmVIZWFkZXI9MDNfaGlnaGxpZ2h0X3NvZnQucG5nJmJnSW1nT3BhY2l0eUhlYWRlcj03NSZib3JkZXJDb2xvckhlYWRlcj1hYWFhYWEmZmNIZWFkZXI9MjIyMjIyJmljb25Db2xvckhlYWRlcj0yMjIyMjImYmdDb2xvckNvbnRlbnQ9ZmZmZmZmJmJnVGV4dHVyZUNvbnRlbnQ9MDFfZmxhdC5wbmcmYmdJbWdPcGFjaXR5Q29udGVudD03NSZib3JkZXJDb2xvckNvbnRlbnQ9YWFhYWFhJmZjQ29udGVudD0yMjIyMjImaWNvbkNvbG9yQ29udGVudD0yMjIyMjImYmdDb2xvckRlZmF1bHQ9ZTZlNmU2JmJnVGV4dHVyZURlZmF1bHQ9MDJfZ2xhc3MucG5nJmJnSW1nT3BhY2l0eURlZmF1bHQ9NzUmYm9yZGVyQ29sb3JEZWZhdWx0PWQzZDNkMyZmY0RlZmF1bHQ9NTU1NTU1Jmljb25Db2xvckRlZmF1bHQ9ODg4ODg4JmJnQ29sb3JIb3Zlcj1kYWRhZGEmYmdUZXh0dXJlSG92ZXI9MDJfZ2xhc3MucG5nJmJnSW1nT3BhY2l0eUhvdmVyPTc1JmJvcmRlckNvbG9ySG92ZXI9OTk5OTk5JmZjSG92ZXI9MjEyMTIxJmljb25Db2xvckhvdmVyPTQ1NDU0NSZiZ0NvbG9yQWN0aXZlPWZmZmZmZiZiZ1RleHR1cmVBY3RpdmU9MDJfZ2xhc3MucG5nJmJnSW1nT3BhY2l0eUFjdGl2ZT02NSZib3JkZXJDb2xvckFjdGl2ZT1hYWFhYWEmZmNBY3RpdmU9MjEyMTIxJmljb25Db2xvckFjdGl2ZT00NTQ1NDUmYmdDb2xvckhpZ2hsaWdodD1mYmY5ZWUmYmdUZXh0dXJlSGlnaGxpZ2h0PTAyX2dsYXNzLnBuZyZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NTUmYm9yZGVyQ29sb3JIaWdobGlnaHQ9ZmNlZmExJmZjSGlnaGxpZ2h0PTM2MzYzNiZpY29uQ29sb3JIaWdobGlnaHQ9MmU4M2ZmJmJnQ29sb3JFcnJvcj1mZWYxZWMmYmdUZXh0dXJlRXJyb3I9MDJfZ2xhc3MucG5nJmJnSW1nT3BhY2l0eUVycm9yPTk1JmJvcmRlckNvbG9yRXJyb3I9Y2QwYTBhJmZjRXJyb3I9Y2QwYTBhJmljb25Db2xvckVycm9yPWNkMGEwYSZiZ0NvbG9yT3ZlcmxheT1hYWFhYWEmYmdUZXh0dXJlT3ZlcmxheT0wMV9mbGF0LnBuZyZiZ0ltZ09wYWNpdHlPdmVybGF5PTAmb3BhY2l0eU92ZXJsYXk9MzAmYmdDb2xvclNoYWRvdz1hYWFhYWEmYmdUZXh0dXJlU2hhZG93PTAxX2ZsYXQucG5nJmJnSW1nT3BhY2l0eVNoYWRvdz0wJm9wYWNpdHlTaGFkb3c9MzAmdGhpY2tuZXNzU2hhZG93PThweCZvZmZzZXRUb3BTaGFkb3c9LThweCZvZmZzZXRMZWZ0U2hhZG93PS04cHgmY29ybmVyUmFkaXVzU2hhZG93PThweA0KICovDQoNCg0KLyogQ29tcG9uZW50IGNvbnRhaW5lcnMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLnVpLXdpZGdldCB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMS4xZW07IH0NCi51aS13aWRnZXQgLnVpLXdpZGdldCB7IGZvbnQtc2l6ZTogMWVtOyB9DQoudWktd2lkZ2V0IGlucHV0LCAudWktd2lkZ2V0IHNlbGVjdCwgLnVpLXdpZGdldCB0ZXh0YXJlYSwgLnVpLXdpZGdldCBidXR0b24geyBmb250LWZhbWlseTogVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmOyBmb250LXNpemU6IDFlbTsgfQ0KLnVpLXdpZGdldC1jb250ZW50IHsgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsgYmFja2dyb3VuZDogI2ZmZmZmZiB1cmwoaW1hZ2VzL3VpLWJnX2ZsYXRfNzVfZmZmZmZmXzQweDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7IGNvbG9yOiAjMjIyMjIyOyB9DQoudWktd2lkZ2V0LWNvbnRlbnQgYSB7IGNvbG9yOiAjMjIyMjIyOyB9DQoudWktd2lkZ2V0LWhlYWRlciB7IGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE7IGJhY2tncm91bmQ6ICNjY2NjY2MgdXJsKGltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF83NV9jY2NjY2NfMXgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBjb2xvcjogIzIyMjIyMjsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0NCi51aS13aWRnZXQtaGVhZGVyIGEgeyBjb2xvcjogIzIyMjIyMjsgfQ0KDQovKiBJbnRlcmFjdGlvbiBzdGF0ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLnVpLXN0YXRlLWRlZmF1bHQsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHQgeyBib3JkZXI6IDFweCBzb2xpZCAjZDNkM2QzOyBiYWNrZ3JvdW5kOiAjZTZlNmU2IHVybChpbWFnZXMvdWktYmdfZ2xhc3NfNzVfZTZlNmU2XzF4NDAwLnBuZykgNTAlIDUwJSByZXBlYXQteDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICM1NTU1NTU7IH0NCi51aS1zdGF0ZS1kZWZhdWx0IGEsIC51aS1zdGF0ZS1kZWZhdWx0IGE6bGluaywgLnVpLXN0YXRlLWRlZmF1bHQgYTp2aXNpdGVkIHsgY29sb3I6ICM1NTU1NTU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KLnVpLXN0YXRlLWhvdmVyLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsIC51aS1zdGF0ZS1mb2N1cywgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3VzIHsgYm9yZGVyOiAxcHggc29saWQgIzk5OTk5OTsgYmFja2dyb3VuZDogI2RhZGFkYSB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzc1X2RhZGFkYV8xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjMjEyMTIxOyB9DQoudWktc3RhdGUtaG92ZXIgYSwgLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIgeyBjb2xvcjogIzIxMjEyMTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9DQoudWktc3RhdGUtYWN0aXZlLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZSB7IGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE7IGJhY2tncm91bmQ6ICNmZmZmZmYgdXJsKGltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzIxMjEyMTsgfQ0KLnVpLXN0YXRlLWFjdGl2ZSBhLCAudWktc3RhdGUtYWN0aXZlIGE6bGluaywgLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWQgeyBjb2xvcjogIzIxMjEyMTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9DQoudWktd2lkZ2V0IDphY3RpdmUgeyBvdXRsaW5lOiBub25lOyB9DQoNCi8qIEludGVyYWN0aW9uIEN1ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLnVpLXN0YXRlLWhpZ2hsaWdodCwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsIC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQgIHtib3JkZXI6IDFweCBzb2xpZCAjZmNlZmExOyBiYWNrZ3JvdW5kOiAjZmJmOWVlIHVybChpbWFnZXMvdWktYmdfZ2xhc3NfNTVfZmJmOWVlXzF4NDAwLnBuZykgNTAlIDUwJSByZXBlYXQteDsgY29sb3I6ICMzNjM2MzY7IH0NCi51aS1zdGF0ZS1oaWdobGlnaHQgYSwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGEgeyBjb2xvcjogIzM2MzYzNjsgfQ0KLnVpLXN0YXRlLWVycm9yLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkICNjZDBhMGE7IGJhY2tncm91bmQ6ICNmZWYxZWMgdXJsKGltYWdlcy91aS1iZ19nbGFzc185NV9mZWYxZWNfMXg0MDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBjb2xvcjogI2NkMGEwYTsgfQ0KLnVpLXN0YXRlLWVycm9yIGEsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IgYSwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIGEgeyBjb2xvcjogI2NkMGEwYTsgfQ0KLnVpLXN0YXRlLWVycm9yLXRleHQsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yLXRleHQgeyBjb2xvcjogI2NkMGEwYTsgfQ0KLnVpLXByaW9yaXR5LXByaW1hcnksIC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXByaW1hcnkgeyBmb250LXdlaWdodDogYm9sZDsgfQ0KLnVpLXByaW9yaXR5LXNlY29uZGFyeSwgLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksICAudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHsgb3BhY2l0eTogLjc7IGZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQ0KLnVpLXN0YXRlLWRpc2FibGVkLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGlzYWJsZWQgeyBvcGFjaXR5OiAuMzU7IGZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTsgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgfQ0KDQovKiBJY29ucw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovDQoudWktaWNvbiB7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nKTsgfQ0KLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29uIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZyk7IH0NCi51aS13aWRnZXQtaGVhZGVyIC51aS1pY29uIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZyk7IH0NCi51aS1zdGF0ZS1kZWZhdWx0IC51aS1pY29uIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy91aS1pY29uc184ODg4ODhfMjU2eDI0MC5wbmcpOyB9DQoudWktc3RhdGUtaG92ZXIgLnVpLWljb24sIC51aS1zdGF0ZS1mb2N1cyAudWktaWNvbiB7YmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy91aS1pY29uc180NTQ1NDVfMjU2eDI0MC5wbmcpOyB9DQoudWktc3RhdGUtYWN0aXZlIC51aS1pY29uIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzQ1NDU0NV8yNTZ4MjQwLnBuZyk7IH0NCi51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb24ge2JhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvdWktaWNvbnNfMmU4M2ZmXzI1NngyNDAucG5nKTsgfQ0KLnVpLXN0YXRlLWVycm9yIC51aS1pY29uLCAudWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbiB7YmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy91aS1pY29uc19jZDBhMGFfMjU2eDI0MC5wbmcpOyB9DQoNCi8qIHBvc2l0aW9uaW5nICovDQoudWktaWNvbi1jYXJhdC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH0NCi51aS1pY29uLWNhcmF0LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwOyB9DQoudWktaWNvbi1jYXJhdC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAwOyB9DQoudWktaWNvbi1jYXJhdC0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggMDsgfQ0KLnVpLWljb24tY2FyYXQtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggMDsgfQ0KLnVpLWljb24tY2FyYXQtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IDA7IH0NCi51aS1pY29uLWNhcmF0LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7IH0NCi51aS1pY29uLWNhcmF0LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggMDsgfQ0KLnVpLWljb24tY2FyYXQtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggMDsgfQ0KLnVpLWljb24tY2FyYXQtMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggMDsgfQ0KLnVpLWljb24tdHJpYW5nbGUtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweDsgfQ0KLnVpLWljb24tdHJpYW5nbGUtMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNnB4OyB9DQoudWktaWNvbi10cmlhbmdsZS0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTZweDsgfQ0KLnVpLWljb24tdHJpYW5nbGUtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNnB4OyB9DQoudWktaWNvbi10cmlhbmdsZS0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTZweDsgfQ0KLnVpLWljb24tdHJpYW5nbGUtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNnB4OyB9DQoudWktaWNvbi10cmlhbmdsZS0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTZweDsgfQ0KLnVpLWljb24tdHJpYW5nbGUtMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTZweDsgfQ0KLnVpLWljb24tdHJpYW5nbGUtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2cHg7IH0NCi51aS1pY29uLXRyaWFuZ2xlLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNnB4OyB9DQoudWktaWNvbi1hcnJvdy0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4OyB9DQoudWktaWNvbi1hcnJvdy0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTMycHg7IH0NCi51aS1pY29uLWFycm93LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4OyB9DQoudWktaWNvbi1hcnJvdy0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTMycHg7IH0NCi51aS1pY29uLWFycm93LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0zMnB4OyB9DQoudWktaWNvbi1hcnJvdy0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTMycHg7IH0NCi51aS1pY29uLWFycm93LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4OyB9DQoudWktaWNvbi1hcnJvdy0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0zMnB4OyB9DQoudWktaWNvbi1hcnJvdy0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMzJweDsgfQ0KLnVpLWljb24tYXJyb3ctMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMzJweDsgfQ0KLnVpLWljb24tYXJyb3ctMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTMycHg7IH0NCi51aS1pY29uLWFycm93LTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHg7IH0NCi51aS1pY29uLWFycm93c3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTMycHg7IH0NCi51aS1pY29uLWFycm93c3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTMycHg7IH0NCi51aS1pY29uLWFycm93c3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHg7IH0NCi51aS1pY29uLWFycm93c3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTMycHg7IH0NCi51aS1pY29uLWFycm93dGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfQ0KLnVpLWljb24tYXJyb3d0aGljay0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTQ4cHg7IH0NCi51aS1pY29uLWFycm93dGhpY2stMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTQ4cHg7IH0NCi51aS1pY29uLWFycm93dGhpY2stMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC00OHB4OyB9DQoudWktaWNvbi1hcnJvd3RoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC00OHB4OyB9DQoudWktaWNvbi1hcnJvd3RoaWNrLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweDsgfQ0KLnVpLWljb24tYXJyb3d0aGljay0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNDhweDsgfQ0KLnVpLWljb24tYXJyb3d0aGljay0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC00OHB4OyB9DQoudWktaWNvbi1hcnJvd3RoaWNrLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4OyB9DQoudWktaWNvbi1hcnJvd3RoaWNrLTItbmUtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTQ4cHg7IH0NCi51aS1pY29uLWFycm93dGhpY2stMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHg7IH0NCi51aS1pY29uLWFycm93dGhpY2stMi1zZS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNDhweDsgfQ0KLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC00OHB4OyB9DQoudWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHg7IH0NCi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNDhweDsgfQ0KLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC00OHB4OyB9DQoudWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH0NCi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHg7IH0NCi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTY0cHg7IH0NCi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHg7IH0NCi51aS1pY29uLWFycm93cmV0dXJuLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC02NHB4OyB9DQoudWktaWNvbi1hcnJvd3JldHVybi0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNjRweDsgfQ0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHg7IH0NCi51aS1pY29uLWFycm93cmV0dXJuLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNjRweDsgfQ0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNjRweDsgfQ0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNjRweDsgfQ0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNjRweDsgfQ0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNjRweDsgfQ0KLnVpLWljb24tYXJyb3ctNCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH0NCi51aS1pY29uLWFycm93LTQtZGlhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4OyB9DQoudWktaWNvbi1leHRsaW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTgwcHg7IH0NCi51aS1pY29uLW5ld3dpbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4OyB9DQoudWktaWNvbi1yZWZyZXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTgwcHg7IH0NCi51aS1pY29uLXNodWZmbGUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtODBweDsgfQ0KLnVpLWljb24tdHJhbnNmZXItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTgwcHg7IH0NCi51aS1pY29uLXRyYW5zZmVydGhpY2stZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC04MHB4OyB9DQoudWktaWNvbi1mb2xkZXItY29sbGFwc2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfQ0KLnVpLWljb24tZm9sZGVyLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweDsgfQ0KLnVpLWljb24tZG9jdW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweDsgfQ0KLnVpLWljb24tZG9jdW1lbnQtYiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC05NnB4OyB9DQoudWktaWNvbi1ub3RlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTk2cHg7IH0NCi51aS1pY29uLW1haWwtY2xvc2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTk2cHg7IH0NCi51aS1pY29uLW1haWwtb3BlbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC05NnB4OyB9DQoudWktaWNvbi1zdWl0Y2FzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtOTZweDsgfQ0KLnVpLWljb24tY29tbWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtOTZweDsgfQ0KLnVpLWljb24tcGVyc29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC05NnB4OyB9DQoudWktaWNvbi1wcmludCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtOTZweDsgfQ0KLnVpLWljb24tdHJhc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTk2cHg7IH0NCi51aS1pY29uLWxvY2tlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtOTZweDsgfQ0KLnVpLWljb24tdW5sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHg7IH0NCi51aS1pY29uLWJvb2ttYXJrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4OyB9DQoudWktaWNvbi10YWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTk2cHg7IH0NCi51aS1pY29uLWhvbWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMTJweDsgfQ0KLnVpLWljb24tZmxhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweDsgfQ0KLnVpLWljb24tY2FsZW5kYXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTEycHg7IH0NCi51aS1pY29uLWNhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTEycHg7IH0NCi51aS1pY29uLXBlbmNpbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweDsgfQ0KLnVpLWljb24tY2xvY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTEycHg7IH0NCi51aS1pY29uLWRpc2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTEycHg7IH0NCi51aS1pY29uLWNhbGN1bGF0b3IgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTExMnB4OyB9DQoudWktaWNvbi16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTExMnB4OyB9DQoudWktaWNvbi16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMTJweDsgfQ0KLnVpLWljb24tc2VhcmNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMTJweDsgfQ0KLnVpLWljb24td3JlbmNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweDsgfQ0KLnVpLWljb24tZ2VhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTEycHg7IH0NCi51aS1pY29uLWhlYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMTJweDsgfQ0KLnVpLWljb24tc3RhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTEycHg7IH0NCi51aS1pY29uLWxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTExMnB4OyB9DQoudWktaWNvbi1jYW5jZWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweDsgfQ0KLnVpLWljb24tcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMjhweDsgfQ0KLnVpLWljb24tcGx1c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyB9DQoudWktaWNvbi1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweDsgfQ0KLnVpLWljb24tbWludXN0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMjhweDsgfQ0KLnVpLWljb24tY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTI4cHg7IH0NCi51aS1pY29uLWNsb3NldGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTI4cHg7IH0NCi51aS1pY29uLWtleSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTI4cHg7IH0NCi51aS1pY29uLWxpZ2h0YnVsYiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7IH0NCi51aS1pY29uLXNjaXNzb3JzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweDsgfQ0KLnVpLWljb24tY2xpcGJvYXJkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMjhweDsgfQ0KLnVpLWljb24tY29weSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHg7IH0NCi51aS1pY29uLWNvbnRhY3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTEyOHB4OyB9DQoudWktaWNvbi1pbWFnZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTI4cHg7IH0NCi51aS1pY29uLXZpZGVvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMjhweDsgfQ0KLnVpLWljb24tc2NyaXB0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMjhweDsgfQ0KLnVpLWljb24tYWxlcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsgfQ0KLnVpLWljb24taW5mbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNDRweDsgfQ0KLnVpLWljb24tbm90aWNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE0NHB4OyB9DQoudWktaWNvbi1oZWxwIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE0NHB4OyB9DQoudWktaWNvbi1jaGVjayB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNDRweDsgfQ0KLnVpLWljb24tYnVsbGV0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE0NHB4OyB9DQoudWktaWNvbi1yYWRpby1vZmYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHg7IH0NCi51aS1pY29uLXJhZGlvLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweDsgfQ0KLnVpLWljb24tcGluLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4OyB9DQoudWktaWNvbi1waW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQ0cHg7IH0NCi51aS1pY29uLXBsYXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNjBweDsgfQ0KLnVpLWljb24tcGF1c2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTYwcHg7IH0NCi51aS1pY29uLXNlZWstbmV4dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNjBweDsgfQ0KLnVpLWljb24tc2Vlay1wcmV2IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4OyB9DQoudWktaWNvbi1zZWVrLWVuZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweDsgfQ0KLnVpLWljb24tc2Vlay1zdGFydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfQ0KLyogdWktaWNvbi1zZWVrLWZpcnN0IGlzIGRlcHJlY2F0ZWQsIHVzZSB1aS1pY29uLXNlZWstc3RhcnQgaW5zdGVhZCAqLw0KLnVpLWljb24tc2Vlay1maXJzdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfQ0KLnVpLWljb24tc3RvcCB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNjBweDsgfQ0KLnVpLWljb24tZWplY3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2MHB4OyB9DQoudWktaWNvbi12b2x1bWUtb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweDsgfQ0KLnVpLWljb24tdm9sdW1lLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNjBweDsgfQ0KLnVpLWljb24tcG93ZXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNzZweDsgfQ0KLnVpLWljb24tc2lnbmFsLWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHg7IH0NCi51aS1pY29uLXNpZ25hbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNzZweDsgfQ0KLnVpLWljb24tYmF0dGVyeS0wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE3NnB4OyB9DQoudWktaWNvbi1iYXR0ZXJ5LTEgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHg7IH0NCi51aS1pY29uLWJhdHRlcnktMiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNzZweDsgfQ0KLnVpLWljb24tYmF0dGVyeS0zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE3NnB4OyB9DQoudWktaWNvbi1jaXJjbGUtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9DQoudWktaWNvbi1jaXJjbGUtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTkycHg7IH0NCi51aS1pY29uLWNpcmNsZS1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xOTJweDsgfQ0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHg7IH0NCi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE5MnB4OyB9DQoudWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xOTJweDsgfQ0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHg7IH0NCi51aS1pY29uLWNpcmNsZS1hcnJvdy1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xOTJweDsgfQ0KLnVpLWljb24tY2lyY2xlLWFycm93LXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE5MnB4OyB9DQoudWktaWNvbi1jaXJjbGUtYXJyb3ctdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHg7IH0NCi51aS1pY29uLWNpcmNsZS1hcnJvdy1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xOTJweDsgfQ0KLnVpLWljb24tY2lyY2xlLXpvb21pbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTkycHg7IH0NCi51aS1pY29uLWNpcmNsZS16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xOTJweDsgfQ0KLnVpLWljb24tY2lyY2xlLWNoZWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xOTJweDsgfQ0KLnVpLWljb24tY2lyY2xlc21hbGwtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIwOHB4OyB9DQoudWktaWNvbi1jaXJjbGVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweDsgfQ0KLnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjA4cHg7IH0NCi51aS1pY29uLXNxdWFyZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjA4cHg7IH0NCi51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIwOHB4OyB9DQoudWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMDhweDsgfQ0KLnVpLWljb24tZ3JpcC1kb3R0ZWQtdmVydGljYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweDsgfQ0KLnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMjRweDsgfQ0KLnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMjRweDsgfQ0KLnVpLWljb24tZ3JpcC1zb2xpZC1ob3Jpem9udGFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIyNHB4OyB9DQoudWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHg7IH0NCi51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjI0cHg7IH0NCg0KDQovKiBNaXNjIHZpc3VhbHMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQovKiBDb3JuZXIgcmFkaXVzICovDQoudWktY29ybmVyLWFsbCwgLnVpLWNvcm5lci10b3AsIC51aS1jb3JuZXItbGVmdCwgLnVpLWNvcm5lci10bCB7IC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiA0cHg7IC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OyAta2h0bWwtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OyBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7IH0NCi51aS1jb3JuZXItYWxsLCAudWktY29ybmVyLXRvcCwgLnVpLWNvcm5lci1yaWdodCwgLnVpLWNvcm5lci10ciB7IC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNHB4OyAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7IC1raHRtbC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OyB9DQoudWktY29ybmVyLWFsbCwgLnVpLWNvcm5lci1ib3R0b20sIC51aS1jb3JuZXItbGVmdCwgLnVpLWNvcm5lci1ibCB7IC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiA0cHg7IC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OyAta2h0bWwtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7IH0NCi51aS1jb3JuZXItYWxsLCAudWktY29ybmVyLWJvdHRvbSwgLnVpLWNvcm5lci1yaWdodCwgLnVpLWNvcm5lci1iciB7IC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogNHB4OyAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7IC1raHRtbC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OyB9DQoNCi8qIE92ZXJsYXlzICovDQoudWktd2lkZ2V0LW92ZXJsYXkgeyBiYWNrZ3JvdW5kOiAjYWFhYWFhIHVybChpbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBvcGFjaXR5OiAuMzA7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzApOyB9DQoudWktd2lkZ2V0LXNoYWRvdyB7IG1hcmdpbjogLThweCAwIDAgLThweDsgcGFkZGluZzogOHB4OyBiYWNrZ3JvdW5kOiAjYWFhYWFhIHVybChpbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBvcGFjaXR5OiAuMzA7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzApOyAtbW96LWJvcmRlci1yYWRpdXM6IDhweDsgLWtodG1sLWJvcmRlci1yYWRpdXM6IDhweDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA4cHg7IGJvcmRlci1yYWRpdXM6IDhweDsgfS8qDQogKiBqUXVlcnkgVUkgUmVzaXphYmxlIDEuOC4xNg0KICoNCiAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQ0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvUmVzaXphYmxlI3RoZW1pbmcNCiAqLw0KLnVpLXJlc2l6YWJsZSB7IHBvc2l0aW9uOiByZWxhdGl2ZTt9DQoudWktcmVzaXphYmxlLWhhbmRsZSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTtmb250LXNpemU6IDAuMXB4O3otaW5kZXg6IDk5OTk5OyBkaXNwbGF5OiBibG9jazsgfQ0KLnVpLXJlc2l6YWJsZS1kaXNhYmxlZCAudWktcmVzaXphYmxlLWhhbmRsZSwgLnVpLXJlc2l6YWJsZS1hdXRvaGlkZSAudWktcmVzaXphYmxlLWhhbmRsZSB7IGRpc3BsYXk6IG5vbmU7IH0NCi51aS1yZXNpemFibGUtbiB7IGN1cnNvcjogbi1yZXNpemU7IGhlaWdodDogN3B4OyB3aWR0aDogMTAwJTsgdG9wOiAtNXB4OyBsZWZ0OiAwOyB9DQoudWktcmVzaXphYmxlLXMgeyBjdXJzb3I6IHMtcmVzaXplOyBoZWlnaHQ6IDdweDsgd2lkdGg6IDEwMCU7IGJvdHRvbTogLTVweDsgbGVmdDogMDsgfQ0KLnVpLXJlc2l6YWJsZS1lIHsgY3Vyc29yOiBlLXJlc2l6ZTsgd2lkdGg6IDdweDsgcmlnaHQ6IC01cHg7IHRvcDogMDsgaGVpZ2h0OiAxMDAlOyB9DQoudWktcmVzaXphYmxlLXcgeyBjdXJzb3I6IHctcmVzaXplOyB3aWR0aDogN3B4OyBsZWZ0OiAtNXB4OyB0b3A6IDA7IGhlaWdodDogMTAwJTsgfQ0KLnVpLXJlc2l6YWJsZS1zZSB7IGN1cnNvcjogc2UtcmVzaXplOyB3aWR0aDogMTJweDsgaGVpZ2h0OiAxMnB4OyByaWdodDogMXB4OyBib3R0b206IDFweDsgfQ0KLnVpLXJlc2l6YWJsZS1zdyB7IGN1cnNvcjogc3ctcmVzaXplOyB3aWR0aDogOXB4OyBoZWlnaHQ6IDlweDsgbGVmdDogLTVweDsgYm90dG9tOiAtNXB4OyB9DQoudWktcmVzaXphYmxlLW53IHsgY3Vyc29yOiBudy1yZXNpemU7IHdpZHRoOiA5cHg7IGhlaWdodDogOXB4OyBsZWZ0OiAtNXB4OyB0b3A6IC01cHg7IH0NCi51aS1yZXNpemFibGUtbmUgeyBjdXJzb3I6IG5lLXJlc2l6ZTsgd2lkdGg6IDlweDsgaGVpZ2h0OiA5cHg7IHJpZ2h0OiAtNXB4OyB0b3A6IC01cHg7fQ==]]></data>
	</file>
	<file>
	  <filename>/function.admin_frontendprefstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCglpZiAoaXNzZXQoJHBhcmFtc1snZXhhbXBsZV9zeW50YXgnXSkpIA0KCXsNCgkJJHRoaXMgLT4gU2V0UHJlZmVyZW5jZSgnZXhhbXBsZV9zeW50YXgnLCAkcGFyYW1zWydleGFtcGxlX3N5bnRheCddKTsNCgl9DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzIC0+IENyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlZnJvbnRlbmRzZXR0aW5ncycsICRyZXR1cm5pZCkpOw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdlbmRmb3JtJywgJHRoaXMgLT4gQ3JlYXRlRm9ybUVuZCgpKTsNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignc2V0dGluZ3N0ZXh0JywgJHRoaXMgLT4gTGFuZygnZnJvbnRlbmRfaGVhZF9zZXR0aW5ncycpKTsNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignc3ludGF4X3NldHRpbmdzdGV4dCcsICR0aGlzIC0+IExhbmcoJ2Zyb250ZW5kX3N5bnRheGFyZWFfc2V0dGluZ3MnKSk7DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ2hlYWRfZGVzY3JpcHRpb24nLCAkdGhpcyAtPiBMYW5nKCdoZWFkX2Rlc2NyaXB0aW9uJykpOw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdjb250ZW50X2Rlc2NyaXB0aW9uJywgJHRoaXMgLT4gTGFuZygnY29udGVudF9kZXNjcmlwdGlvbicpKTsNCgkJDQoJCSRzbWFydHktPmFzc2lnbignd2lkdGhfdGl0bGUnLCAkdGhpcyAtPiBMYW5nKCdmcm9udGVuZF93aWR0aF90aXRsZScpKTsNCgkJJHNtYXJ0eS0+YXNzaWduKCd3aWR0aF9pbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnZnJvbnRlbmRfd2lkdGgnLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdmcm9udGVuZF93aWR0aCcsICc1MDAnKSwgMTAsIDI1NSkpOwkJDQoJCSRzbWFydHktPmFzc2lnbignaGVpZ2h0X3RpdGxlJywgJHRoaXMgLT4gTGFuZygnZnJvbnRlbmRfaGVpZ2h0X3RpdGxlJykpOw0KCQkkc21hcnR5LT5hc3NpZ24oJ2hlaWdodF9pbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnZnJvbnRlbmRfaGVpZ2h0JywgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfaGVpZ2h0JywgJzQwMCcpLCAxMCwgMjU1KSk7DQoJCQ0KCQkvKiBtb2RlcyAqLw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdmcm9udGVuZF9zeW50YXhfbW9kZScsICR0aGlzIC0+IExhbmcoJ3N5bnRheF9tb2RlJykpOw0KCQkJJG1vZGVzID0gYXJyYXkoDQoJCQkJJHRoaXMgLT4gTGFuZygnanMnKSA9PiAnamF2YXNjcmlwdCcsIA0KCQkJCSR0aGlzIC0+IExhbmcoJ3BsYWluJykgPT4gJ3BsYWluJywgDQoJCQkJJHRoaXMgLT4gTGFuZygnc3ZnJykgPT4gJ3N2ZycsIA0KCQkJCSR0aGlzIC0+IExhbmcoJ2h0bWwnKSA9PiAnaHRtbCcsDQoJCQkJJHRoaXMgLT4gTGFuZygnY3NzJykgPT4gJ2NzcycsDQoJCQkJJHRoaXMgLT4gTGFuZygnc2NzcycpID0+ICdzY3NzJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdjb2ZmZWUnKSA9PiAnY29mZmVlJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdqc29uJykgPT4gJ2pzb24nLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3B5dGhvbicpID0+ICdweXRob24nLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3J1YnknKSA9PiAncnVieScsDQoJCQkJJHRoaXMgLT4gTGFuZygncGVybCcpID0+ICdwZXJsJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdwaHAnKSA9PiAncGhwJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdqYXZhJykgPT4gJ2phdmEnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2NzaGFycCcpID0+ICdjc2hhcnAnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2NfY3BwJykgPT4gJ2NfY3BwJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdjbG9qdXJlJykgPT4gJ2Nsb2p1cmUnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ29jYW1sJykgPT4gJ29jYW1sJywNCgkJCQkkdGhpcyAtPiBMYW5nKCd0ZXh0aWxlJykgPT4gJ3RleHRpbGUnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2dyb292eScpID0+ICdncm9vdnknLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3NjYWxhJykgPT4gJ3NjYWxhJw0KCQkJCSk7CQ0KCQkvLyBoZWFkIG11bHRpc2VsZWN0CQkNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignZnJvbnRlbmRfc3ludGF4X21vZGVpbnB1dCcsICR0aGlzIC0+IENyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsICdmcm9udGVuZF9tb2RlW10nLCAkbW9kZXMsIGV4cGxvZGUoJywnLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9tb2RlJywgJ2h0bWwnKSksIDUpKTsNCgkJLy8gc3ludGF4YXJlYSBwcmVmDQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ2Zyb250ZW5kX3N5bnRheGFyZWFfbW9kZWlucHV0JywgJHRoaXMgLT4gQ3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdmcm9udGVuZF9zeW50YXhhcmVhX21vZGUnLCAkbW9kZXMsIC0xLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9zeW50YXhhcmVhX21vZGUnLCAnaHRtbCcpKSk7CQkNCgkJDQoJCS8qIHRoZW1lcyAqLwkJDQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3RoZW1ldGV4dCcsICR0aGlzIC0+IExhbmcoJ3RoZW1lcycpKTsNCgkJCSR0aGVtZXMgPSBhcnJheSgNCgkJCQkkdGhpcyAtPiBMYW5nKCdjaHJvbWUnKSA9PiAnY2hyb21lJywgDQoJCQkJJHRoaXMgLT4gTGFuZygnY2xvdWRzJykgPT4gJ2Nsb3VkcycsIA0KCQkJCSR0aGlzIC0+IExhbmcoJ2Nsb3Vkc19taWRuaWdodCcpID0+ICdjbG91ZHNfbWlkbmlnaHQnLCANCgkJCQkkdGhpcyAtPiBMYW5nKCdjb2JhbHQnKSA9PiAnY29iYWx0JywgDQoJCQkJJHRoaXMgLT4gTGFuZygnY3JpbXNvbl9lZGl0b3InKSA9PiAnY3JpbXNvbl9lZGl0b3InLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2Rhd24nKSA9PiAnZGF3bicsDQoJCQkJJHRoaXMgLT4gTGFuZygnZHJlYW13ZWF2ZXInKSA9PiAnZHJlYW13ZWF2ZXInLCANCgkJCQkkdGhpcyAtPiBMYW5nKCdlY2xpcHNlJykgPT4gJ2VjbGlwc2UnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2lkbGVfZmluZ2VycycpID0+ICdpZGxlX2ZpbmdlcnMnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2tyX3RoZW1lJykgPT4gJ2tyX3RoZW1lJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdtZXJiaXZvcmUnKSA9PiAnbWVyYml2b3JlJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdtZXJiaXZvcmVfc29mdCcpID0+ICdtZXJiaXZvcmVfc29mdCcsDQoJCQkJJHRoaXMgLT4gTGFuZygnbW9ub19pbmR1c3RyaWFsJykgPT4gJ21vbm9faW5kdXN0cmlhbCcsDQoJCQkJJHRoaXMgLT4gTGFuZygnbW9ub2thaScpID0+ICdtb25va2FpJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdwYXN0ZWxfb25fZGFyaycpID0+ICdwYXN0ZWxfb25fZGFyaycsDQoJCQkJJHRoaXMgLT4gTGFuZygnc29sYXJpemVkX2RhcmsnKSA9PiAnc29sYXJpemVkX2RhcmsnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3NvbGFyaXplZF9saWdodCcpID0+ICdzb2xhcml6ZWRfbGlnaHQnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3RleHRtYXRlJykgPT4gJ3RleHRtYXRlJywNCgkJCQkkdGhpcyAtPiBMYW5nKCd0d2lsaWdodCcpID0+ICd0d2lsaWdodCcsDQoJCQkJJHRoaXMgLT4gTGFuZygndmlicmFudF9pbmsnKSA9PiAndmlicmFudF9pbmsnCQkNCgkJCSk7DQoJCS8vIGhlYWQgdGhlbWVzDQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ2Zyb250ZW5kX3RoZW1laW5wdXQnLCAkdGhpcyAtPiBDcmVhdGVJbnB1dFNlbGVjdExpc3QoJGlkLCAnZnJvbnRlbmRfdGhlbWVbXScsICR0aGVtZXMsIGV4cGxvZGUoJywnLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdmcm9udGVuZF90aGVtZScsICd0ZXh0bWF0ZScpKSwgNSkpOw0KCQkvLyBzeW50YXhhcmVhIHRoZW1lCQ0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCd0aGVtZWlucHV0JywgJHRoaXMgLT4gQ3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdmcm9udGVuZF9zeW50YXhhcmVhX3RoZW1lJywgJHRoZW1lcywgLTEsICR0aGlzIC0+IEdldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3N5bnRheGFyZWFfdGhlbWUnLCAndGV4dG1hdGUnKSkpOw0KCQkNCgkJLyogZm9udCBzaXplICovDQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ2ZvbnRzaXpldGV4dCcsICR0aGlzIC0+IExhbmcoJ2ZvbnRfc2l6ZScpKTsNCgkJCSRmb250cyA9IGFycmF5KA0KCQkJCScxMHB4JyA9PiAnMTBweCcsIA0KCQkJCScxMXB4JyA9PiAnMTFweCcsIA0KCQkJCScxMnB4JyA9PiAnMTJweCcsIA0KCQkJCScxNHB4JyA9PiAnMTRweCcsDQoJCQkJJzE2cHgnID0+ICcxNnB4JywNCgkJCQknMjBweCcgPT4gJzIwcHgnLA0KCQkJCScyNHB4JyA9PiAnMjRweCcNCgkJCSk7DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ2ZvbnRzaXplaW5wdXQnLCAkdGhpcyAtPiBDcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2Zyb250ZW5kX2ZvbnRzaXplJywgJGZvbnRzLCAtMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfZm9udHNpemUnLCAnMTJweCcpKSk7CQkNCgkJLy8gc3VibWl0IHNldHRpbmdzDQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ2Zyb250ZW5kc3VibWl0JywgJHRoaXMgLT4gQ3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnZnJvbnRlbmRzdWJtaXQnLCAkdGhpcyAtPiBMYW5nKCdzYXZlc2V0dGluZ3MnKSkpOw0KCQkNCgkvKiBQcm9jZXNzVGVtcGFsdGUgKi8NCgllY2hvICR0aGlzIC0+IFByb2Nlc3NUZW1wbGF0ZSgnZnJvbnRlbmRzZXR0aW5ncy50cGwnKTsNCg0KPz4J]]></data>
	</file>
	<file>
	  <filename>/function.admin_prefstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCglpZiAoaXNzZXQoJHBhcmFtc1snZXhhbXBsZV9zeW50YXgnXSkpIA0KCXsNCgkJJHRoaXMgLT4gU2V0UHJlZmVyZW5jZSgnZXhhbXBsZV9zeW50YXgnLCAkcGFyYW1zWydleGFtcGxlX3N5bnRheCddKTsNCgl9DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzIC0+IENyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlc2V0dGluZ3MnLCAkcmV0dXJuaWQpKTsNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignZW5kZm9ybScsICR0aGlzIC0+IENyZWF0ZUZvcm1FbmQoKSk7DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3NldHRpbmdzdGV4dCcsICR0aGlzIC0+IExhbmcoJ3NldHRpbmdzX3RhYicpKTsNCgkJDQoJCSRzbWFydHktPmFzc2lnbignd2lkdGhfdGl0bGUnLCAkdGhpcyAtPiBMYW5nKCd3aWR0aF90aXRsZScpKTsNCgkJJHNtYXJ0eS0+YXNzaWduKCd3aWR0aF9pbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnd2lkdGgnLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCd3aWR0aCcsICc4MCcpLCAxMCwgMjU1KSk7CQkNCgkJJHNtYXJ0eS0+YXNzaWduKCdoZWlnaHRfdGl0bGUnLCAkdGhpcyAtPiBMYW5nKCdoZWlnaHRfdGl0bGUnKSk7DQoJCSRzbWFydHktPmFzc2lnbignaGVpZ2h0X2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdoZWlnaHQnLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdoZWlnaHQnLCAnNDAnKSwgMTAsIDI1NSkpOw0KCQkNCgkJLyogbW9kZSBkcm9wZG93biAqLw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdzeW50YXhfbW9kZScsICR0aGlzIC0+IExhbmcoJ3N5bnRheF9tb2RlJykpOw0KCQkJJG1vZGVzID0gYXJyYXkoDQoJCQkJJHRoaXMgLT4gTGFuZygnanMnKSA9PiAnamF2YXNjcmlwdCcsIA0KCQkJCSR0aGlzIC0+IExhbmcoJ3BsYWluJykgPT4gJ3BsYWluJywgDQoJCQkJJHRoaXMgLT4gTGFuZygnc3ZnJykgPT4gJ3N2ZycsIA0KCQkJCSR0aGlzIC0+IExhbmcoJ2h0bWwnKSA9PiAnaHRtbCcsDQoJCQkJJHRoaXMgLT4gTGFuZygnY3NzJykgPT4gJ2NzcycsDQoJCQkJJHRoaXMgLT4gTGFuZygnc2NzcycpID0+ICdzY3NzJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdjb2ZmZWUnKSA9PiAnY29mZmVlJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdqc29uJykgPT4gJ2pzb24nLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3B5dGhvbicpID0+ICdweXRob24nLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3J1YnknKSA9PiAncnVieScsDQoJCQkJJHRoaXMgLT4gTGFuZygncGVybCcpID0+ICdwZXJsJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdwaHAnKSA9PiAncGhwJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdqYXZhJykgPT4gJ2phdmEnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2NzaGFycCcpID0+ICdjc2hhcnAnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2NfY3BwJykgPT4gJ2NfY3BwJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdjbG9qdXJlJykgPT4gJ2Nsb2p1cmUnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ29jYW1sJykgPT4gJ29jYW1sJywNCgkJCQkkdGhpcyAtPiBMYW5nKCd0ZXh0aWxlJykgPT4gJ3RleHRpbGUnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2dyb292eScpID0+ICdncm9vdnknLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3NjYWxhJykgPT4gJ3NjYWxhJw0KCQkJCSk7CQ0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdzeW50YXhfbW9kZWlucHV0JywgJHRoaXMgLT4gQ3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdtb2RlJywgJG1vZGVzLCAtMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnbW9kZScsICdodG1sJyksJ29uY2hhbmdlPSJ0aGlzLmZvcm0uc3VibWl0KCkiJykpOwkJCQkNCgkJDQoJCS8qIHRoZW1lcyAqLwkJDQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3RoZW1ldGV4dCcsICR0aGlzIC0+IExhbmcoJ3RoZW1lcycpKTsNCgkJCSR0aGVtZXMgPSBhcnJheSgNCgkJCQkkdGhpcyAtPiBMYW5nKCdjaHJvbWUnKSA9PiAnY2hyb21lJywgDQoJCQkJJHRoaXMgLT4gTGFuZygnY2xvdWRzJykgPT4gJ2Nsb3VkcycsIA0KCQkJCSR0aGlzIC0+IExhbmcoJ2Nsb3Vkc19taWRuaWdodCcpID0+ICdjbG91ZHNfbWlkbmlnaHQnLCANCgkJCQkkdGhpcyAtPiBMYW5nKCdjb2JhbHQnKSA9PiAnY29iYWx0JywgDQoJCQkJJHRoaXMgLT4gTGFuZygnY3JpbXNvbl9lZGl0b3InKSA9PiAnY3JpbXNvbl9lZGl0b3InLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2Rhd24nKSA9PiAnZGF3bicsDQoJCQkJJHRoaXMgLT4gTGFuZygnZHJlYW13ZWF2ZXInKSA9PiAnZHJlYW13ZWF2ZXInLCANCgkJCQkkdGhpcyAtPiBMYW5nKCdlY2xpcHNlJykgPT4gJ2VjbGlwc2UnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2lkbGVfZmluZ2VycycpID0+ICdpZGxlX2ZpbmdlcnMnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ2tyX3RoZW1lJykgPT4gJ2tyX3RoZW1lJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdtZXJiaXZvcmUnKSA9PiAnbWVyYml2b3JlJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdtZXJiaXZvcmVfc29mdCcpID0+ICdtZXJiaXZvcmVfc29mdCcsDQoJCQkJJHRoaXMgLT4gTGFuZygnbW9ub19pbmR1c3RyaWFsJykgPT4gJ21vbm9faW5kdXN0cmlhbCcsDQoJCQkJJHRoaXMgLT4gTGFuZygnbW9ub2thaScpID0+ICdtb25va2FpJywNCgkJCQkkdGhpcyAtPiBMYW5nKCdwYXN0ZWxfb25fZGFyaycpID0+ICdwYXN0ZWxfb25fZGFyaycsDQoJCQkJJHRoaXMgLT4gTGFuZygnc29sYXJpemVkX2RhcmsnKSA9PiAnc29sYXJpemVkX2RhcmsnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3NvbGFyaXplZF9saWdodCcpID0+ICdzb2xhcml6ZWRfbGlnaHQnLA0KCQkJCSR0aGlzIC0+IExhbmcoJ3RleHRtYXRlJykgPT4gJ3RleHRtYXRlJywNCgkJCQkkdGhpcyAtPiBMYW5nKCd0d2lsaWdodCcpID0+ICd0d2lsaWdodCcsDQoJCQkJJHRoaXMgLT4gTGFuZygndmlicmFudF9pbmsnKSA9PiAndmlicmFudF9pbmsnCQkNCgkJCSk7DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3RoZW1laW5wdXQnLCAkdGhpcyAtPiBDcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ3RoZW1lJywgJHRoZW1lcywgLTEsICR0aGlzIC0+IEdldFByZWZlcmVuY2UoJ3RoZW1lJywgJ3RleHRtYXRlJyksJ29uY2hhbmdlPSJ0aGlzLmZvcm0uc3VibWl0KCkiJykpOw0KCQkNCgkJLyogZm9udCBzaXplICovDQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ2ZvbnRzaXpldGV4dCcsICR0aGlzIC0+IExhbmcoJ2ZvbnRfc2l6ZScpKTsNCgkJCSRmb250cyA9IGFycmF5KA0KCQkJCScxMHB4JyA9PiAnMTBweCcsIA0KCQkJCScxMXB4JyA9PiAnMTFweCcsIA0KCQkJCScxMnB4JyA9PiAnMTJweCcsIA0KCQkJCScxNHB4JyA9PiAnMTRweCcsDQoJCQkJJzE2cHgnID0+ICcxNnB4JywNCgkJCQknMjBweCcgPT4gJzIwcHgnLA0KCQkJCScyNHB4JyA9PiAnMjRweCcNCgkJCSk7DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ2ZvbnRzaXplaW5wdXQnLCAkdGhpcyAtPiBDcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2ZvbnRzaXplJywgJGZvbnRzLCAtMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnZm9udHNpemUnLCAnMTJweCcpKSk7CQkNCgkJCQkJCQkJCQ0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdmdWxsX2xpbmV0ZXh0JywgJHRoaXMgLT4gTGFuZygnZnVsbF9saW5lJykpOw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdmdWxsX2xpbmVpbnB1dCcsICR0aGlzIC0+IENyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnZnVsbF9saW5lJywgMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnZnVsbF9saW5lJywgMSkpKTsNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignaGlnaGxpZ2h0X2FjdGl2ZXRleHQnLCAkdGhpcyAtPiBMYW5nKCdoaWdobGlnaHRfYWN0aXZlJykpOw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdoaWdobGlnaHRfYWN0aXZlaW5wdXQnLCAkdGhpcyAtPiBDcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2hpZ2hsaWdodF9hY3RpdmUnLCAxLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdoaWdobGlnaHRfYWN0aXZlJywgMSkpKTsNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignc2hvd19pbnZpc2libGVzdGV4dCcsICR0aGlzIC0+IExhbmcoJ3Nob3dfaW52aXNpYmxlcycpKTsNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignc2hvd19pbnZpc2libGVzaW5wdXQnLCAkdGhpcyAtPiBDcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3Nob3dfaW52aXNpYmxlcycsIDEsICR0aGlzIC0+IEdldFByZWZlcmVuY2UoJ3Nob3dfaW52aXNpYmxlcycsIDEpKSk7CQ0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdwZXJzaXN0ZW50X2hzY3JvbGx0ZXh0JywgJHRoaXMgLT4gTGFuZygncGVyc2lzdGVudF9oc2Nyb2xsJykpOw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdwZXJzaXN0ZW50X2hzY3JvbGxpbnB1dCcsICR0aGlzIC0+IENyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAncGVyc2lzdGVudF9oc2Nyb2xsJywgMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgncGVyc2lzdGVudF9oc2Nyb2xsJywgMSkpKTsNCg0KCQkvKiB0ZXh0IHdyYXBwaW5nICovDQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3NvZnRfd3JhcHRleHQnLCAkdGhpcyAtPiBMYW5nKCdzb2Z0X3dyYXAnKSk7DQoJCQkkc29mdF93cmFwID0gYXJyYXkoDQoJCQkJJHRoaXMgLT4gTGFuZygnb2ZmJykgPT4gJ29mZicsIA0KCQkJCSR0aGlzIC0+IExhbmcoJzQwJykgPT4gJzQwLDQwJywgDQoJCQkJJHRoaXMgLT4gTGFuZygnODAnKSA9PiAnODAsODAnLA0KCQkJCSR0aGlzIC0+IExhbmcoJzEwMCcpID0+ICcxMDAsMTAwJyANCgkJCSk7DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3NvZnRfd3JhcGlucHV0JywgJHRoaXMgLT4gQ3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdzb2Z0X3dyYXAnLCAkc29mdF93cmFwLCAtMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnc29mdF93cmFwJywgJzgwLDgwJykpKTsNCg0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdzaG93X2d1dHRlcnRleHQnLCAkdGhpcyAtPiBMYW5nKCdzaG93X2d1dHRlcicpKTsNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignc2hvd19ndXR0ZXJpbnB1dCcsICR0aGlzIC0+IENyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnc2hvd19ndXR0ZXInLCAxLCAkdGhpcyAtPiBHZXRQcmVmZXJlbmNlKCdzaG93X2d1dHRlcicsIDEpKSk7CQ0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdwcmludF9tYXJnaW50ZXh0JywgJHRoaXMgLT4gTGFuZygncHJpbnRfbWFyZ2luJykpOw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdwcmludF9tYXJnaW5pbnB1dCcsICR0aGlzIC0+IENyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAncHJpbnRfbWFyZ2luJywgMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgncHJpbnRfbWFyZ2luJywgMSkpKTsNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignc29mdF90YWJ0ZXh0JywgJHRoaXMgLT4gTGFuZygnc29mdF90YWInKSk7DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3NvZnRfdGFiaW5wdXQnLCAkdGhpcyAtPiBDcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3NvZnRfdGFiJywgMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnc29mdF90YWInLCAxKSkpOw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdoaWdobGlnaHRfc2VsZWN0ZWR0ZXh0JywgJHRoaXMgLT4gTGFuZygnaGlnaGxpZ2h0X3NlbGVjdGVkJykpOw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCdoaWdobGlnaHRfc2VsZWN0ZWRpbnB1dCcsICR0aGlzIC0+IENyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnaGlnaGxpZ2h0X3NlbGVjdGVkJywgMSwgJHRoaXMgLT4gR2V0UHJlZmVyZW5jZSgnaGlnaGxpZ2h0X3NlbGVjdGVkJywgMSkpKTsJDQoNCgkJJHRoaXMgLT4gc21hcnR5IC0+IGFzc2lnbignc3VibWl0JywgJHRoaXMgLT4gQ3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMgLT4gTGFuZygnc2F2ZXNldHRpbmdzJykpKTsNCgkJDQoJCS8qIHNhbXBsZSBjb250ZW50ICovDQoJCSRzeW50YXhfY29udGVudCA9ICcnOw0KCQlzd2l0Y2ggKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtb2RlJywnaHRtbCcpKSB7DQoJCQljYXNlICdodG1sJyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQo8aHRtbD4NCjxoZWFkPg0KDQo8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+DQoudGV4dC1sYXllciB7DQogICAgZm9udC1mYW1pbHk6IE1vbmFjbywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7DQogICAgZm9udC1zaXplOiAxMnB4Ow0KICAgIGN1cnNvcjogdGV4dDsNCn0NCjwvc3R5bGU+DQoNCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxoMSBzdHlsZT1cImNvbG9yOnJlZFwiPkp1aHUgS2lubmVyczwvaDE+DQo8L2JvZHk+DQo8L2h0bWw+DQoJCQkJIjsNCgkJCQlicmVhazsNCgkJCX0NCgkJCWNhc2UgJ2NzcycgOiB7DQoJCQkJJHN5bnRheF9jb250ZW50ID0gIg0KLnRleHQtbGF5ZXIgew0KICAgIGZvbnQtZmFtaWx5OiBNb25hY28sIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlOw0KICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICBjdXJzb3I6IHRleHQ7DQp9CQkJCSI7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQljYXNlICdqYXZhc2NyaXB0JyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQpmdW5jdGlvbiBmb28oaXRlbXMpIHsNCiAgICBmb3IgKHZhciBpPTA7IGk8aXRlbXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgYWxlcnQoaXRlbXNbaV0gKyBcImp1aHVcIik7DQogICAgfQkvLyBSZWFsIFRhYi4NCn0JCQkJIjsNCgkJCQlicmVhazsNCgkJCX0NCgkJCWNhc2UgJ3BsYWluJyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQpMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMgYXQgdmVybyBlcm9zIGV0IGFjY3Vtc2FuIGV0IGl1c3RvIG9kaW8gZGlnbmlzc2ltIHF1aSBibGFuZGl0IHByYWVzZW50IGx1cHRhdHVtIHp6cmlsIGRlbGVuaXQgYXVndWUgZHVpcyBkb2xvcmUgdGUgZmV1Z2FpdCBudWxsYSBmYWNpbGlzaS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQsIHNlZCBkaWFtIG5vbnVtbXkgbmliaCBldWlzbW9kIHRpbmNpZHVudCB1dCBsYW9yZWV0IGRvbG9yZSBtYWduYSBhbGlxdWFtIGVyYXQgdm9sdXRwYXQuDQoJCQkJIjsNCgkJCQlicmVhazsNCgkJCX0NCgkJCWNhc2UgJ3N2ZycgOiB7DQoJCQkJJHN5bnRheF9jb250ZW50ID0gIg0KPHN2Zw0KICB3aWR0aD1cIjgwMFwiIGhlaWdodD1cIjYwMFwiDQogIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIg0KICBvbmxvYWQ9XCJTdGFydEFuaW1hdGlvbihldnQpXCI+DQoNCiAgPHRpdGxlPlRlc3QgVHViZSBQcm9ncmVzcyBCYXI8L3RpdGxlPg0KICA8ZGVzYz5DcmVhdGVkIGZvciB0aGUgV2ViIERpcmVjdGlvbnMgU1ZHIGNvbXBldGl0aW9uPC9kZXNjPg0KDQogIDxzY3JpcHQgdHlwZT1cInRleHQvZWNtYXNjcmlwdFwiPjwhW0NEQVRBWw0KICAgIHZhciB0aW1ldmFsdWUgPSAwOw0KICAgIHZhciB0aW1lcl9pbmNyZW1lbnQgPSAxOw0KICAgIHZhciBtYXhfdGltZSA9IDEwMDsNCiAgICB2YXIgaGlja29yeTsNCiAgICB2YXIgZGlja29yeTsNCiAgICB2YXIgZG9jazsNCiAgICB2YXIgaTsNCg0KICAgIGZ1bmN0aW9uIFN0YXJ0QW5pbWF0aW9uKGV2dCkgew0KICAgICAgICBoaWNrb3J5ICA9IGV2dC50YXJnZXQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhpY2tvcnlcIik7DQogICAgICAgIGRpY2tvcnkgPSBldnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkaWNrb3J5XCIpOw0KICAgICAgICBkb2NrID0gZXZ0LnRhcmdldC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZG9ja1wiKTsNCg0KICAgICAgICBTaG93QW5kR3Jvd0VsZW1lbnQoKTsNCiAgICB9DQogICAgZnVuY3Rpb24gU2hvd0FuZEdyb3dFbGVtZW50KCkgew0KICAgICAgICB0aW1ldmFsdWUgPSB0aW1ldmFsdWUgKyB0aW1lcl9pbmNyZW1lbnQ7DQogICAgICAgIGlmICh0aW1ldmFsdWUgPiBtYXhfdGltZSkNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgLy8gU2NhbGUgdGhlIHRleHQgc3RyaW5nIGdyYWR1YWxseSB1bnRpbCBpdCBpcyAyMCB0aW1lcyBsYXJnZXINCiAgICAgICAgc2NhbGVmYWN0b3IgPSAodGltZXZhbHVlICogNjUwKSAvIG1heF90aW1lOw0KDQogICAgICAgIGlmICh0aW1ldmFsdWUgPCAzMCkgew0KICAgICAgICAgICAgaGlja29yeS5zZXRBdHRyaWJ1dGUoXCJkaXNwbGF5XCIsIFwiXCIpOw0KICAgICAgICAgICAgaGlja29yeS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAoNjAwK3NjYWxlZmFjdG9yKjMqLTEgKSArIFwiLCAtMTQ0IClcIik7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodGltZXZhbHVlID4gMzAgJiYgdGltZXZhbHVlIDwgNjYpIHsNCiAgICAgICAgICAgIGRpY2tvcnkuc2V0QXR0cmlidXRlKFwiZGlzcGxheVwiLCBcIlwiKTsNCiAgICAgICAgICAgIGRpY2tvcnkuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKC03OTUrc2NhbGVmYWN0b3IqMikgKyBcIiwgMCApXCIpOw0KICAgICAgICB9DQogICAgICAgIGlmICh0aW1ldmFsdWUgPiA2Nikgew0KICAgICAgICAgICAgZG9jay5zZXRBdHRyaWJ1dGUoXCJkaXNwbGF5XCIsIFwiXCIpOw0KICAgICAgICAgICAgZG9jay5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAoMTQ1MCtzY2FsZWZhY3RvcioyKi0xKSArIFwiLCAxNDQgKVwiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIENhbGwgU2hvd0FuZEdyb3dFbGVtZW50IGFnYWluIDx0aW1lcl9pbmNyZW1lbnQ+IG1pbGxpc2Vjb25kcyBsYXRlci4NCiAgICAgICAgc2V0VGltZW91dChcIlNob3dBbmRHcm93RWxlbWVudCgpXCIsIHRpbWVyX2luY3JlbWVudCkNCiAgICB9DQogICAgd2luZG93LlNob3dBbmRHcm93RWxlbWVudCA9IFNob3dBbmRHcm93RWxlbWVudA0KICBdXT48L3NjcmlwdD4NCg0KICA8cmVjdA0KICAgIGZpbGw9XCIjMmUzNDM2XCINCiAgICBmaWxsLXJ1bGU9XCJub256ZXJvXCINCiAgICBzdHJva2Utd2lkdGg9XCIzXCINCiAgICB5PVwiMFwiDQogICAgeD1cIjBcIg0KICAgIGhlaWdodD1cIjYwMFwiDQogICAgd2lkdGg9XCI4MDBcIg0KICAgIGlkPVwicmVjdDM1OTBcIi8+DQoNCiAgICA8dGV4dA0KICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjE0NHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmb250LWZhbWlseTpCaXRzdHJlYW0gVmVyYSBTYW5zOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Qml0c3RyZWFtIFZlcmEgU2FucyBCb2xkXCINCiAgICAgICB4PVwiNTBcIg0KICAgICAgIHk9XCIzNTBcIg0KICAgICAgIGlkPVwiaGlja29yeVwiDQogICAgICAgZGlzcGxheT1cIm5vbmVcIj4NCiAgICAgICAgSGlja29yeSw8L3RleHQ+DQogICAgPHRleHQNCiAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxNDRweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMgQm9sZFwiDQogICAgICAgeD1cIjUwXCINCiAgICAgICB5PVwiMzUwXCINCiAgICAgICBpZD1cImRpY2tvcnlcIg0KICAgICAgIGRpc3BsYXk9XCJub25lXCI+DQogICAgICAgIGRpY2tvcnksPC90ZXh0Pg0KICAgIDx0ZXh0DQogICAgICAgc3R5bGU9XCJmb250LXNpemU6MTQ0cHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpCaXRzdHJlYW0gVmVyYSBTYW5zIEJvbGRcIg0KICAgICAgIHg9XCI1MFwiDQogICAgICAgeT1cIjM1MFwiDQogICAgICAgaWQ9XCJkb2NrXCINCiAgICAgICBkaXNwbGF5PVwibm9uZVwiPg0KICAgICAgICBkb2NrITwvdGV4dD4NCjwvc3ZnPgkJCSI7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQljYXNlICdzY3NzJyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQovKiBzdHlsZS5zY3NzICovDQoNCiNuYXZiYXIgew0KICAgIFwkbmF2YmFyLXdpZHRoOiA4MDBweDsNCiAgICBcJGl0ZW1zOiA1Ow0KICAgIFwkbmF2YmFyLWNvbG9yOiAjY2U0ZGQ2Ow0KDQogICAgd2lkdGg6IFwkbmF2YmFyLXdpZHRoOw0KICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBcJG5hdmJhci1jb2xvcjsNCg0KICAgIGxpIHsNCiAgICAgICAgZmxvYXQ6IGxlZnQ7DQogICAgICAgIHdpZHRoOiBcJG5hdmJhci13aWR0aC9cJGl0ZW1zIC0gMTBweDsNCg0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKFwkbmF2YmFyLWNvbG9yLCAyMCUpOw0KICAgICAgICAmOmhvdmVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oXCRuYXZiYXItY29sb3IsIDEwJSk7DQogICAgICAgIH0NCiAgICB9DQp9CQkJCSI7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQljYXNlICdjb2ZmZWUnIDogew0KCQkJCSRzeW50YXhfY29udGVudCA9ICINCiMhL3Vzci9iaW4vZW52IGNvZmZlZQ0KDQp0cnkNCiAgICB0aHJvdyBVUklFcnJvciBkZWNvZGVVUkkoMHhDMGZmZWUgKiAxMjM0NTYuN2UtOCAvIC45KQ0KY2F0Y2ggZQ0KICAgIGNvbnNvbGUubG9nICdxc3RyaW5nJyArIFwicXFzdHJpbmdcIiArICcnJw0KICAgICAgICBxZG9jDQogICAgJycnICsgXCJcIlwiDQogICAgICAgIHFxZG9jDQogICAgXCJcIlwiDQoNCmRvIC0+DQogICAgIyMjDQogICAgaGVyZWNvbW1lbnQNCiAgICAjIyMNCiAgICByZSA9IC9yZWdleC9pbWd5LnRlc3QgLy8vDQogICAgICAgIGhlcmVnZXggICMgY29tbWVudA0KICAgIC8vL2ltZ3kNCiAgICB0aGlzIGlzbnQ6IGBqdXN0IEphdmFTY3JpcHRgDQogICAgdW5kZWZpbmVkCQkJCQ0KICAgIAkJCSI7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQljYXNlICdqc29uJyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQp7DQogXCJxdWVyeVwiOiB7DQogIFwiY291bnRcIjogMTAsDQogIFwiY3JlYXRlZFwiOiBcIjIwMTEtMDYtMjFUMDg6MTA6NDZaXCIsDQogIFwibGFuZ1wiOiBcImVuLVVTXCIsDQogIFwicmVzdWx0c1wiOiB7DQogICBcInBob3RvXCI6IFsNCiAgICB7DQogICAgIFwiZmFybVwiOiBcIjZcIiwNCiAgICAgXCJpZFwiOiBcIjU4NTU2MjA5NzVcIiwNCiAgICAgXCJpc2ZhbWlseVwiOiBcIjBcIiwNCiAgICAgXCJpc2ZyaWVuZFwiOiBcIjBcIiwNCiAgICAgXCJpc3B1YmxpY1wiOiBcIjFcIiwNCiAgICAgXCJvd25lclwiOiBcIjMyMDIxNTU0QE4wNFwiLA0KICAgICBcInNlY3JldFwiOiBcImYxZjVlODUxNWRcIiwNCiAgICAgXCJzZXJ2ZXJcIjogXCI1MTEwXCIsDQogICAgIFwidGl0bGVcIjogXCI3MDg3IGJhbmRpdCBjYXRcIg0KICAgIH0sDQogICAgew0KICAgICBcImZhcm1cIjogXCI0XCIsDQogICAgIFwiaWRcIjogXCI1ODU2MTcwNTM0XCIsDQogICAgIFwiaXNmYW1pbHlcIjogXCIwXCIsDQogICAgIFwiaXNmcmllbmRcIjogXCIwXCIsDQogICAgIFwiaXNwdWJsaWNcIjogXCIxXCIsDQogICAgIFwib3duZXJcIjogXCIzMjAyMTU1NEBOMDRcIiwNCiAgICAgXCJzZWNyZXRcIjogXCJmZjFlZmIyYTZmXCIsDQogICAgIFwic2VydmVyXCI6IFwiMzIxN1wiLA0KICAgICBcInRpdGxlXCI6IFwiNjk3NSBydXN0eSBjYXRcIg0KICAgIH0sDQogICAgew0KICAgICBcImZhcm1cIjogXCI2XCIsDQogICAgIFwiaWRcIjogXCI1ODU2MTcyOTcyXCIsDQogICAgIFwiaXNmYW1pbHlcIjogXCIwXCIsDQogICAgIFwiaXNmcmllbmRcIjogXCIwXCIsDQogICAgIFwiaXNwdWJsaWNcIjogXCIxXCIsDQogICAgIFwib3duZXJcIjogXCI1MTI0OTg3NUBOMDNcIiwNCiAgICAgXCJzZWNyZXRcIjogXCI2YzY4ODczNDdjXCIsDQogICAgIFwic2VydmVyXCI6IFwiNTE5MlwiLA0KICAgICBcInRpdGxlXCI6IFwid2F0ZXJtYXJrZWQtY2F0c1wiDQogICAgfSwNCiAgICB7DQogICAgIFwiZmFybVwiOiBcIjZcIiwNCiAgICAgXCJpZFwiOiBcIjU4NTYxNjgzMjhcIiwNCiAgICAgXCJpc2ZhbWlseVwiOiBcIjBcIiwNCiAgICAgXCJpc2ZyaWVuZFwiOiBcIjBcIiwNCiAgICAgXCJpc3B1YmxpY1wiOiBcIjFcIiwNCiAgICAgXCJvd25lclwiOiBcIjMyMDIxNTU0QE4wNFwiLA0KICAgICBcInNlY3JldFwiOiBcIjBjMWNmZGY2NGNcIiwNCiAgICAgXCJzZXJ2ZXJcIjogXCI1MDc4XCIsDQogICAgIFwidGl0bGVcIjogXCI3MDIwIG1hbmR5IGNhdFwiDQogICAgfSwNCiAgICB7DQogICAgIFwiZmFybVwiOiBcIjNcIiwNCiAgICAgXCJpZFwiOiBcIjU4NTYxNzE3NzRcIiwNCiAgICAgXCJpc2ZhbWlseVwiOiBcIjBcIiwNCiAgICAgXCJpc2ZyaWVuZFwiOiBcIjBcIiwNCiAgICAgXCJpc3B1YmxpY1wiOiBcIjFcIiwNCiAgICAgXCJvd25lclwiOiBcIjMyMDIxNTU0QE4wNFwiLA0KICAgICBcInNlY3JldFwiOiBcIjdmNWEzMTgwYWJcIiwNCiAgICAgXCJzZXJ2ZXJcIjogXCIyNjk2XCIsDQogICAgIFwidGl0bGVcIjogXCI3NDQ4IGJvYmJ5IGNhdFwiDQogICAgfQ0KICAgXQ0KICB9DQogfQ0KfQkJCQkiOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJY2FzZSAncHl0aG9uJyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQojIS91c3IvbG9jYWwvYmluL3B5dGhvbg0KDQppbXBvcnQgc3RyaW5nLCBzeXMNCg0KIyBJZiBubyBhcmd1bWVudHMgd2VyZSBnaXZlbiwgcHJpbnQgYSBoZWxwZnVsIG1lc3NhZ2UNCmlmIGxlbihzeXMuYXJndik9PTE6DQogICAgcHJpbnQgJ1VzYWdlOiBjZWxzaXVzIHRlbXAxIHRlbXAyIC4uLicNCiAgICBzeXMuZXhpdCgwKQ0KDQojIExvb3Agb3ZlciB0aGUgYXJndW1lbnRzDQpmb3IgaSBpbiBzeXMuYXJndlsxOl06DQogICAgdHJ5Og0KICAgICAgICBmYWhyZW5oZWl0PWZsb2F0KHN0cmluZy5hdG9pKGkpKQ0KICAgIGV4Y2VwdCBzdHJpbmcuYXRvaV9lcnJvcjoNCiAgICAgICAgcHJpbnQgcmVwcihpKSwgXCJub3QgYSBudW1lcmljIHZhbHVlXCIJDQogICAgZWxzZToNCiAgICAgICAgY2Vsc2l1cz0oZmFocmVuaGVpdC0zMikqNS4wLzkuMA0KICAgICAgICBwcmludCAnJWlcXDI2MEYgPSAlaVxcMjYwQycgJSAoaW50KGZhaHJlbmhlaXQpLCBpbnQoY2Vsc2l1cysuNSkpDQogICAgICAgIAkJIjsNCgkJCQlicmVhazsNCgkJCX0NCgkJCWNhc2UgJ3BocCcgOiB7DQoJCQkJJHN5bnRheF9jb250ZW50ID0gIg0KPD9waHANCg0KZnVuY3Rpb24gbmZhY3QoXCRuKSB7DQogIGlmIChcJG4gPT0gMCkgew0KICAgIHJldHVybiAxOw0KICB9DQogIGVsc2Ugew0KICAgIHJldHVybiBcJG4gKiBuZmFjdChcJG4gLSAxKTsNCiAgfQ0KfQ0KDQplY2hvIFwiXFxuXFxuUGxlYXNlIGVudGVyIGEgd2hvbGUgbnVtYmVyIC4uLiBcIjsNClwkbnVtID0gdHJpbShmZ2V0cyhTVERJTikpOw0KDQovLyA9PT09PSBQUk9DRVNTIC0gRGV0ZXJtaW5nIHRoZSBmYWN0b3JpYWwgb2YgdGhlIGlucHV0IG51bWJlciA9PT09PQ0KXCRvdXRwdXQgPSBcIlxcblxcbkZhY3RvcmlhbCBcIiAuIFwkbnVtIC4gXCIgPSBcIiAuIG5mYWN0KFwkbnVtKSAuIFwiXFxuXFxuXCI7DQplY2hvIFwkb3V0cHV0Ow0KDQo/Pg0KCQkJCSI7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQljYXNlICdydWJ5JyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQojIS91c3IvYmluL3J1YnkNCg0KIyBQcm9ncmFtIHRvIGZpbmQgdGhlIGZhY3RvcmlhbCBvZiBhIG51bWJlcg0KZGVmIGZhY3QobikNCiAgICBpZiBuID09IDANCiAgICAgICAgMQ0KICAgIGVsc2UNCiAgICAgICAgbiAqIGZhY3Qobi0xKQ0KICAgIGVuZA0KZW5kDQoNCnB1dHMgZmFjdChBUkdWWzBdLnRvX2kpDQoJCQkJIjsNCgkJCQlicmVhazsNCgkJCX0NCgkJCWNhc2UgJ3BlcmwnIDogew0KCQkJCSRzeW50YXhfY29udGVudCA9ICINCiMhL3Vzci9iaW4vcGVybA0KdXNlIHN0cmljdDsNCnVzZSB3YXJuaW5nczsNCm15IFwkbnVtX3ByaW1lcyA9IDA7DQpteSBAcHJpbWVzOw0KDQojIFB1dCAyIGFzIHRoZSBmaXJzdCBwcmltZSBzbyB3ZSB3b24ndCBoYXZlIGFuIGVtcHR5IGFycmF5DQpcJHByaW1lc1tcJG51bV9wcmltZXNdID0gMjsNClwkbnVtX3ByaW1lcysrOw0KDQpNQUlOX0xPT1A6DQpmb3IgbXkgXCRudW1iZXJfdG9fY2hlY2sgKDMgLi4gMjAwKQ0Kew0KICAgIGZvciBteSBcJHAgKDAgLi4gKFwkbnVtX3ByaW1lcy0xKSkNCiAgICB7DQogICAgICAgIGlmIChcJG51bWJlcl90b19jaGVjayAlIFwkcHJpbWVzW1wkcF0gPT0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgbmV4dCBNQUlOX0xPT1A7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAjIElmIHdlIHJlYWNoZWQgdGhpcyBwb2ludCBpdCBtZWFucyBcJG51bWJlcl90b19jaGVjayBpcyBub3QNCiAgICAjIGRpdmlzYWJsZSBieSBhbnkgcHJpbWUgbnVtYmVyIHRoYXQgY2FtZSBiZWZvcmUgaXQuDQogICAgXCRwcmltZXNbXCRudW1fcHJpbWVzXSA9IFwkbnVtYmVyX3RvX2NoZWNrOw0KICAgIFwkbnVtX3ByaW1lcysrOw0KfQ0KDQpmb3IgbXkgXCRwICgwIC4uIChcJG51bV9wcmltZXMtMSkpDQp7DQogICAgcHJpbnQgXCRwcmltZXNbXCRwXSwgXCIsIFwiOw0KfQ0KcHJpbnQgXCJcXG5cIjsNCgkJCQkiOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJY2FzZSAnamF2YScgOiB7DQoJCQkJJHN5bnRheF9jb250ZW50ID0gIg0KcHVibGljIGNsYXNzIEluZmluaXRlTG9vcCB7DQoNCiAgICAvKg0KICAgICAqIFRoaXMgd2lsbCBjYXVzZSB0aGUgcHJvZ3JhbSB0byBoYW5nLi4uDQogICAgICoNCiAgICAgKiBUYWtlbiBmcm9tOg0KICAgICAqIGh0dHA6Ly93d3cuZXhwbG9yaW5nYmluYXJ5LmNvbS9qYXZhLWhhbmdzLXdoZW4tY29udmVydGluZy0yLTIyNTA3Mzg1ODUwNzIwMTJlLTMwOC8NCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQogICAgICAgIGRvdWJsZSBkID0gRG91YmxlLnBhcnNlRG91YmxlKFwiMi4yMjUwNzM4NTg1MDcyMDEyZS0zMDhcIik7DQoNCiAgICAgICAgLy8gdW5yZWFjaGFibGUgY29kZQ0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJWYWx1ZTogXCIgKyBkKTsNCiAgICB9DQp9DQoJCQkJIjsNCgkJCQlicmVhazsNCgkJCX0NCgkJCWNhc2UgJ2NzaGFycCcgOiB7DQoJCQkJJHN5bnRheF9jb250ZW50ID0gIg0KcHVibGljIHZvaWQgSGVsbG9Xb3JsZCgpIHsNCiAgIC8vU2F5IEhlbGxvIQ0KICAgQ29uc29sZS5Xcml0ZUxpbmUoXCJIZWxsbyBXb3JsZFwiKTsNCn0JCQkJDQoJCQkJIjsNCgkJCQlicmVhazsNCgkJCX0NCgkJCWNhc2UgJ2NfY3BwJyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQovLyBjb21wb3VuZCBhc3NpZ25tZW50IG9wZXJhdG9ycw0KDQojaW5jbHVkZSA8aW9zdHJlYW0+DQp1c2luZyBuYW1lc3BhY2Ugc3RkOw0KDQppbnQgbWFpbiAoKQ0Kew0KICAgIGludCBhLCBiPTM7IC8qIGZvb2JhciAqLw0KICAgIGEgPSBiOw0KICAgIGErPTI7IC8vIGVxdWl2YWxlbnQgdG8gYT1hKzINCiAgICBjb3V0IDw8IGE7DQogICAgcmV0dXJuIDA7DQp9CQkJCQ0KCQkJCSI7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQljYXNlICdjbG9qdXJlJyA6IHsNCgkJCQkkc3ludGF4X2NvbnRlbnQgPSAiDQooZGVmbiBwYXJ0aW5nDQogIFwicmV0dXJucyBhIFN0cmluZyBwYXJ0aW5nIGluIGEgZ2l2ZW4gbGFuZ3VhZ2VcIg0KICAoW10gKHBhcnRpbmcgXCJXb3JsZFwiKSkNCiAgKFtuYW1lXSAocGFydGluZyBuYW1lIFwiZW5cIikpDQogIChbbmFtZSBsYW5ndWFnZV0NCiAgICA7IGNvbmRwIGlzIHNpbWlsYXIgdG8gYSBjYXNlIHN0YXRlbWVudCBpbiBvdGhlciBsYW5ndWFnZXMuDQogICAgOyBJdCBpcyBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuDQogICAgOyBJdCBpcyB1c2VkIGhlcmUgdG8gdGFrZSBkaWZmZXJlbnQgYWN0aW9ucyBiYXNlZCBvbiB3aGV0aGVyIHRoZQ0KICAgIDsgcGFyYW1ldGVyIFwibGFuZ3VhZ2VcIiBpcyBzZXQgdG8gXCJlblwiLCBcImVzXCIgb3Igc29tZXRoaW5nIGVsc2UuDQogICAgKGNvbmRwID0gbGFuZ3VhZ2UNCiAgICAgIFwiZW5cIiAoc3RyIFwiR29vZGJ5ZSwgXCIgbmFtZSkNCiAgICAgIFwiZXNcIiAoc3RyIFwiQWRpb3MsIFwiIG5hbWUpDQogICAgICAodGhyb3cgKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi4NCiAgICAgICAgKHN0ciBcInVuc3VwcG9ydGVkIGxhbmd1YWdlIFwiIGxhbmd1YWdlKSkpKSkpDQoNCihwcmludGxuIChwYXJ0aW5nKSkgOyAtPiBHb29kYnllLCBXb3JsZA0KKHByaW50bG4gKHBhcnRpbmcgXCJNYXJrXCIpKSA7IC0+IEdvb2RieWUsIE1hcmsNCihwcmludGxuIChwYXJ0aW5nIFwiTWFya1wiIFwiZXNcIikpIDsgLT4gQWRpb3MsIE1hcmsNCihwcmludGxuIChwYXJ0aW5nIFwiTWFya1wiLCBcInh5XCIpKSA7IC0+IGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb246IHVuc3VwcG9ydGVkIGxhbmd1YWdlIHh5CQkJCQ0KCQkJCSI7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQljYXNlICdvY2FtbCcgOiB7DQoJCQkJJHN5bnRheF9jb250ZW50ID0gIg0KKCoNCiAqIEV4YW1wbGUgb2YgZWFybHkgcmV0dXJuIGltcGxlbWVudGF0aW9uIHRha2VuIGZyb20NCiAqIGh0dHA6Ly9vY2FtbC5qYW5lc3RyZWV0LmNvbS8/cT1ub2RlLzkxDQogKikNCg0KbGV0IHdpdGhfcmV0dXJuICh0eXBlIHQpIChmIDogXyAtPiB0KSA9DQogIGxldCBtb2R1bGUgTSA9DQogICAgIHN0cnVjdCBleGNlcHRpb24gUmV0dXJuIG9mIHQgZW5kDQogIGluDQogIGxldCByZXR1cm4gPSB7IHJldHVybiA9IChmdW4geCAtPiByYWlzZSAoTS5SZXR1cm4geCkpOyB9IGluDQogIHRyeSBmIHJldHVybiB3aXRoIE0uUmV0dXJuIHggLT4geA0KDQoNCigqIEZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgJ2Vhcmx5IHJldHVybicgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSBgd2l0aF9yZXR1cm5gICopDQpsZXQgc3VtX3VudGlsX2ZpcnN0X25lZ2F0aXZlIGxpc3QgPQ0KICB3aXRoX3JldHVybiAoZnVuIHIgLT4NCiAgICBMaXN0LmZvbGQgbGlzdCB+aW5pdDowIH5mOihmdW4gYWNjIHggLT4NCiAgICAgIGlmIHggPj0gMCB0aGVuIGFjYyArIHggZWxzZSByLnJldHVybiBhY2MpKQkJCQkNCgkJCQkiOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJY2FzZSAndGV4dGlsZScgOiB7DQoJCQkJJHN5bnRheF9jb250ZW50ID0gIg0KaDEuIFRleHRpbGUgZG9jdW1lbnQNCg0KaDIuIEhlYWRpbmcgVHdvDQoNCmgzLiBBIHR3by1saW5lDQogICAgaGVhZGVyDQoNCmgyLiBBbm90aGVyIHR3by1saW5lDQpoZWFkZXINCg0KUGFyYWdyYXBoOg0Kb25lLCB0d28sDQp0aGVlIGxpbmVzIQ0KDQpwKGNsYXNzb25lIHR3byB0aHJlZSkuIFRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBjbGFzc2VzDQoNCnAoI2lkKS4gKG9uZSB3aXRoIGFuIGlkKQ0KDQpwKG9uZSB0d28gdGhyZWUjbXlfaWQpLiAuLmNsYXNzZXMgKyBpZA0KDQoqIFVub3JkZXJlZCBsaXN0DQoqKiBzdWJsaXN0DQoqIGJhY2sgYWdhaW4hDQoqKiBzdWJsaXN0IGFnYWluLi4NCg0KIyBvcmRlcmVkDQoNCmJnLiBCbG9ja3F1b3RlIQ0KICAgIFRoaXMgaXMgYSB0d28tbGlzdCBibG9ja3F1b3RlLi4hCQkJCQ0KCQkJCSI7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQljYXNlICdncm9vdnknIDogew0KCQkJCSRzeW50YXhfY29udGVudCA9ICINCg0KLy9odHRwOi8vZ3Jvb3Z5LmNvZGVoYXVzLm9yZy9Db25jdXJyZW5jeSt3aXRoK0dyb292eQ0KaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyDQoNCmRlZiBjb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoKQ0KDQpzeW5jaHJvbml6ZWQgb3V0KG1lc3NhZ2UpIHsNCiAgICBwcmludGxuKG1lc3NhZ2UpDQp9DQoNCmRlZiB0aCA9IFRocmVhZC5zdGFydCB7DQogICAgZm9yKCBpIGluIDEuLjggKSB7DQogICAgICAgIHNsZWVwIDMwDQogICAgICAgIG91dCBcInRocmVhZCBsb29wIFwkaVwiDQogICAgICAgIGNvdW50ZXIuaW5jcmVtZW50QW5kR2V0KCkNCiAgICB9DQp9DQoNCmZvciggaiBpbiAxLi40ICkgew0KICAgIHNsZWVwIDUwDQogICAgb3V0IFwibWFpbiBsb29wIFwkalwiDQogICAgY291bnRlci5pbmNyZW1lbnRBbmRHZXQoKQ0KfQ0KDQp0aC5qb2luKCkNCg0KYXNzZXJ0IGNvdW50ZXIuZ2V0KCkgPT0gMTINCgkJCQkNCgkJCQkiOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJY2FzZSAnc2NhbGEnIDogew0KCQkJCSRzeW50YXhfY29udGVudCA9ICINCi8vaHR0cDovL3d3dy5zY2FsYS1sYW5nLm9yZy9ub2RlLzIyNw0KLyogRGVmaW5lcyBhIG5ldyBtZXRob2QgJ3NvcnQnIGZvciBhcnJheSBvYmplY3RzICovDQpvYmplY3QgaW1wbGljaXRzIGV4dGVuZHMgQXBwbGljYXRpb24gew0KICBpbXBsaWNpdCBkZWYgYXJyYXlXcmFwcGVyW0EgOiBDbGFzc01hbmlmZXN0XSh4OiBBcnJheVtBXSkgPQ0KICAgIG5ldyB7DQogICAgICBkZWYgc29ydChwOiAoQSwgQSkgPT4gQm9vbGVhbikgPSB7DQogICAgICAgIHV0aWwuU29ydGluZy5zdGFibGVTb3J0KHgsIHApOyB4DQogICAgICB9DQogICAgfQ0KICB2YWwgeCA9IEFycmF5KDIsIDMsIDEsIDQpDQogIHByaW50bG4oXCJ4ID0gXCIrIHguc29ydCgoeDogSW50LCB5OiBJbnQpID0+IHggPCB5KSkNCn0JCQkJDQoJCQkJIjsNCgkJCQlicmVhazsNCgkJCX0gDQoJCX0JDQoJCQ0KCQkvKiBjcmVhdGUgdGVzdCB0ZXh0YXJlYSAqLw0KCQkkdGhpcyAtPiBzbWFydHkgLT4gYXNzaWduKCd0ZXN0YXJlYXRleHQnLCAkdGhpcyAtPiBMYW5nKCd0ZXN0YXJlYXRleHQnKSk7DQoJCSR0aGlzIC0+IHNtYXJ0eSAtPiBhc3NpZ24oJ3Rlc3RhcmVhJywgJHRoaXMgLT4gQ3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRzeW50YXhfY29udGVudCwndGVzdGFyZWEnLCcnLCcnLCcnLCcnLCcnLCcnLCdBY2VFZGl0b3InLCR0aGlzLT5HZXRQcmVmZXJlbmNlKA0KCQknbW9kZScsDQoJCSd0aGVtZScsDQoJCSdmb250c2l6ZScsDQoJCSdmdWxsX2xpbmUnLA0KCQknaGlnaGxpZ2h0X2FjdGl2ZScsDQoJCSdzaG93X2ludmlzaWJsZXMnLA0KCQkncGVyc2lzdGVuX2hzY3JvbGwnLA0KCQkna2V5YmluZGluZycsDQoJCSdzb2Z0X3dyYXAnLA0KCQknc2hvd19ndXR0ZXInLA0KCQkncHJpbnRfbWFyZ2luJywNCgkJJ3NvZnRfdGFiJywNCgkJJ2hpZ2hsaWdodF9zZWxlY3RlZCcsDQoJCSdlbmFibGVfYmVoYXZpb3JzJw0KCQkpKSk7DQoJCQ0KCS8qIFByb2Nlc3NUZW1wYWx0ZSAqLw0KCWVjaG8gJHRoaXMgLT4gUHJvY2Vzc1RlbXBsYXRlKCdzZXR0aW5ncy50cGwnKTsNCg0KPz4J]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/editor.JPG</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4AAQSkZJRgABAQEAYABgAAD/4RDgRXhpZgAATU0AKgAAAAgABAE7AAIAAAAHAAAISodpAAQAAAABAAAIUpydAAEAAAAOAAAQyuocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVuaXF1MwAAAAWQAwACAAAAFAAAEKCQBAACAAAAFAAAELSSkQACAAAAAzIzAACSkgACAAAAAzIzAADqHAAHAAAIDAAACJQAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMDExOjEyOjAzIDE1OjM4OjUzADIwMTE6MTI6MDMgMTU6Mzg6NTMAAAB1AG4AaQBxAHUAMwAAAP/hCxlodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIi8+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4bXA6Q3JlYXRlRGF0ZT4yMDExLTEyLTAzVDE1OjM4OjUzLjIyNTwveG1wOkNyZWF0ZURhdGU+PC9yZGY6RGVzY3JpcHRpb24+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpjcmVhdG9yPjxyZGY6U2VxIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpsaT51bmlxdTM8L3JkZjpsaT48L3JkZjpTZXE+DQoJCQk8L2RjOmNyZWF0b3I+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSd3Jz8+/9sAQwAHBQUGBQQHBgUGCAcHCAoRCwoJCQoVDxAMERgVGhkYFRgXGx4nIRsdJR0XGCIuIiUoKSssKxogLzMvKjInKisq/9sAQwEHCAgKCQoUCwsUKhwYHCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq/8AAEQgBAwE8AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A9v1C9+yXdnH5e/7VP5Oc42/u2fPv9zH41YqvqH2v7XZ/ZP8AV+f/AKR0/wBX5bev+1s6c/hmrFMOoUUUUgCiiigDxH9oz/mXP+3r/wBpV5QfC2rDRX1XyIfsscSzPi6i8xEZgqsYt28AkjBK85Fer/tGf8y5/wBvX/tKvO7nxlE/hX+x7S21GMGKFNk+pma3iZCrNJHCU+RmZT/EQAzDHNSw6lC48Ha1aWqXFzBBFGZI4n3XkOYXflVlG/MRPP3wuMHPQ1Jd+BvENleQ2tzYKs0zlFVbiJtuBuy5DEIu0FgzYBUFgcDNLqWtaHqM8ly+h3KXV1OJrqT+0MjkkuIl8v5NxP8AH5mB+dTXnibTZ/EsuqW2lXcUV3HLHdwSXyuXDqVOxhENhGcjIbkenFT/AF/X9fIP6/r+vmV7Pwwy+JLLStcnezW+KCC4tFju0cs21SGWQKVzkEhjggjGaq6PpVpqV1dW1xeTW80cEssHl24kWQxozkMS6lQQvUBuvStK28SaTbavpcy6Temx0v57e3/tBPMaXzN+55PJwR22hRwBz1zFputaDp+s3N5/ZGoyRSRPHFF/aUYZN8bI5ZvI+bhsjAGMc5pajVvy/wCCc7WoumWknhiXUoruY3MFxHDLbtbgIA4cqyybySf3fIKjr1NULloGuZGs45IoCx8tJZA7KOwLBVBPvgfStiy1bRoPDNxptzpd9LcXDpK1xHfoiB0DhMIYScYk5G7nHBFN7C6kFz4a1S00v7fPDCIQiSOq3MTSxq+NrPEG3qDlcFlA+YeorW1DwTHp+m6eX1WB9Rv9myBZ7UwpvzgtIJywGB94oFzxml1XxzPq+g/YrmfWxKYY4mRdXP2RtgAz9nMfcLnG/G7n2qhretaVqCWTabpl5aT2kaRBri+WZWRAcfKIkIOcc5/Cq0v8/wABa2+X46FTXdAu/D181rfS2cjq7pm1vI5xlTg5CMSv0YA+3WjQ9Bu/EF1NBYy2kbwwvMxurlIQVUZOC5AJ4/DqcDJqfxDq+m6vcPcWGlPZ3E88lxcSy3RmLM5ztUBVCoDnAILc8saraJqUWlaiZri3a5gkhlgljSTy2KyIUO1sEAjOQSD9KmO2o35E9t4X1O8u7mC3Fo32UqJZjfwLCC33QJS+wk84AYng+hqxB4G8Q3Fv5yWUar57W22W6hjczKcGLYzht/omNx7A05dc0Roriyl0S5TTXeOSKK31ALKropUs0jRsG3biSAqjIGMDIO3J4i0G60GO81WMXV6upy3cdhBdSQvChEaqrMYWR1xGM4YNgDnJID/r8v8Agi/r+v6+85OPQdSl0S61dLU/YbOVYZ5S6go7dBtJ3fkKzq17zUdPu9HkMlmz6zc3rzz3bMVVIyBhEUHByxYkkcYAHesikr9SnboFFFFMQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH2Xql5f22u6dHCLb7FcSmKUuGMhby3YbeQFA2dTnOegxk1NV1TUrDW7KJBb/Y7iVIgphkZnycMTLwkeMjCncX6DBq3rOiyane28yate2X2Zt6JbrCRu2ldx3xsc4Yjrj2zTLrQhd6gtxJqN95IkSVrMOpid0IKnlSw5CnCsFJHI5OdF0B9fQ1aKKKQBRRRQB4j+0Z/wAy5/29f+0q8iurK2Tw5p9/CJVmmnnhmDuGUlBGwKjAI4kwQSemc84Hrv7Rn/Muf9vX/tKvJLjUIT4YstNtnm3rcS3FyGUKhYhVQDBO7AVjkgY3kD1MsRl0UUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH2Tq73sOvaW0N55drLOYZbcRKfMzE7ZLHJ42jAGO+Segy9S8TRw+M9P0mPUbe3AmCXEDum+YvGxUAH5gAQvI6l1GeorZ1bQbLVruKa8N2Hh5j8i9mhCnBGcI4GcEjPXBxTdStbCa5s574zh7RzLD5c0qhSBgswQ4IAOMtkYJ9TVOUYpOWyHZydl2NGiiimIKKKKAPEf2jP8AmXP+3r/2lXjAjRLEySLmSRsR+wHU/wBPzr2f9oz/AJlz/t6/9pV4pNM0xTcAAihFA6AD/JP41DAtX1vZxW0D2sxkdh86nHy9+cE9iBx6evFN02KCa5ZLkfuzG3zZPycdfwqnUsFxJbMzRbcspU7kDcH6ikBovpkJ8mJW2lUYzSqQRkEcZLBcAnHWoY9NjN9Lby3SoI8YbK/Nn6sB+p/GoU1C4SNI1MexAVCmFCCOvORz07046pdGR3Zo2aTBbdChBI6HBHXmlqBOmnRtFcqThbabDz4OQuD/AAkgdQOOvNZrbQ52Elc8EjBI+lWY9RuYixR1+dizbo1bcSCDnI56nj3qsTkknHPoMUK4zQuLOB1DW77ZPKjdotp2jdgfeJ9SD+PWkvNPjsk3rcRzMr7Wj3Lz9NrE4474NQNf3DBwTH86CNsRIPlHQdOP/rD0pJL6abaZPKYhg27yUyT7nGT+PWjURYNrBPfiPItUaASfKCwB2bj1OcdfWlh0yOf95Hc4g2k7nVUbOQMYLAd/X/Ckh1V1ukmuEVyilV8pEjIyMdQvOB2NQnUJ/O3qUA27QnlJt25zgrjB59qNRkq2EH2ieOS7AWJA4dFDhhxno3Xn35796pyqiysIn3oDw2MZH0qZL+eN5HQQgyABh5CYx9MYFV2O5iTjJOeBinqAlaBS0TTItqGS4mzgshGDkDgh8fmDWfVh72aS2WBvL2KMDESAj8cZ/WgRLLZwxh9twz+U4Wb93jHbK88/jim3trBauY4rkyupwwMe3H6/n/WmyX88uN5jOGDH90g3Ed24+bqeuaZc3Ut0++bYW9VjVc/XAGaWoyWxhhmjufPOwJGHEgBJX5gOBnBznv8ApUiWEBd990yxiISo/lZyucHIzwfzHv3qvb3c1rv8gqN42tuRWyPTkdKeuo3CyO4MZLgKd0KEYHQAEYA9hT1ESJZW7YLXRCyOUiIiznpy3PHUdM9/xkTSCxjYyOItmZX2D5DznjdyPl61Vivp4ARGY/vbhmJTtPqMjjt09KRb24WAQrKRGAw24HRuv8qWoyyumxvYeelyGkwD5YCnqcYPzZHXuAKLzTYrRQTdK+H2OFKEj3ADknp3x2qCS/uJIPKdk27QpIjUMQOgLAZPQd+1El9NKVMgiYht24wpkn3OMn8aeoE01jbR3a263mTv2uWj2hfxJx+eOe+Oaiv7RLOWNY5vNDpuzgcckdiQenY0NqNw1yJyY/MAIyIUGcjByMYPHrUU9xJcOGlK5A2gKoUAewAxS1An08Ql3+0QJIijczOzAIo69CMk8AVJELVVjZ7XzBcSMMbz+7XOMDHfnqc9uKrQXctsrrFsKvgsHjVwcdPvA+tPTUrpHdlkGXYuSUU4Y9xx8p9ximItfZreKZLNoRI8ik+fuIKnJxgdMcc5z36VLNZWapNKqrzD8kQY/I+Mk9c46dfX2rOS+uI4PJWQbMEcqCQD1AOMgH0FObULhpHcmPdImxj5KdPy4pWY9CrVvTI45r5Y5Y0kVlbh2KjIUkcgj0pl3dNdPGSu1Yo1jVc9AB/jk/jTLe4ktZfMhKhsEfMgbg9eCKYjQbTY5bnBMdsFhV5AjgqCTgbSzAHjB+96/SqF1ALe5aNZVlUYIdSCDx7EjP405L64jChWTCggBo1IwTkjBHIzzjtUUsjTSF3CgnsiBR+Q4pajPsPWopF8QaPcrdXKg3BhMCyFY2BikYllH3jlV65AxxjnPFeIDqM3i2LUYJ5JLJdSgsnit72QmIbirJJCBs2udpJY9CvBzXf6noWkarciXVNKsr2RF2q9xbpIVHXALA8U240HSLu9F5daVZT3QAAnkt0ZwBwPmIzUV6TqxUU7GlOag72DSJXa2kglbe1tIYt5OSwwCM++GAPuDV+mQwxW8Qit40ijXoiKFA/AU+tKUHCmoyd2iZyUpNpBRRRWhB4j+0Z/zLn/AG9f+0q8oNnbp4eEzMpkJzkbM/TO7Pb0/DrXq/7Rn/Muf9vX/tKvFftMpgWHf+7U7gMdDz3/ABNSzqw1WnT5ueN7ppepensrUzCK2MqESpGWkYMPmBOeAMYx+PtUEvkRqJbWGdWSTafOCuv8uvsc1E95dSqyyXMzq+CwaQkNjpmhr67eRHe6mZ4/uMZCSv09KRrOtRd3FW+S7+ull9/XuXPssE2pXXnMIo4huwvyjqB2U46+lENlZSXMp84tbjaFYMQdx7fcJPQ9h0qmb67aZZWupjIowrmQ5H0NAvrsStILqYSMMM/mHJHuaasX9Yoc1+Xq3t6+f4eW6LkdjaqWjn85pBc+QGRgBj1wQfyzSrbQTQWYkRxJMhVXQBVGGPJ4+b36YA71T+33gORdT53bv9Yevr9aGvrtkZWupirDDAyHBHvS6DWIw605dPRd0+/ZW+dx7MH0yMuifLKVyqhSRgdSBz+NWDp0LTGNfMQfaViEjHIwwJ9OvH69Kpm9ujB5JuZjFjGzzDtx6YpGu7l4hE9xK0YAAQuSMDoMU+pmq1H7Sb0X4J+e22vkTX0NpGENpNubJDoSxx6HJRferXhW0S+8XaVbypHJG93H5iSYwyhgWGD1yARtGSTwASQKz5ru4uQBcTyyhem9y2Pzp1heSadqVtfQBTLbTJMgcZBZSCM+3FI5cRKNSTcFZelv1Y28mNxezzMqKZJGYrHGI1GT2VQAo9gABUNS3My3F1LMkMcCyOWEUZYqmT0G4k4HuSfeoqS2Ik7tsKKKKZIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB9b+KbvRLDxNot1qd7aW13HOdpuLgKUjMUgJAY4ALYBIHOAM8CszW5gfHCHUF0yWOM24sba9XfJNvfDvBlgFZTyTtYnAHyjBPa3N5awXsNtNcwxz3GfJieQBpNoydo6nA64qpJrukRakNOl1WyS+JCi1a4QSknkDZnPOfStE9gf6F+iiikAUUUUAeI/tGf8y5/29f+0q8afNvYLH0e4w7f7o6D8Tk/lXsv7Rn/ADLn/b1/7SrxJmZzl2LHAGSc9OBUMC5fXdtcW0CQW4jeMYZgDz345OOSf88CGwhE97HGYmlHJKJ1IAz6jP0zVeikBumytPtm37JIGEAcQCNizNuwcpvz07bvf2qJIYxc3kUOnNKwRWSKZHDjkZwA2cc565xWPUsFtPdSFLaGSZ1RnKxqWIVRljx2ABJPYClYYk6NHO6OqoysQVU5A9s5NX44jNpKGGxidlLh5ssCmACCTuwO/WqVpZ3N/dR2tjby3NxIcJFChd2PsByaiIIOCMEU+gjTltEWzZvsjLGsSut183zsccencjAGRj2NUrIRm+hWdA8bMFYEkDnjtzRd2d1YXBt762mtpgATHNGUYAjIODzyCD+NQUB0NaayW1WKOKBbud5G4UNkbR8y4DevfrxSy2TrqV3vs5JnBLRROH+cbsZ9T+dZFFKwzfuIma9uFaw86U28TJHJvZh90EDBBOOffj60yC2d7eC3uLMyB7p0G1mIjBAztwfr1z0NYdFFguKysjFXBVgcEEYINactoi2bH7IyxrErrdfN87HHHp3IwBkY9jWXRTEa+qPdR2NvC9q9vBtXj94F3c8YJx79M1QsmhF0ouY0eNvlO8kBc9+COlV6KLAa9vCF1O2torMSSxYEzRl8g5GTw3GP55osbFB54urSeSZGX90ImZgpzzgMp9Of8ayKKVhm1Dp9tcY2p5IjnZCJQdz9wrDdxxu6elBtYJoIpYtO2wyI5eZWciLBIHfA4A69e2KxamluZJoo432bYxhcIoIH1AyfxoswL0logtGItGWNYlZLr5vnY449O5GAMjHsadewpa+SX0sxbgrFnLhSccryen459+1ZNFMRoatA0VwzfY0tozIwTbkbxnrgk8e44qDT7iO1vEmmiEqrzt9xyO4xyOv6Gq1FCVkDL0Zia8luo4gsEPzKhHHoo6nv159apu7O7O5JZjkk9zRubYU3HaTkrnjP+TTaACiiimAUUUUAFFFFAH194kubW01zTJms7qSZJ98k1tp8sxEflyKAWRD/ABMPlz3zird9befqdjFFBiJpjdXDhMBiigLuP97cUIzzhParV5q1lbavb6dNNi6ucmKMIzdATyQML904zjODjOKil1qwh1VNOklYXDYHETlASCQpcDarHHCkgnjjkVp2B7/Iv0UUUgCiiigDxH9oz/mXP+3r/wBpV4hXt/7Rn/Muf9vX/tKvE1id43kUfKmNxz0z0qHuAyinvDJGqs6kBhkfmR/MH8qZQB03g5tKlGqWWuvBDbS2wl85kj80GNgxSJ3UlWZdwGOpx1rfVLO58S3NjpsmgyaZb6abY3FyLKEzOYXKOC+Dv8xgCy88Dca86opPUFoejeC44dOvNLXd4eAg1A/2rLfXNszqqldpidmzgDJBiPLZySMVU+0XF14NXTo73w/CtnPdrctcJamQLhCpjbaZHLEMA0eT0yQACOEooeoLT+vX/M9B1kpd6LdWch0IrZaPZvDNFcWxneZfLVx5gbe5CiQFASBtXjJBPN69/wAgnQ/+QN/x6H/kHf637x/4+P8App/TFYVFAL/gfkbXhFLRvE1sb9ohEiu4WYxBJHCEqhMoMa5OBlgQM8g9K63WLXTpdWuobAaHDJf6VG6KbuzdI7lJVLDzFCxxtsDZwEVvfOT5xRTetv6/r/gAtHf+v6/zPSjdNZ6xrdnptz4beW80+1eJ9ll9mklXyvMAMihE5Eh2HbyM4ziqmkRQQ4jhk8NXf/EwkGqTXRt0V4flx5Ik2sEwZMGIBsj/AHa4EKzAkKSFGSQOlJQKx0rx/ZvA93NFb6Z9jvNQ8u2luIyb3CAE7GHATDKG9zXNUUUrFN3CiiimIKKKKACiiigAopxQhA+RgkjqM/l1ptABRRRQAUUUUAFFFSJC8kcjoARGMt8wBAzjp360gI6KfDC88yxRAF2OACQMn6mmUAFFFLTA+w/EUt6up6cbPSLu+S3n86R4HhUAeW6Y+eRTnLA9MY79qo3mm3Enijz/AOzbqXdNC6XCXIW3RV27vMj8wbnGGwdjY+TnjjavtWjtNZtLFra5c3ZKiZUHloQpYBmJHJCtwMnjnGRUFzr0Ntqgs2tbl0DJHLdIF8qF34RWy27JyOikDcMkVougP9DUooopAFFFFAHiP7Rn/Muf9vX/ALSrxmdljtoreNg3HmSEHI3HoPwH6k17N+0Z/wAy5/29f+0q8QqGBbutSuLyCKGdsrF93knt7nn/AOv6cU3T5Jor6NrZZHfP3Y87mHcDHtmq1FIDZlmNpdPZ/aGgMEflxSvu+Ukgt0BIz0yP60w3ccjOhvvLYNG/nAN8zKCGIwM556nGcc1HpWh3etQ3Z04Cae2RHFqiO0swZ1T5AqkEgsuQSOvGaIPDut3V7cWdro9/NdW3+vgjtXZ4v95QMr+NKwXKt86SahO8TiRHkZlYAjIJz3q3BdbLJEjvvsyqjCSHYSZCc84xg8YHJGMVFp+i6rq6zNpWmXl8sABlNtA0gjBzjdtBx0PX0qzH4Y1O5s7SbT4Hv5Lkyj7NawyPLEYyu7eu3/aU5GRzzg8U7aWAdJdW76V5C3KAqqGNW8wsrDr/ALI79PzpmpXa3UU+69WfEqmJSG+7g5xkcdR+VRr4e1p9OF+mj37WbI0guRbOYyi9W3YxgdzSXvh7WtNhMuo6Rf2kYkEW+e2dBvIyFyR1I5x6UW1C5WsHWO9jdpFiC5IZ1JAOOOnPXuOlap1SM3m8zRl/ICCUmXap3Z4P3+nf8OlVbjw3rlpcGC70bUIJhC05jltXVhGvV8EZ2juelOi8L6/cTiCDQ9SllMSzCNLSQsY2OFfAH3T2PQ0WuGw5dQb7Vdbb1LczIuJITIELAjn+9nGecVmT7TO5SRpRuPzsMFver9n4d1e+1OWwg028a4tz/pEYtpGa3GcEuqqWAHfikvNCv7TUNRtUge6/s12W5mt0Zo0AbbuJxwpPcgUtBktvJcR6SLo+ev2fckL87SH44Ptz+gpr3i/ZWC3YMflqI7YBgUcY56YBzk5ByfxrKq2dOmXSxflk8ouEC5O7vz0x/CapRbvYEXLm4ikjlMWoANJcrMikOPL65OcdeRnHp3qDVrtrifi7W4iyWUKpGz8wOv696luvDt9ZWMNxcKUecgRwGGXeSegzs259s5p134av7Oe2t2Uvc3JwkCxSBumTyUAOO+Ca0+r1E7W2DXcp2EwieXEwt5GTCTHPynIz0BIyM8irwvrVxLFdytKmUbK7gJHxhm7c85yeuPequq6VLpFysFxIrSEZIEciYGcfxqufqMioINPvLpFe2tJ5leQRK0cZYFyMhRgdcdutQ4O9hN8u5rLqm+QbtQKxm5JdW3nMeMc8c5A6e9YTAKxAYMAeo6GrsOi6rcbvs+mXku2QxNsgZsOBkrwOoHbrTf7PzpBv1uYWCSrE8AD70LBiCcrtwdh6E0uVonnj3JvMVrK2DainmQyblB8zKA7eB8vGMHpV641GC4cie98yPfuwA2f9Zn0/unA+hrLi02aXSLnUtyJBbypEdxOXd9xAXj0Vic46e4p91pbWmk2N9JdQMb1WdLdd/mKquybmyu3BKnGGJ9hUtaldC9LdR3FzbtHOj3O10DRrKxUn7pywLH8OmeBUkt41rdRx3M+ZhbBRJKJF2tvJPTDDIxz1PGetVJ/Dt6t3ZWdljUby8t0uFtbOOR5EDIHAI2jJ2nPy5A9aiHh7WjfQWQ0e/N1cR+bDB9mfzJU5+ZVxkjg8j0NFh36le/m8+9eTMTZxlot208dfm5z9avaVd28FsY5ZkjDsfMV/MORjAwF4PfO6obbw/rN5qE1haaTfT3lvnzraK2dpI8HB3KBkc+tTWXhPxBqWnSX2naLfXVtFJ5TyQ27PtbBJGAM8Y59OM9RRbQOoR3a/Y4rZ9QXyhDIrIQ5GTnb/AA/Q+2KVruN7G4j+2r5bwqIrfa3yMCCe2B0PIPOeax6vzaHq1vFcS3Gl3sUdts893t3URb8bNxI+XdkYz1zxTtcVyCwdI9Rt5JnCIkgZiQTwDntWiLyITxGe8E7K7MkgDqIxjgHgEDOOF6Y4qG58O6vp6rJqum3mnweasTT3VtIiIxGQCdvXHOBzjtRf6MNP1qOwn1G0MciRyC8QSmLZIgcNjZvxhhkbc+1G4E013C175sV3GkrwBfPUSfI+eeSC3I4zyaz72QzXO5rj7Q20AybSM8fmfqea0IvDksni1vD8t9aQXAuDbCeTzDEzhtoA2oW5PQlR15xWQylHKnqDikrDPsTX4NXm1GxfS7WymjtpfOY3F28RJ2Om0BY24+fOc9sY71R1jw2+r67BO9rCkCvFJJOt9MGYxtuAMAAjY543MSQD04FbuoXv2S7s4/L3/ap/JznG392z59/uY/GrFbdhP9AooopAFFFFAHiP7Rn/ADLn/b1/7SrxCvb/ANoz/mXP+3r/ANpV5QfC2rDRX1XyIfsscSzPi6i8xEZgqsYt28AkjBK85FQw62Meity48Ha1aWqXFzBBFGZI4n3XkOYXflVlG/MRPP3wuMHPQ1Jd+BvENleQ2tzYKs0zlFVbiJtuBuy5DEIu0FgzYBUFgcDNAC+FdV03TYNYi1S4v7cahZfZEexiVyoLqzE7nXjCY29wx5Hfd03xhodpeDzRdFLdLWOG7l06C5lljiDblKSOVjJJGGG4qFA574Fn4YZfEllpWuTvZrfFBBcWix3aOWbapDLIFK5yCQxwQRjNVdH0q01K6ura4vJreaOCWWDy7cSLIY0ZyGJdSoIXqA3XpRzW+X6f0w5b3/rf/hjdbxBot1cyeZf6zYxw6pLf20tnbp5knmbfvfvR5brt4YFuvTjlbbxJoX/CEz6LOL6G4meWYXS20czoS6ERby6kowTLMApzjggEHjK1F0y0k8MS6lFdzG5guI4ZbdrcBAHDlWWTeST+75BUdepqUklYe7uddfXmny+DtW1FtQkW41a2tYRYmeBhGYnToiymTACNt3IgUHGTkZo3XijTrfVdFu9M1HVrmKwSCGS2uLdYV2R4OVxK/O4bgMAA85rBufDWqWml/b54YRCESR1W5iaWNXxtZ4g29QcrgsoHzD1Fa2oeCY9P03Ty+qwPqN/s2QLPamFN+cFpBOWAwPvFAueM1XX5kK34f1+g+317RtPFpaQ3WpXtoJLl5557ZI5I/Oh8o7E81gTzuOWGcAcYzUr674cgsjBp91q6ldHk09We0jBd2mMm44l+VW3EEc4H96ue13QLvw9fNa30tnI6u6ZtbyOcZU4OQjEr9GAPt1o0PQbvxBdTQWMtpG8MLzMbq5SEFVGTguQCePw6nAyaSs1/Xa35FPRq/T/O/wCZ0l14h0G8YwHUdZt4Va0mW4is4/NeSGHyjlfOAHQMrbiQWYY71T1PX9KvdZ8T3kV1rMKaoWkto4isauzPuKTruO5Rk4weSAcDpWZbeF9TvLu5gtxaN9lKiWY38Cwgt90CUvsJPOAGJ4PoasQeBvENxb+cllGq+e1ttluoY3MynBi2M4bf6JjcewND11f9bL/IFpp/Xf8AzOfrpLnxGJPCEGmo+JMKjqJJeFBb1baeNvHTnpwMZkeg6lLol1q6Wp+w2cqwzyl1BR26DaTu/IVnVrCrKClFddH+Y02tTU1CXTbg2vkXF2fLRIn32yjCjqwxIcn24+tSXN1pkmuxXkc92Yt4eQNbqGXGMADfznHqMe9Y9FUqzUuZJXvfruJ6qxa1BrZ715LOSWSNyWJljCEEk8YDN+eataXdaellcWupm5WOSWKYNborElA428kYyH684x0NZdFZRfK7oU1zrU6aXV9Lf+2DFfalbtqFyJl2Wy/dBZgrHzR3b3+6D7CjDcaY2hXMN1d3v2y4lWY4tlZdyhwAWMgJzvyTjj0NY9FPm8jJUUlZPt26fI3o7uGb4fT2PmIk9tqK3IRnAMqPGUOB32lV6f38+tM1dVfw3oM0c0DhLeSF0WdDIjefI3zIDuAwwIJGDmsSioau7/1tY2W1jrbiextPFOhalfXWbOO0s5CbIxzyBo4kBUpvG07lIwxB74NI+v6fLqGqw3GravPY6jGc3MlspmjcyK7DyzNgg7ACd4zwccYPJ0Uf194f8D8DsLnxBpGo28+n3N5qdvaqLXyruO1SSabyY2T94hlUD72Vwx2gY560yTX9E1a41VdZ/tCG3ur+O8Q20aPJIFV1KsWYBWYOCX+bnPymuSoo/r+vuQG4ngzxNcxrPZ+GdZe3lG+JlspHDKeQdwXB47jrWpNq+gvpN7HcnVIdTn06CxaP7NGYomhMfUlwx3eUOw25PDVx9FAHU6/q+l6gunw2Or6w1tDbw2k0U1oqKsaYyyqJyGO75tpwM96g11tK1jULJdCu7qSUww2zC/hitUHlxqgbf5rAZ255wB6mudoosG33WOwQxXXxhaeK6tBbpq/nm4kuo0i2LLuLB2YKeBxg89s1yrokksjGZF+Y4znn8hUNFEdAfXzPtXUPtf2uz+yf6vz/APSOn+r8tvX/AGtnTn8M1YrH8SXuqafi4sJLFYlAHlXCs0lzISAsSYICE9Afm5PTjmG61a/j1WUxC3Fha3ENtMjIxlkaTb8ytuAUL5i8ENnB6cVqtQZvUUUUgCiiigDxH9oz/mXP+3r/ANpV53c+Mon8K/2PaW2oxgxQpsn1MzW8TIVZpI4SnyMzKf4iAGYY5r0T9oz/AJlz/t6/9pV5FdWVsnhzT7+ESrNNPPDMHcMpKCNgVGARxJggk9M55wJdxaF/Uta0PUZ5Ll9DuUurqcTXUn9oZHJJcRL5fybif4/MwPzqa88TabP4ll1S20q7iiu45Y7uCS+Vy4dSp2MIhsIzkZDcj04rmKKnYZ09t4k0m21fS5l0m9Njpfz29v8A2gnmNL5m/c8nk4I7bQo4A565i03WtB0/Wbm8/sjUZIpInjii/tKMMm+Nkcs3kfNw2RgDGOc1ztFFgJbloGuZGs45IoCx8tJZA7KOwLBVBPvgfStiy1bRoPDNxptzpd9LcXDpK1xHfoiB0DhMIYScYk5G7nHBFYVFHSweZ1uq+OZ9X0H7Fcz62JTDHEyLq5+yNsAGfs5j7hc4343c+1UNb1rStQSybTdMvLSe0jSINcXyzKyIDj5REhBzjnP4Vg0U763+YW0sbXiHV9N1e4e4sNKezuJ55Li4llujMWZznaoCqFQHOAQW55Y1W0TUotK1EzXFu1zBJDLBLGknlsVkQodrYIBGcgkH6VnUUlpsD1OiXXNEaK4spdEuU013jkiit9QCyq6KVLNI0bBt24kgKoyBjAyDtyeItButBjvNVjF1erqct3HYQXUkLwoRGqqzGFkdcRjOGDYA5ySBwVFPrcVjXvNR0+70eQyWbPrNzevPPdsxVUjIGERQcHLFiSRxgAd6yKKKSVth3uFFFFMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPsbVvDv9oa7FqaatfWk0EflxpCIWRM9WAkjbDEHBIwccU+bQ0m1MXZvLlIy6SyWqiPy5XTG12ym7I2r0YD5RxVfxRLewzQmw1VraeT5LazjgRzcy9fnLAnYB127cDJLdMSu97F4ugja83Wc9rKy2wiUBWQx/MW+8T857gYxxnk2gZr0UUUAFFFFAHiP7Rn/Muf9vX/ALSryS41CE+GLLTbZ5t63EtxchlCoWIVUAwTuwFY5IGN5A9T63+0Z/zLn/b1/wC0q8YEaJYmSRcySNiP2A6n+n51DAr0VevrezitoHtZjI7D51OPl784J7EDj09eKgtLdbmVoy7KQjMu1c7iBnHUUgIKK0l05Ibq2iu3ZZJWwybAwHOByGGQfUYqOwtBdi4iCAsqhg+cbAGGT1xjBPX0ougKNFW1htmiujFI7mNQULx4yMgZ4bg8+9VKACir/wDZ8X9nG5+1AsqhiihTjJxj72R+IA96S5trOK5jjS4mw20sXiHyggHPDc9en60XAo0VcltkswHkzIwlZPKkXAYDvkNn/PWpRp8c2o3aB1ghhY9x0zgAbmA/M0XAzqKmuoBb3LRrKsqjBDqQQePYkZ/GrVppiXFsJZblId7FVDMgHHc5YHHPYGi/UDPorQi06KTT2uzcMFjBEgEYO1sjaB83Oc9e1RzW1ssMHkzStLKgO1owFzuI67uOnpRcCnRWheabFaKCbpXw+xwpQke4Ack9O+O1OOnWovRbi9YkZ3HyemBn159/0zRdDsZtFX49PjlnUJMxhaLzPMKKpAzjkFgByPWhLZIL+a1lRJgEYq+TxhSwIwcenqKLiKFFFWVEbaZI3lKJEkUCQE5IIbg847DtQBWoqzJFCLKCRGJLOyuSmCMAdPmwRz6CpriygtnzFMZxHKqSK8ewHIJ7H2PpQBQorSu9OigvxA8vks8h+UgYRMnHJbrjHBx15NV7+0SzljWObzQ6bs4HHJHYkHp2NCaYFWirumwWs8rreTeSoU7WOMZPA7juQf58c1HBFF5sskgLQxAnBP3j0Ucf07A0XArUUUUwCiiigAooooA+ytT8N6dqOrf2hcC6S6EQh823vZoDsznb+7cDGTmln0CxudVj1GVrz7TFjYUvpkQDjjYHC4O0ZGMHHOaoeKI1udRhtbW9vl1N0/0eG1nZEh55nkC4BUej5BxgDJOW38a3PimGOxvb572J43mWOdhBbRDkq6DCkuMgBgW5yMBeLXQGdHRRRQAUUUUAeI/tGf8AMuf9vX/tKvFJpmmKbgAEUIoHQAf5J/Gva/2jP+Zc/wC3r/2lXjJVYbAblBknOVJH3UHcfU/y96hgVqkgmkt5llhba6HIOM4q1fNYNbQfY1YSgYkycj19BnrjPt+JisLeO5utkz7ECsxPPOBnsD/I0gBL+4SZJQ6s6KFUuitgA5HUfrSpqNzFK0kTRo7EElYlHQ5HGP8A9dWUs7Ga8MUErOjRFg4Y4jYf3iVGV98DrStb2UM16j29wwhA25lAP3gM/d7549qWgyrHqE8W/YIR5h+YGBDn25HTgcVWJyc1pxWNmsG++le3ZpGUKxbKYx1AQ5PPT5agjishYCWYT+YXKZRht6Zzgj36d/UUaARyX1xLB5Tsm3aFJEahiB0BYDJ6Dv2oa9lkjWKZt0QK7goCswHAy2MnjpnNTzWtr9nPkLMJVhSUl3BU5IGMYHr1p19ZQ2sCywPudJPLkUneNwGe6gfhz9aegiC5vvNuY5Yk2iOMIqy7ZOn1XB/KkbUbhpzMTHvYYb9ymGGc8jGDz60X5BuVYKq7okYhFCjJUE8Dik05tuowAqjB3VSHQMCCRngil0BkMsjTSF3CgnsiBR+Q4qSG8mgjMaeWyZziSJXAPtuBxUlmsTTypIrEmNypBGAQpPIIOentUtnbWs1vF5wm82WbygVcBRwOcY9+maB9SJNSuo4ljR0CKjIB5Snhuvb2pgvZxbeQHATG3hRuxnON2M4z2zVuK3ifSFuJ1ysTMpEZCu2duMnB4GTyfUCmmztBpjyB5PtCIrlSSMZIHIK9ORyGP0o0AryX00pUyCJiG3bjCmSfc4yfxpTqNw1yJyYvMAIyIUGc9cjGDTLOOOW8ijn3bHYKdrYPPvg1auLGKxhja5Vnd3PCSADaByOV4IPFPQRANQuFCAGPCJsAMKEYznBGOeeeaX+07r7Q85MRkcYZmhQ8Yx3HpUyAQ+IPLVUZDPsIeNSCN2OmMfkKhsm/0iSMojK0cmdyA4wpIxkcfhSGVncyOXYAEnJ2qAPyHAqZL2aO2MCiLyz1zChJ69yM9zVetIxW81lAGRlnMDsGTaF+UseRjJPGM59OtNiKxvpjbrARF5a9B5CZ7c5xnsKV9RuH3bzGd7h2/cpyR07f5yfWrD2NvHYeaWYyxhGkQPnhu33cA49z9KeNPtWmVP3qLPIogYuD8pAJJAXk8gfU+1K6AqnU7ppEdnQsm4AmJTw2cg8cjk8H1qGe4kuHDSlcgbQFUKAPYAYqa+is4whs5t5OQ65LY9Dkov8ALtUVtOtvIztEkuUZQHAIBIwD+HWmhkNSec32YQAALu3kjqTjAz9OfzNW4DFfa0reSkcbNu8pRxgDOPxx+tPtrWyktRPez+UZHYDbkBcY7BDnr0yKLiM2itOGxtn0xrllmLIrZUOBvIIwyjb90Z5pk0Fu1vAILeZZGiDvIZNyqNxBJG3+tFwM+itK+tbC2O2KZnkjk2vHuOWHc8oAp/Pr7U42unjUfs4Fzhd247l5wM8ce34+1K47GXRWjHaWryrIS6W5h8xt8nK/MV6hTnkf3e9Vr63W1vZIUYsqngnrgjNO4j7H1Pw/o2qXfn6npNjeTKoUSXFskjAemSCccmmS+HtFm1AX82kWEl4GDC4e2QyBhjB3YzkYGPpXP+Nrvw8+swadqcllHqMkQZLi8nWMWce7mRCx4kyONvJIGSAM0mvtpTeLLB457Y6pHcwgwOrG5ZCRgwknCpgsX2qQwDAkEGtF09QfX0OyooooAKKKKAPEf2jP+Zc/7ev/AGlXickrysDIckKFHsAMCvbP2jP+Zc/7ev8A2lXKan4PtI/h29/b6Vc/arW3t7hr+K2lEMwkxuAkaVlcDdztjQKR1PeJaagt7HndOR3jcPGxRlOQynBBrf0vw20Ot6APEcbW2m6q6ukiyITJFu2k/e+XnjnGOtdc3hexl8WaJa23grU8zvItzaXlnPZRSxgD51YzyNlckn5sH5Rj1LCuecNfXbszPdTMWXYxMhOV9PpSfbbrz/O+0zebjbv8w7sema9FfQ7LTPFMFnaeGbbULW60Z5LGWdLgHUX8ksJFTzMqxYY2DkdRyQai0Pw1ZPPqZ1jw1PJqEckJGkWFvLdG3idCSxRblJFOQAdzHaTggZGC39fO39fiN6Hn8V5dQFjDczRlzltjkbj70C8uhB5AuZRERjy952/lXdaZoEH2DXrmHwTf6rFZXoS2+0JcRyIvzbklEbY+QAEgYIJBJx8tPtvDtvqHh+wS08ITebe6feXK3qNcPIDFuMeBnYc4RSduDvGApxmelx9Tgje3TKVa5mKsuwgyHBX0+nNK1/eOFD3U7BSCoMhOCOld5qXg+0T4dvf2+lXP2q2gt5zfxW0ohmEmNwEjSsrgbudsaBSMZPfM8Zab4jGiaFfa/ZaoClo0MlxexSfKfPlKoWYcHbjA9Mdqb0dhLVXOUmu7i5AFxcSyhenmOWx+dNhnmt3L28rxMRjcjFTj8K1PCunrqnia0tXsZtQQlne2gGXkVVLEAblLcDO0MCegIJFd1P4d0r+1rq2sfB7z3KaMt3HYSm4gl87z9nMXmsy5U52b2JAUqV3U7WsFzzVdQvFkaRbucO+NzCQ5bHTJzQL+7ByLqcHcX4kP3j3+tekaN4Q0241qcXWgzO+y1WbS4oJ55LKSTcWJAmjKIAoO6Rm27wCDyaj03whBGY9PufCc9282uS6d9sk+0LIkQGdwCsE3AZbJXGFOQey2/rzS/UL3/ryv+h50L26UELczDII4kPQnJ/Oke7uZIBDJcStEuMIzkqMdOKZLFJbzPDPG0UsbFXR1IZWBwQQehrcuXeL4e6fFHOzRT6jcSSxoxChlSIKGHdgCSDggB+udwAPrYwQSpBBII5BFSC6uFkEizyBwSQwc5BPU596iopiLH9oXnm+b9rn8zG3f5hzj0zmhdQvFkaRbucO+NzCQ5bHTJzVeikA53eRy8jF2Y5LMckmpVvbpAoS5mUKpVcSEYHoPbioKKAJ/tl0YPJNzN5WMbPMO3Hpioi7kLlmOzheenOeKbRQBNPdXFzt+0zyzbenmOWx+dQ0UUAPhlaCdJYzhkYMM1JFeXEBb7NNJAHOSsTlR/OoKKAJ1vbpFVVuZlCgqAJDwD1FM+0TeR5HnSeTnPl7jtz9KjooAnN9dsqK11MVjIKAyHCkdMelKb+8aVZGu5zIowHMhyB9c1XooAnF9dqyFbqYFBtQiQ/KPQegpks0sz75pHkbGNzsSajopgfat/qlhp9zDFf31tbSXDbYUmmVDKeOFBPJ5HT1FPkuYIZooppo45JyViRnAMhAyQo78Anj0rnfFd5EdT/s19NuTFdQBbu+j0+WceTk/ulMaH5jz1wFznk8VX1ldTj8baVcGzW4tTcKkUiGVmgQxsHLBYiq5Zl5LjO1emGIta2B9Tr6KKKACiiigDxH9oz/mXP8At6/9pV4hXt/7Rn/Muf8Ab1/7SrxCoe4BRRRQAUV1ngYb11tUg0qSZbASQNqiRGOOQSxqDukG1ThmABIUkjdkVrEQLLctpUXh061tt/tIuHtDaj5WMnk+YfJyT5e7b0JO3AzRb+v6/EV/6/r8Dz2pVtp2tXuVhkMCOEeUKdqsQSAT0BIBwPY16Z4dOg2up38otdDn099QZS1zd22YY1UZIinVneLLHb5TK52kE5xXM2tjLfeAbnc2io63KTW4a5tIrnYBL5g5YSkZ2YU9eNopX/QpHKVLLbTwRxPPDJGkyb4mdSBIuSMrnqMgjI7g12Gr3c+q+DdPcXehR29vYrHInk2yXRlWZ8IoVPNHylWzwh5JOScy32n25vPDd1rL6GYVCw362N1aAE+c+C6QNnGzZlgOnfNPrbzJ6XOFq/pus3mlQ3cVn9n2XkYimE1rFNuUHOBvU7eQDxjkA9hXd2DR/wBq6e+sQ+FjfbrnKRvY/Z2h8rKCTYfLB8zhTw/XJxissqsniXw1ekeG1nuoA1wk7QizEgdwPOjiOEGzy8jA5980LXQb0VziaKnvP+P+f/U/6xv9R/q+v8P+z6e1d34Ct9Gl0ZotT/s6U3M0kc5vLq0gMCeWNpBlUyNkk/6spgjk9wk7xuD0djg7izubTyvtdvLB50Yli81CvmIejLnqDg8jipP7Ruf7K/s0shtRN54UxqWVyApIbG4AgDIBwcDjgV30KW0fhvRYbyTw9LZxWMy6juuLeS6XMkrIEO4uDhlKiPuTv4qOd9Kt/h6YLm10fzDbW5S4t7q1mmdmdGcBAgnRwpbcXZlG0gDlcPd2Xf8AUSPPoopJpUihRpJHYKiIMliegA7mpb6wvNMvHtNStJ7S5TG+G4jMbrkZGVPI4INdl4igguLK4g2aBGrXkcektYTWyuIjuB81kbcF27CWm+YHHI+anT2Udv4msxd3OjzQXWlLZ7jeW1wiSi0CDJDN5eJAuHOOmQcZqb+RS/r7zg6K9Htpv7I1fTlS58OtcXGiT20rxi0eITjzdqucbFbBjUueG5+Zhk0aG1haz6mL+LRNS1dpIXIiubG3t1jKHcqGaFoSQ20NsGT2JG6qtr/Xe3/B9CbnnFFddHH5Vn4qv7bT9Hhsd4t1ju3+0vCzsxVbaRBtZgFPzdNozXI0rlBRRRTEFFFFABRRRQAUUUUAFFFFABRRRQB9narr2naTdLFfTOjsu87IXkEa5xucqCEXP8TYHB54NI+t2Sav/Zv+kPcjbuEdpK6Ju6bpApVencis/wASy6rNqUdlBpF1daWyBrmW2kg3SnP+qxJIu1SOp5yDgY61DqGn3UniRbiz068hmeSEm+iv8QGNSNwkh3jLY3KPkbqDuHa10BnTUUUUAFFFFAHiP7Rn/Muf9vX/ALSrxCvb/wBoz/mXP+3r/wBpV4hUPcAooooA2fDja5Nevp/h3UJLSW8XY8a3y2qzjoFJZlDH5sBepzwKx2BVip4IODWx4TNpH4osLrUNQgsILWeOdpJ0kYMFdSVAjRjnGeoA4610/hfXbLw2NTtbTV9MFxLNHLHqDtfxRyIA2Y8whJAQSDhl2nn0FHUO/wDX9dDjtL0W81hpvsQgCwKGkkuLmOBFBOB80jKMk9s5qtNazQLuljIQuyLIPmRmXG4Kw4bGR0PcetdxpuvvHZ+IVtfFtrocl7diSKGzN5HEcNlmQLGSqsCAAcHjBAGKp2WvPceB4dLuPFl3p0Vs1wJLJTM/2hGVNiKq/IRuDAhmUDcSM9KXS4dbHG0Vu3d/5ngjT7H+2fO8q6lf+zPsu3yMgfvPN/i3enbFYsTrHKrtGsqqclHzhvY4IP5Gn1sHQfa20t5dJb26hpZDhQWCj8zwKmGl3TXn2VBDJJt3kpOjIoHUlwdoH1NWLfUITqFvJDDbaWYyT50SSSjOONyuzZH0HfoelWZbmzkuHh+02qGa08qS5igaOIvvDA7VQHoAOFHP51vGnDlvfW/ddvv+/QpJGfFpN7LdS26RqHh++WlVVGenzE7ecjHPPakg0q8uVlMUP+qba291U7uflAJG5uDwMmr7z2l0bm1a9ihTEAWd1cq/loVPAUnnORkDpUsV/aT3ZuZLlLfyb97pUZXJlU7TgYUjPy98dar2dPTXv1Xf+vXoFkc/RXXtcXNvoemS3t48Vo1u4a1kikxcDc20A4KnjGMkbRgiobzVIJfDf2NdX33Kwxh3xJ++UFv3ONuBtzncevT6OWHjFO8tV6f5/wBetkzlOWorofFF3K9ro2nvrKamllZJtWOFFS1L/MYg6n94RkZJ6HI7Vz1cpIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH2ZrWtrpMpL2F7cRInmzTQRqUgQdWYswz3OF3NgdOmVudW8nUksbeyuryUgNKYAgWBScBmLso7HgZOAeKo+ILPXLzWIBZw2U+mRKHeCW7eBpZQcjcVjfKDg7eMnrkcVU1LwvLc+Jv7Tht7WVpWgP2iaVlltPLbLeUAhB3Dg8rnvkcC10BnU0UUUAFFFFAHiP7Rn/ADLn/b1/7SrxCvb/ANoz/mXP+3r/ANpV4hUPcAooooAswafe3VpcXVtaTzW9qAZ5o4iyRAnA3EDC57Zq9b+F9Zm3s+m3kEaWpuzJJaSlfKwSG+VThW2kBj8vqQMmp/CuuWeiXN42o2n2yGa3KpCyK6mVWV49wbgruXB68E8VqjxB4fuvFM+oXBvrCyS0a1tLa2tEl2q8LRtnMq7cM5YYznPak/IF5mHoHhnU/El2sWnW0pi8xY5LowyNDAW6b2RW2g+uKU+E9fGjjVl0e9fTiHP2pIGaMBfvMSBwvueOD6Gt7w/4i0LS7vSpLi91dE0a+e4gFtap/pKMVPz5mHlsdu0435GB2rNF/wCH59G+yXz6kWtLi5ltlhhjUTiRUCb2Lny8FASAHyDgEdaGC8/63KereGNT0iBLqW3kmsJEjaO/ihk8h96BwA7KOcHkeoNZ1xY3dpFBLdWs0Mdwm+F5IyolXONyk9RnuK6m+1/R7m0volvdUcSaRbWNuklqgUPEyMc/vTtXMfBGT+8bjj5sTV760u9P0qK1utTmkt7cpMl7IGjibcTthA6Jjse+aAX6f5GWqs7hUBZmOAB3NaEmizRai9pLPAvlRiWSYsdiKQDnOMnqBwDz0zVaxu2sL2O5SNJGjOQr5x0x2IP5GtW71PTZ9QfyllgtZbRLdykPzKVxyFaQ5Hygfe6e/J3hGDjd73/T/Mat1KaaPIbmaOW5t4Y4duZ3LbG3crjAJORz06dcUQaLPMZFeWGF0lMKpIxzJIOqrgHnpycDkc1Ob6xuHnguHuI7ZhCI3SJWc+Wu0ZUsAMgk9TinxatayXDXF35yPHdtdRLHGGDE4+ViWGPujkZ71fLT0+fXz/y27j0M46Zfi2NybK5EAUOZfKbaFPQ5xjFD6ZfxxNK9jcrGqCRnMTABT0YnHQ+tbZube103TLma6kaaGGQLBE8bqSzMcMA+5MgjPynI4qG61XTZtAGno12XjRCkrRLlnBbKsd33Bn5R2OacqVOKeuq/r+v+CgsjIuLC8tIIJrq0ngiuV3wSSRlVlXplSfvD3FV62fEF3aSpp1rYahfX0VraIrtcyExpIw3OsSkAqgJx7kE9MVjVykhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfZOv6pfaWWmtdNS5tok8yeR7kRnGfuxrtO9/Y7R0GeeIrvVNVtdVji/sy2azluEgSY3hEr5UFmEYjIwPm6sD8pPpTdc0TU9Q1u3u7bUrWO3tlBS0ubNpk83OfM+WVMkcYzkDGRzzWjNZefqFpcvJ8tsHIjC9XYABs+w3DH+17VaBlqiiigAooooA8R/aM/5lz/t6/8AaVeP3Onxw6HY6hFOzm5lmhkjaPb5bR7DwcncCJF5wOcjHc+wftGf8y5/29f+0q8nurqAeEtPsYp45ZjdTXEyBDmIFUVBuI4J2sSFJBG3PIAEsRkUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH2/J/rDTaKKsAooooAKKKKAPEf2jP+Zc/wC3r/2lXiFFFQ9wCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//2Q==]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAOZ/AKyqqZiXlkh1j/Hx8RuL0CV6q4e83D3a/zNVasLi9S22/DaLuy2MwklRVpLG5dXV1Dp2jja2+oWHib7d8Onz+sbFxGqt1DTD/v3+/juRwkiBopXC3MvKykKay2JxeTWUyd/f31Om1ySU2WKNpnm111yEm+Pv9Sus/MTc6neCiPr6+ht5rySKxSSc57za7EOWxSSEvHG656vQ5lyy5BiS3TSb2fX297LT5qDK4jqWysri7yug6VSIprri+k6j1D6azd3s9r27upDN9CuRzfb6/CGh8EiLsS6FtiN/s9bp9FhgZNzu+imEuDlGTiau+mSo0SyJvk6q37azsnSHka+urVGdyO7u7kOczrDW7Cmk8z6AjPn7/CSHwEOk2jBge0ag0s/p+06ezf/79I+QkKvY9FOOsTKSx////ByDwCRqkyV0ojpngPjy7yiJwebm5sG/vkii2T6k4nx9flqw4nfE9rvY6T6Gr87l9KGfnyyOx2+Ej196iaWko0e29////////yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkRCMzA3NzIxOUE3MTFFMTgyMjFDMzU0MzJGQzVDRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkRCMzA3NzMxOUE3MTFFMTgyMjFDMzU0MzJGQzVDRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyREIzMDc3MDE5QTcxMUUxODIyMUMzNTQzMkZDNUNFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyREIzMDc3MTE5QTcxMUUxODIyMUMzNTQzMkZDNUNFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAH8ALAAAAAAgACAAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOOVhVUfHxUb26UghgcAVMjpCNTAW82lBUSPCFzMzNzIWUpUiqSDxJGUSE+vz4hUS8pFZE2eBpdVz8fOT9X0V1GY1aLGG4cUtspZjnOBgYdH+TkexwquIcDQWN6JTwlGkMMXBtibFVcDPxDAgFUALwBUcgKgBRGrnxZeOVFmxcDBjxpww8KFAYLNGiINybIAEEqpKTIcKXDi5MdxtU5g2JfPS5tcsh89sNOCgCqQEjQkCODzwwy82ywcaZOHhZmcKAgkecJChkvFuSw+UZFkD0Lsmb1mSeEiRtnsBAY4mKLHx0+KJjwY4HJAjP//9zgEQDlyBEmTLigyXPHAQk/JmrEwOAgiQEsFAxgqILEbgE5HMasYYJkwY0bJCxg8TMhiZ8lNRL4iVIDDhEbOp68wHEESQEPQQJ4YbJigx8gLohwRuyHjBA/GGbEueMnSY4wJjascK0kCBUESFag8CPDwBYHNGiI/gzGDwUiEyhgALJlAxIkTNQo4fBASZoVJDAAlyGiRREhFHpE6NMDDJ0WMdwxwRNowIAEF17I4YYKeDRRAAwW4GBBfVmccEIETiiggBMcnlBECyIQwAIMXKjRwBuCDCCBgwQQQEMLFWqowAU0XiDjCVmAKMIQajQRgDp/2BBAE17AsMMJM15wwDGSTC5JowIn7NCGF03wAeQgHMjRAAJeQOClFmCGCaaXEHiBQAOQeaLmmmy26eabcAYCADs=]]></data>
	</file>
	<file>
	  <filename>/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/functions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[alF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiLnBhZ2VtY29udGFpbmVyLC5wYWdlZXJyb3Jjb250YWluZXIiKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQl2YXIgYyA9IGpRdWVyeSh0aGlzKTsNCgkJd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQoJCQljLmhpZGUoKTsNCgkJfSwgOTAwMCk7DQoJfSk7DQp9KTsNCg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiRsYW5nWydmcmllbmRseW5hbWUnXT0iQWNlRWRpdG9yIjsNCiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAiQWNlRWRpdG9yIGlzIGEgU3ludGF4aGlnaGxpZ2h0ZXIgbW9kdWxlIHVzaW5nIDxzdHJvbmc+QWNlPC9zdHJvbmc+IGEgc3RhbmRhbG9uZSBjb2RlIGVkaXRvciB3cml0dGVuIGluIEphdmFTY3JpcHQuPGJyIC8+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJbnRlcm5ldCBFeHBsb3JlciBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCEiOw0KDQovKiAtLS0gVGFicyAtLS0gKi8NCiRsYW5nWydzZXR0aW5nc190YWInXSA9ICJQcmVmZXJlbmNlcyI7DQokbGFuZ1snZnJvbnRlbmRzZXR0aW5nc190YWInXSA9ICJGcm9udGVuZCBQcmVmZXJlbmNlcyI7DQokbGFuZ1snZnJvbnRlbmRfaGVhZF9zZXR0aW5ncyddID0gIkZyb250ZW5kIEhlYWQgUHJlZmVyZW5jZXMiOw0KJGxhbmdbJ2Zyb250ZW5kX3N5bnRheGFyZWFfc2V0dGluZ3MnXSA9ICJGcm9udGVuZCBTeW50YXhhcmVhIFByZWZlcmVuY2VzIjsNCiRsYW5nWydoZWFkX2Rlc2NyaXB0aW9uJ10gPSAiVGhlc2UgcHJlZmVyZW5jZXMgYXJlIHVzZWQgZm9yIGRlZmF1bHQgc2V0dGluZ3Mgb2YgQWNlIHNjcmlwdHMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gcGFnZSA8Y29kZT4mbHQ7aGVhZCZndDs8L2NvZGU+IHdoZW4gY2FsbGluZyA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0naGVhZCd9PC9jb2RlPiBmcm9tIFBhZ2UgU3BlY2lmaWMgTWV0YWRhdGEgb3IgVGVtcGxhdGUuIjsNCiRsYW5nWydjb250ZW50X2Rlc2NyaXB0aW9uJ10gPSAiVGhlc2UgcHJlZmVyZW5jZXMgYXJlIHVzZWQgZm9yIGRlZmF1bHQgc2V0dGluZ3Mgb2YgU3ludGF4aGlnaGxpZ2h0aW5nIGFyZWEgd2hlbiBjYWxsaW5nIDxjb2RlPntBY2VFZGl0b3IgZGl2aWQ9J2VkaXRvcid9PC9jb2RlPiB0YWcgd2l0aGluIGEgUGFnZS4iOw0KJGxhbmdbJ3N5bnRheGFyZWFkZXNjcmlwdGlvbiddID0gIlRoZXNlIHByZWZlcmVuY2VzIGFyZSB1c2VkIGZvciBkZWZhdWx0IHNldHRpbmdzIG9mIEFjZSBiZWhhdmlvciB3aGVuIGNhbGxpbmcgPGNvZGU+e0FjZUVkaXRvciBkaXZpZD0nZm9vJ308L2NvZGU+IGZyb20gYSBQYWdlIG9yIFRlbXBsYXRlIjsNCg0KLyogLS0tIFNldHRpbmdzIGxhYmVscyAtLS0gKi8NCiRsYW5nWydleGFtcGxlX2RvY3VtZW50J10gPSAiRG9jdW1lbnQiOw0KJGxhbmdbJ3dpZHRoX3RpdGxlJ10gPSAiRWRpdG9yIHdpZHRoIChpbiBlbSkiOw0KJGxhbmdbJ2hlaWdodF90aXRsZSddID0gIkVkaXRvciBoZWlnaHQgKGluIGVtKSI7DQokbGFuZ1snZnJvbnRlbmRfd2lkdGhfdGl0bGUnXSA9ICJGcm9udGVuZCBTeW50YXhhcmVhIHdpZHRoIChpbiBweCkiOw0KJGxhbmdbJ2Zyb250ZW5kX2hlaWdodF90aXRsZSddID0gIkZyb250ZW5kIFN5bnRheGFyZWEgaGVpZ2h0IChpbiBweCkiOw0KJGxhbmdbJ3N5bnRheF9tb2RlJ10gPSAiTW9kZSI7DQokbGFuZ1sndGhlbWVzJ10gPSAiVGhlbWUiOw0KJGxhbmdbJ2ZvbnRfc2l6ZSddID0gIkZvbnQgU2l6ZSI7DQokbGFuZ1snZnVsbF9saW5lJ10gPSAiRnVsbCBMaW5lIFNlbGVjdGlvbiI7DQokbGFuZ1snaGlnaGxpZ2h0X2FjdGl2ZSddID0gIkhpZ2hsaWdodCBBY3RpdmUgTGluZSI7DQokbGFuZ1snc2hvd19pbnZpc2libGVzJ10gPSAiU2hvdyBJbnZpc2libGVzIjsNCiRsYW5nWydwZXJzaXN0ZW50X2hzY3JvbGwnXSA9ICJQZXJzaXRlbnQgSFNjcm9sbCI7DQokbGFuZ1sna2V5X2JpbmRpbmcnXSA9ICJLZXkgQmluZGluZyI7DQokbGFuZ1snc29mdF93cmFwJ10gPSAiU29mdCBXcmFwIjsNCiRsYW5nWydzaG93X2d1dHRlciddID0gIlNob3cgR3V0dGVyIjsNCiRsYW5nWydwcmludF9tYXJnaW4nXSA9ICJTaG93IFByaW50IE1hcmdpbiI7DQokbGFuZ1snc29mdF90YWInXSA9ICJVc2UgU29mdCBUYWIiOw0KJGxhbmdbJ2hpZ2hsaWdodF9zZWxlY3RlZCddID0gIkhpZ2hsaWdodCBzZWxlY3RlZCB3b3JkIjsNCiRsYW5nWydlbmFibGVfYmVoYXZpb3JzJ10gPSAiRW5hYmxlIEJlaGF2aW9ycyI7DQokbGFuZ1sndGVzdGFyZWF0ZXh0J10gPSAiUHJldmlldyI7DQoNCi8qIC0tLSBTZWxlY3Qgb3B0aW9ucyAtLS0gKi8NCg0KLyogbGFuZ3VhZ2VzICovDQokbGFuZ1snanMnXSA9ICJKYXZhU2NyaXB0IjsNCiRsYW5nWydwbGFpbiddID0gIlBsYWluIFRleHQiOw0KJGxhbmdbJ3N2ZyddID0gIlNWRyI7DQokbGFuZ1snaHRtbCddID0gIkhUTUwiOw0KJGxhbmdbJ2NzcyddID0gIkNTUyI7DQokbGFuZ1snc2NzcyddID0gIlNDU1MiOw0KJGxhbmdbJ2NvZmZlZSddID0gIkNvZmZlZVNjcmlwdCI7DQokbGFuZ1snanNvbiddID0gIkpTT04iOw0KJGxhbmdbJ3B5dGhvbiddID0gIlB5dGhvbiI7DQokbGFuZ1sncnVieSddID0gIlJ1YnkiOw0KJGxhbmdbJ3BlcmwnXSA9ICJQZXJsIjsNCiRsYW5nWydwaHAnXSA9ICJQSFAiOw0KJGxhbmdbJ2phdmEnXSA9ICJKYXZhIjsNCiRsYW5nWydjc2hhcnAnXSA9ICJDIyI7DQokbGFuZ1snY19jcHAnXSA9ICJDKysiOw0KJGxhbmdbJ2Nsb2p1cmUnXSA9ICJDbG9qdXJlIjsNCiRsYW5nWydvY2FtbCddID0gIk9DYW1sIjsNCiRsYW5nWyd0ZXh0aWxlJ10gPSAiVGV4dGlsZSI7DQokbGFuZ1snZ3Jvb3Z5J10gPSAiR3Jvb3Z5IjsNCiRsYW5nWydzY2FsYSddID0gIlNjYWxhIjsNCg0KLyogdGhlbWVzICovDQokbGFuZ1snY2xvdWRzJ10gPSAiQ2xvdWRzIjsgDQokbGFuZ1snY2hyb21lJ10gPSAiQ2hyb21lIjsgDQokbGFuZ1snY2xvdWRzX21pZG5pZ2h0J10gPSAiQ2xvdWRzIE1pZG5pZ2h0IjsgDQokbGFuZ1snY29iYWx0J10gPSAiQ29iYWx0IjsgDQokbGFuZ1snY3JpbXNvbl9lZGl0b3InXSA9ICJDcmltc29uIEVkaXRvciI7DQokbGFuZ1snZGF3biddID0gIkRhd24iOw0KJGxhbmdbJ2RyZWFtd2VhdmVyJ10gPSAiRHJlYW13ZWF2ZXIiOyANCiRsYW5nWydlY2xpcHNlJ10gPSAiRWNsaXBzZSI7DQokbGFuZ1snaWRsZV9maW5nZXJzJ10gPSAiaWRsZUZpbmdlcnMiOw0KJGxhbmdbJ2tyX3RoZW1lJ10gPSAia3JUaGVtZSI7DQokbGFuZ1snbWVyYml2b3JlJ10gPSAiTWVyYml2b3JlIjsNCiRsYW5nWydtZXJiaXZvcmVfc29mdCddID0gIk1lcmJpdm9yZSBTb2Z0IjsNCiRsYW5nWydtb25vX2luZHVzdHJpYWwnXSA9ICJNb25vIEluZHVzdHJpYWwiOw0KJGxhbmdbJ21vbm9rYWknXSA9ICJNb25va2FpIjsNCiRsYW5nWydwYXN0ZWxfb25fZGFyayddID0gIlBhc3RlbCBvbiBkYXJrIjsNCiRsYW5nWydzb2xhcml6ZWRfZGFyayddID0gIlNvbGFyaXplZCBEYXJrIjsNCiRsYW5nWydzb2xhcml6ZWRfbGlnaHQnXSA9ICJTb2xhcml6ZWQgTGlnaHQiOw0KJGxhbmdbJ3RleHRtYXRlJ10gPSAiVGV4dE1hdGUiOw0KJGxhbmdbJ3R3aWxpZ2h0J10gPSAiVHdpbGlnaHQiOw0KJGxhbmdbJ3ZpYnJhbnRfaW5rJ10gPSAiVmlicmFudCBJbmsiOw0KDQovKiBrZXkgYmluZGluZyAqLw0KJGxhbmdbJ2FjZSddID0gIkFjZSI7IA0KJGxhbmdbJ3ZpbSddID0gIlZpbSI7IA0KJGxhbmdbJ2NvYmFsdCddID0gIkNvYmFsdCI7IA0KJGxhbmdbJ2VtYWNzJ10gPSAiRU1hY3MiOw0KJGxhbmdbJ2N1c3RvbSddID0gIkN1c3RvbSI7DQoNCi8qIFNvZnQgd3JhcCAqLw0KJGxhbmdbJ29mZiddID0gIk9mZiI7IA0KJGxhbmdbJzQwJ10gPSAiNDAgQ2hhcnMiOyANCiRsYW5nWyc4MCddID0gIjgwIENoYXJzIjsgDQokbGFuZ1snMTAwJ10gPSAiMTAwIENoYXJzIjsgDQokbGFuZ1snZnJlZSddID0gIkZyZWUiOw0KDQovKiAtLS0gQ29tbW9uIC0tLSAqLw0KJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gIlNhdmUgUHJlZmVyZW5jZXMiOw0KJGxhbmdbJ3NldHRpbmdzc2F2ZWQnXSA9ICJZb3VyIEFjZUVkaXRvciBzZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQiOw0KJGxhbmdbJ2Zyb250ZW5kc2V0dGluZ3NzYXZlZCddID0gIllvdXIgQWNlRWRpdG9yIEZyb250ZW5kIHNldHRpbmdzIGhhdmUgYmVlbiBzYXZlZCI7DQokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICJBY2VFZGl0b3IgU3VjY2Vzc2Z1bGx5IEluc3RhbGxlZCEgU2V0IFwiTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXNcIiBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhIjsNCiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAiQWNlRWRpdG9yIFN1Y2Nlc3NmdWxseSBVbmluc3RhbGxlZCI7DQokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gIlJlYWxseT8gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCBBY2VFZGl0b3I/IFRoaW5rIGFnYWluISI7DQoNCi8qIC0tLSBIZWxwIC0tLSAqLw0KJGxhbmdbJ2hlbHBfcGFyYW1fYWN0aW9uJ10gPSAiaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjdGlvbiBvZiBNb2R1bGUgdGFnLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICdkZWZhdWx0JyBhbmQgJ2hlYWQnLiBCb3RoIGFyZSBuZWVkZWQgZm9yIGNvcnJlY3QgRnJvbnRlbmQgU3ludGF4aGlnaGxpZ2h0aW5nIGZ1bmN0aW9uLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KCTxsaT5oZWFkPC9saT4NCgk8bGk+ZGVmYXVsdDwvbGk+DQo8L3VsPiI7DQokbGFuZ1snaGVscF9wYXJhbV9tb2RlcyddID0gImlzIHVzZWQgd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0naGVhZCd9PC9jb2RlPi4gWW91IGNhbiBpbmNsdWRlIG11bHRpcGxlIGNvbW1hIHNlcGFyYXRlZCAnbW9kZXMnIHRoYXQgeW91IHdpbGwgYmUgdXNpbmcgb24geW91ciB3ZWJzaXRlLiBUaGlzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB5b3VyICZsdDtoZWFkJmd0OyBvZiBUZW1wbGF0ZSBvciBQYWdlIHNwZWNpZmljIE1ldGFkYXRhLiBUaGlzIHdpbGwgb3ZlcnJpZGUgeW91IFByZWZlcmVuY2VzIHNlbGVjdGVkIGluIE1vZHVsZSBBZG1pbiBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KCTxsaT5qYXZhc2NyaXB0PC9saT4gDQoJPGxpPnBsYWluPC9saT4gDQoJPGxpPnN2ZzwvbGk+IA0KCTxsaT5odG1sPC9saT4NCgk8bGk+Y3NzPC9saT4NCgk8bGk+c2NzczwvbGk+DQoJPGxpPmNvZmZlZTwvbGk+DQoJPGxpPmpzb248L2xpPg0KCTxsaT5weXRob248L2xpPg0KCTxsaT5ydWJ5PC9saT4NCgk8bGk+cGVybDwvbGk+DQoJPGxpPnBocDwvbGk+DQoJPGxpPmphdmE8L2xpPg0KCTxsaT5jc2hhcnA8L2xpPg0KCTxsaT5jX2NwcDwvbGk+DQoJPGxpPmNsb2p1cmU8L2xpPg0KCTxsaT5vY2FtbDwvbGk+DQoJPGxpPnRleHRpbGU8L2xpPg0KCTxsaT5ncm9vdnk8L2xpPg0KCTxsaT5zY2FsYTwvbGk+DQo8L3VsPiI7DQokbGFuZ1snaGVscF9wYXJhbV90aGVtZXMnXSA9ICJpcyB1c2VkIHdpdGggPGNvZGU+e0FjZUVkaXRvciBhY3Rpb249J2hlYWQnfTwvY29kZT4uIFlvdSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBjb21tYSBzZXBhcmF0ZWQgJ3RoZW1lcycgdGhhdCB5b3Ugd2lsbCBiZSB1c2luZyBvbiB5b3VyIHdlYnNpdGUuIFRoaXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHlvdXIgJmx0O2hlYWQmZ3Q7IG9mIFRlbXBsYXRlIG9yIFBhZ2Ugc3BlY2lmaWMgTWV0YWRhdGEuIFRoaXMgd2lsbCBvdmVycmlkZSB5b3UgUHJlZmVyZW5jZXMgc2VsZWN0ZWQgaW4gTW9kdWxlIEFkbWluIGFyZWEuIDxiciAvPlBvc3NpYmxlIHZhbHVlcyBhcmU6DQo8dWw+DQoJPGxpPmNsb3VkczwvbGk+IA0KCTxsaT5jbG91ZHNfbWlkbmlnaHQ8L2xpPiANCgk8bGk+Y29iYWx0PC9saT4gDQoJPGxpPmNyaW1zb25fZWRpdG9yPC9saT4NCgk8bGk+ZGF3bjwvbGk+DQoJPGxpPmVjbGlwc2U8L2xpPg0KCTxsaT5pZGxlX2ZpbmdlcnM8L2xpPg0KCTxsaT5rcl90aGVtZTwvbGk+DQoJPGxpPm1lcmJpdm9yZTwvbGk+DQoJPGxpPm1lcmJpdm9yZV9zb2Z0PC9saT4NCgk8bGk+bW9ub19pbmR1c3RyaWFsPC9saT4NCgk8bGk+bW9ub2thaTwvbGk+DQoJPGxpPnBhc3RlbF9vbl9kYXJrPC9saT4NCgk8bGk+c29sYXJpemVkX2Rhcms8L2xpPg0KCTxsaT5zb2xhcml6ZWRfbGlnaHQ8L2xpPg0KCTxsaT50ZXh0bWF0ZTwvbGk+DQoJPGxpPnR3aWxpZ2h0PC9saT4NCgk8bGk+dmlicmFudF9pbms8L2xpPg0KPC91bD4iOw0KJGxhbmdbJ2hlbHBfcGFyYW1fbW9kZSddID0gImlzIHVzZWQgd2l0aGluIGEgcGFnZSB3aXRoIDxjb2RlPntBY2VFZGl0b3IgYWN0aW9uPSdkZWZhdWx0J308L2NvZGU+IG1vZHVsZSB0YWcuIFRoaXMgc3BlY2lmaWVzIFN5bnRheGhpZ2hsaWdodGVyIG1vZGUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4gPGJyIC8+UG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCgk8bGk+amF2YXNjcmlwdDwvbGk+IA0KCTxsaT5wbGFpbjwvbGk+IA0KCTxsaT5zdmc8L2xpPiANCgk8bGk+aHRtbDwvbGk+DQoJPGxpPmNzczwvbGk+DQoJPGxpPnNjc3M8L2xpPg0KCTxsaT5jb2ZmZWU8L2xpPg0KCTxsaT5qc29uPC9saT4NCgk8bGk+cHl0aG9uPC9saT4NCgk8bGk+cnVieTwvbGk+DQoJPGxpPnBlcmw8L2xpPg0KCTxsaT5waHA8L2xpPg0KCTxsaT5qYXZhPC9saT4NCgk8bGk+Y3NoYXJwPC9saT4NCgk8bGk+Y19jcHA8L2xpPg0KCTxsaT5jbG9qdXJlPC9saT4NCgk8bGk+b2NhbWw8L2xpPg0KCTxsaT50ZXh0aWxlPC9saT4NCgk8bGk+Z3Jvb3Z5PC9saT4NCgk8bGk+c2NhbGE8L2xpPg0KPC91bD4iOw0KJGxhbmdbJ2hlbHBfcGFyYW1fdGhlbWUnXSA9ICJpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0nZGVmYXVsdCd9PC9jb2RlPiBtb2R1bGUgdGFnLiBUaGlzIHNwZWNpZmllcyBTeW50YXhoaWdobGlnaHRlciB0aGVtZSBmb3Igc3BlY2lmaWMgY29kZSBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KCTxsaT5jbG91ZHM8L2xpPiANCgk8bGk+Y2xvdWRzX21pZG5pZ2h0PC9saT4gDQoJPGxpPmNvYmFsdDwvbGk+IA0KCTxsaT5jcmltc29uX2VkaXRvcjwvbGk+DQoJPGxpPmRhd248L2xpPg0KCTxsaT5lY2xpcHNlPC9saT4NCgk8bGk+aWRsZV9maW5nZXJzPC9saT4NCgk8bGk+a3JfdGhlbWU8L2xpPg0KCTxsaT5tZXJiaXZvcmU8L2xpPg0KCTxsaT5tZXJiaXZvcmVfc29mdDwvbGk+DQoJPGxpPm1vbm9faW5kdXN0cmlhbDwvbGk+DQoJPGxpPm1vbm9rYWk8L2xpPg0KCTxsaT5wYXN0ZWxfb25fZGFyazwvbGk+DQoJPGxpPnNvbGFyaXplZF9kYXJrPC9saT4NCgk8bGk+c29sYXJpemVkX2xpZ2h0PC9saT4NCgk8bGk+dGV4dG1hdGU8L2xpPg0KCTxsaT50d2lsaWdodDwvbGk+DQoJPGxpPnZpYnJhbnRfaW5rPC9saT4NCjwvdWw+IjsNCiRsYW5nWydoZWxwX3BhcmFtX3dpZHRoJ10gPSAic3BlY2lmaWVzIHdpZHRoIG9mIFN5bnRheGhpZ2hsaWdodGVyIGFyZWEgaW4gcGl4ZWwuIjsNCiRsYW5nWydoZWxwX3BhcmFtX2hlaWdodCddID0gInNwZWNpZmllcyBoZWlnaHQgb2YgU3ludGF4aGlnaGxpZ2h0ZXIgYXJlYSBpbiBwaXhlbC4iOw0KJGxhbmdbJ2hlbHBfcGFyYW1fZGl2aWQnXSA9ICJpZCBvZiB0aGUgZWxlbWVudCBjb250YWluaW5nIHlvdXIgY29kZS4gVXNlIHVuaXF1ZSBpZCBmb3IgZWFjaCBjb2RlIGNodW5jay4iOw0KJGxhbmdbJ2hlbHBfZ2VuZXJhbF90aXRsZSddID0gIkdlbmVyYWwiOw0KJGxhbmdbJ2hlbHBfZ2VuZXJhbF90ZXh0J10gPSAiDQo8aDM+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvaDM+DQo8cD5BY2VFZGl0b3IgaXMgYSBTeW50YXhoaWdobGlnaHRlciBtb2R1bGUgdXNpbmcgPHN0cm9uZz5BY2U8L3N0cm9uZz4gYSBzdGFuZGFsb25lIGNvZGUgZWRpdG9yIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC48YnIgLz4gDQpHb2FsIG9mIEFjZSBjb2RlIGVkaXRvciBncm91cCBpcyB0byBjcmVhdGUgYSB3ZWIgYmFzZWQgY29kZSBlZGl0b3IgdGhhdCBtYXRjaGVzIGFuZCBleHRlbmRzIHRoZSBmZWF0dXJlcywgdXNhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBleGlzdGluZyBuYXRpdmUgZWRpdG9ycyBzdWNoIGFzIFRleHRNYXRlLCBWaW0gb3IgRWNsaXBzZS48YnIgLz4NCkl0IGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW4gYW55IHdlYiBwYWdlIGFuZCBKYXZhU2NyaXB0IGFwcGxpY2F0aW9uLjxiciAvPiANCkFjZSBpcyBkZXZlbG9wZWQgYXMgdGhlIHByaW1hcnkgZWRpdG9yIGZvciA8YSBocmVmPVwiaHR0cDovL3d3dy5jbG91ZDlpZGUuY29tXCI+Q2xvdWQ5IElERTwvYT4gYW5kIHRoZSBzdWNjZXNzb3Igb2YgdGhlIE1vemlsbGEgU2t5d3JpdGVyIChCZXNwaW4pIFByb2plY3QuPC9wPg0KPGgzPkFjZSBpcyBob3N0ZWQgb24gR2l0SHViPC9oMz4NCjxwPlRoZSBBY2Ugc291cmNlIGNvZGUgaXMgaG9zdGVkIG9uIEdpdEh1Yi4gSXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1vemlsbGEgdHJpLWxpY2Vuc2UgKE1QTC9HUEwvTEdQTCkuPGJyIC8+DQpUaGlzIGlzIHRoZSBzYW1lIGxpY2Vuc2UgdXNlZCBieSBGaXJlZm94LiBUaGlzIGxpY2Vuc2UgaXMgZnJpZW5kbHkgdG8gYWxsIGtpbmRzIG9mIHByb2plY3RzLCB3aGV0aGVyIG9wZW4gc291cmNlIG9yIG5vdC48YnIgLz4NCiBUYWtlIGNoYXJnZSBvZiB5b3VyIGVkaXRvciBhbmQgYWRkIHlvdXIgZmF2b3JpdGUgbGFuZ3VhZ2UgaGlnaGxpZ2h0aW5nIGFuZCBrZXliaW5kaW5ncyE8L3A+DQo8aDM+VXNpbmcgQWNlRWRpdG9yIE1vZHVsZTwvaDM+DQo8cD5Vc2luZyBBY2VFZGl0b3IgTW9kdWxlIGlzIHNpbXBsZS48YnIgLz4NCkFmdGVyIEFjZUVkaXRvciB3YXMgaW5zdGFsbGVkIGdvIHRvIFwiTXkgUHJlZmVyZW5jZXMgJnJhcXVvOyBVc2VyIFByZWZlcmVuY2VzXCIgYW5kIGNob29zZSBBY2VFZGl0b3IgYXMgeW91ciBTeW50YXhoaWdobGlnaHRlciBvZiBjaG9pY2UgZnJvbSBcIlNlbGVjdCBzeW50YXggaGlnaGxpZ2h0ZXIgdG8gdXNlOlwiIERyb3Bkb3duLjxiciAvPg0KTWFrZSBzdXJlIHlvdSBoYXZlICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgUGVybXNpc3Npb24uPC9wPg0KPGgzPlNldHRpbmdzPC9oMz4NCjxwPllvdSBjYW4gY2hhbmdlIGRlZmF1bHQgU2V0dGluZ3MgYW5kIFRoZW1lcyBpbiBcIkV4dGVuc2lvbnMgJnJhcXVvOyBBY2VFZGl0b3JcIjwvcD4iOw0KDQokbGFuZ1snaGVscF9rZXlib2FyZHNob3J0Y3V0c190aXRsZSddID0gIktleWJvYXJkIFNob3J0Y3V0cyI7DQokbGFuZ1snaGVscF9rZXlib2FyZHNob3J0Y3V0c19jb250ZW50J10gPSAnDQogICAgICA8aDM+RGVmYXVsdCBLZXlib2FyZCBTaG9ydGN1dHM8L2gzPg0KDQo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkRlZmF1bHQgS2V5Ym9hcmQgU2hvcnRjdXRzIj4NCjx0aGVhZD48dHI+DQo8dGg+UEMgKFdpbmRvd3MvTGludXgpPC90ZD4NCjx0aD5NYWM8L3RkPg0KPHRoPmFjdGlvbjwvdGQ+DQo8L3RyPjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVJldHVybjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtUmV0dXJuPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+ZnVsbHNjcmVlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cGVyZm9ybSBzYXZlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUw8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5jZW50ZXIgc2VsZWN0aW9uPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUFsdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1PcHRpb24tRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmNvcHkgbGluZXMgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGxjYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1BbHQtVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLU9wdGlvbi1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmNvcHkgbGluZXMgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtRjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmZpbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmZpbmQgbmV4dDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1LPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1HPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+ZmluZCBwcmV2aW91czwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+RG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkRvd24sQ3RybC1OPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gbGluZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlVwLEN0cmwtUDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIGxpbmUgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtRW5kLEN0cmwtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRW5kLENvbW1hbmQtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+TGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkxlZnQsQ3RybC1CPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1MPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1MPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGluZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LVJpZ2h0LEVuZDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtUmlnaHQsRW5kLEN0cmwtRTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtTGVmdCxIb21lPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1MZWZ0LEhvbWUsQ3RybC1BPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+UGFnZURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tUGFnZURvd24sQ3RybC1WPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gcGFnZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tUGFnZVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gcGFnZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+UmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5SaWdodCxDdHJsLUY8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1Ib21lLEN0cmwtVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUhvbWUsQ29tbWFuZC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHN0YXJ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUxlZnQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPlRhYjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlRhYjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmluZGVudDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPm1vdmUgbGluZXMgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+bW92ZSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+b3V0ZGVudDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+SW5zZXJ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+SW5zZXJ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+b3ZlcndyaXRlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnBhZ2Vkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5wYWdldXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtU2hpZnQtWixDdHJsLVk8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LVosQ29tbWFuZC1ZPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVkbzwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1EPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1EPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnJlbW92ZSB0byBsaW5lIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLUJhY2tzcGFjZTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnJlbW92ZSB0byBsaW5lc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkFsdC1CYWNrc3BhY2UsQ3RybC1BbHQtQmFja3NwYWNlPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LURlbGV0ZTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnJlbW92ZSB3b3JkIHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVI8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLU9wdGlvbi1GPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVwbGFjZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1SPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1PcHRpb24tRjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnJlcGxhY2UgYWxsPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUE8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUE8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgYWxsPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUhvbWU8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1Ib21lPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVBhZ2VEb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtUGFnZURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgcGFnZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgcGFnZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1FbmQsQWx0LVNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBsaW5lIHN0YXJ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LUhvbWUsQWx0LVNoaWZ0LVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3Qgd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtTzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNwbGl0IGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtNzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtNzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnRvZ2dsZSBjb21tZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij50cmFuc3Bvc2UgbGV0dGVyczwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1aPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1aPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+dW5kbzwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+JzsNCg0KJGxhbmdbJ2hlbHBfZnJvbnRlbmRfdGl0bGUnXSA9ICJGcm9udGVuZCI7DQokbGFuZ1snaGVscF9mcm9udGVuZF9jb250ZW50J10gPSAiPHA+VGhpcyBNb2R1bGUgYW5kIEFjZSBTY3JpcHQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIEZyb250ZW5kIFN5bnRheGhpZ2hsaWdodGVyLjxiciAvPg0KVG8gbWFrZSBpdCB3b3JrIHlvdSBoYXZlIHRvIGluY2x1ZGUgalF1ZXJ5IEZyYW1ld29yaywgZm9yIGV4YW1wbGUgdXNpbmcgQ01TTVMge2Ntc19qcXVlcnl9IHRhZyBhbmQgYXMgd2VsbCBpbmNsdWRlIHtBY2VFZGl0b3J9IGluIHlvdXIgcGFnZSB0d2ljZS4gRmlyc3QgYWRkIHRoZSBtb2R1bGUgdGFnIGluIHlvdXIgJmx0O2hlYWQmZ3Q7IHNlY3Rpb24gb2YgVGVtcGxhdGUgb3IgaW4gJnF1b3Q7UGFnZSBTcGVjaWZpYyBNZXRkYXRhJnF1b3Q7IGZpZWxkIG9mIHlvdXIgQ29udGVudCBwYWdlLCBsaWtlIHtBY2VFZGl0b3IgYWN0aW9uPSdoZWFkJ30gYW5kIGFub3RoZXIgY2FsbCB0byBzcGVjaWZ5IHdoaWNoIGFyZWEgc2hvdWxkIGJlIGhpZ2hsaWdodGVkLCBmb3IgZXhhbXBsZSB7QWNlRWRpdG9yIGRpdmlkPSdmb28nfSwgd2hpY2ggd291bGQgdGFyZ2V0IGEgcGFnZSBlbGVtZW50IHdpdGggaWQgPGVtPmZvbzwvZW0+LjwvcD4NCjxoMz5TbyBob3cgZG8geW91IHVzZSBpdD88L2gzPg0KPHA+Rmlyc3QgaW5jbHVkZSBqUXVlcnkgYW5kIE1vZHVsZSB0YWcgaW4geW91ciBQYWdlICZsdDtoZWFkJmd0OyBhcmVhLCBmb3IgZXhhbXBsZSBpbiAmcXVvdDtQYWdlIFNwZWNpZmljIE1ldGRhdGEmcXVvdDs6PC9wPg0KCTxwcmU+DQoJe2Ntc19qcXVlcnl9DQoJe0FjZUVkaXRvciBhY3Rpb249J2hlYWQnfQ0KCTwvcHJlPg0KPHA+VGhpcyBpbmNsdWRlcyBuZWVkZWQgc2NyaXB0cyBmb3IgQWNlIFN5bnRheGhpZ2hsaWdodGVyIHRvIHdvcmsuPGJyIC8+DQpJbiBNb2R1bGVzIEFkbWluIGludGVyZmFjZSB5b3UgY2FuIHNlbGVjdCBkZWZhdWx0IHNldHRpbmdzIGZvciB5b3VyICdoZWFkJyBhY3Rpb24gb3IgdXNlIHBhcmFtZXRlciBtb2Rlcz0naHRtbCxqYXZhc2NyaXB0JyBhbmQgdGhlbWVzPSd0ZXh0bWF0ZScgd2hpY2ggd291bGQgb3ZlcnJpZGUgc2VsZWN0ZWQgUHJlZmVyZW5jZXMuPC9wPg0KPHA+Tm93IHdoZW4geW91IGhhdmUgbmVlZGVkIHNjcmlwdHMgaW5jbHVkZWQsIG9uZSBtb3JlIE1vZHVsZSB0YWcgY2FsbCBpcyBuZWVkZWQgKGZvciBleGFtcGxlIGluIHlvdXIgQ29udGVudCBFZGl0b3IgYXJlYSkgdG8gc3BlY2lmeSB3aGljaCBhcmVhIG9mIHlvdXIgUGFnZSBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQuPC9wPg0KCTxwcmU+DQoJe0FjZUVkaXRvciBkaXZpZD0nc29tZS1pZCd9DQoJPC9wcmU+DQo8cD5UaGlzIHRhZyBpbmNsdWRlcyBuZWVkZWQgU2NyaXB0IGFuZCBTdHlsZSB0aGF0IGlzIHVzZWQgdG8gSGlnaGxpZ2h0IHNlbGVjdGVkIGVsZW1lbnQgd2l0aCBzcGVjaWZpZWQgaWQuPGJyIC8+DQpBbGwgeW91IG5lZWQgdGhlbiBpcyB3cml0ZSB5b3VyIENvZGUgdGhhdCB5b3Ugd2FudCB0byBIaWdobGlnaHQgYW5kIHdyYXAgaXQgaW5zaWRlIGFuIGVsZW1lbiBsaWtlICZsdDtkaXYmZ3Q7IHdpdGggc3BlY2lmaWVkIGlkLjwvcD4NCjxwcmU+Ii5jbXNfaHRtbGVudGl0aWVzKCcNCjxwcmUgaWQ9InNvbWUtaWQiPg0KJmx0O2h0bWwmZ3Q7DQogwqAgwqAgJmx0O2hlYWQmZ3Q7DQogwqAgwqAgJmx0O3N0eWxlIHR5cGU9InRleHQvY3NzIiZndDsNCiDCoCDCoCDCoCDCoCAudGV4dC1sYXllciB7DQogwqAgwqAgwqAgwqAgwqAgwqAgZm9udC1mYW1pbHk6IE1vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlOw0KIMKgIMKgIMKgIMKgIMKgIMKgIGZvbnQtc2l6ZTogMTJweDsNCiDCoCDCoCDCoCDCoCDCoCDCoCBjdXJzb3I6IHRleHQ7DQogwqAgwqAgwqAgwqAgfQ0KIMKgIMKgICZsdDsvc3R5bGUmZ3Q7DQogwqAgwqAgJmx0Oy9oZWFkJmd0Ow0KIMKgIMKgICZsdDtib2R5Jmd0Ow0KIMKgIMKgIMKgIMKgICZsdDtoMSBzdHlsZT0iY29sb3I6cmVkIiZndDtKdWh1IEtpbm5lcnMmbHQ7L2gxJmd0Ow0KIMKgIMKgICZsdDsvYm9keSZndDsgJmx0Oy9odG1sJmd0Ow0KPC9wcmU+DQonKS4iPC9wcmU+IjsNCg0KJGxhbmdbJ2hlbHBfYWJvdXRfdGl0bGUnXSA9ICJBYm91dCI7DQokbGFuZ1snaGVscF9hYm91dF90ZXh0J10gPSAnPGgzPlN1cHBvcnQ8L2gzPg0KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4NCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEyLCBHb3JhbiBJbGljIDxhIGhyZWY9Im1haWx0bzp1bmlxdTNlQGdtYWlsLmNvbSI+Jmx0O3VuaXF1M2VAZ21haWwuY29tJmd0OzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5pY2gtbWFjaC1kYXMuYXQiIHJlbD0iZXh0ZXJuYWwiPnd3dy5pY2gtbWFjaC1kYXMuYXQ8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KCTxoMz5UZWFtPC9oMz4NCgk8dWw+DQoJCTxsaT5Hb3JhbiBJbGljICh1bmlxdTMpIGcuaWxpY0BpLWFydHMuZXUgPGJyIC8+d3d3LmljaC1tYWNoLWRhcy5hdDwvbGk+CQ0KCQk8bGk+Um9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwKSBjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnICA8YnIgLz53d3cuY2FsZ3V5MTAwMC5jb208L2xpPgkJDQoJCTxsaT5Kb25hdGhhbiBTY2htaWQgKEZvYWx5KikgaGlAam9uYXRoYW5zY2htaWQuZGUgPGJyIC8+d3d3LmpvbmF0aGFuc2NobWlkLmRlPC9saT4NCgk8L3VsPg0KJzsNCg0KLyogLS0tIENoYW5nZWxvZyAtLS0gKi8NCiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICINCjxoMz5WZXJzaW9uIDAuMTwvaDM+DQo8dWw+DQoJPGxpPkl0J3MgZnJlc2ghIE5vdGhpbmcgY2hhbmdlZCB5ZXQhPC9saT4NCgk8bGk+VXNpbmcgQWNlIFZlcnNpb24gMC4yLjA8L2xpPg0KPC91bD4NCjxoMz5WZXJzaW9uIDAuMjwvaDM+DQo8dWw+DQoJPGxpPkFkZGVkIENUUkwtUyBLZXliaW5kaW5nPC9saT4NCgk8bGk+QWRkZWQgRnVsbHNjcmVlbm1vZGU8L2xpPg0KCTxsaT5BZGRlZCBGcm9udGVuZCBIaWdobGlnaHRpbmc8L2xpPg0KCTxsaT5VcGRhdGVkIEFjZTwvbGk+DQo8L3VsPg0KPGgzPlJvYWRtYXA8L2gzPg0KPHVsPg0KCTxsaT48ZGVsPkFkZCBGcm9udGVuZCBTeW50YXhoaWdobGlnaHRpbmc8L2RlbD48L2xpPg0KCTxsaT48ZGVsPkFkZCBGdWxsc2NyZWVubW9kZTwvZGVsPjwvbGk+DQoJPGxpPjxkZWw+QWRkIEtleWJpbmRpbmcgKENUUkwrUyk8L2RlbD48L2xpPg0KCTxsaT5BZGQgRWRpdG9yIGJlaGF2aW9yIChWaW0sIEVNYWNzKTwvbGk+DQoJPGxpPk1heWJlIGFkZCBUb29sYmFyPC9saT4NCjwvdWw+IjsNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvciAnOwokbGFuZ1snc2V0dGluZ3NfdGFiJ10gPSAnRWluc3RlbGx1bmdlbic7CiRsYW5nWydleGFtcGxlX2RvY3VtZW50J10gPSAnRG9rdW1lbnQnOwokbGFuZ1snc3ludGF4X21vZGUnXSA9ICdNb2R1cyc7CiRsYW5nWyd0aGVtZXMnXSA9ICdBdXNzZWhlbic7CiRsYW5nWydmb250X3NpemUnXSA9ICdTY2hyaWZ0Z3Imb3VtbDsmc3psaWc7ZSc7CiRsYW5nWydmdWxsX2xpbmUnXSA9ICdHYW56ZSBaZWlsZSc7CiRsYW5nWydoaWdobGlnaHRfYWN0aXZlJ10gPSAnQWt0aXZlIFplaWxlIG1hcmtpZXJlbic7CiRsYW5nWydzaG93X2ludmlzaWJsZXMnXSA9ICdaZWlnZSB1bnNpY2h0YmFyZSc7CiRsYW5nWydwZXJzaXN0ZW50X2hzY3JvbGwnXSA9ICdQZXJzaXN0ZW50ZXMgSFNjcm9sbCc7CiRsYW5nWydrZXlfYmluZGluZyddID0gJ1NjaGwmdXVtbDtzc2VsYmluZHVuZyc7CiRsYW5nWydzb2Z0X3dyYXAnXSA9ICdTb2Z0IFdyYXAnOwokbGFuZ1snc2hvd19ndXR0ZXInXSA9ICdHdXR0ZXIgYW56ZWlnZW4nOwokbGFuZ1sncHJpbnRfbWFyZ2luJ10gPSAnUHJpbnQgTWFyZ2luIGFuemVpZ2VuJzsKJGxhbmdbJ3NvZnRfdGFiJ10gPSAnU29mdCBUYWIgdmVyd2VuZGVuJzsKJGxhbmdbJ2hpZ2hsaWdodF9zZWxlY3RlZCddID0gJ0F1c2dldyZhdW1sO2hsdGVzIFdvcnQgbWFya2llcmVuJzsKJGxhbmdbJ2VuYWJsZV9iZWhhdmlvcnMnXSA9ICdWZXJoYWx0ZW4gYWt0aXZpZXJlbic7CiRsYW5nWyd0ZXN0YXJlYXRleHQnXSA9ICdWb3JzY2hhdSc7CiRsYW5nWydqcyddID0gJ0phdmFTY3JpcHQgJzsKJGxhbmdbJ3BsYWluJ10gPSAnVGV4dCc7CiRsYW5nWydzdmcnXSA9ICdTVkcgJzsKJGxhbmdbJ2h0bWwnXSA9ICdIVE1MICc7CiRsYW5nWydjc3MnXSA9ICdDU1MgJzsKJGxhbmdbJ3Njc3MnXSA9ICdTQ1NTICc7CiRsYW5nWydjb2ZmZWUnXSA9ICdDb2ZmZWVTY3JpcHQgJzsKJGxhbmdbJ2pzb24nXSA9ICdKU09OICc7CiRsYW5nWydweXRob24nXSA9ICdQeXRob24gJzsKJGxhbmdbJ3J1YnknXSA9ICdSdWJ5ICc7CiRsYW5nWydwZXJsJ10gPSAnUGVybCAnOwokbGFuZ1sncGhwJ10gPSAnUEhQICc7CiRsYW5nWydqYXZhJ10gPSAnSmF2YSAnOwokbGFuZ1snY3NoYXJwJ10gPSAnQyMgJzsKJGxhbmdbJ2NfY3BwJ10gPSAnQysrICc7CiRsYW5nWydjbG9qdXJlJ10gPSAnQ2xvanVyZSAnOwokbGFuZ1snb2NhbWwnXSA9ICdPQ2FtbCAnOwokbGFuZ1sndGV4dGlsZSddID0gJ1RleHRpbGUgJzsKJGxhbmdbJ2dyb292eSddID0gJ0dyb292eSAnOwokbGFuZ1snc2NhbGEnXSA9ICdTY2FsYSAnOwokbGFuZ1snY2xvdWRzJ10gPSAnQ2xvdWRzICc7CiRsYW5nWydjbG91ZHNfbWlkbmlnaHQnXSA9ICdDbG91ZHMgTWlkbmlnaHQgJzsKJGxhbmdbJ2NvYmFsdCddID0gJ0NvYmFsdCAnOwokbGFuZ1snY3JpbXNvbl9lZGl0b3InXSA9ICdDcmltc29uIEVkaXRvciAnOwokbGFuZ1snZGF3biddID0gJ0Rhd24gJzsKJGxhbmdbJ2VjbGlwc2UnXSA9ICdFY2xpcHNlICc7CiRsYW5nWydpZGxlX2ZpbmdlcnMnXSA9ICdpZGxlRmluZ2VycyAnOwokbGFuZ1sna3JfdGhlbWUnXSA9ICdrclRoZW1lICc7CiRsYW5nWydtZXJiaXZvcmUnXSA9ICdNZXJiaXZvcmUgJzsKJGxhbmdbJ21lcmJpdm9yZV9zb2Z0J10gPSAnTWVyYm92aW9yZSBTb2Z0JzsKJGxhbmdbJ21vbm9faW5kdXN0cmlhbCddID0gJ01vbm8gSW5kdXN0cmlhbCc7CiRsYW5nWydtb25va2FpJ10gPSAnTW9ub2thaSc7CiRsYW5nWydwYXN0ZWxfb25fZGFyayddID0gJ1Bhc3RlbCBvbiBkYXJrJzsKJGxhbmdbJ3NvbGFyaXplZF9kYXJrJ10gPSAnU29sYXJpemVkIERhcmsnOwokbGFuZ1snc29sYXJpemVkX2xpZ2h0J10gPSAnU29sYXJpemVkIExpZ2h0JzsKJGxhbmdbJ3RleHRtYXRlJ10gPSAnVGV4dE1hdGUgJzsKJGxhbmdbJ3R3aWxpZ2h0J10gPSAnVHdpbGlnaHQgJzsKJGxhbmdbJ3ZpYnJhbnRfaW5rJ10gPSAnVmlicmFudCBJbmsgJzsKJGxhbmdbJ2FjZSddID0gJ0FjZSAnOwokbGFuZ1sndmltJ10gPSAnVmltICc7CiRsYW5nWydlbWFjcyddID0gJ0VNYWNzICc7CiRsYW5nWydjdXN0b20nXSA9ICdCZW51dHplcmRlZmluaWVydCc7CiRsYW5nWydvZmYnXSA9ICdBdXMnOwokbGFuZ1snNDAnXSA9ICc0MCBaZWljaGVuJzsKJGxhbmdbJzgwJ10gPSAnODAgWmVpY2hlbic7CiRsYW5nWydmcmVlJ10gPSAnRnJlaSc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdFaW5zdGVsbHVuZ2VuIHNwZWljaGVybic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSWhyZSBBY2VFZGl0b3ItRWluc3RlbGx1bmdlbiB3dXJkZW4gZ2VzcGVpY2hlcnQnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdBY2VFZGl0b3Igd3VyZGVpbnN0YWxsaWVydCEgU2V0emVuIFNpZSBkaWUgQmVyZWNodGlndW5nICZxdW90O01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJnF1b3Q7LCB1bSBkaWVzZXMgTW9kdWwgdmVyd2VuZGVuIHp1IGsmb3VtbDtubmVuISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQWNlRWRpdG9yIHd1cmRlIGRlaW5zdGFsbGllcnQnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1dvbGxlbiBTaWUgd2lya2xpY2ggQWNlRWRpdG9yIGRlaW5zdGFsbGllcmVuPyBEZW5rZW4gU2llIG5vY2htYWwgbmFjaCEnOwokbGFuZ1snaGVscF9nZW5lcmFsX3RpdGxlJ10gPSAnQWxsZ2VtZWluJzsKJGxhbmdbJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfdGl0bGUnXSA9ICdUYXN0YXR1cmsmdXVtbDtyemVsJzsKJGxhbmdbJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfY29udGVudCddID0gJyAgICAgIDxoMz5EZWZhdWx0IEtleWJvYXJkIFNob3J0Y3V0czwvaDM+DQoNCjx0YWJsZSBjbGFzcz0mcXVvdDtwYWdldGFibGUmcXVvdDsgY2VsbHNwYWNpbmc9JnF1b3Q7MCZxdW90OyBzdW1tYXJ5PSZxdW90O0RlZmF1bHQgS2V5Ym9hcmQgU2hvcnRjdXRzJnF1b3Q7Pg0KPHRoZWFkPjx0cj4NCjx0aD5QQyAoV2luZG93cy9MaW51eCk8L3RkPg0KPHRoPk1hYzwvdGQ+DQo8dGg+YWN0aW9uPC90ZD4NCjwvdHI+PC90aGVhZD4NCjx0Ym9keT4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtTDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5jZW50ZXIgc2VsZWN0aW9uPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtQWx0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5jb3B5IGxpbmVzIGRvd248L3RkPg0KPC90cj4NCjx0ciBsY2Fzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1BbHQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Y29weSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUY8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1GPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmZpbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1LPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtRzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5maW5kIG5leHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1LPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtU2hpZnQtRzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5maW5kIHByZXZpb3VzPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkRvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+RG93bixDdHJsLU48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gbGluZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlVwLEN0cmwtUDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyBsaW5lIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtRW5kLEN0cmwtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUVuZCxDb21tYW5kLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+TGVmdCxDdHJsLUI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUw8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1MPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LVJpZ2h0LEVuZDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVJpZ2h0LEVuZCxDdHJsLUU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LUxlZnQsSG9tZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUxlZnQsSG9tZSxDdHJsLUE8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tUGFnZURvd24sQ3RybC1WPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIHBhZ2UgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBwYWdlIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlJpZ2h0LEN0cmwtRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUhvbWUsQ3RybC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUhvbWUsQ29tbWFuZC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+VGFiPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlRhYjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5pbmRlbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+bW92ZSBsaW5lcyBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+bW92ZSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1UYWI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pm91dGRlbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+SW5zZXJ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pkluc2VydDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5vdmVyd3JpdGU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlBhZ2VEb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnBhZ2Vkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cGFnZXVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtWixDdHJsLVk8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1aLENvbW1hbmQtWTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZWRvPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtRDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZW1vdmUgdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1CYWNrc3BhY2U8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHRvIGxpbmVzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LUJhY2tzcGFjZSxDdHJsLUFsdC1CYWNrc3BhY2U8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LURlbGV0ZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZW1vdmUgd29yZCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZXBsYWNlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtUjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LU9wdGlvbi1GPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlcGxhY2UgYWxsPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtQTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUE8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGFsbDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUVuZDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUhvbWU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtSG9tZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgcGFnZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHBhZ2UgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtRW5kLEFsdC1TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtU2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB0byBsaW5lIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5BbHQtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHRvIGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1Ib21lLEFsdC1TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB0byBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB3b3JkIGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtTzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zcGxpdCBsaW5lPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtNzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLTc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+dG9nZ2xlIGNvbW1lbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1UPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtVDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz50cmFuc3Bvc2UgbGV0dGVyczwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVo8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1aPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnVuZG88L3RkPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8aDM+VmVyc2lvbiAwLjE8L2gzPg0KPHVsPg0KCTxsaT5JdCYjMDM5O3MgZnJlc2ghIE5vdGhpbmcgY2hhbmdlZCB5ZXQhPC9saT4NCjwvdWw+JzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMjA0ODU4ODAwMi4xMzIyODAzODA3LjEzMjI4MDM4MDcuMTMyMjgwMzgwNy4xJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTMyMjgwMzgwNy4xLjEudXRtY2NuPShkaXJlY3QpfHV0bWNzcj0oZGlyZWN0KXx1dG1jbWQ9KG5vbmUpJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvcic7CiRsYW5nWydzZXR0aW5nc190YWInXSA9ICdJbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ2V4YW1wbGVfZG9jdW1lbnQnXSA9ICdEb2N1bWVudCc7CiRsYW5nWydzeW50YXhfbW9kZSddID0gJ01vZGUnOwokbGFuZ1sndGhlbWVzJ10gPSAnVGhlbWUnOwokbGFuZ1snZm9udF9zaXplJ10gPSAnRm9udCBTaXplJzsKJGxhbmdbJ2Z1bGxfbGluZSddID0gJ0Z1bGwgTGluZSc7CiRsYW5nWydoaWdobGlnaHRfYWN0aXZlJ10gPSAnSGlnaGxpZ2h0IEFjdGl2ZSBMaW5lJzsKJGxhbmdbJ3Nob3dfaW52aXNpYmxlcyddID0gJ1Nob3cgSW52aXNpYmxlcyc7CiRsYW5nWydwZXJzaXN0ZW50X2hzY3JvbGwnXSA9ICdQZXJzaXRlbnQgSFNjcm9sbCc7CiRsYW5nWydrZXlfYmluZGluZyddID0gJ0tleSBCaW5kaW5nJzsKJGxhbmdbJ3NvZnRfd3JhcCddID0gJ1NvZnQgV3JhcCc7CiRsYW5nWydzaG93X2d1dHRlciddID0gJ1Nob3cgR3V0dGVyJzsKJGxhbmdbJ3ByaW50X21hcmdpbiddID0gJ1Nob3cgUHJpbnQgTWFyZ2luJzsKJGxhbmdbJ3NvZnRfdGFiJ10gPSAnVXNlIFNvZnQgVGFiJzsKJGxhbmdbJ2hpZ2hsaWdodF9zZWxlY3RlZCddID0gJ0hpZ2hsaWdodCBzZWxlY3RlZCB3b3JkJzsKJGxhbmdbJ2VuYWJsZV9iZWhhdmlvcnMnXSA9ICdFbmFibGUgQmVoYXZpb3JzJzsKJGxhbmdbJ3Rlc3RhcmVhdGV4dCddID0gJ1ByZXZpZXcnOwokbGFuZ1snanMnXSA9ICdKYXZhU2NyaXB0JzsKJGxhbmdbJ3BsYWluJ10gPSAnUGxhaW4gVGV4dCc7CiRsYW5nWydzdmcnXSA9ICdTVkcnOwokbGFuZ1snaHRtbCddID0gJ0hUTUwnOwokbGFuZ1snY3NzJ10gPSAnQ1NTJzsKJGxhbmdbJ3Njc3MnXSA9ICdTQ1NTJzsKJGxhbmdbJ2NvZmZlZSddID0gJ0NvZmZlZVNjcmlwdCc7CiRsYW5nWydqc29uJ10gPSAnSlNPTic7CiRsYW5nWydweXRob24nXSA9ICdQeXRob24nOwokbGFuZ1sncnVieSddID0gJ1J1YnknOwokbGFuZ1sncGVybCddID0gJ1BlcmwnOwokbGFuZ1sncGhwJ10gPSAnUEhQJzsKJGxhbmdbJ2phdmEnXSA9ICdKYXZhJzsKJGxhbmdbJ2NzaGFycCddID0gJ0MjJzsKJGxhbmdbJ2NfY3BwJ10gPSAnQysrJzsKJGxhbmdbJ2Nsb2p1cmUnXSA9ICdDbG9qdXJlJzsKJGxhbmdbJ29jYW1sJ10gPSAnT0NhbWwnOwokbGFuZ1sndGV4dGlsZSddID0gJ1RleHRpbGUnOwokbGFuZ1snZ3Jvb3Z5J10gPSAnR3Jvb3Z5JzsKJGxhbmdbJ3NjYWxhJ10gPSAnU2NhbGEnOwokbGFuZ1snY2xvdWRzJ10gPSAnQ2xvdWRzJzsKJGxhbmdbJ2Nsb3Vkc19taWRuaWdodCddID0gJ0Nsb3VkcyBNaWRuaWdodCc7CiRsYW5nWydjb2JhbHQnXSA9ICdDb2JhbHQnOwokbGFuZ1snY3JpbXNvbl9lZGl0b3InXSA9ICdDcmltc29uIEVkaXRvcic7CiRsYW5nWydkYXduJ10gPSAnRGF3bic7CiRsYW5nWydlY2xpcHNlJ10gPSAnRWNsaXBzZSc7CiRsYW5nWydpZGxlX2ZpbmdlcnMnXSA9ICdpZGxlRmluZ2Vycyc7CiRsYW5nWydrcl90aGVtZSddID0gJ2tyVGhlbWUnOwokbGFuZ1snbWVyYml2b3JlJ10gPSAnTWVyYml2b3JlJzsKJGxhbmdbJ21lcmJpdm9yZV9zb2Z0J10gPSAnTWVyYm92aW9yZSBTb2Z0JzsKJGxhbmdbJ21vbm9faW5kdXN0cmlhbCddID0gJ01vbm8gSW5kdXN0cmlhbCc7CiRsYW5nWydtb25va2FpJ10gPSAnTW9ub2thaSc7CiRsYW5nWydwYXN0ZWxfb25fZGFyayddID0gJ1Bhc3RlbCBvbiBkYXJrJzsKJGxhbmdbJ3NvbGFyaXplZF9kYXJrJ10gPSAnU29sYXJpemVkIERhcmsnOwokbGFuZ1snc29sYXJpemVkX2xpZ2h0J10gPSAnU29sYXJpemVkIExpZ2h0JzsKJGxhbmdbJ3RleHRtYXRlJ10gPSAnVGV4dE1hdGUnOwokbGFuZ1sndHdpbGlnaHQnXSA9ICdUd2lsaWdodCc7CiRsYW5nWyd2aWJyYW50X2luayddID0gJ1ZpYnJhbnQgSW5rJzsKJGxhbmdbJ2FjZSddID0gJ0FjZSc7CiRsYW5nWyd2aW0nXSA9ICdWaW0nOwokbGFuZ1snZW1hY3MnXSA9ICdFTWFjcyc7CiRsYW5nWydjdXN0b20nXSA9ICdDdXN0b20nOwokbGFuZ1snb2ZmJ10gPSAnT2ZmJzsKJGxhbmdbJzQwJ10gPSAnNDAgdGVnbic7CiRsYW5nWyc4MCddID0gJzgwIHRlZ24nOwokbGFuZ1snZnJlZSddID0gJ0ZyZWUnOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnTGFncmUgaW5uc3RpbGxpbmdlcic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnRGluZSBBY2VFZGl0b3IgaW5uc3RpbGxpbmdlciBoYXIgYmxpdHQgbGFncmV0JzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQWNlRWRpdG9yIFN1Y2Nlc3NmdWxseSBJbnN0YWxsZWQhIFNldCAmcXVvdDtNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcyZxdW90OyBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdBY2VFZGl0b3IgU3VjY2Vzc2Z1bGx5IFVuaW5zdGFsbGVkJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdSZWFsbHk/IEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgQWNlRWRpdG9yPyBUaGluayBhZ2FpbiEnOwokbGFuZ1snaGVscF9nZW5lcmFsX3RpdGxlJ10gPSAnR2VuZXJhbCc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8aDM+VmVyc2lvbiAwLjE8L2gzPg0KPHVsPg0KCTxsaT5JdCYjMDM5O3MgZnJlc2ghIE5vdGhpbmcgY2hhbmdlZCB5ZXQhPC9saT4NCjwvdWw+JzsKJGxhbmdbJ3FjYSddID0gJ1AwLTUzNjg0OTExNS0xMzA3OTgzNDk1MjEwJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMjUxNzI4MDkxLjEzMjI0MzAzNzEuMTMyMjQzNTAxOS4xMzIyNTExMTE3LjMnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzIyNDMwMzcxLjEuMS51dG1jc3I9KGRpcmVjdCl8dXRtY2NuPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4yLjEwLjEzMjI1MTExMTcnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvciAnOwokbGFuZ1snc2V0dGluZ3NfdGFiJ10gPSAnVm9vcmtldXJlbic7CiRsYW5nWydleGFtcGxlX2RvY3VtZW50J10gPSAnRG9jdW1lbnQgJzsKJGxhbmdbJ3dpZHRoX3RpdGxlJ10gPSAnRWRpdG9yIGJyZWVkdGUgKGluIGVtKSc7CiRsYW5nWydoZWlnaHRfdGl0bGUnXSA9ICdFZGl0b3IgYnJlZWR0ZSAoaW4gZW0pJzsKJGxhbmdbJ3N5bnRheF9tb2RlJ10gPSAnTW9kdXMnOwokbGFuZ1sndGhlbWVzJ10gPSAnVGhlbWEnOwokbGFuZ1snZm9udF9zaXplJ10gPSAnTGV0dGVyZ3Jvb3R0ZSc7CiRsYW5nWydmdWxsX2xpbmUnXSA9ICdWb2xsZWRpZ2UgbGlqbic7CiRsYW5nWydoaWdobGlnaHRfYWN0aXZlJ10gPSAnSGlnaGxpZ2h0IGFjdGlldmUgbGlqbic7CiRsYW5nWydzaG93X2ludmlzaWJsZXMnXSA9ICdHZWVmIG9uemljaHRiYXJlIHdlZXInOwokbGFuZ1sncGVyc2lzdGVudF9oc2Nyb2xsJ10gPSAnUGVyc2l0ZW50IEhTY3JvbGwgJzsKJGxhbmdbJ2tleV9iaW5kaW5nJ10gPSAnS2V5IEJpbmRpbmcgJzsKJGxhbmdbJ3NvZnRfd3JhcCddID0gJ1NvZnQgV3JhcCAnOwokbGFuZ1snc2hvd19ndXR0ZXInXSA9ICdHZWVmIEd1dHRlciB3ZWVyJzsKJGxhbmdbJ3ByaW50X21hcmdpbiddID0gJ0dlZWYgcHJpbnRtYXJnZSB3ZWVyJzsKJGxhbmdbJ3NvZnRfdGFiJ10gPSAnR2VicnVpayBTb2Z0IFRhYic7CiRsYW5nWydoaWdobGlnaHRfc2VsZWN0ZWQnXSA9ICdIaWdobGlnaHQgaGV0IGdlc2VsZWN0ZWVyZGUgd29vcmQnOwokbGFuZ1snZW5hYmxlX2JlaGF2aW9ycyddID0gJ1NjaGFrZWwgQmVoYXZpb3JzIGluJzsKJGxhbmdbJ3Rlc3RhcmVhdGV4dCddID0gJ1Zvb3JiZWVsZCc7CiRsYW5nWydqcyddID0gJ0phdmFTY3JpcHQgJzsKJGxhbmdbJ3BsYWluJ10gPSAnUGxhdHRlIHRla3N0JzsKJGxhbmdbJ3N2ZyddID0gJ1NWRyAnOwokbGFuZ1snaHRtbCddID0gJ0hUTUwgJzsKJGxhbmdbJ2NzcyddID0gJ0NTUyAnOwokbGFuZ1snc2NzcyddID0gJ1NDU1MgJzsKJGxhbmdbJ2NvZmZlZSddID0gJ0NvZmZlZVNjcmlwdCAnOwokbGFuZ1snanNvbiddID0gJ0pTT04gJzsKJGxhbmdbJ3B5dGhvbiddID0gJ1B5dGhvbiAnOwokbGFuZ1sncnVieSddID0gJ1J1YnkgJzsKJGxhbmdbJ3BlcmwnXSA9ICdQZXJsICc7CiRsYW5nWydwaHAnXSA9ICdQSFAgJzsKJGxhbmdbJ2phdmEnXSA9ICdKYXZhICc7CiRsYW5nWydjc2hhcnAnXSA9ICdDIyAnOwokbGFuZ1snY19jcHAnXSA9ICdDKysgJzsKJGxhbmdbJ2Nsb2p1cmUnXSA9ICdDbG9qdXJlICc7CiRsYW5nWydvY2FtbCddID0gJ09DYW1sICc7CiRsYW5nWyd0ZXh0aWxlJ10gPSAnVGV4dGlsZSc7CiRsYW5nWydncm9vdnknXSA9ICdHcm9vdnknOwokbGFuZ1snc2NhbGEnXSA9ICdTY2FsYSc7CiRsYW5nWydjbG91ZHMnXSA9ICdDbG91ZHMnOwokbGFuZ1snY2xvdWRzX21pZG5pZ2h0J10gPSAnQ2xvdWRzIE1pZG5pZ2h0JzsKJGxhbmdbJ2NvYmFsdCddID0gJ0NvYmFsdCc7CiRsYW5nWydjcmltc29uX2VkaXRvciddID0gJ0NyaW1zb24gRWRpdG9yJzsKJGxhbmdbJ2Rhd24nXSA9ICdEYXduJzsKJGxhbmdbJ2VjbGlwc2UnXSA9ICdFY2xpcHNlJzsKJGxhbmdbJ2lkbGVfZmluZ2VycyddID0gJ2lkbGVGaW5nZXJzJzsKJGxhbmdbJ2tyX3RoZW1lJ10gPSAna3JUaGVtZSc7CiRsYW5nWydtZXJiaXZvcmUnXSA9ICdNZXJiaXZvcmUnOwokbGFuZ1snbWVyYml2b3JlX3NvZnQnXSA9ICdNZXJib3Zpb3JlIFNvZnQnOwokbGFuZ1snbW9ub19pbmR1c3RyaWFsJ10gPSAnTW9ubyBJbmR1c3RyaWFsJzsKJGxhbmdbJ21vbm9rYWknXSA9ICdNb25va2FpJzsKJGxhbmdbJ3Bhc3RlbF9vbl9kYXJrJ10gPSAnUGFzdGVsIG9uIGRhcmsnOwokbGFuZ1snc29sYXJpemVkX2RhcmsnXSA9ICdTb2xhcml6ZWQgRGFyayc7CiRsYW5nWydzb2xhcml6ZWRfbGlnaHQnXSA9ICdTb2xhcml6ZWQgTGlnaHQnOwokbGFuZ1sndGV4dG1hdGUnXSA9ICdUZXh0TWF0ZSc7CiRsYW5nWyd0d2lsaWdodCddID0gJ1R3aWxpZ2h0JzsKJGxhbmdbJ3ZpYnJhbnRfaW5rJ10gPSAnVmlicmFudCBJbmsnOwokbGFuZ1snYWNlJ10gPSAnQWNlJzsKJGxhbmdbJ3ZpbSddID0gJ1ZpbSc7CiRsYW5nWydlbWFjcyddID0gJ0VNYWNzJzsKJGxhbmdbJ2N1c3RvbSddID0gJ0dlYXZhbmNlZXJkJzsKJGxhbmdbJ29mZiddID0gJ1VpdCc7CiRsYW5nWyc0MCddID0gJzQwIEthcmFrdGVycyc7CiRsYW5nWyc4MCddID0gJzgwIEthcmFrdGVycyc7CiRsYW5nWycxMDAnXSA9ICcxMDAgS2FyYWt0ZXJzJzsKJGxhbmdbJ2ZyZWUnXSA9ICdHcmF0aXMnOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnVm9vcmtldXJlbiBvcHNsYWFuJzsKJGxhbmdbJ3NldHRpbmdzc2F2ZWQnXSA9ICdVdyBBY2VFZGl0b3IgaW5zdGVsbGluZ2VuIHppam4gb3BnZXNsYWdlbic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0FjZUVkaXRvciBzdWNjZXN2b2wgZ2UmaXVtbDtuc3RhbGxlZXJkISBTdGVsICZxdW90O0Jld2VyayBzaXRldm9vcmtldXJlbiZxdW90OyBwZXJtaXNzaWVzIGluIG9tIGRlemUgbW9kdWxlIHRlIGdlYnJ1aWtlbiEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0FjZUVkaXRvciBzdWNjZXN2b2wgZ2UmaXVtbDtuc3RhbGxlZXJkJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdFY2h0PyBXZWV0IHUgemVrZXIgZGF0IHUgQWNlRWRpdG9yIHdpbHQgdmVyd2lqZGVyZW4/IERlbmsgbm9nIGVlbnMgZ29lZCBuYSEnOwokbGFuZ1snaGVscF9nZW5lcmFsX3RpdGxlJ10gPSAnQWxnZW1lZW4nOwokbGFuZ1snaGVscF9nZW5lcmFsX3RleHQnXSA9ICc8aDM+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvaDM+DQo8cD5BY2VFZGl0b3IgaXMgYSBTeW50YXhoaWdobGlnaHRlciBtb2R1bGUgdXNpbmcgPHN0cm9uZz5BY2U8L3N0cm9uZz4gYSBzdGFuZGFsb25lIGNvZGUgZWRpdG9yIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC48YnIgLz4gDQpHb2FsIG9mIEFjZSBjb2RlIGVkaXRvciBncm91cCBpcyB0byBjcmVhdGUgYSB3ZWIgYmFzZWQgY29kZSBlZGl0b3IgdGhhdCBtYXRjaGVzIGFuZCBleHRlbmRzIHRoZSBmZWF0dXJlcywgdXNhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBleGlzdGluZyBuYXRpdmUgZWRpdG9ycyBzdWNoIGFzIFRleHRNYXRlLCBWaW0gb3IgRWNsaXBzZS48YnIgLz4NCkl0IGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW4gYW55IHdlYiBwYWdlIGFuZCBKYXZhU2NyaXB0IGFwcGxpY2F0aW9uLjxiciAvPiANCkFjZSBpcyBkZXZlbG9wZWQgYXMgdGhlIHByaW1hcnkgZWRpdG9yIGZvciA8YSBocmVmPSJodHRwOi8vd3d3LmNsb3VkOWlkZS5jb20iPkNsb3VkOSBJREU8L2E+IGFuZCB0aGUgc3VjY2Vzc29yIG9mIHRoZSBNb3ppbGxhIFNreXdyaXRlciAoQmVzcGluKSBQcm9qZWN0LjwvcD4NCjxoMz5BY2UgaXMgaG9zdGVkIG9uIEdpdEh1YjwvaDM+DQo8cD5UaGUgQWNlIHNvdXJjZSBjb2RlIGlzIGhvc3RlZCBvbiBHaXRIdWIuIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNb3ppbGxhIHRyaS1saWNlbnNlIChNUEwvR1BML0xHUEwpLjxiciAvPg0KVGhpcyBpcyB0aGUgc2FtZSBsaWNlbnNlIHVzZWQgYnkgRmlyZWZveC4gVGhpcyBsaWNlbnNlIGlzIGZyaWVuZGx5IHRvIGFsbCBraW5kcyBvZiBwcm9qZWN0cywgd2hldGhlciBvcGVuIHNvdXJjZSBvciBub3QuPGJyIC8+DQogVGFrZSBjaGFyZ2Ugb2YgeW91ciBlZGl0b3IgYW5kIGFkZCB5b3VyIGZhdm9yaXRlIGxhbmd1YWdlIGhpZ2hsaWdodGluZyBhbmQga2V5YmluZGluZ3MhPC9wPg0KPGgzPlVzaW5nIEFjZUVkaXRvciBNb2R1bGU8L2gzPg0KPHA+VXNpbmcgQWNlRWRpdG9yIE1vZHVsZSBpcyBzaW1wbGUuPGJyIC8+DQpBZnRlciBBY2VFZGl0b3Igd2FzIGluc3RhbGxlZCBnbyB0byAmcXVvdDtNeSBQcmVmZXJlbmNlcyAmcmFxdW87IFVzZXIgUHJlZmVyZW5jZXMmcXVvdDsgYW5kIGNob29zZSBBY2VFZGl0b3IgYXMgeW91ciBTeW50YXhoaWdobGlnaHRlciBvZiBjaG9pY2UgZnJvbSAmcXVvdDtTZWxlY3Qgc3ludGF4IGhpZ2hsaWdodGVyIHRvIHVzZTomcXVvdDsgRHJvcGRvd24uPGJyIC8+DQpNYWtlIHN1cmUgeW91IGhhdmUgJiMwMzk7TW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMmIzAzOTsgUGVybXNpc3Npb24uPC9wPg0KPGgzPlNldHRpbmdzPC9oMz4NCjxwPllvdSBjYW4gY2hhbmdlIGRlZmF1bHQgU2V0dGluZ3MgYW5kIFRoZW1lcyBpbiAmcXVvdDtFeHRlbnNpb25zICZyYXF1bzsgQWNlRWRpdG9yJnF1b3Q7PC9wPic7CiRsYW5nWydoZWxwX2tleWJvYXJkc2hvcnRjdXRzX3RpdGxlJ10gPSAnVG9ldHNlbmJvcmQgU25lbGtvcHBlbGluZ2VuJzsKJGxhbmdbJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfY29udGVudCddID0gJyAgICAgIDxoMz5EZWZhdWx0IEtleWJvYXJkIFNob3J0Y3V0czwvaDM+DQoNCjx0YWJsZSBjbGFzcz0mcXVvdDtwYWdldGFibGUmcXVvdDsgY2VsbHNwYWNpbmc9JnF1b3Q7MCZxdW90OyBzdW1tYXJ5PSZxdW90O0RlZmF1bHQgS2V5Ym9hcmQgU2hvcnRjdXRzJnF1b3Q7Pg0KPHRoZWFkPjx0cj4NCjx0aD5QQyAoV2luZG93cy9MaW51eCk8L3RkPg0KPHRoPk1hYzwvdGQ+DQo8dGg+YWN0aW9uPC90ZD4NCjwvdHI+PC90aGVhZD4NCjx0Ym9keT4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtTDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5jZW50ZXIgc2VsZWN0aW9uPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtQWx0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5jb3B5IGxpbmVzIGRvd248L3RkPg0KPC90cj4NCjx0ciBsY2Fzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1BbHQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Y29weSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUY8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1GPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmZpbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1LPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtRzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5maW5kIG5leHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1LPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtU2hpZnQtRzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5maW5kIHByZXZpb3VzPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkRvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+RG93bixDdHJsLU48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gbGluZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlVwLEN0cmwtUDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyBsaW5lIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtRW5kLEN0cmwtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUVuZCxDb21tYW5kLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+TGVmdCxDdHJsLUI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUw8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1MPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LVJpZ2h0LEVuZDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVJpZ2h0LEVuZCxDdHJsLUU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LUxlZnQsSG9tZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUxlZnQsSG9tZSxDdHJsLUE8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tUGFnZURvd24sQ3RybC1WPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIHBhZ2UgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBwYWdlIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlJpZ2h0LEN0cmwtRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUhvbWUsQ3RybC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUhvbWUsQ29tbWFuZC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+VGFiPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlRhYjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5pbmRlbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+bW92ZSBsaW5lcyBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+bW92ZSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1UYWI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pm91dGRlbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+SW5zZXJ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pkluc2VydDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5vdmVyd3JpdGU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlBhZ2VEb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnBhZ2Vkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cGFnZXVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtWixDdHJsLVk8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1aLENvbW1hbmQtWTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZWRvPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtRDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZW1vdmUgdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1CYWNrc3BhY2U8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHRvIGxpbmVzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LUJhY2tzcGFjZSxDdHJsLUFsdC1CYWNrc3BhY2U8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LURlbGV0ZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZW1vdmUgd29yZCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZXBsYWNlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtUjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LU9wdGlvbi1GPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlcGxhY2UgYWxsPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtQTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUE8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGFsbDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUVuZDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUhvbWU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtSG9tZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgcGFnZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHBhZ2UgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtRW5kLEFsdC1TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtU2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB0byBsaW5lIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5BbHQtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHRvIGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1Ib21lLEFsdC1TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB0byBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB3b3JkIGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtTzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zcGxpdCBsaW5lPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtNzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLTc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+dG9nZ2xlIGNvbW1lbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1UPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtVDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz50cmFuc3Bvc2UgbGV0dGVyczwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVo8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1aPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnVuZG88L3RkPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICcNCjxoMz5WZXJzaW9uIDAuMTwvaDM+DQo8dWw+DQoJPGxpPkl0JiMwMzk7cyBmcmVzaCEgTm90aGluZyBjaGFuZ2VkIHlldCE8L2xpPg0KCTxsaT5Vc2luZyBBY2UgVmVyc2lvbiAwLjIuMDwvbGk+DQo8L3VsPg0KPGgzPlJvYWRtYXA8L2gzPg0KPHVsPg0KCTxsaT5BZGQgRnJvbnRlbmQgU3ludGF4aGlnaGxpZ2h0aW5nPC9saT4NCgk8bGk+QWRkIEZ1bGxzY3JlZW5tb2RlPC9saT4NCgk8bGk+QWRkIEtleWJpbmRpbmcgKENUUkwrUyk8L2xpPg0KCTxsaT5BZGQgRWRpdG9yIGJlaGF2aW9yIChWaW0sIEVNYWNzKTwvbGk+DQo8L3VsPic7CiRsYW5nWydxY2EnXSA9ICdQMC0xMTU3MDY1MzE0LTEzMTM4NTYzMDgyOTcnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My40MDI3NzMxMzguMTMyMzI4MTEwNS4xMzIzMjgxMTA1LjEzMjMyODExMDUuMSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTMyMzI4MTEwNS4xLjEudXRtY2NuPShyZWZlcnJhbCl8dXRtY3NyPWZvcnVtLmNtc21hZGVzaW1wbGUub3JnfHV0bWNjdD0vbWNwLnBocHx1dG1jbWQ9cmVmZXJyYWwnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQoJLy8gQmFja2VuZCBlZGl0b3IgcHJlZnMNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbW9kZScsJ2h0bWwnKTsNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgndGhlbWUnLCd0ZXh0bWF0ZScpOw0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmb250c2l6ZScsJzEycHgnKTsNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnVsbF9saW5lJywxKTsNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2hvd19pbnZpc2libGVzJywwKTsNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnc29mdF93cmFwJywnODAsODAnKTsNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlnaGxpZ2h0X2FjdGl2ZScsMSk7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BlcnNpc3RlbnRfaHNjcm9sbCcsMSk7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2tleV9iaW5kaW5nJywnYWNlJyk7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NvZnRfdGFiJywxKTsNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncHJpbnRfbWFyZ2luJywwKTsJDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2hpZ2hsaWdodF9zZWxlY3RlZCcsMSk7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2VuYWJsZV9iZWhhdmlvcnMnLDEpOw0KDQoJLy8gRnJvbnRlbmQgc3ludGF4YXJlYSBwcmVmcw0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9tb2RlJywnaHRtbCcpOw0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9zeW50YXhhcmVhX21vZGUnLCdodG1sJyk7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3N5bnRheGFyZWFfdGhlbWUnLCd0ZXh0bWF0ZScpOwkJDQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3RoZW1lJywndGV4dG1hdGUnKTsNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfZm9udHNpemUnLCcxMnB4Jyk7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3dpZHRoJywnNTAwJyk7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2hlaWdodCcsJzQwMCcpOwkNCgkJDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAgJHRoaXMgLT4gUmVtb3ZlUHJlZmVyZW5jZSgpOw0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8vIG5vdGhpbmcgdG8gZG8NCj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/ace.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHRleHRhcmVhIGlkPSJ7JHRleHRhcmVhaWR9IiBuYW1lPSJ7JHRleHRhcmVhbmFtZX0iPnskc3ludGF4X2NvbnRlbnR9PC90ZXh0YXJlYT4NCgk8c3R5bGU+DQoJI3skZWRpdG9yaWR9IHtsZGVsaW19DQoJCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgkgICAgd2lkdGg6IHskd2lkdGh9ZW07DQoJICAgIGhlaWdodDogeyRoZWlnaHR9ZW07DQoJICAgIGJvcmRlcjogNXB4IHNvbGlkICNkZGQ7DQoJICAgIGJhY2tncm91bmQ6ICNmZWZlZmU7IA0KCXtyZGVsaW19DQoJI3skZWRpdG9yaWR9LmZ1bGxzY3JlZW4ge2xkZWxpbX0NCgkJcG9zaXRpb246IGFic29sdXRlOw0KCQl6LWluZGV4OiA5OTk5Ow0KCQltYXJnaW46MDsNCgkJbGVmdDowOw0KCQl0b3A6MDsNCgkJe3JkZWxpbX0NCgk8L3N0eWxlPgkNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe2xkZWxpbX0NCglpZiAoIXdpbmRvdy5hY2UpcmV0dXJuOw0KCWlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC8oaVBvZHxpUGhvbmV8aVBhZCkvKSkgcmV0dXJuOw0KCWlmICgkLmJyb3dzZXIubXNpZSkgcmV0dXJuOwkNCgkJDQoJCSQoJyN7JHRleHRhcmVhaWR9JykuYmVmb3JlKCc8ZGl2IGlkPSJ7JGVkaXRvcmlkfSI+PC9kaXY+Jyk7DQoJCS8vIGluaXQgZWRpdG9yDQoJCXZhciBlZGl0b3IgPSBhY2UuZWRpdCgieyRlZGl0b3JpZH0iKTsNCgkJdmFyIHRleHRhcmVhID0gJCgnI3skdGV4dGFyZWFpZH0nKS5oaWRlKCk7DQoNCgkJLy8gcmVzaXplIGFjZSB3aXRoIGp1aQ0KCQkkKCcjeyRlZGl0b3JpZH0nKS5yZXNpemFibGUoe2xkZWxpbX0NCgkJCXN0b3A6IGZ1bmN0aW9uKGV2ZW50LCB1aSl7bGRlbGltfQ0KCQkJCWVkaXRvci5yZW5kZXJlci5vblJlc2l6ZSh0cnVlKTsNCgkJCQllZGl0b3IucmVuZGVyZXIudXBkYXRlRnVsbCgpOw0KCQkJCWVkaXRvci5mb2N1cygpOw0KCQkJe3JkZWxpbX0sCQkJDQoJCQlnaG9zdDogdHJ1ZQ0KCQl7cmRlbGltfSk7DQoNCgkJLy8gc2V0IHRoZW1lDQoJCWVkaXRvci5zZXRUaGVtZSgiYWNlL3RoZW1lL3skdGhlbWV9Iik7DQoJCS8vIHNldCBoaWdobGlnaHRlciBtb2RlDQoJCXtpZiAkbW9kZSAhPSAncGxhaW4nfQ0KCQkNCgkJdmFyIHNldE1vZGUgPSByZXF1aXJlKCJhY2UvbW9kZS97JG1vZGV9IikuTW9kZTsNCgkJZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKG5ldyBzZXRNb2RlKCkpOw0KCQl7L2lmfQ0KCQkvLyBzZXQgZm9udHNpemUNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3skZWRpdG9yaWR9Jykuc3R5bGUuZm9udFNpemU9J3skZm9udHNpemV9JzsNCgkJLy8gZnVsbCBsaW5lIHNlbGVjdGlvbg0KCQllZGl0b3Iuc2V0U2VsZWN0aW9uU3R5bGUoJ3skZnVsbF9saW5lfScpOw0KCQkvLyBoaWdobGlnaHQgYWN0aXZlIGxpbmUNCgkJZWRpdG9yLnNldEhpZ2hsaWdodEFjdGl2ZUxpbmUoeyRoaWdobGlnaHRfYWN0aXZlfSk7DQoJCS8vIGhpZ2hsaWdodCBzZWxlY3RlZCB3b3JkDQoJCWVkaXRvci5zZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQoeyRoaWdobGlnaHRfc2VsZWN0ZWR9KTsNCgkJLy8gc2hvdyBpbnZpc2libGVzDQoJCWVkaXRvci5zZXRTaG93SW52aXNpYmxlcyh7JHNob3dfaW52aXNpYmxlc30pOw0KCQkvLyBwZXJzaXN0ZW50IGhzY3JvbGwNCgkJZWRpdG9yLnJlbmRlcmVyLnNldEhTY3JvbGxCYXJBbHdheXNWaXNpYmxlKHskcGVyc2lzdGVudF9oc2Nyb2xsfSk7DQoJCS8vIHNob3cgZ3V0dGVyDQoJCWVkaXRvci5yZW5kZXJlci5zZXRTaG93R3V0dGVyKHskc2hvd19ndXR0ZXJ9KTsNCgkJe2lmICRzb2Z0X3dyYXAgIT0gJ29mZid9DQoJCS8vICBzb2Z0IHdyYXANCgkJZWRpdG9yLmdldFNlc3Npb24oKS5zZXRVc2VXcmFwTW9kZSh0cnVlKTsNCgkJZWRpdG9yLmdldFNlc3Npb24oKS5zZXRXcmFwTGltaXRSYW5nZSh7JHNvZnRfd3JhcH0pOw0KCQl7L2lmfQ0KCQkvLyBzZXQgc29mdCB0YWINCgkJZWRpdG9yLmdldFNlc3Npb24oKS5zZXRVc2VTb2Z0VGFicyh7JHNvZnRfdGFifSk7DQoJCS8vIHNldCBwcmludCBtYXJnaW4NCgkJZWRpdG9yLnNldFNob3dQcmludE1hcmdpbih7JHByaW50X21hcmdpbn0pOw0KCQkNCgkgICAgICAgIC8vIGJpbmQgY3RybCtlbnRlciB0byBmdWxsIHNjcmVlbiBtb2RlLg0KICAgICAgICAgICAgICAgIHtsaXRlcmFsfQ0KCQllZGl0b3IuY29tbWFuZHMuYWRkQ29tbWFuZCh7DQogICAgICAgICAgICAgICAgICBuYW1lOiAnZnVsbFNjcmVlbkVkaXRpbmcnLA0KICAgICAgICAgICAgICAgICAgYmluZEtleTogew0KICAgICAgICAgICAgICAgICAgICB3aW46ICdDdHJsLVJldHVybicsDQogICAgICAgICAgICAgICAgICAgIG1hYzogJ0NvbW1hbmQtUmV0dXJuJywNCiAgICAgICAgICAgICAgICAgICAgc2VuZGVyOiAnZWRpdG9yJw0KICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVudixhcmdzLHJlcXVlc3QpIHsNCgkgICAgICAgICAgICB2YXIgZWRpdG9yRGl2ID0gJCgnI3svbGl0ZXJhbH17JGVkaXRvcmlkfXtsaXRlcmFsfScpOw0KICAgICAgICAgICAgICAgICAgICBpZiggZWRpdG9yRGl2Lmhhc0NsYXNzKCdmdWxsc2NyZWVuJykgKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgIC8vIHNodXQgZG93biBmdWxsIHNjcmVlbg0KCSAgICAgICAgICAgICAgIGVkaXRvckRpdi5yZW1vdmVDbGFzcygnZnVsbHNjcmVlbicpOw0KICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gZWRpdG9yRGl2LmRhdGEoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yRGl2LndpZHRoKHRtcC5vcmlnV2lkdGgpOw0KCQkgICAgICAgZWRpdG9yRGl2LmhlaWdodCh0bXAub3JpZ0hlaWdodCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgIC8vIHR1cm4gb24gZnVsbCBzY3JlZW4NCgkJICAgICAgIGVkaXRvckRpdi5hZGRDbGFzcygnZnVsbHNjcmVlbicpOw0KICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3JEaXYuZGF0YSgnb3JpZ1dpZHRoJyxlZGl0b3JEaXYud2lkdGgoKSk7DQogICAgICAgICAgICAgICAgICAgICAgIGVkaXRvckRpdi5kYXRhKCdvcmlnSGVpZ2h0JyxlZGl0b3JEaXYuaGVpZ2h0KCkpOw0KCQkgICAgICAgCQkgICBlZGl0b3JEaXYud2lkdGgoJCh3aW5kb3cpLndpZHRoKCkqMC45OTUpOw0KICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3JEaXYuaGVpZ2h0KCQod2luZG93KS5oZWlnaHQoKSowLjk4KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KCQkgICAgZWRpdG9yLnJlbmRlcmVyLm9uUmVzaXplKHRydWUpOw0KCSAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci51cGRhdGVGdWxsKCk7DQoJICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgICAgIC8vZWRpdG9yLnJlZnJlc2goKTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCgkJZWRpdG9yLmNvbW1hbmRzLmFkZENvbW1hbmQoew0KICAgICAgICAgICAgICAgICAgbmFtZTogJ215c2F2ZScsDQogICAgICAgICAgICAgICAgICBiaW5kS2V5OiB7DQogICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsDQogICAgICAgICAgICAgICAgICAgIG1hYzogJ0NvbW1hbmQtUycsDQogICAgICAgICAgICAgICAgICAgIHNlbmRlcjogJ2VkaXRvcicNCiAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICBleGVjOiBmdW5jdGlvbihlbnYsYXJncyxyZXF1ZXN0KSB7DQoJCSAgICAvLyB1cGRhdGUgdGhlIHRleHQgYXJlYSBmaWVsZC4NCiAgICAgICAgIAkgICAgdmFyIHRleHQgPSBlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFZhbHVlKCk7DQoJCSAgICB0ZXh0YXJlYS52YWwodGV4dCk7DQogICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIHBhcmVudCBmb3JtLiBhbmQgYSBjaGlsZCBidXR0b24gbmFtZWQgJ2FwcGx5JywgYW5kIGNsaWNrIGl0Lg0KICAgICAgICAgICAgICAgICAgICAkKCd7L2xpdGVyYWx9I3skZWRpdG9yaWR9e2xpdGVyYWx9JykuY2xvc2VzdCgnZm9ybScpLmZpbmQoJ1tuYW1lJD0iYXBwbHkiXScpLmZpcnN0KCkuY2xpY2soKTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIHsvbGl0ZXJhbH0NCg0KCQkvLyBnZXQgdGhlIHZhbHVlIGZyb20gdGV4dGFyZWENCgkJdmFyIGludGlhbERhdGEgPSAkKCcjeyR0ZXh0YXJlYWlkfScpLnZhbCgpOw0KCQllZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFZhbHVlKGludGlhbERhdGEpOw0KCQkvLyBVcGRhdGUgdGhlIHRleHRhcmVhIG9uIGNoYW5nZS4NCgkJZWRpdG9yLmdldFNlc3Npb24oKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKXtsZGVsaW19DQoJCQkvLyBHZXQgdGhlIHZhbHVlIGZyb20gdGhlIGVkaXRvciBhbmQgcGxhY2UgaXQgaW50byB0aGUgdGV4dGFyZWEuDQoJCQl2YXIgdGV4dCA9IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKTsNCgkJCXRleHRhcmVhLnZhbCh0ZXh0KTsNCgkJCS8vYWxlcnQodGV4dCk7DQoJCXtyZGVsaW19KTsNCgl7cmRlbGltfSk7DQo8L3NjcmlwdD4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/frontendsettings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0KeyRzdGFydGZvcm19DQo8ZmllbGRzZXQ+DQoJPGxlZ2VuZD4NCgkJeyRzZXR0aW5nc3RleHR9DQoJPC9sZWdlbmQ+DQoJPHA+eyRoZWFkX2Rlc2NyaXB0aW9ufTwvcD4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPg0KCQkJeyRmcm9udGVuZF9zeW50YXhfbW9kZX0NCgkJPC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskZnJvbnRlbmRfc3ludGF4X21vZGVpbnB1dH0NCgkJPC9wPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JHRoZW1ldGV4dH0NCgkJPC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskZnJvbnRlbmRfdGhlbWVpbnB1dH0NCgkJPC9wPg0KCTwvZGl2Pg0KPC9maWVsZHNldD4NCjxmaWVsZHNldD4JDQoJPGxlZ2VuZD4NCgkJeyRzeW50YXhfc2V0dGluZ3N0ZXh0fQ0KCTwvbGVnZW5kPg0KCTxwPnskY29udGVudF9kZXNjcmlwdGlvbn08L3A+CQkJDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4NCgkJCXskd2lkdGhfdGl0bGV9DQoJCTwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQoJCQl7JHdpZHRoX2lucHV0fQ0KCQk8L3A+DQoJPC9kaXY+CQ0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JGhlaWdodF90aXRsZX0NCgkJPC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskaGVpZ2h0X2lucHV0fQ0KCQk8L3A+DQoJPC9kaXY+CQ0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JGZyb250ZW5kX3N5bnRheF9tb2RlfQ0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRmcm9udGVuZF9zeW50YXhhcmVhX21vZGVpbnB1dH0NCgkJPC9wPg0KCTwvZGl2PgkJDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4NCgkJCXskdGhlbWV0ZXh0fQ0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyR0aGVtZWlucHV0fQ0KCQk8L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4NCgkJCXskZm9udHNpemV0ZXh0fQ0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRmb250c2l6ZWlucHV0fQ0KCQk8L3A+DQoJPC9kaXY+CQkJCQkJCQ0KPC9maWVsZHNldD4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPg0KCQkJJm5ic3A7DQoJCTwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQoJCQl7JHN1Ym1pdH0NCgkJPC9wPg0KCTwvZGl2Pg0KeyRlbmRmb3JtfQ0Key9zdHJpcH0NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0KPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij4NCgk8Zm9ybSBhY3Rpb249Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3IiIG1ldGhvZD0icG9zdCI+DQoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9Il9zLXhjbGljayIgLz4NCgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaG9zdGVkX2J1dHRvbl9pZCIgdmFsdWU9IkZMSDJBTjg5VVBQQUciIC8+DQoJCTxpbnB1dCB0eXBlPSJpbWFnZSIgc3JjPSJodHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9lbl9HQi9pL2J0bi9idG5fZG9uYXRlX0xHLmdpZiIgYm9yZGVyPSIwIiBuYW1lPSJzdWJtaXQiIGFsdD0iUGF5UGFsIOKAlCBUaGUgc2FmZXIsIGVhc2llciB3YXkgdG8gcGF5IG9ubGluZS4iIHN0eWxlPSJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7IiAvPg0KCQk8aW1nIGFsdD0iIiBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vZGVfREUvaS9zY3IvcGl4ZWwuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPg0KCTwvZm9ybT4NCjwvZGl2Pg0KPGRpdiBpZD0icGFnZV90YWJzIj4NCgk8ZGl2IGlkPSJnZW5lcmFsIj4NCgkJeyRoZWxwX2dlbmVyYWxfdGl0bGV9DQoJPC9kaXY+DQoJPGRpdiBpZD0ic2hvcnRjdXRzIj4NCgkJeyRoZWxwX2tleWJvYXJkc2hvcnRjdXRzX3RpdGxlfQ0KCTwvZGl2Pg0KCTxkaXYgaWQ9ImZyb250ZW5kIj4NCgkJeyRoZWxwX2Zyb250ZW5kX3RpdGxlfQ0KCTwvZGl2PgkNCgk8ZGl2IGlkPSJhYm91dCI+DQoJCXskaGVscF9hYm91dF90aXRsZX0NCgk8L2Rpdj4JDQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+DQo8ZGl2IGlkPSJwYWdlX2NvbnRlbnQiPg0KCTxkaXYgaWQ9ImdlbmVyYWxfYyI+DQoJCTxpbWcgc3R5bGU9ImZsb2F0OnJpZ2h0O21hcmdpbjowIDEwcHggMTBweCAxMHB4OyBib3JkZXI6IDVweCBzb2xpZCAjZjBmMGYwOyIgc3JjPSJ7JG1vZHVsZV9wYXRofS9pbWFnZXMvZWRpdG9yLmpwZyIgYWx0PSJFZGl0b3IiIHdpZHRoPSIzMTYiIGhlaWdodD0iMjU5IiAvPg0KCQl7JGhlbHBfZ2VuZXJhbF90ZXh0fQ0KCQk8YnIgc3R5bGUgPSJjbGVhcjpib3RoOyIgLz4NCgk8L2Rpdj4NCgk8ZGl2IGlkPSJzaG9ydGN1dHNfYyI+DQoJCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCXskaGVscF9rZXlib2FyZHNob3J0Y3V0c19jb250ZW50fQ0KCQk8L2Rpdj4NCgk8L2Rpdj4NCgk8ZGl2IGlkPSJmcm9udGVuZF9jIj4NCgkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJeyRoZWxwX2Zyb250ZW5kX2NvbnRlbnR9DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxkaXYgaWQ9InRlbXBsYXRlc19jIj4NCgkJeyRoZWxwX3RlbXBsYXRlc190ZXh0fQ0KCTwvZGl2Pg0KCTxkaXYgaWQ9ImFib3V0X2MiPg0KCQl7JGhlbHBfYWJvdXRfdGV4dH0NCgk8L2Rpdj4JCQ0KPC9kaXY+DQp7L3N0cmlwfQ0K]]></data>
	</file>
	<file>
	  <filename>/templates/orig_default.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe2xkZWxpbX0NCgl2YXIgdHh0ID0gJCgnI3skZGl2aWR9JykudGV4dCgpOw0KICAJdmFyIGVkaXRvciA9IGFjZS5lZGl0KCd7JGRpdmlkfScpOw0KICAJCWVkaXRvci5zZXRSZWFkT25seSh0cnVlKTsNCiAgCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneyRkaXZpZH0nKS5zdHlsZS5mb250U2l6ZT0neyRmb250c2l6ZX0nOw0Ke2lmIGlzc2V0KCR0aGVtZSl9DQoJCWVkaXRvci5zZXRUaGVtZSgnYWNlL3RoZW1lL3skdGhlbWV9Jyk7DQp7L2lmfQ0Ke2lmIGlzc2V0KCRtb2RlKX0NCgkJdmFyIHRoZU1vZGUgPSByZXF1aXJlKCdhY2UvbW9kZS97JG1vZGV9JykuTW9kZTsNCiAgCQllZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUobmV3IHRoZU1vZGUpOw0Key9pZn0NCiAgCQllZGl0b3IucmVuZGVyZXIuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTsNCiAgCQllZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFZhbHVlKHR4dCk7DQp7cmRlbGltfSk7DQo8L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJI3skZGl2aWR9IHtsZGVsaW19DQoJCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgkJaGVpZ2h0OiB7JGhlaWdodH1weDsNCgkJd2lkdGg6IHskd2lkdGh9cHg7DQoJCWJhY2tncm91bmQ6ICNmZmY7DQoJCWRpc3BsYXk6IGJsb2NrOw0KCXtyZGVsaW19DQo8L3N0eWxlPg0K]]></data>
	</file>
	<file>
	  <filename>/templates/orig_head.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04IiBzcmM9InskYWNlX3VybH0vYWNlL3NyYy9hY2UuanMiPjwvc2NyaXB0Pg0Ke2ZvcmVhY2ggZnJvbT0kbW9kZXMgaXRlbT0nbW9kZSd9DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiIHNyYz0ieyRhY2VfdXJsfS9hY2Uvc3JjL21vZGUteyRtb2RlfS5qcyI+PC9zY3JpcHQ+DQp7L2ZvcmVhY2h9DQp7aWYgaXNzZXQoJHRoZW1lcyl9DQp7Zm9yZWFjaCBmcm9tPSR0aGVtZXMgaXRlbT0ndGhlbWUnfQ0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04IiBzcmM9InskYWNlX3VybH0vYWNlL3NyYy90aGVtZS17JHRoZW1lfS5qcyI+PC9zY3JpcHQ+DQp7L2ZvcmVhY2h9DQp7L2lmfQ0K]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0KeyRzdGFydGZvcm19DQo8ZmllbGRzZXQ+DQoJPGxlZ2VuZD4NCgkJeyRzZXR0aW5nc3RleHR9DQoJPC9sZWdlbmQ+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4NCgkJCXskd2lkdGhfdGl0bGV9DQoJCTwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQoJCQl7JHdpZHRoX2lucHV0fQ0KCQk8L3A+DQoJPC9kaXY+CQ0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JGhlaWdodF90aXRsZX0NCgkJPC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskaGVpZ2h0X2lucHV0fQ0KCQk8L3A+DQoJPC9kaXY+CQkNCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPg0KCQkJeyRzeW50YXhfbW9kZX0NCgkJPC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskc3ludGF4X21vZGVpbnB1dH0NCgkJPC9wPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JHRoZW1ldGV4dH0NCgkJPC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskdGhlbWVpbnB1dH0NCgkJPC9wPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JGZvbnRzaXpldGV4dH0NCgkJPC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskZm9udHNpemVpbnB1dH0NCgkJPC9wPg0KCTwvZGl2PgkNCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPg0KCQkJeyRmdWxsX2xpbmV0ZXh0fQ0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRmdWxsX2xpbmVpbnB1dH0NCgkJPC9wPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JGhpZ2hsaWdodF9hY3RpdmV0ZXh0fQ0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRoaWdobGlnaHRfYWN0aXZlaW5wdXR9DQoJCTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPg0KCQkJeyRzaG93X2ludmlzaWJsZXN0ZXh0fQ0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRzaG93X2ludmlzaWJsZXNpbnB1dH0NCgkJPC9wPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JHBlcnNpc3RlbnRfaHNjcm9sbHRleHR9DQoJCTwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQoJCQl7JHBlcnNpc3RlbnRfaHNjcm9sbGlucHV0fQ0KCQk8L3A+DQoJPC9kaXY+DQoJeyoNCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPg0KCQkJeyRrZXlfYmluZGluZ3RleHR9DQoJCTwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQoJCQl7JGtleV9iaW5kaW5naW5wdXR9DQoJCTwvcD4NCgk8L2Rpdj4NCgkqfQkNCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPg0KCQkJeyRzb2Z0X3dyYXB0ZXh0fQ0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRzb2Z0X3dyYXBpbnB1dH0NCgkJPC9wPg0KCTwvZGl2PgkNCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPg0KCQkJeyRzaG93X2d1dHRlcnRleHR9DQoJCTwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQoJCQl7JHNob3dfZ3V0dGVyaW5wdXR9DQoJCTwvcD4NCgk8L2Rpdj4JDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4NCgkJCXskcHJpbnRfbWFyZ2ludGV4dH0NCgkJPC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskcHJpbnRfbWFyZ2luaW5wdXR9DQoJCTwvcD4NCgk8L2Rpdj4JDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4NCgkJCXskc29mdF90YWJ0ZXh0fQ0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRzb2Z0X3RhYmlucHV0fQ0KCQk8L3A+DQoJPC9kaXY+CQ0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JGhpZ2hsaWdodF9zZWxlY3RlZHRleHR9DQoJCTwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQoJCQl7JGhpZ2hsaWdodF9zZWxlY3RlZGlucHV0fQ0KCQk8L3A+DQoJPC9kaXY+CQ0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+DQoJCQl7JGVuYWJsZV9iZWhhdmlvcnN0ZXh0fQ0KCQk8L3A+DQoJCXsqDQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRlbmFibGVfYmVoYXZpb3JzaW5wdXR9DQoJCTwvcD4NCgkJKn0NCgk8L2Rpdj4JCQkJCQkJDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4NCgkJCSZuYnNwOw0KCQk8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCQkJeyRzdWJtaXR9DQoJCTwvcD4NCgk8L2Rpdj4NCjwvZmllbGRzZXQ+DQo8ZmllbGRzZXQ+DQoJPGxlZ2VuZD57JHRlc3RhcmVhdGV4dH08L2xlZ2VuZD4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCgkJCXskdGVzdGFyZWF9DQoJCTwvcD4NCgk8L2Rpdj4JDQoJDQo8L2ZpZWxkc2V0Pg0KeyRlbmRmb3JtfSANCnsvc3RyaXB9DQo=]]></data>
	</file>
</module>
