# Name: smd_tabber v0.11 # Type: Admin/Public side plugin # Add and manage TXP tabs # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEwOiJzbWRfdGFiYmVyIjtzOjY6ImF1dGhvciI7czoxMToi U3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29u LmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjExIjtzOjExOiJkZXNjcmlwdGlvbiI7czoy MzoiQWRkIGFuZCBtYW5hZ2UgVFhQIHRhYnMiO3M6NDoiY29kZSI7czoyMzgzOToiaWYgKCFk ZWZpbmVkKCdTTURfVEFCQkVSJykpIHsNCglkZWZpbmUoIlNNRF9UQUJCRVIiLCAnc21kX3Rh YmJlcicpOw0KfQ0KaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICR0 ZXh0YXJyYXksICRzbWRfdGFiYmVyX2V2ZW50LCAkc21kX3RhYmJlcl9zdHlsZXMsICR0eHBf dXNlciwgJHNtZF90YWJiZXJfY2FsbHN0YWNrLCAkc21kX3RhYmJlcl91cHJpdnMsICRzbWRf dGFiYmVyX3ByZXZzOw0KDQoJJHNtZF90YWJiZXJfZXZlbnQgPSAnc21kX3RhYmJlcic7DQoJ JHNtZF90YWJiZXJfcHJldnMgPSAnMSc7DQoJJHNtZF90YWJiZXJfc3R5bGVzID0gYXJyYXko DQoJCSdlZGl0JyA9PiAnI3NtZF90YWJiZXJfd3JhcHBlciB7IG1hcmdpbjowIGF1dG87IHdp ZHRoOjUyMHB4OyB9DQouc21kX3RhYmJlcl9lcXVhbCB7IGRpc3BsYXk6dGFibGU7IGJvcmRl ci1jb2xsYXBzZTpzZXBhcmF0ZTsgbWFyZ2luOjEwcHggYXV0bzsgYm9yZGVyLXNwYWNpbmc6 OHB4OyB9DQouc21kX3RhYmJlcl9yb3cgeyBkaXNwbGF5OnRhYmxlLXJvdzsgfQ0KLnNtZF90 YWJiZXJfcm93IGRpdiB7IGRpc3BsYXk6dGFibGUtY2VsbDsgfQ0KLnNtZF90YWJiZXJfcm93 IC5zbWRfdGFiYmVyX2xhYmVsIHsgd2lkdGg6MTUwcHg7IHRleHQtYWxpZ246cmlnaHQ7IHBh ZGRpbmc6MnB4IDAgMCAwOyB9DQouc21kX3RhYmJlcl9yb3cgLnNtZF90YWJiZXJfdmFsdWUg eyB3aWR0aDozNTBweDsgdmVydGljYWwtYWxpZ246bWlkZGxlOyB9DQojc21kX3RhYmJlcl9z ZWxlY3QgeyBtYXJnaW4tYm90dG9tOi0yMHB4OyB9DQouc21kX3RhYmJlcl9zYXZlIHsgZmxv YXQ6cmlnaHQ7IG1hcmdpbjoxMHB4IDUwcHggMCAwIWltcG9ydGFudDt9JywNCgkJJ3ByZWZz JyA9PiAnLnNtZF9sYWJlbCB7IHRleHQtYWxpZ246IHJpZ2h0IWltcG9ydGFudDsgdmVydGlj YWwtYWxpZ246IHRvcDsgfQ0KCQknLA0KCSk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90 YWJiZXJfd2VsY29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLicuJHNtZF90YWJiZXJfZXZlbnQp Ow0KDQoJJHVsaXN0ID0gZ2V0X3ByZWYoJ3NtZF90YWJiZXJfdGFiX3ByaXZzJywgJycpOw0K CSRhbGxvd2VkID0gKCR1bGlzdCkgPyBleHBsb2RlKCcsJywgJHVsaXN0KSA6IGFycmF5KCk7 DQoJJGxldnMgPSAoJGFsbG93ZWQpID8gJzEsMiwzLDQsNSw2JyA6ICcxJzsNCglpZiAoZW1w dHkoJGFsbG93ZWQpIHx8IGluX2FycmF5KCR0eHBfdXNlciwgJGFsbG93ZWQpKSB7DQoJCWFk ZF9wcml2cygkc21kX3RhYmJlcl9ldmVudCwgJGxldnMpOw0KCX0NCg0KCS8vIEdyYWIgdGhp cyBoZXJlIHNvIHRoYXQgdGhlIHByaXZzIGFyZSBrbm93biBpbW1lZGlhdGVseSBhZnRlciBt YW51YWwgaW5zdGFsbA0KCSRzbWRfdGFiYmVyX3Vwcml2cyA9IHNhZmVfZmllbGQoJ3ByaXZz JywgJ3R4cF91c2VycycsICJuYW1lID0gJyIuZG9TbGFzaCgkdHhwX3VzZXIpLiInIik7DQoN CglyZWdpc3Rlcl90YWIoJ2FkbWluJywgJHNtZF90YWJiZXJfZXZlbnQsIHNtZF90YWJiZXJf Z1R4dCgnc21kX3RhYmJlcl90YWJfbmFtZScpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21k X3RhYmJlcl9kaXNwYXRjaCcsICRzbWRfdGFiYmVyX2V2ZW50KTsNCg0KCS8vIERvIHRoZSB0 YWJiaW5nIGRlZWQNCglpZiAoc21kX3RhYmJlcl90YWJsZV9leGlzdCgxKSkgew0KCQlyZWdp c3Rlcl9jYWxsYmFjaygnc21kX3RhYmJlcl9jc3NfbGluaycsICdhZG1pbl9zaWRlJywgJ2hl YWRfZW5kJyk7DQoJCSRzbWRfdGFicyA9IHNhZmVfcm93cygnKicsIFNNRF9UQUJCRVIsICcx PTEgT1JERVIgQlkgYXJlYSwgc29ydF9vcmRlciwgbmFtZScpOw0KDQoJCS8vIFl1ayBidXQg bm8gb3RoZXIgd2F5IHRvIGdldCB0aGVzZS4NCgkJLy8gTkI6ICdzdGFydCcgbWlzc2luZyBv biBwdXJwb3NlIGFzIGl0IGhhcyBubyBwcml2cyBieSBkZWZhdWx0LCBzbyBuZWVkcyB0aGVt IGFkZGluZw0KCSAJJHNtZF9hcmVhcyA9IGFycmF5KCdjb250ZW50JywgJ3ByZXNlbnRhdGlv bicsICdhZG1pbicsICdleHRlbnNpb25zJyk7DQoNCgkJZm9yZWFjaCAoJHNtZF90YWJzIGFz ICRpZHggPT4gJHRhYikgew0KCQkJJG5hbWUgPSAkdGFiWyduYW1lJ107DQoJCQkkYXJlYSA9 ICR0YWJbJ2FyZWEnXTsNCgkJCSRhcmVhbmFtZSA9IHN0cnRvbG93ZXIoc2FuaXRpemVGb3JV cmwoJGFyZWEpKTsNCgkJCSRhcmVhX3ByaXZuYW1lID0gJ3RhYi4nIC4gJGFyZWFuYW1lOw0K CQkJJGNyZWF0ZV90b3AgPSAoIWluX2FycmF5KCRhcmVhbmFtZSwgJHNtZF9hcmVhcykpOw0K CQkJJHRhYm5hbWUgPSBzdHJ0b2xvd2VyKHNhbml0aXplRm9yVXJsKCRuYW1lKSk7DQoNCgkJ CSRlcHJpdnMgPSBleHBsb2RlKCcsJywgJHRhYlsndmlld19wcml2cyddKTsNCgkJCSRyaWdo dHMgPSBpbl9hcnJheSgkc21kX3RhYmJlcl91cHJpdnMsICRlcHJpdnMpOw0KDQoJCQlpZiAo JHJpZ2h0cykgew0KCQkJCWlmICgkY3JlYXRlX3RvcCkgew0KCQkJCQlhZGRfcHJpdnMoJGFy ZWFfcHJpdm5hbWUsICRzbWRfdGFiYmVyX3Vwcml2cyk7DQoJCQkJCSRzbWRfYXJlYXNbXSA9 ICRhcmVhbmFtZTsNCgkJCQkJaWYgKCRhcmVhbmFtZSAhPSAnc3RhcnQnKSB7DQoJCQkJCQkk dGV4dGFycmF5Wyd0YWJfJy4kYXJlYW5hbWVdID0gJGFyZWE7DQoJCQkJCX0NCgkJCQl9DQoN CgkJCQlhZGRfcHJpdnMoJHRhYm5hbWUsICRzbWRfdGFiYmVyX3Vwcml2cyk7DQoJCQkJcmVn aXN0ZXJfdGFiKCRhcmVhbmFtZSwgJHRhYm5hbWUsICRuYW1lKTsNCgkJCQlyZWdpc3Rlcl9j YWxsYmFjaygnc21kX3RhYmJlcl9yZW5kZXJfdGFiJywgJHRhYm5hbWUpOw0KCQkJCSRzbWRf dGFiYmVyX2NhbGxzdGFja1skdGFibmFtZV0gPSBhcnJheSgnbmFtZScgPT4gJG5hbWUsICdw YWdlJyA9PiAkdGFiWydwYWdlJ10sICdzdHlsZScgPT4gJHRhYlsnc3R5bGUnXSk7DQoJCQl9 DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX3RhYmJlcl9yZW5kZXJfdGFiKCRldnQsICRzdHApIHsNCglnbG9iYWwgJHNtZF90YWJi ZXJfY2FsbHN0YWNrLCAkcHJldGV4dDsNCg0KCSR0YWJfaW5mbyA9ICRzbWRfdGFiYmVyX2Nh bGxzdGFja1skZXZ0XTsNCg0KCS8vIEFsbG93IG11bHRpcGxlIHBhcnNlIGNhbGxzIGZvciBh bnkgbmVzdGVkIHtyZXBsYWNlZH0gY29udGVudA0KCSRwYXJzZV9kZXB0aCA9IGludHZhbChn ZXRfcHJlZignc21kX3RhYmJlcl9wYXJzZV9kZXB0aCcsIDEpKTsNCg0KCXBhZ2V0b3AoJHRh Yl9pbmZvWyduYW1lJ10pOw0KDQoJJGh0bWwgPSBzYWZlX2ZpZWxkKCd1c2VyX2h0bWwnLCAn dHhwX3BhZ2UnLCAibmFtZT0nIi5kb1NsYXNoKCR0YWJfaW5mb1sncGFnZSddKS4iJyIpOw0K CWlmICghJGh0bWwpIHsNCgkJJGh0bWwgPSAnPHR4cDpzbWRfdGFiYmVyX2VkaXRfcGFnZSAv Picubi4nPHR4cDpzbWRfdGFiYmVyX2VkaXRfc3R5bGUgLz4nOw0KCX0NCg0KCS8vIEhhbmQg b3ZlciBjb250cm9sIHRvIHRoZSBQYWdlIGNvZGUNCglpbmNsdWRlX29uY2UgdHhwYXRoLicv cHVibGlzaC5waHAnOw0KCWZvciAoJGlkeCA9IDA7ICRpZHggPCAkcGFyc2VfZGVwdGg7ICRp ZHgrKykgew0KCQkkaHRtbCA9IHBhcnNlKCRodG1sKTsNCgl9DQoJZWNobyAkaHRtbDsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFiYmVyX2Rp c3BhdGNoKCRldnQsICRzdHApIHsNCglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0cCwgYXJy YXkoDQoJCQknc21kX3RhYmJlcl90YWJsZV9pbnN0YWxsJywNCgkJCSdzbWRfdGFiYmVyX3Rh YmxlX3JlbW92ZScsDQoJCQknc21kX3RhYmJlcl9jc3MnLA0KCQkJJ3NtZF90YWJiZXJfcHJl ZnMnLA0KCQkJJ3NtZF90YWJiZXJfcHJlZnNhdmUnLA0KCQkJJ3NtZF90YWJiZXJfc2F2ZScs DQoJCQknc21kX3RhYmJlcl9kZWxldGUnLA0KCQkpKSkgew0KCQlzbWRfdGFiYmVyKCcnKTsN Cgl9IGVsc2UgJHN0cCgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF90YWJiZXJfd2VsY29tZSgkZXZ0LCAkc3RwKSB7DQoJJG1zZyA9ICcnOw0K CXN3aXRjaCAoJHN0cCkgew0KCQljYXNlICdpbnN0YWxsZWQnOg0KCQkJc21kX3RhYmJlcl90 YWJsZV9pbnN0YWxsKDApOw0KCQkJJG1zZyA9ICdTdXBlcnRhYnMgYXJlIGdvISc7DQoJCQli cmVhazsNCgkJY2FzZSAnZGVsZXRlZCc6DQoJCQlzbWRfdGFiYmVyX3RhYmxlX3JlbW92ZSgw KTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFiYmVyX2NzcygpIHsNCglnbG9iYWwgJGV2 ZW50Ow0KCSRuYW1lID0gZG9TbGFzaChncHMoJ25hbWUnKSk7DQoJJGNzcyA9IHNhZmVfZmll bGQoJ2NzcycsICd0eHBfY3NzJywgIm5hbWU9JyRuYW1lJyIpOw0KCXVuc2V0KCRuYW1lKTsN Cg0KCWlmICgkY3NzKSB7DQoJCWhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L2NzcycpOw0K CQllY2hvICRjc3M7DQoJCWV4aXQoKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RhYmJlcl9jc3NfbGluaygpIHsNCglnbG9iYWwgJGV2 ZW50LCAkc21kX3RhYmJlcl9ldmVudDsNCgkvLyBBbm5veWluZ2x5LCB3ZSBuZWVkIGFuIGV4 dHJhIHRlc3QgaGVyZSBpbiBjYXNlIHRoZSBwbHVnaW4gaGFzIGJlZW4gZGVsZXRlZC4NCgkv LyBUaGlzIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQgYmVmb3JlIHBsdWdpbiBkZWxldGlvbiBi dXQgYnkgdGhlIHRpbWUgaXQgcnVucyB0aGUgdGFibGUgaXMgZ29uZQ0KCWlmIChzbWRfdGFi YmVyX3RhYmxlX2V4aXN0KDEpKSB7DQoJCSRzbWRfdGFiID0gc2FmZV9maWVsZCgnc3R5bGUn LCBTTURfVEFCQkVSLCAibmFtZSA9ICciLmRvU2xhc2goJGV2ZW50KS4iJyIpOw0KCQllY2hv ICgkc21kX3RhYikgPyBuLic8bGluayBocmVmPSI/ZXZlbnQ9Jy4kc21kX3RhYmJlcl9ldmVu dC5hLidzdGVwPXNtZF90YWJiZXJfY3NzJy5hLiduYW1lPScuJHNtZF90YWIuJyIgcmVsPSJz dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4nLm4gOiAnJzsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RhYmJlcigkbXNnPScnKSB7 DQoJZ2xvYmFsICRzbWRfdGFiYmVyX2V2ZW50LCAkc21kX3RhYmJlcl91cHJpdnMsICRzbWRf dGFiYmVyX3ByZXZzLCAkc21kX3RhYmJlcl9zdHlsZXM7DQoNCglwYWdldG9wKHNtZF90YWJi ZXJfZ1R4dCgnc21kX3RhYmJlcl90YWJfbmFtZScpLCAkbXNnKTsNCgkkcHJlZl9yaWdodHMg PSBpbl9hcnJheSgkc21kX3RhYmJlcl9wcmV2cywgZXhwbG9kZSgnLCcsICRzbWRfdGFiYmVy X3Vwcml2cykpOw0KDQoJaWYgKHNtZF90YWJiZXJfdGFibGVfZXhpc3QoMSkpIHsNCgkJJHRh Yl9uYW1lID0gJHRhYl9uZXdfbmFtZSA9IGdwcygnc21kX3RhYmJlcl9uYW1lJyk7DQoJCSRh cmVhID0gJGN1cnJfcGFnZSA9ICRjdXJyX3N0eWxlID0gJHNvcnRfb3JkZXIgPSAnJzsNCgkJ JHZpZXdfcHJpdnMgPSBhcnJheSgpOw0KCQkkdGFibGlzdCA9ICRzbWRfYXJlYXMgPSBhcnJh eSgpOw0KCQkkdGFiX3ByZWZpeCA9IGdldF9wcmVmKCdzbWRfdGFiYmVyX3RhYl9wcmVmaXgn LCAndGFiYmVyXycsIDEpOw0KDQoJCS8vIENhbid0IHVzZSB0aGUgc21kX3RhYnMgYW5kIHNt ZF9hcmVhcyBsaXN0cyBpbiB0aGUgZ2xvYmFsIHNjb3BlICdjb3MgdGhleSdyZSBzdGFsZSAv IHN0cnRvbG93ZXIoKWVkDQoJCSRzbWRfdGFicyA9IHNhZmVfcm93cygnKicsIFNNRF9UQUJC RVIsICcxPTEgT1JERVIgQlkgYXJlYSwgc29ydF9vcmRlciwgbmFtZScpOw0KCQlpZiAoJHNt ZF90YWJzKSB7DQoJCQlmb3JlYWNoICgkc21kX3RhYnMgYXMgJGlkeCA9PiAkdGFiKSB7DQoJ CQkJJHRhYmxpc3RbJHRhYlsnYXJlYSddXVskdGFiWyduYW1lJ11dID0gJHRhYlsnbmFtZSdd Ow0KCQkJCSRzbWRfYXJlYXNbJHRhYlsnYXJlYSddXSA9IHN0cnRvbG93ZXIoc2FuaXRpemVG b3JVcmwoJHRhYlsnYXJlYSddKSk7DQoJDQoJCQkJaWYgKCR0YWJbJ25hbWUnXSA9PSAkdGFi X25hbWUpIHsNCgkJCQkJJHNvcnRfb3JkZXIgPSAkdGFiWydzb3J0X29yZGVyJ107DQoJCQkJ CSRhcmVhID0gJHRhYlsnYXJlYSddOw0KCQkJCQkkdmlld19wcml2cyA9IGV4cGxvZGUoJywn LCAkdGFiWyd2aWV3X3ByaXZzJ10pOw0KCQkJCQkkY3Vycl9wYWdlID0gJHRhYlsncGFnZSdd Ow0KCQkJCQkkY3Vycl9zdHlsZSA9ICR0YWJbJ3N0eWxlJ107DQoJCQkJfQ0KCQkJfQ0KCQl9 DQoNCgkJLy8gRGVmYXVsdCB0byB0aGUgY3VycmVudCB1c2VyIGxldmVsJ3MgcHJpdnMgZm9y IG5ldyBpdGVtcw0KCQlpZiAoJHRhYl9uYW1lID09ICcnKSB7DQoJCQkkdmlld19wcml2c1td ID0gJHNtZF90YWJiZXJfdXByaXZzOw0KCQl9DQoNCgkJLy8gQnVpbGQgYSBzZWxlY3QgbGlz dCBvZiB0YWIgbmFtZXMsIGluamVjdGluZyBvcHRncm91cHMgYWJvdmUgYW55IGFyZWFzDQoJ CSRvcHRncm91cHMgPSAoY291bnQoJHRhYmxpc3QpID4gMSk7IC8vIE9ubHkgYWRkIG9wdGdy b3VwcyBpZiB0aGVyZSBhcmUgdGFicyBpbiBtb3JlIHRoYW4gb25lIGFyZWENCgkJJHRhYlNl bGVjdG9yID0gJyc7DQoJCWlmICgkdGFibGlzdCkgew0KCQkJJHRhYlNlbGVjdG9yIC49ICc8 c2VsZWN0IG5hbWU9InNtZF90YWJiZXJfbmFtZSIgaWQ9InNtZF90YWJiZXJfbmFtZSIgb25j aGFuZ2U9InN1Ym1pdCh0aGlzLmZvcm0pOyI+JzsNCgkJCSR0YWJTZWxlY3RvciAuPSAnPG9w dGlvbiB2YWx1ZT0iIj4nIC4gc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX25ld190YWIn KSAuICc8L29wdGlvbj4nOw0KCQkJJGxhc3RBcmVhID0gJyc7DQoJCQkkaW5Hcm91cHMgPSBm YWxzZTsgLy8gSXMgc2V0IHRvIHRydWUgd2hlbiB0aGUgZmlyc3QgYXJlYSBpcyByZWFjaGVk DQoJCQlmb3JlYWNoICgkdGFibGlzdCBhcyAkdGhlQXJlYSA9PiAkdGhlVGFicykgew0KCQkJ CWlmICgkb3B0Z3JvdXBzICYmICRsYXN0QXJlYSAhPSAkdGhlQXJlYSkgew0KCQkJCQkkdGFi U2VsZWN0b3IgLj0gKCRpbkdyb3VwcykgPyAnPC9vcHRncm91cD4nIDogJyc7DQoJCQkJCSR0 YWJTZWxlY3RvciAuPSAnPG9wdGdyb3VwIGxhYmVsPSInLiR0aGVBcmVhLiciPic7DQoJCQkJ CSRpbkdyb3VwcyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3JlYWNo KCR0aGVUYWJzIGFzICR0aGVUYWIgPT4gJHRhYk5hbWUpIHsNCgkgICAgICAgICAgICAkdGFi U2VsZWN0b3IgLj0gJzxvcHRpb24gdmFsdWU9IicuJHRoZVRhYi4nIicuKCgkdGhlVGFiID09 ICR0YWJfbmFtZSkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycpLic+JyAuICR0YWJO YW1lIC4gJzwvb3B0aW9uPic7DQoJCQkJfQ0KCQkJfQ0KCQkJJHRhYlNlbGVjdG9yIC49ICgo JG9wdGdyb3VwcykgPyAnPC9vcHRncm91cD4nIDogJycpIC4gJzwvc2VsZWN0Pic7DQoJCX0N Cg0KCQkkYXJlYXMgPSBhcmVhcygpOw0KCQkkYXJlYXMgPSBhcnJheV9tZXJnZSgkYXJlYXMs ICRzbWRfYXJlYXMpOw0KCQkkYXJlYV9saXN0ID0gYXJyYXkoJycgPT4gc21kX3RhYmJlcl9n VHh0KCdzbWRfdGFiYmVyX25ld19hcmVhJykpOw0KCQlmb3JlYWNoICgkYXJlYXMgYXMgJGlk eCA9PiAkYWxpc3QpIHsNCgkJCSRrZXkgPSBhcnJheV9zZWFyY2goJGlkeCwgJHNtZF9hcmVh cyk7DQoJCQlpZiAoJGtleSA9PT0gZmFsc2UpIHsNCgkJCQkkYXJlYV9saXN0WyRpZHhdID0g JGlkeDsNCgkJCX0gZWxzZSB7DQoJCQkJJGFyZWFfbGlzdFska2V5XSA9ICRrZXk7DQoJCQl9 DQoJCX0NCg0KCQkkcHJpdnMgPSBnZXRfZ3JvdXBzKCk7DQoJCSRwcml2c2VsID0gc21kX3Rh YmJlcl9tdWx0aV9zZWxlY3QoJ3NtZF90YWJiZXJfdmlld19wcml2cycsICRwcml2cywgJHZp ZXdfcHJpdnMpOw0KDQoJCSRwYWdlcyA9IHNhZmVfY29sdW1uKCduYW1lJywgJ3R4cF9wYWdl JywgIm5hbWUgbGlrZSAnIi5kb1NsYXNoKCR0YWJfcHJlZml4KS4iJSciKTsNCgkJZm9yZWFj aCAoJHBhZ2VzIGFzICRpZHggPT4gJHBhZ2UpIHsNCgkJCSRwYWdlc1skaWR4XSA9IHN0cl9y ZXBsYWNlKCR0YWJfcHJlZml4LCAnJywgJHBhZ2UpOw0KCQl9DQoJCSRzdHlsZXMgPSBzYWZl X2NvbHVtbignbmFtZScsICd0eHBfY3NzJywgIm5hbWUgbGlrZSAnIi5kb1NsYXNoKCR0YWJf cHJlZml4KS4iJSciKTsNCgkJZm9yZWFjaCAoJHN0eWxlcyBhcyAkaWR4ID0+ICRzdHlsZSkg ew0KCQkJJHN0eWxlc1skaWR4XSA9IHN0cl9yZXBsYWNlKCR0YWJfcHJlZml4LCAnJywgJHN0 eWxlKTsNCgkJfQ0KDQoJCSRlZGl0Y2VsbCA9ICgoJHNtZF90YWJzKQ0KCQkJCT8gJzxkaXYg Y2xhc3M9InNtZF90YWJiZXJfbGFiZWwiPicNCgkJCQkJLiBzbWRfdGFiYmVyX2dUeHQoJ3Nt ZF90YWJiZXJfY2hvb3NlJykNCgkJCQkJLiAnPC9kaXY+PGRpdiBjbGFzcz0ic21kX3RhYmJl cl92YWx1ZSI+Jw0KCQkJCQkuICR0YWJTZWxlY3Rvcg0KCQkJCQkuICgoJHRhYl9uYW1lICE9 ICcnKQ0KCQkJCQkJPyBzcCAuIGVMaW5rKHN0cnRvbG93ZXIoc2FuaXRpemVGb3JVcmwoJHRh Yl9uYW1lKSksICcnLCAnJywnJywgZ1R4dCgnVmlldycpKQ0KCQkJCQkJOiAnJykNCgkJCQkJ LiBlSW5wdXQoJHNtZF90YWJiZXJfZXZlbnQpDQoJCQkJCS4nPC9kaXY+Jw0KCQkJCTogJycp Ow0KDQoJCSRwcmVmX2xpbmsgPSAkcHJlZl9yaWdodHMgPyBzcCAuIGVMaW5rKCRzbWRfdGFi YmVyX2V2ZW50LCAnc21kX3RhYmJlcl9wcmVmcycsICcnLCAnJywgJ1snLnNtZF90YWJiZXJf Z1R4dCgnc21kX3RhYmJlcl9wcmVmcycpLiddJykgOiAnJzsNCg0KCQkvLyBFZGl0IGZvcm0N CgkJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nIC4gJHNtZF90YWJiZXJfc3R5bGVz WydlZGl0J10gLiAnPC9zdHlsZT4nOw0KCQllY2hvICc8ZGl2IGlkPSJzbWRfdGFiYmVyX3dy YXBwZXIiPic7DQoJCWVjaG8gaGVkKHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9oZWFk aW5nJyksIDIpOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX3ByZWZsaW5rIj4n IC4gJHByZWZfbGluayAuICc8L2Rpdj4nOw0KCQllY2hvICc8Zm9ybSBpZD0ic21kX3RhYmJl cl9zZWxlY3QiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPic7DQoJCWVjaG8g JzxkaXYgY2xhc3M9InNtZF90YWJiZXJfZXF1YWwiPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9 InNtZF90YWJiZXJfcm93Ij4nIC4gJGVkaXRjZWxsIC4gJzwvZGl2PjwhLS0gZW5kIHJvdyAt LT4nOw0KCQllY2hvICc8L2Rpdj48L2Zvcm0+JzsNCg0KCQllY2hvICc8Zm9ybSBuYW1lPSJz bWRfdGFiYmVyX2Zvcm0iIGlkPSJzbWRfdGFiYmVyX2Zvcm0iIGFjdGlvbj0iaW5kZXgucGhw IiBtZXRob2Q9InBvc3QiPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfZXF1 YWwiPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfcm93Ij4nOw0KCQllY2hv ICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX2xhYmVsIj4nIC4gc21kX3RhYmJlcl9nVHh0KCdz bWRfdGFiYmVyX25hbWUnKSAuICc8L2Rpdj4nOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRf dGFiYmVyX3ZhbHVlIj4nDQoJCQkJLiBmSW5wdXQoJ3RleHQnLCAnc21kX3RhYmJlcl9uZXdf bmFtZScsICR0YWJfbmV3X25hbWUpDQoJCQkJLiBoSW5wdXQoJ3NtZF90YWJiZXJfbmFtZScs ICR0YWJfbmFtZSkNCgkJCQkuICgoJHRhYl9uYW1lID09ICcnKQ0KCQkJCQk/ICcnDQoJCQkJ CTogc3AgLiAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF90YWJiZXJfZXZlbnQuIGEuJ3N0ZXA9 c21kX3RhYmJlcl9kZWxldGUnIC4gYSAuICdzbWRfdGFiYmVyX25hbWU9Jy51cmxlbmNvZGUo JHRhYl9uYW1lKS4nIiBjbGFzcz0ic21hbGxlcmJveCIgb25jbGljaz0icmV0dXJuIGNvbmZp cm0oXCcnLmdUeHQoJ2NvbmZpcm1fZGVsZXRlX3BvcHVwJykuJ1wnKTsiPlt4XTwvYT4nDQoJ CQkJKQ0KCQkJCS4gJzwvZGl2PicNCgkJCQkuICc8L2Rpdj48IS0tIGVuZCByb3cgLS0+JzsN CgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl9yb3ciPic7DQoJCWVjaG8gJzxkaXYg Y2xhc3M9InNtZF90YWJiZXJfbGFiZWwiPicgLiBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJi ZXJfc29ydF9vcmRlcicpIC4gJzwvZGl2Pic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90 YWJiZXJfdmFsdWUiPicNCgkJCQkuIGZJbnB1dCgndGV4dCcsICdzbWRfdGFiYmVyX3NvcnRf b3JkZXInLCAkc29ydF9vcmRlcikNCgkJCQkuICc8L2Rpdj4nDQoJCQkJLiAnPC9kaXY+PCEt LSBlbmQgcm93IC0tPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfcm93Ij4n Ow0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX2xhYmVsIj4nIC4gc21kX3RhYmJl cl9nVHh0KCdzbWRfdGFiYmVyX2FyZWEnKSAuICc8L2Rpdj4nOw0KCQllY2hvICc8ZGl2IGNs YXNzPSJzbWRfdGFiYmVyX3ZhbHVlIj4nDQoJCQkJLiBzZWxlY3RJbnB1dCgnc21kX3RhYmJl cl9hcmVhJywgJGFyZWFfbGlzdCwgJGFyZWEpDQoJCQkJLiBzcCAuIGZJbnB1dCgndGV4dCcs ICdzbWRfdGFiYmVyX25ld19hcmVhJywgJycpDQoJCQkJLiAnPC9kaXY+Jw0KCQkJCS4gJzwv ZGl2PjwhLS0gZW5kIHJvdyAtLT4nOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVy X3JvdyI+JzsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl9sYWJlbCI+JyAuIHNt ZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl92aWV3X3ByaXZzJykgLiAnPC9kaXY+JzsNCgkJ ZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl92YWx1ZSI+Jw0KCQkJCS4gJHByaXZzZWwN CgkJCQkuICc8L2Rpdj4nDQoJCQkJLiAnPC9kaXY+PCEtLSBlbmQgcm93IC0tPic7DQoJCWVj aG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfcm93Ij4nOw0KCQllY2hvICc8ZGl2IGNsYXNz PSJzbWRfdGFiYmVyX2xhYmVsIj4nIC4gc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX3Bh Z2UnKSAuICc8L2Rpdj4nOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX3ZhbHVl Ij4nDQoJCQkJLiBzZWxlY3RJbnB1dCgnc21kX3RhYmJlcl9wYWdlJywgJHBhZ2VzLCAkY3Vy cl9wYWdlLCB0cnVlKQ0KCQkJCS4gc3AgLiAoKCRjdXJyX3BhZ2UpID8gZUxpbmsoJ3BhZ2Un LCAnJywgJ25hbWUnLCAkY3Vycl9wYWdlLCBnVHh0KCdlZGl0JykpIDogZUxpbmsoJ3BhZ2Un LCAncGFnZV9uZXcnLCAnJywgJycsIGdUeHQoJ2NyZWF0ZScpKSApDQoJCQkJLiAnPC9kaXY+ Jw0KCQkJCS4gJzwvZGl2PjwhLS0gZW5kIHJvdyAtLT4nOw0KCQllY2hvICc8ZGl2IGNsYXNz PSJzbWRfdGFiYmVyX3JvdyI+JzsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl9s YWJlbCI+JyAuIHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9zdHlsZScpIC4gJzwvZGl2 Pic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfdmFsdWUiPicNCgkJCQkuIHNl bGVjdElucHV0KCdzbWRfdGFiYmVyX3N0eWxlJywgJHN0eWxlcywgJGN1cnJfc3R5bGUsIHRy dWUpDQoJCQkJLiBzcC4gKCgkY3Vycl9zdHlsZSkgPyBlTGluaygnY3NzJywgJycsICduYW1l JywgJGN1cnJfc3R5bGUsIGdUeHQoJ2VkaXQnKSkgOiBlTGluaygnY3NzJywgJ3BvdXInLCAn JywgJycsIGdUeHQoJ2NyZWF0ZScpKSApDQoJCQkJLiAnPC9kaXY+Jw0KCQkJCS4gJzwvZGl2 PjwhLS0gZW5kIHJvdyAtLT4nOw0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJf cm93Ij4nOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX2xhYmVsIj4mbmJzcDs8 L2Rpdj4nOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX3ZhbHVlIj4nDQoJCQkJ LiBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdzYXZlJyksICdzbWRfdGFiYmVy X3NhdmUgcHVibGlzaCcpDQoJCQkJLiBlSW5wdXQoJHNtZF90YWJiZXJfZXZlbnQpDQoJCQkJ LiBzSW5wdXQoJ3NtZF90YWJiZXJfc2F2ZScpDQoJCQkJLiAnPC9kaXY+Jw0KCQkJCS4gJzwv ZGl2PjwhLS0gZW5kIHJvdyAtLT4nOw0KDQoJCWVjaG8gJzwvZGl2PjwhLS0gZW5kIHNtZF90 YWJiZXJfZXF1YWwgLS0+JzsNCgkJZWNobyAnPC9mb3JtPic7DQoJCWVjaG8gJzwvZGl2Pjwh LS0gZW5kIHNtZF90YWJiZXJfd3JhcHBlciAtLT4nOw0KCX0gZWxzZSB7DQoJCS8vIFRhYmxl IG5vdCBpbnN0YWxsZWQNCgkJJGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBh Y3Rpb249Ij9ldmVudD0nLiRzbWRfdGFiYmVyX2V2ZW50LmEuJ3N0ZXA9c21kX3RhYmJlcl90 YWJsZV9pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQn LCAnc3VibWl0Jywgc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX3RibF9pbnN0YWxsX2xi bCcpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JzsNCgkJJGJ0blN0eWxlID0gJyBzdHlsZT0i Ym9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJ CWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJfcHJlZnNf c29tZV90YmwnKSkuYnIuYnINCgkJCQkuc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX3By ZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJLnNtZF90YWJiZXJfZ1R4dCgnc21kX3Rh YmJlcl9wcmVmc19zb21lX29wdHMnKSwgJyBjb2xzcGFuPSIyIicpDQoJCSk7DQoJCWVjaG8g dHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgkJZWNobyBlbmRUYWJsZSgpOw0K CX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFi YmVyX3NhdmUoKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoDQoJCSdzbWRfdGFi YmVyX25hbWUnLA0KCQknc21kX3RhYmJlcl9uZXdfbmFtZScsDQoJCSdzbWRfdGFiYmVyX2Fy ZWEnLA0KCQknc21kX3RhYmJlcl9uZXdfYXJlYScsDQoJCSdzbWRfdGFiYmVyX3BhZ2UnLA0K CQknc21kX3RhYmJlcl9zdHlsZScsDQoJCSdzbWRfdGFiYmVyX3NvcnRfb3JkZXInLA0KCSkp KSk7DQoNCgkkdnUgPSBncHMoJ3NtZF90YWJiZXJfdmlld19wcml2cycpOw0KCSRzbWRfdGFi YmVyX3ZpZXdfcHJpdnMgPSAkdnUgPyBkb1NsYXNoKGpvaW4oJywnLCAkdnUpKSA6ICcnOw0K DQoJJG1zZyA9ICcnOw0KCSR0aGVBcmVhID0gKCRzbWRfdGFiYmVyX25ld19hcmVhID09ICcn KSA/ICRzbWRfdGFiYmVyX2FyZWEgOiAkc21kX3RhYmJlcl9uZXdfYXJlYTsNCg0KCWlmICgk c21kX3RhYmJlcl9uZXdfbmFtZSA9PSAnJykgew0KCQkkbXNnID0gYXJyYXkoc21kX3RhYmJl cl9nVHh0KCdzbWRfdGFiYmVyX25lZWRfbmFtZScpLCBFX1dBUk5JTkcpOw0KCX0gZWxzZSB7 DQoJCWlmICgkdGhlQXJlYSA9PSAnJykgew0KCQkJJG1zZyA9IGFycmF5KHNtZF90YWJiZXJf Z1R4dCgnc21kX3RhYmJlcl9uZWVkX2FyZWEnKSwgRV9XQVJOSU5HKTsNCgkJfSBlbHNlIHsN CgkJCSRleGlzdHMgPSBzYWZlX2ZpZWxkKCduYW1lJywgU01EX1RBQkJFUiwgIm5hbWU9JyRz bWRfdGFiYmVyX25ld19uYW1lJyIpOw0KCQkJJHNhbWUgPSAoJHNtZF90YWJiZXJfbmFtZSAh PSAkc21kX3RhYmJlcl9uZXdfbmFtZSkgJiYgJGV4aXN0czsNCgkJCWlmICgkc2FtZSA9PSBm YWxzZSkgew0KCQkJCSRfUE9TVFsnc21kX3RhYmJlcl9uYW1lJ10gPSAkc21kX3RhYmJlcl9u ZXdfbmFtZTsNCgkJCQlpZiAoJHNtZF90YWJiZXJfbmFtZSA9PSAnJykgew0KCQkJCQlzYWZl X2luc2VydChTTURfVEFCQkVSLCAibmFtZT0nJHNtZF90YWJiZXJfbmV3X25hbWUnLCBzb3J0 X29yZGVyPSckc21kX3RhYmJlcl9zb3J0X29yZGVyJywgYXJlYT0nIi5kb1NsYXNoKCR0aGVB cmVhKS4iJywgcGFnZT0nJHNtZF90YWJiZXJfcGFnZScsIHN0eWxlPSckc21kX3RhYmJlcl9z dHlsZScsIHZpZXdfcHJpdnM9JyRzbWRfdGFiYmVyX3ZpZXdfcHJpdnMnIik7DQoJCQkJCSRt c2cgPSBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJfY3JlYXRlZCcpOw0KCQkJCX0gZWxz ZSB7DQoJCQkJCXNhZmVfdXBkYXRlKFNNRF9UQUJCRVIsICJuYW1lPSckc21kX3RhYmJlcl9u ZXdfbmFtZScsIHNvcnRfb3JkZXI9JyRzbWRfdGFiYmVyX3NvcnRfb3JkZXInLCBhcmVhPSci LmRvU2xhc2goJHRoZUFyZWEpLiInLCBwYWdlPSckc21kX3RhYmJlcl9wYWdlJywgc3R5bGU9 JyRzbWRfdGFiYmVyX3N0eWxlJywgdmlld19wcml2cz0nJHNtZF90YWJiZXJfdmlld19wcml2 cyciLCAibmFtZT0nJHNtZF90YWJiZXJfbmFtZSciKTsNCgkJCQkJJG1zZyA9IHNtZF90YWJi ZXJfZ1R4dCgnc21kX3RhYmJlcl9zYXZlZCcpOw0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJ JG1zZyA9IGFycmF5KHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9leGlzdHMnKSwgRV9X QVJOSU5HKTsNCgkJCX0NCgkJfQ0KCX0NCglzbWRfdGFiYmVyKCRtc2cpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90YWJiZXJfZGVsZXRlKCkg ew0KCWdsb2JhbCAkc21kX3RhYmJlcl9ldmVudDsNCg0KCSRuYW1lID0gZG9TbGFzaChncHMo J3NtZF90YWJiZXJfbmFtZScpKTsNCg0KCSRyZXQgPSBzYWZlX2RlbGV0ZShTTURfVEFCQkVS LCAibmFtZT0nJG5hbWUnIik7DQoJJG1zZyA9IHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJl cl9kZWxldGVkJyk7DQoNCgkkX0dFVFsnc21kX3RhYmJlcl9uYW1lJ10gPSAnJzsNCg0KCXNt ZF90YWJiZXIoJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX3RhYmJlcl9wcmVmcygkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfdGFiYmVy X2V2ZW50LCAkc21kX3RhYmJlcl9zdHlsZXM7DQoNCglwYWdldG9wKHNtZF90YWJiZXJfZ1R4 dCgnc21kX3RhYmJlcl9wcmVmc19sYmwnKSwgJG1zZyk7DQoNCgkkdXNlcnMgPSBzYWZlX3Jv d3MoJyonLCAndHhwX3VzZXJzJywgJzE9MSBPUkRFUiBCWSBSZWFsTmFtZScpOw0KCSRwcml2 cyA9IGFycmF5KCcnID0+IHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9hbGxfcHVicycp KTsNCglmb3JlYWNoICgkdXNlcnMgYXMgJGlkeCA9PiAkdXNlcikgew0KCQkkcHJpdnNbJHVz ZXJbJ25hbWUnXV0gPSAkdXNlclsnUmVhbE5hbWUnXTsNCgl9DQoNCgkkY3Vycl9wcml2cyA9 IGV4cGxvZGUoJywnLCBnZXRfcHJlZignc21kX3RhYmJlcl90YWJfcHJpdnMnLCAnJykpOw0K CSRwYXJzZV9kZXB0aCA9IGdldF9wcmVmKCdzbWRfdGFiYmVyX3BhcnNlX2RlcHRoJywgJzEn KTsNCgkkdGFiX3ByZWZpeCA9IGdldF9wcmVmKCdzbWRfdGFiYmVyX3RhYl9wcmVmaXgnLCAn dGFiYmVyXycpOw0KDQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nIC4gJHNtZF90 YWJiZXJfc3R5bGVzWydwcmVmcyddIC4gJzwvc3R5bGU+JzsNCgllY2hvICc8Zm9ybSBhY3Rp b249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0IiBuYW1lPSJzbWRfdGFiYmVyX3ByZWZzX2Zv cm0iPic7DQoJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJZWNobyB0cih0ZGEoaGVkKHNt ZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9wcmVmc19sYmwnKSwgMiksICcgY29sc3Bhbj0i MyInKSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl90 YWJfcHJpdnMnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpDQoJCS4gdGRhKHNtZF90YWJiZXJf bXVsdGlfc2VsZWN0KCdzbWRfdGFiYmVyX3RhYl9wcml2cycsICRwcml2cywgJGN1cnJfcHJp dnMsIDEwKSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfdGFiYmVyX2dUeHQoJ3NtZF90 YWJiZXJfdGFiX3ByZWZpeCcpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykNCgkJLiB0ZGEoZklu cHV0KCd0ZXh0JywgJ3NtZF90YWJiZXJfdGFiX3ByZWZpeCcsICR0YWJfcHJlZml4KSkNCgkp Ow0KCWVjaG8gdHIoDQoJCXRkYShzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJfcGFyc2Vf ZGVwdGgnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpDQoJCS4gdGRhKGZJbnB1dCgndGV4dCcs ICdzbWRfdGFiYmVyX3BhcnNlX2RlcHRoJywgJHBhcnNlX2RlcHRoKSkNCgkpOw0KCWVjaG8g dHIodGRhKGVMaW5rKCRzbWRfdGFiYmVyX2V2ZW50LCAnJywgJycsICcnLCBzbWRfdGFiYmVy X2dUeHQoJ3NtZF90YWJiZXJfY2FuY2VsJykpLCAnIGNsYXNzPSJub2xpbmUiJykgLiB0ZGEo ZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLiBlSW5wdXQo JHNtZF90YWJiZXJfZXZlbnQpLnNJbnB1dCgnc21kX3RhYmJlcl9wcmVmc2F2ZScpLCAnIGNs YXNzPSJub2xpbmUiJykpOw0KCWVjaG8gZW5kVGFibGUoKTsNCgllY2hvICc8L2Zvcm0+JzsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFiYmVy X3ByZWZzYXZlKCkgew0KCSRkZXB0aCA9IGludHZhbChncHMoJ3NtZF90YWJiZXJfcGFyc2Vf ZGVwdGgnKSk7DQoJJHByZWZpeCA9IGdwcygnc21kX3RhYmJlcl90YWJfcHJlZml4Jyk7DQoJ JGl0ZW1zID0gZ3BzKCdzbWRfdGFiYmVyX3RhYl9wcml2cycpOw0KCSRwcml2cyA9ICgkaXRl bXMpID8gam9pbignLCcsICRpdGVtcykgOiAnJzsNCglzZXRfcHJlZignc21kX3RhYmJlcl90 YWJfcHJpdnMnLCAkcHJpdnMsICdzbWRfdGFiYmVyJywgUFJFRl9ISURERU4sICd0ZXh0X2lu cHV0Jyk7DQoJc2V0X3ByZWYoJ3NtZF90YWJiZXJfdGFiX3ByZWZpeCcsICRwcmVmaXgsICdz bWRfdGFiYmVyJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJc2V0X3ByZWYoJ3Nt ZF90YWJiZXJfcGFyc2VfZGVwdGgnLCAkZGVwdGgsICdzbWRfdGFiYmVyJywgUFJFRl9ISURE RU4sICd0ZXh0X2lucHV0Jyk7DQoNCgkkbXNnID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQn KTsNCglzbWRfdGFiYmVyKCRtc2cpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF90YWJiZXJfbXVsdGlfc2VsZWN0KCRuYW1lLCAkaXRlbXMsICRz ZWw9YXJyYXkoKSwgJHNpemU9JzcnKSB7DQoJJG91dCA9ICc8c2VsZWN0IG5hbWU9IicuJG5h bWUuJ1tdIiBtdWx0aXBsZT0ibXVsdGlwbGUiIHNpemU9IicuJHNpemUuJyI+Jy5uOw0KCWZv cmVhY2ggKCRpdGVtcyBhcyAkaWR4ID0+ICRpdGVtKSB7DQoJCSRvdXQgLj0gJzxvcHRpb24g dmFsdWU9IicuJGlkeC4nIicuKChpbl9hcnJheSgkaWR4LCAkc2VsKSkgPyAnIHNlbGVjdGVk PSJzZWxlY3RlZCInIDogJycpLic+Jy4kaXRlbS4nPC9vcHRpb24+Jy5uOw0KCX0NCgkkb3V0 IC49ICc8L3NlbGVjdD4nLm47DQoNCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBBZGQgdGFiYmVyIHRhYmxlIGlmIG5vdCBhbHJlYWR5IGlu c3RhbGxlZA0KZnVuY3Rpb24gc21kX3RhYmJlcl90YWJsZV9pbnN0YWxsKCRzaG93cGFuZT0n MScpIHsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsNCgkkcmV0ID0gJyc7DQoJ JHNxbCA9IGFycmF5KCk7DQoJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT IGAiLlBGWC5TTURfVEFCQkVSLiJgICgNCgkJYG5hbWVgIHZhcmNoYXIoMzIpIE5PVCBOVUxM IGRlZmF1bHQgJycgQ09MTEFURSB1dGY4X2dlbmVyYWxfY2ksDQoJCWBzb3J0X29yZGVyYCB2 YXJjaGFyKDMyKSBOVUxMIGRlZmF1bHQgJycgQ09MTEFURSB1dGY4X2dlbmVyYWxfY2ksDQoJ CWBhcmVhYCB2YXJjaGFyKDMyKSBOVUxMIGRlZmF1bHQgJycgQ09MTEFURSB1dGY4X2dlbmVy YWxfY2ksDQoJCWB2aWV3X3ByaXZzYCB2YXJjaGFyKDMyKSBOT1QgTlVMTCBkZWZhdWx0ICcn LA0KCQlgcGFnZWAgdmFyY2hhcigzMikgTlVMTCBkZWZhdWx0ICcnLA0KCQlgc3R5bGVgIHZh cmNoYXIoMzIpIE5VTEwgZGVmYXVsdCAnJywNCgkJUFJJTUFSWSBLRVkgKGBuYW1lYCkNCgkp IEVOR0lORT1NeUlTQU0iOw0KDQoJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJCWRtcCgkc3FsKTsN Cgl9DQoJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRx cnkpOw0KCQlpZiAoJHJldD09PWZhbHNlKSB7DQoJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3Vu dCddKys7DQoJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJZWNobyAiPCEtLVxuICRxcnkgXG4t LT5cbiI7DQoJCX0NCgl9DQoNCgkvLyBVcGdyYWRlOiBiZSBraW5kIHRvIGJldGEgdGVzdGVy cw0KCSRmbGRzID0gZ2V0VGhpbmdzKCdkZXNjcmliZSBgJy5QRlguU01EX1RBQkJFUi4nYCcp Ow0KCWlmICghaW5fYXJyYXkoJ3NvcnRfb3JkZXInLCRmbGRzKSkgew0KCQlzYWZlX2FsdGVy KFNNRF9UQUJCRVIsICJhZGQgYHNvcnRfb3JkZXJgIHZhcmNoYXIoMzIpIE5VTEwgZGVmYXVs dCAnJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSBhZnRlciBgbmFtZWAiKTsNCgl9DQoNCgkv LyBTcGl0IG91dCByZXN1bHRzDQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0g MCkgew0KCQlpZiAoJHNob3dwYW5lKSB7DQoJCQkkbXNnID0gc21kX3RhYmJlcl9nVHh0KCdz bWRfdGFiYmVyX3RibF9pbnN0YWxsZWQnKTsNCgkJCXNtZF90YWJiZXIoJG1zZyk7DQoJCX0N Cgl9IGVsc2Ugew0KCQlpZiAoJHNob3dwYW5lKSB7DQoJCQkkbXNnID0gc21kX3RhYmJlcl9n VHh0KCdzbWRfdGFiYmVyX3RibF9ub3RfaW5zdGFsbGVkJyk7DQoJCQlzbWRfdGFiYmVyKCRt c2cpOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERy b3AgdGFibGUgaWYgaW4gZGF0YWJhc2UNCmZ1bmN0aW9uIHNtZF90YWJiZXJfdGFibGVfcmVt b3ZlKCRzaG93cGFuZT0nMScpIHsNCgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJ JEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJJHNxbFtdID0gIkRST1AgVEFCTEUg SUYgRVhJU1RTICIgLlBGWC5TTURfVEFCQkVSLiAiOyAiOw0KCWlmKGdwcygnZGVidWcnKSkg ew0KCQlkbXAoJHNxbCk7DQoJfQ0KCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgew0KCQkkcmV0 ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJJEdMT0JB TFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vy cl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCWVjaG8g IjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQl9DQoJfQ0KCWlmICgkR0xPQkFMU1sndHhwX2Vy cl9jb3VudCddID09IDApIHsNCgkJaWYgKCRzaG93cGFuZSkgew0KCQkJJG1zZyA9IHNtZF90 YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl90YmxfcmVtb3ZlZCcpOw0KCQl9DQoJfSBlbHNlIHsN CgkJaWYgKCRzaG93cGFuZSkgew0KCQkJJG1zZyA9IHNtZF90YWJiZXJfZ1R4dCgnc21kX3Rh YmJlcl90Ymxfbm90X3JlbW92ZWQnKTsNCgkJCXNtZF90YWJiZXIoJG1zZyk7DQoJCX0NCgl9 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RhYmJl cl90YWJsZV9leGlzdCgkYWxsPScnKSB7DQoJaWYgKCRhbGwpIHsNCgkJJHRibHMgPSBhcnJh eShTTURfVEFCQkVSID0+IDYpOw0KCQkkb3V0ID0gY291bnQoJHRibHMpOw0KCQlmb3JlYWNo ICgkdGJscyBhcyAkdGJsID0+ICRjb2xzKSB7DQoJCQlpZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJ CQkJZWNobyAiKysgVEFCTEUgIi4kdGJsLiIgSEFTICIuY291bnQoQHNhZmVfc2hvdygnY29s dW1ucycsICR0YmwpKS4iIENPTFVNTlM7IFJFUVVJUkVTICIuJGNvbHMuIiArKyIuYnI7DQoJ CQl9DQoJCQlpZiAoY291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsICR0YmwpKSA9PSAkY29s cykgew0KCQkJCSRvdXQtLTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gKCRvdXQ9PT0wKSA/IDEg OiAwOw0KCX0gZWxzZSB7DQoJCWlmIChncHMoJ2RlYnVnJykpIHsNCgkJCWVjaG8gIisrIFRB QkxFICIuU01EX1RBQkJFUi4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBT TURfdGFiYmVyKSkuIiBDT0xVTU5TOyI7DQoJCX0NCgkJcmV0dXJuKEBzYWZlX3Nob3coJ2Nv bHVtbnMnLCBTTURfVEFCQkVSKSk7DQoJfQ0KfQ0KDQovLyAqKioqKioqKioqKg0KLy8gUFVC TElDIFRBR1MNCi8vICoqKioqKioqKioqDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF90YWJiZXJfZWRpdF9wYWdlKCRhdHRzLCAkdGhpbmc9TlVMTCkgew0K CWdsb2JhbCAkc21kX3RhYmJlcl9jYWxsc3RhY2ssICRldmVudDsNCg0KCWV4dHJhY3QobEF0 dHMoYXJyYXkoDQoJCSduYW1lJyAgICA9PiAkZXZlbnQsDQoJCSd0aXRsZScgICA9PiAnRWRp dCBwYWdlJywNCgkJJ2NsYXNzJyAgID0+ICcnLA0KCQknaHRtbF9pZCcgPT4gJycsDQoJCSd3 cmFwdGFnJyA9PiAnJywNCgkpLCRhdHRzKSk7DQoNCgkkdGFiX3ByZWZpeCA9IGdldF9wcmVm KCdzbWRfdGFiYmVyX3RhYl9wcmVmaXgnLCAndGFiYmVyXycpOw0KDQoJaWYgKGlzc2V0KCRh dHRzWyduYW1lJ10pKSB7DQoJCSRwYWdlID0gKHN0cnBvcygkbmFtZSwgJHRhYl9wcmVmaXgp ICE9PSBmYWxzZSkgPyAkbmFtZSA6ICR0YWJfcHJlZml4LiRuYW1lOw0KCX0gZWxzZSB7DQoJ CS8vIExvb2t1cCB0aGUgbmFtZSBvZiB0aGUgcGFnZQ0KCQkkZXYgPSAoc3RycG9zKCRuYW1l LCAkdGFiX3ByZWZpeCkgIT09IGZhbHNlKSA/IHN0cl9yZXBsYWNlKCR0YWJfcHJlZml4LCAn JywgJG5hbWUpIDogJG5hbWU7DQoJCSRwYWdlID0gKGlzc2V0KCRzbWRfdGFiYmVyX2NhbGxz dGFja1skZXZdKSkgPyAkc21kX3RhYmJlcl9jYWxsc3RhY2tbJGV2XVsncGFnZSddIDogJyc7 DQoJfQ0KCSRpZHggPSAnbmFtZSc7DQoJJHN0ZXAgPSAnJzsNCglpZiAoISRwYWdlKSB7DQoJ CSRwYWdlID0gJGlkeCA9ICcnOw0KCQkkc3RlcCA9ICdwYWdlX25ldyc7DQoJfQ0KDQoJJGxu ayA9IGVMaW5rKCdwYWdlJywgJHN0ZXAsICRpZHgsICRwYWdlLCAkdGl0bGUpOw0KCXJldHVy biAoJHdyYXB0YWcpID8gZG9UYWcoJGxuaywgJHdyYXB0YWcsICRjbGFzcywgJycsICRodG1s X2lkKSA6ICRsbms7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX3RhYmJlcl9lZGl0X3N0eWxlKCRhdHRzLCAkdGhpbmc9TlVMTCkgew0KCWdsb2Jh bCAkc21kX3RhYmJlcl9jYWxsc3RhY2ssICRldmVudDsNCg0KCWV4dHJhY3QobEF0dHMoYXJy YXkoDQoJCSduYW1lJyAgICA9PiAkZXZlbnQsDQoJCSd0aXRsZScgICA9PiAnRWRpdCBDU1Mn LA0KCQknY2xhc3MnICAgPT4gJycsDQoJCSdodG1sX2lkJyA9PiAnJywNCgkJJ3dyYXB0YWcn ID0+ICcnLA0KCSksJGF0dHMpKTsNCg0KCSR0YWJfcHJlZml4ID0gZ2V0X3ByZWYoJ3NtZF90 YWJiZXJfdGFiX3ByZWZpeCcsICd0YWJiZXJfJyk7DQoNCglpZiAoaXNzZXQoJGF0dHNbJ25h bWUnXSkpIHsNCgkJJGNzcyA9IChzdHJwb3MoJG5hbWUsICR0YWJfcHJlZml4KSAhPT0gZmFs c2UpID8gJG5hbWUgOiAkdGFiX3ByZWZpeC4kbmFtZTsNCgl9IGVsc2Ugew0KCQkvLyBMb29r dXAgdGhlIG5hbWUgb2YgdGhlIHN0eWxlc2hlZXQNCgkJJGV2ID0gKHN0cnBvcygkbmFtZSwg JHRhYl9wcmVmaXgpICE9PSBmYWxzZSkgPyBzdHJfcmVwbGFjZSgkdGFiX3ByZWZpeCwgJycs ICRuYW1lKSA6ICRuYW1lOw0KCQkkY3NzID0gKGlzc2V0KCRzbWRfdGFiYmVyX2NhbGxzdGFj a1skZXZdKSkgPyAkc21kX3RhYmJlcl9jYWxsc3RhY2tbJGV2XVsnc3R5bGUnXSA6ICcnOw0K CX0NCg0KCSRpZHggPSAnbmFtZSc7DQoJJHN0ZXAgPSAnJzsNCglpZiAoISRjc3MpIHsNCgkJ JGNzcyA9ICRpZHggPSAnJzsNCgkJJHN0ZXAgPSAncG91cic7DQoJfQ0KDQoJJGxuayA9IGVM aW5rKCdjc3MnLCAkc3RlcCwgJGlkeCwgJGNzcywgJHRpdGxlKTsNCglyZXR1cm4gKCR3cmFw dGFnKSA/IGRvVGFnKCRsbmssICR3cmFwdGFnLCAkY2xhc3MsICcnLCAkaHRtbF9pZCkgOiAk bG5rOw0KfQ0KDQpmdW5jdGlvbiBzbWRfdGFiYmVyX2dUeHQoJHdoYXQsICRhdHRzID0gYXJy YXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdzbWRfdGFiYmVyX2FsbF9wdWJzJyA9PiAn QWxsIHB1Ymxpc2hlcnMnLA0KCQknc21kX3RhYmJlcl9hcmVhJyA9PiAnQXNzaWduIHRvIGFy ZWE6JywNCgkJJ3NtZF90YWJiZXJfY2FuY2VsJyA9PiAnW0NhbmNlbF0nLA0KCQknc21kX3Rh YmJlcl9jaG9vc2UnID0+ICdTZWxlY3QgdGFiIHRvIGVkaXQ6JywNCgkJJ3NtZF90YWJiZXJf Y3JlYXRlZCcgPT4gJ1RhYiBjcmVhdGVkLiBSZWZyZXNoIHRvIHNlZSBpdCcsDQoJCSdzbWRf dGFiYmVyX2RlbGV0ZWQnID0+ICdUYWIgZGVsZXRlZC4gUmVmcmVzaCB0byBzZWUgY2hhbmdl cycsDQoJCSdzbWRfdGFiYmVyX2V4aXN0cycgPT4gJ1RhYiBhbHJlYWR5IGV4aXN0cycsDQoJ CSdzbWRfdGFiYmVyX2hlYWRpbmcnID0+ICdNYW5hZ2UgYWRkaXRpb25hbCBUWFAgdGFicycs DQoJCSdzbWRfdGFiYmVyX25hbWUnID0+ICdUYWIgbmFtZTonLA0KCQknc21kX3RhYmJlcl9u ZWVkX2FyZWEnID0+ICdQbGVhc2Ugc3VwcGx5IGEgbG9jYXRpb24gZm9yIHRoZSB0YWInLA0K CQknc21kX3RhYmJlcl9uZWVkX25hbWUnID0+ICdQbGVhc2Ugc3VwcGx5IGEgdGFiIG5hbWUn LA0KCQknc21kX3RhYmJlcl9uZXdfYXJlYScgPT4gJ05ldyBhcmVhID4+JywNCgkJJ3NtZF90 YWJiZXJfbmV3X3RhYicgPT4gJ05ldyB0YWInLA0KCQknc21kX3RhYmJlcl9wYWdlJyA9PiAn UGFnZSB0ZW1wbGF0ZTonLA0KCQknc21kX3RhYmJlcl9wYXJzZV9kZXB0aCcgPT4gJ1BhcnNl IGRlcHRoJywNCgkJJ3NtZF90YWJiZXJfcHJlZnMnID0+ICdQcmVmZXJlbmNlcycsDQoJCSdz bWRfdGFiYmVyX3ByZWZzX2xibCcgPT4gJ1RhYmJlciBwZWZlcmVuY2VzJywNCgkJJ3NtZF90 YWJiZXJfcHJlZnNfc29tZV9leHBsYWluJyA9PiAnVGhpcyBpcyBlaXRoZXIgYSBuZXcgaW5z dGFsbGF0aW9uIG9yIGEgZGlmZmVyZW50IHZlcnNpb24nLmJyLidvZiB0aGUgcGx1Z2luIHRv IG9uZSB5b3UgaGFkIGJlZm9yZS4nLA0KCQknc21kX3RhYmJlcl9wcmVmc19zb21lX29wdHMn ID0+ICdDbGljayAiSW5zdGFsbCB0YWJsZSIgdG8gYWRkIG9yIHVwZGF0ZSB0aGUgdGFibGUn LmJyLidsZWF2aW5nIGFsbCBleGlzdGluZyBkYXRhIHVudG91Y2hlZC4nLA0KCQknc21kX3Rh YmJlcl9wcmVmc19zb21lX3RibCcgPT4gJ05vdCBhbGwgdGFibGUgaW5mbyBhdmFpbGFibGUu JywNCgkJJ3NtZF90YWJiZXJfdmlld19wcml2cycgPT4gJ1ZpZXcgcHJpdmlsZWdlczonLA0K CQknc21kX3RhYmJlcl9zYXZlZCcgPT4gJ1RhYiBzYXZlZC4gUmVmcmVzaCB0byBzZWUgY2hh bmdlcycsDQoJCSdzbWRfdGFiYmVyX3NvcnRfb3JkZXInID0+ICdTb3J0IG9yZGVyOicsDQoJ CSdzbWRfdGFiYmVyX3N0eWxlJyA9PiAnU3R5bGVzaGVldDonLA0KCQknc21kX3RhYmJlcl90 YWJfbmFtZScgPT4gJ01hbmFnZSB0YWJzJywNCgkJJ3NtZF90YWJiZXJfdGFiX3ByZWZpeCcg PT4gJ1BhZ2UvU3R5bGUgcHJlZml4JywNCgkJJ3NtZF90YWJiZXJfdGFiX3ByaXZzJyA9PiAn UGVybWl0IHRhYnMgdG8gYmUgbWFuYWdlZCBieScsDQoJCSdzbWRfdGFiYmVyX3RibF9pbnN0 YWxsZWQnID0+ICdUYWJsZSBpbnN0YWxsZWQnLA0KCQknc21kX3RhYmJlcl90YmxfaW5zdGFs bF9sYmwnID0+ICdJbnN0YWxsIHRhYmxlJywNCgkJJ3NtZF90YWJiZXJfdGJsX25vdF9pbnN0 YWxsZWQnID0+ICdUYWJsZSBOT1QgaW5zdGFsbGVkJywNCgkJJ3NtZF90YWJiZXJfdGJsX25v dF9yZW1vdmVkJyA9PiAnVGFibGUgTk9UIHJlbW92ZWQnLA0KCQknc21kX3RhYmJlcl90Ymxf cmVtb3ZlZCcgPT4gJ1RhYmxlIHJlbW92ZWQnLA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5n WyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6 MToiNSI7czo1OiJmbGFncyI7czoxOiIyIjtzOjQ6ImhlbHAiO3M6MTI4Nzk6IjxkaXYgaWQ9 InNtZF9oZWxwIj4KCgk8aDEgaWQ9InNtZF90YWJiZXJfdG9wIj5zbWRfdGFiYmVyPC9oMT4K Cgk8cD5DcmVhdGUgYW5kIG1hbmFnZSB5b3VyIG93biA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiB0YWJzL3N1Yi10YWJzLCBwb3B1bGF0aW5nIHRoZW0gd2l0aCBhbnkgY29udGVu dCB5b3Ugd2lzaCBmb3IgeW91ciB1c2Vycy4gQ29udGVudCBhbmQgPHNwYW4gY2xhc3M9ImNh cHMiPkNTUzwvc3Bhbj4gYXJlIGNvbnRyb2xsZWQgYnkgcmVndWxhciBUZXh0cGF0dGVybiBQ YWdlcy9TdHlsZXNoZWV0cy4gQWN0cyBsaWtlIGEgbXVsdGktdXNlciwgbXVsdGktdGFiIGRh c2hib2FyZCBmb3IgeW91ciBhZG1pbi1zaWRlIHVzZXJzLjwvcD4KCgk8aDIgaWQ9InNtZF90 YWJiZXJfZmVhdCI+RmVhdHVyZXM6PC9oMj4KCgk8dWw+CgkJPGxpPkRlZmluZSBuZXcgcHJp bWFyeSBvciBzZWNvbmRhcnkgdGFicyBpbiB5b3VyIG1lbnUgaGllcmFyY2h5PC9saT4KCQk8 bGk+QXNzaWduIGEgUGFnZSBhbmQgYSBTdHlsZSB0byBtZW51IGl0ZW1zPC9saT4KCQk8bGk+ VHdvIGNvbnZlbmllbmNlIHRhZ3MgYWxsb3cgeW91IHRvIGFkZCBFZGl0IGxpbmtzIGluIHlv dXIgbWFya3VwIGZvciBxdWljayBhY2Nlc3MgdG8gZWRpdCB0aGUgdGFiJiM4MjE3O3MgY29u dGVudDwvbGk+Cgk8L3VsPgoKCTxoMj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCgk8cD5Xcml0 dGVuIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERh d3NvbjwvYT4uIFNwYXduZWQgZnJvbSBhbiBpZGVhIGJ5IG1hdmVyaWNrLCB3aXRoIHRoYW5r cy4gS3Vkb3MgdG8gdGhlIGZlZWRiYWNrIGZyb20gdGhlIGJldGEgdGVzdCB0ZWFtICYjODIx MjsgbWFydWNoYW4gYW5kIG1hdmVyaWNrICYjODIxMjsgd2hvIHB1dCB1cCB3aXRoIGVuZGxl c3MgbmV3IHZlcnNpb25zIGEgZGF5IHVudGlsIEkgZ290IGl0IHJpZ2h0LjwvcD4KCgk8aDI+ SW5zdGFsbGF0aW9uIC8gdW5pbnN0YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJpbXBvcnRh bnQiPlJlcXVpcmVzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuNC4wKzwvcD4K Cgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90 ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMjE2L3NtZF90YWJiZXIiPnRleHRwYXR0ZXJuLm9y ZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3 YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiA8ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhbmUsIGluc3Rh bGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBUbyB1bmluc3RhbGwsIGRlbGV0ZSBmcm9tIHRo ZSA8ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhZ2UuIFRoZSB0YWJsZSBjb250YWlu aW5nIHRoZSBleHRyYSB0YWIgZGVmaW5pdGlvbnMgd2lsbCBiZSByZW1vdmVkIGJ1dCB5b3Vy IHRhYiBQYWdlcyBhbmQgU3R5bGVzaGVldHMgd2lsbCByZW1haW4uPC9wPgoKCTxwPlZpc2l0 IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5w aHA/aWQ9MzU4ODIiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBv cnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxo MiBpZD0ic21kX3RhYmJlcl91c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPlZpc2l0IDxlbT5BZG1p bi0mZ3Q7TWFuYWdlIHRhYnM8L2VtPi4gV2hlbiB0aGVyZSBhcmUgc29tZSBjdXN0b20gdGFi cyBkZWZpbmVkLCB0aGUgZHJvcGRvd24gYmVuZWF0aCB0aGUgaGVhZGluZyBjb250YWlucyBh IGxpc3Qgb2YgYWxsIHlvdXIgdGFicywgZ3JvdXBlZCBieSB0aGVpciBhcmVhLiBDaG9vc2Ug b25lIG9mIHRoZSB0YWJzIHRvIGxvYWQgaXQgaW50byB0aGUgYm94ZXMgYmVsb3cgZm9yIGVk aXRpbmcuIFRoZSBib3hlcyBhcmU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPlRhYiBuYW1lPC9zcGFuPiA6IG5hbWUgb2YgeW91ciB0YWIgYXMgaXQgYXBwZWFycyB0 byB5b3VyIHVzZXJzIChjYXNlIHNlbnNpdGl2ZSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+U29ydCBvcmRlcjwvc3Bhbj4gOiBhbiBvcHRpb25hbCB2YWx1ZSB5b3UgY2FuIGFz c2lnbiB0byB0aGlzIHRhYiB0aGF0IGRpY3RhdGVzIHRoZSBwb3NpdGlvbiBpdCB3aWxsIG9j Y3VweSBpbiB5b3VyIHRhYiBzZXF1ZW5jZS4gVGFicyBhcmUgc29ydGVkIGJ5IHRoaXMgdmFs dWUgYmVmb3JlIGJlaW5nIHNsb3R0ZWQgaW50byB0aGUgbWVudTwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5Bc3NpZ24gdG8gYXJlYTwvc3Bhbj4gOiBzZWxlY3Qgd2hpY2ggcHJp bWFyeS1sZXZlbCB0YWIgKGEuay5hLiB0aGUgJiM4MjIwO3RvcCByb3cmIzgyMjE7IGluIHRo ZSBDbGFzc2ljIHRoZW1lKSB5b3VyIG5ldyB0YWIgd2lsbCBhcHBlYXIgdW5kZXIuIElmIHlv dSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBvbmUsIHR5cGUgaXQgaW4gdGhlIGFkamFjZW50IGJv eCAoY2FzZSBzZW5zaXRpdmUpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlZpZXcg cHJpdmlsZWdlczwvc3Bhbj4gOiBzZWxlY3QgdGhlIHVzZXIgcHJpdmlsZWdlIGxldmVscyB0 aGF0IGFyZSBhbGxvd2VkIHRvIHNlZSB0aGlzIHRhYi4gRGVmYXVsdDogY3VycmVudCBsZXZl bCBvZiBsb2dnZWQtaW4gdXNlci4gTm90ZSB0aGF0ICYjODIxNjtub25lJiM4MjE3OyBpcyBh biBvcHRpb24uIFRoaXMgYWxsb3dzIHlvdSB0byByZW1vdmUgYSBtZW51IGZyb20gb3BlcmF0 aW9uIGFuZCAmIzgyMTY7cGFyayYjODIxNzsgaXQgd2hpbGUgaXQgaXMgYmVpbmcgY3JlYXRl ZC9lZGl0ZWQsIHdpdGhvdXQgZmVhciBvZiBhbnlvbmUgYmVpbmcgYWJsZSB0byBzZWUgd2hh dCB5b3UgYXJlIGRvaW5nLiBXaGVuIHlvdSBhcmUgcmVhZHkgdG8gcHV0IGl0IGludG8gcHJv ZHVjdGlvbiwgc2ltcGx5IHJlYXNzaWduIGl0IHRvIGEgcmVndWxhciB1c2VyIGxldmVsPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlBhZ2UgdGVtcGxhdGU8L3NwYW4+IDogaWYg eW91IGhhdmUgZGVmaW5lZCBhdCBsZWFzdCBvbmUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gUGFnZSAoaW4gPGVtPlByZXNlbnRhdGlvbi0mZ3Q7UGFnZXM8L2VtPikgd2l0aCB0 aGUgZGVzaWduYXRlZCBwcmVmaXggKDxjb2RlPnRhYmJlcl88L2NvZGU+IGJ5IGRlZmF1bHQp IHRoZW4geW91IHdpbGwgc2VlIHRob3NlIHBhZ2VzIGxpc3RlZCBoZXJlLiBDaG9vc2Ugb25l IHRvIGFzc2lnbiBpdCB0byB0aGlzIHRhYi4gQ2xpY2sgdGhlIGFkamFjZW50IDxlbT5DcmVh dGU8L2VtPiBvciA8ZW0+RWRpdDwvZW0+IGxpbmsgYXMgYSBzaG9ydGN1dCB0byA8ZW0+UHJl c2VudGF0aW9uLSZndDtQYWdlczwvZW0+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PlN0eWxlc2hlZXQ8L3NwYW4+IDogaWYgeW91IGhhdmUgZGVmaW5lZCBhdCBsZWFzdCBvbmUg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gU3R5bGVzaGVldCAoaW4gPGVtPlByZXNl bnRhdGlvbi0mZ3Q7U3R5bGU8L2VtPikgd2l0aCB0aGUgZGVzaWduYXRlZCBwcmVmaXggKDxj b2RlPnRhYmJlcl88L2NvZGU+IGJ5IGRlZmF1bHQpIHRoZW4geW91IHdpbGwgc2VlIHRob3Nl IHNoZWV0cyBsaXN0ZWQgaGVyZS4gQ2hvb3NlIG9uZSB0byBhc3NpZ24gaXQgdG8gdGhpcyB0 YWIuIENsaWNrIHRoZSBhZGphY2VudCA8ZW0+Q3JlYXRlPC9lbT4gb3IgPGVtPkVkaXQ8L2Vt PiBsaW5rIGFzIGEgc2hvcnRjdXQgdG8gPGVtPlByZXNlbnRhdGlvbi0mZ3Q7U3R5bGU8L2Vt PjwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0ic21kX3RhYmJlcl9ub3RlcyI+SW50ZXJmYWNlIG5v dGVzPC9oMj4KCgk8aDM+R2VuZXJhbDwvaDM+CgoJPHVsPgoJCTxsaT5Zb3UgbmVlZCB0byBy ZWxvYWQgdGhlIGFkbWluIHNpZGUgYWZ0ZXIgc2F2aW5nIHRvIHNlZSBhbnkgY2hhbmdlczwv bGk+CgkJPGxpPkFyZWEgYW5kIFRhYiBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmU6IG5hbWUg dGhlbSBhcyB5b3Ugd2FudCB5b3VyIHVzZXJzIHRvIHNlZSB0aGUgdGFiczwvbGk+CgkJPGxp PlB1Ymxpc2hlciBsZXZlbCBhY2NvdW50cyBhbHNvIGhhdmUgYSA8YSBocmVmPSIjc21kX3Rh YmJlcl9wcmVmcyI+W1ByZWZlcmVuY2VzXTwvYT4gbGluayBiZWxvdyB0aGUgaGVhZGVyPC9s aT4KCQk8bGk+VXNpbmcgc21kX2ZhdXhfcm9sZSBpcyBhIGdvb2Qgd2F5IHRvIHF1aWNrbHkg c3dpdGNoIHVzZXIgbGV2ZWwgc28geW91IGNhbiBzZWUgdGhlIHRhYiBzdHJ1Y3R1cmVzIHlv dSBoYXZlIGNyZWF0ZWQ8L2xpPgoJPC91bD4KCgk8aDM+VGFiczwvaDM+CgoJPHVsPgoJCTxs aT5BbG9uZ3NpZGUgdGhlIHRhYiBzZWxlY3RvciBvZiBhbnkgdGFiIHlvdSBhcmUgZWRpdGlu ZyBpcyBhIDxlbT5WaWV3PC9lbT4gbGluay4gQ2xpY2sgdG8ganVtcCBzdHJhaWdodCB0byB0 aGUgc2VsZWN0ZWQgdGFiPC9saT4KCQk8bGk+QWxvbmdzaWRlIHRoZSA8ZW0+VGFiIG5hbWU8 L2VtPiBib3ggb2YgYW55IHRhYiB5b3UgYXJlIGVkaXRpbmcgaXMgYW4gW3hdIGxpbmsuIENs aWNrIHRvIGRlbGV0ZSB0aGUgdGFiPC9saT4KCQk8bGk+VGhlIDxlbT5Tb3J0IG9yZGVyPC9l bT4gYWxsb3dzIHlvdSB0byBhcmJpdHJhcmlseSBvcmRlciB0aGUgdGFicyB3aXRob3V0IGhh dmluZyB0byByZWx5IG9uIGludmVudGl2ZSB0YWIgbmFtaW5nIHN0cmF0ZWdpZXMuIElmIGFs bCB0aGUgc29ydCBib3hlcyBhcmUgbGVmdCBlbXB0eSwgdGhlIG9yZGVyIGlzIGRldGVybWlu ZWQgYnkgdGhlIGFscGhhYmV0aWMgb3JkZXIgb2YgdGhlIHRhYiBuYW1lczwvbGk+CgkJPGxp PlRhYiBuYW1lcyBtdXN0IGJlIHVuaXF1ZSAmIzgyMTI7IGV2ZW4gaWYgdGhleSBvY2N1cHkg ZGlmZmVyZW50IGFyZWFzPC9saT4KCTwvdWw+CgoJPGgzPkFyZWFzPC9oMz4KCgk8dWw+CgkJ PGxpPkFyZWFzIHdpbGwgYXBwZWFyIHRvIHRoZSByaWdodCBvZiB0aGUgPGVtPkV4dGVuc2lv bnM8L2VtPiB0YWIsIGluIGFscGhhYmV0aWNhbCBvcmRlcjsgdGhleSAoY3VycmVudGx5KSBj YW5ub3QgYmUgcG9zaXRpb25lZC4gSWYgeW91IHdhbnQgc29tZXRoaW5nIHRvIHN0YW5kIG91 dCwgYXR0YWNoIGl0IHRvIHRoZSAmIzgyMTY7c3RhcnQmIzgyMTc7IHRhYjwvbGk+CgkJPGxp PkFyZWFzIDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBoYXZlIGF0IGxlYXN0IG9u ZSBzdWItdGFiIGFzc2lnbmVkIHRvIHRoZW0gdG8gYmVjb21lIHZpc2libGU8L2xpPgoJPC91 bD4KCgk8aDM+UGFnZXMgYW5kIFN0eWxlczwvaDM+CgoJPHVsPgoJCTxsaT5QYWdlcyBhbmQg U3R5bGVzIG11c3QgYmVnaW4gd2l0aCB5b3VyIGNob3NlbiBwcmVmaXggKERlZmF1bHQ6IDxj b2RlPnRhYmJlcl88L2NvZGU+KSB0byBiZSBzZWxlY3RhYmxlIGJ5IHRoZSBwbHVnaW4uIENo YW5nZSB0aGUgcHJlZml4IHZpYSB0aGUgcGx1Z2luJiM4MjE3O3MgPGEgaHJlZj0iI3NtZF90 YWJiZXJfcHJlZnMiPlByZWZlcmVuY2VzPC9hPjwvbGk+CgkJPGxpPklmIHlvdSB2aWV3IHRo ZSBjb250ZW50IG9mIGEgdGFiIHRoYXQgaGFzIG5vIFBhZ2UgYXNzaWduZWQsIGEgZGVmYXVs dCBwYWdlIHdpbGwgYmUgdXNlZCB3aGljaCBjb250YWlucyAmIzgyMTY7RWRpdCBQYWdlJiM4 MjE3OyBhbmQgJiM4MjE2O0VkaXQgU3R5bGUmIzgyMTc7IGxpbmtzPC9saT4KCQk8bGk+UGFn ZXMgYW5kIFN0eWxlcyBjYW4gY29udGFpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiB0YWdzIGFuZCBhcmUgcGFyc2VkIGFzIGlmIG9uIHRoZSBwdWJsaWMgc2lkZS4gQnV0IHlv dSBkb24mIzgyMTc7dCBuZWVkIGEgPHNwYW4gY2xhc3M9ImNhcHMiPkRURDwvc3Bhbj4vaGVh ZC9ib2R5L2Zvb3RlciBlbGVtZW50IGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBzdXBwbGllZCBi eSB0aGUgYWRtaW4gaW50ZXJmYWNlOiB5b3UgYXJlIGp1c3QgZmlsbGluZyBpbiB0aGUgY29u dGVudCBiZXR3ZWVuIHRoZSBtZW51IGFuZCB0aGUgZm9vdGVyPC9saT4KCQk8bGk+SWYgeW91 IGFyZSB1c2luZyB0YWdzIHRoYXQgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlaXIgY29udGV4 dCwgeW91IHdpbGwgcHJvYmFibHkgaGF2ZSB0byBtYW51YWxseSBzcGVjaWZ5IHRoZSBjb250 ZXh0IHdoZW4gdXNpbmcgdGhvc2UgdGFncyBpbiBhZG1pbi1zaWRlIHBhZ2VzPC9saT4KCTwv dWw+CgoJPGgyIGlkPSJzbWRfdGFiYmVyX3ByZWZzIj5QcmVmZXJlbmNlczwvaDI+CgoJPHA+ PHN0cm9uZz5QZXJtaXQgdGFicyB0byBiZSBtYW5hZ2VkIGJ5PC9zdHJvbmc+PC9wPgoKCTxw PkJ5IGRlZmF1bHQgdGhlIHRhYiBtYW5hZ2VyIGlzIG9ubHkgYXZhaWxhYmxlIHRvIGFueSB1 c2VyIHdpdGggYSBQdWJsaXNoZXIgYWNjb3VudC4gU29tZXRpbWVzIHlvdSBtYXkgd2FudCB0 byBzdHJpY3RseSBjb250cm9sIHdobyBjYW4gb3IgY2Fubm90IGFkZC9lZGl0IHRhYnMuIElm IHlvdSB3aXNoIHRvIGRvIHRoaXMsIHNlbGVjdCB1c2VyIGFjY291bnRzIGZyb20gdGhlIDxl bT5QZXJtaXQgdGFicyB0byBiZSBtYW5hZ2VkIGJ5PC9lbT4gbGlzdCBhbmQgaGl0IFNhdmUu IEZyb20gdGhhdCBwb2ludCBvbiwgb25seSB0aG9zZSBleHBsaWNpdCB1c2VyIGFjY291bnRz IHdpbGwgYmUgYWxsb3dlZCBhY2Nlc3MgdG8gdGhlIHRhYiBtYW5hZ2VyLiA8c3BhbiBjbGFz cz0iaW1wb3J0YW50Ij5CZSBjYXJlZnVsIG5vdCB0byBsb2NrIHlvdXJzZWxmIG91dDwvc3Bh bj4gOi0pPC9wPgoKCTxwPk5vdGUgdGhhdCBubyByZXN0cmljdGlvbnMgYXJlIHBsYWNlZCBv biB3aG8gY2FuIGVkaXQgdGhlIHRhYiBQYWdlcyBhbmQgU3R5bGVzOiB0aGV5IGFyZSBzdWJq ZWN0IHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgdXN1YWwgcGVy bWlzc2lvbnMgc3RydWN0dXJlIHNvIGlmIHlvdSB3YW50IHRvIHJlc3RyaWN0IGFjY2VzcyB0 byB0aGVzZSBlbGVtZW50cywgY2hvb3NlIHN1aXRhYmxlIGFjY291bnRzIGZvciB5b3VyIHVz ZXJzIGFuZCB0aWUgdGhlbSB0byB0aGUgcGx1Z2luJiM4MjE3O3MgcHJlZnMuPC9wPgoKCTxw PjxzdHJvbmc+UGFnZS9TdHlsZSBwcmVmaXg8L3N0cm9uZz48L3A+CgoJPHA+SW4gb3JkZXIg dG8gYmUgYXNzaWduYWJsZSB0byBhIHRhYiwgeW91ciBjdXN0b20gcGFnZXMgLyBzdHlsZXNo ZWV0cyBtdXN0IGJlZ2luIHdpdGggYSBkZWZpbmVkIHByZWZpeC4gU2V0IHRoZSBwcmVmaXgg aGVyZS4gRGVmYXVsdDogPGNvZGU+dGFiYmVyXzwvY29kZT4uPC9wPgoKCTxwPjxzdHJvbmc+ UGFyc2UgZGVwdGg8L3N0cm9uZz48L3A+CgoJPHA+TW9zdCBvZiB0aGUgdGltZSwgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyBwYXJzZXIgdGFrZXMgY2FyZSBvZiBu ZXN0ZWQgdGFncyBuaWNlbHkgYnV0IGluIHNvbWUgcmFyZSBpbnN0YW5jZXMgeW91IG1heSBo YXZlLCBzYXksIDxjb2RlPntyZXBsYWNlbWVudH08L2NvZGU+IHN0cmluZ3MgaW5zaWRlIHRh Z3MgaW5zaWRlIHRhZ3MgYW5kIHRoZSBwYXJzZXIgbWlnaHQgbm90IGJlIHJlcGxhY2luZyBl dmVyeXRoaW5nLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIGluY3JlYXNlIHRoZSBwYXJzZSBk ZXB0aCBvZiBzbWRfdGFiYmVyIHNvIGl0IGNhbiBkaXZlIGRlZXBlciBpbnRvIHRoZSBuZXN0 ZWQgdGFnIHRyZWUuIFRoZSBkZWZhdWx0IGlzIG9uZSBwYXNzLCBidXQgaWYgeW91IHdpc2gg dG8gaW5jcmVhc2UgaXQsIGRvIHNvIHVzaW5nIHRoaXMgdmFsdWUuPC9wPgoKCTxoMiBpZD0i c21kX3RhYmJlcl90YWdzIj5QdWJsaWMgdGFnczwvaDI+CgoJPGgzPjxjb2RlPiZsdDt0eHA6 c21kX3RhYmJlcl9lZGl0X3BhZ2UgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOnNt ZF90YWJiZXJfZWRpdF9zdHlsZSAvJmd0OzwvY29kZT48L2gzPgoKCTxwPlJlbmRlcnMgYSBs aW5rIHRvIHRoZSA8ZW0+UHJlc2VudGF0aW9uLSZndDtQYWdlczwvZW0+IG9yIDxlbT5QcmVz ZW50YXRpb24tJmd0O1N0eWxlPC9lbT4gdGFicywgcmVzcGVjdGl2ZWx5LCB3aXRoIHRoZSBj dXJyZW50IHBhZ2Uvc3R5bGVzaGVldCBsb2FkZWQgcmVhZHkgZm9yIGVkaXRpbmcuIElmIHRo ZSByZXNvdXJjZSBkb2VzbiYjODIxNzt0IHlldCBleGlzdCB0aGUgbGluayB3aWxsIHRha2Ug eW91IHRvIGFuIGVtcHR5IGRvY3VtZW50LiBZb3UgbXVzdCBiZWdpbiB0aGUgbmFtZSBvZiB5 b3VyIHBhZ2Uvc3R5bGVzaGVldCB3aXRoIHlvdXIgY2hvc2VuIHByZWZpeCAoc2VlIDxhIGhy ZWY9IiNzbWRfdGFiYmVyX3ByZWZzIj5wcmVmczwvYT4pIGZvciBpdCB0byBiZSBwaWNrZWQg dXAgYnkgdGhlIHBsdWdpbi48L3A+CgoJPHA+T3B0aW9uYWwgYXJndW1lbnRzOjwvcD4KCgk8 dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5uYW1lPC9zcGFuPjogb3ZlcnJpZGUgdGhl IGRlZmF1bHQgbmFtZS4gSWYgeW91IHdhbnQgdG8gZm9yY2UgdGhlIGxpbmsgdG8gZWRpdCBh IHBhcnRpY3VsYXIgUGFnZS9TdHlsZXNoZWV0LCBzcGVjaWZ5IGl0IGhlcmUsIGVpdGhlciB3 aXRoIG9yIHdpdGhvdXQgdGhlIHByZWZpeDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij50aXRsZTwvc3Bhbj4gOiB0aGUgdGl0bGUgb2YgdGhlIGxpbmsuIERlZmF1bHQ6IDxjb2Rl PkVkaXQgcGFnZTwvY29kZT4gLyA8Y29kZT5FZGl0IENTUzwvY29kZT4sIHJlc3BlY3RpdmVs eTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53cmFwdGFnPC9zcGFuPiA6IHRoZSAo WClIVE1MIGVsZW1lbnQgKHdpdGhvdXQgYW5nbGUgYnJhY2tldHMpIHRvIHN1cnJvdW5kIHRo ZSBsaW5rLCBlLmcuIDxjb2RlPndyYXB0YWc9JnF1b3Q7c3BhbiZxdW90OzwvY29kZT4uIFdp dGhvdXQgdGhpcyBhdHRyaWJ1dGUgc2V0LCA8Y29kZT5jbGFzczwvY29kZT4gYW5kIDxjb2Rl Pmh0bWxfaWQ8L2NvZGU+IHdpbGwgZG8gbm90aGluZy4gRGVmYXVsdDogdW5zZXQuPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzc25hbWUgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcu IERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmh0bWxfaWQ8 L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBpZCBhdHRyaWJ1 dGUgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcuIERlZmF1bHQ6IHVuc2V0PC9saT4KCTwvdWw+ CgoJPGgyIGlkPSJzbWRfdGFiYmVyX2Rhc2hib2FyZHMiPkRhc2hib2FyZHMgYW5kIGNvbXBh dGliaWxpdHk8L2gyPgoKCTxwPlRoZXJlIGlzIG5vdGhpbmcgdG8gc3RvcCB5b3UgdXNpbmcg b3RoZXIgZGFzaGJvYXJkIG9yIG1lbnUgbWFuYWdlbWVudCBwbHVnaW5zIHdpdGggc21kX3Rh YmJlci4gQnV0IHRoZSBvcGVuIGFyY2hpdGVjdHVyZSBvZiBzbWRfdGFiYmVyIG1lYW5zIHRo YXQsIHdpdGggYSBiaXQgb2YgcGxhbm5pbmcsIHlvdSBjYW4gcHJvYmFibHkgcmVwbGljYXRl IG1vc3QgZGFzaGJvYXJkL21lbnUgZnVuY3Rpb25hbGl0eSBhbmQgcGVyaGFwcyBkbyBldmVu IG1vcmUgd2l0aCBpdC4gSGVyZSBhcmUgc29tZSBjb21tb24gdGhpbmdzIHRoYXQgb3RoZXIg cGx1Z2lucyBwcm92aWRlIGFuZCBob3cgc21kX3RhYmJlciBjYW4gYmUgdXNlZCB0byBkZWxp dmVyIHNpbWlsYXIgZnVuY3Rpb25hbGl0eTo8L3A+CgoJPHVsPgoJCTxsaT5sdW1fdXNlcl9t ZW51Cgk8dWw+CgkJPGxpPmFsdGhvdWdoIG5vdCBhcyBwb2ludCBuJiM4MjE3OyBjbGljaywg eW91IGNvdWxkIGNyZWF0ZSBhIFBhZ2Ugd2l0aCBhIGdyaWQgb2Ygc2hvcnRjdXRzIG9uIGl0 LiBZb3UgY291bGQgZGVmaW5lIGFuIHNtZF9tYWNybyBjYWxsZWQgJiM4MjE2O2x1bV9jZWxs JiM4MjE3OyB0aGF0IGNvdWxkIHRha2UgcGFyYW1ldGVycyB0byBzcGVjaWZ5IHRoZSBpY29u LCBkZXN0aW5hdGlvbiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiwgZXRjLiBDYWxs aW5nIHRoYXQgbXVsdGlwbGUgdGltZXMgaW4geW91ciB0YWImIzgyMTc7cyBQYWdlIHdvdWxk IHJlbmRlciB0aGUgbWVudSBncmlkLiBZb3UgY291bGQgZXZlbiB3cmFwIHNvbWUgY2VsbHMg aW4gcnZtX3ByaXZpbGVnZWQgdGFncyB0byBjb250cm9sIHdobyBjb3VsZCBzZWUgd2hpY2gg aWNvbnM8L2xpPgoJPC91bD48L2xpPgoJCTxsaT5qbWRfZGFzaGJvYXJkIC8gc2VkX2Rhc2hi b2FyZCAvIGFyb19teUFkbWluCgk8dWw+CgkJPGxpPnlvdSBjYW4gYWRkIHlvdXIgb3duIHRh YnMgdW5kZXIgdGhlIHN0YXJ0IHRhYjwvbGk+CgkJPGxpPnlvdSBjYW4gcmVjcmVhdGUgdGhl IGVkaXQgbGluayBmdW5jdGlvbmFsaXR5IHZpYSBhbiBzbWRfbWFjcm8sIHJzeF9mcm9udGVu ZF9lZGl0LCBjaGhfYWRtaW5fdGFncywgcnNzX2FydGljbGVfZWRpdCwgb3IgZXZlbiBhIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZvcm0gd2l0aCB0eHA6eWllbGQ8L2xpPgoJ CTxsaT5lbXBsb3kgdXBtX3RleHRpbGUgZm9yIGZpbmUtZ3JhaW5lZCBUZXh0aWxlIHByb2Nl c3NpbmcgaW5zaWRlIHlvdXIgUGFnZXMgKGl0JiM4MjE3O3MgbW9yZSByb2J1c3QgdGhhbiBo YXZpbmcgdG8gZXNjYXBlIHRhZ3MtaW4tdGFncyB3aXRoIDxjb2RlPm5vdGV4dGlsZS48L2Nv ZGU+IG9yIDxjb2RlPj09PC9jb2RlPikuIEFsdGVybmF0aXZlbHksIHdyaXRlIHlvdXIgY29u dGVudCBpbiBBcnRpY2xlcyBhbmQgaW1wb3J0IHRoZW0gaW50byB5b3VyIFBhZ2VzIHdpdGgg dHhwOmFydGljbGVfY3VzdG9tPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+ZXNxX2FkbWluX3Nw bGFzaAoJPHVsPgoJCTxsaT5hZ2Fpbiwgc21kX3RhYmJlciBjYW4gYmUgdG9sZCB0byByZXNp ZGUgb24gaXRzIG93biB0YWIgYW5kIHlvdSBjYW4gd3JpdGUgeW91ciBoZWxwIHRleHQgaW4g YSB0YWIgUGFnZSB3aXRoIG9wdGlvbmFsIHVwbV90ZXh0aWxlIHN1cHBvcnQ8L2xpPgoJPC91 bD48L2xpPgoJPC91bD4KCgk8cD5JZiBub25lIG9mIHRoZSBhYm92ZSBhcHBlYWxzLCB5b3Ug Y2FuIG9mIGNvdXJzZSBtaXggc21kX3RhYmJlciB3aXRoIG90aGVyIHRhYi1tYWtpbmcgcGx1 Z2lucyBidXQgcGxlYXNlIGJlIGF3YXJlIHRoYXQgZWFjaCBwbHVnaW4gZG9lcyB0aGluZ3Mg aW4gdGhlaXIgb3duIHdheSBhbmQgbWV0aG9kcyBvZiBtYW5pcHVsYXRpbmcgbWVudXMgdmFy eSBncmVhdGx5LiBUaGVyZWZvcmUsIGlmIHlvdSBleHBlcmllbmNlIG9kZCBtZW51IGJhciBi ZWhhdmlvdXIgeW91IG1heSBjb25zaWRlciBzd2l0Y2hpbmcgb2ZmIHZhcmlvdXMgY29tYmlu YXRpb25zIG9mIHN1Y2ggcGx1Z2lucyB0byB0cmFjayBkb3duIHdoYXQmIzgyMTc7cyBnb2lu ZyBvbi48L3A+CgoJPGgyIGlkPSJzbWRfdGFiYmVyX2NoYW5nZWxvZyI+Q2hhbmdlbG9nPC9o Mj4KCgk8cD4zMSBNYXIgMTEgfCAwLjEwIHwgSW5pdGlhbCBwdWJsaWMgcmVsZWFzZTxiciAv PgozMSBNYXIgMTEgfCAwLjExIHwgSW1wb3J0ZWQgPGNvZGU+JHByZXRleHQ8L2NvZGU+IHRv IHByZXZlbnQgd2FybmluZ3Mgd2hlbiB1c2luZyBhcnRpY2xlIHRhZ3MgKHRoYW5rcyByZWRi b3QpIDsgaW1wcm92ZWQgZG9jdW1lbnRhdGlvbiBjbGFyaXR5PC9wPgoKPC9kaXY+CjwhLS0g KioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoj c21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdl aWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9u b3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRf aGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRl ZCAjOTk5OyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6 MTBweDsgfQojc21kX2hlbHAgaDEgeyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7 IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRl ci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgZm9udDogMTdw eCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTJw eCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4 IDAgMDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6 IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFy Z2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAg LmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91 bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUgeyB3 aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07IGJvcmRl ci1jb2xsYXBzZTpjb2xsYXBzZTsgfQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7IGJv cmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtOyB9CiNzbWRfaGVscCB1bCB7IGxp c3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpy ZWQ7IH0KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRf aGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQg UExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6ImRmM2Y3ZTcxNTBhMjdkYTJk ZTc0NThlOTgzNDQxYjY4Ijt9