# Name: smd_admin_themes v0.23 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjIzIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czoxMTI5NDg6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglnbG9iYWwg 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 dGFyJykpOw0KDQoJaWYgKCRkaXJlY3Rpb24gPT0gJ2V4cG9ydCcpIHsNCgkJaWYgKGZ1bmN0 aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZ3pvcGVuJykg JiYgZnVuY3Rpb25fZXhpc3RzKCdnendyaXRlJykpIHsNCgkJCSRzbWRfY3J1c2hlcnNbJ2d6 aXAnXSA9IHNtZF9hdF9nVHh0KCdjX2d6aXAnKTsNCgkJCSRzbWRfY3J1c2hlcnNbJ3ppcCdd ID0gc21kX2F0X2dUeHQoJ2NfemlwJyk7DQoJCX0NCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygn Ynpjb21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0cygnYnpvcGVuJykgJiYgZnVuY3Rpb25f ZXhpc3RzKCdiendyaXRlJykpIHsNCgkJCSRzbWRfY3J1c2hlcnNbJ2J6aXAyJ10gPSBzbWRf YXRfZ1R4dCgnY19iemlwMicpOw0KCQl9DQoJfSBlbHNlIHsNCgkJLy8gSW1wb3J0IGZ1bmN0 aW9uIHJlcXVpcmVtZW50cw0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdnemluZmxhdGUnKSkg ew0KCQkJJHNtZF9jcnVzaGVyc1snZ3ppcCddID0gc21kX2F0X2dUeHQoJ2NfZ3ppcCcpOw0K CQkJJHNtZF9jcnVzaGVyc1snemlwJ10gPSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgkJfQ0K CQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdiemRlY29tcHJlc3MnKSkgew0KCQkJJHNtZF9jcnVz aGVyc1snYnppcDInXSA9IHNtZF9hdF9nVHh0KCdjX2J6aXAyJyk7DQoJCX0NCgl9DQoJcmV0 dXJuICRzbWRfY3J1c2hlcnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX2F0X2V4cG9ydCgpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X3By ZWZzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCdjcnVzaCcpKSkp Ow0KCSRtZXNzYWdlPScnOw0KCWNoZGlyKFRIRU1FKTsNCgkkb3V0ID0gJHNraW47DQoNCgkv LyBDaGVjayB0aGUgcGFzc2VkIGNvbXByZXNzaW9uIGZvcm1hdCBpcyB2YWxpZDsgdXNlIGRl ZmF1bHQgaWYgbm90DQoJJGNydXNoZXJzID0gc21kX2F0X2NydXNoX29wdGlvbnMoKTsNCglp ZiAoJGNydXNoPT0nJyB8fCAkY3J1c2g9PSd1bmRlZmluZWQnIHx8ICFhcnJheV9rZXlfZXhp c3RzKCRjcnVzaCwgJGNydXNoZXJzKSkgew0KCQkkY3J1c2ggPSBnZXRfcHJlZignc21kX2F0 X2NydXNoJywgJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X2NydXNoJ10pOw0KCX0NCg0KCXN3 aXRjaCgkY3J1c2gpIHsNCgkJY2FzZSAnemlwJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3pp cF9maWxlKCRvdXQuJy56aXAnKTsNCgkJCWJyZWFrOw0KCQljYXNlICdiemlwMic6DQoJCQkk emlwID0gbmV3IHNtZF9hdF9iemlwX2ZpbGUoJG91dC4nLnRiejInKTsNCgkJCWJyZWFrOw0K CQljYXNlICd0YXInOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoJG91dC4nLnRh cicpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2d6aXAnOg0KCQlkZWZhdWx0Og0KCQkJJHppcCA9 IG5ldyBzbWRfYXRfZ3ppcF9maWxlKCRvdXQuJy50Z3onKTsNCiAJCQlicmVhazsNCgl9DQoN CgkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gdHhwYXRoLkRTLlRIRU1F LCAnb3ZlcndyaXRlJyA9PiAxLCAnaW5tZW1vcnknID0+IDEpKTsNCgkkemlwLT5hZGRfZmls ZXMoJHNraW4uRFMuJyouKicpOw0KCSR6aXAtPmV4Y2x1ZGVfZmlsZXMoJHNraW4uRFMuJyou c3ZuKicpOw0KCSR6aXAtPmNyZWF0ZV9hcmNoaXZlKCk7DQoJJHppcC0+ZG93bmxvYWRfZmls ZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9h dF9pbXBvcnQoKSB7DQoJZ2xvYmFsICRwcmVmczsNCg0KCSRuYW1lID0gJF9GSUxFU1sndGhl ZmlsZSddWyduYW1lJ107DQoJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyd0 aGVmaWxlJ11bJ3RtcF9uYW1lJ10sIHR4cGF0aC5EUy5USEVNRS5iYXNlbmFtZSgkX0ZJTEVT Wyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pKTsNCgkkYmFzZWRpciA9IHR4cGF0aC5EUy5USEVN RTsNCgkkdW5jcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCdpbXBvcnQnKTsNCgkk bWVzc2FnZT0nJzsNCgkkaW5mbyA9IGV4cGxvZGUgKCcuJywkbmFtZSk7DQoJJGV4dCA9ICRp bmZvWzFdOw0KDQoJaWYgKCRuYW1lICYmICRmaWxlKSB7DQoJCWlmICgkZXh0ID09ICd6aXAn ICYmIGFycmF5X2tleV9leGlzdHMoJ3ppcCcsICR1bmNydXNoZXJzKSkgew0KCQkJJHppcCA9 IG5ldyBzbWRfZFVuemlwMigkZmlsZSk7DQovLwkJCSR6aXAtPmRlYnVnID0gdHJ1ZTsNCgkJ CSR6aXAtPmdldExpc3QoKTsNCgkJCSR2YWxpZEFyY2hpdmUgPSBzbWRfYXRfY2hlY2tfYXJj aGl2ZSgkemlwLT5jb21wcmVzc2VkTGlzdCwgJGV4dCk7DQoJCQlpZiAoJHZhbGlkQXJjaGl2 ZSkgew0KCQkJCSR6aXAtPnVuemlwQWxsKCRiYXNlZGlyKTsNCgkJCQkkemlwLT5jbG9zZSgp Ow0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQkJfSBlbHNl IHsNCgkJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF9hdF9nVHh0KCdpbXBvcnRfZmFpbGVkJyks IEVfV0FSTklORyk7DQoJCQl9DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAndGd6JyAmJiBhcnJh eV9rZXlfZXhpc3RzKCdnemlwJywgJHVuY3J1c2hlcnMpKSB7DQoJCQkkemlwID0gbmV3IHNt ZF9hdF9nemlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25z KGFycmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJ JHppcC0+ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1w b3J0X29rJyk7DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAndGJ6MicgJiYgYXJyYXlfa2V5X2V4 aXN0cygnYnppcDInLCAkdW5jcnVzaGVycykpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2J6 aXBfZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXko J2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5l eHRyYWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2sn KTsNCgkJfSBlbHNlIGlmICgkZXh0ID09ICd0YXInKSB7DQoJCQkkemlwID0gbmV3IHNtZF9h dF90YXJfZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJy YXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlw LT5leHRyYWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRf b2snKTsNCgkJfSBlbHNlIHsNCgkJCSRtZXNzYWdlID0gYXJyYXkoc21kX2F0X2dUeHQoJ3Vu c3VwcG9ydGVkX2NvbXByZXNzaW9udHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAkZXh0KSks IEVfV0FSTklORyk7DQoJCX0NCg0KCQkvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlDQoJ CXVubGluaygkZmlsZSk7DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgn ZW1wdHlfaW5mbycpOw0KCX0NCg0KCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCn0NCg0KLy8g Q2hlY2sgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgdGhlIGFyY2hpdmUgZm9yIHZhcmlv dXMgaXRlbXMvYXR0cmlidXRlcy4NCi8vIEVhY2ggdGltZSBvbmUgb2YgdGhlIGNvbmRpdGlv bnMgaXMgbWV0LCB0aGUgdmNudCBpcyBpbmNyZW1lbWVudGVkLg0KLy8gT25jZSB0aGUgd2hv bGUgYXJjaGl2ZSBoYXMgYmVlbiByZWFkLCBpZiB0aGUgdmNudCBtYXRjaGVzIHRoZSBleHBl Y3RlZENvdW50cyBmb3INCi8vIHRoYXQgdHlwZSwgdGhlIGFyY2hpdmUgaXMgdmFsaWQuDQpm dW5jdGlvbiBzbWRfYXRfY2hlY2tfYXJjaGl2ZSgkc3RydWN0LCAkdHlwZT0nemlwJykgew0K CSRleHBlY3RlZENvdW50cyA9IGFycmF5KCd6aXAnID0+IDEsICd0Z3onID0+IDAsICd0Ynoy JyA9PiAwLCAndGFyJyA9PiAwKTsNCglzd2l0Y2ggKCR0eXBlKSB7DQoJCWNhc2UgInppcCI6 DQoJCQkkdmNudCA9IDA7DQoJCQlmb3JlYWNoICgkc3RydWN0IGFzICRlbnRyeSA9PiAkaW5m bykgew0KCQkJCSRwYXJ0cyA9IHBhdGhpbmZvKCRpbmZvWydmaWxlX25hbWUnXSk7DQoJCQkJ aWYgKGlzc2V0KCRwYXJ0c1snZXh0ZW5zaW9uJ10pICYmICRwYXJ0c1snZXh0ZW5zaW9uJ10g PT0gJ3BocCcpIHsNCgkJCQkJJGRpcmJpdHMgPSBleHBsb2RlKERTLCAkcGFydHNbJ2Rpcm5h bWUnXSk7DQoJCQkJCSRudW1kaXJzID0gY291bnQoJGRpcmJpdHMpOw0KCQkJCQlpZiAoKCRw YXJ0c1snZmlsZW5hbWUnXSA9PSAkZGlyYml0c1skbnVtZGlycy0xXSkgJiYgJG51bWRpcnM9 PTEpIHsNCgkJCQkJCSR2Y250Kys7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlicmVhazsN Cgl9DQoNCglyZXR1cm4gKCRleHBlY3RlZENvdW50c1skdHlwZV0gPT0gJHZjbnQpID8gdHJ1 ZSA6IGZhbHNlOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF9hdF91cGxvYWRfaW1hZ2UoKSB7DQoJZ2xvYmFsICRmaWxlX21heF91cGxvYWRfc2l6 ZTsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdpZCcpKSkpOw0KCSRfUE9TVFsn c2tpbiddID0gJHNraW4gPSAkaWQ7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZpbGUnXVsn bmFtZSddOw0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSdd Wyd0bXBfbmFtZSddKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmICgkZmlsZSA9PT0gZmFsc2Up IHsNCgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuIiAkbmFtZSAt ICIudXBsb2FkX2dldF9lcnJvcm1zZygkX0ZJTEVTWyd0aGVmaWxlJ11bJ2Vycm9yJ10pOw0K CQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfQ0KDQoJJHNpemUgPSBmaWxlc2l6ZSgkZmls ZSk7DQoJaWYgKCRmaWxlX21heF91cGxvYWRfc2l6ZSA8ICRzaXplKSB7DQoJCXVubGluaygk ZmlsZSk7DQoJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFpbGVkJykgLiIgJG5h bWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jtc2coVVBMT0FEX0VSUl9GT1JNX1NJWkUpOw0KCQlz bWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfQ0KDQoJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3Nr aW5mbygkc2tpbik7DQoJJG5ld19za2luID0gJHNraW5mb1snbmFtZSddOw0KCSRuZXdwYXRo ID0gJHNraW5mb1sncGF0aCddOw0KDQoJaWYgKCRuZXdfc2tpbiAmJiAkZmlsZSkgew0KCQlp ZihzaGlmdF91cGxvYWRlZF9maWxlKCRmaWxlLCAkbmV3cGF0aC4kbmFtZSkpIHsNCgkJCSRt ZXNzYWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9zdWNjZXNzJyk7DQoJCX0gZWxzZSB7DQoJ CQl1bmxpbmsoJGZpbGUpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndXBsb2FkX2Zh aWxlZCcpOw0KCQl9DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZW1w dHlfaW5mbycpOw0KCX0NCg0KCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZGVsZXRlX2ltYWdlKCkg ew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2Eo YXJyYXkoJ3NraW4nKSkpKTsNCgkkZmlsZV9saXN0ID0gZ3BzKCdzbWRfYXRfaW1hZ2VzJyk7 DQoJJG1lc3NhZ2U9Jyc7DQoNCglpZiAoZW1wdHkoJGZpbGVfbGlzdCkpIHsNCgkJJG1lc3Nh Z2UgPSBzbWRfYXRfZ1R4dCgnZW1wdHlfaW5mbycpOw0KCX0gZWxzZSB7DQoJCWlmIChpbl9h cnJheSgkc2tpbiwgJHNtZF9jb3JlX3RoZW1lcykpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0 X2dUeHQoJ2NvcmVfdGhlbWVfZmlsZScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSk7DQoJ CX0gZWxzZSB7DQoJCQlmb3JlYWNoICgkZmlsZV9saXN0IGFzICRpbWFnZSkgew0KCQkJCSRw YXRoID0gdHhwYXRoLkRTLiRpbWFnZTsNCgkJCQl1bmxpbmsoJHBhdGgpOw0KCQkJfQ0KCQl9 DQoJfQ0KDQoJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9kZWxldGUoKSB7DQoJZ2xvYmFsICRzbWRf Y29yZV90aGVtZXMsICR0aGVtZSwgJHNtZF9hdF9wcml2cywgJHNtZF9hdF9ldmVudDsNCg0K CWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ2ZpbGUnKSkpKTsNCgkkbWVz c2FnZT0nJzsNCg0KCWlmICgkZmlsZSkgew0KCQkvLyBFZGl0aW5nIGEgc2tpbiwgdGh1cyBk ZWxldGluZyBhIHNpbmdsZSBmaWxlDQoJCWlmIChpbl9hcnJheSgkc2tpbiwgJHNtZF9jb3Jl X3RoZW1lcykpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2NvcmVfdGhlbWVfZmls ZScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSk7DQoJCQlzbWRfYXRfZWRpdCgkbWVzc2Fn ZSk7DQoJCX0gZWxzZSB7DQoJCQkkZGVsID0gdW5saW5rKFRIRU1FLiRza2luLkRTLiRmaWxl KTsNCgkJCWlmICgkZGVsKSB7DQoJCQkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX2RlbGV0ZWQn LCBhcnJheSgne25hbWV9JyA9PiAkZmlsZSkpOw0KCQkJCSRfUE9TVFsnZmlsZSddID0gJyc7 IC8vIENsZWFyIHRoZSB2YXJpYWJsZSBzbyB0aGUgZmlsZW5hbWUgZG9lc24ndCBhcHBlYXIg b24gdGhlIGVkaXQgcGFnZQ0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9n VHh0KCdmaWxlX25vdF9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZpbGUpKTsNCgkJ CX0NCgkJfQ0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfSBlbHNlIHsNCgkJaWYgKGlu X2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnY29yZV90aGVtZScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSk7DQoJCQlz bWRfYXRfbGlzdCgkbWVzc2FnZSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBWaWV3aW5nIHRoZSBz a2luIGxpc3QsIHRodXMgZGVsZXRpbmcgdGhlIHdob2xlIHNraW4NCgkJCSRza2luZGlyID0g VEhFTUUuJHNraW47DQoJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUoJHNraW5kaXIpKSB7 DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZGVsZXRlX2ZhaWxlZCcpOw0KCQkJfSBl bHNlIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdza2luX2RlbGV0ZWQnLCBhcnJh eSgne25hbWV9JyA9PiAkc2tpbikpOw0KCQkJfQ0KDQoJCQkvLyBIYW5kbGUgc2l0dWF0aW9u cyBpZiBjdXJyZW50IHNraW4gaGFzIGJlZW4gZGVsZXRlZA0KCQkJaWYgKCFmaWxlX2V4aXN0 cyh0eHBhdGguRFMuVEhFTUUuJHNraW4pKSB7DQoJCQkJJGF0X3ByZWZzID0gc21kX2F0X2dl dF9wcmVmcygpOw0KDQoJCQkJLy8gUmVzZXQgdGhlIGdsb2JhbCBza2luIGluIGNhc2UgaXQn cyBiZWVuIGRlbGV0ZWQNCgkJCQkkZ2JsX3NraW4gPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRf YXRfZ2xvYmFsX3NraW4nXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6 ICcnOw0KCQkJCSRnYmxfc2tpbiA9ICgkZ2JsX3NraW4gIT0gJycgJiYgZmlsZV9leGlzdHMo dHhwYXRoLkRTLlRIRU1FLiRnYmxfc2tpbikpID8gJGdibF9za2luIDogJ2NsYXNzaWMnOw0K CQkJCXNldF9wcmVmKCdzbWRfYXRfZ2xvYmFsX3NraW4nLCAkZ2JsX3NraW4sICRzbWRfYXRf ZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCXNldF9wcmVmKCd0aGVt ZV9uYW1lJywgJGdibF9za2luKTsNCg0KCQkJCSRza2luID0gZ2V0X3ByZWYoJ3NtZF9za2lu Jyk7DQoJCQkJaWYgKCFmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUuJHNraW4pKSB7DQoJ CQkJCSRza2luID0gJGdibF9za2luOw0KCQkJCX0NCgkJCQlzZXRfcHJlZignc21kX3NraW4n LCAkc2tpbiwgJ3NtZF9hdCcsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZf UFJJVkFURSk7DQoJCQl9DQoJCQkkX0dFVFsnc2tpbiddID0gJHNraW47DQoJCQkkX0dFVFsn bmV4dHN0ZXAnXSA9ICdzbWRfYXRfbGlzdCc7DQoJCQlzbWRfYXRfc3dpdGNoKCRtZXNzYWdl KTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfc2F2ZSgpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbics J25ld19za2luJywnZmlsZScsJ3NtZF9hdF9lZGl0cycpKSkpOw0KDQoJJGVkaXRhYmxlID0g YXJyYXkoInNzYyIsICJjc3MiLCAianMiLCAicGhwIik7DQoJJG1lc3NhZ2UgPSAkZXh0cmFN c2cgPSAnJzsNCgkkZmlsZSA9IHRyaW0oJGZpbGUpOw0KCSRuZXdfc2tpbiA9IHRyaW0oJG5l d19za2luKTsNCgkkbXNnbGV2ID0gMDsNCg0KCS8vIE5ldyBmaWxlDQoJaWYgKCEkZmlsZSAm JiAkbmV3X3NraW4pIHsNCgkJJGZpbGUgPSAkbmV3X3NraW47DQoJCSRleHQgPSBhcnJheV9w b3AoZXhwbG9kZSAoJy4nLCRmaWxlKSk7DQoJCWlmIChzdHJ0b2xvd2VyKCRmaWxlKSAhPSAn cmVhZG1lJyAmJiAoJGV4dCA9PSAnJyB8fCAhaW5fYXJyYXkoJGV4dCwgJGVkaXRhYmxlKSkp IHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVkX2ZpbGV0eXBlJyku c21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVkX2Z1ZGdlJyk7DQoJCQkkbXNnbGV2ID0gRV9XQVJO SU5HOw0KCQkJJF9QT1NUWydmaWxlJ10gPSAkZmlsZTsNCgkJfQ0KCX0NCg0KCWlmICgkbWVz c2FnZT09JycpIHsNCgkJJGZuYW1lID0gc2FuaXRpemVGb3JGaWxlKCRmaWxlKTsNCgkJJG5l d19za2luID0gcmF3dXJsZW5jb2RlKCRuZXdfc2tpbik7DQoJCSRfUE9TVFsnbmV3X3NraW4n XSA9ICRuZXdfc2tpbjsNCg0KCQkkc21kX2F0X2VkaXRzID0gZG9TdHJpcChzdHJfcmVwbGFj ZSgnXHJcbicsJw0KJywkc21kX2F0X2VkaXRzKSk7IC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0K DQoJCWlmICgkZm5hbWUpIHsNCgkJCSRmaWxlcGF0aCA9IFRIRU1FLiRza2luLkRTOw0KCQkJ aWYgKCFmaWxlX2V4aXN0cygkZmlsZXBhdGguJGZuYW1lKSkgew0KCQkJCSRyZXQgPSB0b3Vj aCgkZmlsZXBhdGguJGZuYW1lKTsNCgkJCQlpZiAoJHJldCA9PT0gZmFsc2UpIHsNCgkJCQkJ JG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnbWtkaXJfZmFpbGVkJywgYXJyYXkoJ3tuYW1lfScg PT4gJGZuYW1lKSk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBBc3N1bWluZyBubyBlcnJvcnMg c28gZmFyLi4uDQoJCQlpZiAoJG1lc3NhZ2UgPT0gJycpIHsNCgkJCQkkZmggPSBmb3Blbigk ZmlsZXBhdGguJGZuYW1lLCAnd2InKTsNCgkJCQlmd3JpdGUoJGZoLCAkc21kX2F0X2VkaXRz KTsNCgkJCQlmY2xvc2UoJGZoKTsNCg0KCQkJCWlmICgkZm5hbWUgIT0gJG5ld19za2luKSB7 DQoJCQkJCS8vIFJlbmFtZSB0aGUgZmlsZQ0KCQkJCQkkcmVzID0gcmVuYW1lKCRmaWxlcGF0 aC4kZm5hbWUsICRmaWxlcGF0aC4kbmV3X3NraW4pOw0KDQoJCQkJCS8vIElmIHRoZSByZW5h bWVkIGZpbGUgaXMgdGhlIHRoZW1lJ3MgUEhQIGZpbGUsIHRyeSB0byByZW5hbWUgdGhlIG1h aW4gc2tpbiBkaXIgdG9vDQoJCQkJCSRmaWxlYml0cyA9IGV4cGxvZGUoJy4nLCAkbmV3X3Nr aW4pOw0KCQkJCQkkb2xkZmlsZWJpdHMgPSBleHBsb2RlKCcuJywgJGZuYW1lKTsNCgkJCQkJ JGV4dCA9IGFycmF5X3BvcCgkZmlsZWJpdHMpOw0KCQkJCQlpZiAoJHJlcyAmJiAkZXh0ID09 ICdwaHAnICYmICgkb2xkZmlsZWJpdHNbMF0gPT0gJHNraW4pKSB7DQoJCQkJCQkkbmV3X2Zp bGVwYXRoID0gVEhFTUUuJGZpbGViaXRzWzBdLkRTOw0KCQkJCQkJJHJlbiA9IHJlbmFtZSgk ZmlsZXBhdGgsICRuZXdfZmlsZXBhdGgpOw0KCQkJCQkJJGZpbGVwYXRoID0gKCRyZW4pID8g JG5ld19maWxlcGF0aCA6ICRmaWxlcGF0aDsNCgkJCQkJCSRfUE9TVFsnc2tpbiddID0gJGZp bGViaXRzWzBdOw0KCQkJCQl9DQoJCQkJCSRleHRyYU1zZyA9ICgkcmVzKSA/IHNtZF9hdF9n VHh0KCdyZW5hbWVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSkgOiBzbWRfYXRf Z1R4dCgncmVuYW1lX2ZhaWxlZCcpOw0KCQkJCX0NCg0KCQkJCS8vIFByb2Nlc3MgYW55IGNz cyByZXBsYWNlbWVudHMNCgkJCQkkZmlsZWJpdHMgPSBleHBsb2RlICgnLicsKCgkZm5hbWU9 PSRuZXdfc2tpbik/ICRmbmFtZSA6ICRuZXdfc2tpbikpOw0KCQkJCSRjc3NmaWxlID0gJGZp bGViaXRzWzBdOw0KCQkJCSRleHQgPSBhcnJheV9wb3AoJGZpbGViaXRzKTsNCgkJCQlpZiAo JGV4dCA9PSAnc3NjJykgew0KCQkJCQkkcmVwbGFjZW1lbnRzID0gYXJyYXkoKTsNCgkJCQkJ JG51bV9yZXAxID0gcHJlZ19tYXRjaF9hbGwoJy8oXEBbQS1aYS16MC05X10rKTpccyooLiop Oy8nLCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hlczEpOw0KCQkJCQkkbnVtX3JlcDIgPSBwcmVn X21hdGNoX2FsbCgnLyhcQFtBLVphLXowLTlfXSspOlxzKlx7KC4qPylcfS9zJywgJHNtZF9h dF9lZGl0cywgJG1hdGNoZXMyKTsNCg0KCQkJCQkvLyBTaW1wbGUgcmVwbGFjZW1lbnRzDQoJ CQkJCWZvcmVhY2goJG1hdGNoZXMxIGFzICRpZHggPT4gJHJlcGFycikgew0KCQkJCQkJaWYg KCRpZHggPT0gMCkgew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgdmFyIGRlZmluaXRpb25zDQoJ CQkJCQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7DQoJCQkJCQkJCSRzbWRfYXRfZWRp dHMgPSBzdHJfcmVwbGFjZSgkcmVwLCAnJywkc21kX2F0X2VkaXRzKTsNCgkJCQkJCQl9DQoJ CQkJCQl9DQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7DQoJCQkJCQkJZm9yZWFjaCAoJHJlcGFy ciBhcyAkamR4ID0+ICRyZXApIHsNCgkJCQkJCQkJJHJlcGxhY2VtZW50c1skcmVwXSA9ICRt YXRjaGVzMVsyXVskamR4XTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkv LyBNdWx0aS1saW5lIHJlcGxhY2VtZW50cw0KCQkJCQlmb3JlYWNoKCRtYXRjaGVzMiBhcyAk aWR4ID0+ICRyZXBhcnIpIHsNCgkJCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJCQkvLyBS ZW1vdmUgdGhlIHZhciBkZWZpbml0aW9ucw0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMg JHJlcCkgew0KCQkJCQkJCQkkc21kX2F0X2VkaXRzID0gc3RyX3JlcGxhY2UoJHJlcCwgJycs JHNtZF9hdF9lZGl0cyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKCRpZHggPT0g MSkgew0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJGpkeCA9PiAkcmVwKSB7DQoJCQkJ CQkJCSRyZXBsYWNlbWVudHNbJHJlcC4nOyddID0gdHJpbSgkbWF0Y2hlczJbMl1bJGpkeF0p Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIEdlbmVyYXRlIGFuZCB3 cml0ZSB0aGUgbmV3IGNzcyBmaWxlDQoJCQkJCSRzbWRfYXRfZWRpdHMgPSB0cmltKHN0cnRy KCRzbWRfYXRfZWRpdHMsICRyZXBsYWNlbWVudHMpKTsNCgkJCQkJJGZoID0gZm9wZW4oJGZp bGVwYXRoLiRjc3NmaWxlLicuY3NzJywgJ3diJyk7DQoJCQkJCWZ3cml0ZSgkZmgsICRzbWRf YXRfZWRpdHMpOw0KCQkJCQlmY2xvc2UoJGZoKTsNCgkJCQkJaWYgKCRmbmFtZSAhPSAkbmV3 X3NraW4pIHsNCgkJCQkJCSRvbGRmbmFtZSA9IGV4cGxvZGUgKCcuJywgJGZuYW1lKTsNCgkJ CQkJCSRvbGRmbmFtZSA9ICRvbGRmbmFtZVswXS4nLmNzcyc7DQoJCQkJCQkkcmVzID0gQHVu bGluaygkZmlsZXBhdGguJG9sZGZuYW1lKTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ2ZpbGVfc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5h bWUpKS5ici4kZXh0cmFNc2c7DQoJCQl9DQoJCX0NCgl9DQoJc21kX2F0X2VkaXQoYXJyYXko JG1lc3NhZ2UsICRtc2dsZXYpKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIFBSRUZTDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNt ZF9hdF9nZXRfcHJlZnMoKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7DQoJJHByZWZrZXlz ID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJHNtZF9hdF9wcmVmc1swXSkp KTsNCgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsJywndHhwX3ByZWZzJywnbmFtZSBpbiAo Jy4kcHJlZmtleXMuJyknKTsNCgkkYXRfcHJlZnMgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRy cyBhcyAkcHJlZmFycikgew0KCQkkYXRfcHJlZnNbJHByZWZhcnJbJ25hbWUnXV0gPSAkcHJl ZmFyclsndmFsJ107DQoJfQ0KCXJldHVybiAkYXRfcHJlZnM7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X29wdGlvbnMoJGV2ZW50LCAkc3Rl cCwgJG1lc3NhZ2U9JycpIHsNCglzbWRfYXRfc2V0dXAoJG1lc3NhZ2UpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zZXR1cCgkbWVzc2Fn ZT0nJykgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnMsICRzbWRfYXRfZXZlbnQs ICR0aGVtZSwgJHNtZF9jb3JlX3RoZW1lczsNCg0KCSRudW1SZXFQcmVmcyA9IGNvdW50KCRz bWRfYXRfcHJlZnNbMF0pOw0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkk bnVtUm93cyA9IGNvdW50KCRhdF9wcmVmcyk7DQoNCglwYWdldG9wKGdUeHQoJ3ByZWZzJyks JG1lc3NhZ2UpOw0KDQoJLy8gWXVrLCB3aHkncyB0aGlzIG5vdCBhdmFpbGFibGUgZ2xvYmFs bHk/IQ0KCSRsZXZlbHMgPSBhcnJheSgNCi8vCQkxID0+IGdUeHQoJ3B1Ymxpc2hlcicpLA0K CQkyID0+IGdUeHQoJ21hbmFnaW5nX2VkaXRvcicpLA0KCQkzID0+IGdUeHQoJ2NvcHlfZWRp dG9yJyksDQoJCTQgPT4gZ1R4dCgnc3RhZmZfd3JpdGVyJyksDQoJCTUgPT4gZ1R4dCgnZnJl ZWxhbmNlcicpLA0KCQk2ID0+IGdUeHQoJ2Rlc2lnbmVyJyksDQoJKTsNCgkkbnVtTGV2cyA9 IGNvdW50KCRsZXZlbHMpOw0KDQoJLy8gU3BsaXQgdGhlIHVzZXIgc2tpbiBsaXN0DQoJJHVz a2lucyA9IGFycmF5KCk7DQoJaWYgKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlz dCddKSkgew0KCQkkdXNraW5zID0gZXhwbG9kZSgnLCcsICRhdF9wcmVmc1snc21kX2F0X3Vz ZXJfbGlzdCddKTsNCgl9DQoNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0 X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoJJGNsckJ0 biA9ICcgWzxzcGFuIGlkPSJzbWRfY2xyIiBjbGFzcz0ic21kX2Zha2VidG4iPicuc21kX2F0 X2dUeHQoJ2NsZWFyJykuJzwvc3Bhbj5dJzsNCgkkYnRuU2V0ID0gZklucHV0KCdzdWJtaXQn LCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldCcpLCAncHVibGlzaCcpOw0KCSRidG5TYXZl ID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcp Ow0KCSRidG5JbnN0YWxsID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9 Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX2luc3RhbGwiIHN0eWxl PSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdp bnN0YWxsJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOw0KCSRidG5SZW1vdmUgPSAnPGZvcm0g bWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3Rl cD1zbWRfYXRfcHJlZnNfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0 KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnZGVsZXRlJyksICdzbWFsbGVyYm94JykuJzwv Zm9ybT4nOw0KCSRidG5MaXN0ID0gJyA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50 PScuJHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ICdz a2luX2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJJGJ0blN0eWxlID0g JyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcmFkQnRucyA9IGFycmF5KA0K CQlzbWRfYXRfZ1R4dCgncGVyX3NpdGUnKSwNCgkJc21kX2F0X2dUeHQoJ3Blcl9ncm91cCcp LA0KCQlzbWRfYXRfZ1R4dCgncGVyX3VzZXInKSwNCgkpOw0KDQoJZWNobyBzdGFydFRhYmxl KCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykgew0KCQkvLyBQcmVm cyBhbGwgaW5zdGFsbGVkDQoJCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygpOw0K DQoJCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRvIGJlIHRo ZSBzYW1lIGluIHRoaXMgY2FzZQ0KCQkkc2tpbnNlbCA9IGFycmF5KCk7DQoJCWZvcmVhY2go JHNraW5fbGlzdCBhcyAka2V5MSA9PiAkdmFsdWUxKSB7DQoJCQlpZiAoc21kX2F0X2V4aXN0 cygkdmFsdWUxKSkgew0KCQkJCSRza2luc2VsWyR2YWx1ZTFdID0gJHNraW5fbGlzdFska2V5 MV07DQoJCQl9DQoJCX0NCgkJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0 X2dsb2JhbF9za2luJ10pICYmICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gIT0g JycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6ICR0aGVtZS0+bmFtZTsN Cg0KCQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAn IGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92ZS4kYnRuTGlzdCwgJGJ0blN0eWxlKSAp Ow0KCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9h dF9ldmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc191cGRhdGUiIG9uc3VibWl0PSJyZXR1 cm4gc21kX3ByZXN1YigpOyI+JzsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2Nhc2Vf c29ydCcpKS50ZGEoeWVzbm9SYWRpbygnc21kX2F0X2Nhc2Vfc29ydCcsICRhdF9wcmVmc1sn c21kX2F0X2Nhc2Vfc29ydCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2Nhc2Vfc29y dCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjcnVzaF90eXBlJykpLnRkYShy YWRpb1NldChzbWRfYXRfY3J1c2hfb3B0aW9ucygpLCAnc21kX2F0X2NydXNoJywgJGF0X3By ZWZzWydzbWRfYXRfY3J1c2gnXSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9jcnVzaCIn KSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdsYXlvdXQnKSkudGRhKHJhZGlvU2V0 KGFycmF5KHNtZF9hdF9nVHh0KCdsYXlvdXRfbGlzdCcpLCBzbWRfYXRfZ1R4dCgnbGF5b3V0 X2dyaWQnKSksICdzbWRfYXRfbGF5b3V0JywgJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10p LCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfbGF5b3V0IicpKTsNCgkJZWNobyB0cih0ZGEo c21kX2F0X2dUeHQoJ3RodW1ic2l6ZScpKS50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9hdF90 dycsICRhdF9wcmVmc1snc21kX2F0X3R3J10sJycsJycsJycsNCkuc21kX2F0X2dUeHQoJ3Rp bWVzJykuZklucHV0KCd0ZXh0JywgJ3NtZF9hdF90aCcsICRhdF9wcmVmc1snc21kX2F0X3Ro J10sJycsJycsJycsNCkpKTsNCgkJZWNobyB0cigNCgkJCXRkKHNtZF9hdF9nVHh0KCdnbG9i YWxfc2tpbicpKQ0KCQkJLnRkKHNlbGVjdElucHV0KCdzbWRfYXRfZ2xvYmFsX3NraW4nLCAk c2tpbnNlbCwgJGdibF9za2luLCAwLCAwKSkNCgkJKTsNCgkJZWNobyB0cih0ZGEoc21kX2F0 X2dUeHQoJ3NraW5fc3lzdGVtJykpLnRkYShyYWRpb1NldCgkcmFkQnRucywgJ3NtZF9hdF9z eXN0ZW0nLCAkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSksICcgd2lkdGg9IjI0MCIgaWQ9 InNtZF9hdF9yYWRpbyInKSk7DQoNCgkJLy8gT3B0aW9uIDENCgkJJHByaXZfbGlzdCA9ICc8 c2VsZWN0IGlkPSJzbWRfYXRfcHJpdnMiIG5hbWU9InNtZF9hdF9wcml2c1tdIiBjbGFzcz0i bGlzdCIgc2l6ZT0iJy4kbnVtTGV2cy4nIiBtdWx0aXBsZT0ibXVsdGlwbGUiPic7DQoJCWZv cmVhY2ggKCRsZXZlbHMgYXMgJGxldmlkID0+ICRsZXZuYW1lKSB7DQoJCQkkcHJpdl9saXN0 IC49ICc8b3B0aW9uIHZhbHVlPSInLiRsZXZpZC4nIj4nLiRsZXZuYW1lLic8L29wdGlvbj4n Ow0KCQl9DQoJCSRwcml2X2xpc3QgLj0gJzwvc2VsZWN0Pic7DQoNCgkJLy8gTm90ZSB0aGUg aGlkZGVuIHNraW4gZ3JvdXAgYm94OyBqUXVlcnkga2VlcHMgdHJhY2sgb2YgYW55IGxpc3Qg Y2hhbmdlcyBhbmQga2VlcHMgaXQgdXBkYXRlZA0KCQkkc2VsYSA9IHNtZF9hdF9nVHh0KCdz a2luX2dyb3VwcycpOw0KCQkkc2VsYiA9IGhJbnB1dCgnc21kX2F0X2dyb3VwX2xpc3QnLCAk YXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10pOw0KCQkkc2VsYiAuPSAnPHNlbGVjdCBp ZD0ic21kX2F0X2dycHMiIG5hbWU9InNtZF9hdF9ncnBzIiBjbGFzcz0ibGlzdCIgc2l6ZT0i Jy4kbnVtTGV2cy4nIj4nOw0KCQlmb3JlYWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0K CQkJaWYgKHNtZF9hdF9leGlzdHMoJGFza2luKSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9u IHZhbHVlPSInLiRhc2tpbi4nIj4nLiRhc2tpbi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJfQ0K CQkkc2VsYiAuPSAnPC9zZWxlY3Q+JzsNCgkJZWNobyB0cih0ZGEoJHNlbGEsICcgY2xhc3M9 InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykgLiB0ZGEoJHNlbGIuJHByaXZfbGlzdCwgJyB3 aWR0aD0iNDAwIiBjbGFzcz0ic21kX2F0X3NlbDEgc21kX2hpZGRlbiInKSk7DQoNCgkJLy8g T3B0aW9uIDINCgkJJHNlbGEgPSBzbWRfYXRfZ1R4dCgnYWxsb3dlZF9za2lucycpOw0KCQkk c2VsYiA9ICc8c2VsZWN0IGlkPSJzbWRfYXRfdXNlcl9saXN0IiBuYW1lPSJzbWRfYXRfdXNl cl9saXN0W10iIGNsYXNzPSJsaXN0IiBzaXplPSI4IiBtdWx0aXBsZT0ibXVsdGlwbGUiPic7 DQoJCWZvcmVhY2ggKCRza2luX2xpc3QgYXMgJGFza2luKSB7DQoJCQlpZiAoc21kX2F0X2V4 aXN0cygkYXNraW4pKSB7DQoJCQkJJHNlbGIgLj0gJzxvcHRpb24gdmFsdWU9IicuJGFza2lu LiciJy4oKGluX2FycmF5KCRhc2tpbiwgJHVza2lucykpID8gJyBzZWxlY3RlZD0ic2VsZWN0 ZWQiJyA6ICcnKS4nPicuJGFza2luLic8L29wdGlvbj4nOw0KCQkJfQ0KCQl9DQoJCSRzZWxi IC49ICc8L3NlbGVjdD4nLiRjbHJCdG47DQoJCWVjaG8gdHIodGRhKCRzZWxhLCAnIGNsYXNz PSJzbWRfYXRfc2VsMiBzbWRfaGlkZGVuIicpIC4gdGRhKCRzZWxiLCAnIHdpZHRoPSIyNDAi IGNsYXNzPSJzbWRfYXRfc2VsMiBzbWRfaGlkZGVuIicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0 blNhdmUsICRidG5TdHlsZSkpOw0KCQllY2hvICc8L2Zvcm0+JzsNCgl9IGVsc2UgaWYgKCRu dW1Sb3dzID4gMCAmJiAkbnVtUm93cyA8ICRudW1SZXFQcmVmcykgew0KCQllY2hvIHRyKHRk YShzdHJvbmcoc21kX2F0X2dUeHQoJ3ByZWZzX3NvbWUnKSkuYnIuYnINCgkJCQkJCS5zbWRf YXRfZ1R4dCgncHJlZnNfc29tZV9leHBsYWluJykuYnIuYnINCgkJCQkJCS5zbWRfYXRfZ1R4 dCgncHJlZnNfc29tZV9vcHRpb25zJyksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIo dGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKSAuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxl KSk7DQoJfSBlbHNlIHsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ3ByZWZzX25vdF9p bnN0YWxsZWQnKSwgJyBjb2xzcGFuPSIyIicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0bkluc3Rh bGwsICRidG5TdHlsZSkpOw0KCX0NCgllY2hvIGVuZFRhYmxlKCk7DQoNCgllY2hvIDw8PEVP SlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCg0KLy8gQ29uY2F0ZW5hdGUg Y2hlY2tib3ggb3B0aW9ucyBmb3Igc3RvcmFnZQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzd2Fw KHNlbFZhbHVlKSB7DQoJZm9yIChpZHg9MDsgaWR4IDwgMzsgaWR4KyspIHsNCgkJaWYgKGlk eD09c2VsVmFsdWUpIHsNCgkJCWpRdWVyeSgiLnNtZF9hdF9zZWwiK2lkeCkuc2hvdygpOw0K CQl9IGVsc2Ugew0KCQkJalF1ZXJ5KCIuc21kX2F0X3NlbCIraWR4KS5oaWRlKCk7DQoJCX0N Cgl9DQp9DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRf YXRfc3lzdGVtJ10iKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNtZF9hdF9wcmVmc3dhcCh0 aGlzLnZhbHVlKTsNCgl9KTsNCg0KCWpRdWVyeSgnI3NtZF9jbHInKS5jbGljayhmdW5jdGlv bigpIHsNCgkJalF1ZXJ5KCcjc21kX2F0X3VzZXJfbGlzdCBvcHRpb24nKS5hdHRyKCJzZWxl Y3RlZCIsICIiKTsNCgl9KTsNCg0KCWpRdWVyeSgiI3NtZF9hdF9ncnBzIikuY2hhbmdlKGZ1 bmN0aW9uKCkgew0KCQlzZWxza2luID0galF1ZXJ5KHRoaXMpLnZhbCgpOw0KDQoJCS8vIENs ZWFyIHRoZSBvbGQgcHJpdnMgbGlzdCBhbmQgZ3JhYiB0aGUgY3VycmVudCBsaXN0IGZyb20g dGhlIGhpZGRlbiBmaWVsZA0KCQlqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uIikuYXR0 cigic2VsZWN0ZWQiLGZhbHNlKTsNCgkJdmFyIGdycGxpc3QgPSBqUXVlcnkoImlucHV0W25h bWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwoKTsNCgkJdmFyIGdycHMgPSBncnBsaXN0 LnNwbGl0KCcsJyk7DQoJCXZhciBjbnQgPSBncnBzLmxlbmd0aDsNCgkJZm9yICh2YXIgaWR4 ID0gMDsgaWR4IDwgY250OyBpZHgrKykgew0KCQkJcHJpdnMgPSBncnBzW2lkeF0uc3BsaXQo JzonKTsNCgkJCXNraW5pZCA9IHByaXZzLnNoaWZ0KCk7DQoJCQlpZiAoc2tpbmlkID09IHNl bHNraW4pIHsNCgkJCQludW1Qcml2cyA9IHByaXZzLmxlbmd0aDsNCgkJCQlmb3IgKGpkeCA9 IDA7IGpkeCA8IG51bVByaXZzOyBqZHgrKykgew0KCQkJCQlqUXVlcnkoIiNzbWRfYXRfcHJp dnMgb3B0aW9uW3ZhbHVlPSciK3ByaXZzW2pkeF0rIiddIikuYXR0cigic2VsZWN0ZWQiLCB0 cnVlKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9KTsNCg0KCWpRdWVyeSgiI3NtZF9hdF9wcml2 cyIpLmNoYW5nZShmdW5jdGlvbigpIHsNCgkJc2Vsc2tpbiA9IGpRdWVyeSgiI3NtZF9hdF9n cnBzIG9wdGlvbjpzZWxlY3RlZCIpLnZhbCgpOw0KCQl2YXIgb3V0ID0gW107DQoJCXZhciBw cml2cyA9IFtdOw0KCQlwcml2cy5wdXNoKHNlbHNraW4pOw0KCQlqUXVlcnkoIiNzbWRfYXRf cHJpdnMgb3B0aW9uOnNlbGVjdGVkIikuZWFjaChmdW5jdGlvbigpIHsNCgkJCXByaXZzLnB1 c2goalF1ZXJ5KHRoaXMpLnZhbCgpKTsNCgkJfSk7DQoJCWlmIChwcml2cy5sZW5ndGggPT0g MSkgew0KCQkJcHJpdnMucG9wKCk7DQoJCX0gZWxzZSB7DQoJCQlvdXQucHVzaChwcml2cy5q b2luKCI6IikpOw0KCQl9DQoJCXZhciBoaWRsaXN0ID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdz bWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCXZhciBwcmV2bGlzdCA9IGhpZGxpc3Qu c3BsaXQoJywnKTsNCgkJdmFyIHByZXZjbnQgPSBwcmV2bGlzdC5sZW5ndGg7DQoNCgkJalF1 ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsNCgkJCWN1cnJz a2luID0galF1ZXJ5KHRoaXMpLnZhbCgpOw0KCQkJaWYgKGN1cnJza2luICE9IHNlbHNraW4p IHsNCgkJCQlmb3IgKHZhciBpZHggPSAwOyBpZHggPCBwcmV2Y250OyBpZHgrKykgew0KCQkJ CQlwcmV2cHJpdnMgPSBwcmV2bGlzdFtpZHhdLnNwbGl0KCc6Jyk7DQoJCQkJCXNraW5pZCA9 IHByZXZwcml2cy5zaGlmdCgpOw0KCQkJCQkvLyBHZW5lcmF0ZSB0aGUgcHJpdiBsaXN0IGZv ciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNraW4sIHJlbW92aW5nIGFueSBkdXBsaWNhdGUg cHJpdnMgc2V0IGVsc2V3aGVyZQ0KCQkJCQlpZiAoc2tpbmlkID09IGN1cnJza2luKSB7DQoJ CQkJCQl0bXBvdXQgPSBbXTsNCgkJCQkJCXRtcG91dC5wdXNoKHNraW5pZCk7DQoJCQkJCQlm b3IgKHRoaXNwcml2IGluIHByZXZwcml2cykgew0KCQkJCQkJCWlmIChqUXVlcnkuaW5BcnJh eShwcmV2cHJpdnNbdGhpc3ByaXZdLCBwcml2cykgPCAwKSB7DQoJCQkJCQkJCXRtcG91dC5w dXNoKHByZXZwcml2c1t0aGlzcHJpdl0pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlm ICh0bXBvdXQubGVuZ3RoID4gMSkgew0KCQkJCQkJCW91dC5wdXNoKHRtcG91dC5qb2luKCI6 IikpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9KTsNCgkJalF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKG91dCk7DQoJfSk7DQoNCgkv LyBEaXNwbGF5IGEgdG9vbHRpcCBzaG93aW5nIHRoZSBjdXJyZW50bHktYXNzaWduZWQgc2tp biB3aGVuIGhvdmVyaW5nIG92ZXIgYSBwcml2aWxlZ2UgbGV2ZWwNCglqUXVlcnkoIiNzbWRf YXRfcHJpdnMgb3B0aW9uIikuaG92ZXIoZnVuY3Rpb24oKSB7DQoJCWhvdml0ZW0gPSBqUXVl cnkodGhpcykudmFsKCk7DQoJCWdycHMgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9n cm91cF9saXN0J10iKS52YWwoKTsNCgkJaXRlbXMgPSBncnBzLnNwbGl0KCIsIik7DQoJCWZv ciAoaWR4ID0gMDsgaWR4IDwgaXRlbXMubGVuZ3RoOyBpZHgrKykgew0KCQkJc2tpbnogPSBp dGVtc1tpZHhdLnNwbGl0KCI6Iik7DQoJCQlmb3IgKGpkeCA9IDE7IGpkeCA8IHNraW56Lmxl bmd0aDsgamR4KyspIHsNCgkJCQlpZiAoc2tpbnpbamR4XSA9PSBob3ZpdGVtKSB7DQoJCQkJ CWpRdWVyeSh0aGlzKS5hdHRyKCJ0aXRsZSIsIHNraW56WzBdKTsNCgkJCQkJYnJlYWs7DQoJ CQkJfQ0KCQkJfQ0KCQl9DQoJfSwNCglmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0 dHIoInRpdGxlIiwgIiIpOw0KCX0pOw0KCXNtZF9hdF9wcmVmc3dhcChqUXVlcnkoImlucHV0 W25hbWU9J3NtZF9hdF9zeXN0ZW0nXTpjaGVja2VkIikudmFsKCkpOw0KCWpRdWVyeSgiI3Nt ZF9hdF9wcml2cyIpLmNoYW5nZSgpOw0KfSk7DQo8L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0 ZXh0L2NzcyI+DQouc21kX2Zha2VidG4gew0KCWNvbG9yOiM1NTU7DQoJY3Vyc29yOnBvaW50 ZXI7DQp9DQojc21kX2F0X3JhZGlvIGlucHV0IHsNCglmbG9hdDpsZWZ0Ow0KCWNsZWFyOmJv dGg7DQp9DQojc21kX2F0X3JhZGlvIGxhYmVsIHsNCglmbG9hdDpsZWZ0Ow0KfQ0KLnNtZF9o aWRkZW4gew0KCWRpc3BsYXk6bm9uZTsNCn0NCjwvc3R5bGU+DQpFT0pTOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFNwbGl0IGEgbXVsdGktY2hhciBwcmVmZXJl bmNlIHZhbHVlIGludG8gYW4gYXJyYXkgb2Yga2V5cy92YWx1ZXMuDQovLyBOb3RlOiB2YWx1 ZSBpcyBwYXNzZWQgaW4gYW5kIG5vdCByZWFkIGRpcmVjdGx5IGZyb20gdGhlIHByZWZzIGFy cmF5IGluIHRoaXMgZnVuY3Rpb24gLSBpbnRlbnRpb25hbGx5DQpmdW5jdGlvbiBzbWRfYXRf cHJlZl9leHBsb2RlKCR2YWwpIHsNCgkkb3JkZXIgPSBhcnJheV92YWx1ZXMoYXJyYXkoc21k X2F0X2dUeHQoJ2NfZ3ppcCcpLHNtZF9hdF9nVHh0KCdjX2J6aXAnKSxzbWRfYXRfZ1R4dCgn Y196aXAnKSkpOw0KCSRvbm9mZiA9IGFycmF5X3ZhbHVlcyhwcmVnX3NwbGl0KCcvLycsICR2 YWwsIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZKSk7DQoJJG91dCA9IGFycmF5KCk7DQoJZm9y ZWFjaCgkb3JkZXIgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkkb3V0WyhzdHJpbmcpJHZh bHVlMV0gPSAkb25vZmZbJGtleTFdOw0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzX2luc3RhbGwoJHNob3dwYW5lPScxJykgew0K CWdsb2JhbCAkc21kX2F0X3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJZm9yZWFjaCAoJHNt ZF9hdF9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAoIWZldGNoKCduYW1l JywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2luc2VydCgn dHhwX3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikp LicsIHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkpLicsZXZlbnQ9InNtZF9hZHNraW4i Jyk7DQoJCX0NCgl9DQoJaWYgKCRzaG93cGFuZSkgew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9n VHh0KCdwcmVmc19pbnN0YWxsZWQnKTsNCgkJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCgl9 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19yZW1vdmUoJHNob3dw YW5lPScxJykgew0KCWdsb2JhbCAkc21kX2F0X3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJ Zm9yZWFjaCAoYXJyYXlfbWVyZ2UoJHNtZF9hdF9wcmVmc1swXSwkc21kX2F0X3ByZWZzWzFd KSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMn LCduYW1lJywkcHJlZikpIHsNCgkJCSRpZCA9IHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCdu YW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3Bh bmUpIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgncHJlZnNfZGVsZXRlZCcpOw0KCQlz bWRfYXRfc2V0dXAoJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX2F0X3ByZWZzX3VwZGF0ZSgpIHsNCglnbG9iYWwgJHNtZF9wbHVnaW5fcHJlZnMsICRz bWRfYXRfcHJlZnMsICRzbWRfYXRfZXZlbnQ7DQoNCgkkbWVzc2FnZSA9ICcnOw0KCSRwb3N0 ID0gYXJyYXkoKTsNCgkkcG9zdFsnc21kX2F0X2dsb2JhbF9za2luJ10gPSBncHMoJ3NtZF9h dF9nbG9iYWxfc2tpbicpOw0KCSRwb3N0WydzbWRfYXRfc3lzdGVtJ10gPSBncHMoJ3NtZF9h dF9zeXN0ZW0nKTsNCgkkcG9zdFsnc21kX2F0X2xheW91dCddID0gZ3BzKCdzbWRfYXRfbGF5 b3V0Jyk7DQoJJHBvc3RbJ3NtZF9hdF9jYXNlX3NvcnQnXSA9IGdwcygnc21kX2F0X2Nhc2Vf c29ydCcpOw0KCSRwb3N0WydzbWRfYXRfdHcnXSA9IGdwcygnc21kX2F0X3R3Jyk7DQoJJHBv c3RbJ3NtZF9hdF90aCddID0gZ3BzKCdzbWRfYXRfdGgnKTsNCglpZiAoZ3BzKCdzbWRfYXRf dXNlcl9saXN0JykpIHsNCgkJJHBvc3RbJ3NtZF9hdF91c2VyX2xpc3QnXSA9IGpvaW4oJywn LCBncHMoJ3NtZF9hdF91c2VyX2xpc3QnKSk7DQoJfSBlbHNlIHsNCgkJJHBvc3RbJ3NtZF9h dF91c2VyX2xpc3QnXSA9ICcnOw0KCX0NCglpZiAoZ3BzKCdzbWRfYXRfZ3JvdXBfbGlzdCcp KSB7DQoJCSRwb3N0WydzbWRfYXRfZ3JvdXBfbGlzdCddID0gZ3BzKCdzbWRfYXRfZ3JvdXBf bGlzdCcpOw0KCX0NCglpZiAoZ3BzKCdzbWRfYXRfY3J1c2gnKSkgew0KCQkkcG9zdFsnc21k X2F0X2NydXNoJ10gPSBncHMoJ3NtZF9hdF9jcnVzaCcpOw0KCX0NCg0KCS8vIFNldCB0aGUg c3lzdGVtLXdpZGUgdGhlbWUgdG8gdGhlIGdsb2JhbCB0aGVtZQ0KCWlmICgkcG9zdFsnc21k X2F0X2dsb2JhbF9za2luJ10pIHsNCgkJc2V0X3ByZWYoJ3RoZW1lX25hbWUnLCAkcG9zdFsn c21kX2F0X2dsb2JhbF9za2luJ10pOw0KCX0NCg0KCWZvcmVhY2ggKCRzbWRfYXRfcHJlZnNb MF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGlzc2V0KCRwb3N0WyRwcmVmXSkpIHsN CgkJCXNldF9wcmVmKCRwcmVmLCAkcG9zdFskcHJlZl0sICRzbWRfYXRfZXZlbnQsIDIpOw0K CQl9DQoJfQ0KCSRtZXNzYWdlID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsNCglzbWRf YXRfc2V0dXAoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Ci8vIFVUSUxJVFkgRlVOQ1RJT05TDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9nZXRfcHJpdnMoJHVzZXI9JycpIHsNCglnbG9iYWwgJHR4cF91c2Vy Ow0KCSR1c2VyID0gKCR1c2VyKSA/ICR1c2VyIDogJHR4cF91c2VyOw0KCSRwcml2cyA9IHNh ZmVfZmllbGQoInByaXZzIiwgInR4cF91c2VycyIsICJuYW1lPSciLmRvU2xhc2goJHVzZXIp LiInIik7DQoJcmV0dXJuICRwcml2czsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfZXhpc3RzKCRuYW1lKSB7DQoJJGluc3RhbmNlID0gdGhl bWU6OmZhY3RvcnkoJG5hbWUpOw0KCXJldHVybiAkaW5zdGFuY2U7DQp9DQoNCi8vIElmIHBl ci11c2VyIHNraW4gc3VwcG9ydCBpcyBPRkYsIHRoZSBnbG9iYWwgc2tpbiB3aW5zLg0KLy8g T25lIGV4Y2VwdGlvbjogaWYgdGhlIHVzZXIgaXMgYW4gYWRtaW4sIGFsbG93IHRoZSBjdXJy ZW50IHNraW4gdG8gcHJldmFpbCBzbyB0aGV5IG1heSBzd2l0Y2ggc2tpbnMgd2l0aCBpbXB1 bml0eQ0KLy8gYW5kIG5vdCBhZmZlY3QgdGhlIGdsb2JhbCBza2luDQpmdW5jdGlvbiBzbWRf YXRfcGVyKCkgew0KCWdsb2JhbCAkc21kX2F0X3ByaXZzLCAkcHJlZnMsICR0aGVtZSwgJHR4 cF91c2VyOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRza2luU3lz ID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pID8gJGF0X3ByZWZzWydzbWRf YXRfc3lzdGVtJ10gOiAwOw0KCSRwcml2cyA9IHNtZF9hdF9nZXRfcHJpdnMoKTsNCgkkZ2Js X3NraW4gPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgJiYgJGF0 X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSAhPSAnJykgPyAkYXRfcHJlZnNbJ3NtZF9h dF9nbG9iYWxfc2tpbiddIDogJyc7DQoJJGdibF9za2luID0gKHNtZF9hdF9leGlzdHMoJGdi bF9za2luKSkgPyAkZ2JsX3NraW4gOiAnY2xhc3NpYyc7DQoNCglzd2l0Y2ggKCRza2luU3lz KSB7DQoJCWNhc2UgMDoNCgkJCS8vIEdsb2JhbCBmb3JjZWQgc2tpbiAoZXhjZXB0IGFkbWlu cykNCgkJCWlmICghaW5fYXJyYXkoJHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2 cykpKSB7DQoJCQkJcmV0dXJuICRnYmxfc2tpbjsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQWRt aW5zDQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4p ID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChzbWRfYXRfZXhp c3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0KCQkJfQ0KCQkJYnJl YWs7DQoJCWNhc2UgMToNCgkJCS8vIEdyb3VwLWxldmVsIGZvcmNlZCBza2lucw0KCQkJaWYg KCFpbl9hcnJheSgkcHJpdnMsIGV4cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsNCgkJ CQkkZm9yY2VTa2lucyA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10p KSA/ICRhdF9wcmVmc1snc21kX2F0X2dyb3VwX2xpc3QnXSA6ICgoJGdibF9za2luKSA/ICRn Ymxfc2tpbiA6ICR0aGVtZS0+bmFtZSk7DQoNCgkJCQkvLyBTcGxpdCB0aGUgZ3JvdXAgc2tp biBsaXN0DQoJCQkJJGdza2lucyA9IGFycmF5KCk7DQoJCQkJJGdvcHRzID0gZXhwbG9kZSgn LCcsICRmb3JjZVNraW5zKTsNCgkJCQlmb3JlYWNoICgkZ29wdHMgYXMgJGdycGRlZikgew0K CQkJCQlpZiAoJGdycGRlZiA9PSAnJykgY29udGludWU7DQoJCQkJCSRwcml2Z3JwID0gZXhw bG9kZSgiOiIsICRncnBkZWYpOw0KCQkJCQkkc2tpbmlkID0gYXJyYXlfc2hpZnQoJHByaXZn cnApOw0KCQkJCQlpZiAoaW5fYXJyYXkoJHByaXZzLCAkcHJpdmdycCkpIHsNCgkJCQkJCXJl dHVybiAoc21kX2F0X2V4aXN0cygkc2tpbmlkKSkgPyAkc2tpbmlkIDogJ2NsYXNzaWMnOzsN CgkJCQkJfQ0KCQkJCX0NCgkJCQlyZXR1cm4gKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAk dGhlbWUtPm5hbWU7DQoJCQl9IGVsc2Ugew0KCQkJCS8vIEFkbWlucw0KCQkJCSRhZG1fc2tp biA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0 aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygkYWRtX3NraW4pKSA/ ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlIDI6DQoJ CQkvLyBQZXItdXNlciBza2luLiBJZiB1c2VyIGlzIG5vbi1hZG1pbiwgY2hlY2sgdGhlIHNr aW4gaXMgaW4gdGhlIGFsbG93ZWQgbGlzdA0KCQkJaWYgKCFpbl9hcnJheSgkcHJpdnMsIGV4 cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsNCgkJCQkkdmFsaWRTa2lucyA9IChpc3Nl dCgkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRf dXNlcl9saXN0J10gOiAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUp Ow0KCQkJCSR2YWxpZFNraW5zID0gZG9fbGlzdCgkdmFsaWRTa2lucyk7DQoJCQkJJHRoZV9z a2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDog JHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChpbl9hcnJheSgkdGhlX3NraW4sICR2YWxp ZFNraW5zKSAmJiBzbWRfYXRfZXhpc3RzKCR0aGVfc2tpbikpID8gJHRoZV9za2luIDogJyc7 DQoJCQl9IGVsc2Ugew0KCQkJCS8vIEFkbWlucw0KCQkJCSRhZG1fc2tpbiA9IGdldF9wcmVm KCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSkp Ow0KCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygkYWRtX3NraW4pKSA/ICRhZG1fc2tpbiA6 ICdjbGFzc2ljJzsNCgkJCX0NCgkJCWJyZWFrOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBSZWFkIGFuZCByZXR1cm4gdGhlIG1hbmlmZXN0LCBpZiBpdCBl eGlzdHMgYW5kIGFkZCBhIGZldyBvdGhlciBuaWNldGllcyB0byB0aGUgYXJyYXkgZm9yIGxh dGVyDQpmdW5jdGlvbiBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pIHsNCglnbG9iYWwgJHNt ZF9jb3JlX3RoZW1lczsNCg0KCSR0aGlzX3RoZW1lID0gdGhlbWU6OmZhY3RvcnkoJHNraW4p Ow0KCSRza2luZm8gPSBhcnJheSgpOw0KCWlmICgkdGhpc190aGVtZSkgew0KCQkkc2tpbmZv ID0gJHRoaXNfdGhlbWUtPm1hbmlmZXN0KCk7DQoJCSRza2luZm9bJ2RuYW1lJ10gPSBlbXB0 eSgkc2tpbmZvWyd0aXRsZSddKSA/IHVjd29yZHMoJHRoaXNfdGhlbWUtPm5hbWUpIDogJHNr aW5mb1sndGl0bGUnXTsNCgkJJHNraW5mb1snbmFtZSddID0gJHRoaXNfdGhlbWUtPm5hbWU7 DQoJCSRza2luZm9bJ3BhdGgnXSA9ICR0aGlzX3RoZW1lLT51cmw7DQoJCSRza2luZm9bJ3Bo cGZpbGUnXSA9ICR0aGlzX3RoZW1lLT5wYXRoKCRza2luKTsNCgkJJHNraW5mb1snYmFzZWRf b24nXSA9ICcnOw0KCQkkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cygkc2tpbmZvWydw aHBmaWxlJ10pOw0KCQlpZiAoKCRwb3MgPSBzdHJwb3MoJGNvbnRlbnRzLCAndGhlbWU6OmJh c2VkX29uJykpICE9PSBmYWxzZSkgew0KCQkJJGJlZ3BvcyA9IHN0cnBvcygkY29udGVudHMs ICInIiwgJHBvcykrMTsNCgkJCSRlbmRwb3MgPSBzdHJwb3MoJGNvbnRlbnRzLCAiJyIsICRi ZWdwb3MpOw0KCQkJJGJhc2UgPSBzdWJzdHIoJGNvbnRlbnRzLCAkYmVncG9zLCAkZW5kcG9z LSRiZWdwb3MpOw0KCQkJJHNraW5mb1snYmFzZWRfb24nXSA9IChpbl9hcnJheSgkYmFzZSwg JHNtZF9jb3JlX3RoZW1lcykpID8gJycgOiAkYmFzZTsNCgkJfQ0KCQl1bnNldCgkdGhpc190 aGVtZSk7DQoJfQ0KCXJldHVybiAkc2tpbmZvOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIEdyYWIgdGhlIHRodW1ibmFpbCBmaWxlbmFtZSBpZiBpdCBleGlzdHMs IG9wdGlvbmFsbHkgcmV0dXJuIGEgZm9ybWF0dGVkIGltZyB0YWcNCmZ1bmN0aW9uIHNtZF9h dF9nZXRfdGh1bWIoJHNraW4sICRpbWc9MCkgew0KCWdsb2JhbCAkc21kX2F0X3ByZWZzOw0K DQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSR0dyA9IGlzc2V0KCRhdF9w cmVmc1snc21kX2F0X3R3J10pID8gJGF0X3ByZWZzWydzbWRfYXRfdHcnXSA6ICRzbWRfYXRf cHJlZnNbMF1bJ3NtZF9hdF90dyddOw0KCSR0aCA9IGlzc2V0KCRhdF9wcmVmc1snc21kX2F0 X3RoJ10pID8gJGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3Nt ZF9hdF90aCddOw0KCSR1c2VfdGh1bWIgPSAoJHR3ID09IDAgfHwgJHRoID09IDApID8gZmFs c2UgOiB0cnVlOw0KDQoJLy8gQW4gYXJyYXkgbWVhbnMgdGhlIG1hbmlmZXN0IGhhcyBhbHJl YWR5IGJlZW4gcmVhZCBhbmQgaXMgYmVpbmcgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbg0K CWlmICghaXNfYXJyYXkoJHNraW4pKSB7DQoJCSRza2luID0gc21kX2F0X3JlYWRfc2tpbmZv KCRza2luKTsNCgl9DQoJaWYgKCRza2luKSB7DQoJCSRza2luZGlyID0gJHNraW5bJ3BhdGgn XTsNCgkJJHRodW1ibmFtZSA9IGdsb2IoJHNraW5kaXIuJ3NjcmVlbnNob3QuKicpOw0KCQly ZXR1cm4gKCRpbWcgJiYgJHVzZV90aHVtYiAmJiAkdGh1bWJuYW1lICYmIGZpbGVfZXhpc3Rz KCR0aHVtYm5hbWVbMF0pKSA/ICc8aW1nIHNyYz0iJy4kdGh1bWJuYW1lWzBdLiciIGFsdD0i Jy4oKGlzc2V0KCRza2luWyduYW1lJ10pKSA/ICRza2luWyduYW1lJ10gOiAnJykuJyB0aHVt Ym5haWwiIHN0eWxlPSJib3JkZXI6MnB4IHJpZGdlICM5OTk7cGFkZGluZzoycHg7IiB3aWR0 aD0iJy4kdHcuJyIgaGVpZ2h0PSInLiR0aC4nIiAvPicgOiAnJzsNCgl9IGVsc2Ugew0KCQly ZXR1cm4gJyc7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF9hdF9yZWFkX3NraW5zKCkgew0KCSRza2luX2xpc3QgPSB0aGVtZTo6bmFtZXMo KTsNCgkkc2tpbl9saXN0ID0gc21kX2F0X3NvcnQoJHNraW5fbGlzdCk7DQoJcmV0dXJuICRz a2luX2xpc3Q7DQp9DQoNCi8vIFNvcnQgdGhlIHNraW5zIGJ1dCBrZWVwICdjbGFzc2ljJyBh dCB0aGUgdG9wDQpmdW5jdGlvbiBzbWRfYXRfc29ydCgkc2tpbl9saXN0KSB7DQoJZ2xvYmFs ICRwcmVmczsNCg0KCSRjYXNlU2Vuc2UgPSBpc3NldCgkcHJlZnNbJ3NtZF9hdF9jYXNlX3Nv cnQnXSkgPyAkcHJlZnNbJ3NtZF9hdF9jYXNlX3NvcnQnXSA6IDE7DQoNCglpZigkY2FzZVNl bnNlKSB7DQoJCW5hdHNvcnQoJHNraW5fbGlzdCk7DQoJfSBlbHNlIHsNCgkJbmF0Y2FzZXNv cnQoJHNraW5fbGlzdCk7DQoJfQ0KCSRkZmx0X2ZvdW5kID0gZmFsc2U7DQoJZm9yZWFjaCAo JHNraW5fbGlzdCBhcyAkc2tpbl9pZHggPT4gJHNraW5fbmFtZSkgew0KCQlpZiAoJHNraW5f bmFtZSA9PSAiY2xhc3NpYyIpIHsNCgkJCXVuc2V0KCRza2luX2xpc3RbJHNraW5faWR4XSk7 DQoJCQkkZGZsdF9mb3VuZCA9IHRydWU7DQoJCQlicmVhazsNCgkJfQ0KCX0NCglpZiAoJGRm bHRfZm91bmQpIHsNCgkJYXJyYXlfdW5zaGlmdCgkc2tpbl9saXN0LCJjbGFzc2ljIik7DQoJ fQ0KDQoJcmV0dXJuICRza2luX2xpc3Q7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2F0X2xpc3RkaXIoJHN0YXJ0X2Rpcj0nLicpIHsNCgkkZmls ZXMgPSBhcnJheSgpOw0KDQoJaWYgKGlzX2Rpcigkc3RhcnRfZGlyKSkgew0KCQkkZmggPSBv cGVuZGlyKCRzdGFydF9kaXIpOw0KCQl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZmgpKSAh PT0gZmFsc2UpIHsNCgkJCS8vIGxvb3AgdGhyb3VnaCB0aGUgZmlsZXMsIHNraXBwaW5nIC4g YW5kIC4uLCBhbmQgcmVjdXJzaW5nIGlmIG5lY2Vzc2FyeQ0KCQkJaWYgKHN0cmNtcCgkZmls ZSwgJy4nKT09MCB8fCBzdHJjbXAoJGZpbGUsICcuLicpPT0wKSBjb250aW51ZTsNCgkJCSRm aWxlcGF0aCA9ICRzdGFydF9kaXIgLiAnLycgLiAkZmlsZTsNCgkJCWlmICggaXNfZGlyKCRm aWxlcGF0aCkgKSB7DQoJCQkJJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVzLCBzbWRfYXRf bGlzdGRpcigkZmlsZXBhdGgpKTsNCgkJCX0gZWxzZSB7DQoJCQkJYXJyYXlfcHVzaCgkZmls ZXMsICRmaWxlcGF0aCk7DQoJCQl9DQoJCX0NCgkJY2xvc2VkaXIoJGZoKTsNCgl9IGVsc2Ug ew0KDQoJCS8vIGZhbHNlIGlmIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGggYW4gaW52 YWxpZCBub24tZGlyZWN0b3J5IGFyZ3VtZW50DQoJCSRmaWxlcyA9IGZhbHNlOw0KCX0NCg0K CXJldHVybiAkZmlsZXM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8g UmVjdXJzaXZlIHJtZGlyKCkgY291cnRlc3kgb2YgdGhlIHBocCBtYW51YWwgdXNlciBjb21t ZW50cw0KZnVuY3Rpb24gc21kX3JtZGlyX3JlY3Vyc2l2ZSgkZmlsZXBhdGgpIHsNCglpZiAo aXNfZGlyKCRmaWxlcGF0aCkgJiYgIWlzX2xpbmsoJGZpbGVwYXRoKSkgew0KCQlpZiAoJGRo ID0gb3BlbmRpcigkZmlsZXBhdGgpKSB7DQoJCQl3aGlsZSAoKCRzZiA9IHJlYWRkaXIoJGRo KSkgIT09IGZhbHNlKSB7DQoJCQkJaWYgKCRzZiA9PSAnLicgfHwgJHNmID09ICcuLicpIGNv bnRpbnVlOw0KCQkJCWlmICghc21kX3JtZGlyX3JlY3Vyc2l2ZSgkZmlsZXBhdGguJy8nLiRz ZikpIHsNCgkJCQkJYnJlYWs7IC8vIERvaCwgY2FuJ3QgZGVsZXRlDQoJCQkJfQ0KCQkJfQ0K CQkJY2xvc2VkaXIoJGRoKTsNCgkJfQ0KCQlyZXR1cm4gcm1kaXIoJGZpbGVwYXRoKTsNCgl9 DQoJcmV0dXJuIHVubGluaygkZmlsZXBhdGgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIEZyb20gUEhQIG1hbnVhbCBjb21tZW50cy4gVGhhbmtzIHB1cmVtYW5n bw0KZnVuY3Rpb24gc21kX2F0X2lzX2RpcigkZGlyKSB7DQoJLy8gYnlwYXNzZXMgb3Blbl9i YXNlZGlyIHJlc3RyaWN0aW9ucyBvZiBpc19kaXIgYW5kIGZpbGVwZXJtcw0KCSR0bXBfY21k ID0gYGxzIC1kbCAkZGlyYDsNCgkkZGlyX2ZsYWcgPSAkdG1wX2NtZFswXTsNCglpZigkZGly X2ZsYWchPSJkIikgew0KCQkvLyBub3QgZDsgdXNlIG5leHQgY2hhciAoZmlyc3QgY2hhciBt aWdodCBiZSAncycgYW5kIGlzIHN0aWxsIGRpcmVjdG9yeSkNCgkJJGRpcl9mbGFnID0gJHRt cF9jbWRbMV07DQoJfQ0KCXJldHVybiAoJGRpcl9mbGFnPT0iZCIpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9ta2Rpcl9yZWN1cnNpdmUoJHBh dGgsICRtb2RlID0gMDc1NSkgew0KCWlmKEBta2RpcigkcGF0aCwgJG1vZGUpIG9yIGZpbGVf ZXhpc3RzKCRwYXRoKSkgcmV0dXJuIHRydWU7DQoJcmV0dXJuIChzbWRfbWtkaXJfcmVjdXJz aXZlKGRpcm5hbWUoJHBhdGgpLCAkbW9kZSkgYW5kIG1rZGlyKCRwYXRoLCAkbW9kZSkpOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9jaGFu Z2VfcGFnZWJ5KCkgew0KCXNldGNvb2tpZSgnc21kX2F0X3BhZ2VieScsIGdwcygncXR5Jykp Ow0KCXNtZF9hdF9saXN0KCcnKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfc3dpdGNoKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRf YXRfcHJpdnM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICdldmVu dCcsICduZXh0c3RlcCcpKSkpOw0KCSR1cmwgPSAiP2V2ZW50PSIuJGV2ZW50LiImc3RlcD0i LiRuZXh0c3RlcDsNCg0KCWlmICgkc2tpbiAmJiBzbWRfYXRfZXhpc3RzKCRza2luKSkgew0K CQlzZXRfcHJlZignc21kX3NraW4nLCAkc2tpbiwgJGV2ZW50LCBQUkVGX0hJRERFTiwgJ3Rl eHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4g KCgkbWVzc2FnZSkgPyAkbWVzc2FnZSA6IHNtZF9hdF9nVHh0KCdza2luX3N3aXRjaGVkJywg YXJyYXkoJ3tza2lufScgPT4gJHNraW4pKSk7DQoJfSBlbHNlIHsNCgkJJHVybCAuPSAnJm1l c3NhZ2U9JyAuICRtZXNzYWdlOw0KCX0NCg0KCS8vIFNpbmNlIHRoZSBoZWFkZXJzIGhhdmUg YmVlbiBzZW50LCBkb3VibGUtZGVjbHV0Y2ggaW4gb3JkZXIgdG8gc2hvdyB0aGUgc2tpbiB0 aGlzIGZpcnN0IHRpbWUNCgllY2hvIDw8PEVPUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiPg0Kd2luZG93LmxvY2F0aW9uLmhyZWY9InskdXJsfSI7DQo8L3NjcmlwdD4NCjxu b3NjcmlwdD4NCjxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7dXJsPXsk dXJsfSIgLz4NCjwvbm9zY3JpcHQ+DQpFT1M7DQoJZXhpdDsNCn0NCg0KLy8gQWxsLXVzZXIg c2tpbiBjaG9vc2VyDQpmdW5jdGlvbiBzbWRfYWRtYXQoJGV2ZW50LCAkc3RlcCkgew0KCWlm KCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3NtZF9hdF9zd2l0Y2gn LA0KCQkpKSkgew0KCQlzbWRfYXRfY2hvb3NlcignJyk7DQoJfSBlbHNlICRzdGVwKCk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2Nob29z ZXIoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X2FkbV9ldmVudCwg JHRoZW1lOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRsYXlvdXQg PSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21k X2F0X2xheW91dCddIDogMTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcn XSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0 X3R3J10pICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3RoJ10pID8g JGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90aCdd KSArIDgwOw0KDQoJJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBncHMoJ21l c3NhZ2UnKTsNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdza2lubmVyJyksJG1lc3NhZ2UpOw0K DQoJJGN1cnJfc2tpbiA9ICR0aGVtZS0+bmFtZTsNCg0KCSRhbGxvd2VkID0gJyc7DQoJaWYg KGlzc2V0KCRwcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKSkgew0KCQkkYWxsb3dlZCA9IGV4 cGxvZGUoIiwiLCRwcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKTsNCgkJZm9yZWFjaCAoJGFs bG93ZWQgYXMgJGlkeCA9PiAkdmFsaWQpIHsNCgkJCWlmICgkdmFsaWQgPT0gJycpIHsNCgkJ CQl1bnNldCgkYWxsb3dlZFskaWR4XSk7DQoJCQl9DQoJCX0NCgl9DQoJJGFsbG93ZWQgPSBz bWRfYXRfc29ydCgkYWxsb3dlZCk7DQoJJGhkcm93ID0gaGVkKHNtZF9hdF9nVHh0KCdhdmFp bF90aXRsZScpLCAzKTsNCg0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyBzdGFydFRh YmxlKCdsaXN0Jyk7DQoJCWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93LCAnIGNvbHNwYW49IjMi JykNCgkJKTsNCgkJZWNobyB0cigNCgkJCWFzc0hlYWQoDQoJCQkJc21kX2F0X2dUeHQoJ3Nr aW5fZ2JsJyksDQoJCQkJJ2F1dGhvcicsDQoJCQkJJ2Rlc2NyaXB0aW9uJw0KCQkJKSk7DQoJ fSBlbHNlIHsNCgkJZWNobyA8PDxFT0NTUw0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5z bWRfZ3JpZCB7DQoJd2lkdGg6OTYwcHg7DQoJbWFyZ2luOjAgYXV0bzsNCn0NCi5zbWRfY2Vs bCB7DQoJZmxvYXQ6bGVmdDsNCglwYWRkaW5nOjEwcHg7DQoJbWFyZ2luOjEwcHg7DQoJYm9y ZGVyOjFweCByaWRnZSAjY2NjOw0KCXdpZHRoOnskdHd9cHg7DQoJaGVpZ2h0OnskdGh9cHg7 DQp9DQouc21kX2NlbGw6aG92ZXIgew0KCWJhY2tncm91bmQ6I2RkZDsNCn0NCi5zbWRfY2xl YXIgew0KCWNsZWFyOmJvdGg7DQp9DQouc21kX2F1dGggew0KCXRleHQtYWxpZ246Y2VudGVy Ow0KCW1hcmdpbjo1cHggMDsNCn0NCjwvc3R5bGU+DQpFT0NTUzsNCgkJZWNobyAnPGRpdiBj bGFzcz0ic21kX2dyaWQiPjxkaXYgY2xhc3M9InNtZF9uZXdyb3ciPicuJGhkcm93Lic8L2Rp dj4nOw0KCX0NCglmb3JlYWNoICgkYWxsb3dlZCBhcyAkc2tpbl9uYW1lKSB7DQoJCSRza2lu Zm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW5fbmFtZSk7DQoJCWlmICgkc2tpbmZvKSB7 DQoJCQkkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVtYigkc2tpbmZvLCAxKTsNCgkJCSR0 aGlzX3NraW4gPSAoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/IHN0cm9uZygkc2tpbmZv WydkbmFtZSddKSA6ICRza2luZm9bJ2RuYW1lJ107DQoJCQkkdGh1bXJvdyA9ICc8YSBocmVm PSI/ZXZlbnQ9Jy4kc21kX2F0X2FkbV9ldmVudC5hLidzdGVwPXNtZF9hdF9zd2l0Y2gnLmEu J25leHRzdGVwPXNtZF9hZG1hdCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgdGl0bGU9Iicu c21kX2F0X2dUeHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0aGlzX3NraW4uKCgkdGh1bWJuYWls KSA/ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9hPic7DQoJCQkkYXV0 aHJvdyA9IChzdHJwb3MoJHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0cDovLyIpID09PSAw KSA/ICc8YSBocmVmPSInLiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4nLiRza2luZm9bJ2F1 dGhvciddLic8L2E+JyA6ICRza2luZm9bJ2F1dGhvciddOw0KDQoJCQlpZiAoJGxheW91dD09 IjAiKSB7DQoJCQkJZWNobyB0cigNCgkJCQkJdGQoJHRodW1yb3cpDQoJCQkJCS50ZCgkYXV0 aHJvdywgMTAwKQ0KCQkJCQkudGQoJHNraW5mb1snZGVzY3JpcHRpb24nXSwgMjUwKQ0KCQkJ CQksICgoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/ICcgc3R5bGU9ImJhY2tncm91bmQ6 I2U4ZThlODsiJyA6ICcnKQ0KCQkJCSk7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gJzxkaXYg Y2xhc3M9InNtZF9jZWxsIicuKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHls ZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpLic+JzsNCgkJCQllY2hvICc8ZGl2Picu JHRodW1yb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1dGgiPicu c21kX2F0X2dUeHQoJ2J5JykuJGF1dGhyb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPC9kaXY+ JzsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gZW5kVGFi bGUoKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwvZGl2 PjwvZGl2Pic7DQoJfQ0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUQVIvR1pJUC9CWklQMi9aSVAgQVJDSElWRSBDTEFT U0VTIDIuMQ0KIHwgQnkgRGV2aW4gRG91Y2V0dGUNCiB8IENvcHlyaWdodCAoYykgMjAwNSBE ZXZpbiBEb3VjZXR0ZQ0KIHwgRW1haWw6IGRhcmtzbm9vcHlAc2hhdy5jYQ0KICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHwgRW1haWwg YnVncy9zdWdnZXN0aW9ucyB0byBkYXJrc25vb3B5QHNoYXcuY2ENCiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRoaXMgc2NyaXB0 IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQogfCB0aGUgR05VIEdQTCBh bmQgaXMgZnJlZSB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwgb25seSBpZiB0aGlzIGNv cHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90IHJlbW92ZWQNCiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQovLyBOT1RFOiBjbGFzcyBu YW1lcyBhbHRlcmVkIHRvIGFkZCBzbWRfYXRfIHByZWZpeCB0byBhdm9pZCBjbGFzaGVzIGlu IGdsb2JhbCBzY29wZSwgYW5kIGFkZGVkIHN1YmRpciBjcmVhdGlvbg0KDQpjbGFzcyBzbWRf YXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9hcmNoaXZlKCRuYW1lKQ0KCXsNCgkJ JHRoaXMtPm9wdGlvbnMgPSBhcnJheSAoDQoJCQknYmFzZWRpcicgPT4gIi4iLA0KCQkJJ25h bWUnID0+ICRuYW1lLA0KCQkJJ3ByZXBlbmQnID0+ICIiLA0KCQkJJ2lubWVtb3J5JyA9PiAw LA0KCQkJJ292ZXJ3cml0ZScgPT4gMCwNCgkJCSdyZWN1cnNlJyA9PiAxLA0KCQkJJ3N0b3Jl cGF0aHMnID0+IDEsDQoJCQknZm9sbG93bGlua3MnID0+IDAsDQoJCQknbGV2ZWwnID0+IDMs DQoJCQknbWV0aG9kJyA9PiAxLA0KCQkJJ3NmeCcgPT4gIiIsDQoJCQkndHlwZScgPT4gIiIs DQoJCQknY29tbWVudCcgPT4gIiINCgkJKTsNCgkJJHRoaXMtPmZpbGVzID0gYXJyYXkgKCk7 DQoJCSR0aGlzLT5leGNsdWRlID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5zdG9yZW9ubHkgPSBh cnJheSAoKTsNCgkJJHRoaXMtPmVycm9yID0gYXJyYXkgKCk7DQoJfQ0KDQoJZnVuY3Rpb24g c2V0X29wdGlvbnMoJG9wdGlvbnMpDQoJew0KCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAka2V5 ID0+ICR2YWx1ZSkNCgkJCSR0aGlzLT5vcHRpb25zWyRrZXldID0gJHZhbHVlOw0KCQlpZiAo IWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKSkNCgkJew0KCQkJJHRoaXMtPm9w dGlvbnNbJ2Jhc2VkaXInXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlv bnNbJ2Jhc2VkaXInXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJlZ19y ZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQkk dGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAk dGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+ b3B0aW9uc1snbmFtZSddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSA9IHN0 cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSk7DQoJCQkkdGhp cy0+b3B0aW9uc1snbmFtZSddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMt Pm9wdGlvbnNbJ25hbWUnXSk7DQoJCX0NCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNb J3ByZXBlbmQnXSkpDQoJCXsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gPSBzdHJf cmVwbGFjZSgiXFwiLCAiLyIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRo aXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL14oXC4qXC8rKSsvIiwg IiIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3By ZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICR0aGlzLT5vcHRpb25zWydw cmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFj ZSgiL1wvJC8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSkgLiAiLyI7DQoJCX0N Cgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYXJjaGl2ZSgpDQoJew0KCQkkdGhpcy0+bWFrZV9s aXN0KCk7DQoNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDApDQoJCXsN CgkJCSRwd2QgPSBnZXRjd2QoKTsNCgkJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGly J10pOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYmIGZpbGVf ZXhpc3RzKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUn XSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnppcCIgPyAiLnRt cCIgOiAiIikpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkZpbGUgeyR0aGlzLT5v cHRpb25zWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJ CQkJcmV0dXJuIDA7DQoJCQl9DQoJCQllbHNlIGlmICgkdGhpcy0+YXJjaGl2ZSA9IEBmb3Bl bigkdGhpcy0+b3B0aW9uc1snbmFtZSddIC4gKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0g Imd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiID8gIi50bXAiIDog IiIpLCAid2IrIikpDQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRo aXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119 IGZvciB3cml0aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9 DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSAiIjsNCg0KCQlzd2l0Y2ggKCR0 aGlzLT5vcHRpb25zWyd0eXBlJ10pDQoJCXsNCgkJY2FzZSAiemlwIjoNCgkJCWlmICghJHRo aXMtPmNyZWF0ZV96aXAoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBu b3QgY3JlYXRlIHppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlicmVhazsN CgkJY2FzZSAiYnppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfdGFyKCkpDQoJCQl7DQoJ CQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB0YXIgZmlsZS4iOw0KCQkJ CXJldHVybiAwOw0KCQkJfQ0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX2J6aXAoKSkNCgkJCXsN CgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIGJ6aXAyIGZpbGUuIjsN CgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJnemlwIjoNCgkJCWlm ICghJHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJD b3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlp ZiAoISR0aGlzLT5jcmVhdGVfZ3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0g IkNvdWxkIG5vdCBjcmVhdGUgZ3ppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJ CQlicmVhazsNCgkJY2FzZSAidGFyIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90YXIoKSkN CgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxl LiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNb J2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJZmNsb3NlKCR0aGlzLT5hcmNoaXZlKTsNCgkJ CWlmICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9u c1sndHlwZSddID09ICJiemlwIikNCgkJCQl1bmxpbmsoJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSAuICIvIiAuICR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAiLnRtcCIpOw0KCQl9DQoJ fQ0KDQoJZnVuY3Rpb24gYWRkX2RhdGEoJGRhdGEpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlv bnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJCWZ3cml0ZSgkdGhpcy0+YXJjaGl2ZSwgJGRhdGEp Ow0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSAuPSAkZGF0YTsNCgl9DQoNCglmdW5jdGlv biBtYWtlX2xpc3QoKQ0KCXsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPmV4Y2x1ZGUpKQ0KCQkJ Zm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZvcmVhY2gg KCR0aGlzLT5leGNsdWRlIGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10g PT0gJGN1cnJlbnRbJ25hbWUnXSkNCgkJCQkJCXVuc2V0ICgkdGhpcy0+ZmlsZXNbJGtleV0p Ow0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+c3RvcmVvbmx5KSkNCgkJCWZvcmVhY2ggKCR0aGlz LT5maWxlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCQlmb3JlYWNoICgkdGhpcy0+c3RvcmVv bmx5IGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10gPT0gJGN1cnJlbnRb J25hbWUnXSkNCgkJCQkJCSR0aGlzLT5maWxlc1ska2V5XVsnbWV0aG9kJ10gPSAwOw0KCQl1 bnNldCAoJHRoaXMtPmV4Y2x1ZGUsICR0aGlzLT5zdG9yZW9ubHkpOw0KCX0NCg0KCWZ1bmN0 aW9uIGFkZF9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMo JGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5maWxl c1tdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gZXhjbHVkZV9maWxlcygkbGlzdCkN Cgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgk dGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5leGNsdWRlW10gPSAkY3VycmVudDsNCgl9 DQoNCglmdW5jdGlvbiBzdG9yZV9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMt Pmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJ CSR0aGlzLT5zdG9yZW9ubHlbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIGxpc3Rf ZmlsZXMoJGxpc3QpDQoJew0KCQlpZiAoIWlzX2FycmF5ICgkbGlzdCkpDQoJCXsNCgkJCSR0 ZW1wID0gJGxpc3Q7DQoJCQkkbGlzdCA9IGFycmF5ICgkdGVtcCk7DQoJCQl1bnNldCAoJHRl bXApOw0KCQl9DQoNCgkJJGZpbGVzID0gYXJyYXkgKCk7DQoNCgkJJHB3ZCA9IGdldGN3ZCgp Ow0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlmb3JlYWNoICgk bGlzdCBhcyAkY3VycmVudCkNCgkJew0KCQkJJGN1cnJlbnQgPSBzdHJfcmVwbGFjZSgiXFwi LCAiLyIsICRjdXJyZW50KTsNCgkJCSRjdXJyZW50ID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIs ICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVnX3JlcGxhY2UoIi9cLyQvIiwg IiIsICRjdXJyZW50KTsNCgkJCWlmIChzdHJzdHIoJGN1cnJlbnQsICIqIikpDQoJCQl7DQoJ CQkJJHJlZ2V4ID0gcHJlZ19yZXBsYWNlKCIvKFtcXFxeXCRcLlxbXF1cfFwoXClcP1wrXHtc fVwvXSkvIiwgIlxcXFxcXDEiLCAkY3VycmVudCk7DQoJCQkJJHJlZ2V4ID0gc3RyX3JlcGxh Y2UoIioiLCAiLioiLCAkcmVnZXgpOw0KCQkJCSRkaXIgPSBzdHJzdHIoJGN1cnJlbnQsICIv IikgPyBzdWJzdHIoJGN1cnJlbnQsIDAsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikpIDogIi4i Ow0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZGlyKTsNCgkJCQlmb3JlYWNoICgk dGVtcCBhcyAkY3VycmVudDIpDQoJCQkJCWlmIChwcmVnX21hdGNoKCIvXnskcmVnZXh9JC9p IiwgJGN1cnJlbnQyWyduYW1lJ10pKQ0KCQkJCQkJJGZpbGVzW10gPSAkY3VycmVudDI7DQoJ CQkJdW5zZXQgKCRyZWdleCwgJGRpciwgJHRlbXAsICRjdXJyZW50KTsNCgkJCX0NCgkJCWVs c2UgaWYgKEBpc19kaXIoJGN1cnJlbnQpKQ0KCQkJew0KCQkJCSR0ZW1wID0gJHRoaXMtPnBh cnNlX2RpcigkY3VycmVudCk7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGZpbGUpDQoJCQkJ CSRmaWxlc1tdID0gJGZpbGU7DQoJCQkJdW5zZXQgKCR0ZW1wLCAkZmlsZSk7DQoJCQl9DQoJ CQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGN1cnJlbnQpKQ0KCQkJCSRmaWxlc1tdID0gYXJy YXkgKCduYW1lJyA9PiAkY3VycmVudCwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJl cGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMt Pm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkY3VycmVudCwgIi8iKSkg Pw0KCQkJCQlzdWJzdHIoJGN1cnJlbnQsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikgKyAxKSA6 ICRjdXJyZW50KSwNCgkJCQkJJ3R5cGUnID0+IEBpc19saW5rKCRjdXJyZW50KSAmJiAkdGhp cy0+b3B0aW9uc1snZm9sbG93bGlua3MnXSA9PSAwID8gMiA6IDAsDQoJCQkJCSdleHQnID0+ IHN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3VycmVudCwgIi4iKSksICdzdGF0JyA9PiBz dGF0KCRjdXJyZW50KSk7DQoJCX0NCg0KCQljaGRpcigkcHdkKTsNCg0KCQl1bnNldCAoJGN1 cnJlbnQsICRwd2QpOw0KDQoJCXVzb3J0KCRmaWxlcywgYXJyYXkgKCJzbWRfYXRfYXJjaGl2 ZSIsICJzb3J0X2ZpbGVzIikpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0KDQoJZnVuY3Rp b24gcGFyc2VfZGlyKCRkaXJuYW1lKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydzdG9y ZXBhdGhzJ10gPT0gMSAmJiAhcHJlZ19tYXRjaCgiL14oXC4rXC8qKSskLyIsICRkaXJuYW1l KSkNCgkJCSRmaWxlcyA9IGFycmF5IChhcnJheSAoJ25hbWUnID0+ICRkaXJuYW1lLCAnbmFt ZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCXByZWdfcmVwbGFjZSgi LyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10gPT0gMCAm JiBzdHJzdHIoJGRpcm5hbWUsICIvIikpID8NCgkJCQlzdWJzdHIoJGRpcm5hbWUsIHN0cnJw b3MoJGRpcm5hbWUsICIvIikgKyAxKSA6ICRkaXJuYW1lKSwgJ3R5cGUnID0+IDUsICdzdGF0 JyA9PiBzdGF0KCRkaXJuYW1lKSkpOw0KCQllbHNlDQoJCQkkZmlsZXMgPSBhcnJheSAoKTsN CgkJJGRpciA9IEBvcGVuZGlyKCRkaXJuYW1lKTsNCg0KCQl3aGlsZSAoJGZpbGUgPSBAcmVh ZGRpcigkZGlyKSkNCgkJew0KCQkJJGZ1bGxuYW1lID0gJGRpcm5hbWUgLiAiLyIgLiAkZmls ZTsNCgkJCWlmICgkZmlsZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIikNCgkJCQljb250aW51 ZTsNCgkJCWVsc2UgaWYgKEBpc19kaXIoJGZ1bGxuYW1lKSkNCgkJCXsNCgkJCQlpZiAoZW1w dHkgKCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pKQ0KCQkJCQljb250aW51ZTsNCgkJCQkk dGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGZ1bGxuYW1lKTsNCgkJCQlmb3JlYWNoICgkdGVt cCBhcyAkZmlsZTIpDQoJCQkJCSRmaWxlc1tdID0gJGZpbGUyOw0KCQkJfQ0KCQkJZWxzZSBp ZiAoQGZpbGVfZXhpc3RzKCRmdWxsbmFtZSkpDQoJCQkJJGZpbGVzW10gPSBhcnJheSAoJ25h bWUnID0+ICRmdWxsbmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCdd IC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9wdGlv bnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZnVsbG5hbWUsICIvIikpID8NCgkJ CQkJc3Vic3RyKCRmdWxsbmFtZSwgc3RycnBvcygkZnVsbG5hbWUsICIvIikgKyAxKSA6ICRm dWxsbmFtZSksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGluaygkZnVsbG5hbWUpICYmICR0aGlz LT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4dCcgPT4g c3Vic3RyKCRmaWxlLCBzdHJycG9zKCRmaWxlLCAiLiIpKSwgJ3N0YXQnID0+IHN0YXQoJGZ1 bGxuYW1lKSk7DQoJCX0NCg0KCQlAY2xvc2VkaXIoJGRpcik7DQoNCgkJcmV0dXJuICRmaWxl czsNCgl9DQoNCglmdW5jdGlvbiBzb3J0X2ZpbGVzKCRhLCAkYikNCgl7DQoJCWlmICgkYVsn dHlwZSddICE9ICRiWyd0eXBlJ10pDQoJCQlpZiAoJGFbJ3R5cGUnXSA9PSA1IHx8ICRiWyd0 eXBlJ10gPT0gMikNCgkJCQlyZXR1cm4gLTE7DQoJCQllbHNlIGlmICgkYVsndHlwZSddID09 IDIgfHwgJGJbJ3R5cGUnXSA9PSA1KQ0KCQkJCXJldHVybiAxOw0KCQllbHNlIGlmICgkYVsn dHlwZSddID09IDUpDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUnXSks IHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQllbHNlIGlmICgkYVsnZXh0J10gIT0gJGJb J2V4dCddKQ0KCQkJcmV0dXJuIHN0cmNtcCgkYVsnZXh0J10sICRiWydleHQnXSk7DQoJCWVs c2UgaWYgKCRhWydzdGF0J11bN10gIT0gJGJbJ3N0YXQnXVs3XSkNCgkJCXJldHVybiAkYVsn c3RhdCddWzddID4gJGJbJ3N0YXQnXVs3XSA/IC0xIDogMTsNCgkJZWxzZQ0KCQkJcmV0dXJu IHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWyduYW1lJ10p KTsNCgkJcmV0dXJuIDA7DQoJfQ0KDQoJZnVuY3Rpb24gZG93bmxvYWRfZmlsZSgpDQoJew0K CQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHRoaXMt PmVycm9yW10gPSAiQ2FuIG9ubHkgdXNlIGRvd25sb2FkX2ZpbGUoKSBpZiBhcmNoaXZlIGlz IGluIG1lbW9yeS4gUmVkaXJlY3QgdG8gZmlsZSBvdGhlcndpc2UsIGl0IGlzIGZhc3Rlci4i Ow0KCQkJcmV0dXJuOw0KCQl9DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkN CgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0 aW9uL3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJaGVhZGVyKCJDb250 ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYnppcDIiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJn emlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWd6aXAiKTsN CgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFw cGxpY2F0aW9uL3gtdGFyIik7DQoJCX0NCgkJJGhlYWRlciA9ICJDb250ZW50LURpc3Bvc2l0 aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiI7DQoJCSRoZWFkZXIgLj0gc3Ryc3RyKCR0 aGlzLT5vcHRpb25zWyduYW1lJ10sICIvIikgPyBzdWJzdHIoJHRoaXMtPm9wdGlvbnNbJ25h bWUnXSwgc3RycnBvcygkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIpICsgMSkgOiAkdGhp cy0+b3B0aW9uc1snbmFtZSddOw0KCQkkaGVhZGVyIC49ICJcIiI7DQoJCWhlYWRlcigkaGVh ZGVyKTsNCgkJaGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigkdGhpcy0+YXJj aGl2ZSkpOw0KCQloZWFkZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeSIp Ow0KCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUs IG1heC1hZ2U9NjAiKTsNCgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEphbiAyMDAwIDEy OjAwOjAwIEdNVCIpOw0KCQlwcmludCgkdGhpcy0+YXJjaGl2ZSk7DQoJfQ0KfQ0KDQpjbGFz cyBzbWRfYXRfdGFyX2ZpbGUgZXh0ZW5kcyBzbWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9u IHNtZF9hdF90YXJfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfYXJjaGl2ZSgk bmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPSAidGFyIjsNCgl9DQoNCglmdW5j dGlvbiBjcmVhdGVfdGFyKCkNCgl7DQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRo aXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFz ICRjdXJyZW50KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0 aW9uc1snbmFtZSddKQ0KCQkJCWNvbnRpbnVlOw0KCQkJaWYgKHN0cmxlbigkY3VycmVudFsn bmFtZTInXSkgPiA5OSkNCgkJCXsNCgkJCQkkcGF0aCA9IHN1YnN0cigkY3VycmVudFsnbmFt ZTInXSwgMCwgc3RycG9zKCRjdXJyZW50WyduYW1lMiddLCAiLyIsIHN0cmxlbigkY3VycmVu dFsnbmFtZTInXSkgLSAxMDApICsgMSk7DQoJCQkJJGN1cnJlbnRbJ25hbWUyJ10gPSBzdWJz dHIoJGN1cnJlbnRbJ25hbWUyJ10sIHN0cmxlbigkcGF0aCkpOw0KCQkJCWlmIChzdHJsZW4o JHBhdGgpID4gMTU0IHx8IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgPiA5OSkNCgkJCQl7 DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBhZGQgeyRwYXRofXskY3VycmVu dFsnbmFtZTInXX0gdG8gYXJjaGl2ZSBiZWNhdXNlIHRoZSBmaWxlbmFtZSBpcyB0b28gbG9u Zy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQl9DQoJCQkkYmxvY2sgPSBwYWNrKCJh MTAwYThhOGE4YTEyYTEyYThhMWExMDBhNmEyYTMyYTMyYThhOGExNTVhMTIiLCAkY3VycmVu dFsnbmFtZTInXSwgc3ByaW50ZigiJTA3byIsDQoJCQkJJGN1cnJlbnRbJ3N0YXQnXVsyXSks IHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCddWzRdKSwgc3ByaW50ZigiJTA3byIs ICRjdXJyZW50WydzdGF0J11bNV0pLA0KCQkJCXNwcmludGYoIiUwMTFvIiwgJGN1cnJlbnRb J3R5cGUnXSA9PSAyID8gMCA6ICRjdXJyZW50WydzdGF0J11bN10pLCBzcHJpbnRmKCIlMDEx byIsICRjdXJyZW50WydzdGF0J11bOV0pLA0KCQkJCSIgICAgICAgICIsICRjdXJyZW50Wyd0 eXBlJ10sICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IEByZWFkbGluaygkY3VycmVudFsnbmFt ZSddKSA6ICIiLCAidXN0YXIgIiwgIiAiLA0KCQkJCSJVbmtub3duIiwgIlVua25vd24iLCAi IiwgIiIsICFlbXB0eSAoJHBhdGgpID8gJHBhdGggOiAiIiwgIiIpOw0KDQoJCQkkY2hlY2tz dW0gPSAwOw0KCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0KCQkJCSRjaGVja3N1 bSArPSBvcmQoc3Vic3RyKCRibG9jaywgJGksIDEpKTsNCgkJCSRjaGVja3N1bSA9IHBhY2so ImE4Iiwgc3ByaW50ZigiJTA3byIsICRjaGVja3N1bSkpOw0KCQkJJGJsb2NrID0gc3Vic3Ry X3JlcGxhY2UoJGJsb2NrLCAkY2hlY2tzdW0sIDE0OCwgOCk7DQoNCgkJCWlmICgkY3VycmVu dFsndHlwZSddID09IDIgfHwgJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJCSR0aGlz LT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJZWxzZSBpZiAoJGZwID0gQGZvcGVuKCRjdXJyZW50 WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0K CQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCRmcCwgMTA0ODU3NikpDQoJCQkJCSR0aGlzLT5h ZGRfZGF0YSgkdGVtcCk7DQoJCQkJaWYgKCRjdXJyZW50WydzdGF0J11bN10gJSA1MTIgPiAw KQ0KCQkJCXsNCgkJCQkJJHRlbXAgPSAiIjsNCgkJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEy IC0gJGN1cnJlbnRbJ3N0YXQnXVs3XSAlIDUxMjsgJGkrKykNCgkJCQkJCSR0ZW1wIC49ICJc MCI7DQoJCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJfQ0KCQkJCWZjbG9zZSgk ZnApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBv cGVuIGZpbGUgeyRjdXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFk ZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+YWRkX2RhdGEocGFjaygiYTEwMjQiLCAiIikpOw0K DQoJCWNoZGlyKCRwd2QpOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIGV4dHJh Y3RfZmlsZXMoKQ0KCXsNCgkJJHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0 aW9uc1snYmFzZWRpciddKTsNCg0KCQlpZiAoJGZwID0gJHRoaXMtPm9wZW5fYXJjaGl2ZSgp KQ0KCQl7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMSkNCgkJCQkk dGhpcy0+ZmlsZXMgPSBhcnJheSAoKTsNCg0KCQkJd2hpbGUgKCRibG9jayA9IGZyZWFkKCRm cCwgNTEyKSkNCgkJCXsNCgkJCQkkdGVtcCA9IHVucGFjaygiYTEwMG5hbWUvYThtb2RlL2E4 dWlkL2E4Z2lkL2ExMnNpemUvYTEybXRpbWUvYThjaGVja3N1bS9hMXR5cGUvYTEwMHN5bWxp bmsvYTZtYWdpYy9hMnRlbXAvYTMydGVtcC9hMzJ0ZW1wL2E4dGVtcC9hOHRlbXAvYTE1NXBy ZWZpeC9hMTJ0ZW1wIiwgJGJsb2NrKTsNCgkJCQkkZmlsZSA9IGFycmF5ICgNCgkJCQkJJ25h bWUnID0+ICR0ZW1wWydwcmVmaXgnXSAuICR0ZW1wWyduYW1lJ10sDQoJCQkJCSdzdGF0JyA9 PiBhcnJheSAoDQoJCQkJCQkyID0+ICR0ZW1wWydtb2RlJ10sDQoJCQkJCQk0ID0+IG9jdGRl YygkdGVtcFsndWlkJ10pLA0KCQkJCQkJNSA9PiBvY3RkZWMoJHRlbXBbJ2dpZCddKSwNCgkJ CQkJCTcgPT4gb2N0ZGVjKCR0ZW1wWydzaXplJ10pLA0KCQkJCQkJOSA9PiBvY3RkZWMoJHRl bXBbJ210aW1lJ10pLA0KCQkJCQkpLA0KCQkJCQknY2hlY2tzdW0nID0+IG9jdGRlYygkdGVt cFsnY2hlY2tzdW0nXSksDQoJCQkJCSd0eXBlJyA9PiAkdGVtcFsndHlwZSddLA0KCQkJCQkn bWFnaWMnID0+ICR0ZW1wWydtYWdpYyddLA0KCQkJCSk7DQoNCgkJCQlpZiAoJGZpbGVbJ2No ZWNrc3VtJ10gPT0gMHgwMDAwMDAwMCkNCgkJCQkJYnJlYWs7DQoJCQkJZWxzZSBpZiAoc3Vi c3RyKCRmaWxlWydtYWdpYyddLCAwLCA1KSAhPSAidXN0YXIiKQ0KCQkJCXsNCgkJCQkJJHRo aXMtPmVycm9yW10gPSAiVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCBleHRyYWN0aW5n IHRoaXMgdHlwZSBvZiB0YXIgZmlsZS4iOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQkJJGJs b2NrID0gc3Vic3RyX3JlcGxhY2UoJGJsb2NrLCAiICAgICAgICAiLCAxNDgsIDgpOw0KCQkJ CSRjaGVja3N1bSA9IDA7DQoJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0KCQkJ CQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkYmxvY2ssICRpLCAxKSk7DQoJCQkJaWYgKCRm aWxlWydjaGVja3N1bSddICE9ICRjaGVja3N1bSkNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAi Q291bGQgbm90IGV4dHJhY3QgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0sIGl0IGlz IGNvcnJ1cHQuIjsNCg0KCQkJCS8vIEFkZGVkOiBjcmVhdGUgZGlyIGlmIHJlcXVpcmVkDQoJ CQkJaWYgKHN0cnBvcygkZmlsZVsnbmFtZSddLCAnLi4nKSA9PT0gZmFsc2UpIHsNCgkJCQkJ JHBhdGhfcGFydHMgPSBwYXRoaW5mbygkZmlsZVsnbmFtZSddKTsNCgkJCQkJaWYgKCFmaWxl X2V4aXN0cygkZmlsZVsnbmFtZSddKSkgew0KCQkJCQkJJHJldCA9IHNtZF9ta2Rpcl9yZWN1 cnNpdmUoKChpc3NldCgkcGF0aF9wYXJ0c1snZXh0ZW5zaW9uJ10pKSA/IGRpcm5hbWUoJHRo aXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFtZSddKSA6ICR0aGlzLT5vcHRp b25zWydiYXNlZGlyJ10uRFMuJGZpbGVbJ25hbWUnXSkpOw0KCQkJCQl9DQoJCQkJfQ0KDQoJ CQkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDEpDQoJCQkJew0KCQkJCQkk ZmlsZVsnZGF0YSddID0gZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKTsNCgkJCQkJZnJl YWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikgPT0gNTEyID8gMCA6ICg1 MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7DQoJCQkJCXVuc2V0ICgkZmlsZVsnY2hl Y2tzdW0nXSwgJGZpbGVbJ21hZ2ljJ10pOw0KCQkJCQkkdGhpcy0+ZmlsZXNbXSA9ICRmaWxl Ow0KCQkJCX0NCgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDUpDQoJCQkJew0KCQkJ CQlpZiAoIWlzX2RpcigkZmlsZVsnbmFtZSddKSkNCgkJCQkJCW1rZGlyKCRmaWxlWyduYW1l J10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkdGhpcy0+b3B0 aW9uc1snb3ZlcndyaXRlJ10gPT0gMCAmJiBmaWxlX2V4aXN0cygkZmlsZVsnbmFtZSddKSkN CgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gInskZmlsZVsnbmFtZSddfSBhbHJlYWR5 IGV4aXN0cy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJGZpbGVb J3R5cGUnXSA9PSAyKQ0KCQkJCXsNCgkJCQkJc3ltbGluaygkdGVtcFsnc3ltbGluayddLCAk ZmlsZVsnbmFtZSddKTsNCgkJCQkJY2htb2QoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQn XVsyXSk7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRuZXcgPSBmb3BlbigkZmlsZVsnbmFtZSdd LCAid2IiKSkNCgkJCQl7DQoJCQkJCWZ3cml0ZSgkbmV3LCBmcmVhZCgkZnAsICRmaWxlWydz dGF0J11bN10pKTsNCgkJCQkJZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAl IDUxMikgPT0gNTEyID8gMCA6ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7DQoJ CQkJCWZjbG9zZSgkbmV3KTsNCgkJCQkJQGNobW9kKCRmaWxlWyduYW1lJ10sIDA2NDQpOyAv LyBIYXJkLWNvZGVkIGZvciBub3cgYmVjYXVzZSB0aGUgc3R1cGlkIDAxMDA2NDQgdmFsdWUg aW4gJGZpbGVbJ3N0YXQnXVsyXSBjb25mdXNlcyB0aGUgT1MvUEhQDQoJCQkJfQ0KCQkJCWVs c2UNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskZmls ZVsnbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJ Ly8gUmVtb3ZlIG93bmVyIGFuZCBncm91cCBzZXR0aW5nIHNpbmNlIHRoZXJlIGlzIGFsbW9z dCAwIGxpa2VsaWhvb2QgdGhlIGZpbGVzIHdpbGwgaGF2ZSB0aGUgc2FtZSB1c2VyL2dyb3Vw IGFjcm9zcyBzeXN0ZW1zDQoJCQkJLy8gSW4gb3RoZXIgd29yZHMsIGxlYXZlIG93bmVyL2dy b3VwIGF0IHRoZSBBcGFjaGUgZGVmYXVsdCAtLSB3aGljaCBpcyB3aGF0IHdlIHdhbnQNCi8v CQkJCWNob3duKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bNF0pOw0KLy8JCQkJY2hn cnAoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs1XSk7DQoJCQkJQHRvdWNoKCRmaWxl WyduYW1lJ10sICRmaWxlWydzdGF0J11bOV0pOw0KCQkJCXVuc2V0ICgkZmlsZSk7DQoJCQl9 DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmls ZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0iOw0KDQoJCWNoZGlyKCRwd2QpOw0KCX0NCg0K CWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4gQGZvcGVuKCR0aGlzLT5v cHRpb25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2d6aXBfZmls ZSBleHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9nemlwX2Zp bGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRo aXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJnemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVf Z3ppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJ ew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSk7DQoJCQlpZiAoJGZwID0gZ3pvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3 YnskdGhpcy0+b3B0aW9uc1snbGV2ZWwnXX0iKSkNCgkJCXsNCgkJCQlmc2VlaygkdGhpcy0+ YXJjaGl2ZSwgMCk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJHRoaXMtPmFyY2hpdmUs IDEwNDg1NzYpKQ0KCQkJCQlnendyaXRlKCRmcCwgJHRlbXApOw0KCQkJCWd6Y2xvc2UoJGZw KTsNCgkJCQljaGRpcigkcHdkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gZm9y IHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJ fQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9IGd6ZW5jb2RlKCR0aGlzLT5hcmNoaXZl LCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJZnVu Y3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAZ3pvcGVuKCR0aGlzLT5vcHRp b25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2J6aXBfZmlsZSBl eHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9iemlwX2ZpbGUo JG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRoaXMt Pm9wdGlvbnNbJ3R5cGUnXSA9ICJiemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYnpp cCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0K CQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXIn XSk7DQoJCQlpZiAoJGZwID0gYnpvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3YiIp KQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRl bXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWJ6d3JpdGUoJGZw LCAkdGVtcCk7DQoJCQkJYnpjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0K CQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHsk dGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2Qp Ow0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZl ID0gYnpjb21wcmVzcygkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNbJ2xldmVsJ10p Ow0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0K CQlyZXR1cm4gQGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiciIpOw0KCX0NCn0N Cg0KY2xhc3Mgc21kX2F0X3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X2FyY2hpdmUNCnsNCglm dW5jdGlvbiBzbWRfYXRfemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X2Fy Y2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gInppcCI7DQoJfQ0K DQoJZnVuY3Rpb24gY3JlYXRlX3ppcCgpDQoJew0KCQkkZmlsZXMgPSAwOw0KCQkkb2Zmc2V0 ID0gMDsNCgkJJGNlbnRyYWwgPSAiIjsNCg0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9u c1snc2Z4J10pKQ0KCQkJaWYgKCRmcCA9IEBmb3BlbigkdGhpcy0+b3B0aW9uc1snc2Z4J10s ICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJlYWQoJGZwLCBmaWxlc2l6ZSgkdGhpcy0+ b3B0aW9uc1snc2Z4J10pKTsNCgkJCQlmY2xvc2UoJGZwKTsNCgkJCQkkdGhpcy0+YWRkX2Rh dGEoJHRlbXApOw0KCQkJCSRvZmZzZXQgKz0gc3RybGVuKCR0ZW1wKTsNCgkJCQl1bnNldCAo JHRlbXApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5v dCBvcGVuIHNmeCBtb2R1bGUgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ3NmeCddfS4iOw0KDQoJ CSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7 DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRjdXJyZW50KQ0KCQl7DQoJCQlpZiAo JGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0aW9uc1snbmFtZSddKQ0KCQkJCWNvbnRp bnVlOw0KDQoJCQkkdGltZWRhdGUgPSBleHBsb2RlKCIgIiwgZGF0ZSgiWSBuIGogRyBpIHMi LCAkY3VycmVudFsnc3RhdCddWzldKSk7DQoJCQkkdGltZWRhdGUgPSAoJHRpbWVkYXRlWzBd IC0gMTk4MCA8PCAyNSkgfCAoJHRpbWVkYXRlWzFdIDw8IDIxKSB8ICgkdGltZWRhdGVbMl0g PDwgMTYpIHwNCgkJCQkoJHRpbWVkYXRlWzNdIDw8IDExKSB8ICgkdGltZWRhdGVbNF0gPDwg NSkgfCAoJHRpbWVkYXRlWzVdKTsNCg0KCQkJJGJsb2NrID0gcGFjaygiVnZ2dlYiLCAweDA0 MDM0YjUwLCAweDAwMEEsIDB4MDAwMCwgKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwg JHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGlt ZWRhdGUpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwICYmICRjdXJyZW50 Wyd0eXBlJ10gPT0gNSkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAweDAw MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUy J10pICsgMSwgMHgwMDAwKTsNCgkJCQkkYmxvY2sgLj0gJGN1cnJlbnRbJ25hbWUyJ10gLiAi LyI7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJJGNlbnRyYWwgLj0gcGFj aygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9wdGlv bnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJKGlz c2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09 IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCTB4MDAwMDAwMDAsIDB4 MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgKyAxLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0eXBlJ10gPT0gNSA/ IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAk Y3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9 ICgzMSArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0KCQkJZWxzZSBpZiAo JGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJew0KCQkJCSRibG9jayAuPSBwYWNrKCJW VlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigkY3Vy cmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1l MiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSRjZW50cmFsIC49IHBh Y2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAwMTQsICR0aGlzLT5vcHRp b25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBBLCAweDAwMDAsDQoJCQkJCShp c3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9 PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJCQkweDAwMDAwMDAwLCAw eDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0eXBlJ10gPT0gNSA/IDB4 MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3Vy cmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCArIHN0 cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoJGZwID0gQGZv cGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJlYWQo JGZwLCAkY3VycmVudFsnc3RhdCddWzddKTsNCgkJCQlmY2xvc2UoJGZwKTsNCgkJCQkkY3Jj MzIgPSBjcmMzMigkdGVtcCk7DQoJCQkJaWYgKCFpc3NldCgkY3VycmVudFsnbWV0aG9kJ10p ICYmICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJHRlbXAg PSBnemNvbXByZXNzKCR0ZW1wLCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoJCQkJCSRz aXplID0gc3RybGVuKCR0ZW1wKSAtIDY7DQoJCQkJCSR0ZW1wID0gc3Vic3RyKCR0ZW1wLCAy LCAkc2l6ZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJJHNpemUgPSBzdHJsZW4oJHRlbXAp Ow0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsICRjcmMzMiwgJHNpemUsICRjdXJyZW50 WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJ JGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxv Y2spOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsN CgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwgMHgwMjAxNGI1MCwg MHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4MDAwMCA6IDB4MDAw QSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8fCAkdGhpcy0+ b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0aW1lZGF0ZSwN CgkJCQkJJGNyYzMyLCAkc2l6ZSwgJGN1cnJlbnRbJ3N0YXQnXVs3XSwgc3RybGVuKCRjdXJy ZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAw MDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJ CQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCArIHN0cmxlbigkY3VycmVudFsnbmFt ZTInXSkgKyAkc2l6ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRoaXMtPmVycm9yW10gPSAi Q291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0gZm9yIHJlYWRpbmcuIEl0 IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRfZGF0YSgkY2VudHJhbCk7 DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBhY2soIlZ2dnZ2VlZ2IiwgMHgwNjA1NGI1MCwgMHgw MDAwLCAweDAwMDAsICRmaWxlcywgJGZpbGVzLCBzdHJsZW4oJGNlbnRyYWwpLCAkb2Zmc2V0 LA0KCQkJIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA/IHN0cmxlbigkdGhp cy0+b3B0aW9uc1snY29tbWVudCddKSA6IDB4MDAwMCkpOw0KDQoJCWlmICghZW1wdHkgKCR0 aGlzLT5vcHRpb25zWydjb21tZW50J10pKQ0KCQkJJHRoaXMtPmFkZF9kYXRhKCR0aGlzLT5v cHRpb25zWydjb21tZW50J10pOw0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJCXJldHVybiAxOw0K CX0NCn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMNCiMgQ2xhc3MgZFVuemlwMiB2Mi42Mg0KIw0KIyAgQXV0aG9y OiBBbGV4YW5kcmUgVGVkZXNjaGkgKGQpDQojICBFLU1haWw6IGFsZXhhbmRyZWJyIGF0IGdt YWlsIGRvdCBjb20NCiMgIExvbmRyaW5hIC0gUFIgLyBCcmF6aWwNCiMNCiMgIE9iamVjdGl2 ZToNCiMgICAgVGhpcyBjbGFzcyBhbGxvd3MgcHJvZ3JhbW1lciB0byBlYXNpbHkgdW56aXAg ZmlsZXMgb24gdGhlIGZseS4NCiMNCiMgIFJlcXVpcmVtZW50czoNCiMgICAgVGhpcyBjbGFz cyByZXF1aXJlcyBleHRlbnNpb24gWkxpYiBFbmFibGVkLiBJdCBpcyBkZWZhdWx0DQojICAg IGZvciBtb3N0IHNpdGUgaG9zdHMgYXJvdW5kIHRoZSB3b3JsZCwgYW5kIGZvciB0aGUgUEhQ IFdpbjMyIGRpc3QuDQojDQojICBUbyBkbzoNCiMgICAqIEVycm9yIGhhbmRsaW5nDQojICAg KiBXcml0ZSBhIFBIUC1TaWRlIGd6aW5mbGF0ZSwgdG8gY29tcGxldGVseSBhdm9pZCBhbnkg ZXh0ZXJuYWwgZXh0ZW5zaW9ucw0KIyAgICogV3JpdGUgb3RoZXIgZGVjb21wcmVzcyBhbGdv cml0aG1zDQojDQojICBNZXRob2RzOg0KIyAgKiBkVW56aXAyKCRmaWxlbmFtZSkgICAgICAg ICAtIENvbnN0cnVjdG9yIC0gT3BlbnMgJGZpbGVuYW1lDQojICAqIGdldExpc3QoWyRzdG9w T25GaWxlXSkgICAgIC0gUmV0cmlldmUgdGhlIGZpbGUgbGlzdA0KIyAgKiBnZXRFeHRyYUlu Zm8oJHppcGZpbGVuYW1lKSAtIFJldHJpZXZlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29t cHJlc3NlZCBmaWxlDQojICAqIGdldFppcEluZm8oWyRlbnRyeV0pICAgICAgIC0gUmV0cmll dmUgWklQIGZpbGUgZGV0YWlscy4NCiMgICogdW56aXAoJHppcGZpbGVuYW1lLCBbJG91dGZp bGVuYW1lLCBbJGFwcGx5Q2htb2RdXSkgLSBVbnppcCBmaWxlDQojICAqIHVuemlwQWxsKFsk b3V0RGlyLCBbJHppcERpciwgWyRtYWludGFpblN0cnVjdHVyZSwgWyRhcHBseUNobW9kXV1d XSkNCiMgICogY2xvc2UoKSAgICAgICAgICAgICAgICAgICAgLSBDbG9zZSBmaWxlIGhhbmRs ZXIsIGJ1dCBrZWVwIHRoZSBsaXN0DQojICAqIF9fZGVzdHJveSgpICAgICAgICAgICAgICAg IC0gQ2xvc2UgZmlsZSBoYW5kbGVyIGFuZCByZWxlYXNlIG1lbW9yeQ0KIw0KIyAgSWYgeW91 IG1vZGlmeSB0aGlzIGNsYXNzLCBvciBoYXZlIGFueSBpZGVhcyB0byBpbXByb3ZlIGl0LCBw bGVhc2UgY29udGFjdCBtZSENCiMgIFlvdSBhcmUgYWxsb3dlZCB0byByZWRpc3RyaWJ1dGUg dGhpcyBjbGFzcywgaWYgeW91IGtlZXAgbXkgbmFtZSBhbmQgY29udGFjdCBlLW1haWwgb24g aXQuDQojDQojICBQTEVBU0UhIElGIFlPVSBVU0UgVEhJUyBDTEFTUyBJTiBBTlkgT0YgWU9V UiBQUk9KRUNUUywgUExFQVNFIExFVCBNRSBLTk9XIQ0KIyAgSWYgeW91IGhhdmUgcHJvYmxl bXMgdXNpbmcgaXQsIGRvbid0IHRoaW5rIHR3aWNlIGJlZm9yZSBjb250YWN0aW5nIG1lIQ0K Iw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMNCg0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMn KSl7DQoJLy8gSWYgbm90IFBIUDUsIGNyZWF0ZXMgYSBjb21wYXRpYmxlIGZ1bmN0aW9uDQoJ RnVuY3Rpb24gZmlsZV9wdXRfY29udGVudHMoJGZpbGUsICRkYXRhKXsNCgkJaWYoJHRtcCA9 IGZvcGVuKCRmaWxlLCAidyIpKXsNCgkJCWZ3cml0ZSgkdG1wLCAkZGF0YSk7DQoJCQlmY2xv c2UoJHRtcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllY2hvICI8Yj5maWxlX3B1dF9j b250ZW50czo8L2I+IENhbm5vdCBjcmVhdGUgZmlsZSAkZmlsZTxicj4iOw0KCQlyZXR1cm4g ZmFsc2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfZFVuemlwMnsNCglGdW5jdGlvbiBnZXRWZXJz aW9uKCl7DQoJCXJldHVybiAiMi42MiI7DQoJfQ0KCS8vIFB1YmxpYw0KCXZhciAkZmlsZU5h bWU7DQoJdmFyICRsYXN0RXJyb3I7DQoJdmFyICRjb21wcmVzc2VkTGlzdDsgLy8gWW91IHdp bGwgcHJvYmxhYmx5IHVzZSBvbmx5IHRoaXMgb25lIQ0KCXZhciAkY2VudHJhbERpckxpc3Q7 IC8vIENlbnRyYWwgZGlyIGxpc3QuLi4gSXQncyBhIGtpbmQgb2YgJ2V4dHJhIGF0dHJpYnV0 ZXMnIGZvciBhIHNldCBvZiBmaWxlcw0KCXZhciAkZW5kT2ZDZW50cmFsOyAgIC8vIEVuZCBv ZiBjZW50cmFsIGRpciwgY29udGFpbnMgWklQIENvbW1lbnRzDQoJdmFyICRkZWJ1ZzsNCg0K CS8vIFByaXZhdGUNCgl2YXIgJGZoOw0KCXZhciAkemlwU2lnbmF0dXJlID0gIlx4NTBceDRi XHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNp Z25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBkaXIgaGVhZGVyIHNp Z25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYiOyAvLyBl bmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoNCgkvLyBQdWJsaWMNCglGdW5jdGlvbiBz bWRfZFVuemlwMigkZmlsZU5hbWUpew0KCQkkdGhpcy0+ZmlsZU5hbWUgICAgICAgPSAkZmls ZU5hbWU7DQoJCSR0aGlzLT5jb21wcmVzc2VkTGlzdCA9DQoJCSR0aGlzLT5jZW50cmFsRGly TGlzdCA9DQoJCSR0aGlzLT5lbmRPZkNlbnRyYWwgICA9IEFycmF5KCk7DQoJfQ0KDQoJRnVu Y3Rpb24gZ2V0TGlzdCgkc3RvcE9uRmlsZT1mYWxzZSl7DQoJCWlmKHNpemVvZigkdGhpcy0+ Y29tcHJlc3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiUmV0dXJuaW5nIGFs cmVhZHkgbG9hZGVkIGZpbGUgbGlzdC4iKTsNCgkJCXJldHVybiAkdGhpcy0+Y29tcHJlc3Nl ZExpc3Q7DQoJCX0NCg0KCQkvLyBPcGVuIGZpbGUsIGFuZCBzZXQgZmlsZSBoYW5kbGVyDQoJ CSRmaCA9IGZvcGVuKCR0aGlzLT5maWxlTmFtZSwgInIiKTsNCgkJJHRoaXMtPmZoID0gJiRm aDsNCgkJaWYoISRmaCl7DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkZhaWxlZCB0byBsb2Fk IGZpbGUuIik7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQkkdGhpcy0+ZGVidWdNc2co MSwgIkxvYWRpbmcgbGlzdCBmcm9tICdFbmQgb2YgQ2VudHJhbCBEaXInIGluZGV4IGxpc3Qu Li4iKTsNCgkJaWYoISR0aGlzLT5fbG9hZEZpbGVMaXN0QnlFT0YoJGZoLCAkc3RvcE9uRmls ZSkpew0KCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJGYWlsZWQhIFRyeWluZyB0byBsb2FkIGxp c3QgbG9va2luZyBmb3Igc2lnbmF0dXJlcy4uLiIpOw0KCQkJaWYoISR0aGlzLT5fbG9hZEZp bGVMaXN0QnlTaWduYXR1cmVzKCRmaCwgJHN0b3BPbkZpbGUpKXsNCgkJCQkkdGhpcy0+ZGVi dWdNc2coMSwgIkZhaWxlZCEgQ291bGQgbm90IGZpbmQgYW55IHZhbGlkIGhlYWRlci4iKTsN CgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlpJUCBGaWxlIGlzIGNvcnJ1cHRlZCBvciBlbXB0 eSIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KDQoJCWlmKCR0aGlzLT5kZWJ1 Zyl7DQoJCQkjLS0tLS0tLSBEZWJ1ZyBjb21wcmVzc2VkTGlzdA0KCQkJJGtrayA9IDA7DQoJ CQllY2hvICI8dGFibGUgYm9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJkYW5hOyBi b3JkZXI6IDFweCBzb2xpZCAjMDAwJz4iOw0KCQkJZm9yZWFjaCgkdGhpcy0+Y29tcHJlc3Nl ZExpc3QgYXMgJGZpbGVOYW1lPT4kaXRlbSl7DQoJCQkJaWYoISRra2sgJiYgJGtraz0xKXsN CgkJCQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQURBJz4iOw0KCQkJCQlmb3Jl YWNoKCRpdGVtIGFzICRmaWVsZE5hbWU9PiR2YWx1ZSkNCgkJCQkJCWVjaG8gIjx0ZD4kZmll bGROYW1lPC90ZD4iOw0KCQkJCQllY2hvICc8L3RyPic7DQoJCQkJfQ0KCQkJCWVjaG8gIjx0 ciBzdHlsZT0nYmFja2dyb3VuZDogI0NGQyc+IjsNCgkJCQlmb3JlYWNoKCRpdGVtIGFzICRm aWVsZE5hbWU9PiR2YWx1ZSl7DQoJCQkJCWlmKCRmaWVsZE5hbWUgPT0gJ2xhc3Rtb2RfZGF0 ZXRpbWUnKQ0KCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25v d3JhcCc+Ii5kYXRlKCJkL20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJZWxz ZQ0KCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+ JHZhbHVlPC90ZD4iOw0KCQkJCX0NCgkJCQllY2hvICI8L3RyPiI7DQoJCQl9DQoJCQllY2hv ICI8L3RhYmxlPiI7DQoNCgkJCSMtLS0tLS0tIERlYnVnIGNlbnRyYWxEaXJMaXN0DQoJCQkk a2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+Y2VudHJhbERpckxpc3QpKXsNCgkJCQll Y2hvICI8dGFibGUgYm9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJkYW5hOyBib3Jk ZXI6IDFweCBzb2xpZCAjMDAwJz4iOw0KCQkJCWZvcmVhY2goJHRoaXMtPmNlbnRyYWxEaXJM aXN0IGFzICRmaWxlTmFtZT0+JGl0ZW0pew0KCQkJCQlpZighJGtrayAmJiAka2trPTEpew0K CQkJCQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQUFEJz4iOw0KCQkJCQkJZm9y ZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpDQoJCQkJCQkJZWNobyAiPHRkPiRm aWVsZE5hbWU8L3RkPiI7DQoJCQkJCQllY2hvICc8L3RyPic7DQoJCQkJCX0NCgkJCQkJZWNo byAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQ0NGJz4iOw0KCQkJCQlmb3JlYWNoKCRpdGVt IGFzICRmaWVsZE5hbWU9PiR2YWx1ZSl7DQoJCQkJCQlpZigkZmllbGROYW1lID09ICdsYXN0 bW9kX2RhdGV0aW1lJykNCgkJCQkJCQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5hbWUnIG5v d3JhcD0nbm93cmFwJz4iLmRhdGUoImQvbS9ZIEg6aTpzIiwgJHZhbHVlKS4iPC90ZD4iOw0K CQkJCQkJZWxzZQ0KCQkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFw PSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJCQkJfQ0KCQkJCQllY2hvICI8L3RyPiI7DQoJ CQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCg0KCQkJIy0tLS0tLS0gRGVidWcg ZW5kT2ZDZW50cmFsDQoJCQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+ZW5kT2ZD ZW50cmFsKSl7DQoJCQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDEx cHggVmVyZGFuYScgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDAnPiI7DQoJCQkJZWNo byAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjREFBJz48dGQgY29sc3Bhbj0nMic+ZFVuemlw IC0gRW5kIG9mIGZpbGU8L3RkPjwvdHI+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5lbmRPZkNl bnRyYWwgYXMgJGZpZWxkPT4kdmFsdWUpew0KCQkJCQllY2hvICI8dHI+IjsNCgkJCQkJZWNo byAiPHRkIHN0eWxlPSdiYWNrZ3JvdW5kOiAjRkNDJz4kZmllbGQ8L3RkPiI7DQoJCQkJCWVj aG8gIjx0ZCBzdHlsZT0nYmFja2dyb3VuZDogI0ZERCc+JHZhbHVlPC90ZD4iOw0KCQkJCQll Y2hvICI8L3RyPiI7DQoJCQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCgkJfQ0K DQoJCXJldHVybiAkdGhpcy0+Y29tcHJlc3NlZExpc3Q7DQoJfQ0KCUZ1bmN0aW9uIGdldEV4 dHJhSW5mbygkY29tcHJlc3NlZEZpbGVOYW1lKXsNCgkJcmV0dXJuDQoJCQlpc3NldCgkdGhp cy0+Y2VudHJhbERpckxpc3RbJGNvbXByZXNzZWRGaWxlTmFtZV0pPw0KCQkJJHRoaXMtPmNl bnRyYWxEaXJMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdOg0KCQkJZmFsc2U7DQoJfQ0KCUZ1 bmN0aW9uIGdldFppcEluZm8oJGRldGFpbD1mYWxzZSl7DQoJCXJldHVybiAkZGV0YWlsPw0K CQkJJHRoaXMtPmVuZE9mQ2VudHJhbFskZGV0YWlsXToNCgkJCSR0aGlzLT5lbmRPZkNlbnRy YWw7DQoJfQ0KDQoJRnVuY3Rpb24gdW56aXAoJGNvbXByZXNzZWRGaWxlTmFtZSwgJHRhcmdl dEZpbGVOYW1lPWZhbHNlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoIXNpemVvZigkdGhp cy0+Y29tcHJlc3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiVHJ5aW5nIHRv IHVuemlwIGJlZm9yZSBsb2FkaW5nIGZpbGUgbGlzdC4uLiBMb2FkaW5nIGl0ISIpOw0KCQkJ JHRoaXMtPmdldExpc3QoZmFsc2UsICRjb21wcmVzc2VkRmlsZU5hbWUpOw0KCQl9DQoNCgkJ JGZkZXRhaWxzID0gJiR0aGlzLT5jb21wcmVzc2VkTGlzdFskY29tcHJlc3NlZEZpbGVOYW1l XTsNCgkJaWYoIWlzc2V0KCR0aGlzLT5jb21wcmVzc2VkTGlzdFskY29tcHJlc3NlZEZpbGVO YW1lXSkpew0KCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJGaWxlICc8Yj4kY29tcHJlc3NlZEZp bGVOYW1lPC9iPicgaXMgbm90IGNvbXByZXNzZWQgaW4gdGhlIHppcC4iKTsNCgkJCXJldHVy biBmYWxzZTsNCgkJfQ0KCQlpZihzdWJzdHIoJGNvbXByZXNzZWRGaWxlTmFtZSwgLTEpID09 ICIvIil7DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlRyeWluZyB0byB1bnppcCBhIGZvbGRl ciBuYW1lICc8Yj4kY29tcHJlc3NlZEZpbGVOYW1lPC9iPicuIik7DQoJCQlyZXR1cm4gZmFs c2U7DQoJCX0NCgkJaWYoISRmZGV0YWlsc1sndW5jb21wcmVzc2VkX3NpemUnXSl7DQoJCQkk dGhpcy0+ZGVidWdNc2coMSwgIkZpbGUgJzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8L2I+JyBp cyBlbXB0eS4iKTsNCgkJCXJldHVybiAkdGFyZ2V0RmlsZU5hbWU/DQoJCQkJZmlsZV9wdXRf Y29udGVudHMoJHRhcmdldEZpbGVOYW1lLCAiIik6DQoJCQkJIiI7DQoJCX0NCg0KCQlmc2Vl aygkdGhpcy0+ZmgsICRmZGV0YWlsc1snY29udGVudHMtc3RhcnRPZmZzZXQnXSk7DQoJCSRy ZXQgPSAkdGhpcy0+dW5jb21wcmVzcygNCgkJCQlmcmVhZCgkdGhpcy0+ZmgsICRmZGV0YWls c1snY29tcHJlc3NlZF9zaXplJ10pLA0KCQkJCSRmZGV0YWlsc1snY29tcHJlc3Npb25fbWV0 aG9kJ10sDQoJCQkJJGZkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddLA0KCQkJCSR0YXJn ZXRGaWxlTmFtZQ0KCQkJKTsNCgkJaWYoJGFwcGx5Q2htb2QgJiYgJHRhcmdldEZpbGVOYW1l KQ0KCQkJY2htb2QoJHRhcmdldEZpbGVOYW1lLCAwNzc3KTsNCgkJDQoJCXJldHVybiAkcmV0 Ow0KCX0NCglGdW5jdGlvbiB1bnppcEFsbCgkdGFyZ2V0RGlyPWZhbHNlLCAkYmFzZURpcj0i IiwgJG1haW50YWluU3RydWN0dXJlPXRydWUsICRhcHBseUNobW9kPTA3Nzcpew0KCQlpZigk dGFyZ2V0RGlyID09PSBmYWxzZSkNCgkJCSR0YXJnZXREaXIgPSBkaXJuYW1lKCRfU0VSVkVS WydTQ1JJUFRfRklMRU5BTUUnXSkuIi8iOw0KCQkNCgkJJGxpc3RhID0gJHRoaXMtPmdldExp c3QoKTsNCgkJaWYoc2l6ZW9mKCRsaXN0YSkpIGZvcmVhY2goJGxpc3RhIGFzICRmaWxlTmFt ZT0+JHRyYXNoKXsNCgkJCSRkaXJuYW1lICA9IGRpcm5hbWUoJGZpbGVOYW1lKTsNCgkJCSRv dXRETiAgICA9ICIkdGFyZ2V0RGlyLyRkaXJuYW1lIjsNCgkJCQ0KCQkJaWYoc3Vic3RyKCRk aXJuYW1lLCAwLCBzdHJsZW4oJGJhc2VEaXIpKSAhPSAkYmFzZURpcikNCgkJCQljb250aW51 ZTsNCgkJCQ0KCQkJaWYoIWlzX2Rpcigkb3V0RE4pICYmICRtYWludGFpblN0cnVjdHVyZSl7 DQoJCQkJJHN0ciA9ICIiOw0KCQkJCSRmb2xkZXJzID0gZXhwbG9kZSgiLyIsICRkaXJuYW1l KTsNCgkJCQlmb3JlYWNoKCRmb2xkZXJzIGFzICRmb2xkZXIpew0KCQkJCQkkc3RyID0gJHN0 cj8iJHN0ci8kZm9sZGVyIjokZm9sZGVyOw0KCQkJCQlpZighaXNfZGlyKCIkdGFyZ2V0RGly LyRzdHIiKSl7DQoJCQkJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkNyZWF0aW5nIGZvbGRlcjog JHRhcmdldERpci8kc3RyIik7DQoJCQkJCQlta2RpcigiJHRhcmdldERpci8kc3RyIik7DQoJ CQkJCQlpZigkYXBwbHlDaG1vZCkNCgkJCQkJCQljaG1vZCgiJHRhcmdldERpci8kc3RyIiwg JGFwcGx5Q2htb2QpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJaWYoc3Vic3RyKCRmaWxl TmFtZSwgLTEsIDEpID09ICIvIikNCgkJCQljb250aW51ZTsNCg0KCQkJJG1haW50YWluU3Ry dWN0dXJlPw0KCQkJCSR0aGlzLT51bnppcCgkZmlsZU5hbWUsICIkdGFyZ2V0RGlyLyRmaWxl TmFtZSIsICRhcHBseUNobW9kKToNCgkJCQkkdGhpcy0+dW56aXAoJGZpbGVOYW1lLCAiJHRh cmdldERpci8iLmJhc2VuYW1lKCRmaWxlTmFtZSksICRhcHBseUNobW9kKTsNCgkJfQ0KCX0N CgkNCglGdW5jdGlvbiBjbG9zZSgpeyAgICAgLy8gRnJlZSB0aGUgZmlsZSByZXNvdXJjZQ0K CQlpZigkdGhpcy0+ZmgpDQoJCQlmY2xvc2UoJHRoaXMtPmZoKTsNCgl9DQoJRnVuY3Rpb24g X19kZXN0cm95KCl7IA0KCQkkdGhpcy0+Y2xvc2UoKTsNCgl9DQoNCgkvLyBQcml2YXRlICh5 b3Ugc2hvdWxkIE5PVCBjYWxsIHRoZXNlIG1ldGhvZHMpOg0KCUZ1bmN0aW9uIHVuY29tcHJl c3MoJiRjb250ZW50LCAkbW9kZSwgJHVuY29tcHJlc3NlZFNpemUsICR0YXJnZXRGaWxlTmFt ZT1mYWxzZSl7DQoJCXN3aXRjaCgkbW9kZSl7DQoJCQljYXNlIDA6DQoJCQkJLy8gTm90IGNv bXByZXNzZWQNCgkJCQlyZXR1cm4gJHRhcmdldEZpbGVOYW1lPw0KCQkJCQlmaWxlX3B1dF9j b250ZW50cygkdGFyZ2V0RmlsZU5hbWUsICRjb250ZW50KToNCgkJCQkJJGNvbnRlbnQ7DQoJ CQljYXNlIDE6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJTaHJ1bmsgbW9kZSBpcyBub3Qg c3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDI6DQoJ CQljYXNlIDM6DQoJCQljYXNlIDQ6DQoJCQljYXNlIDU6DQoJCQkJJHRoaXMtPmRlYnVnTXNn KDIsICJDb21wcmVzc2lvbiBmYWN0b3IgIi4oJG1vZGUtMSkuIiBpcyBub3Qgc3VwcG9ydGVk Li4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDY6DQoJCQkJJHRoaXMt PmRlYnVnTXNnKDIsICJJbXBsb2RlIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJ CXJldHVybiBmYWxzZTsNCgkJCWNhc2UgNzoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlRv a2VuaXppbmcgY29tcHJlc3Npb24gYWxnb3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0 PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgODoNCgkJCQkvLyBEZWZsYXRlDQoJ CQkJcmV0dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQkJZmlsZV9wdXRfY29udGVudHMoJHRh cmdldEZpbGVOYW1lLCBnemluZmxhdGUoJGNvbnRlbnQsICR1bmNvbXByZXNzZWRTaXplKSk6 DQoJCQkJCWd6aW5mbGF0ZSgkY29udGVudCwgJHVuY29tcHJlc3NlZFNpemUpOw0KCQkJY2Fz ZSA5Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiRW5oYW5jZWQgRGVmbGF0aW5nIGlzIG5v dCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgMTA6 DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJQS1dBUkUgRGF0ZSBDb21wcmVzc2lvbiBMaWJy YXJ5IEltcG9sb2RpbmcgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJu IGZhbHNlOw0KICAgICAgICAgICBjYXNlIDEyOg0KICAgICAgICAgICAgICAgLy8gQnppcDIN CiAgICAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0RmlsZU5hbWU/DQogICAgICAgICAgICAg ICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRhcmdldEZpbGVOYW1lLCBiemRlY29tcHJlc3Mo JGNvbnRlbnQpKToNCiAgICAgICAgICAgICAgICAgICBiemRlY29tcHJlc3MoJGNvbnRlbnQp Ow0KCQkJY2FzZSAxODoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIklCTSBURVJTRSBpcyBu b3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlkZWZhdWx0 Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiVW5rbm93biB1bmNvbXByZXNzIG1ldGhvZDog JG1vZGUiKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgl9DQoJRnVuY3Rpb24gZGVidWdN c2coJGxldmVsLCAkc3RyaW5nKXsNCgkJaWYoJHRoaXMtPmRlYnVnKXsNCgkJCWlmKCRsZXZl bCA9PSAxKQ0KCQkJCWVjaG8gIjxiIHN0eWxlPSdjb2xvcjogIzc3Nyc+ZFVuemlwMjo8L2I+ ICRzdHJpbmc8YnI+IjsNCgkJCQ0KCQkJaWYoJGxldmVsID09IDIpDQoJCQkJZWNobyAiPGIg c3R5bGU9J2NvbG9yOiAjRjAwJz5kVW56aXAyOjwvYj4gJHN0cmluZzxicj4iOw0KCQl9DQoJ CSR0aGlzLT5sYXN0RXJyb3IgPSAkc3RyaW5nOw0KCX0NCglGdW5jdGlvbiBnZXRMYXN0RXJy b3IoKXsNCgkJcmV0dXJuICR0aGlzLT5sYXN0RXJyb3I7DQoJfQ0KDQoJRnVuY3Rpb24gX2xv YWRGaWxlTGlzdEJ5RU9GKCYkZmgsICRzdG9wT25GaWxlPWZhbHNlKXsNCgkJLy8gQ2hlY2sg aWYgdGhlcmUncyBhIHZhbGlkIENlbnRyYWwgRGlyIHNpZ25hdHVyZS4NCgkJLy8gTGV0J3Mg Y29uc2lkZXIgYSBmaWxlIGNvbW1lbnQgc21hbGxlciB0aGFuIDEwMjQgY2hhcmFjdGVycy4u Lg0KCQkvLyBBY3R1YWxseSwgaXQgbGVuZ3RoIGNhbiBiZSA2NTUzNi4uIEJ1dCB3ZSdyZSBu b3QgZ29pbmcgdG8gc3VwcG9ydCBpdC4NCg0KCQlmb3IoJHggPSAwOyAkeCA8IDEwMjQ7ICR4 Kyspew0KCQkJZnNlZWsoJGZoLCAtMjItJHgsIFNFRUtfRU5EKTsNCg0KCQkJJHNpZ25hdHVy ZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT5kaXJTaWdu YXR1cmVFKXsNCgkJCQkvLyBJZiBmb3VuZCBFT0YgQ2VudHJhbCBEaXINCgkJCQkkZW9kaXJb J2Rpc2tfbnVtYmVyX3RoaXMnXSAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8v IG51bWJlciBvZiB0aGlzIGRpc2sNCgkJCQkkZW9kaXJbJ2Rpc2tfbnVtYmVyJ10gICAgICAg ID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIG51bWJlciBvZiB0aGUgZGlzayB3 aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkNCgkJCQkkZW9kaXJbJ3Rv dGFsX2VudHJpZXNfdGhpcyddID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHRv dGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpciBvbiB0aGlzIGRpc2sN CgkJCQkkZW9kaXJbJ3RvdGFsX2VudHJpZXMnXSAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQo JGZoLCAyKSk7IC8vIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluDQoJCQkJJGVvZGlyWydz aXplX29mX2NkJ10gICAgICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBz aXplIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQ0KCQkJCSRlb2Rpclsnb2Zmc2V0X3N0YXJ0 X2NkJ10gICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gb2Zmc2V0IG9mIHN0 YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcg ZGlzayBudW1iZXINCgkJCQkkemlwRmlsZUNvbW1lbnRMZW5naHQgICAgICAgID0gdW5wYWNr KCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHppcGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCQkk ZW9kaXJbJ3ppcGZpbGVfY29tbWVudCddICAgID0gJHppcEZpbGVDb21tZW50TGVuZ2h0WzFd P2ZyZWFkKCRmaCwgJHppcEZpbGVDb21tZW50TGVuZ2h0WzFdKTonJzsgLy8gemlwZmlsZSBj b21tZW50DQoJCQkJJHRoaXMtPmVuZE9mQ2VudHJhbCA9IEFycmF5KA0KCQkJCQknZGlza19u dW1iZXJfdGhpcyc9PiRlb2RpclsnZGlza19udW1iZXJfdGhpcyddWzFdLA0KCQkJCQknZGlz a19udW1iZXInPT4kZW9kaXJbJ2Rpc2tfbnVtYmVyJ11bMV0sDQoJCQkJCSd0b3RhbF9lbnRy aWVzX3RoaXMnPT4kZW9kaXJbJ3RvdGFsX2VudHJpZXNfdGhpcyddWzFdLA0KCQkJCQkndG90 YWxfZW50cmllcyc9PiRlb2RpclsndG90YWxfZW50cmllcyddWzFdLA0KCQkJCQknc2l6ZV9v Zl9jZCc9PiRlb2Rpclsnc2l6ZV9vZl9jZCddWzFdLA0KCQkJCQknb2Zmc2V0X3N0YXJ0X2Nk Jz0+JGVvZGlyWydvZmZzZXRfc3RhcnRfY2QnXVsxXSwNCgkJCQkJJ3ppcGZpbGVfY29tbWVu dCc9PiRlb2RpclsnemlwZmlsZV9jb21tZW50J10sDQoJCQkJKTsNCg0KCQkJCS8vIFRoZW4s IGxvYWQgZmlsZSBsaXN0DQoJCQkJZnNlZWsoJGZoLCAkdGhpcy0+ZW5kT2ZDZW50cmFsWydv ZmZzZXRfc3RhcnRfY2QnXSk7DQoJCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoN CgkJCQl3aGlsZSgkc2lnbmF0dXJlID09ICR0aGlzLT5kaXJTaWduYXR1cmUpew0KCQkJCQkk ZGlyWyd2ZXJzaW9uX21hZGVieSddICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIp KTsgLy8gdmVyc2lvbiBtYWRlIGJ5DQoJCQkJCSRkaXJbJ3ZlcnNpb25fbmVlZGVkJ10gICAg ICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJzaW9uIG5lZWRlZCB0byBl eHRyYWN0DQoJCQkJCSRkaXJbJ2dlbmVyYWxfYml0X2ZsYWcnXSAgICA9IHVucGFjaygidiIs IGZyZWFkKCRmaCwgMikpOyAvLyBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcNCgkJCQkJJGRp clsnY29tcHJlc3Npb25fbWV0aG9kJ10gID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7 IC8vIGNvbXByZXNzaW9uIG1ldGhvZA0KCQkJCQkkZGlyWydsYXN0bW9kX3RpbWUnXSAgICAg ICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSB0aW1l DQoJCQkJCSRkaXJbJ2xhc3Rtb2RfZGF0ZSddICAgICAgICA9IHVucGFjaygidiIsIGZyZWFk KCRmaCwgMikpOyAvLyBsYXN0IG1vZCBmaWxlIGRhdGUNCgkJCQkJJGRpclsnY3JjLTMyJ10g ICAgICAgICAgICAgID0gZnJlYWQoJGZoLCA0KTsgICAgICAgICAgICAgIC8vIGNyYy0zMg0K CQkJCQkkZGlyWydjb21wcmVzc2VkX3NpemUnXSAgICAgPSB1bnBhY2soIlYiLCBmcmVhZCgk ZmgsIDQpKTsgLy8gY29tcHJlc3NlZCBzaXplDQoJCQkJCSRkaXJbJ3VuY29tcHJlc3NlZF9z aXplJ10gICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyB1bmNvbXByZXNzZWQg c2l6ZQ0KCQkJCQkkZmlsZU5hbWVMZW5ndGggICAgICAgICAgICAgPSB1bnBhY2soInYiLCBm cmVhZCgkZmgsIDIpKTsgLy8gZmlsZW5hbWUgbGVuZ3RoDQoJCQkJCSRleHRyYUZpZWxkTGVu Z3RoICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRyYSBm aWVsZCBsZW5ndGgNCgkJCQkJJGZpbGVDb21tZW50TGVuZ3RoICAgICAgICAgID0gdW5wYWNr KCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCQkJJGRp clsnZGlza19udW1iZXJfc3RhcnQnXSAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7 IC8vIGRpc2sgbnVtYmVyIHN0YXJ0DQoJCQkJCSRkaXJbJ2ludGVybmFsX2F0dHJpYnV0ZXMn XSA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBpbnRlcm5hbCBmaWxlIGF0dHJp YnV0ZXMtYnl0ZTENCgkJCQkJJGRpclsnZXh0ZXJuYWxfYXR0cmlidXRlczEnXT0gdW5wYWNr KCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGV4dGVybmFsIGZpbGUgYXR0cmlidXRlcy1ieXRl Mg0KCQkJCQkkZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMiddPSB1bnBhY2soInYiLCBmcmVh ZCgkZmgsIDIpKTsgLy8gZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQoJCQkJCSRkaXJbJ3Jl bGF0aXZlX29mZnNldCddICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBy ZWxhdGl2ZSBvZmZzZXQgb2YgbG9jYWwgaGVhZGVyDQoJCQkJCSRkaXJbJ2ZpbGVfbmFtZSdd ICAgICAgICAgICA9IGZyZWFkKCRmaCwgJGZpbGVOYW1lTGVuZ3RoWzFdKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGZpbGVuYW1lDQoJCQkJCSRkaXJbJ2V4dHJhX2ZpZWxk J10gICAgICAgICA9ICRleHRyYUZpZWxkTGVuZ3RoWzFdID9mcmVhZCgkZmgsICRleHRyYUZp ZWxkTGVuZ3RoWzFdKSA6Jyc7IC8vIGV4dHJhIGZpZWxkDQoJCQkJCSRkaXJbJ2ZpbGVfY29t bWVudCddICAgICAgICA9ICRmaWxlQ29tbWVudExlbmd0aFsxXT9mcmVhZCgkZmgsICRmaWxl Q29tbWVudExlbmd0aFsxXSk6Jyc7IC8vIGZpbGUgY29tbWVudA0KDQoJCQkJCS8vIENvbnZl cnQgdGhlIGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBVTklYIFRpbWVz dGFtcA0KCQkJCQkkQklObGFzdG1vZF9kYXRlID0gc3RyX3BhZChkZWNiaW4oJGRpclsnbGFz dG1vZF9kYXRlJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkkQklObGFz dG1vZF90aW1lID0gc3RyX3BhZChkZWNiaW4oJGRpclsnbGFzdG1vZF90aW1lJ11bMV0pLCAx NiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkkbGFzdG1vZF9kYXRlWSA9IGJpbmRlYyhz dWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDAsIDcpKSsxOTgwOw0KCQkJCQkkbGFzdG1vZF9k YXRlTSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsNCgkJCQkJ JGxhc3Rtb2RfZGF0ZUQgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsIDExLCA1 KSk7DQoJCQkJCSRsYXN0bW9kX3RpbWVIID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF90 aW1lLCAgIDAsIDUpKTsNCgkJCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vic3RyKCRC SU5sYXN0bW9kX3RpbWUsICAgNSwgNikpOw0KCQkJCQkkbGFzdG1vZF90aW1lUyA9IGJpbmRl YyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgIDExLCA1KSk7DQoNCgkJCQkJLy8gU29tZSBw cm90ZWN0aW9uIGFnYWlucyBhdHRhY2tzLi4uDQoJCQkJCWlmKCEkZGlyWydmaWxlX25hbWUn XSA9ICR0aGlzLT5fcHJvdGVjdCgkZGlyWydmaWxlX25hbWUnXSkpDQoJCQkJCQljb250aW51 ZTsNCg0KCQkJCQkkdGhpcy0+Y2VudHJhbERpckxpc3RbJGRpclsnZmlsZV9uYW1lJ11dID0g QXJyYXkoDQoJCQkJCQkndmVyc2lvbl9tYWRlYnknPT4kZGlyWyd2ZXJzaW9uX21hZGVieSdd WzFdLA0KCQkJCQkJJ3ZlcnNpb25fbmVlZGVkJz0+JGRpclsndmVyc2lvbl9uZWVkZWQnXVsx XSwNCgkJCQkJCSdnZW5lcmFsX2JpdF9mbGFnJz0+c3RyX3BhZChkZWNiaW4oJGRpclsnZ2Vu ZXJhbF9iaXRfZmxhZyddWzFdKSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2Nv bXByZXNzaW9uX21ldGhvZCc9PiRkaXJbJ2NvbXByZXNzaW9uX21ldGhvZCddWzFdLA0KCQkJ CQkJJ2xhc3Rtb2RfZGF0ZXRpbWUnICA9Pm1rdGltZSgkbGFzdG1vZF90aW1lSCwgJGxhc3Rt b2RfdGltZU0sICRsYXN0bW9kX3RpbWVTLCAkbGFzdG1vZF9kYXRlTSwgJGxhc3Rtb2RfZGF0 ZUQsICRsYXN0bW9kX2RhdGVZKSwNCgkJCQkJCSdjcmMtMzInICAgICAgICAgICAgPT5zdHJf cGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bM10pKSwgMiwgJzAnLCBTVFJfUEFEX0xF RlQpLg0KCQkJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZGlyWydjcmMtMzInXVsy XSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkJCSAgc3RyX3BhZChkZWNo ZXgob3JkKCRkaXJbJ2NyYy0zMiddWzFdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJ CQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bMF0pKSwgMiwg JzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2NvbXByZXNzZWRfc2l6ZSc9PiRkaXJbJ2Nv bXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCQkJJ3VuY29tcHJlc3NlZF9zaXplJz0+JGRpclsn dW5jb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkJCSdkaXNrX251bWJlcl9zdGFydCc9PiRk aXJbJ2Rpc2tfbnVtYmVyX3N0YXJ0J11bMV0sDQoJCQkJCQknaW50ZXJuYWxfYXR0cmlidXRl cyc9PiRkaXJbJ2ludGVybmFsX2F0dHJpYnV0ZXMnXVsxXSwNCgkJCQkJCSdleHRlcm5hbF9h dHRyaWJ1dGVzMSc9PiRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMxJ11bMV0sDQoJCQkJCQkn ZXh0ZXJuYWxfYXR0cmlidXRlczInPT4kZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMiddWzFd LA0KCQkJCQkJJ3JlbGF0aXZlX29mZnNldCc9PiRkaXJbJ3JlbGF0aXZlX29mZnNldCddWzFd LA0KCQkJCQkJJ2ZpbGVfbmFtZSc9PiRkaXJbJ2ZpbGVfbmFtZSddLA0KCQkJCQkJJ2V4dHJh X2ZpZWxkJz0+JGRpclsnZXh0cmFfZmllbGQnXSwNCgkJCQkJCSdmaWxlX2NvbW1lbnQnPT4k ZGlyWydmaWxlX2NvbW1lbnQnXSwNCgkJCQkJKTsNCgkJCQkJJHNpZ25hdHVyZSA9IGZyZWFk KCRmaCwgNCk7DQoJCQkJfQ0KDQoJCQkJLy8gSWYgbG9hZGVkIGNlbnRyYWxEaXJzLCB0aGVu IHRyeSB0byBpZGVudGlmeSB0aGUgb2Zmc2V0UG9zaXRpb24gb2YgdGhlIGNvbXByZXNzZWQg ZGF0YS4NCgkJCQlpZigkdGhpcy0+Y2VudHJhbERpckxpc3QpIGZvcmVhY2goJHRoaXMtPmNl bnRyYWxEaXJMaXN0IGFzICRmaWxlbmFtZT0+JGRldGFpbHMpew0KCQkJCQkkaSA9ICR0aGlz LT5fZ2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCRmaCwgJGRldGFpbHNbJ3JlbGF0aXZlX29m ZnNldCddKTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2ZpbGVf bmFtZSddICAgICAgICAgID0gJGZpbGVuYW1lOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExp c3RbJGZpbGVuYW1lXVsnY29tcHJlc3Npb25fbWV0aG9kJ10gPSAkZGV0YWlsc1snY29tcHJl c3Npb25fbWV0aG9kJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVd Wyd2ZXJzaW9uX25lZWRlZCddICAgICA9ICRkZXRhaWxzWyd2ZXJzaW9uX25lZWRlZCddOw0K CQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnbGFzdG1vZF9kYXRldGlt ZSddICAgPSAkZGV0YWlsc1snbGFzdG1vZF9kYXRldGltZSddOw0KCQkJCQkkdGhpcy0+Y29t cHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY3JjLTMyJ10gICAgICAgICAgICAgPSAkZGV0YWls c1snY3JjLTMyJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWydj b21wcmVzc2VkX3NpemUnXSAgICA9ICRkZXRhaWxzWydjb21wcmVzc2VkX3NpemUnXTsNCgkJ CQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ3VuY29tcHJlc3NlZF9zaXpl J10gID0gJGRldGFpbHNbJ3VuY29tcHJlc3NlZF9zaXplJ107DQoJCQkJCSR0aGlzLT5jb21w cmVzc2VkTGlzdFskZmlsZW5hbWVdWydsYXN0bW9kX2RhdGV0aW1lJ10gICA9ICRkZXRhaWxz WydsYXN0bW9kX2RhdGV0aW1lJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmls ZW5hbWVdWydleHRyYV9maWVsZCddICAgICAgICA9ICRpWydleHRyYV9maWVsZCddOw0KCQkJ CQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY29udGVudHMtc3RhcnRPZmZz ZXQnXT0kaVsnY29udGVudHMtc3RhcnRPZmZzZXQnXTsNCgkJCQkJaWYoc3RydG9sb3dlcigk c3RvcE9uRmlsZSkgPT0gc3RydG9sb3dlcigkZmlsZW5hbWUpKQ0KCQkJCQkJYnJlYWs7DQoJ CQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9 DQoJRnVuY3Rpb24gX2xvYWRGaWxlTGlzdEJ5U2lnbmF0dXJlcygmJGZoLCAkc3RvcE9uRmls ZT1mYWxzZSl7DQoJCWZzZWVrKCRmaCwgMCk7DQoJCQ0KCQkkcmV0dXJuID0gZmFsc2U7DQoJ CWZvcig7Oyl7DQoJCQkkZGV0YWlscyA9ICR0aGlzLT5fZ2V0RmlsZUhlYWRlckluZm9ybWF0 aW9uKCRmaCk7DQoJCQlpZighJGRldGFpbHMpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAi SW52YWxpZCBzaWduYXR1cmUuIFRyeWluZyB0byB2ZXJpZnkgaWYgaXMgb2xkIHN0eWxlIERh dGEgRGVzY3JpcHRvci4uLiIpOw0KCQkJCWZzZWVrKCRmaCwgMTIgLSA0LCBTRUVLX0NVUik7 IC8vIDEyOiBEYXRhIGRlc2NyaXB0b3IgLSA0OiBTaWduYXR1cmUgKHRoYXQgd2lsbCBiZSBy ZWFkIGFnYWluKQ0KCQkJCSRkZXRhaWxzID0gJHRoaXMtPl9nZXRGaWxlSGVhZGVySW5mb3Jt YXRpb24oJGZoKTsNCgkJCX0NCgkJCWlmKCEkZGV0YWlscyl7DQoJCQkJJHRoaXMtPmRlYnVn TXNnKDEsICJTdGlsbCBpbnZhbGlkIHNpZ25hdHVyZS4gUHJvYmFibHkgcmVhY2hlZCB0aGUg ZW5kIG9mIHRoZSBmaWxlLiIpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJJGZpbGVuYW1lID0g JGRldGFpbHNbJ2ZpbGVfbmFtZSddOw0KCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxl bmFtZV0gPSAkZGV0YWlsczsNCgkJCSRyZXR1cm4gPSB0cnVlOw0KCQkJaWYoc3RydG9sb3dl cigkc3RvcE9uRmlsZSkgPT0gc3RydG9sb3dlcigkZmlsZW5hbWUpKQ0KCQkJCWJyZWFrOw0K CQl9DQoJCQ0KCQlyZXR1cm4gJHJldHVybjsNCgl9DQoJRnVuY3Rpb24gX2dldEZpbGVIZWFk ZXJJbmZvcm1hdGlvbigmJGZoLCAkc3RhcnRPZmZzZXQ9ZmFsc2Upew0KCQlpZigkc3RhcnRP ZmZzZXQgIT09IGZhbHNlKQ0KCQkJZnNlZWsoJGZoLCAkc3RhcnRPZmZzZXQpOw0KCQkNCgkJ JHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCWlmKCRzaWduYXR1cmUgPT0gJHRoaXMt PnppcFNpZ25hdHVyZSl7DQoJCQkjICR0aGlzLT5kZWJ1Z01zZygxLCAiWmlwIFNpZ25hdHVy ZSEiKTsNCgkJCQ0KCQkJLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSB6aXBwZWQgZmls ZQ0KCQkJJGZpbGVbJ3ZlcnNpb25fbmVlZGVkJ10gICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQo JGZoLCAyKSk7IC8vIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJhY3QNCgkJCSRmaWxlWydnZW5l cmFsX2JpdF9mbGFnJ10gICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBnZW5l cmFsIHB1cnBvc2UgYml0IGZsYWcNCgkJCSRmaWxlWydjb21wcmVzc2lvbl9tZXRob2QnXSA9 IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBjb21wcmVzc2lvbiBtZXRob2QNCgkJ CSRmaWxlWydsYXN0bW9kX3RpbWUnXSAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwg MikpOyAvLyBsYXN0IG1vZCBmaWxlIHRpbWUNCgkJCSRmaWxlWydsYXN0bW9kX2RhdGUnXSAg ICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBsYXN0IG1vZCBmaWxlIGRh dGUNCgkJCSRmaWxlWydjcmMtMzInXSAgICAgICAgICAgICA9IGZyZWFkKCRmaCwgNCk7ICAg ICAgICAgICAgICAvLyBjcmMtMzINCgkJCSRmaWxlWydjb21wcmVzc2VkX3NpemUnXSAgICA9 IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBjb21wcmVzc2VkIHNpemUNCgkJCSRm aWxlWyd1bmNvbXByZXNzZWRfc2l6ZSddICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkp OyAvLyB1bmNvbXByZXNzZWQgc2l6ZQ0KCQkJJGZpbGVOYW1lTGVuZ3RoICAgICAgICAgICAg ID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGZpbGVuYW1lIGxlbmd0aA0KCQkJ JGV4dHJhRmllbGRMZW5ndGggICAgICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAy KSk7IC8vIGV4dHJhIGZpZWxkIGxlbmd0aA0KCQkJJGZpbGVbJ2ZpbGVfbmFtZSddICAgICAg ICAgID0gZnJlYWQoJGZoLCAkZmlsZU5hbWVMZW5ndGhbMV0pOyAvLyBmaWxlbmFtZQ0KCQkJ JGZpbGVbJ2V4dHJhX2ZpZWxkJ10gICAgICAgID0gJGV4dHJhRmllbGRMZW5ndGhbMV0/ZnJl YWQoJGZoLCAkZXh0cmFGaWVsZExlbmd0aFsxXSk6Jyc7IC8vIGV4dHJhIGZpZWxkDQoJCQkk ZmlsZVsnY29udGVudHMtc3RhcnRPZmZzZXQnXT0gZnRlbGwoJGZoKTsNCgkJCQ0KCQkJLy8g QnlwYXNzIHRoZSB3aG9sZSBjb21wcmVzc2VkIGNvbnRlbnRzLCBhbmQgbG9vayBmb3IgdGhl IG5leHQgZmlsZQ0KCQkJZnNlZWsoJGZoLCAkZmlsZVsnY29tcHJlc3NlZF9zaXplJ11bMV0s IFNFRUtfQ1VSKTsNCgkJCQ0KCQkJLy8gQ29udmVydCB0aGUgZGF0ZSBhbmQgdGltZSwgZnJv bSBNUy1ET1MgZm9ybWF0IHRvIFVOSVggVGltZXN0YW1wDQoJCQkkQklObGFzdG1vZF9kYXRl ID0gc3RyX3BhZChkZWNiaW4oJGZpbGVbJ2xhc3Rtb2RfZGF0ZSddWzFdKSwgMTYsICcwJywg U1RSX1BBRF9MRUZUKTsNCgkJCSRCSU5sYXN0bW9kX3RpbWUgPSBzdHJfcGFkKGRlY2Jpbigk ZmlsZVsnbGFzdG1vZF90aW1lJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJ JGxhc3Rtb2RfZGF0ZVkgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsICAwLCA3 KSkrMTk4MDsNCgkJCSRsYXN0bW9kX2RhdGVNID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1v ZF9kYXRlLCAgNywgNCkpOw0KCQkJJGxhc3Rtb2RfZGF0ZUQgPSBiaW5kZWMoc3Vic3RyKCRC SU5sYXN0bW9kX2RhdGUsIDExLCA1KSk7DQoJCQkkbGFzdG1vZF90aW1lSCA9IGJpbmRlYyhz dWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgICAwLCA1KSk7DQoJCQkkbGFzdG1vZF90aW1lTSA9 IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgICA1LCA2KSk7DQoJCQkkbGFzdG1v ZF90aW1lUyA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgIDExLCA1KSk7DQoJ CQkNCgkJCS8vIFNvbWUgcHJvdGVjdGlvbiBhZ2FpbnMgYXR0YWNrcy4uLg0KCQkJaWYoISRm aWxlWydmaWxlX25hbWUnXSA9ICR0aGlzLT5fcHJvdGVjdCgkZmlsZVsnZmlsZV9uYW1lJ10p KQ0KCQkJCXJldHVybjsNCgkJCQ0KCQkJLy8gTW91bnQgZmlsZSB0YWJsZQ0KCQkJJGkgPSBB cnJheSgNCgkJCQknZmlsZV9uYW1lJyAgICAgICAgID0+JGZpbGVbJ2ZpbGVfbmFtZSddLA0K CQkJCSdjb21wcmVzc2lvbl9tZXRob2QnPT4kZmlsZVsnY29tcHJlc3Npb25fbWV0aG9kJ11b MV0sDQoJCQkJJ3ZlcnNpb25fbmVlZGVkJyAgICA9PiRmaWxlWyd2ZXJzaW9uX25lZWRlZCdd WzFdLA0KCQkJCSdsYXN0bW9kX2RhdGV0aW1lJyAgPT5ta3RpbWUoJGxhc3Rtb2RfdGltZUgs ICRsYXN0bW9kX3RpbWVNLCAkbGFzdG1vZF90aW1lUywgJGxhc3Rtb2RfZGF0ZU0sICRsYXN0 bW9kX2RhdGVELCAkbGFzdG1vZF9kYXRlWSksDQoJCQkJJ2NyYy0zMicgICAgICAgICAgICA9 PnN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11bM10pKSwgMiwgJzAnLCBTVFJf UEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGZpbGVbJ2NyYy0z MiddWzJdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCSAgc3RyX3BhZChk ZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVsxXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCku DQoJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11bMF0pKSwg MiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCSdjb21wcmVzc2VkX3NpemUnICAgPT4kZmls ZVsnY29tcHJlc3NlZF9zaXplJ11bMV0sDQoJCQkJJ3VuY29tcHJlc3NlZF9zaXplJyA9PiRm aWxlWyd1bmNvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCSdleHRyYV9maWVsZCcgICAgICAg PT4kZmlsZVsnZXh0cmFfZmllbGQnXSwNCgkJCQknZ2VuZXJhbF9iaXRfZmxhZycgID0+c3Ry X3BhZChkZWNiaW4oJGZpbGVbJ2dlbmVyYWxfYml0X2ZsYWcnXVsxXSksIDgsICcwJywgU1RS X1BBRF9MRUZUKSwNCgkJCQknY29udGVudHMtc3RhcnRPZmZzZXQnPT4kZmlsZVsnY29udGVu dHMtc3RhcnRPZmZzZXQnXQ0KCQkJKTsNCgkJCXJldHVybiAkaTsNCgkJfQ0KCQlyZXR1cm4g ZmFsc2U7DQoJfQ0KCQ0KCUZ1bmN0aW9uIF9wcm90ZWN0KCRmdWxsUGF0aCl7DQoJCS8vIEtu b3duIGhhY2stYXR0YWNrcyAoZmlsZW5hbWUgbGlrZSk6DQoJCS8vICAgL2hvbWUvdXNyDQoJ CS8vICAgLi4vLi4vaG9tZS91c3INCgkJLy8gICBmb2xkZXIvLi4vLi4vLi4vaG9tZS91c3IN CgkJLy8gICBzYW1wbGUvKHgwKS4uL2hvbWUvdXNyDQoJCQ0KCQkkZnVsbFBhdGggPSBzdHJ0 cigkZnVsbFBhdGgsICI6Kjw+fFwiXHgwXFwiLCAiLi4uLi4uLi8iKTsNCgkJd2hpbGUoJGZ1 bGxQYXRoWzBdID09ICIvIikNCgkJCSRmdWxsUGF0aCA9IHN1YnN0cigkZnVsbFBhdGgsIDEp Ow0KCQkNCgkJaWYoc3Vic3RyKCRmdWxsUGF0aCwgLTEpID09ICIvIil7DQoJCQkkYmFzZSAg ICAgPSAnJzsNCgkJCSRmdWxsUGF0aCA9IHN1YnN0cigkZnVsbFBhdGgsIDAsIC0xKTsNCgkJ fQ0KCQllbHNlew0KCQkJJGJhc2UgICAgID0gYmFzZW5hbWUoJGZ1bGxQYXRoKTsNCgkJCSRm dWxsUGF0aCA9IGRpcm5hbWUoJGZ1bGxQYXRoKTsNCgkJfQ0KCQkNCgkJJHBhcnRzICAgPSBl eHBsb2RlKCIvIiwgJGZ1bGxQYXRoKTsNCgkJJGxhc3RJZHggPSBmYWxzZTsNCgkJZm9yZWFj aCgkcGFydHMgYXMgJGlkeD0+JHBhcnQpew0KCQkJaWYoJHBhcnQgPT0gIi4iKQ0KCQkJCXVu c2V0KCRwYXJ0c1skaWR4XSk7DQoJCQllbHNlaWYoJHBhcnQgPT0gIi4uIil7DQoJCQkJdW5z ZXQoJHBhcnRzWyRpZHhdKTsNCgkJCQlpZigkbGFzdElkeCAhPT0gZmFsc2Upew0KCQkJCQl1 bnNldCgkcGFydHNbJGxhc3RJZHhdKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYoJHBhcnQg PT09ICcnKXsNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0pOw0KCQkJfQ0KCQkJZWxzZXsNCgkJ CQkkbGFzdElkeCA9ICRpZHg7DQoJCQl9DQoJCX0NCgkJDQoJCSRmdWxsUGF0aCA9IHNpemVv ZigkcGFydHMpP2ltcGxvZGUoIi8iLCAkcGFydHMpLiIvIjoiIjsNCgkJcmV0dXJuICRmdWxs UGF0aC4kYmFzZTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9kWmlwew0KCXZhciAkZmlsZW5hbWU7 DQoJdmFyICRvdmVyd3JpdGU7DQoJDQoJdmFyICR6aXBTaWduYXR1cmUgPSAiXHg1MFx4NGJc eDAzXHgwNCI7IC8vIGxvY2FsIGZpbGUgaGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2ln bmF0dXJlID0gIlx4NTBceDRiXHgwMVx4MDIiOyAvLyBjZW50cmFsIGRpciBoZWFkZXIgc2ln bmF0dXJlDQoJdmFyICRkaXJTaWduYXR1cmVFPSAiXHg1MFx4NGJceDA1XHgwNiI7IC8vIGVu ZCBvZiBjZW50cmFsIGRpciBzaWduYXR1cmUNCgl2YXIgJGZpbGVzX2NvdW50ICA9IDA7DQoJ dmFyICRmaDsNCgkNCglGdW5jdGlvbiBzbWRfZFppcCgkZmlsZW5hbWUsICRvdmVyd3JpdGU9 dHJ1ZSl7DQoJCSR0aGlzLT5maWxlbmFtZSAgPSAkZmlsZW5hbWU7DQoJCSR0aGlzLT5vdmVy d3JpdGUgPSAkb3ZlcndyaXRlOw0KCX0NCglGdW5jdGlvbiBhZGREaXIoJGRpcm5hbWUsICRm aWxlQ29tbWVudHM9Jycpew0KCQlpZihzdWJzdHIoJGRpcm5hbWUsIC0xKSAhPSAnLycpDQoJ CQkkZGlybmFtZSAuPSAnLyc7DQoJCSR0aGlzLT5hZGRGaWxlKGZhbHNlLCAkZGlybmFtZSwg JGZpbGVDb21tZW50cyk7DQoJfQ0KCUZ1bmN0aW9uIGFkZEZpbGUoJGZpbGVuYW1lLCAkY2Zp bGVuYW1lLCAkZmlsZUNvbW1lbnRzPScnLCAkZGF0YT1mYWxzZSl7DQoJCWlmKCEoJGZoID0g JiR0aGlzLT5maCkpDQoJCQkkZmggPSBmb3BlbigkdGhpcy0+ZmlsZW5hbWUsICR0aGlzLT5v dmVyd3JpdGU/J3diJzonYStiJyk7DQoJCQ0KCQkvLyAkZmlsZW5hbWUgY2FuIGJlIGEgbG9j YWwgZmlsZSBPUiB0aGUgZGF0YSB3aWNoIHdpbGwgYmUgY29tcHJlc3NlZA0KCQlpZihzdWJz dHIoJGNmaWxlbmFtZSwgLTEpPT0nLycpew0KCQkJJGRldGFpbHNbJ3VuY3NpemUnXSA9IDA7 DQoJCQkkZGF0YSA9ICcnOw0KCQl9DQoJCWVsc2VpZihmaWxlX2V4aXN0cygkZmlsZW5hbWUp KXsNCgkJCSRkZXRhaWxzWyd1bmNzaXplJ10gPSBmaWxlc2l6ZSgkZmlsZW5hbWUpOw0KCQkJ JGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUpOw0KCQl9DQoJCWVsc2VpZigk ZmlsZW5hbWUpew0KCQkJZWNobyAiPGI+Q2Fubm90IGFkZCAkZmlsZW5hbWUuIEZpbGUgbm90 IGZvdW5kPC9iPjxicj4iOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2V7DQoJCQkk ZGV0YWlsc1sndW5jc2l6ZSddID0gc3RybGVuKCRmaWxlbmFtZSk7DQoJCQkvLyBEQVRBIGlz IGdpdmVuLi4gdXNlIGl0ISA6fA0KCQl9DQoJCQ0KCQkvLyBpZiBkYXRhIHRvIGNvbXByZXNz IGlzIHRvbyBzbWFsbCwganVzdCBzdG9yZSBpdA0KCQlpZigkZGV0YWlsc1sndW5jc2l6ZSdd IDwgMjU2KXsNCgkJCSRkZXRhaWxzWydjb21zaXplJ10gPSAkZGV0YWlsc1sndW5jc2l6ZSdd Ow0KCQkJJGRldGFpbHNbJ3ZuZWVkZWQnXSA9IDEwOw0KCQkJJGRldGFpbHNbJ2NtZXRob2Qn XSA9IDA7DQoJCQkkemRhdGEgPSAmJGRhdGE7DQoJCX0NCgkJZWxzZXsgLy8gb3RoZXJ3aXNl LCBjb21wcmVzcyBpdA0KCQkJJHpkYXRhID0gZ3pjb21wcmVzcygkZGF0YSk7DQoJCQkkemRh dGEgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7 IC8vIGZpeCBjcmMgYnVnICh0aGFua3MgdG8gRXJpYyBNdWVsbGVyKQ0KCQkJJGRldGFpbHNb J2NvbXNpemUnXSA9IHN0cmxlbigkemRhdGEpOw0KCQkJJGRldGFpbHNbJ3ZuZWVkZWQnXSA9 IDEwOw0KCQkJJGRldGFpbHNbJ2NtZXRob2QnXSA9IDg7DQoJCX0NCgkJDQoJCSRkZXRhaWxz WydiaXRmbGFnJ10gPSAwOw0KCQkkZGV0YWlsc1snY3JjXzMyJ10gID0gY3JjMzIoJGRhdGEp Ow0KCQkNCgkJLy8gQ29udmVydCBkYXRlIGFuZCB0aW1lIHRvIERPUyBGb3JtYXQsIGFuZCBz ZXQgdGhlbg0KCQkkbGFzdG1vZF90aW1lUyAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdzJyk+ PTMyP2RhdGUoJ3MnKS0zMjpkYXRlKCdzJykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJ CSRsYXN0bW9kX3RpbWVNICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ2knKSksIDYsICcwJywg U1RSX1BBRF9MRUZUKTsNCgkJJGxhc3Rtb2RfdGltZUggID0gc3RyX3BhZChkZWNiaW4oZGF0 ZSgnSCcpKSwgNSwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF9kYXRlRCAgPSBz dHJfcGFkKGRlY2JpbihkYXRlKCdkJykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRs YXN0bW9kX2RhdGVNICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ20nKSksIDQsICcwJywgU1RS X1BBRF9MRUZUKTsNCgkJJGxhc3Rtb2RfZGF0ZVkgID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgn WScpLTE5ODApLCA3LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQ0KCQkjIGVjaG8gIk1vZFRp bWU6ICRsYXN0bW9kX3RpbWVTLSRsYXN0bW9kX3RpbWVNLSRsYXN0bW9kX3RpbWVIICgiLmRh dGUoInMgSCBIIikuIilcbiI7DQoJCSMgZWNobyAiTW9kRGF0ZTogJGxhc3Rtb2RfZGF0ZUQt JGxhc3Rtb2RfZGF0ZU0tJGxhc3Rtb2RfZGF0ZVkgKCIuZGF0ZSgiZCBtIFkiKS4iKVxuIjsN CgkJJGRldGFpbHNbJ21vZHRpbWUnXSA9IGJpbmRlYygiJGxhc3Rtb2RfdGltZUgkbGFzdG1v ZF90aW1lTSRsYXN0bW9kX3RpbWVTIik7DQoJCSRkZXRhaWxzWydtb2RkYXRlJ10gPSBiaW5k ZWMoIiRsYXN0bW9kX2RhdGVZJGxhc3Rtb2RfZGF0ZU0kbGFzdG1vZF9kYXRlRCIpOw0KCQkN CgkJJGRldGFpbHNbJ29mZnNldCddID0gZnRlbGwoJGZoKTsNCgkJZndyaXRlKCRmaCwgJHRo aXMtPnppcFNpZ25hdHVyZSk7DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1sn dm5lZWRlZCddKSk7IC8vIHZlcnNpb25fbmVlZGVkDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3Mn LCAkZGV0YWlsc1snYml0ZmxhZyddKSk7IC8vIGdlbmVyYWxfYml0X2ZsYWcNCgkJZndyaXRl KCRmaCwgcGFjaygncycsICRkZXRhaWxzWydjbWV0aG9kJ10pKTsgLy8gY29tcHJlc3Npb25f bWV0aG9kDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1snbW9kdGltZSddKSk7 IC8vIGxhc3Rtb2RfdGltZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ21v ZGRhdGUnXSkpOyAvLyBsYXN0bW9kX2RhdGUNCgkJZndyaXRlKCRmaCwgcGFjaygnVicsICRk ZXRhaWxzWydjcmNfMzInXSkpOyAgLy8gY3JjLTMyDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ0kn LCAkZGV0YWlsc1snY29tc2l6ZSddKSk7IC8vIGNvbXByZXNzZWRfc2l6ZQ0KCQlmd3JpdGUo JGZoLCBwYWNrKCdJJywgJGRldGFpbHNbJ3VuY3NpemUnXSkpOyAvLyB1bmNvbXByZXNzZWRf c2l6ZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgc3RybGVuKCRjZmlsZW5hbWUpKSk7ICAg Ly8gZmlsZV9uYW1lX2xlbmd0aA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgMCkpOyAgLy8g ZXh0cmFfZmllbGRfbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsICRjZmlsZW5hbWUpOyAgICAvLyBm aWxlX25hbWUNCgkJLy8gaWdub3JpbmcgZXh0cmFfZmllbGQNCgkJZndyaXRlKCRmaCwgJHpk YXRhKTsNCgkJDQoJCS8vIEFwcGVuZCBpdCB0byBjZW50cmFsIGRpcg0KCQkkZGV0YWlsc1sn ZXh0ZXJuYWxfYXR0cmlidXRlcyddICA9IChzdWJzdHIoJGNmaWxlbmFtZSwgLTEpPT0nLycm JiEkemRhdGEpPzE2OjMyOyAvLyBEaXJlY3Rvcnkgb3IgZmlsZSBuYW1lDQoJCSRkZXRhaWxz Wydjb21tZW50cyddICAgICAgICAgICAgID0gJGZpbGVDb21tZW50czsNCgkJJHRoaXMtPmFw cGVuZENlbnRyYWxEaXIoJGNmaWxlbmFtZSwgJGRldGFpbHMpOw0KCQkkdGhpcy0+ZmlsZXNf Y291bnQrKzsNCgl9DQoJRnVuY3Rpb24gc2V0RXh0cmEoJGZpbGVuYW1lLCAkcHJvcGVydHks ICR2YWx1ZSl7DQoJCSR0aGlzLT5jZW50cmFsZGlyc1skZmlsZW5hbWVdWyRwcm9wZXJ0eV0g PSAkdmFsdWU7DQoJfQ0KCUZ1bmN0aW9uIHNhdmUoJHppcENvbW1lbnRzPScnKXsNCgkJaWYo ISgkZmggPSAmJHRoaXMtPmZoKSkNCgkJCSRmaCA9IGZvcGVuKCR0aGlzLT5maWxlbmFtZSwg JHRoaXMtPm92ZXJ3cml0ZT8ndyc6J2ErJyk7DQoJCQ0KCQkkY2RyZWMgPSAiIjsNCgkJZm9y ZWFjaCgkdGhpcy0+Y2VudHJhbGRpcnMgYXMgJGZpbGVuYW1lPT4kY2Qpew0KCQkJJGNkcmVj IC49ICR0aGlzLT5kaXJTaWduYXR1cmU7DQoJCQkkY2RyZWMgLj0gIlx4MFx4MCI7ICAgICAg ICAgICAgICAgICAgLy8gdmVyc2lvbiBtYWRlIGJ5DQoJCQkkY2RyZWMgLj0gcGFjaygndics ICRjZFsndm5lZWRlZCddKTsgLy8gdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdA0KCQkJJGNk cmVjIC49ICJceDBceDAiOyAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYWwgYml0IGZsYWcN CgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNkWydjbWV0aG9kJ10pOyAvLyBjb21wcmVzc2lv biBtZXRob2QNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNkWydtb2R0aW1lJ10pOyAvLyBs YXN0bW9kIHRpbWUNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNkWydtb2RkYXRlJ10pOyAv LyBsYXN0bW9kIGRhdGUNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWydjcmNfMzInXSk7 ICAvLyBjcmMzMg0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ2NvbXNpemUnXSk7IC8v IGNvbXByZXNzZWQgZmlsZXNpemUNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWyd1bmNz aXplJ10pOyAvLyB1bmNvbXByZXNzZWQgZmlsZXNpemUNCgkJCSRjZHJlYyAuPSBwYWNrKCd2 Jywgc3RybGVuKCRmaWxlbmFtZSkpOyAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkkY2Ry ZWMgLj0gcGFjaygndicsIDApOyAgICAgICAgICAgICAgICAvLyBleHRyYSBmaWVsZCBsZW5n dGgNCgkJCSRjZHJlYyAuPSBwYWNrKCd2Jywgc3RybGVuKCRjZFsnY29tbWVudHMnXSkpOyAv LyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAvLyBk aXNrIG51bWJlciBzdGFydA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAwKTsgLy8gaW50ZXJu YWwgZmlsZSBhdHRyaWJ1dGVzDQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsnZXh0ZXJu YWxfYXR0cmlidXRlcyddKTsgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQoJCQkkY2Ry ZWMgLj0gcGFjaygnVicsICRjZFsnb2Zmc2V0J10pOyAvLyByZWxhdGl2ZSBvZmZzZXQgb2Yg bG9jYWwgaGVhZGVyDQoJCQkkY2RyZWMgLj0gJGZpbGVuYW1lOw0KCQkJJGNkcmVjIC49ICRj ZFsnY29tbWVudHMnXTsNCgkJfQ0KCQkkYmVmb3JlX2NkID0gZnRlbGwoJGZoKTsNCgkJZndy aXRlKCRmaCwgJGNkcmVjKTsNCgkJDQoJCS8vIGVuZCBvZiBjZW50cmFsIGRpcg0KCQlmd3Jp dGUoJGZoLCAkdGhpcy0+ZGlyU2lnbmF0dXJlRSk7DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3Yn LCAwKSk7IC8vIG51bWJlciBvZiB0aGlzIGRpc2sNCgkJZndyaXRlKCRmaCwgcGFjaygndics IDApKTsgLy8gbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50 cmFsIGRpcmVjdG9yeQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2JywgJHRoaXMtPmZpbGVzX2Nv dW50KSk7IC8vIHRvdGFsICMgb2YgZW50cmllcyAib24gdGhpcyBkaXNrIiANCgkJZndyaXRl KCRmaCwgcGFjaygndicsICR0aGlzLT5maWxlc19jb3VudCkpOyAvLyB0b3RhbCAjIG9mIGVu dHJpZXMgb3ZlcmFsbCANCgkJZndyaXRlKCRmaCwgcGFjaygnVicsIHN0cmxlbigkY2RyZWMp KSk7ICAgICAvLyBzaXplIG9mIGNlbnRyYWwgZGlyIA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdW JywgJGJlZm9yZV9jZCkpOyAgICAgICAgIC8vIG9mZnNldCB0byBzdGFydCBvZiBjZW50cmFs IGRpcg0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2Jywgc3RybGVuKCR6aXBDb21tZW50cykpKTsg Ly8gLnppcCBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsICR6aXBDb21tZW50 cyk7DQoJCQ0KCQlmY2xvc2UoJGZoKTsNCgl9DQoJDQoJLy8gUHJpdmF0ZQ0KCUZ1bmN0aW9u IGFwcGVuZENlbnRyYWxEaXIoJGZpbGVuYW1lLCRwcm9wZXJ0aWVzKXsNCgkJJHRoaXMtPmNl bnRyYWxkaXJzWyRmaWxlbmFtZV0gPSAkcHJvcGVydGllczsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNpZmljIHJlcGxhY2VtZW50IHN0 cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KZnVuY3Rpb24gc21kX2F0X2dUeHQoJHdo YXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdhY3Rpb25zJyA9 PiAnQWN0aW9ucycsDQoJCSdhbGxvd2VkX3NraW5zJyA9PiAnQWxsb3dlZCB0aGVtZXM6JywN CgkJJ2FwcGx5X3NraW4nID0+ICdBcHBseSB0aGlzIHRoZW1lJywNCgkJJ2F2YWlsX3RpdGxl JyA9PiAnQXZhaWxhYmxlIHRoZW1lcycsDQoJCSdiYXNlZF9vbicgPT4gJyAoYmFzZWQgb24g e3NraW59KScsDQoJCSdieScgPT4gJyBieSAnLA0KCQknY19iemlwMicgPT4gJ0JaaXAnLA0K CQknY19nemlwJyA9PiAnR1ppcCcsDQoJCSdjX3RhcicgPT4gJ1RhcicsDQoJCSdjX3ppcCcg PT4gJ1ppcCcsDQoJCSdjYXNlX3NvcnQnID0+ICdDYXNlLXNlbnNpdGl2ZSB0aGVtZSBsaXN0 OicsDQoJCSdjbGVhcicgPT4gJ25vbmUnLA0KCQknY2xvbmUnID0+ICdCYXNlJywNCgkJJ2Nv bmZpcm0nID0+ICdHbycsDQoJCSdjb3JlX3RoZW1lJyA9PiAnQ2Fubm90IGRlbGV0ZSB7c2tp bn06IGNvcmUgdGhlbWUnLA0KCQknY29yZV90aGVtZV9maWxlJyA9PiAnQ2Fubm90IGRlbGV0 ZSBmaWxlcyBmcm9tIHtza2lufTogY29yZSB0aGVtZScsDQoJCSdjcnVzaF90eXBlJyA9PiAn RXhwb3J0IGNvbXByZXNzaW9uIHR5cGU6JywNCgkJJ2NydXNoX2Zvcm1hdCcgPT4gJ0Zvcm1h dDonLA0KCQknc3NjJyA9PiAnU3R5bGVwbGF0ZXMnLA0KCQknY3NzJyA9PiAnU3R5bGVzJywN CgkJJ2RlbGV0ZV9jb25maXJtJyA9PiAnUmVhbGx5IGRlbGV0ZSB0aGVtZSB7c2tpbn0/JywN CgkJJ2RlbGV0ZV9mYWlsZWQnID0+ICdEZWxldGUgZmFpbGVkLiBUcnkgcmVtb3ZpbmcgaXQg bWFudWFsbHknLA0KCQknZWRpdF9sYmwnID0+ICdUaGVtZSBlZGl0b3InLA0KCQknZW1wdHlf aW5mbycgPT4gJ1lvdSBzaG91bGQgY2hvb3NlIGEgZmlsZSBmaXJzdCA6LSknLA0KCQknZXhw b3J0JyA9PiAnRXhwb3J0JywNCgkJJ2ZpbGVfbm90X2RlbGV0ZWQnID0+ICdGaWxlIHtuYW1l fSAnLnN0cm9uZygibm90IikuJyBkZWxldGVkJywNCgkJJ2ZpbGVfc2F2ZWQnID0+ICdGaWxl IHtuYW1lfSBzYXZlZCcsDQoJCSdmaW5kX3RoZW1lJyA9PiAnQnJvd3NlIHRoZW1lcycsDQoJ CSdnbG9iYWxfc2tpbicgPT4gJ0RlZmF1bHQgdGhlbWU6JywNCgkJJ2hlbHBfbGluaycgPT4g Jyg8YSBocmVmPSJ7bGlua30iPkhlbHA8L2E+KScsDQoJCSdpbWcnID0+ICdJbWFnZXMnLA0K CQknaW1wb3J0X2ZhaWxlZCcgPT4gJ0luc3RhbGxhdGlvbiBmYWlsZWQgOi0oIENoZWNrIHRo ZSBhcmNoaXZlIHN0cnVjdHVyZScsDQoJCSdpbXBvcnRfc3VjY2VzcycgPT4gJ0luc3RhbGxh dGlvbiBzdWNjZXNzZnVsLiBGaWxlcyBleHRyYWN0ZWQ6IHtudW19JywNCgkJJ2ltcG9ydF9v aycgPT4gJ0luc3RhbGxhdGlvbiBzdWNjZXNzZnVsLicsDQoJCSdpbnN0YWxsX3NraW4nID0+ ICdJbnN0YWxsIHRoZW1lJywNCgkJJ2ludmFsaWRfZmlsZScgPT4gJ1JvZ3VlIGZpbGUgZGV0 ZWN0ZWQ6IHtuYW1lfScsDQoJCSdpc19nbG9iYWwnID0+ICcgW0RFRkFVTFRdJywNCgkJJ2pz JyA9PiAnU2NyaXB0cycsDQoJCSdsYXlvdXQnID0+ICdMYXlvdXQgbWV0aG9kOicsDQoJCSds YXlvdXRfbGlzdCcgPT4gJ0xpc3QnLA0KCQknbGF5b3V0X2dyaWQnID0+ICdHcmlkJywNCgkJ J2xpc3RfdGl0bGUnID0+ICdJbnN0YWxsZWQgdGhlbWVzJywNCgkJJ21hbmFnZV9sYmwnID0+ ICdUaGVtZSBtYW5hZ2VyJywNCgkJJ21rZGlyX2ZhaWxlZCcgPT4gJ0Nhbm5vdCBjcmVhdGUg ZGlyZWN0b3J5IGZvciBmaWxlIHtuYW1lfS4gVHJ5IG1hbnVhbGx5IGNyZWF0aW5nIGl0Lics DQoJCSduYW1lX2VtcHR5JyA9PiAnWW91IHNob3VsZCBnaXZlIHlvdXIgdGhlbWUgYSBuYW1l IDotKScsDQoJCSduZXcnID0+ICdDcmVhdGUgbmV3IHRoZW1lJywNCgkJJ25ld19maWxlJyA9 PiAnTmV3IGZpbGUnLA0KCQknbmV3X2Nsb25lc2tpbicgPT4gJ05hbWUgb2YgY29weTonLA0K CQknbmV3X3NraW4nID0+ICdUaGVtZSBuYW1lOicsDQoJCSdvdGhlcl9maWxlcycgPT4gJ090 aGVycycsDQoJCSdwaHAnID0+ICdDb2RlJywNCgkJJ3Blcl9ncm91cCcgPT4gJ09uZSB0aGVt ZSBwZXIgcHJpdmlsZWdlIGxldmVsJywNCgkJJ3Blcl9zaXRlJyA9PiAnT25lIHRoZW1lIGZv ciBldmVyeW9uZScsDQoJCSdwZXJfdXNlcicgPT4gJ09uZSB0aGVtZSBwZXIgdXNlcicsDQoJ CSdwcmVmc19kZWxldGVkJyA9PiAnUHJlZmVyZW5jZXMgZGVsZXRlZCcsDQoJCSdwcmVmc19p bnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxsZWQnLA0KCQkncHJlZnNfbm90X2lu c3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQuJywNCgkJJ3ByZWZzX3Nv bWUnID0+ICdOb3QgYWxsIHByZWZlcmVuY2VzIGF2YWlsYWJsZS4nLA0KCQkncHJlZnNfc29t ZV9leHBsYWluJyA9PiAnSXQgaXMgZWl0aGVyIGJlY2F1c2UgdGhpcyBpcyBhIGRpZmZlcmVu dCB2ZXJzaW9uIG9mIHRoZScuYnIuJ3BsdWdpbiB0byBvbmUgeW91IGhhZCBiZWZvcmUgb3Ig dGhlIHByZWZlcmVuY2VzJy5ici4naGF2ZSBiZWNvbWUgY29ycnVwdCBzb21laG93LicsDQoJ CSdwcmVmc19zb21lX29wdGlvbnMnID0+ICdDaG9vc2UgJy5nVHh0KCdkZWxldGUnKS4nIHRv IHJlbW92ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2luc3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2Fu eSBuZXcgb25lcywgbGVhdmluZyBhbGwgZXhpc3RpbmcgcHJlZmVyZW5jZXMgdW50b3VjaGVk LicsDQoJCSdwcmVmc190aXRsZScgPT4gJ0FkbWluIHRoZW1lIHByZWZlcmVuY2VzJywNCgkJ J3JlbmFtZV9mYWlsZWQnID0+ICdSZW5hbWUgZmFpbGVkJywNCgkJJ3JlbmFtZWQnID0+ICdS ZW5hbWVkIHRvIHtuYW1lfScsDQoJCSdzZXQnID0+ICdTZXQnLA0KCQknc2V0dXAnID0+ICdQ cmVmZXJlbmNlcycsDQoJCSdza2luX2dibCcgPT4gJ1RoZW1lJywNCgkJJ3NraW5fY2xvbmVk JyA9PiAnVGhlbWUgZXh0ZW5kZWQgYXMge25hbWV9JywNCgkJJ3NraW5fY3JlYXRlZCcgPT4g J1RoZW1lIHtuYW1lfSBjcmVhdGVkJywNCgkJJ3NraW5fZGVsZXRlZCcgPT4gJ1RoZW1lIHtu YW1lfSBkZWxldGVkJywNCgkJJ3NraW5fZXhpc3RzJyA9PiAnVGhlbWUge25hbWV9IGFscmVh ZHkgZXhpc3RzJywNCgkJJ3NraW5fZmlsZXMnID0+ICdUaGVtZSBmaWxlcycsDQoJCSdza2lu X2dyb3VwcycgPT4gJ0dyb3VwIHRoZW1lczonLA0KCQknc2tpbl9pbWFnZXMnID0+ICdUaGVt ZSBpbWFnZXMnLA0KCQknc2tpbl9saXN0JyA9PiAnVGhlbWUgbGlzdCcsDQoJCSdza2luX2dy aWQnID0+ICdUaGVtZSBncmlkJywNCgkJJ3NraW5fbm90X2NyZWF0ZWQnID0+ICdUaGVtZSB7 bmFtZX0gY291bGQgbm90IGJlIGNyZWF0ZWQuIFRyeSBtYW51YWxseSBtYWtpbmcgdGhlIGRp cmVjdG9yeScsDQoJCSdza2luX25vdF9mb3VuZCcgPT4gJ1RoZSB0aGVtZSB7bmFtZX0gY291 bGQgbm90IGJlIGZvdW5kJywNCgkJJ3NraW5fc3dpdGNoZWQnID0+ICdUaGVtZSBzd2l0Y2hl ZCB0byB7c2tpbn0nLA0KCQknc2tpbl9zeXN0ZW0nID0+ICdUaGVtZSBzeXN0ZW06JywNCgkJ J3NraW5uZXInID0+ICdUaGVtZScsDQoJCSdzdXBwb3J0ZWRfaW1wb3J0JyA9PiAnU3VwcG9y dGVkIGltcG9ydCB0eXBlczoge3R5cGVzfScsDQoJCSd0YWJfbmFtZScgPT4gJ0FkbWluIHRo ZW1lcycsDQoJCSd0aHVtYnNpemUnID0+ICdUaHVtYiBkaW1lbnNpb25zOicsDQoJCSd0aW1l cycgPT4gJyB4ICcsDQoJCSd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUnID0+ICd7Y3J1 c2h9IGlzIG5vdCBhIHN1cHBvcnRlZCBjb21wcmVzc2lvbiBmb3JtYXQgaW4gdGhpcyBpbnN0 YWxsYXRpb24nLA0KCQkndW5zdXBwb3J0ZWRfZmlsZXR5cGUnID0+ICdGaWxlIGlzIG5vdCBv ZiBhIHN1cHBvcnRlZCB0eXBlJywNCgkJJ3Vuc3VwcG9ydGVkX2Z1ZGdlJyA9PiAnOiBoaXQg U2F2ZSBhZ2FpbiB0byBzdG9yZSBhbnl3YXknLA0KCQkndXBkYXRlJyA9PiAnVXBkYXRlJywN CgkJJ3VwbG9hZF9mYWlsZWQnID0+ICdJbWFnZSBjb3VsZCBub3QgYmUgdXBsb2FkZWQnLA0K CQkndXBsb2FkX2ltYWdlJyA9PiAnVXBsb2FkIGltYWdlJywNCgkJJ3VwbG9hZF9zdWNjZXNz JyA9PiAnSW1hZ2UgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5JywNCgkJJ3ZlcnNpb24nID0+ICd2 JywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoi dHlwZSI7czoxOiIzIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMyI7 czo0OiJoZWxwIjtzOjI0ODQwOiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxIGlkPSJ0b3Ai PnNtZF9hZG1pbl90aGVtZXM8L2gxPgoKCTxwPkluc3RhbGwsIG1hbmFnZSwgZWRpdCBhbmQg c3dpdGNoIGFkbWluLXNpZGUgdGhlbWVzIHRoZW4gc2hhcmUgdGhlbSB3aXRoIHRoZSBjb21t dW5pdHkuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJ PGxpPkNyZWF0ZSBhbmQgRWRpdCBhZG1pbi1zaWRlIHRoZW1lczwvbGk+CgkJPGxpPkVtcGxv eSBpbWFnZXMsIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+LCBKUywgPHNwYW4gY2xh c3M9ImNhcHMiPkhUTUw8L3NwYW4+L1BIUCAoZm9yIGNoYW5naW5nIG1hc3RoZWFkLCBoZWFk ZXIgJmFtcDsgZm9vdGVyKSBpbiB5b3VyIHRoZW1lPC9saT4KCQk8bGk+VXNlIGNvbnN0YW50 cyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGZpbGVzPC9saT4KCQk8 bGk+QmFzZSB5b3VyIHRoZW1lIG9uIGFuIGV4aXN0aW5nIHRoZW1lIHRvIHR3ZWFrIGl0IHRv IHlvdXIgdGFzdGU8L2xpPgoJCTxsaT5FeHBvcnQgYSB0aGVtZSBwYWNrYWdlIGZvciBkaXN0 cmlidXRpb24gdG8gdGhlIGNvbW11bml0eSBpbiBlaXRoZXIgLnRhciwgLnRneiwgLmJ6MiBv ciAuemlwIGZvcm1hdDwvbGk+CgkJPGxpPkltcG9ydCAvIGluc3RhbGwgb3RoZXIgdGhlbWVz IGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9hZG1pbmlzdHJhdGlv bi10aGVtZXMiPmNvbW11bml0eSByZXBvc2l0b3J5PC9hPjwvbGk+CgkJPGxpPkFkbWluaXN0 cmF0b3IgY2FuIHNldCBhIGRlZmF1bHQgdGhlbWUgZm9yIGFsbCB1c2Vycywgb3IgZW5hYmxl IHBlci11c2VyIC8gcGVyLXJvbGUgdGhlbWVzPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRo b3IiPkF1dGhvcjwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Nv bnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxs YXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBm cm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTA5 Ni9zbWRfYWRtaW5fdGhlbWVzIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJl Zj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUg dGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4g LSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gQSBu ZXcgdGFiIGxhYmVsbGVkIDxlbT5FeHRlbnNpb25zIC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+ IGlzIGNyZWF0ZWQuIDxzdHJvbmc+T25seSBwdWJsaXNoZXJzIHdpbGwgc2VlIHRoaXMgdGFi PC9zdHJvbmc+LjwvcD4KCgk8cD5UaGUgcGx1Z2luIHNob3VsZCBhdXRvbWF0aWNhbGx5IGlu c3RhbGwgdGhlIHByZWZlcmVuY2VzIGZvciB5b3UuIENsaWNrICYjODIxNjtQcmVmZXJlbmNl cyYjODIxNzsgZnJvbSB0aGUgPGVtPkV4dGVuc2lvbnMgLSZndDsgQWRtaW4gdGhlbWVzPC9l bT4gdGFiIG9yIDxlbT5PcHRpb25zPC9lbT4gZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lu cyB0YWIgdG8gYWx0ZXIsIGRlbGV0ZSBvciByZWluc3RhbGwgdGhlbS48L3A+CgoJPHA+Vmlz aXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGlj LnBocD9pZD0zMDk1MiI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJl cG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJ PHA+VG8gdW5pbnN0YWxsLCBzaW1wbHkgZGVsZXRlIHRoZSBwbHVnaW4gZnJvbSB0aGUgQWRt aW4gLSZndDsgUGx1Z2lucyBwYWdlLiBUaGUgcHJlZmVyZW5jZXMgd2lsbCBhdXRvbWF0aWNh bGx5IGJlIHJlbW92ZWQuIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHJlbW92aW5nIHRoZSBwbHVn aW4gZG9lcyA8c3Ryb25nPm5vdCByZW1vdmUgYW55IHRoZW1lcyB5b3UgaGF2ZSBpbnN0YWxs ZWQsIG5vciBkb2VzIGl0IHJlbW92ZSBwZXItdXNlciB0aGVtZSBwcmVmZXJlbmNlczwvc3Ry b25nPi4gUGVyLXVzZXIgcHJlZnMgd2lsbCBzaW1wbHkgYmUgaWdub3JlZCB3aGVuIHRoZSBw bHVnaW4gaXMgZGVsZXRlZC48L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxw Pk9uIHRoZSA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBBZG1pbiB0aGVtZXM8L2VtPiB0YWIgaXMg YSBsaXN0IG9yIGdyaWQgY29udGFpbmluZyBpbnN0YWxsZWQgdGhlbWVzLiBPdXQgb2YgdGhl IGJveCwgdGhlcmUgd2lsbCBiZSB0d28gYXZhaWxhYmxlOiA8ZW0+Y2xhc3NpYzwvZW0+IGFu ZCA8ZW0+cmVtb3JhPC9lbT4uIDxzdHJvbmc+SXQmIzgyMTc7cyBhZHZpc2FibGUgbm90IHRv IGNoYW5nZSB0aGVzZSB0aGVtZXM8L3N0cm9uZz4gc28geW91IGNhbiBhbHdheXMgZ28gYmFj ayB0byB0aGVtIGlmIGV2ZXJ5dGhpbmcgZ29lcyBzaWRld2F5cy4gUGx1cyBpdCYjODIxNztz IGEgdmVyeSB1c2VmdWwgc3RhcnRpbmcgcG9pbnQgZnJvbSB3aGljaCB0byA8YSBocmVmPSIj Y2xvbmUiPmJhc2U8L2E+IGEgPGEgaHJlZj0iI25ldyI+bmV3IHRoZW1lPC9hPi48L3A+CgoJ PHA+SW4gdGhlIGxpc3QgbGF5b3V0LCB0aGUgY29sdW1ucyBhcmU6PC9wPgoKCTx1bD4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRoZW1lPC9zcGFuPiA6IFRoZSBuYW1lIG9mIHRoZSB0 aGVtZSBhbmQgKG9wdGlvbmFsKSB0aHVtYm5haWwgYXNzaWduZWQgdG8gaXQuIENsaWNrIHRv IDxhIGhyZWY9IiNzd2l0Y2giPmFjdGl2YXRlPC9hPiB0aGUgdGhlbWUuIElmIHRoZSB0aGVt ZSBpcyBiYXNlZCBvbiBhbm90aGVyIHVzZXImIzgyMTc7cyB0aGVtZSwgdGhpcyBkZXBlbmRl bmN5IHdpbGwgYmUgc2hvd24gaW4gcGFyZW50aGVzZXMgYWZ0ZXIgdGhlIHRoZW1lIG5hbWU8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QXV0aG9yPC9zcGFuPiA6IFlvdSEgTGlu a2VkIHRvIHlvdXIgd2ViIHNpdGUgaWYgeW91IHN1cHBseSBpdCBpbiB5b3VyIDxhIGhyZWY9 IiNhYm91dCI+TWFuaWZlc3Q8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlZl cnNpb248L3NwYW4+IDogVGhlbWUgdmVyc2lvbiBudW1iZXIgaW4gPGNvZGU+bWFqb3IubWlu b3Iuc3VicmV2PC9jb2RlPiBub3RhdGlvbi4gSWYgYSBuZXdlciB2ZXJzaW9uIG9mIGEgdGhl bWUgaXMgYXZhaWxhYmxlIGZyb20gVGV4dGdhcmRlbiwgdGhlIHZlcnNpb24gbnVtYmVyIHdp bGwgYmUgaHlwZXJsaW5rZWQgdG8gdGhlIHRoZW1lIG9uIFRleHRnYXJkZW4gc28geW91IG1h eSBkb3dubG9hZC9pbnN0YWxsIGl0LiBUaGUgdmVyc2lvbnMgYXJlIGNoZWNrZWQsIGF0IG1v c3QsIG9uY2UgZXZlcnkgMjQgaG91cnMgdG8gYXZvaWQgaGFtbWVyaW5nIHRoZSBzZXJ2ZXI8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RGVzY3JpcHRpb248L3NwYW4+IDogQnJp ZWYgb25lLSBvciB0d28tbGluZXIgZXhwbGFpbmluZyB5b3VyIHRoZW1lLiBJZiB5b3UgaGF2 ZSBvZmZlcmVkIGEgaGVscCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBpbiB5b3Vy IG1hbmlmZXN0LCBpdCB3aWxsIGJlIGxpbmtlZCBoZXJlIGFzIHdlbGw8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+QWN0aW9uczwvc3Bhbj4gOiBBY3Rpb25zIHRvIHBlcmZvcm0g b24gZWFjaCB0aGVtZQoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W05ldyB0aGVt ZV08L3NwYW4+IDogPGEgaHJlZj0iI25ldyI+Q3JlYXRlPC9hPiBhIG5ldyBibGFuaywgZW1w dHkgZGlyZWN0b3J5IHJlYWR5IGZvciB5b3VyIHRoZW1lLiBObyBzcGFjZXMgLyBvZGQgY2hh cmFjdGVycyBhcmUgYWxsb3dlZCBpbiB0aGUgbmFtZSBhbmQgaXQgbXVzdCBub3Qgc3RhcnQg d2l0aCBhIG51bWJlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bRWRpdF08L3Nw YW4+IDogPGEgaHJlZj0iI2VkaXRfdGhlbWUiPkVkaXQ8L2E+IHRoZSB2YXJpb3VzIGRldGFp bHMsIGZpbGVzIGFuZCBjb250ZW50IHdpdGhpbiB0aGUgdGhlbWU8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+W0Jhc2VdPC9zcGFuPiA6IDxhIGhyZWY9IiNjbG9uZSI+RXh0ZW5k PC9hPiBvbmUgb2YgdGhlIGV4aXN0aW5nIHRoZW1lcyB0byBtYWtlIHlvdXIgb3duIGNoYW5n ZXMgdW5kZXIgYSBuZXcgbmFtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bRXhw b3J0XTwvc3Bhbj4gOiA8YSBocmVmPSIjZXhwb3J0Ij5TYXZlPC9hPiB0aGUgdGhlbWUgcGFj a2FnZSB0byB5b3VyIGhhcmQgZHJpdmUgZm9yIGRpc3RyaWJ1dGlvbi9iYWNrdXAgaW4geW91 ciBjaG9zZW4gY29tcHJlc3Npb24gZm9ybWF0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPltEZWxldGVdPC9zcGFuPiA6IENvbXBsZXRlbHkgPGEgaHJlZj0iI2RlbGV0ZSI+cmVt b3ZlPC9hPiB0aGUgdGhlbWUuIE5vdCBhdmFpbGFibGUgdG8gdGhlIGNvcmUgdGhlbWVzLCBm b3Igb2J2aW91cyByZWFzb25zISBBbHNvIG5vdCBhdmFpbGFibGUgaWYgYSB0aGVtZSBoYXMg YmVlbiB1c2VkIGFzIGEgYmFzaXMgZm9yIGFub3RoZXIgdGhlbWUgaW4gdGhlIGN1cnJlbnQg c2l0ZTwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxwPlRoZSByb3cgb2YgdGhlIGN1cnJl bnRseSBzZWxlY3RlZCB0aGVtZSBpcyBzaGFkZWQgYW5kIHRoZSBjdXJyZW50IGRlZmF1bHQg dGhlbWUgdGhhdCBpcyBpbiBlZmZlY3QgaXMgaGlnaGxpZ2h0ZWQuIFRoZSBncmlkIHZpZXcg aGFzIHBhcnRzIG9mIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiwgbGFpZCBvdXQgc2xpZ2h0bHkg ZGlmZmVyZW50bHkuPC9wPgoKCTxoMiBpZD0ic3dpdGNoIj5Td2l0Y2hpbmcgdGhlbWVzPC9o Mj4KCgk8cD5BcyB0aGUgYWRtaW5pc3RyYXRvciwgeW91IGNhbiBwbGF5IEdvZCBvdmVyIGV2 ZXJ5b25lIGVsc2UmIzgyMTc7cyB0aGVtZXMuIFlvdSBhcmUgZnJlZSB0byBpbnN0YWxsIGFz IG1hbnkgYXMgeW91IHdpc2ggYW5kIHN3aXRjaCBiZXR3ZWVuIHRoZW0gd2l0aG91dCBhZmZl Y3RpbmcgYW55IG90aGVyIGxvZ2lucy4gTm9ib2R5IGVsc2Ugd2lsbCBldmVuIGtub3cgeW91 IGhhdmUgaW5zdGFsbGVkIHRoZSBwbHVnaW4uPC9wPgoKCTxwPklmLCBob3dldmVyLCB5b3Ug dmlzaXQgdGhlIDxhIGhyZWY9IiNzZXR1cCI+UHJlZmVyZW5jZXM8L2E+IHBhZ2UgeW91IGNh biBjb25maWd1cmUgdGhlIHRoZW1lcyB0aGF0IG90aGVycyB1c2UuIFRoZXJlIGFyZSB0aHJl ZSBtZWNoYW5pc21zIHRvIGNob29zZSBmcm9tOjwvcD4KCgk8dWw+CgkJPGxpPkZvcmNlIG9u ZSB0aGVtZSBmb3IgYWxsIHVzZXJzIChleGNlcHQgeW91cnNlbGYpPC9saT4KCQk8bGk+Rm9y Y2Ugb25lIHRoZW1lIGZvciBlYWNoIHVzZXIgcHJpdmlsZWdlIGxldmVsIChleGNlcHQgeW91 cnNlbGYpPC9saT4KCQk8bGk+QWxsb3cgYWxsIHVzZXJzIChleGNlcHQgeW91cnNlbGYpIHRv IHBpY2sgdGhlaXIgZmF2b3VyaXRlIHRoZW1lIGZyb20gYSBzaG9ydGxpc3QgeW91IGRlZmlu ZTwvbGk+Cgk8L3VsPgoKCTxwPkF0IGFsbCB0aW1lcywgeW91IGNhbiBjaG9vc2UgYW55IHRo ZW1lIHlvdSBwbGVhc2UgZm9yIHlvdXIgb3duIHVzZS4gVGhpcyBhbGxvd3MgdHJpYWxsaW5n LCB0d2Vha2luZyBhbmQgdGVzdGluZyBvZiB0aGVtZXMgYmVmb3JlIHVubGVhc2hpbmcgdGhl bSBvbiB5b3VyIHVzZXIgYmFzZS48L3A+CgoJPGgyIGlkPSJzZXR1cCI+VGhlbWUgcHJlZmVy ZW5jZXM8L2gyPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNhc2Utc2Vuc2l0 aXZlIHRoZW1lIGxpc3Q8L3NwYW4+IDogV2hlbiBzZXQgdG8gPGNvZGU+WWVzPC9jb2RlPiwg dXBwZXItY2FzZSB0aGVtZSBuYW1lcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBsb3dlciBjYXNl IHRoZW1lIG5hbWVzIGFuZCB3aWxsIGJlIGxpc3RlZCBmaXJzdC4gRm9yIGV4YW1wbGUsIDMg dGhlbWUgY2FsbGVkICYjODIxNjtBbmdlbGljJiM4MjE3OywgJiM4MjE2O2JhcmJhcmljJiM4 MjE3OyBhbmQgJiM4MjE2O0NvaGVzaXZlJiM4MjE3OyB3aWxsIGJlIG9yZGVyZWQ6IDxjb2Rl PkFuZ2VsaWMsIENvaGVzaXZlLCBiYXJiYXJpYzwvY29kZT4uIFNldCB0byA8Y29kZT5Obzwv Y29kZT4gdG8gbWl4IHVwcGVyIGFuZCBsb3dlci1jYXNlIHRoZW1lcyB0b2dldGhlciAob3Jk ZXIgaXMgdGhlbiA8Y29kZT5BbmdlbGljLCBiYXJiYXJpYywgQ29oZXNpdmU8L2NvZGU+ICku IFRoZSAmIzgyMTY7Y2xhc3NpYyYjODIxNzsgdGhlbWUgaXMgPGVtPmFsd2F5czwvZW0+IGxp c3RlZCBmaXJzdC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RXhwb3J0IGNvbXBy ZXNzaW9uIHR5cGU8L3NwYW4+IDogRGVwZW5kaW5nIG9uIHlvdXIgdmVyc2lvbiBvZiA8c3Bh biBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBhbmQgd2hpY2ggbW9kdWxlcyBoYXZlIGJlZW4g Y29tcGlsZWQgaW50byBpdCwgeW91IHdpbGwgc2VlIGEgbGlzdCBvZiBjb21wcmVzc2lvbiBm b3JtYXRzIGhlcmUuIENob29zZSBvbmUgdGhhdCBzdWl0cyB5b3UgYXMgdGhlIGRlZmF1bHQg aW4gd2hpY2ggdG8gZXhwb3J0IHlvdXIgdGhlbWUgcGFja2FnZXMuIFlvdSBtYXkgY2hvb3Nl IGZyb20gPGVtPlRhcjwvZW0+LCA8ZW0+R1ppcDwvZW0+IChhY3R1YWxseSB0YXIrZ3ppcCks IDxlbT5CemlwMjwvZW0+ICh0YXIrYnppcCksIG9yIDxlbT5aaXA8L2VtPiAodGhlIGRlZmF1 bHQpLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MYXlvdXQgbWV0aG9kPC9zcGFu PiA6IENob29zZSBmcm9tIGEgTGlzdCBWaWV3ICh1c2VmdWwgaWYgeW91IHByZWZlciB0byBo aWRlIG9yIHVzZSBzbWFsbCB0aHVtYnMpIG9yIGEgR3JpZCBWaWV3IG9mIGluc3RhbGxlZCB0 aGVtZXMuIFRoaXMgc2V0dGluZyBhcHBsaWVzIHRvIGJvdGggYWRtaW4gYW5kIHVzZXIgdGhl bWUgc2VsZWN0aW9uIHRhYnMuIERlZmF1bHQ6IEdyaWQgVmlldzwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5UaHVtYiBzaXplPC9zcGFuPiA6IFNldCB0aGUgdGh1bWJuYWlsIGRp bWVuc2lvbnMgaW4gdGhlIHRoZW1lIGxpc3QuIFNldCBlaXRoZXIgZGltZW5zaW9uIHRvIDAg dG8gdHVybiBvZmYgdGh1bWJuYWlsIGRpc3BsYXkuIERlZmF1bHQ6IDI2MCAmIzIxNTsgMTUw cHg8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RGVmYXVsdCB0aGVtZTwvc3Bhbj4g OiBTZXQgdGhlIHRoZW1lIGZvciBhbGwgb3RoZXIgdXNlcnMuIElmIHVzaW5nICYjODIxNjtP bmUgdGhlbWUgZm9yIGV2ZXJ5b25lJiM4MjE3OyB0aGUgdGhlbWUgY2hvc2VuIGhlcmUgaXMg Zm9yY2VkIHVwb24gYWxsIHVzZXJzLiBJZiB1c2luZyBhbnkgb2YgdGhlIG90aGVyIG1lY2hh bmlzbXMsIHRoaXMgdGhlbWUgaXMgYSBmYWxsYmFjayBzaG91bGQgc29tZXRoaW5nIGdvIHBl YXItc2hhcGVkLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZSBzeXN0ZW08 L3NwYW4+IDogQXMgZGV0YWlsZWQgaW4gPGEgaHJlZj0iI3N3aXRjaCI+U3dpdGNoaW5nIHRo ZW1lczwvYT4sIHlvdSBtYXkgY2hvb3NlIHRoZSB3YXkgdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IGludGVyZmFjZSBpcyBwcmVzZW50ZWQgdG8gb3RoZXIgdXNlcnM6Cgk8 dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgZm9yIGV2ZXJ5b25lPC9z cGFuPiA6IHVzZXMgdGhlIERlZmF1bHQgdGhlbWUgZm9yIGFsbCB1c2VyczsgdGhleSBoYXZl IG5vIGNob2ljZSBpbiB0aGUgbWF0dGVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pk9uZSB0aGVtZSBwZXIgcHJpdmlsZWdlIGxldmVsPC9zcGFuPiA6IGFsbG93cyB5b3UgdG8g YXNzaWduIG9uZSBvciBtb3JlIHByaXZpbGVnZSBsZXZlbHMgdG8gYSB0aGVtZS4gQ2hvb3Nl IGEgdGhlbWUgZnJvbSB0aGUgbGVmdC1oYW5kIGxpc3QgYW5kIHRoZW4gc2hpZnQvY3RybC1j bGljayB0aGUgcHJpdmlsZWdlIGxldmVscyB0byBhc3NpZ24gdGhlbS4gRmxpY2sgYmV0d2Vl biB0aGVtZXMgaW4gdGhlIGxlZnQgY29sdW1uIHRvIHNlZSB3aGljaCBvbmVzIGFyZSBzZXQg Zm9yIHZhcmlvdXMgdXNlciBsZXZlbHMsIG9yIGhvdmVyIG92ZXIgYSBwcml2aWxlZ2UgbGV2 ZWwgdG8gc2VlIGEgdG9vbHRpcC4gT25seSBvbmUgbGV2ZWwgY2FuIGJlIGFzc2lnbmVkIHRv IGEgdGhlbWUgc28gaWYgeW91IGNsaWNrIGEgbGV2ZWwgdGhhdCBoYXMgYWxyZWFkeSBiZWVu IGFzc2lnbmVkIHRvIGFub3RoZXIgdGhlbWUsIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0 cyBvcmlnaW5hbCBhc3NpZ25tZW50LiBOb3RlIHlvdSBtdXN0IFNhdmUgdGhlIGNoYW5nZXMg Zm9yIHRoZW0gdG8gdGFrZSBlZmZlY3Q8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ T25lIHRoZW1lIHBlciB1c2VyPC9zcGFuPiA6IGRlZmluZSBhIHNob3J0bGlzdCBmcm9tIHRo ZSBhdmFpbGFibGUgaW5zdGFsbGVkIHRoZW1lcyB0byBvZmZlciB0byBhbGwgdXNlcnMuIEEg bmV3IHRhYiB3aWxsIGFwcGVhciB0byBvdGhlciB1c2VycyB1bmRlciA8ZW0+QWRtaW48L2Vt PiB0aGF0IGlzIGVzc2VudGlhbGx5IGEgY3V0LWRvd24gdmVyc2lvbiBvZiB0aGUgPGVtPkFk bWluIHRoZW1lczwvZW0+IHRhYi4gVXNlcnMgY2FuIHN3aXRjaCBiZXR3ZWVuIGFueSBvbmUg b2YgdGhlIHRoZW1lcyB5b3UgaGF2ZSBwZXJtaXR0ZWQuPC9saT4KCTwvdWw+PC9saT4KCTwv dWw+CgoJPHA+UmVtZW1iZXIgdG8gY2xpY2sgU2F2ZSB0byBhcHBseSB0aGUgY2hhbmdlcy4g Q2xpY2tpbmcgYW55IG90aGVyIHRhYiB3aWxsIHVuZG8gYW55IG1vZGlmaWNhdGlvbnMgeW91 IG1heSBoYXZlIG1hZGUuPC9wPgoKCTxoMiBpZD0iYnJvd3NlIj5Ccm93c2UgdGhlbWVzPC9o Mj4KCgk8cD5DbGljayB0aGlzIGJ1dHRvbiB0byBiZSB0YWtlbiB0byB0aGUgY2VudHJhbCBh ZG1pbiB0aGVtZSByZXBvc2l0b3J5IHdoZXJlIHlvdSBtYXkgYnJvd3NlIHRoZW1lcyBhbmQg ZG93bmxvYWQgdGhlbSByZWFkeSBmb3IgaW5zdGFsbGF0aW9uLjwvcD4KCgk8aDIgaWQ9Imlt cG9ydCI+SW5zdGFsbCBhIHRoZW1lPC9oMj4KCgk8cD5Mb2NhdGUgYSB0aGVtZSBwYWNrYWdl IG9uIHlvdXIgaGFyZCBkcml2ZSBvciBwYXN0ZSBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IHRvIGEgcGFja2FnZSBpbiB0aGUgYm94IGF0IHRoZSB0b3Agb2YgdGhlIHBhZ2Uu IEhpdCA8c3Ryb25nPlVwbG9hZDwvc3Ryb25nPiBhbmQgaXQgd2lsbCBiZSBpbnN0YWxsZWQu IElmIGl0IGFscmVhZHkgZXhpc3RzIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uIE5vdGUgdGhh dCB5b3UgbWF5IHJlY2VpdmUgYSB3YXJuaW5nIGlmIHRoZSB0aGVtZSBpcyBwYWNrYWdlZCB1 c2luZyBhIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0aGF0IGlzIG5vdCBidWlsdCBpbnRvIHlv dXIgdmVyc2lvbiBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPi4gQSBsaXN0IG9m IHN1cHBvcnRlZCBjb21wcmVzc2lvbiB0eXBlcyBpcyBnaXZlbiBiZWxvdyB0aGUgdXBsb2Fk IGJveC48L3A+CgoJPGgyIGlkPSJuZXciPkNyZWF0ZSBhIG5ldyAoZW1wdHkpIHRoZW1lPC9o Mj4KCgk8cD5DbGljayA8c3Ryb25nPkNyZWF0ZSBuZXcgdGhlbWU8L3N0cm9uZz4gYW5kIGEg Ym94IHdpbGwgc2xpZGUgZG93biBhbGxvd2luZyB5b3UgdG8gZ2l2ZSB5b3VyIHRoZW1lIGEg bmFtZS4gIE5vdGUgdGhhdCB0aGUgZWRpdCBib3ggYXV0b21hdGljYWxseSB0YWtlcyBmb2N1 cywgc28geW91IGNhbiB0eXBlIHN0cmFpZ2h0IGF3YXkuPC9wPgoKCTxwPk5vIHNwYWNlcyBv ciBvZGQgY2hhcmFjdGVycyBhcmUgcGVybWl0dGVkLCBiZWNhdXNlIHRoZSBuYW1lIHlvdSBl bnRlciBpcyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSBjcmVhdGVk IGluIHRoZSA8ZW0+dGhlbWU8L2VtPiBmb2xkZXIgYW5kIHRoZW0gbmFtZSBvZiB5b3VyIHRo ZW1lJiM4MjE3O3MgY2xhc3MuIElmIHlvdSBkbyBtYW5hZ2UgdG8gdXNlIG9kZCBjaGFyYWN0 ZXJzLCB0aGUgbmFtZSB3aWxsIGJlICYjODIyMDtkdW1iZWQgZG93biYjODIyMTsgZm9yIHlv dS4gT25jZSB0aGUgbmFtZSBpcyBzZXQsIHRoYXQgaXMgaXQ7IHlvdSBjYW5ub3QgY2hhbmdl IGl0IGZyb20gd2l0aGluIHRoZSBpbnRlcmZhY2UuIFRoZSBvbmx5IHdheSB0byByZW5hbWUg aXQgaXMgdmlhIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bhbj4gY2xpZW50IGFu ZCBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBpZiB5b3Uga25v dyB3aGF0IHlvdSBhcmUgZG9pbmcuPC9wPgoKCTxwPkluIG9yZGVyIHRvIGF2b2lkIG5hbWUg Y2xhc2hlcyB3aXRoIG90aGVyIHBlb3BsZSYjODIxNztzIHRoZW1lcywgaXQgaXMgcmVjb21t ZW5kZWQgdGhhdCBhbGwgdGhlbWVzIHlvdSBkZXNpZ24gYmVnaW4gd2l0aCBhIHVuaXF1ZSAz LWxldHRlciBwcmVmaXggb2YgeW91ciBvd24gY2hvb3NpbmcsIHBsdXMgYW4gdW5kZXJzY29y ZSAmIzgyMTI7IGV4YWN0bHkgbGlrZSBwbHVnaW5zLiBUaHVzLCBzbWRfQmx1ZU1lYW5pZSBt aWdodCB3ZWxsIGJlIHRoZSBuYW1lIG9mIGEgdGhlbWUuPC9wPgoKCTxwPldoZW4geW91IGhh dmUgbmFtZWQgeW91ciB0aGVtZSwgY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBjcmVh dGUgYSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgY2FuIHJlc2lkZS48L3A+CgoJPGgyIGlkPSJj bG9uZSI+RXh0ZW5kIGFuIGV4aXN0aW5nIHRoZW1lPC9oMj4KCgk8cD5DbGljayA8c3Ryb25n PkJhc2U8L3N0cm9uZz4gdG8gY3JlYXRlIGEgbmV3IHRoZW1lIGJhc2VkIG9uIGFub3RoZXIu IEEgYm94IHdpbGwgc2xpZGUgZG93biAodGhlIGN1cnNvciBmb2N1c2VzIGF1dG9tYXRpY2Fs bHkgaW4gdGhlIGJveCBmb3IgeW91KSBzbyB5b3UgbWF5IGVudGVyIHRoZSBuYW1lIG9mIHlv dXIgY29weS4gT2JzZXJ2ZSB0aGUgPGEgaHJlZj0iI25ldyI+bmFtaW5nIGNvbnZlbnRpb248 L2E+LCB0aGVuIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gY3JlYXRlIHRoZSBuZXcg dGhlbWUuPC9wPgoKCTxwPjxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+UGxlYXNlIHJlbWVtYmVy LCB5b3VyIHRoZW1lIHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSBjaG9zZW4gdGhlbWUgYW5k IDxzdHJvbmc+Ym90aDwvc3Ryb25nPiBtdXN0IGJlIHByZXNlbnQgb24gYSB1c2VyJiM4MjE3 O3Mgc3lzdGVtIGZvciB0aGUgdGhlbWUgdG8gd29yazwvc3Bhbj4uIEl0IGlzIHdvcnRoIGVu c3VyaW5nIHRoYXQgdXNlcnMgb2YgeW91ciB0aGVtZSBhcmUgbWFkZSBhd2FyZSBvZiB0aGlz IGRlcGVuZGVuY3kgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZnJ1c3RyYXRpb247IHBlcmhhcHMg YWRkIGEgbGluayB0byB0aGUgdGhlbWUmIzgyMTc7cyBiYXNlLCBtZW50aW9uIHRoZSBkZXBl bmRlbmN5IGluIHRoZSBIZWxwIGxpbmsgYW5kL29yIGluIHRoZSB0aGVtZSYjODIxNztzIGFy dGljbGUgb24gVGV4dGdhcmRlbi4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gZGVsZXRlIGFu eSB0aGVtZSBmcm9tIHRoZSBsaXN0IHRoYXQgaGFzIHN1Y2ggYSBkZXBlbmRlbmN5LCBvdGhl cndpc2UgeW91ciBhZG1pbiBzaWRlIHdpbGwgc3RvcCB3b3JraW5nLjwvcD4KCgk8aDIgaWQ9 ImV4cG9ydCI+RXhwb3J0IGEgdGhlbWU8L2gyPgoKCTxwPklmIHlvdSB3aXNoIHRvIGJhY2sg dXAgYSB0aGVtZSBvciBzaGFyZSBpdCB3aXRoIG90aGVycywgY2xpY2sgPHN0cm9uZz5FeHBv cnQ8L3N0cm9uZz4uIEEgYm94IHdpbGwgc2xpZGUgZG93biBvZmZlcmluZyB5b3UgYSBjaG9p Y2Ugb2YgY29tcHJlc3Npb24gZm9ybWF0czsgdGhlIGRlZmF1bHQgaXMgdGhlIGZvcm1hdCB5 b3UgY2hvc2UgZnJvbSB0aGUgPGEgaHJlZj0iI3NldHVwIj5QcmVmZXJlbmNlczwvYT4gcGFn ZS4gQ2xpY2sgPGVtPltHb108L2VtPiB0byBleHBvcnQgdGhlIHRoZW1lIGFuZCBzYXZlIGl0 IHRvIHlvdXIgY29tcHV0ZXIuIEFsbCByZWxhdGVkIGZpbGVzIGluIHRoZSB0aGVtZSB3aWxs IGJlIHBhY2thZ2VkIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgZG93bmxvYWQgZmlsZSBmb3Ig Y29udmVuaWVuY2UuPC9wPgoKCTxoMiBpZD0iZGVsZXRlIj5EZWxldGUgYSB0aGVtZTwvaDI+ CgoJPHA+SGl0IHRoaXMgKGFuZCBjb25maXJtIHlvdSBhcmUgc3VyZSkgdG8gcmVtb3ZlIHRo ZSBlbnRpcmUgdGhlbWUgZm9sZGVyIGFuZCBjb250ZW50cyBmcm9tIHRoZSBmaWxlIHN5c3Rl bS4gPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5UaGlzIGlzIG5vdCB1bmRvYWJsZSwgc28gYmUg Y2FyZWZ1bDwvc3Bhbj4uPC9wPgoKCTxoMiBpZD0iZWRpdF90aGVtZSI+RWRpdCBhIHRoZW1l PC9oMj4KCgk8cD5BIHRoZW1lIGlzIGEgY29sbGVjdGlvbiBvZiBmaWxlcy4gVGhlIGZpbGVz IGFsbCByZXNpZGUgaW4gdGhlaXIgb3duIHNlbGYtY29udGFpbmVkIGRpcmVjdG9yeSB1bmRl ciA8Y29kZT50ZXh0cGF0dGVybi90aGVtZTwvY29kZT4uIFRoZSBuYW1lIG9mIHRoZSBkaXJl Y3RvcnkgaXMgdGhlIG5hbWUgb2YgeW91ciB0aGVtZSwgaGVuY2UgdGhlIHJlYXNvbiBpdCBj YW5ub3QgY29udGFpbiBhbnkgb2JzY3VyZSBjaGFyYWN0ZXJzIHRoYXQgd291bGQgYmUgaW52 YWxpZCBpbiB0aGUgZmlsZXN5c3RlbSBvciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PiB2YXJpYWJsZXMuPC9wPgoKCTxwPldoZW4geW91IGNsaWNrICYjODIxNjtFZGl0JiM4MjE3 OyB5b3Ugd2lsbCBiZSB0YWtlbiB0byBhIHNjcmVlbiB0aGF0IGFsbG93cyB5b3UgdG8gbWFr ZSBjaGFuZ2VzIHRvIHRoZSB0aGVtZS4gVGhlIEVkaXQgc2NyZWVuIGlzIGJyb2tlbiBpbnRv IHRocmVlIHZlcnRpY2FsIHBhcnRzLCBhcyBmb2xsb3dzOjwvcD4KCgk8aDMgaWQ9ImVkaXRf aW1nIj5JbWFnZSBoYW5kbGluZzwvaDM+CgoJPHA+RWFjaCB0aGVtZSBjYW4gY29udGFpbiBh biBvcHRpb25hbCB0aHVtYm5haWwuIFRoaXMgaXMgYW4gaW1hZ2Ugb2YgMjYwJiMyMTU7MTUw cHggaW4gc2l6ZSwgY2FsbGVkIDxjb2RlPnNjcmVlbnNob3QucG5nPC9jb2RlPiAob3IgPGNv ZGU+LmpwZzwvY29kZT4sIDxjb2RlPi5naWY8L2NvZGU+LCBldGMpIGluIHlvdXIgdGhlbWUg ZGlyZWN0b3J5LiBOb3RlIGl0IHdpbGwgYmUgc3F1YXNoZWQgLyBzdHJldGNoZWQgdG8gZml0 IHlvdXIgdGh1bWJuYWlsIGRpbWVuc2lvbnMgc2V0IGluIHRoZSBwbHVnaW4gcHJlZnMuPC9w PgoKCTxwPk90aGVyIGltYWdlcyBmb3IgdXNlIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8 L3NwYW4+IHJ1bGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIGEgdGhlbWUuIEJyb3dzZSBmb3Ig YW4gaW1hZ2UgYW5kIHNlbGVjdCBpdCwgdGhlbiBjbGljayA8c3Ryb25nPlVwbG9hZDwvc3Ry b25nPiB0byBhZGQgaXQgdG8gdGhlIHRoZW1lLiBZb3UgY2FuIGN1cnJlbnRseSBvbmx5IHVw bG9hZCBvbmUgaW1hZ2UgYXQgYSB0aW1lLCB0aG91Z2ggeW91IGNhbiBkZWxldGUgb25lIG9y IG1vcmUgYXQgb25jZSBieSBTaGlmdC9DdHJsIGNsaWNraW5nIHRoZSBvbmVzIHlvdSB3aXNo IHRvIHJlbW92ZSBhbmQgaGl0dGluZyB0aGUgJiM4MjE2O3gmIzgyMTc7IGJ1dHRvbi4gPHNw YW4gY2xhc3M9InJlcXVpcmVkIj5XYXJuaW5nOiBmaWxlcyB3aWxsIGJlIGRlbGV0ZWQgaW1t ZWRpYXRlbHksIHdpdGhvdXQgY29uZmlybWF0aW9uLjwvc3Bhbj48L3A+CgoJPHA+VGhlIGJl c3Qgd2F5IHRvIHJlZmVyIHRvIGltYWdlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ cyBpbiBzdHlsZXNoZWV0cyBpcyB3aXRoIGEgcmVsYXRpdmUgcGF0aDo8L3A+Cgo8cHJlIGNs YXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4ubXlTdHlsZSB7CiAgIGJhY2tncm91 bmQ6IHVybChteS1pbWFnZS5naWYpOwp9CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImVkaXRf Y29udGVudCI+Q29udGVudDwvaDM+CgoJPHA+VGhlIGNlbnRyYWwgcGFuZSBpcyB3aGVyZSB5 b3UgZWRpdCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGVzIGluIHlvdXIgdGhlbWUuIFRoZSBz bWFsbCBlZGl0IGJveCBhdCB0aGUgdG9wIGlzIHRoZSBmaWxlbmFtZSBhbmQgdGhlIGxhcmdl IHRleHQgYXJlYSBpcyBpdHMgY29udGVudC4gQ2xpY2sgPHN0cm9uZz5TYXZlPC9zdHJvbmc+ IHRvIGNvbW1pdCBjaGFuZ2VzLiBZb3UgbWF5IGZyZWVseSByZW5hbWUgYW55IGZpbGUgeW91 IGFyZSBlZGl0aW5nLjwvcD4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPkltcG9ydGFudDogaWYg eW91IHNlbGVjdCBhIGZpbGUsIGVkaXQgaXQsIHJlbmFtZSBpdCwgYW5kIGNsaWNrIDxzdHJv bmc+U2F2ZTwvc3Ryb25nPiB5b3Ugd2lsbCBvdmVyd3JpdGUgd2hhdGV2ZXIgd2FzIGluIHRo ZSBwcmV2aW91cyBmaWxlICYjODIxMjsgZXZlbiBpZiB5b3UgZW1wdHkgdGhlIGNvbnRlbnRz IG9mIHRoZSB0ZXh0YXJlYSBpbiBhbiBlZmZvcnQgdG8gbWFrZSBhICYjODIyMDtuZXcmIzgy MjE7IG9uZS4gSWYgeW91IHdpc2ggdG8gY3JlYXRlIGEgbmV3IGZpbGUsIGl0IGlzIHNhZmVy IHRvIGNsaWNrIHRoZSA8c3Ryb25nPk5ldyBmaWxlPC9zdHJvbmc+IGJ1dHRvbiBpbiB0aGUg cmlnaHQgaGFuZCBjb2x1bW4gdG8gZW5zdXJlIHlvdSBhcmUgbm90IGVkaXRpbmcgYW4gZXhp c3RpbmcgZmlsZSBieSBtaXN0YWtlLjwvcD4KCgk8cD5JdCBpcyBhbHNvIHdvcnRoIG5vdGlu ZyB0aGF0IGZpbGUgcGVybWlzc2lvbnMgdmFyeSBmcm9tIGhvc3QgdG8gaG9zdC4gSWYgeW91 IHRyeSBhbmQgc2F2ZSBhIHRoZW1lIGZpbGUgYW5kIHJlY2VpdmUgYSB5dWtreSB3YXJuaW5n IG1lc3NhZ2UgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gd3JpdGUgdGhlIGZpbGUsIHRyeSBp bmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgdGhlbWUgZGlyZWN0b3J5IGFuZCBh bGwgZmlsZXMgYmVuZWF0aCBpdC48L3A+CgoJPHA+VGhlIHRoZW1lIGZpbGVzIGFyZSBkaXN0 cmlidXRlZCBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB3aXRoIDxjb2RlPjY0 NDwvY29kZT4gcGVybWlzc2lvbnMgd2hpY2ggc2hvdWxkIGJlIGZpbmUgZm9yIGEgc3RhbmRh cmQgaG9zdC4gU29tZSBzaGFyZWQgaG9zdGluZyBjb21wYW5pZXMgJiM4MjEyOyBhbmQgdGhl c2UgYXJlIHVzdWFsbHkgdGhlIG9uZXMgdGhhdCB0ZWxsIHlvdSB0byBzZXQgeW91ciA8Y29k ZT5maWxlczwvY29kZT4gYW5kIDxjb2RlPmltYWdlczwvY29kZT4gZGlyZWN0b3JpZXMgdG8g Nzc3IGluIG9yZGVyIHRvIG1ha2UgdGhlbSB3cml0YWJsZSBieSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiAmIzgyMTI7IHJ1biBBcGFjaGUvUEhQIGluIGEgZGlmZmVyZW50IHdh eSB3aGljaCBtaWdodCByZXF1aXJlIGhpZ2hlciBwZXJtaXNzaW9ucyBpbiBvcmRlciB0byB3 cml0ZSB0byB0aGUgdGhlbWUgZGlyZWN0b3J5LiBUaGlzIGlzIHVuZm9ydHVuYXRlbHkgb3V0 c2lkZSB0aGUgc2NvcGUgb2YgdGhlIHBsdWdpbiBzbyB5b3Ugd2lsbCBoYXZlIHRvIGV4cGVy aW1lbnQgaWYgaXQgY2F1c2VzIHlvdSBwcm9ibGVtcy48L3A+CgoJPGgzPkZpbGUgaGFuZGxp bmc8L2gzPgoKCTxwPlRoaXMgY29sdW1uIGJlZ2lucyB3aXRoIGEgc2VsZWN0IGxpc3Qgb2Yg YWxsIGluc3RhbGxlZCB0aGVtZXM7IHRoZSBjdXJyZW50IHRoZW1lIHNlbGVjdGVkLiBDaGFu Z2luZyB0aGUgaXRlbSBoZXJlIHdpbGwgaW1tZWRpYXRlbHkgYWxsb3cgeW91IHRvIGVkaXQg YW5vdGhlciB0aGVtZS4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB5b3UgYXJlIGNvcHlpbmcg YW5kIHBhc3RpbmcgZmlsZXMgZnJvbSBvbmUgdGhlbWUgdG8gYW5vdGhlciBhbmQgc2F2ZXMg eW91IGhhdmluZyB0byBnbyBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0IGZpcnN0LjwvcD4KCgk8 cD5CZW5lYXRoIHRoYXQgYXJlIHR3byBidXR0b25zOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5OZXcgZmlsZTwvc3Bhbj4gOiBDcmVhdGUgYSBuZXcsIGVtcHR5IGZp bGUgaW4geW91ciB0aGVtZSBkaXJlY3RvcnkuIE5vdGhpbmcgaXMgYWN0dWFsbHkgY3JlYXRl ZCB1bnRpbCB5b3UgaGl0IDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiBidXQgdXNpbmcgdGhpcyBi dXR0b24gZW5zdXJlcyB5b3UgYmVnaW4gd2l0aCBhIGNsZWFuIHNsYXRlIGFuZCBkb24mIzgy MTc7dCBhY2NpZGVudGFsbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmaWxlIHlvdSB3ZXJl IGVkaXRpbmc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWUgbGlzdDwvc3Bh bj4gOiBBIHNob3J0Y3V0IGJhY2sgdG8gdGhlIG1haW4gdGhlbWUgbGlzdCAoZXF1aXZhbGVu dCB0byBjbGlja2luZyB0aGUgPGVtPkFkbWluIHRoZW1lczwvZW0+IHRhYik8L2xpPgoJPC91 bD4KCgk8cD5CZWxvdyB0aG9zZSBidXR0b25zIGFyZSB1cCB0byBmb3VyIHNlY3Rpb25zIGNv bnRhaW5pbmcgYWxsIHRoZSAobm9uLWltYWdlKSBmaWxlcyB0aGF0IG1ha2UgdXAgeW91ciB0 aGVtZS4gQ2xpY2sgYSBmaWxlbmFtZSB0byBsb2FkIGl0IGludG8gdGhlIGNlbnRyYWwgdGV4 dCBhcmVhIGZvciBlZGl0aW5nLjwvcD4KCgk8aDQgaWQ9ImVkaXRfY3NzIj5TdHlsZXNoZWV0 czwvaDQ+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5GaWxlcyBjYW4gYmUgYW55IHZhbGlkIGZp bGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4gZW5kIGluIDxjb2Rl Pi5jc3M8L2NvZGU+PC9wPgoKCTxwPlRoZSBtZWF0IGFuZCBwb3RhdG9lcyBvZiB5b3VyIHRo ZW1lLiBBZGQgYXMgbWFueSBzaGVldHMgYXMgeW91IGxpa2UgYW5kIGxvYWQgdGhlbSBmcm9t IHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZShzKS48L3A+CgoJPGg0 IGlkPSJlZGl0X2NzcyI+U3R5bGVwbGF0ZXM8L2g0PgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+ RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9ImNhcHMi Pk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uc3NjPC9jb2RlPjwvcD4KCgk8cD5BIHNwZWNp YWwgdmVyc2lvbiBvZiBhIHN0eWxlc2hlZXQgdGhhdCBhbGxvd3MgeW91IHRvIGRlZmluZSBj b25zdGFudHMgdGhyb3VnaG91dCB5b3VyIHNoZWV0LiBXcml0ZSB5b3VyIHN0eWxlc2hlZXQg aW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgeW91IHdvdWxkIG5vcm1hbGx5IGJ1dCB3aGVy ZSB5b3UgZmluZCB5b3Vyc2VsZiwgZm9yIGV4YW1wbGUsIHVzaW5nIHRoZSBzYW1lIGNvbG9y IHZhbHVlIHJlcGVhdGVkbHkgb3IgdGhlIHNhbWUgcnVsZXMgYmxvY2ssIHlvdSBjYW4gc2F2 ZSB5b3Vyc2VsZiB0eXBpbmcgYnkgdXNpbmcgY29uc3RhbnRzOjwvcD4KCjxwcmUgY2xhc3M9 ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPkBicmFuZGluZzogIzEyMzQ1NjsKI2hlYWRl ciB7CiAgY29sb3I6IEBicmFuZGluZzsKfQpoMiB7CiAgY29sb3I6IEBicmFuZGluZzsKfQo8 L2NvZGU+PC9wcmU+CgoJPHA+WW91IGNhbiBhbHNvIHNwZWNpZnkgd2hvbGUgcnVsZSBibG9j a3MgbGlrZSB0aGlzICg8ZW0+Tm90ZSB0aGUgY29sb24gYWZ0ZXIgdGhlIGJsb2NrIG5hbWU8 L2VtPikgOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPkBt eV9ibG9jazogewogIG1hcmdpbjowIDIwcHg7CiAgYm9yZGVyOjNweCBzb2xpZCAjOTk5Owog IGZvbnQtc2l6ZToxMjAlOwp9CiNoZWFkZXIgewogIGNvbG9yOiBAYnJhbmRpbmc7CiAgcG9z aXRpb246cmVsYXRpdmU7CiAgQG15X2Jsb2NrOwp9CmgyIHsKICBAbXlfYmxvY2s7Cn0KPC9j b2RlPjwvcHJlPgoKCTxwPklmIHlvdSBwdXQgYWxsIHlvdXIgY29uc3RhbnRzIGF0IHRoZSB0 b3Agb2YgdGhlIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgdGhleSB3aWxsIGJlIHJlbW92ZWQg ZnJvbSB0aGUgZ2VuZXJhdGVkIGNzcyBmaWxlLjwvcD4KCgk8cD5XaGVuIHlvdSBzYXZlIGEg PGNvZGU+LnNzYzwvY29kZT4gZmlsZSwgYSBjb3JyZXNwb25kaW5nLW5hbWVkIDxjb2RlPi5j c3M8L2NvZGU+IGZpbGUgd2lsbCBhbHNvIGJlIGNyZWF0ZWQuIFRoZSB0d28gd2lsbCBiZSBr ZXB0IGluIHN5bmMgYXMgZmFyIGFzIHByYWN0aWNhYmxlIChldmVuIGlmIHlvdSByZW5hbWUg dGhlIG9yaWdpbmFsIGZpbGUpLiBXaGVuIGl0IGNvbWVzIHRvIGRlbGV0aW9uIHRob3VnaCwg dGhleSBhcmUgdHJlYXRlZCBzZXBhcmF0ZWx5LiBUaGlzIGFsbG93cyB5b3UgdG8gZWl0aGVy IGtlZXAgdGhlIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiBh cmNoaXZlIG9yIHJlbW92ZSBpdCBwcmlvciB0byBleHBvcnQuPC9wPgoKCTxoNCBpZD0iZWRp dF9qcyI+SmF2YXNjcmlwdDwvaDQ+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5GaWxlcyBjYW4g YmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bh bj4gZW5kIGluIDxjb2RlPi5qczwvY29kZT48L3A+CgoJPHA+QW55IHRyaWNrZXJ5IHlvdSBt YXkgd2lzaCB0byBlbXBsb3kgaW4geW91ciB0aGVtZSBjYW4gYmUgd3JpdHRlbiBpbiB0aGVz ZSBmaWxlcy4gUmVtZW1iZXIgdGhhdCBqUXVlcnkgaXMgbG9hZGVkIGJ5IGRlZmF1bHQgb24g dGhlIGFkbWluIHNpZGUgc28geW91IGNhbiBwbGF5IHdpdGggdGhhdC48L3A+CgoJPGg0IGlk PSJlZGl0X3BocCI+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48L2g0PgoKCTxwIGNs YXNzPSJyZXF1aXJlZCI+T25lIGZpbGUgPHN0cm9uZz5tdXN0PC9zdHJvbmc+IGJlIG5hbWVk IGV4YWN0bHkgdGhlIHNhbWUgYXMgeW91ciB0aGVtZSwgaS5lLiA8Y29kZT5zbWRfQmx1ZU1l YW5pZS5waHA8L2NvZGU+LiBBbnkgb3RoZXIgZmlsZXMgbXVzdCBlbmQgaW4gPGNvZGU+LnBo cDwvY29kZT48L3A+CgoJPHA+Q29uc3VsdCB0aGUgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0 ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT1DcmVhdGluZ19hbl9BZG1pbl9TaWRlX1Ro ZW1lIj5BZG1pbiBTaWRlIHRoZW1lIGd1aWRlPC9hPiBvbiBUZXh0Ym9vayBmb3IgdGhlIHJ1 bGVzIG9uIG1ha2luZyB0aGVtZXMuIE5vdGUgdGhhdCBjb3JydXB0IHRoZW1lcyBhcmUgZGV0 ZWN0ZWQgdG8gdGhlIGJlc3Qgb2YgdGhlIHBsdWdpbiYjODIxNztzIGFiaWxpdHkgYW5kIHlv dSBtYXkgbm90IGV4cG9ydCwgYmFzZSBvciBzd2l0Y2ggdG8gYW55IHRoZW1lIHRoYXQgaXMg YnJva2VuLjwvcD4KCgk8cD5JZiB5b3UgcmVuYW1lIHRoZSB0aGVtZSYjODIxNztzIGNvcmUg PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSAoaS5lLiB0aGUgb25lIHdpdGgg dGhlIHNhbWUgbmFtZSBhcyB0aGUgdGhlbWUgZm9sZGVyIGl0c2VsZikgdGhlIHBsdWdpbiB3 aWxsIGF0dGVtcHQgdG8gcmVuYW1lIHRoZSBkaXJlY3RvcnkgYXMgd2VsbDsgZXNzZW50aWFs bHkgcmVuYW1pbmcgdGhlIHRoZW1lLiBUaGlzIHNob3VsZCBwcmV2ZW50IGEgdGhlbWUgZnJv bSBiZWNvbWluZyB1bmVkaXRhYmxlLCBidXQgaXQgaXMgdXAgdG8geW91IHRvIGtlZXAgdGhl IGNsYXNzIG5hbWUgaW4gc3luYyB3aXRoIHRoZSBmaWxlIG5hbWUuIElmIGF0IGFueSB0aW1l IHlvdSBnbyBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0L2dyaWQgYW5kIGZpbmQgYSB0aGVtZSBl eGlzdHMgYnV0IGhhcyBubyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQsIGNoYW5j ZXMgYXJlIGl0JiM4MjE3O3MgYmVjYXVzZSB0aGUgY2xhc3MgbmFtZSBkb2VzbiYjODIxNzt0 IG1hdGNoIHRoZSB0aGVtZSYjODIxNztzIGRpcmVjdG9yeSBuYW1lLiBKdXN0IGhpdCBbRWRp dF0gYW5kIGFsdGVyIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIHRv IGJyaW5nIGV2ZXJ5dGhpbmcgYmFjayBvbiB0cmFjay48L3A+CgoJPGg0IGlkPSJlZGl0X290 aGVyIj5PdGhlcnM8L2g0PgoKCTxwPkFueSBmaWxlcyB0aGF0IGFyZSBub3Qgb2YgdGhlIGFi b3ZlIHRocmVlIHR5cGVzIChhbmQgYXJlIG5vdCBpbWFnZXMpIGFwcGVhciBoZXJlLiBZb3Ug d2lsbCBwcm9iYWJseSBuZXZlciBzZWUgdGhpcyBzZWN0aW9uLiBJZiB5b3UgZG8gdHJ5IHRv IGNyZWF0ZSBhIGZpbGUgdGhhdCBpcyBub3Qgb2YgdGhlIGFib3ZlIHRocmVlIHR5cGVzLCBh IHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQuIFlvdSBtdXN0IGhpdCA8ZW0+U2F2ZTwvZW0+IGFn YWluIHRvIGNvbmZpcm0geW91IHJlYWxseSB3aXNoIHRvIGNyZWF0ZSB0aGUgZmlsZS48L3A+ CgoJPGgzIGlkPSJhYm91dCI+TWFuaWZlc3Q8L2gzPgoKCTxwPkluIHlvdXIgbWFpbiA8c3Bh biBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGlzIGEgZnVuY3Rpb24gY2FsbGVkIDxj b2RlPm1hbmlmZXN0KCk8L2NvZGU+IHdoaWNoIGNvbnRhaW5zIGluZm8gYWJvdXQgeW91IGFu ZCB5b3VyIHRoZW1lLiBFZGl0IHRoZSB2YWx1ZXMgaGVyZSB0byBzdGFtcCB5b3VyIG1hcmsg b24gdGhlIHRoZW1lLiBOb3RlIHRoYXQgaWYgeW91ciBkZXNjcmlwdGlvbiBjb250YWlucyBh cG9zdHJvcGhlcyB0aGV5IG11c3QgYmUgPGVtPmVzY2FwZWQ8L2VtPiBieSBwcmVjZWRpbmcg dGhlbSB3aXRoIGEgc2luZ2xlIGJhY2tzbGFzaCA8Y29kZT5cPC9jb2RlPi4gZS5nLjwvcD4K CjxwcmU+PGNvZGU+JiMzOTtkZXNjcmlwdGlvbiYjMzk7ID0mZ3Q7ICYjMzk7RG9uXCYjMzk7 dCBmZWFyIHRoZSByZWFwZXIhJiMzOTssCjwvY29kZT48L3ByZT4KCgk8aDIgaWQ9InBlcnVz ZXIiPlBlci11c2VyIHRoZW1lIHNlbGVjdGlvbjwvaDI+CgoJPHA+SWYgYW4gYWRtaW5pc3Ry YXRvciBjaG9vc2VzIHRvIGFsbG93IHBlci11c2VyIHRoZW1lcywgYSBuZXcgdGFiIGFwcGVh cnMgdW5kZXIgdGhlIEFkbWluIHRhYiBvZiBhbGwgdXNlcnMgKGV4Y2VwdCBhZG1pbmlzdHJh dG9ycykuIFRoaXMgc2ltcGx5IGRpc3BsYXlzIGFsbCBhdmFpbGFibGUgdGhlbWVzICYjODIx Mjsgb25lcyB0aGF0IHRoZSBhZG1pbmlzdHJhdG9yIGhhcyBleHBsaWNpdGx5IGFsbG93ZWQu PC9wPgoKCTxwPkNsaWNraW5nIGEgdGhlbWUgbmFtZSBvciB0aHVtYm5haWwgd2lsbCBpbW1l ZGlhdGVseSBzd2l0Y2ggdG8gdGhhdCB0aGVtZSB1bnRpbCB0aGUgdXNlciBjaG9vc2VzIGFu b3RoZXIgb3IgdGhlIGFkbWluaXN0cmF0b3IgY2hhbmdlcyB0aGVtZSBzeXN0ZW0uPC9wPgoK CTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTIgSnVu IDA5IHwgMC4xIHwgSW5pdGlhbCBwdWJsaWMgYmV0YTwvbGk+CgkJPGxpPjAzIFNlcCAwOSB8 IDAuMTEgfCBJbXByb3ZlZCBUZXh0Z2FyZGVuIHRoZW1lIGZlZWQgYW5kIGxpbmtzIDsgaW1w cm92ZWQgZmlsZSBzdXBwb3J0IChib3RoIHRoYW5rcyB0aGVib21ic2l0ZSkgOyBtYWRlIGds b2JhbCB0aGVtZSBtb3JlIG9idmlvdXMgOyBhbHRlcmVkIHByZWZzIHRhYiBhIGJpdCA7IGFk ZGVkIDxjb2RlPi5zc2M8L2NvZGU+IHN1cHBvcnQgOyBpZ25vcmVkIC5zdm4gc3ViZGlycyAo YWxsIHRoYW5rcyBwaWVtYW4pIDsgaW1wcm92ZWQgd2FybmluZyBtZXNzYWdlcyA7IG1pc2Mg Zml4ZXMgYW5kIGhvdXNla2VlcGluZzwvbGk+CgkJPGxpPjAyIE5vdiAwOSB8IDAuMTIgfCBS ZWR1Y2VkIHRoZW1lIGZlZWQgY2x1dHRlciBpbiB0aGUgcHJlZnMgdGFibGU8L2xpPgoJCTxs aT4wNCBOb3YgMDkgfCAwLjEzIHwgUmVtb3ZlZCBlcmVnX3JlcGxhY2UgdG8gY29uZm9ybSB3 aXRoIFBIUDUuMysgKHRoYW5rcyB0aGVib21ic2l0ZSkgOyBjaGFuZ2VkICYjODIxNjtnbG9i YWwmIzgyMTc7IHRvICYjODIxNjtkZWZhdWx0JiM4MjE3OyA7IGZpeGVkIHJvZ3VlIHVudHJh bnNsYXRlZCBzdHJpbmc8L2xpPgoJCTxsaT4wOSBOb3YgMDkgfCAwLjE0IHwgTW92ZWQgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIGluIGxpbmUgd2l0aCBUZXh0Z2FyZGVuIGxh eW91dCBhbHRlcmF0aW9ucyAodGhhbmtzIGZvciB0aGUgaGVhZHN1cCB0aGVib21ic2l0ZSkg OyBtYWRlIGZlZWRzIG1vcmUgcm9idXN0IGluIHRoZSBldmVudCBUZXh0Z2FyZGVuIGlzIGRv d24gLyB1bmRlciBtYWludGVuYW5jZSAodGhhbmtzIG1sYXJpbm8pPC9saT4KCQk8bGk+MDkg RmViIDEwIHwgMC4yIHwgTmF0aXZlIHN1cHBvcnQgZm9yIHppcCBpbXBvcnRpbmcgYW5kIGV4 cG9ydGluZyAoYWxtb3N0KSBpcnJlc3BlY3RpdmUgb2YgeW91ciA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiBlbnZpcm9ubWVudCA7IHppcCBpcyBub3cgdGhlIGRlZmF1bHQgc3lz dGVtIDsgYmV0dGVyIG5vdGlmaWNhdGlvbiBvZiBzdXBwb3J0ZWQgY29tcHJlc3Npb24gdHlw ZXMgYW5kIG1vcmUgcm9idXN0IHJlamVjdGlvbiBpZiBzb21ldGhpbmcgaXMgbWlzc2luZzwv bGk+CgkJPGxpPjEwIEZlYiAxMCB8IDAuMjEgfCBGaXhlZCBiemlwMiB3YXJuaW5nICh0aGFu a3MgdGhlYm9tYnNpdGUpIDsgZml4ZWQgcmVjdXJzaXZlIG1rZGlyIHByb2JsZW0gd2l0aCBi emlwMiBmaWxlcyAodGhhbmtzIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IG1hbnVh bCBjb21tZW50cykgOyBmaXhlZCByb2d1ZSB0ZW1wIGZpbGUgbGVmdCBiZWhpbmQgd2l0aCB6 aXAgaW1wb3J0PC9saT4KCQk8bGk+MTUgRmViIDEwIHwgMC4yMiB8IFdoZW4gcmVuYW1pbmcg dGhlIGNvcmUgdGhlbWUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSwgYXV0 b21hdGljYWxseSByZW5hbWUgZGlyZWN0b3J5IHRvbyAodGhhbmtzIGZsb29kZmlzaCk8L2xp PgoJCTxsaT4yOCBGZWIgMTAgfCAwLjIzIHwgUnVkaW1lbnRhcnkgdmFsaWRhdGlvbiBvZiB6 aXAgZmlsZSBjb250ZW50cyAodGhhbmtzIFR1dHNfYW5kX1RpcHBzKTsgZml4ZWQgZXhwb3J0 IG5vdGlmaWNhdGlvbjwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY3JlZGl0cyI+Q3JlZGl0czwv aDI+CgoJPHA+VGhpcyBwbHVnaW4gd291bGQgbm90IGhhdmUgZXhpc3RlZCB3aXRob3V0IHRo ZSBkZWRpY2F0aW9uLCBpZGVhcyBhbmQgZ2VuaXVzIG9mIHRoZSBUZXh0cGF0dGVybiBkZXZl bG9wbWVudCB0ZWFtLCBlc3BlY2lhbGx5IFJvYmVydCBXZXR6bG1heXIgZm9yIHRoZSB0aGVt ZSBzdXBwb3J0LiBQbHVzIG9mIGNvdXJzZSB0aGUgYXJteSBvZiBiZXRhIHRlc3RlcnMsIGlk ZWFzIGhhbXN0ZXJzIGFuZCB0aXJlbGVzcyB0aGVtZSBhZHZvY2F0ZXMsIG1vc3Qgbm90YWJs eSBTdHVhcnQgQnV0Y2hlciwgRGFsZSBDaGFwbWFuLCBEYXZlIERlU2FuZHJvLCBhbmQgTWlr ZSBEZW5uaXMuPC9wPgoKCTxwPkkgYW0gYWxzbyBpbmRlYnRlZCB0byB0aGUgbGlicmFyaWVz IGhvc3RlZCBhdCA8YSBocmVmPSJodHRwOi8vcGhwY2xhc3Nlcy5vcmcvIj48c3BhbiBjbGFz cz0iY2FwcyI+UEhQPC9zcGFuPiBDbGFzc2VzPC9hPiB0aGF0IGVuYWJsZWQgbmF0aXZlIGNv bXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9mIHZhcmlvdXMgdHlwZXMuIFRoZSBoYXJk IHdvcmsgb2YgRGV2aW4gRG91Y2V0dGUgYW5kIEFsZXhhbmRyZSBUZWRlc2NoaSByZWFsbHkg YWRkZWQgdGhlIGljaW5nIG9uIHRoZSBjYWtlIGZvciB0aGlzIHBsdWdpbi48L3A+CgoJPHA+ S3Vkb3MgYW5kIHRoYW5rcyB0byB5b3UgYWxsLjwvcD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJ TiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxw IHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9s ZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsg YmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9u dC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNv bG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBh ZGRpbmc6MTBweDsgfQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBH ZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQoj c21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6 MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7 IH0KI3NtZF9oZWxwIGgzIHsgY29sb3I6ICMyNzU2ODU7IGZvbnQ6IGJvbGQgMTJweCBBcmlh bCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0 ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30K I3NtZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0 ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBw ZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiMz M2Q7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRv dHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNl bnRlcjsgcGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgg e2JvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwg eyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAucmVxdWlyZWQge2NvbG9y OnJlZDt9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21k X2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5E IFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiI4MmIzYTlkNjVhNGIzMjQ1 NTIxNjA1MWUxYmQ5MDRiMiI7fQ==