How to Pay Off Student Loans

By Mentor Staff | Edited By Mentor Staff

Updated On January 26, 2022

Editorial Note: This content is based solely on the author's opinions and is not provided, approved, endorsed or reviewed by any financial institution or partner.

How do we make money? The products featured on this website are from our partners who compensate us. This may impact which companies we review, the products we evaluate, and where and how a product appears on a page. We receive compensation from a partner when you apply for and receive a product through Mentor. This helps us to support our website, offer free content, tools and calculators, and continue to be one of the leading sources on personal finance.

If you borrowed student loans for school, you may be wondering the best way how to pay off student loans. The good news is there are many options for student loan repayment that can help you pay off student loans faster and save money. From income-driven repayment and student loan refinancing to student loan consolidation and student loan forgiveness, let’s help you master paying off your student loans with confidence.

Top Picks For Student Loan Refinancing

PD9waHAKCWVjaG8gZGF0ZSgnRicpIC4gIiAiIC4gZGF0ZSgiWSIpOwo/Pg==

PGRpdiBjbGFzcz0ibGVuZGVycy10YWJsZS1oZWFkZXItcm93LXdyYXBwZXIiPgoJPGRpdiBjbGFzcz0ibGVuZGVycy10YWJsZS1oZWFkZXItcm93Ij4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItbG9nby1oZWFkZXIgbGVuZGVycy10YWJsZS1oZWFkZXItY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1oZWFkZXIgbGVuZGVycy10YWJsZS1oZWFkZXItY2VsbCI+CgkJCVZhcmlhYmxlIEFQUiA8c3BhbiBjbGFzcz0ibW9yZS1pbmZvLXRvb2x0aXAtdHJpZ2dlciI+PzxzcGFuIGNsYXNzPSJtb3JlLWluZm8tdG9vbHRpcC10ZXh0Ij5BUFIsIG9yIEFubnVhbCBQZXJjZW50YWdlIFJhdGUsIGlzIHRoZSBwcmljZSB5b3UgcGF5IHRvIGJvcnJvdyBtb25leS4gVmFyaWFibGUgQVBSIG1lYW5zIHRoYXQgeW91ciBpbnRlcmVzdCByYXRlIGNhbiBmbHVjdHVhdGUgb3ZlciB0aW1lLCB3aGljaCBjYW4gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgeW91ciBtb250aGx5IHN0dWRlbnQgbG9hbiBwYXltZW50LiBUeXBpY2FsbHksIGEgdmFyaWFibGUtcmF0ZSBsb2FuIGhhcyBhIGxvd2VyIGludHJvZHVjdG9yeSByYXRlIHRoYW4gYSBmaXhlZC1sb2FuIHJhdGUgbG9hbi4gVmFyaWFibGUgQVBSIGluY2x1ZGVzIGEgMC4yNSUgZGlzY291bnQgd2hlbiB5b3UgZW5yb2xsIGluIGF1dG9wYXkuPC9zcGFuPjwvc3Bhbj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByLWhlYWRlciBsZW5kZXJzLXRhYmxlLWhlYWRlci1jZWxsIj4KCQkJRml4ZWQgQVBSIDxzcGFuIGNsYXNzPSJtb3JlLWluZm8tdG9vbHRpcC10cmlnZ2VyIj4/PHNwYW4gY2xhc3M9Im1vcmUtaW5mby10b29sdGlwLXRleHQiPkFQUiwgb3IgQW5udWFsIFBlcmNlbnRhZ2UgUmF0ZSwgaXMgdGhlIHByaWNlIHlvdSBwYXkgdG8gYm9ycm93IG1vbmV5LiBGaXhlZCBBUFIgbWVhbnMgdGhhdCB5b3VyIGludGVyZXN0IHJhdGUgd2lsbCBhbHdheXMgc3RheSB0aGUgc2FtZS4gRXZlbiBpZiBpbnRlcmVzdCByYXRlcyBjaGFuZ2UsIHlvdXIgaW50ZXJlc3QgcmF0ZSBvciBtb250aGx5IHBheW1lbnQgd2lsbCBub3QuIEZpeGVkIEFQUiBpbmNsdWRlcyBhIDAuMjUlIGRpc2NvdW50IHdoZW4geW91IGVucm9sbCBpbiBhdXRvcGF5Ljwvc3Bhbj48L3NwYW4+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLWhlYWRlciBsZW5kZXJzLXRhYmxlLWhlYWRlci1jZWxsIj4KCQkJQVBSCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24taGVhZGVyIGxlbmRlcnMtdGFibGUtaGVhZGVyLWNlbGwiPgoJCTwvZGl2PgoJPC9kaXY+CjwvZGl2Pg==
PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4= PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4= PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4= PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4= PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4= PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4= PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4= PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4= PD9waHAKCSRhcHJfbGltaXRzID0gYXJyYXkoKTsKCgkkYXByX2xpbWl0XzEgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKTsKCSRhcHJfbGltaXRfMiA9IGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApOwoJJGFwcl9saW1pdF8zID0gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICk7CgkkYXByX2xpbWl0XzQgPSBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKTsKCglpZiggJGFwcl9saW1pdF8xICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMTsKCX0KCglpZiggJGFwcl9saW1pdF8yICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMjsKCX0KCglpZiggJGFwcl9saW1pdF8zICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfMzsKCX0KCglpZiggJGFwcl9saW1pdF80ICE9ICctJyApCgl7CgkJJGFwcl9saW1pdHNbXSA9ICRhcHJfbGltaXRfNDsKCX0KPz4KPGRpdiBjbGFzcz0ibGVuZGVyLXJvdy13cmFwcGVyIj4KCTxkaXYgY2xhc3M9ImxlbmRlci1wcmltYXJ5LXJvdyI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWxvZ28td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1sb2dvLWxpbmsiPgoJCQkJPGltZyBzcmM9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9sb2dvJyApWyd1cmwnXTsgPz4iIGFsdD0iPD9waHAgdGhlX3RpdGxlKCk7ID8+IiBjbGFzcz0ibGVuZGVyLWxvZ28iIC8+CgkJCTwvYT4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItdmFyaWFibGUtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItZml4ZWQtYXByIGxlbmRlci1wcmltYXJ5LXJvdy1jZWxsIj4KCQkJPD9waHAKCQkJCWlmKCAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApICE9ICItIiApICYmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgIT0gIi0iICkgKQoJCQkJewoJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvICctJzsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItb3ZlcmFsbC1hcHIgbGVuZGVyLXByaW1hcnktcm93LWNlbGwiPgoJCQk8P3BocCBlY2hvIG1pbigkYXByX2xpbWl0cyk7ID8+JSAtIDw/cGhwIGVjaG8gbWF4KCRhcHJfbGltaXRzKTsgPz4lCgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWFmZmlsaWF0ZS1idXR0b24td3JhcHBlciBsZW5kZXItcHJpbWFyeS1yb3ctY2VsbCI+CgkJCTxhIGRhdGEtZXZlbnQtbGFiZWw9Ijw/cGhwIGVjaG8gJ1NMUiAtICcgLiBnZXRfdGhlX3RpdGxlKCk7ID8+IiBocmVmPSI8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfYWZmaWxpYXRlX2xpbmsnICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImxlbmRlci1hZmZpbGlhdGUtYnV0dG9uIj4KCQkJCUdldCBNeSBSYXRlCgkJCTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLXNlY29uZGFyeS1yb3ciPgoJCTxkaXYgY2xhc3M9ImxlbmRlci1sb2dvLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQkJPHAgY2xhc3M9ImxlbmRlci12aWV3LWRldGFpbHMtdHJpZ2dlciI+CgkJCQk8c3BhbiBjbGFzcz0ibGVuZGVyLXZpZXctZGV0YWlscy1saW5rIGxlbmRlci12aWV3LWRldGFpbHMtbGluay08P3BocCB0aGVfSUQoKTsgPz4iPgoJCQkJCTxzcGFuIGNsYXNzPSJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstYXJyb3ciPjwvc3Bhbj5WaWV3IERldGFpbHMKCQkJCTxzcGFuPgoJCQk8L3A+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLXZhcmlhYmxlLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWZpeGVkLWFwci1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLW92ZXJhbGwtYXByLXNlY29uZGFyeS1yb3ctY2VsbCBsZW5kZXItc2Vjb25kYXJ5LXJvdy1jZWxsIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1zZWNvbmRhcnktcm93LWNlbGwgbGVuZGVyLXNlY29uZGFyeS1yb3ctY2VsbCI+CgkJCTxwIGNsYXNzPSJsZW5kZXItYWZmaWxpYXRlLWJ1dHRvbi1oZWxwZXItdGV4dCI+CgkJCQk8P3BocAoJCQkJCWlmKCBzdHJfZW5kc193aXRoKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX25hbWVfYmVsb3dfYnV0dG9uJyApLCAncycgKSApCgkJCQkJewoJCQkJCQllY2hvICdvbiAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9uYW1lX2JlbG93X2J1dHRvbicgKSAuICdcJyB3ZWJzaXRlJzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJZWNobyAnb24gJyAuIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbmFtZV9iZWxvd19idXR0b24nICkgLiAnXCdzIHdlYnNpdGUnOwoJCQkJCX0KCQkJCT8+CgkJCTwvcD4KCQk8L2Rpdj4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdyBsZW5kZXItY29sbGFwc2libGUtcm93LTw/cGhwIHRoZV9JRCgpOyA/PiI+CgkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2xzIj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMSI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJT3ZlcnZpZXcKCQkJCTwvaDM+CgkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWNvbC1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJVmFyaWFibGUgQVBSOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAKCQkJCQkJCQlpZiggKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl9sb3dlcl9saW1pdCcgKSAhPSAiLSIgKSAmJiAoIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfdmFyaWFibGVfYXByX3VwcGVyX2xpbWl0JyApICE9ICItIiApICkKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl92YXJpYWJsZV9hcHJfbG93ZXJfbGltaXQnICkgLiAnJSAtICcgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX3ZhcmlhYmxlX2Fwcl91cHBlcl9saW1pdCcgKSAuICclJzsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJZWNobyAnLSc7CgkJCQkJCQkJfQoJCQkJCQkJPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUZpeGVkIEFQUjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwCgkJCQkJCQkJaWYoICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfbG93ZXJfbGltaXQnICkgIT0gIi0iICkgJiYgKCBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2ZpeGVkX2Fwcl91cHBlcl9saW1pdCcgKSAhPSAiLSIgKSApCgkJCQkJCQkJewoJCQkJCQkJCQllY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZml4ZWRfYXByX2xvd2VyX2xpbWl0JyApIC4gJyUgLSAnIC4gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9maXhlZF9hcHJfdXBwZXJfbGltaXQnICkgLiAnJSc7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCWVjaG8gJy0nOwoJCQkJCQkJCX0KCQkJCQkJCT8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlNaW5pbXVtIENyZWRpdCBTY29yZToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2NyZWRpdF9zY29yZScgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCU1pbmltdW0gSW5jb21lOgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy12YWx1ZS1jb2wiPgoJCQkJCQkJPD9waHAgZWNobyBnZXRfZmllbGQoICdzbHJfbGVuZGVyX21pbmltdW1faW5jb21lJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJRmVlczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9mZWVzJyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJTWluaW11bSBMb2FuIEFtb3VudDoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9taW5pbXVtX2xvYW5fYW1vdW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1jb2wtMiI+CgkJCQk8aDMgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWhlYWRlciI+CgkJCQkJRGV0YWlscwoJCQkJPC9oMz4KCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctY29sLWNvbnRlbnQiPgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlFbGlnaWJsZSBMb2FuczoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9lbGlnaWJsZV9sb2FucycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUVsaWdpYmxlIERlZ3JlZXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfZWxpZ2libGVfZGVncmVlcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUxvYW4gVGVybXM6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfbG9hbl90ZXJtcycgKTsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktdmFsdWUtcm93Ij4KCQkJCQkJPGRpdiBjbGFzcz0ibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy1rZXktY29sIj4KCQkJCQkJCUJvcnJvd2VyIFJlc2lkZW5jeToKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9ib3Jyb3dlcl9yZXNpZGVuY3knICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LXZhbHVlLXJvdyI+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3cta2V5LWNvbCI+CgkJCQkJCQlIYXJkc2hpcCBEZWZlcm1lbnQ6CgkJCQkJCTwvZGl2PgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LXZhbHVlLWNvbCI+CgkJCQkJCQk8P3BocCBlY2hvIGdldF9maWVsZCggJ3Nscl9sZW5kZXJfaGFyZHNoaXBfZGVmZXJtZW50JyApOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS12YWx1ZS1yb3ciPgoJCQkJCQk8ZGl2IGNsYXNzPSJsZW5kZXItY29sbGFwc2libGUtcm93LWtleS1jb2wiPgoJCQkJCQkJQ28tc2lnbmVyIE9wdGlvbjoKCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctdmFsdWUtY29sIj4KCQkJCQkJCTw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9jb3NpZ25lcl9vcHRpb24nICk7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGlmICggZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApICk6ID8+CgkJCTxkaXYgY2xhc3M9ImxlbmRlci1jb2xsYXBzaWJsZS1yb3ctcmV2aWV3Ij4KCQkJCTxwIGNsYXNzPSJsZW5kZXItcmV2aWV3LWhlYWRpbmciPgoJCQkJCVJldmlldzoKCQkJCTwvcD4KCQkJCTxwPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZ2V0X2ZpZWxkKCAnc2xyX2xlbmRlcl9yZXZpZXdfdXJsJyApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsZW5kZXItcmV2aWV3LWxpbmsiPjw/cGhwIHRoZV90aXRsZSgpOyA/PiBTdHVkZW50IExvYW4gUmVmaW5hbmNpbmcgUmV2aWV3PC9hPgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvZGl2Pgo8L2Rpdj4KPD9waHAKCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJJGxlbmRlcl92aWV3X2RldGFpbHNfbGlua19qc192YXIgPSAnbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rXycgLiBnZXRfdGhlX2lkKCk7CgkkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgPSAnbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd18nIC4gZ2V0X3RoZV9pZCgpOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZW5kZXItdmlldy1kZXRhaWxzLWxpbmstJyAuIGdldF90aGVfaWQoKSAuICciKVswXTsnOwoJZWNobyAkbGVuZGVyX3ZpZXdfZGV0YWlsc19saW5rX2pzX3ZhciAuICcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsnOwoJZWNobyAndGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsnOwoJZWNobyAndmFyICcgLiAkbGVuZGVyX2NvbGxhcHNpYmxlX3Jvd19qc192YXIgLiAnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVuZGVyLWNvbGxhcHNpYmxlLXJvdy0nIC4gZ2V0X3RoZV9pZCgpIC4gJyIpWzBdOyc7CgllY2hvICdpZiAoJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0KSB7JzsKCWVjaG8gJGxlbmRlcl9jb2xsYXBzaWJsZV9yb3dfanNfdmFyIC4gJy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOyc7CgllY2hvICd9IGVsc2Ugeyc7CgllY2hvICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc3R5bGUubWF4SGVpZ2h0ID0gJyAuICRsZW5kZXJfY29sbGFwc2libGVfcm93X2pzX3ZhciAuICcuc2Nyb2xsSGVpZ2h0ICsgInB4IjsnOwoJZWNobyAnfSc7CgllY2hvICd9KTsnOwoJZWNobyAnPC9zY3JpcHQ+JzsKPz4=

