# Name: smd_featured v0.40 # Type: Admin/Public 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 b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNDAiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjgwOiJRdWlja2x5IGxhYmVsIGFuZCBkaXNwbGF5IGZlYXR1cmVkIGFydGljbGVzIGZvciB5 b3VyIHNpdGUncyBob21lIC8gbGFuZGluZyBwYWdlcyI7czo0OiJjb2RlIjtzOjQwMTg3OiIv LyBUT0RPOg0KLy8gIEFkZCBwb3NpdGlvbiBjb2x1bW4gYW5kIGFsbG93IHNvcnRpbmcgcGVy IGxhYmVsICh0ZXh0IGJveCBpbiBjZWxscyB3aXRoIGFqYXggdXBkYXRlIG9uYmx1cj8pDQpp ZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICRzbWRfZmVhdHVyZWRf ZXZlbnQsICRzbWRfZmVhdHVyZWRfc3R5bGVzLCAkc21kX2ZlYXR1cmVkX3ByZWZfcHJpdnM7 DQoNCgkkc21kX2ZlYXR1cmVkX2V2ZW50ID0gJ3NtZF9mZWF0dXJlZCc7DQoJJHNtZF9mZWF0 dXJlZF9wcml2cyA9IGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfcHJpdnMnLCAnMSwyJyk7DQoJ JHNtZF9mZWF0dXJlZF9wcmVmX3ByaXZzID0gYXJyYXkoDQoJCSdhbGwnID0+IGFycmF5KA0K CQkJJ3NtZF9mZWF0dXJlZF9kaXNwbGF5JywNCgkJCSdzbWRfZmVhdHVyZWRfYm94X3NpemUn LA0KCQkJJ3NtZF9mZWF0dXJlZF9zb3J0JywNCgkJKSwNCgkJJzEnID0+IGFycmF5KA0KCQkJ J3NtZF9mZWF0dXJlZF9zZWN0aW9uX2xpc3QnLA0KCQkJJ3NtZF9mZWF0dXJlZF90ZXh0aWxl JywNCgkJCSdzbWRfZmVhdHVyZWRfc2hvd191aScsDQoJCSksDQoJKTsNCgkkc21kX2ZlYXR1 cmVkX3N0eWxlcyA9IGFycmF5KA0KCQknY29tbW9uJyA9Pg0KICAgICAgICAgJyNzbWRfYWxs IGgzIHsgbWFyZ2luOjE1cHggMDsgfQ0KICAgICAgICAgI3NtZF9mZWF0dXJlZF9jcGFuZWwg Zm9ybSBmaWVsZHNldCB7IGJvcmRlcjowOyB9DQogICAgICAgICAjc21kX2ZlYXR1cmVkX2Nw YW5lbCBmb3JtIGxlZ2VuZCB7IG1hcmdpbjoxMnB4IDA7IH0NCiAgICAgICAgIC5maWVsZHNl dF9pbm5lciB7IGJhY2tncm91bmQtaW1hZ2U6bm9uZTsgYmFja2dyb3VuZC1jb2xvcjp0cmFu c3BhcmVudDsgYm9yZGVyOjA7IH0NCiAgICAgICAgICNzbWRfZmVhdHVyZWRfY3BhbmVsIHNl bGVjdCwgI3NtZF9mZWF0dXJlZF9jcGFuZWwgaW5wdXRbdHlwZT0idGV4dCJdIHsgbWFyZ2lu LWJvdHRvbToxMHB4OyB9DQogICAgICAgICAjc21kX2ZlYXR1cmVkX2NwYW5lbCBpbnB1dFt0 eXBlPSJ0ZXh0Il0geyBwYWRkaW5nOjNweDsgfQ0KICAgICAgICAgI2NvbnRyb2wgaW5wdXQs ICNjb250cm9sIHNlbGVjdCB7IG1hcmdpbjowOyB9DQogICAgICAgICAuc21kX2hpZGRlbiB7 IGRpc3BsYXk6bm9uZTsgfQ0KICAgICAgICAgLnNtZF9mZWF0dXJlZCB7IGJhY2tncm91bmQt Y29sb3I6I2UyZGZjZTsgcG9zaXRpb246cmVsYXRpdmU7IH0NCiAgICAgICAgIC5zbWRfZmVh dHVyZWQgYSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjojODA1NTFlOyB9DQogICAgICAg ICAjc21kX2ZlYXR1cmVkX2NvbnRyb2xfcGFuZWwgeyBtYXJnaW46MCBhdXRvIDIwcHg7IHdp ZHRoOjYwMHB4OyB9DQogICAgICAgICAjc21kX2ZlYXR1cmVkX3ByZWZzIHsgbWFyZ2luLWxl ZnQ6MTJweDsgfQ0KICAgICAgICAgLnNtZF9mZWF0dXJlZF9zYXZlIHsgZmxvYXQ6cmlnaHQ7 IH0NCiAgICAgICAgIC5zbWRfZmVhdHVyZWRfc3VicGFuZWwgeyBmbG9hdDpsZWZ0OyB9DQog ICAgICAgICAuc21kX2ZlYXR1cmVkX3RhYmxlIHsgd2lkdGg6ODAwcHg7IG1hcmdpbjowIGF1 dG8gODBweDsgfQ0KICAgICAgICAgLnNtZF9jbGVhciB7IGNsZWFyOmJvdGg7IH0NCiAgICAg ICAgIC5zbWRfZmVhdHVyZWRfdGFibGUgZGl2IHsgZmxvYXQ6bGVmdDsgd2lkdGg6e2J3fXB4 OyBoZWlnaHQ6e2JofXB4OyBib3JkZXI6MXB4IHNvbGlkICNhYWE7IHBhZGRpbmc6NHB4OyBv dmVyZmxvdzpoaWRkZW47IH0NCiAgICAgICAgIC5zbWRfZmVhdF9lZGFydCB7IHBvc2l0aW9u OmFic29sdXRlOyByaWdodDo1cHg7IGJvdHRvbTozcHg7IH0NCiAgICAgICAgIC5zbWRfZmVh dF9lZHBvcyB7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjJweDsgYm90dG9tOjJweDsgZm9u dC1zaXplOjc1JTsgd2lkdGg6N2VtO30nLA0KCQknbG9hZGluZycgPT4NCiAgICAgICAgICdj b2xvcjojODA1NTFlOyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjIwMCU7IGZvbnQt c3R5bGU6aXRhbGljOyB3aWR0aDo1MDBweDsgaGVpZ2h0OjEwMHB4OyBtYXJnaW46MCBhdXRv OyBib3JkZXI6MXB4IHNvbGlkICM3Nzc7IGJhY2tncm91bmQ6I2UyZGZjZTtkaXNwbGF5OmJs b2NrJywNCgkJJ2xvYWRpbmdfZGl2JyA9Pg0KICAgICAgICAgJ21hcmdpbi10b3A6MzBweDsn LA0KCSk7DQoNCglhZGRfcHJpdnMoJHNtZF9mZWF0dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJl ZF9wcml2cyk7DQoJcmVnaXN0ZXJfdGFiKCJjb250ZW50IiwgJHNtZF9mZWF0dXJlZF9ldmVu dCwgc21kX2ZlYXR1cmVkX2dUeHQoJ3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNr KCdzbWRfZmVhdHVyZWRfbWFuYWdlJywgJHNtZF9mZWF0dXJlZF9ldmVudCk7DQoJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF9mZWF0dXJlZF93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUu c21kX2ZlYXR1cmVkJyk7DQp9DQoNCmlmICghZGVmaW5lZCgnU01EX0ZFQVQnKSkgew0KCWRl ZmluZSgiU01EX0ZFQVQiLCAnc21kX2ZlYXR1cmVkJyk7DQp9DQoNCi8vICoqKioqKioqKioN Ci8vIEFETUlOIFNJREUNCi8vICoqKioqKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX21hbmFnZSgkZXZ0LCAkc3RwKSB7DQoJaWYg KCRzdHAgPT0gJ3NhdmVfcGFuZV9zdGF0ZScpIHsNCgkJc21kX2ZlYXR1cmVkX3NhdmVfcGFu ZV9zdGF0ZSgpOw0KCX0gZWxzZSB7DQoJCWlmKCEkc3RwIG9yICFpbl9hcnJheSgkc3RwLCBh cnJheSgNCgkJCQknc21kX2ZlYXR1cmVkX3RhYmxlX2luc3RhbGwnLA0KCQkJCSdzbWRfZmVh dHVyZWRfdGFibGVfcmVtb3ZlJywNCgkJCQknc21kX2ZlYXR1cmVkX3ByZWZzYXZlJywNCgkJ CQknc21kX2ZlYXR1cmVkX3NhdmUnLA0KCQkJCSdzbWRfZmVhdHVyZWRfc3RvcmVfcG9zJywN CgkJCQknc21kX2ZlYXR1cmVkX3RhZ2l0JywNCgkJCQknc21kX2ZlYXR1cmVkX2NoYW5nZV9w YWdlYnknLA0KCQkJKSkpIHsNCgkJCXNtZF9mZWF0dXJlZF9saXN0KCcnKTsNCgkJfSBlbHNl ICRzdHAoKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX2ZlYXR1cmVkX3dlbGNvbWUoJGV2dCwgJHN0cCkgew0KCSRtc2cgPSAnJzsNCglz d2l0Y2ggKCRzdHApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9mZWF0dXJlZF90 YWJsZV9pbnN0YWxsKDApOw0KCQkJLy8gUmVtb3ZlIHNvbWUgb2YgdGhlIHBlci11c2VyIHBy ZWZzIG9uIHVwZ3JhZGUgZnJvbSB2MC4zeCB0byB2MC40MA0KCQkJc2FmZV9kZWxldGUgKCd0 eHBfcHJlZnMnLCAibmFtZSBJTiAoJ3NtZF9mZWF0dXJlZF90ZXh0aWxlJykgQU5EIHVzZXJf bmFtZSAhPSAnJyIpOw0KCQkJJG1zZyA9ICdUaGFua3MgZm9yIGluc3RhbGxpbmcgc21kX2Zl YXR1cmVkLiBQbGVhc2UgcmVhZCB0aGUgZG9jcyA6LSknOw0KCQkJYnJlYWs7DQoJCWNhc2Ug J2RlbGV0ZWQnOg0KCQkJc21kX2ZlYXR1cmVkX3RhYmxlX3JlbW92ZSgwKTsNCgkJCWJyZWFr Ow0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfbGlzdCgkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRf ZmVhdHVyZWRfZXZlbnQsICRzbWRfZmVhdHVyZWRfbGlzdF9wYWdlYnksICRzbWRfZmVhdHVy ZWRfc3R5bGVzLCAkdHhwX3VzZXIsICRzbWRfZmVhdHVyZWRfcHJlZl9wcml2czsNCg0KCXBh Z2V0b3Aoc21kX2ZlYXR1cmVkX2dUeHQoJ3RhYl9uYW1lJyksICRtc2cpOw0KCWV4dHJhY3Qo Z3BzYShhcnJheSgnc21kX2ZlYXRfaWQnLCAnc21kX2ZlYXRfbGFiZWwnLCAnc21kX2ZlYXRf c2VhcmNoa2VlcCcsICdzbWRfZmVhdF9maWx0a2VlcCcsICdwYWdlJykpKTsNCg0KCWlmIChz bWRfZmVhdHVyZWRfdGFibGVfZXhpc3QoMSkpIHsNCgkJJGZlYXRsaXN0ID0gc2FmZV9yb3dz KCcqJywgU01EX0ZFQVQsICcxPTEnKTsNCgkJJGZlYXRsaXN0ID0gZW1wdHkoJGZlYXRsaXN0 KSA/IGFycmF5KCkgOiAkZmVhdGxpc3Q7DQoJCSRlZGl0bmFtZSA9ICRmZWF0X2xhYmVsID0g JGZlYXRfdGl0bGUgPSAkZmVhdF9kZXNjID0gJyc7DQoNCgkJJGV0eXBlcyA9ICRmdHlwZXMg PSAkZmxpc3QgPSBhcnJheSgpOw0KCQkkZXR5cGVzWycnXSA9IHNtZF9mZWF0dXJlZF9nVHh0 KCd1bmxhYmVsbGVkJyk7DQoJCSRmdHlwZXNbJ3NtZF91bmxhYmVsbGVkJ10gPSBzbWRfZmVh dHVyZWRfZ1R4dCgndW5sYWJlbGxlZCcpOw0KCQlmb3JlYWNoICgkZmVhdGxpc3QgYXMgJGl0 ZW0pIHsNCgkJCWlmIChpc3NldCgkaXRlbVsnbGFiZWwnXSkgJiYgIWVtcHR5KCRpdGVtWyds YWJlbCddKSkgew0KCQkJCSRmdHlwZXNbJGl0ZW1bJ2xhYmVsJ11dID0gJGV0eXBlc1skaXRl bVsnbGFiZWwnXV0gPSAkaXRlbVsnbGFiZWwnXTsNCgkJCX0NCgkJCSRmbGlzdFskaXRlbVsn ZmVhdF9pZCddXSA9IGFycmF5KA0KCQkJCSdsYWJlbCcgPT4gJGl0ZW1bJ2xhYmVsJ10sDQoJ CQkJJ3Bvc2l0aW9uJyA9PiAkaXRlbVsnZmVhdF9wb3NpdGlvbiddLA0KCQkJCSd0aXRsZScg PT4gJGl0ZW1bJ2ZlYXRfdGl0bGUnXSwNCgkJCQkndGl0bGVfaHRtbCcgPT4gJGl0ZW1bJ2Zl YXRfdGl0bGVfaHRtbCddLA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJGl0ZW1bJ2Rlc2NyaXB0 aW9uJ10sDQoJCQkJJ2Rlc2NfaHRtbCcgPT4gJGl0ZW1bJ2Rlc2NfaHRtbCddDQoJCQkpOw0K CQl9DQoNCgkJJGZlYXRsaXN0ID0gJGZsaXN0Ow0KDQoJCSRwcml2cyA9IHNhZmVfZmllbGQo J3ByaXZzJywgJ3R4cF91c2VycycsICJuYW1lID0gJyIuZG9TbGFzaCgkdHhwX3VzZXIpLiIn Iik7DQoJCSRyaWdodHMgPSBhcnJheV9rZXlfZXhpc3RzKCRwcml2cywgJHNtZF9mZWF0dXJl ZF9wcmVmX3ByaXZzKTsNCg0KCQkvLyBHZXQgYWRkaXRpb25hbCBmaWx0ZXJpbmcgZnJvbSBo aWRkZW4gcHJlZnMNCgkJJHdoZXJlID0gYXJyYXkoJzE9MScpOw0KCQkkc2VjbGlzdCA9IGdl dF9wcmVmKCdzbWRfZmVhdHVyZWRfc2VjdGlvbl9saXN0JywgJycsIDEpOw0KCQlpZiAoJHNl Y2xpc3QpIHsNCgkJCSR3aGVyZVtdID0gIlNlY3Rpb24gSU4gKCciLmpvaW4oIicsJyIsIGRv X2xpc3QoJHNlY2xpc3QpKS4iJykiOw0KCQl9DQoJCSR3aGVyZVtdID0gIlN0YXR1cyBJTiAo NCw1KSI7DQoNCgkJJG9yZGVyYnkgPSBnZXRfcHJlZignc21kX2ZlYXR1cmVkX3NvcnQnLCAn UG9zdGVkIGRlc2MnLCAxKTsNCgkJJG9yZGVycXJ5ID0gKCRvcmRlcmJ5KSA/ICcgT1JERVIg QlkgJy5kb1NsYXNoKCRvcmRlcmJ5KSA6ICcnOw0KCQkkY3Vyck9yZGVyID0gZXhwbG9kZSgn ICcsICRvcmRlcmJ5KTsNCgkJJGN1cnJPcmRlclswXSA9IChpc3NldCgkY3Vyck9yZGVyWzBd KSkgPyAkY3Vyck9yZGVyWzBdIDogJ1Bvc3RlZCc7DQoJCSRjdXJyT3JkZXJbMV0gPSAoaXNz ZXQoJGN1cnJPcmRlclsxXSkpID8gJGN1cnJPcmRlclsxXSA6ICdkZXNjJzsNCgkJJGRpc3Bs YXkgPSBnZXRfcHJlZignc21kX2ZlYXR1cmVkX2Rpc3BsYXknLCAnYWxsJywgMSk7DQoNCgkJ Ly8gR2VuZXJhdGUgdGhlIGV4dHJhIGNyaXRlcmlhIGlmIGluIGxpc3Qgdmlldw0KCQlpZiAo JGRpc3BsYXk9PSdwYWdpbmF0ZWQnKSB7DQoJCQlpZiAoJHNtZF9mZWF0X3NlYXJjaGtlZXAp IHsNCgkJCQkkaXRlbXMgPSBkb19saXN0KCRzbWRfZmVhdF9zZWFyY2hrZWVwLCAnICcpOw0K CQkJCSRpdGxpc3QgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkg ew0KCQkJCQlpZiAodHJpbSgkaXRlbSkgIT0gJycpIHsNCgkJCQkJCSRpdGxpc3RbXSA9ICJU aXRsZSBsaWtlICclJGl0ZW0lJyI7DQoJCQkJCX0NCgkJCQl9DQoJCQkJJHdoZXJlW10gPSAn KCcuam9pbignIE9SICcsICRpdGxpc3QpLicpJzsNCgkJCX0NCgkJCWlmICgkc21kX2ZlYXRf ZmlsdGtlZXApIHsNCgkJCQkkbGJsID0gKCRzbWRfZmVhdF9maWx0a2VlcCA9PSAnc21kX3Vu bGFiZWxsZWQnKSA/ICcnIDogJHNtZF9mZWF0X2ZpbHRrZWVwOw0KCQkJCSRpZHMgPSBzYWZl X2NvbHVtbignZmVhdF9pZCcsIFNNRF9GRUFULCAiQklOQVJZIGxhYmVsID0gJyRsYmwnIik7 DQoJCQkJJHdoZXJlW10gPSAiSUQgSU4gKCciLmpvaW4oIicsJyIsICRpZHMpLiInKSI7DQoJ CQl9DQoJCX0NCg0KCQkkd2hlcmUgPSBqb2luKCcgQU5EICcsICR3aGVyZSk7DQoJCSR0b3Rh bCA9IHNhZmVfY291bnQoJ3RleHRwYXR0ZXJuJywgJHdoZXJlKTsNCgkJJGRvX3BhZyA9ICEk c21kX2ZlYXRfZmlsdGtlZXAgJiYgISRzbWRfZmVhdF9zZWFyY2hrZWVwOw0KDQoJCSRsaW1p dCA9ICgkZGlzcGxheT09J3BhZ2luYXRlZCcgJiYgJGRvX3BhZykgPyBtYXgoJHNtZF9mZWF0 dXJlZF9saXN0X3BhZ2VieSwgMTUpIDogOTk5OTk7DQoJCWxpc3QoJHBhZ2UsICRvZmZzZXQs ICRudW1QYWdlcykgPSBwYWdlcigkdG90YWwsICRsaW1pdCwgJHBhZ2UpOw0KDQoJCSRycyA9 IHNhZmVfcm93cygnKicsICd0ZXh0cGF0dGVybicsICR3aGVyZS4gJG9yZGVycXJ5IC4gIiBs aW1pdCAkb2Zmc2V0LCAkbGltaXQiKTsNCgkJJG91dCA9IGFycmF5KCk7DQoJCWZvcmVhY2gg KCRycyBhcyAkcm93KSB7DQoJCQkkZnR5cGUgPSBpc3NldCgkZmVhdGxpc3RbJHJvd1snSUQn XV1bJ2xhYmVsJ10pID8gJGZlYXRsaXN0WyRyb3dbJ0lEJ11dWydsYWJlbCddIDogJyc7DQoJ CQkkb3V0W10gPSBhcnJheSgkcm93WydJRCddLCAkcm93WydUaXRsZSddLCAkZnR5cGUpOw0K CQkJaWYgKCRzbWRfZmVhdF9pZCAmJiAkcm93WydJRCddID09ICRzbWRfZmVhdF9pZCkgew0K CQkJCSRlZGl0bmFtZSA9ICRyb3dbJ1RpdGxlJ107DQoJCQkJJGZlYXRfbGFiZWwgPSAkZmVh dGxpc3RbJHNtZF9mZWF0X2lkXVsnbGFiZWwnXTsNCgkJCQkkZmVhdF90aXRsZSA9ICRmZWF0 bGlzdFskc21kX2ZlYXRfaWRdWyd0aXRsZSddOw0KCQkJCSRmZWF0X3Bvc2l0aW9uID0gJGZl YXRsaXN0WyRzbWRfZmVhdF9pZF1bJ3Bvc2l0aW9uJ107DQoJCQkJJGZlYXRfZGVzYyA9IGRv U3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsICRmZWF0bGlzdFskc21kX2ZlYXRfaWRd WydkZXNjcmlwdGlvbiddKSk7IC8vIEhhY2tpc2ggbmV3bGluZSBrbHVkZ2UNCgkJCX0NCgkJ CS8vIEFkZCB0aGUgcG9zaXRpb24gdG8gdGhlIG1vc3QgcmVjZW50IGFycmF5IGVudHJ5DQoJ CQlpZiAoaXNzZXQoJGZlYXRsaXN0WyRyb3dbJ0lEJ11dWydwb3NpdGlvbiddKSkgew0KCQkJ CSRvdXRbY291bnQoJG91dCktMV1bXSA9ICRmZWF0bGlzdFskcm93WydJRCddXVsncG9zaXRp b24nXTsNCgkJCX0NCgkJfQ0KDQoJCS8vVE9ETzogaTE4bg0KCQkkc29ydG9wdHMgPSBhcnJh eSgNCgkJCSdQb3N0ZWQnID0+ICdQb3N0ZWQnLA0KCQkJJ0V4cGlyZXMnID0+ICdFeHBpcnkn LA0KCQkJJ0xhc3RNb2QnID0+ICdNb2RpZmllZCcsDQoJCQknVGl0bGUnID0+ICdUaXRsZScs DQoJCQknU2VjdGlvbicgPT4gJ1NlY3Rpb24nLA0KCQkJJ0NhdGVnb3J5MScgPT4gJ0NhdGVn b3J5MScsDQoJCQknQ2F0ZWdvcnkyJyA9PiAnQ2F0ZWdvcnkyJywNCgkJKTsNCgkJJHNvcnRk aXJzID0gYXJyYXkoDQoJCQknYXNjJyA9PiAnQXNjZW5kaW5nJywNCgkJCSdkZXNjJyA9PiAn RGVzY2VuZGluZycsDQoJCSk7DQoJCSRkaXNwbGF5b3B0cyA9IGFycmF5KA0KCQkJJ2FsbCcg PT4gJ0FsbCcsDQoJCQkncGFnaW5hdGVkJyA9PiAnUGFnaW5hdGVkJywNCgkJKTsNCgkJJHRl eHRpbGVvbm9mZiA9IGV4cGxvZGUoJywnLCBnZXRfcHJlZignc21kX2ZlYXR1cmVkX3RleHRp bGUnLCAndGl0bGUsZGVzYycsIDEpKTsNCgkJJHNob3dvbm9mZiA9IGV4cGxvZGUoJywnLCBn ZXRfcHJlZignc21kX2ZlYXR1cmVkX3Nob3dfdWknLCAnbGFiZWwsdGl0bGUsZGVzYycsIDEp KTsNCgkJJHR4dF90dGwgPSBpbl9hcnJheSgndGl0bGUnLCAkdGV4dGlsZW9ub2ZmKTsNCgkJ JHR4dF9kZXNjID0gaW5fYXJyYXkoJ2Rlc2MnLCAkdGV4dGlsZW9ub2ZmKTsNCgkJJHNob3df bGJsID0gaW5fYXJyYXkoJ2xhYmVsJywgJHNob3dvbm9mZik7DQoJCSRzaG93X3R0bCA9IGlu X2FycmF5KCd0aXRsZScsICRzaG93b25vZmYpOw0KCQkkc2hvd19kZXNjID0gaW5fYXJyYXko J2Rlc2MnLCAkc2hvd29ub2ZmKTsNCgkJJHVzZV9lZGl0ID0gKCRzaG93X2xibCB8fCAkc2hv d190dGwgfHwgJHNob3dfZGVzYykgPyAnMScgOiAnMCc7DQoNCgkJJHNpemVzID0gZG9fbGlz dChnZXRfcHJlZignc21kX2ZlYXR1cmVkX2JveF9zaXplJywgJzE1MHg0MCcsIDEpLCAneCcp Ow0KCQkkc2l6ZXNbMF0gPSAoaXNzZXQoJHNpemVzWzBdKSAmJiBpc19udW1lcmljKCRzaXpl c1swXSkpID8gJHNpemVzWzBdIDogJzE1MCc7DQoJCSRzaXplc1sxXSA9IChpc3NldCgkc2l6 ZXNbMV0pICYmIGlzX251bWVyaWMoJHNpemVzWzFdKSkgPyAkc2l6ZXNbMV0gOiAnNDAnOw0K CQkkZGlzcGxheV9qcyA9ICgkZGlzcGxheT09J2FsbCcpID8gMSA6IDA7DQoJCSRzdHlsZXJl cHMgPSBhcnJheSgNCgkJCSd7Ynd9JyA9PiAkc2l6ZXNbMF0sDQoJCQkne2JofScgPT4gJHNp emVzWzFdLA0KCQkpOw0KDQoJCWVjaG8gJzxkaXYgaWQ9InNtZF9sb2FkaW5nIiBzdHlsZT0i Jy4kc21kX2ZlYXR1cmVkX3N0eWxlc1snbG9hZGluZyddLiciPjxkaXYgc3R5bGU9IicuJHNt ZF9mZWF0dXJlZF9zdHlsZXNbJ2xvYWRpbmdfZGl2J10uJyI+TG9hZGluZy4uLjwvZGl2Pjwv ZGl2Pic7DQoJCWVjaG8gJzxkaXYgaWQ9InNtZF9jb250YWluZXIiIHN0eWxlPSJkaXNwbGF5 Om5vbmU7Ij4nOw0KCQllY2hvICc8ZmllbGRzZXQgaWQ9InNtZF9mZWF0dXJlZF9jb250cm9s X3BhbmVsIiBjbGFzcz0idHhwLWNvbnRyb2wtcGFuZWwiPjxsZWdlbmQgY2xhc3M9InBsYWlu IGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX2ZlYXR1cmVkX2NwYW5lbF92aXNpYmxlJykg PyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48YSBocmVmPSIjc21kX2ZlYXR1cmVkX2NwYW5lbCI+ Jy5zbWRfZmVhdHVyZWRfZ1R4dCgnY29udHJvbF9wYW5lbCcpLic8L2E+PC9sZWdlbmQ+JzsN CgkJZWNobyAnPGRpdiBpZD0ic21kX2ZlYXR1cmVkX2NwYW5lbCIgY2xhc3M9InRvZ2dsZSIg c3R5bGU9ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfc21kX2ZlYXR1cmVkX2NwYW5lbF92 aXNpYmxlJykgPyAnYmxvY2snIDogJ25vbmUnKS4nIj4nOw0KDQoJCWVjaG8gJzxmb3JtIGlk PSJzbWRfZmVhdF9maWx0Zm9ybSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCIg b25zdWJtaXQ9InNtZF9mZWF0dXJlZF9lZGl0a2VlcCgwKTtyZXR1cm4gZmFsc2U7Ij4nOw0K CQllY2hvICc8ZmllbGRzZXQgaWQ9InNtZF9mZWF0dXJlZF9maWx0IiBjbGFzcz0ic21kX2Zl YXR1cmVkX3N1YnBhbmVsIj48bGVnZW5kPicuc21kX2ZlYXR1cmVkX2dUeHQoKCgkZGlzcGxh eT09J2FsbCcpID8gJ3NlYXJjaF9saXZlJyA6ICdzZWFyY2hfc3RhbmRhcmQnKSkuJzwvbGVn ZW5kPic7DQoJCWVjaG8gJzxsYWJlbCBmb3I9InNtZF9mZWF0X3NlYXJjaCI+Jy5zbWRfZmVh dHVyZWRfZ1R4dCgnYnlfbmFtZScpLic8L2xhYmVsPicuZklucHV0KCd0ZXh0JywgJ3NtZF9m ZWF0X3NlYXJjaCcsICRzbWRfZmVhdF9zZWFyY2hrZWVwLCAnJywgJycsICcnLCAnJywgJycs ICdzbWRfZmVhdF9zZWFyY2gnKS4NCgkJCSgoJGZ0eXBlcykgPyAnPGRpdiBpZD0ic21kX2Zl YXR1cmVkX2J5bGFiZWwiPicuc21kX2ZlYXR1cmVkX2dUeHQoJ2J5X2xhYmVsJykuc2VsZWN0 SW5wdXQoJ3NtZF9mZWF0X2ZpbHQnLCAkZnR5cGVzLCAkc21kX2ZlYXRfZmlsdGtlZXAsIDEs ICcnLCAnc21kX2ZlYXRfZmlsdCcpLic8L2Rpdj4nIDogJycpOw0KCQllY2hvICgkZGlzcGxh eT09J3BhZ2luYXRlZCcpID8gZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnZ28nKSwgJ3Nt YWxsZXJib3ggc21kX2ZlYXR1cmVkX3NhdmUnLCAnJywgJ3JldHVybiBzbWRfZmVhdHVyZWRf ZWRpdGtlZXAoMCk7JykgOiAnJzsNCgkJZWNobyBlSW5wdXQoJHNtZF9mZWF0dXJlZF9ldmVu dCkuc0lucHV0KCdzbWRfZmVhdHVyZWRfbGlzdCcpOw0KCQllY2hvICc8L2ZpZWxkc2V0Pic7 DQoJCWVjaG8gJzwvZm9ybT4nOw0KDQoJCWVjaG8gJzxmb3JtIGlkPSJzbWRfZmVhdF9wcmVm cyIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCI+JzsNCgkJZWNobyAnPGZpZWxk c2V0IGlkPSJzbWRfZmVhdHVyZWRfcHJlZnMiIGNsYXNzPSJzbWRfZmVhdHVyZWRfc3VicGFu ZWwiPjxsZWdlbmQ+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgncHJlZnMnKS4nPC9sZWdlbmQ+JzsN Cg0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfZmVhdHVyZWRfcHJlZiI+JzsNCgkJZWNobyAn PGxhYmVsIGZvcj0ic21kX2ZlYXRfZGlzcGxheSI+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgncHJl Zl9kaXNwbGF5JykuJzwvbGFiZWw+Jy4NCgkJCXNlbGVjdElucHV0KCdzbWRfZmVhdF9kaXNw bGF5JywgJGRpc3BsYXlvcHRzLCAkZGlzcGxheSwgJycsICcnLCAnc21kX2ZlYXRfZGlzcGxh eScpOw0KCQllY2hvICc8L2Rpdj4nOw0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9mZWF0 dXJlZF9wcmVmIj4nOw0KCQllY2hvICc8bGFiZWwgZm9yPSJzbWRfZmVhdF9zb3J0Ij4nLnNt ZF9mZWF0dXJlZF9nVHh0KCdwcmVmX3NvcnQnKS4nPC9sYWJlbD4nLg0KCQkJc2VsZWN0SW5w dXQoJ3NtZF9mZWF0X3NvcnQnLCAkc29ydG9wdHMsICRjdXJyT3JkZXJbMF0sICcnLCAnJywg J3NtZF9mZWF0X3NvcnQnKS4NCgkJCXNlbGVjdElucHV0KCdzbWRfZmVhdF9zb3J0ZGlyJywg JHNvcnRkaXJzLCAkY3Vyck9yZGVyWzFdLCAnJywgJycsICdzbWRfZmVhdF9zb3J0ZGlyJyk7 DQoJCWVjaG8gJzwvZGl2Pic7DQoNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2ZlYXR1cmVk X3ByZWYiPic7DQoJCWVjaG8gJzxkaXYgaWQ9InNtZF9mZWF0X2Rpc3BsYXlfYm94Ij4nOw0K CQllY2hvICc8bGFiZWwgZm9yPSJzbWRfZmVhdF9ib3hzaXplIj4nLnNtZF9mZWF0dXJlZF9n VHh0KCdwcmVmX2JveHNpemUnKS4nPC9sYWJlbD4nLg0KCQkJZklucHV0KCd0ZXh0JywgJ3Nt ZF9mZWF0X2JveF94JywgJHNpemVzWzBdLCAnJywgJycsICcnLCAnMycsICcnLCAnc21kX2Zl YXRfYm94c2l6ZScpLg0KCQkJc21kX2ZlYXR1cmVkX2dUeHQoJ3ByZWZfYm94c2l6ZWJ5Jyku ZklucHV0KCd0ZXh0JywgJ3NtZF9mZWF0X2JveF95JywgJHNpemVzWzFdLCAnJywgJycsICcn LCAnMycpOw0KCQllY2hvICc8L2Rpdj4nOw0KDQoJCWlmICgkcmlnaHRzKSB7DQoJCQllY2hv ICc8ZGl2IGNsYXNzPSJzbWRfZmVhdHVyZWRfcHJlZiBzbWRfZmVhdF9zaG93X3VpIj4nOw0K CQkJZWNobyAnPGxhYmVsIGZvcj0ic21kX2ZlYXRfc2hvd191aSI+Jy5zbWRfZmVhdHVyZWRf Z1R4dCgnc2hvd191aScpLic8L2xhYmVsPic7DQoJCQllY2hvIGNoZWNrYm94KCdzbWRfZmVh dF9zaG93X3VpW10nLCAnbGFiZWwnLCAkc2hvd19sYmwsICcnLCAnc21kX2ZlYXRfc2hvd19s YWJlbCcpLnNwLnNtZF9mZWF0dXJlZF9nVHh0KCdsYWJlbCcpOw0KCQkJZWNobyBjaGVja2Jv eCgnc21kX2ZlYXRfc2hvd191aVtdJywgJ3RpdGxlJywgJHNob3dfdHRsLCAnJywgJ3NtZF9m ZWF0X3Nob3dfdGl0bGUnKS5zcC5zbWRfZmVhdHVyZWRfZ1R4dCgndGl0bGUnKTsNCgkJCWVj aG8gY2hlY2tib3goJ3NtZF9mZWF0X3Nob3dfdWlbXScsICdkZXNjJywgJHNob3dfZGVzYywg JycsICdzbWRfZmVhdF9zaG93X2Rlc2MnKS5zcC5zbWRfZmVhdHVyZWRfZ1R4dCgnZGVzYycp Ow0KCQkJZWNobyAnPC9kaXY+JzsNCg0KCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2ZlYXR1 cmVkX3ByZWYgc21kX2ZlYXRfdGV4dGlsZSI+JzsNCgkJCWVjaG8gJzxsYWJlbCBmb3I9InNt ZF9mZWF0X3RleHRpbGUiPicuc21kX2ZlYXR1cmVkX2dUeHQoJ3RleHRpbGUnKS4nPC9sYWJl bD4nOw0KCQkJZWNobyBjaGVja2JveCgnc21kX2ZlYXRfdGV4dGlsZVtdJywgJ3RpdGxlJywg JHR4dF90dGwsICcnLCAnc21kX2ZlYXRfdGV4dGlsZV90aXRsZScpLnNwLnNtZF9mZWF0dXJl ZF9nVHh0KCd0aXRsZScpOw0KCQkJZWNobyBjaGVja2JveCgnc21kX2ZlYXRfdGV4dGlsZVtd JywgJ2Rlc2MnLCAkdHh0X2Rlc2MsICcnLCAnc21kX2ZlYXRfdGV4dGlsZV9kZXNjJykuc3Au c21kX2ZlYXR1cmVkX2dUeHQoJ2Rlc2MnKTsNCgkJCWVjaG8gJzwvZGl2Pic7DQoNCgkJCWVj aG8gJzxkaXYgY2xhc3M9InNtZF9mZWF0dXJlZF9wcmVmIHNtZF9mZWF0X3NlY3Rpb25fbGlz dCI+JzsNCgkJCWVjaG8gJzxsYWJlbCBmb3I9InNtZF9mZWF0X3NlY3Rpb25fbGlzdCI+Jy5z bWRfZmVhdHVyZWRfZ1R4dCgnc2VjdGlvbl9saXN0JykuJzwvbGFiZWw+JzsNCgkJCWVjaG8g ZklucHV0KCd0ZXh0JywgJ3NtZF9mZWF0X3NlY3Rpb25fbGlzdCcsICRzZWNsaXN0LCAnJywg JycsICcnLCAnMzAnLCAnJywgJ3NtZF9mZWF0X3NlY3Rpb25fbGlzdCcpOw0KCQkJZWNobyAn PC9kaXY+JzsNCgkJfQ0KDQoJCWVjaG8gJzwvZGl2Pic7DQoNCgkJZWNobyBlSW5wdXQoJHNt ZF9mZWF0dXJlZF9ldmVudCkuc0lucHV0KCdzbWRfZmVhdHVyZWRfcHJlZnNhdmUnKTsNCgkJ ZWNobyBmSW5wdXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdzYXZlJyksICdzbWFsbGVyYm94IHNt ZF9mZWF0dXJlZF9zYXZlJyk7DQoJCWVjaG8gJzwvZmllbGRzZXQ+JzsNCgkJZWNobyAnPC9m b3JtPic7DQoNCgkJZWNobyAnJm5ic3A7JzsgLy8gV2l0aG91dCB0aGlzICdjb250ZW50JyBq UXVlcnkgMS4zLjIgd29uJ3QgLnRvZ2dsZSgpIGFuIGVsZW1lbnQgd2l0aCBlbnRpcmVseSBm bG9hdGVkIGlubmVyIGVsZW1lbnRzIDotcw0KCQllY2hvICc8L2Rpdj4nOw0KCQllY2hvICc8 L2ZpZWxkc2V0Pic7DQoNCgkJZWNobyAnPGZvcm0gaWQ9InNtZF9mZWF0X2VkaXRmb3JtIiBh Y3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nOw0KCQllY2hvIGhJbnB1dCgnc21k X2ZlYXRfc2VhcmNoa2VlcCcsICcnKS4NCgkJCQloSW5wdXQoJ3NtZF9mZWF0X2ZpbHRrZWVw JywgJycpLg0KCQkJCWhJbnB1dCgnc21kX2ZlYXRfaWQnLCAnJykuDQoJCQkJZUlucHV0KCRz bWRfZmVhdHVyZWRfZXZlbnQpLg0KCQkJCXNJbnB1dCgnc21kX2ZlYXR1cmVkX2xpc3QnKTsN CgkJZWNobyAnPC9mb3JtPic7DQoNCgkJZWNobyAnPGZvcm0gaWQ9InNtZF9mZWF0X3NhdmVm b3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0icmV0dXJu IHNtZF9mZWF0dXJlZF9zYXZla2VlcCgpOyI+JzsNCgkJZWNobyBzdGFydFRhYmxlKCdjb250 cm9sJywnJywnJywnMycpOw0KCQlpZiAoJHNtZF9mZWF0X2lkKSB7DQoJCQllY2hvIHRyKA0K CQkJCXRkKCcmbmJzcDsnKS50ZGNzKGdUeHQoJ2VkaXQnKS5zcC5zdHJvbmcoZUxpbmsoJ2Fy dGljbGUnLCAnZWRpdCcsICdJRCcsICRzbWRfZmVhdF9pZCwgJGVkaXRuYW1lKSksIDIpLg0K CQkJCXRkKGZJbnB1dCgnc3VibWl0JywgJycsIGdUeHQoJ3NhdmUnKSwgJ3NtYWxsZXJib3gn KSkuDQoJCQkJaElucHV0KCdzbWRfZmVhdF9zZWFyY2hrZWVwJywgJycpLg0KCQkJCWhJbnB1 dCgnc21kX2ZlYXRfZmlsdGtlZXAnLCAnJykuDQoJCQkJaElucHV0KCdzbWRfZmVhdF9pZCcs ICRzbWRfZmVhdF9pZCkuDQoJCQkJZUlucHV0KCRzbWRfZmVhdHVyZWRfZXZlbnQpLg0KCQkJ CXNJbnB1dCgnc21kX2ZlYXR1cmVkX3NhdmUnKQ0KCQkJKTsNCgkJCWlmICgkc2hvd19sYmwp IHsNCgkJCQllY2hvIHRyKA0KCQkJCQlmTGFiZWxDZWxsKGdUeHQoJ2xhYmVsJyksICcnLCAn c21kX2ZlYXRfbGFiZWwnKS4NCgkJCQkJdGQoDQoJCQkJCQlmSW5wdXQoJ3RleHQnLCAnc21k X2ZlYXRfbGFiZWwnLCAkZmVhdF9sYWJlbCwgJycsICcnLCAnJywgJycsICcnLCAnc21kX2Zl YXRfbGFiZWwnKS4NCgkJCQkJCXNlbGVjdElucHV0KCdzbWRfZmVhdF9sYWJlbGNob29zZScs ICRldHlwZXMsICRmZWF0X2xhYmVsLCAwLCAnJywgJ3NtZF9mZWF0X2xhYmVsY2hvb3NlJykN CgkJCQkJKQ0KCQkJCSk7DQoJCQl9DQoJCQlpZiAoJHNob3dfdHRsKSB7DQoJCQkJZWNobyB0 cigNCgkJCQkJZkxhYmVsQ2VsbChnVHh0KCd0aXRsZScpLCAnJywgJ3NtZF9mZWF0X3RpdGxl JykuDQoJCQkJCXRkKA0KCQkJCQkJZklucHV0KCd0ZXh0JywgJ3NtZF9mZWF0X3RpdGxlJywg JGZlYXRfdGl0bGUsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF9mZWF0X3RpdGxlJykNCgkJ CQkJKQ0KCQkJCSk7DQoJCQl9DQoJCQlpZiAoJHNob3dfZGVzYykgew0KCQkJCWVjaG8gdHIo DQoJCQkJCWZMYWJlbENlbGwoZ1R4dCgnZGVzY3JpcHRpb24nKSwgJycsICdzbWRfZmVhdF9k ZXNjJykuDQoJCQkJCXRkKHRleHRfYXJlYSgnc21kX2ZlYXRfZGVzYycsIDgwLCA0MDAsICRm ZWF0X2Rlc2MsICdzbWRfZmVhdF9kZXNjJykpDQoJCQkJKTsNCgkJCX0NCgkJCWVjaG8gdHIo DQoJCQkJZkxhYmVsQ2VsbChzbWRfZmVhdHVyZWRfZ1R4dCgncG9zaXRpb24nKSwgJycsICdz bWRfZmVhdF9wb3NpdGlvbicpLg0KCQkJCXRkKGZJbnB1dCgndGV4dCcsICdzbWRfZmVhdF9w b3NpdGlvbicsICRmZWF0X3Bvc2l0aW9uLCAnJywgJycsICcnLCAnJywgJycsICdzbWRfZmVh dF9wb3NpdGlvbicpKQ0KCQkJKTsNCgkJfQ0KCQllY2hvIGVuZFRhYmxlKCk7DQoJCWVjaG8g JzwvZm9ybT4nOw0KDQoJCSRlZGJ0biA9IHNtYWxsKCdbJy5nVHh0KCdlZGl0JykuJ10nKTsN CgkJJGVkdGlwID0gc21kX2ZlYXR1cmVkX2dUeHQoJ2xibF9lZGZlYXQnKTsNCgkJJGVkYXJ0 YnRuID0gJyZyYXJyOyc7DQoJCSRlZGFydHRpcCA9IHNtZF9mZWF0dXJlZF9nVHh0KCdsYmxf ZWRhcnQnKTsNCgkJJGVkcG9zdGlwID0gc21kX2ZlYXR1cmVkX2dUeHQoJ2xibF9lZHBvcycp Ow0KCQkkdW5mZWF0dGlwID0gc21kX2ZlYXR1cmVkX2dUeHQoJ2xibF91bmZlYXR1cmUnKTsN Cg0KCQlpZiAoJG91dCkgew0KCQkJJHJvd3MgPSBjb3VudCgkcnMpOw0KCQkJJHRibG91dCA9 IGFycmF5KCk7DQoJCQkkYXR0cyA9ICcgY2xhc3M9InNtZF9mZWF0dXJlZF90YWJsZSBzbWRf Y2xlYXIiIGlkPSJzbWRfJy4kZGlzcGxheS4nIiBhbGlnbj0iY2VudGVyIic7DQoNCgkJCSR0 YmxvdXRbXSA9IGhlZChzbWRfZmVhdHVyZWRfZ1R4dCgnbWFuYWdlX2xibCcsIGFycmF5KCks ICdyYXcnKSwgMywgJyBjbGFzcz0ic21kX2NsZWFyIicpOw0KCQkJZm9yICgkaWR4ID0gMDsg JGlkeCA8ICRyb3dzOyAkaWR4KyspIHsNCgkJCQkkaXNmZWF0ID0gKGlzc2V0KCRvdXRbJGlk eF0pICYmIGFycmF5X2tleV9leGlzdHMoJG91dFskaWR4XVswXSwgJGZlYXRsaXN0KSk7DQoJ CQkJJGNlbGxjbGFzcyA9ICRpc2ZlYXQgPyAnIGNsYXNzPSJzbWRfZmVhdHVyZWQiJyA6ICcn Ow0KCQkJCSRlZGxpbmsgPSAkaXNmZWF0ICYmICR1c2VfZWRpdCA/ICc8YSBjbGFzcz0ic21k X2ZlYXRfZWRsaW5rIiBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX2ZlYXR1cmVkX2Vk aXRrZWVwKFwnJy4kb3V0WyRpZHhdWzBdLidcJyk7IiB0aXRsZT0iJy4kZWR0aXAuJyI+Jy4k ZWRidG4uJzwvYT4nLnNwIDogJyc7DQoJCQkJJGVkcG9zID0gJGlzZmVhdCA/ICc8aW5wdXQg bmFtZT0ic21kX2ZlYXR1cmVkX3Bvc2l0aW9uIiBjbGFzcz0ic21kX2ZlYXRfZWRwb3MiIHRp dGxlPSInLiRlZHBvc3RpcC4nIiB2YWx1ZT0iJy4kb3V0WyRpZHhdWzNdLiciIG9uYmx1cj0i cmV0dXJuIHNtZF9mZWF0dXJlZF9zdG9yZV9wb3ModGhpcywgXCcnLiRvdXRbJGlkeF1bMF0u J1wnKSIgLz4nIDogJyc7DQoJCQkJJGVkYXJ0ID0gJGlzZmVhdCA/ICc8YSBjbGFzcz0ic21k X2ZlYXRfZWRhcnQiIGhyZWY9Ij9ldmVudD1hcnRpY2xlJnN0ZXA9ZWRpdCZJRD0nLiRvdXRb JGlkeF1bMF0uJyIgdGl0bGU9IicuJGVkYXJ0dGlwLiciPicuJGVkYXJ0YnRuLic8L2E+JyA6 ICcnOw0KCQkJCSRyb3dkYXRhID0gKGlzc2V0KCRvdXRbJGlkeF0pKSA/ICc8c3BhbiBuYW1l PSJzbWRfZmVhdF9uYW1lIiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4kb3V0WyRpZHhdWzFdLic8 L3NwYW4+JyA6ICcnOw0KCQkJCSRyb3dkYXRhIC49ICRpc2ZlYXQgPyAnPHNwYW4gbmFtZT0i c21kX2ZlYXRfbGFiZWwiIGNsYXNzPSJleHRyYSBzbWRfaGlkZGVuIj4nLiRvdXRbJGlkeF1b Ml0uJzwvc3Bhbj4nIDogJyc7DQoJCQkJJHRibG91dFtdID0gKGlzc2V0KCRvdXRbJGlkeF0p KSA/ICc8ZGl2Jy4kY2VsbGNsYXNzLic+Jy4kZWRsaW5rLic8YSBocmVmPSIjIiB0aXRsZT0i Jy4oKCRpc2ZlYXQpID8gJHVuZmVhdHRpcCA6ICcnKS4nIiBvbmNsaWNrPSJyZXR1cm4gc21k X2ZlYXR1cmVkX3NlbGVjdCh0aGlzLCBcJycuJG91dFskaWR4XVswXS4nXCcpIj4nLiRvdXRb JGlkeF1bMV0uJzwvYT4nLiRlZHBvcy4kZWRhcnQuJHJvd2RhdGEuJzwvZGl2PicgOiAnPGRp dj48L2Rpdj4nOw0KCQkJfQ0KCQkJZWNobyB0YWcoam9pbigiIiwkdGJsb3V0KSwgJ2Rpdics ICRhdHRzKTsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jbGVhciI+PC9kaXY+JzsNCgkJ CWlmICgkZGlzcGxheT09J3BhZ2luYXRlZCcgJiYgJGRvX3BhZykgew0KCQkJCWVjaG8gbi4n PGRpdiBpZD0iJy4kc21kX2ZlYXR1cmVkX2V2ZW50LidfbmF2aWdhdGlvbiIgY2xhc3M9InR4 cC1uYXZpZ2F0aW9uIj4nLg0KCQkJCQluLm5hdl9mb3JtKCRzbWRfZmVhdHVyZWRfZXZlbnQs ICRwYWdlLCAkbnVtUGFnZXMsICcnLCAnJywgJycsICcnLCAkdG90YWwsICRsaW1pdCkuDQoJ CQkJCW4ucGFnZWJ5X2Zvcm0oJHNtZF9mZWF0dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJlZF9s aXN0X3BhZ2VieSk7DQoJCQkJCW4uJzwvZGl2Pic7DQoJCQl9DQoJCX0NCg0KCQkkcXMgPSBh cnJheSgNCgkJCSJldmVudCIgPT4gJHNtZF9mZWF0dXJlZF9ldmVudCwNCgkJKTsNCg0KCQkk cXNWYXJzID0gImluZGV4LnBocCIuam9pbl9xcygkcXMpOw0KCQkkdmVyaWZ5VHh0ID0gc21k X2ZlYXR1cmVkX2dUeHQoJ3VuZmVhdHVyZV9jb25maXJtJyk7DQoNCgkJZWNobyA8PDxFT0pT DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBzbWRfZmVhdHVy ZWRfc2VsZWN0KG9iaiwgaWQpIHsNCglvYmogPSBqUXVlcnkob2JqKS5wYXJlbnQoKTsNCg0K CS8vIE4uQi4gTmVnYXRpdmUgbG9naWMgdXNlZCBoZXJlIGJlY2F1c2Ugd2UncmUgY2hlY2tp bmcgdGhlIGNsYXNzIF9iZWZvcmVfIGl0J3MgYmVlbiB0b2dnbGVkDQoJdmFyIGFjdGlvbiA9 ICgob2JqKS5oYXNDbGFzcygic21kX2ZlYXR1cmVkIikpID8gJ3JlbW92ZScgOiAnYWRkJzsN CglpZiAoYWN0aW9uID09ICdyZW1vdmUnKSB7DQoJCWlmICgnMScgPT0geyR1c2VfZWRpdH0p IHsNCgkJCXZhciByZXQgPSBjb25maXJtKCd7JHZlcmlmeVR4dH0nKTsNCgkJCWlmIChyZXQg PT0gZmFsc2UpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoJalF1ZXJ5 LnBvc3QoJ3skcXNWYXJzfScsIHsgc3RlcDogInNtZF9mZWF0dXJlZF90YWdpdCIsIHNtZF9m ZWF0X2lkOiBpZCwgc21kX2ZlYXRfYWN0aW9uOiBhY3Rpb24gfSwNCgkJZnVuY3Rpb24oZGF0 YSkgew0KCQkJb2JqLnRvZ2dsZUNsYXNzKCdzbWRfZmVhdHVyZWQnKTsNCgkJCWlmIChhY3Rp b24gPT0gJ2FkZCcpIHsNCgkJCQlvYmouZmluZCgnYScpLmF0dHIoJ3RpdGxlJywgInskdW5m ZWF0dGlwfSIpOw0KCQkJCWlmICgnMScgPT0gJ3skdXNlX2VkaXR9Jykgew0KCQkJCQlvYmou cHJlcGVuZCgnPGEgY2xhc3M9InNtZF9mZWF0X2VkbGluayIgdGl0bGU9InskZWR0aXB9IiBo cmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX2ZlYXR1cmVkX2VkaXRrZWVwKFwnJytpZCsn XCcpIj57JGVkYnRufTwvYT4mbmJzcDsnKTsNCgkJCQl9DQoJCQkJb2JqLmFwcGVuZCgnPGlu cHV0IG5hbWU9InNtZF9mZWF0dXJlZF9wb3NpdGlvbiIgY2xhc3M9InNtZF9mZWF0X2VkcG9z IiB0aXRsZT0ieyRlZHBvc3RpcH0iIHZhbHVlPSIiIG9uYmx1cj0icmV0dXJuIHNtZF9mZWF0 dXJlZF9zdG9yZV9wb3ModGhpcywgXCcnK2lkKydcJykiIC8+Jyk7DQoJCQkJb2JqLmFwcGVu ZCgnPGEgY2xhc3M9InNtZF9mZWF0X2VkYXJ0IiB0aXRsZT0ieyRlZGFydHRpcH0iIGhyZWY9 Ij9ldmVudD1hcnRpY2xlJnN0ZXA9ZWRpdCZJRD0nK2lkKyciPnskZWRhcnRidG59PC9hPicp Ow0KCQkJCW9iai5hcHBlbmQoJzxzcGFuIG5hbWU9InNtZF9mZWF0X2xhYmVsIiBjbGFzcz0i ZXh0cmEgc21kX2hpZGRlbiI+PC9zcGFuPicpOw0KCQkJCW9iai5maW5kKCdpbnB1dC5zbWRf ZmVhdF9lZHBvcycpLmZvY3VzKCk7DQoJCQl9IGVsc2Ugew0KCQkJCW9iai5maW5kKCdhLnNt ZF9mZWF0X2VkbGluaycpLnJlbW92ZSgpOw0KCQkJCW9iai5maW5kKCdpbnB1dC5zbWRfZmVh dF9lZHBvcycpLnJlbW92ZSgpOw0KCQkJCW9iai5maW5kKCdhLnNtZF9mZWF0X2VkYXJ0Jyku cmVtb3ZlKCk7DQoJCQkJb2JqLmZpbmQoJ2EnKS5hdHRyKCd0aXRsZScsICcnKTsNCgkJCQlv YmouZmluZCgnc3Bhbi5leHRyYScpLnJlbW92ZSgpOw0KCQkJCWlmIChqUXVlcnkoIiNzbWRf ZmVhdF9zZWFyY2giKS52YWwoKSAhPSAnJykgalF1ZXJ5KCIjc21kX2ZlYXRfc2VhcmNoIiku a2V5dXAoKTsNCgkJCQlpZiAoalF1ZXJ5KCIjc21kX2ZlYXRfZmlsdCIpLnZhbCgpICE9ICcn KSBqUXVlcnkoIiNzbWRfZmVhdF9maWx0IikuY2hhbmdlKCk7DQoJCQl9DQoJCX0NCgkpOw0K CXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX2VkaXRrZWVwKGlk KSB7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfZWRpdGZvcm0gW25hbWU9J3NtZF9mZWF0X3NlYXJj aGtlZXAnXSIpLnZhbChqUXVlcnkoIiNzbWRfZmVhdF9zZWFyY2giKS52YWwoKSk7DQoJalF1 ZXJ5KCIjc21kX2ZlYXRfZWRpdGZvcm0gW25hbWU9J3NtZF9mZWF0X2ZpbHRrZWVwJ10iKS52 YWwoalF1ZXJ5KCIjc21kX2ZlYXR1cmVkX2J5bGFiZWwgI3NtZF9mZWF0X2ZpbHQgb3B0aW9u OnNlbGVjdGVkIikudmFsKCkpOw0KCWpRdWVyeSgiI3NtZF9mZWF0X2VkaXRmb3JtIFtuYW1l PSdzbWRfZmVhdF9pZCddIikudmFsKGlkKTsNCglqUXVlcnkoIiNzbWRfZmVhdF9lZGl0Zm9y bSIpLnN1Ym1pdCgpOw0KfQ0KDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfc2F2ZWtlZXAoKSB7 DQoJalF1ZXJ5KCIjc21kX2ZlYXRfc2F2ZWZvcm0gW25hbWU9J3NtZF9mZWF0X3NlYXJjaGtl ZXAnXSIpLnZhbChqUXVlcnkoIiNzbWRfZmVhdF9zZWFyY2giKS52YWwoKSk7DQoJalF1ZXJ5 KCIjc21kX2ZlYXRfc2F2ZWZvcm0gW25hbWU9J3NtZF9mZWF0X2ZpbHRrZWVwJ10iKS52YWwo alF1ZXJ5KCIjc21kX2ZlYXR1cmVkX2J5bGFiZWwgI3NtZF9mZWF0X2ZpbHQgb3B0aW9uOnNl bGVjdGVkIikudmFsKCkpOw0KfQ0KDQpmdW5jdGlvbiBzbWRfZmVhdF9maWx0ZXIoc2VsZWN0 b3IsIHF1ZXJ5LCBuYW0sIGNzZW5zZSwgZXhhY3QpIHsNCglpZiAoeyRkaXNwbGF5X2pzfSA9 PSAxKSB7DQoJCXZhciBxdWVyeSA9IGpRdWVyeS50cmltKHF1ZXJ5KTsNCgkJY3NlbnNlID0g KGNzZW5zZSkgPyAiIiA6ICJpIjsNCgkJcXVlcnkgPSBxdWVyeS5yZXBsYWNlKC8gL2dpLCAn fCcpOyAvLyBhZGQgT1IgZm9yIHJlZ2V4IHF1ZXJ5DQoJCWlmIChleGFjdCkgew0KCQkJdG1w ID0gcXVlcnkuc3BsaXQoJ3wnKTsNCgkJCWZvciAodmFyIGlkeCA9IDA7IGlkeCA8IHRtcC5s ZW5ndGg7IGlkeCsrKSB7DQoJCQkJdG1wW2lkeF0gPSAnXicrdG1wW2lkeF0rJyQnOw0KCQkJ fQ0KCQkJcXVlcnkgPSB0bXAuam9pbignfCcpOw0KCQl9DQoJCXZhciByZSA9IG5ldyBSZWdF eHAocXVlcnksIGNzZW5zZSk7DQoJCWpRdWVyeShzZWxlY3RvcikuZWFjaChmdW5jdGlvbigp IHsNCgkJCXNlbCA9ICh0eXBlb2YgbmFtPT0idW5kZWZpbmVkIiB8fCBuYW09PScnKSA/IGpR dWVyeSh0aGlzKSA6IGpRdWVyeSh0aGlzKS5maW5kKCJzcGFuW25hbWU9JyIrbmFtKyInXSIp Ow0KCQkJaWYgKHF1ZXJ5ID09ICcnKSB7DQoJCQkJaWYgKHNlbC5sZW5ndGggPT0gMSAmJiBz ZWwudGV4dCgpID09ICcnKSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5zaG93KCk7DQoJCQkJfSBl bHNlIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLmhpZGUoKTsNCgkJCQl9DQoJCQl9IGVsc2Ugew0K CQkJCWlmIChzZWwudGV4dCgpLnNlYXJjaChyZSkgPCAwKSB7DQoJCQkJCWpRdWVyeSh0aGlz KS5oaWRlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLnNob3coKTsNCgkJ CQl9DQoJCQl9DQoJCX0pOw0KCX0NCn0NCg0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3N0b3Jl X3BvcyhvYmosIGlkKSB7DQoJdmFyIG9iaiA9IGpRdWVyeShvYmopOw0KCXZhciBwb3MgPSBv YmoudmFsKCk7DQoNCgkvL1RPRE86IGZlZWRiYWNrIG9uIHN1Y2Nlc3MNCglzZW5kQXN5bmNF dmVudCgNCgl7DQoJCWV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwNCgkJc3RlcDogJ3NtZF9m ZWF0dXJlZF9zdG9yZV9wb3MnLA0KCQlzbWRfZmVhdF9pZDogaWQsDQoJCXNtZF9mZWF0X3Bv czogcG9zDQoJfSk7DQp9DQoNCmpRdWVyeShmdW5jdGlvbigpIHsNCglqUXVlcnkoIiNzbWRf ZmVhdF9zZWFyY2giKS5rZXl1cChmdW5jdGlvbihldmVudCkgew0KCQlqUXVlcnkoIiNzbWRf ZmVhdF9maWx0IikudmFsKCcwJyk7IC8vIENsZWFyIHRoZSBmaWx0ZXIgZHJvcGRvd24NCgkJ Ly8gaWYgZXNjIGlzIHByZXNzZWQgb3Igbm90aGluZyBpcyBlbnRlcmVkDQoJCWlmIChldmVu dC5rZXlDb2RlID09IDI3IHx8IGpRdWVyeSh0aGlzKS52YWwoKSA9PSAnJykgew0KCQkJalF1 ZXJ5KHRoaXMpLnZhbCgnJyk7DQoJCQlpZiAoeyRkaXNwbGF5X2pzfSA9PSAxKSB7DQoJCQkJ alF1ZXJ5KCIuc21kX2ZlYXR1cmVkX3RhYmxlIGRpdjpub3QoLnRibGhlYWQpIikuc2hvdygp Ow0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJc21kX2ZlYXRfZmlsdGVyKCcuc21kX2ZlYXR1cmVk X3RhYmxlIGRpdjpub3QoLnRibGhlYWQpJywgalF1ZXJ5KHRoaXMpLnZhbCgpLCAnc21kX2Zl YXRfbmFtZScsIDAsIDApOw0KCQl9DQoJfSk7DQoJaWYgKCd7JHNtZF9mZWF0X3NlYXJjaGtl ZXB9JyAhPSAnJykgew0KCQlqUXVlcnkoIiNzbWRfZmVhdF9zZWFyY2giKS5rZXl1cCgpOw0K CX0NCglqUXVlcnkoIiNzbWRfZmVhdF9maWx0IikuY2hhbmdlKGZ1bmN0aW9uKGV2ZW50KSB7 DQoJCWpRdWVyeSgiI3NtZF9mZWF0X3NlYXJjaCIpLnZhbCgnJyk7IC8vIEVtcHR5IHRoZSBz ZWFyY2ggYm94DQoJCWlmIChqUXVlcnkodGhpcykudmFsKCkgPT0gJycpIHsNCgkJCWlmICh7 JGRpc3BsYXlfanN9ID09IDEpIHsNCgkJCQlqUXVlcnkoJy5zbWRfZmVhdHVyZWRfdGFibGUg ZGl2Om5vdCgudGJsaGVhZCknKS5zaG93KCk7DQoJCQl9DQoJCX0gZWxzZSBpZiAoalF1ZXJ5 KHRoaXMpLnZhbCgpID09ICdzbWRfdW5sYWJlbGxlZCcpIHsNCgkJCXNtZF9mZWF0X2ZpbHRl cignLnNtZF9mZWF0dXJlZF90YWJsZSBkaXY6bm90KC50YmxoZWFkKScsICcnLCAnc21kX2Zl YXRfbGFiZWwnLCAwLCAwKTsNCgkJfSBlbHNlIHsNCgkJCXNtZF9mZWF0X2ZpbHRlcignLnNt ZF9mZWF0dXJlZF90YWJsZSBkaXY6bm90KC50YmxoZWFkKScsIGpRdWVyeSh0aGlzKS52YWwo KSwgJ3NtZF9mZWF0X2xhYmVsJywgMSwgMSk7DQoJCX0NCgl9KTsNCglpZiAoJ3skc21kX2Zl YXRfZmlsdGtlZXB9JyAhPSAnJykgew0KCQlqUXVlcnkoIiNzbWRfZmVhdF9maWx0IikuY2hh bmdlKCk7DQoJfQ0KCWlmICgneyRzbWRfZmVhdF9pZH0nICE9ICcnKSB7DQoJCWpRdWVyeSgi I3NtZF9mZWF0X2xhYmVsIikuZm9jdXMoKTsNCgkJalF1ZXJ5KCIjc21kX2ZlYXRfbGFiZWxj aG9vc2UiKS5jaGFuZ2UoZnVuY3Rpb24oZXZlbnQpIHsNCgkJCWpRdWVyeSgiI3NtZF9mZWF0 X2xhYmVsIikudmFsKGpRdWVyeSh0aGlzKS52YWwoKSk7DQoJCX0pOw0KCX0NCglqUXVlcnko IiNzbWRfbG9hZGluZyIpLmhpZGUoKTsNCglqUXVlcnkoIiNzbWRfY29udGFpbmVyIikuc2hv dygpOw0KfSk7DQoNCjwvc2NyaXB0Pg0KRU9KUzsNCg0KCQkvLyBJbmplY3Qgc3R5bGVzDQoJ CWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JzsNCgkJZWNobyBzdHJ0cigkc21kX2Zl YXR1cmVkX3N0eWxlc1snY29tbW9uJ10sICRzdHlsZXJlcHMpOw0KCQllY2hvICc8L3N0eWxl Pic7DQoJCWVjaG8gJzwvZGl2Pic7DQoJfSBlbHNlIHsNCgkJLy8gVGFibGUgbm90IGluc3Rh bGxlZA0KCQkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2 ZW50PScuJHNtZF9mZWF0dXJlZF9ldmVudC5hLidzdGVwPXNtZF9mZWF0dXJlZF90YWJsZV9p bnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3Vi bWl0Jywgc21kX2ZlYXR1cmVkX2dUeHQoJ3RibF9pbnN0YWxsX2xibCcpLCAnc21hbGxlcmJv eCcpLic8L2Zvcm0+JzsNCgkJJGJ0blN0eWxlID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0 OjI1cHgiJzsNCgkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJCWVjaG8gdHIodGRhKHN0 cm9uZyhzbWRfZmVhdHVyZWRfZ1R4dCgncHJlZnNfc29tZV90YmwnKSkuYnIuYnINCgkJCQku c21kX2ZlYXR1cmVkX2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJLnNt ZF9mZWF0dXJlZF9nVHh0KCdwcmVmc19zb21lX29wdHMnKSwgJyBjb2xzcGFuPSIyIicpDQoJ CSk7DQoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgkJZWNobyBl bmRUYWJsZSgpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVk X2NoYW5nZV9wYWdlYnkoKSB7DQoJZ2xvYmFsICRzbWRfZmVhdHVyZWRfZXZlbnQ7DQoNCgll dmVudF9jaGFuZ2VfcGFnZWJ5KCRzbWRfZmVhdHVyZWRfZXZlbnQpOw0KCXNtZF9mZWF0dXJl ZF9saXN0KCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVXBkYXRl IHRoZSBwYXNzZWQgcmVjb3JkIGluIHRoZSBmZWF0dXJlZCB0YWJsZQ0KZnVuY3Rpb24gc21k X2ZlYXR1cmVkX3NhdmUoKSB7DQoJZ2xvYmFsICRzbWRfZmVhdHVyZWRfZXZlbnQ7DQoNCgll eHRyYWN0KGdwc2EoYXJyYXkoJ3NtZF9mZWF0X2lkJywgJ3NtZF9mZWF0X2xhYmVsJywgJ3Nt ZF9mZWF0X3RpdGxlJywgJ3NtZF9mZWF0X2Rlc2MnLCAnc21kX2ZlYXRfcG9zaXRpb24nKSkp Ow0KCWFzc2VydF9pbnQoJHNtZF9mZWF0X2lkKTsNCg0KCSRzbWRfZmVhdF90aXRsZXRpbGUg PSAkc21kX2ZlYXRfdGl0bGU7DQoJJHNtZF9mZWF0X2Rlc2N0aWxlID0gJHNtZF9mZWF0X2Rl c2M7DQoJJHNtZF9mZWF0X2xhYmVsID0gZG9TbGFzaCgkc21kX2ZlYXRfbGFiZWwpOw0KCSRz bWRfZmVhdF9wb3NpdGlvbiA9IGRvU2xhc2goJHNtZF9mZWF0X3Bvc2l0aW9uKTsNCg0KCWlm IChzbWRfZmVhdHVyZWRfdGFibGVfZXhpc3QoKSkgew0KCQlAaW5jbHVkZV9vbmNlIHR4cGF0 aC4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsNCgkJQGluY2x1ZGVfb25jZSB0eHBhdGguJy9w dWJsaXNoLnBocCc7DQoNCgkJJHRleHRpbGVvbm9mZiA9IGV4cGxvZGUoJywnLCBnZXRfcHJl Zignc21kX2ZlYXR1cmVkX3RleHRpbGUnLCAnJykpOw0KCQkkdHh0X3R0bCA9IGluX2FycmF5 KCd0aXRsZScsICR0ZXh0aWxlb25vZmYpOw0KCQkkdHh0X2Rlc2MgPSBpbl9hcnJheSgnZGVz YycsICR0ZXh0aWxlb25vZmYpOw0KDQoJCWlmIChjbGFzc19leGlzdHMoJ1RleHRpbGUnKSkg ew0KCQkJJHRleHRpbGUgPSBuZXcgVGV4dGlsZSgpOw0KCQkJJHNtZF9mZWF0X3RpdGxldGls ZSA9IGRvU2xhc2goKCgkdHh0X3R0bCkgPyAkdGV4dGlsZS0+VGV4dGlsZVRoaXMocGFyc2Uo JHNtZF9mZWF0X3RpdGxlKSkgOiBwYXJzZSgkc21kX2ZlYXRfdGl0bGUpKSk7DQoJCQkkc21k X2ZlYXRfZGVzY3RpbGUgPSBkb1NsYXNoKCgoJHR4dF9kZXNjKSA/ICR0ZXh0aWxlLT5UZXh0 aWxlVGhpcyhwYXJzZSgkc21kX2ZlYXRfZGVzYykpIDogcGFyc2UoJHNtZF9mZWF0X2Rlc2Mp KSk7DQoJCX0NCg0KCQkkc21kX2ZlYXRfdGl0bGUgPSBkb1NsYXNoKCRzbWRfZmVhdF90aXRs ZSk7DQoJCSRzbWRfZmVhdF9kZXNjID0gZG9TbGFzaCgkc21kX2ZlYXRfZGVzYyk7DQoJCSRy ZXQgPSBzYWZlX3Vwc2VydChTTURfRkVBVCwgImxhYmVsPSckc21kX2ZlYXRfbGFiZWwnLCBm ZWF0X3Bvc2l0aW9uPSckc21kX2ZlYXRfcG9zaXRpb24nLCBmZWF0X3RpdGxlPSckc21kX2Zl YXRfdGl0bGUnLCBmZWF0X3RpdGxlX2h0bWw9JyRzbWRfZmVhdF90aXRsZXRpbGUnLCBkZXNj cmlwdGlvbj0nJHNtZF9mZWF0X2Rlc2MnLCBkZXNjX2h0bWw9JyRzbWRfZmVhdF9kZXNjdGls ZSciLCAiZmVhdF9pZD0nJHNtZF9mZWF0X2lkJyIpOw0KCQl1bnNldCgkX1BPU1RbJ3NtZF9m ZWF0X2lkJ10pOw0KCX0NCg0KCXNtZF9mZWF0dXJlZF9saXN0KHNtZF9mZWF0dXJlZF9nVHh0 KCdzYXZlZCcpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDcmVh dGUgYW4gZW1wdHkgZW50cnkgaW4gdGhlIGZlYXR1cmVkIHRhYmxlIG9yIGRlc3Ryb3kgaXQN CmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF90YWdpdCgpIHsNCglnbG9iYWwgJHNtZF9mZWF0dXJl ZF9ldmVudDsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc21kX2ZlYXRfaWQnLCAn c21kX2ZlYXRfYWN0aW9uJykpKSk7DQoNCglhc3NlcnRfaW50KCRzbWRfZmVhdF9pZCk7DQoN CglpZiAoJHNtZF9mZWF0X2FjdGlvbiA9PSAnYWRkJykgew0KCQkkcmV0ID0gc2FmZV91cHNl cnQoU01EX0ZFQVQsICJsYWJlbD0nJyIsICJmZWF0X2lkPSckc21kX2ZlYXRfaWQnIik7DQoJ fSBlbHNlIGlmICgkc21kX2ZlYXRfYWN0aW9uID09ICdyZW1vdmUnKSB7DQoJCSRyZXQgPSBz YWZlX2RlbGV0ZShTTURfRkVBVCwgImZlYXRfaWQ9JyRzbWRfZmVhdF9pZCciKTsNCgl9DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIFN0YXNoIHRoZSBwb3NpdGlvbiBhZ2FpbnN0IHRoZSBnaXZl biBmZWF0dXJlZCBpdGVtDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfc3RvcmVfcG9zKCkgew0K CSRpZCA9IGdwcygnc21kX2ZlYXRfaWQnKTsNCglhc3NlcnRfaW50KCRpZCk7DQoNCgkkaWQg PSBkb1NsYXNoKCRpZCk7DQoJJHBvcyA9IGRvU2xhc2goZ3BzKCdzbWRfZmVhdF9wb3MnKSk7 DQoNCgkkZXhpc3RzID0gc2FmZV9yb3coJyonLCBTTURfRkVBVCwgImZlYXRfaWQ9JGlkIik7 DQoJaWYgKCRleGlzdHMpIHsNCgkJc2FmZV91cGRhdGUoU01EX0ZFQVQsICJmZWF0X3Bvc2l0 aW9uPSckcG9zJyIsICJmZWF0X2lkPSRpZCIpOw0KCQlzZW5kX3htbF9yZXNwb25zZSgpOw0K CX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3ByZWZzYXZlKCkg ew0KCWdsb2JhbCAkc21kX2ZlYXR1cmVkX3ByZWZfcHJpdnMsICR0eHBfdXNlcjsNCg0KCS8v IFRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBwcmVmIGNhbiBiZSBzdG9yZWQ6IHNlZSBiZWxv dyBmb3IgZGV0YWlscw0KCSRzdGRwcmVmcyA9IGFycmF5KA0KCQlQUkVGX0dMT0JBTCA9PiBh cnJheSgNCgkJCSdzbWRfZmVhdHVyZWRfc2VjdGlvbl9saXN0JyA9PiAnc21kX2ZlYXRfc2Vj dGlvbl9saXN0JywNCgkJKSwNCgkJUFJFRl9QUklWQVRFID0+IGFycmF5KA0KCQkJJ3NtZF9m ZWF0dXJlZF9kaXNwbGF5JyA9PiAnc21kX2ZlYXRfZGlzcGxheScsDQoJCQknc21kX2ZlYXR1 cmVkX3NlY3Rpb25fbGlzdCcgPT4gJ3NtZF9mZWF0X3NlY3Rpb25fbGlzdCcsDQoJCSkNCgkp Ow0KCSRqb2lucHJlZnMgPSBhcnJheSgNCgkJUFJFRl9QUklWQVRFID0+IGFycmF5KA0KCQkJ Ly8gSW5kZXggaXMgdGhlIHByZWYgbmFtZTsgRmlyc3QgaXRlbSBpbiBhcnJheSBpcyB0aGUg am9pbiBzdHJpbmcNCgkJCSdzbWRfZmVhdHVyZWRfYm94X3NpemUnID0+IGFycmF5KCd4Jywg J3NtZF9mZWF0X2JveF94JywgJ3NtZF9mZWF0X2JveF95JyksDQoJCQknc21kX2ZlYXR1cmVk X3NvcnQnID0+IGFycmF5KCcgJywgJ3NtZF9mZWF0X3NvcnQnLCAnc21kX2ZlYXRfc29ydGRp cicpLA0KCQkpDQoJKTsNCgkkYXJyYXlwcmVmcyA9IGFycmF5KA0KCQlQUkVGX0dMT0JBTCA9 PiBhcnJheSgNCgkJCSdzbWRfZmVhdHVyZWRfdGV4dGlsZScgPT4gJ3NtZF9mZWF0X3RleHRp bGUnLA0KCQkJJ3NtZF9mZWF0dXJlZF9zaG93X3VpJyA9PiAnc21kX2ZlYXRfc2hvd191aScs DQoJCSkNCgkpOw0KDQoJJHByaXZzID0gc2FmZV9maWVsZCgncHJpdnMnLCAndHhwX3VzZXJz JywgIm5hbWUgPSAnIi5kb1NsYXNoKCR0eHBfdXNlcikuIiciKTsNCgkkcmlnaHRzID0gYXJy YXlfa2V5X2V4aXN0cygkcHJpdnMsICRzbWRfZmVhdHVyZWRfcHJlZl9wcml2cyk7DQoJJHBl cnByZWZzID0gKCRyaWdodHMpID8gJHNtZF9mZWF0dXJlZF9wcmVmX3ByaXZzWyRwcml2c10g OiBhcnJheSgpOw0KCSRwcmVmbGlzdCA9IGFycmF5X21lcmdlKCRzbWRfZmVhdHVyZWRfcHJl Zl9wcml2c1snYWxsJ10sICRwZXJwcmVmcyk7DQoNCgkvLyBTdGFuZGFyZCBwcmVmcyBhcmUg anVzdCBzaW5nbGUgd2lkZ2V0IHZhbHVlcyB0aGF0IGFyZSBzdG9yZWQgZGlyZWN0bHkNCglm b3JlYWNoICgkc3RkcHJlZnMgYXMgJHR5cGUgPT4gJHByZnMpIHsNCgkJZm9yZWFjaCAoJHBy ZnMgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQlpZiAoaW5fYXJyYXkoJGtleSwgJHByZWZsaXN0 KSkgew0KCQkJCXNldF9wcmVmKGRvU2xhc2goJGtleSksIGRvU2xhc2goZ3BzKCR2YWwpKSwg J3NtZF9mZWF0dXJlZCcsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsICR0eXBlKTsN CgkJCX0NCgkJfQ0KCX0NCg0KCS8vIEpvaW4gcHJlZnMgYXJlIGRpc2NyZXRlIHdpZGdldCB2 YWx1ZXMgKHdpdGggZGlmZmVyZW50IEhUTUwgbmFtZXMpIHRoYXQgbmVlZCBjb21iaW5pbmcg aW50byBhIHNpbmdsZSBwcmVmIHZhbHVlDQoJZm9yZWFjaCAoJGpvaW5wcmVmcyBhcyAkdHlw ZSA9PiAkcHJmcykgew0KCQlmb3JlYWNoICgkcHJmcyBhcyAka2V5ID0+ICR2YWwpIHsNCgkJ CWlmIChpbl9hcnJheSgka2V5LCAkcHJlZmxpc3QpKSB7DQoJCQkJJGpvaW5zdHIgPSAnJzsN CgkJCQkkY29tYmluZWQgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKCR2YWwgYXMgJGlkeCA9 PiAkaXRlbSkgew0KCQkJCQlpZiAoJGlkeD09MCkgew0KCQkJCQkJJGpvaW5zdHIgPSAkaXRl bTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjb21iaW5lZFtdID0gZG9TbGFzaChncHMoJGl0 ZW0pKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlzZXRfcHJlZihkb1NsYXNoKCRrZXkpLCBqb2lu KCRqb2luc3RyLCAkY29tYmluZWQpLCAnc21kX2ZlYXR1cmVkJywgUFJFRl9ISURERU4sICd0 ZXh0X2lucHV0JywgMCwgJHR5cGUpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gQXJyYXkgcHJl ZnMgYXJlIHdpZGdldCB2YWx1ZXMgZnJvbSBjb21iaW5lZCBjaGVja2JveGVzIHVuZGVyIHRo ZSBzYW1lIEhUTUwgbmFtZS4NCgkvLyBUaGV5IG1heSBub3QgYmUgcHJlc2VudGVkIGFzIGFy cmF5cyBpZiBvbmx5IG9uZSBpdGVtIGlzIGNoZWNrZWQNCglmb3JlYWNoICgkYXJyYXlwcmVm cyBhcyAkdHlwZSA9PiAkcHJmcykgew0KCQlmb3JlYWNoICgkcHJmcyBhcyAka2V5ID0+ICR2 YWwpIHsNCgkJCWlmIChpbl9hcnJheSgka2V5LCAkcHJlZmxpc3QpKSB7DQoJCQkJJGpvaW5z dHIgPSAnLCc7DQoJCQkJJHZhbCA9IGRvU2xhc2goZ3BzKCR2YWwpKTsNCgkJCQkkY29tYmlu ZWQgPSBqb2luKCRqb2luc3RyLCAoKGlzX2FycmF5KCR2YWwpKSA/ICR2YWwgOiBhcnJheSgk dmFsKSkpOw0KCQkJCXNldF9wcmVmKGRvU2xhc2goJGtleSksICRjb21iaW5lZCwgJ3NtZF9m ZWF0dXJlZCcsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsICR0eXBlKTsNCgkJCX0N CgkJfQ0KCX0NCglzbWRfZmVhdHVyZWRfbGlzdChnVHh0KCdwcmVmZXJlbmNlc19zYXZlZCcp KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3NhdmVfcGFuZV9z dGF0ZSgpIHsNCgkkcGFuZXMgPSBhcnJheSgnc21kX2ZlYXR1cmVkX2NwYW5lbCcpOw0KCSRw YW5lID0gZ3BzKCdwYW5lJyk7DQoJaWYgKGluX2FycmF5KCRwYW5lLCAkcGFuZXMpKQ0KCXsN CgkJc2V0X3ByZWYoInBhbmVfeyRwYW5lfV92aXNpYmxlIiwgKGdwcygndmlzaWJsZScpID09 ICd0cnVlJyA/ICcxJyA6ICcwJyksICdzbWRfZmVhdHVyZWQnLCBQUkVGX0hJRERFTiwgJ3ll c25vcmFkaW8nLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQlzZW5kX3htbF9yZXNwb25zZSgpOw0K CX0gZWxzZSB7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdodHRwLXN0YXR1cycgPT4g JzQwMCBCYWQgUmVxdWVzdCcpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLy8gQWRkIGZlYXR1cmVkIHRhYmxlIGlmIG5vdCBhbHJlYWR5IGluc3RhbGxlZA0K ZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3RhYmxlX2luc3RhbGwoJHNob3dwYW5lPScxJykgew0K CSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0KCSRyZXQgPSAnJzsNCgkkc3FsID0g YXJyYXkoKTsNCgkkc3FsW10gPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCIuUEZY LlNNRF9GRUFULiJgICgNCgkJYGZlYXRfaWRgIGludCg4KSBOT1QgTlVMTCBkZWZhdWx0ICcw JywNCgkJYGxhYmVsYCB2YXJjaGFyKDMyKSBOVUxMIGRlZmF1bHQgJycsDQoJCWBmZWF0X3Bv c2l0aW9uYCB2YXJjaGFyKDE2KSBOVUxMIGRlZmF1bHQgJycsDQoJCWBmZWF0X3RpdGxlYCB2 YXJjaGFyKDI1NSkgTlVMTCBkZWZhdWx0ICcnLA0KCQlgZmVhdF90aXRsZV9odG1sYCB2YXJj aGFyKDI1NSkgTlVMTCBkZWZhdWx0ICcnLA0KCQlgZGVzY3JpcHRpb25gIHRleHQgTlVMTCBk ZWZhdWx0ICcnLA0KCQlgZGVzY19odG1sYCB0ZXh0IE5VTEwgZGVmYXVsdCAnJywNCgkJUFJJ TUFSWSBLRVkgKGBmZWF0X2lkYCkNCgkpIEVOR0lORT1NeUlTQU0iOw0KDQoJaWYoZ3BzKCdk ZWJ1ZycpKSB7DQoJCWRtcCgkc3FsKTsNCgl9DQoJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7 DQoJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQlpZiAoJHJldD09PWZhbHNlKSB7DQoJ CQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCQllY2hvICI8Yj4iLiRHTE9CQUxT Wyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0K CQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJCX0NCgl9DQoNCgkvLyBIYW5kbGUg dXBncmFkZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucw0KCSRjb2xzID0gZ2V0VGhpbmdzKCdk ZXNjcmliZSBgJy5QRlguU01EX0ZFQVQuJ2AnKTsNCglpZiAoIWluX2FycmF5KCdmZWF0X2lk JywgJGNvbHMpKSB7DQoJCXNhZmVfYWx0ZXIoU01EX0ZFQVQsICJDSEFOR0UgYGlkYCBgZmVh dF9pZGAgaW50KCA4ICkgTk9UIE5VTEwgREVGQVVMVCAnMCciKTsNCgl9DQoJaWYgKCFpbl9h cnJheSgnZmVhdF90aXRsZScsICRjb2xzKSkgew0KCQlzYWZlX2FsdGVyKFNNRF9GRUFULCAi QUREIGBmZWF0X3RpdGxlYCB2YXJjaGFyKCAyNTUgKSBOVUxMIERFRkFVTFQgJycgQUZURVIg YGxhYmVsYCIpOw0KCX0NCglpZiAoIWluX2FycmF5KCdmZWF0X3RpdGxlX2h0bWwnLCAkY29s cykpIHsNCgkJc2FmZV9hbHRlcihTTURfRkVBVCwgIkFERCBgZmVhdF90aXRsZV9odG1sYCB2 YXJjaGFyKCAyNTUgKSBOVUxMIERFRkFVTFQgJycgQUZURVIgYGZlYXRfdGl0bGVgIik7DQoJ fQ0KCWlmICghaW5fYXJyYXkoJ2ZlYXRfcG9zaXRpb24nLCAkY29scykpIHsNCgkJc2FmZV9h bHRlcihTTURfRkVBVCwgIkFERCBgZmVhdF9wb3NpdGlvbmAgdmFyY2hhciAoIDE2ICkgTlVM TCBERUZBVUxUICcnIEFGVEVSIGBsYWJlbGAiKTsNCgl9DQoNCgkvLyBTcGl0IG91dCByZXN1 bHRzDQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkgew0KCQlpZiAoJHNo b3dwYW5lKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9mZWF0dXJlZF9nVHh0KCd0YmxfaW5zdGFs bGVkJyk7DQoJCQlzbWRfZmVhdHVyZWRfbGlzdCgkbWVzc2FnZSk7DQoJCX0NCgl9IGVsc2Ug ew0KCQlpZiAoJHNob3dwYW5lKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9mZWF0dXJlZF9nVHh0 KCd0Ymxfbm90X2luc3RhbGxlZCcpOw0KCQkJc21kX2ZlYXR1cmVkX2xpc3QoJG1lc3NhZ2Up Ow0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERyb3Ag dGFibGUgaWYgaW4gZGF0YWJhc2UNCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF90YWJsZV9yZW1v dmUoKSB7DQoJJHJldCA9ICcnOw0KCSRzcWwgPSBhcnJheSgpOw0KCSRHTE9CQUxTWyd0eHBf ZXJyX2NvdW50J10gPSAwOw0KCWlmIChzbWRfZmVhdHVyZWRfdGFibGVfZXhpc3QoKSkgew0K CQkkc3FsW10gPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgIiAuUEZYLlNNRF9GRUFULiAiOyAi Ow0KCQlpZihncHMoJ2RlYnVnJykpIHsNCgkJCWRtcCgkc3FsKTsNCgkJfQ0KCQlmb3JlYWNo ICgkc3FsIGFzICRxcnkpIHsNCgkJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQkJaWYg KCRyZXQ9PT1mYWxzZSkgew0KCQkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJ CQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxf ZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0K CQkJfQ0KCQl9DQoJfQ0KCWlmICgkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID09IDApIHsN CgkJJG1lc3NhZ2UgPSBzbWRfZmVhdHVyZWRfZ1R4dCgndGJsX3JlbW92ZWQnKTsNCgl9IGVs c2Ugew0KCQkkbWVzc2FnZSA9IHNtZF9mZWF0dXJlZF9nVHh0KCd0Ymxfbm90X3JlbW92ZWQn KTsNCgkJc21kX2ZlYXR1cmVkX2xpc3QoJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfdGFibGVfZXhpc3Qo JGFsbD0nJykgew0KCWlmICgkYWxsKSB7DQoJCSR0YmxzID0gYXJyYXkoU01EX0ZFQVQgPT4g Nyk7DQoJCSRvdXQgPSBjb3VudCgkdGJscyk7DQoJCWZvcmVhY2ggKCR0YmxzIGFzICR0Ymwg PT4gJGNvbHMpIHsNCgkJCWlmIChncHMoJ2RlYnVnJykpIHsNCgkJCQllY2hvICIrKyBUQUJM RSAiLiR0YmwuIiBIQVMgIi5jb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpLiIg Q09MVU1OUzsgUkVRVUlSRVMgIi4kY29scy4iICsrIi5icjsNCgkJCX0NCgkJCWlmIChjb3Vu dChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpID09ICRjb2xzKSB7DQoJCQkJJG91dC0t Ow0KCQkJfQ0KCQl9DQoJCXJldHVybiAoJG91dD09PTApID8gMSA6IDA7DQoJfSBlbHNlIHsN CgkJaWYgKGdwcygnZGVidWcnKSkgew0KCQkJZWNobyAiKysgVEFCTEUgIi5TTURfRkVBVC4i IEhBUyAiLmNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBTTURfRkVBVCkpLiIgQ09MVU1O UzsiOw0KCQl9DQoJCXJldHVybihAc2FmZV9zaG93KCdjb2x1bW5zJywgU01EX0ZFQVQpKTsN Cgl9DQp9DQoNCi8vICoqKioqKioqKioqKioqKioNCi8vIFBVQkxJQyBTSURFIFRBR1MNCi8v ICoqKioqKioqKioqKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX2ZlYXR1cmVkKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9mZWF0dXJl ZF9pbmZvLCAkc21kX3ByaW9yX2ZlYXR1cmVkLCAkcHJlZnM7DQoNCglleHRyYWN0KGxBdHRz KGFycmF5KA0KCQknbGFiZWwnICAgID0+ICcnLA0KCQkndW5sYWJlbCcgID0+ICdGZWF0dXJl ZCcsDQoJCSdsYWJlbHRhZycgPT4gJycsDQoJCSd0aW1lJyAgICAgPT4gJ3Bhc3QnLA0KCQkn c3RhdHVzJyAgID0+ICc0LDUnLA0KCQknc2VjdGlvbicgID0+ICcnLA0KCQknaGlzdG9yeScg ID0+ICcxJywNCgkJJ2xpbWl0JyAgICA9PiAnMTAnLA0KCQknc29ydCcgICAgID0+ICdmZWF0 X3Bvc2l0aW9uIGFzYywgUG9zdGVkIGRlc2MnLA0KCQknZm9ybScgICAgID0+ICcnLA0KCQkn d3JhcHRhZycgID0+ICcnLA0KCQknYnJlYWsnICAgID0+ICcnLA0KCQknY2xhc3MnICAgID0+ ICcnLA0KCQknaHRtbF9pZCcgID0+ICcnLA0KCQknZGVidWcnICAgID0+ICcnLA0KCSksJGF0 dHMpKTsNCg0KCWlmIChpc3NldCgkYXR0c1snbGFiZWwnXSkpIHsNCgkJaWYgKCRsYWJlbCkg ew0KCQkJJHdoZXJlID0gIkJJTkFSWSBsYWJlbCBSRUdFWFAgJyIuJGF0dHNbJ2xhYmVsJ10u IiciOw0KCQl9IGVsc2Ugew0KCQkJJHdoZXJlID0gImxhYmVsPScnIjsNCgkJfQ0KCQl1bnNl dCgkYXR0c1snbGFiZWwnXSk7DQoJfSBlbHNlIHsNCgkJLy8gSWYgbm8gbGFiZWwgYXR0cmli dXRlIGhhcyBiZWVuIGdpdmVuLCB0cmVhdCB0aGlzIGFzICdhbGwgZmVhdHVyZWQgaXRlbXMn DQoJCSRpZHMgPSBzYWZlX2NvbHVtbignZmVhdF9pZCcsIFNNRF9GRUFULCAnMT0xJyk7DQoJ CSRpZHMgPSBqb2luKCInLCciLCBkb1NsYXNoKCRpZHMpKTsNCgkJJHdoZXJlID0gInNtZGZl YXQuZmVhdF9pZCBJTiAoJyRpZHMnKSI7DQoJfQ0KDQoJLy8gRXhjbHVkZSBwcmV2aW91c2x5 IHNlZW4gYXJ0aWNsZXMNCglpZiAoJGhpc3RvcnkgJiYgIWVtcHR5KCRzbWRfcHJpb3JfZmVh dHVyZWQpKSB7DQoJCSR3aGVyZSAuPSAnIEFORCBzbWRmZWF0LmZlYXRfaWQgTk9UIElOKCcg LiBqb2luKCcsJywgJHNtZF9wcmlvcl9mZWF0dXJlZCkgLiAnKSc7DQoJfQ0KDQoJLy8gTk9U RTogdGltZSBpcyBsZWZ0IGluIHRoZSAkYXR0cyBhcnJheSBhbmQgcGFzc2VkIHRvIGFydGlj bGVfY3VzdG9tLiBPdGhlcndpc2UgdGhlIGRlZmF1bHQNCgkvLyB0aW1lIHZhbHVlIChwYXN0 KSB3aWxsIGJlIHVzZWQNCglpZiAoJHRpbWUpIHsNCgkJc3dpdGNoICgkdGltZSkgew0KCQkJ Y2FzZSAnYW55JzoNCgkJCQlicmVhazsNCgkJCWNhc2UgJ2Z1dHVyZSc6DQoJCQkJJHdoZXJl IC49ICIgQU5EIFBvc3RlZCA+IG5vdygpIjsNCgkJCQlicmVhazsNCgkJCWRlZmF1bHQ6DQoJ CQkJJHdoZXJlIC49ICIgQU5EIFBvc3RlZCA8PSBub3coKSI7DQoJCX0NCgkJaWYgKCEkcHJl ZnNbJ3B1Ymxpc2hfZXhwaXJlZF9hcnRpY2xlcyddKSB7DQoJCQkkd2hlcmUgLj0gIiBBTkQg KG5vdygpIDw9IEV4cGlyZXMgT1IgRXhwaXJlcyA9ICIuTlVMTERBVEVUSU1FLiIpIjsNCgkJ fQ0KCX0NCg0KCWlmICgkc3RhdHVzKSB7DQoJCSR3aGVyZSAuPSAnIEFORCBTdGF0dXMgSU4g KCcuam9pbignLCcsIGRvX2xpc3QoJHN0YXR1cykpLicpJzsNCgkJdW5zZXQoJGF0dHNbJ3N0 YXR1cyddKTsNCgl9DQoNCglpZiAoJHNlY3Rpb24pIHsNCgkJJHdoZXJlIC49ICIgQU5EIFNl Y3Rpb24gSU4gKCciLmpvaW4oIicsJyIsIGRvX2xpc3QoJHNlY3Rpb24pKS4iJykiOw0KCQl1 bnNldCgkYXR0c1snc2VjdGlvbiddKTsNCgl9DQoNCglpZiAoJHNvcnQpIHsNCgkJJHdoZXJl IC49JyBPUkRFUiBCWSAnLiRzb3J0Ow0KCQl1bnNldCgkYXR0c1snc29ydCddKTsNCgl9DQoN CgkvLyBMZWF2ZSBsaW1pdCBpbiB0aGUgJGF0dHMgYXJyYXkgdG9vIHNvIGl0IGRvZXNuJ3Qg ZGVmYXVsdCB0byBhcnRpY2xlX2N1c3RvbSdzIHZhbHVlIGlmIHNldCBoZXJlDQoJaWYgKCRs aW1pdCkgew0KCQkkd2hlcmUgLj0nIExJTUlUICcuJGxpbWl0Ow0KCX0NCg0KCS8vIERvbid0 IHBhc3MgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCBv bnRvIHRoZSBhcnRpY2xlX2N1c3RvbSB0YWcNCgl1bnNldCgNCgkJJGF0dHNbJ2xhYmVsJ10s DQoJCSRhdHRzWyd1bmxhYmVsJ10sDQoJCSRhdHRzWydsYWJlbHRhZyddLA0KCQkkYXR0c1sn d3JhcHRhZyddLA0KCQkkYXR0c1snYnJlYWsnXSwNCgkJJGF0dHNbJ2NsYXNzJ10sDQoJCSRh dHRzWydoaXN0b3J5J10sDQoJCSRhdHRzWydodG1sX2lkJ10sDQoJCSRhdHRzWydkZWJ1Zydd DQoJKTsNCg0KCWlmICgkZGVidWcpIHsNCgkJZWNobyAnKysgV0hFUkUgKysnOw0KCQlkbXAo JHdoZXJlKTsNCgl9DQoNCgkkcnMgPSBnZXRSb3dzKCdTRUxFQ1QgKiwgdW5peF90aW1lc3Rh bXAoUG9zdGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChFeHBpcmVzKSBhcyB1RXhw aXJlcywgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxhc3RNb2QgRlJPTSAnLlBGWC4n dGV4dHBhdHRlcm4gQVMgdHhwIExFRlQgSk9JTiAnLlBGWC5TTURfRkVBVC4nIEFTIHNtZGZl YXQgT04gdHhwLklEPXNtZGZlYXQuZmVhdF9pZCBXSEVSRSAnLiR3aGVyZSwgJGRlYnVnKTsN Cg0KCWlmICgkZGVidWcgPiAxICYmICRycykgew0KCQllY2hvICcrKyBSRUNPUkQgU0VUICsr JzsNCgkJZG1wKCRycyk7DQoJfQ0KDQoJJHRydWVQYXJ0ID0gRXZhbEVsc2UoJHRoaW5nLCAx KTsNCgkkZmFsc2VQYXJ0ID0gRXZhbEVsc2UoJHRoaW5nLCAwKTsNCg0KCSRvdXQgPSBhcnJh eSgpOw0KCWlmICgkcnMpIHsNCgkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCSRzbWRf ZmVhdHVyZWRfaW5mb1snbGFiZWwnXSA9ICRyb3dbJ2xhYmVsJ107DQoJCQkkc21kX2ZlYXR1 cmVkX2luZm9bJ3Bvc2l0aW9uJ10gPSAkcm93WydmZWF0X3Bvc2l0aW9uJ107DQoJCQkkc21k X2ZlYXR1cmVkX2luZm9bJ3RpdGxlJ10gPSAkcm93WydmZWF0X3RpdGxlX2h0bWwnXTsNCgkJ CSRzbWRfZmVhdHVyZWRfaW5mb1snZGVzY3JpcHRpb24nXSA9ICRyb3dbJ2Rlc2NfaHRtbCdd Ow0KCQkJJGF0dHNbJ2lkJ10gPSAkcm93WydJRCddOw0KDQoJCQkkYXJ0b3V0ID0gYXJ0aWNs ZV9jdXN0b20oJGF0dHMsICR0cnVlUGFydCk7DQoNCgkJCWlmICgkYXJ0b3V0KSB7DQoJCQkJ JHNtZF9wcmlvcl9mZWF0dXJlZFtdID0gJHJvd1snSUQnXTsNCgkJCQkkb3V0W10gPSAkYXJ0 b3V0Ow0KCQkJfQ0KCQl9DQoJfSBlbHNlIHsNCgkJcmV0dXJuIHBhcnNlKCRmYWxzZVBhcnQp Ow0KCX0NCglpZiAoJG91dCkgew0KCQlyZXR1cm4gKCgkbGFiZWx0YWcpID8gZG9MYWJlbCgg KCAoJGxhYmVsID09ICcnKSA/ICR1bmxhYmVsIDogJGxhYmVsKSwgJGxhYmVsdGFnICkgOiAn JykNCgkJCS5kb1dyYXAoJG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAnJywgJycs ICcnLCAkaHRtbF9pZCk7DQoJfQ0KCXJldHVybiAnJzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdW5mZWF0dXJlZCgkYXR0cywgJHRoaW5nKSB7 DQoJZ2xvYmFsICRzbWRfcHJpb3JfZmVhdHVyZWQsICR0aGlzcGFnZSwgJHByZXRleHQ7DQoN CgkkdGltZSA9IChpc3NldCgkYXR0c1sndGltZSddKSkgPyAkYXR0c1sndGltZSddIDogJyc7 DQoJJHN0YXR1cyA9IChpc3NldCgkYXR0c1snc3RhdHVzJ10pKSA/ICRhdHRzWydzdGF0dXMn XSA6IDQ7DQoJJHNlY3Rpb24gPSAoaXNzZXQoJGF0dHNbJ3NlY3Rpb24nXSkpID8gJGF0dHNb J3NlY3Rpb24nXSA6ICcnOw0KCSRoaXN0b3J5ID0gKGlzc2V0KCRhdHRzWydoaXN0b3J5J10p KSA/ICRhdHRzWydoaXN0b3J5J10gOiAnMSc7DQoJdW5zZXQoJGF0dHNbJ2hpc3RvcnknXSk7 DQoNCgkkd2hlcmUgPSAiMT0xIjsNCg0KCWlmICgkdGltZSkgew0KCQlzd2l0Y2ggKCR0aW1l KSB7DQoJCQljYXNlICdhbnknOg0KCQkJCWJyZWFrOw0KCQkJY2FzZSAnZnV0dXJlJzoNCgkJ CQkkd2hlcmUgLj0gIiBBTkQgUG9zdGVkID4gbm93KCkiOw0KCQkJCWJyZWFrOw0KCQkJZGVm YXVsdDoNCgkJCQkkd2hlcmUgLj0gIiBBTkQgUG9zdGVkIDw9IG5vdygpIjsNCgkJfQ0KCQlp ZiAoISRwcmVmc1sncHVibGlzaF9leHBpcmVkX2FydGljbGVzJ10pIHsNCgkJCSR3aGVyZSAu PSAiIEFORCAobm93KCkgPD0gRXhwaXJlcyBPUiBFeHBpcmVzID0gIi5OVUxMREFURVRJTUUu IikiOw0KCQl9DQoJfQ0KDQoJaWYgKCRzdGF0dXMpIHsNCgkJJHdoZXJlIC49ICcgQU5EIFN0 YXR1cyBJTiAoJy5qb2luKCcsJywgZG9fbGlzdCgkc3RhdHVzKSkuJyknOw0KCX0NCg0KCWlm ICgkc2VjdGlvbikgew0KCQkkd2hlcmUgLj0gIiBBTkQgU2VjdGlvbiBJTiAoJyIuam9pbigi JywnIiwgZG9fbGlzdCgkc2VjdGlvbikpLiInKSI7DQoJfQ0KDQoJLy8gRXhjbHVkZSBwcmV2 aW91c2x5IHNlZW4gYXJ0aWNsZXMNCglpZiAoJGhpc3RvcnkgJiYgIWVtcHR5KCRzbWRfcHJp b3JfZmVhdHVyZWQpKSB7DQoJCSR3aGVyZSAuPSAnIEFORCBpZCBOT1QgSU4oJyAuIGpvaW4o JywnLCAkc21kX3ByaW9yX2ZlYXR1cmVkKSAuICcpJzsNCgl9DQoNCgkkb2Zmc2V0ID0gKGlz c2V0KCRhdHRzWydvZmZzZXQnXSkpID8gJGF0dHNbJ29mZnNldCddIDogMDsNCg0KCWlmIChp c3NldCgkYXR0c1snbGltaXQnXSkgJiYgaXNzZXQoJGF0dHNbJ3BhZ2VieSddKSkgew0KCQkk bGltaXQgPSAkYXR0c1snbGltaXQnXTsNCgkJJHBhZ2VieSA9ICRhdHRzWydwYWdlYnknXTsN CgkJJHBhZ2VieSA9ICgkcGFnZWJ5ID09ICdsaW1pdCcpID8gJGxpbWl0IDogJHBhZ2VieTsN CgkJJHBnID0gZ3BzKCdwZycpOw0KDQoJCSRncmFuZF90b3RhbCA9IHNhZmVfY291bnQoJ3Rl eHRwYXR0ZXJuJywkd2hlcmUpOw0KCQkkdG90YWwgPSAkZ3JhbmRfdG90YWwgLSAkb2Zmc2V0 Ow0KCQkkbnVtUGFnZXMgPSBjZWlsKCR0b3RhbC8kcGFnZWJ5KTsNCgkJJHBnID0gKCEkcGcp ID8gMSA6ICRwZzsNCgkJJHBnb2Zmc2V0ID0gJG9mZnNldCArICgoJHBnIC0gMSkgKiAkcGFn ZWJ5KTsNCgkJLy8gc2VuZCBwYWdpbmcgaW5mbyB0byB0eHA6bmV3ZXIgYW5kIHR4cDpvbGRl cg0KCQkkcGFnZW91dFsncGcnXSAgICAgICAgICA9ICRwZzsNCgkJJHBhZ2VvdXRbJ251bVBh Z2VzJ10gICAgPSAkbnVtUGFnZXM7DQoJCSRwYWdlb3V0WydzJ10gICAgICAgICAgID0gJHBy ZXRleHRbJ3MnXTsNCgkJJHBhZ2VvdXRbJ2MnXSAgICAgICAgICAgPSAkcHJldGV4dFsnYydd Ow0KCQkkcGFnZW91dFsnY29udGV4dCddICAgICA9ICdhcnRpY2xlJzsNCgkJJHBhZ2VvdXRb J2dyYW5kX3RvdGFsJ10gPSAkZ3JhbmRfdG90YWw7DQoJCSRwYWdlb3V0Wyd0b3RhbCddICAg ICAgID0gJHRvdGFsOw0KDQoJCWlmIChlbXB0eSgkdGhpc3BhZ2UpKSB7DQoJCQkkdGhpc3Bh Z2UgPSAkcGFnZW91dDsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRwZ29mZnNldCA9ICRvZmZzZXQ7 DQoJfQ0KDQoJJHRydWVQYXJ0ID0gRXZhbEVsc2UoJHRoaW5nLCAxKTsNCgkkZmFsc2VQYXJ0 ID0gRXZhbEVsc2UoJHRoaW5nLCAwKTsNCg0KCSRycyA9IHNhZmVfY29sdW1uKCdJRCcsICd0 ZXh0cGF0dGVybicsICR3aGVyZSk7DQoJaWYgKCRycykgew0KCQkkYXR0c1snb2Zmc2V0J10g PSAkcGdvZmZzZXQ7DQoJCSRhdHRzWydpZCddID0gam9pbignLCcsICRycyk7DQoJCSRvdXQg PSBhcnRpY2xlX2N1c3RvbSgkYXR0cywgJHRydWVQYXJ0KTsNCgkJcmV0dXJuICRvdXQ7DQoJ fSBlbHNlIHsNCgkJcmV0dXJuIHBhcnNlKCRmYWxzZVBhcnQpOw0KCX0NCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfaW5mbygkYXR0 cykgew0KCWdsb2JhbCAkc21kX2ZlYXR1cmVkX2luZm87DQoNCglleHRyYWN0KGxBdHRzKGFy cmF5KA0KCQknaXRlbScgPT4gJycsDQoJKSwkYXR0cykpOw0KDQoJcmV0dXJuIChpc3NldCgk c21kX2ZlYXR1cmVkX2luZm9bJGl0ZW1dKSA/ICRzbWRfZmVhdHVyZWRfaW5mb1skaXRlbV0g OiAnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2lmX2ZlYXR1cmVkKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9mZWF0dXJlZF9p bmZvLCAkdGhpc2FydGljbGU7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknaWQnID0+ ICcnLA0KCQknbGFiZWwnID0+ICcnLA0KCSksJGF0dHMpKTsNCg0KCWlmICgkaWQpIHsNCgkJ JGlkID0gam9pbigiJywnIiwgZG9fbGlzdChkb1NsYXNoKCRpZCkpKTsNCgl9DQoNCglpZiAo ISRpZCAmJiAkdGhpc2FydGljbGUpIHsNCgkJJGlkID0gJHRoaXNhcnRpY2xlWyd0aGlzaWQn XTsNCgl9DQoNCgkkd2hlcmVbXSA9ICJmZWF0X2lkIElOICgnIi4kaWQuIicpIjsNCg0KCWlm IChpc3NldCgkYXR0c1snbGFiZWwnXSkpIHsNCgkJJGxhYmVsID0gZXhwbG9kZSgnLCcsIGRv U2xhc2goJGxhYmVsKSk7DQoJCSRsYmx3aGVyZSA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRs YWJlbCBhcyAkbGJsKSB7DQoJCQkkbGJsd2hlcmVbXSA9ICInIi50cmltKCRsYmwpLiInIjsN CgkJfQ0KCQlpZiAoJGxibHdoZXJlKSB7DQoJCQkkd2hlcmVbXSA9ICcoIEJJTkFSWSBsYWJl bCBJTiAoJyAuIGpvaW4oJywnLCAkbGJsd2hlcmUpIC4gJykgKSc7DQoJCX0NCgl9DQoNCgkk cmV0ID0gc2FmZV9yb3coJ2ZlYXRfaWQnLCBTTURfRkVBVCwgam9pbignIEFORCcsICR3aGVy ZSkpOw0KDQoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJHJldCkpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBsYWNl bWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVxdWlyZWQNCi8vIFRPRE86IG1ha2UgdGhl c2UgaW50byBhIHRleHRwYWNrIHdoZW4gcGx1Z2luIGNvbXBvc2VyIHN1cHBvcnRzIHRoZW0N CmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsN CgkkbGFuZyA9IGFycmF5KA0KCQknYnlfbGFiZWwnID0+ICdCeSBsYWJlbDogJywNCgkJJ2J5 X25hbWUnID0+ICdCeSBuYW1lOiAnLA0KCQknY29udHJvbF9wYW5lbCcgPT4gJ0NvbnRyb2wg cGFuZWwnLA0KCQknZGVzYycgPT4gJ0Rlc2NyaXB0aW9uJywNCgkJJ2xhYmVsJyA9PiAnTGFi ZWwnLA0KCQknbGJsX2VkYXJ0JyA9PiAnRWRpdCBmdWxsIGFydGljbGUgaW4gdGhlIFdyaXRl IHBhbmVsJywNCgkJJ2xibF9lZHBvcycgPT4gJ1NldCB0aGUgYXJ0aWNsZSBzb3J0IHBvc2l0 aW9uJywNCgkJJ2xibF9lZGZlYXQnID0+ICdMYWJlbCBhbmQgZWRpdCBmZWF0dXJlZCBjb250 ZW50JywNCgkJJ2xibF91bmZlYXR1cmUnID0+ICdVbmZlYXR1cmUgdGhpcyBhcnRpY2xlJywN CgkJJ21hbmFnZV9sYmwnID0+ICdDbGljayB0byBzZWxlY3QgZmVhdHVyZWQgYXJ0aWNsZXMs IHdoaWNoIHdpbGwgdGhlbiBiZSBkaXNwbGF5ZWQgPHNwYW4gY2xhc3M9InNtZF9mZWF0dXJl ZCI+PGEgaHJlZj0iIyIgc3R5bGU9Im1hcmdpbjowIDhweDsiPkhpZ2hsaWdodGVkPC9hPjwv c3Bhbj4uJywNCgkJJ3Bvc2l0aW9uJyA9PiAnUG9zaXRpb24nLA0KCQkncHJlZnMnID0+ICdQ cmVmZXJlbmNlcycsDQoJCSdwcmVmX2JveHNpemUnID0+ICdCb3ggc2l6ZTogJywNCgkJJ3By ZWZfYm94c2l6ZWJ5JyA9PiAnIHggJywNCgkJJ3ByZWZfZGlzcGxheScgPT4gJ0Rpc3BsYXk6 ICcsDQoJCSdwcmVmX3NvcnQnID0+ICdTb3J0IGJ5OiAnLA0KCQkncHJlZnNfc29tZV9leHBs YWluJyA9PiAnVGhpcyBpcyBlaXRoZXIgYSBuZXcgaW5zdGFsbGF0aW9uIG9yIGEgZGlmZmVy ZW50IHZlcnNpb24nLmJyLidvZiB0aGUgcGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZS4n LA0KCQkncHJlZnNfc29tZV9vcHRzJyA9PiAnQ2xpY2sgIkluc3RhbGwgdGFibGUiIHRvIGFk ZCBvciB1cGRhdGUgdGhlIHRhYmxlJy5ici4nbGVhdmluZyBhbGwgZXhpc3RpbmcgZGF0YSB1 bnRvdWNoZWQuJywNCgkJJ3ByZWZzX3NvbWVfdGJsJyA9PiAnTm90IGFsbCB0YWJsZSBpbmZv IGF2YWlsYWJsZS4nLA0KCQknc2F2ZWQnID0+ICdBcnRpY2xlIGluZm8gdXBkYXRlZCcsDQoJ CSdzZWFyY2hfbGl2ZScgPT4gJ0FydGljbGUgbGl2ZSBzZWFyY2gnLA0KCQknc2VhcmNoX3N0 YW5kYXJkJyA9PiAnQXJ0aWNsZSBzZWFyY2gnLA0KCQkndGFiX25hbWUnID0+ICdGZWF0dXJl ZCBhcnRpY2xlcycsDQoJCSd0YmxfaW5zdGFsbF9sYmwnID0+ICdJbnN0YWxsIHRhYmxlJywN CgkJJ3RibF9pbnN0YWxsZWQnID0+ICdUYWJsZSBpbnN0YWxsZWQnLA0KCQkndGJsX25vdF9p bnN0YWxsZWQnID0+ICdUYWJsZSBub3QgaW5zdGFsbGVkJywNCgkJJ3RibF9yZW1vdmVkJyA9 PiAnVGFibGUgcmVtb3ZlZCcsDQoJCSd0Ymxfbm90X3JlbW92ZWQnID0+ICdUYWJsZSBub3Qg cmVtb3ZlZCcsDQoJCSdzZWN0aW9uX2xpc3QnID0+ICdBcnRpY2xlcyBmcm9tIHNlY3Rpb25z OiAnLA0KCQknc2hvd191aScgPT4gJ1Blcm1pdCBlbnRyeSBvZjogJywNCgkJJ3RleHRpbGUn ID0+ICdBcHBseSB0ZXh0aWxlIHRvOiAnLA0KCQkndGl0bGUnID0+ICdUaXRsZScsDQoJCSd1 bmZlYXR1cmVfY29uZmlybScgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUg dGhpcyBhcnRpY2xlIGZyb20gdGhlIGZlYXR1cmVkIGxpc3Q/JywNCgkJJ3VubGFiZWxsZWQn ID0+ICdbdW5sYWJlbGxlZF0nLA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwg JGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6MToiNSI7czo1 OiJmbGFncyI7czoxOiIyIjtzOjQ6ImhlbHAiO3M6MjQ4NDE6IjxkaXYgaWQ9InNtZF9oZWxw Ij4KCgk8aDE+c21kX2ZlYXR1cmVkPC9oMT4KCgk8cD5QdWxsIG9uZSBvciBtb3JlIGFydGlj bGVzIG91dCBvZiB0aGUgcmVndWxhciBhcnRpY2xlIGZsb3cgYW5kIHBpbXAgdGhlbSAmIzgy MTI7IHBlcmhhcHMgb24gYSBzZWN0aW9uIGxhbmRpbmcgcGFnZSBvciB5b3VyIGhvbWUgcGFn ZS48L3A+CgoJPGgyPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPk9uZS1jbGljayBzZWxl Y3Rpb24gb2YgYXJ0aWNsZXMgdG8gZmVhdHVyZTwvbGk+CgkJPGxpPkxhYmVsIHlvdXIgZmVh dHVyZWQgYXJ0aWNsZXMsIGFsbG93aW5nIHlvdSB0byBncm91cCB0aGVtIGludG8gYXJlYXMg bGlrZSBGZWF0dXJlZCwgVGVhc2VycywgZXRjPC9saT4KCQk8bGk+QWRkIGFuIG9wdGlvbmFs IHRpdGxlL2Rlc2NyaXB0aW9uIHRvIGVhY2ggYXJ0aWNsZSBzbyB5b3UgY2FuIHVzZSB0aGF0 IGFzIGNvcHksIGluc3RlYWQgb2Ygc29tZXRoaW5nIGZyb20gdGhlIGFydGljbGUgaXRzZWxm IChzdXBwb3J0cyBUZXh0aWxlIGFuZCBzb21lIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IHRhZ3MpPC9saT4KCQk8bGk+U2VhcmNoIHlvdXIgZmVhdHVyZWQgYXJ0aWNsZXMgYnkg bmFtZSBvciBsYWJlbDsgZmlsdGVyaW5nIGluIHJlYWwtdGltZSBpZiB5b3Ugd2lzaDwvbGk+ CgkJPGxpPkFkbWluaXN0cmF0b3JzIGNhbiBsaW1pdCB0aGUgYXJ0aWNsZXMgYXZhaWxhYmxl IGZvciBwaW1wYWdlIGZyb20gY2VydGFpbiBzZWN0aW9uczwvbGk+CgkJPGxpPkRpc3BsYXkg aW5mb3JtYXRpb24gZnJvbSB0aGUgZmVhdHVyZWQgYXJ0aWNsZXMgdXNpbmcgcmVndWxhciA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhcnRpY2xlIHRhZ3M8L2xpPgoJCTxsaT5L ZWVwcyB0cmFjayBvZiB3aGljaCBhcnRpY2xlcyBoYXZlIGJlZW4gc2VlbiBhbHJlYWR5IG9u IHRoZSBwYWdlIHNvIGxhdGVyIGZlYXR1cmVkIChvciB1bmZlYXR1cmVkKSBhcnRpY2xlcyBh cmVuJiM4MjE3O3QgZHVwbGljYXRlZDwvbGk+Cgk8L3VsPgoKCTxoMj5BdXRob3IgLyBDcmVk aXRzPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+ U3RlZiBEYXdzb248L2E+PC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlv bjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgVGV4dHBhdHRlcm4gNC4z LjArICg0LjQuMCBvciBoaWdoZXIgcmVjb21tZW5kZWQpPC9wPgoKCTxwPkRvd25sb2FkIHRo ZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9w bHVnaW5zLzExNzQvc21kX2ZlYXR1cmVkIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUg PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwg cGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g QWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdp bi4gVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmll d3RvcGljLnBocD9pZD0zMzkzOCI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9y IHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48 L3A+CgoJPHA+V2hlbiB5b3UgaW5zdGFsbCB0aGUgcGx1Z2luLCB0aGUgbmVjZXNzYXJ5IHRh YmxlIGlzIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGZvciB5b3UuIFRoZXJlJiM4MjE3O3Mg Y3VycmVudGx5IG5vIGZhY2lsaXR5IGZvciByZW1vdmluZyBpdCBkdXJpbmcgcGx1Z2luIG9w ZXJhdGlvbiwgYnV0IGl0IHdpbGwgYmUgZGVsZXRlZCBpZiB0aGUgcGx1Z2luIGlzIGRlbGV0 ZWQgZnJvbSB5b3VyIHN5c3RlbS4gTm90ZSB0aGF0IGlmIHlvdSBwdXQgdGhlIHBsdWdpbiBp biB0aGUgY2FjaGUgZGlyIGFuZCB0aGVyZWZvcmUgZG9uJiM4MjE3O3QgZ28gdGhvdWdoIHRo ZSBub3JtYWwgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSwgdGhlIHRhYmxlIGlzIDxzdHJvbmc+ bm90PC9zdHJvbmc+IGluc3RhbGxlZCBhdXRvbWF0aWNhbGx5OyB2aXNpdCB0aGUgPGVtPkNv bnRlbnQtJmd0O0ZlYXR1cmVkIGFydGljbGVzPC9lbT4gdGFiIGFuZCBjbGljayB0aGUgPGVt Pkluc3RhbGwgdGFibGU8L2VtPiBidXR0b24uPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgc2lt cGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGZyb20gdGhlIDxlbT5BZG1pbi0mZ3Q7UGx1Z2luczwv ZW0+IHBhZ2UuPC9wPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPlVuZm9ydHVuYXRlbHksIHdo ZW4gdXBncmFkaW5nIGZyb20gdjAuM3ggdG8gdjAuNDAsIHlvdXIgVGV4dGlsZSBwcmVmZXJl bmNlcyB3aWxsIGJlIGxvc3QuIFBsZWFzZSByZXNldCB0aGVtIGJ5IHZpc2l0aW5nIHRoZSA8 ZW0+RmVhdHVyZWQgYXJ0aWNsZXM8L2VtPiB0YWIgd2l0aCBhbiBhZG1pbmlzdHJhdG9yIGFj Y291bnQgYW5kIGFkanVzdGluZyB0aGUgcHJlZnMuPC9wPgoKCTxoMj5Db25maWd1cmluZyBm ZWF0dXJlZCBhcnRpY2xlczwvaDI+CgoJPHA+VmlzaXQgdGhlIDxlbT5Db250ZW50LSZndDtG ZWF0dXJlZCBhcnRpY2xlczwvZW0+IHRhYi4gQSBsaXN0IG9mIGFsbCBhcnRpY2xlcyAoZnJv bSB0aGUgYWRtaW4tc2VsZWN0ZWQgc2VjdGlvbnMpIGFyZSBwcmVzZW50ZWQgaW4gYSBncmlk LjwvcD4KCgk8aDM+VG8gZmVhdHVyZSBhbiBhcnRpY2xlPC9oMz4KCgk8cD5DbGljayBpdHMg bmFtZS4gSXQgd2lsbCBiZSBoaWdobGlnaHRlZCBhbmQgKGlmIHBlcm1pdHRlZCBieSB0aGUg YWRtaW5pc3RyYXRvcikgYW4gPGNvZGU+W0VkaXRdPC9jb2RlPiBidXR0b24gYXBwZWFycyBi ZXNpZGUgaXQuIElmIHlvdSBjaG9vc2Ugbm90IHRvIGVkaXQgdGhlIGFydGljbGUgaW5mb3Jt YXRpb24sIGl0IHdpbGwgYmUgZmVhdHVyZWQgYnV0IHVubGFiZWxsZWQuPC9wPgoKCTxwPkFu IGFycm93IGFsc28gYXBwZWFycyBpbiB0aGUgbG93ZXIgcmlnaHQgaGFuZCBjb3JuZXIgb2Yg dGhlIGJveC4gQ2xpY2sgdGhpcyB0byB0YWtlIHlvdSB0byB0aGUgV3JpdGUgdGFiIHRvIHZp ZXcvZWRpdCB0aGUgb3JpZ2luYWwgYXJ0aWNsZS4gVGhlIHNhbWUgbGluayBpcyBhdmFpbGFi bGUgYnkgY2xpY2tpbmcgdGhlIGFydGljbGUgVGl0bGUgd2hpbGUgZWRpdGluZyBhbiBlbnRy eS48L3A+CgoJPHA+SW4gdGhlIGxvd2VyIGxlZnQgY29ybmVyIG9mIHRoZSBib3gsIGEgcG9z aXRpb24gaW5wdXQgZmllbGQgYXBwZWFycy4gWW91IGNhbiB0eXBlIGFueXRoaW5nIGluIHRo aXMgYm94IHRvIHNwZWNpZnkgYSBzb3J0IG9yZGVyIGZvciB0aGUgZmVhdHVyZWQgaXRlbTsg YXMgc29vbiBhcyB0aGUgY3Vyc29yIGxlYXZlcyB0aGUgYm94IHRoZSB2YWx1ZSBpcyBzYXZl ZC4gWW91IGFyZSBmcmVlIHRvIHVzZSB3aGljaGV2ZXIgc29ydCBzY2hlbWUgd29ya3MgZm9y IHlvdSAmIzgyMTI7IG51bWJlcnMsIGFscGhhbnVtZXJpY3MsIHNxdWlnZ2xlcywgYW55dGhp bmcuIFRoaXMgZG9lcyBub3QgYWx0ZXIgdGhlIG9yZGVyIG9mIHRoZSBpdGVtcyBpbiB0aGUg Z3JpZCAodXNlIHRoZSA8ZW0+U29ydCBieTwvZW0+IHZhbHVlIGluIHRoZSBwbHVnaW4mIzgy MTc7cyBjb250cm9sIHBhbmVsIGZvciB0aGF0KSBidXQgYWxsb3dzIHlvdSB0byBvcmRlciB0 aGUgaXRlbXMgYXMgdGhleSBhcHBlYXIgb24geW91ciBzaXRlLiBZb3UgbWF5IGxlYXZlIHRo aXMgYm94IGVtcHR5IGlmIHlvdSB3aXNoLiBOb3RlIHRoYXQgc29ydGluZyBpcyBwZXJmb3Jt ZWQgb24gYSBwZXItbGFiZWwgYmFzaXMgc28geW91IG1heSByZXVzZSBzb3J0IHZhbHVlcyB1 bmRlciBkaWZmZXJlbnQgbGFiZWxzLjwvcD4KCgk8cD5DbGlja2luZyA8Y29kZT5bRWRpdF08 L2NvZGU+IHdpbGwgZGlzcGxheSB1cCB0byBmb3VyIGlucHV0IGJveGVzLCBkZXBlbmRpbmcg b24gdGhlIDxhIGhyZWY9IiNzbWRfZmVhdF9wcmVmcyI+cHJlZnM8L2E+OjwvcD4KCgk8dWw+ CgkJPGxpPjxzdHJvbmc+TGFiZWw8L3N0cm9uZz4gOiBhbGxvd3MgeW91IHRvIGxhYmVsIChn cm91cCkgdGhlIGFydGljbGUgd2l0aCBvdGhlcnMgb2YgYSBzaW1pbGFyIGZlYXR1cmVkIHN0 YXR1cy4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBsYWJlbCBzb21lIGFydGljbGVzIHRvIGdv IGluIGEgJiM4MjE2O3RlYXNlcnMmIzgyMTc7IGJsb2NrIG9uIHlvdXIgaG9tZSBwYWdlIGJ5 IGxhYmVsbGluZyBlYWNoIHBvdGVudGlhbCBhcnRpY2xlIHdpdGggPGNvZGU+VGVhc2VyPC9j b2RlPi4gQmUgY2FyZWZ1bDogPHN0cm9uZz5sYWJlbHMgYXJlIGNhc2Ugc2Vuc2l0aXZlPC9z dHJvbmc+LiBUbyBoZWxwLCB5b3UgbWF5IGNob29zZSBhIGxhYmVsIGZyb20gdGhlIGRyb3Bk b3duIGxpc3Qgb2YgYWxsIGN1cnJlbnRseSBkZWZpbmVkIGxhYmVscyBvciBlbnRlciBhIG5l dyBvbmUuPC9saT4KCQk8bGk+PHN0cm9uZz5UaXRsZTwvc3Ryb25nPiA6IGFsbG93cyB5b3Ug dG8gc3RvcmUgc29tZSBUZXh0aWxlLWF3YXJlIHRpdGxlIHJlbGF0ZWQgdG8gdGhlIGFydGlj bGUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGFydGljbGUmIzgyMTc7cyBhY3R1YWwg VGl0bGUgYW5kIGNhbiBiZSB1c2VkIGZvciBhbnkgcHVycG9zZSB5b3Ugc2VlIGZpdC48L2xp PgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+IDogYWxsb3dzIHlvdSB0byBz dG9yZSBzb21lIFRleHRpbGUtYXdhcmUgc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBhYm91dCB0 aGUgYXJ0aWNsZS4gVGhpcyBjb3VsZCBzaW1wbHkgYmUgYWRkaXRpb25hbCBpbmZvcm1hdGlv biBmb3IgeW91ciBvd24gdXNlLCBvciBzb21lIGNvcHkgdGhhdCB5b3UgbWF5IHdpc2ggdG8g ZGlzcGxheSBpbiB5b3VyIHRlYXNlcnMgYmxvY2sgdG8gZW50aWNlIHBlb3BsZSB0byByZWFk IHRoZSBhcnRpY2xlLiBJdCBjYW4gYmUgYXMgc2ltcGxlIG9yIGFzIGNvbXBsZXggYXMgeW91 IGxpa2UgYW5kIGNhbiBjb250YWluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRh Z3MgKGlmIHRoZXkgbWFrZSBzZW5zZSB0byB1c2UgYXQgdGhhdCBwb2ludCAmIzgyMTI7IGFy dGljbGUgdGFncyBjYW5ub3QgYmUgdXNlZCwgZm9yIGV4YW1wbGUsIGJ1dCA8Y29kZT4mbHQ7 dHhwOnNpdGVfdXJsIC8mZ3Q7PC9jb2RlPiBjYW4pLjwvbGk+CgkJPGxpPjxzdHJvbmc+UG9z aXRpb248L3N0cm9uZz4gOiBhbGxvd3MgeW91IHRvIHN0b3JlIHNvbWUgcG9zaXRpb25pbmcg dGV4dCAodXAgdG8gMTYgY2hhcmFjdGVycykgdGhhdCBnb3Zlcm5zIHRoZSBvcmRlciB0aGlz IGl0ZW0gYXBwZWFycyBvbiB5b3VyIHNpdGUuIFRoaXMgaXMgdGhlIHNhbWUgdmFsdWUgYXMg aW4gdGhlIGxpdHRsZSBib3ggaW4gdGhlIGxvd2VyIGxlZnQgY29ybmVyIG9mIHRoZSBhcnRp Y2xlIGNlbGwuPC9saT4KCTwvdWw+CgoJPHA+V2hlbiB5b3UmIzgyMTc7cmUgaGFwcHkgd2l0 aCB5b3VyIHZhbHVlcywgaGl0IFNhdmUgdG8gc3RvcmUgdGhlIGVudHJ5LiBZb3UgY2FuIGVk aXQgdGhlIGluZm9ybWF0aW9uIGF0IGFueSB0aW1lIGJ5IGNsaWNraW5nIHRoZSBhcHByb3By aWF0ZSA8Y29kZT5bRWRpdF08L2NvZGU+IGJ1dHRvbiBmcm9tIHRoZSBmZWF0dXJlZCBhcnRp Y2xlIGxpc3QuPC9wPgoKCTxoMz5UbyB1bmZlYXR1cmUgYW4gYXJ0aWNsZTwvaDM+CgoJPHA+ Q2xpY2sgaXRzIG5hbWUgYWdhaW4uIFlvdSBtYXkgYmUgb2ZmZXJlZCBhIGNvbmZpcm1hdGlv biBkaWFsb2cgYm94LCBpbiB3aGljaCBjYXNlIGNvbmZpcm0gdGhhdCB5b3UgYXJlIHN1cmUg Zmlyc3QuIFRoZSBhcnRpY2xlJiM4MjE3O3MgbGFiZWwsIHRpdGxlIGFuZCBkZXNjcmlwdGlv biBhcmUgZGVsZXRlZCwgc28gYmUgc3VyZSB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRo ZW0sIG9yIGhhdmUgYmFja2VkIHRoZSBpbmZvcm1hdGlvbiB1cCBzb21ld2hlcmUuPC9wPgoK CTxoMz5GaW5kaW5nIGFydGljbGVzIHRvIGZlYXR1cmU8L2gzPgoKCTxwPldpdGggbGFyZ2Ug YXJ0aWNsZSBsaXN0cyBpdCBjYW4gYmVjb21lIGRpZmZpY3VsdCB0byBmaW5kIHRoZSBvbmUg eW91IHdhbnQuIEFib3ZlIHRoZSBncmlkIGlzIGEgY29udHJvbCBwYW5lbC4gQ2xpY2sgaXQg dG8gcmV2ZWFsIHRoZSBwbHVnaW4gb3B0aW9ucy4gIE9uIHRoZSBsZWZ0IGlzIHRoZSBBcnRp Y2xlIHNlYXJjaCBhcmVhIGFuZCBvbiB0aGUgcmlnaHQgYXJlIHRoZSBwbHVnaW4gcHJlZmVy ZW5jZXMuIElmIHlvdSBhcmUgaW4gPGVtPkRpc3BsYXk6IEFsbDwvZW0+IG1vZGUsIHNpbXBs eSBzdGFydCB0eXBpbmcgaW4gdGhlIDxlbT5CeSBuYW1lPC9lbT4gYm94IGFuZCB5b3VyIGFy dGljbGUgbGlzdCB3aWxsIGJlIHJlZHVjZWQgYXMgeW91IHR5cGUgdG8gb25seSB0aG9zZSB0 aGF0IG1hdGNoLiBUeXBlIG11bHRpcGxlIHdvcmRzIHRvIGZpbmQgYXJ0aWNsZXMgdGhhdCBj b250YWluIGFueSBvZiB0aGUgZ2l2ZW4gd29yZHMuIFRvIHF1aWNrbHkgY2xlYXIgdGhlIGJv eCwgaGl0IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+RVNDPC9zcGFuPmFwZSBrZXkuPC9wPgoK CTxwPkFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBzZWxlY3QgbGlzdCB0byBjaG9v c2UgYWxsIGFydGljbGVzIHdpdGggYSBwYXJ0aWN1bGFyIGxhYmVsLiBUaGUgZW1wdHkgZW50 cnkgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCBtZWFucyAmIzgyMjA7YWxsIGFydGljbGVzJiM4 MjIxOy4gSWYgeW91IGhhdmUgZmVhdHVyZWQgYW4gYXJ0aWNsZSBidXQgZG9uJiM4MjE3O3Qg c3VwcGx5IGEgbGFiZWwgeW91IGNhbiBmaWx0ZXIgaXQgYnkgY2hvb3NpbmcgdGhlIDxjb2Rl Plt1bmxhYmVsbGVkXTwvY29kZT4gaXRlbSBmcm9tIHRoZSBsaXN0LiBJZiB5b3UgaGF2ZSBs YWJlbGxlZCBhbnkgYXJ0aWNsZXMsIGVhY2ggbGFiZWwgeW91IGhhdmUgc3VwcGxpZWQgd2ls bCBhbHNvIGJlIGFuIG9wdGlvbiBpbiB0aGUgbGlzdC4gUmVtZW1iZXIgdGhhdCBsYWJlbHMg YXJlIGNhc2Ugc2Vuc2l0aXZlLjwvcD4KCgk8cD5Ob3RlIHRoYXQgZmlsdGVyaW5nIGJ5IG5h bWUgb3IgYnkgbGFiZWwgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY3Rpb25zOiBzZWxlY3Rp bmcgc29tZXRoaW5nIGZyb20gdGhlIGRyb3Bkb3duIHdpbGwgY2xlYXIgdGhlIHRleHQgYm94 LCBhbmQgdHlwaW5nIHNvbWV0aGluZyBpbiB0aGUgdGV4dCBib3ggd2lsbCByZXNldCB0aGUg ZHJvcGRvd24uPC9wPgoKCTxwPllvdXIgc2VhcmNoIGNyaXRlcmlhIGFyZSByZW1lbWJlcmVk IGJldHdlZW4gZWRpdC9saXN0IHZpZXdzIHNvIHlvdSB3b24mIzgyMTc7dCBsb3NlIHlvdXIg cGxhY2UuIElmIHlvdSBhcmUgaW4gPGVtPkRpc3BsYXk6IFBhZ2luYXRlZDwvZW0+IG1vZGUs IHRoZSBzZWFyY2ggd29ya3MgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYnV0IHlvdSBoYXZl IHRvIGhpdCBFbnRlciBvciBjbGljayA8ZW0+R288L2VtPiB0byBzdWJtaXQgdGhlIHNlYXJj aCBjcml0ZXJpYS4gVGhpcyBtb2RlIGlzIGhhbmR5IGZvciB2ZXJ5IGxvbmcgYXJ0aWNsZSBs aXN0cyBvciBzbG93IHNlcnZlcnMgLyBjb21wdXRlcnMuPC9wPgoKCTxoMyBpZD0ic21kX2Zl YXRfcHJlZnMiPlBsdWdpbiBwcmVmZXJlbmNlczwvaDM+CgoJPHA+VXNlcnMgb2YgdGhlIDxl bT5GZWF0dXJlZCBhcnRpY2xlczwvZW0+IHRhYiBhbHNvIGhhdmUgYSBmZXcgcHJlZmVyZW5j ZXMgYXQgdGhlaXIgZGlzcG9zYWwgd2hpY2ggY2FuIGJlIGFsdGVyZWQgYXQgd2lsbDo8L3A+ CgoJPG9sPgoJCTxsaT48c3Ryb25nPkRpc3BsYXk8L3N0cm9uZz4gOiBjaG9vc2Ugd2hldGhl ciB5b3Ugd2lzaCB0byBkaXNwbGF5IGFsbCBhcnRpY2xlcyBvbiBvbmUgcGFnZSAoYW5kIHVz ZSB0aGUgbGl2ZSBzZWFyY2ggdG8gZmlsdGVyIHRoZW0pIG9yIGNob29zZSBhIHBhZ2luYXRl ZCB2aWV3IChhbmQgdXNlIHRoZSB0cmFkaXRpb25hbCBzZWFyY2gpLiBUaGUgdHJhZGl0aW9u YWwgc2VhcmNoIG1pZ2h0IGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxvdCBvZiBhcnRpY2xl cyAob3ZlciAxMDAwKSBiZWNhdXNlIHRoZSBsaXZlIHNlYXJjaCBtaWdodCBzbG93IGRvd24g c2lnbmlmaWNhbnRseS4gTm90ZSB0aGF0IHdoZW4geW91IHNlYXJjaCBmb3Igc29tZXRoaW5n IGluIHBhZ2luYXRlZCBtb2RlLCB0aGUgcmVzdWx0cyB0aGVtc2VsdmVzIGFyZW4mIzgyMTc7 dCBwYWdpbmF0ZWQuPC9saT4KCQk8bGk+PHN0cm9uZz5Tb3J0IGJ5PC9zdHJvbmc+IDogZGVm aW5lIHRoZSBzb3J0IG9yZGVyIG9mIHRoZSBhcnRpY2xlIGxpc3QuPC9saT4KCQk8bGk+PHN0 cm9uZz5Cb3ggc2l6ZTwvc3Ryb25nPiA6IHNwZWNpZnkgdGhlIDxjb2RlPndpZHRoPC9jb2Rl PiBhbmQgPGNvZGU+aGVpZ2h0PC9jb2RlPiB2YWx1ZXMgaW4gcGl4ZWxzIG9mIGVhY2ggY2Vs bCBpbiB0aGUgZ3JpZC4gRGVmYXVsdCBpcyA8Y29kZT4xNTB4NDA8L2NvZGU+LjwvbGk+Cgk8 L29sPgoKCTxwPkFkbWluaXN0cmF0b3JzIGNhbiBhbHNvIGFsdGVyIHRoZSBiZWhhdmlvdXIg b2YgdGhlIHBsdWdpbiBieSBhbHRlcmluZyB0aGUgZm9sbG93aW5nIHByZWZzOjwvcD4KCgk8 b2w+CgkJPGxpPjxzdHJvbmc+UGVybWl0IGVudHJ5IG9mPC9zdHJvbmc+OiBjaG9vc2Ugd2hp Y2ggZmVhdHVyZWQgZWxlbWVudHMgdXNlcnMgYXJlIHBlcm1pdHRlZCB0byBlbnRlci9hbHRl ci4gSWYgeW91IGRpc2FibGUgYWxsIHRoZSBjaGVja2JveGVzLCB0aGUgW0VkaXRdIGxpbmtz IG5leHQgdG8gZmVhdHVyZWQgYXJ0aWNsZXMgd2lsbCBub3QgYXBwZWFyLjwvbGk+CgkJPGxp PjxzdHJvbmc+QXBwbHkgdGV4dGlsZSB0bzwvc3Ryb25nPjogY2hvb3NlIHRoZSBpdGVtcyB0 byB3aGljaCB5b3Ugd2lzaCB0byBhcHBseSBUZXh0aWxlIHdoZW4geW91IEVkaXQgYW5kIFNh dmUgYSBmZWF0dXJlZCBhcnRpY2xlLiA8c3Ryb25nPk5vdGUgdGhpcyBvbmx5IGFmZmVjdHMg ZmVhdHVyZWQgYXJ0aWNsZXMgc2F2ZWQgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQ8L3N0cm9u Zz4uIFRodXMgaWYgeW91IHdpc2ggdG8gYXBwbHkgYSBuZXcgVGV4dGlsZSBzZXR0aW5nIHRv IGV4aXN0aW5nIGFydGljbGVzIHlvdSBuZWVkIHRvIHZpc2l0IGVhY2ggb25lIGluIHR1cm4g YnkgY2xpY2tpbmcgPGNvZGU+W0VkaXRdPC9jb2RlPiBhbmQgdGhlbiA8ZW0+U2F2ZTwvZW0+ LjwvbGk+CgkJPGxpPjxzdHJvbmc+QXJ0aWNsZXMgZnJvbSBzZWN0aW9uczwvc3Ryb25nPjog ZGVmaW5lIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2VjdGlvbiBuYW1lcy4gVGhlc2Ug d2lsbCBiZSB0aGUgb25seSBzZWN0aW9ucyBmcm9tIHdoaWNoIGFydGljbGVzIGFyZSBhbGxv d2VkIHRvIGJlIGZlYXR1cmVkLjwvbGk+Cgk8L29sPgoKCTxwPkluIGFkZGl0aW9uLCBpZiB5 b3UgY3JlYXRlIGEgaGlkZGVuIHByZWYgY2FsbGVkIDxjb2RlPnNtZF9mZWF0dXJlZF9wcml2 czwvY29kZT4geW91IGNhbiBsaW1pdCB0aGUgcHJpdmlsZWdlIGxldmVscyBvZiBhY2NvdW50 cyB0aGF0IGNhbiBhY2Nlc3MgdGhlIDxlbT5GZWF0dXJlZCBhcnRpY2xlczwvZW0+IHRhYi4g RGVmYXVsdDogPGNvZGU+MSwyPC9jb2RlPi4gSWYgdXNpbmcgc21kX3ByZWZhbGl6ZXIgdG8g Y3JlYXRlIHRoaXMgcHJlZiwgc2V0IHRoZSBuYW1lIGFuZCB2YWx1ZSBhcyBhYm92ZSBhbmQg c2V0IHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBwYXJhbWV0ZXJzOjwvcD4KCgk8dWw+CgkJ PGxpPjxzdHJvbmc+dHlwZTwvc3Ryb25nPiA6IGhpZGRlbjwvbGk+CgkJPGxpPjxzdHJvbmc+ ZXZlbnQ8L3N0cm9uZz4gOiBzbWRfZmVhdHVyZWQ8L2xpPgoJCTxsaT48c3Ryb25nPmlucHV0 IGNvbnRyb2w8L3N0cm9uZz4gOiB0ZXh0X2lucHV0PC9saT4KCQk8bGk+PHN0cm9uZz51c2Vy PC9zdHJvbmc+IDogLyBlbXB0eSAvPC9saT4KCQk8bGk+PHN0cm9uZz5wb3NpdGlvbjwvc3Ry b25nPjogMDwvbGk+Cgk8L3VsPgoKCTxoMj5EaXNwbGF5aW5nIGZlYXR1cmVkIGFydGljbGVz PC9oMj4KCgk8cD5PbmNlIHlvdSBoYXZlIGNob3NlbiB5b3VyIGZlYXR1cmVkIGFydGljbGVz LCB5b3UgbmVlZCBhIHdheSB0byBkaXNwbGF5IHRoZW06PC9wPgoKCTxoMz5UYWc6IDxjb2Rl PiZsdDt0eHA6c21kX2ZlYXR1cmVkIC8mZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+QWN0cyBhIGJp dCBsaWtlIHRoZSBzdGFuZGFyZCA8Y29kZT4mbHQ7dHhwOmFydGljbGUgLyZndDs8L2NvZGU+ IHRhZyB0byBkaXNwbGF5IGZlYXR1cmVkIGFydGljbGVzLiBBdHRyaWJ1dGVzOjwvcD4KCgk8 dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5sYWJlbDwvc3Bhbj4gOiBkaXNwbGF5IGZl YXR1cmVkIGFydGljbGVzIHdpdGggdGhpcyBsYWJlbC4gU3BlY2lmeSA8Y29kZT5sYWJlbD0m cXVvdDsmcXVvdDs8L2NvZGU+IHRvIGRpc3BsYXkgdW5sYWJlbGxlZCBhcnRpY2xlcyAod2hp Y2ggYXJlIDxzdHJvbmc+bm90PC9zdHJvbmc+IHRoZSBzYW1lIGFzIHVuZmVhdHVyZWQgYXJ0 aWNsZXMpLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLCBhbGwgZmVhdHVyZWQgYXJ0 aWNsZXMgJiM4MjEyOyBpcnJlc3BlY3RpdmUgb2YgbGFiZWwgJiM4MjEyOyB3aWxsIGJlIGRp c3BsYXllZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWx0YWc8L3NwYW4+ IDogdGhlIChYKUhUTUwgdGFnICYjODIxMjsgd2l0aG91dCBicmFja2V0cyAmIzgyMTI7IHRv IGFwcGx5IHRvIHRoZSBsYWJlbCBhdHRyaWJ1dGUuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNw ZWNpZmllZCB0aGUgbGFiZWwgaXRzZWxmIGlzIGRpc3BsYXllZCBhdCB0aGUgaGVhZCBvZiB5 b3VyIGZlYXR1cmVkIGFydGljbGUgbGlzdC4gSWYgeW91IHdpc2ggdG8gZGlzcGxheSB1bmxh YmVsbGVkIGFydGljbGVzIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIDxjb2RlPnVubGFiZWw8 L2NvZGU+IGF0dHJpYnV0ZSBvciB5b3UmIzgyMTc7bGwgc2VlIG5vIGxhYmVsLiBOb3RlIHRo YXQgdGhpcyB0YWcgZGlmZmVycyBmcm9tIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBjb252ZW50aW9uOiB5b3Ugd2lsbCA8ZW0+b25seTwvZW0+IHNlZSB0aGUgbGFiZWwg aWYgeW91IHNwZWNpZnkgdGhlIDxjb2RlPmxhYmVsdGFnPC9jb2RlPi4gWW91IGNhbiBkaXNw bGF5IHRoZSBsYWJlbCBpbnNpZGUgeW91ciBhcnRpY2xlcyB1c2luZyB0aGUgPGNvZGU+Jmx0 O3R4cDpmZWF0dXJlZF9pbmZvIC8mZ3Q7PC9jb2RlPiB0YWcuPC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPnVubGFiZWw8L3NwYW4+IDogd2hlbiB1c2luZyA8Y29kZT5sYWJlbD0m cXVvdDsmcXVvdDs8L2NvZGU+ICh0byBzaG93IHVubGFiZWxsZWQgYXJ0aWNsZXMpIHRoaXMg YXR0cmlidXRlIHNwZWNpZmllcyB0aGUgbGFiZWwgdG8gdXNlIGluc2lkZSB0aGUgPGNvZGU+ bGFiZWx0YWc8L2NvZGU+LiBEZWZhdWx0OiAmIzgyMjA7RmVhdHVyZWQmIzgyMjE7LjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50aW1lPC9zcGFuPiA6IGxpbWl0IHRoZSBhcnRp Y2xlcyB0byB0aG9zZSBpbiB0aGUgPGNvZGU+cGFzdDwvY29kZT4sIHRoZSA8Y29kZT5mdXR1 cmU8L2NvZGU+IG9yIDxjb2RlPmFueTwvY29kZT4uIERlZmF1bHQ6IDxjb2RlPnBhc3Q8L2Nv ZGU+LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0dXM8L3NwYW4+IDogb25s eSBkaXNwbGF5IGFydGljbGVzIG9mIHRoZSBnaXZlbiBzdGF0dXMgbnVtYmVyKHMpLiBEZWZh dWx0OiA8Y29kZT40LDU8L2NvZGU+IChhLmsuYS4gbGl2ZSBhbmQgc3RpY2t5KS4gTm90ZSB0 aGF0IHRoaXMgYXR0cmlidXRlIG1heSBiZSBpZ25vcmVkIGlmIHlvdSBhcmUgdHJ5aW5nIHRv IHZpZXcgYW55dGhpbmcgb3RoZXIgbGl2ZSBhbmQgc3RpY2t5IGFydGljbGVzIChzaW5jZSBh cnRpY2xlX2N1c3RvbSBkb2VzIHRoZSBzYW1lKS48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+c2VjdGlvbjwvc3Bhbj4gOiBvbmx5IGRpc3BsYXkgYXJ0aWNsZXMgZnJvbSB0aGUg Z2l2ZW4gc2VjdGlvbihzKS4gSWYgdGhlIHNlY3Rpb24gbGlzdCBpcyByZXN0cmljdGVkIHVz aW5nIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMsIHRoZSBzZWN0aW9ucyB1c2VkIGhlcmUgbXVz dCBhbHNvIGJlIGluIHRoYXQgbGlzdC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ aGlzdG9yeTwvc3Bhbj4gOiBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVtZW1iZXIgcHJldmlv dXNseSBzZWVuIGFydGljbGVzIGFuZCB0aHVzIGV4Y2x1ZGUgdGhlbSBmcm9tIGZ1dHVyZSBz bWRfZmVhdHVyZWQgLyBzbWRfdW5mZWF0dXJlZCB0YWdzLiBJZiB5b3UgYXJlIHVzaW5nIHRo ZSBzYW1lIGZlYXR1cmVkIHRhZyBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBwYWdlIGFu ZCB3YW50IGl0IHRvIGFsd2F5cyBvdXRwdXQgdGhlIHNhbWUgbGlzdCwgc2V0IHRoaXMgYXR0 cmlidXRlIHRvIDAuIERlZmF1bHQ6IDEuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PmZvcm08L3NwYW4+IDogdXNlIHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g Zm9ybSB0byBkaXNwbGF5IGVhY2ggYXJ0aWNsZSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgY29u dGFpbmVyIGNvbnRlbnRzLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5saW1pdDwv c3Bhbj4gOiBtYXhpbXVtIG51bWJlciBvZiBmZWF0dXJlZCBhcnRpY2xlcyB0byBkaXNwbGF5 LiBEZWZhdWx0OiAxMC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c29ydDwvc3Bh bj4gOiBvcmRlciB0aGUgZmVhdHVyZWQgYXJ0aWNsZXMgYnkgPGNvZGU+aWQ8L2NvZGU+LCA8 Y29kZT5sYWJlbDwvY29kZT4sIDxjb2RlPlRpdGxlPC9jb2RlPiwgPGNvZGU+UG9zdGVkPC9j b2RlPiwgYW5kIHNvIG9uLiBBZGQgPGNvZGU+YXNjPC9jb2RlPiBvciA8Y29kZT5kZXNjPC9j b2RlPiB0byB0aGUgYXR0cmlidXRlIHRvIGFsdGVyIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNv cnQuIFlvdSBtYXkgYWxzbyB1c2UgPGNvZGU+cmFuZCgpPC9jb2RlPiB0byBzb3J0IHRoZSBh cnRpY2xlcyByYW5kb21seS4gRGVmYXVsdDogPGNvZGU+ZmVhdF9wb3NpdGlvbiBhc2MsIFBv c3RlZCBkZXNjPC9jb2RlPi4gVGhlIHNhbWUgbGlzdCBhdmFpbGFibGUgZm9yIHRoZSA8Y29k ZT4mbHQ7dHhwOmFydGljbGUgLyZndDs8L2NvZGU+IHRhZyBpcyB1c2FibGUgaGVyZS4gWW91 IG1heSBhbHNvIHVzZToKCTx1bD4KCQk8bGk+PHN0cm9uZz5mZWF0X3Bvc2l0aW9uPC9zdHJv bmc+IDogeW91ciBjdXN0b20gcG9zaXRpb248L2xpPgoJCTxsaT48c3Ryb25nPmZlYXRfdGl0 bGU8L3N0cm9uZz4gOiB5b3VyIGZlYXR1cmVkIHRpdGxlIGNvbnRlbnQ8L2xpPgoJCTxsaT48 c3Ryb25nPmRlc2NyaXB0aW9uPC9zdHJvbmc+IDogeW91ciBmZWF0dXJlZCBkZXNjcmlwdGlv biBjb250ZW50PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndy YXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnICYjODIxMjsgd2l0aG91dCBicmFja2V0 cyAmIzgyMTI7IHRvIHdyYXAgYXJvdW5kIHRoZSBsaXN0IG9mIGZlYXR1cmVkIGFydGljbGVz LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVhazwvc3Bhbj4gOiB0aGUgKFgp SFRNTCB0YWcgJiM4MjEyOyB3aXRob3V0IGJyYWNrZXRzICYjODIxMjsgb3IgdGV4dCB0byBw dXQgYmV0d2VlbiBlYWNoIGFydGljbGUuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PmNsYXNzPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFz cyBuYW1lIHRvIGFwcGx5IHRvIHRoZSB3cmFwdGFnLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5odG1sX2lkPC9zcGFuPiA6IGEgPHNwYW4gY2xhc3M9ImNhcHMiPkRPTTwvc3Bh bj4gSUQgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcuPC9saT4KCTwvdWw+CgoJPHA+WW91IG1h eSB1c2UgdGhlIHRhZyBhcyBhIGNvbnRhaW5lciBhbmQgYW55IHRhZ3MgeW91IHNwZWNpZnkg d2lsbCBiZSBkaXNwbGF5ZWQgaW4gZWFjaCBmZWF0dXJlZCBhcnRpY2xlLiBZb3UgY2FuIHVz ZSBzdGFuZGFyZCBhcnRpY2xlIHRhZ3Mgc3VjaCBhcyA8Y29kZT4mbHQ7dHhwOnRpdGxlIC8m Z3Q7PC9jb2RlPiwgPGNvZGU+Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7PC9jb2RlPiwgPGNvZGU+ Jmx0O3R4cDpwZXJtbGluayAvJmd0OzwvY29kZT4sIGV0YywgYWx0aG91Z2ggc29tZSBhcnRp Y2xlcyBhcmUgbm90IGRpc3BsYXlhYmxlIGJ5IFRleHRwYXR0ZXJuIChlLmcuIGhpZGRlbiwg cGVuZGluZyBhbmQgZHJhZnQgYXJ0aWNsZXMpLjwvcD4KCgk8cCBjbGFzcz0iaW1wb3J0YW50 Ij5Ob3RlIHRoYXQgeW91IGNhbiYjODIxNzt0IHVzZSA8Y29kZT4mbHQ7dHhwOnNtZF9mZWF0 dXJlZCZndDs8L2NvZGU+IGluc2lkZSBhbiBhcnRpY2xlIG9yIGFuIEFydGljbGUgRm9ybS4g RG9pbmcgc28gd2lsbCB0cmlnZ2VyIGEgd2FybmluZyBiZWNhdXNlIGl0JiM4MjE3O3MgdGhl IHNhbWUgYXMgcHV0dGluZyBhbm90aGVyIGFydGljbGUgdGFnIGluc2lkZSBhbiBhcnRpY2xl LiBVc2UgdGhlIHRhZyBvbmx5IGluIFBhZ2VzLCBvciBpbiBhIEZvcm0gdGhhdCBpcyBuZXZl ciBkaXJlY3RseSB1c2VkIHRvIGRpc3BsYXkgYXJ0aWNsZSBjb250ZW50LjwvcD4KCgk8cD5F YWNoIHRpbWUgeW91IHVzZSA8Y29kZT4mbHQ7dHhwOnNtZF9mZWF0dXJlZCAvJmd0OzwvY29k ZT4gaXQgbWFrZXMgYSBub3RlIG9mIHRoZSBhcnRpY2xlcyBpdCBoYXMgZGlzcGxheWVkIGFu ZCB3aWxsIG5vdCBkdXBsaWNhdGUgYXJ0aWNsZXMgaW4gbGF0ZXIgdGFncy4gWW91IGNhbiB1 c2UgPGNvZGU+Jmx0O3R4cDplbHNlIC8mZ3Q7PC9jb2RlPiBpbiB5b3VyIGZvcm0gLyBjb250 YWluZXIgdG8gdGFrZSBhY3Rpb24gaWYgdGhlIGZlYXR1cmVkIGxpc3QgaXMgZW1wdHkuPC9w PgoKCTxoMz5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2ZlYXR1cmVkX2luZm8gLyZndDs8L2Nv ZGU+PC9oMz4KCgk8cD5BbGxvd3MgeW91IHRvIGRpc3BsYXkgdGhlIGxhYmVsIG9yIHRoZSBk ZXNjcmlwdGlvbiB3aXRoaW4geW91ciA8Y29kZT4mbHQ7dHhwOnNtZF9mZWF0dXJlZCAvJmd0 OzwvY29kZT4gIGZvcm0vY29udGFpbmVyLjwvcD4KCgk8cD5IYXMgb25lIGF0dHJpYnV0ZTo8 L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aXRlbTwvc3Bhbj4gOiB0aGUg dGhpbmcgeW91IHdhbnQgdG8gZGlzcGxheS4gQ2hvb3NlIGZyb206Cgk8dWw+CgkJPGxpPjxz dHJvbmc+bGFiZWw8L3N0cm9uZz46IHRoZSBsYWJlbC48L2xpPgoJCTxsaT48c3Ryb25nPnRp dGxlPC9zdHJvbmc+OiB0aGUgKHBvc3NpYmx5IFRleHRpbGUtcHJvY2Vzc2VkKSB0aXRsZS48 L2xpPgoJCTxsaT48c3Ryb25nPmRlc2NyaXB0aW9uPC9zdHJvbmc+OiB0aGUgKHBvc3NpYmx5 IFRleHRpbGUtcHJvY2Vzc2VkKSBkZXNjcmlwdGlvbi48L2xpPgoJPC91bD48L2xpPgoJPC91 bD4KCgk8aDM+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF91bmZlYXR1cmVkIC8mZ3Q7PC9jb2Rl PjwvaDM+CgoJPHA+VXNlIHRoaXMgdGFnIGlmIHlvdSB3aXNoIHRvIHNob3cgdGhlICYjODIx NjtyZW1haW5pbmcmIzgyMTc7IGFydGljbGVzICYjODIxMjsgaS5lLiBvbmVzIG5vdCBhbHJl YWR5IGRpc3BsYXllZCBieSBhbnkgcHJlY2VkaW5nIDxjb2RlPiZsdDt0eHA6c21kX2ZlYXR1 cmVkIC8mZ3Q7PC9jb2RlPiB0YWdzLiBJdCBhY3RzIHZlcnkgbXVjaCBsaWtlIHRoZSBidWls dC1pbiBhcnRpY2xlX2N1c3RvbSB0YWcsIGFuZCB0YWtlcyBhbGwgdGhlIHNhbWUgYXR0cmli dXRlcy4gVGh1cywgYnkgZGVmYXVsdCwgaXRzIGNvbnRleHQgaXMgJiM4MjIwO2FueSBhcnRp Y2xlcyBmcm9tIGFueSBzZWN0aW9uIGRlZmluZWQgaW4gdGhlIHNtZF9mZWF0dXJlZCBwbHVn aW4gdGhhdCBoYXZlIG5vdCBiZWVuIGRpc3BsYXllZCBhbHJlYWR5JiM4MjIxOy4gWW91IGNh biByZWR1Y2UgdGhpcyBsaXN0IGJ5IDxjb2RlPnNlY3Rpb248L2NvZGU+LCA8Y29kZT50aW1l PC9jb2RlPiBvciA8Y29kZT5zdGF0dXM8L2NvZGU+LjwvcD4KCgk8cD5Vbmxpa2UgYXJ0aWNs ZV9jdXN0b20sIDxjb2RlPiZsdDt0eHA6c21kX3VuZmVhdHVyZWQgLyZndDs8L2NvZGU+IHN1 cHBvcnRzIHBhZ2luYXRpb24gYW5kIDxjb2RlPiZsdDt0eHA6ZWxzZSAvJmd0OzwvY29kZT4g KGZvciB3aGVuIHlvdXIgdW5mZWF0dXJlZCBsaXN0IHJldHVybnMgbm90aGluZykuIFlvdSBj YW4gYWxzbyBzcGVjaWZ5IHRoZSA8Y29kZT5oaXN0b3J5PC9jb2RlPiBhdHRyaWJ1dGUgYW5k IGl0IHdvcmtzIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGl0IGRvZXMgZm9yIDxjb2RlPiZs dDt0eHA6c21kX2ZlYXR1cmVkIC8mZ3Q7PC9jb2RlPi4gVGh1cyBpdCBjYW4gYmUgYSB2ZXJ5 IHVzZWZ1bCwgcGFnZWFibGUgZGlyZWN0IHJlcGxhY2VtZW50IHRhZyBmb3IgYXJ0aWNsZV9j dXN0b20gaWYgeW91IHVzZSA8Y29kZT5oaXN0b3J5PSZxdW90OzAmcXVvdDs8L2NvZGU+Ljwv cD4KCgk8cD5Ob3Rlczo8L3A+CgoJPHVsPgoJCTxsaT50byB1c2UgcGFnaW5hdGlvbiwgcmVt b3ZlIGFueSBhcnRpY2xlIHRhZyBhbmQgYWRkIHRoZSA8Y29kZT5wYWdlYnk8L2NvZGU+IGF0 dHJpYnV0ZSAoYW5kIG9mIGNvdXJzZSA8Y29kZT5saW1pdDwvY29kZT4pIHRvIHRoZSBzbWRf dW5mZWF0dXJlZCB0YWcuIE5vdGUgeW91IG1heSBnZXQgYSB3YXJuaW5nIGFib3V0IG5vIGFy dGljbGUgdGFnIG9uIHRoZSBwYWdlLCBidXQgeW91IGNhbiBpZ25vcmUgaXQuPC9saT4KCQk8 bGk+aWYgeW91IHdpc2ggdGhlIDxjb2RlPnBhZ2VieTwvY29kZT4gYXR0cmlidXRlIHRvIHRy YWNrIGFueSA8Y29kZT5saW1pdDwvY29kZT4geW91IHNldCwgc3BlY2lmeSA8Y29kZT5wYWdl Ynk9JnF1b3Q7bGltaXQmcXVvdDs8L2NvZGU+LjwvbGk+CgkJPGxpPmlmIHlvdSBoYXZlIGFu eSBvdGhlciBwYWdpbmcgaW4gZWZmZWN0IG9uIHRoZSBwYWdlLCB1bmZlYXR1cmVkIHBhZ2lu YXRpb24gd2lsbCBiZSBpZ25vcmVkLjwvbGk+Cgk8L3VsPgoKCTxoMz5UYWc6IDxjb2RlPiZs dDt0eHA6c21kX2lmX2ZlYXR1cmVkJmd0OzwvY29kZT48L2gzPgoKCTxwPlRoaXMgdGFnIGFs bG93cyB5b3UgdG8gZGV0ZWN0IGlmIHRoZSBjdXJyZW50IChpbmRpdmlkdWFsKSBhcnRpY2xl IGlzIGZlYXR1cmVkIGFuZC9vciBoYXMgYSBwYXJ0aWN1bGFyIGxhYmVsLiBZb3UgbWF5IGFs c28gdXNlIHRoaXMgb3V0c2lkZSBhbiBhcnRpY2xlIGNvbnRleHQgYnkgc3VwcGx5aW5nIGEg bGlzdCBvZiBhcnRpY2xlIElEcy48L3A+CgoJPHA+SGFzIHR3byBhdHRyaWJ1dGVzOjwvcD4K Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj4gOiBsaXN0IG9mIGFy dGljbGUgSURzIG9mIHdoaWNoIHlvdSB3aXNoIHRvIGNoZWNrIHRoZSBmZWF0dXJlZCBzdGF0 dXMuIElmIG9taXR0ZWQsIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGFydGljbGUgKGlmIHVz ZWQgaW5zaWRlIGEgPGNvZGU+Jmx0O3R4cDphcnRpY2xlIC8mZ3Q7PC9jb2RlPiBjb250YWlu ZXIvZm9ybSkuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsPC9zcGFuPiA6 IGxpc3Qgb2YgbGFiZWxzIHRvIGNvbXBhcmUgdGhlIGdpdmVuIElEKHMpIHdpdGguIFNwZWNp ZnkgPGNvZGU+bGFiZWw9JnF1b3Q7JnF1b3Q7PC9jb2RlPiB0byBjaGVjayBmb3IgdW5sYWJl bGxlZCBhcnRpY2xlcywgb3IgdXNlIGFuIGVtcHR5IGl0ZW0gaWYgc3BlY2lmeWluZyBhIGxp c3QsIGUuZy4gPGNvZGU+bGFiZWw9JnF1b3Q7LCBGZWF0dXJlZCwgVGVhc2VyJnF1b3Q7PC9j b2RlPi4gUmVtZW1iZXIgdGhhdCBsYWJlbHMgYXJlIGNhc2Ugc2Vuc2l0aXZlLjwvbGk+Cgk8 L3VsPgoKCTxwPklmIHRoZSBhcnRpY2xlIG1hdGNoZXMgb25lIG9mIHRoZSBnaXZlbiBsYWJl bHMgdGhlIGNvbnRhaW5lZCBjb250ZW50IHdpbGwgYmUgZXhlY3V0ZWQuIElmIG5vIGxhYmVs IGlzIGdpdmVuIHRoZSBhcnRpY2xlKHMpIHdpbGwgYmUgY2hlY2tlZCBpZiB0aGV5IGFyZSBm ZWF0dXJlZCwgaXJyZXNwZWN0aXZlIG9mIGxhYmVsLjwvcD4KCgk8aDI+RXhhbXBsZXM8L2gy PgoKCTxoMyBpZD0iZWcxIj5FeGFtcGxlIDE6IENvbXBsZXRlIGRpcmVjdG9yeSBvZiBmZWF0 dXJlZCBhcnRpY2xlczwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJs b2NrIj4mbHQ7dHhwOnNtZF9mZWF0dXJlZCBsYWJlbHRhZz0mcXVvdDtoMiZxdW90OyBsaW1p dD0mcXVvdDsyMCZxdW90OwogICAgIHdyYXB0YWc9JnF1b3Q7ZGwmcXVvdDsgc29ydD0mcXVv dDtsYWJlbCZxdW90OyZndDsKICAgJmx0O3R4cDppZl9kaWZmZXJlbnQmZ3Q7CiAgICAgICZs dDtoMiZndDsmbHQ7dHhwOnNtZF9mZWF0dXJlZF9pbmZvIGl0ZW09JnF1b3Q7bGFiZWwmcXVv dDsgLyZndDsmbHQ7L2gyJmd0OwogICAmbHQ7L3R4cDppZl9kaWZmZXJlbnQmZ3Q7CiAgICZs dDtkdCZndDsKICAgICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7 Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDsvZHQmZ3Q7CiAgICZsdDtkZCZndDsKICAg ICAgJmx0O3R4cDpleGNlcnB0IC8mZ3Q7CiAgICZsdDsvZGQmZ3Q7CiZsdDsvdHhwOnNtZF9m ZWF0dXJlZCZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI6IE9u ZSBmZWF0dXJlZCBhcnRpY2xlIGFuZCBzaXggdGVhc2VycyBvbiB0aGUgaG9tZSBwYWdlPC9o Mz4KCgk8cD5TZWxlY3QgYW4gYXJ0aWNsZSBhbmQgbGFiZWwgaXQgPGNvZGU+ZmVhdHVyZTwv Y29kZT4uIFNlbGVjdCBzaXggb3RoZXJzIGFuZCBsYWJlbCB0aGVtIDxjb2RlPnRlYXNlcnM8 L2NvZGU+LiBBZGQgc29tZSBkZXNjcmlwdGlvbiB0ZXh0IHRvIHlvdXIgdGVhc2VyIGFydGlj bGVzLjwvcD4KCgk8cD5JbiB5b3VyIGRlZmF1bHQgUGFnZSwgcHV0IHRoaXM6PC9wPgoKPHBy ZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfZmVhdHVy ZWQgbGFiZWw9JnF1b3Q7ZmVhdHVyZSZxdW90OwogICAgIHdyYXB0YWc9JnF1b3Q7ZGl2JnF1 b3Q7IGh0bWxfaWQ9JnF1b3Q7bWFpbl9mZWF0dXJlJnF1b3Q7Jmd0OwogICAmbHQ7dHhwOnBl cm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAg Jmx0O3R4cDphcnRpY2xlX2ltYWdlIGNsYXNzPSZxdW90O2ZlYXRfaW1hZ2UmcXVvdDsgLyZn dDsKICAgJmx0O3AgY2xhc3M9JnF1b3Q7bGVhZGluJnF1b3Q7Jmd0OyZsdDt0eHA6ZXhjZXJw dCAvJmd0OyZsdDsvcCZndDsKJmx0Oy90eHA6c21kX2ZlYXR1cmVkJmd0Owo8L2NvZGU+PC9w cmU+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNt ZF9mZWF0dXJlZCBsYWJlbD0mcXVvdDt0ZWFzZXJzJnF1b3Q7CiAgICAgd3JhcHRhZz0mcXVv dDt1bCZxdW90OyBicmVhaz0mcXVvdDtsaSZxdW90OyBodG1sX2lkPSZxdW90O3RlYXNlcl9i bG9jayZxdW90OyZndDsKICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8m Z3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDtwIGNsYXNzPSZxdW90O2xlYWRpbiZx dW90OyZndDsmbHQ7dHhwOmV4Y2VycHQgLyZndDsmbHQ7L3AmZ3Q7CiZsdDsvdHhwOnNtZF9m ZWF0dXJlZCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPklmIHlvdSB3YW50ZWQgdG8gaGF2ZSBz b21lIG90aGVyIGFydGljbGVzIGJlbmVhdGggdGhvc2UsIGJ1dCBkaWRuJiM4MjE3O3Qgd2Fu dCBhbnkgZHVwbGljYXRlcyB0byBhcHBlYXIgeW91IGNvdWxkIHVzZTo8L3A+Cgo8cHJlIGNs YXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF91bmZlYXR1cmVk IGZvcm09JnF1b3Q7bXlfbGlzdCZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzIGlk PSJlZzMiPkV4YW1wbGUgMzogUGVyLXNlY3Rpb24gbGFuZGluZyBwYWdlIGZlYXR1cmVkIGFy dGljbGVzPC9oMz4KCgk8cD5JZiB5b3UgaGFkIGEgem9vIHNpdGUgd2l0aCBhIHNlY3Rpb24g Zm9yIHByaW1hdGVzLCBhIHNlY3Rpb24gZm9yIG1hbW1hbHMgYW5kIGEgc2VjdGlvbiBmb3Ig cmVwdGlsZXMsIHdoZW4geW91IHNldCB1cCB5b3VyIGZlYXR1cmVkIGFydGljbGUgbGlzdCBk ZWZpbmUgdGhlaXIgbGFiZWxzIGxpa2UgdGhpczo8L3A+CgoJPHVsPgoJCTxsaT5GZWF0dXJl ZCBwcmltYXRlczwvbGk+CgkJPGxpPkZlYXR1cmVkIG1hbW1hbHM8L2xpPgoJCTxsaT5GZWF0 dXJlZCByZXB0aWxlczwvbGk+Cgk8L3VsPgoKCTxwPk9uIHlvdXIgc2VjdGlvbiBsYW5kaW5n IHBhZ2UgdGVtcGxhdGUgeW91IGNhbiB0aGVuIGRvIHRoaXMgdG8gZGlzcGxheSBmb3VyIGFy dGljbGVzIGZyb20gdGhlIHJlbGV2YW50IChjdXJyZW50KSBzZWN0aW9uOjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDtoMiZndDtMb29rIHdobyYj Mzk7cyBoZXJlOiZsdDsvaDImZ3Q7CiZsdDt0eHA6c21kX2ZlYXR1cmVkIGxhYmVsPSYjMzk7 RmVhdHVyZWQgJmx0O3R4cDpzZWN0aW9uIC8mZ3Q7JiMzOTsKICAgICBzZWN0aW9uPSYjMzk7 Jmx0O3R4cDpzZWN0aW9uIC8mZ3Q7JiMzOTsgbGltaXQ9JnF1b3Q7NCZxdW90OwogICAgIHdy YXB0YWc9JnF1b3Q7ZGl2JnF1b3Q7IGh0bWxfaWQ9JnF1b3Q7ZmVhdF9ibG9jayZxdW90OyZn dDsKICAgJmx0O2RpdiBjbGFzcz0mcXVvdDtwaW1wZWRfYXJ0aWNsZSZxdW90OyZndDsKICAg ICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVy bWxpbmsmZ3Q7CiAgICAgICZsdDt0eHA6c21kX2ZlYXR1cmVkX2luZm8gaXRlbT0mcXVvdDtk ZXNjcmlwdGlvbiZxdW90OyAvJmd0OwogICAmbHQ7L2RpdiZndDsKJmx0Oy90eHA6c21kX2Zl YXR1cmVkJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzQiPkV4YW1wbGUgNDogQ29u ZGl0aW9uYWwgY2hlY2sgZm9yIGZlYXR1cmVkLW5lc3M8L2gzPgoKCTxwPklmIGEgc2l0ZSB2 aXNpdG9yIGhhcyBuYXZpZ2F0ZWQgYXdheSBmcm9tIHlvdXIgZnJvbnQgcGFnZSBhbmQgaXMg dmlld2luZyBhbiBhcnRpY2xlLCB5b3UgbWF5IHdpc2ggdG8gaGlnaGxpZ2h0IHRoZSBmYWN0 IHRoZSBjdXJyZW50IGFydGljbGUgaXMgYSBmZWF0dXJlZCBwcm9kdWN0LiBTbywgc29tZXdo ZXJlIGluc2lkZSB5b3UgYXJ0aWNsZSBmb3JtIGFkZDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9j ayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9pZl9mZWF0dXJlZCZndDsKICAg Jmx0O3AgY2xhc3M9JnF1b3Q7aGlsaWdodCZxdW90OyZndDtGRUFUVVJFRCBQUk9EVUNUJmx0 Oy9wJmd0OwombHQ7L3R4cDpzbWRfaWZfZmVhdHVyZWQmZ3Q7CjwvY29kZT48L3ByZT4KCgk8 cD5PciBpZiB5b3Ugd2FudGVkIHRvIG9ubHkgaGlnaGxpZ2h0IHRoZSBhcnRpY2xlIGlmIGl0 IHdhcyBhIGZlYXR1cmVkIG9yIG9uIHNwZWNpYWwgb2ZmZXI6PC9wPgoKPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfaWZfZmVhdHVyZWQgbGFi ZWw9JnF1b3Q7RmVhdHVyZWQsIFNwZWNpYWwmcXVvdDsmZ3Q7CiAgICZsdDtwIGNsYXNzPSZx dW90O2hpbGlnaHQmcXVvdDsmZ3Q7QXMgZmVhdHVyZWQgb24gdGhlIGZyb250IHBhZ2UhJmx0 Oy9wJmd0OwombHQ7L3R4cDpzbWRfaWZfZmVhdHVyZWQmZ3Q7CjwvY29kZT48L3ByZT4KCgk8 aDIgaWQ9ImNoYW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjE4IEp1biAx MCB8IDAuMTAgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4wNyBTZXAgMTAgfCAwLjIw IHwgUmVuYW1lZCBpZCBjb2x1bW4gdG8gZmVhdF9pZCA7IGZpeGVkIDxjb2RlPmxhYmVsPC9j b2RlPiBhdHRyaWJ1dGUgYnVnIChib3RoIHRoYW5rcyBwaWVtYW4pIDsgbGFiZWwgc2VhcmNo ZXMgYXJlIG5vdyBleGFjdCBtYXRjaGVzIDsgYWRkZWQgcHJlZnMgYW5kIHBhZ2luYXRpb24g c3VwcG9ydCBmb3IgYWRtaW4gc2lkZSA7IGFkZGVkIDxjb2RlPiZsdDt0eHA6c21kX2lmX2Zl YXR1cmVkJmd0OzwvY29kZT4gOyBhZGRlZCBsYWJlbCBzZWxlY3Rpb24gZnJvbSBkcm9wZG93 biBkdXJpbmcgZWRpdGluZyAodGhhbmtzIHR5ZSk8L2xpPgoJCTxsaT4xMyBTZXAgMTAgfCAw LjIxIHwgQWRkZWQgJiM4MjE2O3RpdGxlJiM4MjE3OyBhbmQgVGV4dGlsZSBvcHRpb25zIChi b3RoIHRoYW5rcyBiZyk8L2xpPgoJCTxsaT4xMyBTZXAgMTAgfCAwLjIyIHwgRml4ZWQgbWlz c2luZyBkb1NsYXNoKCkgb24gdW50ZXh0aWxlZCBodG1sIGNvbnRlbnQgKHRoYW5rcyBiZyk8 L2xpPgoJCTxsaT4wNSBPY3QgMTAgfCAwLjMwIHwgVXNlIDxjb2RlPmFydGljbGVfY3VzdG9t KCk8L2NvZGU+IG5vdCA8Y29kZT5hcnRpY2xlKCk8L2NvZGU+IHRvIHNpZGVzdGVwIGluZGl2 aWR1YWwgYXJ0aWNsZSBjb250ZXh0ICh0aGFua3Mgam9obnN0ZXBoZW5zKSA7IHBhc3MgPGNv ZGU+dGltZTwvY29kZT4gYW5kIDxjb2RlPmxpbWl0PC9jb2RlPiB0byA8Y29kZT5hcnRpY2xl X2N1c3RvbSgpPC9jb2RlPiA7IDxjb2RlPmxpbWl0PC9jb2RlPiBoYXMgZGVmYXVsdCBvZiAx MDwvbGk+CgkJPGxpPjExIE9jdCAxMCB8IDAuMzEgfCBCZXR0ZXIgdGhlbWUgaW50ZWdyYXRp b24gKHRoYW5rcyB0aGVib21ic2l0ZSk8L2xpPgoJCTxsaT4wMSBOb3YgMTAgfCAwLjMyIHwg QWRkZWQgb2xkZXIvbmV3ZXIgcGFnaW5hdGlvbiBzdXBwb3J0IHRvIDxjb2RlPiZsdDt0eHA6 c21kX3VuZmVhdHVyZWQgLyZndDs8L2NvZGU+IGFuZCBwZXJtaXR0ZWQgPGNvZGU+c2VjdGlv bjwvY29kZT4sIDxjb2RlPnN0YXR1czwvY29kZT4gYW5kIDxjb2RlPnRpbWU8L2NvZGU+IGZp bHRlcmluZyA7IGZpeGVkIHNvbWUgc3R5bGluZyBpc3N1ZXM8L2xpPgoJCTxsaT4xNyBKYW4g MTEgfCAwLjMzIHwgQWRkZWQgPGNvZGU+aGlzdG9yeTwvY29kZT4gYXR0cmlidXRlIDsgZml4 ZWQgc21kX3VuZmVhdHVyZWQgdG8gd29yayBjb3JyZWN0bHkgaW4gaW5kaXZpZHVhbCBhcnRp Y2xlIGNvbnRleHQgYWZ0ZXIgdGhlIHYwLjMyIGJsb29wZXIgKHRoYW5rcyBqb2huc3RlcGhl bnMpIDsgZml4ZWQgc21kX3VuZmVhdHVyZWQgYnVnIHRvIHN0b3AgdHhwOmFydGljbGUmIzgy MTc7cyBkZWZhdWx0IG91dHB1dCBpZiB1bmZlYXR1cmVkIGxpc3QgZW1wdHk8L2xpPgoJCTxs aT4xNyBKYW4gMTEgfCAwLjM0IHwgQWRkZWQgdHhwOmVsc2Ugc3VwcG9ydCB0byBmZWF0dXJl ZCAvIHVuZmVhdHVyZWQgdGFnczwvbGk+CgkJPGxpPjEyIE1heSAxMSB8IDAuNDAgfCBBZGRl ZCBwb3NpdGlvbmFsIHNvcnRpbmcsIGFsbG93ZWQgbGFiZWwvdGl0bGUvZGVzYyB0byBiZSBv cHRpb25hbCwgcmVtb3ZlZCAmIzgyMTY7QXJlIFlvdSBTdXJlJiM4MjE3OyBtZXNzYWdlIGlm IGxhYmVsL3RpdGxlL2Rlc2Mgbm90IHVzZWQsIGFuZCBhZGRlZCBmdWxsIFdyaXRlIHRhYiBl ZGl0IGxpbmtzIChhbGwgdGhhbmtzIHBpZW1hbikgOyBhZGRlZCBoaWRkZW4gcHJlZnMgdG8g aW50ZXJmYWNlIDsgbWFkZSB0ZXh0aWxlIHByZWZzIGdsb2JhbCAocHJldmlvdXMgc2V0dGlu Z3Mgd2lsbCBiZSBsb3N0IG9uIHVwZ3JhZGUpIDsgZ2xvYmFsIHByZWZzIG9ubHkgZWRpdGFi bGUgYnkgcHVibGlzaGVyIDsgPGNvZGU+Jmx0O3R4cDpzbWRfZmVhdHVyZWQgLyZndDs8L2Nv ZGU+IGRlZmF1bHQgc29ydCBvcmRlciBub3cgPGNvZGU+ZmVhdF9wb3NpdGlvbiBhc2MsIFBv c3RlZCBkZXNjPC9jb2RlPjwvbGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBM VUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBs aW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBm b250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNr Z3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBjb2RlLmJs b2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBkaXNw bGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21k X2hlbHAgaDEgeyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsg dGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgZm9udDogMTdweCBHZW9yZ2lhLCBz YW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fu cy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAyMHB4IDAgMDsgdGV4dC1k ZWNvcmF0aW9uOnVuZGVybGluZTsgfQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHgg QXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAw IDA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9u dC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJv cmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0 ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyB9CiNzbWRfaGVscCB0ZCwg I3NtZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDsg fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAu aW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBw eCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9z dHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMy OiIyYzNlMmYyNWNiZGYzOGM0ODhjMjc1NGU0MTI0ZDQ2MCI7fQ==