# Name: smd_admin_themes v0.26 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjI2IjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czoxMTQyODg6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglnbG9iYWwg JHNtZF9hdF9ldmVudCwgJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfYWRtX2V2ZW50LCAkc21k X2F0X3ByaXZzLA0KCQkkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X3ByZWZzLCAkcHJlZnMs ICRzbWRfYXRfZmVlZHVybCwgJHNtZF9hdF90aGVtZV9yZXBvLA0KCQkkc21kX2F0X3N0eWxl czsNCg0KCSRzbWRfYXRfZXZlbnQgPSAnc21kX2F0JzsNCgkkc21kX2F0X2Z1bGxldiA9ICdz bWRfYWRtaW5fdGhlbWVzJzsNCgkkc21kX2F0X2FkbV9ldmVudCA9ICdzbWRfYWRtYXQnOw0K CSRzbWRfYXRfcHJpdnMgPSAnMSc7DQoJJHNtZF9hdF9mZWVkdXJsID0gJ2h0dHA6Ly90ZXh0 Z2FyZGVuLm9yZy9hZG1pbi10aGVtZXMtZmVlZCc7DQoJJHNtZF9hdF90aGVtZV9yZXBvID0g J2h0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9hZG1pbmlzdHJhdGlvbi10aGVtZXMnOw0KCSRzbWRf YXRfc3R5bGVzID0gYXJyYXkoDQoJCSdjb21tb24nID0+DQoJCSAgICAnLnNtZF9jbGVhciB7 IGNsZWFyOmJvdGg7IH0NCiAgICAgICAgICAgLnNtZF9zbWFsbHByaW50IHsgZm9udC1zaXpl Ojc1JTsgdGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi10b3A6LTEycHg7IH0NCiAgICAgICAg ICAgLnNtZF9oaWRkZW4geyBkaXNwbGF5Om5vbmU7IG1hcmdpbjo1cHg7IH0nLA0KCQknY29u dHJvbCcgPT4NCgkJICAgICcjc21kX2NvbnRyb2wgeyBtYXJnaW46MCBhdXRvOyB9DQogICAg ICAgICAgICNzbWRfY29udHJvbCB0ZCAucHVibGlzaCB7IG1hcmdpbi1sZWZ0OjUwcHg7IH0N CiAgICAgICAgICAgI3NtZF9jb250cm9sIC51cGxvYWQtZm9ybSB7IHBhZGRpbmc6MDsgfQ0K ICAgICAgICAgICAuc21kX2F0X3VwZGF0ZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiM5 OTAwMDA7IH0nLA0KCQknZWRpdCcgPT4NCiAgICAgICAgICAnI3NtZF9hdF9pbWFnZXMgeyBt YXJnaW46MHB4IDZweCAtNHB4IDA7IH0NCiAgICAgICAgICAgLnNtZF9za2luX2ZpbGV0eXBl cyB7IG1hcmdpbjoxMnB4IDA7IH0nLA0KCQknZ3JpZCcgPT4NCgkJICAgICcuc21kX2dyaWQg eyB3aWR0aDo5NjBweDsgbWFyZ2luOjAgYXV0bzsgfQ0KICAgICAgICAgICAuc21kX2NlbGwg eyBmbG9hdDpsZWZ0OyBwYWRkaW5nOjEwcHg7IG1hcmdpbjoxMHB4OyBib3JkZXI6MXB4IHJp ZGdlICNjY2M7IHdpZHRoOnt0d31weDsgaGVpZ2h0Ont0aH1weDsgfQ0KICAgICAgICAgICAu c21kX2NlbGwuYWN0aXZlIHsgYm9yZGVyOjFweCBzb2xpZCByZWQ7IH0NCiAgICAgICAgICAg LnNtZF9jZWxsOmhvdmVyIHsgYmFja2dyb3VuZDojZTJkZmNlOyBjb2xvcjojODA1NTFlOyB9 DQogICAgICAgICAgIC5zbWRfY2VsbDpob3ZlciBhIHsgY29sb3I6YmxhY2s7IH0NCiAgICAg ICAgICAgLnNtZF9hdXRoLC5zbWRfYWN0aW9ucyB7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJn aW46NXB4IDA7IH0nLA0KCQknbGlzdCcgPT4NCiAgICAgICAgICAnLnNtZF9hdF9saXN0IHRy LmFjdGl2ZSwgLnNtZF9hdF9saXN0IHRyLmFjdGl2ZSBhIHsgYmFja2dyb3VuZC1jb2xvcjoj ZTJkZmNlOyBjb2xvcjojODA1NTFlOyB9JywNCgkJJ3NldHVwJyA9Pg0KICAgICAgICAgICcu c21kX2Zha2VidG4geyBjb2xvcjojNTU1OyBjdXJzb3I6cG9pbnRlcjsgfQ0KICAgICAgICAg ICAjc21kX2F0X3JhZGlvIGlucHV0IHsgZmxvYXQ6bGVmdDsgY2xlYXI6Ym90aDsgfQ0KICAg ICAgICAgICAjc21kX2F0X3JhZGlvIGxhYmVsIHsgZmxvYXQ6bGVmdDsgfScsDQoJKTsNCg0K CS8vIFRodW1ibmFpbCBkaW1lbnNpb25zDQoJJHNtZF9jb3JlX3RoZW1lcyA9IGFycmF5KCdj bGFzc2ljJywncmVtb3JhJyk7DQoNCglhZGRfcHJpdnMoJHNtZF9hdF9ldmVudCwgJHNtZF9h dF9wcml2cyk7DQoJYWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldiwg JHNtZF9hdF9wcml2cyk7DQoJcmVnaXN0ZXJfdGFiKCJleHRlbnNpb25zIiwgJHNtZF9hdF9l dmVudCwgc21kX2F0X2dUeHQoJ3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfYXRfb3B0aW9ucycsICdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldik7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuJy4k c21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdCcsICRzbWRfYXRf ZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfcGVyJywgJ2FkbWluX3NpZGUn LCAndGhlbWVfbmFtZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfbGluaycsICdw cmVmc191aScsICd0aGVtZV9uYW1lJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF91 cGxvYWRfZm9ybScsICRzbWRfYXRfZXZlbnQuJ191aScsICd1cGxvYWRfZm9ybScpOw0KDQoJ aWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3N5c3RlbSddKSAmJiAkcHJlZnNbJ3NtZF9hdF9z eXN0ZW0nXSA9PSAyKSB7DQoJCWFkZF9wcml2cygkc21kX2F0X2FkbV9ldmVudCwgJzIsMyw0 LDUsNicpOw0KCQlyZWdpc3Rlcl90YWIoImFkbWluIiwgJHNtZF9hdF9hZG1fZXZlbnQsIHNt ZF9hdF9nVHh0KCdza2lubmVyJykpOw0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FkbWF0 JywgJHNtZF9hdF9hZG1fZXZlbnQpOw0KCX0NCg0KCS8vIERvdWJsZSBhcnJheTogMXN0IGlz IGEgbGlzdCBvZiBjdXJyZW50IHByZWZzIGFuZCB0aGVpciBkZWZhdWx0cywNCgkvLyAybmQg aXMgYSBsaXN0IG9mIGxlZ2FjeSBwcmVmcyB0aGF0IG1heSBuZWVkIHJlbW92aW5nIGluIGZ1 dHVyZSAoZGVmYXVsdHMgYWxsIHNldCBlbXB0eSkNCgkkc21kX2F0X3ByZWZzID0gYXJyYXko DQoJCWFycmF5KA0KCQkJJ3NtZF9hdF9jYXNlX3NvcnQnID0+ICcxJywNCgkJCSdzbWRfYXRf Y3J1c2gnID0+ICd6aXAnLA0KCQkJJ3NtZF9hdF90dycgPT4gJzI2MCcsDQoJCQknc21kX2F0 X3RoJyA9PiAnMTUwJywNCgkJCSdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0JyA9PiAne3RoZW1l fScsDQoJCQknc21kX2F0X2xheW91dCcgPT4gJzEnLA0KCQkJJ3NtZF9hdF9zeXN0ZW0nID0+ ICcwJywNCgkJCSdzbWRfYXRfZ2xvYmFsX3NraW4nID0+ICcnLA0KCQkJJ3NtZF9hdF9ncm91 cF9saXN0JyA9PiAnJywNCgkJCSdzbWRfYXRfdXNlcl9saXN0JyA9PiAnJywNCgkJKSwNCgkJ YXJyYXkoDQoJCQknc21kX2F0X25vdF91c2VkX2FueV9tb3JlJyA9PiAnJywNCgkJKQ0KCSk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0KCRl dmVudCwgJHN0ZXApIHsNCglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgN CgkJCSdzbWRfYXRfY2xvbmUnLA0KCQkJJ3NtZF9hdF9kZWxldGUnLA0KCQkJJ3NtZF9hdF9k ZWxldGVfaW1hZ2UnLA0KCQkJJ3NtZF9hdF9lZGl0JywNCgkJCSdzbWRfYXRfZXhwb3J0JywN CgkJCSdzbWRfYXRfaW1wb3J0JywNCgkJCSdzbWRfYXRfbmV3ZmlsZScsDQoJCQknc21kX2F0 X3ByZWZzX2luc3RhbGwnLA0KCQkJJ3NtZF9hdF9wcmVmc19yZW1vdmUnLA0KCQkJJ3NtZF9h dF9wcmVmc191cGRhdGUnLA0KCQkJJ3NtZF9hdF9yZW5hbWUnLA0KCQkJJ3NtZF9hdF9zYXZl JywNCgkJCSdzbWRfYXRfc2V0dXAnLA0KCQkJJ3NtZF9hdF9zd2l0Y2gnLA0KCQkJJ3NtZF9h dF91cGxvYWRfaW1hZ2UnLA0KCQkJJ3NtZF9hdF9jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsN CgkJc21kX2F0X2xpc3QoJycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfd2VsY29tZSgkZXZlbnQsICRzdGVwKSB7DQoJJG1zZyA9ICcn Ow0KCXN3aXRjaCAoJHN0ZXApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9hdF9w cmVmc19pbnN0YWxsKDApOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21k X2F0X3ByZWZzX3JlbW92ZSgwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0N Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9saW5rKCkgew0KCWdsb2JhbCAkc21kX2F0 X2V2ZW50Ow0KCXJldHVybiBocmVmKHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksICc/ZXZl bnQ9Jy4kc21kX2F0X2V2ZW50KTsNCn0NCg0KLy8gQSBzdHViIHRoYXQgY2FuIGJlIGNhbGxl ZCB3aXRob3V0IGEgJG1lc3NhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9kaXNwbGF5KCkgew0KCQlz bWRfYXRfbGlzdCgnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2xpc3QoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVu dCwgJHByZWZzLCAkc21kX2F0X3ByZWZzLCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRz bWRfYXRfZnVsbGV2LCAkc21kX2F0X2ZlZWR1cmwsICRzbWRfYXRfdGhlbWVfcmVwbywgJHNt ZF9hdF9zdHlsZXM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoNCgll eHRyYWN0KGdwc2EoYXJyYXkoJ3N0ZXAnLCAncGFnZScsICdjcml0JywgJ3NlYXJjaF9tZXRo b2QnLCAnc2tpbicpKSk7DQoJJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBn cHMoJ21lc3NhZ2UnKTsNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2xh eW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoJJHN0eWxlcnVs ZSA9ICgkbGF5b3V0PT0wKSA/ICdsaXN0JyA6ICdncmlkJzsNCgkkdHcgPSAoaXNzZXQoJGF0 X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9h dF9wcmVmc1swXVsnc21kX2F0X3R3J10pICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVm c1snc21kX2F0X3RoJ10pID8gJGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJl ZnNbMF1bJ3NtZF9hdF90aCddKSArIDgwOw0KCSRzdHlsZXJlcHMgPSBhcnJheSgNCgkJJ3t0 d30nID0+ICR0dywNCgkJJ3t0aH0nID0+ICR0aCwNCgkpOw0KCSRoZWxwTGluayA9ICI/ZXZl bnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0kc21kX2F0X2Z1bGxldiN1c2FnZSI7 DQoNCgkkcGFnZWJ5ID0gKGdwcygncXR5JykpID8gZ3BzKCdxdHknKSA6ICgoY3MoJ3NtZF9h dF9wYWdlYnknKSkgPyBjcygnc21kX2F0X3BhZ2VieScpIDogMTUpOw0KCSRtYXhfZmlsZV9z aXplID0gMTUwICogMTAyNDsgLy8gYSBiaXQgYXJiaXRyYXJ5IQ0KDQoJJGN1cnJfc2tpbiA9 IChzbWRfYXRfZXhpc3RzKCR0aGVtZS0+bmFtZSkpID8gJHRoZW1lLT5uYW1lIDogJ2NsYXNz aWMnOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygpOw0KCSRjcnVzaGVycyA9 IHNtZF9hdF9jcnVzaF9vcHRpb25zKCk7DQoJJHVuY3J1c2hlcnMgPSBzbWRfYXRfY3J1c2hf b3B0aW9ucygnaW1wb3J0Jyk7DQoJJGJhc2VzID0gYXJyYXkoKTsNCg0KCS8vIEdldCBhIGxp c3Qgb2YgYW5jZXN0b3IgdGhlbWVzIChpLmUuIGRlcGVuZGVuY2llcykNCglmb3JlYWNoICgk c2tpbl9saXN0IGFzICRza2luYSkgew0KCQkkbWFuaWZlc3QgPSBzbWRfYXRfcmVhZF9za2lu Zm8oJHNraW5hKTsNCgkJaWYgKCRtYW5pZmVzdCkgew0KCQkJaWYgKCRtYW5pZmVzdFsnYmFz ZWRfb24nXSkgew0KCQkJCSRiYXNlc1tdID0gJG1hbmlmZXN0WydiYXNlZF9vbiddOw0KCQkJ fQ0KCQl9DQoJfQ0KCSRiYXNlcyA9IGFycmF5X3VuaXF1ZSgkYmFzZXMpOw0KDQoJcGFnZXRv cChzbWRfYXRfZ1R4dCgnbWFuYWdlX2xibCcpLCRtZXNzYWdlKTsNCg0KCS8vIEhhbmRsZSBw YWdpbmcNCgkkdG90YWwgPSBjb3VudCgkc2tpbl9saXN0KTsNCgkkbGltaXQgPSBtYXgoQCRw YWdlYnksIDE1KTsNCglsaXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0gcGFnZXIo JHRvdGFsLCAkbGltaXQsICRwYWdlKTsNCgkkc2tpbl9saXN0ID0gYXJyYXlfc2xpY2UoJHNr aW5fbGlzdCwgJG9mZnNldCwgJGxpbWl0KTsNCg0KCSRxcyA9IGFycmF5KA0KCQkiZXZlbnQi ID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJwYWdlIiA9PiAkcGFnZSwNCgkpOw0KDQoJZWNobyA8 PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBzbWRf Z2V0Y3J1c2goc2tpbikgew0KCXNraW5IYW5kbGUgPSAiY3J1c2hfIitza2luOw0KCWpRdWVy eSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWJveCA9IGpRdWVyeSh0aGlz KTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5IYW5kbGUpIHsNCgkJCWlmIChib3gu Y3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCQkJYm94LnNsaWRlRG93bignZmFzdCcp Ow0KCQkJfSBlbHNlIHsNCgkJCQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQkJfQ0KCQl9IGVs c2Ugew0KCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgnIycr c2tpbkhhbmRsZSsnIGEnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0 dHIoImhyZWYiLCAiP2V2ZW50PXskc21kX2F0X2V2ZW50fSZza2luPSIrc2tpbisiJnN0ZXA9 c21kX2F0X2V4cG9ydCZjcnVzaD0iK2pRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0W3R5 cGU9XCdyYWRpb1wnXTpjaGVja2VkJykudmFsKCkrIiZwYWdlPSIreyRwYWdlfSk7DQoJfSk7 DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBzbWRfZ2V0dmFsKHNraW4sIHN0ZXAp IHsNCglza2luSGFuZGxlID0gInBvcF8iK3NraW47DQoJalF1ZXJ5KCcuc21kX3BvcHVwJyku ZWFjaChmdW5jdGlvbigpIHsNCgkJYm94ID0galF1ZXJ5KHRoaXMpOw0KCQlpZiAoYm94LmF0 dHIoImlkIikgPT0gc2tpbkhhbmRsZSkgew0KCQkJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9 PSAibm9uZSIpIHsNCgkJCQlib3guc2xpZGVEb3duKCdmYXN0Jyk7DQoJCQkJalF1ZXJ5KCcj Jytza2luSGFuZGxlKycgaW5wdXQnKS5mb2N1cygpOw0KCQkJfSBlbHNlIHsNCgkJCQlib3gu c2xpZGVVcCgnZmFzdCcpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJYm94LnNsaWRlVXAoJ2Zh c3QnKTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGEnKS5jbGljayhm dW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIoImhyZWYiLCAiP2V2ZW50PXskc21k X2F0X2V2ZW50fSZza2luPSIrKChza2luPT0nbmV3Jyk/ICcnIDogc2tpbikrIiZzdGVwPSIr c3RlcCsiJm5ld19za2luPSIralF1ZXJ5KCcjJytza2luSGFuZGxlKycgaW5wdXQnKS52YWwo KSsiJnBhZ2U9Iit7JHBhZ2V9KTsNCgl9KTsNCg0KCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsn IGlucHV0Jykua2V5dXAoZnVuY3Rpb24gKCkgew0KCQl0aGlzLnZhbHVlID0gdGhpcy52YWx1 ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9ceDdmLVx4ZmZdL2csJycpOw0KCQl3aGlsZSAodGhp cy52YWx1ZS5sZW5ndGggPiAwICYmIHRoaXMudmFsdWUuc3Vic3RyaW5nKDAsMSkubWF0Y2go L1swLTldLykpIHsNCgkJCXRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnN1YnN0cmluZygxKTsN CgkJfQ0KCX0pOw0KDQoJcmV0dXJuIGZhbHNlOw0KfQ0KPC9zY3JpcHQ+DQpFT0pTOw0KDQoJ Ly8gSW5qZWN0IHN0eWxlcw0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JzsNCgll Y2hvIHN0cnRyKCRzbWRfYXRfc3R5bGVzWydjb21tb24nXS5uLiRzbWRfYXRfc3R5bGVzWyRz dHlsZXJ1bGVdLm4uJHNtZF9hdF9zdHlsZXNbJ2NvbnRyb2wnXSwgJHN0eWxlcmVwcyk7DQoJ ZWNobyAnPC9zdHlsZT4nOw0KDQoJLy8gTGlzdCB0aGUgYXZhaWxhYmxlIHNraW5zDQoJZWNo byBzdGFydFRhYmxlKCdzbWRfY29udHJvbCcsJycsJycsNSk7DQoJZWNobyB0cigNCgkJdGRh KHVwbG9hZF9mb3JtKHNtZF9hdF9nVHh0KCdpbnN0YWxsX3NraW4nKSwgJycsICdzbWRfYXRf aW1wb3J0JywgJHNtZF9hdF9ldmVudCwgJycsICRtYXhfZmlsZV9zaXplKS5ici4nPGRpdiBj bGFzcz0ic21kX3NtYWxscHJpbnQiPicuc21kX2F0X2dUeHQoJ3N1cHBvcnRlZF9pbXBvcnQn LCBhcnJheSgne3R5cGVzfScgPT4gam9pbignLCAnLCAkdW5jcnVzaGVycykpKS4nPC9kaXY+ JywgJyBjb2xzcGFuPSIyIicpDQoJCS50ZGEoZm9ybShmSW5wdXQoJ3N1Ym1pdCcsICdzdWJt aXQnLCBzbWRfYXRfZ1R4dCgnc2V0dXAnKSwgJ3B1Ymxpc2gnKS5zSW5wdXQoJ3NtZF9hdF9z ZXR1cCcpLmVJbnB1dCgkc21kX2F0X2V2ZW50KSksJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9y ZGVyOjA7aGVpZ2h0OjUwcHgiJykNCgkpOw0KCWVjaG8gZW5kVGFibGUoKTsNCgllY2hvICc8 Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9Imxvbmdmb3JtIiBhY3Rpb249Iicuam9pbl9xcygk cXMpLiciPic7DQoJJG5ld2J0biA9ICcgJy4nPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9l dmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49IiBv bmNsaWNrPSJyZXR1cm4gc21kX2dldHZhbChcJ25ld1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsi Picuc21kX2F0X2dUeHQoJ25ldycpLic8L2E+Jw0KCQkuICc8ZGl2IGlkPSJwb3BfbmV3IiBj bGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQoJ25ld19z a2luJykuJzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIg dmFsdWU9IiIgLz4gPGEgaHJlZj0iIyI+Wycuc21kX2F0X2dUeHQoJ2NvbmZpcm0nKS4nXTwv YT48L2Rpdj4nOw0KCSRyZXBvYnRuID0gJyAnLic8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0i Jy4kc21kX2F0X3RoZW1lX3JlcG8uJyI+Jy5zbWRfYXRfZ1R4dCgnZmluZF90aGVtZScpLic8 L2E+JzsNCgkkaGRyb3cgPSBoZWQoc21kX2F0X2dUeHQoJ2xpc3RfdGl0bGUnKS4gJyAnLiBz bWRfYXRfZ1R4dCgnaGVscF9saW5rJywgYXJyYXkoJ3tsaW5rfScgPT4gJGhlbHBMaW5rKSks IDMpOw0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jywn Jywnc21kX2F0X2xpc3QnLDUpOw0KCQllY2hvIHRyKA0KCQkJdGRhKCRoZHJvdy4kcmVwb2J0 bi4kbmV3YnRuLCAnIGNvbHNwYW49IjciJykNCgkJKTsNCgkJZWNobyB0cigNCgkJCWFzc0hl YWQoDQoJCQkJc21kX2F0X2dUeHQoJ3NraW5fZ2JsJyksDQoJCQkJJ2F1dGhvcicsDQoJCQkJ Z1R4dCgndmVyc2lvbicpLA0KCQkJCSdkZXNjcmlwdGlvbicsDQoJCQkJc21kX2F0X2dUeHQo J2FjdGlvbnMnKQ0KCQkJCSkNCgkJKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNz PSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0ic21kX25ld3JvdyI+Jy4kaGRyb3cuJHJlcG9idG4u JG5ld2J0bi4nPC9kaXY+JzsNCgl9DQoJaWYoIGlzX2NhbGxhYmxlKCdmc29ja29wZW4nKSAp DQoJCSR0cmFuc3BvcnQgPSAnZnNvY2snOw0KCWVsc2VpZiggaXNfY2FsbGFibGUoJ2N1cmxf aW5pdCcpICkgew0KCQkkdHJhbnNwb3J0ID0gJ2N1cmwnOw0KCX0gZWxzZSB7DQoJCSR0cmFu c3BvcnQgPSAnJzsNCgl9DQoNCgkkZmVlZCA9ICcnOw0KCXN3aXRjaCAoJHRyYW5zcG9ydCkg ew0KCQljYXNlICdjdXJsJzoNCgkJCSRjID0gY3VybF9pbml0KCk7DQoJCQljdXJsX3NldG9w dCgkYywgQ1VSTE9QVF9VUkwsICRzbWRfYXRfZmVlZHVybCk7DQoJCQljdXJsX3NldG9wdCgk YywgQ1VSTE9QVF9SRUZFUkVSLCBodSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9S RVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9WRVJC T1NFLCBmYWxzZSk7DQoJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9USU1FT1VULCAxMCk7 DQoJCQkkZmVlZCA9IGN1cmxfZXhlYygkYyk7DQoJCQlicmVhazsNCgkJY2FzZSAnZnNvY2sn Og0KCQkJJHVybCA9IHBhcnNlX3VybCgkc21kX2F0X2ZlZWR1cmwpOw0KCQkJJGZwID0gQGZz b2Nrb3BlbiAoJHVybFsnaG9zdCddLCA4MCwgJGVycm5vLCAkZXJyc3RyLCA1KTsNCgkJCWlm ICgkZnApIHsNCgkJCQkkcXJ5ID0gJ0dFVCAnLiRzbWRfYXRfZmVlZHVybDsNCgkJCQkkcXJ5 IC49ICIgSFRUUC8xLjBcclxuXHJcbiI7DQoNCgkJCQlmcHV0cygkZnAsICRxcnkpOw0KCQkJ CXN0cmVhbV9zZXRfdGltZW91dCgkZnAsIDEwKTsNCgkJCQkkaW5mbyA9IHN0cmVhbV9nZXRf bWV0YV9kYXRhKCRmcCk7DQoNCgkJCQkkaGRycyA9IHRydWU7DQoJCQkJd2hpbGUgKCghZmVv ZigkZnApKSAmJiAoISRpbmZvWyd0aW1lZF9vdXQnXSkpIHsNCgkJCQkJJGxpbmUgPSBmZ2V0 cygkZnAsIDgxOTIpOw0KCQkJCQkkbGluZSA9IHByZWdfcmVwbGFjZSgiW1xyXG5dIiwgIiIs ICRsaW5lKTsNCgkJCQkJaWYgKCRoZHJzID09IGZhbHNlKSB7DQoJCQkJCQkkZmVlZCAuPSAk bGluZS4iXG4iOw0KCQkJCQl9DQoJCQkJCWlmIChzdHJsZW4oJGxpbmUpID09IDApICRoZHJz ID0gZmFsc2U7DQoJCQkJfQ0KCQkJCWlmICgkaW5mb1sndGltZWRfb3V0J10pIHsNCgkJCQkJ JGZlZWQgPSAnJzsNCgkJCQl9DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9IGVsc2Ugew0KCQkJ CSRmZWVkID0gJyc7DQoJCQl9DQoJCQlicmVhazsNCgkJZGVmYXVsdDoNCgkJCSRmZWVkID0g Jyc7DQoJfQ0KDQoJJHNtZF9hdF92bGFzdCA9ICcnOw0KCSRmZWVkcyA9IGFycmF5KCk7DQoJ aWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3ZlcnNpb25zJ10pICYmIGlzc2V0KCRwcmVmc1sn c21kX2F0X3ZsYXN0J10pKSB7DQoJCWlmICh0aW1lKCkgLSAkcHJlZnNbJ3NtZF9hdF92bGFz dCddIDwgODY0MDApIHsNCgkJCS8vIExhc3QgdXBkYXRlZCB3aXRoaW4gdGhlIGxhc3QgZGF5 LCBzbyByZWFkIHRoZSBjYWNoZWQgdmVyc2lvbiBudW1iZXJzDQoJCQkkZmVlZHMgPSB1bnNl cmlhbGl6ZSgkcHJlZnNbJ3NtZF9hdF92ZXJzaW9ucyddKTsNCgkJfQ0KCX0NCglpZiAoISRm ZWVkcyB8fCBncHMoJ3JlYWRfdmVyc2lvbnMnKSkgew0KCQkkZmVlZHMgPSBzbWRfYXRfZmVl ZCgkZmVlZCk7DQoJCSRpbnN0YWxsZWRfZmVlZCA9IGFycmF5KCk7DQoJCSRmZWVkcyA9IChp c19hcnJheSgkZmVlZHMpKSA/ICRmZWVkcyA6IGFycmF5KCk7DQoNCgkJLy8gT25seSByZWNv cmQgdGhlIHZlcnNpb24gaW5mbyBmcm9tIHRoZW1lcyB0aGF0IGFyZSBpbnN0YWxsZWQNCgkJ Zm9yZWFjaCgkc2tpbl9saXN0IGFzICRza2luX25hbWUpIHsNCgkJCSRmZWVkX3NraW5fbmFt ZSA9IHN0cl9yZXBsYWNlKCdfJywgJy0nLCAkc2tpbl9uYW1lKTsgLy8gVW5zYW5pdGl6ZSB0 aGUgdXJsX3RpdGxlDQoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkZmVlZF9za2luX25hbWUs ICRmZWVkcykpIHsNCgkJCQkkaW5zdGFsbGVkX2ZlZWRbJGZlZWRfc2tpbl9uYW1lXSA9ICRm ZWVkc1skZmVlZF9za2luX25hbWVdOw0KCQkJfQ0KCQl9DQoJCXNldF9wcmVmKCdzbWRfYXRf dmxhc3QnLCB0aW1lKCksICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcpOw0KCQlzZXRfcHJlZignc21kX2F0X3ZlcnNpb25zJywgc2VyaWFsaXplKCRpbnN0YWxs ZWRfZmVlZCksICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0K CX0NCg0KCWZvcmVhY2ggKCRza2luX2xpc3QgYXMgJHNraW5fbmFtZSkgew0KCQkvLyBSZWFk IGVhY2ggbWFuaWZlc3QgYW5kIHNldCB1cCB0aGUgbGFiZWxzDQoJCSRza2luZm8gPSBzbWRf YXRfcmVhZF9za2luZm8oJHNraW5fbmFtZSk7DQoJCSRmZWVkX3NraW5fbmFtZSA9IHN0cl9y ZXBsYWNlKCdfJywgJy0nLCAkc2tpbl9uYW1lKTsgLy8gVW5zYW5pdGl6ZSBmb3IgdXJsX3Rp dGxlIG1hdGNoaW5nDQoNCgkJJHRodW1ibmFpbCA9IHNtZF9hdF9nZXRfdGh1bWIoJHNraW5m bywgMSk7DQoJCSR0aGlzX3NraW4gPSAoJHNraW5mbykgPyAoKCRza2luX25hbWUgPT0gJGN1 cnJfc2tpbikgPyBzdHJvbmcoJHNraW5mb1snZG5hbWUnXSkgOiAkc2tpbmZvWydkbmFtZSdd KSA6ICRza2luX25hbWU7DQoJCSRpc19nYmwgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRf Z2xvYmFsX3NraW4nXSkgJiYgJHNraW5fbmFtZSA9PSAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9i YWxfc2tpbiddKSA/IHNtZF9hdF9nVHh0KCdpc19nbG9iYWwnKSA6ICcnOw0KCQkkdGh1bXJv dyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X3N3 aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2F0X2xpc3QnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLmEu J3BhZ2U9Jy4kcGFnZS4nIiB0aXRsZT0iJy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLici PicuJHRoaXNfc2tpbi4kaXNfZ2JsLigoJHNraW5mbyAmJiAkc2tpbmZvWydiYXNlZF9vbidd KSA/IHNtZF9hdF9nVHh0KCdiYXNlZF9vbicsIGFycmF5KCd7c2tpbn0nID0+ICRza2luZm9b J2Jhc2VkX29uJ10pKSA6ICcnKS4oKCR0aHVtYm5haWwpID8gJzxkaXY+Jy4kdGh1bWJuYWls Lic8L2Rpdj4nIDogJycpLic8L2E+JzsNCgkJJGF1dGhyb3cgPSAoKCRza2luZm8gJiYgc3Ry cG9zKCRza2luZm9bJ2F1dGhvcl91cmknXSwgImh0dHA6Ly8iKSA9PT0gMCkgPyAnPGEgaHJl Zj0iJy4kc2tpbmZvWydhdXRob3JfdXJpJ10uJyI+Jy4kc2tpbmZvWydhdXRob3InXS4nPC9h PicgOiAoKCRza2luZm8pID8gJHNraW5mb1snYXV0aG9yJ10gOiAnLScpKTsNCgkJJGFjdHJv dyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2Vk aXQnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciPlsnLmdUeHQoJ2VkaXQnKS4nXTwvYT4nDQoJ CQkuICcgJyAuKCgkc2tpbmZvKSA/ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50 LmEuJ3N0ZXA9c21kX2F0X2Nsb25lJy5hLidza2luPScuJHNraW5fbmFtZS4nIiBvbmNsaWNr PSJyZXR1cm4gc21kX2dldHZhbChcJycuJHNraW5fbmFtZS4nXCcsIFwnc21kX2F0X2Nsb25l XCcpOyI+Wycuc21kX2F0X2dUeHQoJ2Nsb25lJykuJ108L2E+JyA6ICcnKQ0KCQkJLiAnICcg LigoJHNraW5mbykgPyAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVw PXNtZF9hdF9leHBvcnQnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciIG9uY2xpY2s9InJldHVy biBzbWRfZ2V0Y3J1c2goXCcnLiRza2luX25hbWUuJ1wnKTsiPlsnLnNtZF9hdF9nVHh0KCdl eHBvcnQnKS4nXTwvYT4nIDogJycpDQoJCQkuICcgJyAuKChpbl9hcnJheSgkc2tpbl9uYW1l LCAkc21kX2NvcmVfdGhlbWVzKSB8fCBpbl9hcnJheSgkc2tpbl9uYW1lLCAkYmFzZXMpKSA/ ICcnIDogJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRf ZGVsZXRlJy5hLidza2luPScuJHNraW5fbmFtZS5hLidwYWdlPScuJHBhZ2UuJyIgb25jbGlj az0icmV0dXJuIGNvbmZpcm0oXCcnLnNtZF9hdF9nVHh0KCdkZWxldGVfY29uZmlybScsIGFy cmF5KCd7c2tpbn0nID0+ICRza2luX25hbWUpKS4nXCcpOyI+WycuZ1R4dCgnZGVsZXRlJyku J108L2E+JykNCgkJCS4gJzxkaXYgaWQ9InBvcF8nLiRza2luX25hbWUuJyIgY2xhc3M9InNt ZF9wb3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCduZXdfY2xvbmVza2lu JykuJzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIgdmFs dWU9IiIgLz4gPGEgaHJlZj0iIyI+Jm5ic3A7Wycuc3Ryb25nKHNtZF9hdF9nVHh0KCdjb25m aXJtJykpLiddPC9hPjwvZGl2PicNCgkJCS4gJzxkaXYgaWQ9ImNydXNoXycuJHNraW5fbmFt ZS4nIiBjbGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQo J2NydXNoX2Zvcm1hdCcpLic8L3NwYW4+Jy5yYWRpb1NldCgkY3J1c2hlcnMsICRza2luX25h bWUuJ19jcnVzaCcsICgoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfY3J1c2gnXSkpID8gJGF0 X3ByZWZzWydzbWRfYXRfY3J1c2gnXSA6ICcnKSApLic8YSBocmVmPSIjIj4mbmJzcDtbJy5z dHJvbmcoc21kX2F0X2dUeHQoJ2NvbmZpcm0nKSkuJ108L2E+PC9kaXY+JzsNCgkJJHZlcm93 ID0gKCRza2luZm8pID8gKChpc3NldCgkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXSkgJiYgaXNz ZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ3N1bW1hcnknXSkgJiYgdmVyc2lvbl9jb21w YXJlKCRmZWVkc1skZmVlZF9za2luX25hbWVdWydzdW1tYXJ5J10sJHNraW5mb1sndmVyc2lv biddKT09PTEpID8gJzxhIGhyZWY9IicuJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ2xpbmsn XS4nIiBjbGFzcz0ic21kX2F0X3VwZGF0ZSI+Jy5zbWRfYXRfZ1R4dCgndmVyc2lvbicpLiRz a2luZm9bJ3ZlcnNpb24nXS4nPC9hPicgOiBzbWRfYXRfZ1R4dCgndmVyc2lvbicpLiRza2lu Zm9bJ3ZlcnNpb24nXSkgOiAnJzsNCg0KCQlpZiAoJGxheW91dD09MCkgew0KCQkJZWNobyB0 cigNCgkJCQl0ZCgkdGh1bXJvdykNCgkJCQkudGQoJGF1dGhyb3csIDEwMCkNCgkJCQkudGQo JHZlcm93KQ0KCQkJCS50ZCgoKCRza2luZm8pPyAkc2tpbmZvWydkZXNjcmlwdGlvbiddIDog Jy0nKS4oKCRza2luZm8gJiYgJHNraW5mb1snaGVscCddKSA/ICcgJy5ocmVmKCdbJy5nVHh0 KCdoZWxwJykuJ10nLCAkc2tpbmZvWydoZWxwJ10pIDogJycpLCAyNTApDQoJCQkJLnRkKCRh Y3Ryb3csMjYwKQ0KCQkJLCAoKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIGNsYXNz PSJhY3RpdmUiJyA6ICcnKQ0KCQkJKTsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gJzxkaXYgY2xh c3M9InNtZF9jZWxsJy4oKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIGFjdGl2ZScg OiAnJykuJyI+JzsNCgkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJCWVj aG8gJzxkaXYgY2xhc3M9InNtZF9hdXRoIj4nLiR2ZXJvdy5zbWRfYXRfZ1R4dCgnYnknKS4k YXV0aHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hY3Rpb25zIj4n LiRhY3Ryb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8L2Rpdj4nOw0KCQl9DQoJfQ0KDQoJaWYg KCRsYXlvdXQ9PSIwIikgew0KCQllY2hvICc8L3RkPjwvdHI+JzsNCgkJZWNobyBlbmRUYWJs ZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jbGVhciI+PC9kaXY+ PC9kaXY+JzsNCgl9DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBuLm5hdl9mb3JtKCRzbWRf YXRfZXZlbnQsICRwYWdlLCAkbnVtUGFnZXMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOw0K CWVjaG8gbi5wYWdlYnlfZm9ybSgkc21kX2F0X2V2ZW50LCAkcGFnZWJ5KTsNCn0NCg0KZnVu Y3Rpb24gc21kX2F0X2ZlZWQoJGZlZWQpIHsNCglnbG9iYWwgJGZlZWRzOw0KDQoJJGZlZWQ9 cHJlZ19yZXBsYWNlKCIvPiIuIltbOnNwYWNlOl1dKyIuIjwvaSIsICI+PCIsICRmZWVkKTsg Ly8gS2lsbCB3aGl0ZXNwYWNlIGluIGZlZWQNCgkkeG1scGFyc2VyID0geG1sX3BhcnNlcl9j cmVhdGUoKTsNCgl4bWxfc2V0X2VsZW1lbnRfaGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0 X2ZlZWRfc3RhcnRfdGFnIiwgInNtZF9hdF9mZWVkX2VuZF90YWciKTsNCgl4bWxfc2V0X2No YXJhY3Rlcl9kYXRhX2hhbmRsZXIoJHhtbHBhcnNlciwgInNtZF9hdF9mZWVkX3RhZ19jb250 ZW50cyIpOw0KCXhtbF9wYXJzZSgkeG1scGFyc2VyLCAkZmVlZCk7DQoJeG1sX3BhcnNlcl9m cmVlKCR4bWxwYXJzZXIpOw0KDQoJcmV0dXJuICRmZWVkczsNCn0NCg0KZnVuY3Rpb24gc21k X2F0X2ZlZWRfc3RhcnRfdGFnKCRwYXJzZXIsICRuYW1lLCAkYXR0cmlicykgew0KCWdsb2Jh bCAkc21kX2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFnOw0KCWlmICgkbmFtZSA9PSAiRU5U UlkiKSB7DQoJCSRzbWRfYXRfZmVlZGluID0gdHJ1ZTsNCgl9DQoJaWYgKCRzbWRfYXRfZmVl ZGluKSB7DQoJCSRzbWRfYXRfZmVlZHRhZyA9ICRuYW1lOw0KCX0NCn0NCmZ1bmN0aW9uIHNt ZF9hdF9mZWVkX2VuZF90YWcoJHBhcnNlciwgJG5hbWUpIHsNCglnbG9iYWwgJHNtZF9hdF9m ZWVkaW4sICRzbWRfYXRfZmVlZHRhZywgJHNtZF9hdF9mZWVkbmFtZTsNCglpZiAoJG5hbWUg PT0gIkVOVFJZIikgew0KCQkkc21kX2F0X2ZlZWRpbiA9IGZhbHNlOw0KCQkkc21kX2F0X2Zl ZWRuYW1lID0gJyc7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBzbWRfYXRfZmVlZF90YWdfY29udGVu dHMoJHBhcnNlciwgJGRhdGEpIHsNCglnbG9iYWwgJHNtZF9hdF9mZWVkaW4sICRzbWRfYXRf ZmVlZHRhZywgJHNtZF9hdF9mZWVkbmFtZSwgJGZlZWRzOw0KCWlmICgkc21kX2F0X2ZlZWRp bikgew0KCQlpZiAoJHNtZF9hdF9mZWVkdGFnID09ICJOQU1FIikgew0KCQkJJGZlZWRzWyRk YXRhXSA9ICcnOw0KCQkJJHNtZF9hdF9mZWVkbmFtZSA9ICRkYXRhOw0KCQl9DQoJCWlmIChp c3NldCgkZmVlZHNbJHNtZF9hdF9mZWVkbmFtZV0pKSB7DQoJCQlpZiAoJHNtZF9hdF9mZWVk dGFnID09ICJUSVRMRSIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJTVU1NQVJZIiB8fCAkc21k X2F0X2ZlZWR0YWcgPT0gIlVQREFURUQiIHx8ICRzbWRfYXRfZmVlZHRhZyA9PSAiSUQiIHx8 ICRzbWRfYXRfZmVlZHRhZyA9PSAiTElOSyIpIHsNCgkJCQkkZmVlZHNbJHNtZF9hdF9mZWVk bmFtZV1bc3RydG9sb3dlcigkc21kX2F0X2ZlZWR0YWcpXSA9ICRkYXRhOw0KCQkJfQ0KCQl9 DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlbW92ZSBoYXJk IHNwYWNlcyBpbiB0aGUgdXBsb2FkX2Zvcm0gc28gT3BlcmEgYW5kIElFIHdyYXAgdGhlIGJ1 dHRvbnMNCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfZm9ybSgkZXZlbnQsICRzdGVwLCAkZGF0 YSwgJGFyZ3MpIHsNCglyZXR1cm4gc3RyX3JlcGxhY2UoJyYjMTYwOycsICcgJywgJGRhdGEp Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9l ZGl0KCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRfYXRfZXZlbnQsICRzbWRfYXRfc3R5 bGVzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCAnbmV3X3NraW4n LCAnZmlsZScpKSkpOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRs YXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVm c1snc21kX2F0X2xheW91dCddIDogMTsNCg0KCSRlZGl0YWJsZSA9IGFycmF5KCJzc2MiLCAi Y3NzIiwgImpzIiwgInBocCIpOw0KCSRpbWFnYWJsZSA9IGFycmF5KCJqcGciLCAianBlZyIs ICJnaWYiLCAicG5nIik7DQoJJG1heF9maWxlX3NpemUgPSAyICogMTAyNCAqIDEwMjQ7DQoN Cgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsNCgkkZmlsZSA9IChlbXB0 eSgkbmV3X3NraW4pKSA/ICRmaWxlIDogJG5ld19za2luOw0KCSRmaWxlcyA9IHNtZF9hdF9s aXN0ZGlyKFRIRU1FLiRza2luKTsNCglzb3J0KCRmaWxlcyk7DQoNCgkvLyBTcGxpdCB0aGUg bGlzdCBpbnRvIGl0cyBkaXJlY3RvcnkgZ3JvdXBzDQoJJGFsbGZpbGVzID0gYXJyYXkoKTsN Cglmb3JlYWNoICgkZmlsZXMgYXMgJGN1cnJmaWxlKSB7DQoJCSRmaWxlX2luZm8gPSBwYXRo aW5mbygkY3VycmZpbGUpOw0KCQkvLyBJZ25vcmUgYW55IHJvZ3VlIFN1YnZlcnNpb24gZmls ZXMNCgkJaWYgKHN0cnBvcygkZmlsZV9pbmZvWydkaXJuYW1lJ10sICcvLnN2bicpID09PSBm YWxzZSkgew0KCQkJJGZpbGVfdHlwZSA9IChpc3NldCgkZmlsZV9pbmZvWydleHRlbnNpb24n XSkpID8gJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10gOiAnb3RoZXInOw0KCQkJJGFsbGZpbGVz WyRmaWxlX3R5cGVdW10gPSAkY3VycmZpbGU7DQoJCX0NCgl9DQoNCglpZiAoZ3BzKCdzbWRf YXRfZWRpdHMnKSkgew0KCQkkY29udGVudHMgPSBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxu JywnDQonLGdwcygnc21kX2F0X2VkaXRzJykpKTsgLy8gbmV3bGluZSB3b3JrYXJvdW5kDQoJ fSBlbHNlIHsNCgkJJGNvbnRlbnRzID0gJyc7DQoJCWlmICgkZmlsZSAmJiBmaWxlX2V4aXN0 cyhUSEVNRS4kc2tpbi5EUy4kZmlsZSkpIHsNCgkJCSRjb250ZW50cyA9IGZpbGUoVEhFTUUu JHNraW4uRFMuJGZpbGUpOw0KCQkJJGNvbnRlbnRzID0gam9pbigiIiwgJGNvbnRlbnRzKTsN CgkJfQ0KCX0NCg0KCS8vIEJlZ2luIHJlbmRlcmluZyB0aGUgcGFnZQ0KCXBhZ2V0b3Aoc21k X2F0X2dUeHQoJ2VkaXRfbGJsJyksJG1lc3NhZ2UpOw0KDQoJZWNobyAnPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4nOw0KCWVjaG8gJHNtZF9hdF9zdHlsZXNbJ2VkaXQnXTsNCgllY2hvICc8 L3N0eWxlPic7DQoNCgkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCS8v IHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRvIGJlIHRoZSBzYW1l IGluIHRoaXMgY2FzZQ0KCSRza2luc2VsID0gYXJyYXkoKTsNCglmb3JlYWNoKCRza2luX2xp c3QgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkkc2tpbnNlbFskdmFsdWUxXSA9ICRza2lu X2xpc3RbJGtleTFdOw0KICAgfQ0KCSRza2luQ2hhbmdlID0gJzxmb3JtIG5hbWU9InNraW5j aGFuZ2UiIGFjdGlvbj0iaW5kZXgucGhwIj4nDQoJCS4gZUlucHV0KCRzbWRfYXRfZXZlbnQp DQoJCS4gc0lucHV0KCdzbWRfYXRfZWRpdCcpDQoJCS4gc2VsZWN0SW5wdXQoJ3NraW4nLCAk c2tpbnNlbCwgJHNraW4sIDAsIDEpDQoJCS4gJzwvZm9ybT4nOw0KDQoJJGZpbGVMaXN0ID0g aGVkKHNtZF9hdF9nVHh0KCdza2luX2ZpbGVzJyksMikNCgkJLiAkc2tpbkNoYW5nZQ0KCQku IHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVmdCcsICdzbWRfc2tpbl9maWxldHlwZXMnKTsNCgkk ZmlsZUxpc3QgLj0gJzxiciAvPjxhIGNsYXNzPSJuYXZsaW5rIiBocmVmPSI/ZXZlbnQ9Jy4k c21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X25ld2ZpbGUnLmEuJ3NraW49Jy4kc2tpbi4n Ij4nLnNtZF9hdF9nVHh0KCduZXdfZmlsZScpLic8L2E+JzsNCgkkZmlsZUxpc3QgLj0gJyA8 YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nIj4nLnNt ZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ICdza2luX2xpc3QnIDogJ3NraW5fZ3JpZCcp KS4nPC9hPjxiciAvPic7DQoJJG90aGVycyA9IGFycmF5KCk7DQoNCglmb3JlYWNoICgkZWRp dGFibGUgYXMgJGZpbGV0eXBlKSB7DQoJCWlmIChpc3NldCgkYWxsZmlsZXNbJGZpbGV0eXBl XSkpIHsNCgkJCWZvcmVhY2ggKCRhbGxmaWxlc1skZmlsZXR5cGVdIGFzICRpZHggPT4gJGN1 cnJmaWxlKSB7DQoJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkkZmlsZUxpc3QgLj0gdHIo dGQoaGVkKHNtZF9hdF9nVHh0KCRmaWxldHlwZSksMykpKTsNCgkJCQl9DQoJCQkJJGp1c3Rm aWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJCQkkYmFzZWZpbGUgPSBhcnJheV9zaGlm dChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJCQkJJGVkaXQgPSAnPGEgaHJlZj0iP2V2 ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNr aW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUgPT0gJGp1c3RmaWxlKSA/IHN0 cm9uZygkanVzdGZpbGUpIDogJGp1c3RmaWxlKS4nPC9hPic7DQoJCQkJJGRlbCA9ICgkYmFz ZWZpbGUgPT0gJHNraW4pID8gJycgOiBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2Rl bGV0ZScsICdmaWxlJywgJGp1c3RmaWxlLCAxLCAnc2tpbicsICRza2luKTsNCgkJCQkkZmls ZUxpc3QgLj0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJ CS8vIFNvbWUgb3RoZXIgZmlsZSB0eXBlDQoJCQlpZiAoISRvdGhlcnMpIHsNCgkJCQlmb3Jl YWNoICgkYWxsZmlsZXMgYXMgJGZ0eXBlID0+ICRmbHMpIHsNCgkJCQkJaWYgKCFpbl9hcnJh eSgkZnR5cGUsIGFycmF5X21lcmdlKCRlZGl0YWJsZSwgJGltYWdhYmxlKSkpIHsNCgkJCQkJ CWZvcmVhY2ggKCRhbGxmaWxlc1skZnR5cGVdIGFzICRpZHggPT4gJGN1cnJmaWxlKSB7DQoJ CQkJCQkJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJCQkJCQkkYmFzZWZp bGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJCQkJCQkJJGVk aXQgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9l ZGl0Jy5hLidza2luPScuJHNraW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUg PT0gJGp1c3RmaWxlKSA/IHN0cm9uZygkanVzdGZpbGUpIDogJGp1c3RmaWxlKS4nPC9hPic7 DQoJCQkJCQkJJGRlbCA9ICgkYmFzZWZpbGUgPT0gJHNraW4pID8gJycgOiBkTGluaygkc21k X2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZScsICdmaWxlJywgJGp1c3RmaWxlLCAxLCAnc2tp bicsICRza2luKTsNCgkJCQkJCQkkb3RoZXJzW10gPSB0cih0ZCgkZWRpdCkudGQoJGRlbCkp Ow0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCSRmaWxlTGlzdCAu PSAoJG90aGVycykgPyB0cih0ZChoZWQoc21kX2F0X2dUeHQoJ290aGVyX2ZpbGVzJyksMykp KS4gam9pbihuLCAkb3RoZXJzKSA6ICcnOw0KCSRmaWxlTGlzdCAuPSBlbmRUYWJsZSgpOw0K DQoJLy8gTWFrZSB0aGUgbGlzdCBvZiBpbWFnZXMgZm9yIHRoaXMgc2tpbg0KCSRxcyA9IGFy cmF5KA0KCQkiZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJzdGVwIiA9PiAnc21kX2F0 X2RlbGV0ZV9pbWFnZScsDQoJKTsNCgkkc2VsW10gPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBp ZD0ic21kX2F0X2ltYWdlZm9ybSIgbmFtZT0ic21kX2F0X2ltYWdlZm9ybSIgYWN0aW9uPSIn LmpvaW5fcXMoJHFzKS4nIj4nOw0KCSRzZWxbXSA9ICc8c2VsZWN0IGlkPSJzbWRfYXRfaW1h Z2VzIiBuYW1lPSJzbWRfYXRfaW1hZ2VzW10iIGNsYXNzPSJsaXN0IiBzaXplPSIyNCIgbXVs dGlwbGU9Im11bHRpcGxlIiBzdHlsZT0id2lkdGg6MTU0cHg7Ij4nOw0KDQoJaWYgKGRlZmlu ZWQoJ0dMT0JfQlJBQ0UnKSkgew0KCQkkaW1nID0gZ2xvYihUSEVNRS4kc2tpbi5EUy4neyou anBnLCouZ2lmLCoucG5nfScsIEdMT0JfQlJBQ0UpOw0KCX0gZWxzZSB7DQoJCSRpbWcgPSBh cnJheV9tZXJnZShnbG9iKFRIRU1FLiRza2luLkRTLicqLmpwZycpLGdsb2IoVEhFTUUuJHNr aW4uRFMuJyouZ2lmJyksZ2xvYihUSEVNRS4kc2tpbi5EUy4nKi5wbmcnKSk7DQoJfQ0KDQoJ aWYoaXNfYXJyYXkoJGltZykpIHsNCgkJZm9yZWFjaCAoJGltZyBhcyAkaW1nZmlsZSkgew0K CQkJJHNlbFtdID0gdC4nPG9wdGlvbiB2YWx1ZT0iJy4kaW1nZmlsZS4nIj4nLmJhc2VuYW1l KCRpbWdmaWxlKS4nPC9vcHRpb24+JzsNCgkJfQ0KCX0NCgkkc2VsW10gPSAnPC9zZWxlY3Q+ JzsNCgkkc2VsW10gPSBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZV9pbWFn ZScsICdza2luJywgJHNraW4sIDEpOw0KCSRzZWxbXSA9ICc8L2Zvcm0+JzsNCgkkc2VsID0g am9pbignJywkc2VsKTsNCg0KCS8vIEltYWdlIHBvcnRpb24NCgkkaW1nYml0ID0gaGVkKHNt ZF9hdF9nVHh0KCdza2luX2ltYWdlcycpLCAyKSAuIHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVm dCcpOw0KCSRpbWdiaXQgLj0gdHIodGQoJHNlbCkpOw0KCSRpbWdiaXQgLj0gdHIodGQodXBs b2FkX2Zvcm0oc21kX2F0X2dUeHQoJ3VwbG9hZF9pbWFnZScpLCAnJywgJ3NtZF9hdF91cGxv YWRfaW1hZ2UnLCAkc21kX2F0X2V2ZW50LCAkc2tpbiwgJG1heF9maWxlX3NpemUsICcnLCAn JyksIDE1MCkpOw0KCSRpbWdiaXQgLj0gZW5kVGFibGUoKTsNCg0KCS8vIFJlbmRlciB0aGUg cmVzdCBvZiB0aGUgcGFnZQ0KCWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcpLg0KCXRyKA0KCQl0 ZHRsKCRpbWdiaXQpLg0KCQl0ZCgNCgkJCWhlZCgoKCRza2luZm8pID8gJHNraW5mb1snZG5h bWUnXSA6ICRza2luKSwxKS4NCgkJCWZvcm0oDQoJCQkJJzxpbnB1dCB0eXBlPSJ0ZXh0IiBu YW1lPSJuZXdfc2tpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkZmlsZSkuJyIgY2xh c3M9ImVkaXQiIHNpemU9IjQwIiB0YWJpbmRleD0iMiIgc3R5bGU9Im1hcmdpbi1ib3R0b206 MTBweDsiIC8+Jy5icg0KCQkJCS4nPHRleHRhcmVhIGlkPSJzbWRfYXRfZWRpdHMiIGNsYXNz PSJjb2RlIiBuYW1lPSJzbWRfYXRfZWRpdHMiIGNvbHM9Ijc2IiByb3dzPSIzMiI+Jy5odG1s c3BlY2lhbGNoYXJzKCRjb250ZW50cykuJzwvdGV4dGFyZWE+Jy5icg0KCQkJCS5mSW5wdXQo J3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJykNCgkJCQkuZUlucHV0KCRzbWRf YXRfZXZlbnQpLnNJbnB1dCgnc21kX2F0X3NhdmUnKQ0KCQkJCS5oSW5wdXQoJ3NraW4nLCRz a2luKQ0KCQkJCS5oSW5wdXQoJ2ZpbGUnLCRmaWxlKQ0KCQkJKQ0KCQkpLg0KCQl0ZHRsKCRm aWxlTGlzdCkNCgkpLg0KCWVuZFRhYmxlKCk7DQoNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBKdXN0IGNsZWFyIG91dCB0aGUgdmFyIHNvIHRoZSBzYXZlIGZ1bmN0 aW9uIHRyZWF0cyB0aGUgY29udGVudCBhcyBhIG5ldyBmaWxlDQpmdW5jdGlvbiBzbWRfYXRf bmV3ZmlsZSgpIHsNCgkkX1BPU1RbJ2ZpbGUnXSA9ICcnOw0KCSRtZXNzYWdlPScnOw0KCXNt ZF9hdF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfY2xvbmUoKSB7DQoJZ2xvYmFsICR0eHBfdXNlcjsNCg0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJykpKSk7DQoJJG1z Zz0nJzsNCg0KCSRuZXdfc2tpbiA9IHRyaW0oJG5ld19za2luKTsNCgkkbmV3X3NraW4gPSBy YXd1cmxlbmNvZGUoJG5ld19za2luKTsNCg0KCWlmIChlbXB0eSgkbmV3X3NraW4pKSB7DQoJ CSRtc2cgPSBzbWRfYXRfZ1R4dCgnbmFtZV9lbXB0eScpOw0KCX0NCg0KCS8vIENoZWNrIHRo ZSBuZXcgbmFtZSBpc24ndCBhbHJlYWR5IGluIHVzZQ0KCSR0aGVtZXMgPSBzbWRfYXRfcmVh ZF9za2lucygpOw0KDQoJaWYgKGluX2FycmF5KCRuZXdfc2tpbiwgJHRoZW1lcykpIHsNCgkJ JG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2V4aXN0cycsIGFycmF5KCd7bmFtZX0nID0+ICRu ZXdfc2tpbikpOw0KCX0NCg0KCS8vIE5vIGVycm9ycywgc28gbWFrZSBhIG5ldyBkaXIgYW5k IGNyZWF0ZSB0aGUgUEhQIGZpbGUNCglpZiAoJG1zZz09JycpIHsNCgkJJGNvbnRlbnQgPSAn JzsNCgkJJGRlc3RkaXIgPSBUSEVNRS4kbmV3X3NraW4uRFM7DQoJCSRyZXMgPSBta2Rpcigk ZGVzdGRpcik7DQoJCSRiYXNlZCA9ICcnOw0KDQoJCWlmICgkc2tpbikgew0KCQkJLy8gQmFz ZWQgb24gYW4gZXhpc3RpbmcgdGhlbWUuIE5vIG5lZWQgZm9yIGFueSBmdW5jdGlvbnMgb3Ro ZXIgdGhhbiBtYW5pZmVzdCgpDQoJCQkkYmFzZWQgPSAidGhlbWU6OmJhc2VkX29uKCciLiRz a2luLiInKTsiOw0KCQkJJGV4dGVuZHMgPSAkc2tpbi4nX3RoZW1lJzsNCgkJCSRzcmNzcyA9 IFRIRU1FLiRza2luLkRTLid0ZXh0cGF0dGVybi5jc3MnOw0KCQkJaWYgKGZpbGVfZXhpc3Rz KCRzcmNzcykgJiYgZmlsZXNpemUoJHNyY3NzKSA+IDApIHsNCgkJCQkkaW1wb3J0ID0gam9p bignJywgZmlsZSgkc3Jjc3MpKTsNCgkJCX0gZWxzZSB7DQoJCQkJJGltcG9ydCA9ICdAaW1w b3J0IHVybCgiLi4vY2xhc3NpYy90ZXh0cGF0dGVybi5jc3MiKTsnOw0KCQkJfQ0KCQkJJGNv bnRlbnQgPSAneyc7DQoJCX0gZWxzZSB7DQoJCQkvLyBCcmFuZCBzcGFua2luZyBuZXcgdGhl bWUuIENsb25lICdjbGFzc2ljJyBmdW5jdGlvbnMgdGhlbiBhZGQgbmV3IG1hbmlmZXN0KCkN CgkJCSRleHRlbmRzID0gJ3RoZW1lJzsNCgkJCSRpbXBvcnQgPSAnJzsNCgkJCSRzcmMgPSB0 eHBhdGguRFMuVEhFTUUuJ2NsYXNzaWMnLkRTLidjbGFzc2ljLnBocCc7DQoJCQkkZ3JhYiA9 IGZhbHNlOw0KCQkJJGZwID0gZmlsZSgkc3JjKTsNCg0KCQkJZm9yZWFjaCgkZnAgYXMgJGxp bmUpIHsNCgkJCQkkbGluZSA9IHJ0cmltKCRsaW5lKTsNCgkJCQlpZiAoc3RycG9zKCRsaW5l LCAnZnVuY3Rpb24gbWFuaWZlc3QoKScpICE9PSBmYWxzZSkgew0KCQkJCQkkZ3JhYiA9IGZh bHNlOyAvLyB1bm5lY2Vzc2FyeT8NCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWlmICgkZ3Jh Yikgew0KCQkJCQkkY29udGVudCAuPSAkbGluZS5uOw0KCQkJCX0NCgkJCQlpZiAoc3RycG9z KCRsaW5lLCAnY2xhc3MgY2xhc3NpY190aGVtZSBleHRlbmRzIHRoZW1lJykgIT09IGZhbHNl KSB7DQoJCQkJCSRncmFiID0gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBtYW5p ZmVzdCBmaWVsZHMNCgkJJG1hbnVzZXIgPSBnZXRfYXV0aG9yX25hbWUoJHR4cF91c2VyKTsN CgkJJG1hbnRpdGxlID0gdWN3b3JkcygkbmV3X3NraW4pOw0KDQoJCS8vIFdyaXRlIHRoZSBu ZXcgUEhQIGZpbGUNCgkJJGJ1ZiA9IDw8PEVPRg0KPD9waHANCg0KaWYgKCFkZWZpbmVkKCd0 eHBpbnRlcmZhY2UnKSkgZGllKCd0eHBpbnRlcmZhY2UgaXMgdW5kZWZpbmVkLicpOw0KDQp7 JGJhc2VkfQ0KDQpjbGFzcyB7JG5ld19za2lufV90aGVtZSBleHRlbmRzIHskZXh0ZW5kc30N CnskY29udGVudH0NCg0KCWZ1bmN0aW9uIG1hbmlmZXN0KCkNCgl7DQoJCXJldHVybiBhcnJh eSgNCgkJCSd0aXRsZScJIAkJPT4gJ3skbWFudGl0bGV9JywNCgkJCSdhdXRob3InIAkJPT4g J3skbWFudXNlcn0nLA0KCQkJJ2F1dGhvcl91cmknIAk9PiAnJywNCgkJCSd2ZXJzaW9uJyAJ CT0+ICcxLjAnLA0KCQkJJ2Rlc2NyaXB0aW9uJyAJPT4gJycsDQoJCQknaGVscCcgCQkJPT4g JycsDQoJCSk7DQoJfQ0KfQ0KPz4NCkVPRjsNCg0KCQkkZnAgPSBmb3BlbigkZGVzdGRpci4k bmV3X3NraW4uJy5waHAnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGJ1Zik7DQoJCWZjbG9z ZSgkZnApOw0KDQoJCS8vIENyZWF0ZSB0aGUgQ1NTIGZpbGUNCgkJJGZwID0gZm9wZW4oJGRl c3RkaXIuJ3RleHRwYXR0ZXJuLmNzcycsICJ3YiIpOw0KCQlmd3JpdGUoJGZwLCAkaW1wb3J0 KTsNCgkJZmNsb3NlKCRmcCk7DQoNCgkJaWYgKCRza2luKSB7DQoJCQkkbXNnID0gc21kX2F0 X2dUeHQoJ3NraW5fY2xvbmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7Ow0K CQl9IGVsc2Ugew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2NyZWF0ZWQnLCBhcnJh eSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTs7DQoJCX0NCg0KLy8JJG1zZyA9IHNtZF9hdF9n VHh0KCdza2luX25vdF9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7 Ow0KDQoJfQ0KDQoJc21kX2F0X2xpc3QoJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2NydXNoX29wdGlvbnMoJGRpcmVjdGlvbj0n ZXhwb3J0Jykgew0KCSRzbWRfY3J1c2hlcnMgPSBhcnJheSgndGFyJyA9PiBzbWRfYXRfZ1R4 dCgnY190YXInKSk7DQoNCglpZiAoJGRpcmVjdGlvbiA9PSAnZXhwb3J0Jykgew0KCQlpZiAo ZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdnem9w ZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2d6d3JpdGUnKSkgew0KCQkJJHNtZF9jcnVzaGVy c1snZ3ppcCddID0gc21kX2F0X2dUeHQoJ2NfZ3ppcCcpOw0KCQkJJHNtZF9jcnVzaGVyc1sn emlwJ10gPSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgkJfQ0KCQlpZiAoZnVuY3Rpb25fZXhp c3RzKCdiemNvbXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdiem9wZW4nKSAmJiBmdW5j dGlvbl9leGlzdHMoJ2J6d3JpdGUnKSkgew0KCQkJJHNtZF9jcnVzaGVyc1snYnppcDInXSA9 IHNtZF9hdF9nVHh0KCdjX2J6aXAyJyk7DQoJCX0NCgl9IGVsc2Ugew0KCQkvLyBJbXBvcnQg ZnVuY3Rpb24gcmVxdWlyZW1lbnRzDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0 ZScpKSB7DQoJCQkkc21kX2NydXNoZXJzWydnemlwJ10gPSBzbWRfYXRfZ1R4dCgnY19nemlw Jyk7DQoJCQkkc21kX2NydXNoZXJzWyd6aXAnXSA9IHNtZF9hdF9nVHh0KCdjX3ppcCcpOw0K CQl9DQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2J6ZGVjb21wcmVzcycpKSB7DQoJCQkkc21k X2NydXNoZXJzWydiemlwMiddID0gc21kX2F0X2dUeHQoJ2NfYnppcDInKTsNCgkJfQ0KCX0N CglyZXR1cm4gJHNtZF9jcnVzaGVyczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfZXhwb3J0KCkgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRf YXRfcHJlZnM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsJ2NydXNo JykpKSk7DQoJJG1lc3NhZ2U9Jyc7DQoJY2hkaXIoVEhFTUUpOw0KCSRza2luZm8gPSBzbWRf YXRfcmVhZF9za2luZm8oJHNraW4pOw0KCSRyZXBzID0gYXJyYXkoDQoJCSd7dGhlbWV9JyA9 PiAkc2tpbiwNCgkJJ3t2ZXJzaW9ufScgPT4gJHNraW5mb1sndmVyc2lvbiddLA0KCSk7DQoJ JG91dCA9IHN0cnRyKGdldF9wcmVmKCdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0JywgJHNtZF9h dF9wcmVmc1swXVsnc21kX2F0X2ZpbGVuYW1lX2Zvcm1hdCddKSwgJHJlcHMpOw0KDQoJLy8g Q2hlY2sgdGhlIHBhc3NlZCBjb21wcmVzc2lvbiBmb3JtYXQgaXMgdmFsaWQ7IHVzZSBkZWZh dWx0IGlmIG5vdA0KCSRjcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCk7DQoJaWYg KCRjcnVzaD09JycgfHwgJGNydXNoPT0ndW5kZWZpbmVkJyB8fCAhYXJyYXlfa2V5X2V4aXN0 cygkY3J1c2gsICRjcnVzaGVycykpIHsNCgkJJGNydXNoID0gZ2V0X3ByZWYoJ3NtZF9hdF9j cnVzaCcsICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF9jcnVzaCddKTsNCgl9DQoNCglzd2l0 Y2goJGNydXNoKSB7DQoJCWNhc2UgJ3ppcCc6DQoJCQkkemlwID0gbmV3IHNtZF9hdF96aXBf ZmlsZSgkb3V0LicuemlwJyk7DQoJCQlicmVhazsNCgkJY2FzZSAnYnppcDInOg0KCQkJJHpp cCA9IG5ldyBzbWRfYXRfYnppcF9maWxlKCRvdXQuJy50YnoyJyk7DQoJCQlicmVhazsNCgkJ Y2FzZSAndGFyJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3Rhcl9maWxlKCRvdXQuJy50YXIn KTsNCgkJCWJyZWFrOw0KCQljYXNlICdnemlwJzoNCgkJZGVmYXVsdDoNCgkJCSR6aXAgPSBu ZXcgc21kX2F0X2d6aXBfZmlsZSgkb3V0LicudGd6Jyk7DQogCQkJYnJlYWs7DQoJfQ0KDQoJ JHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+IHR4cGF0aC5EUy5USEVNRSwg J292ZXJ3cml0ZScgPT4gMSwgJ2lubWVtb3J5JyA9PiAxKSk7DQoJJHppcC0+YWRkX2ZpbGVz KCRza2luLkRTLicqLionKTsNCgkkemlwLT5leGNsdWRlX2ZpbGVzKCRza2luLkRTLicqLnN2 bionKTsNCgkkemlwLT5jcmVhdGVfYXJjaGl2ZSgpOw0KCSR6aXAtPmRvd25sb2FkX2ZpbGUo KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRf aW1wb3J0KCkgew0KCWdsb2JhbCAkcHJlZnM7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZp bGUnXVsnbmFtZSddOw0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhl ZmlsZSddWyd0bXBfbmFtZSddLCB0eHBhdGguRFMuVEhFTUUuYmFzZW5hbWUoJF9GSUxFU1sn dGhlZmlsZSddWyd0bXBfbmFtZSddKSk7DQoJJGJhc2VkaXIgPSB0eHBhdGguRFMuVEhFTUU7 DQoJJHVuY3J1c2hlcnMgPSBzbWRfYXRfY3J1c2hfb3B0aW9ucygnaW1wb3J0Jyk7DQoJJG1l c3NhZ2U9Jyc7DQoJJGluZm8gPSBleHBsb2RlICgnLicsJG5hbWUpOw0KCSRsYXN0cGFydCA9 IGNvdW50KCRpbmZvKS0xOw0KCSRleHQgPSAkaW5mb1skbGFzdHBhcnRdOw0KDQoJaWYgKCRu YW1lICYmICRmaWxlKSB7DQoJCWlmICgkZXh0ID09ICd6aXAnICYmIGFycmF5X2tleV9leGlz dHMoJ3ppcCcsICR1bmNydXNoZXJzKSkgew0KCQkJJHppcCA9IG5ldyBzbWRfZFVuemlwMigk ZmlsZSk7DQovLwkJCSR6aXAtPmRlYnVnID0gdHJ1ZTsNCgkJCSR6aXAtPmdldExpc3QoKTsN CgkJCSR2YWxpZEFyY2hpdmUgPSBzbWRfYXRfY2hlY2tfYXJjaGl2ZSgkemlwLT5jb21wcmVz c2VkTGlzdCwgJGV4dCk7DQoJCQlpZiAoJHZhbGlkQXJjaGl2ZSkgew0KCQkJCSR6aXAtPnVu emlwQWxsKCRiYXNlZGlyKTsNCgkJCQkkemlwLT5jbG9zZSgpOw0KCQkJCSRtZXNzYWdlID0g c21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9 IGFycmF5KHNtZF9hdF9nVHh0KCdpbXBvcnRfZmFpbGVkJyksIEVfV0FSTklORyk7DQoJCQl9 DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAndGd6JyAmJiBhcnJheV9rZXlfZXhpc3RzKCdnemlw JywgJHVuY3J1c2hlcnMpKSB7DQoJCQkkemlwID0gbmV3IHNtZF9hdF9nemlwX2ZpbGUoYmFz ZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9 PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxl cygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxz ZSBpZiAoJGV4dCA9PSAndGJ6MicgJiYgYXJyYXlfa2V5X2V4aXN0cygnYnppcDInLCAkdW5j cnVzaGVycykpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2J6aXBfZmlsZShiYXNlbmFtZSgk ZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNl ZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5leHRyYWN0X2ZpbGVzKCk7DQoJ CQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJfSBlbHNlIGlmICgk ZXh0ID09ICd0YXInKSB7DQoJCQkkemlwID0gbmV3IHNtZF9hdF90YXJfZmlsZShiYXNlbmFt ZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRi YXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5leHRyYWN0X2ZpbGVzKCk7 DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJfSBlbHNlIHsN CgkJCSRtZXNzYWdlID0gYXJyYXkoc21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVkX2NvbXByZXNz aW9udHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAkZXh0KSksIEVfV0FSTklORyk7DQoJCX0N Cg0KCQkvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlDQoJCXVubGluaygkZmlsZSk7DQoJ fSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZW1wdHlfaW5mbycpOw0KCX0N Cg0KCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCn0NCg0KLy8gQ2hlY2sgdGhlIGRpcmVjdG9y eSBzdHJ1Y3R1cmUgb2YgdGhlIGFyY2hpdmUgZm9yIHZhcmlvdXMgaXRlbXMvYXR0cmlidXRl cy4NCi8vIEVhY2ggdGltZSBvbmUgb2YgdGhlIGNvbmRpdGlvbnMgaXMgbWV0LCB0aGUgdmNu dCBpcyBpbmNyZW1lbWVudGVkLg0KLy8gT25jZSB0aGUgd2hvbGUgYXJjaGl2ZSBoYXMgYmVl biByZWFkLCBpZiB0aGUgdmNudCBtYXRjaGVzIHRoZSBleHBlY3RlZENvdW50cyBmb3INCi8v IHRoYXQgdHlwZSwgdGhlIGFyY2hpdmUgaXMgdmFsaWQuDQpmdW5jdGlvbiBzbWRfYXRfY2hl Y2tfYXJjaGl2ZSgkc3RydWN0LCAkdHlwZT0nemlwJykgew0KCSRleHBlY3RlZENvdW50cyA9 IGFycmF5KCd6aXAnID0+IDEsICd0Z3onID0+IDAsICd0YnoyJyA9PiAwLCAndGFyJyA9PiAw KTsNCglzd2l0Y2ggKCR0eXBlKSB7DQoJCWNhc2UgInppcCI6DQoJCQkkdmNudCA9IDA7DQoJ CQlmb3JlYWNoICgkc3RydWN0IGFzICRlbnRyeSA9PiAkaW5mbykgew0KCQkJCSRwYXJ0cyA9 IHBhdGhpbmZvKCRpbmZvWydmaWxlX25hbWUnXSk7DQoJCQkJaWYgKGlzc2V0KCRwYXJ0c1sn ZXh0ZW5zaW9uJ10pICYmICRwYXJ0c1snZXh0ZW5zaW9uJ10gPT0gJ3BocCcpIHsNCgkJCQkJ JGRpcmJpdHMgPSBleHBsb2RlKERTLCAkcGFydHNbJ2Rpcm5hbWUnXSk7DQoJCQkJCSRudW1k aXJzID0gY291bnQoJGRpcmJpdHMpOw0KCQkJCQlpZiAoKCRwYXJ0c1snZmlsZW5hbWUnXSA9 PSAkZGlyYml0c1skbnVtZGlycy0xXSkgJiYgJG51bWRpcnM9PTEpIHsNCgkJCQkJCSR2Y250 Kys7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlicmVhazsNCgl9DQoNCglyZXR1cm4gKCRl eHBlY3RlZENvdW50c1skdHlwZV0gPT0gJHZjbnQpID8gdHJ1ZSA6IGZhbHNlOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfaW1h Z2UoKSB7DQoJZ2xvYmFsICRmaWxlX21heF91cGxvYWRfc2l6ZTsNCg0KCWV4dHJhY3QoZG9T bGFzaChncHNhKGFycmF5KCdpZCcpKSkpOw0KCSRfUE9TVFsnc2tpbiddID0gJHNraW4gPSAk aWQ7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddOw0KCSRmaWxlID0g Z2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKTsNCgkk bWVzc2FnZT0nJzsNCg0KCWlmICgkZmlsZSA9PT0gZmFsc2UpIHsNCgkJJG1lc3NhZ2UgPSBn VHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuIiAkbmFtZSAtICIudXBsb2FkX2dldF9lcnJv cm1zZygkX0ZJTEVTWyd0aGVmaWxlJ11bJ2Vycm9yJ10pOw0KCQlzbWRfYXRfZWRpdCgkbWVz c2FnZSk7DQoJCWV4aXQoKTsNCgl9DQoNCgkkc2l6ZSA9IGZpbGVzaXplKCRmaWxlKTsNCglp ZiAoJGZpbGVfbWF4X3VwbG9hZF9zaXplIDwgJHNpemUpIHsNCgkJdW5saW5rKCRmaWxlKTsN CgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuIiAkbmFtZSAtICIu dXBsb2FkX2dldF9lcnJvcm1zZyhVUExPQURfRVJSX0ZPUk1fU0laRSk7DQoJCXNtZF9hdF9l ZGl0KCRtZXNzYWdlKTsNCgkJZXhpdCgpOw0KCX0NCg0KCSRza2luZm8gPSBzbWRfYXRfcmVh ZF9za2luZm8oJHNraW4pOw0KCSRuZXdfc2tpbiA9ICRza2luZm9bJ25hbWUnXTsNCgkkbmV3 cGF0aCA9ICRza2luZm9bJ3BhdGgnXTsNCg0KCWlmICgkbmV3X3NraW4gJiYgJGZpbGUpIHsN CgkJaWYoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmlsZSwgJG5ld3BhdGguJG5hbWUpKSB7DQoJ CQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1cGxvYWRfc3VjY2VzcycpOw0KCQl9IGVsc2Ug ew0KCQkJdW5saW5rKCRmaWxlKTsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3VwbG9h ZF9mYWlsZWQnKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQo J2VtcHR5X2luZm8nKTsNCgl9DQoNCglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2RlbGV0ZV9pbWFn ZSgpIHsNCglnbG9iYWwgJHNtZF9jb3JlX3RoZW1lczsNCg0KCWV4dHJhY3QoZG9TbGFzaChn cHNhKGFycmF5KCdza2luJykpKSk7DQoJJGZpbGVfbGlzdCA9IGdwcygnc21kX2F0X2ltYWdl cycpOw0KCSRtZXNzYWdlPScnOw0KDQoJaWYgKGVtcHR5KCRmaWxlX2xpc3QpKSB7DQoJCSRt ZXNzYWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9IGVsc2Ugew0KCQlpZiAo aW5fYXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNt ZF9hdF9nVHh0KCdjb3JlX3RoZW1lX2ZpbGUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikp Ow0KCQl9IGVsc2Ugew0KCQkJZm9yZWFjaCAoJGZpbGVfbGlzdCBhcyAkaW1hZ2UpIHsNCgkJ CQkkcGF0aCA9IHR4cGF0aC5EUy4kaW1hZ2U7DQoJCQkJdW5saW5rKCRwYXRoKTsNCgkJCX0N CgkJfQ0KCX0NCg0KCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZGVsZXRlKCkgew0KCWdsb2JhbCAk c21kX2NvcmVfdGhlbWVzLCAkdGhlbWUsICRzbWRfYXRfcHJpdnMsICRzbWRfYXRfZXZlbnQ7 DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICdmaWxlJykpKSk7DQoJ JG1lc3NhZ2U9Jyc7DQoNCglpZiAoJGZpbGUpIHsNCgkJLy8gRWRpdGluZyBhIHNraW4sIHRo dXMgZGVsZXRpbmcgYSBzaW5nbGUgZmlsZQ0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRzbWRf Y29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1l X2ZpbGUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQkJc21kX2F0X2VkaXQoJG1l c3NhZ2UpOw0KCQl9IGVsc2Ugew0KCQkJJGRlbCA9IHVubGluayhUSEVNRS4kc2tpbi5EUy4k ZmlsZSk7DQoJCQlpZiAoJGRlbCkgew0KCQkJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV9kZWxl dGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZpbGUpKTsNCgkJCQkkX1BPU1RbJ2ZpbGUnXSA9 ICcnOyAvLyBDbGVhciB0aGUgdmFyaWFibGUgc28gdGhlIGZpbGVuYW1lIGRvZXNuJ3QgYXBw ZWFyIG9uIHRoZSBlZGl0IHBhZ2UNCgkJCX0gZWxzZSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnZmlsZV9ub3RfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmaWxlKSk7 DQoJCQl9DQoJCX0NCgkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KCX0gZWxzZSB7DQoJCWlm IChpbl9hcnJheSgkc2tpbiwgJHNtZF9jb3JlX3RoZW1lcykpIHsNCgkJCSRtZXNzYWdlID0g c21kX2F0X2dUeHQoJ2NvcmVfdGhlbWUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0K CQkJc21kX2F0X2xpc3QoJG1lc3NhZ2UpOw0KCQl9IGVsc2Ugew0KCQkJLy8gVmlld2luZyB0 aGUgc2tpbiBsaXN0LCB0aHVzIGRlbGV0aW5nIHRoZSB3aG9sZSBza2luDQoJCQkkc2tpbmRp ciA9IFRIRU1FLiRza2luOw0KCQkJaWYgKCFzbWRfcm1kaXJfcmVjdXJzaXZlKCRza2luZGly KSkgew0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2RlbGV0ZV9mYWlsZWQnKTsNCgkJ CX0gZWxzZSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnc2tpbl9kZWxldGVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJHNraW4pKTsNCgkJCX0NCg0KCQkJLy8gSGFuZGxlIHNpdHVh dGlvbnMgaWYgY3VycmVudCBza2luIGhhcyBiZWVuIGRlbGV0ZWQNCgkJCWlmICghZmlsZV9l eGlzdHModHhwYXRoLkRTLlRIRU1FLiRza2luKSkgew0KCQkJCSRhdF9wcmVmcyA9IHNtZF9h dF9nZXRfcHJlZnMoKTsNCg0KCQkJCS8vIFJlc2V0IHRoZSBnbG9iYWwgc2tpbiBpbiBjYXNl IGl0J3MgYmVlbiBkZWxldGVkDQoJCQkJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1sn c21kX2F0X2dsb2JhbF9za2luJ10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2lu J10gOiAnJzsNCgkJCQkkZ2JsX3NraW4gPSAoJGdibF9za2luICE9ICcnICYmIGZpbGVfZXhp c3RzKHR4cGF0aC5EUy5USEVNRS4kZ2JsX3NraW4pKSA/ICRnYmxfc2tpbiA6ICdjbGFzc2lj JzsNCgkJCQlzZXRfcHJlZignc21kX2F0X2dsb2JhbF9za2luJywgJGdibF9za2luLCAkc21k X2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQlzZXRfcHJlZign dGhlbWVfbmFtZScsICRnYmxfc2tpbik7DQoNCgkJCQkkc2tpbiA9IGdldF9wcmVmKCdzbWRf c2tpbicpOw0KCQkJCWlmICghZmlsZV9leGlzdHModHhwYXRoLkRTLlRIRU1FLiRza2luKSkg ew0KCQkJCQkkc2tpbiA9ICRnYmxfc2tpbjsNCgkJCQl9DQoJCQkJc2V0X3ByZWYoJ3NtZF9z a2luJywgJHNraW4sICdzbWRfYXQnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQ UkVGX1BSSVZBVEUpOw0KCQkJfQ0KCQkJJF9HRVRbJ3NraW4nXSA9ICRza2luOw0KCQkJJF9H RVRbJ25leHRzdGVwJ10gPSAnc21kX2F0X2xpc3QnOw0KCQkJc21kX2F0X3N3aXRjaCgkbWVz c2FnZSk7DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X3NhdmUoKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3Nr aW4nLCduZXdfc2tpbicsJ2ZpbGUnLCdzbWRfYXRfZWRpdHMnKSkpKTsNCg0KCSRlZGl0YWJs ZSA9IGFycmF5KCJzc2MiLCAiY3NzIiwgImpzIiwgInBocCIpOw0KCSRtZXNzYWdlID0gJGV4 dHJhTXNnID0gJyc7DQoJJGZpbGUgPSB0cmltKCRmaWxlKTsNCgkkbmV3X3NraW4gPSB0cmlt KCRuZXdfc2tpbik7DQoJJG1zZ2xldiA9IDA7DQoNCgkvLyBOZXcgZmlsZQ0KCWlmICghJGZp bGUgJiYgJG5ld19za2luKSB7DQoJCSRmaWxlID0gJG5ld19za2luOw0KCQkkZXh0ID0gYXJy YXlfcG9wKGV4cGxvZGUgKCcuJywkZmlsZSkpOw0KCQlpZiAoc3RydG9sb3dlcigkZmlsZSkg IT0gJ3JlYWRtZScgJiYgKCRleHQgPT0gJycgfHwgIWluX2FycmF5KCRleHQsICRlZGl0YWJs ZSkpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9maWxldHlw ZScpLnNtZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9mdWRnZScpOw0KCQkJJG1zZ2xldiA9IEVf V0FSTklORzsNCgkJCSRfUE9TVFsnZmlsZSddID0gJGZpbGU7DQoJCX0NCgl9DQoNCglpZiAo JG1lc3NhZ2U9PScnKSB7DQoJCSRmbmFtZSA9IHNhbml0aXplRm9yRmlsZSgkZmlsZSk7DQoJ CSRuZXdfc2tpbiA9IHJhd3VybGVuY29kZSgkbmV3X3NraW4pOw0KCQkkX1BPU1RbJ25ld19z a2luJ10gPSAkbmV3X3NraW47DQoNCgkJJHNtZF9hdF9lZGl0cyA9IGRvU3RyaXAoc3RyX3Jl cGxhY2UoJ1xyXG4nLCcNCicsJHNtZF9hdF9lZGl0cykpOyAvLyBuZXdsaW5lIHdvcmthcm91 bmQNCg0KCQlpZiAoJGZuYW1lKSB7DQoJCQkkZmlsZXBhdGggPSBUSEVNRS4kc2tpbi5EUzsN CgkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVwYXRoLiRmbmFtZSkpIHsNCgkJCQkkcmV0ID0g dG91Y2goJGZpbGVwYXRoLiRmbmFtZSk7DQoJCQkJaWYgKCRyZXQgPT09IGZhbHNlKSB7DQoJ CQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ21rZGlyX2ZhaWxlZCcsIGFycmF5KCd7bmFt ZX0nID0+ICRmbmFtZSkpOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gQXNzdW1pbmcgbm8gZXJy b3JzIHNvIGZhci4uLg0KCQkJaWYgKCRtZXNzYWdlID09ICcnKSB7DQoJCQkJJGZoID0gZm9w ZW4oJGZpbGVwYXRoLiRmbmFtZSwgJ3diJyk7DQoJCQkJZndyaXRlKCRmaCwgJHNtZF9hdF9l ZGl0cyk7DQoJCQkJZmNsb3NlKCRmaCk7DQoNCgkJCQlpZiAoJGZuYW1lICE9ICRuZXdfc2tp bikgew0KCQkJCQkvLyBSZW5hbWUgdGhlIGZpbGUNCgkJCQkJJHJlcyA9IHJlbmFtZSgkZmls ZXBhdGguJGZuYW1lLCAkZmlsZXBhdGguJG5ld19za2luKTsNCg0KCQkJCQkvLyBJZiB0aGUg cmVuYW1lZCBmaWxlIGlzIHRoZSB0aGVtZSdzIFBIUCBmaWxlLCB0cnkgdG8gcmVuYW1lIHRo ZSBtYWluIHNraW4gZGlyIHRvbw0KCQkJCQkkZmlsZWJpdHMgPSBleHBsb2RlKCcuJywgJG5l d19za2luKTsNCgkJCQkJJG9sZGZpbGViaXRzID0gZXhwbG9kZSgnLicsICRmbmFtZSk7DQoJ CQkJCSRleHQgPSBhcnJheV9wb3AoJGZpbGViaXRzKTsNCgkJCQkJaWYgKCRyZXMgJiYgJGV4 dCA9PSAncGhwJyAmJiAoJG9sZGZpbGViaXRzWzBdID09ICRza2luKSkgew0KCQkJCQkJJG5l d19maWxlcGF0aCA9IFRIRU1FLiRmaWxlYml0c1swXS5EUzsNCgkJCQkJCSRyZW4gPSByZW5h bWUoJGZpbGVwYXRoLCAkbmV3X2ZpbGVwYXRoKTsNCgkJCQkJCSRmaWxlcGF0aCA9ICgkcmVu KSA/ICRuZXdfZmlsZXBhdGggOiAkZmlsZXBhdGg7DQoJCQkJCQkkX1BPU1RbJ3NraW4nXSA9 ICRmaWxlYml0c1swXTsNCgkJCQkJfQ0KCQkJCQkkZXh0cmFNc2cgPSAoJHJlcykgPyBzbWRf YXRfZ1R4dCgncmVuYW1lZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpIDogc21k X2F0X2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsNCgkJCQl9DQoNCgkJCQkvLyBQcm9jZXNzIGFu eSBjc3MgcmVwbGFjZW1lbnRzDQoJCQkJJGZpbGViaXRzID0gZXhwbG9kZSAoJy4nLCgoJGZu YW1lPT0kbmV3X3NraW4pPyAkZm5hbWUgOiAkbmV3X3NraW4pKTsNCgkJCQkkY3NzZmlsZSA9 ICRmaWxlYml0c1swXTsNCgkJCQkkZXh0ID0gYXJyYXlfcG9wKCRmaWxlYml0cyk7DQoJCQkJ aWYgKCRleHQgPT0gJ3NzYycpIHsNCgkJCQkJJHJlcGxhY2VtZW50cyA9IGFycmF5KCk7DQoJ CQkJCSRudW1fcmVwMSA9IHByZWdfbWF0Y2hfYWxsKCcvKFxAW0EtWmEtejAtOV9dKyk6XHMq KC4qKTsvJywgJHNtZF9hdF9lZGl0cywgJG1hdGNoZXMxKTsNCgkJCQkJJG51bV9yZXAyID0g cHJlZ19tYXRjaF9hbGwoJy8oXEBbQS1aYS16MC05X10rKTpccypceyguKj8pXH0vcycsICRz bWRfYXRfZWRpdHMsICRtYXRjaGVzMik7DQoNCgkJCQkJLy8gU2ltcGxlIHJlcGxhY2VtZW50 cw0KCQkJCQlmb3JlYWNoKCRtYXRjaGVzMSBhcyAkaWR4ID0+ICRyZXBhcnIpIHsNCgkJCQkJ CWlmICgkaWR4ID09IDApIHsNCgkJCQkJCQkvLyBSZW1vdmUgdGhlIHZhciBkZWZpbml0aW9u cw0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJHJlcCkgew0KCQkJCQkJCQkkc21kX2F0 X2VkaXRzID0gc3RyX3JlcGxhY2UoJHJlcCwgJycsJHNtZF9hdF9lZGl0cyk7DQoJCQkJCQkJ fQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKCRpZHggPT0gMSkgew0KCQkJCQkJCWZvcmVhY2ggKCRy ZXBhcnIgYXMgJGpkeCA9PiAkcmVwKSB7DQoJCQkJCQkJCSRyZXBsYWNlbWVudHNbJHJlcF0g PSAkbWF0Y2hlczFbMl1bJGpkeF07DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJ CQkJLy8gTXVsdGktbGluZSByZXBsYWNlbWVudHMNCgkJCQkJZm9yZWFjaCgkbWF0Y2hlczIg YXMgJGlkeCA9PiAkcmVwYXJyKSB7DQoJCQkJCQlpZiAoJGlkeCA9PSAwKSB7DQoJCQkJCQkJ Ly8gUmVtb3ZlIHRoZSB2YXIgZGVmaW5pdGlvbnMNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJy IGFzICRyZXApIHsNCgkJCQkJCQkJJHNtZF9hdF9lZGl0cyA9IHN0cl9yZXBsYWNlKCRyZXAs ICcnLCRzbWRfYXRfZWRpdHMpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmICgkaWR4 ID09IDEpIHsNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRqZHggPT4gJHJlcCkgew0K CQkJCQkJCQkkcmVwbGFjZW1lbnRzWyRyZXAuJzsnXSA9IHRyaW0oJG1hdGNoZXMyWzJdWyRq ZHhdKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBHZW5lcmF0ZSBh bmQgd3JpdGUgdGhlIG5ldyBjc3MgZmlsZQ0KCQkJCQkkc21kX2F0X2VkaXRzID0gdHJpbShz dHJ0cigkc21kX2F0X2VkaXRzLCAkcmVwbGFjZW1lbnRzKSk7DQoJCQkJCSRmaCA9IGZvcGVu KCRmaWxlcGF0aC4kY3NzZmlsZS4nLmNzcycsICd3YicpOw0KCQkJCQlmd3JpdGUoJGZoLCAk c21kX2F0X2VkaXRzKTsNCgkJCQkJZmNsb3NlKCRmaCk7DQoJCQkJCWlmICgkZm5hbWUgIT0g JG5ld19za2luKSB7DQoJCQkJCQkkb2xkZm5hbWUgPSBleHBsb2RlICgnLicsICRmbmFtZSk7 DQoJCQkJCQkkb2xkZm5hbWUgPSAkb2xkZm5hbWVbMF0uJy5jc3MnOw0KCQkJCQkJJHJlcyA9 IEB1bmxpbmsoJGZpbGVwYXRoLiRvbGRmbmFtZSk7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkk bWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdmaWxlX3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4g JGZuYW1lKSkuYnIuJGV4dHJhTXNnOw0KCQkJfQ0KCQl9DQoJfQ0KCXNtZF9hdF9lZGl0KGFy cmF5KCRtZXNzYWdlLCAkbXNnbGV2KSk7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQovLyBQUkVGUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfZ2V0X3ByZWZzKCkgew0KCWdsb2JhbCAkc21kX2F0X3ByZWZzOw0KCSRwcmVm a2V5cyA9IGRvUXVvdGUoaW1wbG9kZSgiJywnIixhcnJheV9rZXlzKCRzbWRfYXRfcHJlZnNb MF0pKSk7DQoJJHJzID0gc2FmZV9yb3dzKCduYW1lLHZhbCcsJ3R4cF9wcmVmcycsJ25hbWUg aW4gKCcuJHByZWZrZXlzLicpJyk7DQoJJGF0X3ByZWZzID0gYXJyYXkoKTsNCglmb3JlYWNo ICgkcnMgYXMgJHByZWZhcnIpIHsNCgkJJGF0X3ByZWZzWyRwcmVmYXJyWyduYW1lJ11dID0g JHByZWZhcnJbJ3ZhbCddOw0KCX0NCglyZXR1cm4gJGF0X3ByZWZzOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9vcHRpb25zKCRldmVudCwg JHN0ZXAsICRtZXNzYWdlPScnKSB7DQoJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfc2V0dXAoJG1l c3NhZ2U9JycpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X3ByZWZzLCAkc21kX2F0X2V2 ZW50LCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfc3R5bGVzOw0KDQoJJG51 bVJlcVByZWZzID0gY291bnQoJHNtZF9hdF9wcmVmc1swXSk7DQoJJGF0X3ByZWZzID0gc21k X2F0X2dldF9wcmVmcygpOw0KCSRudW1Sb3dzID0gY291bnQoJGF0X3ByZWZzKTsNCg0KCXBh Z2V0b3AoZ1R4dCgncHJlZnMnKSwkbWVzc2FnZSk7DQoNCgkvLyBUT0RPOiB1c2UgZ2V0X2dy b3VwcygpOw0KCSRsZXZlbHMgPSBhcnJheSgNCi8vCQkxID0+IGdUeHQoJ3B1Ymxpc2hlcicp LA0KCQkyID0+IGdUeHQoJ21hbmFnaW5nX2VkaXRvcicpLA0KCQkzID0+IGdUeHQoJ2NvcHlf ZWRpdG9yJyksDQoJCTQgPT4gZ1R4dCgnc3RhZmZfd3JpdGVyJyksDQoJCTUgPT4gZ1R4dCgn ZnJlZWxhbmNlcicpLA0KCQk2ID0+IGdUeHQoJ2Rlc2lnbmVyJyksDQoJKTsNCgkkbnVtTGV2 cyA9IGNvdW50KCRsZXZlbHMpOw0KDQoJLy8gU3BsaXQgdGhlIHVzZXIgc2tpbiBsaXN0DQoJ JHVza2lucyA9IGFycmF5KCk7DQoJaWYgKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJf bGlzdCddKSkgew0KCQkkdXNraW5zID0gZXhwbG9kZSgnLCcsICRhdF9wcmVmc1snc21kX2F0 X3VzZXJfbGlzdCddKTsNCgl9DQoNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoJJGNs ckJ0biA9ICcgWzxzcGFuIGlkPSJzbWRfY2xyIiBjbGFzcz0ic21kX2Zha2VidG4iPicuc21k X2F0X2dUeHQoJ2NsZWFyJykuJzwvc3Bhbj5dJzsNCgkkYnRuU2V0ID0gZklucHV0KCdzdWJt aXQnLCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldCcpLCAncHVibGlzaCcpOw0KCSRidG5T YXZlID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlz aCcpOw0KCSRidG5JbnN0YWxsID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZl bnQ9Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX2luc3RhbGwiIHN0 eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0 KCdpbnN0YWxsJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOw0KCSRidG5SZW1vdmUgPSAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7 c3RlcD1zbWRfYXRfcHJlZnNfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklu cHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnZGVsZXRlJyksICdzbWFsbGVyYm94Jyku JzwvZm9ybT4nOw0KCSRidG5MaXN0ID0gJyA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2 ZW50PScuJHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ ICdza2luX2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJJGJ0blN0eWxl ID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcmFkQnRucyA9IGFycmF5 KA0KCQlzbWRfYXRfZ1R4dCgncGVyX3NpdGUnKSwNCgkJc21kX2F0X2dUeHQoJ3Blcl9ncm91 cCcpLA0KCQlzbWRfYXRfZ1R4dCgncGVyX3VzZXInKSwNCgkpOw0KDQoJZWNobyBzdGFydFRh YmxlKCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykgew0KCQkvLyBQ cmVmcyBhbGwgaW5zdGFsbGVkDQoJCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygp Ow0KDQoJCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRvIGJl IHRoZSBzYW1lIGluIHRoaXMgY2FzZQ0KCQkkc2tpbnNlbCA9IGFycmF5KCk7DQoJCWZvcmVh Y2goJHNraW5fbGlzdCBhcyAka2V5MSA9PiAkdmFsdWUxKSB7DQoJCQlpZiAoc21kX2F0X2V4 aXN0cygkdmFsdWUxKSkgew0KCQkJCSRza2luc2VsWyR2YWx1ZTFdID0gJHNraW5fbGlzdFsk a2V5MV07DQoJCQl9DQoJCX0NCgkJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X2dsb2JhbF9za2luJ10pICYmICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10g IT0gJycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6ICR0aGVtZS0+bmFt ZTsNCg0KCQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3ByZWZzX3RpdGxlJykp LCAnIGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92ZS4kYnRuTGlzdCwgJGJ0blN0eWxl KSApOw0KCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNt ZF9hdF9ldmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc191cGRhdGUiIG9uc3VibWl0PSJy ZXR1cm4gc21kX3ByZXN1YigpOyI+JzsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2Nh c2Vfc29ydCcpKS50ZGEoeWVzbm9SYWRpbygnc21kX2F0X2Nhc2Vfc29ydCcsICRhdF9wcmVm c1snc21kX2F0X2Nhc2Vfc29ydCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2Nhc2Vf c29ydCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjcnVzaF90eXBlJykpLnRk YShyYWRpb1NldChzbWRfYXRfY3J1c2hfb3B0aW9ucygpLCAnc21kX2F0X2NydXNoJywgJGF0 X3ByZWZzWydzbWRfYXRfY3J1c2gnXSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9jcnVz aCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdsYXlvdXQnKSkudGRhKHJhZGlv U2V0KGFycmF5KHNtZF9hdF9nVHh0KCdsYXlvdXRfbGlzdCcpLCBzbWRfYXRfZ1R4dCgnbGF5 b3V0X2dyaWQnKSksICdzbWRfYXRfbGF5b3V0JywgJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0 J10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfbGF5b3V0IicpKTsNCgkJZWNobyB0cih0 ZGEoc21kX2F0X2dUeHQoJ3RodW1ic2l6ZScpKS50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9h dF90dycsICRhdF9wcmVmc1snc21kX2F0X3R3J10sJycsJycsJycsNCkuc21kX2F0X2dUeHQo J3RpbWVzJykuZklucHV0KCd0ZXh0JywgJ3NtZF9hdF90aCcsICRhdF9wcmVmc1snc21kX2F0 X3RoJ10sJycsJycsJycsNCkpKTsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2ZpbGVu YW1lX2Zvcm1hdCcpKS50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9hdF9maWxlbmFtZV9mb3Jt YXQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9maWxlbmFtZV9mb3JtYXQnXSkpKTsNCgkJZWNobyB0 cigNCgkJCXRkKHNtZF9hdF9nVHh0KCdnbG9iYWxfc2tpbicpKQ0KCQkJLnRkKHNlbGVjdElu cHV0KCdzbWRfYXRfZ2xvYmFsX3NraW4nLCAkc2tpbnNlbCwgJGdibF9za2luLCAwLCAwKSkN CgkJKTsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ3NraW5fc3lzdGVtJykpLnRkYShy YWRpb1NldCgkcmFkQnRucywgJ3NtZF9hdF9zeXN0ZW0nLCAkYXRfcHJlZnNbJ3NtZF9hdF9z eXN0ZW0nXSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9yYWRpbyInKSk7DQoNCgkJLy8g T3B0aW9uIDENCgkJJHByaXZfbGlzdCA9ICc8c2VsZWN0IGlkPSJzbWRfYXRfcHJpdnMiIG5h bWU9InNtZF9hdF9wcml2c1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iJy4kbnVtTGV2cy4nIiBt dWx0aXBsZT0ibXVsdGlwbGUiPic7DQoJCWZvcmVhY2ggKCRsZXZlbHMgYXMgJGxldmlkID0+ ICRsZXZuYW1lKSB7DQoJCQkkcHJpdl9saXN0IC49ICc8b3B0aW9uIHZhbHVlPSInLiRsZXZp ZC4nIj4nLiRsZXZuYW1lLic8L29wdGlvbj4nOw0KCQl9DQoJCSRwcml2X2xpc3QgLj0gJzwv c2VsZWN0Pic7DQoNCgkJLy8gTm90ZSB0aGUgaGlkZGVuIHNraW4gZ3JvdXAgYm94OyBqUXVl cnkga2VlcHMgdHJhY2sgb2YgYW55IGxpc3QgY2hhbmdlcyBhbmQga2VlcHMgaXQgdXBkYXRl ZA0KCQkkc2VsYSA9IHNtZF9hdF9nVHh0KCdza2luX2dyb3VwcycpOw0KCQkkc2VsYiA9IGhJ bnB1dCgnc21kX2F0X2dyb3VwX2xpc3QnLCAkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0 J10pOw0KCQkkc2VsYiAuPSAnPHNlbGVjdCBpZD0ic21kX2F0X2dycHMiIG5hbWU9InNtZF9h dF9ncnBzIiBjbGFzcz0ibGlzdCIgc2l6ZT0iJy4kbnVtTGV2cy4nIj4nOw0KCQlmb3JlYWNo ICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0KCQkJaWYgKHNtZF9hdF9leGlzdHMoJGFza2lu KSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9uIHZhbHVlPSInLiRhc2tpbi4nIj4nLiRhc2tp bi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJfQ0KCQkkc2VsYiAuPSAnPC9zZWxlY3Q+JzsNCgkJ ZWNobyB0cih0ZGEoJHNlbGEsICcgY2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykg LiB0ZGEoJHNlbGIuJHByaXZfbGlzdCwgJyB3aWR0aD0iNDAwIiBjbGFzcz0ic21kX2F0X3Nl bDEgc21kX2hpZGRlbiInKSk7DQoNCgkJLy8gT3B0aW9uIDINCgkJJHNlbGEgPSBzbWRfYXRf Z1R4dCgnYWxsb3dlZF9za2lucycpOw0KCQkkc2VsYiA9ICc8c2VsZWN0IGlkPSJzbWRfYXRf dXNlcl9saXN0IiBuYW1lPSJzbWRfYXRfdXNlcl9saXN0W10iIGNsYXNzPSJsaXN0IiBzaXpl PSI4IiBtdWx0aXBsZT0ibXVsdGlwbGUiPic7DQoJCWZvcmVhY2ggKCRza2luX2xpc3QgYXMg JGFza2luKSB7DQoJCQlpZiAoc21kX2F0X2V4aXN0cygkYXNraW4pKSB7DQoJCQkJJHNlbGIg Lj0gJzxvcHRpb24gdmFsdWU9IicuJGFza2luLiciJy4oKGluX2FycmF5KCRhc2tpbiwgJHVz a2lucykpID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPicuJGFza2luLic8L29w dGlvbj4nOw0KCQkJfQ0KCQl9DQoJCSRzZWxiIC49ICc8L3NlbGVjdD4nLiRjbHJCdG47DQoJ CWVjaG8gdHIodGRhKCRzZWxhLCAnIGNsYXNzPSJzbWRfYXRfc2VsMiBzbWRfaGlkZGVuIicp IC4gdGRhKCRzZWxiLCAnIHdpZHRoPSIyNDAiIGNsYXNzPSJzbWRfYXRfc2VsMiBzbWRfaGlk ZGVuIicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0blNhdmUsICRidG5TdHlsZSkpOw0KCQllY2hv ICc8L2Zvcm0+JzsNCgl9IGVsc2UgaWYgKCRudW1Sb3dzID4gMCAmJiAkbnVtUm93cyA8ICRu dW1SZXFQcmVmcykgew0KCQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3ByZWZz X3NvbWUnKSkuYnIuYnINCgkJCQkJCS5zbWRfYXRfZ1R4dCgncHJlZnNfc29tZV9leHBsYWlu JykuYnIuYnINCgkJCQkJCS5zbWRfYXRfZ1R4dCgncHJlZnNfc29tZV9vcHRpb25zJyksICcg Y29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKSAu IHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7DQoJfSBlbHNlIHsNCgkJZWNobyB0cih0 ZGEoc21kX2F0X2dUeHQoJ3ByZWZzX25vdF9pbnN0YWxsZWQnKSwgJyBjb2xzcGFuPSIyIicp KTsNCgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCX0NCgllY2hv IGVuZFRhYmxlKCk7DQoNCgllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh c2NyaXB0Ij4NCg0KLy8gQ29uY2F0ZW5hdGUgY2hlY2tib3ggb3B0aW9ucyBmb3Igc3RvcmFn ZQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzd2FwKHNlbFZhbHVlKSB7DQoJZm9yIChpZHg9MDsg aWR4IDwgMzsgaWR4KyspIHsNCgkJaWYgKGlkeD09c2VsVmFsdWUpIHsNCgkJCWpRdWVyeSgi LnNtZF9hdF9zZWwiK2lkeCkuc2hvdygpOw0KCQl9IGVsc2Ugew0KCQkJalF1ZXJ5KCIuc21k X2F0X3NlbCIraWR4KS5oaWRlKCk7DQoJCX0NCgl9DQp9DQpqUXVlcnkoZnVuY3Rpb24oKSB7 DQoJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfc3lzdGVtJ10iKS5jaGFuZ2UoZnVuY3Rp b24oKSB7DQoJCXNtZF9hdF9wcmVmc3dhcCh0aGlzLnZhbHVlKTsNCgl9KTsNCg0KCWpRdWVy eSgnI3NtZF9jbHInKS5jbGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KCcjc21kX2F0X3Vz ZXJfbGlzdCBvcHRpb24nKS5hdHRyKCJzZWxlY3RlZCIsICIiKTsNCgl9KTsNCg0KCWpRdWVy eSgiI3NtZF9hdF9ncnBzIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzZWxza2luID0galF1 ZXJ5KHRoaXMpLnZhbCgpOw0KDQoJCS8vIENsZWFyIHRoZSBvbGQgcHJpdnMgbGlzdCBhbmQg Z3JhYiB0aGUgY3VycmVudCBsaXN0IGZyb20gdGhlIGhpZGRlbiBmaWVsZA0KCQlqUXVlcnko IiNzbWRfYXRfcHJpdnMgb3B0aW9uIikuYXR0cigic2VsZWN0ZWQiLGZhbHNlKTsNCgkJdmFy IGdycGxpc3QgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52 YWwoKTsNCgkJdmFyIGdycHMgPSBncnBsaXN0LnNwbGl0KCcsJyk7DQoJCXZhciBjbnQgPSBn cnBzLmxlbmd0aDsNCgkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgY250OyBpZHgrKykgew0K CQkJcHJpdnMgPSBncnBzW2lkeF0uc3BsaXQoJzonKTsNCgkJCXNraW5pZCA9IHByaXZzLnNo aWZ0KCk7DQoJCQlpZiAoc2tpbmlkID09IHNlbHNraW4pIHsNCgkJCQludW1Qcml2cyA9IHBy aXZzLmxlbmd0aDsNCgkJCQlmb3IgKGpkeCA9IDA7IGpkeCA8IG51bVByaXZzOyBqZHgrKykg ew0KCQkJCQlqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uW3ZhbHVlPSciK3ByaXZzW2pk eF0rIiddIikuYXR0cigic2VsZWN0ZWQiLCB0cnVlKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9 KTsNCg0KCWpRdWVyeSgiI3NtZF9hdF9wcml2cyIpLmNoYW5nZShmdW5jdGlvbigpIHsNCgkJ c2Vsc2tpbiA9IGpRdWVyeSgiI3NtZF9hdF9ncnBzIG9wdGlvbjpzZWxlY3RlZCIpLnZhbCgp Ow0KCQl2YXIgb3V0ID0gW107DQoJCXZhciBwcml2cyA9IFtdOw0KCQlwcml2cy5wdXNoKHNl bHNraW4pOw0KCQlqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uOnNlbGVjdGVkIikuZWFj aChmdW5jdGlvbigpIHsNCgkJCXByaXZzLnB1c2goalF1ZXJ5KHRoaXMpLnZhbCgpKTsNCgkJ fSk7DQoJCWlmIChwcml2cy5sZW5ndGggPT0gMSkgew0KCQkJcHJpdnMucG9wKCk7DQoJCX0g ZWxzZSB7DQoJCQlvdXQucHVzaChwcml2cy5qb2luKCI6IikpOw0KCQl9DQoJCXZhciBoaWRs aXN0ID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7 DQoJCXZhciBwcmV2bGlzdCA9IGhpZGxpc3Quc3BsaXQoJywnKTsNCgkJdmFyIHByZXZjbnQg PSBwcmV2bGlzdC5sZW5ndGg7DQoNCgkJalF1ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9uIiku ZWFjaChmdW5jdGlvbigpIHsNCgkJCWN1cnJza2luID0galF1ZXJ5KHRoaXMpLnZhbCgpOw0K CQkJaWYgKGN1cnJza2luICE9IHNlbHNraW4pIHsNCgkJCQlmb3IgKHZhciBpZHggPSAwOyBp ZHggPCBwcmV2Y250OyBpZHgrKykgew0KCQkJCQlwcmV2cHJpdnMgPSBwcmV2bGlzdFtpZHhd LnNwbGl0KCc6Jyk7DQoJCQkJCXNraW5pZCA9IHByZXZwcml2cy5zaGlmdCgpOw0KCQkJCQkv LyBHZW5lcmF0ZSB0aGUgcHJpdiBsaXN0IGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNr aW4sIHJlbW92aW5nIGFueSBkdXBsaWNhdGUgcHJpdnMgc2V0IGVsc2V3aGVyZQ0KCQkJCQlp ZiAoc2tpbmlkID09IGN1cnJza2luKSB7DQoJCQkJCQl0bXBvdXQgPSBbXTsNCgkJCQkJCXRt cG91dC5wdXNoKHNraW5pZCk7DQoJCQkJCQlmb3IgKHRoaXNwcml2IGluIHByZXZwcml2cykg ew0KCQkJCQkJCWlmIChqUXVlcnkuaW5BcnJheShwcmV2cHJpdnNbdGhpc3ByaXZdLCBwcml2 cykgPCAwKSB7DQoJCQkJCQkJCXRtcG91dC5wdXNoKHByZXZwcml2c1t0aGlzcHJpdl0pOw0K CQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmICh0bXBvdXQubGVuZ3RoID4gMSkgew0KCQkJ CQkJCW91dC5wdXNoKHRtcG91dC5qb2luKCI6IikpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJ fQ0KCQkJfQ0KCQl9KTsNCgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlz dCddIikudmFsKG91dCk7DQoJfSk7DQoNCgkvLyBEaXNwbGF5IGEgdG9vbHRpcCBzaG93aW5n IHRoZSBjdXJyZW50bHktYXNzaWduZWQgc2tpbiB3aGVuIGhvdmVyaW5nIG92ZXIgYSBwcml2 aWxlZ2UgbGV2ZWwNCglqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uIikuaG92ZXIoZnVu Y3Rpb24oKSB7DQoJCWhvdml0ZW0gPSBqUXVlcnkodGhpcykudmFsKCk7DQoJCWdycHMgPSBq UXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwoKTsNCgkJaXRl bXMgPSBncnBzLnNwbGl0KCIsIik7DQoJCWZvciAoaWR4ID0gMDsgaWR4IDwgaXRlbXMubGVu Z3RoOyBpZHgrKykgew0KCQkJc2tpbnogPSBpdGVtc1tpZHhdLnNwbGl0KCI6Iik7DQoJCQlm b3IgKGpkeCA9IDE7IGpkeCA8IHNraW56Lmxlbmd0aDsgamR4KyspIHsNCgkJCQlpZiAoc2tp bnpbamR4XSA9PSBob3ZpdGVtKSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5hdHRyKCJ0aXRsZSIs IHNraW56WzBdKTsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSwNCglmdW5j dGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIoInRpdGxlIiwgIiIpOw0KCX0pOw0KCXNt ZF9hdF9wcmVmc3dhcChqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9zeXN0ZW0nXTpjaGVj a2VkIikudmFsKCkpOw0KCWpRdWVyeSgiI3NtZF9hdF9wcml2cyIpLmNoYW5nZSgpOw0KfSk7 DQo8L3NjcmlwdD4NCkVPSlM7DQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nOw0K CWVjaG8gJHNtZF9hdF9zdHlsZXNbJ2NvbW1vbiddLm4uJHNtZF9hdF9zdHlsZXNbJ3NldHVw J107DQoJZWNobyAnPC9zdHlsZT4nOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIFNwbGl0IGEgbXVsdGktY2hhciBwcmVmZXJlbmNlIHZhbHVlIGludG8gYW4gYXJy YXkgb2Yga2V5cy92YWx1ZXMuDQovLyBOb3RlOiB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5kIG5v dCByZWFkIGRpcmVjdGx5IGZyb20gdGhlIHByZWZzIGFycmF5IGluIHRoaXMgZnVuY3Rpb24g LSBpbnRlbnRpb25hbGx5DQpmdW5jdGlvbiBzbWRfYXRfcHJlZl9leHBsb2RlKCR2YWwpIHsN Cgkkb3JkZXIgPSBhcnJheV92YWx1ZXMoYXJyYXkoc21kX2F0X2dUeHQoJ2NfZ3ppcCcpLHNt ZF9hdF9nVHh0KCdjX2J6aXAnKSxzbWRfYXRfZ1R4dCgnY196aXAnKSkpOw0KCSRvbm9mZiA9 IGFycmF5X3ZhbHVlcyhwcmVnX3NwbGl0KCcvLycsICR2YWwsIC0xLCBQUkVHX1NQTElUX05P X0VNUFRZKSk7DQoJJG91dCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkb3JkZXIgYXMgJGtleTEg PT4gJHZhbHVlMSkgew0KCQkkb3V0WyhzdHJpbmcpJHZhbHVlMV0gPSAkb25vZmZbJGtleTFd Ow0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0 X3ByZWZzX2luc3RhbGwoJHNob3dwYW5lPScxJykgew0KCWdsb2JhbCAkc21kX2F0X3ByZWZz Ow0KCSRtZXNzYWdlID0gJyc7DQoJZm9yZWFjaCAoJHNtZF9hdF9wcmVmc1swXSBhcyAkcHJl ZiA9PiAkZGZsdCkgew0KCQlpZiAoIWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScs JHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9 MSwgbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUoZG9T bGFzaCgkZGZsdCkpLicsZXZlbnQ9InNtZF9hZHNraW4iJyk7DQoJCX0NCgl9DQoJaWYgKCRz aG93cGFuZSkgew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdwcmVmc19pbnN0YWxsZWQn KTsNCgkJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9wcmVmc19yZW1vdmUoJHNob3dwYW5lPScxJykgew0KCWdsb2JhbCAk c21kX2F0X3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJZm9yZWFjaCAoYXJyYXlfbWVyZ2Uo JHNtZF9hdF9wcmVmc1swXSwkc21kX2F0X3ByZWZzWzFdKSBhcyAkcHJlZiA9PiAkZGZsdCkg ew0KCQlpZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsNCgkJ CSRpZCA9IHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCduYW1lPScuZG9RdW90ZShkb1NsYXNo KCRwcmVmKSkpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgPSBz bWRfYXRfZ1R4dCgncHJlZnNfZGVsZXRlZCcpOw0KCQlzbWRfYXRfc2V0dXAoJG1lc3NhZ2Up Ow0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzX3VwZGF0ZSgp IHsNCglnbG9iYWwgJHNtZF9wbHVnaW5fcHJlZnMsICRzbWRfYXRfcHJlZnMsICRzbWRfYXRf ZXZlbnQ7DQoNCgkkbWVzc2FnZSA9ICcnOw0KCSRwb3N0ID0gYXJyYXkoKTsNCgkkcG9zdFsn c21kX2F0X2dsb2JhbF9za2luJ10gPSBncHMoJ3NtZF9hdF9nbG9iYWxfc2tpbicpOw0KCSRw b3N0WydzbWRfYXRfc3lzdGVtJ10gPSBncHMoJ3NtZF9hdF9zeXN0ZW0nKTsNCgkkcG9zdFsn c21kX2F0X2xheW91dCddID0gZ3BzKCdzbWRfYXRfbGF5b3V0Jyk7DQoJJHBvc3RbJ3NtZF9h dF9jYXNlX3NvcnQnXSA9IGdwcygnc21kX2F0X2Nhc2Vfc29ydCcpOw0KCSRwb3N0WydzbWRf YXRfdHcnXSA9IGdwcygnc21kX2F0X3R3Jyk7DQoJJHBvc3RbJ3NtZF9hdF90aCddID0gZ3Bz KCdzbWRfYXRfdGgnKTsNCgkkcG9zdFsnc21kX2F0X2ZpbGVuYW1lX2Zvcm1hdCddID0gZ3Bz KCdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0Jyk7DQoJaWYgKGdwcygnc21kX2F0X3VzZXJfbGlz dCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfdXNlcl9saXN0J10gPSBqb2luKCcsJywgZ3BzKCdz bWRfYXRfdXNlcl9saXN0JykpOw0KCX0gZWxzZSB7DQoJCSRwb3N0WydzbWRfYXRfdXNlcl9s aXN0J10gPSAnJzsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2dyb3VwX2xpc3QnKSkgew0KCQkk cG9zdFsnc21kX2F0X2dyb3VwX2xpc3QnXSA9IGdwcygnc21kX2F0X2dyb3VwX2xpc3QnKTsN Cgl9DQoJaWYgKGdwcygnc21kX2F0X2NydXNoJykpIHsNCgkJJHBvc3RbJ3NtZF9hdF9jcnVz aCddID0gZ3BzKCdzbWRfYXRfY3J1c2gnKTsNCgl9DQoNCgkvLyBTZXQgdGhlIHN5c3RlbS13 aWRlIHRoZW1lIHRvIHRoZSBnbG9iYWwgdGhlbWUNCglpZiAoJHBvc3RbJ3NtZF9hdF9nbG9i YWxfc2tpbiddKSB7DQoJCXNldF9wcmVmKCd0aGVtZV9uYW1lJywgJHBvc3RbJ3NtZF9hdF9n bG9iYWxfc2tpbiddKTsNCgl9DQoNCglmb3JlYWNoICgkc21kX2F0X3ByZWZzWzBdIGFzICRw cmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9zdFskcHJlZl0pKSB7DQoJCQlzZXRf cHJlZigkcHJlZiwgJHBvc3RbJHByZWZdLCAkc21kX2F0X2V2ZW50LCAyKTsNCgkJfQ0KCX0N CgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJc21kX2F0X3NldHVw KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBVVElM SVRZIEZVTkNUSU9OUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBz bWRfYXRfZ2V0X3ByaXZzKCR1c2VyPScnKSB7DQoJZ2xvYmFsICR0eHBfdXNlcjsNCgkkdXNl ciA9ICgkdXNlcikgPyAkdXNlciA6ICR0eHBfdXNlcjsNCgkkcHJpdnMgPSBzYWZlX2ZpZWxk KCJwcml2cyIsICJ0eHBfdXNlcnMiLCAibmFtZT0nIi5kb1NsYXNoKCR1c2VyKS4iJyIpOw0K CXJldHVybiAkcHJpdnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2V4aXN0cygkbmFtZSkgew0KCSRpbnN0YW5jZSA9IHRoZW1lOjpmYWN0 b3J5KCRuYW1lKTsNCglyZXR1cm4gJGluc3RhbmNlOw0KfQ0KDQovLyBJZiBwZXItdXNlciBz a2luIHN1cHBvcnQgaXMgT0ZGLCB0aGUgZ2xvYmFsIHNraW4gd2lucy4NCi8vIE9uZSBleGNl cHRpb246IGlmIHRoZSB1c2VyIGlzIGFuIGFkbWluLCBhbGxvdyB0aGUgY3VycmVudCBza2lu IHRvIHByZXZhaWwgc28gdGhleSBtYXkgc3dpdGNoIHNraW5zIHdpdGggaW1wdW5pdHkNCi8v IGFuZCBub3QgYWZmZWN0IHRoZSBnbG9iYWwgc2tpbg0KZnVuY3Rpb24gc21kX2F0X3Blcigp IHsNCglnbG9iYWwgJHNtZF9hdF9wcml2cywgJHByZWZzLCAkdGhlbWUsICR0eHBfdXNlcjsN Cg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkc2tpblN5cyA9IGlzc2V0 KCRhdF9wcmVmc1snc21kX2F0X3N5c3RlbSddKSA/ICRhdF9wcmVmc1snc21kX2F0X3N5c3Rl bSddIDogMDsNCgkkcHJpdnMgPSBzbWRfYXRfZ2V0X3ByaXZzKCk7DQoJJGdibF9za2luID0g KGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pICYmICRhdF9wcmVmc1sn c21kX2F0X2dsb2JhbF9za2luJ10gIT0gJycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFs X3NraW4nXSA6ICcnOw0KCSRnYmxfc2tpbiA9IChzbWRfYXRfZXhpc3RzKCRnYmxfc2tpbikp ID8gJGdibF9za2luIDogJ2NsYXNzaWMnOw0KDQoJc3dpdGNoICgkc2tpblN5cykgew0KCQlj YXNlIDA6DQoJCQkvLyBHbG9iYWwgZm9yY2VkIHNraW4gKGV4Y2VwdCBhZG1pbnMpDQoJCQlp ZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMpKSkgew0K CQkJCXJldHVybiAkZ2JsX3NraW47DQoJCQl9IGVsc2Ugew0KCQkJCS8vIEFkbWlucw0KCQkJ CSRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxf c2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygkYWRt X3NraW4pKSA/ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJCX0NCgkJCWJyZWFrOw0KCQlj YXNlIDE6DQoJCQkvLyBHcm91cC1sZXZlbCBmb3JjZWQgc2tpbnMNCgkJCWlmICghaW5fYXJy YXkoJHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJJGZvcmNl U2tpbnMgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKSkgPyAkYXRf cHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10gOiAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4g OiAkdGhlbWUtPm5hbWUpOw0KDQoJCQkJLy8gU3BsaXQgdGhlIGdyb3VwIHNraW4gbGlzdA0K CQkJCSRnc2tpbnMgPSBhcnJheSgpOw0KCQkJCSRnb3B0cyA9IGV4cGxvZGUoJywnLCAkZm9y Y2VTa2lucyk7DQoJCQkJZm9yZWFjaCAoJGdvcHRzIGFzICRncnBkZWYpIHsNCgkJCQkJaWYg KCRncnBkZWYgPT0gJycpIGNvbnRpbnVlOw0KCQkJCQkkcHJpdmdycCA9IGV4cGxvZGUoIjoi LCAkZ3JwZGVmKTsNCgkJCQkJJHNraW5pZCA9IGFycmF5X3NoaWZ0KCRwcml2Z3JwKTsNCgkJ CQkJaWYgKGluX2FycmF5KCRwcml2cywgJHByaXZncnApKSB7DQoJCQkJCQlyZXR1cm4gKHNt ZF9hdF9leGlzdHMoJHNraW5pZCkpID8gJHNraW5pZCA6ICdjbGFzc2ljJzs7DQoJCQkJCX0N CgkJCQl9DQoJCQkJcmV0dXJuICgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5u YW1lOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRf cHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5h bWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3Nr aW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAyOg0KCQkJLy8gUGVy LXVzZXIgc2tpbi4gSWYgdXNlciBpcyBub24tYWRtaW4sIGNoZWNrIHRoZSBza2luIGlzIGlu IHRoZSBhbGxvd2VkIGxpc3QNCgkJCWlmICghaW5fYXJyYXkoJHByaXZzLCBleHBsb2RlKCcs JywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJJHZhbGlkU2tpbnMgPSAoaXNzZXQoJGF0X3By ZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlz dCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKTsNCgkJCQkk dmFsaWRTa2lucyA9IGRvX2xpc3QoJHZhbGlkU2tpbnMpOw0KCQkJCSR0aGVfc2tpbiA9IGdl dF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+ bmFtZSkpOw0KCQkJCXJldHVybiAoaW5fYXJyYXkoJHRoZV9za2luLCAkdmFsaWRTa2lucykg JiYgc21kX2F0X2V4aXN0cygkdGhlX3NraW4pKSA/ICR0aGVfc2tpbiA6ICcnOw0KCQkJfSBl bHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRfcHJlZignc21kX3Nr aW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJCQly ZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3NraW4gOiAnY2xhc3Np Yyc7DQoJCQl9DQoJCQlicmVhazsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLy8gUmVhZCBhbmQgcmV0dXJuIHRoZSBtYW5pZmVzdCwgaWYgaXQgZXhpc3RzIGFu ZCBhZGQgYSBmZXcgb3RoZXIgbmljZXRpZXMgdG8gdGhlIGFycmF5IGZvciBsYXRlcg0KZnVu Y3Rpb24gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKSB7DQoJZ2xvYmFsICRzbWRfY29yZV90 aGVtZXM7DQoNCgkkdGhpc190aGVtZSA9IHRoZW1lOjpmYWN0b3J5KCRza2luKTsNCgkkc2tp bmZvID0gYXJyYXkoKTsNCglpZiAoJHRoaXNfdGhlbWUpIHsNCgkJJHNraW5mbyA9ICR0aGlz X3RoZW1lLT5tYW5pZmVzdCgpOw0KCQkkc2tpbmZvWydkbmFtZSddID0gZW1wdHkoJHNraW5m b1sndGl0bGUnXSkgPyB1Y3dvcmRzKCR0aGlzX3RoZW1lLT5uYW1lKSA6ICRza2luZm9bJ3Rp dGxlJ107DQoJCSRza2luZm9bJ25hbWUnXSA9ICR0aGlzX3RoZW1lLT5uYW1lOw0KCQkkc2tp bmZvWydwYXRoJ10gPSAkdGhpc190aGVtZS0+dXJsOw0KCQkkc2tpbmZvWydwaHBmaWxlJ10g PSAkdGhpc190aGVtZS0+cGF0aCgkc2tpbik7DQoJCSRza2luZm9bJ2Jhc2VkX29uJ10gPSAn JzsNCgkJJGNvbnRlbnRzID0gZmlsZV9nZXRfY29udGVudHMoJHNraW5mb1sncGhwZmlsZSdd KTsNCgkJaWYgKCgkcG9zID0gc3RycG9zKCRjb250ZW50cywgJ3RoZW1lOjpiYXNlZF9vbicp KSAhPT0gZmFsc2UpIHsNCgkJCSRiZWdwb3MgPSBzdHJwb3MoJGNvbnRlbnRzLCAiJyIsICRw b3MpKzE7DQoJCQkkZW5kcG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkYmVncG9zKTsN CgkJCSRiYXNlID0gc3Vic3RyKCRjb250ZW50cywgJGJlZ3BvcywgJGVuZHBvcy0kYmVncG9z KTsNCgkJCSRza2luZm9bJ2Jhc2VkX29uJ10gPSAoaW5fYXJyYXkoJGJhc2UsICRzbWRfY29y ZV90aGVtZXMpKSA/ICcnIDogJGJhc2U7DQoJCX0NCgkJdW5zZXQoJHRoaXNfdGhlbWUpOw0K CX0NCglyZXR1cm4gJHNraW5mbzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQovLyBHcmFiIHRoZSB0aHVtYm5haWwgZmlsZW5hbWUgaWYgaXQgZXhpc3RzLCBvcHRpb25h bGx5IHJldHVybiBhIGZvcm1hdHRlZCBpbWcgdGFnDQpmdW5jdGlvbiBzbWRfYXRfZ2V0X3Ro dW1iKCRza2luLCAkaW1nPTApIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCg0KCSRhdF9w cmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkdHcgPSBpc3NldCgkYXRfcHJlZnNbJ3Nt ZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21kX2F0X3ByZWZzWzBd WydzbWRfYXRfdHcnXTsNCgkkdGggPSBpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90aCddKSA/ ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdGgn XTsNCgkkdXNlX3RodW1iID0gKCR0dyA9PSAwIHx8ICR0aCA9PSAwKSA/IGZhbHNlIDogdHJ1 ZTsNCg0KCS8vIEFuIGFycmF5IG1lYW5zIHRoZSBtYW5pZmVzdCBoYXMgYWxyZWFkeSBiZWVu IHJlYWQgYW5kIGlzIGJlaW5nIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24NCglpZiAoIWlz X2FycmF5KCRza2luKSkgew0KCQkkc2tpbiA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7 DQoJfQ0KCWlmICgkc2tpbikgew0KCQkkc2tpbmRpciA9ICRza2luWydwYXRoJ107DQoJCSR0 aHVtYm5hbWUgPSBnbG9iKCRza2luZGlyLidzY3JlZW5zaG90LionKTsNCgkJcmV0dXJuICgk aW1nICYmICR1c2VfdGh1bWIgJiYgJHRodW1ibmFtZSAmJiBmaWxlX2V4aXN0cygkdGh1bWJu YW1lWzBdKSkgPyAnPGltZyBzcmM9IicuJHRodW1ibmFtZVswXS4nIiBhbHQ9IicuKChpc3Nl dCgkc2tpblsnbmFtZSddKSkgPyAkc2tpblsnbmFtZSddIDogJycpLicgdGh1bWJuYWlsIiBz dHlsZT0iYm9yZGVyOjJweCByaWRnZSAjOTk5O3BhZGRpbmc6MnB4OyIgd2lkdGg9IicuJHR3 LiciIGhlaWdodD0iJy4kdGguJyIgLz4nIDogJyc7DQoJfSBlbHNlIHsNCgkJcmV0dXJuICcn Ow0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf YXRfcmVhZF9za2lucygpIHsNCgkkc2tpbl9saXN0ID0gdGhlbWU6Om5hbWVzKCk7DQoJJHNr aW5fbGlzdCA9IHNtZF9hdF9zb3J0KCRza2luX2xpc3QpOw0KCXJldHVybiAkc2tpbl9saXN0 Ow0KfQ0KDQovLyBTb3J0IHRoZSBza2lucyBidXQga2VlcCAnY2xhc3NpYycgYXQgdGhlIHRv cA0KZnVuY3Rpb24gc21kX2F0X3NvcnQoJHNraW5fbGlzdCkgew0KCWdsb2JhbCAkcHJlZnM7 DQoNCgkkY2FzZVNlbnNlID0gaXNzZXQoJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10pID8g JHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10gOiAxOw0KDQoJaWYoJGNhc2VTZW5zZSkgew0K CQluYXRzb3J0KCRza2luX2xpc3QpOw0KCX0gZWxzZSB7DQoJCW5hdGNhc2Vzb3J0KCRza2lu X2xpc3QpOw0KCX0NCgkkZGZsdF9mb3VuZCA9IGZhbHNlOw0KCWZvcmVhY2ggKCRza2luX2xp c3QgYXMgJHNraW5faWR4ID0+ICRza2luX25hbWUpIHsNCgkJaWYgKCRza2luX25hbWUgPT0g ImNsYXNzaWMiKSB7DQoJCQl1bnNldCgkc2tpbl9saXN0WyRza2luX2lkeF0pOw0KCQkJJGRm bHRfZm91bmQgPSB0cnVlOw0KCQkJYnJlYWs7DQoJCX0NCgl9DQoJaWYgKCRkZmx0X2ZvdW5k KSB7DQoJCWFycmF5X3Vuc2hpZnQoJHNraW5fbGlzdCwiY2xhc3NpYyIpOw0KCX0NCg0KCXJl dHVybiAkc2tpbl9saXN0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9saXN0ZGlyKCRzdGFydF9kaXI9Jy4nKSB7DQoJJGZpbGVzID0gYXJy YXkoKTsNCg0KCWlmIChpc19kaXIoJHN0YXJ0X2RpcikpIHsNCgkJJGZoID0gb3BlbmRpcigk c3RhcnRfZGlyKTsNCgkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGZoKSkgIT09IGZhbHNl KSB7DQoJCQkvLyBsb29wIHRocm91Z2ggdGhlIGZpbGVzLCBza2lwcGluZyAuIGFuZCAuLiwg YW5kIHJlY3Vyc2luZyBpZiBuZWNlc3NhcnkNCgkJCWlmIChzdHJjbXAoJGZpbGUsICcuJyk9 PTAgfHwgc3RyY21wKCRmaWxlLCAnLi4nKT09MCkgY29udGludWU7DQoJCQkkZmlsZXBhdGgg PSAkc3RhcnRfZGlyIC4gJy8nIC4gJGZpbGU7DQoJCQlpZiAoIGlzX2RpcigkZmlsZXBhdGgp ICkgew0KCQkJCSRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgc21kX2F0X2xpc3RkaXIo JGZpbGVwYXRoKSk7DQoJCQl9IGVsc2Ugew0KCQkJCWFycmF5X3B1c2goJGZpbGVzLCAkZmls ZXBhdGgpOw0KCQkJfQ0KCQl9DQoJCWNsb3NlZGlyKCRmaCk7DQoJfSBlbHNlIHsNCg0KCQkv LyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbm9u LWRpcmVjdG9yeSBhcmd1bWVudA0KCQkkZmlsZXMgPSBmYWxzZTsNCgl9DQoNCglyZXR1cm4g JGZpbGVzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlY3Vyc2l2 ZSBybWRpcigpIGNvdXJ0ZXN5IG9mIHRoZSBwaHAgbWFudWFsIHVzZXIgY29tbWVudHMNCmZ1 bmN0aW9uIHNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoKSB7DQoJaWYgKGlzX2Rpcigk ZmlsZXBhdGgpICYmICFpc19saW5rKCRmaWxlcGF0aCkpIHsNCgkJaWYgKCRkaCA9IG9wZW5k aXIoJGZpbGVwYXRoKSkgew0KCQkJd2hpbGUgKCgkc2YgPSByZWFkZGlyKCRkaCkpICE9PSBm YWxzZSkgew0KCQkJCWlmICgkc2YgPT0gJy4nIHx8ICRzZiA9PSAnLi4nKSBjb250aW51ZTsN CgkJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoLicvJy4kc2YpKSB7DQoJ CQkJCWJyZWFrOyAvLyBEb2gsIGNhbid0IGRlbGV0ZQ0KCQkJCX0NCgkJCX0NCgkJCWNsb3Nl ZGlyKCRkaCk7DQoJCX0NCgkJcmV0dXJuIHJtZGlyKCRmaWxlcGF0aCk7DQoJfQ0KCXJldHVy biB1bmxpbmsoJGZpbGVwYXRoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQovLyBGcm9tIFBIUCBtYW51YWwgY29tbWVudHMuIFRoYW5rcyBwdXJlbWFuZ28NCmZ1bmN0 aW9uIHNtZF9hdF9pc19kaXIoJGRpcikgew0KCS8vIGJ5cGFzc2VzIG9wZW5fYmFzZWRpciBy ZXN0cmljdGlvbnMgb2YgaXNfZGlyIGFuZCBmaWxlcGVybXMNCgkkdG1wX2NtZCA9IGBscyAt ZGwgJGRpcmA7DQoJJGRpcl9mbGFnID0gJHRtcF9jbWRbMF07DQoJaWYoJGRpcl9mbGFnIT0i ZCIpIHsNCgkJLy8gbm90IGQ7IHVzZSBuZXh0IGNoYXIgKGZpcnN0IGNoYXIgbWlnaHQgYmUg J3MnIGFuZCBpcyBzdGlsbCBkaXJlY3RvcnkpDQoJCSRkaXJfZmxhZyA9ICR0bXBfY21kWzFd Ow0KCX0NCglyZXR1cm4gKCRkaXJfZmxhZz09ImQiKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfbWtkaXJfcmVjdXJzaXZlKCRwYXRoLCAkbW9k ZSA9IDA3NTUpIHsNCglpZihAbWtkaXIoJHBhdGgsICRtb2RlKSBvciBmaWxlX2V4aXN0cygk cGF0aCkpIHJldHVybiB0cnVlOw0KCXJldHVybiAoc21kX21rZGlyX3JlY3Vyc2l2ZShkaXJu YW1lKCRwYXRoKSwgJG1vZGUpIGFuZCBta2RpcigkcGF0aCwgJG1vZGUpKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfY2hhbmdlX3BhZ2Vi eSgpIHsNCglzZXRjb29raWUoJ3NtZF9hdF9wYWdlYnknLCBncHMoJ3F0eScpKTsNCglzbWRf YXRfbGlzdCgnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX2F0X3N3aXRjaCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkc21kX2F0X3ByaXZz Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCAnZXZlbnQnLCAnbmV4 dHN0ZXAnKSkpKTsNCgkkdXJsID0gIj9ldmVudD0iLiRldmVudC4iJnN0ZXA9Ii4kbmV4dHN0 ZXA7DQoNCglpZiAoJHNraW4gJiYgc21kX2F0X2V4aXN0cygkc2tpbikpIHsNCgkJc2V0X3By ZWYoJ3NtZF9za2luJywgJHNraW4sICRldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0 JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJJHVybCAuPSAnJm1lc3NhZ2U9JyAuICgoJG1lc3Nh Z2UpID8gJG1lc3NhZ2UgOiBzbWRfYXRfZ1R4dCgnc2tpbl9zd2l0Y2hlZCcsIGFycmF5KCd7 c2tpbn0nID0+ICRza2luKSkpOw0KCX0gZWxzZSB7DQoJCSR1cmwgLj0gJyZtZXNzYWdlPScg LiAkbWVzc2FnZTsNCgl9DQoNCgkvLyBTaW5jZSB0aGUgaGVhZGVycyBoYXZlIGJlZW4gc2Vu dCwgZG91YmxlLWRlY2x1dGNoIGluIG9yZGVyIHRvIHNob3cgdGhlIHNraW4gdGhpcyBmaXJz dCB0aW1lDQoJZWNobyA8PDxFT1MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4N CndpbmRvdy5sb2NhdGlvbi5ocmVmPSJ7JHVybH0iOw0KPC9zY3JpcHQ+DQo8bm9zY3JpcHQ+ DQo8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO3VybD17JHVybH0iIC8+ DQo8L25vc2NyaXB0Pg0KRU9TOw0KCWV4aXQ7DQp9DQoNCi8vIEFsbC11c2VyIHNraW4gY2hv b3Nlcg0KZnVuY3Rpb24gc21kX2FkbWF0KCRldmVudCwgJHN0ZXApIHsNCglpZighJHN0ZXAg b3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRfYXRfc3dpdGNoJywNCgkJKSkp IHsNCgkJc21kX2F0X2Nob29zZXIoJycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9jaG9vc2VyKCRtZXNz YWdlPScnKSB7DQoJZ2xvYmFsICRwcmVmcywgJHNtZF9hdF9hZG1fZXZlbnQsICR0aGVtZSwg JHNtZF9hdF9zdHlsZXM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoJ JGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0X3By ZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9IChpc3NldCgkYXRfcHJlZnNbJ3Nt ZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21kX2F0X3ByZWZzWzBd WydzbWRfYXRfdHcnXSkgKyAxMDsNCgkkdGggPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRf dGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9wcmVmc1swXVsnc21k X2F0X3RoJ10pICsgODA7DQoJJHN0eWxlcmVwcyA9IGFycmF5KA0KCQkne3R3fScgPT4gJHR3 LA0KCQkne3RofScgPT4gJHRoLA0KCSk7DQoNCgkkbWVzc2FnZSA9ICgkbWVzc2FnZSkgPyAk bWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ3NraW5u ZXInKSwkbWVzc2FnZSk7DQoNCgkkY3Vycl9za2luID0gJHRoZW1lLT5uYW1lOw0KDQoJJGFs bG93ZWQgPSAnJzsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSB7 DQoJCSRhbGxvd2VkID0gZXhwbG9kZSgiLCIsJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10p Ow0KCQlmb3JlYWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkgew0KCQkJaWYgKCR2 YWxpZCA9PSAnJykgew0KCQkJCXVuc2V0KCRhbGxvd2VkWyRpZHhdKTsNCgkJCX0NCgkJfQ0K CX0NCgkkYWxsb3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsNCgkkaGRyb3cgPSBoZWQo c21kX2F0X2dUeHQoJ2F2YWlsX3RpdGxlJyksIDMpOw0KDQoJaWYgKCRsYXlvdXQ9PSIwIikg ew0KCQllY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPic7DQoJCWVjaG8gJHNtZF9hdF9z dHlsZXNbJ2NvbW1vbiddLm4uJHNtZF9hdF9zdHlsZXNbJ2xpc3QnXTsNCgkJZWNobyAnPC9z dHlsZT4nOw0KCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnLCAnJywgJ3NtZF9hdF9saXN0Jyk7 DQoJCWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93LCAnIGNvbHNwYW49IjMiJykNCgkJKTsNCgkJ ZWNobyB0cigNCgkJCWFzc0hlYWQoDQoJCQkJc21kX2F0X2dUeHQoJ3NraW5fZ2JsJyksDQoJ CQkJJ2F1dGhvcicsDQoJCQkJJ2Rlc2NyaXB0aW9uJw0KCQkJKSk7DQoJfSBlbHNlIHsNCgkJ ZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nOw0KCQllY2hvIHN0cnRyKCRzbWRfYXRf c3R5bGVzWydjb21tb24nXS5uLiRzbWRfYXRfc3R5bGVzWydncmlkJ10sICRzdHlsZXJlcHMp Ow0KCQllY2hvICc8L3N0eWxlPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9ncmlkIj48 ZGl2IGNsYXNzPSJzbWRfbmV3cm93Ij4nLiRoZHJvdy4nPC9kaXY+JzsNCgl9DQoJZm9yZWFj aCAoJGFsbG93ZWQgYXMgJHNraW5fbmFtZSkgew0KCQkkc2tpbmZvID0gc21kX2F0X3JlYWRf c2tpbmZvKCRza2luX25hbWUpOw0KCQlpZiAoJHNraW5mbykgew0KCQkJJHRodW1ibmFpbCA9 IHNtZF9hdF9nZXRfdGh1bWIoJHNraW5mbywgMSk7DQoJCQkkdGhpc19za2luID0gKCRza2lu X25hbWUgPT0gJGN1cnJfc2tpbikgPyBzdHJvbmcoJHNraW5mb1snZG5hbWUnXSkgOiAkc2tp bmZvWydkbmFtZSddOw0KCQkJJHRodW1yb3cgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9h dF9hZG1fZXZlbnQuYS4nc3RlcD1zbWRfYXRfc3dpdGNoJy5hLiduZXh0c3RlcD1zbWRfYWRt YXQnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciIHRpdGxlPSInLnNtZF9hdF9nVHh0KCdhcHBs eV9za2luJykuJyI+Jy4kdGhpc19za2luLigoJHRodW1ibmFpbCkgPyAnPGRpdj4nLiR0aHVt Ym5haWwuJzwvZGl2PicgOiAnJykuJzwvYT4nOw0KCQkJJGF1dGhyb3cgPSAoc3RycG9zKCRz a2luZm9bJ2F1dGhvcl91cmknXSwgImh0dHA6Ly8iKSA9PT0gMCkgPyAnPGEgaHJlZj0iJy4k c2tpbmZvWydhdXRob3JfdXJpJ10uJyI+Jy4kc2tpbmZvWydhdXRob3InXS4nPC9hPicgOiAk c2tpbmZvWydhdXRob3InXTsNCg0KCQkJaWYgKCRsYXlvdXQ9PSIwIikgew0KCQkJCWVjaG8g dHIoDQoJCQkJCXRkKCR0aHVtcm93KQ0KCQkJCQkudGQoJGF1dGhyb3csIDEwMCkNCgkJCQkJ LnRkKCRza2luZm9bJ2Rlc2NyaXB0aW9uJ10sIDI1MCkNCgkJCQkJLCAoKCRza2luX25hbWUg PT0gJGN1cnJfc2tpbikgPyAnIGNsYXNzPSJhY3RpdmUiJyA6ICcnKQ0KCQkJCSk7DQoJCQl9 IGVsc2Ugew0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsJy4oKCRza2luX25hbWUg PT0gJGN1cnJfc2tpbikgPyAnIGFjdGl2ZScgOiAnJykuJyI+JzsNCgkJCQllY2hvICc8ZGl2 PicuJHRodW1yb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1dGgi Picuc21kX2F0X2dUeHQoJ2J5JykuJGF1dGhyb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPC9k aXY+JzsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gZW5k VGFibGUoKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwv ZGl2PjwvZGl2Pic7DQoJfQ0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUQVIvR1pJUC9CWklQMi9aSVAgQVJDSElWRSBD TEFTU0VTIDIuMQ0KIHwgQnkgRGV2aW4gRG91Y2V0dGUNCiB8IENvcHlyaWdodCAoYykgMjAw NSBEZXZpbiBEb3VjZXR0ZQ0KIHwgRW1haWw6IGRhcmtzbm9vcHlAc2hhdy5jYQ0KICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHwgRW1h aWwgYnVncy9zdWdnZXN0aW9ucyB0byBkYXJrc25vb3B5QHNoYXcuY2ENCiArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRoaXMgc2Ny aXB0IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQogfCB0aGUgR05VIEdQ TCBhbmQgaXMgZnJlZSB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwgb25seSBpZiB0aGlz IGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90IHJlbW92ZWQNCiArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQovLyBOT1RFOiBjbGFz cyBuYW1lcyBhbHRlcmVkIHRvIGFkZCBzbWRfYXRfIHByZWZpeCB0byBhdm9pZCBjbGFzaGVz IGluIGdsb2JhbCBzY29wZSwgYW5kIGFkZGVkIHN1YmRpciBjcmVhdGlvbg0KDQpjbGFzcyBz bWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9hcmNoaXZlKCRuYW1lKQ0KCXsN CgkJJHRoaXMtPm9wdGlvbnMgPSBhcnJheSAoDQoJCQknYmFzZWRpcicgPT4gIi4iLA0KCQkJ J25hbWUnID0+ICRuYW1lLA0KCQkJJ3ByZXBlbmQnID0+ICIiLA0KCQkJJ2lubWVtb3J5JyA9 PiAwLA0KCQkJJ292ZXJ3cml0ZScgPT4gMCwNCgkJCSdyZWN1cnNlJyA9PiAxLA0KCQkJJ3N0 b3JlcGF0aHMnID0+IDEsDQoJCQknZm9sbG93bGlua3MnID0+IDAsDQoJCQknbGV2ZWwnID0+ IDMsDQoJCQknbWV0aG9kJyA9PiAxLA0KCQkJJ3NmeCcgPT4gIiIsDQoJCQkndHlwZScgPT4g IiIsDQoJCQknY29tbWVudCcgPT4gIiINCgkJKTsNCgkJJHRoaXMtPmZpbGVzID0gYXJyYXkg KCk7DQoJCSR0aGlzLT5leGNsdWRlID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5zdG9yZW9ubHkg PSBhcnJheSAoKTsNCgkJJHRoaXMtPmVycm9yID0gYXJyYXkgKCk7DQoJfQ0KDQoJZnVuY3Rp b24gc2V0X29wdGlvbnMoJG9wdGlvbnMpDQoJew0KCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAk a2V5ID0+ICR2YWx1ZSkNCgkJCSR0aGlzLT5vcHRpb25zWyRrZXldID0gJHZhbHVlOw0KCQlp ZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKSkNCgkJew0KCQkJJHRoaXMt Pm9wdGlvbnNbJ2Jhc2VkaXInXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9w dGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJl Z19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJ CQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIi LCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5ICgkdGhp cy0+b3B0aW9uc1snbmFtZSddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSA9 IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSk7DQoJCQkk dGhpcy0+b3B0aW9uc1snbmFtZSddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRo aXMtPm9wdGlvbnNbJ25hbWUnXSk7DQoJCX0NCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlv bnNbJ3ByZXBlbmQnXSkpDQoJCXsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gPSBz dHJfcmVwbGFjZSgiXFwiLCAiLyIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJ JHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL14oXC4qXC8rKSsv IiwgIiIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNb J3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICR0aGlzLT5vcHRpb25z WydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVw bGFjZSgiL1wvJC8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSkgLiAiLyI7DQoJ CX0NCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYXJjaGl2ZSgpDQoJew0KCQkkdGhpcy0+bWFr ZV9saXN0KCk7DQoNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDApDQoJ CXsNCgkJCSRwd2QgPSBnZXRjd2QoKTsNCgkJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNl ZGlyJ10pOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYmIGZp bGVfZXhpc3RzKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9wdGlvbnNbJ3R5 cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnppcCIgPyAi LnRtcCIgOiAiIikpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkZpbGUgeyR0aGlz LT5vcHRpb25zWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJY2hkaXIoJHB3ZCk7 DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQllbHNlIGlmICgkdGhpcy0+YXJjaGl2ZSA9IEBm b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddIC4gKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10g PT0gImd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiID8gIi50bXAi IDogIiIpLCAid2IrIikpDQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQllbHNlDQoJCQl7DQoJCQkJ JHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1l J119IGZvciB3cml0aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJ CQl9DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSAiIjsNCg0KCQlzd2l0Y2gg KCR0aGlzLT5vcHRpb25zWyd0eXBlJ10pDQoJCXsNCgkJY2FzZSAiemlwIjoNCgkJCWlmICgh JHRoaXMtPmNyZWF0ZV96aXAoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3Vs ZCBub3QgY3JlYXRlIHppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlicmVh azsNCgkJY2FzZSAiYnppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfdGFyKCkpDQoJCQl7 DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB0YXIgZmlsZS4iOw0K CQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX2J6aXAoKSkNCgkJ CXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIGJ6aXAyIGZpbGUu IjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJnemlwIjoNCgkJ CWlmICghJHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9 ICJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJ CQlpZiAoISR0aGlzLT5jcmVhdGVfZ3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltd ID0gIkNvdWxkIG5vdCBjcmVhdGUgZ3ppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9 DQoJCQlicmVhazsNCgkJY2FzZSAidGFyIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90YXIo KSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRhciBm aWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCg0KCQlpZiAoJHRoaXMtPm9wdGlv bnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJZmNsb3NlKCR0aGlzLT5hcmNoaXZlKTsN CgkJCWlmICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0 aW9uc1sndHlwZSddID09ICJiemlwIikNCgkJCQl1bmxpbmsoJHRoaXMtPm9wdGlvbnNbJ2Jh c2VkaXInXSAuICIvIiAuICR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAiLnRtcCIpOw0KCQl9 DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2RhdGEoJGRhdGEpDQoJew0KCQlpZiAoJHRoaXMtPm9w dGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJCWZ3cml0ZSgkdGhpcy0+YXJjaGl2ZSwgJGRh dGEpOw0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSAuPSAkZGF0YTsNCgl9DQoNCglmdW5j dGlvbiBtYWtlX2xpc3QoKQ0KCXsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPmV4Y2x1ZGUpKQ0K CQkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZvcmVh Y2ggKCR0aGlzLT5leGNsdWRlIGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1l J10gPT0gJGN1cnJlbnRbJ25hbWUnXSkNCgkJCQkJCXVuc2V0ICgkdGhpcy0+ZmlsZXNbJGtl eV0pOw0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+c3RvcmVvbmx5KSkNCgkJCWZvcmVhY2ggKCR0 aGlzLT5maWxlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCQlmb3JlYWNoICgkdGhpcy0+c3Rv cmVvbmx5IGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10gPT0gJGN1cnJl bnRbJ25hbWUnXSkNCgkJCQkJCSR0aGlzLT5maWxlc1ska2V5XVsnbWV0aG9kJ10gPSAwOw0K CQl1bnNldCAoJHRoaXMtPmV4Y2x1ZGUsICR0aGlzLT5zdG9yZW9ubHkpOw0KCX0NCg0KCWZ1 bmN0aW9uIGFkZF9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmls ZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5m aWxlc1tdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gZXhjbHVkZV9maWxlcygkbGlz dCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNo ICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5leGNsdWRlW10gPSAkY3VycmVudDsN Cgl9DQoNCglmdW5jdGlvbiBzdG9yZV9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRo aXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkN CgkJCSR0aGlzLT5zdG9yZW9ubHlbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIGxp c3RfZmlsZXMoJGxpc3QpDQoJew0KCQlpZiAoIWlzX2FycmF5ICgkbGlzdCkpDQoJCXsNCgkJ CSR0ZW1wID0gJGxpc3Q7DQoJCQkkbGlzdCA9IGFycmF5ICgkdGVtcCk7DQoJCQl1bnNldCAo JHRlbXApOw0KCQl9DQoNCgkJJGZpbGVzID0gYXJyYXkgKCk7DQoNCgkJJHB3ZCA9IGdldGN3 ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlmb3JlYWNo ICgkbGlzdCBhcyAkY3VycmVudCkNCgkJew0KCQkJJGN1cnJlbnQgPSBzdHJfcmVwbGFjZSgi XFwiLCAiLyIsICRjdXJyZW50KTsNCgkJCSRjdXJyZW50ID0gcHJlZ19yZXBsYWNlKCIvXC8r LyIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVnX3JlcGxhY2UoIi9cLyQv IiwgIiIsICRjdXJyZW50KTsNCgkJCWlmIChzdHJzdHIoJGN1cnJlbnQsICIqIikpDQoJCQl7 DQoJCQkJJHJlZ2V4ID0gcHJlZ19yZXBsYWNlKCIvKFtcXFxeXCRcLlxbXF1cfFwoXClcP1wr XHtcfVwvXSkvIiwgIlxcXFxcXDEiLCAkY3VycmVudCk7DQoJCQkJJHJlZ2V4ID0gc3RyX3Jl cGxhY2UoIioiLCAiLioiLCAkcmVnZXgpOw0KCQkJCSRkaXIgPSBzdHJzdHIoJGN1cnJlbnQs ICIvIikgPyBzdWJzdHIoJGN1cnJlbnQsIDAsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikpIDog Ii4iOw0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZGlyKTsNCgkJCQlmb3JlYWNo ICgkdGVtcCBhcyAkY3VycmVudDIpDQoJCQkJCWlmIChwcmVnX21hdGNoKCIvXnskcmVnZXh9 JC9pIiwgJGN1cnJlbnQyWyduYW1lJ10pKQ0KCQkJCQkJJGZpbGVzW10gPSAkY3VycmVudDI7 DQoJCQkJdW5zZXQgKCRyZWdleCwgJGRpciwgJHRlbXAsICRjdXJyZW50KTsNCgkJCX0NCgkJ CWVsc2UgaWYgKEBpc19kaXIoJGN1cnJlbnQpKQ0KCQkJew0KCQkJCSR0ZW1wID0gJHRoaXMt PnBhcnNlX2RpcigkY3VycmVudCk7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGZpbGUpDQoJ CQkJCSRmaWxlc1tdID0gJGZpbGU7DQoJCQkJdW5zZXQgKCR0ZW1wLCAkZmlsZSk7DQoJCQl9 DQoJCQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGN1cnJlbnQpKQ0KCQkJCSRmaWxlc1tdID0g YXJyYXkgKCduYW1lJyA9PiAkY3VycmVudCwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sn cHJlcGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRo aXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkY3VycmVudCwgIi8i KSkgPw0KCQkJCQlzdWJzdHIoJGN1cnJlbnQsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikgKyAx KSA6ICRjdXJyZW50KSwNCgkJCQkJJ3R5cGUnID0+IEBpc19saW5rKCRjdXJyZW50KSAmJiAk dGhpcy0+b3B0aW9uc1snZm9sbG93bGlua3MnXSA9PSAwID8gMiA6IDAsDQoJCQkJCSdleHQn ID0+IHN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3VycmVudCwgIi4iKSksICdzdGF0JyA9 PiBzdGF0KCRjdXJyZW50KSk7DQoJCX0NCg0KCQljaGRpcigkcHdkKTsNCg0KCQl1bnNldCAo JGN1cnJlbnQsICRwd2QpOw0KDQoJCXVzb3J0KCRmaWxlcywgYXJyYXkgKCJzbWRfYXRfYXJj aGl2ZSIsICJzb3J0X2ZpbGVzIikpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0KDQoJZnVu Y3Rpb24gcGFyc2VfZGlyKCRkaXJuYW1lKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydz dG9yZXBhdGhzJ10gPT0gMSAmJiAhcHJlZ19tYXRjaCgiL14oXC4rXC8qKSskLyIsICRkaXJu YW1lKSkNCgkJCSRmaWxlcyA9IGFycmF5IChhcnJheSAoJ25hbWUnID0+ICRkaXJuYW1lLCAn bmFtZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCXByZWdfcmVwbGFj ZSgiLyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10gPT0g MCAmJiBzdHJzdHIoJGRpcm5hbWUsICIvIikpID8NCgkJCQlzdWJzdHIoJGRpcm5hbWUsIHN0 cnJwb3MoJGRpcm5hbWUsICIvIikgKyAxKSA6ICRkaXJuYW1lKSwgJ3R5cGUnID0+IDUsICdz dGF0JyA9PiBzdGF0KCRkaXJuYW1lKSkpOw0KCQllbHNlDQoJCQkkZmlsZXMgPSBhcnJheSAo KTsNCgkJJGRpciA9IEBvcGVuZGlyKCRkaXJuYW1lKTsNCg0KCQl3aGlsZSAoJGZpbGUgPSBA cmVhZGRpcigkZGlyKSkNCgkJew0KCQkJJGZ1bGxuYW1lID0gJGRpcm5hbWUgLiAiLyIgLiAk ZmlsZTsNCgkJCWlmICgkZmlsZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIikNCgkJCQljb250 aW51ZTsNCgkJCWVsc2UgaWYgKEBpc19kaXIoJGZ1bGxuYW1lKSkNCgkJCXsNCgkJCQlpZiAo ZW1wdHkgKCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pKQ0KCQkJCQljb250aW51ZTsNCgkJ CQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGZ1bGxuYW1lKTsNCgkJCQlmb3JlYWNoICgk dGVtcCBhcyAkZmlsZTIpDQoJCQkJCSRmaWxlc1tdID0gJGZpbGUyOw0KCQkJfQ0KCQkJZWxz ZSBpZiAoQGZpbGVfZXhpc3RzKCRmdWxsbmFtZSkpDQoJCQkJJGZpbGVzW10gPSBhcnJheSAo J25hbWUnID0+ICRmdWxsbmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJlcGVu ZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9w dGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZnVsbG5hbWUsICIvIikpID8N CgkJCQkJc3Vic3RyKCRmdWxsbmFtZSwgc3RycnBvcygkZnVsbG5hbWUsICIvIikgKyAxKSA6 ICRmdWxsbmFtZSksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGluaygkZnVsbG5hbWUpICYmICR0 aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4dCcg PT4gc3Vic3RyKCRmaWxlLCBzdHJycG9zKCRmaWxlLCAiLiIpKSwgJ3N0YXQnID0+IHN0YXQo JGZ1bGxuYW1lKSk7DQoJCX0NCg0KCQlAY2xvc2VkaXIoJGRpcik7DQoNCgkJcmV0dXJuICRm aWxlczsNCgl9DQoNCglmdW5jdGlvbiBzb3J0X2ZpbGVzKCRhLCAkYikNCgl7DQoJCWlmICgk YVsndHlwZSddICE9ICRiWyd0eXBlJ10pDQoJCQlpZiAoJGFbJ3R5cGUnXSA9PSA1IHx8ICRi Wyd0eXBlJ10gPT0gMikNCgkJCQlyZXR1cm4gLTE7DQoJCQllbHNlIGlmICgkYVsndHlwZSdd ID09IDIgfHwgJGJbJ3R5cGUnXSA9PSA1KQ0KCQkJCXJldHVybiAxOw0KCQllbHNlIGlmICgk YVsndHlwZSddID09IDUpDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUn XSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQllbHNlIGlmICgkYVsnZXh0J10gIT0g JGJbJ2V4dCddKQ0KCQkJcmV0dXJuIHN0cmNtcCgkYVsnZXh0J10sICRiWydleHQnXSk7DQoJ CWVsc2UgaWYgKCRhWydzdGF0J11bN10gIT0gJGJbJ3N0YXQnXVs3XSkNCgkJCXJldHVybiAk YVsnc3RhdCddWzddID4gJGJbJ3N0YXQnXVs3XSA/IC0xIDogMTsNCgkJZWxzZQ0KCQkJcmV0 dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWyduYW1l J10pKTsNCgkJcmV0dXJuIDA7DQoJfQ0KDQoJZnVuY3Rpb24gZG93bmxvYWRfZmlsZSgpDQoJ ew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHRo aXMtPmVycm9yW10gPSAiQ2FuIG9ubHkgdXNlIGRvd25sb2FkX2ZpbGUoKSBpZiBhcmNoaXZl IGlzIGluIG1lbW9yeS4gUmVkaXJlY3QgdG8gZmlsZSBvdGhlcndpc2UsIGl0IGlzIGZhc3Rl ci4iOw0KCQkJcmV0dXJuOw0KCQl9DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUn XSkNCgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxp Y2F0aW9uL3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJaGVhZGVyKCJD b250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYnppcDIiKTsNCgkJCWJyZWFrOw0KCQljYXNl ICJnemlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWd6aXAi KTsNCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6 IGFwcGxpY2F0aW9uL3gtdGFyIik7DQoJCX0NCgkJJGhlYWRlciA9ICJDb250ZW50LURpc3Bv c2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiI7DQoJCSRoZWFkZXIgLj0gc3Ryc3Ry KCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICIvIikgPyBzdWJzdHIoJHRoaXMtPm9wdGlvbnNb J25hbWUnXSwgc3RycnBvcygkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIpICsgMSkgOiAk dGhpcy0+b3B0aW9uc1snbmFtZSddOw0KCQkkaGVhZGVyIC49ICJcIiI7DQoJCWhlYWRlcigk aGVhZGVyKTsNCgkJaGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigkdGhpcy0+ YXJjaGl2ZSkpOw0KCQloZWFkZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFy eSIpOw0KCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRh dGUsIG1heC1hZ2U9NjAiKTsNCgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEphbiAyMDAw IDEyOjAwOjAwIEdNVCIpOw0KCQlwcmludCgkdGhpcy0+YXJjaGl2ZSk7DQoJfQ0KfQ0KDQpj bGFzcyBzbWRfYXRfdGFyX2ZpbGUgZXh0ZW5kcyBzbWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0 aW9uIHNtZF9hdF90YXJfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfYXJjaGl2 ZSgkbmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPSAidGFyIjsNCgl9DQoNCglm dW5jdGlvbiBjcmVhdGVfdGFyKCkNCgl7DQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIo JHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVz IGFzICRjdXJyZW50KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+ b3B0aW9uc1snbmFtZSddKQ0KCQkJCWNvbnRpbnVlOw0KCQkJaWYgKHN0cmxlbigkY3VycmVu dFsnbmFtZTInXSkgPiA5OSkNCgkJCXsNCgkJCQkkcGF0aCA9IHN1YnN0cigkY3VycmVudFsn bmFtZTInXSwgMCwgc3RycG9zKCRjdXJyZW50WyduYW1lMiddLCAiLyIsIHN0cmxlbigkY3Vy cmVudFsnbmFtZTInXSkgLSAxMDApICsgMSk7DQoJCQkJJGN1cnJlbnRbJ25hbWUyJ10gPSBz dWJzdHIoJGN1cnJlbnRbJ25hbWUyJ10sIHN0cmxlbigkcGF0aCkpOw0KCQkJCWlmIChzdHJs ZW4oJHBhdGgpID4gMTU0IHx8IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgPiA5OSkNCgkJ CQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBhZGQgeyRwYXRofXskY3Vy cmVudFsnbmFtZTInXX0gdG8gYXJjaGl2ZSBiZWNhdXNlIHRoZSBmaWxlbmFtZSBpcyB0b28g bG9uZy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQl9DQoJCQkkYmxvY2sgPSBwYWNr KCJhMTAwYThhOGE4YTEyYTEyYThhMWExMDBhNmEyYTMyYTMyYThhOGExNTVhMTIiLCAkY3Vy cmVudFsnbmFtZTInXSwgc3ByaW50ZigiJTA3byIsDQoJCQkJJGN1cnJlbnRbJ3N0YXQnXVsy XSksIHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCddWzRdKSwgc3ByaW50ZigiJTA3 byIsICRjdXJyZW50WydzdGF0J11bNV0pLA0KCQkJCXNwcmludGYoIiUwMTFvIiwgJGN1cnJl bnRbJ3R5cGUnXSA9PSAyID8gMCA6ICRjdXJyZW50WydzdGF0J11bN10pLCBzcHJpbnRmKCIl MDExbyIsICRjdXJyZW50WydzdGF0J11bOV0pLA0KCQkJCSIgICAgICAgICIsICRjdXJyZW50 Wyd0eXBlJ10sICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IEByZWFkbGluaygkY3VycmVudFsn bmFtZSddKSA6ICIiLCAidXN0YXIgIiwgIiAiLA0KCQkJCSJVbmtub3duIiwgIlVua25vd24i LCAiIiwgIiIsICFlbXB0eSAoJHBhdGgpID8gJHBhdGggOiAiIiwgIiIpOw0KDQoJCQkkY2hl Y2tzdW0gPSAwOw0KCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0KCQkJCSRjaGVj a3N1bSArPSBvcmQoc3Vic3RyKCRibG9jaywgJGksIDEpKTsNCgkJCSRjaGVja3N1bSA9IHBh Y2soImE4Iiwgc3ByaW50ZigiJTA3byIsICRjaGVja3N1bSkpOw0KCQkJJGJsb2NrID0gc3Vi c3RyX3JlcGxhY2UoJGJsb2NrLCAkY2hlY2tzdW0sIDE0OCwgOCk7DQoNCgkJCWlmICgkY3Vy cmVudFsndHlwZSddID09IDIgfHwgJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJCSR0 aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJZWxzZSBpZiAoJGZwID0gQGZvcGVuKCRjdXJy ZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2sp Ow0KCQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCRmcCwgMTA0ODU3NikpDQoJCQkJCSR0aGlz LT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJaWYgKCRjdXJyZW50WydzdGF0J11bN10gJSA1MTIg PiAwKQ0KCQkJCXsNCgkJCQkJJHRlbXAgPSAiIjsNCgkJCQkJZm9yICgkaSA9IDA7ICRpIDwg NTEyIC0gJGN1cnJlbnRbJ3N0YXQnXVs3XSAlIDUxMjsgJGkrKykNCgkJCQkJCSR0ZW1wIC49 ICJcMCI7DQoJCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJfQ0KCQkJCWZjbG9z ZSgkZnApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5v dCBvcGVuIGZpbGUgeyRjdXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90 IGFkZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+YWRkX2RhdGEocGFjaygiYTEwMjQiLCAiIikp Ow0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIGV4 dHJhY3RfZmlsZXMoKQ0KCXsNCgkJJHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+ b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlpZiAoJGZwID0gJHRoaXMtPm9wZW5fYXJjaGl2 ZSgpKQ0KCQl7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMSkNCgkJ CQkkdGhpcy0+ZmlsZXMgPSBhcnJheSAoKTsNCg0KCQkJd2hpbGUgKCRibG9jayA9IGZyZWFk KCRmcCwgNTEyKSkNCgkJCXsNCgkJCQkkdGVtcCA9IHVucGFjaygiYTEwMG5hbWUvYThtb2Rl L2E4dWlkL2E4Z2lkL2ExMnNpemUvYTEybXRpbWUvYThjaGVja3N1bS9hMXR5cGUvYTEwMHN5 bWxpbmsvYTZtYWdpYy9hMnRlbXAvYTMydGVtcC9hMzJ0ZW1wL2E4dGVtcC9hOHRlbXAvYTE1 NXByZWZpeC9hMTJ0ZW1wIiwgJGJsb2NrKTsNCgkJCQkkZmlsZSA9IGFycmF5ICgNCgkJCQkJ J25hbWUnID0+ICR0ZW1wWydwcmVmaXgnXSAuICR0ZW1wWyduYW1lJ10sDQoJCQkJCSdzdGF0 JyA9PiBhcnJheSAoDQoJCQkJCQkyID0+ICR0ZW1wWydtb2RlJ10sDQoJCQkJCQk0ID0+IG9j dGRlYygkdGVtcFsndWlkJ10pLA0KCQkJCQkJNSA9PiBvY3RkZWMoJHRlbXBbJ2dpZCddKSwN CgkJCQkJCTcgPT4gb2N0ZGVjKCR0ZW1wWydzaXplJ10pLA0KCQkJCQkJOSA9PiBvY3RkZWMo JHRlbXBbJ210aW1lJ10pLA0KCQkJCQkpLA0KCQkJCQknY2hlY2tzdW0nID0+IG9jdGRlYygk dGVtcFsnY2hlY2tzdW0nXSksDQoJCQkJCSd0eXBlJyA9PiAkdGVtcFsndHlwZSddLA0KCQkJ CQknbWFnaWMnID0+ICR0ZW1wWydtYWdpYyddLA0KCQkJCSk7DQoNCgkJCQlpZiAoJGZpbGVb J2NoZWNrc3VtJ10gPT0gMHgwMDAwMDAwMCkNCgkJCQkJYnJlYWs7DQoJCQkJZWxzZSBpZiAo c3Vic3RyKCRmaWxlWydtYWdpYyddLCAwLCA1KSAhPSAidXN0YXIiKQ0KCQkJCXsNCgkJCQkJ JHRoaXMtPmVycm9yW10gPSAiVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCBleHRyYWN0 aW5nIHRoaXMgdHlwZSBvZiB0YXIgZmlsZS4iOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQkJ JGJsb2NrID0gc3Vic3RyX3JlcGxhY2UoJGJsb2NrLCAiICAgICAgICAiLCAxNDgsIDgpOw0K CQkJCSRjaGVja3N1bSA9IDA7DQoJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0K CQkJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkYmxvY2ssICRpLCAxKSk7DQoJCQkJaWYg KCRmaWxlWydjaGVja3N1bSddICE9ICRjaGVja3N1bSkNCgkJCQkJJHRoaXMtPmVycm9yW10g PSAiQ291bGQgbm90IGV4dHJhY3QgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0sIGl0 IGlzIGNvcnJ1cHQuIjsNCg0KCQkJCS8vIEFkZGVkOiBjcmVhdGUgZGlyIGlmIHJlcXVpcmVk DQoJCQkJaWYgKHN0cnBvcygkZmlsZVsnbmFtZSddLCAnLi4nKSA9PT0gZmFsc2UpIHsNCgkJ CQkJJHBhdGhfcGFydHMgPSBwYXRoaW5mbygkZmlsZVsnbmFtZSddKTsNCgkJCQkJaWYgKCFm aWxlX2V4aXN0cygkZmlsZVsnbmFtZSddKSkgew0KCQkJCQkJJHJldCA9IHNtZF9ta2Rpcl9y ZWN1cnNpdmUoKChpc3NldCgkcGF0aF9wYXJ0c1snZXh0ZW5zaW9uJ10pKSA/IGRpcm5hbWUo JHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFtZSddKSA6ICR0aGlzLT5v cHRpb25zWydiYXNlZGlyJ10uRFMuJGZpbGVbJ25hbWUnXSkpOw0KCQkJCQl9DQoJCQkJfQ0K DQoJCQkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDEpDQoJCQkJew0KCQkJ CQkkZmlsZVsnZGF0YSddID0gZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKTsNCgkJCQkJ ZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikgPT0gNTEyID8gMCA6 ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7DQoJCQkJCXVuc2V0ICgkZmlsZVsn Y2hlY2tzdW0nXSwgJGZpbGVbJ21hZ2ljJ10pOw0KCQkJCQkkdGhpcy0+ZmlsZXNbXSA9ICRm aWxlOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDUpDQoJCQkJew0K CQkJCQlpZiAoIWlzX2RpcigkZmlsZVsnbmFtZSddKSkNCgkJCQkJCW1rZGlyKCRmaWxlWydu YW1lJ10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkdGhpcy0+ b3B0aW9uc1snb3ZlcndyaXRlJ10gPT0gMCAmJiBmaWxlX2V4aXN0cygkZmlsZVsnbmFtZSdd KSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gInskZmlsZVsnbmFtZSddfSBhbHJl YWR5IGV4aXN0cy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJGZp bGVbJ3R5cGUnXSA9PSAyKQ0KCQkJCXsNCgkJCQkJc3ltbGluaygkdGVtcFsnc3ltbGluaydd LCAkZmlsZVsnbmFtZSddKTsNCgkJCQkJY2htb2QoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0 YXQnXVsyXSk7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRuZXcgPSBmb3BlbigkZmlsZVsnbmFt ZSddLCAid2IiKSkNCgkJCQl7DQoJCQkJCWZ3cml0ZSgkbmV3LCBmcmVhZCgkZnAsICRmaWxl WydzdGF0J11bN10pKTsNCgkJCQkJZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3 XSAlIDUxMikgPT0gNTEyID8gMCA6ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7 DQoJCQkJCWZjbG9zZSgkbmV3KTsNCgkJCQkJQGNobW9kKCRmaWxlWyduYW1lJ10sIDA2NDQp OyAvLyBIYXJkLWNvZGVkIGZvciBub3cgYmVjYXVzZSB0aGUgc3R1cGlkIDAxMDA2NDQgdmFs dWUgaW4gJGZpbGVbJ3N0YXQnXVsyXSBjb25mdXNlcyB0aGUgT1MvUEhQDQoJCQkJfQ0KCQkJ CWVsc2UNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHsk ZmlsZVsnbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJ CQkJLy8gUmVtb3ZlIG93bmVyIGFuZCBncm91cCBzZXR0aW5nIHNpbmNlIHRoZXJlIGlzIGFs bW9zdCAwIGxpa2VsaWhvb2QgdGhlIGZpbGVzIHdpbGwgaGF2ZSB0aGUgc2FtZSB1c2VyL2dy b3VwIGFjcm9zcyBzeXN0ZW1zDQoJCQkJLy8gSW4gb3RoZXIgd29yZHMsIGxlYXZlIG93bmVy L2dyb3VwIGF0IHRoZSBBcGFjaGUgZGVmYXVsdCAtLSB3aGljaCBpcyB3aGF0IHdlIHdhbnQN Ci8vCQkJCWNob3duKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bNF0pOw0KLy8JCQkJ Y2hncnAoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs1XSk7DQoJCQkJQHRvdWNoKCRm aWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bOV0pOw0KCQkJCXVuc2V0ICgkZmlsZSk7DQoJ CQl9DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4g ZmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0iOw0KDQoJCWNoZGlyKCRwd2QpOw0KCX0N Cg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4gQGZvcGVuKCR0aGlz LT5vcHRpb25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2d6aXBf ZmlsZSBleHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9nemlw X2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJ JHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJnemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVh dGVfZ3ppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkN CgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jh c2VkaXInXSk7DQoJCQlpZiAoJGZwID0gZ3pvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10s ICJ3YnskdGhpcy0+b3B0aW9uc1snbGV2ZWwnXX0iKSkNCgkJCXsNCgkJCQlmc2VlaygkdGhp cy0+YXJjaGl2ZSwgMCk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJHRoaXMtPmFyY2hp dmUsIDEwNDg1NzYpKQ0KCQkJCQlnendyaXRlKCRmcCwgJHRlbXApOw0KCQkJCWd6Y2xvc2Uo JGZwKTsNCgkJCQljaGRpcigkcHdkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhp cy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0g Zm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0N CgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9IGd6ZW5jb2RlKCR0aGlzLT5hcmNo aXZlLCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJ ZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAZ3pvcGVuKCR0aGlzLT5v cHRpb25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2J6aXBfZmls ZSBleHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9iemlwX2Zp bGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRo aXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJiemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVf YnppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJ ew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSk7DQoJCQlpZiAoJGZwID0gYnpvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3 YiIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAo JHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWJ6d3JpdGUo JGZwLCAkdGVtcCk7DQoJCQkJYnpjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJ fQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVu IHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRw d2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNo aXZlID0gYnpjb21wcmVzcygkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNbJ2xldmVs J10pOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJ ew0KCQlyZXR1cm4gQGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiciIpOw0KCX0N Cn0NCg0KY2xhc3Mgc21kX2F0X3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X2FyY2hpdmUNCnsN CglmdW5jdGlvbiBzbWRfYXRfemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0 X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gInppcCI7DQoJ fQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3ppcCgpDQoJew0KCQkkZmlsZXMgPSAwOw0KCQkkb2Zm c2V0ID0gMDsNCgkJJGNlbnRyYWwgPSAiIjsNCg0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0 aW9uc1snc2Z4J10pKQ0KCQkJaWYgKCRmcCA9IEBmb3BlbigkdGhpcy0+b3B0aW9uc1snc2Z4 J10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJlYWQoJGZwLCBmaWxlc2l6ZSgkdGhp cy0+b3B0aW9uc1snc2Z4J10pKTsNCgkJCQlmY2xvc2UoJGZwKTsNCgkJCQkkdGhpcy0+YWRk X2RhdGEoJHRlbXApOw0KCQkJCSRvZmZzZXQgKz0gc3RybGVuKCR0ZW1wKTsNCgkJCQl1bnNl dCAoJHRlbXApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxk IG5vdCBvcGVuIHNmeCBtb2R1bGUgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ3NmeCddfS4iOw0K DQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXIn XSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRjdXJyZW50KQ0KCQl7DQoJCQlp ZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0aW9uc1snbmFtZSddKQ0KCQkJCWNv bnRpbnVlOw0KDQoJCQkkdGltZWRhdGUgPSBleHBsb2RlKCIgIiwgZGF0ZSgiWSBuIGogRyBp IHMiLCAkY3VycmVudFsnc3RhdCddWzldKSk7DQoJCQkkdGltZWRhdGUgPSAoJHRpbWVkYXRl WzBdIC0gMTk4MCA8PCAyNSkgfCAoJHRpbWVkYXRlWzFdIDw8IDIxKSB8ICgkdGltZWRhdGVb Ml0gPDwgMTYpIHwNCgkJCQkoJHRpbWVkYXRlWzNdIDw8IDExKSB8ICgkdGltZWRhdGVbNF0g PDwgNSkgfCAoJHRpbWVkYXRlWzVdKTsNCg0KCQkJJGJsb2NrID0gcGFjaygiVnZ2dlYiLCAw eDA0MDM0YjUwLCAweDAwMEEsIDB4MDAwMCwgKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkg fHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAk dGltZWRhdGUpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwICYmICRjdXJy ZW50Wyd0eXBlJ10gPT0gNSkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAw eDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25h bWUyJ10pICsgMSwgMHgwMDAwKTsNCgkJCQkkYmxvY2sgLj0gJGN1cnJlbnRbJ25hbWUyJ10g LiAiLyI7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJJGNlbnRyYWwgLj0g cGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9w dGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJ KGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCdd ID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCTB4MDAwMDAwMDAs IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgKyAx LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0eXBlJ10gPT0g NSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAu PSAkY3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0 ICs9ICgzMSArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0KCQkJZWxzZSBp ZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJew0KCQkJCSRibG9jayAuPSBwYWNr KCJWVlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigk Y3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50Wydu YW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSRjZW50cmFsIC49 IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAwMTQsICR0aGlzLT5v cHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBBLCAweDAwMDAsDQoJCQkJ CShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2Qn XSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJCQkweDAwMDAwMDAw LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0eXBlJ10gPT0gNSA/ IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAk Y3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCAr IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoJGZwID0g QGZvcGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJl YWQoJGZwLCAkY3VycmVudFsnc3RhdCddWzddKTsNCgkJCQlmY2xvc2UoJGZwKTsNCgkJCQkk Y3JjMzIgPSBjcmMzMigkdGVtcCk7DQoJCQkJaWYgKCFpc3NldCgkY3VycmVudFsnbWV0aG9k J10pICYmICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJHRl bXAgPSBnemNvbXByZXNzKCR0ZW1wLCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoJCQkJ CSRzaXplID0gc3RybGVuKCR0ZW1wKSAtIDY7DQoJCQkJCSR0ZW1wID0gc3Vic3RyKCR0ZW1w LCAyLCAkc2l6ZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJJHNpemUgPSBzdHJsZW4oJHRl bXApOw0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsICRjcmMzMiwgJHNpemUsICRjdXJy ZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJ CQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgk YmxvY2spOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJdW5zZXQgKCR0ZW1w KTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwgMHgwMjAxNGI1 MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4MDAwMCA6IDB4 MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8fCAkdGhp cy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0aW1lZGF0 ZSwNCgkJCQkJJGNyYzMyLCAkc2l6ZSwgJGN1cnJlbnRbJ3N0YXQnXVs3XSwgc3RybGVuKCRj dXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXTsN CgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCArIHN0cmxlbigkY3VycmVudFsn bmFtZTInXSkgKyAkc2l6ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRoaXMtPmVycm9yW10g PSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0gZm9yIHJlYWRpbmcu IEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRfZGF0YSgkY2VudHJh bCk7DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBhY2soIlZ2dnZ2VlZ2IiwgMHgwNjA1NGI1MCwg MHgwMDAwLCAweDAwMDAsICRmaWxlcywgJGZpbGVzLCBzdHJsZW4oJGNlbnRyYWwpLCAkb2Zm c2V0LA0KCQkJIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA/IHN0cmxlbigk dGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA6IDB4MDAwMCkpOw0KDQoJCWlmICghZW1wdHkg KCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pKQ0KCQkJJHRoaXMtPmFkZF9kYXRhKCR0aGlz LT5vcHRpb25zWydjb21tZW50J10pOw0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJCXJldHVybiAx Ow0KCX0NCn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgQ2xhc3MgZFVuemlwMiB2Mi42Mg0KIw0KIyAgQXV0 aG9yOiBBbGV4YW5kcmUgVGVkZXNjaGkgKGQpDQojICBFLU1haWw6IGFsZXhhbmRyZWJyIGF0 IGdtYWlsIGRvdCBjb20NCiMgIExvbmRyaW5hIC0gUFIgLyBCcmF6aWwNCiMNCiMgIE9iamVj dGl2ZToNCiMgICAgVGhpcyBjbGFzcyBhbGxvd3MgcHJvZ3JhbW1lciB0byBlYXNpbHkgdW56 aXAgZmlsZXMgb24gdGhlIGZseS4NCiMNCiMgIFJlcXVpcmVtZW50czoNCiMgICAgVGhpcyBj bGFzcyByZXF1aXJlcyBleHRlbnNpb24gWkxpYiBFbmFibGVkLiBJdCBpcyBkZWZhdWx0DQoj ICAgIGZvciBtb3N0IHNpdGUgaG9zdHMgYXJvdW5kIHRoZSB3b3JsZCwgYW5kIGZvciB0aGUg UEhQIFdpbjMyIGRpc3QuDQojDQojICBUbyBkbzoNCiMgICAqIEVycm9yIGhhbmRsaW5nDQoj ICAgKiBXcml0ZSBhIFBIUC1TaWRlIGd6aW5mbGF0ZSwgdG8gY29tcGxldGVseSBhdm9pZCBh bnkgZXh0ZXJuYWwgZXh0ZW5zaW9ucw0KIyAgICogV3JpdGUgb3RoZXIgZGVjb21wcmVzcyBh bGdvcml0aG1zDQojDQojICBNZXRob2RzOg0KIyAgKiBkVW56aXAyKCRmaWxlbmFtZSkgICAg ICAgICAtIENvbnN0cnVjdG9yIC0gT3BlbnMgJGZpbGVuYW1lDQojICAqIGdldExpc3QoWyRz dG9wT25GaWxlXSkgICAgIC0gUmV0cmlldmUgdGhlIGZpbGUgbGlzdA0KIyAgKiBnZXRFeHRy YUluZm8oJHppcGZpbGVuYW1lKSAtIFJldHJpZXZlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQg Y29tcHJlc3NlZCBmaWxlDQojICAqIGdldFppcEluZm8oWyRlbnRyeV0pICAgICAgIC0gUmV0 cmlldmUgWklQIGZpbGUgZGV0YWlscy4NCiMgICogdW56aXAoJHppcGZpbGVuYW1lLCBbJG91 dGZpbGVuYW1lLCBbJGFwcGx5Q2htb2RdXSkgLSBVbnppcCBmaWxlDQojICAqIHVuemlwQWxs KFskb3V0RGlyLCBbJHppcERpciwgWyRtYWludGFpblN0cnVjdHVyZSwgWyRhcHBseUNobW9k XV1dXSkNCiMgICogY2xvc2UoKSAgICAgICAgICAgICAgICAgICAgLSBDbG9zZSBmaWxlIGhh bmRsZXIsIGJ1dCBrZWVwIHRoZSBsaXN0DQojICAqIF9fZGVzdHJveSgpICAgICAgICAgICAg ICAgIC0gQ2xvc2UgZmlsZSBoYW5kbGVyIGFuZCByZWxlYXNlIG1lbW9yeQ0KIw0KIyAgSWYg eW91IG1vZGlmeSB0aGlzIGNsYXNzLCBvciBoYXZlIGFueSBpZGVhcyB0byBpbXByb3ZlIGl0 LCBwbGVhc2UgY29udGFjdCBtZSENCiMgIFlvdSBhcmUgYWxsb3dlZCB0byByZWRpc3RyaWJ1 dGUgdGhpcyBjbGFzcywgaWYgeW91IGtlZXAgbXkgbmFtZSBhbmQgY29udGFjdCBlLW1haWwg b24gaXQuDQojDQojICBQTEVBU0UhIElGIFlPVSBVU0UgVEhJUyBDTEFTUyBJTiBBTlkgT0Yg WU9VUiBQUk9KRUNUUywgUExFQVNFIExFVCBNRSBLTk9XIQ0KIyAgSWYgeW91IGhhdmUgcHJv YmxlbXMgdXNpbmcgaXQsIGRvbid0IHRoaW5rIHR3aWNlIGJlZm9yZSBjb250YWN0aW5nIG1l IQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMNCg0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVu dHMnKSl7DQoJLy8gSWYgbm90IFBIUDUsIGNyZWF0ZXMgYSBjb21wYXRpYmxlIGZ1bmN0aW9u DQoJRnVuY3Rpb24gZmlsZV9wdXRfY29udGVudHMoJGZpbGUsICRkYXRhKXsNCgkJaWYoJHRt cCA9IGZvcGVuKCRmaWxlLCAidyIpKXsNCgkJCWZ3cml0ZSgkdG1wLCAkZGF0YSk7DQoJCQlm Y2xvc2UoJHRtcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllY2hvICI8Yj5maWxlX3B1 dF9jb250ZW50czo8L2I+IENhbm5vdCBjcmVhdGUgZmlsZSAkZmlsZTxicj4iOw0KCQlyZXR1 cm4gZmFsc2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfZFVuemlwMnsNCglGdW5jdGlvbiBnZXRW ZXJzaW9uKCl7DQoJCXJldHVybiAiMi42MiI7DQoJfQ0KCS8vIFB1YmxpYw0KCXZhciAkZmls ZU5hbWU7DQoJdmFyICRsYXN0RXJyb3I7DQoJdmFyICRjb21wcmVzc2VkTGlzdDsgLy8gWW91 IHdpbGwgcHJvYmxhYmx5IHVzZSBvbmx5IHRoaXMgb25lIQ0KCXZhciAkY2VudHJhbERpckxp c3Q7IC8vIENlbnRyYWwgZGlyIGxpc3QuLi4gSXQncyBhIGtpbmQgb2YgJ2V4dHJhIGF0dHJp YnV0ZXMnIGZvciBhIHNldCBvZiBmaWxlcw0KCXZhciAkZW5kT2ZDZW50cmFsOyAgIC8vIEVu ZCBvZiBjZW50cmFsIGRpciwgY29udGFpbnMgWklQIENvbW1lbnRzDQoJdmFyICRkZWJ1ZzsN Cg0KCS8vIFByaXZhdGUNCgl2YXIgJGZoOw0KCXZhciAkemlwU2lnbmF0dXJlID0gIlx4NTBc eDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRp clNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBkaXIgaGVhZGVy IHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYiOyAv LyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoNCgkvLyBQdWJsaWMNCglGdW5jdGlv biBzbWRfZFVuemlwMigkZmlsZU5hbWUpew0KCQkkdGhpcy0+ZmlsZU5hbWUgICAgICAgPSAk ZmlsZU5hbWU7DQoJCSR0aGlzLT5jb21wcmVzc2VkTGlzdCA9DQoJCSR0aGlzLT5jZW50cmFs RGlyTGlzdCA9DQoJCSR0aGlzLT5lbmRPZkNlbnRyYWwgICA9IEFycmF5KCk7DQoJfQ0KDQoJ RnVuY3Rpb24gZ2V0TGlzdCgkc3RvcE9uRmlsZT1mYWxzZSl7DQoJCWlmKHNpemVvZigkdGhp cy0+Y29tcHJlc3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiUmV0dXJuaW5n IGFscmVhZHkgbG9hZGVkIGZpbGUgbGlzdC4iKTsNCgkJCXJldHVybiAkdGhpcy0+Y29tcHJl c3NlZExpc3Q7DQoJCX0NCg0KCQkvLyBPcGVuIGZpbGUsIGFuZCBzZXQgZmlsZSBoYW5kbGVy DQoJCSRmaCA9IGZvcGVuKCR0aGlzLT5maWxlTmFtZSwgInIiKTsNCgkJJHRoaXMtPmZoID0g JiRmaDsNCgkJaWYoISRmaCl7DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkZhaWxlZCB0byBs b2FkIGZpbGUuIik7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQkkdGhpcy0+ZGVidWdN c2coMSwgIkxvYWRpbmcgbGlzdCBmcm9tICdFbmQgb2YgQ2VudHJhbCBEaXInIGluZGV4IGxp c3QuLi4iKTsNCgkJaWYoISR0aGlzLT5fbG9hZEZpbGVMaXN0QnlFT0YoJGZoLCAkc3RvcE9u RmlsZSkpew0KCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJGYWlsZWQhIFRyeWluZyB0byBsb2Fk IGxpc3QgbG9va2luZyBmb3Igc2lnbmF0dXJlcy4uLiIpOw0KCQkJaWYoISR0aGlzLT5fbG9h ZEZpbGVMaXN0QnlTaWduYXR1cmVzKCRmaCwgJHN0b3BPbkZpbGUpKXsNCgkJCQkkdGhpcy0+ ZGVidWdNc2coMSwgIkZhaWxlZCEgQ291bGQgbm90IGZpbmQgYW55IHZhbGlkIGhlYWRlci4i KTsNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlpJUCBGaWxlIGlzIGNvcnJ1cHRlZCBvciBl bXB0eSIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KDQoJCWlmKCR0aGlzLT5k ZWJ1Zyl7DQoJCQkjLS0tLS0tLSBEZWJ1ZyBjb21wcmVzc2VkTGlzdA0KCQkJJGtrayA9IDA7 DQoJCQllY2hvICI8dGFibGUgYm9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJkYW5h OyBib3JkZXI6IDFweCBzb2xpZCAjMDAwJz4iOw0KCQkJZm9yZWFjaCgkdGhpcy0+Y29tcHJl c3NlZExpc3QgYXMgJGZpbGVOYW1lPT4kaXRlbSl7DQoJCQkJaWYoISRra2sgJiYgJGtraz0x KXsNCgkJCQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQURBJz4iOw0KCQkJCQlm b3JlYWNoKCRpdGVtIGFzICRmaWVsZE5hbWU9PiR2YWx1ZSkNCgkJCQkJCWVjaG8gIjx0ZD4k ZmllbGROYW1lPC90ZD4iOw0KCQkJCQllY2hvICc8L3RyPic7DQoJCQkJfQ0KCQkJCWVjaG8g Ijx0ciBzdHlsZT0nYmFja2dyb3VuZDogI0NGQyc+IjsNCgkJCQlmb3JlYWNoKCRpdGVtIGFz ICRmaWVsZE5hbWU9PiR2YWx1ZSl7DQoJCQkJCWlmKCRmaWVsZE5hbWUgPT0gJ2xhc3Rtb2Rf ZGF0ZXRpbWUnKQ0KCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9 J25vd3JhcCc+Ii5kYXRlKCJkL20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJ ZWxzZQ0KCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3Jh cCc+JHZhbHVlPC90ZD4iOw0KCQkJCX0NCgkJCQllY2hvICI8L3RyPiI7DQoJCQl9DQoJCQll Y2hvICI8L3RhYmxlPiI7DQoNCgkJCSMtLS0tLS0tIERlYnVnIGNlbnRyYWxEaXJMaXN0DQoJ CQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+Y2VudHJhbERpckxpc3QpKXsNCgkJ CQllY2hvICI8dGFibGUgYm9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJkYW5hOyBi b3JkZXI6IDFweCBzb2xpZCAjMDAwJz4iOw0KCQkJCWZvcmVhY2goJHRoaXMtPmNlbnRyYWxE aXJMaXN0IGFzICRmaWxlTmFtZT0+JGl0ZW0pew0KCQkJCQlpZighJGtrayAmJiAka2trPTEp ew0KCQkJCQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQUFEJz4iOw0KCQkJCQkJ Zm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpDQoJCQkJCQkJZWNobyAiPHRk PiRmaWVsZE5hbWU8L3RkPiI7DQoJCQkJCQllY2hvICc8L3RyPic7DQoJCQkJCX0NCgkJCQkJ ZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQ0NGJz4iOw0KCQkJCQlmb3JlYWNoKCRp dGVtIGFzICRmaWVsZE5hbWU9PiR2YWx1ZSl7DQoJCQkJCQlpZigkZmllbGROYW1lID09ICds YXN0bW9kX2RhdGV0aW1lJykNCgkJCQkJCQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5hbWUn IG5vd3JhcD0nbm93cmFwJz4iLmRhdGUoImQvbS9ZIEg6aTpzIiwgJHZhbHVlKS4iPC90ZD4i Ow0KCQkJCQkJZWxzZQ0KCQkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93 cmFwPSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJCQkJfQ0KCQkJCQllY2hvICI8L3RyPiI7 DQoJCQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCg0KCQkJIy0tLS0tLS0gRGVi dWcgZW5kT2ZDZW50cmFsDQoJCQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+ZW5k T2ZDZW50cmFsKSl7DQoJCQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6 IDExcHggVmVyZGFuYScgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDAnPiI7DQoJCQkJ ZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjREFBJz48dGQgY29sc3Bhbj0nMic+ZFVu emlwIC0gRW5kIG9mIGZpbGU8L3RkPjwvdHI+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5lbmRP ZkNlbnRyYWwgYXMgJGZpZWxkPT4kdmFsdWUpew0KCQkJCQllY2hvICI8dHI+IjsNCgkJCQkJ ZWNobyAiPHRkIHN0eWxlPSdiYWNrZ3JvdW5kOiAjRkNDJz4kZmllbGQ8L3RkPiI7DQoJCQkJ CWVjaG8gIjx0ZCBzdHlsZT0nYmFja2dyb3VuZDogI0ZERCc+JHZhbHVlPC90ZD4iOw0KCQkJ CQllY2hvICI8L3RyPiI7DQoJCQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCgkJ fQ0KDQoJCXJldHVybiAkdGhpcy0+Y29tcHJlc3NlZExpc3Q7DQoJfQ0KCUZ1bmN0aW9uIGdl dEV4dHJhSW5mbygkY29tcHJlc3NlZEZpbGVOYW1lKXsNCgkJcmV0dXJuDQoJCQlpc3NldCgk dGhpcy0+Y2VudHJhbERpckxpc3RbJGNvbXByZXNzZWRGaWxlTmFtZV0pPw0KCQkJJHRoaXMt PmNlbnRyYWxEaXJMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdOg0KCQkJZmFsc2U7DQoJfQ0K CUZ1bmN0aW9uIGdldFppcEluZm8oJGRldGFpbD1mYWxzZSl7DQoJCXJldHVybiAkZGV0YWls Pw0KCQkJJHRoaXMtPmVuZE9mQ2VudHJhbFskZGV0YWlsXToNCgkJCSR0aGlzLT5lbmRPZkNl bnRyYWw7DQoJfQ0KDQoJRnVuY3Rpb24gdW56aXAoJGNvbXByZXNzZWRGaWxlTmFtZSwgJHRh cmdldEZpbGVOYW1lPWZhbHNlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoIXNpemVvZigk dGhpcy0+Y29tcHJlc3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiVHJ5aW5n IHRvIHVuemlwIGJlZm9yZSBsb2FkaW5nIGZpbGUgbGlzdC4uLiBMb2FkaW5nIGl0ISIpOw0K CQkJJHRoaXMtPmdldExpc3QoZmFsc2UsICRjb21wcmVzc2VkRmlsZU5hbWUpOw0KCQl9DQoN CgkJJGZkZXRhaWxzID0gJiR0aGlzLT5jb21wcmVzc2VkTGlzdFskY29tcHJlc3NlZEZpbGVO YW1lXTsNCgkJaWYoIWlzc2V0KCR0aGlzLT5jb21wcmVzc2VkTGlzdFskY29tcHJlc3NlZEZp bGVOYW1lXSkpew0KCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJGaWxlICc8Yj4kY29tcHJlc3Nl ZEZpbGVOYW1lPC9iPicgaXMgbm90IGNvbXByZXNzZWQgaW4gdGhlIHppcC4iKTsNCgkJCXJl dHVybiBmYWxzZTsNCgkJfQ0KCQlpZihzdWJzdHIoJGNvbXByZXNzZWRGaWxlTmFtZSwgLTEp ID09ICIvIil7DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlRyeWluZyB0byB1bnppcCBhIGZv bGRlciBuYW1lICc8Yj4kY29tcHJlc3NlZEZpbGVOYW1lPC9iPicuIik7DQoJCQlyZXR1cm4g ZmFsc2U7DQoJCX0NCgkJaWYoISRmZGV0YWlsc1sndW5jb21wcmVzc2VkX3NpemUnXSl7DQoJ CQkkdGhpcy0+ZGVidWdNc2coMSwgIkZpbGUgJzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8L2I+ JyBpcyBlbXB0eS4iKTsNCgkJCXJldHVybiAkdGFyZ2V0RmlsZU5hbWU/DQoJCQkJZmlsZV9w dXRfY29udGVudHMoJHRhcmdldEZpbGVOYW1lLCAiIik6DQoJCQkJIiI7DQoJCX0NCg0KCQlm c2VlaygkdGhpcy0+ZmgsICRmZGV0YWlsc1snY29udGVudHMtc3RhcnRPZmZzZXQnXSk7DQoJ CSRyZXQgPSAkdGhpcy0+dW5jb21wcmVzcygNCgkJCQlmcmVhZCgkdGhpcy0+ZmgsICRmZGV0 YWlsc1snY29tcHJlc3NlZF9zaXplJ10pLA0KCQkJCSRmZGV0YWlsc1snY29tcHJlc3Npb25f bWV0aG9kJ10sDQoJCQkJJGZkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddLA0KCQkJCSR0 YXJnZXRGaWxlTmFtZQ0KCQkJKTsNCgkJaWYoJGFwcGx5Q2htb2QgJiYgJHRhcmdldEZpbGVO YW1lKQ0KCQkJY2htb2QoJHRhcmdldEZpbGVOYW1lLCAwNzc3KTsNCgkJDQoJCXJldHVybiAk cmV0Ow0KCX0NCglGdW5jdGlvbiB1bnppcEFsbCgkdGFyZ2V0RGlyPWZhbHNlLCAkYmFzZURp cj0iIiwgJG1haW50YWluU3RydWN0dXJlPXRydWUsICRhcHBseUNobW9kPTA3Nzcpew0KCQlp ZigkdGFyZ2V0RGlyID09PSBmYWxzZSkNCgkJCSR0YXJnZXREaXIgPSBkaXJuYW1lKCRfU0VS VkVSWydTQ1JJUFRfRklMRU5BTUUnXSkuIi8iOw0KCQkNCgkJJGxpc3RhID0gJHRoaXMtPmdl dExpc3QoKTsNCgkJaWYoc2l6ZW9mKCRsaXN0YSkpIGZvcmVhY2goJGxpc3RhIGFzICRmaWxl TmFtZT0+JHRyYXNoKXsNCgkJCSRkaXJuYW1lICA9IGRpcm5hbWUoJGZpbGVOYW1lKTsNCgkJ CSRvdXRETiAgICA9ICIkdGFyZ2V0RGlyLyRkaXJuYW1lIjsNCgkJCQ0KCQkJaWYoc3Vic3Ry KCRkaXJuYW1lLCAwLCBzdHJsZW4oJGJhc2VEaXIpKSAhPSAkYmFzZURpcikNCgkJCQljb250 aW51ZTsNCgkJCQ0KCQkJaWYoIWlzX2Rpcigkb3V0RE4pICYmICRtYWludGFpblN0cnVjdHVy ZSl7DQoJCQkJJHN0ciA9ICIiOw0KCQkJCSRmb2xkZXJzID0gZXhwbG9kZSgiLyIsICRkaXJu YW1lKTsNCgkJCQlmb3JlYWNoKCRmb2xkZXJzIGFzICRmb2xkZXIpew0KCQkJCQkkc3RyID0g JHN0cj8iJHN0ci8kZm9sZGVyIjokZm9sZGVyOw0KCQkJCQlpZighaXNfZGlyKCIkdGFyZ2V0 RGlyLyRzdHIiKSl7DQoJCQkJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkNyZWF0aW5nIGZvbGRl cjogJHRhcmdldERpci8kc3RyIik7DQoJCQkJCQlta2RpcigiJHRhcmdldERpci8kc3RyIik7 DQoJCQkJCQlpZigkYXBwbHlDaG1vZCkNCgkJCQkJCQljaG1vZCgiJHRhcmdldERpci8kc3Ry IiwgJGFwcGx5Q2htb2QpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJaWYoc3Vic3RyKCRm aWxlTmFtZSwgLTEsIDEpID09ICIvIikNCgkJCQljb250aW51ZTsNCg0KCQkJJG1haW50YWlu U3RydWN0dXJlPw0KCQkJCSR0aGlzLT51bnppcCgkZmlsZU5hbWUsICIkdGFyZ2V0RGlyLyRm aWxlTmFtZSIsICRhcHBseUNobW9kKToNCgkJCQkkdGhpcy0+dW56aXAoJGZpbGVOYW1lLCAi JHRhcmdldERpci8iLmJhc2VuYW1lKCRmaWxlTmFtZSksICRhcHBseUNobW9kKTsNCgkJfQ0K CX0NCgkNCglGdW5jdGlvbiBjbG9zZSgpeyAgICAgLy8gRnJlZSB0aGUgZmlsZSByZXNvdXJj ZQ0KCQlpZigkdGhpcy0+ZmgpDQoJCQlmY2xvc2UoJHRoaXMtPmZoKTsNCgl9DQoJRnVuY3Rp b24gX19kZXN0cm95KCl7IA0KCQkkdGhpcy0+Y2xvc2UoKTsNCgl9DQoNCgkvLyBQcml2YXRl ICh5b3Ugc2hvdWxkIE5PVCBjYWxsIHRoZXNlIG1ldGhvZHMpOg0KCUZ1bmN0aW9uIHVuY29t cHJlc3MoJiRjb250ZW50LCAkbW9kZSwgJHVuY29tcHJlc3NlZFNpemUsICR0YXJnZXRGaWxl TmFtZT1mYWxzZSl7DQoJCXN3aXRjaCgkbW9kZSl7DQoJCQljYXNlIDA6DQoJCQkJLy8gTm90 IGNvbXByZXNzZWQNCgkJCQlyZXR1cm4gJHRhcmdldEZpbGVOYW1lPw0KCQkJCQlmaWxlX3B1 dF9jb250ZW50cygkdGFyZ2V0RmlsZU5hbWUsICRjb250ZW50KToNCgkJCQkJJGNvbnRlbnQ7 DQoJCQljYXNlIDE6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJTaHJ1bmsgbW9kZSBpcyBu b3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDI6 DQoJCQljYXNlIDM6DQoJCQljYXNlIDQ6DQoJCQljYXNlIDU6DQoJCQkJJHRoaXMtPmRlYnVn TXNnKDIsICJDb21wcmVzc2lvbiBmYWN0b3IgIi4oJG1vZGUtMSkuIiBpcyBub3Qgc3VwcG9y dGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDY6DQoJCQkJJHRo aXMtPmRlYnVnTXNnKDIsICJJbXBsb2RlIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0K CQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgNzoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwg IlRva2VuaXppbmcgY29tcHJlc3Npb24gYWxnb3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQuLi4g eWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgODoNCgkJCQkvLyBEZWZsYXRl DQoJCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQkJZmlsZV9wdXRfY29udGVudHMo JHRhcmdldEZpbGVOYW1lLCBnemluZmxhdGUoJGNvbnRlbnQsICR1bmNvbXByZXNzZWRTaXpl KSk6DQoJCQkJCWd6aW5mbGF0ZSgkY29udGVudCwgJHVuY29tcHJlc3NlZFNpemUpOw0KCQkJ Y2FzZSA5Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiRW5oYW5jZWQgRGVmbGF0aW5nIGlz IG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2Ug MTA6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJQS1dBUkUgRGF0ZSBDb21wcmVzc2lvbiBM aWJyYXJ5IEltcG9sb2RpbmcgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0 dXJuIGZhbHNlOw0KICAgICAgICAgICBjYXNlIDEyOg0KICAgICAgICAgICAgICAgLy8gQnpp cDINCiAgICAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0RmlsZU5hbWU/DQogICAgICAgICAg ICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRhcmdldEZpbGVOYW1lLCBiemRlY29tcHJl c3MoJGNvbnRlbnQpKToNCiAgICAgICAgICAgICAgICAgICBiemRlY29tcHJlc3MoJGNvbnRl bnQpOw0KCQkJY2FzZSAxODoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIklCTSBURVJTRSBp cyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlkZWZh dWx0Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiVW5rbm93biB1bmNvbXByZXNzIG1ldGhv ZDogJG1vZGUiKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgl9DQoJRnVuY3Rpb24gZGVi dWdNc2coJGxldmVsLCAkc3RyaW5nKXsNCgkJaWYoJHRoaXMtPmRlYnVnKXsNCgkJCWlmKCRs ZXZlbCA9PSAxKQ0KCQkJCWVjaG8gIjxiIHN0eWxlPSdjb2xvcjogIzc3Nyc+ZFVuemlwMjo8 L2I+ICRzdHJpbmc8YnI+IjsNCgkJCQ0KCQkJaWYoJGxldmVsID09IDIpDQoJCQkJZWNobyAi PGIgc3R5bGU9J2NvbG9yOiAjRjAwJz5kVW56aXAyOjwvYj4gJHN0cmluZzxicj4iOw0KCQl9 DQoJCSR0aGlzLT5sYXN0RXJyb3IgPSAkc3RyaW5nOw0KCX0NCglGdW5jdGlvbiBnZXRMYXN0 RXJyb3IoKXsNCgkJcmV0dXJuICR0aGlzLT5sYXN0RXJyb3I7DQoJfQ0KDQoJRnVuY3Rpb24g X2xvYWRGaWxlTGlzdEJ5RU9GKCYkZmgsICRzdG9wT25GaWxlPWZhbHNlKXsNCgkJLy8gQ2hl Y2sgaWYgdGhlcmUncyBhIHZhbGlkIENlbnRyYWwgRGlyIHNpZ25hdHVyZS4NCgkJLy8gTGV0 J3MgY29uc2lkZXIgYSBmaWxlIGNvbW1lbnQgc21hbGxlciB0aGFuIDEwMjQgY2hhcmFjdGVy cy4uLg0KCQkvLyBBY3R1YWxseSwgaXQgbGVuZ3RoIGNhbiBiZSA2NTUzNi4uIEJ1dCB3ZSdy ZSBub3QgZ29pbmcgdG8gc3VwcG9ydCBpdC4NCg0KCQlmb3IoJHggPSAwOyAkeCA8IDEwMjQ7 ICR4Kyspew0KCQkJZnNlZWsoJGZoLCAtMjItJHgsIFNFRUtfRU5EKTsNCg0KCQkJJHNpZ25h dHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT5kaXJT aWduYXR1cmVFKXsNCgkJCQkvLyBJZiBmb3VuZCBFT0YgQ2VudHJhbCBEaXINCgkJCQkkZW9k aXJbJ2Rpc2tfbnVtYmVyX3RoaXMnXSAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7 IC8vIG51bWJlciBvZiB0aGlzIGRpc2sNCgkJCQkkZW9kaXJbJ2Rpc2tfbnVtYmVyJ10gICAg ICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIG51bWJlciBvZiB0aGUgZGlz ayB3aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkNCgkJCQkkZW9kaXJb J3RvdGFsX2VudHJpZXNfdGhpcyddID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8v IHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpciBvbiB0aGlzIGRp c2sNCgkJCQkkZW9kaXJbJ3RvdGFsX2VudHJpZXMnXSAgICAgID0gdW5wYWNrKCJ2IiwgZnJl YWQoJGZoLCAyKSk7IC8vIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluDQoJCQkJJGVvZGly WydzaXplX29mX2NkJ10gICAgICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAv LyBzaXplIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQ0KCQkJCSRlb2Rpclsnb2Zmc2V0X3N0 YXJ0X2NkJ10gICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gb2Zmc2V0IG9m IHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRp bmcgZGlzayBudW1iZXINCgkJCQkkemlwRmlsZUNvbW1lbnRMZW5naHQgICAgICAgID0gdW5w YWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHppcGZpbGUgY29tbWVudCBsZW5ndGgNCgkJ CQkkZW9kaXJbJ3ppcGZpbGVfY29tbWVudCddICAgID0gJHppcEZpbGVDb21tZW50TGVuZ2h0 WzFdP2ZyZWFkKCRmaCwgJHppcEZpbGVDb21tZW50TGVuZ2h0WzFdKTonJzsgLy8gemlwZmls ZSBjb21tZW50DQoJCQkJJHRoaXMtPmVuZE9mQ2VudHJhbCA9IEFycmF5KA0KCQkJCQknZGlz a19udW1iZXJfdGhpcyc9PiRlb2RpclsnZGlza19udW1iZXJfdGhpcyddWzFdLA0KCQkJCQkn ZGlza19udW1iZXInPT4kZW9kaXJbJ2Rpc2tfbnVtYmVyJ11bMV0sDQoJCQkJCSd0b3RhbF9l bnRyaWVzX3RoaXMnPT4kZW9kaXJbJ3RvdGFsX2VudHJpZXNfdGhpcyddWzFdLA0KCQkJCQkn dG90YWxfZW50cmllcyc9PiRlb2RpclsndG90YWxfZW50cmllcyddWzFdLA0KCQkJCQknc2l6 ZV9vZl9jZCc9PiRlb2Rpclsnc2l6ZV9vZl9jZCddWzFdLA0KCQkJCQknb2Zmc2V0X3N0YXJ0 X2NkJz0+JGVvZGlyWydvZmZzZXRfc3RhcnRfY2QnXVsxXSwNCgkJCQkJJ3ppcGZpbGVfY29t bWVudCc9PiRlb2RpclsnemlwZmlsZV9jb21tZW50J10sDQoJCQkJKTsNCg0KCQkJCS8vIFRo ZW4sIGxvYWQgZmlsZSBsaXN0DQoJCQkJZnNlZWsoJGZoLCAkdGhpcy0+ZW5kT2ZDZW50cmFs WydvZmZzZXRfc3RhcnRfY2QnXSk7DQoJCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7 DQoNCgkJCQl3aGlsZSgkc2lnbmF0dXJlID09ICR0aGlzLT5kaXJTaWduYXR1cmUpew0KCQkJ CQkkZGlyWyd2ZXJzaW9uX21hZGVieSddICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgs IDIpKTsgLy8gdmVyc2lvbiBtYWRlIGJ5DQoJCQkJCSRkaXJbJ3ZlcnNpb25fbmVlZGVkJ10g ICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJzaW9uIG5lZWRlZCB0 byBleHRyYWN0DQoJCQkJCSRkaXJbJ2dlbmVyYWxfYml0X2ZsYWcnXSAgICA9IHVucGFjaygi diIsIGZyZWFkKCRmaCwgMikpOyAvLyBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcNCgkJCQkJ JGRpclsnY29tcHJlc3Npb25fbWV0aG9kJ10gID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAy KSk7IC8vIGNvbXByZXNzaW9uIG1ldGhvZA0KCQkJCQkkZGlyWydsYXN0bW9kX3RpbWUnXSAg ICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSB0 aW1lDQoJCQkJCSRkaXJbJ2xhc3Rtb2RfZGF0ZSddICAgICAgICA9IHVucGFjaygidiIsIGZy ZWFkKCRmaCwgMikpOyAvLyBsYXN0IG1vZCBmaWxlIGRhdGUNCgkJCQkJJGRpclsnY3JjLTMy J10gICAgICAgICAgICAgID0gZnJlYWQoJGZoLCA0KTsgICAgICAgICAgICAgIC8vIGNyYy0z Mg0KCQkJCQkkZGlyWydjb21wcmVzc2VkX3NpemUnXSAgICAgPSB1bnBhY2soIlYiLCBmcmVh ZCgkZmgsIDQpKTsgLy8gY29tcHJlc3NlZCBzaXplDQoJCQkJCSRkaXJbJ3VuY29tcHJlc3Nl ZF9zaXplJ10gICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyB1bmNvbXByZXNz ZWQgc2l6ZQ0KCQkJCQkkZmlsZU5hbWVMZW5ndGggICAgICAgICAgICAgPSB1bnBhY2soInYi LCBmcmVhZCgkZmgsIDIpKTsgLy8gZmlsZW5hbWUgbGVuZ3RoDQoJCQkJCSRleHRyYUZpZWxk TGVuZ3RoICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRy YSBmaWVsZCBsZW5ndGgNCgkJCQkJJGZpbGVDb21tZW50TGVuZ3RoICAgICAgICAgID0gdW5w YWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCQkJ JGRpclsnZGlza19udW1iZXJfc3RhcnQnXSAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAy KSk7IC8vIGRpc2sgbnVtYmVyIHN0YXJ0DQoJCQkJCSRkaXJbJ2ludGVybmFsX2F0dHJpYnV0 ZXMnXSA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBpbnRlcm5hbCBmaWxlIGF0 dHJpYnV0ZXMtYnl0ZTENCgkJCQkJJGRpclsnZXh0ZXJuYWxfYXR0cmlidXRlczEnXT0gdW5w YWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGV4dGVybmFsIGZpbGUgYXR0cmlidXRlcy1i eXRlMg0KCQkJCQkkZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMiddPSB1bnBhY2soInYiLCBm cmVhZCgkZmgsIDIpKTsgLy8gZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQoJCQkJCSRkaXJb J3JlbGF0aXZlX29mZnNldCddICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAv LyByZWxhdGl2ZSBvZmZzZXQgb2YgbG9jYWwgaGVhZGVyDQoJCQkJCSRkaXJbJ2ZpbGVfbmFt ZSddICAgICAgICAgICA9IGZyZWFkKCRmaCwgJGZpbGVOYW1lTGVuZ3RoWzFdKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGVuYW1lDQoJCQkJCSRkaXJbJ2V4dHJhX2Zp ZWxkJ10gICAgICAgICA9ICRleHRyYUZpZWxkTGVuZ3RoWzFdID9mcmVhZCgkZmgsICRleHRy YUZpZWxkTGVuZ3RoWzFdKSA6Jyc7IC8vIGV4dHJhIGZpZWxkDQoJCQkJCSRkaXJbJ2ZpbGVf Y29tbWVudCddICAgICAgICA9ICRmaWxlQ29tbWVudExlbmd0aFsxXT9mcmVhZCgkZmgsICRm aWxlQ29tbWVudExlbmd0aFsxXSk6Jyc7IC8vIGZpbGUgY29tbWVudA0KDQoJCQkJCS8vIENv bnZlcnQgdGhlIGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBVTklYIFRp bWVzdGFtcA0KCQkJCQkkQklObGFzdG1vZF9kYXRlID0gc3RyX3BhZChkZWNiaW4oJGRpclsn bGFzdG1vZF9kYXRlJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkkQklO bGFzdG1vZF90aW1lID0gc3RyX3BhZChkZWNiaW4oJGRpclsnbGFzdG1vZF90aW1lJ11bMV0p LCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkkbGFzdG1vZF9kYXRlWSA9IGJpbmRl YyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDAsIDcpKSsxOTgwOw0KCQkJCQkkbGFzdG1v ZF9kYXRlTSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsNCgkJ CQkJJGxhc3Rtb2RfZGF0ZUQgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsIDEx LCA1KSk7DQoJCQkJCSRsYXN0bW9kX3RpbWVIID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1v ZF90aW1lLCAgIDAsIDUpKTsNCgkJCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vic3Ry KCRCSU5sYXN0bW9kX3RpbWUsICAgNSwgNikpOw0KCQkJCQkkbGFzdG1vZF90aW1lUyA9IGJp bmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgIDExLCA1KSk7DQoNCgkJCQkJLy8gU29t ZSBwcm90ZWN0aW9uIGFnYWlucyBhdHRhY2tzLi4uDQoJCQkJCWlmKCEkZGlyWydmaWxlX25h bWUnXSA9ICR0aGlzLT5fcHJvdGVjdCgkZGlyWydmaWxlX25hbWUnXSkpDQoJCQkJCQljb250 aW51ZTsNCg0KCQkJCQkkdGhpcy0+Y2VudHJhbERpckxpc3RbJGRpclsnZmlsZV9uYW1lJ11d ID0gQXJyYXkoDQoJCQkJCQkndmVyc2lvbl9tYWRlYnknPT4kZGlyWyd2ZXJzaW9uX21hZGVi eSddWzFdLA0KCQkJCQkJJ3ZlcnNpb25fbmVlZGVkJz0+JGRpclsndmVyc2lvbl9uZWVkZWQn XVsxXSwNCgkJCQkJCSdnZW5lcmFsX2JpdF9mbGFnJz0+c3RyX3BhZChkZWNiaW4oJGRpclsn Z2VuZXJhbF9iaXRfZmxhZyddWzFdKSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJ J2NvbXByZXNzaW9uX21ldGhvZCc9PiRkaXJbJ2NvbXByZXNzaW9uX21ldGhvZCddWzFdLA0K CQkJCQkJJ2xhc3Rtb2RfZGF0ZXRpbWUnICA9Pm1rdGltZSgkbGFzdG1vZF90aW1lSCwgJGxh c3Rtb2RfdGltZU0sICRsYXN0bW9kX3RpbWVTLCAkbGFzdG1vZF9kYXRlTSwgJGxhc3Rtb2Rf ZGF0ZUQsICRsYXN0bW9kX2RhdGVZKSwNCgkJCQkJCSdjcmMtMzInICAgICAgICAgICAgPT5z dHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bM10pKSwgMiwgJzAnLCBTVFJfUEFE X0xFRlQpLg0KCQkJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZGlyWydjcmMtMzIn XVsyXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkJCSAgc3RyX3BhZChk ZWNoZXgob3JkKCRkaXJbJ2NyYy0zMiddWzFdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4N CgkJCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bMF0pKSwg MiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2NvbXByZXNzZWRfc2l6ZSc9PiRkaXJb J2NvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCQkJJ3VuY29tcHJlc3NlZF9zaXplJz0+JGRp clsndW5jb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkJCSdkaXNrX251bWJlcl9zdGFydCc9 PiRkaXJbJ2Rpc2tfbnVtYmVyX3N0YXJ0J11bMV0sDQoJCQkJCQknaW50ZXJuYWxfYXR0cmli dXRlcyc9PiRkaXJbJ2ludGVybmFsX2F0dHJpYnV0ZXMnXVsxXSwNCgkJCQkJCSdleHRlcm5h bF9hdHRyaWJ1dGVzMSc9PiRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMxJ11bMV0sDQoJCQkJ CQknZXh0ZXJuYWxfYXR0cmlidXRlczInPT4kZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMidd WzFdLA0KCQkJCQkJJ3JlbGF0aXZlX29mZnNldCc9PiRkaXJbJ3JlbGF0aXZlX29mZnNldCdd WzFdLA0KCQkJCQkJJ2ZpbGVfbmFtZSc9PiRkaXJbJ2ZpbGVfbmFtZSddLA0KCQkJCQkJJ2V4 dHJhX2ZpZWxkJz0+JGRpclsnZXh0cmFfZmllbGQnXSwNCgkJCQkJCSdmaWxlX2NvbW1lbnQn PT4kZGlyWydmaWxlX2NvbW1lbnQnXSwNCgkJCQkJKTsNCgkJCQkJJHNpZ25hdHVyZSA9IGZy ZWFkKCRmaCwgNCk7DQoJCQkJfQ0KDQoJCQkJLy8gSWYgbG9hZGVkIGNlbnRyYWxEaXJzLCB0 aGVuIHRyeSB0byBpZGVudGlmeSB0aGUgb2Zmc2V0UG9zaXRpb24gb2YgdGhlIGNvbXByZXNz ZWQgZGF0YS4NCgkJCQlpZigkdGhpcy0+Y2VudHJhbERpckxpc3QpIGZvcmVhY2goJHRoaXMt PmNlbnRyYWxEaXJMaXN0IGFzICRmaWxlbmFtZT0+JGRldGFpbHMpew0KCQkJCQkkaSA9ICR0 aGlzLT5fZ2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCRmaCwgJGRldGFpbHNbJ3JlbGF0aXZl X29mZnNldCddKTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2Zp bGVfbmFtZSddICAgICAgICAgID0gJGZpbGVuYW1lOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3Nl ZExpc3RbJGZpbGVuYW1lXVsnY29tcHJlc3Npb25fbWV0aG9kJ10gPSAkZGV0YWlsc1snY29t cHJlc3Npb25fbWV0aG9kJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5h bWVdWyd2ZXJzaW9uX25lZWRlZCddICAgICA9ICRkZXRhaWxzWyd2ZXJzaW9uX25lZWRlZCdd Ow0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnbGFzdG1vZF9kYXRl dGltZSddICAgPSAkZGV0YWlsc1snbGFzdG1vZF9kYXRldGltZSddOw0KCQkJCQkkdGhpcy0+ Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY3JjLTMyJ10gICAgICAgICAgICAgPSAkZGV0 YWlsc1snY3JjLTMyJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVd Wydjb21wcmVzc2VkX3NpemUnXSAgICA9ICRkZXRhaWxzWydjb21wcmVzc2VkX3NpemUnXTsN CgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ3VuY29tcHJlc3NlZF9z aXplJ10gID0gJGRldGFpbHNbJ3VuY29tcHJlc3NlZF9zaXplJ107DQoJCQkJCSR0aGlzLT5j b21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWydsYXN0bW9kX2RhdGV0aW1lJ10gICA9ICRkZXRh aWxzWydsYXN0bW9kX2RhdGV0aW1lJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFsk ZmlsZW5hbWVdWydleHRyYV9maWVsZCddICAgICAgICA9ICRpWydleHRyYV9maWVsZCddOw0K CQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY29udGVudHMtc3RhcnRP ZmZzZXQnXT0kaVsnY29udGVudHMtc3RhcnRPZmZzZXQnXTsNCgkJCQkJaWYoc3RydG9sb3dl cigkc3RvcE9uRmlsZSkgPT0gc3RydG9sb3dlcigkZmlsZW5hbWUpKQ0KCQkJCQkJYnJlYWs7 DQoJCQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsN Cgl9DQoJRnVuY3Rpb24gX2xvYWRGaWxlTGlzdEJ5U2lnbmF0dXJlcygmJGZoLCAkc3RvcE9u RmlsZT1mYWxzZSl7DQoJCWZzZWVrKCRmaCwgMCk7DQoJCQ0KCQkkcmV0dXJuID0gZmFsc2U7 DQoJCWZvcig7Oyl7DQoJCQkkZGV0YWlscyA9ICR0aGlzLT5fZ2V0RmlsZUhlYWRlckluZm9y bWF0aW9uKCRmaCk7DQoJCQlpZighJGRldGFpbHMpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygx LCAiSW52YWxpZCBzaWduYXR1cmUuIFRyeWluZyB0byB2ZXJpZnkgaWYgaXMgb2xkIHN0eWxl IERhdGEgRGVzY3JpcHRvci4uLiIpOw0KCQkJCWZzZWVrKCRmaCwgMTIgLSA0LCBTRUVLX0NV Uik7IC8vIDEyOiBEYXRhIGRlc2NyaXB0b3IgLSA0OiBTaWduYXR1cmUgKHRoYXQgd2lsbCBi ZSByZWFkIGFnYWluKQ0KCQkJCSRkZXRhaWxzID0gJHRoaXMtPl9nZXRGaWxlSGVhZGVySW5m b3JtYXRpb24oJGZoKTsNCgkJCX0NCgkJCWlmKCEkZGV0YWlscyl7DQoJCQkJJHRoaXMtPmRl YnVnTXNnKDEsICJTdGlsbCBpbnZhbGlkIHNpZ25hdHVyZS4gUHJvYmFibHkgcmVhY2hlZCB0 aGUgZW5kIG9mIHRoZSBmaWxlLiIpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJJGZpbGVuYW1l ID0gJGRldGFpbHNbJ2ZpbGVfbmFtZSddOw0KCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRm aWxlbmFtZV0gPSAkZGV0YWlsczsNCgkJCSRyZXR1cm4gPSB0cnVlOw0KCQkJaWYoc3RydG9s b3dlcigkc3RvcE9uRmlsZSkgPT0gc3RydG9sb3dlcigkZmlsZW5hbWUpKQ0KCQkJCWJyZWFr Ow0KCQl9DQoJCQ0KCQlyZXR1cm4gJHJldHVybjsNCgl9DQoJRnVuY3Rpb24gX2dldEZpbGVI ZWFkZXJJbmZvcm1hdGlvbigmJGZoLCAkc3RhcnRPZmZzZXQ9ZmFsc2Upew0KCQlpZigkc3Rh cnRPZmZzZXQgIT09IGZhbHNlKQ0KCQkJZnNlZWsoJGZoLCAkc3RhcnRPZmZzZXQpOw0KCQkN CgkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCWlmKCRzaWduYXR1cmUgPT0gJHRo aXMtPnppcFNpZ25hdHVyZSl7DQoJCQkjICR0aGlzLT5kZWJ1Z01zZygxLCAiWmlwIFNpZ25h dHVyZSEiKTsNCgkJCQ0KCQkJLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSB6aXBwZWQg ZmlsZQ0KCQkJJGZpbGVbJ3ZlcnNpb25fbmVlZGVkJ10gICAgID0gdW5wYWNrKCJ2IiwgZnJl YWQoJGZoLCAyKSk7IC8vIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJhY3QNCgkJCSRmaWxlWydn ZW5lcmFsX2JpdF9mbGFnJ10gICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBn ZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcNCgkJCSRmaWxlWydjb21wcmVzc2lvbl9tZXRob2Qn XSA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBjb21wcmVzc2lvbiBtZXRob2QN CgkJCSRmaWxlWydsYXN0bW9kX3RpbWUnXSAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRm aCwgMikpOyAvLyBsYXN0IG1vZCBmaWxlIHRpbWUNCgkJCSRmaWxlWydsYXN0bW9kX2RhdGUn XSAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBsYXN0IG1vZCBmaWxl IGRhdGUNCgkJCSRmaWxlWydjcmMtMzInXSAgICAgICAgICAgICA9IGZyZWFkKCRmaCwgNCk7 ICAgICAgICAgICAgICAvLyBjcmMtMzINCgkJCSRmaWxlWydjb21wcmVzc2VkX3NpemUnXSAg ICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBjb21wcmVzc2VkIHNpemUNCgkJ CSRmaWxlWyd1bmNvbXByZXNzZWRfc2l6ZSddICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwg NCkpOyAvLyB1bmNvbXByZXNzZWQgc2l6ZQ0KCQkJJGZpbGVOYW1lTGVuZ3RoICAgICAgICAg ICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGZpbGVuYW1lIGxlbmd0aA0K CQkJJGV4dHJhRmllbGRMZW5ndGggICAgICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZo LCAyKSk7IC8vIGV4dHJhIGZpZWxkIGxlbmd0aA0KCQkJJGZpbGVbJ2ZpbGVfbmFtZSddICAg ICAgICAgID0gZnJlYWQoJGZoLCAkZmlsZU5hbWVMZW5ndGhbMV0pOyAvLyBmaWxlbmFtZQ0K CQkJJGZpbGVbJ2V4dHJhX2ZpZWxkJ10gICAgICAgID0gJGV4dHJhRmllbGRMZW5ndGhbMV0/ ZnJlYWQoJGZoLCAkZXh0cmFGaWVsZExlbmd0aFsxXSk6Jyc7IC8vIGV4dHJhIGZpZWxkDQoJ CQkkZmlsZVsnY29udGVudHMtc3RhcnRPZmZzZXQnXT0gZnRlbGwoJGZoKTsNCgkJCQ0KCQkJ Ly8gQnlwYXNzIHRoZSB3aG9sZSBjb21wcmVzc2VkIGNvbnRlbnRzLCBhbmQgbG9vayBmb3Ig dGhlIG5leHQgZmlsZQ0KCQkJZnNlZWsoJGZoLCAkZmlsZVsnY29tcHJlc3NlZF9zaXplJ11b MV0sIFNFRUtfQ1VSKTsNCgkJCQ0KCQkJLy8gQ29udmVydCB0aGUgZGF0ZSBhbmQgdGltZSwg ZnJvbSBNUy1ET1MgZm9ybWF0IHRvIFVOSVggVGltZXN0YW1wDQoJCQkkQklObGFzdG1vZF9k YXRlID0gc3RyX3BhZChkZWNiaW4oJGZpbGVbJ2xhc3Rtb2RfZGF0ZSddWzFdKSwgMTYsICcw JywgU1RSX1BBRF9MRUZUKTsNCgkJCSRCSU5sYXN0bW9kX3RpbWUgPSBzdHJfcGFkKGRlY2Jp bigkZmlsZVsnbGFzdG1vZF90aW1lJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0K CQkJJGxhc3Rtb2RfZGF0ZVkgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsICAw LCA3KSkrMTk4MDsNCgkJCSRsYXN0bW9kX2RhdGVNID0gYmluZGVjKHN1YnN0cigkQklObGFz dG1vZF9kYXRlLCAgNywgNCkpOw0KCQkJJGxhc3Rtb2RfZGF0ZUQgPSBiaW5kZWMoc3Vic3Ry KCRCSU5sYXN0bW9kX2RhdGUsIDExLCA1KSk7DQoJCQkkbGFzdG1vZF90aW1lSCA9IGJpbmRl YyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgICAwLCA1KSk7DQoJCQkkbGFzdG1vZF90aW1l TSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgICA1LCA2KSk7DQoJCQkkbGFz dG1vZF90aW1lUyA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgIDExLCA1KSk7 DQoJCQkNCgkJCS8vIFNvbWUgcHJvdGVjdGlvbiBhZ2FpbnMgYXR0YWNrcy4uLg0KCQkJaWYo ISRmaWxlWydmaWxlX25hbWUnXSA9ICR0aGlzLT5fcHJvdGVjdCgkZmlsZVsnZmlsZV9uYW1l J10pKQ0KCQkJCXJldHVybjsNCgkJCQ0KCQkJLy8gTW91bnQgZmlsZSB0YWJsZQ0KCQkJJGkg PSBBcnJheSgNCgkJCQknZmlsZV9uYW1lJyAgICAgICAgID0+JGZpbGVbJ2ZpbGVfbmFtZSdd LA0KCQkJCSdjb21wcmVzc2lvbl9tZXRob2QnPT4kZmlsZVsnY29tcHJlc3Npb25fbWV0aG9k J11bMV0sDQoJCQkJJ3ZlcnNpb25fbmVlZGVkJyAgICA9PiRmaWxlWyd2ZXJzaW9uX25lZWRl ZCddWzFdLA0KCQkJCSdsYXN0bW9kX2RhdGV0aW1lJyAgPT5ta3RpbWUoJGxhc3Rtb2RfdGlt ZUgsICRsYXN0bW9kX3RpbWVNLCAkbGFzdG1vZF90aW1lUywgJGxhc3Rtb2RfZGF0ZU0sICRs YXN0bW9kX2RhdGVELCAkbGFzdG1vZF9kYXRlWSksDQoJCQkJJ2NyYy0zMicgICAgICAgICAg ICA9PnN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11bM10pKSwgMiwgJzAnLCBT VFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGZpbGVbJ2Ny Yy0zMiddWzJdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCSAgc3RyX3Bh ZChkZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVsxXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVG VCkuDQoJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11bMF0p KSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCSdjb21wcmVzc2VkX3NpemUnICAgPT4k ZmlsZVsnY29tcHJlc3NlZF9zaXplJ11bMV0sDQoJCQkJJ3VuY29tcHJlc3NlZF9zaXplJyA9 PiRmaWxlWyd1bmNvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCSdleHRyYV9maWVsZCcgICAg ICAgPT4kZmlsZVsnZXh0cmFfZmllbGQnXSwNCgkJCQknZ2VuZXJhbF9iaXRfZmxhZycgID0+ c3RyX3BhZChkZWNiaW4oJGZpbGVbJ2dlbmVyYWxfYml0X2ZsYWcnXVsxXSksIDgsICcwJywg U1RSX1BBRF9MRUZUKSwNCgkJCQknY29udGVudHMtc3RhcnRPZmZzZXQnPT4kZmlsZVsnY29u dGVudHMtc3RhcnRPZmZzZXQnXQ0KCQkJKTsNCgkJCXJldHVybiAkaTsNCgkJfQ0KCQlyZXR1 cm4gZmFsc2U7DQoJfQ0KCQ0KCUZ1bmN0aW9uIF9wcm90ZWN0KCRmdWxsUGF0aCl7DQoJCS8v IEtub3duIGhhY2stYXR0YWNrcyAoZmlsZW5hbWUgbGlrZSk6DQoJCS8vICAgL2hvbWUvdXNy DQoJCS8vICAgLi4vLi4vaG9tZS91c3INCgkJLy8gICBmb2xkZXIvLi4vLi4vLi4vaG9tZS91 c3INCgkJLy8gICBzYW1wbGUvKHgwKS4uL2hvbWUvdXNyDQoJCQ0KCQkkZnVsbFBhdGggPSBz dHJ0cigkZnVsbFBhdGgsICI6Kjw+fFwiXHgwXFwiLCAiLi4uLi4uLi8iKTsNCgkJd2hpbGUo JGZ1bGxQYXRoWzBdID09ICIvIikNCgkJCSRmdWxsUGF0aCA9IHN1YnN0cigkZnVsbFBhdGgs IDEpOw0KCQkNCgkJaWYoc3Vic3RyKCRmdWxsUGF0aCwgLTEpID09ICIvIil7DQoJCQkkYmFz ZSAgICAgPSAnJzsNCgkJCSRmdWxsUGF0aCA9IHN1YnN0cigkZnVsbFBhdGgsIDAsIC0xKTsN CgkJfQ0KCQllbHNlew0KCQkJJGJhc2UgICAgID0gYmFzZW5hbWUoJGZ1bGxQYXRoKTsNCgkJ CSRmdWxsUGF0aCA9IGRpcm5hbWUoJGZ1bGxQYXRoKTsNCgkJfQ0KCQkNCgkJJHBhcnRzICAg PSBleHBsb2RlKCIvIiwgJGZ1bGxQYXRoKTsNCgkJJGxhc3RJZHggPSBmYWxzZTsNCgkJZm9y ZWFjaCgkcGFydHMgYXMgJGlkeD0+JHBhcnQpew0KCQkJaWYoJHBhcnQgPT0gIi4iKQ0KCQkJ CXVuc2V0KCRwYXJ0c1skaWR4XSk7DQoJCQllbHNlaWYoJHBhcnQgPT0gIi4uIil7DQoJCQkJ dW5zZXQoJHBhcnRzWyRpZHhdKTsNCgkJCQlpZigkbGFzdElkeCAhPT0gZmFsc2Upew0KCQkJ CQl1bnNldCgkcGFydHNbJGxhc3RJZHhdKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYoJHBh cnQgPT09ICcnKXsNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0pOw0KCQkJfQ0KCQkJZWxzZXsN CgkJCQkkbGFzdElkeCA9ICRpZHg7DQoJCQl9DQoJCX0NCg0KCQkkZnVsbFBhdGggPSBzaXpl b2YoJHBhcnRzKT9pbXBsb2RlKCIvIiwgJHBhcnRzKS4iLyI6IiI7DQoJCXJldHVybiAkZnVs bFBhdGguJGJhc2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfZFppcHsNCgl2YXIgJGZpbGVuYW1l Ow0KCXZhciAkb3ZlcndyaXRlOw0KCQ0KCXZhciAkemlwU2lnbmF0dXJlID0gIlx4NTBceDRi XHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNp Z25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBkaXIgaGVhZGVyIHNp Z25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYiOyAvLyBl bmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoJdmFyICRmaWxlc19jb3VudCAgPSAwOw0K CXZhciAkZmg7DQoJDQoJRnVuY3Rpb24gc21kX2RaaXAoJGZpbGVuYW1lLCAkb3ZlcndyaXRl PXRydWUpew0KCQkkdGhpcy0+ZmlsZW5hbWUgID0gJGZpbGVuYW1lOw0KCQkkdGhpcy0+b3Zl cndyaXRlID0gJG92ZXJ3cml0ZTsNCgl9DQoJRnVuY3Rpb24gYWRkRGlyKCRkaXJuYW1lLCAk ZmlsZUNvbW1lbnRzPScnKXsNCgkJaWYoc3Vic3RyKCRkaXJuYW1lLCAtMSkgIT0gJy8nKQ0K CQkJJGRpcm5hbWUgLj0gJy8nOw0KCQkkdGhpcy0+YWRkRmlsZShmYWxzZSwgJGRpcm5hbWUs ICRmaWxlQ29tbWVudHMpOw0KCX0NCglGdW5jdGlvbiBhZGRGaWxlKCRmaWxlbmFtZSwgJGNm aWxlbmFtZSwgJGZpbGVDb21tZW50cz0nJywgJGRhdGE9ZmFsc2Upew0KCQlpZighKCRmaCA9 ICYkdGhpcy0+ZmgpKQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAkdGhpcy0+ b3ZlcndyaXRlPyd3Yic6J2ErYicpOw0KCQkNCgkJLy8gJGZpbGVuYW1lIGNhbiBiZSBhIGxv Y2FsIGZpbGUgT1IgdGhlIGRhdGEgd2ljaCB3aWxsIGJlIGNvbXByZXNzZWQNCgkJaWYoc3Vi c3RyKCRjZmlsZW5hbWUsIC0xKT09Jy8nKXsNCgkJCSRkZXRhaWxzWyd1bmNzaXplJ10gPSAw Ow0KCQkJJGRhdGEgPSAnJzsNCgkJfQ0KCQllbHNlaWYoZmlsZV9leGlzdHMoJGZpbGVuYW1l KSl7DQoJCQkkZGV0YWlsc1sndW5jc2l6ZSddID0gZmlsZXNpemUoJGZpbGVuYW1lKTsNCgkJ CSRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsNCgkJfQ0KCQllbHNlaWYo JGZpbGVuYW1lKXsNCgkJCWVjaG8gIjxiPkNhbm5vdCBhZGQgJGZpbGVuYW1lLiBGaWxlIG5v dCBmb3VuZDwvYj48YnI+IjsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQllbHNlew0KCQkJ JGRldGFpbHNbJ3VuY3NpemUnXSA9IHN0cmxlbigkZmlsZW5hbWUpOw0KCQkJLy8gREFUQSBp cyBnaXZlbi4uIHVzZSBpdCEgOnwNCgkJfQ0KDQoJCS8vIGlmIGRhdGEgdG8gY29tcHJlc3Mg aXMgdG9vIHNtYWxsLCBqdXN0IHN0b3JlIGl0DQoJCWlmKCRkZXRhaWxzWyd1bmNzaXplJ10g PCAyNTYpew0KCQkJJGRldGFpbHNbJ2NvbXNpemUnXSA9ICRkZXRhaWxzWyd1bmNzaXplJ107 DQoJCQkkZGV0YWlsc1sndm5lZWRlZCddID0gMTA7DQoJCQkkZGV0YWlsc1snY21ldGhvZCdd ID0gMDsNCgkJCSR6ZGF0YSA9ICYkZGF0YTsNCgkJfQ0KCQllbHNleyAvLyBvdGhlcndpc2Us IGNvbXByZXNzIGl0DQoJCQkkemRhdGEgPSBnemNvbXByZXNzKCRkYXRhKTsNCgkJCSR6ZGF0 YSA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsg Ly8gZml4IGNyYyBidWcgKHRoYW5rcyB0byBFcmljIE11ZWxsZXIpDQoJCQkkZGV0YWlsc1sn Y29tc2l6ZSddID0gc3RybGVuKCR6ZGF0YSk7DQoJCQkkZGV0YWlsc1sndm5lZWRlZCddID0g MTA7DQoJCQkkZGV0YWlsc1snY21ldGhvZCddID0gODsNCgkJfQ0KCQkNCgkJJGRldGFpbHNb J2JpdGZsYWcnXSA9IDA7DQoJCSRkZXRhaWxzWydjcmNfMzInXSAgPSBjcmMzMigkZGF0YSk7 DQoJCQ0KCQkvLyBDb252ZXJ0IGRhdGUgYW5kIHRpbWUgdG8gRE9TIEZvcm1hdCwgYW5kIHNl dCB0aGVuDQoJCSRsYXN0bW9kX3RpbWVTICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ3MnKT49 MzI/ZGF0ZSgncycpLTMyOmRhdGUoJ3MnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJ JGxhc3Rtb2RfdGltZU0gID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnaScpKSwgNiwgJzAnLCBT VFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF90aW1lSCAgPSBzdHJfcGFkKGRlY2JpbihkYXRl KCdIJykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX2RhdGVEICA9IHN0 cl9wYWQoZGVjYmluKGRhdGUoJ2QnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJGxh c3Rtb2RfZGF0ZU0gID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnbScpKSwgNCwgJzAnLCBTVFJf UEFEX0xFRlQpOw0KCQkkbGFzdG1vZF9kYXRlWSAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdZ JyktMTk4MCksIDcsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJDQoJCSMgZWNobyAiTW9kVGlt ZTogJGxhc3Rtb2RfdGltZVMtJGxhc3Rtb2RfdGltZU0tJGxhc3Rtb2RfdGltZUggKCIuZGF0 ZSgicyBIIEgiKS4iKVxuIjsNCgkJIyBlY2hvICJNb2REYXRlOiAkbGFzdG1vZF9kYXRlRC0k bGFzdG1vZF9kYXRlTS0kbGFzdG1vZF9kYXRlWSAoIi5kYXRlKCJkIG0gWSIpLiIpXG4iOw0K CQkkZGV0YWlsc1snbW9kdGltZSddID0gYmluZGVjKCIkbGFzdG1vZF90aW1lSCRsYXN0bW9k X3RpbWVNJGxhc3Rtb2RfdGltZVMiKTsNCgkJJGRldGFpbHNbJ21vZGRhdGUnXSA9IGJpbmRl YygiJGxhc3Rtb2RfZGF0ZVkkbGFzdG1vZF9kYXRlTSRsYXN0bW9kX2RhdGVEIik7DQoJCQ0K CQkkZGV0YWlsc1snb2Zmc2V0J10gPSBmdGVsbCgkZmgpOw0KCQlmd3JpdGUoJGZoLCAkdGhp cy0+emlwU2lnbmF0dXJlKTsNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWyd2 bmVlZGVkJ10pKTsgLy8gdmVyc2lvbl9uZWVkZWQNCgkJZndyaXRlKCRmaCwgcGFjaygncycs ICRkZXRhaWxzWydiaXRmbGFnJ10pKTsgLy8gZ2VuZXJhbF9iaXRfZmxhZw0KCQlmd3JpdGUo JGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ2NtZXRob2QnXSkpOyAvLyBjb21wcmVzc2lvbl9t ZXRob2QNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWydtb2R0aW1lJ10pKTsg Ly8gbGFzdG1vZF90aW1lDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1snbW9k ZGF0ZSddKSk7IC8vIGxhc3Rtb2RfZGF0ZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdWJywgJGRl dGFpbHNbJ2NyY18zMiddKSk7ICAvLyBjcmMtMzINCgkJZndyaXRlKCRmaCwgcGFjaygnSScs ICRkZXRhaWxzWydjb21zaXplJ10pKTsgLy8gY29tcHJlc3NlZF9zaXplDQoJCWZ3cml0ZSgk ZmgsIHBhY2soJ0knLCAkZGV0YWlsc1sndW5jc2l6ZSddKSk7IC8vIHVuY29tcHJlc3NlZF9z aXplDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCBzdHJsZW4oJGNmaWxlbmFtZSkpKTsgICAv LyBmaWxlX25hbWVfbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAwKSk7ICAvLyBl eHRyYV9maWVsZF9sZW5ndGgNCgkJZndyaXRlKCRmaCwgJGNmaWxlbmFtZSk7ICAgIC8vIGZp bGVfbmFtZQ0KCQkvLyBpZ25vcmluZyBleHRyYV9maWVsZA0KCQlmd3JpdGUoJGZoLCAkemRh dGEpOw0KCQkNCgkJLy8gQXBwZW5kIGl0IHRvIGNlbnRyYWwgZGlyDQoJCSRkZXRhaWxzWydl eHRlcm5hbF9hdHRyaWJ1dGVzJ10gID0gKHN1YnN0cigkY2ZpbGVuYW1lLCAtMSk9PScvJyYm ISR6ZGF0YSk/MTY6MzI7IC8vIERpcmVjdG9yeSBvciBmaWxlIG5hbWUNCgkJJGRldGFpbHNb J2NvbW1lbnRzJ10gICAgICAgICAgICAgPSAkZmlsZUNvbW1lbnRzOw0KCQkkdGhpcy0+YXBw ZW5kQ2VudHJhbERpcigkY2ZpbGVuYW1lLCAkZGV0YWlscyk7DQoJCSR0aGlzLT5maWxlc19j b3VudCsrOw0KCX0NCglGdW5jdGlvbiBzZXRFeHRyYSgkZmlsZW5hbWUsICRwcm9wZXJ0eSwg JHZhbHVlKXsNCgkJJHRoaXMtPmNlbnRyYWxkaXJzWyRmaWxlbmFtZV1bJHByb3BlcnR5XSA9 ICR2YWx1ZTsNCgl9DQoJRnVuY3Rpb24gc2F2ZSgkemlwQ29tbWVudHM9Jycpew0KCQlpZigh KCRmaCA9ICYkdGhpcy0+ZmgpKQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAk dGhpcy0+b3ZlcndyaXRlPyd3JzonYSsnKTsNCgkJDQoJCSRjZHJlYyA9ICIiOw0KCQlmb3Jl YWNoKCR0aGlzLT5jZW50cmFsZGlycyBhcyAkZmlsZW5hbWU9PiRjZCl7DQoJCQkkY2RyZWMg Lj0gJHRoaXMtPmRpclNpZ25hdHVyZTsNCgkJCSRjZHJlYyAuPSAiXHgwXHgwIjsgICAgICAg ICAgICAgICAgICAvLyB2ZXJzaW9uIG1hZGUgYnkNCgkJCSRjZHJlYyAuPSBwYWNrKCd2Jywg JGNkWyd2bmVlZGVkJ10pOyAvLyB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0DQoJCQkkY2Ry ZWMgLj0gIlx4MFx4MCI7ICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhbCBiaXQgZmxhZw0K CQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ2NtZXRob2QnXSk7IC8vIGNvbXByZXNzaW9u IG1ldGhvZA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ21vZHRpbWUnXSk7IC8vIGxh c3Rtb2QgdGltZQ0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ21vZGRhdGUnXSk7IC8v IGxhc3Rtb2QgZGF0ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ2NyY18zMiddKTsg IC8vIGNyYzMyDQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsnY29tc2l6ZSddKTsgLy8g Y29tcHJlc3NlZCBmaWxlc2l6ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ3VuY3Np emUnXSk7IC8vIHVuY29tcHJlc3NlZCBmaWxlc2l6ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ3Yn LCBzdHJsZW4oJGZpbGVuYW1lKSk7IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCSRjZHJl YyAuPSBwYWNrKCd2JywgMCk7ICAgICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGxlbmd0 aA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJGNkWydjb21tZW50cyddKSk7IC8v IGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCk7IC8vIGRp c2sgbnVtYmVyIHN0YXJ0DQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAvLyBpbnRlcm5h bCBmaWxlIGF0dHJpYnV0ZXMNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWydleHRlcm5h bF9hdHRyaWJ1dGVzJ10pOyAvLyBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCSRjZHJl YyAuPSBwYWNrKCdWJywgJGNkWydvZmZzZXQnXSk7IC8vIHJlbGF0aXZlIG9mZnNldCBvZiBs b2NhbCBoZWFkZXINCgkJCSRjZHJlYyAuPSAkZmlsZW5hbWU7DQoJCQkkY2RyZWMgLj0gJGNk Wydjb21tZW50cyddOw0KCQl9DQoJCSRiZWZvcmVfY2QgPSBmdGVsbCgkZmgpOw0KCQlmd3Jp dGUoJGZoLCAkY2RyZWMpOw0KCQkNCgkJLy8gZW5kIG9mIGNlbnRyYWwgZGlyDQoJCWZ3cml0 ZSgkZmgsICR0aGlzLT5kaXJTaWduYXR1cmVFKTsNCgkJZndyaXRlKCRmaCwgcGFjaygndics IDApKTsgLy8gbnVtYmVyIG9mIHRoaXMgZGlzaw0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2Jywg MCkpOyAvLyBudW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIGNlbnRy YWwgZGlyZWN0b3J5DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCAkdGhpcy0+ZmlsZXNfY291 bnQpKTsgLy8gdG90YWwgIyBvZiBlbnRyaWVzICJvbiB0aGlzIGRpc2siIA0KCQlmd3JpdGUo JGZoLCBwYWNrKCd2JywgJHRoaXMtPmZpbGVzX2NvdW50KSk7IC8vIHRvdGFsICMgb2YgZW50 cmllcyBvdmVyYWxsIA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdWJywgc3RybGVuKCRjZHJlYykp KTsgICAgIC8vIHNpemUgb2YgY2VudHJhbCBkaXIgDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ1Yn LCAkYmVmb3JlX2NkKSk7ICAgICAgICAgLy8gb2Zmc2V0IHRvIHN0YXJ0IG9mIGNlbnRyYWwg ZGlyDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCBzdHJsZW4oJHppcENvbW1lbnRzKSkpOyAv LyAuemlwIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJZndyaXRlKCRmaCwgJHppcENvbW1lbnRz KTsNCgkJDQoJCWZjbG9zZSgkZmgpOw0KCX0NCgkNCgkvLyBQcml2YXRlDQoJRnVuY3Rpb24g YXBwZW5kQ2VudHJhbERpcigkZmlsZW5hbWUsJHByb3BlcnRpZXMpew0KCQkkdGhpcy0+Y2Vu dHJhbGRpcnNbJGZpbGVuYW1lXSA9ICRwcm9wZXJ0aWVzOw0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3Ry aW5ncyAtIGxvY2FsaXNlIGFzIHJlcXVpcmVkDQpmdW5jdGlvbiBzbWRfYXRfZ1R4dCgkd2hh dCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2FjdGlvbnMnID0+ ICdBY3Rpb25zJywNCgkJJ2FsbG93ZWRfc2tpbnMnID0+ICdBbGxvd2VkIHRoZW1lczonLA0K CQknYXBwbHlfc2tpbicgPT4gJ0FwcGx5IHRoaXMgdGhlbWUnLA0KCQknYXZhaWxfdGl0bGUn ID0+ICdBdmFpbGFibGUgdGhlbWVzJywNCgkJJ2Jhc2VkX29uJyA9PiAnIChiYXNlZCBvbiB7 c2tpbn0pJywNCgkJJ2J5JyA9PiAnIGJ5ICcsDQoJCSdjX2J6aXAyJyA9PiAnQlppcCcsDQoJ CSdjX2d6aXAnID0+ICdHWmlwJywNCgkJJ2NfdGFyJyA9PiAnVGFyJywNCgkJJ2NfemlwJyA9 PiAnWmlwJywNCgkJJ2Nhc2Vfc29ydCcgPT4gJ0Nhc2Utc2Vuc2l0aXZlIHRoZW1lIGxpc3Q6 JywNCgkJJ2NsZWFyJyA9PiAnbm9uZScsDQoJCSdjbG9uZScgPT4gJ0Jhc2UnLA0KCQknY29u ZmlybScgPT4gJ0dvJywNCgkJJ2NvcmVfdGhlbWUnID0+ICdDYW5ub3QgZGVsZXRlIHtza2lu fTogY29yZSB0aGVtZScsDQoJCSdjb3JlX3RoZW1lX2ZpbGUnID0+ICdDYW5ub3QgZGVsZXRl IGZpbGVzIGZyb20ge3NraW59OiBjb3JlIHRoZW1lJywNCgkJJ2NydXNoX3R5cGUnID0+ICdF eHBvcnQgY29tcHJlc3Npb24gdHlwZTonLA0KCQknY3J1c2hfZm9ybWF0JyA9PiAnRm9ybWF0 OicsDQoJCSdzc2MnID0+ICdTdHlsZXBsYXRlcycsDQoJCSdjc3MnID0+ICdTdHlsZXMnLA0K CQknZGVsZXRlX2NvbmZpcm0nID0+ICdSZWFsbHkgZGVsZXRlIHRoZW1lIHtza2lufT8nLA0K CQknZGVsZXRlX2ZhaWxlZCcgPT4gJ0RlbGV0ZSBmYWlsZWQuIFRyeSByZW1vdmluZyBpdCBt YW51YWxseScsDQoJCSdlZGl0X2xibCcgPT4gJ1RoZW1lIGVkaXRvcicsDQoJCSdlbXB0eV9p bmZvJyA9PiAnWW91IHNob3VsZCBjaG9vc2UgYSBmaWxlIGZpcnN0IDotKScsDQoJCSdleHBv cnQnID0+ICdFeHBvcnQnLA0KCQknZmlsZW5hbWVfZm9ybWF0JyA9PiAnRmlsZW5hbWUgZm9y bWF0OiAnLA0KCQknZmlsZV9ub3RfZGVsZXRlZCcgPT4gJ0ZpbGUge25hbWV9ICcuc3Ryb25n KCJub3QiKS4nIGRlbGV0ZWQnLA0KCQknZmlsZV9zYXZlZCcgPT4gJ0ZpbGUge25hbWV9IHNh dmVkJywNCgkJJ2ZpbmRfdGhlbWUnID0+ICdCcm93c2UgdGhlbWVzJywNCgkJJ2dsb2JhbF9z a2luJyA9PiAnRGVmYXVsdCB0aGVtZTonLA0KCQknaGVscF9saW5rJyA9PiAnKDxhIGhyZWY9 IntsaW5rfSI+SGVscDwvYT4pJywNCgkJJ2ltZycgPT4gJ0ltYWdlcycsDQoJCSdpbXBvcnRf ZmFpbGVkJyA9PiAnSW5zdGFsbGF0aW9uIGZhaWxlZCA6LSggQ2hlY2sgdGhlIGFyY2hpdmUg c3RydWN0dXJlJywNCgkJJ2ltcG9ydF9zdWNjZXNzJyA9PiAnSW5zdGFsbGF0aW9uIHN1Y2Nl c3NmdWwuIEZpbGVzIGV4dHJhY3RlZDoge251bX0nLA0KCQknaW1wb3J0X29rJyA9PiAnSW5z dGFsbGF0aW9uIHN1Y2Nlc3NmdWwuJywNCgkJJ2luc3RhbGxfc2tpbicgPT4gJ0luc3RhbGwg dGhlbWUnLA0KCQknaW52YWxpZF9maWxlJyA9PiAnUm9ndWUgZmlsZSBkZXRlY3RlZDoge25h bWV9JywNCgkJJ2lzX2dsb2JhbCcgPT4gJyBbREVGQVVMVF0nLA0KCQknanMnID0+ICdTY3Jp cHRzJywNCgkJJ2xheW91dCcgPT4gJ0xheW91dCBtZXRob2Q6JywNCgkJJ2xheW91dF9saXN0 JyA9PiAnTGlzdCcsDQoJCSdsYXlvdXRfZ3JpZCcgPT4gJ0dyaWQnLA0KCQknbGlzdF90aXRs ZScgPT4gJ0luc3RhbGxlZCB0aGVtZXMnLA0KCQknbWFuYWdlX2xibCcgPT4gJ1RoZW1lIG1h bmFnZXInLA0KCQknbWtkaXJfZmFpbGVkJyA9PiAnQ2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkg Zm9yIGZpbGUge25hbWV9LiBUcnkgbWFudWFsbHkgY3JlYXRpbmcgaXQuJywNCgkJJ25hbWVf ZW1wdHknID0+ICdZb3Ugc2hvdWxkIGdpdmUgeW91ciB0aGVtZSBhIG5hbWUgOi0pJywNCgkJ J25ldycgPT4gJ0NyZWF0ZSBuZXcgdGhlbWUnLA0KCQknbmV3X2ZpbGUnID0+ICdOZXcgZmls ZScsDQoJCSduZXdfY2xvbmVza2luJyA9PiAnTmFtZSBvZiBjb3B5OicsDQoJCSduZXdfc2tp bicgPT4gJ1RoZW1lIG5hbWU6JywNCgkJJ290aGVyX2ZpbGVzJyA9PiAnT3RoZXJzJywNCgkJ J3BocCcgPT4gJ0NvZGUnLA0KCQkncGVyX2dyb3VwJyA9PiAnT25lIHRoZW1lIHBlciBwcml2 aWxlZ2UgbGV2ZWwnLA0KCQkncGVyX3NpdGUnID0+ICdPbmUgdGhlbWUgZm9yIGV2ZXJ5b25l JywNCgkJJ3Blcl91c2VyJyA9PiAnT25lIHRoZW1lIHBlciB1c2VyJywNCgkJJ3ByZWZzX2Rl bGV0ZWQnID0+ICdQcmVmZXJlbmNlcyBkZWxldGVkJywNCgkJJ3ByZWZzX2luc3RhbGxlZCcg PT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCcsDQoJCSdwcmVmc19ub3RfaW5zdGFsbGVkJyA9 PiAnUHJlZmVyZW5jZXMgbm90IGluc3RhbGxlZC4nLA0KCQkncHJlZnNfc29tZScgPT4gJ05v dCBhbGwgcHJlZmVyZW5jZXMgYXZhaWxhYmxlLicsDQoJCSdwcmVmc19zb21lX2V4cGxhaW4n ID0+ICdJdCBpcyBlaXRoZXIgYmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24g b2YgdGhlJy5ici4ncGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVy ZW5jZXMnLmJyLidoYXZlIGJlY29tZSBjb3JydXB0IHNvbWVob3cuJywNCgkJJ3ByZWZzX3Nv bWVfb3B0aW9ucycgPT4gJ0Nob29zZSAnLmdUeHQoJ2RlbGV0ZScpLicgdG8gcmVtb3ZlIHRo ZW0gYWxsIG9yICcuZ1R4dCgnaW5zdGFsbCcpLicgdG8gYWRkJy5ici4nYW55IG5ldyBvbmVz LCBsZWF2aW5nIGFsbCBleGlzdGluZyBwcmVmZXJlbmNlcyB1bnRvdWNoZWQuJywNCgkJJ3By ZWZzX3RpdGxlJyA9PiAnQWRtaW4gdGhlbWUgcHJlZmVyZW5jZXMnLA0KCQkncmVuYW1lX2Zh aWxlZCcgPT4gJ1JlbmFtZSBmYWlsZWQnLA0KCQkncmVuYW1lZCcgPT4gJ1JlbmFtZWQgdG8g e25hbWV9JywNCgkJJ3NldCcgPT4gJ1NldCcsDQoJCSdzZXR1cCcgPT4gJ1ByZWZlcmVuY2Vz JywNCgkJJ3NraW5fZ2JsJyA9PiAnVGhlbWUnLA0KCQknc2tpbl9jbG9uZWQnID0+ICdUaGVt ZSBleHRlbmRlZCBhcyB7bmFtZX0nLA0KCQknc2tpbl9jcmVhdGVkJyA9PiAnVGhlbWUge25h bWV9IGNyZWF0ZWQnLA0KCQknc2tpbl9kZWxldGVkJyA9PiAnVGhlbWUge25hbWV9IGRlbGV0 ZWQnLA0KCQknc2tpbl9leGlzdHMnID0+ICdUaGVtZSB7bmFtZX0gYWxyZWFkeSBleGlzdHMn LA0KCQknc2tpbl9maWxlcycgPT4gJ1RoZW1lIGZpbGVzJywNCgkJJ3NraW5fZ3JvdXBzJyA9 PiAnR3JvdXAgdGhlbWVzOicsDQoJCSdza2luX2ltYWdlcycgPT4gJ1RoZW1lIGltYWdlcycs DQoJCSdza2luX2xpc3QnID0+ICdUaGVtZSBsaXN0JywNCgkJJ3NraW5fZ3JpZCcgPT4gJ1Ro ZW1lIGdyaWQnLA0KCQknc2tpbl9ub3RfY3JlYXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBjb3Vs ZCBub3QgYmUgY3JlYXRlZC4gVHJ5IG1hbnVhbGx5IG1ha2luZyB0aGUgZGlyZWN0b3J5JywN CgkJJ3NraW5fbm90X2ZvdW5kJyA9PiAnVGhlIHRoZW1lIHtuYW1lfSBjb3VsZCBub3QgYmUg Zm91bmQnLA0KCQknc2tpbl9zd2l0Y2hlZCcgPT4gJ1RoZW1lIHN3aXRjaGVkIHRvIHtza2lu fScsDQoJCSdza2luX3N5c3RlbScgPT4gJ1RoZW1lIHN5c3RlbTonLA0KCQknc2tpbm5lcicg PT4gJ1RoZW1lJywNCgkJJ3N1cHBvcnRlZF9pbXBvcnQnID0+ICdTdXBwb3J0ZWQgaW1wb3J0 IHR5cGVzOiB7dHlwZXN9JywNCgkJJ3RhYl9uYW1lJyA9PiAnQWRtaW4gdGhlbWVzJywNCgkJ J3RodW1ic2l6ZScgPT4gJ1RodW1iIGRpbWVuc2lvbnM6JywNCgkJJ3RpbWVzJyA9PiAnIHgg JywNCgkJJ3Vuc3VwcG9ydGVkX2NvbXByZXNzaW9udHlwZScgPT4gJ3tjcnVzaH0gaXMgbm90 IGEgc3VwcG9ydGVkIGNvbXByZXNzaW9uIGZvcm1hdCBpbiB0aGlzIGluc3RhbGxhdGlvbics DQoJCSd1bnN1cHBvcnRlZF9maWxldHlwZScgPT4gJ0ZpbGUgaXMgbm90IG9mIGEgc3VwcG9y dGVkIHR5cGUnLA0KCQkndW5zdXBwb3J0ZWRfZnVkZ2UnID0+ICc6IGhpdCBTYXZlIGFnYWlu IHRvIHN0b3JlIGFueXdheScsDQoJCSd1cGRhdGUnID0+ICdVcGRhdGUnLA0KCQkndXBsb2Fk X2ZhaWxlZCcgPT4gJ0ltYWdlIGNvdWxkIG5vdCBiZSB1cGxvYWRlZCcsDQoJCSd1cGxvYWRf aW1hZ2UnID0+ICdVcGxvYWQgaW1hZ2UnLA0KCQkndXBsb2FkX3N1Y2Nlc3MnID0+ICdJbWFn ZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHknLA0KCQkndmVyc2lvbicgPT4gJ3YnLA0KCSk7DQoJ cmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6 IjMiO3M6NToib3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAi O3M6MjU1NTg6IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8aDEgaWQ9InRvcCI+c21kX2FkbWlu X3RoZW1lczwvaDE+CgoJPHA+SW5zdGFsbCwgbWFuYWdlLCBlZGl0IGFuZCBzd2l0Y2ggYWRt aW4tc2lkZSB0aGVtZXMgdGhlbiBzaGFyZSB0aGVtIHdpdGggdGhlIGNvbW11bml0eS48L3A+ CgoJPGgyIGlkPSJmZWF0dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+Q3JlYXRl IGFuZCBFZGl0IGFkbWluLXNpZGUgdGhlbWVzPC9saT4KCQk8bGk+RW1wbG95IGltYWdlcywg PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4sIEpTLCA8c3BhbiBjbGFzcz0iY2FwcyI+ SFRNTDwvc3Bhbj4vUEhQIChmb3IgY2hhbmdpbmcgbWFzdGhlYWQsIGhlYWRlciAmYW1wOyBm b290ZXIpIGluIHlvdXIgdGhlbWU8L2xpPgoJCTxsaT5Vc2UgY29uc3RhbnRzIGluIHlvdXIg PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gZmlsZXM8L2xpPgoJCTxsaT5CYXNlIHlv dXIgdGhlbWUgb24gYW4gZXhpc3RpbmcgdGhlbWUgdG8gdHdlYWsgaXQgdG8geW91ciB0YXN0 ZTwvbGk+CgkJPGxpPkV4cG9ydCBhIHRoZW1lIHBhY2thZ2UgZm9yIGRpc3RyaWJ1dGlvbiB0 byB0aGUgY29tbXVuaXR5IGluIGVpdGhlciAudGFyLCAudGd6LCAuYnoyIG9yIC56aXAgZm9y bWF0PC9saT4KCQk8bGk+SW1wb3J0IC8gaW5zdGFsbCBvdGhlciB0aGVtZXMgZnJvbSB0aGUg PGEgaHJlZj0iaHR0cDovL3RleHRnYXJkZW4ub3JnL2FkbWluaXN0cmF0aW9uLXRoZW1lcyI+ Y29tbXVuaXR5IHJlcG9zaXRvcnk8L2E+PC9saT4KCQk8bGk+QWRtaW5pc3RyYXRvciBjYW4g c2V0IGEgZGVmYXVsdCB0aGVtZSBmb3IgYWxsIHVzZXJzLCBvciBlbmFibGUgcGVyLXVzZXIg LyBwZXItcm9sZSB0aGVtZXM8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9y PC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+U3Rl ZiBEYXdzb248L2E+LjwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVu aW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVy IDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMDk2L3NtZF9hZG1p bl90aGVtZXMiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8v c3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBp bnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVn aW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBBIG5ldyB0YWIgbGFi ZWxsZWQgPGVtPkV4dGVuc2lvbnMgLSZndDsgQWRtaW4gdGhlbWVzPC9lbT4gaXMgY3JlYXRl ZC4gPHN0cm9uZz5Pbmx5IHB1Ymxpc2hlcnMgd2lsbCBzZWUgdGhpcyB0YWI8L3N0cm9uZz4u PC9wPgoKCTxwPlRoZSBwbHVnaW4gc2hvdWxkIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCB0aGUg cHJlZmVyZW5jZXMgZm9yIHlvdS4gQ2xpY2sgJiM4MjE2O1ByZWZlcmVuY2VzJiM4MjE3OyBm cm9tIHRoZSA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBBZG1pbiB0aGVtZXM8L2VtPiB0YWIgb3Ig PGVtPk9wdGlvbnM8L2VtPiBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHRhYiB0byBh bHRlciwgZGVsZXRlIG9yIHJlaW5zdGFsbCB0aGVtLjwvcD4KCgk8cD5WaXNpdCB0aGUgPGEg aHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMw OTUyIj5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRo ZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyB1bmlu c3RhbGwsIHNpbXBseSBkZWxldGUgdGhlIHBsdWdpbiBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQ bHVnaW5zIHBhZ2UuIFRoZSBwcmVmZXJlbmNlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcmVt b3ZlZC4gUGxlYXNlIGJlIGF3YXJlIHRoYXQgcmVtb3ZpbmcgdGhlIHBsdWdpbiBkb2VzIDxz dHJvbmc+bm90IHJlbW92ZSBhbnkgdGhlbWVzIHlvdSBoYXZlIGluc3RhbGxlZCwgbm9yIGRv ZXMgaXQgcmVtb3ZlIHBlci11c2VyIHRoZW1lIHByZWZlcmVuY2VzPC9zdHJvbmc+LiBQZXIt dXNlciBwcmVmcyB3aWxsIHNpbXBseSBiZSBpZ25vcmVkIHdoZW4gdGhlIHBsdWdpbiBpcyBk ZWxldGVkLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+T24gdGhlIDxl bT5FeHRlbnNpb25zIC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+IHRhYiBpcyBhIGxpc3Qgb3Ig Z3JpZCBjb250YWluaW5nIGluc3RhbGxlZCB0aGVtZXMuIE91dCBvZiB0aGUgYm94LCB0aGVy ZSB3aWxsIGJlIHR3byBhdmFpbGFibGU6IDxlbT5jbGFzc2ljPC9lbT4gYW5kIDxlbT5yZW1v cmE8L2VtPi4gPHN0cm9uZz5JdCYjODIxNztzIGFkdmlzYWJsZSBub3QgdG8gY2hhbmdlIHRo ZXNlIHRoZW1lczwvc3Ryb25nPiBzbyB5b3UgY2FuIGFsd2F5cyBnbyBiYWNrIHRvIHRoZW0g aWYgZXZlcnl0aGluZyBnb2VzIHNpZGV3YXlzLiBQbHVzIGl0JiM4MjE3O3MgYSB2ZXJ5IHVz ZWZ1bCBzdGFydGluZyBwb2ludCBmcm9tIHdoaWNoIHRvIDxhIGhyZWY9IiNjbG9uZSI+YmFz ZTwvYT4gYSA8YSBocmVmPSIjbmV3Ij5uZXcgdGhlbWU8L2E+LjwvcD4KCgk8cD5JbiB0aGUg bGlzdCBsYXlvdXQsIHRoZSBjb2x1bW5zIGFyZTo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+VGhlbWU8L3NwYW4+IDogVGhlIG5hbWUgb2YgdGhlIHRoZW1lIGFuZCAo b3B0aW9uYWwpIHRodW1ibmFpbCBhc3NpZ25lZCB0byBpdC4gQ2xpY2sgdG8gPGEgaHJlZj0i I3N3aXRjaCI+YWN0aXZhdGU8L2E+IHRoZSB0aGVtZS4gSWYgdGhlIHRoZW1lIGlzIGJhc2Vk IG9uIGFub3RoZXIgdXNlciYjODIxNztzIHRoZW1lLCB0aGlzIGRlcGVuZGVuY3kgd2lsbCBi ZSBzaG93biBpbiBwYXJlbnRoZXNlcyBhZnRlciB0aGUgdGhlbWUgbmFtZTwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5BdXRob3I8L3NwYW4+IDogWW91ISBMaW5rZWQgdG8geW91 ciB3ZWIgc2l0ZSBpZiB5b3Ugc3VwcGx5IGl0IGluIHlvdXIgPGEgaHJlZj0iI2Fib3V0Ij5N YW5pZmVzdDwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VmVyc2lvbjwvc3Bh bj4gOiBUaGVtZSB2ZXJzaW9uIG51bWJlciBpbiA8Y29kZT5tYWpvci5taW5vci5zdWJyZXY8 L2NvZGU+IG5vdGF0aW9uLiBJZiBhIG5ld2VyIHZlcnNpb24gb2YgYSB0aGVtZSBpcyBhdmFp bGFibGUgZnJvbSBUZXh0Z2FyZGVuLCB0aGUgdmVyc2lvbiBudW1iZXIgd2lsbCBiZSBoeXBl cmxpbmtlZCB0byB0aGUgdGhlbWUgb24gVGV4dGdhcmRlbiBzbyB5b3UgbWF5IGRvd25sb2Fk L2luc3RhbGwgaXQuIFRoZSB2ZXJzaW9ucyBhcmUgY2hlY2tlZCwgYXQgbW9zdCwgb25jZSBl dmVyeSAyNCBob3VycyB0byBhdm9pZCBoYW1tZXJpbmcgdGhlIHNlcnZlcjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5EZXNjcmlwdGlvbjwvc3Bhbj4gOiBCcmllZiBvbmUtIG9y IHR3by1saW5lciBleHBsYWluaW5nIHlvdXIgdGhlbWUuIElmIHlvdSBoYXZlIG9mZmVyZWQg YSBoZWxwIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGluIHlvdXIgbWFuaWZlc3Qs IGl0IHdpbGwgYmUgbGlua2VkIGhlcmUgYXMgd2VsbDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5BY3Rpb25zPC9zcGFuPiA6IEFjdGlvbnMgdG8gcGVyZm9ybSBvbiBlYWNoIHRo ZW1lCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bTmV3IHRoZW1lXTwvc3Bhbj4g OiA8YSBocmVmPSIjbmV3Ij5DcmVhdGU8L2E+IGEgbmV3IGJsYW5rLCBlbXB0eSBkaXJlY3Rv cnkgcmVhZHkgZm9yIHlvdXIgdGhlbWUuIE5vIHNwYWNlcyAvIG9kZCBjaGFyYWN0ZXJzIGFy ZSBhbGxvd2VkIGluIHRoZSBuYW1lIGFuZCBpdCBtdXN0IG5vdCBzdGFydCB3aXRoIGEgbnVt YmVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltFZGl0XTwvc3Bhbj4gOiA8YSBo cmVmPSIjZWRpdF90aGVtZSI+RWRpdDwvYT4gdGhlIHZhcmlvdXMgZGV0YWlscywgZmlsZXMg YW5kIGNvbnRlbnQgd2l0aGluIHRoZSB0aGVtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5bQmFzZV08L3NwYW4+IDogPGEgaHJlZj0iI2Nsb25lIj5FeHRlbmQ8L2E+IG9uZSBv ZiB0aGUgZXhpc3RpbmcgdGhlbWVzIHRvIG1ha2UgeW91ciBvd24gY2hhbmdlcyB1bmRlciBh IG5ldyBuYW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltFeHBvcnRdPC9zcGFu PiA6IDxhIGhyZWY9IiNleHBvcnQiPlNhdmU8L2E+IHRoZSB0aGVtZSBwYWNrYWdlIHRvIHlv dXIgaGFyZCBkcml2ZSBmb3IgZGlzdHJpYnV0aW9uL2JhY2t1cCBpbiB5b3VyIGNob3NlbiBj b21wcmVzc2lvbiBmb3JtYXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W0RlbGV0 ZV08L3NwYW4+IDogQ29tcGxldGVseSA8YSBocmVmPSIjZGVsZXRlIj5yZW1vdmU8L2E+IHRo ZSB0aGVtZS4gTm90IGF2YWlsYWJsZSB0byB0aGUgY29yZSB0aGVtZXMsIGZvciBvYnZpb3Vz IHJlYXNvbnMhIEFsc28gbm90IGF2YWlsYWJsZSBpZiBhIHRoZW1lIGhhcyBiZWVuIHVzZWQg YXMgYSBiYXNpcyBmb3IgYW5vdGhlciB0aGVtZSBpbiB0aGUgY3VycmVudCBzaXRlPC9saT4K CTwvdWw+PC9saT4KCTwvdWw+CgoJPHA+VGhlIHJvdyBvZiB0aGUgY3VycmVudGx5IHNlbGVj dGVkIHRoZW1lIGlzIHNoYWRlZCBhbmQgdGhlIGN1cnJlbnQgZGVmYXVsdCB0aGVtZSB0aGF0 IGlzIGluIGVmZmVjdCBpcyBoaWdobGlnaHRlZC4gVGhlIGdyaWQgdmlldyBoYXMgcGFydHMg b2YgdGhlIGFib3ZlIGluZm9ybWF0aW9uLCBsYWlkIG91dCBzbGlnaHRseSBkaWZmZXJlbnRs eS48L3A+CgoJPGgyIGlkPSJzd2l0Y2giPlN3aXRjaGluZyB0aGVtZXM8L2gyPgoKCTxwPkFz IHRoZSBhZG1pbmlzdHJhdG9yLCB5b3UgY2FuIHBsYXkgR29kIG92ZXIgZXZlcnlvbmUgZWxz ZSYjODIxNztzIHRoZW1lcy4gWW91IGFyZSBmcmVlIHRvIGluc3RhbGwgYXMgbWFueSBhcyB5 b3Ugd2lzaCBhbmQgc3dpdGNoIGJldHdlZW4gdGhlbSB3aXRob3V0IGFmZmVjdGluZyBhbnkg b3RoZXIgbG9naW5zLiBOb2JvZHkgZWxzZSB3aWxsIGV2ZW4ga25vdyB5b3UgaGF2ZSBpbnN0 YWxsZWQgdGhlIHBsdWdpbi48L3A+CgoJPHA+SWYsIGhvd2V2ZXIsIHlvdSB2aXNpdCB0aGUg PGEgaHJlZj0iI3NldHVwIj5QcmVmZXJlbmNlczwvYT4gcGFnZSB5b3UgY2FuIGNvbmZpZ3Vy ZSB0aGUgdGhlbWVzIHRoYXQgb3RoZXJzIHVzZS4gVGhlcmUgYXJlIHRocmVlIG1lY2hhbmlz bXMgdG8gY2hvb3NlIGZyb206PC9wPgoKCTx1bD4KCQk8bGk+Rm9yY2Ugb25lIHRoZW1lIGZv ciBhbGwgdXNlcnMgKGV4Y2VwdCB5b3Vyc2VsZik8L2xpPgoJCTxsaT5Gb3JjZSBvbmUgdGhl bWUgZm9yIGVhY2ggdXNlciBwcml2aWxlZ2UgbGV2ZWwgKGV4Y2VwdCB5b3Vyc2VsZik8L2xp PgoJCTxsaT5BbGxvdyBhbGwgdXNlcnMgKGV4Y2VwdCB5b3Vyc2VsZikgdG8gcGljayB0aGVp ciBmYXZvdXJpdGUgdGhlbWUgZnJvbSBhIHNob3J0bGlzdCB5b3UgZGVmaW5lPC9saT4KCTwv dWw+CgoJPHA+QXQgYWxsIHRpbWVzLCB5b3UgY2FuIGNob29zZSBhbnkgdGhlbWUgeW91IHBs ZWFzZSBmb3IgeW91ciBvd24gdXNlLiBUaGlzIGFsbG93cyB0cmlhbGxpbmcsIHR3ZWFraW5n IGFuZCB0ZXN0aW5nIG9mIHRoZW1lcyBiZWZvcmUgdW5sZWFzaGluZyB0aGVtIG9uIHlvdXIg dXNlciBiYXNlLjwvcD4KCgk8aDIgaWQ9InNldHVwIj5UaGVtZSBwcmVmZXJlbmNlczwvaDI+ CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Q2FzZS1zZW5zaXRpdmUgdGhlbWUg bGlzdDwvc3Bhbj4gOiBXaGVuIHNldCB0byA8Y29kZT5ZZXM8L2NvZGU+LCB1cHBlci1jYXNl IHRoZW1lIG5hbWVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGxvd2VyIGNhc2UgdGhlbWUgbmFt ZXMgYW5kIHdpbGwgYmUgbGlzdGVkIGZpcnN0LiBGb3IgZXhhbXBsZSwgMyB0aGVtZSBjYWxs ZWQgJiM4MjE2O0FuZ2VsaWMmIzgyMTc7LCAmIzgyMTY7YmFyYmFyaWMmIzgyMTc7IGFuZCAm IzgyMTY7Q29oZXNpdmUmIzgyMTc7IHdpbGwgYmUgb3JkZXJlZDogPGNvZGU+QW5nZWxpYywg Q29oZXNpdmUsIGJhcmJhcmljPC9jb2RlPi4gU2V0IHRvIDxjb2RlPk5vPC9jb2RlPiB0byBt aXggdXBwZXIgYW5kIGxvd2VyLWNhc2UgdGhlbWVzIHRvZ2V0aGVyIChvcmRlciBpcyB0aGVu IDxjb2RlPkFuZ2VsaWMsIGJhcmJhcmljLCBDb2hlc2l2ZTwvY29kZT4gKS4gVGhlICYjODIx NjtjbGFzc2ljJiM4MjE3OyB0aGVtZSBpcyA8ZW0+YWx3YXlzPC9lbT4gbGlzdGVkIGZpcnN0 LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FeHBvcnQgY29tcHJlc3Npb24gdHlw ZTwvc3Bhbj4gOiBEZXBlbmRpbmcgb24geW91ciB2ZXJzaW9uIG9mIDxzcGFuIGNsYXNzPSJj YXBzIj5QSFA8L3NwYW4+IGFuZCB3aGljaCBtb2R1bGVzIGhhdmUgYmVlbiBjb21waWxlZCBp bnRvIGl0LCB5b3Ugd2lsbCBzZWUgYSBsaXN0IG9mIGNvbXByZXNzaW9uIGZvcm1hdHMgaGVy ZS4gQ2hvb3NlIG9uZSB0aGF0IHN1aXRzIHlvdSBhcyB0aGUgZGVmYXVsdCBpbiB3aGljaCB0 byBleHBvcnQgeW91ciB0aGVtZSBwYWNrYWdlcy4gWW91IG1heSBjaG9vc2UgZnJvbSA8ZW0+ VGFyPC9lbT4sIDxlbT5HWmlwPC9lbT4gKGFjdHVhbGx5IHRhcitnemlwKSwgPGVtPkJ6aXAy PC9lbT4gKHRhcitiemlwKSwgb3IgPGVtPlppcDwvZW0+ICh0aGUgZGVmYXVsdCkuPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkxheW91dCBtZXRob2Q8L3NwYW4+IDogQ2hvb3Nl IGZyb20gYSBMaXN0IFZpZXcgKHVzZWZ1bCBpZiB5b3UgcHJlZmVyIHRvIGhpZGUgb3IgdXNl IHNtYWxsIHRodW1icykgb3IgYSBHcmlkIFZpZXcgb2YgaW5zdGFsbGVkIHRoZW1lcy4gVGhp cyBzZXR0aW5nIGFwcGxpZXMgdG8gYm90aCBhZG1pbiBhbmQgdXNlciB0aGVtZSBzZWxlY3Rp b24gdGFicy4gRGVmYXVsdDogR3JpZCBWaWV3PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPlRodW1iIGRpbWVuc2lvbnM8L3NwYW4+IDogU2V0IHRoZSB0aHVtYm5haWwgZGltZW5z aW9ucyBpbiB0aGUgdGhlbWUgbGlzdC4gU2V0IGVpdGhlciBkaW1lbnNpb24gdG8gMCB0byB0 dXJuIG9mZiB0aHVtYm5haWwgZGlzcGxheS4gRGVmYXVsdDogMjYwICYjMjE1OyAxNTBweDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5GaWxlbmFtZSBmb3JtYXQ8L3NwYW4+IDog RGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIGV4cG9ydGVkIHRoZW1lLiBZb3UgY2FuIHVzZSA8 Y29kZT57dGhlbWV9PC9jb2RlPiBhbmQgPGNvZGU+e3ZlcnNpb259PC9jb2RlPiByZXBsYWNl bWVudCB2YXJpYWJsZXMgaW4gdGhpcyBmaWVsZC4gRm9yIGV4YW1wbGUsIDxjb2RlPnt0aGVt ZX1fdnt2ZXJzaW9ufTwvY29kZT4uIERlZmF1bHQ6IDxjb2RlPnt0aGVtZX08L2NvZGU+PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRlZmF1bHQgdGhlbWU8L3NwYW4+IDogU2V0 IHRoZSB0aGVtZSBmb3IgYWxsIG90aGVyIHVzZXJzLiBJZiB1c2luZyAmIzgyMTY7T25lIHRo ZW1lIGZvciBldmVyeW9uZSYjODIxNzsgdGhlIHRoZW1lIGNob3NlbiBoZXJlIGlzIGZvcmNl ZCB1cG9uIGFsbCB1c2Vycy4gSWYgdXNpbmcgYW55IG9mIHRoZSBvdGhlciBtZWNoYW5pc21z LCB0aGlzIHRoZW1lIGlzIGEgZmFsbGJhY2sgc2hvdWxkIHNvbWV0aGluZyBnbyBwZWFyLXNo YXBlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWUgc3lzdGVtPC9zcGFu PiA6IEFzIGRldGFpbGVkIGluIDxhIGhyZWY9IiNzd2l0Y2giPlN3aXRjaGluZyB0aGVtZXM8 L2E+LCB5b3UgbWF5IGNob29zZSB0aGUgd2F5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBpbnRlcmZhY2UgaXMgcHJlc2VudGVkIHRvIG90aGVyIHVzZXJzOgoJPHVsPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+T25lIHRoZW1lIGZvciBldmVyeW9uZTwvc3Bhbj4g OiB1c2VzIHRoZSBEZWZhdWx0IHRoZW1lIGZvciBhbGwgdXNlcnM7IHRoZXkgaGF2ZSBubyBj aG9pY2UgaW4gdGhlIG1hdHRlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUg dGhlbWUgcGVyIHByaXZpbGVnZSBsZXZlbDwvc3Bhbj4gOiBhbGxvd3MgeW91IHRvIGFzc2ln biBvbmUgb3IgbW9yZSBwcml2aWxlZ2UgbGV2ZWxzIHRvIGEgdGhlbWUuIENob29zZSBhIHRo ZW1lIGZyb20gdGhlIGxlZnQtaGFuZCBsaXN0IGFuZCB0aGVuIHNoaWZ0L2N0cmwtY2xpY2sg dGhlIHByaXZpbGVnZSBsZXZlbHMgdG8gYXNzaWduIHRoZW0uIEZsaWNrIGJldHdlZW4gdGhl bWVzIGluIHRoZSBsZWZ0IGNvbHVtbiB0byBzZWUgd2hpY2ggb25lcyBhcmUgc2V0IGZvciB2 YXJpb3VzIHVzZXIgbGV2ZWxzLCBvciBob3ZlciBvdmVyIGEgcHJpdmlsZWdlIGxldmVsIHRv IHNlZSBhIHRvb2x0aXAuIE9ubHkgb25lIGxldmVsIGNhbiBiZSBhc3NpZ25lZCB0byBhIHRo ZW1lIHNvIGlmIHlvdSBjbGljayBhIGxldmVsIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBhc3Np Z25lZCB0byBhbm90aGVyIHRoZW1lLCBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdHMgb3Jp Z2luYWwgYXNzaWdubWVudC4gTm90ZSB5b3UgbXVzdCBTYXZlIHRoZSBjaGFuZ2VzIGZvciB0 aGVtIHRvIHRha2UgZWZmZWN0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0 aGVtZSBwZXIgdXNlcjwvc3Bhbj4gOiBkZWZpbmUgYSBzaG9ydGxpc3QgZnJvbSB0aGUgYXZh aWxhYmxlIGluc3RhbGxlZCB0aGVtZXMgdG8gb2ZmZXIgdG8gYWxsIHVzZXJzLiBBIG5ldyB0 YWIgd2lsbCBhcHBlYXIgdG8gb3RoZXIgdXNlcnMgdW5kZXIgPGVtPkFkbWluPC9lbT4gdGhh dCBpcyBlc3NlbnRpYWxseSBhIGN1dC1kb3duIHZlcnNpb24gb2YgdGhlIDxlbT5BZG1pbiB0 aGVtZXM8L2VtPiB0YWIuIFVzZXJzIGNhbiBzd2l0Y2ggYmV0d2VlbiBhbnkgb25lIG9mIHRo ZSB0aGVtZXMgeW91IGhhdmUgcGVybWl0dGVkLjwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoK CTxwPlJlbWVtYmVyIHRvIGNsaWNrIFNhdmUgdG8gYXBwbHkgdGhlIGNoYW5nZXMuIENsaWNr aW5nIGFueSBvdGhlciB0YWIgd2lsbCB1bmRvIGFueSBtb2RpZmljYXRpb25zIHlvdSBtYXkg aGF2ZSBtYWRlLjwvcD4KCgk8aDIgaWQ9ImJyb3dzZSI+QnJvd3NlIHRoZW1lczwvaDI+CgoJ PHA+Q2xpY2sgdGhpcyBidXR0b24gdG8gYmUgdGFrZW4gdG8gdGhlIGNlbnRyYWwgYWRtaW4g dGhlbWUgcmVwb3NpdG9yeSB3aGVyZSB5b3UgbWF5IGJyb3dzZSB0aGVtZXMgYW5kIGRvd25s b2FkIHRoZW0gcmVhZHkgZm9yIGluc3RhbGxhdGlvbi48L3A+CgoJPGgyIGlkPSJpbXBvcnQi Pkluc3RhbGwgYSB0aGVtZTwvaDI+CgoJPHA+TG9jYXRlIGEgdGhlbWUgcGFja2FnZSBvbiB5 b3VyIGhhcmQgZHJpdmUgb3IgcGFzdGUgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiB0byBhIHBhY2thZ2UgaW4gdGhlIGJveCBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLiBIaXQg PHN0cm9uZz5VcGxvYWQ8L3N0cm9uZz4gYW5kIGl0IHdpbGwgYmUgaW5zdGFsbGVkLiBJZiBp dCBhbHJlYWR5IGV4aXN0cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBOb3RlIHRoYXQgeW91 IG1heSByZWNlaXZlIGEgd2FybmluZyBpZiB0aGUgdGhlbWUgaXMgcGFja2FnZWQgdXNpbmcg YSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdGhhdCBpcyBub3QgYnVpbHQgaW50byB5b3VyIHZl cnNpb24gb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4uIEEgbGlzdCBvZiBzdXBw b3J0ZWQgY29tcHJlc3Npb24gdHlwZXMgaXMgZ2l2ZW4gYmVsb3cgdGhlIHVwbG9hZCBib3gu PC9wPgoKCTxoMiBpZD0ibmV3Ij5DcmVhdGUgYSBuZXcgKGVtcHR5KSB0aGVtZTwvaDI+CgoJ PHA+Q2xpY2sgPHN0cm9uZz5DcmVhdGUgbmV3IHRoZW1lPC9zdHJvbmc+IGFuZCBhIGJveCB3 aWxsIHNsaWRlIGRvd24gYWxsb3dpbmcgeW91IHRvIGdpdmUgeW91ciB0aGVtZSBhIG5hbWUu ICBOb3RlIHRoYXQgdGhlIGVkaXQgYm94IGF1dG9tYXRpY2FsbHkgdGFrZXMgZm9jdXMsIHNv IHlvdSBjYW4gdHlwZSBzdHJhaWdodCBhd2F5LjwvcD4KCgk8cD5ObyBzcGFjZXMgb3Igb2Rk IGNoYXJhY3RlcnMgYXJlIHBlcm1pdHRlZCwgYmVjYXVzZSB0aGUgbmFtZSB5b3UgZW50ZXIg aXMgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgY3JlYXRlZCBpbiB0 aGUgPGVtPnRoZW1lPC9lbT4gZm9sZGVyIGFuZCB0aGVtIG5hbWUgb2YgeW91ciB0aGVtZSYj ODIxNztzIGNsYXNzLiBJZiB5b3UgZG8gbWFuYWdlIHRvIHVzZSBvZGQgY2hhcmFjdGVycywg dGhlIG5hbWUgd2lsbCBiZSAmIzgyMjA7ZHVtYmVkIGRvd24mIzgyMjE7IGZvciB5b3UuIE9u Y2UgdGhlIG5hbWUgaXMgc2V0LCB0aGF0IGlzIGl0OyB5b3UgY2Fubm90IGNoYW5nZSBpdCBm cm9tIHdpdGhpbiB0aGUgaW50ZXJmYWNlLiBUaGUgb25seSB3YXkgdG8gcmVuYW1lIGl0IGlz IHZpYSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5GVFA8L3NwYW4+IGNsaWVudCBhbmQgaW4g dGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgaWYgeW91IGtub3cgd2hh dCB5b3UgYXJlIGRvaW5nLjwvcD4KCgk8cD5JbiBvcmRlciB0byBhdm9pZCBuYW1lIGNsYXNo ZXMgd2l0aCBvdGhlciBwZW9wbGUmIzgyMTc7cyB0aGVtZXMsIGl0IGlzIHJlY29tbWVuZGVk IHRoYXQgYWxsIHRoZW1lcyB5b3UgZGVzaWduIGJlZ2luIHdpdGggYSB1bmlxdWUgMy1sZXR0 ZXIgcHJlZml4IG9mIHlvdXIgb3duIGNob29zaW5nLCBwbHVzIGFuIHVuZGVyc2NvcmUgJiM4 MjEyOyBleGFjdGx5IGxpa2UgcGx1Z2lucy4gVGh1cywgc21kX0JsdWVNZWFuaWUgbWlnaHQg d2VsbCBiZSB0aGUgbmFtZSBvZiBhIHRoZW1lLjwvcD4KCgk8cD5XaGVuIHlvdSBoYXZlIG5h bWVkIHlvdXIgdGhlbWUsIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gY3JlYXRlIGEg ZGlyZWN0b3J5IGluIHdoaWNoIGl0IGNhbiByZXNpZGUuPC9wPgoKCTxoMiBpZD0iY2xvbmUi PkV4dGVuZCBhbiBleGlzdGluZyB0aGVtZTwvaDI+CgoJPHA+Q2xpY2sgPHN0cm9uZz5CYXNl PC9zdHJvbmc+IHRvIGNyZWF0ZSBhIG5ldyB0aGVtZSBiYXNlZCBvbiBhbm90aGVyLiBBIGJv eCB3aWxsIHNsaWRlIGRvd24gKHRoZSBjdXJzb3IgZm9jdXNlcyBhdXRvbWF0aWNhbGx5IGlu IHRoZSBib3ggZm9yIHlvdSkgc28geW91IG1heSBlbnRlciB0aGUgbmFtZSBvZiB5b3VyIGNv cHkuIE9ic2VydmUgdGhlIDxhIGhyZWY9IiNuZXciPm5hbWluZyBjb252ZW50aW9uPC9hPiwg dGhlbiBjbGljayA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGNyZWF0ZSB0aGUgbmV3IHRoZW1l LjwvcD4KCgk8cD48c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5QbGVhc2UgcmVtZW1iZXIsIHlv dXIgdGhlbWUgd2lsbCBiZSBkZXBlbmRlbnQgb24gdGhlIGNob3NlbiB0aGVtZSBhbmQgPHN0 cm9uZz5ib3RoPC9zdHJvbmc+IG11c3QgYmUgcHJlc2VudCBvbiBhIHVzZXImIzgyMTc7cyBz eXN0ZW0gZm9yIHRoZSB0aGVtZSB0byB3b3JrPC9zcGFuPi4gSXQgaXMgd29ydGggZW5zdXJp bmcgdGhhdCB1c2VycyBvZiB5b3VyIHRoZW1lIGFyZSBtYWRlIGF3YXJlIG9mIHRoaXMgZGVw ZW5kZW5jeSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBmcnVzdHJhdGlvbjsgcGVyaGFwcyBhZGQg YSBsaW5rIHRvIHRoZSB0aGVtZSYjODIxNztzIGJhc2UsIG1lbnRpb24gdGhlIGRlcGVuZGVu Y3kgaW4gdGhlIEhlbHAgbGluayBhbmQvb3IgaW4gdGhlIHRoZW1lJiM4MjE3O3MgYXJ0aWNs ZSBvbiBUZXh0Z2FyZGVuLiBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBkZWxldGUgYW55IHRo ZW1lIGZyb20gdGhlIGxpc3QgdGhhdCBoYXMgc3VjaCBhIGRlcGVuZGVuY3ksIG90aGVyd2lz ZSB5b3VyIGFkbWluIHNpZGUgd2lsbCBzdG9wIHdvcmtpbmcuPC9wPgoKCTxoMiBpZD0iZXhw b3J0Ij5FeHBvcnQgYSB0aGVtZTwvaDI+CgoJPHA+SWYgeW91IHdpc2ggdG8gYmFjayB1cCBh IHRoZW1lIG9yIHNoYXJlIGl0IHdpdGggb3RoZXJzLCBjbGljayA8c3Ryb25nPkV4cG9ydDwv c3Ryb25nPi4gQSBib3ggd2lsbCBzbGlkZSBkb3duIG9mZmVyaW5nIHlvdSBhIGNob2ljZSBv ZiBjb21wcmVzc2lvbiBmb3JtYXRzOyB0aGUgZGVmYXVsdCBpcyB0aGUgZm9ybWF0IHlvdSBj aG9zZSBmcm9tIHRoZSA8YSBocmVmPSIjc2V0dXAiPlByZWZlcmVuY2VzPC9hPiBwYWdlLiBD bGljayA8ZW0+W0dvXTwvZW0+IHRvIGV4cG9ydCB0aGUgdGhlbWUgYW5kIHNhdmUgaXQgdG8g eW91ciBjb21wdXRlci4gQWxsIHJlbGF0ZWQgZmlsZXMgaW4gdGhlIHRoZW1lIHdpbGwgYmUg cGFja2FnZWQgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBkb3dubG9hZCBmaWxlIGZvciBjb252 ZW5pZW5jZS48L3A+CgoJPHA+VGhlIGZpbGVuYW1lIGlzIGdvdmVybmVkIGJ5IHRoZSA8ZW0+ RmlsZW5hbWUgZm9ybWF0PC9lbT4gcHJlZmVyZW5jZS48L3A+CgoJPGgyIGlkPSJkZWxldGUi PkRlbGV0ZSBhIHRoZW1lPC9oMj4KCgk8cD5IaXQgdGhpcyAoYW5kIGNvbmZpcm0geW91IGFy ZSBzdXJlKSB0byByZW1vdmUgdGhlIGVudGlyZSB0aGVtZSBmb2xkZXIgYW5kIGNvbnRlbnRz IGZyb20gdGhlIGZpbGUgc3lzdGVtLiA8c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5UaGlzIGlz IG5vdCB1bmRvYWJsZSwgc28gYmUgY2FyZWZ1bDwvc3Bhbj4uPC9wPgoKCTxoMiBpZD0iZWRp dF90aGVtZSI+RWRpdCBhIHRoZW1lPC9oMj4KCgk8cD5BIHRoZW1lIGlzIGEgY29sbGVjdGlv biBvZiBmaWxlcy4gVGhlIGZpbGVzIGFsbCByZXNpZGUgaW4gdGhlaXIgb3duIHNlbGYtY29u dGFpbmVkIGRpcmVjdG9yeSB1bmRlciA8Y29kZT50ZXh0cGF0dGVybi90aGVtZTwvY29kZT4u IFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaXMgdGhlIG5hbWUgb2YgeW91ciB0aGVtZSwg aGVuY2UgdGhlIHJlYXNvbiBpdCBjYW5ub3QgY29udGFpbiBhbnkgb2JzY3VyZSBjaGFyYWN0 ZXJzIHRoYXQgd291bGQgYmUgaW52YWxpZCBpbiB0aGUgZmlsZXN5c3RlbSBvciA8c3BhbiBj bGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB2YXJpYWJsZXMuPC9wPgoKCTxwPldoZW4geW91IGNs aWNrICYjODIxNjtFZGl0JiM4MjE3OyB5b3Ugd2lsbCBiZSB0YWtlbiB0byBhIHNjcmVlbiB0 aGF0IGFsbG93cyB5b3UgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSB0aGVtZS4gVGhlIEVkaXQg c2NyZWVuIGlzIGJyb2tlbiBpbnRvIHRocmVlIHZlcnRpY2FsIHBhcnRzLCBhcyBmb2xsb3dz OjwvcD4KCgk8aDMgaWQ9ImVkaXRfaW1nIj5JbWFnZSBoYW5kbGluZzwvaDM+CgoJPHA+RWFj aCB0aGVtZSBjYW4gY29udGFpbiBhbiBvcHRpb25hbCB0aHVtYm5haWwuIFRoaXMgaXMgYW4g aW1hZ2Ugb2YgMjYwJiMyMTU7MTUwcHggaW4gc2l6ZSwgY2FsbGVkIDxjb2RlPnNjcmVlbnNo b3QucG5nPC9jb2RlPiAob3IgPGNvZGU+LmpwZzwvY29kZT4sIDxjb2RlPi5naWY8L2NvZGU+ LCBldGMpIGluIHlvdXIgdGhlbWUgZGlyZWN0b3J5LiBOb3RlIGl0IHdpbGwgYmUgc3F1YXNo ZWQgLyBzdHJldGNoZWQgdG8gZml0IHlvdXIgdGh1bWJuYWlsIGRpbWVuc2lvbnMgc2V0IGlu IHRoZSBwbHVnaW4gcHJlZnMuPC9wPgoKCTxwPk90aGVyIGltYWdlcyBmb3IgdXNlIGluIDxz cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHJ1bGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRv IGEgdGhlbWUuIEJyb3dzZSBmb3IgYW4gaW1hZ2UgYW5kIHNlbGVjdCBpdCwgdGhlbiBjbGlj ayA8c3Ryb25nPlVwbG9hZDwvc3Ryb25nPiB0byBhZGQgaXQgdG8gdGhlIHRoZW1lLiBZb3Ug Y2FuIGN1cnJlbnRseSBvbmx5IHVwbG9hZCBvbmUgaW1hZ2UgYXQgYSB0aW1lLCB0aG91Z2gg eW91IGNhbiBkZWxldGUgb25lIG9yIG1vcmUgYXQgb25jZSBieSBTaGlmdC9DdHJsIGNsaWNr aW5nIHRoZSBvbmVzIHlvdSB3aXNoIHRvIHJlbW92ZSBhbmQgaGl0dGluZyB0aGUgJiM4MjE2 O3gmIzgyMTc7IGJ1dHRvbi4gPHNwYW4gY2xhc3M9ImltcG9ydGFudCI+V2FybmluZzogZmls ZXMgd2lsbCBiZSBkZWxldGVkIGltbWVkaWF0ZWx5LCB3aXRob3V0IGNvbmZpcm1hdGlvbi48 L3NwYW4+PC9wPgoKCTxwPlRoZSBiZXN0IHdheSB0byByZWZlciB0byBpbWFnZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgaW4gc3R5bGVzaGVldHMgaXMgd2l0aCBhIHJlbGF0 aXZlIHBhdGg6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+ Lm15U3R5bGUgewogICBiYWNrZ3JvdW5kOiB1cmwobXktaW1hZ2UuZ2lmKTsKfQo8L2NvZGU+ PC9wcmU+CgoJPGgzIGlkPSJlZGl0X2NvbnRlbnQiPkNvbnRlbnQ8L2gzPgoKCTxwPlRoZSBj ZW50cmFsIHBhbmUgaXMgd2hlcmUgeW91IGVkaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxl cyBpbiB5b3VyIHRoZW1lLiBUaGUgc21hbGwgZWRpdCBib3ggYXQgdGhlIHRvcCBpcyB0aGUg ZmlsZW5hbWUgYW5kIHRoZSBsYXJnZSB0ZXh0IGFyZWEgaXMgaXRzIGNvbnRlbnQuIENsaWNr IDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiB0byBjb21taXQgY2hhbmdlcy4gWW91IG1heSBmcmVl bHkgcmVuYW1lIGFueSBmaWxlIHlvdSBhcmUgZWRpdGluZy48L3A+CgoJPHAgY2xhc3M9Imlt cG9ydGFudCI+SW1wb3J0YW50OiBpZiB5b3Ugc2VsZWN0IGEgZmlsZSwgZWRpdCBpdCwgcmVu YW1lIGl0LCBhbmQgY2xpY2sgPHN0cm9uZz5TYXZlPC9zdHJvbmc+IHlvdSB3aWxsIG92ZXJ3 cml0ZSB3aGF0ZXZlciB3YXMgaW4gdGhlIHByZXZpb3VzIGZpbGUgJiM4MjEyOyBldmVuIGlm IHlvdSBlbXB0eSB0aGUgY29udGVudHMgb2YgdGhlIHRleHRhcmVhIGluIGFuIGVmZm9ydCB0 byBtYWtlIGEgJiM4MjIwO25ldyYjODIyMTsgb25lLiBJZiB5b3Ugd2lzaCB0byBjcmVhdGUg YSBuZXcgZmlsZSwgaXQgaXMgc2FmZXIgdG8gY2xpY2sgdGhlIDxzdHJvbmc+TmV3IGZpbGU8 L3N0cm9uZz4gYnV0dG9uIGluIHRoZSByaWdodCBoYW5kIGNvbHVtbiB0byBlbnN1cmUgeW91 IGFyZSBub3QgZWRpdGluZyBhbiBleGlzdGluZyBmaWxlIGJ5IG1pc3Rha2UuPC9wPgoKCTxw Pkl0IGlzIGFsc28gd29ydGggbm90aW5nIHRoYXQgZmlsZSBwZXJtaXNzaW9ucyB2YXJ5IGZy b20gaG9zdCB0byBob3N0LiBJZiB5b3UgdHJ5IGFuZCBzYXZlIGEgdGhlbWUgZmlsZSBhbmQg cmVjZWl2ZSBhIHl1a2t5IHdhcm5pbmcgbWVzc2FnZSBhYm91dCBub3QgYmVpbmcgYWJsZSB0 byB3cml0ZSB0aGUgZmlsZSwgdHJ5IGluY3JlYXNpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRo ZSB0aGVtZSBkaXJlY3RvcnkgYW5kIGFsbCBmaWxlcyBiZW5lYXRoIGl0LjwvcD4KCgk8cD5U aGUgdGhlbWUgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IHdpdGggPGNvZGU+NjQ0PC9jb2RlPiBwZXJtaXNzaW9ucyB3aGljaCBzaG91 bGQgYmUgZmluZSBmb3IgYSBzdGFuZGFyZCBob3N0LiBTb21lIHNoYXJlZCBob3N0aW5nIGNv bXBhbmllcyAmIzgyMTI7IGFuZCB0aGVzZSBhcmUgdXN1YWxseSB0aGUgb25lcyB0aGF0IHRl bGwgeW91IHRvIHNldCB5b3VyIDxjb2RlPmZpbGVzPC9jb2RlPiBhbmQgPGNvZGU+aW1hZ2Vz PC9jb2RlPiBkaXJlY3RvcmllcyB0byA3NzcgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIHdyaXRh YmxlIGJ5IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ICYjODIxMjsgcnVuIEFwYWNo ZS9QSFAgaW4gYSBkaWZmZXJlbnQgd2F5IHdoaWNoIG1pZ2h0IHJlcXVpcmUgaGlnaGVyIHBl cm1pc3Npb25zIGluIG9yZGVyIHRvIHdyaXRlIHRvIHRoZSB0aGVtZSBkaXJlY3RvcnkuIFRo aXMgaXMgdW5mb3J0dW5hdGVseSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgcGx1Z2luIHNv IHlvdSB3aWxsIGhhdmUgdG8gZXhwZXJpbWVudCBpZiBpdCBjYXVzZXMgeW91IHByb2JsZW1z LjwvcD4KCgk8aDM+RmlsZSBoYW5kbGluZzwvaDM+CgoJPHA+VGhpcyBjb2x1bW4gYmVnaW5z IHdpdGggYSBzZWxlY3QgbGlzdCBvZiBhbGwgaW5zdGFsbGVkIHRoZW1lczsgdGhlIGN1cnJl bnQgdGhlbWUgc2VsZWN0ZWQuIENoYW5naW5nIHRoZSBpdGVtIGhlcmUgd2lsbCBpbW1lZGlh dGVseSBhbGxvdyB5b3UgdG8gZWRpdCBhbm90aGVyIHRoZW1lLiBUaGlzIGlzIHZlcnkgdXNl ZnVsIGlmIHlvdSBhcmUgY29weWluZyBhbmQgcGFzdGluZyBmaWxlcyBmcm9tIG9uZSB0aGVt ZSB0byBhbm90aGVyIGFuZCBzYXZlcyB5b3UgaGF2aW5nIHRvIGdvIGJhY2sgdG8gdGhlIHRo ZW1lIGxpc3QgZmlyc3QuPC9wPgoKCTxwPkJlbmVhdGggdGhhdCBhcmUgdHdvIGJ1dHRvbnM6 PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk5ldyBmaWxlPC9zcGFuPiA6 IENyZWF0ZSBhIG5ldywgZW1wdHkgZmlsZSBpbiB5b3VyIHRoZW1lIGRpcmVjdG9yeS4gTm90 aGluZyBpcyBhY3R1YWxseSBjcmVhdGVkIHVudGlsIHlvdSBoaXQgPHN0cm9uZz5TYXZlPC9z dHJvbmc+IGJ1dCB1c2luZyB0aGlzIGJ1dHRvbiBlbnN1cmVzIHlvdSBiZWdpbiB3aXRoIGEg Y2xlYW4gc2xhdGUgYW5kIGRvbiYjODIxNzt0IGFjY2lkZW50YWxseSBvdmVyd3JpdGUgdGhl IHByZXZpb3VzIGZpbGUgeW91IHdlcmUgZWRpdGluZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5UaGVtZSBsaXN0PC9zcGFuPiA6IEEgc2hvcnRjdXQgYmFjayB0byB0aGUgbWFp biB0aGVtZSBsaXN0IChlcXVpdmFsZW50IHRvIGNsaWNraW5nIHRoZSA8ZW0+QWRtaW4gdGhl bWVzPC9lbT4gdGFiKTwvbGk+Cgk8L3VsPgoKCTxwPkJlbG93IHRob3NlIGJ1dHRvbnMgYXJl IHVwIHRvIGZvdXIgc2VjdGlvbnMgY29udGFpbmluZyBhbGwgdGhlIChub24taW1hZ2UpIGZp bGVzIHRoYXQgbWFrZSB1cCB5b3VyIHRoZW1lLiBDbGljayBhIGZpbGVuYW1lIHRvIGxvYWQg aXQgaW50byB0aGUgY2VudHJhbCB0ZXh0IGFyZWEgZm9yIGVkaXRpbmcuPC9wPgoKCTxoNCBp ZD0iZWRpdF9jc3MiPlN0eWxlc2hlZXRzPC9oND4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5G aWxlcyBjYW4gYmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+ TVVTVDwvc3Bhbj4gZW5kIGluIDxjb2RlPi5jc3M8L2NvZGU+PC9wPgoKCTxwPlRoZSBtZWF0 IGFuZCBwb3RhdG9lcyBvZiB5b3VyIHRoZW1lLiBBZGQgYXMgbWFueSBzaGVldHMgYXMgeW91 IGxpa2UgYW5kIGxvYWQgdGhlbSBmcm9tIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwv c3Bhbj4gZmlsZShzKS48L3A+CgoJPGg0IGlkPSJlZGl0X2NzcyI+U3R5bGVwbGF0ZXM8L2g0 PgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPkZpbGVzIGNhbiBiZSBhbnkgdmFsaWQgZmlsZW5h bWUgYnV0IDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4gPGNvZGU+LnNz YzwvY29kZT48L3A+CgoJPHA+QSBzcGVjaWFsIHZlcnNpb24gb2YgYSBzdHlsZXNoZWV0IHRo YXQgYWxsb3dzIHlvdSB0byBkZWZpbmUgY29uc3RhbnRzIHRocm91Z2hvdXQgeW91ciBzaGVl dC4gV3JpdGUgeW91ciBzdHlsZXNoZWV0IGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHlv dSB3b3VsZCBub3JtYWxseSBidXQgd2hlcmUgeW91IGZpbmQgeW91cnNlbGYsIGZvciBleGFt cGxlLCB1c2luZyB0aGUgc2FtZSBjb2xvciB2YWx1ZSByZXBlYXRlZGx5IG9yIHRoZSBzYW1l IHJ1bGVzIGJsb2NrLCB5b3UgY2FuIHNhdmUgeW91cnNlbGYgdHlwaW5nIGJ5IHVzaW5nIGNv bnN0YW50czo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5A YnJhbmRpbmc6ICMxMjM0NTY7CiNoZWFkZXIgewogIGNvbG9yOiBAYnJhbmRpbmc7Cn0KaDIg ewogIGNvbG9yOiBAYnJhbmRpbmc7Cn0KPC9jb2RlPjwvcHJlPgoKCTxwPllvdSBjYW4gYWxz byBzcGVjaWZ5IHdob2xlIHJ1bGUgYmxvY2tzIGxpa2UgdGhpcyAoPGVtPk5vdGUgdGhlIGNv bG9uIGFmdGVyIHRoZSBibG9jayBuYW1lPC9lbT4pIDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9j ayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5AbXlfYmxvY2s6IHsKICBtYXJnaW46MCAyMHB4Owog IGJvcmRlcjozcHggc29saWQgIzk5OTsKICBmb250LXNpemU6MTIwJTsKfQojaGVhZGVyIHsK ICBjb2xvcjogQGJyYW5kaW5nOwogIHBvc2l0aW9uOnJlbGF0aXZlOwogIEBteV9ibG9jazsK fQpoMiB7CiAgQG15X2Jsb2NrOwp9CjwvY29kZT48L3ByZT4KCgk8cD5JZiB5b3UgcHV0IGFs bCB5b3VyIGNvbnN0YW50cyBhdCB0aGUgdG9wIG9mIHRoZSA8Y29kZT4uc3NjPC9jb2RlPiBm aWxlIHRoZXkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGdlbmVyYXRlZCBjc3MgZmlsZS48 L3A+CgoJPHA+V2hlbiB5b3Ugc2F2ZSBhIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUsIGEgY29y cmVzcG9uZGluZy1uYW1lZCA8Y29kZT4uY3NzPC9jb2RlPiBmaWxlIHdpbGwgYWxzbyBiZSBj cmVhdGVkLiBUaGUgdHdvIHdpbGwgYmUga2VwdCBpbiBzeW5jIGFzIGZhciBhcyBwcmFjdGlj YWJsZSAoZXZlbiBpZiB5b3UgcmVuYW1lIHRoZSBvcmlnaW5hbCBmaWxlKS4gV2hlbiBpdCBj b21lcyB0byBkZWxldGlvbiB0aG91Z2gsIHRoZXkgYXJlIHRyZWF0ZWQgc2VwYXJhdGVseS4g VGhpcyBhbGxvd3MgeW91IHRvIGVpdGhlciBrZWVwIHRoZSA8Y29kZT4uc3NjPC9jb2RlPiBm aWxlIGluIHRoZSBkaXN0cmlidXRpb24gYXJjaGl2ZSBvciByZW1vdmUgaXQgcHJpb3IgdG8g ZXhwb3J0LjwvcD4KCgk8aDQgaWQ9ImVkaXRfanMiPkphdmFzY3JpcHQ8L2g0PgoKCTxwIGNs YXNzPSJpbXBvcnRhbnQiPkZpbGVzIGNhbiBiZSBhbnkgdmFsaWQgZmlsZW5hbWUgYnV0IDxz cGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4gPGNvZGU+LmpzPC9jb2RlPjwv cD4KCgk8cD5BbnkgdHJpY2tlcnkgeW91IG1heSB3aXNoIHRvIGVtcGxveSBpbiB5b3VyIHRo ZW1lIGNhbiBiZSB3cml0dGVuIGluIHRoZXNlIGZpbGVzLiBSZW1lbWJlciB0aGF0IGpRdWVy eSBpcyBsb2FkZWQgYnkgZGVmYXVsdCBvbiB0aGUgYWRtaW4gc2lkZSBzbyB5b3UgY2FuIHBs YXkgd2l0aCB0aGF0LjwvcD4KCgk8aDQgaWQ9ImVkaXRfcGhwIj48c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPjwvaDQ+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+T25lIGZpbGUgPHN0 cm9uZz5tdXN0PC9zdHJvbmc+IGJlIG5hbWVkIGV4YWN0bHkgdGhlIHNhbWUgYXMgeW91ciB0 aGVtZSwgaS5lLiA8Y29kZT5zbWRfQmx1ZU1lYW5pZS5waHA8L2NvZGU+LiBBbnkgb3RoZXIg ZmlsZXMgbXVzdCBlbmQgaW4gPGNvZGU+LnBocDwvY29kZT48L3A+CgoJPHA+Q29uc3VsdCB0 aGUgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRs ZT1DcmVhdGluZ19hbl9BZG1pbl9TaWRlX1RoZW1lIj5BZG1pbiBTaWRlIHRoZW1lIGd1aWRl PC9hPiBvbiBUZXh0Ym9vayBmb3IgdGhlIHJ1bGVzIG9uIG1ha2luZyB0aGVtZXMuIE5vdGUg dGhhdCBjb3JydXB0IHRoZW1lcyBhcmUgZGV0ZWN0ZWQgdG8gdGhlIGJlc3Qgb2YgdGhlIHBs dWdpbiYjODIxNztzIGFiaWxpdHkgYW5kIHlvdSBtYXkgbm90IGV4cG9ydCwgYmFzZSBvciBz d2l0Y2ggdG8gYW55IHRoZW1lIHRoYXQgaXMgYnJva2VuLjwvcD4KCgk8cD5JZiB5b3UgcmVu YW1lIHRoZSB0aGVtZSYjODIxNztzIGNvcmUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bh bj4gZmlsZSAoaS5lLiB0aGUgb25lIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdGhlbWUg Zm9sZGVyIGl0c2VsZikgdGhlIHBsdWdpbiB3aWxsIGF0dGVtcHQgdG8gcmVuYW1lIHRoZSBk aXJlY3RvcnkgYXMgd2VsbDsgZXNzZW50aWFsbHkgcmVuYW1pbmcgdGhlIHRoZW1lLiBUaGlz IHNob3VsZCBwcmV2ZW50IGEgdGhlbWUgZnJvbSBiZWNvbWluZyB1bmVkaXRhYmxlLCBidXQg aXQgaXMgdXAgdG8geW91IHRvIGtlZXAgdGhlIGNsYXNzIG5hbWUgaW4gc3luYyB3aXRoIHRo ZSBmaWxlIG5hbWUuIElmIGF0IGFueSB0aW1lIHlvdSBnbyBiYWNrIHRvIHRoZSB0aGVtZSBs aXN0L2dyaWQgYW5kIGZpbmQgYSB0aGVtZSBleGlzdHMgYnV0IGhhcyBubyBpbmZvcm1hdGlv biBhc3NvY2lhdGVkIHdpdGggaXQsIGNoYW5jZXMgYXJlIGl0JiM4MjE3O3MgYmVjYXVzZSB0 aGUgY2xhc3MgbmFtZSBkb2VzbiYjODIxNzt0IG1hdGNoIHRoZSB0aGVtZSYjODIxNztzIGRp cmVjdG9yeSBuYW1lLiBKdXN0IGhpdCBbRWRpdF0gYW5kIGFsdGVyIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIHRvIGJyaW5nIGV2ZXJ5dGhpbmcgYmFjayBvbiB0 cmFjay48L3A+CgoJPGg0IGlkPSJlZGl0X290aGVyIj5PdGhlcnM8L2g0PgoKCTxwPkFueSBm aWxlcyB0aGF0IGFyZSBub3Qgb2YgdGhlIGFib3ZlIHRocmVlIHR5cGVzIChhbmQgYXJlIG5v dCBpbWFnZXMpIGFwcGVhciBoZXJlLiBZb3Ugd2lsbCBwcm9iYWJseSBuZXZlciBzZWUgdGhp cyBzZWN0aW9uLiBJZiB5b3UgZG8gdHJ5IHRvIGNyZWF0ZSBhIGZpbGUgdGhhdCBpcyBub3Qg b2YgdGhlIGFib3ZlIHRocmVlIHR5cGVzLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQuIFlv dSBtdXN0IGhpdCA8ZW0+U2F2ZTwvZW0+IGFnYWluIHRvIGNvbmZpcm0geW91IHJlYWxseSB3 aXNoIHRvIGNyZWF0ZSB0aGUgZmlsZS48L3A+CgoJPGgzIGlkPSJhYm91dCI+TWFuaWZlc3Q8 L2gzPgoKCTxwPkluIHlvdXIgbWFpbiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBm aWxlIGlzIGEgZnVuY3Rpb24gY2FsbGVkIDxjb2RlPm1hbmlmZXN0KCk8L2NvZGU+IHdoaWNo IGNvbnRhaW5zIGluZm8gYWJvdXQgeW91IGFuZCB5b3VyIHRoZW1lLiBFZGl0IHRoZSB2YWx1 ZXMgaGVyZSB0byBzdGFtcCB5b3VyIG1hcmsgb24gdGhlIHRoZW1lLiBOb3RlIHRoYXQgaWYg eW91ciBkZXNjcmlwdGlvbiBjb250YWlucyBhcG9zdHJvcGhlcyB0aGV5IG11c3QgYmUgPGVt PmVzY2FwZWQ8L2VtPiBieSBwcmVjZWRpbmcgdGhlbSB3aXRoIGEgc2luZ2xlIGJhY2tzbGFz aCA8Y29kZT5cPC9jb2RlPi4gZS5nLjwvcD4KCjxwcmU+PGNvZGU+JiMzOTtkZXNjcmlwdGlv biYjMzk7ID0mZ3Q7ICYjMzk7RG9uXCYjMzk7dCBmZWFyIHRoZSByZWFwZXIhJiMzOTssCjwv Y29kZT48L3ByZT4KCgk8aDIgaWQ9InBlcnVzZXIiPlBlci11c2VyIHRoZW1lIHNlbGVjdGlv bjwvaDI+CgoJPHA+SWYgYW4gYWRtaW5pc3RyYXRvciBjaG9vc2VzIHRvIGFsbG93IHBlci11 c2VyIHRoZW1lcywgYSBuZXcgdGFiIGFwcGVhcnMgdW5kZXIgdGhlIEFkbWluIHRhYiBvZiBh bGwgdXNlcnMgKGV4Y2VwdCBhZG1pbmlzdHJhdG9ycykuIFRoaXMgc2ltcGx5IGRpc3BsYXlz IGFsbCBhdmFpbGFibGUgdGhlbWVzICYjODIxMjsgb25lcyB0aGF0IHRoZSBhZG1pbmlzdHJh dG9yIGhhcyBleHBsaWNpdGx5IGFsbG93ZWQuPC9wPgoKCTxwPkNsaWNraW5nIGEgdGhlbWUg bmFtZSBvciB0aHVtYm5haWwgd2lsbCBpbW1lZGlhdGVseSBzd2l0Y2ggdG8gdGhhdCB0aGVt ZSB1bnRpbCB0aGUgdXNlciBjaG9vc2VzIGFub3RoZXIgb3IgdGhlIGFkbWluaXN0cmF0b3Ig Y2hhbmdlcyB0aGVtZSBzeXN0ZW0uPC9wPgoKCTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vs b2c8L2gyPgoKCTx1bD4KCQk8bGk+MTIgSnVuIDA5IHwgMC4xIHwgSW5pdGlhbCBwdWJsaWMg YmV0YTwvbGk+CgkJPGxpPjAzIFNlcCAwOSB8IDAuMTEgfCBJbXByb3ZlZCBUZXh0Z2FyZGVu IHRoZW1lIGZlZWQgYW5kIGxpbmtzIDsgaW1wcm92ZWQgZmlsZSBzdXBwb3J0IChib3RoIHRo YW5rcyB0aGVib21ic2l0ZSkgOyBtYWRlIGdsb2JhbCB0aGVtZSBtb3JlIG9idmlvdXMgOyBh bHRlcmVkIHByZWZzIHRhYiBhIGJpdCA7IGFkZGVkIDxjb2RlPi5zc2M8L2NvZGU+IHN1cHBv cnQgOyBpZ25vcmVkIC5zdm4gc3ViZGlycyAoYWxsIHRoYW5rcyBwaWVtYW4pIDsgaW1wcm92 ZWQgd2FybmluZyBtZXNzYWdlcyA7IG1pc2MgZml4ZXMgYW5kIGhvdXNla2VlcGluZzwvbGk+ CgkJPGxpPjAyIE5vdiAwOSB8IDAuMTIgfCBSZWR1Y2VkIHRoZW1lIGZlZWQgY2x1dHRlciBp biB0aGUgcHJlZnMgdGFibGU8L2xpPgoJCTxsaT4wNCBOb3YgMDkgfCAwLjEzIHwgUmVtb3Zl ZCBlcmVnX3JlcGxhY2UgdG8gY29uZm9ybSB3aXRoIFBIUDUuMysgKHRoYW5rcyB0aGVib21i c2l0ZSkgOyBjaGFuZ2VkICYjODIxNjtnbG9iYWwmIzgyMTc7IHRvICYjODIxNjtkZWZhdWx0 JiM4MjE3OyA7IGZpeGVkIHJvZ3VlIHVudHJhbnNsYXRlZCBzdHJpbmc8L2xpPgoJCTxsaT4w OSBOb3YgMDkgfCAwLjE0IHwgTW92ZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5z IGluIGxpbmUgd2l0aCBUZXh0Z2FyZGVuIGxheW91dCBhbHRlcmF0aW9ucyAodGhhbmtzIGZv ciB0aGUgaGVhZHN1cCB0aGVib21ic2l0ZSkgOyBtYWRlIGZlZWRzIG1vcmUgcm9idXN0IGlu IHRoZSBldmVudCBUZXh0Z2FyZGVuIGlzIGRvd24gLyB1bmRlciBtYWludGVuYW5jZSAodGhh bmtzIG1sYXJpbm8pPC9saT4KCQk8bGk+MDkgRmViIDEwIHwgMC4yIHwgTmF0aXZlIHN1cHBv cnQgZm9yIHppcCBpbXBvcnRpbmcgYW5kIGV4cG9ydGluZyAoYWxtb3N0KSBpcnJlc3BlY3Rp dmUgb2YgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBlbnZpcm9ubWVudCA7 IHppcCBpcyBub3cgdGhlIGRlZmF1bHQgc3lzdGVtIDsgYmV0dGVyIG5vdGlmaWNhdGlvbiBv ZiBzdXBwb3J0ZWQgY29tcHJlc3Npb24gdHlwZXMgYW5kIG1vcmUgcm9idXN0IHJlamVjdGlv biBpZiBzb21ldGhpbmcgaXMgbWlzc2luZzwvbGk+CgkJPGxpPjEwIEZlYiAxMCB8IDAuMjEg fCBGaXhlZCBiemlwMiB3YXJuaW5nICh0aGFua3MgdGhlYm9tYnNpdGUpIDsgZml4ZWQgcmVj dXJzaXZlIG1rZGlyIHByb2JsZW0gd2l0aCBiemlwMiBmaWxlcyAodGhhbmtzIDxzcGFuIGNs YXNzPSJjYXBzIj5QSFA8L3NwYW4+IG1hbnVhbCBjb21tZW50cykgOyBmaXhlZCByb2d1ZSB0 ZW1wIGZpbGUgbGVmdCBiZWhpbmQgd2l0aCB6aXAgaW1wb3J0PC9saT4KCQk8bGk+MTUgRmVi IDEwIHwgMC4yMiB8IFdoZW4gcmVuYW1pbmcgdGhlIGNvcmUgdGhlbWUgPHNwYW4gY2xhc3M9 ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSwgYXV0b21hdGljYWxseSByZW5hbWUgZGlyZWN0b3J5 IHRvbyAodGhhbmtzIGZsb29kZmlzaCk8L2xpPgoJCTxsaT4yOCBGZWIgMTAgfCAwLjIzIHwg UnVkaW1lbnRhcnkgdmFsaWRhdGlvbiBvZiB6aXAgZmlsZSBjb250ZW50cyAodGhhbmtzIFR1 dHNfYW5kX1RpcHBzKTsgZml4ZWQgZXhwb3J0IG5vdGlmaWNhdGlvbjwvbGk+CgkJPGxpPjA2 IEF1ZyAxMCB8IDAuMjQgfCBGaXhlZCA8Y29kZT5mc29ja29wZW4oKTwvY29kZT4gYW5kIHVu ZGVmaW5lZCBpbmRleCB3YXJuaW5ncyBpZiBub3QgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5l dCAvIHByZWZzIG5vdCBpbnN0YWxsZWQ8L2xpPgoJCTxsaT4wMSBOb3YgMTAgfCAwLjI1IHwg QmV0dGVyIHRoZW1lIGludGVncmF0aW9uIChjb2xvdXJzLCBldGMpIDsgZml4ZWQgZHVwbGlj YXRlIHBhZ2UgcmVuZGVycyBvbiBlZGl0IHNjcmVlbiBhbmQgYWRkZWQgZmlsZW5hbWUgZm9y bWF0IG9wdGlvbiAoYm90aCB0aGFua3MgbWF2ZXJpY2spPC9saT4KCQk8bGk+MjEgRmViIDEx IHwgMC4yNiB8IEZpeGVkIGltcG9ydCBidWcgaWYgbW9yZSB0aGFuIG9uZSBkb3QgaW4gZmls ZW5hbWUgKHRoYW5rcyBwaGlsd2FyZWhhbSk8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImNyZWRp dHMiPkNyZWRpdHM8L2gyPgoKCTxwPlRoaXMgcGx1Z2luIHdvdWxkIG5vdCBoYXZlIGV4aXN0 ZWQgd2l0aG91dCB0aGUgZGVkaWNhdGlvbiwgaWRlYXMgYW5kIGdlbml1cyBvZiB0aGUgVGV4 dHBhdHRlcm4gZGV2ZWxvcG1lbnQgdGVhbSwgZXNwZWNpYWxseSBSb2JlcnQgV2V0emxtYXly IGZvciB0aGUgdGhlbWUgc3VwcG9ydC4gUGx1cyBvZiBjb3Vyc2UgdGhlIGFybXkgb2YgYmV0 YSB0ZXN0ZXJzLCBpZGVhcyBoYW1zdGVycyBhbmQgdGlyZWxlc3MgdGhlbWUgYWR2b2NhdGVz LCBtb3N0IG5vdGFibHkgU3R1YXJ0IEJ1dGNoZXIsIERhbGUgQ2hhcG1hbiwgRGF2ZSBEZVNh bmRybywgYW5kIE1pa2UgRGVubmlzLjwvcD4KCgk8cD5JIGFtIGFsc28gaW5kZWJ0ZWQgdG8g dGhlIGxpYnJhcmllcyBob3N0ZWQgYXQgPGEgaHJlZj0iaHR0cDovL3BocGNsYXNzZXMub3Jn LyI+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gQ2xhc3NlczwvYT4gdGhhdCBlbmFi bGVkIG5hdGl2ZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBvZiB2YXJpb3VzIHR5 cGVzLiBUaGUgaGFyZCB3b3JrIG9mIERldmluIERvdWNldHRlIGFuZCBBbGV4YW5kcmUgVGVk ZXNjaGkgcmVhbGx5IGFkZGVkIHRoZSBpY2luZyBvbiB0aGUgY2FrZSBmb3IgdGhpcyBwbHVn aW4uPC9wPgoKCTxwPkt1ZG9zIGFuZCB0aGFua3MgdG8geW91IGFsbC48L3A+Cgo8L2Rpdj4K PCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2Nz cyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZv bnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVy LCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9yOiMzMzM7IH0K I3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHgg ZG90dGVkICM5OTk7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFk ZGluZzoxMHB4OyB9CiNzbWRfaGVscCBoMSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1z ZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsg Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250 OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgZm9udDogYm9s ZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46 IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1 bmRlcmxpbmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMt c2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJh bnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9s ZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90 dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNl bnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRo IHsgYm9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDsgfQojc21kX2hlbHAg dWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsg Y29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsg fQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAq KiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJjOGNmYjA2OWZk NTcwODZmZjMxOTAyYmQyOTJlYzZhOCI7fQ==