PD9waHAKCSRvdXRwdXQgPSAnJzsKCQoJJGFyZ3MgPSBhcnJheSgKICAgICAgICAncG9zdF90eXBlJyA9PiAnc2xyX2xlbmRlcicsCiAgICAgICAgJ3Bvc3RzX3Blcl9wYWdlJyA9PiAtMSwKCQknbWV0YV9xdWVyeScgPT4gYXJyYXkoCgkJCQkJCQkncmVsYXRpb24nID0+ICdBTkQnLAoJCQkJCQkJYXJyYXkoCgkJCQkJCQkJJ2tleScgPT4gJ3Nscl9sZW5kZXJfdmlzaWJsZScsCgkJCQkJCQkJJ3ZhbHVlJyA9PiAnMScsCgkJCQkJCQkJJ2NvbXBhcmUnID0+ICc9JywKCQkJCQkJCSksCgkJCQkJCQlhcnJheSgKCQkJCQkJCQkna2V5JyA9PiAnc2xyX2xlbmRlcl9kaXNjbG9zdXJlX3VybCcsCgkJCQkJCQkJJ2NvbXBhcmUnID0+ICdFWElTVFMnLAoJCQkJCQkJKSwKCQkJCQkJKSwKCQknbWV0YV9rZXknID0+ICdzbHJfbGVuZGVyX3Bvc2l0aW9uJywKCQknb3JkZXJieScgPT4gJ21ldGFfdmFsdWVfbnVtJywKCQknb3JkZXInID0+ICdBU0MnLAogICAgKTsKCgkkbG9vcCA9IG5ldyBXUF9RdWVyeSggJGFyZ3MgKTsKCglpZiAoICRsb29wIC0+IGhhdmVfcG9zdHMoKSApIHsKCQkKCQkkb3V0cHV0ID0gJ0Rpc2Nsb3N1cmVzOiAnOwoJCQoJCXdoaWxlICggJGxvb3AgLT4gaGF2ZV9wb3N0cygpICkgewoJCQkKCQkJJGxvb3AgLT4gdGhlX3Bvc3QoKTsKCQkJCgkJCSRvdXRwdXQgLj0gJzxhIGhyZWY9IicgLiBnZXRfZmllbGQoICdzbHJfbGVuZGVyX2Rpc2Nsb3N1cmVfdXJsJyApIC4gJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9mb2xsb3ciPicgLiBnZXRfdGhlX3RpdGxlKCkgLiAnPC9hPiB8ICc7CgkJCQoJCX0KCQkKCX0KCgl3cF9yZXNldF9wb3N0ZGF0YSgpOwoKCSRvdXRwdXQgPSBzdWJzdHIoICRvdXRwdXQsIDAsIHN0cmxlbiggJG91dHB1dCApIC0gMyApOwoKCWVjaG8gJG91dHB1dDsKPz4=

