# Name: smd_vars v0.1 # Type: Admin/Client side plugin # Semi-persistent general storage for name-value pairs # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6ODoic21kX3ZhcnMiO3M6NjoiYXV0aG9yIjtzOjExOiJTdGVm IERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29t LyI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMSI7czoxMToiZGVzY3JpcHRpb24iO3M6NTI6IlNl bWktcGVyc2lzdGVudCBnZW5lcmFsIHN0b3JhZ2UgZm9yIG5hbWUtdmFsdWUgcGFpcnMiO3M6 NDoiY29kZSI7czoyMzExMToiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8qKioqKioqKioqKioqKioqKioqKioq IEFETUlOIFNJREUgQ09ERSAqKioqKioqKioqKioqKioqKioqKioqKg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K aWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWFkZF9wcml2cygnc21kX3ZhcnMn LCcxLDInKTsNCg0KCS8vIEV4dGVuc2lvbnMgdGFiDQoJcmVnaXN0ZXJfdGFiKCdleHRlbnNp b25zJywgJ3NtZF92YXJzJywgc21kX3ZhcnNfZ1R4dCgnc21kX3ZhcnMnKSk7DQoJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF92YXJzJywgJ3NtZF92YXJzJyk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF92YXJzKCRldmVudCwgJHN0ZXApIHsNCglpZighJHN0ZXAgb3IgIWlu X2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRfdmFyc190YWJsZV9pbnN0YWxsJywNCgkJ CSdzbWRfdmFyc190YWJsZV9yZW1vdmUnLA0KCQkJJ3NtZF92YXJzX3B1cmdlX2V4cGlyZWQn LA0KCQkJJ3NtZF92YXJzX2FkZCcsDQoJCQknc21kX3ZhcnNfZGVsZXRlJywNCgkJCSdzbWRf dmFyc191cGRhdGUnLA0KCQkJJ3NtZF92YXJzX211bHRpX2VkaXQnLA0KCQkJJ3NtZF92YXJz X2NoYW5nZV9wYWdlYnknLA0KCQkpKSkgew0KCQlzbWRfdmFyc19zaG93KCcnKTsNCgl9IGVs c2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3ZhcnNfYWRkKCkg ew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduZXdfbmFtZScsJ25ld192YWx1ZScs J25ld19leHBpcnknKSkpKTsNCg0KCSRyZXQgPSBmYWxzZTsNCgkkbXNnID0gJyc7DQoJJG5l d19leHBpcnkgPSBzbWRfdmFyc19jYWxjX2V4cGlyeSgkbmV3X2V4cGlyeSk7DQoJJG5ld19l eHBpcnkgPSAoJG5ld19leHBpcnkpID8gJG5ld19leHBpcnkgOiAnMDAwMC0wMC0wMCAwMDow MDowMCc7DQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4aXN0cygpICYmICRuZXdfbmFtZSAmJiAk bmV3X3ZhbHVlICYmICRuZXdfZXhwaXJ5KSB7DQoJCSRkdXAgPSBzYWZlX2NvdW50KCJzbWRf dmFycyIsICJuYW1lPSckbmV3X25hbWUnIik7DQoJCWlmICgkZHVwKSB7DQoJCQkkbXNnID0g c21kX3ZhcnNfZ1R4dCgnZHVwbGljYXRlJyk7DQoJCX0gZWxzZSB7DQoJCQkkcmV0ID0gc2Fm ZV9pbnNlcnQoInNtZF92YXJzIiwNCgkJCQkibmFtZT0nJG5ld19uYW1lJywNCgkJCQl2YWx1 ZT0nJG5ld192YWx1ZScsDQoJCQkJZXhwaXJlcz0nJG5ld19leHBpcnknIg0KCQkJKTsNCgkJ fQ0KCX0NCg0KCWlmICgkcmV0ID09PSBmYWxzZSkgew0KCQlzbWRfdmFyc19zaG93KHNtZF92 YXJzX2dUeHQoJ2luc2VydF9mYWlsZWQnKS4kbXNnLCAkbmV3X25hbWUsICRuZXdfdmFsdWUs ICRuZXdfZXhwaXJ5KTsNCgl9IGVsc2Ugew0KCQlzbWRfdmFyc19zaG93KHNtZF92YXJzX2dU eHQoJ2luc2VydGVkJykpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3Zh cnNfdXBkYXRlKCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdpZCcsICduZXdf bmFtZScsJ25ld192YWx1ZScsJ25ld19leHBpcnknKSkpKTsNCg0KCSRuZXdfZXhwaXJ5ID0g c21kX3ZhcnNfY2FsY19leHBpcnkoJG5ld19leHBpcnkpOw0KCSRyZXQgPSBmYWxzZTsNCgkk bXNnID0gJyc7DQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSB7DQoJCSRkdXAgPSBz YWZlX3JvdygiKiIsICJzbWRfdmFycyIsICJuYW1lPSckbmV3X25hbWUnIik7DQoNCgkJaWYg KCRkdXAgJiYgKGludHZhbCgkZHVwWydpZCddKSAhPSBpbnR2YWwoJGlkKSkpIHsNCgkJCSRt c2cgPSBzbWRfdmFyc19nVHh0KCdkdXBsaWNhdGUnKTsNCgkJfSBlbHNlIHsNCgkJCSRyZXQg PSBzYWZlX3VwZGF0ZSgic21kX3ZhcnMiLA0KCQkJCSJuYW1lPSckbmV3X25hbWUnLA0KCQkJ CXZhbHVlPSckbmV3X3ZhbHVlJywNCgkJCQlleHBpcmVzPSckbmV3X2V4cGlyeSciLA0KCQkJ CSJpZD0nJGlkJyIpOw0KCQl9DQoJfQ0KCWlmICgkcmV0ID09PSBmYWxzZSkgew0KCQlzbWRf dmFyc19zaG93KHNtZF92YXJzX2dUeHQoJ3VwZGF0ZV9mYWlsZWQnKS4kbXNnKTsNCgl9IGVs c2Ugew0KCQlzbWRfdmFyc19zaG93KHNtZF92YXJzX2dUeHQoJ3VwZGF0ZWQnKSk7DQoJfQ0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyc19kZWxldGUoKSB7DQoJJGlkID0g YXNzZXJ0X2ludChwcygnaWQnKSk7DQoNCgkkcmV0ID0gZmFsc2U7DQoJaWYgKHNtZF92YXJz X3RhYmxlX2V4aXN0cygpKSB7DQoJCSRycyA9IHNhZmVfcm93KCcqJywgJ3NtZF92YXJzJywg ImlkID0gJGlkIik7DQoJCWlmICgkcnMpIHsNCgkJCWV4dHJhY3QoJHJzKTsNCgkJCSRyZXQg PSBzYWZlX2RlbGV0ZSgnc21kX3ZhcnMnLCAiaWQgPSAkaWQiKTsNCgkJfQ0KCX0NCglpZiAo JHJldCA9PT0gZmFsc2UpIHsNCgkJc21kX3ZhcnNfc2hvdyhzbWRfdmFyc19nVHh0KCdkZWxl dGVfZmFpbGVkJykpOw0KCX0gZWxzZSB7DQoJCXNtZF92YXJzX3Nob3coc21kX3ZhcnNfZ1R4 dCgnZGVsZXRlZCcsIGFycmF5KCJ7aWR9IiA9PiAkaWQpKSk7DQoJfQ0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfdmFyc19tdWx0aV9lZGl0KCkgew0KLy8JZXh0cmFjdChkb1Ns YXNoKGdwc2EoYXJyYXkoJ2lkJywnbmV3X25hbWUnLCduZXdfdmFsdWUnLCduZXdfZXhwaXJ5 JykpKSk7DQoNCgkkc2VsZWN0ZWQgPSBwcygnc2VsZWN0ZWQnKTsNCgkkcmV0ID0gZmFsc2U7 DQoJJGlkcyA9ICcnOw0KDQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4aXN0cygpICYmICRzZWxl Y3RlZCkgew0KCQkkbWV0aG9kID0gcHMoJ2VkaXRfbWV0aG9kJyk7DQoJCXN3aXRjaCgkbWV0 aG9kKSB7DQoJCQljYXNlICJkZWxldGUiOg0KCQkJCSRpZHMgPSBhcnJheSgpOw0KCQkJCWZv cmVhY2ggKCRzZWxlY3RlZCBhcyAkaWQpIHsNCgkJCQkJJGlkID0gYXNzZXJ0X2ludCgkaWQp Ow0KCQkJCQlpZiAoc2FmZV9kZWxldGUoJ3NtZF92YXJzJywgImlkID0gJGlkIikpIHsNCgkJ CQkJCSRpZHNbXSA9ICRpZDsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkaWRzID0gam9pbignLCAn LCAkaWRzKTsNCgkJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXNtZF92YXJzX3Nob3coc21kX3Zh cnNfZ1R4dCgnZGVsZXRlZCcsIGFycmF5KCJ7aWR9IiA9PiAkaWRzKSkpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyc19wdXJnZV9leHBpcmVkKCkgew0KCSRibGF0dGVk ID0gMDsNCglpZiAoc21kX3ZhcnNfdGFibGVfZXhpc3RzKCkpIHsNCgkJJHdoZXJlID0gImV4 cGlyZXMgPD4gJzAwMDAtMDAtMDAgMDA6MDA6MDAnIEFORCBleHBpcmVzIDwgTk9XKCkiOw0K CQkkYmxhdHRlZCA9IHNhZmVfY291bnQoInNtZF92YXJzIiwgJHdoZXJlKTsNCgkJJHJlcyA9 IHNhZmVfZGVsZXRlKCJzbWRfdmFycyIsICR3aGVyZSk7DQoJfQ0KCXNtZF92YXJzX3Nob3co c21kX3ZhcnNfZ1R4dCgnZGVsZXRlZF9udW0nLCBhcnJheSgie251bX0iID0+ICRibGF0dGVk KSkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyc190YWJsZV9leGlzdHMo KSB7DQoJcmV0dXJuKEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAnc21kX3ZhcnMnKSk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCi8vIEFkZCB0aGUgdmFycyB0YWJsZSBpZiBub3QgYWxyZWFkeSBpbnN0 YWxsZWQNCmZ1bmN0aW9uIHNtZF92YXJzX3RhYmxlX2luc3RhbGwoKSB7DQoJJHZlcnNpb24g PSBteXNxbF9nZXRfc2VydmVyX2luZm8oKTsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCdd ID0gMDsNCglpZiAoJHZlcnNpb24gPCAiNC4xLjIiKSB7DQoJCSRHTE9CQUxTWyd0eHBfZXJy X2NvdW50J10rKzsNCgkJdHJpZ2dlcl9lcnJvcigic21kX3ZhcnMgcmVxdWlyZXMgTXlTUUwg djQuMS4yIG9yIGdyZWF0ZXIuIik7DQoJfSBlbHNlIHsNCgkJJHJldCA9ICcnOw0KCQkkc3Fs ID0gYXJyYXkoKTsNCgkJaWYgKCFzbWRfdmFyc190YWJsZV9leGlzdHMoKSkgew0KCQkJJHNx bFtdID0gIkNSRUFURSBUQUJMRSBgIi5zYWZlX3BmeCgnc21kX3ZhcnMnKS4iYCAoDQoJCQkJ YGlkYCBpbnQoMTEpIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LA0KCQkJCWBuYW1lYCB2YXJj aGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQkJCWB2YWx1ZWAgdGV4dCBOT1QgTlVM TCBkZWZhdWx0ICcnLA0KCQkJCWBleHBpcmVzYCBkYXRldGltZSBOT1QgTlVMTCBkZWZhdWx0 ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywNCgkJCQlQUklNQVJZIEtFWSAoYGlkYCkNCgkJCSkg RU5HSU5FPU15SVNBTSBQQUNLX0tFWVM9MSBBVVRPX0lOQ1JFTUVOVD0xIjsNCg0KCQkJZm9y ZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCQkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJ CQkJaWYgKCEkcmV0KSB7DQoJCQkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJ CQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3Fs X2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7 DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50 J10gPT0gMCkgew0KCQkkbWVzc2FnZSA9IHNtZF92YXJzX2dUeHQoJ3RhYmxlX2luc3RhbGxl ZCcpOw0KCX0gZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX3ZhcnNfZ1R4dCgndGFibGVfbm90 X2luc3RhbGxlZCcpOw0KCX0NCglzbWRfdmFyc19zaG93KCRtZXNzYWdlKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gRHJvcCB0aGUgdmFycyB0YWJsZSBpZiBpdCdzIGluIHRoZSBkYXRhYmFz ZQ0KZnVuY3Rpb24gc21kX3ZhcnNfdGFibGVfcmVtb3ZlKCkgew0KCSRyZXQgPSAnJzsNCgkk c3FsID0gYXJyYXkoKTsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsNCglpZiAo c21kX3ZhcnNfdGFibGVfZXhpc3RzKCkpIHsNCgkJJHNxbFtdID0gIkRST1AgVEFCTEUgSUYg RVhJU1RTICIgLnNhZmVfcGZ4KCdzbWRfdmFycycpLiAiOyAiOw0KCQlmb3JlYWNoICgkc3Fs IGFzICRxcnkpIHsNCgkJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQkJaWYgKCEkcmV0 KSB7DQoJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJCWVjaG8gIjxiPiIu JEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIg Lz5cbiI7DQoJCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJCQl9DQoJCX0NCgl9 DQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkgew0KCQkkbWVzc2FnZSA9 IHNtZF92YXJzX2dUeHQoJ3RhYmxlX3JlbW92ZWQnKTsNCgl9IGVsc2Ugew0KCQkkbWVzc2Fn ZSA9IHNtZF92YXJzX2dUeHQoJ3RhYmxlX25vdF9yZW1vdmVkJyk7DQoJfQ0KCXNtZF92YXJz X3Nob3coJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEaXNwbGF5IHRoZSB2YXJp YWJsZXMgYWxyZWFkeSBkZWZpbmVkIGFuZCBvdGhlciBidXR0b25zIGxpa2UgYWRkL3JlbW92 ZS9lZGl0IHZhcnMvdGFibGVzDQpmdW5jdGlvbiBzbWRfdmFyc19zaG93KCRtZXNzYWdlLCAk dGhlTmFtZT0nJywgJHRoZVZhbHVlPScnLCAkdGhlRXhwaXJlcz0nJykgew0KCXJlcXVpcmVf cGx1Z2luKCdzbWRfbGliJyk7DQoNCgkvLyBQcm9jZXNzIHRoZSBzb3J0IG9yZGVyLCBsaW1p dCBhbmQgZmlsdGVyaW5nIHN0dWZmIGZyb20gdGhlIHF1ZXJ5IHN0cmluZw0KCWV4dHJhY3Qo Z3BzYShhcnJheSgnc3RlcCcsICdwYWdlJywgJ3NvcnQnLCAnZGlyJywgJ2NyaXQnLCAnc2Vh cmNoX21ldGhvZCcsICdpZCcpKSk7DQoJJHBhZ2VieSA9IChncHMoJ3F0eScpKSA/IGdwcygn cXR5JykgOiAoKGNzKCdzbWRfdmFyc19wYWdlYnknKSkgPyBjcygnc21kX3ZhcnNfcGFnZWJ5 JykgOiAxNSk7DQoNCgkkZGlyID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdkZXNjJyA6ICdhc2Mn Ow0KCXN3aXRjaCAoJHNvcnQpIHsNCgkJY2FzZSAnaWQnOg0KCQkJJHNvcnRfc3FsID0gJ2lk ICcuJGRpci4nLCBuYW1lIGFzYyc7DQoJCQlicmVhazsNCgkJY2FzZSAndmFsdWUnOg0KCQkJ JHNvcnRfc3FsID0gJ3ZhbHVlICcuJGRpci4nLCBuYW1lIGFzYyc7DQoJCQlicmVhazsNCgkJ Y2FzZSAnZXhwaXJlcyc6DQoJCQkkc29ydF9zcWwgPSAnZXhwaXJlcyAnLiRkaXIuJywgbmFt ZSBhc2MnOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ25hbWUnOg0KCQlkZWZhdWx0Og0KCQkJJHNv cnQgPSAnbmFtZSc7DQoJCQkkc29ydF9zcWwgPSAnbmFtZSAnLiRkaXI7DQoJCQlicmVhazsN Cgl9DQoJJHN3aXRjaF9kaXIgPSAoJGRpciA9PSAnZGVzYycpID8gJ2FzYycgOiAnZGVzYyc7 DQoJJGNyaXRlcmlhID0gMTsNCg0KCWlmICgkc2VhcmNoX21ldGhvZCAmJiAkY3JpdCkgew0K CQkkY3JpdF9lc2NhcGVkID0gZG9TbGFzaCgkY3JpdCk7DQoJCSRub3cgPSBkYXRlKCJZLW0t ZCBIOmk6cyIpOw0KCQkvLyBNYWtlIHVwIGNyaXRlcmlhIGZvciB0aGUgZmFrZSAnZXhwaXJl ZCcgY29sdW1uDQoJCXN3aXRjaChzdHJ0b2xvd2VyKCRjcml0X2VzY2FwZWQpKSB7DQoJCQlj YXNlIHN0cnRvbG93ZXIoZ1R4dCgneWVzJykpOg0KCQkJCSRleHB5cmUgPSAiKGV4cGlyZXMg PCAnJG5vdycgQU5EIGV4cGlyZXMgPD4gJzAwMDAtMDAtMDAgMDA6MDA6MDAnKSI7DQoJCQkJ YnJlYWs7DQoJCQljYXNlIHNtZF92YXJzX2dUeHQoJ2VtcHR5X2V4cGlyeScpOg0KCQkJCSRl eHB5cmUgPSAiZXhwaXJlcyA9ICcwMDAwLTAwLTAwIDAwOjAwOjAwJyI7DQoJCQkJYnJlYWs7 DQoJCQljYXNlIHN0cnRvbG93ZXIoZ1R4dCgnbm8nKSkuc21kX3ZhcnNfZ1R4dCgnZW1wdHlf ZXhwaXJ5Jyk6DQoJCQkJJGV4cHlyZSA9ICIoZXhwaXJlcyA+PSAnJG5vdycgT1IgZXhwaXJl cyA9ICcwMDAwLTAwLTAwIDAwOjAwOjAwJykiOw0KCQkJCWJyZWFrOw0KCQkJZGVmYXVsdDoN CgkJCQkkZXhweXJlID0gIihleHBpcmVzID49ICckbm93JyBBTkQgZXhwaXJlcyA8PiAnMDAw MC0wMC0wMCAwMDowMDowMCcpIjsNCgkJCQlicmVhazsNCgkJfQ0KCQkkY3JpdHNxbCA9IGFy cmF5KA0KCQkJJ2lkJyA9PiAiaWQgPSAnJGNyaXRfZXNjYXBlZCciLA0KCQkJJ25hbWUnID0+ ICJuYW1lIGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLA0KCQkJJ3ZhbHVlJyA9PiAidmFsdWUg bGlrZSAnJSRjcml0X2VzY2FwZWQlJyIsDQoJCQknZXhwaXJlcycgPT4gImV4cGlyZXMgbGlr ZSAnJSRjcml0X2VzY2FwZWQlJyIsDQoJCQknZXhwaXJlZCcgPT4gJGV4cHlyZSwNCgkJKTsN Cg0KCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkc2VhcmNoX21ldGhvZCwgJGNyaXRzcWwpKSB7 DQoJCQkkY3JpdGVyaWEgPSAkY3JpdHNxbFskc2VhcmNoX21ldGhvZF07DQoJCQkkbGltaXQg PSA1MDA7DQoJCX0gZWxzZSB7DQoJCQkkc2VhcmNoX21ldGhvZCA9ICcnOw0KCQkJJGNyaXQg PSAnJzsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRzZWFyY2hfbWV0aG9kID0gJyc7DQoJCSRjcml0 ID0gJyc7DQoJfQ0KDQoJJHRvdGFsID0gKHNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSA/IHNh ZmVfY291bnQoJ3NtZF92YXJzJywgIiRjcml0ZXJpYSIpIDogMDsNCgkkbGltaXQgPSBtYXgo QCRwYWdlYnksIDE1KTsNCglsaXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0gcGFn ZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsNCg0KCSRxcyA9IGFycmF5KA0KCQkiZXZlbnQi ID0+ICJzbWRfdmFycyIsDQoJCSJwYWdlIiA9PiAkcGFnZSwNCgkJInNvcnQiID0+ICRzb3J0 LA0KCQkiZGlyIiA9PiAkZGlyLA0KCQkiY3JpdCIgPT4gJGNyaXQsDQoJCSJzZWFyY2hfbWV0 aG9kIiA9PiAkc2VhcmNoX21ldGhvZCwNCgkpOw0KDQoJJHFzVmFycyA9ICJpbmRleC5waHAi Lmh0bWxzcGVjaWFsY2hhcnNfZGVjb2RlKGpvaW5fcXMoJHFzKSk7DQoNCgkvLyBSZW5kZXIg dGhlIHZhcmlhYmxlIGxpc3QNCglwYWdldG9wKHNtZF92YXJzX2dUeHQoJ2VkaXQnKSwkbWVz c2FnZSk7DQoJJGJ0bkFkZCA9IGZJbnB1dCgnc3VibWl0JywgJ3NtZF92YXJzX2FkZCcsIHNt ZF92YXJzX2dUeHQoJ2FkZF9sYWJlbCcpLCAnc21hbGxlcmJveCcsICcnLCAnc21kX3Zhcl9z dGVwPXRoaXMubmFtZTtzbWRfdmFyX2lkPVwnXCcnKTsNCgkkYnRuSW5zdGFsbFRibCA9ICc8 Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PXNtZF92YXJzJy5hLidzdGVwPXNt ZF92YXJzX3RhYmxlX2luc3RhbGwiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+JyAuIGZJbnB1 dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF92YXJzX2dUeHQoJ3RhYmxlX2luc3RhbGxfbGFi ZWwnKSwgJ3NtYWxsZXJib3gnKSAuICc8L2Zvcm0+JzsNCgkkYnRuUmVtb3ZlVGJsID0gJzxm b3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3ZhcnMnLmEuJ3N0ZXA9c21k X3ZhcnNfdGFibGVfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiIG9uc3VibWl0PSJy ZXR1cm4gdmVyaWZ5KFwnJy5zbWRfdmFyc19nVHh0KCd0YWJsZV9yZW1vdmVfY2hlY2snKS4n XCcpIj4nIC4gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3ZhcnNfZ1R4dCgndGFi bGVfcmVtb3ZlX2xhYmVsJyksICdzbWFsbGVyYm94JykgLiAnPC9mb3JtPic7DQoJJGJ0blB1 cmdlRXhwaXJlZCA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PXNtZF92 YXJzJy5hLidzdGVwPXNtZF92YXJzX3B1cmdlX2V4cGlyZWQiIHN0eWxlPSJkaXNwbGF5Omlu bGluZSIgb25zdWJtaXQ9InJldHVybiB2ZXJpZnkoXCcnLnNtZF92YXJzX2dUeHQoJ3B1cmdl X2V4cGlyZWQnKS4nXCcpIj4nIC4gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3Zh cnNfZ1R4dCgncHVyZ2VfZXhwaXJlZF9sYWJlbCcpLCAnc21hbGxlcmJveCcpIC4gJzwvZm9y bT4nOw0KCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7DQoN CgkvLyBOb24tZGVmYXVsdCBjYXNlcyByZXR1cm4gZmFsc2UgYmVjYXVzZSB0aGUgb3JpZ2lu YWwgZm9ybSBhY3Rpb24gaGFzIGJlZW4gb3ZlcnJpZGVuDQoJZWNobyA8PDxFT0pTDQo8c2Ny aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJdmFyIHNtZF92YXJfc3RlcCA9ICcnOw0K CXZhciBzbWRfdmFyX2lkID0gJyc7DQoJZnVuY3Rpb24gcHJlc3ViKCkgew0KCQl2YXIgc21k X3Zhcl9VUkwgPSAieyRxc1ZhcnN9IjsNCgkJc3dpdGNoKHNtZF92YXJfc3RlcCkgew0KCQkJ Y2FzZSAic21kX3ZhcnNfYWRkIjoNCgkJCWNhc2UgInNtZF92YXJzX3VwZGF0ZSI6DQoJCQkJ dmFyIG5ld19uYW1lID0galF1ZXJ5KCJpbnB1dFtuYW1lPSduZXdfbmFtZSddIikudmFsKCk7 DQoJCQkJdmFyIG5ld192YWx1ZSA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nbmV3X3ZhbHVlJ10i KS52YWwoKTsNCgkJCQl2YXIgbmV3X2V4cGlyeSA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nbmV3 X2V4cGlyeSddIikudmFsKCk7DQoJCQkJbG9jYXRpb24uaHJlZiA9IHNtZF92YXJfVVJMICsg IiZzdGVwPSIgKyBzbWRfdmFyX3N0ZXAgKyAiJm5ld19uYW1lPSIgKyBuZXdfbmFtZSsgIiZu ZXdfdmFsdWU9IiArIG5ld192YWx1ZSsgIiZuZXdfZXhwaXJ5PSIgKyBuZXdfZXhwaXJ5ICsg IiZpZD0iICsgc21kX3Zhcl9pZDsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJYnJlYWs7DQoJ CQljYXNlICJzbWRfdmFyc19lZGl0IjoNCgkJCQlsb2NhdGlvbi5ocmVmID0gc21kX3Zhcl9V UkwgKyAiJnN0ZXA9IiArIHNtZF92YXJfc3RlcCArICImaWQ9IiArIHNtZF92YXJfaWQ7DQoJ CQkJcmV0dXJuIGZhbHNlOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAic21kX3ZhcnNfY2FuY2Vs IjoNCgkJCQlsb2NhdGlvbi5ocmVmID0gc21kX3Zhcl9VUkw7DQoJCQkJcmV0dXJuIGZhbHNl Ow0KCQkJCWJyZWFrOw0KCQkJZGVmYXVsdDoNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCX0N Cjwvc2NyaXB0Pg0KRU9KUzsNCg0KCWVjaG8gc3RhcnRUYWJsZSgnY29udHJvbCcsJycsJycs NSk7DQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSB7DQoJCS8vIFRhYmxlcyBpbnN0 YWxsZWQNCgkJZWNobyB0cihmTGFiZWxDZWxsKHNtZF92YXJzX2dUeHQoJ2NvbnRyb2wnKS4n OicpIC4gdGRhKCRidG5SZW1vdmVUYmwsICRidG5TdHlsZSkgLiB0ZGEoJGJ0blB1cmdlRXhw aXJlZCwgJGJ0blN0eWxlKSk7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgkJZWNobyBzbWRfdmFy c19zZWFyY2hfZm9ybSgkY3JpdCwgJHNlYXJjaF9tZXRob2QpOw0KCQllY2hvICc8Zm9ybSBt ZXRob2Q9InBvc3QiIG5hbWU9Imxvbmdmb3JtIiBhY3Rpb249Iicuam9pbl9xcygkcXMpLici IG9uc3VibWl0PSJyZXR1cm4gcHJlc3ViKCk7Ij4nOw0KCQllY2hvIHN0YXJ0VGFibGUoJ2xp c3QnKTsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF92YXJzX2dUeHQoJ2xpc3RfdGl0bGUn KSksICcgY29sc3Bhbj0iNSInKSk7DQoJCWVjaG8gdHIoDQoJCQljb2x1bW5faGVhZCgnaWQn LCAnaWQnLCAnc21kX3ZhcnMnLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hf bWV0aG9kLCAoJ2lkJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLg0KCQkJY29sdW1uX2hlYWQo J25hbWUnLCAnbmFtZScsICdzbWRfdmFycycsIHRydWUsICRzd2l0Y2hfZGlyLCAkY3JpdCwg JHNlYXJjaF9tZXRob2QsICgnbmFtZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4NCgkJCWNv bHVtbl9oZWFkKCd2YWx1ZScsICd2YWx1ZScsICdzbWRfdmFycycsIHRydWUsICRzd2l0Y2hf ZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgndmFsdWUnID09ICRzb3J0KSA/ICRkaXIg OiAnJykuDQoJCQljb2x1bW5faGVhZCgnZXhwaXJlcycsICdleHBpcmVzJywgJ3NtZF92YXJz JywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCwgKCdleHBpcmVz JyA9PSAkc29ydCkgPyAkZGlyIDogJycpLg0KCQkJY29sdW1uX2hlYWQoJ2V4cGlyZWQnLCAn ZXhwaXJlZCcsICdzbWRfdmFycycsIGZhbHNlKQ0KCQkpOw0KDQoJCWlmICgkc3RlcCAhPSAi c21kX3ZhcnNfZWRpdCIpIHsNCgkJCSRvdXQgPSB0ZCgnJm5ic3A7Jyk7DQoJCQkkb3V0IC49 IGZJbnB1dENlbGwoJ25ld19uYW1lJywgJHRoZU5hbWUpOw0KCQkJJG91dCAuPSBmSW5wdXRD ZWxsKCduZXdfdmFsdWUnLCAkdGhlVmFsdWUsICcnLCA0Mik7DQoJCQkkb3V0IC49IGZJbnB1 dENlbGwoJ25ld19leHBpcnknLCAkdGhlRXhwaXJlcyk7DQoJCQkkb3V0IC49IHRkKCcmbmJz cDsnKTsNCgkJCSRvdXQgLj0gdGRhKCRidG5BZGQsICRidG5TdHlsZSk7DQoJCQllY2hvIHRy KCRvdXQpOw0KCQl9DQoNCgkJLy8gTm90ZSB0aGUgbmVnYXRpdmUgbG9naWMgaW4gdGhlICdl eHBpcmVkJyBjb2x1bW4gKHNpbmNlIHNtZF92YXJfc3RhdHVzIHJldHVybnMgMSBpZiAndmFs aWQnKQ0KCQkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJyonLCAnc21kX3ZhcnMnLCAiJGNyaXRl cmlhIG9yZGVyIGJ5ICRzb3J0X3NxbCBsaW1pdCAkb2Zmc2V0LCAkbGltaXQiKTsNCgkJd2hp bGUgKCRhID0gbmV4dFJvdygkcnMpKSB7DQoJCQkkZXhwaXJ5ID0gKCRhWydleHBpcmVzJ109 PSIwMDAwLTAwLTAwIDAwOjAwOjAwIikgPyBzbWRfdmFyc19nVHh0KCdlbXB0eV9leHBpcnkn KSA6ICRhWydleHBpcmVzJ107DQoJCQkkZXhwaXJlTGFiZWwgPSBzbWRfdmFyX3N0YXR1cyhh cnJheSgibmFtZSIgPT4gJGFbJ25hbWUnXSkpID8gKCgkZXhwaXJ5ID09IHNtZF92YXJzX2dU eHQoJ2VtcHR5X2V4cGlyeScpKSA/IHNtZF92YXJzX2dUeHQoJ2VtcHR5X2V4cGlyeScpIDog Z1R4dCgnbm8nKSkgOiBnVHh0KCd5ZXMnKTsNCgkJCWlmICgkc3RlcCA9PSAic21kX3ZhcnNf ZWRpdCIgJiYgJGlkID09ICRhWydpZCddKSB7DQoJCQkJJG91dCA9IHRkKCRhWydpZCddKTsN CgkJCQkkb3V0IC49IGZJbnB1dENlbGwoJ25ld19uYW1lJywgJGFbJ25hbWUnXSk7DQoJCQkJ JG91dCAuPSBmSW5wdXRDZWxsKCduZXdfdmFsdWUnLCAkYVsndmFsdWUnXSwgJycsIDQyKTsN CgkJCQkkb3V0IC49IGZJbnB1dENlbGwoJ25ld19leHBpcnknLCAkZXhwaXJ5KTsNCgkJCQkk b3V0IC49IHRkKCRleHBpcmVMYWJlbCk7DQoJCQkJJG91dCAuPSB0ZGEoZklucHV0KCdzdWJt aXQnLCAnc21kX3ZhcnNfdXBkYXRlJywgZ1R4dCgnc2F2ZScpLCAnc21hbGxlcmJveCcsICcn LCAnc21kX3Zhcl9zdGVwPXRoaXMubmFtZTtzbWRfdmFyX2lkPVwnJy4kYVsnaWQnXS4nXCcn KSk7DQoJCQkJJG91dCAuPSB0ZGEoZklucHV0KCdzdWJtaXQnLCAnc21kX3ZhcnNfY2FuY2Vs Jywgc21kX3ZhcnNfZ1R4dCgnY2FuY2VsX2xhYmVsJyksICdzbWFsbGVyYm94JywgJycsICdz bWRfdmFyX3N0ZXA9dGhpcy5uYW1lO3NtZF92YXJfaWQ9XCdcJycpKTsNCgkJCX0gZWxzZSB7 DQoJCQkJJG91dCA9IHRhZygkYVsnaWQnXSwgJ3RkJyk7DQoJCQkJJG91dCAuPSB0YWcoJGFb J25hbWUnXSwgJ3RkJyk7DQoJCQkJJG91dCAuPSB0YWcoKCRhWyd2YWx1ZSddID8gJGFbJ3Zh bHVlJ10gOiAnJm5ic3A7JyksICd0ZCcpOw0KCQkJCSRvdXQgLj0gdGFnKCRleHBpcnksICd0 ZCcpOw0KCQkJCSRvdXQgLj0gdGFnKCRleHBpcmVMYWJlbCwgJ3RkJyk7DQoJCQkJJG91dCAu PSB0ZGEoZklucHV0KCdzdWJtaXQnLCAnc21kX3ZhcnNfZWRpdCcsIGdUeHQoJ2VkaXQnKSwg J3NtYWxsZXJib3gnLCAnJywgJ3NtZF92YXJfc3RlcD10aGlzLm5hbWU7c21kX3Zhcl9pZD1c JycuJGFbJ2lkJ10uJ1wnJykpOw0KCQkJCSRvdXQgLj0gdGQoZExpbmsoJ3NtZF92YXJzJywg J3NtZF92YXJzX2RlbGV0ZScsICdpZCcsICRhWydpZCddLCAnJywgJycsICcnLCBmYWxzZSwg YXJyYXkoJHBhZ2UsICRzb3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QpKSwgMTAp Ow0KCQkJCSRvdXQgLj0gdGQoZklucHV0KCdjaGVja2JveCcsICdzZWxlY3RlZFtdJywgJGFb J2lkJ10pKTsNCgkJCX0NCgkJCWVjaG8gdHIoJG91dCwgJyBjbGFzcz0ic21kX3ZhcnNfcm93 IiBpZD0iJy4kYVsnaWQnXS4nIicpOw0KCQl9DQoJCWVjaG8gdGRhKHNlbGVjdF9idXR0b25z KCkgLiBldmVudF9tdWx0aWVkaXRfZm9ybSgnc21kX3ZhcnMnLCBOVUxMLCAkcGFnZSwgJHNv cnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCksICcgY29sc3Bhbj0iNSIgc3R5bGU9 InRleHQtYWxpZ246IHJpZ2h0OyBib3JkZXI6IG5vbmU7IicpOw0KCQllY2hvIGVuZFRhYmxl KCk7DQoJCWVjaG8gJzwvZm9ybT4nOw0KCQllY2hvIG4ubmF2X2Zvcm0oJ3NtZF92YXJzJywg JHBhZ2UsICRudW1QYWdlcywgJHNvcnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCk7 DQoJCWVjaG8gbi5wYWdlYnlfZm9ybSgnc21kX3ZhcnMnLCAkcGFnZWJ5KTsNCgl9IGVsc2Ug ew0KCQkvLyBUYWJsZXMgbm90IGluc3RhbGxlZA0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFs bFRibCwgJGJ0blN0eWxlKSk7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIHNtZF92YXJzX3NlYXJjaF9mb3JtKCRjcml0LCAkbWV0aG9kKSB7 DQoJJG1ldGhvZHMgPQlhcnJheSgNCgkJJ2lkJyA9PiBnVHh0KCdpZCcpLA0KCQknbmFtZScg PT4gZ1R4dCgnbmFtZScpLA0KCQkndmFsdWUnID0+IGdUeHQoJ3ZhbHVlJyksDQoJCSdleHBp cmVzJyA9PiBnVHh0KCdleHBpcmVzJyksDQoJCSdleHBpcmVkJyA9PiBnVHh0KCdleHBpcmVk JykNCgkpOw0KDQoJcmV0dXJuIHNlYXJjaF9mb3JtKCdzbWRfdmFycycsICdzbWRfdmFyc19z aG93JywgJGNyaXQsICRtZXRob2RzLCAkbWV0aG9kLCAnbmFtZScpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfdmFyc19jaGFuZ2VfcGFnZWJ5KCkgew0KCXNldGNvb2tpZSgn c21kX3ZhcnNfcGFnZWJ5JywgZ3BzKCdxdHknKSk7DQoJc21kX3ZhcnNfc2hvdygnJyk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIENhbGN1bGF0ZSBhbnkgdGltZSBvZmZzZXQgcmVsYXRpdmUg dG8gbm93LCBlLmcuICsxZCwgKzR3LCArMzBzLCArMTBtIGV0Yw0KZnVuY3Rpb24gc21kX3Zh cnNfY2FsY19leHBpcnkoJGV4cGlyZXMsICRkZWJ1Zz1mYWxzZSkgew0KCSRvZmZzZXRSRSA9 ICcvKFwrfFxAKShbMC05XSspKFtBLVphLXpdKS8nOw0KCSRudW1PZmZzZXRzID0gcHJlZ19t YXRjaF9hbGwoJG9mZnNldFJFLCAkZXhwaXJlcywgJG9mZnNldHMpOw0KCWlmICgkbnVtT2Zm c2V0cyA+IDApIHsNCgkJJHZhbGlkUGVyaW9kcyA9IGFycmF5KA0KCQkJJ3MnID0+IDEsDQoJ CQknbScgPT4gNjAsDQoJCQknaCcgPT4gMzYwMCwNCgkJCSdkJyA9PiA4NjQwMCwNCgkJCSd3 JyA9PiA2MDQ4MDAsDQoJCQkneScgPT4gMzE0NDk2MDAsDQoJCQkpOw0KCQkkb2ZmTnVtID0g JG9mZnNldHNbMl1bMF07DQoJCSRvZmZQZXJpb2QgPSAoYXJyYXlfa2V5X2V4aXN0cygkb2Zm c2V0c1szXVswXSwgJHZhbGlkUGVyaW9kcykpID8gJG9mZnNldHNbM11bMF0gOiAicyI7DQoJ CSRleHBpcmVzID0gZGF0ZSgiWS1tLWQgSDppOnMiLCB0aW1lKCkgKyAoJG9mZk51bSAqICR2 YWxpZFBlcmlvZHNbJG9mZlBlcmlvZF0pKTsNCgkJaWYgKCRkZWJ1Zykgew0KCQkJZWNobyAi KysgVElNRSBOT1cgQU5EIFRJTUUgSU4gJG9mZk51bSAkb2ZmUGVyaW9kICsrIjsNCgkJCWRt cChkYXRlKCJZLW0tZCBIOmk6cyIpKTsNCgkJCWRtcCgkZXhwaXJlcyk7DQoJCX0NCgl9DQoJ cmV0dXJuICRleHBpcmVzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyoqKioqKioqKioqKioqKioq KioqKiogUFVCTElDIFNJREUgVEFHUyAqKioqKioqKioqKioqKioqKioqKioqDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF92YXJfZ2V0KCRhdHRzKSB7DQoJcmVx dWlyZV9wbHVnaW4oJ3NtZF9saWInKTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdu YW1lJyA9PiAnJywNCgkJJ2luamVjdCcgPT4gJycsDQoJCSdhbGxvd19zcGFjZXMnID0+ICcw JywNCgkJJ3ZhbGlkJyA9PiAnMScsDQoJCSdkZWxpbScgPT4gJywnLA0KCQkncGFyYW1kZWxp bScgPT4gJzonLA0KCQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJaWYgKCRu YW1lKSB7JG5hbWUgPSBkb1NsYXNoKCRuYW1lKTt9DQoJbGlzdCgkbmdldCwgJGlnbm9yZSkg PSBzbWRfZG9MaXN0KCRuYW1lLCBmYWxzZSwgJycsIGZhbHNlLCAkZGVsaW0sICRhbGxvd19z cGFjZXMpOw0KCSRyZXQgPSBmYWxzZTsNCg0KCSR1c2VWYWxpZCA9ICgkdmFsaWQpID8gKHNt ZF92YXJfc3RhdHVzKGFycmF5KCduYW1lJyA9PiAkbmdldFswXSwgJ3R5cGUnID0+ICdhdmFp bGFibGUsIHZhbGlkJykpID09ICIxfDEiKSA6IDE7DQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4 aXN0cygpICYmICR1c2VWYWxpZCkgew0KCQkkcnMgPSBzYWZlX3JvdygnKicsICdzbWRfdmFy cycsICduYW1lPSInLiRuZ2V0WzBdLiciJyk7DQoJCWlmICgkZGVidWcpIHsNCgkJCWVjaG8g IisrIFJBVyAvIFJFUExBQ0VEIFZBUiArKyI7DQoJCQlkbXAoJG5hbWUgLicgLyAnLiAkbmdl dFswXSk7DQoJCQllY2hvICIrKyBSRUNPUkQgKysiOw0KCQkJZG1wKCRycyk7DQoJCX0NCgkJ aWYgKCRycykgew0KCQkJJHJlcGxhY2VtZW50cyA9IGFycmF5KCk7DQoJCQlpZiAoJGluamVj dCkgew0KCQkJCWxpc3QoJGluamVjdCwgJGlnbm9yZSkgPSBzbWRfZG9MaXN0KCRpbmplY3Qs IGZhbHNlLCAnJywgZmFsc2UsICRkZWxpbSwgJGFsbG93X3NwYWNlcyk7DQoJCQkJZm9yZWFj aCAoJGluamVjdCBhcyAkc3F1aXJ0KSB7DQoJCQkJCSRudiA9IGRvX2xpc3QoJHNxdWlydCwg JHBhcmFtZGVsaW0pOw0KCQkJCQlpZiAoY291bnQoJG52KSA9PSAyKSB7DQoJCQkJCQkkcmVw bGFjZW1lbnRzWyRudlswXV0gPSAkbnZbMV07DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0N CgkJJHJldCA9IHN0cnRyKCRyc1sndmFsdWUnXSwgJHJlcGxhY2VtZW50cyk7DQoJfQ0KCXJl dHVybiAkcmV0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyX3B1dCgkYXR0 cykgew0KCXJlcXVpcmVfcGx1Z2luKCdzbWRfbGliJyk7DQoNCglleHRyYWN0KGxBdHRzKGFy cmF5KA0KCQknbmFtZScgPT4gJycsDQoJCSd2YWx1ZScgPT4gJycsDQoJCSdleHBpcmVzJyA9 PiAnJywNCgkJJ2RlbGV0ZScgPT4gJzAnLA0KCQknYWxsb3dfc3BhY2VzJyA9PiAnMCcsDQoJ CSdyZXR1cm4nID0+ICdzaWxlbnQnLA0KCQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0cykp Ow0KDQoJJHJldCA9IGZhbHNlOw0KCWlmICgkbmFtZSkgeyRuYW1lID0gZG9TbGFzaCgkbmFt ZSk7fQ0KCWlmICgkdmFsdWUpIHskdmFsdWUgPSBkb1NsYXNoKCR2YWx1ZSk7fQ0KCWlmICgk ZXhwaXJlcykgeyRleHBpcmVzID0gZG9TbGFzaCgkZXhwaXJlcyk7fQ0KCWlmIChzbWRfdmFy c190YWJsZV9leGlzdHMoKSAmJiAkbmFtZSkgew0KCQlpZiAoJGRlbGV0ZSkgew0KCQkJJHJl dCA9IHNtZF92YXJfZGVsZXRlKGFycmF5KCJuYW1lIiA9PiAkbmFtZSwgImFsbG93X3NwYWNl cyIgPT4gJGFsbG93X3NwYWNlcywgImRlYnVnIiA9PiAkZGVidWcpKTsNCgkJfSBlbHNlIHsN CgkJCSRleHBpcmVzID0gc21kX3ZhcnNfY2FsY19leHBpcnkoJGV4cGlyZXMsICRkZWJ1Zyk7 DQoJCQkkZXhwaXJ5ID0gKCRleHBpcmVzKSA/ICIsIGV4cGlyZXM9JyRleHBpcmVzJyIgOiAn JzsNCg0KCQkJLy8gUmVwbGFjZSBhbnkgPyB2YXJpYWJsZXMgd2l0aCB0aGVpciByZWFsIHZh bHVlIGNvdW50ZXJwYXJ0cyBiZWZvcmUgaW5zZXJ0aW9uLiBQbGFjZWhvbGRlcnMgYXJlIHN0 b3JlZCBpbnRhY3QNCgkJCWxpc3QoJG5pbmplY3QsICRpZ25vcmUpID0gc21kX2RvTGlzdCgk bmFtZSwgZmFsc2UsICcnLCBmYWxzZSwgJywnLCAkYWxsb3dfc3BhY2VzKTsNCgkJCWxpc3Qo JHZpbmplY3QsICRpZ25vcmUpID0gc21kX2RvTGlzdCgkdmFsdWUsIGZhbHNlLCAnJywgZmFs c2UsICcsJywgJGFsbG93X3NwYWNlcyk7DQoJCQlpZiAoJGRlYnVnKSB7DQoJCQkJZWNobyAi KysgUkFXIFZBUiArKyI7DQoJCQkJZG1wKCRuYW1lIC4nIDogJy4gJHZhbHVlKTsNCgkJCQll Y2hvICIrKyBQVVRUSU5HIElOIFZBUiAnJG5pbmplY3RbMF0nICsrIjsNCgkJCQlkbXAoJHZp bmplY3RbMF0pOw0KCQkJfQ0KCQkJJHJldCA9IHNhZmVfdXBzZXJ0KCJzbWRfdmFycyIsICJ2 YWx1ZT0nJHZpbmplY3RbMF0nJGV4cGlyeSIsICJuYW1lPSckbmluamVjdFswXSciKTsNCgkJ fQ0KCX0NCglyZXR1cm4gKCRyZXR1cm4gPT0gInNpbGVudCIpID8gJycgOiAkcmV0Ow0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBBdmFpbGFibGUgc2VwYXJhdGVseSBhbmQgYWxzbyBjYWxsZWQg aWYgc21kX3Zhcl9wdXQgZGVsZXRlPSIxIiBpcyB1c2VkDQpmdW5jdGlvbiBzbWRfdmFyX2Rl bGV0ZSgkYXR0cykgew0KCXJlcXVpcmVfcGx1Z2luKCdzbWRfbGliJyk7DQoNCglleHRyYWN0 KGxBdHRzKGFycmF5KA0KCQknbmFtZScgPT4gJycsDQoJCSdhbGxvd19zcGFjZXMnID0+ICcw JywNCgkJJ2RlYnVnJyA9PiAnMCcsDQoJKSwgJGF0dHMpKTsNCg0KCWlmICgkbmFtZSkgeyRu YW1lID0gZG9TbGFzaCgkbmFtZSk7fQ0KCWxpc3QoJG5kZWwsICRpZ25vcmUpID0gc21kX2Rv TGlzdCgkbmFtZSwgZmFsc2UsICcnLCBmYWxzZSwgJGRlbGltLCAkYWxsb3dfc3BhY2VzKTsN CgkkcmV0ID0gZmFsc2U7DQoNCglpZiAoc21kX3ZhcnNfdGFibGVfZXhpc3RzKCkpIHsNCgkJ aWYgKCRuYW1lKSB7DQoJCQkkcmV0ID0gc2FmZV9kZWxldGUoInNtZF92YXJzIiwgIm5hbWU9 JyRuZGVsWzBdJyIpOw0KCQl9DQoJfQ0KCXJldHVybjsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX3Zhcl9zdGF0dXMoJGF0dHMpIHsNCglyZXF1aXJlX3BsdWdpbignc21kX2xp YicpOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ25hbWUnID0+ICcnLA0KCQkndHlw ZScgPT4gJ3ZhbGlkJywNCgkJJ2FsbG93X3NwYWNlcycgPT4gJzAnLA0KCQkncmV0dXJuJyA9 PiAnbnVtYmVyJywNCgkJJ2RlbGltJyA9PiAnLCcsDQoJCSdvdXRkZWxpbScgPT4gJ3wnLA0K CQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJLy8gTG9va3VwIHRhYmxlcw0K CSR0eXBlT3B0cyA9IGFycmF5KCd2YWxpZCcsICdhdmFpbGFibGUnLCAndXNlJyk7DQoJJHJl dHVybk9wdHMgPSBhcnJheSgnbmFtZScsICdudW1iZXInKTsNCgkkc3RhdGkgPSBhcnJheSgN CgkJJ2F2YWlsYWJsZScgPT4gYXJyYXkoc21kX3ZhcnNfZ1R4dCgndmFyX3VuYXZhaWxhYmxl JyksIHNtZF92YXJzX2dUeHQoJ3Zhcl9hdmFpbGFibGUnKSksDQoJCSd2YWxpZCcgPT4gYXJy YXkoc21kX3ZhcnNfZ1R4dCgndmFyX2ludmFsaWQnKSwgc21kX3ZhcnNfZ1R4dCgndmFyX3Zh bGlkJykpLA0KCQkndXNlJyA9PiBhcnJheShzbWRfdmFyc19nVHh0KCd2YXJfdW51c2VkJyks IHNtZF92YXJzX2dUeHQoJ3Zhcl91c2VkJykpLA0KCQkpOw0KDQoJLy8gVmFsaWRhdGUgdGhl IG9wdGlvbnMNCglpZiAoJG5hbWUpIHskbmFtZSA9IGRvU2xhc2goJG5hbWUpO30NCglsaXN0 KCRuc3RhdCwgJGlnbm9yZSkgPSBzbWRfZG9MaXN0KCRuYW1lLCBmYWxzZSwgJycsIGZhbHNl LCAkZGVsaW0sICRhbGxvd19zcGFjZXMpOw0KCSRyZXR1cm4gPSAoaW5fYXJyYXkoJHJldHVy biwkcmV0dXJuT3B0cykpID8gJHJldHVybiA6ICRyZXR1cm5PcHRzWzBdOw0KCSR0eXBlcyA9 IGFycmF5KCk7DQoJJHR5cGUgPSBkb19saXN0KCR0eXBlLCAkZGVsaW0pOw0KCWZvcmVhY2gg KCR0eXBlIGFzICR0aGlzdHlwZSkgew0KCQkkdHlwZXNbXSA9IChpbl9hcnJheSgkdGhpc3R5 cGUsICR0eXBlT3B0cykpID8gJHRoaXN0eXBlIDogJHR5cGVPcHRzWzBdOw0KCX0NCgkkdHlw ZXMgPSBhcnJheV91bmlxdWUoJHR5cGVzKTsNCgkkb3V0ID0gYXJyYXkoKTsNCg0KCS8vIEdl dCB0aGUgcmVsZXZhbnQgcm93IGFuZCBjaGVjayB2YXJpb3VzIHBhcnRzIG9mIGl0DQoJaWYg KHNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSB7DQoJCSRycyA9IHNhZmVfcm93KCcqJywgJ3Nt ZF92YXJzJywgJ25hbWU9IicuJG5zdGF0WzBdLiciJyk7DQoJCWlmICgkZGVidWcpIHsNCgkJ CWRtcCgkcnMpOw0KCQl9DQoJCWZvcmVhY2ggKCR0eXBlcyBhcyAkdGhpc3R5cGUpIHsNCgkJ CSRyZXQgPSAwOw0KCQkJaWYgKCR0aGlzdHlwZSA9PSAiYXZhaWxhYmxlIikgew0KCQkJCSRy ZXQgPSAoY291bnQoJHJzKSA9PSAwKSA/IDAgOiAxOw0KCQkJfSBlbHNlIGlmICgkdGhpc3R5 cGUgPT0gInZhbGlkIikgew0KCQkJCSRyZXQgPSAoY291bnQoJHJzKSA+IDAgJiYgKHN0cnRv dGltZSgkcnNbJ2V4cGlyZXMnXSkgPiB0aW1lKCkgfHwgJHJzWydleHBpcmVzJ10gPT0gIjAw MDAtMDAtMDAgMDA6MDA6MDAiKSkgPyAxIDogMDsNCgkJCX0gZWxzZSBpZiAoJHRoaXN0eXBl ID09ICJ1c2UiKSB7DQoJCQkJJHJldCA9IChjb3VudCgkcnMpID4gMCAmJiAkcnNbJ3ZhbHVl J10hPSIiKSA/IDEgOiAwOw0KCQkJfQ0KCQkJJG91dFtdID0gKCRyZXR1cm49PSJuYW1lIikg PyAkc3RhdGlbJHRoaXN0eXBlXVskcmV0XSA6ICRyZXQ7DQoJCX0NCgl9DQoJcmV0dXJuIGpv aW4oJG91dGRlbGltLCAkb3V0KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3Zh cl9pZl9zdGF0dXMoJGF0dHMsICR0aGluZz0nJykgew0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSduYW1lJyA9PiAnJywNCgkJJ3R5cGUnID0+ICd2YWxpZCcsDQoJKSwgJGF0dHMpKTsN Cg0KCSRyZXQgPSBzbWRfdmFyX3N0YXR1cyhhcnJheSgNCgkJJ25hbWUnID0+ICRuYW1lLA0K CQkndHlwZScgPT4gJHR5cGUsDQoJCSkpOw0KDQoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0 aGluZywgJHJldCkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDb252ZW5pZW5jZSBzaG9ydGN1 dCBmdW5jdGlvbnMgZm9yIHNtZF92YXJfaWZfc3RhdHVzDQpmdW5jdGlvbiBzbWRfdmFyX2lm X3ZhbGlkKCRhdHRzLCAkdGhpbmc9JycpIHsNCglleHRyYWN0KGxBdHRzKGFycmF5KCduYW1l JyA9PiAnJyksICRhdHRzKSk7DQoJcmV0dXJuIHNtZF92YXJfaWZfc3RhdHVzKGFycmF5KCdu YW1lJyA9PiAkbmFtZSwgJ3R5cGUnID0+ICd2YWxpZCcpLCAkdGhpbmcpOw0KfQ0KZnVuY3Rp b24gc21kX3Zhcl9pZl91c2VkKCRhdHRzLCAkdGhpbmc9JycpIHsNCglleHRyYWN0KGxBdHRz KGFycmF5KCduYW1lJyA9PiAnJyksICRhdHRzKSk7DQoJcmV0dXJuIHNtZF92YXJfaWZfc3Rh dHVzKGFycmF5KCduYW1lJyA9PiAkbmFtZSwgJ3R5cGUnID0+ICd1c2UnKSwgJHRoaW5nKTsN Cn0NCmZ1bmN0aW9uIHNtZF92YXJfaWZfYXZhaWxhYmxlKCRhdHRzLCAkdGhpbmc9JycpIHsN CglleHRyYWN0KGxBdHRzKGFycmF5KCduYW1lJyA9PiAnJyksICRhdHRzKSk7DQoJcmV0dXJu IHNtZF92YXJfaWZfc3RhdHVzKGFycmF5KCduYW1lJyA9PiAkbmFtZSwgJ3R5cGUnID0+ICdh dmFpbGFibGUnKSwgJHRoaW5nKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQbHVnaW4tc3Bl Y2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFzIHJlcXVpcmVkDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyc19nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkp IHsNCgkkbGFuZyA9IGFycmF5KA0KCQknc21kX3ZhcnMnID0+ICdWYXJpYWJsZXMnLA0KCQkn YWRkX2xhYmVsJyA9PiAnQWRkJywNCgkJJ2NhbmNlbF9sYWJlbCcgPT4gJ2NhbmNlbCcsDQoJ CSdjbGVhcicgPT4gJ2NscicsDQoJCSdjb250cm9sJyA9PiAnUGx1Z2luIGNvbnRyb2wnLA0K CQknZGVsZXRlX2ZhaWxlZCcgPT4gJ1ZhcmlhYmxlIE5PVCBkZWxldGVkLicsDQoJCSdkZWxl dGVkJyA9PiAnVmFyaWFibGUgSURzIGRlbGV0ZWQ6IHtpZH0nLA0KCQknZGVsZXRlZF9udW0n ID0+ICdWYXJpYWJsZXMgZGVsZXRlZDoge251bX0nLA0KCQknZHVwbGljYXRlJyA9PiAnOiBh bHJlYWR5IGV4aXN0cy4nLA0KCQknZWRpdCcgPT4gJ0VkaXQgdmFyaWFibGVzJywNCgkJJ2Vt cHR5X2V4cGlyeScgPT4gJy0nLA0KCQknaW5zZXJ0X2ZhaWxlZCcgPT4gJ0Nhbm5vdCBhZGQg dmFyJywNCgkJJ2luc2VydGVkJyA9PiAnVmFyIGluc2VydGVkLiAnLA0KCQknbGlzdF90aXRs ZScgPT4gJ0RlZmluZWQgVmFyaWFibGVzJywNCgkJJ25vdF9hdmFpbGFibGUnID0+ICdzbWRf dmFycyB0YWJsZSBub3QgaW5zdGFsbGVkJywNCgkJJ3Blcl9wYWdlJyA9PiAnU2hvdyB7cGFn ZWJ5fSBwZXIgcGFnZScsDQoJCSdwdXJnZV9leHBpcmVkJyA9PiAnRGVsZXRlIGFsbCBleHBp cmVkIHZhcmlhYmxlczogYXJlIHlvdSBzdXJlPycsDQoJCSdwdXJnZV9leHBpcmVkX2xhYmVs JyA9PiAnUHVyZ2UgZXhwaXJlZCcsDQoJCSd0YWJsZV9pbnN0YWxsX2xhYmVsJyA9PiAnSW5z dGFsbCB0YWJsZScsDQoJCSd0YWJsZV9pbnN0YWxsZWQnID0+ICdWYXJzIHRhYmxlIGluc3Rh bGxlZC4gJywNCgkJJ3RhYmxlX25vdF9pbnN0YWxsZWQnID0+ICdWYXJzIHRhYmxlIE5PVCBp bnN0YWxsZWQuICcsDQoJCSd0YWJsZV9ub3RfcmVtb3ZlZCcgPT4gJ1ZhcnMgdGFibGUgTk9U IHJlbW92ZWQuICcsDQoJCSd0YWJsZV9yZW1vdmVfY2hlY2snID0+ICdEZWxldGUgZW50aXJl IHNtZF92YXJzIHRhYmxlOiBhcmUgeW91IHN1cmU/JywNCgkJJ3RhYmxlX3JlbW92ZV9sYWJl bCcgPT4gJ1JlbW92ZSB0YWJsZScsDQoJCSd0YWJsZV9yZW1vdmVkJyA9PiAnVmFycyB0YWJs ZSByZW1vdmVkLiAnLA0KCQkndG9nZ2xlJyA9PiAndG9nJywNCgkJJ3VwZGF0ZV9mYWlsZWQn ID0+ICdWYXIgbm90IHVwZGF0ZWQnLA0KCQkndXBkYXRlZCcgPT4gJ1ZhciB1cGRhdGVkLiAn LA0KCQkndmFyX2F2YWlsYWJsZScgPT4gJ2F2YWlsYWJsZScsDQoJCSd2YXJfaW52YWxpZCcg PT4gJ2V4cGlyZWQnLA0KCQkndmFyX3VuYXZhaWxhYmxlJyA9PiAndW5hdmFpbGFibGUnLA0K CQkndmFyX3VudXNlZCcgPT4gJ2VtcHR5JywNCgkJJ3Zhcl91c2VkJyA9PiAndXNlZCcsDQoJ CSd2YXJfdmFsaWQnID0+ICdjdXJyZW50JywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1sk d2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjQ6ImhlbHAiO3M6MTQ1 MjA6Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5zbWRfdmFy czwvaDE+CgoJPHA+QSBzZW1pLXBlcm1hbmVudCBnZW5lcmljIHN0b3JhZ2UgcGx1Z2luLjwv cD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5BY3Rz IGxpa2UgYSB1c2VyLWNvbnRyb2xsYWJsZSBwcmVmcyB0YWJsZSBmb3Igc3RvcmluZyBhcmJp dHJhcnkgbmFtZS12YWx1ZSBwYWlyczwvbGk+CgkJPGxpPk9wdGlvbmFsIGV4cGlyeSBmb3Ig ZWFjaCBwYWlyPC9saT4KCQk8bGk+U3RvcmUgYW5kIHJldHJpZXZlIGFueXRoaW5nIHlvdSBs aWtlLCBmcm9tIGZpeGVkIHRleHQgdG8gY29tcGxldGUgPHNwYW4gY2xhc3M9ImNhcHMiPlNR TDwvc3Bhbj4gcXVlcnkgc3R1YnM8L2xpPgoJCTxsaT5WYXJpYWJsZXMgY2FuIGJlIGNyZWF0 ZWQgdmlhIGFuIGFkbWluLXNpZGUgbGlzdCBvciBvbi10aGUtZmx5IGR1cmluZyBjbGllbnQt c2lkZSBwYWdlIGxvYWQ8L2xpPgoJCTxsaT5WYXJpYWJsZSBzdWJzdGl0dXRpb24gc3VwcG9y dGVkIGF0IHBhZ2UgcnVuLXRpbWUgZm9yIGJvdGggJiM4MjE2O25hbWUmIzgyMTc7IGFuZCAm IzgyMTY7dmFsdWUmIzgyMTc7LiBTdG9yZSB2YXJpYWJsZXMgd2l0aCBwbGFjZWhvbGRlciBp bmZvcm1hdGlvbiBhbmQgcGx1ZyB0aGUgaW5mb3JtYXRpb24gaW4gd2hlbiB0aGUgcGFnZSBs b2FkczwvbGk+CgkJPGxpPldoZW4gcmV0cmlldmluZyBpbmZvcm1hdGlvbiwgcGxhY2Vob2xk ZXJzIGFuZCB2YXJpYWJsZSBuYW1lcyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhbnkgdmFsdWVz IGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSwgZmlsZSwgbGluayBvciA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPi9zZXJ2ZXIgdmFyaWFibGU8L2xpPgoJCTxsaT5SdWRpbWVudGFy eSBzdGF0dXMgY29uZGl0aW9uYWxzICh0ZXN0IGlmIHZhcmlhYmxlIGV4aXN0cywgaXMgdXNl ZCBvciBoYXMgZXhwaXJlZCk8L2xpPgoJCTxsaT5Xb3JrcyB2ZXJ5IHdlbGwgd2l0aCBzbWRf aWY8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImFwcHMiPlBvc3NpYmxlIGFwcGxpY2F0aW9uczwv aDI+CgoJPHVsPgoJCTxsaT5Gb3JtLWJhc2VkIHF1ZXJ5aW5nLiBTdXBwbHkgdXNlcnMgd2l0 aCBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZm9ybSBvbiBhIHBhZ2UuIFdo ZW4gaXQgaXMgc3VibWl0dGVkLCByZXRyaWV2ZSB0aGUgdmFsdWVzIHRoZXkgc3VwcGx5IGFu ZCBwbHVnIHRoZW0gaW50byBhIHByZS1wcmVwYXJlZCA8c3BhbiBjbGFzcz0iY2FwcyI+U1FM PC9zcGFuPiBxdWVyeSB2YXJpYWJsZS4gVGhyb3cgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5T UUw8L3NwYW4+IGF0IHNtZF9xdWVyeSB0byBwZXJmb3JtIGFkdmFuY2VkIHByb2R1Y3Qgc2Vh cmNoZXMgZnJvbSBjdXN0b20gZmllbGQgZGF0YTwvbGk+CgkJPGxpPlN0b3JlIHNpdGUgdmlz aXRvciBwcmVmZXJlbmNlcy4gVXNpbmcgbWVtX3NlbGZfcmVnaXN0ZXIsIHVzZXJzIGNhbiBj cmVhdGUgYWNjb3VudHMgZm9yIHRoZW1zZWx2ZXMgc28gdGhhdCBvbiAmIzgyMjA7YWRtaW4t bGlrZSYjODIyMTsgcGFnZXMgeW91IGNhbiBzdG9yZSBhbmQgcmV0cmlldmUgcGVyLXZpc2l0 b3IgcHJlZnM8L2xpPgoJCTxsaT5UcmFjayBmb3JtIGRhdGEgYWNyb3NzIG11bHRpcGxlIHBh Z2VzLCBsaWtlIGEgd2ViLWJhc2VkIHdpemFyZC4gQWZ0ZXIgZWFjaCBwYXJ0IG9mIHRoZSB3 aXphcmQgaXMgc3VibWl0dGVkLCBzdG9yZSB0aGUgdmFsdWVzIGluIHRlbXBvcmFyeSBzbWRf dmFycy4gV2hlbiB0aGUgd2l6YXJkIGlzIGNvbXBsZXRlZCBhbmQgdGhlIHZpc2l0b3IgaGl0 cyB0aGUgZmluYWwgc3VibWl0IGJ1dHRvbiwgcmV0cmlldmUgYWxsIHZhcmlhYmxlcyBzdG9y ZWQgZHVyaW5nIHRoZSBzZXNzaW9uLCBkbyBzb21ldGhpbmcgd2l0aCB0aGVtIGFuZCB0aGVu IGRlbGV0ZSB0aGVtPC9saT4KCQk8bGk+TWFueSwgbWFueSBtb3JlPC9saT4KCTwvdWw+CgoJ PGgyIGlkPSJhdXRob3IiPkF1dGhvcjwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT4uIEZvciBvdGhlciBzb2Z0 d2FyZSBieSBtZSwgb3IgdG8gbWFrZSBhIGRvbmF0aW9uLCBzZWUgdGhlIDxhIGhyZWY9Imh0 dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4uPC9wPgoKCTxoMiBp ZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwIGNs YXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L2Rvd25sb2Fkcy9zbWRfbGliX3YwLjMzLnR4dCI+c21kX2xpYiB2MC4zMzwvYT4gdG8gYmUg aW5zdGFsbGVkIGFuZCBhY3RpdmF0ZWQuPC9wPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4g ZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzk4 MC9zbWRfdmFycyI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2Rl IGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBs dWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uPC9wPgoKCTxwPkhv cCBvdmVyIHRvIHRoZSBBZG1pbiAtJmd0OyBFeHRlbnNpb25zIC0mZ3Q7IFZhcmlhYmxlcyB0 YWIgYW5kIGhpdCAmIzgyMTY7SW5zdGFsbCB0YWJsZSYjODIxNzssIHRoZW4gYWRkIHZhcmlh YmxlcyB0byB5b3VyIGhlYXJ0JiM4MjE3O3MgY29udGVudC4gVmlzaXQgdGhlIDxhIGhyZWY9 Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yNzMzNCI+ Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3Vj Y2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gcmVtb3ZlIHRo ZSBwbHVnaW4sIHNpbXBseSBoaXQgdGhlICYjODIxNjtSZW1vdmUgdGFibGUmIzgyMTc7IGJ1 dHRvbiBvbiB0aGUgVmFyaWFibGVzIHRhYiBhbmQgZmluYWxseSBkZWxldGUgdGhlIHBsdWdp biBmcm9tIHRoZSBBZG1pbi0mZ3Q7UGx1Z2lucyB0YWIuIElmIGl0IGlzIG5vIGxvbmdlciBp biB1c2UgYnkgYW55IG90aGVyIHBsdWdpbnMgeW91IG1heSBhbHNvIGRlbGV0ZSBzbWRfbGli LjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+VGhlIGFkbWluLXNpZGUg c2NyZWVuIHNpbXBseSBhbGxvd3MgeW91IHRvIGFkZCB2YXJpYWJsZSBuYW1lcyBhbmQgYXNz b2NpYXRlZCB2YWx1ZXMuIFlvdSBjYW4gcHV0IGFuIG9wdGlvbmFsIGV4cGlyeSB0aW1lIGFn YWluc3QgZWFjaCB2YWx1ZSBpZiB5b3Ugd2lzaCBpbiB0aGUgZm9ybWF0ICYjODIyMDs8c3Bh biBjbGFzcz0iY2FwcyI+WVlZWTwvc3Bhbj4tTU0tREQgSEg6TU46U1MmIzgyMjE7LjwvcD4K Cgk8cD5BbHRlcm5hdGl2ZWx5LCB1c2luZyBhIHNwZWNpYWwgc3ludGF4IGJlZ2lubmluZyB3 aXRoIGFuIEAgc2lnbiB5b3UgY2FuIHNwZWNpZnkgYW4gb2Zmc2V0IHNvbWUgdGltZSBpbiB0 aGUgZnV0dXJlIGZyb20gdGhlIGN1cnJlbnQgdGltZS4gRm9yIGV4YW1wbGUgcHV0dGluZyAm IzgyMjA7QDF3JiM4MjIxOyBpbnRvIHRoZSBleHBpcnkgYm94IHdpbGwgc2V0IHRoZSB2YXJp YWJsZSB0byBleHBpcmUgaW4gMSB3ZWVrIGZyb20gdGhlIHRpbWUgeW91IGhpdCB0aGUgQWRk IGJ1dHRvbi4gJiM4MjIwO0AyMG0mIzgyMjE7IHNldHMgdGhlIHZhcmlhYmxlIHRvIGV4cGly ZSBpbiAyMCBtaW51dGVzJiM4MjE3OyB0aW1lIGFuZCAmIzgyMjA7QDEwZCYjODIyMTsgd2ls bCBleHBpcmUgdGhlIHZhcmlhYmxlIGFmdGVyIDEwIGRheXMuIFRoZSBvcHRpb25zIGFyZSB0 aGUgaW5pdGlhbCBsZXR0ZXJzIGZyb206IDxjb2RlPnM8L2NvZGU+ZWNvbmQsIDxjb2RlPm08 L2NvZGU+aW51dGUsIDxjb2RlPmg8L2NvZGU+b3VyLCA8Y29kZT5kPC9jb2RlPmF5LCA8Y29k ZT53PC9jb2RlPmVlayBvciA8Y29kZT55PC9jb2RlPmVhci4gTm90ZSB0aGF0IG1vbnRocyBh cmUgbm90IHN1cHBvcnRlZCBiZWNhdXNlIHRoZSBtYXRocyBpcyB0cmlja3k6IHVzZSB3ZWVr cyBpbnN0ZWFkITwvcD4KCgk8cD5BbGwgdGhlIHVzdWFsIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+LXN0eWxlIGNvbnRyb2xzIGFyZSBhdmFpbGFibGUgb25jZSBhIHZhcmlhYmxl IGhhcyBiZWVuIHN0b3JlZC4gWW91IGNhbiBoaXQgRWRpdCB0byBhbWVuZCBhbnkgb2YgdGhl IGluZm8gYWJvdXQgYSB2YXJpYWJsZSBidXQgeW91IG1heSBub3QgaGF2ZSBkdXBsaWNhdGUg bmFtZXMuIEhpdCB0aGUgJiM4MjE2O3gmIzgyMTc7IHRvIGRlbGV0ZSBhIHNpbmdsZSBlbnRy eSBvciB1c2UgdGhlIGNoZWNrYm94ZXMgYW5kIEFsbC9Ob25lL1JhbmdlICZhbXA7IERlbGV0 ZSBjb250cm9scyBhdCB0aGUgYm90dG9tIGZvciBwZXJmb3JtaW5nIG1hc3MgY2hhbmdlcy48 L3A+CgoJPHA+WW91IGNhbiBzb3J0IHRoZSBsaXN0cyBieSBjbGlja2luZyB0aGUgY29sdW1u IGhlYWRpbmdzIG9yIGZpbHRlciB0aGUgbGlzdCB1c2luZyB0aGUgc2VhcmNoIGZvcm0gYXQg dGhlIHRvcC4gSXQmIzgyMTc7cyBmYWlybHkgc3RhbmRhcmQsIHRoZSBvbmx5IG9uZSB0aGF0 IGhhcyBzcGVjaWFsIHN5bnRhYXggaXMgdGhlIEV4cGlyZWQgc2VhcmNoIG9wdGlvbi4gVmFs aWQgZW50cmllcyB0byBzZWFyY2ggZm9yIGFyZSA8Y29kZT55ZXM8L2NvZGU+LCA8Y29kZT5u bzwvY29kZT4sIDxjb2RlPi08L2NvZGU+ICh0byBzaG93IGVudHJpZXMgdGhhdCBoYXZlIG5v IGV4cGlyeSkgb3IgPGNvZGU+bm8tPC9jb2RlPiB0byBzaG93IGVudHJpZXMgdGhhdCBoYXZl IGVpdGhlciBub3QgZXhwaXJlZCBvciBoYXZlIG5vdCBoYWQgYW4gZXhwaXJ5IHNldC48L3A+ CgoJPHA+QXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBsaXN0IGlzIGEgYnV0dG9uIGxhYmVsbGVk ICYjODIxNjtQdXJnZSBleHBpcmVkJiM4MjE3Oy4gSGl0dGluZyB0aGF0IGFuZCBjb25maXJt aW5nIHdpbGwgZGVsZXRlIGFsbCB2YXJpYWJsZXMgdGhhdCBhcmUgb3V0IG9mIGRhdGUgKGku ZS4gZXhwaXJlZCA9IFllcykuPC9wPgoKCTxoMiBpZD0ic3VicyI+U3Vic3RpdHV0aW9uczwv aDI+CgoJPHA+V2hlbiB5b3Ugc3RvcmUgdmFyaWFibGVzIHlvdSBjYW4gc3BlY2lmeSB0aGF0 IGNlcnRhaW4gZGF0YSBpcyBub3Qga25vd24gYXQgc3RvcmFnZSB0aW1lIGJ1dCB3aWxsIGJl IHByb3ZpZGVkIGF0IHJ1biB0aW1lLiBJdCBjYW4gYmUgYW55IHRleHQgeW91IGxpa2UgYnV0 IGZvciBjb252ZW5pZW5jZSBhbmQgZm9yIGVhc2Ugb2YgcmVwbGFjZW1lbnQsIGEgc3RhbmRh cmQgdGVjaG5pcXVlIGlzIHRvIHN1cnJvdW5kIHJlcGxhY2VtZW50IHZhcmlhYmxlcyB3aXRo IDxjb2RlPns8L2NvZGU+IGFuZCA8Y29kZT59PC9jb2RlPiBtYXJrcy4gU28gaWYgeW91IG1h ZGUgYSB2YXJpYWJsZSBjYWxsZWQgJiM4MjIwO2hlbGxvJiM4MjIxOyBhbmQgeW91IG1hZGUg aXRzIHZhbHVlIDxjb2RlPkdyZWV0aW5ncyB7dXNlcn0sIEkgaG9wZSB5b3UgYXJlIHdlbGw8 L2NvZGU+IHlvdSBjb3VsZCBsYXRlciBpbmplY3QgdGhlIDxjb2RlPj9hdXRob3JpZDwvY29k ZT4gdmFsdWUgaW50byB0aGlzIHZhcmlhYmxlIHRvIGN1c3RvbWlzZSB0aGUgbWVzc2FnZS4g U2VlIDxhIGhyZWY9IiNnZXQiPnNtZF92YXJfZ2V0PC9hPi48L3A+CgoJPHA+VGhpcyBpcyBi eSBubyBtZWFucyB0aGUgb25seSB3YXkgb2Ygc3Vic3RpdHV0aW5nIHZhbHVlcyAmIzgyMTI7 IHlvdSBjYW4gdXNlIHlvdXIgaW1hZ2luYXRpb24gJiM4MjEyOyBidXQgaXQgaXMgdGhlIGNv bnZlbnRpb24gdXNlZCBpbiB0aGUgaGVscCB0ZXh0LjwvcD4KCgk8aDIgaWQ9InRhZ3MiPlRh Z3M8L2gyPgoKCTxoMyBpZD0iZ2V0Ij5zbWRfdmFyX2dldDwvaDM+CgoJPHA+UmV0cmlldmUg dGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgYW5kIG9wdGlvbmFsbHkgaW5qZWN0IHNvbWUgc3Vi c3RpdHV0aW9uIGRhdGEgaW50byB0aGUgcmVzdWx0LiBBdHRyaWJ1dGVzIGFyZTo8L3A+CgoJ PHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm5hbWU8L3NwYW4+IDogdGhlIHZh cmlhYmxlIG5hbWUgdG8gcmV0cmlldmUuIENhbiBiZSBmaXhlZCB0ZXh0IG9yIG1heSBpbmNs dWRlIHZhcmlhYmxlcyByZWFkIGZyb20gYW55IGZpZWxkIGluIHRoZSBjdXJyZW50IHBhZ2Us IGZpbGUsIGxpbmsgb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4uIEZvciBleGFt cGxlIDxjb2RlPm5hbWU9JnF1b3Q7cHJlZiZxdW90OzwvY29kZT4gd2lsbCByZWNhbGwgdGhh dCBuYW1lZCB2YXJpYWJsZS4gPGNvZGU+bmFtZT0mcXVvdDtwcmVmXz9hdXRob3JpZCZxdW90 OzwvY29kZT4gd2lsbCByZXRyaWV2ZSBhIHZhcmlhYmxlIHdpdGggYSBuYW1lIG1hZGUgdXAg b2YgdGhlIHdvcmQgJiM4MjE2O3ByZWYmIzgyMTc7LCBhbiB1bmRlcnNjb3JlIGFuZCB0aGVu IHRoZSBhdXRob3Igb2YgdGhlIGN1cnJlbnQgYXJ0aWNsZS4gU2ltaWxhcmx5IGlmIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB3YXMgPGNvZGU+aHR0cDovL3NpdGUuY29t L2luZGV4LnBocD9tYXA9eWVzJmFtcDt6b289Y2hlc3RlcjwvY29kZT4geW91IGNvdWxkIHVz ZSA8Y29kZT5uYW1lPSZxdW90O2xvY2F0aW9uXz96b28mcXVvdDs8L2NvZGU+IHRvIGdyYWIg dGhlIHZhcmlhYmxlIHRoYXQgZGlzcGxheWVkIHRoZSBsb2NhdGlvbiBvZiBDaGVzdGVyIHpv bzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+dmFsaWQ8L3NwYW4+IDogYnkg ZGVmYXVsdCwgYW55IHZhbHVlIHRoYXQgaGFzIGV4cGlyZWQgd2lsbCA8ZW0+bm90PC9lbT4g YmUgcmV0cmlldmVkLiBTZXQgdGhpcyBhdHRyaWJ1dGUgdG8gPGNvZGU+MDwvY29kZT4gdG8g YWxsb3cgdmFsdWVzIHRvIGJlIHJldHJpZXZlZCByZWdhcmRsZXNzIG9mIGV4cGlyeS4gTm90 ZSB0aGF0IGFueSB2YWx1ZXMgd2l0aG91dCBhbiBleHBpcnkgc2V0IGFyZSBhbHdheXMgY29u c2lkZXJlZCB2YWxpZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+YWxsb3df c3BhY2VzPC9zcGFuPiA6IHdoZXRoZXIgdG8gYWxsb3cgc3BhY2VzIGluIDxjb2RlPj88L2Nv ZGU+IHZhcmlhYmxlIG5hbWVzLiBEZWZhdWx0IGlzIDAgKG5vKS4gVXNlZnVsIGlmIHlvdXIg Y3VzdG9tIGZpZWxkIG5hbWVzIGhhdmUgc3BhY2VzIGluIHRoZW0sIGJ1dCBjYW4gY2F1c2Ug cHJvYmxlbXMgd2l0aCBtYXRjaGluZyBzbyB3YXRjaCBvdXQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPmluamVjdDwvc3Bhbj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0 IG9mIHN1YnN0aXR1dGlvbnMgdG8gbWFrZS4gRGVmaW5lIHRoZW0gbGlrZSB0aGlzOiA8Y29k ZT5pbmplY3Q9JnF1b3Q7e3VzZXJ9OkRhdmUsIHtsb2dpbn06IGRhdmVwJnF1b3Q7PC9jb2Rl Pi4gSWYgdGhlIHRleHQge3VzZXJ9IG9yIHtsb2dpbn0gYXBwZWFyIGluIHRoZSByZXRyaWV2 ZWQgdmFyaWFibGUmIzgyMTc7cyB2YWx1ZSB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0 aGUgcmVsZXZhbnQgd29yZHMuIE5vdGUgdGhhdCB0aGUgcmVwbGFjZWQgd29yZHMgbWF5IGNv bnRhaW4gPGNvZGU+PzwvY29kZT4gdmFyaWFibGVzIHRvIHJlYWQgZnJvbSB0aGUgY3VycmVu dCBhcnRpY2xlLCBmaWxlLCBsaW5rIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ IHZhcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZGVsaW08L3NwYW4+IDog dGhlIGRlbGltaXRlciBiZXR3ZWVuIGRlZmluaXRpb25zIGluIHRoZSA8Y29kZT5pbmplY3Q8 L2NvZGU+IGF0dHJpYnV0ZS4gRGVmYXVsdCBpcyBhIDxjb2RlPiw8L2NvZGU+IChjb21tYSk8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnBhcmFtZGVsaW08L3NwYW4+IDog dGhlIGRlbGltaXRlciBiZXR3ZWVuIGEgcmVwbGFjZW1lbnQgdmFyaWFibGUgYW5kIGl0cyBy ZXBsYWNlbWVudCB0ZXh0IGluIHRoZSA8Y29kZT5pbmplY3Q8L2NvZGU+IGF0dHJpYnV0ZS4g RGVmYXVsdCBpcyBhIDxjb2RlPjo8L2NvZGU+IChjb2xvbik8L2xpPgoJPC91bD4KCgk8aDMg aWQ9InB1dCI+c21kX3Zhcl9wdXQ8L2gzPgoKCTxwPlN0b3JlIHRoZSB2YWx1ZSBvZiBhIHZh cmlhYmxlLCByZXBsYWNpbmcgPGNvZGU+PzwvY29kZT4gdmFyaWFibGVzIHdpdGggdmFsdWVz IGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSwgZmlsZSwgbGluayBvciA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPiB2YXIuIEF0dHJpYnV0ZXMgYXJlOjwvcD4KCgk8dWw+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+bmFtZTwvc3Bhbj4gOiB0aGUgbmFtZSB0byBzdG9y ZSB0aGUgdmFyaWFibGUgdW5kZXIuIENhbiBiZSBhIGZ4ZWQgc3RyaW5nIG9yIG1hZGUgdXAg b2YgPGNvZGU+PzwvY29kZT4gdmFyaWFibGVzIGp1c3QgbGlrZSA8YSBocmVmPSIjZ2V0Ij5z bWRfdmFyX2dldDwvYT4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj52YWx1 ZTwvc3Bhbj4gOiB0aGUgdmFsdWUgdG8gZ2l2ZSB0aGUgdmFyaWFibGUuIEFnYWluLCBjYW4g YmUgYSBmeGVkIHN0cmluZyBvciBtYWRlIHVwIG9mIDxjb2RlPj88L2NvZGU+IHZhcmlhYmxl cyBhbmQgY2FuIGluY2x1ZGUgcGxhY2Vob2xkZXJzIHRoYXQgbWF5IGJlIHVzZWQgZm9yIGxh dGVyIHN1YnN0aXR1dGlvbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZXhw aXJlczwvc3Bhbj4gOiB0aGUgZXhwaXJ5IGRhdGUgaW4gdGhlIGZvcm1hdCAmIzgyMjA7PHNw YW4gY2xhc3M9ImNhcHMiPllZWVk8L3NwYW4+LU1NLUREIEhIOk1OOlNTJiM4MjIxOyBvciBA IG5vdGF0aW9uIHRvIHNwZWNpZnkgYSBmdXR1cmUgb2Zmc2V0IGZyb20gbm93PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5kZWxldGU8L3NwYW4+IDogc2V0IHRvIDxjb2Rl PjE8L2NvZGU+IHRvIHJlbW92ZSB0aGUgdmFyaWFibGUgaW5zdGVhZCBvZiBzdG9yaW5nIGl0 LiBTaW1wbHkgY2FsbHMgPGEgaHJlZj0iI2RlbCI+c21kX3Zhcl9kZWxldGU8L2E+PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5hbGxvd19zcGFjZXM8L3NwYW4+IDogd2hl dGhlciB0byBhbGxvdyBzcGFjZXMgaW4gPGNvZGU+PzwvY29kZT4gdmFyaWFibGUgbmFtZXMu IERlZmF1bHQgaXMgMCAobm8pPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5y ZXR1cm48L3NwYW4+IDogd2hhdCB0byBzaG93IG9uIHRoZSBzY3JlZW4gaWYgYW55dGhpbmcu IEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGU+c2lsZW50PC9jb2RlPiBzbyB5b3Ug d2lsbCBzZWUgbm8gb3V0cHV0IGJ1dCBzZXR0aW5nIGl0IHRvIDxjb2RlPjE8L2NvZGU+IHdp bGwgcmV0dXJuIGEgc3RhdHVzIGNvZGUuIFBvc3NpYmx5IHVzZWZ1bCB3aGVuIHRlc3Rpbmcg dGhlIHJldHVybiB2YWx1ZSBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIHVzaW5nIGEgcGx1Z2lu IGxpa2Ugc21kX2lmPC9saT4KCTwvdWw+CgoJPHA+Tm90ZXM6PC9wPgoKCTx1bD4KCQk8bGk+ SWYgdGhlIG5hbWUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGUgdmFyaWFibGUgd2lsbCBi ZSBjcmVhdGVkPC9saT4KCQk8bGk+SWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlIHZhbHVlIHdp bGwgYmUgdXBkYXRlZDwvbGk+CgkJPGxpPllvdSBtYXkgc3RvcmUgYSB2YXJpYWJsZSB3aXRo IGFuIGVtcHR5IHZhbHVlPC9saT4KCQk8bGk+SWYgbm8gZXhwaXJ5IGlzIHNwZWNpZmllZCwg dGhlIGV4cGlyeSByZW1haW5zIHRoZSBzYW1lPC9saT4KCQk8bGk+SWYgYW4gZXhwaXJ5IChv ciBhbiBvZmZzZXQgZXhwaXJ5IHVzaW5nIHRoZSBAIG5vdGF0aW9uKSBpcyBzcGVjaWZpZWQs IHRoZSBleHBpcnkgd2lsbCBiZSB1cGRhdGVkIGFzIHdlbGw8L2xpPgoJPC91bD4KCgk8aDMg aWQ9ImRlbCI+c21kX3Zhcl9kZWxldGU8L2gzPgoKCTxwPlJlbW92ZXMgYSB2YXJpYWJsZSBm cm9tIHRoZSB0YWJsZS4gQXR0cmlidXRlczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFz cz0iYXR0LW5hbWUiPm5hbWU8L3NwYW4+IDogdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRv IHJlbW92ZS4gQ2FuIHVzZSA8Y29kZT4/PC9jb2RlPiB2YXJzIHRvIG1ha2UgdXAgdGhlIG5h bWUgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmFsbG93 X3NwYWNlczwvc3Bhbj4gOiB3aGV0aGVyIHRvIGFsbG93IHNwYWNlcyBpbiA8Y29kZT4/PC9j b2RlPiB2YXJpYWJsZSBuYW1lcy4gRGVmYXVsdCBpcyAwIChubyk8L2xpPgoJPC91bD4KCgk8 aDMgaWQ9InN0YXQiPnNtZF92YXJfc3RhdHVzPC9oMz4KCgk8cD5RdWVyaWVzIHRoZSBzdGF0 dXMgb2YgYSB2YXJpYWJsZSBmb3IgdXAgdG8gdGhyZWUgdHlwZXMgb2YgaW5mb3JtYXRpb246 PC9wPgoKCTxvbD4KCQk8bGk+YXZhaWxhYmxlIDogZG9lcyB0aGUgdmFyaWFibGUgZXhpc3Qg YXQgYWxsPC9saT4KCQk8bGk+dXNlIDogZG9lcyB0aGUgdmFyaWFibGUmIzgyMTc7cyB2YWx1 ZSBjb250YWluIHNvbWUgZGF0YSAob3IgaXMgaXQgZW1wdHkpPC9saT4KCQk8bGk+dmFsaWQg OiBpcyB0aGUgdmFyaWFibGUgY3VycmVudCAoaS5lIG5vdCBleHBpcmVkKTwvbGk+Cgk8L29s PgoKCTxwPlRoZSBvdXRwdXQgb2YgdGhpcyB0YWcgaXMgdXNlZnVsIHRvIGluc2VydCBpbnRv IHNtZF9pZi48L3A+CgoJPHA+QXR0cmlidXRlczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPm5hbWU8L3NwYW4+IDogdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxl IHRvIHF1ZXJ5LiBDYW4gdXNlIDxjb2RlPj88L2NvZGU+IHZhcnMgdG8gbWFrZSB1cCB0aGUg bmFtZSBpZiB5b3Ugd2lzaDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+YWxs b3dfc3BhY2VzPC9zcGFuPiA6IHdoZXRoZXIgdG8gYWxsb3cgc3BhY2VzIGluIDxjb2RlPj88 L2NvZGU+IHZhcmlhYmxlIG5hbWVzLiBEZWZhdWx0IGlzIDAgKG5vKTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHQtbmFtZSI+dHlwZTwvc3Bhbj4gOiBjb21tYS1zZXBhcmF0ZWQgbGlz dCBvZiB0eXBlcyBvZiBpbmZvcm1hdGlvbiB5b3Ugd2lzaCB0byBrbm93LiBEZWZhdWx0IGlz IDxjb2RlPnZhbGlkPC9jb2RlPiBidXQgeW91IG1heSBzcGVjaWZ5IG9uZSBvciBtb3JlIG9m OiA8Y29kZT52YWxpZDwvY29kZT4sIDxjb2RlPnVzZTwvY29kZT4gb3IgPGNvZGU+YXZhaWxh YmxlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+cmV0dXJuPC9z cGFuPiA6IHdoYXQgdG8gcmV0dXJuIGZyb20gdGhlIGNhbGwuIERlZmF1bHQgaXMgPGNvZGU+ bnVtYmVyPC9jb2RlPiB3aGljaCB3aWxsIHJldHVybiBhIDxjb2RlPjE8L2NvZGU+IGlmIGVh Y2ggPGNvZGU+dHlwZTwvY29kZT4gb2YgaW5mbyBpcyBhIHBvc2l0aXZlIG91dGNvbWUgb3Ig PGNvZGU+MDwvY29kZT4gaWYgaXQgaXMgbmVnYXRpdmUuIFlvdSBtYXkgYWxzbyBzcGVjaWZ5 IDxjb2RlPm5hbWU8L2NvZGU+IHdoaWNoIHdvdWxkIGluc3RlYWQgcmV0dXJuIG1vcmUgaHVt YW4tZnJpZW5kbHkgdGVybXMgdGhhdCB5b3UgbWlnaHQgY2hvb3NlIHRvIGRpc3BsYXkgb24g eW91ciBwYWdlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5kZWxpbTwvc3Bh bj4gOiB0aGUgZGVsaW1pdGVyIHVzZWQgYmV0d2VlbiA8Y29kZT50eXBlPC9jb2RlPnMuIERl ZmF1bHQgaXMgYSA8Y29kZT4sPC9jb2RlPiAoY29tbWEpPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dC1uYW1lIj5vdXRkZWxpbTwvc3Bhbj4gOiB3aGVuIHVzaW5nIG1vcmUgdGhhbiBv bmUgPGNvZGU+dHlwZTwvY29kZT4gdGhlIHZhbHVlcyBhcmUgY29uY2F0ZW5hdGVkIGludG8g YSBzaW5nbGUgc3RyaW5nLCBlYWNoIHNlcGFyYXRlZCBieSB0aGlzIGRlbGltaXRlci4gRGVm YXVsdCBpcyBhIDxjb2RlPnw8L2NvZGU+IChwaXBlKTwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0i aWZzdGF0Ij5zbWRfdmFyX2lmX3N0YXR1czwvaDM+CgoJPHA+Q29udmVuaWVuY2UgdGFnIHRo YXQgZXZhbHVhdGVzIGEgc2luZ2xlIHN0YXR1cyB0eXBlIGFuZCB0YWtlcyBhY3Rpb24gaWYg dGhlIHJlc3VsdCBpcyBwb3NpdGl2ZS4gU3VwcG9ydHMgPGNvZGU+Jmx0O3R4cDplbHNlIC8m Z3Q7PC9jb2RlPi4gQXR0cmlidXRlczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0i YXR0LW5hbWUiPm5hbWU8L3NwYW4+IDogdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIHF1 ZXJ5LiBDYW4gdXNlIDxjb2RlPj88L2NvZGU+IHZhcnMgdG8gbWFrZSB1cCB0aGUgbmFtZSBp ZiB5b3Ugd2lzaDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+dHlwZTwvc3Bh bj4gOiBvbmUgb2YgdGhlIHRocmVlIHR5cGVzIG9mIGluZm8geW91IHdpc2ggdG8gY2hlY2ss IG5hbWVseTogPGNvZGU+dmFsaWQ8L2NvZGU+ICh0aGUgZGVmYXVsdCksIDxjb2RlPnVzZTwv Y29kZT4gb3IgPGNvZGU+YXZhaWxhYmxlPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0i aWZzIj5zbWRfdmFyX2lmX3ZhbGlkIC8gc21kX3Zhcl9pZl91c2VkIC8gc21kX3Zhcl9pZl9h dmFpbGFibGU8L2gzPgoKCTxwPlRocmVlIGZ1cnRoZXIgY29udmVuaWVuY2UgdGFncyB0byBz aW1wbHkgdGVzdCBmb3IgYSBzcGVjaWZpYyBzdGF0dXMuIFRoZXkgYWxsIHN1cHBvcnQgPGNv ZGU+Jmx0O3R4cDplbHNlIC8mZ3Q7PC9jb2RlPiBhbmQgdGFrZSBhIHNpbmdsZSA8Y29kZT5u YW1lPC9jb2RlPiBhdHRyaWJ1dGUuPC9wPgoKCTxoMiBpZD0iZXhhbXBsZXMiPkV4YW1wbGVz PC9oMj4KCgk8cD5Db21pbmcgc29vbiYjODIzMDs8L3A+CgoJPGgyIGlkPSJjaGFuZ2Vsb2ci PkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4wNyBKdW4gMDggfCAwLjEgfCBJbml0aWFs IHB1YmxpYyBiZXRhIHJlbGVhc2U8L2xpPgoJPC91bD4KCgk8cD48L2Rpdj48L3A+CjwhLS0g LS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoj c21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjQ1IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13 ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1v bm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLmJs b2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNr Z3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4 IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgYTpsaW5rLCAjc21kX2hlbHAgYTp2 aXNpdGVkIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJv dHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBh OmhvdmVyLCAjc21kX2hlbHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0 aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0 b206MXB4O30KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2Vvcmdp YSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9o ZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHgg MCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNz bWRfaGVscCBoMyB7IGNvbG9yOiAjNjkzOyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMt c2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFu c2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVs cCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNp bmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsg fQojc21kX2hlbHAgLmF0dC1uYW1lIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAg Lm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3Nt ZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJv dHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVyOjFweCBzb2xp ZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlw ZTpzcXVhcmU7IH0KI3NtZF9oZWxwIGxpIHsgbWFyZ2luLWxlZnQ6MzVweDsgfQojc21kX2hl bHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KI3NtZF9oZWxwIC5yZXF1aXJlZCB7IGNv bG9yOnJlZDsgfQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+CiI7 czozOiJtZDUiO3M6MzI6ImFiYmJkODk1N2VhM2I1ODYwYmY4NjZkZGNkMjE4NDM2Ijt9