# upm_file v.0.4.2 # Associate single or multiple files with an article. # Mary Fredborg # http://utterplush.com/txp-plugins/upm-file # .......................................................................... # A plugin for Textpattern # http://textpattern.com/ # # Adding Plugins to Your Textpattern Installation # http://textpattern.net/wiki/index.php?title=Intermediate_Weblog_Model#Adding_Plugins_to_Your_Textpattern_Installation # .......................................................................... YToxMTp7czo0OiJuYW1lIjtzOjg6InVwbV9maWxlIjtzOjExOiJkZXNjcmlwdGlvbiI7czo1 MToiQXNzb2NpYXRlIHNpbmdsZSBvciBtdWx0aXBsZSBmaWxlcyB3aXRoIGFuIGFydGljbGUu IjtzOjc6InZlcnNpb24iO3M6NToiMC40LjIiO3M6NDoidHlwZSI7aToxO3M6NjoiYXV0aG9y IjtzOjEzOiJNYXJ5IEZyZWRib3JnIjtzOjEwOiJhdXRob3JfdXJpIjtzOjQyOiJodHRwOi8v dXR0ZXJwbHVzaC5jb20vdHhwLXBsdWdpbnMvdXBtLWZpbGUiO3M6NDoiY29kZSI7czoxMzc3 ODoiaWYgKHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKQoJewoJCXVwbV9maWxlX2luc3RhbGwo KTsKCgkJYWRkX3ByaXZzKCd1cG1fZmlsZV9wcmVmcycsICcxLDInKTsKCQlyZWdpc3Rlcl90 YWIoJ2V4dGVuc2lvbnMnLCAndXBtX2ZpbGVfcHJlZnMnLCAndXBtX2ZpbGUnKTsKCQlyZWdp c3Rlcl9jYWxsYmFjaygndXBtX2ZpbGVfcHJlZnMnLCAndXBtX2ZpbGVfcHJlZnMnKTsKCgkJ YWRkX3ByaXZzKCd1cG1fZmlsZV9pbnN0YWxsJywgJzEsMicpOwoJCXJlZ2lzdGVyX2NhbGxi YWNrKCd1cG1fZmlsZV9pbnN0YWxsJywgJ3VwbV9maWxlX3ByZWZzJywgJycsIDEpOwoJfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9hcnRpY2xlX2ZpbGVfbGlzdCgkYXR0cyA9IGFy cmF5KCkpCgl7CgkJZ2xvYmFsICR0aGlzZmlsZSwgJHRoaXNhcnRpY2xlLCAkZmlsZV9iYXNl X3BhdGgsICRwcmVmczsKCgkJZXh0cmFjdChsQXR0cyhhcnJheSgKCQkJJ2JyZWFrJwkJCQkJ PT4gYnIsCgkJCSdjbGFzcycJCQkJCT0+ICcnLAoJCQknaWQnCQkJCQkJPT4gJHRoaXNhcnRp Y2xlWyd0aGlzaWQnXSwKCQkJJ2ZpbGVfY2F0ZWdvcnknID0+ICcnLAoJCQknZm9ybScJCQkJ CT0+ICdmaWxlcycsCgkJCSdsYWJlbCcJCQkJCT0+ICcnLAoJCQknbGFiZWx0YWcnCQkJPT4g JycsCgkJCSdsaW1pdCcJCQkJCT0+IDAsCgkJCSdvZmZzZXQnCQkJCT0+IDAsCgkJCSdzb3J0 JwkJCQkJPT4gJycsCgkJCSdzb3J0YnknCQkJCT0+ICcnLCAvLyBkZXByZWNhdGVkCgkJCSd3 cmFwdGFnJwkJCQk9PiAnJwoJCSksICRhdHRzKSk7CgoJCSRpZCA9IChpbnQpICRpZDsKCgkJ aWYgKCRpZCA+IDApCgkJewoJCQkkZmllbGQgPSBmZXRjaCgkcHJlZnNbJ3VwbV9maWxlX2Zp ZWxkJ10sICd0ZXh0cGF0dGVybicsICdJRCcsIGRvU2xhc2goJGlkKSk7CgkJfQoKCQlpZiAo ZW1wdHkoJGlkKSBvciBlbXB0eSgkZmllbGQpKQoJCXsKCQkJcmV0dXJuOwoJCX0KCgkJLy8g Z2V0IGN1c3RvbSBmaWxlIGZpZWxkIGFuZCB0dXJuIGludG8gYXJyYXkKCQkkbGlzdCA9IGV4 cGxvZGUoJywnLCAkZmllbGQpOwoKCQkvLyBjaG9wIG9mZiB1bndhbnRlZCBJRHMKCQkkbGlz dCA9ICgkbGltaXQpID8gYXJyYXlfc2xpY2UoJGxpc3QsICRvZmZzZXQsICRsaW1pdCkgOiBh cnJheV9zbGljZSgkbGlzdCwgJG9mZnNldCk7CgoJCS8vIHNhbml0aXplIGZvciBxdWVyeQoJ CS8vIG1ha2Ugc3VyZSBvbmx5IHJlYWwgbnVtYmVycyBhcmUgdXNlZAoJCSRsaXN0ID0gZG9T bGFzaChqb2luKCcsJywgYXJyYXlfbWFwKGNyZWF0ZV9mdW5jdGlvbignJHZhbHVlJywgJ3Jl dHVybiAoaW50KSAkdmFsdWU7JyksICRsaXN0KSkpOwoKCQlpZiAoJGZpbGVfY2F0ZWdvcnkp CgkJewoJCQkkZmlsZV9jYXRlZ29yeSA9IGpvaW4oIicsJyIsIGRvU2xhc2goZG9fbGlzdCgk ZmlsZV9jYXRlZ29yeSkpKTsKCgkJCSRmaWxlX2NhdGVnb3J5X3NxbCA9ICJhbmQgY2F0ZWdv cnkgaW4oJyRmaWxlX2NhdGVnb3J5JykiOwoJCX0KCgkJZWxzZQoJCXsKCQkJJGZpbGVfY2F0 ZWdvcnlfc3FsID0gJyc7CgkJfQoKCQlpZiAoJHNvcnRieSkKCQl7CgkJCSRzb3J0ID0gJHNv cnRieTsKCQl9CgoJCSRzb3J0ID0gKCRzb3J0KSA/IGRvU2xhc2goJHNvcnQpIDogImZpZWxk KGlkLCAkbGlzdCkiOwoKCQkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJyonLCAndHhwX2ZpbGUn LCAiaWQgaW4oJGxpc3QpICRmaWxlX2NhdGVnb3J5X3NxbCBvcmRlciBieSAkc29ydCIpOwoK CQlpZiAoJHJzKQoJCXsKCQkJJGZvcm0gPSBmZXRjaF9mb3JtKCRmb3JtKTsKCgkJCSRvdXQg PSBhcnJheSgpOwoKCQkJd2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKQoJCQl7CgkJCQkkR0xP QkFMU1sndGhpc2ZpbGUnXSA9IGZpbGVfZG93bmxvYWRfZm9ybWF0X2luZm8oJGEpOwoKCQkJ CSRvdXRbXSA9IHBhcnNlKCRmb3JtKTsKCgkJCQkkR0xPQkFMU1sndGhpc2ZpbGUnXSA9ICcn OwoJCQl9CgoJCQlpZiAoJG91dCkKCQkJewoJCQkJcmV0dXJuIGRvTGFiZWwoJGxhYmVsLCAk bGFiZWx0YWcpLmRvV3JhcCgkb3V0LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MpOwoJCQl9 CgkJfQoKCQlyZXR1cm4gJyc7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ZpbGVf YXJ0aWNsZSgkYXR0cyA9IGFycmF5KCksICR0aGluZyA9ICcnKQoJewoJCWdsb2JhbCAkaXNf YXJ0aWNsZV9ib2R5LCAkaGFzX2FydGljbGVfdGFnOwoKCQlpZiAoJGlzX2FydGljbGVfYm9k eSkKCQl7CgkJCXRyaWdnZXJfZXJyb3IoZ1R4dCgnYXJ0aWNsZV90YWdfaWxsZWdhbF9ib2R5 JykpOwoJCQlyZXR1cm4gJyc7CgkJfQoKCQkkaGFzX2FydGljbGVfdGFnID0gdHJ1ZTsKCgkJ cmV0dXJuIHVwbV9maWxlX3BhcnNlQXJ0aWNsZXMoJGF0dHMsIDAsICR0aGluZyk7Cgl9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ZpbGVfZG9BcnRpY2xlcygkYXR0cywgJGlzY3Vz dG9tID0gMCwgJHRoaW5nID0gJycpCgl7CgkJZ2xvYmFsICRwcmV0ZXh0LCAkcHJlZnM7CgoJ CWV4dHJhY3QoJHByZXRleHQpOwoJCWV4dHJhY3QoJHByZWZzKTsKCgkJJGN1c3RvbUZpZWxk cyA9IGdldEN1c3RvbUZpZWxkcygpOwoJCSRjdXN0b21sQXR0cyA9IGFycmF5X251bGwoYXJy YXlfZmxpcCgkY3VzdG9tRmllbGRzKSk7CgoJCSR0aGVBdHRzID0gbEF0dHMoYXJyYXkoCgkJ CSdhbGxvd292ZXJyaWRlJyAgID0+ICghJHEgYW5kICEkaXNjdXN0b20pLAoJCQknYXV0aG9y JwkJCQkgID0+ICcnLAoJCQknYnJlYWsnICAgICAgICAgICA9PiAnJywKCQkJJ2NhdGVnb3J5 JwkJCSAgPT4gJycsCgkJCSdjbGFzcycgICAgICAgICAgID0+ICcnLAoJCQknZXhjZXJwdGVk JwkJCSAgPT4gJycsCgkJCSdmb3JtJwkJCQkJICA9PiAnZGVmYXVsdCcsCgkJCSdmcm9udHBh Z2UnCQkJICA9PiAnJywKCQkJJ2lkJwkJCQkJCSAgPT4gJycsCgkJCSdpbmNsdWRlX2V4cGly ZWQnID0+ICgkcHVibGlzaF9leHBpcmVkX2FydGljbGVzID8gJ3llcycgOiAnbm8nKSwKCQkJ J2tleXdvcmRzJwkJCSAgPT4gJycsCgkJCSdsYWJlbCcgICAgICAgICAgID0+ICcnLAoJCQkn bGFiZWx0YWcnICAgICAgICA9PiAnJywKCQkJJ2xpbWl0JwkJCQkJICA9PiAxMCwKCQkJJ2xp c3Rmb3JtJwkJCSAgPT4gJycsCgkJCSdtb250aCcJCQkJCSAgPT4gJycsCgkJCSdvZmZzZXQn CQkJCSAgPT4gMCwKCQkJJ3BhZ2VieScJCQkJICA9PiAnJywKCQkJJ3Bnb25seScJCQkJICA9 PiAwLAoJCQknc2VhcmNoYWxsJwkJCSAgPT4gMSwKCQkJJ3NlYXJjaGZvcm0nCQkgID0+ICcn LAoJCQknc2VhcmNoc3RpY2t5JwkgID0+IDAsCgkJCSdzZWN0aW9uJwkJCQkgID0+ICcnLAoJ CQknc29ydCcJCQkJCSAgPT4gJycsCgkJCSdzb3J0YnknCQkJCSAgPT4gJycsCgkJCSdzb3J0 ZGlyJwkJCQkgID0+ICcnLAoJCQknc3RhdHVzJwkJCQkgID0+ICc0JywKCQkJJ3RpbWUnCQkJ CQkgID0+ICdwYXN0JywKCQkJJ3dpdGhmaWxlcycJCQkgID0+IGZhbHNlLAoJCQknd3JhcHRh ZycgICAgICAgICA9PiAnJywKCQkpICsgJGN1c3RvbWxBdHRzLCAkYXR0cyk7CgoJCS8vIGlm IGFuIGFydGljbGUgSUQgaXMgc3BlY2lmaWVkLCB0cmVhdCBpdCBhcyBhIGN1c3RvbSBsaXN0 CgkJJGlzY3VzdG9tID0gIWVtcHR5KCR0aGVBdHRzWydpZCddKSA/IHRydWUgOiAkaXNjdXN0 b207CgoJCS8vIGZvciB0aGUgYXJ0aWNsZSB0YWcsIHNvbWUgYXR0cmlidXRlcyBhcmUgdGFr ZW4gZnJvbSBnbG9iYWxzCgkJLy8gb3ZlcnJpZGUgdGhlbSBiZWZvcmUgZXh0cmFjdAoJCWlm ICghJGlzY3VzdG9tKQoJCXsKCQkJJHRoZUF0dHNbJ2F1dGhvciddCQk9ICFlbXB0eSgkYXV0 aG9yKSA/ICJhLiRhdXRob3IiIDogJyc7CgkJCSR0aGVBdHRzWydjYXRlZ29yeSddCT0gKCRj KSA/ICJhLiRjIiA6ICcnOwoJCQkkdGhlQXR0c1snZXhjZXJwdGVkJ10gPSAnJzsKCQkJJHRo ZUF0dHNbJ2Zyb250cGFnZSddID0gKCRzICYmICRzID09ICdkZWZhdWx0JykgPyB0cnVlIDog ZmFsc2U7CgkJCSR0aGVBdHRzWydtb250aCddCQkJPSAhZW1wdHkoJG1vbnRoKSA/ICJhLiRt b250aCIgOiAnJzsKCQkJJHRoZUF0dHNbJ3NlY3Rpb24nXQkJPSAoJHMgJiYgJHMgIT0gJ2Rl ZmF1bHQnKSA/ICJhLiRzIiA6ICcnOwoJCX0KCgkJZXh0cmFjdCgkdGhlQXR0cyk7CgoJCS8v IGlmIGEgbGlzdGZvcm0gaXMgc3BlY2lmaWVkLCAkdGhpbmcgaXMgZm9yIGRvQXJ0aWNsZSgp IC0gaGVuY2UgaWdub3JlIGhlcmUuCgkJaWYgKCFlbXB0eSgkbGlzdGZvcm0pKQoJCXsKCQkJ JHRoaW5nID0gJyc7CgkJfQoKCQkkcGFnZWJ5ID0gKGVtcHR5KCRwYWdlYnkpID8gJGxpbWl0 IDogJHBhZ2VieSk7CgoJCS8vIHRyZWF0IHN0aWNreSBhcnRpY2xlcyBkaWZmZXJlbnRseSB3 cnQgc2VhcmNoIGZpbHRlcmluZywgZXRjCgkJJHN0YXR1cyA9IGluX2FycmF5KHN0cnRvbG93 ZXIoJHN0YXR1cyksIGFycmF5KCdzdGlja3knLCAnNScpKSA/IDUgOiA0OwoJCSRpc3N0aWNr eSA9ICgkc3RhdHVzID09IDUpOwoKCQkvLyBnaXZlIGNvbnRyb2wgdG8gc2VhcmNoLCBpZiBu ZWNlc2FyeQoJCWlmICgkcSAmJiAhJGlzY3VzdG9tICYmICEkaXNzdGlja3kpCgkJewoJCQlp bmNsdWRlX29uY2UodHhwYXRoLicvcHVibGlzaC9zZWFyY2gucGhwJyk7CgoJCQkkc19maWx0 ZXIgPSAoJHNlYXJjaGFsbCkgPyB1cG1fZmlsZV9maWx0ZXJTZWFyY2goKSA6ICcnOwoKCQkJ JHEgPSBkb1NsYXNoKCRxKTsKCiAgICAgIC8vIHNlYXJjaGFibGUgYXJ0aWNsZSBmaWVsZHMg YXJlIGxpbWl0ZWQgdG8gdGhlIGNvbHVtbnMgb2YKICAgICAgLy8gdGhlIHRleHRwYXR0ZXJu IHRhYmxlIGFuZCBhIG1hdGNoaW5nIGZ1bGx0ZXh0IGluZGV4IG11c3QgZXhpc3QuCgkJCSRj b2xzID0gZG9fbGlzdCgkc2VhcmNoYWJsZV9hcnRpY2xlX2ZpZWxkcyk7CgoJCQlpZiAoZW1w dHkoJGNvbHMpIG9yICRjb2xzWzBdID09ICcnKQoJCQl7CgkJCQkkY29scyA9IGFycmF5KCdh LlRpdGxlJywgJ2EuQm9keScpOwoJCQl9CgoJCQkkbWF0Y2ggPSAnLCBtYXRjaCAoJy5qb2lu KCcsICcsICRjb2xzKS4iKSBhZ2FpbnN0ICgnJHEnKSBhcyBzY29yZSI7CgoJCQlmb3IgKCRp ID0gMDsgJGkgPCBjb3VudCgkY29scyk7ICRpKyspCgkJCXsKCQkJCSRjb2xzWyRpXSA9ICIk Y29sc1skaV0gcmxpa2UgJyRxJyI7CgkJCX0KCgkJCSRzZWFyY2ggPSAiIGFuZCAoIi5qb2lu KCIgb3IgIiwgJGNvbHMpLiIpICRzX2ZpbHRlciI7CgoJCQkvLyBzZWFyY2hhbGw9MCBjYW4g YmUgdXNlZCB0byBzaG93IHNlYXJjaCByZXN1bHRzIGZvciB0aGUgY3VycmVudCBzZWN0aW9u IG9ubHkKCQkJaWYgKCRzZWFyY2hhbGwpCgkJCXsKCQkJCSRzZWN0aW9uID0gJyc7CgkJCX0K CgkJCWlmICghJHNvcnQpCgkJCXsKCQkJCSRzb3J0ID0gImRvd25sb2FkcyBkZXNjLCBzY29y ZSBkZXNjIjsKCQkJfQoJCX0KCgkJZWxzZQoJCXsKCQkJJG1hdGNoID0gJHNlYXJjaCA9ICcn OwoKCQkJaWYgKCEkc29ydCkKCQkJewoJCQkJJHNvcnQgPSAiZG93bmxvYWRzIGRlc2MsIFBv c3RlZCBkZXNjIjsKCQkJfQoJCX0KCgkJLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5 CgkJLy8gc29ydGJ5IGFuZCBzb3J0ZGlyIGFyZSBkZXByZWNhdGVkCgkJaWYgKCRzb3J0Ynkp CgkJewoJCQlpZiAoISRzb3J0ZGlyKQoJCQl7CgkJCQkkc29ydGRpciA9ICdkZXNjJzsKCQkJ fQoKCQkJJHNvcnQgPSAiJHNvcnRieSAkc29ydGRpciI7CgkJfQoKCQllbHNlaWYgKCRzb3J0 ZGlyKQoJCXsKCQkJJHNvcnQgPSAiYS5Qb3N0ZWQgJHNvcnRkaXIiOwoJCX0KCgkJLy8gYnVp bGRpbmcgcXVlcnkgcGFydHMKCQkkYXV0aG9yCT0gKCRhdXRob3IpCT8gIiBhbmQgYS5BdXRo b3JJRCBpbignIi5qb2luKCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJGF1dGhvcikpKS4iJyki IDogJyc7CgkJJGNhdGVnb3J5ID0gam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRjYXRl Z29yeSkpKTsKCQkkY2F0ZWdvcnkJPSAoJGNhdGVnb3J5KQk/ICIgYW5kICggYS5DYXRlZ29y eTEgaW4oJyIuZG9TbGFzaCgkY2F0ZWdvcnkpLiInKSBvciBhLkNhdGVnb3J5MiBpbignIi5k b1NsYXNoKCRjYXRlZ29yeSkuIicpICkgIiA6ICcnOwoJCSRleGNlcnB0ZWQgPSAoJGV4Y2Vy cHRlZCA9PSAneScpID8gIiBhbmQgYS5FeGNlcnB0ICE9ICcnIiA6ICcnOwoJCSRmcm9udHBh Z2UgPSAoJGZyb250cGFnZSBhbmQgKCEkcSBvciAkaXNzdGlja3kpKSA/IHVwbV9maWxlX2Zp bHRlckZyb250UGFnZSgpIDogJyc7CgkJJGlkCT0gKCRpZCkJPyAiIGFuZCBhLklEIGluKCci LmpvaW4oJywnLCBhcnJheV9tYXAoJ2ludHZhbCcsIGRvX2xpc3QoJGlkKSkpLiInKSIgOiAn JzsKCQkkbW9udGggPSAoJG1vbnRoKSA/ICIgYW5kIGEuUG9zdGVkIGxpa2UgJyIuZG9TbGFz aCgkbW9udGgpLiIlJyIgOiAnJzsKCQkkc2VjdGlvbiA9ICgkc2VjdGlvbikJPyAiIGFuZCBh LlNlY3Rpb24gaW4oJyIuam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRzZWN0aW9uKSkp LiInKSIgOiAnJzsKCgkJc3dpdGNoICgkdGltZSkKCQl7CgkJCWNhc2UgJ2FueSc6CgkJCQkk dGltZSA9ICcnOwoJCQlicmVhazsKCgkJCWNhc2UgJ2Z1dHVyZSc6CgkJCQkkdGltZSA9ICIg YW5kIGEuUG9zdGVkID4gbm93KCkiOwoJCQlicmVhazsKCgkJCWRlZmF1bHQ6CgkJCQkkdGlt ZSA9ICIgYW5kIGEuUG9zdGVkIDw9IG5vdygpIjsKCQkJYnJlYWs7CgkJfQoKCQlpZiAoJGlu Y2x1ZGVfZXhwaXJlZCA9PSAnbm8nKQoJCXsKCQkJJHRpbWUgLj0gIiBhbmQgKG5vdygpIDw9 IEV4cGlyZXMgb3IgRXhwaXJlcyA9ICIuTlVMTERBVEVUSU1FLiIpIjsKCQl9CgoJCS8vIHRy eWluZyBjdXN0b20gZmllbGRzIGhlcmUKCgkJJGN1c3RvbSA9ICcnOwoKCQkkY3VzdG9tRmll bGRzID0gZ2V0Q3VzdG9tRmllbGRzKCk7CgoJCWlmICgkY3VzdG9tRmllbGRzKQoJCXsKCQkJ Zm9yZWFjaCAoJGN1c3RvbUZpZWxkcyBhcyAkY0ZpZWxkKQoJCQl7CgkJCQlpZiAoaXNzZXQo JGF0dHNbJGNGaWVsZF0pKQoJCQkJewoJCQkJCSRjdXN0b21QYWlyc1skY0ZpZWxkXSA9ICRh dHRzWyRjRmllbGRdOwoJCQkJfQoJCQl9CgoJCQlpZiAoIWVtcHR5KCRjdXN0b21QYWlycykp CgkJCXsKCQkJCSRjdXN0b20gPQkgYnVpbGRDdXN0b21TcWwoJGN1c3RvbUZpZWxkcywgJGN1 c3RvbVBhaXJzKTsKCQkJfQoKCQkJZWxzZQoJCQl7CgkJCQkkY3VzdG9tID0gJyc7CgkJCX0K CQl9CgoJCS8vIEFsbG93IGtleXdvcmRzIGZvciBuby1jdXN0b20gYXJ0aWNsZXMuIFRoYXQg dGFnZ2luZyBtb2RlLCB5b3Uga25vdwoJCWlmICgka2V5d29yZHMpCgkJewoJCQkka2V5cyA9 IGRvU2xhc2goZG9fbGlzdCgka2V5d29yZHMpKTsKCgkJCWZvcmVhY2ggKCRrZXlzIGFzICRr ZXkpCgkJCXsKCQkJCSRrZXlwYXJ0c1tdID0gImZpbmRfaW5fc2V0KCciLiRrZXkuIicsIGEu S2V5d29yZHMpIjsKCQkJfQoKCQkJJGtleXdvcmRzID0gIiBhbmQgKCIgLiBqb2luKCcgb3Ig JywgJGtleXBhcnRzKSAuICIpIjsKCQl9CgoJCWlmICgkcSBhbmQgJHNlYXJjaHN0aWNreSkK CQl7CgkJCSRzdGF0dXNxID0gJyBhbmQgYS5TdGF0dXMgPj0gNCc7CgkJfQoKCQllbHNlaWYg KCRpZCkKCQl7CgkJCSRzdGF0dXNxID0gJyBhbmQgYS5TdGF0dXMgPj0gNCc7CgkJfQoKCQll bHNlCgkJewoJCQkkc3RhdHVzcSA9ICcgYW5kIGEuU3RhdHVzID0gJy5pbnR2YWwoJHN0YXR1 cyk7CgkJfQoKCQkkd2hlcmUgPSAiMSIuICRzdGF0dXNxLiAkdGltZS4gJHNlYXJjaC4gJGlk LiAkY2F0ZWdvcnkuICRzZWN0aW9uLiAkZXhjZXJwdGVkLiAkbW9udGguICRhdXRob3IuICRr ZXl3b3Jkcy4gJGN1c3RvbS4gJGZyb250cGFnZTsKCgkJLy9kbyBub3QgcGFnaW5hdGUgaWYg d2UgYXJlIG9uIGEgY3VzdG9tIGxpc3QKCQlpZiAoISRpc2N1c3RvbSBhbmQgISRpc3N0aWNr eSkKCQl7CgkJCSRncmFuZF90b3RhbCA9IGdldFRoaW5nKCJzZWxlY3QgY291bnQoKikgZnJv bSAiLnNhZmVfcGZ4X2ooJ3RleHRwYXR0ZXJuJykuIiBhcyBhIHdoZXJlICR3aGVyZSIpOwoJ CQkkdG90YWwgPSAkZ3JhbmRfdG90YWwgLSAkb2Zmc2V0OwoJCQkkbnVtUGFnZXMgPSBjZWls KCR0b3RhbCAvICRwYWdlYnkpOwoJCQkkcGcgPSAoISRwZykgPyAxIDogJHBnOwoJCQkkcGdv ZmZzZXQgPSAkb2Zmc2V0ICsgKCgkcGcgLSAxKSAqICRwYWdlYnkpOwoKCQkJLy8gc2VuZCBw YWdpbmcgaW5mbyB0byB0eHA6bmV3ZXIgYW5kIHR4cDpvbGRlcgoJCQkkcGFnZW91dFsncydd CQkJCQkJPSAkczsKCQkJJHBhZ2VvdXRbJ2MnXQkJCQkJCT0gJGM7CgkJCSRwYWdlb3V0Wydw ZyddCQkJCQk9ICRwZzsKCQkJJHBhZ2VvdXRbJ3RvdGFsJ10JCQkJPSAkdG90YWw7CgkJCSRw YWdlb3V0WydncmFuZF90b3RhbCddID0gJGdyYW5kX3RvdGFsOwoJCQkkcGFnZW91dFsnbnVt UGFnZXMnXQkJPSAkbnVtUGFnZXM7CgoJCQlnbG9iYWwgJHRoaXNwYWdlOwoKCQkJaWYgKGVt cHR5KCR0aGlzcGFnZSkpCgkJCXsKCQkJCSR0aGlzcGFnZSA9ICRwYWdlb3V0OwoJCQl9CgoJ CQlpZiAoJHBnb25seSkKCQkJewoJCQkJcmV0dXJuOwoJCQl9CgkJfQoKCQllbHNlCgkJewoJ CQkkcGdvZmZzZXQgPSAkb2Zmc2V0OwoJCX0KCgkJJGpvaW5fdHlwZSA9ICgkd2l0aGZpbGVz KSA/ICdyaWdodCcgOiAnbGVmdCc7CgoJCSRycyA9IHNhZmVfcXVlcnkoInNlbGVjdCBhLios IHVuaXhfdGltZXN0YW1wKGEuUG9zdGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChh LkV4cGlyZXMpIGFzIHVFeHBpcmVzLCB1bml4X3RpbWVzdGFtcChhLkxhc3RNb2QpIGFzIHVM YXN0TW9kCgkJCSRtYXRjaAoJCQlmcm9tICIuc2FmZV9wZngoJ3RleHRwYXR0ZXJuJykuIiBh cyBhICRqb2luX3R5cGUgb3V0ZXIgam9pbiAiLnNhZmVfcGZ4KCd0eHBfZmlsZScpLiIgYXMg ZiBvbihhLiR1cG1fZmlsZV9maWVsZCA9IGYuaWQpCgkJCXdoZXJlICR3aGVyZSBvcmRlciBi eSAiLmRvU2xhc2goJHNvcnQpLiIgbGltaXQgIi5pbnR2YWwoJHBnb2Zmc2V0KS4iLCAiLmlu dHZhbCgkbGltaXQpKTsKCgkJLy8gZ2V0IHRoZSBmb3JtIG5hbWUKCQlpZiAoJHEgYW5kICEk aXNjdXN0b20gYW5kICEkaXNzdGlja3kpCgkJewoJCQkkZm9ybSA9ICgkc2VhcmNoZm9ybSA/ ICRzZWFyY2hmb3JtIDogJ3NlYXJjaF9yZXN1bHRzJyk7CgkJfQoKCQllbHNlCgkJewoJCQkk Zm9ybSA9ICgkbGlzdGZvcm0gPyAkbGlzdGZvcm0gOiAkZm9ybSk7CgkJfQoKCQlpZiAoJHJz KQoJCXsKCQkJJGNvdW50ID0gMDsKCgkJCSRhcnRpY2xlcyA9IGFycmF5KCk7CgoJCQl3aGls ZSAoJGEgPSBuZXh0Um93KCRycykpCgkJCXsKCQkJCSsrJGNvdW50OwoKCQkJCXBvcHVsYXRl QXJ0aWNsZURhdGEoJGEpOwoKCQkJCWdsb2JhbCAkdGhpc2FydGljbGUsICR1UG9zdGVkLCAk bGltaXQ7CgoJCQkJJHRoaXNhcnRpY2xlWydpc19maXJzdCddID0gKCRjb3VudCA9PSAxKTsK CQkJCSR0aGlzYXJ0aWNsZVsnaXNfbGFzdCddID0gKCRjb3VudCA9PSBudW1Sb3dzKCRycykp OwoKCQkJCWlmIChAY29uc3RhbnQoJ3R4cGludGVyZmFjZScpID09PSAnYWRtaW4nIGFuZCBn cHMoJ0Zvcm0nKSkKCQkJCXsKCQkJCQkkYXJ0aWNsZXNbXSA9IHBhcnNlKGdwcygnRm9ybScp KTsKCQkJCX0KCgkJCQllbHNlaWYgKCRhbGxvd292ZXJyaWRlIGFuZCAkYVsnb3ZlcnJpZGVf Zm9ybSddKQoJCQkJewoJCQkJCSRhcnRpY2xlc1tdID0gcGFyc2UoZmV0Y2hfZm9ybSgkYVsn b3ZlcnJpZGVfZm9ybSddKSk7CgkJCQl9CgoJCQkJZWxzZQoJCQkJewoJCQkJCSRhcnRpY2xl c1tdID0gKCR0aGluZykgPyBwYXJzZSgkdGhpbmcpIDogcGFyc2UoZmV0Y2hfZm9ybSgkZm9y bSkpOwoJCQkJfQoKCQkJCS8vIHNlbmRpbmcgdGhlc2UgdG8gcGFnaW5nX2xpbmsoKTsgUmVx dWlyZWQ/CgkJCQkkdVBvc3RlZCA9ICRhWyd1UG9zdGVkJ107CgoJCQkJdW5zZXQoJEdMT0JB TFNbJ3RoaXNhcnRpY2xlJ10pOwoJCQl9CgoJCQlyZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRs YWJlbHRhZykuZG9XcmFwKCRhcnRpY2xlcywgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzKTsK CQl9Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ZpbGVfZmlsdGVyRnJvbnRQYWdl KCkKCXsKCQlzdGF0aWMgJGZpbHRlckZyb250UGFnZTsKCgkJaWYgKGlzc2V0KCRmaWx0ZXJG cm9udFBhZ2UpKQoJCXsKCQkJcmV0dXJuICRmaWx0ZXJGcm9udFBhZ2U7CgkJfQoKCQkkcnMg PSBzYWZlX2NvbHVtbignbmFtZScsICd0eHBfc2VjdGlvbicsICJvbl9mcm9udHBhZ2UgIT0g JzEnIik7CgoJCWlmICgkcnMpCgkJewoJCQlmb3JlYWNoICgkcnMgYXMgJG5hbWUpCgkJCXsK CQkJCSRmaWx0ZXJzW10gPSAiIGFuZCBhLlNlY3Rpb24gIT0gJyIuZG9TbGFzaCgkbmFtZSku IiciOwoJCQl9CgoJCQkkZmlsdGVyRnJvbnRQYWdlID0gam9pbignICcsICRmaWx0ZXJzKTsK CQl9CgoJCWVsc2UKCQl7CgkJCSRmaWx0ZXJGcm9udFBhZ2UgPSBmYWxzZTsKCQl9CgoJCXJl dHVybiAkZmlsdGVyRnJvbnRQYWdlOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9m aWxlX2ZpbHRlclNlYXJjaCgpCgl7CgkJJHJzID0gc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhw X3NlY3Rpb24nLCAic2VhcmNoYWJsZSAhPSAnMSciKTsKCgkJaWYgKCRycykKCQl7CgkJCWZv cmVhY2ggKCRycyBhcyAkbmFtZSkKCQkJewoJCQkJJGZpbHRlcnNbXSA9ICIgYW5kIGEuU2Vj dGlvbiAhPSAnIi5kb1NsYXNoKCRuYW1lKS4iJyI7CgkJCX0KCgkJCXJldHVybiBqb2luKCcg JywgJGZpbHRlcnMpOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1 bmN0aW9uIHVwbV9maWxlX2FydGljbGVfY3VzdG9tKCRhdHRzID0gYXJyYXkoKSwgJHRoaW5n ID0gJycpCgl7CgkJcmV0dXJuIHVwbV9maWxlX3BhcnNlQXJ0aWNsZXMoJGF0dHMsIDEsICR0 aGluZyk7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ZpbGVfcGFyc2VBcnRpY2xl cygkYXR0cywgJGlzY3VzdG9tID0gJycsICR0aGluZyA9ICcnKQoJewoJCWdsb2JhbCAkcHJl dGV4dCwgJGlzX2FydGljbGVfbGlzdDsKCgkJJG9sZF9pYWwgPSAkaXNfYXJ0aWNsZV9saXN0 OwoKCQkkaXNfYXJ0aWNsZV9saXN0ID0gKCRwcmV0ZXh0WydpZCddICYmICEkaXNjdXN0b20p ID8gZmFsc2UgOiB0cnVlOwoKCQlhcnRpY2xlX3B1c2goKTsKCgkJJHIgPSAoJGlzX2FydGlj bGVfbGlzdCkgPyB1cG1fZmlsZV9kb0FydGljbGVzKCRhdHRzLCAkaXNjdXN0b20sICR0aGlu ZykgOiBkb0FydGljbGUoJGF0dHMsICR0aGluZyk7CgoJCWFydGljbGVfcG9wKCk7CgoJCSRp c19hcnRpY2xlX2xpc3QgPSAkb2xkX2lhbDsKCgkJcmV0dXJuICRyOwoJfQoKCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KCglmdW5jdGlvbiB1cG1fZmlsZV9wcmVmcygkZXZlbnQsICRzdGVwKQoJewoJCWdsb2Jh bCAkcHJlZnM7CgoJCWlmICgkc3RlcCA9PSAndXBkYXRlJykKCQl7CgkJCSRmaWVsZCA9IGRv U2xhc2goc3RyaXBfdGFncyhwcygnZmllbGQnKSkpOwoKCQkJc2FmZV91cGRhdGUoJ3R4cF9w cmVmcycsICJ2YWwgPSAnJGZpZWxkJyIsICJuYW1lID0gJ3VwbV9maWxlX2ZpZWxkJyIpOwoJ CX0KCgkJZXh0cmFjdChnZXRfcHJlZnMoKSk7CgoJCXBhZ2V0b3AoJ3VwbV9maWxlJy5zcC5n VHh0KCdwcmVmcycpLCAoJHN0ZXAgPT0gJ3VwZGF0ZScgPyBnVHh0KCdwcmVmZXJlbmNlc19z YXZlZCcpIDogJycpKTsKCgkJJGZpZWxkcyA9IGFycmF5KCk7CgoJCSRtYXggPSBnZXRfcHJl ZignbWF4X2N1c3RvbV9maWVsZHMnLCAxMCk7CgoKCQlmb3IoJGkgPSAxOyAkaSA8PSAkbWF4 OyAkaSsrKQoJCXsKCQkJJGZpZWxkX25hbWUgPSAiY3VzdG9tX3skaX1fc2V0IjsKCQkJJGZp ZWxkX3RpdGxlID0gJHByZWZzWyRmaWVsZF9uYW1lXTsKCgkJCWlmICghZW1wdHkoJHByZWZz WyJjdXN0b21feyRpfV9zZXQiXSkpCgkJCXsKCQkJCSRvcHRpb25zWyAiY3VzdG9tX3skaX0i IF0gPSAkcHJlZnNbImN1c3RvbV97JGl9X3NldCJdOwoJCQl9CgkJfQoKCQkkb3B0aW9uX2xp c3QgPSBhcnJheSgpOwoKCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAka2V5ID0+ICR2YWx1ZSkK CQl7CgkJCWlmICgka2V5ID09ICR1cG1fZmlsZV9maWVsZCkKCQkJewoJCQkJJG9wdGlvbl9s aXN0W10gPSBuLnQuJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiBzZWxlY3RlZD0ic2VsZWN0 ZWQiPicuJHZhbHVlLic8L29wdGlvbj4nOwoJCQl9CgoJCQllbHNlaWYgKCFlbXB0eSgkdmFs dWUpKQoJCQl7CgkJCQkkb3B0aW9uX2xpc3RbXSA9IG4udC4nPG9wdGlvbiB2YWx1ZT0iJy4k a2V5LiciPicuJHZhbHVlLic8L29wdGlvbj4nOwoJCQl9CgkJfQoKCQllY2hvIG4uJzxkaXYg c3R5bGU9Im1hcmdpbjogM2VtIGF1dG8gYXV0byBhdXRvOyB3aWR0aDogMTZlbTsiPicuCgkJ bi5oZWQoJ3VwbV9maWxlJy5zcC5nVHh0KCdwcmVmcycpLCcxJykuCgkJbi5uLmZvcm0oCgkJ CW4uZUlucHV0KCd1cG1fZmlsZV9wcmVmcycpLgoJCQluLnNJbnB1dCgndXBkYXRlJykuCgkJ CW4udXBtX2ZpbGVfZ1R4dCgnY3VzdG9tX2ZpZWxkJykuYnIubi4nPHNlbGVjdCBuYW1lPSJm aWVsZCIgY2xhc3M9Imxpc3QiPicuam9pbihuLCAkb3B0aW9uX2xpc3QpLic8L3NlbGVjdD4n LgoJCQlici5ici4KCQkJbi5mSW5wdXQoJ3N1Ym1pdCcsICd1cGRhdGUnLCAnVXBkYXRlJywg J3NtYWxsZXJib3gnKQoJCSkubi4nPC9kaXY+JzsKCgl9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rp b24gdXBtX2ZpbGVfaW5zdGFsbCgpCgl7CgkJZ2xvYmFsICRwcmVmczsKCgkJJGZpZWxkID0g J2N1c3RvbV8xJzsKCgkJLy8gZm9yIHVwZ3JhZGVycwoJCWlmIChpc3NldCgkcHJlZnNbJ3Vw bV9maWxlX3BhY2tldHNfZmllbGQnXSkpCgkJewoJCQkkZmllbGQgPSAkcHJlZnNbJ3VwbV9m aWxlX3BhY2tldHNfZmllbGQnXTsKCgkJCXNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCAibmFt ZSA9ICd1cG1fZmlsZV9wYWNrZXRzX2ZpZWxkJyBsaW1pdCAxIik7CgkJfQoKCQlpZiAoIWlz c2V0KCRwcmVmc1sndXBtX2ZpbGVfZmllbGQnXSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhw X3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1fZmlsZV9maWVsZCcsCgkJCQl2YWwgPSAnJGZp ZWxkJywKCQkJCWh0bWwgPSAndGV4dF9pbnB1dCcsCgkJCQlwcmVmc19pZCA9IDEsCgkJCQl0 eXBlID0gMiwKCQkJCWV2ZW50ID0gJ2FkbWluJywKCQkJCXBvc2l0aW9uID0gMAoJCQkiKTsK CQl9Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ZpbGVfZ1R4dCgkdmFyLCAkYXR0 cyA9IGFycmF5KCkpCgl7CgkJJGxhbmcgPSBhcnJheSgKCQkJJ2N1c3RvbV9maWVsZCcgPT4g J0ZpbGUgQ3VzdG9tIEZpZWxkJywKCQkpOwoKCQlyZXR1cm4gc3RydHIoJGxhbmdbJHZhcl0s ICRhdHRzKTsKCX0iO3M6NDoiaGVscCI7czo1MjY5OiI8c3R5bGUgdHlwZT0idGV4dC9jc3Mi IG1lZGlhPSJzY3JlZW4scHJvamVjdGlvbiI+CjwhLS0KdmFyIHsKcGFkZGluZzogMC4xZW07 CmZvbnQtc3R5bGU6IG5vcm1hbDsKZm9udC13ZWlnaHQ6IGJvbGQ7CmZvbnQtZmFtaWx5OiBt b25vc3BhY2U7CmJhY2tncm91bmQtY29sb3I6ICNlZWU7Cn0KCnRhYmxlLnVwbV90YWdfYXR0 cyB7Cm1hcmdpbjogMCAwIDE1cHggMDsKYm9yZGVyOiAxcHggc29saWQgI2VlZTsKYm9yZGVy LWNvbGxhcHNlOiBjb2xsYXBzZTsKfQoKdGFibGUudXBtX3RhZ19hdHRzIGNhcHRpb24gewpw YWRkaW5nOiAwLjVlbTsKZm9udC13ZWlnaHQ6IGJvbGQ7CnRleHQtYWxpZ246IGxlZnQ7CmJh Y2tncm91bmQtY29sb3I6ICNkZGQ7Cn0KCnRhYmxlLnVwbV90YWdfYXR0cyB0ciB7CmJvcmRl ci1ib3R0b206IDFweCBzb2xpZCAjZWVlOwp9Cgp0YWJsZS51cG1fdGFnX2F0dHMgdGgsIHRh YmxlLnVwbV90YWdfYXR0cyB0ZCB7Cm1hcmdpbjogMDsKcGFkZGluZzogMC41ZW0gMWVtOwp9 Cgp0YWJsZS51cG1fdGFnX2F0dHMgdGggewpmb250LXdlaWdodDogbm9ybWFsOwp0ZXh0LWFs aWduOiBsZWZ0OwpiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwp9CgotLT4KPC9zdHlsZT4KCjxo MT51cG1fZmlsZTwvaDE+Cgo8b2wgaWQ9InN0YXJ0Ij4KCTxsaT48YSBocmVmPSIjaW50cm9k dWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KCTxsaT48YSBocmVmPSIjdGFncyI+VGFn czwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiNmb290bm90ZXMiPkZvb3Rub3RlczwvYT48L2xp Pgo8L29sPgoKCgo8aDIgaWQ9ImludHJvIj5JbnRyb2R1Y3Rpb248L2gyPgoKPHA+VGhpcyBw bHVnaW4gYWxsb3dzIHlvdSB0byBhc3NvY2lhdGUgc2luZ2xlIG9yIG11bHRpcGxlIGZpbGVz IHdpdGggYW4gYXJ0aWNsZS4gSXQgcmVxdWlyZXMKCXlvdSB0byB1c2Ugb25lIG9mIHlvdXIg Y3VzdG9tIGZpZWxkcyB0byBob2xkIHRoZSBmaWxlIGxpc3QuIFRoZSBmaWVsZCYjODIxNztz IGh1bWFuLWZyaWVuZGx5CgluYW1lIG1heSBiZSBhbnl0aGluZyB5b3Ugd2lzaC4gQWxsIHRo YXQgeW91IG5lZWQgdG8gZG8gaXMgcGljayBvbmUgdG8gYmUgdXNlZCwgdGhlbiB1cGRhdGUK CXRoZSBwbHVnaW4mIzgyMTc7cyBwcmVmZXJlbmNlIHRvIHBvaW50IHRvIGl0LjwvcD4KCjxo MiBpZD0idGFncyI+VGFnczwvaDI+Cgo8dGFibGUgY2xhc3M9InVwbV90YWdfYXR0cyIgY2Vs bHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KCgk8Y2FwdGlvbj51cG1fYXJ0aWNsZV9m aWxlX2xpc3Q8L2NhcHRpb24+CgoJPHRyPgoJCTx0aD5BdHRyaWJ1dGU8L3RoPgoJCTx0aD5E ZXNjcmlwdGlvbjwvdGg+CgkJPHRoPlJlcXVpcmVkPzwvdGg+CgkJPHRoPkF2YWlsYWJsZSBW YWx1ZXM8L3RoPgoJCTx0aD5EZWZhdWx0IFZhbHVlPC90aD4KCTwvdHI+CgoJPHRyPgoJCTx0 ZD5icmVhazwvdGQ+CgkJPHRkPihYKUhUTUwgdGFnIHRvIGJlIHVzZWQgZm9yIGxpbmUgYnJl YWtzLjwvdGQ+CgkJPHRkPk5vPC90ZD4KCQk8dGQ+QW55IHZhbGlkIChYKUhUTUwgZWxlbWVu dCBuYW1lLjwvdGQ+CgkJPHRkPjx2YXI+YnI8L3Zhcj48L3RkPgoJPC90cj4KCgk8dHI+CgkJ PHRkPmNsYXNzPC90ZD4KCQk8dGQ+KFgpSFRNTC9DU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhl IGZpbGUgb3IgaWYgc3BlY2lmaWVkLCB0aGUgPHZhcj53cmFwdGFnPC92YXI+LjwvdGQ+CgkJ PHRkPk5vPC90ZD4KCQk8dGQ+QW55IHZhbGlkIChYKUhUTUwvQ1NTIGNsYXNzIG5hbWUuPC90 ZD4KCQk8dGQ+VW5zZXQ8L3RkPgoJPC90cj4KCgk8dHI+CgkJPHRkPmlkPC90ZD4KCQk8dGQ+ UmVzdHJpY3QgdG8gZmlsZXMgZm9yIHNwZWNpZmljIGFydGljbGUuPC90ZD4KCQk8dGQ+Tm88 L3RkPgoJCTx0ZD5BbnkgdmFsaWQgYXJ0aWNsZSBJRCBudW1iZXIuPC90ZD4KCQk8dGQ+VW5z ZXQuIFRoZSBjdXJyZW50IGFydGljbGUgaXMgdXNlZC48L3RkPgoJPC90cj4KCgk8dHI+CgkJ PHRkPmZpbGVfY2F0ZWdvcnk8L3RkPgoJCTx0ZD5SZXN0cmljdCB0byBmaWxlcyB3aXRoIHNw ZWNpZmllZCBjYXRlZ29yeS48L3RkPgoJCTx0ZD5ObzwvdGQ+CgkJPHRkPkFueSB2YWxpZCBm aWxlIGNhdGVnb3J5IG5hbWUuPC90ZD4KCQk8dGQ+VW5zZXQ8L3RkPgoJPC90cj4KCgk8dHI+ CgkJPHRkPmZvcm08L3RkPgoJCTx0ZD5DdXN0b21pemUgdGhlIGZpbGUgZGV0YWlscyBvdXRw dXQuPC90ZD4KCQk8dGQ+Tm88L3RkPgoJCTx0ZD5BbnkgdmFsaWQgZm9ybSBvZiB0aGUgdHlw ZSAmIzgyMjA7ZmlsZSYjODIyMTsuPC90ZD4KCQk8dGQ+PHZhcj5maWxlczwvdmFyPjwvdGQ+ Cgk8L3RyPgoKCTx0cj4KCQk8dGQ+bGFiZWw8L3RkPgoJCTx0ZD5MYWJlbCBmb3IgdGhlIHRv cCBvZiB0aGUgbGlzdC48L3RkPgoJCTx0ZD5ObzwvdGQ+CgkJPHRkPkFueSBkZXNpcmVkIHRl eHQuPC90ZD4KCQk8dGQ+VW5zZXQ8L3RkPgoJPC90cj4KCgk8dHI+CgkJPHRkPmxhYmVsdGFn PC90ZD4KCQk8dGQ+KFgpSFRNTCB0YWcgdG8gd3JhcCBhcm91bmQgdGhlIGxhYmVsLjwvdGQ+ CgkJPHRkPk5vPC90ZD4KCQk8dGQ+QW55IHZhbGlkIChYKUhUTUwgZWxlbWVudCBuYW1lPC90 ZD4KCQk8dGQ+VW5zZXQ8L3RkPgoJPC90cj4KCgk8dHI+CgkJPHRkPmxpbWl0PC90ZD4KCQk8 dGQ+TWF4aW11bSBudW1iZXIgb2YgZmlsZXMgdG8gZGlzcGxheS48L3RkPgoJCTx0ZD5Obzwv dGQ+CgkJPHRkPkFueSB2YWxpZCB3aG9sZSBudW1iZXIuPC90ZD4KCQk8dGQ+VW5zZXQgKGRp c3BsYXkgYWxsKTwvdGQ+Cgk8L3RyPgoKCTx0cj4KCQk8dGQ+b2Zmc2V0PC90ZD4KCQk8dGQ+ RnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LCB0aGUgbnVtYmVyIG9mIGZpbGVzIHRv IGV4Y2x1ZGUgZnJvbSB0aGUgbGlzdC48L3RkPgoJCTx0ZD5ObzwvdGQ+CgkJPHRkPkFueSB2 YWxpZCB3aG9sZSBudW1iZXIuPC90ZD4KCQk8dGQ+VW5zZXQgKGRpc3BsYXkgYWxsKTwvdGQ+ Cgk8L3RyPgoKCTx0cj4KCQk8dGQ+c29ydDwvdGQ+CgkJPHRkPkhvdyB0byBzb3J0IHJldHJp ZXZlZCBmaWxlcyAoY29tbWEtc2VwYXJhdGVkKS48L3RkPgoJCTx0ZD5ObzwvdGQ+CgkJPHRk PgoJCQk8dWw+CgkJCQk8bGk+PHZhcj5jYXRlZ29yeTwvdmFyPjwvbGk+CgkJCQk8bGk+PHZh cj5kZXNjcmlwdGlvbjwvdmFyPjwvbGk+CgkJCQk8bGk+PHZhcj5kb3dubG9hZHM8L3Zhcj48 L2xpPgoJCQkJPGxpPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L2xpPgoJCQkJPGxpPjx2YXI+aWQ8 L3Zhcj48L2xpPgoJCQk8L3VsPgoJCQk8cD48dmFyPmFzYzwvdmFyPmVuZGluZyBvciA8dmFy PmRlc2M8L3Zhcj5lbmRpbmc8L3A+CgkJPC90ZD4KCQk8dGQ+U29ydHMgYnkgdGhlIG9yZGVy IGVudGVyZWQgaW50byBhcnRpY2xlIGZpbGUgcGFja2V0cyBmaWVsZC48L3RkPgoJPC90cj4K Cgk8dHI+CgkJPHRkPndyYXB0YWc8L3RkPgoJCTx0ZD4oWClIVE1MIHRhZyB0byB3cmFwIGFy b3VuZCB0aGUgZmlsZSAob3IgdGhlIGxpc3QsIGlmIHVzaW5nIG11bHRpcGxlIGZpbGVzKS48 L3RkPgoJCTx0ZD5ObzwvdGQ+CgkJPHRkPkFueSB2YWxpZCAoWClIVE1MIGVsZW1lbnQgbmFt ZS48L3RkPgoJCTx0ZD5VbnNldDwvdGQ+Cgk8L3RyPgo8L3RhYmxlPgoKPHA+VGhlIGZvbGxv d2luZyBhdHRyaWJ1dGVzIGFyZSBpZGVudGljYWwgdG8gdGhvc2UgYmVsb25naW5nIHRvIHRo ZSBidWlsdC1pbiB0YWdzPHN1cD5bPGEgaHJlZj0iI2ZuMSI+MTwvYT5dPC9zdXA+LCB3aXRo IG9uZSBhZGRpdGlvbiBhbmQgb25lIHNsaWdodGx5IG1vZGlmaWVkOjwvcD4KCjx0YWJsZSBj bGFzcz0idXBtX3RhZ19hdHRzIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgoK CTxjYXB0aW9uPnVwbV9maWxlX2FydGljbGUgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBu b3JtYWw7Ij5hbmQ8L3NwYW4+IHVwbV9maWxlX2FydGljbGVfY3VzdG9tPC9jYXB0aW9uPgoK CTx0cj4KCQk8dGg+QXR0cmlidXRlPC90aD4KCQk8dGg+RGVzY3JpcHRpb248L3RoPgoJCTx0 aD5SZXF1aXJlZD88L3RoPgoJCTx0aD5BdmFpbGFibGUgVmFsdWVzPC90aD4KCQk8dGg+RGVm YXVsdCBWYWx1ZTwvdGg+Cgk8L3RyPgoKCTx0cj4KCQk8dGQ+aW5jbHVkZV9leHBpcmVkPC90 ZD4KCQk8dGQ+V2hldGhlciB0byBpbmNsdWRlIGV4cGlyZWQgYXJ0aWNsZXMgaW4gdGhlIGxp c3QuPC90ZD4KCQk8dGQ+Tm88L3RkPgoJCTx0ZD48dmFyPnllczwvdmFyPiBvciA8dmFyPm5v PC92YXI+PC90ZD4KCQk8dGQ+QWRtaW4gcHJlZmVyZW5jZSAiUHVibGlzaCBleHBpcmVkIGFy dGljbGVzPyI8L3RkPgoJPC90cj4KCgk8dHI+CgkJPHRkPnNvcnQ8L3RkPgoJCTx0ZD5Ib3cg dG8gc29ydCByZXRyaWV2ZWQgZmlsZXMgKGNvbW1hLXNlcGFyYXRlZCkuPC90ZD4KCQk8dGQ+ Tm88L3RkPgoJCTx0ZD5Bbnkgc29ydCB2YWx1ZSBhdmFpbGFibGUgZm9yIGFydGljbGU8c3Vw Pls8YSBocmVmPSIjZm4xIj4xPC9hPl08L3N1cD4gYW5kIGZpbGVfZG93bmxvYWRfbGlzdDxz dXA+WzxhIGhyZWY9IiNmbjIiPjI8L2E+XTwvc3VwPjwvdGQ+CgkJPHRkPjx2YXI+ZG93bmxv YWRzIGRlc2MsIFBvc3RlZCBkZXNjPC92YXI+PC90ZD4KCTwvdHI+CgoJPHRyPgoJCTx0ZD53 aXRoZmlsZXM8L3RkPgoJCTx0ZD5Pbmx5IHJldHVybiBhcnRpY2xlcyB3aXRoIG9uZSBvciBt b3JlIGFzc29jaWF0ZWQgZmlsZXMuPC90ZD4KCQk8dGQ+Tm88L3RkPgoJCTx0ZD48dmFyPjE8 L3Zhcj4gKHllcykgb3IgPHZhcj4wPC92YXI+IChubyk8L3RkPgoJCTx0ZD48dmFyPjA8L3Zh cj48L3RkPgoJPC90cj4KCjwvdGFibGU+Cgo8cD48YSBocmVmPSIjc3RhcnQiIHRpdGxlPSJK dW1wIGJhY2sgY29udGVudHMgbGlzdCI+JiM4NjE3OzwvYT48L3A+CgoKCjxoMiBpZD0iZm9v dG5vdGVzIj5Gb290bm90ZXM8L2gyPgoKPG9sPgoJPGxpIGlkPSJmbjEiPlRleHRCb29rOiA8 YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPVR4 cDphcnRpY2xlXy8iPmFydGljbGU8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRl cm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPVR4cDphcnRpY2xlX2N1c3RvbV8vIj5hcnRp Y2xlX2N1c3RvbTwvYT48L2xpPgoJPGxpIGlkPSJmbjIiPlRleHRCb29rOiA8YSBocmVmPSJo dHRwOi8vdGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPVR4cDpmaWxlX2Rv d25sb2FkX2xpc3RfLyI+ZmlsZV9kb3dubG9hZF9saXN0PC9hPjwvbGk+Cjwvb2w+Cgo8cD48 YSBocmVmPSIjc3RhcnQiIHRpdGxlPSJKdW1wIGJhY2sgY29udGVudHMgbGlzdCI+JiM4NjE3 OzwvYT48L3A+IjtzOjg6ImhlbHBfcmF3IjtzOjUyNjk6IjxzdHlsZSB0eXBlPSJ0ZXh0L2Nz cyIgbWVkaWE9InNjcmVlbixwcm9qZWN0aW9uIj4KPCEtLQp2YXIgewpwYWRkaW5nOiAwLjFl bTsKZm9udC1zdHlsZTogbm9ybWFsOwpmb250LXdlaWdodDogYm9sZDsKZm9udC1mYW1pbHk6 IG1vbm9zcGFjZTsKYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKfQoKdGFibGUudXBtX3RhZ19h dHRzIHsKbWFyZ2luOiAwIDAgMTVweCAwOwpib3JkZXI6IDFweCBzb2xpZCAjZWVlOwpib3Jk ZXItY29sbGFwc2U6IGNvbGxhcHNlOwp9Cgp0YWJsZS51cG1fdGFnX2F0dHMgY2FwdGlvbiB7 CnBhZGRpbmc6IDAuNWVtOwpmb250LXdlaWdodDogYm9sZDsKdGV4dC1hbGlnbjogbGVmdDsK YmFja2dyb3VuZC1jb2xvcjogI2RkZDsKfQoKdGFibGUudXBtX3RhZ19hdHRzIHRyIHsKYm9y ZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7Cn0KCnRhYmxlLnVwbV90YWdfYXR0cyB0aCwg dGFibGUudXBtX3RhZ19hdHRzIHRkIHsKbWFyZ2luOiAwOwpwYWRkaW5nOiAwLjVlbSAxZW07 Cn0KCnRhYmxlLnVwbV90YWdfYXR0cyB0aCB7CmZvbnQtd2VpZ2h0OiBub3JtYWw7CnRleHQt YWxpZ246IGxlZnQ7CmJhY2tncm91bmQtY29sb3I6ICNlZWU7Cn0KCi0tPgo8L3N0eWxlPgoK PGgxPnVwbV9maWxlPC9oMT4KCjxvbCBpZD0ic3RhcnQiPgoJPGxpPjxhIGhyZWY9IiNpbnRy b2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiN0YWdzIj5U YWdzPC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI2Zvb3Rub3RlcyI+Rm9vdG5vdGVzPC9hPjwv bGk+Cjwvb2w+CgoKCjxoMiBpZD0iaW50cm8iPkludHJvZHVjdGlvbjwvaDI+Cgo8cD5UaGlz IHBsdWdpbiBhbGxvd3MgeW91IHRvIGFzc29jaWF0ZSBzaW5nbGUgb3IgbXVsdGlwbGUgZmls ZXMgd2l0aCBhbiBhcnRpY2xlLiBJdCByZXF1aXJlcwoJeW91IHRvIHVzZSBvbmUgb2YgeW91 ciBjdXN0b20gZmllbGRzIHRvIGhvbGQgdGhlIGZpbGUgbGlzdC4gVGhlIGZpZWxkJiM4MjE3 O3MgaHVtYW4tZnJpZW5kbHkKCW5hbWUgbWF5IGJlIGFueXRoaW5nIHlvdSB3aXNoLiBBbGwg dGhhdCB5b3UgbmVlZCB0byBkbyBpcyBwaWNrIG9uZSB0byBiZSB1c2VkLCB0aGVuIHVwZGF0 ZQoJdGhlIHBsdWdpbiYjODIxNztzIHByZWZlcmVuY2UgdG8gcG9pbnQgdG8gaXQuPC9wPgoK PGgyIGlkPSJ0YWdzIj5UYWdzPC9oMj4KCjx0YWJsZSBjbGFzcz0idXBtX3RhZ19hdHRzIiBj ZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgoKCTxjYXB0aW9uPnVwbV9hcnRpY2xl X2ZpbGVfbGlzdDwvY2FwdGlvbj4KCgk8dHI+CgkJPHRoPkF0dHJpYnV0ZTwvdGg+CgkJPHRo PkRlc2NyaXB0aW9uPC90aD4KCQk8dGg+UmVxdWlyZWQ/PC90aD4KCQk8dGg+QXZhaWxhYmxl IFZhbHVlczwvdGg+CgkJPHRoPkRlZmF1bHQgVmFsdWU8L3RoPgoJPC90cj4KCgk8dHI+CgkJ PHRkPmJyZWFrPC90ZD4KCQk8dGQ+KFgpSFRNTCB0YWcgdG8gYmUgdXNlZCBmb3IgbGluZSBi cmVha3MuPC90ZD4KCQk8dGQ+Tm88L3RkPgoJCTx0ZD5BbnkgdmFsaWQgKFgpSFRNTCBlbGVt ZW50IG5hbWUuPC90ZD4KCQk8dGQ+PHZhcj5icjwvdmFyPjwvdGQ+Cgk8L3RyPgoKCTx0cj4K CQk8dGQ+Y2xhc3M8L3RkPgoJCTx0ZD4oWClIVE1ML0NTUyBjbGFzcyB0byBhcHBseSB0byB0 aGUgZmlsZSBvciBpZiBzcGVjaWZpZWQsIHRoZSA8dmFyPndyYXB0YWc8L3Zhcj4uPC90ZD4K CQk8dGQ+Tm88L3RkPgoJCTx0ZD5BbnkgdmFsaWQgKFgpSFRNTC9DU1MgY2xhc3MgbmFtZS48 L3RkPgoJCTx0ZD5VbnNldDwvdGQ+Cgk8L3RyPgoKCTx0cj4KCQk8dGQ+aWQ8L3RkPgoJCTx0 ZD5SZXN0cmljdCB0byBmaWxlcyBmb3Igc3BlY2lmaWMgYXJ0aWNsZS48L3RkPgoJCTx0ZD5O bzwvdGQ+CgkJPHRkPkFueSB2YWxpZCBhcnRpY2xlIElEIG51bWJlci48L3RkPgoJCTx0ZD5V bnNldC4gVGhlIGN1cnJlbnQgYXJ0aWNsZSBpcyB1c2VkLjwvdGQ+Cgk8L3RyPgoKCTx0cj4K CQk8dGQ+ZmlsZV9jYXRlZ29yeTwvdGQ+CgkJPHRkPlJlc3RyaWN0IHRvIGZpbGVzIHdpdGgg c3BlY2lmaWVkIGNhdGVnb3J5LjwvdGQ+CgkJPHRkPk5vPC90ZD4KCQk8dGQ+QW55IHZhbGlk IGZpbGUgY2F0ZWdvcnkgbmFtZS48L3RkPgoJCTx0ZD5VbnNldDwvdGQ+Cgk8L3RyPgoKCTx0 cj4KCQk8dGQ+Zm9ybTwvdGQ+CgkJPHRkPkN1c3RvbWl6ZSB0aGUgZmlsZSBkZXRhaWxzIG91 dHB1dC48L3RkPgoJCTx0ZD5ObzwvdGQ+CgkJPHRkPkFueSB2YWxpZCBmb3JtIG9mIHRoZSB0 eXBlICYjODIyMDtmaWxlJiM4MjIxOy48L3RkPgoJCTx0ZD48dmFyPmZpbGVzPC92YXI+PC90 ZD4KCTwvdHI+CgoJPHRyPgoJCTx0ZD5sYWJlbDwvdGQ+CgkJPHRkPkxhYmVsIGZvciB0aGUg dG9wIG9mIHRoZSBsaXN0LjwvdGQ+CgkJPHRkPk5vPC90ZD4KCQk8dGQ+QW55IGRlc2lyZWQg dGV4dC48L3RkPgoJCTx0ZD5VbnNldDwvdGQ+Cgk8L3RyPgoKCTx0cj4KCQk8dGQ+bGFiZWx0 YWc8L3RkPgoJCTx0ZD4oWClIVE1MIHRhZyB0byB3cmFwIGFyb3VuZCB0aGUgbGFiZWwuPC90 ZD4KCQk8dGQ+Tm88L3RkPgoJCTx0ZD5BbnkgdmFsaWQgKFgpSFRNTCBlbGVtZW50IG5hbWU8 L3RkPgoJCTx0ZD5VbnNldDwvdGQ+Cgk8L3RyPgoKCTx0cj4KCQk8dGQ+bGltaXQ8L3RkPgoJ CTx0ZD5NYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0byBkaXNwbGF5LjwvdGQ+CgkJPHRkPk5v PC90ZD4KCQk8dGQ+QW55IHZhbGlkIHdob2xlIG51bWJlci48L3RkPgoJCTx0ZD5VbnNldCAo ZGlzcGxheSBhbGwpPC90ZD4KCTwvdHI+CgoJPHRyPgoJCTx0ZD5vZmZzZXQ8L3RkPgoJCTx0 ZD5Gcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QsIHRoZSBudW1iZXIgb2YgZmlsZXMg dG8gZXhjbHVkZSBmcm9tIHRoZSBsaXN0LjwvdGQ+CgkJPHRkPk5vPC90ZD4KCQk8dGQ+QW55 IHZhbGlkIHdob2xlIG51bWJlci48L3RkPgoJCTx0ZD5VbnNldCAoZGlzcGxheSBhbGwpPC90 ZD4KCTwvdHI+CgoJPHRyPgoJCTx0ZD5zb3J0PC90ZD4KCQk8dGQ+SG93IHRvIHNvcnQgcmV0 cmlldmVkIGZpbGVzIChjb21tYS1zZXBhcmF0ZWQpLjwvdGQ+CgkJPHRkPk5vPC90ZD4KCQk8 dGQ+CgkJCTx1bD4KCQkJCTxsaT48dmFyPmNhdGVnb3J5PC92YXI+PC9saT4KCQkJCTxsaT48 dmFyPmRlc2NyaXB0aW9uPC92YXI+PC9saT4KCQkJCTxsaT48dmFyPmRvd25sb2FkczwvdmFy PjwvbGk+CgkJCQk8bGk+PHZhcj5maWxlbmFtZTwvdmFyPjwvbGk+CgkJCQk8bGk+PHZhcj5p ZDwvdmFyPjwvbGk+CgkJCTwvdWw+CgkJCTxwPjx2YXI+YXNjPC92YXI+ZW5kaW5nIG9yIDx2 YXI+ZGVzYzwvdmFyPmVuZGluZzwvcD4KCQk8L3RkPgoJCTx0ZD5Tb3J0cyBieSB0aGUgb3Jk ZXIgZW50ZXJlZCBpbnRvIGFydGljbGUgZmlsZSBwYWNrZXRzIGZpZWxkLjwvdGQ+Cgk8L3Ry PgoKCTx0cj4KCQk8dGQ+d3JhcHRhZzwvdGQ+CgkJPHRkPihYKUhUTUwgdGFnIHRvIHdyYXAg YXJvdW5kIHRoZSBmaWxlIChvciB0aGUgbGlzdCwgaWYgdXNpbmcgbXVsdGlwbGUgZmlsZXMp LjwvdGQ+CgkJPHRkPk5vPC90ZD4KCQk8dGQ+QW55IHZhbGlkIChYKUhUTUwgZWxlbWVudCBu YW1lLjwvdGQ+CgkJPHRkPlVuc2V0PC90ZD4KCTwvdHI+CjwvdGFibGU+Cgo8cD5UaGUgZm9s bG93aW5nIGF0dHJpYnV0ZXMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBiZWxvbmdpbmcgdG8g dGhlIGJ1aWx0LWluIHRhZ3M8c3VwPls8YSBocmVmPSIjZm4xIj4xPC9hPl08L3N1cD4sIHdp dGggb25lIGFkZGl0aW9uIGFuZCBvbmUgc2xpZ2h0bHkgbW9kaWZpZWQ6PC9wPgoKPHRhYmxl IGNsYXNzPSJ1cG1fdGFnX2F0dHMiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+ CgoJPGNhcHRpb24+dXBtX2ZpbGVfYXJ0aWNsZSA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6 IG5vcm1hbDsiPmFuZDwvc3Bhbj4gdXBtX2ZpbGVfYXJ0aWNsZV9jdXN0b208L2NhcHRpb24+ CgoJPHRyPgoJCTx0aD5BdHRyaWJ1dGU8L3RoPgoJCTx0aD5EZXNjcmlwdGlvbjwvdGg+CgkJ PHRoPlJlcXVpcmVkPzwvdGg+CgkJPHRoPkF2YWlsYWJsZSBWYWx1ZXM8L3RoPgoJCTx0aD5E ZWZhdWx0IFZhbHVlPC90aD4KCTwvdHI+CgoJPHRyPgoJCTx0ZD5pbmNsdWRlX2V4cGlyZWQ8 L3RkPgoJCTx0ZD5XaGV0aGVyIHRvIGluY2x1ZGUgZXhwaXJlZCBhcnRpY2xlcyBpbiB0aGUg bGlzdC48L3RkPgoJCTx0ZD5ObzwvdGQ+CgkJPHRkPjx2YXI+eWVzPC92YXI+IG9yIDx2YXI+ bm88L3Zhcj48L3RkPgoJCTx0ZD5BZG1pbiBwcmVmZXJlbmNlICJQdWJsaXNoIGV4cGlyZWQg YXJ0aWNsZXM/IjwvdGQ+Cgk8L3RyPgoKCTx0cj4KCQk8dGQ+c29ydDwvdGQ+CgkJPHRkPkhv dyB0byBzb3J0IHJldHJpZXZlZCBmaWxlcyAoY29tbWEtc2VwYXJhdGVkKS48L3RkPgoJCTx0 ZD5ObzwvdGQ+CgkJPHRkPkFueSBzb3J0IHZhbHVlIGF2YWlsYWJsZSBmb3IgYXJ0aWNsZTxz dXA+WzxhIGhyZWY9IiNmbjEiPjE8L2E+XTwvc3VwPiBhbmQgZmlsZV9kb3dubG9hZF9saXN0 PHN1cD5bPGEgaHJlZj0iI2ZuMiI+MjwvYT5dPC9zdXA+PC90ZD4KCQk8dGQ+PHZhcj5kb3du bG9hZHMgZGVzYywgUG9zdGVkIGRlc2M8L3Zhcj48L3RkPgoJPC90cj4KCgk8dHI+CgkJPHRk PndpdGhmaWxlczwvdGQ+CgkJPHRkPk9ubHkgcmV0dXJuIGFydGljbGVzIHdpdGggb25lIG9y IG1vcmUgYXNzb2NpYXRlZCBmaWxlcy48L3RkPgoJCTx0ZD5ObzwvdGQ+CgkJPHRkPjx2YXI+ MTwvdmFyPiAoeWVzKSBvciA8dmFyPjA8L3Zhcj4gKG5vKTwvdGQ+CgkJPHRkPjx2YXI+MDwv dmFyPjwvdGQ+Cgk8L3RyPgoKPC90YWJsZT4KCjxwPjxhIGhyZWY9IiNzdGFydCIgdGl0bGU9 Ikp1bXAgYmFjayBjb250ZW50cyBsaXN0Ij4mIzg2MTc7PC9hPjwvcD4KCgoKPGgyIGlkPSJm b290bm90ZXMiPkZvb3Rub3RlczwvaDI+Cgo8b2w+Cgk8bGkgaWQ9ImZuMSI+VGV4dEJvb2s6 IDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9 VHhwOmFydGljbGVfLyI+YXJ0aWNsZTwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0 dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9VHhwOmFydGljbGVfY3VzdG9tXy8iPmFy dGljbGVfY3VzdG9tPC9hPjwvbGk+Cgk8bGkgaWQ9ImZuMiI+VGV4dEJvb2s6IDxhIGhyZWY9 Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9VHhwOmZpbGVf ZG93bmxvYWRfbGlzdF8vIj5maWxlX2Rvd25sb2FkX2xpc3Q8L2E+PC9saT4KPC9vbD4KCjxw PjxhIGhyZWY9IiNzdGFydCIgdGl0bGU9Ikp1bXAgYmFjayBjb250ZW50cyBsaXN0Ij4mIzg2 MTc7PC9hPjwvcD4iO3M6MTU6ImFsbG93X2h0bWxfaGVscCI7aToxO3M6MzoibWQ1IjtzOjMy OiJhNjdlMjYwYWM4YTYxNzljNmZlMGNkZmM2MDBkNjkwMiI7fQ==