Here’s how to pay off student loans:

  1. Determine your student loan balance
  2. Evaluate student loan repayment goals
  3. Use the student loan grace period
  4. Enroll in autopay
  5. Make extra student loan payments
  6. Make lump-sum student loan payments
  7. Consider student loan consolidation
  8. Refinance student loans
  9. Explore student loan forgiveness

Determine your student loan balance

The first step on how to pay off student loans is to determine your student loan balance. Specifically, you want to gather the following information:

  • Your total federal student loan balance
  • Your total private student loan balance
  • Which student loans are federal student loans
  • Which student loans are private student loans
  • Who your student loan servicer is for each student loan
  • Your minimum monthly student loan payment
  • The interest rate on each student loan

You can check your student loan balance and learn more information about your student loans through the National Student Loan Data System (NSLDS).

Evaluate student loan repayment goals

When you decide to pay off student loans, you will want to evaluate your student loan repayment goals. For example, when evaluating student loan repayment options, some student loan borrowers will have different preferences based on their current financial situation and financial goals.

Specifically, you should answer these questions about your student loans:

  • How much money do I owe?
  • Which types of student loans do I have?
  • How much can I afford to pay?
  • What are my financial goals?

For example, if you are struggling to pay off student loans and need more time, you might prefer a lower monthly student loan payment. There are many ways how to lower your student loan payment. For example, an income-driven repayment plan such as IBR, PAYE, REPAYE or ICR could be best for your federal student loans. With an income-driven repayment plan, your student loan payment is based on your income and family size. After 20 years or 25 years, you can get student loan forgiveness for your federal student loans.

