# Name: smd_admin_themes v0.22 # Type: Admin side plugin # Admin-side theme manager and editor # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE2OiJzbWRfYWRtaW5fdGhlbWVzIjtzOjY6ImF1dGhvciI7 czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjIyIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czoxMTE5Mjk6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglnbG9iYWwg JHNtZF9hdF9ldmVudCwgJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfYWRtX2V2ZW50LCAkc21k X2F0X3ByaXZzLCAkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X3ByZWZzLCAkcHJlZnMsICRz bWRfYXRfZmVlZHVybCwgJHNtZF9hdF90aGVtZV9yZXBvOw0KDQoJJHNtZF9hdF9ldmVudCA9 ICdzbWRfYXQnOw0KCSRzbWRfYXRfZnVsbGV2ID0gJ3NtZF9hZG1pbl90aGVtZXMnOw0KCSRz bWRfYXRfYWRtX2V2ZW50ID0gJ3NtZF9hZG1hdCc7DQoJJHNtZF9hdF9wcml2cyA9ICcxJzsN Cgkkc21kX2F0X2ZlZWR1cmwgPSAnaHR0cDovL3RleHRnYXJkZW4ub3JnL2FkbWluLXRoZW1l cy1mZWVkJzsNCgkkc21kX2F0X3RoZW1lX3JlcG8gPSAnaHR0cDovL3RleHRnYXJkZW4ub3Jn L2FkbWluaXN0cmF0aW9uLXRoZW1lcyc7DQoNCgkvLyBUaHVtYm5haWwgZGltZW5zaW9ucw0K CSRzbWRfY29yZV90aGVtZXMgPSBhcnJheSgnY2xhc3NpYycsJ3JlbW9yYScpOw0KDQoJYWRk X3ByaXZzKCRzbWRfYXRfZXZlbnQsICRzbWRfYXRfcHJpdnMpOw0KCWFkZF9wcml2cygncGx1 Z2luX3ByZWZzLicuJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfcHJpdnMpOw0KCXJlZ2lzdGVy X3RhYigiZXh0ZW5zaW9ucyIsICRzbWRfYXRfZXZlbnQsIHNtZF9hdF9nVHh0KCd0YWJfbmFt ZScpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0X29wdGlvbnMnLCAncGx1Z2luX3By ZWZzLicuJHNtZF9hdF9mdWxsZXYpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfd2Vs Y29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLicuJHNtZF9hdF9mdWxsZXYpOw0KCXJlZ2lzdGVy X2NhbGxiYWNrKCdzbWRfYXQnLCAkc21kX2F0X2V2ZW50KTsNCglyZWdpc3Rlcl9jYWxsYmFj aygnc21kX2F0X3BlcicsICdhZG1pbl9zaWRlJywgJ3RoZW1lX25hbWUnKTsNCglyZWdpc3Rl cl9jYWxsYmFjaygnc21kX2F0X2xpbmsnLCAncHJlZnNfdWknLCAndGhlbWVfbmFtZScpOw0K CXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfdXBsb2FkX2Zvcm0nLCAkc21kX2F0X2V2ZW50 LidfdWknLCAndXBsb2FkX2Zvcm0nKTsNCg0KCWlmIChpc3NldCgkcHJlZnNbJ3NtZF9hdF9z eXN0ZW0nXSkgJiYgJHByZWZzWydzbWRfYXRfc3lzdGVtJ10gPT0gMikgew0KCQlhZGRfcHJp dnMoJHNtZF9hdF9hZG1fZXZlbnQsICcyLDMsNCw1LDYnKTsNCgkJcmVnaXN0ZXJfdGFiKCJh ZG1pbiIsICRzbWRfYXRfYWRtX2V2ZW50LCBzbWRfYXRfZ1R4dCgnc2tpbm5lcicpKTsNCgkJ cmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hZG1hdCcsICRzbWRfYXRfYWRtX2V2ZW50KTsNCgl9 DQoNCgkvLyBEb3VibGUgYXJyYXk6IDFzdCBpcyBhIGxpc3Qgb2YgY3VycmVudCBwcmVmcyBh bmQgdGhlaXIgZGVmYXVsdHMsDQoJLy8gMm5kIGlzIGEgbGlzdCBvZiBsZWdhY3kgcHJlZnMg dGhhdCBtYXkgbmVlZCByZW1vdmluZyBpbiBmdXR1cmUgKGRlZmF1bHRzIGFsbCBzZXQgZW1w dHkpDQoJJHNtZF9hdF9wcmVmcyA9IGFycmF5KA0KCQlhcnJheSgNCgkJCSdzbWRfYXRfY2Fz ZV9zb3J0JyA9PiAnMScsDQoJCQknc21kX2F0X2NydXNoJyA9PiAnemlwJywNCgkJCSdzbWRf YXRfdHcnID0+ICcyNjAnLA0KCQkJJ3NtZF9hdF90aCcgPT4gJzE1MCcsDQoJCQknc21kX2F0 X2xheW91dCcgPT4gJzEnLA0KCQkJJ3NtZF9hdF9zeXN0ZW0nID0+ICcwJywNCgkJCSdzbWRf YXRfZ2xvYmFsX3NraW4nID0+ICcnLA0KCQkJJ3NtZF9hdF9ncm91cF9saXN0JyA9PiAnJywN CgkJCSdzbWRfYXRfdXNlcl9saXN0JyA9PiAnJywNCgkJKSwNCgkJYXJyYXkoDQoJCQknc21k X2F0X25vdF91c2VkX2FueV9tb3JlJyA9PiAnJywNCgkJKQ0KCSk7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0KCRldmVudCwgJHN0ZXApIHsN CglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRfYXRfY2xv bmUnLA0KCQkJJ3NtZF9hdF9kZWxldGUnLA0KCQkJJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLA0K CQkJJ3NtZF9hdF9lZGl0JywNCgkJCSdzbWRfYXRfZXhwb3J0JywNCgkJCSdzbWRfYXRfaW1w b3J0JywNCgkJCSdzbWRfYXRfbmV3ZmlsZScsDQoJCQknc21kX2F0X3ByZWZzX2luc3RhbGwn LA0KCQkJJ3NtZF9hdF9wcmVmc19yZW1vdmUnLA0KCQkJJ3NtZF9hdF9wcmVmc191cGRhdGUn LA0KCQkJJ3NtZF9hdF9yZW5hbWUnLA0KCQkJJ3NtZF9hdF9zYXZlJywNCgkJCSdzbWRfYXRf c2V0dXAnLA0KCQkJJ3NtZF9hdF9zd2l0Y2gnLA0KCQkJJ3NtZF9hdF91cGxvYWRfaW1hZ2Un LA0KCQkJJ3NtZF9hdF9jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsNCgkJc21kX2F0X2xpc3Qo JycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf YXRfd2VsY29tZSgkZXZlbnQsICRzdGVwKSB7DQoJJG1zZyA9ICcnOw0KCXN3aXRjaCAoJHN0 ZXApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9hdF9wcmVmc19pbnN0YWxsKDAp Ow0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21kX2F0X3ByZWZzX3JlbW92 ZSgwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9saW5rKCkgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50Ow0KCXJldHVy biBocmVmKHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksICc/ZXZlbnQ9Jy4kc21kX2F0X2V2 ZW50KTsNCn0NCg0KLy8gQSBzdHViIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGEgJG1l c3NhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9kaXNwbGF5KCkgew0KCQlzbWRfYXRfbGlzdCgnJyk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2xp c3QoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudCwgJHByZWZzLCAkc21k X2F0X3ByZWZzLCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfZnVsbGV2LCAk c21kX2F0X2ZlZWR1cmwsICRzbWRfYXRfdGhlbWVfcmVwbzsNCg0KCSRhdF9wcmVmcyA9IHNt ZF9hdF9nZXRfcHJlZnMoKTsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc3RlcCcsICdwYWdl JywgJ2NyaXQnLCAnc2VhcmNoX21ldGhvZCcsICdza2luJykpKTsNCgkkbWVzc2FnZSA9ICgk bWVzc2FnZSkgPyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCSRsYXlvdXQgPSAoaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xh eW91dCddIDogMTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAk YXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J10p ICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3RoJ10pID8gJGF0X3By ZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90aCddKSArIDgw Ow0KCSRoZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0k c21kX2F0X2Z1bGxldiN1c2FnZSI7DQoNCgkkcGFnZWJ5ID0gKGdwcygncXR5JykpID8gZ3Bz KCdxdHknKSA6ICgoY3MoJ3NtZF9hdF9wYWdlYnknKSkgPyBjcygnc21kX2F0X3BhZ2VieScp IDogMTUpOw0KCSRtYXhfZmlsZV9zaXplID0gMTUwICogMTAyNDsgLy8gYSBiaXQgYXJiaXRy YXJ5IQ0KDQoJJGN1cnJfc2tpbiA9IChzbWRfYXRfZXhpc3RzKCR0aGVtZS0+bmFtZSkpID8g JHRoZW1lLT5uYW1lIDogJ2NsYXNzaWMnOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9z a2lucygpOw0KCSRjcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCk7DQoJJHVuY3J1 c2hlcnMgPSBzbWRfYXRfY3J1c2hfb3B0aW9ucygnaW1wb3J0Jyk7DQoJJGJhc2VzID0gYXJy YXkoKTsNCg0KCS8vIEdldCBhIGxpc3Qgb2YgYW5jZXN0b3IgdGhlbWVzIChpLmUuIGRlcGVu ZGVuY2llcykNCglmb3JlYWNoICgkc2tpbl9saXN0IGFzICRza2luYSkgew0KCQkkbWFuaWZl c3QgPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW5hKTsNCgkJaWYgKCRtYW5pZmVzdCkgew0K CQkJaWYgKCRtYW5pZmVzdFsnYmFzZWRfb24nXSkgew0KCQkJCSRiYXNlc1tdID0gJG1hbmlm ZXN0WydiYXNlZF9vbiddOw0KCQkJfQ0KCQl9DQoJfQ0KCSRiYXNlcyA9IGFycmF5X3VuaXF1 ZSgkYmFzZXMpOw0KDQoJcGFnZXRvcChzbWRfYXRfZ1R4dCgnbWFuYWdlX2xibCcpLCRtZXNz YWdlKTsNCg0KCS8vIEhhbmRsZSBwYWdpbmcNCgkkdG90YWwgPSBjb3VudCgkc2tpbl9saXN0 KTsNCgkkbGltaXQgPSBtYXgoQCRwYWdlYnksIDE1KTsNCglsaXN0KCRwYWdlLCAkb2Zmc2V0 LCAkbnVtUGFnZXMpID0gcGFnZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsNCgkkc2tpbl9s aXN0ID0gYXJyYXlfc2xpY2UoJHNraW5fbGlzdCwgJG9mZnNldCwgJGxpbWl0KTsNCg0KCSRx cyA9IGFycmF5KA0KCQkiZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJwYWdlIiA9PiAk cGFnZSwNCgkpOw0KDQoJZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj cmlwdCI+DQpmdW5jdGlvbiBzbWRfZ2V0Y3J1c2goc2tpbikgew0KCXNraW5IYW5kbGUgPSAi Y3J1c2hfIitza2luOw0KCWpRdWVyeSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7 DQoJCWJveCA9IGpRdWVyeSh0aGlzKTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5I YW5kbGUpIHsNCgkJCWlmIChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCQkJ Ym94LnNsaWRlRG93bignZmFzdCcpOw0KCQkJfSBlbHNlIHsNCgkJCQlib3guc2xpZGVVcCgn ZmFzdCcpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJ fQ0KCX0pOw0KCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGEnKS5jbGljayhmdW5jdGlvbigp IHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIoImhyZWYiLCAiP2V2ZW50PXskc21kX2F0X2V2ZW50 fSZza2luPSIrc2tpbisiJnN0ZXA9c21kX2F0X2V4cG9ydCZjcnVzaD0iK2pRdWVyeSgnIycr c2tpbkhhbmRsZSsnIGlucHV0W3R5cGU9XCdyYWRpb1wnXTpjaGVja2VkJykudmFsKCkrIiZw YWdlPSIreyRwYWdlfSk7DQoJfSk7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBz bWRfZ2V0dmFsKHNraW4sIHN0ZXApIHsNCglza2luSGFuZGxlID0gInBvcF8iK3NraW47DQoJ alF1ZXJ5KCcuc21kX3BvcHVwJykuZWFjaChmdW5jdGlvbigpIHsNCgkJYm94ID0galF1ZXJ5 KHRoaXMpOw0KCQlpZiAoYm94LmF0dHIoImlkIikgPT0gc2tpbkhhbmRsZSkgew0KCQkJaWYg KGJveC5jc3MoImRpc3BsYXkiKSA9PSAibm9uZSIpIHsNCgkJCQlib3guc2xpZGVEb3duKCdm YXN0Jyk7DQoJCQkJalF1ZXJ5KCcjJytza2luSGFuZGxlKycgaW5wdXQnKS5mb2N1cygpOw0K CQkJfSBlbHNlIHsNCgkJCQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQkJfQ0KCQl9IGVsc2Ug ew0KCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgnIycrc2tp bkhhbmRsZSsnIGEnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIo ImhyZWYiLCAiP2V2ZW50PXskc21kX2F0X2V2ZW50fSZza2luPSIrKChza2luPT0nbmV3Jyk/ ICcnIDogc2tpbikrIiZzdGVwPSIrc3RlcCsiJm5ld19za2luPSIralF1ZXJ5KCcjJytza2lu SGFuZGxlKycgaW5wdXQnKS52YWwoKSsiJnBhZ2U9Iit7JHBhZ2V9KTsNCgl9KTsNCg0KCWpR dWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0Jykua2V5dXAoZnVuY3Rpb24gKCkgew0KCQl0 aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9ceDdmLVx4ZmZd L2csJycpOw0KCQl3aGlsZSAodGhpcy52YWx1ZS5sZW5ndGggPiAwICYmIHRoaXMudmFsdWUu c3Vic3RyaW5nKDAsMSkubWF0Y2goL1swLTldLykpIHsNCgkJCXRoaXMudmFsdWUgPSB0aGlz LnZhbHVlLnN1YnN0cmluZygxKTsNCgkJfQ0KCX0pOw0KDQoJcmV0dXJuIGZhbHNlOw0KfQ0K PC9zY3JpcHQ+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLnNtZF9oaWRkZW4gew0KCWRp c3BsYXk6bm9uZTsNCgltYXJnaW46NXB4Ow0KfQ0KI3NtZF9jb250cm9sIHsNCgltYXJnaW46 MCBhdXRvOw0KfQ0KI3NtZF9jb250cm9sIHRkIC5wdWJsaXNoIHsNCgltYXJnaW4tbGVmdDo1 MHB4Ow0KfQ0KI3NtZF9jb250cm9sIC51cGxvYWQtZm9ybSB7DQoJcGFkZGluZzowOw0KfQ0K LnNtZF9ncmlkIHsNCgl3aWR0aDo5NjBweDsNCgltYXJnaW46MCBhdXRvOw0KfQ0KLnNtZF9j ZWxsIHsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRpbmc6MTBweDsNCgltYXJnaW46MTBweDsNCgli b3JkZXI6MXB4IHJpZGdlICNjY2M7DQoJd2lkdGg6eyR0d31weDsNCgloZWlnaHQ6eyR0aH1w eDsNCn0NCi5zbWRfY2VsbDpob3ZlciB7DQoJYmFja2dyb3VuZDojZGRkOw0KfQ0KLnNtZF9j bGVhciB7DQoJY2xlYXI6Ym90aDsNCn0NCi5zbWRfYXV0aCwNCi5zbWRfYWN0aW9ucyB7DQoJ dGV4dC1hbGlnbjpjZW50ZXI7DQoJbWFyZ2luOjVweCAwOw0KfQ0KLnNtZF9zbWFsbHByaW50 IHsNCglmb250LXNpemU6NzUlOw0KCXRleHQtYWxpZ246Y2VudGVyOw0KCW1hcmdpbi10b3A6 LTEycHg7DQp9DQo8L3N0eWxlPg0KRU9KUzsNCg0KCS8vIExpc3QgdGhlIGF2YWlsYWJsZSBz a2lucw0KCWVjaG8gc3RhcnRUYWJsZSgnc21kX2NvbnRyb2wnLCcnLCcnLDUpOw0KCWVjaG8g dHIoDQoJCXRkYSh1cGxvYWRfZm9ybShzbWRfYXRfZ1R4dCgnaW5zdGFsbF9za2luJyksICcn LCAnc21kX2F0X2ltcG9ydCcsICRzbWRfYXRfZXZlbnQsICcnLCAkbWF4X2ZpbGVfc2l6ZSku YnIuJzxkaXYgY2xhc3M9InNtZF9zbWFsbHByaW50Ij4nLnNtZF9hdF9nVHh0KCdzdXBwb3J0 ZWRfaW1wb3J0JywgYXJyYXkoJ3t0eXBlc30nID0+IGpvaW4oJywgJywgJHVuY3J1c2hlcnMp KSkuJzwvZGl2PicsICcgY29sc3Bhbj0iMiInKQ0KCQkudGRhKGZvcm0oZklucHV0KCdzdWJt aXQnLCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldHVwJyksICdwdWJsaXNoJykuc0lucHV0 KCdzbWRfYXRfc2V0dXAnKS5lSW5wdXQoJHNtZF9hdF9ldmVudCkpLCcgY29sc3Bhbj0iNiIg c3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4IicpDQoJKTsNCgllY2hvIGVuZFRhYmxlKCk7 DQoJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1lPSJsb25nZm9ybSIgYWN0aW9uPSIn LmpvaW5fcXMoJHFzKS4nIj4nOw0KCSRuZXdidG4gPSAnICcuJzxhIGNsYXNzPSJuYXZsaW5r IiBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2Nsb25lJy5h Lidza2luPSIgb25jbGljaz0icmV0dXJuIHNtZF9nZXR2YWwoXCduZXdcJywgXCdzbWRfYXRf Y2xvbmVcJyk7Ij4nLnNtZF9hdF9nVHh0KCduZXcnKS4nPC9hPicNCgkJLiAnPGRpdiBpZD0i cG9wX25ldyIgY2xhc3M9InNtZF9wb3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9n VHh0KCduZXdfc2tpbicpLic8L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNtZF90 ZXh0X25hbWUiIHZhbHVlPSIiIC8+IDxhIGhyZWY9IiMiPlsnLnNtZF9hdF9nVHh0KCdjb25m aXJtJykuJ108L2E+PC9kaXY+JzsNCgkkcmVwb2J0biA9ICcgJy4nPGEgY2xhc3M9Im5hdmxp bmsiIGhyZWY9IicuJHNtZF9hdF90aGVtZV9yZXBvLiciPicuc21kX2F0X2dUeHQoJ2ZpbmRf dGhlbWUnKS4nPC9hPic7DQoJJGhkcm93ID0gaGVkKHNtZF9hdF9nVHh0KCdsaXN0X3RpdGxl JykuICcgJy4gc21kX2F0X2dUeHQoJ2hlbHBfbGluaycsIGFycmF5KCd7bGlua30nID0+ICRo ZWxwTGluaykpLCAzKTsNCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gc3RhcnRUYWJs ZSgnbGlzdCcsJycsJycsNSk7DQoJCWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93LiRyZXBvYnRu LiRuZXdidG4sICcgY29sc3Bhbj0iNyInKQ0KCQkpOw0KCQllY2hvIHRyKA0KCQkJYXNzSGVh ZCgNCgkJCQlzbWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwNCgkJCQknYXV0aG9yJywNCgkJCQln VHh0KCd2ZXJzaW9uJyksDQoJCQkJJ2Rlc2NyaXB0aW9uJywNCgkJCQlzbWRfYXRfZ1R4dCgn YWN0aW9ucycpDQoJCQkJKQ0KCQkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYgY2xhc3M9 InNtZF9ncmlkIj48ZGl2IGNsYXNzPSJzbWRfbmV3cm93Ij4nLiRoZHJvdy4kcmVwb2J0bi4k bmV3YnRuLic8L2Rpdj4nOw0KCX0NCglpZiggaXNfY2FsbGFibGUoJ2Zzb2Nrb3BlbicpICkN CgkJJHRyYW5zcG9ydCA9ICdmc29jayc7DQoJZWxzZWlmKCBpc19jYWxsYWJsZSgnY3VybF9p bml0JykgKSB7DQoJCSR0cmFuc3BvcnQgPSAnY3VybCc7DQoJfSBlbHNlIHsNCgkJJHRyYW5z cG9ydCA9ICcnOw0KCX0NCg0KCSRmZWVkID0gJyc7DQoJc3dpdGNoICgkdHJhbnNwb3J0KSB7 DQoJCWNhc2UgJ2N1cmwnOg0KCQkJJGMgPSBjdXJsX2luaXQoKTsNCgkJCWN1cmxfc2V0b3B0 KCRjLCBDVVJMT1BUX1VSTCwgJHNtZF9hdF9mZWVkdXJsKTsNCgkJCWN1cmxfc2V0b3B0KCRj LCBDVVJMT1BUX1JFRkVSRVIsIGh1KTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1JF VFVSTlRSQU5TRkVSLCB0cnVlKTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1ZFUkJP U0UsIGZhbHNlKTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1RJTUVPVVQsIDEwKTsN CgkJCSRmZWVkID0gY3VybF9leGVjKCRjKTsNCgkJCWJyZWFrOw0KCQljYXNlICdmc29jayc6 DQoJCQkkdXJsID0gcGFyc2VfdXJsKCRzbWRfYXRfZmVlZHVybCk7DQoJCQkkZnAgPSBmc29j a29wZW4gKCR1cmxbJ2hvc3QnXSwgODAsICRlcnJubywgJGVycnN0ciwgMTApOw0KCQkJJHFy eSA9ICdHRVQgJy4kc21kX2F0X2ZlZWR1cmw7DQoJCQkkcXJ5IC49ICIgSFRUUC8xLjBcclxu XHJcbiI7DQoNCgkJCWZwdXRzKCRmcCwgJHFyeSk7DQoJCQlzdHJlYW1fc2V0X3RpbWVvdXQo JGZwLCAxMCk7DQoJCQkkaW5mbyA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCRmcCk7DQoNCgkJ CSRoZHJzID0gdHJ1ZTsNCgkJCXdoaWxlICgoIWZlb2YoJGZwKSkgJiYgKCEkaW5mb1sndGlt ZWRfb3V0J10pKSB7DQoJCQkJJGxpbmUgPSBmZ2V0cygkZnAsIDgxOTIpOw0KCQkJCSRsaW5l ID0gcHJlZ19yZXBsYWNlKCJbXHJcbl0iLCAiIiwgJGxpbmUpOw0KCQkJCWlmICgkaGRycyA9 PSBmYWxzZSkgew0KCQkJCQkkZmVlZCAuPSAkbGluZS4iXG4iOw0KCQkJCX0NCgkJCQlpZiAo c3RybGVuKCRsaW5lKSA9PSAwKSAkaGRycyA9IGZhbHNlOw0KCQkJfQ0KCQkJaWYgKCRpbmZv Wyd0aW1lZF9vdXQnXSkgew0KCQkJCSRmZWVkID0gJyc7DQoJCQl9DQoJCQlmY2xvc2UoJGZw KTsNCgkJCWJyZWFrOw0KCQlkZWZhdWx0Og0KCQkJJGZlZWQgPSAnJzsNCgl9DQoNCgkkc21k X2F0X3ZsYXN0ID0gJyc7DQoJJGZlZWRzID0gYXJyYXkoKTsNCglpZiAoaXNzZXQoJHByZWZz WydzbWRfYXRfdmVyc2lvbnMnXSkgJiYgaXNzZXQoJHByZWZzWydzbWRfYXRfdmxhc3QnXSkp IHsNCgkJaWYgKHRpbWUoKSAtICRwcmVmc1snc21kX2F0X3ZsYXN0J10gPCA4NjQwMCkgew0K CQkJLy8gTGFzdCB1cGRhdGVkIHdpdGhpbiB0aGUgbGFzdCBkYXksIHNvIHJlYWQgdGhlIGNh Y2hlZCB2ZXJzaW9uIG51bWJlcnMNCgkJCSRmZWVkcyA9IHVuc2VyaWFsaXplKCRwcmVmc1sn c21kX2F0X3ZlcnNpb25zJ10pOw0KCQl9DQoJfQ0KCWlmICghJGZlZWRzIHx8IGdwcygncmVh ZF92ZXJzaW9ucycpKSB7DQoJCSRmZWVkcyA9IHNtZF9hdF9mZWVkKCRmZWVkKTsNCgkJJGlu c3RhbGxlZF9mZWVkID0gYXJyYXkoKTsNCgkJJGZlZWRzID0gKGlzX2FycmF5KCRmZWVkcykp ID8gJGZlZWRzIDogYXJyYXkoKTsNCg0KCQkvLyBPbmx5IHJlY29yZCB0aGUgdmVyc2lvbiBp bmZvIGZyb20gdGhlbWVzIHRoYXQgYXJlIGluc3RhbGxlZA0KCQlmb3JlYWNoKCRza2luX2xp c3QgYXMgJHNraW5fbmFtZSkgew0KCQkJJGZlZWRfc2tpbl9uYW1lID0gc3RyX3JlcGxhY2Uo J18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIHRoZSB1cmxfdGl0bGUNCgkJ CWlmIChhcnJheV9rZXlfZXhpc3RzKCRmZWVkX3NraW5fbmFtZSwgJGZlZWRzKSkgew0KCQkJ CSRpbnN0YWxsZWRfZmVlZFskZmVlZF9za2luX25hbWVdID0gJGZlZWRzWyRmZWVkX3NraW5f bmFtZV07DQoJCQl9DQoJCX0NCgkJc2V0X3ByZWYoJ3NtZF9hdF92bGFzdCcsIHRpbWUoKSwg JHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCXNldF9wcmVm KCdzbWRfYXRfdmVyc2lvbnMnLCBzZXJpYWxpemUoJGluc3RhbGxlZF9mZWVkKSwgJHNtZF9h dF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJfQ0KDQoJZm9yZWFjaCAo JHNraW5fbGlzdCBhcyAkc2tpbl9uYW1lKSB7DQoJCS8vIFJlYWQgZWFjaCBtYW5pZmVzdCBh bmQgc2V0IHVwIHRoZSBsYWJlbHMNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygk c2tpbl9uYW1lKTsNCgkJJGZlZWRfc2tpbl9uYW1lID0gc3RyX3JlcGxhY2UoJ18nLCAnLScs ICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIGZvciB1cmxfdGl0bGUgbWF0Y2hpbmcNCg0K CQkkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVtYigkc2tpbmZvLCAxKTsNCgkJJHRoaXNf c2tpbiA9ICgkc2tpbmZvKSA/ICgoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/IHN0cm9u Zygkc2tpbmZvWydkbmFtZSddKSA6ICRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5fbmFtZTsN CgkJJGlzX2dibCA9ICgkc2tpbl9uYW1lID09ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9z a2luJ10pID8gc21kX2F0X2dUeHQoJ2lzX2dsb2JhbCcpIDogJyc7DQoJCSR0aHVtcm93ID0g JzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfc3dpdGNo Jy5hLiduZXh0c3RlcD1zbWRfYXRfbGlzdCcuYS4nc2tpbj0nLiRza2luX25hbWUuYS4ncGFn ZT0nLiRwYWdlLiciIHRpdGxlPSInLnNtZF9hdF9nVHh0KCdhcHBseV9za2luJykuJyI+Jy4k dGhpc19za2luLiRpc19nYmwuKCgkc2tpbmZvICYmICRza2luZm9bJ2Jhc2VkX29uJ10pID8g c21kX2F0X2dUeHQoJ2Jhc2VkX29uJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW5mb1snYmFz ZWRfb24nXSkpIDogJycpLigoJHRodW1ibmFpbCkgPyAnPGRpdj4nLiR0aHVtYm5haWwuJzwv ZGl2PicgOiAnJykuJzwvYT4nOw0KCQkkYXV0aHJvdyA9ICgoJHNraW5mbyAmJiBzdHJwb3Mo JHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0cDovLyIpID09PSAwKSA/ICc8YSBocmVmPSIn LiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4nLiRza2luZm9bJ2F1dGhvciddLic8L2E+JyA6 ICgoJHNraW5mbykgPyAkc2tpbmZvWydhdXRob3InXSA6ICctJykpOw0KCQkkYWN0cm93ID0g JzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcu YS4nc2tpbj0nLiRza2luX25hbWUuJyI+WycuZ1R4dCgnZWRpdCcpLiddPC9hPicNCgkJCS4g JyAnIC4oKCRza2luZm8pID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4n c3RlcD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciIG9uY2xpY2s9InJl dHVybiBzbWRfZ2V0dmFsKFwnJy4kc2tpbl9uYW1lLidcJywgXCdzbWRfYXRfY2xvbmVcJyk7 Ij5bJy5zbWRfYXRfZ1R4dCgnY2xvbmUnKS4nXTwvYT4nIDogJycpDQoJCQkuICcgJyAuKCgk c2tpbmZvKSA/ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21k X2F0X2V4cG9ydCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgb25jbGljaz0icmV0dXJuIHNt ZF9nZXRjcnVzaChcJycuJHNraW5fbmFtZS4nXCcpOyI+Wycuc21kX2F0X2dUeHQoJ2V4cG9y dCcpLiddPC9hPicgOiAnJykNCgkJCS4gJyAnIC4oKGluX2FycmF5KCRza2luX25hbWUsICRz bWRfY29yZV90aGVtZXMpIHx8IGluX2FycmF5KCRza2luX25hbWUsICRiYXNlcykpID8gJycg OiAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9kZWxl dGUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLmEuJ3BhZ2U9Jy4kcGFnZS4nIiBvbmNsaWNrPSJy ZXR1cm4gY29uZmlybShcJycuc21kX2F0X2dUeHQoJ2RlbGV0ZV9jb25maXJtJywgYXJyYXko J3tza2lufScgPT4gJHNraW5fbmFtZSkpLidcJyk7Ij5bJy5nVHh0KCdkZWxldGUnKS4nXTwv YT4nKQ0KCQkJLiAnPGRpdiBpZD0icG9wXycuJHNraW5fbmFtZS4nIiBjbGFzcz0ic21kX3Bv cHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQoJ25ld19jbG9uZXNraW4nKS4n PC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzbWRfdGV4dF9uYW1lIiB2YWx1ZT0i IiAvPiA8YSBocmVmPSIjIj4mbmJzcDtbJy5zdHJvbmcoc21kX2F0X2dUeHQoJ2NvbmZpcm0n KSkuJ108L2E+PC9kaXY+Jw0KCQkJLiAnPGRpdiBpZD0iY3J1c2hfJy4kc2tpbl9uYW1lLici IGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRfZ1R4dCgnY3J1 c2hfZm9ybWF0JykuJzwvc3Bhbj4nLnJhZGlvU2V0KCRjcnVzaGVycywgJHNraW5fbmFtZS4n X2NydXNoJywgJGF0X3ByZWZzWydzbWRfYXRfY3J1c2gnXSkuJzxhIGhyZWY9IiMiPiZuYnNw O1snLnN0cm9uZyhzbWRfYXRfZ1R4dCgnY29uZmlybScpKS4nXTwvYT48L2Rpdj4nOw0KCQkk dmVyb3cgPSAoJHNraW5mbykgPyAoKGlzc2V0KCRmZWVkc1skZmVlZF9za2luX25hbWVdKSAm JiBpc3NldCgkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXVsnc3VtbWFyeSddKSAmJiB2ZXJzaW9u X2NvbXBhcmUoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ3N1bW1hcnknXSwkc2tpbmZvWyd2 ZXJzaW9uJ10pPT09MSkgPyAnPGEgaHJlZj0iJy4kZmVlZHNbJGZlZWRfc2tpbl9uYW1lXVsn bGluayddLiciIHN0eWxlPSJmb250LXdlaWdodDpib2xkO2NvbG9yOiM5OTAwMDA7Ij4nLnNt ZF9hdF9nVHh0KCd2ZXJzaW9uJykuJHNraW5mb1sndmVyc2lvbiddLic8L2E+JyA6IHNtZF9h dF9nVHh0KCd2ZXJzaW9uJykuJHNraW5mb1sndmVyc2lvbiddKSA6ICcnOw0KDQoJCWlmICgk bGF5b3V0PT0wKSB7DQoJCQllY2hvIHRyKA0KCQkJCXRkKCR0aHVtcm93KQ0KCQkJCS50ZCgk YXV0aHJvdywgMTAwKQ0KCQkJCS50ZCgkdmVyb3cpDQoJCQkJLnRkKCgoJHNraW5mbyk/ICRz a2luZm9bJ2Rlc2NyaXB0aW9uJ10gOiAnLScpLigoJHNraW5mbyAmJiAkc2tpbmZvWydoZWxw J10pID8gJyAnLmhyZWYoJ1snLmdUeHQoJ2hlbHAnKS4nXScsICRza2luZm9bJ2hlbHAnXSkg OiAnJyksIDI1MCkNCgkJCQkudGQoJGFjdHJvdywyNjApDQoJCQksICgoJHNraW5fbmFtZSA9 PSAkY3Vycl9za2luKSA/ICcgc3R5bGU9ImJhY2tncm91bmQ6I2U4ZThlODsiJyA6ICcnKQ0K CQkJKTsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsIicuKCgk c2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4 OyInIDogJycpLic+JzsNCgkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJ CWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hdXRoIj4nLiR2ZXJvdy5zbWRfYXRfZ1R4dCgnYnkn KS4kYXV0aHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hY3Rpb25z Ij4nLiRhY3Ryb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8L2Rpdj4nOw0KCQl9DQoJfQ0KDQov LwllY2hvIHRkYShzZWxlY3RfYnV0dG9ucygpIC4gZXZlbnRfbXVsdGllZGl0X2Zvcm0oJHNt ZF9hdF9ldmVudCwgTlVMTCwgJHBhZ2UsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLCAnIGNv bHNwYW49IjUiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgYm9yZGVyOiBub25lOyInKTsN CglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gJzwvdGQ+PC90cj4nOw0KCQllY2hvIGVu ZFRhYmxlKCk7DQoJfSBlbHNlIHsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NsZWFyIj48 L2Rpdj48L2Rpdj4nOw0KCX0NCgllY2hvICc8L2Zvcm0+JzsNCgllY2hvIG4ubmF2X2Zvcm0o JHNtZF9hdF9ldmVudCwgJHBhZ2UsICRudW1QYWdlcywgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCk7DQoJZWNobyBuLnBhZ2VieV9mb3JtKCRzbWRfYXRfZXZlbnQsICRwYWdlYnkpOw0KfQ0K DQpmdW5jdGlvbiBzbWRfYXRfZmVlZCgkZmVlZCkgew0KCWdsb2JhbCAkZmVlZHM7DQoNCgkk ZmVlZD1wcmVnX3JlcGxhY2UoIi8+Ii4iW1s6c3BhY2U6XV0rIi4iPC9pIiwgIj48IiwgJGZl ZWQpOyAvLyBLaWxsIHdoaXRlc3BhY2UgaW4gZmVlZA0KCSR4bWxwYXJzZXIgPSB4bWxfcGFy c2VyX2NyZWF0ZSgpOw0KCXhtbF9zZXRfZWxlbWVudF9oYW5kbGVyKCR4bWxwYXJzZXIsICJz bWRfYXRfZmVlZF9zdGFydF90YWciLCAic21kX2F0X2ZlZWRfZW5kX3RhZyIpOw0KCXhtbF9z ZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0X2ZlZWRfdGFn X2NvbnRlbnRzIik7DQoJeG1sX3BhcnNlKCR4bWxwYXJzZXIsICRmZWVkKTsNCgl4bWxfcGFy c2VyX2ZyZWUoJHhtbHBhcnNlcik7DQoNCglyZXR1cm4gJGZlZWRzOw0KfQ0KDQpmdW5jdGlv biBzbWRfYXRfZmVlZF9zdGFydF90YWcoJHBhcnNlciwgJG5hbWUsICRhdHRyaWJzKSB7DQoJ Z2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWc7DQoJaWYgKCRuYW1lID09 ICJFTlRSWSIpIHsNCgkJJHNtZF9hdF9mZWVkaW4gPSB0cnVlOw0KCX0NCglpZiAoJHNtZF9h dF9mZWVkaW4pIHsNCgkJJHNtZF9hdF9mZWVkdGFnID0gJG5hbWU7DQoJfQ0KfQ0KZnVuY3Rp b24gc21kX2F0X2ZlZWRfZW5kX3RhZygkcGFyc2VyLCAkbmFtZSkgew0KCWdsb2JhbCAkc21k X2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFnLCAkc21kX2F0X2ZlZWRuYW1lOw0KCWlmICgk bmFtZSA9PSAiRU5UUlkiKSB7DQoJCSRzbWRfYXRfZmVlZGluID0gZmFsc2U7DQoJCSRzbWRf YXRfZmVlZG5hbWUgPSAnJzsNCgl9DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3RhZ19j b250ZW50cygkcGFyc2VyLCAkZGF0YSkgew0KCWdsb2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNt ZF9hdF9mZWVkdGFnLCAkc21kX2F0X2ZlZWRuYW1lLCAkZmVlZHM7DQoJaWYgKCRzbWRfYXRf ZmVlZGluKSB7DQoJCWlmICgkc21kX2F0X2ZlZWR0YWcgPT0gIk5BTUUiKSB7DQoJCQkkZmVl ZHNbJGRhdGFdID0gJyc7DQoJCQkkc21kX2F0X2ZlZWRuYW1lID0gJGRhdGE7DQoJCX0NCgkJ aWYgKGlzc2V0KCRmZWVkc1skc21kX2F0X2ZlZWRuYW1lXSkpIHsNCgkJCWlmICgkc21kX2F0 X2ZlZWR0YWcgPT0gIlRJVExFIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIlNVTU1BUlkiIHx8 ICRzbWRfYXRfZmVlZHRhZyA9PSAiVVBEQVRFRCIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJJ RCIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJMSU5LIikgew0KCQkJCSRmZWVkc1skc21kX2F0 X2ZlZWRuYW1lXVtzdHJ0b2xvd2VyKCRzbWRfYXRfZmVlZHRhZyldID0gJGRhdGE7DQoJCQl9 DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmVtb3Zl IGhhcmQgc3BhY2VzIGluIHRoZSB1cGxvYWRfZm9ybSBzbyBPcGVyYSBhbmQgSUUgd3JhcCB0 aGUgYnV0dG9ucw0KZnVuY3Rpb24gc21kX2F0X3VwbG9hZF9mb3JtKCRldmVudCwgJHN0ZXAs ICRkYXRhLCAkYXJncykgew0KCXJldHVybiBzdHJfcmVwbGFjZSgnJiMxNjA7JywgJyAnLCAk ZGF0YSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2F0X2VkaXQoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudDsNCg0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJywgJ2ZpbGUnKSkp KTsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbGF5b3V0ID0gKGlz c2V0KCRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9s YXlvdXQnXSA6IDE7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNzcyIsICJqcyIs ICJwaHAiKTsNCgkkaW1hZ2FibGUgPSBhcnJheSgianBnIiwgImpwZWciLCAiZ2lmIiwgInBu ZyIpOw0KCSRtYXhfZmlsZV9zaXplID0gMiAqIDEwMjQgKiAxMDI0Ow0KDQoJJHNraW5mbyA9 IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7DQoJJGZpbGUgPSAoZW1wdHkoJG5ld19za2lu KSkgPyAkZmlsZSA6ICRuZXdfc2tpbjsNCgkkZmlsZXMgPSBzbWRfYXRfbGlzdGRpcihUSEVN RS4kc2tpbik7DQoJc29ydCgkZmlsZXMpOw0KDQoJLy8gU3BsaXQgdGhlIGxpc3QgaW50byBp dHMgZGlyZWN0b3J5IGdyb3Vwcw0KCSRhbGxmaWxlcyA9IGFycmF5KCk7DQoJZm9yZWFjaCAo JGZpbGVzIGFzICRjdXJyZmlsZSkgew0KCQkkZmlsZV9pbmZvID0gcGF0aGluZm8oJGN1cnJm aWxlKTsNCgkJLy8gSWdub3JlIGFueSByb2d1ZSBTdWJ2ZXJzaW9uIGZpbGVzDQoJCWlmIChz dHJwb3MoJGZpbGVfaW5mb1snZGlybmFtZSddLCAnLy5zdm4nKSA9PT0gZmFsc2UpIHsNCgkJ CSRmaWxlX3R5cGUgPSAoaXNzZXQoJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10pKSA/ICRmaWxl X2luZm9bJ2V4dGVuc2lvbiddIDogJ290aGVyJzsNCgkJCSRhbGxmaWxlc1skZmlsZV90eXBl XVtdID0gJGN1cnJmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKGdwcygnc21kX2F0X2VkaXRzJykp IHsNCgkJJGNvbnRlbnRzID0gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJw0KJyxncHMo J3NtZF9hdF9lZGl0cycpKSk7IC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0KCX0gZWxzZSB7DQoJ CSRjb250ZW50cyA9ICcnOw0KCQlpZiAoJGZpbGUgJiYgZmlsZV9leGlzdHMoVEhFTUUuJHNr aW4uRFMuJGZpbGUpKSB7DQoJCQkkY29udGVudHMgPSBmaWxlKFRIRU1FLiRza2luLkRTLiRm aWxlKTsNCgkJCSRjb250ZW50cyA9IGpvaW4oIiIsICRjb250ZW50cyk7DQoJCX0NCgl9DQoN CgkvLyBCZWdpbiByZW5kZXJpbmcgdGhlIHBhZ2UNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdl ZGl0X2xibCcpLCRtZXNzYWdlKTsNCg0KCWVjaG8gPDw8RU9TDQo8c3R5bGUgdHlwZT0idGV4 dC9jc3MiPg0KI3NtZF9hdF9pbWFnZXMgew0KCW1hcmdpbjowcHggNnB4IC00cHggMDsNCn0N Ci5zbWRfc2tpbl9maWxldHlwZXMgew0KCW1hcmdpbjoxMnB4IDA7DQp9DQo8L3N0eWxlPg0K RU9TOw0KDQoJJHNraW5fbGlzdCA9IHNtZF9hdF9yZWFkX3NraW5zKCk7DQoNCgkvLyBzZWxl Y3RJbnB1dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0 aGlzIGNhc2UNCgkkc2tpbnNlbCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkc2tpbl9saXN0IGFz ICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJHNraW5zZWxbJHZhbHVlMV0gPSAkc2tpbl9saXN0 WyRrZXkxXTsNCiAgIH0NCgkkc2tpbkNoYW5nZSA9ICc8Zm9ybSBuYW1lPSJza2luY2hhbmdl IiBhY3Rpb249ImluZGV4LnBocCI+Jw0KCQkuIGVJbnB1dCgkc21kX2F0X2V2ZW50KQ0KCQku IHNJbnB1dCgnc21kX2F0X2VkaXQnKQ0KCQkuIHNlbGVjdElucHV0KCdza2luJywgJHNraW5z ZWwsICRza2luLCAwLCAxKQ0KCQkuICc8L2Zvcm0+JzsNCg0KCSRmaWxlTGlzdCA9IGhlZChz bWRfYXRfZ1R4dCgnc2tpbl9maWxlcycpLDIpDQoJCS4gJHNraW5DaGFuZ2UNCgkJLiBzdGFy dFRhYmxlKCdsaXN0JywgJ2xlZnQnLCAnc21kX3NraW5fZmlsZXR5cGVzJyk7DQoJJGZpbGVM aXN0IC49ICc8YnIgLz48YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9h dF9ldmVudC5hLidzdGVwPXNtZF9hdF9uZXdmaWxlJy5hLidza2luPScuJHNraW4uJyI+Jy5z bWRfYXRfZ1R4dCgnbmV3X2ZpbGUnKS4nPC9hPic7DQoJJGZpbGVMaXN0IC49ICcgPGEgY2xh c3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRf Z1R4dCgoKCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwv YT48YnIgLz4nOw0KCSRvdGhlcnMgPSBhcnJheSgpOw0KDQoJZm9yZWFjaCAoJGVkaXRhYmxl IGFzICRmaWxldHlwZSkgew0KCQlpZiAoaXNzZXQoJGFsbGZpbGVzWyRmaWxldHlwZV0pKSB7 DQoJCQlmb3JlYWNoICgkYWxsZmlsZXNbJGZpbGV0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmls ZSkgew0KCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJJGZpbGVMaXN0IC49IHRyKHRkKGhl ZChzbWRfYXRfZ1R4dCgkZmlsZXR5cGUpLDMpKSk7DQoJCQkJfQ0KCQkJCSRqdXN0ZmlsZSA9 IGJhc2VuYW1lKCRjdXJyZmlsZSk7DQoJCQkJJGJhc2VmaWxlID0gYXJyYXlfc2hpZnQoZXhw bG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCQkJCSRlZGl0ID0gJzxhIGhyZWY9Ij9ldmVudD0n LiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2luLmEu J2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRqdXN0ZmlsZSkgPyBzdHJvbmco JGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJCSRkZWwgPSAoJGJhc2VmaWxl ID09ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGUn LCAnZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAkc2tpbik7DQoJCQkJJGZpbGVMaXN0 IC49IHRyKHRkKCRlZGl0KS50ZCgkZGVsKSk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkvLyBT b21lIG90aGVyIGZpbGUgdHlwZQ0KCQkJaWYgKCEkb3RoZXJzKSB7DQoJCQkJZm9yZWFjaCAo JGFsbGZpbGVzIGFzICRmdHlwZSA9PiAkZmxzKSB7DQoJCQkJCWlmICghaW5fYXJyYXkoJGZ0 eXBlLCBhcnJheV9tZXJnZSgkZWRpdGFibGUsICRpbWFnYWJsZSkpKSB7DQoJCQkJCQlmb3Jl YWNoICgkYWxsZmlsZXNbJGZ0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmlsZSkgew0KCQkJCQkJ CSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7DQoJCQkJCQkJJGJhc2VmaWxlID0g YXJyYXlfc2hpZnQoZXhwbG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCQkJCQkJCSRlZGl0ID0g JzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcu YS4nc2tpbj0nLiRza2luLmEuJ2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRq dXN0ZmlsZSkgPyBzdHJvbmcoJGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJ CQkJCSRkZWwgPSAoJGJhc2VmaWxlID09ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9l dmVudCwgJ3NtZF9hdF9kZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAk c2tpbik7DQoJCQkJCQkJJG90aGVyc1tdID0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJ CQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCgkkZmlsZUxpc3QgLj0gKCRv dGhlcnMpID8gdHIodGQoaGVkKHNtZF9hdF9nVHh0KCdvdGhlcl9maWxlcycpLDMpKSkuIGpv aW4obiwgJG90aGVycykgOiAnJzsNCgkkZmlsZUxpc3QgLj0gZW5kVGFibGUoKTsNCg0KCS8v IE1ha2UgdGhlIGxpc3Qgb2YgaW1hZ2VzIGZvciB0aGlzIHNraW4NCgkkcXMgPSBhcnJheSgN CgkJImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LA0KCQkic3RlcCIgPT4gJ3NtZF9hdF9kZWxl dGVfaW1hZ2UnLA0KCSk7DQoJJHNlbFtdID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9InNt ZF9hdF9pbWFnZWZvcm0iIG5hbWU9InNtZF9hdF9pbWFnZWZvcm0iIGFjdGlvbj0iJy5qb2lu X3FzKCRxcykuJyI+JzsNCgkkc2VsW10gPSAnPHNlbGVjdCBpZD0ic21kX2F0X2ltYWdlcyIg bmFtZT0ic21kX2F0X2ltYWdlc1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iMjQiIG11bHRpcGxl PSJtdWx0aXBsZSIgc3R5bGU9IndpZHRoOjE1NHB4OyI+JzsNCg0KCWlmIChkZWZpbmVkKCdH TE9CX0JSQUNFJykpIHsNCgkJJGltZyA9IGdsb2IoVEhFTUUuJHNraW4uRFMuJ3sqLmpwZywq LmdpZiwqLnBuZ30nLCBHTE9CX0JSQUNFKTsNCgl9IGVsc2Ugew0KCQkkaW1nID0gYXJyYXlf bWVyZ2UoZ2xvYihUSEVNRS4kc2tpbi5EUy4nKi5qcGcnKSxnbG9iKFRIRU1FLiRza2luLkRT LicqLmdpZicpLGdsb2IoVEhFTUUuJHNraW4uRFMuJyoucG5nJykpOw0KCX0NCg0KCWlmKGlz X2FycmF5KCRpbWcpKSB7DQoJCWZvcmVhY2ggKCRpbWcgYXMgJGltZ2ZpbGUpIHsNCgkJCSRz ZWxbXSA9IHQuJzxvcHRpb24gdmFsdWU9IicuJGltZ2ZpbGUuJyI+Jy5iYXNlbmFtZSgkaW1n ZmlsZSkuJzwvb3B0aW9uPic7DQoJCX0NCgl9DQoJJHNlbFtdID0gJzwvc2VsZWN0Pic7DQoJ JHNlbFtdID0gZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLCAn c2tpbicsICRza2luLCAxKTsNCgkkc2VsW10gPSAnPC9mb3JtPic7DQoJJHNlbCA9IGpvaW4o JycsJHNlbCk7DQoNCgkvLyBJbWFnZSBwb3J0aW9uDQoJJGltZ2JpdCA9IGhlZChzbWRfYXRf Z1R4dCgnc2tpbl9pbWFnZXMnKSwgMikgLiBzdGFydFRhYmxlKCdsaXN0JywgJ2xlZnQnKTsN CgkkaW1nYml0IC49IHRyKHRkKCRzZWwpKTsNCgkkaW1nYml0IC49IHRyKHRkKHVwbG9hZF9m b3JtKHNtZF9hdF9nVHh0KCd1cGxvYWRfaW1hZ2UnKSwgJycsICdzbWRfYXRfdXBsb2FkX2lt YWdlJywgJHNtZF9hdF9ldmVudCwgJHNraW4sICRtYXhfZmlsZV9zaXplLCAnJywgJycpLCAx NTApKTsNCgkkaW1nYml0IC49IGVuZFRhYmxlKCk7DQoNCgkvLyBSZW5kZXIgdGhlIHJlc3Qg b2YgdGhlIHBhZ2UNCgllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKS4NCgl0cigNCgkJdGR0bCgk aW1nYml0KS4NCgkJdGQoDQoJCQloZWQoKCgkc2tpbmZvKSA/ICRza2luZm9bJ2RuYW1lJ10g OiAkc2tpbiksMSkuDQoJCQlmb3JtKA0KCQkJCSc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0i bmV3X3NraW4iIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpLiciIGNsYXNzPSJl ZGl0IiBzaXplPSI0MCIgdGFiaW5kZXg9IjIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7 IiAvPicuYnINCgkJCQkuJzx0ZXh0YXJlYSBpZD0ic21kX2F0X2VkaXRzIiBjbGFzcz0iY29k ZSIgbmFtZT0ic21kX2F0X2VkaXRzIiBjb2xzPSI3NiIgcm93cz0iMzIiPicuaHRtbHNwZWNp YWxjaGFycygkY29udGVudHMpLic8L3RleHRhcmVhPicuYnINCgkJCQkuZklucHV0KCdzdWJt aXQnLCcnLGdUeHQoJ3NhdmUnKSwncHVibGlzaCcpDQoJCQkJLmVJbnB1dCgkc21kX2F0X2V2 ZW50KS5zSW5wdXQoJ3NtZF9hdF9zYXZlJykNCgkJCQkuaElucHV0KCdza2luJywkc2tpbikN CgkJCQkuaElucHV0KCdmaWxlJywkZmlsZSkNCgkJCSkNCgkJKS4NCgkJdGR0bCgkZmlsZUxp c3QpDQoJKS4NCgllbmRUYWJsZSgpOw0KDQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLy8gSnVzdCBjbGVhciBvdXQgdGhlIHZhciBzbyB0aGUgc2F2ZSBmdW5jdGlvbiB0 cmVhdHMgdGhlIGNvbnRlbnQgYXMgYSBuZXcgZmlsZQ0KZnVuY3Rpb24gc21kX2F0X25ld2Zp bGUoKSB7DQoJJF9QT1NUWydmaWxlJ10gPSAnJzsNCgkkbWVzc2FnZT0nJzsNCglzbWRfYXRf ZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2Nsb25lKCkgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoNCglleHRyYWN0 KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICduZXdfc2tpbicpKSkpOw0KCSRtc2c9Jyc7 DQoNCgkkbmV3X3NraW4gPSB0cmltKCRuZXdfc2tpbik7DQoJJG5ld19za2luID0gcmF3dXJs ZW5jb2RlKCRuZXdfc2tpbik7DQoNCglpZiAoZW1wdHkoJG5ld19za2luKSkgew0KCQkkbXNn ID0gc21kX2F0X2dUeHQoJ25hbWVfZW1wdHknKTsNCgl9DQoNCgkvLyBDaGVjayB0aGUgbmV3 IG5hbWUgaXNuJ3QgYWxyZWFkeSBpbiB1c2UNCgkkdGhlbWVzID0gc21kX2F0X3JlYWRfc2tp bnMoKTsNCg0KCWlmIChpbl9hcnJheSgkbmV3X3NraW4sICR0aGVtZXMpKSB7DQoJCSRtc2cg PSBzbWRfYXRfZ1R4dCgnc2tpbl9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3Nr aW4pKTsNCgl9DQoNCgkvLyBObyBlcnJvcnMsIHNvIG1ha2UgYSBuZXcgZGlyIGFuZCBjcmVh dGUgdGhlIFBIUCBmaWxlDQoJaWYgKCRtc2c9PScnKSB7DQoJCSRjb250ZW50ID0gJyc7DQoJ CSRkZXN0ZGlyID0gVEhFTUUuJG5ld19za2luLkRTOw0KCQkkcmVzID0gbWtkaXIoJGRlc3Rk aXIpOw0KCQkkYmFzZWQgPSAnJzsNCg0KCQlpZiAoJHNraW4pIHsNCgkJCS8vIEJhc2VkIG9u IGFuIGV4aXN0aW5nIHRoZW1lLiBObyBuZWVkIGZvciBhbnkgZnVuY3Rpb25zIG90aGVyIHRo YW4gbWFuaWZlc3QoKQ0KCQkJJGJhc2VkID0gInRoZW1lOjpiYXNlZF9vbignIi4kc2tpbi4i Jyk7IjsNCgkJCSRleHRlbmRzID0gJHNraW4uJ190aGVtZSc7DQoJCQkkc3Jjc3MgPSBUSEVN RS4kc2tpbi5EUy4ndGV4dHBhdHRlcm4uY3NzJzsNCgkJCWlmIChmaWxlX2V4aXN0cygkc3Jj c3MpICYmIGZpbGVzaXplKCRzcmNzcykgPiAwKSB7DQoJCQkJJGltcG9ydCA9IGpvaW4oJycs IGZpbGUoJHNyY3NzKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRpbXBvcnQgPSAnQGltcG9ydCB1 cmwoIi4uL2NsYXNzaWMvdGV4dHBhdHRlcm4uY3NzIik7JzsNCgkJCX0NCgkJCSRjb250ZW50 ID0gJ3snOw0KCQl9IGVsc2Ugew0KCQkJLy8gQnJhbmQgc3BhbmtpbmcgbmV3IHRoZW1lLiBD bG9uZSAnY2xhc3NpYycgZnVuY3Rpb25zIHRoZW4gYWRkIG5ldyBtYW5pZmVzdCgpDQoJCQkk ZXh0ZW5kcyA9ICd0aGVtZSc7DQoJCQkkaW1wb3J0ID0gJyc7DQoJCQkkc3JjID0gdHhwYXRo LkRTLlRIRU1FLidjbGFzc2ljJy5EUy4nY2xhc3NpYy5waHAnOw0KCQkJJGdyYWIgPSBmYWxz ZTsNCgkJCSRmcCA9IGZpbGUoJHNyYyk7DQoNCgkJCWZvcmVhY2goJGZwIGFzICRsaW5lKSB7 DQoJCQkJJGxpbmUgPSBydHJpbSgkbGluZSk7DQoJCQkJaWYgKHN0cnBvcygkbGluZSwgJ2Z1 bmN0aW9uIG1hbmlmZXN0KCknKSAhPT0gZmFsc2UpIHsNCgkJCQkJJGdyYWIgPSBmYWxzZTsg Ly8gdW5uZWNlc3Nhcnk/DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZiAoJGdyYWIpIHsN CgkJCQkJJGNvbnRlbnQgLj0gJGxpbmUubjsNCgkJCQl9DQoJCQkJaWYgKHN0cnBvcygkbGlu ZSwgJ2NsYXNzIGNsYXNzaWNfdGhlbWUgZXh0ZW5kcyB0aGVtZScpICE9PSBmYWxzZSkgew0K CQkJCQkkZ3JhYiA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJLy8gbWFuaWZlc3Qg ZmllbGRzDQoJCSRtYW51c2VyID0gZ2V0X2F1dGhvcl9uYW1lKCR0eHBfdXNlcik7DQoJCSRt YW50aXRsZSA9IHVjd29yZHMoJG5ld19za2luKTsNCg0KCQkvLyBXcml0ZSB0aGUgbmV3IFBI UCBmaWxlDQoJCSRidWYgPSA8PDxFT0YNCjw/cGhwDQoNCmlmICghZGVmaW5lZCgndHhwaW50 ZXJmYWNlJykpIGRpZSgndHhwaW50ZXJmYWNlIGlzIHVuZGVmaW5lZC4nKTsNCg0KeyRiYXNl ZH0NCg0KY2xhc3MgeyRuZXdfc2tpbn1fdGhlbWUgZXh0ZW5kcyB7JGV4dGVuZHN9DQp7JGNv bnRlbnR9DQoNCglmdW5jdGlvbiBtYW5pZmVzdCgpDQoJew0KCQlyZXR1cm4gYXJyYXkoDQoJ CQkndGl0bGUnCSAJCT0+ICd7JG1hbnRpdGxlfScsDQoJCQknYXV0aG9yJyAJCT0+ICd7JG1h bnVzZXJ9JywNCgkJCSdhdXRob3JfdXJpJyAJPT4gJycsDQoJCQkndmVyc2lvbicgCQk9PiAn MS4wJywNCgkJCSdkZXNjcmlwdGlvbicgCT0+ICcnLA0KCQkJJ2hlbHAnIAkJCT0+ICcnLA0K CQkpOw0KCX0NCn0NCj8+DQpFT0Y7DQoNCgkJJGZwID0gZm9wZW4oJGRlc3RkaXIuJG5ld19z a2luLicucGhwJywgIndiIik7DQoJCWZ3cml0ZSgkZnAsICRidWYpOw0KCQlmY2xvc2UoJGZw KTsNCg0KCQkvLyBDcmVhdGUgdGhlIENTUyBmaWxlDQoJCSRmcCA9IGZvcGVuKCRkZXN0ZGly Lid0ZXh0cGF0dGVybi5jc3MnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGltcG9ydCk7DQoJ CWZjbG9zZSgkZnApOw0KDQoJCWlmICgkc2tpbikgew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0 KCdza2luX2Nsb25lZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsNCgkJfSBl bHNlIHsNCgkJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tpbl9jcmVhdGVkJywgYXJyYXkoJ3tu YW1lfScgPT4gJG5ld19za2luKSk7Ow0KCQl9DQoNCi8vCSRtc2cgPSBzbWRfYXRfZ1R4dCgn c2tpbl9ub3RfY3JlYXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsNCg0K CX0NCg0KCXNtZF9hdF9saXN0KCRtc2cpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9jcnVzaF9vcHRpb25zKCRkaXJlY3Rpb249J2V4cG9y dCcpIHsNCgkkc21kX2NydXNoZXJzID0gYXJyYXkoJ3RhcicgPT4gc21kX2F0X2dUeHQoJ2Nf dGFyJykpOw0KDQoJaWYgKCRkaXJlY3Rpb249J2V4cG9ydCcpIHsNCgkJaWYgKGZ1bmN0aW9u X2V4aXN0cygnZ3pjb21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZ3pvcGVuJykgJiYg ZnVuY3Rpb25fZXhpc3RzKCdnendyaXRlJykpIHsNCgkJCSRzbWRfY3J1c2hlcnNbJ2d6aXAn XSA9IHNtZF9hdF9nVHh0KCdjX2d6aXAnKTsNCgkJCSRzbWRfY3J1c2hlcnNbJ3ppcCddID0g c21kX2F0X2dUeHQoJ2NfemlwJyk7DQoJCX0NCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnYnpj b21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0cygnYnpvcGVuJykgJiYgZnVuY3Rpb25fZXhp c3RzKCdiendyaXRlJykpIHsNCgkJCSRzbWRfY3J1c2hlcnNbJ2J6aXAyJ10gPSBzbWRfYXRf Z1R4dCgnY19iemlwMicpOw0KCQl9DQoJfSBlbHNlIHsNCgkJLy8gSW1wb3J0IGZ1bmN0aW9u IHJlcXVpcmVtZW50cw0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdnemluZmxhdGUnKSkgew0K CQkJJHNtZF9jcnVzaGVyc1snZ3ppcCddID0gc21kX2F0X2dUeHQoJ2NfZ3ppcCcpOw0KCQkJ JHNtZF9jcnVzaGVyc1snemlwJ10gPSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgkJfQ0KCQlp ZiAoZnVuY3Rpb25fZXhpc3RzKCdiemRlY29tcHJlc3MnKSkgew0KCQkJJHNtZF9jcnVzaGVy c1snYnppcDInXSA9IHNtZF9hdF9nVHh0KCdjX2J6aXAyJyk7DQoJCX0NCgl9DQoJcmV0dXJu ICRzbWRfY3J1c2hlcnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2V4cG9ydCgpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X3ByZWZz Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCdjcnVzaCcpKSkpOw0K CSRtZXNzYWdlPScnOw0KCWNoZGlyKFRIRU1FKTsNCgkkb3V0ID0gJHNraW47DQoNCgkvLyBD aGVjayB0aGUgcGFzc2VkIGNvbXByZXNzaW9uIGZvcm1hdCBpcyB2YWxpZDsgdXNlIGRlZmF1 bHQgaWYgbm90DQoJJGNydXNoZXJzID0gc21kX2F0X2NydXNoX29wdGlvbnMoKTsNCglpZiAo JGNydXNoPT0nJyB8fCAkY3J1c2g9PSd1bmRlZmluZWQnIHx8ICFhcnJheV9rZXlfZXhpc3Rz KCRjcnVzaCwgJGNydXNoZXJzKSkgew0KCQkkY3J1c2ggPSBnZXRfcHJlZignc21kX2F0X2Ny dXNoJywgJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X2NydXNoJ10pOw0KCX0NCg0KCXN3aXRj aCgkY3J1c2gpIHsNCgkJY2FzZSAnemlwJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3ppcF9m aWxlKCRvdXQuJy56aXAnKTsNCgkJCWJyZWFrOw0KCQljYXNlICdiemlwMic6DQoJCQkkemlw ID0gbmV3IHNtZF9hdF9iemlwX2ZpbGUoJG91dC4nLnRiejInKTsNCgkJCWJyZWFrOw0KCQlj YXNlICd0YXInOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoJG91dC4nLnRhcicp Ow0KCQkJYnJlYWs7DQoJCWNhc2UgJ2d6aXAnOg0KCQlkZWZhdWx0Og0KCQkJJHppcCA9IG5l dyBzbWRfYXRfZ3ppcF9maWxlKCRvdXQuJy50Z3onKTsNCiAJCQlicmVhazsNCgl9DQoNCgkk emlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gdHhwYXRoLkRTLlRIRU1FLCAn b3ZlcndyaXRlJyA9PiAxLCAnaW5tZW1vcnknID0+IDEpKTsNCgkkemlwLT5hZGRfZmlsZXMo JHNraW4uRFMuJyouKicpOw0KCSR6aXAtPmV4Y2x1ZGVfZmlsZXMoJHNraW4uRFMuJyouc3Zu KicpOw0KCSR6aXAtPmNyZWF0ZV9hcmNoaXZlKCk7DQoJJHppcC0+ZG93bmxvYWRfZmlsZSgp Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9p bXBvcnQoKSB7DQoJZ2xvYmFsICRwcmVmczsNCg0KCSRuYW1lID0gJF9GSUxFU1sndGhlZmls ZSddWyduYW1lJ107DQoJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyd0aGVm aWxlJ11bJ3RtcF9uYW1lJ10sIHR4cGF0aC5EUy5USEVNRS5iYXNlbmFtZSgkX0ZJTEVTWyd0 aGVmaWxlJ11bJ3RtcF9uYW1lJ10pKTsNCgkkYmFzZWRpciA9IHR4cGF0aC5EUy5USEVNRTsN CgkkdW5jcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCdpbXBvcnQnKTsNCgkkbWVz c2FnZT0nJzsNCgkkaW5mbyA9IGV4cGxvZGUgKCcuJywkbmFtZSk7DQoJJGV4dCA9ICRpbmZv WzFdOw0KDQoJaWYgKCRuYW1lICYmICRmaWxlKSB7DQoJCWlmICgkZXh0ID09ICd6aXAnICYm IGFycmF5X2tleV9leGlzdHMoJ3ppcCcsICR1bmNydXNoZXJzKSkgew0KCQkJJHppcCA9IG5l dyBzbWRfZFVuemlwMigkZmlsZSk7DQovLwkJCSR6aXAtPmRlYnVnID0gdHJ1ZTsNCgkJCSR6 aXAtPmdldExpc3QoKTsNCgkJCSR6aXAtPnVuemlwQWxsKCRiYXNlZGlyKTsNCgkJCSR6aXAt PmNsb3NlKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJ fSBlbHNlIGlmICgkZXh0ID09ICd0Z3onICYmIGFycmF5X2tleV9leGlzdHMoJ2d6aXAnLCAk dW5jcnVzaGVycykpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2d6aXBfZmlsZShiYXNlbmFt ZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRi YXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5leHRyYWN0X2ZpbGVzKCk7 DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJfSBlbHNlIGlm ICgkZXh0ID09ICd0YnoyJyAmJiBhcnJheV9rZXlfZXhpc3RzKCdiemlwMicsICR1bmNydXNo ZXJzKSkgew0KCQkJJHppcCA9IG5ldyBzbWRfYXRfYnppcF9maWxlKGJhc2VuYW1lKCRmaWxl KSk7DQoJCQkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIs ICdvdmVyd3JpdGUnID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJCSRt ZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQg PT0gJ3RhcicpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3Rhcl9maWxlKGJhc2VuYW1lKCRm aWxlKSk7DQoJCQkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2Vk aXIsICdvdmVyd3JpdGUnID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2Ugew0KCQkJ JG1lc3NhZ2UgPSBhcnJheShzbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfY29tcHJlc3Npb250 eXBlJywgYXJyYXkoJ3tjcnVzaH0nID0+ICRleHQpKSwgRV9XQVJOSU5HKTsNCgkJfQ0KDQoJ CS8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUNCgkJdW5saW5rKCRmaWxlKTsNCgl9IGVs c2Ugew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJfQ0KDQoJ c21kX2F0X2xpc3QoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfaW1hZ2UoKSB7DQoJZ2xvYmFsICRmaWxlX21h eF91cGxvYWRfc2l6ZTsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdpZCcpKSkp Ow0KCSRfUE9TVFsnc2tpbiddID0gJHNraW4gPSAkaWQ7DQoNCgkkbmFtZSA9ICRfRklMRVNb J3RoZWZpbGUnXVsnbmFtZSddOw0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxF U1sndGhlZmlsZSddWyd0bXBfbmFtZSddKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmICgkZmls ZSA9PT0gZmFsc2UpIHsNCgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQn KSAuIiAkbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1zZygkX0ZJTEVTWyd0aGVmaWxlJ11b J2Vycm9yJ10pOw0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfQ0KDQoJJHNpemUgPSBm aWxlc2l6ZSgkZmlsZSk7DQoJaWYgKCRmaWxlX21heF91cGxvYWRfc2l6ZSA8ICRzaXplKSB7 DQoJCXVubGluaygkZmlsZSk7DQoJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFp bGVkJykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jtc2coVVBMT0FEX0VSUl9GT1JN X1NJWkUpOw0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfQ0KDQoJJHNraW5mbyA9IHNt ZF9hdF9yZWFkX3NraW5mbygkc2tpbik7DQoJJG5ld19za2luID0gJHNraW5mb1snbmFtZSdd Ow0KCSRuZXdwYXRoID0gJHNraW5mb1sncGF0aCddOw0KDQoJaWYgKCRuZXdfc2tpbiAmJiAk ZmlsZSkgew0KCQlpZihzaGlmdF91cGxvYWRlZF9maWxlKCRmaWxlLCAkbmV3cGF0aC4kbmFt ZSkpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9zdWNjZXNzJyk7DQoJ CX0gZWxzZSB7DQoJCQl1bmxpbmsoJGZpbGUpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4 dCgndXBsb2FkX2ZhaWxlZCcpOw0KCQl9DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnZW1wdHlfaW5mbycpOw0KCX0NCg0KCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZGVs ZXRlX2ltYWdlKCkgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzOw0KDQoJZXh0cmFjdChk b1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nKSkpKTsNCgkkZmlsZV9saXN0ID0gZ3BzKCdzbWRf YXRfaW1hZ2VzJyk7DQoJJG1lc3NhZ2U9Jyc7DQoNCglpZiAoZW1wdHkoJGZpbGVfbGlzdCkp IHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZW1wdHlfaW5mbycpOw0KCX0gZWxzZSB7 DQoJCWlmIChpbl9hcnJheSgkc2tpbiwgJHNtZF9jb3JlX3RoZW1lcykpIHsNCgkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ2NvcmVfdGhlbWVfZmlsZScsIGFycmF5KCd7c2tpbn0nID0+ ICRza2luKSk7DQoJCX0gZWxzZSB7DQoJCQlmb3JlYWNoICgkZmlsZV9saXN0IGFzICRpbWFn ZSkgew0KCQkJCSRwYXRoID0gdHhwYXRoLkRTLiRpbWFnZTsNCgkJCQl1bmxpbmsoJHBhdGgp Ow0KCQkJfQ0KCQl9DQoJfQ0KDQoJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9kZWxldGUoKSB7DQoJ Z2xvYmFsICRzbWRfY29yZV90aGVtZXMsICR0aGVtZSwgJHNtZF9hdF9wcml2cywgJHNtZF9h dF9ldmVudDsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ2ZpbGUn KSkpKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmICgkZmlsZSkgew0KCQkvLyBFZGl0aW5nIGEg c2tpbiwgdGh1cyBkZWxldGluZyBhIHNpbmdsZSBmaWxlDQoJCWlmIChpbl9hcnJheSgkc2tp biwgJHNtZF9jb3JlX3RoZW1lcykpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2Nv cmVfdGhlbWVfZmlsZScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSk7DQoJCQlzbWRfYXRf ZWRpdCgkbWVzc2FnZSk7DQoJCX0gZWxzZSB7DQoJCQkkZGVsID0gdW5saW5rKFRIRU1FLiRz a2luLkRTLiRmaWxlKTsNCgkJCWlmICgkZGVsKSB7DQoJCQkJJG1lc3NhZ2UgPSBnVHh0KCdm aWxlX2RlbGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZmlsZSkpOw0KCQkJCSRfUE9TVFsn ZmlsZSddID0gJyc7IC8vIENsZWFyIHRoZSB2YXJpYWJsZSBzbyB0aGUgZmlsZW5hbWUgZG9l c24ndCBhcHBlYXIgb24gdGhlIGVkaXQgcGFnZQ0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2Fn ZSA9IHNtZF9hdF9nVHh0KCdmaWxlX25vdF9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4g JGZpbGUpKTsNCgkJCX0NCgkJfQ0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfSBlbHNl IHsNCgkJaWYgKGluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJJG1l c3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVtZScsIGFycmF5KCd7c2tpbn0nID0+ICRz a2luKSk7DQoJCQlzbWRfYXRfbGlzdCgkbWVzc2FnZSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBW aWV3aW5nIHRoZSBza2luIGxpc3QsIHRodXMgZGVsZXRpbmcgdGhlIHdob2xlIHNraW4NCgkJ CSRza2luZGlyID0gVEhFTUUuJHNraW47DQoJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUo JHNraW5kaXIpKSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZGVsZXRlX2ZhaWxl ZCcpOw0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdza2luX2Rl bGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkc2tpbikpOw0KCQkJfQ0KDQoJCQkvLyBIYW5k bGUgc2l0dWF0aW9ucyBpZiBjdXJyZW50IHNraW4gaGFzIGJlZW4gZGVsZXRlZA0KCQkJaWYg KCFmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUuJHNraW4pKSB7DQoJCQkJJGF0X3ByZWZz ID0gc21kX2F0X2dldF9wcmVmcygpOw0KDQoJCQkJLy8gUmVzZXQgdGhlIGdsb2JhbCBza2lu IGluIGNhc2UgaXQncyBiZWVuIGRlbGV0ZWQNCgkJCQkkZ2JsX3NraW4gPSAoaXNzZXQoJGF0 X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xv YmFsX3NraW4nXSA6ICcnOw0KCQkJCSRnYmxfc2tpbiA9ICgkZ2JsX3NraW4gIT0gJycgJiYg ZmlsZV9leGlzdHModHhwYXRoLkRTLlRIRU1FLiRnYmxfc2tpbikpID8gJGdibF9za2luIDog J2NsYXNzaWMnOw0KCQkJCXNldF9wcmVmKCdzbWRfYXRfZ2xvYmFsX3NraW4nLCAkZ2JsX3Nr aW4sICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCXNl dF9wcmVmKCd0aGVtZV9uYW1lJywgJGdibF9za2luKTsNCg0KCQkJCSRza2luID0gZ2V0X3By ZWYoJ3NtZF9za2luJyk7DQoJCQkJaWYgKCFmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUu JHNraW4pKSB7DQoJCQkJCSRza2luID0gJGdibF9za2luOw0KCQkJCX0NCgkJCQlzZXRfcHJl Zignc21kX3NraW4nLCAkc2tpbiwgJ3NtZF9hdCcsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcsIDAsIFBSRUZfUFJJVkFURSk7DQoJCQl9DQoJCQkkX0dFVFsnc2tpbiddID0gJHNraW47 DQoJCQkkX0dFVFsnbmV4dHN0ZXAnXSA9ICdzbWRfYXRfbGlzdCc7DQoJCQlzbWRfYXRfc3dp dGNoKCRtZXNzYWdlKTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfc2F2ZSgpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShh cnJheSgnc2tpbicsJ25ld19za2luJywnZmlsZScsJ3NtZF9hdF9lZGl0cycpKSkpOw0KDQoJ JGVkaXRhYmxlID0gYXJyYXkoInNzYyIsICJjc3MiLCAianMiLCAicGhwIik7DQoJJG1lc3Nh Z2UgPSAkZXh0cmFNc2cgPSAnJzsNCgkkZmlsZSA9IHRyaW0oJGZpbGUpOw0KCSRuZXdfc2tp biA9IHRyaW0oJG5ld19za2luKTsNCgkkbXNnbGV2ID0gMDsNCg0KCS8vIE5ldyBmaWxlDQoJ aWYgKCEkZmlsZSAmJiAkbmV3X3NraW4pIHsNCgkJJGZpbGUgPSAkbmV3X3NraW47DQoJCSRl eHQgPSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRmaWxlKSk7DQoJCWlmIChzdHJ0b2xvd2Vy KCRmaWxlKSAhPSAncmVhZG1lJyAmJiAoJGV4dCA9PSAnJyB8fCAhaW5fYXJyYXkoJGV4dCwg JGVkaXRhYmxlKSkpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVk X2ZpbGV0eXBlJykuc21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVkX2Z1ZGdlJyk7DQoJCQkkbXNn bGV2ID0gRV9XQVJOSU5HOw0KCQkJJF9QT1NUWydmaWxlJ10gPSAkZmlsZTsNCgkJfQ0KCX0N Cg0KCWlmICgkbWVzc2FnZT09JycpIHsNCgkJJGZuYW1lID0gc2FuaXRpemVGb3JGaWxlKCRm aWxlKTsNCgkJJG5ld19za2luID0gcmF3dXJsZW5jb2RlKCRuZXdfc2tpbik7DQoJCSRfUE9T VFsnbmV3X3NraW4nXSA9ICRuZXdfc2tpbjsNCg0KCQkkc21kX2F0X2VkaXRzID0gZG9TdHJp cChzdHJfcmVwbGFjZSgnXHJcbicsJw0KJywkc21kX2F0X2VkaXRzKSk7IC8vIG5ld2xpbmUg d29ya2Fyb3VuZA0KDQoJCWlmICgkZm5hbWUpIHsNCgkJCSRmaWxlcGF0aCA9IFRIRU1FLiRz a2luLkRTOw0KCQkJaWYgKCFmaWxlX2V4aXN0cygkZmlsZXBhdGguJGZuYW1lKSkgew0KCQkJ CSRyZXQgPSB0b3VjaCgkZmlsZXBhdGguJGZuYW1lKTsNCgkJCQlpZiAoJHJldCA9PT0gZmFs c2UpIHsNCgkJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnbWtkaXJfZmFpbGVkJywgYXJy YXkoJ3tuYW1lfScgPT4gJGZuYW1lKSk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBBc3N1bWlu ZyBubyBlcnJvcnMgc28gZmFyLi4uDQoJCQlpZiAoJG1lc3NhZ2UgPT0gJycpIHsNCgkJCQkk ZmggPSBmb3BlbigkZmlsZXBhdGguJGZuYW1lLCAnd2InKTsNCgkJCQlmd3JpdGUoJGZoLCAk c21kX2F0X2VkaXRzKTsNCgkJCQlmY2xvc2UoJGZoKTsNCg0KCQkJCWlmICgkZm5hbWUgIT0g JG5ld19za2luKSB7DQoJCQkJCS8vIFJlbmFtZSB0aGUgZmlsZQ0KCQkJCQkkcmVzID0gcmVu YW1lKCRmaWxlcGF0aC4kZm5hbWUsICRmaWxlcGF0aC4kbmV3X3NraW4pOw0KDQoJCQkJCS8v IElmIHRoZSByZW5hbWVkIGZpbGUgaXMgdGhlIHRoZW1lJ3MgUEhQIGZpbGUsIHRyeSB0byBy ZW5hbWUgdGhlIG1haW4gc2tpbiBkaXIgdG9vDQoJCQkJCSRmaWxlYml0cyA9IGV4cGxvZGUo Jy4nLCAkbmV3X3NraW4pOw0KCQkJCQkkb2xkZmlsZWJpdHMgPSBleHBsb2RlKCcuJywgJGZu YW1lKTsNCgkJCQkJJGV4dCA9IGFycmF5X3BvcCgkZmlsZWJpdHMpOw0KCQkJCQlpZiAoJHJl cyAmJiAkZXh0ID09ICdwaHAnICYmICgkb2xkZmlsZWJpdHNbMF0gPT0gJHNraW4pKSB7DQoJ CQkJCQkkbmV3X2ZpbGVwYXRoID0gVEhFTUUuJGZpbGViaXRzWzBdLkRTOw0KCQkJCQkJJHJl biA9IHJlbmFtZSgkZmlsZXBhdGgsICRuZXdfZmlsZXBhdGgpOw0KCQkJCQkJJGZpbGVwYXRo ID0gKCRyZW4pID8gJG5ld19maWxlcGF0aCA6ICRmaWxlcGF0aDsNCgkJCQkJCSRfUE9TVFsn c2tpbiddID0gJGZpbGViaXRzWzBdOw0KCQkJCQl9DQoJCQkJCSRleHRyYU1zZyA9ICgkcmVz KSA/IHNtZF9hdF9nVHh0KCdyZW5hbWVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2lu KSkgOiBzbWRfYXRfZ1R4dCgncmVuYW1lX2ZhaWxlZCcpOw0KCQkJCX0NCg0KCQkJCS8vIFBy b2Nlc3MgYW55IGNzcyByZXBsYWNlbWVudHMNCgkJCQkkZmlsZWJpdHMgPSBleHBsb2RlICgn LicsKCgkZm5hbWU9PSRuZXdfc2tpbik/ICRmbmFtZSA6ICRuZXdfc2tpbikpOw0KCQkJCSRj c3NmaWxlID0gJGZpbGViaXRzWzBdOw0KCQkJCSRleHQgPSBhcnJheV9wb3AoJGZpbGViaXRz KTsNCgkJCQlpZiAoJGV4dCA9PSAnc3NjJykgew0KCQkJCQkkcmVwbGFjZW1lbnRzID0gYXJy YXkoKTsNCgkJCQkJJG51bV9yZXAxID0gcHJlZ19tYXRjaF9hbGwoJy8oXEBbQS1aYS16MC05 X10rKTpccyooLiopOy8nLCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hlczEpOw0KCQkJCQkkbnVt X3JlcDIgPSBwcmVnX21hdGNoX2FsbCgnLyhcQFtBLVphLXowLTlfXSspOlxzKlx7KC4qPylc fS9zJywgJHNtZF9hdF9lZGl0cywgJG1hdGNoZXMyKTsNCg0KCQkJCQkvLyBTaW1wbGUgcmVw bGFjZW1lbnRzDQoJCQkJCWZvcmVhY2goJG1hdGNoZXMxIGFzICRpZHggPT4gJHJlcGFycikg ew0KCQkJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgdmFyIGRl ZmluaXRpb25zDQoJCQkJCQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7DQoJCQkJCQkJ CSRzbWRfYXRfZWRpdHMgPSBzdHJfcmVwbGFjZSgkcmVwLCAnJywkc21kX2F0X2VkaXRzKTsN CgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7DQoJCQkJCQkJZm9y ZWFjaCAoJHJlcGFyciBhcyAkamR4ID0+ICRyZXApIHsNCgkJCQkJCQkJJHJlcGxhY2VtZW50 c1skcmVwXSA9ICRtYXRjaGVzMVsyXVskamR4XTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJ CX0NCg0KCQkJCQkvLyBNdWx0aS1saW5lIHJlcGxhY2VtZW50cw0KCQkJCQlmb3JlYWNoKCRt YXRjaGVzMiBhcyAkaWR4ID0+ICRyZXBhcnIpIHsNCgkJCQkJCWlmICgkaWR4ID09IDApIHsN CgkJCQkJCQkvLyBSZW1vdmUgdGhlIHZhciBkZWZpbml0aW9ucw0KCQkJCQkJCWZvcmVhY2gg KCRyZXBhcnIgYXMgJHJlcCkgew0KCQkJCQkJCQkkc21kX2F0X2VkaXRzID0gc3RyX3JlcGxh Y2UoJHJlcCwgJycsJHNtZF9hdF9lZGl0cyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJ aWYgKCRpZHggPT0gMSkgew0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJGpkeCA9PiAk cmVwKSB7DQoJCQkJCQkJCSRyZXBsYWNlbWVudHNbJHJlcC4nOyddID0gdHJpbSgkbWF0Y2hl czJbMl1bJGpkeF0pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIEdl bmVyYXRlIGFuZCB3cml0ZSB0aGUgbmV3IGNzcyBmaWxlDQoJCQkJCSRzbWRfYXRfZWRpdHMg PSB0cmltKHN0cnRyKCRzbWRfYXRfZWRpdHMsICRyZXBsYWNlbWVudHMpKTsNCgkJCQkJJGZo ID0gZm9wZW4oJGZpbGVwYXRoLiRjc3NmaWxlLicuY3NzJywgJ3diJyk7DQoJCQkJCWZ3cml0 ZSgkZmgsICRzbWRfYXRfZWRpdHMpOw0KCQkJCQlmY2xvc2UoJGZoKTsNCgkJCQkJaWYgKCRm bmFtZSAhPSAkbmV3X3NraW4pIHsNCgkJCQkJCSRvbGRmbmFtZSA9IGV4cGxvZGUgKCcuJywg JGZuYW1lKTsNCgkJCQkJCSRvbGRmbmFtZSA9ICRvbGRmbmFtZVswXS4nLmNzcyc7DQoJCQkJ CQkkcmVzID0gQHVubGluaygkZmlsZXBhdGguJG9sZGZuYW1lKTsNCgkJCQkJfQ0KCQkJCX0N Cg0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ZpbGVfc2F2ZWQnLCBhcnJheSgne25h bWV9JyA9PiAkZm5hbWUpKS5ici4kZXh0cmFNc2c7DQoJCQl9DQoJCX0NCgl9DQoJc21kX2F0 X2VkaXQoYXJyYXkoJG1lc3NhZ2UsICRtc2dsZXYpKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIFBSRUZTDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9hdF9nZXRfcHJlZnMoKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7 DQoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJHNtZF9h dF9wcmVmc1swXSkpKTsNCgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsJywndHhwX3ByZWZz JywnbmFtZSBpbiAoJy4kcHJlZmtleXMuJyknKTsNCgkkYXRfcHJlZnMgPSBhcnJheSgpOw0K CWZvcmVhY2ggKCRycyBhcyAkcHJlZmFycikgew0KCQkkYXRfcHJlZnNbJHByZWZhcnJbJ25h bWUnXV0gPSAkcHJlZmFyclsndmFsJ107DQoJfQ0KCXJldHVybiAkYXRfcHJlZnM7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X29wdGlvbnMo JGV2ZW50LCAkc3RlcCwgJG1lc3NhZ2U9JycpIHsNCglzbWRfYXRfc2V0dXAoJG1lc3NhZ2Up Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9z ZXR1cCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnMsICRz bWRfYXRfZXZlbnQsICR0aGVtZSwgJHNtZF9jb3JlX3RoZW1lczsNCg0KCSRudW1SZXFQcmVm cyA9IGNvdW50KCRzbWRfYXRfcHJlZnNbMF0pOw0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRf cHJlZnMoKTsNCgkkbnVtUm93cyA9IGNvdW50KCRhdF9wcmVmcyk7DQoNCglwYWdldG9wKGdU eHQoJ3ByZWZzJyksJG1lc3NhZ2UpOw0KDQoJLy8gWXVrLCB3aHkncyB0aGlzIG5vdCBhdmFp bGFibGUgZ2xvYmFsbHk/IQ0KCSRsZXZlbHMgPSBhcnJheSgNCi8vCQkxID0+IGdUeHQoJ3B1 Ymxpc2hlcicpLA0KCQkyID0+IGdUeHQoJ21hbmFnaW5nX2VkaXRvcicpLA0KCQkzID0+IGdU eHQoJ2NvcHlfZWRpdG9yJyksDQoJCTQgPT4gZ1R4dCgnc3RhZmZfd3JpdGVyJyksDQoJCTUg PT4gZ1R4dCgnZnJlZWxhbmNlcicpLA0KCQk2ID0+IGdUeHQoJ2Rlc2lnbmVyJyksDQoJKTsN CgkkbnVtTGV2cyA9IGNvdW50KCRsZXZlbHMpOw0KDQoJLy8gU3BsaXQgdGhlIHVzZXIgc2tp biBsaXN0DQoJJHVza2lucyA9IGFycmF5KCk7DQoJaWYgKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X3VzZXJfbGlzdCddKSkgew0KCQkkdXNraW5zID0gZXhwbG9kZSgnLCcsICRhdF9wcmVm c1snc21kX2F0X3VzZXJfbGlzdCddKTsNCgl9DQoNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9w cmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6 IDE7DQoJJGNsckJ0biA9ICcgWzxzcGFuIGlkPSJzbWRfY2xyIiBjbGFzcz0ic21kX2Zha2Vi dG4iPicuc21kX2F0X2dUeHQoJ2NsZWFyJykuJzwvc3Bhbj5dJzsNCgkkYnRuU2V0ID0gZklu cHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldCcpLCAncHVibGlzaCcp Ow0KCSRidG5TYXZlID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScp LCAncHVibGlzaCcpOw0KCSRidG5JbnN0YWxsID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0 aW9uPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX2lu c3RhbGwiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJt aXQnLCBnVHh0KCdpbnN0YWxsJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOw0KCSRidG5SZW1v dmUgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZl bnQuJyYjMzg7c3RlcD1zbWRfYXRfcHJlZnNfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxp bmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnZGVsZXRlJyksICdzbWFs bGVyYm94JykuJzwvZm9ybT4nOw0KCSRidG5MaXN0ID0gJyA8YSBjbGFzcz0ibmF2bGluayIg aHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91 dD09IjAiKSA/ICdza2luX2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJ JGJ0blN0eWxlID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcmFkQnRu cyA9IGFycmF5KA0KCQlzbWRfYXRfZ1R4dCgncGVyX3NpdGUnKSwNCgkJc21kX2F0X2dUeHQo J3Blcl9ncm91cCcpLA0KCQlzbWRfYXRfZ1R4dCgncGVyX3VzZXInKSwNCgkpOw0KDQoJZWNo byBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykg ew0KCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJCSRza2luX2xpc3QgPSBzbWRfYXRfcmVh ZF9za2lucygpOw0KDQoJCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZh bHVlIHRvIGJlIHRoZSBzYW1lIGluIHRoaXMgY2FzZQ0KCQkkc2tpbnNlbCA9IGFycmF5KCk7 DQoJCWZvcmVhY2goJHNraW5fbGlzdCBhcyAka2V5MSA9PiAkdmFsdWUxKSB7DQoJCQlpZiAo c21kX2F0X2V4aXN0cygkdmFsdWUxKSkgew0KCQkJCSRza2luc2VsWyR2YWx1ZTFdID0gJHNr aW5fbGlzdFska2V5MV07DQoJCQl9DQoJCX0NCgkJJGdibF9za2luID0gKGlzc2V0KCRhdF9w cmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pICYmICRhdF9wcmVmc1snc21kX2F0X2dsb2Jh bF9za2luJ10gIT0gJycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6ICR0 aGVtZS0+bmFtZTsNCg0KCQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3ByZWZz X3RpdGxlJykpLCAnIGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92ZS4kYnRuTGlzdCwg JGJ0blN0eWxlKSApOw0KCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2 ZW50PScuJHNtZF9hdF9ldmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc191cGRhdGUiIG9u c3VibWl0PSJyZXR1cm4gc21kX3ByZXN1YigpOyI+JzsNCgkJZWNobyB0cih0ZGEoc21kX2F0 X2dUeHQoJ2Nhc2Vfc29ydCcpKS50ZGEoeWVzbm9SYWRpbygnc21kX2F0X2Nhc2Vfc29ydCcs ICRhdF9wcmVmc1snc21kX2F0X2Nhc2Vfc29ydCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21k X2F0X2Nhc2Vfc29ydCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjcnVzaF90 eXBlJykpLnRkYShyYWRpb1NldChzbWRfYXRfY3J1c2hfb3B0aW9ucygpLCAnc21kX2F0X2Ny dXNoJywgJGF0X3ByZWZzWydzbWRfYXRfY3J1c2gnXSksICcgd2lkdGg9IjI0MCIgaWQ9InNt ZF9hdF9jcnVzaCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdsYXlvdXQnKSku dGRhKHJhZGlvU2V0KGFycmF5KHNtZF9hdF9nVHh0KCdsYXlvdXRfbGlzdCcpLCBzbWRfYXRf Z1R4dCgnbGF5b3V0X2dyaWQnKSksICdzbWRfYXRfbGF5b3V0JywgJGF0X3ByZWZzWydzbWRf YXRfbGF5b3V0J10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfbGF5b3V0IicpKTsNCgkJ ZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ3RodW1ic2l6ZScpKS50ZGEoZklucHV0KCd0ZXh0 JywgJ3NtZF9hdF90dycsICRhdF9wcmVmc1snc21kX2F0X3R3J10sJycsJycsJycsNCkuc21k X2F0X2dUeHQoJ3RpbWVzJykuZklucHV0KCd0ZXh0JywgJ3NtZF9hdF90aCcsICRhdF9wcmVm c1snc21kX2F0X3RoJ10sJycsJycsJycsNCkpKTsNCgkJZWNobyB0cigNCgkJCXRkKHNtZF9h dF9nVHh0KCdnbG9iYWxfc2tpbicpKQ0KCQkJLnRkKHNlbGVjdElucHV0KCdzbWRfYXRfZ2xv YmFsX3NraW4nLCAkc2tpbnNlbCwgJGdibF9za2luLCAwLCAwKSkNCgkJKTsNCgkJZWNobyB0 cih0ZGEoc21kX2F0X2dUeHQoJ3NraW5fc3lzdGVtJykpLnRkYShyYWRpb1NldCgkcmFkQnRu cywgJ3NtZF9hdF9zeXN0ZW0nLCAkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSksICcgd2lk dGg9IjI0MCIgaWQ9InNtZF9hdF9yYWRpbyInKSk7DQoNCgkJLy8gT3B0aW9uIDENCgkJJHBy aXZfbGlzdCA9ICc8c2VsZWN0IGlkPSJzbWRfYXRfcHJpdnMiIG5hbWU9InNtZF9hdF9wcml2 c1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iJy4kbnVtTGV2cy4nIiBtdWx0aXBsZT0ibXVsdGlw bGUiPic7DQoJCWZvcmVhY2ggKCRsZXZlbHMgYXMgJGxldmlkID0+ICRsZXZuYW1lKSB7DQoJ CQkkcHJpdl9saXN0IC49ICc8b3B0aW9uIHZhbHVlPSInLiRsZXZpZC4nIj4nLiRsZXZuYW1l Lic8L29wdGlvbj4nOw0KCQl9DQoJCSRwcml2X2xpc3QgLj0gJzwvc2VsZWN0Pic7DQoNCgkJ Ly8gTm90ZSB0aGUgaGlkZGVuIHNraW4gZ3JvdXAgYm94OyBqUXVlcnkga2VlcHMgdHJhY2sg b2YgYW55IGxpc3QgY2hhbmdlcyBhbmQga2VlcHMgaXQgdXBkYXRlZA0KCQkkc2VsYSA9IHNt ZF9hdF9nVHh0KCdza2luX2dyb3VwcycpOw0KCQkkc2VsYiA9IGhJbnB1dCgnc21kX2F0X2dy b3VwX2xpc3QnLCAkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10pOw0KCQkkc2VsYiAu PSAnPHNlbGVjdCBpZD0ic21kX2F0X2dycHMiIG5hbWU9InNtZF9hdF9ncnBzIiBjbGFzcz0i bGlzdCIgc2l6ZT0iJy4kbnVtTGV2cy4nIj4nOw0KCQlmb3JlYWNoICgkc2tpbl9saXN0IGFz ICRhc2tpbikgew0KCQkJaWYgKHNtZF9hdF9leGlzdHMoJGFza2luKSkgew0KCQkJCSRzZWxi IC49ICc8b3B0aW9uIHZhbHVlPSInLiRhc2tpbi4nIj4nLiRhc2tpbi4nPC9vcHRpb24+JzsN CgkJCX0NCgkJfQ0KCQkkc2VsYiAuPSAnPC9zZWxlY3Q+JzsNCgkJZWNobyB0cih0ZGEoJHNl bGEsICcgY2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykgLiB0ZGEoJHNlbGIuJHBy aXZfbGlzdCwgJyB3aWR0aD0iNDAwIiBjbGFzcz0ic21kX2F0X3NlbDEgc21kX2hpZGRlbiIn KSk7DQoNCgkJLy8gT3B0aW9uIDINCgkJJHNlbGEgPSBzbWRfYXRfZ1R4dCgnYWxsb3dlZF9z a2lucycpOw0KCQkkc2VsYiA9ICc8c2VsZWN0IGlkPSJzbWRfYXRfdXNlcl9saXN0IiBuYW1l PSJzbWRfYXRfdXNlcl9saXN0W10iIGNsYXNzPSJsaXN0IiBzaXplPSI4IiBtdWx0aXBsZT0i bXVsdGlwbGUiPic7DQoJCWZvcmVhY2ggKCRza2luX2xpc3QgYXMgJGFza2luKSB7DQoJCQlp ZiAoc21kX2F0X2V4aXN0cygkYXNraW4pKSB7DQoJCQkJJHNlbGIgLj0gJzxvcHRpb24gdmFs dWU9IicuJGFza2luLiciJy4oKGluX2FycmF5KCRhc2tpbiwgJHVza2lucykpID8gJyBzZWxl Y3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPicuJGFza2luLic8L29wdGlvbj4nOw0KCQkJfQ0K CQl9DQoJCSRzZWxiIC49ICc8L3NlbGVjdD4nLiRjbHJCdG47DQoJCWVjaG8gdHIodGRhKCRz ZWxhLCAnIGNsYXNzPSJzbWRfYXRfc2VsMiBzbWRfaGlkZGVuIicpIC4gdGRhKCRzZWxiLCAn IHdpZHRoPSIyNDAiIGNsYXNzPSJzbWRfYXRfc2VsMiBzbWRfaGlkZGVuIicpKTsNCgkJZWNo byB0cih0ZGEoJGJ0blNhdmUsICRidG5TdHlsZSkpOw0KCQllY2hvICc8L2Zvcm0+JzsNCgl9 IGVsc2UgaWYgKCRudW1Sb3dzID4gMCAmJiAkbnVtUm93cyA8ICRudW1SZXFQcmVmcykgew0K CQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3ByZWZzX3NvbWUnKSkuYnIuYnIN CgkJCQkJCS5zbWRfYXRfZ1R4dCgncHJlZnNfc29tZV9leHBsYWluJykuYnIuYnINCgkJCQkJ CS5zbWRfYXRfZ1R4dCgncHJlZnNfc29tZV9vcHRpb25zJyksICcgY29sc3Bhbj0iMiInKSk7 DQoJCWVjaG8gdHIodGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKSAuIHRkYSgkYnRuSW5zdGFs bCwgJGJ0blN0eWxlKSk7DQoJfSBlbHNlIHsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQo J3ByZWZzX25vdF9pbnN0YWxsZWQnKSwgJyBjb2xzcGFuPSIyIicpKTsNCgkJZWNobyB0cih0 ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCX0NCgllY2hvIGVuZFRhYmxlKCk7DQoN CgllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCg0KLy8g Q29uY2F0ZW5hdGUgY2hlY2tib3ggb3B0aW9ucyBmb3Igc3RvcmFnZQ0KZnVuY3Rpb24gc21k X2F0X3ByZWZzd2FwKHNlbFZhbHVlKSB7DQoJZm9yIChpZHg9MDsgaWR4IDwgMzsgaWR4Kysp IHsNCgkJaWYgKGlkeD09c2VsVmFsdWUpIHsNCgkJCWpRdWVyeSgiLnNtZF9hdF9zZWwiK2lk eCkuc2hvdygpOw0KCQl9IGVsc2Ugew0KCQkJalF1ZXJ5KCIuc21kX2F0X3NlbCIraWR4KS5o aWRlKCk7DQoJCX0NCgl9DQp9DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5KCJpbnB1 dFtuYW1lPSdzbWRfYXRfc3lzdGVtJ10iKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNtZF9h dF9wcmVmc3dhcCh0aGlzLnZhbHVlKTsNCgl9KTsNCg0KCWpRdWVyeSgnI3NtZF9jbHInKS5j bGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KCcjc21kX2F0X3VzZXJfbGlzdCBvcHRpb24n KS5hdHRyKCJzZWxlY3RlZCIsICIiKTsNCgl9KTsNCg0KCWpRdWVyeSgiI3NtZF9hdF9ncnBz IikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzZWxza2luID0galF1ZXJ5KHRoaXMpLnZhbCgp Ow0KDQoJCS8vIENsZWFyIHRoZSBvbGQgcHJpdnMgbGlzdCBhbmQgZ3JhYiB0aGUgY3VycmVu dCBsaXN0IGZyb20gdGhlIGhpZGRlbiBmaWVsZA0KCQlqUXVlcnkoIiNzbWRfYXRfcHJpdnMg b3B0aW9uIikuYXR0cigic2VsZWN0ZWQiLGZhbHNlKTsNCgkJdmFyIGdycGxpc3QgPSBqUXVl cnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwoKTsNCgkJdmFyIGdy cHMgPSBncnBsaXN0LnNwbGl0KCcsJyk7DQoJCXZhciBjbnQgPSBncnBzLmxlbmd0aDsNCgkJ Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgY250OyBpZHgrKykgew0KCQkJcHJpdnMgPSBncnBz W2lkeF0uc3BsaXQoJzonKTsNCgkJCXNraW5pZCA9IHByaXZzLnNoaWZ0KCk7DQoJCQlpZiAo c2tpbmlkID09IHNlbHNraW4pIHsNCgkJCQludW1Qcml2cyA9IHByaXZzLmxlbmd0aDsNCgkJ CQlmb3IgKGpkeCA9IDA7IGpkeCA8IG51bVByaXZzOyBqZHgrKykgew0KCQkJCQlqUXVlcnko IiNzbWRfYXRfcHJpdnMgb3B0aW9uW3ZhbHVlPSciK3ByaXZzW2pkeF0rIiddIikuYXR0cigi c2VsZWN0ZWQiLCB0cnVlKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9KTsNCg0KCWpRdWVyeSgi I3NtZF9hdF9wcml2cyIpLmNoYW5nZShmdW5jdGlvbigpIHsNCgkJc2Vsc2tpbiA9IGpRdWVy eSgiI3NtZF9hdF9ncnBzIG9wdGlvbjpzZWxlY3RlZCIpLnZhbCgpOw0KCQl2YXIgb3V0ID0g W107DQoJCXZhciBwcml2cyA9IFtdOw0KCQlwcml2cy5wdXNoKHNlbHNraW4pOw0KCQlqUXVl cnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uOnNlbGVjdGVkIikuZWFjaChmdW5jdGlvbigpIHsN CgkJCXByaXZzLnB1c2goalF1ZXJ5KHRoaXMpLnZhbCgpKTsNCgkJfSk7DQoJCWlmIChwcml2 cy5sZW5ndGggPT0gMSkgew0KCQkJcHJpdnMucG9wKCk7DQoJCX0gZWxzZSB7DQoJCQlvdXQu cHVzaChwcml2cy5qb2luKCI6IikpOw0KCQl9DQoJCXZhciBoaWRsaXN0ID0galF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCXZhciBwcmV2bGlz dCA9IGhpZGxpc3Quc3BsaXQoJywnKTsNCgkJdmFyIHByZXZjbnQgPSBwcmV2bGlzdC5sZW5n dGg7DQoNCgkJalF1ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9uIikuZWFjaChmdW5jdGlvbigp IHsNCgkJCWN1cnJza2luID0galF1ZXJ5KHRoaXMpLnZhbCgpOw0KCQkJaWYgKGN1cnJza2lu ICE9IHNlbHNraW4pIHsNCgkJCQlmb3IgKHZhciBpZHggPSAwOyBpZHggPCBwcmV2Y250OyBp ZHgrKykgew0KCQkJCQlwcmV2cHJpdnMgPSBwcmV2bGlzdFtpZHhdLnNwbGl0KCc6Jyk7DQoJ CQkJCXNraW5pZCA9IHByZXZwcml2cy5zaGlmdCgpOw0KCQkJCQkvLyBHZW5lcmF0ZSB0aGUg cHJpdiBsaXN0IGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNraW4sIHJlbW92aW5nIGFu eSBkdXBsaWNhdGUgcHJpdnMgc2V0IGVsc2V3aGVyZQ0KCQkJCQlpZiAoc2tpbmlkID09IGN1 cnJza2luKSB7DQoJCQkJCQl0bXBvdXQgPSBbXTsNCgkJCQkJCXRtcG91dC5wdXNoKHNraW5p ZCk7DQoJCQkJCQlmb3IgKHRoaXNwcml2IGluIHByZXZwcml2cykgew0KCQkJCQkJCWlmIChq UXVlcnkuaW5BcnJheShwcmV2cHJpdnNbdGhpc3ByaXZdLCBwcml2cykgPCAwKSB7DQoJCQkJ CQkJCXRtcG91dC5wdXNoKHByZXZwcml2c1t0aGlzcHJpdl0pOw0KCQkJCQkJCX0NCgkJCQkJ CX0NCgkJCQkJCWlmICh0bXBvdXQubGVuZ3RoID4gMSkgew0KCQkJCQkJCW91dC5wdXNoKHRt cG91dC5qb2luKCI6IikpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9KTsN CgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKG91dCk7 DQoJfSk7DQoNCgkvLyBEaXNwbGF5IGEgdG9vbHRpcCBzaG93aW5nIHRoZSBjdXJyZW50bHkt YXNzaWduZWQgc2tpbiB3aGVuIGhvdmVyaW5nIG92ZXIgYSBwcml2aWxlZ2UgbGV2ZWwNCglq UXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uIikuaG92ZXIoZnVuY3Rpb24oKSB7DQoJCWhv dml0ZW0gPSBqUXVlcnkodGhpcykudmFsKCk7DQoJCWdycHMgPSBqUXVlcnkoImlucHV0W25h bWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwoKTsNCgkJaXRlbXMgPSBncnBzLnNwbGl0 KCIsIik7DQoJCWZvciAoaWR4ID0gMDsgaWR4IDwgaXRlbXMubGVuZ3RoOyBpZHgrKykgew0K CQkJc2tpbnogPSBpdGVtc1tpZHhdLnNwbGl0KCI6Iik7DQoJCQlmb3IgKGpkeCA9IDE7IGpk eCA8IHNraW56Lmxlbmd0aDsgamR4KyspIHsNCgkJCQlpZiAoc2tpbnpbamR4XSA9PSBob3Zp dGVtKSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5hdHRyKCJ0aXRsZSIsIHNraW56WzBdKTsNCgkJ CQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSwNCglmdW5jdGlvbigpIHsNCgkJalF1 ZXJ5KHRoaXMpLmF0dHIoInRpdGxlIiwgIiIpOw0KCX0pOw0KCXNtZF9hdF9wcmVmc3dhcChq UXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9zeXN0ZW0nXTpjaGVja2VkIikudmFsKCkpOw0K CWpRdWVyeSgiI3NtZF9hdF9wcml2cyIpLmNoYW5nZSgpOw0KfSk7DQo8L3NjcmlwdD4NCjxz dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQouc21kX2Zha2VidG4gew0KCWNvbG9yOiM1NTU7DQoJ Y3Vyc29yOnBvaW50ZXI7DQp9DQojc21kX2F0X3JhZGlvIGlucHV0IHsNCglmbG9hdDpsZWZ0 Ow0KCWNsZWFyOmJvdGg7DQp9DQojc21kX2F0X3JhZGlvIGxhYmVsIHsNCglmbG9hdDpsZWZ0 Ow0KfQ0KLnNtZF9oaWRkZW4gew0KCWRpc3BsYXk6bm9uZTsNCn0NCjwvc3R5bGU+DQpFT0pT Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFNwbGl0IGEgbXVsdGkt Y2hhciBwcmVmZXJlbmNlIHZhbHVlIGludG8gYW4gYXJyYXkgb2Yga2V5cy92YWx1ZXMuDQov LyBOb3RlOiB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5kIG5vdCByZWFkIGRpcmVjdGx5IGZyb20g dGhlIHByZWZzIGFycmF5IGluIHRoaXMgZnVuY3Rpb24gLSBpbnRlbnRpb25hbGx5DQpmdW5j dGlvbiBzbWRfYXRfcHJlZl9leHBsb2RlKCR2YWwpIHsNCgkkb3JkZXIgPSBhcnJheV92YWx1 ZXMoYXJyYXkoc21kX2F0X2dUeHQoJ2NfZ3ppcCcpLHNtZF9hdF9nVHh0KCdjX2J6aXAnKSxz bWRfYXRfZ1R4dCgnY196aXAnKSkpOw0KCSRvbm9mZiA9IGFycmF5X3ZhbHVlcyhwcmVnX3Nw bGl0KCcvLycsICR2YWwsIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZKSk7DQoJJG91dCA9IGFy cmF5KCk7DQoJZm9yZWFjaCgkb3JkZXIgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkkb3V0 WyhzdHJpbmcpJHZhbHVlMV0gPSAkb25vZmZbJGtleTFdOw0KCX0NCglyZXR1cm4gJG91dDsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzX2luc3RhbGwoJHNob3dw YW5lPScxJykgew0KCWdsb2JhbCAkc21kX2F0X3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJ Zm9yZWFjaCAoJHNtZF9hdF9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAo IWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBz YWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUoZG9T bGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkpLicsZXZlbnQ9 InNtZF9hZHNraW4iJyk7DQoJCX0NCgl9DQoJaWYgKCRzaG93cGFuZSkgew0KCQkkbWVzc2Fn ZSA9IHNtZF9hdF9nVHh0KCdwcmVmc19pbnN0YWxsZWQnKTsNCgkJc21kX2F0X3NldHVwKCRt ZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19y ZW1vdmUoJHNob3dwYW5lPScxJykgew0KCWdsb2JhbCAkc21kX2F0X3ByZWZzOw0KCSRtZXNz YWdlID0gJyc7DQoJZm9yZWFjaCAoYXJyYXlfbWVyZ2UoJHNtZF9hdF9wcmVmc1swXSwkc21k X2F0X3ByZWZzWzFdKSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAoZmV0Y2goJ25hbWUn LCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsNCgkJCSRpZCA9IHNhZmVfZGVsZXRlKCd0 eHBfcHJlZnMnLCduYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkpOw0KCQl9DQoJfQ0K CWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgncHJlZnNfZGVs ZXRlZCcpOw0KCQlzbWRfYXRfc2V0dXAoJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzX3VwZGF0ZSgpIHsNCglnbG9iYWwgJHNtZF9wbHVn aW5fcHJlZnMsICRzbWRfYXRfcHJlZnMsICRzbWRfYXRfZXZlbnQ7DQoNCgkkbWVzc2FnZSA9 ICcnOw0KCSRwb3N0ID0gYXJyYXkoKTsNCgkkcG9zdFsnc21kX2F0X2dsb2JhbF9za2luJ10g PSBncHMoJ3NtZF9hdF9nbG9iYWxfc2tpbicpOw0KCSRwb3N0WydzbWRfYXRfc3lzdGVtJ10g PSBncHMoJ3NtZF9hdF9zeXN0ZW0nKTsNCgkkcG9zdFsnc21kX2F0X2xheW91dCddID0gZ3Bz KCdzbWRfYXRfbGF5b3V0Jyk7DQoJJHBvc3RbJ3NtZF9hdF9jYXNlX3NvcnQnXSA9IGdwcygn c21kX2F0X2Nhc2Vfc29ydCcpOw0KCSRwb3N0WydzbWRfYXRfdHcnXSA9IGdwcygnc21kX2F0 X3R3Jyk7DQoJJHBvc3RbJ3NtZF9hdF90aCddID0gZ3BzKCdzbWRfYXRfdGgnKTsNCglpZiAo Z3BzKCdzbWRfYXRfdXNlcl9saXN0JykpIHsNCgkJJHBvc3RbJ3NtZF9hdF91c2VyX2xpc3Qn XSA9IGpvaW4oJywnLCBncHMoJ3NtZF9hdF91c2VyX2xpc3QnKSk7DQoJfSBlbHNlIHsNCgkJ JHBvc3RbJ3NtZF9hdF91c2VyX2xpc3QnXSA9ICcnOw0KCX0NCglpZiAoZ3BzKCdzbWRfYXRf Z3JvdXBfbGlzdCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfZ3JvdXBfbGlzdCddID0gZ3BzKCdz bWRfYXRfZ3JvdXBfbGlzdCcpOw0KCX0NCglpZiAoZ3BzKCdzbWRfYXRfY3J1c2gnKSkgew0K CQkkcG9zdFsnc21kX2F0X2NydXNoJ10gPSBncHMoJ3NtZF9hdF9jcnVzaCcpOw0KCX0NCg0K CS8vIFNldCB0aGUgc3lzdGVtLXdpZGUgdGhlbWUgdG8gdGhlIGdsb2JhbCB0aGVtZQ0KCWlm ICgkcG9zdFsnc21kX2F0X2dsb2JhbF9za2luJ10pIHsNCgkJc2V0X3ByZWYoJ3RoZW1lX25h bWUnLCAkcG9zdFsnc21kX2F0X2dsb2JhbF9za2luJ10pOw0KCX0NCg0KCWZvcmVhY2ggKCRz bWRfYXRfcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGlzc2V0KCRwb3N0 WyRwcmVmXSkpIHsNCgkJCXNldF9wcmVmKCRwcmVmLCAkcG9zdFskcHJlZl0sICRzbWRfYXRf ZXZlbnQsIDIpOw0KCQl9DQoJfQ0KCSRtZXNzYWdlID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2 ZWQnKTsNCglzbWRfYXRfc2V0dXAoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCi8vIFVUSUxJVFkgRlVOQ1RJT05TDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9nZXRfcHJpdnMoJHVzZXI9JycpIHsNCglnbG9i YWwgJHR4cF91c2VyOw0KCSR1c2VyID0gKCR1c2VyKSA/ICR1c2VyIDogJHR4cF91c2VyOw0K CSRwcml2cyA9IHNhZmVfZmllbGQoInByaXZzIiwgInR4cF91c2VycyIsICJuYW1lPSciLmRv U2xhc2goJHVzZXIpLiInIik7DQoJcmV0dXJuICRwcml2czsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZXhpc3RzKCRuYW1lKSB7DQoJJGlu c3RhbmNlID0gdGhlbWU6OmZhY3RvcnkoJG5hbWUpOw0KCXJldHVybiAkaW5zdGFuY2U7DQp9 DQoNCi8vIElmIHBlci11c2VyIHNraW4gc3VwcG9ydCBpcyBPRkYsIHRoZSBnbG9iYWwgc2tp biB3aW5zLg0KLy8gT25lIGV4Y2VwdGlvbjogaWYgdGhlIHVzZXIgaXMgYW4gYWRtaW4sIGFs bG93IHRoZSBjdXJyZW50IHNraW4gdG8gcHJldmFpbCBzbyB0aGV5IG1heSBzd2l0Y2ggc2tp bnMgd2l0aCBpbXB1bml0eQ0KLy8gYW5kIG5vdCBhZmZlY3QgdGhlIGdsb2JhbCBza2luDQpm dW5jdGlvbiBzbWRfYXRfcGVyKCkgew0KCWdsb2JhbCAkc21kX2F0X3ByaXZzLCAkcHJlZnMs ICR0aGVtZSwgJHR4cF91c2VyOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygp Ow0KCSRza2luU3lzID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pID8gJGF0 X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10gOiAwOw0KCSRwcml2cyA9IHNtZF9hdF9nZXRfcHJp dnMoKTsNCgkkZ2JsX3NraW4gPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3Nr aW4nXSkgJiYgJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSAhPSAnJykgPyAkYXRf cHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddIDogJyc7DQoJJGdibF9za2luID0gKHNtZF9h dF9leGlzdHMoJGdibF9za2luKSkgPyAkZ2JsX3NraW4gOiAnY2xhc3NpYyc7DQoNCglzd2l0 Y2ggKCRza2luU3lzKSB7DQoJCWNhc2UgMDoNCgkJCS8vIEdsb2JhbCBmb3JjZWQgc2tpbiAo ZXhjZXB0IGFkbWlucykNCgkJCWlmICghaW5fYXJyYXkoJHByaXZzLCBleHBsb2RlKCcsJywg JHNtZF9hdF9wcml2cykpKSB7DQoJCQkJcmV0dXJuICRnYmxfc2tpbjsNCgkJCX0gZWxzZSB7 DQoJCQkJLy8gQWRtaW5zDQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywg KCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJu IChzbWRfYXRfZXhpc3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0K CQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgMToNCgkJCS8vIEdyb3VwLWxldmVsIGZvcmNlZCBz a2lucw0KCQkJaWYgKCFpbl9hcnJheSgkcHJpdnMsIGV4cGxvZGUoJywnLCAkc21kX2F0X3By aXZzKSkpIHsNCgkJCQkkZm9yY2VTa2lucyA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9n cm91cF9saXN0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2dyb3VwX2xpc3QnXSA6ICgoJGdi bF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSk7DQoNCgkJCQkvLyBTcGxpdCB0 aGUgZ3JvdXAgc2tpbiBsaXN0DQoJCQkJJGdza2lucyA9IGFycmF5KCk7DQoJCQkJJGdvcHRz ID0gZXhwbG9kZSgnLCcsICRmb3JjZVNraW5zKTsNCgkJCQlmb3JlYWNoICgkZ29wdHMgYXMg JGdycGRlZikgew0KCQkJCQlpZiAoJGdycGRlZiA9PSAnJykgY29udGludWU7DQoJCQkJCSRw cml2Z3JwID0gZXhwbG9kZSgiOiIsICRncnBkZWYpOw0KCQkJCQkkc2tpbmlkID0gYXJyYXlf c2hpZnQoJHByaXZncnApOw0KCQkJCQlpZiAoaW5fYXJyYXkoJHByaXZzLCAkcHJpdmdycCkp IHsNCgkJCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygkc2tpbmlkKSkgPyAkc2tpbmlkIDog J2NsYXNzaWMnOzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlyZXR1cm4gKCRnYmxfc2tpbikgPyAk Z2JsX3NraW4gOiAkdGhlbWUtPm5hbWU7DQoJCQl9IGVsc2Ugew0KCQkJCS8vIEFkbWlucw0K CQkJCSRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRn Ymxfc2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygk YWRtX3NraW4pKSA/ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJCX0NCgkJCWJyZWFrOw0K CQljYXNlIDI6DQoJCQkvLyBQZXItdXNlciBza2luLiBJZiB1c2VyIGlzIG5vbi1hZG1pbiwg Y2hlY2sgdGhlIHNraW4gaXMgaW4gdGhlIGFsbG93ZWQgbGlzdA0KCQkJaWYgKCFpbl9hcnJh eSgkcHJpdnMsIGV4cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsNCgkJCQkkdmFsaWRT a2lucyA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSkpID8gJGF0X3By ZWZzWydzbWRfYXRfdXNlcl9saXN0J10gOiAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAk dGhlbWUtPm5hbWUpOw0KCQkJCSR2YWxpZFNraW5zID0gZG9fbGlzdCgkdmFsaWRTa2lucyk7 DQoJCQkJJHRoZV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4pID8g JGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChpbl9hcnJheSgkdGhl X3NraW4sICR2YWxpZFNraW5zKSAmJiBzbWRfYXRfZXhpc3RzKCR0aGVfc2tpbikpID8gJHRo ZV9za2luIDogJyc7DQoJCQl9IGVsc2Ugew0KCQkJCS8vIEFkbWlucw0KCQkJCSRhZG1fc2tp biA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0 aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygkYWRtX3NraW4pKSA/ ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJCX0NCgkJCWJyZWFrOw0KCX0NCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZWFkIGFuZCByZXR1cm4gdGhlIG1hbmlm ZXN0LCBpZiBpdCBleGlzdHMgYW5kIGFkZCBhIGZldyBvdGhlciBuaWNldGllcyB0byB0aGUg YXJyYXkgZm9yIGxhdGVyDQpmdW5jdGlvbiBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pIHsN CglnbG9iYWwgJHNtZF9jb3JlX3RoZW1lczsNCg0KCSR0aGlzX3RoZW1lID0gdGhlbWU6OmZh Y3RvcnkoJHNraW4pOw0KCSRza2luZm8gPSBhcnJheSgpOw0KCWlmICgkdGhpc190aGVtZSkg ew0KCQkkc2tpbmZvID0gJHRoaXNfdGhlbWUtPm1hbmlmZXN0KCk7DQoJCSRza2luZm9bJ2Ru YW1lJ10gPSBlbXB0eSgkc2tpbmZvWyd0aXRsZSddKSA/IHVjd29yZHMoJHRoaXNfdGhlbWUt Pm5hbWUpIDogJHNraW5mb1sndGl0bGUnXTsNCgkJJHNraW5mb1snbmFtZSddID0gJHRoaXNf dGhlbWUtPm5hbWU7DQoJCSRza2luZm9bJ3BhdGgnXSA9ICR0aGlzX3RoZW1lLT51cmw7DQoJ CSRza2luZm9bJ3BocGZpbGUnXSA9ICR0aGlzX3RoZW1lLT5wYXRoKCRza2luKTsNCgkJJHNr aW5mb1snYmFzZWRfb24nXSA9ICcnOw0KCQkkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50 cygkc2tpbmZvWydwaHBmaWxlJ10pOw0KCQlpZiAoKCRwb3MgPSBzdHJwb3MoJGNvbnRlbnRz LCAndGhlbWU6OmJhc2VkX29uJykpICE9PSBmYWxzZSkgew0KCQkJJGJlZ3BvcyA9IHN0cnBv cygkY29udGVudHMsICInIiwgJHBvcykrMTsNCgkJCSRlbmRwb3MgPSBzdHJwb3MoJGNvbnRl bnRzLCAiJyIsICRiZWdwb3MpOw0KCQkJJGJhc2UgPSBzdWJzdHIoJGNvbnRlbnRzLCAkYmVn cG9zLCAkZW5kcG9zLSRiZWdwb3MpOw0KCQkJJHNraW5mb1snYmFzZWRfb24nXSA9IChpbl9h cnJheSgkYmFzZSwgJHNtZF9jb3JlX3RoZW1lcykpID8gJycgOiAkYmFzZTsNCgkJfQ0KCQl1 bnNldCgkdGhpc190aGVtZSk7DQoJfQ0KCXJldHVybiAkc2tpbmZvOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEdyYWIgdGhlIHRodW1ibmFpbCBmaWxlbmFtZSBp ZiBpdCBleGlzdHMsIG9wdGlvbmFsbHkgcmV0dXJuIGEgZm9ybWF0dGVkIGltZyB0YWcNCmZ1 bmN0aW9uIHNtZF9hdF9nZXRfdGh1bWIoJHNraW4sICRpbWc9MCkgew0KCWdsb2JhbCAkc21k X2F0X3ByZWZzOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSR0dyA9 IGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3R3J10pID8gJGF0X3ByZWZzWydzbWRfYXRfdHcn XSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90dyddOw0KCSR0aCA9IGlzc2V0KCRhdF9w cmVmc1snc21kX2F0X3RoJ10pID8gJGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRf cHJlZnNbMF1bJ3NtZF9hdF90aCddOw0KCSR1c2VfdGh1bWIgPSAoJHR3ID09IDAgfHwgJHRo ID09IDApID8gZmFsc2UgOiB0cnVlOw0KDQoJLy8gQW4gYXJyYXkgbWVhbnMgdGhlIG1hbmlm ZXN0IGhhcyBhbHJlYWR5IGJlZW4gcmVhZCBhbmQgaXMgYmVpbmcgcGFzc2VkIGludG8gdGhp cyBmdW5jdGlvbg0KCWlmICghaXNfYXJyYXkoJHNraW4pKSB7DQoJCSRza2luID0gc21kX2F0 X3JlYWRfc2tpbmZvKCRza2luKTsNCgl9DQoJaWYgKCRza2luKSB7DQoJCSRza2luZGlyID0g JHNraW5bJ3BhdGgnXTsNCgkJJHRodW1ibmFtZSA9IGdsb2IoJHNraW5kaXIuJ3NjcmVlbnNo b3QuKicpOw0KCQlyZXR1cm4gKCRpbWcgJiYgJHVzZV90aHVtYiAmJiAkdGh1bWJuYW1lICYm IGZpbGVfZXhpc3RzKCR0aHVtYm5hbWVbMF0pKSA/ICc8aW1nIHNyYz0iJy4kdGh1bWJuYW1l WzBdLiciIGFsdD0iJy4oKGlzc2V0KCRza2luWyduYW1lJ10pKSA/ICRza2luWyduYW1lJ10g OiAnJykuJyB0aHVtYm5haWwiIHN0eWxlPSJib3JkZXI6MnB4IHJpZGdlICM5OTk7cGFkZGlu ZzoycHg7IiB3aWR0aD0iJy4kdHcuJyIgaGVpZ2h0PSInLiR0aC4nIiAvPicgOiAnJzsNCgl9 IGVsc2Ugew0KCQlyZXR1cm4gJyc7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9yZWFkX3NraW5zKCkgew0KCSRza2luX2xpc3QgPSB0 aGVtZTo6bmFtZXMoKTsNCgkkc2tpbl9saXN0ID0gc21kX2F0X3NvcnQoJHNraW5fbGlzdCk7 DQoJcmV0dXJuICRza2luX2xpc3Q7DQp9DQoNCi8vIFNvcnQgdGhlIHNraW5zIGJ1dCBrZWVw ICdjbGFzc2ljJyBhdCB0aGUgdG9wDQpmdW5jdGlvbiBzbWRfYXRfc29ydCgkc2tpbl9saXN0 KSB7DQoJZ2xvYmFsICRwcmVmczsNCg0KCSRjYXNlU2Vuc2UgPSBpc3NldCgkcHJlZnNbJ3Nt ZF9hdF9jYXNlX3NvcnQnXSkgPyAkcHJlZnNbJ3NtZF9hdF9jYXNlX3NvcnQnXSA6IDE7DQoN CglpZigkY2FzZVNlbnNlKSB7DQoJCW5hdHNvcnQoJHNraW5fbGlzdCk7DQoJfSBlbHNlIHsN CgkJbmF0Y2FzZXNvcnQoJHNraW5fbGlzdCk7DQoJfQ0KCSRkZmx0X2ZvdW5kID0gZmFsc2U7 DQoJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tpbl9pZHggPT4gJHNraW5fbmFtZSkgew0K CQlpZiAoJHNraW5fbmFtZSA9PSAiY2xhc3NpYyIpIHsNCgkJCXVuc2V0KCRza2luX2xpc3Rb JHNraW5faWR4XSk7DQoJCQkkZGZsdF9mb3VuZCA9IHRydWU7DQoJCQlicmVhazsNCgkJfQ0K CX0NCglpZiAoJGRmbHRfZm91bmQpIHsNCgkJYXJyYXlfdW5zaGlmdCgkc2tpbl9saXN0LCJj bGFzc2ljIik7DQoJfQ0KDQoJcmV0dXJuICRza2luX2xpc3Q7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2xpc3RkaXIoJHN0YXJ0X2Rpcj0n LicpIHsNCgkkZmlsZXMgPSBhcnJheSgpOw0KDQoJaWYgKGlzX2Rpcigkc3RhcnRfZGlyKSkg ew0KCQkkZmggPSBvcGVuZGlyKCRzdGFydF9kaXIpOw0KCQl3aGlsZSAoKCRmaWxlID0gcmVh ZGRpcigkZmgpKSAhPT0gZmFsc2UpIHsNCgkJCS8vIGxvb3AgdGhyb3VnaCB0aGUgZmlsZXMs IHNraXBwaW5nIC4gYW5kIC4uLCBhbmQgcmVjdXJzaW5nIGlmIG5lY2Vzc2FyeQ0KCQkJaWYg KHN0cmNtcCgkZmlsZSwgJy4nKT09MCB8fCBzdHJjbXAoJGZpbGUsICcuLicpPT0wKSBjb250 aW51ZTsNCgkJCSRmaWxlcGF0aCA9ICRzdGFydF9kaXIgLiAnLycgLiAkZmlsZTsNCgkJCWlm ICggaXNfZGlyKCRmaWxlcGF0aCkgKSB7DQoJCQkJJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZp bGVzLCBzbWRfYXRfbGlzdGRpcigkZmlsZXBhdGgpKTsNCgkJCX0gZWxzZSB7DQoJCQkJYXJy YXlfcHVzaCgkZmlsZXMsICRmaWxlcGF0aCk7DQoJCQl9DQoJCX0NCgkJY2xvc2VkaXIoJGZo KTsNCgl9IGVsc2Ugew0KDQoJCS8vIGZhbHNlIGlmIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVk IHdpdGggYW4gaW52YWxpZCBub24tZGlyZWN0b3J5IGFyZ3VtZW50DQoJCSRmaWxlcyA9IGZh bHNlOw0KCX0NCg0KCXJldHVybiAkZmlsZXM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gUmVjdXJzaXZlIHJtZGlyKCkgY291cnRlc3kgb2YgdGhlIHBocCBtYW51 YWwgdXNlciBjb21tZW50cw0KZnVuY3Rpb24gc21kX3JtZGlyX3JlY3Vyc2l2ZSgkZmlsZXBh dGgpIHsNCglpZiAoaXNfZGlyKCRmaWxlcGF0aCkgJiYgIWlzX2xpbmsoJGZpbGVwYXRoKSkg ew0KCQlpZiAoJGRoID0gb3BlbmRpcigkZmlsZXBhdGgpKSB7DQoJCQl3aGlsZSAoKCRzZiA9 IHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlKSB7DQoJCQkJaWYgKCRzZiA9PSAnLicgfHwgJHNm ID09ICcuLicpIGNvbnRpbnVlOw0KCQkJCWlmICghc21kX3JtZGlyX3JlY3Vyc2l2ZSgkZmls ZXBhdGguJy8nLiRzZikpIHsNCgkJCQkJYnJlYWs7IC8vIERvaCwgY2FuJ3QgZGVsZXRlDQoJ CQkJfQ0KCQkJfQ0KCQkJY2xvc2VkaXIoJGRoKTsNCgkJfQ0KCQlyZXR1cm4gcm1kaXIoJGZp bGVwYXRoKTsNCgl9DQoJcmV0dXJuIHVubGluaygkZmlsZXBhdGgpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEZyb20gUEhQIG1hbnVhbCBjb21tZW50cy4gVGhh bmtzIHB1cmVtYW5nbw0KZnVuY3Rpb24gc21kX2F0X2lzX2RpcigkZGlyKSB7DQoJLy8gYnlw YXNzZXMgb3Blbl9iYXNlZGlyIHJlc3RyaWN0aW9ucyBvZiBpc19kaXIgYW5kIGZpbGVwZXJt cw0KCSR0bXBfY21kID0gYGxzIC1kbCAkZGlyYDsNCgkkZGlyX2ZsYWcgPSAkdG1wX2NtZFsw XTsNCglpZigkZGlyX2ZsYWchPSJkIikgew0KCQkvLyBub3QgZDsgdXNlIG5leHQgY2hhciAo Zmlyc3QgY2hhciBtaWdodCBiZSAncycgYW5kIGlzIHN0aWxsIGRpcmVjdG9yeSkNCgkJJGRp cl9mbGFnID0gJHRtcF9jbWRbMV07DQoJfQ0KCXJldHVybiAoJGRpcl9mbGFnPT0iZCIpOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9ta2Rpcl9y ZWN1cnNpdmUoJHBhdGgsICRtb2RlID0gMDc1NSkgew0KCWlmKEBta2RpcigkcGF0aCwgJG1v ZGUpIG9yIGZpbGVfZXhpc3RzKCRwYXRoKSkgcmV0dXJuIHRydWU7DQoJcmV0dXJuIChzbWRf bWtkaXJfcmVjdXJzaXZlKGRpcm5hbWUoJHBhdGgpLCAkbW9kZSkgYW5kIG1rZGlyKCRwYXRo LCAkbW9kZSkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF9hdF9jaGFuZ2VfcGFnZWJ5KCkgew0KCXNldGNvb2tpZSgnc21kX2F0X3BhZ2VieScs IGdwcygncXR5JykpOw0KCXNtZF9hdF9saXN0KCcnKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfc3dpdGNoKCRtZXNzYWdlPScnKSB7DQoJ Z2xvYmFsICRzbWRfYXRfcHJpdnM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgn c2tpbicsICdldmVudCcsICduZXh0c3RlcCcpKSkpOw0KCSR1cmwgPSAiP2V2ZW50PSIuJGV2 ZW50LiImc3RlcD0iLiRuZXh0c3RlcDsNCg0KCWlmICgkc2tpbiAmJiBzbWRfYXRfZXhpc3Rz KCRza2luKSkgew0KCQlzZXRfcHJlZignc21kX3NraW4nLCAkc2tpbiwgJGV2ZW50LCBQUkVG X0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQkkdXJsIC49ICcm bWVzc2FnZT0nIC4gKCgkbWVzc2FnZSkgPyAkbWVzc2FnZSA6IHNtZF9hdF9nVHh0KCdza2lu X3N3aXRjaGVkJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKSk7DQoJfSBlbHNlIHsNCgkJ JHVybCAuPSAnJm1lc3NhZ2U9JyAuICRtZXNzYWdlOw0KCX0NCg0KCS8vIFNpbmNlIHRoZSBo ZWFkZXJzIGhhdmUgYmVlbiBzZW50LCBkb3VibGUtZGVjbHV0Y2ggaW4gb3JkZXIgdG8gc2hv dyB0aGUgc2tpbiB0aGlzIGZpcnN0IHRpbWUNCgllY2hvIDw8PEVPUw0KPHNjcmlwdCB0eXBl PSJ0ZXh0L2phdmFzY3JpcHQiPg0Kd2luZG93LmxvY2F0aW9uLmhyZWY9InskdXJsfSI7DQo8 L3NjcmlwdD4NCjxub3NjcmlwdD4NCjxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRl bnQ9IjA7dXJsPXskdXJsfSIgLz4NCjwvbm9zY3JpcHQ+DQpFT1M7DQoJZXhpdDsNCn0NCg0K Ly8gQWxsLXVzZXIgc2tpbiBjaG9vc2VyDQpmdW5jdGlvbiBzbWRfYWRtYXQoJGV2ZW50LCAk c3RlcCkgew0KCWlmKCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3Nt ZF9hdF9zd2l0Y2gnLA0KCQkpKSkgew0KCQlzbWRfYXRfY2hvb3NlcignJyk7DQoJfSBlbHNl ICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX2F0X2Nob29zZXIoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0 X2FkbV9ldmVudCwgJHRoZW1lOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygp Ow0KCSRsYXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRh dF9wcmVmc1snc21kX2F0X2xheW91dCddIDogMTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZz WydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVm c1swXVsnc21kX2F0X3R3J10pICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X3RoJ10pID8gJGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1b J3NtZF9hdF90aCddKSArIDgwOw0KDQoJJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3Nh Z2UgOiBncHMoJ21lc3NhZ2UnKTsNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdza2lubmVyJyks JG1lc3NhZ2UpOw0KDQoJJGN1cnJfc2tpbiA9ICR0aGVtZS0+bmFtZTsNCg0KCSRhbGxvd2Vk ID0gJyc7DQoJaWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKSkgew0KCQkk YWxsb3dlZCA9IGV4cGxvZGUoIiwiLCRwcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKTsNCgkJ Zm9yZWFjaCAoJGFsbG93ZWQgYXMgJGlkeCA9PiAkdmFsaWQpIHsNCgkJCWlmICgkdmFsaWQg PT0gJycpIHsNCgkJCQl1bnNldCgkYWxsb3dlZFskaWR4XSk7DQoJCQl9DQoJCX0NCgl9DQoJ JGFsbG93ZWQgPSBzbWRfYXRfc29ydCgkYWxsb3dlZCk7DQoJJGhkcm93ID0gaGVkKHNtZF9h dF9nVHh0KCdhdmFpbF90aXRsZScpLCAzKTsNCg0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJ ZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJCWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93LCAn IGNvbHNwYW49IjMiJykNCgkJKTsNCgkJZWNobyB0cigNCgkJCWFzc0hlYWQoDQoJCQkJc21k X2F0X2dUeHQoJ3NraW5fZ2JsJyksDQoJCQkJJ2F1dGhvcicsDQoJCQkJJ2Rlc2NyaXB0aW9u Jw0KCQkJKSk7DQoJfSBlbHNlIHsNCgkJZWNobyA8PDxFT0NTUw0KPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4NCi5zbWRfZ3JpZCB7DQoJd2lkdGg6OTYwcHg7DQoJbWFyZ2luOjAgYXV0bzsN Cn0NCi5zbWRfY2VsbCB7DQoJZmxvYXQ6bGVmdDsNCglwYWRkaW5nOjEwcHg7DQoJbWFyZ2lu OjEwcHg7DQoJYm9yZGVyOjFweCByaWRnZSAjY2NjOw0KCXdpZHRoOnskdHd9cHg7DQoJaGVp Z2h0OnskdGh9cHg7DQp9DQouc21kX2NlbGw6aG92ZXIgew0KCWJhY2tncm91bmQ6I2RkZDsN Cn0NCi5zbWRfY2xlYXIgew0KCWNsZWFyOmJvdGg7DQp9DQouc21kX2F1dGggew0KCXRleHQt YWxpZ246Y2VudGVyOw0KCW1hcmdpbjo1cHggMDsNCn0NCjwvc3R5bGU+DQpFT0NTUzsNCgkJ ZWNobyAnPGRpdiBjbGFzcz0ic21kX2dyaWQiPjxkaXYgY2xhc3M9InNtZF9uZXdyb3ciPicu JGhkcm93Lic8L2Rpdj4nOw0KCX0NCglmb3JlYWNoICgkYWxsb3dlZCBhcyAkc2tpbl9uYW1l KSB7DQoJCSRza2luZm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW5fbmFtZSk7DQoJCWlm ICgkc2tpbmZvKSB7DQoJCQkkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVtYigkc2tpbmZv LCAxKTsNCgkJCSR0aGlzX3NraW4gPSAoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/IHN0 cm9uZygkc2tpbmZvWydkbmFtZSddKSA6ICRza2luZm9bJ2RuYW1lJ107DQoJCQkkdGh1bXJv dyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2FkbV9ldmVudC5hLidzdGVwPXNtZF9h dF9zd2l0Y2gnLmEuJ25leHRzdGVwPXNtZF9hZG1hdCcuYS4nc2tpbj0nLiRza2luX25hbWUu JyIgdGl0bGU9Iicuc21kX2F0X2dUeHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0aGlzX3NraW4u KCgkdGh1bWJuYWlsKSA/ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9h Pic7DQoJCQkkYXV0aHJvdyA9IChzdHJwb3MoJHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0 cDovLyIpID09PSAwKSA/ICc8YSBocmVmPSInLiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4n LiRza2luZm9bJ2F1dGhvciddLic8L2E+JyA6ICRza2luZm9bJ2F1dGhvciddOw0KDQoJCQlp ZiAoJGxheW91dD09IjAiKSB7DQoJCQkJZWNobyB0cigNCgkJCQkJdGQoJHRodW1yb3cpDQoJ CQkJCS50ZCgkYXV0aHJvdywgMTAwKQ0KCQkJCQkudGQoJHNraW5mb1snZGVzY3JpcHRpb24n XSwgMjUwKQ0KCQkJCQksICgoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/ICcgc3R5bGU9 ImJhY2tncm91bmQ6I2U4ZThlODsiJyA6ICcnKQ0KCQkJCSk7DQoJCQl9IGVsc2Ugew0KCQkJ CWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsIicuKCgkc2tpbl9uYW1lID09ICRjdXJyX3Nr aW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpLic+JzsNCgkJCQll Y2hvICc8ZGl2PicuJHRodW1yb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0i c21kX2F1dGgiPicuc21kX2F0X2dUeHQoJ2J5JykuJGF1dGhyb3cuJzwvZGl2Pic7DQoJCQkJ ZWNobyAnPC9kaXY+JzsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJGxheW91dD09IjAiKSB7DQoJ CWVjaG8gZW5kVGFibGUoKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRf Y2xlYXIiPjwvZGl2PjwvZGl2Pic7DQoJfQ0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUQVIvR1pJUC9CWklQMi9aSVAg QVJDSElWRSBDTEFTU0VTIDIuMQ0KIHwgQnkgRGV2aW4gRG91Y2V0dGUNCiB8IENvcHlyaWdo dCAoYykgMjAwNSBEZXZpbiBEb3VjZXR0ZQ0KIHwgRW1haWw6IGRhcmtzbm9vcHlAc2hhdy5j YQ0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KIHwgRW1haWwgYnVncy9zdWdnZXN0aW9ucyB0byBkYXJrc25vb3B5QHNoYXcuY2ENCiAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8 IFRoaXMgc2NyaXB0IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQogfCB0 aGUgR05VIEdQTCBhbmQgaXMgZnJlZSB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwgb25s eSBpZiB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90IHJlbW92ZWQNCiArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQovLyBO T1RFOiBjbGFzcyBuYW1lcyBhbHRlcmVkIHRvIGFkZCBzbWRfYXRfIHByZWZpeCB0byBhdm9p ZCBjbGFzaGVzIGluIGdsb2JhbCBzY29wZSwgYW5kIGFkZGVkIHN1YmRpciBjcmVhdGlvbg0K DQpjbGFzcyBzbWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9hcmNoaXZlKCRu YW1lKQ0KCXsNCgkJJHRoaXMtPm9wdGlvbnMgPSBhcnJheSAoDQoJCQknYmFzZWRpcicgPT4g Ii4iLA0KCQkJJ25hbWUnID0+ICRuYW1lLA0KCQkJJ3ByZXBlbmQnID0+ICIiLA0KCQkJJ2lu bWVtb3J5JyA9PiAwLA0KCQkJJ292ZXJ3cml0ZScgPT4gMCwNCgkJCSdyZWN1cnNlJyA9PiAx LA0KCQkJJ3N0b3JlcGF0aHMnID0+IDEsDQoJCQknZm9sbG93bGlua3MnID0+IDAsDQoJCQkn bGV2ZWwnID0+IDMsDQoJCQknbWV0aG9kJyA9PiAxLA0KCQkJJ3NmeCcgPT4gIiIsDQoJCQkn dHlwZScgPT4gIiIsDQoJCQknY29tbWVudCcgPT4gIiINCgkJKTsNCgkJJHRoaXMtPmZpbGVz ID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5leGNsdWRlID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5z dG9yZW9ubHkgPSBhcnJheSAoKTsNCgkJJHRoaXMtPmVycm9yID0gYXJyYXkgKCk7DQoJfQ0K DQoJZnVuY3Rpb24gc2V0X29wdGlvbnMoJG9wdGlvbnMpDQoJew0KCQlmb3JlYWNoICgkb3B0 aW9ucyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCSR0aGlzLT5vcHRpb25zWyRrZXldID0gJHZh bHVlOw0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKSkNCgkJew0K CQkJJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwg JHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRp ciddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJlZ19yZXBsYWNlKCIv XC8kLyIsICIiLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJfQ0KCQlpZiAoIWVt cHR5ICgkdGhpcy0+b3B0aW9uc1snbmFtZSddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNb J25hbWUnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ25hbWUn XSk7DQoJCQkkdGhpcy0+b3B0aW9uc1snbmFtZSddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIs ICIvIiwgJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSk7DQoJCX0NCgkJaWYgKCFlbXB0eSAoJHRo aXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSkpDQoJCXsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVw ZW5kJ10gPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5k J10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL14o XC4qXC8rKSsvIiwgIiIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMt Pm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICR0aGlz LT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9 IHByZWdfcmVwbGFjZSgiL1wvJC8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSkg LiAiLyI7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYXJjaGl2ZSgpDQoJew0KCQkk dGhpcy0+bWFrZV9saXN0KCk7DQoNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSdd ID09IDApDQoJCXsNCgkJCSRwd2QgPSBnZXRjd2QoKTsNCgkJCWNoZGlyKCR0aGlzLT5vcHRp b25zWydiYXNlZGlyJ10pOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9 PSAwICYmIGZpbGVfZXhpc3RzKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9w dGlvbnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAi YnppcCIgPyAiLnRtcCIgOiAiIikpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkZp bGUgeyR0aGlzLT5vcHRpb25zWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJY2hk aXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQllbHNlIGlmICgkdGhpcy0+YXJj aGl2ZSA9IEBmb3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddIC4gKCR0aGlzLT5vcHRpb25z Wyd0eXBlJ10gPT0gImd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAi ID8gIi50bXAiIDogIiIpLCAid2IrIikpDQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQllbHNlDQoJ CQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRp b25zWyduYW1lJ119IGZvciB3cml0aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0 dXJuIDA7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSAiIjsNCg0K CQlzd2l0Y2ggKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10pDQoJCXsNCgkJY2FzZSAiemlwIjoN CgkJCWlmICghJHRoaXMtPmNyZWF0ZV96aXAoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3Jb XSA9ICJDb3VsZCBub3QgY3JlYXRlIHppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9 DQoJCQlicmVhazsNCgkJY2FzZSAiYnppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfdGFy KCkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB0YXIg ZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX2J6 aXAoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIGJ6 aXAyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJn emlwIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7 DQoJCQl9DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfZ3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlz LT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgZ3ppcCBmaWxlLiI7DQoJCQkJcmV0dXJu IDA7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAidGFyIjoNCgkJCWlmICghJHRoaXMtPmNy ZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3Jl YXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCg0KCQlpZiAoJHRo aXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJZmNsb3NlKCR0aGlzLT5h cmNoaXZlKTsNCgkJCWlmICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAk dGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJiemlwIikNCgkJCQl1bmxpbmsoJHRoaXMtPm9w dGlvbnNbJ2Jhc2VkaXInXSAuICIvIiAuICR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAiLnRt cCIpOw0KCQl9DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2RhdGEoJGRhdGEpDQoJew0KCQlpZiAo JHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJCWZ3cml0ZSgkdGhpcy0+YXJj aGl2ZSwgJGRhdGEpOw0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSAuPSAkZGF0YTsNCgl9 DQoNCglmdW5jdGlvbiBtYWtlX2xpc3QoKQ0KCXsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPmV4 Y2x1ZGUpKQ0KCQkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0K CQkJCWZvcmVhY2ggKCR0aGlzLT5leGNsdWRlIGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZh bHVlWyduYW1lJ10gPT0gJGN1cnJlbnRbJ25hbWUnXSkNCgkJCQkJCXVuc2V0ICgkdGhpcy0+ ZmlsZXNbJGtleV0pOw0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+c3RvcmVvbmx5KSkNCgkJCWZv cmVhY2ggKCR0aGlzLT5maWxlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCQlmb3JlYWNoICgk dGhpcy0+c3RvcmVvbmx5IGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10g PT0gJGN1cnJlbnRbJ25hbWUnXSkNCgkJCQkJCSR0aGlzLT5maWxlc1ska2V5XVsnbWV0aG9k J10gPSAwOw0KCQl1bnNldCAoJHRoaXMtPmV4Y2x1ZGUsICR0aGlzLT5zdG9yZW9ubHkpOw0K CX0NCg0KCWZ1bmN0aW9uIGFkZF9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMt Pmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJ CSR0aGlzLT5maWxlc1tdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gZXhjbHVkZV9m aWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0K CQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5leGNsdWRlW10gPSAk Y3VycmVudDsNCgl9DQoNCglmdW5jdGlvbiBzdG9yZV9maWxlcygkbGlzdCkNCgl7DQoJCSR0 ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAk Y3VycmVudCkNCgkJCSR0aGlzLT5zdG9yZW9ubHlbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1 bmN0aW9uIGxpc3RfZmlsZXMoJGxpc3QpDQoJew0KCQlpZiAoIWlzX2FycmF5ICgkbGlzdCkp DQoJCXsNCgkJCSR0ZW1wID0gJGxpc3Q7DQoJCQkkbGlzdCA9IGFycmF5ICgkdGVtcCk7DQoJ CQl1bnNldCAoJHRlbXApOw0KCQl9DQoNCgkJJGZpbGVzID0gYXJyYXkgKCk7DQoNCgkJJHB3 ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0K CQlmb3JlYWNoICgkbGlzdCBhcyAkY3VycmVudCkNCgkJew0KCQkJJGN1cnJlbnQgPSBzdHJf cmVwbGFjZSgiXFwiLCAiLyIsICRjdXJyZW50KTsNCgkJCSRjdXJyZW50ID0gcHJlZ19yZXBs YWNlKCIvXC8rLyIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVnX3JlcGxh Y2UoIi9cLyQvIiwgIiIsICRjdXJyZW50KTsNCgkJCWlmIChzdHJzdHIoJGN1cnJlbnQsICIq IikpDQoJCQl7DQoJCQkJJHJlZ2V4ID0gcHJlZ19yZXBsYWNlKCIvKFtcXFxeXCRcLlxbXF1c fFwoXClcP1wrXHtcfVwvXSkvIiwgIlxcXFxcXDEiLCAkY3VycmVudCk7DQoJCQkJJHJlZ2V4 ID0gc3RyX3JlcGxhY2UoIioiLCAiLioiLCAkcmVnZXgpOw0KCQkJCSRkaXIgPSBzdHJzdHIo JGN1cnJlbnQsICIvIikgPyBzdWJzdHIoJGN1cnJlbnQsIDAsIHN0cnJwb3MoJGN1cnJlbnQs ICIvIikpIDogIi4iOw0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZGlyKTsNCgkJ CQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudDIpDQoJCQkJCWlmIChwcmVnX21hdGNoKCIv XnskcmVnZXh9JC9pIiwgJGN1cnJlbnQyWyduYW1lJ10pKQ0KCQkJCQkJJGZpbGVzW10gPSAk Y3VycmVudDI7DQoJCQkJdW5zZXQgKCRyZWdleCwgJGRpciwgJHRlbXAsICRjdXJyZW50KTsN CgkJCX0NCgkJCWVsc2UgaWYgKEBpc19kaXIoJGN1cnJlbnQpKQ0KCQkJew0KCQkJCSR0ZW1w ID0gJHRoaXMtPnBhcnNlX2RpcigkY3VycmVudCk7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMg JGZpbGUpDQoJCQkJCSRmaWxlc1tdID0gJGZpbGU7DQoJCQkJdW5zZXQgKCR0ZW1wLCAkZmls ZSk7DQoJCQl9DQoJCQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGN1cnJlbnQpKQ0KCQkJCSRm aWxlc1tdID0gYXJyYXkgKCduYW1lJyA9PiAkY3VycmVudCwgJ25hbWUyJyA9PiAkdGhpcy0+ b3B0aW9uc1sncHJlcGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIs ICIiLCAoJHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkY3Vy cmVudCwgIi8iKSkgPw0KCQkJCQlzdWJzdHIoJGN1cnJlbnQsIHN0cnJwb3MoJGN1cnJlbnQs ICIvIikgKyAxKSA6ICRjdXJyZW50KSwNCgkJCQkJJ3R5cGUnID0+IEBpc19saW5rKCRjdXJy ZW50KSAmJiAkdGhpcy0+b3B0aW9uc1snZm9sbG93bGlua3MnXSA9PSAwID8gMiA6IDAsDQoJ CQkJCSdleHQnID0+IHN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3VycmVudCwgIi4iKSks ICdzdGF0JyA9PiBzdGF0KCRjdXJyZW50KSk7DQoJCX0NCg0KCQljaGRpcigkcHdkKTsNCg0K CQl1bnNldCAoJGN1cnJlbnQsICRwd2QpOw0KDQoJCXVzb3J0KCRmaWxlcywgYXJyYXkgKCJz bWRfYXRfYXJjaGl2ZSIsICJzb3J0X2ZpbGVzIikpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJ fQ0KDQoJZnVuY3Rpb24gcGFyc2VfZGlyKCRkaXJuYW1lKQ0KCXsNCgkJaWYgKCR0aGlzLT5v cHRpb25zWydzdG9yZXBhdGhzJ10gPT0gMSAmJiAhcHJlZ19tYXRjaCgiL14oXC4rXC8qKSsk LyIsICRkaXJuYW1lKSkNCgkJCSRmaWxlcyA9IGFycmF5IChhcnJheSAoJ25hbWUnID0+ICRk aXJuYW1lLCAnbmFtZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCXBy ZWdfcmVwbGFjZSgiLyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBh dGhzJ10gPT0gMCAmJiBzdHJzdHIoJGRpcm5hbWUsICIvIikpID8NCgkJCQlzdWJzdHIoJGRp cm5hbWUsIHN0cnJwb3MoJGRpcm5hbWUsICIvIikgKyAxKSA6ICRkaXJuYW1lKSwgJ3R5cGUn ID0+IDUsICdzdGF0JyA9PiBzdGF0KCRkaXJuYW1lKSkpOw0KCQllbHNlDQoJCQkkZmlsZXMg PSBhcnJheSAoKTsNCgkJJGRpciA9IEBvcGVuZGlyKCRkaXJuYW1lKTsNCg0KCQl3aGlsZSAo JGZpbGUgPSBAcmVhZGRpcigkZGlyKSkNCgkJew0KCQkJJGZ1bGxuYW1lID0gJGRpcm5hbWUg LiAiLyIgLiAkZmlsZTsNCgkJCWlmICgkZmlsZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIikN CgkJCQljb250aW51ZTsNCgkJCWVsc2UgaWYgKEBpc19kaXIoJGZ1bGxuYW1lKSkNCgkJCXsN CgkJCQlpZiAoZW1wdHkgKCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pKQ0KCQkJCQljb250 aW51ZTsNCgkJCQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGZ1bGxuYW1lKTsNCgkJCQlm b3JlYWNoICgkdGVtcCBhcyAkZmlsZTIpDQoJCQkJCSRmaWxlc1tdID0gJGZpbGUyOw0KCQkJ fQ0KCQkJZWxzZSBpZiAoQGZpbGVfZXhpc3RzKCRmdWxsbmFtZSkpDQoJCQkJJGZpbGVzW10g PSBhcnJheSAoJ25hbWUnID0+ICRmdWxsbmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9u c1sncHJlcGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAo JHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZnVsbG5hbWUs ICIvIikpID8NCgkJCQkJc3Vic3RyKCRmdWxsbmFtZSwgc3RycnBvcygkZnVsbG5hbWUsICIv IikgKyAxKSA6ICRmdWxsbmFtZSksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGluaygkZnVsbG5h bWUpICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJ CQkJJ2V4dCcgPT4gc3Vic3RyKCRmaWxlLCBzdHJycG9zKCRmaWxlLCAiLiIpKSwgJ3N0YXQn ID0+IHN0YXQoJGZ1bGxuYW1lKSk7DQoJCX0NCg0KCQlAY2xvc2VkaXIoJGRpcik7DQoNCgkJ cmV0dXJuICRmaWxlczsNCgl9DQoNCglmdW5jdGlvbiBzb3J0X2ZpbGVzKCRhLCAkYikNCgl7 DQoJCWlmICgkYVsndHlwZSddICE9ICRiWyd0eXBlJ10pDQoJCQlpZiAoJGFbJ3R5cGUnXSA9 PSA1IHx8ICRiWyd0eXBlJ10gPT0gMikNCgkJCQlyZXR1cm4gLTE7DQoJCQllbHNlIGlmICgk YVsndHlwZSddID09IDIgfHwgJGJbJ3R5cGUnXSA9PSA1KQ0KCQkJCXJldHVybiAxOw0KCQll bHNlIGlmICgkYVsndHlwZSddID09IDUpDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIo JGFbJ25hbWUnXSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQllbHNlIGlmICgkYVsn ZXh0J10gIT0gJGJbJ2V4dCddKQ0KCQkJcmV0dXJuIHN0cmNtcCgkYVsnZXh0J10sICRiWydl eHQnXSk7DQoJCWVsc2UgaWYgKCRhWydzdGF0J11bN10gIT0gJGJbJ3N0YXQnXVs3XSkNCgkJ CXJldHVybiAkYVsnc3RhdCddWzddID4gJGJbJ3N0YXQnXVs3XSA/IC0xIDogMTsNCgkJZWxz ZQ0KCQkJcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2Vy KCRiWyduYW1lJ10pKTsNCgkJcmV0dXJuIDA7DQoJfQ0KDQoJZnVuY3Rpb24gZG93bmxvYWRf ZmlsZSgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJ ew0KCQkJJHRoaXMtPmVycm9yW10gPSAiQ2FuIG9ubHkgdXNlIGRvd25sb2FkX2ZpbGUoKSBp ZiBhcmNoaXZlIGlzIGluIG1lbW9yeS4gUmVkaXJlY3QgdG8gZmlsZSBvdGhlcndpc2UsIGl0 IGlzIGZhc3Rlci4iOw0KCQkJcmV0dXJuOw0KCQl9DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlv bnNbJ3R5cGUnXSkNCgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5 cGU6IGFwcGxpY2F0aW9uL3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJ aGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYnppcDIiKTsNCgkJCWJyZWFr Ow0KCQljYXNlICJnemlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlv bi94LWd6aXAiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaGVhZGVyKCJDb250 ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtdGFyIik7DQoJCX0NCgkJJGhlYWRlciA9ICJDb250 ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiI7DQoJCSRoZWFkZXIg Lj0gc3Ryc3RyKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICIvIikgPyBzdWJzdHIoJHRoaXMt Pm9wdGlvbnNbJ25hbWUnXSwgc3RycnBvcygkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIp ICsgMSkgOiAkdGhpcy0+b3B0aW9uc1snbmFtZSddOw0KCQkkaGVhZGVyIC49ICJcIiI7DQoJ CWhlYWRlcigkaGVhZGVyKTsNCgkJaGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxl bigkdGhpcy0+YXJjaGl2ZSkpOw0KCQloZWFkZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rp bmc6IGJpbmFyeSIpOw0KCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0 LXJldmFsaWRhdGUsIG1heC1hZ2U9NjAiKTsNCgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAx IEphbiAyMDAwIDEyOjAwOjAwIEdNVCIpOw0KCQlwcmludCgkdGhpcy0+YXJjaGl2ZSk7DQoJ fQ0KfQ0KDQpjbGFzcyBzbWRfYXRfdGFyX2ZpbGUgZXh0ZW5kcyBzbWRfYXRfYXJjaGl2ZQ0K ew0KCWZ1bmN0aW9uIHNtZF9hdF90YXJfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRf YXRfYXJjaGl2ZSgkbmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPSAidGFyIjsN Cgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfdGFyKCkNCgl7DQoJCSRwd2QgPSBnZXRjd2QoKTsN CgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRo aXMtPmZpbGVzIGFzICRjdXJyZW50KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9 PSAkdGhpcy0+b3B0aW9uc1snbmFtZSddKQ0KCQkJCWNvbnRpbnVlOw0KCQkJaWYgKHN0cmxl bigkY3VycmVudFsnbmFtZTInXSkgPiA5OSkNCgkJCXsNCgkJCQkkcGF0aCA9IHN1YnN0cigk Y3VycmVudFsnbmFtZTInXSwgMCwgc3RycG9zKCRjdXJyZW50WyduYW1lMiddLCAiLyIsIHN0 cmxlbigkY3VycmVudFsnbmFtZTInXSkgLSAxMDApICsgMSk7DQoJCQkJJGN1cnJlbnRbJ25h bWUyJ10gPSBzdWJzdHIoJGN1cnJlbnRbJ25hbWUyJ10sIHN0cmxlbigkcGF0aCkpOw0KCQkJ CWlmIChzdHJsZW4oJHBhdGgpID4gMTU0IHx8IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkg PiA5OSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBhZGQgeyRw YXRofXskY3VycmVudFsnbmFtZTInXX0gdG8gYXJjaGl2ZSBiZWNhdXNlIHRoZSBmaWxlbmFt ZSBpcyB0b28gbG9uZy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQl9DQoJCQkkYmxv Y2sgPSBwYWNrKCJhMTAwYThhOGE4YTEyYTEyYThhMWExMDBhNmEyYTMyYTMyYThhOGExNTVh MTIiLCAkY3VycmVudFsnbmFtZTInXSwgc3ByaW50ZigiJTA3byIsDQoJCQkJJGN1cnJlbnRb J3N0YXQnXVsyXSksIHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCddWzRdKSwgc3By aW50ZigiJTA3byIsICRjdXJyZW50WydzdGF0J11bNV0pLA0KCQkJCXNwcmludGYoIiUwMTFv IiwgJGN1cnJlbnRbJ3R5cGUnXSA9PSAyID8gMCA6ICRjdXJyZW50WydzdGF0J11bN10pLCBz cHJpbnRmKCIlMDExbyIsICRjdXJyZW50WydzdGF0J11bOV0pLA0KCQkJCSIgICAgICAgICIs ICRjdXJyZW50Wyd0eXBlJ10sICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IEByZWFkbGluaygk Y3VycmVudFsnbmFtZSddKSA6ICIiLCAidXN0YXIgIiwgIiAiLA0KCQkJCSJVbmtub3duIiwg IlVua25vd24iLCAiIiwgIiIsICFlbXB0eSAoJHBhdGgpID8gJHBhdGggOiAiIiwgIiIpOw0K DQoJCQkkY2hlY2tzdW0gPSAwOw0KCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0K CQkJCSRjaGVja3N1bSArPSBvcmQoc3Vic3RyKCRibG9jaywgJGksIDEpKTsNCgkJCSRjaGVj a3N1bSA9IHBhY2soImE4Iiwgc3ByaW50ZigiJTA3byIsICRjaGVja3N1bSkpOw0KCQkJJGJs b2NrID0gc3Vic3RyX3JlcGxhY2UoJGJsb2NrLCAkY2hlY2tzdW0sIDE0OCwgOCk7DQoNCgkJ CWlmICgkY3VycmVudFsndHlwZSddID09IDIgfHwgJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAw KQ0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJZWxzZSBpZiAoJGZwID0gQGZv cGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0aGlzLT5hZGRfZGF0 YSgkYmxvY2spOw0KCQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCRmcCwgMTA0ODU3NikpDQoJ CQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJaWYgKCRjdXJyZW50WydzdGF0J11b N10gJSA1MTIgPiAwKQ0KCQkJCXsNCgkJCQkJJHRlbXAgPSAiIjsNCgkJCQkJZm9yICgkaSA9 IDA7ICRpIDwgNTEyIC0gJGN1cnJlbnRbJ3N0YXQnXVs3XSAlIDUxMjsgJGkrKykNCgkJCQkJ CSR0ZW1wIC49ICJcMCI7DQoJCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJfQ0K CQkJCWZjbG9zZSgkZnApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0g IkNvdWxkIG5vdCBvcGVuIGZpbGUgeyRjdXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJ dCB3YXMgbm90IGFkZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+YWRkX2RhdGEocGFjaygiYTEw MjQiLCAiIikpOw0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1 bmN0aW9uIGV4dHJhY3RfZmlsZXMoKQ0KCXsNCgkJJHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRp cigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlpZiAoJGZwID0gJHRoaXMtPm9w ZW5fYXJjaGl2ZSgpKQ0KCQl7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10g PT0gMSkNCgkJCQkkdGhpcy0+ZmlsZXMgPSBhcnJheSAoKTsNCg0KCQkJd2hpbGUgKCRibG9j ayA9IGZyZWFkKCRmcCwgNTEyKSkNCgkJCXsNCgkJCQkkdGVtcCA9IHVucGFjaygiYTEwMG5h bWUvYThtb2RlL2E4dWlkL2E4Z2lkL2ExMnNpemUvYTEybXRpbWUvYThjaGVja3N1bS9hMXR5 cGUvYTEwMHN5bWxpbmsvYTZtYWdpYy9hMnRlbXAvYTMydGVtcC9hMzJ0ZW1wL2E4dGVtcC9h OHRlbXAvYTE1NXByZWZpeC9hMTJ0ZW1wIiwgJGJsb2NrKTsNCgkJCQkkZmlsZSA9IGFycmF5 ICgNCgkJCQkJJ25hbWUnID0+ICR0ZW1wWydwcmVmaXgnXSAuICR0ZW1wWyduYW1lJ10sDQoJ CQkJCSdzdGF0JyA9PiBhcnJheSAoDQoJCQkJCQkyID0+ICR0ZW1wWydtb2RlJ10sDQoJCQkJ CQk0ID0+IG9jdGRlYygkdGVtcFsndWlkJ10pLA0KCQkJCQkJNSA9PiBvY3RkZWMoJHRlbXBb J2dpZCddKSwNCgkJCQkJCTcgPT4gb2N0ZGVjKCR0ZW1wWydzaXplJ10pLA0KCQkJCQkJOSA9 PiBvY3RkZWMoJHRlbXBbJ210aW1lJ10pLA0KCQkJCQkpLA0KCQkJCQknY2hlY2tzdW0nID0+ IG9jdGRlYygkdGVtcFsnY2hlY2tzdW0nXSksDQoJCQkJCSd0eXBlJyA9PiAkdGVtcFsndHlw ZSddLA0KCQkJCQknbWFnaWMnID0+ICR0ZW1wWydtYWdpYyddLA0KCQkJCSk7DQoNCgkJCQlp ZiAoJGZpbGVbJ2NoZWNrc3VtJ10gPT0gMHgwMDAwMDAwMCkNCgkJCQkJYnJlYWs7DQoJCQkJ ZWxzZSBpZiAoc3Vic3RyKCRmaWxlWydtYWdpYyddLCAwLCA1KSAhPSAidXN0YXIiKQ0KCQkJ CXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAiVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9y dCBleHRyYWN0aW5nIHRoaXMgdHlwZSBvZiB0YXIgZmlsZS4iOw0KCQkJCQlicmVhazsNCgkJ CQl9DQoJCQkJJGJsb2NrID0gc3Vic3RyX3JlcGxhY2UoJGJsb2NrLCAiICAgICAgICAiLCAx NDgsIDgpOw0KCQkJCSRjaGVja3N1bSA9IDA7DQoJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEy OyAkaSsrKQ0KCQkJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkYmxvY2ssICRpLCAxKSk7 DQoJCQkJaWYgKCRmaWxlWydjaGVja3N1bSddICE9ICRjaGVja3N1bSkNCgkJCQkJJHRoaXMt PmVycm9yW10gPSAiQ291bGQgbm90IGV4dHJhY3QgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ25h bWUnXX0sIGl0IGlzIGNvcnJ1cHQuIjsNCg0KCQkJCS8vIEFkZGVkOiBjcmVhdGUgZGlyIGlm IHJlcXVpcmVkDQoJCQkJaWYgKHN0cnBvcygkZmlsZVsnbmFtZSddLCAnLi4nKSA9PT0gZmFs c2UpIHsNCgkJCQkJJHBhdGhfcGFydHMgPSBwYXRoaW5mbygkZmlsZVsnbmFtZSddKTsNCgkJ CQkJaWYgKCFmaWxlX2V4aXN0cygkZmlsZVsnbmFtZSddKSkgew0KCQkJCQkJJHJldCA9IHNt ZF9ta2Rpcl9yZWN1cnNpdmUoKChpc3NldCgkcGF0aF9wYXJ0c1snZXh0ZW5zaW9uJ10pKSA/ IGRpcm5hbWUoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFtZSddKSA6 ICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10uRFMuJGZpbGVbJ25hbWUnXSkpOw0KCQkJCQl9 DQoJCQkJfQ0KDQoJCQkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDEpDQoJ CQkJew0KCQkJCQkkZmlsZVsnZGF0YSddID0gZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzdd KTsNCgkJCQkJZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikgPT0g NTEyID8gMCA6ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7DQoJCQkJCXVuc2V0 ICgkZmlsZVsnY2hlY2tzdW0nXSwgJGZpbGVbJ21hZ2ljJ10pOw0KCQkJCQkkdGhpcy0+Zmls ZXNbXSA9ICRmaWxlOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDUp DQoJCQkJew0KCQkJCQlpZiAoIWlzX2RpcigkZmlsZVsnbmFtZSddKSkNCgkJCQkJCW1rZGly KCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlm ICgkdGhpcy0+b3B0aW9uc1snb3ZlcndyaXRlJ10gPT0gMCAmJiBmaWxlX2V4aXN0cygkZmls ZVsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gInskZmlsZVsnbmFt ZSddfSBhbHJlYWR5IGV4aXN0cy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJZWxz ZSBpZiAoJGZpbGVbJ3R5cGUnXSA9PSAyKQ0KCQkJCXsNCgkJCQkJc3ltbGluaygkdGVtcFsn c3ltbGluayddLCAkZmlsZVsnbmFtZSddKTsNCgkJCQkJY2htb2QoJGZpbGVbJ25hbWUnXSwg JGZpbGVbJ3N0YXQnXVsyXSk7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRuZXcgPSBmb3Blbigk ZmlsZVsnbmFtZSddLCAid2IiKSkNCgkJCQl7DQoJCQkJCWZ3cml0ZSgkbmV3LCBmcmVhZCgk ZnAsICRmaWxlWydzdGF0J11bN10pKTsNCgkJCQkJZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVb J3N0YXQnXVs3XSAlIDUxMikgPT0gNTEyID8gMCA6ICg1MTIgLSAkZmlsZVsnc3RhdCddWzdd ICUgNTEyKSk7DQoJCQkJCWZjbG9zZSgkbmV3KTsNCgkJCQkJQGNobW9kKCRmaWxlWyduYW1l J10sIDA2NDQpOyAvLyBIYXJkLWNvZGVkIGZvciBub3cgYmVjYXVzZSB0aGUgc3R1cGlkIDAx MDA2NDQgdmFsdWUgaW4gJGZpbGVbJ3N0YXQnXVsyXSBjb25mdXNlcyB0aGUgT1MvUEhQDQoJ CQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5v dCBvcGVuIHskZmlsZVsnbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCQljb250aW51ZTsN CgkJCQl9DQoJCQkJLy8gUmVtb3ZlIG93bmVyIGFuZCBncm91cCBzZXR0aW5nIHNpbmNlIHRo ZXJlIGlzIGFsbW9zdCAwIGxpa2VsaWhvb2QgdGhlIGZpbGVzIHdpbGwgaGF2ZSB0aGUgc2Ft ZSB1c2VyL2dyb3VwIGFjcm9zcyBzeXN0ZW1zDQoJCQkJLy8gSW4gb3RoZXIgd29yZHMsIGxl YXZlIG93bmVyL2dyb3VwIGF0IHRoZSBBcGFjaGUgZGVmYXVsdCAtLSB3aGljaCBpcyB3aGF0 IHdlIHdhbnQNCi8vCQkJCWNob3duKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bNF0p Ow0KLy8JCQkJY2hncnAoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs1XSk7DQoJCQkJ QHRvdWNoKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bOV0pOw0KCQkJCXVuc2V0ICgk ZmlsZSk7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQg bm90IG9wZW4gZmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0iOw0KDQoJCWNoZGlyKCRw d2QpOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4gQGZv cGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21k X2F0X2d6aXBfZmlsZSBleHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNt ZF9hdF9nemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRu YW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJnemlwIjsNCgl9DQoNCglmdW5j dGlvbiBjcmVhdGVfZ3ppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5 J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9w dGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJGZwID0gZ3pvcGVuKCR0aGlzLT5vcHRpb25z WyduYW1lJ10sICJ3YnskdGhpcy0+b3B0aW9uc1snbGV2ZWwnXX0iKSkNCgkJCXsNCgkJCQlm c2VlaygkdGhpcy0+YXJjaGl2ZSwgMCk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJHRo aXMtPmFyY2hpdmUsIDEwNDg1NzYpKQ0KCQkJCQlnendyaXRlKCRmcCwgJHRlbXApOw0KCQkJ CWd6Y2xvc2UoJGZwKTsNCgkJCQljaGRpcigkcHdkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsN CgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNb J25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4g MDsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9IGd6ZW5jb2RlKCR0 aGlzLT5hcmNoaXZlLCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7 DQoJfQ0KDQoJZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAZ3pvcGVu KCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0 X2J6aXBfZmlsZSBleHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9h dF9iemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1l KTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJiemlwIjsNCgl9DQoNCglmdW5jdGlv biBjcmVhdGVfYnppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10g PT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlv bnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJGZwID0gYnpvcGVuKCR0aGlzLT5vcHRpb25zWydu YW1lJ10sICJ3YiIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJ CQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJ CWJ6d3JpdGUoJGZwLCAkdGVtcCk7DQoJCQkJYnpjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRw d2QpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxk IG5vdCBvcGVuIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJ CWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0 aGlzLT5hcmNoaXZlID0gYnpjb21wcmVzcygkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlv bnNbJ2xldmVsJ10pOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJj aGl2ZSgpDQoJew0KCQlyZXR1cm4gQGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAi ciIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X2Fy Y2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfYXRfemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhp cy0+c21kX2F0X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0g InppcCI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3ppcCgpDQoJew0KCQkkZmlsZXMgPSAw Ow0KCQkkb2Zmc2V0ID0gMDsNCgkJJGNlbnRyYWwgPSAiIjsNCg0KCQlpZiAoIWVtcHR5ICgk dGhpcy0+b3B0aW9uc1snc2Z4J10pKQ0KCQkJaWYgKCRmcCA9IEBmb3BlbigkdGhpcy0+b3B0 aW9uc1snc2Z4J10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJlYWQoJGZwLCBmaWxl c2l6ZSgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKTsNCgkJCQlmY2xvc2UoJGZwKTsNCgkJCQkk dGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCSRvZmZzZXQgKz0gc3RybGVuKCR0ZW1wKTsN CgkJCQl1bnNldCAoJHRlbXApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltd ID0gIkNvdWxkIG5vdCBvcGVuIHNmeCBtb2R1bGUgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ3Nm eCddfS4iOw0KDQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNb J2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRjdXJyZW50KQ0K CQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0aW9uc1snbmFtZSdd KQ0KCQkJCWNvbnRpbnVlOw0KDQoJCQkkdGltZWRhdGUgPSBleHBsb2RlKCIgIiwgZGF0ZSgi WSBuIGogRyBpIHMiLCAkY3VycmVudFsnc3RhdCddWzldKSk7DQoJCQkkdGltZWRhdGUgPSAo JHRpbWVkYXRlWzBdIC0gMTk4MCA8PCAyNSkgfCAoJHRpbWVkYXRlWzFdIDw8IDIxKSB8ICgk dGltZWRhdGVbMl0gPDwgMTYpIHwNCgkJCQkoJHRpbWVkYXRlWzNdIDw8IDExKSB8ICgkdGlt ZWRhdGVbNF0gPDwgNSkgfCAoJHRpbWVkYXRlWzVdKTsNCg0KCQkJJGJsb2NrID0gcGFjaygi VnZ2dlYiLCAweDA0MDM0YjUwLCAweDAwMEEsIDB4MDAwMCwgKGlzc2V0KCRjdXJyZW50Wydt ZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDog MHgwMDA4LCAkdGltZWRhdGUpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAw ICYmICRjdXJyZW50Wyd0eXBlJ10gPT0gNSkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFjaygi VlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1 cnJlbnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwKTsNCgkJCQkkYmxvY2sgLj0gJGN1cnJlbnRb J25hbWUyJ10gLiAiLyI7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJJGNl bnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwg JHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAw MCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNb J21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCTB4 MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigkY3VycmVudFsnbmFt ZTInXSkgKyAxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0 eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkk Y2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJCQkkZmlsZXMrKzsNCgkJ CQkkb2Zmc2V0ICs9ICgzMSArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0K CQkJZWxzZSBpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJew0KCQkJCSRibG9j ayAuPSBwYWNrKCJWVlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAs IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRj dXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSRj ZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAwMTQs ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBBLCAweDAw MDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25z WydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJCQkw eDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25h bWUyJ10pLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0eXBl J10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2Vu dHJhbCAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0 ICs9ICgzMCArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0KCQkJZWxzZSBp ZiAoJGZwID0gQGZvcGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0 ZW1wID0gZnJlYWQoJGZwLCAkY3VycmVudFsnc3RhdCddWzddKTsNCgkJCQlmY2xvc2UoJGZw KTsNCgkJCQkkY3JjMzIgPSBjcmMzMigkdGVtcCk7DQoJCQkJaWYgKCFpc3NldCgkY3VycmVu dFsnbWV0aG9kJ10pICYmICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAxKQ0KCQkJCXsN CgkJCQkJJHRlbXAgPSBnemNvbXByZXNzKCR0ZW1wLCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwn XSk7DQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKSAtIDY7DQoJCQkJCSR0ZW1wID0gc3Vi c3RyKCR0ZW1wLCAyLCAkc2l6ZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJJHNpemUgPSBz dHJsZW4oJHRlbXApOw0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsICRjcmMzMiwgJHNp emUsICRjdXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4 MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5h ZGRfZGF0YSgkYmxvY2spOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJdW5z ZXQgKCR0ZW1wKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwg MHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4 MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCdd KSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgs ICR0aW1lZGF0ZSwNCgkJCQkJJGNyYzMyLCAkc2l6ZSwgJGN1cnJlbnRbJ3N0YXQnXVs3XSwg c3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsn bmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCArIHN0cmxlbigk Y3VycmVudFsnbmFtZTInXSkgKyAkc2l6ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRoaXMt PmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0gZm9y IHJlYWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRfZGF0 YSgkY2VudHJhbCk7DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBhY2soIlZ2dnZ2VlZ2IiwgMHgw NjA1NGI1MCwgMHgwMDAwLCAweDAwMDAsICRmaWxlcywgJGZpbGVzLCBzdHJsZW4oJGNlbnRy YWwpLCAkb2Zmc2V0LA0KCQkJIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA/ IHN0cmxlbigkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA6IDB4MDAwMCkpOw0KDQoJCWlm ICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pKQ0KCQkJJHRoaXMtPmFkZF9k YXRhKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pOw0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJ CXJldHVybiAxOw0KCX0NCn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgQ2xhc3MgZFVuemlwMiB2Mi42Mg0K Iw0KIyAgQXV0aG9yOiBBbGV4YW5kcmUgVGVkZXNjaGkgKGQpDQojICBFLU1haWw6IGFsZXhh bmRyZWJyIGF0IGdtYWlsIGRvdCBjb20NCiMgIExvbmRyaW5hIC0gUFIgLyBCcmF6aWwNCiMN CiMgIE9iamVjdGl2ZToNCiMgICAgVGhpcyBjbGFzcyBhbGxvd3MgcHJvZ3JhbW1lciB0byBl YXNpbHkgdW56aXAgZmlsZXMgb24gdGhlIGZseS4NCiMNCiMgIFJlcXVpcmVtZW50czoNCiMg ICAgVGhpcyBjbGFzcyByZXF1aXJlcyBleHRlbnNpb24gWkxpYiBFbmFibGVkLiBJdCBpcyBk ZWZhdWx0DQojICAgIGZvciBtb3N0IHNpdGUgaG9zdHMgYXJvdW5kIHRoZSB3b3JsZCwgYW5k IGZvciB0aGUgUEhQIFdpbjMyIGRpc3QuDQojDQojICBUbyBkbzoNCiMgICAqIEVycm9yIGhh bmRsaW5nDQojICAgKiBXcml0ZSBhIFBIUC1TaWRlIGd6aW5mbGF0ZSwgdG8gY29tcGxldGVs eSBhdm9pZCBhbnkgZXh0ZXJuYWwgZXh0ZW5zaW9ucw0KIyAgICogV3JpdGUgb3RoZXIgZGVj b21wcmVzcyBhbGdvcml0aG1zDQojDQojICBNZXRob2RzOg0KIyAgKiBkVW56aXAyKCRmaWxl bmFtZSkgICAgICAgICAtIENvbnN0cnVjdG9yIC0gT3BlbnMgJGZpbGVuYW1lDQojICAqIGdl dExpc3QoWyRzdG9wT25GaWxlXSkgICAgIC0gUmV0cmlldmUgdGhlIGZpbGUgbGlzdA0KIyAg KiBnZXRFeHRyYUluZm8oJHppcGZpbGVuYW1lKSAtIFJldHJpZXZlIG1vcmUgaW5mb3JtYXRp b24gYWJvdXQgY29tcHJlc3NlZCBmaWxlDQojICAqIGdldFppcEluZm8oWyRlbnRyeV0pICAg ICAgIC0gUmV0cmlldmUgWklQIGZpbGUgZGV0YWlscy4NCiMgICogdW56aXAoJHppcGZpbGVu YW1lLCBbJG91dGZpbGVuYW1lLCBbJGFwcGx5Q2htb2RdXSkgLSBVbnppcCBmaWxlDQojICAq IHVuemlwQWxsKFskb3V0RGlyLCBbJHppcERpciwgWyRtYWludGFpblN0cnVjdHVyZSwgWyRh cHBseUNobW9kXV1dXSkNCiMgICogY2xvc2UoKSAgICAgICAgICAgICAgICAgICAgLSBDbG9z ZSBmaWxlIGhhbmRsZXIsIGJ1dCBrZWVwIHRoZSBsaXN0DQojICAqIF9fZGVzdHJveSgpICAg ICAgICAgICAgICAgIC0gQ2xvc2UgZmlsZSBoYW5kbGVyIGFuZCByZWxlYXNlIG1lbW9yeQ0K Iw0KIyAgSWYgeW91IG1vZGlmeSB0aGlzIGNsYXNzLCBvciBoYXZlIGFueSBpZGVhcyB0byBp bXByb3ZlIGl0LCBwbGVhc2UgY29udGFjdCBtZSENCiMgIFlvdSBhcmUgYWxsb3dlZCB0byBy ZWRpc3RyaWJ1dGUgdGhpcyBjbGFzcywgaWYgeW91IGtlZXAgbXkgbmFtZSBhbmQgY29udGFj dCBlLW1haWwgb24gaXQuDQojDQojICBQTEVBU0UhIElGIFlPVSBVU0UgVEhJUyBDTEFTUyBJ TiBBTlkgT0YgWU9VUiBQUk9KRUNUUywgUExFQVNFIExFVCBNRSBLTk9XIQ0KIyAgSWYgeW91 IGhhdmUgcHJvYmxlbXMgdXNpbmcgaXQsIGRvbid0IHRoaW5rIHR3aWNlIGJlZm9yZSBjb250 YWN0aW5nIG1lIQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZmlsZV9w dXRfY29udGVudHMnKSl7DQoJLy8gSWYgbm90IFBIUDUsIGNyZWF0ZXMgYSBjb21wYXRpYmxl IGZ1bmN0aW9uDQoJRnVuY3Rpb24gZmlsZV9wdXRfY29udGVudHMoJGZpbGUsICRkYXRhKXsN CgkJaWYoJHRtcCA9IGZvcGVuKCRmaWxlLCAidyIpKXsNCgkJCWZ3cml0ZSgkdG1wLCAkZGF0 YSk7DQoJCQlmY2xvc2UoJHRtcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllY2hvICI8 Yj5maWxlX3B1dF9jb250ZW50czo8L2I+IENhbm5vdCBjcmVhdGUgZmlsZSAkZmlsZTxicj4i Ow0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfZFVuemlwMnsNCglGdW5j dGlvbiBnZXRWZXJzaW9uKCl7DQoJCXJldHVybiAiMi42MiI7DQoJfQ0KCS8vIFB1YmxpYw0K CXZhciAkZmlsZU5hbWU7DQoJdmFyICRsYXN0RXJyb3I7DQoJdmFyICRjb21wcmVzc2VkTGlz dDsgLy8gWW91IHdpbGwgcHJvYmxhYmx5IHVzZSBvbmx5IHRoaXMgb25lIQ0KCXZhciAkY2Vu dHJhbERpckxpc3Q7IC8vIENlbnRyYWwgZGlyIGxpc3QuLi4gSXQncyBhIGtpbmQgb2YgJ2V4 dHJhIGF0dHJpYnV0ZXMnIGZvciBhIHNldCBvZiBmaWxlcw0KCXZhciAkZW5kT2ZDZW50cmFs OyAgIC8vIEVuZCBvZiBjZW50cmFsIGRpciwgY29udGFpbnMgWklQIENvbW1lbnRzDQoJdmFy ICRkZWJ1ZzsNCg0KCS8vIFByaXZhdGUNCgl2YXIgJGZoOw0KCXZhciAkemlwU2lnbmF0dXJl ID0gIlx4NTBceDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmUN Cgl2YXIgJGRpclNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBk aXIgaGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBceDRiXHgw NVx4MDYiOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoJDQoJLy8gUHVibGlj DQoJRnVuY3Rpb24gc21kX2RVbnppcDIoJGZpbGVOYW1lKXsNCgkJJHRoaXMtPmZpbGVOYW1l ICAgICAgID0gJGZpbGVOYW1lOw0KCQkkdGhpcy0+Y29tcHJlc3NlZExpc3QgPSANCgkJJHRo aXMtPmNlbnRyYWxEaXJMaXN0ID0gDQoJCSR0aGlzLT5lbmRPZkNlbnRyYWwgICA9IEFycmF5 KCk7DQoJfQ0KCQ0KCUZ1bmN0aW9uIGdldExpc3QoJHN0b3BPbkZpbGU9ZmFsc2Upew0KCQlp ZihzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRMaXN0KSl7DQoJCQkkdGhpcy0+ZGVidWdNc2co MSwgIlJldHVybmluZyBhbHJlYWR5IGxvYWRlZCBmaWxlIGxpc3QuIik7DQoJCQlyZXR1cm4g JHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0KCQl9DQoJCQ0KCQkvLyBPcGVuIGZpbGUsIGFuZCBz ZXQgZmlsZSBoYW5kbGVyDQoJCSRmaCA9IGZvcGVuKCR0aGlzLT5maWxlTmFtZSwgInIiKTsN CgkJJHRoaXMtPmZoID0gJiRmaDsNCgkJaWYoISRmaCl7DQoJCQkkdGhpcy0+ZGVidWdNc2co MiwgIkZhaWxlZCB0byBsb2FkIGZpbGUuIik7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJ DQoJCSR0aGlzLT5kZWJ1Z01zZygxLCAiTG9hZGluZyBsaXN0IGZyb20gJ0VuZCBvZiBDZW50 cmFsIERpcicgaW5kZXggbGlzdC4uLiIpOw0KCQlpZighJHRoaXMtPl9sb2FkRmlsZUxpc3RC eUVPRigkZmgsICRzdG9wT25GaWxlKSl7DQoJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkZhaWxl ZCEgVHJ5aW5nIHRvIGxvYWQgbGlzdCBsb29raW5nIGZvciBzaWduYXR1cmVzLi4uIik7DQoJ CQlpZighJHRoaXMtPl9sb2FkRmlsZUxpc3RCeVNpZ25hdHVyZXMoJGZoLCAkc3RvcE9uRmls ZSkpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiRmFpbGVkISBDb3VsZCBub3QgZmluZCBh bnkgdmFsaWQgaGVhZGVyLiIpOw0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiWklQIEZpbGUg aXMgY29ycnVwdGVkIG9yIGVtcHR5Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9 DQoJCQ0KCQlpZigkdGhpcy0+ZGVidWcpew0KCQkJIy0tLS0tLS0gRGVidWcgY29tcHJlc3Nl ZExpc3QNCgkJCSRra2sgPSAwOw0KCQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9 J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQgIzAwMCc+IjsNCgkJCWZv cmVhY2goJHRoaXMtPmNvbXByZXNzZWRMaXN0IGFzICRmaWxlTmFtZT0+JGl0ZW0pew0KCQkJ CWlmKCEka2trICYmICRra2s9MSl7DQoJCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dyb3Vu ZDogI0FEQSc+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUp DQoJCQkJCQllY2hvICI8dGQ+JGZpZWxkTmFtZTwvdGQ+IjsNCgkJCQkJZWNobyAnPC90cj4n Ow0KCQkJCX0NCgkJCQllY2hvICI8dHIgc3R5bGU9J2JhY2tncm91bmQ6ICNDRkMnPiI7DQoJ CQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpew0KCQkJCQlpZigkZmll bGROYW1lID09ICdsYXN0bW9kX2RhdGV0aW1lJykNCgkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0n JGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiIuZGF0ZSgiZC9tL1kgSDppOnMiLCAkdmFs dWUpLiI8L3RkPiI7DQoJCQkJCWVsc2UNCgkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZpZWxk TmFtZScgbm93cmFwPSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJCQl9DQoJCQkJZWNobyAi PC90cj4iOw0KCQkJfQ0KCQkJZWNobyAiPC90YWJsZT4iOw0KCQkJDQoJCQkjLS0tLS0tLSBE ZWJ1ZyBjZW50cmFsRGlyTGlzdA0KCQkJJGtrayA9IDA7DQoJCQlpZihzaXplb2YoJHRoaXMt PmNlbnRyYWxEaXJMaXN0KSl7DQoJCQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9 J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQgIzAwMCc+IjsNCgkJCQlm b3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZU5hbWU9PiRpdGVtKXsNCgkJ CQkJaWYoISRra2sgJiYgJGtraz0xKXsNCgkJCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dy b3VuZDogI0FBRCc+IjsNCgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGZpZWxkTmFtZT0+JHZh bHVlKQ0KCQkJCQkJCWVjaG8gIjx0ZD4kZmllbGROYW1lPC90ZD4iOw0KCQkJCQkJZWNobyAn PC90cj4nOw0KCQkJCQl9DQoJCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dyb3VuZDogI0ND Ric+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpew0KCQkJ CQkJaWYoJGZpZWxkTmFtZSA9PSAnbGFzdG1vZF9kYXRldGltZScpDQoJCQkJCQkJZWNobyAi PHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+Ii5kYXRlKCJkL20vWSBI Omk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJCWVsc2UNCgkJCQkJCQllY2hvICI8dGQg dGl0bGU9JyRmaWVsZE5hbWUnIG5vd3JhcD0nbm93cmFwJz4kdmFsdWU8L3RkPiI7DQoJCQkJ CX0NCgkJCQkJZWNobyAiPC90cj4iOw0KCQkJCX0NCgkJCQllY2hvICI8L3RhYmxlPiI7DQoJ CQl9DQoJCQ0KCQkJIy0tLS0tLS0gRGVidWcgZW5kT2ZDZW50cmFsDQoJCQkka2trID0gMDsN CgkJCWlmKHNpemVvZigkdGhpcy0+ZW5kT2ZDZW50cmFsKSl7DQoJCQkJZWNobyAiPHRhYmxl IGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYScgc3R5bGU9J2JvcmRlcjog MXB4IHNvbGlkICMwMDAnPiI7DQoJCQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAj REFBJz48dGQgY29sc3Bhbj0nMic+ZFVuemlwIC0gRW5kIG9mIGZpbGU8L3RkPjwvdHI+IjsN CgkJCQlmb3JlYWNoKCR0aGlzLT5lbmRPZkNlbnRyYWwgYXMgJGZpZWxkPT4kdmFsdWUpew0K CQkJCQllY2hvICI8dHI+IjsNCgkJCQkJZWNobyAiPHRkIHN0eWxlPSdiYWNrZ3JvdW5kOiAj RkNDJz4kZmllbGQ8L3RkPiI7DQoJCQkJCWVjaG8gIjx0ZCBzdHlsZT0nYmFja2dyb3VuZDog I0ZERCc+JHZhbHVlPC90ZD4iOw0KCQkJCQllY2hvICI8L3RyPiI7DQoJCQkJfQ0KCQkJCWVj aG8gIjwvdGFibGU+IjsNCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuICR0aGlzLT5jb21wcmVz c2VkTGlzdDsNCgl9DQoJRnVuY3Rpb24gZ2V0RXh0cmFJbmZvKCRjb21wcmVzc2VkRmlsZU5h bWUpew0KCQlyZXR1cm4NCgkJCWlzc2V0KCR0aGlzLT5jZW50cmFsRGlyTGlzdFskY29tcHJl c3NlZEZpbGVOYW1lXSk/DQoJCQkkdGhpcy0+Y2VudHJhbERpckxpc3RbJGNvbXByZXNzZWRG aWxlTmFtZV06DQoJCQlmYWxzZTsNCgl9DQoJRnVuY3Rpb24gZ2V0WmlwSW5mbygkZGV0YWls PWZhbHNlKXsNCgkJcmV0dXJuICRkZXRhaWw/DQoJCQkkdGhpcy0+ZW5kT2ZDZW50cmFsWyRk ZXRhaWxdOg0KCQkJJHRoaXMtPmVuZE9mQ2VudHJhbDsNCgl9DQoJDQoJRnVuY3Rpb24gdW56 aXAoJGNvbXByZXNzZWRGaWxlTmFtZSwgJHRhcmdldEZpbGVOYW1lPWZhbHNlLCAkYXBwbHlD aG1vZD0wNzc3KXsNCgkJaWYoIXNpemVvZigkdGhpcy0+Y29tcHJlc3NlZExpc3QpKXsNCgkJ CSR0aGlzLT5kZWJ1Z01zZygxLCAiVHJ5aW5nIHRvIHVuemlwIGJlZm9yZSBsb2FkaW5nIGZp bGUgbGlzdC4uLiBMb2FkaW5nIGl0ISIpOw0KCQkJJHRoaXMtPmdldExpc3QoZmFsc2UsICRj b21wcmVzc2VkRmlsZU5hbWUpOw0KCQl9DQoJCQ0KCQkkZmRldGFpbHMgPSAmJHRoaXMtPmNv bXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdOw0KCQlpZighaXNzZXQoJHRoaXMt PmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdKSl7DQoJCQkkdGhpcy0+ZGVi dWdNc2coMiwgIkZpbGUgJzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8L2I+JyBpcyBub3QgY29t cHJlc3NlZCBpbiB0aGUgemlwLiIpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWlmKHN1 YnN0cigkY29tcHJlc3NlZEZpbGVOYW1lLCAtMSkgPT0gIi8iKXsNCgkJCSR0aGlzLT5kZWJ1 Z01zZygyLCAiVHJ5aW5nIHRvIHVuemlwIGEgZm9sZGVyIG5hbWUgJzxiPiRjb21wcmVzc2Vk RmlsZU5hbWU8L2I+Jy4iKTsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlpZighJGZkZXRh aWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiRmls ZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwvYj4nIGlzIGVtcHR5LiIpOw0KCQkJcmV0dXJu ICR0YXJnZXRGaWxlTmFtZT8NCgkJCQlmaWxlX3B1dF9jb250ZW50cygkdGFyZ2V0RmlsZU5h bWUsICIiKToNCgkJCQkiIjsNCgkJfQ0KDQoJCWZzZWVrKCR0aGlzLT5maCwgJGZkZXRhaWxz Wydjb250ZW50cy1zdGFydE9mZnNldCddKTsNCgkJJHJldCA9ICR0aGlzLT51bmNvbXByZXNz KA0KCQkJCWZyZWFkKCR0aGlzLT5maCwgJGZkZXRhaWxzWydjb21wcmVzc2VkX3NpemUnXSks DQoJCQkJJGZkZXRhaWxzWydjb21wcmVzc2lvbl9tZXRob2QnXSwNCgkJCQkkZmRldGFpbHNb J3VuY29tcHJlc3NlZF9zaXplJ10sDQoJCQkJJHRhcmdldEZpbGVOYW1lDQoJCQkpOw0KCQlp ZigkYXBwbHlDaG1vZCAmJiAkdGFyZ2V0RmlsZU5hbWUpDQoJCQljaG1vZCgkdGFyZ2V0Rmls ZU5hbWUsIDA3NzcpOw0KCQkNCgkJcmV0dXJuICRyZXQ7DQoJfQ0KCUZ1bmN0aW9uIHVuemlw QWxsKCR0YXJnZXREaXI9ZmFsc2UsICRiYXNlRGlyPSIiLCAkbWFpbnRhaW5TdHJ1Y3R1cmU9 dHJ1ZSwgJGFwcGx5Q2htb2Q9MDc3Nyl7DQoJCWlmKCR0YXJnZXREaXIgPT09IGZhbHNlKQ0K CQkJJHRhcmdldERpciA9IGRpcm5hbWUoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddKS4i LyI7DQoJCQ0KCQkkbGlzdGEgPSAkdGhpcy0+Z2V0TGlzdCgpOw0KCQlpZihzaXplb2YoJGxp c3RhKSkgZm9yZWFjaCgkbGlzdGEgYXMgJGZpbGVOYW1lPT4kdHJhc2gpew0KCQkJJGRpcm5h bWUgID0gZGlybmFtZSgkZmlsZU5hbWUpOw0KCQkJJG91dEROICAgID0gIiR0YXJnZXREaXIv JGRpcm5hbWUiOw0KCQkJDQoJCQlpZihzdWJzdHIoJGRpcm5hbWUsIDAsIHN0cmxlbigkYmFz ZURpcikpICE9ICRiYXNlRGlyKQ0KCQkJCWNvbnRpbnVlOw0KCQkJDQoJCQlpZighaXNfZGly KCRvdXRETikgJiYgJG1haW50YWluU3RydWN0dXJlKXsNCgkJCQkkc3RyID0gIiI7DQoJCQkJ JGZvbGRlcnMgPSBleHBsb2RlKCIvIiwgJGRpcm5hbWUpOw0KCQkJCWZvcmVhY2goJGZvbGRl cnMgYXMgJGZvbGRlcil7DQoJCQkJCSRzdHIgPSAkc3RyPyIkc3RyLyRmb2xkZXIiOiRmb2xk ZXI7DQoJCQkJCWlmKCFpc19kaXIoIiR0YXJnZXREaXIvJHN0ciIpKXsNCgkJCQkJCSR0aGlz LT5kZWJ1Z01zZygxLCAiQ3JlYXRpbmcgZm9sZGVyOiAkdGFyZ2V0RGlyLyRzdHIiKTsNCgkJ CQkJCW1rZGlyKCIkdGFyZ2V0RGlyLyRzdHIiKTsNCgkJCQkJCWlmKCRhcHBseUNobW9kKQ0K CQkJCQkJCWNobW9kKCIkdGFyZ2V0RGlyLyRzdHIiLCAkYXBwbHlDaG1vZCk7DQoJCQkJCX0N CgkJCQl9DQoJCQl9DQoJCQlpZihzdWJzdHIoJGZpbGVOYW1lLCAtMSwgMSkgPT0gIi8iKQ0K CQkJCWNvbnRpbnVlOw0KDQoJCQkkbWFpbnRhaW5TdHJ1Y3R1cmU/DQoJCQkJJHRoaXMtPnVu emlwKCRmaWxlTmFtZSwgIiR0YXJnZXREaXIvJGZpbGVOYW1lIiwgJGFwcGx5Q2htb2QpOg0K CQkJCSR0aGlzLT51bnppcCgkZmlsZU5hbWUsICIkdGFyZ2V0RGlyLyIuYmFzZW5hbWUoJGZp bGVOYW1lKSwgJGFwcGx5Q2htb2QpOw0KCQl9DQoJfQ0KCQ0KCUZ1bmN0aW9uIGNsb3NlKCl7 ICAgICAvLyBGcmVlIHRoZSBmaWxlIHJlc291cmNlDQoJCWlmKCR0aGlzLT5maCkNCgkJCWZj bG9zZSgkdGhpcy0+ZmgpOw0KCX0NCglGdW5jdGlvbiBfX2Rlc3Ryb3koKXsgDQoJCSR0aGlz LT5jbG9zZSgpOw0KCX0NCg0KCS8vIFByaXZhdGUgKHlvdSBzaG91bGQgTk9UIGNhbGwgdGhl c2UgbWV0aG9kcyk6DQoJRnVuY3Rpb24gdW5jb21wcmVzcygmJGNvbnRlbnQsICRtb2RlLCAk dW5jb21wcmVzc2VkU2l6ZSwgJHRhcmdldEZpbGVOYW1lPWZhbHNlKXsNCgkJc3dpdGNoKCRt b2RlKXsNCgkJCWNhc2UgMDoNCgkJCQkvLyBOb3QgY29tcHJlc3NlZA0KCQkJCXJldHVybiAk dGFyZ2V0RmlsZU5hbWU/DQoJCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRGaWxlTmFt ZSwgJGNvbnRlbnQpOg0KCQkJCQkkY29udGVudDsNCgkJCWNhc2UgMToNCgkJCQkkdGhpcy0+ ZGVidWdNc2coMiwgIlNocnVuayBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0K CQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgMjoNCgkJCWNhc2UgMzoNCgkJCWNhc2UgNDoN CgkJCWNhc2UgNToNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkNvbXByZXNzaW9uIGZhY3Rv ciAiLigkbW9kZS0xKS4iIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVy biBmYWxzZTsNCgkJCWNhc2UgNjoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkltcGxvZGUg aXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJY2Fz ZSA3Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiVG9rZW5pemluZyBjb21wcmVzc2lvbiBh bGdvcml0aG0gaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNl Ow0KCQkJY2FzZSA4Og0KCQkJCS8vIERlZmxhdGUNCgkJCQlyZXR1cm4gJHRhcmdldEZpbGVO YW1lPw0KCQkJCQlmaWxlX3B1dF9jb250ZW50cygkdGFyZ2V0RmlsZU5hbWUsIGd6aW5mbGF0 ZSgkY29udGVudCwgJHVuY29tcHJlc3NlZFNpemUpKToNCgkJCQkJZ3ppbmZsYXRlKCRjb250 ZW50LCAkdW5jb21wcmVzc2VkU2l6ZSk7DQoJCQljYXNlIDk6DQoJCQkJJHRoaXMtPmRlYnVn TXNnKDIsICJFbmhhbmNlZCBEZWZsYXRpbmcgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7 DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJY2FzZSAxMDoNCgkJCQkkdGhpcy0+ZGVidWdNc2co MiwgIlBLV0FSRSBEYXRlIENvbXByZXNzaW9uIExpYnJhcnkgSW1wb2xvZGluZyBpcyBub3Qg c3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQogICAgICAgICAgIGNh c2UgMTI6DQogICAgICAgICAgICAgICAvLyBCemlwMg0KICAgICAgICAgICAgICAgcmV0dXJu ICR0YXJnZXRGaWxlTmFtZT8NCiAgICAgICAgICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50 cygkdGFyZ2V0RmlsZU5hbWUsIGJ6ZGVjb21wcmVzcygkY29udGVudCkpOg0KICAgICAgICAg ICAgICAgICAgIGJ6ZGVjb21wcmVzcygkY29udGVudCk7DQoJCQljYXNlIDE4Og0KCQkJCSR0 aGlzLT5kZWJ1Z01zZygyLCAiSUJNIFRFUlNFIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIp Ow0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWRlZmF1bHQ6DQoJCQkJJHRoaXMtPmRlYnVnTXNn KDIsICJVbmtub3duIHVuY29tcHJlc3MgbWV0aG9kOiAkbW9kZSIpOw0KCQkJCXJldHVybiBm YWxzZTsNCgkJfQ0KCX0NCglGdW5jdGlvbiBkZWJ1Z01zZygkbGV2ZWwsICRzdHJpbmcpew0K CQlpZigkdGhpcy0+ZGVidWcpew0KCQkJaWYoJGxldmVsID09IDEpDQoJCQkJZWNobyAiPGIg c3R5bGU9J2NvbG9yOiAjNzc3Jz5kVW56aXAyOjwvYj4gJHN0cmluZzxicj4iOw0KCQkJDQoJ CQlpZigkbGV2ZWwgPT0gMikNCgkJCQllY2hvICI8YiBzdHlsZT0nY29sb3I6ICNGMDAnPmRV bnppcDI6PC9iPiAkc3RyaW5nPGJyPiI7DQoJCX0NCgkJJHRoaXMtPmxhc3RFcnJvciA9ICRz dHJpbmc7DQoJfQ0KCUZ1bmN0aW9uIGdldExhc3RFcnJvcigpew0KCQlyZXR1cm4gJHRoaXMt Pmxhc3RFcnJvcjsNCgl9DQoNCglGdW5jdGlvbiBfbG9hZEZpbGVMaXN0QnlFT0YoJiRmaCwg JHN0b3BPbkZpbGU9ZmFsc2Upew0KCQkvLyBDaGVjayBpZiB0aGVyZSdzIGEgdmFsaWQgQ2Vu dHJhbCBEaXIgc2lnbmF0dXJlLg0KCQkvLyBMZXQncyBjb25zaWRlciBhIGZpbGUgY29tbWVu dCBzbWFsbGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzLi4uDQoJCS8vIEFjdHVhbGx5LCBpdCBs ZW5ndGggY2FuIGJlIDY1NTM2Li4gQnV0IHdlJ3JlIG5vdCBnb2luZyB0byBzdXBwb3J0IGl0 Lg0KCQkNCgkJZm9yKCR4ID0gMDsgJHggPCAxMDI0OyAkeCsrKXsNCgkJCWZzZWVrKCRmaCwg LTIyLSR4LCBTRUVLX0VORCk7DQoJCQkNCgkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQp Ow0KCQkJaWYoJHNpZ25hdHVyZSA9PSAkdGhpcy0+ZGlyU2lnbmF0dXJlRSl7DQoJCQkJLy8g SWYgZm91bmQgRU9GIENlbnRyYWwgRGlyDQoJCQkJJGVvZGlyWydkaXNrX251bWJlcl90aGlz J10gICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBudW1iZXIgb2YgdGhpcyBk aXNrDQoJCQkJJGVvZGlyWydkaXNrX251bWJlciddICAgICAgICA9IHVucGFjaygidiIsIGZy ZWFkKCRmaCwgMikpOyAvLyBudW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2Yg dGhlIGNlbnRyYWwgZGlyZWN0b3J5DQoJCQkJJGVvZGlyWyd0b3RhbF9lbnRyaWVzX3RoaXMn XSA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB0b3RhbCBudW1iZXIgb2YgZW50 cmllcyBpbiB0aGUgY2VudHJhbCBkaXIgb24gdGhpcyBkaXNrDQoJCQkJJGVvZGlyWyd0b3Rh bF9lbnRyaWVzJ10gICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB0b3Rh bCBudW1iZXIgb2YgZW50cmllcyBpbg0KCQkJCSRlb2Rpclsnc2l6ZV9vZl9jZCddICAgICAg ICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gc2l6ZSBvZiB0aGUgY2VudHJh bCBkaXJlY3RvcnkNCgkJCQkkZW9kaXJbJ29mZnNldF9zdGFydF9jZCddICAgID0gdW5wYWNr KCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIG9mZnNldCBvZiBzdGFydCBvZiBjZW50cmFsIGRp cmVjdG9yeSB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YXJ0aW5nIGRpc2sgbnVtYmVyDQoJCQkJ JHppcEZpbGVDb21tZW50TGVuZ2h0ICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwg MikpOyAvLyB6aXBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkJJGVvZGlyWyd6aXBmaWxlX2Nv bW1lbnQnXSAgICA9ICR6aXBGaWxlQ29tbWVudExlbmdodFsxXT9mcmVhZCgkZmgsICR6aXBG aWxlQ29tbWVudExlbmdodFsxXSk6Jyc7IC8vIHppcGZpbGUgY29tbWVudA0KCQkJCSR0aGlz LT5lbmRPZkNlbnRyYWwgPSBBcnJheSgNCgkJCQkJJ2Rpc2tfbnVtYmVyX3RoaXMnPT4kZW9k aXJbJ2Rpc2tfbnVtYmVyX3RoaXMnXVsxXSwNCgkJCQkJJ2Rpc2tfbnVtYmVyJz0+JGVvZGly WydkaXNrX251bWJlciddWzFdLA0KCQkJCQkndG90YWxfZW50cmllc190aGlzJz0+JGVvZGly Wyd0b3RhbF9lbnRyaWVzX3RoaXMnXVsxXSwNCgkJCQkJJ3RvdGFsX2VudHJpZXMnPT4kZW9k aXJbJ3RvdGFsX2VudHJpZXMnXVsxXSwNCgkJCQkJJ3NpemVfb2ZfY2QnPT4kZW9kaXJbJ3Np emVfb2ZfY2QnXVsxXSwNCgkJCQkJJ29mZnNldF9zdGFydF9jZCc9PiRlb2Rpclsnb2Zmc2V0 X3N0YXJ0X2NkJ11bMV0sDQoJCQkJCSd6aXBmaWxlX2NvbW1lbnQnPT4kZW9kaXJbJ3ppcGZp bGVfY29tbWVudCddLA0KCQkJCSk7DQoNCgkJCQkvLyBUaGVuLCBsb2FkIGZpbGUgbGlzdA0K CQkJCWZzZWVrKCRmaCwgJHRoaXMtPmVuZE9mQ2VudHJhbFsnb2Zmc2V0X3N0YXJ0X2NkJ10p Ow0KCQkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KCQkJCQ0KCQkJCXdoaWxlKCRz aWduYXR1cmUgPT0gJHRoaXMtPmRpclNpZ25hdHVyZSl7DQoJCQkJCSRkaXJbJ3ZlcnNpb25f bWFkZWJ5J10gICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJzaW9u IG1hZGUgYnkNCgkJCQkJJGRpclsndmVyc2lvbl9uZWVkZWQnXSAgICAgID0gdW5wYWNrKCJ2 IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJhY3QNCgkJCQkJ JGRpclsnZ2VuZXJhbF9iaXRfZmxhZyddICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAy KSk7IC8vIGdlbmVyYWwgcHVycG9zZSBiaXQgZmxhZw0KCQkJCQkkZGlyWydjb21wcmVzc2lv bl9tZXRob2QnXSAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gY29tcHJlc3Np b24gbWV0aG9kDQoJCQkJCSRkaXJbJ2xhc3Rtb2RfdGltZSddICAgICAgICA9IHVucGFjaygi diIsIGZyZWFkKCRmaCwgMikpOyAvLyBsYXN0IG1vZCBmaWxlIHRpbWUNCgkJCQkJJGRpclsn bGFzdG1vZF9kYXRlJ10gICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8v IGxhc3QgbW9kIGZpbGUgZGF0ZQ0KCQkJCQkkZGlyWydjcmMtMzInXSAgICAgICAgICAgICAg PSBmcmVhZCgkZmgsIDQpOyAgICAgICAgICAgICAgLy8gY3JjLTMyDQoJCQkJCSRkaXJbJ2Nv bXByZXNzZWRfc2l6ZSddICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBj b21wcmVzc2VkIHNpemUNCgkJCQkJJGRpclsndW5jb21wcmVzc2VkX3NpemUnXSAgID0gdW5w YWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIHVuY29tcHJlc3NlZCBzaXplDQoJCQkJCSRm aWxlTmFtZUxlbmd0aCAgICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikp OyAvLyBmaWxlbmFtZSBsZW5ndGgNCgkJCQkJJGV4dHJhRmllbGRMZW5ndGggICAgICAgICAg ID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGV4dHJhIGZpZWxkIGxlbmd0aA0K CQkJCQkkZmlsZUNvbW1lbnRMZW5ndGggICAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgk ZmgsIDIpKTsgLy8gZmlsZSBjb21tZW50IGxlbmd0aA0KCQkJCQkkZGlyWydkaXNrX251bWJl cl9zdGFydCddICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZGlzayBudW1i ZXIgc3RhcnQNCgkJCQkJJGRpclsnaW50ZXJuYWxfYXR0cmlidXRlcyddID0gdW5wYWNrKCJ2 IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGludGVybmFsIGZpbGUgYXR0cmlidXRlcy1ieXRlMQ0K CQkJCQkkZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMSddPSB1bnBhY2soInYiLCBmcmVhZCgk ZmgsIDIpKTsgLy8gZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzLWJ5dGUyDQoJCQkJCSRkaXJb J2V4dGVybmFsX2F0dHJpYnV0ZXMyJ109IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAv LyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCQkJJGRpclsncmVsYXRpdmVfb2Zmc2V0 J10gICAgID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIHJlbGF0aXZlIG9mZnNl dCBvZiBsb2NhbCBoZWFkZXINCgkJCQkJJGRpclsnZmlsZV9uYW1lJ10gICAgICAgICAgID0g ZnJlYWQoJGZoLCAkZmlsZU5hbWVMZW5ndGhbMV0pOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gZmlsZW5hbWUNCgkJCQkJJGRpclsnZXh0cmFfZmllbGQnXSAgICAgICAgID0g JGV4dHJhRmllbGRMZW5ndGhbMV0gP2ZyZWFkKCRmaCwgJGV4dHJhRmllbGRMZW5ndGhbMV0p IDonJzsgLy8gZXh0cmEgZmllbGQNCgkJCQkJJGRpclsnZmlsZV9jb21tZW50J10gICAgICAg ID0gJGZpbGVDb21tZW50TGVuZ3RoWzFdP2ZyZWFkKCRmaCwgJGZpbGVDb21tZW50TGVuZ3Ro WzFdKTonJzsgLy8gZmlsZSBjb21tZW50CQkJDQoJCQkJCQ0KCQkJCQkvLyBDb252ZXJ0IHRo ZSBkYXRlIGFuZCB0aW1lLCBmcm9tIE1TLURPUyBmb3JtYXQgdG8gVU5JWCBUaW1lc3RhbXAN CgkJCQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9wYWQoZGVjYmluKCRkaXJbJ2xhc3Rtb2Rf ZGF0ZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCQkJJEJJTmxhc3Rtb2Rf dGltZSA9IHN0cl9wYWQoZGVjYmluKCRkaXJbJ2xhc3Rtb2RfdGltZSddWzFdKSwgMTYsICcw JywgU1RSX1BBRF9MRUZUKTsNCgkJCQkJJGxhc3Rtb2RfZGF0ZVkgPSBiaW5kZWMoc3Vic3Ry KCRCSU5sYXN0bW9kX2RhdGUsICAwLCA3KSkrMTk4MDsNCgkJCQkJJGxhc3Rtb2RfZGF0ZU0g PSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsICA3LCA0KSk7DQoJCQkJCSRsYXN0 bW9kX2RhdGVEID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAxMSwgNSkpOw0K CQkJCQkkbGFzdG1vZF90aW1lSCA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwg ICAwLCA1KSk7DQoJCQkJCSRsYXN0bW9kX3RpbWVNID0gYmluZGVjKHN1YnN0cigkQklObGFz dG1vZF90aW1lLCAgIDUsIDYpKTsNCgkJCQkJJGxhc3Rtb2RfdGltZVMgPSBiaW5kZWMoc3Vi c3RyKCRCSU5sYXN0bW9kX3RpbWUsICAxMSwgNSkpOwkNCgkJCQkJDQoJCQkJCS8vIFNvbWUg cHJvdGVjdGlvbiBhZ2FpbnMgYXR0YWNrcy4uLg0KCQkJCQlpZighJGRpclsnZmlsZV9uYW1l J10gPSAkdGhpcy0+X3Byb3RlY3QoJGRpclsnZmlsZV9uYW1lJ10pKQ0KCQkJCQkJY29udGlu dWU7DQoJCQkJCQ0KCQkJCQkkdGhpcy0+Y2VudHJhbERpckxpc3RbJGRpclsnZmlsZV9uYW1l J11dID0gQXJyYXkoDQoJCQkJCQkndmVyc2lvbl9tYWRlYnknPT4kZGlyWyd2ZXJzaW9uX21h ZGVieSddWzFdLA0KCQkJCQkJJ3ZlcnNpb25fbmVlZGVkJz0+JGRpclsndmVyc2lvbl9uZWVk ZWQnXVsxXSwNCgkJCQkJCSdnZW5lcmFsX2JpdF9mbGFnJz0+c3RyX3BhZChkZWNiaW4oJGRp clsnZ2VuZXJhbF9iaXRfZmxhZyddWzFdKSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJ CQkJJ2NvbXByZXNzaW9uX21ldGhvZCc9PiRkaXJbJ2NvbXByZXNzaW9uX21ldGhvZCddWzFd LA0KCQkJCQkJJ2xhc3Rtb2RfZGF0ZXRpbWUnICA9Pm1rdGltZSgkbGFzdG1vZF90aW1lSCwg JGxhc3Rtb2RfdGltZU0sICRsYXN0bW9kX3RpbWVTLCAkbGFzdG1vZF9kYXRlTSwgJGxhc3Rt b2RfZGF0ZUQsICRsYXN0bW9kX2RhdGVZKSwNCgkJCQkJCSdjcmMtMzInICAgICAgICAgICAg PT5zdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bM10pKSwgMiwgJzAnLCBTVFJf UEFEX0xFRlQpLg0KCQkJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZGlyWydjcmMt MzInXVsyXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkJCSAgc3RyX3Bh ZChkZWNoZXgob3JkKCRkaXJbJ2NyYy0zMiddWzFdKSksIDIsICcwJywgU1RSX1BBRF9MRUZU KS4NCgkJCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bMF0p KSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2NvbXByZXNzZWRfc2l6ZSc9PiRk aXJbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCQkJJ3VuY29tcHJlc3NlZF9zaXplJz0+ JGRpclsndW5jb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkJCSdkaXNrX251bWJlcl9zdGFy dCc9PiRkaXJbJ2Rpc2tfbnVtYmVyX3N0YXJ0J11bMV0sDQoJCQkJCQknaW50ZXJuYWxfYXR0 cmlidXRlcyc9PiRkaXJbJ2ludGVybmFsX2F0dHJpYnV0ZXMnXVsxXSwNCgkJCQkJCSdleHRl cm5hbF9hdHRyaWJ1dGVzMSc9PiRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMxJ11bMV0sDQoJ CQkJCQknZXh0ZXJuYWxfYXR0cmlidXRlczInPT4kZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVz MiddWzFdLA0KCQkJCQkJJ3JlbGF0aXZlX29mZnNldCc9PiRkaXJbJ3JlbGF0aXZlX29mZnNl dCddWzFdLA0KCQkJCQkJJ2ZpbGVfbmFtZSc9PiRkaXJbJ2ZpbGVfbmFtZSddLA0KCQkJCQkJ J2V4dHJhX2ZpZWxkJz0+JGRpclsnZXh0cmFfZmllbGQnXSwNCgkJCQkJCSdmaWxlX2NvbW1l bnQnPT4kZGlyWydmaWxlX2NvbW1lbnQnXSwNCgkJCQkJKTsNCgkJCQkJJHNpZ25hdHVyZSA9 IGZyZWFkKCRmaCwgNCk7DQoJCQkJfQ0KCQkJCQ0KCQkJCS8vIElmIGxvYWRlZCBjZW50cmFs RGlycywgdGhlbiB0cnkgdG8gaWRlbnRpZnkgdGhlIG9mZnNldFBvc2l0aW9uIG9mIHRoZSBj b21wcmVzc2VkIGRhdGEuDQoJCQkJaWYoJHRoaXMtPmNlbnRyYWxEaXJMaXN0KSBmb3JlYWNo KCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZW5hbWU9PiRkZXRhaWxzKXsNCgkJCQkJ JGkgPSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1hdGlvbigkZmgsICRkZXRhaWxzWydy ZWxhdGl2ZV9vZmZzZXQnXSk7DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5h bWVdWydmaWxlX25hbWUnXSAgICAgICAgICA9ICRmaWxlbmFtZTsNCgkJCQkJJHRoaXMtPmNv bXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NvbXByZXNzaW9uX21ldGhvZCddID0gJGRldGFp bHNbJ2NvbXByZXNzaW9uX21ldGhvZCddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3Rb JGZpbGVuYW1lXVsndmVyc2lvbl9uZWVkZWQnXSAgICAgPSAkZGV0YWlsc1sndmVyc2lvbl9u ZWVkZWQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2xhc3Rt b2RfZGF0ZXRpbWUnXSAgID0gJGRldGFpbHNbJ2xhc3Rtb2RfZGF0ZXRpbWUnXTsNCgkJCQkJ JHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NyYy0zMiddICAgICAgICAgICAg ID0gJGRldGFpbHNbJ2NyYy0zMiddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZp bGVuYW1lXVsnY29tcHJlc3NlZF9zaXplJ10gICAgPSAkZGV0YWlsc1snY29tcHJlc3NlZF9z aXplJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWyd1bmNvbXBy ZXNzZWRfc2l6ZSddICA9ICRkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddOw0KCQkJCQkk dGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnbGFzdG1vZF9kYXRldGltZSddICAg PSAkZGV0YWlsc1snbGFzdG1vZF9kYXRldGltZSddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3Nl ZExpc3RbJGZpbGVuYW1lXVsnZXh0cmFfZmllbGQnXSAgICAgICAgPSAkaVsnZXh0cmFfZmll bGQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NvbnRlbnRz LXN0YXJ0T2Zmc2V0J109JGlbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J107DQoJCQkJCWlmKHN0 cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0cnRvbG93ZXIoJGZpbGVuYW1lKSkNCgkJCQkJ CWJyZWFrOw0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4g ZmFsc2U7DQoJfQ0KCUZ1bmN0aW9uIF9sb2FkRmlsZUxpc3RCeVNpZ25hdHVyZXMoJiRmaCwg JHN0b3BPbkZpbGU9ZmFsc2Upew0KCQlmc2VlaygkZmgsIDApOw0KCQkNCgkJJHJldHVybiA9 IGZhbHNlOw0KCQlmb3IoOzspew0KCQkJJGRldGFpbHMgPSAkdGhpcy0+X2dldEZpbGVIZWFk ZXJJbmZvcm1hdGlvbigkZmgpOw0KCQkJaWYoISRkZXRhaWxzKXsNCgkJCQkkdGhpcy0+ZGVi dWdNc2coMSwgIkludmFsaWQgc2lnbmF0dXJlLiBUcnlpbmcgdG8gdmVyaWZ5IGlmIGlzIG9s ZCBzdHlsZSBEYXRhIERlc2NyaXB0b3IuLi4iKTsNCgkJCQlmc2VlaygkZmgsIDEyIC0gNCwg U0VFS19DVVIpOyAvLyAxMjogRGF0YSBkZXNjcmlwdG9yIC0gNDogU2lnbmF0dXJlICh0aGF0 IHdpbGwgYmUgcmVhZCBhZ2FpbikNCgkJCQkkZGV0YWlscyA9ICR0aGlzLT5fZ2V0RmlsZUhl YWRlckluZm9ybWF0aW9uKCRmaCk7DQoJCQl9DQoJCQlpZighJGRldGFpbHMpew0KCQkJCSR0 aGlzLT5kZWJ1Z01zZygxLCAiU3RpbGwgaW52YWxpZCBzaWduYXR1cmUuIFByb2JhYmx5IHJl YWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlsZS4iKTsNCgkJCQlicmVhazsNCgkJCX0NCgkJCSRm aWxlbmFtZSA9ICRkZXRhaWxzWydmaWxlX25hbWUnXTsNCgkJCSR0aGlzLT5jb21wcmVzc2Vk TGlzdFskZmlsZW5hbWVdID0gJGRldGFpbHM7DQoJCQkkcmV0dXJuID0gdHJ1ZTsNCgkJCWlm KHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0cnRvbG93ZXIoJGZpbGVuYW1lKSkNCgkJ CQlicmVhazsNCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXR1cm47DQoJfQ0KCUZ1bmN0aW9uIF9n ZXRGaWxlSGVhZGVySW5mb3JtYXRpb24oJiRmaCwgJHN0YXJ0T2Zmc2V0PWZhbHNlKXsNCgkJ aWYoJHN0YXJ0T2Zmc2V0ICE9PSBmYWxzZSkNCgkJCWZzZWVrKCRmaCwgJHN0YXJ0T2Zmc2V0 KTsNCgkJDQoJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KCQlpZigkc2lnbmF0dXJl ID09ICR0aGlzLT56aXBTaWduYXR1cmUpew0KCQkJIyAkdGhpcy0+ZGVidWdNc2coMSwgIlpp cCBTaWduYXR1cmUhIik7DQoJCQkNCgkJCS8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUg emlwcGVkIGZpbGUNCgkJCSRmaWxlWyd2ZXJzaW9uX25lZWRlZCddICAgICA9IHVucGFjaygi diIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0DQoJCQkk ZmlsZVsnZ2VuZXJhbF9iaXRfZmxhZyddICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIp KTsgLy8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnDQoJCQkkZmlsZVsnY29tcHJlc3Npb25f bWV0aG9kJ10gPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gY29tcHJlc3Npb24g bWV0aG9kDQoJCQkkZmlsZVsnbGFzdG1vZF90aW1lJ10gICAgICAgPSB1bnBhY2soInYiLCBm cmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSB0aW1lDQoJCQkkZmlsZVsnbGFzdG1v ZF9kYXRlJ10gICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBt b2QgZmlsZSBkYXRlDQoJCQkkZmlsZVsnY3JjLTMyJ10gICAgICAgICAgICAgPSBmcmVhZCgk ZmgsIDQpOyAgICAgICAgICAgICAgLy8gY3JjLTMyDQoJCQkkZmlsZVsnY29tcHJlc3NlZF9z aXplJ10gICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gY29tcHJlc3NlZCBz aXplDQoJCQkkZmlsZVsndW5jb21wcmVzc2VkX3NpemUnXSAgPSB1bnBhY2soIlYiLCBmcmVh ZCgkZmgsIDQpKTsgLy8gdW5jb21wcmVzc2VkIHNpemUNCgkJCSRmaWxlTmFtZUxlbmd0aCAg ICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBmaWxlbmFtZSBs ZW5ndGgNCgkJCSRleHRyYUZpZWxkTGVuZ3RoICAgICAgICAgICA9IHVucGFjaygidiIsIGZy ZWFkKCRmaCwgMikpOyAvLyBleHRyYSBmaWVsZCBsZW5ndGgNCgkJCSRmaWxlWydmaWxlX25h bWUnXSAgICAgICAgICA9IGZyZWFkKCRmaCwgJGZpbGVOYW1lTGVuZ3RoWzFdKTsgLy8gZmls ZW5hbWUNCgkJCSRmaWxlWydleHRyYV9maWVsZCddICAgICAgICA9ICRleHRyYUZpZWxkTGVu Z3RoWzFdP2ZyZWFkKCRmaCwgJGV4dHJhRmllbGRMZW5ndGhbMV0pOicnOyAvLyBleHRyYSBm aWVsZA0KCQkJJGZpbGVbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J109IGZ0ZWxsKCRmaCk7DQoJ CQkNCgkJCS8vIEJ5cGFzcyB0aGUgd2hvbGUgY29tcHJlc3NlZCBjb250ZW50cywgYW5kIGxv b2sgZm9yIHRoZSBuZXh0IGZpbGUNCgkJCWZzZWVrKCRmaCwgJGZpbGVbJ2NvbXByZXNzZWRf c2l6ZSddWzFdLCBTRUVLX0NVUik7DQoJCQkNCgkJCS8vIENvbnZlcnQgdGhlIGRhdGUgYW5k IHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBVTklYIFRpbWVzdGFtcA0KCQkJJEJJTmxh c3Rtb2RfZGF0ZSA9IHN0cl9wYWQoZGVjYmluKCRmaWxlWydsYXN0bW9kX2RhdGUnXVsxXSks IDE2LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQkkQklObGFzdG1vZF90aW1lID0gc3RyX3Bh ZChkZWNiaW4oJGZpbGVbJ2xhc3Rtb2RfdGltZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9M RUZUKTsNCgkJCSRsYXN0bW9kX2RhdGVZID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9k YXRlLCAgMCwgNykpKzE5ODA7DQoJCQkkbGFzdG1vZF9kYXRlTSA9IGJpbmRlYyhzdWJzdHIo JEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsNCgkJCSRsYXN0bW9kX2RhdGVEID0gYmluZGVj KHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAxMSwgNSkpOw0KCQkJJGxhc3Rtb2RfdGltZUgg PSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAgMCwgNSkpOw0KCQkJJGxhc3Rt b2RfdGltZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAgNSwgNikpOw0K CQkJJGxhc3Rtb2RfdGltZVMgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAx MSwgNSkpOw0KCQkJDQoJCQkvLyBTb21lIHByb3RlY3Rpb24gYWdhaW5zIGF0dGFja3MuLi4N CgkJCWlmKCEkZmlsZVsnZmlsZV9uYW1lJ10gPSAkdGhpcy0+X3Byb3RlY3QoJGZpbGVbJ2Zp bGVfbmFtZSddKSkNCgkJCQlyZXR1cm47DQoJCQkNCgkJCS8vIE1vdW50IGZpbGUgdGFibGUN CgkJCSRpID0gQXJyYXkoDQoJCQkJJ2ZpbGVfbmFtZScgICAgICAgICA9PiRmaWxlWydmaWxl X25hbWUnXSwNCgkJCQknY29tcHJlc3Npb25fbWV0aG9kJz0+JGZpbGVbJ2NvbXByZXNzaW9u X21ldGhvZCddWzFdLA0KCQkJCSd2ZXJzaW9uX25lZWRlZCcgICAgPT4kZmlsZVsndmVyc2lv bl9uZWVkZWQnXVsxXSwNCgkJCQknbGFzdG1vZF9kYXRldGltZScgID0+bWt0aW1lKCRsYXN0 bW9kX3RpbWVILCAkbGFzdG1vZF90aW1lTSwgJGxhc3Rtb2RfdGltZVMsICRsYXN0bW9kX2Rh dGVNLCAkbGFzdG1vZF9kYXRlRCwgJGxhc3Rtb2RfZGF0ZVkpLA0KCQkJCSdjcmMtMzInICAg ICAgICAgICAgPT5zdHJfcGFkKGRlY2hleChvcmQoJGZpbGVbJ2NyYy0zMiddWzNdKSksIDIs ICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCSAgc3RyX3BhZChkZWNoZXgob3JkKCRm aWxlWydjcmMtMzInXVsyXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkg IHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11bMV0pKSwgMiwgJzAnLCBTVFJf UEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGZpbGVbJ2NyYy0z MiddWzBdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKSwNCgkJCQknY29tcHJlc3NlZF9zaXpl JyAgID0+JGZpbGVbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCSd1bmNvbXByZXNzZWRf c2l6ZScgPT4kZmlsZVsndW5jb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQknZXh0cmFfZmll bGQnICAgICAgID0+JGZpbGVbJ2V4dHJhX2ZpZWxkJ10sDQoJCQkJJ2dlbmVyYWxfYml0X2Zs YWcnICA9PnN0cl9wYWQoZGVjYmluKCRmaWxlWydnZW5lcmFsX2JpdF9mbGFnJ11bMV0pLCA4 LCAnMCcsIFNUUl9QQURfTEVGVCksDQoJCQkJJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0Jz0+JGZp bGVbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10NCgkJCSk7DQoJCQlyZXR1cm4gJGk7DQoJCX0N CgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglGdW5jdGlvbiBfcHJvdGVjdCgkZnVsbFBhdGgp ew0KCQkvLyBLbm93biBoYWNrLWF0dGFja3MgKGZpbGVuYW1lIGxpa2UpOg0KCQkvLyAgIC9o b21lL3Vzcg0KCQkvLyAgIC4uLy4uL2hvbWUvdXNyDQoJCS8vICAgZm9sZGVyLy4uLy4uLy4u L2hvbWUvdXNyDQoJCS8vICAgc2FtcGxlLyh4MCkuLi9ob21lL3Vzcg0KCQkNCgkJJGZ1bGxQ YXRoID0gc3RydHIoJGZ1bGxQYXRoLCAiOio8PnxcIlx4MFxcIiwgIi4uLi4uLi4vIik7DQoJ CXdoaWxlKCRmdWxsUGF0aFswXSA9PSAiLyIpDQoJCQkkZnVsbFBhdGggPSBzdWJzdHIoJGZ1 bGxQYXRoLCAxKTsNCgkJDQoJCWlmKHN1YnN0cigkZnVsbFBhdGgsIC0xKSA9PSAiLyIpew0K CQkJJGJhc2UgICAgID0gJyc7DQoJCQkkZnVsbFBhdGggPSBzdWJzdHIoJGZ1bGxQYXRoLCAw LCAtMSk7DQoJCX0NCgkJZWxzZXsNCgkJCSRiYXNlICAgICA9IGJhc2VuYW1lKCRmdWxsUGF0 aCk7DQoJCQkkZnVsbFBhdGggPSBkaXJuYW1lKCRmdWxsUGF0aCk7DQoJCX0NCgkJDQoJCSRw YXJ0cyAgID0gZXhwbG9kZSgiLyIsICRmdWxsUGF0aCk7DQoJCSRsYXN0SWR4ID0gZmFsc2U7 DQoJCWZvcmVhY2goJHBhcnRzIGFzICRpZHg9PiRwYXJ0KXsNCgkJCWlmKCRwYXJ0ID09ICIu IikNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0pOw0KCQkJZWxzZWlmKCRwYXJ0ID09ICIuLiIp ew0KCQkJCXVuc2V0KCRwYXJ0c1skaWR4XSk7DQoJCQkJaWYoJGxhc3RJZHggIT09IGZhbHNl KXsNCgkJCQkJdW5zZXQoJHBhcnRzWyRsYXN0SWR4XSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxz ZWlmKCRwYXJ0ID09PSAnJyl7DQoJCQkJdW5zZXQoJHBhcnRzWyRpZHhdKTsNCgkJCX0NCgkJ CWVsc2V7DQoJCQkJJGxhc3RJZHggPSAkaWR4Ow0KCQkJfQ0KCQl9DQoJCQ0KCQkkZnVsbFBh dGggPSBzaXplb2YoJHBhcnRzKT9pbXBsb2RlKCIvIiwgJHBhcnRzKS4iLyI6IiI7DQoJCXJl dHVybiAkZnVsbFBhdGguJGJhc2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfZFppcHsNCgl2YXIg JGZpbGVuYW1lOw0KCXZhciAkb3ZlcndyaXRlOw0KCQ0KCXZhciAkemlwU2lnbmF0dXJlID0g Ilx4NTBceDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmUNCgl2 YXIgJGRpclNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBkaXIg aGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4 MDYiOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoJdmFyICRmaWxlc19jb3Vu dCAgPSAwOw0KCXZhciAkZmg7DQoJDQoJRnVuY3Rpb24gc21kX2RaaXAoJGZpbGVuYW1lLCAk b3ZlcndyaXRlPXRydWUpew0KCQkkdGhpcy0+ZmlsZW5hbWUgID0gJGZpbGVuYW1lOw0KCQkk dGhpcy0+b3ZlcndyaXRlID0gJG92ZXJ3cml0ZTsNCgl9DQoJRnVuY3Rpb24gYWRkRGlyKCRk aXJuYW1lLCAkZmlsZUNvbW1lbnRzPScnKXsNCgkJaWYoc3Vic3RyKCRkaXJuYW1lLCAtMSkg IT0gJy8nKQ0KCQkJJGRpcm5hbWUgLj0gJy8nOw0KCQkkdGhpcy0+YWRkRmlsZShmYWxzZSwg JGRpcm5hbWUsICRmaWxlQ29tbWVudHMpOw0KCX0NCglGdW5jdGlvbiBhZGRGaWxlKCRmaWxl bmFtZSwgJGNmaWxlbmFtZSwgJGZpbGVDb21tZW50cz0nJywgJGRhdGE9ZmFsc2Upew0KCQlp ZighKCRmaCA9ICYkdGhpcy0+ZmgpKQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1l LCAkdGhpcy0+b3ZlcndyaXRlPyd3Yic6J2ErYicpOw0KCQkNCgkJLy8gJGZpbGVuYW1lIGNh biBiZSBhIGxvY2FsIGZpbGUgT1IgdGhlIGRhdGEgd2ljaCB3aWxsIGJlIGNvbXByZXNzZWQN CgkJaWYoc3Vic3RyKCRjZmlsZW5hbWUsIC0xKT09Jy8nKXsNCgkJCSRkZXRhaWxzWyd1bmNz aXplJ10gPSAwOw0KCQkJJGRhdGEgPSAnJzsNCgkJfQ0KCQllbHNlaWYoZmlsZV9leGlzdHMo JGZpbGVuYW1lKSl7DQoJCQkkZGV0YWlsc1sndW5jc2l6ZSddID0gZmlsZXNpemUoJGZpbGVu YW1lKTsNCgkJCSRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsNCgkJfQ0K CQllbHNlaWYoJGZpbGVuYW1lKXsNCgkJCWVjaG8gIjxiPkNhbm5vdCBhZGQgJGZpbGVuYW1l LiBGaWxlIG5vdCBmb3VuZDwvYj48YnI+IjsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQll bHNlew0KCQkJJGRldGFpbHNbJ3VuY3NpemUnXSA9IHN0cmxlbigkZmlsZW5hbWUpOw0KCQkJ Ly8gREFUQSBpcyBnaXZlbi4uIHVzZSBpdCEgOnwNCgkJfQ0KCQkNCgkJLy8gaWYgZGF0YSB0 byBjb21wcmVzcyBpcyB0b28gc21hbGwsIGp1c3Qgc3RvcmUgaXQNCgkJaWYoJGRldGFpbHNb J3VuY3NpemUnXSA8IDI1Nil7DQoJCQkkZGV0YWlsc1snY29tc2l6ZSddID0gJGRldGFpbHNb J3VuY3NpemUnXTsNCgkJCSRkZXRhaWxzWyd2bmVlZGVkJ10gPSAxMDsNCgkJCSRkZXRhaWxz WydjbWV0aG9kJ10gPSAwOw0KCQkJJHpkYXRhID0gJiRkYXRhOw0KCQl9DQoJCWVsc2V7IC8v IG90aGVyd2lzZSwgY29tcHJlc3MgaXQNCgkJCSR6ZGF0YSA9IGd6Y29tcHJlc3MoJGRhdGEp Ow0KCQkJJHpkYXRhID0gc3Vic3RyKHN1YnN0cigkemRhdGEsIDAsIHN0cmxlbigkemRhdGEp IC0gNCksIDIpOyAvLyBmaXggY3JjIGJ1ZyAodGhhbmtzIHRvIEVyaWMgTXVlbGxlcikNCgkJ CSRkZXRhaWxzWydjb21zaXplJ10gPSBzdHJsZW4oJHpkYXRhKTsNCgkJCSRkZXRhaWxzWyd2 bmVlZGVkJ10gPSAxMDsNCgkJCSRkZXRhaWxzWydjbWV0aG9kJ10gPSA4Ow0KCQl9DQoJCQ0K CQkkZGV0YWlsc1snYml0ZmxhZyddID0gMDsNCgkJJGRldGFpbHNbJ2NyY18zMiddICA9IGNy YzMyKCRkYXRhKTsNCgkJDQoJCS8vIENvbnZlcnQgZGF0ZSBhbmQgdGltZSB0byBET1MgRm9y bWF0LCBhbmQgc2V0IHRoZW4NCgkJJGxhc3Rtb2RfdGltZVMgID0gc3RyX3BhZChkZWNiaW4o ZGF0ZSgncycpPj0zMj9kYXRlKCdzJyktMzI6ZGF0ZSgncycpKSwgNSwgJzAnLCBTVFJfUEFE X0xFRlQpOw0KCQkkbGFzdG1vZF90aW1lTSAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdpJykp LCA2LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX3RpbWVIICA9IHN0cl9wYWQo ZGVjYmluKGRhdGUoJ0gnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJGxhc3Rtb2Rf ZGF0ZUQgID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnZCcpKSwgNSwgJzAnLCBTVFJfUEFEX0xF RlQpOw0KCQkkbGFzdG1vZF9kYXRlTSAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdtJykpLCA0 LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX2RhdGVZICA9IHN0cl9wYWQoZGVj YmluKGRhdGUoJ1knKS0xOTgwKSwgNywgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkNCgkJIyBl Y2hvICJNb2RUaW1lOiAkbGFzdG1vZF90aW1lUy0kbGFzdG1vZF90aW1lTS0kbGFzdG1vZF90 aW1lSCAoIi5kYXRlKCJzIEggSCIpLiIpXG4iOw0KCQkjIGVjaG8gIk1vZERhdGU6ICRsYXN0 bW9kX2RhdGVELSRsYXN0bW9kX2RhdGVNLSRsYXN0bW9kX2RhdGVZICgiLmRhdGUoImQgbSBZ IikuIilcbiI7DQoJCSRkZXRhaWxzWydtb2R0aW1lJ10gPSBiaW5kZWMoIiRsYXN0bW9kX3Rp bWVIJGxhc3Rtb2RfdGltZU0kbGFzdG1vZF90aW1lUyIpOw0KCQkkZGV0YWlsc1snbW9kZGF0 ZSddID0gYmluZGVjKCIkbGFzdG1vZF9kYXRlWSRsYXN0bW9kX2RhdGVNJGxhc3Rtb2RfZGF0 ZUQiKTsNCgkJDQoJCSRkZXRhaWxzWydvZmZzZXQnXSA9IGZ0ZWxsKCRmaCk7DQoJCWZ3cml0 ZSgkZmgsICR0aGlzLT56aXBTaWduYXR1cmUpOw0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywg JGRldGFpbHNbJ3ZuZWVkZWQnXSkpOyAvLyB2ZXJzaW9uX25lZWRlZA0KCQlmd3JpdGUoJGZo LCBwYWNrKCdzJywgJGRldGFpbHNbJ2JpdGZsYWcnXSkpOyAvLyBnZW5lcmFsX2JpdF9mbGFn DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1snY21ldGhvZCddKSk7IC8vIGNv bXByZXNzaW9uX21ldGhvZA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ21v ZHRpbWUnXSkpOyAvLyBsYXN0bW9kX3RpbWUNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRk ZXRhaWxzWydtb2RkYXRlJ10pKTsgLy8gbGFzdG1vZF9kYXRlDQoJCWZ3cml0ZSgkZmgsIHBh Y2soJ1YnLCAkZGV0YWlsc1snY3JjXzMyJ10pKTsgIC8vIGNyYy0zMg0KCQlmd3JpdGUoJGZo LCBwYWNrKCdJJywgJGRldGFpbHNbJ2NvbXNpemUnXSkpOyAvLyBjb21wcmVzc2VkX3NpemUN CgkJZndyaXRlKCRmaCwgcGFjaygnSScsICRkZXRhaWxzWyd1bmNzaXplJ10pKTsgLy8gdW5j b21wcmVzc2VkX3NpemUNCgkJZndyaXRlKCRmaCwgcGFjaygncycsIHN0cmxlbigkY2ZpbGVu YW1lKSkpOyAgIC8vIGZpbGVfbmFtZV9sZW5ndGgNCgkJZndyaXRlKCRmaCwgcGFjaygncycs IDApKTsgIC8vIGV4dHJhX2ZpZWxkX2xlbmd0aA0KCQlmd3JpdGUoJGZoLCAkY2ZpbGVuYW1l KTsgICAgLy8gZmlsZV9uYW1lDQoJCS8vIGlnbm9yaW5nIGV4dHJhX2ZpZWxkDQoJCWZ3cml0 ZSgkZmgsICR6ZGF0YSk7DQoJCQ0KCQkvLyBBcHBlbmQgaXQgdG8gY2VudHJhbCBkaXINCgkJ JGRldGFpbHNbJ2V4dGVybmFsX2F0dHJpYnV0ZXMnXSAgPSAoc3Vic3RyKCRjZmlsZW5hbWUs IC0xKT09Jy8nJiYhJHpkYXRhKT8xNjozMjsgLy8gRGlyZWN0b3J5IG9yIGZpbGUgbmFtZQ0K CQkkZGV0YWlsc1snY29tbWVudHMnXSAgICAgICAgICAgICA9ICRmaWxlQ29tbWVudHM7DQoJ CSR0aGlzLT5hcHBlbmRDZW50cmFsRGlyKCRjZmlsZW5hbWUsICRkZXRhaWxzKTsNCgkJJHRo aXMtPmZpbGVzX2NvdW50Kys7DQoJfQ0KCUZ1bmN0aW9uIHNldEV4dHJhKCRmaWxlbmFtZSwg JHByb3BlcnR5LCAkdmFsdWUpew0KCQkkdGhpcy0+Y2VudHJhbGRpcnNbJGZpbGVuYW1lXVsk cHJvcGVydHldID0gJHZhbHVlOw0KCX0NCglGdW5jdGlvbiBzYXZlKCR6aXBDb21tZW50cz0n Jyl7DQoJCWlmKCEoJGZoID0gJiR0aGlzLT5maCkpDQoJCQkkZmggPSBmb3BlbigkdGhpcy0+ ZmlsZW5hbWUsICR0aGlzLT5vdmVyd3JpdGU/J3cnOidhKycpOw0KCQkNCgkJJGNkcmVjID0g IiI7DQoJCWZvcmVhY2goJHRoaXMtPmNlbnRyYWxkaXJzIGFzICRmaWxlbmFtZT0+JGNkKXsN CgkJCSRjZHJlYyAuPSAkdGhpcy0+ZGlyU2lnbmF0dXJlOw0KCQkJJGNkcmVjIC49ICJceDBc eDAiOyAgICAgICAgICAgICAgICAgIC8vIHZlcnNpb24gbWFkZSBieQ0KCQkJJGNkcmVjIC49 IHBhY2soJ3YnLCAkY2RbJ3ZuZWVkZWQnXSk7IC8vIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJh Y3QNCgkJCSRjZHJlYyAuPSAiXHgwXHgwIjsgICAgICAgICAgICAgICAgICAvLyBnZW5lcmFs IGJpdCBmbGFnDQoJCQkkY2RyZWMgLj0gcGFjaygndicsICRjZFsnY21ldGhvZCddKTsgLy8g Y29tcHJlc3Npb24gbWV0aG9kDQoJCQkkY2RyZWMgLj0gcGFjaygndicsICRjZFsnbW9kdGlt ZSddKTsgLy8gbGFzdG1vZCB0aW1lDQoJCQkkY2RyZWMgLj0gcGFjaygndicsICRjZFsnbW9k ZGF0ZSddKTsgLy8gbGFzdG1vZCBkYXRlDQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsn Y3JjXzMyJ10pOyAgLy8gY3JjMzINCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWydjb21z aXplJ10pOyAvLyBjb21wcmVzc2VkIGZpbGVzaXplDQoJCQkkY2RyZWMgLj0gcGFjaygnVics ICRjZFsndW5jc2l6ZSddKTsgLy8gdW5jb21wcmVzc2VkIGZpbGVzaXplDQoJCQkkY2RyZWMg Lj0gcGFjaygndicsIHN0cmxlbigkZmlsZW5hbWUpKTsgLy8gZmlsZSBjb21tZW50IGxlbmd0 aA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAwKTsgICAgICAgICAgICAgICAgLy8gZXh0cmEg ZmllbGQgbGVuZ3RoDQoJCQkkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkY2RbJ2NvbW1l bnRzJ10pKTsgLy8gZmlsZSBjb21tZW50IGxlbmd0aA0KCQkJJGNkcmVjIC49IHBhY2soJ3Yn LCAwKTsgLy8gZGlzayBudW1iZXIgc3RhcnQNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCk7 IC8vIGludGVybmFsIGZpbGUgYXR0cmlidXRlcw0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAk Y2RbJ2V4dGVybmFsX2F0dHJpYnV0ZXMnXSk7IC8vIGludGVybmFsIGZpbGUgYXR0cmlidXRl cw0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ29mZnNldCddKTsgLy8gcmVsYXRpdmUg b2Zmc2V0IG9mIGxvY2FsIGhlYWRlcg0KCQkJJGNkcmVjIC49ICRmaWxlbmFtZTsNCgkJCSRj ZHJlYyAuPSAkY2RbJ2NvbW1lbnRzJ107DQoJCX0NCgkJJGJlZm9yZV9jZCA9IGZ0ZWxsKCRm aCk7DQoJCWZ3cml0ZSgkZmgsICRjZHJlYyk7DQoJCQ0KCQkvLyBlbmQgb2YgY2VudHJhbCBk aXINCgkJZndyaXRlKCRmaCwgJHRoaXMtPmRpclNpZ25hdHVyZUUpOw0KCQlmd3JpdGUoJGZo LCBwYWNrKCd2JywgMCkpOyAvLyBudW1iZXIgb2YgdGhpcyBkaXNrDQoJCWZ3cml0ZSgkZmgs IHBhY2soJ3YnLCAwKSk7IC8vIG51bWJlciBvZiB0aGUgZGlzayB3aXRoIHRoZSBzdGFydCBv ZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkNCgkJZndyaXRlKCRmaCwgcGFjaygndicsICR0aGlz LT5maWxlc19jb3VudCkpOyAvLyB0b3RhbCAjIG9mIGVudHJpZXMgIm9uIHRoaXMgZGlzayIg DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCAkdGhpcy0+ZmlsZXNfY291bnQpKTsgLy8gdG90 YWwgIyBvZiBlbnRyaWVzIG92ZXJhbGwgDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ1YnLCBzdHJs ZW4oJGNkcmVjKSkpOyAgICAgLy8gc2l6ZSBvZiBjZW50cmFsIGRpciANCgkJZndyaXRlKCRm aCwgcGFjaygnVicsICRiZWZvcmVfY2QpKTsgICAgICAgICAvLyBvZmZzZXQgdG8gc3RhcnQg b2YgY2VudHJhbCBkaXINCgkJZndyaXRlKCRmaCwgcGFjaygndicsIHN0cmxlbigkemlwQ29t bWVudHMpKSk7IC8vIC56aXAgZmlsZSBjb21tZW50IGxlbmd0aA0KCQlmd3JpdGUoJGZoLCAk emlwQ29tbWVudHMpOw0KCQkNCgkJZmNsb3NlKCRmaCk7DQoJfQ0KCQ0KCS8vIFByaXZhdGUN CglGdW5jdGlvbiBhcHBlbmRDZW50cmFsRGlyKCRmaWxlbmFtZSwkcHJvcGVydGllcyl7DQoJ CSR0aGlzLT5jZW50cmFsZGlyc1skZmlsZW5hbWVdID0gJHByb3BlcnRpZXM7DQoJfQ0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBs YWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVxdWlyZWQNCmZ1bmN0aW9uIHNtZF9h dF9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5KA0KCQkn YWN0aW9ucycgPT4gJ0FjdGlvbnMnLA0KCQknYWxsb3dlZF9za2lucycgPT4gJ0FsbG93ZWQg dGhlbWVzOicsDQoJCSdhcHBseV9za2luJyA9PiAnQXBwbHkgdGhpcyB0aGVtZScsDQoJCSdh dmFpbF90aXRsZScgPT4gJ0F2YWlsYWJsZSB0aGVtZXMnLA0KCQknYmFzZWRfb24nID0+ICcg KGJhc2VkIG9uIHtza2lufSknLA0KCQknYnknID0+ICcgYnkgJywNCgkJJ2NfYnppcDInID0+ ICdCWmlwJywNCgkJJ2NfZ3ppcCcgPT4gJ0daaXAnLA0KCQknY190YXInID0+ICdUYXInLA0K CQknY196aXAnID0+ICdaaXAnLA0KCQknY2FzZV9zb3J0JyA9PiAnQ2FzZS1zZW5zaXRpdmUg dGhlbWUgbGlzdDonLA0KCQknY2xlYXInID0+ICdub25lJywNCgkJJ2Nsb25lJyA9PiAnQmFz ZScsDQoJCSdjb25maXJtJyA9PiAnR28nLA0KCQknY29yZV90aGVtZScgPT4gJ0Nhbm5vdCBk ZWxldGUge3NraW59OiBjb3JlIHRoZW1lJywNCgkJJ2NvcmVfdGhlbWVfZmlsZScgPT4gJ0Nh bm5vdCBkZWxldGUgZmlsZXMgZnJvbSB7c2tpbn06IGNvcmUgdGhlbWUnLA0KCQknY3J1c2hf dHlwZScgPT4gJ0V4cG9ydCBjb21wcmVzc2lvbiB0eXBlOicsDQoJCSdjcnVzaF9mb3JtYXQn ID0+ICdGb3JtYXQ6JywNCgkJJ3NzYycgPT4gJ1N0eWxlcGxhdGVzJywNCgkJJ2NzcycgPT4g J1N0eWxlcycsDQoJCSdkZWxldGVfY29uZmlybScgPT4gJ1JlYWxseSBkZWxldGUgdGhlbWUg e3NraW59PycsDQoJCSdkZWxldGVfZmFpbGVkJyA9PiAnRGVsZXRlIGZhaWxlZC4gVHJ5IHJl bW92aW5nIGl0IG1hbnVhbGx5JywNCgkJJ2VkaXRfbGJsJyA9PiAnVGhlbWUgZWRpdG9yJywN CgkJJ2VtcHR5X2luZm8nID0+ICdZb3Ugc2hvdWxkIGNob29zZSBhIGZpbGUgZmlyc3QgOi0p JywNCgkJJ2V4cG9ydCcgPT4gJ0V4cG9ydCcsDQoJCSdmaWxlX25vdF9kZWxldGVkJyA9PiAn RmlsZSB7bmFtZX0gJy5zdHJvbmcoIm5vdCIpLicgZGVsZXRlZCcsDQoJCSdmaWxlX3NhdmVk JyA9PiAnRmlsZSB7bmFtZX0gc2F2ZWQnLA0KCQknZmluZF90aGVtZScgPT4gJ0Jyb3dzZSB0 aGVtZXMnLA0KCQknZ2xvYmFsX3NraW4nID0+ICdEZWZhdWx0IHRoZW1lOicsDQoJCSdoZWxw X2xpbmsnID0+ICcoPGEgaHJlZj0ie2xpbmt9Ij5IZWxwPC9hPiknLA0KCQknaW1nJyA9PiAn SW1hZ2VzJywNCgkJJ2ltcG9ydF9mYWlsZWQnID0+ICdJbnN0YWxsYXRpb24gZmFpbGVkIDot KCBDaGVjayB0aGUgZmlsZSBzdHJ1Y3R1cmUnLA0KCQknaW1wb3J0X3N1Y2Nlc3MnID0+ICdJ bnN0YWxsYXRpb24gc3VjY2Vzc2Z1bC4gRmlsZXMgZXh0cmFjdGVkOiB7bnVtfScsDQoJCSdp bXBvcnRfb2snID0+ICdJbnN0YWxsYXRpb24gc3VjY2Vzc2Z1bC4nLA0KCQknaW5zdGFsbF9z a2luJyA9PiAnSW5zdGFsbCB0aGVtZScsDQoJCSdpbnZhbGlkX2ZpbGUnID0+ICdSb2d1ZSBm aWxlIGRldGVjdGVkOiB7bmFtZX0nLA0KCQknaXNfZ2xvYmFsJyA9PiAnIFtERUZBVUxUXScs DQoJCSdqcycgPT4gJ1NjcmlwdHMnLA0KCQknbGF5b3V0JyA9PiAnTGF5b3V0IG1ldGhvZDon LA0KCQknbGF5b3V0X2xpc3QnID0+ICdMaXN0JywNCgkJJ2xheW91dF9ncmlkJyA9PiAnR3Jp ZCcsDQoJCSdsaXN0X3RpdGxlJyA9PiAnSW5zdGFsbGVkIHRoZW1lcycsDQoJCSdtYW5hZ2Vf bGJsJyA9PiAnVGhlbWUgbWFuYWdlcicsDQoJCSdta2Rpcl9mYWlsZWQnID0+ICdDYW5ub3Qg Y3JlYXRlIGRpcmVjdG9yeSBmb3IgZmlsZSB7bmFtZX0uIFRyeSBtYW51YWxseSBjcmVhdGlu ZyBpdC4nLA0KCQknbmFtZV9lbXB0eScgPT4gJ1lvdSBzaG91bGQgZ2l2ZSB5b3VyIHRoZW1l IGEgbmFtZSA6LSknLA0KCQknbmV3JyA9PiAnQ3JlYXRlIG5ldyB0aGVtZScsDQoJCSduZXdf ZmlsZScgPT4gJ05ldyBmaWxlJywNCgkJJ25ld19jbG9uZXNraW4nID0+ICdOYW1lIG9mIGNv cHk6JywNCgkJJ25ld19za2luJyA9PiAnVGhlbWUgbmFtZTonLA0KCQknb3RoZXJfZmlsZXMn ID0+ICdPdGhlcnMnLA0KCQkncGhwJyA9PiAnQ29kZScsDQoJCSdwZXJfZ3JvdXAnID0+ICdP bmUgdGhlbWUgcGVyIHByaXZpbGVnZSBsZXZlbCcsDQoJCSdwZXJfc2l0ZScgPT4gJ09uZSB0 aGVtZSBmb3IgZXZlcnlvbmUnLA0KCQkncGVyX3VzZXInID0+ICdPbmUgdGhlbWUgcGVyIHVz ZXInLA0KCQkncHJlZnNfZGVsZXRlZCcgPT4gJ1ByZWZlcmVuY2VzIGRlbGV0ZWQnLA0KCQkn cHJlZnNfaW5zdGFsbGVkJyA9PiAnUHJlZmVyZW5jZXMgaW5zdGFsbGVkJywNCgkJJ3ByZWZz X25vdF9pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBub3QgaW5zdGFsbGVkLicsDQoJCSdw cmVmc19zb21lJyA9PiAnTm90IGFsbCBwcmVmZXJlbmNlcyBhdmFpbGFibGUuJywNCgkJJ3By ZWZzX3NvbWVfZXhwbGFpbicgPT4gJ0l0IGlzIGVpdGhlciBiZWNhdXNlIHRoaXMgaXMgYSBk aWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUnLmJyLidwbHVnaW4gdG8gb25lIHlvdSBoYWQgYmVm b3JlIG9yIHRoZSBwcmVmZXJlbmNlcycuYnIuJ2hhdmUgYmVjb21lIGNvcnJ1cHQgc29tZWhv dy4nLA0KCQkncHJlZnNfc29tZV9vcHRpb25zJyA9PiAnQ2hvb3NlICcuZ1R4dCgnZGVsZXRl JykuJyB0byByZW1vdmUgdGhlbSBhbGwgb3IgJy5nVHh0KCdpbnN0YWxsJykuJyB0byBhZGQn LmJyLidhbnkgbmV3IG9uZXMsIGxlYXZpbmcgYWxsIGV4aXN0aW5nIHByZWZlcmVuY2VzIHVu dG91Y2hlZC4nLA0KCQkncHJlZnNfdGl0bGUnID0+ICdBZG1pbiB0aGVtZSBwcmVmZXJlbmNl cycsDQoJCSdyZW5hbWVfZmFpbGVkJyA9PiAnUmVuYW1lIGZhaWxlZCcsDQoJCSdyZW5hbWVk JyA9PiAnUmVuYW1lZCB0byB7bmFtZX0nLA0KCQknc2V0JyA9PiAnU2V0JywNCgkJJ3NldHVw JyA9PiAnUHJlZmVyZW5jZXMnLA0KCQknc2tpbl9nYmwnID0+ICdUaGVtZScsDQoJCSdza2lu X2Nsb25lZCcgPT4gJ1RoZW1lIGV4dGVuZGVkIGFzIHtuYW1lfScsDQoJCSdza2luX2NyZWF0 ZWQnID0+ICdUaGVtZSB7bmFtZX0gY3JlYXRlZCcsDQoJCSdza2luX2RlbGV0ZWQnID0+ICdU aGVtZSB7bmFtZX0gZGVsZXRlZCcsDQoJCSdza2luX2V4aXN0cycgPT4gJ1RoZW1lIHtuYW1l fSBhbHJlYWR5IGV4aXN0cycsDQoJCSdza2luX2ZpbGVzJyA9PiAnVGhlbWUgZmlsZXMnLA0K CQknc2tpbl9ncm91cHMnID0+ICdHcm91cCB0aGVtZXM6JywNCgkJJ3NraW5faW1hZ2VzJyA9 PiAnVGhlbWUgaW1hZ2VzJywNCgkJJ3NraW5fbGlzdCcgPT4gJ1RoZW1lIGxpc3QnLA0KCQkn c2tpbl9ncmlkJyA9PiAnVGhlbWUgZ3JpZCcsDQoJCSdza2luX25vdF9jcmVhdGVkJyA9PiAn VGhlbWUge25hbWV9IGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBUcnkgbWFudWFsbHkgbWFraW5n IHRoZSBkaXJlY3RvcnknLA0KCQknc2tpbl9ub3RfZm91bmQnID0+ICdUaGUgdGhlbWUge25h bWV9IGNvdWxkIG5vdCBiZSBmb3VuZCcsDQoJCSdza2luX3N3aXRjaGVkJyA9PiAnVGhlbWUg c3dpdGNoZWQgdG8ge3NraW59JywNCgkJJ3NraW5fc3lzdGVtJyA9PiAnVGhlbWUgc3lzdGVt OicsDQoJCSdza2lubmVyJyA9PiAnVGhlbWUnLA0KCQknc3VwcG9ydGVkX2ltcG9ydCcgPT4g J1N1cHBvcnRlZCBpbXBvcnQgdHlwZXM6IHt0eXBlc30nLA0KCQkndGFiX25hbWUnID0+ICdB ZG1pbiB0aGVtZXMnLA0KCQkndGh1bWJzaXplJyA9PiAnVGh1bWIgZGltZW5zaW9uczonLA0K CQkndGltZXMnID0+ICcgeCAnLA0KCQkndW5zdXBwb3J0ZWRfY29tcHJlc3Npb250eXBlJyA9 PiAne2NydXNofSBpcyBub3QgYSBzdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0IGluIHRo aXMgaW5zdGFsbGF0aW9uJywNCgkJJ3Vuc3VwcG9ydGVkX2ZpbGV0eXBlJyA9PiAnRmlsZSBp cyBub3Qgb2YgYSBzdXBwb3J0ZWQgdHlwZScsDQoJCSd1bnN1cHBvcnRlZF9mdWRnZScgPT4g JzogaGl0IFNhdmUgYWdhaW4gdG8gc3RvcmUgYW55d2F5JywNCgkJJ3VwZGF0ZScgPT4gJ1Vw ZGF0ZScsDQoJCSd1cGxvYWRfZmFpbGVkJyA9PiAnSW1hZ2UgY291bGQgbm90IGJlIHVwbG9h ZGVkJywNCgkJJ3VwbG9hZF9pbWFnZScgPT4gJ1VwbG9hZCBpbWFnZScsDQoJCSd1cGxvYWRf c3VjY2VzcycgPT4gJ0ltYWdlIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseScsDQoJCSd2ZXJzaW9u JyA9PiAndicsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7DQp9 IjtzOjQ6InR5cGUiO3M6MToiMyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtz OjE6IjMiO3M6NDoiaGVscCI7czoyNDcxNToiPGRpdiBpZD0ic21kX2hlbHAiPgoKCTxoMSBp ZD0idG9wIj5zbWRfYWRtaW5fdGhlbWVzPC9oMT4KCgk8cD5JbnN0YWxsLCBtYW5hZ2UsIGVk aXQgYW5kIHN3aXRjaCBhZG1pbi1zaWRlIHRoZW1lcyB0aGVuIHNoYXJlIHRoZW0gd2l0aCB0 aGUgY29tbXVuaXR5LjwvcD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJ PHVsPgoJCTxsaT5DcmVhdGUgYW5kIEVkaXQgYWRtaW4tc2lkZSB0aGVtZXM8L2xpPgoJCTxs aT5FbXBsb3kgaW1hZ2VzLCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiwgSlMsIDxz cGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPi9QSFAgKGZvciBjaGFuZ2luZyBtYXN0aGVh ZCwgaGVhZGVyICZhbXA7IGZvb3RlcikgaW4geW91ciB0aGVtZTwvbGk+CgkJPGxpPlVzZSBj b25zdGFudHMgaW4geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBmaWxlczwv bGk+CgkJPGxpPkJhc2UgeW91ciB0aGVtZSBvbiBhbiBleGlzdGluZyB0aGVtZSB0byB0d2Vh ayBpdCB0byB5b3VyIHRhc3RlPC9saT4KCQk8bGk+RXhwb3J0IGEgdGhlbWUgcGFja2FnZSBm b3IgZGlzdHJpYnV0aW9uIHRvIHRoZSBjb21tdW5pdHkgaW4gZWl0aGVyIC50YXIsIC50Z3os IC5iejIgb3IgLnppcCBmb3JtYXQ8L2xpPgoJCTxsaT5JbXBvcnQgLyBpbnN0YWxsIG90aGVy IHRoZW1lcyBmcm9tIHRoZSA8YSBocmVmPSJodHRwOi8vdGV4dGdhcmRlbi5vcmcvYWRtaW5p c3RyYXRpb24tdGhlbWVzIj5jb21tdW5pdHkgcmVwb3NpdG9yeTwvYT48L2xpPgoJCTxsaT5B ZG1pbmlzdHJhdG9yIGNhbiBzZXQgYSBkZWZhdWx0IHRoZW1lIGZvciBhbGwgdXNlcnMsIG9y IGVuYWJsZSBwZXItdXNlciAvIHBlci1yb2xlIHRoZW1lczwvbGk+Cgk8L3VsPgoKCTxoMiBp ZD0iYXV0aG9yIj5BdXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29u LmNvbS9jb250YWN0Ij5TdGVmIERhd3NvbjwvYT4uPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+ SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwPkRvd25sb2FkIHRoZSBw bHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVn aW5zLzEwOTYvc21kX2FkbWluX3RoZW1lcyI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhl IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4s IHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVn aW4uIEEgbmV3IHRhYiBsYWJlbGxlZCA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBBZG1pbiB0aGVt ZXM8L2VtPiBpcyBjcmVhdGVkLiA8c3Ryb25nPk9ubHkgcHVibGlzaGVycyB3aWxsIHNlZSB0 aGlzIHRhYjwvc3Ryb25nPi48L3A+CgoJPHA+VGhlIHBsdWdpbiBzaG91bGQgYXV0b21hdGlj YWxseSBpbnN0YWxsIHRoZSBwcmVmZXJlbmNlcyBmb3IgeW91LiBDbGljayAmIzgyMTY7UHJl ZmVyZW5jZXMmIzgyMTc7IGZyb20gdGhlIDxlbT5FeHRlbnNpb25zIC0mZ3Q7IEFkbWluIHRo ZW1lczwvZW0+IHRhYiBvciA8ZW0+T3B0aW9uczwvZW0+IGZyb20gdGhlIEFkbWluIC0mZ3Q7 IFBsdWdpbnMgdGFiIHRvIGFsdGVyLCBkZWxldGUgb3IgcmVpbnN0YWxsIHRoZW0uPC9wPgoK CTxwPlZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3Zp ZXd0b3BpYy5waHA/aWQ9MzA5NTIiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBv ciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4u PC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGZyb20g dGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS4gVGhlIHByZWZlcmVuY2VzIHdpbGwgYXV0 b21hdGljYWxseSBiZSByZW1vdmVkLiBQbGVhc2UgYmUgYXdhcmUgdGhhdCByZW1vdmluZyB0 aGUgcGx1Z2luIGRvZXMgPHN0cm9uZz5ub3QgcmVtb3ZlIGFueSB0aGVtZXMgeW91IGhhdmUg aW5zdGFsbGVkLCBub3IgZG9lcyBpdCByZW1vdmUgcGVyLXVzZXIgdGhlbWUgcHJlZmVyZW5j ZXM8L3N0cm9uZz4uIFBlci11c2VyIHByZWZzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQgd2hl biB0aGUgcGx1Z2luIGlzIGRlbGV0ZWQuPC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlPC9o Mj4KCgk8cD5PbiB0aGUgPGVtPkV4dGVuc2lvbnMgLSZndDsgQWRtaW4gdGhlbWVzPC9lbT4g dGFiIGlzIGEgbGlzdCBvciBncmlkIGNvbnRhaW5pbmcgaW5zdGFsbGVkIHRoZW1lcy4gT3V0 IG9mIHRoZSBib3gsIHRoZXJlIHdpbGwgYmUgdHdvIGF2YWlsYWJsZTogPGVtPmNsYXNzaWM8 L2VtPiBhbmQgPGVtPnJlbW9yYTwvZW0+LiA8c3Ryb25nPkl0JiM4MjE3O3MgYWR2aXNhYmxl IG5vdCB0byBjaGFuZ2UgdGhlc2UgdGhlbWVzPC9zdHJvbmc+IHNvIHlvdSBjYW4gYWx3YXlz IGdvIGJhY2sgdG8gdGhlbSBpZiBldmVyeXRoaW5nIGdvZXMgc2lkZXdheXMuIFBsdXMgaXQm IzgyMTc7cyBhIHZlcnkgdXNlZnVsIHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8gPGEg aHJlZj0iI2Nsb25lIj5iYXNlPC9hPiBhIDxhIGhyZWY9IiNuZXciPm5ldyB0aGVtZTwvYT4u PC9wPgoKCTxwPkluIHRoZSBsaXN0IGxheW91dCwgdGhlIGNvbHVtbnMgYXJlOjwvcD4KCgk8 dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZTwvc3Bhbj4gOiBUaGUgbmFtZSBv ZiB0aGUgdGhlbWUgYW5kIChvcHRpb25hbCkgdGh1bWJuYWlsIGFzc2lnbmVkIHRvIGl0LiBD bGljayB0byA8YSBocmVmPSIjc3dpdGNoIj5hY3RpdmF0ZTwvYT4gdGhlIHRoZW1lLiBJZiB0 aGUgdGhlbWUgaXMgYmFzZWQgb24gYW5vdGhlciB1c2VyJiM4MjE3O3MgdGhlbWUsIHRoaXMg ZGVwZW5kZW5jeSB3aWxsIGJlIHNob3duIGluIHBhcmVudGhlc2VzIGFmdGVyIHRoZSB0aGVt ZSBuYW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkF1dGhvcjwvc3Bhbj4gOiBZ b3UhIExpbmtlZCB0byB5b3VyIHdlYiBzaXRlIGlmIHlvdSBzdXBwbHkgaXQgaW4geW91ciA8 YSBocmVmPSIjYWJvdXQiPk1hbmlmZXN0PC9hPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5WZXJzaW9uPC9zcGFuPiA6IFRoZW1lIHZlcnNpb24gbnVtYmVyIGluIDxjb2RlPm1h am9yLm1pbm9yLnN1YnJldjwvY29kZT4gbm90YXRpb24uIElmIGEgbmV3ZXIgdmVyc2lvbiBv ZiBhIHRoZW1lIGlzIGF2YWlsYWJsZSBmcm9tIFRleHRnYXJkZW4sIHRoZSB2ZXJzaW9uIG51 bWJlciB3aWxsIGJlIGh5cGVybGlua2VkIHRvIHRoZSB0aGVtZSBvbiBUZXh0Z2FyZGVuIHNv IHlvdSBtYXkgZG93bmxvYWQvaW5zdGFsbCBpdC4gVGhlIHZlcnNpb25zIGFyZSBjaGVja2Vk LCBhdCBtb3N0LCBvbmNlIGV2ZXJ5IDI0IGhvdXJzIHRvIGF2b2lkIGhhbW1lcmluZyB0aGUg c2VydmVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRlc2NyaXB0aW9uPC9zcGFu PiA6IEJyaWVmIG9uZS0gb3IgdHdvLWxpbmVyIGV4cGxhaW5pbmcgeW91ciB0aGVtZS4gSWYg eW91IGhhdmUgb2ZmZXJlZCBhIGhlbHAgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g aW4geW91ciBtYW5pZmVzdCwgaXQgd2lsbCBiZSBsaW5rZWQgaGVyZSBhcyB3ZWxsPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkFjdGlvbnM8L3NwYW4+IDogQWN0aW9ucyB0byBw ZXJmb3JtIG9uIGVhY2ggdGhlbWUKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltO ZXcgdGhlbWVdPC9zcGFuPiA6IDxhIGhyZWY9IiNuZXciPkNyZWF0ZTwvYT4gYSBuZXcgYmxh bmssIGVtcHR5IGRpcmVjdG9yeSByZWFkeSBmb3IgeW91ciB0aGVtZS4gTm8gc3BhY2VzIC8g b2RkIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIG5hbWUgYW5kIGl0IG11c3Qgbm90 IHN0YXJ0IHdpdGggYSBudW1iZXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W0Vk aXRdPC9zcGFuPiA6IDxhIGhyZWY9IiNlZGl0X3RoZW1lIj5FZGl0PC9hPiB0aGUgdmFyaW91 cyBkZXRhaWxzLCBmaWxlcyBhbmQgY29udGVudCB3aXRoaW4gdGhlIHRoZW1lPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltCYXNlXTwvc3Bhbj4gOiA8YSBocmVmPSIjY2xvbmUi PkV4dGVuZDwvYT4gb25lIG9mIHRoZSBleGlzdGluZyB0aGVtZXMgdG8gbWFrZSB5b3VyIG93 biBjaGFuZ2VzIHVuZGVyIGEgbmV3IG5hbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+W0V4cG9ydF08L3NwYW4+IDogPGEgaHJlZj0iI2V4cG9ydCI+U2F2ZTwvYT4gdGhlIHRo ZW1lIHBhY2thZ2UgdG8geW91ciBoYXJkIGRyaXZlIGZvciBkaXN0cmlidXRpb24vYmFja3Vw IGluIHlvdXIgY2hvc2VuIGNvbXByZXNzaW9uIGZvcm1hdDwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5bRGVsZXRlXTwvc3Bhbj4gOiBDb21wbGV0ZWx5IDxhIGhyZWY9IiNkZWxl dGUiPnJlbW92ZTwvYT4gdGhlIHRoZW1lLiBOb3QgYXZhaWxhYmxlIHRvIHRoZSBjb3JlIHRo ZW1lcywgZm9yIG9idmlvdXMgcmVhc29ucyEgQWxzbyBub3QgYXZhaWxhYmxlIGlmIGEgdGhl bWUgaGFzIGJlZW4gdXNlZCBhcyBhIGJhc2lzIGZvciBhbm90aGVyIHRoZW1lIGluIHRoZSBj dXJyZW50IHNpdGU8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8cD5UaGUgcm93IG9mIHRo ZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUgaXMgc2hhZGVkIGFuZCB0aGUgY3VycmVudCBk ZWZhdWx0IHRoZW1lIHRoYXQgaXMgaW4gZWZmZWN0IGlzIGhpZ2hsaWdodGVkLiBUaGUgZ3Jp ZCB2aWV3IGhhcyBwYXJ0cyBvZiB0aGUgYWJvdmUgaW5mb3JtYXRpb24sIGxhaWQgb3V0IHNs aWdodGx5IGRpZmZlcmVudGx5LjwvcD4KCgk8aDIgaWQ9InN3aXRjaCI+U3dpdGNoaW5nIHRo ZW1lczwvaDI+CgoJPHA+QXMgdGhlIGFkbWluaXN0cmF0b3IsIHlvdSBjYW4gcGxheSBHb2Qg b3ZlciBldmVyeW9uZSBlbHNlJiM4MjE3O3MgdGhlbWVzLiBZb3UgYXJlIGZyZWUgdG8gaW5z dGFsbCBhcyBtYW55IGFzIHlvdSB3aXNoIGFuZCBzd2l0Y2ggYmV0d2VlbiB0aGVtIHdpdGhv dXQgYWZmZWN0aW5nIGFueSBvdGhlciBsb2dpbnMuIE5vYm9keSBlbHNlIHdpbGwgZXZlbiBr bm93IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgcGx1Z2luLjwvcD4KCgk8cD5JZiwgaG93ZXZl ciwgeW91IHZpc2l0IHRoZSA8YSBocmVmPSIjc2V0dXAiPlByZWZlcmVuY2VzPC9hPiBwYWdl IHlvdSBjYW4gY29uZmlndXJlIHRoZSB0aGVtZXMgdGhhdCBvdGhlcnMgdXNlLiBUaGVyZSBh cmUgdGhyZWUgbWVjaGFuaXNtcyB0byBjaG9vc2UgZnJvbTo8L3A+CgoJPHVsPgoJCTxsaT5G b3JjZSBvbmUgdGhlbWUgZm9yIGFsbCB1c2VycyAoZXhjZXB0IHlvdXJzZWxmKTwvbGk+CgkJ PGxpPkZvcmNlIG9uZSB0aGVtZSBmb3IgZWFjaCB1c2VyIHByaXZpbGVnZSBsZXZlbCAoZXhj ZXB0IHlvdXJzZWxmKTwvbGk+CgkJPGxpPkFsbG93IGFsbCB1c2VycyAoZXhjZXB0IHlvdXJz ZWxmKSB0byBwaWNrIHRoZWlyIGZhdm91cml0ZSB0aGVtZSBmcm9tIGEgc2hvcnRsaXN0IHlv dSBkZWZpbmU8L2xpPgoJPC91bD4KCgk8cD5BdCBhbGwgdGltZXMsIHlvdSBjYW4gY2hvb3Nl IGFueSB0aGVtZSB5b3UgcGxlYXNlIGZvciB5b3VyIG93biB1c2UuIFRoaXMgYWxsb3dzIHRy aWFsbGluZywgdHdlYWtpbmcgYW5kIHRlc3Rpbmcgb2YgdGhlbWVzIGJlZm9yZSB1bmxlYXNo aW5nIHRoZW0gb24geW91ciB1c2VyIGJhc2UuPC9wPgoKCTxoMiBpZD0ic2V0dXAiPlRoZW1l IHByZWZlcmVuY2VzPC9oMj4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5DYXNl LXNlbnNpdGl2ZSB0aGVtZSBsaXN0PC9zcGFuPiA6IFdoZW4gc2V0IHRvIDxjb2RlPlllczwv Y29kZT4sIHVwcGVyLWNhc2UgdGhlbWUgbmFtZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbG93 ZXIgY2FzZSB0aGVtZSBuYW1lcyBhbmQgd2lsbCBiZSBsaXN0ZWQgZmlyc3QuIEZvciBleGFt cGxlLCAzIHRoZW1lIGNhbGxlZCAmIzgyMTY7QW5nZWxpYyYjODIxNzssICYjODIxNjtiYXJi YXJpYyYjODIxNzsgYW5kICYjODIxNjtDb2hlc2l2ZSYjODIxNzsgd2lsbCBiZSBvcmRlcmVk OiA8Y29kZT5BbmdlbGljLCBDb2hlc2l2ZSwgYmFyYmFyaWM8L2NvZGU+LiBTZXQgdG8gPGNv ZGU+Tm88L2NvZGU+IHRvIG1peCB1cHBlciBhbmQgbG93ZXItY2FzZSB0aGVtZXMgdG9nZXRo ZXIgKG9yZGVyIGlzIHRoZW4gPGNvZGU+QW5nZWxpYywgYmFyYmFyaWMsIENvaGVzaXZlPC9j b2RlPiApLiBUaGUgJiM4MjE2O2NsYXNzaWMmIzgyMTc7IHRoZW1lIGlzIDxlbT5hbHdheXM8 L2VtPiBsaXN0ZWQgZmlyc3QuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkV4cG9y dCBjb21wcmVzc2lvbiB0eXBlPC9zcGFuPiA6IERlcGVuZGluZyBvbiB5b3VyIHZlcnNpb24g b2YgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gYW5kIHdoaWNoIG1vZHVsZXMgaGF2 ZSBiZWVuIGNvbXBpbGVkIGludG8gaXQsIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgY29tcHJl c3Npb24gZm9ybWF0cyBoZXJlLiBDaG9vc2Ugb25lIHRoYXQgc3VpdHMgeW91IGFzIHRoZSBk ZWZhdWx0IGluIHdoaWNoIHRvIGV4cG9ydCB5b3VyIHRoZW1lIHBhY2thZ2VzLiBZb3UgbWF5 IGNob29zZSBmcm9tIDxlbT5UYXI8L2VtPiwgPGVtPkdaaXA8L2VtPiAoYWN0dWFsbHkgdGFy K2d6aXApLCA8ZW0+QnppcDI8L2VtPiAodGFyK2J6aXApLCBvciA8ZW0+WmlwPC9lbT4gKHRo ZSBkZWZhdWx0KS48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TGF5b3V0IG1ldGhv ZDwvc3Bhbj4gOiBDaG9vc2UgZnJvbSBhIExpc3QgVmlldyAodXNlZnVsIGlmIHlvdSBwcmVm ZXIgdG8gaGlkZSBvciB1c2Ugc21hbGwgdGh1bWJzKSBvciBhIEdyaWQgVmlldyBvZiBpbnN0 YWxsZWQgdGhlbWVzLiBUaGlzIHNldHRpbmcgYXBwbGllcyB0byBib3RoIGFkbWluIGFuZCB1 c2VyIHRoZW1lIHNlbGVjdGlvbiB0YWJzLiBEZWZhdWx0OiBHcmlkIFZpZXc8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+VGh1bWIgc2l6ZTwvc3Bhbj4gOiBTZXQgdGhlIHRodW1i bmFpbCBkaW1lbnNpb25zIGluIHRoZSB0aGVtZSBsaXN0LiBTZXQgZWl0aGVyIGRpbWVuc2lv biB0byAwIHRvIHR1cm4gb2ZmIHRodW1ibmFpbCBkaXNwbGF5LiBEZWZhdWx0OiAyNjAgJiMy MTU7IDE1MHB4PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRlZmF1bHQgdGhlbWU8 L3NwYW4+IDogU2V0IHRoZSB0aGVtZSBmb3IgYWxsIG90aGVyIHVzZXJzLiBJZiB1c2luZyAm IzgyMTY7T25lIHRoZW1lIGZvciBldmVyeW9uZSYjODIxNzsgdGhlIHRoZW1lIGNob3NlbiBo ZXJlIGlzIGZvcmNlZCB1cG9uIGFsbCB1c2Vycy4gSWYgdXNpbmcgYW55IG9mIHRoZSBvdGhl ciBtZWNoYW5pc21zLCB0aGlzIHRoZW1lIGlzIGEgZmFsbGJhY2sgc2hvdWxkIHNvbWV0aGlu ZyBnbyBwZWFyLXNoYXBlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWUg c3lzdGVtPC9zcGFuPiA6IEFzIGRldGFpbGVkIGluIDxhIGhyZWY9IiNzd2l0Y2giPlN3aXRj aGluZyB0aGVtZXM8L2E+LCB5b3UgbWF5IGNob29zZSB0aGUgd2F5IHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBpbnRlcmZhY2UgaXMgcHJlc2VudGVkIHRvIG90aGVyIHVz ZXJzOgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+T25lIHRoZW1lIGZvciBldmVy eW9uZTwvc3Bhbj4gOiB1c2VzIHRoZSBEZWZhdWx0IHRoZW1lIGZvciBhbGwgdXNlcnM7IHRo ZXkgaGF2ZSBubyBjaG9pY2UgaW4gdGhlIG1hdHRlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5PbmUgdGhlbWUgcGVyIHByaXZpbGVnZSBsZXZlbDwvc3Bhbj4gOiBhbGxvd3Mg eW91IHRvIGFzc2lnbiBvbmUgb3IgbW9yZSBwcml2aWxlZ2UgbGV2ZWxzIHRvIGEgdGhlbWUu IENob29zZSBhIHRoZW1lIGZyb20gdGhlIGxlZnQtaGFuZCBsaXN0IGFuZCB0aGVuIHNoaWZ0 L2N0cmwtY2xpY2sgdGhlIHByaXZpbGVnZSBsZXZlbHMgdG8gYXNzaWduIHRoZW0uIEZsaWNr IGJldHdlZW4gdGhlbWVzIGluIHRoZSBsZWZ0IGNvbHVtbiB0byBzZWUgd2hpY2ggb25lcyBh cmUgc2V0IGZvciB2YXJpb3VzIHVzZXIgbGV2ZWxzLCBvciBob3ZlciBvdmVyIGEgcHJpdmls ZWdlIGxldmVsIHRvIHNlZSBhIHRvb2x0aXAuIE9ubHkgb25lIGxldmVsIGNhbiBiZSBhc3Np Z25lZCB0byBhIHRoZW1lIHNvIGlmIHlvdSBjbGljayBhIGxldmVsIHRoYXQgaGFzIGFscmVh ZHkgYmVlbiBhc3NpZ25lZCB0byBhbm90aGVyIHRoZW1lLCBpdCB3aWxsIGJlIHJlbW92ZWQg ZnJvbSBpdHMgb3JpZ2luYWwgYXNzaWdubWVudC4gTm90ZSB5b3UgbXVzdCBTYXZlIHRoZSBj aGFuZ2VzIGZvciB0aGVtIHRvIHRha2UgZWZmZWN0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPk9uZSB0aGVtZSBwZXIgdXNlcjwvc3Bhbj4gOiBkZWZpbmUgYSBzaG9ydGxpc3Qg ZnJvbSB0aGUgYXZhaWxhYmxlIGluc3RhbGxlZCB0aGVtZXMgdG8gb2ZmZXIgdG8gYWxsIHVz ZXJzLiBBIG5ldyB0YWIgd2lsbCBhcHBlYXIgdG8gb3RoZXIgdXNlcnMgdW5kZXIgPGVtPkFk bWluPC9lbT4gdGhhdCBpcyBlc3NlbnRpYWxseSBhIGN1dC1kb3duIHZlcnNpb24gb2YgdGhl IDxlbT5BZG1pbiB0aGVtZXM8L2VtPiB0YWIuIFVzZXJzIGNhbiBzd2l0Y2ggYmV0d2VlbiBh bnkgb25lIG9mIHRoZSB0aGVtZXMgeW91IGhhdmUgcGVybWl0dGVkLjwvbGk+Cgk8L3VsPjwv bGk+Cgk8L3VsPgoKCTxwPlJlbWVtYmVyIHRvIGNsaWNrIFNhdmUgdG8gYXBwbHkgdGhlIGNo YW5nZXMuIENsaWNraW5nIGFueSBvdGhlciB0YWIgd2lsbCB1bmRvIGFueSBtb2RpZmljYXRp b25zIHlvdSBtYXkgaGF2ZSBtYWRlLjwvcD4KCgk8aDIgaWQ9ImJyb3dzZSI+QnJvd3NlIHRo ZW1lczwvaDI+CgoJPHA+Q2xpY2sgdGhpcyBidXR0b24gdG8gYmUgdGFrZW4gdG8gdGhlIGNl bnRyYWwgYWRtaW4gdGhlbWUgcmVwb3NpdG9yeSB3aGVyZSB5b3UgbWF5IGJyb3dzZSB0aGVt ZXMgYW5kIGRvd25sb2FkIHRoZW0gcmVhZHkgZm9yIGluc3RhbGxhdGlvbi48L3A+CgoJPGgy IGlkPSJpbXBvcnQiPkluc3RhbGwgYSB0aGVtZTwvaDI+CgoJPHA+TG9jYXRlIGEgdGhlbWUg cGFja2FnZSBvbiB5b3VyIGhhcmQgZHJpdmUgb3IgcGFzdGUgYSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiB0byBhIHBhY2thZ2UgaW4gdGhlIGJveCBhdCB0aGUgdG9wIG9mIHRo ZSBwYWdlLiBIaXQgPHN0cm9uZz5VcGxvYWQ8L3N0cm9uZz4gYW5kIGl0IHdpbGwgYmUgaW5z dGFsbGVkLiBJZiBpdCBhbHJlYWR5IGV4aXN0cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBO b3RlIHRoYXQgeW91IG1heSByZWNlaXZlIGEgd2FybmluZyBpZiB0aGUgdGhlbWUgaXMgcGFj a2FnZWQgdXNpbmcgYSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdGhhdCBpcyBub3QgYnVpbHQg aW50byB5b3VyIHZlcnNpb24gb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4uIEEg bGlzdCBvZiBzdXBwb3J0ZWQgY29tcHJlc3Npb24gdHlwZXMgaXMgZ2l2ZW4gYmVsb3cgdGhl IHVwbG9hZCBib3guPC9wPgoKCTxoMiBpZD0ibmV3Ij5DcmVhdGUgYSBuZXcgKGVtcHR5KSB0 aGVtZTwvaDI+CgoJPHA+Q2xpY2sgPHN0cm9uZz5DcmVhdGUgbmV3IHRoZW1lPC9zdHJvbmc+ IGFuZCBhIGJveCB3aWxsIHNsaWRlIGRvd24gYWxsb3dpbmcgeW91IHRvIGdpdmUgeW91ciB0 aGVtZSBhIG5hbWUuICBOb3RlIHRoYXQgdGhlIGVkaXQgYm94IGF1dG9tYXRpY2FsbHkgdGFr ZXMgZm9jdXMsIHNvIHlvdSBjYW4gdHlwZSBzdHJhaWdodCBhd2F5LjwvcD4KCgk8cD5ObyBz cGFjZXMgb3Igb2RkIGNoYXJhY3RlcnMgYXJlIHBlcm1pdHRlZCwgYmVjYXVzZSB0aGUgbmFt ZSB5b3UgZW50ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUg Y3JlYXRlZCBpbiB0aGUgPGVtPnRoZW1lPC9lbT4gZm9sZGVyIGFuZCB0aGVtIG5hbWUgb2Yg eW91ciB0aGVtZSYjODIxNztzIGNsYXNzLiBJZiB5b3UgZG8gbWFuYWdlIHRvIHVzZSBvZGQg Y2hhcmFjdGVycywgdGhlIG5hbWUgd2lsbCBiZSAmIzgyMjA7ZHVtYmVkIGRvd24mIzgyMjE7 IGZvciB5b3UuIE9uY2UgdGhlIG5hbWUgaXMgc2V0LCB0aGF0IGlzIGl0OyB5b3UgY2Fubm90 IGNoYW5nZSBpdCBmcm9tIHdpdGhpbiB0aGUgaW50ZXJmYWNlLiBUaGUgb25seSB3YXkgdG8g cmVuYW1lIGl0IGlzIHZpYSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5GVFA8L3NwYW4+IGNs aWVudCBhbmQgaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgaWYg eW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLjwvcD4KCgk8cD5JbiBvcmRlciB0byBhdm9p ZCBuYW1lIGNsYXNoZXMgd2l0aCBvdGhlciBwZW9wbGUmIzgyMTc7cyB0aGVtZXMsIGl0IGlz IHJlY29tbWVuZGVkIHRoYXQgYWxsIHRoZW1lcyB5b3UgZGVzaWduIGJlZ2luIHdpdGggYSB1 bmlxdWUgMy1sZXR0ZXIgcHJlZml4IG9mIHlvdXIgb3duIGNob29zaW5nLCBwbHVzIGFuIHVu ZGVyc2NvcmUgJiM4MjEyOyBleGFjdGx5IGxpa2UgcGx1Z2lucy4gVGh1cywgc21kX0JsdWVN ZWFuaWUgbWlnaHQgd2VsbCBiZSB0aGUgbmFtZSBvZiBhIHRoZW1lLjwvcD4KCgk8cD5XaGVu IHlvdSBoYXZlIG5hbWVkIHlvdXIgdGhlbWUsIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4g dG8gY3JlYXRlIGEgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGNhbiByZXNpZGUuPC9wPgoKCTxo MiBpZD0iY2xvbmUiPkV4dGVuZCBhbiBleGlzdGluZyB0aGVtZTwvaDI+CgoJPHA+Q2xpY2sg PHN0cm9uZz5CYXNlPC9zdHJvbmc+IHRvIGNyZWF0ZSBhIG5ldyB0aGVtZSBiYXNlZCBvbiBh bm90aGVyLiBBIGJveCB3aWxsIHNsaWRlIGRvd24gKHRoZSBjdXJzb3IgZm9jdXNlcyBhdXRv bWF0aWNhbGx5IGluIHRoZSBib3ggZm9yIHlvdSkgc28geW91IG1heSBlbnRlciB0aGUgbmFt ZSBvZiB5b3VyIGNvcHkuIE9ic2VydmUgdGhlIDxhIGhyZWY9IiNuZXciPm5hbWluZyBjb252 ZW50aW9uPC9hPiwgdGhlbiBjbGljayA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGNyZWF0ZSB0 aGUgbmV3IHRoZW1lLjwvcD4KCgk8cD48c3BhbiBjbGFzcz0icmVxdWlyZWQiPlBsZWFzZSBy ZW1lbWJlciwgeW91ciB0aGVtZSB3aWxsIGJlIGRlcGVuZGVudCBvbiB0aGUgY2hvc2VuIHRo ZW1lIGFuZCA8c3Ryb25nPmJvdGg8L3N0cm9uZz4gbXVzdCBiZSBwcmVzZW50IG9uIGEgdXNl ciYjODIxNztzIHN5c3RlbSBmb3IgdGhlIHRoZW1lIHRvIHdvcms8L3NwYW4+LiBJdCBpcyB3 b3J0aCBlbnN1cmluZyB0aGF0IHVzZXJzIG9mIHlvdXIgdGhlbWUgYXJlIG1hZGUgYXdhcmUg b2YgdGhpcyBkZXBlbmRlbmN5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IGZydXN0cmF0aW9uOyBw ZXJoYXBzIGFkZCBhIGxpbmsgdG8gdGhlIHRoZW1lJiM4MjE3O3MgYmFzZSwgbWVudGlvbiB0 aGUgZGVwZW5kZW5jeSBpbiB0aGUgSGVscCBsaW5rIGFuZC9vciBpbiB0aGUgdGhlbWUmIzgy MTc7cyBhcnRpY2xlIG9uIFRleHRnYXJkZW4uIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGRl bGV0ZSBhbnkgdGhlbWUgZnJvbSB0aGUgbGlzdCB0aGF0IGhhcyBzdWNoIGEgZGVwZW5kZW5j eSwgb3RoZXJ3aXNlIHlvdXIgYWRtaW4gc2lkZSB3aWxsIHN0b3Agd29ya2luZy48L3A+CgoJ PGgyIGlkPSJleHBvcnQiPkV4cG9ydCBhIHRoZW1lPC9oMj4KCgk8cD5JZiB5b3Ugd2lzaCB0 byBiYWNrIHVwIGEgdGhlbWUgb3Igc2hhcmUgaXQgd2l0aCBvdGhlcnMsIGNsaWNrIDxzdHJv bmc+RXhwb3J0PC9zdHJvbmc+LiBBIGJveCB3aWxsIHNsaWRlIGRvd24gb2ZmZXJpbmcgeW91 IGEgY2hvaWNlIG9mIGNvbXByZXNzaW9uIGZvcm1hdHM7IHRoZSBkZWZhdWx0IGlzIHRoZSBm b3JtYXQgeW91IGNob3NlIGZyb20gdGhlIDxhIGhyZWY9IiNzZXR1cCI+UHJlZmVyZW5jZXM8 L2E+IHBhZ2UuIENsaWNrIDxlbT5bR29dPC9lbT4gdG8gZXhwb3J0IHRoZSB0aGVtZSBhbmQg c2F2ZSBpdCB0byB5b3VyIGNvbXB1dGVyLiBBbGwgcmVsYXRlZCBmaWxlcyBpbiB0aGUgdGhl bWUgd2lsbCBiZSBwYWNrYWdlZCB0b2dldGhlciBpbnRvIGEgc2luZ2xlIGRvd25sb2FkIGZp bGUgZm9yIGNvbnZlbmllbmNlLjwvcD4KCgk8aDIgaWQ9ImRlbGV0ZSI+RGVsZXRlIGEgdGhl bWU8L2gyPgoKCTxwPkhpdCB0aGlzIChhbmQgY29uZmlybSB5b3UgYXJlIHN1cmUpIHRvIHJl bW92ZSB0aGUgZW50aXJlIHRoZW1lIGZvbGRlciBhbmQgY29udGVudHMgZnJvbSB0aGUgZmls ZSBzeXN0ZW0uIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+VGhpcyBpcyBub3QgdW5kb2FibGUs IHNvIGJlIGNhcmVmdWw8L3NwYW4+LjwvcD4KCgk8aDIgaWQ9ImVkaXRfdGhlbWUiPkVkaXQg YSB0aGVtZTwvaDI+CgoJPHA+QSB0aGVtZSBpcyBhIGNvbGxlY3Rpb24gb2YgZmlsZXMuIFRo ZSBmaWxlcyBhbGwgcmVzaWRlIGluIHRoZWlyIG93biBzZWxmLWNvbnRhaW5lZCBkaXJlY3Rv cnkgdW5kZXIgPGNvZGU+dGV4dHBhdHRlcm4vdGhlbWU8L2NvZGU+LiBUaGUgbmFtZSBvZiB0 aGUgZGlyZWN0b3J5IGlzIHRoZSBuYW1lIG9mIHlvdXIgdGhlbWUsIGhlbmNlIHRoZSByZWFz b24gaXQgY2Fubm90IGNvbnRhaW4gYW55IG9ic2N1cmUgY2hhcmFjdGVycyB0aGF0IHdvdWxk IGJlIGludmFsaWQgaW4gdGhlIGZpbGVzeXN0ZW0gb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlBI UDwvc3Bhbj4gdmFyaWFibGVzLjwvcD4KCgk8cD5XaGVuIHlvdSBjbGljayAmIzgyMTY7RWRp dCYjODIxNzsgeW91IHdpbGwgYmUgdGFrZW4gdG8gYSBzY3JlZW4gdGhhdCBhbGxvd3MgeW91 IHRvIG1ha2UgY2hhbmdlcyB0byB0aGUgdGhlbWUuIFRoZSBFZGl0IHNjcmVlbiBpcyBicm9r ZW4gaW50byB0aHJlZSB2ZXJ0aWNhbCBwYXJ0cywgYXMgZm9sbG93czo8L3A+CgoJPGgzIGlk PSJlZGl0X2ltZyI+SW1hZ2UgaGFuZGxpbmc8L2gzPgoKCTxwPkVhY2ggdGhlbWUgY2FuIGNv bnRhaW4gYW4gb3B0aW9uYWwgdGh1bWJuYWlsLiBUaGlzIGlzIGFuIGltYWdlIG9mIDI2MCYj MjE1OzE1MHB4IGluIHNpemUsIGNhbGxlZCA8Y29kZT5zY3JlZW5zaG90LnBuZzwvY29kZT4g KG9yIDxjb2RlPi5qcGc8L2NvZGU+LCA8Y29kZT4uZ2lmPC9jb2RlPiwgZXRjKSBpbiB5b3Vy IHRoZW1lIGRpcmVjdG9yeS4gTm90ZSBpdCB3aWxsIGJlIHNxdWFzaGVkIC8gc3RyZXRjaGVk IHRvIGZpdCB5b3VyIHRodW1ibmFpbCBkaW1lbnNpb25zIHNldCBpbiB0aGUgcGx1Z2luIHBy ZWZzLjwvcD4KCgk8cD5PdGhlciBpbWFnZXMgZm9yIHVzZSBpbiA8c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPiBydWxlcyBjYW4gYWxzbyBiZSBhZGRlZCB0byBhIHRoZW1lLiBCcm93 c2UgZm9yIGFuIGltYWdlIGFuZCBzZWxlY3QgaXQsIHRoZW4gY2xpY2sgPHN0cm9uZz5VcGxv YWQ8L3N0cm9uZz4gdG8gYWRkIGl0IHRvIHRoZSB0aGVtZS4gWW91IGNhbiBjdXJyZW50bHkg b25seSB1cGxvYWQgb25lIGltYWdlIGF0IGEgdGltZSwgdGhvdWdoIHlvdSBjYW4gZGVsZXRl IG9uZSBvciBtb3JlIGF0IG9uY2UgYnkgU2hpZnQvQ3RybCBjbGlja2luZyB0aGUgb25lcyB5 b3Ugd2lzaCB0byByZW1vdmUgYW5kIGhpdHRpbmcgdGhlICYjODIxNjt4JiM4MjE3OyBidXR0 b24uIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+V2FybmluZzogZmlsZXMgd2lsbCBiZSBkZWxl dGVkIGltbWVkaWF0ZWx5LCB3aXRob3V0IGNvbmZpcm1hdGlvbi48L3NwYW4+PC9wPgoKCTxw PlRoZSBiZXN0IHdheSB0byByZWZlciB0byBpbWFnZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPnMgaW4gc3R5bGVzaGVldHMgaXMgd2l0aCBhIHJlbGF0aXZlIHBhdGg6PC9wPgoK PHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Lm15U3R5bGUgewogICBi YWNrZ3JvdW5kOiB1cmwobXktaW1hZ2UuZ2lmKTsKfQo8L2NvZGU+PC9wcmU+CgoJPGgzIGlk PSJlZGl0X2NvbnRlbnQiPkNvbnRlbnQ8L2gzPgoKCTxwPlRoZSBjZW50cmFsIHBhbmUgaXMg d2hlcmUgeW91IGVkaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyBpbiB5b3VyIHRoZW1l LiBUaGUgc21hbGwgZWRpdCBib3ggYXQgdGhlIHRvcCBpcyB0aGUgZmlsZW5hbWUgYW5kIHRo ZSBsYXJnZSB0ZXh0IGFyZWEgaXMgaXRzIGNvbnRlbnQuIENsaWNrIDxzdHJvbmc+U2F2ZTwv c3Ryb25nPiB0byBjb21taXQgY2hhbmdlcy4gWW91IG1heSBmcmVlbHkgcmVuYW1lIGFueSBm aWxlIHlvdSBhcmUgZWRpdGluZy48L3A+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5JbXBvcnRh bnQ6IGlmIHlvdSBzZWxlY3QgYSBmaWxlLCBlZGl0IGl0LCByZW5hbWUgaXQsIGFuZCBjbGlj ayA8c3Ryb25nPlNhdmU8L3N0cm9uZz4geW91IHdpbGwgb3ZlcndyaXRlIHdoYXRldmVyIHdh cyBpbiB0aGUgcHJldmlvdXMgZmlsZSAmIzgyMTI7IGV2ZW4gaWYgeW91IGVtcHR5IHRoZSBj b250ZW50cyBvZiB0aGUgdGV4dGFyZWEgaW4gYW4gZWZmb3J0IHRvIG1ha2UgYSAmIzgyMjA7 bmV3JiM4MjIxOyBvbmUuIElmIHlvdSB3aXNoIHRvIGNyZWF0ZSBhIG5ldyBmaWxlLCBpdCBp cyBzYWZlciB0byBjbGljayB0aGUgPHN0cm9uZz5OZXcgZmlsZTwvc3Ryb25nPiBidXR0b24g aW4gdGhlIHJpZ2h0IGhhbmQgY29sdW1uIHRvIGVuc3VyZSB5b3UgYXJlIG5vdCBlZGl0aW5n IGFuIGV4aXN0aW5nIGZpbGUgYnkgbWlzdGFrZS48L3A+CgoJPHA+SXQgaXMgYWxzbyB3b3J0 aCBub3RpbmcgdGhhdCBmaWxlIHBlcm1pc3Npb25zIHZhcnkgZnJvbSBob3N0IHRvIGhvc3Qu IElmIHlvdSB0cnkgYW5kIHNhdmUgYSB0aGVtZSBmaWxlIGFuZCByZWNlaXZlIGEgeXVra3kg d2FybmluZyBtZXNzYWdlIGFib3V0IG5vdCBiZWluZyBhYmxlIHRvIHdyaXRlIHRoZSBmaWxl LCB0cnkgaW5jcmVhc2luZyB0aGUgcGVybWlzc2lvbnMgb24gdGhlIHRoZW1lIGRpcmVjdG9y eSBhbmQgYWxsIGZpbGVzIGJlbmVhdGggaXQuPC9wPgoKCTxwPlRoZSB0aGVtZSBmaWxlcyBh cmUgZGlzdHJpYnV0ZWQgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCA8 Y29kZT42NDQ8L2NvZGU+IHBlcm1pc3Npb25zIHdoaWNoIHNob3VsZCBiZSBmaW5lIGZvciBh IHN0YW5kYXJkIGhvc3QuIFNvbWUgc2hhcmVkIGhvc3RpbmcgY29tcGFuaWVzICYjODIxMjsg YW5kIHRoZXNlIGFyZSB1c3VhbGx5IHRoZSBvbmVzIHRoYXQgdGVsbCB5b3UgdG8gc2V0IHlv dXIgPGNvZGU+ZmlsZXM8L2NvZGU+IGFuZCA8Y29kZT5pbWFnZXM8L2NvZGU+IGRpcmVjdG9y aWVzIHRvIDc3NyBpbiBvcmRlciB0byBtYWtlIHRoZW0gd3JpdGFibGUgYnkgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gJiM4MjEyOyBydW4gQXBhY2hlL1BIUCBpbiBhIGRpZmZl cmVudCB3YXkgd2hpY2ggbWlnaHQgcmVxdWlyZSBoaWdoZXIgcGVybWlzc2lvbnMgaW4gb3Jk ZXIgdG8gd3JpdGUgdG8gdGhlIHRoZW1lIGRpcmVjdG9yeS4gVGhpcyBpcyB1bmZvcnR1bmF0 ZWx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBwbHVnaW4gc28geW91IHdpbGwgaGF2ZSB0 byBleHBlcmltZW50IGlmIGl0IGNhdXNlcyB5b3UgcHJvYmxlbXMuPC9wPgoKCTxoMz5GaWxl IGhhbmRsaW5nPC9oMz4KCgk8cD5UaGlzIGNvbHVtbiBiZWdpbnMgd2l0aCBhIHNlbGVjdCBs aXN0IG9mIGFsbCBpbnN0YWxsZWQgdGhlbWVzOyB0aGUgY3VycmVudCB0aGVtZSBzZWxlY3Rl ZC4gQ2hhbmdpbmcgdGhlIGl0ZW0gaGVyZSB3aWxsIGltbWVkaWF0ZWx5IGFsbG93IHlvdSB0 byBlZGl0IGFub3RoZXIgdGhlbWUuIFRoaXMgaXMgdmVyeSB1c2VmdWwgaWYgeW91IGFyZSBj b3B5aW5nIGFuZCBwYXN0aW5nIGZpbGVzIGZyb20gb25lIHRoZW1lIHRvIGFub3RoZXIgYW5k IHNhdmVzIHlvdSBoYXZpbmcgdG8gZ28gYmFjayB0byB0aGUgdGhlbWUgbGlzdCBmaXJzdC48 L3A+CgoJPHA+QmVuZWF0aCB0aGF0IGFyZSB0d28gYnV0dG9uczo8L3A+CgoJPHVsPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+TmV3IGZpbGU8L3NwYW4+IDogQ3JlYXRlIGEgbmV3LCBl bXB0eSBmaWxlIGluIHlvdXIgdGhlbWUgZGlyZWN0b3J5LiBOb3RoaW5nIGlzIGFjdHVhbGx5 IGNyZWF0ZWQgdW50aWwgeW91IGhpdCA8c3Ryb25nPlNhdmU8L3N0cm9uZz4gYnV0IHVzaW5n IHRoaXMgYnV0dG9uIGVuc3VyZXMgeW91IGJlZ2luIHdpdGggYSBjbGVhbiBzbGF0ZSBhbmQg ZG9uJiM4MjE3O3QgYWNjaWRlbnRhbGx5IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZmlsZSB5 b3Ugd2VyZSBlZGl0aW5nPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRoZW1lIGxp c3Q8L3NwYW4+IDogQSBzaG9ydGN1dCBiYWNrIHRvIHRoZSBtYWluIHRoZW1lIGxpc3QgKGVx dWl2YWxlbnQgdG8gY2xpY2tpbmcgdGhlIDxlbT5BZG1pbiB0aGVtZXM8L2VtPiB0YWIpPC9s aT4KCTwvdWw+CgoJPHA+QmVsb3cgdGhvc2UgYnV0dG9ucyBhcmUgdXAgdG8gZm91ciBzZWN0 aW9ucyBjb250YWluaW5nIGFsbCB0aGUgKG5vbi1pbWFnZSkgZmlsZXMgdGhhdCBtYWtlIHVw IHlvdXIgdGhlbWUuIENsaWNrIGEgZmlsZW5hbWUgdG8gbG9hZCBpdCBpbnRvIHRoZSBjZW50 cmFsIHRleHQgYXJlYSBmb3IgZWRpdGluZy48L3A+CgoJPGg0IGlkPSJlZGl0X2NzcyI+U3R5 bGVzaGVldHM8L2g0PgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+RmlsZXMgY2FuIGJlIGFueSB2 YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBp biA8Y29kZT4uY3NzPC9jb2RlPjwvcD4KCgk8cD5UaGUgbWVhdCBhbmQgcG90YXRvZXMgb2Yg eW91ciB0aGVtZS4gQWRkIGFzIG1hbnkgc2hlZXRzIGFzIHlvdSBsaWtlIGFuZCBsb2FkIHRo ZW0gZnJvbSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUocykuPC9w PgoKCTxoNCBpZD0iZWRpdF9jc3MiPlN0eWxlcGxhdGVzPC9oND4KCgk8cCBjbGFzcz0icmVx dWlyZWQiPkZpbGVzIGNhbiBiZSBhbnkgdmFsaWQgZmlsZW5hbWUgYnV0IDxzcGFuIGNsYXNz PSJjYXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4gPGNvZGU+LnNzYzwvY29kZT48L3A+CgoJPHA+ QSBzcGVjaWFsIHZlcnNpb24gb2YgYSBzdHlsZXNoZWV0IHRoYXQgYWxsb3dzIHlvdSB0byBk ZWZpbmUgY29uc3RhbnRzIHRocm91Z2hvdXQgeW91ciBzaGVldC4gV3JpdGUgeW91ciBzdHls ZXNoZWV0IGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHlvdSB3b3VsZCBub3JtYWxseSBi dXQgd2hlcmUgeW91IGZpbmQgeW91cnNlbGYsIGZvciBleGFtcGxlLCB1c2luZyB0aGUgc2Ft ZSBjb2xvciB2YWx1ZSByZXBlYXRlZGx5IG9yIHRoZSBzYW1lIHJ1bGVzIGJsb2NrLCB5b3Ug Y2FuIHNhdmUgeW91cnNlbGYgdHlwaW5nIGJ5IHVzaW5nIGNvbnN0YW50czo8L3A+Cgo8cHJl IGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5AYnJhbmRpbmc6ICMxMjM0NTY7 CiNoZWFkZXIgewogIGNvbG9yOiBAYnJhbmRpbmc7Cn0KaDIgewogIGNvbG9yOiBAYnJhbmRp bmc7Cn0KPC9jb2RlPjwvcHJlPgoKCTxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IHdob2xlIHJ1 bGUgYmxvY2tzIGxpa2UgdGhpcyAoPGVtPk5vdGUgdGhlIGNvbG9uIGFmdGVyIHRoZSBibG9j ayBuYW1lPC9lbT4pIDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJs b2NrIj5AbXlfYmxvY2s6IHsKICBtYXJnaW46MCAyMHB4OwogIGJvcmRlcjozcHggc29saWQg Izk5OTsKICBmb250LXNpemU6MTIwJTsKfQojaGVhZGVyIHsKICBjb2xvcjogQGJyYW5kaW5n OwogIHBvc2l0aW9uOnJlbGF0aXZlOwogIEBteV9ibG9jazsKfQpoMiB7CiAgQG15X2Jsb2Nr Owp9CjwvY29kZT48L3ByZT4KCgk8cD5JZiB5b3UgcHV0IGFsbCB5b3VyIGNvbnN0YW50cyBh dCB0aGUgdG9wIG9mIHRoZSA8Y29kZT4uc3NjPC9jb2RlPiBmaWxlIHRoZXkgd2lsbCBiZSBy ZW1vdmVkIGZyb20gdGhlIGdlbmVyYXRlZCBjc3MgZmlsZS48L3A+CgoJPHA+V2hlbiB5b3Ug c2F2ZSBhIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUsIGEgY29ycmVzcG9uZGluZy1uYW1lZCA8 Y29kZT4uY3NzPC9jb2RlPiBmaWxlIHdpbGwgYWxzbyBiZSBjcmVhdGVkLiBUaGUgdHdvIHdp bGwgYmUga2VwdCBpbiBzeW5jIGFzIGZhciBhcyBwcmFjdGljYWJsZSAoZXZlbiBpZiB5b3Ug cmVuYW1lIHRoZSBvcmlnaW5hbCBmaWxlKS4gV2hlbiBpdCBjb21lcyB0byBkZWxldGlvbiB0 aG91Z2gsIHRoZXkgYXJlIHRyZWF0ZWQgc2VwYXJhdGVseS4gVGhpcyBhbGxvd3MgeW91IHRv IGVpdGhlciBrZWVwIHRoZSA8Y29kZT4uc3NjPC9jb2RlPiBmaWxlIGluIHRoZSBkaXN0cmli dXRpb24gYXJjaGl2ZSBvciByZW1vdmUgaXQgcHJpb3IgdG8gZXhwb3J0LjwvcD4KCgk8aDQg aWQ9ImVkaXRfanMiPkphdmFzY3JpcHQ8L2g0PgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+Rmls ZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9ImNhcHMiPk1V U1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uanM8L2NvZGU+PC9wPgoKCTxwPkFueSB0cmlja2Vy eSB5b3UgbWF5IHdpc2ggdG8gZW1wbG95IGluIHlvdXIgdGhlbWUgY2FuIGJlIHdyaXR0ZW4g aW4gdGhlc2UgZmlsZXMuIFJlbWVtYmVyIHRoYXQgalF1ZXJ5IGlzIGxvYWRlZCBieSBkZWZh dWx0IG9uIHRoZSBhZG1pbiBzaWRlIHNvIHlvdSBjYW4gcGxheSB3aXRoIHRoYXQuPC9wPgoK CTxoNCBpZD0iZWRpdF9waHAiPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+PC9oND4K Cgk8cCBjbGFzcz0icmVxdWlyZWQiPk9uZSBmaWxlIDxzdHJvbmc+bXVzdDwvc3Ryb25nPiBi ZSBuYW1lZCBleGFjdGx5IHRoZSBzYW1lIGFzIHlvdXIgdGhlbWUsIGkuZS4gPGNvZGU+c21k X0JsdWVNZWFuaWUucGhwPC9jb2RlPi4gQW55IG90aGVyIGZpbGVzIG11c3QgZW5kIGluIDxj b2RlPi5waHA8L2NvZGU+PC9wPgoKCTxwPkNvbnN1bHQgdGhlIDxhIGhyZWY9Imh0dHA6Ly90 ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9Q3JlYXRpbmdfYW5fQWRtaW5f U2lkZV9UaGVtZSI+QWRtaW4gU2lkZSB0aGVtZSBndWlkZTwvYT4gb24gVGV4dGJvb2sgZm9y IHRoZSBydWxlcyBvbiBtYWtpbmcgdGhlbWVzLiBOb3RlIHRoYXQgY29ycnVwdCB0aGVtZXMg YXJlIGRldGVjdGVkIHRvIHRoZSBiZXN0IG9mIHRoZSBwbHVnaW4mIzgyMTc7cyBhYmlsaXR5 IGFuZCB5b3UgbWF5IG5vdCBleHBvcnQsIGJhc2Ugb3Igc3dpdGNoIHRvIGFueSB0aGVtZSB0 aGF0IGlzIGJyb2tlbi48L3A+CgoJPHA+SWYgeW91IHJlbmFtZSB0aGUgdGhlbWUmIzgyMTc7 cyBjb3JlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgKGkuZS4gdGhlIG9u ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHRoZW1lIGZvbGRlciBpdHNlbGYpIHRoZSBw bHVnaW4gd2lsbCBhdHRlbXB0IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGFzIHdlbGw7IGVz c2VudGlhbGx5IHJlbmFtaW5nIHRoZSB0aGVtZS4gVGhpcyBzaG91bGQgcHJldmVudCBhIHRo ZW1lIGZyb20gYmVjb21pbmcgdW5lZGl0YWJsZSwgYnV0IGl0IGlzIHVwIHRvIHlvdSB0byBr ZWVwIHRoZSBjbGFzcyBuYW1lIGluIHN5bmMgd2l0aCB0aGUgZmlsZSBuYW1lLiBJZiBhdCBh bnkgdGltZSB5b3UgZ28gYmFjayB0byB0aGUgdGhlbWUgbGlzdC9ncmlkIGFuZCBmaW5kIGEg dGhlbWUgZXhpc3RzIGJ1dCBoYXMgbm8gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGl0 LCBjaGFuY2VzIGFyZSBpdCYjODIxNztzIGJlY2F1c2UgdGhlIGNsYXNzIG5hbWUgZG9lc24m IzgyMTc7dCBtYXRjaCB0aGUgdGhlbWUmIzgyMTc7cyBkaXJlY3RvcnkgbmFtZS4gSnVzdCBo aXQgW0VkaXRdIGFuZCBhbHRlciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4g ZmlsZSB0byBicmluZyBldmVyeXRoaW5nIGJhY2sgb24gdHJhY2suPC9wPgoKCTxoNCBpZD0i ZWRpdF9vdGhlciI+T3RoZXJzPC9oND4KCgk8cD5BbnkgZmlsZXMgdGhhdCBhcmUgbm90IG9m IHRoZSBhYm92ZSB0aHJlZSB0eXBlcyAoYW5kIGFyZSBub3QgaW1hZ2VzKSBhcHBlYXIgaGVy ZS4gWW91IHdpbGwgcHJvYmFibHkgbmV2ZXIgc2VlIHRoaXMgc2VjdGlvbi4gSWYgeW91IGRv IHRyeSB0byBjcmVhdGUgYSBmaWxlIHRoYXQgaXMgbm90IG9mIHRoZSBhYm92ZSB0aHJlZSB0 eXBlcywgYSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVkLiBZb3UgbXVzdCBoaXQgPGVtPlNhdmU8 L2VtPiBhZ2FpbiB0byBjb25maXJtIHlvdSByZWFsbHkgd2lzaCB0byBjcmVhdGUgdGhlIGZp bGUuPC9wPgoKCTxoMyBpZD0iYWJvdXQiPk1hbmlmZXN0PC9oMz4KCgk8cD5JbiB5b3VyIG1h aW4gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBpcyBhIGZ1bmN0aW9uIGNh bGxlZCA8Y29kZT5tYW5pZmVzdCgpPC9jb2RlPiB3aGljaCBjb250YWlucyBpbmZvIGFib3V0 IHlvdSBhbmQgeW91ciB0aGVtZS4gRWRpdCB0aGUgdmFsdWVzIGhlcmUgdG8gc3RhbXAgeW91 ciBtYXJrIG9uIHRoZSB0aGVtZS4gTm90ZSB0aGF0IGlmIHlvdXIgZGVzY3JpcHRpb24gY29u dGFpbnMgYXBvc3Ryb3BoZXMgdGhleSBtdXN0IGJlIDxlbT5lc2NhcGVkPC9lbT4gYnkgcHJl Y2VkaW5nIHRoZW0gd2l0aCBhIHNpbmdsZSBiYWNrc2xhc2ggPGNvZGU+XDwvY29kZT4uIGUu Zy48L3A+Cgo8cHJlPjxjb2RlPiYjMzk7ZGVzY3JpcHRpb24mIzM5OyA9Jmd0OyAmIzM5O0Rv blwmIzM5O3QgZmVhciB0aGUgcmVhcGVyISYjMzk7LAo8L2NvZGU+PC9wcmU+CgoJPGgyIGlk PSJwZXJ1c2VyIj5QZXItdXNlciB0aGVtZSBzZWxlY3Rpb248L2gyPgoKCTxwPklmIGFuIGFk bWluaXN0cmF0b3IgY2hvb3NlcyB0byBhbGxvdyBwZXItdXNlciB0aGVtZXMsIGEgbmV3IHRh YiBhcHBlYXJzIHVuZGVyIHRoZSBBZG1pbiB0YWIgb2YgYWxsIHVzZXJzIChleGNlcHQgYWRt aW5pc3RyYXRvcnMpLiBUaGlzIHNpbXBseSBkaXNwbGF5cyBhbGwgYXZhaWxhYmxlIHRoZW1l cyAmIzgyMTI7IG9uZXMgdGhhdCB0aGUgYWRtaW5pc3RyYXRvciBoYXMgZXhwbGljaXRseSBh bGxvd2VkLjwvcD4KCgk8cD5DbGlja2luZyBhIHRoZW1lIG5hbWUgb3IgdGh1bWJuYWlsIHdp bGwgaW1tZWRpYXRlbHkgc3dpdGNoIHRvIHRoYXQgdGhlbWUgdW50aWwgdGhlIHVzZXIgY2hv b3NlcyBhbm90aGVyIG9yIHRoZSBhZG1pbmlzdHJhdG9yIGNoYW5nZXMgdGhlbWUgc3lzdGVt LjwvcD4KCgk8aDIgaWQ9ImNoYW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxp PjEyIEp1biAwOSB8IDAuMSB8IEluaXRpYWwgcHVibGljIGJldGE8L2xpPgoJCTxsaT4wMyBT ZXAgMDkgfCAwLjExIHwgSW1wcm92ZWQgVGV4dGdhcmRlbiB0aGVtZSBmZWVkIGFuZCBsaW5r cyA7IGltcHJvdmVkIGZpbGUgc3VwcG9ydCAoYm90aCB0aGFua3MgdGhlYm9tYnNpdGUpIDsg bWFkZSBnbG9iYWwgdGhlbWUgbW9yZSBvYnZpb3VzIDsgYWx0ZXJlZCBwcmVmcyB0YWIgYSBi aXQgOyBhZGRlZCA8Y29kZT4uc3NjPC9jb2RlPiBzdXBwb3J0IDsgaWdub3JlZCAuc3ZuIHN1 YmRpcnMgKGFsbCB0aGFua3MgcGllbWFuKSA7IGltcHJvdmVkIHdhcm5pbmcgbWVzc2FnZXMg OyBtaXNjIGZpeGVzIGFuZCBob3VzZWtlZXBpbmc8L2xpPgoJCTxsaT4wMiBOb3YgMDkgfCAw LjEyIHwgUmVkdWNlZCB0aGVtZSBmZWVkIGNsdXR0ZXIgaW4gdGhlIHByZWZzIHRhYmxlPC9s aT4KCQk8bGk+MDQgTm92IDA5IHwgMC4xMyB8IFJlbW92ZWQgZXJlZ19yZXBsYWNlIHRvIGNv bmZvcm0gd2l0aCBQSFA1LjMrICh0aGFua3MgdGhlYm9tYnNpdGUpIDsgY2hhbmdlZCAmIzgy MTY7Z2xvYmFsJiM4MjE3OyB0byAmIzgyMTY7ZGVmYXVsdCYjODIxNzsgOyBmaXhlZCByb2d1 ZSB1bnRyYW5zbGF0ZWQgc3RyaW5nPC9saT4KCQk8bGk+MDkgTm92IDA5IHwgMC4xNCB8IE1v dmVkIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBpbiBsaW5lIHdpdGggVGV4dGdh cmRlbiBsYXlvdXQgYWx0ZXJhdGlvbnMgKHRoYW5rcyBmb3IgdGhlIGhlYWRzdXAgdGhlYm9t YnNpdGUpIDsgbWFkZSBmZWVkcyBtb3JlIHJvYnVzdCBpbiB0aGUgZXZlbnQgVGV4dGdhcmRl biBpcyBkb3duIC8gdW5kZXIgbWFpbnRlbmFuY2UgKHRoYW5rcyBtbGFyaW5vKTwvbGk+CgkJ PGxpPjA5IEZlYiAxMCB8IDAuMiB8IE5hdGl2ZSBzdXBwb3J0IGZvciB6aXAgaW1wb3J0aW5n IGFuZCBleHBvcnRpbmcgKGFsbW9zdCkgaXJyZXNwZWN0aXZlIG9mIHlvdXIgPHNwYW4gY2xh c3M9ImNhcHMiPlBIUDwvc3Bhbj4gZW52aXJvbm1lbnQgOyB6aXAgaXMgbm93IHRoZSBkZWZh dWx0IHN5c3RlbSA7IGJldHRlciBub3RpZmljYXRpb24gb2Ygc3VwcG9ydGVkIGNvbXByZXNz aW9uIHR5cGVzIGFuZCBtb3JlIHJvYnVzdCByZWplY3Rpb24gaWYgc29tZXRoaW5nIGlzIG1p c3Npbmc8L2xpPgoJCTxsaT4xMCBGZWIgMTAgfCAwLjIxIHwgRml4ZWQgYnppcDIgd2Fybmlu ZyAodGhhbmtzIHRoZWJvbWJzaXRlKSA7IGZpeGVkIHJlY3Vyc2l2ZSBta2RpciBwcm9ibGVt IHdpdGggYnppcDIgZmlsZXMgKHRoYW5rcyA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PiBtYW51YWwgY29tbWVudHMpIDsgZml4ZWQgcm9ndWUgdGVtcCBmaWxlIGxlZnQgYmVoaW5k IHdpdGggemlwIGltcG9ydDwvbGk+CgkJPGxpPjE1IEZlYiAxMCB8IDAuMjIgfCBXaGVuIHJl bmFtaW5nIHRoZSBjb3JlIHRoZW1lIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZp bGUsIGF1dG9tYXRpY2FsbHkgcmVuYW1lIGRpcmVjdG9yeSB0b28gKHRoYW5rcyBmbG9vZGZp c2gpPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJjcmVkaXRzIj5DcmVkaXRzPC9oMj4KCgk8cD5U aGlzIHBsdWdpbiB3b3VsZCBub3QgaGF2ZSBleGlzdGVkIHdpdGhvdXQgdGhlIGRlZGljYXRp b24sIGlkZWFzIGFuZCBnZW5pdXMgb2YgdGhlIFRleHRwYXR0ZXJuIGRldmVsb3BtZW50IHRl YW0sIGVzcGVjaWFsbHkgUm9iZXJ0IFdldHpsbWF5ciBmb3IgdGhlIHRoZW1lIHN1cHBvcnQu IFBsdXMgb2YgY291cnNlIHRoZSBhcm15IG9mIGJldGEgdGVzdGVycywgaWRlYXMgaGFtc3Rl cnMgYW5kIHRpcmVsZXNzIHRoZW1lIGFkdm9jYXRlcywgbW9zdCBub3RhYmx5IFN0dWFydCBC dXRjaGVyLCBEYWxlIENoYXBtYW4sIERhdmUgRGVTYW5kcm8sIGFuZCBNaWtlIERlbm5pcy48 L3A+CgoJPHA+SSBhbSBhbHNvIGluZGVidGVkIHRvIHRoZSBsaWJyYXJpZXMgaG9zdGVkIGF0 IDxhIGhyZWY9Imh0dHA6Ly9waHBjbGFzc2VzLm9yZy8iPjxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+IENsYXNzZXM8L2E+IHRoYXQgZW5hYmxlZCBuYXRpdmUgY29tcHJlc3Npb24g YW5kIGRlY29tcHJlc3Npb24gb2YgdmFyaW91cyB0eXBlcy4gVGhlIGhhcmQgd29yayBvZiBE ZXZpbiBEb3VjZXR0ZSBhbmQgQWxleGFuZHJlIFRlZGVzY2hpIHJlYWxseSBhZGRlZCB0aGUg aWNpbmcgb24gdGhlIGNha2UgZm9yIHRoaXMgcGx1Z2luLjwvcD4KCgk8cD5LdWRvcyBhbmQg dGhhbmtzIHRvIHlvdSBhbGwuPC9wPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBD U1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5lLWhl aWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAx MDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5k LWNvbG9yOiAjRkZGRkNDO30KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpu b3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2 OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4 OyB9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNh bnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBo MiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsg Y29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hl bHAgaDMgeyBjb2xvcjogIzI3NTY4NTsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNl cmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNm b3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAg aDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5n OiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0K I3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzMzZDsgfQojc21k X2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7 IH0KI3NtZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRk aW5nLWJvdHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVyOjFw eCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5 bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5yZXF1aXJlZCB7Y29sb3I6cmVkO30KI3Nt ZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJl YWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENT UyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6ImY4NzU1MmM0NzRiY2IzMmE0MmM0NzJlZTM4 ZjdiNDEzIjt9