# Name: smd_featured v0.31 # Type: Admin/Client side plugin # Quickly label and display featured articles for your site's home / landing pages # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEyOiJzbWRfZmVhdHVyZWQiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMzEiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjgwOiJRdWlja2x5IGxhYmVsIGFuZCBkaXNwbGF5IGZlYXR1cmVkIGFydGljbGVzIGZvciB5 b3VyIHNpdGUncyBob21lIC8gbGFuZGluZyBwYWdlcyI7czo0OiJjb2RlIjtzOjMxNzU4OiJp ZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICRzbWRfZmVhdHVyZWRf ZXZlbnQsICRzbWRfZmVhdHVyZWRfdGV4dGlsZV9vcHRzLCAkc21kX2ZlYXR1cmVkX3N0eWxl czsNCg0KCSRzbWRfZmVhdHVyZWRfZXZlbnQgPSAnc21kX2ZlYXR1cmVkJzsNCgkkc21kX2Zl YXR1cmVkX3ByaXZzID0gZ2V0X3ByZWYoJ3NtZF9mZWF0dXJlZF9wcml2cycsICcxLDInKTsN Cgkkc21kX2ZlYXR1cmVkX3ByZWZfcHJpdnMgPSAnMSwyJzsNCgkkc21kX2ZlYXR1cmVkX3Rl eHRpbGVfb3B0cyA9IGFycmF5KA0KCQkwID0+ICd0aXRsZScsDQoJCTEgPT4gJ2Rlc2MnLA0K CSk7DQoJJHNtZF9mZWF0dXJlZF9zdHlsZXMgPSBhcnJheSgNCgkJJ2NvbW1vbicgPT4NCiAg ICAgICAgICdoMyB7IG1hcmdpbjoxNXB4IDA7IH0NCiAgICAgICAgIGZvcm0gZmllbGRzZXQg eyBib3JkZXI6MDsgfQ0KICAgICAgICAgZm9ybSBsZWdlbmQgeyBtYXJnaW46MTJweCAwOyB9 DQogICAgICAgICAuZmllbGRzZXRfaW5uZXIgeyBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7IGJh Y2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7IGJvcmRlcjowOyB9DQogICAgICAgICBzZWxl Y3QsIGlucHV0W3R5cGU9InRleHQiXSB7IG1hcmdpbi1ib3R0b206MTJweDsgfQ0KICAgICAg ICAgaW5wdXRbdHlwZT0idGV4dCJdIHsgcGFkZGluZzozcHg7IH0NCiAgICAgICAgICNjb250 cm9sIGlucHV0LCAjY29udHJvbCBzZWxlY3QgeyBtYXJnaW46MDsgfQ0KICAgICAgICAgLnNt ZF9oaWRkZW4geyBkaXNwbGF5Om5vbmU7IH0NCiAgICAgICAgIC5zbWRfZmVhdHVyZWQgeyBi YWNrZ3JvdW5kLWNvbG9yOiNlMmRmY2U7IH0NCiAgICAgICAgIC5zbWRfZmVhdHVyZWQgYSB7 IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjojODA1NTFlOyB9DQogICAgICAgICAjc21kX2Zl YXR1cmVkX2NvbnRyb2xfcGFuZWwgeyBtYXJnaW46MCBhdXRvIDIwcHg7IHdpZHRoOjUwMHB4 OyB9DQogICAgICAgICAjc21kX2ZlYXR1cmVkX3ByZWZzIHsgbWFyZ2luLWxlZnQ6MTJweDsg fQ0KICAgICAgICAgLnNtZF9mZWF0dXJlZF9zYXZlIHsgZmxvYXQ6cmlnaHQ7IH0NCiAgICAg ICAgIC5zbWRfZmVhdHVyZWRfc3VicGFuZWwgeyBmbG9hdDpsZWZ0OyB9DQogICAgICAgICAu c21kX2ZlYXR1cmVkX3RhYmxlIHsgd2lkdGg6ODAwcHg7IG1hcmdpbjowIGF1dG8gODBweDsg fQ0KICAgICAgICAgLnNtZF9jbGVhciB7IGNsZWFyOmJvdGg7IH0NCiAgICAgICAgIC5zbWRf ZmVhdHVyZWRfdGFibGUgZGl2IHsgZmxvYXQ6bGVmdDsgd2lkdGg6e2J3fXB4OyBoZWlnaHQ6 e2JofXB4OyBib3JkZXI6MXB4IHNvbGlkICNhYWE7IHBhZGRpbmc6NHB4OyBvdmVyZmxvdzpo aWRkZW47IH0nLA0KCQknbG9hZGluZycgPT4NCiAgICAgICAgICdjb2xvcjojODA1NTFlOyB0 ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjIwMCU7IGZvbnQtc3R5bGU6aXRhbGljOyB3 aWR0aDo1MDBweDsgaGVpZ2h0OjEwMHB4OyBtYXJnaW46MCBhdXRvOyBib3JkZXI6MXB4IHNv bGlkICM3Nzc7IGJhY2tncm91bmQ6I2UyZGZjZTtkaXNwbGF5OmJsb2NrJywNCgkJJ2xvYWRp bmdfZGl2JyA9Pg0KICAgICAgICAgJ21hcmdpbi10b3A6MzBweDsnLA0KCSk7DQoNCglhZGRf cHJpdnMoJHNtZF9mZWF0dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJlZF9wcml2cyk7DQoJcmVn aXN0ZXJfdGFiKCJjb250ZW50IiwgJHNtZF9mZWF0dXJlZF9ldmVudCwgc21kX2ZlYXR1cmVk X2dUeHQoJ3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfZmVhdHVyZWRf bWFuYWdlJywgJHNtZF9mZWF0dXJlZF9ldmVudCk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF9mZWF0dXJlZF93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuc21kX2ZlYXR1cmVkJyk7 DQp9DQoNCmlmICghZGVmaW5lZCgnU01EX0ZFQVQnKSkgew0KCWRlZmluZSgiU01EX0ZFQVQi LCAnc21kX2ZlYXR1cmVkJyk7DQp9DQoNCi8vICoqKioqKioqKioNCi8vIEFETUlOIFNJREUN Ci8vICoqKioqKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX2ZlYXR1cmVkX21hbmFnZSgkZXZ0LCAkc3RwKSB7DQoJaWYgKCRzdHAgPT0gJ3NhdmVf cGFuZV9zdGF0ZScpIHsNCgkJc21kX2ZlYXR1cmVkX3NhdmVfcGFuZV9zdGF0ZSgpOw0KCX0g ZWxzZSB7DQoJCWlmKCEkc3RwIG9yICFpbl9hcnJheSgkc3RwLCBhcnJheSgNCgkJCQknc21k X2ZlYXR1cmVkX3RhYmxlX2luc3RhbGwnLA0KCQkJCSdzbWRfZmVhdHVyZWRfdGFibGVfcmVt b3ZlJywNCgkJCQknc21kX2ZlYXR1cmVkX3ByZWZzYXZlJywNCgkJCQknc21kX2ZlYXR1cmVk X3NhdmUnLA0KCQkJCSdzbWRfZmVhdHVyZWRfdGFnaXQnLA0KCQkJCSdzbWRfZmVhdHVyZWRf Y2hhbmdlX3BhZ2VieScsDQoJCQkpKSkgew0KCQkJc21kX2ZlYXR1cmVkX2xpc3QoJycpOw0K CQl9IGVsc2UgJHN0cCgpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfd2VsY29tZSgkZXZ0LCAkc3RwKSB7DQoJJG1zZyA9 ICcnOw0KCXN3aXRjaCAoJHN0cCkgew0KCQljYXNlICdpbnN0YWxsZWQnOg0KCQkJc21kX2Zl YXR1cmVkX3RhYmxlX2luc3RhbGwoMCk7DQoJCQkkbXNnID0gJ1RoYW5rcyBmb3IgaW5zdGFs bGluZyBzbWRfZmVhdHVyZWQuIFBsZWFzZSByZWFkIHRoZSBkb2NzIDotKSc7DQoJCQlicmVh azsNCgkJY2FzZSAnZGVsZXRlZCc6DQoJCQlzbWRfZmVhdHVyZWRfdGFibGVfcmVtb3ZlKDAp Ow0KCQkJYnJlYWs7DQoJfQ0KCXJldHVybiAkbXNnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9saXN0KCRtc2c9JycpIHsNCgln bG9iYWwgJHNtZF9mZWF0dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJlZF9saXN0X3BhZ2VieSwg JHNtZF9mZWF0dXJlZF90ZXh0aWxlX29wdHMsICRzbWRfZmVhdHVyZWRfc3R5bGVzOw0KDQoJ cGFnZXRvcChzbWRfZmVhdHVyZWRfZ1R4dCgndGFiX25hbWUnKSwgJG1zZyk7DQoJZXh0cmFj dChncHNhKGFycmF5KCdzbWRfZmVhdF9pZCcsICdzbWRfZmVhdF9sYWJlbCcsICdzbWRfZmVh dF9zZWFyY2hrZWVwJywgJ3NtZF9mZWF0X2ZpbHRrZWVwJywgJ3BhZ2UnKSkpOw0KDQoJaWYg KHNtZF9mZWF0dXJlZF90YWJsZV9leGlzdCgxKSkgew0KCQkkZmVhdGxpc3QgPSBzYWZlX3Jv d3MoJyonLCBTTURfRkVBVCwgJzE9MScpOw0KCQkkZmVhdGxpc3QgPSBlbXB0eSgkZmVhdGxp c3QpID8gYXJyYXkoKSA6ICRmZWF0bGlzdDsNCgkJJGVkaXRuYW1lID0gJGZlYXRfbGFiZWwg PSAkZmVhdF90aXRsZSA9ICRmZWF0X2Rlc2MgPSAnJzsNCg0KCQkkZXR5cGVzID0gJGZ0eXBl cyA9ICRmbGlzdCA9IGFycmF5KCk7DQoJCSRldHlwZXNbJyddID0gc21kX2ZlYXR1cmVkX2dU eHQoJ3VubGFiZWxsZWQnKTsNCgkJJGZ0eXBlc1snc21kX3VubGFiZWxsZWQnXSA9IHNtZF9m ZWF0dXJlZF9nVHh0KCd1bmxhYmVsbGVkJyk7DQoJCWZvcmVhY2ggKCRmZWF0bGlzdCBhcyAk aXRlbSkgew0KCQkJaWYgKGlzc2V0KCRpdGVtWydsYWJlbCddKSAmJiAhZW1wdHkoJGl0ZW1b J2xhYmVsJ10pKSB7DQoJCQkJJGZ0eXBlc1skaXRlbVsnbGFiZWwnXV0gPSAkZXR5cGVzWyRp dGVtWydsYWJlbCddXSA9ICRpdGVtWydsYWJlbCddOw0KCQkJfQ0KCQkJJGZsaXN0WyRpdGVt WydmZWF0X2lkJ11dID0gYXJyYXkoJ2xhYmVsJyA9PiAkaXRlbVsnbGFiZWwnXSwgJ3RpdGxl JyA9PiAkaXRlbVsnZmVhdF90aXRsZSddLCAndGl0bGVfaHRtbCcgPT4gJGl0ZW1bJ2ZlYXRf dGl0bGVfaHRtbCddLCAnZGVzY3JpcHRpb24nID0+ICRpdGVtWydkZXNjcmlwdGlvbiddLCAn ZGVzY19odG1sJyA9PiAkaXRlbVsnZGVzY19odG1sJ10pOw0KCQl9DQoNCgkJJGZlYXRsaXN0 ID0gJGZsaXN0Ow0KDQoJCS8vIEdldCBhZGRpdGlvbmFsIGZpbHRlcmluZyBmcm9tIGhpZGRl biBwcmVmcw0KCQkkd2hlcmUgPSBhcnJheSgnMT0xJyk7DQoJCSRzZWNsaXN0ID0gZ2V0X3By ZWYoJ3NtZF9mZWF0dXJlZF9zZWN0aW9uX2xpc3QnLCAnJyk7DQoJCWlmICgkc2VjbGlzdCkg ew0KCQkJJHdoZXJlW10gPSAiU2VjdGlvbiBJTiAoJyIuam9pbigiJywnIiwgZG9fbGlzdCgk c2VjbGlzdCkpLiInKSI7DQoJCX0NCgkJJHdoZXJlW10gPSAiU3RhdHVzIElOICg0LDUpIjsN Cg0KCQkkb3JkZXJieSA9IGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfc29ydCcsICdQb3N0ZWQg ZGVzYycsIDEpOw0KCQkkb3JkZXJxcnkgPSAoJG9yZGVyYnkpID8gJyBPUkRFUiBCWSAnLmRv U2xhc2goJG9yZGVyYnkpIDogJyc7DQoJCSRjdXJyT3JkZXIgPSBleHBsb2RlKCcgJywgJG9y ZGVyYnkpOw0KCQkkY3Vyck9yZGVyWzBdID0gKGlzc2V0KCRjdXJyT3JkZXJbMF0pKSA/ICRj dXJyT3JkZXJbMF0gOiAnUG9zdGVkJzsNCgkJJGN1cnJPcmRlclsxXSA9IChpc3NldCgkY3Vy ck9yZGVyWzFdKSkgPyAkY3Vyck9yZGVyWzFdIDogJ2Rlc2MnOw0KCQkkZGlzcGxheSA9IGdl dF9wcmVmKCdzbWRfZmVhdHVyZWRfZGlzcGxheScsICdhbGwnLCAxKTsNCg0KCQkvLyBHZW5l cmF0ZSB0aGUgZXh0cmEgY3JpdGVyaWEgaWYgaW4gbGlzdCB2aWV3DQoJCWlmICgkZGlzcGxh eT09J3BhZ2luYXRlZCcpIHsNCgkJCWlmICgkc21kX2ZlYXRfc2VhcmNoa2VlcCkgew0KCQkJ CSRpdGVtcyA9IGRvX2xpc3QoJHNtZF9mZWF0X3NlYXJjaGtlZXAsICcgJyk7DQoJCQkJJGl0 bGlzdCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7DQoJCQkJ CWlmICh0cmltKCRpdGVtKSAhPSAnJykgew0KCQkJCQkJJGl0bGlzdFtdID0gIlRpdGxlIGxp a2UgJyUkaXRlbSUnIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkd2hlcmVbXSA9ICcoJy5qb2lu KCcgT1IgJywgJGl0bGlzdCkuJyknOw0KCQkJfQ0KCQkJaWYgKCRzbWRfZmVhdF9maWx0a2Vl cCkgew0KCQkJCSRsYmwgPSAoJHNtZF9mZWF0X2ZpbHRrZWVwID09ICdzbWRfdW5sYWJlbGxl ZCcpID8gJycgOiAkc21kX2ZlYXRfZmlsdGtlZXA7DQoJCQkJJGlkcyA9IHNhZmVfY29sdW1u KCdmZWF0X2lkJywgU01EX0ZFQVQsICJCSU5BUlkgbGFiZWwgPSAnJGxibCciKTsNCgkJCQkk d2hlcmVbXSA9ICJJRCBJTiAoJyIuam9pbigiJywnIiwgJGlkcykuIicpIjsNCgkJCX0NCgkJ fQ0KDQoJCSR3aGVyZSA9IGpvaW4oJyBBTkQgJywgJHdoZXJlKTsNCgkJJHRvdGFsID0gc2Fm ZV9jb3VudCgndGV4dHBhdHRlcm4nLCAkd2hlcmUpOw0KCQkkZG9fcGFnID0gISRzbWRfZmVh dF9maWx0a2VlcCAmJiAhJHNtZF9mZWF0X3NlYXJjaGtlZXA7DQoNCgkJJGxpbWl0ID0gKCRk aXNwbGF5PT0ncGFnaW5hdGVkJyAmJiAkZG9fcGFnKSA/IG1heCgkc21kX2ZlYXR1cmVkX2xp c3RfcGFnZWJ5LCAxNSkgOiA5OTk5OTsNCgkJbGlzdCgkcGFnZSwgJG9mZnNldCwgJG51bVBh Z2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxpbWl0LCAkcGFnZSk7DQoNCgkJJHJzID0gc2FmZV9y b3dzKCcqJywgJ3RleHRwYXR0ZXJuJywgJHdoZXJlLiAkb3JkZXJxcnkgLiAiIGxpbWl0ICRv ZmZzZXQsICRsaW1pdCIpOw0KCQkkb3V0ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJHJzIGFz ICRyb3cpIHsNCgkJCSRmdHlwZSA9IGlzc2V0KCRmZWF0bGlzdFskcm93WydJRCddXVsnbGFi ZWwnXSkgPyAkZmVhdGxpc3RbJHJvd1snSUQnXV1bJ2xhYmVsJ10gOiAnJzsNCgkJCSRvdXRb XSA9IGFycmF5KCRyb3dbJ0lEJ10sICRyb3dbJ1RpdGxlJ10sICRmdHlwZSk7DQoJCQlpZiAo JHNtZF9mZWF0X2lkICYmICRyb3dbJ0lEJ10gPT0gJHNtZF9mZWF0X2lkKSB7DQoJCQkJJGVk aXRuYW1lID0gJHJvd1snVGl0bGUnXTsNCgkJCQkkZmVhdF9sYWJlbCA9ICRmZWF0bGlzdFsk c21kX2ZlYXRfaWRdWydsYWJlbCddOw0KCQkJCSRmZWF0X3RpdGxlID0gJGZlYXRsaXN0WyRz bWRfZmVhdF9pZF1bJ3RpdGxlJ107DQoJCQkJJGZlYXRfZGVzYyA9IGRvU3RyaXAoc3RyX3Jl cGxhY2UoJ1xyXG4nLCcNCicsICRmZWF0bGlzdFskc21kX2ZlYXRfaWRdWydkZXNjcmlwdGlv biddKSk7DQoJCQl9DQoJCX0NCg0KCQkkc29ydG9wdHMgPSBhcnJheSgNCgkJCSdQb3N0ZWQn ID0+ICdQb3N0ZWQnLA0KCQkJJ0V4cGlyZXMnID0+ICdFeHBpcnknLA0KCQkJJ0xhc3RNb2Qn ID0+ICdNb2RpZmllZCcsDQoJCQknVGl0bGUnID0+ICdUaXRsZScsDQoJCQknU2VjdGlvbicg PT4gJ1NlY3Rpb24nLA0KCQkJJ0NhdGVnb3J5MScgPT4gJ0NhdGVnb3J5MScsDQoJCQknQ2F0 ZWdvcnkyJyA9PiAnQ2F0ZWdvcnkyJywNCgkJKTsNCgkJJHNvcnRkaXJzID0gYXJyYXkoDQoJ CQknYXNjJyA9PiAnQXNjZW5kaW5nJywNCgkJCSdkZXNjJyA9PiAnRGVzY2VuZGluZycsDQoJ CSk7DQoJCSRkaXNwbGF5b3B0cyA9IGFycmF5KA0KCQkJJ2FsbCcgPT4gJ0FsbCcsDQoJCQkn cGFnaW5hdGVkJyA9PiAnUGFnaW5hdGVkJywNCgkJKTsNCgkJJHRleHRpbGVvbm9mZiA9IHNt ZF9mZWF0dXJlZF9wcmVmX2V4cGxvZGUoJHNtZF9mZWF0dXJlZF90ZXh0aWxlX29wdHMsIGdl dF9wcmVmKCdzbWRfZmVhdHVyZWRfdGV4dGlsZScsICcxMScsIDEpKTsNCg0KCQkkc2l6ZXMg PSBkb19saXN0KGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfYm94X3NpemUnLCAnMTUweDQwJywg MSksICd4Jyk7DQoJCSRzaXplc1swXSA9IChpc3NldCgkc2l6ZXNbMF0pICYmIGlzX251bWVy aWMoJHNpemVzWzBdKSkgPyAkc2l6ZXNbMF0gOiAnMTUwJzsNCgkJJHNpemVzWzFdID0gKGlz c2V0KCRzaXplc1sxXSkgJiYgaXNfbnVtZXJpYygkc2l6ZXNbMV0pKSA/ICRzaXplc1sxXSA6 ICc0MCc7DQoJCSRkaXNwbGF5X2pzID0gKCRkaXNwbGF5PT0nYWxsJykgPyAxIDogMDsNCgkJ JHN0eWxlcmVwcyA9IGFycmF5KA0KCQkJJ3tid30nID0+ICRzaXplc1swXSwNCgkJCSd7Ymh9 JyA9PiAkc2l6ZXNbMV0sDQoJCSk7DQoNCgkJZWNobyAnPGRpdiBpZD0ic21kX2xvYWRpbmci IHN0eWxlPSInLiRzbWRfZmVhdHVyZWRfc3R5bGVzWydsb2FkaW5nJ10uJyI+PGRpdiBzdHls ZT0iJy4kc21kX2ZlYXR1cmVkX3N0eWxlc1snbG9hZGluZ19kaXYnXS4nIj5Mb2FkaW5nLi4u PC9kaXY+PC9kaXY+JzsNCgkJZWNobyAnPGRpdiBpZD0ic21kX2NvbnRhaW5lciIgc3R5bGU9 ImRpc3BsYXk6bm9uZTsiPic7DQoJCWVjaG8gJzxmaWVsZHNldCBpZD0ic21kX2ZlYXR1cmVk X2NvbnRyb2xfcGFuZWwiIGNsYXNzPSJ0eHAtY29udHJvbC1wYW5lbCI+PGxlZ2VuZCBjbGFz cz0icGxhaW4gbGV2ZXInLihnZXRfcHJlZigncGFuZV9zbWRfZmVhdHVyZWRfY3BhbmVsX3Zp c2libGUnKSA/ICcgZXhwYW5kZWQnIDogJycpLiciPjxhIGhyZWY9IiNzbWRfZmVhdHVyZWRf Y3BhbmVsIj4nLnNtZF9mZWF0dXJlZF9nVHh0KCdjb250cm9sX3BhbmVsJykuJzwvYT48L2xl Z2VuZD4nOw0KCQllY2hvICc8ZGl2IGlkPSJzbWRfZmVhdHVyZWRfY3BhbmVsIiBjbGFzcz0i dG9nZ2xlIiBzdHlsZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfZmVhdHVyZWRf Y3BhbmVsX3Zpc2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoNCgkJZWNobyAn PGZvcm0gaWQ9InNtZF9mZWF0X2ZpbHRmb3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9k PSJwb3N0IiBvbnN1Ym1pdD0ic21kX2ZlYXR1cmVkX2VkaXRrZWVwKDApO3JldHVybiBmYWxz ZTsiPic7DQoJCWVjaG8gJzxmaWVsZHNldCBpZD0ic21kX2ZlYXR1cmVkX2ZpbHQiIGNsYXNz PSJzbWRfZmVhdHVyZWRfc3VicGFuZWwiPjxsZWdlbmQ+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgo KCRkaXNwbGF5PT0nYWxsJykgPyAnc2VhcmNoX2xpdmUnIDogJ3NlYXJjaF9zdGFuZGFyZCcp KS4nPC9sZWdlbmQ+JzsNCgkJZWNobyAnPGxhYmVsIGZvcj0ic21kX2ZlYXRfc2VhcmNoIj4n LnNtZF9mZWF0dXJlZF9nVHh0KCdieV9uYW1lJykuJzwvbGFiZWw+Jy5mSW5wdXQoJ3RleHQn LCAnc21kX2ZlYXRfc2VhcmNoJywgJHNtZF9mZWF0X3NlYXJjaGtlZXAsICcnLCAnJywgJycs ICcnLCAnJywgJ3NtZF9mZWF0X3NlYXJjaCcpLg0KCQkJKCgkZnR5cGVzKSA/ICc8ZGl2IGlk PSJzbWRfZmVhdHVyZWRfYnlsYWJlbCI+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgnYnlfbGFiZWwn KS5zZWxlY3RJbnB1dCgnc21kX2ZlYXRfZmlsdCcsICRmdHlwZXMsICRzbWRfZmVhdF9maWx0 a2VlcCwgMSwgJycsICdzbWRfZmVhdF9maWx0JykuJzwvZGl2PicgOiAnJyk7DQoJCWVjaG8g KCRkaXNwbGF5PT0ncGFnaW5hdGVkJykgPyBmSW5wdXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdn bycpLCAnc21hbGxlcmJveCBzbWRfZmVhdHVyZWRfc2F2ZScsICcnLCAncmV0dXJuIHNtZF9m ZWF0dXJlZF9lZGl0a2VlcCgwKTsnKSA6ICcnOw0KCQllY2hvIGVJbnB1dCgkc21kX2ZlYXR1 cmVkX2V2ZW50KS5zSW5wdXQoJ3NtZF9mZWF0dXJlZF9saXN0Jyk7DQoJCWVjaG8gJzwvZmll bGRzZXQ+JzsNCgkJZWNobyAnPC9mb3JtPic7DQoNCgkJZWNobyAnPGZvcm0gaWQ9InNtZF9m ZWF0X3ByZWZzIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nOw0KCQllY2hv ICc8ZmllbGRzZXQgaWQ9InNtZF9mZWF0dXJlZF9wcmVmcyIgY2xhc3M9InNtZF9mZWF0dXJl ZF9zdWJwYW5lbCI+PGxlZ2VuZD4nLnNtZF9mZWF0dXJlZF9nVHh0KCdwcmVmcycpLic8L2xl Z2VuZD4nOw0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9mZWF0dXJlZF9wcmVmIj4nOw0K CQllY2hvICc8bGFiZWwgZm9yPSJzbWRfZmVhdF9kaXNwbGF5Ij4nLnNtZF9mZWF0dXJlZF9n VHh0KCdwcmVmX2Rpc3BsYXknKS4nPC9sYWJlbD4nLnNlbGVjdElucHV0KCdzbWRfZmVhdF9k aXNwbGF5JywgJGRpc3BsYXlvcHRzLCAkZGlzcGxheSwgJycsICcnLCAnc21kX2ZlYXRfZGlz cGxheScpOw0KCQllY2hvICc8L2Rpdj4nOw0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9m ZWF0dXJlZF9wcmVmIj4nOw0KCQllY2hvICc8bGFiZWwgZm9yPSJzbWRfZmVhdF9zb3J0Ij4n LnNtZF9mZWF0dXJlZF9nVHh0KCdwcmVmX3NvcnQnKS4nPC9sYWJlbD4nLnNlbGVjdElucHV0 KCdzbWRfZmVhdF9zb3J0JywgJHNvcnRvcHRzLCAkY3Vyck9yZGVyWzBdLCAnJywgJycsICdz bWRfZmVhdF9zb3J0JykuDQoJCQlzZWxlY3RJbnB1dCgnc21kX2ZlYXRfc29ydGRpcicsICRz b3J0ZGlycywgJGN1cnJPcmRlclsxXSwgJycsICcnLCAnc21kX2ZlYXRfc29ydGRpcicpOw0K CQllY2hvICc8L2Rpdj4nOw0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9mZWF0dXJlZF9w cmVmIj4nOw0KCQllY2hvICc8ZGl2IGlkPSJzbWRfZmVhdF9kaXNwbGF5X2JveCI+JzsNCgkJ ZWNobyAnPGxhYmVsIGZvcj0ic21kX2ZlYXRfYm94c2l6ZSI+Jy5zbWRfZmVhdHVyZWRfZ1R4 dCgncHJlZl9ib3hzaXplJykuJzwvbGFiZWw+Jy5mSW5wdXQoJ3RleHQnLCAnc21kX2ZlYXRf Ym94X3gnLCAkc2l6ZXNbMF0sICcnLCAnJywgJycsICczJywgJycsICdzbWRfZmVhdF9ib3hz aXplJykuDQoJCQlzbWRfZmVhdHVyZWRfZ1R4dCgncHJlZl9ib3hzaXplYnknKS5mSW5wdXQo J3RleHQnLCAnc21kX2ZlYXRfYm94X3knLCAkc2l6ZXNbMV0sICcnLCAnJywgJycsICczJyk7 DQoJCWVjaG8gJzwvZGl2Pic7DQoNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2ZlYXR1cmVk X3ByZWYgc21kX2ZlYXRfdGV4dGlsZSI+JzsNCgkJZWNobyAnPGxhYmVsIGZvcj0ic21kX2Zl YXRfdGV4dGlsZSI+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgndGV4dGlsZScpLic8L2xhYmVsPic7 DQoJCWZvcmVhY2ggKCR0ZXh0aWxlb25vZmYgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQllY2hv IGNoZWNrYm94KCdzbWRfZmVhdF90ZXh0aWxlXycuJGtleSwgMSwgJHRleHRpbGVvbm9mZlsk a2V5XSwgJycsICdzbWRfZmVhdF90ZXh0aWxlXycuJGtleSkuc3Auc21kX2ZlYXR1cmVkX2dU eHQoJ3RleHRpbGVfJy4ka2V5KTsNCgkJfQ0KCQllY2hvIGZJbnB1dCgnaGlkZGVuJywgJ3Nt ZF9mZWF0X3RleHRpbGUnLCBpbXBsb2RlKCR0ZXh0aWxlb25vZmYpLCcnLCcnLCcnLCcnLCcn LCdzbWRfZmVhdF90ZXh0aWxlJyk7DQoJCWVjaG8gJzwvZGl2Pic7DQoNCgkJZWNobyAnPC9k aXY+JzsNCg0KCQllY2hvIGVJbnB1dCgkc21kX2ZlYXR1cmVkX2V2ZW50KS5zSW5wdXQoJ3Nt ZF9mZWF0dXJlZF9wcmVmc2F2ZScpOw0KCQllY2hvIGZJbnB1dCgnc3VibWl0JywgJycsIGdU eHQoJ3NhdmUnKSwgJ3NtYWxsZXJib3ggc21kX2ZlYXR1cmVkX3NhdmUnLCAnJywgJ3NtZF9m ZWF0X3ByZXN1YigpOycpOw0KCQllY2hvICc8L2ZpZWxkc2V0Pic7DQoJCWVjaG8gJzwvZm9y bT4nOw0KDQoJCWVjaG8gJyZuYnNwOyc7IC8vIFdpdGhvdXQgdGhpcyAnY29udGVudCcgalF1 ZXJ5IDEuMy4yIHdvbid0IC50b2dnbGUoKSBhbiBlbGVtZW50IHdpdGggZW50aXJlbHkgZmxv YXRlZCBpbm5lciBlbGVtZW50cyA6LXMNCgkJZWNobyAnPC9kaXY+JzsNCgkJZWNobyAnPC9m aWVsZHNldD4nOw0KDQoJCWVjaG8gJzxmb3JtIGlkPSJzbWRfZmVhdF9lZGl0Zm9ybSIgYWN0 aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCI+JzsNCgkJZWNobyBoSW5wdXQoJ3NtZF9m ZWF0X3NlYXJjaGtlZXAnLCAnJykuDQoJCQkJaElucHV0KCdzbWRfZmVhdF9maWx0a2VlcCcs ICcnKS4NCgkJCQloSW5wdXQoJ3NtZF9mZWF0X2lkJywgJycpLg0KCQkJCWVJbnB1dCgkc21k X2ZlYXR1cmVkX2V2ZW50KS4NCgkJCQlzSW5wdXQoJ3NtZF9mZWF0dXJlZF9saXN0Jyk7DQoJ CWVjaG8gJzwvZm9ybT4nOw0KDQoJCWVjaG8gJzxmb3JtIGlkPSJzbWRfZmVhdF9zYXZlZm9y bSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9InJldHVybiBz bWRfZmVhdHVyZWRfc2F2ZWtlZXAoKTsiPic7DQoJCWVjaG8gc3RhcnRUYWJsZSgnY29udHJv bCcsJycsJycsJzMnKTsNCgkJaWYgKCRzbWRfZmVhdF9pZCkgew0KCQkJZWNobyB0cigNCgkJ CQl0ZCgnJm5ic3A7JykudGRjcyhnVHh0KCdlZGl0Jykuc3Auc3Ryb25nKCRlZGl0bmFtZSks IDIpDQoJCQkpOw0KCQkJZWNobyB0cigNCgkJCQlmTGFiZWxDZWxsKGdUeHQoJ2xhYmVsJyks ICcnLCAnc21kX2ZlYXRfbGFiZWwnKS4NCgkJCQl0ZCgNCgkJCQkJZklucHV0KCd0ZXh0Jywg J3NtZF9mZWF0X2xhYmVsJywgJGZlYXRfbGFiZWwsICcnLCAnJywgJycsICcnLCAnJywgJ3Nt ZF9mZWF0X2xhYmVsJykuDQoJCQkJCXNlbGVjdElucHV0KCdzbWRfZmVhdF9sYWJlbGNob29z ZScsICRldHlwZXMsICRmZWF0X2xhYmVsLCAwLCAnJywgJ3NtZF9mZWF0X2xhYmVsY2hvb3Nl JykNCgkJCQkpDQoJCQkpOw0KCQkJZWNobyB0cigNCgkJCQlmTGFiZWxDZWxsKGdUeHQoJ3Rp dGxlJyksICcnLCAnc21kX2ZlYXRfdGl0bGUnKS4NCgkJCQl0ZCgNCgkJCQkJZklucHV0KCd0 ZXh0JywgJ3NtZF9mZWF0X3RpdGxlJywgJGZlYXRfdGl0bGUsICcnLCAnJywgJycsICcnLCAn JywgJ3NtZF9mZWF0X3RpdGxlJykNCgkJCQkpDQoJCQkpOw0KCQkJZWNobyB0cigNCgkJCQlm TGFiZWxDZWxsKGdUeHQoJ2Rlc2NyaXB0aW9uJyksICcnLCAnc21kX2ZlYXRfZGVzYycpLg0K CQkJCXRkKHRleHRfYXJlYSgnc21kX2ZlYXRfZGVzYycsIDgwLCA0MDAsICRmZWF0X2Rlc2Ms ICdzbWRfZmVhdF9kZXNjJykpLg0KCQkJCXRkKGZJbnB1dCgnc3VibWl0JywgJycsIGdUeHQo J3NhdmUnKSwgJ3NtYWxsZXJib3gnKSkuDQoJCQkJaElucHV0KCdzbWRfZmVhdF9zZWFyY2hr ZWVwJywgJycpLg0KCQkJCWhJbnB1dCgnc21kX2ZlYXRfZmlsdGtlZXAnLCAnJykuDQoJCQkJ aElucHV0KCdzbWRfZmVhdF9pZCcsICRzbWRfZmVhdF9pZCkuDQoJCQkJZUlucHV0KCRzbWRf ZmVhdHVyZWRfZXZlbnQpLg0KCQkJCXNJbnB1dCgnc21kX2ZlYXR1cmVkX3NhdmUnKQ0KCQkJ KTsNCgkJfQ0KCQllY2hvIGVuZFRhYmxlKCk7DQoJCWVjaG8gJzwvZm9ybT4nOw0KDQoJCSRl ZGJ0biA9IHNtYWxsKCdbJy5nVHh0KCdlZGl0JykuJ10nKTsNCg0KCQlpZiAoJG91dCkgew0K CQkJJHJvd3MgPSBjb3VudCgkcnMpOw0KCQkJJHRibG91dCA9IGFycmF5KCk7DQoJCQkkYXR0 cyA9ICcgY2xhc3M9InNtZF9mZWF0dXJlZF90YWJsZSBzbWRfY2xlYXIiIGlkPSJzbWRfJy4k ZGlzcGxheS4nIiBhbGlnbj0iY2VudGVyIic7DQoNCgkJCSR0YmxvdXRbXSA9IGhlZChzbWRf ZmVhdHVyZWRfZ1R4dCgnbWFuYWdlX2xibCcsIGFycmF5KCksICdyYXcnKSwgMywgJyBjbGFz cz0ic21kX2NsZWFyIicpOw0KCQkJZm9yICgkaWR4ID0gMDsgJGlkeCA8ICRyb3dzOyAkaWR4 KyspIHsNCgkJCQkkaXNmZWF0ID0gKGlzc2V0KCRvdXRbJGlkeF0pICYmIGFycmF5X2tleV9l eGlzdHMoJG91dFskaWR4XVswXSwgJGZlYXRsaXN0KSk7DQoJCQkJJGNlbGxjbGFzcyA9ICRp c2ZlYXQgPyAnIGNsYXNzPSJzbWRfZmVhdHVyZWQiJyA6ICcnOw0KCQkJCSRlZGxpbmsgPSAk aXNmZWF0ID8gJzxhIGNsYXNzPSJlZGxpbmsiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBz bWRfZmVhdHVyZWRfZWRpdGtlZXAoXCcnLiRvdXRbJGlkeF1bMF0uJ1wnKTsiPicuJGVkYnRu Lic8L2E+Jy5zcCA6ICcnOw0KCQkJCSRyb3dkYXRhID0gKGlzc2V0KCRvdXRbJGlkeF0pKSA/ ICc8c3BhbiBuYW1lPSJzbWRfZmVhdF9uYW1lIiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4kb3V0 WyRpZHhdWzFdLic8L3NwYW4+JyA6ICcnOw0KCQkJCSRyb3dkYXRhIC49ICRpc2ZlYXQgPyAn PHNwYW4gbmFtZT0ic21kX2ZlYXRfbGFiZWwiIGNsYXNzPSJleHRyYSBzbWRfaGlkZGVuIj4n LiRvdXRbJGlkeF1bMl0uJzwvc3Bhbj4nIDogJyc7DQoJCQkJJHRibG91dFtdID0gKGlzc2V0 KCRvdXRbJGlkeF0pKSA/ICc8ZGl2Jy4kY2VsbGNsYXNzLic+Jy4kZWRsaW5rLic8YSBocmVm PSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX2ZlYXR1cmVkX3NlbGVjdCh0aGlzLCBcJycuJG91 dFskaWR4XVswXS4nXCcpIj4nLiRvdXRbJGlkeF1bMV0uJzwvYT4nLiRyb3dkYXRhLic8L2Rp dj4nIDogJzxkaXY+PC9kaXY+JzsNCgkJCX0NCgkJCWVjaG8gdGFnKGpvaW4oIiIsJHRibG91 dCksICdkaXYnLCAkYXR0cyk7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwv ZGl2Pic7DQoJCQlpZiAoJGRpc3BsYXk9PSdwYWdpbmF0ZWQnICYmICRkb19wYWcpIHsNCgkJ CQllY2hvIG4uJzxkaXYgaWQ9IicuJHNtZF9mZWF0dXJlZF9ldmVudC4nX25hdmlnYXRpb24i IGNsYXNzPSJ0eHAtbmF2aWdhdGlvbiI+Jy4NCgkJCQkJbi5uYXZfZm9ybSgkc21kX2ZlYXR1 cmVkX2V2ZW50LCAkcGFnZSwgJG51bVBhZ2VzLCAnJywgJycsICcnLCAnJywgJHRvdGFsLCAk bGltaXQpLg0KCQkJCQluLnBhZ2VieV9mb3JtKCRzbWRfZmVhdHVyZWRfZXZlbnQsICRzbWRf ZmVhdHVyZWRfbGlzdF9wYWdlYnkpOw0KCQkJCQluLic8L2Rpdj4nOw0KCQkJfQ0KCQl9DQoN CgkJJHFzID0gYXJyYXkoDQoJCQkiZXZlbnQiID0+ICRzbWRfZmVhdHVyZWRfZXZlbnQsDQoJ CSk7DQoNCgkJJHFzVmFycyA9ICJpbmRleC5waHAiLmpvaW5fcXMoJHFzKTsNCgkJJHZlcmlm eVR4dCA9IHNtZF9mZWF0dXJlZF9nVHh0KCd1bmZlYXR1cmVfY29uZmlybScpOw0KDQoJCWVj aG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLy8gQ29uY2F0 ZW5hdGUgY2hlY2tib3ggb3B0aW9ucyBmb3Igc3RvcmFnZQ0KZnVuY3Rpb24gc21kX2ZlYXRf cHJlc3ViKCkgew0KCXZhciBzbWRfb3V0ID0gIiI7DQoJalF1ZXJ5KCIuc21kX2ZlYXRfdGV4 dGlsZSA6Y2hlY2tib3giKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlzbWRfb3V0ICs9ICh0aGlz LmNoZWNrZWQpID8gMSA6IDA7DQoJfSk7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfdGV4dGlsZSIp LnZhbChzbWRfb3V0KTsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQpmdW5jdGlvbiBzbWRfZmVh dHVyZWRfc2VsZWN0KG9iaiwgaWQpIHsNCglvYmogPSBqUXVlcnkob2JqKS5wYXJlbnQoKTsN Cg0KCS8vIE4uQi4gTmVnYXRpdmUgbG9naWMgdXNlZCBoZXJlIGJlY2F1c2Ugd2UncmUgY2hl Y2tpbmcgdGhlIGNsYXNzIF9iZWZvcmVfIGl0J3MgYmVlbiB0b2dnbGVkDQoJdmFyIGFjdGlv biA9ICgob2JqKS5oYXNDbGFzcygic21kX2ZlYXR1cmVkIikpID8gJ3JlbW92ZScgOiAnYWRk JzsNCglpZiAoYWN0aW9uID09ICdyZW1vdmUnKSB7DQoJCXZhciByZXQgPSBjb25maXJtKCd7 JHZlcmlmeVR4dH0nKTsNCgkJaWYgKHJldCA9PSBmYWxzZSkgew0KCQkJcmV0dXJuIGZhbHNl Ow0KCQl9DQoJfQ0KCWpRdWVyeS5wb3N0KCd7JHFzVmFyc30nLCB7IHN0ZXA6ICJzbWRfZmVh dHVyZWRfdGFnaXQiLCBzbWRfZmVhdF9pZDogaWQsIHNtZF9mZWF0X2FjdGlvbjogYWN0aW9u IH0sDQoJCWZ1bmN0aW9uKGRhdGEpIHsNCgkJCW9iai50b2dnbGVDbGFzcygnc21kX2ZlYXR1 cmVkJyk7DQoJCQlpZiAoYWN0aW9uID09ICdhZGQnKSB7DQoJCQkJb2JqLnByZXBlbmQoJzxh IGNsYXNzPSJlZGxpbmsiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBzbWRfZmVhdHVyZWRf ZWRpdGtlZXAoXCcnK2lkKydcJykiPnskZWRidG59PC9hPiZuYnNwOycpOw0KCQkJCW9iai5h cHBlbmQoJzxzcGFuIG5hbWU9InNtZF9mZWF0X2xhYmVsIiBjbGFzcz0iZXh0cmEgc21kX2hp ZGRlbiI+PC9zcGFuPicpOw0KCQkJfSBlbHNlIHsNCgkJCQlvYmouZmluZCgnYS5lZGxpbmsn KS5yZW1vdmUoKTsNCgkJCQlvYmouZmluZCgnc3Bhbi5leHRyYScpLnJlbW92ZSgpOw0KCQkJ CWlmIChqUXVlcnkoIiNzbWRfZmVhdF9zZWFyY2giKS52YWwoKSAhPSAnJykgalF1ZXJ5KCIj c21kX2ZlYXRfc2VhcmNoIikua2V5dXAoKTsNCgkJCQlpZiAoalF1ZXJ5KCIjc21kX2ZlYXRf ZmlsdCIpLnZhbCgpICE9ICcnKSBqUXVlcnkoIiNzbWRfZmVhdF9maWx0IikuY2hhbmdlKCk7 DQoJCQl9DQoJCX0NCgkpOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24gc21kX2Zl YXR1cmVkX2VkaXRrZWVwKGlkKSB7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfZWRpdGZvcm0gW25h bWU9J3NtZF9mZWF0X3NlYXJjaGtlZXAnXSIpLnZhbChqUXVlcnkoIiNzbWRfZmVhdF9zZWFy Y2giKS52YWwoKSk7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfZWRpdGZvcm0gW25hbWU9J3NtZF9m ZWF0X2ZpbHRrZWVwJ10iKS52YWwoalF1ZXJ5KCIjc21kX2ZlYXR1cmVkX2J5bGFiZWwgI3Nt ZF9mZWF0X2ZpbHQgb3B0aW9uOnNlbGVjdGVkIikudmFsKCkpOw0KCWpRdWVyeSgiI3NtZF9m ZWF0X2VkaXRmb3JtIFtuYW1lPSdzbWRfZmVhdF9pZCddIikudmFsKGlkKTsNCglqUXVlcnko IiNzbWRfZmVhdF9lZGl0Zm9ybSIpLnN1Ym1pdCgpOw0KfQ0KDQpmdW5jdGlvbiBzbWRfZmVh dHVyZWRfc2F2ZWtlZXAoKSB7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfc2F2ZWZvcm0gW25hbWU9 J3NtZF9mZWF0X3NlYXJjaGtlZXAnXSIpLnZhbChqUXVlcnkoIiNzbWRfZmVhdF9zZWFyY2gi KS52YWwoKSk7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfc2F2ZWZvcm0gW25hbWU9J3NtZF9mZWF0 X2ZpbHRrZWVwJ10iKS52YWwoalF1ZXJ5KCIjc21kX2ZlYXR1cmVkX2J5bGFiZWwgI3NtZF9m ZWF0X2ZpbHQgb3B0aW9uOnNlbGVjdGVkIikudmFsKCkpOw0KfQ0KDQpmdW5jdGlvbiBzbWRf ZmVhdF9maWx0ZXIoc2VsZWN0b3IsIHF1ZXJ5LCBuYW0sIGNzZW5zZSwgZXhhY3QpIHsNCglp ZiAoeyRkaXNwbGF5X2pzfSA9PSAxKSB7DQoJCXZhciBxdWVyeSA9IGpRdWVyeS50cmltKHF1 ZXJ5KTsNCgkJY3NlbnNlID0gKGNzZW5zZSkgPyAiIiA6ICJpIjsNCgkJcXVlcnkgPSBxdWVy eS5yZXBsYWNlKC8gL2dpLCAnfCcpOyAvLyBhZGQgT1IgZm9yIHJlZ2V4IHF1ZXJ5DQoJCWlm IChleGFjdCkgew0KCQkJdG1wID0gcXVlcnkuc3BsaXQoJ3wnKTsNCgkJCWZvciAodmFyIGlk eCA9IDA7IGlkeCA8IHRtcC5sZW5ndGg7IGlkeCsrKSB7DQoJCQkJdG1wW2lkeF0gPSAnXicr dG1wW2lkeF0rJyQnOw0KCQkJfQ0KCQkJcXVlcnkgPSB0bXAuam9pbignfCcpOw0KCQl9DQoJ CXZhciByZSA9IG5ldyBSZWdFeHAocXVlcnksIGNzZW5zZSk7DQoJCWpRdWVyeShzZWxlY3Rv cikuZWFjaChmdW5jdGlvbigpIHsNCgkJCXNlbCA9ICh0eXBlb2YgbmFtPT0idW5kZWZpbmVk IiB8fCBuYW09PScnKSA/IGpRdWVyeSh0aGlzKSA6IGpRdWVyeSh0aGlzKS5maW5kKCJzcGFu W25hbWU9JyIrbmFtKyInXSIpOw0KCQkJaWYgKHF1ZXJ5ID09ICcnKSB7DQoJCQkJaWYgKHNl bC5sZW5ndGggPT0gMSAmJiBzZWwudGV4dCgpID09ICcnKSB7DQoJCQkJCWpRdWVyeSh0aGlz KS5zaG93KCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLmhpZGUoKTsNCgkJ CQl9DQoJCQl9IGVsc2Ugew0KCQkJCWlmIChzZWwudGV4dCgpLnNlYXJjaChyZSkgPCAwKSB7 DQoJCQkJCWpRdWVyeSh0aGlzKS5oaWRlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5 KHRoaXMpLnNob3coKTsNCgkJCQl9DQoJCQl9DQoJCX0pOw0KCX0NCn0NCg0KalF1ZXJ5KGZ1 bmN0aW9uKCkgew0KCWpRdWVyeSgiI3NtZF9mZWF0X3NlYXJjaCIpLmtleXVwKGZ1bmN0aW9u KGV2ZW50KSB7DQoJCWpRdWVyeSgiI3NtZF9mZWF0X2ZpbHQiKS52YWwoJzAnKTsgLy8gQ2xl YXIgdGhlIGZpbHRlciBkcm9wZG93bg0KCQkvLyBpZiBlc2MgaXMgcHJlc3NlZCBvciBub3Ro aW5nIGlzIGVudGVyZWQNCgkJaWYgKGV2ZW50LmtleUNvZGUgPT0gMjcgfHwgalF1ZXJ5KHRo aXMpLnZhbCgpID09ICcnKSB7DQoJCQlqUXVlcnkodGhpcykudmFsKCcnKTsNCgkJCWlmICh7 JGRpc3BsYXlfanN9ID09IDEpIHsNCgkJCQlqUXVlcnkoIi5zbWRfZmVhdHVyZWRfdGFibGUg ZGl2Om5vdCgudGJsaGVhZCkiKS5zaG93KCk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlzbWRf ZmVhdF9maWx0ZXIoJy5zbWRfZmVhdHVyZWRfdGFibGUgZGl2Om5vdCgudGJsaGVhZCknLCBq UXVlcnkodGhpcykudmFsKCksICdzbWRfZmVhdF9uYW1lJywgMCwgMCk7DQoJCX0NCgl9KTsN CglpZiAoJ3skc21kX2ZlYXRfc2VhcmNoa2VlcH0nICE9ICcnKSB7DQoJCWpRdWVyeSgiI3Nt ZF9mZWF0X3NlYXJjaCIpLmtleXVwKCk7DQoJfQ0KCWpRdWVyeSgiI3NtZF9mZWF0X2ZpbHQi KS5jaGFuZ2UoZnVuY3Rpb24oZXZlbnQpIHsNCgkJalF1ZXJ5KCIjc21kX2ZlYXRfc2VhcmNo IikudmFsKCcnKTsgLy8gRW1wdHkgdGhlIHNlYXJjaCBib3gNCgkJaWYgKGpRdWVyeSh0aGlz KS52YWwoKSA9PSAnJykgew0KCQkJaWYgKHskZGlzcGxheV9qc30gPT0gMSkgew0KCQkJCWpR dWVyeSgnLnNtZF9mZWF0dXJlZF90YWJsZSBkaXY6bm90KC50YmxoZWFkKScpLnNob3coKTsN CgkJCX0NCgkJfSBlbHNlIGlmIChqUXVlcnkodGhpcykudmFsKCkgPT0gJ3NtZF91bmxhYmVs bGVkJykgew0KCQkJc21kX2ZlYXRfZmlsdGVyKCcuc21kX2ZlYXR1cmVkX3RhYmxlIGRpdjpu b3QoLnRibGhlYWQpJywgJycsICdzbWRfZmVhdF9sYWJlbCcsIDAsIDApOw0KCQl9IGVsc2Ug ew0KCQkJc21kX2ZlYXRfZmlsdGVyKCcuc21kX2ZlYXR1cmVkX3RhYmxlIGRpdjpub3QoLnRi bGhlYWQpJywgalF1ZXJ5KHRoaXMpLnZhbCgpLCAnc21kX2ZlYXRfbGFiZWwnLCAxLCAxKTsN CgkJfQ0KCX0pOw0KCWlmICgneyRzbWRfZmVhdF9maWx0a2VlcH0nICE9ICcnKSB7DQoJCWpR dWVyeSgiI3NtZF9mZWF0X2ZpbHQiKS5jaGFuZ2UoKTsNCgl9DQoJaWYgKCd7JHNtZF9mZWF0 X2lkfScgIT0gJycpIHsNCgkJalF1ZXJ5KCIjc21kX2ZlYXRfbGFiZWwiKS5mb2N1cygpOw0K CQlqUXVlcnkoIiNzbWRfZmVhdF9sYWJlbGNob29zZSIpLmNoYW5nZShmdW5jdGlvbihldmVu dCkgew0KCQkJalF1ZXJ5KCIjc21kX2ZlYXRfbGFiZWwiKS52YWwoalF1ZXJ5KHRoaXMpLnZh bCgpKTsNCgkJfSk7DQoJfQ0KCWpRdWVyeSgiI3NtZF9sb2FkaW5nIikuaGlkZSgpOw0KCWpR dWVyeSgiI3NtZF9jb250YWluZXIiKS5zaG93KCk7DQp9KTsNCg0KPC9zY3JpcHQ+DQpFT0pT Ow0KDQoJCS8vIEluamVjdCBzdHlsZXMNCgkJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3Nz Ij4nOw0KCQllY2hvIHN0cnRyKCRzbWRfZmVhdHVyZWRfc3R5bGVzWydjb21tb24nXSwgJHN0 eWxlcmVwcyk7DQoJCWVjaG8gJzwvc3R5bGU+JzsNCgkJZWNobyAnPC9kaXY+JzsNCgl9IGVs c2Ugew0KCQkvLyBUYWJsZSBub3QgaW5zdGFsbGVkDQoJCSRidG5JbnN0YWxsID0gJzxmb3Jt IG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX2ZlYXR1cmVkX2V2ZW50LmEu J3N0ZXA9c21kX2ZlYXR1cmVkX3RhYmxlX2luc3RhbGwiIHN0eWxlPSJkaXNwbGF5OmlubGlu ZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfZmVhdHVyZWRfZ1R4dCgndGJs X2luc3RhbGxfbGJsJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nOw0KCQkkYnRuU3R5bGUg PSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KCQllY2hvIHN0YXJ0VGFibGUo J2xpc3QnKTsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9mZWF0dXJlZF9nVHh0KCdwcmVm c19zb21lX3RibCcpKS5ici5icg0KCQkJCS5zbWRfZmVhdHVyZWRfZ1R4dCgncHJlZnNfc29t ZV9leHBsYWluJykuYnIuYnINCgkJCQkuc21kX2ZlYXR1cmVkX2dUeHQoJ3ByZWZzX3NvbWVf b3B0cycpLCAnIGNvbHNwYW49IjIiJykNCgkJKTsNCgkJZWNobyB0cih0ZGEoJGJ0bkluc3Rh bGwsICRidG5TdHlsZSkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoJfQ0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfY2hhbmdlX3BhZ2VieSgpIHsNCglnbG9iYWwg JHNtZF9mZWF0dXJlZF9ldmVudDsNCgkNCglldmVudF9jaGFuZ2VfcGFnZWJ5KCRzbWRfZmVh dHVyZWRfZXZlbnQpOw0KCXNtZF9mZWF0dXJlZF9saXN0KCk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KLy8gVXBkYXRlIHRoZSBwYXNzZWQgcmVjb3JkIGluIHRoZSBm ZWF0dXJlZCB0YWJsZQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3NhdmUoKSB7DQoJZ2xvYmFs ICRzbWRfZmVhdHVyZWRfZXZlbnQsICRzbWRfZmVhdHVyZWRfdGV4dGlsZV9vcHRzOw0KDQoJ ZXh0cmFjdChncHNhKGFycmF5KCdzbWRfZmVhdF9pZCcsICdzbWRfZmVhdF9sYWJlbCcsICdz bWRfZmVhdF90aXRsZScsICdzbWRfZmVhdF9kZXNjJykpKTsNCglhc3NlcnRfaW50KCRzbWRf ZmVhdF9pZCk7DQoNCgkkc21kX2ZlYXRfdGl0bGV0aWxlID0gJHNtZF9mZWF0X3RpdGxlOw0K CSRzbWRfZmVhdF9kZXNjdGlsZSA9ICRzbWRfZmVhdF9kZXNjOw0KCSRzbWRfZmVhdF9sYWJl bCA9IGRvU2xhc2goJHNtZF9mZWF0X2xhYmVsKTsNCg0KCWlmIChzbWRfZmVhdHVyZWRfdGFi bGVfZXhpc3QoKSkgew0KCQlAaW5jbHVkZV9vbmNlIHR4cGF0aC4nL2xpYi9jbGFzc1RleHRp bGUucGhwJzsNCgkJQGluY2x1ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoLnBocCc7DQoNCgkJ JHRleHRpbGVvbm9mZiA9IHNtZF9mZWF0dXJlZF9wcmVmX2V4cGxvZGUoJHNtZF9mZWF0dXJl ZF90ZXh0aWxlX29wdHMsIGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfdGV4dGlsZScsICcxMScp KTsNCg0KCQlpZiAoY2xhc3NfZXhpc3RzKCdUZXh0aWxlJykpIHsNCgkJCSR0ZXh0aWxlID0g bmV3IFRleHRpbGUoKTsNCgkJCSRzbWRfZmVhdF90aXRsZXRpbGUgPSBkb1NsYXNoKCgoJHRl eHRpbGVvbm9mZlsndGl0bGUnXSA9PSAnMScpID8gJHRleHRpbGUtPlRleHRpbGVUaGlzKHBh cnNlKCRzbWRfZmVhdF90aXRsZSkpIDogcGFyc2UoJHNtZF9mZWF0X3RpdGxlKSkpOw0KCQkJ JHNtZF9mZWF0X2Rlc2N0aWxlID0gZG9TbGFzaCgoKCR0ZXh0aWxlb25vZmZbJ2Rlc2MnXSA9 PSAnMScpID8gJHRleHRpbGUtPlRleHRpbGVUaGlzKHBhcnNlKCRzbWRfZmVhdF9kZXNjKSkg OiBwYXJzZSgkc21kX2ZlYXRfZGVzYykpKTsNCgkJfQ0KDQoJCSRzbWRfZmVhdF90aXRsZSA9 IGRvU2xhc2goJHNtZF9mZWF0X3RpdGxlKTsNCgkJJHNtZF9mZWF0X2Rlc2MgPSBkb1NsYXNo KCRzbWRfZmVhdF9kZXNjKTsNCgkJJHJldCA9IHNhZmVfdXBzZXJ0KFNNRF9GRUFULCAibGFi ZWw9JyRzbWRfZmVhdF9sYWJlbCcsIGZlYXRfdGl0bGU9JyRzbWRfZmVhdF90aXRsZScsIGZl YXRfdGl0bGVfaHRtbD0nJHNtZF9mZWF0X3RpdGxldGlsZScsIGRlc2NyaXB0aW9uPSckc21k X2ZlYXRfZGVzYycsIGRlc2NfaHRtbD0nJHNtZF9mZWF0X2Rlc2N0aWxlJyIsICJmZWF0X2lk PSckc21kX2ZlYXRfaWQnIik7DQoJCXVuc2V0KCRfUE9TVFsnc21kX2ZlYXRfaWQnXSk7DQoJ fQ0KDQoJc21kX2ZlYXR1cmVkX2xpc3Qoc21kX2ZlYXR1cmVkX2dUeHQoJ3NhdmVkJykpOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENyZWF0ZSBhbiBlbXB0eSBl bnRyeSBpbiB0aGUgZmVhdHVyZWQgdGFibGUgb3IgZGVzdHJveSBpdA0KZnVuY3Rpb24gc21k X2ZlYXR1cmVkX3RhZ2l0KCkgew0KCWdsb2JhbCAkc21kX2ZlYXR1cmVkX2V2ZW50Ow0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfZmVhdF9pZCcsICdzbWRfZmVhdF9hY3Rp b24nKSkpKTsNCg0KCWFzc2VydF9pbnQoJHNtZF9mZWF0X2lkKTsNCg0KCWlmICgkc21kX2Zl YXRfYWN0aW9uID09ICdhZGQnKSB7DQoJCSRyZXQgPSBzYWZlX3Vwc2VydChTTURfRkVBVCwg ImxhYmVsPScnIiwgImZlYXRfaWQ9JyRzbWRfZmVhdF9pZCciKTsNCgl9IGVsc2UgaWYgKCRz bWRfZmVhdF9hY3Rpb24gPT0gJ3JlbW92ZScpIHsNCgkJJHJldCA9IHNhZmVfZGVsZXRlKFNN RF9GRUFULCAiZmVhdF9pZD0nJHNtZF9mZWF0X2lkJyIpOw0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3ByZWZzYXZlKCkgew0KCWV4dHJhY3QoZ3BzYShh cnJheSgnc21kX2ZlYXRfZGlzcGxheScsICdzbWRfZmVhdF9zb3J0JywgJ3NtZF9mZWF0X3Nv cnRkaXInLCAnc21kX2ZlYXRfYm94X3gnLCAnc21kX2ZlYXRfYm94X3knLCAnc21kX2ZlYXRf dGV4dGlsZScpKSk7DQoJJG1zZyA9ICcnOw0KDQoJaWYgKCRzbWRfZmVhdF9kaXNwbGF5KSB7 DQoJCXNldF9wcmVmKCJzbWRfZmVhdHVyZWRfZGlzcGxheSIsICRzbWRfZmVhdF9kaXNwbGF5 LCAnc21kX2ZlYXR1cmVkJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9Q UklWQVRFKTsNCgkJJG1zZyA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJfQ0KDQoJ aWYgKCRzbWRfZmVhdF9zb3J0ICYmICRzbWRfZmVhdF9zb3J0ZGlyKSB7DQoJCSRzb3J0X2Ny aXQgPSAkc21kX2ZlYXRfc29ydC4nICcuICRzbWRfZmVhdF9zb3J0ZGlyOw0KCQlzZXRfcHJl Zigic21kX2ZlYXR1cmVkX3NvcnQiLCAkc29ydF9jcml0LCAnc21kX2ZlYXR1cmVkJywgUFJF Rl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJJG1zZyA9IGdU eHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJfQ0KDQoJaWYgKCRzbWRfZmVhdF9ib3hfeCAm JiAkc21kX2ZlYXRfYm94X3kpIHsNCgkJJGRpbXMgPSAkc21kX2ZlYXRfYm94X3guJ3gnLiRz bWRfZmVhdF9ib3hfeTsNCgkJc2V0X3ByZWYoInNtZF9mZWF0dXJlZF9ib3hfc2l6ZSIsICRk aW1zLCAnc21kX2ZlYXR1cmVkJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJF Rl9QUklWQVRFKTsNCgkJJG1zZyA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJfQ0K DQoJaWYgKCRzbWRfZmVhdF90ZXh0aWxlKSB7DQoJCXNldF9wcmVmKCJzbWRfZmVhdHVyZWRf dGV4dGlsZSIsICRzbWRfZmVhdF90ZXh0aWxlLCAnc21kX2ZlYXR1cmVkJywgUFJFRl9ISURE RU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJJG1zZyA9IGdUeHQoJ3By ZWZlcmVuY2VzX3NhdmVkJyk7DQoJfQ0KDQoJc21kX2ZlYXR1cmVkX2xpc3QoJG1zZyk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gU3BsaXQgYSBtdWx0aS1jaGFy IHByZWZlcmVuY2UgdmFsdWUgaW50byBhbiBhcnJheSBvZiBrZXlzL3ZhbHVlcy4NCi8vIE5v dGU6IHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm90IHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUg cHJlZnMgYXJyYXkgaW4gdGhpcyBmdW5jdGlvbiAtIGludGVudGlvbmFsbHkNCmZ1bmN0aW9u IHNtZF9mZWF0dXJlZF9wcmVmX2V4cGxvZGUoJGl0ZW1zLCAkb3B0dmFsKSB7DQoJJG9ub2Zm ID0gYXJyYXlfdmFsdWVzKHByZWdfc3BsaXQoJy8vJywgJG9wdHZhbCwgLTEsIFBSRUdfU1BM SVRfTk9fRU1QVFkpKTsNCgkkb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRpdGVtcyBhcyAk a2V5ID0+ICR2YWx1ZSkgew0KCQkkb3V0WyhzdHJpbmcpJHZhbHVlXSA9ICRvbm9mZlska2V5 XTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9m ZWF0dXJlZF9zYXZlX3BhbmVfc3RhdGUoKSB7DQoJJHBhbmVzID0gYXJyYXkoJ3NtZF9mZWF0 dXJlZF9jcGFuZWwnKTsNCgkkcGFuZSA9IGdwcygncGFuZScpOw0KCWlmIChpbl9hcnJheSgk cGFuZSwgJHBhbmVzKSkNCgl7DQoJCXNldF9wcmVmKCJwYW5lX3skcGFuZX1fdmlzaWJsZSIs IChncHMoJ3Zpc2libGUnKSA9PSAndHJ1ZScgPyAnMScgOiAnMCcpLCAnc21kX2ZlYXR1cmVk JywgUFJFRl9ISURERU4sICd5ZXNub3JhZGlvJywgMCwgUFJFRl9QUklWQVRFKTsNCgkJc2Vu ZF94bWxfcmVzcG9uc2UoKTsNCgl9IGVsc2Ugew0KCQlzZW5kX3htbF9yZXNwb25zZShhcnJh eSgnaHR0cC1zdGF0dXMnID0+ICc0MDAgQmFkIFJlcXVlc3QnKSk7DQoJfQ0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFkZCBmZWF0dXJlZCB0YWJsZSBpZiBub3Qg YWxyZWFkeSBpbnN0YWxsZWQNCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF90YWJsZV9pbnN0YWxs KCRzaG93cGFuZT0nMScpIHsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsNCgkk cmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJ RiBOT1QgRVhJU1RTIGAiLlBGWC5TTURfRkVBVC4iYCAoDQoJCWBmZWF0X2lkYCBpbnQoOCkg Tk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCWBsYWJlbGAgdmFyY2hhcigzMikgTlVMTCBkZWZh dWx0ICcnLA0KCQlgZmVhdF90aXRsZWAgdmFyY2hhcigyNTUpIE5VTEwgZGVmYXVsdCAnJywN CgkJYGZlYXRfdGl0bGVfaHRtbGAgdmFyY2hhcigyNTUpIE5VTEwgZGVmYXVsdCAnJywNCgkJ YGRlc2NyaXB0aW9uYCB0ZXh0IE5VTEwgZGVmYXVsdCAnJywNCgkJYGRlc2NfaHRtbGAgdGV4 dCBOVUxMIGRlZmF1bHQgJycsDQoJCVBSSU1BUlkgS0VZIChgZmVhdF9pZGApDQoJKSBFTkdJ TkU9TXlJU0FNIjsNCg0KCWlmKGdwcygnZGVidWcnKSkgew0KCQlkbXAoJHNxbCk7DQoJfQ0K CWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgew0KCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsN CgkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsr Ow0KCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15 c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4i Ow0KCQl9DQoJfQ0KDQoJLy8gSGFuZGxlIHVwZ3JhZGVzIGZyb20gcHJldmlvdXMgdmVyc2lv bnMNCgkkY29scyA9IGdldFRoaW5ncygnZGVzY3JpYmUgYCcuUEZYLlNNRF9GRUFULidgJyk7 DQoJaWYgKCFpbl9hcnJheSgnZmVhdF9pZCcsICRjb2xzKSkgew0KCQlzYWZlX2FsdGVyKFNN RF9GRUFULCAiQ0hBTkdFIGBpZGAgYGZlYXRfaWRgIGludCggOCApIE5PVCBOVUxMIERFRkFV TFQgJzAnIik7DQoJfQ0KCWlmICghaW5fYXJyYXkoJ2ZlYXRfdGl0bGUnLCAkY29scykpIHsN CgkJc2FmZV9hbHRlcihTTURfRkVBVCwgIkFERCBgZmVhdF90aXRsZWAgdmFyY2hhciggMjU1 ICkgTlVMTCBERUZBVUxUICcnIEFGVEVSIGBsYWJlbGAiKTsNCgl9DQoJaWYgKCFpbl9hcnJh eSgnZmVhdF90aXRsZV9odG1sJywgJGNvbHMpKSB7DQoJCXNhZmVfYWx0ZXIoU01EX0ZFQVQs ICJBREQgYGZlYXRfdGl0bGVfaHRtbGAgdmFyY2hhciggMjU1ICkgTlVMTCBERUZBVUxUICcn IEFGVEVSIGBmZWF0X3RpdGxlYCIpOw0KCX0NCg0KCS8vIFNwaXQgb3V0IHJlc3VsdHMNCglp ZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCWlmICgkc2hvd3BhbmUp IHsNCgkJCSRtZXNzYWdlID0gc21kX2ZlYXR1cmVkX2dUeHQoJ3RibF9pbnN0YWxsZWQnKTsN CgkJCXNtZF9mZWF0dXJlZF9saXN0KCRtZXNzYWdlKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWlm ICgkc2hvd3BhbmUpIHsNCgkJCSRtZXNzYWdlID0gc21kX2ZlYXR1cmVkX2dUeHQoJ3RibF9u b3RfaW5zdGFsbGVkJyk7DQoJCQlzbWRfZmVhdHVyZWRfbGlzdCgkbWVzc2FnZSk7DQoJCX0N Cgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRHJvcCB0YWJsZSBp ZiBpbiBkYXRhYmFzZQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3RhYmxlX3JlbW92ZSgpIHsN CgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291 bnQnXSA9IDA7DQoJaWYgKHNtZF9mZWF0dXJlZF90YWJsZV9leGlzdCgpKSB7DQoJCSRzcWxb XSA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAiIC5QRlguU01EX0ZFQVQuICI7ICI7DQoJCWlm KGdwcygnZGVidWcnKSkgew0KCQkJZG1wKCRzcWwpOw0KCQl9DQoJCWZvcmVhY2ggKCRzcWwg YXMgJHFyeSkgew0KCQkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCQlpZiAoJHJldD09 PWZhbHNlKSB7DQoJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJCWVjaG8g IjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigp LiI8YnIgLz5cbiI7DQoJCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJCQl9DQoJ CX0NCgl9DQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkgew0KCQkkbWVz c2FnZSA9IHNtZF9mZWF0dXJlZF9nVHh0KCd0YmxfcmVtb3ZlZCcpOw0KCX0gZWxzZSB7DQoJ CSRtZXNzYWdlID0gc21kX2ZlYXR1cmVkX2dUeHQoJ3RibF9ub3RfcmVtb3ZlZCcpOw0KCQlz bWRfZmVhdHVyZWRfbGlzdCgkbWVzc2FnZSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF90YWJsZV9leGlzdCgkYWxsPScn KSB7DQoJaWYgKCRhbGwpIHsNCgkJJHRibHMgPSBhcnJheShTTURfRkVBVCA9PiA2KTsNCgkJ JG91dCA9IGNvdW50KCR0YmxzKTsNCgkJZm9yZWFjaCAoJHRibHMgYXMgJHRibCA9PiAkY29s cykgew0KCQkJaWYgKGdwcygnZGVidWcnKSkgew0KCQkJCWVjaG8gIisrIFRBQkxFICIuJHRi bC4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkuIiBDT0xVTU5T OyBSRVFVSVJFUyAiLiRjb2xzLiIgKysiLmJyOw0KCQkJfQ0KCQkJaWYgKGNvdW50KEBzYWZl X3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkgPT0gJGNvbHMpIHsNCgkJCQkkb3V0LS07DQoJCQl9 DQoJCX0NCgkJcmV0dXJuICgkb3V0PT09MCkgPyAxIDogMDsNCgl9IGVsc2Ugew0KCQlpZiAo Z3BzKCdkZWJ1ZycpKSB7DQoJCQllY2hvICIrKyBUQUJMRSAiLlNNRF9GRUFULiIgSEFTICIu Y291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9GRUFUKSkuIiBDT0xVTU5TOyI7DQoJ CX0NCgkJcmV0dXJuKEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBTTURfRkVBVCkpOw0KCX0NCn0N Cg0KLy8gKioqKioqKioqKioqKioqKg0KLy8gUFVCTElDIFNJREUgVEFHUw0KLy8gKioqKioq KioqKioqKioqKg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf ZmVhdHVyZWQoJGF0dHMsICR0aGluZykgew0KCWdsb2JhbCAkc21kX2ZlYXR1cmVkX2luZm8s ICRzbWRfcHJpb3JfZmVhdHVyZWQsICRwcmVmczsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSdsYWJlbCcgICAgPT4gJycsDQoJCSd1bmxhYmVsJyAgPT4gJ0ZlYXR1cmVkJywNCgkJ J2xhYmVsdGFnJyA9PiAnJywNCgkJJ3RpbWUnICAgICA9PiAncGFzdCcsDQoJCSdzdGF0dXMn ICAgPT4gJzQsNScsDQoJCSdzZWN0aW9uJyAgPT4gJycsDQoJCSdsaW1pdCcgICAgPT4gJzEw JywNCgkJJ3NvcnQnICAgICA9PiAnJywNCgkJJ2Zvcm0nICAgICA9PiAnJywNCgkJJ3dyYXB0 YWcnICA9PiAnJywNCgkJJ2JyZWFrJyAgICA9PiAnJywNCgkJJ2NsYXNzJyAgICA9PiAnJywN CgkJJ2h0bWxfaWQnICA9PiAnJywNCgkpLCRhdHRzKSk7DQoNCglpZiAoaXNzZXQoJGF0dHNb J2xhYmVsJ10pKSB7DQoJCWlmICgkbGFiZWwpIHsNCgkJCSR3aGVyZSA9ICJCSU5BUlkgbGFi ZWwgUkVHRVhQICciLiRhdHRzWydsYWJlbCddLiInIjsNCgkJfSBlbHNlIHsNCgkJCSR3aGVy ZSA9ICJsYWJlbD0nJyI7DQoJCX0NCgkJdW5zZXQoJGF0dHNbJ2xhYmVsJ10pOw0KCX0gZWxz ZSB7DQoJCS8vIElmIG5vIGxhYmVsIGF0dHJpYnV0ZSBoYXMgYmVlbiBnaXZlbiwgdHJlYXQg dGhpcyBhcyAnYWxsIGZlYXR1cmVkIGl0ZW1zJw0KCQkkaWRzID0gc2FmZV9jb2x1bW4oJ2Zl YXRfaWQnLCBTTURfRkVBVCwgJzE9MScpOw0KCQkkaWRzID0gam9pbigiJywnIiwgZG9TbGFz aCgkaWRzKSk7DQoJCSR3aGVyZSA9ICJzbWRmZWF0LmZlYXRfaWQgSU4gKCckaWRzJykiOw0K CX0NCg0KCS8vIEV4Y2x1ZGUgcHJldmlvdXNseSBzZWVuIGFydGljbGVzDQoJaWYgKCFlbXB0 eSgkc21kX3ByaW9yX2ZlYXR1cmVkKSkgew0KCQkkd2hlcmUgLj0gJyBBTkQgc21kZmVhdC5m ZWF0X2lkIE5PVCBJTignIC4gam9pbignLCcsICRzbWRfcHJpb3JfZmVhdHVyZWQpIC4gJykn Ow0KCX0NCg0KCS8vIE5PVEU6IHRpbWUgaXMgbGVmdCBpbiB0aGUgJGF0dHMgYXJyYXkgYW5k IHBhc3NlZCB0byBhcnRpY2xlX2N1c3RvbS4gT3RoZXJ3aXNlIHRoZSBkZWZhdWx0DQoJLy8g dGltZSB2YWx1ZSAocGFzdCkgd2lsbCBiZSB1c2VkDQoJaWYgKCR0aW1lKSB7DQoJCXN3aXRj aCAoJHRpbWUpIHsNCgkJCWNhc2UgJ2FueSc6DQoJCQkJYnJlYWs7DQoJCQljYXNlICdmdXR1 cmUnOg0KCQkJCSR3aGVyZSAuPSAiIEFORCBQb3N0ZWQgPiBub3coKSI7DQoJCQkJYnJlYWs7 DQoJCQlkZWZhdWx0Og0KCQkJCSR3aGVyZSAuPSAiIEFORCBQb3N0ZWQgPD0gbm93KCkiOw0K CQl9DQoJCWlmICghJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNsZXMnXSkgew0KCQkJ JHdoZXJlIC49ICIgQU5EIChub3coKSA8PSBFeHBpcmVzIE9SIEV4cGlyZXMgPSAiLk5VTExE QVRFVElNRS4iKSI7DQoJCX0NCgl9DQoNCglpZiAoJHN0YXR1cykgew0KCQkkd2hlcmUgLj0g JyBBTkQgU3RhdHVzIElOICgnLmpvaW4oJywnLCBkb19saXN0KCRzdGF0dXMpKS4nKSc7DQoJ CXVuc2V0KCRhdHRzWydzdGF0dXMnXSk7DQoJfQ0KDQoJaWYgKCRzZWN0aW9uKSB7DQoJCSR3 aGVyZSAuPSAiIEFORCBTZWN0aW9uIElOICgnIi5qb2luKCInLCciLCBkb19saXN0KCRzZWN0 aW9uKSkuIicpIjsNCgkJdW5zZXQoJGF0dHNbJ3NlY3Rpb24nXSk7DQoJfQ0KDQoJaWYgKCRz b3J0KSB7DQoJCSR3aGVyZSAuPScgT1JERVIgQlkgJy4kc29ydDsNCgkJdW5zZXQoJGF0dHNb J3NvcnQnXSk7DQoJfQ0KDQoJLy8gTGVhdmUgbGltaXQgaW4gdGhlICRhdHRzIGFycmF5IHRv byBzbyBpdCBkb2Vzbid0IGRlZmF1bHQgdG8gYXJ0aWNsZV9jdXN0b20ncyB2YWx1ZSBpZiBz ZXQgaGVyZQ0KCWlmICgkbGltaXQpIHsNCgkJJHdoZXJlIC49JyBMSU1JVCAnLiRsaW1pdDsN Cgl9DQoNCgkvLyBEb24ndCBwYXNzIHRoZSByZW1haW5pbmcgYXR0cmlidXRlcyB3ZSd2ZSBh bHJlYWR5IGhhbmRsZWQgb250byB0aGUgYXJ0aWNsZV9jdXN0b20gdGFnDQoJdW5zZXQoDQoJ CSRhdHRzWydsYWJlbCddLA0KCQkkYXR0c1sndW5sYWJlbCddLA0KCQkkYXR0c1snbGFiZWx0 YWcnXSwNCgkJJGF0dHNbJ3dyYXB0YWcnXSwNCgkJJGF0dHNbJ2JyZWFrJ10sDQoJCSRhdHRz WydjbGFzcyddLA0KCQkkYXR0c1snaHRtbF9pZCddDQoJKTsNCg0KCSRycyA9IGdldFJvd3Mo J1NFTEVDVCAqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIHVQb3N0ZWQsIHVuaXhfdGlt ZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBpcmVzLCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBh cyB1TGFzdE1vZCBGUk9NICcuUEZYLid0ZXh0cGF0dGVybiBBUyB0eHAgTEVGVCBKT0lOICcu UEZYLlNNRF9GRUFULicgQVMgc21kZmVhdCBPTiB0eHAuSUQ9c21kZmVhdC5mZWF0X2lkIFdI RVJFICcuJHdoZXJlKTsNCg0KCSRvdXQgPSBhcnJheSgpOw0KCWlmICgkcnMpIHsNCgkJZm9y ZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCSRzbWRfZmVhdHVyZWRfaW5mb1snbGFiZWwnXSA9 ICRyb3dbJ2xhYmVsJ107DQoJCQkkc21kX2ZlYXR1cmVkX2luZm9bJ3RpdGxlJ10gPSAkcm93 WydmZWF0X3RpdGxlX2h0bWwnXTsNCgkJCSRzbWRfZmVhdHVyZWRfaW5mb1snZGVzY3JpcHRp b24nXSA9ICRyb3dbJ2Rlc2NfaHRtbCddOw0KCQkJJGF0dHNbJ2lkJ10gPSAkcm93WydJRCdd Ow0KDQoJCQkkYXJ0b3V0ID0gYXJ0aWNsZV9jdXN0b20oJGF0dHMsICR0aGluZyk7DQoNCgkJ CWlmICgkYXJ0b3V0KSB7DQoJCQkJJHNtZF9wcmlvcl9mZWF0dXJlZFtdID0gJHJvd1snSUQn XTsNCgkJCQkkb3V0W10gPSAkYXJ0b3V0Ow0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkb3V0KSB7 DQoJCXJldHVybiAoKCRsYWJlbHRhZykgPyBkb0xhYmVsKCAoICgkbGFiZWwgPT0gJycpID8g JHVubGFiZWwgOiAkbGFiZWwpLCAkbGFiZWx0YWcgKSA6ICcnKQ0KCQkJLmRvV3JhcCgkb3V0 LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MsICcnLCAnJywgJycsICRodG1sX2lkKTsNCgl9 DQoJcmV0dXJuICcnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF91bmZlYXR1cmVkKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9wcmlv cl9mZWF0dXJlZDsNCg0KCSR3aGVyZSA9ICIxPTEiOw0KDQoJLy8gRXhjbHVkZSBwcmV2aW91 c2x5IHNlZW4gYXJ0aWNsZXMNCglpZiAoIWVtcHR5KCRzbWRfcHJpb3JfZmVhdHVyZWQpKSB7 DQoJCSR3aGVyZSAuPSAnIEFORCBpZCBOT1QgSU4oJyAuIGpvaW4oJywnLCAkc21kX3ByaW9y X2ZlYXR1cmVkKSAuICcpJzsNCgl9DQoNCgkkcnMgPSBzYWZlX2NvbHVtbignSUQnLCAndGV4 dHBhdHRlcm4nLCAkd2hlcmUpOw0KCSRhdHRzWydpZCddID0gam9pbignLCcsICRycyk7DQoJ JG91dCA9IGFydGljbGVfY3VzdG9tKCRhdHRzLCAkdGhpbmcpOw0KDQoJcmV0dXJuICRvdXQ7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2ZlYXR1 cmVkX2luZm8oJGF0dHMpIHsNCglnbG9iYWwgJHNtZF9mZWF0dXJlZF9pbmZvOw0KDQoJZXh0 cmFjdChsQXR0cyhhcnJheSgNCgkJJ2l0ZW0nID0+ICcnLA0KCSksJGF0dHMpKTsNCg0KCXJl dHVybiAoaXNzZXQoJHNtZF9mZWF0dXJlZF9pbmZvWyRpdGVtXSkgPyAkc21kX2ZlYXR1cmVk X2luZm9bJGl0ZW1dIDogJycpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9pZl9mZWF0dXJlZCgkYXR0cywgJHRoaW5nKSB7DQoJZ2xvYmFsICRz bWRfZmVhdHVyZWRfaW5mbywgJHRoaXNhcnRpY2xlOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJh eSgNCgkJJ2lkJyA9PiAnJywNCgkJJ2xhYmVsJyA9PiAnJywNCgkpLCRhdHRzKSk7DQoNCglp ZiAoJGlkKSB7DQoJCSRpZCA9IGpvaW4oIicsJyIsIGRvX2xpc3QoZG9TbGFzaCgkaWQpKSk7 DQoJfQ0KDQoJaWYgKCEkaWQgJiYgJHRoaXNhcnRpY2xlKSB7DQoJCSRpZCA9ICR0aGlzYXJ0 aWNsZVsndGhpc2lkJ107DQoJfQ0KDQoJJHdoZXJlW10gPSAiZmVhdF9pZCBJTiAoJyIuJGlk LiInKSI7DQoNCglpZiAoaXNzZXQoJGF0dHNbJ2xhYmVsJ10pKSB7DQoJCSRsYWJlbCA9IGV4 cGxvZGUoJywnLCBkb1NsYXNoKCRsYWJlbCkpOw0KCQkkbGJsd2hlcmUgPSBhcnJheSgpOw0K CQlmb3JlYWNoICgkbGFiZWwgYXMgJGxibCkgew0KCQkJJGxibHdoZXJlW10gPSAiJyIudHJp bSgkbGJsKS4iJyI7DQoJCX0NCgkJaWYgKCRsYmx3aGVyZSkgew0KCQkJJHdoZXJlW10gPSAn KCBCSU5BUlkgbGFiZWwgSU4gKCcgLiBqb2luKCcsJywgJGxibHdoZXJlKSAuICcpICknOw0K CQl9DQoJfQ0KDQoJJHJldCA9IHNhZmVfcm93KCdmZWF0X2lkJywgU01EX0ZFQVQsIGpvaW4o JyBBTkQnLCAkd2hlcmUpKTsNCg0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRy ZXQpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQbHVnaW4tc3Bl Y2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFzIHJlcXVpcmVkDQovLyBU T0RPOiBtYWtlIHRoZXNlIGludG8gYSB0ZXh0cGFjayB3aGVuIHBsdWdpbiBjb21wb3NlciBz dXBwb3J0cyB0aGVtDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfZ1R4dCgkd2hhdCwgJGF0dHMg PSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2J5X2xhYmVsJyA9PiAnQnkgbGFi ZWw6ICcsDQoJCSdieV9uYW1lJyA9PiAnQnkgbmFtZTogJywNCgkJJ2NvbnRyb2xfcGFuZWwn ID0+ICdDb250cm9sIHBhbmVsJywNCgkJJ21hbmFnZV9sYmwnID0+ICdDbGljayB0byBzZWxl Y3QgZmVhdHVyZWQgYXJ0aWNsZXMsIHdoaWNoIHdpbGwgdGhlbiBiZSBkaXNwbGF5ZWQgPHNw YW4gY2xhc3M9InNtZF9mZWF0dXJlZCI+PGEgaHJlZj0iIyIgc3R5bGU9Im1hcmdpbjowIDhw eDsiPkhpZ2hsaWdodGVkPC9hPjwvc3Bhbj4uJywNCgkJJ3ByZWZzJyA9PiAnUHJlZmVyZW5j ZXMnLA0KCQkncHJlZl9ib3hzaXplJyA9PiAnQm94IHNpemU6ICcsDQoJCSdwcmVmX2JveHNp emVieScgPT4gJyB4ICcsDQoJCSdwcmVmX2Rpc3BsYXknID0+ICdEaXNwbGF5OiAnLA0KCQkn cHJlZl9zb3J0JyA9PiAnU29ydCBieTogJywNCgkJJ3ByZWZzX3NvbWVfZXhwbGFpbicgPT4g J1RoaXMgaXMgZWl0aGVyIGEgbmV3IGluc3RhbGxhdGlvbiBvciBhIGRpZmZlcmVudCB2ZXJz aW9uJy5ici4nb2YgdGhlIHBsdWdpbiB0byBvbmUgeW91IGhhZCBiZWZvcmUuJywNCgkJJ3By ZWZzX3NvbWVfb3B0cycgPT4gJ0NsaWNrICJJbnN0YWxsIHRhYmxlIiB0byBhZGQgb3IgdXBk YXRlIHRoZSB0YWJsZScuYnIuJ2xlYXZpbmcgYWxsIGV4aXN0aW5nIGRhdGEgdW50b3VjaGVk LicsDQoJCSdwcmVmc19zb21lX3RibCcgPT4gJ05vdCBhbGwgdGFibGUgaW5mbyBhdmFpbGFi bGUuJywNCgkJJ3NhdmVkJyA9PiAnQXJ0aWNsZSBpbmZvIHVwZGF0ZWQnLA0KCQknc2VhcmNo X2xpdmUnID0+ICdBcnRpY2xlIGxpdmUgc2VhcmNoJywNCgkJJ3NlYXJjaF9zdGFuZGFyZCcg PT4gJ0FydGljbGUgc2VhcmNoJywNCgkJJ3RhYl9uYW1lJyA9PiAnRmVhdHVyZWQgYXJ0aWNs ZXMnLA0KCQkndGJsX2luc3RhbGxfbGJsJyA9PiAnSW5zdGFsbCB0YWJsZScsDQoJCSd0Ymxf aW5zdGFsbGVkJyA9PiAnVGFibGUgaW5zdGFsbGVkJywNCgkJJ3RibF9ub3RfaW5zdGFsbGVk JyA9PiAnVGFibGUgbm90IGluc3RhbGxlZCcsDQoJCSd0YmxfcmVtb3ZlZCcgPT4gJ1RhYmxl IHJlbW92ZWQnLA0KCQkndGJsX25vdF9yZW1vdmVkJyA9PiAnVGFibGUgbm90IHJlbW92ZWQn LA0KCQkndGV4dGlsZScgPT4gJ1RleHRpbGU6ICcsDQoJCSd0ZXh0aWxlX2Rlc2MnID0+ICdE ZXNjcmlwdGlvbicsDQoJCSd0ZXh0aWxlX3RpdGxlJyA9PiAnVGl0bGUnLA0KCQkndW5mZWF0 dXJlX2NvbmZpcm0nID0+ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMg YXJ0aWNsZSBmcm9tIHRoZSBmZWF0dXJlZCBsaXN0PycsDQoJCSd1bmxhYmVsbGVkJyA9PiAn W3VubGFiZWxsZWRdJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRz KTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxh Z3MiO3M6MToiMiI7czo0OiJoZWxwIjtzOjIwMTc2OiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJ PGgxPnNtZF9mZWF0dXJlZDwvaDE+CgoJPHA+UHVsbCBvbmUgb3IgbW9yZSBhcnRpY2xlcyBv dXQgb2YgdGhlIHJlZ3VsYXIgYXJ0aWNsZSBmbG93IGFuZCBwaW1wIHRoZW0gJiM4MjEyOyBw ZXJoYXBzIG9uIGEgc2VjdGlvbiBsYW5kaW5nIHBhZ2Ugb3IgeW91ciBob21lIHBhZ2UuPC9w PgoKCTxoMj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5PbmUtY2xpY2sgc2VsZWN0aW9u IG9mIGFydGljbGVzIHRvIGZlYXR1cmU8L2xpPgoJCTxsaT5MYWJlbCB5b3VyIGZlYXR1cmVk IGFydGljbGVzLCBhbGxvd2luZyB5b3UgdG8gZ3JvdXAgdGhlbSBpbnRvIGFyZWFzIGxpa2Ug RmVhdHVyZWQsIFRlYXNlcnMsIGV0YzwvbGk+CgkJPGxpPkFkZCBhbiBvcHRpb25hbCB0aXRs ZS9kZXNjcmlwdGlvbiB0byBlYWNoIGFydGljbGUgc28geW91IGNhbiB1c2UgdGhhdCBhcyBj b3B5LCBpbnN0ZWFkIG9mIHNvbWV0aGluZyBmcm9tIHRoZSBhcnRpY2xlIGl0c2VsZiAoc3Vw cG9ydHMgVGV4dGlsZSBhbmQgc29tZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0 YWdzKTwvbGk+CgkJPGxpPlNlYXJjaCB5b3VyIGZlYXR1cmVkIGFydGljbGVzIGJ5IG5hbWUg b3IgbGFiZWw7IGZpbHRlcmluZyBpbiByZWFsLXRpbWUgaWYgeW91IHdpc2g8L2xpPgoJCTxs aT5IaWRkZW4gcHJlZiBhbGxvd3MgcHJlLWZpbHRlcmluZyBieSBhbiBhZG1pbmlzdHJhdG9y IHNvIG9ubHkgYXJ0aWNsZXMgZnJvbSBjZXJ0YWluIHNlY3Rpb25zIGFyZSBhdmFpbGFibGUg Zm9yIHBpbXBhZ2U8L2xpPgoJCTxsaT5EaXNwbGF5IGluZm9ybWF0aW9uIGZyb20gdGhlIGZl YXR1cmVkIGFydGljbGVzIHVzaW5nIHJlZ3VsYXIgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gYXJ0aWNsZSB0YWdzPC9saT4KCQk8bGk+S2VlcHMgdHJhY2sgb2Ygd2hpY2ggYXJ0 aWNsZXMgaGF2ZSBiZWVuIHNlZW4gYWxyZWFkeSBvbiB0aGUgcGFnZSBzbyBsYXRlciBmZWF0 dXJlZCAob3IgdW5mZWF0dXJlZCkgYXJ0aWNsZXMgYXJlbiYjODIxNzt0IGR1cGxpY2F0ZWQ8 L2xpPgoJPC91bD4KCgk8aDI+QXV0aG9yIC8gQ3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPjwvcD4KCgk8 aDI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJpbXBv cnRhbnQiPlJlcXVpcmVzIFRleHRwYXR0ZXJuIDQuMi4wKyAoNC4zLjArIHJlY29tbWVuZGVk KTwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0 dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMTc0L3NtZF9mZWF0dXJlZCI+dGV4dHBh dHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9z dyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFs bCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9y dW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzM5MzgiPmZvcnVtIHRocmVh ZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3Ro ZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPldoZW4geW91IGluc3RhbGwgdGhlIHBs dWdpbiwgdGhlIG5lY2Vzc2FyeSB0YWJsZSBpcyBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBm b3IgeW91LiBUaGVyZSYjODIxNztzIGN1cnJlbnRseSBubyBmYWNpbGl0eSBmb3IgcmVtb3Zp bmcgaXQgZHVyaW5nIHBsdWdpbiBvcGVyYXRpb24sIGJ1dCBpdCB3aWxsIGJlIGRlbGV0ZWQg aWYgdGhlIHBsdWdpbiBpcyBkZWxldGVkIGZyb20geW91ciBzeXN0ZW0uPC9wPgoKCTxwPlRv IHVuaW5zdGFsbCwgc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGZyb20gdGhlIDxlbT5BZG1p bi0mZ3Q7UGx1Z2luczwvZW0+IHBhZ2UuPC9wPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPlVu ZGVyIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMi4wLCBpZiB5b3UgY2hhbmdl IGFueSBvZiB0aGUgcHJlZnMgYW5kIHNhdmUgdGhlbSwgeW91IG5lZWQgdG8gcmVsb2FkIHRo ZSBwbHVnaW4gdGFiIChqdXN0IGNsaWNrIGl0KSB0byBhY3R1YWxseSBzZWUgdGhlbSB0YWtl IGVmZmVjdC4gVGhpcyBzaXR1YXRpb24gaXMgZml4ZWQgdW5kZXIgPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gNC4zLjAuPC9wPgoKCTxoMj5Db25maWd1cmluZyBmZWF0dXJlZCBh cnRpY2xlczwvaDI+CgoJPHA+VmlzaXQgdGhlIDxlbT5Db250ZW50LSZndDtGZWF0dXJlZCBh cnRpY2xlczwvZW0+IHRhYi4gQSBsaXN0IG9mIGFsbCBhcnRpY2xlcyAoZnJvbSB0aGUgYWRt aW4tc2VsZWN0ZWQgc2VjdGlvbnMpIGFyZSBwcmVzZW50ZWQgaW4gYSBncmlkLjwvcD4KCgk8 aDM+VG8gZmVhdHVyZSBhbiBhcnRpY2xlPC9oMz4KCgk8cD5DbGljayBpdHMgbmFtZS4gSXQg d2lsbCBiZSBoaWdobGlnaHRlZCBhbmQgYW4gPGNvZGU+W0VkaXRdPC9jb2RlPiBidXR0b24g YXBwZWFycyBiZXNpZGUgaXQuIElmIHlvdSBjaG9vc2Ugbm90IHRvIGVkaXQgdGhlIGFydGlj bGUgaW5mb3JtYXRpb24sIGl0IHdpbGwgYmUgZmVhdHVyZWQgYnV0IHVubGFiZWxsZWQuPC9w PgoKCTxwPkNsaWNraW5nIDxjb2RlPltFZGl0XTwvY29kZT4gd2lsbCBkaXNwbGF5IHRocmVl IGlucHV0IGJveGVzOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+TGFiZWw8L3N0cm9uZz4g OiBhbGxvd3MgeW91IHRvIGxhYmVsIChncm91cCkgdGhlIGFydGljbGUgd2l0aCBvdGhlcnMg b2YgYSBzaW1pbGFyIGZlYXR1cmVkIHN0YXR1cy4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBs YWJlbCBzb21lIGFydGljbGVzIHRvIGdvIGluIGEgJiM4MjE2O3RlYXNlcnMmIzgyMTc7IGJs b2NrIG9uIHlvdXIgaG9tZSBwYWdlIGJ5IGxhYmVsbGluZyBlYWNoIHBvdGVudGlhbCBhcnRp Y2xlIHdpdGggPGNvZGU+VGVhc2VyPC9jb2RlPi4gQmUgY2FyZWZ1bDogPHN0cm9uZz5sYWJl bHMgYXJlIGNhc2Ugc2Vuc2l0aXZlPC9zdHJvbmc+LiBUbyBoZWxwLCB5b3UgbWF5IGNob29z ZSBhIGxhYmVsIGZyb20gdGhlIGRyb3Bkb3duIGxpc3Qgb2YgYWxsIGN1cnJlbnRseSBkZWZp bmVkIGxhYmVsczwvbGk+CgkJPGxpPjxzdHJvbmc+VGl0bGU8L3N0cm9uZz4gOiBhbGxvd3Mg eW91IHRvIHN0b3JlIHNvbWUgVGV4dGlsZS1hd2FyZSB0aXRsZSByZWxhdGVkIHRvIHRoZSBh cnRpY2xlLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBhcnRpY2xlJiM4MjE3O3MgYWN0 dWFsIFRpdGxlIGFuZCBjYW4gYmUgdXNlZCBmb3IgYW55IHB1cnBvc2UgeW91IHNlZSBmaXQ8 L2xpPgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+IDogYWxsb3dzIHlvdSB0 byBzdG9yZSBzb21lIFRleHRpbGUtYXdhcmUgc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgYXJ0aWNsZS4gVGhpcyBjb3VsZCBzaW1wbHkgYmUgYWRkaXRpb25hbCBpbmZvcm1h dGlvbiBmb3IgeW91ciBvd24gdXNlLCBvciBzb21lIGNvcHkgdGhhdCB5b3UgbWF5IHdpc2gg dG8gZGlzcGxheSBpbiB5b3VyIHRlYXNlcnMgYmxvY2sgdG8gZW50aWNlIHBlb3BsZSB0byBy ZWFkIHRoZSBhcnRpY2xlLiBJdCBjYW4gYmUgYXMgc2ltcGxlIG9yIGFzIGNvbXBsZXggYXMg eW91IGxpa2UgYW5kIGNhbiBjb250YWluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IHRhZ3MgKGlmIHRoZXkgbWFrZSBzZW5zZSB0byB1c2UgYXQgdGhhdCBwb2ludCAmIzgyMTI7 IGFydGljbGUgdGFncyBjYW5ub3QgYmUgdXNlZCwgZm9yIGV4YW1wbGUsIGJ1dCA8Y29kZT4m bHQ7dHhwOnNpdGVfdXJsIC8mZ3Q7PC9jb2RlPiBjYW4pPC9saT4KCTwvdWw+CgoJPHA+V2hl biB5b3UmIzgyMTc7cmUgaGFwcHkgd2l0aCB5b3VyIGNhdGVnb3Jpc2F0aW9uIGFuZC9vciBk ZXNjcmlwdGlvbiB0ZXh0LCBoaXQgU2F2ZSB0byBzdG9yZSBpdC4gWW91IGNhbiBlZGl0IHRo ZSBpbmZvcm1hdGlvbiBhdCBhbnkgdGltZSBieSBjbGlja2luZyB0aGUgYXBwcm9wcmlhdGUg PGNvZGU+W0VkaXRdPC9jb2RlPiBidXR0b24gZnJvbSB0aGUgZmVhdHVyZWQgYXJ0aWNsZSBs aXN0LjwvcD4KCgk8aDM+VG8gdW5mZWF0dXJlIGFuIGFydGljbGU8L2gzPgoKCTxwPkNsaWNr IGl0cyBuYW1lIGFnYWluLiBXaGVuIHlvdSBjb25maXJtIHRoYXQgeW91IGFyZSBzdXJlLCB0 aGUgYXJ0aWNsZSYjODIxNztzIGxhYmVsIGFuZCBkZXNjcmlwdGlvbiBhcmUgZGVsZXRlZCwg c28gYmUgc3VyZSB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZW0sIG9yIGhhdmUgYmFj a2VkIHRoZSBpbmZvcm1hdGlvbiB1cCBzb21ld2hlcmUuPC9wPgoKCTxoMz5GaW5kaW5nIGFy dGljbGVzIHRvIGZlYXR1cmU8L2gzPgoKCTxwPldpdGggbGFyZ2UgYXJ0aWNsZSBsaXN0cyBp dCBjYW4gYmVjb21lIGRpZmZpY3VsdCB0byBmaW5kIHRoZSBvbmUgeW91IHdhbnQuIEFib3Zl IHRoZSBncmlkIGlzIGEgY29udHJvbCBwYW5lbC4gQ2xpY2sgaXQgdG8gcmV2ZWFsIHRoZSBw bHVnaW4gb3B0aW9ucy4gIE9uIHRoZSBsZWZ0IGlzIHRoZSBBcnRpY2xlIHNlYXJjaCBhcmVh IGFuZCBvbiB0aGUgcmlnaHQgYXJlIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMuIElmIHlvdSBh cmUgaW4gPGVtPkRpc3BsYXk6IEFsbDwvZW0+IG1vZGUsIHNpbXBseSBzdGFydCB0eXBpbmcg aW4gdGhlIDxlbT5CeSBuYW1lPC9lbT4gYm94IGFuZCB5b3VyIGFydGljbGUgbGlzdCB3aWxs IGJlIHJlZHVjZWQgYXMgeW91IHR5cGUgdG8gb25seSB0aG9zZSB0aGF0IG1hdGNoLiBUeXBl IG11bHRpcGxlIHdvcmRzIHRvIGZpbmQgYXJ0aWNsZXMgdGhhdCBjb250YWluIGFueSBvZiB0 aGUgZ2l2ZW4gd29yZHMuIFRvIHF1aWNrbHkgY2xlYXIgdGhlIGJveCwgaGl0IHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+RVNDPC9zcGFuPmFwZSBrZXkuPC9wPgoKCTxwPkFsdGVybmF0aXZl bHksIHlvdSBjYW4gdXNlIHRoZSBzZWxlY3QgbGlzdCB0byBjaG9vc2UgYWxsIGFydGljbGVz IHdpdGggYSBwYXJ0aWN1bGFyIGxhYmVsLiBUaGUgZW1wdHkgZW50cnkgYXQgdGhlIHRvcCBv ZiB0aGUgbGlzdCBtZWFucyAmIzgyMjA7YWxsIGFydGljbGVzJiM4MjIxOy4gSWYgeW91IGhh dmUgZmVhdHVyZWQgYW4gYXJ0aWNsZSBidXQgZG9uJiM4MjE3O3Qgc3VwcGx5IGEgbGFiZWwg eW91IGNhbiBmaWx0ZXIgaXQgYnkgY2hvb3NpbmcgdGhlIDxjb2RlPlt1bmxhYmVsbGVkXTwv Y29kZT4gaXRlbSBmcm9tIHRoZSBsaXN0LiBJZiB5b3UgaGF2ZSBsYWJlbGxlZCBhbnkgYXJ0 aWNsZXMsIGVhY2ggbGFiZWwgeW91IGhhdmUgc3VwcGxpZWQgd2lsbCBhbHNvIGJlIGFuIG9w dGlvbiBpbiB0aGUgbGlzdC4gUmVtZW1iZXIgdGhhdCBsYWJlbHMgYXJlIGNhc2Ugc2Vuc2l0 aXZlLjwvcD4KCgk8cD5Ob3RlIHRoYXQgZmlsdGVyaW5nIGJ5IG5hbWUgb3IgYnkgbGFiZWwg YXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY3Rpb25zOiBzZWxlY3Rpbmcgc29tZXRoaW5nIGZy b20gdGhlIGRyb3Bkb3duIHdpbGwgY2xlYXIgdGhlIHRleHQgYm94LCBhbmQgdHlwaW5nIHNv bWV0aGluZyBpbiB0aGUgdGV4dCBib3ggd2lsbCByZXNldCB0aGUgZHJvcGRvd24uPC9wPgoK CTxwPllvdXIgc2VhcmNoIGNyaXRlcmlhIGFyZSByZW1lbWJlcmVkIGJldHdlZW4gZWRpdC9s aXN0IHZpZXdzIHNvIHlvdSB3b24mIzgyMTc7dCBsb3NlIHlvdXIgcGxhY2UuIElmIHlvdSBh cmUgaW4gPGVtPkRpc3BsYXk6IFBhZ2luYXRlZDwvZW0+IG1vZGUsIHRoZSBzZWFyY2ggd29y a3MgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYnV0IHlvdSBoYXZlIHRvIGhpdCBFbnRlciBv ciBjbGljayA8ZW0+R288L2VtPiB0byBzdWJtaXQgdGhlIHNlYXJjaCBjcml0ZXJpYS48L3A+ CgoJPGgzPlBsdWdpbiBwcmVmZXJlbmNlczwvaDM+CgoJPHA+VXNlcnMgb2YgdGhlIDxlbT5G ZWF0dXJlZCBhcnRpY2xlczwvZW0+IHRhYiBhbHNvIGhhdmUgYSBmZXcgcHJlZmVyZW5jZXMg YXQgdGhlaXIgZGlzcG9zYWwgd2hpY2ggY2FuIGJlIGFsdGVyZWQgYXQgd2lsbDo8L3A+CgoJ PG9sPgoJCTxsaT48c3Ryb25nPkRpc3BsYXk8L3N0cm9uZz4gOiBjaG9vc2Ugd2hldGhlciB5 b3Ugd2lzaCB0byBkaXNwbGF5IGFsbCBhcnRpY2xlcyBvbiBvbmUgcGFnZSAoYW5kIHVzZSB0 aGUgbGl2ZSBzZWFyY2ggdG8gZmlsdGVyIHRoZW0pIG9yIGNob29zZSBhIHBhZ2luYXRlZCB2 aWV3IChhbmQgdXNlIHRoZSB0cmFkaXRpb25hbCBzZWFyY2gpLiBUaGUgdHJhZGl0aW9uYWwg c2VhcmNoIG1pZ2h0IGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxvdCBvZiBhcnRpY2xlcyAo b3ZlciAxMDAwKSBiZWNhdXNlIHRoZSBsaXZlIHNlYXJjaCBtaWdodCBzbG93IGRvd24gc2ln bmlmaWNhbnRseS4gTm90ZSB0aGF0IHdoZW4geW91IHNlYXJjaCBmb3Igc29tZXRoaW5nIGlu IHBhZ2luYXRlZCBtb2RlLCB0aGUgcmVzdWx0cyB0aGVtc2VsdmVzIGFyZW4mIzgyMTc7dCBw YWdpbmF0ZWQ8L2xpPgoJCTxsaT48c3Ryb25nPlNvcnQgYnk8L3N0cm9uZz4gOiBkZWZpbmUg dGhlIHNvcnQgb3JkZXIgb2YgdGhlIGFydGljbGUgbGlzdDwvbGk+CgkJPGxpPjxzdHJvbmc+ Qm94IHNpemU8L3N0cm9uZz4gOiBzcGVjaWZ5IHRoZSA8Y29kZT53aWR0aDwvY29kZT4gYW5k IDxjb2RlPmhlaWdodDwvY29kZT4gdmFsdWVzIGluIHBpeGVscyBvZiBlYWNoIGNlbGwgaW4g dGhlIGdyaWQuIERlZmF1bHQgaXMgPGNvZGU+MTUweDQwPC9jb2RlPjwvbGk+CgkJPGxpPjxz dHJvbmc+VGV4dGlsZTwvc3Ryb25nPjogY2hvb3NlIHRoZSBpdGVtcyB0byB3aGljaCB5b3Ug d2lzaCB0byBhcHBseSBUZXh0aWxlIHdoZW4geW91IEVkaXQgYW5kIFNhdmUgYSBmZWF0dXJl ZCBhcnRpY2xlLiA8c3Ryb25nPk5vdGUgdGhpcyBvbmx5IGFmZmVjdHMgZmVhdHVyZWQgYXJ0 aWNsZXMgc2F2ZWQgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQ8L3N0cm9uZz4uIFRodXMgaWYg eW91IHdpc2ggdG8gYXBwbHkgYSBuZXcgVGV4dGlsZSBzZXR0aW5nIHRvIGV4aXN0aW5nIGFy dGljbGVzIHlvdSBuZWVkIHRvIHZpc2l0IGVhY2ggb25lIGluIHR1cm4gYnkgY2xpY2tpbmcg PGNvZGU+W0VkaXRdPC9jb2RlPiBhbmQgdGhlbiA8ZW0+U2F2ZTwvZW0+LjwvbGk+Cgk8L29s PgoKCTxwPllvdSAoYXMgYWRtaW5pc3RyYXRvcikgY2FuIGFsc28gYWx0ZXIgdGhlIGJlaGF2 aW91ciBvZiB0aGUgcGx1Z2luIGJ5IGNyZWF0aW5nIHNvbWUgaGlkZGVuIHByZWZlcmVuY2Vz ICh0aGUgc21kX3ByZWZhbGl6ZXIgcGx1Z2luIGNhbiBoZWxwIGhlcmUpLiBUaGVyZSBhcmUg dHdvIHByZWZzIHlvdSBtYXkgZGVmaW5lOjwvcD4KCgk8b2w+CgkJPGxpPjxzdHJvbmc+c21k X2ZlYXR1cmVkX3ByaXZzPC9zdHJvbmc+IDogYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBw cml2IGxldmVsIG51bWJlcnMgdGhhdCBjYW4gYWNjZXNzIHRoZSA8ZW0+RmVhdHVyZWQgYXJ0 aWNsZXM8L2VtPiB0YWIuIERlZmF1bHQ6IDxjb2RlPjEsMjwvY29kZT48L2xpPgoJCTxsaT48 c3Ryb25nPnNtZF9mZWF0dXJlZF9zZWN0aW9uX2xpc3Q8L3N0cm9uZz46IGRlZmluZSBhIGNv bW1hLXNlcGFyYXRlZCBsaXN0IG9mIHNlY3Rpb24gbmFtZXMuIFRoZXNlIHdpbGwgYmUgdGhl IG9ubHkgc2VjdGlvbnMgZnJvbSB3aGljaCBhcnRpY2xlcyBhcmUgYWxsb3dlZCB0byBiZSBm ZWF0dXJlZDwvbGk+Cgk8L29sPgoKCTxwPklmIHVzaW5nIHNtZF9wcmVmYWxpemVyIHRvIGNy ZWF0ZSB0aGUgcHJlZnMsIHNldCB0aGUgbmFtZSBhbmQgdmFsdWUgYXMgYWJvdmUgYW5kIHRo ZW4gc2V0IHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBwYXJhbWV0ZXJzOjwvcD4KCgk8dWw+ CgkJPGxpPjxzdHJvbmc+dHlwZTwvc3Ryb25nPiA6IGhpZGRlbjwvbGk+CgkJPGxpPjxzdHJv bmc+ZXZlbnQ8L3N0cm9uZz4gOiBzbWRfZmVhdHVyZWQ8L2xpPgoJCTxsaT48c3Ryb25nPmlu cHV0IGNvbnRyb2w8L3N0cm9uZz4gOiB0ZXh0X2lucHV0PC9saT4KCQk8bGk+PHN0cm9uZz51 c2VyPC9zdHJvbmc+IDogLyBlbXB0eSAvPC9saT4KCQk8bGk+PHN0cm9uZz5wb3NpdGlvbjwv c3Ryb25nPjogMDwvbGk+Cgk8L3VsPgoKCTxoMj5EaXNwbGF5aW5nIGZlYXR1cmVkIGFydGlj bGVzPC9oMj4KCgk8cD5PbmNlIHlvdSBoYXZlIGNob3NlbiB5b3VyIGZlYXR1cmVkIGFydGlj bGVzLCB5b3UgbmVlZCBhIHdheSB0byBkaXNwbGF5IHRoZW06PC9wPgoKCTxoMz48Y29kZT4m bHQ7dHhwOnNtZF9mZWF0dXJlZCAvJmd0OzwvY29kZT48L2gzPgoKCTxwPkFjdHMgYSBiaXQg bGlrZSB0aGUgc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDphcnRpY2xlIC8mZ3Q7PC9jb2RlPiB0 YWcgdG8gZGlzcGxheSBmZWF0dXJlZCBhcnRpY2xlcy4gQXR0cmlidXRlczo8L3A+CgoJPHVs PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWw8L3NwYW4+IDogZGlzcGxheSBmZWF0 dXJlZCBhcnRpY2xlcyB3aXRoIHRoaXMgbGFiZWwuIFNwZWNpZnkgPGNvZGU+bGFiZWw9JnF1 b3Q7JnF1b3Q7PC9jb2RlPiB0byBkaXNwbGF5IHVubGFiZWxsZWQgYXJ0aWNsZXMgKHdoaWNo IGFyZSA8c3Ryb25nPm5vdDwvc3Ryb25nPiB0aGUgc2FtZSBhcyB1bmZlYXR1cmVkIGFydGlj bGVzKS4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgb21pdHRlZCwgYWxsIGZlYXR1cmVkIGFydGlj bGVzICYjODIxMjsgaXJyZXNwZWN0aXZlIG9mIGxhYmVsICYjODIxMjsgd2lsbCBiZSBkaXNw bGF5ZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWx0YWc8L3NwYW4+IDog dGhlIChYKUhUTUwgdGFnICYjODIxMjsgd2l0aG91dCBicmFja2V0cyAmIzgyMTI7IHRvIGFw cGx5IHRvIHRoZSBsYWJlbCBhdHRyaWJ1dGUuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNp ZmllZCB0aGUgbGFiZWwgaXRzZWxmIGlzIGRpc3BsYXllZCBhdCB0aGUgaGVhZCBvZiB5b3Vy IGZlYXR1cmVkIGFydGljbGUgbGlzdC4gSWYgeW91IHdpc2ggdG8gZGlzcGxheSB1bmxhYmVs bGVkIGFydGljbGVzIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIDxjb2RlPnVubGFiZWw8L2Nv ZGU+IGF0dHJpYnV0ZSBvciB5b3UmIzgyMTc7bGwgc2VlIG5vIGxhYmVsLiBOb3RlIHRoYXQg dGhpcyB0YWcgZGlmZmVycyBmcm9tIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiBjb252ZW50aW9uOiB5b3Ugd2lsbCA8ZW0+b25seTwvZW0+IHNlZSB0aGUgbGFiZWwgaWYg eW91IHNwZWNpZnkgdGhlIDxjb2RlPmxhYmVsdGFnPC9jb2RlPi4gWW91IGNhbiBkaXNwbGF5 IHRoZSBsYWJlbCBpbnNpZGUgeW91ciBhcnRpY2xlcyB1c2luZyB0aGUgPGNvZGU+Jmx0O3R4 cDpmZWF0dXJlZF9pbmZvIC8mZ3Q7PC9jb2RlPiB0YWc8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+dW5sYWJlbDwvc3Bhbj4gOiB3aGVuIHVzaW5nIDxjb2RlPmxhYmVsPSZxdW90 OyZxdW90OzwvY29kZT4gKHRvIHNob3cgdW5sYWJlbGxlZCBhcnRpY2xlcykgdGhpcyBhdHRy aWJ1dGUgc3BlY2lmaWVzIHRoZSBsYWJlbCB0byB1c2UgaW5zaWRlIHRoZSA8Y29kZT5sYWJl bHRhZzwvY29kZT4uIERlZmF1bHQ6ICYjODIyMDtGZWF0dXJlZCYjODIyMTs8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+dGltZTwvc3Bhbj4gOiBsaW1pdCB0aGUgYXJ0aWNsZXMg dG8gdGhvc2UgaW4gdGhlIDxjb2RlPnBhc3Q8L2NvZGU+LCB0aGUgPGNvZGU+ZnV0dXJlPC9j b2RlPiBvciA8Y29kZT5hbnk8L2NvZGU+LiBEZWZhdWx0OiA8Y29kZT5wYXN0PC9jb2RlPjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0dXM8L3NwYW4+IDogb25seSBkaXNw bGF5IGFydGljbGVzIG9mIHRoZSBnaXZlbiBzdGF0dXMgbnVtYmVyKHMpLiBEZWZhdWx0OiA8 Y29kZT40LDU8L2NvZGU+IChhLmsuYS4gbGl2ZSBhbmQgc3RpY2t5KS4gTm90ZSB0aGF0IHRo aXMgYXR0cmlidXRlIG1heSBiZSBpZ25vcmVkIGlmIHlvdSBhcmUgdHJ5aW5nIHRvIHZpZXcg YW55dGhpbmcgb3RoZXIgbGl2ZSBhbmQgc3RpY2t5IGFydGljbGVzIChzaW5jZSBhcnRpY2xl X2N1c3RvbSBkb2VzIHRoZSBzYW1lKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5z ZWN0aW9uPC9zcGFuPiA6IG9ubHkgZGlzcGxheSBhcnRpY2xlcyBmcm9tIHRoZSBnaXZlbiBz ZWN0aW9uKHMpLiBJZiB0aGUgc2VjdGlvbiBsaXN0IGlzIHJlc3RyaWN0ZWQgdXNpbmcgdGhl IHBsdWdpbiBwcmVmZXJlbmNlcywgdGhlIHNlY3Rpb25zIHVzZWQgaGVyZSBtdXN0IGFsc28g YmUgaW4gdGhhdCBsaXN0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm08L3Nw YW4+IDogdXNlIHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gZm9ybSB0byBk aXNwbGF5IGVhY2ggYXJ0aWNsZSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgY29udGFpbmVyIGNv bnRlbnRzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxpbWl0PC9zcGFuPiA6IG1h eGltdW0gbnVtYmVyIG9mIGZlYXR1cmVkIGFydGljbGVzIHRvIGRpc3BsYXkuIERlZmF1bHQ6 IDEwPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNvcnQ8L3NwYW4+IDogb3JkZXIg dGhlIGZlYXR1cmVkIGFydGljbGVzIGJ5IDxjb2RlPmlkPC9jb2RlPiwgPGNvZGU+bGFiZWw8 L2NvZGU+LCA8Y29kZT5UaXRsZTwvY29kZT4sIDxjb2RlPlBvc3RlZDwvY29kZT4sIGFuZCBz byBvbi4gVGhlIHNhbWUgbGlzdCBhdmFpbGFibGUgZm9yIHRoZSA8Y29kZT4mbHQ7dHhwOmFy dGljbGUgLyZndDs8L2NvZGU+IHRhZyBhcmUgdXNhYmxlIGhlcmUuIEFkZCA8Y29kZT5hc2M8 L2NvZGU+IG9yIDxjb2RlPmRlc2M8L2NvZGU+IHRvIHRoZSBhdHRyaWJ1dGUgdG8gYWx0ZXIg dGhlIGRpcmVjdGlvbiBvZiB0aGUgc29ydC4gWW91IG1heSBhbHNvIHVzZSA8Y29kZT5yYW5k KCk8L2NvZGU+IHRvIHNvcnQgdGhlIGFydGljbGVzIHJhbmRvbWx5PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnICYjODIx Mjsgd2l0aG91dCBicmFja2V0cyAmIzgyMTI7IHRvIHdyYXAgYXJvdW5kIHRoZSBsaXN0IG9m IGZlYXR1cmVkIGFydGljbGVzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFr PC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZyAmIzgyMTI7IHdpdGhvdXQgYnJhY2tldHMgJiM4 MjEyOyBvciB0ZXh0IHRvIHB1dCBiZXR3ZWVuIGVhY2ggYXJ0aWNsZTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhcHBseSB0byB0aGUgd3JhcHRhZzwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5odG1sX2lkPC9zcGFuPiA6IGEgPHNwYW4gY2xhc3M9 ImNhcHMiPkRPTTwvc3Bhbj4gSUQgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWc8L2xpPgoJPC91 bD4KCgk8cD5Zb3UgbWF5IHVzZSB0aGUgdGFnIGFzIGEgY29udGFpbmVyIGFuZCBhbnkgdGFn cyB5b3Ugc3BlY2lmeSB3aWxsIGJlIGRpc3BsYXllZCBpbiBlYWNoIGZlYXR1cmVkIGFydGlj bGUuIFlvdSBjYW4gdXNlIHN0YW5kYXJkIGFydGljbGUgdGFncyBzdWNoIGFzIDxjb2RlPiZs dDt0eHA6dGl0bGUgLyZndDs8L2NvZGU+LCA8Y29kZT4mbHQ7dHhwOmV4Y2VycHQgLyZndDs8 L2NvZGU+LCA8Y29kZT4mbHQ7dHhwOnBlcm1saW5rIC8mZ3Q7PC9jb2RlPiwgZXRjLCBhbHRo b3VnaCBzb21lIGFydGljbGVzIGFyZSBub3QgZGlzcGxheWFibGUgYnkgVGV4dHBhdHRlcm4g KGUuZy4gaGlkZGVuLCBwZW5kaW5nIGFuZCBkcmFmdCBhcnRpY2xlcykuPC9wPgoKCTxwIGNs YXNzPSJpbXBvcnRhbnQiPk5vdGUgdGhhdCB5b3UgY2FuJiM4MjE3O3QgdXNlIDxjb2RlPiZs dDt0eHA6c21kX2ZlYXR1cmVkJmd0OzwvY29kZT4gaW5zaWRlIGFuIGFydGljbGUgb3IgYW4g QXJ0aWNsZSBGb3JtLiBEb2luZyBzbyB3aWxsIHRyaWdnZXIgYSB3YXJuaW5nIGJlY2F1c2Ug aXQmIzgyMTc7cyB0aGUgc2FtZSBhcyBwdXR0aW5nIGFub3RoZXIgYXJ0aWNsZSB0YWcgaW5z aWRlIGFuIGFydGljbGUuIFVzZSB0aGUgdGFnIG9ubHkgaW4gUGFnZXMsIG9yIGluIGEgRm9y bSB0aGF0IGlzIG5ldmVyIGRpcmVjdGx5IHVzZWQgdG8gZGlzcGxheSBhcnRpY2xlIGNvbnRl bnQuPC9wPgoKCTxwPkVhY2ggdGltZSB5b3UgdXNlIDxjb2RlPiZsdDt0eHA6c21kX2ZlYXR1 cmVkIC8mZ3Q7PC9jb2RlPiBpdCBtYWtlcyBhIG5vdGUgb2YgdGhlIGFydGljbGVzIGl0IGhh cyBkaXNwbGF5ZWQgYW5kIHdpbGwgbm90IGR1cGxpY2F0ZSBhcnRpY2xlcyBpbiBsYXRlciB0 YWdzLjwvcD4KCgk8aDM+PGNvZGU+Jmx0O3R4cDpzbWRfZmVhdHVyZWRfaW5mbyAvJmd0Ozwv Y29kZT48L2gzPgoKCTxwPkFsbG93cyB5b3UgdG8gZGlzcGxheSB0aGUgbGFiZWwgb3IgdGhl IGRlc2NyaXB0aW9uIHdpdGhpbiB5b3VyIDxjb2RlPiZsdDt0eHA6c21kX2ZlYXR1cmVkIC8m Z3Q7PC9jb2RlPiAgZm9ybS9jb250YWluZXIuPC9wPgoKCTxwPkhhcyBvbmUgYXR0cmlidXRl OjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pdGVtPC9zcGFuPiA6IHRo ZSB0aGluZyB5b3Ugd2FudCB0byBkaXNwbGF5LiBDaG9vc2UgZnJvbToKCTx1bD4KCQk8bGk+ PHN0cm9uZz5sYWJlbDwvc3Ryb25nPjogdGhlIGxhYmVsPC9saT4KCQk8bGk+PHN0cm9uZz50 aXRsZTwvc3Ryb25nPjogdGhlIChwb3NzaWJseSBUZXh0aWxlLXByb2Nlc3NlZCkgdGl0bGU8 L2xpPgoJCTxsaT48c3Ryb25nPmRlc2NyaXB0aW9uPC9zdHJvbmc+OiB0aGUgKHBvc3NpYmx5 IFRleHRpbGUtcHJvY2Vzc2VkKSBkZXNjcmlwdGlvbjwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3Vs PgoKCTxoMz48Y29kZT4mbHQ7dHhwOnNtZF91bmZlYXR1cmVkIC8mZ3Q7PC9jb2RlPjwvaDM+ CgoJPHA+VXNlIHRoaXMgdGFnIGlmIHlvdSB3aXNoIHRvIHNob3cgdGhlICYjODIxNjtyZW1h aW5pbmcmIzgyMTc7IGFydGljbGVzICYjODIxMjsgaS5lLiBvbmVzIG5vdCBhbHJlYWR5IGRp c3BsYXllZCBieSBhbnkgcHJlY2VkaW5nIDxjb2RlPiZsdDt0eHA6c21kX2ZlYXR1cmVkIC8m Z3Q7PC9jb2RlPiB0YWdzLiBJdCBhY3RzIHZlcnkgbXVjaCBsaWtlIHRoZSBidWlsdC1pbiBh cnRpY2xlIHRhZyAmIzgyMTI7IGFuZCB0YWtlcyBhbGwgdGhlIHNhbWUgYXR0cmlidXRlcyAm IzgyMTI7IGJ1dCBpdHMgY29udGV4dCBpcyAmIzgyMjA7YW55IGFydGljbGVzIGZyb20gYW55 IHNlY3Rpb24gZGVmaW5lZCBpbiB0aGUgc21kX2ZlYXR1cmVkIHBsdWdpbiB0aGF0IGhhdmUg bm90IGJlZW4gZGlzcGxheWVkIGFscmVhZHkmIzgyMjE7LjwvcD4KCgk8aDM+PGNvZGU+Jmx0 O3R4cDpzbWRfaWZfZmVhdHVyZWQmZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+VGhpcyB0YWcgYWxs b3dzIHlvdSB0byBkZXRlY3QgaWYgdGhlIGN1cnJlbnQgKGluZGl2aWR1YWwpIGFydGljbGUg aXMgZmVhdHVyZWQgYW5kL29yIGhhcyBhIHBhcnRpY3VsYXIgbGFiZWwuIFlvdSBtYXkgYWxz byB1c2UgdGhpcyBvdXRzaWRlIGFuIGFydGljbGUgY29udGV4dCBieSBzdXBwbHlpbmcgYSBs aXN0IG9mIGFydGljbGUgSURzLjwvcD4KCgk8cD5IYXMgdHdvIGF0dHJpYnV0ZXM6PC9wPgoK CTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmlkPC9zcGFuPiA6IGxpc3Qgb2YgYXJ0 aWNsZSBJRHMgb2Ygd2hpY2ggeW91IHdpc2ggdG8gY2hlY2sgdGhlIGZlYXR1cmVkIHN0YXR1 cy4gSWYgb21pdHRlZCwgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYXJ0aWNsZSAoaWYgdXNl ZCBpbnNpZGUgYSA8Y29kZT4mbHQ7dHhwOmFydGljbGUgLyZndDs8L2NvZGU+IGNvbnRhaW5l ci9mb3JtKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5sYWJlbDwvc3Bhbj4gOiBs aXN0IG9mIGxhYmVscyB0byBjb21wYXJlIHRoZSBnaXZlbiBJRChzKSB3aXRoLiBTcGVjaWZ5 IDxjb2RlPmxhYmVsPSZxdW90OyZxdW90OzwvY29kZT4gdG8gY2hlY2sgZm9yIHVubGFiZWxs ZWQgYXJ0aWNsZXMsIG9yIHVzZSBhbiBlbXB0eSBpdGVtIGlmIHNwZWNpZnlpbmcgYSBsaXN0 LCBlLmcuIDxjb2RlPmxhYmVsPSZxdW90OywgRmVhdHVyZWQsIFRlYXNlciZxdW90OzwvY29k ZT4uIFJlbWVtYmVyIHRoYXQgbGFiZWxzIGFyZSBjYXNlIHNlbnNpdGl2ZTwvbGk+Cgk8L3Vs PgoKCTxwPklmIHRoZSBhcnRpY2xlIG1hdGNoZXMgb25lIG9mIHRoZSBnaXZlbiBsYWJlbHMg dGhlIGNvbnRhaW5lZCBjb250ZW50IHdpbGwgYmUgZXhlY3V0ZWQuIElmIG5vIGxhYmVsIGlz IGdpdmVuIHRoZSBhcnRpY2xlKHMpIHdpbGwgYmUgY2hlY2tlZCBpZiB0aGV5IGFyZSBmZWF0 dXJlZCwgaXJyZXNwZWN0aXZlIG9mIGxhYmVsLjwvcD4KCgk8aDI+RXhhbXBsZXM8L2gyPgoK CTxoMyBpZD0iZWcxIj5FeGFtcGxlIDE6IENvbXBsZXRlIGRpcmVjdG9yeSBvZiBmZWF0dXJl ZCBhcnRpY2xlczwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2Nr Ij4mbHQ7dHhwOnNtZF9mZWF0dXJlZCBsYWJlbHRhZz0mcXVvdDtoMiZxdW90OyBsaW1pdD0m cXVvdDsyMCZxdW90OwogICAgIHdyYXB0YWc9JnF1b3Q7ZGwmcXVvdDsgc29ydD0mcXVvdDts YWJlbCZxdW90OyZndDsKICAgJmx0O3R4cDppZl9kaWZmZXJlbnQmZ3Q7CiAgICAgICZsdDto MiZndDsmbHQ7dHhwOnNtZF9mZWF0dXJlZF9pbmZvIGl0ZW09JnF1b3Q7bGFiZWwmcXVvdDsg LyZndDsmbHQ7L2gyJmd0OwogICAmbHQ7L3R4cDppZl9kaWZmZXJlbnQmZ3Q7CiAgICZsdDtk dCZndDsKICAgICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0 Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDsvZHQmZ3Q7CiAgICZsdDtkZCZndDsKICAgICAg Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7CiAgICZsdDsvZGQmZ3Q7CiZsdDsvdHhwOnNtZF9mZWF0 dXJlZCZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI6IE9uZSBm ZWF0dXJlZCBhcnRpY2xlIGFuZCBzaXggdGVhc2VycyBvbiB0aGUgaG9tZSBwYWdlPC9oMz4K Cgk8cD5TZWxlY3QgYW4gYXJ0aWNsZSBhbmQgbGFiZWwgaXQgPGNvZGU+ZmVhdHVyZTwvY29k ZT4uIFNlbGVjdCBzaXggb3RoZXJzIGFuZCBsYWJlbCB0aGVtIDxjb2RlPnRlYXNlcnM8L2Nv ZGU+LiBBZGQgc29tZSBkZXNjcmlwdGlvbiB0ZXh0IHRvIHlvdXIgdGVhc2VyIGFydGljbGVz LjwvcD4KCgk8cD5JbiB5b3VyIGRlZmF1bHQgUGFnZSwgcHV0IHRoaXM6PC9wPgoKPHByZSBj bGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfZmVhdHVyZWQg bGFiZWw9JnF1b3Q7ZmVhdHVyZSZxdW90OwogICAgIHdyYXB0YWc9JnF1b3Q7ZGl2JnF1b3Q7 IGh0bWxfaWQ9JnF1b3Q7bWFpbl9mZWF0dXJlJnF1b3Q7Jmd0OwogICAmbHQ7dHhwOnBlcm1s aW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgJmx0 O3R4cDphcnRpY2xlX2ltYWdlIGNsYXNzPSZxdW90O2ZlYXRfaW1hZ2UmcXVvdDsgLyZndDsK ICAgJmx0O3AgY2xhc3M9JnF1b3Q7bGVhZGluJnF1b3Q7Jmd0OyZsdDt0eHA6ZXhjZXJwdCAv Jmd0OyZsdDsvcCZndDsKJmx0Oy90eHA6c21kX2ZlYXR1cmVkJmd0Owo8L2NvZGU+PC9wcmU+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9m ZWF0dXJlZCBsYWJlbD0mcXVvdDt0ZWFzZXJzJnF1b3Q7CiAgICAgd3JhcHRhZz0mcXVvdDt1 bCZxdW90OyBicmVhaz0mcXVvdDtsaSZxdW90OyBodG1sX2lkPSZxdW90O3RlYXNlcl9ibG9j ayZxdW90OyZndDsKICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7 Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDtwIGNsYXNzPSZxdW90O2xlYWRpbiZxdW90 OyZndDsmbHQ7dHhwOmV4Y2VycHQgLyZndDsmbHQ7L3AmZ3Q7CiZsdDsvdHhwOnNtZF9mZWF0 dXJlZCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPklmIHlvdSB3YW50ZWQgdG8gaGF2ZSBzb21l IG90aGVyIGFydGljbGVzIGJlbmVhdGggdGhvc2UsIGJ1dCBkaWRuJiM4MjE3O3Qgd2FudCBh bnkgZHVwbGljYXRlcyB0byBhcHBlYXIgeW91IGNvdWxkIHVzZTo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF91bmZlYXR1cmVkIGZv cm09JnF1b3Q7bXlfbGlzdCZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJl ZzMiPkV4YW1wbGUgMzogUGVyLXNlY3Rpb24gbGFuZGluZyBwYWdlIGZlYXR1cmVkIGFydGlj bGVzPC9oMz4KCgk8cD5JZiB5b3UgaGFkIGEgem9vIHNpdGUgd2l0aCBhIHNlY3Rpb24gZm9y IHByaW1hdGVzLCBhIHNlY3Rpb24gZm9yIG1hbW1hbHMgYW5kIGEgc2VjdGlvbiBmb3IgcmVw dGlsZXMsIHdoZW4geW91IHNldCB1cCB5b3VyIGZlYXR1cmVkIGFydGljbGUgbGlzdCBkZWZp bmUgdGhlaXIgbmFtZXMgbGlrZSB0aGlzOjwvcD4KCgk8dWw+CgkJPGxpPkZlYXR1cmVkIHBy aW1hdGVzPC9saT4KCQk8bGk+RmVhdHVyZWQgbWFtbWFsczwvbGk+CgkJPGxpPkZlYXR1cmVk IHJlcHRpbGVzPC9saT4KCTwvdWw+CgoJPHA+T24geW91ciBzZWN0aW9uIGxhbmRpbmcgcGFn ZSB0ZW1wbGF0ZSB5b3UgY2FuIHRoZW4gZG8gdGhpcyB0byBkaXNwbGF5IGZvdXIgYXJ0aWNs ZXMgZnJvbSB0aGUgcmVsZXZhbnQgKGN1cnJlbnQpIHNlY3Rpb246PC9wPgoKPHByZSBjbGFz cz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O2gyJmd0O0xvb2sgd2hvJiMzOTtz IGhlcmU6Jmx0Oy9oMiZndDsKJmx0O3R4cDpzbWRfZmVhdHVyZWQgbGFiZWw9JiMzOTtGZWF0 dXJlZCAmbHQ7dHhwOnNlY3Rpb24gLyZndDsmIzM5OwogICAgIHNlY3Rpb249JiMzOTsmbHQ7 dHhwOnNlY3Rpb24gLyZndDsmIzM5OyBsaW1pdD0mcXVvdDs0JnF1b3Q7CiAgICAgd3JhcHRh Zz0mcXVvdDtkaXYmcXVvdDsgaHRtbF9pZD0mcXVvdDtmZWF0X2Jsb2NrJnF1b3Q7Jmd0Owog ICAmbHQ7ZGl2IGNsYXNzPSZxdW90O3BpbXBlZF9hcnRpY2xlJnF1b3Q7Jmd0OwogICAgICAm bHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGlu ayZndDsKICAgICAgJmx0O3R4cDpzbWRfZmVhdHVyZWRfaW5mbyBpdGVtPSZxdW90O2Rlc2Ny aXB0aW9uJnF1b3Q7IC8mZ3Q7CiAgICZsdDsvZGl2Jmd0OwombHQ7L3R4cDpzbWRfZmVhdHVy ZWQmZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImVnNCI+RXhhbXBsZSA0OiBDb25kaXRp b25hbCBjaGVjayBmb3IgZmVhdHVyZWQtbmVzczwvaDM+CgoJPHA+SWYgYSBzaXRlIHZpc2l0 b3IgaGFzIG5hdmlnYXRlZCBhd2F5IGZyb20geW91ciBmcm9udCBwYWdlIGFuZCBpcyB2aWV3 aW5nIGFuIGFydGljbGUsIHlvdSBtYXkgd2lzaCB0byBoaWdobGlnaHQgdGhlIGZhY3QgdGhl IGN1cnJlbnQgYXJ0aWNsZSBpcyBhIGZlYXR1cmVkIHByb2R1Y3QuIFNvLCBzb21ld2hlcmUg aW5zaWRlIHlvdSBhcnRpY2xlIGZvcm0gYWRkOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX2ZlYXR1cmVkJmd0OwogICAmbHQ7 cCBjbGFzcz0mcXVvdDtoaWxpZ2h0JnF1b3Q7Jmd0O0ZFQVRVUkVEIFBST0RVQ1QmbHQ7L3Am Z3Q7CiZsdDsvdHhwOnNtZF9pZl9mZWF0dXJlZCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk9y IGlmIHlvdSB3YW50ZWQgdG8gb25seSBoaWdobGlnaHQgdGhlIGFydGljbGUgaWYgaXQgd2Fz IGEgZmVhdHVyZWQgb3Igb24gc3BlY2lhbCBvZmZlcjo8L3A+Cgo8cHJlIGNsYXNzPSJibG9j ayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9pZl9mZWF0dXJlZCBsYWJlbD0m cXVvdDtGZWF0dXJlZCwgU3BlY2lhbCZxdW90OyZndDsKICAgJmx0O3AgY2xhc3M9JnF1b3Q7 aGlsaWdodCZxdW90OyZndDtBcyBmZWF0dXJlZCBvbiB0aGUgZnJvbnQgcGFnZSEmbHQ7L3Am Z3Q7CiZsdDsvdHhwOnNtZF9pZl9mZWF0dXJlZCZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMiBp ZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTggSnVuIDEwIHwg MC4xMCB8IEluaXRpYWwgcmVsZWFzZTwvbGk+CgkJPGxpPjA3IFNlcCAxMCB8IDAuMjAgfCBS ZW5hbWVkIGlkIGNvbHVtbiB0byBmZWF0X2lkIDsgZml4ZWQgPGNvZGU+bGFiZWw8L2NvZGU+ IGF0dHJpYnV0ZSBidWcgKGJvdGggdGhhbmtzIHBpZW1hbikgOyBsYWJlbCBzZWFyY2hlcyBh cmUgbm93IGV4YWN0IG1hdGNoZXMgOyBhZGRlZCBwcmVmcyBhbmQgcGFnaW5hdGlvbiBzdXBw b3J0IGZvciBhZG1pbiBzaWRlIDsgYWRkZWQgPGNvZGU+Jmx0O3R4cDpzbWRfaWZfZmVhdHVy ZWQmZ3Q7PC9jb2RlPiA7IGFkZGVkIGxhYmVsIHNlbGVjdGlvbiBmcm9tIGRyb3Bkb3duIGR1 cmluZyBlZGl0aW5nICh0aGFua3MgdHllKTwvbGk+CgkJPGxpPjEzIFNlcCAxMCB8IDAuMjEg fCBBZGRlZCAmIzgyMTY7dGl0bGUmIzgyMTc7IGFuZCBUZXh0aWxlIG9wdGlvbnMgKGJvdGgg dGhhbmtzIGJnKTwvbGk+CgkJPGxpPjEzIFNlcCAxMCB8IDAuMjIgfCBGaXhlZCBtaXNzaW5n IGRvU2xhc2goKSBvbiB1bnRleHRpbGVkIGh0bWwgY29udGVudCAodGhhbmtzIGJnKTwvbGk+ CgkJPGxpPjA1IE9jdCAxMCB8IDAuMzAgfCBVc2UgPGNvZGU+YXJ0aWNsZV9jdXN0b20oKTwv Y29kZT4gbm90IDxjb2RlPmFydGljbGUoKTwvY29kZT4gdG8gc2lkZXN0ZXAgaW5kaXZpZHVh bCBhcnRpY2xlIGNvbnRleHQgKHRoYW5rcyBqb2huc3RlcGhlbnMpIDsgcGFzcyA8Y29kZT50 aW1lPC9jb2RlPiBhbmQgPGNvZGU+bGltaXQ8L2NvZGU+IHRvIDxjb2RlPmFydGljbGVfY3Vz dG9tKCk8L2NvZGU+IDsgPGNvZGU+bGltaXQ8L2NvZGU+IGhhcyBkZWZhdWx0IG9mIDEwPC9s aT4KCQk8bGk+MTEgT2N0IDEwIHwgMC4zMSB8IEJldHRlciB0aGVtZSBpbnRlZ3JhdGlvbiAo dGhhbmtzIHRoZWJvbWJzaXRlKTwvbGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lO IFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAg eyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xk OyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBi YWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBjb2Rl LmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBk aXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQoj c21kX2hlbHAgaDEgeyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjog MDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206 IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgZm9udDogMTdweCBHZW9yZ2lh LCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwg c2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0 LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3Nt ZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXIt c3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJj YXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxw IC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNz bWRfaGVscCB0YWJsZSB7IHdpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmct Ym90dG9tOjFlbTsgfQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7IGJvcmRlcjoxcHgg c29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7IH0KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHls ZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAgLmltcG9ydGFudCB7IGNvbG9yOnJlZDsgfQoj c21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5i cmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4g Q1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiYTkzNmE2OTg0Zjk4NjZmNzhkMzc4MTg5 OTBiNjk3NTQiO30=