Alternatively, you may want to pay off student loans faster. This could help you save interest and get out of debt more quickly. In this case, student loan refinancing could be your best option.

Use the student loan grace period

When you graduate school or leave school, most federal student loans come with a six-month grace period. Think of the grace period for student loans as a time period to get organized about student loan repayment without having to pay student loans. However, not all federal student loans have a grace period. For example, here are several types of federal student loans and if your student loan has a grace period.

  • Direct Subsidized Loans: have a six-month grace period
  • Direct Unsubsidized Loans: have a six-month grace period
  • PLUS Loans: no grace period
  • Grad PLUS Loans: six-month deferment
  • Parent PLUS Loans: you can request a six-month deferment
  • Perkins Loans: check with your school regarding any grace period

Importantly, during your grace period, student loan interest accrues on your student loan balance. While student loan payments aren’t required during the grace period, you can choose to pay interest on your federal student loans during the grace period. If you don’t pay interest on your federal student loans, the interest will capitalize. This means the student loan interest will be added to your student loan balance at the end of your grace period.

For private student loans, check with your lender to determine if there is any grace period for student loan repayment once you graduate or leave school.

Enroll in autopay

Enroll in autopay with you student loan servicer (which is the company to whom you send your student loan payments). Autopay, or automatic payments, is the process of connecting your bank account to your student loan account with your student loan servicer. Each month, your student loan servicer will automatically debit your bank account for your student loan payment.

