# Name: ied_plugin_composer v0.83 # Type: Admin side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # 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: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjY6ImF1dGhv ciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERhd3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjQ6IjAuODMiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMyOiJXcml0ZSBhbmQg cHVibGlzaCBwbHVnaW5zIGVhc2lseSI7czo0OiJjb2RlIjtzOjUxNjAzOiJpZihAdHhwaW50 ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ2llZF9wbHVnaW5fY29tcG9zZXIn LCcxLDInKTsNCglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAnaWVkX3BsdWdpbl9jb21w b3NlcicsIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpKTsNCglyZWdp c3Rlcl9jYWxsYmFjaygnaWVkX3BsdWdpbl9jb21wb3NlcicsICdpZWRfcGx1Z2luX2NvbXBv c2VyJyk7DQoJZ2xvYmFsICRpZWRfcGx1Z2luX2NvbXBvc2VyLCAkaWVkX3BsdWdpbl9wcmVm cywgJGllZF9wbHVnaW5fZ2xvYmFscywgJHByZWZzOw0KCSRpZWRfcGx1Z2luX2dsb2JhbHMg PSBhcnJheSgNCgkJJ2Nzc19zdGFydCcgPT4gJzwhLS0nLA0KCQknY3NzX2VuZCcgPT4gJy0t PicsDQoJCSdkbG1fc3RhcnQnID0+ICcjJywNCgkJJ2RsbV9lbmQnID0+ICcnLA0KCQknc3Rh cnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0tLScsDQoJCSdlbmQnID0+ICcg LS0tIEVORCBQTFVHSU4gU0VDVElPTiAtLS0nLA0KCSk7DQoJLy8gRG91YmxlIGFycmF5OiAx c3QgaXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWlyIGRlZmF1bHRzLA0KCS8v IDJuZCBpcyBhIGxpc3Qgb2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5IG5lZWQgcmVtb3Zpbmcg aW4gZnV0dXJlIChkZWZhdWx0cyBhbGwgc2V0IGVtcHR5KQ0KCSRpZWRfcGx1Z2luX3ByZWZz ID0gYXJyYXkoDQoJCWFycmF5KA0KCQkJJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiAnbm9uZScs DQoJCQknaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCcgPT4gaHUuJ2pzJy5EUywNCgkJCSdpZWRf cGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJzExMCcsDQoJCQknaWVkX3BsdWdpbl9oZWxwX2Vk aXRvcicgPT4gJ3RleHRpbGUnLA0KCQkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0aCcg PT4gaHUuJ2pzJy5EUywNCgkJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4gJzAnLA0K CQkJJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJyA9PiAne25hbWV9X3Z7dmVyc2lvbn0udHh0 JywNCgkJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnID0+ICd7bmFtZX1fdnt2ZXJzaW9u fV96aXAudHh0JywNCgkJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnID0+ICd7bmFtZX1f dnt2ZXJzaW9ufS5waHAnLA0KCQkJJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJyA9PiAk cHJlZnNbJ3RlbXBkaXInXSwNCgkJKSwNCgkJYXJyYXkoDQoJCQknaWVkX3BsdWdpbl9ub3Rf dXNlZF9hbnlfbW9yZV9wbGFjZWhvbGRlcicgPT4gJycsDQoJCSkNCgkpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2NvbXBvc2VyKCRldmVudCwgJHN0ZXApIHsN CglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdpZWRfcGx1Z2lu X2RlbGV0ZScsDQoJCQknaWVkX3BsdWdpbl9lZGl0JywNCgkJCSdpZWRfcGx1Z2luX2hlbHAn LA0KCQkJJ2llZF9wbHVnaW5fbGlzdCcsDQoJCQknaWVkX3BsdWdpbl9pbnN0YWxsJywNCgkJ CSdpZWRfcGx1Z2luX3NhdmUnLA0KCQkJJ2llZF9wbHVnaW5fcmVzdG9yZScsDQoJCQknaWVk X3N3aXRjaF9zdGF0dXMnLA0KCQkJJ2llZF9zZXRfb3JkZXInLA0KCQkJJ2llZF9wbHVnaW5f c2V0dXAnLA0KCQkJJ2llZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCcsDQoJCQknaWVkX3BsdWdp bl9wcmVmc19yZW1vdmUnLA0KCQkJJ2llZF9wbHVnaW5fcHJlZnNfdXBkYXRlJywNCgkJCSdp ZWRfcGx1Z2luX2NyZWF0ZV9uZXcnLA0KCQkJJ2llZF9wbHVnaW5fc2F2ZV9hc19maWxlJywN CgkJCSdpZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUnLA0KCQkJJ2llZF9wbHVnaW5fdXBs b2FkJywNCgkJCSdpZWRfcGx1Z2luX2hlbHBfdmlld2VyJywNCgkJKSkpIHsNCgkJaWVkX3Bs dWdpbl9saXN0KCk7DQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJl dXJucyBhbiBhcnJheSBvZiBmaWxlbmFtZXM7IDFzdCBpcyB0aGUgc3RhbmRhcmQgcGx1Z2lu LCAybmQgaXMgdGhlIGNvbXByZXNzZWQgcGx1Z2luLCAzcmQgaXMgdGhlIFBIUCB0ZW1wbGF0 ZQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9nZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pIHsNCgln bG9iYWwgJGllZF9wbHVnaW5fcHJlZnMsICRwcmVmczsNCg0KCSRvdXQgPSBhcnJheSgNCgkJ KChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJ10pICYmICFlbXB0eSgk cHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdp bl9vdXRwdXRfc2ZpbGUnXSA6ICRpZWRfcGx1Z2luX3ByZWZzWzBdWydpZWRfcGx1Z2luX291 dHB1dF9zZmlsZSddKSwNCgkJKChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3Nm aWxlYyddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSkp ID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSA6ICRpZWRfcGx1Z2luX3By ZWZzWzBdWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSksDQoJCSgoaXNzZXQoJHByZWZz WydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnXSkgJiYgIWVtcHR5KCRwcmVmc1snaWVkX3Bs dWdpbl9vdXRwdXRfc2ZpbGVwJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGVwJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVw J10pLA0KCSk7DQoNCgkkcmVwID0gYXJyYXkoDQoJCSJ7bmFtZX0iID0+ICRuYW1lLA0KCQki e3ZlcnNpb259IiA9PiAkdmVyc2lvbiwNCgkpOw0KDQoJZm9yZWFjaCAoJG91dCBhcyAkZmlk eCA9PiAkZm5hbWUpIHsNCgkJJGZuYW1lID0gc3RydHIoJGZuYW1lLCAkcmVwKTsNCgkJJG91 dFskZmlkeF0gPSBzbWRfc2FuaXRpemVGb3JGaWxlKCRmbmFtZSk7DQoJfQ0KDQoJcmV0dXJu ICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fbGlzdCgkbWVz c2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnM7DQoNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1 Z2lucycpLCRtZXNzYWdlKTsNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKS4NCnRyKHRkYSgN CmZvcm0oDQpmSW5wdXQoJ3RleHQnLCduYW1lJywnJywnJywnJywnJywnMzAnLCcwJykNCi4g ZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLGllZF9wbHVnaW5fZ1R4dCgnY3JlYXRlX25ldycp LCdzbWFsbGVyYm94JykNCi4gc0lucHV0KCdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnKQ0KLiBl SW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQ0KKQ0KLCcgY29sc3Bhbj0iNiIgc3R5bGU9 ImJvcmRlcjowO2hlaWdodDo1MHB4IicpDQoudGRhKGZvcm0oZklucHV0KCdzdWJtaXQnLCAn c3VibWl0JywgaWVkX3BsdWdpbl9nVHh0KCdzZXR1cCcpLCAncHVibGlzaCcpLnNJbnB1dCgn aWVkX3BsdWdpbl9zZXR1cCcpLmVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpKSwnIGNv bHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKSkuDQphc3NIZWFkKCdw bHVnaW4nLCdhdXRob3InLGdUeHQoJ3ZlcnNpb24nKS4nICgnLmdUeHQoJ3BsdWdpbl9tb2Rp ZmllZCcpLicpJywnZGVzY3JpcHRpb24nLCdwdWJsaXNoJywnb3JkZXInLCdhY3RpdmUnLCcn KTsNCg0KCSRycyA9IHNhZmVfcm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAiMT0xIG9y ZGVyIGJ5IG5hbWUiKTsNCg0KCXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkgew0KCQlleHRy YWN0KCRhKTsNCgkJJGVuYW1lID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7bmFtZT0nLiRuYW1lLiciPicuJG5h bWUuJzwvYT4nOw0KCQkkaGxpbmsgPSAoJGhlbHApID8gJzxhIGhyZWY9Ij9ldmVudD1pZWRf cGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4O25h bWU9Jy4kbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7DQoJCSRvTGlu ayA9IGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3JkZXIpOw0KCQkkZm5h bWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pOw0KCQkkcHVidGFn ID0gdGFnKGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9j b21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRu YW1lLiciIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiRmbmFt ZXNbMF0uICciJyk7DQoJCSRwdWJ6dGFnID0gdGFnKGllZF9wbHVnaW5fZ1R4dCgnY29tcHJl c3MnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLicmIzM4O3ppcD10cnVl IiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzFd LiAnIicpOw0KCQkkbW9kaWZpZWQgPSAoc3RydG9sb3dlcigkY29kZSkgIT0gKHN0cnRvbG93 ZXIoJGNvZGVfcmVzdG9yZSkpKTsNCg0KCQllY2hvIHRyKHRkKCRlbmFtZSkNCi50ZCgoICgk YXV0aG9yX3VyaSkgPyAnPGEgaHJlZj0iJy4kYXV0aG9yX3VyaS4nIj4nLiRhdXRob3IuJzwv YT4nIDogJGF1dGhvciksMTYwKQ0KLnRkKCgoJG1vZGlmaWVkKSA/ICc8YSBocmVmPSJpbmRl eC5waHA/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3Jl c3RvcmUmIzM4O25hbWU9Jy4kbmFtZS4nIiB0aXRsZT0iJy5pZWRfcGx1Z2luX2dUeHQoJ3Jl c3RvcmVfaGVscCcpLiciIG9uY2xpY2s9InJldHVybiB2ZXJpZnkoXCcnLmllZF9wbHVnaW5f Z1R4dCgncmVzdG9yZV92ZXJpZnknLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpLidcJyk7 Ij4nLiR2ZXJzaW9uLic8L2E+JyA6ICR2ZXJzaW9uKSAuICgoJG1vZGlmaWVkKSA/ICcmbmJz cDsoJy5nVHh0KCd5ZXMnKS4nKScgOiAnJyksMTApDQoudGQoJGRlc2NyaXB0aW9uLDI2MCkN Ci50ZCgkcHVidGFnIC4nIHwgJy4gJHB1Ynp0YWcgLicgfCAnLiAkaGxpbmspDQoudGQoJG9M aW5rLCA0MCkNCi50ZChpZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0 YXR1cykpLDMwKQ0KDQoudGQoZExpbmsoJ2llZF9wbHVnaW5fY29tcG9zZXInLCdpZWRfcGx1 Z2luX2RlbGV0ZScsJ25hbWUnLCRuYW1lKSwzMCkNCik7DQoJCXVuc2V0KCRuYW1lLCRwYWdl LCRkZWxldGVsaW5rKTsNCgl9DQoNCglpZiAoIWVtcHR5KCRwcmVmc1sncGx1Z2luX2NhY2hl X2RpciddKSAmJiBmaWxlX2V4aXN0cygkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXSkpIHsN CgkJJGZpbGVuYW1lcyA9IGFycmF5KCk7DQoJCSRkaXIgPSBkaXIoJHByZWZzWydwbHVnaW5f Y2FjaGVfZGlyJ10pOw0KCQl3aGlsZSAoJGZpbGUgPSAkZGlyLT5yZWFkKCkpIHsNCgkJCWlm KCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSB7DQoJCQkJJGZpbGVhZGRyID0gJHBy ZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGU7DQoJCQkJaWYgKCFpc19kaXIoJGZp bGVhZGRyKSkgew0KCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7DQoJCQkJfQ0KCQkJfQ0KCQl9 DQoJCSRkaXItPmNsb3NlKCk7DQoJCSgkZmlsZW5hbWVzKT9uYXRjYXNlc29ydCgkZmlsZW5h bWVzKTonJzsNCgkJZWNobyB0cigNCgkJdGRhKA0KCQl0YWcoaWVkX3BsdWdpbl9nVHh0KCdy dW5fZnJvbScpLicgJy50YWcoJ3BsdWdpbl9jYWNoZV9kaXInLCdhY3JvbnltJywnIHRpdGxl PSInLiRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLiciIHN0eWxlPSJib3JkZXItYm90dG9t OjFweCBkYXNoZWQgYmxhY2siJykuJzonLCdoMScpDQoJCSwnIGNvbHNwYW49IjgiIHN0eWxl PSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykNCg0KCQkpOw0KDQoJ CWVjaG8gYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9u JywncHVibGlzaCcsJycsJycpOw0KCQlmb3JlYWNoKCRmaWxlbmFtZXMgYXMgJGZpbGVuYW1l KSB7DQoJCQkkZmlsZWV4dD0gYXJyYXlfcG9wKGV4cGxvZGUgKCcuJywkZmlsZW5hbWUpKTsN CgkJCWlmICgkZmlsZWV4dD09J3BocCcpIHsNCgkJCQkkYmFzZW5hbWU9YmFzZW5hbWUoJGZp bGVuYW1lKTsNCgkJCQkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJHByZWZzWydw bHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGVuYW1lKTsNCgkJCQkkaGxpbmsgPSAoJHBsdWdp blsnaGVscCddKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7 c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4n Ij4nLmdUeHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7DQoJCQkJJGVmaWxlID0gJzxhIGhy ZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRp dCYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyI+Jy4kcGx1Z2luWyduYW1lJ10uJzwvYT4n Ow0KCQkJCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRwbHVnaW5bJ25hbWUnXSwg JHBsdWdpblsndmVyc2lvbiddKTsNCg0KCQkJCWVjaG8gdHIoDQoJCQkJdGQoDQoJCQkJdGFn KCRmaWxlbmFtZSwnZGl2JywnIHN0eWxlPSJjb2xvcjpncmF5O2JvcmRlcjowO3BhZGRpbmc6 MXB4IDJweCAycHggMXB4OyInKQ0KCQkJCS4oaXNzZXQoJHBsdWdpblsnbmFtZSddKT8kZWZp bGUuJzxiciAvPic6JycpLicgJw0KCQkJCSkNCgkJCQkudGQoDQoJCQkJKCBpc3NldCgkcGx1 Z2luWydhdXRob3JfdXJpJ10pPyc8YSBocmVmPSInLiRwbHVnaW5bJ2F1dGhvcl91cmknXS4n Ij4nOicnICkgLg0KCQkJCSggaXNzZXQoJHBsdWdpblsnYXV0aG9yJ10pPyRwbHVnaW5bJ2F1 dGhvciddOicmbmJzcDsnICkuDQoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3JfdXJpJ10p Pyc8L2E+JzonJyApLCAxNjANCgkJCQkpDQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWyd2ZXJz aW9uJ10pPyRwbHVnaW5bJ3ZlcnNpb24nXTonJm5ic3A7JyksMTApDQoJCQkJLnRkKChpc3Nl dCgkcGx1Z2luWydkZXNjcmlwdGlvbiddKT8kcGx1Z2luWydkZXNjcmlwdGlvbiddOicmbmJz cDsnKSwyNjApDQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWyduYW1lJ10pPw0KCQkJCXRhZyhn VHh0KCdwdWJsaXNoJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O2ZpbGVuYW1lPScuJGZpbGVu YW1lLiciIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiRmbmFt ZXNbMF0uICciJykNCgkJCQkJCS4nIHwgJy50YWcoaWVkX3BsdWdpbl9nVHh0KCdjb21wcmVz cycpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWll ZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJiMzODt6 aXA9dHJ1ZSIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZu YW1lc1sxXS4gJyInKToNCgkJCQl0YWcoJyZuYnNwOycsJ3NwYW4nLCcgc3R5bGU9ImNvbG9y OmdyYXkiJykNCgkJCQkpLicgfCAnLiRobGluaykNCgkJCQkudGQoJycpDQoJCQkJLnRkKCcn KQ0KCQkJCSk7DQoJCQl9DQoJCX0NCgl9DQoNCgllY2hvIHRyKA0KdGRhKA0KJzxmb3JtIGVu Y3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9 InBvc3QiPicuDQpzdGFydFRhYmxlKCdlZGl0JywnbGVmdCcpLg0KdHIodGRhKCBoSW5wdXQo J01BWF9GSUxFX1NJWkUnLDEwMDAwMDApLg0KZ3JhZihpZWRfcGx1Z2luX2dUeHQoJ3VwbG9h ZF9waHAnKS4nOiAnLg0KZklucHV0KCdmaWxlJywndGhlZmlsZScsJycsJ2VkaXQnKS4NCmZJ bnB1dCgnc3VibWl0Jywnc3VibWl0JyxnVHh0KCd1cGxvYWQnKSwnc21hbGxlcmJveCcpKS4N CmVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpLg0Kc0lucHV0KCdpZWRfcGx1Z2luX3Vw bG9hZCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5IicgKS4NCnRkYSggdGFn KGllZF9wbHVnaW5fZ1R4dCgnbmFtZScpLCAnYWNyb255bScsJyB0aXRsZT0iJy5pZWRfcGx1 Z2luX2dUeHQoJ25hbWVfdG9vbHRpcCcpLiciIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBk YXNoZWQgYmxhY2siJykuJzogJy4gZklucHV0KCd0ZXh0JywnbmFtZScsJ3h4eF94eHh4eHgn LCcnLCcnLCcnLCczMCcsJzAnKSAsICcgc3R5bGU9ImJvcmRlcjowcHggc29saWQgZ3JheTt2 ZXJ0aWNhbC1hbGlnbjptaWRkbGU7IicgKSkuDQplbmRUYWJsZSgpLg0KJzwvZm9ybT4nDQos JyBjb2xzcGFuPSI4IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7dGV4dC1hbGlnbjps ZWZ0IicpDQopOw0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gaWVkX3N0YXR1c19saW5rKCRzdGF0dXMsJG5hbWUsJGxpbmt0ZXh0KSB7DQoJJG91dCA9 ICc8YSBocmVmPSJpbmRleC5waHA/JzsNCgkkb3V0IC49ICdldmVudD1pZWRfcGx1Z2luX2Nv bXBvc2VyJiMzODtzdGVwPWllZF9zd2l0Y2hfc3RhdHVzJiMzODtzdGF0dXM9Jy4NCgkkc3Rh dHVzLicmIzM4O25hbWU9Jy51cmxlbmNvZGUoJG5hbWUpLiciJzsNCgkkb3V0IC49ICc+Jy4k bGlua3RleHQuJzwvYT4nOw0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBpZWRfc3dpdGNoX3N0YXR1cygpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJh eSgnbmFtZScsJ3N0YXR1cycpKSkpOw0KCSRjaGFuZ2UgPSAoJHN0YXR1cykgPyAwIDogMTsN CglzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsICJzdGF0dXM9JGNoYW5nZSIsICJuYW1lPSck bmFtZSciKTsNCglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luX3NhdmVkJywgYXJyYXko J3tuYW1lfScgPT4gJG5hbWUpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9z ZXRfb3JkZXIoKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCAnbG9h ZF9vcmRlcicpKSkpOw0KCSRvcmRlciA9IG1pbihtYXgoIGludHZhbCgkbG9hZF9vcmRlciks IDEpLCA5KTsNCglzYWZlX3VwZGF0ZSgndHhwX3BsdWdpbicsICJsb2FkX29yZGVyID0gJGxv YWRfb3JkZXIiLCAibmFtZSA9ICckbmFtZSciKTsNCglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgn cGx1Z2luX3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3Jk ZXIpIHsNCglmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJG9yZGVyc1skaV0gPSAkaTsN CglyZXR1cm4gZm9ybSgNCgkJZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykubi4NCgkJ c0lucHV0KCdpZWRfc2V0X29yZGVyJykubi4NCgkJaElucHV0KCduYW1lJywgJG5hbWUpLm4u DQoJCXNlbGVjdElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAs IDEpDQoJCSwnZGlzcGxheTppbmxpbmUnDQoJKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gaWVkX3BsdWdpbl9kZWxldGUoKSB7DQoJJG5hbWUgPSBkb1NsYXNoKHBzKCduYW1lJykp Ow0KCXNhZmVfZGVsZXRlKCJ0eHBfcGx1Z2luIiwibmFtZT0nJG5hbWUnIik7DQoJaWVkX3Bs dWdpbl9saXN0KGdUeHQoJ3BsdWdpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5h bWUpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVzdG9yZSgp IHsNCgkkbmFtZSA9IGRvU2xhc2goZ3BzKCduYW1lJykpOw0KCXNhZmVfdXBkYXRlKCJ0eHBf cGx1Z2luIiwiY29kZSA9IGNvZGVfcmVzdG9yZSIsIm5hbWU9JyRuYW1lJyIpOw0KCWllZF9w bHVnaW5fbGlzdChpZWRfcGx1Z2luX2dUeHQoJ3Jlc3RvcmVkJywgYXJyYXkoJ3tuYW1lfScg PT4gJG5hbWUpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fZWRp dCgkbWVzc2FnZT0nJywkbmV3ZmlsZT0nJykgew0KCSRzaXRlX2RpciA9IGh1Ow0KCSRuZXdu YW1lID0gdHJpbShncHMoJ25ld25hbWUnKSk7DQoJJG5hbWUgPSBlbXB0eSgkbmV3bmFtZSkg PyBncHMoJ25hbWUnKSA6ICRuZXduYW1lOw0KCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5z JyksJG1lc3NhZ2UpOw0KCWVjaG8gaWVkX2luc2VydF9lZGl0b3JzKCk7DQoJJHRoZUZpbGUg PSAoJG5ld2ZpbGUpID8gJG5ld2ZpbGUgOiAoKGdwcygnZmlsZW5hbWUnKSkgPyBncHMoJ2Zp bGVuYW1lJykgOiAkbmFtZSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkdGhlRmls ZSwgZ3BzKCdmaWxlbmFtZScpPyAxOiAwKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g aWVkX3BsdWdpbl9lZGl0X2Zvcm0oJG5hbWU9JycsJGVkaXRmaWxlPTApIHsNCglnbG9iYWwg JHByZWZzLCAkaWVkX3BsdWdpbl9wcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFsczsNCglpZiAo ISRlZGl0ZmlsZSkgew0KCQkkcnMgPSBzYWZlX3JvdygiYXV0aG9yLCBhdXRob3JfdXJpLCB2 ZXJzaW9uLCBkZXNjcmlwdGlvbiwgY29kZSwgaGVscCwgc3RhdHVzLCB0eXBlLCBsb2FkX29y ZGVyIiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7DQoJCWV4dHJhY3QoJHJzKTsN CgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVu aygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0K CX0gZWxzZSB7DQoJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNbJ3Bs dWdpbl9jYWNoZV9kaXInXS5EUy4kbmFtZSk7DQoJCSRmaWxlbmFtZSA9ICRuYW1lOw0KCQkk ZmlsZWV4dCA9IGFycmF5X3BvcCgkbmFtZT1leHBsb2RlICgnLicsJG5hbWUpKTsNCgkJJG5h bWUgPSBpbXBsb2RlKCRuYW1lKTsNCgkJZXh0cmFjdCgkcGx1Z2luKTsNCgkJJHN0YXR1cyA9 ICgkZmlsZWV4dD09J3BocCcpPyAxOiAwOw0KCX0NCgkkZWR3aWR0aCA9IChpc3NldCgkcHJl ZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pICYmIGlzX251bWVyaWMoJHByZWZzWydp ZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9y X3dpZHRoJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9lZGl0b3Jfd2lk dGgnXTsNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2Vf bWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRf cGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJJHBsdWdpblsnbmFtZSddID0gJG5hbWU7 DQoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOw0KCSRwbHVnaW5bJ2F1dGhvcl91cmkn XSA9ICRhdXRob3JfdXJpOw0KCSRwbHVnaW5bJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0KCSRw bHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247DQoJJHBsdWdpblsnaGVscCdd ID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2Nzcywg JGVuZF9jc3MpOw0KCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOw0KCSRwbHVnaW5bJ3R5cGUn XSA9ICR0eXBlOw0KCSRwbHVnaW5bJ29yZGVyJ10gPSAkbG9hZF9vcmRlcjsNCgkkcGx1Z2lu WydtZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7DQoJZm9yICgkaSA9IDE7ICRpIDw9 IDk7ICRpKyspICRvcmRlcnNbJGldID0gJGk7DQoNCgkkZGlzdHJpYnV0aW9uPSc8dGV4dGFy ZWEgbmFtZT0iZGlzdHJpYnV0aW9uIiByb3dzPSIxIiBjb2xzPSInLiRlZHdpZHRoLiciIG9u Y2xpY2s9InRoaXMuc2VsZWN0KCkiPicuYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdp bikpLic8L3RleHRhcmVhPic7DQoNCgkkZm5hbWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgk cGx1Z2luWyduYW1lJ10sICRwbHVnaW5bJ3ZlcnNpb24nXSk7DQoJJG5hbWVkTGluayA9IChp c3NldCgkZmlsZW5hbWUpKSA/ICdmaWxlbmFtZT0nLiRmaWxlbmFtZSA6ICduYW1lPScuJG5h bWU7DQoNCgkkc2xpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4n IC5pZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuICRmbmFtZXNbMF0uICc8L2E+JzsN Cgkkc3ppcGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4 O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nJiMzODt6 aXA9dHJ1ZSI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4gJGZuYW1lc1sx XS4gJyAoY29tcHJlc3NlZCk8L2E+JzsNCgkkc3BocGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50 PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX3BocF9m aWxlJiMzODsnLiRuYW1lZExpbmsuJyI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnc2F2ZV9hcycp IC4nICcuICRmbmFtZXNbMl0uICc8L2E+JzsNCgkkdmhlbHBsaW5rZnVsbCA9ICgkaGVscCkg PyAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3Bs dWdpbl9oZWxwX3ZpZXdlciYjMzg7Jy4kbmFtZWRMaW5rLiciPlsgJy5zdHJvbmcoZ1R4dCgn dmlldycpLicgJy5nVHh0KCdoZWxwJykpLicgXTwvYT4nIDogJyc7DQoNCgkkbmV3bmFtZSA9 IGZJbnB1dCgndGV4dCcsJ25ld25hbWUnLCRuYW1lLCdlZGl0JywnJywnJywkZWR3aWR0aCAt IChpbnQpKCRlZHdpZHRoKjAuMyksJzInKTsNCgkkYXV0aG9yID0gZklucHV0KCd0ZXh0Jywn YXV0aG9yJywkYXV0aG9yLCdlZGl0JywnJywnJywkZWR3aWR0aCwnMicpOw0KCSRhdXRob3Jf dXJpID0gZklucHV0KCd0ZXh0JywnYXV0aG9yX3VyaScsJGF1dGhvcl91cmksJ2VkaXQnLCcn LCcnLCRlZHdpZHRoLCcyJyk7DQoJJHZlcnNpb24gPSBmSW5wdXQoJ3RleHQnLCd2ZXJzaW9u JywkdmVyc2lvbiwnZWRpdCcsJycsJycsJGVkd2lkdGggLSAoaW50KSgkZWR3aWR0aCowLjMp LCcyJykgLiAnJiMxNjA7JiMxNjA7Jy4gKCgkZWRpdGZpbGUpID8gY2hlY2tib3goJ3JlbmFt ZV9maWxlJywgJzEnLCAwLCAnJywncmVuYW1lX2ZpbGUnKSAuICcgPGxhYmVsIGZvcj0icmVu YW1lX2ZpbGUiPicuaWVkX3BsdWdpbl9nVHh0KCdyZW5hbWVfZmlsZScpLic8L2xhYmVsPicg OiBjaGVja2JveCgncmVzdG9yZV9wb2ludCcsICcxJywgMCwgJycsJ3Jlc3RvcmVfcG9pbnQn KSAuICcgPGxhYmVsIGZvcj0icmVzdG9yZV9wb2ludCI+Jy5pZWRfcGx1Z2luX2dUeHQoJ3Jl c3RvcmVfcG9pbnQnKS4nPC9sYWJlbD4nKTsNCgkkZGVzY3JpcHRpb24gPWZJbnB1dCgndGV4 dCcsJ2Rlc2NyaXB0aW9uJywkZGVzY3JpcHRpb24sJ2VkaXQnLCcnLCcnLCRlZHdpZHRoLCcy Jyk7DQoJJGNvZGUgPSAnPHRleHRhcmVhIG5hbWU9ImNvZGUiIGlkPSJwbHVnaW5fZWRpdG9y IiByb3dzPSIzMCIgY29scz0iJy4kZWR3aWR0aC4nIiBjbGFzcz0iY29kZXByZXNzIHBocCIg bWF4bGVuZ3RoPSI2NTUzNSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjb2RlKS4nPC90ZXh0YXJl YT48ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsNCgkkaGVscCA9ICc8dGV4dGFy ZWEgbmFtZT0iaGVscCIgcm93cz0iMzAiIGNvbHM9IicuJGVkd2lkdGguJyIgY2xhc3M9Im1j ZUVkaXRvciIgbWF4bGVuZ3RoPSI2MzUzNSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRoZWxwKS4n PC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsNCgkkY3NzID0g Jzx0ZXh0YXJlYSBuYW1lPSJjc3MiIHJvd3M9IjE1IiBjb2xzPSInLiRlZHdpZHRoLiciIG1h eGxlbmd0aD0iMjAwMCI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjc3MpLic8L3RleHRhcmVhPjxk aXYgY2xhc3M9ImNoYXJzUmVtYWluIj48L2Rpdj4nOw0KCSRwbHVnc3RhdHVzID0gKCEkZWRp dGZpbGUpID8gJyYjMTYwOyYjMTYwOycuY2hlY2tib3goJ3N0YXR1cycsMSwkc3RhdHVzLCAn Jywnc3RhdHVzJykuICcgPGxhYmVsIGZvcj0ic3RhdHVzIj4nLmllZF9wbHVnaW5fZ1R4dCgn ZW5hYmxlJykuJzwvbGFiZWw+JyA6ICcnOw0KCSRwbHVndHlwZSA9IHJhZGlvKCd0eXBlJyww LCgoJHR5cGU9PTApPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8wJykuIiAiDQoJCS4g cmFkaW8oJ3R5cGUnLDEsKCgkdHlwZT09MSk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCd0eXBl XzEnKS4iICINCgkJLiByYWRpbygndHlwZScsMiwoKCR0eXBlPT0yKT8xOjApKS5pZWRfcGx1 Z2luX2dUeHQoJ3R5cGVfMicpLiIgIg0KCQkuIHJhZGlvKCd0eXBlJywzLCgoJHR5cGU9PTMp PzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8zJyk7DQoJJHBsdWdvcmRlciA9IHNlbGVj dElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAsIDApOw0KDQoJ JHN1YiA9IGZJbnB1dCgnc3VibWl0JywnJyxnVHh0KCdzYXZlJyksJ3B1Ymxpc2gnKTsNCgly ZXR1cm4gZm9ybShzdGFydFRhYmxlKCdlZGl0JykNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJz cDsnKSAuIHRkKCRzdWIgLiAkdmhlbHBsaW5rZnVsbCkpDQoJLiB0ciggZkxhYmVsQ2VsbCgg J3BsdWdpbicgKSAuIHRkKCRuZXduYW1lIC4gJHBsdWdzdGF0dXMgLiAoIChpc3NldCgkZmls ZW5hbWUpKSA/IHRhZygnJiMxNjA7JiMxNjA7KCcuJGZpbGVuYW1lLicpJywnc3BhbicsJyBz dHlsZT0iY29sb3I6Z3JheTsiJykuaElucHV0KCdmaWxlbmFtZScsJGZpbGVuYW1lKSA6ICcn ICkgKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ3BsdWdpbl9jb2Rl JykgKSAuIHRkKCRjb2RlKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQo J3R5cGUnKSApIC4gdGQoJHBsdWd0eXBlKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1 Z2luX2dUeHQoJ2xvYWRfb3JkZXInKSApIC4gdGQoJHBsdWdvcmRlci4nJiMxNjA7JiMxNjA7 Jy5pZWRfcGx1Z2luX2dUeHQoJ2xvYWRfb3JkZXJfaGVscCcpKSkNCgkuIHRyKCBmTGFiZWxD ZWxsKCAndmVyc2lvbicgKSAuIHRkKCR2ZXJzaW9uKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCAn YXV0aG9yJyApIC4gdGQoJGF1dGhvcikpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ3dlYnNpdGUn ICkgLiB0ZCgkYXV0aG9yX3VyaSkpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ2Rlc2NyaXB0aW9u JyApIC4gdGQoJGRlc2NyaXB0aW9uKSkNCgkuIHRyKCB0ZGEoZ1R4dCgncGx1Z2luX2hlbHAn KSwgJyBjbGFzcz0ibm9saW5lIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2Fs LWFsaWduOiBtaWRkbGU7IicpIC4gdGQoJGhlbHApKQ0KCS4gdHIoIGZMYWJlbENlbGwoICdj c3MnICkgLiB0ZCgkY3NzKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRz dWIpKQ0KDQoJLiB0ciggdGRjcygnPGhyPicsMikpDQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5i c3A7JykgLiB0ZChpZWRfcGx1Z2luX2dUeHQoJ3V0aWxpdGllcycpLic6JykpDQoNCgkuIHRy KCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2NvZGVfZGlzdCcpICkgLiB0ZCgkZGlz dHJpYnV0aW9uKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzbGluaykp DQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ppcGxpbmspKQ0KCS4gdHIo IGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHNwaHBsaW5rKSkNCgkuIGVuZFRhYmxlKCkN CgkuIHNJbnB1dCgnaWVkX3BsdWdpbl9zYXZlJykNCgkuIGVJbnB1dCgnaWVkX3BsdWdpbl9j b21wb3NlcicpDQoJLiBoSW5wdXQoJ25hbWUnLCRuYW1lKSkJLiA8PDxFT0YNCjxzY3JpcHQg dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmpRdWVyeS5mbi5yZXNpemVoYW5kbGUgPSBmdW5j dGlvbihjdXJoKSB7DQoJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsNCgkJdmFyIG1l ID0galF1ZXJ5KHRoaXMpOw0KCQltZS5hbmltYXRlKHtoZWlnaHQ6IGN1cmh9KTsNCgkJbWUu YWZ0ZXIoDQoJCQlqUXVlcnkoJzxkaXYgY2xhc3M9InJlc2l6ZWhhbmRsZSI+LS0tICsgLS0t PC9kaXY+JykuYmluZCgibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgew0KCQkJCXZhciBoID0g bWUuaGVpZ2h0KCk7DQoJCQkJdmFyIHkgPSBlLmNsaWVudFk7DQoJCQkJdmFyIG1vdmVIYW5k bGVyID0gZnVuY3Rpb24oZSkgew0KCQkJCQltZS5oZWlnaHQoTWF0aC5tYXgoMjAsIGUuY2xp ZW50WSArIGggLSB5KSk7DQoJCQkJfTsNCgkJCQl2YXIgdXBIYW5kbGVyID0gZnVuY3Rpb24o ZSkgew0KCQkJCQlqUXVlcnkoImh0bWwiKS51bmJpbmQoIm1vdXNlbW92ZSIsbW92ZUhhbmRs ZXIpLnVuYmluZCgibW91c2V1cCIsdXBIYW5kbGVyKTsNCgkJCQkJbmV3aCA9IG1lLmhlaWdo dCgpOw0KCQkJCQlzZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnLCBuZXdoLCAzMCk7 DQoJCQkJfTsNCgkJCQlqUXVlcnkoImh0bWwiKS5iaW5kKCJtb3VzZW1vdmUiLCBtb3ZlSGFu ZGxlcikuYmluZCgibW91c2V1cCIsIHVwSGFuZGxlcik7DQoJCQl9KQ0KCQkpOw0KCX0pOw0K fQ0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWN1cmggPSBnZXRDb29raWUoJ2llZF9wbHVnaW5f ZWRoZWlnaHQnKTsNCgljdXJoID0gKGN1cmggPT0gbnVsbCkgPyAnNDgwJyA6IGN1cmg7DQoJ alF1ZXJ5KCIjcGx1Z2luX2VkaXRvciIpLnJlc2l6ZWhhbmRsZShwYXJzZUludChjdXJoKSk7 DQoJalF1ZXJ5KCd0ZXh0YXJlYVttYXhsZW5ndGhdJykua2V5dXAoZnVuY3Rpb24oKXsNCgkJ dmFyIG1heCA9IHBhcnNlSW50KGpRdWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSk7DQoJ CWlmKGpRdWVyeSh0aGlzKS52YWwoKS5sZW5ndGggPiBtYXgpew0KCQkJalF1ZXJ5KHRoaXMp LnZhbChqUXVlcnkodGhpcykudmFsKCkuc3Vic3RyKDAsIGpRdWVyeSh0aGlzKS5hdHRyKCdt YXhsZW5ndGgnKSkpOw0KCQl9DQoJCWpRdWVyeSh0aGlzKS5wYXJlbnQoKS5maW5kKCcuY2hh cnNSZW1haW4nKS5odG1sKCdDaGFycyByZW1haW5pbmc6ICcrIChtYXggLSBqUXVlcnkodGhp cykudmFsKCkubGVuZ3RoKSk7DQoJfSk7DQoJalF1ZXJ5KCd0ZXh0YXJlYVttYXhsZW5ndGhd Jykua2V5dXAoKTsNCn0pOw0KPC9zY3JpcHQ+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0K LnJlc2l6ZWhhbmRsZSB7DQoJY3Vyc29yOnMtcmVzaXplOw0KCWZsb2F0OmxlZnQ7DQoJdGV4 dC1hbGlnbjpjZW50ZXI7DQoJZm9udC1zaXplOjFlbTsNCgl3aWR0aDo4MiU7DQoJcGFkZGlu ZzoycHggMCA2cHg7DQp9DQouY2hhcnNSZW1haW4gew0KCXRleHQtYWxpZ246cmlnaHQ7DQoJ Y29sb3I6Z3JheTsNCn0NCjwvc3R5bGU+DQpFT0Y7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIGllZF9wbHVnaW5fc2F2ZSgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFscywg JHByZWZzOw0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywnbmV3bmFtZScs J2ZpbGVuYW1lJywnY29kZScsJ2F1dGhvcicsJ2F1dGhvcl91cmknLCd2ZXJzaW9uJywnZGVz Y3JpcHRpb24nLCdoZWxwJywnY3NzJywnc3RhdHVzJywndHlwZScsJ2xvYWRfb3JkZXInLCdy ZW5hbWVfZmlsZScsJ3Jlc3RvcmVfcG9pbnQnKSkpKTsNCg0KCWxpc3QgKCRzdGFydF9jc3Ms ICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdp bl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCdd KTsNCgkkZXh0cmFNc2cgPSAkbmV3ZmlsZW5hbWUgPSAkbXNnMSA9ICRtc2cyID0gJyc7DQoJ JG5ld25hbWUgPSB0cmltKCRuZXduYW1lKTsNCg0KCWlmIChlbXB0eSgkbmV3bmFtZSkpIHsN CgkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ25hbWVfZmlyc3QnKTsNCgl9IGVsc2Ugew0K CQlpZiAoZW1wdHkoJGZpbGVuYW1lKSkgew0KCQkJJGhvdXQgPSBhcnJheSgpOw0KCQkJJGhv dXRbMF0gPSAkaGVscDsNCgkJCWlmICgkY3NzKSB7ICRob3V0WzFdID0gbi4kc3RhcnRfY3Nz Lm4uJGNzcy5uLiRlbmRfY3NzOyB9DQoJCQlzYWZlX3VwZGF0ZSgNCgkJCQkndHhwX3BsdWdp bicsDQoJCQkJIm5hbWU9JyIuJG5ld25hbWUuIicsDQoJCQkJc3RhdHVzID0gIi5pbnR2YWwo JHN0YXR1cykuIiwNCgkJCQl0eXBlID0gIi5pbnR2YWwoJHR5cGUpLiIsDQoJCQkJYXV0aG9y ID0gJyIuJGF1dGhvci4iJywNCgkJCQlhdXRob3JfdXJpID0gJyIuJGF1dGhvcl91cmkuIics DQoJCQkJdmVyc2lvbiA9ICciLiR2ZXJzaW9uLiInLA0KCQkJCWRlc2NyaXB0aW9uID0gJyIu JGRlc2NyaXB0aW9uLiInLA0KCQkJCWhlbHAgPSAnIi5qb2luKCcnLCRob3V0KS4iJywNCgkJ CQljb2RlID0gJyIuJGNvZGUuIicsDQoJCQkJIi4oKCRyZXN0b3JlX3BvaW50ID09IDEpPyAi Y29kZV9yZXN0b3JlID0gJyIuJGNvZGUuIicsIiA6ICcnKS4iDQoJCQkJbG9hZF9vcmRlciA9 ICIuJGxvYWRfb3JkZXIsDQoJCQkJIm5hbWUgPSAnIi4kbmFtZS4iJyIpOw0KCQkJJG1zZzEg PSBnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpOw0K CQl9IGVsc2Ugew0KCQkJJGRpciA9ICRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTOw0K CQkJaWYgKGZpbGVfZXhpc3RzKCRkaXIuJGZpbGVuYW1lKSkgew0KCQkJCSRmaWxlY29udGVu dCA9IGZpbGUoJGRpci4kZmlsZW5hbWUpOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoZW1wdHko JHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10pKSB7DQoJCQkJCSRmaWxlY29udGVudCA9ICcn Ow0KCQkJCQkkbXNnMiA9IGllZF9wbHVnaW5fZ1R4dCgnY2FjaGVfbm90X3NldCcpOw0KCQkJ CX0gZWxzZSB7DQoJCQkJCSRvcG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9v dXRwdXRfb3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0 X29yZGVyJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7DQoJ CQkJCSRoZWxwY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdoZWxwJywgYXJy YXkoJGhlbHAsICcgJykpOyAvLyBVc2UgYSBzcGFjZSB0byBmb3JjZSBhIENTUyBodW5rIGlu IHRoZSBmaWxlDQoJCQkJCSRjb2RlY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRl KCdjb2RlJywgJGNvZGUpOw0KCQkJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX2J1aWxk X3RlbXBsYXRlKCJwcmVhbWJsZSIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0 ZSgibmFtZSIsICRuZXduYW1lKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUo Imh0bWxfaGVscCIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidmVyc2lv biIsICR2ZXJzaW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1dGhv ciIsICRhdXRob3IpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiYXV0aG9y X3VyaSIsICRhdXRob3JfdXJpKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUo ImRlc2NyaXB0aW9uIiwgJGRlc2NyaXB0aW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRf dGVtcGxhdGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcikNCgkJCQkJCS5pZWRfcGx1Z2lu X2J1aWxkX3RlbXBsYXRlKCJ0eXBlIiwgJHR5cGUpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWls ZF90ZW1wbGF0ZSgiaW5jbHVkZSIpDQoJCQkJCQkuKCgkb3BvcmRlciA9PSAwKSA/ICRjb2Rl Y2h1bmsgOiAkaGVscGNodW5rKQ0KCQkJCQkJLigoJG9wb3JkZXIgPT0gMSkgPyAkY29kZWNo dW5rIDogJGhlbHBjaHVuaykNCgkJCQkJCS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJw b3N0YW1ibGUiKTsNCgkJCQkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ2VkaXRfbmV3Jyk7 DQoJCQkJfQ0KCQkJfQ0KDQoJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX21ha2VfYXJy YXkoJGZpbGVjb250ZW50KTsNCgkJCSRtZXRhdmFycyA9IGFycmF5KCJuYW1lIiA9PiAiJG5l d25hbWUiLA0KCQkJCQkJCQkJInZlcnNpb24iID0+ICIkdmVyc2lvbiIsDQoJCQkJCQkJCQki YXV0aG9yIiA9PiAiJGF1dGhvciIsDQoJCQkJCQkJCQkiYXV0aG9yX3VyaSIgPT4gIiRhdXRo b3JfdXJpIiwNCgkJCQkJCQkJCSJkZXNjcmlwdGlvbiIgPT4gIiRkZXNjcmlwdGlvbiIsDQoJ CQkJCQkJCQkidHlwZSIgPT4gIiR0eXBlIiwNCgkJCQkJCQkJCSJvcmRlciIgPT4gIiRsb2Fk X29yZGVyIiwNCgkJCQkJCQkpOw0KCQkJJGh1bmt2YXJzID0gYXJyYXkoIkNPREUiID0+IGRv U3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsJGNvZGUpKSwgLy8gbmV3bGluZSB3b3Jr YXJvdW5kDQoJCQkJCQkiSEVMUCIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJw0K JywkaGVscCkpLA0KCQkJCQkJIkNTUyIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbics Jw0KJywkY3NzKSksDQoJCQkJCQkJKTsNCgkJCWZvcmVhY2ggKCRtZXRhdmFycyBhcyAkdmFy bmFtZSA9PiAkdmFsdWUpIHsNCgkJCQlmb3IoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkZmls ZWNvbnRlbnQpOyAkaWR4KyspIHsNCgkJCQkJaWYgKHN0cnBvcygkZmlsZWNvbnRlbnRbJGlk eF0sICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddJykgPT09IDApIHsNCgkJCQkJCSRmaWxl Y29udGVudFskaWR4XSA9ICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddID0gJy5kb1F1b3Rl KCR2YWx1ZSkuJzsnOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlm b3JlYWNoICgkaHVua3ZhcnMgYXMgJHZhcm5hbWUgPT4gJGh1bmspIHsNCgkJCQlsaXN0ICgk c3RhcnRfZGVsaW0sICRlbmRfZGVsaW0pID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJHZh cm5hbWUsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2RsbV9zdGFydCddLCAkaWVkX3BsdWdpbl9n bG9iYWxzWydkbG1fZW5kJ10pOw0KCQkJCSRzdGFydCA9IGFycmF5X3NlYXJjaCgkc3RhcnRf ZGVsaW0sICRmaWxlY29udGVudCkgKyAxOw0KCQkJCSRlbmQgPSBhcnJheV9zZWFyY2goJGVu ZF9kZWxpbSwgJGZpbGVjb250ZW50KTsNCgkJCQlpZiAoaXNfbnVtZXJpYygkc3RhcnQpICYm IGlzX251bWVyaWMoJGVuZCkgJiYgJGVuZCA+PSAkc3RhcnQpIHsNCgkJCQkJYXJyYXlfc3Bs aWNlKCRmaWxlY29udGVudCwgJHN0YXJ0LCAkZW5kLSRzdGFydCwgJGh1bmspOw0KCQkJCX0N CgkJCX0NCgkJCSRmaWxlY29udGVudCA9IGltcGxvZGUoIlxuIiwgJGZpbGVjb250ZW50KTsN Cg0KCQkJaWYgKCRmaWxlY29udGVudCkgew0KCQkJCSRmaCA9IGZvcGVuKCRkaXIuJGZpbGVu YW1lLCAndysnKTsNCgkJCQlmd3JpdGUoJGZoLCAkZmlsZWNvbnRlbnQpOw0KCQkJCWZjbG9z ZSgkZmgpOw0KCQkJfQ0KCQkJJG1zZzEgPSAoZW1wdHkoJG1zZzEpKSA/IGdUeHQoJ3BsdWdp bl9zYXZlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXduYW1lKSkgOiAkbXNnMTsNCg0KCQkJ Ly8gTWFrZSBuZXcgZmlsZSBpZiByZXF1aXJlZA0KCQkJaWYgKCRyZW5hbWVfZmlsZSA9PSAx KSB7DQoJCQkJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5ld25hbWUsICR2ZXJz aW9uKTsNCgkJCQkkbmV3ZmlsZW5hbWUgPSAkZm5hbWVzWzJdOw0KCQkJCSRyZXMgPSByZW5h bWUoJGRpci4kZmlsZW5hbWUsICRkaXIuJG5ld2ZpbGVuYW1lKTsNCgkJCQkkZXh0cmFNc2cg PSAoJHJlcykgPyBpZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZWQnKSA6IGllZF9wbHVnaW5fZ1R4 dCgncmVuYW1lX2ZhaWxlZCcpOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkbXNnMikgew0KCQlp ZWRfcGx1Z2luX2xpc3QoJG1zZzIpOw0KCX0gZWxzZSB7DQoJCS8vIENoZWNrIHRoZSBwbHVn aW4gdHlwZSBtYXRjaGVzIHRoZSBjb2RlIHVzZWQNCgkJJGV4dHJhTXNnIC49IChpZWRfcGx1 Z2luX2FkbWluX2NoZWNrKCRjb2RlLCAkdHlwZSkpID8gJycgOiBzdHJvbmcoaWVkX3BsdWdp bl9nVHh0KCdjaGVja190eXBlJykpOw0KCQkkbWVzc2FnZSA9ICRtc2cxLmJyLiRleHRyYU1z ZzsNCgkJaWVkX3BsdWdpbl9lZGl0KCRtZXNzYWdlLCAkbmV3ZmlsZW5hbWUpOw0KCX0NCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9jcmVhdGVfbmV3KCkgew0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJykpKSk7DQoJJGZuYW1lID0gJyc7DQoJ aWYgKCRuYW1lPT0nJykgew0KCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3BsdWdpbl9nVHh0KCdu YW1lX2ZpcnN0JykpOw0KCQlyZXR1cm47DQoJfQ0KCWlmIChzdHJwb3MoJG5hbWUsICIucGhw IikgIT09IGZhbHNlKSB7DQoJCSRmbmFtZSA9ICRuYW1lOw0KCQkkbmFtZSA9IGJhc2VuYW1l KCRuYW1lLCAiLnBocCIpOw0KCX0NCgkkZXhpc3RzID0gZmV0Y2goJ25hbWUnLCd0eHBfcGx1 Z2luJywnbmFtZScsJG5hbWUpOw0KCWlmICghJGV4aXN0cykgew0KCQlpZiAoJGZuYW1lKSB7 DQoJCQkvLyBQdXQgcGx1Z2luIGluIGNhY2hlIGRpciBieSBmYWtpbmcgYSBQT1NUIHN1Ym1p c3Npb24gYW5kIHNhdmluZw0KCQkJJF9QT1NUWydmaWxlbmFtZSddID0gJGZuYW1lOw0KCQkJ JF9QT1NUWyduZXduYW1lJ10gPSAkbmFtZTsNCgkJCSRfUE9TVFsnc3RhdHVzJ10gPSAwOw0K CQkJJF9QT1NUWyd0eXBlJ10gPSAwOw0KCQkJJF9QT1NUWyd2ZXJzaW9uJ10gPSAnMC4xJzsN CgkJCSRfUE9TVFsnbG9hZF9vcmRlciddID0gNTsNCgkJCWllZF9wbHVnaW5fc2F2ZSgpOw0K CQl9IGVsc2Ugew0KCQkJc2FmZV9pbnNlcnQoInR4cF9wbHVnaW4iLCAiDQoJCQkJbmFtZT0n JG5hbWUnLA0KCQkJCXN0YXR1cz0wLA0KCQkJCXR5cGU9MCwNCgkJCQl2ZXJzaW9uPScwLjEn LA0KCQkJCWxvYWRfb3JkZXI9NSwNCgkJCQlkZXNjcmlwdGlvbj0nJywNCgkJCQloZWxwPScn LA0KCQkJCWNvZGU9JycsDQoJCQkJY29kZV9yZXN0b3JlPScnDQoJCQkiKTsNCgkJCXBhZ2V0 b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksIGllZF9wbHVnaW5fZ1R4dCgnZWRpdF9uZXcnKSk7 DQoJCQllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3JtKCRuYW1lKTsNCgkJfQ0KCX0gZWxzZSB7 DQoJCWllZF9wbHVnaW5fbGlzdChnVHh0KCdwbHVnaW4nKS4nIDxzdHJvbmc+Jy4kbmFtZS4n PC9zdHJvbmc+ICcuZ1R4dCgnYWxyZWFkeV9leGlzdHMnKSk7DQoJfQ0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSgpIHsNCglnbG9iYWwgJHBy ZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCWlmIChncHMoJ25hbWUnKSkgew0KCQkkbmFt ZSA9IGdwcygnbmFtZScpOw0KCQkkcnMgPSBzYWZlX3JvdygiZGVzY3JpcHRpb24sIGF1dGhv ciwgYXV0aG9yX3VyaSwgdmVyc2lvbiwgY29kZSwgaGVscCwgdHlwZSwgbG9hZF9vcmRlciIs ICJ0eHBfcGx1Z2luIiwgIm5hbWU9JyRuYW1lJyIpOw0KCQlleHRyYWN0KCRycyk7DQoNCgkJ bGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygk aGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0g ZWxzZWlmIChncHMoJ2ZpbGVuYW1lJykpIHsNCgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRf ZmlsZSgkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOw0K CQlleHRyYWN0KCRwbHVnaW4pOw0KCX0NCg0KCSR6aXAgPSBncHMoJ3ppcCcpOw0KCWlmIChn cHMoJ3RyaW0nKT09MSkgew0KCQkkY29kZT1leHBsb2RlKCJcclxuIiwkY29kZSk7DQoJCSRj b2RlPWFycmF5X21hcCgndHJpbScsJGNvZGUpOw0KCQkkY29kZT1pbXBsb2RlKCJcclxuIiwk Y29kZSk7DQoJfQ0KDQoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdp bl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCdd LCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOw0KCSRmbmFtZXMgPSBpZWRfcGx1 Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbik7DQoNCgloZWFkZXIoIkNvbnRlbnQtdHlw ZTogdGV4dC9wbGFpbiIpOw0KCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNo bWVudDsgZmlsZW5hbWU9JyAuICgoJHppcCkgPyAkZm5hbWVzWzFdIDogJGZuYW1lc1swXSkp Ow0KDQoJJHR5cGVzID0gYXJyYXkoICdDbGllbnQgc2lkZScgLCAnQWRtaW4vQ2xpZW50IHNp ZGUnICwgJ0xpYnJhcnknICwgJ0FkbWluIHNpZGUnKTsNCgkkcGx1Z2luWyduYW1lJ10gPSAk bmFtZTsNCgkkcGx1Z2luWydhdXRob3InXSA9ICRhdXRob3I7DQoJJHBsdWdpblsnYXV0aG9y X3VyaSddID0gJGF1dGhvcl91cmk7DQoJJHBsdWdpblsndmVyc2lvbiddID0gJHZlcnNpb247 DQoJJHBsdWdpblsnZGVzY3JpcHRpb24nXSA9ICRkZXNjcmlwdGlvbjsNCgkkcGx1Z2luWydj b2RlJ10gPSAkY29kZTsNCgkkcGx1Z2luWyd0eXBlJ10gPSAkdHlwZTsNCgkkcGx1Z2luWydv cmRlciddID0gJGxvYWRfb3JkZXI7DQovLwkkcGx1Z2luWydhbGxvd19odG1sX2hlbHAnXSA9 IHRydWU7DQovLwkkcGx1Z2luWydoZWxwX3JhdyddID0gJGhlbHAuJHN0YXJ0X2Nzcy4kY3Nz LiRlbmRfY3NzOw0KCSRwbHVnaW5bJ2hlbHAnXSA9IGllZF9wbHVnaW5fdGV4dGlsZSgkbmFt ZSwgJGhlbHAsICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsNCgkkcGx1Z2luWydtZDUn XSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7DQoNCgllY2hvICcjIE5hbWU6ICcuJG5hbWUu JyB2Jy4kdmVyc2lvbi4nICcuKCgkemlwKSA/ICIoY29tcHJlc3NlZCkiIDogIiIpLicNCiMg VHlwZTogJy4kdHlwZXNbJHR5cGVdLicgcGx1Z2luDQojICcuJGRlc2NyaXB0aW9uLicNCiMg QXV0aG9yOiAnLiRhdXRob3IuJw0KIyBVUkw6ICcuJGF1dGhvcl91cmkuJw0KIyBSZWNvbW1l bmRlZCBsb2FkIG9yZGVyOiAnLiRsb2FkX29yZGVyLicNCg0KIyAuLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4N CiMgVGhpcyBpcyBhIHBsdWdpbiBmb3IgVGV4dHBhdHRlcm4gLSBodHRwOi8vdGV4dHBhdHRl cm4uY29tLw0KIyBUbyBpbnN0YWxsOiB0ZXh0cGF0dGVybiA+IGFkbWluID4gcGx1Z2lucw0K IyBQYXN0ZSB0aGUgZm9sbG93aW5nIHRleHQgaW50byB0aGUgXCdJbnN0YWxsIHBsdWdpblwn IGJveDoNCiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCicuKCgkemlwKSA/IGNodW5rX3NwbGl0KGJh c2U2NF9lbmNvZGUoZ3plbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKSksIDcyKSA6IGNodW5r X3NwbGl0KGJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKSwgNzIpKTsNCg0KCWRp ZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfcGhw X2ZpbGUoKSB7DQoJZ2xvYmFsICRwcmVmczsNCglpZiAoZ3BzKCduYW1lJykpIHsNCgkJJG5h bWUgPSBncHMoJ25hbWUnKTsNCgkJJHJzID0gc2FmZV9yb3coImRlc2NyaXB0aW9uLCBhdXRo b3IsIGF1dGhvcl91cmksIHZlcnNpb24sIGNvZGUsIGhlbHAsIHR5cGUsIGxvYWRfb3JkZXIi LCAidHhwX3BsdWdpbiIsICJuYW1lPSckbmFtZSciKTsNCgkJZXh0cmFjdCgkcnMpOw0KDQoJ CWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmso JGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsNCgl9 IGVsc2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7DQoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFk X2ZpbGUoJHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuZ3BzKCdmaWxlbmFtZScpKTsN CgkJZXh0cmFjdCgkcGx1Z2luKTsNCgl9DQoNCgkkb3BvcmRlciA9IChpc3NldCgkcHJlZnNb J2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10pICYmIGlzX251bWVyaWMoJHByZWZzWydpZWRf cGx1Z2luX291dHB1dF9vcmRlciddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29y ZGVyJ10gOiAwOw0KCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVy c2lvbik7DQoNCgloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9waHAiKTsNCgloZWFkZXIo J0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScgLiRmbmFtZXNb Ml0pOw0KDQoJJGhlbHBjaHVuayA9IGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoJ2hlbHAn LCBhcnJheSgkaGVscCwgJGNzcykpOw0KCSRjb2RlY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxk X3RlbXBsYXRlKCdjb2RlJywgc3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJGNvZGUpKTsNCg0K CWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgicHJlYW1ibGUiKTsNCgllY2hvIGll ZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoIm5hbWUiLCAkbmFtZSk7DQoJZWNobyBpZWRfcGx1 Z2luX2J1aWxkX3RlbXBsYXRlKCJodG1sX2hlbHAiKTsNCgllY2hvIGllZF9wbHVnaW5fYnVp bGRfdGVtcGxhdGUoInZlcnNpb24iLCAkdmVyc2lvbik7DQoJZWNobyBpZWRfcGx1Z2luX2J1 aWxkX3RlbXBsYXRlKCJhdXRob3IiLCAkYXV0aG9yKTsNCgllY2hvIGllZF9wbHVnaW5fYnVp bGRfdGVtcGxhdGUoImF1dGhvcl91cmkiLCAkYXV0aG9yX3VyaSk7DQoJZWNobyBpZWRfcGx1 Z2luX2J1aWxkX3RlbXBsYXRlKCJkZXNjcmlwdGlvbiIsICRkZXNjcmlwdGlvbik7DQoJZWNo byBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJsb2FkX29yZGVyIiwgJGxvYWRfb3JkZXIp Ow0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidHlwZSIsICR0eXBlKTsNCgll Y2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImluY2x1ZGUiKTsNCgllY2hvICgoJG9w b3JkZXIgPT0gMCkgPyAkY29kZWNodW5rIDogJGhlbHBjaHVuayk7DQoJZWNobyAoKCRvcG9y ZGVyID09IDEpID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspOw0KCWVjaG8gaWVkX3BsdWdp bl9idWlsZF90ZW1wbGF0ZSgicG9zdGFtYmxlIik7DQoNCglkaWUoKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgkcHJ0LCAkdmFsPScn KSB7DQoJJGNzcyA9ICRoZWxwID0gJyc7DQoJaWYgKGlzX2FycmF5KCR2YWwpKSB7DQoJCSRo ZWxwID0gJHZhbFswXTsNCgkJJGNzcyA9IGlzc2V0KCR2YWxbMV0pID8gJHZhbFsxXSA6ICcn Ow0KCQkkdmFsID0gJyc7DQoJfQ0KCSR0ZW1wbGF0ZSA9IGFycmF5KA0KCQkicHJlYW1ibGUi ID0+ICc8P3BocCcubg0KCQkJCQkJLicvLyBUaGlzIGlzIGEgUExVR0lOIFRFTVBMQVRFLicu bg0KCQkJCQkJLicvLyBDb3B5IHRoaXMgZmlsZSB0byBhIG5ldyBuYW1lIGxpa2UgYWJjX215 cGx1Z2luLnBocC4gIEVkaXQgdGhlIGNvZGUsIHRoZW4nLm4NCgkJCQkJCS4nLy8gcnVuIHRo aXMgZmlsZSBhdCB0aGUgY29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRp c3RyaWJ1dGlvbjonLm4NCgkJCQkJCS4nLy8gJCBwaHAgYWJjX215cGx1Z2luLnBocCA+IGFi Y19teXBsdWdpbi0wLjEudHh0Jy5uLm4sDQoJCSJuYW1lIiA9PiAnLy8gUGx1Z2luIG5hbWUg aXMgb3B0aW9uYWwuICBJZiB1bnNldCwgaXQgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUg Y3VycmVudCcubg0KCQkJCQkJLicvLyBmaWxlIG5hbWUuIFVuY29tbWVudCBhbmQgZWRpdCB0 aGlzIGxpbmUgdG8gb3ZlcnJpZGU6Jy5uDQoJCQkJCQkuJyRwbHVnaW5bXCduYW1lXCddID0g Jy5kb1F1b3RlKCR2YWwpLic7Jy5uLm4sDQoJCSJodG1sX2hlbHAiID0+ICcvLyAwID0gUGx1 Z2luIGhlbHAgaXMgaW4gVGV4dGlsZSBmb3JtYXQsIG5vIHJhdyBIVE1MIGFsbG93ZWQgKGRl ZmF1bHQpLicubg0KCQkJCQkJLicvLyAxID0gUGx1Z2luIGhlbHAgaXMgaW4gcmF3IEhUTUwu ICBOb3QgcmVjb21tZW5kZWQuJy5uDQoJCQkJCQkuJyMgJHBsdWdpbltcJ2FsbG93X2h0bWxf aGVscFwnXSA9IDE7Jy5uLm4sDQoJCSJ2ZXJzaW9uIiA9PiAnJHBsdWdpbltcJ3ZlcnNpb25c J10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4sDQoJCSJhdXRob3IiID0+ICckcGx1Z2luW1wn YXV0aG9yXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLA0KCQkiYXV0aG9yX3VyaSIgPT4g JyRwbHVnaW5bXCdhdXRob3JfdXJpXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLA0KCQki ZGVzY3JpcHRpb24iID0+ICckcGx1Z2luW1wnZGVzY3JpcHRpb25cJ10gPSAnLmRvUXVvdGUo JHZhbCkuJzsnLm4ubiwNCgkJImxvYWRfb3JkZXIiID0+ICcvLyBQbHVnaW4gbG9hZCBvcmRl cjonLm4NCgkJCQkJCS4nLy8gVGhlIGRlZmF1bHQgdmFsdWUgb2YgNSB3b3VsZCBmaXQgbW9z dCBwbHVnaW5zLCB3aGlsZSBmb3IgaW5zdGFuY2UgY29tbWVudCBzcGFtIGV2YWx1YXRvcnMg b3IgVVJMIHJlZGlyZWN0b3JzJy5uDQoJCQkJCQkuJy8vIHdvdWxkIHByb2JhYmx5IHdhbnQg dG8gcnVuIGVhcmxpZXIgKDEuLi40KSB0byBwcmVwYXJlIHRoZSBlbnZpcm9ubWVudCBmb3Ig ZXZlcnl0aGluZyBlbHNlIHRoYXQgZm9sbG93cy4nLm4NCgkJCQkJCS4nLy8gT3JkZXJzIDYu Li45IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBwbHVnaW5zIHdoaWNoIHdvdWxkIHdvcmsg bGF0ZS4gVGhpcyBvcmRlciBpcyB1c2VyLW92ZXJyaWRlYWJsZS4nLm4NCgkJCQkJCS4nJHBs dWdpbltcJ29yZGVyXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLm4sDQoJCSJ0eXBlIiA9 PiAnLy8gUGx1Z2luIFwndHlwZVwnIGRlZmluZXMgd2hlcmUgdGhlIHBsdWdpbiBpcyBsb2Fk ZWQnLm4NCgkJCQkJCS4nLy8gMCA9IHB1YmxpYyAgICAgICA6IG9ubHkgb24gdGhlIHB1Ymxp YyBzaWRlIG9mIHRoZSB3ZWJzaXRlIChkZWZhdWx0KScubg0KCQkJCQkJLicvLyAxID0gcHVi bGljK2FkbWluIDogb24gYm90aCB0aGUgcHVibGljIGFuZCBhZG1pbiBzaWRlJy5uDQoJCQkJ CQkuJy8vIDIgPSBsaWJyYXJ5ICAgICAgOiBvbmx5IHdoZW4gaW5jbHVkZV9wbHVnaW4oKSBv ciByZXF1aXJlX3BsdWdpbigpIGlzIGNhbGxlZCcubg0KCQkJCQkJLicvLyAzID0gYWRtaW4g ICAgICAgIDogb25seSBvbiB0aGUgYWRtaW4gc2lkZScubg0KCQkJCQkJLickcGx1Z2luW1wn dHlwZVwnXSA9ICcuZG9RdW90ZSgkdmFsKS4nOycubi5uLA0KCQkiaW5jbHVkZSIgPT4gJ2lm ICghZGVmaW5lZChcJ3R4cGludGVyZmFjZVwnKSknLm4NCgkJCQkJCS4nICAgICAgICBAaW5j bHVkZV9vbmNlKFwnemVtX3RwbC5waHBcJyk7Jy5uLm4sDQoJCSJoZWxwIiA9PiAnaWYgKDAp IHsnLm4NCgkJCQkJCS4nPz4nLm4NCgkJCQkJCS4gKCgkY3NzKSA/ICc8IS0tJy5uDQoJCQkJ CQkuJyMgLS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tJy5uDQoJCQkJCQkuJGNzcy5uDQoJCQkJ CQkuJyMgLS0tIEVORCBQTFVHSU4gQ1NTIC0tLScubg0KCQkJCQkJLictLT4nLm4gOiAnJykN CgkJCQkJCS4nPCEtLScubg0KCQkJCQkJLicjIC0tLSBCRUdJTiBQTFVHSU4gSEVMUCAtLS0n Lm4NCgkJCQkJCS4kaGVscC5uDQoJCQkJCQkuJyMgLS0tIEVORCBQTFVHSU4gSEVMUCAtLS0n Lm4NCgkJCQkJCS4nLS0+Jy5uDQoJCQkJCQkuJzw/cGhwJy5uDQoJCQkJCQkuJ30nLm4sDQoJ CSJjb2RlIiA9PiAnIyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uDQoJCQkJCQkuJHZh bC5uDQoJCQkJCQkuJyMgLS0tIEVORCBQTFVHSU4gQ09ERSAtLS0nLm4sDQoJCSJwb3N0YW1i bGUiID0+ICc/PicsDQoJKTsNCg0KCXJldHVybiAoYXJyYXlfa2V5X2V4aXN0cygkcHJ0LCAk dGVtcGxhdGUpID8gJHRlbXBsYXRlWyRwcnRdIDogJycpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBpZWRfcGx1Z2luX3VwbG9hZCgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fZ2xv YmFsczsNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2Vf bWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRf cGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoNCglpZiAoISRfRklMRVNbJ3RoZWZpbGUn XVsndG1wX25hbWUnXSkgew0KCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3BsdWdpbl9nVHh0KCdj aG9vc2VfZmlsZScpKTtyZXR1cm47DQoJfQ0KCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRf ZmlsZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pOw0KLy8JJG5ld25hbWUgPSAo ZW1wdHkoJHBsdWdpblsnbmFtZSddKSkgPyBiYXNlbmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11b J25hbWUnXSwgJy5waHAnKSA6ICRwbHVnaW5bJ25hbWUnXTsNCgkkbmV3bmFtZSA9ICRwbHVn aW5bJ25hbWUnXTsNCglpZiAoZ3BzKCduYW1lJykgYW5kIGdwcygnbmFtZScpIT0neHh4X3h4 eHh4eCcpIHsNCgkJJG5ld25hbWU9Z3BzKCduYW1lJyk7DQoJfQ0KCWlmIChlbXB0eSgkcGx1 Z2luWydjb2RlJ10pKSB7DQoJCSRwbHVnaW5bJ2NvZGUnXSA9IGltcGxvZGUgKCIiLCBmaWxl KCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkpOw0KCX0NCg0KCWlmIChNQUdJQ19R VU9URVNfR1BDKSB7DQoJCSRwbHVnaW4gPSBkb1N0cmlwKCRwbHVnaW4pOw0KCX0NCglleHRy YWN0KGRvU2xhc2goJHBsdWdpbikpOw0KCSRtZDU9bWQ1KCRjb2RlKTsNCgkkdmVyc2lvbiA9 IChlbXB0eSgkdmVyc2lvbikpID8gIjAuMSIgOiAkdmVyc2lvbjsNCgkkaGVscCA9ICRoZWxw LigoJGNzcykgPyBuLiRzdGFydF9jc3Mubi4kY3NzLm4uJGVuZF9jc3MgOiAnJyk7DQoJJGV4 aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuZXduYW1lKTsNCglp ZiAoJGV4aXN0cykgew0KCQkkc3RhdHVzID0gZmV0Y2goJ3N0YXR1cycsJ3R4cF9wbHVnaW4n LCduYW1lJywkbmV3bmFtZSk7DQoJCSRycyA9IHNhZmVfdXBkYXRlKA0KCQkJInR4cF9wbHVn aW4iLA0KCQkJInN0YXR1cyA9ICIuaW50dmFsKCRzdGF0dXMpLiIsDQoJCQl0eXBlID0gIi5p bnR2YWwoJHR5cGUpLiIsDQoJCQlhdXRob3IgPSAnJGF1dGhvcicsDQoJCQlhdXRob3JfdXJp ID0gJyRhdXRob3JfdXJpJywNCgkJCXZlcnNpb24gPSAnJHZlcnNpb24nLA0KCQkJZGVzY3Jp cHRpb24gPSAnJGRlc2NyaXB0aW9uJywNCgkJCWhlbHAgPSAnJGhlbHAnLA0KCQkJY29kZSA9 ICckY29kZScsDQoJCQljb2RlX3Jlc3RvcmUgPSAnJGNvZGUnLA0KCQkJY29kZV9tZDUgPSAn JG1kNScsDQoJCQlsb2FkX29yZGVyID0gIi5pbnR2YWwoJGxvYWRfb3JkZXIpLA0KCQkJIm5h bWUgPSAnJG5ld25hbWUnIg0KCQkpOw0KCX0gZWxzZSB7DQoJCSRycyA9IHNhZmVfaW5zZXJ0 KA0KCQkJInR4cF9wbHVnaW4iLA0KCQkJIm5hbWUgPSAnJG5ld25hbWUnLA0KCQkJc3RhdHVz ID0gMCwNCgkJCXR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwNCgkJCWF1dGhvciA9ICckYXV0 aG9yJywNCgkJCWF1dGhvcl91cmkgPSAnJGF1dGhvcl91cmknLA0KCQkJdmVyc2lvbiA9ICck dmVyc2lvbicsDQoJCQlkZXNjcmlwdGlvbiA9ICckZGVzY3JpcHRpb24nLA0KCQkJaGVscCA9 ICckaGVscCcsDQoJCQljb2RlID0gJyRjb2RlJywNCgkJCWNvZGVfcmVzdG9yZSA9ICckY29k ZScsDQoJCQljb2RlX21kNSA9ICckbWQ1JywNCgkJCWxvYWRfb3JkZXIgPSAiLmludHZhbCgk bG9hZF9vcmRlcikNCgkJKTsNCgl9DQoNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycp LCBtZXNzZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUsKCRleGlzdHMpPyd1cGRhdGVkJzondXBs b2FkZWQnKSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFtZSk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVhZF9maWxlKCRmaWxlcGF0aCkg ew0KCSRjb250ZW50ID0gZmlsZSgkZmlsZXBhdGgpOw0KCSRqdXN0ZmlsZSA9IGJhc2VuYW1l KCRmaWxlcGF0aCk7DQoJJGV4dCA9IGFycmF5X3BvcChleHBsb2RlICgnLicsJGp1c3RmaWxl KSk7DQoJJGV4dCA9ICgkZXh0PT0kanVzdGZpbGUpID8gJycgOiAnLicuJGV4dDsgLy8gT25s eSBhc3NpZ24gYW4gZXh0ZW5zaW9uIGlmIG9uZSBleGlzdHMNCgkkc291cmNlX2xpbmVzID0g Y291bnQoJGNvbnRlbnQpOw0KCSRtZXRhZGF0YSA9IGFycmF5KA0KCQkJCQkJJ25hbWUnID0+ ICcnLA0KCQkJCQkJJ3ZlcnNpb24nID0+ICcnLA0KCQkJCQkJJ3JldmlzaW9uJyA9PiAnJywN CgkJCQkJCSdhdXRob3InID0+ICcnLA0KCQkJCQkJJ2F1dGhvcl91cmknID0+ICcnLA0KCQkJ CQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQkJCSdvcmRlcicgPT4gJzUnLA0KCQkJCQkJ J3R5cGUnID0+ICcnLA0KCQkJCQkpOw0KCWZvciAoJGlkeD0wOyAkaWR4IDwgJHNvdXJjZV9s aW5lczsgJGlkeCsrKSB7DQoJCSRjb250ZW50WyRpZHhdID0gcnRyaW0oJGNvbnRlbnRbJGlk eF0pOw0KCQkvLyBCb21iIG91dCBpZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWZpbml0 aW9uIGFyZWENCgkJaWYgKHN0cnBvcyggJGNvbnRlbnRbJGlkeF0sICdpZiAoIWRlZmluZWQn ICkgPT09IDApIHsNCgkJCWJyZWFrOw0KCQl9DQoJCWlmIChzdHJwb3MoJGNvbnRlbnRbJGlk eF0sICckcGx1Z2luWycpID09PSAwKSB7DQoJCQkvLyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJs ZSBzbyBleHRyYWN0IGl0DQoJCQkkcGFydHMgPSBleHBsb2RlKCIgPSAiLCAkY29udGVudFsk aWR4XSk7DQoJCQkkcGFydHNbMF0gPSBzdHJfcmVwbGFjZSgiJyIsICIiLCAkcGFydHNbMF0p OyAvLyBNYWtlIHRoZSBtYXRjaCBlYXNpZXIhDQoJCQkkcGFydHNbMV0gPSBzdHJfcmVwbGFj ZSgiOyIsICIiLCAkcGFydHNbMV0pOyAvLyBEaXR0bw0KCQkJcHJlZ19tYXRjaCgiL3BsdWdp blxbKC4qKVxdLyIsICRwYXJ0c1swXSwgJHZhcik7IC8vIEV4dHJhY3QganVzdCB0aGUgdmFy aWFibGUgbmFtZQ0KCQkJaWYgKGlzX251bWVyaWMoJHBhcnRzWzFdKSkgew0KCQkJCSRwYXJ0 c1sxXSA9ICInIi4kcGFydHNbMV0uIiciOw0KCQkJfQ0KCQkJcHJlZ19tYXRjaCgiLy4qJygu KiknLiovIiwgJHBhcnRzWzFdLCAkdmFsKTsgLy8gUmVtb3ZlIGFueXRoaW5nIG91dHNpZGUg dGhlIHF1b3RlcyAoZS5nLiAkcmV2aXNpb24pDQoJCQlpZiAoJHZhclsxXSA9PSAncmV2aXNp b24nICYmICFlbXB0eSgkdmFsWzFdKSkgew0KCQkJCSRyZXZwYXJ0cyA9IGV4cGxvZGUoJyAn LCB0cmltKCR2YWxbMV0sICckICcpKTsNCgkJCQkkdmFsWzFdID0gJHJldnBhcnRzW2NvdW50 KCRyZXZwYXJ0cyktMV07DQoJCQkJJHZhbFsxXSA9IChlbXB0eSgkdmFsWzFdKSkgPyAnJyA6 ICcuJyAuJHZhbFsxXTsNCgkJCX0NCgkJCSRtZXRhZGF0YVskdmFyWzFdXSA9ICR2YWxbMV07 DQoJCX0NCgl9DQoNCgkkbWV0YWRhdGFbJ25hbWUnXSA9IChlbXB0eSgkbWV0YWRhdGFbJ25h bWUnXSkpID8gYmFzZW5hbWUoJGp1c3RmaWxlLCAkZXh0KSA6ICRtZXRhZGF0YVsnbmFtZSdd Ow0KCSRtZXRhZGF0YVsnbG9hZF9vcmRlciddID0gJG1ldGFkYXRhWydvcmRlciddOw0KCSRt ZXRhZGF0YVsndmVyc2lvbiddIC49ICRtZXRhZGF0YVsncmV2aXNpb24nXTsNCgkkbWV0YWRh dGFbJ2hlbHAnXSA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAnSEVMUCcp Ow0KCSRtZXRhZGF0YVsnY3NzJ10gID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRl bnQsICdDU1MnICk7DQoJJG1ldGFkYXRhWydjb2RlJ10gPSBpZWRfcGx1Z2luX2V4dHJhY3Rf aHVuaygkY29udGVudCwgJ0NPREUnKTsNCg0KCXJldHVybiAkbWV0YWRhdGE7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIHJpcHBlZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZlcidzIHplbV90 cGwgdGVtcGxhdGUNCmZ1bmN0aW9uIGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50 LCAkaHVuaywgJGNtbnQ9IiMiLCAkZGVsZXRlPWZhbHNlKSB7DQoJJGRsbSA9IGV4cGxvZGUo InwiLCAkY21udCk7DQoJJGRsbVN0YXJ0ID0gJGRsbVswXTsNCgkkZGxtRW5kID0gKGNvdW50 KCRkbG0pID4gMSkgPyAkZGxtWzFdIDogJyc7DQoJJGxpbmVzID0gaWVkX3BsdWdpbl9tYWtl X2FycmF5KCRjb250ZW50KTsNCg0KCWxpc3QgKCRzdGFydF9kZWxpbSwgJGVuZF9kZWxpbSkg PSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygkaHVuaywgJGRsbVN0YXJ0LCAkZGxtRW5kKTsN Cgkkc3RhcnQgPSBhcnJheV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkbGluZXMpICsgMTsNCgkk ZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRsaW5lcyk7DQoJJGV4dHJhY3RlZCA9 IGFycmF5KCk7DQoJaWYgKGNvdW50KCRsaW5lcykgPiAwICYmIGlzX251bWVyaWMoJHN0YXJ0 KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPiAkc3RhcnQpIHsNCgkJJGV4dHJhY3Rl ZCA9IGFycmF5X3NsaWNlKCRsaW5lcywgJHN0YXJ0LCAkZW5kLSRzdGFydCk7DQoJCSRsaW5l TnVtID0gY291bnQoJGV4dHJhY3RlZCktMTsNCgkJd2hpbGUgKCRsaW5lTnVtID4gMCAmJiB0 cmltKCRleHRyYWN0ZWRbJGxpbmVOdW0tLV0pID09ICIiKSB7DQoJCQlhcnJheV9wb3AoJGV4 dHJhY3RlZCk7DQoJCX0NCgkJd2hpbGUgKGNvdW50KCRleHRyYWN0ZWQpID4gMCAmJiB0cmlt KCRleHRyYWN0ZWRbMF0pID09ICIiKSB7DQoJCQlhcnJheV9zaGlmdCgkZXh0cmFjdGVkKTsN CgkJfQ0KCQlpZiAoJGRlbGV0ZSkgew0KCQkJJGNob3BwZWQgPSBhcnJheV9zcGxpY2UoJGxp bmVzLCAkc3RhcnQtMSwgJGVuZC0kc3RhcnQrMiwgIiIpOw0KCQl9DQoJfQ0KCSRyZW1haW5z ID0gJGxpbmVzOw0KCS8vIENoZWNrIGlmIHRoZSBDU1Mgc2VjdGlvbiBoYXMgPHN0eWxlPiB0 YWdzIGFyb3VuZCBpdDsgYWRkIHRoZW0gaWYgbm90DQoJaWYgKCRodW5rID09ICJDU1MiKSB7 DQoJCSRudW1yb3dzID0gY291bnQoJGV4dHJhY3RlZCk7DQoJCWlmICgkbnVtcm93cyA+IDEp IHsNCgkJCWlmIChzdHJwb3MoJGV4dHJhY3RlZFskbnVtcm93cy0xXSwgJzwvc3R5bGU+Jykg PT09IGZhbHNlKSB7DQoJCQkJJGV4dHJhY3RlZFtdID0gJzwvc3R5bGU+JzsNCgkJCX0NCgkJ CWlmIChzdHJwb3MoJGV4dHJhY3RlZFswXSwgJzxzdHlsZSAnKSA9PT0gZmFsc2UpIHsNCgkJ CQlhcnJheV91bnNoaWZ0KCRleHRyYWN0ZWQsICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicp Ow0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkZGVsZXRlKSB7DQoJCXJldHVybiBhcnJheSh0cmlt KGpvaW4oIlxuIiwgJGV4dHJhY3RlZCkpLCB0cmltKGpvaW4oIlxuIiwgJHJlbWFpbnMpKSk7 DQoJfSBlbHNlIHsNCgkJcmV0dXJuIHRyaW0oam9pbigiXG4iLCAkZXh0cmFjdGVkKSk7DQoJ fQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX21ha2VfYXJyYXkoJGFy cikgew0KCWlmICghaXNfYXJyYXkoJGFycikpIHsNCgkJJGFyciA9IGV4cGxvZGUoIlxuIiwg JGFycik7DQoJfQ0KCSRzb3VyY2VfbGluZXMgPSBjb3VudCgkYXJyKTsNCglmb3IgKCRpZHg9 MDsgJGlkeCA8ICRzb3VyY2VfbGluZXM7ICRpZHgrKykgew0KCQkkYXJyWyRpZHhdID0gcnRy aW0oJGFyclskaWR4XSk7DQoJfQ0KCXJldHVybiAkYXJyOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBpZWRfcGx1Z2luX21ha2VfbWFya2VycygkaHVuaywgJHN0YXJ0LCAkZW5kKSB7 DQoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7DQoJJHNtYXJrZXIgPSAkc3RhcnQgLiBz dHJfcmVwbGFjZSgiU0VDVElPTiIsICRodW5rLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydzdGFy dCddKSAuICgoJGVuZCk/JyAnLiRlbmQ6JycpOw0KCSRlbWFya2VyID0gJHN0YXJ0IC4gc3Ry X3JlcGxhY2UoIlNFQ1RJT04iLCAkaHVuaywgJGllZF9wbHVnaW5fZ2xvYmFsc1snZW5kJ10p IC4gKCgkZW5kKT8nICcuJGVuZDonJyk7DQoJcmV0dXJuIChhcnJheSgkc21hcmtlciwgJGVt YXJrZXIpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gcmlwcGVkIGFuZCBtb2RkZWQgZnJvbSBu ZXQtY2FydmVyJ3MgemVtX3RwbCB0ZW1wbGF0ZQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9hZG1p bl9jaGVjaygkY29kZWJsb2NrLCAkdHlwZSkgew0KCS8vIFNob3J0IGNpcmN1aXQgc2luY2Ug d2UncmUgb25seSBpbnRlcmVzdGVkIGluIGNsaWVudCBwbHVnaW5zDQoJaWYgKCR0eXBlICE9 ICcwJyB8fCBzdHJwb3MoJGNvZGVibG9jaywgJ3R4cGludGVyZmFjZScpPT09ZmFsc2UpIHsN CgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLy8gQmVsaWV2ZSBpdCBvciBub3QgdGhpcyBpcyBz ZXZlcmFsIG9yZGVycyBvZiBtYWduaXR1ZGUgcXVpY2tlciB0aGFuIGEgc2luZ2xlIHByZWdf bWF0Y2gNCgkkY2IgPSBzdHJfcmVwbGFjZShhcnJheSgnXHQnLCAnICcpLCAnJywgJGNvZGVi bG9jayk7DQoJJGNiID0gc3RyX3JlcGxhY2UoJz09PScsICc9PScsICRjYik7DQoJaWYgKHN0 cnBvcygkY2IsICd0eHBpbnRlcmZhY2U9PVwiYWRtaW4nKSkgcmV0dXJuIGZhbHNlOw0KCWlm IChzdHJwb3MoJGNiLCAidHhwaW50ZXJmYWNlPT1cJ2FkbWluIikpIHJldHVybiBmYWxzZTsN CglpZiAoc3RycG9zKCRjYiwgJ2FkbWluXCI9PXR4cGludGVyZmFjZScpKSByZXR1cm4gZmFs c2U7DQoJaWYgKHN0cnBvcygkY2IsICJhZG1pblwnPT10eHBpbnRlcmZhY2UiKSkgcmV0dXJu IGZhbHNlOw0KCWlmIChzdHJwb3MoJGNiLCAnYWRtaW5cIj09QHR4cGludGVyZmFjZScpKSBy ZXR1cm4gZmFsc2U7DQoJaWYgKHN0cnBvcygkY2IsICJhZG1pblwnPT1AdHhwaW50ZXJmYWNl IikpIHJldHVybiBmYWxzZTsNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2Rs bSwgJGVuZF9kbG0pIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJHRtcGRpciA9ICRobHBmaWxl ID0gJyc7DQoJJGNoYW5nZWQgPSB0cnVlOw0KCSRvdXQgPSBhcnJheSgpOw0KCWlmIChpc3Nl dCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJ10pICYmICFlbXB0eSgkcHJl ZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJ10pICYmIGlzX3dyaXRhYmxlKCRwcmVm c1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnXSkpIHsNCgkJJHRtcGRpciA9ICRwcmVm c1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnXTsNCgkJJGNhY2hlID0gYnVpbGRfZmls ZV9wYXRoKCR0bXBkaXIsICdpZWRfcGx1Z2luX2NvbXBvc2VyLmNhY2hlJyk7DQoJCWlmICgh ZmlsZV9leGlzdHMoJGNhY2hlKSkgew0KCQkJdG91Y2goJGNhY2hlKTsgLy8gQ3JlYXRlIGZp bGUgaWYgaXQgZG9lc24ndCBleGlzdA0KICAgICAgfQ0KCQkkcGx1Z3MgPSBwYXJzZV9pbmlf ZmlsZSgkY2FjaGUpOw0KDQoJCSRvbGRfbWQ1ID0gKGFycmF5X2tleV9leGlzdHMoJG5hbWUs ICRwbHVncykpID8gJHBsdWdzWyRuYW1lXSA6ICcnOw0KCQkkY3Vycl9tZDUgPSBtZDUoJGhl bHApOw0KCQkkaGxwZmlsZSA9IGJ1aWxkX2ZpbGVfcGF0aCgkdG1wZGlyLCAkbmFtZS4nX2hl bHAudHh0bCcpOw0KCQlpZiAoJG9sZF9tZDUgPT0gJGN1cnJfbWQ1KSB7DQoJCQkkb3V0WzBd ID0gZmlsZV9nZXRfY29udGVudHMoJGhscGZpbGUpOw0KCQkJJGNoYW5nZWQgPSBmYWxzZTsN CgkJfSBlbHNlIHsNCgkJCSRwbHVnc1skbmFtZV0gPSAkY3Vycl9tZDU7DQoJCQkkZmQgPSBm b3BlbigkY2FjaGUsICJ3Iik7DQoJCQlmb3JlYWNoICgkcGx1Z3MgYXMgJGlkeCA9PiAkdmFs KSB7DQoJCQkJZndyaXRlKCRmZCwgJGlkeC4nID0gJy4kdmFsLm4pOw0KCQkJfQ0KCQkJZmNs b3NlKCRmZCk7DQoJCX0NCiAgIH0NCg0KCWlmICghJG91dCkgew0KCQlAaW5jbHVkZV9vbmNl IHR4cGF0aC4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsNCgkJJG91dFswXSA9ICRoZWxwOw0K CQlpZiAoY2xhc3NfZXhpc3RzKCdUZXh0aWxlJykpIHsNCgkJCS8vIFRyeSBhbmQgYmUgYSBs aXR0bGUgbW9yZSBpbnRlbGxpZ2VudCBhYm91dCBhcHBseWluZyB0ZXh0aWxlIG9yIG5vdA0K CQkJJHJlID0gJy9oWzAtNl0oXCguKlwpKT9cLi8nOw0KCQkJaWYgKHByZWdfbWF0Y2goJHJl LCAkaGVscCkpIHsNCgkJCQkkdGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7DQoJCQkJJG91dFsw XSA9ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkaGVscCk7DQoJCQl9DQoJCX0NCgl9DQoNCglp ZiAoJHRtcGRpciAmJiAkY2hhbmdlZCkgew0KCQlpZiAoIWZpbGVfZXhpc3RzKCRobHBmaWxl KSkgew0KCQkJdG91Y2goJGhscGZpbGUpOw0KICAgICAJfQ0KCQkkZmQgPSBmb3BlbigkaGxw ZmlsZSwgInciKTsNCgkJZndyaXRlKCRmZCwgJG91dFswXSk7DQoJCWZjbG9zZSgkZmQpOw0K CX0NCg0KCS8vIFJlcGxhY2UgdGhlIHRyaXBsZSAnLS0tJyBpbiB0aGUgZGVsaW1pdGVycyBz byB0aGUgaGVscCBmaWxlIGNhbiB2YWxpZGF0ZQ0KCSRzdGFydF9kbG0gPSBzdHJfcmVwbGFj ZSgnLS0tJywgJyoqKicsICRzdGFydF9kbG0pOw0KCSRlbmRfZGxtID0gc3RyX3JlcGxhY2Uo Jy0tLScsICcqKionLCAkZW5kX2RsbSk7DQoJJG91dFsxXSA9ICgkY3NzKSA/ICJcbiRzdGFy dF9kbG1cbiRjc3NcbiRlbmRfZGxtXG4iIDogJyc7DQoJcmV0dXJuIHN1YnN0cihqb2luKCcn LCAkb3V0KSwgMCwgNjU1MzUpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfaW5z ZXJ0X2VkaXRvcnMoKSB7DQoJZ2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5fcHJlZnM7DQoJ JG91dCA9IGFycmF5KCk7DQoNCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIs YXJyYXlfa2V5cygkaWVkX3BsdWdpbl9wcmVmc1swXSkpKTsNCgkkcnMgPSBzYWZlX3Jvd3Mo J25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScp Ow0KCWlmIChjb3VudCgkcnMpID09IGNvdW50KCRpZWRfcGx1Z2luX3ByZWZzWzBdKSkgew0K CQkkZWQgPSBhcnJheSgpOw0KCQkkZWRbJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvciddXSA9 ICRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCddOw0KCQkkZWRbJHByZWZzWydpZWRf cGx1Z2luX2hlbHBfZWRpdG9yJ11dID0gJHByZWZzWydpZWRfcGx1Z2luX2hlbHBfZWRpdG9y X3BhdGgnXTsNCg0KCQlmb3JlYWNoICgkZWQgYXMgJGVkaXRvciA9PiAkZWRpdG9yX2Rpcikg ew0KCQkJc3dpdGNoICgkZWRpdG9yKSB7DQoJCQkJY2FzZSAidGlueV9tY2UiOg0KCQkJCQkk b3V0W10gPSA8PDxFT0YNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Iicu JGVkaXRvcl9kaXIuJy90aW55X21jZS5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRl eHQvamF2YXNjcmlwdCI+DQoJdGlueU1DRS5pbml0KHsNCgkJbW9kZSA6ICJzcGVjaWZpY190 ZXh0YXJlYXMiLA0KCQllZGl0b3Jfc2VsZWN0b3IgOiAibWNlRWRpdG9yIiwNCgkJdGhlbWVf YWR2YW5jZWRfdG9vbGJhcl9sb2NhdGlvbiA6ICJ0b3AiLA0KCQl0aGVtZV9hZHZhbmNlZF9i dXR0b25zMSA6ICJib2xkLGl0YWxpYyx1bmRlcmxpbmUsc3RyaWtldGhyb3VnaCxmb3JlY29s b3IsYmFja2NvbG9yLHJlbW92ZWZvcm1hdCxudW1saXN0LGJ1bGxpc3Qsb3V0ZGVudCxpbmRl bnQsanVzdGlmeWxlZnQsanVzdGlmeWNlbnRlcixqdXN0aWZ5cmlnaHQsanVzdGlmeWZ1bGwi LA0KCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMiA6ICJsaW5rLHVubGluayxzZXBhcmF0b3Is aWJyb3dzZXIsc2VwYXJhdG9yLHNlYXJjaCxyZXBsYWNlLHNlcGFyYXRvcixjdXQsY29weSxw YXN0ZSxzZXBhcmF0b3IsY29kZSxzZXBhcmF0b3IsZm9ybWF0c2VsZWN0IiwNCgkJdGhlbWVf YWR2YW5jZWRfYnV0dG9uczMgOiAiIg0KCX0pOw0KPC9zY3JpcHQ+Ow0KRU9GOw0KCQkJCQli cmVhazsNCgkJCQljYXNlICJlZGl0X2FyZWEiOg0KCQkJCQkkb3V0W10gPSA8PDxFT0YNCjxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRlZGl0b3JfZGlyL2VkaXRfYXJl YV9mdWxsLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4N CgkvLyBpbml0aWFsaXNhdGlvbg0KCWVkaXRBcmVhTG9hZGVyLmluaXQoew0KCQlpZDogInBs dWdpbl9lZGl0b3IiCS8vIGlkIG9mIHRoZSB0ZXh0YXJlYSB0byB0cmFuc2Zvcm0NCgkJLHN0 YXJ0X2hpZ2hsaWdodDogdHJ1ZQkvLyBpZiBzdGFydCB3aXRoIGhpZ2hsaWdodA0KCQksYWxs b3dfcmVzaXplOiAiYm90aCINCgkJLGFsbG93X3RvZ2dsZTogdHJ1ZQ0KCQksbGFuZ3VhZ2U6 ICJlbiINCgkJLHN5bnRheDogInBocCINCgl9KTsNCjwvc2NyaXB0Pg0KRU9GOw0KCQkJCQli cmVhazsNCgkJCQljYXNlICJjb2RlcHJlc3MiOg0KCQkJCQkkb3V0W10gPSAnPHNjcmlwdCB0 eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kZWRpdG9yX2Rpci4nL2NvZGVwcmVzcy5q cyI+PC9zY3JpcHQ+JzsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4g aW1wbG9kZSgiXG4iLCAkb3V0KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3Bs dWdpbl9oZWxwX3ZpZXdlcigkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnMsICRpZWRf cGx1Z2luX2dsb2JhbHM7DQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2Fn ZSk7DQoNCglpZiAoZ3BzKCduYW1lJykpIHsNCgkJJG5hbWUgPSBncHMoJ25hbWUnKTsNCgkJ JGhlbHAgPSAoJG5hbWUpID8gZmV0Y2goJ2hlbHAnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpIDogJyc7DQoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9l eHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcn LCRoZWxwKTsNCgl9IGVsc2UgaWYgKGdwcygnZmlsZW5hbWUnKSkgew0KCQkkcGx1Z2luPWll ZF9wbHVnaW5fcmVhZF9maWxlKCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygn ZmlsZW5hbWUnKSk7DQoJCWV4dHJhY3QoJHBsdWdpbik7DQoJfQ0KCWVjaG8gc3RhcnRUYWJs ZSgnZWRpdCcpOw0KCWlmIChlbXB0eSgkaGVscCkpIHsNCgkJZWNobyB0cih0ZGEoJzxwPkhl bHAgbm90IGFjY2Vzc2libGUgZnJvbSB0aGlzIGZpbGUuPC9wPicpKTsNCgl9IGVsc2Ugew0K CQlsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2Vy cygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2lu X2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJCSRwbHVnaW5bJ2hlbHAnXSA9IGllZF9wbHVnaW5f dGV4dGlsZSgkbmFtZSwgJGhlbHAsICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsNCgkJ ZWNobyB0cih0ZGEoICc8cD5FeHRyYWN0ZWQgJy4oIWVtcHR5KCRwbHVnaW5bJ2hlbHAnXSkg PyAnYW5kIFRleHRpbGUgcHJvY2Vzc2VkJyA6ICcnKS4nIGhlbHAgc2VjdGlvbiBmb2xsb3dz JiM4MjMwOzwvcD48aHI+JywgJyB3aWR0aD0iNjAwIicpKTsNCgkJZWNobyB0cih0ZGEoJHBs dWdpblsnaGVscCddLCAnIHdpZHRoPSI2MDAiJykpOw0KCX0NCgllY2hvIGVuZFRhYmxlKCk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2V0dXAoJG1lc3NhZ2U9 JycpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG51bVJlcVByZWZzID0gY291 bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pOw0KDQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdp bnMnKSwkbWVzc2FnZSk7DQoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFy cmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7DQoJJHJzID0gc2FmZV9yb3dzKCdu YW1lLHZhbCxodG1sJywndHhwX3ByZWZzJywnbmFtZSBpbiAoJy4kcHJlZmtleXMuJyknKTsN CgkkbnVtUm93cyA9IGNvdW50KCRycyk7DQoNCgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuSW5zdGFsbCA9 ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTpp bmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAn cHVibGlzaCcpLic8L2Zvcm0+JzsNCgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9z dCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsN CgkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KDQoJZWNo byBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykg ew0KCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJCWVjaG8gdHIodGRhKHN0cm9uZyhpZWRf cGx1Z2luX2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAnIGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0 blJlbW92ZSwgJGJ0blN0eWxlKSApOw0KCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFj dGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9w cmVmc191cGRhdGUiPic7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCAkbnVtUm93czsgJGlk eCsrKSB7DQoJCQkkYSA9ICRyc1skaWR4XTsNCgkJCSRsYWJlbCA9ICc8bGFiZWwgZm9yPSIn LiRhWyduYW1lJ10uJyI+Jy5pZWRfcGx1Z2luX2dUeHQoJGFbJ25hbWUnXSkuJzo8L2xhYmVs Pic7DQoJCQkkb3V0ID0gdGRhKCRsYWJlbCwgJyBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7 IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpOw0KCQkJc3dpdGNoKCRhWyduYW1lJ10pIHsN CgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvcl9wYXRoIjoNCgkJCQljYXNlICJpZWRfcGx1 Z2luX2hlbHBfZWRpdG9yX3BhdGgiOg0KCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X3Nm aWxlIjoNCgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMiOg0KCQkJCWNhc2Ug ImllZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCI6DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRw dXRfdG1wY2FjaGUiOg0KCQkJCQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRhWyduYW1l J10sICRhWyd2YWwnXSwgJ2VkaXQnLCAnJywgJycsIDUwLCAnJywgJGFbJ25hbWUnXSkpOw0K CQkJCQlicmVhazsNCgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvciI6DQovLwkJCQkJJG91 dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBhcnJheSgnbm9uZScgPT4gJ05vbmUn LCAnZWRpdF9hcmVhJyA9PiAnRWRpdCBBcmVhJywgJ2NvZGVwcmVzcycgPT4gJ0NvZGVQcmVz cycpLCAkYVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRo aXMuaWQsIHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSddKSk7DQoJCQkJCSRvdXQgLj0gdGQo c2VsZWN0SW5wdXQoJGFbJ25hbWUnXSwgYXJyYXkoJ25vbmUnID0+ICdOb25lJywgJ2VkaXRf YXJlYScgPT4gJ0VkaXQgQXJlYScpLCAkYVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJpZWRf cGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSddKSk7 DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImllZF9wbHVnaW5faGVscF9lZGl0b3IiOg0KCQkJ CQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCd0ZXh0aWxlJyA9 PiAnTm9uZSAoVGV4dGlsZSknLCAndGlueV9tY2UnID0+ICdUaW55IE1DRScpLCAkYVsndmFs J10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMu dmFsdWUpOyInLCAkYVsnbmFtZSddKSk7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImllZF9w bHVnaW5fb3V0cHV0X29yZGVyIjoNCgkJCQkJJG91dCAuPSB0ZChyYWRpbygkYVsnbmFtZSdd LDAsKCgkYVsndmFsJ109PTApPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgnb3V0cHV0X2NvZGVf Zmlyc3QnKS4iICIgLiByYWRpbygkYVsnbmFtZSddLDEsKCgkYVsndmFsJ109PTEpPzE6MCkp LmllZF9wbHVnaW5fZ1R4dCgnb3V0cHV0X2hlbHBfZmlyc3QnKS4iICIpOw0KCQkJCQlicmVh azsNCgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCI6DQoJCQkJCSRvdXQgLj0g dGQoZklucHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcsICcnLCAn JywgNSwgJycsICRhWyduYW1lJ10pKTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQllY2hvIHRy KCRvdXQpOw0KCQl9DQoJCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgkJ ZWNobyAnPC9mb3JtPic7DQoJfSBlbHNlIGlmICgkbnVtUm93cyA+IDAgJiYgJG51bVJvd3Mg PCAkbnVtUmVxUHJlZnMpIHsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKGllZF9wbHVnaW5fZ1R4 dCgncHJlZnNfc29tZScpKS5ici5icg0KCQkJCQkJLmllZF9wbHVnaW5fZ1R4dCgncHJlZnNf c29tZV9leHBsYWluJykuYnIuYnINCgkJCQkJCS5pZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX3Nv bWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuUmVt b3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCX0gZWxz ZSB7DQoJCWVjaG8gdHIodGRhKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfbm90X2luc3RhbGxl ZCcpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbCwgJGJ0 blN0eWxlKSk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCg0KCWVjaG8gPDw8RU9GDQo8c2Ny aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp2YXIgaWVkX3BsdWdpbl9wYXRoX3JlID0g bmV3IFJlZ0V4cCgiXi4qWy9cXF0iLCAiZyIpDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZz d2FwKHNlbElELCBzZWxWYWx1ZSkgew0KCXZhciBpZCA9IHNlbElEKydfcGF0aCc7DQoJdmFy IG51dmFsID0gKChiYXNlbmFtZSgkKCIjIitpZCkudmFsKCkpID09IHNlbFZhbHVlKSA/ICQo IiMiK2lkKS52YWwoKSA6IGRpcm5hbWUoJCgiIyIraWQpLnZhbCgpKStzZWxWYWx1ZSk7DQoJ aWYgKCQoIiMiK3NlbElEKVswXS5zZWxlY3RlZEluZGV4ID09IDApIHsNCgkJJCgiIyIraWQp LmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7IDsNCgl9IGVsc2Ugew0KCQkkKCIjIitpZCkuYXR0 cigiZGlzYWJsZWQiLCBmYWxzZSk7IDsNCgkJJCgiIyIraWQpLnZhbChudXZhbCk7DQoJfQ0K fQ0KZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgc3VmZml4KSB7DQoJcmV0dXJuIHBhdGgucmVw bGFjZShpZWRfcGx1Z2luX3BhdGhfcmUsICcnKTsNCn0NCmZ1bmN0aW9uIGRpcm5hbWUocGF0 aCkgew0KCXJldHVybiBwYXRoLm1hdGNoKGllZF9wbHVnaW5fcGF0aF9yZSk7DQp9DQokKGZ1 bmN0aW9uKCkgew0KCSQoInNlbGVjdC5saXN0IikuZWFjaChmdW5jdGlvbigpIHsNCgkJaWVk X3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsNCgl9KTsNCn0pOw0KPC9z Y3JpcHQ+DQpFT0Y7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJl ZnNfaW5zdGFsbCgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG1lc3NhZ2Ug PSAnJzsNCglmb3JlYWNoICgkaWVkX3BsdWdpbl9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZs dCkgew0KCQlpZiAoIWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7 DQoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0n LmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZs dCkpLicsZXZlbnQ9ImllZF9wbHVnaW4iJyk7DQoJCX0NCgl9DQoJJG1lc3NhZ2UgPSBpZWRf cGx1Z2luX2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOw0KCWllZF9wbHVnaW5fc2V0dXAoJG1l c3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX3Jl bW92ZSgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsN Cglmb3JlYWNoIChhcnJheV9tZXJnZSgkaWVkX3BsdWdpbl9wcmVmc1swXSwkaWVkX3BsdWdp bl9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywn dHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhw X3ByZWZzJywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCgkk bWVzc2FnZSA9IGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfZGVsZXRlZCcpOw0KCWllZF9wbHVn aW5fc2V0dXAoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1 Z2luX3ByZWZzX3VwZGF0ZSgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG1l c3NhZ2UgPSAnJzsNCgkkcG9zdCA9IGRvU2xhc2goc3RyaXBQb3N0KCkpOw0KCWZvcmVhY2gg KCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3Nl dCgkcG9zdFskcHJlZl0pKSB7DQoJCQlzYWZlX3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9 ICciLiRwb3N0WyRwcmVmXS4iJyIsICJuYW1lID0gJyIuZG9TbGFzaCgkcHJlZikuIicgYW5k IHByZWZzX2lkID0gMSIpOw0KCQl9DQoJfQ0KCSRtZXNzYWdlID0gZ1R4dCgncHJlZmVyZW5j ZXNfc2F2ZWQnKTsNCglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8gQm9v byEgc2FuaXRpemVGb3JGaWxlKCkgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb3JlIHNv IGR1cGxpY2F0ZSBpdHMgZnVuY3Rpb25hbGl0eQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInNt ZF9zYW5pdGl6ZUZvckZpbGUiKSkgew0KZnVuY3Rpb24gc21kX3Nhbml0aXplRm9yRmlsZSgk bmFtZSkgew0KCSRuZXduYW1lID0gcHJlZ19yZXBsYWNlKCcvW1x4MDAtXHgxZlx4MjJceDJh XHgyZlx4M2FceDNjXHgzZVx4M2ZceDVjXHg3Y1x4N2ZdKy8nLCAnJywgJG5hbWUpOw0KCSRu ZXduYW1lID0gcHJlZ19yZXBsYWNlKCcvWy5dezIsfS8nLCAnLicsIHRyaW0oJG5ld25hbWUs ICcuICcpKTsNCglyZXR1cm4gJG5ld25hbWU7DQp9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIGllZF9wbHVnaW5fZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcg PSBhcnJheSgNCgkJJ2NhY2hlX25vdF9zZXQnID0+ICdBZHZhbmNlZCBwcmVmICJwbHVnaW4g Y2FjaGUgZGlyZWN0b3J5IiBub3QgZGVmaW5lZCcsDQoJCSdjaGVja190eXBlJyA9PiAnQ2hl Y2sgeW91ciBwbHVnaW4gdHlwZSEnLA0KCQknY2hvb3NlX2ZpbGUnID0+ICdZb3UgYXJlIHN1 cHBvc2VkIHRvIGNob29zZSB0aGUgZmlsZSA7KScsDQoJCSdjb2RlX2Rpc3QnID0+ICdQbHVn aW4gY29kZTxicj5mb3IgZGlzdHJpYnV0aW9uJywNCgkJJ2llZF9wbHVnaW5fY29tcG9zZXIn ID0+ICdQbHVnaW4gQ29tcG9zZXInLA0KCQknY29tcHJlc3MnID0+ICdaaXAnLA0KCQknY3Jl YXRlX25ldycgPT4gJ0NyZWF0ZSBuZXcgcGx1Z2luJywNCgkJJ2VkaXRfbmV3JyA9PiAnRWRp dCB5b3VyIG5ldyBwbHVnaW4nLA0KCQknZW5hYmxlJyA9PiAnRW5hYmxlZCcsDQoJCSdleHBv cnQnID0+ICdFeHBvcnQgYXMnLA0KCQknaWVkX3BsdWdpbl9lZGl0b3InID0+ICdQbHVnaW4g ZWRpdG9yJywNCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+ICdQbHVnaW4gZWRpdG9y IHBhdGggVVJMJywNCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJyA9PiAnUGx1Z2luIGVk aXRvciB3aWR0aCAoY2hhcnMpJywNCgkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3InID0+ICdI ZWxwIGVkaXRvcicsDQoJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgnID0+ICdIZWxw IGVkaXRvciBwYXRoIFVSTCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4gJ1BI UCBleHBvcnQgb3JkZXInLA0KCQknaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUnID0+ICdFeHBv cnQgcGx1Z2luIGZpbGVuYW1lIGZvcm1hdCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF9zZmls ZWMnID0+ICdFeHBvcnQgY29tcHJlc3NlZCBmaWxlbmFtZSBmb3JtYXQnLA0KCQknaWVkX3Bs dWdpbl9vdXRwdXRfc2ZpbGVwJyA9PiAnUGx1Z2luIHRlbXBsYXRlIGZpbGVuYW1lIGZvcm1h dCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZScgPT4gJ0NhY2hlIHRleHRpbGVk IGhlbHAgaGVyZScsDQoJCSduYW1lJyA9PiAnUGx1Z2luIG5hbWUnLA0KCQknbmFtZV9maXJz dCcgPT4gJ1lvdSBhcmUgc3VwcG9zZWQgdG8gbmFtZSB0aGUgcGx1Z2luIDspJywNCgkJJ25h bWVfdG9vbHRpcCcgPT4gJ09ubHkgbmVlZGVkIGlmIHRoZSBQSFAgZmlsZSB5b3UgYXJlIHVw bG9hZGluZyBpcyBOT1QgaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCcsDQoJCSds b2FkX29yZGVyJyA9PiAnTG9hZCBvcmRlcicsDQoJCSdsb2FkX29yZGVyX2hlbHAnID0+ICco MT1maXJzdCwgNT1ub3JtYWwsIDk9bGFzdCknLA0KCQknb3V0cHV0X2NvZGVfZmlyc3QnID0+ ICdDb2RlIGZpcnN0JywNCgkJJ291dHB1dF9oZWxwX2ZpcnN0JyA9PiAnSGVscCBmaXJzdCcs DQoJCSdwbHVnaW5fY29kZScgPT4gJ1NvdXJjZSBjb2RlJywNCgkJJ3ByZWZzX2RlbGV0ZWQn ID0+ICdQcmVmZXJlbmNlcyBkZWxldGVkJywNCgkJJ3ByZWZzX2luc3RhbGxlZCcgPT4gJ1By ZWZlcmVuY2VzIGluc3RhbGxlZCcsDQoJCSdwcmVmc19ub3RfaW5zdGFsbGVkJyA9PiAnUHJl ZmVyZW5jZXMgbm90IGluc3RhbGxlZC4nLA0KCQkncHJlZnNfc29tZScgPT4gJ05vdCBhbGwg cHJlZmVyZW5jZXMgYXZhaWxhYmxlLicsDQoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdJ dCBpcyBlaXRoZXIgYmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhl Jy5ici4ncGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMn LmJyLidoYXZlIGJlY29tZSBjb3JydXB0IHNvbWVob3cuJywNCgkJJ3ByZWZzX3NvbWVfb3B0 aW9ucycgPT4gJ0Nob29zZSAnLmdUeHQoJ2RlbGV0ZScpLicgdG8gcmVtb3ZlIHRoZW0gYWxs IG9yICcuZ1R4dCgnaW5zdGFsbCcpLicgdG8gYWRkJy5ici4nYW55IG5ldyBvbmVzLCBsZWF2 aW5nIGFsbCBleGlzdGluZyBwcmVmZXJlbmNlcyB1bnRvdWNoZWQuJywNCgkJJ3ByZWZzX3Rp dGxlJyA9PiAnUGx1Z2luIENvbXBvc2VyIHByZWZlcmVuY2VzJywNCgkJJ3JlbmFtZV9mYWls ZWQnID0+ICcgKHJlbmFtZSBmYWlsZWQpICcsDQoJCSdyZW5hbWVfZmlsZScgPT4gJ1JlbmFt ZSBmaWxlJywNCgkJJ3JlbmFtZWQnID0+ICcgKHJlbmFtZWQpICcsDQoJCSdyZXN0b3JlX2hl bHAnID0+ICdSb2xsIGJhY2sgdGhlIHBsdWdpbiBjb2RlIHRvIHRoZSBtb3N0IHJlY2VudCBy ZXN0b3JlIHBvaW50JywNCgkJJ3Jlc3RvcmVfcG9pbnQnID0+ICdSZXN0b3JlIHBvaW50JywN CgkJJ3Jlc3RvcmVfdmVyaWZ5JyA9PiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJvbGxi YWNrIHRoZSB7bmFtZX0gc291cmNlIGNvZGUgdG8gaXRzIGxhc3QgcmVzdG9yZSBwb2ludD8n LA0KCQkncmVzdG9yZWQnID0+ICdQbHVnaW4ge25hbWV9IHJlc3RvcmVkLicsDQoJCSdydW5f ZnJvbScgPT4gJ1BsdWdpbnMgdGhhdCBydW4gZnJvbScsDQoJCSdzYXZlX2FzJyA9PiAnU2F2 ZSBhcycsDQoJCSdzZXR1cCcgPT4gJ1NldHVwJywNCgkJJ3R5cGUnID0+ICdQbHVnaW4gdHlw ZScsDQoJCSd0eXBlXzAnID0+ICdDbGllbnQnLA0KCQkndHlwZV8xJyA9PiAnQWRtaW4gKyBD bGllbnQnLA0KCQkndHlwZV8yJyA9PiAnTGlicmFyeScsDQoJCSd0eXBlXzMnID0+ICdBZG1p bicsDQoJCSd1cGxvYWRfcGhwJyA9PiAnVXBsb2FkIHBsdWdpbiBmcm9tIFBIUCBmaWxlJywN CgkJJ3V0aWxpdGllcycgPT4gJ1V0aWxpdGllcyAoPHN0cm9uZz51c2Ugb25seSBhZnRlciBz YXZpbmcgdGhlIGRhdGEgYWJvdmU8L3N0cm9uZz4pJywNCgkpOw0KCXJldHVybiBzdHJ0cigk bGFuZ1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIzIjtzOjU6Im9yZGVy IjtzOjE6IjUiO3M6NDoiaGVscCI7czoyODk2NzoiPHA+PGRpdiBpZD0iaWVkX2hlbHAiPjwv cD4KCgk8aDE+SW5zcGlyZWQgcGx1Z2luIGNvbXBvc2VyPC9oMT4KCgk8cD5UaGlzIHBsdWdp biBjcmVhdGVzIGEgbmV3IHBhZ2UgdW5kZXIgdGhlICYjODIxNjtFeHRlbnNpb25zJiM4MjE3 OyB0YWIgd2hlcmUgeW91IGNhbiBlZGl0IHBsdWdpbnMgdGhhdCBhcmUgYWxyZWFkeSBpbnN0 YWxsZWQgaW4gVGV4dHBhdHRlcm4gYW5kIHJlZ2lzdGVyIG5ldyBwbHVnaW5zLjwvcD4KCgk8 aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5DcmVhdGUsIGVk aXQgb3IgdXBsb2FkIHBsdWdpbiBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCB0aGVuIHB1Ymxp c2ggeW91ciB3YXJlcyBpbiB0aGUgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFu IGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPjwvc3Bhbj48L3Nw YW4+IHBsdWdpbiBmb3JtYXQgKHNlZSBhbiA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5j b20vZG93bmxvYWRzL2V4YW1wbGVfcGx1Z2luX3RlbXBsYXRlLnR4dCI+ZXhhbXBsZTwvYT4p PC9saT4KCQk8bGk+RnVsbCBzdXBwb3J0IGZvciB0aGUgb2ZmaWNpYWwgPGEgaHJlZj0iaHR0 cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVtcGxhdGUudHh0 Ij56ZW1fdHBsLnBocCBwbHVnaW4gdGVtcGxhdGU8L2E+LiBUaGUgPGEgaHJlZj0iaHR0cDov L3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVtcGxhdGVfY29kZV9m aXJzdC50eHQiPm1vZGlmaWVkIHZlcnNpb248L2E+IGJ5IDxhIGhyZWY9Imh0dHA6Ly90eHAt cGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS9wbHVnaW5zL21vZGlmaWVkLXBsdWdpbi1jb21waWxl ciI+bmV0LWNhcnZlcjwvYT4gYWxzbyBpbmNvcnBvcmF0ZXMgYSAmIzgyMTY7c3R5bGUmIzgy MTc7IHNlY3Rpb24gZm9yIGVhc3kgc3R5bGluZyBvZiB5b3VyIGhlbHAgdGV4dC4gVGhlIFBs dWdpbiBDb21wb3NlciBsb29rcyBmb3IgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNz PSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bhbj48L3NwYW4+IHNl Y3Rpb25zIGluIHRoZSB0ZW1wbGF0ZSBhbmQgd2lsbCB1c2UgdGhlbSBhY2NvcmRpbmdseS4g SXQgd2lsbCBhbHNvIHJlYWQgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBz Ij48c3BhbiBjbGFzcz0iY2FwcyI+U1ZOPC9zcGFuPjwvc3Bhbj48L3NwYW4+ICRMYXN0Q2hh bmdlZFJldmlzaW9uIGVudHJpZXMgKHRoYW5rcyBuZXQtY2FydmVyKTwvbGk+CgkJPGxpPkV4 cG9ydCBwbHVnaW5zIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLCBhbGxvd2luZyB5b3UgdG8g c3dpdGNoIGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNvbXBvc2VyIG9yIHlvdXIg ZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmlsZSBpbiB0aGUgcGx1Z2lu X2NhY2hlX2RpciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxzcGFuIGNsYXNzPSJjYXBz Ij48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj48L3Nw YW4+PC9zcGFuPiB3aXRoIHRoZSBoZWxwIG9mIHRoZSBDb21wb3NlciBhbmQgcHVibGlzaCB5 b3VyIHBsdWdpbiBmb3IgZXZlcnlvbmUuIExvb2sgYXQgdGhlIGJvdHRvbSBvZiB0aGUgUGx1 Z2luIENvbXBvc2VyJiM4MjE3O3MgPGEgaHJlZj0iI2VkaXRwYWdlIj5FZGl0IHBhZ2U8L2E+ IGZvciB0aGUgb3B0aW9uczsganVzdCByZW1lbWJlciB0byBzYXZlIHlvdXIgY2hhbmdlcyBi ZWZvcmUgZXhwb3J0aW5nIG9yIGNvcHlpbmcvcGFzdGluZyB0aGUgY29kZSEgWW91IGNhbiBl eHBvcnQgYXM6Cgk8dWw+CgkJPGxpPmEgc3RhbmRhcmQgQkFTRTY0LWVuY29kZWQgdGV4dCBm aWxlPC9saT4KCQk8bGk+YSBnemlwcGVkIHZlcnNpb24gKHVzZWZ1bCBmb3IgbGFyZ2UgcGx1 Z2lucyk8L2xpPgoJCTxsaT5hIHBocCBmaWxlIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBm b3JtYXQ8L2xpPgoJPC91bD48L2xpPgoJCTxsaT5XaGVuIGV4cG9ydGluZywgZmlsZXMgY2Fu IGJlIHNhdmVkIHdpdGggZWl0aGVyIHRoZSBjb2RlIGJsb2NrIGZpcnN0IG9yIHRoZSBoZWxw IGJsb2NrIGZpcnN0LCBhbmQgeW91IGNhbiBjaGFuZ2UgdGhlIG91dHB1dCBmaWxlbmFtZSBm b3JtYXQgdG8gdGFzdGUuIFVzZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+U2V0dXAgYnV0 dG9uPC9hPiB0byBjb25maWd1cmU8L2xpPgoJCTxsaT5TdXBwb3J0IGZvciBhbGwgcGx1Z2lu IHR5cGVzOgoJPHVsPgoJCTxsaT5DbGllbnQgKyBBZG1pbjwvbGk+CgkJPGxpPkNsaWVudC1z aWRlIG9ubHk8L2xpPgoJCTxsaT5BZG1pbi1zaWRlIG9ubHk8L2xpPgoJCTxsaT5MaWJyYXJ5 IHBsdWdpbnM8L2xpPgoJPC91bD48L2xpPgoJCTxsaT5TdXBwb3J0IGZvciBzcGVjaWZ5aW5n IGEgcmVjb21tZW5kZWQgcGx1Z2luIGxvYWQgb3JkZXIgaWYgeW91ciBwbHVnaW4gbmVlZHMg c3BlY2lhbCBwb3dlcnMuICYjODIxNjs1JiM4MjE3OyBpcyB0aGUgZGVmYXVsdC4gTm90ZSB0 aGF0IGlmIHVzaW5nIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IHRoaXMgZmVhdHVyZSBp cyA8ZW0+b25seSBhdmFpbGFibGUgaWYgdGhlIDxjb2RlPiRwbHVnaW5bJmFtcDthbXA7IzM5 O29yZGVyJmFtcDthbXA7IzM5O108L2NvZGU+IHN0cmluZyBpcyBpbiB0aGUgdGVtcGxhdGUg dG8gYmVnaW4gd2l0aC48L2VtPiBTbyBpZiB5b3VyIGxvYWQgb3JkZXIga2VlcHMgcmV0dXJu aW5nIHRvICYjODIxNjs1JiM4MjE3OywgZWRpdCB5b3VyIHRlbXBsYXRlIGRpcmVjdGx5IHRv IGFkZCB0aGF0IHN0cmluZyBvciBwYXN0ZSB5b3VyIHBsdWdpbiBpbnRvIHRoZSByZWxldmFu dCBwYXJ0cyBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fk cy9lbXB0eV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5lbXB0eSBwbHVnaW4gdGVtcGxhdGU8L2E+ IGFuZCB1cGxvYWQgaXQ8L2xpPgoJCTxsaT5IZWxwIHRleHQgY2FuIGJlIHdyaXR0ZW4gaW4g VGV4dGlsZSBvciAoWClIVE1MPC9saT4KCQk8bGk+VGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDxh IGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0x MzA4OSI+VGlueU1DRSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxz cGFuIGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPjwvc3Bhbj48L3NwYW4+IGVkaXRvcjwv YT4gZm9yIHRoZSBoZWxwIHNlY3Rpb24gb3IgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdl Lm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MTY0MDA4Ij5FZGl0IEFyZWE8 L2E+IGZvciBjb2RlIG1hcmt1cCAodGhhbmtzIHZhcmlhYXMpLiBTZWUgdGhlIDxhIGhyZWY9 IiNzZXR1cHBhZ2UiPnNldHVwPC9hPiBhbmQgPGEgaHJlZj0iI25vdGVzIj5ub3RlczwvYT4g c2VjdGlvbnMgZm9yIG1vcmUgb24gdGhlc2UgZWRpdG9yczwvbGk+CgkJPGxpPkJ1aWx0LWlu IFRleHRpbGUgaGVscCB2aWV3ZXIgKHRoYW5rcyB0byBuZXQtY2FydmVyJiM4MjE3O3MgPGEg aHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvcGx1Z2lu LWhlbHAtdmlld2VyIj5QbHVnaW4gSGVscCBWaWV3ZXI8L2E+KSB0byBhbGxvdyB5b3UgdG8g cHJldmlldyB5b3VyIEhlbHAgdGV4dCBkdXJpbmcgZGV2ZWxvcG1lbnQgKHRoZSB0d28gdmll d2VycyB3aWxsIGhhcHBpbHkgY28tZXhpc3QgaWYgeW91IHdpc2gpPC9saT4KCQk8bGk+UmVz aXphYmxlIHRleHRhcmVhLCBwbHVzIGNoYXJhY3RlciBsaW1pdC9jb3VudGVycyBzbyB0aGVy ZSYjODIxNztzIGxlc3MgY2hhbmNlIG9mIHlvdSBtYWtpbmcgdGhlIHBsdWdpbiBvciBkb2Nz IHRvbyBiaWcgdG8gZml0IGluIHRoZSBkYXRhYmFzZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9y IHNldHRpbmcgYSBjb2RlICYjODIyMDtyZXN0b3JlIHBvaW50JiM4MjIxOyBhbmQgcm9sbGlu ZyBiYWNrIHRvIHRoYXQgcG9pbnQgaWYgdGhpbmdzIGdvIHNpZGV3YXlzLiBBbHNvIHVzZWZ1 bCBmb3IgcmV0dXJuaW5nIHBsdWdpbiBzb3VyY2UgY29kZSB0byBpdHMgYXMtaW5zdGFsbGVk IHN0YXRlPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3JzIj5BdXRob3JzPC9oMj4KCgk8 cD4JPHA+T3JpZ2luYWwgcGx1Z2luOiA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51 YS9mZWVkYmFjay8iPll1cmEgTGlubnlrPC9hPjxiciAvPgo8L3A+CgoJPHA+TW9kaWZpY2F0 aW9ucyAodjAuNSspOiA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZv cm0iPlN0ZWYgRGF3c29uPC9hPjxiciAvPgo8L3A+CgoJPHA+QSB0b3VjaCBvZiBjbGFzczog PGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL2NvbnRhY3QiPlN0 ZXZlIERpY2tpbnNvbjwvYT48YnIgLz4KPC9wPgoKCTxwPlBsdXMgaGVscCBmcm9tIGEgaG9z dCBvZiBmb3J1bSBjb250cmlidXRvcnMgdG9vIG51bWVyb3VzIHRvIG1lbnRpb24uIFlvdSBr bm93IHdobyB5b3UgYXJlIDstKTwvcD48L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxs YXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiAo djAuNSBhbmQgYWJvdmUpIGZyb20gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3 Ij5zdGVmZGF3c29uLmNvbTwvYT4gKHByZXZpb3VzIHZlcnNpb25zIGFyZSBzdGlsbCBhdmFp bGFibGUgb24gdGhlIDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJlZC5raWV2LnVhL3R4cC9pZWRf cGx1Z2luX2NvbXBvc2VyIj5JbnNwaXJlZCBob21lcGFnZTwvYT4pLCBwYXN0ZSB0aGUgY29k ZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFu IGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+PC9zcGFuPjwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1 Z2lucyBwYWdlLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi48L3A+CgoJPHA+Vmlz aXQgdGhlIEV4dGVuc2lvbnMgLSZndDsgUGx1Z2luIENvbXBvc2VyIHRhYiBhbmQgY2xpY2sg dGhlIFNldHVwIGJ1dHRvbiBpbiB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBzY3JlZW4uIEZyb20g aGVyZSB5b3UgY2FuIEluc3RhbGwsIERlbGV0ZSBhbmQgU2F2ZSB0aGUgcGx1Z2luIHByZWZl cmVuY2VzLiBTZWUgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwIHNlY3Rpb248L2E+ IGZvciBkZXRhaWxzLjwvcD4KCgk8cD5UbyByZW1vdmUgdGhlIFBsdWdpbiBDb21wb3NlciAo bm9vb28hKSB2aXNpdCB0aGUgU2V0dXAgcGFnZSBhZ2FpbiBmcm9tIHRoZSBQbHVnaW4gQ29t cG9zZXIgdGFiLCBoaXQgRGVsZXRlIHRvIHJlbW92ZSB0aGUgcHJlZmVyZW5jZXMsIHRoZW4g c2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGFzIG5vcm1hbCBmcm9tIHRoZSBBZG1pbiAtJmd0 OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8aDMg aWQ9Imxpc3RwYWdlIj5MaXN0IHBhZ2U8L2gzPgoKCTxwPlRoZXJlIGlzIGEgPGEgaHJlZj0i I3NldHVwcGFnZSI+c2V0dXA8L2E+IGJ1dHRvbiB0byBhbGxvdyB5b3UgdG8gY29uZmlndXJl IHZhcmlvdXMgb3B0aW9ucyBpbiB0aGUgQ29tcG9zZXI7IHRoZSByZXN0IG9mIHRoZSBwYWdl IGxpc3RzIGFsbCBpbnN0YWxsZWQgcGx1Z2lucy4gVGhlIGNvbHVtbnMgYXJlOjwvcD4KCgk8 dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luPC9zdHJvbmc+IDogY2xpY2sgdGhlIHBsdWdpbiBu YW1lIHRvIDxhIGhyZWY9IiNlZGl0cGFnZSI+ZWRpdDwvYT4gaXQ8L2xpPgoJCTxsaT48c3Ry b25nPkF1dGhvcjwvc3Ryb25nPiA6IGlmIGF2YWlsYWJsZSwgY2xpY2sgdGhlIGF1dGhvciB0 byBnbyB0byB0aGVpciBzaXRlPC9saT4KCQk8bGk+PHN0cm9uZz5WZXJzaW9uIChNb2RpZmll ZCk8L3N0cm9uZz4gOiBzaG93cyB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciBhbmQgd2hl dGhlciB0aGUgcGx1Z2luIGhhcyBiZWVuIG1vZGlmaWVkIGZyb20gd2hlbiBpdCB3YXMgZWl0 aGVyIGNyZWF0ZWQgb3IgaW5zdGFsbGVkLiBJZiBpdCBoYXMsIHlvdSBjYW4gY2xpY2sgdGhl IHZlcnNpb24gbnVtYmVyIHRvIHJlc3RvcmUgdGhlIHBsdWdpbiBjb2RlIHRvIGl0cyBpbnN0 YWxsZWQgc3RhdGUgb3IgbGFzdCA8YSBocmVmPSIjcmVzdG9yZSI+cmVzdG9yZSBwb2ludDwv YT48L2xpPgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+IDogYnJpZWZseSwg d2hhdCB0aGUgcGx1Z2luIGRvZXM8L2xpPgoJCTxsaT48c3Ryb25nPlB1Ymxpc2g8L3N0cm9u Zz4gOiB0aHJlZSBsaW5rcwoJPHVsPgoJCTxsaT48ZW0+UHVibGlzaDwvZW0+IDogZXhwb3J0 cyB0aGUgcGx1Z2luIGFzIGEgLnR4dCBmaWxlIGZvciBkaXN0cmlidXRpb24gdG8gb3RoZXIg VGV4dHBhdHRlcm4gdXNlcnM8L2xpPgoJCTxsaT48ZW0+WmlwPC9lbT4gOiBleHBvcnRzIHRo ZSBwbHVnaW4gYXMgYSBjb21wcmVzc2VkIChnemlwcGVkKSAudHh0IGZpbGUgZm9yIGRpc3Ry aWJ1dGlvbjwvbGk+CgkJPGxpPjxlbT5IZWxwPC9lbT4gOiBkaXNwbGF5cyB0aGUgKHRleHRp bGUgcHJvY2Vzc2VkKSBwbHVnaW4gZG9jdW1lbnRhdGlvbiwgaWYgdGhlcmUgaXMgYW55LiBD YW4gYWxzbyBiZSB2aWV3ZWQgZnJvbSB0aGUgRWRpdCBwYWdlPC9saT4KCTwvdWw+PC9saT4K CQk8bGk+PHN0cm9uZz5PcmRlcjwvc3Ryb25nPiA6IHRoZSByZWNvbW1lbmRlZCBwbHVnaW4g bG9hZCBvcmRlciBmcm9tIDEgKGxvYWRlZCBmaXJzdCkgdG8gOSAobG9hZGVkIGxhc3QpLiA1 IGlzIGRlZmF1bHQ8L2xpPgoJCTxsaT48c3Ryb25nPkFjdGl2ZTwvc3Ryb25nPiA6IGVuYWJs ZSBvciBkaXNhYmxlIGEgcGx1Z2luIGJ5IGNsaWNraW5nIGVudHJpZXMgaW4gdGhpcyBjb2x1 bW48L2xpPgoJCTxsaT48c3Ryb25nPng8L3N0cm9uZz4gOiBkZWxldGUgdGhlIHBsdWdpbjwv bGk+Cgk8L3VsPgoKCTxwPklmIHlvdSBhcmUgdXNpbmcgdGhlIHBsdWdpbl9jYWNoZV9kaXIg KEFkbWluIC0mZ3Q7IEFkdmFuY2VkIFByZWZzKSwgYW55IHBsdWdpbnMgaW4gdGhlIHN0YW5k YXJkIHRlbXBsYXRlIGZvcm1hdCB1cGxvYWRlZCB0byB0aGlzIGRpcmVjdG9yeSB3aWxsIGJl IGF2YWlsYWJsZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBhbmQgdGVzdGluZy4gWW91IGNh biBlZGl0IGFuZCBwdWJsaXNoIHRoZSBwbHVnaW5zIGluIHRoZSBzYW1lIG1hbm5lciBhcyB0 aGUgcmVndWxhciwgaW5zdGFsbGVkIHBsdWdpbnMgYWJvdmUsIHdpdGggdGhlIGZvbGxvd2lu ZyBleGNlcHRpb25zOjwvcD4KCgk8b2w+CgkJPGxpPlRoZXJlIGlzIG5vIGNvbmNlcHQgb2Yg JiM4MjE2O21vZGlmaWVkJiM4MjE3OyBvciBvZiByZXN0b3JlIHBvaW50cyBhcyB0aGUgZmls ZXMgYWx3YXlzIHJlcHJlc2VudCB0aGUgbW9zdCB1cC10by1kYXRlIHZlcnNpb248L2xpPgoJ CTxsaT5DYWNoZWQgcGx1Z2lucyBhcmUgJiM4MjIwO2Fsd2F5cyBvbiYjODIyMTsgYW5kIGRv IG5vdCBuZWVkIHRvIGJlIGluc3RhbGxlZC4gVG8gZGVhY3RpdmF0ZSB0aGUgcGx1Z2luIHRo ZSBmaWxlIG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5 PC9saT4KCQk8bGk+VGhlIHJlY29tbWVuZGVkIGxvYWQgb3JkZXIgY2Fubm90IGJlIGNoYW5n ZWQgZnJvbSB0aGUgbGlzdCBwYWdlOyBpdCBjYW4gb25seSBiZSBhbHRlcmVkIHZpYSB0aGUg PGEgaHJlZj0iI2VkaXRwYWdlIj5FZGl0PC9hPiBwYWdlLiBUaGUgbG9hZCBvcmRlciBpcyBv bmx5IHRha2VuIGludG8gYWNjb3VudCB3aGVuIHRoZSBwbHVnaW4gaXMgZXhwb3J0ZWQ8L2xp PgoJPC9vbD4KCgk8aDM+Q3JlYXRpbmcgYW5kIG5hbWluZyBwbHVnaW5zPC9oMz4KCgk8cD5U aGVyZSBhcmUgdHdvIHdheXMgb2YgY3JlYXRpbmcgcGx1Z2lucyBmcm9tIHRoZSBQbHVnaW4g Q29tcG9zZXIgbGlzdCBwYWdlLiBUaGUgZmlyc3QgaXMgdG8gY3JlYXRlIGEgYmxhbmssIGVt cHR5IHBsdWdpbjsgdXNlIHRoZSB0ZXh0IGJveCBhdCB0aGUgdG9wIGZvciB0aGlzLiBQb2lu dHMgdG8gbm90ZTo8L3A+CgoJPHVsPgoJCTxsaT5JZiB5b3UgdXNlIGEgc3RhbmRhcmQgcGx1 Z2luIG5hbWUgKGUuZy4gPGNvZGU+YWJjX215X3BsdWdpbjwvY29kZT4pIGl0IHdpbGwgYmUg Y3JlYXRlZCBpbiB0aGUgZGF0YWJhc2U8L2xpPgoJCTxsaT5JZiB5b3UgYWRkIDxjb2RlPi5w aHA8L2NvZGU+IHRvIHRoZSBwbHVnaW4gbmFtZSwgaXQgd2lsbCBiZSBjcmVhdGVkIGluIHRo ZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IGluIGEgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0 PC9saT4KCQk8bGk+QXZvaWQgc3BlY2lmeWluZyB0aGUgdmVyc2lvbiBvZiB0aGUgcGx1Z2lu IGluIHRoZSBuYW1lICYjODIxMjsgeW91IHNob3VsZCB1c2UgdGhlIDxlbT5SZW5hbWUgZmls ZTwvZW0+IG9yIDxlbT5FeHBvcnQ8L2VtPiBvcHRpb25zIGluIHRoZSBFZGl0IHBhZ2UgdG8g YWx0ZXIgdGhlIGZpbGVuYW1lIGludG8geW91ciBwcmVmZXJyZWQgZmlsZW5hbWUgZm9ybWF0 IChzZWUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXA8L2E+KTwvbGk+Cgk8L3VsPgoKCTxw PlRoZSBzZWNvbmQgbWV0aG9kIG9mIGNyZWF0aW5nIGEgcGx1Z2luIGlzIHRvIHVwbG9hZCBv bmUgdXNpbmcgdGhlIEJyb3dzZS91cGxvYWQgYm94IGF0IHRoZSBib3R0b20gb2YgdGhlIGxp c3QuIFBsZWFzZSBub3RlOjwvcD4KCgk8dWw+CgkJPGxpPllvdSBjYW4gdXBsb2FkIGNvZGUg aW4gZWl0aGVyIHN0YW5kYXJkIHBsdWdpbiB0ZW1wbGF0ZSBmb3JtYXQgKGVpdGhlciBjb2Rl LWZpcnN0IG9yIGhlbHAtZmlyc3QsIGNvbXBsZXRlIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMi PjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bh bj48L3NwYW4+IGFyZWFzKSBvciBzaW1wbHkgdXBsb2FkIGEgPHNwYW4gY2xhc3M9ImNhcHMi PjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPjwvc3Bh bj48L3NwYW4+IGZpbGUgY29udGFpbmluZyBjb2RlIG9ubHk8L2xpPgoJCTxsaT5UaGUgcGx1 Z2luIHdpbGwgYWx3YXlzIGJlIGluc3RhbGxlZCBpbiB0aGUgZGF0YWJhc2Ugd2hlbiB1c2lu ZyB0aGlzIG1ldGhvZCAodXBsb2FkIHRoZSB0ZW1wbGF0ZSBtYW51YWxseSB2aWEgPHNwYW4g Y2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+RlRQ PC9zcGFuPjwvc3Bhbj48L3NwYW4+IG9yIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCBhIC5waHAg ZXh0ZW5zaW9uIGFuZCBwYXN0ZSB0aGUgY29kZSBpbnRvIGl0IGlmIHlvdSB3YW50IGl0IGlu IHRoZSBwbHVnaW4gY2FjaGUpPC9saT4KCQk8bGk+SWYgdGhlIHBsdWdpbiBleGlzdHMgaXQg d2lsbCBiZSB1cGRhdGVkIHdpdGggeW91ciBuZXcgaW5mbzwvbGk+CgkJPGxpPlRoaXMgaXMg dGhlIG9ubHkgcGxhY2UgeW91IGNhbiB1cGxvYWQgcmF3IDxzcGFuIGNsYXNzPSJjYXBzIj48 c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48L3NwYW4+ PC9zcGFuPiB3aXRoIHRoZSA8Y29kZT4mYW1wO2FtcDtsdDs/cGhwID8mYW1wO2FtcDtndDs8 L2NvZGU+IG1hcmtlcnMuIEV2ZXJ5d2hlcmUgZWxzZSB5b3Ugc2hvdWxkIHVzZSBhIGZ1bGwg dGVtcGxhdGU8L2xpPgoJPC91bD4KCgk8cD5FdmVyeSBwbHVnaW4gc2hvdWxkIGJlIGNyZWF0 ZWQgd2l0aCBhIHRocmVlLWxldHRlciBwcmVmaXgsIGFuIHVuZGVyc2NvcmUsIHRoZW4gdGhl IG5hbWUgb2YgdGhlIHBsdWdpbi4gWW91IGFyZSBmcmVlIHRvIGNob29zZSB5b3VyIG93biB0 aHJlZS1sZXR0ZXIgcHJlZml4ICh1c3VhbGx5IHlvdXIgaW5pdGlhbHMpIHN1YmplY3QgdG8g PGEgaHJlZj0iaHR0cDovL3d3dy50ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0 bGU9UmVzZXJ2ZWRfUGx1Z2luX1ByZWZpeGVzIj5hdm9pZGluZyBvbmVzIGFscmVhZHkgdGFr ZW4gYnkgb3RoZXIgcGx1Z2luIGF1dGhvcnM8L2E+IHNvIHBlb3BsZSBjYW4gZ2V0IHRvIGtu b3cgeW91ciB3b3JrLiBQbHVzLCBpdCBncm91cHMgeW91ciBwbHVnaW5zIHRvZ2V0aGVyIGlu IHRoZSBwbHVnaW4gYXJjaGl2ZS48L3A+CgoJPHA+QWxsIGZ1bmN0aW9ucywgdmFyaWFibGVz IChpbmNsdWRpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3Bh biBjbGFzcz0iY2FwcyI+RE9NPC9zcGFuPjwvc3Bhbj48L3NwYW4+IG5vZGVzKSwgPHNwYW4g Y2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NT PC9zcGFuPjwvc3Bhbj48L3NwYW4+IGNsYXNzZXMsIGFuZCBhbnl0aGluZyBlbHNlIHlvdSBp bmplY3QgaW50byB0aGUgZ2xvYmFsIHNjb3BlIHNob3VsZCBiZSBwcmVmaXhlZCBieSA8c3Ry b25nPmF0IGxlYXN0PC9zdHJvbmc+IHlvdXIgdGhyZWUgbGV0dGVyIGNvZGU7IHByZWZlcmFi bHkgdGhlIHdob2xlIHBsdWdpbiBuYW1lIChvciBhYnJpZGdlZCB2ZXJzaW9uIHRoZXJlb2Yp IHRvIGF2b2lkIG5hbWVzcGFjZSBjbGFzaGVzIHdpdGggeW91ciBvd24gYW5kIG90aGVyIHBs dWdpbnMuPC9wPgoKCTxoMyBpZD0iZWRpdHBhZ2UiPkVkaXQgcGFnZTwvaDM+CgoJPHA+VGhl IEVkaXQgcGFnZSBpcyB3aGVyZSB5b3UgY3JhZnQgeW91ciBtYXN0ZXJwaWVjZS4gSXQgaXMg ZGl2aWRlZCBpbnRvIHZhcmlvdXMgc2VjdGlvbnMgYW5kIGJveGVzLCBhcyBkZXRhaWxlZCBo ZXJlOjwvcD4KCgk8cD4JPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbjwvc3Ryb25nPiA6IHRo ZSBuYW1lIG9mIHlvdXIgcGx1Z2luLCB3aGljaCB5b3UgY2FuIGNoYW5nZSBhdCBhbnkgdGlt ZS4gTm90ZSB0aGF0IGlmIHlvdSBhcmUgZWRpdGluZyBhIGZpbGUgZnJvbSB0aGUgcGx1Z2lu IGNhY2hlIGRpcmVjdG9yeSBhbmQgdGhlIDxjb2RlPiRwbHVnaW5bJmFtcDthbXA7IzM5O25h bWUmYW1wO2FtcDsjMzk7XTwvY29kZT4gcm93IGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZp bGUsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcGx1Z2luIG5hbWU7IGl0 IHdpbGwgYWx3YXlzIGJlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLjxiciAvPgo8L3A+CgoJPHA+ VG8gdGhlIHJpZ2h0IG9mIHRoaXMgYm94IHdpbGwgYmUgb25lIG9mIHR3byBpdGVtczoKCTx1 bD4KCQk8bGk+PHN0cm9uZz5FbmFibGU8L3N0cm9uZz4gOiBpZiB0aGUgcGx1Z2luIGlzIGEg cmVndWxhciAoaW5zdGFsbGVkKSBwbHVnaW4sIHRoaXMgY2hlY2tib3ggYWxsb3dzIHlvdSB0 byBzd2l0Y2ggdGhlIHBsdWdpbiBvbiBhbmQgb2ZmPC9saT4KCQk8bGk+PHN0cm9uZz4oZmls ZSBuYW1lKTwvc3Ryb25nPiA6IGlmIHlvdSBhcmUgZWRpdGluZyBhIHBsdWdpbiBpbiB0aGUg Y2FjaGUgZGlyZWN0b3J5LCB0aGUgY3VycmVudCBmaWxlbmFtZSB5b3UgYXJlIHdyaXRpbmcg dG8gd2lsbCBiZSBkaXNwbGF5ZWQgaW5zdGVhZDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxz dHJvbmc+U291cmNlIGNvZGU8L3N0cm9uZz4gOiB5b3VyIHBsdWdpbiBjb2RlIGdvZXMgaGVy ZS4gVGhlIGJveCBpcyByZXNpemFibGUgYnkgZ3JhYmJpbmcgdGhlIDxjb2RlPi0tLSArIC0t LTwvY29kZT4gYmVsb3cgdGhlIGJveCBhbmQgZHJhZ2dpbmcuIFRoZSBib3ggc2l6ZSB3aWxs IGJlIHJlbWVtYmVyZWQgdmlhIGEgY29va2llIGZvciAzMCBkYXlzIGZyb20geW91ciBsYXN0 IGFkanVzdG1lbnQuPGJyIC8+CjwvcD4KCgk8cD5QbHVnaW5zIGFyZSBsaW1pdGVkIHRvIDY0 a0Igb2YgY29kZSBzbyB0aGVyZSBpcyBhbHNvIGEgY2hhcmFjdGVyIGNvdW50ZG93biBqdXN0 IGJlbG93IHRoZSBlZGl0IGJveC4gSWYgeW91IHN0YXJ0IGFwcHJvYWNoaW5nIHRoZSBsaW1p dCwgaXQgbWlnaHQgYmUgd29ydGggY29uc2lkZXJpbmcgc3BsaXR0aW5nIHlvdXIgcGx1Z2lu IGludG8gYSBmZXcgcGFydHM8L2xpPgoJCTxsaT48c3Ryb25nPlBsdWdpbiB0eXBlPC9zdHJv bmc+IDogY2hvb3NlIG9uZSBvZiB0aGUgdHlwZXMgdGhhdCBiZXN0IGZpdHMgdGhlIGludGVu ZGVkIHVzZSBvZiB5b3VyIHBsdWdpbi4gSWYgeW91IGNob29zZSAmIzgyMTY7Q2xpZW50JiM4 MjE3OyBhbmQgdHJ5IHRvIGFjY2VzcyB0aGUgYWRtaW4gc2lkZSBpbiB5b3VyIGNvZGUsIGEg d2FybmluZyB3aWxsIGJlIGlzc3VlZCB3aGVuIHRoZSBwbHVnaW4gaXMgc2F2ZWQgc28geW91 IGNhbiBjaG9vc2UgYSBtb3JlIGFwcHJvcHJpYXRlIHR5cGU8L2xpPgoJCTxsaT48c3Ryb25n PkxvYWQgb3JkZXI8L3N0cm9uZz4gOiBjaG9vc2UgdGhlIHJlY29tbWVuZGVkIG9yZGVyIGlu IHdoaWNoIHlvdSB0aGluayB5b3VyIHBsdWdpbiBzaG91bGQgYmUgbG9hZGVkIGJ5IHVzZXJz LiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgZGVmYXVsdCBvZiAmIzgyMTY7NSYjODIxNzsgaXMg ZmluZSBidXQgZm9yIHNwZWNpYWwgY2FzZXMgd2hlcmUgeW91ciBwbHVnaW4gaGFzIHRvIHNl dCB1cCBhbiBlbnZpcm9ubWVudCBvciBoYXMgdG8gd2FpdCBmb3Igb3RoZXIgcGx1Z2lucyB0 byBsb2FkIGZpcnN0LCB5b3UgbWlnaHQgcmVxdWlyZSBvbmUgb2YgdGhlIG51bWJlcnMgZWl0 aGVyIHNpZGUuIEJlIGF3YXJlIHRoYXQgdGhpcyBpcyBhIDxlbT5yZWNvbW1lbmRhdGlvbjwv ZW0+IGFuZCBpcyBvdmVycmlkYWJsZSBieSB0aGUgc2l0ZSBhZG1pbi4gSWYgdGhlIHBsdWdp biBpcyBhbHJlYWR5IGRlcGxveWVkIG9uIGEgc2l0ZSwgdGhlIGxvYWQgb3JkZXIgYWxyZWFk eSBzZXQgd2lsbCBiZSB1c2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhpcyB2 YWx1ZS4gT25seSBuZXcgaW5zdGFsbGF0aW9ucyB3aWxsIGJlIHNldCB0byB0aGlzIHZhbHVl IGJ5IGRlZmF1bHQ8L2xpPgoJCTxsaT48c3Ryb25nPlZlcnNpb248L3N0cm9uZz4gOiB0aGUg Y3VycmVudCB2ZXJzaW9uIG9mIHlvdXIgcGx1Z2luLiBUbyB0aGUgcmlnaHQgb2YgdGhpcyBi b3ggd2lsbCBiZSBvbmUgb2YgdHdvIGl0ZW1zOgoJPHVsPgoJCTxsaT48c3Ryb25nPlJlc3Rv cmUgcG9pbnQ8L3N0cm9uZz4gOiBzZWxlY3RpbmcgdGhpcyBjaGVja2JveCB3aWxsICh1cG9u IHNhdmUpIHN0b3JlIHRoZSBjdXJyZW50IGNvZGUgYXMgYSBiYXNlbGluZSB0byB3aGljaCB5 b3UgbWF5ICYjODIyMDtyb2xsIGJhY2smIzgyMjE7IHRvIGF0IGEgbGF0ZXIgZGF0ZS4gU2Vl IDxhIGhyZWY9IiNyZXN0b3JlIj5yZXN0b3JlIHBvaW50czwvYT4gZm9yIG1vcmU8L2xpPgoJ CTxsaT48c3Ryb25nPlJlbmFtZSBmaWxlPC9zdHJvbmc+IDogYnkgZGVmYXVsdCwgd2hlbiB5 b3Ugc2F2ZSBhIGZpbGUgdGhhdCBpcyBiZWluZyBlZGl0ZWQgaW4gdGhlIHBsdWdpbiBjYWNo ZSBkaXJlY3RvcnksIGl0IGlzIG92ZXJ3cml0dGVuIHdpdGggeW91ciBjaGFuZ2VzLiBPbmNl IGEgcGx1Z2luIGlzIHJlbGVhc2VkIHlvdSB3b3VsZCBub3JtYWxseSBkb3dubG9hZCBhIGNv cHkgdmlhIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xh c3M9ImNhcHMiPkZUUDwvc3Bhbj48L3NwYW4+PC9zcGFuPiBmcm9tIHRoZSBwbHVnaW5fY2Fj aGVfZGlyIGZvciBzYWZla2VlcGluZy4gSWYgeW91IHRoZW4gc3Vic2VxdWVudGx5IG1vZGlm eSB0aGUgcGx1Z2luIGFuZCBpbmNyZWFzZSB0aGUgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkg d2lzaCB0byBhbHRlciB0aGUgZmlsZW5hbWUgYXMgd2VsbC4gQ2hlY2tpbmcgdGhpcyBib3gg d2lsbCAodXBvbiBzYXZlKSByZW5hbWUgdGhlIGZpbGUgaW4gdGhlIHBsdWdpbiBjYWNoZSBk aXJlY3RvcnkgdG8gcmVmbGVjdCB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlci4gU2VlIHRo ZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBwYWdlPC9hPiBmb3IgZGV0YWlscyBvbiBj dXN0b21pc2luZyB0aGUgZmlsZW5hbWUgZm9ybWF0PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+ PHN0cm9uZz5BdXRob3I8L3N0cm9uZz4gOiB5b3UhPC9saT4KCQk8bGk+PHN0cm9uZz5XZWJz aXRlPC9zdHJvbmc+IDogeW91ciBob21lIHBhZ2Ugb3IgcGx1Z2luIHBhZ2UuIFdpbGwgYmUg aHlwZXJsaW5rZWQgdG8geW91ciBBdXRob3IgbmFtZSBpbiB0aGUgbGlzdCBwYWdlPC9saT4K CQk8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPiA6IHZlcnkgYnJpZWYgb25lLWxp bmVyIGRlc2NyaWJpbmcgeW91ciBwbHVnaW4mIzgyMTc7cyBjb3JlIGZ1bmN0aW9uIC8gcmVh c29uIGZvciBleGlzdGVuY2U8L2xpPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBIZWxwPC9zdHJv bmc+IDogZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsaW5nIHRoZSBwbHVnaW4gdXNhZ2UuIENh biAocHJvYmFibHkgc2hvdWxkISkgYmUgd3JpdHRlbiB1c2luZyA8YSBocmVmPSJodHRwOi8v dGV4dHBhdHRlcm4uY29tL3RleHRpbGUtc2FuZGJveCI+VGV4dGlsZTwvYT4uIFRoZXJlIHdl cmUgc29tZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3Bp Yy5waHA/aWQ9MjUzMjciPmxvb3NlIGRvY3VtZW50YXRpb24gZ3VpZGVsaW5lczwvYT4gcHJv cG9zZWQgdGhhdCBzZXJ2ZSBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdGUgdGhhdCB0 aGUgY2hhcmFjdGVyIGNvdW50ZG93biBoZXJlIGlzIG9ubHkgYXBwcm94aW1hdGUgYmVjYXVz ZSB3aGVuIHlvdXIgcGx1Z2luIGlzIHNhdmVkIGFuZCB0aGUgaGVscCBpcyBjb252ZXJ0ZWQg dG8gPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0i Y2FwcyI+SFRNTDwvc3Bhbj48L3NwYW4+PC9zcGFuPiwgaXQgdXN1YWxseSB0YWtlcyB1cCBt b3JlIHNwYWNlIHRoYW4gVGV4dGlsZTsgcGxlYXNlIGNoZWNrIHRoYXQgeW91ciBoZWxwIGZp bGUgcmVuZGVycyBjb3JyZWN0bHkgd2hlbiB5b3VyIHBsdWdpbiBpcyBleHBvcnRlZDwvbGk+ CgkJPGxpPjxzdHJvbmc+U3R5bGU8L3N0cm9uZz4gOiBBbnkgPHNwYW4gY2xhc3M9ImNhcHMi PjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bh bj48L3NwYW4+IHN0eWxlIHJ1bGVzIHlvdSB3aXNoIHRvIGFwcGx5IHRvIHlvdXIgZG9jdW1l bnRhdGlvbiB0byBtYWtlIGl0IG1vcmUgcHJldHR5LiBJdCYjODIxNztzIGJlc3QgdG8gdGFy Z2V0IHlvdXIgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgYnkgc3Vycm91bmRpbmcgdGhl IGVudGlyZSBQbHVnaW4gSGVscCBzZWN0aW9uIHdpdGggc29tZXRoaW5nIGxpa2U6IDxjb2Rl PiZhbXA7YW1wO2x0O2RpdiBpZD0mYW1wO2FtcDtxdW90O2FiY19oZWxwJmFtcDthbXA7cXVv dDsmYW1wO2FtcDtndDtoMS4gRG9jcyBnbyBoZXJlLi4uJmFtcDthbXA7bHQ7L2RpdiZhbXA7 YW1wO2d0OzwvY29kZT4uPGJyIC8+CjwvcD4KCgk8cD5Ob3RlIHRoYXQgYm90aCB0aGUgUGx1 Z2luIEhlbHAgYW5kIFN0eWxlIGFyZSBnb3Zlcm5lZCBieSBhIHNpemUgbGltaXQuIFNpbmNl IHRoZXkgYXJlIGJvdGggc3RvcmVkIGluIHRoZSBzYW1lIDY0a0IgZmllbGQsIHRoZSBzaXpl IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZW0uIFN0eWxlcyBhcmUgPGVtPm5vdDwvZW0+IHBhc3Nl ZCB0aHJvdWdoIHRoZSBUZXh0aWxlIHByb2Nlc3NvciBhbmQgeW91IGRvbiYjODIxNzt0IG5l ZWQgdG8gYWRkIHRoZSA8Y29kZT4mYW1wO2FtcDtsdDtzdHlsZSZhbXA7YW1wO2d0OzwvY29k ZT4gdGFnczsgdGhlIENvbXBvc2VyIHdpbGwgZG8gdGhhdCBmb3IgeW91IChidXQgc2VlIDxh IGhyZWY9IiNub3RlcyI+Tm90ZXM8L2E+KTwvbGk+CgkJPGxpPjxzdHJvbmc+U2F2ZTwvc3Ry b25nPiA6IGNvbW1pdHMgdGhlIGNoYW5nZXM8L2xpPgoJCTxsaT48c3Ryb25nPlsgVmlldyBI ZWxwIF08L3N0cm9uZz4gOiBzaG93cyB0aGUgZG9jdW1lbnRhdGlvbiBhcyB1c2VycyB3aWxs IHNlZSBpdCAoaS5lLiBUZXh0aWxlIHByb2Nlc3NlZCBpbnRvIDxzcGFuIGNsYXNzPSJjYXBz Ij48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+PC9z cGFuPjwvc3Bhbj4pLiBBbnkgaGVscCB0ZXh0IG92ZXIgNjRrQiBpbiBsZW5ndGggaXMgdHJ1 bmNhdGVkIHNvIHlvdSBjYW4gdmVyaWZ5IHRoYXQgYWxsIHlvdXIgZG9jdW1lbnRhdGlvbiBm aXRzPC9saT4KCTwvdWw+PC9wPgoKCTxwPk9uY2UgeW91IGhhdmUgc2F2ZWQgeW91ciBwbHVn aW4sIHRoZXJlIGlzIGEgc2VjdGlvbiByaWdodCBhdCB0aGUgYm90dG9tIHRoYXQgYWxsb3dz IHlvdSB0byBleHBvcnQgeW91ciBwbHVnaW4gaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHM6PC9w PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gY29kZSBmb3IgZGlzdHJpYnV0aW9uPC9z dHJvbmc+IDogaXMgYSBkaXJlY3QgY29weSAmIzgyMTY7biYjODIxNzsgcGFzdGUgYXJlYSB0 aGF0IGNvbnRhaW5zIHlvdXIgZW50aXJlIHBsdWdpbiArIGRvY3MuIFlvdSBjYW4gdGFrZSB0 aGlzIGVudGlyZSBhcmVhIGFuZCBwYXN0ZSBpdCBpbnRvIHRoZSAmIzgyMTY7SW5zdGFsbCBw bHVnaW4mIzgyMTc7IGJveCBvbiB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlPC9saT4K CQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJjX215cGx1Z2luLnR4dDwvc3Ryb25nPiA6IGNv bnZlcnRzIHRoZSBwbHVnaW4gaGVscCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xh c3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPjwvc3Bhbj48L3NwYW4+ IGFuZCBzYXZlcyB0aGUgcGx1Z2luIHRvIHlvdXIgY29tcHV0ZXIgYXMgYSByZWRpc3RyaWJ1 dGFibGUgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0dGVybiB1c2VycyB0byBpbnN0YWxs PC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJjX215cGx1Z2luLnR4dCAoY29tcHJl c3NlZCk8L3N0cm9uZz4gOiBjb252ZXJ0cyB0aGUgcGx1Z2luIGhlbHAgdG8gPHNwYW4gY2xh c3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj48L3NwYW4+PC9zcGFuPiBhbmQgc2F2ZXMgdGhlIHBsdWdpbiBhcyBhIHJlZGlzdHJp YnV0YWJsZSwgZ3ppcHBlZCB0ZXh0IGZpbGUgZm9yIG90aGVyIFRleHRwYXR0ZXJuIHVzZXJz IHRvIGluc3RhbGwuIFVzZWZ1bCBmb3IgbGFyZ2UgcGx1Z2lucyBvciB0byBvZmZlciBhbiBh bHRlcm5hdGl2ZSBmb3IgcGVvcGxlIHdobyBoYXZlIHN0cmluZ2VudCBzaXplIGxpbWl0cyBp bXBvc2VkIGJ5IHRoZWlyIGhvc3Q8L2xpPgoJCTxsaT48c3Ryb25nPkV4cG9ydCBhcyBhYmNf bXlwbHVnaW4ucGhwPC9zdHJvbmc+IDogc2F2ZXMgdGhlIHBsdWdpbiBpbiBhIFRleHRwYXR0 ZXJuIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdC4gVXNlZnVsIGZvciBrZWVwaW5nIHRoZSBw bHVnaW4gZm9yIHlvdXJzZWxmICYjODIxMjsgY29tcGxldGUgd2l0aCBUZXh0aWxlIG1hcmt1 cCAmIzgyMTI7IHNvIGl0IGNhbiBiZSBsYXRlciBlZGl0ZWQgYW5kIHJlLWlzc3VlZCAvIHVw ZGF0ZWQgb3Igc2hhcmVkIHdpdGggb3RoZXIgZGV2ZWxvcGVycyB3aG8gaGF2ZSB0aGUgUGx1 Z2luIENvbXBvc2VyIG9yIHplbV90cGwucGhwIGNvbXBpbGVyPC9saT4KCTwvdWw+CgoJPHA+ Tm90ZSB0aGF0IHdoZW4gZXhwb3J0aW5nIGFzIGEgc3RhbmRhcmQgcGx1Z2luLCB0aGUgVGV4 dGlsZSBwcm9jZXNzb3IgYXR0ZW1wdHMgdG8gZGVjaWRlIGlmIHlvdSBoYXZlIHVzZWQgVGV4 dGlsZSBvciBub3Q7IGl0IHNpbXBseSBsb29rcyBmb3IgYSB0ZXh0aWxlZCBoZWFkZXIgKDxj b2RlPmgxLjwvY29kZT4gdGhyb3VnaCA8Y29kZT5oNi48L2NvZGU+KS4gUnVubmluZyBwdXJl IDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNh cHMiPkhUTUw8L3NwYW4+PC9zcGFuPjwvc3Bhbj4gdGhyb3VnaCBUZXh0aWxlIG1heSBvY2Nh c2lvbmFsbHkgY2F1c2UgZW5jb2RpbmcgaXNzdWVzIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2lu YWwgY2hhcmFjdGVyIHNldCB1c2VkIHNvIGl0IGlzIGFsd2F5cyBiZXN0IHRvIHRyeSBhbmQg c3RpY2sgdG8gVGV4dGlsZSBhcyB0aGUgZG9jdW1lbnRhdGlvbiBzeXN0ZW0uPC9wPgoKCTxo MyBpZD0icmVzdG9yZSI+UmVzdG9yZSBwb2ludHM8L2gzPgoKCTxwPldoZW4gYSBwbHVnaW4g aXMgaW5zdGFsbGVkLCBhIGNvcHkgaXMga2VwdCBpbiB0aGUgZGF0YWJhc2UuIElmIHRoZSBw bHVnaW4gY29kZSAobm90IGhlbHAgdGV4dCkgaXMgc3Vic2VxdWVudGx5IGVkaXRlZCwgdGhl IHBsdWdpbiBpcyBjb25zaWRlcmVkICYjODIyMDttb2RpZmllZCYjODIyMTs7IGluZGljYXRl ZCBpbiB0aGUgUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZSBhbmQgQWRtaW4gLSZndDsgUGx1 Z2lucyBwYWdlLiBTb21ldGltZXMgeW91IG1heSB3aXNoIHRvIHJldmVydCBhbnkgY2hhbmdl cyBiYWNrIHRvIHRoZSBhcy1pbnN0YWxsZWQgc3RhdGUgYW5kIHRoZSBDb21wb3NlciBhbGxv d3MgdGhpcy48L3A+CgoJPHA+QW55IHRpbWUgYSBwbHVnaW4gaXMgbWFya2VkIGFzICYjODIx Njttb2RpZmllZCYjODIxNzssIHRoZSB2ZXJzaW9uIG51bWJlciBiZWNvbWVzIGNsaWNrYWJs ZSBpbiB0aGUgPGEgaHJlZj0iI2xpc3RwYWdlIj5saXN0PC9hPiBwYWdlLiBDbGlja2luZyBp dCAoYW5kIGNvbmZpcm1pbmcgeW91IGFyZSBzdXJlKSB3aWxsIHdpcGUgb3V0IGFueSBjaGFu Z2VzIHlvdSBtYWRlIGFuZCByZXR1cm4gdGhlIHBsdWdpbiB0byBpdHMgaW5zdGFsbGVkIHN0 YXRlLjwvcD4KCgk8cD5EdXJpbmcgdGhlIGVkaXRpbmcgcHJvY2VzcyBvZiB5b3VyIG93biBw bHVnaW5zLCBpdCBtYXkgYmUgdGhhdCBhdCBjZXJ0YWluIHRpbWVzIHlvdSB3aXNoIHRvIHB1 dCBhIHN0YWtlIGluIHRoZSBncm91bmQgYW5kIHNheSAmIzgyMjA7dGhpcyBpcyBteSBjdXJy ZW50IGJhc2VsaW5lIHRoYXQgSSBtaWdodCB3YW50IHRvIHJldHVybiB0byBsYXRlciYjODIy MTsuIFBlcmhhcHMgeW91IGFyZSBhYm91dCB0byBtYWtlIHNvbWUgbW9uc3RlciBlZGl0cyBv ciB0cnkgc29tZXRoaW5nIGV4cGVyaW1lbnRhbCBhbmQgd2FudCBhbiBlYXN5IGZhbGxiYWNr IG1lY2hhbmlzbS4gVGhhdCYjODIxNztzIHdoZXJlIHRoZSAmIzgyMjA7UmVzdG9yZSBwb2lu dCYjODIyMTsgY2hlY2tib3ggY29tZXMgaW4uPC9wPgoKCTxwPkJ5IGNoZWNraW5nIHRoZSBi b3ggd2hlbiB5b3Ugc2F2ZSB5b3VyIHBsdWdpbiwgdGhlIGN1cnJlbnQgY29kZSB3aWxsIGJl Y29tZSB5b3VyIG5ldyByb2xsYmFjayBwb2ludCBhbmQgdGhlIHBsdWdpbiB3aWxsIG5vIGxv bmdlciBiZSBtYXJrZWQgJiM4MjIwO21vZGlmaWVkJiM4MjIxOy4gQW55IGNoYW5nZXMgbWFk ZSBiZWZvcmVoYW5kIHdpbGwgbm90IGJlIHJlY292ZXJhYmxlIHNvIHlvdSB3aWxsIGhhdmUg dG8gcmVseSBvbiB5b3VyIG93biBiYWNrdXBzIGlmIHlvdSB3aXNoIHRvIGdvIGJhY2sgZnVy dGhlci4gQW55IGVkaXRzIHlvdSBtYWtlIGFmdGVyIGNyZWF0aW5nIGEgcmVzdG9yZSBwb2lu dCBjYW4gYmUgdW5kb25lIGJ5IHZpc2l0aW5nIHRoZSBsaXN0IHBhZ2UgYW5kIGNsaWNraW5n IHRoZSB2ZXJzaW9uIG51bWJlciBuZXh0IHRvIHlvdXIgcGx1Z2luLiBDdXJyZW50bHksIG9u bHkgb25lIHJvbGxiYWNrIHBvaW50IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLjwv cD4KCgk8aDMgaWQ9InNldHVwcGFnZSI+U2V0dXAgcGFnZTwvaDM+CgoJPHA+Q2xpY2tpbmcg U2V0dXAgZnJvbSB0aGUgbWFpbiA8YSBocmVmPSIjbGlzdHBhZ2UiPmxpc3Q8L2E+IHBhZ2Ug YWxsb3dzIGFjY2VzcyB0byB0aGUgcGx1Z2luIHByZWZlcmVuY2VzLjwvcD4KCgk8cD5Zb3Ug Y2FuIEluc3RhbGwgdGhlbSAmIzgyMTI7IHdoaWNoIHJldGFpbnMgYW55IHByZXZpb3VzIHNl dHRpbmdzIGFuZCBhZGRzIG5ldyBvbmVzIHdoZW4gdXBkYXRpbmcgdGhlIHBsdWdpbiAmIzgy MTI7IG9yIERlbGV0ZSB0aGVtLiBUaGUgcGx1Z2luIGNoZWNrcyBpZiBhbGwgcmVxdWlyZWQg cHJlZmVyZW5jZXMgYXJlIGF2YWlsYWJsZSBhbmQgb2ZmZXJzIHlvdSB0aGUgY2hvaWNlIG9m IGRlbGV0aW5nL3JlaW5zdGFsbGluZyBpbiBjYXNlIHRoZSBwcmVmcyBiZWNvbWUgY29ycnVw dGVkIG9yIG5lZWQgdXBkYXRpbmcuPC9wPgoKCTxwPk9uY2UgdGhlIHByZWZzIGFyZSBpbnN0 YWxsZWQgeW91IHdpbGwgc2VlIHRoZSBhdmFpbGFibGUgb3B0aW9uczo8L3A+CgoJPHVsPgoJ CTxsaT48c3Ryb25nPlBsdWdpbiBlZGl0b3I8L3N0cm9uZz4gOiB5b3UgbWF5IGNob29zZSB0 byBlZGl0IHRoZSBjb2RlIHVzaW5nIGEgM3JkIHBhcnR5IHN5bnRheCBoaWdobGlnaHRlci4g Q3VycmVudCBzdXBwb3J0IGlzIGZvciBFZGl0IEFyZWEgYW5kIChzb3J0IG9mKSBDb2RlUHJl c3MgKHNlZSB0aGUgPGEgaHJlZj0iI25vdGVzIj5ub3RlczwvYT4pLiBDaG9vc2UgdGhlIHN5 c3RlbSBoZXJlLCB3aGVyZWJ5IHRoZSBib3ggYmVuZWF0aCBiZWNvbWVzIGF2YWlsYWJsZSBz byB5b3UgY2FuIHNwZWNpZnkgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0i Y2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj48L3NwYW4+PC9zcGFuPiBwYXRo IG9mIHRoZSBFZGl0QXJlYSBpbnN0YWxsYXRpb24gb24geW91ciBzZXJ2ZXI7IHRoaXMgaXMg bm9ybWFsbHkgZXZlcnl0aGluZyB1cCB0byBhbmQgaW5jbHVkaW5nIC9lZGl0X2FyZWEuIE5v IHRyYWlsaW5nIHNsYXNoIGlzIHJlcXVpcmVkPC9saT4KCQk8bGk+PHN0cm9uZz5QbHVnaW4g ZWRpdG9yIHdpZHRoPC9zdHJvbmc+IDogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdpZGUg dG8gbWFrZSB0aGUgYm94ZXMgb24gdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRpdDwvYT4g cGFnZSB0byBzdWl0IHlvdXIgc2NyZWVuIHJlc29sdXRpb248L2xpPgoJCTxsaT48c3Ryb25n PkhlbHAgZWRpdG9yPC9zdHJvbmc+IDogeW91IG1heSBjaG9vc2UgdG8gZWRpdCB0aGUgaGVs cCBtYW51YWxseSB2aWEgVGV4dGlsZSBvciB1c2UgVGlueU1DRSBmb3IgYSBtb3JlIDxzcGFu IGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPldZ U0lXWUc8L3NwYW4+PC9zcGFuPjwvc3Bhbj4gZXhwZXJpZW5jZS4gVGhpcyBpcyBleHBlcmlt ZW50YWwgYW5kIHByb2JhYmx5IHdvbiYjODIxNzt0IHdvcmsgcmlnaHQgbm93PC9saT4KCQk8 bGk+PHN0cm9uZz48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFu IGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+PC9zcGFuPjwvc3Bhbj4gZXhwb3J0IG9yZGVyPC9z dHJvbmc+IDogd2hlbiBzYXZpbmcgeW91ciBwbHVnaW4gaW4gdGhlIHN0YW5kYXJkIHRlbXBs YXRlIGZvcm1hdCwgdGhpcyBnb3Zlcm5zIHdoZXRoZXIgeW91IHByZWZlciB0aGUgY29kZSBi bG9jayB0byBiZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIGFuZCB0aGUgaGVscCBibG9jayBi ZWxvdywgb3IgdmljZSB2ZXJzYTwvbGk+Cgk8L3VsPgoKCTxwPlRoZSBuZXh0IHRocmVlIHRl eHRib3hlcyBhcmUgYWxsIHZlcnkgc2ltaWxhcjsgdGhleSBkZWZpbmUgdGhlIGZvcm1hdCBv ZiB0aGUgZmlsZW5hbWVzIHdoZW4geW91IGV4cG9ydCBwbHVnaW5zLiBUaGUgZmlyc3QgaXMg Zm9yIHdoZW4geW91IGV4cG9ydCBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4g Y2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5CQVNFPC9zcGFuPjwvc3Bhbj48L3Nw YW4+LTY0IHBsdWdpbnM7IHRoZSBzZWNvbmQgaXMgZm9yIGNvbXByZXNzZWQgcGx1Z2luczsg dGhlIHRoaXJkIGlzIGZvciBleHBvcnRpbmcgYSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2Fw cyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+PC9z cGFuPjwvc3Bhbj4gdGVtcGxhdGUuPC9wPgoKCTxwPldoZXJldmVyIHlvdSB0eXBlIDxjb2Rl PntuYW1lfTwvY29kZT4sIHRoZSBwbHVnaW4gbmFtZSB3aWxsIGFwcGVhci4gU2ltaWxhcmx5 LCA8Y29kZT57dmVyc2lvbn08L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY3Vy cmVudCBwbHVnaW4gdmVyc2lvbiBudW1iZXIuIFlvdSBjYW4gdHlwZSBhbnl0aGluZyB5b3Ug bGlrZSBpbiB0aGVzZSBib3hlcywgYnV0IGl0JiM4MjE3O3MgbW9yZSB1c2VmdWwgdG8gaW5j bHVkZSBib3RoIG9mIHRoZSByZXBsYWNlbWVudCBzdHJpbmdzIHNvbWV3aGVyZSBpbiBlYWNo IGJveCBzbyB5b3UgZG9uJiM4MjE3O3QgZ2V0IG5hbWUgLyB2ZXJzaW9uIGNsYXNoZXMuPC9w PgoKCTxwPkZvciBleGFtcGxlLCBpZiB5b3UgZG9uJiM4MjE3O3QgbGlrZSB0aGUgZmFjdCB0 aGF0IHppcHBlZCBwbHVnaW5zIGFyZSBleHBvcnRlZCBhcyA8Y29kZT5wZnhfbXlfcGx1Z2lu X3YwLjFfemlwLnR4dDwvY29kZT4sIHlvdSBjYW4gY2hhbmdlIGl0LiBQZXJoYXBzIHlvdSBt YXkgcHJlZmVyIDxjb2RlPnBmeF9teV9wbHVnaW4tY29tcHJlc3NlZC0wLjEudHh0PC9jb2Rl Pi4gSW4gd2hpY2ggY2FzZSwgc2V0IHRoZSAybmQgYm94IHRvIDxjb2RlPntuYW1lfS1jb21w cmVzc2VkLXt2ZXJzaW9ufS50eHQ8L2NvZGU+LjwvcD4KCgk8cD5UaGUgZXh0ZW5zaW9uIHNo b3VsZCB1c3VhbGx5IGJlIHNwZWNpZmllZCBzbyB5b3VyIHN5c3RlbS9icm93c2VyIGtub3dz IHRoZSBmaWxlJiM4MjE3O3MgdHlwZSB3aGVuIGl0IGlzIGV4cG9ydGVkLCBidXQgaXQmIzgy MTc7cyBub3QgbWFuZGF0b3J5IGFzIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xh c3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5NSU1FPC9zcGFuPjwvc3Bhbj48L3NwYW4+ IHR5cGUgaXMgZ2l2ZW4gc28gKGdvb2QpIGJyb3dzZXJzIHNob3VsZCByZWFkIHRoYXQuPC9w PgoKCTxwPkZpbmFsbHksIGlmIHlvdSB3aXNoIHRvIHRha2UgYWR2YW50YWdlIG9mIGhlbHAg Y2FjaGVpbmcsIHB1dCB0aGUgcGF0aCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhl IDxzdHJvbmc+Q2FjaGUgZGlyPC9zdHJvbmc+IGJveC4gRW1wdHkgdGhlIGJveCBpZiB5b3Ug cHJlZmVyIHNhdmVzIGFuZCBleHBvcnRzIHRvIGJlIHNsb3dlciEgRGVmYXVsdHMgdG8gPHNw YW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPjwvc3Bhbj48L3NwYW4+JiM4MjE3O3MgdGVtcG9yYXJ5IGRpcmVjdG9yeS48 L3A+CgoJPGgzIGlkPSJub3RlcyI+Tm90ZXMgLyBrbm93biBpc3N1ZXM8L2gzPgoKCTxvbD4K CQk8bGk+TW9yZSBlZGl0b3JzIGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIENvbXBvc2Vy IGZhaXJseSBlYXNpbHkuIElmIHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBpbiBjb250YWN0 LiBCZSB3YXJuZWQgdGhhdCB0aGUgZWRpdG9ycyBkbyB0ZW5kIHRvIHNsb3cgdGhlIHBsdWdp biBkb3duLCBlc3BlY2lhbGx5IGFzIGNvZGUgc2l6ZSBpbmNyZWFzZXMuPC9saT4KCQk8bGk+ VGVudGF0aXZlIHN1cHBvcnQgZm9yIENvZGVQcmVzcyBpcyBhdmFpbGFibGUgYnV0IGl0IGlu ZXhwbGljYWJseSBibGFua3Mgb3V0IHRoZSBwbHVnaW4gY29kZSB3aGVuIHNhdmVkLCBzbyBz dXBwb3J0IGlzIGRpc2FibGVkIGZvciBub3cuIElmIGFueW9uZSBjYW4gc2hlZCBhbnkgbGln aHQgb24gd2h5IGl0IGRvZXMgdGhpcywgcGxlYXNlIHNwZWFrIHVwISBMb29rIGluIHRoZSBp ZWRfcGx1Z2luX3NldHVwKCkgZnVuY3Rpb24gdG93YXJkcyB0aGUgYm90dG9tIG9mIHRoZSBm aWxlLCB1bmNvbW1lbnQgdGhlIGNvbW1lbnRlZCBvdXQgbGluZSBhbmQgY29tbWVudCBvdXQg dGhlIG9uZSBiZW5lYXRoIGl0IHRvIGVuYWJsZSBzdXBwb3J0LCB0aGVuIHZpc2l0IHRoZSBT ZXR1cCBwYWdlIGFuZCBzZWxlY3QgQ29kZVByZXNzIGZyb20gdGhlIGxpc3QuIERvbiYjODIx Nzt0IGV4cGVyaW1lbnQgd2l0aCB0aGlzIHNldHRpbmcgb24gYW4gaW1wb3J0YW50IHBsdWdp biA6LSk8L2xpPgoJCTxsaT5XaGVuIGEgcGx1Z2luIGlzIHNhdmVkIHRvIHRoZSBwbHVnaW5f Y2FjaGVfZGlyLCBpZiB5b3UgaGF2ZSBub3QgcHV0IDxjb2RlPiZhbXA7YW1wO2x0O3N0eWxl JmFtcDthbXA7Z3Q7PC9jb2RlPiBtYXJrZXJzIGluIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMi PjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bh bj48L3NwYW4+IGJsb2NrIHRoZXkgd2lsbCBiZSBhZGRlZCBmb3IgeW91IGluIHRoZSB0ZXh0 IGFyZWEgYnV0IDxlbT5ub3Q8L2VtPiBzYXZlZCBpbiB0aGUgYWN0dWFsIHRlbXBsYXRlIHVu dGlsIHlvdSBzYXZlIGl0IGFnYWluIChleHBvcnRpbmcgYXMgYSA8c3BhbiBjbGFzcz0iY2Fw cyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+PC9z cGFuPjwvc3Bhbj4gZmlsZSBpcyB1bmFmZmVjdGVkKS4gU28gaWYgeW91IGFyZSBpbiB0aGUg aGFiaXQgb2YgbWFudWFsbHkgZG93bmxvYWRpbmcgdGhlIGZpbGUgZnJvbSB5b3VyIDxzcGFu IGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkZU UDwvc3Bhbj48L3NwYW4+PC9zcGFuPiBjbGllbnQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBzYXZl LCBqdXN0IHNhdmUgdGhlIHBsdWdpbiBhZ2FpbiB0byBiZSBzdXJlPC9saT4KCTwvb2w+CgoJ PGgzIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDM+CgoJPHVsPgoJCTxsaT4yNSBGZWIg MDYgfCAwLjEgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4yNSBGZWIgMDYgfCAwLjIg fCBBZGRlZCAmIzgyMTY7c2F2ZSBhcyYjODIxNzsgb3B0aW9uPC9saT4KCQk8bGk+MTcgTWFy IDA2IHwgMC4zIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMgcGhwJiM4MjE3OzwvbGk+CgkJPGxp PjEwIEFwciAwNiB8IDAuNCB8IEFkZGVkIHN1cHBvcnQgZm9yIHBsdWdpbl9jYWNoZV9kaXI8 L2xpPgoJCTxsaT4wNCBKYW4gMDggfCAwLjUgfCBGdWxsIHN1cHBvcnQgZm9yIHN0ZCB0ZW1w bGF0ZTsgY29tcHJlc3NlZCBwbHVnaW5zOyBMaWJyYXJ5IHBsdWdpbnM7IFRleHRpbGUgaGVs cCBhbmQgc3R5bGluZzsgaW50ZWdyYXRpb24gd2l0aCBuZXQtY2FydmVyJiM4MjE3O3MgUGx1 Z2luIEhlbHAgVmlld2VyPC9saT4KCQk8bGk+MDcgSmFuIDA4IHwgMC42IHwgQnVpbHQtaW4g aGVscCB2aWV3ZXIgKHRoYW5rcyBuZXQtY2FydmVyKTsgc3VwcG9ydCBmb3IgRWRpdCBBcmVh ICZhbXA7IENvZGVQcmVzcyhpc2gpICh0aGFua3MgdmFyaWFhcyk7IEhlbHAgYmxvY2svQ29k ZSBibG9jayBwb3NpdGlvbiBzd2l0Y2hhYmxlIG9uIGV4cG9ydDsgYWRkZWQgU2V0dXAgcHJl ZnMgcGFnZTsgbGluZSBicmVhay9zdHlsZSBidWdmaXhlczwvbGk+CgkJPGxpPjA4IEphbiAw OCB8IDAuNyB8IFJlLWltcG9ydGluZyBwbHVnaW5zIG5vdyByZXRhaW5zIHN0eWxlIGJsb2Nr OyBhZGRlZCAmIzgyMTY7YWRtaW4gc2lkZSBwbHVnaW4gd2l0aCBjbGllbnQtc2lkZSB0eXBl JiM4MjE3OyB3YXJuaW5nOyBjaGFuZ2VkIGJ1dHRvbiBzdHlsaW5nIGFuZCBwb3NpdGlvbnMg KGFsbCB0aGFua3MgbmV0LWNhcnZlcik7IGdUeHQoKSBwcmVmIGxhYmVscyBhbmQgJiM4MjE2 O2ludGVsbGlnZW50JiM4MjE3OyBwcmVmcyAoZ28galF1ZXJ5IGdvISk7IGNhY2hlZCBwbHVn aW5zIG5vdyBhbHNvIGhhdmUgZGlyZWN0IGV4cG9ydCBmcm9tIEVkaXQgcGFnZTsgJiM4MjE2 O2RvbiYjODIxNzt0IHRleHRpbGUgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJj YXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj48L3NwYW4+PC9zcGFuPiYjODIx NzsgY2hlY2s7IG1pbm9yIGJ1Z2ZpeGVzPC9saT4KCQk8bGk+MDkgSmFuIDA4IHwgMC43MSB8 IFRleHRhcmVhIHdpZHRoIGNhbiBub3cgYmUgY29udHJvbGxlZCBmcm9tIHByZWZzLCBhbmQg aGVpZ2h0IGZyb20gYSBkcmFnIGJhcjsgZGVmYXVsdCB3aWR0aCBpbmNyZWFzZWQgdG8gMTEw IGNoYXJzOyBwdWJsaXNoIHBsdWdpbnMgZnJvbSB0aGUgbGlzdCBwYWdlOyBJbnN0YWxsIGJ1 dHRvbiByZW1vdmVkIHdoZW4gcHJlZnMgYWxsIGNvcnJlY3RseSBpbnN0YWxsZWQgKGFsbCB0 aGFua3MgdmFyaWFhcyAvIGlibGFzdG9mZik8L2xpPgoJCTxsaT4xMCBKYW4gMDggfCAwLjcy IHwgRml4ZWQgYnVnIGlmIHBsdWdpbiBoYXMgbm8gaGVscDsgc3R5bGUgc2VjdGlvbiBubyBs b25nZXIgc3RvcmVkL2V4cG9ydGVkIGlmIGl0JiM4MjE3O3Mgbm90IGluIHVzZSAodGhhbmtz IHRoZV9naG9zdCAvIGlibGFzdG9mZik8L2xpPgoJCTxsaT4xMSBKYW4gMDggfCAwLjczIHwg QWRkZWQgc3VwcG9ydCBmb3IgPGVtPnJlYWRpbmc8L2VtPiBhbiBvcHRpb25hbCByZXZpc2lv biBmcm9tIHRoZSB0ZW1wbGF0ZSBwYXJzZXIgYW5kIGFwcGVuZGluZyBpdCB0byB0aGUgdmVy c2lvbiAodGhhbmtzIG5ldC1jYXJ2ZXIpOyBtb3JlIGdUeHQoKSBzdHJpbmdzIGNvbnZlcnRl ZDwvbGk+CgkJPGxpPjI4IE1hciAwOCB8IDAuNzQgfCBGaXhlZCBlbXB0eSBwbHVnaW4gY29k ZSBpZiBTdHlsZSBibG9jayBsZWZ0IGJsYW5rIDsgZml4ZWQgc3RyaXAvc2xhc2gvZW5jb2Rp bmcgZXJyb3JzICh0aGFua3MgdGhlX2dob3N0L3J1dWQpIDsgZml4ZWQgY3JsZiBuZXdsaW5l cyBpbiBjb2RlIGJsb2NrICh0aGFua3MgaGFram9vbi9ydXVkKTwvbGk+CgkJPGxpPjI4IE1h eSAwOCB8IDAuNzUgfCBBZGRlZCAmIzgyMTY7bW9kaWZpZWQmIzgyMTc7IHRvIHRoZSBWZXJz aW9uIGNvbHVtbiAodGhhbmtzIHVsaSkgOyBhZGRlZCBhYmlsaXR5IHRvIHJlbmFtZSBmaWxl cyBpbiB0aGUgcGx1Z2luIGNhY2hlIGRpciB3aGVuIHRoZSB2ZXJzaW9uIGNoYW5nZXM8L2xp PgoJCTxsaT4wMyBOb3YgMDggfCAwLjggfCBBZGRlZCBzdXBwb3J0IGZvciByZWNvbW1lbmRl ZCBwbHVnaW4gbG9hZCBvcmRlciA7IGFkZGVkIEFkbWluLW9ubHkgcGx1Z2luIHR5cGU7IGFk ZGVkIGFiaWxpdHkgdG8gb3ZlcnJpZGUgZmlsZW5hbWUgZm9ybWF0IG9uIGV4cG9ydCA7IGFk ZGVkIHJlc3RvcmUgcG9pbnQvcm9sbGJhY2sgKHRoYW5rcyBtYXZlcmljaykgOyBhZGRlZCBj aGFyYWN0ZXIgY291bnQgKHRoYW5rcyBwZXBlYmUpIDsgcmF0aW9uYWxpc2VkIHRoZSBsaXN0 IGFuZCBlZGl0IHBhZ2VzIDsgc3BlZCB1cCBleHBvcnQvc2F2ZSByb3V0aW5lcyA7IGZpeGVk IGEgZmV3IGNvcm5lciBjYXNlIGJ1Z3MgKGUuZy4gZW1wdHkgcGx1Z2luIG5hbWUsIG1pc3Np bmcgcXVvdGVzIGluIHRlbXBsYXRlIG9wdGlvbnMpPC9saT4KCQk8bGk+MDMgSmFuIDA5IHwg MC44MSB8IEFkZGVkIHRleHRpbGUgY2FjaGVpbmcgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSB3 aXRoIGxhcmdlIGhlbHAgZmlsZXMgOyBwcm9maWxlZCBjb2RlIGFuZCBpbXByb3ZlZCBzcGVl ZCBpbiB2YXJpb3VzIGZ1bmN0aW9uczwvbGk+CgkJPGxpPjIzIEZlYiAwOSB8IDAuODIgfCBD YW4gbm93IGNyZWF0ZSBuZXcgdGVtcGxhdGUgZmlsZXMgb24gdGhlIGZseSAodGhhbmtzIGF6 dykgOyBmaXhlZCBUZXh0aWxlIGxpbWl0IG9uIGxhcmdlIGhlbHAgZmlsZXMgOyBmaXhlZCBk YXRhYmFzZSBjYWxscyBmb3IgTXlTUUwgc3RyaWN0IG1vZGUgKHRoYW5rcyBHb2NvbSAvIGF6 dyk8L2xpPgoJCTxsaT4xMSBBcHIgMDkgfCAwLjgzIHwgRml4ZWQgaGVscCBmaWxlIDxzcGFu IGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkNT Uzwvc3Bhbj48L3NwYW4+PC9zcGFuPiBvdXRwdXQgc28gaXQgdmFsaWRhdGVzIDsgdXNlIDxj b2RlPiRwcmVmczwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT4kR0xPQkFMUzwvY29kZT4gaW50 ZXJuYWxseSA7IGNoZWNrIGlmIHBsdWdpbl9jYWNoZV9kaXIgZXhpc3RzIGJlZm9yZSB0cnlp bmcgdG8gdXNlIGl0IG9uIHRoZSBsaXN0IHBhZ2U8L2xpPgoJPC91bD4KCgk8aDIgaWQ9Indy aXRpbmciPldyaXRpbmcgYSBwbHVnaW48L2gyPgoKCTxwPllvdSBzaG91bGQgYmUgYXdhcmUg b2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGlj LnBocD9pZD05ODgxIj5QbHVnaW4gQXV0aG9yIFJlc291cmNlczwvYT4gdG9waWMgb24gdGhl IFRleHRwYXR0ZXJuIFN1cHBvcnQgRm9ydW0sIGFuZCB5b3UgbWlnaHQgYWxzbyB3YW50IHRv IGhhdmUgYSBsb29rIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS90 eHAtcGx1Z2luLWNoZWF0c2hlZXQiPlRleHRQYXR0ZXJuIHBsdWdpbiBjaGVhdCBzaGVldDwv YT4gYW5kIHRoZSB0dXRvcmlhbHMgYW5kIGd1aWRlcyBmb3IgPGEgaHJlZj0iaHR0cDovL3Rl eHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT1FeHRlbmRpbmdfVGV4dHBhdHRl cm4iPkV4dGVuZGluZyBUZXh0cGF0dGVybjwvYT4gb24gVGV4dEJvb2suPC9wPgoKCTxwPkhh cHB5IHBsdWdpbiBhdXRob3JpbmcgOi0pPC9wPgoKCTxwPjwvZGl2PjxiciAvPgoKPCEtLSAq KiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+PGJyIC8+Cgo8c3R5bGUgdHlwZT0idGV4dC9j c3MiPgojaWVkX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI2llZF9oZWxwIGNvZGUgeyBm b250OiAxMDUlLzEzMCUgJiM4MjIwO0NvdXJpZXIgTmV3JiM4MjIxOywgY291cmllciwgbW9u b3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI2llZF9oZWxwIGgxIHsgY29s b3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0 ZXh0LWFsaWduOiBjZW50ZXI7IH0KI2llZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4 IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdw eCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNpZWRfaGVscCBoMyB7IGNvbG9yOiAjMjc1Njg1 OyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAx cHg7IG1hcmdpbjogMTVweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9PGJyIC8+ Cgo8L3N0eWxlPjxiciAvPgoKPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPjwvcD4i O3M6MzoibWQ1IjtzOjMyOiJiOTRiMDA4ZmViOGFjNTRjMGU5MTQzZTkzMjY4YjY5ZCI7fQ==