# Name: smd_where_used v0.3 # Type: Admin side plugin # Find which forms/pages/articles/plugins/text have been used where in your design # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE0OiJzbWRfd2hlcmVfdXNlZCI7czo2OiJhdXRob3IiO3M6 MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRh d3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMC4zIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo4MDoiRmluZCB3aGljaCBmb3Jtcy9wYWdlcy9hcnRpY2xlcy9wbHVnaW5zL3RleHQgaGF2 ZSBiZWVuIHVzZWQgd2hlcmUgaW4geW91ciBkZXNpZ24iO3M6NDoiY29kZSI7czoxMzMyOToi Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWFkZF9wcml2 cygnc21kX3d1JywnMSwyJyk7DQoNCgkvLyBFeHRlbnNpb25zIHRhYg0KCXJlZ2lzdGVyX3Rh YignZXh0ZW5zaW9ucycsICdzbWRfd3UnLCBzbWRfd3VfZ1R4dCgnc21kX3d1JykpOw0KCXJl Z2lzdGVyX2NhbGxiYWNrKCdzbWRfd3UnLCAnc21kX3d1Jyk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF93dSgkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9h cnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX3d1X3NlYXJjaCcsDQoJCQknc21kX3d1X3By ZWZzYXZlJywNCgkJKSkpIHsNCgkJc21kX3d1X3Nob3dmb3JtKCcnKTsNCgl9IGVsc2UgJHN0 ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3d1X3Nob3dmb3JtKCRtZXNz YWdlLCAkdGVybT0nJywgJHNlbD1hcnJheSgpLCAkaW5jbD0wLCAkd2hvbGU9MCwgJG1vZGU9 MCwgJHBsdWd0eXBlPTAsICRjYXNlPTApIHsNCglwYWdldG9wKHNtZF93dV9nVHh0KCdzbWRf d3UnKSwkbWVzc2FnZSk7DQoJJGJ0blNlYXJjaCA9IGZJbnB1dCgnc3VibWl0JywgJ3NtZF93 dV9zZWFyY2gnLCBnVHh0KCdzZWFyY2gnKSwgJ3NtYWxsZXJib3gnKS5zSW5wdXQoJ3NtZF93 dV9zZWFyY2gnKS5oSW5wdXQoJ3BsdWd0eXBlJywgKCgkcGx1Z3R5cGU9PTEpID8gMCA6IDEp KTsNCgkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KCSRw bGFjZSA9IGFycmF5KCdzZWN0aW9ucycsJ3BhZ2VzJywnZm9ybXMnLCdzdHlsZXNoZWV0cycs J2FydGljbGVzJyk7DQoJJHNlbCA9IGVtcHR5KCRzZWwpID8gdW5zZXJpYWxpemUoZ2V0X3By ZWYoJ3NtZF93dV9sb29rX2luJykpIDogJHNlbDsNCgkkc2VsID0gZW1wdHkoJHNlbCkgPyAk cGxhY2UgOiAkc2VsOw0KDQoJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1lPSJzbWRf d3VfZm9ybSI+JzsNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgllY2hvIHRyKGZMYWJl bENlbGwoc21kX3d1X2dUeHQoJ3NlYXJjaF9sYmwnKSkgLiB0ZGNzKGZJbnB1dCgndGV4dCcs ICdzZWFyY2hfZm9yJywgc3RyaXBzbGFzaGVzKCR0ZXJtKSwgJycsICcnLCAnJywgMzAsICcn LCAnc21kX3NlYXJjaF9mb3InKSwgNSkgLiB0ZGEoJGJ0blNlYXJjaCwgJGJ0blN0eWxlKSk7 DQoJZWNobyB0cihmTGFiZWxDZWxsKHNtZF93dV9nVHh0KCdmaWx0ZXInKSkudGRjcyhyYWRp bygnbWV0aCcsMCwoKCRpbmNsPT0wKT8xOjApKS5zbWRfd3VfZ1R4dCgnaW5jbHVzaW9uJyku IiAiIC4gcmFkaW8oJ21ldGgnLDEsKCgkaW5jbD09MSk/MTowKSkuc21kX3d1X2dUeHQoJ2V4 Y2x1c2lvbicpLiAiIHwgIiAuIHNtZF93dV9nVHh0KCd3aG9sZV93b3JkJykuY2hlY2tib3go J3dob2xlJywgMSwgKCgkd2hvbGU9PTEpPzE6MCkpLiAiIHwgIiAuIHNtZF93dV9nVHh0KCdt YXRjaF9jYXNlJykuY2hlY2tib3goJ2Nhc2UnLCAxLCAoKCRjYXNlPT0xKT8xOjApKSwgNSkp Ow0KCSRvdXQgPSAnJzsNCglmb3JlYWNoICgkcGxhY2UgYXMgJGhlcmUpIHsNCgkJJG91dCAu PSBmTGFiZWxDZWxsKHVjZmlyc3QoZ1R4dCgkaGVyZSkpIC4gY2hlY2tib3goJ3BsYWNlc1td JywgJGhlcmUsIGluX2FycmF5KCRoZXJlLCRzZWwpKSk7DQoJfQ0KCWVjaG8gdHIoZkxhYmVs Q2VsbChzbWRfd3VfZ1R4dCgnc2VhcmNoX3doZXJlX2xibCcpKSAuICRvdXQpOw0KCWVjaG8g ZW5kVGFibGUoKTsNCgllY2hvICc8L2Zvcm0+JzsNCg0KCS8vIFJlbmRlciB0aGUgcHJlZnMg Y2hlY2tib3hlcw0KCSRjb2xzID0gZ2V0VGhpbmdzKCdkZXNjcmliZSBgJy5QRlguJ3RleHRw YXR0ZXJuYCcpOw0KCSRmbGRzID0gZG9fbGlzdChnZXRfcHJlZignc21kX3d1X2FydGljbGVf ZmllbGRzJykpOw0KCSRmbGRzID0gZW1wdHkoJGZsZHNbMF0pID8gZG9fbGlzdCgnQm9keSxF eGNlcnB0LG92ZXJyaWRlX2Zvcm0sU2VjdGlvbixUaXRsZSxLZXl3b3JkcycpIDogJGZsZHM7 DQoNCgllY2hvICc8ZGl2IGlkPSJzbWRfd3VfcHJlZndyYXAiPjxhIGlkPSJzbWRfd3VfcHJl ZnRvZyIgaHJlZj0iIyI+Jy5zbWRfd3VfZ1R4dCgncHJlZnNfbGluaycpLic8L2E+JzsNCgll Y2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGlkPSJzbWRfd3VfcHJlZnMiIHN0eWxlPSJkaXNw bGF5Om5vbmU7Ij4nOw0KCWZvcmVhY2ggKCRjb2xzIGFzICRjb2wpIHsNCgkJZWNobyBici5j aGVja2JveCgnc21kX3d1X2FydGljbGVfZmllbGRzW10nLCAkY29sLCAoaW5fYXJyYXkoJGNv bCwgJGZsZHMpID8gMSA6IDApKS5zcC4kY29sOw0KCX0NCgllY2hvIGZJbnB1dCgnc3VibWl0 JywgJ3NtZF93dV9wcmVmc2F2ZScsIGdUeHQoJ3NhdmUnKSwgJ3NtYWxsZXJib3gnLCAnJywg JycsICcnLCAnJywgJ3NtZF93dV9wcmVmc2F2ZScpOw0KCWVjaG8gJzwvZm9ybT48L2Rpdj4n Ow0KCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KalF1 ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiI3NtZF9zZWFyY2hfZm9yIikuZm9jdXMoKTsN CglqUXVlcnkoIiNzbWRfd3VfcHJlZnMiKS5oaWRlKCk7DQoJalF1ZXJ5KCIjc21kX3d1X3By ZWZ0b2ciKS5jbGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KCIjc21kX3d1X3ByZWZzIiku dG9nZ2xlKCdmYXN0Jyk7DQoJCXJldHVybiBmYWxzZTsNCgl9KTsNCglqUXVlcnkoIiNzbWRf d3VfcHJlZnNhdmUiKS5jbGljayhmdW5jdGlvbigpIHsNCgkJdmFyIG91dCA9IFtdOw0KCQlq UXVlcnkoIiNzbWRfd3VfcHJlZnMgaW5wdXQ6Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oKSB7 DQoJCQlvdXQucHVzaChqUXVlcnkodGhpcykudmFsKCkpOw0KCQl9KTsNCg0KCQlzZW5kQXN5 bmNFdmVudCgNCgkJCXsNCgkJCQlldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsDQoJCQkJc3Rl cDogJ3NtZF93dV9wcmVmc2F2ZScsDQoJCQkJc21kX3d1X2FydGljbGVfZmllbGRzOiBvdXQu am9pbignLCcpDQoJCQl9DQoJCSk7DQoJCWpRdWVyeSgiI3NtZF93dV9wcmVmcyIpLnRvZ2ds ZSgnZmFzdCcpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfSk7DQp9KTsNCjwvc2NyaXB0Pg0KPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4NCiNzbWRfd3VfcHJlZndyYXAgew0KCXdpZHRoOjE0MHB4 Ow0KCW1hcmdpbjoxMHB4IGF1dG8gMDsNCn0NCjwvc3R5bGU+DQpFT0pTOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfd3VfcHJlZnNhdmUoKSB7DQoJJGNvbHMgPSBnZXRUaGlu Z3MoJ2Rlc2NyaWJlIGAnLlBGWC4ndGV4dHBhdHRlcm5gJyk7DQoJJGZpZWxkcyA9IGRvX2xp c3QoZ3BzKCdzbWRfd3VfYXJ0aWNsZV9maWVsZHMnKSk7DQoJJG9mbGRzID0gYXJyYXkoKTsN Cglmb3JlYWNoKCRmaWVsZHMgYXMgJGZsZCkgew0KCQlpZiAoaW5fYXJyYXkoJGZsZCwgJGNv bHMpKSB7DQoJCQkkb2ZsZHNbXSA9ICRmbGQ7DQoJCX0NCgl9DQoJc2V0X3ByZWYoJ3NtZF93 dV9hcnRpY2xlX2ZpZWxkcycsIGpvaW4oJywnLCRvZmxkcyksICdzbWRfd3UnLCBQUkVGX0hJ RERFTiwgJ3RleHRfaW5wdXQnKTsNCglzZW5kX3htbF9yZXNwb25zZSgpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfd3Vfc2VhcmNoKCkgew0KCWV4dHJhY3QoZG9TbGFzaChn cHNhKGFycmF5KCdzZWFyY2hfZm9yJykpKSk7DQoJJHdob2xlID0gZ3BzKCd3aG9sZScpOw0K CSRjYXNlID0gZ3BzKCdjYXNlJyk7IC8vIDAgPSBjYXNlIGluc2Vuc2l0aXZlLCAxID0gY2Fz ZSBzZW5zaXRpdmUNCgkkY2FzZVNlbnNlID0gKCRjYXNlPT0xKSA/ICcgQklOQVJZICcgOiAn JzsNCgkkbWV0aCA9IGdwcygnbWV0aCcpOyAvLyAwID0gaW5jbHVkZSwgMSA9IGV4Y2x1ZGUN CgkkcGx1Z3R5cGUgPSBncHMoJ3BsdWd0eXBlJyk7IC8vIDAgPSBwdWJsaWMsIDEgPSAwK2Fk bWluLCAyID0gMStsaWJyYXJ5DQoJJHBsdWd0eXBlID0gKGlzX251bWVyaWMoJHBsdWd0eXBl KSAmJiAkcGx1Z3R5cGUgPCAzKSA/ICRwbHVndHlwZSA6IDA7DQoJJGpvaW5tZSA9ICgkbWV0 aCA9PSAwKSA/ICIgT1IgIiA6ICIgQU5EICI7DQoJJHBsYWNlcyA9IGdwcygncGxhY2VzJyk7 DQoJJHBsYWNlcyA9IGlzX2FycmF5KCRwbGFjZXMpID8gJHBsYWNlcyA6IGFycmF5KCk7DQoJ c2V0X3ByZWYoJ3NtZF93dV9sb29rX2luJywgc2VyaWFsaXplKCRwbGFjZXMpLCAnc21kX3d1 JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJJG1vZGUgPSAoJHNlYXJjaF9mb3Ip ID8gMCA6IDE7DQoJc21kX3d1X3Nob3dmb3JtKCcnLCAkc2VhcmNoX2ZvciwgJHBsYWNlcywg JG1ldGgsICR3aG9sZSwgJG1vZGUsICRwbHVndHlwZSwgJGNhc2UpOw0KDQoJJGFydGZsZHMg PSBnZXRfcHJlZignc21kX3d1X2FydGljbGVfZmllbGRzJyk7DQoJJGFydGZsZHMgPSBlbXB0 eSgkYXJ0ZmxkcykgPyAnQm9keSxFeGNlcnB0LG92ZXJyaWRlX2Zvcm0sU2VjdGlvbixUaXRs ZSxLZXl3b3JkcycgOiAkYXJ0ZmxkczsNCg0KCS8vIEVudHJpZXMgaW4gdGhlIHBsYWNlVGFi bGUgYXJyYXkgYXJlOg0KCS8vICAwOiBUYWJsZSB0byBzZWFyY2gNCgkvLyAgMTogQ29sdW1u IHRvIHNlYXJjaA0KCS8vICAyOiBDb2x1bW4gdG8gcmV0dXJuDQoJLy8gIDM6IEhlYWRpbmcg dG8gZGlzcGxheSBpZiByZXN1bHRzIGZvdW5kDQoJLy8gIDQ6IEV2ZW50IG9mIGRlc3RpbmF0 aW9uIFVSTA0KCS8vICA1OiBTdGVwIG9mIGRlc3RpbmF0aW9uIFVSTA0KCS8vICA2OiBBZGRp dGlvbmFsIFVSTCB2YXINCgkvLyAgNzogQWRkaXRpb25hbCBVUkwgdmFyIHJlcGxhY2VtZW50 ICh1c2VkIGluIHN0cnRyKQ0KCSRwbGFjZVRhYmxlID0gYXJyYXkoDQoJCSdwYWdlcycgPT4g YXJyYXkoJ3R4cF9wYWdlJywgJ3VzZXJfaHRtbCcsICduYW1lJywgZ1R4dCgncGFnZXMnKSwg J3BhZ2UnLCAnJywgJ25hbWUnLCAne25hbWV9JywgJycpLA0KCQknZm9ybXMnID0+IGFycmF5 KCd0eHBfZm9ybScsICdmb3JtJywgJ25hbWUnLCBnVHh0KCdmb3JtcycpLCAnZm9ybScsICdm b3JtX2VkaXQnLCAnbmFtZScsICd7bmFtZX0nLCAnJyksDQoJCSdhcnRpY2xlcycgPT4gYXJy YXkoJ3RleHRwYXR0ZXJuJywgJGFydGZsZHMsICdJRCx0aXRsZScsIGdUeHQoJ2FydGljbGVz JyksICdhcnRpY2xlJywgJ2VkaXQnLCAnSUQnLCAne0lEfScsICcnKSwNCgkJJ3NlY3Rpb25z JyA9PiBhcnJheSgndHhwX3NlY3Rpb24nLCAncGFnZSxjc3MnLCAnbmFtZScsIGdUeHQoJ3Nl Y3Rpb25zJyksICdzZWN0aW9uJywgJycsICcjJywgJ3NlY3Rpb24te25hbWV9JywgJycpLA0K CQknc3R5bGVzaGVldHMnID0+IGFycmF5KCd0eHBfY3NzJywgJ2NzcycsICduYW1lJywgc21k X3d1X2dUeHQoJ3N0eWxlc2hlZXRzJyksICdjc3MnLCAnJywgJ25hbWUnLCAne25hbWV9Jywg JycpLA0KCSk7DQoNCgkkcnMgPSBhcnJheSgpOw0KCWVjaG8gbi4nPGhyIHdpZHRoPSI1MCUi IC8+JzsNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkkY29sSGVhZCA9IGFycmF5KCk7 DQoJJGNvbEJvZHkgPSBhcnJheSgpOw0KDQoJaWYgKCRzZWFyY2hfZm9yKSB7DQoJCWVjaG8g dHIodGRjcyh0YWcoZ1R4dCgnc2VhcmNoX3Jlc3VsdHMnKSwgJ2gyJyksIDUpKTsNCgkJZm9y ZWFjaCAoJHBsYWNlcyBhcyAkcGxhY2UpIHsNCgkJCSRjcm93ID0gJHBsYWNlVGFibGVbJHBs YWNlXTsNCgkJCSR3aGVyZSA9IGFycmF5KCk7DQoJCQkkd2l0ZW1zID0gZG9fbGlzdCgkY3Jv d1sxXSk7DQoJCQkkbGlzdCA9IGRvX2xpc3QoJGNyb3dbMl0pOw0KDQoJCQlmb3JlYWNoICgk d2l0ZW1zIGFzICRpdGVtKSB7DQoJCQkJJHdoZXJlW10gPSAkY2FzZVNlbnNlIC4gJGl0ZW0g LiAoKCRtZXRoPT0xKSA/ICcgTk9UJyA6ICcnKSAuICgoJHdob2xlPT0xKSA/ICcgUkVHRVhQ IFwnW1s6PDpdXScuJHNlYXJjaF9mb3IuJ1tbOj46XV1cJycgOiAiIExJS0UgJyUkc2VhcmNo X2ZvciUnIik7DQoJCQl9DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJGNyb3dbMl0sICRjcm93WzBd LCAnKCcuam9pbigkam9pbm1lLCAkd2hlcmUpLicpIE9SREVSIEJZICcuJGxpc3RbMF0pOw0K CQkJJGNvbEhlYWRbXSA9IHRkKHN0cm9uZygkY3Jvd1szXSkpOw0KCQkJaWYgKCRycykgew0K CQkJCSRvdXQgPSAnPHVsPic7DQoJCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCQkJ JGhsaW5rID0gJyc7DQoJCQkJCSR2YXJzID0gJyc7DQoJCQkJCWZvcmVhY2ggKCRsaXN0IGFz ICRjb2wpIHsNCgkJCQkJCSRmcm9tID0gJ3snLiRjb2wuJ30nOw0KCQkJCQkJaWYgKHN0cnBv cygkY3Jvd1s3XSwgJGZyb20pICE9PSBmYWxzZSkgew0KCQkJCQkJCWlmICgkY3Jvd1s2XSA9 PSAiIyIpIHsNCgkJCQkJCQkJJHZhcnMgPSBqb2luX3FzKGFycmF5KCJldmVudCIgPT4gJGNy b3dbNF0sICJzdGVwIiA9PiAkY3Jvd1s1XSkpLiRjcm93WzZdLnN0cnRyKCRjcm93WzddLCBh cnJheSgkZnJvbSA9PiAkcm93WyRjb2xdKSk7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJ JHZhcnMgPSBqb2luX3FzKGFycmF5KCJldmVudCIgPT4gJGNyb3dbNF0sICJzdGVwIiA9PiAk Y3Jvd1s1XSwgJGNyb3dbNl0gPT4gc3RydHIoJGNyb3dbN10sIGFycmF5KCRmcm9tID0+ICRy b3dbJGNvbF0pKSkpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRobGluayAuPSAkcm93 WyRjb2xdLiIgIjsNCgkJCQkJfQ0KCQkJCQkkb3V0IC49ICgkaGxpbmspID8gJzxsaT4nIC4g KCgkdmFycykgPyAnPGEgaHJlZj0iaW5kZXgucGhwJy4kdmFycy4nIj4nLiRobGluay4nPC9h PiAnIDogJGhsaW5rKSAuICc8L2xpPic6ICcnOw0KCQkJCX0NCgkJCQkkb3V0IC49ICc8L3Vs Pic7DQoJCQkJJGNvbEJvZHlbXSA9IHRkKCRvdXQpOw0KCQkJfSBlbHNlIHsNCgkJCQkkY29s Qm9keVtdID0gdGQoZ1R4dCgnbm9fcmVzdWx0c19mb3VuZCcpKTsNCgkJCX0NCgkJfQ0KCQll Y2hvIHRyKGpvaW4oIiAiLCAkY29sSGVhZCkpOw0KCQllY2hvIHRyKGpvaW4oIiAiLCAkY29s Qm9keSkpOw0KCX0gZWxzZSB7DQoJCS8vIE5vIHNlYXJjaCBjcml0ZXJpYSwgc28gc2hvdyBv cnBoYW5zDQoJCWVjaG8gdHIodGRjcyh0YWcoc21kX3d1X2dUeHQoJ29ycGhhbl9yZXN1bHRz JyksICdoMicpLCA1KSk7DQoNCgkJLy8gUmVwcm9ncmFtIHRoZSBwbGFjZXMvcGxhY2VUYWJs ZQ0KCQkkYXJ0a2V5ID0gYXJyYXlfc2VhcmNoKCdhcnRpY2xlcycsICRwbGFjZXMpOw0KCQlp ZiAoJGFydGtleSAhPT0gZmFsc2UpIHsNCgkJCXVuc2V0KCRwbGFjZXNbJGFydGtleV0pOw0K CQl9DQoNCgkJLy8gcGFnZXMvZm9ybXMvc2VjdGlvbnMgdG8gaWdub3JlIGJlY2F1c2UgdGhl eSBhcmUgc3RhdGljIGFuZCBjYW5ub3QgYmUgZGVsZXRlZA0KCQkkZXNzZW50aWFscyA9IGFy cmF5KA0KCQkJJ3NlY3Rpb25zJyA9PiBhcnJheSgnZGVmYXVsdCcpLA0KCQkJJ3BhZ2VzJyA9 PiBhcnJheSgnZXJyb3JfZGVmYXVsdCcpLA0KCQkJJ2Zvcm1zJyA9PiBhcnJheSgnY29tbWVu dHMnLCdjb21tZW50c19kaXNwbGF5JywnY29tbWVudF9mb3JtJywnZGVmYXVsdCcsJ0xpbmtz JywnZmlsZXMnKSwgLy8gY29waWVkIGZyb20gdHhwX2Zvcm1zDQoJCSk7DQoNCgkJJHBsYWNl c1tdID0gJ3BsdWdpbnMnOw0KDQoJCSRwbGFjZVRhYmxlWydwbHVnaW5zJ10gPSBhcnJheSgn dHhwX3BsdWdpbicsICduYW1lJywgJ25hbWUnLCBnVHh0KCdwbHVnaW5zJyksICdwbHVnaW4n LCAnJywgJyMnLCAne25hbWV9Jyk7DQoJCSRwbGFjZVRhYmxlWydzdHlsZXNoZWV0cyddID0g YXJyYXkoJ3R4cF9jc3MnLCAnbmFtZScsICduYW1lJywgc21kX3d1X2dUeHQoJ3N0eWxlc2hl ZXRzJyksICdjc3MnLCAnJywgJ25hbWUnLCAne25hbWV9Jyk7DQoNCgkJJHBsYWNlVGFibGVb J2Zvcm1zJ11bMF0gPSAiU0VMRUNUIHRmLm5hbWUgRlJPTSAiIC5zYWZlX3BmeCgndHhwX2Zv cm0nKS4gIiBBUyB0ZiBXSEVSRSB0Zi5uYW1lIE5PVCBJTiAoIiAuZG9RdW90ZShpbXBsb2Rl KCInLCciLCRlc3NlbnRpYWxzWydmb3JtcyddKSkuICIpIE9SREVSIEJZIHRmLm5hbWUiOyAv LyBXb3VsZCBiZSBuaWNlIHRvIGV4Y2x1ZGUgZm9ybXMgdGhhdCByZWZlcmVuY2UgZm9ybXMg aGVyZSBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIHRoZW0gbGF0ZXINCgkJJHBsYWNl VGFibGVbJ3BhZ2VzJ11bMF0gPSAiU0VMRUNUIHRwLm5hbWUgRlJPTSAiIC5zYWZlX3BmeCgn dHhwX3NlY3Rpb24nKS4gIiBBUyB0cyBSSUdIVCBKT0lOICIgLnNhZmVfcGZ4KCd0eHBfcGFn ZScpLiAiIEFTIHRwIE9OIHRzLnBhZ2UgPSB0cC5uYW1lIFdIRVJFIHRzLnBhZ2UgSVMgTlVM TCBBTkQgdHAubmFtZSBOT1QgSU4gKCIgLmRvUXVvdGUoaW1wbG9kZSgiJywnIiwkZXNzZW50 aWFsc1sncGFnZXMnXSkpLiAiKSBPUkRFUiBCWSB0cC5uYW1lIjsNCgkJJHBsYWNlVGFibGVb J3BsdWdpbnMnXVswXSA9ICJTRUxFQ1QgdGcubmFtZSwgdGcuY29kZSBGUk9NICIgLnNhZmVf cGZ4KCd0eHBfcGx1Z2luJykuICIgQVMgdGcgV0hFUkUgdHlwZSA8ICIgLigkcGx1Z3R5cGUr MSkuICIgQU5EIHRnLm5hbWUgIT0gJ3NtZF93aGVyZV91c2VkJyBPUkRFUiBCWSB0Zy5uYW1l IjsNCgkJJHBsYWNlVGFibGVbJ3NlY3Rpb25zJ11bMF0gPSAiU0VMRUNUIHRzLm5hbWUgRlJP TSAiIC5zYWZlX3BmeCgndHhwX3NlY3Rpb24nKS4gIiBBUyB0cyBMRUZUIEpPSU4gIiAuc2Fm ZV9wZngoJ3RleHRwYXR0ZXJuJykuICIgQVMgdHhwIE9OIHRzLm5hbWUgPSB0eHAuc2VjdGlv biBXSEVSRSBJRCBJUyBOVUxMIEFORCB0cy5uYW1lIE5PVCBJTiAoIiAuZG9RdW90ZShpbXBs b2RlKCInLCciLCRlc3NlbnRpYWxzWydzZWN0aW9ucyddKSkuICIpIE9SREVSIEJZIHRzLm5h bWUiOw0KCQkkcGxhY2VUYWJsZVsnc3R5bGVzaGVldHMnXVswXSA9ICJTRUxFQ1QgdGMubmFt ZSBGUk9NICIgLnNhZmVfcGZ4KCd0eHBfc2VjdGlvbicpLiAiIEFTIHRzIFJJR0hUIEpPSU4g IiAuc2FmZV9wZngoJ3R4cF9jc3MnKS4gIiBBUyB0YyBPTiB0cy5jc3MgPSB0Yy5uYW1lIFdI RVJFIHRzLnBhZ2UgSVMgTlVMTCBPUkRFUiBCWSB0Yy5uYW1lIjsNCg0KCQkvLyBGb3IgImF3 a3dhcmQiIHF1ZXJpZXMgdGhhdCBjYW4ndCBiZSBkb25lIGluIG9uZSBzaG90LCB0aGVyZSBh cmUgdGhyZWUgdGhpbmdzIHJlcXVpcmVkIHBlciAkcGxhY2U6DQoJCS8vICAxOiB0eHAgdGFi bGUgbmFtZQ0KCQkvLyAgMjogbGlzdCBvZiBjb2x1bW5zIHRvIGNvbXBhcmUNCgkJLy8gIDM6 IG1ldGhvZCBvZiBjb21wYXJpc29uIHBlciBjb2x1bW4gKDAgPSAiZGlyZWN0IG1hdGNoIiwg MSA9ICJsaWtlIikNCgkJJGNUYWJsZSA9IGFycmF5KA0KCQkJJ3BsdWdpbnMnID0+IGFycmF5 KA0KCQkJCSd0eHBfZm9ybScgPT4gYXJyYXkoJ2Zvcm0nID0+IDEpLA0KCQkJCSd0eHBfcGFn ZScgPT4gYXJyYXkoJ3VzZXJfaHRtbCcgPT4gMSksDQoJCQkJJ3RleHRwYXR0ZXJuJyA9PiBh cnJheSgnQm9keScgPT4gMSwgJ0V4Y2VycHQnID0+IDEpLA0KCQkJKSwNCgkJCSdmb3Jtcycg PT4gYXJyYXkoDQoJCQkJJ3R4cF9mb3JtJyA9PiBhcnJheSgnZm9ybScgPT4gMSksDQoJCQkJ J3R4cF9wYWdlJyA9PiBhcnJheSgndXNlcl9odG1sJyA9PiAxKSwNCgkJCQkndGV4dHBhdHRl cm4nID0+IGFycmF5KCdCb2R5JyA9PiAxLCAnRXhjZXJwdCcgPT4gMSwgJ292ZXJyaWRlX2Zv cm0nID0+IDApLA0KCQkJKSwNCgkJKTsNCg0KCQkvLyBXb3JrIG9uIGEgY29sdW1uIGF0IGEg dGltZQ0KCQlmb3JlYWNoICgkcGxhY2VzIGFzICRwbGFjZSkgew0KCQkJJGNyb3cgPSAkcGxh Y2VUYWJsZVskcGxhY2VdOw0KCQkJJGNvbFJlZnMgPSBkb19saXN0KCRjcm93WzJdKTsNCgkJ CSRjb2xIZWFkW10gPSB0ZChzdHJvbmcoJGNyb3dbM10gLiAoKCRwbGFjZSA9PSAncGx1Z2lu cycpID8gKCgkcGx1Z3R5cGU9PTApID8gc21kX3d1X2dUeHQoJ3B1YmxpY19wbHVnaW5zJykg OiBzbWRfd3VfZ1R4dCgnYWRtaW5fcGx1Z2lucycpICkgOiAnJykgKSk7DQoJCQkkcnMgPSBz dGFydFJvd3MoJGNyb3dbMF0pOw0KCQkJaWYgKCRycykgew0KCQkJCSRvdXQgPSAnPHVsPic7 DQoJCQkJd2hpbGUgKCRyb3cgPSBuZXh0Um93KCRycykpIHsNCgkJCQkJLy8gQ291bnQgdGhl IG5vIG9mIHJlY29yZHMgbWF0Y2hpbmcgdGhpcyBuYW1lIGluIGVhY2ggdGFibGUuDQoJCQkJ CS8vIEFueSB0aW1lIHRoaXMgZ29lcyBhYm92ZSB6ZXJvLCB0aGUgaXRlbSBpcyB1c2VkIGFu ZCBpdCBjYW4gYmUgaWdub3JlZA0KCQkJCQkkZm5hbGlhc2VzID0gYXJyYXkoKTsNCgkJCQkJ aWYgKGFycmF5X2tleV9leGlzdHMoJHBsYWNlLCAkY1RhYmxlKSkgew0KCQkJCQkJLy8gUGx1 Z2luIGZ1bmN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyaWx5IHRoZSBuYW1lIG9mIHRoZSBwbHVn aW4gaXRzZWxmLg0KCQkJCQkJLy8gRmluZCBhbGwgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5k IGJ1aWxkIGEgbGlzdCBvZiBhbGlhc2VzDQoJCQkJCQlpZiAoJHBsYWNlID09ICdwbHVnaW5z Jykgew0KCQkJCQkJCSRyZSA9ICcvZnVuY3Rpb25ccysoW0EtWmEtejAtOV9dKylccypcKC8n Ow0KCQkJCQkJCSRudW0gPSBwcmVnX21hdGNoX2FsbCgkcmUsICRyb3dbJ2NvZGUnXSwgJGZu YWxpYXNlcyk7DQoJCQkJCQl9DQoNCgkJCQkJCSRyZWNzID0gMDsNCgkJCQkJCWZvcmVhY2gg KCRjVGFibGVbJHBsYWNlXSBhcyAkdGJsID0+ICRjb2xJbmZvKSB7DQoJCQkJCQkJaWYgKCRy ZWNzID09IDApIHsNCgkJCQkJCQkJJHdoZXJlID0gYXJyYXkoKTsNCgkJCQkJCQkJZm9yZWFj aCAoJGNvbEluZm8gYXMgJGNvbE5hbWUgPT4gJHFyeVR5cGUpIHsNCgkJCQkJCQkJCSR3aGVy ZVtdID0gJGNvbE5hbWUgLiAoKCRxcnlUeXBlPT0wKSA/ICIgPSAnIiAuJHJvd1skY29sUmVm c1swXV0uICInIiA6ICIgTElLRSAnJSIgLiRyb3dbJGNvbFJlZnNbMF1dLiAiJSciKTsNCgkJ CQkJCQkJCWlmIChjb3VudCgkZm5hbGlhc2VzKSA+IDEpIHsNCgkJCQkJCQkJCQlmb3JlYWNo ICgkZm5hbGlhc2VzWzFdIGFzICRmbmFsaWFzKSB7DQoJCQkJCQkJCQkJCSR3aGVyZVtdID0g JGNvbE5hbWUgLiAoKCRxcnlUeXBlPT0wKSA/ICIgPSAnIiAuJGZuYWxpYXMuICInIiA6ICIg TElLRSAnJSIgLiRmbmFsaWFzLiAiJSciKTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJ CQkJCQkJCX0NCgkJCQkJCQkJJHdoZXJlID0gam9pbigiIE9SICIsICR3aGVyZSk7DQoJCQkJ CQkJCSRyZWNzICs9IHNhZmVfY291bnQoJHRibCwgJHdoZXJlKTsNCgkJCQkJCQl9DQoJCQkJ CQl9DQoNCgkJCQkJCS8vIElmIHRoZSBpdGVtIGhhcyBub3QgYmVlbiBmb3VuZCwgZmxhZyBp dA0KCQkJCQkJaWYgKCRyZWNzID09IDApIHsNCgkJCQkJCQkkY29sTmFtZXMgPSAkY29sUmVm czsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJGNvbE5hbWVzID0gYXJyYXkoKTsNCgkJCQkJ CX0NCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjb2xOYW1lcyA9ICRjb2xSZWZzOw0KCQkJCQl9 DQoNCgkJCQkJLy8gTWFrZSB1cCB0aGUgc3RyaW5nIHRvIGRpc3BsYXksIGFuZCBoeXBlcmxp bmsgaXQgaWYgZGlyZWN0ZWQNCgkJCQkJJGhsaW5rID0gJyc7DQoJCQkJCSR2YXJzID0gJyc7 DQoJCQkJCWZvcmVhY2ggKCRjb2xOYW1lcyBhcyAkY29sKSB7DQoJCQkJCQkkZnJvbSA9ICd7 Jy4kY29sLid9JzsNCgkJCQkJCWlmIChzdHJwb3MoJGNyb3dbN10sICRmcm9tKSAhPT0gZmFs c2UpIHsNCgkJCQkJCQlpZiAoJGNyb3dbNl0gPT0gIiMiKSB7DQoJCQkJCQkJCSR2YXJzID0g am9pbl9xcyhhcnJheSgiZXZlbnQiID0+ICRjcm93WzRdLCAic3RlcCIgPT4gJGNyb3dbNV0p KS4kY3Jvd1s2XS5zdHJ0cigkY3Jvd1s3XSwgYXJyYXkoJGZyb20gPT4gJHJvd1skY29sXSkp Ow0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCSR2YXJzID0gam9pbl9xcyhhcnJheSgiZXZl bnQiID0+ICRjcm93WzRdLCAic3RlcCIgPT4gJGNyb3dbNV0sICRjcm93WzZdID0+IHN0cnRy KCRjcm93WzddLCBhcnJheSgkZnJvbSA9PiAkcm93WyRjb2xdKSkpKTsNCgkJCQkJCQl9DQoJ CQkJCQl9DQoJCQkJCQkkaGxpbmsgLj0gJHJvd1skY29sXS4iICI7DQoJCQkJCX0NCgkJCQkJ JG91dCAuPSAoJGhsaW5rKSA/ICc8bGk+JyAuICgoJHZhcnMpID8gJzxhIGhyZWY9ImluZGV4 LnBocCcuJHZhcnMuJyI+Jy4kaGxpbmsuJzwvYT4gJyA6ICRobGluaykgLiAnPC9saT4nOiAn JzsNCgkJCQl9DQoJCQkJJG91dCAuPSAnPC91bD4nOw0KCQkJCSRjb2xCb2R5W10gPSB0ZCgk b3V0KTsNCgkJCX0gZWxzZSB7DQoJCQkJJGNvbEJvZHlbXSA9IHRkKHNtZF93dV9nVHh0KCdu b19vcnBoYW5zX2ZvdW5kJykpOw0KCQkJfQ0KCQl9DQoJCWVjaG8gdHIoam9pbigiICIsICRj b2xIZWFkKSk7DQoJCWVjaG8gdHIoam9pbigiICIsICRjb2xCb2R5KSk7DQoJfQ0KCWVjaG8g ZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNpZmljIHJlcGxh Y2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX3d1X2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0g YXJyYXkoDQoJCSdhZG1pbl9wbHVnaW5zJyA9PiAnIFsgQStQIF0nLA0KCQkncHVibGljX3Bs dWdpbnMnID0+ICcgWyBQIF0nLA0KCQknZXhjbHVzaW9uJyA9PiAnRXhjbHVkZScsDQoJCSdp bmNsdXNpb24nID0+ICdJbmNsdWRlJywNCgkJJ2ZpbHRlcicgPT4gJ0ZpbHRlcjonLA0KCQkn bWF0Y2hfY2FzZScgPT4gJ01hdGNoIGNhc2UnLA0KCQknbm9fb3JwaGFuc19mb3VuZCcgPT4g J05vIG9ycGhhbnMgZm91bmQuJywNCgkJJ29ycGhhbl9yZXN1bHRzJyA9PiAnUG9zc2libGUg b3JwaGFucycsDQoJCSdwcmVmc19saW5rJyA9PiAnQXJ0aWNsZSBzZWFyY2ggZmllbGRzJywN CgkJJ3NlYXJjaF9sYmwnID0+ICdGaW5kOicsDQoJCSdzZWFyY2hfd2hlcmVfbGJsJyA9PiAn TG9vayBhdDonLA0KCQknc3R5bGVzaGVldHMnID0+ICdTdHlsZXNoZWV0cycsDQoJCSdzbWRf d3UnID0+ICdXaGVyZSB1c2VkJywNCgkJJ3dob2xlX3dvcmQnID0+ICdXaG9sZSB3b3Jkcycs DQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5 cGUiO3M6MToiMyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6 NDoiaGVscCI7czo3MDc3OiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxPnNtZF93aGVyZV91 c2VkPC9oMT4KCgk8cD5SZWFsbHkgc2ltcGxlIGFkbWluLXNpZGUgcGx1Z2luIHRvIGhlbHAg ZmluZCB3aGF0IHlvdSBuZWVkIHRvIGVkaXQvZGVsZXRlLiBJZiB5b3UgaGF2ZSBhIHRvbm5l IG9mIGZvcm1zIG9yIHBhZ2VzIGFuZCB3YW50IHRvIHRpZHkgc3R1ZmYgdXAgaXQgY2FuIGJl IGEgYml0IG9mIGEgcGFpbiB0byBmaW5kIHdoYXQmIzgyMTc7cyBhY3R1YWxseSBpbiB1c2Uu PC9wPgoKCTxwPlNvIHVzZSB0aGlzIHBsdWdpbiB0byBzZWFyY2ggeW91ciBzZWN0aW9ucywg cGFnZXMsIGZvcm1zIG9yIGFydGljbGVzIGZvciByZWZlcmVuY2VzIHRvIHBsdWdpbnMsIG9y IG90aGVyIHBhZ2VzL2Zvcm1zL3N0eWxlc2hlZXRzIG9yIGV2ZW4ganVzdCBwbGFpbiB0ZXh0 IGluIGFydGljbGVzIC8gc3R5bGVzaGVldHMuPC9wPgoKCTxoMiBjbGFzcz0iYXV0aG9yIj5B dXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50 Rm9ybSI+U3RlZiBEYXdzb248L2E+PC9wPgoKCTxoMiBjbGFzcz0iaW5zdGFsbCI+SW5zdGFs bGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4g ZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzk4 NC9zbWRfd2hlcmVfdXNlZCI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRo ZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0m Z3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZpc2l0 IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5w aHA/aWQ9Mjc0OTMiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBhbmQgdG8gcmVw b3J0IHRoZSBzdWNjZXNzIChvciBvdGhlcndpc2UpIG9mIHRoaXMgcGx1Z2luLjwvcD4KCgk8 cD5Vbmluc3RhbGwgYnkgc2ltcGx5IGRlbGV0aW5nIHRoZSBwbHVnaW4gZnJvbSB0aGUgQWRt aW4tJmd0O1BsdWdpbnMgcGFuZS48L3A+CgoJPGgyIGNsYXNzPSJ1c2FnZSI+VXNhZ2U8L2gy PgoKCTxwPlZpc2l0IHRoZSBFeHRlbnNpb25zIHRhYiBhbmQgQ2xpY2sgJiM4MjE2O1doZXJl IHVzZWQmIzgyMTc7IHRvIGFjY2VzcyB0aGUgc2VhcmNoIGZvcm0uIFR5cGUgc29tZSBzdHVm ZiB0byBmaW5kLCBzZWxlY3Qgd2hlcmUgeW91IHdhbnQgdG8gbG9vayBhbmQgaGl0ICYjODIx NjtTZWFyY2gmIzgyMTc7IG9yIHByZXNzIEVudGVyLiBZb3VyIHJlcXVlc3RlZCBsb2NhdGlv bnMgd2lsbCBiZSBzZWFyY2hlZCBmb3IgdGhhdCB0ZXJtIGFuZCB0aGUgcmVzdWx0cyB0YWJ1 bGF0ZWQsIHdpdGggaHlwZXJsaW5rcyB0byB0aGUgb2ZmZW5kaW5nIGl0ZW1zIHNvIHlvdSBj YW4gcXVpY2tseSBlZGl0IHRoZW0uPC9wPgoKCTxwPllvdSBjYW4gZGVjaWRlIHdoZXRoZXIg dG8gc2VhcmNoIGZvciB0aGUgdGVybSAoJiM4MjIwO0luY2x1ZGUmIzgyMjE7KSBvciB0byBz ZWFyY2ggZm9yIHN0dWZmIDxzcGFuIGNsYXNzPSJjYXBzIj5OT1Q8L3NwYW4+IGNvbnRhaW5p bmcgdGhhdCB0ZXJtICgmIzgyMjA7RXhjbHVkZSYjODIyMTspLiBZb3UgbWF5IGFsc28gY2hv b3NlIHdoZXRoZXIgeW91ciBzZWFyY2ggdGVybSBtYXRjaGVzL2RvZXMgbm90IG1hdGNoIGEg d2hvbGUgd29yZCBvciBpcyBjYXNlIHNlbnNpdGl2ZS48L3A+CgoJPHA+VGhpcyBpcyB3aGF0 IHRoZSBwbHVnaW4gbG9va3MgYXQgd2hlbiB5b3Ugc2VsZWN0IGEgcGFydGljdWxhciBjaGVj a2JveCBmcm9tIHRoZSAmIzgyMjA7TG9vayBhdCYjODIyMTsgcm93OjwvcD4KCgk8dWw+CgkJ PGxpPiYjODIxNjtTZWN0aW9ucyYjODIxNzsgc2VhcmNoZXMgZXZlcnkgU2VjdGlvbiBmb3Ig cGFnZXMgb3Igc3R5bGVzaGVldHMgd2l0aCB0aGUgbWF0Y2hpbmcgbmFtZTwvbGk+CgkJPGxp PiYjODIxNjtQYWdlcyYjODIxNzsgc2VhcmNoZXMgZXZlcnkgUGFnZSBmb3IgZm9ybXMgLyBw bHVnaW5zIC8gdGV4dCB3aXRoIHRoZSBtYXRjaGluZyBuYW1lPC9saT4KCQk8bGk+JiM4MjE2 O0Zvcm1zJiM4MjE3OyBzZWFyY2hlcyBldmVyeSBGb3JtIGZvciBwbHVnaW5zIC8gb3RoZXIg Zm9ybXMgLyB0ZXh0IHdpdGggdGhlIG1hdGNoaW5nIG5hbWU8L2xpPgoJCTxsaT4mIzgyMTY7 U3R5bGVzaGVldHMmIzgyMTc7IHNlYXJjaGVzIGV2ZXJ5IFN0eWxlc2hlZXQgZm9yIHRleHQg d2l0aCB0aGUgbWF0Y2hpbmcgbmFtZTwvbGk+CgkJPGxpPiYjODIxNjtBcnRpY2xlcyYjODIx Nzsgc2VhcmNoZXMgKGJ5IGRlZmF1bHQpIGV2ZXJ5IEFydGljbGUgc2VjdGlvbiwgYm9keSwg ZXhjZXJwdCwgb3ZlcnJpZGVfZm9ybSwgdGl0bGUgYW5kIGtleXdvcmQgZm9yIG1lbnRpb24g b2YgdGhlIHRleHQgeW91IHNwZWNpZnkuIENsaWNrIHRoZSA8ZW0+QXJ0aWNsZSBzZWFyY2gg ZmllbGRzPC9lbT4gYnV0dG9uIHRvIHNlZSBhIGxpc3Qgb2YgZGF0YWJhc2UgY29sdW1ucyB0 aGF0IHlvdSBtYXkgc2VhcmNoLiBDaGVjayB0aGUgb25lcyB5b3Ugd2lzaCB0byBjb25zaWRl ciBhbmQgY2xpY2sgPGVtPlNhdmU8L2VtPjwvbGk+Cgk8L3VsPgoKCTxwPklmLCBob3dldmVy LCB5b3UgbGVhdmUgdGhlICYjODIxNjtGaW5kJiM4MjE3OyBib3ggZW1wdHkgYW5kIGNsaWNr ICYjODIxNjtTZWFyY2gmIzgyMTc7IHRoZSBwbHVnaW4gd2lsbCBzZWFyY2ggZm9yIG9ycGhh bnMuIE9ycGhhbnMgYXJlIGRlZmluZWQgYXMgZm9sbG93czo8L3A+CgoJPHVsPgoJCTxsaT5B bnkgUGFnZSB0aGF0IGlzIG5vdCBhc3NpZ25lZCB0byBhIFNlY3Rpb248L2xpPgoJCTxsaT5B bnkgU3R5bGVzaGVldCB0aGF0IGlzIG5vdCBhc3NpZ25lZCB0byBhIFNlY3Rpb248L2xpPgoJ CTxsaT5BbnkgU2VjdGlvbiB0aGF0IGhhcyBubyBBcnRpY2xlcyBpbiBpdCAoZXhjbHVkaW5n IOKAmGRlZmF1bHTigJkgd2hpY2ggY2Fubm90IGhhdmUgYW4gYXJ0aWNsZSBhbnl3YXkpPC9s aT4KCQk8bGk+QW55IFBsdWdpbiB0aGF0IGlzIG5vdCByZWZlcmVuY2VkIGZyb20gYW4gQXJ0 aWNsZSAoYm9keS9leGNlcnB0KSBvciBhbm90aGVyIEZvcm0gb3IgUGFnZTwvbGk+CgkJPGxp PkFueSBGb3JtIHRoYXQgaGFzIG5vIHJlZmVyZW5jZSB0byBpdCBpbiBhbnkgQXJ0aWNsZSAo Ym9keS9leGNlcnB0L292ZXJyaWRlX2Zvcm0pIG9yIGFub3RoZXIgRm9ybSBvciBQYWdlPC9s aT4KCTwvdWw+CgoJPHA+Tm90ZXM6PC9wPgoKCTx1bD4KCQk8bGk+T3JwaGFuZWQgYXJ0aWNs ZXMgZG9uJiM4MjE3O3QgbWFrZSBzZW5zZSBzbyB0aGV5IGFyZSBvbWl0dGVkLiBUaGUgY2hl Y2tib3ggaXMgaWdub3JlZDwvbGk+CgkJPGxpPkVzc2VudGlhbCBzZWN0aW9ucyAvIHBhZ2Vz IC8gZm9ybXMgdGhhdCBjYW5ub3QgYmUgZGVsZXRlZCBhcmUgbm90IGxpc3RlZDwvbGk+CgkJ PGxpPlBsdWdpbnMgYXJlIGFsd2F5cyBkaXNwbGF5ZWQgYmVjYXVzZSB0aGVyZSYjODIxNztz IG5vIGNoZWNrIGJveCBmb3IgaXQuIFRoZSByZWFzb24gaXMgdGhhdCBzbWRfd2hlcmVfdXNl ZCBkb2VzIG5vdCBhbGxvdyBzZWFyY2hpbmcgd2l0aGluIGEgcGx1Z2luIGZvciBhIHJlZmVy ZW5jZSB0byBhIHdvcmQsIGJ1dCBpdCBkb2VzIGNoZWNrIG90aGVyIHBsYWNlcyBmb3IgcmVm ZXJlbmNlcyA8ZW0+dG88L2VtPiBwbHVnaW5zPC9saT4KCQk8bGk+VGhlIFBsdWdpbiBsaXN0 IGNhbiBiZSB0b2dnbGVkLiBJdCBiZWdpbnMgYnkgc2hvd2luZyBib3RoIGFkbWluIGFuZCBw dWJsaWMgKEErUCkgcGx1Z2lucy4gSWYgeW91IHdpc2ggdG8gc2VlIHB1YmxpYy1vbmx5IChQ KSBwbHVnaW5zLCBjbGljayAmIzgyMTY7U2VhcmNoJiM4MjE3OyBhZ2FpbiB0byB0b2dnbGUg dGhlIGxpc3Q8L2xpPgoJCTxsaT5KdXN0IGJlY2F1c2UgYW4gaXRlbSBpcyBsaXN0ZWQgYXMg b3JwaGFuZWQgZG9lcyA8ZW0+bm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgaXMgbm90IHVzZWQ8 L2VtPiEgRm9yIGV4YW1wbGUsIHJ2bV9tYWludGVuYW5jZSBjaGVja3MgZm9yIHRoZSBleGlz dGVuY2Ugb2YgYW4gPGNvZGU+ZXJyb3JfNTAzPC9jb2RlPiBQYWdlLiBTaW5jZSBpdCBpcyBu ZXZlciBhc3NpZ25lZCB0byBhIFNlY3Rpb24gaXQgd2lsbCBiZSBsaXN0ZWQgYXMgb3JwaGFu ZWQuIElmIHlvdSBoYXZlIGEgZGVkaWNhdGVkIHN0eWxlc2hlZXQgZm9yIG1haW50ZW5hbmNl IG1vZGUgdGhhdCwgdG9vLCB3aWxsIGJlIHNob3duIGFzIG9ycGhhbmVkLiBJbiBzaG9ydCwg YmUgY2FyZWZ1bCBhbmQgbWFrZSBhIGJhY2t1cCA6LSk8L2xpPgoJCTxsaT5QbHVnaW5zIHN1 Y2ggYXMgcGFwX2NvbnRhY3RfY2xlYW5lciBhbmQgcnZtX21haW50ZW5hbmNlIGFyZSBsaXN0 ZWQgYXMgb3JwaGFucyBldmVuIHRob3VnaCB0aGV5IGFyZSB1c2VkIGJ5IG90aGVyIHBsdWdp bnMgLyB1c3VhbGx5IGRpc2FibGVkLiBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCBhIHBsdWdp biwgY2hlY2sgaXQgYnkgdHlwaW5nIGEgcGFydGlhbCB0YWcgbmFtZSBpbnRvIHRoZSBzZWFy Y2ggYm94PC9saT4KCTwvdWw+CgoJPGgyIGNsYXNzPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwv aDI+CgoJPHVsPgoJCTxsaT4xNiBKdW4gMDggfCB2MC4xIHwgSW5pdGlhbCByZWxlYXNlPC9s aT4KCQk8bGk+MTYgSnVuIDA4IHwgdjAuMTEgfCBBZGRlZCBzZWN0aW9uIHNlYXJjaCBhbmQg b3ZlcnJpZGVfZm9ybTwvbGk+CgkJPGxpPjE2IEp1biAwOCB8IHYwLjEyIHwgQWRkZWQgaW5j bHVkZS9leGNsdWRlICh0aGFua3MgbXJkYWxlKTwvbGk+CgkJPGxpPjE2IEp1biAwOCB8IHYw LjEzIHwgQWRkZWQgYWJpbGl0eSB0byBtYXRjaCB3aG9sZSB3b3JkcyAodGhhbmtzIHphbnph KTwvbGk+CgkJPGxpPjE3IEp1biAwOCB8IHYwLjE0IHwgQWRkZWQgb3JwaGFuIHNlYXJjaCAo dGhhbmtzIHVsaS9uZXQtY2FydmVyKTwvbGk+CgkJPGxpPjE4IEp1biAwOCB8IHYwLjE1IHwg Rml4ZWQgcGx1Z2luIGxpc3Qgc28gaXQgZG9lcyBhIGRlZXAgc2VhcmNoIGluc2lkZSB0aGUg c291cmNlIGNvZGUgZm9yIHRhZyBuYW1lczwvbGk+CgkJPGxpPjE4IEp1biAwOCB8IHYwLjE2 IHwgQWRkZWQgYWRtaW4vY2xpZW50IHNpZGUgcGx1Z2luIHRvZ2dsZSA7IHNlYXJjaGVzIG5v dyBleHRlbmRlZCB0byB0aXRsZSBhbmQga2V5d29yZHMgKGJvdGggdGhhbmtzIHVsaSk8L2xp PgoJCTxsaT4xOCBKdW4gMDggfCB2MC4xNyB8IEFydGljbGVzIGFyZSBsaW5rZWQgd2l0aCBJ RCBhbmQgdGl0bGUgKHRoYW5rcyB1bGkpPC9saT4KCQk8bGk+MTggSnVuIDA4IHwgdjAuMTgg fCBBZGRlZCBjYXNlIHNlbnNpdGl2ZSBzZWFyY2hlcyAodGhhbmtzIGdlb2ZmNzc3KTwvbGk+ CgkJPGxpPjExIE1hciAwOSB8IHYwLjE5IHwgQWRkZWQgYXV0by1mb2N1cyB0byBzZWFyY2gg Ym94PC9saT4KCQk8bGk+MTIgQXVnIDA5IHwgdjAuMiB8IFJlcXVpcmVzIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IDQuMi4wIDsgYWRkZWQgYXV0by1wcmVmcyBmb3IgJiM4MjE2 O2xvb2sgaW4mIzgyMTc7IGFuZCBhcnRpY2xlIHNlYXJjaCBmaWVsZHMgcHJlZiAodGhhbmtz IHVsaSk8L2xpPgoJCTxsaT4xOSBNYXkgMTAgfCB2MC4zIHwgUmVxdWlyZXMgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC4zLjAgOyBhZGRlZCBzZWFyY2hpbmcgaW5zaWRlIFN0 eWxlc2hlZXRzPC9saT4KCTwvdWw+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENT UyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVp Z2h0OjEuMyA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEw NSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQt Y29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5v cm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4 YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7 IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVl OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVl OyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6 YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJv dHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBo MSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdp bjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0 b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZv bnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjog IzY5MzsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2lu ZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQoj c21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRl ci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBl cmNhc2U7IH0KI3NtZF9oZWxwIC5hdHQtbmFtZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3Nt ZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5 OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6MTAwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBh ZGRpbmctYm90dG9tOjFlbTt9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6 MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwO30KPC9zdHlsZT4KPCEtLSAqKiogRU5E IFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiI3ZGVlYzYyNTk2ZmQ0MWNj MTJhNTViMThjNGFlOWNiZiI7fQ==