For example, most lenders will give you a 0.25% interest rate discount for enrolling in autopay.

Enrolling in autopay also will help you avoid late payments, which can hurt your credit score. Therefore, making automatic student loan payments every months means you won’t have to worry about remembering when to make payments or hurting your credit score if you make a late payment.

Make extra student loan payments

One strategy to pay off student loans is to make extra student loan payments. If you make any extra student loan payments, which are optional, always make sure to make your minimum student loan payment each month. Otherwise, extra interest and possibly late fees could accrue.

You’re not required to make extra student loan payments beyond one student loan payment each month. For many student loan borrowers, making one student loan payment every month can be challenging. However, if you have any extra money each month, you could make an extra student loan payment to pay off debt faster.

This student loan payoff calculator shows you how much money you can save when you pay off your student loans faster.

For example, let’s assume that you have $50,000 of student loans, an 8% interest rate and a $607 monthly student loan payment. If you pay an extra $100 per month (for a total of $707 per month), you could pay off your student loans 1.99 years earlier and save $4,923.

If you make extra student loan payments, inform your student loan servicer in writing to apply any extra student loan payments to pay off the principal balance on your student loans. Without this instruction, your student loan servicer may hold your extra payment until your next student loan payment due date.

Make lump-sum student loan payments

Another strategy on how to pay off student loans is to make lump-sum student loan payments. Rather than increase your student loan payment each month, you could make a one-time student loan payment to pay off student loans.

