# Name: smd_admin_themes v0.27 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjI3IjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czoxMTUwMzI6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglnbG9iYWwg 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 X3RoJyA9PiAnMTUwJywNCgkJCSdzbWRfYXRfZmlsZV9wYXRoJyA9PiB0eHBhdGgsDQoJCQkn c21kX2F0X2ZpbGVuYW1lX2Zvcm1hdCcgPT4gJ3t0aGVtZX0nLA0KCQkJJ3NtZF9hdF9sYXlv dXQnID0+ICcxJywNCgkJCSdzbWRfYXRfc3lzdGVtJyA9PiAnMCcsDQoJCQknc21kX2F0X2ds b2JhbF9za2luJyA9PiAnJywNCgkJCSdzbWRfYXRfZ3JvdXBfbGlzdCcgPT4gJycsDQoJCQkn c21kX2F0X3VzZXJfbGlzdCcgPT4gJycsDQoJCSksDQoJCWFycmF5KA0KCQkJJ3NtZF9hdF9u b3RfdXNlZF9hbnlfbW9yZScgPT4gJycsDQoJCSkNCgkpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdCgkZXZlbnQsICRzdGVwKSB7DQoJaWYo ISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX2F0X2Nsb25lJywN CgkJCSdzbWRfYXRfZGVsZXRlJywNCgkJCSdzbWRfYXRfZGVsZXRlX2ltYWdlJywNCgkJCSdz bWRfYXRfZWRpdCcsDQoJCQknc21kX2F0X2V4cG9ydCcsDQoJCQknc21kX2F0X2ltcG9ydCcs DQoJCQknc21kX2F0X25ld2ZpbGUnLA0KCQkJJ3NtZF9hdF9wcmVmc19pbnN0YWxsJywNCgkJ CSdzbWRfYXRfcHJlZnNfcmVtb3ZlJywNCgkJCSdzbWRfYXRfcHJlZnNfdXBkYXRlJywNCgkJ CSdzbWRfYXRfcmVuYW1lJywNCgkJCSdzbWRfYXRfc2F2ZScsDQoJCQknc21kX2F0X3NldHVw JywNCgkJCSdzbWRfYXRfc3dpdGNoJywNCgkJCSdzbWRfYXRfdXBsb2FkX2ltYWdlJywNCgkJ CSdzbWRfYXRfY2hhbmdlX3BhZ2VieScsDQoJCSkpKSB7DQoJCXNtZF9hdF9saXN0KCcnKTsN Cgl9IGVsc2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3dl bGNvbWUoJGV2ZW50LCAkc3RlcCkgew0KCSRtc2cgPSAnJzsNCglzd2l0Y2ggKCRzdGVwKSB7 DQoJCWNhc2UgJ2luc3RhbGxlZCc6DQoJCQlzbWRfYXRfcHJlZnNfaW5zdGFsbCgwKTsNCgkJ CWJyZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJCXNtZF9hdF9wcmVmc19yZW1vdmUoMCk7 DQoJCQlicmVhazsNCgl9DQoJcmV0dXJuICRtc2c7DQp9DQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfbGluaygpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudDsNCglyZXR1cm4gaHJl ZihzbWRfYXRfZ1R4dCgnbWFuYWdlX2xibCcpLCAnP2V2ZW50PScuJHNtZF9hdF9ldmVudCk7 DQp9DQoNCi8vIEEgc3R1YiB0aGF0IGNhbiBiZSBjYWxsZWQgd2l0aG91dCBhICRtZXNzYWdl DQpmdW5jdGlvbiBzbWRfYXRfZGlzcGxheSgpIHsNCgkJc21kX2F0X2xpc3QoJycpOw0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9saXN0KCRt ZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRfYXRfZXZlbnQsICRwcmVmcywgJHNtZF9hdF9w cmVmcywgJHRoZW1lLCAkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X2Z1bGxldiwgJHNtZF9h dF9mZWVkdXJsLCAkc21kX2F0X3RoZW1lX3JlcG8sICRzbWRfYXRfc3R5bGVzOw0KDQoJJGF0 X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KDQoJZXh0cmFjdChncHNhKGFycmF5KCdz dGVwJywgJ3BhZ2UnLCAnY3JpdCcsICdzZWFyY2hfbWV0aG9kJywgJ3NraW4nKSkpOw0KCSRt ZXNzYWdlID0gKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogZ3BzKCdtZXNzYWdlJyk7DQoJJGxh eW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0X3ByZWZz WydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSRzdHlsZXJ1bGUgPSAoJGxheW91dD09MCkgPyAn bGlzdCcgOiAnZ3JpZCc7DQoJJHR3ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3R3J10p ID8gJGF0X3ByZWZzWydzbWRfYXRfdHcnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90 dyddKSArIDEwOw0KCSR0aCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90aCddKSA/ICRh dF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdGgnXSkg KyA4MDsNCgkkc3R5bGVyZXBzID0gYXJyYXkoDQoJCSd7dHd9JyA9PiAkdHcsDQoJCSd7dGh9 JyA9PiAkdGgsDQoJKTsNCgkkaGVscExpbmsgPSAiP2V2ZW50PXBsdWdpbiZzdGVwPXBsdWdp bl9oZWxwJm5hbWU9JHNtZF9hdF9mdWxsZXYjdXNhZ2UiOw0KDQoJJHBhZ2VieSA9IChncHMo J3F0eScpKSA/IGdwcygncXR5JykgOiAoKGNzKCdzbWRfYXRfcGFnZWJ5JykpID8gY3MoJ3Nt ZF9hdF9wYWdlYnknKSA6IDE1KTsNCgkkbWF4X2ZpbGVfc2l6ZSA9IDE1MCAqIDEwMjQ7IC8v IGEgYml0IGFyYml0cmFyeSENCg0KCSRjdXJyX3NraW4gPSAoc21kX2F0X2V4aXN0cygkdGhl bWUtPm5hbWUpKSA/ICR0aGVtZS0+bmFtZSA6ICdjbGFzc2ljJzsNCgkkc2tpbl9saXN0ID0g c21kX2F0X3JlYWRfc2tpbnMoKTsNCgkkY3J1c2hlcnMgPSBzbWRfYXRfY3J1c2hfb3B0aW9u cygpOw0KCSR1bmNydXNoZXJzID0gc21kX2F0X2NydXNoX29wdGlvbnMoJ2ltcG9ydCcpOw0K CSRiYXNlcyA9IGFycmF5KCk7DQoNCgkvLyBHZXQgYSBsaXN0IG9mIGFuY2VzdG9yIHRoZW1l cyAoaS5lLiBkZXBlbmRlbmNpZXMpDQoJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tpbmEp IHsNCgkJJG1hbmlmZXN0ID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luYSk7DQoJCWlmICgk bWFuaWZlc3QpIHsNCgkJCWlmICgkbWFuaWZlc3RbJ2Jhc2VkX29uJ10pIHsNCgkJCQkkYmFz ZXNbXSA9ICRtYW5pZmVzdFsnYmFzZWRfb24nXTsNCgkJCX0NCgkJfQ0KCX0NCgkkYmFzZXMg PSBhcnJheV91bmlxdWUoJGJhc2VzKTsNCg0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ21hbmFn ZV9sYmwnKSwkbWVzc2FnZSk7DQoNCgkvLyBIYW5kbGUgcGFnaW5nDQoJJHRvdGFsID0gY291 bnQoJHNraW5fbGlzdCk7DQoJJGxpbWl0ID0gbWF4KEAkcGFnZWJ5LCAxNSk7DQoJbGlzdCgk cGFnZSwgJG9mZnNldCwgJG51bVBhZ2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxpbWl0LCAkcGFn ZSk7DQoJJHNraW5fbGlzdCA9IGFycmF5X3NsaWNlKCRza2luX2xpc3QsICRvZmZzZXQsICRs aW1pdCk7DQoNCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LA0K CQkicGFnZSIgPT4gJHBhZ2UsDQoJKTsNCg0KCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBl PSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVuY3Rpb24gc21kX2dldGNydXNoKHNraW4pIHsNCglz a2luSGFuZGxlID0gImNydXNoXyIrc2tpbjsNCglqUXVlcnkoJy5zbWRfcG9wdXAnKS5lYWNo KGZ1bmN0aW9uKCkgew0KCQlib3ggPSBqUXVlcnkodGhpcyk7DQoJCWlmIChib3guYXR0cigi aWQiKSA9PSBza2luSGFuZGxlKSB7DQoJCQlpZiAoYm94LmNzcygiZGlzcGxheSIpID09ICJu b25lIikgew0KCQkJCWJveC5zbGlkZURvd24oJ2Zhc3QnKTsNCgkJCX0gZWxzZSB7DQoJCQkJ Ym94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCWJveC5zbGlkZVVw KCdmYXN0Jyk7DQoJCX0NCgl9KTsNCglqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBhJykuY2xp Y2soZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlzKS5hdHRyKCJocmVmIiwgIj9ldmVudD17 JHNtZF9hdF9ldmVudH0mc2tpbj0iK3NraW4rIiZzdGVwPXNtZF9hdF9leHBvcnQmY3J1c2g9 IitqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dFt0eXBlPVwncmFkaW9cJ106Y2hlY2tl ZCcpLnZhbCgpKyImcGFnZT0iK3skcGFnZX0pOw0KCX0pOw0KCXJldHVybiBmYWxzZTsNCn0N Cg0KZnVuY3Rpb24gc21kX2dldHZhbChza2luLCBzdGVwKSB7DQoJc2tpbkhhbmRsZSA9ICJw b3BfIitza2luOw0KCWpRdWVyeSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7DQoJ CWJveCA9IGpRdWVyeSh0aGlzKTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5IYW5k bGUpIHsNCgkJCWlmIChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCQkJYm94 LnNsaWRlRG93bignZmFzdCcpOw0KCQkJCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0 JykuZm9jdXMoKTsNCgkJCX0gZWxzZSB7DQoJCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJ CX0NCgkJfSBlbHNlIHsNCgkJCWJveC5zbGlkZVVwKCdmYXN0Jyk7DQoJCX0NCgl9KTsNCglq UXVlcnkoJyMnK3NraW5IYW5kbGUrJyBhJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCWpRdWVy eSh0aGlzKS5hdHRyKCJocmVmIiwgIj9ldmVudD17JHNtZF9hdF9ldmVudH0mc2tpbj0iKygo c2tpbj09J25ldycpPyAnJyA6IHNraW4pKyImc3RlcD0iK3N0ZXArIiZuZXdfc2tpbj0iK2pR dWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0JykudmFsKCkrIiZwYWdlPSIreyRwYWdlfSk7 DQoJfSk7DQoNCglqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcpLmtleXVwKGZ1bmN0 aW9uICgpIHsNCgkJdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVow LTlfXHg3Zi1ceGZmXS9nLCcnKTsNCgkJd2hpbGUgKHRoaXMudmFsdWUubGVuZ3RoID4gMCAm JiB0aGlzLnZhbHVlLnN1YnN0cmluZygwLDEpLm1hdGNoKC9bMC05XS8pKSB7DQoJCQl0aGlz LnZhbHVlID0gdGhpcy52YWx1ZS5zdWJzdHJpbmcoMSk7DQoJCX0NCgl9KTsNCg0KCXJldHVy biBmYWxzZTsNCn0NCjwvc2NyaXB0Pg0KRU9KUzsNCg0KCS8vIEluamVjdCBzdHlsZXMNCgll Y2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPic7DQoJZWNobyBzdHJ0cigkc21kX2F0X3N0 eWxlc1snY29tbW9uJ10ubi4kc21kX2F0X3N0eWxlc1skc3R5bGVydWxlXS5uLiRzbWRfYXRf c3R5bGVzWydjb250cm9sJ10sICRzdHlsZXJlcHMpOw0KCWVjaG8gJzwvc3R5bGU+JzsNCg0K CS8vIExpc3QgdGhlIGF2YWlsYWJsZSBza2lucw0KCWVjaG8gc3RhcnRUYWJsZSgnc21kX2Nv bnRyb2wnLCcnLCcnLDUpOw0KCWVjaG8gdHIoDQoJCXRkYSh1cGxvYWRfZm9ybShzbWRfYXRf Z1R4dCgnaW5zdGFsbF9za2luJyksICcnLCAnc21kX2F0X2ltcG9ydCcsICRzbWRfYXRfZXZl bnQsICcnLCAkbWF4X2ZpbGVfc2l6ZSkuYnIuJzxkaXYgY2xhc3M9InNtZF9zbWFsbHByaW50 Ij4nLnNtZF9hdF9nVHh0KCdzdXBwb3J0ZWRfaW1wb3J0JywgYXJyYXkoJ3t0eXBlc30nID0+ IGpvaW4oJywgJywgJHVuY3J1c2hlcnMpKSkuJzwvZGl2PicsICcgY29sc3Bhbj0iMiInKQ0K CQkudGRhKGZvcm0oZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3Nl dHVwJyksICdwdWJsaXNoJykuc0lucHV0KCdzbWRfYXRfc2V0dXAnKS5lSW5wdXQoJHNtZF9h dF9ldmVudCkpLCcgY29sc3Bhbj0iNiIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4Iicp DQoJKTsNCgllY2hvIGVuZFRhYmxlKCk7DQoJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBu YW1lPSJsb25nZm9ybSIgYWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOw0KCSRuZXdidG4g PSAnICcuJzxhIGNsYXNzPSJuYXZsaW5rIiBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50 LmEuJ3N0ZXA9c21kX2F0X2Nsb25lJy5hLidza2luPSIgb25jbGljaz0icmV0dXJuIHNtZF9n ZXR2YWwoXCduZXdcJywgXCdzbWRfYXRfY2xvbmVcJyk7Ij4nLnNtZF9hdF9nVHh0KCduZXcn KS4nPC9hPicNCgkJLiAnPGRpdiBpZD0icG9wX25ldyIgY2xhc3M9InNtZF9wb3B1cCBzbWRf aGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCduZXdfc2tpbicpLic8L3NwYW4+PGlucHV0 IHR5cGU9InRleHQiIG5hbWU9InNtZF90ZXh0X25hbWUiIHZhbHVlPSIiIC8+IDxhIGhyZWY9 IiMiPlsnLnNtZF9hdF9nVHh0KCdjb25maXJtJykuJ108L2E+PC9kaXY+JzsNCgkkcmVwb2J0 biA9ICcgJy4nPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9IicuJHNtZF9hdF90aGVtZV9yZXBv LiciPicuc21kX2F0X2dUeHQoJ2ZpbmRfdGhlbWUnKS4nPC9hPic7DQoJJGhkcm93ID0gaGVk KHNtZF9hdF9nVHh0KCdsaXN0X3RpdGxlJykuICcgJy4gc21kX2F0X2dUeHQoJ2hlbHBfbGlu aycsIGFycmF5KCd7bGlua30nID0+ICRoZWxwTGluaykpLCAzKTsNCglpZiAoJGxheW91dD09 IjAiKSB7DQoJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcsJycsJ3NtZF9hdF9saXN0Jyw1KTsN CgkJZWNobyB0cigNCgkJCXRkYSgkaGRyb3cuJHJlcG9idG4uJG5ld2J0biwgJyBjb2xzcGFu PSI3IicpDQoJCSk7DQoJCWVjaG8gdHIoDQoJCQlhc3NIZWFkKA0KCQkJCXNtZF9hdF9nVHh0 KCdza2luX2dibCcpLA0KCQkJCSdhdXRob3InLA0KCQkJCWdUeHQoJ3ZlcnNpb24nKSwNCgkJ CQknZGVzY3JpcHRpb24nLA0KCQkJCXNtZF9hdF9nVHh0KCdhY3Rpb25zJykNCgkJCQkpDQoJ CSk7DQoJfSBlbHNlIHsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2dyaWQiPjxkaXYgY2xh c3M9InNtZF9uZXdyb3ciPicuJGhkcm93LiRyZXBvYnRuLiRuZXdidG4uJzwvZGl2Pic7DQoJ fQ0KCWlmKCBpc19jYWxsYWJsZSgnZnNvY2tvcGVuJykgKQ0KCQkkdHJhbnNwb3J0ID0gJ2Zz b2NrJzsNCgllbHNlaWYoIGlzX2NhbGxhYmxlKCdjdXJsX2luaXQnKSApIHsNCgkJJHRyYW5z cG9ydCA9ICdjdXJsJzsNCgl9IGVsc2Ugew0KCQkkdHJhbnNwb3J0ID0gJyc7DQoJfQ0KDQoJ JGZlZWQgPSAnJzsNCglzd2l0Y2ggKCR0cmFuc3BvcnQpIHsNCgkJY2FzZSAnY3VybCc6DQoJ CQkkYyA9IGN1cmxfaW5pdCgpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVVJMLCAk c21kX2F0X2ZlZWR1cmwpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfUkVGRVJFUiwg aHUpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUp Ow0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVkVSQk9TRSwgZmFsc2UpOw0KCQkJY3Vy bF9zZXRvcHQoJGMsIENVUkxPUFRfVElNRU9VVCwgMTApOw0KCQkJJGZlZWQgPSBjdXJsX2V4 ZWMoJGMpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2Zzb2NrJzoNCgkJCSR1cmwgPSBwYXJzZV91 cmwoJHNtZF9hdF9mZWVkdXJsKTsNCgkJCSRmcCA9IEBmc29ja29wZW4gKCR1cmxbJ2hvc3Qn XSwgODAsICRlcnJubywgJGVycnN0ciwgNSk7DQoJCQlpZiAoJGZwKSB7DQoJCQkJJHFyeSA9 ICdHRVQgJy4kc21kX2F0X2ZlZWR1cmw7DQoJCQkJJHFyeSAuPSAiIEhUVFAvMS4wXHJcblxy XG4iOw0KDQoJCQkJZnB1dHMoJGZwLCAkcXJ5KTsNCgkJCQlzdHJlYW1fc2V0X3RpbWVvdXQo JGZwLCAxMCk7DQoJCQkJJGluZm8gPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkZnApOw0KDQoJ CQkJJGhkcnMgPSB0cnVlOw0KCQkJCXdoaWxlICgoIWZlb2YoJGZwKSkgJiYgKCEkaW5mb1sn dGltZWRfb3V0J10pKSB7DQoJCQkJCSRsaW5lID0gZmdldHMoJGZwLCA4MTkyKTsNCgkJCQkJ JGxpbmUgPSBwcmVnX3JlcGxhY2UoIltcclxuXSIsICIiLCAkbGluZSk7DQoJCQkJCWlmICgk aGRycyA9PSBmYWxzZSkgew0KCQkJCQkJJGZlZWQgLj0gJGxpbmUuIlxuIjsNCgkJCQkJfQ0K CQkJCQlpZiAoc3RybGVuKCRsaW5lKSA9PSAwKSAkaGRycyA9IGZhbHNlOw0KCQkJCX0NCgkJ CQlpZiAoJGluZm9bJ3RpbWVkX291dCddKSB7DQoJCQkJCSRmZWVkID0gJyc7DQoJCQkJfQ0K CQkJCWZjbG9zZSgkZnApOw0KCQkJfSBlbHNlIHsNCgkJCQkkZmVlZCA9ICcnOw0KCQkJfQ0K CQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQkkZmVlZCA9ICcnOw0KCX0NCg0KCSRzbWRfYXRf dmxhc3QgPSAnJzsNCgkkZmVlZHMgPSBhcnJheSgpOw0KCWlmIChpc3NldCgkcHJlZnNbJ3Nt ZF9hdF92ZXJzaW9ucyddKSAmJiBpc3NldCgkcHJlZnNbJ3NtZF9hdF92bGFzdCddKSkgew0K CQlpZiAodGltZSgpIC0gJHByZWZzWydzbWRfYXRfdmxhc3QnXSA8IDg2NDAwKSB7DQoJCQkv LyBMYXN0IHVwZGF0ZWQgd2l0aGluIHRoZSBsYXN0IGRheSwgc28gcmVhZCB0aGUgY2FjaGVk IHZlcnNpb24gbnVtYmVycw0KCQkJJGZlZWRzID0gdW5zZXJpYWxpemUoJHByZWZzWydzbWRf YXRfdmVyc2lvbnMnXSk7DQoJCX0NCgl9DQoJaWYgKCEkZmVlZHMgfHwgZ3BzKCdyZWFkX3Zl cnNpb25zJykpIHsNCgkJJGZlZWRzID0gc21kX2F0X2ZlZWQoJGZlZWQpOw0KCQkkaW5zdGFs bGVkX2ZlZWQgPSBhcnJheSgpOw0KCQkkZmVlZHMgPSAoaXNfYXJyYXkoJGZlZWRzKSkgPyAk ZmVlZHMgOiBhcnJheSgpOw0KDQoJCS8vIE9ubHkgcmVjb3JkIHRoZSB2ZXJzaW9uIGluZm8g ZnJvbSB0aGVtZXMgdGhhdCBhcmUgaW5zdGFsbGVkDQoJCWZvcmVhY2goJHNraW5fbGlzdCBh cyAkc2tpbl9uYW1lKSB7DQoJCQkkZmVlZF9za2luX25hbWUgPSBzdHJfcmVwbGFjZSgnXycs ICctJywgJHNraW5fbmFtZSk7IC8vIFVuc2FuaXRpemUgdGhlIHVybF90aXRsZQ0KCQkJaWYg KGFycmF5X2tleV9leGlzdHMoJGZlZWRfc2tpbl9uYW1lLCAkZmVlZHMpKSB7DQoJCQkJJGlu c3RhbGxlZF9mZWVkWyRmZWVkX3NraW5fbmFtZV0gPSAkZmVlZHNbJGZlZWRfc2tpbl9uYW1l XTsNCgkJCX0NCgkJfQ0KCQlzZXRfcHJlZignc21kX2F0X3ZsYXN0JywgdGltZSgpLCAkc21k X2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJc2V0X3ByZWYoJ3Nt ZF9hdF92ZXJzaW9ucycsIHNlcmlhbGl6ZSgkaW5zdGFsbGVkX2ZlZWQpLCAkc21kX2F0X2V2 ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgl9DQoNCglmb3JlYWNoICgkc2tp bl9saXN0IGFzICRza2luX25hbWUpIHsNCgkJLy8gUmVhZCBlYWNoIG1hbmlmZXN0IGFuZCBz ZXQgdXAgdGhlIGxhYmVscw0KCQkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2lu X25hbWUpOw0KCQkkZmVlZF9za2luX25hbWUgPSBzdHJfcmVwbGFjZSgnXycsICctJywgJHNr aW5fbmFtZSk7IC8vIFVuc2FuaXRpemUgZm9yIHVybF90aXRsZSBtYXRjaGluZw0KDQoJCSR0 aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1iKCRza2luZm8sIDEpOw0KCQkkdGhpc19za2lu ID0gKCRza2luZm8pID8gKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gc3Ryb25nKCRz a2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUnXSkgOiAkc2tpbl9uYW1lOw0KCQkk aXNfZ2JsID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pICYmICRz a2luX25hbWUgPT0gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgPyBzbWRfYXRf Z1R4dCgnaXNfZ2xvYmFsJykgOiAnJzsNCgkJJHRodW1yb3cgPSAnPGEgaHJlZj0iP2V2ZW50 PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9zd2l0Y2gnLmEuJ25leHRzdGVwPXNt ZF9hdF9saXN0Jy5hLidza2luPScuJHNraW5fbmFtZS5hLidwYWdlPScuJHBhZ2UuJyIgdGl0 bGU9Iicuc21kX2F0X2dUeHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0aGlzX3NraW4uJGlzX2di bC4oKCRza2luZm8gJiYgJHNraW5mb1snYmFzZWRfb24nXSkgPyBzbWRfYXRfZ1R4dCgnYmFz ZWRfb24nLCBhcnJheSgne3NraW59JyA9PiAkc2tpbmZvWydiYXNlZF9vbiddKSkgOiAnJyku KCgkdGh1bWJuYWlsKSA/ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9h Pic7DQoJCSRhdXRocm93ID0gKCgkc2tpbmZvICYmIHN0cnBvcygkc2tpbmZvWydhdXRob3Jf dXJpJ10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9y X3VyaSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogKCgkc2tpbmZvKSA/ICRz a2luZm9bJ2F1dGhvciddIDogJy0nKSk7DQoJCSRhY3Ryb3cgPSAnPGEgaHJlZj0iP2V2ZW50 PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW5f bmFtZS4nIj5bJy5nVHh0KCdlZGl0JykuJ108L2E+Jw0KCQkJLiAnICcgLigoJHNraW5mbykg PyAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9jbG9u ZScuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgb25jbGljaz0icmV0dXJuIHNtZF9nZXR2YWwo XCcnLiRza2luX25hbWUuJ1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsiPlsnLnNtZF9hdF9nVHh0 KCdjbG9uZScpLiddPC9hPicgOiAnJykNCgkJCS4gJyAnIC4oKCRza2luZm8pID8gJzxhIGhy ZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZXhwb3J0Jy5hLidz a2luPScuJHNraW5fbmFtZS4nIiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldGNydXNoKFwnJy4k c2tpbl9uYW1lLidcJyk7Ij5bJy5zbWRfYXRfZ1R4dCgnZXhwb3J0JykuJ108L2E+JyA6ICcn KQ0KCQkJLiAnICcgLigoaW5fYXJyYXkoJHNraW5fbmFtZSwgJHNtZF9jb3JlX3RoZW1lcykg fHwgaW5fYXJyYXkoJHNraW5fbmFtZSwgJGJhc2VzKSkgPyAnJyA6ICc8YSBocmVmPSI/ZXZl bnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2RlbGV0ZScuYS4nc2tpbj0nLiRz a2luX25hbWUuYS4ncGFnZT0nLiRwYWdlLiciIG9uY2xpY2s9InJldHVybiBjb25maXJtKFwn Jy5zbWRfYXRfZ1R4dCgnZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgne3NraW59JyA9PiAkc2tp bl9uYW1lKSkuJ1wnKTsiPlsnLmdUeHQoJ2RlbGV0ZScpLiddPC9hPicpDQoJCQkuICc8ZGl2 IGlkPSJwb3BfJy4kc2tpbl9uYW1lLiciIGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+ PHNwYW4+Jy5zbWRfYXRfZ1R4dCgnbmV3X2Nsb25lc2tpbicpLic8L3NwYW4+PGlucHV0IHR5 cGU9InRleHQiIG5hbWU9InNtZF90ZXh0X25hbWUiIHZhbHVlPSIiIC8+IDxhIGhyZWY9IiMi PiZuYnNwO1snLnN0cm9uZyhzbWRfYXRfZ1R4dCgnY29uZmlybScpKS4nXTwvYT48L2Rpdj4n DQoJCQkuICc8ZGl2IGlkPSJjcnVzaF8nLiRza2luX25hbWUuJyIgY2xhc3M9InNtZF9wb3B1 cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCdjcnVzaF9mb3JtYXQnKS4nPC9z cGFuPicucmFkaW9TZXQoJGNydXNoZXJzLCAkc2tpbl9uYW1lLidfY3J1c2gnLCAoKGlzc2V0 KCRhdF9wcmVmc1snc21kX2F0X2NydXNoJ10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2NydXNo J10gOiAnJykgKS4nPGEgaHJlZj0iIyI+Jm5ic3A7Wycuc3Ryb25nKHNtZF9hdF9nVHh0KCdj b25maXJtJykpLiddPC9hPjwvZGl2Pic7DQoJCSR2ZXJvdyA9ICgkc2tpbmZvKSA/ICgoaXNz ZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV0pICYmIGlzc2V0KCRmZWVkc1skZmVlZF9za2lu X25hbWVdWydzdW1tYXJ5J10pICYmIHZlcnNpb25fY29tcGFyZSgkZmVlZHNbJGZlZWRfc2tp bl9uYW1lXVsnc3VtbWFyeSddLCRza2luZm9bJ3ZlcnNpb24nXSk9PT0xKSA/ICc8YSBocmVm PSInLiRmZWVkc1skZmVlZF9za2luX25hbWVdWydsaW5rJ10uJyIgY2xhc3M9InNtZF9hdF91 cGRhdGUiPicuc21kX2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJzaW9uJ10uJzwv YT4nIDogc21kX2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJzaW9uJ10pIDogJyc7 DQoNCgkJaWYgKCRsYXlvdXQ9PTApIHsNCgkJCWVjaG8gdHIoDQoJCQkJdGQoJHRodW1yb3cp DQoJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJLnRkKCR2ZXJvdykNCgkJCQkudGQoKCgk c2tpbmZvKT8gJHNraW5mb1snZGVzY3JpcHRpb24nXSA6ICctJykuKCgkc2tpbmZvICYmICRz a2luZm9bJ2hlbHAnXSkgPyAnICcuaHJlZignWycuZ1R4dCgnaGVscCcpLiddJywgJHNraW5m b1snaGVscCddKSA6ICcnKSwgMjUwKQ0KCQkJCS50ZCgkYWN0cm93LDI2MCkNCgkJCSwgKCgk c2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBjbGFzcz0iYWN0aXZlIicgOiAnJykNCgkJ CSk7DQoJCX0gZWxzZSB7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2VsbCcuKCgkc2tp bl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBhY3RpdmUnIDogJycpLiciPic7DQoJCQllY2hv ICc8ZGl2PicuJHRodW1yb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRf YXV0aCI+Jy4kdmVyb3cuc21kX2F0X2dUeHQoJ2J5JykuJGF1dGhyb3cuJzwvZGl2Pic7DQoJ CQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfYWN0aW9ucyI+Jy4kYWN0cm93Lic8L2Rpdj4nOw0K CQkJZWNobyAnPC9kaXY+JzsNCgkJfQ0KCX0NCg0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJ ZWNobyAnPC90ZD48L3RyPic7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgl9IGVsc2Ugew0KCQll Y2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwvZGl2PjwvZGl2Pic7DQoJfQ0KCWVjaG8g JzwvZm9ybT4nOw0KCWVjaG8gbi5uYXZfZm9ybSgkc21kX2F0X2V2ZW50LCAkcGFnZSwgJG51 bVBhZ2VzLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsNCgllY2hvIG4ucGFnZWJ5X2Zvcm0o JHNtZF9hdF9ldmVudCwgJHBhZ2VieSk7DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkKCRm ZWVkKSB7DQoJZ2xvYmFsICRmZWVkczsNCg0KCSRmZWVkPXByZWdfcmVwbGFjZSgiLz4iLiJb WzpzcGFjZTpdXSsiLiI8L2kiLCAiPjwiLCAkZmVlZCk7IC8vIEtpbGwgd2hpdGVzcGFjZSBp biBmZWVkDQoJJHhtbHBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCk7DQoJeG1sX3NldF9l bGVtZW50X2hhbmRsZXIoJHhtbHBhcnNlciwgInNtZF9hdF9mZWVkX3N0YXJ0X3RhZyIsICJz bWRfYXRfZmVlZF9lbmRfdGFnIik7DQoJeG1sX3NldF9jaGFyYWN0ZXJfZGF0YV9oYW5kbGVy KCR4bWxwYXJzZXIsICJzbWRfYXRfZmVlZF90YWdfY29udGVudHMiKTsNCgl4bWxfcGFyc2Uo JHhtbHBhcnNlciwgJGZlZWQpOw0KCXhtbF9wYXJzZXJfZnJlZSgkeG1scGFyc2VyKTsNCg0K CXJldHVybiAkZmVlZHM7DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3N0YXJ0X3RhZygk cGFyc2VyLCAkbmFtZSwgJGF0dHJpYnMpIHsNCglnbG9iYWwgJHNtZF9hdF9mZWVkaW4sICRz bWRfYXRfZmVlZHRhZzsNCglpZiAoJG5hbWUgPT0gIkVOVFJZIikgew0KCQkkc21kX2F0X2Zl ZWRpbiA9IHRydWU7DQoJfQ0KCWlmICgkc21kX2F0X2ZlZWRpbikgew0KCQkkc21kX2F0X2Zl ZWR0YWcgPSAkbmFtZTsNCgl9DQp9DQpmdW5jdGlvbiBzbWRfYXRfZmVlZF9lbmRfdGFnKCRw YXJzZXIsICRuYW1lKSB7DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0 YWcsICRzbWRfYXRfZmVlZG5hbWU7DQoJaWYgKCRuYW1lID09ICJFTlRSWSIpIHsNCgkJJHNt ZF9hdF9mZWVkaW4gPSBmYWxzZTsNCgkJJHNtZF9hdF9mZWVkbmFtZSA9ICcnOw0KCX0NCn0N Cg0KZnVuY3Rpb24gc21kX2F0X2ZlZWRfdGFnX2NvbnRlbnRzKCRwYXJzZXIsICRkYXRhKSB7 DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWcsICRzbWRfYXRfZmVl ZG5hbWUsICRmZWVkczsNCglpZiAoJHNtZF9hdF9mZWVkaW4pIHsNCgkJaWYgKCRzbWRfYXRf ZmVlZHRhZyA9PSAiTkFNRSIpIHsNCgkJCSRmZWVkc1skZGF0YV0gPSAnJzsNCgkJCSRzbWRf YXRfZmVlZG5hbWUgPSAkZGF0YTsNCgkJfQ0KCQlpZiAoaXNzZXQoJGZlZWRzWyRzbWRfYXRf ZmVlZG5hbWVdKSkgew0KCQkJaWYgKCRzbWRfYXRfZmVlZHRhZyA9PSAiVElUTEUiIHx8ICRz bWRfYXRfZmVlZHRhZyA9PSAiU1VNTUFSWSIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJVUERB VEVEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIklEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0g IkxJTksiKSB7DQoJCQkJJGZlZWRzWyRzbWRfYXRfZmVlZG5hbWVdW3N0cnRvbG93ZXIoJHNt ZF9hdF9mZWVkdGFnKV0gPSAkZGF0YTsNCgkJCX0NCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZW1vdmUgaGFyZCBzcGFjZXMgaW4gdGhlIHVwbG9h ZF9mb3JtIHNvIE9wZXJhIGFuZCBJRSB3cmFwIHRoZSBidXR0b25zDQpmdW5jdGlvbiBzbWRf YXRfdXBsb2FkX2Zvcm0oJGV2ZW50LCAkc3RlcCwgJGRhdGEsICRhcmdzKSB7DQoJcmV0dXJu IHN0cl9yZXBsYWNlKCcmIzE2MDsnLCAnICcsICRkYXRhKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZWRpdCgkbWVzc2FnZT0nJykgew0K CWdsb2JhbCAkc21kX2F0X2V2ZW50LCAkc21kX2F0X3N0eWxlczsNCg0KCWV4dHJhY3QoZG9T bGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJywgJ2ZpbGUnKSkpKTsNCg0KCSRh dF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9w cmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6 IDE7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNzcyIsICJqcyIsICJwaHAiKTsN CgkkaW1hZ2FibGUgPSBhcnJheSgianBnIiwgImpwZWciLCAiZ2lmIiwgInBuZyIpOw0KCSRt YXhfZmlsZV9zaXplID0gMiAqIDEwMjQgKiAxMDI0Ow0KDQoJJHNraW5mbyA9IHNtZF9hdF9y ZWFkX3NraW5mbygkc2tpbik7DQoJJGZpbGUgPSAoZW1wdHkoJG5ld19za2luKSkgPyAkZmls ZSA6ICRuZXdfc2tpbjsNCgkkZmlsZXMgPSBzbWRfYXRfbGlzdGRpcihUSEVNRS4kc2tpbik7 DQoJc29ydCgkZmlsZXMpOw0KDQoJLy8gU3BsaXQgdGhlIGxpc3QgaW50byBpdHMgZGlyZWN0 b3J5IGdyb3Vwcw0KCSRhbGxmaWxlcyA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJGZpbGVzIGFz ICRjdXJyZmlsZSkgew0KCQkkZmlsZV9pbmZvID0gcGF0aGluZm8oJGN1cnJmaWxlKTsNCgkJ Ly8gSWdub3JlIGFueSByb2d1ZSBTdWJ2ZXJzaW9uIGZpbGVzDQoJCWlmIChzdHJwb3MoJGZp bGVfaW5mb1snZGlybmFtZSddLCAnLy5zdm4nKSA9PT0gZmFsc2UpIHsNCgkJCSRmaWxlX3R5 cGUgPSAoaXNzZXQoJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10pKSA/ICRmaWxlX2luZm9bJ2V4 dGVuc2lvbiddIDogJ290aGVyJzsNCgkJCSRhbGxmaWxlc1skZmlsZV90eXBlXVtdID0gJGN1 cnJmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKGdwcygnc21kX2F0X2VkaXRzJykpIHsNCgkJJGNv bnRlbnRzID0gc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsZ3BzKCdzbWRfYXRfZWRpdHMnKSk7 IC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0KCX0gZWxzZSB7DQoJCSRjb250ZW50cyA9ICcnOw0K CQlpZiAoJGZpbGUgJiYgZmlsZV9leGlzdHMoVEhFTUUuJHNraW4uRFMuJGZpbGUpKSB7DQoJ CQkkY29udGVudHMgPSBmaWxlKFRIRU1FLiRza2luLkRTLiRmaWxlKTsNCgkJCSRjb250ZW50 cyA9IGpvaW4oIiIsICRjb250ZW50cyk7DQoJCX0NCgl9DQoNCgkvLyBCZWdpbiByZW5kZXJp bmcgdGhlIHBhZ2UNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdlZGl0X2xibCcpLCRtZXNzYWdl KTsNCg0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JzsNCgllY2hvICRzbWRfYXRf c3R5bGVzWydlZGl0J107DQoJZWNobyAnPC9zdHlsZT4nOw0KDQoJJHNraW5fbGlzdCA9IHNt ZF9hdF9yZWFkX3NraW5zKCk7DQoNCgkvLyBzZWxlY3RJbnB1dCBuZWVkcyBib3RoIGluZGV4 IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNhc2UNCgkkc2tpbnNlbCA9IGFy cmF5KCk7DQoJZm9yZWFjaCgkc2tpbl9saXN0IGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJ JHNraW5zZWxbJHZhbHVlMV0gPSAkc2tpbl9saXN0WyRrZXkxXTsNCiAgIH0NCgkkc2tpbkNo YW5nZSA9ICc8Zm9ybSBuYW1lPSJza2luY2hhbmdlIiBhY3Rpb249ImluZGV4LnBocCI+Jw0K CQkuIGVJbnB1dCgkc21kX2F0X2V2ZW50KQ0KCQkuIHNJbnB1dCgnc21kX2F0X2VkaXQnKQ0K CQkuIHNlbGVjdElucHV0KCdza2luJywgJHNraW5zZWwsICRza2luLCAwLCAxKQ0KCQkuICc8 L2Zvcm0+JzsNCg0KCSRmaWxlTGlzdCA9IGhlZChzbWRfYXRfZ1R4dCgnc2tpbl9maWxlcycp LDIpDQoJCS4gJHNraW5DaGFuZ2UNCgkJLiBzdGFydFRhYmxlKCdsaXN0JywgJ2xlZnQnLCAn c21kX3NraW5fZmlsZXR5cGVzJyk7DQoJJGZpbGVMaXN0IC49ICc8YnIgLz48YSBjbGFzcz0i bmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9u ZXdmaWxlJy5hLidza2luPScuJHNraW4uJyI+Jy5zbWRfYXRfZ1R4dCgnbmV3X2ZpbGUnKS4n PC9hPic7DQoJJGZpbGVMaXN0IC49ICcgPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVu dD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRfZ1R4dCgoKCRsYXlvdXQ9PSIwIikgPyAn c2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwvYT48YnIgLz4nOw0KCSRvdGhlcnMgPSBh cnJheSgpOw0KDQoJZm9yZWFjaCAoJGVkaXRhYmxlIGFzICRmaWxldHlwZSkgew0KCQlpZiAo aXNzZXQoJGFsbGZpbGVzWyRmaWxldHlwZV0pKSB7DQoJCQlmb3JlYWNoICgkYWxsZmlsZXNb JGZpbGV0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmlsZSkgew0KCQkJCWlmICgkaWR4ID09IDAp IHsNCgkJCQkJJGZpbGVMaXN0IC49IHRyKHRkKGhlZChzbWRfYXRfZ1R4dCgkZmlsZXR5cGUp LDMpKSk7DQoJCQkJfQ0KCQkJCSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7DQoJ CQkJJGJhc2VmaWxlID0gYXJyYXlfc2hpZnQoZXhwbG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0K CQkJCSRlZGl0ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1z bWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2luLmEuJ2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4o KCRmaWxlID09ICRqdXN0ZmlsZSkgPyBzdHJvbmcoJGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSku JzwvYT4nOw0KCQkJCSRkZWwgPSAoJGJhc2VmaWxlID09ICRza2luKSA/ICcnIDogZExpbmso JHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwgMSwg J3NraW4nLCAkc2tpbik7DQoJCQkJJGZpbGVMaXN0IC49IHRyKHRkKCRlZGl0KS50ZCgkZGVs KSk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkvLyBTb21lIG90aGVyIGZpbGUgdHlwZQ0KCQkJ aWYgKCEkb3RoZXJzKSB7DQoJCQkJZm9yZWFjaCAoJGFsbGZpbGVzIGFzICRmdHlwZSA9PiAk ZmxzKSB7DQoJCQkJCWlmICghaW5fYXJyYXkoJGZ0eXBlLCBhcnJheV9tZXJnZSgkZWRpdGFi bGUsICRpbWFnYWJsZSkpKSB7DQoJCQkJCQlmb3JlYWNoICgkYWxsZmlsZXNbJGZ0eXBlXSBh cyAkaWR4ID0+ICRjdXJyZmlsZSkgew0KCQkJCQkJCSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRj dXJyZmlsZSk7DQoJCQkJCQkJJGJhc2VmaWxlID0gYXJyYXlfc2hpZnQoZXhwbG9kZSAoJy4n LCRqdXN0ZmlsZSkpOw0KCQkJCQkJCSRlZGl0ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRf YXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2luLmEuJ2ZpbGU9 Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRqdXN0ZmlsZSkgPyBzdHJvbmcoJGp1c3Rm aWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJCQkJCSRkZWwgPSAoJGJhc2VmaWxlID09 ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGUnLCAn ZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAkc2tpbik7DQoJCQkJCQkJJG90aGVyc1td ID0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJ CX0NCgkJfQ0KCX0NCgkkZmlsZUxpc3QgLj0gKCRvdGhlcnMpID8gdHIodGQoaGVkKHNtZF9h dF9nVHh0KCdvdGhlcl9maWxlcycpLDMpKSkuIGpvaW4obiwgJG90aGVycykgOiAnJzsNCgkk ZmlsZUxpc3QgLj0gZW5kVGFibGUoKTsNCg0KCS8vIE1ha2UgdGhlIGxpc3Qgb2YgaW1hZ2Vz IGZvciB0aGlzIHNraW4NCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAkc21kX2F0X2V2 ZW50LA0KCQkic3RlcCIgPT4gJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLA0KCSk7DQoJJHNlbFtd ID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9InNtZF9hdF9pbWFnZWZvcm0iIG5hbWU9InNt ZF9hdF9pbWFnZWZvcm0iIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyI+JzsNCgkkc2VsW10g PSAnPHNlbGVjdCBpZD0ic21kX2F0X2ltYWdlcyIgbmFtZT0ic21kX2F0X2ltYWdlc1tdIiBj bGFzcz0ibGlzdCIgc2l6ZT0iMjQiIG11bHRpcGxlPSJtdWx0aXBsZSIgc3R5bGU9IndpZHRo OjE1NHB4OyI+JzsNCg0KCWlmIChkZWZpbmVkKCdHTE9CX0JSQUNFJykpIHsNCgkJJGltZyA9 IGdsb2IoVEhFTUUuJHNraW4uRFMuJ3sqLmpwZywqLmdpZiwqLnBuZ30nLCBHTE9CX0JSQUNF KTsNCgl9IGVsc2Ugew0KCQkkaW1nID0gYXJyYXlfbWVyZ2UoZ2xvYihUSEVNRS4kc2tpbi5E Uy4nKi5qcGcnKSxnbG9iKFRIRU1FLiRza2luLkRTLicqLmdpZicpLGdsb2IoVEhFTUUuJHNr aW4uRFMuJyoucG5nJykpOw0KCX0NCg0KCWlmKGlzX2FycmF5KCRpbWcpKSB7DQoJCWZvcmVh Y2ggKCRpbWcgYXMgJGltZ2ZpbGUpIHsNCgkJCSRzZWxbXSA9IHQuJzxvcHRpb24gdmFsdWU9 IicuJGltZ2ZpbGUuJyI+Jy5iYXNlbmFtZSgkaW1nZmlsZSkuJzwvb3B0aW9uPic7DQoJCX0N Cgl9DQoJJHNlbFtdID0gJzwvc2VsZWN0Pic7DQoJJHNlbFtdID0gZExpbmsoJHNtZF9hdF9l dmVudCwgJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLCAnc2tpbicsICRza2luLCAxKTsNCgkkc2Vs W10gPSAnPC9mb3JtPic7DQoJJHNlbCA9IGpvaW4oJycsJHNlbCk7DQoNCgkvLyBJbWFnZSBw b3J0aW9uDQoJJGltZ2JpdCA9IGhlZChzbWRfYXRfZ1R4dCgnc2tpbl9pbWFnZXMnKSwgMikg LiBzdGFydFRhYmxlKCdsaXN0JywgJ2xlZnQnKTsNCgkkaW1nYml0IC49IHRyKHRkKCRzZWwp KTsNCgkkaW1nYml0IC49IHRyKHRkKHVwbG9hZF9mb3JtKHNtZF9hdF9nVHh0KCd1cGxvYWRf aW1hZ2UnKSwgJycsICdzbWRfYXRfdXBsb2FkX2ltYWdlJywgJHNtZF9hdF9ldmVudCwgJHNr aW4sICRtYXhfZmlsZV9zaXplLCAnJywgJycpLCAxNTApKTsNCgkkaW1nYml0IC49IGVuZFRh YmxlKCk7DQoNCgkvLyBSZW5kZXIgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UNCgllY2hvIHN0YXJ0 VGFibGUoJ2VkaXQnKS4NCgl0cigNCgkJdGR0bCgkaW1nYml0KS4NCgkJdGQoDQoJCQloZWQo KCgkc2tpbmZvKSA/ICRza2luZm9bJ2RuYW1lJ10gOiAkc2tpbiksMSkuDQoJCQlmb3JtKA0K CQkJCSc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X3NraW4iIHZhbHVlPSInLmh0bWxz cGVjaWFsY2hhcnMoJGZpbGUpLiciIGNsYXNzPSJlZGl0IiBzaXplPSI0MCIgdGFiaW5kZXg9 IjIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7IiAvPicuYnINCgkJCQkuJzx0ZXh0YXJl YSBpZD0ic21kX2F0X2VkaXRzIiBjbGFzcz0iY29kZSIgbmFtZT0ic21kX2F0X2VkaXRzIiBj b2xzPSI3NiIgcm93cz0iMzIiPicuaHRtbHNwZWNpYWxjaGFycygkY29udGVudHMpLic8L3Rl eHRhcmVhPicuYnINCgkJCQkuZklucHV0KCdzdWJtaXQnLCcnLGdUeHQoJ3NhdmUnKSwncHVi bGlzaCcpDQoJCQkJLmVJbnB1dCgkc21kX2F0X2V2ZW50KS5zSW5wdXQoJ3NtZF9hdF9zYXZl JykNCgkJCQkuaElucHV0KCdza2luJywkc2tpbikNCgkJCQkuaElucHV0KCdmaWxlJywkZmls ZSkNCgkJCSkNCgkJKS4NCgkJdGR0bCgkZmlsZUxpc3QpDQoJKS4NCgllbmRUYWJsZSgpOw0K DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gSnVzdCBjbGVhciBvdXQg dGhlIHZhciBzbyB0aGUgc2F2ZSBmdW5jdGlvbiB0cmVhdHMgdGhlIGNvbnRlbnQgYXMgYSBu ZXcgZmlsZQ0KZnVuY3Rpb24gc21kX2F0X25ld2ZpbGUoKSB7DQoJJF9QT1NUWydmaWxlJ10g PSAnJzsNCgkkbWVzc2FnZT0nJzsNCglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2Nsb25lKCkgew0K CWdsb2JhbCAkdHhwX3VzZXIsICRzbWRfYXRfcHJlZnM7DQoNCglleHRyYWN0KGRvU2xhc2go Z3BzYShhcnJheSgnc2tpbicsICduZXdfc2tpbicpKSkpOw0KCSRtc2c9Jyc7DQoNCgkkbmV3 X3NraW4gPSB0cmltKCRuZXdfc2tpbik7DQoJJG5ld19za2luID0gcmF3dXJsZW5jb2RlKCRu ZXdfc2tpbik7DQoNCglpZiAoZW1wdHkoJG5ld19za2luKSkgew0KCQkkbXNnID0gc21kX2F0 X2dUeHQoJ25hbWVfZW1wdHknKTsNCgl9DQoNCgkvLyBDaGVjayB0aGUgbmV3IG5hbWUgaXNu J3QgYWxyZWFkeSBpbiB1c2UNCgkkdGhlbWVzID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0K CWlmIChpbl9hcnJheSgkbmV3X3NraW4sICR0aGVtZXMpKSB7DQoJCSRtc2cgPSBzbWRfYXRf Z1R4dCgnc2tpbl9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTsNCgl9 DQoNCgkvLyBObyBlcnJvcnMsIHNvIG1ha2UgYSBuZXcgZGlyIGFuZCBjcmVhdGUgdGhlIFBI UCBmaWxlDQoJaWYgKCRtc2c9PScnKSB7DQoJCSRjb250ZW50ID0gJyc7DQoJCSRkZXN0ZGly ID0gVEhFTUUuJG5ld19za2luLkRTOw0KCQkkcmVzID0gbWtkaXIoJGRlc3RkaXIpOw0KCQkk YmFzZWQgPSAnJzsNCg0KCQlpZiAoJHNraW4pIHsNCgkJCS8vIEJhc2VkIG9uIGFuIGV4aXN0 aW5nIHRoZW1lLiBObyBuZWVkIGZvciBhbnkgZnVuY3Rpb25zIG90aGVyIHRoYW4gbWFuaWZl c3QoKQ0KCQkJJGJhc2VkID0gInRoZW1lOjpiYXNlZF9vbignIi4kc2tpbi4iJyk7IjsNCgkJ CSRleHRlbmRzID0gJHNraW4uJ190aGVtZSc7DQoJCQkkc3Jjc3MgPSBUSEVNRS4kc2tpbi5E Uy4ndGV4dHBhdHRlcm4uY3NzJzsNCgkJCWlmIChmaWxlX2V4aXN0cygkc3Jjc3MpICYmIGZp bGVzaXplKCRzcmNzcykgPiAwKSB7DQoJCQkJJGltcG9ydCA9IGpvaW4oJycsIGZpbGUoJHNy Y3NzKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRpbXBvcnQgPSAnQGltcG9ydCB1cmwoIi4uL2Ns YXNzaWMvdGV4dHBhdHRlcm4uY3NzIik7JzsNCgkJCX0NCgkJCSRjb250ZW50ID0gJ3snOw0K CQl9IGVsc2Ugew0KCQkJLy8gQnJhbmQgc3BhbmtpbmcgbmV3IHRoZW1lLiBDbG9uZSAnY2xh c3NpYycgZnVuY3Rpb25zIHRoZW4gYWRkIG5ldyBtYW5pZmVzdCgpDQoJCQkkZXh0ZW5kcyA9 ICd0aGVtZSc7DQoJCQkkaW1wb3J0ID0gJyc7DQoJCQkkdHhwX3BhdGggPSBydHJpbShnZXRf cHJlZignc21kX2F0X2ZpbGVfcGF0aCcsICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF9maWxl X3BhdGgnXSksIERTKTsNCgkJCSRzcmMgPSAkdHhwX3BhdGguRFMuVEhFTUUuJ2NsYXNzaWMn LkRTLidjbGFzc2ljLnBocCc7DQoJCQkkZ3JhYiA9IGZhbHNlOw0KCQkJJGZwID0gZmlsZSgk c3JjKTsNCg0KCQkJZm9yZWFjaCgkZnAgYXMgJGxpbmUpIHsNCgkJCQkkbGluZSA9IHJ0cmlt KCRsaW5lKTsNCgkJCQlpZiAoc3RycG9zKCRsaW5lLCAnZnVuY3Rpb24gbWFuaWZlc3QoKScp ICE9PSBmYWxzZSkgew0KCQkJCQkkZ3JhYiA9IGZhbHNlOyAvLyB1bm5lY2Vzc2FyeT8NCgkJ CQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWlmICgkZ3JhYikgew0KCQkJCQkkY29udGVudCAuPSAk bGluZS5uOw0KCQkJCX0NCgkJCQlpZiAoc3RycG9zKCRsaW5lLCAnY2xhc3MgY2xhc3NpY190 aGVtZSBleHRlbmRzIHRoZW1lJykgIT09IGZhbHNlKSB7DQoJCQkJCSRncmFiID0gdHJ1ZTsN CgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBtYW5pZmVzdCBmaWVsZHMNCgkJJG1hbnVzZXIg PSBnZXRfYXV0aG9yX25hbWUoJHR4cF91c2VyKTsNCgkJJG1hbnRpdGxlID0gdWN3b3Jkcygk bmV3X3NraW4pOw0KDQoJCS8vIFdyaXRlIHRoZSBuZXcgUEhQIGZpbGUNCgkJJGJ1ZiA9IDw8 PEVPRg0KPD9waHANCg0KaWYgKCFkZWZpbmVkKCd0eHBpbnRlcmZhY2UnKSkgZGllKCd0eHBp bnRlcmZhY2UgaXMgdW5kZWZpbmVkLicpOw0KDQp7JGJhc2VkfQ0KDQpjbGFzcyB7JG5ld19z a2lufV90aGVtZSBleHRlbmRzIHskZXh0ZW5kc30NCnskY29udGVudH0NCg0KCWZ1bmN0aW9u IG1hbmlmZXN0KCkNCgl7DQoJCXJldHVybiBhcnJheSgNCgkJCSd0aXRsZScJIAkJPT4gJ3sk bWFudGl0bGV9JywNCgkJCSdhdXRob3InIAkJPT4gJ3skbWFudXNlcn0nLA0KCQkJJ2F1dGhv cl91cmknIAk9PiAnJywNCgkJCSd2ZXJzaW9uJyAJCT0+ICcxLjAnLA0KCQkJJ2Rlc2NyaXB0 aW9uJyAJPT4gJycsDQoJCQknaGVscCcgCQkJPT4gJycsDQoJCSk7DQoJfQ0KfQ0KPz4NCkVP RjsNCg0KCQkkZnAgPSBmb3BlbigkZGVzdGRpci4kbmV3X3NraW4uJy5waHAnLCAid2IiKTsN CgkJZndyaXRlKCRmcCwgJGJ1Zik7DQoJCWZjbG9zZSgkZnApOw0KDQoJCS8vIENyZWF0ZSB0 aGUgQ1NTIGZpbGUNCgkJJGZwID0gZm9wZW4oJGRlc3RkaXIuJ3RleHRwYXR0ZXJuLmNzcycs ICJ3YiIpOw0KCQlmd3JpdGUoJGZwLCAkaW1wb3J0KTsNCgkJZmNsb3NlKCRmcCk7DQoNCgkJ aWYgKCRza2luKSB7DQoJCQkkbXNnID0gc21kX2F0X2dUeHQoJ3NraW5fY2xvbmVkJywgYXJy YXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7Ow0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IHNt ZF9hdF9nVHh0KCdza2luX2NyZWF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4p KTs7DQoJCX0NCg0KLy8JJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX25vdF9jcmVhdGVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7Ow0KDQoJfQ0KDQoJc21kX2F0X2xpc3Qo JG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2F0X2NydXNoX29wdGlvbnMoJGRpcmVjdGlvbj0nZXhwb3J0Jykgew0KCSRzbWRfY3J1c2hl cnMgPSBhcnJheSgndGFyJyA9PiBzbWRfYXRfZ1R4dCgnY190YXInKSk7DQoNCglpZiAoJGRp cmVjdGlvbiA9PSAnZXhwb3J0Jykgew0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdnemNvbXBy ZXNzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdnem9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMo J2d6d3JpdGUnKSkgew0KCQkJJHNtZF9jcnVzaGVyc1snZ3ppcCddID0gc21kX2F0X2dUeHQo J2NfZ3ppcCcpOw0KCQkJJHNtZF9jcnVzaGVyc1snemlwJ10gPSBzbWRfYXRfZ1R4dCgnY196 aXAnKTsNCgkJfQ0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdiemNvbXByZXNzJykgJiYgZnVu Y3Rpb25fZXhpc3RzKCdiem9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2J6d3JpdGUnKSkg ew0KCQkJJHNtZF9jcnVzaGVyc1snYnppcDInXSA9IHNtZF9hdF9nVHh0KCdjX2J6aXAyJyk7 DQoJCX0NCgl9IGVsc2Ugew0KCQkvLyBJbXBvcnQgZnVuY3Rpb24gcmVxdWlyZW1lbnRzDQoJ CWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0ZScpKSB7DQoJCQkkc21kX2NydXNoZXJz WydnemlwJ10gPSBzbWRfYXRfZ1R4dCgnY19nemlwJyk7DQoJCQkkc21kX2NydXNoZXJzWyd6 aXAnXSA9IHNtZF9hdF9nVHh0KCdjX3ppcCcpOw0KCQl9DQoJCWlmIChmdW5jdGlvbl9leGlz dHMoJ2J6ZGVjb21wcmVzcycpKSB7DQoJCQkkc21kX2NydXNoZXJzWydiemlwMiddID0gc21k X2F0X2dUeHQoJ2NfYnppcDInKTsNCgkJfQ0KCX0NCglyZXR1cm4gJHNtZF9jcnVzaGVyczsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZXhw b3J0KCkgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnM7DQoNCglleHRyYWN0KGRv U2xhc2goZ3BzYShhcnJheSgnc2tpbicsJ2NydXNoJykpKSk7DQoJJG1lc3NhZ2U9Jyc7DQoJ Y2hkaXIoVEhFTUUpOw0KCSRza2luZm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0K CSRyZXBzID0gYXJyYXkoDQoJCSd7dGhlbWV9JyA9PiAkc2tpbiwNCgkJJ3t2ZXJzaW9ufScg PT4gJHNraW5mb1sndmVyc2lvbiddLA0KCSk7DQoJJG91dCA9IHN0cnRyKGdldF9wcmVmKCdz bWRfYXRfZmlsZW5hbWVfZm9ybWF0JywgJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X2ZpbGVu YW1lX2Zvcm1hdCddKSwgJHJlcHMpOw0KDQoJLy8gQ2hlY2sgdGhlIHBhc3NlZCBjb21wcmVz c2lvbiBmb3JtYXQgaXMgdmFsaWQ7IHVzZSBkZWZhdWx0IGlmIG5vdA0KCSRjcnVzaGVycyA9 IHNtZF9hdF9jcnVzaF9vcHRpb25zKCk7DQoJaWYgKCRjcnVzaD09JycgfHwgJGNydXNoPT0n dW5kZWZpbmVkJyB8fCAhYXJyYXlfa2V5X2V4aXN0cygkY3J1c2gsICRjcnVzaGVycykpIHsN CgkJJGNydXNoID0gZ2V0X3ByZWYoJ3NtZF9hdF9jcnVzaCcsICRzbWRfYXRfcHJlZnNbMF1b J3NtZF9hdF9jcnVzaCddKTsNCgl9DQoNCglzd2l0Y2goJGNydXNoKSB7DQoJCWNhc2UgJ3pp cCc6DQoJCQkkemlwID0gbmV3IHNtZF9hdF96aXBfZmlsZSgkb3V0LicuemlwJyk7DQoJCQli cmVhazsNCgkJY2FzZSAnYnppcDInOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfYnppcF9maWxl KCRvdXQuJy50YnoyJyk7DQoJCQlicmVhazsNCgkJY2FzZSAndGFyJzoNCgkJCSR6aXAgPSBu ZXcgc21kX2F0X3Rhcl9maWxlKCRvdXQuJy50YXInKTsNCgkJCWJyZWFrOw0KCQljYXNlICdn emlwJzoNCgkJZGVmYXVsdDoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2d6aXBfZmlsZSgkb3V0 LicudGd6Jyk7DQogCQkJYnJlYWs7DQoJfQ0KDQoJJHR4cF9wYXRoID0gcnRyaW0oZ2V0X3By ZWYoJ3NtZF9hdF9maWxlX3BhdGgnLCAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfZmlsZV9w YXRoJ10pLCBEUyk7DQoJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICR0 eHBfcGF0aC5EUy5USEVNRSwgJ292ZXJ3cml0ZScgPT4gMSwgJ2lubWVtb3J5JyA9PiAxKSk7 DQoJJHppcC0+YWRkX2ZpbGVzKCRza2luLkRTLicqLionKTsNCgkkemlwLT5leGNsdWRlX2Zp bGVzKCRza2luLkRTLicqLnN2bionKTsNCgkkemlwLT5jcmVhdGVfYXJjaGl2ZSgpOw0KCSR6 aXAtPmRvd25sb2FkX2ZpbGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfaW1wb3J0KCkgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRf cHJlZnM7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddOw0KCSR0eHBf cGF0aCA9IHJ0cmltKGdldF9wcmVmKCdzbWRfYXRfZmlsZV9wYXRoJywgJHNtZF9hdF9wcmVm c1swXVsnc21kX2F0X2ZpbGVfcGF0aCddKSwgRFMpOw0KCSRmaWxlID0gZ2V0X3VwbG9hZGVk X2ZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddLCAkdHhwX3BhdGguRFMuVEhF TUUuYmFzZW5hbWUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSk7DQoJJGJhc2Vk aXIgPSAkdHhwX3BhdGguRFMuVEhFTUU7DQoJJHVuY3J1c2hlcnMgPSBzbWRfYXRfY3J1c2hf b3B0aW9ucygnaW1wb3J0Jyk7DQoJJG1lc3NhZ2U9Jyc7DQoJJGluZm8gPSBleHBsb2RlICgn LicsJG5hbWUpOw0KCSRsYXN0cGFydCA9IGNvdW50KCRpbmZvKS0xOw0KCSRleHQgPSAkaW5m b1skbGFzdHBhcnRdOw0KDQoJaWYgKCRuYW1lICYmICRmaWxlKSB7DQoJCWlmICgkZXh0ID09 ICd6aXAnICYmIGFycmF5X2tleV9leGlzdHMoJ3ppcCcsICR1bmNydXNoZXJzKSkgew0KCQkJ JHppcCA9IG5ldyBzbWRfZFVuemlwMigkZmlsZSk7DQovLwkJCSR6aXAtPmRlYnVnID0gdHJ1 ZTsNCgkJCSR6aXAtPmdldExpc3QoKTsNCgkJCSR2YWxpZEFyY2hpdmUgPSBzbWRfYXRfY2hl Y2tfYXJjaGl2ZSgkemlwLT5jb21wcmVzc2VkTGlzdCwgJGV4dCk7DQoJCQlpZiAoJHZhbGlk QXJjaGl2ZSkgew0KCQkJCSR6aXAtPnVuemlwQWxsKCRiYXNlZGlyKTsNCgkJCQkkemlwLT5j bG9zZSgpOw0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQkJ fSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF9hdF9nVHh0KCdpbXBvcnRfZmFp bGVkJyksIEVfV0FSTklORyk7DQoJCQl9DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAndGd6JyAm JiBhcnJheV9rZXlfZXhpc3RzKCdnemlwJywgJHVuY3J1c2hlcnMpKSB7DQoJCQkkemlwID0g bmV3IHNtZF9hdF9nemlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9v cHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkp Ow0KCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4 dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAndGJ6MicgJiYgYXJyYXlf a2V5X2V4aXN0cygnYnppcDInLCAkdW5jcnVzaGVycykpIHsNCgkJCSR6aXAgPSBuZXcgc21k X2F0X2J6aXBfZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMo YXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkk emlwLT5leHRyYWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBv cnRfb2snKTsNCgkJfSBlbHNlIGlmICgkZXh0ID09ICd0YXInKSB7DQoJCQkkemlwID0gbmV3 IHNtZF9hdF90YXJfZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlv bnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJ CQkkemlwLT5leHRyYWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdp bXBvcnRfb2snKTsNCgkJfSBlbHNlIHsNCgkJCSRtZXNzYWdlID0gYXJyYXkoc21kX2F0X2dU eHQoJ3Vuc3VwcG9ydGVkX2NvbXByZXNzaW9udHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAk ZXh0KSksIEVfV0FSTklORyk7DQoJCX0NCg0KCQkvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBm aWxlDQoJCXVubGluaygkZmlsZSk7DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgnZW1wdHlfaW5mbycpOw0KCX0NCg0KCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCn0N Cg0KLy8gQ2hlY2sgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgdGhlIGFyY2hpdmUgZm9y IHZhcmlvdXMgaXRlbXMvYXR0cmlidXRlcy4NCi8vIEVhY2ggdGltZSBvbmUgb2YgdGhlIGNv bmRpdGlvbnMgaXMgbWV0LCB0aGUgdmNudCBpcyBpbmNyZW1lbWVudGVkLg0KLy8gT25jZSB0 aGUgd2hvbGUgYXJjaGl2ZSBoYXMgYmVlbiByZWFkLCBpZiB0aGUgdmNudCBtYXRjaGVzIHRo ZSBleHBlY3RlZENvdW50cyBmb3INCi8vIHRoYXQgdHlwZSwgdGhlIGFyY2hpdmUgaXMgdmFs aWQuDQpmdW5jdGlvbiBzbWRfYXRfY2hlY2tfYXJjaGl2ZSgkc3RydWN0LCAkdHlwZT0nemlw Jykgew0KCSRleHBlY3RlZENvdW50cyA9IGFycmF5KCd6aXAnID0+IDEsICd0Z3onID0+IDAs ICd0YnoyJyA9PiAwLCAndGFyJyA9PiAwKTsNCglzd2l0Y2ggKCR0eXBlKSB7DQoJCWNhc2Ug InppcCI6DQoJCQkkdmNudCA9IDA7DQoJCQlmb3JlYWNoICgkc3RydWN0IGFzICRlbnRyeSA9 PiAkaW5mbykgew0KCQkJCSRwYXJ0cyA9IHBhdGhpbmZvKCRpbmZvWydmaWxlX25hbWUnXSk7 DQoJCQkJaWYgKGlzc2V0KCRwYXJ0c1snZXh0ZW5zaW9uJ10pICYmICRwYXJ0c1snZXh0ZW5z aW9uJ10gPT0gJ3BocCcpIHsNCgkJCQkJJGRpcmJpdHMgPSBleHBsb2RlKERTLCAkcGFydHNb J2Rpcm5hbWUnXSk7DQoJCQkJCSRudW1kaXJzID0gY291bnQoJGRpcmJpdHMpOw0KCQkJCQlp ZiAoKCRwYXJ0c1snZmlsZW5hbWUnXSA9PSAkZGlyYml0c1skbnVtZGlycy0xXSkgJiYgJG51 bWRpcnM9PTEpIHsNCgkJCQkJCSR2Y250Kys7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQli cmVhazsNCgl9DQoNCglyZXR1cm4gKCRleHBlY3RlZENvdW50c1skdHlwZV0gPT0gJHZjbnQp ID8gdHJ1ZSA6IGZhbHNlOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF91cGxvYWRfaW1hZ2UoKSB7DQoJZ2xvYmFsICRmaWxlX21heF91cGxv YWRfc2l6ZTsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdpZCcpKSkpOw0KCSRf UE9TVFsnc2tpbiddID0gJHNraW4gPSAkaWQ7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZp bGUnXVsnbmFtZSddOw0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhl ZmlsZSddWyd0bXBfbmFtZSddKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmICgkZmlsZSA9PT0g ZmFsc2UpIHsNCgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuIiAk bmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1zZygkX0ZJTEVTWyd0aGVmaWxlJ11bJ2Vycm9y J10pOw0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJCWV4aXQoKTsNCgl9DQoNCgkkc2l6 ZSA9IGZpbGVzaXplKCRmaWxlKTsNCglpZiAoJGZpbGVfbWF4X3VwbG9hZF9zaXplIDwgJHNp emUpIHsNCgkJdW5saW5rKCRmaWxlKTsNCgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9h ZF9mYWlsZWQnKSAuIiAkbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1zZyhVUExPQURfRVJS X0ZPUk1fU0laRSk7DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgkJZXhpdCgpOw0KCX0N Cg0KCSRza2luZm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0KCSRuZXdfc2tpbiA9 ICRza2luZm9bJ25hbWUnXTsNCgkkbmV3cGF0aCA9ICRza2luZm9bJ3BhdGgnXTsNCg0KCWlm ICgkbmV3X3NraW4gJiYgJGZpbGUpIHsNCgkJaWYoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmls ZSwgJG5ld3BhdGguJG5hbWUpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1cGxv YWRfc3VjY2VzcycpOw0KCQl9IGVsc2Ugew0KCQkJdW5saW5rKCRmaWxlKTsNCgkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9mYWlsZWQnKTsNCgkJfQ0KCX0gZWxzZSB7DQoJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9DQoNCglzbWRfYXRf ZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2RlbGV0ZV9pbWFnZSgpIHsNCglnbG9iYWwgJHNtZF9jb3JlX3RoZW1l cywgJHNtZF9hdF9wcmVmczsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2lu JykpKSk7DQoJJGZpbGVfbGlzdCA9IGdwcygnc21kX2F0X2ltYWdlcycpOw0KCSRtZXNzYWdl PScnOw0KDQoJaWYgKGVtcHR5KCRmaWxlX2xpc3QpKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0 X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9IGVsc2Ugew0KCQlpZiAoaW5fYXJyYXkoJHNraW4s ICRzbWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3Jl X3RoZW1lX2ZpbGUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQl9IGVsc2Ugew0K CQkJJHR4cF9wYXRoID0gcnRyaW0oZ2V0X3ByZWYoJ3NtZF9hdF9maWxlX3BhdGgnLCAkc21k X2F0X3ByZWZzWzBdWydzbWRfYXRfZmlsZV9wYXRoJ10pLCBEUyk7DQoJCQlmb3JlYWNoICgk ZmlsZV9saXN0IGFzICRpbWFnZSkgew0KCQkJCSRwYXRoID0gJHR4cF9wYXRoLkRTLiRpbWFn ZTsNCgkJCQl1bmxpbmsoJHBhdGgpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJc21kX2F0X2VkaXQo JG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF9hdF9kZWxldGUoKSB7DQoJZ2xvYmFsICRzbWRfY29yZV90aGVtZXMsICR0aGVtZSwg JHNtZF9hdF9wcml2cywgJHNtZF9hdF9ldmVudCwgJHNtZF9hdF9wcmVmczsNCg0KCWV4dHJh Y3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ2ZpbGUnKSkpKTsNCgkkbWVzc2FnZT0n JzsNCg0KCWlmICgkZmlsZSkgew0KCQkvLyBFZGl0aW5nIGEgc2tpbiwgdGh1cyBkZWxldGlu ZyBhIHNpbmdsZSBmaWxlDQoJCWlmIChpbl9hcnJheSgkc2tpbiwgJHNtZF9jb3JlX3RoZW1l cykpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2NvcmVfdGhlbWVfZmlsZScsIGFy cmF5KCd7c2tpbn0nID0+ICRza2luKSk7DQoJCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJ CX0gZWxzZSB7DQoJCQkkZGVsID0gdW5saW5rKFRIRU1FLiRza2luLkRTLiRmaWxlKTsNCgkJ CWlmICgkZGVsKSB7DQoJCQkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX2RlbGV0ZWQnLCBhcnJh eSgne25hbWV9JyA9PiAkZmlsZSkpOw0KCQkJCSRfUE9TVFsnZmlsZSddID0gJyc7IC8vIENs ZWFyIHRoZSB2YXJpYWJsZSBzbyB0aGUgZmlsZW5hbWUgZG9lc24ndCBhcHBlYXIgb24gdGhl IGVkaXQgcGFnZQ0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdm aWxlX25vdF9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZpbGUpKTsNCgkJCX0NCgkJ fQ0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfSBlbHNlIHsNCgkJaWYgKGluX2FycmF5 KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4 dCgnY29yZV90aGVtZScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSk7DQoJCQlzbWRfYXRf bGlzdCgkbWVzc2FnZSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBWaWV3aW5nIHRoZSBza2luIGxp c3QsIHRodXMgZGVsZXRpbmcgdGhlIHdob2xlIHNraW4NCgkJCSRza2luZGlyID0gVEhFTUUu JHNraW47DQoJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUoJHNraW5kaXIpKSB7DQoJCQkJ JG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZGVsZXRlX2ZhaWxlZCcpOw0KCQkJfSBlbHNlIHsN CgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdza2luX2RlbGV0ZWQnLCBhcnJheSgne25h bWV9JyA9PiAkc2tpbikpOw0KCQkJfQ0KDQoJCQkvLyBIYW5kbGUgc2l0dWF0aW9ucyBpZiBj dXJyZW50IHNraW4gaGFzIGJlZW4gZGVsZXRlZA0KCQkJJHR4cF9wYXRoID0gcnRyaW0oZ2V0 X3ByZWYoJ3NtZF9hdF9maWxlX3BhdGgnLCAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfZmls ZV9wYXRoJ10pLCBEUyk7DQoJCQlpZiAoIWZpbGVfZXhpc3RzKCR0eHBfcGF0aC5EUy5USEVN RS4kc2tpbikpIHsNCgkJCQkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoNCgkJ CQkvLyBSZXNldCB0aGUgZ2xvYmFsIHNraW4gaW4gY2FzZSBpdCdzIGJlZW4gZGVsZXRlZA0K CQkJCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbidd KSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddIDogJyc7DQoJCQkJJGdibF9z a2luID0gKCRnYmxfc2tpbiAhPSAnJyAmJiBmaWxlX2V4aXN0cygkdHhwX3BhdGguRFMuVEhF TUUuJGdibF9za2luKSkgPyAkZ2JsX3NraW4gOiAnY2xhc3NpYyc7DQoJCQkJc2V0X3ByZWYo J3NtZF9hdF9nbG9iYWxfc2tpbicsICRnYmxfc2tpbiwgJHNtZF9hdF9ldmVudCwgUFJFRl9I SURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJc2V0X3ByZWYoJ3RoZW1lX25hbWUnLCAkZ2Js X3NraW4pOw0KDQoJCQkJJHNraW4gPSBnZXRfcHJlZignc21kX3NraW4nKTsNCgkJCQlpZiAo IWZpbGVfZXhpc3RzKCR0eHBfcGF0aC5EUy5USEVNRS4kc2tpbikpIHsNCgkJCQkJJHNraW4g PSAkZ2JsX3NraW47DQoJCQkJfQ0KCQkJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAn c21kX2F0JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsN CgkJCX0NCgkJCSRfR0VUWydza2luJ10gPSAkc2tpbjsNCgkJCSRfR0VUWyduZXh0c3RlcCdd ID0gJ3NtZF9hdF9saXN0JzsNCgkJCXNtZF9hdF9zd2l0Y2goJG1lc3NhZ2UpOw0KCQl9DQoJ fQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9z YXZlKCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywnbmV3X3NraW4n LCdmaWxlJywnc21kX2F0X2VkaXRzJykpKSk7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3Nj IiwgImNzcyIsICJqcyIsICJwaHAiKTsNCgkkbWVzc2FnZSA9ICRleHRyYU1zZyA9ICcnOw0K CSRmaWxlID0gdHJpbSgkZmlsZSk7DQoJJG5ld19za2luID0gdHJpbSgkbmV3X3NraW4pOw0K CSRtc2dsZXYgPSAwOw0KDQoJLy8gTmV3IGZpbGUNCglpZiAoISRmaWxlICYmICRuZXdfc2tp bikgew0KCQkkZmlsZSA9ICRuZXdfc2tpbjsNCgkJJGV4dCA9IGFycmF5X3BvcChleHBsb2Rl ICgnLicsJGZpbGUpKTsNCgkJaWYgKHN0cnRvbG93ZXIoJGZpbGUpICE9ICdyZWFkbWUnICYm ICgkZXh0ID09ICcnIHx8ICFpbl9hcnJheSgkZXh0LCAkZWRpdGFibGUpKSkgew0KCQkJJG1l c3NhZ2UgPSBzbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfZmlsZXR5cGUnKS5zbWRfYXRfZ1R4 dCgndW5zdXBwb3J0ZWRfZnVkZ2UnKTsNCgkJCSRtc2dsZXYgPSBFX1dBUk5JTkc7DQoJCQkk X1BPU1RbJ2ZpbGUnXSA9ICRmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKCRtZXNzYWdlPT0nJykg ew0KCQkkZm5hbWUgPSBzYW5pdGl6ZUZvckZpbGUoJGZpbGUpOw0KCQkkbmV3X3NraW4gPSBy YXd1cmxlbmNvZGUoJG5ld19za2luKTsNCgkJJF9QT1NUWyduZXdfc2tpbiddID0gJG5ld19z a2luOw0KDQoJCSRzbWRfYXRfZWRpdHMgPSBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywn DQonLCRzbWRfYXRfZWRpdHMpKTsgLy8gbmV3bGluZSB3b3JrYXJvdW5kDQoNCgkJaWYgKCRm bmFtZSkgew0KCQkJJGZpbGVwYXRoID0gVEhFTUUuJHNraW4uRFM7DQoJCQlpZiAoIWZpbGVf ZXhpc3RzKCRmaWxlcGF0aC4kZm5hbWUpKSB7DQoJCQkJJHJldCA9IHRvdWNoKCRmaWxlcGF0 aC4kZm5hbWUpOw0KCQkJCWlmICgkcmV0ID09PSBmYWxzZSkgew0KCQkJCQkkbWVzc2FnZSA9 IHNtZF9hdF9nVHh0KCdta2Rpcl9mYWlsZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWUp KTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIEFzc3VtaW5nIG5vIGVycm9ycyBzbyBmYXIuLi4N CgkJCWlmICgkbWVzc2FnZSA9PSAnJykgew0KCQkJCSRmaCA9IGZvcGVuKCRmaWxlcGF0aC4k Zm5hbWUsICd3YicpOw0KCQkJCWZ3cml0ZSgkZmgsICRzbWRfYXRfZWRpdHMpOw0KCQkJCWZj bG9zZSgkZmgpOw0KDQoJCQkJaWYgKCRmbmFtZSAhPSAkbmV3X3NraW4pIHsNCgkJCQkJLy8g UmVuYW1lIHRoZSBmaWxlDQoJCQkJCSRyZXMgPSByZW5hbWUoJGZpbGVwYXRoLiRmbmFtZSwg JGZpbGVwYXRoLiRuZXdfc2tpbik7DQoNCgkJCQkJLy8gSWYgdGhlIHJlbmFtZWQgZmlsZSBp cyB0aGUgdGhlbWUncyBQSFAgZmlsZSwgdHJ5IHRvIHJlbmFtZSB0aGUgbWFpbiBza2luIGRp ciB0b28NCgkJCQkJJGZpbGViaXRzID0gZXhwbG9kZSgnLicsICRuZXdfc2tpbik7DQoJCQkJ CSRvbGRmaWxlYml0cyA9IGV4cGxvZGUoJy4nLCAkZm5hbWUpOw0KCQkJCQkkZXh0ID0gYXJy YXlfcG9wKCRmaWxlYml0cyk7DQoJCQkJCWlmICgkcmVzICYmICRleHQgPT0gJ3BocCcgJiYg KCRvbGRmaWxlYml0c1swXSA9PSAkc2tpbikpIHsNCgkJCQkJCSRuZXdfZmlsZXBhdGggPSBU SEVNRS4kZmlsZWJpdHNbMF0uRFM7DQoJCQkJCQkkcmVuID0gcmVuYW1lKCRmaWxlcGF0aCwg JG5ld19maWxlcGF0aCk7DQoJCQkJCQkkZmlsZXBhdGggPSAoJHJlbikgPyAkbmV3X2ZpbGVw YXRoIDogJGZpbGVwYXRoOw0KCQkJCQkJJF9QT1NUWydza2luJ10gPSAkZmlsZWJpdHNbMF07 DQoJCQkJCX0NCgkJCQkJJGV4dHJhTXNnID0gKCRyZXMpID8gc21kX2F0X2dUeHQoJ3JlbmFt ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKSA6IHNtZF9hdF9nVHh0KCdyZW5h bWVfZmFpbGVkJyk7DQoJCQkJfQ0KDQoJCQkJLy8gUHJvY2VzcyBhbnkgY3NzIHJlcGxhY2Vt ZW50cw0KCQkJCSRmaWxlYml0cyA9IGV4cGxvZGUgKCcuJywoKCRmbmFtZT09JG5ld19za2lu KT8gJGZuYW1lIDogJG5ld19za2luKSk7DQoJCQkJJGNzc2ZpbGUgPSAkZmlsZWJpdHNbMF07 DQoJCQkJJGV4dCA9IGFycmF5X3BvcCgkZmlsZWJpdHMpOw0KCQkJCWlmICgkZXh0ID09ICdz c2MnKSB7DQoJCQkJCSRyZXBsYWNlbWVudHMgPSBhcnJheSgpOw0KCQkJCQkkbnVtX3JlcDEg PSBwcmVnX21hdGNoX2FsbCgnLyhcQFtBLVphLXowLTlfXSspOlxzKiguKik7LycsICRzbWRf YXRfZWRpdHMsICRtYXRjaGVzMSk7DQoJCQkJCSRudW1fcmVwMiA9IHByZWdfbWF0Y2hfYWxs KCcvKFxAW0EtWmEtejAtOV9dKyk6XHMqXHsoLio/KVx9L3MnLCAkc21kX2F0X2VkaXRzLCAk bWF0Y2hlczIpOw0KDQoJCQkJCS8vIFNpbXBsZSByZXBsYWNlbWVudHMNCgkJCQkJZm9yZWFj aCgkbWF0Y2hlczEgYXMgJGlkeCA9PiAkcmVwYXJyKSB7DQoJCQkJCQlpZiAoJGlkeCA9PSAw KSB7DQoJCQkJCQkJLy8gUmVtb3ZlIHRoZSB2YXIgZGVmaW5pdGlvbnMNCgkJCQkJCQlmb3Jl YWNoICgkcmVwYXJyIGFzICRyZXApIHsNCgkJCQkJCQkJJHNtZF9hdF9lZGl0cyA9IHN0cl9y ZXBsYWNlKCRyZXAsICcnLCRzbWRfYXRfZWRpdHMpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJ CQkJCWlmICgkaWR4ID09IDEpIHsNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRqZHgg PT4gJHJlcCkgew0KCQkJCQkJCQkkcmVwbGFjZW1lbnRzWyRyZXBdID0gJG1hdGNoZXMxWzJd WyRqZHhdOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIE11bHRpLWxp bmUgcmVwbGFjZW1lbnRzDQoJCQkJCWZvcmVhY2goJG1hdGNoZXMyIGFzICRpZHggPT4gJHJl cGFycikgew0KCQkJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUg dmFyIGRlZmluaXRpb25zDQoJCQkJCQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7DQoJ CQkJCQkJCSRzbWRfYXRfZWRpdHMgPSBzdHJfcmVwbGFjZSgkcmVwLCAnJywkc21kX2F0X2Vk aXRzKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7DQoJCQkJ CQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkamR4ID0+ICRyZXApIHsNCgkJCQkJCQkJJHJlcGxh Y2VtZW50c1skcmVwLic7J10gPSB0cmltKCRtYXRjaGVzMlsyXVskamR4XSk7DQoJCQkJCQkJ fQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJLy8gR2VuZXJhdGUgYW5kIHdyaXRlIHRoZSBu ZXcgY3NzIGZpbGUNCgkJCQkJJHNtZF9hdF9lZGl0cyA9IHRyaW0oc3RydHIoJHNtZF9hdF9l ZGl0cywgJHJlcGxhY2VtZW50cykpOw0KCQkJCQkkZmggPSBmb3BlbigkZmlsZXBhdGguJGNz c2ZpbGUuJy5jc3MnLCAnd2InKTsNCgkJCQkJZndyaXRlKCRmaCwgJHNtZF9hdF9lZGl0cyk7 DQoJCQkJCWZjbG9zZSgkZmgpOw0KCQkJCQlpZiAoJGZuYW1lICE9ICRuZXdfc2tpbikgew0K CQkJCQkJJG9sZGZuYW1lID0gZXhwbG9kZSAoJy4nLCAkZm5hbWUpOw0KCQkJCQkJJG9sZGZu YW1lID0gJG9sZGZuYW1lWzBdLicuY3NzJzsNCgkJCQkJCSRyZXMgPSBAdW5saW5rKCRmaWxl cGF0aC4kb2xkZm5hbWUpOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnZmlsZV9zYXZlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZSkpLmJyLiRl eHRyYU1zZzsNCgkJCX0NCgkJfQ0KCX0NCglzbWRfYXRfZWRpdChhcnJheSgkbWVzc2FnZSwg JG1zZ2xldikpOw0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUFJF RlMNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dldF9w cmVmcygpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkcHJlZmtleXMgPSBkb1F1b3Rl KGltcGxvZGUoIicsJyIsYXJyYXlfa2V5cygkc21kX2F0X3ByZWZzWzBdKSkpOw0KCSRycyA9 IHNhZmVfcm93cygnbmFtZSx2YWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5 cy4nKScpOw0KCSRhdF9wcmVmcyA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHJzIGFzICRwcmVm YXJyKSB7DQoJCSRhdF9wcmVmc1skcHJlZmFyclsnbmFtZSddXSA9ICRwcmVmYXJyWyd2YWwn XTsNCgl9DQoJcmV0dXJuICRhdF9wcmVmczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfb3B0aW9ucygkZXZlbnQsICRzdGVwLCAkbWVzc2Fn ZT0nJykgew0KCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3NldHVwKCRtZXNzYWdlPScnKSB7DQoJ Z2xvYmFsICRwcmVmcywgJHNtZF9hdF9wcmVmcywgJHNtZF9hdF9ldmVudCwgJHRoZW1lLCAk c21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X3N0eWxlczsNCg0KCSRudW1SZXFQcmVmcyA9IGNv dW50KCRzbWRfYXRfcHJlZnNbMF0pOw0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMo KTsNCgkkbnVtUm93cyA9IGNvdW50KCRhdF9wcmVmcyk7DQoNCglwYWdldG9wKGdUeHQoJ3By ZWZzJyksJG1lc3NhZ2UpOw0KDQoJLy8gVE9ETzogdXNlIGdldF9ncm91cHMoKTsNCgkkbGV2 ZWxzID0gYXJyYXkoDQovLwkJMSA9PiBnVHh0KCdwdWJsaXNoZXInKSwNCgkJMiA9PiBnVHh0 KCdtYW5hZ2luZ19lZGl0b3InKSwNCgkJMyA9PiBnVHh0KCdjb3B5X2VkaXRvcicpLA0KCQk0 ID0+IGdUeHQoJ3N0YWZmX3dyaXRlcicpLA0KCQk1ID0+IGdUeHQoJ2ZyZWVsYW5jZXInKSwN CgkJNiA9PiBnVHh0KCdkZXNpZ25lcicpLA0KCSk7DQoJJG51bUxldnMgPSBjb3VudCgkbGV2 ZWxzKTsNCg0KCS8vIFNwbGl0IHRoZSB1c2VyIHNraW4gbGlzdA0KCSR1c2tpbnMgPSBhcnJh eSgpOw0KCWlmIChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSkpIHsNCgkJ JHVza2lucyA9IGV4cGxvZGUoJywnLCAkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSk7 DQoJfQ0KDQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkp ID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSRjbHJCdG4gPSAnIFs8c3Bh biBpZD0ic21kX2NsciIgY2xhc3M9InNtZF9mYWtlYnRuIj4nLnNtZF9hdF9nVHh0KCdjbGVh cicpLic8L3NwYW4+XSc7DQoJJGJ0blNldCA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcs IHNtZF9hdF9nVHh0KCdzZXQnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuU2F2ZSA9IGZJbnB1dCgn c3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuSW5z dGFsbCA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9hdF9l dmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTpp bmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAn cHVibGlzaCcpLic8L2Zvcm0+JzsNCgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9z dCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3By ZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0Jywg J3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JzsNCgkk YnRuTGlzdCA9ICcgPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRf ZXZlbnQuJyI+Jy5zbWRfYXRfZ1R4dCgoKCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6 ICdza2luX2dyaWQnKSkuJzwvYT48YnIgLz4nOw0KCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJv cmRlcjowO2hlaWdodDoyNXB4Iic7DQoJJHJhZEJ0bnMgPSBhcnJheSgNCgkJc21kX2F0X2dU eHQoJ3Blcl9zaXRlJyksDQoJCXNtZF9hdF9nVHh0KCdwZXJfZ3JvdXAnKSwNCgkJc21kX2F0 X2dUeHQoJ3Blcl91c2VyJyksDQoJKTsNCg0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0K CWlmICgkbnVtUm93cyA9PSAkbnVtUmVxUHJlZnMpIHsNCgkJLy8gUHJlZnMgYWxsIGluc3Rh bGxlZA0KCQkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCQkvLyBzZWxl Y3RJbnB1dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0 aGlzIGNhc2UNCgkJJHNraW5zZWwgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRza2luX2xpc3Qg YXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkJaWYgKHNtZF9hdF9leGlzdHMoJHZhbHVlMSkp IHsNCgkJCQkkc2tpbnNlbFskdmFsdWUxXSA9ICRza2luX2xpc3RbJGtleTFdOw0KCQkJfQ0K CQl9DQoJCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tp biddKSAmJiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddICE9ICcnKSA/ICRhdF9w cmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAkdGhlbWUtPm5hbWU7DQoNCgkJZWNobyB0 cih0ZGEoc3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFuPSIy IicpIC4gdGRhKCRidG5SZW1vdmUuJGJ0bkxpc3QsICRidG5TdHlsZSkgKTsNCgkJZWNobyAn PGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYj Mzg7c3RlcD1zbWRfYXRfcHJlZnNfdXBkYXRlIiBvbnN1Ym1pdD0icmV0dXJuIHNtZF9wcmVz dWIoKTsiPic7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjYXNlX3NvcnQnKSkudGRh KHllc25vUmFkaW8oJ3NtZF9hdF9jYXNlX3NvcnQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jYXNl X3NvcnQnXSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9jYXNlX3NvcnQiJykpOw0KCQll Y2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnY3J1c2hfdHlwZScpKS50ZGEocmFkaW9TZXQoc21k X2F0X2NydXNoX29wdGlvbnMoKSwgJ3NtZF9hdF9jcnVzaCcsICRhdF9wcmVmc1snc21kX2F0 X2NydXNoJ10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfY3J1c2giJykpOw0KCQllY2hv IHRyKHRkYShzbWRfYXRfZ1R4dCgnbGF5b3V0JykpLnRkYShyYWRpb1NldChhcnJheShzbWRf YXRfZ1R4dCgnbGF5b3V0X2xpc3QnKSwgc21kX2F0X2dUeHQoJ2xheW91dF9ncmlkJykpLCAn c21kX2F0X2xheW91dCcsICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSwgJyB3aWR0aD0i MjQwIiBpZD0ic21kX2F0X2xheW91dCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0 KCd0aHVtYnNpemUnKSkudGRhKGZJbnB1dCgndGV4dCcsICdzbWRfYXRfdHcnLCAkYXRfcHJl ZnNbJ3NtZF9hdF90dyddLCcnLCcnLCcnLDQpLnNtZF9hdF9nVHh0KCd0aW1lcycpLmZJbnB1 dCgndGV4dCcsICdzbWRfYXRfdGgnLCAkYXRfcHJlZnNbJ3NtZF9hdF90aCddLCcnLCcnLCcn LDQpKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCd0eHBfcGF0aCcpKS50ZGEoZklu cHV0KCd0ZXh0JywgJ3NtZF9hdF9maWxlX3BhdGgnLCAkYXRfcHJlZnNbJ3NtZF9hdF9maWxl X3BhdGgnXSwnJywnJywnJyw2MCkpKTsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2Zp bGVuYW1lX2Zvcm1hdCcpKS50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9hdF9maWxlbmFtZV9m b3JtYXQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9maWxlbmFtZV9mb3JtYXQnXSkpKTsNCgkJZWNo byB0cigNCgkJCXRkKHNtZF9hdF9nVHh0KCdnbG9iYWxfc2tpbicpKQ0KCQkJLnRkKHNlbGVj dElucHV0KCdzbWRfYXRfZ2xvYmFsX3NraW4nLCAkc2tpbnNlbCwgJGdibF9za2luLCAwLCAw KSkNCgkJKTsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ3NraW5fc3lzdGVtJykpLnRk YShyYWRpb1NldCgkcmFkQnRucywgJ3NtZF9hdF9zeXN0ZW0nLCAkYXRfcHJlZnNbJ3NtZF9h dF9zeXN0ZW0nXSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9yYWRpbyInKSk7DQoNCgkJ Ly8gT3B0aW9uIDENCgkJJHByaXZfbGlzdCA9ICc8c2VsZWN0IGlkPSJzbWRfYXRfcHJpdnMi IG5hbWU9InNtZF9hdF9wcml2c1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iJy4kbnVtTGV2cy4n IiBtdWx0aXBsZT0ibXVsdGlwbGUiPic7DQoJCWZvcmVhY2ggKCRsZXZlbHMgYXMgJGxldmlk ID0+ICRsZXZuYW1lKSB7DQoJCQkkcHJpdl9saXN0IC49ICc8b3B0aW9uIHZhbHVlPSInLiRs ZXZpZC4nIj4nLiRsZXZuYW1lLic8L29wdGlvbj4nOw0KCQl9DQoJCSRwcml2X2xpc3QgLj0g Jzwvc2VsZWN0Pic7DQoNCgkJLy8gTm90ZSB0aGUgaGlkZGVuIHNraW4gZ3JvdXAgYm94OyBq UXVlcnkga2VlcHMgdHJhY2sgb2YgYW55IGxpc3QgY2hhbmdlcyBhbmQga2VlcHMgaXQgdXBk YXRlZA0KCQkkc2VsYSA9IHNtZF9hdF9nVHh0KCdza2luX2dyb3VwcycpOw0KCQkkc2VsYiA9 IGhJbnB1dCgnc21kX2F0X2dyb3VwX2xpc3QnLCAkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9s aXN0J10pOw0KCQkkc2VsYiAuPSAnPHNlbGVjdCBpZD0ic21kX2F0X2dycHMiIG5hbWU9InNt ZF9hdF9ncnBzIiBjbGFzcz0ibGlzdCIgc2l6ZT0iJy4kbnVtTGV2cy4nIj4nOw0KCQlmb3Jl YWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0KCQkJaWYgKHNtZF9hdF9leGlzdHMoJGFz a2luKSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9uIHZhbHVlPSInLiRhc2tpbi4nIj4nLiRh c2tpbi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJfQ0KCQkkc2VsYiAuPSAnPC9zZWxlY3Q+JzsN CgkJZWNobyB0cih0ZGEoJHNlbGEsICcgY2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4i JykgLiB0ZGEoJHNlbGIuJHByaXZfbGlzdCwgJyB3aWR0aD0iNDAwIiBjbGFzcz0ic21kX2F0 X3NlbDEgc21kX2hpZGRlbiInKSk7DQoNCgkJLy8gT3B0aW9uIDINCgkJJHNlbGEgPSBzbWRf YXRfZ1R4dCgnYWxsb3dlZF9za2lucycpOw0KCQkkc2VsYiA9ICc8c2VsZWN0IGlkPSJzbWRf YXRfdXNlcl9saXN0IiBuYW1lPSJzbWRfYXRfdXNlcl9saXN0W10iIGNsYXNzPSJsaXN0IiBz aXplPSI4IiBtdWx0aXBsZT0ibXVsdGlwbGUiPic7DQoJCWZvcmVhY2ggKCRza2luX2xpc3Qg YXMgJGFza2luKSB7DQoJCQlpZiAoc21kX2F0X2V4aXN0cygkYXNraW4pKSB7DQoJCQkJJHNl bGIgLj0gJzxvcHRpb24gdmFsdWU9IicuJGFza2luLiciJy4oKGluX2FycmF5KCRhc2tpbiwg JHVza2lucykpID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPicuJGFza2luLic8 L29wdGlvbj4nOw0KCQkJfQ0KCQl9DQoJCSRzZWxiIC49ICc8L3NlbGVjdD4nLiRjbHJCdG47 DQoJCWVjaG8gdHIodGRhKCRzZWxhLCAnIGNsYXNzPSJzbWRfYXRfc2VsMiBzbWRfaGlkZGVu IicpIC4gdGRhKCRzZWxiLCAnIHdpZHRoPSIyNDAiIGNsYXNzPSJzbWRfYXRfc2VsMiBzbWRf aGlkZGVuIicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0blNhdmUsICRidG5TdHlsZSkpOw0KCQll Y2hvICc8L2Zvcm0+JzsNCgl9IGVsc2UgaWYgKCRudW1Sb3dzID4gMCAmJiAkbnVtUm93cyA8 ICRudW1SZXFQcmVmcykgew0KCQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3By ZWZzX3NvbWUnKSkuYnIuYnINCgkJCQkJCS5zbWRfYXRfZ1R4dCgncHJlZnNfc29tZV9leHBs YWluJykuYnIuYnINCgkJCQkJCS5zbWRfYXRfZ1R4dCgncHJlZnNfc29tZV9vcHRpb25zJyks ICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5SZW1vdmUsJGJ0blN0eWxl KSAuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7DQoJfSBlbHNlIHsNCgkJZWNobyB0 cih0ZGEoc21kX2F0X2dUeHQoJ3ByZWZzX25vdF9pbnN0YWxsZWQnKSwgJyBjb2xzcGFuPSIy IicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCX0NCgll Y2hvIGVuZFRhYmxlKCk7DQoNCgllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0Ij4NCg0KLy8gQ29uY2F0ZW5hdGUgY2hlY2tib3ggb3B0aW9ucyBmb3Igc3Rv cmFnZQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzd2FwKHNlbFZhbHVlKSB7DQoJZm9yIChpZHg9 MDsgaWR4IDwgMzsgaWR4KyspIHsNCgkJaWYgKGlkeD09c2VsVmFsdWUpIHsNCgkJCWpRdWVy eSgiLnNtZF9hdF9zZWwiK2lkeCkuc2hvdygpOw0KCQl9IGVsc2Ugew0KCQkJalF1ZXJ5KCIu c21kX2F0X3NlbCIraWR4KS5oaWRlKCk7DQoJCX0NCgl9DQp9DQpqUXVlcnkoZnVuY3Rpb24o KSB7DQoJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfc3lzdGVtJ10iKS5jaGFuZ2UoZnVu Y3Rpb24oKSB7DQoJCXNtZF9hdF9wcmVmc3dhcCh0aGlzLnZhbHVlKTsNCgl9KTsNCg0KCWpR dWVyeSgnI3NtZF9jbHInKS5jbGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KCcjc21kX2F0 X3VzZXJfbGlzdCBvcHRpb24nKS5hdHRyKCJzZWxlY3RlZCIsICIiKTsNCgl9KTsNCg0KCWpR dWVyeSgiI3NtZF9hdF9ncnBzIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzZWxza2luID0g alF1ZXJ5KHRoaXMpLnZhbCgpOw0KDQoJCS8vIENsZWFyIHRoZSBvbGQgcHJpdnMgbGlzdCBh bmQgZ3JhYiB0aGUgY3VycmVudCBsaXN0IGZyb20gdGhlIGhpZGRlbiBmaWVsZA0KCQlqUXVl cnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uIikuYXR0cigic2VsZWN0ZWQiLGZhbHNlKTsNCgkJ dmFyIGdycGxpc3QgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10i KS52YWwoKTsNCgkJdmFyIGdycHMgPSBncnBsaXN0LnNwbGl0KCcsJyk7DQoJCXZhciBjbnQg PSBncnBzLmxlbmd0aDsNCgkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgY250OyBpZHgrKykg ew0KCQkJcHJpdnMgPSBncnBzW2lkeF0uc3BsaXQoJzonKTsNCgkJCXNraW5pZCA9IHByaXZz LnNoaWZ0KCk7DQoJCQlpZiAoc2tpbmlkID09IHNlbHNraW4pIHsNCgkJCQludW1Qcml2cyA9 IHByaXZzLmxlbmd0aDsNCgkJCQlmb3IgKGpkeCA9IDA7IGpkeCA8IG51bVByaXZzOyBqZHgr Kykgew0KCQkJCQlqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uW3ZhbHVlPSciK3ByaXZz W2pkeF0rIiddIikuYXR0cigic2VsZWN0ZWQiLCB0cnVlKTsNCgkJCQl9DQoJCQl9DQoJCX0N Cgl9KTsNCg0KCWpRdWVyeSgiI3NtZF9hdF9wcml2cyIpLmNoYW5nZShmdW5jdGlvbigpIHsN CgkJc2Vsc2tpbiA9IGpRdWVyeSgiI3NtZF9hdF9ncnBzIG9wdGlvbjpzZWxlY3RlZCIpLnZh bCgpOw0KCQl2YXIgb3V0ID0gW107DQoJCXZhciBwcml2cyA9IFtdOw0KCQlwcml2cy5wdXNo KHNlbHNraW4pOw0KCQlqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uOnNlbGVjdGVkIiku ZWFjaChmdW5jdGlvbigpIHsNCgkJCXByaXZzLnB1c2goalF1ZXJ5KHRoaXMpLnZhbCgpKTsN CgkJfSk7DQoJCWlmIChwcml2cy5sZW5ndGggPT0gMSkgew0KCQkJcHJpdnMucG9wKCk7DQoJ CX0gZWxzZSB7DQoJCQlvdXQucHVzaChwcml2cy5qb2luKCI6IikpOw0KCQl9DQoJCXZhciBo aWRsaXN0ID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFs KCk7DQoJCXZhciBwcmV2bGlzdCA9IGhpZGxpc3Quc3BsaXQoJywnKTsNCgkJdmFyIHByZXZj bnQgPSBwcmV2bGlzdC5sZW5ndGg7DQoNCgkJalF1ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9u IikuZWFjaChmdW5jdGlvbigpIHsNCgkJCWN1cnJza2luID0galF1ZXJ5KHRoaXMpLnZhbCgp Ow0KCQkJaWYgKGN1cnJza2luICE9IHNlbHNraW4pIHsNCgkJCQlmb3IgKHZhciBpZHggPSAw OyBpZHggPCBwcmV2Y250OyBpZHgrKykgew0KCQkJCQlwcmV2cHJpdnMgPSBwcmV2bGlzdFtp ZHhdLnNwbGl0KCc6Jyk7DQoJCQkJCXNraW5pZCA9IHByZXZwcml2cy5zaGlmdCgpOw0KCQkJ CQkvLyBHZW5lcmF0ZSB0aGUgcHJpdiBsaXN0IGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVk IHNraW4sIHJlbW92aW5nIGFueSBkdXBsaWNhdGUgcHJpdnMgc2V0IGVsc2V3aGVyZQ0KCQkJ CQlpZiAoc2tpbmlkID09IGN1cnJza2luKSB7DQoJCQkJCQl0bXBvdXQgPSBbXTsNCgkJCQkJ CXRtcG91dC5wdXNoKHNraW5pZCk7DQoJCQkJCQlmb3IgKHRoaXNwcml2IGluIHByZXZwcml2 cykgew0KCQkJCQkJCWlmIChqUXVlcnkuaW5BcnJheShwcmV2cHJpdnNbdGhpc3ByaXZdLCBw cml2cykgPCAwKSB7DQoJCQkJCQkJCXRtcG91dC5wdXNoKHByZXZwcml2c1t0aGlzcHJpdl0p Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmICh0bXBvdXQubGVuZ3RoID4gMSkgew0K CQkJCQkJCW91dC5wdXNoKHRtcG91dC5qb2luKCI6IikpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJ CQkJfQ0KCQkJfQ0KCQl9KTsNCgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBf bGlzdCddIikudmFsKG91dCk7DQoJfSk7DQoNCgkvLyBEaXNwbGF5IGEgdG9vbHRpcCBzaG93 aW5nIHRoZSBjdXJyZW50bHktYXNzaWduZWQgc2tpbiB3aGVuIGhvdmVyaW5nIG92ZXIgYSBw cml2aWxlZ2UgbGV2ZWwNCglqUXVlcnkoIiNzbWRfYXRfcHJpdnMgb3B0aW9uIikuaG92ZXIo ZnVuY3Rpb24oKSB7DQoJCWhvdml0ZW0gPSBqUXVlcnkodGhpcykudmFsKCk7DQoJCWdycHMg PSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwoKTsNCgkJ aXRlbXMgPSBncnBzLnNwbGl0KCIsIik7DQoJCWZvciAoaWR4ID0gMDsgaWR4IDwgaXRlbXMu bGVuZ3RoOyBpZHgrKykgew0KCQkJc2tpbnogPSBpdGVtc1tpZHhdLnNwbGl0KCI6Iik7DQoJ CQlmb3IgKGpkeCA9IDE7IGpkeCA8IHNraW56Lmxlbmd0aDsgamR4KyspIHsNCgkJCQlpZiAo c2tpbnpbamR4XSA9PSBob3ZpdGVtKSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5hdHRyKCJ0aXRs ZSIsIHNraW56WzBdKTsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSwNCglm dW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIoInRpdGxlIiwgIiIpOw0KCX0pOw0K CXNtZF9hdF9wcmVmc3dhcChqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9zeXN0ZW0nXTpj aGVja2VkIikudmFsKCkpOw0KCWpRdWVyeSgiI3NtZF9hdF9wcml2cyIpLmNoYW5nZSgpOw0K fSk7DQo8L3NjcmlwdD4NCkVPSlM7DQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4n Ow0KCWVjaG8gJHNtZF9hdF9zdHlsZXNbJ2NvbW1vbiddLm4uJHNtZF9hdF9zdHlsZXNbJ3Nl dHVwJ107DQoJZWNobyAnPC9zdHlsZT4nOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIFNwbGl0IGEgbXVsdGktY2hhciBwcmVmZXJlbmNlIHZhbHVlIGludG8gYW4g YXJyYXkgb2Yga2V5cy92YWx1ZXMuDQovLyBOb3RlOiB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5k IG5vdCByZWFkIGRpcmVjdGx5IGZyb20gdGhlIHByZWZzIGFycmF5IGluIHRoaXMgZnVuY3Rp b24gLSBpbnRlbnRpb25hbGx5DQpmdW5jdGlvbiBzbWRfYXRfcHJlZl9leHBsb2RlKCR2YWwp IHsNCgkkb3JkZXIgPSBhcnJheV92YWx1ZXMoYXJyYXkoc21kX2F0X2dUeHQoJ2NfZ3ppcCcp LHNtZF9hdF9nVHh0KCdjX2J6aXAnKSxzbWRfYXRfZ1R4dCgnY196aXAnKSkpOw0KCSRvbm9m ZiA9IGFycmF5X3ZhbHVlcyhwcmVnX3NwbGl0KCcvLycsICR2YWwsIC0xLCBQUkVHX1NQTElU X05PX0VNUFRZKSk7DQoJJG91dCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkb3JkZXIgYXMgJGtl eTEgPT4gJHZhbHVlMSkgew0KCQkkb3V0WyhzdHJpbmcpJHZhbHVlMV0gPSAkb25vZmZbJGtl eTFdOw0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2F0X3ByZWZzX2luc3RhbGwoJHNob3dwYW5lPScxJykgew0KCWdsb2JhbCAkc21kX2F0X3By ZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJZm9yZWFjaCAoJHNtZF9hdF9wcmVmc1swXSBhcyAk cHJlZiA9PiAkZGZsdCkgew0KCQlpZiAoIWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFt ZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNf aWQ9MSwgbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUo ZG9TbGFzaCgkZGZsdCkpLicsZXZlbnQ9InNtZF9hZHNraW4iJyk7DQoJCX0NCgl9DQoJaWYg KCRzaG93cGFuZSkgew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdwcmVmc19pbnN0YWxs ZWQnKTsNCgkJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19yZW1vdmUoJHNob3dwYW5lPScxJykgew0KCWdsb2Jh bCAkc21kX2F0X3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJZm9yZWFjaCAoYXJyYXlfbWVy Z2UoJHNtZF9hdF9wcmVmc1swXSwkc21kX2F0X3ByZWZzWzFdKSBhcyAkcHJlZiA9PiAkZGZs dCkgew0KCQlpZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsN CgkJCSRpZCA9IHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCduYW1lPScuZG9RdW90ZShkb1Ns YXNoKCRwcmVmKSkpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgncHJlZnNfZGVsZXRlZCcpOw0KCQlzbWRfYXRfc2V0dXAoJG1lc3Nh Z2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzX3VwZGF0 ZSgpIHsNCglnbG9iYWwgJHNtZF9wbHVnaW5fcHJlZnMsICRzbWRfYXRfcHJlZnMsICRzbWRf YXRfZXZlbnQ7DQoNCgkkbWVzc2FnZSA9ICcnOw0KCSRwb3N0ID0gYXJyYXkoKTsNCgkkcG9z dFsnc21kX2F0X2dsb2JhbF9za2luJ10gPSBncHMoJ3NtZF9hdF9nbG9iYWxfc2tpbicpOw0K CSRwb3N0WydzbWRfYXRfc3lzdGVtJ10gPSBncHMoJ3NtZF9hdF9zeXN0ZW0nKTsNCgkkcG9z dFsnc21kX2F0X2xheW91dCddID0gZ3BzKCdzbWRfYXRfbGF5b3V0Jyk7DQoJJHBvc3RbJ3Nt ZF9hdF9jYXNlX3NvcnQnXSA9IGdwcygnc21kX2F0X2Nhc2Vfc29ydCcpOw0KCSRwb3N0Wydz bWRfYXRfdHcnXSA9IGdwcygnc21kX2F0X3R3Jyk7DQoJJHBvc3RbJ3NtZF9hdF90aCddID0g Z3BzKCdzbWRfYXRfdGgnKTsNCgkkcG9zdFsnc21kX2F0X2ZpbGVuYW1lX2Zvcm1hdCddID0g Z3BzKCdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0Jyk7DQoJaWYgKGdwcygnc21kX2F0X3VzZXJf bGlzdCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfdXNlcl9saXN0J10gPSBqb2luKCcsJywgZ3Bz KCdzbWRfYXRfdXNlcl9saXN0JykpOw0KCX0gZWxzZSB7DQoJCSRwb3N0WydzbWRfYXRfdXNl cl9saXN0J10gPSAnJzsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2dyb3VwX2xpc3QnKSkgew0K CQkkcG9zdFsnc21kX2F0X2dyb3VwX2xpc3QnXSA9IGdwcygnc21kX2F0X2dyb3VwX2xpc3Qn KTsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2NydXNoJykpIHsNCgkJJHBvc3RbJ3NtZF9hdF9j cnVzaCddID0gZ3BzKCdzbWRfYXRfY3J1c2gnKTsNCgl9DQoNCgkvLyBTZXQgdGhlIHN5c3Rl bS13aWRlIHRoZW1lIHRvIHRoZSBnbG9iYWwgdGhlbWUNCglpZiAoJHBvc3RbJ3NtZF9hdF9n bG9iYWxfc2tpbiddKSB7DQoJCXNldF9wcmVmKCd0aGVtZV9uYW1lJywgJHBvc3RbJ3NtZF9h dF9nbG9iYWxfc2tpbiddKTsNCgl9DQoNCglmb3JlYWNoICgkc21kX2F0X3ByZWZzWzBdIGFz ICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9zdFskcHJlZl0pKSB7DQoJCQlz ZXRfcHJlZigkcHJlZiwgJHBvc3RbJHByZWZdLCAkc21kX2F0X2V2ZW50LCAyKTsNCgkJfQ0K CX0NCgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJc21kX2F0X3Nl dHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBV VElMSVRZIEZVTkNUSU9OUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfZ2V0X3ByaXZzKCR1c2VyPScnKSB7DQoJZ2xvYmFsICR0eHBfdXNlcjsNCgkk dXNlciA9ICgkdXNlcikgPyAkdXNlciA6ICR0eHBfdXNlcjsNCgkkcHJpdnMgPSBzYWZlX2Zp ZWxkKCJwcml2cyIsICJ0eHBfdXNlcnMiLCAibmFtZT0nIi5kb1NsYXNoKCR1c2VyKS4iJyIp Ow0KCXJldHVybiAkcHJpdnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX2F0X2V4aXN0cygkbmFtZSkgew0KCSRpbnN0YW5jZSA9IHRoZW1lOjpm YWN0b3J5KCRuYW1lKTsNCglyZXR1cm4gJGluc3RhbmNlOw0KfQ0KDQovLyBJZiBwZXItdXNl ciBza2luIHN1cHBvcnQgaXMgT0ZGLCB0aGUgZ2xvYmFsIHNraW4gd2lucy4NCi8vIE9uZSBl eGNlcHRpb246IGlmIHRoZSB1c2VyIGlzIGFuIGFkbWluLCBhbGxvdyB0aGUgY3VycmVudCBz a2luIHRvIHByZXZhaWwgc28gdGhleSBtYXkgc3dpdGNoIHNraW5zIHdpdGggaW1wdW5pdHkN Ci8vIGFuZCBub3QgYWZmZWN0IHRoZSBnbG9iYWwgc2tpbg0KZnVuY3Rpb24gc21kX2F0X3Bl cigpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2cywgJHByZWZzLCAkdGhlbWUsICR0eHBfdXNl cjsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkc2tpblN5cyA9IGlz c2V0KCRhdF9wcmVmc1snc21kX2F0X3N5c3RlbSddKSA/ICRhdF9wcmVmc1snc21kX2F0X3N5 c3RlbSddIDogMDsNCgkkcHJpdnMgPSBzbWRfYXRfZ2V0X3ByaXZzKCk7DQoJJGdibF9za2lu ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pICYmICRhdF9wcmVm c1snc21kX2F0X2dsb2JhbF9za2luJ10gIT0gJycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xv YmFsX3NraW4nXSA6ICcnOw0KCSRnYmxfc2tpbiA9IChzbWRfYXRfZXhpc3RzKCRnYmxfc2tp bikpID8gJGdibF9za2luIDogJ2NsYXNzaWMnOw0KDQoJc3dpdGNoICgkc2tpblN5cykgew0K CQljYXNlIDA6DQoJCQkvLyBHbG9iYWwgZm9yY2VkIHNraW4gKGV4Y2VwdCBhZG1pbnMpDQoJ CQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMpKSkg ew0KCQkJCXJldHVybiAkZ2JsX3NraW47DQoJCQl9IGVsc2Ugew0KCQkJCS8vIEFkbWlucw0K CQkJCSRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRn Ymxfc2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoc21kX2F0X2V4aXN0cygk YWRtX3NraW4pKSA/ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJCX0NCgkJCWJyZWFrOw0K CQljYXNlIDE6DQoJCQkvLyBHcm91cC1sZXZlbCBmb3JjZWQgc2tpbnMNCgkJCWlmICghaW5f YXJyYXkoJHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJJGZv cmNlU2tpbnMgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKSkgPyAk YXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10gOiAoKCRnYmxfc2tpbikgPyAkZ2JsX3Nr aW4gOiAkdGhlbWUtPm5hbWUpOw0KDQoJCQkJLy8gU3BsaXQgdGhlIGdyb3VwIHNraW4gbGlz dA0KCQkJCSRnc2tpbnMgPSBhcnJheSgpOw0KCQkJCSRnb3B0cyA9IGV4cGxvZGUoJywnLCAk Zm9yY2VTa2lucyk7DQoJCQkJZm9yZWFjaCAoJGdvcHRzIGFzICRncnBkZWYpIHsNCgkJCQkJ aWYgKCRncnBkZWYgPT0gJycpIGNvbnRpbnVlOw0KCQkJCQkkcHJpdmdycCA9IGV4cGxvZGUo IjoiLCAkZ3JwZGVmKTsNCgkJCQkJJHNraW5pZCA9IGFycmF5X3NoaWZ0KCRwcml2Z3JwKTsN CgkJCQkJaWYgKGluX2FycmF5KCRwcml2cywgJHByaXZncnApKSB7DQoJCQkJCQlyZXR1cm4g KHNtZF9hdF9leGlzdHMoJHNraW5pZCkpID8gJHNraW5pZCA6ICdjbGFzc2ljJzs7DQoJCQkJ CX0NCgkJCQl9DQoJCQkJcmV0dXJuICgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1l LT5uYW1lOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBn ZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUt Pm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRt X3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAyOg0KCQkJLy8g UGVyLXVzZXIgc2tpbi4gSWYgdXNlciBpcyBub24tYWRtaW4sIGNoZWNrIHRoZSBza2luIGlz IGluIHRoZSBhbGxvd2VkIGxpc3QNCgkJCWlmICghaW5fYXJyYXkoJHByaXZzLCBleHBsb2Rl KCcsJywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJJHZhbGlkU2tpbnMgPSAoaXNzZXQoJGF0 X3ByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X3VzZXJf bGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKTsNCgkJ CQkkdmFsaWRTa2lucyA9IGRvX2xpc3QoJHZhbGlkU2tpbnMpOw0KCQkJCSR0aGVfc2tpbiA9 IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVt ZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoaW5fYXJyYXkoJHRoZV9za2luLCAkdmFsaWRTa2lu cykgJiYgc21kX2F0X2V4aXN0cygkdGhlX3NraW4pKSA/ICR0aGVfc2tpbiA6ICcnOw0KCQkJ fSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRfcHJlZignc21k X3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJ CQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3NraW4gOiAnY2xh c3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gUmVhZCBhbmQgcmV0dXJuIHRoZSBtYW5pZmVzdCwgaWYgaXQgZXhpc3Rz IGFuZCBhZGQgYSBmZXcgb3RoZXIgbmljZXRpZXMgdG8gdGhlIGFycmF5IGZvciBsYXRlcg0K ZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKSB7DQoJZ2xvYmFsICRzbWRfY29y ZV90aGVtZXM7DQoNCgkkdGhpc190aGVtZSA9IHRoZW1lOjpmYWN0b3J5KCRza2luKTsNCgkk c2tpbmZvID0gYXJyYXkoKTsNCglpZiAoJHRoaXNfdGhlbWUpIHsNCgkJJHNraW5mbyA9ICR0 aGlzX3RoZW1lLT5tYW5pZmVzdCgpOw0KCQkkc2tpbmZvWydkbmFtZSddID0gZW1wdHkoJHNr aW5mb1sndGl0bGUnXSkgPyB1Y3dvcmRzKCR0aGlzX3RoZW1lLT5uYW1lKSA6ICRza2luZm9b J3RpdGxlJ107DQoJCSRza2luZm9bJ25hbWUnXSA9ICR0aGlzX3RoZW1lLT5uYW1lOw0KCQkk c2tpbmZvWydwYXRoJ10gPSAkdGhpc190aGVtZS0+dXJsOw0KCQkkc2tpbmZvWydwaHBmaWxl J10gPSAkdGhpc190aGVtZS0+cGF0aCgkc2tpbik7DQoJCSRza2luZm9bJ2Jhc2VkX29uJ10g PSAnJzsNCgkJJGNvbnRlbnRzID0gZmlsZV9nZXRfY29udGVudHMoJHNraW5mb1sncGhwZmls ZSddKTsNCgkJaWYgKCgkcG9zID0gc3RycG9zKCRjb250ZW50cywgJ3RoZW1lOjpiYXNlZF9v bicpKSAhPT0gZmFsc2UpIHsNCgkJCSRiZWdwb3MgPSBzdHJwb3MoJGNvbnRlbnRzLCAiJyIs ICRwb3MpKzE7DQoJCQkkZW5kcG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkYmVncG9z KTsNCgkJCSRiYXNlID0gc3Vic3RyKCRjb250ZW50cywgJGJlZ3BvcywgJGVuZHBvcy0kYmVn cG9zKTsNCgkJCSRza2luZm9bJ2Jhc2VkX29uJ10gPSAoaW5fYXJyYXkoJGJhc2UsICRzbWRf Y29yZV90aGVtZXMpKSA/ICcnIDogJGJhc2U7DQoJCX0NCgkJdW5zZXQoJHRoaXNfdGhlbWUp Ow0KCX0NCglyZXR1cm4gJHNraW5mbzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBHcmFiIHRoZSB0aHVtYm5haWwgZmlsZW5hbWUgaWYgaXQgZXhpc3RzLCBvcHRp b25hbGx5IHJldHVybiBhIGZvcm1hdHRlZCBpbWcgdGFnDQpmdW5jdGlvbiBzbWRfYXRfZ2V0 X3RodW1iKCRza2luLCAkaW1nPTApIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCg0KCSRh dF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkdHcgPSBpc3NldCgkYXRfcHJlZnNb J3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21kX2F0X3ByZWZz WzBdWydzbWRfYXRfdHcnXTsNCgkkdGggPSBpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90aCdd KSA/ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRf dGgnXTsNCgkkdXNlX3RodW1iID0gKCR0dyA9PSAwIHx8ICR0aCA9PSAwKSA/IGZhbHNlIDog dHJ1ZTsNCg0KCS8vIEFuIGFycmF5IG1lYW5zIHRoZSBtYW5pZmVzdCBoYXMgYWxyZWFkeSBi ZWVuIHJlYWQgYW5kIGlzIGJlaW5nIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24NCglpZiAo IWlzX2FycmF5KCRza2luKSkgew0KCQkkc2tpbiA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tp bik7DQoJfQ0KCWlmICgkc2tpbikgew0KCQkkc2tpbmRpciA9ICRza2luWydwYXRoJ107DQoJ CSR0aHVtYm5hbWUgPSBnbG9iKCRza2luZGlyLidzY3JlZW5zaG90LionKTsNCgkJcmV0dXJu ICgkaW1nICYmICR1c2VfdGh1bWIgJiYgJHRodW1ibmFtZSAmJiBmaWxlX2V4aXN0cygkdGh1 bWJuYW1lWzBdKSkgPyAnPGltZyBzcmM9IicuJHRodW1ibmFtZVswXS4nIiBhbHQ9IicuKChp c3NldCgkc2tpblsnbmFtZSddKSkgPyAkc2tpblsnbmFtZSddIDogJycpLicgdGh1bWJuYWls IiBzdHlsZT0iYm9yZGVyOjJweCByaWRnZSAjOTk5O3BhZGRpbmc6MnB4OyIgd2lkdGg9Iicu JHR3LiciIGhlaWdodD0iJy4kdGguJyIgLz4nIDogJyc7DQoJfSBlbHNlIHsNCgkJcmV0dXJu ICcnOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBz bWRfYXRfcmVhZF9za2lucygpIHsNCgkkc2tpbl9saXN0ID0gdGhlbWU6Om5hbWVzKCk7DQoJ JHNraW5fbGlzdCA9IHNtZF9hdF9zb3J0KCRza2luX2xpc3QpOw0KCXJldHVybiAkc2tpbl9s aXN0Ow0KfQ0KDQovLyBTb3J0IHRoZSBza2lucyBidXQga2VlcCAnY2xhc3NpYycgYXQgdGhl IHRvcA0KZnVuY3Rpb24gc21kX2F0X3NvcnQoJHNraW5fbGlzdCkgew0KCWdsb2JhbCAkcHJl ZnM7DQoNCgkkY2FzZVNlbnNlID0gaXNzZXQoJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10p ID8gJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10gOiAxOw0KDQoJaWYoJGNhc2VTZW5zZSkg ew0KCQluYXRzb3J0KCRza2luX2xpc3QpOw0KCX0gZWxzZSB7DQoJCW5hdGNhc2Vzb3J0KCRz a2luX2xpc3QpOw0KCX0NCgkkZGZsdF9mb3VuZCA9IGZhbHNlOw0KCWZvcmVhY2ggKCRza2lu X2xpc3QgYXMgJHNraW5faWR4ID0+ICRza2luX25hbWUpIHsNCgkJaWYgKCRza2luX25hbWUg PT0gImNsYXNzaWMiKSB7DQoJCQl1bnNldCgkc2tpbl9saXN0WyRza2luX2lkeF0pOw0KCQkJ JGRmbHRfZm91bmQgPSB0cnVlOw0KCQkJYnJlYWs7DQoJCX0NCgl9DQoJaWYgKCRkZmx0X2Zv dW5kKSB7DQoJCWFycmF5X3Vuc2hpZnQoJHNraW5fbGlzdCwiY2xhc3NpYyIpOw0KCX0NCg0K CXJldHVybiAkc2tpbl9saXN0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9hdF9saXN0ZGlyKCRzdGFydF9kaXI9Jy4nKSB7DQoJJGZpbGVzID0g YXJyYXkoKTsNCg0KCWlmIChpc19kaXIoJHN0YXJ0X2RpcikpIHsNCgkJJGZoID0gb3BlbmRp cigkc3RhcnRfZGlyKTsNCgkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGZoKSkgIT09IGZh bHNlKSB7DQoJCQkvLyBsb29wIHRocm91Z2ggdGhlIGZpbGVzLCBza2lwcGluZyAuIGFuZCAu LiwgYW5kIHJlY3Vyc2luZyBpZiBuZWNlc3NhcnkNCgkJCWlmIChzdHJjbXAoJGZpbGUsICcu Jyk9PTAgfHwgc3RyY21wKCRmaWxlLCAnLi4nKT09MCkgY29udGludWU7DQoJCQkkZmlsZXBh dGggPSAkc3RhcnRfZGlyIC4gJy8nIC4gJGZpbGU7DQoJCQlpZiAoIGlzX2RpcigkZmlsZXBh dGgpICkgew0KCQkJCSRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgc21kX2F0X2xpc3Rk aXIoJGZpbGVwYXRoKSk7DQoJCQl9IGVsc2Ugew0KCQkJCWFycmF5X3B1c2goJGZpbGVzLCAk ZmlsZXBhdGgpOw0KCQkJfQ0KCQl9DQoJCWNsb3NlZGlyKCRmaCk7DQoJfSBlbHNlIHsNCg0K CQkvLyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGFuIGludmFsaWQg bm9uLWRpcmVjdG9yeSBhcmd1bWVudA0KCQkkZmlsZXMgPSBmYWxzZTsNCgl9DQoNCglyZXR1 cm4gJGZpbGVzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlY3Vy c2l2ZSBybWRpcigpIGNvdXJ0ZXN5IG9mIHRoZSBwaHAgbWFudWFsIHVzZXIgY29tbWVudHMN CmZ1bmN0aW9uIHNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoKSB7DQoJaWYgKGlzX2Rp cigkZmlsZXBhdGgpICYmICFpc19saW5rKCRmaWxlcGF0aCkpIHsNCgkJaWYgKCRkaCA9IG9w ZW5kaXIoJGZpbGVwYXRoKSkgew0KCQkJd2hpbGUgKCgkc2YgPSByZWFkZGlyKCRkaCkpICE9 PSBmYWxzZSkgew0KCQkJCWlmICgkc2YgPT0gJy4nIHx8ICRzZiA9PSAnLi4nKSBjb250aW51 ZTsNCgkJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoLicvJy4kc2YpKSB7 DQoJCQkJCWJyZWFrOyAvLyBEb2gsIGNhbid0IGRlbGV0ZQ0KCQkJCX0NCgkJCX0NCgkJCWNs b3NlZGlyKCRkaCk7DQoJCX0NCgkJcmV0dXJuIHJtZGlyKCRmaWxlcGF0aCk7DQoJfQ0KCXJl dHVybiB1bmxpbmsoJGZpbGVwYXRoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBGcm9tIFBIUCBtYW51YWwgY29tbWVudHMuIFRoYW5rcyBwdXJlbWFuZ28NCmZ1 bmN0aW9uIHNtZF9hdF9pc19kaXIoJGRpcikgew0KCS8vIGJ5cGFzc2VzIG9wZW5fYmFzZWRp ciByZXN0cmljdGlvbnMgb2YgaXNfZGlyIGFuZCBmaWxlcGVybXMNCgkkdG1wX2NtZCA9IGBs cyAtZGwgJGRpcmA7DQoJJGRpcl9mbGFnID0gJHRtcF9jbWRbMF07DQoJaWYoJGRpcl9mbGFn IT0iZCIpIHsNCgkJLy8gbm90IGQ7IHVzZSBuZXh0IGNoYXIgKGZpcnN0IGNoYXIgbWlnaHQg YmUgJ3MnIGFuZCBpcyBzdGlsbCBkaXJlY3RvcnkpDQoJCSRkaXJfZmxhZyA9ICR0bXBfY21k WzFdOw0KCX0NCglyZXR1cm4gKCRkaXJfZmxhZz09ImQiKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfbWtkaXJfcmVjdXJzaXZlKCRwYXRoLCAk bW9kZSA9IDA3NTUpIHsNCglpZihAbWtkaXIoJHBhdGgsICRtb2RlKSBvciBmaWxlX2V4aXN0 cygkcGF0aCkpIHJldHVybiB0cnVlOw0KCXJldHVybiAoc21kX21rZGlyX3JlY3Vyc2l2ZShk aXJuYW1lKCRwYXRoKSwgJG1vZGUpIGFuZCBta2RpcigkcGF0aCwgJG1vZGUpKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfY2hhbmdlX3Bh Z2VieSgpIHsNCglzZXRjb29raWUoJ3NtZF9hdF9wYWdlYnknLCBncHMoJ3F0eScpKTsNCglz bWRfYXRfbGlzdCgnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X3N3aXRjaCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkc21kX2F0X3By aXZzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCAnZXZlbnQnLCAn bmV4dHN0ZXAnKSkpKTsNCgkkdXJsID0gIj9ldmVudD0iLiRldmVudC4iJnN0ZXA9Ii4kbmV4 dHN0ZXA7DQoNCglpZiAoJHNraW4gJiYgc21kX2F0X2V4aXN0cygkc2tpbikpIHsNCgkJc2V0 X3ByZWYoJ3NtZF9za2luJywgJHNraW4sICRldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lu cHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJJHVybCAuPSAnJm1lc3NhZ2U9JyAuICgoJG1l c3NhZ2UpID8gJG1lc3NhZ2UgOiBzbWRfYXRfZ1R4dCgnc2tpbl9zd2l0Y2hlZCcsIGFycmF5 KCd7c2tpbn0nID0+ICRza2luKSkpOw0KCX0gZWxzZSB7DQoJCSR1cmwgLj0gJyZtZXNzYWdl PScgLiAkbWVzc2FnZTsNCgl9DQoNCgkvLyBTaW5jZSB0aGUgaGVhZGVycyBoYXZlIGJlZW4g c2VudCwgZG91YmxlLWRlY2x1dGNoIGluIG9yZGVyIHRvIHNob3cgdGhlIHNraW4gdGhpcyBm aXJzdCB0aW1lDQoJZWNobyA8PDxFT1MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 Ij4NCndpbmRvdy5sb2NhdGlvbi5ocmVmPSJ7JHVybH0iOw0KPC9zY3JpcHQ+DQo8bm9zY3Jp cHQ+DQo8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO3VybD17JHVybH0i IC8+DQo8L25vc2NyaXB0Pg0KRU9TOw0KCWV4aXQ7DQp9DQoNCi8vIEFsbC11c2VyIHNraW4g Y2hvb3Nlcg0KZnVuY3Rpb24gc21kX2FkbWF0KCRldmVudCwgJHN0ZXApIHsNCglpZighJHN0 ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRfYXRfc3dpdGNoJywNCgkJ KSkpIHsNCgkJc21kX2F0X2Nob29zZXIoJycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9jaG9vc2VyKCRt ZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRwcmVmcywgJHNtZF9hdF9hZG1fZXZlbnQsICR0aGVt ZSwgJHNtZF9hdF9zdHlsZXM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7 DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0 X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9IChpc3NldCgkYXRfcHJlZnNb J3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21kX2F0X3ByZWZz WzBdWydzbWRfYXRfdHcnXSkgKyAxMDsNCgkkdGggPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRf YXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9wcmVmc1swXVsn c21kX2F0X3RoJ10pICsgODA7DQoJJHN0eWxlcmVwcyA9IGFycmF5KA0KCQkne3R3fScgPT4g JHR3LA0KCQkne3RofScgPT4gJHRoLA0KCSk7DQoNCgkkbWVzc2FnZSA9ICgkbWVzc2FnZSkg PyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ3Nr aW5uZXInKSwkbWVzc2FnZSk7DQoNCgkkY3Vycl9za2luID0gJHRoZW1lLT5uYW1lOw0KDQoJ JGFsbG93ZWQgPSAnJzsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10p KSB7DQoJCSRhbGxvd2VkID0gZXhwbG9kZSgiLCIsJHByZWZzWydzbWRfYXRfdXNlcl9saXN0 J10pOw0KCQlmb3JlYWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkgew0KCQkJaWYg KCR2YWxpZCA9PSAnJykgew0KCQkJCXVuc2V0KCRhbGxvd2VkWyRpZHhdKTsNCgkJCX0NCgkJ fQ0KCX0NCgkkYWxsb3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsNCgkkaGRyb3cgPSBo ZWQoc21kX2F0X2dUeHQoJ2F2YWlsX3RpdGxlJyksIDMpOw0KDQoJaWYgKCRsYXlvdXQ9PSIw Iikgew0KCQllY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPic7DQoJCWVjaG8gJHNtZF9h dF9zdHlsZXNbJ2NvbW1vbiddLm4uJHNtZF9hdF9zdHlsZXNbJ2xpc3QnXTsNCgkJZWNobyAn PC9zdHlsZT4nOw0KCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnLCAnJywgJ3NtZF9hdF9saXN0 Jyk7DQoJCWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93LCAnIGNvbHNwYW49IjMiJykNCgkJKTsN CgkJZWNobyB0cigNCgkJCWFzc0hlYWQoDQoJCQkJc21kX2F0X2dUeHQoJ3NraW5fZ2JsJyks DQoJCQkJJ2F1dGhvcicsDQoJCQkJJ2Rlc2NyaXB0aW9uJw0KCQkJKSk7DQoJfSBlbHNlIHsN CgkJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nOw0KCQllY2hvIHN0cnRyKCRzbWRf YXRfc3R5bGVzWydjb21tb24nXS5uLiRzbWRfYXRfc3R5bGVzWydncmlkJ10sICRzdHlsZXJl cHMpOw0KCQllY2hvICc8L3N0eWxlPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9ncmlk Ij48ZGl2IGNsYXNzPSJzbWRfbmV3cm93Ij4nLiRoZHJvdy4nPC9kaXY+JzsNCgl9DQoJZm9y ZWFjaCAoJGFsbG93ZWQgYXMgJHNraW5fbmFtZSkgew0KCQkkc2tpbmZvID0gc21kX2F0X3Jl YWRfc2tpbmZvKCRza2luX25hbWUpOw0KCQlpZiAoJHNraW5mbykgew0KCQkJJHRodW1ibmFp bCA9IHNtZF9hdF9nZXRfdGh1bWIoJHNraW5mbywgMSk7DQoJCQkkdGhpc19za2luID0gKCRz a2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyBzdHJvbmcoJHNraW5mb1snZG5hbWUnXSkgOiAk c2tpbmZvWydkbmFtZSddOw0KCQkJJHRodW1yb3cgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNt ZF9hdF9hZG1fZXZlbnQuYS4nc3RlcD1zbWRfYXRfc3dpdGNoJy5hLiduZXh0c3RlcD1zbWRf YWRtYXQnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciIHRpdGxlPSInLnNtZF9hdF9nVHh0KCdh cHBseV9za2luJykuJyI+Jy4kdGhpc19za2luLigoJHRodW1ibmFpbCkgPyAnPGRpdj4nLiR0 aHVtYm5haWwuJzwvZGl2PicgOiAnJykuJzwvYT4nOw0KCQkJJGF1dGhyb3cgPSAoc3RycG9z KCRza2luZm9bJ2F1dGhvcl91cmknXSwgImh0dHA6Ly8iKSA9PT0gMCkgPyAnPGEgaHJlZj0i Jy4kc2tpbmZvWydhdXRob3JfdXJpJ10uJyI+Jy4kc2tpbmZvWydhdXRob3InXS4nPC9hPicg OiAkc2tpbmZvWydhdXRob3InXTsNCg0KCQkJaWYgKCRsYXlvdXQ9PSIwIikgew0KCQkJCWVj aG8gdHIoDQoJCQkJCXRkKCR0aHVtcm93KQ0KCQkJCQkudGQoJGF1dGhyb3csIDEwMCkNCgkJ CQkJLnRkKCRza2luZm9bJ2Rlc2NyaXB0aW9uJ10sIDI1MCkNCgkJCQkJLCAoKCRza2luX25h bWUgPT0gJGN1cnJfc2tpbikgPyAnIGNsYXNzPSJhY3RpdmUiJyA6ICcnKQ0KCQkJCSk7DQoJ CQl9IGVsc2Ugew0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsJy4oKCRza2luX25h bWUgPT0gJGN1cnJfc2tpbikgPyAnIGFjdGl2ZScgOiAnJykuJyI+JzsNCgkJCQllY2hvICc8 ZGl2PicuJHRodW1yb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1 dGgiPicuc21kX2F0X2dUeHQoJ2J5JykuJGF1dGhyb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAn PC9kaXY+JzsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8g ZW5kVGFibGUoKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIi PjwvZGl2PjwvZGl2Pic7DQoJfQ0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUQVIvR1pJUC9CWklQMi9aSVAgQVJDSElW RSBDTEFTU0VTIDIuMQ0KIHwgQnkgRGV2aW4gRG91Y2V0dGUNCiB8IENvcHlyaWdodCAoYykg MjAwNSBEZXZpbiBEb3VjZXR0ZQ0KIHwgRW1haWw6IGRhcmtzbm9vcHlAc2hhdy5jYQ0KICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHwg RW1haWwgYnVncy9zdWdnZXN0aW9ucyB0byBkYXJrc25vb3B5QHNoYXcuY2ENCiArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRoaXMg c2NyaXB0IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQogfCB0aGUgR05V IEdQTCBhbmQgaXMgZnJlZSB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwgb25seSBpZiB0 aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90IHJlbW92ZWQNCiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQovLyBOT1RFOiBj bGFzcyBuYW1lcyBhbHRlcmVkIHRvIGFkZCBzbWRfYXRfIHByZWZpeCB0byBhdm9pZCBjbGFz aGVzIGluIGdsb2JhbCBzY29wZSwgYW5kIGFkZGVkIHN1YmRpciBjcmVhdGlvbg0KDQpjbGFz cyBzbWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9hcmNoaXZlKCRuYW1lKQ0K CXsNCgkJJHRoaXMtPm9wdGlvbnMgPSBhcnJheSAoDQoJCQknYmFzZWRpcicgPT4gIi4iLA0K CQkJJ25hbWUnID0+ICRuYW1lLA0KCQkJJ3ByZXBlbmQnID0+ICIiLA0KCQkJJ2lubWVtb3J5 JyA9PiAwLA0KCQkJJ292ZXJ3cml0ZScgPT4gMCwNCgkJCSdyZWN1cnNlJyA9PiAxLA0KCQkJ J3N0b3JlcGF0aHMnID0+IDEsDQoJCQknZm9sbG93bGlua3MnID0+IDAsDQoJCQknbGV2ZWwn ID0+IDMsDQoJCQknbWV0aG9kJyA9PiAxLA0KCQkJJ3NmeCcgPT4gIiIsDQoJCQkndHlwZScg PT4gIiIsDQoJCQknY29tbWVudCcgPT4gIiINCgkJKTsNCgkJJHRoaXMtPmZpbGVzID0gYXJy YXkgKCk7DQoJCSR0aGlzLT5leGNsdWRlID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5zdG9yZW9u bHkgPSBhcnJheSAoKTsNCgkJJHRoaXMtPmVycm9yID0gYXJyYXkgKCk7DQoJfQ0KDQoJZnVu Y3Rpb24gc2V0X29wdGlvbnMoJG9wdGlvbnMpDQoJew0KCQlmb3JlYWNoICgkb3B0aW9ucyBh cyAka2V5ID0+ICR2YWx1ZSkNCgkJCSR0aGlzLT5vcHRpb25zWyRrZXldID0gJHZhbHVlOw0K CQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKSkNCgkJew0KCQkJJHRo aXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMt Pm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0g cHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7 DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIs ICIiLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5ICgk dGhpcy0+b3B0aW9uc1snbmFtZSddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ25hbWUn XSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSk7DQoJ CQkkdGhpcy0+b3B0aW9uc1snbmFtZSddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwg JHRoaXMtPm9wdGlvbnNbJ25hbWUnXSk7DQoJCX0NCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9w dGlvbnNbJ3ByZXBlbmQnXSkpDQoJCXsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10g PSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0K CQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL14oXC4qXC8r KSsvIiwgIiIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlv bnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICR0aGlzLT5vcHRp b25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdf cmVwbGFjZSgiL1wvJC8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSkgLiAiLyI7 DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYXJjaGl2ZSgpDQoJew0KCQkkdGhpcy0+ bWFrZV9saXN0KCk7DQoNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDAp DQoJCXsNCgkJCSRwd2QgPSBnZXRjd2QoKTsNCgkJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydi YXNlZGlyJ10pOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYm IGZpbGVfZXhpc3RzKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9wdGlvbnNb J3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnppcCIg PyAiLnRtcCIgOiAiIikpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkZpbGUgeyR0 aGlzLT5vcHRpb25zWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJY2hkaXIoJHB3 ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQllbHNlIGlmICgkdGhpcy0+YXJjaGl2ZSA9 IEBmb3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddIC4gKCR0aGlzLT5vcHRpb25zWyd0eXBl J10gPT0gImd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiID8gIi50 bXAiIDogIiIpLCAid2IrIikpDQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQllbHNlDQoJCQl7DQoJ CQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWydu YW1lJ119IGZvciB3cml0aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7 DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSAiIjsNCg0KCQlzd2l0 Y2ggKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10pDQoJCXsNCgkJY2FzZSAiemlwIjoNCgkJCWlm ICghJHRoaXMtPmNyZWF0ZV96aXAoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJD b3VsZCBub3QgY3JlYXRlIHppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQli cmVhazsNCgkJY2FzZSAiYnppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfdGFyKCkpDQoJ CQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB0YXIgZmlsZS4i Ow0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX2J6aXAoKSkN CgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIGJ6aXAyIGZp bGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJnemlwIjoN CgkJCWlmICghJHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3Jb XSA9ICJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9 DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfZ3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJv cltdID0gIkNvdWxkIG5vdCBjcmVhdGUgZ3ppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJ CQl9DQoJCQlicmVhazsNCgkJY2FzZSAidGFyIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90 YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRh ciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCg0KCQlpZiAoJHRoaXMtPm9w dGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJZmNsb3NlKCR0aGlzLT5hcmNoaXZl KTsNCgkJCWlmICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+ b3B0aW9uc1sndHlwZSddID09ICJiemlwIikNCgkJCQl1bmxpbmsoJHRoaXMtPm9wdGlvbnNb J2Jhc2VkaXInXSAuICIvIiAuICR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAiLnRtcCIpOw0K CQl9DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2RhdGEoJGRhdGEpDQoJew0KCQlpZiAoJHRoaXMt Pm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJCWZ3cml0ZSgkdGhpcy0+YXJjaGl2ZSwg JGRhdGEpOw0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSAuPSAkZGF0YTsNCgl9DQoNCglm dW5jdGlvbiBtYWtlX2xpc3QoKQ0KCXsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPmV4Y2x1ZGUp KQ0KCQkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZv cmVhY2ggKCR0aGlzLT5leGNsdWRlIGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWydu YW1lJ10gPT0gJGN1cnJlbnRbJ25hbWUnXSkNCgkJCQkJCXVuc2V0ICgkdGhpcy0+ZmlsZXNb JGtleV0pOw0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+c3RvcmVvbmx5KSkNCgkJCWZvcmVhY2gg KCR0aGlzLT5maWxlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCQlmb3JlYWNoICgkdGhpcy0+ c3RvcmVvbmx5IGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10gPT0gJGN1 cnJlbnRbJ25hbWUnXSkNCgkJCQkJCSR0aGlzLT5maWxlc1ska2V5XVsnbWV0aG9kJ10gPSAw Ow0KCQl1bnNldCAoJHRoaXMtPmV4Y2x1ZGUsICR0aGlzLT5zdG9yZW9ubHkpOw0KCX0NCg0K CWZ1bmN0aW9uIGFkZF9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3Rf ZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlz LT5maWxlc1tdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gZXhjbHVkZV9maWxlcygk bGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3Jl YWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5leGNsdWRlW10gPSAkY3VycmVu dDsNCgl9DQoNCglmdW5jdGlvbiBzdG9yZV9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0g JHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVu dCkNCgkJCSR0aGlzLT5zdG9yZW9ubHlbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9u IGxpc3RfZmlsZXMoJGxpc3QpDQoJew0KCQlpZiAoIWlzX2FycmF5ICgkbGlzdCkpDQoJCXsN CgkJCSR0ZW1wID0gJGxpc3Q7DQoJCQkkbGlzdCA9IGFycmF5ICgkdGVtcCk7DQoJCQl1bnNl dCAoJHRlbXApOw0KCQl9DQoNCgkJJGZpbGVzID0gYXJyYXkgKCk7DQoNCgkJJHB3ZCA9IGdl dGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlmb3Jl YWNoICgkbGlzdCBhcyAkY3VycmVudCkNCgkJew0KCQkJJGN1cnJlbnQgPSBzdHJfcmVwbGFj ZSgiXFwiLCAiLyIsICRjdXJyZW50KTsNCgkJCSRjdXJyZW50ID0gcHJlZ19yZXBsYWNlKCIv XC8rLyIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVnX3JlcGxhY2UoIi9c LyQvIiwgIiIsICRjdXJyZW50KTsNCgkJCWlmIChzdHJzdHIoJGN1cnJlbnQsICIqIikpDQoJ CQl7DQoJCQkJJHJlZ2V4ID0gcHJlZ19yZXBsYWNlKCIvKFtcXFxeXCRcLlxbXF1cfFwoXClc P1wrXHtcfVwvXSkvIiwgIlxcXFxcXDEiLCAkY3VycmVudCk7DQoJCQkJJHJlZ2V4ID0gc3Ry X3JlcGxhY2UoIioiLCAiLioiLCAkcmVnZXgpOw0KCQkJCSRkaXIgPSBzdHJzdHIoJGN1cnJl bnQsICIvIikgPyBzdWJzdHIoJGN1cnJlbnQsIDAsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikp IDogIi4iOw0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZGlyKTsNCgkJCQlmb3Jl YWNoICgkdGVtcCBhcyAkY3VycmVudDIpDQoJCQkJCWlmIChwcmVnX21hdGNoKCIvXnskcmVn ZXh9JC9pIiwgJGN1cnJlbnQyWyduYW1lJ10pKQ0KCQkJCQkJJGZpbGVzW10gPSAkY3VycmVu dDI7DQoJCQkJdW5zZXQgKCRyZWdleCwgJGRpciwgJHRlbXAsICRjdXJyZW50KTsNCgkJCX0N CgkJCWVsc2UgaWYgKEBpc19kaXIoJGN1cnJlbnQpKQ0KCQkJew0KCQkJCSR0ZW1wID0gJHRo aXMtPnBhcnNlX2RpcigkY3VycmVudCk7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGZpbGUp DQoJCQkJCSRmaWxlc1tdID0gJGZpbGU7DQoJCQkJdW5zZXQgKCR0ZW1wLCAkZmlsZSk7DQoJ CQl9DQoJCQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGN1cnJlbnQpKQ0KCQkJCSRmaWxlc1td ID0gYXJyYXkgKCduYW1lJyA9PiAkY3VycmVudCwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9u c1sncHJlcGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAo JHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkY3VycmVudCwg Ii8iKSkgPw0KCQkJCQlzdWJzdHIoJGN1cnJlbnQsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikg KyAxKSA6ICRjdXJyZW50KSwNCgkJCQkJJ3R5cGUnID0+IEBpc19saW5rKCRjdXJyZW50KSAm JiAkdGhpcy0+b3B0aW9uc1snZm9sbG93bGlua3MnXSA9PSAwID8gMiA6IDAsDQoJCQkJCSdl eHQnID0+IHN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3VycmVudCwgIi4iKSksICdzdGF0 JyA9PiBzdGF0KCRjdXJyZW50KSk7DQoJCX0NCg0KCQljaGRpcigkcHdkKTsNCg0KCQl1bnNl dCAoJGN1cnJlbnQsICRwd2QpOw0KDQoJCXVzb3J0KCRmaWxlcywgYXJyYXkgKCJzbWRfYXRf YXJjaGl2ZSIsICJzb3J0X2ZpbGVzIikpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0KDQoJ ZnVuY3Rpb24gcGFyc2VfZGlyKCRkaXJuYW1lKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25z WydzdG9yZXBhdGhzJ10gPT0gMSAmJiAhcHJlZ19tYXRjaCgiL14oXC4rXC8qKSskLyIsICRk aXJuYW1lKSkNCgkJCSRmaWxlcyA9IGFycmF5IChhcnJheSAoJ25hbWUnID0+ICRkaXJuYW1l LCAnbmFtZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCXByZWdfcmVw bGFjZSgiLyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10g PT0gMCAmJiBzdHJzdHIoJGRpcm5hbWUsICIvIikpID8NCgkJCQlzdWJzdHIoJGRpcm5hbWUs IHN0cnJwb3MoJGRpcm5hbWUsICIvIikgKyAxKSA6ICRkaXJuYW1lKSwgJ3R5cGUnID0+IDUs ICdzdGF0JyA9PiBzdGF0KCRkaXJuYW1lKSkpOw0KCQllbHNlDQoJCQkkZmlsZXMgPSBhcnJh eSAoKTsNCgkJJGRpciA9IEBvcGVuZGlyKCRkaXJuYW1lKTsNCg0KCQl3aGlsZSAoJGZpbGUg PSBAcmVhZGRpcigkZGlyKSkNCgkJew0KCQkJJGZ1bGxuYW1lID0gJGRpcm5hbWUgLiAiLyIg LiAkZmlsZTsNCgkJCWlmICgkZmlsZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIikNCgkJCQlj b250aW51ZTsNCgkJCWVsc2UgaWYgKEBpc19kaXIoJGZ1bGxuYW1lKSkNCgkJCXsNCgkJCQlp ZiAoZW1wdHkgKCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pKQ0KCQkJCQljb250aW51ZTsN CgkJCQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGZ1bGxuYW1lKTsNCgkJCQlmb3JlYWNo ICgkdGVtcCBhcyAkZmlsZTIpDQoJCQkJCSRmaWxlc1tdID0gJGZpbGUyOw0KCQkJfQ0KCQkJ ZWxzZSBpZiAoQGZpbGVfZXhpc3RzKCRmdWxsbmFtZSkpDQoJCQkJJGZpbGVzW10gPSBhcnJh eSAoJ25hbWUnID0+ICRmdWxsbmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJl cGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMt Pm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZnVsbG5hbWUsICIvIikp ID8NCgkJCQkJc3Vic3RyKCRmdWxsbmFtZSwgc3RycnBvcygkZnVsbG5hbWUsICIvIikgKyAx KSA6ICRmdWxsbmFtZSksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGluaygkZnVsbG5hbWUpICYm ICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4 dCcgPT4gc3Vic3RyKCRmaWxlLCBzdHJycG9zKCRmaWxlLCAiLiIpKSwgJ3N0YXQnID0+IHN0 YXQoJGZ1bGxuYW1lKSk7DQoJCX0NCg0KCQlAY2xvc2VkaXIoJGRpcik7DQoNCgkJcmV0dXJu ICRmaWxlczsNCgl9DQoNCglmdW5jdGlvbiBzb3J0X2ZpbGVzKCRhLCAkYikNCgl7DQoJCWlm ICgkYVsndHlwZSddICE9ICRiWyd0eXBlJ10pDQoJCQlpZiAoJGFbJ3R5cGUnXSA9PSA1IHx8 ICRiWyd0eXBlJ10gPT0gMikNCgkJCQlyZXR1cm4gLTE7DQoJCQllbHNlIGlmICgkYVsndHlw ZSddID09IDIgfHwgJGJbJ3R5cGUnXSA9PSA1KQ0KCQkJCXJldHVybiAxOw0KCQllbHNlIGlm ICgkYVsndHlwZSddID09IDUpDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25h bWUnXSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQllbHNlIGlmICgkYVsnZXh0J10g IT0gJGJbJ2V4dCddKQ0KCQkJcmV0dXJuIHN0cmNtcCgkYVsnZXh0J10sICRiWydleHQnXSk7 DQoJCWVsc2UgaWYgKCRhWydzdGF0J11bN10gIT0gJGJbJ3N0YXQnXVs3XSkNCgkJCXJldHVy biAkYVsnc3RhdCddWzddID4gJGJbJ3N0YXQnXVs3XSA/IC0xIDogMTsNCgkJZWxzZQ0KCQkJ cmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWydu YW1lJ10pKTsNCgkJcmV0dXJuIDA7DQoJfQ0KDQoJZnVuY3Rpb24gZG93bmxvYWRfZmlsZSgp DQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJ JHRoaXMtPmVycm9yW10gPSAiQ2FuIG9ubHkgdXNlIGRvd25sb2FkX2ZpbGUoKSBpZiBhcmNo aXZlIGlzIGluIG1lbW9yeS4gUmVkaXJlY3QgdG8gZmlsZSBvdGhlcndpc2UsIGl0IGlzIGZh c3Rlci4iOw0KCQkJcmV0dXJuOw0KCQl9DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5 cGUnXSkNCgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFw cGxpY2F0aW9uL3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJaGVhZGVy KCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYnppcDIiKTsNCgkJCWJyZWFrOw0KCQlj YXNlICJnemlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWd6 aXAiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5 cGU6IGFwcGxpY2F0aW9uL3gtdGFyIik7DQoJCX0NCgkJJGhlYWRlciA9ICJDb250ZW50LURp c3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiI7DQoJCSRoZWFkZXIgLj0gc3Ry c3RyKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICIvIikgPyBzdWJzdHIoJHRoaXMtPm9wdGlv bnNbJ25hbWUnXSwgc3RycnBvcygkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIpICsgMSkg OiAkdGhpcy0+b3B0aW9uc1snbmFtZSddOw0KCQkkaGVhZGVyIC49ICJcIiI7DQoJCWhlYWRl cigkaGVhZGVyKTsNCgkJaGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigkdGhp cy0+YXJjaGl2ZSkpOw0KCQloZWFkZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJp bmFyeSIpOw0KCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFs aWRhdGUsIG1heC1hZ2U9NjAiKTsNCgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEphbiAy MDAwIDEyOjAwOjAwIEdNVCIpOw0KCQlwcmludCgkdGhpcy0+YXJjaGl2ZSk7DQoJfQ0KfQ0K DQpjbGFzcyBzbWRfYXRfdGFyX2ZpbGUgZXh0ZW5kcyBzbWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1 bmN0aW9uIHNtZF9hdF90YXJfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfYXJj aGl2ZSgkbmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPSAidGFyIjsNCgl9DQoN CglmdW5jdGlvbiBjcmVhdGVfdGFyKCkNCgl7DQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hk aXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZp bGVzIGFzICRjdXJyZW50KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhp cy0+b3B0aW9uc1snbmFtZSddKQ0KCQkJCWNvbnRpbnVlOw0KCQkJaWYgKHN0cmxlbigkY3Vy cmVudFsnbmFtZTInXSkgPiA5OSkNCgkJCXsNCgkJCQkkcGF0aCA9IHN1YnN0cigkY3VycmVu dFsnbmFtZTInXSwgMCwgc3RycG9zKCRjdXJyZW50WyduYW1lMiddLCAiLyIsIHN0cmxlbigk Y3VycmVudFsnbmFtZTInXSkgLSAxMDApICsgMSk7DQoJCQkJJGN1cnJlbnRbJ25hbWUyJ10g PSBzdWJzdHIoJGN1cnJlbnRbJ25hbWUyJ10sIHN0cmxlbigkcGF0aCkpOw0KCQkJCWlmIChz dHJsZW4oJHBhdGgpID4gMTU0IHx8IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgPiA5OSkN CgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBhZGQgeyRwYXRofXsk Y3VycmVudFsnbmFtZTInXX0gdG8gYXJjaGl2ZSBiZWNhdXNlIHRoZSBmaWxlbmFtZSBpcyB0 b28gbG9uZy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQl9DQoJCQkkYmxvY2sgPSBw YWNrKCJhMTAwYThhOGE4YTEyYTEyYThhMWExMDBhNmEyYTMyYTMyYThhOGExNTVhMTIiLCAk Y3VycmVudFsnbmFtZTInXSwgc3ByaW50ZigiJTA3byIsDQoJCQkJJGN1cnJlbnRbJ3N0YXQn XVsyXSksIHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCddWzRdKSwgc3ByaW50Zigi JTA3byIsICRjdXJyZW50WydzdGF0J11bNV0pLA0KCQkJCXNwcmludGYoIiUwMTFvIiwgJGN1 cnJlbnRbJ3R5cGUnXSA9PSAyID8gMCA6ICRjdXJyZW50WydzdGF0J11bN10pLCBzcHJpbnRm KCIlMDExbyIsICRjdXJyZW50WydzdGF0J11bOV0pLA0KCQkJCSIgICAgICAgICIsICRjdXJy ZW50Wyd0eXBlJ10sICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IEByZWFkbGluaygkY3VycmVu dFsnbmFtZSddKSA6ICIiLCAidXN0YXIgIiwgIiAiLA0KCQkJCSJVbmtub3duIiwgIlVua25v d24iLCAiIiwgIiIsICFlbXB0eSAoJHBhdGgpID8gJHBhdGggOiAiIiwgIiIpOw0KDQoJCQkk Y2hlY2tzdW0gPSAwOw0KCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0KCQkJCSRj aGVja3N1bSArPSBvcmQoc3Vic3RyKCRibG9jaywgJGksIDEpKTsNCgkJCSRjaGVja3N1bSA9 IHBhY2soImE4Iiwgc3ByaW50ZigiJTA3byIsICRjaGVja3N1bSkpOw0KCQkJJGJsb2NrID0g c3Vic3RyX3JlcGxhY2UoJGJsb2NrLCAkY2hlY2tzdW0sIDE0OCwgOCk7DQoNCgkJCWlmICgk Y3VycmVudFsndHlwZSddID09IDIgfHwgJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJ CSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJZWxzZSBpZiAoJGZwID0gQGZvcGVuKCRj dXJyZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxv Y2spOw0KCQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCRmcCwgMTA0ODU3NikpDQoJCQkJCSR0 aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJaWYgKCRjdXJyZW50WydzdGF0J11bN10gJSA1 MTIgPiAwKQ0KCQkJCXsNCgkJCQkJJHRlbXAgPSAiIjsNCgkJCQkJZm9yICgkaSA9IDA7ICRp IDwgNTEyIC0gJGN1cnJlbnRbJ3N0YXQnXVs3XSAlIDUxMjsgJGkrKykNCgkJCQkJCSR0ZW1w IC49ICJcMCI7DQoJCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJfQ0KCQkJCWZj bG9zZSgkZnApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxk IG5vdCBvcGVuIGZpbGUgeyRjdXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJdCB3YXMg bm90IGFkZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+YWRkX2RhdGEocGFjaygiYTEwMjQiLCAi IikpOw0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9u IGV4dHJhY3RfZmlsZXMoKQ0KCXsNCgkJJHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhp cy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlpZiAoJGZwID0gJHRoaXMtPm9wZW5fYXJj aGl2ZSgpKQ0KCQl7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMSkN CgkJCQkkdGhpcy0+ZmlsZXMgPSBhcnJheSAoKTsNCg0KCQkJd2hpbGUgKCRibG9jayA9IGZy ZWFkKCRmcCwgNTEyKSkNCgkJCXsNCgkJCQkkdGVtcCA9IHVucGFjaygiYTEwMG5hbWUvYTht b2RlL2E4dWlkL2E4Z2lkL2ExMnNpemUvYTEybXRpbWUvYThjaGVja3N1bS9hMXR5cGUvYTEw MHN5bWxpbmsvYTZtYWdpYy9hMnRlbXAvYTMydGVtcC9hMzJ0ZW1wL2E4dGVtcC9hOHRlbXAv YTE1NXByZWZpeC9hMTJ0ZW1wIiwgJGJsb2NrKTsNCgkJCQkkZmlsZSA9IGFycmF5ICgNCgkJ CQkJJ25hbWUnID0+ICR0ZW1wWydwcmVmaXgnXSAuICR0ZW1wWyduYW1lJ10sDQoJCQkJCSdz dGF0JyA9PiBhcnJheSAoDQoJCQkJCQkyID0+ICR0ZW1wWydtb2RlJ10sDQoJCQkJCQk0ID0+ IG9jdGRlYygkdGVtcFsndWlkJ10pLA0KCQkJCQkJNSA9PiBvY3RkZWMoJHRlbXBbJ2dpZCdd KSwNCgkJCQkJCTcgPT4gb2N0ZGVjKCR0ZW1wWydzaXplJ10pLA0KCQkJCQkJOSA9PiBvY3Rk ZWMoJHRlbXBbJ210aW1lJ10pLA0KCQkJCQkpLA0KCQkJCQknY2hlY2tzdW0nID0+IG9jdGRl YygkdGVtcFsnY2hlY2tzdW0nXSksDQoJCQkJCSd0eXBlJyA9PiAkdGVtcFsndHlwZSddLA0K CQkJCQknbWFnaWMnID0+ICR0ZW1wWydtYWdpYyddLA0KCQkJCSk7DQoNCgkJCQlpZiAoJGZp bGVbJ2NoZWNrc3VtJ10gPT0gMHgwMDAwMDAwMCkNCgkJCQkJYnJlYWs7DQoJCQkJZWxzZSBp ZiAoc3Vic3RyKCRmaWxlWydtYWdpYyddLCAwLCA1KSAhPSAidXN0YXIiKQ0KCQkJCXsNCgkJ CQkJJHRoaXMtPmVycm9yW10gPSAiVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCBleHRy YWN0aW5nIHRoaXMgdHlwZSBvZiB0YXIgZmlsZS4iOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJ CQkJJGJsb2NrID0gc3Vic3RyX3JlcGxhY2UoJGJsb2NrLCAiICAgICAgICAiLCAxNDgsIDgp Ow0KCQkJCSRjaGVja3N1bSA9IDA7DQoJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsr KQ0KCQkJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkYmxvY2ssICRpLCAxKSk7DQoJCQkJ aWYgKCRmaWxlWydjaGVja3N1bSddICE9ICRjaGVja3N1bSkNCgkJCQkJJHRoaXMtPmVycm9y W10gPSAiQ291bGQgbm90IGV4dHJhY3QgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0s IGl0IGlzIGNvcnJ1cHQuIjsNCg0KCQkJCS8vIEFkZGVkOiBjcmVhdGUgZGlyIGlmIHJlcXVp cmVkDQoJCQkJaWYgKHN0cnBvcygkZmlsZVsnbmFtZSddLCAnLi4nKSA9PT0gZmFsc2UpIHsN CgkJCQkJJHBhdGhfcGFydHMgPSBwYXRoaW5mbygkZmlsZVsnbmFtZSddKTsNCgkJCQkJaWYg KCFmaWxlX2V4aXN0cygkZmlsZVsnbmFtZSddKSkgew0KCQkJCQkJJHJldCA9IHNtZF9ta2Rp cl9yZWN1cnNpdmUoKChpc3NldCgkcGF0aF9wYXJ0c1snZXh0ZW5zaW9uJ10pKSA/IGRpcm5h bWUoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFtZSddKSA6ICR0aGlz LT5vcHRpb25zWydiYXNlZGlyJ10uRFMuJGZpbGVbJ25hbWUnXSkpOw0KCQkJCQl9DQoJCQkJ fQ0KDQoJCQkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDEpDQoJCQkJew0K CQkJCQkkZmlsZVsnZGF0YSddID0gZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKTsNCgkJ CQkJZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikgPT0gNTEyID8g MCA6ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7DQoJCQkJCXVuc2V0ICgkZmls ZVsnY2hlY2tzdW0nXSwgJGZpbGVbJ21hZ2ljJ10pOw0KCQkJCQkkdGhpcy0+ZmlsZXNbXSA9 ICRmaWxlOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDUpDQoJCQkJ ew0KCQkJCQlpZiAoIWlzX2RpcigkZmlsZVsnbmFtZSddKSkNCgkJCQkJCW1rZGlyKCRmaWxl WyduYW1lJ10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkdGhp cy0+b3B0aW9uc1snb3ZlcndyaXRlJ10gPT0gMCAmJiBmaWxlX2V4aXN0cygkZmlsZVsnbmFt ZSddKSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gInskZmlsZVsnbmFtZSddfSBh bHJlYWR5IGV4aXN0cy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAo JGZpbGVbJ3R5cGUnXSA9PSAyKQ0KCQkJCXsNCgkJCQkJc3ltbGluaygkdGVtcFsnc3ltbGlu ayddLCAkZmlsZVsnbmFtZSddKTsNCgkJCQkJY2htb2QoJGZpbGVbJ25hbWUnXSwgJGZpbGVb J3N0YXQnXVsyXSk7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRuZXcgPSBmb3BlbigkZmlsZVsn bmFtZSddLCAid2IiKSkNCgkJCQl7DQoJCQkJCWZ3cml0ZSgkbmV3LCBmcmVhZCgkZnAsICRm aWxlWydzdGF0J11bN10pKTsNCgkJCQkJZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQn XVs3XSAlIDUxMikgPT0gNTEyID8gMCA6ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEy KSk7DQoJCQkJCWZjbG9zZSgkbmV3KTsNCgkJCQkJQGNobW9kKCRmaWxlWyduYW1lJ10sIDA2 NDQpOyAvLyBIYXJkLWNvZGVkIGZvciBub3cgYmVjYXVzZSB0aGUgc3R1cGlkIDAxMDA2NDQg dmFsdWUgaW4gJGZpbGVbJ3N0YXQnXVsyXSBjb25mdXNlcyB0aGUgT1MvUEhQDQoJCQkJfQ0K CQkJCWVsc2UNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVu IHskZmlsZVsnbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9 DQoJCQkJLy8gUmVtb3ZlIG93bmVyIGFuZCBncm91cCBzZXR0aW5nIHNpbmNlIHRoZXJlIGlz IGFsbW9zdCAwIGxpa2VsaWhvb2QgdGhlIGZpbGVzIHdpbGwgaGF2ZSB0aGUgc2FtZSB1c2Vy L2dyb3VwIGFjcm9zcyBzeXN0ZW1zDQoJCQkJLy8gSW4gb3RoZXIgd29yZHMsIGxlYXZlIG93 bmVyL2dyb3VwIGF0IHRoZSBBcGFjaGUgZGVmYXVsdCAtLSB3aGljaCBpcyB3aGF0IHdlIHdh bnQNCi8vCQkJCWNob3duKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bNF0pOw0KLy8J CQkJY2hncnAoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs1XSk7DQoJCQkJQHRvdWNo KCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bOV0pOw0KCQkJCXVuc2V0ICgkZmlsZSk7 DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9w ZW4gZmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0iOw0KDQoJCWNoZGlyKCRwd2QpOw0K CX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4gQGZvcGVuKCR0 aGlzLT5vcHRpb25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2d6 aXBfZmlsZSBleHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9n emlwX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsN CgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJnemlwIjsNCgl9DQoNCglmdW5jdGlvbiBj cmVhdGVfZ3ppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0g MCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNb J2Jhc2VkaXInXSk7DQoJCQlpZiAoJGZwID0gZ3pvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1l J10sICJ3YnskdGhpcy0+b3B0aW9uc1snbGV2ZWwnXX0iKSkNCgkJCXsNCgkJCQlmc2Vlaygk dGhpcy0+YXJjaGl2ZSwgMCk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJHRoaXMtPmFy Y2hpdmUsIDEwNDg1NzYpKQ0KCQkJCQlnendyaXRlKCRmcCwgJHRlbXApOw0KCQkJCWd6Y2xv c2UoJGZwKTsNCgkJCQljaGRpcigkcHdkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkk dGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25hbWUn XX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJ CX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9IGd6ZW5jb2RlKCR0aGlzLT5h cmNoaXZlLCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0K DQoJZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAZ3pvcGVuKCR0aGlz LT5vcHRpb25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2J6aXBf ZmlsZSBleHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9iemlw X2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJ JHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJiemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVh dGVfYnppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkN CgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jh c2VkaXInXSk7DQoJCQlpZiAoJGZwID0gYnpvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10s ICJ3YiIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGls ZSAoJHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWJ6d3Jp dGUoJGZwLCAkdGVtcCk7DQoJCQkJYnpjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0K CQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBv cGVuIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGly KCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5h cmNoaXZlID0gYnpjb21wcmVzcygkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNbJ2xl dmVsJ10pOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgp DQoJew0KCQlyZXR1cm4gQGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiciIpOw0K CX0NCn0NCg0KY2xhc3Mgc21kX2F0X3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X2FyY2hpdmUN CnsNCglmdW5jdGlvbiBzbWRfYXRfemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21k X2F0X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gInppcCI7 DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3ppcCgpDQoJew0KCQkkZmlsZXMgPSAwOw0KCQkk b2Zmc2V0ID0gMDsNCgkJJGNlbnRyYWwgPSAiIjsNCg0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+ b3B0aW9uc1snc2Z4J10pKQ0KCQkJaWYgKCRmcCA9IEBmb3BlbigkdGhpcy0+b3B0aW9uc1sn c2Z4J10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJlYWQoJGZwLCBmaWxlc2l6ZSgk dGhpcy0+b3B0aW9uc1snc2Z4J10pKTsNCgkJCQlmY2xvc2UoJGZwKTsNCgkJCQkkdGhpcy0+ YWRkX2RhdGEoJHRlbXApOw0KCQkJCSRvZmZzZXQgKz0gc3RybGVuKCR0ZW1wKTsNCgkJCQl1 bnNldCAoJHRlbXApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNv dWxkIG5vdCBvcGVuIHNmeCBtb2R1bGUgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ3NmeCddfS4i Ow0KDQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRjdXJyZW50KQ0KCQl7DQoJ CQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0aW9uc1snbmFtZSddKQ0KCQkJ CWNvbnRpbnVlOw0KDQoJCQkkdGltZWRhdGUgPSBleHBsb2RlKCIgIiwgZGF0ZSgiWSBuIGog RyBpIHMiLCAkY3VycmVudFsnc3RhdCddWzldKSk7DQoJCQkkdGltZWRhdGUgPSAoJHRpbWVk YXRlWzBdIC0gMTk4MCA8PCAyNSkgfCAoJHRpbWVkYXRlWzFdIDw8IDIxKSB8ICgkdGltZWRh dGVbMl0gPDwgMTYpIHwNCgkJCQkoJHRpbWVkYXRlWzNdIDw8IDExKSB8ICgkdGltZWRhdGVb NF0gPDwgNSkgfCAoJHRpbWVkYXRlWzVdKTsNCg0KCQkJJGJsb2NrID0gcGFjaygiVnZ2dlYi LCAweDA0MDM0YjUwLCAweDAwMEEsIDB4MDAwMCwgKGlzc2V0KCRjdXJyZW50WydtZXRob2Qn XSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4 LCAkdGltZWRhdGUpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwICYmICRj dXJyZW50Wyd0eXBlJ10gPT0gNSkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYi LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRb J25hbWUyJ10pICsgMSwgMHgwMDAwKTsNCgkJCQkkYmxvY2sgLj0gJGN1cnJlbnRbJ25hbWUy J10gLiAiLyI7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJJGNlbnRyYWwg Lj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMt Pm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJ CQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhv ZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCTB4MDAwMDAw MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkg KyAxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0eXBlJ10g PT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJh bCAuPSAkY3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zm c2V0ICs9ICgzMSArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0KCQkJZWxz ZSBpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJew0KCQkJCSRibG9jayAuPSBw YWNrKCJWVlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxl bigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50 WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSRjZW50cmFs IC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAwMTQsICR0aGlz LT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBBLCAweDAwMDAsDQoJ CQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRo b2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJCQkweDAwMDAw MDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10p LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0eXBlJ10gPT0g NSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAu PSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgz MCArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoJGZw ID0gQGZvcGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0g ZnJlYWQoJGZwLCAkY3VycmVudFsnc3RhdCddWzddKTsNCgkJCQlmY2xvc2UoJGZwKTsNCgkJ CQkkY3JjMzIgPSBjcmMzMigkdGVtcCk7DQoJCQkJaWYgKCFpc3NldCgkY3VycmVudFsnbWV0 aG9kJ10pICYmICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAxKQ0KCQkJCXsNCgkJCQkJ JHRlbXAgPSBnemNvbXByZXNzKCR0ZW1wLCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoJ CQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKSAtIDY7DQoJCQkJCSR0ZW1wID0gc3Vic3RyKCR0 ZW1wLCAyLCAkc2l6ZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJJHNpemUgPSBzdHJsZW4o JHRlbXApOw0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsICRjcmMzMiwgJHNpemUsICRj dXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7 DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0 YSgkYmxvY2spOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJdW5zZXQgKCR0 ZW1wKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwgMHgwMjAx NGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4MDAwMCA6 IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8fCAk dGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0aW1l ZGF0ZSwNCgkJCQkJJGNyYzMyLCAkc2l6ZSwgJGN1cnJlbnRbJ3N0YXQnXVs3XSwgc3RybGVu KCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTIn XTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCArIHN0cmxlbigkY3VycmVu dFsnbmFtZTInXSkgKyAkc2l6ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRoaXMtPmVycm9y W10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0gZm9yIHJlYWRp bmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRfZGF0YSgkY2Vu dHJhbCk7DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBhY2soIlZ2dnZ2VlZ2IiwgMHgwNjA1NGI1 MCwgMHgwMDAwLCAweDAwMDAsICRmaWxlcywgJGZpbGVzLCBzdHJsZW4oJGNlbnRyYWwpLCAk b2Zmc2V0LA0KCQkJIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA/IHN0cmxl bigkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA6IDB4MDAwMCkpOw0KDQoJCWlmICghZW1w dHkgKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pKQ0KCQkJJHRoaXMtPmFkZF9kYXRhKCR0 aGlzLT5vcHRpb25zWydjb21tZW50J10pOw0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJCXJldHVy biAxOw0KCX0NCn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgQ2xhc3MgZFVuemlwMiB2Mi42Mg0KIw0KIyAg QXV0aG9yOiBBbGV4YW5kcmUgVGVkZXNjaGkgKGQpDQojICBFLU1haWw6IGFsZXhhbmRyZWJy IGF0IGdtYWlsIGRvdCBjb20NCiMgIExvbmRyaW5hIC0gUFIgLyBCcmF6aWwNCiMNCiMgIE9i amVjdGl2ZToNCiMgICAgVGhpcyBjbGFzcyBhbGxvd3MgcHJvZ3JhbW1lciB0byBlYXNpbHkg dW56aXAgZmlsZXMgb24gdGhlIGZseS4NCiMNCiMgIFJlcXVpcmVtZW50czoNCiMgICAgVGhp cyBjbGFzcyByZXF1aXJlcyBleHRlbnNpb24gWkxpYiBFbmFibGVkLiBJdCBpcyBkZWZhdWx0 DQojICAgIGZvciBtb3N0IHNpdGUgaG9zdHMgYXJvdW5kIHRoZSB3b3JsZCwgYW5kIGZvciB0 aGUgUEhQIFdpbjMyIGRpc3QuDQojDQojICBUbyBkbzoNCiMgICAqIEVycm9yIGhhbmRsaW5n DQojICAgKiBXcml0ZSBhIFBIUC1TaWRlIGd6aW5mbGF0ZSwgdG8gY29tcGxldGVseSBhdm9p ZCBhbnkgZXh0ZXJuYWwgZXh0ZW5zaW9ucw0KIyAgICogV3JpdGUgb3RoZXIgZGVjb21wcmVz cyBhbGdvcml0aG1zDQojDQojICBNZXRob2RzOg0KIyAgKiBkVW56aXAyKCRmaWxlbmFtZSkg ICAgICAgICAtIENvbnN0cnVjdG9yIC0gT3BlbnMgJGZpbGVuYW1lDQojICAqIGdldExpc3Qo WyRzdG9wT25GaWxlXSkgICAgIC0gUmV0cmlldmUgdGhlIGZpbGUgbGlzdA0KIyAgKiBnZXRF eHRyYUluZm8oJHppcGZpbGVuYW1lKSAtIFJldHJpZXZlIG1vcmUgaW5mb3JtYXRpb24gYWJv dXQgY29tcHJlc3NlZCBmaWxlDQojICAqIGdldFppcEluZm8oWyRlbnRyeV0pICAgICAgIC0g UmV0cmlldmUgWklQIGZpbGUgZGV0YWlscy4NCiMgICogdW56aXAoJHppcGZpbGVuYW1lLCBb JG91dGZpbGVuYW1lLCBbJGFwcGx5Q2htb2RdXSkgLSBVbnppcCBmaWxlDQojICAqIHVuemlw QWxsKFskb3V0RGlyLCBbJHppcERpciwgWyRtYWludGFpblN0cnVjdHVyZSwgWyRhcHBseUNo bW9kXV1dXSkNCiMgICogY2xvc2UoKSAgICAgICAgICAgICAgICAgICAgLSBDbG9zZSBmaWxl IGhhbmRsZXIsIGJ1dCBrZWVwIHRoZSBsaXN0DQojICAqIF9fZGVzdHJveSgpICAgICAgICAg ICAgICAgIC0gQ2xvc2UgZmlsZSBoYW5kbGVyIGFuZCByZWxlYXNlIG1lbW9yeQ0KIw0KIyAg SWYgeW91IG1vZGlmeSB0aGlzIGNsYXNzLCBvciBoYXZlIGFueSBpZGVhcyB0byBpbXByb3Zl IGl0LCBwbGVhc2UgY29udGFjdCBtZSENCiMgIFlvdSBhcmUgYWxsb3dlZCB0byByZWRpc3Ry aWJ1dGUgdGhpcyBjbGFzcywgaWYgeW91IGtlZXAgbXkgbmFtZSBhbmQgY29udGFjdCBlLW1h aWwgb24gaXQuDQojDQojICBQTEVBU0UhIElGIFlPVSBVU0UgVEhJUyBDTEFTUyBJTiBBTlkg T0YgWU9VUiBQUk9KRUNUUywgUExFQVNFIExFVCBNRSBLTk9XIQ0KIyAgSWYgeW91IGhhdmUg cHJvYmxlbXMgdXNpbmcgaXQsIGRvbid0IHRoaW5rIHR3aWNlIGJlZm9yZSBjb250YWN0aW5n IG1lIQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMNCg0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29u dGVudHMnKSl7DQoJLy8gSWYgbm90IFBIUDUsIGNyZWF0ZXMgYSBjb21wYXRpYmxlIGZ1bmN0 aW9uDQoJRnVuY3Rpb24gZmlsZV9wdXRfY29udGVudHMoJGZpbGUsICRkYXRhKXsNCgkJaWYo JHRtcCA9IGZvcGVuKCRmaWxlLCAidyIpKXsNCgkJCWZ3cml0ZSgkdG1wLCAkZGF0YSk7DQoJ CQlmY2xvc2UoJHRtcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllY2hvICI8Yj5maWxl X3B1dF9jb250ZW50czo8L2I+IENhbm5vdCBjcmVhdGUgZmlsZSAkZmlsZTxicj4iOw0KCQly ZXR1cm4gZmFsc2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfZFVuemlwMnsNCglGdW5jdGlvbiBn ZXRWZXJzaW9uKCl7DQoJCXJldHVybiAiMi42MiI7DQoJfQ0KCS8vIFB1YmxpYw0KCXZhciAk ZmlsZU5hbWU7DQoJdmFyICRsYXN0RXJyb3I7DQoJdmFyICRjb21wcmVzc2VkTGlzdDsgLy8g WW91IHdpbGwgcHJvYmxhYmx5IHVzZSBvbmx5IHRoaXMgb25lIQ0KCXZhciAkY2VudHJhbERp ckxpc3Q7IC8vIENlbnRyYWwgZGlyIGxpc3QuLi4gSXQncyBhIGtpbmQgb2YgJ2V4dHJhIGF0 dHJpYnV0ZXMnIGZvciBhIHNldCBvZiBmaWxlcw0KCXZhciAkZW5kT2ZDZW50cmFsOyAgIC8v IEVuZCBvZiBjZW50cmFsIGRpciwgY29udGFpbnMgWklQIENvbW1lbnRzDQoJdmFyICRkZWJ1 ZzsNCg0KCS8vIFByaXZhdGUNCgl2YXIgJGZoOw0KCXZhciAkemlwU2lnbmF0dXJlID0gIlx4 NTBceDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmUNCgl2YXIg JGRpclNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBkaXIgaGVh ZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYi OyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoNCgkvLyBQdWJsaWMNCglGdW5j dGlvbiBzbWRfZFVuemlwMigkZmlsZU5hbWUpew0KCQkkdGhpcy0+ZmlsZU5hbWUgICAgICAg PSAkZmlsZU5hbWU7DQoJCSR0aGlzLT5jb21wcmVzc2VkTGlzdCA9DQoJCSR0aGlzLT5jZW50 cmFsRGlyTGlzdCA9DQoJCSR0aGlzLT5lbmRPZkNlbnRyYWwgICA9IEFycmF5KCk7DQoJfQ0K DQoJRnVuY3Rpb24gZ2V0TGlzdCgkc3RvcE9uRmlsZT1mYWxzZSl7DQoJCWlmKHNpemVvZigk dGhpcy0+Y29tcHJlc3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiUmV0dXJu aW5nIGFscmVhZHkgbG9hZGVkIGZpbGUgbGlzdC4iKTsNCgkJCXJldHVybiAkdGhpcy0+Y29t cHJlc3NlZExpc3Q7DQoJCX0NCg0KCQkvLyBPcGVuIGZpbGUsIGFuZCBzZXQgZmlsZSBoYW5k bGVyDQoJCSRmaCA9IGZvcGVuKCR0aGlzLT5maWxlTmFtZSwgInIiKTsNCgkJJHRoaXMtPmZo ID0gJiRmaDsNCgkJaWYoISRmaCl7DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkZhaWxlZCB0 byBsb2FkIGZpbGUuIik7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQkkdGhpcy0+ZGVi dWdNc2coMSwgIkxvYWRpbmcgbGlzdCBmcm9tICdFbmQgb2YgQ2VudHJhbCBEaXInIGluZGV4 IGxpc3QuLi4iKTsNCgkJaWYoISR0aGlzLT5fbG9hZEZpbGVMaXN0QnlFT0YoJGZoLCAkc3Rv cE9uRmlsZSkpew0KCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJGYWlsZWQhIFRyeWluZyB0byBs b2FkIGxpc3QgbG9va2luZyBmb3Igc2lnbmF0dXJlcy4uLiIpOw0KCQkJaWYoISR0aGlzLT5f bG9hZEZpbGVMaXN0QnlTaWduYXR1cmVzKCRmaCwgJHN0b3BPbkZpbGUpKXsNCgkJCQkkdGhp cy0+ZGVidWdNc2coMSwgIkZhaWxlZCEgQ291bGQgbm90IGZpbmQgYW55IHZhbGlkIGhlYWRl ci4iKTsNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlpJUCBGaWxlIGlzIGNvcnJ1cHRlZCBv ciBlbXB0eSIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KDQoJCWlmKCR0aGlz LT5kZWJ1Zyl7DQoJCQkjLS0tLS0tLSBEZWJ1ZyBjb21wcmVzc2VkTGlzdA0KCQkJJGtrayA9 IDA7DQoJCQllY2hvICI8dGFibGUgYm9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJk YW5hOyBib3JkZXI6IDFweCBzb2xpZCAjMDAwJz4iOw0KCQkJZm9yZWFjaCgkdGhpcy0+Y29t cHJlc3NlZExpc3QgYXMgJGZpbGVOYW1lPT4kaXRlbSl7DQoJCQkJaWYoISRra2sgJiYgJGtr az0xKXsNCgkJCQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQURBJz4iOw0KCQkJ CQlmb3JlYWNoKCRpdGVtIGFzICRmaWVsZE5hbWU9PiR2YWx1ZSkNCgkJCQkJCWVjaG8gIjx0 ZD4kZmllbGROYW1lPC90ZD4iOw0KCQkJCQllY2hvICc8L3RyPic7DQoJCQkJfQ0KCQkJCWVj aG8gIjx0ciBzdHlsZT0nYmFja2dyb3VuZDogI0NGQyc+IjsNCgkJCQlmb3JlYWNoKCRpdGVt IGFzICRmaWVsZE5hbWU9PiR2YWx1ZSl7DQoJCQkJCWlmKCRmaWVsZE5hbWUgPT0gJ2xhc3Rt b2RfZGF0ZXRpbWUnKQ0KCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dy YXA9J25vd3JhcCc+Ii5kYXRlKCJkL20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJ CQkJZWxzZQ0KCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25v d3JhcCc+JHZhbHVlPC90ZD4iOw0KCQkJCX0NCgkJCQllY2hvICI8L3RyPiI7DQoJCQl9DQoJ CQllY2hvICI8L3RhYmxlPiI7DQoNCgkJCSMtLS0tLS0tIERlYnVnIGNlbnRyYWxEaXJMaXN0 DQoJCQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+Y2VudHJhbERpckxpc3QpKXsN CgkJCQllY2hvICI8dGFibGUgYm9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJkYW5h OyBib3JkZXI6IDFweCBzb2xpZCAjMDAwJz4iOw0KCQkJCWZvcmVhY2goJHRoaXMtPmNlbnRy YWxEaXJMaXN0IGFzICRmaWxlTmFtZT0+JGl0ZW0pew0KCQkJCQlpZighJGtrayAmJiAka2tr PTEpew0KCQkJCQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQUFEJz4iOw0KCQkJ CQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpDQoJCQkJCQkJZWNobyAi PHRkPiRmaWVsZE5hbWU8L3RkPiI7DQoJCQkJCQllY2hvICc8L3RyPic7DQoJCQkJCX0NCgkJ CQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQ0NGJz4iOw0KCQkJCQlmb3JlYWNo KCRpdGVtIGFzICRmaWVsZE5hbWU9PiR2YWx1ZSl7DQoJCQkJCQlpZigkZmllbGROYW1lID09 ICdsYXN0bW9kX2RhdGV0aW1lJykNCgkJCQkJCQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5h bWUnIG5vd3JhcD0nbm93cmFwJz4iLmRhdGUoImQvbS9ZIEg6aTpzIiwgJHZhbHVlKS4iPC90 ZD4iOw0KCQkJCQkJZWxzZQ0KCQkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScg bm93cmFwPSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJCQkJfQ0KCQkJCQllY2hvICI8L3Ry PiI7DQoJCQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCg0KCQkJIy0tLS0tLS0g RGVidWcgZW5kT2ZDZW50cmFsDQoJCQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+ ZW5kT2ZDZW50cmFsKSl7DQoJCQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2Zv bnQ6IDExcHggVmVyZGFuYScgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDAnPiI7DQoJ CQkJZWNobyAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjREFBJz48dGQgY29sc3Bhbj0nMic+ ZFVuemlwIC0gRW5kIG9mIGZpbGU8L3RkPjwvdHI+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5l bmRPZkNlbnRyYWwgYXMgJGZpZWxkPT4kdmFsdWUpew0KCQkJCQllY2hvICI8dHI+IjsNCgkJ CQkJZWNobyAiPHRkIHN0eWxlPSdiYWNrZ3JvdW5kOiAjRkNDJz4kZmllbGQ8L3RkPiI7DQoJ CQkJCWVjaG8gIjx0ZCBzdHlsZT0nYmFja2dyb3VuZDogI0ZERCc+JHZhbHVlPC90ZD4iOw0K CQkJCQllY2hvICI8L3RyPiI7DQoJCQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0N CgkJfQ0KDQoJCXJldHVybiAkdGhpcy0+Y29tcHJlc3NlZExpc3Q7DQoJfQ0KCUZ1bmN0aW9u IGdldEV4dHJhSW5mbygkY29tcHJlc3NlZEZpbGVOYW1lKXsNCgkJcmV0dXJuDQoJCQlpc3Nl dCgkdGhpcy0+Y2VudHJhbERpckxpc3RbJGNvbXByZXNzZWRGaWxlTmFtZV0pPw0KCQkJJHRo aXMtPmNlbnRyYWxEaXJMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdOg0KCQkJZmFsc2U7DQoJ fQ0KCUZ1bmN0aW9uIGdldFppcEluZm8oJGRldGFpbD1mYWxzZSl7DQoJCXJldHVybiAkZGV0 YWlsPw0KCQkJJHRoaXMtPmVuZE9mQ2VudHJhbFskZGV0YWlsXToNCgkJCSR0aGlzLT5lbmRP ZkNlbnRyYWw7DQoJfQ0KDQoJRnVuY3Rpb24gdW56aXAoJGNvbXByZXNzZWRGaWxlTmFtZSwg JHRhcmdldEZpbGVOYW1lPWZhbHNlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoIXNpemVv ZigkdGhpcy0+Y29tcHJlc3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiVHJ5 aW5nIHRvIHVuemlwIGJlZm9yZSBsb2FkaW5nIGZpbGUgbGlzdC4uLiBMb2FkaW5nIGl0ISIp Ow0KCQkJJHRoaXMtPmdldExpc3QoZmFsc2UsICRjb21wcmVzc2VkRmlsZU5hbWUpOw0KCQl9 DQoNCgkJJGZkZXRhaWxzID0gJiR0aGlzLT5jb21wcmVzc2VkTGlzdFskY29tcHJlc3NlZEZp bGVOYW1lXTsNCgkJaWYoIWlzc2V0KCR0aGlzLT5jb21wcmVzc2VkTGlzdFskY29tcHJlc3Nl ZEZpbGVOYW1lXSkpew0KCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJGaWxlICc8Yj4kY29tcHJl c3NlZEZpbGVOYW1lPC9iPicgaXMgbm90IGNvbXByZXNzZWQgaW4gdGhlIHppcC4iKTsNCgkJ CXJldHVybiBmYWxzZTsNCgkJfQ0KCQlpZihzdWJzdHIoJGNvbXByZXNzZWRGaWxlTmFtZSwg LTEpID09ICIvIil7DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlRyeWluZyB0byB1bnppcCBh IGZvbGRlciBuYW1lICc8Yj4kY29tcHJlc3NlZEZpbGVOYW1lPC9iPicuIik7DQoJCQlyZXR1 cm4gZmFsc2U7DQoJCX0NCgkJaWYoISRmZGV0YWlsc1sndW5jb21wcmVzc2VkX3NpemUnXSl7 DQoJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkZpbGUgJzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8 L2I+JyBpcyBlbXB0eS4iKTsNCgkJCXJldHVybiAkdGFyZ2V0RmlsZU5hbWU/DQoJCQkJZmls ZV9wdXRfY29udGVudHMoJHRhcmdldEZpbGVOYW1lLCAiIik6DQoJCQkJIiI7DQoJCX0NCg0K CQlmc2VlaygkdGhpcy0+ZmgsICRmZGV0YWlsc1snY29udGVudHMtc3RhcnRPZmZzZXQnXSk7 DQoJCSRyZXQgPSAkdGhpcy0+dW5jb21wcmVzcygNCgkJCQlmcmVhZCgkdGhpcy0+ZmgsICRm ZGV0YWlsc1snY29tcHJlc3NlZF9zaXplJ10pLA0KCQkJCSRmZGV0YWlsc1snY29tcHJlc3Np b25fbWV0aG9kJ10sDQoJCQkJJGZkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddLA0KCQkJ CSR0YXJnZXRGaWxlTmFtZQ0KCQkJKTsNCgkJaWYoJGFwcGx5Q2htb2QgJiYgJHRhcmdldEZp bGVOYW1lKQ0KCQkJY2htb2QoJHRhcmdldEZpbGVOYW1lLCAwNzc3KTsNCgkJDQoJCXJldHVy biAkcmV0Ow0KCX0NCglGdW5jdGlvbiB1bnppcEFsbCgkdGFyZ2V0RGlyPWZhbHNlLCAkYmFz ZURpcj0iIiwgJG1haW50YWluU3RydWN0dXJlPXRydWUsICRhcHBseUNobW9kPTA3Nzcpew0K CQlpZigkdGFyZ2V0RGlyID09PSBmYWxzZSkNCgkJCSR0YXJnZXREaXIgPSBkaXJuYW1lKCRf U0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSkuIi8iOw0KCQkNCgkJJGxpc3RhID0gJHRoaXMt PmdldExpc3QoKTsNCgkJaWYoc2l6ZW9mKCRsaXN0YSkpIGZvcmVhY2goJGxpc3RhIGFzICRm aWxlTmFtZT0+JHRyYXNoKXsNCgkJCSRkaXJuYW1lICA9IGRpcm5hbWUoJGZpbGVOYW1lKTsN CgkJCSRvdXRETiAgICA9ICIkdGFyZ2V0RGlyLyRkaXJuYW1lIjsNCgkJCQ0KCQkJaWYoc3Vi c3RyKCRkaXJuYW1lLCAwLCBzdHJsZW4oJGJhc2VEaXIpKSAhPSAkYmFzZURpcikNCgkJCQlj b250aW51ZTsNCgkJCQ0KCQkJaWYoIWlzX2Rpcigkb3V0RE4pICYmICRtYWludGFpblN0cnVj dHVyZSl7DQoJCQkJJHN0ciA9ICIiOw0KCQkJCSRmb2xkZXJzID0gZXhwbG9kZSgiLyIsICRk aXJuYW1lKTsNCgkJCQlmb3JlYWNoKCRmb2xkZXJzIGFzICRmb2xkZXIpew0KCQkJCQkkc3Ry ID0gJHN0cj8iJHN0ci8kZm9sZGVyIjokZm9sZGVyOw0KCQkJCQlpZighaXNfZGlyKCIkdGFy Z2V0RGlyLyRzdHIiKSl7DQoJCQkJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkNyZWF0aW5nIGZv bGRlcjogJHRhcmdldERpci8kc3RyIik7DQoJCQkJCQlta2RpcigiJHRhcmdldERpci8kc3Ry Iik7DQoJCQkJCQlpZigkYXBwbHlDaG1vZCkNCgkJCQkJCQljaG1vZCgiJHRhcmdldERpci8k c3RyIiwgJGFwcGx5Q2htb2QpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJaWYoc3Vic3Ry KCRmaWxlTmFtZSwgLTEsIDEpID09ICIvIikNCgkJCQljb250aW51ZTsNCg0KCQkJJG1haW50 YWluU3RydWN0dXJlPw0KCQkJCSR0aGlzLT51bnppcCgkZmlsZU5hbWUsICIkdGFyZ2V0RGly LyRmaWxlTmFtZSIsICRhcHBseUNobW9kKToNCgkJCQkkdGhpcy0+dW56aXAoJGZpbGVOYW1l LCAiJHRhcmdldERpci8iLmJhc2VuYW1lKCRmaWxlTmFtZSksICRhcHBseUNobW9kKTsNCgkJ fQ0KCX0NCgkNCglGdW5jdGlvbiBjbG9zZSgpeyAgICAgLy8gRnJlZSB0aGUgZmlsZSByZXNv dXJjZQ0KCQlpZigkdGhpcy0+ZmgpDQoJCQlmY2xvc2UoJHRoaXMtPmZoKTsNCgl9DQoJRnVu Y3Rpb24gX19kZXN0cm95KCl7IA0KCQkkdGhpcy0+Y2xvc2UoKTsNCgl9DQoNCgkvLyBQcml2 YXRlICh5b3Ugc2hvdWxkIE5PVCBjYWxsIHRoZXNlIG1ldGhvZHMpOg0KCUZ1bmN0aW9uIHVu Y29tcHJlc3MoJiRjb250ZW50LCAkbW9kZSwgJHVuY29tcHJlc3NlZFNpemUsICR0YXJnZXRG aWxlTmFtZT1mYWxzZSl7DQoJCXN3aXRjaCgkbW9kZSl7DQoJCQljYXNlIDA6DQoJCQkJLy8g Tm90IGNvbXByZXNzZWQNCgkJCQlyZXR1cm4gJHRhcmdldEZpbGVOYW1lPw0KCQkJCQlmaWxl X3B1dF9jb250ZW50cygkdGFyZ2V0RmlsZU5hbWUsICRjb250ZW50KToNCgkJCQkJJGNvbnRl bnQ7DQoJCQljYXNlIDE6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJTaHJ1bmsgbW9kZSBp cyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNl IDI6DQoJCQljYXNlIDM6DQoJCQljYXNlIDQ6DQoJCQljYXNlIDU6DQoJCQkJJHRoaXMtPmRl YnVnTXNnKDIsICJDb21wcmVzc2lvbiBmYWN0b3IgIi4oJG1vZGUtMSkuIiBpcyBub3Qgc3Vw cG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDY6DQoJCQkJ JHRoaXMtPmRlYnVnTXNnKDIsICJJbXBsb2RlIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIp Ow0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgNzoNCgkJCQkkdGhpcy0+ZGVidWdNc2co MiwgIlRva2VuaXppbmcgY29tcHJlc3Npb24gYWxnb3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQu Li4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgODoNCgkJCQkvLyBEZWZs YXRlDQoJCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQkJZmlsZV9wdXRfY29udGVu dHMoJHRhcmdldEZpbGVOYW1lLCBnemluZmxhdGUoJGNvbnRlbnQsICR1bmNvbXByZXNzZWRT aXplKSk6DQoJCQkJCWd6aW5mbGF0ZSgkY29udGVudCwgJHVuY29tcHJlc3NlZFNpemUpOw0K CQkJY2FzZSA5Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiRW5oYW5jZWQgRGVmbGF0aW5n IGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNh c2UgMTA6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJQS1dBUkUgRGF0ZSBDb21wcmVzc2lv biBMaWJyYXJ5IEltcG9sb2RpbmcgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJ cmV0dXJuIGZhbHNlOw0KICAgICAgICAgICBjYXNlIDEyOg0KICAgICAgICAgICAgICAgLy8g QnppcDINCiAgICAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0RmlsZU5hbWU/DQogICAgICAg ICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRhcmdldEZpbGVOYW1lLCBiemRlY29t cHJlc3MoJGNvbnRlbnQpKToNCiAgICAgICAgICAgICAgICAgICBiemRlY29tcHJlc3MoJGNv bnRlbnQpOw0KCQkJY2FzZSAxODoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIklCTSBURVJT RSBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlk ZWZhdWx0Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiVW5rbm93biB1bmNvbXByZXNzIG1l dGhvZDogJG1vZGUiKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgl9DQoJRnVuY3Rpb24g ZGVidWdNc2coJGxldmVsLCAkc3RyaW5nKXsNCgkJaWYoJHRoaXMtPmRlYnVnKXsNCgkJCWlm KCRsZXZlbCA9PSAxKQ0KCQkJCWVjaG8gIjxiIHN0eWxlPSdjb2xvcjogIzc3Nyc+ZFVuemlw Mjo8L2I+ICRzdHJpbmc8YnI+IjsNCgkJCQ0KCQkJaWYoJGxldmVsID09IDIpDQoJCQkJZWNo byAiPGIgc3R5bGU9J2NvbG9yOiAjRjAwJz5kVW56aXAyOjwvYj4gJHN0cmluZzxicj4iOw0K CQl9DQoJCSR0aGlzLT5sYXN0RXJyb3IgPSAkc3RyaW5nOw0KCX0NCglGdW5jdGlvbiBnZXRM YXN0RXJyb3IoKXsNCgkJcmV0dXJuICR0aGlzLT5sYXN0RXJyb3I7DQoJfQ0KDQoJRnVuY3Rp b24gX2xvYWRGaWxlTGlzdEJ5RU9GKCYkZmgsICRzdG9wT25GaWxlPWZhbHNlKXsNCgkJLy8g Q2hlY2sgaWYgdGhlcmUncyBhIHZhbGlkIENlbnRyYWwgRGlyIHNpZ25hdHVyZS4NCgkJLy8g TGV0J3MgY29uc2lkZXIgYSBmaWxlIGNvbW1lbnQgc21hbGxlciB0aGFuIDEwMjQgY2hhcmFj dGVycy4uLg0KCQkvLyBBY3R1YWxseSwgaXQgbGVuZ3RoIGNhbiBiZSA2NTUzNi4uIEJ1dCB3 ZSdyZSBub3QgZ29pbmcgdG8gc3VwcG9ydCBpdC4NCg0KCQlmb3IoJHggPSAwOyAkeCA8IDEw MjQ7ICR4Kyspew0KCQkJZnNlZWsoJGZoLCAtMjItJHgsIFNFRUtfRU5EKTsNCg0KCQkJJHNp Z25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT5k aXJTaWduYXR1cmVFKXsNCgkJCQkvLyBJZiBmb3VuZCBFT0YgQ2VudHJhbCBEaXINCgkJCQkk ZW9kaXJbJ2Rpc2tfbnVtYmVyX3RoaXMnXSAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAy KSk7IC8vIG51bWJlciBvZiB0aGlzIGRpc2sNCgkJCQkkZW9kaXJbJ2Rpc2tfbnVtYmVyJ10g ICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIG51bWJlciBvZiB0aGUg ZGlzayB3aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkNCgkJCQkkZW9k aXJbJ3RvdGFsX2VudHJpZXNfdGhpcyddID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7 IC8vIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpciBvbiB0aGlz IGRpc2sNCgkJCQkkZW9kaXJbJ3RvdGFsX2VudHJpZXMnXSAgICAgID0gdW5wYWNrKCJ2Iiwg ZnJlYWQoJGZoLCAyKSk7IC8vIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluDQoJCQkJJGVv ZGlyWydzaXplX29mX2NkJ10gICAgICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkp OyAvLyBzaXplIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQ0KCQkJCSRlb2Rpclsnb2Zmc2V0 X3N0YXJ0X2NkJ10gICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gb2Zmc2V0 IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3Rh cnRpbmcgZGlzayBudW1iZXINCgkJCQkkemlwRmlsZUNvbW1lbnRMZW5naHQgICAgICAgID0g dW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHppcGZpbGUgY29tbWVudCBsZW5ndGgN CgkJCQkkZW9kaXJbJ3ppcGZpbGVfY29tbWVudCddICAgID0gJHppcEZpbGVDb21tZW50TGVu Z2h0WzFdP2ZyZWFkKCRmaCwgJHppcEZpbGVDb21tZW50TGVuZ2h0WzFdKTonJzsgLy8gemlw ZmlsZSBjb21tZW50DQoJCQkJJHRoaXMtPmVuZE9mQ2VudHJhbCA9IEFycmF5KA0KCQkJCQkn ZGlza19udW1iZXJfdGhpcyc9PiRlb2RpclsnZGlza19udW1iZXJfdGhpcyddWzFdLA0KCQkJ CQknZGlza19udW1iZXInPT4kZW9kaXJbJ2Rpc2tfbnVtYmVyJ11bMV0sDQoJCQkJCSd0b3Rh bF9lbnRyaWVzX3RoaXMnPT4kZW9kaXJbJ3RvdGFsX2VudHJpZXNfdGhpcyddWzFdLA0KCQkJ CQkndG90YWxfZW50cmllcyc9PiRlb2RpclsndG90YWxfZW50cmllcyddWzFdLA0KCQkJCQkn c2l6ZV9vZl9jZCc9PiRlb2Rpclsnc2l6ZV9vZl9jZCddWzFdLA0KCQkJCQknb2Zmc2V0X3N0 YXJ0X2NkJz0+JGVvZGlyWydvZmZzZXRfc3RhcnRfY2QnXVsxXSwNCgkJCQkJJ3ppcGZpbGVf Y29tbWVudCc9PiRlb2RpclsnemlwZmlsZV9jb21tZW50J10sDQoJCQkJKTsNCg0KCQkJCS8v IFRoZW4sIGxvYWQgZmlsZSBsaXN0DQoJCQkJZnNlZWsoJGZoLCAkdGhpcy0+ZW5kT2ZDZW50 cmFsWydvZmZzZXRfc3RhcnRfY2QnXSk7DQoJCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwg NCk7DQoNCgkJCQl3aGlsZSgkc2lnbmF0dXJlID09ICR0aGlzLT5kaXJTaWduYXR1cmUpew0K CQkJCQkkZGlyWyd2ZXJzaW9uX21hZGVieSddICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgk ZmgsIDIpKTsgLy8gdmVyc2lvbiBtYWRlIGJ5DQoJCQkJCSRkaXJbJ3ZlcnNpb25fbmVlZGVk J10gICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJzaW9uIG5lZWRl ZCB0byBleHRyYWN0DQoJCQkJCSRkaXJbJ2dlbmVyYWxfYml0X2ZsYWcnXSAgICA9IHVucGFj aygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcNCgkJ CQkJJGRpclsnY29tcHJlc3Npb25fbWV0aG9kJ10gID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZo LCAyKSk7IC8vIGNvbXByZXNzaW9uIG1ldGhvZA0KCQkJCQkkZGlyWydsYXN0bW9kX3RpbWUn XSAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmls ZSB0aW1lDQoJCQkJCSRkaXJbJ2xhc3Rtb2RfZGF0ZSddICAgICAgICA9IHVucGFjaygidiIs IGZyZWFkKCRmaCwgMikpOyAvLyBsYXN0IG1vZCBmaWxlIGRhdGUNCgkJCQkJJGRpclsnY3Jj LTMyJ10gICAgICAgICAgICAgID0gZnJlYWQoJGZoLCA0KTsgICAgICAgICAgICAgIC8vIGNy Yy0zMg0KCQkJCQkkZGlyWydjb21wcmVzc2VkX3NpemUnXSAgICAgPSB1bnBhY2soIlYiLCBm cmVhZCgkZmgsIDQpKTsgLy8gY29tcHJlc3NlZCBzaXplDQoJCQkJCSRkaXJbJ3VuY29tcHJl c3NlZF9zaXplJ10gICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyB1bmNvbXBy ZXNzZWQgc2l6ZQ0KCQkJCQkkZmlsZU5hbWVMZW5ndGggICAgICAgICAgICAgPSB1bnBhY2so InYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZmlsZW5hbWUgbGVuZ3RoDQoJCQkJCSRleHRyYUZp ZWxkTGVuZ3RoICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBl eHRyYSBmaWVsZCBsZW5ndGgNCgkJCQkJJGZpbGVDb21tZW50TGVuZ3RoICAgICAgICAgID0g dW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJ CQkJJGRpclsnZGlza19udW1iZXJfc3RhcnQnXSAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZo LCAyKSk7IC8vIGRpc2sgbnVtYmVyIHN0YXJ0DQoJCQkJCSRkaXJbJ2ludGVybmFsX2F0dHJp YnV0ZXMnXSA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBpbnRlcm5hbCBmaWxl IGF0dHJpYnV0ZXMtYnl0ZTENCgkJCQkJJGRpclsnZXh0ZXJuYWxfYXR0cmlidXRlczEnXT0g dW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGV4dGVybmFsIGZpbGUgYXR0cmlidXRl cy1ieXRlMg0KCQkJCQkkZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMiddPSB1bnBhY2soInYi LCBmcmVhZCgkZmgsIDIpKTsgLy8gZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQoJCQkJCSRk aXJbJ3JlbGF0aXZlX29mZnNldCddICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkp OyAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgbG9jYWwgaGVhZGVyDQoJCQkJCSRkaXJbJ2ZpbGVf bmFtZSddICAgICAgICAgICA9IGZyZWFkKCRmaCwgJGZpbGVOYW1lTGVuZ3RoWzFdKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGVuYW1lDQoJCQkJCSRkaXJbJ2V4dHJh X2ZpZWxkJ10gICAgICAgICA9ICRleHRyYUZpZWxkTGVuZ3RoWzFdID9mcmVhZCgkZmgsICRl eHRyYUZpZWxkTGVuZ3RoWzFdKSA6Jyc7IC8vIGV4dHJhIGZpZWxkDQoJCQkJCSRkaXJbJ2Zp bGVfY29tbWVudCddICAgICAgICA9ICRmaWxlQ29tbWVudExlbmd0aFsxXT9mcmVhZCgkZmgs ICRmaWxlQ29tbWVudExlbmd0aFsxXSk6Jyc7IC8vIGZpbGUgY29tbWVudA0KDQoJCQkJCS8v IENvbnZlcnQgdGhlIGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBVTklY IFRpbWVzdGFtcA0KCQkJCQkkQklObGFzdG1vZF9kYXRlID0gc3RyX3BhZChkZWNiaW4oJGRp clsnbGFzdG1vZF9kYXRlJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkk QklObGFzdG1vZF90aW1lID0gc3RyX3BhZChkZWNiaW4oJGRpclsnbGFzdG1vZF90aW1lJ11b MV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkkbGFzdG1vZF9kYXRlWSA9IGJp bmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDAsIDcpKSsxOTgwOw0KCQkJCQkkbGFz dG1vZF9kYXRlTSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsN CgkJCQkJJGxhc3Rtb2RfZGF0ZUQgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUs IDExLCA1KSk7DQoJCQkJCSRsYXN0bW9kX3RpbWVIID0gYmluZGVjKHN1YnN0cigkQklObGFz dG1vZF90aW1lLCAgIDAsIDUpKTsNCgkJCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vi c3RyKCRCSU5sYXN0bW9kX3RpbWUsICAgNSwgNikpOw0KCQkJCQkkbGFzdG1vZF90aW1lUyA9 IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgIDExLCA1KSk7DQoNCgkJCQkJLy8g U29tZSBwcm90ZWN0aW9uIGFnYWlucyBhdHRhY2tzLi4uDQoJCQkJCWlmKCEkZGlyWydmaWxl X25hbWUnXSA9ICR0aGlzLT5fcHJvdGVjdCgkZGlyWydmaWxlX25hbWUnXSkpDQoJCQkJCQlj b250aW51ZTsNCg0KCQkJCQkkdGhpcy0+Y2VudHJhbERpckxpc3RbJGRpclsnZmlsZV9uYW1l J11dID0gQXJyYXkoDQoJCQkJCQkndmVyc2lvbl9tYWRlYnknPT4kZGlyWyd2ZXJzaW9uX21h ZGVieSddWzFdLA0KCQkJCQkJJ3ZlcnNpb25fbmVlZGVkJz0+JGRpclsndmVyc2lvbl9uZWVk ZWQnXVsxXSwNCgkJCQkJCSdnZW5lcmFsX2JpdF9mbGFnJz0+c3RyX3BhZChkZWNiaW4oJGRp clsnZ2VuZXJhbF9iaXRfZmxhZyddWzFdKSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJ CQkJJ2NvbXByZXNzaW9uX21ldGhvZCc9PiRkaXJbJ2NvbXByZXNzaW9uX21ldGhvZCddWzFd LA0KCQkJCQkJJ2xhc3Rtb2RfZGF0ZXRpbWUnICA9Pm1rdGltZSgkbGFzdG1vZF90aW1lSCwg JGxhc3Rtb2RfdGltZU0sICRsYXN0bW9kX3RpbWVTLCAkbGFzdG1vZF9kYXRlTSwgJGxhc3Rt b2RfZGF0ZUQsICRsYXN0bW9kX2RhdGVZKSwNCgkJCQkJCSdjcmMtMzInICAgICAgICAgICAg PT5zdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bM10pKSwgMiwgJzAnLCBTVFJf UEFEX0xFRlQpLg0KCQkJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZGlyWydjcmMt MzInXVsyXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkJCSAgc3RyX3Bh ZChkZWNoZXgob3JkKCRkaXJbJ2NyYy0zMiddWzFdKSksIDIsICcwJywgU1RSX1BBRF9MRUZU KS4NCgkJCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bMF0p KSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2NvbXByZXNzZWRfc2l6ZSc9PiRk aXJbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCQkJJ3VuY29tcHJlc3NlZF9zaXplJz0+ JGRpclsndW5jb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkJCSdkaXNrX251bWJlcl9zdGFy dCc9PiRkaXJbJ2Rpc2tfbnVtYmVyX3N0YXJ0J11bMV0sDQoJCQkJCQknaW50ZXJuYWxfYXR0 cmlidXRlcyc9PiRkaXJbJ2ludGVybmFsX2F0dHJpYnV0ZXMnXVsxXSwNCgkJCQkJCSdleHRl cm5hbF9hdHRyaWJ1dGVzMSc9PiRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMxJ11bMV0sDQoJ CQkJCQknZXh0ZXJuYWxfYXR0cmlidXRlczInPT4kZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVz MiddWzFdLA0KCQkJCQkJJ3JlbGF0aXZlX29mZnNldCc9PiRkaXJbJ3JlbGF0aXZlX29mZnNl dCddWzFdLA0KCQkJCQkJJ2ZpbGVfbmFtZSc9PiRkaXJbJ2ZpbGVfbmFtZSddLA0KCQkJCQkJ J2V4dHJhX2ZpZWxkJz0+JGRpclsnZXh0cmFfZmllbGQnXSwNCgkJCQkJCSdmaWxlX2NvbW1l bnQnPT4kZGlyWydmaWxlX2NvbW1lbnQnXSwNCgkJCQkJKTsNCgkJCQkJJHNpZ25hdHVyZSA9 IGZyZWFkKCRmaCwgNCk7DQoJCQkJfQ0KDQoJCQkJLy8gSWYgbG9hZGVkIGNlbnRyYWxEaXJz LCB0aGVuIHRyeSB0byBpZGVudGlmeSB0aGUgb2Zmc2V0UG9zaXRpb24gb2YgdGhlIGNvbXBy ZXNzZWQgZGF0YS4NCgkJCQlpZigkdGhpcy0+Y2VudHJhbERpckxpc3QpIGZvcmVhY2goJHRo aXMtPmNlbnRyYWxEaXJMaXN0IGFzICRmaWxlbmFtZT0+JGRldGFpbHMpew0KCQkJCQkkaSA9 ICR0aGlzLT5fZ2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCRmaCwgJGRldGFpbHNbJ3JlbGF0 aXZlX29mZnNldCddKTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1b J2ZpbGVfbmFtZSddICAgICAgICAgID0gJGZpbGVuYW1lOw0KCQkJCQkkdGhpcy0+Y29tcHJl c3NlZExpc3RbJGZpbGVuYW1lXVsnY29tcHJlc3Npb25fbWV0aG9kJ10gPSAkZGV0YWlsc1sn Y29tcHJlc3Npb25fbWV0aG9kJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmls ZW5hbWVdWyd2ZXJzaW9uX25lZWRlZCddICAgICA9ICRkZXRhaWxzWyd2ZXJzaW9uX25lZWRl ZCddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnbGFzdG1vZF9k YXRldGltZSddICAgPSAkZGV0YWlsc1snbGFzdG1vZF9kYXRldGltZSddOw0KCQkJCQkkdGhp cy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY3JjLTMyJ10gICAgICAgICAgICAgPSAk ZGV0YWlsc1snY3JjLTMyJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5h bWVdWydjb21wcmVzc2VkX3NpemUnXSAgICA9ICRkZXRhaWxzWydjb21wcmVzc2VkX3NpemUn XTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ3VuY29tcHJlc3Nl ZF9zaXplJ10gID0gJGRldGFpbHNbJ3VuY29tcHJlc3NlZF9zaXplJ107DQoJCQkJCSR0aGlz LT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWydsYXN0bW9kX2RhdGV0aW1lJ10gICA9ICRk ZXRhaWxzWydsYXN0bW9kX2RhdGV0aW1lJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlz dFskZmlsZW5hbWVdWydleHRyYV9maWVsZCddICAgICAgICA9ICRpWydleHRyYV9maWVsZCdd Ow0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY29udGVudHMtc3Rh cnRPZmZzZXQnXT0kaVsnY29udGVudHMtc3RhcnRPZmZzZXQnXTsNCgkJCQkJaWYoc3RydG9s b3dlcigkc3RvcE9uRmlsZSkgPT0gc3RydG9sb3dlcigkZmlsZW5hbWUpKQ0KCQkJCQkJYnJl YWs7DQoJCQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxz ZTsNCgl9DQoJRnVuY3Rpb24gX2xvYWRGaWxlTGlzdEJ5U2lnbmF0dXJlcygmJGZoLCAkc3Rv cE9uRmlsZT1mYWxzZSl7DQoJCWZzZWVrKCRmaCwgMCk7DQoJCQ0KCQkkcmV0dXJuID0gZmFs c2U7DQoJCWZvcig7Oyl7DQoJCQkkZGV0YWlscyA9ICR0aGlzLT5fZ2V0RmlsZUhlYWRlcklu Zm9ybWF0aW9uKCRmaCk7DQoJCQlpZighJGRldGFpbHMpew0KCQkJCSR0aGlzLT5kZWJ1Z01z ZygxLCAiSW52YWxpZCBzaWduYXR1cmUuIFRyeWluZyB0byB2ZXJpZnkgaWYgaXMgb2xkIHN0 eWxlIERhdGEgRGVzY3JpcHRvci4uLiIpOw0KCQkJCWZzZWVrKCRmaCwgMTIgLSA0LCBTRUVL X0NVUik7IC8vIDEyOiBEYXRhIGRlc2NyaXB0b3IgLSA0OiBTaWduYXR1cmUgKHRoYXQgd2ls bCBiZSByZWFkIGFnYWluKQ0KCQkJCSRkZXRhaWxzID0gJHRoaXMtPl9nZXRGaWxlSGVhZGVy SW5mb3JtYXRpb24oJGZoKTsNCgkJCX0NCgkJCWlmKCEkZGV0YWlscyl7DQoJCQkJJHRoaXMt PmRlYnVnTXNnKDEsICJTdGlsbCBpbnZhbGlkIHNpZ25hdHVyZS4gUHJvYmFibHkgcmVhY2hl ZCB0aGUgZW5kIG9mIHRoZSBmaWxlLiIpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJJGZpbGVu YW1lID0gJGRldGFpbHNbJ2ZpbGVfbmFtZSddOw0KCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0 WyRmaWxlbmFtZV0gPSAkZGV0YWlsczsNCgkJCSRyZXR1cm4gPSB0cnVlOw0KCQkJaWYoc3Ry dG9sb3dlcigkc3RvcE9uRmlsZSkgPT0gc3RydG9sb3dlcigkZmlsZW5hbWUpKQ0KCQkJCWJy ZWFrOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJHJldHVybjsNCgl9DQoJRnVuY3Rpb24gX2dldEZp bGVIZWFkZXJJbmZvcm1hdGlvbigmJGZoLCAkc3RhcnRPZmZzZXQ9ZmFsc2Upew0KCQlpZigk c3RhcnRPZmZzZXQgIT09IGZhbHNlKQ0KCQkJZnNlZWsoJGZoLCAkc3RhcnRPZmZzZXQpOw0K CQkNCgkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCWlmKCRzaWduYXR1cmUgPT0g JHRoaXMtPnppcFNpZ25hdHVyZSl7DQoJCQkjICR0aGlzLT5kZWJ1Z01zZygxLCAiWmlwIFNp Z25hdHVyZSEiKTsNCgkJCQ0KCQkJLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSB6aXBw ZWQgZmlsZQ0KCQkJJGZpbGVbJ3ZlcnNpb25fbmVlZGVkJ10gICAgID0gdW5wYWNrKCJ2Iiwg ZnJlYWQoJGZoLCAyKSk7IC8vIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJhY3QNCgkJCSRmaWxl WydnZW5lcmFsX2JpdF9mbGFnJ10gICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAv LyBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcNCgkJCSRmaWxlWydjb21wcmVzc2lvbl9tZXRo b2QnXSA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBjb21wcmVzc2lvbiBtZXRo b2QNCgkJCSRmaWxlWydsYXN0bW9kX3RpbWUnXSAgICAgICA9IHVucGFjaygidiIsIGZyZWFk KCRmaCwgMikpOyAvLyBsYXN0IG1vZCBmaWxlIHRpbWUNCgkJCSRmaWxlWydsYXN0bW9kX2Rh dGUnXSAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBsYXN0IG1vZCBm aWxlIGRhdGUNCgkJCSRmaWxlWydjcmMtMzInXSAgICAgICAgICAgICA9IGZyZWFkKCRmaCwg NCk7ICAgICAgICAgICAgICAvLyBjcmMtMzINCgkJCSRmaWxlWydjb21wcmVzc2VkX3NpemUn XSAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBjb21wcmVzc2VkIHNpemUN CgkJCSRmaWxlWyd1bmNvbXByZXNzZWRfc2l6ZSddICA9IHVucGFjaygiViIsIGZyZWFkKCRm aCwgNCkpOyAvLyB1bmNvbXByZXNzZWQgc2l6ZQ0KCQkJJGZpbGVOYW1lTGVuZ3RoICAgICAg ICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGZpbGVuYW1lIGxlbmd0 aA0KCQkJJGV4dHJhRmllbGRMZW5ndGggICAgICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQo JGZoLCAyKSk7IC8vIGV4dHJhIGZpZWxkIGxlbmd0aA0KCQkJJGZpbGVbJ2ZpbGVfbmFtZSdd ICAgICAgICAgID0gZnJlYWQoJGZoLCAkZmlsZU5hbWVMZW5ndGhbMV0pOyAvLyBmaWxlbmFt ZQ0KCQkJJGZpbGVbJ2V4dHJhX2ZpZWxkJ10gICAgICAgID0gJGV4dHJhRmllbGRMZW5ndGhb MV0/ZnJlYWQoJGZoLCAkZXh0cmFGaWVsZExlbmd0aFsxXSk6Jyc7IC8vIGV4dHJhIGZpZWxk DQoJCQkkZmlsZVsnY29udGVudHMtc3RhcnRPZmZzZXQnXT0gZnRlbGwoJGZoKTsNCgkJCQ0K CQkJLy8gQnlwYXNzIHRoZSB3aG9sZSBjb21wcmVzc2VkIGNvbnRlbnRzLCBhbmQgbG9vayBm b3IgdGhlIG5leHQgZmlsZQ0KCQkJZnNlZWsoJGZoLCAkZmlsZVsnY29tcHJlc3NlZF9zaXpl J11bMV0sIFNFRUtfQ1VSKTsNCgkJCQ0KCQkJLy8gQ29udmVydCB0aGUgZGF0ZSBhbmQgdGlt ZSwgZnJvbSBNUy1ET1MgZm9ybWF0IHRvIFVOSVggVGltZXN0YW1wDQoJCQkkQklObGFzdG1v ZF9kYXRlID0gc3RyX3BhZChkZWNiaW4oJGZpbGVbJ2xhc3Rtb2RfZGF0ZSddWzFdKSwgMTYs ICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCSRCSU5sYXN0bW9kX3RpbWUgPSBzdHJfcGFkKGRl Y2JpbigkZmlsZVsnbGFzdG1vZF90aW1lJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQp Ow0KCQkJJGxhc3Rtb2RfZGF0ZVkgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUs ICAwLCA3KSkrMTk4MDsNCgkJCSRsYXN0bW9kX2RhdGVNID0gYmluZGVjKHN1YnN0cigkQklO bGFzdG1vZF9kYXRlLCAgNywgNCkpOw0KCQkJJGxhc3Rtb2RfZGF0ZUQgPSBiaW5kZWMoc3Vi c3RyKCRCSU5sYXN0bW9kX2RhdGUsIDExLCA1KSk7DQoJCQkkbGFzdG1vZF90aW1lSCA9IGJp bmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgICAwLCA1KSk7DQoJCQkkbGFzdG1vZF90 aW1lTSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgICA1LCA2KSk7DQoJCQkk bGFzdG1vZF90aW1lUyA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgIDExLCA1 KSk7DQoJCQkNCgkJCS8vIFNvbWUgcHJvdGVjdGlvbiBhZ2FpbnMgYXR0YWNrcy4uLg0KCQkJ aWYoISRmaWxlWydmaWxlX25hbWUnXSA9ICR0aGlzLT5fcHJvdGVjdCgkZmlsZVsnZmlsZV9u YW1lJ10pKQ0KCQkJCXJldHVybjsNCgkJCQ0KCQkJLy8gTW91bnQgZmlsZSB0YWJsZQ0KCQkJ JGkgPSBBcnJheSgNCgkJCQknZmlsZV9uYW1lJyAgICAgICAgID0+JGZpbGVbJ2ZpbGVfbmFt ZSddLA0KCQkJCSdjb21wcmVzc2lvbl9tZXRob2QnPT4kZmlsZVsnY29tcHJlc3Npb25fbWV0 aG9kJ11bMV0sDQoJCQkJJ3ZlcnNpb25fbmVlZGVkJyAgICA9PiRmaWxlWyd2ZXJzaW9uX25l ZWRlZCddWzFdLA0KCQkJCSdsYXN0bW9kX2RhdGV0aW1lJyAgPT5ta3RpbWUoJGxhc3Rtb2Rf dGltZUgsICRsYXN0bW9kX3RpbWVNLCAkbGFzdG1vZF90aW1lUywgJGxhc3Rtb2RfZGF0ZU0s ICRsYXN0bW9kX2RhdGVELCAkbGFzdG1vZF9kYXRlWSksDQoJCQkJJ2NyYy0zMicgICAgICAg ICAgICA9PnN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11bM10pKSwgMiwgJzAn LCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGZpbGVb J2NyYy0zMiddWzJdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCSAgc3Ry X3BhZChkZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVsxXSkpLCAyLCAnMCcsIFNUUl9QQURf TEVGVCkuDQoJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11b MF0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCSdjb21wcmVzc2VkX3NpemUnICAg PT4kZmlsZVsnY29tcHJlc3NlZF9zaXplJ11bMV0sDQoJCQkJJ3VuY29tcHJlc3NlZF9zaXpl JyA9PiRmaWxlWyd1bmNvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCSdleHRyYV9maWVsZCcg ICAgICAgPT4kZmlsZVsnZXh0cmFfZmllbGQnXSwNCgkJCQknZ2VuZXJhbF9iaXRfZmxhZycg ID0+c3RyX3BhZChkZWNiaW4oJGZpbGVbJ2dlbmVyYWxfYml0X2ZsYWcnXVsxXSksIDgsICcw JywgU1RSX1BBRF9MRUZUKSwNCgkJCQknY29udGVudHMtc3RhcnRPZmZzZXQnPT4kZmlsZVsn Y29udGVudHMtc3RhcnRPZmZzZXQnXQ0KCQkJKTsNCgkJCXJldHVybiAkaTsNCgkJfQ0KCQly ZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCUZ1bmN0aW9uIF9wcm90ZWN0KCRmdWxsUGF0aCl7DQoJ CS8vIEtub3duIGhhY2stYXR0YWNrcyAoZmlsZW5hbWUgbGlrZSk6DQoJCS8vICAgL2hvbWUv dXNyDQoJCS8vICAgLi4vLi4vaG9tZS91c3INCgkJLy8gICBmb2xkZXIvLi4vLi4vLi4vaG9t ZS91c3INCgkJLy8gICBzYW1wbGUvKHgwKS4uL2hvbWUvdXNyDQoJCQ0KCQkkZnVsbFBhdGgg PSBzdHJ0cigkZnVsbFBhdGgsICI6Kjw+fFwiXHgwXFwiLCAiLi4uLi4uLi8iKTsNCgkJd2hp bGUoJGZ1bGxQYXRoWzBdID09ICIvIikNCgkJCSRmdWxsUGF0aCA9IHN1YnN0cigkZnVsbFBh dGgsIDEpOw0KCQkNCgkJaWYoc3Vic3RyKCRmdWxsUGF0aCwgLTEpID09ICIvIil7DQoJCQkk YmFzZSAgICAgPSAnJzsNCgkJCSRmdWxsUGF0aCA9IHN1YnN0cigkZnVsbFBhdGgsIDAsIC0x KTsNCgkJfQ0KCQllbHNlew0KCQkJJGJhc2UgICAgID0gYmFzZW5hbWUoJGZ1bGxQYXRoKTsN CgkJCSRmdWxsUGF0aCA9IGRpcm5hbWUoJGZ1bGxQYXRoKTsNCgkJfQ0KCQkNCgkJJHBhcnRz ICAgPSBleHBsb2RlKCIvIiwgJGZ1bGxQYXRoKTsNCgkJJGxhc3RJZHggPSBmYWxzZTsNCgkJ Zm9yZWFjaCgkcGFydHMgYXMgJGlkeD0+JHBhcnQpew0KCQkJaWYoJHBhcnQgPT0gIi4iKQ0K CQkJCXVuc2V0KCRwYXJ0c1skaWR4XSk7DQoJCQllbHNlaWYoJHBhcnQgPT0gIi4uIil7DQoJ CQkJdW5zZXQoJHBhcnRzWyRpZHhdKTsNCgkJCQlpZigkbGFzdElkeCAhPT0gZmFsc2Upew0K CQkJCQl1bnNldCgkcGFydHNbJGxhc3RJZHhdKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYo JHBhcnQgPT09ICcnKXsNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0pOw0KCQkJfQ0KCQkJZWxz ZXsNCgkJCQkkbGFzdElkeCA9ICRpZHg7DQoJCQl9DQoJCX0NCg0KCQkkZnVsbFBhdGggPSBz aXplb2YoJHBhcnRzKT9pbXBsb2RlKCIvIiwgJHBhcnRzKS4iLyI6IiI7DQoJCXJldHVybiAk ZnVsbFBhdGguJGJhc2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfZFppcHsNCgl2YXIgJGZpbGVu YW1lOw0KCXZhciAkb3ZlcndyaXRlOw0KCQ0KCXZhciAkemlwU2lnbmF0dXJlID0gIlx4NTBc eDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRp clNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBkaXIgaGVhZGVy IHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYiOyAv LyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoJdmFyICRmaWxlc19jb3VudCAgPSAw Ow0KCXZhciAkZmg7DQoJDQoJRnVuY3Rpb24gc21kX2RaaXAoJGZpbGVuYW1lLCAkb3Zlcndy aXRlPXRydWUpew0KCQkkdGhpcy0+ZmlsZW5hbWUgID0gJGZpbGVuYW1lOw0KCQkkdGhpcy0+ b3ZlcndyaXRlID0gJG92ZXJ3cml0ZTsNCgl9DQoJRnVuY3Rpb24gYWRkRGlyKCRkaXJuYW1l LCAkZmlsZUNvbW1lbnRzPScnKXsNCgkJaWYoc3Vic3RyKCRkaXJuYW1lLCAtMSkgIT0gJy8n KQ0KCQkJJGRpcm5hbWUgLj0gJy8nOw0KCQkkdGhpcy0+YWRkRmlsZShmYWxzZSwgJGRpcm5h bWUsICRmaWxlQ29tbWVudHMpOw0KCX0NCglGdW5jdGlvbiBhZGRGaWxlKCRmaWxlbmFtZSwg JGNmaWxlbmFtZSwgJGZpbGVDb21tZW50cz0nJywgJGRhdGE9ZmFsc2Upew0KCQlpZighKCRm aCA9ICYkdGhpcy0+ZmgpKQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAkdGhp cy0+b3ZlcndyaXRlPyd3Yic6J2ErYicpOw0KCQkNCgkJLy8gJGZpbGVuYW1lIGNhbiBiZSBh IGxvY2FsIGZpbGUgT1IgdGhlIGRhdGEgd2ljaCB3aWxsIGJlIGNvbXByZXNzZWQNCgkJaWYo c3Vic3RyKCRjZmlsZW5hbWUsIC0xKT09Jy8nKXsNCgkJCSRkZXRhaWxzWyd1bmNzaXplJ10g PSAwOw0KCQkJJGRhdGEgPSAnJzsNCgkJfQ0KCQllbHNlaWYoZmlsZV9leGlzdHMoJGZpbGVu YW1lKSl7DQoJCQkkZGV0YWlsc1sndW5jc2l6ZSddID0gZmlsZXNpemUoJGZpbGVuYW1lKTsN CgkJCSRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsNCgkJfQ0KCQllbHNl aWYoJGZpbGVuYW1lKXsNCgkJCWVjaG8gIjxiPkNhbm5vdCBhZGQgJGZpbGVuYW1lLiBGaWxl IG5vdCBmb3VuZDwvYj48YnI+IjsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQllbHNlew0K CQkJJGRldGFpbHNbJ3VuY3NpemUnXSA9IHN0cmxlbigkZmlsZW5hbWUpOw0KCQkJLy8gREFU QSBpcyBnaXZlbi4uIHVzZSBpdCEgOnwNCgkJfQ0KDQoJCS8vIGlmIGRhdGEgdG8gY29tcHJl c3MgaXMgdG9vIHNtYWxsLCBqdXN0IHN0b3JlIGl0DQoJCWlmKCRkZXRhaWxzWyd1bmNzaXpl J10gPCAyNTYpew0KCQkJJGRldGFpbHNbJ2NvbXNpemUnXSA9ICRkZXRhaWxzWyd1bmNzaXpl J107DQoJCQkkZGV0YWlsc1sndm5lZWRlZCddID0gMTA7DQoJCQkkZGV0YWlsc1snY21ldGhv ZCddID0gMDsNCgkJCSR6ZGF0YSA9ICYkZGF0YTsNCgkJfQ0KCQllbHNleyAvLyBvdGhlcndp c2UsIGNvbXByZXNzIGl0DQoJCQkkemRhdGEgPSBnemNvbXByZXNzKCRkYXRhKTsNCgkJCSR6 ZGF0YSA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAy KTsgLy8gZml4IGNyYyBidWcgKHRoYW5rcyB0byBFcmljIE11ZWxsZXIpDQoJCQkkZGV0YWls c1snY29tc2l6ZSddID0gc3RybGVuKCR6ZGF0YSk7DQoJCQkkZGV0YWlsc1sndm5lZWRlZCdd ID0gMTA7DQoJCQkkZGV0YWlsc1snY21ldGhvZCddID0gODsNCgkJfQ0KCQkNCgkJJGRldGFp bHNbJ2JpdGZsYWcnXSA9IDA7DQoJCSRkZXRhaWxzWydjcmNfMzInXSAgPSBjcmMzMigkZGF0 YSk7DQoJCQ0KCQkvLyBDb252ZXJ0IGRhdGUgYW5kIHRpbWUgdG8gRE9TIEZvcm1hdCwgYW5k IHNldCB0aGVuDQoJCSRsYXN0bW9kX3RpbWVTICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ3Mn KT49MzI/ZGF0ZSgncycpLTMyOmRhdGUoJ3MnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsN CgkJJGxhc3Rtb2RfdGltZU0gID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnaScpKSwgNiwgJzAn LCBTVFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF90aW1lSCAgPSBzdHJfcGFkKGRlY2Jpbihk YXRlKCdIJykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX2RhdGVEICA9 IHN0cl9wYWQoZGVjYmluKGRhdGUoJ2QnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJ JGxhc3Rtb2RfZGF0ZU0gID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnbScpKSwgNCwgJzAnLCBT VFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF9kYXRlWSAgPSBzdHJfcGFkKGRlY2JpbihkYXRl KCdZJyktMTk4MCksIDcsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJDQoJCSMgZWNobyAiTW9k VGltZTogJGxhc3Rtb2RfdGltZVMtJGxhc3Rtb2RfdGltZU0tJGxhc3Rtb2RfdGltZUggKCIu ZGF0ZSgicyBIIEgiKS4iKVxuIjsNCgkJIyBlY2hvICJNb2REYXRlOiAkbGFzdG1vZF9kYXRl RC0kbGFzdG1vZF9kYXRlTS0kbGFzdG1vZF9kYXRlWSAoIi5kYXRlKCJkIG0gWSIpLiIpXG4i Ow0KCQkkZGV0YWlsc1snbW9kdGltZSddID0gYmluZGVjKCIkbGFzdG1vZF90aW1lSCRsYXN0 bW9kX3RpbWVNJGxhc3Rtb2RfdGltZVMiKTsNCgkJJGRldGFpbHNbJ21vZGRhdGUnXSA9IGJp bmRlYygiJGxhc3Rtb2RfZGF0ZVkkbGFzdG1vZF9kYXRlTSRsYXN0bW9kX2RhdGVEIik7DQoJ CQ0KCQkkZGV0YWlsc1snb2Zmc2V0J10gPSBmdGVsbCgkZmgpOw0KCQlmd3JpdGUoJGZoLCAk dGhpcy0+emlwU2lnbmF0dXJlKTsNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxz Wyd2bmVlZGVkJ10pKTsgLy8gdmVyc2lvbl9uZWVkZWQNCgkJZndyaXRlKCRmaCwgcGFjaygn cycsICRkZXRhaWxzWydiaXRmbGFnJ10pKTsgLy8gZ2VuZXJhbF9iaXRfZmxhZw0KCQlmd3Jp dGUoJGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ2NtZXRob2QnXSkpOyAvLyBjb21wcmVzc2lv bl9tZXRob2QNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWydtb2R0aW1lJ10p KTsgLy8gbGFzdG1vZF90aW1lDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1sn bW9kZGF0ZSddKSk7IC8vIGxhc3Rtb2RfZGF0ZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdWJywg JGRldGFpbHNbJ2NyY18zMiddKSk7ICAvLyBjcmMtMzINCgkJZndyaXRlKCRmaCwgcGFjaygn SScsICRkZXRhaWxzWydjb21zaXplJ10pKTsgLy8gY29tcHJlc3NlZF9zaXplDQoJCWZ3cml0 ZSgkZmgsIHBhY2soJ0knLCAkZGV0YWlsc1sndW5jc2l6ZSddKSk7IC8vIHVuY29tcHJlc3Nl ZF9zaXplDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCBzdHJsZW4oJGNmaWxlbmFtZSkpKTsg ICAvLyBmaWxlX25hbWVfbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAwKSk7ICAv LyBleHRyYV9maWVsZF9sZW5ndGgNCgkJZndyaXRlKCRmaCwgJGNmaWxlbmFtZSk7ICAgIC8v IGZpbGVfbmFtZQ0KCQkvLyBpZ25vcmluZyBleHRyYV9maWVsZA0KCQlmd3JpdGUoJGZoLCAk emRhdGEpOw0KCQkNCgkJLy8gQXBwZW5kIGl0IHRvIGNlbnRyYWwgZGlyDQoJCSRkZXRhaWxz WydleHRlcm5hbF9hdHRyaWJ1dGVzJ10gID0gKHN1YnN0cigkY2ZpbGVuYW1lLCAtMSk9PScv JyYmISR6ZGF0YSk/MTY6MzI7IC8vIERpcmVjdG9yeSBvciBmaWxlIG5hbWUNCgkJJGRldGFp bHNbJ2NvbW1lbnRzJ10gICAgICAgICAgICAgPSAkZmlsZUNvbW1lbnRzOw0KCQkkdGhpcy0+ YXBwZW5kQ2VudHJhbERpcigkY2ZpbGVuYW1lLCAkZGV0YWlscyk7DQoJCSR0aGlzLT5maWxl c19jb3VudCsrOw0KCX0NCglGdW5jdGlvbiBzZXRFeHRyYSgkZmlsZW5hbWUsICRwcm9wZXJ0 eSwgJHZhbHVlKXsNCgkJJHRoaXMtPmNlbnRyYWxkaXJzWyRmaWxlbmFtZV1bJHByb3BlcnR5 XSA9ICR2YWx1ZTsNCgl9DQoJRnVuY3Rpb24gc2F2ZSgkemlwQ29tbWVudHM9Jycpew0KCQlp ZighKCRmaCA9ICYkdGhpcy0+ZmgpKQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1l LCAkdGhpcy0+b3ZlcndyaXRlPyd3JzonYSsnKTsNCgkJDQoJCSRjZHJlYyA9ICIiOw0KCQlm b3JlYWNoKCR0aGlzLT5jZW50cmFsZGlycyBhcyAkZmlsZW5hbWU9PiRjZCl7DQoJCQkkY2Ry ZWMgLj0gJHRoaXMtPmRpclNpZ25hdHVyZTsNCgkJCSRjZHJlYyAuPSAiXHgwXHgwIjsgICAg ICAgICAgICAgICAgICAvLyB2ZXJzaW9uIG1hZGUgYnkNCgkJCSRjZHJlYyAuPSBwYWNrKCd2 JywgJGNkWyd2bmVlZGVkJ10pOyAvLyB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0DQoJCQkk Y2RyZWMgLj0gIlx4MFx4MCI7ICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhbCBiaXQgZmxh Zw0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ2NtZXRob2QnXSk7IC8vIGNvbXByZXNz aW9uIG1ldGhvZA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ21vZHRpbWUnXSk7IC8v IGxhc3Rtb2QgdGltZQ0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ21vZGRhdGUnXSk7 IC8vIGxhc3Rtb2QgZGF0ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ2NyY18zMidd KTsgIC8vIGNyYzMyDQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsnY29tc2l6ZSddKTsg Ly8gY29tcHJlc3NlZCBmaWxlc2l6ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ3Vu Y3NpemUnXSk7IC8vIHVuY29tcHJlc3NlZCBmaWxlc2l6ZQ0KCQkJJGNkcmVjIC49IHBhY2so J3YnLCBzdHJsZW4oJGZpbGVuYW1lKSk7IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCSRj ZHJlYyAuPSBwYWNrKCd2JywgMCk7ICAgICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGxl bmd0aA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJGNkWydjb21tZW50cyddKSk7 IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCk7IC8v IGRpc2sgbnVtYmVyIHN0YXJ0DQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAvLyBpbnRl cm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWydleHRl cm5hbF9hdHRyaWJ1dGVzJ10pOyAvLyBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCSRj ZHJlYyAuPSBwYWNrKCdWJywgJGNkWydvZmZzZXQnXSk7IC8vIHJlbGF0aXZlIG9mZnNldCBv ZiBsb2NhbCBoZWFkZXINCgkJCSRjZHJlYyAuPSAkZmlsZW5hbWU7DQoJCQkkY2RyZWMgLj0g JGNkWydjb21tZW50cyddOw0KCQl9DQoJCSRiZWZvcmVfY2QgPSBmdGVsbCgkZmgpOw0KCQlm d3JpdGUoJGZoLCAkY2RyZWMpOw0KCQkNCgkJLy8gZW5kIG9mIGNlbnRyYWwgZGlyDQoJCWZ3 cml0ZSgkZmgsICR0aGlzLT5kaXJTaWduYXR1cmVFKTsNCgkJZndyaXRlKCRmaCwgcGFjaygn dicsIDApKTsgLy8gbnVtYmVyIG9mIHRoaXMgZGlzaw0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2 JywgMCkpOyAvLyBudW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIGNl bnRyYWwgZGlyZWN0b3J5DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCAkdGhpcy0+ZmlsZXNf Y291bnQpKTsgLy8gdG90YWwgIyBvZiBlbnRyaWVzICJvbiB0aGlzIGRpc2siIA0KCQlmd3Jp dGUoJGZoLCBwYWNrKCd2JywgJHRoaXMtPmZpbGVzX2NvdW50KSk7IC8vIHRvdGFsICMgb2Yg ZW50cmllcyBvdmVyYWxsIA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdWJywgc3RybGVuKCRjZHJl YykpKTsgICAgIC8vIHNpemUgb2YgY2VudHJhbCBkaXIgDQoJCWZ3cml0ZSgkZmgsIHBhY2so J1YnLCAkYmVmb3JlX2NkKSk7ICAgICAgICAgLy8gb2Zmc2V0IHRvIHN0YXJ0IG9mIGNlbnRy YWwgZGlyDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCBzdHJsZW4oJHppcENvbW1lbnRzKSkp OyAvLyAuemlwIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJZndyaXRlKCRmaCwgJHppcENvbW1l bnRzKTsNCgkJDQoJCWZjbG9zZSgkZmgpOw0KCX0NCgkNCgkvLyBQcml2YXRlDQoJRnVuY3Rp b24gYXBwZW5kQ2VudHJhbERpcigkZmlsZW5hbWUsJHByb3BlcnRpZXMpew0KCQkkdGhpcy0+ Y2VudHJhbGRpcnNbJGZpbGVuYW1lXSA9ICRwcm9wZXJ0aWVzOw0KCX0NCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQg c3RyaW5ncyAtIGxvY2FsaXNlIGFzIHJlcXVpcmVkDQpmdW5jdGlvbiBzbWRfYXRfZ1R4dCgk d2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2FjdGlvbnMn ID0+ICdBY3Rpb25zJywNCgkJJ2FsbG93ZWRfc2tpbnMnID0+ICdBbGxvd2VkIHRoZW1lczon LA0KCQknYXBwbHlfc2tpbicgPT4gJ0FwcGx5IHRoaXMgdGhlbWUnLA0KCQknYXZhaWxfdGl0 bGUnID0+ICdBdmFpbGFibGUgdGhlbWVzJywNCgkJJ2Jhc2VkX29uJyA9PiAnIChiYXNlZCBv biB7c2tpbn0pJywNCgkJJ2J5JyA9PiAnIGJ5ICcsDQoJCSdjX2J6aXAyJyA9PiAnQlppcCcs DQoJCSdjX2d6aXAnID0+ICdHWmlwJywNCgkJJ2NfdGFyJyA9PiAnVGFyJywNCgkJJ2Nfemlw JyA9PiAnWmlwJywNCgkJJ2Nhc2Vfc29ydCcgPT4gJ0Nhc2Utc2Vuc2l0aXZlIHRoZW1lIGxp c3Q6JywNCgkJJ2NsZWFyJyA9PiAnbm9uZScsDQoJCSdjbG9uZScgPT4gJ0Jhc2UnLA0KCQkn Y29uZmlybScgPT4gJ0dvJywNCgkJJ2NvcmVfdGhlbWUnID0+ICdDYW5ub3QgZGVsZXRlIHtz a2lufTogY29yZSB0aGVtZScsDQoJCSdjb3JlX3RoZW1lX2ZpbGUnID0+ICdDYW5ub3QgZGVs ZXRlIGZpbGVzIGZyb20ge3NraW59OiBjb3JlIHRoZW1lJywNCgkJJ2NydXNoX3R5cGUnID0+ ICdFeHBvcnQgY29tcHJlc3Npb24gdHlwZTonLA0KCQknY3J1c2hfZm9ybWF0JyA9PiAnRm9y bWF0OicsDQoJCSdzc2MnID0+ICdTdHlsZXBsYXRlcycsDQoJCSdjc3MnID0+ICdTdHlsZXMn LA0KCQknZGVsZXRlX2NvbmZpcm0nID0+ICdSZWFsbHkgZGVsZXRlIHRoZW1lIHtza2lufT8n LA0KCQknZGVsZXRlX2ZhaWxlZCcgPT4gJ0RlbGV0ZSBmYWlsZWQuIFRyeSByZW1vdmluZyBp dCBtYW51YWxseScsDQoJCSdlZGl0X2xibCcgPT4gJ1RoZW1lIGVkaXRvcicsDQoJCSdlbXB0 eV9pbmZvJyA9PiAnWW91IHNob3VsZCBjaG9vc2UgYSBmaWxlIGZpcnN0IDotKScsDQoJCSdl eHBvcnQnID0+ICdFeHBvcnQnLA0KCQknZmlsZW5hbWVfZm9ybWF0JyA9PiAnRmlsZW5hbWUg Zm9ybWF0OiAnLA0KCQknZmlsZV9ub3RfZGVsZXRlZCcgPT4gJ0ZpbGUge25hbWV9ICcuc3Ry b25nKCJub3QiKS4nIGRlbGV0ZWQnLA0KCQknZmlsZV9zYXZlZCcgPT4gJ0ZpbGUge25hbWV9 IHNhdmVkJywNCgkJJ2ZpbmRfdGhlbWUnID0+ICdCcm93c2UgdGhlbWVzJywNCgkJJ2dsb2Jh bF9za2luJyA9PiAnRGVmYXVsdCB0aGVtZTonLA0KCQknaGVscF9saW5rJyA9PiAnKDxhIGhy ZWY9IntsaW5rfSI+SGVscDwvYT4pJywNCgkJJ2ltZycgPT4gJ0ltYWdlcycsDQoJCSdpbXBv cnRfZmFpbGVkJyA9PiAnSW5zdGFsbGF0aW9uIGZhaWxlZCA6LSggQ2hlY2sgdGhlIGFyY2hp dmUgc3RydWN0dXJlJywNCgkJJ2ltcG9ydF9zdWNjZXNzJyA9PiAnSW5zdGFsbGF0aW9uIHN1 Y2Nlc3NmdWwuIEZpbGVzIGV4dHJhY3RlZDoge251bX0nLA0KCQknaW1wb3J0X29rJyA9PiAn SW5zdGFsbGF0aW9uIHN1Y2Nlc3NmdWwuJywNCgkJJ2luc3RhbGxfc2tpbicgPT4gJ0luc3Rh bGwgdGhlbWUnLA0KCQknaW52YWxpZF9maWxlJyA9PiAnUm9ndWUgZmlsZSBkZXRlY3RlZDog e25hbWV9JywNCgkJJ2lzX2dsb2JhbCcgPT4gJyBbREVGQVVMVF0nLA0KCQknanMnID0+ICdT Y3JpcHRzJywNCgkJJ2xheW91dCcgPT4gJ0xheW91dCBtZXRob2Q6JywNCgkJJ2xheW91dF9s aXN0JyA9PiAnTGlzdCcsDQoJCSdsYXlvdXRfZ3JpZCcgPT4gJ0dyaWQnLA0KCQknbGlzdF90 aXRsZScgPT4gJ0luc3RhbGxlZCB0aGVtZXMnLA0KCQknbWFuYWdlX2xibCcgPT4gJ1RoZW1l IG1hbmFnZXInLA0KCQknbWtkaXJfZmFpbGVkJyA9PiAnQ2Fubm90IGNyZWF0ZSBkaXJlY3Rv cnkgZm9yIGZpbGUge25hbWV9LiBUcnkgbWFudWFsbHkgY3JlYXRpbmcgaXQuJywNCgkJJ25h bWVfZW1wdHknID0+ICdZb3Ugc2hvdWxkIGdpdmUgeW91ciB0aGVtZSBhIG5hbWUgOi0pJywN CgkJJ25ldycgPT4gJ0NyZWF0ZSBuZXcgdGhlbWUnLA0KCQknbmV3X2ZpbGUnID0+ICdOZXcg ZmlsZScsDQoJCSduZXdfY2xvbmVza2luJyA9PiAnTmFtZSBvZiBjb3B5OicsDQoJCSduZXdf c2tpbicgPT4gJ1RoZW1lIG5hbWU6JywNCgkJJ290aGVyX2ZpbGVzJyA9PiAnT3RoZXJzJywN CgkJJ3BocCcgPT4gJ0NvZGUnLA0KCQkncGVyX2dyb3VwJyA9PiAnT25lIHRoZW1lIHBlciBw cml2aWxlZ2UgbGV2ZWwnLA0KCQkncGVyX3NpdGUnID0+ICdPbmUgdGhlbWUgZm9yIGV2ZXJ5 b25lJywNCgkJJ3Blcl91c2VyJyA9PiAnT25lIHRoZW1lIHBlciB1c2VyJywNCgkJJ3ByZWZz X2RlbGV0ZWQnID0+ICdQcmVmZXJlbmNlcyBkZWxldGVkJywNCgkJJ3ByZWZzX2luc3RhbGxl ZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCcsDQoJCSdwcmVmc19ub3RfaW5zdGFsbGVk JyA9PiAnUHJlZmVyZW5jZXMgbm90IGluc3RhbGxlZC4nLA0KCQkncHJlZnNfc29tZScgPT4g J05vdCBhbGwgcHJlZmVyZW5jZXMgYXZhaWxhYmxlLicsDQoJCSdwcmVmc19zb21lX2V4cGxh aW4nID0+ICdJdCBpcyBlaXRoZXIgYmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNp b24gb2YgdGhlJy5ici4ncGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJl ZmVyZW5jZXMnLmJyLidoYXZlIGJlY29tZSBjb3JydXB0IHNvbWVob3cuJywNCgkJJ3ByZWZz X3NvbWVfb3B0aW9ucycgPT4gJ0Nob29zZSAnLmdUeHQoJ2RlbGV0ZScpLicgdG8gcmVtb3Zl IHRoZW0gYWxsIG9yICcuZ1R4dCgnaW5zdGFsbCcpLicgdG8gYWRkJy5ici4nYW55IG5ldyBv bmVzLCBsZWF2aW5nIGFsbCBleGlzdGluZyBwcmVmZXJlbmNlcyB1bnRvdWNoZWQuJywNCgkJ J3ByZWZzX3RpdGxlJyA9PiAnQWRtaW4gdGhlbWUgcHJlZmVyZW5jZXMnLA0KCQkncmVuYW1l X2ZhaWxlZCcgPT4gJ1JlbmFtZSBmYWlsZWQnLA0KCQkncmVuYW1lZCcgPT4gJ1JlbmFtZWQg dG8ge25hbWV9JywNCgkJJ3NldCcgPT4gJ1NldCcsDQoJCSdzZXR1cCcgPT4gJ1ByZWZlcmVu Y2VzJywNCgkJJ3NraW5fZ2JsJyA9PiAnVGhlbWUnLA0KCQknc2tpbl9jbG9uZWQnID0+ICdU aGVtZSBleHRlbmRlZCBhcyB7bmFtZX0nLA0KCQknc2tpbl9jcmVhdGVkJyA9PiAnVGhlbWUg e25hbWV9IGNyZWF0ZWQnLA0KCQknc2tpbl9kZWxldGVkJyA9PiAnVGhlbWUge25hbWV9IGRl bGV0ZWQnLA0KCQknc2tpbl9leGlzdHMnID0+ICdUaGVtZSB7bmFtZX0gYWxyZWFkeSBleGlz dHMnLA0KCQknc2tpbl9maWxlcycgPT4gJ1RoZW1lIGZpbGVzJywNCgkJJ3NraW5fZ3JvdXBz JyA9PiAnR3JvdXAgdGhlbWVzOicsDQoJCSdza2luX2ltYWdlcycgPT4gJ1RoZW1lIGltYWdl cycsDQoJCSdza2luX2xpc3QnID0+ICdUaGVtZSBsaXN0JywNCgkJJ3NraW5fZ3JpZCcgPT4g J1RoZW1lIGdyaWQnLA0KCQknc2tpbl9ub3RfY3JlYXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBj b3VsZCBub3QgYmUgY3JlYXRlZC4gVHJ5IG1hbnVhbGx5IG1ha2luZyB0aGUgZGlyZWN0b3J5 JywNCgkJJ3NraW5fbm90X2ZvdW5kJyA9PiAnVGhlIHRoZW1lIHtuYW1lfSBjb3VsZCBub3Qg YmUgZm91bmQnLA0KCQknc2tpbl9zd2l0Y2hlZCcgPT4gJ1RoZW1lIHN3aXRjaGVkIHRvIHtz a2lufScsDQoJCSdza2luX3N5c3RlbScgPT4gJ1RoZW1lIHN5c3RlbTonLA0KCQknc2tpbm5l cicgPT4gJ1RoZW1lJywNCgkJJ3N1cHBvcnRlZF9pbXBvcnQnID0+ICdTdXBwb3J0ZWQgaW1w b3J0IHR5cGVzOiB7dHlwZXN9JywNCgkJJ3RhYl9uYW1lJyA9PiAnQWRtaW4gdGhlbWVzJywN CgkJJ3RodW1ic2l6ZScgPT4gJ1RodW1iIGRpbWVuc2lvbnM6JywNCgkJJ3RpbWVzJyA9PiAn IHggJywNCgkJJ3R4cF9wYXRoJyA9PiAnVGV4dHBhdHRlcm4gcGF0aDogJywNCgkJJ3Vuc3Vw cG9ydGVkX2NvbXByZXNzaW9udHlwZScgPT4gJ3tjcnVzaH0gaXMgbm90IGEgc3VwcG9ydGVk IGNvbXByZXNzaW9uIGZvcm1hdCBpbiB0aGlzIGluc3RhbGxhdGlvbicsDQoJCSd1bnN1cHBv cnRlZF9maWxldHlwZScgPT4gJ0ZpbGUgaXMgbm90IG9mIGEgc3VwcG9ydGVkIHR5cGUnLA0K CQkndW5zdXBwb3J0ZWRfZnVkZ2UnID0+ICc6IGhpdCBTYXZlIGFnYWluIHRvIHN0b3JlIGFu eXdheScsDQoJCSd1cGRhdGUnID0+ICdVcGRhdGUnLA0KCQkndXBsb2FkX2ZhaWxlZCcgPT4g J0ltYWdlIGNvdWxkIG5vdCBiZSB1cGxvYWRlZCcsDQoJCSd1cGxvYWRfaW1hZ2UnID0+ICdV cGxvYWQgaW1hZ2UnLA0KCQkndXBsb2FkX3N1Y2Nlc3MnID0+ICdJbWFnZSB1cGxvYWRlZCBz dWNjZXNzZnVsbHknLA0KCQkndmVyc2lvbicgPT4gJ3YnLA0KCSk7DQoJcmV0dXJuIHN0cnRy KCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6NToib3Jk ZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6MjU2NzI6Ijxk aXYgaWQ9InNtZF9oZWxwIj4KCgk8aDEgaWQ9InRvcCI+c21kX2FkbWluX3RoZW1lczwvaDE+ CgoJPHA+SW5zdGFsbCwgbWFuYWdlLCBlZGl0IGFuZCBzd2l0Y2ggYWRtaW4tc2lkZSB0aGVt ZXMgdGhlbiBzaGFyZSB0aGVtIHdpdGggdGhlIGNvbW11bml0eS48L3A+CgoJPGgyIGlkPSJm ZWF0dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+Q3JlYXRlIGFuZCBFZGl0IGFk bWluLXNpZGUgdGhlbWVzPC9saT4KCQk8bGk+RW1wbG95IGltYWdlcywgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4sIEpTLCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4v UEhQIChmb3IgY2hhbmdpbmcgbWFzdGhlYWQsIGhlYWRlciAmYW1wOyBmb290ZXIpIGluIHlv dXIgdGhlbWU8L2xpPgoJCTxsaT5Vc2UgY29uc3RhbnRzIGluIHlvdXIgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gZmlsZXM8L2xpPgoJCTxsaT5CYXNlIHlvdXIgdGhlbWUgb24g YW4gZXhpc3RpbmcgdGhlbWUgdG8gdHdlYWsgaXQgdG8geW91ciB0YXN0ZTwvbGk+CgkJPGxp PkV4cG9ydCBhIHRoZW1lIHBhY2thZ2UgZm9yIGRpc3RyaWJ1dGlvbiB0byB0aGUgY29tbXVu aXR5IGluIGVpdGhlciAudGFyLCAudGd6LCAuYnoyIG9yIC56aXAgZm9ybWF0PC9saT4KCQk8 bGk+SW1wb3J0IC8gaW5zdGFsbCBvdGhlciB0aGVtZXMgZnJvbSB0aGUgPGEgaHJlZj0iaHR0 cDovL3RleHRnYXJkZW4ub3JnL2FkbWluaXN0cmF0aW9uLXRoZW1lcyI+Y29tbXVuaXR5IHJl cG9zaXRvcnk8L2E+PC9saT4KCQk8bGk+QWRtaW5pc3RyYXRvciBjYW4gc2V0IGEgZGVmYXVs dCB0aGVtZSBmb3IgYWxsIHVzZXJzLCBvciBlbmFibGUgcGVyLXVzZXIgLyBwZXItcm9sZSB0 aGVtZXM8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+ LjwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9u PC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0 dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMDk2L3NtZF9hZG1pbl90aGVtZXMiPnRl eHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5j b20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGlu c3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBBIG5ldyB0YWIgbGFiZWxsZWQgPGVtPkV4 dGVuc2lvbnMgLSZndDsgQWRtaW4gdGhlbWVzPC9lbT4gaXMgY3JlYXRlZC4gPHN0cm9uZz5P bmx5IHB1Ymxpc2hlcnMgd2lsbCBzZWUgdGhpcyB0YWI8L3N0cm9uZz4uPC9wPgoKCTxwPlRo ZSBwbHVnaW4gc2hvdWxkIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCB0aGUgcHJlZmVyZW5jZXMg Zm9yIHlvdS4gQ2xpY2sgJiM4MjE2O1ByZWZlcmVuY2VzJiM4MjE3OyBmcm9tIHRoZSA8ZW0+ RXh0ZW5zaW9ucyAtJmd0OyBBZG1pbiB0aGVtZXM8L2VtPiB0YWIgb3IgPGVtPk9wdGlvbnM8 L2VtPiBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHRhYiB0byBhbHRlciwgZGVsZXRl IG9yIHJlaW5zdGFsbCB0aGVtLjwvcD4KCgk8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDov L2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMwOTUyIj5mb3J1bSB0 aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9y IG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIHNpbXBs eSBkZWxldGUgdGhlIHBsdWdpbiBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2Uu IFRoZSBwcmVmZXJlbmNlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcmVtb3ZlZC4gUGxlYXNl IGJlIGF3YXJlIHRoYXQgcmVtb3ZpbmcgdGhlIHBsdWdpbiBkb2VzIDxzdHJvbmc+bm90IHJl bW92ZSBhbnkgdGhlbWVzIHlvdSBoYXZlIGluc3RhbGxlZCwgbm9yIGRvZXMgaXQgcmVtb3Zl IHBlci11c2VyIHRoZW1lIHByZWZlcmVuY2VzPC9zdHJvbmc+LiBQZXItdXNlciBwcmVmcyB3 aWxsIHNpbXBseSBiZSBpZ25vcmVkIHdoZW4gdGhlIHBsdWdpbiBpcyBkZWxldGVkLjwvcD4K Cgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+T24gdGhlIDxlbT5FeHRlbnNpb25z IC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+IHRhYiBpcyBhIGxpc3Qgb3IgZ3JpZCBjb250YWlu aW5nIGluc3RhbGxlZCB0aGVtZXMuIE91dCBvZiB0aGUgYm94LCB0aGVyZSB3aWxsIGJlIHR3 byBhdmFpbGFibGU6IDxlbT5jbGFzc2ljPC9lbT4gYW5kIDxlbT5yZW1vcmE8L2VtPi4gPHN0 cm9uZz5JdCYjODIxNztzIGFkdmlzYWJsZSBub3QgdG8gY2hhbmdlIHRoZXNlIHRoZW1lczwv c3Ryb25nPiBzbyB5b3UgY2FuIGFsd2F5cyBnbyBiYWNrIHRvIHRoZW0gaWYgZXZlcnl0aGlu ZyBnb2VzIHNpZGV3YXlzLiBQbHVzIGl0JiM4MjE3O3MgYSB2ZXJ5IHVzZWZ1bCBzdGFydGlu ZyBwb2ludCBmcm9tIHdoaWNoIHRvIDxhIGhyZWY9IiNjbG9uZSI+YmFzZTwvYT4gYSA8YSBo cmVmPSIjbmV3Ij5uZXcgdGhlbWU8L2E+LjwvcD4KCgk8cD5JbiB0aGUgbGlzdCBsYXlvdXQs IHRoZSBjb2x1bW5zIGFyZTo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ VGhlbWU8L3NwYW4+IDogVGhlIG5hbWUgb2YgdGhlIHRoZW1lIGFuZCAob3B0aW9uYWwpIHRo dW1ibmFpbCBhc3NpZ25lZCB0byBpdC4gQ2xpY2sgdG8gPGEgaHJlZj0iI3N3aXRjaCI+YWN0 aXZhdGU8L2E+IHRoZSB0aGVtZS4gSWYgdGhlIHRoZW1lIGlzIGJhc2VkIG9uIGFub3RoZXIg dXNlciYjODIxNztzIHRoZW1lLCB0aGlzIGRlcGVuZGVuY3kgd2lsbCBiZSBzaG93biBpbiBw YXJlbnRoZXNlcyBhZnRlciB0aGUgdGhlbWUgbmFtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5BdXRob3I8L3NwYW4+IDogWW91ISBMaW5rZWQgdG8geW91ciB3ZWIgc2l0ZSBp ZiB5b3Ugc3VwcGx5IGl0IGluIHlvdXIgPGEgaHJlZj0iI2Fib3V0Ij5NYW5pZmVzdDwvYT48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VmVyc2lvbjwvc3Bhbj4gOiBUaGVtZSB2 ZXJzaW9uIG51bWJlciBpbiA8Y29kZT5tYWpvci5taW5vci5zdWJyZXY8L2NvZGU+IG5vdGF0 aW9uLiBJZiBhIG5ld2VyIHZlcnNpb24gb2YgYSB0aGVtZSBpcyBhdmFpbGFibGUgZnJvbSBU ZXh0Z2FyZGVuLCB0aGUgdmVyc2lvbiBudW1iZXIgd2lsbCBiZSBoeXBlcmxpbmtlZCB0byB0 aGUgdGhlbWUgb24gVGV4dGdhcmRlbiBzbyB5b3UgbWF5IGRvd25sb2FkL2luc3RhbGwgaXQu IFRoZSB2ZXJzaW9ucyBhcmUgY2hlY2tlZCwgYXQgbW9zdCwgb25jZSBldmVyeSAyNCBob3Vy cyB0byBhdm9pZCBoYW1tZXJpbmcgdGhlIHNlcnZlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5EZXNjcmlwdGlvbjwvc3Bhbj4gOiBCcmllZiBvbmUtIG9yIHR3by1saW5lciBl eHBsYWluaW5nIHlvdXIgdGhlbWUuIElmIHlvdSBoYXZlIG9mZmVyZWQgYSBoZWxwIDxzcGFu IGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGluIHlvdXIgbWFuaWZlc3QsIGl0IHdpbGwgYmUg bGlua2VkIGhlcmUgYXMgd2VsbDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BY3Rp b25zPC9zcGFuPiA6IEFjdGlvbnMgdG8gcGVyZm9ybSBvbiBlYWNoIHRoZW1lCgk8dWw+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bTmV3IHRoZW1lXTwvc3Bhbj4gOiA8YSBocmVmPSIj bmV3Ij5DcmVhdGU8L2E+IGEgbmV3IGJsYW5rLCBlbXB0eSBkaXJlY3RvcnkgcmVhZHkgZm9y IHlvdXIgdGhlbWUuIE5vIHNwYWNlcyAvIG9kZCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkIGlu IHRoZSBuYW1lIGFuZCBpdCBtdXN0IG5vdCBzdGFydCB3aXRoIGEgbnVtYmVyPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltFZGl0XTwvc3Bhbj4gOiA8YSBocmVmPSIjZWRpdF90 aGVtZSI+RWRpdDwvYT4gdGhlIHZhcmlvdXMgZGV0YWlscywgZmlsZXMgYW5kIGNvbnRlbnQg d2l0aGluIHRoZSB0aGVtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bQmFzZV08 L3NwYW4+IDogPGEgaHJlZj0iI2Nsb25lIj5FeHRlbmQ8L2E+IG9uZSBvZiB0aGUgZXhpc3Rp bmcgdGhlbWVzIHRvIG1ha2UgeW91ciBvd24gY2hhbmdlcyB1bmRlciBhIG5ldyBuYW1lPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltFeHBvcnRdPC9zcGFuPiA6IDxhIGhyZWY9 IiNleHBvcnQiPlNhdmU8L2E+IHRoZSB0aGVtZSBwYWNrYWdlIHRvIHlvdXIgaGFyZCBkcml2 ZSBmb3IgZGlzdHJpYnV0aW9uL2JhY2t1cCBpbiB5b3VyIGNob3NlbiBjb21wcmVzc2lvbiBm b3JtYXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W0RlbGV0ZV08L3NwYW4+IDog Q29tcGxldGVseSA8YSBocmVmPSIjZGVsZXRlIj5yZW1vdmU8L2E+IHRoZSB0aGVtZS4gTm90 IGF2YWlsYWJsZSB0byB0aGUgY29yZSB0aGVtZXMsIGZvciBvYnZpb3VzIHJlYXNvbnMhIEFs c28gbm90IGF2YWlsYWJsZSBpZiBhIHRoZW1lIGhhcyBiZWVuIHVzZWQgYXMgYSBiYXNpcyBm b3IgYW5vdGhlciB0aGVtZSBpbiB0aGUgY3VycmVudCBzaXRlPC9saT4KCTwvdWw+PC9saT4K CTwvdWw+CgoJPHA+VGhlIHJvdyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRoZW1lIGlz IHNoYWRlZCBhbmQgdGhlIGN1cnJlbnQgZGVmYXVsdCB0aGVtZSB0aGF0IGlzIGluIGVmZmVj dCBpcyBoaWdobGlnaHRlZC4gVGhlIGdyaWQgdmlldyBoYXMgcGFydHMgb2YgdGhlIGFib3Zl IGluZm9ybWF0aW9uLCBsYWlkIG91dCBzbGlnaHRseSBkaWZmZXJlbnRseS48L3A+CgoJPGgy IGlkPSJzd2l0Y2giPlN3aXRjaGluZyB0aGVtZXM8L2gyPgoKCTxwPkFzIHRoZSBhZG1pbmlz dHJhdG9yLCB5b3UgY2FuIHBsYXkgR29kIG92ZXIgZXZlcnlvbmUgZWxzZSYjODIxNztzIHRo ZW1lcy4gWW91IGFyZSBmcmVlIHRvIGluc3RhbGwgYXMgbWFueSBhcyB5b3Ugd2lzaCBhbmQg c3dpdGNoIGJldHdlZW4gdGhlbSB3aXRob3V0IGFmZmVjdGluZyBhbnkgb3RoZXIgbG9naW5z LiBOb2JvZHkgZWxzZSB3aWxsIGV2ZW4ga25vdyB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIHBs dWdpbi48L3A+CgoJPHA+SWYsIGhvd2V2ZXIsIHlvdSB2aXNpdCB0aGUgPGEgaHJlZj0iI3Nl dHVwIj5QcmVmZXJlbmNlczwvYT4gcGFnZSB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgdGhlbWVz IHRoYXQgb3RoZXJzIHVzZS4gVGhlcmUgYXJlIHRocmVlIG1lY2hhbmlzbXMgdG8gY2hvb3Nl IGZyb206PC9wPgoKCTx1bD4KCQk8bGk+Rm9yY2Ugb25lIHRoZW1lIGZvciBhbGwgdXNlcnMg KGV4Y2VwdCB5b3Vyc2VsZik8L2xpPgoJCTxsaT5Gb3JjZSBvbmUgdGhlbWUgZm9yIGVhY2gg dXNlciBwcml2aWxlZ2UgbGV2ZWwgKGV4Y2VwdCB5b3Vyc2VsZik8L2xpPgoJCTxsaT5BbGxv dyBhbGwgdXNlcnMgKGV4Y2VwdCB5b3Vyc2VsZikgdG8gcGljayB0aGVpciBmYXZvdXJpdGUg dGhlbWUgZnJvbSBhIHNob3J0bGlzdCB5b3UgZGVmaW5lPC9saT4KCTwvdWw+CgoJPHA+QXQg YWxsIHRpbWVzLCB5b3UgY2FuIGNob29zZSBhbnkgdGhlbWUgeW91IHBsZWFzZSBmb3IgeW91 ciBvd24gdXNlLiBUaGlzIGFsbG93cyB0cmlhbGxpbmcsIHR3ZWFraW5nIGFuZCB0ZXN0aW5n IG9mIHRoZW1lcyBiZWZvcmUgdW5sZWFzaGluZyB0aGVtIG9uIHlvdXIgdXNlciBiYXNlLjwv cD4KCgk8aDIgaWQ9InNldHVwIj5UaGVtZSBwcmVmZXJlbmNlczwvaDI+CgoJPHVsPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+Q2FzZS1zZW5zaXRpdmUgdGhlbWUgbGlzdDwvc3Bhbj4g OiBXaGVuIHNldCB0byA8Y29kZT5ZZXM8L2NvZGU+LCB1cHBlci1jYXNlIHRoZW1lIG5hbWVz IHRha2UgcHJlY2VkZW5jZSBvdmVyIGxvd2VyIGNhc2UgdGhlbWUgbmFtZXMgYW5kIHdpbGwg YmUgbGlzdGVkIGZpcnN0LiBGb3IgZXhhbXBsZSwgMyB0aGVtZSBjYWxsZWQgJiM4MjE2O0Fu Z2VsaWMmIzgyMTc7LCAmIzgyMTY7YmFyYmFyaWMmIzgyMTc7IGFuZCAmIzgyMTY7Q29oZXNp dmUmIzgyMTc7IHdpbGwgYmUgb3JkZXJlZDogPGNvZGU+QW5nZWxpYywgQ29oZXNpdmUsIGJh cmJhcmljPC9jb2RlPi4gU2V0IHRvIDxjb2RlPk5vPC9jb2RlPiB0byBtaXggdXBwZXIgYW5k IGxvd2VyLWNhc2UgdGhlbWVzIHRvZ2V0aGVyIChvcmRlciBpcyB0aGVuIDxjb2RlPkFuZ2Vs aWMsIGJhcmJhcmljLCBDb2hlc2l2ZTwvY29kZT4gKS4gVGhlICYjODIxNjtjbGFzc2ljJiM4 MjE3OyB0aGVtZSBpcyA8ZW0+YWx3YXlzPC9lbT4gbGlzdGVkIGZpcnN0LjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5FeHBvcnQgY29tcHJlc3Npb24gdHlwZTwvc3Bhbj4gOiBE ZXBlbmRpbmcgb24geW91ciB2ZXJzaW9uIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3Nw YW4+IGFuZCB3aGljaCBtb2R1bGVzIGhhdmUgYmVlbiBjb21waWxlZCBpbnRvIGl0LCB5b3Ug d2lsbCBzZWUgYSBsaXN0IG9mIGNvbXByZXNzaW9uIGZvcm1hdHMgaGVyZS4gQ2hvb3NlIG9u ZSB0aGF0IHN1aXRzIHlvdSBhcyB0aGUgZGVmYXVsdCBpbiB3aGljaCB0byBleHBvcnQgeW91 ciB0aGVtZSBwYWNrYWdlcy4gWW91IG1heSBjaG9vc2UgZnJvbSA8ZW0+VGFyPC9lbT4sIDxl bT5HWmlwPC9lbT4gKGFjdHVhbGx5IHRhcitnemlwKSwgPGVtPkJ6aXAyPC9lbT4gKHRhciti emlwKSwgb3IgPGVtPlppcDwvZW0+ICh0aGUgZGVmYXVsdCkuPC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPkxheW91dCBtZXRob2Q8L3NwYW4+IDogQ2hvb3NlIGZyb20gYSBMaXN0 IFZpZXcgKHVzZWZ1bCBpZiB5b3UgcHJlZmVyIHRvIGhpZGUgb3IgdXNlIHNtYWxsIHRodW1i cykgb3IgYSBHcmlkIFZpZXcgb2YgaW5zdGFsbGVkIHRoZW1lcy4gVGhpcyBzZXR0aW5nIGFw cGxpZXMgdG8gYm90aCBhZG1pbiBhbmQgdXNlciB0aGVtZSBzZWxlY3Rpb24gdGFicy4gRGVm YXVsdDogR3JpZCBWaWV3PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRodW1iIGRp bWVuc2lvbnM8L3NwYW4+IDogU2V0IHRoZSB0aHVtYm5haWwgZGltZW5zaW9ucyBpbiB0aGUg dGhlbWUgbGlzdC4gU2V0IGVpdGhlciBkaW1lbnNpb24gdG8gMCB0byB0dXJuIG9mZiB0aHVt Ym5haWwgZGlzcGxheS4gRGVmYXVsdDogMjYwICYjMjE1OyAxNTBweDwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5GaWxlbmFtZSBmb3JtYXQ8L3NwYW4+IDogRGVmaW5lIHRoZSBm b3JtYXQgb2YgdGhlIGV4cG9ydGVkIHRoZW1lLiBZb3UgY2FuIHVzZSA8Y29kZT57dGhlbWV9 PC9jb2RlPiBhbmQgPGNvZGU+e3ZlcnNpb259PC9jb2RlPiByZXBsYWNlbWVudCB2YXJpYWJs ZXMgaW4gdGhpcyBmaWVsZC4gRm9yIGV4YW1wbGUsIDxjb2RlPnt0aGVtZX1fdnt2ZXJzaW9u fTwvY29kZT4uIERlZmF1bHQ6IDxjb2RlPnt0aGVtZX08L2NvZGU+PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPkRlZmF1bHQgdGhlbWU8L3NwYW4+IDogU2V0IHRoZSB0aGVtZSBm b3IgYWxsIG90aGVyIHVzZXJzLiBJZiB1c2luZyAmIzgyMTY7T25lIHRoZW1lIGZvciBldmVy eW9uZSYjODIxNzsgdGhlIHRoZW1lIGNob3NlbiBoZXJlIGlzIGZvcmNlZCB1cG9uIGFsbCB1 c2Vycy4gSWYgdXNpbmcgYW55IG9mIHRoZSBvdGhlciBtZWNoYW5pc21zLCB0aGlzIHRoZW1l IGlzIGEgZmFsbGJhY2sgc2hvdWxkIHNvbWV0aGluZyBnbyBwZWFyLXNoYXBlZC48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWUgc3lzdGVtPC9zcGFuPiA6IEFzIGRldGFp bGVkIGluIDxhIGhyZWY9IiNzd2l0Y2giPlN3aXRjaGluZyB0aGVtZXM8L2E+LCB5b3UgbWF5 IGNob29zZSB0aGUgd2F5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpbnRl cmZhY2UgaXMgcHJlc2VudGVkIHRvIG90aGVyIHVzZXJzOgoJPHVsPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+T25lIHRoZW1lIGZvciBldmVyeW9uZTwvc3Bhbj4gOiB1c2VzIHRoZSBE ZWZhdWx0IHRoZW1lIGZvciBhbGwgdXNlcnM7IHRoZXkgaGF2ZSBubyBjaG9pY2UgaW4gdGhl IG1hdHRlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgcGVyIHBy aXZpbGVnZSBsZXZlbDwvc3Bhbj4gOiBhbGxvd3MgeW91IHRvIGFzc2lnbiBvbmUgb3IgbW9y ZSBwcml2aWxlZ2UgbGV2ZWxzIHRvIGEgdGhlbWUuIENob29zZSBhIHRoZW1lIGZyb20gdGhl IGxlZnQtaGFuZCBsaXN0IGFuZCB0aGVuIHNoaWZ0L2N0cmwtY2xpY2sgdGhlIHByaXZpbGVn ZSBsZXZlbHMgdG8gYXNzaWduIHRoZW0uIEZsaWNrIGJldHdlZW4gdGhlbWVzIGluIHRoZSBs ZWZ0IGNvbHVtbiB0byBzZWUgd2hpY2ggb25lcyBhcmUgc2V0IGZvciB2YXJpb3VzIHVzZXIg bGV2ZWxzLCBvciBob3ZlciBvdmVyIGEgcHJpdmlsZWdlIGxldmVsIHRvIHNlZSBhIHRvb2x0 aXAuIE9ubHkgb25lIGxldmVsIGNhbiBiZSBhc3NpZ25lZCB0byBhIHRoZW1lIHNvIGlmIHlv dSBjbGljayBhIGxldmVsIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZCB0byBhbm90 aGVyIHRoZW1lLCBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdHMgb3JpZ2luYWwgYXNzaWdu bWVudC4gTm90ZSB5b3UgbXVzdCBTYXZlIHRoZSBjaGFuZ2VzIGZvciB0aGVtIHRvIHRha2Ug ZWZmZWN0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0aGVtZSBwZXIgdXNl cjwvc3Bhbj4gOiBkZWZpbmUgYSBzaG9ydGxpc3QgZnJvbSB0aGUgYXZhaWxhYmxlIGluc3Rh bGxlZCB0aGVtZXMgdG8gb2ZmZXIgdG8gYWxsIHVzZXJzLiBBIG5ldyB0YWIgd2lsbCBhcHBl YXIgdG8gb3RoZXIgdXNlcnMgdW5kZXIgPGVtPkFkbWluPC9lbT4gdGhhdCBpcyBlc3NlbnRp YWxseSBhIGN1dC1kb3duIHZlcnNpb24gb2YgdGhlIDxlbT5BZG1pbiB0aGVtZXM8L2VtPiB0 YWIuIFVzZXJzIGNhbiBzd2l0Y2ggYmV0d2VlbiBhbnkgb25lIG9mIHRoZSB0aGVtZXMgeW91 IGhhdmUgcGVybWl0dGVkLjwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxwPlJlbWVtYmVy IHRvIGNsaWNrIFNhdmUgdG8gYXBwbHkgdGhlIGNoYW5nZXMuIENsaWNraW5nIGFueSBvdGhl ciB0YWIgd2lsbCB1bmRvIGFueSBtb2RpZmljYXRpb25zIHlvdSBtYXkgaGF2ZSBtYWRlLjwv cD4KCgk8aDIgaWQ9ImJyb3dzZSI+QnJvd3NlIHRoZW1lczwvaDI+CgoJPHA+Q2xpY2sgdGhp cyBidXR0b24gdG8gYmUgdGFrZW4gdG8gdGhlIGNlbnRyYWwgYWRtaW4gdGhlbWUgcmVwb3Np dG9yeSB3aGVyZSB5b3UgbWF5IGJyb3dzZSB0aGVtZXMgYW5kIGRvd25sb2FkIHRoZW0gcmVh ZHkgZm9yIGluc3RhbGxhdGlvbi48L3A+CgoJPGgyIGlkPSJpbXBvcnQiPkluc3RhbGwgYSB0 aGVtZTwvaDI+CgoJPHA+TG9jYXRlIGEgdGhlbWUgcGFja2FnZSBvbiB5b3VyIGhhcmQgZHJp dmUgb3IgcGFzdGUgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byBhIHBhY2th Z2UgaW4gdGhlIGJveCBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLiBIaXQgPHN0cm9uZz5VcGxv YWQ8L3N0cm9uZz4gYW5kIGl0IHdpbGwgYmUgaW5zdGFsbGVkLiBJZiBpdCBhbHJlYWR5IGV4 aXN0cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBOb3RlIHRoYXQgeW91IG1heSByZWNlaXZl IGEgd2FybmluZyBpZiB0aGUgdGhlbWUgaXMgcGFja2FnZWQgdXNpbmcgYSBjb21wcmVzc2lv biBhbGdvcml0aG0gdGhhdCBpcyBub3QgYnVpbHQgaW50byB5b3VyIHZlcnNpb24gb2YgPHNw YW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4uIEEgbGlzdCBvZiBzdXBwb3J0ZWQgY29tcHJl c3Npb24gdHlwZXMgaXMgZ2l2ZW4gYmVsb3cgdGhlIHVwbG9hZCBib3guPC9wPgoKCTxoMiBp ZD0ibmV3Ij5DcmVhdGUgYSBuZXcgKGVtcHR5KSB0aGVtZTwvaDI+CgoJPHA+Q2xpY2sgPHN0 cm9uZz5DcmVhdGUgbmV3IHRoZW1lPC9zdHJvbmc+IGFuZCBhIGJveCB3aWxsIHNsaWRlIGRv d24gYWxsb3dpbmcgeW91IHRvIGdpdmUgeW91ciB0aGVtZSBhIG5hbWUuICBOb3RlIHRoYXQg dGhlIGVkaXQgYm94IGF1dG9tYXRpY2FsbHkgdGFrZXMgZm9jdXMsIHNvIHlvdSBjYW4gdHlw ZSBzdHJhaWdodCBhd2F5LjwvcD4KCgk8cD5ObyBzcGFjZXMgb3Igb2RkIGNoYXJhY3RlcnMg YXJlIHBlcm1pdHRlZCwgYmVjYXVzZSB0aGUgbmFtZSB5b3UgZW50ZXIgaXMgdGhlIG5hbWUg b2YgdGhlIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgPGVtPnRoZW1l PC9lbT4gZm9sZGVyIGFuZCB0aGVtIG5hbWUgb2YgeW91ciB0aGVtZSYjODIxNztzIGNsYXNz LiBJZiB5b3UgZG8gbWFuYWdlIHRvIHVzZSBvZGQgY2hhcmFjdGVycywgdGhlIG5hbWUgd2ls bCBiZSAmIzgyMjA7ZHVtYmVkIGRvd24mIzgyMjE7IGZvciB5b3UuIE9uY2UgdGhlIG5hbWUg aXMgc2V0LCB0aGF0IGlzIGl0OyB5b3UgY2Fubm90IGNoYW5nZSBpdCBmcm9tIHdpdGhpbiB0 aGUgaW50ZXJmYWNlLiBUaGUgb25seSB3YXkgdG8gcmVuYW1lIGl0IGlzIHZpYSB5b3VyIDxz cGFuIGNsYXNzPSJjYXBzIj5GVFA8L3NwYW4+IGNsaWVudCBhbmQgaW4gdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRv aW5nLjwvcD4KCgk8cD5JbiBvcmRlciB0byBhdm9pZCBuYW1lIGNsYXNoZXMgd2l0aCBvdGhl ciBwZW9wbGUmIzgyMTc7cyB0aGVtZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsIHRo ZW1lcyB5b3UgZGVzaWduIGJlZ2luIHdpdGggYSB1bmlxdWUgMy1sZXR0ZXIgcHJlZml4IG9m IHlvdXIgb3duIGNob29zaW5nLCBwbHVzIGFuIHVuZGVyc2NvcmUgJiM4MjEyOyBleGFjdGx5 IGxpa2UgcGx1Z2lucy4gVGh1cywgc21kX0JsdWVNZWFuaWUgbWlnaHQgd2VsbCBiZSB0aGUg bmFtZSBvZiBhIHRoZW1lLjwvcD4KCgk8cD5XaGVuIHlvdSBoYXZlIG5hbWVkIHlvdXIgdGhl bWUsIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGlu IHdoaWNoIGl0IGNhbiByZXNpZGUuPC9wPgoKCTxoMiBpZD0iY2xvbmUiPkV4dGVuZCBhbiBl eGlzdGluZyB0aGVtZTwvaDI+CgoJPHA+Q2xpY2sgPHN0cm9uZz5CYXNlPC9zdHJvbmc+IHRv IGNyZWF0ZSBhIG5ldyB0aGVtZSBiYXNlZCBvbiBhbm90aGVyLiBBIGJveCB3aWxsIHNsaWRl IGRvd24gKHRoZSBjdXJzb3IgZm9jdXNlcyBhdXRvbWF0aWNhbGx5IGluIHRoZSBib3ggZm9y IHlvdSkgc28geW91IG1heSBlbnRlciB0aGUgbmFtZSBvZiB5b3VyIGNvcHkuIE9ic2VydmUg dGhlIDxhIGhyZWY9IiNuZXciPm5hbWluZyBjb252ZW50aW9uPC9hPiwgdGhlbiBjbGljayA8 c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGNyZWF0ZSB0aGUgbmV3IHRoZW1lLjwvcD4KCgk8cD48 c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5QbGVhc2UgcmVtZW1iZXIsIHlvdXIgdGhlbWUgd2ls bCBiZSBkZXBlbmRlbnQgb24gdGhlIGNob3NlbiB0aGVtZSBhbmQgPHN0cm9uZz5ib3RoPC9z dHJvbmc+IG11c3QgYmUgcHJlc2VudCBvbiBhIHVzZXImIzgyMTc7cyBzeXN0ZW0gZm9yIHRo ZSB0aGVtZSB0byB3b3JrPC9zcGFuPi4gSXQgaXMgd29ydGggZW5zdXJpbmcgdGhhdCB1c2Vy cyBvZiB5b3VyIHRoZW1lIGFyZSBtYWRlIGF3YXJlIG9mIHRoaXMgZGVwZW5kZW5jeSB0byBh dm9pZCB1bm5lY2Vzc2FyeSBmcnVzdHJhdGlvbjsgcGVyaGFwcyBhZGQgYSBsaW5rIHRvIHRo ZSB0aGVtZSYjODIxNztzIGJhc2UsIG1lbnRpb24gdGhlIGRlcGVuZGVuY3kgaW4gdGhlIEhl bHAgbGluayBhbmQvb3IgaW4gdGhlIHRoZW1lJiM4MjE3O3MgYXJ0aWNsZSBvbiBUZXh0Z2Fy ZGVuLiBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBkZWxldGUgYW55IHRoZW1lIGZyb20gdGhl IGxpc3QgdGhhdCBoYXMgc3VjaCBhIGRlcGVuZGVuY3ksIG90aGVyd2lzZSB5b3VyIGFkbWlu IHNpZGUgd2lsbCBzdG9wIHdvcmtpbmcuPC9wPgoKCTxoMiBpZD0iZXhwb3J0Ij5FeHBvcnQg YSB0aGVtZTwvaDI+CgoJPHA+SWYgeW91IHdpc2ggdG8gYmFjayB1cCBhIHRoZW1lIG9yIHNo YXJlIGl0IHdpdGggb3RoZXJzLCBjbGljayA8c3Ryb25nPkV4cG9ydDwvc3Ryb25nPi4gQSBi b3ggd2lsbCBzbGlkZSBkb3duIG9mZmVyaW5nIHlvdSBhIGNob2ljZSBvZiBjb21wcmVzc2lv biBmb3JtYXRzOyB0aGUgZGVmYXVsdCBpcyB0aGUgZm9ybWF0IHlvdSBjaG9zZSBmcm9tIHRo ZSA8YSBocmVmPSIjc2V0dXAiPlByZWZlcmVuY2VzPC9hPiBwYWdlLiBDbGljayA8ZW0+W0dv XTwvZW0+IHRvIGV4cG9ydCB0aGUgdGhlbWUgYW5kIHNhdmUgaXQgdG8geW91ciBjb21wdXRl ci4gQWxsIHJlbGF0ZWQgZmlsZXMgaW4gdGhlIHRoZW1lIHdpbGwgYmUgcGFja2FnZWQgdG9n ZXRoZXIgaW50byBhIHNpbmdsZSBkb3dubG9hZCBmaWxlIGZvciBjb252ZW5pZW5jZS48L3A+ CgoJPHA+VGhlIGZpbGVuYW1lIGlzIGdvdmVybmVkIGJ5IHRoZSA8ZW0+RmlsZW5hbWUgZm9y bWF0PC9lbT4gcHJlZmVyZW5jZS48L3A+CgoJPGgyIGlkPSJkZWxldGUiPkRlbGV0ZSBhIHRo ZW1lPC9oMj4KCgk8cD5IaXQgdGhpcyAoYW5kIGNvbmZpcm0geW91IGFyZSBzdXJlKSB0byBy ZW1vdmUgdGhlIGVudGlyZSB0aGVtZSBmb2xkZXIgYW5kIGNvbnRlbnRzIGZyb20gdGhlIGZp bGUgc3lzdGVtLiA8c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5UaGlzIGlzIG5vdCB1bmRvYWJs ZSwgc28gYmUgY2FyZWZ1bDwvc3Bhbj4uPC9wPgoKCTxoMiBpZD0iZWRpdF90aGVtZSI+RWRp dCBhIHRoZW1lPC9oMj4KCgk8cD5BIHRoZW1lIGlzIGEgY29sbGVjdGlvbiBvZiBmaWxlcy4g VGhlIGZpbGVzIGFsbCByZXNpZGUgaW4gdGhlaXIgb3duIHNlbGYtY29udGFpbmVkIGRpcmVj dG9yeSB1bmRlciA8Y29kZT50ZXh0cGF0dGVybi90aGVtZTwvY29kZT4uIFRoZSBuYW1lIG9m IHRoZSBkaXJlY3RvcnkgaXMgdGhlIG5hbWUgb2YgeW91ciB0aGVtZSwgaGVuY2UgdGhlIHJl YXNvbiBpdCBjYW5ub3QgY29udGFpbiBhbnkgb2JzY3VyZSBjaGFyYWN0ZXJzIHRoYXQgd291 bGQgYmUgaW52YWxpZCBpbiB0aGUgZmlsZXN5c3RlbSBvciA8c3BhbiBjbGFzcz0iY2FwcyI+ UEhQPC9zcGFuPiB2YXJpYWJsZXMuPC9wPgoKCTxwPldoZW4geW91IGNsaWNrICYjODIxNjtF ZGl0JiM4MjE3OyB5b3Ugd2lsbCBiZSB0YWtlbiB0byBhIHNjcmVlbiB0aGF0IGFsbG93cyB5 b3UgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSB0aGVtZS4gVGhlIEVkaXQgc2NyZWVuIGlzIGJy b2tlbiBpbnRvIHRocmVlIHZlcnRpY2FsIHBhcnRzLCBhcyBmb2xsb3dzOjwvcD4KCgk8aDMg aWQ9ImVkaXRfaW1nIj5JbWFnZSBoYW5kbGluZzwvaDM+CgoJPHA+RWFjaCB0aGVtZSBjYW4g Y29udGFpbiBhbiBvcHRpb25hbCB0aHVtYm5haWwuIFRoaXMgaXMgYW4gaW1hZ2Ugb2YgMjYw JiMyMTU7MTUwcHggaW4gc2l6ZSwgY2FsbGVkIDxjb2RlPnNjcmVlbnNob3QucG5nPC9jb2Rl PiAob3IgPGNvZGU+LmpwZzwvY29kZT4sIDxjb2RlPi5naWY8L2NvZGU+LCBldGMpIGluIHlv dXIgdGhlbWUgZGlyZWN0b3J5LiBOb3RlIGl0IHdpbGwgYmUgc3F1YXNoZWQgLyBzdHJldGNo ZWQgdG8gZml0IHlvdXIgdGh1bWJuYWlsIGRpbWVuc2lvbnMgc2V0IGluIHRoZSBwbHVnaW4g cHJlZnMuPC9wPgoKCTxwPk90aGVyIGltYWdlcyBmb3IgdXNlIGluIDxzcGFuIGNsYXNzPSJj YXBzIj5DU1M8L3NwYW4+IHJ1bGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIGEgdGhlbWUuIEJy b3dzZSBmb3IgYW4gaW1hZ2UgYW5kIHNlbGVjdCBpdCwgdGhlbiBjbGljayA8c3Ryb25nPlVw bG9hZDwvc3Ryb25nPiB0byBhZGQgaXQgdG8gdGhlIHRoZW1lLiBZb3UgY2FuIGN1cnJlbnRs eSBvbmx5IHVwbG9hZCBvbmUgaW1hZ2UgYXQgYSB0aW1lLCB0aG91Z2ggeW91IGNhbiBkZWxl dGUgb25lIG9yIG1vcmUgYXQgb25jZSBieSBTaGlmdC9DdHJsIGNsaWNraW5nIHRoZSBvbmVz IHlvdSB3aXNoIHRvIHJlbW92ZSBhbmQgaGl0dGluZyB0aGUgJiM4MjE2O3gmIzgyMTc7IGJ1 dHRvbi4gPHNwYW4gY2xhc3M9ImltcG9ydGFudCI+V2FybmluZzogZmlsZXMgd2lsbCBiZSBk ZWxldGVkIGltbWVkaWF0ZWx5LCB3aXRob3V0IGNvbmZpcm1hdGlvbi48L3NwYW4+PC9wPgoK CTxwPlRoZSBiZXN0IHdheSB0byByZWZlciB0byBpbWFnZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPnMgaW4gc3R5bGVzaGVldHMgaXMgd2l0aCBhIHJlbGF0aXZlIHBhdGg6PC9w PgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Lm15U3R5bGUgewog ICBiYWNrZ3JvdW5kOiB1cmwobXktaW1hZ2UuZ2lmKTsKfQo8L2NvZGU+PC9wcmU+CgoJPGgz IGlkPSJlZGl0X2NvbnRlbnQiPkNvbnRlbnQ8L2gzPgoKCTxwPlRoZSBjZW50cmFsIHBhbmUg aXMgd2hlcmUgeW91IGVkaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyBpbiB5b3VyIHRo ZW1lLiBUaGUgc21hbGwgZWRpdCBib3ggYXQgdGhlIHRvcCBpcyB0aGUgZmlsZW5hbWUgYW5k IHRoZSBsYXJnZSB0ZXh0IGFyZWEgaXMgaXRzIGNvbnRlbnQuIENsaWNrIDxzdHJvbmc+U2F2 ZTwvc3Ryb25nPiB0byBjb21taXQgY2hhbmdlcy4gWW91IG1heSBmcmVlbHkgcmVuYW1lIGFu eSBmaWxlIHlvdSBhcmUgZWRpdGluZy48L3A+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+SW1w b3J0YW50OiBpZiB5b3Ugc2VsZWN0IGEgZmlsZSwgZWRpdCBpdCwgcmVuYW1lIGl0LCBhbmQg Y2xpY2sgPHN0cm9uZz5TYXZlPC9zdHJvbmc+IHlvdSB3aWxsIG92ZXJ3cml0ZSB3aGF0ZXZl ciB3YXMgaW4gdGhlIHByZXZpb3VzIGZpbGUgJiM4MjEyOyBldmVuIGlmIHlvdSBlbXB0eSB0 aGUgY29udGVudHMgb2YgdGhlIHRleHRhcmVhIGluIGFuIGVmZm9ydCB0byBtYWtlIGEgJiM4 MjIwO25ldyYjODIyMTsgb25lLiBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgYSBuZXcgZmlsZSwg aXQgaXMgc2FmZXIgdG8gY2xpY2sgdGhlIDxzdHJvbmc+TmV3IGZpbGU8L3N0cm9uZz4gYnV0 dG9uIGluIHRoZSByaWdodCBoYW5kIGNvbHVtbiB0byBlbnN1cmUgeW91IGFyZSBub3QgZWRp dGluZyBhbiBleGlzdGluZyBmaWxlIGJ5IG1pc3Rha2UuPC9wPgoKCTxwPkl0IGlzIGFsc28g d29ydGggbm90aW5nIHRoYXQgZmlsZSBwZXJtaXNzaW9ucyB2YXJ5IGZyb20gaG9zdCB0byBo b3N0LiBJZiB5b3UgdHJ5IGFuZCBzYXZlIGEgdGhlbWUgZmlsZSBhbmQgcmVjZWl2ZSBhIHl1 a2t5IHdhcm5pbmcgbWVzc2FnZSBhYm91dCBub3QgYmVpbmcgYWJsZSB0byB3cml0ZSB0aGUg ZmlsZSwgdHJ5IGluY3JlYXNpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0aGVtZSBkaXJl Y3RvcnkgYW5kIGFsbCBmaWxlcyBiZW5lYXRoIGl0LjwvcD4KCgk8cD5UaGUgdGhlbWUgZmls ZXMgYXJlIGRpc3RyaWJ1dGVkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdp dGggPGNvZGU+NjQ0PC9jb2RlPiBwZXJtaXNzaW9ucyB3aGljaCBzaG91bGQgYmUgZmluZSBm b3IgYSBzdGFuZGFyZCBob3N0LiBTb21lIHNoYXJlZCBob3N0aW5nIGNvbXBhbmllcyAmIzgy MTI7IGFuZCB0aGVzZSBhcmUgdXN1YWxseSB0aGUgb25lcyB0aGF0IHRlbGwgeW91IHRvIHNl dCB5b3VyIDxjb2RlPmZpbGVzPC9jb2RlPiBhbmQgPGNvZGU+aW1hZ2VzPC9jb2RlPiBkaXJl Y3RvcmllcyB0byA3NzcgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIHdyaXRhYmxlIGJ5IDxzcGFu IGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ICYjODIxMjsgcnVuIEFwYWNoZS9QSFAgaW4gYSBk aWZmZXJlbnQgd2F5IHdoaWNoIG1pZ2h0IHJlcXVpcmUgaGlnaGVyIHBlcm1pc3Npb25zIGlu IG9yZGVyIHRvIHdyaXRlIHRvIHRoZSB0aGVtZSBkaXJlY3RvcnkuIFRoaXMgaXMgdW5mb3J0 dW5hdGVseSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgcGx1Z2luIHNvIHlvdSB3aWxsIGhh dmUgdG8gZXhwZXJpbWVudCBpZiBpdCBjYXVzZXMgeW91IHByb2JsZW1zLjwvcD4KCgk8aDM+ RmlsZSBoYW5kbGluZzwvaDM+CgoJPHA+VGhpcyBjb2x1bW4gYmVnaW5zIHdpdGggYSBzZWxl Y3QgbGlzdCBvZiBhbGwgaW5zdGFsbGVkIHRoZW1lczsgdGhlIGN1cnJlbnQgdGhlbWUgc2Vs ZWN0ZWQuIENoYW5naW5nIHRoZSBpdGVtIGhlcmUgd2lsbCBpbW1lZGlhdGVseSBhbGxvdyB5 b3UgdG8gZWRpdCBhbm90aGVyIHRoZW1lLiBUaGlzIGlzIHZlcnkgdXNlZnVsIGlmIHlvdSBh cmUgY29weWluZyBhbmQgcGFzdGluZyBmaWxlcyBmcm9tIG9uZSB0aGVtZSB0byBhbm90aGVy IGFuZCBzYXZlcyB5b3UgaGF2aW5nIHRvIGdvIGJhY2sgdG8gdGhlIHRoZW1lIGxpc3QgZmly c3QuPC9wPgoKCTxwPkJlbmVhdGggdGhhdCBhcmUgdHdvIGJ1dHRvbnM6PC9wPgoKCTx1bD4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk5ldyBmaWxlPC9zcGFuPiA6IENyZWF0ZSBhIG5l dywgZW1wdHkgZmlsZSBpbiB5b3VyIHRoZW1lIGRpcmVjdG9yeS4gTm90aGluZyBpcyBhY3R1 YWxseSBjcmVhdGVkIHVudGlsIHlvdSBoaXQgPHN0cm9uZz5TYXZlPC9zdHJvbmc+IGJ1dCB1 c2luZyB0aGlzIGJ1dHRvbiBlbnN1cmVzIHlvdSBiZWdpbiB3aXRoIGEgY2xlYW4gc2xhdGUg YW5kIGRvbiYjODIxNzt0IGFjY2lkZW50YWxseSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGZp bGUgeW91IHdlcmUgZWRpdGluZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVt ZSBsaXN0PC9zcGFuPiA6IEEgc2hvcnRjdXQgYmFjayB0byB0aGUgbWFpbiB0aGVtZSBsaXN0 IChlcXVpdmFsZW50IHRvIGNsaWNraW5nIHRoZSA8ZW0+QWRtaW4gdGhlbWVzPC9lbT4gdGFi KTwvbGk+Cgk8L3VsPgoKCTxwPkJlbG93IHRob3NlIGJ1dHRvbnMgYXJlIHVwIHRvIGZvdXIg c2VjdGlvbnMgY29udGFpbmluZyBhbGwgdGhlIChub24taW1hZ2UpIGZpbGVzIHRoYXQgbWFr ZSB1cCB5b3VyIHRoZW1lLiBDbGljayBhIGZpbGVuYW1lIHRvIGxvYWQgaXQgaW50byB0aGUg Y2VudHJhbCB0ZXh0IGFyZWEgZm9yIGVkaXRpbmcuPC9wPgoKCTxoNCBpZD0iZWRpdF9jc3Mi PlN0eWxlc2hlZXRzPC9oND4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5GaWxlcyBjYW4gYmUg YW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4g ZW5kIGluIDxjb2RlPi5jc3M8L2NvZGU+PC9wPgoKCTxwPlRoZSBtZWF0IGFuZCBwb3RhdG9l cyBvZiB5b3VyIHRoZW1lLiBBZGQgYXMgbWFueSBzaGVldHMgYXMgeW91IGxpa2UgYW5kIGxv YWQgdGhlbSBmcm9tIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZShz KS48L3A+CgoJPGg0IGlkPSJlZGl0X2NzcyI+U3R5bGVwbGF0ZXM8L2g0PgoKCTxwIGNsYXNz PSJpbXBvcnRhbnQiPkZpbGVzIGNhbiBiZSBhbnkgdmFsaWQgZmlsZW5hbWUgYnV0IDxzcGFu IGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4gPGNvZGU+LnNzYzwvY29kZT48L3A+ CgoJPHA+QSBzcGVjaWFsIHZlcnNpb24gb2YgYSBzdHlsZXNoZWV0IHRoYXQgYWxsb3dzIHlv dSB0byBkZWZpbmUgY29uc3RhbnRzIHRocm91Z2hvdXQgeW91ciBzaGVldC4gV3JpdGUgeW91 ciBzdHlsZXNoZWV0IGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHlvdSB3b3VsZCBub3Jt YWxseSBidXQgd2hlcmUgeW91IGZpbmQgeW91cnNlbGYsIGZvciBleGFtcGxlLCB1c2luZyB0 aGUgc2FtZSBjb2xvciB2YWx1ZSByZXBlYXRlZGx5IG9yIHRoZSBzYW1lIHJ1bGVzIGJsb2Nr LCB5b3UgY2FuIHNhdmUgeW91cnNlbGYgdHlwaW5nIGJ5IHVzaW5nIGNvbnN0YW50czo8L3A+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5AYnJhbmRpbmc6ICMx MjM0NTY7CiNoZWFkZXIgewogIGNvbG9yOiBAYnJhbmRpbmc7Cn0KaDIgewogIGNvbG9yOiBA YnJhbmRpbmc7Cn0KPC9jb2RlPjwvcHJlPgoKCTxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IHdo b2xlIHJ1bGUgYmxvY2tzIGxpa2UgdGhpcyAoPGVtPk5vdGUgdGhlIGNvbG9uIGFmdGVyIHRo ZSBibG9jayBuYW1lPC9lbT4pIDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xh c3M9ImJsb2NrIj5AbXlfYmxvY2s6IHsKICBtYXJnaW46MCAyMHB4OwogIGJvcmRlcjozcHgg c29saWQgIzk5OTsKICBmb250LXNpemU6MTIwJTsKfQojaGVhZGVyIHsKICBjb2xvcjogQGJy YW5kaW5nOwogIHBvc2l0aW9uOnJlbGF0aXZlOwogIEBteV9ibG9jazsKfQpoMiB7CiAgQG15 X2Jsb2NrOwp9CjwvY29kZT48L3ByZT4KCgk8cD5JZiB5b3UgcHV0IGFsbCB5b3VyIGNvbnN0 YW50cyBhdCB0aGUgdG9wIG9mIHRoZSA8Y29kZT4uc3NjPC9jb2RlPiBmaWxlIHRoZXkgd2ls bCBiZSByZW1vdmVkIGZyb20gdGhlIGdlbmVyYXRlZCBjc3MgZmlsZS48L3A+CgoJPHA+V2hl biB5b3Ugc2F2ZSBhIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUsIGEgY29ycmVzcG9uZGluZy1u YW1lZCA8Y29kZT4uY3NzPC9jb2RlPiBmaWxlIHdpbGwgYWxzbyBiZSBjcmVhdGVkLiBUaGUg dHdvIHdpbGwgYmUga2VwdCBpbiBzeW5jIGFzIGZhciBhcyBwcmFjdGljYWJsZSAoZXZlbiBp ZiB5b3UgcmVuYW1lIHRoZSBvcmlnaW5hbCBmaWxlKS4gV2hlbiBpdCBjb21lcyB0byBkZWxl dGlvbiB0aG91Z2gsIHRoZXkgYXJlIHRyZWF0ZWQgc2VwYXJhdGVseS4gVGhpcyBhbGxvd3Mg eW91IHRvIGVpdGhlciBrZWVwIHRoZSA8Y29kZT4uc3NjPC9jb2RlPiBmaWxlIGluIHRoZSBk aXN0cmlidXRpb24gYXJjaGl2ZSBvciByZW1vdmUgaXQgcHJpb3IgdG8gZXhwb3J0LjwvcD4K Cgk8aDQgaWQ9ImVkaXRfanMiPkphdmFzY3JpcHQ8L2g0PgoKCTxwIGNsYXNzPSJpbXBvcnRh bnQiPkZpbGVzIGNhbiBiZSBhbnkgdmFsaWQgZmlsZW5hbWUgYnV0IDxzcGFuIGNsYXNzPSJj YXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4gPGNvZGU+LmpzPC9jb2RlPjwvcD4KCgk8cD5Bbnkg dHJpY2tlcnkgeW91IG1heSB3aXNoIHRvIGVtcGxveSBpbiB5b3VyIHRoZW1lIGNhbiBiZSB3 cml0dGVuIGluIHRoZXNlIGZpbGVzLiBSZW1lbWJlciB0aGF0IGpRdWVyeSBpcyBsb2FkZWQg YnkgZGVmYXVsdCBvbiB0aGUgYWRtaW4gc2lkZSBzbyB5b3UgY2FuIHBsYXkgd2l0aCB0aGF0 LjwvcD4KCgk8aDQgaWQ9ImVkaXRfcGhwIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PjwvaDQ+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+T25lIGZpbGUgPHN0cm9uZz5tdXN0PC9z dHJvbmc+IGJlIG5hbWVkIGV4YWN0bHkgdGhlIHNhbWUgYXMgeW91ciB0aGVtZSwgaS5lLiA8 Y29kZT5zbWRfQmx1ZU1lYW5pZS5waHA8L2NvZGU+LiBBbnkgb3RoZXIgZmlsZXMgbXVzdCBl bmQgaW4gPGNvZGU+LnBocDwvY29kZT48L3A+CgoJPHA+Q29uc3VsdCB0aGUgPGEgaHJlZj0i aHR0cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT1DcmVhdGluZ19h bl9BZG1pbl9TaWRlX1RoZW1lIj5BZG1pbiBTaWRlIHRoZW1lIGd1aWRlPC9hPiBvbiBUZXh0 Ym9vayBmb3IgdGhlIHJ1bGVzIG9uIG1ha2luZyB0aGVtZXMuIE5vdGUgdGhhdCBjb3JydXB0 IHRoZW1lcyBhcmUgZGV0ZWN0ZWQgdG8gdGhlIGJlc3Qgb2YgdGhlIHBsdWdpbiYjODIxNztz IGFiaWxpdHkgYW5kIHlvdSBtYXkgbm90IGV4cG9ydCwgYmFzZSBvciBzd2l0Y2ggdG8gYW55 IHRoZW1lIHRoYXQgaXMgYnJva2VuLjwvcD4KCgk8cD5JZiB5b3UgcmVuYW1lIHRoZSB0aGVt ZSYjODIxNztzIGNvcmUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSAoaS5l LiB0aGUgb25lIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdGhlbWUgZm9sZGVyIGl0c2Vs ZikgdGhlIHBsdWdpbiB3aWxsIGF0dGVtcHQgdG8gcmVuYW1lIHRoZSBkaXJlY3RvcnkgYXMg d2VsbDsgZXNzZW50aWFsbHkgcmVuYW1pbmcgdGhlIHRoZW1lLiBUaGlzIHNob3VsZCBwcmV2 ZW50IGEgdGhlbWUgZnJvbSBiZWNvbWluZyB1bmVkaXRhYmxlLCBidXQgaXQgaXMgdXAgdG8g eW91IHRvIGtlZXAgdGhlIGNsYXNzIG5hbWUgaW4gc3luYyB3aXRoIHRoZSBmaWxlIG5hbWUu IElmIGF0IGFueSB0aW1lIHlvdSBnbyBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0L2dyaWQgYW5k IGZpbmQgYSB0aGVtZSBleGlzdHMgYnV0IGhhcyBubyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVk IHdpdGggaXQsIGNoYW5jZXMgYXJlIGl0JiM4MjE3O3MgYmVjYXVzZSB0aGUgY2xhc3MgbmFt ZSBkb2VzbiYjODIxNzt0IG1hdGNoIHRoZSB0aGVtZSYjODIxNztzIGRpcmVjdG9yeSBuYW1l LiBKdXN0IGhpdCBbRWRpdF0gYW5kIGFsdGVyIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQ PC9zcGFuPiBmaWxlIHRvIGJyaW5nIGV2ZXJ5dGhpbmcgYmFjayBvbiB0cmFjay48L3A+CgoJ PGg0IGlkPSJlZGl0X290aGVyIj5PdGhlcnM8L2g0PgoKCTxwPkFueSBmaWxlcyB0aGF0IGFy ZSBub3Qgb2YgdGhlIGFib3ZlIHRocmVlIHR5cGVzIChhbmQgYXJlIG5vdCBpbWFnZXMpIGFw cGVhciBoZXJlLiBZb3Ugd2lsbCBwcm9iYWJseSBuZXZlciBzZWUgdGhpcyBzZWN0aW9uLiBJ ZiB5b3UgZG8gdHJ5IHRvIGNyZWF0ZSBhIGZpbGUgdGhhdCBpcyBub3Qgb2YgdGhlIGFib3Zl IHRocmVlIHR5cGVzLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQuIFlvdSBtdXN0IGhpdCA8 ZW0+U2F2ZTwvZW0+IGFnYWluIHRvIGNvbmZpcm0geW91IHJlYWxseSB3aXNoIHRvIGNyZWF0 ZSB0aGUgZmlsZS48L3A+CgoJPGgzIGlkPSJhYm91dCI+TWFuaWZlc3Q8L2gzPgoKCTxwPklu IHlvdXIgbWFpbiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGlzIGEgZnVu Y3Rpb24gY2FsbGVkIDxjb2RlPm1hbmlmZXN0KCk8L2NvZGU+IHdoaWNoIGNvbnRhaW5zIGlu Zm8gYWJvdXQgeW91IGFuZCB5b3VyIHRoZW1lLiBFZGl0IHRoZSB2YWx1ZXMgaGVyZSB0byBz dGFtcCB5b3VyIG1hcmsgb24gdGhlIHRoZW1lLiBOb3RlIHRoYXQgaWYgeW91ciBkZXNjcmlw dGlvbiBjb250YWlucyBhcG9zdHJvcGhlcyB0aGV5IG11c3QgYmUgPGVtPmVzY2FwZWQ8L2Vt PiBieSBwcmVjZWRpbmcgdGhlbSB3aXRoIGEgc2luZ2xlIGJhY2tzbGFzaCA8Y29kZT5cPC9j b2RlPi4gZS5nLjwvcD4KCjxwcmU+PGNvZGU+JiMzOTtkZXNjcmlwdGlvbiYjMzk7ID0mZ3Q7 ICYjMzk7RG9uXCYjMzk7dCBmZWFyIHRoZSByZWFwZXIhJiMzOTssCjwvY29kZT48L3ByZT4K Cgk8aDIgaWQ9InBlcnVzZXIiPlBlci11c2VyIHRoZW1lIHNlbGVjdGlvbjwvaDI+CgoJPHA+ SWYgYW4gYWRtaW5pc3RyYXRvciBjaG9vc2VzIHRvIGFsbG93IHBlci11c2VyIHRoZW1lcywg YSBuZXcgdGFiIGFwcGVhcnMgdW5kZXIgdGhlIEFkbWluIHRhYiBvZiBhbGwgdXNlcnMgKGV4 Y2VwdCBhZG1pbmlzdHJhdG9ycykuIFRoaXMgc2ltcGx5IGRpc3BsYXlzIGFsbCBhdmFpbGFi bGUgdGhlbWVzICYjODIxMjsgb25lcyB0aGF0IHRoZSBhZG1pbmlzdHJhdG9yIGhhcyBleHBs aWNpdGx5IGFsbG93ZWQuPC9wPgoKCTxwPkNsaWNraW5nIGEgdGhlbWUgbmFtZSBvciB0aHVt Ym5haWwgd2lsbCBpbW1lZGlhdGVseSBzd2l0Y2ggdG8gdGhhdCB0aGVtZSB1bnRpbCB0aGUg dXNlciBjaG9vc2VzIGFub3RoZXIgb3IgdGhlIGFkbWluaXN0cmF0b3IgY2hhbmdlcyB0aGVt ZSBzeXN0ZW0uPC9wPgoKCTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1 bD4KCQk8bGk+MTIgSnVuIDA5IHwgMC4xIHwgSW5pdGlhbCBwdWJsaWMgYmV0YTwvbGk+CgkJ PGxpPjAzIFNlcCAwOSB8IDAuMTEgfCBJbXByb3ZlZCBUZXh0Z2FyZGVuIHRoZW1lIGZlZWQg YW5kIGxpbmtzIDsgaW1wcm92ZWQgZmlsZSBzdXBwb3J0IChib3RoIHRoYW5rcyB0aGVib21i c2l0ZSkgOyBtYWRlIGdsb2JhbCB0aGVtZSBtb3JlIG9idmlvdXMgOyBhbHRlcmVkIHByZWZz IHRhYiBhIGJpdCA7IGFkZGVkIDxjb2RlPi5zc2M8L2NvZGU+IHN1cHBvcnQgOyBpZ25vcmVk IC5zdm4gc3ViZGlycyAoYWxsIHRoYW5rcyBwaWVtYW4pIDsgaW1wcm92ZWQgd2FybmluZyBt ZXNzYWdlcyA7IG1pc2MgZml4ZXMgYW5kIGhvdXNla2VlcGluZzwvbGk+CgkJPGxpPjAyIE5v diAwOSB8IDAuMTIgfCBSZWR1Y2VkIHRoZW1lIGZlZWQgY2x1dHRlciBpbiB0aGUgcHJlZnMg dGFibGU8L2xpPgoJCTxsaT4wNCBOb3YgMDkgfCAwLjEzIHwgUmVtb3ZlZCBlcmVnX3JlcGxh Y2UgdG8gY29uZm9ybSB3aXRoIFBIUDUuMysgKHRoYW5rcyB0aGVib21ic2l0ZSkgOyBjaGFu Z2VkICYjODIxNjtnbG9iYWwmIzgyMTc7IHRvICYjODIxNjtkZWZhdWx0JiM4MjE3OyA7IGZp eGVkIHJvZ3VlIHVudHJhbnNsYXRlZCBzdHJpbmc8L2xpPgoJCTxsaT4wOSBOb3YgMDkgfCAw LjE0IHwgTW92ZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIGluIGxpbmUgd2l0 aCBUZXh0Z2FyZGVuIGxheW91dCBhbHRlcmF0aW9ucyAodGhhbmtzIGZvciB0aGUgaGVhZHN1 cCB0aGVib21ic2l0ZSkgOyBtYWRlIGZlZWRzIG1vcmUgcm9idXN0IGluIHRoZSBldmVudCBU ZXh0Z2FyZGVuIGlzIGRvd24gLyB1bmRlciBtYWludGVuYW5jZSAodGhhbmtzIG1sYXJpbm8p PC9saT4KCQk8bGk+MDkgRmViIDEwIHwgMC4yIHwgTmF0aXZlIHN1cHBvcnQgZm9yIHppcCBp bXBvcnRpbmcgYW5kIGV4cG9ydGluZyAoYWxtb3N0KSBpcnJlc3BlY3RpdmUgb2YgeW91ciA8 c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBlbnZpcm9ubWVudCA7IHppcCBpcyBub3cg dGhlIGRlZmF1bHQgc3lzdGVtIDsgYmV0dGVyIG5vdGlmaWNhdGlvbiBvZiBzdXBwb3J0ZWQg Y29tcHJlc3Npb24gdHlwZXMgYW5kIG1vcmUgcm9idXN0IHJlamVjdGlvbiBpZiBzb21ldGhp bmcgaXMgbWlzc2luZzwvbGk+CgkJPGxpPjEwIEZlYiAxMCB8IDAuMjEgfCBGaXhlZCBiemlw MiB3YXJuaW5nICh0aGFua3MgdGhlYm9tYnNpdGUpIDsgZml4ZWQgcmVjdXJzaXZlIG1rZGly IHByb2JsZW0gd2l0aCBiemlwMiBmaWxlcyAodGhhbmtzIDxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+IG1hbnVhbCBjb21tZW50cykgOyBmaXhlZCByb2d1ZSB0ZW1wIGZpbGUgbGVm dCBiZWhpbmQgd2l0aCB6aXAgaW1wb3J0PC9saT4KCQk8bGk+MTUgRmViIDEwIHwgMC4yMiB8 IFdoZW4gcmVuYW1pbmcgdGhlIGNvcmUgdGhlbWUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwv c3Bhbj4gZmlsZSwgYXV0b21hdGljYWxseSByZW5hbWUgZGlyZWN0b3J5IHRvbyAodGhhbmtz IGZsb29kZmlzaCk8L2xpPgoJCTxsaT4yOCBGZWIgMTAgfCAwLjIzIHwgUnVkaW1lbnRhcnkg dmFsaWRhdGlvbiBvZiB6aXAgZmlsZSBjb250ZW50cyAodGhhbmtzIFR1dHNfYW5kX1RpcHBz KTsgZml4ZWQgZXhwb3J0IG5vdGlmaWNhdGlvbjwvbGk+CgkJPGxpPjA2IEF1ZyAxMCB8IDAu MjQgfCBGaXhlZCA8Y29kZT5mc29ja29wZW4oKTwvY29kZT4gYW5kIHVuZGVmaW5lZCBpbmRl eCB3YXJuaW5ncyBpZiBub3QgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCAvIHByZWZzIG5v dCBpbnN0YWxsZWQ8L2xpPgoJCTxsaT4wMSBOb3YgMTAgfCAwLjI1IHwgQmV0dGVyIHRoZW1l IGludGVncmF0aW9uIChjb2xvdXJzLCBldGMpIDsgZml4ZWQgZHVwbGljYXRlIHBhZ2UgcmVu ZGVycyBvbiBlZGl0IHNjcmVlbiBhbmQgYWRkZWQgZmlsZW5hbWUgZm9ybWF0IG9wdGlvbiAo Ym90aCB0aGFua3MgbWF2ZXJpY2spPC9saT4KCQk8bGk+MjEgRmViIDExIHwgMC4yNiB8IEZp eGVkIGltcG9ydCBidWcgaWYgbW9yZSB0aGFuIG9uZSBkb3QgaW4gZmlsZW5hbWUgKHRoYW5r cyBwaGlsd2FyZWhhbSk8L2xpPgoJCTxsaT4wOCBKdW4gMTEgfCAwLjI3IHwgRml4ZWQgZXJy b25lb3VzIHN0cmlwcGluZyBvZiBzbGFzaGVzIG9uIHNhdmUgOyBhZGRlZCB0eHAgcGF0aCBw cmVmICh0aGFua3MgbWFuaXF1aSk8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImNyZWRpdHMiPkNy ZWRpdHM8L2gyPgoKCTxwPlRoaXMgcGx1Z2luIHdvdWxkIG5vdCBoYXZlIGV4aXN0ZWQgd2l0 aG91dCB0aGUgZGVkaWNhdGlvbiwgaWRlYXMgYW5kIGdlbml1cyBvZiB0aGUgVGV4dHBhdHRl cm4gZGV2ZWxvcG1lbnQgdGVhbSwgZXNwZWNpYWxseSBSb2JlcnQgV2V0emxtYXlyIGZvciB0 aGUgdGhlbWUgc3VwcG9ydC4gUGx1cyBvZiBjb3Vyc2UgdGhlIGFybXkgb2YgYmV0YSB0ZXN0 ZXJzLCBpZGVhcyBoYW1zdGVycyBhbmQgdGlyZWxlc3MgdGhlbWUgYWR2b2NhdGVzLCBtb3N0 IG5vdGFibHkgU3R1YXJ0IEJ1dGNoZXIsIERhbGUgQ2hhcG1hbiwgRGF2ZSBEZVNhbmRybywg YW5kIE1pa2UgRGVubmlzLjwvcD4KCgk8cD5JIGFtIGFsc28gaW5kZWJ0ZWQgdG8gdGhlIGxp YnJhcmllcyBob3N0ZWQgYXQgPGEgaHJlZj0iaHR0cDovL3BocGNsYXNzZXMub3JnLyI+PHNw YW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gQ2xhc3NlczwvYT4gdGhhdCBlbmFibGVkIG5h dGl2ZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBvZiB2YXJpb3VzIHR5cGVzLiBU aGUgaGFyZCB3b3JrIG9mIERldmluIERvdWNldHRlIGFuZCBBbGV4YW5kcmUgVGVkZXNjaGkg cmVhbGx5IGFkZGVkIHRoZSBpY2luZyBvbiB0aGUgY2FrZSBmb3IgdGhpcyBwbHVnaW4uPC9w PgoKCTxwPkt1ZG9zIGFuZCB0aGFua3MgdG8geW91IGFsbC48L3A+Cgo8L2Rpdj4KPCEtLSAq KiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNz bWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2Vp Z2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25v c3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9yOiMzMzM7IH0KI3NtZF9o ZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVk ICM5OTk7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzox MHB4OyB9CiNzbWRfaGVscCBoMSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsg bWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVy LWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxN3B4 IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgZm9udDogYm9sZCAxMnB4 IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHgg MCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxp bmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7 IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3Jt OiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQoj c21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5 OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsg cGFkZGluZy1ib3R0b206MWVtOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9y ZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDsgfQojc21kX2hlbHAgdWwgeyBs aXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6 cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21k X2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5E IFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiIwYzQ1NWE0NWFjZTk2ZGIz Y2U0MTFiODdjMzMyYzJjNiI7fQ==