# Name: smd_admin_themes v0.31 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjMxIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czo2NTM4ODoiLyoqDQogKiBzbWRfYWRtaW5fdGhlbWVzDQogKg0KICogQSBUZXh0cGF0 dGVybiBDTVMgcGx1Z2luIGZvciBjcmVhdGluZywgZWRpdGluZywgdGVzdGluZywgaW5zdGFs bGluZyBhbmQgZGlzdHJpYnV0aW5nIGFkbWluLXNpZGUgdGhlbWVzDQogKiAgLT4gRW1wbG95 IGltYWdlcywgQ1NTLCBKUywgSFRNTC9QSFAgaW4geW91ciB0aGVtZQ0KICogIC0+IFVzZSBj b25zdGFudHMgaW4geW91ciBDU1MgZmlsZXMNCiAqICAtPiBCYXNlIHlvdXIgdGhlbWUgb24g YW4gZXhpc3RpbmcgdGhlbWUgdG8gdHdlYWsgaXQgdG8geW91ciB0YXN0ZQ0KICogIC0+IEV4 cG9ydCBhIHRoZW1lIHBhY2thZ2UgZm9yIGRpc3RyaWJ1dGlvbiB0byB0aGUgY29tbXVuaXR5 IGluIGVpdGhlciAudGFyLCAudGd6LCAuYnoyIG9yIC56aXAgZm9ybWF0IChyZXF1aXJlcyBz bWRfY3J1bmNoZXJzIHBsdWdpbikNCiAqICAtPiBJbXBvcnQgLyBpbnN0YWxsIG90aGVyIHRo ZW1lcyBmcm9tIHRoZSAiY29tbXVuaXR5IHJlcG9zaXRvcnkiOmh0dHA6Ly90ZXh0Z2FyZGVu Lm9yZy9hZG1pbmlzdHJhdGlvbi10aGVtZXMNCiAqICAtPiBBZG1pbmlzdHJhdG9yIGNhbiBz ZXQgYSBkZWZhdWx0IHRoZW1lIGZvciBhbGwgdXNlcnMsIG9yIGVuYWJsZSBwZXItdXNlciAv IHBlci1yb2xlIHRoZW1lcw0KICoNCiAqIEBhdXRob3IgU3RlZiBEYXdzb24NCiAqIEBsaW5r ICAgaHR0cDovL3N0ZWZkYXdzb24uY29tLw0KICovDQoNCmlmIChAdHhwaW50ZXJmYWNlID09 ICdhZG1pbicpIHsNCgkvLyBTaWxlbmNlIHdhcm5pbmdzIGJlY2F1c2UsIGFsdGhvdWdoIHRo ZSBwbHVnaW4gcmVxdWlyZXMgc21kX2NydW5jaGVycyBmb3IgdGhlDQoJLy8gaW1wb3J0L2V4 cG9ydCBmZWF0dXJlcywgaXQnbGwgZnVuY3Rpb24gaW4gYSByZWR1Y2VkIGNhcGFjaXR5IHdp dGhvdXQgaXQNCglAcmVxdWlyZV9wbHVnaW4oJ3NtZF9jcnVuY2hlcnMnKTsNCg0KCWdsb2Jh bCAkc21kX2F0X2V2ZW50LCAkc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9hZG1fZXZlbnQsICRz bWRfYXRfcHJpdnMsDQoJCSRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfcHJlZnMsICRwcmVm cywgJHNtZF9hdF9mZWVkdXJsLCAkc21kX2F0X3RoZW1lX3JlcG8sDQoJCSRzbWRfYXRfc3R5 bGVzOw0KDQoJJHNtZF9hdF9ldmVudCA9ICdzbWRfYXQnOw0KCSRzbWRfYXRfZnVsbGV2ID0g J3NtZF9hZG1pbl90aGVtZXMnOw0KCSRzbWRfYXRfYWRtX2V2ZW50ID0gJ3NtZF9hZG1hdCc7 DQoJJHNtZF9hdF9wcml2cyA9ICcxJzsNCgkkc21kX2F0X2ZlZWR1cmwgPSAnaHR0cDovL3Rl eHRnYXJkZW4ub3JnL2FkbWluLXRoZW1lcy1mZWVkJzsNCgkkc21kX2F0X3RoZW1lX3JlcG8g PSAnaHR0cDovL3RleHRnYXJkZW4ub3JnL2FkbWluaXN0cmF0aW9uLXRoZW1lcyc7DQoJJHNt ZF9hdF9zdHlsZXMgPSBhcnJheSgNCgkJJ2NvbW1vbicgPT4NCgkJICAgICcuc21kX2NsZWFy IHsgY2xlYXI6Ym90aDsgfQ0KICAgICAgICAgICAuc21kX3NtYWxscHJpbnQgeyBmb250LXNp emU6NzUlOyB0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luLXRvcDotMTJweDsgfQ0KICAgICAg ICAgICAuc21kX2hpZGRlbiB7IGRpc3BsYXk6bm9uZTsgbWFyZ2luOjVweDsgfScsDQoJCSdj b250cm9sJyA9Pg0KCQkgICAgJyNzbWRfY29udHJvbCB7IG1hcmdpbjowIGF1dG87IH0NCiAg ICAgICAgICAgI3NtZF9jb250cm9sIHRkIC5wdWJsaXNoIHsgbWFyZ2luLWxlZnQ6NTBweDsg fQ0KICAgICAgICAgICAjc21kX2NvbnRyb2wgLnVwbG9hZC1mb3JtIHsgcGFkZGluZzowOyB9 DQogICAgICAgICAgIC5zbWRfYXRfdXBkYXRlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6 Izk5MDAwMDsgfScsDQoJCSdlZGl0JyA9Pg0KICAgICAgICAgICcjc21kX2F0X2ltYWdlcyB7 IG1hcmdpbjowcHggNnB4IC00cHggMDsgfQ0KICAgICAgICAgICAuc21kX3NraW5fZmlsZXR5 cGVzIHsgbWFyZ2luOjEycHggMDsgfScsDQoJCSdncmlkJyA9Pg0KCQkgICAgJy5zbWRfZ3Jp ZCB7IHdpZHRoOjk2MHB4OyBtYXJnaW46MCBhdXRvOyB9DQogICAgICAgICAgIC5zbWRfY2Vs bCB7IGZsb2F0OmxlZnQ7IHBhZGRpbmc6MTBweDsgbWFyZ2luOjEwcHg7IGJvcmRlcjoxcHgg cmlkZ2UgI2NjYzsgd2lkdGg6e3R3fXB4OyBoZWlnaHQ6e3RofXB4OyB9DQogICAgICAgICAg IC5zbWRfY2VsbC5hY3RpdmUgeyBib3JkZXI6MXB4IHNvbGlkIHJlZDsgfQ0KICAgICAgICAg ICAuc21kX2NlbGw6aG92ZXIgeyBiYWNrZ3JvdW5kOiNlMmRmY2U7IGNvbG9yOiM4MDU1MWU7 IH0NCiAgICAgICAgICAgLnNtZF9jZWxsOmhvdmVyIGEgeyBjb2xvcjpibGFjazsgfQ0KICAg ICAgICAgICAuc21kX2F1dGgsLnNtZF9hY3Rpb25zIHsgdGV4dC1hbGlnbjpjZW50ZXI7IG1h cmdpbjo1cHggMDsgfScsDQoJCSdsaXN0JyA9Pg0KICAgICAgICAgICcuc21kX2F0X2xpc3Qg dHIuYWN0aXZlLCAuc21kX2F0X2xpc3QgdHIuYWN0aXZlIGEgeyBiYWNrZ3JvdW5kLWNvbG9y OiNlMmRmY2U7IGNvbG9yOiM4MDU1MWU7IH0nLA0KCQknc2V0dXAnID0+DQogICAgICAgICAg Jy5zbWRfZmFrZWJ0biB7IGNvbG9yOiM1NTU7IGN1cnNvcjpwb2ludGVyOyB9DQogICAgICAg ICAgICNzbWRfYXRfcmFkaW8gaW5wdXQgeyBmbG9hdDpsZWZ0OyBjbGVhcjpib3RoOyB9DQog ICAgICAgICAgICNzbWRfYXRfcmFkaW8gbGFiZWwgeyBmbG9hdDpsZWZ0OyB9JywNCgkpOw0K DQoJLy8gVGh1bWJuYWlsIGRpbWVuc2lvbnMNCgkkc21kX2NvcmVfdGhlbWVzID0gYXJyYXko J2NsYXNzaWMnLCdyZW1vcmEnKTsNCg0KCWFkZF9wcml2cygkc21kX2F0X2V2ZW50LCAkc21k X2F0X3ByaXZzKTsNCglhZGRfcHJpdnMoJ3BsdWdpbl9wcmVmcy4nLiRzbWRfYXRfZnVsbGV2 LCAkc21kX2F0X3ByaXZzKTsNCglyZWdpc3Rlcl90YWIoImV4dGVuc2lvbnMiLCAkc21kX2F0 X2V2ZW50LCBzbWRfYXRfZ1R4dCgndGFiX25hbWUnKSk7DQoJcmVnaXN0ZXJfY2FsbGJhY2so J3NtZF9hdF9vcHRpb25zJywgJ3BsdWdpbl9wcmVmcy4nLiRzbWRfYXRfZnVsbGV2KTsNCgly ZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0X3dlbGNvbWUnLCAncGx1Z2luX2xpZmVjeWNsZS4n LiRzbWRfYXRfZnVsbGV2KTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0JywgJHNtZF9h dF9ldmVudCk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF9wZXInLCAnYWRtaW5fc2lk ZScsICd0aGVtZV9uYW1lJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF9saW5rJywg J3ByZWZzX3VpJywgJ3RoZW1lX25hbWUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0 X3VwbG9hZF9mb3JtJywgJHNtZF9hdF9ldmVudC4nX3VpJywgJ3VwbG9hZF9mb3JtJyk7DQoN CglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfc3lzdGVtJ10pICYmICRwcmVmc1snc21kX2F0 X3N5c3RlbSddID09IDIpIHsNCgkJYWRkX3ByaXZzKCRzbWRfYXRfYWRtX2V2ZW50LCAnMiwz LDQsNSw2Jyk7DQoJCXJlZ2lzdGVyX3RhYigiYWRtaW4iLCAkc21kX2F0X2FkbV9ldmVudCwg c21kX2F0X2dUeHQoJ3NraW5uZXInKSk7DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYWRt YXQnLCAkc21kX2F0X2FkbV9ldmVudCk7DQoJfQ0KDQoJLy8gRG91YmxlIGFycmF5OiAxc3Qg aXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWlyIGRlZmF1bHRzLA0KCS8vIDJu ZCBpcyBhIGxpc3Qgb2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5IG5lZWQgcmVtb3ZpbmcgaW4g ZnV0dXJlIChkZWZhdWx0czogYWxsIGVtcHR5KQ0KCSRzbWRfYXRfcHJlZnMgPSBhcnJheSgN CgkJYXJyYXkoDQoJCQknc21kX2F0X2Nhc2Vfc29ydCcgPT4gJzEnLA0KCQkJJ3NtZF9hdF9j cnVzaCcgPT4gJ3ppcCcsDQoJCQknc21kX2F0X3R3JyA9PiAnMjYwJywNCgkJCSdzbWRfYXRf dGgnID0+ICcxNTAnLA0KCQkJJ3NtZF9hdF9maWxlbmFtZV9mb3JtYXQnID0+ICd7dGhlbWV9 JywNCgkJCSdzbWRfYXRfbGF5b3V0JyA9PiAnMScsDQoJCQknc21kX2F0X3N5c3RlbScgPT4g JzAnLA0KCQkJJ3NtZF9hdF9nbG9iYWxfc2tpbicgPT4gJycsDQoJCQknc21kX2F0X2dyb3Vw X2xpc3QnID0+ICcnLA0KCQkJJ3NtZF9hdF91c2VyX2xpc3QnID0+ICcnLA0KCQkpLA0KCQlh cnJheSgNCgkJCSdzbWRfYXRfZmlsZV9wYXRoJyA9PiAnJywNCgkJKQ0KCSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0KCRldmVudCwgJHN0 ZXApIHsNCglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRf YXRfY2xvbmUnLA0KCQkJJ3NtZF9hdF9kZWxldGUnLA0KCQkJJ3NtZF9hdF9kZWxldGVfaW1h Z2UnLA0KCQkJJ3NtZF9hdF9lZGl0JywNCgkJCSdzbWRfYXRfZXhwb3J0JywNCgkJCSdzbWRf YXRfaW1wb3J0JywNCgkJCSdzbWRfYXRfbmV3ZmlsZScsDQoJCQknc21kX2F0X3ByZWZzX2lu c3RhbGwnLA0KCQkJJ3NtZF9hdF9wcmVmc19yZW1vdmUnLA0KCQkJJ3NtZF9hdF9wcmVmc191 cGRhdGUnLA0KCQkJJ3NtZF9hdF9yZW5hbWUnLA0KCQkJJ3NtZF9hdF9zYXZlJywNCgkJCSdz bWRfYXRfc2V0dXAnLA0KCQkJJ3NtZF9hdF9zd2l0Y2gnLA0KCQkJJ3NtZF9hdF91cGxvYWRf aW1hZ2UnLA0KCQkJJ3NtZF9hdF9jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsNCgkJc21kX2F0 X2xpc3QoJycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfd2VsY29tZSgkZXZlbnQsICRzdGVwKSB7DQoJJG1zZyA9ICcnOw0KCXN3aXRj aCAoJHN0ZXApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9hdF9wcmVmc19pbnN0 YWxsKDApOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21kX2F0X3ByZWZz X3JlbW92ZSgwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9hdF9saW5rKCkgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50Ow0K CXJldHVybiBocmVmKHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksICc/ZXZlbnQ9Jy4kc21k X2F0X2V2ZW50KTsNCn0NCg0KLy8gQSBzdHViIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRob3V0 IGEgJG1lc3NhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9kaXNwbGF5KCkgew0KCQlzbWRfYXRfbGlz dCgnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2F0X2xpc3QoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudCwgJHByZWZz LCAkc21kX2F0X3ByZWZzLCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfZnVs bGV2LCAkc21kX2F0X2ZlZWR1cmwsICRzbWRfYXRfdGhlbWVfcmVwbywgJHNtZF9hdF9zdHls ZXM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoNCglleHRyYWN0KGdw c2EoYXJyYXkoJ3N0ZXAnLCAncGFnZScsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnLCAnc2tp bicpKSk7DQoJJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBncHMoJ21lc3Nh Z2UnKTsNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSkg PyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoJJHN0eWxlcnVsZSA9ICgkbGF5 b3V0PT0wKSA/ICdsaXN0JyA6ICdncmlkJzsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydz bWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1sw XVsnc21kX2F0X3R3J10pICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0 X3RoJ10pID8gJGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3Nt ZF9hdF90aCddKSArIDgwOw0KCSRzdHlsZXJlcHMgPSBhcnJheSgNCgkJJ3t0d30nID0+ICR0 dywNCgkJJ3t0aH0nID0+ICR0aCwNCgkpOw0KCSRoZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2lu JnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0kc21kX2F0X2Z1bGxldiN1c2FnZSI7DQoNCgkkcGFn ZWJ5ID0gKGdwcygncXR5JykpID8gZ3BzKCdxdHknKSA6ICgoY3MoJ3NtZF9hdF9wYWdlYnkn KSkgPyBjcygnc21kX2F0X3BhZ2VieScpIDogMTUpOw0KCSRtYXhfZmlsZV9zaXplID0gMTUw ICogMTAyNDsgLy8gYSBiaXQgYXJiaXRyYXJ5IQ0KDQoJJGN1cnJfc2tpbiA9IChzbWRfYXRf ZXhpc3RzKCR0aGVtZS0+bmFtZSkpID8gJHRoZW1lLT5uYW1lIDogJ2NsYXNzaWMnOw0KCSRz a2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygpOw0KCSRjcnVzaGVycyA9IHNtZF9hdF9j cnVzaF9vcHRpb25zKCdjb21wcmVzcycpOw0KCSR1bmNydXNoZXJzID0gc21kX2F0X2NydXNo X29wdGlvbnMoJ2RlY29tcHJlc3MnKTsNCgkkYmFzZXMgPSBhcnJheSgpOw0KDQoJLy8gR2V0 IGEgbGlzdCBvZiBhbmNlc3RvciB0aGVtZXMgKGkuZS4gZGVwZW5kZW5jaWVzKQ0KCWZvcmVh Y2ggKCRza2luX2xpc3QgYXMgJHNraW5hKSB7DQoJCSRtYW5pZmVzdCA9IHNtZF9hdF9yZWFk X3NraW5mbygkc2tpbmEpOw0KCQlpZiAoJG1hbmlmZXN0KSB7DQoJCQlpZiAoJG1hbmlmZXN0 WydiYXNlZF9vbiddKSB7DQoJCQkJJGJhc2VzW10gPSAkbWFuaWZlc3RbJ2Jhc2VkX29uJ107 DQoJCQl9DQoJCX0NCgl9DQoJJGJhc2VzID0gYXJyYXlfdW5pcXVlKCRiYXNlcyk7DQoNCglw YWdldG9wKHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksJG1lc3NhZ2UpOw0KDQoJLy8gSGFu ZGxlIHBhZ2luZw0KCSR0b3RhbCA9IGNvdW50KCRza2luX2xpc3QpOw0KCSRsaW1pdCA9IG1h eChAJHBhZ2VieSwgMTUpOw0KCWxpc3QoJHBhZ2UsICRvZmZzZXQsICRudW1QYWdlcykgPSBw YWdlcigkdG90YWwsICRsaW1pdCwgJHBhZ2UpOw0KCSRza2luX2xpc3QgPSBhcnJheV9zbGlj ZSgkc2tpbl9saXN0LCAkb2Zmc2V0LCAkbGltaXQpOw0KDQoJJHFzID0gYXJyYXkoDQoJCSJl dmVudCIgPT4gJHNtZF9hdF9ldmVudCwNCgkJInBhZ2UiID0+ICRwYWdlLA0KCSk7DQoNCgll Y2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9u IHNtZF9nZXRjcnVzaChza2luKSB7DQoJc2tpbkhhbmRsZSA9ICJjcnVzaF8iK3NraW47DQoJ alF1ZXJ5KCcuc21kX3BvcHVwJykuZWFjaChmdW5jdGlvbigpIHsNCgkJYm94ID0galF1ZXJ5 KHRoaXMpOw0KCQlpZiAoYm94LmF0dHIoImlkIikgPT0gc2tpbkhhbmRsZSkgew0KCQkJaWYg KGJveC5jc3MoImRpc3BsYXkiKSA9PSAibm9uZSIpIHsNCgkJCQlib3guc2xpZGVEb3duKCdm YXN0Jyk7DQoJCQl9IGVsc2Ugew0KCQkJCWJveC5zbGlkZVVwKCdmYXN0Jyk7DQoJCQl9DQoJ CX0gZWxzZSB7DQoJCQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQl9DQoJfSk7DQoJalF1ZXJ5 KCcjJytza2luSGFuZGxlKycgYScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnkodGhp cykuYXR0cigiaHJlZiIsICI/ZXZlbnQ9eyRzbWRfYXRfZXZlbnR9JnNraW49Iitza2luKyIm c3RlcD1zbWRfYXRfZXhwb3J0JmNydXNoPSIralF1ZXJ5KCcjJytza2luSGFuZGxlKycgaW5w dXRbdHlwZT1cJ3JhZGlvXCddOmNoZWNrZWQnKS52YWwoKSsiJnBhZ2U9Iit7JHBhZ2V9KTsN Cgl9KTsNCglyZXR1cm4gZmFsc2U7DQp9DQoNCmZ1bmN0aW9uIHNtZF9nZXR2YWwoc2tpbiwg c3RlcCkgew0KCXNraW5IYW5kbGUgPSAicG9wXyIrc2tpbjsNCglqUXVlcnkoJy5zbWRfcG9w dXAnKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlib3ggPSBqUXVlcnkodGhpcyk7DQoJCWlmIChi b3guYXR0cigiaWQiKSA9PSBza2luSGFuZGxlKSB7DQoJCQlpZiAoYm94LmNzcygiZGlzcGxh eSIpID09ICJub25lIikgew0KCQkJCWJveC5zbGlkZURvd24oJ2Zhc3QnKTsNCgkJCQlqUXVl cnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcpLmZvY3VzKCk7DQoJCQl9IGVsc2Ugew0KCQkJ CWJveC5zbGlkZVVwKCdmYXN0Jyk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlib3guc2xpZGVV cCgnZmFzdCcpOw0KCQl9DQoJfSk7DQoJalF1ZXJ5KCcjJytza2luSGFuZGxlKycgYScpLmNs aWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnkodGhpcykuYXR0cigiaHJlZiIsICI/ZXZlbnQ9 eyRzbWRfYXRfZXZlbnR9JnNraW49IisoKHNraW49PSduZXcnKT8gJycgOiBza2luKSsiJnN0 ZXA9IitzdGVwKyImbmV3X3NraW49IitqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcp LnZhbCgpKyImcGFnZT0iK3skcGFnZX0pOw0KCX0pOw0KDQoJalF1ZXJ5KCcjJytza2luSGFu ZGxlKycgaW5wdXQnKS5rZXl1cChmdW5jdGlvbiAoKSB7DQoJCXRoaXMudmFsdWUgPSB0aGlz LnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05X1x4N2YtXHhmZl0vZywnJyk7DQoJCXdoaWxl ICh0aGlzLnZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy52YWx1ZS5zdWJzdHJpbmcoMCwxKS5t YXRjaCgvWzAtOV0vKSkgew0KCQkJdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuc3Vic3RyaW5n KDEpOw0KCQl9DQoJfSk7DQoNCglyZXR1cm4gZmFsc2U7DQp9DQo8L3NjcmlwdD4NCkVPSlM7 DQoNCgkvLyBJbmplY3Qgc3R5bGVzDQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4n Ow0KCWVjaG8gc3RydHIoJHNtZF9hdF9zdHlsZXNbJ2NvbW1vbiddLm4uJHNtZF9hdF9zdHls ZXNbJHN0eWxlcnVsZV0ubi4kc21kX2F0X3N0eWxlc1snY29udHJvbCddLCAkc3R5bGVyZXBz KTsNCgllY2hvICc8L3N0eWxlPic7DQoNCgkvLyBMaXN0IHRoZSBhdmFpbGFibGUgc2tpbnMN CgllY2hvIHN0YXJ0VGFibGUoJ3NtZF9jb250cm9sJywnJywnJyw1KTsNCgllY2hvIHRyKA0K CQkoKCR1bmNydXNoZXJzKSA/IHRkYSh1cGxvYWRfZm9ybShzbWRfYXRfZ1R4dCgnaW5zdGFs bF9za2luJyksICcnLCAnc21kX2F0X2ltcG9ydCcsICRzbWRfYXRfZXZlbnQsICcnLCAkbWF4 X2ZpbGVfc2l6ZSkuYnIuJzxkaXYgY2xhc3M9InNtZF9zbWFsbHByaW50Ij4nLnNtZF9hdF9n VHh0KCdzdXBwb3J0ZWRfaW1wb3J0JywgYXJyYXkoJ3t0eXBlc30nID0+ICgoJHVuY3J1c2hl cnMpID8gam9pbignLCAnLCAkdW5jcnVzaGVycykgOiBnVHh0KCdub25lJykpICkpLic8L2Rp dj4nLCAnIGNvbHNwYW49IjIiJykgOiAnJykNCgkJLnRkYShmb3JtKGZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIHNtZF9hdF9nVHh0KCdzZXR1cCcpLCAncHVibGlzaCcpLnNJbnB1dCgn c21kX2F0X3NldHVwJykuZUlucHV0KCRzbWRfYXRfZXZlbnQpKSwnIGNvbHNwYW49IjYiIHN0 eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKQ0KCSk7DQoJZWNobyBlbmRUYWJsZSgpOw0K CWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9uZ2Zvcm0iIGFjdGlvbj0iJy5q b2luX3FzKCRxcykuJyI+JzsNCgkkbmV3YnRuID0gJyAnLic8YSBjbGFzcz0ibmF2bGluayIg aHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9jbG9uZScuYS4n c2tpbj0iIG9uY2xpY2s9InJldHVybiBzbWRfZ2V0dmFsKFwnbmV3XCcsIFwnc21kX2F0X2Ns b25lXCcpOyI+Jy5zbWRfYXRfZ1R4dCgnbmV3JykuJzwvYT4nDQoJCS4gJzxkaXYgaWQ9InBv cF9uZXciIGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRfZ1R4 dCgnbmV3X3NraW4nKS4nPC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzbWRfdGV4 dF9uYW1lIiB2YWx1ZT0iIiAvPiA8YSBocmVmPSIjIj5bJy5zbWRfYXRfZ1R4dCgnY29uZmly bScpLiddPC9hPjwvZGl2Pic7DQoJJHJlcG9idG4gPSAnICcuJzxhIGNsYXNzPSJuYXZsaW5r IiBocmVmPSInLiRzbWRfYXRfdGhlbWVfcmVwby4nIj4nLnNtZF9hdF9nVHh0KCdmaW5kX3Ro ZW1lJykuJzwvYT4nOw0KCSRoZHJvdyA9IGhlZChzbWRfYXRfZ1R4dCgnbGlzdF90aXRsZScp LiAnICcuIHNtZF9hdF9nVHh0KCdoZWxwX2xpbmsnLCBhcnJheSgne2xpbmt9JyA9PiAkaGVs cExpbmspKSwgMyk7DQoJaWYgKCRsYXlvdXQ9PSIwIikgew0KCQllY2hvIHN0YXJ0VGFibGUo J2xpc3QnLCcnLCdzbWRfYXRfbGlzdCcsNSk7DQoJCWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93 LiRyZXBvYnRuLiRuZXdidG4sICcgY29sc3Bhbj0iNyInKQ0KCQkpOw0KCQllY2hvIHRyKA0K CQkJYXNzSGVhZCgNCgkJCQlzbWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwNCgkJCQknYXV0aG9y JywNCgkJCQlnVHh0KCd2ZXJzaW9uJyksDQoJCQkJJ2Rlc2NyaXB0aW9uJywNCgkJCQlzbWRf YXRfZ1R4dCgnYWN0aW9ucycpDQoJCQkJKQ0KCQkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxk aXYgY2xhc3M9InNtZF9ncmlkIj48ZGl2IGNsYXNzPSJzbWRfbmV3cm93Ij4nLiRoZHJvdy4k cmVwb2J0bi4kbmV3YnRuLic8L2Rpdj4nOw0KCX0NCglpZiggaXNfY2FsbGFibGUoJ2Zzb2Nr b3BlbicpICkNCgkJJHRyYW5zcG9ydCA9ICdmc29jayc7DQoJZWxzZWlmKCBpc19jYWxsYWJs ZSgnY3VybF9pbml0JykgKSB7DQoJCSR0cmFuc3BvcnQgPSAnY3VybCc7DQoJfSBlbHNlIHsN CgkJJHRyYW5zcG9ydCA9ICcnOw0KCX0NCg0KCSRmZWVkID0gJyc7DQoJc3dpdGNoICgkdHJh bnNwb3J0KSB7DQoJCWNhc2UgJ2N1cmwnOg0KCQkJJGMgPSBjdXJsX2luaXQoKTsNCgkJCWN1 cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1VSTCwgJHNtZF9hdF9mZWVkdXJsKTsNCgkJCWN1cmxf c2V0b3B0KCRjLCBDVVJMT1BUX1JFRkVSRVIsIGh1KTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBD VVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJM T1BUX1ZFUkJPU0UsIGZhbHNlKTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1RJTUVP VVQsIDEwKTsNCgkJCSRmZWVkID0gY3VybF9leGVjKCRjKTsNCgkJCWJyZWFrOw0KCQljYXNl ICdmc29jayc6DQoJCQkkdXJsID0gcGFyc2VfdXJsKCRzbWRfYXRfZmVlZHVybCk7DQoJCQkk ZnAgPSBAZnNvY2tvcGVuICgkdXJsWydob3N0J10sIDgwLCAkZXJybm8sICRlcnJzdHIsIDUp Ow0KCQkJaWYgKCRmcCkgew0KCQkJCSRxcnkgPSAnR0VUICcuJHNtZF9hdF9mZWVkdXJsOw0K CQkJCSRxcnkgLj0gIiBIVFRQLzEuMFxyXG5cclxuIjsNCg0KCQkJCWZwdXRzKCRmcCwgJHFy eSk7DQoJCQkJc3RyZWFtX3NldF90aW1lb3V0KCRmcCwgMTApOw0KCQkJCSRpbmZvID0gc3Ry ZWFtX2dldF9tZXRhX2RhdGEoJGZwKTsNCg0KCQkJCSRoZHJzID0gdHJ1ZTsNCgkJCQl3aGls ZSAoKCFmZW9mKCRmcCkpICYmICghJGluZm9bJ3RpbWVkX291dCddKSkgew0KCQkJCQkkbGlu ZSA9IGZnZXRzKCRmcCwgODE5Mik7DQoJCQkJCSRsaW5lID0gcHJlZ19yZXBsYWNlKCJbXHJc bl0iLCAiIiwgJGxpbmUpOw0KCQkJCQlpZiAoJGhkcnMgPT0gZmFsc2UpIHsNCgkJCQkJCSRm ZWVkIC49ICRsaW5lLiJcbiI7DQoJCQkJCX0NCgkJCQkJaWYgKHN0cmxlbigkbGluZSkgPT0g MCkgJGhkcnMgPSBmYWxzZTsNCgkJCQl9DQoJCQkJaWYgKCRpbmZvWyd0aW1lZF9vdXQnXSkg ew0KCQkJCQkkZmVlZCA9ICcnOw0KCQkJCX0NCgkJCQlmY2xvc2UoJGZwKTsNCgkJCX0gZWxz ZSB7DQoJCQkJJGZlZWQgPSAnJzsNCgkJCX0NCgkJCWJyZWFrOw0KCQlkZWZhdWx0Og0KCQkJ JGZlZWQgPSAnJzsNCgl9DQoNCgkkc21kX2F0X3ZsYXN0ID0gJyc7DQoJJGZlZWRzID0gYXJy YXkoKTsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdmVyc2lvbnMnXSkgJiYgaXNzZXQo JHByZWZzWydzbWRfYXRfdmxhc3QnXSkpIHsNCgkJaWYgKHRpbWUoKSAtICRwcmVmc1snc21k X2F0X3ZsYXN0J10gPCA4NjQwMCkgew0KCQkJLy8gTGFzdCB1cGRhdGVkIHdpdGhpbiB0aGUg bGFzdCBkYXksIHNvIHJlYWQgdGhlIGNhY2hlZCB2ZXJzaW9uIG51bWJlcnMNCgkJCSRmZWVk cyA9IHVuc2VyaWFsaXplKCRwcmVmc1snc21kX2F0X3ZlcnNpb25zJ10pOw0KCQl9DQoJfQ0K CWlmICghJGZlZWRzIHx8IGdwcygncmVhZF92ZXJzaW9ucycpKSB7DQoJCSRmZWVkcyA9IHNt ZF9hdF9mZWVkKCRmZWVkKTsNCgkJJGluc3RhbGxlZF9mZWVkID0gYXJyYXkoKTsNCgkJJGZl ZWRzID0gKGlzX2FycmF5KCRmZWVkcykpID8gJGZlZWRzIDogYXJyYXkoKTsNCg0KCQkvLyBP bmx5IHJlY29yZCB0aGUgdmVyc2lvbiBpbmZvIGZyb20gdGhlbWVzIHRoYXQgYXJlIGluc3Rh bGxlZA0KCQlmb3JlYWNoKCRza2luX2xpc3QgYXMgJHNraW5fbmFtZSkgew0KCQkJJGZlZWRf c2tpbl9uYW1lID0gc3RyX3JlcGxhY2UoJ18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNh bml0aXplIHRoZSB1cmxfdGl0bGUNCgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRmZWVkX3Nr aW5fbmFtZSwgJGZlZWRzKSkgew0KCQkJCSRpbnN0YWxsZWRfZmVlZFskZmVlZF9za2luX25h bWVdID0gJGZlZWRzWyRmZWVkX3NraW5fbmFtZV07DQoJCQl9DQoJCX0NCgkJc2V0X3ByZWYo J3NtZF9hdF92bGFzdCcsIHRpbWUoKSwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0 ZXh0X2lucHV0Jyk7DQoJCXNldF9wcmVmKCdzbWRfYXRfdmVyc2lvbnMnLCBzZXJpYWxpemUo JGluc3RhbGxlZF9mZWVkKSwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lu cHV0Jyk7DQoJfQ0KDQoJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tpbl9uYW1lKSB7DQoJ CS8vIFJlYWQgZWFjaCBtYW5pZmVzdCBhbmQgc2V0IHVwIHRoZSBsYWJlbHMNCgkJJHNraW5m byA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbl9uYW1lKTsNCgkJJGZlZWRfc2tpbl9uYW1l ID0gc3RyX3JlcGxhY2UoJ18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIGZv ciB1cmxfdGl0bGUgbWF0Y2hpbmcNCg0KCQkkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVt Yigkc2tpbmZvLCAxKTsNCgkJJHRoaXNfc2tpbiA9ICgkc2tpbmZvKSA/ICgoJHNraW5fbmFt ZSA9PSAkY3Vycl9za2luKSA/IHN0cm9uZygkc2tpbmZvWydkbmFtZSddKSA6ICRza2luZm9b J2RuYW1lJ10pIDogJHNraW5fbmFtZTsNCgkJJGlzX2dibCA9IChpc3NldCgkYXRfcHJlZnNb J3NtZF9hdF9nbG9iYWxfc2tpbiddKSAmJiAkc2tpbl9uYW1lID09ICRhdF9wcmVmc1snc21k X2F0X2dsb2JhbF9za2luJ10pID8gc21kX2F0X2dUeHQoJ2lzX2dsb2JhbCcpIDogJyc7DQoJ CSR0aHVtcm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1z bWRfYXRfc3dpdGNoJy5hLiduZXh0c3RlcD1zbWRfYXRfbGlzdCcuYS4nc2tpbj0nLiRza2lu X25hbWUuYS4ncGFnZT0nLiRwYWdlLiciIHRpdGxlPSInLnNtZF9hdF9nVHh0KCdhcHBseV9z a2luJykuJyI+Jy4kdGhpc19za2luLiRpc19nYmwuKCgkc2tpbmZvICYmICRza2luZm9bJ2Jh c2VkX29uJ10pID8gc21kX2F0X2dUeHQoJ2Jhc2VkX29uJywgYXJyYXkoJ3tza2lufScgPT4g JHNraW5mb1snYmFzZWRfb24nXSkpIDogJycpLigoJHRodW1ibmFpbCkgPyAnPGRpdj4nLiR0 aHVtYm5haWwuJzwvZGl2PicgOiAnJykuJzwvYT4nOw0KCQkkYXV0aHJvdyA9ICgoJHNraW5m byAmJiBzdHJwb3MoJHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0cDovLyIpID09PSAwKSA/ ICc8YSBocmVmPSInLiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4nLiRza2luZm9bJ2F1dGhv ciddLic8L2E+JyA6ICgoJHNraW5mbykgPyAkc2tpbmZvWydhdXRob3InXSA6ICctJykpOw0K CQkkYWN0cm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1z bWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyI+WycuZ1R4dCgnZWRpdCcpLidd PC9hPicNCgkJCS4gJyAnIC4oKCRza2luZm8pID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRf YXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLici IG9uY2xpY2s9InJldHVybiBzbWRfZ2V0dmFsKFwnJy4kc2tpbl9uYW1lLidcJywgXCdzbWRf YXRfY2xvbmVcJyk7Ij5bJy5zbWRfYXRfZ1R4dCgnY2xvbmUnKS4nXTwvYT4nIDogJycpDQoJ CQkuICcgJyAuKCgkc2tpbmZvICYmICRjcnVzaGVycykgPyAnPGEgaHJlZj0iP2V2ZW50PScu JHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9leHBvcnQnLmEuJ3NraW49Jy4kc2tpbl9u YW1lLiciIG9uY2xpY2s9InJldHVybiBzbWRfZ2V0Y3J1c2goXCcnLiRza2luX25hbWUuJ1wn KTsiPlsnLnNtZF9hdF9nVHh0KCdleHBvcnQnKS4nXTwvYT4nIDogJycpDQoJCQkuICcgJyAu KChpbl9hcnJheSgkc2tpbl9uYW1lLCAkc21kX2NvcmVfdGhlbWVzKSB8fCBpbl9hcnJheSgk c2tpbl9uYW1lLCAkYmFzZXMpKSA/ICcnIDogJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRf ZXZlbnQuYS4nc3RlcD1zbWRfYXRfZGVsZXRlJy5hLidza2luPScuJHNraW5fbmFtZS5hLidw YWdlPScuJHBhZ2UuJyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCcnLnNtZF9hdF9nVHh0 KCdkZWxldGVfY29uZmlybScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luX25hbWUpKS4nXCcp OyI+WycuZ1R4dCgnZGVsZXRlJykuJ108L2E+JykNCgkJCS4gJzxkaXYgaWQ9InBvcF8nLiRz a2luX25hbWUuJyIgY2xhc3M9InNtZF9wb3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9h dF9nVHh0KCduZXdfY2xvbmVza2luJykuJzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFt ZT0ic21kX3RleHRfbmFtZSIgdmFsdWU9IiIgLz4gPGEgaHJlZj0iIyI+Jm5ic3A7Wycuc3Ry b25nKHNtZF9hdF9nVHh0KCdjb25maXJtJykpLiddPC9hPjwvZGl2PicNCgkJCS4gJzxkaXYg aWQ9ImNydXNoXycuJHNraW5fbmFtZS4nIiBjbGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4i PjxzcGFuPicuc21kX2F0X2dUeHQoJ2NydXNoX2Zvcm1hdCcpLic8L3NwYW4+Jy5yYWRpb1Nl dCgkY3J1c2hlcnMsICRza2luX25hbWUuJ19jcnVzaCcsICgoaXNzZXQoJGF0X3ByZWZzWydz bWRfYXRfY3J1c2gnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfY3J1c2gnXSA6ICcnKSApLic8 YSBocmVmPSIjIj4mbmJzcDtbJy5zdHJvbmcoc21kX2F0X2dUeHQoJ2NvbmZpcm0nKSkuJ108 L2E+PC9kaXY+JzsNCgkJJHZlcm93ID0gKCRza2luZm8pID8gKChpc3NldCgkZmVlZHNbJGZl ZWRfc2tpbl9uYW1lXSkgJiYgaXNzZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ3N1bW1h cnknXSkgJiYgdmVyc2lvbl9jb21wYXJlKCRmZWVkc1skZmVlZF9za2luX25hbWVdWydzdW1t YXJ5J10sJHNraW5mb1sndmVyc2lvbiddKT09PTEpID8gJzxhIGhyZWY9IicuJGZlZWRzWyRm ZWVkX3NraW5fbmFtZV1bJ2xpbmsnXS4nIiBjbGFzcz0ic21kX2F0X3VwZGF0ZSI+Jy5zbWRf YXRfZ1R4dCgndmVyc2lvbicpLiRza2luZm9bJ3ZlcnNpb24nXS4nPC9hPicgOiBzbWRfYXRf Z1R4dCgndmVyc2lvbicpLiRza2luZm9bJ3ZlcnNpb24nXSkgOiAnJzsNCg0KCQlpZiAoJGxh eW91dD09MCkgew0KCQkJZWNobyB0cigNCgkJCQl0ZCgkdGh1bXJvdykNCgkJCQkudGQoJGF1 dGhyb3csIDEwMCkNCgkJCQkudGQoJHZlcm93KQ0KCQkJCS50ZCgoKCRza2luZm8pPyAkc2tp bmZvWydkZXNjcmlwdGlvbiddIDogJy0nKS4oKCRza2luZm8gJiYgJHNraW5mb1snaGVscCdd KSA/ICcgJy5ocmVmKCdbJy5nVHh0KCdoZWxwJykuJ10nLCAkc2tpbmZvWydoZWxwJ10pIDog JycpLCAyNTApDQoJCQkJLnRkKCRhY3Ryb3csMjYwKQ0KCQkJLCAoKCRza2luX25hbWUgPT0g JGN1cnJfc2tpbikgPyAnIGNsYXNzPSJhY3RpdmUiJyA6ICcnKQ0KCQkJKTsNCgkJfSBlbHNl IHsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsJy4oKCRza2luX25hbWUgPT0gJGN1 cnJfc2tpbikgPyAnIGFjdGl2ZScgOiAnJykuJyI+JzsNCgkJCWVjaG8gJzxkaXY+Jy4kdGh1 bXJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hdXRoIj4nLiR2ZXJv dy5zbWRfYXRfZ1R4dCgnYnknKS4kYXV0aHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzxkaXYg Y2xhc3M9InNtZF9hY3Rpb25zIj4nLiRhY3Ryb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8L2Rp dj4nOw0KCQl9DQoJfQ0KDQoJaWYgKCRsYXlvdXQ9PSIwIikgew0KCQllY2hvICc8L3RkPjwv dHI+JzsNCgkJZWNobyBlbmRUYWJsZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYgY2xh c3M9InNtZF9jbGVhciI+PC9kaXY+PC9kaXY+JzsNCgl9DQoJZWNobyAnPC9mb3JtPic7DQoJ ZWNobyBuLm5hdl9mb3JtKCRzbWRfYXRfZXZlbnQsICRwYWdlLCAkbnVtUGFnZXMsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpOw0KCWVjaG8gbi5wYWdlYnlfZm9ybSgkc21kX2F0X2V2ZW50 LCAkcGFnZWJ5KTsNCn0NCg0KZnVuY3Rpb24gc21kX2F0X2ZlZWQoJGZlZWQpIHsNCglnbG9i YWwgJGZlZWRzOw0KDQoJJGZlZWQ9cHJlZ19yZXBsYWNlKCIvPiIuIltbOnNwYWNlOl1dKyIu IjwvaSIsICI+PCIsICRmZWVkKTsgLy8gS2lsbCB3aGl0ZXNwYWNlIGluIGZlZWQNCgkkeG1s cGFyc2VyID0geG1sX3BhcnNlcl9jcmVhdGUoKTsNCgl4bWxfc2V0X2VsZW1lbnRfaGFuZGxl cigkeG1scGFyc2VyLCAic21kX2F0X2ZlZWRfc3RhcnRfdGFnIiwgInNtZF9hdF9mZWVkX2Vu ZF90YWciKTsNCgl4bWxfc2V0X2NoYXJhY3Rlcl9kYXRhX2hhbmRsZXIoJHhtbHBhcnNlciwg InNtZF9hdF9mZWVkX3RhZ19jb250ZW50cyIpOw0KCXhtbF9wYXJzZSgkeG1scGFyc2VyLCAk ZmVlZCk7DQoJeG1sX3BhcnNlcl9mcmVlKCR4bWxwYXJzZXIpOw0KDQoJcmV0dXJuICRmZWVk czsNCn0NCg0KZnVuY3Rpb24gc21kX2F0X2ZlZWRfc3RhcnRfdGFnKCRwYXJzZXIsICRuYW1l LCAkYXR0cmlicykgew0KCWdsb2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFn Ow0KCWlmICgkbmFtZSA9PSAiRU5UUlkiKSB7DQoJCSRzbWRfYXRfZmVlZGluID0gdHJ1ZTsN Cgl9DQoJaWYgKCRzbWRfYXRfZmVlZGluKSB7DQoJCSRzbWRfYXRfZmVlZHRhZyA9ICRuYW1l Ow0KCX0NCn0NCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX2VuZF90YWcoJHBhcnNlciwgJG5hbWUp IHsNCglnbG9iYWwgJHNtZF9hdF9mZWVkaW4sICRzbWRfYXRfZmVlZHRhZywgJHNtZF9hdF9m ZWVkbmFtZTsNCglpZiAoJG5hbWUgPT0gIkVOVFJZIikgew0KCQkkc21kX2F0X2ZlZWRpbiA9 IGZhbHNlOw0KCQkkc21kX2F0X2ZlZWRuYW1lID0gJyc7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBz bWRfYXRfZmVlZF90YWdfY29udGVudHMoJHBhcnNlciwgJGRhdGEpIHsNCglnbG9iYWwgJHNt ZF9hdF9mZWVkaW4sICRzbWRfYXRfZmVlZHRhZywgJHNtZF9hdF9mZWVkbmFtZSwgJGZlZWRz Ow0KCWlmICgkc21kX2F0X2ZlZWRpbikgew0KCQlpZiAoJHNtZF9hdF9mZWVkdGFnID09ICJO QU1FIikgew0KCQkJJGZlZWRzWyRkYXRhXSA9ICcnOw0KCQkJJHNtZF9hdF9mZWVkbmFtZSA9 ICRkYXRhOw0KCQl9DQoJCWlmIChpc3NldCgkZmVlZHNbJHNtZF9hdF9mZWVkbmFtZV0pKSB7 DQoJCQlpZiAoJHNtZF9hdF9mZWVkdGFnID09ICJUSVRMRSIgfHwgJHNtZF9hdF9mZWVkdGFn ID09ICJTVU1NQVJZIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIlVQREFURUQiIHx8ICRzbWRf YXRfZmVlZHRhZyA9PSAiSUQiIHx8ICRzbWRfYXRfZmVlZHRhZyA9PSAiTElOSyIpIHsNCgkJ CQkkZmVlZHNbJHNtZF9hdF9mZWVkbmFtZV1bc3RydG9sb3dlcigkc21kX2F0X2ZlZWR0YWcp XSA9ICRkYXRhOw0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIFJlbW92ZSBoYXJkIHNwYWNlcyBpbiB0aGUgdXBsb2FkX2Zvcm0gc28gT3Bl cmEgYW5kIElFIHdyYXAgdGhlIGJ1dHRvbnMNCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfZm9y bSgkZXZlbnQsICRzdGVwLCAkZGF0YSwgJGFyZ3MpIHsNCglyZXR1cm4gc3RyX3JlcGxhY2Uo JyYjMTYwOycsICcgJywgJGRhdGEpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9hdF9lZGl0KCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRf YXRfZXZlbnQsICRzbWRfYXRfc3R5bGVzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJy YXkoJ3NraW4nLCAnbmV3X3NraW4nLCAnZmlsZScpKSkpOw0KDQoJJGF0X3ByZWZzID0gc21k X2F0X2dldF9wcmVmcygpOw0KCSRsYXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRf bGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddIDogMTsNCg0KCSRlZGl0 YWJsZSA9IGFycmF5KCJzc2MiLCAiY3NzIiwgImpzIiwgInBocCIpOw0KCSRpbWFnYWJsZSA9 IGFycmF5KCJqcGciLCAianBlZyIsICJnaWYiLCAicG5nIik7DQoJJG1heF9maWxlX3NpemUg PSAyICogMTAyNCAqIDEwMjQ7DQoNCgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRz a2luKTsNCgkkZmlsZSA9IChlbXB0eSgkbmV3X3NraW4pKSA/ICRmaWxlIDogJG5ld19za2lu Ow0KCSRmaWxlcyA9IHNtZF9hdF9saXN0ZGlyKFRIRU1FLiRza2luKTsNCglzb3J0KCRmaWxl cyk7DQoNCgkvLyBTcGxpdCB0aGUgbGlzdCBpbnRvIGl0cyBkaXJlY3RvcnkgZ3JvdXBzDQoJ JGFsbGZpbGVzID0gYXJyYXkoKTsNCglmb3JlYWNoICgkZmlsZXMgYXMgJGN1cnJmaWxlKSB7 DQoJCSRmaWxlX2luZm8gPSBwYXRoaW5mbygkY3VycmZpbGUpOw0KCQkvLyBJZ25vcmUgYW55 IHJvZ3VlIFN1YnZlcnNpb24gZmlsZXMNCgkJaWYgKHN0cnBvcygkZmlsZV9pbmZvWydkaXJu YW1lJ10sICcvLnN2bicpID09PSBmYWxzZSkgew0KCQkJJGZpbGVfdHlwZSA9IChpc3NldCgk ZmlsZV9pbmZvWydleHRlbnNpb24nXSkpID8gJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10gOiAn b3RoZXInOw0KCQkJJGFsbGZpbGVzWyRmaWxlX3R5cGVdW10gPSAkY3VycmZpbGU7DQoJCX0N Cgl9DQoNCglpZiAoZ3BzKCdzbWRfYXRfZWRpdHMnKSkgew0KCQkkY29udGVudHMgPSBzdHJf cmVwbGFjZSgnXHJcbicsJw0KJyxncHMoJ3NtZF9hdF9lZGl0cycpKTsgLy8gbmV3bGluZSB3 b3JrYXJvdW5kDQoJfSBlbHNlIHsNCgkJJGNvbnRlbnRzID0gJyc7DQoJCWlmICgkZmlsZSAm JiBmaWxlX2V4aXN0cyhUSEVNRS4kc2tpbi5EUy4kZmlsZSkpIHsNCgkJCSRjb250ZW50cyA9 IGZpbGUoVEhFTUUuJHNraW4uRFMuJGZpbGUpOw0KCQkJJGNvbnRlbnRzID0gam9pbigiIiwg JGNvbnRlbnRzKTsNCgkJfQ0KCX0NCg0KCS8vIEJlZ2luIHJlbmRlcmluZyB0aGUgcGFnZQ0K CXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ2VkaXRfbGJsJyksJG1lc3NhZ2UpOw0KDQoJZWNobyAn PHN0eWxlIHR5cGU9InRleHQvY3NzIj4nOw0KCWVjaG8gJHNtZF9hdF9zdHlsZXNbJ2VkaXQn XTsNCgllY2hvICc8L3N0eWxlPic7DQoNCgkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tp bnMoKTsNCg0KCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRv IGJlIHRoZSBzYW1lIGluIHRoaXMgY2FzZQ0KCSRza2luc2VsID0gYXJyYXkoKTsNCglmb3Jl YWNoKCRza2luX2xpc3QgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkkc2tpbnNlbFskdmFs dWUxXSA9ICRza2luX2xpc3RbJGtleTFdOw0KICAgfQ0KCSRza2luQ2hhbmdlID0gJzxmb3Jt IG5hbWU9InNraW5jaGFuZ2UiIGFjdGlvbj0iaW5kZXgucGhwIj4nDQoJCS4gZUlucHV0KCRz bWRfYXRfZXZlbnQpDQoJCS4gc0lucHV0KCdzbWRfYXRfZWRpdCcpDQoJCS4gc2VsZWN0SW5w dXQoJ3NraW4nLCAkc2tpbnNlbCwgJHNraW4sIDAsIDEpDQoJCS4gJzwvZm9ybT4nOw0KDQoJ JGZpbGVMaXN0ID0gaGVkKHNtZF9hdF9nVHh0KCdza2luX2ZpbGVzJyksMikNCgkJLiAkc2tp bkNoYW5nZQ0KCQkuIHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVmdCcsICdzbWRfc2tpbl9maWxl dHlwZXMnKTsNCgkkZmlsZUxpc3QgLj0gJzxiciAvPjxhIGNsYXNzPSJuYXZsaW5rIiBocmVm PSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X25ld2ZpbGUnLmEuJ3Nr aW49Jy4kc2tpbi4nIj4nLnNtZF9hdF9nVHh0KCduZXdfZmlsZScpLic8L2E+JzsNCgkkZmls ZUxpc3QgLj0gJyA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9l dmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ICdza2luX2xpc3QnIDog J3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJJG90aGVycyA9IGFycmF5KCk7DQoNCglm b3JlYWNoICgkZWRpdGFibGUgYXMgJGZpbGV0eXBlKSB7DQoJCWlmIChpc3NldCgkYWxsZmls ZXNbJGZpbGV0eXBlXSkpIHsNCgkJCWZvcmVhY2ggKCRhbGxmaWxlc1skZmlsZXR5cGVdIGFz ICRpZHggPT4gJGN1cnJmaWxlKSB7DQoJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkkZmls ZUxpc3QgLj0gdHIodGQoaGVkKHNtZF9hdF9nVHh0KCRmaWxldHlwZSksMykpKTsNCgkJCQl9 DQoJCQkJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJCQkkYmFzZWZpbGUg PSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJCQkJJGVkaXQgPSAn PGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5h Lidza2luPScuJHNraW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUgPT0gJGp1 c3RmaWxlKSA/IHN0cm9uZygkanVzdGZpbGUpIDogJGp1c3RmaWxlKS4nPC9hPic7DQoJCQkJ JGRlbCA9ICgkYmFzZWZpbGUgPT0gJHNraW4pID8gJycgOiBkTGluaygkc21kX2F0X2V2ZW50 LCAnc21kX2F0X2RlbGV0ZScsICdmaWxlJywgJGp1c3RmaWxlLCAxLCAnc2tpbicsICRza2lu KTsNCgkJCQkkZmlsZUxpc3QgLj0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJCX0NCgkJ fSBlbHNlIHsNCgkJCS8vIFNvbWUgb3RoZXIgZmlsZSB0eXBlDQoJCQlpZiAoISRvdGhlcnMp IHsNCgkJCQlmb3JlYWNoICgkYWxsZmlsZXMgYXMgJGZ0eXBlID0+ICRmbHMpIHsNCgkJCQkJ aWYgKCFpbl9hcnJheSgkZnR5cGUsIGFycmF5X21lcmdlKCRlZGl0YWJsZSwgJGltYWdhYmxl KSkpIHsNCgkJCQkJCWZvcmVhY2ggKCRhbGxmaWxlc1skZnR5cGVdIGFzICRpZHggPT4gJGN1 cnJmaWxlKSB7DQoJCQkJCQkJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJ CQkJCQkkYmFzZWZpbGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7 DQoJCQkJCQkJJGVkaXQgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidz dGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4n Ij4nLigoJGZpbGUgPT0gJGp1c3RmaWxlKSA/IHN0cm9uZygkanVzdGZpbGUpIDogJGp1c3Rm aWxlKS4nPC9hPic7DQoJCQkJCQkJJGRlbCA9ICgkYmFzZWZpbGUgPT0gJHNraW4pID8gJycg OiBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZScsICdmaWxlJywgJGp1c3Rm aWxlLCAxLCAnc2tpbicsICRza2luKTsNCgkJCQkJCQkkb3RoZXJzW10gPSB0cih0ZCgkZWRp dCkudGQoJGRlbCkpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0K CSRmaWxlTGlzdCAuPSAoJG90aGVycykgPyB0cih0ZChoZWQoc21kX2F0X2dUeHQoJ290aGVy X2ZpbGVzJyksMykpKS4gam9pbihuLCAkb3RoZXJzKSA6ICcnOw0KCSRmaWxlTGlzdCAuPSBl bmRUYWJsZSgpOw0KDQoJLy8gTWFrZSB0aGUgbGlzdCBvZiBpbWFnZXMgZm9yIHRoaXMgc2tp bg0KCSRxcyA9IGFycmF5KA0KCQkiZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJzdGVw IiA9PiAnc21kX2F0X2RlbGV0ZV9pbWFnZScsDQoJKTsNCgkkc2VsW10gPSAnPGZvcm0gbWV0 aG9kPSJwb3N0IiBpZD0ic21kX2F0X2ltYWdlZm9ybSIgbmFtZT0ic21kX2F0X2ltYWdlZm9y bSIgYWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOw0KCSRzZWxbXSA9ICc8c2VsZWN0IGlk PSJzbWRfYXRfaW1hZ2VzIiBuYW1lPSJzbWRfYXRfaW1hZ2VzW10iIGNsYXNzPSJsaXN0IiBz aXplPSIyNCIgbXVsdGlwbGU9Im11bHRpcGxlIiBzdHlsZT0id2lkdGg6MTU0cHg7Ij4nOw0K DQoJaWYgKGRlZmluZWQoJ0dMT0JfQlJBQ0UnKSkgew0KCQkkaW1nID0gZ2xvYihUSEVNRS4k c2tpbi5EUy4neyouanBnLCouZ2lmLCoucG5nfScsIEdMT0JfQlJBQ0UpOw0KCX0gZWxzZSB7 DQoJCSRpbWcgPSBhcnJheV9tZXJnZShnbG9iKFRIRU1FLiRza2luLkRTLicqLmpwZycpLGds b2IoVEhFTUUuJHNraW4uRFMuJyouZ2lmJyksZ2xvYihUSEVNRS4kc2tpbi5EUy4nKi5wbmcn KSk7DQoJfQ0KDQoJaWYoaXNfYXJyYXkoJGltZykpIHsNCgkJZm9yZWFjaCAoJGltZyBhcyAk aW1nZmlsZSkgew0KCQkJJHNlbFtdID0gdC4nPG9wdGlvbiB2YWx1ZT0iJy4kaW1nZmlsZS4n Ij4nLmJhc2VuYW1lKCRpbWdmaWxlKS4nPC9vcHRpb24+JzsNCgkJfQ0KCX0NCgkkc2VsW10g PSAnPC9zZWxlY3Q+JzsNCgkkc2VsW10gPSBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0 X2RlbGV0ZV9pbWFnZScsICdza2luJywgJHNraW4sIDEpOw0KCSRzZWxbXSA9ICc8L2Zvcm0+ JzsNCgkkc2VsID0gam9pbignJywkc2VsKTsNCg0KCS8vIEltYWdlIHBvcnRpb24NCgkkaW1n Yml0ID0gaGVkKHNtZF9hdF9nVHh0KCdza2luX2ltYWdlcycpLCAyKSAuIHN0YXJ0VGFibGUo J2xpc3QnLCAnbGVmdCcpOw0KCSRpbWdiaXQgLj0gdHIodGQoJHNlbCkpOw0KCSRpbWdiaXQg Lj0gdHIodGQodXBsb2FkX2Zvcm0oc21kX2F0X2dUeHQoJ3VwbG9hZF9pbWFnZScpLCAnJywg J3NtZF9hdF91cGxvYWRfaW1hZ2UnLCAkc21kX2F0X2V2ZW50LCAkc2tpbiwgJG1heF9maWxl X3NpemUsICcnLCAnJyksIDE1MCkpOw0KCSRpbWdiaXQgLj0gZW5kVGFibGUoKTsNCg0KCS8v IFJlbmRlciB0aGUgcmVzdCBvZiB0aGUgcGFnZQ0KCWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcp Lg0KCXRyKA0KCQl0ZHRsKCRpbWdiaXQpLg0KCQl0ZCgNCgkJCWhlZCgoKCRza2luZm8pID8g JHNraW5mb1snZG5hbWUnXSA6ICRza2luKSwxKS4NCgkJCWZvcm0oDQoJCQkJJzxpbnB1dCB0 eXBlPSJ0ZXh0IiBuYW1lPSJuZXdfc2tpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygk ZmlsZSkuJyIgY2xhc3M9ImVkaXQiIHNpemU9IjQwIiB0YWJpbmRleD0iMiIgc3R5bGU9Im1h cmdpbi1ib3R0b206MTBweDsiIC8+Jy5icg0KCQkJCS4nPHRleHRhcmVhIGlkPSJzbWRfYXRf ZWRpdHMiIGNsYXNzPSJjb2RlIiBuYW1lPSJzbWRfYXRfZWRpdHMiIGNvbHM9Ijc2IiByb3dz PSIzMiI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjb250ZW50cykuJzwvdGV4dGFyZWE+Jy5icg0K CQkJCS5mSW5wdXQoJ3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJykNCgkJCQku ZUlucHV0KCRzbWRfYXRfZXZlbnQpLnNJbnB1dCgnc21kX2F0X3NhdmUnKQ0KCQkJCS5oSW5w dXQoJ3NraW4nLCRza2luKQ0KCQkJCS5oSW5wdXQoJ2ZpbGUnLCRmaWxlKQ0KCQkJKQ0KCQkp Lg0KCQl0ZHRsKCRmaWxlTGlzdCkNCgkpLg0KCWVuZFRhYmxlKCk7DQoNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBKdXN0IGNsZWFyIG91dCB0aGUgdmFyIHNvIHRo ZSBzYXZlIGZ1bmN0aW9uIHRyZWF0cyB0aGUgY29udGVudCBhcyBhIG5ldyBmaWxlDQpmdW5j dGlvbiBzbWRfYXRfbmV3ZmlsZSgpIHsNCgkkX1BPU1RbJ2ZpbGUnXSA9ICcnOw0KCSRtZXNz YWdlPScnOw0KCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfY2xvbmUoKSB7DQoJZ2xvYmFsICR0eHBf dXNlcjsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2lu JykpKSk7DQoJJG1zZz0nJzsNCg0KCSRuZXdfc2tpbiA9IHRyaW0oJG5ld19za2luKTsNCgkk bmV3X3NraW4gPSByYXd1cmxlbmNvZGUoJG5ld19za2luKTsNCg0KCWlmIChlbXB0eSgkbmV3 X3NraW4pKSB7DQoJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnbmFtZV9lbXB0eScpOw0KCX0NCg0K CS8vIENoZWNrIHRoZSBuZXcgbmFtZSBpc24ndCBhbHJlYWR5IGluIHVzZQ0KCSR0aGVtZXMg PSBzbWRfYXRfcmVhZF9za2lucygpOw0KDQoJaWYgKGluX2FycmF5KCRuZXdfc2tpbiwgJHRo ZW1lcykpIHsNCgkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2V4aXN0cycsIGFycmF5KCd7 bmFtZX0nID0+ICRuZXdfc2tpbikpOw0KCX0NCg0KCS8vIE5vIGVycm9ycywgc28gbWFrZSBh IG5ldyBkaXIgYW5kIGNyZWF0ZSB0aGUgUEhQIGZpbGUNCglpZiAoJG1zZz09JycpIHsNCgkJ JGNvbnRlbnQgPSAnJzsNCgkJJGRlc3RkaXIgPSBUSEVNRS4kbmV3X3NraW4uRFM7DQoJCSRy ZXMgPSBta2RpcigkZGVzdGRpcik7DQoJCSRiYXNlZCA9ICcnOw0KDQoJCWlmICgkc2tpbikg ew0KCQkJLy8gQmFzZWQgb24gYW4gZXhpc3RpbmcgdGhlbWUuIE5vIG5lZWQgZm9yIGFueSBm dW5jdGlvbnMgb3RoZXIgdGhhbiBtYW5pZmVzdCgpDQoJCQkkYmFzZWQgPSAidGhlbWU6OmJh c2VkX29uKCciLiRza2luLiInKTsiOw0KCQkJJGV4dGVuZHMgPSAkc2tpbi4nX3RoZW1lJzsN CgkJCSRzcmNzcyA9IFRIRU1FLiRza2luLkRTLid0ZXh0cGF0dGVybi5jc3MnOw0KCQkJaWYg KGZpbGVfZXhpc3RzKCRzcmNzcykgJiYgZmlsZXNpemUoJHNyY3NzKSA+IDApIHsNCgkJCQkk aW1wb3J0ID0gam9pbignJywgZmlsZSgkc3Jjc3MpKTsNCgkJCX0gZWxzZSB7DQoJCQkJJGlt cG9ydCA9ICdAaW1wb3J0IHVybCgiLi4vY2xhc3NpYy90ZXh0cGF0dGVybi5jc3MiKTsnOw0K CQkJfQ0KCQkJJGNvbnRlbnQgPSAneyc7DQoJCX0gZWxzZSB7DQoJCQkvLyBCcmFuZCBzcGFu a2luZyBuZXcgdGhlbWUuIENsb25lICdjbGFzc2ljJyBmdW5jdGlvbnMgdGhlbiBhZGQgbmV3 IG1hbmlmZXN0KCkNCgkJCSRleHRlbmRzID0gJ3RoZW1lJzsNCgkJCSRpbXBvcnQgPSAnJzsN CgkJCSRzcmMgPSB0eHBhdGguRFMuVEhFTUUuJ2NsYXNzaWMnLkRTLidjbGFzc2ljLnBocCc7 DQoJCQkkZ3JhYiA9IGZhbHNlOw0KCQkJJGZwID0gZmlsZSgkc3JjKTsNCg0KCQkJZm9yZWFj aCgkZnAgYXMgJGxpbmUpIHsNCgkJCQkkbGluZSA9IHJ0cmltKCRsaW5lKTsNCgkJCQlpZiAo c3RycG9zKCRsaW5lLCAnZnVuY3Rpb24gbWFuaWZlc3QoKScpICE9PSBmYWxzZSkgew0KCQkJ CQkkZ3JhYiA9IGZhbHNlOyAvLyB1bm5lY2Vzc2FyeT8NCgkJCQkJYnJlYWs7DQoJCQkJfQ0K CQkJCWlmICgkZ3JhYikgew0KCQkJCQkkY29udGVudCAuPSAkbGluZS5uOw0KCQkJCX0NCgkJ CQlpZiAoc3RycG9zKCRsaW5lLCAnY2xhc3MgY2xhc3NpY190aGVtZSBleHRlbmRzIHRoZW1l JykgIT09IGZhbHNlKSB7DQoJCQkJCSRncmFiID0gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCX0N Cg0KCQkvLyBtYW5pZmVzdCBmaWVsZHMNCgkJJG1hbnVzZXIgPSBnZXRfYXV0aG9yX25hbWUo JHR4cF91c2VyKTsNCgkJJG1hbnRpdGxlID0gdWN3b3JkcygkbmV3X3NraW4pOw0KDQoJCS8v IFdyaXRlIHRoZSBuZXcgUEhQIGZpbGUNCgkJJGJ1ZiA9IDw8PEVPRg0KPD9waHANCg0KaWYg KCFkZWZpbmVkKCd0eHBpbnRlcmZhY2UnKSkgZGllKCd0eHBpbnRlcmZhY2UgaXMgdW5kZWZp bmVkLicpOw0KDQp7JGJhc2VkfQ0KDQpjbGFzcyB7JG5ld19za2lufV90aGVtZSBleHRlbmRz IHskZXh0ZW5kc30NCnskY29udGVudH0NCg0KCWZ1bmN0aW9uIG1hbmlmZXN0KCkNCgl7DQoJ CXJldHVybiBhcnJheSgNCgkJCSd0aXRsZScJIAkJPT4gJ3skbWFudGl0bGV9JywNCgkJCSdh dXRob3InIAkJPT4gJ3skbWFudXNlcn0nLA0KCQkJJ2F1dGhvcl91cmknIAk9PiAnJywNCgkJ CSd2ZXJzaW9uJyAJCT0+ICcxLjAnLA0KCQkJJ2Rlc2NyaXB0aW9uJyAJPT4gJycsDQoJCQkn aGVscCcgCQkJPT4gJycsDQoJCSk7DQoJfQ0KfQ0KPz4NCkVPRjsNCg0KCQkkZnAgPSBmb3Bl bigkZGVzdGRpci4kbmV3X3NraW4uJy5waHAnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGJ1 Zik7DQoJCWZjbG9zZSgkZnApOw0KDQoJCS8vIENyZWF0ZSB0aGUgQ1NTIGZpbGUNCgkJJGZw ID0gZm9wZW4oJGRlc3RkaXIuJ3RleHRwYXR0ZXJuLmNzcycsICJ3YiIpOw0KCQlmd3JpdGUo JGZwLCAkaW1wb3J0KTsNCgkJZmNsb3NlKCRmcCk7DQoNCgkJaWYgKCRza2luKSB7DQoJCQkk bXNnID0gc21kX2F0X2dUeHQoJ3NraW5fY2xvbmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5l d19za2luKSk7Ow0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2Ny ZWF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTs7DQoJCX0NCg0KLy8JJG1z ZyA9IHNtZF9hdF9nVHh0KCdza2luX25vdF9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4g JG5ld19za2luKSk7Ow0KDQoJfQ0KDQoJc21kX2F0X2xpc3QoJG1zZyk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2NydXNoX29wdGlvbnMo JHR5cGU9J2NvbXByZXNzJykgew0KCWdsb2JhbCAkcGx1Z2luczsNCg0KCSRzbWRfY3J1c2hl cnMgPSBhcnJheSgpOw0KDQoJaWYgKGlzX2FycmF5KCRwbHVnaW5zKSAmJiBpbl9hcnJheSgn c21kX2NydW5jaGVycycsICRwbHVnaW5zKSkgew0KCQkkY3J1bmNoZXJzID0gc21kX2NydW5j aF9jYXBhYmlsaXRpZXMoJHR5cGUpOw0KCQlmb3JlYWNoIChhcnJheSgndGFyJywgJ2d6aXAn LCAnemlwJywgJ2J6aXAyJykgYXMgJGNtKSB7DQoJCQlpZiAoaW5fYXJyYXkoJGNtLCAkY3J1 bmNoZXJzKSkgew0KCQkJCSRzbWRfY3J1c2hlcnNbJGNtXSA9IHNtZF9hdF9nVHh0KCdjXycu JGNtKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXJldHVybiAkc21kX2NydXNoZXJzOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9leHBvcnQoKSB7 DQoJZ2xvYmFsICRwcmVmcywgJHNtZF9hdF9wcmVmczsNCg0KCWV4dHJhY3QoZG9TbGFzaChn cHNhKGFycmF5KCdza2luJywnY3J1c2gnKSkpKTsNCgkkbWVzc2FnZT0nJzsNCgljaGRpcihU SEVNRSk7DQoJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7DQoJJHJlcHMg PSBhcnJheSgNCgkJJ3t0aGVtZX0nID0+ICRza2luLA0KCQkne3ZlcnNpb259JyA9PiAkc2tp bmZvWyd2ZXJzaW9uJ10sDQoJKTsNCgkkb3V0ID0gc3RydHIoZ2V0X3ByZWYoJ3NtZF9hdF9m aWxlbmFtZV9mb3JtYXQnLCAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfZmlsZW5hbWVfZm9y bWF0J10pLCAkcmVwcyk7DQoNCgkvLyBDaGVjayB0aGUgcGFzc2VkIGNvbXByZXNzaW9uIGZv cm1hdCBpcyB2YWxpZA0KCSRjcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCdjb21w cmVzcycpOw0KCWlmICgkY3J1c2g9PScnIHx8ICRjcnVzaD09J3VuZGVmaW5lZCcgfHwgIWFy cmF5X2tleV9leGlzdHMoJGNydXNoLCAkY3J1c2hlcnMpKSB7DQoJCSRtc2cgPSBhcnJheShz bWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfY29tcHJlc3Npb250eXBlJywgYXJyYXkoJ3tjcnVz aH0nID0+ICRjcnVzaCkpLCBFX1dBUk5JTkcpOw0KCQlzbWRfYXRfbGlzdCgkbWVzc2FnZSk7 DQoJCXJldHVybjsNCgl9DQoNCglzd2l0Y2goJGNydXNoKSB7DQoJCWNhc2UgJ3ppcCc6DQoJ CQkkemlwID0gbmV3IHNtZF9jcnVuY2hfemlwX2ZpbGUoJG91dC4nLnppcCcpOw0KCQkJYnJl YWs7DQoJCWNhc2UgJ2J6aXAyJzoNCgkJCSR6aXAgPSBuZXcgc21kX2NydW5jaF9iemlwX2Zp bGUoJG91dC4nLnRiejInKTsNCgkJCWJyZWFrOw0KCQljYXNlICd0YXInOg0KCQkJJHppcCA9 IG5ldyBzbWRfY3J1bmNoX3Rhcl9maWxlKCRvdXQuJy50YXInKTsNCgkJCWJyZWFrOw0KCQlj YXNlICdnemlwJzoNCgkJCSR6aXAgPSBuZXcgc21kX2NydW5jaF9nemlwX2ZpbGUoJG91dC4n LnRneicpOw0KIAkJCWJyZWFrOw0KCX0NCg0KCSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdi YXNlZGlyJyA9PiB0eHBhdGguRFMuVEhFTUUsICdvdmVyd3JpdGUnID0+IDEsICdpbm1lbW9y eScgPT4gMSkpOw0KCSR6aXAtPmFkZF9maWxlcygkc2tpbi5EUy4nKi4qJyk7DQoJJHppcC0+ ZXhjbHVkZV9maWxlcygkc2tpbi5EUy4nKi5zdm4qJyk7DQoJJHppcC0+Y3JlYXRlX2FyY2hp dmUoKTsNCgkkemlwLT5kb3dubG9hZF9maWxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2ltcG9ydCgpIHsNCglnbG9iYWwgJHByZWZz Ow0KDQoJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCgkkZmlsZSA9IGdl dF91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSwgdHhwYXRo LkRTLlRIRU1FLmJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkpOw0K CSRiYXNlZGlyID0gdHhwYXRoLkRTLlRIRU1FOw0KCSR1bmNydXNoZXJzID0gc21kX2F0X2Ny dXNoX29wdGlvbnMoJ2RlY29tcHJlc3MnKTsNCgkkbWVzc2FnZT0nJzsNCgkkaW5mbyA9IGV4 cGxvZGUgKCcuJywkbmFtZSk7DQoJJGxhc3RwYXJ0ID0gY291bnQoJGluZm8pLTE7DQoJJGV4 dCA9ICRpbmZvWyRsYXN0cGFydF07DQoNCglpZiAoJG5hbWUgJiYgJGZpbGUpIHsNCgkJaWYg KCRleHQgPT0gJ3ppcCcgJiYgYXJyYXlfa2V5X2V4aXN0cygnemlwJywgJHVuY3J1c2hlcnMp KSB7DQoJCQkkemlwID0gbmV3IHNtZF9jcnVuY2hfZFVuemlwMigkZmlsZSk7DQovLwkJCSR6 aXAtPmRlYnVnID0gdHJ1ZTsNCgkJCSR6aXAtPmdldExpc3QoKTsNCgkJCSR2YWxpZEFyY2hp dmUgPSBzbWRfYXRfY2hlY2tfYXJjaGl2ZSgkemlwLT5jb21wcmVzc2VkTGlzdCwgJGV4dCk7 DQoJCQlpZiAoJHZhbGlkQXJjaGl2ZSkgew0KCQkJCSR6aXAtPnVuemlwQWxsKCRiYXNlZGly KTsNCgkJCQkkemlwLT5jbG9zZSgpOw0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2lt cG9ydF9vaycpOw0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF9hdF9n VHh0KCdpbXBvcnRfZmFpbGVkJyksIEVfV0FSTklORyk7DQoJCQl9DQoJCX0gZWxzZSBpZiAo JGV4dCA9PSAndGd6JyAmJiBhcnJheV9rZXlfZXhpc3RzKCdnemlwJywgJHVuY3J1c2hlcnMp KSB7DQoJCQkkemlwID0gbmV3IHNtZF9jcnVuY2hfZ3ppcF9maWxlKGJhc2VuYW1lKCRmaWxl KSk7DQoJCQkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIs ICdvdmVyd3JpdGUnID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJCSRt ZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQg PT0gJ3RiejInICYmIGFycmF5X2tleV9leGlzdHMoJ2J6aXAyJywgJHVuY3J1c2hlcnMpKSB7 DQoJCQkkemlwID0gbmV3IHNtZF9jcnVuY2hfYnppcF9maWxlKGJhc2VuYW1lKCRmaWxlKSk7 DQoJCQkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIsICdv dmVyd3JpdGUnID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQgPT0g J3RhcicpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2NydW5jaF90YXJfZmlsZShiYXNlbmFtZSgk ZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNl ZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5leHRyYWN0X2ZpbGVzKCk7DQoJ CQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJfSBlbHNlIHsNCgkJ CSRtZXNzYWdlID0gYXJyYXkoc21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVkX2NvbXByZXNzaW9u dHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAkZXh0KSksIEVfV0FSTklORyk7DQoJCX0NCg0K CQkvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlDQoJCXVubGluaygkZmlsZSk7DQoJfSBl bHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZW1wdHlfaW5mbycpOw0KCX0NCg0K CXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCn0NCg0KLy8gQ2hlY2sgdGhlIGRpcmVjdG9yeSBz dHJ1Y3R1cmUgb2YgdGhlIGFyY2hpdmUgZm9yIHZhcmlvdXMgaXRlbXMvYXR0cmlidXRlcy4N Ci8vIEVhY2ggdGltZSBvbmUgb2YgdGhlIGNvbmRpdGlvbnMgaXMgbWV0LCB0aGUgdmNudCBp cyBpbmNyZW1lbWVudGVkLg0KLy8gT25jZSB0aGUgd2hvbGUgYXJjaGl2ZSBoYXMgYmVlbiBy ZWFkLCBpZiB0aGUgdmNudCBtYXRjaGVzIHRoZSBleHBlY3RlZENvdW50cyBmb3INCi8vIHRo YXQgdHlwZSwgdGhlIGFyY2hpdmUgaXMgdmFsaWQuDQpmdW5jdGlvbiBzbWRfYXRfY2hlY2tf YXJjaGl2ZSgkc3RydWN0LCAkdHlwZT0nemlwJykgew0KCSRleHBlY3RlZENvdW50cyA9IGFy cmF5KCd6aXAnID0+IDEsICd0Z3onID0+IDAsICd0YnoyJyA9PiAwLCAndGFyJyA9PiAwKTsN Cglzd2l0Y2ggKCR0eXBlKSB7DQoJCWNhc2UgInppcCI6DQoJCQkkdmNudCA9IDA7DQoJCQlm b3JlYWNoICgkc3RydWN0IGFzICRlbnRyeSA9PiAkaW5mbykgew0KCQkJCSRwYXJ0cyA9IHBh dGhpbmZvKCRpbmZvWydmaWxlX25hbWUnXSk7DQoJCQkJaWYgKGlzc2V0KCRwYXJ0c1snZXh0 ZW5zaW9uJ10pICYmICRwYXJ0c1snZXh0ZW5zaW9uJ10gPT0gJ3BocCcpIHsNCgkJCQkJJGRp cmJpdHMgPSBleHBsb2RlKERTLCAkcGFydHNbJ2Rpcm5hbWUnXSk7DQoJCQkJCSRudW1kaXJz ID0gY291bnQoJGRpcmJpdHMpOw0KCQkJCQlpZiAoKCRwYXJ0c1snZmlsZW5hbWUnXSA9PSAk ZGlyYml0c1skbnVtZGlycy0xXSkgJiYgJG51bWRpcnM9PTEpIHsNCgkJCQkJCSR2Y250Kys7 DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlicmVhazsNCgl9DQoNCglyZXR1cm4gKCRleHBl Y3RlZENvdW50c1skdHlwZV0gPT0gJHZjbnQpID8gdHJ1ZSA6IGZhbHNlOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfaW1hZ2Uo KSB7DQoJZ2xvYmFsICRmaWxlX21heF91cGxvYWRfc2l6ZTsNCg0KCWV4dHJhY3QoZG9TbGFz aChncHNhKGFycmF5KCdpZCcpKSkpOw0KCSRfUE9TVFsnc2tpbiddID0gJHNraW4gPSAkaWQ7 DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddOw0KCSRmaWxlID0gZ2V0 X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKTsNCgkkbWVz c2FnZT0nJzsNCg0KCWlmICgkZmlsZSA9PT0gZmFsc2UpIHsNCgkJJG1lc3NhZ2UgPSBnVHh0 KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuIiAkbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1z ZygkX0ZJTEVTWyd0aGVmaWxlJ11bJ2Vycm9yJ10pOw0KCQlzbWRfYXRfZWRpdCgkbWVzc2Fn ZSk7DQoJCWV4aXQoKTsNCgl9DQoNCgkkc2l6ZSA9IGZpbGVzaXplKCRmaWxlKTsNCglpZiAo JGZpbGVfbWF4X3VwbG9hZF9zaXplIDwgJHNpemUpIHsNCgkJdW5saW5rKCRmaWxlKTsNCgkJ JG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuIiAkbmFtZSAtICIudXBs b2FkX2dldF9lcnJvcm1zZyhVUExPQURfRVJSX0ZPUk1fU0laRSk7DQoJCXNtZF9hdF9lZGl0 KCRtZXNzYWdlKTsNCgkJZXhpdCgpOw0KCX0NCg0KCSRza2luZm8gPSBzbWRfYXRfcmVhZF9z a2luZm8oJHNraW4pOw0KCSRuZXdfc2tpbiA9ICRza2luZm9bJ25hbWUnXTsNCgkkbmV3cGF0 aCA9ICRza2luZm9bJ3BhdGgnXTsNCg0KCWlmICgkbmV3X3NraW4gJiYgJGZpbGUpIHsNCgkJ aWYoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmlsZSwgJG5ld3BhdGguJG5hbWUpKSB7DQoJCQkk bWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1cGxvYWRfc3VjY2VzcycpOw0KCQl9IGVsc2Ugew0K CQkJdW5saW5rKCRmaWxlKTsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9m YWlsZWQnKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2Vt cHR5X2luZm8nKTsNCgl9DQoNCglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2RlbGV0ZV9pbWFnZSgp IHsNCglnbG9iYWwgJHNtZF9jb3JlX3RoZW1lczsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNh KGFycmF5KCdza2luJykpKSk7DQoJJGZpbGVfbGlzdCA9IGdwcygnc21kX2F0X2ltYWdlcycp Ow0KCSRtZXNzYWdlPScnOw0KDQoJaWYgKGVtcHR5KCRmaWxlX2xpc3QpKSB7DQoJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9IGVsc2Ugew0KCQlpZiAoaW5f YXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9h dF9nVHh0KCdjb3JlX3RoZW1lX2ZpbGUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0K CQl9IGVsc2Ugew0KCQkJZm9yZWFjaCAoJGZpbGVfbGlzdCBhcyAkaW1hZ2UpIHsNCgkJCQkk cGF0aCA9IHR4cGF0aC5EUy4kaW1hZ2U7DQoJCQkJdW5saW5rKCRwYXRoKTsNCgkJCX0NCgkJ fQ0KCX0NCg0KCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZGVsZXRlKCkgew0KCWdsb2JhbCAkc21k X2NvcmVfdGhlbWVzLCAkdGhlbWUsICRzbWRfYXRfcHJpdnMsICRzbWRfYXRfZXZlbnQ7DQoN CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICdmaWxlJykpKSk7DQoJJG1l c3NhZ2U9Jyc7DQoNCglpZiAoJGZpbGUpIHsNCgkJLy8gRWRpdGluZyBhIHNraW4sIHRodXMg ZGVsZXRpbmcgYSBzaW5nbGUgZmlsZQ0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29y ZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lX2Zp bGUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQkJc21kX2F0X2VkaXQoJG1lc3Nh Z2UpOw0KCQl9IGVsc2Ugew0KCQkJJGRlbCA9IHVubGluayhUSEVNRS4kc2tpbi5EUy4kZmls ZSk7DQoJCQlpZiAoJGRlbCkgew0KCQkJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV9kZWxldGVk JywgYXJyYXkoJ3tuYW1lfScgPT4gJGZpbGUpKTsNCgkJCQkkX1BPU1RbJ2ZpbGUnXSA9ICcn OyAvLyBDbGVhciB0aGUgdmFyaWFibGUgc28gdGhlIGZpbGVuYW1lIGRvZXNuJ3QgYXBwZWFy IG9uIHRoZSBlZGl0IHBhZ2UNCgkJCX0gZWxzZSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgnZmlsZV9ub3RfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmaWxlKSk7DQoJ CQl9DQoJCX0NCgkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KCX0gZWxzZSB7DQoJCWlmIChp bl9hcnJheSgkc2tpbiwgJHNtZF9jb3JlX3RoZW1lcykpIHsNCgkJCSRtZXNzYWdlID0gc21k X2F0X2dUeHQoJ2NvcmVfdGhlbWUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQkJ c21kX2F0X2xpc3QoJG1lc3NhZ2UpOw0KCQl9IGVsc2Ugew0KCQkJLy8gVmlld2luZyB0aGUg c2tpbiBsaXN0LCB0aHVzIGRlbGV0aW5nIHRoZSB3aG9sZSBza2luDQoJCQkkc2tpbmRpciA9 IFRIRU1FLiRza2luOw0KCQkJaWYgKCFzbWRfcm1kaXJfcmVjdXJzaXZlKCRza2luZGlyKSkg ew0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2RlbGV0ZV9mYWlsZWQnKTsNCgkJCX0g ZWxzZSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnc2tpbl9kZWxldGVkJywgYXJy YXkoJ3tuYW1lfScgPT4gJHNraW4pKTsNCgkJCX0NCg0KCQkJLy8gSGFuZGxlIHNpdHVhdGlv bnMgaWYgY3VycmVudCBza2luIGhhcyBiZWVuIGRlbGV0ZWQNCgkJCWlmICghZmlsZV9leGlz dHModHhwYXRoLkRTLlRIRU1FLiRza2luKSkgew0KCQkJCSRhdF9wcmVmcyA9IHNtZF9hdF9n ZXRfcHJlZnMoKTsNCg0KCQkJCS8vIFJlc2V0IHRoZSBnbG9iYWwgc2tpbiBpbiBjYXNlIGl0 J3MgYmVlbiBkZWxldGVkDQoJCQkJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X2dsb2JhbF9za2luJ10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10g OiAnJzsNCgkJCQkkZ2JsX3NraW4gPSAoJGdibF9za2luICE9ICcnICYmIGZpbGVfZXhpc3Rz KHR4cGF0aC5EUy5USEVNRS4kZ2JsX3NraW4pKSA/ICRnYmxfc2tpbiA6ICdjbGFzc2ljJzsN CgkJCQlzZXRfcHJlZignc21kX2F0X2dsb2JhbF9za2luJywgJGdibF9za2luLCAkc21kX2F0 X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQlzZXRfcHJlZigndGhl bWVfbmFtZScsICRnYmxfc2tpbik7DQoNCgkJCQkkc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tp bicpOw0KCQkJCWlmICghZmlsZV9leGlzdHModHhwYXRoLkRTLlRIRU1FLiRza2luKSkgew0K CQkJCQkkc2tpbiA9ICRnYmxfc2tpbjsNCgkJCQl9DQoJCQkJc2V0X3ByZWYoJ3NtZF9za2lu JywgJHNraW4sICdzbWRfYXQnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVG X1BSSVZBVEUpOw0KCQkJfQ0KCQkJJF9HRVRbJ3NraW4nXSA9ICRza2luOw0KCQkJJF9HRVRb J25leHRzdGVwJ10gPSAnc21kX2F0X2xpc3QnOw0KCQkJc21kX2F0X3N3aXRjaCgkbWVzc2Fn ZSk7DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX2F0X3NhdmUoKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4n LCduZXdfc2tpbicsJ2ZpbGUnLCdzbWRfYXRfZWRpdHMnKSkpKTsNCg0KCSRlZGl0YWJsZSA9 IGFycmF5KCJzc2MiLCAiY3NzIiwgImpzIiwgInBocCIpOw0KCSRtZXNzYWdlID0gJGV4dHJh TXNnID0gJyc7DQoJJGZpbGUgPSB0cmltKCRmaWxlKTsNCgkkbmV3X3NraW4gPSB0cmltKCRu ZXdfc2tpbik7DQoJJG1zZ2xldiA9IDA7DQoNCgkvLyBOZXcgZmlsZQ0KCWlmICghJGZpbGUg JiYgJG5ld19za2luKSB7DQoJCSRmaWxlID0gJG5ld19za2luOw0KCQkkZXh0ID0gYXJyYXlf cG9wKGV4cGxvZGUgKCcuJywkZmlsZSkpOw0KCQlpZiAoc3RydG9sb3dlcigkZmlsZSkgIT0g J3JlYWRtZScgJiYgKCRleHQgPT0gJycgfHwgIWluX2FycmF5KCRleHQsICRlZGl0YWJsZSkp KSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9maWxldHlwZScp LnNtZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9mdWRnZScpOw0KCQkJJG1zZ2xldiA9IEVfV0FS TklORzsNCgkJCSRfUE9TVFsnZmlsZSddID0gJGZpbGU7DQoJCX0NCgl9DQoNCglpZiAoJG1l c3NhZ2U9PScnKSB7DQoJCSRmbmFtZSA9IHNhbml0aXplRm9yRmlsZSgkZmlsZSk7DQoJCSRu ZXdfc2tpbiA9IHJhd3VybGVuY29kZSgkbmV3X3NraW4pOw0KCQkkX1BPU1RbJ25ld19za2lu J10gPSAkbmV3X3NraW47DQoNCgkJJHNtZF9hdF9lZGl0cyA9IGRvU3RyaXAoc3RyX3JlcGxh Y2UoJ1xyXG4nLCcNCicsJHNtZF9hdF9lZGl0cykpOyAvLyBuZXdsaW5lIHdvcmthcm91bmQN Cg0KCQlpZiAoJGZuYW1lKSB7DQoJCQkkZmlsZXBhdGggPSBUSEVNRS4kc2tpbi5EUzsNCgkJ CWlmICghZmlsZV9leGlzdHMoJGZpbGVwYXRoLiRmbmFtZSkpIHsNCgkJCQkkcmV0ID0gdG91 Y2goJGZpbGVwYXRoLiRmbmFtZSk7DQoJCQkJaWYgKCRyZXQgPT09IGZhbHNlKSB7DQoJCQkJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ21rZGlyX2ZhaWxlZCcsIGFycmF5KCd7bmFtZX0n ID0+ICRmbmFtZSkpOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gQXNzdW1pbmcgbm8gZXJyb3Jz IHNvIGZhci4uLg0KCQkJaWYgKCRtZXNzYWdlID09ICcnKSB7DQoJCQkJJGZoID0gZm9wZW4o JGZpbGVwYXRoLiRmbmFtZSwgJ3diJyk7DQoJCQkJZndyaXRlKCRmaCwgJHNtZF9hdF9lZGl0 cyk7DQoJCQkJZmNsb3NlKCRmaCk7DQoNCgkJCQlpZiAoJGZuYW1lICE9ICRuZXdfc2tpbikg ew0KCQkJCQkvLyBSZW5hbWUgdGhlIGZpbGUNCgkJCQkJJHJlcyA9IHJlbmFtZSgkZmlsZXBh dGguJGZuYW1lLCAkZmlsZXBhdGguJG5ld19za2luKTsNCg0KCQkJCQkvLyBJZiB0aGUgcmVu YW1lZCBmaWxlIGlzIHRoZSB0aGVtZSdzIFBIUCBmaWxlLCB0cnkgdG8gcmVuYW1lIHRoZSBt YWluIHNraW4gZGlyIHRvbw0KCQkJCQkkZmlsZWJpdHMgPSBleHBsb2RlKCcuJywgJG5ld19z a2luKTsNCgkJCQkJJG9sZGZpbGViaXRzID0gZXhwbG9kZSgnLicsICRmbmFtZSk7DQoJCQkJ CSRleHQgPSBhcnJheV9wb3AoJGZpbGViaXRzKTsNCgkJCQkJaWYgKCRyZXMgJiYgJGV4dCA9 PSAncGhwJyAmJiAoJG9sZGZpbGViaXRzWzBdID09ICRza2luKSkgew0KCQkJCQkJJG5ld19m aWxlcGF0aCA9IFRIRU1FLiRmaWxlYml0c1swXS5EUzsNCgkJCQkJCSRyZW4gPSByZW5hbWUo JGZpbGVwYXRoLCAkbmV3X2ZpbGVwYXRoKTsNCgkJCQkJCSRmaWxlcGF0aCA9ICgkcmVuKSA/ ICRuZXdfZmlsZXBhdGggOiAkZmlsZXBhdGg7DQoJCQkJCQkkX1BPU1RbJ3NraW4nXSA9ICRm aWxlYml0c1swXTsNCgkJCQkJfQ0KCQkJCQkkZXh0cmFNc2cgPSAoJHJlcykgPyBzbWRfYXRf Z1R4dCgncmVuYW1lZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpIDogc21kX2F0 X2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsNCgkJCQl9DQoNCgkJCQkvLyBQcm9jZXNzIGFueSBj c3MgcmVwbGFjZW1lbnRzDQoJCQkJJGZpbGViaXRzID0gZXhwbG9kZSAoJy4nLCgoJGZuYW1l PT0kbmV3X3NraW4pPyAkZm5hbWUgOiAkbmV3X3NraW4pKTsNCgkJCQkkY3NzZmlsZSA9ICRm aWxlYml0c1swXTsNCgkJCQkkZXh0ID0gYXJyYXlfcG9wKCRmaWxlYml0cyk7DQoJCQkJaWYg KCRleHQgPT0gJ3NzYycpIHsNCgkJCQkJJHJlcGxhY2VtZW50cyA9IGFycmF5KCk7DQoJCQkJ CSRudW1fcmVwMSA9IHByZWdfbWF0Y2hfYWxsKCcvKFxAW0EtWmEtejAtOV9dKyk6XHMqKC4q KTsvJywgJHNtZF9hdF9lZGl0cywgJG1hdGNoZXMxKTsNCgkJCQkJJG51bV9yZXAyID0gcHJl Z19tYXRjaF9hbGwoJy8oXEBbQS1aYS16MC05X10rKTpccypceyguKj8pXH0vcycsICRzbWRf YXRfZWRpdHMsICRtYXRjaGVzMik7DQoNCgkJCQkJLy8gU2ltcGxlIHJlcGxhY2VtZW50cw0K CQkJCQlmb3JlYWNoKCRtYXRjaGVzMSBhcyAkaWR4ID0+ICRyZXBhcnIpIHsNCgkJCQkJCWlm ICgkaWR4ID09IDApIHsNCgkJCQkJCQkvLyBSZW1vdmUgdGhlIHZhciBkZWZpbml0aW9ucw0K CQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJHJlcCkgew0KCQkJCQkJCQkkc21kX2F0X2Vk aXRzID0gc3RyX3JlcGxhY2UoJHJlcCwgJycsJHNtZF9hdF9lZGl0cyk7DQoJCQkJCQkJfQ0K CQkJCQkJfQ0KCQkJCQkJaWYgKCRpZHggPT0gMSkgew0KCQkJCQkJCWZvcmVhY2ggKCRyZXBh cnIgYXMgJGpkeCA9PiAkcmVwKSB7DQoJCQkJCQkJCSRyZXBsYWNlbWVudHNbJHJlcF0gPSAk bWF0Y2hlczFbMl1bJGpkeF07DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJ Ly8gTXVsdGktbGluZSByZXBsYWNlbWVudHMNCgkJCQkJZm9yZWFjaCgkbWF0Y2hlczIgYXMg JGlkeCA9PiAkcmVwYXJyKSB7DQoJCQkJCQlpZiAoJGlkeCA9PSAwKSB7DQoJCQkJCQkJLy8g UmVtb3ZlIHRoZSB2YXIgZGVmaW5pdGlvbnMNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFz ICRyZXApIHsNCgkJCQkJCQkJJHNtZF9hdF9lZGl0cyA9IHN0cl9yZXBsYWNlKCRyZXAsICcn LCRzbWRfYXRfZWRpdHMpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmICgkaWR4ID09 IDEpIHsNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRqZHggPT4gJHJlcCkgew0KCQkJ CQkJCQkkcmVwbGFjZW1lbnRzWyRyZXAuJzsnXSA9IHRyaW0oJG1hdGNoZXMyWzJdWyRqZHhd KTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBHZW5lcmF0ZSBhbmQg d3JpdGUgdGhlIG5ldyBjc3MgZmlsZQ0KCQkJCQkkc21kX2F0X2VkaXRzID0gdHJpbShzdHJ0 cigkc21kX2F0X2VkaXRzLCAkcmVwbGFjZW1lbnRzKSk7DQoJCQkJCSRmaCA9IGZvcGVuKCRm aWxlcGF0aC4kY3NzZmlsZS4nLmNzcycsICd3YicpOw0KCQkJCQlmd3JpdGUoJGZoLCAkc21k X2F0X2VkaXRzKTsNCgkJCQkJZmNsb3NlKCRmaCk7DQoJCQkJCWlmICgkZm5hbWUgIT0gJG5l d19za2luKSB7DQoJCQkJCQkkb2xkZm5hbWUgPSBleHBsb2RlICgnLicsICRmbmFtZSk7DQoJ CQkJCQkkb2xkZm5hbWUgPSAkb2xkZm5hbWVbMF0uJy5jc3MnOw0KCQkJCQkJJHJlcyA9IEB1 bmxpbmsoJGZpbGVwYXRoLiRvbGRmbmFtZSk7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkkbWVz c2FnZSA9IHNtZF9hdF9nVHh0KCdmaWxlX3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZu YW1lKSkuYnIuJGV4dHJhTXNnOw0KCQkJfQ0KCQl9DQoJfQ0KCXNtZF9hdF9lZGl0KGFycmF5 KCRtZXNzYWdlLCAkbXNnbGV2KSk7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBQUkVGUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBz bWRfYXRfZ2V0X3ByZWZzKCkgew0KCWdsb2JhbCAkc21kX2F0X3ByZWZzOw0KCSRwcmVma2V5 cyA9IGRvUXVvdGUoaW1wbG9kZSgiJywnIixhcnJheV9rZXlzKCRzbWRfYXRfcHJlZnNbMF0p KSk7DQoJJHJzID0gc2FmZV9yb3dzKCduYW1lLHZhbCcsJ3R4cF9wcmVmcycsJ25hbWUgaW4g KCcuJHByZWZrZXlzLicpJyk7DQoJJGF0X3ByZWZzID0gYXJyYXkoKTsNCglmb3JlYWNoICgk cnMgYXMgJHByZWZhcnIpIHsNCgkJJGF0X3ByZWZzWyRwcmVmYXJyWyduYW1lJ11dID0gJHBy ZWZhcnJbJ3ZhbCddOw0KCX0NCglyZXR1cm4gJGF0X3ByZWZzOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9vcHRpb25zKCRldmVudCwgJHN0 ZXAsICRtZXNzYWdlPScnKSB7DQoJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfc2V0dXAoJG1lc3Nh Z2U9JycpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X3ByZWZzLCAkc21kX2F0X2V2ZW50 LCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfc3R5bGVzOw0KDQoJJG51bVJl cVByZWZzID0gY291bnQoJHNtZF9hdF9wcmVmc1swXSk7DQoJJGF0X3ByZWZzID0gc21kX2F0 X2dldF9wcmVmcygpOw0KCSRudW1Sb3dzID0gY291bnQoJGF0X3ByZWZzKTsNCg0KCXBhZ2V0 b3AoZ1R4dCgncHJlZnMnKSwkbWVzc2FnZSk7DQoNCgkvLyBUT0RPOiB1c2UgZ2V0X2dyb3Vw cygpOw0KCSRsZXZlbHMgPSBhcnJheSgNCi8vCQkxID0+IGdUeHQoJ3B1Ymxpc2hlcicpLA0K CQkyID0+IGdUeHQoJ21hbmFnaW5nX2VkaXRvcicpLA0KCQkzID0+IGdUeHQoJ2NvcHlfZWRp dG9yJyksDQoJCTQgPT4gZ1R4dCgnc3RhZmZfd3JpdGVyJyksDQoJCTUgPT4gZ1R4dCgnZnJl ZWxhbmNlcicpLA0KCQk2ID0+IGdUeHQoJ2Rlc2lnbmVyJyksDQoJKTsNCgkkbnVtTGV2cyA9 IGNvdW50KCRsZXZlbHMpOw0KDQoJLy8gU3BsaXQgdGhlIHVzZXIgc2tpbiBsaXN0DQoJJHVz a2lucyA9IGFycmF5KCk7DQoJaWYgKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlz dCddKSkgew0KCQkkdXNraW5zID0gZXhwbG9kZSgnLCcsICRhdF9wcmVmc1snc21kX2F0X3Vz ZXJfbGlzdCddKTsNCgl9DQoNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0 X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoJJGNsckJ0 biA9ICcgWzxzcGFuIGlkPSJzbWRfY2xyIiBjbGFzcz0ic21kX2Zha2VidG4iPicuc21kX2F0 X2dUeHQoJ2NsZWFyJykuJzwvc3Bhbj5dJzsNCgkkYnRuU2V0ID0gZklucHV0KCdzdWJtaXQn LCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldCcpLCAncHVibGlzaCcpOw0KCSRidG5TYXZl ID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcp Ow0KCSRidG5JbnN0YWxsID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9 Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX2luc3RhbGwiIHN0eWxl PSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdp bnN0YWxsJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOw0KCSRidG5SZW1vdmUgPSAnPGZvcm0g bWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3Rl cD1zbWRfYXRfcHJlZnNfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0 KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnZGVsZXRlJyksICdzbWFsbGVyYm94JykuJzwv Zm9ybT4nOw0KCSRidG5MaXN0ID0gJyA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50 PScuJHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ICdz a2luX2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJJGJ0blN0eWxlID0g JyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcmFkQnRucyA9IGFycmF5KA0K CQlzbWRfYXRfZ1R4dCgncGVyX3NpdGUnKSwNCgkJc21kX2F0X2dUeHQoJ3Blcl9ncm91cCcp LA0KCQlzbWRfYXRfZ1R4dCgncGVyX3VzZXInKSwNCgkpOw0KDQoJZWNobyBzdGFydFRhYmxl KCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykgew0KCQkvLyBQcmVm cyBhbGwgaW5zdGFsbGVkDQoJCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygpOw0K DQoJCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRvIGJlIHRo ZSBzYW1lIGluIHRoaXMgY2FzZQ0KCQkkc2tpbnNlbCA9IGFycmF5KCk7DQoJCWZvcmVhY2go JHNraW5fbGlzdCBhcyAka2V5MSA9PiAkdmFsdWUxKSB7DQoJCQlpZiAoc21kX2F0X2V4aXN0 cygkdmFsdWUxKSkgew0KCQkJCSRza2luc2VsWyR2YWx1ZTFdID0gJHNraW5fbGlzdFska2V5 MV07DQoJCQl9DQoJCX0NCgkJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0 X2dsb2JhbF9za2luJ10pICYmICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gIT0g JycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6ICR0aGVtZS0+bmFtZTsN CgkJJGNydXNoZXJzID0gc21kX2F0X2NydXNoX29wdGlvbnMoJ2NvbXByZXNzJyk7DQoJCWVj aG8gdHIodGRhKHN0cm9uZyhzbWRfYXRfZ1R4dCgncHJlZnNfdGl0bGUnKSksICcgY29sc3Bh bj0iMiInKSAuIHRkYSgkYnRuUmVtb3ZlLiRidG5MaXN0LCAkYnRuU3R5bGUpICk7DQoJCWVj aG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50 LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX3VwZGF0ZSIgb25zdWJtaXQ9InJldHVybiBzbWRf cHJlc3ViKCk7Ij4nOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnY2FzZV9zb3J0Jykp LnRkYSh5ZXNub1JhZGlvKCdzbWRfYXRfY2FzZV9zb3J0JywgJGF0X3ByZWZzWydzbWRfYXRf Y2FzZV9zb3J0J10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfY2FzZV9zb3J0IicpKTsN CgkJaWYgKCRjcnVzaGVycykgew0KCQkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2NydXNo X3R5cGUnKSkudGRhKHJhZGlvU2V0KCRjcnVzaGVycywgJ3NtZF9hdF9jcnVzaCcsICRhdF9w cmVmc1snc21kX2F0X2NydXNoJ10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfY3J1c2gi JykpOw0KCQl9DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdsYXlvdXQnKSkudGRhKHJh ZGlvU2V0KGFycmF5KHNtZF9hdF9nVHh0KCdsYXlvdXRfbGlzdCcpLCBzbWRfYXRfZ1R4dCgn bGF5b3V0X2dyaWQnKSksICdzbWRfYXRfbGF5b3V0JywgJGF0X3ByZWZzWydzbWRfYXRfbGF5 b3V0J10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfbGF5b3V0IicpKTsNCgkJZWNobyB0 cih0ZGEoc21kX2F0X2dUeHQoJ3RodW1ic2l6ZScpKS50ZGEoZklucHV0KCd0ZXh0JywgJ3Nt ZF9hdF90dycsICRhdF9wcmVmc1snc21kX2F0X3R3J10sJycsJycsJycsNCkuc21kX2F0X2dU eHQoJ3RpbWVzJykuZklucHV0KCd0ZXh0JywgJ3NtZF9hdF90aCcsICRhdF9wcmVmc1snc21k X2F0X3RoJ10sJycsJycsJycsNCkpKTsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2Zp 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 LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfY2hhbmdlX3BhZ2VieSgpIHsNCglz ZXRjb29raWUoJ3NtZF9hdF9wYWdlYnknLCBncHMoJ3F0eScpKTsNCglzbWRfYXRfbGlzdCgn Jyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0 X3N3aXRjaCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkc21kX2F0X3ByaXZzOw0KDQoJZXh0 cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCAnZXZlbnQnLCAnbmV4dHN0ZXAnKSkp KTsNCgkkdXJsID0gIj9ldmVudD0iLiRldmVudC4iJnN0ZXA9Ii4kbmV4dHN0ZXA7DQoNCglp ZiAoJHNraW4gJiYgc21kX2F0X2V4aXN0cygkc2tpbikpIHsNCgkJc2V0X3ByZWYoJ3NtZF9z a2luJywgJHNraW4sICRldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJF Rl9QUklWQVRFKTsNCgkJJHVybCAuPSAnJm1lc3NhZ2U9JyAuICgoJG1lc3NhZ2UpID8gJG1l c3NhZ2UgOiBzbWRfYXRfZ1R4dCgnc2tpbl9zd2l0Y2hlZCcsIGFycmF5KCd7c2tpbn0nID0+ ICRza2luKSkpOw0KCX0gZWxzZSB7DQoJCSR1cmwgLj0gJyZtZXNzYWdlPScgLiAkbWVzc2Fn ZTsNCgl9DQoNCgkvLyBTaW5jZSB0aGUgaGVhZGVycyBoYXZlIGJlZW4gc2VudCwgZG91Ymxl LWRlY2x1dGNoIGluIG9yZGVyIHRvIHNob3cgdGhlIHNraW4gdGhpcyBmaXJzdCB0aW1lDQoJ ZWNobyA8PDxFT1MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCndpbmRvdy5s b2NhdGlvbi5ocmVmPSJ7JHVybH0iOw0KPC9zY3JpcHQ+DQo8bm9zY3JpcHQ+DQo8bWV0YSBo dHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO3VybD17JHVybH0iIC8+DQo8L25vc2Ny aXB0Pg0KRU9TOw0KCWV4aXQ7DQp9DQoNCi8vIEFsbC11c2VyIHNraW4gY2hvb3Nlcg0KZnVu Y3Rpb24gc21kX2FkbWF0KCRldmVudCwgJHN0ZXApIHsNCglpZighJHN0ZXAgb3IgIWluX2Fy cmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRfYXRfc3dpdGNoJywNCgkJKSkpIHsNCgkJc21k X2F0X2Nob29zZXIoJycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9jaG9vc2VyKCRtZXNzYWdlPScnKSB7 DQoJZ2xvYmFsICRwcmVmcywgJHNtZF9hdF9hZG1fZXZlbnQsICR0aGVtZSwgJHNtZF9hdF9z dHlsZXM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoJJGxheW91dCA9 IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0X3ByZWZzWydzbWRf YXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90dydd KSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRf dHcnXSkgKyAxMDsNCgkkdGggPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAk YXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ10p ICsgODA7DQoJJHN0eWxlcmVwcyA9IGFycmF5KA0KCQkne3R3fScgPT4gJHR3LA0KCQkne3Ro fScgPT4gJHRoLA0KCSk7DQoNCgkkbWVzc2FnZSA9ICgkbWVzc2FnZSkgPyAkbWVzc2FnZSA6 IGdwcygnbWVzc2FnZScpOw0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ3NraW5uZXInKSwkbWVz c2FnZSk7DQoNCgkkY3Vycl9za2luID0gJHRoZW1lLT5uYW1lOw0KDQoJJGFsbG93ZWQgPSAn JzsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSB7DQoJCSRhbGxv d2VkID0gZXhwbG9kZSgiLCIsJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pOw0KCQlmb3Jl YWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkgew0KCQkJaWYgKCR2YWxpZCA9PSAn Jykgew0KCQkJCXVuc2V0KCRhbGxvd2VkWyRpZHhdKTsNCgkJCX0NCgkJfQ0KCX0NCgkkYWxs b3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsNCgkkaGRyb3cgPSBoZWQoc21kX2F0X2dU eHQoJ2F2YWlsX3RpdGxlJyksIDMpOw0KDQoJaWYgKCRsYXlvdXQ9PSIwIikgew0KCQllY2hv ICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPic7DQoJCWVjaG8gJHNtZF9hdF9zdHlsZXNbJ2Nv bW1vbiddLm4uJHNtZF9hdF9zdHlsZXNbJ2xpc3QnXTsNCgkJZWNobyAnPC9zdHlsZT4nOw0K CQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnLCAnJywgJ3NtZF9hdF9saXN0Jyk7DQoJCWVjaG8g dHIoDQoJCQl0ZGEoJGhkcm93LCAnIGNvbHNwYW49IjMiJykNCgkJKTsNCgkJZWNobyB0cigN CgkJCWFzc0hlYWQoDQoJCQkJc21kX2F0X2dUeHQoJ3NraW5fZ2JsJyksDQoJCQkJJ2F1dGhv cicsDQoJCQkJJ2Rlc2NyaXB0aW9uJw0KCQkJKSk7DQoJfSBlbHNlIHsNCgkJZWNobyAnPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4nOw0KCQllY2hvIHN0cnRyKCRzbWRfYXRfc3R5bGVzWydj b21tb24nXS5uLiRzbWRfYXRfc3R5bGVzWydncmlkJ10sICRzdHlsZXJlcHMpOw0KCQllY2hv ICc8L3N0eWxlPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9ncmlkIj48ZGl2IGNsYXNz PSJzbWRfbmV3cm93Ij4nLiRoZHJvdy4nPC9kaXY+JzsNCgl9DQoJZm9yZWFjaCAoJGFsbG93 ZWQgYXMgJHNraW5fbmFtZSkgew0KCQkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRz a2luX25hbWUpOw0KCQlpZiAoJHNraW5mbykgew0KCQkJJHRodW1ibmFpbCA9IHNtZF9hdF9n ZXRfdGh1bWIoJHNraW5mbywgMSk7DQoJCQkkdGhpc19za2luID0gKCRza2luX25hbWUgPT0g JGN1cnJfc2tpbikgPyBzdHJvbmcoJHNraW5mb1snZG5hbWUnXSkgOiAkc2tpbmZvWydkbmFt ZSddOw0KCQkJJHRodW1yb3cgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9hZG1fZXZl bnQuYS4nc3RlcD1zbWRfYXRfc3dpdGNoJy5hLiduZXh0c3RlcD1zbWRfYWRtYXQnLmEuJ3Nr aW49Jy4kc2tpbl9uYW1lLiciIHRpdGxlPSInLnNtZF9hdF9nVHh0KCdhcHBseV9za2luJyku JyI+Jy4kdGhpc19za2luLigoJHRodW1ibmFpbCkgPyAnPGRpdj4nLiR0aHVtYm5haWwuJzwv ZGl2PicgOiAnJykuJzwvYT4nOw0KCQkJJGF1dGhyb3cgPSAoc3RycG9zKCRza2luZm9bJ2F1 dGhvcl91cmknXSwgImh0dHA6Ly8iKSA9PT0gMCkgPyAnPGEgaHJlZj0iJy4kc2tpbmZvWydh dXRob3JfdXJpJ10uJyI+Jy4kc2tpbmZvWydhdXRob3InXS4nPC9hPicgOiAkc2tpbmZvWydh dXRob3InXTsNCg0KCQkJaWYgKCRsYXlvdXQ9PSIwIikgew0KCQkJCWVjaG8gdHIoDQoJCQkJ CXRkKCR0aHVtcm93KQ0KCQkJCQkudGQoJGF1dGhyb3csIDEwMCkNCgkJCQkJLnRkKCRza2lu Zm9bJ2Rlc2NyaXB0aW9uJ10sIDI1MCkNCgkJCQkJLCAoKCRza2luX25hbWUgPT0gJGN1cnJf c2tpbikgPyAnIGNsYXNzPSJhY3RpdmUiJyA6ICcnKQ0KCQkJCSk7DQoJCQl9IGVsc2Ugew0K CQkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsJy4oKCRza2luX25hbWUgPT0gJGN1cnJf c2tpbikgPyAnIGFjdGl2ZScgOiAnJykuJyI+JzsNCgkJCQllY2hvICc8ZGl2PicuJHRodW1y b3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1dGgiPicuc21kX2F0 X2dUeHQoJ2J5JykuJGF1dGhyb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPC9kaXY+JzsNCgkJ CX0NCgkJfQ0KCX0NCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gZW5kVGFibGUoKTsN Cgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwvZGl2PjwvZGl2 Pic7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFBsdWdpbi1z cGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVxdWlyZWQNCmZ1 bmN0aW9uIHNtZF9hdF9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9 IGFycmF5KA0KCQknYWN0aW9ucycgPT4gJ0FjdGlvbnMnLA0KCQknYWxsb3dlZF9za2lucycg PT4gJ0FsbG93ZWQgdGhlbWVzOicsDQoJCSdhcHBseV9za2luJyA9PiAnQXBwbHkgdGhpcyB0 aGVtZScsDQoJCSdhdmFpbF90aXRsZScgPT4gJ0F2YWlsYWJsZSB0aGVtZXMnLA0KCQknYmFz ZWRfb24nID0+ICcgKGJhc2VkIG9uIHtza2lufSknLA0KCQknYnknID0+ICcgYnkgJywNCgkJ J2NfYnppcDInID0+ICdCWmlwJywNCgkJJ2NfZ3ppcCcgPT4gJ0daaXAnLA0KCQknY190YXIn ID0+ICdUYXInLA0KCQknY196aXAnID0+ICdaaXAnLA0KCQknY2FzZV9zb3J0JyA9PiAnQ2Fz ZS1zZW5zaXRpdmUgdGhlbWUgbGlzdDonLA0KCQknY2xlYXInID0+ICdub25lJywNCgkJJ2Ns b25lJyA9PiAnQmFzZScsDQoJCSdjb25maXJtJyA9PiAnR28nLA0KCQknY29yZV90aGVtZScg PT4gJ0Nhbm5vdCBkZWxldGUge3NraW59OiBjb3JlIHRoZW1lJywNCgkJJ2NvcmVfdGhlbWVf ZmlsZScgPT4gJ0Nhbm5vdCBkZWxldGUgZmlsZXMgZnJvbSB7c2tpbn06IGNvcmUgdGhlbWUn LA0KCQknY3J1c2hfdHlwZScgPT4gJ0V4cG9ydCBjb21wcmVzc2lvbiB0eXBlOicsDQoJCSdj cnVzaF9mb3JtYXQnID0+ICdGb3JtYXQ6JywNCgkJJ3NzYycgPT4gJ1N0eWxlcGxhdGVzJywN CgkJJ2NzcycgPT4gJ1N0eWxlcycsDQoJCSdkZWxldGVfY29uZmlybScgPT4gJ1JlYWxseSBk ZWxldGUgdGhlbWUge3NraW59PycsDQoJCSdkZWxldGVfZmFpbGVkJyA9PiAnRGVsZXRlIGZh aWxlZC4gVHJ5IHJlbW92aW5nIGl0IG1hbnVhbGx5JywNCgkJJ2VkaXRfbGJsJyA9PiAnVGhl bWUgZWRpdG9yJywNCgkJJ2VtcHR5X2luZm8nID0+ICdZb3Ugc2hvdWxkIGNob29zZSBhIGZp bGUgZmlyc3QgOi0pJywNCgkJJ2V4cG9ydCcgPT4gJ0V4cG9ydCcsDQoJCSdmaWxlbmFtZV9m b3JtYXQnID0+ICdGaWxlbmFtZSBmb3JtYXQ6ICcsDQoJCSdmaWxlX25vdF9kZWxldGVkJyA9 PiAnRmlsZSB7bmFtZX0gJy5zdHJvbmcoIm5vdCIpLicgZGVsZXRlZCcsDQoJCSdmaWxlX3Nh dmVkJyA9PiAnRmlsZSB7bmFtZX0gc2F2ZWQnLA0KCQknZmluZF90aGVtZScgPT4gJ0Jyb3dz ZSB0aGVtZXMnLA0KCQknZ2xvYmFsX3NraW4nID0+ICdEZWZhdWx0IHRoZW1lOicsDQoJCSdo ZWxwX2xpbmsnID0+ICcoPGEgaHJlZj0ie2xpbmt9Ij5IZWxwPC9hPiknLA0KCQknaW1nJyA9 PiAnSW1hZ2VzJywNCgkJJ2ltcG9ydF9mYWlsZWQnID0+ICdJbnN0YWxsYXRpb24gZmFpbGVk IDotKCBDaGVjayB0aGUgYXJjaGl2ZSBzdHJ1Y3R1cmUnLA0KCQknaW1wb3J0X3N1Y2Nlc3Mn ID0+ICdJbnN0YWxsYXRpb24gc3VjY2Vzc2Z1bC4gRmlsZXMgZXh0cmFjdGVkOiB7bnVtfScs DQoJCSdpbXBvcnRfb2snID0+ICdJbnN0YWxsYXRpb24gc3VjY2Vzc2Z1bC4nLA0KCQknaW5z dGFsbF9za2luJyA9PiAnSW5zdGFsbCB0aGVtZScsDQoJCSdpbnZhbGlkX2ZpbGUnID0+ICdS b2d1ZSBmaWxlIGRldGVjdGVkOiB7bmFtZX0nLA0KCQknaXNfZ2xvYmFsJyA9PiAnIFtERUZB VUxUXScsDQoJCSdqcycgPT4gJ1NjcmlwdHMnLA0KCQknbGF5b3V0JyA9PiAnTGF5b3V0IG1l dGhvZDonLA0KCQknbGF5b3V0X2xpc3QnID0+ICdMaXN0JywNCgkJJ2xheW91dF9ncmlkJyA9 PiAnR3JpZCcsDQoJCSdsaXN0X3RpdGxlJyA9PiAnSW5zdGFsbGVkIHRoZW1lcycsDQoJCSdt YW5hZ2VfbGJsJyA9PiAnVGhlbWUgbWFuYWdlcicsDQoJCSdta2Rpcl9mYWlsZWQnID0+ICdD YW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgZmlsZSB7bmFtZX0uIFRyeSBtYW51YWxseSBj cmVhdGluZyBpdC4nLA0KCQknbmFtZV9lbXB0eScgPT4gJ1lvdSBzaG91bGQgZ2l2ZSB5b3Vy IHRoZW1lIGEgbmFtZSA6LSknLA0KCQknbmV3JyA9PiAnQ3JlYXRlIG5ldyB0aGVtZScsDQoJ CSduZXdfZmlsZScgPT4gJ05ldyBmaWxlJywNCgkJJ25ld19jbG9uZXNraW4nID0+ICdOYW1l IG9mIGNvcHk6JywNCgkJJ25ld19za2luJyA9PiAnVGhlbWUgbmFtZTonLA0KCQknb3RoZXJf ZmlsZXMnID0+ICdPdGhlcnMnLA0KCQkncGhwJyA9PiAnQ29kZScsDQoJCSdwZXJfZ3JvdXAn ID0+ICdPbmUgdGhlbWUgcGVyIHByaXZpbGVnZSBsZXZlbCcsDQoJCSdwZXJfc2l0ZScgPT4g J09uZSB0aGVtZSBmb3IgZXZlcnlvbmUnLA0KCQkncGVyX3VzZXInID0+ICdPbmUgdGhlbWUg cGVyIHVzZXInLA0KCQkncHJlZnNfZGVsZXRlZCcgPT4gJ1ByZWZlcmVuY2VzIGRlbGV0ZWQn LA0KCQkncHJlZnNfaW5zdGFsbGVkJyA9PiAnUHJlZmVyZW5jZXMgaW5zdGFsbGVkJywNCgkJ J3ByZWZzX25vdF9pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBub3QgaW5zdGFsbGVkLics DQoJCSdwcmVmc19zb21lJyA9PiAnTm90IGFsbCBwcmVmZXJlbmNlcyBhdmFpbGFibGUuJywN CgkJJ3ByZWZzX3NvbWVfZXhwbGFpbicgPT4gJ0l0IGlzIGVpdGhlciBiZWNhdXNlIHRoaXMg aXMgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUnLmJyLidwbHVnaW4gdG8gb25lIHlvdSBo YWQgYmVmb3JlIG9yIHRoZSBwcmVmZXJlbmNlcycuYnIuJ2hhdmUgYmVjb21lIGNvcnJ1cHQg c29tZWhvdy4nLA0KCQkncHJlZnNfc29tZV9vcHRpb25zJyA9PiAnQ2hvb3NlICcuZ1R4dCgn ZGVsZXRlJykuJyB0byByZW1vdmUgdGhlbSBhbGwgb3IgJy5nVHh0KCdpbnN0YWxsJykuJyB0 byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZpbmcgYWxsIGV4aXN0aW5nIHByZWZlcmVu Y2VzIHVudG91Y2hlZC4nLA0KCQkncHJlZnNfdGl0bGUnID0+ICdBZG1pbiB0aGVtZSBwcmVm ZXJlbmNlcycsDQoJCSdyZW5hbWVfZmFpbGVkJyA9PiAnUmVuYW1lIGZhaWxlZCcsDQoJCSdy ZW5hbWVkJyA9PiAnUmVuYW1lZCB0byB7bmFtZX0nLA0KCQknc2V0JyA9PiAnU2V0JywNCgkJ J3NldHVwJyA9PiAnUHJlZmVyZW5jZXMnLA0KCQknc2tpbl9nYmwnID0+ICdUaGVtZScsDQoJ CSdza2luX2Nsb25lZCcgPT4gJ1RoZW1lIGV4dGVuZGVkIGFzIHtuYW1lfScsDQoJCSdza2lu X2NyZWF0ZWQnID0+ICdUaGVtZSB7bmFtZX0gY3JlYXRlZCcsDQoJCSdza2luX2RlbGV0ZWQn ID0+ICdUaGVtZSB7bmFtZX0gZGVsZXRlZCcsDQoJCSdza2luX2V4aXN0cycgPT4gJ1RoZW1l IHtuYW1lfSBhbHJlYWR5IGV4aXN0cycsDQoJCSdza2luX2ZpbGVzJyA9PiAnVGhlbWUgZmls ZXMnLA0KCQknc2tpbl9ncm91cHMnID0+ICdHcm91cCB0aGVtZXM6JywNCgkJJ3NraW5faW1h Z2VzJyA9PiAnVGhlbWUgaW1hZ2VzJywNCgkJJ3NraW5fbGlzdCcgPT4gJ1RoZW1lIGxpc3Qn LA0KCQknc2tpbl9ncmlkJyA9PiAnVGhlbWUgZ3JpZCcsDQoJCSdza2luX25vdF9jcmVhdGVk JyA9PiAnVGhlbWUge25hbWV9IGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBUcnkgbWFudWFsbHkg bWFraW5nIHRoZSBkaXJlY3RvcnknLA0KCQknc2tpbl9ub3RfZm91bmQnID0+ICdUaGUgdGhl bWUge25hbWV9IGNvdWxkIG5vdCBiZSBmb3VuZCcsDQoJCSdza2luX3N3aXRjaGVkJyA9PiAn VGhlbWUgc3dpdGNoZWQgdG8ge3NraW59JywNCgkJJ3NraW5fc3lzdGVtJyA9PiAnVGhlbWUg c3lzdGVtOicsDQoJCSdza2lubmVyJyA9PiAnVGhlbWUnLA0KCQknc3VwcG9ydGVkX2ltcG9y dCcgPT4gJ1N1cHBvcnRlZCBpbXBvcnQgdHlwZXM6IHt0eXBlc30nLA0KCQkndGFiX25hbWUn ID0+ICdBZG1pbiB0aGVtZXMnLA0KCQkndGh1bWJzaXplJyA9PiAnVGh1bWIgZGltZW5zaW9u czonLA0KCQkndGltZXMnID0+ICcgeCAnLA0KCQkndW5zdXBwb3J0ZWRfY29tcHJlc3Npb250 eXBlJyA9PiAne2NydXNofSBpcyBub3QgYSBzdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0 IGluIHRoaXMgaW5zdGFsbGF0aW9uJywNCgkJJ3Vuc3VwcG9ydGVkX2ZpbGV0eXBlJyA9PiAn RmlsZSBpcyBub3Qgb2YgYSBzdXBwb3J0ZWQgdHlwZScsDQoJCSd1bnN1cHBvcnRlZF9mdWRn ZScgPT4gJzogaGl0IFNhdmUgYWdhaW4gdG8gc3RvcmUgYW55d2F5JywNCgkJJ3VwZGF0ZScg PT4gJ1VwZGF0ZScsDQoJCSd1cGxvYWRfZmFpbGVkJyA9PiAnSW1hZ2UgY291bGQgbm90IGJl IHVwbG9hZGVkJywNCgkJJ3VwbG9hZF9pbWFnZScgPT4gJ1VwbG9hZCBpbWFnZScsDQoJCSd1 cGxvYWRfc3VjY2VzcycgPT4gJ0ltYWdlIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseScsDQoJCSd2 ZXJzaW9uJyA9PiAndicsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0 cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZs YWdzIjtzOjE6IjMiO3M6NDoiaGVscCI7czoyNjUyMzoiPGRpdiBpZD0ic21kX2hlbHAiPgoK CTxoMSBpZD0idG9wIj5zbWRfYWRtaW5fdGhlbWVzPC9oMT4KCgk8cD5JbnN0YWxsLCBtYW5h Z2UsIGVkaXQgYW5kIHN3aXRjaCBhZG1pbi1zaWRlIHRoZW1lcyB0aGVuIHNoYXJlIHRoZW0g d2l0aCB0aGUgY29tbXVuaXR5LjwvcD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwv aDI+CgoJPHVsPgoJCTxsaT5DcmVhdGUgYW5kIEVkaXQgYWRtaW4tc2lkZSB0aGVtZXM8L2xp PgoJCTxsaT5FbXBsb3kgaW1hZ2VzLCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiwg SlMsIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPi9QSFAgKGZvciBjaGFuZ2luZyBt YXN0aGVhZCwgaGVhZGVyICZhbXA7IGZvb3RlcikgaW4geW91ciB0aGVtZTwvbGk+CgkJPGxp PlVzZSBjb25zdGFudHMgaW4geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBm aWxlczwvbGk+CgkJPGxpPkJhc2UgeW91ciB0aGVtZSBvbiBhbiBleGlzdGluZyB0aGVtZSB0 byB0d2VhayBpdCB0byB5b3VyIHRhc3RlPC9saT4KCQk8bGk+RXhwb3J0IGEgdGhlbWUgcGFj a2FnZSBmb3IgZGlzdHJpYnV0aW9uIHRvIHRoZSBjb21tdW5pdHkgaW4gZWl0aGVyIC50YXIs IC50Z3osIC5iejIgb3IgLnppcCBmb3JtYXQgKHJlcXVpcmUgc21kX2NydW5jaGVycyBwbHVn aW4pPC9saT4KCQk8bGk+SW1wb3J0IC8gaW5zdGFsbCBvdGhlciB0aGVtZXMgZnJvbSB0aGUg PGEgaHJlZj0iaHR0cDovL3RleHRnYXJkZW4ub3JnL2FkbWluaXN0cmF0aW9uLXRoZW1lcyI+ Y29tbXVuaXR5IHJlcG9zaXRvcnk8L2E+PC9saT4KCQk8bGk+QWRtaW5pc3RyYXRvciBjYW4g c2V0IGEgZGVmYXVsdCB0aGVtZSBmb3IgYWxsIHVzZXJzLCBvciBlbmFibGUgcGVyLXVzZXIg LyBwZXItcm9sZSB0aGVtZXM8L2xpPgoJPC91bD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3Rh bGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5S ZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiA1KyBhbmQgPGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9jcnVuY2hlcnMiPnNtZF9jcnVuY2hlcnM8L2E+ IHBsdWdpbiBmb3IgaW1wb3J0L2V4cG9ydDwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2lu IGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8x MDk2L3NtZF9hZG1pbl90aGVtZXMiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBo cmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0 ZSB0aGUgY29kZSBpbnRvIHRoZSBUeHAgPGVtPkFkbWluLSZndDtQbHVnaW5zPC9lbT4gcGFu ZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIEEgbmV3IHRhYiBsYWJlbGxlZCA8 ZW0+RXh0ZW5zaW9ucy0mZ3Q7QWRtaW4gdGhlbWVzPC9lbT4gaXMgY3JlYXRlZC4gPHN0cm9u Zz5Pbmx5IHB1Ymxpc2hlcnMgd2lsbCBzZWUgdGhpcyB0YWI8L3N0cm9uZz4uPC9wPgoKCTxw PlRoZSBwbHVnaW4gc2hvdWxkIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCB0aGUgcHJlZmVyZW5j ZXMgZm9yIHlvdS4gQ2xpY2sgJiM4MjE2O1ByZWZlcmVuY2VzJiM4MjE3OyBmcm9tIHRoZSA8 ZW0+RXh0ZW5zaW9ucy0mZ3Q7QWRtaW4gdGhlbWVzPC9lbT4gdGFiIG9yIDxlbT5PcHRpb25z PC9lbT4gZnJvbSB0aGUgPGVtPkFkbWluLSZndDtQbHVnaW5zPC9lbT4gdGFiIHRvIGFsdGVy LCBkZWxldGUgb3IgcmVpbnN0YWxsIHRoZW0uPC9wPgoKCTxwPlZpc2l0IHRoZSA8YSBocmVm PSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzA5NTIi PmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1 Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRvIHVuaW5zdGFs bCwgc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGZyb20gdGhlIDxlbT5BZG1pbi0mZ3Q7UGx1 Z2luczwvZW0+IHBhZ2UuIFRoZSBwcmVmZXJlbmNlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUg cmVtb3ZlZC4gUGxlYXNlIGJlIGF3YXJlIHRoYXQgcmVtb3ZpbmcgdGhlIHBsdWdpbiBkb2Vz IDxzdHJvbmc+bm90IHJlbW92ZSBhbnkgdGhlbWVzIHlvdSBoYXZlIGluc3RhbGxlZCwgbm9y IGRvZXMgaXQgcmVtb3ZlIHBlci11c2VyIHRoZW1lIHByZWZlcmVuY2VzPC9zdHJvbmc+LiBQ ZXItdXNlciBwcmVmcyB3aWxsIHNpbXBseSBiZSBpZ25vcmVkIHdoZW4gdGhlIHBsdWdpbiBp cyBkZWxldGVkLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+T24gdGhl IDxlbT5FeHRlbnNpb25zLSZndDtBZG1pbiB0aGVtZXM8L2VtPiB0YWIgaXMgYSBsaXN0IG9y IGdyaWQgY29udGFpbmluZyBpbnN0YWxsZWQgdGhlbWVzLiBPdXQgb2YgdGhlIGJveCwgdGhl cmUgd2lsbCBiZSB0d28gYXZhaWxhYmxlOiA8ZW0+Y2xhc3NpYzwvZW0+IGFuZCA8ZW0+cmVt b3JhPC9lbT4uIDxzdHJvbmc+SXQmIzgyMTc7cyBhZHZpc2FibGUgbm90IHRvIGNoYW5nZSB0 aGVzZSB0aGVtZXM8L3N0cm9uZz4gc28geW91IGNhbiBhbHdheXMgZ28gYmFjayB0byB0aGVt IGlmIGV2ZXJ5dGhpbmcgZ29lcyBzaWRld2F5cy4gUGx1cyBpdCYjODIxNztzIGEgdmVyeSB1 c2VmdWwgc3RhcnRpbmcgcG9pbnQgZnJvbSB3aGljaCB0byA8YSBocmVmPSIjY2xvbmUiPmJh c2U8L2E+IGEgPGEgaHJlZj0iI25ldyI+bmV3IHRoZW1lPC9hPi48L3A+CgoJPHA+SW4gdGhl IGxpc3QgbGF5b3V0LCB0aGUgY29sdW1ucyBhcmU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPlRoZW1lPC9zcGFuPiA6IFRoZSBuYW1lIG9mIHRoZSB0aGVtZSBhbmQg KG9wdGlvbmFsKSB0aHVtYm5haWwgYXNzaWduZWQgdG8gaXQuIENsaWNrIHRvIDxhIGhyZWY9 IiNzd2l0Y2giPmFjdGl2YXRlPC9hPiB0aGUgdGhlbWUuIElmIHRoZSB0aGVtZSBpcyBiYXNl ZCBvbiBhbm90aGVyIHVzZXImIzgyMTc7cyB0aGVtZSwgdGhpcyBkZXBlbmRlbmN5IHdpbGwg YmUgc2hvd24gaW4gcGFyZW50aGVzZXMgYWZ0ZXIgdGhlIHRoZW1lIG5hbWU8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+QXV0aG9yPC9zcGFuPiA6IFlvdSEgTGlua2VkIHRvIHlv dXIgd2ViIHNpdGUgaWYgeW91IHN1cHBseSBpdCBpbiB5b3VyIDxhIGhyZWY9IiNhYm91dCI+ TWFuaWZlc3Q8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlZlcnNpb248L3Nw YW4+IDogVGhlbWUgdmVyc2lvbiBudW1iZXIgaW4gPGNvZGU+bWFqb3IubWlub3Iuc3VicmV2 PC9jb2RlPiBub3RhdGlvbi4gSWYgYSBuZXdlciB2ZXJzaW9uIG9mIGEgdGhlbWUgaXMgYXZh aWxhYmxlIGZyb20gVGV4dGdhcmRlbiwgdGhlIHZlcnNpb24gbnVtYmVyIHdpbGwgYmUgaHlw ZXJsaW5rZWQgdG8gdGhlIHRoZW1lIG9uIFRleHRnYXJkZW4gc28geW91IG1heSBkb3dubG9h ZC9pbnN0YWxsIGl0LiBUaGUgdmVyc2lvbnMgYXJlIGNoZWNrZWQsIGF0IG1vc3QsIG9uY2Ug ZXZlcnkgMjQgaG91cnMgdG8gYXZvaWQgaGFtbWVyaW5nIHRoZSBzZXJ2ZXI8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+RGVzY3JpcHRpb248L3NwYW4+IDogQnJpZWYgb25lLSBv ciB0d28tbGluZXIgZXhwbGFpbmluZyB5b3VyIHRoZW1lLiBJZiB5b3UgaGF2ZSBvZmZlcmVk IGEgaGVscCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBpbiB5b3VyIG1hbmlmZXN0 LCBpdCB3aWxsIGJlIGxpbmtlZCBoZXJlIGFzIHdlbGw8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+QWN0aW9uczwvc3Bhbj4gOiBBY3Rpb25zIHRvIHBlcmZvcm0gb24gZWFjaCB0 aGVtZQoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W05ldyB0aGVtZV08L3NwYW4+ IDogPGEgaHJlZj0iI25ldyI+Q3JlYXRlPC9hPiBhIG5ldyBibGFuaywgZW1wdHkgZGlyZWN0 b3J5IHJlYWR5IGZvciB5b3VyIHRoZW1lLiBObyBzcGFjZXMgLyBvZGQgY2hhcmFjdGVycyBh cmUgYWxsb3dlZCBpbiB0aGUgbmFtZSBhbmQgaXQgbXVzdCBub3Qgc3RhcnQgd2l0aCBhIG51 bWJlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bRWRpdF08L3NwYW4+IDogPGEg aHJlZj0iI2VkaXRfdGhlbWUiPkVkaXQ8L2E+IHRoZSB2YXJpb3VzIGRldGFpbHMsIGZpbGVz IGFuZCBjb250ZW50IHdpdGhpbiB0aGUgdGhlbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+W0Jhc2VdPC9zcGFuPiA6IDxhIGhyZWY9IiNjbG9uZSI+RXh0ZW5kPC9hPiBvbmUg b2YgdGhlIGV4aXN0aW5nIHRoZW1lcyB0byBtYWtlIHlvdXIgb3duIGNoYW5nZXMgdW5kZXIg YSBuZXcgbmFtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bRXhwb3J0XTwvc3Bh bj4gOiA8YSBocmVmPSIjZXhwb3J0Ij5TYXZlPC9hPiB0aGUgdGhlbWUgcGFja2FnZSB0byB5 b3VyIGhhcmQgZHJpdmUgZm9yIGRpc3RyaWJ1dGlvbi9iYWNrdXAgaW4geW91ciBjaG9zZW4g Y29tcHJlc3Npb24gZm9ybWF0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltEZWxl dGVdPC9zcGFuPiA6IENvbXBsZXRlbHkgPGEgaHJlZj0iI2RlbGV0ZSI+cmVtb3ZlPC9hPiB0 aGUgdGhlbWUuIE5vdCBhdmFpbGFibGUgdG8gdGhlIGNvcmUgdGhlbWVzLCBmb3Igb2J2aW91 cyByZWFzb25zISBBbHNvIG5vdCBhdmFpbGFibGUgaWYgYSB0aGVtZSBoYXMgYmVlbiB1c2Vk IGFzIGEgYmFzaXMgZm9yIGFub3RoZXIgdGhlbWUgaW4gdGhlIGN1cnJlbnQgc2l0ZTwvbGk+ Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxwPlRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUg aXMgc2hhZGVkIGFuZCB0aGUgY3VycmVudCBkZWZhdWx0IHRoZW1lIHRoYXQgaXMgaW4gZWZm ZWN0IGlzIGhpZ2hsaWdodGVkLiBUaGUgZ3JpZCB2aWV3IGhhcyBwYXJ0cyBvZiB0aGUgYWJv dmUgaW5mb3JtYXRpb24sIGxhaWQgb3V0IHNsaWdodGx5IGRpZmZlcmVudGx5LjwvcD4KCgk8 aDIgaWQ9InN3aXRjaCI+U3dpdGNoaW5nIHRoZW1lczwvaDI+CgoJPHA+QXMgdGhlIGFkbWlu aXN0cmF0b3IsIHlvdSBjYW4gcGxheSBHb2Qgb3ZlciBldmVyeW9uZSBlbHNlJiM4MjE3O3Mg dGhlbWVzLiBZb3UgYXJlIGZyZWUgdG8gaW5zdGFsbCBhcyBtYW55IGFzIHlvdSB3aXNoIGFu ZCBzd2l0Y2ggYmV0d2VlbiB0aGVtIHdpdGhvdXQgYWZmZWN0aW5nIGFueSBvdGhlciBsb2dp bnMuIE5vYm9keSBlbHNlIHdpbGwgZXZlbiBrbm93IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUg cGx1Z2luLjwvcD4KCgk8cD5JZiwgaG93ZXZlciwgeW91IHZpc2l0IHRoZSA8YSBocmVmPSIj c2V0dXAiPlByZWZlcmVuY2VzPC9hPiBwYWdlIHlvdSBjYW4gY29uZmlndXJlIHRoZSB0aGVt ZXMgdGhhdCBvdGhlcnMgdXNlLiBUaGVyZSBhcmUgdGhyZWUgbWVjaGFuaXNtcyB0byBjaG9v c2UgZnJvbTo8L3A+CgoJPHVsPgoJCTxsaT5Gb3JjZSBvbmUgdGhlbWUgZm9yIGFsbCB1c2Vy cyAoZXhjZXB0IHlvdXJzZWxmKTwvbGk+CgkJPGxpPkZvcmNlIG9uZSB0aGVtZSBmb3IgZWFj aCB1c2VyIHByaXZpbGVnZSBsZXZlbCAoZXhjZXB0IHlvdXJzZWxmKTwvbGk+CgkJPGxpPkFs bG93IGFsbCB1c2VycyAoZXhjZXB0IHlvdXJzZWxmKSB0byBwaWNrIHRoZWlyIGZhdm91cml0 ZSB0aGVtZSBmcm9tIGEgc2hvcnRsaXN0IHlvdSBkZWZpbmU8L2xpPgoJPC91bD4KCgk8cD5B dCBhbGwgdGltZXMsIHlvdSBjYW4gY2hvb3NlIGFueSB0aGVtZSB5b3UgcGxlYXNlIGZvciB5 b3VyIG93biB1c2UuIFRoaXMgYWxsb3dzIHRyaWFsbGluZywgdHdlYWtpbmcgYW5kIHRlc3Rp bmcgb2YgdGhlbWVzIGJlZm9yZSB1bmxlYXNoaW5nIHRoZW0gb24geW91ciB1c2VyIGJhc2Uu PC9wPgoKCTxoMiBpZD0ic2V0dXAiPlRoZW1lIHByZWZlcmVuY2VzPC9oMj4KCgk8dWw+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5DYXNlLXNlbnNpdGl2ZSB0aGVtZSBsaXN0PC9zcGFu PiA6IFdoZW4gc2V0IHRvIDxjb2RlPlllczwvY29kZT4sIHVwcGVyLWNhc2UgdGhlbWUgbmFt ZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbG93ZXIgY2FzZSB0aGVtZSBuYW1lcyBhbmQgd2ls bCBiZSBsaXN0ZWQgZmlyc3QuIEZvciBleGFtcGxlLCAzIHRoZW1lIGNhbGxlZCAmIzgyMTY7 QW5nZWxpYyYjODIxNzssICYjODIxNjtiYXJiYXJpYyYjODIxNzsgYW5kICYjODIxNjtDb2hl c2l2ZSYjODIxNzsgd2lsbCBiZSBvcmRlcmVkOiA8Y29kZT5BbmdlbGljLCBDb2hlc2l2ZSwg YmFyYmFyaWM8L2NvZGU+LiBTZXQgdG8gPGNvZGU+Tm88L2NvZGU+IHRvIG1peCB1cHBlciBh bmQgbG93ZXItY2FzZSB0aGVtZXMgdG9nZXRoZXIgKG9yZGVyIGlzIHRoZW4gPGNvZGU+QW5n ZWxpYywgYmFyYmFyaWMsIENvaGVzaXZlPC9jb2RlPiApLiBUaGUgJiM4MjE2O2NsYXNzaWMm IzgyMTc7IHRoZW1lIGlzIDxlbT5hbHdheXM8L2VtPiBsaXN0ZWQgZmlyc3QuPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkV4cG9ydCBjb21wcmVzc2lvbiB0eXBlPC9zcGFuPiA6 IDxzcGFuIGNsYXNzPSJpbXBvcnRhbnQiPk9ubHkgaWYgc21kX2NydW5jaGVycyBpcyBpbnN0 YWxsZWQ8L3NwYW4+IERlcGVuZGluZyBvbiB5b3VyIHZlcnNpb24gb2YgPHNwYW4gY2xhc3M9 ImNhcHMiPlBIUDwvc3Bhbj4gYW5kIHdoaWNoIG1vZHVsZXMgaGF2ZSBiZWVuIGNvbXBpbGVk IGludG8gaXQsIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgY29tcHJlc3Npb24gZm9ybWF0cyBo ZXJlLiBDaG9vc2Ugb25lIHRoYXQgc3VpdHMgeW91IGFzIHRoZSBkZWZhdWx0IGluIHdoaWNo IHRvIGV4cG9ydCB5b3VyIHRoZW1lIHBhY2thZ2VzLiBZb3UgbWF5IGNob29zZSBmcm9tIDxl bT5UYXI8L2VtPiwgPGVtPkdaaXA8L2VtPiAoYWN0dWFsbHkgdGFyK2d6aXApLCA8ZW0+Qnpp cDI8L2VtPiAodGFyK2J6aXApLCBvciA8ZW0+WmlwPC9lbT4gKHRoZSBkZWZhdWx0KS48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TGF5b3V0IG1ldGhvZDwvc3Bhbj4gOiBDaG9v c2UgZnJvbSBhIExpc3QgVmlldyAodXNlZnVsIGlmIHlvdSBwcmVmZXIgdG8gaGlkZSBvciB1 c2Ugc21hbGwgdGh1bWJzKSBvciBhIEdyaWQgVmlldyBvZiBpbnN0YWxsZWQgdGhlbWVzLiBU aGlzIHNldHRpbmcgYXBwbGllcyB0byBib3RoIGFkbWluIGFuZCB1c2VyIHRoZW1lIHNlbGVj dGlvbiB0YWJzLiBEZWZhdWx0OiBHcmlkIFZpZXc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+VGh1bWIgZGltZW5zaW9uczwvc3Bhbj4gOiBTZXQgdGhlIHRodW1ibmFpbCBkaW1l bnNpb25zIGluIHRoZSB0aGVtZSBsaXN0LiBTZXQgZWl0aGVyIGRpbWVuc2lvbiB0byAwIHRv IHR1cm4gb2ZmIHRodW1ibmFpbCBkaXNwbGF5LiBEZWZhdWx0OiAyNjAgJiMyMTU7IDE1MHB4 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkZpbGVuYW1lIGZvcm1hdDwvc3Bhbj4g OiBEZWZpbmUgdGhlIGZvcm1hdCBvZiB0aGUgZXhwb3J0ZWQgdGhlbWUuIFlvdSBjYW4gdXNl IDxjb2RlPnt0aGVtZX08L2NvZGU+IGFuZCA8Y29kZT57dmVyc2lvbn08L2NvZGU+IHJlcGxh Y2VtZW50IHZhcmlhYmxlcyBpbiB0aGlzIGZpZWxkLiBGb3IgZXhhbXBsZSwgPGNvZGU+e3Ro ZW1lfV92e3ZlcnNpb259PC9jb2RlPi4gRGVmYXVsdDogPGNvZGU+e3RoZW1lfTwvY29kZT48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RGVmYXVsdCB0aGVtZTwvc3Bhbj4gOiBT ZXQgdGhlIHRoZW1lIGZvciBhbGwgb3RoZXIgdXNlcnMuIElmIHVzaW5nICYjODIxNjtPbmUg dGhlbWUgZm9yIGV2ZXJ5b25lJiM4MjE3OyB0aGUgdGhlbWUgY2hvc2VuIGhlcmUgaXMgZm9y Y2VkIHVwb24gYWxsIHVzZXJzLiBJZiB1c2luZyBhbnkgb2YgdGhlIG90aGVyIG1lY2hhbmlz bXMsIHRoaXMgdGhlbWUgaXMgYSBmYWxsYmFjayBzaG91bGQgc29tZXRoaW5nIGdvIHBlYXIt c2hhcGVkLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZSBzeXN0ZW08L3Nw YW4+IDogQXMgZGV0YWlsZWQgaW4gPGEgaHJlZj0iI3N3aXRjaCI+U3dpdGNoaW5nIHRoZW1l czwvYT4sIHlvdSBtYXkgY2hvb3NlIHRoZSB3YXkgdGhlIFR4cCBpbnRlcmZhY2UgaXMgcHJl c2VudGVkIHRvIG90aGVyIHVzZXJzOgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ T25lIHRoZW1lIGZvciBldmVyeW9uZTwvc3Bhbj4gOiB1c2VzIHRoZSBEZWZhdWx0IHRoZW1l IGZvciBhbGwgdXNlcnM7IHRoZXkgaGF2ZSBubyBjaG9pY2UgaW4gdGhlIG1hdHRlcjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgcGVyIHByaXZpbGVnZSBsZXZl bDwvc3Bhbj4gOiBhbGxvd3MgeW91IHRvIGFzc2lnbiBvbmUgb3IgbW9yZSBwcml2aWxlZ2Ug bGV2ZWxzIHRvIGEgdGhlbWUuIENob29zZSBhIHRoZW1lIGZyb20gdGhlIGxlZnQtaGFuZCBs aXN0IGFuZCB0aGVuIHNoaWZ0L2N0cmwtY2xpY2sgdGhlIHByaXZpbGVnZSBsZXZlbHMgdG8g YXNzaWduIHRoZW0uIEZsaWNrIGJldHdlZW4gdGhlbWVzIGluIHRoZSBsZWZ0IGNvbHVtbiB0 byBzZWUgd2hpY2ggb25lcyBhcmUgc2V0IGZvciB2YXJpb3VzIHVzZXIgbGV2ZWxzLCBvciBo b3ZlciBvdmVyIGEgcHJpdmlsZWdlIGxldmVsIHRvIHNlZSBhIHRvb2x0aXAuIE9ubHkgb25l IGxldmVsIGNhbiBiZSBhc3NpZ25lZCB0byBhIHRoZW1lIHNvIGlmIHlvdSBjbGljayBhIGxl dmVsIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZCB0byBhbm90aGVyIHRoZW1lLCBp dCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdHMgb3JpZ2luYWwgYXNzaWdubWVudC4gTm90ZSB5 b3UgbXVzdCBTYXZlIHRoZSBjaGFuZ2VzIGZvciB0aGVtIHRvIHRha2UgZWZmZWN0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0aGVtZSBwZXIgdXNlcjwvc3Bhbj4gOiBk ZWZpbmUgYSBzaG9ydGxpc3QgZnJvbSB0aGUgYXZhaWxhYmxlIGluc3RhbGxlZCB0aGVtZXMg dG8gb2ZmZXIgdG8gYWxsIHVzZXJzLiBBIG5ldyB0YWIgd2lsbCBhcHBlYXIgdG8gb3RoZXIg dXNlcnMgdW5kZXIgPGVtPkFkbWluPC9lbT4gdGhhdCBpcyBlc3NlbnRpYWxseSBhIGN1dC1k b3duIHZlcnNpb24gb2YgdGhlIDxlbT5BZG1pbiB0aGVtZXM8L2VtPiB0YWIuIFVzZXJzIGNh biBzd2l0Y2ggYmV0d2VlbiBhbnkgb25lIG9mIHRoZSB0aGVtZXMgeW91IGhhdmUgcGVybWl0 dGVkLjwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxwPlJlbWVtYmVyIHRvIGNsaWNrIFNh dmUgdG8gYXBwbHkgdGhlIGNoYW5nZXMuIENsaWNraW5nIGFueSBvdGhlciB0YWIgd2lsbCB1 bmRvIGFueSBtb2RpZmljYXRpb25zIHlvdSBtYXkgaGF2ZSBtYWRlLjwvcD4KCgk8aDIgaWQ9 ImJyb3dzZSI+QnJvd3NlIHRoZW1lczwvaDI+CgoJPHA+Q2xpY2sgdGhpcyBidXR0b24gdG8g YmUgdGFrZW4gdG8gdGhlIGNlbnRyYWwgYWRtaW4gdGhlbWUgcmVwb3NpdG9yeSB3aGVyZSB5 b3UgbWF5IGJyb3dzZSB0aGVtZXMgYW5kIGRvd25sb2FkIHRoZW0gcmVhZHkgZm9yIGluc3Rh bGxhdGlvbi48L3A+CgoJPGgyIGlkPSJpbXBvcnQiPkluc3RhbGwgYSB0aGVtZTwvaDI+CgoJ PHAgY2xhc3M9ImltcG9ydGFudCI+T25seSBhdmFpbGFibGUgaWYgc21kX2NydW5jaGVycyBp cyBpbnN0YWxsZWQuPC9wPgoKCTxwPkxvY2F0ZSBhIHRoZW1lIHBhY2thZ2Ugb24geW91ciBo YXJkIGRyaXZlIG9yIHBhc3RlIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdG8g YSBwYWNrYWdlIGluIHRoZSBib3ggYXQgdGhlIHRvcCBvZiB0aGUgcGFnZS4gSGl0IDxzdHJv bmc+VXBsb2FkPC9zdHJvbmc+IGFuZCBpdCB3aWxsIGJlIGluc3RhbGxlZC4gSWYgaXQgYWxy ZWFkeSBleGlzdHMgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi4gTm90ZSB0aGF0IHlvdSBtYXkg cmVjZWl2ZSBhIHdhcm5pbmcgaWYgdGhlIHRoZW1lIGlzIHBhY2thZ2VkIHVzaW5nIGEgY29t cHJlc3Npb24gYWxnb3JpdGhtIHRoYXQgaXMgbm90IGJ1aWx0IGludG8geW91ciB2ZXJzaW9u IG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+LiBBIGxpc3Qgb2Ygc3VwcG9ydGVk IGNvbXByZXNzaW9uIHR5cGVzIGlzIGdpdmVuIGJlbG93IHRoZSB1cGxvYWQgYm94LjwvcD4K Cgk8aDIgaWQ9Im5ldyI+Q3JlYXRlIGEgbmV3IChlbXB0eSkgdGhlbWU8L2gyPgoKCTxwPkNs aWNrIDxzdHJvbmc+Q3JlYXRlIG5ldyB0aGVtZTwvc3Ryb25nPiBhbmQgYSBib3ggd2lsbCBz bGlkZSBkb3duIGFsbG93aW5nIHlvdSB0byBnaXZlIHlvdXIgdGhlbWUgYSBuYW1lLiAgTm90 ZSB0aGF0IHRoZSBlZGl0IGJveCBhdXRvbWF0aWNhbGx5IHRha2VzIGZvY3VzLCBzbyB5b3Ug Y2FuIHR5cGUgc3RyYWlnaHQgYXdheS48L3A+CgoJPHA+Tm8gc3BhY2VzIG9yIG9kZCBjaGFy YWN0ZXJzIGFyZSBwZXJtaXR0ZWQsIGJlY2F1c2UgdGhlIG5hbWUgeW91IGVudGVyIGlzIHRo ZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIDxl bT50aGVtZTwvZW0+IGZvbGRlciBhbmQgdGhlbSBuYW1lIG9mIHlvdXIgdGhlbWUmIzgyMTc7 cyBjbGFzcy4gSWYgeW91IGRvIG1hbmFnZSB0byB1c2Ugb2RkIGNoYXJhY3RlcnMsIHRoZSBu YW1lIHdpbGwgYmUgJiM4MjIwO2R1bWJlZCBkb3duJiM4MjIxOyBmb3IgeW91LiBPbmNlIHRo ZSBuYW1lIGlzIHNldCwgdGhhdCBpcyBpdDsgeW91IGNhbm5vdCBjaGFuZ2UgaXQgZnJvbSB3 aXRoaW4gdGhlIGludGVyZmFjZS4gVGhlIG9ubHkgd2F5IHRvIHJlbmFtZSBpdCBpcyB2aWEg eW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBjbGllbnQgYW5kIGluIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGlmIHlvdSBrbm93IHdoYXQgeW91 IGFyZSBkb2luZy48L3A+CgoJPHA+SW4gb3JkZXIgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdp dGggb3RoZXIgcGVvcGxlJiM4MjE3O3MgdGhlbWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0 IGFsbCB0aGVtZXMgeW91IGRlc2lnbiBiZWdpbiB3aXRoIGEgdW5pcXVlIDMtbGV0dGVyIHBy ZWZpeCBvZiB5b3VyIG93biBjaG9vc2luZywgcGx1cyBhbiB1bmRlcnNjb3JlICYjODIxMjsg ZXhhY3RseSBsaWtlIHBsdWdpbnMuIFRodXMsIHNtZF9CbHVlTWVhbmllIG1pZ2h0IHdlbGwg YmUgdGhlIG5hbWUgb2YgYSB0aGVtZS48L3A+CgoJPHA+V2hlbiB5b3UgaGF2ZSBuYW1lZCB5 b3VyIHRoZW1lLCBjbGljayA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGNyZWF0ZSBhIGRpcmVj dG9yeSBpbiB3aGljaCBpdCBjYW4gcmVzaWRlLjwvcD4KCgk8aDIgaWQ9ImNsb25lIj5FeHRl bmQgYW4gZXhpc3RpbmcgdGhlbWU8L2gyPgoKCTxwPkNsaWNrIDxzdHJvbmc+QmFzZTwvc3Ry b25nPiB0byBjcmVhdGUgYSBuZXcgdGhlbWUgYmFzZWQgb24gYW5vdGhlci4gQSBib3ggd2ls bCBzbGlkZSBkb3duICh0aGUgY3Vyc29yIGZvY3VzZXMgYXV0b21hdGljYWxseSBpbiB0aGUg Ym94IGZvciB5b3UpIHNvIHlvdSBtYXkgZW50ZXIgdGhlIG5hbWUgb2YgeW91ciBjb3B5LiBP YnNlcnZlIHRoZSA8YSBocmVmPSIjbmV3Ij5uYW1pbmcgY29udmVudGlvbjwvYT4sIHRoZW4g Y2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBjcmVhdGUgdGhlIG5ldyB0aGVtZS48L3A+ CgoJPHA+PHNwYW4gY2xhc3M9ImltcG9ydGFudCI+UGxlYXNlIHJlbWVtYmVyLCB5b3VyIHRo ZW1lIHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSBjaG9zZW4gdGhlbWUgYW5kIDxzdHJvbmc+ Ym90aDwvc3Ryb25nPiBtdXN0IGJlIHByZXNlbnQgb24gYSB1c2VyJiM4MjE3O3Mgc3lzdGVt IGZvciB0aGUgdGhlbWUgdG8gd29yazwvc3Bhbj4uIEl0IGlzIHdvcnRoIGVuc3VyaW5nIHRo YXQgdXNlcnMgb2YgeW91ciB0aGVtZSBhcmUgbWFkZSBhd2FyZSBvZiB0aGlzIGRlcGVuZGVu Y3kgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZnJ1c3RyYXRpb247IHBlcmhhcHMgYWRkIGEgbGlu ayB0byB0aGUgdGhlbWUmIzgyMTc7cyBiYXNlLCBtZW50aW9uIHRoZSBkZXBlbmRlbmN5IGlu IHRoZSBIZWxwIGxpbmsgYW5kL29yIGluIHRoZSB0aGVtZSYjODIxNztzIGFydGljbGUgb24g VGV4dGdhcmRlbi4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gZGVsZXRlIGFueSB0aGVtZSBm cm9tIHRoZSBsaXN0IHRoYXQgaGFzIHN1Y2ggYSBkZXBlbmRlbmN5LCBvdGhlcndpc2UgeW91 ciBhZG1pbiBzaWRlIHdpbGwgc3RvcCB3b3JraW5nLjwvcD4KCgk8aDIgaWQ9ImV4cG9ydCI+ RXhwb3J0IGEgdGhlbWU8L2gyPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPk9ubHkgYXZhaWxh YmxlIGlmIHNtZF9jcnVuY2hlcnMgaXMgaW5zdGFsbGVkLjwvcD4KCgk8cD5JZiB5b3Ugd2lz aCB0byBiYWNrIHVwIGEgdGhlbWUgb3Igc2hhcmUgaXQgd2l0aCBvdGhlcnMsIGNsaWNrIDxz dHJvbmc+RXhwb3J0PC9zdHJvbmc+LiBBIGJveCB3aWxsIHNsaWRlIGRvd24gb2ZmZXJpbmcg eW91IGEgY2hvaWNlIG9mIGNvbXByZXNzaW9uIGZvcm1hdHM7IHRoZSBkZWZhdWx0IGlzIHRo ZSBmb3JtYXQgeW91IGNob3NlIGZyb20gdGhlIDxhIGhyZWY9IiNzZXR1cCI+UHJlZmVyZW5j ZXM8L2E+IHBhZ2UuIENsaWNrIDxlbT5bR29dPC9lbT4gdG8gZXhwb3J0IHRoZSB0aGVtZSBh bmQgc2F2ZSBpdCB0byB5b3VyIGNvbXB1dGVyLiBBbGwgcmVsYXRlZCBmaWxlcyBpbiB0aGUg dGhlbWUgd2lsbCBiZSBwYWNrYWdlZCB0b2dldGhlciBpbnRvIGEgc2luZ2xlIGRvd25sb2Fk IGZpbGUgZm9yIGNvbnZlbmllbmNlLjwvcD4KCgk8cD5UaGUgZmlsZW5hbWUgaXMgZ292ZXJu ZWQgYnkgdGhlIDxlbT5GaWxlbmFtZSBmb3JtYXQ8L2VtPiBwcmVmZXJlbmNlLjwvcD4KCgk8 aDIgaWQ9ImRlbGV0ZSI+RGVsZXRlIGEgdGhlbWU8L2gyPgoKCTxwPkhpdCB0aGlzIChhbmQg Y29uZmlybSB5b3UgYXJlIHN1cmUpIHRvIHJlbW92ZSB0aGUgZW50aXJlIHRoZW1lIGZvbGRl ciBhbmQgY29udGVudHMgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uIDxzcGFuIGNsYXNzPSJpbXBv cnRhbnQiPlRoaXMgaXMgbm90IHVuZG9hYmxlLCBzbyBiZSBjYXJlZnVsPC9zcGFuPi48L3A+ CgoJPGgyIGlkPSJlZGl0X3RoZW1lIj5FZGl0IGEgdGhlbWU8L2gyPgoKCTxwPkEgdGhlbWUg aXMgYSBjb2xsZWN0aW9uIG9mIGZpbGVzLiBUaGUgZmlsZXMgYWxsIHJlc2lkZSBpbiB0aGVp ciBvd24gc2VsZi1jb250YWluZWQgZGlyZWN0b3J5IHVuZGVyIDxjb2RlPnRleHRwYXR0ZXJu L3RoZW1lPC9jb2RlPi4gVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBpcyB0aGUgbmFtZSBv ZiB5b3VyIHRoZW1lLCBoZW5jZSB0aGUgcmVhc29uIGl0IGNhbm5vdCBjb250YWluIGFueSBv YnNjdXJlIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBiZSBpbnZhbGlkIGluIHRoZSBmaWxlc3lz dGVtIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IHZhcmlhYmxlcy48L3A+CgoJ PHA+V2hlbiB5b3UgY2xpY2sgJiM4MjE2O0VkaXQmIzgyMTc7IHlvdSB3aWxsIGJlIHRha2Vu IHRvIGEgc2NyZWVuIHRoYXQgYWxsb3dzIHlvdSB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHRo ZW1lLiBUaGUgRWRpdCBzY3JlZW4gaXMgYnJva2VuIGludG8gdGhyZWUgdmVydGljYWwgcGFy dHMsIGFzIGZvbGxvd3M6PC9wPgoKCTxoMyBpZD0iZWRpdF9pbWciPkltYWdlIGhhbmRsaW5n PC9oMz4KCgk8cD5FYWNoIHRoZW1lIGNhbiBjb250YWluIGFuIG9wdGlvbmFsIHRodW1ibmFp bC4gVGhpcyBpcyBhbiBpbWFnZSBvZiAyNjAmIzIxNTsxNTBweCBpbiBzaXplLCBjYWxsZWQg PGNvZGU+c2NyZWVuc2hvdC5wbmc8L2NvZGU+IChvciA8Y29kZT4uanBnPC9jb2RlPiwgPGNv ZGU+LmdpZjwvY29kZT4sIGV0YykgaW4geW91ciB0aGVtZSBkaXJlY3RvcnkuIE5vdGUgaXQg d2lsbCBiZSBzcXVhc2hlZCAvIHN0cmV0Y2hlZCB0byBmaXQgeW91ciB0aHVtYm5haWwgZGlt ZW5zaW9ucyBzZXQgaW4gdGhlIHBsdWdpbiBwcmVmcy48L3A+CgoJPHA+T3RoZXIgaW1hZ2Vz IGZvciB1c2UgaW4gPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gcnVsZXMgY2FuIGFs c28gYmUgYWRkZWQgdG8gYSB0aGVtZS4gQnJvd3NlIGZvciBhbiBpbWFnZSBhbmQgc2VsZWN0 IGl0LCB0aGVuIGNsaWNrIDxzdHJvbmc+VXBsb2FkPC9zdHJvbmc+IHRvIGFkZCBpdCB0byB0 aGUgdGhlbWUuIFlvdSBjYW4gY3VycmVudGx5IG9ubHkgdXBsb2FkIG9uZSBpbWFnZSBhdCBh IHRpbWUsIHRob3VnaCB5b3UgY2FuIGRlbGV0ZSBvbmUgb3IgbW9yZSBhdCBvbmNlIGJ5IFNo aWZ0L0N0cmwgY2xpY2tpbmcgdGhlIG9uZXMgeW91IHdpc2ggdG8gcmVtb3ZlIGFuZCBoaXR0 aW5nIHRoZSAmIzgyMTY7eCYjODIxNzsgYnV0dG9uLiA8c3BhbiBjbGFzcz0iaW1wb3J0YW50 Ij5XYXJuaW5nOiBmaWxlcyB3aWxsIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHksIHdpdGhvdXQg Y29uZmlybWF0aW9uLjwvc3Bhbj48L3A+CgoJPHA+VGhlIGJlc3Qgd2F5IHRvIHJlZmVyIHRv IGltYWdlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBpbiBzdHlsZXNoZWV0cyBp cyB3aXRoIGEgcmVsYXRpdmUgcGF0aDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUg Y2xhc3M9ImJsb2NrIj4ubXlTdHlsZSB7CiAgIGJhY2tncm91bmQ6IHVybChteS1pbWFnZS5n aWYpOwp9CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImVkaXRfY29udGVudCI+Q29udGVudDwv aDM+CgoJPHA+VGhlIGNlbnRyYWwgcGFuZSBpcyB3aGVyZSB5b3UgZWRpdCB0aGUgY29udGVu dHMgb2YgdGhlIGZpbGVzIGluIHlvdXIgdGhlbWUuIFRoZSBzbWFsbCBlZGl0IGJveCBhdCB0 aGUgdG9wIGlzIHRoZSBmaWxlbmFtZSBhbmQgdGhlIGxhcmdlIHRleHQgYXJlYSBpcyBpdHMg Y29udGVudC4gQ2xpY2sgPHN0cm9uZz5TYXZlPC9zdHJvbmc+IHRvIGNvbW1pdCBjaGFuZ2Vz LiBZb3UgbWF5IGZyZWVseSByZW5hbWUgYW55IGZpbGUgeW91IGFyZSBlZGl0aW5nLjwvcD4K Cgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5JbXBvcnRhbnQ6IGlmIHlvdSBzZWxlY3QgYSBmaWxl LCBlZGl0IGl0LCByZW5hbWUgaXQsIGFuZCBjbGljayA8c3Ryb25nPlNhdmU8L3N0cm9uZz4g eW91IHdpbGwgb3ZlcndyaXRlIHdoYXRldmVyIHdhcyBpbiB0aGUgcHJldmlvdXMgZmlsZSAm IzgyMTI7IGV2ZW4gaWYgeW91IGVtcHR5IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dGFyZWEg aW4gYW4gZWZmb3J0IHRvIG1ha2UgYSAmIzgyMjA7bmV3JiM4MjIxOyBvbmUuIElmIHlvdSB3 aXNoIHRvIGNyZWF0ZSBhIG5ldyBmaWxlLCBpdCBpcyBzYWZlciB0byBjbGljayB0aGUgPHN0 cm9uZz5OZXcgZmlsZTwvc3Ryb25nPiBidXR0b24gaW4gdGhlIHJpZ2h0IGhhbmQgY29sdW1u IHRvIGVuc3VyZSB5b3UgYXJlIG5vdCBlZGl0aW5nIGFuIGV4aXN0aW5nIGZpbGUgYnkgbWlz dGFrZS48L3A+CgoJPHA+SXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCBmaWxlIHBlcm1p c3Npb25zIHZhcnkgZnJvbSBob3N0IHRvIGhvc3QuIElmIHlvdSB0cnkgYW5kIHNhdmUgYSB0 aGVtZSBmaWxlIGFuZCByZWNlaXZlIGEgeXVra3kgd2FybmluZyBtZXNzYWdlIGFib3V0IG5v dCBiZWluZyBhYmxlIHRvIHdyaXRlIHRoZSBmaWxlLCB0cnkgaW5jcmVhc2luZyB0aGUgcGVy bWlzc2lvbnMgb24gdGhlIHRoZW1lIGRpcmVjdG9yeSBhbmQgYWxsIGZpbGVzIGJlbmVhdGgg aXQuPC9wPgoKCTxwPlRoZSB0aGVtZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgaW4gVHhwIHdp dGggPGNvZGU+NjQ0PC9jb2RlPiBwZXJtaXNzaW9ucyB3aGljaCBzaG91bGQgYmUgZmluZSBm b3IgYSBzdGFuZGFyZCBob3N0LiBTb21lIHNoYXJlZCBob3N0aW5nIGNvbXBhbmllcyAmIzgy MTI7IGFuZCB0aGVzZSBhcmUgdXN1YWxseSB0aGUgb25lcyB0aGF0IHRlbGwgeW91IHRvIHNl dCB5b3VyIDxjb2RlPmZpbGVzPC9jb2RlPiBhbmQgPGNvZGU+aW1hZ2VzPC9jb2RlPiBkaXJl Y3RvcmllcyB0byA3NzcgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIHdyaXRhYmxlIGJ5IFR4cCAm IzgyMTI7IHJ1biBBcGFjaGUvUEhQIGluIGEgZGlmZmVyZW50IHdheSB3aGljaCBtaWdodCBy ZXF1aXJlIGhpZ2hlciBwZXJtaXNzaW9ucyBpbiBvcmRlciB0byB3cml0ZSB0byB0aGUgdGhl bWUgZGlyZWN0b3J5LiBUaGlzIGlzIHVuZm9ydHVuYXRlbHkgb3V0c2lkZSB0aGUgc2NvcGUg b2YgdGhlIHBsdWdpbiBzbyB5b3Ugd2lsbCBoYXZlIHRvIGV4cGVyaW1lbnQgaWYgaXQgY2F1 c2VzIHlvdSBwcm9ibGVtcy48L3A+CgoJPGgzPkZpbGUgaGFuZGxpbmc8L2gzPgoKCTxwPlRo aXMgY29sdW1uIGJlZ2lucyB3aXRoIGEgc2VsZWN0IGxpc3Qgb2YgYWxsIGluc3RhbGxlZCB0 aGVtZXM7IHRoZSBjdXJyZW50IHRoZW1lIHNlbGVjdGVkLiBDaGFuZ2luZyB0aGUgaXRlbSBo ZXJlIHdpbGwgaW1tZWRpYXRlbHkgYWxsb3cgeW91IHRvIGVkaXQgYW5vdGhlciB0aGVtZS4g VGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB5b3UgYXJlIGNvcHlpbmcgYW5kIHBhc3RpbmcgZmls ZXMgZnJvbSBvbmUgdGhlbWUgdG8gYW5vdGhlciBhbmQgc2F2ZXMgeW91IGhhdmluZyB0byBn byBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0IGZpcnN0LjwvcD4KCgk8cD5CZW5lYXRoIHRoYXQg YXJlIHR3byBidXR0b25zOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5O ZXcgZmlsZTwvc3Bhbj4gOiBDcmVhdGUgYSBuZXcsIGVtcHR5IGZpbGUgaW4geW91ciB0aGVt ZSBkaXJlY3RvcnkuIE5vdGhpbmcgaXMgYWN0dWFsbHkgY3JlYXRlZCB1bnRpbCB5b3UgaGl0 IDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiBidXQgdXNpbmcgdGhpcyBidXR0b24gZW5zdXJlcyB5 b3UgYmVnaW4gd2l0aCBhIGNsZWFuIHNsYXRlIGFuZCBkb24mIzgyMTc7dCBhY2NpZGVudGFs bHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmaWxlIHlvdSB3ZXJlIGVkaXRpbmc8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWUgbGlzdDwvc3Bhbj4gOiBBIHNob3J0Y3V0 IGJhY2sgdG8gdGhlIG1haW4gdGhlbWUgbGlzdCAoZXF1aXZhbGVudCB0byBjbGlja2luZyB0 aGUgPGVtPkFkbWluIHRoZW1lczwvZW0+IHRhYik8L2xpPgoJPC91bD4KCgk8cD5CZWxvdyB0 aG9zZSBidXR0b25zIGFyZSB1cCB0byBmb3VyIHNlY3Rpb25zIGNvbnRhaW5pbmcgYWxsIHRo ZSAobm9uLWltYWdlKSBmaWxlcyB0aGF0IG1ha2UgdXAgeW91ciB0aGVtZS4gQ2xpY2sgYSBm aWxlbmFtZSB0byBsb2FkIGl0IGludG8gdGhlIGNlbnRyYWwgdGV4dCBhcmVhIGZvciBlZGl0 aW5nLjwvcD4KCgk8aDQgaWQ9ImVkaXRfY3NzIj5TdHlsZXNoZWV0czwvaDQ+CgoJPHAgY2xh c3M9ImltcG9ydGFudCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNw YW4gY2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uY3NzPC9jb2RlPjwv cD4KCgk8cD5UaGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgeW91ciB0aGVtZS4gQWRkIGFzIG1h bnkgc2hlZXRzIGFzIHlvdSBsaWtlIGFuZCBsb2FkIHRoZW0gZnJvbSB5b3VyIDxzcGFuIGNs YXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUocykuPC9wPgoKCTxoNCBpZD0iZWRpdF9jc3Mi PlN0eWxlcGxhdGVzPC9oND4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5GaWxlcyBjYW4gYmUg YW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4g ZW5kIGluIDxjb2RlPi5zc2M8L2NvZGU+PC9wPgoKCTxwPkEgc3BlY2lhbCB2ZXJzaW9uIG9m IGEgc3R5bGVzaGVldCB0aGF0IGFsbG93cyB5b3UgdG8gZGVmaW5lIGNvbnN0YW50cyB0aHJv dWdob3V0IHlvdXIgc2hlZXQuIFdyaXRlIHlvdXIgc3R5bGVzaGVldCBpbiBleGFjdGx5IHRo ZSBzYW1lIHdheSBhcyB5b3Ugd291bGQgbm9ybWFsbHkgYnV0IHdoZXJlIHlvdSBmaW5kIHlv dXJzZWxmLCBmb3IgZXhhbXBsZSwgdXNpbmcgdGhlIHNhbWUgY29sb3IgdmFsdWUgcmVwZWF0 ZWRseSBvciB0aGUgc2FtZSBydWxlcyBibG9jaywgeW91IGNhbiBzYXZlIHlvdXJzZWxmIHR5 cGluZyBieSB1c2luZyBjb25zdGFudHM6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+QGJyYW5kaW5nOiAjMTIzNDU2OwojaGVhZGVyIHsKICBjb2xvcjog QGJyYW5kaW5nOwp9CmgyIHsKICBjb2xvcjogQGJyYW5kaW5nOwp9CjwvY29kZT48L3ByZT4K Cgk8cD5Zb3UgY2FuIGFsc28gc3BlY2lmeSB3aG9sZSBydWxlIGJsb2NrcyBsaWtlIHRoaXMg KDxlbT5Ob3RlIHRoZSBjb2xvbiBhZnRlciB0aGUgYmxvY2sgbmFtZTwvZW0+KSA6PC9wPgoK PHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+QG15X2Jsb2NrOiB7CiAg bWFyZ2luOjAgMjBweDsKICBib3JkZXI6M3B4IHNvbGlkICM5OTk7CiAgZm9udC1zaXplOjEy MCU7Cn0KI2hlYWRlciB7CiAgY29sb3I6IEBicmFuZGluZzsKICBwb3NpdGlvbjpyZWxhdGl2 ZTsKICBAbXlfYmxvY2s7Cn0KaDIgewogIEBteV9ibG9jazsKfQo8L2NvZGU+PC9wcmU+CgoJ PHA+SWYgeW91IHB1dCBhbGwgeW91ciBjb25zdGFudHMgYXQgdGhlIHRvcCBvZiB0aGUgPGNv ZGU+LnNzYzwvY29kZT4gZmlsZSB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBnZW5l cmF0ZWQgY3NzIGZpbGUuPC9wPgoKCTxwPldoZW4geW91IHNhdmUgYSA8Y29kZT4uc3NjPC9j b2RlPiBmaWxlLCBhIGNvcnJlc3BvbmRpbmctbmFtZWQgPGNvZGU+LmNzczwvY29kZT4gZmls ZSB3aWxsIGFsc28gYmUgY3JlYXRlZC4gVGhlIHR3byB3aWxsIGJlIGtlcHQgaW4gc3luYyBh cyBmYXIgYXMgcHJhY3RpY2FibGUgKGV2ZW4gaWYgeW91IHJlbmFtZSB0aGUgb3JpZ2luYWwg ZmlsZSkuIFdoZW4gaXQgY29tZXMgdG8gZGVsZXRpb24gdGhvdWdoLCB0aGV5IGFyZSB0cmVh dGVkIHNlcGFyYXRlbHkuIFRoaXMgYWxsb3dzIHlvdSB0byBlaXRoZXIga2VlcCB0aGUgPGNv ZGU+LnNzYzwvY29kZT4gZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIGFyY2hpdmUgb3IgcmVt b3ZlIGl0IHByaW9yIHRvIGV4cG9ydC48L3A+CgoJPGg0IGlkPSJlZGl0X2pzIj5KYXZhc2Ny aXB0PC9oND4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5GaWxlcyBjYW4gYmUgYW55IHZhbGlk IGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4gZW5kIGluIDxj b2RlPi5qczwvY29kZT48L3A+CgoJPHA+QW55IHRyaWNrZXJ5IHlvdSBtYXkgd2lzaCB0byBl bXBsb3kgaW4geW91ciB0aGVtZSBjYW4gYmUgd3JpdHRlbiBpbiB0aGVzZSBmaWxlcy4gUmVt ZW1iZXIgdGhhdCBqUXVlcnkgaXMgbG9hZGVkIGJ5IGRlZmF1bHQgb24gdGhlIGFkbWluIHNp ZGUgc28geW91IGNhbiBwbGF5IHdpdGggdGhhdC48L3A+CgoJPGg0IGlkPSJlZGl0X3BocCI+ PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48L2g0PgoKCTxwIGNsYXNzPSJpbXBvcnRh bnQiPk9uZSBmaWxlIDxzdHJvbmc+bXVzdDwvc3Ryb25nPiBiZSBuYW1lZCBleGFjdGx5IHRo ZSBzYW1lIGFzIHlvdXIgdGhlbWUsIGkuZS4gPGNvZGU+c21kX0JsdWVNZWFuaWUucGhwPC9j b2RlPi4gQW55IG90aGVyIGZpbGVzIG11c3QgZW5kIGluIDxjb2RlPi5waHA8L2NvZGU+PC9w PgoKCTxwPkNvbnN1bHQgdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lr aS9pbmRleC5waHA/dGl0bGU9Q3JlYXRpbmdfYW5fQWRtaW5fU2lkZV9UaGVtZSI+QWRtaW4g U2lkZSB0aGVtZSBndWlkZTwvYT4gb24gVGV4dGJvb2sgZm9yIHRoZSBydWxlcyBvbiBtYWtp bmcgdGhlbWVzLiBOb3RlIHRoYXQgY29ycnVwdCB0aGVtZXMgYXJlIGRldGVjdGVkIHRvIHRo ZSBiZXN0IG9mIHRoZSBwbHVnaW4mIzgyMTc7cyBhYmlsaXR5IGFuZCB5b3UgbWF5IG5vdCBl eHBvcnQsIGJhc2Ugb3Igc3dpdGNoIHRvIGFueSB0aGVtZSB0aGF0IGlzIGJyb2tlbi48L3A+ CgoJPHA+SWYgeW91IHJlbmFtZSB0aGUgdGhlbWUmIzgyMTc7cyBjb3JlIDxzcGFuIGNsYXNz PSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgKGkuZS4gdGhlIG9uZSB3aXRoIHRoZSBzYW1lIG5h bWUgYXMgdGhlIHRoZW1lIGZvbGRlciBpdHNlbGYpIHRoZSBwbHVnaW4gd2lsbCBhdHRlbXB0 IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGFzIHdlbGw7IGVzc2VudGlhbGx5IHJlbmFtaW5n IHRoZSB0aGVtZS4gVGhpcyBzaG91bGQgcHJldmVudCBhIHRoZW1lIGZyb20gYmVjb21pbmcg dW5lZGl0YWJsZSwgYnV0IGl0IGlzIHVwIHRvIHlvdSB0byBrZWVwIHRoZSBjbGFzcyBuYW1l IGluIHN5bmMgd2l0aCB0aGUgZmlsZSBuYW1lLiBJZiBhdCBhbnkgdGltZSB5b3UgZ28gYmFj ayB0byB0aGUgdGhlbWUgbGlzdC9ncmlkIGFuZCBmaW5kIGEgdGhlbWUgZXhpc3RzIGJ1dCBo YXMgbm8gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGl0LCBjaGFuY2VzIGFyZSBpdCYj ODIxNztzIGJlY2F1c2UgdGhlIGNsYXNzIG5hbWUgZG9lc24mIzgyMTc7dCBtYXRjaCB0aGUg dGhlbWUmIzgyMTc7cyBkaXJlY3RvcnkgbmFtZS4gSnVzdCBoaXQgW0VkaXRdIGFuZCBhbHRl ciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSB0byBicmluZyBldmVy eXRoaW5nIGJhY2sgb24gdHJhY2suPC9wPgoKCTxoNCBpZD0iZWRpdF9vdGhlciI+T3RoZXJz PC9oND4KCgk8cD5BbnkgZmlsZXMgdGhhdCBhcmUgbm90IG9mIHRoZSBhYm92ZSB0aHJlZSB0 eXBlcyAoYW5kIGFyZSBub3QgaW1hZ2VzKSBhcHBlYXIgaGVyZS4gWW91IHdpbGwgcHJvYmFi bHkgbmV2ZXIgc2VlIHRoaXMgc2VjdGlvbi4gSWYgeW91IGRvIHRyeSB0byBjcmVhdGUgYSBm aWxlIHRoYXQgaXMgbm90IG9mIHRoZSBhYm92ZSB0aHJlZSB0eXBlcywgYSB3YXJuaW5nIHdp bGwgYmUgaXNzdWVkLiBZb3UgbXVzdCBoaXQgPGVtPlNhdmU8L2VtPiBhZ2FpbiB0byBjb25m aXJtIHlvdSByZWFsbHkgd2lzaCB0byBjcmVhdGUgdGhlIGZpbGUuPC9wPgoKCTxoMyBpZD0i YWJvdXQiPk1hbmlmZXN0PC9oMz4KCgk8cD5JbiB5b3VyIG1haW4gPHNwYW4gY2xhc3M9ImNh cHMiPlBIUDwvc3Bhbj4gZmlsZSBpcyBhIGZ1bmN0aW9uIGNhbGxlZCA8Y29kZT5tYW5pZmVz dCgpPC9jb2RlPiB3aGljaCBjb250YWlucyBpbmZvIGFib3V0IHlvdSBhbmQgeW91ciB0aGVt ZS4gRWRpdCB0aGUgdmFsdWVzIGhlcmUgdG8gc3RhbXAgeW91ciBtYXJrIG9uIHRoZSB0aGVt ZS4gTm90ZSB0aGF0IGlmIHlvdXIgZGVzY3JpcHRpb24gY29udGFpbnMgYXBvc3Ryb3BoZXMg dGhleSBtdXN0IGJlIDxlbT5lc2NhcGVkPC9lbT4gYnkgcHJlY2VkaW5nIHRoZW0gd2l0aCBh IHNpbmdsZSBiYWNrc2xhc2ggPGNvZGU+XDwvY29kZT4uIGUuZy48L3A+Cgo8cHJlPjxjb2Rl PiYjMzk7ZGVzY3JpcHRpb24mIzM5OyA9Jmd0OyAmIzM5O0RvblwmIzM5O3QgZmVhciB0aGUg cmVhcGVyISYjMzk7LAo8L2NvZGU+PC9wcmU+CgoJPGgyIGlkPSJwZXJ1c2VyIj5QZXItdXNl ciB0aGVtZSBzZWxlY3Rpb248L2gyPgoKCTxwPklmIGFuIGFkbWluaXN0cmF0b3IgY2hvb3Nl cyB0byBhbGxvdyBwZXItdXNlciB0aGVtZXMsIGEgbmV3IHRhYiBhcHBlYXJzIHVuZGVyIHRo ZSBBZG1pbiB0YWIgb2YgYWxsIHVzZXJzIChleGNlcHQgYWRtaW5pc3RyYXRvcnMpLiBUaGlz IHNpbXBseSBkaXNwbGF5cyBhbGwgYXZhaWxhYmxlIHRoZW1lcyAmIzgyMTI7IG9uZXMgdGhh dCB0aGUgYWRtaW5pc3RyYXRvciBoYXMgZXhwbGljaXRseSBhbGxvd2VkLjwvcD4KCgk8cD5D bGlja2luZyBhIHRoZW1lIG5hbWUgb3IgdGh1bWJuYWlsIHdpbGwgaW1tZWRpYXRlbHkgc3dp dGNoIHRvIHRoYXQgdGhlbWUgdW50aWwgdGhlIHVzZXIgY2hvb3NlcyBhbm90aGVyIG9yIHRo ZSBhZG1pbmlzdHJhdG9yIGNoYW5nZXMgdGhlbWUgc3lzdGVtLjwvcD4KCgk8aDIgaWQ9ImF1 dGhvciI+QXV0aG9yIGFuZCBjcmVkaXRzPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3Rl ZmRhd3Nvbi5jb20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+LjwvcD4KCgk8cD5UaGlzIHBs dWdpbiB3b3VsZCBub3QgaGF2ZSBleGlzdGVkIHdpdGhvdXQgdGhlIGRlZGljYXRpb24sIGlk ZWFzIGFuZCBnZW5pdXMgb2YgdGhlIFRleHRwYXR0ZXJuIGRldmVsb3BtZW50IHRlYW0sIGVz cGVjaWFsbHkgUm9iZXJ0IFdldHpsbWF5ciBmb3IgdGhlIHRoZW1lIHN1cHBvcnQuIFBsdXMg b2YgY291cnNlIHRoZSBhcm15IG9mIGJldGEgdGVzdGVycywgaWRlYXMgaGFtc3RlcnMgYW5k IHRpcmVsZXNzIHRoZW1lIGFkdm9jYXRlcywgbW9zdCBub3RhYmx5IFN0dWFydCBCdXRjaGVy LCBEYWxlIENoYXBtYW4sIERhdmUgRGVTYW5kcm8sIGFuZCBNaWtlIERlbm5pcy48L3A+CgoJ PHA+SSBhbSBhbHNvIGluZGVidGVkIHRvIHRoZSBsaWJyYXJpZXMgaG9zdGVkIGF0IDxhIGhy ZWY9Imh0dHA6Ly9waHBjbGFzc2VzLm9yZy8iPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3Nw YW4+IENsYXNzZXM8L2E+IHRoYXQgZW5hYmxlZCBuYXRpdmUgY29tcHJlc3Npb24gYW5kIGRl Y29tcHJlc3Npb24gb2YgdmFyaW91cyB0eXBlcy4gVGhlIGhhcmQgd29yayBvZiBEZXZpbiBE b3VjZXR0ZSBhbmQgQWxleGFuZHJlIFRlZGVzY2hpIHJlYWxseSBhZGRlZCB0aGUgaWNpbmcg b24gdGhlIGNha2UgZm9yIHRoaXMgcGx1Z2luLjwvcD4KCgk8cD5LdWRvcyBhbmQgdGhhbmtz IHRvIHlvdSBhbGwuPC9wPgoKCTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoK CTx1bD4KCQk8bGk+MTIgSnVuIDIwMDkgfCAwLjEgfCBJbml0aWFsIHB1YmxpYyBiZXRhPC9s aT4KCQk8bGk+MDMgU2VwIDIwMDkgfCAwLjExIHwgSW1wcm92ZWQgVGV4dGdhcmRlbiB0aGVt ZSBmZWVkIGFuZCBsaW5rcyA7IGltcHJvdmVkIGZpbGUgc3VwcG9ydCAoYm90aCB0aGFua3Mg dGhlYm9tYnNpdGUpIDsgbWFkZSBnbG9iYWwgdGhlbWUgbW9yZSBvYnZpb3VzIDsgYWx0ZXJl ZCBwcmVmcyB0YWIgYSBiaXQgOyBhZGRlZCA8Y29kZT4uc3NjPC9jb2RlPiBzdXBwb3J0IDsg aWdub3JlZCAuc3ZuIHN1YmRpcnMgKGFsbCB0aGFua3MgcGllbWFuKSA7IGltcHJvdmVkIHdh cm5pbmcgbWVzc2FnZXMgOyBtaXNjIGZpeGVzIGFuZCBob3VzZWtlZXBpbmc8L2xpPgoJCTxs aT4wMiBOb3YgMjAwOSB8IDAuMTIgfCBSZWR1Y2VkIHRoZW1lIGZlZWQgY2x1dHRlciBpbiB0 aGUgcHJlZnMgdGFibGU8L2xpPgoJCTxsaT4wNCBOb3YgMjAwOSB8IDAuMTMgfCBSZW1vdmVk IGVyZWdfcmVwbGFjZSB0byBjb25mb3JtIHdpdGggUEhQNS4zKyAodGhhbmtzIHRoZWJvbWJz aXRlKSA7IGNoYW5nZWQgJiM4MjE2O2dsb2JhbCYjODIxNzsgdG8gJiM4MjE2O2RlZmF1bHQm IzgyMTc7IDsgZml4ZWQgcm9ndWUgdW50cmFuc2xhdGVkIHN0cmluZzwvbGk+CgkJPGxpPjA5 IE5vdiAyMDA5IHwgMC4xNCB8IE1vdmVkIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ cyBpbiBsaW5lIHdpdGggVGV4dGdhcmRlbiBsYXlvdXQgYWx0ZXJhdGlvbnMgKHRoYW5rcyBm b3IgdGhlIGhlYWRzdXAgdGhlYm9tYnNpdGUpIDsgbWFkZSBmZWVkcyBtb3JlIHJvYnVzdCBp biB0aGUgZXZlbnQgVGV4dGdhcmRlbiBpcyBkb3duIC8gdW5kZXIgbWFpbnRlbmFuY2UgKHRo YW5rcyBtbGFyaW5vKTwvbGk+CgkJPGxpPjA5IEZlYiAyMDEwIHwgMC4yIHwgTmF0aXZlIHN1 cHBvcnQgZm9yIHppcCBpbXBvcnRpbmcgYW5kIGV4cG9ydGluZyAoYWxtb3N0KSBpcnJlc3Bl Y3RpdmUgb2YgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBlbnZpcm9ubWVu dCA7IHppcCBpcyBub3cgdGhlIGRlZmF1bHQgc3lzdGVtIDsgYmV0dGVyIG5vdGlmaWNhdGlv biBvZiBzdXBwb3J0ZWQgY29tcHJlc3Npb24gdHlwZXMgYW5kIG1vcmUgcm9idXN0IHJlamVj dGlvbiBpZiBzb21ldGhpbmcgaXMgbWlzc2luZzwvbGk+CgkJPGxpPjEwIEZlYiAyMDEwIHwg MC4yMSB8IEZpeGVkIGJ6aXAyIHdhcm5pbmcgKHRoYW5rcyB0aGVib21ic2l0ZSkgOyBmaXhl ZCByZWN1cnNpdmUgbWtkaXIgcHJvYmxlbSB3aXRoIGJ6aXAyIGZpbGVzICh0aGFua3MgPHNw YW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gbWFudWFsIGNvbW1lbnRzKSA7IGZpeGVkIHJv Z3VlIHRlbXAgZmlsZSBsZWZ0IGJlaGluZCB3aXRoIHppcCBpbXBvcnQ8L2xpPgoJCTxsaT4x NSBGZWIgMjAxMCB8IDAuMjIgfCBXaGVuIHJlbmFtaW5nIHRoZSBjb3JlIHRoZW1lIDxzcGFu IGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUsIGF1dG9tYXRpY2FsbHkgcmVuYW1lIGRp cmVjdG9yeSB0b28gKHRoYW5rcyBmbG9vZGZpc2gpPC9saT4KCQk8bGk+MjggRmViIDIwMTAg fCAwLjIzIHwgUnVkaW1lbnRhcnkgdmFsaWRhdGlvbiBvZiB6aXAgZmlsZSBjb250ZW50cyAo dGhhbmtzIFR1dHNfYW5kX1RpcHBzKTsgZml4ZWQgZXhwb3J0IG5vdGlmaWNhdGlvbjwvbGk+ CgkJPGxpPjA2IEF1ZyAyMDEwIHwgMC4yNCB8IEZpeGVkIDxjb2RlPmZzb2Nrb3BlbigpPC9j b2RlPiBhbmQgdW5kZWZpbmVkIGluZGV4IHdhcm5pbmdzIGlmIG5vdCBjb25uZWN0ZWQgdG8g dGhlIEludGVybmV0IC8gcHJlZnMgbm90IGluc3RhbGxlZDwvbGk+CgkJPGxpPjAxIE5vdiAy MDEwIHwgMC4yNSB8IEJldHRlciB0aGVtZSBpbnRlZ3JhdGlvbiAoY29sb3VycywgZXRjKSA7 IGZpeGVkIGR1cGxpY2F0ZSBwYWdlIHJlbmRlcnMgb24gZWRpdCBzY3JlZW4gYW5kIGFkZGVk IGZpbGVuYW1lIGZvcm1hdCBvcHRpb24gKGJvdGggdGhhbmtzIG1hdmVyaWNrKTwvbGk+CgkJ PGxpPjIxIEZlYiAyMDExIHwgMC4yNiB8IEZpeGVkIGltcG9ydCBidWcgaWYgbW9yZSB0aGFu IG9uZSBkb3QgaW4gZmlsZW5hbWUgKHRoYW5rcyBwaGlsd2FyZWhhbSk8L2xpPgoJCTxsaT48 ZGVsPjA4IEp1biAyMDExIHwgMC4yNyB8IEZpeGVkIGVycm9uZW91cyBzdHJpcHBpbmcgb2Yg c2xhc2hlcyBvbiBzYXZlIDsgYWRkZWQgdHhwIHBhdGggcHJlZiAodGhhbmtzIG1hbmlxdWkp PC9kZWw+IDxzdHJvbmc+PHNwYW4gY2xhc3M9ImNhcHMiPlZFUlNJT048L3NwYW4+IDxzcGFu IGNsYXNzPSJjYXBzIj5SRVZPS0VEPC9zcGFuPjwvc3Ryb25nPjwvbGk+CgkJPGxpPjI4IFNl cCAyMDExIHwgMC4yOCB8IEZpeGVkIGVycm9uZW91cyBzdHJpcHBpbmcgb2Ygc2xhc2hlcyBv biBzYXZlPC9saT4KCQk8bGk+MjkgSmFuIDIwMTIgfCAwLjMwIHwgTW92ZWQgKGRlKWNvbXBy ZXNzaW9uIGFsZ29yaXRobXMgdG8gc21kX2NydW5jaGVyczogbm93IGEgcmVxdWlyZWQgbGli cmFyeSBmb3IgdGhpcyBwbHVnaW4gaWYgeW91IHdpc2ggdG8gaW1wb3J0L2V4cG9ydDwvbGk+ CgkJPGxpPjI5IEphbiAyMDEyIHwgMC4zMSB8IEQmIzgyMTc7b2gsIG1vdmVkIDxjb2RlPnNt ZF9ta2Rpcl9yZWN1cnNpdmUoKTwvY29kZT4gdG8gc21kX2NydW5jaGVycyB0b288L2xpPgoJ PC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxl IHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRf aGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVy IE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4Yzsg Y29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1h bDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHgg MTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9udDogMjJweCBH ZW9yZ2lhLCBzZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9o ZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHgg MCAwOyBmb250OiAxOHB4IEdlb3JnaWEsIHNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6 IGJvbGQgMTNweCBHZW9yZ2lhLCBzZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2lu OiAyMHB4IDAgMDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQojc21kX2hlbHAgaDQg eyBmb250OiBib2xkIDEycHggR2VvcmdpYSwgc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7 IG1hcmdpbjogMTBweCAwIDA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9o ZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNr Z3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxl IHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyBi b3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgg eyBib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbTsgfQojc21kX2hlbHAgdWwg eyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29s b3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQoj c21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KI3NtZF9oZWxwIGRsIGRkIHsg bWFyZ2luOjJweCAxNXB4OyB9CiNzbWRfaGVscCBkbCBkZDpiZWZvcmUgeyBjb250ZW50OiAi XDIwMjJcMDBhMCI7IH0KI3NtZF9oZWxwIGRsIGRkIGRsIHsgcGFkZGluZzogMCAxNXB4OyB9 Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7 czozMjoiYmJjNTVjYmYwM2ExOWNhOGEzZDljOGFiNmU0YWFhMDYiO30=