If you get a bonus, tax refund, inheritance, gift or any other sum, you could consider using it to pay off your student loans.

This lump sum extra payment calculator shows you how much money and time you can save when you make a lump sum payment or extra payment toward your student loans.

For example, let’s assume that you have $50,000 of student loans, an 8% interest rate and a $607 monthly student loan payment. Now, let’s assume you make a one-time, lump-sum student loan payment of $2,000. If you make a one-time, extra payment of $2,000, you will save $1,994 on your student loans. Plus, you will pay off your student loans six months earlier.

Consider student loan consolidation

Student loan consolidation refers to consolidating your federal student loans and is one strategy how to pay off student loans.

With student loan consolidation, you combine your current federal student loans into a new federal student loan called a Direct Consolidation Loan. The advantage of federal student loan consolidation is the ability to organize your current federal student loans into a single student loan. That means you will have one student loan payment, one interest rate and one student loan servicer. Therefore, student loan consolidation can simplify student loan repayment by helping you to organize your student loans.

The downside of student loan consolidation is that you won’t get a lower interest rate. With student loan consolidation, your new interest rate is equal to a weighted average of the interest rates on your current federal student loans, rounded up to the nearest 1/8%.

Read: Learn the difference between student loan refinancing and student loan consolidation.

Refinance student loans

To pay off student loans, you can refinance student loans to get a lower interest rate, pay off debt faster and save money.

Student loan refinancing is best for student loan borrowers with a high interest rate on their student loan debt, a high monthly student loan payment, and good to excellent credit. With student loan refinancing, you can refinance federal student loans, private student loans or both. When you refinance student loans, you exchange your existing student loans for a new, private student loan with a lower interest rate. The proceeds from your new student loan are used to pay off your current student loan debt.

When you refinance student loans, you can choose a fixed interest rate or variable interest rate. You can also pay off your student loans in five to 20 years.

Compare the latest rates for student loan refinancing.

This student loan refinancing calculator shows you how much you can save when you refinance student loans.

For example, let’s assume that you have $100,000 of student loans at a 7% interest rate and a 10-year repayment term. Let’s assume you refinance student loans at a 3% interest rate and a 10-year repayment term. You would save $195 each month and $23,457 overall.

Here are helpful resources for student loan refinancing:

Explore student loan forgiveness

Student loan forgiveness is another option to pay off student loans that you should consider.

(Here’s how to get student loan forgiveness and cancel student loan debt).

There are several ways to get student loan forgiveness through federal programs. Student loan forgiveness is available for federal student loans, but often is not available for private student loans. Most student loan forgiveness programs have requirements such as working as a public servant or working in a disadvantaged community for a certain period of time. For example, two popular programs for student loan forgiveness are the Public Service Loan Forgiveness program and Teacher Loan Forgiveness.

(Learn more in our student loan forgiveness guide).

You can also get student loan forgiveness through an income-driven repayment plan:

  • Undergraduate student loans: 20 years of monthly student loan payments
  • Graduate student loans: 25 years of monthly student loan payments

Here are some examples of how to get student loan forgiveness:

How to pay off student loans: latest rates for student loan refinancing

If you want to know how to pay off student loans, compare the latest rates for student loan refinancing and find the best lender for you.

Compare the latest rates for student loan refinancing

Compare the latest rates for law school student loan refinancing

Compare the latest rates for medical professional student loan refinancing

Compare the latest rates for medical resident student loan refinancing

Compare the latest rates for pharmacy school student loan refinancing

Compare the latest rates for MBA student loan refinancing

Compare the latest rates for nursing school student loan refinancing

Compare the latest rates for Parent PLUS Loan refinancing

Let's mentor your money

Get the latest personal finance advice delivered directly to your inbox.