# ajw_bookmarks v0.3 # Importing and exporting of links/bookmarks # http://compooter.org/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJhandfYm9va21hcmtzIjtzOjc6InZlcnNpb24iO3M6 MzoiMC4zIjtzOjY6ImF1dGhvciI7czoxMToiQW5kcmV3IFdhZXIiO3M6MTA6ImF1dGhvcl91 cmkiO3M6MjE6Imh0dHA6Ly9jb21wb290ZXIub3JnLyI7czoxMToiZGVzY3JpcHRpb24iO3M6 NDI6IkltcG9ydGluZyBhbmQgZXhwb3J0aW5nIG9mIGxpbmtzL2Jvb2ttYXJrcyI7czo0OiJ0 eXBlIjtpOjE7czo0OiJoZWxwIjtzOjEyMjoiCTxoMT5handfYm9va21hcmtzPC9oMT4KCTxw PlRoaXMgcGx1Z2luIHJlbGllcyBvbiBkZWwuaWNpby51cyYjODIxNzsgYnVpbHQtaW4gYm9v a21hcmsgaW1wb3J0L2V4cG9ydCBmdW5jdGlvbmFsaXR5LjwvcD4KCiAiO3M6NDoiY29kZSI7 czoxNTkyNjoiCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCWlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpCgl7 CgkJYWRkX3ByaXZzKCdhandfYm9va21hcmtzJywgJzEsMicpOwoJCXJlZ2lzdGVyX3RhYign ZXh0ZW5zaW9ucycsICdhandfYm9va21hcmtzJywgJ2Jvb2ttYXJrcycpOwoJCXJlZ2lzdGVy X2NhbGxiYWNrKCdhandfYm9va21hcmtzJywgJ2Fqd19ib29rbWFya3MnKTsKCX0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVu Y3Rpb24gYWp3X2Jvb2ttYXJrcyAoJGV2ZW50LCAkc3RlcCkKCXsKCQkkZGl2c3R5bGUgPSBh cnJheSgKCQkJJ3dpZHRoOjY1JScsCgkJCSdtYXJnaW46MTBweCBhdXRvJywKCQkJJ3BhZGRp bmc6IDEycHggNXB4JywKCQkJJ2JvcmRlci10b3A6MXB4IHNvbGlkICM2NjYnLAoJCQknYm9y ZGVyLWJvdHRvbToxcHggc29saWQgIzY2NicKCQkpOwoKCQlzd2l0Y2ggKGdwcygnc3RlcCcp KQoJCXsKCQkJLy8gaW1wb3J0IHZpZXcKCQkJY2FzZSAnYWp3X2RlbGljaW91c19pbXBvcnQn OgoJCQkJaWYgKCFncHMoJ3VzcicpKQoJCQkJCSRvdXRbXSA9IGFqd19ib29rbWFya3NfbG9n aW4oKTsKCQkJCWVsc2UKCQkJCXsKCQkJCQkvLyB0ZXN0IGlmIHVwbG9hZCB3ZW50IG9rCgkJ CQkJaWYgKGdwcygnYWp3X2Jvb2ttYXJrc191cGxvYWQnKSkKCQkJCQl7CgkJCQkJCSR1cGxv YWRfZXJyb3IgPSAoCgkJCQkJCQlhcnJheV9rZXlfZXhpc3RzKCdhandfYm9va21hcmtzX2Zp bGUnLCAkX0ZJTEVTKQoJCQkJCQkJCT8gYWp3X2Jvb2ttYXJrc19lcnJvcigkX0ZJTEVTWydh andfYm9va21hcmtzX2ZpbGUnXVsnZXJyb3InXSkKCQkJCQkJCQk6IGFqd19ib29rbWFya3Nf ZXJyb3IoMTAwKQoJCQkJCQkpOwoKCQkJCQkJaWYgKCEkdXBsb2FkX2Vycm9yKQoJCQkJCQl7 CgkJCQkJCQkvLyBnZXQgYm9va21hcmtzIHVwbG9hZCBmaWxlCgkJCQkJCQkkbmFtZSA9IEAk X0ZJTEVTWydhandfYm9va21hcmtzX2ZpbGUnXVsnbmFtZSddOwoJCQkJCQkJJGZpbGUgPSBA JF9GSUxFU1snYWp3X2Jvb2ttYXJrc19maWxlJ11bJ3RtcF9uYW1lJ107CgkJCQkJCQkkYm9v a21hcmtzID0gYWp3X3BhcnNlX2Jvb2ttYXJrcygkZmlsZSk7CgoJCQkJCQkJaWYgKGdwcygn YWp3X2Jvb2ttYXJrc191cGxvYWQnKSAmJiAhaXNfYXJyYXkoJGJvb2ttYXJrcykpCgkJCQkJ CQkJJHVwbG9hZF9lcnJvciA9IGFqd19ib29rbWFya3NfZXJyb3IoJGJvb2ttYXJrcyk7CgkJ CQkJCQllbHNlCgkJCQkJCQkJJHVwbG9hZF9jb25maXJtID0gJ0ltcG9ydGluZyAnIC5jb3Vu dCgkYm9va21hcmtzKS4gJyBsaW5rcyBmcm9tIHVwbG9hZGVkIGJvb2ttYXJrcyBmaWxlLi4u JzsKCQkJCQkJfQoKCQkJCQl9CgoJCQkJCSRvdXRbXSA9IHRhZygnSW1wb3J0IGJvb2ttYXJr cyBmcm9tIGRlbC5pY2lvLnVzJywgJ2gxJywgJyBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNXB4 OyInKTsKCgkJCQkJaWYgKCFlbXB0eSgkdXBsb2FkX2Vycm9yKSB8fCAhZ3BzKCdhandfYm9v a21hcmtzX3VwbG9hZCcpKQoJCQkJCXsKCQkJCQkJJG91dFtdID0gdGFnKCdTdGVwIDEuIEV4 cG9ydCBhbmQgc2F2ZSB5b3VyIGRlbC5pY2lvLnVzIGJvb2ttYXJrcycsICdoMicpOwoJCQkJ CQkkb3V0W10gPSB0YWcoCgkJCQkJCQlncmFmKCdJbiBvcmRlciB0byBpbXBvcnQgeW91ciBs aW5rcyBpbnRvIFRleHRwYXR0ZXJuLCB5b3Ugd2lsbCBmaXJzdCBuZWVkIHRvIHNhdmUgYSBj b3B5IG9mIHlvdXIgZGVsLmljaW8udXMgYm9va21hcmtzIHRvIHlvdXIgaGFyZCBkcml2ZTon KS4KCQkJCQkJCXRhZygKCQkJCQkJCQknPGxpPlZpc2l0IHlvdXIgZGVsLmljaW8udXMgYWNj b3VudCBzZXR0aW5ncyBwYWdlOiA8YSBocmVmPSJodHRwOi8vZGVsLmljaW8udXMvc2V0dGlu Z3MvJyAuZ3BzKCd1c3InKS4gJy9leHBvcnQiIHRhcmdldD0iX2JsYW5rIj48c3Ryb25nPmh0 dHA6Ly9kZWwuaWNpby51cy9zZXR0aW5ncy8nIC5ncHMoJ3VzcicpLiAnL2V4cG9ydDwvc3Ry b25nPjwvYT48L2xpPicuCgkJCQkJCQkJJzxsaT5Gb2xsb3cgdGhlIGluc3RydWN0aW9ucyB0 byAmcXVvdDs8ZW0+RXhwb3J0IHRvIEhUTUw8L2VtPiZxdW90OzwvbGk+JywKCQkJCQkJCQkn dWwnCgkJCQkJCQkpLAoJCQkJCQkJJ2Jsb2NrcXVvdGUnCgkJCQkJCSk7CgkJCQkJCSRvdXRb XSA9IHRhZygnU3RlcCAyLiBTZWxlY3Qgb3B0aW9ucyBhbmQgaW1wb3J0IGZpbGUnLCAnaDIn KTsKCgkJCQkJCSR1cGxvYWRfb3B0aW9uc19odG1sID0KCQkJCQkJCWdyYWYoCiMJCQkJCQkJ CWNoZWNrYm94KCdpbXBvcnRfdGFnJywgJzEnLCBncHMoJ2ltcG9ydF90YWcnKSkuCiMJCQkJ CQkJCScgaW1wb3J0IGRlbC5pY2lvLnVzIHRhZ3MgdG8gVGV4dHBhdHRlcm4gbGluayBjYXRl Z29yaWVzJy5ici4KCQkJCQkJCQljaGVja2JveCgnaW1wb3J0X2NhdGVnb3J5JywgJzEnLCBn cHMoJ2ltcG9ydF9jYXRlZ29yeScpKS4KCQkJCQkJCQknIGltcG9ydCBhbGwgbGlua3MgdG8g ZXhpc3RpbmcgbGluayBjYXRlZ29yeTonLgoJCQkJCQkJCWV2ZW50X2NhdGVnb3J5X3BvcHVw KCdsaW5rJyxncHMoJ2NhdGVnb3J5JykpCgkJCQkJCQkpLgoJCQkJCQkJZ3JhZignQ2xpY2sg JmFwb3M7PGVtPkJyb3dzZS4uLjwvZW0+JmFwb3M7IChvciAmYXBvczs8ZW0+Q2hvb3NlIEZp bGU8L2VtPiZhcG9zOykgYW5kIHNlbGVjdCB0aGUgZGVsLmljaW8udXMgYm9va21hcmtzIGV4 cG9ydCBmaWxlIHRoYXQgeW91IGp1c3Qgc2F2ZWQ6Jyk7CgkJCQkJCSRvdXRbXSA9IHRhZygK CQkJCQkJCWFqd19ib29rbWFya3NfdXBsb2FkX2Zvcm0oJHVwbG9hZF9vcHRpb25zX2h0bWwp LAoJCQkJCQkJJ2Jsb2NrcXVvdGUnCgkJCQkJCSk7CgkJCQkJfQoKCQkJCQlpZiAoZ3BzKCdh andfYm9va21hcmtzX3VwbG9hZCcpKQoJCQkJCQkkb3V0W10gPSAoCgkJCQkJCQllbXB0eSgk dXBsb2FkX2Vycm9yKQoJCQkJCQkJCT8gYWp3X2Jvb2ttYXJrc19tc2coJHVwbG9hZF9jb25m aXJtLCAxKQoJCQkJCQkJCTogYWp3X2Jvb2ttYXJrc19tc2coJHVwbG9hZF9lcnJvciwgMCkK CQkJCQkJKTsKCgkJCQkJLy8gYmVnaW4gaW1wb3J0aW5nIGxpbmtzCgkJCQkJaWYgKGdwcygn YWp3X2Jvb2ttYXJrc191cGxvYWQnKSAmJiAhJHVwbG9hZF9lcnJvciAmJiBpc19hcnJheSgk Ym9va21hcmtzKSkKCQkJCQl7CgkJCQkJCS8vIGRpc3BsYXkgYWxsIGltcG9ydGVkIGJvb2tt YXJrcwoJCQkJCQkkaW1wb3J0ZWRfbGlua3NbXSA9ICc8ZGwgaWQ9ImFqd19kZWxpY2lvdXNf aW1wb3J0ZWRfbGlua3MiIHN0eWxlPSJsaW5lLWhlaWdodDoxNHB4O2JhY2tncm91bmQ6I2Vl ZTtwYWRkaW5nOiA1cHggMTBweDtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0bztib3JkZXIt dG9wOiAxcHggZG90dGVkOyBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOyI+JzsKCgkJCQkJ CWZvcmVhY2ggKCRib29rbWFya3MgYXMgJGJvb2ttYXJrKQoJCQkJCQl7CgoJCQkJCQkJLy8g YnVpbGRpbmcgU1FMIGluc2VydCBxdWVyeQoJCQkJCQkJJGxpbmsgPSBhcnJheSgKCQkJCQkJ CQknZGF0ZScgICAgICAgICA9PiBkb1NsYXNoKGRhdGUoJ1ktbS1kIEg6aTpzJywgJGJvb2tt YXJrWydhZGRlZCddKSksCgkJCQkJCQkJJ2NhdGVnb3J5JyAgICAgPT4gKGdwcygnaW1wb3J0 X2NhdGVnb3J5JykgPyBkb1NsYXNoKGdwcygnY2F0ZWdvcnknKSkgOiAnJyksCgkJCQkJCQkJ J3VybCcgICAgICAgICAgPT4gZG9TbGFzaCgkYm9va21hcmtbJ3VybCddKSwKCQkJCQkJCQkn bGlua25hbWUnICAgICA9PiBkb1NsYXNoKCRib29rbWFya1sndGl0bGUnXSksCgkJCQkJCQkJ J2xpbmtzb3J0JyAgICAgPT4gJycsCgkJCQkJCQkJJ2Rlc2NyaXB0aW9uJyAgPT4gZG9TbGFz aCgkYm9va21hcmtbJ2Rlc2NyaXB0aW9uJ10pCgkJCQkJCQkpOwoKCQkJCQkJCSRxX2luc2Vy dFtdID0gIignIi5qb2luKCInLCciLCAkbGluaykuIicpIjsKCgkJCQkJCQkkaW1wb3J0ZWRf bGlua3NbXSA9IHRhZygKCQkJCQkJCQkkYm9va21hcmtbJ3RpdGxlJ10sCgkJCQkJCQkJJ2R0 JywKCQkJCQkJCQknIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Zm9udC13ZWlnaHQ6Ym9sZCIn CgkJCQkJCQkpOwoKCQkJCQkJCSRpbXBvcnRlZF9saW5rc1tdID0KCQkJCQkJCQl0YWcoCgkJ CQkJCQkJCSghZW1wdHkoJGJvb2ttYXJrWydkZXNjcmlwdGlvbiddKQoJCQkJCQkJCQkJPyAk Ym9va21hcmtbJ2Rlc2NyaXB0aW9uJ10KCQkJCQkJCQkJCTogJzxlbT5ObyBkZXNjcmlwdGlv bjwvZW0+JwoJCQkJCQkJCQkpLAoJCQkJCQkJCQknZGQnCgkJCQkJCQkJKS4KCQkJCQkJCQl0 YWcoCgkJCQkJCQkJCSghZW1wdHkoJGJvb2ttYXJrWyd0YWdzJ10pCgkJCQkJCQkJCQk/ICc8 ZW0+KHRhZ3M6ICcgLiBqb2luKCcsICcsICRib29rbWFya1sndGFncyddKSAuICc8L2VtPikn CgkJCQkJCQkJCQk6ICc8ZW0+Tm8gdGFnczwvZW0+JwoJCQkJCQkJCQkpLAoJCQkJCQkJCQkn ZGQnCgkJCQkJCQkJKTsKCQkJCQkJfQoJCQkJCQkkaW1wb3J0ZWRfbGlua3NbXSA9ICc8L2Rs Pic7CgoJCQkJCQlpZiAoJHFfaW5zZXJ0KQoJCQkJCQl7CgkJCQkJCQkkcSA9CgkJCQkJCQkJ J0lOU0VSVCBJTlRPICcuc2FmZV9wZngoJ3R4cF9saW5rJykuCgkJCQkJCQkJJyAoYGRhdGVg LGBjYXRlZ29yeWAsYHVybGAsYGxpbmtuYW1lYCxgbGlua3NvcnRgLGBkZXNjcmlwdGlvbmAp IFZBTFVFUyAnLgoJCQkJCQkJCWpvaW4oJywnLCAkcV9pbnNlcnQpOwoJCQkJCQkJaWYgKCAk cnMgPSBzYWZlX3F1ZXJ5KCRxKSApCgkJCQkJCQl7CgkJCQkJCQkJLy91cGRhdGUgbGFzdG1v ZCBkdWUgdG8gbGluayBmZWVkcwoJCQkJCQkJCXNhZmVfdXBkYXRlKCJ0eHBfcHJlZnMiLCAi dmFsID0gbm93KCkiLCAibmFtZSA9ICdsYXN0bW9kJyIpOwoJCQkJCQkJCS8vIGFkZCBpbXBv cnRlZCBsaW5rIGNvbmZpcm1hdGlvbgoJCQkJCQkJCSRvdXRbXSA9IGpvaW4obiwgJGltcG9y dGVkX2xpbmtzKTsKCQkJCQkJCQkkb3V0W10gPSBhandfYm9va21hcmtzX21zZygnU3VjY2Vz cyEnLCAxKTsKCQkJCQkJCX0gZWxzZQoJCQkJCQkJewoJCQkJCQkJCS8vIGxpbmsgaW1wb3J0 IHdhcyB1bnN1Y2Nlc3NmdWwKCQkJCQkJCQkkb3V0W10gPSBhandfYm9va21hcmtzX21zZyhh andfYm9va21hcmtzX2Vycm9yKDQwMCksIDApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJ CQkJfQoJCQlicmVhazsKCgkJCS8vIGV4cG9ydCB2aWV3CgkJCWNhc2UgJ2Fqd19ib29rbWFy a3NfZXhwb3J0JzoKCgkJCQkkb3V0W10gPSB0YWcoJ0V4cG9ydCBib29rbWFya3MgdG8gZmls ZScsICdoMScsICcgc3R5bGU9Im1hcmdpbi1ib3R0b206MTVweDsiJyk7CgkJCQkkb3V0W10g PSB0YWcoJ1N0ZXAgMS4gU2VsZWN0IGNhdGVnb3JpZXMgdG8gZXhwb3J0JywgJ2gyJyk7CgoJ CQkJLy8gY2F0ZWdvcnkgdHJlZQoJCQkJJHJzID0gZ2V0VHJlZSgncm9vdCcsICdsaW5rJyk7 CgoJCQkJJGl0ZW1zW10gPSBjaGVja2JveCgndW5jYXRlZ29yaXplZCcsICdVbmNhdGVnb3Jp emVkJywgMSkgLnNwLiAnQWxsIFVuY2F0ZWdvcml6ZWQnOwoKCQkJCWZvcmVhY2goJHJzIGFz ICRhKQoJCQkJewoJCQkJCWV4dHJhY3QoJGEpOwoJCQkJCWlmICgkbmFtZSA9PSAncm9vdCcp IGNvbnRpbnVlOwoJCQkJCSRjYm94ID0gY2hlY2tib3goJ2NhdHNbXScsICRuYW1lLCAxKTsK CQkJCQkkaXRlbXNbXSA9ICRjYm94IC5zcC4gc3RyX3JlcGVhdChzcCwgbWF4KDAsICRsZXZl bC0xKSoyKSAuICRuYW1lOwoJCQkJfQoKCQkJCSRmaXJzdGRhdGUgPSBzdHJ0b3RpbWUoc2Fm ZV9maWVsZCgnZGF0ZScsICd0eHBfbGluaycsICcxIE9SREVSIEJZIGRhdGUgYXNjJykpICsg dHpfb2Zmc2V0KCk7CgoJCQkJaWYgKCFlbXB0eSgkaXRlbXMpKQoJCQkJewoJCQkJCSRvdXRb XSA9CgkJCQkJCXRhZygKCQkJCQkJCXRhZygKCQkJCQkJCQlncmFmKCdTZWxlY3Q6IDxhIGhy ZWY9IiMiIG9uY2xpY2s9ImFqd1NlbGVjdEFsbChcJ2xpbmtfY2F0ZWdvcmllc1wnKTtyZXR1 cm4gZmFsc2UiPkFsbDwvYT4gLyA8YSBocmVmPSIjIiBvbmNsaWNrPSJhandEZXNlbGVjdEFs bChcJ2xpbmtfY2F0ZWdvcmllc1wnKTtyZXR1cm4gZmFsc2UiPk5vbmU8L2E+JykuCgkJCQkJ CQkJdGFnKAoJCQkJCQkJCQlqb2luKCc8YnIgLz4nLCAkaXRlbXMpLAoJCQkJCQkJCQknZGl2 JywKCQkJCQkJCQkJJyBpZD0ibGlua19jYXRlZ29yaWVzIicKCQkJCQkJCQkpLAoJCQkJCQkJ CSdibG9ja3F1b3RlJwoJCQkJCQkJKS4KCQkJCQkJCXRhZygnU3RlcCAyLiBTZWxlY3QgZXhw b3J0IG9wdGlvbnMnLCAnaDInKS4KCQkJCQkJCXRhZyAoCgkJCQkJCQkJZ3JhZigKCQkJCQkJ CQkJY2hlY2tib3goJ3VzZV90YWdzJywgJzEnLCAxKSAuICcgaW5jbHVkZSBteSBjYXRlZ29y aWVzIGFzIHRhZ3MnLmJyLgoJCQkJCQkJCQljaGVja2JveCgndXNlX2Rlc2MnLCAnMScsIDEp IC4gJyBpbmNsdWRlIG15IGxpbmsgZGVzY3JpcHRpb25zJwoJCQkJCQkJCSkuCgkJCQkJCQkJ Z3JhZigKCQkJCQkJCQkJJ3RpbWUgcmFuZ2UgYmVnaW46Jy5ici4KCQkJCQkJCQkJYWp3X2Jv b2ttYXJrc190c2koJ2Zyb21feWVhcicsICdZJywgJGZpcnN0ZGF0ZSkuCgkJCQkJCQkJCWFq d19ib29rbWFya3NfdHNpKCdmcm9tX21vbnRoJywgJ20nLCAkZmlyc3RkYXRlKS4KCQkJCQkJ CQkJYWp3X2Jvb2ttYXJrc190c2koJ2Zyb21fZGF5JywgJ2QnLCAkZmlyc3RkYXRlKS5zcC4K CQkJCQkJCQkJYWp3X2Jvb2ttYXJrc190c2koJ2Zyb21faG91cicsICdIJywgJGZpcnN0ZGF0 ZSkuJzonLgoJCQkJCQkJCQlhandfYm9va21hcmtzX3RzaSgnZnJvbV9taW51dGUnLCAnaScs ICRmaXJzdGRhdGUpLmJyLgoJCQkJCQkJCQkndGltZSByYW5nZSBlbmQ6Jy5ici4KCQkJCQkJ CQkJYWp3X2Jvb2ttYXJrc190c2koJ3RvX3llYXInLCAnWScsIHRpbWUoKSt0el9vZmZzZXQo KSkuCgkJCQkJCQkJCWFqd19ib29rbWFya3NfdHNpKCd0b19tb250aCcsICdtJywgdGltZSgp K3R6X29mZnNldCgpKS4KCQkJCQkJCQkJYWp3X2Jvb2ttYXJrc190c2koJ3RvX2RheScsICdk JywgdGltZSgpK3R6X29mZnNldCgpKS5zcC4KCQkJCQkJCQkJYWp3X2Jvb2ttYXJrc190c2ko J3RvX2hvdXInLCAnSCcsIHRpbWUoKSt0el9vZmZzZXQoKSkuJzonLgoJCQkJCQkJCQlhandf Ym9va21hcmtzX3RzaSgndG9fbWludXRlJywgJ2knLCB0aW1lKCkrdHpfb2Zmc2V0KCkpLmJy CgkJCQkJCQkJKSwKCQkJCQkJCQknYmxvY2txdW90ZScKCQkJCQkJCSkuCgkJCQkJCQllSW5w dXQoJ2Fqd19ib29rbWFya3MnKS4KCQkJCQkJCXNJbnB1dCgnYWp3X2Jvb2ttYXJrc19leHBv cnRfZG93bmxvYWQnKS4KCQkJCQkJCXRhZygnU3RlcCAzLiBTYXZlIGV4cG9ydCBmaWxlIHRv IHlvdXIgbG9jYWwgY29tcHV0ZXInLCAnaDInKS4KCQkJCQkJCXRhZygKCQkJCQkJCQknPGlu cHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkRvd25sb2FkIGJvb2ttYXJrcyBmaWxlIiBjbGFz cz0ic21hbGxlcmJveCIgLz4nLAoJCQkJCQkJCSdibG9ja3F1b3RlJwoJCQkJCQkJKSwKCQkJ CQkJCSdmb3JtJywKCQkJCQkJCScgbmFtZT0ibG9uZ2Zvcm0iIGFjdGlvbj0iaW5kZXgucGhw IiBtZXRob2Q9InBvc3QiIHN0eWxlPSJsaW5lLWhlaWdodDoyMHB4IicKCQkJCQkJKTsKCQkJ CX0KCQkJYnJlYWs7CgoJCQkvLyBkb3dubG9hZCBleHBvcnQgZmlsZQoJCQljYXNlICdhandf Ym9va21hcmtzX2V4cG9ydF9kb3dubG9hZCc6CgoJCQkJJGNvbnRlbnRzID0gYXJyYXkoKTsK CgkJCQkvLyBjYXRlZ29yeSBmaWx0ZXIKCQkJCSRjYXRlZ29yaWVzID0gQGpvaW4oIiwiLCBn cHMoJ2NhdHMnKSk7CgkJCQkkcV9jYXRzID0gIignIiAuQGpvaW4oIicsJyIsIGRvU2xhc2go Z3BzKCdjYXRzJykpKS4gIicpIjsKCgkJCQkkdG9fZGF0ZSA9IGdwcygndG9feWVhcicpIC4n LScuIGdwcygndG9fbW9udGgnKSAuJy0nLiBncHMoJ3RvX2RheScpIC4nICcuIGdwcygndG9f aG91cicpIC4nOicuIGdwcygndG9fbWludXRlJykgLiAnOjAwJzsKCQkJCSRmcm9tX2RhdGUg PSBncHMoJ2Zyb21feWVhcicpLictJy5ncHMoJ2Zyb21fbW9udGgnKS4nLScuZ3BzKCdmcm9t X2RheScpIC4nICcuIGdwcygnZnJvbV9ob3VyJykgLic6Jy4gZ3BzKCdmcm9tX21pbnV0ZScp IC4gJzowMCc7CgoJCQkJJHJzID0gc2FmZV9yb3dzKAoJCQkJCScqJywKCQkJCQkndHhwX2xp bmsnLAoJCQkJCSIoY2F0ZWdvcnkgSU4gJHFfY2F0cyIgLihncHMoJ3VuY2F0ZWdvcml6ZWQn KSA/ICIgT1IgY2F0ZWdvcnk9JyciIDogJycpLiAiKSBBTkQgIi4KCQkJCQkiZGF0ZSA+PSAn JGZyb21fZGF0ZScgQU5EICIuCgkJCQkJImRhdGUgPD0gJyR0b19kYXRlJyIKCQkJCSk7CgoJ CQkJLy8gZ2VuZXJhdGUgYm9va21hcmtzIGV4cG9ydCBodG1sIGZpbGUgY29udGVudHMKCQkJ CSRjb250ZW50c1tdID0gJzwhRE9DVFlQRSBORVRTQ0FQRS1Cb29rbWFyay1maWxlLTE+JzsK CQkJCSRjb250ZW50c1tdID0gJzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09O VEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4nOwoJCQkJJGNvbnRlbnRzW10gPSAn PFRJVExFPkJvb2ttYXJrczwvVElUTEU+JzsKCQkJCSRjb250ZW50c1tdID0gJzxIMSBMQVNU X01PRElGSUVEPSInLnRpbWUoKS4nIj5Cb29rbWFya3M8L0gxPic7CgkJCQkkY29udGVudHNb XSA9ICc8REw+PHA+JzsKCQkJCWZvcmVhY2ggKCRycyBhcyAkYSkKCQkJCXsKCQkJCQlleHRy YWN0KCRhKTsKCQkJCQkkY29udGVudHNbXSA9ICc8RFQ+PEEgSFJFRj0iJy5odG1sc3BlY2lh bGNoYXJzKCR1cmwpLiciIEFERF9EQVRFPSInLnN0cnRvdGltZSgkZGF0ZSkuJyIgTEFTVF9N T0RJRklFRD0iJy5zdHJ0b3RpbWUoJGRhdGUpLiciIFRBR1M9IicgLihncHMoJ3VzZV90YWdz JykgPyAkY2F0ZWdvcmllcyA6ICcnKS4nIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmtuYW1l KS4nPC9BPjwvRFQ+JzsKCQkJCQkkY29udGVudHNbXSA9ICc8REQ+JyAuKGdwcygndXNlX2Rl c2MnKSA/ICRkZXNjcmlwdGlvbiA6ICcnKS4gJzwvREQ+JzsKCQkJCX0KCQkJCSRjb250ZW50 c1tdID0gJzwvREw+PHA+JzsKCgkJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRp b24vZm9yY2UtZG93bmxvYWRcbicpOwoJCQkJaGVhZGVyKCdDb250ZW50LWRpc3Bvc2l0aW9u OiAgYXR0YWNobWVudDsgZmlsZW5hbWU9Ym9va21hcmtzLmh0bWwnKTsKCQkJCWVjaG8gam9p bihuLCAkY29udGVudHMpOwoJCSAgICAJZXhpdDsKCQkJYnJlYWs7CgoJCQlkZWZhdWx0OgoJ CQkvLyBkZWZhdWx0IHZpZXcKCQkJCSRvdXRbXSA9IHRhZygnV2hhdCB3b3VsZCB5b3UgbGlr ZSB0byBkbz8nLCAnaDEnLCAnIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE1cHg7IicpOwoJCQkJ JG91dFtdID0gdGFnKAoJCQkJCSc8YSBocmVmPSI/ZXZlbnQ9YWp3X2Jvb2ttYXJrcyZhbXA7 c3RlcD1handfYm9va21hcmtzX2V4cG9ydCI+PHN0cm9uZz5FeHBvcnQgYm9va21hcmtzPC9z dHJvbmc+PC9hPiAoPGVtPmludG8gYSBmaWxlIHRoYXQgbW9zdCBib29rbWFyayBzZXJ2aWNl cyBhbmQgYnJvd3NlcnMgY2FuIGltcG9ydDwvZW0+KScsCgkJCQkJJ2gyJwoJCQkJKTsKCQkJ CSRvdXRbXSA9IHRhZygKCQkJCQknPGEgaHJlZj0iP2V2ZW50PWFqd19ib29rbWFya3MmYW1w O3N0ZXA9YWp3X2RlbGljaW91c19pbXBvcnQiPjxzdHJvbmc+SW1wb3J0IGJvb2ttYXJrcyBm cm9tIGRlbC5pY2lvLnVzPC9zdHJvbmc+PC9hPicsCgkJCQkJJ2gyJwoJCQkJKTsKCQkJYnJl YWs7CgkJfQoKCQlwYWdldG9wKCdkZWwuaWNpby51czogaW1wb3J0L2V4cG9ydCcpOwoJCWVj aG8gJzxkaXYgaWQ9ImFqd19ib29rbWFya3MiIHN0eWxlPSInIC5qb2luKCc7JywgJGRpdnN0 eWxlKS4gJyI+JyAuQGpvaW4obiwgJG91dCkuICc8L2Rpdj4nOwoJCWFqd19ib29rbWFya3Nf anMoKTsKCgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGFqd19ib29rbWFya3NfbG9naW4oKQoJewoJCXJldHVy bgoJCQlmb3JtKAoJCQkJdGFnKCdQbGVhc2UgZW50ZXIgeW91ciBkZWwuaWNpby51cyB1c2Vy bmFtZScsICdoMScsICcgc3R5bGU9Im1hcmdpbi1ib3R0b206MTVweDsiJykuCgkJCQlhandf Ym9va21hcmtzX21zZygnJywgMCkuCgkJCQl0YWcoJ1VzZXJuYW1lOicgLmJyLiBmSW5wdXQo J3RleHQnLCAndXNyJywgJycsICcnLCAnJywgJycsICczMCcsICcwJyksICdwJykuCgkJCQlm SW5wdXQoJ3N1Ym1pdCcsICcnLCAnQ29udGludWUgJmd0OyZndDsnLCAnc21hbGxlcmJveCcp LgoJCQkJZUlucHV0KCdhandfYm9va21hcmtzJykuCgkJCQlzSW5wdXQoZ3BzKCdzdGVwJykp LAoJCQkJJycsCgkJCQknYWp3RGVsaWNpb3VzTG9naW4odGhpcyknCgkJCSk7Cgl9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1 bmN0aW9uIGFqd19ib29rbWFya3NfanMoKQoJewoJCWVjaG8gPDw8RU9UCgo8c2NyaXB0IHR5 cGU9InRleHQvamF2YXNjcmlwdCI+CjwhLS0KCnZhciBhandfYm9va21hcmtzID0ge307Cgpm dW5jdGlvbiBhandEZWxpY2lvdXNMb2dpbihmKQp7Cgl2YXIgbXNnID0gW107CglpZiAoZi51 c3IpIHsKCQlpZiAoIWYudXNyLnZhbHVlKQoJCQltc2cucHVzaCgnLSBQbGVhc2UgZW50ZXIg eW91ciB1c2VybmFtZScpOwoJfQoJaWYgKGYucHdkKSB7CgkJaWYgKCFmLnB3ZC52YWx1ZSkK CQkJbXNnLnB1c2goJy0gUGxlYXNlIGVudGVyIHlvdXIgcGFzc3dvcmQnKTsKCX0KCWlmICht c2cubGVuZ3RoICE9IDApIHsKCQlhandEZWxpY2lvdXNNc2cobXNnLmpvaW4oJzxiciAvPicp KTsKCQlyZXR1cm4gZmFsc2U7Cgl9Cgp9CgpmdW5jdGlvbiBhandEZWxpY2lvdXNNc2cobXNn KQp7Cgl2YXIgcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtc2cnKTsKCWlmIChwKSB7 CgkJcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCQlwLmlubmVySFRNTCA9IG1zZzsKCX0K fQoKZnVuY3Rpb24gYWp3U2VsZWN0QWxsKG9ial9pZCkKewoJdmFyIGNudCA9IDA7Cgl2YXIg b2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqX2lkKTsKCXZhciBjYnggPSBvYmou Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7Cgl2YXIgY250ID0gY2J4Lmxlbmd0aDsK CWZvciAodmFyIGk9MDsgaSA8IGNudDsgaSsrKQoJCWlmIChjYnhbaV0udHlwZSA9PSAnY2hl Y2tib3gnKSBjYnhbaV0uY2hlY2tlZCA9IHRydWU7Cn0KCmZ1bmN0aW9uIGFqd0Rlc2VsZWN0 QWxsKG9ial9pZCkKewoJdmFyIGNudCA9IDA7Cgl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQob2JqX2lkKTsKCXZhciBjYnggPSBvYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUo J2lucHV0Jyk7Cgl2YXIgY250ID0gY2J4Lmxlbmd0aDsKCWZvciAodmFyIGk9MDsgaSA8IGNu dDsgaSsrKQoJCWlmIChjYnhbaV0udHlwZSA9PSAnY2hlY2tib3gnKSBjYnhbaV0uY2hlY2tl ZCA9IGZhbHNlOwp9CgotLT4KPC9zY3JpcHQ+CgpFT1Q7CgoJfQoKLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVu Y3Rpb24gYWp3X2Jvb2ttYXJrc190c2koJG5hbWUsICRkYXRldmFyLCAkdGltZSwgJHRhYj0n JykKCXsKCQkkc2l6ZSA9IChzdHJwb3MoJG5hbWUsICd5ZWFyJykgIT09IGZhbHNlCgkJCT8g NAoJCQk6IDIKCQkpOwoJCXJldHVybiAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IicuJG5h bWUuJyIgdmFsdWU9IicuZGF0ZSgkZGF0ZXZhciwkdGltZSt0el9vZmZzZXQoKSkuJyIgc2l6 ZT0iJy4kc2l6ZS4nIiBtYXhsZW5ndGg9IicuJHNpemUuJyIgY2xhc3M9ImVkaXQiIHRhYmlu ZGV4PSInLiR0YWIuJyIgLz4nLiJcbiI7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBhandf Ym9va21hcmtzX3VwbG9hZF9mb3JtKCRpbm5lcmh0bWw9JycpCgl7CgkJZ2xvYmFsICRmaWxl X21heF91cGxvYWRfc2l6ZTsKCgkJaWYgKCEkZmlsZV9tYXhfdXBsb2FkX3NpemUgfHwgaW50 dmFsKCRmaWxlX21heF91cGxvYWRfc2l6ZSk9PTApCgkJCSRmaWxlX21heF91cGxvYWRfc2l6 ZSA9IDIqKDEwMjQqMTAyNCk7CgoJCSRtYXhfZmlsZV9zaXplID0gKAoJCQlpbnR2YWwoJGZp bGVfbWF4X3VwbG9hZF9zaXplKSA9PSAwCgkJCQk/ICcnCgkJCQk6IGhJbnB1dCgnbWF4X2Zp bGVfc2l6ZScsICRmaWxlX21heF91cGxvYWRfc2l6ZSkKCQkpOwoKCQlyZXR1cm4gdGFnKAoJ CQkkaW5uZXJodG1sLgoJCQkkbWF4X2ZpbGVfc2l6ZS4KCQkJaElucHV0KCd1c3InLCBncHMo J3VzcicpKS4KCQkJaElucHV0KCdhandfYm9va21hcmtzX3VwbG9hZCcsICcxJykuCgkJCWVJ bnB1dCgnYWp3X2Jvb2ttYXJrcycpLgoJCQlzSW5wdXQoZ3BzKCdzdGVwJykpLgoJCQlncmFm KGZJbnB1dCgnZmlsZScsICdhandfYm9va21hcmtzX2ZpbGUnLCAnJykpLgoJCQlncmFmKGZJ bnB1dCgnc3VibWl0JywgJycsICdJbXBvcnQgYm9va21hcmtzJywgJ3NtYWxsZXJib3gnKSks CgkJCSdmb3JtJywKCQkJJyBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBhY3Rpb249 ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0IiAgb25zdWJtaXQ9InJldHVybiBjb25maXJtKFwn SW1wb3J0IGJvb2ttYXJrcyBpbnRvIFRleHRwYXR0ZXJuP1wnKSInCgkJKTsKCX0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KCWZ1bmN0aW9uIGFqd19ib29rbWFya3NfbXNnKCRtc2csJGdvb2Q9MSkKCXsKCQkk ZGlzcGxheSA9IChlbXB0eSgkbXNnKSA/ICdkaXNwbGF5Om5vbmU7JyA6ICcnKTsKCQkkc3R5 bGUgPSAoJGdvb2QKCQkJPyAkZGlzcGxheS4idGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzAw OTkwMDtmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkO3BhZGRpbmc6NXB4O2Jh Y2tncm91bmQtY29sb3I6I2VlZTtib3JkZXI6MXB4IHNvbGlkICMwMDk5MDAiCgkJCTogJGRp c3BsYXkuInRleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNjYzAwMDA7Zm9udC1zdHlsZTppdGFs aWM7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7 Ym9yZGVyOjFweCBzb2xpZCAjY2MwMDAwIgoJCSk7CgkJcmV0dXJuICc8cCBpZD0ibXNnIiBz dHlsZT0iJy4kc3R5bGUuJyI+JyAuJG1zZy4gJzwvcD4nOwoJfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVu Y3Rpb24gYWp3X2Jvb2ttYXJrc19lcnJvcigkZXJyb3IpCgl7CgkJZ2xvYmFsICRmaWxlX21h eF91cGxvYWRfc2l6ZTsKCQlzd2l0Y2goJGVycm9yKQoJCXsKCQkJY2FzZSAxOgoJCQkJJGVy cm9yX21zZyA9ICdVcGxvYWQgZXhjZWVkcyB1cGxvYWRfbWF4X2ZpbGVzaXplIGluIHBocC5p bmkgKCcucm91bmQoJGZpbGVfbWF4X3VwbG9hZF9zaXplLzEwMDAwMDAsMSkuJ01CKSc7CgkJ CWJyZWFrOwoJCQljYXNlIDI6CgkJCQkkZXJyb3JfbXNnID0gJ1VwbG9hZCBleGNlZWRzICJN YXggVXBsb2FkIEZpbGUgU2l6ZSIgaW4gVGV4dHBhdHRlcm4gUHJlZmVyZW5jZXMgKCcucm91 bmQoJGZpbGVfbWF4X3VwbG9hZF9zaXplLzEwMDAwMDAsMSkuJ01CKSc7CgkJCWJyZWFrOwoJ CQljYXNlIDM6CgkJCQkkZXJyb3JfbXNnID0gJ1RoZSB1cGxvYWRlZCBmaWxlIHdhcyBvbmx5 IHBhcnRpYWxseSB1cGxvYWRlZCc7CgkJCWJyZWFrOwoJCQljYXNlIDQ6CgkJCQkkZXJyb3Jf bXNnID0gJ05vIGZpbGUgd2FzIHVwbG9hZGVkJzsKCQkJYnJlYWs7CgkJCWNhc2UgNjoKCQkJ CSRlcnJvcl9tc2cgPSAnTWlzc2luZyBhIHRlbXBvcmFyeSBmb2xkZXInOwoJCQlicmVhazsK CQkJY2FzZSA3OgoJCQkJJGVycm9yX21zZyA9ICdGYWlsZWQgdG8gd3JpdGUgZmlsZSB0byBk aXNrJzsKCQkJYnJlYWs7CgkJCWNhc2UgMTAwOgoJCQkJJGVycm9yX21zZyA9ICdVcGxvYWRz IGFyZSBkaXNhbGxvd2VkIGJ5IHlvdXIgcGhwLmluaSBjb25maWd1cmF0aW9uJzsKCQkJYnJl YWs7CgkJCWNhc2UgMjAwOgoJCQkJJGVycm9yX21zZyA9ICJUaGlzIGRvZXNuJ3QgbG9vayBs aWtlIGEgdmFsaWQgYm9va21hcmsgZmlsZS48YnIgLz5JZiB0aGlzIGlzIGEgYnVnLCByZXBv cnQgaXQgaW4gdGhlIFRleHRwYXR0ZXJuIEZvcnVtIHRocmVhZCBmb3IgdGhpcyBwbHVnaW4u IjsKCQkJYnJlYWs7CgkJCWNhc2UgMzAwOgoJCQkJJGVycm9yX21zZyA9ICdVbmFibGUgdG8g bG9jYXRlIHVwbG9hZGVkIGZpbGUuIEhhcyB0aGUgdGVtcG9yYXJ5IGZpbGUgYmVlbiBkZWxl dGVkLi4uPyc7CgkJCWJyZWFrOwoJCQljYXNlIDQwMDoKCQkJCSRlcnJvcl9tc2cgPSAiTm8g bGlua3Mgd2VyZSBpbXBvcnRlZC4gVGhlIGltcG9ydCBwcm9jZXNzIHdhcyBhYmFuZG9uZWQg ZHVlIHRvIGEgcHJvYmxlbSB3cml0aW5nIHRvIHRoZSBkYXRhYmFzZS4iOwoJCQlicmVhazsK CQkJZGVmYXVsdDoKCQkJCSRlcnJvcl9tc2cgPSAnJzsKCQkJYnJlYWs7CgkJfQoJCXJldHVy biAkZXJyb3JfbXNnOwoJfQoKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8qCiAgT3JpZ2luYWwgU2NyaXB0OiBC b29rbWFya1BhcnNlcgogIE9yaWdpbmFsIEF1dGhvcjogTGVubmFydCBHcm9ldHpiYWNoCiAg U291cmNlOiBodHRwOi8vd3d3LnBocGNsYXNzZXMub3JnL2Jyb3dzZS5odG1sL3BhY2thZ2Uv ODAzLmh0bWwKKi8KCmZ1bmN0aW9uIGFqd19wYXJzZV9ib29rbWFya3MoJGZpbGUpCnsKCSRi b29rbWFya3MgPSBhcnJheSgpOwoJJGVycm9yX21lc3NhZ2UgPSAnJzsKCgkkZmlsZSA9IGZp bGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsKCglpZiAoIXByZWdfbWF0Y2goJy88IURPQ1RZUEUg TkVUU0NBUEUtQm9va21hcmstZmlsZS0xPi9pJywgJGZpbGUpKQoJCXJldHVybiAyMDA7CgoJ Ly8gcmVtb3ZlIGFsbCBuZXdsaW5lcwoJJGZpbGUgPSBzdHJfcmVwbGFjZSgiXG4iLCcnLCRm aWxlKTsKCgkvLyBnZXQgZGVmaW5pdGlvbiBsaXN0IGl0ZW1zIGZyb20gaW52YWxpZCBkZWwu aWNpby51cyBIVE1MIDstKQoJJGxpbmVzID0gc3BsaXRpKCc8RFQ+JywgICRmaWxlKTsKCglm b3JlYWNoICgkbGluZXMgYXMgJGxpbmUpCgl7CgkJLy8gZG9lcyB0aGlzIGxpbmUgY29udGFp biBhIGJvb2ttYXJrPwoJCWlmIChwcmVnX21hdGNoKCcvPEEgSFJFRj0iKFteIl0qKVtePl0q PiguKik8XC9BPi9pJywgJGxpbmUsCSRtYXRjaCkpCgkJewoJCQkvLyBleHRyYWN0IHVybCBh bmQgZGVzY3IKCQkJQCRsaW5rWyd1cmwnXSA9ICRtYXRjaFsxXTsKCQkJQCRsaW5rWyd0aXRs ZSddID0gJG1hdGNoWzJdOwoKCQkJLy8gZXh0cmFjdCBhZGRfZGF0ZQoJCQlwcmVnX21hdGNo KCIvQUREX0RBVEU9XCIoW15cIl0qKS9pIiwgJGxpbmUsICRtYXRjaCk7CgkJCUAkbGlua1sn YWRkZWQnXSA9ICRtYXRjaFsxXTsKCgkJCS8vIGV4dHJhY3QgbGFzdCBtb2RpZmllZCBkYXRl CgkJCXByZWdfbWF0Y2goIi9MQVNUX01PRElGSUVEPVwiKFteXCJdKikvaSIsICRsaW5lLCAk bWF0Y2gpOwoJCQlAJGxpbmtbJ21vZGlmaWVkJ10gPSAkbWF0Y2hbMV07CgoJCQkvLyBleHRy YWN0IHRhZ3MKCQkJcHJlZ19tYXRjaCgiL1RBR1M9XCIoW15cIl0qKS9pIiwgJGxpbmUsICRt YXRjaCk7CgkJCUAkbGlua1sndGFncyddID0gKAoJCQkJIWVtcHR5KCRtYXRjaFsxXSkKCQkJ CQk/IHNwbGl0KCcsJywgJG1hdGNoWzFdKQoJCQkJCTogJycKCQkJKTsKCgkJCS8vIGV4dHJh Y3QgZGVzY3JpcHRpb24KCQkJcHJlZ19tYXRjaCgiLzxERD4oLiopL2kiLCAkbGluZSwgJG1h dGNoKTsKCQkJQCRsaW5rWydkZXNjcmlwdGlvbiddID0gc3RyaXBfdGFncygkbWF0Y2hbMV0p OwoKCQkJJGJvb2ttYXJrc1tdID0gJGxpbms7CgkJfQoJfQoJcmV0dXJuICRib29rbWFya3M7 Cn0KCgoiO3M6ODoiaGVscF9yYXciO3M6MTAwOiJoMS4gYWp3X2Jvb2ttYXJrcwoKVGhpcyBw bHVnaW4gcmVsaWVzIG9uIGRlbC5pY2lvLnVzJyBidWlsdC1pbiBib29rbWFyayBpbXBvcnQv ZXhwb3J0IGZ1bmN0aW9uYWxpdHkuIjtzOjM6Im1kNSI7czozMjoiZjBjMzQyYzQ5NTVjYzY1 ZTExNTI0MGM0MmJjZWYyNWQiO3M6ODoiY29tcHJlc3MiO2I6MDt9