WordPress database error: [UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
UPDATE `osg_options` SET `option_value` = 'a:4:{s:3:\"lku\";s:32:\"742156f9a77e52ebe94a48389e6d4a71\";s:5:\"ukver\";s:16:\"4.3.3 [ID:10858]\";s:5:\"uklch\";i:1586255814;s:6:\"uklfch\";i:1585349969;}', `autoload` = 'no' WHERE `option_name` = '__plugins_cache_244'

WordPress database error: [UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
UPDATE `osg_options` SET `option_value` = 'a:25:{i:1585352722;a:1:{s:18:\"newsletter_geo_run\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"newsletter\";s:4:\"args\";a:0:{}s:8:\"interval\";i:300;}}}i:1585352760;a:1:{s:19:\"nxs_querypost_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:8:\"nxsquery\";s:4:\"args\";a:0:{}s:8:\"interval\";s:2:\"60\";}}}i:1585352966;a:1:{s:10:\"newsletter\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"newsletter\";s:4:\"args\";a:0:{}s:8:\"interval\";i:300;}}}i:1585354554;a:1:{s:34:\"wp_privacy_delete_old_export_files\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1585355370;a:1:{s:16:\"nxs_hourly_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1585358161;a:1:{s:32:\"recovery_mode_clean_expired_keys\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585370024;a:1:{s:22:\"wpmudev_scheduled_jobs\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1585385548;a:3:{s:41:\"wpseo-premium-prominent-words-recalculate\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}s:30:\"wpseo-premium-orphaned-content\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}s:19:\"wpseo-reindex-links\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585388690;a:3:{s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1585388953;a:1:{s:19:\"wp_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585395311;a:1:{s:22:\"analytify_cleanup_logs\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585396800;a:1:{s:20:\"newsletter_automated\";a:1:{s:32:\"d4745e82aecb406b29b31e88c9ff0e4a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:1:{i:0;i:1;}s:8:\"interval\";i:86400;}}}i:1585398660;a:1:{s:25:\"delete_expired_transients\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585402908;a:1:{s:26:\"irp_daily_scheduled_events\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585407811;a:1:{s:28:\"wp_statistics_add_visit_hook\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585414469;a:1:{s:24:\"akismet_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585417348;a:1:{s:16:\"backupbuddy_cron\";a:1:{s:32:\"b2d6f4df5dfc2b203ff6fc9b49103fdc\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:2:{i:0;s:12:\"housekeeping\";i:1;a:0:{}}s:8:\"interval\";i:86400;}}}i:1585422863;a:1:{s:24:\"grunion_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585424221;a:1:{s:30:\"wp_scheduled_auto_draft_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1585575707;a:1:{s:27:\"irp_weekly_scheduled_events\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1585605434;a:1:{s:35:\"monsterinsights_usage_tracking_cron\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1585734969;a:1:{s:31:\"aiosp_sitemap_daily_update_cron\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1586255824;a:1:{s:10:\"nxs_chAPIU\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:0:{}}}}i:1587712809;a:1:{s:24:\"siteground_delete_assets\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:18:\"siteground_monthly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:2635200;}}}s:7:\"version\";i:2;}' WHERE `option_name` = 'cron'

WordPress database error: [UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
UPDATE `osg_options` SET `option_value` = 'a:4:{s:3:\"lku\";s:32:\"742156f9a77e52ebe94a48389e6d4a71\";s:5:\"ukver\";s:16:\"4.3.3 [ID:10858]\";s:5:\"uklch\";i:1586255814;s:6:\"uklfch\";i:1586255814;}', `autoload` = 'no' WHERE `option_name` = '__plugins_cache_244'

WordPress database error: [UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
UPDATE `osg_options` SET `option_value` = 'a:4:{s:3:\"lku\";s:32:\"742156f9a77e52ebe94a48389e6d4a71\";s:5:\"ukver\";s:16:\"4.3.3 [ID:10858]\";s:5:\"uklch\";i:1586255815;s:6:\"uklfch\";i:1586255815;}', `autoload` = 'no' WHERE `option_name` = '__plugins_cache_244'

WordPress database error: [UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
UPDATE `osg_options` SET `option_value` = 'IGlmICghZGVmaW5lZCgnTlhTQVBJVkVSJykpIGRlZmluZSgnTlhTQVBJVkVSJywnNC40LjU1IFtJRDoxMDg1OF0nKTsgaWYgKCFkZWZpbmVkKCdOWFNXUE1VRicpKSBkZWZpbmUoJ05YU1dQTVVGJywnMScpOyBpZiAoIWRlZmluZWQoJ05YU0FQSUNPREUnKSkgZGVmaW5lKCdOWFNBUElDT0RFJywnMScpOyBpZiAoIWRlZmluZWQoJ05YU1dQTElDJykpIGRlZmluZSgnTlhTV1BMSUMnLCcxJyk7IGlmICghZnVuY3Rpb25fZXhpc3RzKCdueHN2NFNNQVMnKSl7ZnVuY3Rpb24gbnhzdjRTTUFTKCl7fX0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ254c19kb1NNQVM0Jykpe2Z1bmN0aW9uIG54c19kb1NNQVM0KCl7fX0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ25zX1NNQVNWNDEnKSl7ZnVuY3Rpb24gbnNfU01BU1Y0MSgpe319IGlmICghZnVuY3Rpb25fZXhpc3RzKCJybmRTdHJpbmciKSkge2Z1bmN0aW9uIHJuZFN0cmluZygkbG5ndGgpeyRzdHI9Jyc7JGNoYXJzPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSI7JHNpemU9c3RybGVuKCRjaGFycyk7Zm9yKCRpPTA7JGk8JGxuZ3RoOyRpKyspeyRzdHIgLj0gJGNoYXJzW3JhbmQoMCwkc2l6ZS0xKV07fSByZXR1cm4gJHN0cjt9fSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibnhzX21rSW1nTm0iKSl7ZnVuY3Rpb24gbnhzX21rSW1nTm0oJGZuLCAkY1R5cGUpeyAkaWV4ID0gYXJyYXkoIi5wbmciLCAiLmpwZyIsICIuZ2lmIiwgIi5qcGVnIik7ICRtYXAgPSBhcnJheSgnaW1hZ2UvZ2lmJz0+Jy5naWYnLCdpbWFnZS9qcGVnJz0+Jy5qcGcnLCdpbWFnZS9wbmcnPT4nLnBuZycpOyAkZm4gPSBzdHJfcmVwbGFjZSgkaWV4LCAnJywgJGZuKTsgaWYgKGlzc2V0KCRtYXBbJGNUeXBlXSkpe3JldHVybiAkZm4uJG1hcFskY1R5cGVdO30gZWxzZSByZXR1cm4gJGZuLiIuanBnIjsgfX0gaWYgKCFmdW5jdGlvbl9leGlzdHMoIm54c19jbEZOIikpeyBmdW5jdGlvbiBueHNfY2xGTigkZm4peyRzY2ggPSBhcnJheSgiPyIsICJbIiwgIl0iLCAiLyIsICJcXCIsICI9IiwgIjwiLCAiPiIsICI6IiwgIjsiLCAiLCIsICInIiwgIlwiIiwgIiYiLCAiJCIsICIjIiwgIioiLCAiKCIsICIpIiwgInwiLCAifiIsICJgIiwgIiEiLCAieyIsICJ9Iik7IHJldHVybiB0cmltKHByZWdfcmVwbGFjZSgnL1tccy1dKy8nLCAnLScsIHN0cl9yZXBsYWNlKCRzY2gsICcnLCAkZm4pKSwgJy4tXycpOyB9fSBpZiAoIWNsYXNzX2V4aXN0cygibnhzX0lQVEMiKSkgeyBjbGFzcyBueHNfSVBUQyB7IGNvbnN0IENSRUFURURfREFURSA9ICcwNTUnOyBjb25zdCBDUkVBVEVEX1RJTUUgPSAnMDYwJzsgY29uc3QgQ09QWVJJR0hUX1NUUklORyA9ICcxMTYnOyBjb25zdCBDQVBUSU9OID0gJzEyMCc7IHByaXZhdGUgJF9tZXRhID0gYXJyYXkoKTsgcHJpdmF0ZSAkX2hhc01ldGEgPSBmYWxzZTsgcHJpdmF0ZSAkX2FsbG93ZWRFeHQgPSBhcnJheSgnanBnJywgJ2pwZWcnLCAncGpwZWcnKTsgcHJpdmF0ZSAkX2ZpbGVuYW1lOyBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpbGVuYW1lKSB7IGlmICghZmlsZV9leGlzdHMoJGZpbGVuYW1lKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCAnSW1hZ2Ugbm90IGZvdW5kIScgKTsgfSBpZiAoIWlzX3dyaXRhYmxlKCRmaWxlbmFtZSkpIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbiggIkZpbGUgXCJ7JGZpbGVuYW1lfVwiIGlzIG5vdCB3cml0YWJsZSEiICk7IH0gJHBhcnRzID0gZXhwbG9kZSgnLicsIHN0cnRvbG93ZXIoJGZpbGVuYW1lKSk7IGlmICghaW5fYXJyYXkoZW5kKCRwYXJ0cyksICR0aGlzLT5fYWxsb3dlZEV4dCkpIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbiggJ1N1cHBvcnQgb25seSBmb3IgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiAnIC4gaW1wbG9kZSgnLCcsICR0aGlzLT5fYWxsb3dlZEV4dCkgKTsgfSAkc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZW5hbWUsICRpbWFnZWluZm8pOyBpZiAoZW1wdHkoJHNpemVbJ21pbWUnXSkgfHwgJHNpemVbJ21pbWUnXSAhPSAnaW1hZ2UvanBlZycpIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbiggJ1N1cHBvcnQgb25seSBKUEVHIGltYWdlcycgKTsgfSAkdGhpcy0+X2hhc01ldGEgPSBpc3NldCgkaW1hZ2VpbmZvWyJBUFAxMyJdKTsgaWYgKCR0aGlzLT5faGFzTWV0YSkgeyAkdGhpcy0+X21ldGEgPSBpcHRjcGFyc2UoJGltYWdlaW5mb1siQVBQMTMiXSk7IH0gJHRoaXMtPl9maWxlbmFtZSA9ICRmaWxlbmFtZTsgfSBwdWJsaWMgZnVuY3Rpb24gc2V0KCR0YWcsICRkYXRhKSB7ICRkYXRhID0gJHRoaXMtPl9jaGFyc2V0X2RlY29kZSgkZGF0YSk7ICR0aGlzLT5fbWV0YVsiMiN7JHRhZ30iXSA9IGFycmF5KCRkYXRhKTsgJHRoaXMtPl9oYXNNZXRhID0gdHJ1ZTsgcmV0dXJuICR0aGlzOyB9IHB1YmxpYyBmdW5jdGlvbiBiaW5hcnkoKSB7ICRpcHRjID0gJyc7IGZvcmVhY2ggKGFycmF5X2tleXMoJHRoaXMtPl9tZXRhKSBhcyAka2V5KSB7ICR0YWcgPSBzdHJfcmVwbGFjZSgiMiMiLCAiIiwgJGtleSk7IGZvcmVhY2ggKCR0aGlzLT5fbWV0YVska2V5XSBhcyAkdmFsdWUpICRpcHRjIC49ICR0aGlzLT5pcHRjTWFrZVRhZygyLCAkdGFnLCAkdmFsdWUpOyB9IHJldHVybiAkaXB0YzsgfSBwdWJsaWMgZnVuY3Rpb24gaXB0Y01ha2VUYWcoJHJlYywgJGRhdCwgJHZhbCl7ICRpcHRjVGFnID0gY2hyKDB4MWMpIC4gY2hyKCRyZWMpIC4gY2hyKCRkYXQpOyBpZiAoaXNfYXJyYXkoJHZhbCkpIHsgJHNyYyA9ICcnOyBmb3JlYWNoICgkdmFsIGFzICRpdGVtKSB7ICRsZW4gPSBzdHJsZW4oJGl0ZW0pOyAkc3JjIC49ICRpcHRjVGFnIC4gJHRoaXMtPl90ZXN0Qml0U2l6ZSgkbGVuKSAuICRpdGVtOyB9IHJldHVybiAkc3JjOyB9ICRsZW4gPSBzdHJsZW4oJHZhbCk7ICRzcmMgPSAkaXB0Y1RhZyAuICR0aGlzLT5fdGVzdEJpdFNpemUoJGxlbikgLiAkdmFsOyByZXR1cm4gJHNyYzsgfSBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoKSB7ICRjb250ZW50ID0gaXB0Y2VtYmVkKCR0aGlzLT5iaW5hcnkoKSwgJHRoaXMtPl9maWxlbmFtZSwgMCk7IGlmICgkY29udGVudCA9PT0gZmFsc2UpIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbiggJ0ZhaWxlZCB0byBzYXZlIElQVEMgZGF0YSBpbnRvIGZpbGUnICk7IH0gdW5saW5rKCR0aGlzLT5fZmlsZW5hbWUpOyBpZiAoJGZpbGUgPSBmb3BlbigkdGhpcy0+X2ZpbGVuYW1lLCAidyIpKSB7IGZ3cml0ZSgkZmlsZSwgJGNvbnRlbnQpOyBmY2xvc2UoJGZpbGUpOyByZXR1cm4gdHJ1ZTsgfSByZXR1cm4gZmFsc2U7IH0gcHJpdmF0ZSBmdW5jdGlvbiBfdGVzdEJpdFNpemUoJGxlbikgeyBpZiAoJGxlbiA8IDB4ODAwMCkgcmV0dXJuIGNocigkbGVuID4+IDgpIC4gY2hyKCRsZW4gJiAweGZmKTsgcmV0dXJuIGNocigweDFjKSAuIGNocigweDA0KSAuIGNocigoJGxlbiA+PiAyNCkgJiAweGZmKSAuIGNocigoJGxlbiA+PiAxNikgJiAweGZmKSAuIGNocigoJGxlbiA+PiA4KSAmIDB4ZmYpIC4gY2hyKCgkbGVuKSAmIDB4ZmYpOyB9IHByaXZhdGUgZnVuY3Rpb24gX2NoYXJzZXRfZGVjb2RlKCRkYXRhKSB7ICRyZXN1bHQgPSBhcnJheSgpOyBpZiAoaXNfYXJyYXkoJGRhdGEpKSB7ICRpdGVyYXRvciA9IG5ldyBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgXFJlY3Vyc2l2ZUFycmF5SXRlcmF0b3IoJGRhdGEpKTsgZm9yZWFjaCAoJGl0ZXJhdG9yIGFzICRrZXkgPT4gJHZhbHVlKSAkcmVzdWx0W10gPSB1dGY4X2RlY29kZSgkdmFsdWUpOyB9IGVsc2UgcmV0dXJuIHV0ZjhfZGVjb2RlKCRkYXRhKTsgcmV0dXJuICRyZXN1bHQ7IH0gcHJpdmF0ZSBmdW5jdGlvbiBfY2hhcnNldF9lbmNvZGUoJGRhdGEpIHsgJHJlc3VsdCA9IGFycmF5KCk7IGlmIChpc19hcnJheSgkZGF0YSkpIHsgJGl0ZXJhdG9yID0gbmV3IFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5ldyBcUmVjdXJzaXZlQXJyYXlJdGVyYXRvcigkZGF0YSkpOyBmb3JlYWNoICgkaXRlcmF0b3IgYXMgJGtleSA9PiAkdmFsdWUpICRyZXN1bHRbXSA9IHV0ZjhfZW5jb2RlKCR2YWx1ZSk7IH0gZWxzZSByZXR1cm4gdXRmOF9lbmNvZGUoJGRhdGEpOyByZXR1cm4gJHJlc3VsdDsgfSB9fSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibnhzX2RvU01BUzEiKSkgeyBmdW5jdGlvbiBueHNfZG9TTUFTMSgkb2JqLCAkdmFyKXsgaWYgKG1ldGhvZF9leGlzdHMoJG9iaiwnc2hvd05ld05UU2V0dGluZ3MnKSkgJG9iai0+c2hvd05ld05UU2V0dGluZ3MoJHZhcik7IH19IGlmICghZnVuY3Rpb25fZXhpc3RzKCdueHNfdjRkb1NNQVM1Jykpe2Z1bmN0aW9uIG54c192NGRvU01BUzUoJG50LCAkaWksICRudE9wdCl7ICRudFUgPSBzdHJ0b3VwcGVyKCRudCk7IGlmICggaXNzZXQoJF9HRVRbJ3BhZ2UnXSkgJiYgJF9HRVRbJ3BhZ2UnXT09J05leHRTY3JpcHRzX1NOQVAucGhwJykgcmV0dXJuOyBnbG9iYWwgJG54c19TTkFQLCAkbnhzX3BsdXJsOyAkZGVsYXk9J3MyMjQzMzAzNTMnOyBpZiAoIWlzc2V0KCRueHNfU05BUCkpIHJldHVybjsgJG9wdGlvbnMgPSAkbnhzX1NOQVAtPm54c19vcHRpb25zOyBpZiAoJG9wdGlvbnNbJ254c0hURFAnXT09J0knKSByZXR1cm4gJyc7IGlmIChlbXB0eSgkbnRPcHRbJ3RpbWVUb1J1biddKSkgJG50T3B0Wyd0aW1lVG9SdW4nXSA9ICcnOyA/PgogIDxkaXYgY2xhc3M9Im54c1Bvc3RFZF9FbGVtV3JhcCI+PGRpdiBjbGFzcz0ibnhzdGJsZG8gbnhzdGJsZG88P3BocCBlY2hvIHN0cnRvdXBwZXIoJG50KS4kaWk7ID8+Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij48P3BocCBfZSgnVGltZSB0byBwb3N0OicsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJykgPz48L3NwYW4+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPD9waHAgZWNobyAkbnQ7ID8+Wzw/cGhwIGVjaG8gJGlpOyA/Pl1bdGltZVRvUnVuXSIgaWQ9Ijw/cGhwIGVjaG8gJG50OyA/Pjw/cGhwIGVjaG8gJGlpOyA/PnRpbWVUb1J1biIgIHZhbHVlPSI8P3BocCBlY2hvICRudE9wdFsndGltZVRvUnVuJ107Pz4iIC8+CiAgPGEgaHJlZj0iIyIgb25jbGljaz0idmFyIGRkID0galF1ZXJ5KCcjPD9waHAgZWNobyAkbnQ7ID8+PD9waHAgZWNobyAkaWk7ID8+dGltZVRvUnVuJykudmFsKCk7IGlmIChkZCE9JycpIG54c19maWxsVGltZShkZCoxMDAwKTsgalF1ZXJ5KCcjbnhzX3RpbWVJRCcpLnZhbCgnPD9waHAgZWNobyAkbnQ7ID8+PD9waHAgZWNobyAkaWk7ID8+Jyk7IGpRdWVyeS5wZ3dNb2RhbCh7IHRhcmdldDogJyNzaG93U2V0VGltZUludCcsIHRpdGxlOiAnUG9zdCcsIG1heFdpZHRoOiA4MDAsIGNsb3NlT25CYWNrZ3JvdW5kQ2xpY2sgOiB0cnVlfSk7ICByZXR1cm4gZmFsc2U7Ij5bPD9waHAgX2UoJ1NldCB0aW1lJywgJ3NvY2lhbC1uZXR3b3Jrcy1hdXRvLXBvc3Rlci1mYWNlYm9vay10d2l0dGVyLWcnKSA/Pl08L2E+IAogIDxzcGFuIGlkPSI8P3BocCBlY2hvICRudDsgPz48P3BocCBlY2hvICRpaTsgPz50aW1lVG9SdW5UeHQiPjw/cGhwICBpZiAoIWlzc2V0KCRudE9wdFsndGltZVRvUnVuJ10pIHx8IChpbnQpJG50T3B0Wyd0aW1lVG9SdW4nXTwoIWVtcHR5KCRudE9wdFsncG9zdFRpbWUnXSk/JG50T3B0Wydwb3N0VGltZSddOnRpbWUoKSkpIHsgaWYgKCFpc3NldCgkbnRPcHRbJ25NaW4nXSkpICRudE9wdFsnbk1pbiddID0gMDsgaWYgKCFpc3NldCgkbnRPcHRbJ25IcnMnXSkpICRudE9wdFsnbkhycyddID0gMDsgaWYgKCFpc3NldCgkbnRPcHRbJ25EYXlzJ10pKSAkbnRPcHRbJ25EYXlzJ10gPSAwOyAkZGVsYXkgPSAoaW50KSRudE9wdFsnbkRheXMnXSo4NjQwMCsoaW50KSRudE9wdFsnbkhycyddKjM2MDArKGludCkkbnRPcHRbJ25NaW4nXSo2MDsgaWYgKCRkZWxheT4wKSB7ICRudE9wdFsndGltZVRvUnVuJ10gPSAoIWVtcHR5KCRudE9wdFsncG9zdFRpbWUnXSk/JG50T3B0Wydwb3N0VGltZSddOnRpbWUoKSkrKGludCkkZGVsYXk7IGVjaG8gZGF0ZV9pMThuKCdGIGosIFksIEc6aScsICRudE9wdFsndGltZVRvUnVuJ10rKCBlbXB0eSgkbnRPcHRbJ3Bvc3RUaW1lJ10pPyhnZXRfb3B0aW9uKCAnZ210X29mZnNldCcgKSAqIEhPVVJfSU5fU0VDT05EUyApOjApKTsgZWNobyAiIChEZWxheTogIi4oKGludCkkbnRPcHRbJ25EYXlzJ10+MD8kbnRPcHRbJ25EYXlzJ10uJyBEYXknLigoaW50KSRudE9wdFsnbkRheXMnXSE9MT8ncywgJzonLCAnKTonJykuKChpbnQpJG50T3B0WyduSHJzJ10+MD8kbnRPcHRbJ25IcnMnXS4nIEhvdXInLigoaW50KSRudE9wdFsnbkhycyddIT0xPydzLCAnOicsICcpOicnKS4oaW50KSRudE9wdFsnbk1pbiddLicgTWludXRlJy4oKGludCkkbnRPcHRbJ25NaW4nXSE9MT8ncy4gJzonLiAnKS4iKSI7IH0gZWxzZWlmICgoaW50KSRudE9wdFsndGltZVRvUnVuJ10+MCkgZWNobyBkYXRlX2kxOG4oJ0YgaiwgWSwgRzppJywgJG50T3B0Wyd0aW1lVG9SdW4nXSsoIGdldF9vcHRpb24oICdnbXRfb2Zmc2V0JyApICogSE9VUl9JTl9TRUNPTkRTICkpOyBlbHNlIHsgX2UoJ0ltbWVkaWF0ZWx5Jyk7IH0gfSBlbHNlIGVjaG8gZGF0ZV9pMThuKCdGIGosIFksIEc6aScsICRudE9wdFsndGltZVRvUnVuJ10rKCBnZXRfb3B0aW9uKCAnZ210X29mZnNldCcgKSAqIEhPVVJfSU5fU0VDT05EUyApKTsgPz4gPC9zcGFuPgogIDxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsiIGlkPSJkbzw/cGhwIGVjaG8gJG50VTsgPz5fVDw/cGhwIGVjaG8gJGlpOyA/PiI+PC9kaXY+PC9kaXY+IDwvZGl2PiA8P3BocAp9fSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnbnhzX3Y0ZG9TTUFTNVgnKSl7ZnVuY3Rpb24gbnhzX3Y0ZG9TTUFTNVgoJG50LCAkaWksICRudE9wdCl7ICRudFUgPSBzdHJ0b3VwcGVyKCRudCk7IGlmICggaXNzZXQoJF9HRVRbJ3BhZ2UnXSkgJiYgJF9HRVRbJ3BhZ2UnXT09J05leHRTY3JpcHRzX1NOQVAucGhwJykgcmV0dXJuOyBnbG9iYWwgJG54c19TTkFQLCAkbnhzX3BsdXJsOyAkZGVsYXk9J3MyMjQzMzAzNTMnOyBpZiAoIWlzc2V0KCRueHNfU05BUCkpIHJldHVybjsgJG9wdGlvbnMgPSAkbnhzX1NOQVAtPm54c19vcHRpb25zOyBpZiAoJG9wdGlvbnNbJ254c0hURFAnXT09J0knKSByZXR1cm4gJyc7IGlmIChlbXB0eSgkbnRPcHRbJ3RpbWVUb1J1biddKSkgJG50T3B0Wyd0aW1lVG9SdW4nXSA9ICdpJzsgJG50dEQgPSAkbnRPcHRbJ3RpbWVUb1J1biddOyBpZiAoIWVtcHR5KCRudHREKSkgeyAkbnR0QSA9IGV4cGxvZGUoJ3wnLCRudHREKTsgaWYgKCFlbXB0eSgkbnRPcHRbJ3Bvc3RUaW1lJ10pICYmICRudE9wdFsncG9zdFRpbWUnXT50aW1lKCkpIHsgJG50dEFYID0gYXJyYXkoKTsgJGltbWlkID0gZmFsc2U7IGZvcmVhY2ggKCRudHRBIGFzICRqaj0+JG50dCkgaWYgKCRudHQ9PSdpJyB8fCAkbnR0PCRudE9wdFsncG9zdFRpbWUnXSkgJGltbWlkID0gdHJ1ZTsgZWxzZSAkbnR0QVhbXSA9ICRudHQ7IGlmICgkaW1taWQpIGFycmF5X3Vuc2hpZnQoJG50dEFYICwgJ2knKTsgJG50dEEgPSAkbnR0QVg7IH0gJG50dEQgPSBpbXBsb2RlKCd8JywkbnR0QSk7ICRudE9wdFsndGltZVRvUnVuJ10gPSAkbnR0RDsgfSA/PgogIDxkaXYgY2xhc3M9Im54c1Bvc3RFZF9FbGVtV3JhcCI+PGRpdiBjbGFzcz0ibnhzdGJsZG8gbnhzdGJsZG88P3BocCBlY2hvIHN0cnRvdXBwZXIoJG50KS4kaWk7ID8+Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij48P3BocCBfZSgnVGltZSB0byBwb3N0OicsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJykgPz48L3NwYW4+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPD9waHAgZWNobyAkbnQ7ID8+Wzw/cGhwIGVjaG8gJGlpOyA/Pl1bdGltZVRvUnVuXSIgaWQ9Ijw/cGhwIGVjaG8gJG50OyA/Pjw/cGhwIGVjaG8gJGlpOyA/PnRpbWVUb1J1biIgIHZhbHVlPSI8P3BocCBlY2hvICRudE9wdFsndGltZVRvUnVuJ107Pz4iIC8+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Ijw/cGhwIGVjaG8gJG50OyA/Pjw/cGhwIGVjaG8gJGlpOyA/PnRpbWVUb1J1bldNIiAgdmFsdWU9IkEiIC8+CiAgPGEgaHJlZj0iIyIgb25jbGljaz0ibnhzX3Nob3dUaW1lRGlhbG9nKCc8P3BocCBlY2hvICRudC4kaWk7ID8+JywnQScpOyByZXR1cm4gZmFsc2U7Ij5bPD9waHAgX2UoJ0FkZCcsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJykgPz5dPC9hPiAKICA8c3BhbiBpZD0iPD9waHAgZWNobyAkbnQ7ID8+PD9waHAgZWNobyAkaWk7ID8+dGltZVRvUnVuVHh0Ij48P3BocCBpZiAoIWVtcHR5KCRudHREKSkgeyAkbnR0QSA9IGV4cGxvZGUoJ3wnLCRudHREKTsgZm9yZWFjaCAoJG50dEEgYXMgJGpqPT4kbnR0KSB7IGlmICghaXNzZXQoJG50dCkgfHwgKGludCkkbnR0PCghZW1wdHkoJG50T3B0Wydwb3N0VGltZSddKT8kbnRPcHRbJ3Bvc3RUaW1lJ106dGltZSgpKSkgeyBpZiAoIWlzc2V0KCRudE9wdFsnbk1pbiddKSkgJG50T3B0WyduTWluJ10gPSAwOyBpZiAoIWlzc2V0KCRudE9wdFsnbkhycyddKSkgJG50T3B0WyduSHJzJ10gPSAwOyBpZiAoIWlzc2V0KCRudE9wdFsnbkRheXMnXSkpICRudE9wdFsnbkRheXMnXSA9IDA7ICRkZWxheSA9IChpbnQpJG50T3B0WyduRGF5cyddKjg2NDAwKyhpbnQpJG50T3B0WyduSHJzJ10qMzYwMCsoaW50KSRudE9wdFsnbk1pbiddKjYwOyBpZiAoJGRlbGF5PjApIHsgJG50dCA9ICghZW1wdHkoJG50T3B0Wydwb3N0VGltZSddKT8kbnRPcHRbJ3Bvc3RUaW1lJ106dGltZSgpKSsoaW50KSRkZWxheTsgZWNobyBkYXRlX2kxOG4oJ0YgaiwgWSwgRzppJywgJG50dCsoIGVtcHR5KCRudE9wdFsncG9zdFRpbWUnXSk/KGdldF9vcHRpb24oICdnbXRfb2Zmc2V0JyApICogSE9VUl9JTl9TRUNPTkRTICk6MCkpOyBlY2hvICIgKERlbGF5OiAiLigoaW50KSRudE9wdFsnbkRheXMnXT4wPyRudE9wdFsnbkRheXMnXS4nIERheScuKChpbnQpJG50T3B0WyduRGF5cyddIT0xPydzLCAnOicsICcpOicnKS4oKGludCkkbnRPcHRbJ25IcnMnXT4wPyRudE9wdFsnbkhycyddLicgSG91cicuKChpbnQpJG50T3B0WyduSHJzJ10hPTE/J3MsICc6JywgJyk6JycpLihpbnQpJG50T3B0WyduTWluJ10uJyBNaW51dGUnLigoaW50KSRudE9wdFsnbk1pbiddIT0xPydzLiAnOicuICcpLiIpIjsgfSBlbHNlaWYgKChpbnQpJG50dD4wICYmIChpbnQpJG50dD4oIWVtcHR5KCRudE9wdFsncG9zdFRpbWUnXSk/JG50T3B0Wydwb3N0VGltZSddOnRpbWUoKSkpIGVjaG8gZGF0ZV9pMThuKCdGIGosIFksIEc6aScsICRudHQrKCBnZXRfb3B0aW9uKCAnZ210X29mZnNldCcgKSAqIEhPVVJfSU5fU0VDT05EUyApKTsgZWxzZSB7IF9lKCdJbW1lZGlhdGVseScpOyA/PgogICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9Im54c19zaG93VGltZURpYWxvZygnPD9waHAgZWNobyAkbnQuJGlpOyA/PicsJ0MnKTsgcmV0dXJuIGZhbHNlOyI+Wzw/cGhwIF9lKCdDaGFuZ2UnLCAnc29jaWFsLW5ldHdvcmtzLWF1dG8tcG9zdGVyLWZhY2Vib29rLXR3aXR0ZXItZycpID8+XTwvYT4gPD9waHAgIH0gfSBlbHNlIHsgZWNobyBkYXRlX2kxOG4oJ0YgaiwgWSwgRzppJywgJG50dCsoIGdldF9vcHRpb24oICdnbXRfb2Zmc2V0JyApICogSE9VUl9JTl9TRUNPTkRTICkpLiIgIjsgPz4KICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9Im54c19zaG93VGltZURpYWxvZygnPD9waHAgZWNobyAkbnQuJGlpOyA/PicsJzw/cGhwIGVjaG8gJGpqOyA/PicpOyByZXR1cm4gZmFsc2U7Ij5bPD9waHAgX2UoJ0NoYW5nZScsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJykgPz5dPC9hPiZuYnNwO3wmbmJzcDsgPD9waHAgIH0gfX0gPz4gPC9zcGFuPgogIDxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsiIGlkPSJkbzw/cGhwIGVjaG8gJG50VTsgPz5fVDw/cGhwIGVjaG8gJGlpOyA/PiI+PC9kaXY+PC9kaXY+IDwvZGl2PiAgPD9waHAKfX0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ254c192NGRvU01BUzQxJykpe2Z1bmN0aW9uIG54c192NGRvU01BUzQxKCRvcHRpb25zKXsgPz48YnIvPgo8Yj48P3BocCBfZSgnUG9zdDonLCAnc29jaWFsLW5ldHdvcmtzLWF1dG8tcG9zdGVyLWZhY2Vib29rLXR3aXR0ZXItZycpOyA/PiA8L2I+IDw/cGhwIF9lKCdZb3UgY2FuIGxpbWl0IHJlcG9zdGluZyB0byBvbmx5IHNwZWNpZmljIGRheXMgYW5kIGhvdXJzLicsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJyk7ID8+Jm5ic3A7KDw/cGhwIF9lKCdDdXJyZW50IHNlcnZlciB0aW1lIGlzOiAnLCAnc29jaWFsLW5ldHdvcmtzLWF1dG8tcG9zdGVyLWZhY2Vib29rLXR3aXR0ZXItZycpOyBlY2hvIGRhdGVfaTE4bignWS1tLWQgSDppJyk7ID8+KSAgICAgCiAgICAgPGJyLz4KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OiAxNXB4OyI+CiAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJueHNfcnBzdHJbcnBzdEJ0d0hyc1R5cGVdIiB2YWx1ZT0iQSIgPD9waHAgaWYgKCFpc3NldCgkb3B0aW9uc1sncnBzdEJ0d0hyc1R5cGUnXSkgfHwgJG9wdGlvbnNbJ3Jwc3RCdHdIcnNUeXBlJ109PSdBJykgZWNobyAnY2hlY2tlZD0iY2hlY2tlZCInOyA/PiAvPiAgICAgCiAgICAgPD9waHAgX2UoJ0FsbCB0aGUgdGltZScsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJyk7ID8+CiAgICAgPGJyLz4KICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im54c19ycHN0cltycHN0QnR3SHJzVHlwZV0iIHZhbHVlPSJEIiA8P3BocCBpZiAoaXNzZXQoJG9wdGlvbnNbJ3Jwc3RCdHdIcnNUeXBlJ10pICYmICRvcHRpb25zWydycHN0QnR3SHJzVHlwZSddPT0nRCcpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsgPz4gLz4KICAgICA8P3BocCBfZSgnT25seSBiZXR3ZWVuIGhvdXJzJywgJ3NvY2lhbC1uZXR3b3Jrcy1hdXRvLXBvc3Rlci1mYWNlYm9vay10d2l0dGVyLWcnKTsgPz4mbmJzcDs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibnhzX3Jwc3RyW3Jwc3RCdHdIcnNGXSIgc3R5bGU9IndpZHRoOiAzNXB4OyIgdmFsdWU9Ijw/cGhwIGVjaG8gaXNzZXQoJG9wdGlvbnNbJ3Jwc3RCdHdIcnNGJ10pPyRvcHRpb25zWydycHN0QnR3SHJzRiddOic4JzsgPz4iIC8+CiAgICAgJm5ic3A7PD9waHAgX2UoJ2FuZCcsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJyk7ID8+Jm5ic3A7CiAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im54c19ycHN0cltycHN0QnR3SHJzVF0iIHN0eWxlPSJ3aWR0aDogMzVweDsiIHZhbHVlPSI8P3BocCBlY2hvIGlzc2V0KCRvcHRpb25zWydycHN0QnR3SHJzVCddKT8kb3B0aW9uc1sncnBzdEJ0d0hyc1QnXTonMjEnOyA/PiIgLz4KICAgICAmbmJzcDs8P3BocCBfZSgnb24nLCAnc29jaWFsLW5ldHdvcmtzLWF1dG8tcG9zdGVyLWZhY2Vib29rLXR3aXR0ZXItZycpOz8+Jm5ic3A7CiAgICAgPGlucHV0IHZhbHVlPSI3IiA8P3BocCBpZiAoaXNzZXQoJG9wdGlvbnNbJ3Jwc3RCdHdEYXlzJ10pICYmIGluX2FycmF5KCc3JywgJG9wdGlvbnNbJ3Jwc3RCdHdEYXlzJ10pKSBlY2hvICJjaGVja2VkIjsgPz4gdHlwZT0iY2hlY2tib3giIG5hbWU9Im54c19ycHN0cltycHN0QnR3RGF5c11bXSIvPiZuYnNwO1N1biZuYnNwOyZuYnNwOwogICAgIDxpbnB1dCB2YWx1ZT0iMSIgPD9waHAgaWYgKCFpc3NldCgkb3B0aW9uc1sncnBzdEJ0d0RheXMnXSkgfHwgaW5fYXJyYXkoJzEnLCAkb3B0aW9uc1sncnBzdEJ0d0RheXMnXSkpIGVjaG8gImNoZWNrZWQiOyA/PiB0eXBlPSJjaGVja2JveCIgbmFtZT0ibnhzX3Jwc3RyW3Jwc3RCdHdEYXlzXVtdIi8+Jm5ic3A7TW9uJm5ic3A7Jm5ic3A7CiAgICAgPGlucHV0IHZhbHVlPSIyIiA8P3BocCBpZiAoIWlzc2V0KCRvcHRpb25zWydycHN0QnR3RGF5cyddKSB8fCBpbl9hcnJheSgnMicsICRvcHRpb25zWydycHN0QnR3RGF5cyddKSkgZWNobyAiY2hlY2tlZCI7ID8+IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJueHNfcnBzdHJbcnBzdEJ0d0RheXNdW10iLz4mbmJzcDtUdWUmbmJzcDsmbmJzcDsKICAgICA8aW5wdXQgdmFsdWU9IjMiIDw/cGhwIGlmICghaXNzZXQoJG9wdGlvbnNbJ3Jwc3RCdHdEYXlzJ10pIHx8IGluX2FycmF5KCczJywgJG9wdGlvbnNbJ3Jwc3RCdHdEYXlzJ10pKSBlY2hvICJjaGVja2VkIjsgPz4gdHlwZT0iY2hlY2tib3giIG5hbWU9Im54c19ycHN0cltycHN0QnR3RGF5c11bXSIvPiZuYnNwO1dlbiZuYnNwOyZuYnNwOwogICAgIDxpbnB1dCB2YWx1ZT0iNCIgPD9waHAgaWYgKCFpc3NldCgkb3B0aW9uc1sncnBzdEJ0d0RheXMnXSkgfHwgaW5fYXJyYXkoJzQnLCAkb3B0aW9uc1sncnBzdEJ0d0RheXMnXSkpIGVjaG8gImNoZWNrZWQiOyA/PiB0eXBlPSJjaGVja2JveCIgbmFtZT0ibnhzX3Jwc3RyW3Jwc3RCdHdEYXlzXVtdIi8+Jm5ic3A7VGgmbmJzcDsmbmJzcDsKICAgICA8aW5wdXQgdmFsdWU9IjUiIDw/cGhwIGlmICghaXNzZXQoJG9wdGlvbnNbJ3Jwc3RCdHdEYXlzJ10pIHx8IGluX2FycmF5KCc1JywgJG9wdGlvbnNbJ3Jwc3RCdHdEYXlzJ10pKSBlY2hvICJjaGVja2VkIjsgPz4gdHlwZT0iY2hlY2tib3giIG5hbWU9Im54c19ycHN0cltycHN0QnR3RGF5c11bXSIvPiZuYnNwO0ZyJm5ic3A7Jm5ic3A7CiAgICAgPGlucHV0IHZhbHVlPSI2IiA8P3BocCBpZiAoaXNzZXQoJG9wdGlvbnNbJ3Jwc3RCdHdEYXlzJ10pICYmIGluX2FycmF5KCc2JywgJG9wdGlvbnNbJ3Jwc3RCdHdEYXlzJ10pKSBlY2hvICJjaGVja2VkIjsgPz4gdHlwZT0iY2hlY2tib3giIG5hbWU9Im54c19ycHN0cltycHN0QnR3RGF5c11bXSIvPiZuYnNwO1NhdCZuYnNwOyZuYnNwOwogICAgIDwvZGl2PiA8P3BocAp9fSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnbnhzX3Y0ZG9TTUFTNDEyJykpe2Z1bmN0aW9uIG54c192NGRvU01BUzQxMigkb3B0aW9ucyl7ID8+PGJyLz4KICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJueHNfcnBzdHJbcnBzdFN0b3BdIiB2YWx1ZT0iTyIgPD9waHAgaWYgKGVtcHR5KCRvcHRpb25zWydycHN0U3RvcCddKSB8fCAkb3B0aW9uc1sncnBzdFN0b3AnXT09J08nKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIic7ID8+IC8+PD9waHAgX2UoJ1R1cm4gUmVwb3N0aW5nIE9mZicsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJykgPz48YnIvPgogICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im54c19ycHN0cltycHN0U3RvcF0iIHZhbHVlPSJXIiA8P3BocCBpZiAoIWVtcHR5KCRvcHRpb25zWydycHN0U3RvcCddKSAmJiAkb3B0aW9uc1sncnBzdFN0b3AnXT09J1cnKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIic7ID8+IC8+PD9waHAgX2UoJ1dhaXQgZm9yIG5ldyBwb3N0cycsICdzb2NpYWwtbmV0d29ya3MtYXV0by1wb3N0ZXItZmFjZWJvb2stdHdpdHRlci1nJykgPz48YnIvPgogICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im54c19ycHN0cltycHN0U3RvcF0iIHZhbHVlPSJSIiA8P3BocCBpZiAoIWVtcHR5KCRvcHRpb25zWydycHN0U3RvcCddKSAmJiAkb3B0aW9uc1sncnBzdFN0b3AnXT09J1InKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIic7ID8+IC8+PD9waHAgX2UoJ0xvb3AgaXQuIFJlc2V0IGFuZCBTdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcnLCAnc29jaWFsLW5ldHdvcmtzLWF1dG8tcG9zdGVyLWZhY2Vib29rLXR3aXR0ZXItZycpID8+PGJyLz4KICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJueHNfcnBzdHJbcnBzdFN0b3BdIiB2YWx1ZT0iTiIgPD9waHAgaWYgKCFlbXB0eSgkb3B0aW9uc1sncnBzdFN0b3AnXSkgJiYgJG9wdGlvbnNbJ3Jwc3RTdG9wJ109PSdOJykgZWNobyAnY2hlY2tlZD0iY2hlY2tlZCInOyA/PiAvPjw/cGhwIF9lKCdSZXBlYXQnLCAnc29jaWFsLW5ldHdvcmtzLWF1dG8tcG9zdGVyLWZhY2Vib29rLXR3aXR0ZXItZycpID8+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJueHNfcnBzdHJbcnBzdFN0b3BScHRdIiBzdHlsZT0id2lkdGg6IDM1cHg7IiB2YWx1ZT0iPD9waHAgZWNobyBpc3NldCgkb3B0aW9uc1sncnBzdFN0b3BScHQnXSk/JG9wdGlvbnNbJ3Jwc3RTdG9wUnB0J106JzUnOyA/PiIgLz4mbmJzcDs8P3BocCBfZSgnVGltZXMnLCAnc29jaWFsLW5ldHdvcmtzLWF1dG8tcG9zdGVyLWZhY2Vib29rLXR3aXR0ZXItZycpID8+PGJyLz4KICAgICAgPD9waHAKfX0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ254c192NGRvU01BUzQxMycpKXtmdW5jdGlvbiBueHNfdjRkb1NNQVM0MTMoJG9wdGlvbnMpeyAkY3VyclRpbWUgPSB0aW1lKCkgKyAoIGdldF9vcHRpb24oICdnbXRfb2Zmc2V0JyApICogSE9VUl9JTl9TRUNPTkRTICk7ID8+Cjxici8+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJueHNfcnBzdHJbcnBzdFRpbWVzXSIgdmFsdWU9IlMiIGNsYXNzPSJycHN0clRpbWVzIiA8P3BocCBpZiAoIWVtcHR5KCRvcHRpb25zWydycHN0VGltZXMnXSkgJiYgJG9wdGlvbnNbJ3Jwc3RUaW1lcyddPT0nUycpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsgPz4gLz4gPD9waHAgX2UoJ1Bvc3Qgb24gc3BlY2lmaWMgZGF0ZS90aW1lJywgJ3NvY2lhbC1uZXR3b3Jrcy1hdXRvLXBvc3Rlci1mYWNlYm9vay10d2l0dGVyLWcnKSA/Pgo8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDoyMHB4O2Rpc3BsYXk6PD9waHAgZWNobyAoIWVtcHR5KCRvcHRpb25zWydycHN0VGltZXMnXSkgJiYgJG9wdGlvbnNbJ3Jwc3RUaW1lcyddPT0nUycpPydibG9jayc6J25vbmUnOz8+OyIgaWQ9InJwc3RQb3N0U3BUaW1lc09wdGlvbnMiPjw/cGhwCiBpZiAoIWVtcHR5KCRvcHRpb25zWydycHN0Q3VzdFREJ10pICYmIGlzX2FycmF5KCRvcHRpb25zWydycHN0Q3VzdFREJ10pKSBmb3JlYWNoICgkb3B0aW9uc1sncnBzdEN1c3RURCddIGFzICR0ZCkgeyBpZihzdHJ0b3RpbWUoJHRkKT4kY3VyclRpbWUpIGVjaG8gJzxkaXY+PGlucHV0IHR5cGU9XCd0ZXh0XCcgY2xhc3M9XCdycHN0UG9zdER0U3BUaW1lc09wdGlvbnMgc2VhcmNoXCcgbmFtZT1cJ254c19ycHN0cltycHN0Q3VzdFREXVtdXCcgdmFsdWU9IicuJHRkLiciIC8+PGEgaHJlZj0iIyIgb25jbGljaz0ialF1ZXJ5KHRoaXMpLnBhcmVudCgpLnJlbW92ZSgpO3JldHVybiBmYWxzZTsiPjxpbWcgc3JjPSInLk5YU19QTFVSTC4naW1nL2RlbEljb24ucG5nIi8+PC9hPjwvZGl2Pic7IH0gPz48YnIvPjxhIGhyZWY9IiMiIGlkPSJycHN0c0FkZFRpbWUiIG9uY2xpY2s9ImpRdWVyeSgnI3Jwc3RQb3N0U3BUaW1lc09wdGlvbnMnKS5hcHBlbmQoJzxkaXY+PGlucHV0IHR5cGU9XCd0ZXh0XCcgY2xhc3M9XCdycHN0UG9zdER0U3BUaW1lc09wdGlvbnNYIHNlYXJjaFwnIG5hbWU9XCdueHNfcnBzdHJbcnBzdEN1c3RURF1bXVwnIC8+PGEgaHJlZj1cJyNcJyBvbmNsaWNrPVwnalF1ZXJ5KHRoaXMpLnBhcmVudCgpLnJlbW92ZSgpO3JldHVybiBmYWxzZTtcJz48aW1nIHNyYz1cJzw/cGhwIGVjaG8gTlhTX1BMVVJMOz8+aW1nL2RlbEljb24ucG5nXCcvPjwvYT48L2Rpdj4nKTtqUXVlcnkoJy5ycHN0UG9zdER0U3BUaW1lc09wdGlvbnNYJykuYWRhdGVwaWNrZXIoe2xhbmd1YWdlOiAnZW4nLCBtaW5EYXRlOiBuZXcgRGF0ZSgpLCB0aW1lcGlja2VyOiB0cnVlfSk7IHJldHVybiBmYWxzZTsiPls8P3BocCBfZSgnQWRkIHBvc3QgZGF0ZS90aW1lJywgJ3NvY2lhbC1uZXR3b3Jrcy1hdXRvLXBvc3Rlci1mYWNlYm9vay10d2l0dGVyLWcnKSA/Pl08L2E+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmpRdWVyeSgnLnJwc3RQb3N0RHRTcFRpbWVzT3B0aW9ucycpLmFkYXRlcGlja2VyKHtsYW5ndWFnZTogJ2VuJyxtaW5EYXRlOiBuZXcgRGF0ZSgpLCB0aW1lcGlja2VyOiB0cnVlfSk7PC9zY3JpcHQ+Cjw/cGhwCn19IGlmICghZnVuY3Rpb25fZXhpc3RzKCdueHNfY2xlYW5TTkFQX3Bvc3RfbWV0YScpKXsgZnVuY3Rpb24gbnhzX2NsZWFuU05BUF9wb3N0X21ldGEoJHBvKXsgJHBvT3V0ID0gYXJyYXkoKTsgaWYgKCFlbXB0eSgkcG8pJiZpc19hcnJheSgkcG8pKSB7Zm9yZWFjaCAoJHBvIGFzICRpaT0+JHApIGlmICgoaXNzZXQoJGlpKSAmJiAoJGlpID09PSAiMCJ8fCRpaSA9PT0gMCkpIHx8ICFlbXB0eSgkaWkpKSAkcG9PdXRbJGlpXSA9ICRwOyByZXR1cm4gJHBvT3V0O30gZWxzZSByZXR1cm4gJHBvOyB9fSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibnhzX3Y0ZG9TTUFTMiIpKXsgZnVuY3Rpb24gbnhzX3Y0ZG9TTUFTMigkcG9zdE9iaiwgJE5YU19QT1NULCAkcHVibHR5cGUsICRhaj1mYWxzZSl7IGdsb2JhbCAkbnhzX1NOQVAsICRueHNfc25hcEF2TnRzLCAkYmxvZ19pZCwgJG54c190cFdNUFU7IGlmICghaXNzZXQoJG54c19TTkFQKSkgcmV0dXJuOyAkb3B0aW9ucyA9ICRueHNfU05BUC0+bnhzX29wdGlvbnM7ICRpc1Bvc3QgPSBpc3NldCgkTlhTX1BPU1RbInNuYXBFZElUIl0pOyAkcG9zdElEID0gJHBvc3RPYmotPklEOyAkdWlkID0gJHBvc3RPYmotPnBvc3RfYXV0aG9yOyAkaXNJdFVzZXJXaG9DYW4gPSAoIXVzZXJfY2FuKCR1aWQsICdtYW5hZ2Vfb3B0aW9ucycgKSAmJiB1c2VyX2NhbigkdWlkLCAnaGF2ZW93bl9zbmFwX2FjY3NzJykpOyBpZiAoJGlzSXRVc2VyV2hvQ2FuKSB7ICRueHNfU05BUCA9IG5ldyBueHNfU05BUCgkcG9zdFVzZXIpOyAkbmV0d29ya3MgPSAkbnhzX1NOQVAtPm54c19hY2N0c1U7ICR1aWQgPSAkcG9zdFVzZXI7IGdsb2JhbCAkbnhzX3VpZDsgJG54c191aWQgPSAkdWlkOyB9IGVsc2UgeyAkbmV0d29ya3MgPSAkbnhzX1NOQVAtPm54c19hY2N0czsgfSBmb3JlYWNoICgkbnhzX3NuYXBBdk50cyBhcyAkYXZOdCkgeyBpZiAoIWVtcHR5KCRuZXR3b3Jrc1skYXZOdFsnbGNvZGUnXV0pICYmIGNvdW50KCRuZXR3b3Jrc1skYXZOdFsnbGNvZGUnXV0pPjApIHsgJGNsTmFtZSA9ICdueHNfc25hcENsYXNzJy4kYXZOdFsnY29kZSddOyBpZiAoJGlzUG9zdCAmJiBpc3NldCgkTlhTX1BPU1RbJGF2TnRbJ2xjb2RlJ11dKSkgJHBvID0gJE5YU19QT1NUWyRhdk50WydsY29kZSddXTsgZWxzZSAkcG8gPSBtYXliZV91bnNlcmlhbGl6ZShnZXRfcG9zdF9tZXRhKCRwb3N0SUQsICdzbmFwJy4kYXZOdFsnY29kZSddLCB0cnVlKSk7ICRwbyA9IG54c19jbGVhblNOQVBfcG9zdF9tZXRhKCRwbyk7IGlmIChpc3NldCgkcG8pICYmIGlzX2FycmF5KCRwbykpICRpc1Bvc3RNZXRhID0gdHJ1ZTsgZWxzZSB7ICRpc1Bvc3RNZXRhID0gZmFsc2U7ICRwbyA9ICRuZXR3b3Jrc1skYXZOdFsnbGNvZGUnXV07IHVwZGF0ZV9wb3N0X21ldGEoJHBvc3RJRCwgJ3NuYXAnLiRhdk50Wydjb2RlJ10sICRwbyk7IH0gZGVsZXRlX3Bvc3RfbWV0YSgkcG9zdElELCAnc25hcF9pc0F1dG9Qb3N0ZWQnKTsgYWRkX3Bvc3RfbWV0YSgkcG9zdElELCAnc25hcF9pc0F1dG9Qb3N0ZWQnLCB0aW1lKCkpOyBmb3JlYWNoICgkcG8gYXMgJGlpPT4kcHApeyAkb3B0TXQgPSAkbmV0d29ya3NbJGF2TnRbJ2xjb2RlJ11dWyRpaV07ICRudENsSW5zdCA9IG5ldyAkY2xOYW1lKCk7IGlmICgkaXNQb3N0TWV0YSkgJG9wdE10ID0gJG50Q2xJbnN0LT5hZGpNZXRhT3B0KCRvcHRNdCwgJHBwKTsgaWYgKCEkbnRDbEluc3QtPmNoZWNrSWZTZXR1cEZpbmlzaGVkKCRvcHRNdCkpIGNvbnRpbnVlOyAkb3B0TXRbJ2lpJ10gPSAkaWk7ICRwdWJsVGVtcFR5cGUgPSAnJzsgaWYgKCRvcHRNdFsnZG8nXT09JzInKXsgJHJNc2c9bnhzX3NuYXBDaGVja0ZpbHRlcnMoJG9wdE10LCAkcG9zdE9iaik7IGlmKCRyTXNnIT09ZmFsc2UpeyBueHNfTG9nSXQoJ0knLCAnU2tpcHBlZCcsICRhdk50WyduYW1lJ10uJyAoJy4kb3B0TXRbJ25OYW1lJ10uJyknLCcnLCAnRmlsdGVyKE5ldHdvcmspIC0gRXhjbHVkZWQgLSBQb3N0IElEOignLiRwb3N0SUQuJyknLCRyTXNnLCAnc25hcCcsICR1aWQgKTsgY29udGludWU7IH0gZWxzZSAkb3B0TXRbJ2RvJ10gPSAxOyB9IGlmICgkb3B0TXRbJ2RvJ109PScxJykgeyBpZiAoJHB1Ymx0eXBlPT0nQScgJiYgKCFlbXB0eSgkb3B0TXRbJ25EYXlzJ10pIHx8ICFlbXB0eSgkb3B0TXRbJ25NaW4nXSkgfHwgIWVtcHR5KCRvcHRNdFsnbkhycyddKSB8fCAhZW1wdHkoJG9wdE10Wyd0aW1lVG9SdW4nXSkpKSAkcHVibFRlbXBUeXBlPSdTJzsgaWYgKCRwdWJsdHlwZT09J1MnIHx8ICRwdWJsVGVtcFR5cGUgPT0nUycpIHsgJHB1YmxUZW1wVHlwZSA9ICcnOyBpZiAoIWlzc2V0KCRvcHRNdFsnbk1pbiddKSkgJG9wdE10WyduTWluJ10gPSAwOyBpZiAoIWlzc2V0KCRvcHRNdFsnbkhycyddKSkgJG9wdE10WyduSHJzJ10gPSAwOyBpZiAoIWlzc2V0KCRvcHRNdFsnbkRheXMnXSkpICRvcHRNdFsnbkRheXMnXSA9IDA7IGlmICgkb3B0TXRbJ25IcnMnXT4wIHx8ICRvcHRNdFsnbk1pbiddPjAgfHwgJG9wdE10WyduRGF5cyddPjApIHsgJGRlbGF5ID0gJG9wdE10WyduTWluJ10qNjArJG9wdE10WyduSHJzJ10qMzYwMCskb3B0TXRbJ25EYXlzJ10qODY0MDA7IG54c19Mb2dJdCgnSScsICdEZWxheWVkJywgJGF2TnRbJ25hbWUnXS4nICgnLiRvcHRNdFsnbk5hbWUnXS4nKScsICcnLCdQb3N0IGhhcyBiZWVuIGRlbGF5ZWQnLCcgZm9yICcuJGRlbGF5LicgU2Vjb25kcyAoJy4oJG9wdE10WyduRGF5cyddPjA/JG9wdE10WyduRGF5cyddLicgRGF5cyc6JycpLiIgIi4oJG9wdE10WyduSHJzJ10+MD8kb3B0TXRbJ25IcnMnXS4nIEhvdXJzJzonJykuIiAiLigkb3B0TXRbJ25NaW4nXT4wPyRvcHRNdFsnbk1pbiddLicgTWludXRlcyc6JycpLicpJywnc25hcCcsJHVpZCApOyB9IGVsc2UgJGRlbGF5ID0gcmFuZCg1LDMwKTsgZ2xvYmFsICR3cGRiOyBpZiAoZW1wdHkoJG9wdE10Wyd0aW1lVG9SdW4nXSkpICRvcHRNdFsndGltZVRvUnVuJ10gPSB0aW1lKCk7ICR0dHJzID0gZXhwbG9kZSgnfCcsJG9wdE10Wyd0aW1lVG9SdW4nXSk7IGZvcmVhY2ggKCR0dHJzIGFzICR0dHIpIHsgaWYgKCR0dHI9PSdpJykgJHR0ciA9IHRpbWUoKTsgJHR0ciA9ICR0dHIgKyAoIGdldF9vcHRpb24oICdnbXRfb2Zmc2V0JyApICogSE9VUl9JTl9TRUNPTkRTICkrJGRlbGF5OyAkZGJJdGVtID0gYXJyYXkoJ2RhdGVjcmVhdGVkJz0+ZGF0ZV9pMThuKCdZLW0tZCBIOmk6cycpLCAndHlwZSc9PidTJywgJ3Bvc3RpZCc9PiRwb3N0SUQsICdudHR5cGUnPT4kYXZOdFsnY29kZSddLCAncmVmaWQnPT4kaWksICd0aW1ldG9ydW4nPT4gZGF0ZV9pMThuKCdZLW0tZCBIOmk6cycsICR0dHIpLCAnZXh0SW5mbyc9PnNlcmlhbGl6ZSgkb3B0TXQpLCAnZGVzY3InPT4gKCFlbXB0eSgkb3B0TXRbJ25OYW1lJ10pPycoJy4kYXZOdFsnY29kZSddLicgLSAnLiRvcHRNdFsnbk5hbWUnXS4nKSAnOicnKS4nUG9zdCBJRDooJy4kcG9zdElELicpJywgJ3VpZCc9PiR1aWQpOyAkbnhEQiA9ICR3cGRiLT5pbnNlcnQoICR3cGRiLT5wcmVmaXggLiAibnhzX3F1ZXJ5IiwgJGRiSXRlbSApOyAkbGlkID0gJHdwZGItPmluc2VydF9pZDsgbnhzX0xvZ0l0KCdCSScsICdTY2hlZHVsZWQnLCAkYXZOdFsnbmFtZSddLicgKCcuJG9wdE10WyduTmFtZSddLicpJywnJywnU2NoZWR1bGVkIGZvciAnLmRhdGVfaTE4bignWS1tLWQgSDppOnMnLCAkdHRyKS4iKSIsICcgUG9zdElEOignLiRwb3N0SUQuJyknLCdzbmFwJywkdWlkICk7IH0gfSBlbHNlIHsgJGZuYW1lID0gJ254c19kb1B1Ymxpc2hUbycuJGF2TnRbJ2NvZGUnXTsgJGZuYW1lKCRwb3N0SUQsICRvcHRNdCk7IH0gfSBlbHNlIHsgbnhzX0xvZ0l0KCdHUicsICdTa2lwcGVkJywgJGF2TnRbJ25hbWUnXS4nICgnLiRvcHRNdFsnbk5hbWUnXS4nKScsJycsICctPVtVbmNoZWNrZWQgQWNjb3VudF09LScsICdQb3N0SUQ6ICcuJHBvc3RJRC4nJywnc25hcCcsJHVpZCApOyB9IH0gfSB9IH19IGlmICghZnVuY3Rpb25fZXhpc3RzKCdueHNfdjRkb1NNQVM0Jykpe2Z1bmN0aW9uIG54c192NGRvU01BUzQoJG50LCAkaWksICRvcHRzKXsgJGhycyA9IGlzc2V0KCRvcHRzWyduSHJzJ10pPyRvcHRzWyduSHJzJ106MDsgJG1pbiA9IGlzc2V0KCRvcHRzWyduTWluJ10pPyRvcHRzWyduTWluJ106MDsgJGRheXMgPSBpc3NldCgkb3B0c1snbkRheXMnXSk/JG9wdHNbJ25EYXlzJ106MDsgJG91dFRYdCA9ICc8ZGl2IHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz5Qb3N0aW5nIERlbGF5Ojwvc3Ryb25nPiA8aT5Zb3UgY2FuIGRlbGF5IHBvc3RpbmcgdG8gdGhpcyBhY2NvdW50LiBXaWxsIHdvcmsgb25seSBpZiAiU2V0dGluZ3MgVGFiIi0+IkhvdyB0byBtYWtlIGF1dG8tcG9zdHM/IiBpcyBzZXQgdG8gIlNjaGVkdWxlIjwvaT4gPC9kaXY+IERlbGF5IGZvcjogJzsgJG91dEQgPSAnPGlucHV0ICBzdHlsZT0id2lkdGg6MzBweDsiIHZhbHVlPSInLiRkYXlzLiciIHR5cGU9InRleHQiIG5hbWU9IicuJG50LidbJy4kaWkuJ11bZGVsYXlEYXlzXSIvPiBEYXlzICZuYnNwOyZuYnNwOyZuYnNwOyc7ICRvdXRIID0gJzxzZWxlY3QgaWQ9IicuJG50LiRpaS4nZGVsYXlIcnMiIG5hbWU9IicuJG50LidbJy4kaWkuJ11bZGVsYXlIcnNdIj48b3B0aW9uIHZhbHVlPSIwIj4wPC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjEiPjE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIyIj4yPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMyI+Mzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjQiPjQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI1Ij41PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNiI+Njwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjciPjc8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iOCI+ODwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjkiPjk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxMCI+MTA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxMSI+MTE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxMiI+MTI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxMyI+MTM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxNCI+MTQ8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iMTUiPjE1PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTYiPjE2PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTciPjE3PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTgiPjE4PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTkiPjE5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMjAiPjIwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMjEiPjIxPC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjIyIj4yMjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjIzIj4yMzwvb3B0aW9uPjwvc2VsZWN0PiBIb3VycyAmbmJzcDsmbmJzcDsmbmJzcDsnOyAkb3V0TSA9ICc8c2VsZWN0IGlkPSInLiRudC4kaWkuJ2RlbGF5TWluIiBuYW1lPSInLiRudC4nWycuJGlpLiddW2RlbGF5TWluXSI+PG9wdGlvbiB2YWx1ZT0iMCI+MDwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSIxIj4xPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMiI+Mjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjMiPjM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI0Ij40PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNSI+NTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjYiPjY8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI3Ij43PC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjgiPjg8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI5Ij45PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTAiPjEwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTEiPjExPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTIiPjEyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTMiPjEzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTQiPjE0PC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjE1Ij4xNTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjE2Ij4xNjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjE3Ij4xNzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjE4Ij4xODwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjE5Ij4xOTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjIwIj4yMDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjIxIj4yMTwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSIyMiI+MjI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIyMyI+MjM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIyNCI+MjQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIyNSI+MjU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIyNiI+MjY8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIyNyI+Mjc8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIyOCI+Mjg8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iMjkiPjI5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMzAiPjMwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMzEiPjMxPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMzIiPjMyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMzMiPjMzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMzQiPjM0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMzUiPjM1PC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjM2Ij4zNjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjM3Ij4zNzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjM4Ij4zODwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjM5Ij4zOTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjQwIj40MDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjQxIj40MTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjQyIj40Mjwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSI0MyI+NDM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI0NCI+NDQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI0NSI+NDU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI0NiI+NDY8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI0NyI+NDc8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI0OCI+NDg8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI0OSI+NDk8L29wdGlvbj4KICAgICAgPG9wdGlvbiB2YWx1ZT0iNTAiPjUwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNTEiPjUxPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNTIiPjUyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNTMiPjUzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNTQiPjU0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNTUiPjU1PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNTYiPjY2PC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9IjU3Ij41Nzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjU4Ij41ODwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjU5Ij41OTwvb3B0aW9uPjwvc2VsZWN0PiBNaW51dGVzIDxici8+PGJyLz4nOyAkb3V0SCA9IHN0cl9yZXBsYWNlKCd2YWx1ZT0iJy4kaHJzLiciJywnIHNlbGVjdGVkPSJzZWxlY3RlZCIgdmFsdWU9IicuJGhycy4nIicsICRvdXRIKTsgJG91dE0gPSBzdHJfcmVwbGFjZSgndmFsdWU9IicuJG1pbi4nIicsJyBzZWxlY3RlZD0ic2VsZWN0ZWQiIHZhbHVlPSInLiRtaW4uJyInLCAkb3V0TSk7IHJldHVybiAkb3V0VFh0LiRvdXRELiRvdXRILiRvdXRNOyB9fSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnbnhzX2RvU01BUzQyJykpe2Z1bmN0aW9uIG54c19kb1NNQVM0Migkb3B0aW9ucyl7ID8+PG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgaWYgKGlzc2V0KCRvcHRpb25zWydycHN0VHlwZSddKSAmJiAkb3B0aW9uc1sncnBzdFR5cGUnXT09JzEnKSBlY2hvICdzZWxlY3RlZD0ic2VsZWN0ZWQiJyA/Pj5SYW5kb21seTwvb3B0aW9uPjw/cGhwIH19IGlmICghZnVuY3Rpb25fZXhpc3RzKCdueHNfZG9TTUFTNycpKSB7ZnVuY3Rpb24gbnhzX2RvU01BUzcoJGFyZ3MsICRmaWx0ZXIpeyBpZiggIWVtcHR5KCAkZmlsdGVyWydueHNfdGF4X25hbWVzJ10gKSAmJiAhZW1wdHkoICRmaWx0ZXJbJ254c190ZXJtX25hbWVzJ10gKSB8fCAoICFlbXB0eSggJGZpbHRlclsnbnhzX2NvdW50X3Rlcm1fY29tcGFyZXMnXSApICYmICRmaWx0ZXJbJ254c19jb3VudF90ZXJtX2NvbXBhcmVzJ10gPiAxICkgKSB7ICR0ZXJtX2NvbXBhcmVzID0gYXJyYXkoKTsgJGNvdW50X3Rlcm1fY29tcGFyZXMgPSBlbXB0eSggJGZpbHRlclsnbnhzX2NvdW50X3Rlcm1fY29tcGFyZXMnXSApID8gMSA6ICRmaWx0ZXJbJ254c19jb3VudF90ZXJtX2NvbXBhcmVzJ107ICR0ZXJtX2NvbXBhcmVzWydyZWxhdGlvbiddID0gZW1wdHkoICRmaWx0ZXJbJ254c190ZXJtX3JlbGF0aW9uJ10gKSA/ICdBTkQnIDogJGZpbHRlclsnbnhzX3Rlcm1fcmVsYXRpb24nXTsgZm9yKCAkaSA9IDE7ICRpIDw9ICRjb3VudF90ZXJtX2NvbXBhcmVzOyAkaSsrICkgeyAkcG9zdGZpeCA9ICRpID4gMSA/ICdfJy4gJGkgOiAnJzsgaWYgKGVtcHR5KCRmaWx0ZXJbIm54c190YXhfbmFtZXMkcG9zdGZpeCJdKSkgY29udGludWU7ICRuZXdfdGVybV9jb21wYXJlID0gYXJyYXkoKTsgaWYoICFlbXB0eSggJGZpbHRlclsibnhzX3RheF9uYW1lcyRwb3N0Zml4Il0gKSApIHsgJG5ld190ZXJtX2NvbXBhcmVbJ3RheG9ub215J10gPSAkZmlsdGVyWyJueHNfdGF4X25hbWVzJHBvc3RmaXgiXTsgJG5ld190ZXJtX2NvbXBhcmVbJ2ZpZWxkJ10gPSAndGVybV9pZCc7IH0gaWYoICFlbXB0eSggJGZpbHRlclsibnhzX3Rlcm1fbmFtZXMkcG9zdGZpeCJdICkgKSAkbmV3X3Rlcm1fY29tcGFyZVsndGVybXMnXSA9IGFycmF5X21hcCggJ254c19nZXRfbm9ybWFsaXplX3BhcmFtZXRlcicsICRmaWx0ZXJbIm54c190ZXJtX25hbWVzJHBvc3RmaXgiXSApOyBpZiggIWVtcHR5KCAkZmlsdGVyWyJueHNfdGVybV9vcGVyYXRvciRwb3N0Zml4Il0gKSApICRuZXdfdGVybV9jb21wYXJlWydvcGVyYXRvciddID0gJGZpbHRlclsibnhzX3Rlcm1fb3BlcmF0b3IkcG9zdGZpeCJdOyAkbmV3X3Rlcm1fY29tcGFyZVsnaW5jbHVkZV9jaGlsZHJlbiddID0gZW1wdHkoICRmaWx0ZXJbIm54c190ZXJtX2NoaWxkcmVuJHBvc3RmaXgiXSApID8gdHJ1ZSA6ICRmaWx0ZXJbIm54c190ZXJtX2NoaWxkcmVuJHBvc3RmaXgiXTsgaWYoICFlbXB0eSggJG5ld190ZXJtX2NvbXBhcmUgKSApICR0ZXJtX2NvbXBhcmVzW10gPSAkbmV3X3Rlcm1fY29tcGFyZTsgfSAkYXJnc1sndGF4X3F1ZXJ5J10gPSAkdGVybV9jb21wYXJlczsgfSBpZiggIWVtcHR5KCAkZmlsdGVyWydwb3N0X21ldGEnXVswXVsna2V5J10gKSB8fCAhZW1wdHkoICRmaWx0ZXJbJ3Bvc3RfbWV0YSddWzBdWyd2YWx1ZSddICkgfHwgKCAhZW1wdHkoICRmaWx0ZXJbJ254c19jb3VudF9tZXRhX2NvbXBhcmVzJ10gKSAmJiAkZmlsdGVyWydueHNfY291bnRfbWV0YV9jb21wYXJlcyddID4gMSApICkgeyAkbWV0YV9jb21wYXJlcyA9IGFycmF5KCk7ICRjb3VudF9jb21wYXJlcyA9IGVtcHR5KCAkZmlsdGVyWydueHNfY291bnRfbWV0YV9jb21wYXJlcyddICkgPyAxIDogJGZpbHRlclsnbnhzX2NvdW50X21ldGFfY29tcGFyZXMnXTsgJGZpbHRlclsncG9zdF9tZXRhJ11bMF1bJ3JlbGF0aW9uJ10gPSBlbXB0eSggJGZpbHRlclsncG9zdF9tZXRhJ11bMF1bJ3JlbGF0aW9uJ10gKSA/ICdBTkQnIDogJGZpbHRlclsncG9zdF9tZXRhJ11bMF1bJ3JlbGF0aW9uJ107IGZvciggJGkgPSAwOyAkaSA8ICRjb3VudF9jb21wYXJlczsgJGkrKyApIHsgJG5ld19jb21wYXJlID0gYXJyYXkoKTsgaWYoICFlbXB0eSggJGZpbHRlclsncG9zdF9tZXRhJ11bJGldWydrZXknXSApICkgJG5ld19jb21wYXJlWydrZXknXSA9ICRmaWx0ZXJbJ3Bvc3RfbWV0YSddWyRpXVsna2V5J107IGlmKCAhZW1wdHkoICRmaWx0ZXJbJ3Bvc3RfbWV0YSddWyRpXVsndmFsdWUnXSApICkgeyAkdmFsdWVzID0gJGZpbHRlclsncG9zdF9tZXRhJ11bJGldWyd2YWx1ZSddOyBpZiAoY291bnQoJHZhbHVlcyk+MSl7ICRuZXdfY29tcGFyZVsndmFsdWUnXSA9IGFycmF5KCk7IGZvcmVhY2goICR2YWx1ZXMgYXMgJHZhbHVlICkgeyAkcG9zaXRpb25fZGVsaW1pdGVyID0gbWJfc3RycnBvcyggJHZhbHVlLCAnfHwnICk7IGlmICgkcG9zaXRpb25fZGVsaW1pdGVyPjApIHsgJG1ldGFfdmFsdWUgPSBnZXRfcG9zdF9tZXRhKCBpbnR2YWwoIG1iX3N1YnN0ciggJHZhbHVlLCAkcG9zaXRpb25fZGVsaW1pdGVyICsgMiApICksIG1iX3N1YnN0ciggJHZhbHVlLCAwLCAkcG9zaXRpb25fZGVsaW1pdGVyICksIHRydWUgKTsgfSBlbHNlICRtZXRhX3ZhbHVlID0gJHZhbHVlOyAkbmV3X2NvbXBhcmVbJ3ZhbHVlJ11bXSA9IGlzX2FycmF5KCAkbWV0YV92YWx1ZSApID8gc2VyaWFsaXplKCAkbWV0YV92YWx1ZSApIDogJG1ldGFfdmFsdWU7IH0gfSBlbHNlICRuZXdfY29tcGFyZVsndmFsdWUnXSA9ICR2YWx1ZXNbMF07IH0gaWYoICFlbXB0eSggJGZpbHRlclsncG9zdF9tZXRhJ11bJGldWydvcGVyYXRvciddICkgKSB7IHN3aXRjaCggJGZpbHRlclsncG9zdF9tZXRhJ11bJGldWydvcGVyYXRvciddICkgeyBjYXNlICdndCc6ICRuZXdfY29tcGFyZVsnY29tcGFyZSddID0gJz4nOyBicmVhazsgY2FzZSAnZ3Q9JzogJG5ld19jb21wYXJlWydjb21wYXJlJ10gPSAnPj0nOyBicmVhazsgY2FzZSAnbHQnOiAkbmV3X2NvbXBhcmVbJ2NvbXBhcmUnXSA9ICc8JzsgYnJlYWs7IGNhc2UgJ2x0PSc6ICRuZXdfY29tcGFyZVsnY29tcGFyZSddID0gJzw9JzsgYnJlYWs7IGRlZmF1bHQ6ICRuZXdfY29tcGFyZVsnY29tcGFyZSddID0gJGZpbHRlclsncG9zdF9tZXRhJ11bJGldWydvcGVyYXRvciddOyB9fSBpZiggIWVtcHR5KCAkZmlsdGVyWydwb3N0X21ldGEnXVskaV1bJ3R5cGUnXSApICkgJG5ld19jb21wYXJlWyd0eXBlJ10gPSAkZmlsdGVyWydwb3N0X21ldGEnXVskaV1bJ3R5cGUnXTsgaWYoICFlbXB0eSggJG5ld19jb21wYXJlICkgKSAkbWV0YV9jb21wYXJlc1tdID0gJG5ld19jb21wYXJlOyB9IGlmICghZW1wdHkoJG1ldGFfY29tcGFyZXMpKSAkbWV0YV9jb21wYXJlc1sncmVsYXRpb24nXSA9ICRmaWx0ZXJbJ3Bvc3RfbWV0YSddWzBdWydyZWxhdGlvbiddOyAkYXJnc1snbWV0YV9xdWVyeSddID0gJG1ldGFfY29tcGFyZXM7IH0gcmV0dXJuICRhcmdzOyB9fSAgaWYgKCFjbGFzc19leGlzdHMoJ254c0FQSV9HUCcpKXsgY2xhc3MgbnhzQVBJX0dQeyB2YXIgJGNrID0gYXJyYXkoKTsgdmFyICRkZWJ1ZyA9IGZhbHNlOyB2YXIgJHByb3h5ID0gYXJyYXkoKTsgdmFyICRhdD0nJzsgdmFyICRwaWc9J3gnOyB2YXIgJHNlc3Npb249YXJyYXkoKTsgZnVuY3Rpb24gaGVhZGVycygkcmVmLCAkb3JnPScnLCAkdHlwZT0nR0VUJywgJGFqPWZhbHNlKXsgJGhkcnNBcnIgPSBhcnJheSgpOyAkaGRyc0FyclsnQ2FjaGUtQ29udHJvbCddPSdtYXgtYWdlPTAnOyAkaGRyc0FyclsnQ29ubmVjdGlvbiddPSdrZWVwLWFsaXZlJzsgJGhkcnNBcnJbJ1JlZmVyZXInXT0kcmVmOyAkaGRyc0FyclsnVXNlci1BZ2VudCddPSdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNjguMC4zNDQwLjEwNiBTYWZhcmkvNTM3LjM2JzsgaWYoJHR5cGU9PSdKU09OJykgJGhkcnNBcnJbJ0NvbnRlbnQtVHlwZSddPSdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnOyBlbHNlaWYoJHR5cGU9PSdQT1NUJykgJGhkcnNBcnJbJ0NvbnRlbnQtVHlwZSddPSdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOyBlbHNlaWYoJHR5cGU9PSdKUycpICRoZHJzQXJyWydDb250ZW50LVR5cGUnXT0nYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCc7IGVsc2VpZigkdHlwZT09J1BVVCcpICRoZHJzQXJyWydDb250ZW50LVR5cGUnXT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsgaWYoJGFqPT09dHJ1ZSkgJGhkcnNBcnJbJ1gtUmVxdWVzdGVkLVdpdGgnXT0nWE1MSHR0cFJlcXVlc3QnOyBpZiAoJG9yZyE9JycpICRoZHJzQXJyWydPcmlnaW4nXT0kb3JnOyBpZiAoJHR5cGU9PSdHRVQnKSAkaGRyc0FyclsnQWNjZXB0J109J3RleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOCc7IGVsc2UgJGhkcnNBcnJbJ0FjY2VwdCddPScqLyonOyBpZiAoZnVuY3Rpb25fZXhpc3RzKCdnemRlZmxhdGUnKSkgJGhkcnNBcnJbJ0FjY2VwdC1FbmNvZGluZyddPSdkZWZsYXRlLHNkY2gnOyAkaGRyc0FyclsnQWNjZXB0LUxhbmd1YWdlJ109J2VuLVVTLGVuO3E9MC44JzsgcmV0dXJuICRoZHJzQXJyOyB9IGZ1bmN0aW9uIHByY0dTT04oJGdzb24peyAkanNvbiA9IHN1YnN0cigkZ3NvbiwgNSk7ICRqc29ueD1qc29uX2RlY29kZSgkanNvbiwgdHJ1ZSk7IGlmICghZW1wdHkoJGpzb254KSkgcmV0dXJuICRqc29uOyAkanNvbiA9IHN0cl9yZXBsYWNlKCJcciIsJycsJGpzb24pOyAkanNvbiA9IHN0cl9yZXBsYWNlKCJcbiIsJycsJGpzb24pOyAkanNvbiA9IHN0cl9yZXBsYWNlKCcseycsJyx7IicsJGpzb24pOyAkanNvbiA9IHN0cl9yZXBsYWNlKCc6WycsJyI6WycsJGpzb24pOyAkanNvbiA9IHN0cl9yZXBsYWNlKCcseyIiJywnLHsiJywkanNvbik7ICRqc29uID0gc3RyX3JlcGxhY2UoJyIiOlsnLCciOlsnLCRqc29uKTsgJGpzb24gPSBzdHJfcmVwbGFjZSgnWywnLCdbIiIsJywkanNvbik7ICRqc29uID0gc3RyX3JlcGxhY2UoJywsJywnLCIiLCcsJGpzb24pOyAkanNvbiA9IHN0cl9yZXBsYWNlKCcsLCcsJywiIiwnLCRqc29uKTsgcmV0dXJuICRqc29uOyB9IGZ1bmN0aW9uIHNldFNlc3Npb24oKXsgaWYgKCFlbXB0eSgkdGhpcy0+c2Vzc2lvbikpIHsgaWYgKGVtcHR5KCR0aGlzLT5jaykpICR0aGlzLT5jayA9IGFycmF5KCk7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltGUF0gU2V0dGluZyBTZXNzaW9uLi4uPGJyLz5cclxuIjsgZm9yZWFjaCAoJHRoaXMtPmNrIGFzICRjaT0+JGNjKSB7IGlmICggJHRoaXMtPmNrWyRjaV0tPm5hbWU9PSdTSUQnKSB1bnNldCgkdGhpcy0+Y2tbJGNpXSk7IGlmICggJHRoaXMtPmNrWyRjaV0tPm5hbWU9PSdTU0lEJykgdW5zZXQoJHRoaXMtPmNrWyRjaV0pOyBpZiAoICR0aGlzLT5ja1skY2ldLT5uYW1lPT0nSFNJRCcpIHVuc2V0KCR0aGlzLT5ja1skY2ldKTsgfSAkYyA9IG5ldyBOWFNfSHR0cF9Db29raWUoIGFycmF5KCduYW1lJyA9PiAnU0lEJywgJ3ZhbHVlJyA9PiAkdGhpcy0+c2Vzc2lvblsnc2lkJ10gKSApOyAkdGhpcy0+Y2tbXSA9ICRjOyAkYyA9IG5ldyBOWFNfSHR0cF9Db29raWUoIGFycmF5KCduYW1lJyA9PiAnU1NJRCcsICd2YWx1ZScgPT4gJHRoaXMtPnNlc3Npb25bJ3NzaWQnXSApICk7ICR0aGlzLT5ja1tdID0gJGM7ICRjID0gbmV3IE5YU19IdHRwX0Nvb2tpZSggYXJyYXkoJ25hbWUnID0+ICdIU0lEJywgJ3ZhbHVlJyA9PiAkdGhpcy0+c2Vzc2lvblsnaHNpZCddICkgKTsgJHRoaXMtPmNrW10gPSAkYzsgfSB9IGZ1bmN0aW9uIGNoZWNrKCRzcnYsICR1KXsgJHRoaXMtPnNldFNlc3Npb24oKTsgJGNrID0gJHRoaXMtPmNrOyBpZiAoIWVtcHR5KCRjaykgJiYgaXNfYXJyYXkoJGNrKSkgeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbR10gQ2hlY2tpbmcgIi4kc3J2LiIgKFVzZXI6ICIuJHUuIik7PGJyLz5cclxuIjsgaWYgKCRzcnY9PSdHUCcpIHsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vc2V0dGluZ3MnKTsgJHVybCA9ICdodHRwczovL3BsdXMuZ29vZ2xlLmNvbS9zZXR0aW5ncyc7fSBpZiAoJHNydj09J1lUJykgeyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCdodHRwczovL3d3dy55b3V0dWJlLmNvbS8nKTsgJHVybCA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9mZWVkL3N1YnNjcmlwdGlvbnMnO30gaWYgKCRzcnY9PSdCRycpIHsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cuYmxvZ2dlci5jb20vJyk7ICR1cmwgPSAnaHR0cHM6Ly93d3cuYmxvZ2dlci5jb20vYmxvZ2dlci5nJzt9IGlmICgkc3J2PT0nR01CJykgeyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCdodHRwczovL2J1c2luZXNzLmdvb2dsZS5jb20nKTsgJHVybCA9ICdodHRwczovL2J1c2luZXNzLmdvb2dsZS5jb20vbG9jYXRpb25zJzt9ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJHVybCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHJldHVybiBmYWxzZTsgaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXT09JzMwMicgJiYgc3RyaXBvcygkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICdibG9nZ2VyLmc/YmxvZ0lEPScpIT09ZmFsc2UpIHsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCdodHRwczovL3d3dy5ibG9nZ2VyLmNvbScuJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgcmV0dXJuIGZhbHNlOyB9IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PSczMDInICYmIHN0cmlwb3MoJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddLCAnYWNjb3VudHMuZ29vZ2xlLmNvbScpIT09ZmFsc2UpIHJldHVybiBmYWxzZTsgaWYgKCFlbXB0eSgkdSkpIHsgaWYgKHN0cmlwb3MoJHJlcFsnYm9keSddLCAkdSk9PT1mYWxzZSAmJiBzdHJpcG9zKCRyZXBbJ2JvZHknXSwgJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9Mb2dvdXQnKT09PWZhbHNlKSByZXR1cm4gZmFsc2U7IHJldHVybiB0cnVlOyB9IGVsc2UgeyBpZiAoc3RyaXBvcygkcmVwWydib2R5J10sICdkb3duZ3JhZGUvJyk9PT1mYWxzZSkgcmV0dXJuIGZhbHNlOyByZXR1cm4gdHJ1ZTsgfSB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiBjb25uZWN0KCR1LCRwLCRzcnY9J0dQJyl7ICRzc2x2ZXJpZnkgPSBmYWxzZTsgaWYgKGdldF9jbGFzcygkdGhpcyk9PSdueHNBUElfR01CJykgJHNydiA9ICdHTUInOyBpZiAoISR0aGlzLT5jaGVjaygkc3J2LCAkdSkpeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbR1BdIE5PIFNhdmVkIERhdGE7IExvZ2dpbmcgaW4uLi48YnIvPlxyXG4iOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbIi4kc3J2LiJdIEwgdG86ICIuJHNydi4iPGJyLz5cclxuIjsgJGNrID0gYXJyYXkoKTsgaWYgKCRzcnYgPT0gJ1lUJykgeyAkY29udFVSTCA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9zaWduaW4/bmV4dD0lMkYmaGw9ZW4mYXBwPWRlc2t0b3AmYWN0aW9uX2hhbmRsZV9zaWduaW49dHJ1ZSc7ICRzcnZjID0gJ3lvdXR1YmUnOyB9IGlmICgkc3J2ID09ICdCRycpIHsgJGNvbnRVUkwgPSAnaHR0cHM6Ly93d3cuYmxvZ2dlci5jb20vYmxvZ2dlci5nJzsgJHNydmMgPSAnYmxvZ2dlcic7IH0gaWYgKCRzcnYgPT0gJ0dNQicpIHsgJGNvbnRVUkwgPSAnaHR0cHM6Ly9idXNpbmVzcy5nb29nbGUuY29tLz9za2lwUGFnZXNMaXN0PTEmZ21ic3JjPXVzLWVuLXotei16LWdtYi1sLXotbH5taHAtcmRzX2JvdC11JnBwc3JjPUdQREEyJnNraXBMYW5kaW5nUGFnZT10cnVlJzsgJHNydmMgPSAnbGJjJzsgfSBpZiAoJHNydiA9PSAnR1AnKSB7ICRjb250VVJMID0gJ2h0dHBzOi8vcGx1cy5nb29nbGUuY29tL2Rpc2NvdmVyJzsgJHNydmMgPSAnb3onOyB9ICR1bmxvY2tDYXB0Y2hhTXNnID0gIllvdXIgR29vZ2xlIGFjY291bnQgaXMgbG9ja2VkIGZvciB0aGUgbmV3IGFwcGxpY2F0aW9ucyB0byBjb25uZWN0LiBQbGVhc2UgZm9sbG93IHRoaXMgPGEgaHJlZj0naHR0cDovL254cy5meWkvZy11bmxvY2snIHRhcmdldD0nX2JsYW5rJz5pbnN0cnVjdGlvbnM8L2E+IHRvIHVubG9jayBpdC4gQWx0ZXJuYXRpdmVseSwgcGxlYXNlIHVzZSA8YSBocmVmPSdodHRwczovL254cy5meWkvZ3NzJyB0YXJnZXQ9J19ibGFuayc+c2Vzc2lvbjwvYT4iOyAkbHBVUkwgPSAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL1NlcnZpY2VMb2dpbj9wYXNzaXZlPXRydWUmY29udGludWU9Jy51cmxlbmNvZGUoJGNvbnRVUkwpLicmaGw9ZW4mdWlsZWw9MyZzZXJ2aWNlPScuJHNydmM7ICRyZXBMb2MgPSAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL0NoZWNrQ29va2llP2hsPWVuJmNoZWNrZWREb21haW5zPScuJHNydmMuJyZjaGVja0Nvbm5lY3Rpb249Jy4kc3J2Yy4nJTNBNDU1JTNBMSZwc3RNc2c9MSZjaHRtbD1Mb2dpbkRvbmVIdG1sJnNlcnZpY2U9Jy4kc3J2Yy4nJmNvbnRpbnVlPScudXJsZW5jb2RlKCRjb250VVJMKS4nJmdpZGw9RWdJSUFBJzsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tLycpOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCRscFVSTCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9ICJ8RVJST1IgTE9HSU4gR0wtMSAtIi5wcmludF9yKCRyZXAsIHRydWUpOyByZXR1cm4gJGJhZE91dDsgfSAkY2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJGNrLCAkcmVwWydjb29raWVzJ10pOyAkY29udGVudHMgPSAkcmVwWydib2R5J107ICRjb2RlID0gQ3V0RnJvbVRvKCRjb250ZW50cywgJyZxdW90OyxudWxsLG51bGwsbnVsbCwmcXVvdDsnLCcmcXVvdDsnKTsgJHhyZWYgPSBDdXRGcm9tVG8oJGNvbnRlbnRzLCciOiIlLkAuXCJ4c3JmXCIsbnVsbCxbXCJcIl1cbixcIicsJ1wiJyk7ICRmcmVxID0gJ1siJy4kdS4nIiwiJy4kY29kZS4nIixbXSxudWxsLCJVUyIsbnVsbCxudWxsLDIsZmFsc2UsdHJ1ZSxbbnVsbCxudWxsLFsyLDEsbnVsbCwxLCInLiRscFVSTC4nIixudWxsLFtdLDQsW10sIkdsaWZXZWJTaWduSW4iXSwxLFtudWxsLG51bGwsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxbXSxudWxsLG51bGwsbnVsbCxbXSxbXV0sbnVsbCxudWxsLG51bGwsdHJ1ZV0sIicuJHUuJyJdJzsgJGZsZHMgPSBhcnJheSgnY29udGludWUnPT4kY29udFVSTCwnc2VydmljZSc9PiRzcnZjLCdobCc9PidlbicsJ2YucmVxJz0+JGZyZXEsJ2F6dCc9PiR4cmVmLCdjb29raWVzRGlzYWJsZWQnPT4nZmFsc2UnLCAnZGV2aWNlaW5mbyc9PidbbnVsbCxudWxsLG51bGwsW10sbnVsbCwiVVMiLG51bGwsbnVsbCxbXSwiR2xpZldlYlNpZ25JbiIsbnVsbCxbbnVsbCxudWxsLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsW10sbnVsbCxudWxsLG51bGwsW10sW11dXScsJ2dtc2NvcmV2ZXJzaW9uJz0+J3VuZGVmaW5lZCcsJ2NoZWNrQ29ubmVjdGlvbic9Pid5b3V0dWJlOjQ1NToxJywnY2hlY2tlZERvbWFpbnMnPT4neW91dHViZScsJ3BzdE1zZyc9PicxJyk7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJGxwVVJMLCAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tJywgJ1BPU1QnKTsgJGhkcnNBcnJbJ0dvb2dsZS1BY2NvdW50cy1YU1JGJ109JzEnOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkZmxkcywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfcG9zdCgnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL18vc2lnbmluL3NsL2xvb2t1cD9obD1lbiZfcmVxaWQ9NTAxNTgmcnQ9aicsICRhZHZTZXQpOyAkY2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJGNrLCAkcmVwWydjb29raWVzJ10pOyAkY29udGVudHMgPSAkcmVwWydib2R5J107ICRjb2RlID0gQ3V0RnJvbVRvKCRjb250ZW50cywgJ1tbWyJnZi5hbHIiLDEsIicsJyInKTsgJGxwVVJMID0gJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9TZXJ2aWNlTG9naW4/c2VydmljZT1sYmNwYXNzaXZlPTEyMDk2MDAmY29udGludWU9aHR0cHMlM0ElMkYlMkZidXNpbmVzcy5nb29nbGUuY29tJTJGJTNGc2tpcFBhZ2VzTGlzdCUzRDElMjZnbWJzcmMlM0R1cy1lbi16LXotei1nbWItcy0xMTktdSU3RW1ocC1uc19ob21fOC11JTI2c2tpcExhbmRpbmdQYWdlJTNEdHJ1ZSUyNmhsJTNEZW4lMjZfZ2ElM0QyLjM3Njg1OTkzLjgxNjA3MzMzLjE1NjQ2ODIxNDEtMjA1MTk3NDc5OC4xNTY0NjgyMTQxJmZvbGxvd3VwPWh0dHBzJTNBJTJGJTJGYnVzaW5lc3MuZ29vZ2xlLmNvbSUyRiUzRnNraXBQYWdlc0xpc3QlM0QxJTI2Z21ic3JjJTNEdXMtZW4tei16LXotZ21iLXMtMTE5LXUlN0VtaHAtbnNfaG9tXzgtdSUyNnNraXBMYW5kaW5nUGFnZSUzRHRydWUlMjZobCUzRGVuJTI2X2dhJTNEMi4zNzY4NTk5My44MTYwNzMzMy4xNTY0NjgyMTQxLTIwNTE5NzQ3OTguMTU2NDY4MjE0MSZobD1lbic7ICRmcmVxID0gJ1siJy4kY29kZS4nIixudWxsLDEsbnVsbCxbMSxudWxsLG51bGwsbnVsbCxbIicuJHAuJyIsbnVsbCx0cnVlXV0sW251bGwsbnVsbCxbMiwxLG51bGwsMSwiJy4kbHBVUkwuJyIsbnVsbCxbXSw0LFtdLCJHbGlmV2ViU2lnbkluIl0sMSxbbnVsbCxudWxsLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsW10sbnVsbCxudWxsLG51bGwsW10sW11dLG51bGwsbnVsbCxudWxsLHRydWVdXSc7ICRmbGRzID0gYXJyYXkoJ2NvbnRpbnVlJz0+JGNvbnRVUkwsJ3NlcnZpY2UnPT4kc3J2YywnaGwnPT4nZW4nLCdmLnJlcSc9PiRmcmVxLCdhenQnPT4keHJlZiwnY29va2llc0Rpc2FibGVkJz0+J2ZhbHNlJywgJ2RldmljZWluZm8nPT4nW251bGwsbnVsbCxudWxsLFtdLG51bGwsIlVTIixudWxsLG51bGwsW10sIkdsaWZXZWJTaWduSW4iLG51bGwsW251bGwsbnVsbCxbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFtdLG51bGwsbnVsbCxudWxsLFtdLFtdXV0nLCdnbXNjb3JldmVyc2lvbic9Pid1bmRlZmluZWQnLCdjaGVja0Nvbm5lY3Rpb24nPT4neW91dHViZTo0NTU6MScsJ2NoZWNrZWREb21haW5zJz0+J3lvdXR1YmUnLCdwc3RNc2cnPT4nMScpOyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCRscFVSTCwgJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbScsICdQT1NUJyk7ICRoZHJzQXJyWydHb29nbGUtQWNjb3VudHMtWFNSRiddPScxJzsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJGZsZHMsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX3Bvc3QoJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9fL3NpZ25pbi9zbC9jaGFsbGVuZ2U/aGw9ZW4mX3JlcWlkPTUwMTU4JnJ0PWonLCAkYWR2U2V0KTsgJGNrID0gbnhzX01lcmdlQ29va2llQXJyKCRjaywgJHJlcFsnY29va2llcyddKTsgaWYgKCFlbXB0eSgkcmVwWydib2R5J10pICYmIHN0cmlwb3MoJHJlcFsnYm9keSddLCAnSU5DT1JSRUNUX0FOU1dFUl9FTlRFUkVEJykhPT1mYWxzZSkgcmV0dXJuICdFcnJvciAjR0wuMS4yIFdyb25nIFBhc3N3b3JkJzsgaWYgKCFlbXB0eSgkcmVwWydib2R5J10pICYmIHN0cmlwb3MoJHJlcFsnYm9keSddLCAnTE9HSU5fQ0hBTExFTkdFJykhPT1mYWxzZSkgcmV0dXJuICR1bmxvY2tDYXB0Y2hhTXNnOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbIi4kc3J2LiJdIFIgdG86ICIuJHJlcExvYy4iPGJyLz5cclxuIjsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygkbHBVUkwsICdodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20nKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkcmVwTG9jLCAkYWR2U2V0KTsgJGNrID0gbnhzX01lcmdlQ29va2llQXJyKCRjaywgJHJlcFsnY29va2llcyddKTsgaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXT09JzQwMCcpIHJldHVybiAnRXJyb3IgIzIxLiBCbG9ja2VkIG9yIFVucHJvY2Vzc2VkIExvZ2luICg8Yj5QbGVhc2UgdXNlIHNlc3Npb248L2I+KSc7IGlmICghaXNfbnhzX2Vycm9yKCRyZXApICYmICRzcnYgPT0gJ1lUJyAmJiAkcmVwWydyZXNwb25zZSddWydjb2RlJ109PSczMDInICYmICFlbXB0eSgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10pKSB7ICRyZXBMb2MgPSAkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ107IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIlsiLiRzcnYuIl0gUiB0bzogIi4kcmVwTG9jLiI8YnIvPlxyXG4iOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCRyZXBMb2MsICRhZHZTZXQpOyAkY2sgPSAkcmVwWydjb29raWVzJ107IH0gaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gcHJpbnRfcigkcmVwLCB0cnVlKS4iIC0gRVJST1IgND0iOyByZXR1cm4gJGJhZE91dDsgfSAkY29udGVudHMgPSAkcmVwWydib2R5J107ICRyZXBbJ2JvZHknXSA9ICcnOyBpZiAoc3RyaXBvcygkY29udGVudHMsICdJTkNPUlJFQ1RfQU5TV0VSX0VOVEVSRUQnKSE9PWZhbHNlKSByZXR1cm4gJ0Vycm9yICMzMC4gSW5jb3JyZWN0IFBhc3N3b3JkJzsgaWYgKCRzcnYgIT0gJ0dQJyAmJiBzdHJpcG9zKCRjb250ZW50cywgJ21ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCInKSE9PWZhbHNlKSB7ICRyVVJMID0gaHRtbHNwZWNpYWxjaGFyc19kZWNvZGUoQ3V0RnJvbVRvKCRjb250ZW50cywnO3VybD0nLCciJykpOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbIi4kc3J2LiJdIFIgdG86ICIuJHJVUkwuIjxici8+XHJcbiI7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJHJlcExvYyk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJHJVUkwsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSB7ICRiYWRPdXQgPSBwcmludF9yKCRyZXAsIHRydWUpLiIgLSBFUlJPUiA1PSI7IHJldHVybiAkYmFkT3V0OyB9ICRjayA9ICRyZXBbJ2Nvb2tpZXMnXTsgaWYgKCFlbXB0eSgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10pKSB7ICRyVVJMID0gJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCRyVVJMLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gcHJpbnRfcigkcmVwLCB0cnVlKS4iIC0gRVJST1IgNj0iOyByZXR1cm4gJGJhZE91dDsgfSBpZiAoIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpIHsgJHJVUkwgPSAkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ107ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJHJVUkwsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSB7ICRiYWRPdXQgPSBwcmludF9yKCRyZXAsIHRydWUpLiIgLSBFUlJPUiA3PSI7IHJldHVybiAkYmFkT3V0OyB9IH0gaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSRjayA9IG54c19NZXJnZUNvb2tpZUFycigkY2ssICRyZXBbJ2Nvb2tpZXMnXSk7IH0gaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSAkY2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJGNrLCAkcmVwWydjb29raWVzJ10pOyB9ICR0aGlzLT5jayA9ICRjazsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW0dPT0dMRV0gTG9naW4gT0s7PGJyLz5cclxuIjsgcmV0dXJuIGZhbHNlOyB9IGVsc2UgeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbR1BdIFNhdmVkIERhdGEgaXMgT0s7PGJyLz5cclxuIjsgcmV0dXJuIGZhbHNlOyB9IH0gZnVuY3Rpb24gZ2V0QXQoJHVybD0naHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vZGlzY292ZXInLCAkY2s9JycpIHsgaWYgKCFlbXB0eSgkdGhpcy0+YXQpKSByZXR1cm4gdHJ1ZTsgaWYgKGVtcHR5KCRjaykpICRjayA9ICR0aGlzLT5jazsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnJyk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHksIDApOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJHVybCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9IHByaW50X3IoJHJlcCwgdHJ1ZSkuIiAtIEVSUk9SIENTSSI7IHJldHVybiAkYmFkT3V0OyB9ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCd3aW5kb3cuSUpfdmFsdWVzID0gJykhPT1mYWxzZSkgeyAkcGlnID0gQ3V0RnJvbVRvKCRjb250ZW50cywgJ3dpbmRvdy5JSl92YWx1ZXMgPSAnLCAnLF07JykuJ10nOyAkcGlnID0gc3RyX3JlcGxhY2UoIiciLCciJywkcGlnKTsgJHBpZyA9IHN0cl9yZXBsYWNlKCdceDInLCcnLCRwaWcpOyAkcGlnID0gc3RyX3JlcGxhY2UoJ1x4MycsJycsJHBpZyk7ICRwaWcgPSBqc29uX2RlY29kZSgkcGlnLCB0cnVlKTsgZm9yICgkayA9IDMxOyAkazxjb3VudCgkcGlnKTsgJGsrKykgaWYgKCFlbXB0eSgkcGlnWyRrXSkgJiYgaXNfbnVtZXJpYygkcGlnWyRrXSkgJiYgJHBpZ1ska10+MTE3NzY4MDI4NjM2NykgeyAkdGhpcy0+cGlnID0gJHBpZ1ska107IGJyZWFrO30gfSBpZiAoc3RyaXBvcygkY29udGVudHMsJyxbImh0dHBzOi8vcGx1cy5nb29nbGUuY29tL3UvMC9iLycpIT09ZmFsc2UpICR0aGlzLT5waWcgPSBDdXRGcm9tVG8oJGNvbnRlbnRzLCAnLFsiaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vdS8wL2IvJywgJyInKTsgaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCd2YXIgQkZFX2NvbW1vbkRhdGEgPSBbIjAiLCInKSE9PWZhbHNlKSB7ICRhdCA9IEN1dEZyb21UbygkY29udGVudHMsICd2YXIgQkZFX2NvbW1vbkRhdGEgPSBbIjAiLCInLCAnIicpOyAkdGhpcy0+YXQgPSAkYXQ7ICRjayA9IG54c19NZXJnZUNvb2tpZUFycigkY2ssICRyZXBbJ2Nvb2tpZXMnXSk7ICR0aGlzLT5jayA9ICRjazsgcmV0dXJuIHRydWU7IH0gaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCciU05sTTBlIjoiJykhPT1mYWxzZSkgJGF0ID0gQ3V0RnJvbVRvKCRjb250ZW50cywgJyJTTmxNMGUiOiInLCAnIiwnKTsgZWxzZSByZXR1cm4gIkVycm9yIChOWFMpOiBMb3N0IExvZ2luIGluZm8uIFBsZWFzZSBzZWUgRkFRICMzLjQgb3IgY29udGFjdCBzdXBwb3J0IjsgJHRoaXMtPmF0ID0gJGF0OyByZXR1cm4gdHJ1ZTsgfSBmdW5jdGlvbiB1cmxJbmZvKCR1cmwpeyAkb3V0WydsaW5rJ10gPSAkdXJsOyAkdXJsID0gdXJsZW5jb2RlKCR1cmwpOyAkYXQ9J3YydTIwMzIzYjQnOyAkc3NsdmVyaWZ5ID0gZmFsc2U7ICRjayA9ICR0aGlzLT5jazsgJHJlcyA9ICR0aGlzLT5nZXRBdCgpOyBpZiAoJHJlcyE9PXRydWUpIHJldHVybiAkcmVzOyBlbHNlICRhdCA9ICR0aGlzLT5hdDsgJHNwYXI9J2YucmVxPSU1QiU1QiU1QjkyMzcxODY2JTJDJTVCJTdCJTIyOTIzNzE4NjYlMjIlM0ElNUIlMjInLiR1cmwuJyUyMiUyQyU1QiU1QjczMDQ2Nzk4JTVEJTJDJTVCJTVEJTVEJTJDMSU1RCU3RCU1RCUyQ251bGwlMkNudWxsJTJDMCU1RCU1RCU1RCZhdD0nLnVybGVuY29kZSgkYXQpLiImIjsgJGd1cmw9J2h0dHBzOi8vcGx1cy5nb29nbGUuY29tL18vUGx1c0FwcFVpL2RhdGE/ZHMuZXh0ZW5zaW9uPTkyMzcxODY2JmhsPWVuJnNvYy1hcHA9MTk5JnNvYy1wbGF0Zm9ybT0xJnNvYy1kZXZpY2U9MSZfcmVxaWQ9NzM3MjIyOSZydD1jJzsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vJywgJ2h0dHBzOi8vcGx1cy5nb29nbGUuY29tJywgJ1BPU1QnLCB0cnVlKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJHNwYXIsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX3Bvc3QoJGd1cmwsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSB7ICRiYWRPdXQgPSBwcmludF9yKCRyZXAsIHRydWUpLiIgLSBFUlJPUiI7IHJldHVybiAkYmFkT3V0OyB9ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCAnOi8vJyk9PT1mYWxzZSkgcmV0dXJuICcnOyBpZiAoc3RyaXBvcygkY29udGVudHMsJyxbWyInKSE9PWZhbHNlKSAkb3V0WydpbWcnXSA9IEN1dEZyb21UbygkY29udGVudHMsICcsW1siJywgJyIsJyk7IHJldHVybiAkb3V0OyB9IGZ1bmN0aW9uIGdldFBnc0xpc3QoJHBnSUQpeyAkcGdzID0gJyc7ICRzc2x2ZXJpZnkgPSBmYWxzZTsgJGNrID0gJHRoaXMtPmNrOyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCdodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20nLCAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tJyk7ICRnVXJsID0gJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9TZXJ2aWNlTG9naW4/c2VydmljZT1hY2NvdW50c2V0dGluZ3MmcGFzc2l2ZT0xMjA5NjAwJm9zaWQ9MSZjb250aW51ZT1odHRwczovL215YWNjb3VudC5nb29nbGUuY29tLz9hdXRodXNlciUzRDAmZm9sbG93dXA9aHR0cHM6Ly9teWFjY291bnQuZ29vZ2xlLmNvbS8/YXV0aHVzZXIlM0QwJmF1dGh1c2VyPTAnOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcEcgPSBueHNfcmVtb3RlX2dldCgkZ1VybCwgJGFkdlNldCk7IGlmICgkcmVwR1sncmVzcG9uc2UnXVsnY29kZSddPT0nMzAyJyAmJiAhZW1wdHkoJHJlcEdbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpeyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCRnVXJsKTsgJGdVcmwgPSAkcmVwR1snaGVhZGVycyddWydsb2NhdGlvbiddOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcEcgPSBueHNfcmVtb3RlX2dldCgkZ1VybCwgJGFkdlNldCk7ICRjayA9IG54c19NZXJnZUNvb2tpZUFycigkY2ssICRyZXBHWydjb29raWVzJ10pOyB9ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJ2h0dHBzOi8vcGx1cy5nb29nbGUuY29tLycpOyAkdGhpcy0+YXQ9Jyc7ICRjayA9IG54c0RlbENvb2tpZSgkY2ssJ0xTSUQnKTsgJGNrID0gbnhzRGVsQ29va2llKCRjaywnR0FQUycpOyAkY2sgPSBueHNEZWxDb29raWUoJGNrLCdBQ0NPVU5UX0NIT09TRVInKTsgJGNrID0gbnhzRGVsQ29va2llKCRjaywnQ09OU0VOVCcpOyAkdGhpcy0+Z2V0QXQoJ2h0dHBzOi8vbXlhY2NvdW50Lmdvb2dsZS5jb20vYnJhbmRhY2NvdW50cycsICRjayk7ICRhdCA9ICR0aGlzLT5hdDsgJHRoaXMtPmF0PScnOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnZi5yZXE9JTVCJTVCJTVCMTA2Mjc3OTE3JTJDJTVCJTdCJTIyMTA2Mjc3OTE3JTIyJTNBJTVCJTVCMTAwMCU1RCUyQzElMkNmYWxzZSUyQ2ZhbHNlJTVEJTdEJTVEJTJDbnVsbCUyQ251bGwlMkMwJTVEJTVEJTVEJmF0PScudXJsZW5jb2RlKCRhdCkuJyYnLCAkdGhpcy0+cHJveHksIDEpOyAkcmVwID0gbnhzX3JlbW90ZV9wb3N0KCdodHRwczovL215YWNjb3VudC5nb29nbGUuY29tL18vQWNjb3VudFNldHRpbmdzVWkvZGF0YT9kcy5leHRlbnNpb249MTA2Mjc3OTE3JywgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHJldHVybiBmYWxzZTsgaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSAkY2sgPSAkcmVwWydjb29raWVzJ107ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgJGNvZGUgPSBqc29uX2RlY29kZSgkdGhpcy0+cHJjR1NPTigkY29udGVudHMpLCB0cnVlKTsgaWYgKCFlbXB0eSgkY29kZSkgJiYgaXNfYXJyYXkoJGNvZGUpICYmICFlbXB0eSgkY29kZVswXSkgJiYgaXNfYXJyYXkoJGNvZGVbMF0pICYmICFlbXB0eSgkY29kZVswXVsyXSkgJiYgaXNfYXJyYXkoJGNvZGVbMF1bMl0pKSAkY29kZSA9ICRjb2RlWzBdWzJdOyAkayA9IGFycmF5X2tleXMoJGNvZGUpOyAkY29kZSA9ICRjb2RlWyRrWzBdXTsgaWYgKCFlbXB0eSgkY29kZSkgJiYgaXNfYXJyYXkoJGNvZGUpICYmICFlbXB0eSgkY29kZVswXSkgJiYgaXNfYXJyYXkoJGNvZGVbMF0pKSAkY29kZSA9ICRjb2RlWzBdOyBpZiAoIWVtcHR5KCRjb2RlKSkgeyAkcGdzIC49ICc8b3B0aW9uIGRpc2FibGVkPlBhZ2VzPC9vcHRpb24+JzsgZm9yZWFjaCAoJGNvZGUgYXMgJGNkKSB7ICRuYW1lID0gJGNkWzFdOyAkaWQgPSAkY2RbMF07ICRwZ3MgLj0gJzxvcHRpb24gY2xhc3M9Im54c0JsdWUiICcuKCRwZ0lEPT0kaWQ/J3NlbGVjdGVkPSJzZWxlY3RlZCInOicnKS4nIHZhbHVlPSInLiRpZC4nIj4mbmJzcDsmbmJzcDsmbmJzcDsnLiRuYW1lLicgKCcuJGlkLicpPC9vcHRpb24+JzsgfX0gcmV0dXJuICRwZ3M7IH0gZnVuY3Rpb24gZ2V0V2hlcmVUb1Bvc3RMaXN0KCRjdXJyUGcsICRjdXJyUHN0QXMpeyAkaXRlbXMgPSAnJzsgJGN1cnJQc3RBcyA9ICghZW1wdHkoJGN1cnJQc3RBcykmJiRjdXJyUHN0QXMhPSdwJyk/Jy9iLycuJGN1cnJQc3RBczonJzsgJGl0ZW1zIC49ICR0aGlzLT5fZ2V0Q29sbENtbnMoJGN1cnJQZywgJ2h0dHBzOi8vcGx1cy5nb29nbGUuY29tJy4kY3VyclBzdEFzLicvY29sbGVjdGlvbnMveW91cnMnLCAnQ29sbGVjdGlvbnMnLCdjJywwLDApOyAkaXRlbXMgLj0gJHRoaXMtPl9nZXRDb2xsQ21ucygkY3VyclBnLCAnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20nLiRjdXJyUHN0QXMuJy9jb21tdW5pdGllcy95b3VycycsICdDb21tdW5pdGllcyB5b3UgbW9kZXJhdGUnLCdtJywwLDEsdHJ1ZSwnYycpOyAkaXRlbXMgLj0gJHRoaXMtPl9nZXRDb2xsQ21ucygkY3VyclBnLCAnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20nLiRjdXJyUHN0QXMuJy9jb21tdW5pdGllcy9tZW1iZXInLCAnQ29tbXVuaXRpZXMgeW91XCd2ZSBqb2luZWQ8L29wdGlvbj4nLCAnbScsMCwxLHRydWUsJ2MnKTsgcmV0dXJuICRpdGVtczsgfSBmdW5jdGlvbiBfZ2V0Q29sbENtbnMoJHBnSUQsICR1cmwsICRsYWJlbCwgJG51bSwgJHB0aE5tMSwgJHB0aE5tMiwgJGlzWmVybz1mYWxzZSwgJGxldD0nJyl7ICRpdGVtcyA9ICcnOyAkY2sgPSAkdGhpcy0+Y2s7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJ2h0dHBzOi8vcGx1cy5nb29nbGUuY29tLycpOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCR1cmwsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSByZXR1cm4gZmFsc2U7IGlmICghZW1wdHkoJHJlcFsnY29va2llcyddKSkgJGNrID0gJHJlcFsnY29va2llcyddOyAkY29udGVudHMgPSBDdXRGcm9tVG8oJHJlcFsnYm9keSddLCAnQUZfaW5pdERhdGFDYWxsYmFjayh7JywnPC9ib2R5PicpOyBpZiAoJG51bT09J2MnKSAkY29kZSA9ICdbW1tbJy5DdXRGcm9tVG8oJGNvbnRlbnRzLCAnW1tbWycsICd9fSk7Jyk7IGVsc2VpZiAoJG51bT09J20nKSAkY29kZSA9ICdbWzAsW1tbJy5DdXRGcm9tVG8oJGNvbnRlbnRzLCAnLFtbWycsICd9fSk7Jyk7ICRjb2RlID0ganNvbl9kZWNvZGUoJGNvZGUsIHRydWUpOyBpZiAoIWVtcHR5KCRjb2RlKSAmJiBpc19hcnJheSgkY29kZSkgJiYgIWVtcHR5KCRjb2RlWyRwdGhObTFdKSAmJiBpc19hcnJheSgkY29kZVskcHRoTm0xXSkgJiYgIWVtcHR5KCRjb2RlWyRwdGhObTFdWyRwdGhObTJdKSAmJiBpc19hcnJheSgkY29kZVskcHRoTm0xXVskcHRoTm0yXSkpIHsgJGNvZGUgPSAkY29kZVskcHRoTm0xXVskcHRoTm0yXTsgJGl0ZW1zIC49ICc8b3B0aW9uIGRpc2FibGVkPicuJGxhYmVsLic8L29wdGlvbj4nOyBmb3JlYWNoICgkY29kZSBhcyAkY2QpIHsgaWYgKCRpc1plcm8pICRjZD0kY2RbMF07ICRuYW1lID0gJGNkWzFdOyAkaWQgPSAkY2RbMF07ICRpdGVtcyAuPSAnPG9wdGlvbiBjbGFzcz0ibnhzR3JlZW4iICcuKCRwZ0lEPT0oJGxldC4kaWQpPydzZWxlY3RlZD0ic2VsZWN0ZWQiJzonJykuJyB2YWx1ZT0iJy4kbGV0LiRpZC4nIj4mbmJzcDsmbmJzcDsmbmJzcDsnLiRuYW1lLic8L29wdGlvbj4nOyB9fSByZXR1cm4gJGl0ZW1zOyB9IGZ1bmN0aW9uIGdldENDYXRzR1AoJGNvbW1QYWdlSUQsICRjdXJyQ2F0PScnKXsgJGl0ZW1zID0gJyc7ICRzc2x2ZXJpZnkgPSBmYWxzZTsgJGNrID0gJHRoaXMtPmNrOyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCdodHRwczovL3BsdXMuZ29vZ2xlLmNvbS8nKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vY29tbXVuaXRpZXMvJy4kY29tbVBhZ2VJRCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHJldHVybiBmYWxzZTsgaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSAkY2sgPSAkcmVwWydjb29raWVzJ107ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgJHRtcHMgPSBDdXRGcm9tVG8oJGNvbnRlbnRzLCciJy4kY29tbVBhZ2VJRC4nIixbWyInLCd9fSk7Jyk7ICRjb21tUGFnZUlEMiA9ICdbW1siJy5zdHJpcHNsYXNoZXMoc3RyX3JlcGxhY2UoJ1xuJywgJycsICR0bXBzKSk7ICRjb21tUGFnZUlEMiA9IHN0cl9yZXBsYWNlKCdcdTAwMjYnLCcmJywkY29tbVBhZ2VJRDIpOyAkY29tbVBhZ2VJRDIgPSBqc29uX2RlY29kZSgkY29tbVBhZ2VJRDIpOyBpZiAoaXNfYXJyYXkoJGNvbW1QYWdlSUQyKSAmJiAhZW1wdHkoJGNvbW1QYWdlSUQyWzBdKSAmJiBpc19hcnJheSgkY29tbVBhZ2VJRDJbMF0pKSBmb3JlYWNoICgkY29tbVBhZ2VJRDJbMF0gYXMgJGNwaUl0ZW0pIGlmIChpc19hcnJheSgkY3BpSXRlbSkpIHsgJHZhbCA9ICRjcGlJdGVtWzBdOyAkbmFtZSA9ICRjcGlJdGVtWzFdOyAkaXRlbXMgLj0gJzxvcHRpb24gJy4oIWVtcHR5KCRjdXJyQ2F0KSYmJGN1cnJDYXQ9PSR2YWw/J3NlbGVjdGVkPSJzZWxlY3RlZCIgJzonJykuJ3ZhbHVlPSInLiR2YWwuJyI+Jy4kbmFtZS4nPC9vcHRpb24+JzsgfSByZXR1cm4gJGl0ZW1zOyB9IGZ1bmN0aW9uIHBvc3RHUCgkbXNnLCAkbG5rPScnLCAkcGFnZUlEPScnLCAkY29tbU9yQ29sSUQ9JycsICRjb21tUGFnZUNhdElEPScnKXsgJHJuZHMgPSBybmRTdHJpbmcoMTIpOyAkc3NsdmVyaWZ5ID0gZmFsc2U7ICRjayA9ICR0aGlzLT5jazsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnJyk7ICRwYWdlSUQgPSB0cmltKCRwYWdlSUQpOyAkY29tbU9yQ29sSUQgPSB0cmltKCRjb21tT3JDb2xJRCk7ICRvd25lcklEID0gJyc7ICRiaWdDb2RlID0gJyc7ICRpc1Bvc3RUb1BhZ2UgPSAkcGFnZUlEIT0nJzsgJGNvbW1DYXRJRG9yQ29sTmFtZSA9ICdteXBhZ2UnOyBpZiAoZnVuY3Rpb25fZXhpc3RzKCdueHNfZGVjb2RlRW50aXRpZXNGdWxsJykpICRtc2cgPSBueHNfZGVjb2RlRW50aXRpZXNGdWxsKCRtc2cpOyBpZiAoZnVuY3Rpb25fZXhpc3RzKCdueHNfaHRtbF90b191dGY4JykpICRtc2cgPSBueHNfaHRtbF90b191dGY4KCRtc2cpOyAkbXNnID0gc3RyX3JlcGxhY2UoJzxicj4nLCAiX05YU1paTlhTXzVDbiIsICRtc2cpOyAkbXNnID0gc3RyX3JlcGxhY2UoJzxici8+JywgIl9OWFNaWk5YU181Q24iLCAkbXNnKTsgJG1zZyA9IHN0cl9yZXBsYWNlKCc8YnIgLz4nLCAiX05YU1paTlhTXzVDbiIsICRtc2cpOyAkbXNnID0gc3RyX3JlcGxhY2UoIlxyXG4iLCAiXG4iLCAkbXNnKTsgJG1zZyA9IHN0cl9yZXBsYWNlKCJcblxyIiwgIlxuIiwgJG1zZyk7ICRtc2cgPSBzdHJfcmVwbGFjZSgiXHIiLCAiXG4iLCAkbXNnKTsgJG1zZyA9IHN0cl9yZXBsYWNlKCJcbiIsICJfTlhTWlpOWFNfNUNuIiwgJG1zZyk7ICRtc2cgPSBzdHJfcmVwbGFjZSgnIicsICdcIicsICRtc2cpOyAkbXNnID0gdXJsZW5jb2RlKHN0cmlwX3RhZ3MoJG1zZykpOyAkbXNnID0gc3RyX3JlcGxhY2UoIl9OWFNaWk5YU181Q24iLCAiJTVDbiIsICRtc2cpOyAkbXNnID0gc3RyX3JlcGxhY2UoJysnLCAnJTIwJywgJG1zZyk7ICRtc2cgPSBzdHJfcmVwbGFjZSgnJTBBJTBBJywgJyUyMCcsICRtc2cpOyAkbXNnID0gc3RyX3JlcGxhY2UoJyUwQScsICcnLCAkbXNnKTsgJG1zZyA9IHN0cl9yZXBsYWNlKCclMEQnLCAnJTVDJywgJG1zZyk7IGlmICghZW1wdHkoJGxuaykgJiYgIWlzX2FycmF5KCRsbmspKSAkbG5rID0gJHRoaXMtPnVybEluZm8oJGxuayk7IGlmICgkbG5rPT0nJykgJGxuayA9IGFycmF5KCdpbWcnPT4nJywgJ2xpbmsnPT4nJywgJ2Zhdic9PicnLCAnZG9tYWluJz0+JycsICd0aXRsZSc9PicnLCAndHh0Jz0+JycpOyBpZiAoIWlzc2V0KCRsbmtbJ2xpbmsnXSkgJiYgIWVtcHR5KCRsbmtbJ2ltZyddKSkgeyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCcnKTsgdW5zZXQoJGhkcnNBcnJbJ0Nvbm5lY3Rpb24nXSk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJGxua1snaW1nJ10sICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSAkbG5rWydpbWcnXT0nJzsgZWxzZWlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PScyMDAnICYmICFlbXB0eSgkcmVwWydoZWFkZXJzJ11bJ2NvbnRlbnQtdHlwZSddKSAmJiBzdHJpcG9zKCRyZXBbJ2hlYWRlcnMnXVsnY29udGVudC10eXBlJ10sJ3RleHQvaHRtbCcpPT09ZmFsc2UpIHsgaWYgKCFlbXB0eSgkcmVwWydoZWFkZXJzJ11bJ2NvbnRlbnQtbGVuZ3RoJ10pKSAkaW1nZFNpemUgPSAkcmVwWydoZWFkZXJzJ11bJ2NvbnRlbnQtbGVuZ3RoJ107IGlmICgoZW1wdHkoJGltZ2RTaXplKSB8fCAkaW1nZFNpemUgPT0gJy0xJykgJiYgIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnc2l6ZV9kb3dubG9hZCddKSkgJGltZ2RTaXplID0gJHJlcFsnaGVhZGVycyddWydzaXplX2Rvd25sb2FkJ107IGlmICgoZW1wdHkoJGltZ2RTaXplKSB8fCAkaW1nZFNpemUgPT0gJy0xJykpeyAkY2ggPSBjdXJsX2luaXQoJGxua1snaW1nJ10pOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIFRSVUUpOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCBUUlVFKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PQk9EWSwgVFJVRSk7ICRkYXRhID0gY3VybF9leGVjKCRjaCk7ICRpbWdkU2l6ZSA9IGN1cmxfZ2V0aW5mbygkY2gsIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FEKTsgY3VybF9jbG9zZSgkY2gpOyB9IGlmICgoZW1wdHkoJGltZ2RTaXplKSB8fCAkaW1nZFNpemUgPT0gJy0xJykpICRpbWdkU2l6ZSA9IHN0cmxlbigkcmVwWydib2R5J10pOyAkdXJsUGFyY2VkID0gcGF0aGluZm8oJGxua1snaW1nJ10pOyAkcmVtSW1nVVJMID0gJGxua1snaW1nJ107ICRyZW1JbWdVUkxGaWxlbmFtZSA9IG54c19ta0ltZ05tKG54c19jbEZOKCR1cmxQYXJjZWRbJ2Jhc2VuYW1lJ10pLCAkcmVwWydoZWFkZXJzJ11bJ2NvbnRlbnQtdHlwZSddKTsgJGltZ0RhdGEgPSAkcmVwWydib2R5J107IH0gZWxzZSAkbG5rWydpbWcnXT0nJzsgfSBpZiAoaXNzZXQoJGxua1snaW1nJ10pKSAkbG5rWydpbWcnXSA9IHVybGVuY29kZSgkbG5rWydpbWcnXSk7IGlmIChlbXB0eSgkbG5rWydpbWcnXSkpICRsbmtbJ2ltZyddID0gJyc7IGlmIChpc3NldCgkbG5rWydsaW5rJ10pKSAkbG5rWydsaW5rJ10gPSB1cmxlbmNvZGUoJGxua1snbGluayddKTsgJHJlZlBhZ2UgPSAnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vYi8nLiRwYWdlSUQuJy8nOyAkcm5kUmVxSUQgPSByYW5kKDEyMDM3MTgsIDY0NzM3OSk7ICRwZ0luZiA9ICghZW1wdHkoJHBhZ2VJRCkpPydiLycuJHBhZ2VJRC4nLyc6Jyc7ICRncHAgPSAnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vJy4kcGdJbmYuJ18vUGx1c0FwcFVpL211dGF0ZT9kcy5leHRlbnNpb249NzkyNTU3MzcmaGw9ZW4mc29jLWFwcD0xOTkmc29jLXBsYXRmb3JtPTEmc29jLWRldmljZT0xJl9yZXFpZD0nLiRybmRSZXFJRC4nJnJ0PWMnOyAkcmVzID0gJHRoaXMtPmdldEF0KCk7IGlmICgkcmVzIT09dHJ1ZSkgcmV0dXJuICRyZXM7IGVsc2UgJGF0ID0gJHRoaXMtPmF0OyAkZ051bSA9ICc5NDMxNjkxMSc7ICRjb21PclBnID0gJzElNUQlMkMlMjJQdWJsaWMlMjInOyBpZiAoIWVtcHR5KCRjb21tT3JDb2xJRCkgJiYgc3RybGVuKCRjb21tT3JDb2xJRCk+MTAgJiYgIWVtcHR5KCRjb21tUGFnZUNhdElEKSkgJGNvbU9yUGcgPSAnbnVsbCUyQyU1QiUyMicuJGNvbW1PckNvbElELiclMjIlMkNudWxsJTJDJTIyJy4kY29tbVBhZ2VDYXRJRC4nJTIyJTVEJTVEJTJDJTIyISUyMiUyQ251bGwlMkNudWxsJTJDbnVsbCUyQyUyMiElMjInOyBlbHNlaWYgKCFlbXB0eSgkY29tbU9yQ29sSUQpICYmIHN0cmxlbigkY29tbU9yQ29sSUQpPDEwKSAkY29tT3JQZyA9ICdudWxsJTJDbnVsbCUyQ251bGwlMkMlNUIlMjInLiRjb21tT3JDb2xJRC4nJTIyJTJDJTIyY29sbGV4aW9ucyUyMiU1RCU1RCUyQyUyMicuJGNvbW1DYXRJRG9yQ29sTmFtZS4nJTIyJzsgJHNwYXIgPSAiZi5yZXE9JTVCJTIyYWYubWFmJTIyJTJDJTVCJTVCJTIyYWYuYWRkJTIyJTJDNzkyNTU3MzclMkMlNUIlN0IlMjI3OTI1NTczNyUyMiUzQSU1QiU1QiU1QiU1RCUyQyU1QiU1RCUyQyU1QiU1QiU1Qm51bGwlMkNudWxsJTJDIi4kY29tT3JQZy4iJTVEJTVEJTVEJTJDJTVCJTVCJTVCMCUyQyUyMiIuJG1zZy4iJTIyJTJDbnVsbCU1RCU1RCU1RCUyQ251bGwlMkNmYWxzZSUyQ251bGwlMkMiOyBpZiAoIWVtcHR5KCRsbmtbJ2xpbmsnXSkpICRzcGFyLj0iJTVCJTdCJTIyOTQ1MTUzMjclMjIlM0ElNUIlMjIiLiRsbmtbJ2xpbmsnXS4iJTIyJTJDJTIyIi4kbG5rWydpbWcnXS4iJTIyJTVEJTdEJTVEJTJDJTVCJTVEJTJDbnVsbCUyQzE5OSUyQ2ZhbHNlJTJDZmFsc2UlMkMlMjIiLnRpbWUoKS4kcm5kcy4iJTIyJTVEJTdEJTVEJTVEJTVEJTVEJmF0PSIuJGF0LiImIjsgZWxzZWlmKCFlbXB0eSgkbG5rWydpbWcnXSkgJiYgIWVtcHR5KCRpbWdEYXRhKSkgeyAkcGFnZUlEWCA9ICFlbXB0eSgkcGFnZUlEKT8kcGFnZUlEOiR0aGlzLT5waWc7ICRpZmxkcyA9ICd7InByb3RvY29sVmVyc2lvbiI6IjAuOCIsImNyZWF0ZVNlc3Npb25SZXF1ZXN0Ijp7ImZpZWxkcyI6W3siZXh0ZXJuYWwiOnsibmFtZSI6ImZpbGUiLCJmaWxlbmFtZSI6IicuJHJlbUltZ1VSTEZpbGVuYW1lLiciLCJwdXQiOnt9LCJzaXplIjonLiRpbWdkU2l6ZS4nfX0seyJpbmxpbmVkIjp7Im5hbWUiOiJiYXRjaGlkIiwiY29udGVudCI6IicudGltZSgpLic5NyIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiJ9fSx7ImlubGluZWQiOnsibmFtZSI6ImNsaWVudCIsImNvbnRlbnQiOiJnb29nbGUtcGx1cyIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiJ9fSx7ImlubGluZWQiOnsibmFtZSI6ImRpc2FibGVfYXNiZV9ub3RpZmljYXRpb24iLCJjb250ZW50IjoidHJ1ZSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiJ9fSx7ImlubGluZWQiOnsibmFtZSI6ImVmZmVjdGl2ZV9pZCIsImNvbnRlbnQiOiInLiRwYWdlSURYLiciLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW4ifX0seyJpbmxpbmVkIjp7Im5hbWUiOiJvd25lcl9uYW1lIiwiY29udGVudCI6IicuJHBhZ2VJRFguJyIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiJ9fSx7ImlubGluZWQiOnsibmFtZSI6ImFsYnVtX21vZGUiLCJjb250ZW50IjoidGVtcG9yYXJ5IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluIn19XX19JzsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnJywgJ2h0dHBzOi8vcGx1cy5nb29nbGUuY29tJywgJ1BPU1QnLCB0cnVlKTsgJGhkcnNBcnJbJ1gtR1VwbG9hZGVyLUNsaWVudC1JbmZvJ109J21lY2hhbmlzbT1zY290dHkgeGhyIHJlc3VtYWJsZTsgY2xpZW50VmVyc2lvbj01ODUwNTIwMyc7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICRpZmxkcywgJHRoaXMtPnByb3h5KTsgJGltZ1JlcUNudCA9IG54c19yZW1vdGVfcG9zdCgnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vXy91cGxvYWQvcGhvdG9zL3Jlc3VtYWJsZT9hdXRodXNlcj0wJywgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJGltZ1JlcUNudCkpIHsgJGJhZE91dCA9IHByaW50X3IoJGltZ1JlcUNudCwgdHJ1ZSkuIiAtIEVSUk9SIElNRyI7IHJldHVybiAkYmFkT3V0OyB9ICRnVXBsVVJMID0gc3RyX3JlcGxhY2UoJ1x1MDAyNicsICcmJywgQ3V0RnJvbVRvKCRpbWdSZXFDbnRbJ2JvZHknXSwgJ3B1dEluZm8iOnsidXJsIjoiJywgJyInKSk7ICRnVXBsSUQgPSBDdXRGcm9tVG8oJGltZ1JlcUNudFsnYm9keSddLCAndXBsb2FkX2lkIjoiJywgJyInKTsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vJywgJ2h0dHBzOi8vcGx1cy5nb29nbGUuY29tJywgJ1BVVCcpOyAkaGRyc0FyclsnWC1Hb29nLVVwbG9hZC1PZmZzZXQnXT0nMCc7ICRoZHJzQXJyWydYLUdvb2ctVXBsb2FkLUNvbW1hbmQnXT0ndXBsb2FkLCBmaW5hbGl6ZSc7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICRpbWdEYXRhLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9wb3N0KCRnVXBsVVJMLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gcHJpbnRfcigkcmVwLCB0cnVlKS4iIC0gRVJST1IgSU1HIFVwbCAoVXBsIFVSTDogIi4kZ1VwbFVSTC4iLCBJTUcgVVJMOiAiLnVybGRlY29kZSgkbG5rWydpbWcnXSkuIiwgRmlsZU5hbWU6ICIuJHJlbUltZ1VSTEZpbGVuYW1lLiIsIEZJbGVzaXplOiAiLiRpbWdkU2l6ZS4iKSI7IHJldHVybiAkYmFkT3V0OyB9ICRpbWdVcGxDbnQgPSBqc29uX2RlY29kZSgkcmVwWydib2R5J10sIHRydWUpOyBpZiAoZW1wdHkoJGltZ1VwbENudCkpIHJldHVybiAiQ2FuJ3QgdXBsb2FkIGltYWdlOiAiLiRyZW1JbWdVUkwuIiAgfCAgIi5wcmludF9yKCRyZXAsIHRydWUpOyBpZiAoaXNfYXJyYXkoJGltZ1VwbENudCkgJiYgaXNzZXQoJGltZ1VwbENudFsnZXJyb3JNZXNzYWdlJ10pICYmIGlzX2FycmF5KCRpbWdVcGxDbnRbJ2Vycm9yTWVzc2FnZSddKSApIHJldHVybiAiRXJyb3IgKk5YUyBVcGxvYWQqIDogIi5wcmludF9yKCRpbWdVcGxDbnRbJ2Vycm9yTWVzc2FnZSddLCB0cnVlKTsgJGluZm9BcnJheSA9ICRpbWdVcGxDbnRbJ3Nlc3Npb25TdGF0dXMnXVsnYWRkaXRpb25hbEluZm8nXVsndXBsb2FkZXJfc2VydmljZS5Hb29nbGVSdXBpb0FkZGl0aW9uYWxJbmZvJ11bJ2NvbXBsZXRpb25JbmZvJ11bJ2N1c3RvbWVyU3BlY2lmaWNJbmZvJ107ICRhbGJ1bUlEID0gJGluZm9BcnJheVsnYWxidW1pZCddOyAkcGhvdG9pZCA9ICRpbmZvQXJyYXlbJ3Bob3RvaWQnXTsgJG1rID0gdXJsZW5jb2RlKCRpbmZvQXJyYXlbJ3Bob3RvTWVkaWFLZXknXSk7ICRpbWdVcmwgPSB1cmxlbmNvZGUoJGluZm9BcnJheVsndXJsJ10pOyAkaW1nVGl0aWUgPSAkaW5mb0FycmF5Wyd0aXRsZSddOyAkaW1nVXJsWCA9IHN0cl9pcmVwbGFjZSgnaHR0cHM6JywgJycsICRpbmZvQXJyYXlbJ3VybCddKTsgJGltZ1VybFggPSBzdHJfaXJlcGxhY2UoJy8vbGg0LicsICcvL2xoMy4nLCAkaW1nVXJsWCk7ICRpbWdVcmxYID0gdXJsZW5jb2RlKHN0cl9pcmVwbGFjZSgnaHR0cDonLCAnJywgJGltZ1VybFgpKTsgJHdpZHRoID0gJGluZm9BcnJheVsnd2lkdGgnXTsgJGhlaWdodCA9ICRpbmZvQXJyYXlbJ2hlaWdodCddOyAkdXNlcklEID0gJGluZm9BcnJheVsndXNlcm5hbWUnXTsgJGludElEID0gJGluZm9BcnJheVsnYWxidW1QYWdlVXJsJ107ICRpbnRJRCA9IHN0cl9yZXBsYWNlKCdodHRwczovL3BpY2FzYXdlYi5nb29nbGUuY29tLycsJycsICRpbnRJRCk7ICRpbnRJRCA9IHN0cl9yZXBsYWNlKCR1c2VySUQsJycsICRpbnRJRCk7ICRpbnRJRCA9IHN0cl9yZXBsYWNlKCcvJywnJywgJGludElEKTsgJHRtbSA9IHRpbWUoKTsgJHNwYXIuPSIlNUIlN0IlMjIiLiRnTnVtLiIlMjIlM0ElNUIlNUIlNUIlMjIiLiRtay4iJTIyJTJDJTIyIi4kaW1nVXJsLiIlMjIlMkMiLiR3aWR0aC4iJTJDIi4kaGVpZ2h0LiIlNUQlNUQlNUQlN0QlNUQlMkMlNUIlNUQlMkNudWxsJTJDMTk5JTJDZmFsc2UlMkNmYWxzZSUyQyUyMiIuJHRtbS4nNjY2Jy4kcm5kcy4iJTIyJTVEJTdEJTVEJTVEJTVEJTVEJmF0PSIuJGF0LiImIjsgfSBlbHNlICRzcGFyLj0ibnVsbCUyQyU1QiU1RCUyQ251bGwlMkMxOTklMkNmYWxzZSUyQ2ZhbHNlJTJDJTIyIi50aW1lKCkuJHJuZHMuIiUyMiU1RCU3RCU1RCU1RCU1RCU1RCZhdD0iLiRhdC4iJiI7ICRzcGFyID0gc3RyX2lyZXBsYWNlKCcrJywnJTIwJywkc3Bhcik7ICRzcGFyID0gc3RyX2lyZXBsYWNlKCc6JywnJTNBJywkc3Bhcik7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJHJlZlBhZ2UsICdodHRwczovL3BsdXMuZ29vZ2xlLmNvbScsICdQT1NUJyk7ICRoZHJzQXJyWydYLVNhbWUtRG9tYWluJ109JzEnOyAkaGRyc0FyclsnWC1DbGllbnQtRGF0YSddPSdDS0MxeVFFSWhiYkpBUWlsdHNrQkNQeVl5Z0U9JzsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJHNwYXIsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX3Bvc3QoJGdwcCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9IHByaW50X3IoJHJlcCwgdHJ1ZSkuIiAtIEVSUk9SIFBPU1QiOyByZXR1cm4gJGJhZE91dDsgfSAkY29udGVudHMgPSAkcmVwWydib2R5J107IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PSc0MDMnKSByZXR1cm4gIkVycm9yOiBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIHB1Ymxpc2ggdG8gdGhpcyBwYWdlLiBBcmUgeW91IHN1cmUgdGhpcyBpcyBldmVuIGEgcGFnZT8gKCIuJHBhZ2VJRC4iKSI7IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PSc0MDQnKSByZXR1cm4gIkVycm9yOiBQYWdlIHlvdSBhcmUgcG9zdGluZyBpcyBub3QgZm91bmQuPGJyLz48YnIvPiBJZiB5b3UgaGF2ZSBlbnRlcmVkIHlvdXIgcGFnZSBJRCBhcyAxMTcwMDg2MTk4Nzc2OTE0NTU1NzAvMTE3MDA4NjE5ODc3NjkxNDU1NTcwLCBwbGVhc2UgcmVtb3ZlIHRoZSBzZWNvbmQgY29weS4gSXQgc2hvdWxkIGJlIG9uZSBudW1iZXIgb25seSAtIDExNzAwODYxOTg3NzY5MTQ1NTU3MCI7IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PSc0MDAnKSByZXR1cm4gIkVycm9yICg0MDApOiBTb21ldGhpbmcgaXMgd3JvbmcsIHBsZWFzZSBjb250YWN0IHN1cHBvcnQiOyBpZiAoJHJlcFsncmVzcG9uc2UnXVsnY29kZSddPT0nNTAwJyAmJiBzdHJpcG9zKCRyZXBbJ2JvZHknXSwgJ1JwY0NsaWVudEV4Y2VwdGlvbicpIT09ZmFsc2UpIHJldHVybiAiRXJyb3IgKDUwMCk6IEdvb2dsZSBTZXJ2ZXIgaXMgb3ZlcmxvYWRlZCBvciB0ZW1wb3Jhcnkgb3V0IG9mIHNlcnZpY2UuIE1lc3NhZ2U6ICIuQ3V0RnJvbVRvKCRyZXBbJ2JvZHknXSwnUnBjQ2xpZW50RXhjZXB0aW9uJywnXScpOyBpZiAoJHJlcFsncmVzcG9uc2UnXVsnY29kZSddPT0nNTAwJykgcmV0dXJuICJFcnJvciAoNTAwKTogU29tZXRoaW5nIGlzIHdyb25nLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0IjsgaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXT09JzIwMCcpIHsgJHJldCA9ICRyZXBbJ2JvZHknXTsgaWYgKHN0cmlwb3MoJHJldCwnImh0dHBzOi8vcGx1cy5nb29nbGUuY29tLycpIT09ZmFsc2UpICRyZXQgPSBDdXRGcm9tVG8oJGNvbnRlbnRzLCAnImh0dHBzOi8vcGx1cy5nb29nbGUuY29tLycsICciLCcpOyAkdGhpcy0+Y2sgPSAkY2s7IHJldHVybiBhcnJheSgnaXNQb3N0ZWQnPT4nMScsICdwb3N0SUQnPT4kcmV0LCAncG9zdFVSTCc9PidodHRwczovL3BsdXMuZ29vZ2xlLmNvbS8nLiRyZXQsICdwRGF0ZSc9PmRhdGUoJ1ktbS1kIEg6aTpzJykpOyB9IHJldHVybiBwcmludF9yKCRjb250ZW50cywgdHJ1ZSk7IH0gZnVuY3Rpb24gcG9zdEJHKCRibG9nSUQsICR0aXRsZSwgJG1zZywgJHRhZ3M9JycpeyAkc3NsdmVyaWZ5ID0gZmFsc2U7ICRybmRzID0gcm5kU3RyaW5nKDM1KTsgJGJsb2dJRCA9IHRyaW0oJGJsb2dJRCk7ICRjayA9ICR0aGlzLT5jazsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW0JHXSBQb3N0aW5nLi4uPGJyLz5cclxuIjsgJGdwcCA9ICJodHRwczovL3d3dy5ibG9nZ2VyLmNvbS9ibG9nZ2VyLmc/YmxvZ0lEPSIuJGJsb2dJRDsgJHJlZlBhZ2UgPSAiaHR0cHM6Ly93d3cuYmxvZ2dlci5jb20vaG9tZSI7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJHJlZlBhZ2UpOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCRncHAsICRhZHZTZXQpOyBpZiAoIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpIHsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICRhZHZTZXQpOyBpZiAoIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpIHsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICRhZHZTZXQpOyAkY2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJGNrLCAkcmVwWydjb29raWVzJ10pOyBpZiAoIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpIHsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICRhZHZTZXQpOyAkY2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJGNrLCAkcmVwWydjb29raWVzJ10pOyBpZiAoIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpIHsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICRhZHZTZXQpOyAkY2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJGNrLCAkcmVwWydjb29raWVzJ10pOyB9fX19IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHJldHVybiBmYWxzZTsgJGNvbnRlbnRzID0gJHJlcFsnYm9keSddOyBpZiAoIHN0cmlwb3MoJGNvbnRlbnRzLCAnRXJyb3IgNDA0JykhPT1mYWxzZSkgcmV0dXJuICJFcnJvcjogSW52YWxpZCBCbG9nIElEIC0gQmxvZyB3aXRoIElEICIuJGJsb2dJRC4iIE5vdCBGb3VuZCI7ICRqanMgPSBDdXRGcm9tVG8oJGNvbnRlbnRzLCAnQmxvZ2dlckNsaWVudEZsYWdzPScsJ19sYXlvdXRPbkxvYWRIYW5kbGVyJyk7ICRqNjkgPSAnJzsgJGl4ID0gMDsgZm9yICgkaSA9IDM0OyAkaSA8PSAxOTk7ICRpKyspIHsgaWYgKCRqNjk9PScnICYmIHN0cnBvcygkampzLCAkaS4nOiInKSE9PWZhbHNlKXsgJGo2OSA9IEN1dEZyb21UbygkampzLCAkaS4nOiInLCciJyk7IGlmIChzdHJwb3MoJGo2OSwgJzonKT09PWZhbHNlIHx8IChzdHJwb3MoJGo2OSwgJy8nKSE9PWZhbHNlKSB8fCAoc3RycG9zKCRqNjksICcgJykhPT1mYWxzZSkgfHwgKHN0cnBvcygkajY5LCAnOjonKSE9PWZhbHNlKSB8fCAoc3RycG9zKCRqNjksICdcXCcpIT09ZmFsc2UpKSAkajY5ID0gJyc7IGVsc2UgJGl4PSRpO30gfSBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICdbQkddIEdvdCBKNjkuLiMnLiRpeC4nICgnLiRqNjkuJykuPGJyLz5cclxuJzsgJGdwcCA9ICJodHRwczovL3d3dy5ibG9nZ2VyLmNvbS9ibG9nZ2VyX3JwYz9ibG9nSUQ9Ii4kYmxvZ0lEOyAkcmVmUGFnZSA9ICJodHRwczovL3d3dy5ibG9nZ2VyLmNvbS9ibG9nZ2VyLmc/YmxvZ0lEPSIuJGJsb2dJRDsgaWYgKGVtcHR5KCRqNjkpKSByZXR1cm4gIkVycm9yOiBDb2RlIEo2OS4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCI7ICRzcGFyID0gJ3sibWV0aG9kIjoiZWRpdFBvc3QiLCJwYXJhbXMiOnsiMSI6MSwiMiI6IiIsIjMiOiIiLCI1IjowLCI2IjowLCI3IjoxLCI4IjozLCI5IjowLCIxMCI6MiwiMTEiOjEsIjEzIjowLCIxNCI6eyI2IjoiIn0sIjE1IjoiZW4iLCIxNiI6MCwiMTciOnsiMSI6Jy5kYXRlKCJZIikuJywiMiI6Jy5kYXRlKCJuIikuJywiMyI6Jy5kYXRlKCJqIikuJywiNCI6Jy5kYXRlKCJHIikuJywiNSI6Jy5kYXRlKCJpIikuJ30sIjIwIjowLCIyMSI6IiIsIjIyIjp7IjEiOjEsIjIiOnsiMSI6MCwiMiI6MCwiMyI6MCwiNCI6MCwiNSI6MCwiNiI6MCwiNyI6MCwiOCI6MCwiOSI6MCwiMTAiOiIwIn19LCIyMyI6MX0sInhzcmYiOiInLiRqNjkuJyJ9JzsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygkcmVmUGFnZSwgJ2h0dHBzOi8vd3d3LmJsb2dnZXIuY29tJywgJ0pTJywgZmFsc2UpOyAkaGRyc0FyclsnWC1HV1QtTW9kdWxlLUJhc2UnXT0naHR0cHM6Ly93d3cuYmxvZ2dlci5jb20vc3RhdGljL3YxL2d3dC8nOyAkaGRyc0FyclsnWC1HV1QtUGVybXV0YXRpb24nXT0nOTA2Qjc5NkJBQ0QzMUI2NEJBNDk3QkVFMzgyNEIzNDQnOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkc3BhciwgJHRoaXMtPnByb3h5KTskcmVwID0gbnhzX3JlbW90ZV9wb3N0KCRncHAsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSB7ICRiYWRPdXQgPSBwcmludF9yKCRyZXAsIHRydWUpLiIgLSBFUlJPUiBCRyI7IHJldHVybiAkYmFkT3V0OyB9ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgJG5ld3Bvc3RJRCA9IEN1dEZyb21UbygkY29udGVudHMsICcicmVzdWx0IjpbbnVsbCwiJywgJyInKTsgaWYgKCR0YWdzIT0nJykgJHBUYWdzID0gJ1siJy4kdGFncy4nIl0nOyBlbHNlICRwVGFncyA9ICcnOyAkcFRhZ3MgPSBzdHJfcmVwbGFjZSgnIScsJycsJHBUYWdzKTsgJHBUYWdzID0gc3RyX3JlcGxhY2UoJy4nLCcnLCRwVGFncyk7IGlmIChjbGFzc19leGlzdHMoJ0RPTURvY3VtZW50JykpIHsgJGRvYyA9IG5ldyBET01Eb2N1bWVudCgpOyBAJGRvYy0+bG9hZFhNTCgiPFFBWlg+Ii4kbXNnLiI8L1FBWlg+Iik7ICRzdHlsZXMgPSAkZG9jLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3R5bGUnKTsgaWYgKCRzdHlsZXMtPmxlbmd0aD4wKSB7IGZvcmVhY2ggKCRzdHlsZXMgYXMgJHN0eWxlKSAkc3R5bGUtPm5vZGVWYWx1ZSA9IHN0cl9pcmVwbGFjZSgiPGJyLz4iLCAiIiwgJHN0eWxlLT5ub2RlVmFsdWUpOyAkbXNnID0gJGRvYy0+c2F2ZVhNTCgkZG9jLT5kb2N1bWVudEVsZW1lbnQsIExJQlhNTF9OT0VNUFRZVEFHKTsgJG1zZyA9IHN0cl9pcmVwbGFjZSgiPFFBWlg+IiwgIiIsIHN0cl9pcmVwbGFjZSgiPC9RQVpYPiIsICIiLCAkbXNnKSk7IH0gfSAkbXNnID0gc3RyX3JlcGxhY2UoIiciLCciJywkbXNnKTsgJG1zZyA9IGFkZHNsYXNoZXMoJG1zZyk7ICRtc2cgPSBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkbXNnKTsgJG1zZyA9IHN0cl9yZXBsYWNlKCJcblxyIiwiXG4iLCRtc2cpOyAkbXNnID0gc3RyX3JlcGxhY2UoIlxyIiwiXG4iLCRtc2cpOyAkbXNnID0gc3RyX3JlcGxhY2UoIlxuIiwnXG4nLCRtc2cpOyAkdGl0bGUgPSBzdHJpcF90YWdzKCR0aXRsZSk7ICR0aXRsZSA9IHN0cl9yZXBsYWNlKCInIiwnIicsJHRpdGxlKTsgJHRpdGxlID0gYWRkc2xhc2hlcygkdGl0bGUpOyAkdGl0bGUgPSBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkdGl0bGUpOyAkdGl0bGUgPSBzdHJfcmVwbGFjZSgiXG5cciIsIlxuIiwkdGl0bGUpOyAkdGl0bGUgPSBzdHJfcmVwbGFjZSgiXHIiLCJcbiIsJHRpdGxlKTsgJHRpdGxlID0gc3RyX3JlcGxhY2UoIlxuIiwnXG4nLCR0aXRsZSk7ICRzcGFyID0gJ3sibWV0aG9kIjoiZWRpdFBvc3QiLCJwYXJhbXMiOnsiMSI6MSwiMiI6IicuJHRpdGxlLiciLCIzIjoiJy4kbXNnLiciLCI0IjoiJy4kbmV3cG9zdElELiciLCI1IjowLCI2IjowLCI3IjoxLCI4IjozLCI5IjowLCIxMCI6MiwiMTEiOjIsJy4oJHBUYWdzIT0nJz8nIjEyIjonLiRwVGFncy4nLCc6JycpLiciMTMiOjAsIjE0Ijp7fSwiMTUiOiJlbiIsIjE2IjoxLCIxNyI6eyIxIjonLmRhdGUoIlkiKS4nLCIyIjonLmRhdGUoIm4iKS4nLCIzIjonLmRhdGUoImoiKS4nLCI0IjonLmRhdGUoIkciKS4nLCI1IjonLmRhdGUoImkiKS4nfSwiMjAiOjAsIjIxIjoiIiwiMjIiOnsiMSI6MSwiMiI6eyIxIjowLCIyIjowLCIzIjowLCI0IjowLCI1IjowLCI2IjowLCI3IjowLCI4IjowLCI5IjowLCIxMCI6IjAifX0sIjIzIjozLCIyNiI6IiIsIjI3IjoxLCIyOCI6MH0sInhzcmYiOiInLiRqNjkuJyJ9JzsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJHNwYXIsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX3Bvc3QoJGdwcCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9IHByaW50X3IoJHJlcCwgdHJ1ZSkuIiAtIEVSUk9SIEJHMiI7IHJldHVybiAkYmFkT3V0OyB9ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgJHJldEogPSBqc29uX2RlY29kZSgkY29udGVudHMsIHRydWUpOyBpZiAoaXNfYXJyYXkoJHJldEopICYmICFlbXB0eSgkcmV0SlsncmVzdWx0J10pICYmIGlzX2FycmF5KCRyZXRKWydyZXN1bHQnXSkgKSAkcG9zdElEID0gJHJldEpbJ3Jlc3VsdCddWzZdOyBlbHNlICRwb3N0SUQgPSAnJzsgaWYgKCBzdHJpcG9zKCRjb250ZW50cywgJyJlcnJvciI6JykhPT1mYWxzZSkgeyByZXR1cm4gIkVycm9yOiAiLnByaW50X3IoJGNvbnRlbnRzLCB0cnVlKTsgfSBpZiAoJHJlcFsncmVzcG9uc2UnXVsnY29kZSddPT0nMjAwJykgcmV0dXJuIGFycmF5KCdpc1Bvc3RlZCc9PicxJywgJ3Bvc3RJRCc9PiRwb3N0SUQsICdwb3N0VVJMJz0+JHBvc3RJRCwgJ3BEYXRlJz0+ZGF0ZSgnWS1tLWQgSDppOnMnKSwgJ2NrJz0+JGNrKTsgZWxzZSByZXR1cm4gcHJpbnRfcigkY29udGVudHMsIHRydWUpOyB9IGZ1bmN0aW9uIHBvc3RZVCgkbXNnLCAkeXRVcmwsICR2VVJMID0gJycsICR5dEdQUGFnZUlEPScnKSB7ICRjayA9ICR0aGlzLT5jazsgJHNzbHZlcmlmeSA9IGZhbHNlOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbWVRdIFBvc3RpbmcgdG8gIi4keXRVcmwuIjxici8+XHJcbiI7ICR5dFVybCA9IHN0cl9pcmVwbGFjZSgnL2ZlZWQnLCcnLCR5dFVybCk7IGlmIChzdWJzdHIoJHl0VXJsLCAtMSk9PScvJykgJHl0VXJsID0gc3Vic3RyKCR5dFVybCwgMCwgLTEpOyAkeXRVcmwgLj0gJy9mZWVkP2Rpc2FibGVfcG9seW1lcj10cnVlJzsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cDovL3d3dy55b3V0dWJlLmNvbS8nKTsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1lUXSBQb3N0aW5nIHRvICIuJHl0VXJsLiI8YnIvPlxyXG4iOyBpZiAoJHl0R1BQYWdlSUQhPScnKXsgJHBnVVJMID0gJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3NpZ25pbj9hdXRodXNlcj0wJmFjdGlvbl9oYW5kbGVfc2lnbmluPXRydWUmcGFnZWlkPScuJHl0R1BQYWdlSUQ7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltZVF0gRyBTVyB0byBwYWdlOiAiLiR5dEdQUGFnZUlELiI8YnIvPlxyXG4iOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTskcmVwID0gbnhzX3JlbW90ZV9nZXQoJHBnVVJMLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgcmV0dXJuICJFUlJPUjogIi5wcmludF9yKCRyZXAsIHRydWUpOyBpZiAoIWVtcHR5KCRyZXBbJ2Nvb2tpZXMnXSkpIGZvcmVhY2ggKCRyZXBbJ2Nvb2tpZXMnXSBhcyAkY2NOKSB7ICRmZG4gPSBmYWxzZTsgZm9yZWFjaCAoJGNrIGFzICRjaT0+JGNjKSBpZiAoJGNjTi0+bmFtZSA9PSAkY2MtPm5hbWUpIHsgJGZkbiA9IHRydWU7ICRja1skY2ldID0gJGNjTjsgfSBpZiAoISRmZG4pICRja1tdID0gJGNjTjsgfSB9ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJHl0VXJsLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgcmV0dXJuICJFUlJPUjogIi5wcmludF9yKCRyZXAsIHRydWUpOyBpZiAoIWVtcHR5KCRyZXBbJ2Nvb2tpZXMnXSkpIGZvcmVhY2ggKCRyZXBbJ2Nvb2tpZXMnXSBhcyAkY2NOKSB7ICRmZG4gPSBmYWxzZTsgZm9yZWFjaCAoJGNrIGFzICRjaT0+JGNjKSBpZiAoJGNjTi0+bmFtZSA9PSAkY2MtPm5hbWUpIHsgJGZkbiA9IHRydWU7ICRja1skY2ldID0gJGNjTjsgfSBpZiAoISRmZG4pICRja1tdID0gJGNjTjsgfSAkY29udGVudHMgPSAkcmVwWydib2R5J107ICRncFBhZ2VNc2cgPSAiRWl0aGVyIEJBRCBZb3VUdWJlIFVTRVIvUEFTUyBvciB5b3UgYXJlIHRyeWluZyB0byBwb3N0IGZyb20gdGhlIHdyb25nIGFjY291bnQvcGFnZS4gTWFrZSBzdXJlIHlvdSBoYXZlIEdvb2dsZSsgcGFnZSBJRCBpZiB5b3VyIFlvdVR1YmUgYWNjb3VudCBiZWxvbmdzIHRvIHRoZSBwYWdlLiI7IGlmIChzdHJpcG9zKCRjb250ZW50cywnc2lnbmluLWNvbnRhaW5lcicpIT09ZmFsc2UpIHJldHVybiAiTE9TVCBMT0dJTiI7ICRhY3RGb3JtQ29kZT0nY2hhbm5lbF9hamF4JzsgaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCdhY3Rpb249Ii9jaGFubmVsc19mZWVkX2FqYXg/JykhPT1mYWxzZSkgJGFjdEZvcm1Db2RlPSdjaGFubmVsc19mZWVkX2FqYXgnOyBlbHNlaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCdhY3Rpb249Ii9jNF9mZWVkX2FqYXg/JykhPT1mYWxzZSkkYWN0Rm9ybUNvZGUgPSAnYzRfZmVlZF9hamF4JzsgaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCAnYWN0aW9uPSIvJy4kYWN0Rm9ybUNvZGUuJz8nKSkgJGZybURhdGEgPSBDdXRGcm9tVG8oJGNvbnRlbnRzLCAnYWN0aW9uPSIvJy4kYWN0Rm9ybUNvZGUuJz8nLCAnPC9mb3JtPicpOyBlbHNlIHsgaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCAncHJvcGVydHk9Im9nOnVybCInKSkgeyAkeXRVcmwgPSBDdXRGcm9tVG8oJGNvbnRlbnRzLCAncHJvcGVydHk9Im9nOnVybCIgY29udGVudD0iJywgJyInKS4nL2ZlZWQ/ZGlzYWJsZV9wb2x5bWVyPXRydWUnOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbWVRdIFBPU1QgVVJMIHRvICIuJHl0VXJsLiI8YnIvPlxyXG4iOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCR5dFVybCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHJldHVybiAiRVJST1I6ICIucHJpbnRfcigkcmVwLCB0cnVlKTsgaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSAkY2sgPSAkcmVwWydjb29raWVzJ107ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1lUXSBQT1NUIENPREUgdG8gIi4kYWN0Rm9ybUNvZGUuIjxici8+XHJcbiI7IGlmIChzdHJpcG9zKCRjb250ZW50cywgJ2FjdGlvbj0iLycuJGFjdEZvcm1Db2RlLic/JykpICRmcm1EYXRhID0gQ3V0RnJvbVRvKCRjb250ZW50cywgJ2FjdGlvbj0iLycuJGFjdEZvcm1Db2RlLic/JywgJzwvZm9ybT4nKTsgZWxzZSByZXR1cm4gJ09HIC0gRm9ybSBub3QgZm91bmQuIC0gJy4gJGdwUGFnZU1zZzsgfSBlbHNlIHsgJGVNc2cgPSAiTm8gRm9ybS9ObyBPRyAtICIuICRncFBhZ2VNc2c7IHJldHVybiAkZU1zZzsgfSB9ICRtZCA9IGFycmF5KCk7ICRmbGRzID0gYXJyYXkoKTsgaWYgKCFlbXB0eSgkdlVSTCkgJiYgc3RyaXBvcygkdlVSTCwgJ2h0dHAnKT09PWZhbHNlICYmIHN0cmxlbigkdlVSTCkhPTExKSAkdlVSTCA9ICcnOyBpZiAoJHZVUkwhPScnICYmIHN0cmlwb3MoJHZVUkwsICdodHRwJyk9PT1mYWxzZSkgJHZVUkwgPSAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nLiR2VVJMOyAkbXNnID0gc3RyaXBfdGFncygkbXNnKTsgJG1zZyA9IG5zVHJuYygkbXNnLCA1MDApOyB3aGlsZSAoc3RyaXBvcygkZnJtRGF0YSwgJyJoaWRkZW4iJykhPT1mYWxzZSl7JGZybURhdGEgPSBzdWJzdHIoJGZybURhdGEsIHN0cmlwb3MoJGZybURhdGEsICciaGlkZGVuIicpKzgpOyAkbmFtZSA9IHRyaW0oQ3V0RnJvbVRvKCRmcm1EYXRhLCduYW1lPSInLCAnIicpKTsgaWYgKCFpbl9hcnJheSgkbmFtZSwgJG1kKSkgeyRtZFtdID0gJG5hbWU7ICR2YWwgPSB0cmltKEN1dEZyb21UbygkZnJtRGF0YSwndmFsdWU9IicsICciJykpOyAkZmxkc1skbmFtZV09ICR2YWw7fSB9ICRmbGRzWydtZXNzYWdlJ10gPSAkbXNnOyAkZmxkc1sndmlkZW9fdXJsJ10gPSAkdlVSTDsgJGZsZHNbJ3Nlc3Npb25fdG9rZW4nXSA9IHRyaW0oQ3V0RnJvbVRvKCRjb250ZW50cywnWFNSRl9UT0tFTlwnOiAiJywgJyInKSk7ICRmbGRzWydwYXJhbXMnXSA9ICdDQUUlM0QnOyAkZmxkc1sndmlkZW9faWQnXSA9ICcnOyAkZmxkc1sncGxheWxpc3RfaWQnXSA9ICcnOyAkeXRHUFBhZ2VJRCA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9jaGFubmVsLycuJHl0R1BQYWdlSUQ7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJHl0R1BQYWdlSUQsICdodHRwczovL3d3dy55b3V0dWJlLmNvbS8nLCAnUE9TVCcsIGZhbHNlKTsgJGhkcnNBcnJbJ1gtWW91VHViZS1QYWdlLUNMJ10gPSAnNjc3NDEyODknOyAkaGRyc0FyclsnWC1Zb3VUdWJlLVBhZ2UtVGltZXN0YW1wJ10gPSBkYXRlKCJEIE0gaiBIOmk6cyBZIiwgdGltZSgpLTU0MDAwKS4iICgiLnRpbWUoKS4iKSI7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICRmbGRzLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9wb3N0KCdodHRwczovL3d3dy55b3V0dWJlLmNvbS8nLiRhY3RGb3JtQ29kZS4nP2FjdGlvbl9jcmVhdGVfY2hhbm5lbF9wb3N0PTEnLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gcHJpbnRfcigkcmVwLCB0cnVlKS4iIC0gRVJST1IgWVQiOyByZXR1cm4gJGJhZE91dDsgfSAkY29udGVudHMgPSAkcmVwWydib2R5J107IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PScyMDAnICYmICggJGNvbnRlbnRzID09ICd7ImNvZGUiOiAiU1VDQ0VTUyJ9JyB8fCBzdHJpcG9zKCRjb250ZW50cywnImZlZWRfZW50cnlfaHRtbCI6JykhPT1mYWxzZSApKSByZXR1cm4gYXJyYXkoImlzUG9zdGVkIj0+IjEiLCAicG9zdElEIj0+JycsICdwb3N0VVJMJz0+JHl0VXJsLCAncERhdGUnPT5kYXRlKCdZLW0tZCBIOmk6cycpLCAnY2snPT4kY2spOyBlbHNlIHJldHVybiAkcmVwWydyZXNwb25zZSddWydjb2RlJ10uInwiLiRjb250ZW50czsgfSBmdW5jdGlvbiBnZXRJbWdJbmZvKCRpbWdVUkwpeyAkY2sgPSAkdGhpcy0+Y2s7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJycpOyB1bnNldCgkaGRyc0FyclsnQ29ubmVjdGlvbiddKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkaW1nVVJMLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgJGltZ1VSTD0nJzsgZWxzZWlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PScyMDAnICYmICFlbXB0eSgkcmVwWydoZWFkZXJzJ11bJ2NvbnRlbnQtdHlwZSddKSAmJiBzdHJpcG9zKCRyZXBbJ2hlYWRlcnMnXVsnY29udGVudC10eXBlJ10sJ3RleHQvaHRtbCcpPT09ZmFsc2UpIHsgaWYgKCFlbXB0eSgkcmVwWydoZWFkZXJzJ11bJ2NvbnRlbnQtbGVuZ3RoJ10pKSAkaW1nZFNpemUgPSAkcmVwWydoZWFkZXJzJ11bJ2NvbnRlbnQtbGVuZ3RoJ107IGlmICgoZW1wdHkoJGltZ2RTaXplKSB8fCAkaW1nZFNpemUgPT0gJy0xJykgJiYgIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnc2l6ZV9kb3dubG9hZCddKSkgJGltZ2RTaXplID0gJHJlcFsnaGVhZGVycyddWydzaXplX2Rvd25sb2FkJ107IGlmICgoZW1wdHkoJGltZ2RTaXplKSB8fCAkaW1nZFNpemUgPT0gJy0xJykpeyAkY2ggPSBjdXJsX2luaXQoJGltZ1VSTCk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgVFJVRSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIFRSVUUpOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfTk9CT0RZLCBUUlVFKTsgJGRhdGEgPSBjdXJsX2V4ZWMoJGNoKTsgJGltZ2RTaXplID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQpOyBjdXJsX2Nsb3NlKCRjaCk7IH0gaWYgKChlbXB0eSgkaW1nZFNpemUpIHx8ICRpbWdkU2l6ZSA9PSAnLTEnKSkgJGltZ2RTaXplID0gc3RybGVuKCRyZXBbJ2JvZHknXSk7ICR1cmxQYXJjZWQgPSBwYXRoaW5mbygkaW1nVVJMKTsgJHJlbUltZ1VSTCA9ICRpbWdVUkw7ICRyZW1JbWdVUkxGaWxlbmFtZSA9IG54c19ta0ltZ05tKG54c19jbEZOKCR1cmxQYXJjZWRbJ2Jhc2VuYW1lJ10pLCAkcmVwWydoZWFkZXJzJ11bJ2NvbnRlbnQtdHlwZSddKTsgJGltZ0RhdGEgPSAkcmVwWydib2R5J107IH0gZWxzZSAkaW1nVVJMPScnOyBpZiAoIWVtcHR5KCRpbWdVUkwpKSByZXR1cm4gYXJyYXkoJ3VybCc9PiRpbWdVUkwsICdzaXplJz0+JGltZ2RTaXplLCAncmVtRmlsZU5hbWUnPT4kcmVtSW1nVVJMRmlsZW5hbWUsICdpbWdEYXRhJz0+JGltZ0RhdGEpOyBlbHNlIHJldHVybiBmYWxzZTsgfSB9fSBpZiAoIWNsYXNzX2V4aXN0cygnbnhzQVBJX1BOJykpe2NsYXNzIG54c0FQSV9QTnsgdmFyICRjayA9IGFycmF5KCk7IHZhciAkdGs9Jyc7IHZhciAkYm9hcmRzID0gJyc7IHZhciAkYXBWZXI9Jyc7IHZhciAkdT0nJzsgdmFyICRkZWJ1ZyA9IGZhbHNlOyB2YXIgJGxvYyA9ICcnOyB2YXIgJHByb3h5ID0gYXJyYXkoKTsgZnVuY3Rpb24gaGVhZGVycygkcmVmLCAkb3JnPScnLCAkdHlwZT0nR0VUJywgJGFqPWZhbHNlKXsgJGhkcnNBcnIgPSBhcnJheSgpOyAkaGRyc0FyclsnQ2FjaGUtQ29udHJvbCddPSdtYXgtYWdlPTAnOyAkaGRyc0FyclsnQ29ubmVjdGlvbiddPSdrZWVwLWFsaXZlJzsgJGhkcnNBcnJbJ1VwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMnXT0nMSc7ICRoZHJzQXJyWydSZWZlcmVyJ109JHJlZjsgJGhkcnNBcnJbJ1VzZXItQWdlbnQnXT0nTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXT1c2NDsgcnY6NDkuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC80OS4wJzsgaWYoJHR5cGU9PSdKU09OJykgJGhkcnNBcnJbJ0NvbnRlbnQtVHlwZSddPSdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnOyBlbHNlaWYoJHR5cGU9PSdQT1NUJykgJGhkcnNBcnJbJ0NvbnRlbnQtVHlwZSddPSdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOyBpZigkYWo9PT10cnVlKSAkaGRyc0FyclsnWC1SZXF1ZXN0ZWQtV2l0aCddPSdYTUxIdHRwUmVxdWVzdCc7IGlmICgkb3JnIT0nJykgJGhkcnNBcnJbJ09yaWdpbiddPSRvcmc7IGlmICgkdHlwZT09J0dFVCcpICRoZHJzQXJyWydBY2NlcHQnXT0ndGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44JzsgZWxzZSAkaGRyc0FyclsnQWNjZXB0J109JyovKic7IGlmIChmdW5jdGlvbl9leGlzdHMoJ2d6ZGVmbGF0ZScpKSAkaGRyc0FyclsnQWNjZXB0LUVuY29kaW5nJ109J2d6aXAsIGRlZmxhdGUnOyAkaGRyc0FyclsnQWNjZXB0LUxhbmd1YWdlJ109J2VuLVVTLGVuO3E9MC44JzsgcmV0dXJuICRoZHJzQXJyOyB9IGZ1bmN0aW9uIGNoZWNrKCR1PScnKXsgJGNrID0gJHRoaXMtPmNrOyBpZiAoIWVtcHR5KCRjaykgJiYgaXNfYXJyYXkoJGNrKSkgeyBpZiAoZW1wdHkoJHRoaXMtPmxvYykpICR0aGlzLT5nZXRMb2MoKTsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygkdGhpcy0+bG9jLidzZXR0aW5ncy8nKTsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1BOXSBDaGVja2luZy4uLi47PGJyLz5cclxuIjsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkdGhpcy0+bG9jLidzZXR0aW5ncy8nLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgcmV0dXJuIGZhbHNlOyAkY2sgPSAkcmVwWydjb29raWVzJ107ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgJHJldCA9IHN0cmlwb3MoJGNvbnRlbnRzLCAnInVzZXJuYW1lIjoiJykhPT1mYWxzZTsgJHVzcmUgPSBDdXRGcm9tVG8oJGNvbnRlbnRzLCAnImVtYWlsIjoiJywgJyInKTsgJHVzciA9IEN1dEZyb21UbygkY29udGVudHMsICcidXNlcm5hbWUiOiInLCAnIicpOyBpZiAoJHJldCAmICR0aGlzLT5kZWJ1ZykgZWNobyAiW1BOXSBMb2dnZWQgYXM6Ii4kdXNyLiIgKCIuJHVzcmUuIik8YnIvPlxyXG4iOyAkYXBWZXIgPSB0cmltKEN1dEZyb21UbygkY29udGVudHMsJyJhcHBfdmVyc2lvbiI6ICInLCAnIicpKTsgJHRoaXMtPmFwVmVyID0gJGFwVmVyOyBpZiAoZW1wdHkoJHUpIHx8ICR1PT0kdXNyIHx8ICR1PT0kdXNyZSkgcmV0dXJuICRyZXQ7IGVsc2UgcmV0dXJuIGZhbHNlOyB9IGVsc2UgcmV0dXJuIGZhbHNlOyB9IGZ1bmN0aW9uIGNvbm5lY3QoJHUsJHApeyAkYmFkT3V0ID0gJ0Vycm9yOiAnOyBpZiAoISR0aGlzLT5jaGVjaygkdSkpeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbUE5dIE5PIFNhdmVkIERhdGE7IExvZ2dpbmcgaW4uLi48YnIvPlxyXG4iOyBpZiAoZW1wdHkoJHRoaXMtPmxvYykpIHsgJGVyID0gJHRoaXMtPmdldExvYygpOyBpZiAoIWVtcHR5KCRlcikpIHJldHVybiAkZXI7IH0gJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygkdGhpcy0+bG9jLidsb2dpbi8nKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICcnLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCR0aGlzLT5sb2MuJ2xvZ2luLycsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSB7ICRiYWRPdXQgPSBwcmludF9yKCRyZXAsIHRydWUpLiIgLSBFUlJPUiAtMDEtIjsgcmV0dXJuICRiYWRPdXQ7IH0gJGNrID0gJHJlcFsnY29va2llcyddOyAkY29udGVudHMgPSAkcmVwWydib2R5J107ICRhcFZlciA9IHRyaW0oQ3V0RnJvbVRvKCRjb250ZW50cywnImFwcF92ZXJzaW9uIjogIicsICciJykpOyAkcCA9IGFkZHNsYXNoZXMoc3RyaXBzbGFzaGVzKCRwKSk7ICRmbGRzID0gYXJyYXkoJ2RhdGEnPT4neyJvcHRpb25zIjp7InVzZXJuYW1lX29yX2VtYWlsIjoiJy4kdS4nIiwicGFzc3dvcmQiOiInLiRwLicifSwiY29udGV4dCI6eyJhcHBfdmVyc2lvbiI6IjdiOWNhYWIifX0nLCAnc291cmNlX3VybCc9PicvbG9naW4vJywgJ21vZHVsZV9wYXRoJz0+J0FwcCgpPkxvZ2luUGFnZSgpPkxvZ2luKCk+QnV0dG9uKGNsYXNzX25hbWU9cHJpbWFyeSwgdGV4dD1Mb2cgaW4sIHR5cGU9c3VibWl0LCB0YWdOYW1lPWJ1dHRvbiwgc2l6ZT1sYXJnZSknKTsgZm9yZWFjaCAoJGNrIGFzICRjKSBpZiAoJGMtPm5hbWU9PSdjc3JmdG9rZW4nKSAkeGZ0a24gPSAkYy0+dmFsdWU7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJHRoaXMtPmxvYy4nbG9naW4vJywgJHRoaXMtPmxvYywgJ1BPU1QnLCB0cnVlKTsgJGhkcnNBcnJbJ1gtTkVXLUFQUCddPScxJzsgJGhkcnNBcnJbJ1gtQVBQLVZFUlNJT04nXT0kYXBWZXI7ICRoZHJzQXJyWydYLUNTUkZUb2tlbiddPSR4ZnRrbjsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJGZsZHMsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX3Bvc3QoJHRoaXMtPmxvYy4ncmVzb3VyY2UvVXNlclNlc3Npb25SZXNvdXJjZS9jcmVhdGUvJywgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9IHByaW50X3IoJHJlcCwgdHJ1ZSkuIiAtIEVSUk9SIC0wMi0iOyByZXR1cm4gJGJhZE91dDsgfSBpZiAoIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpIHsgJGxvYyA9IEN1dEZyb21UbygkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICdodHRwczovLycsJy5waW50ZXJlc3QnKTsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly8nLiRsb2MuJy5waW50ZXJlc3QuY29tL2xvZ2luLycsICdodHRwczovLycuJGxvYy4nLnBpbnRlcmVzdC5jb20nLCAnUE9TVCcsIHRydWUpOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkZmxkcywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfcG9zdCgnaHR0cHM6Ly8nLiRsb2MuJy5waW50ZXJlc3QuY29tL3Jlc291cmNlL1VzZXJTZXNzaW9uUmVzb3VyY2UvY3JlYXRlLycsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSB7ICRiYWRPdXQgPSBwcmludF9yKCRyZXAsIHRydWUpLiIgLSBFUlJPUiAtMDItIjsgcmV0dXJuICRiYWRPdXQ7IH0gfSBlbHNlICRsb2MgPSAnd3d3JzsgaWYgKCFlbXB0eSgkcmVwWydib2R5J10pKSB7ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgJHJlc3AgPSBqc29uX2RlY29kZSgkY29udGVudHMsIHRydWUpOyB9IGVsc2UgeyAkYmFkT3V0ID0gcHJpbnRfcigkcmVwLCB0cnVlKS4iIC0gRVJST1IgLTAzLSI7IHJldHVybiAkYmFkT3V0OyB9IGlmIChpc19hcnJheSgkcmVzcCkgJiYgZW1wdHkoJHJlc3BbJ3Jlc291cmNlX3Jlc3BvbnNlJ11bJ2Vycm9yJ10pKSB7ICRjayA9ICRyZXBbJ2Nvb2tpZXMnXTsgZm9yZWFjaCAoJGNrIGFzICRjaT0+JGNjKSAkY2tbJGNpXS0+dmFsdWUgPSBzdHJfcmVwbGFjZSgnICcsJysnLCAkY2MtPnZhbHVlKTsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly8nLiRsb2MuJy5waW50ZXJlc3QuY29tL2xvZ2luJyk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwPW54c19yZW1vdGVfZ2V0KCdodHRwczovLycuJGxvYy4nLnBpbnRlcmVzdC5jb20vJywgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9IHByaW50X3IoJHJlcCwgdHJ1ZSkuIiAtIEVSUk9SIC0wMi4xLSI7IHJldHVybiAkYmFkT3V0OyB9IGlmICghZW1wdHkoJHJlcFsnY29va2llcyddKSkgZm9yZWFjaCAoJHJlcFsnY29va2llcyddIGFzICRjY04pIHsgJGZkbiA9IGZhbHNlOyBmb3JlYWNoICgkY2sgYXMgJGNpPT4kY2MpIGlmICgkY2NOLT5uYW1lID09ICRjYy0+bmFtZSkgeyAkZmRuID0gdHJ1ZTsgJGNrWyRjaV0gPSAkY2NOOyB9IGlmICghJGZkbikgJGNrW10gPSAkY2NOOyB9IGZvcmVhY2ggKCRjayBhcyAkY2k9PiRjYykgJGNrWyRjaV0tPnZhbHVlID0gc3RyX3JlcGxhY2UoJyAnLCcrJywgJGNjLT52YWx1ZSk7ICR0aGlzLT50ayA9ICR4ZnRrbjsgJHRoaXMtPmNrID0gJGNrOyAkdGhpcy0+YXBWZXIgPSAkYXBWZXI7ICR0aGlzLT5nZXRMb2MoKTsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1BOXSBZb3UgYXJlIElOOzxici8+XHJcbiI7IHJldHVybiBmYWxzZTsgfSBlbHNlaWYgKGlzX2FycmF5KCRyZXNwKSAmJiBpc3NldCgkcmVzcFsncmVzb3VyY2VfcmVzcG9uc2UnXVsnZXJyb3InXSkpIHJldHVybiAiRVJST1IgLTA0LTogIi4kcmVzcFsncmVzb3VyY2VfcmVzcG9uc2UnXVsnZXJyb3InXVsnaHR0cF9zdGF0dXMnXS4iIHwgIi4kcmVzcFsncmVzb3VyY2VfcmVzcG9uc2UnXVsnZXJyb3InXVsnbWVzc2FnZSddOyBlbHNlaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCAnQ1NSRiB2ZXJpZmljYXRpb24gZmFpbGVkJykhPT1mYWxzZSkgeyAkcmV0VGV4dCA9IHRyaW0oc3RyX3JlcGxhY2UoYXJyYXkoIlxyXG4iLCAiXHIiLCAiXG4iKSwgIiB8ICIsIHN0cmlwX3RhZ3MoQ3V0RnJvbVRvKCRjb250ZW50cywgJzwvaGVhZD4nLCAnPC9ib2R5PicpKSkpOyByZXR1cm4gIkNTUkYgdmVyaWZpY2F0aW9uIGZhaWxlZCAtIFBsZWFzZSBjb250YWN0IE5leHRTY3JpcHRzIFN1cHBvcnQgfCBQaW50ZXJlc3QgTWVzc2FnZToiLiRyZXRUZXh0OyB9IGVsc2VpZiAoc3RyaXBvcygkY29udGVudHMsICdJUCBiZWNhdXNlIG9mIHN1c3BpY2lvdXMgYWN0aXZpdHknKSE9PWZhbHNlKSByZXR1cm4gJ1BpbnRlcmVzdCBibG9ja2VkIGxvZ2lucyBmcm9tIHRoaXMgSVAgYmVjYXVzZSBvZiBzdXNwaWNpb3VzIGFjdGl2aXR5JzsgZWxzZWlmIChzdHJpcG9zKCRjb250ZW50cywgJ3ZlIGRldGVjdGVkIGEgYm90IScpIT09ZmFsc2UgfHwgc3RyaXBvcygkY29udGVudHMsICdib3QgcnVubmluZyBvbiB5b3VyIG5ldHdvcmsnKSE9PWZhbHNlKSB7ICRpcCA9IHN0cmlwb3MoJGNvbnRlbnRzLCAnZXNzOiA8Yj4nKSE9PWZhbHNlPyAnKCcuQ3V0RnJvbVRvKCRjb250ZW50cywgJ2VzczogPGI+JywnPCcpLicpICc6Jyc7IHJldHVybiAnPGJyLz5QaW50ZXJlc3QgaGFzIHlvdXIgSG9zdGluZyBJUCAnLiRpcC4naW4gdGhlIGxpc3Qgb2YgcG90ZW50aWFsbHkgc3VzcGljaW91cyBuZXR3b3JrcyBhbmQgYmxvY2tlZCBpdC48YnIvPjxhIGhyZWY9Imh0dHA6Ly9ueHMuZnlpL2ZhcTY1IiB0YXJnZXQ9Il9ibGFuayI+UGxlYXNlIHNlZSBGQVEgIzYuNTwvYT4uJzsgfSBlbHNlIHJldHVybiAnUGludGVyZXN0IGxvZ2luIGZhaWxlZC4gVW5rbm93biBFcnJvci4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC4nOyByZXR1cm4gJ1BpbnRlcmVzdCBsb2dpbiBmYWlsZWQuIFVua25vd24gRXJyb3IgIzIuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQuJzsgfSBlbHNlIHsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1BOXSBTYXZlZCBEYXRhIGlzIE9LOzxici8+XHJcbiI7IHJldHVybiBmYWxzZTsgfSB9IGZ1bmN0aW9uIGdldExvYygpeyAkY2sgPSAkdGhpcy0+Y2s7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJ2h0dHBzOi8vd3d3LnBpbnRlcmVzdC5jb20vJyk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJ2h0dHBzOi8vd3d3LnBpbnRlcmVzdC5jb20vbnhzODA2Ny8nLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gIkdFVExPQ0sgRVJST1I6ICIucHJpbnRfcigkcmVwLCB0cnVlKS4iIHwgPGJyLz4gUkVROiAiLnByaW50X3IoJGFkdlNldCwgdHJ1ZSk7IHJldHVybiAkYmFkT3V0OyB9IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PScyMDAnIHx8ICRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXT09JzQwMycpICR0aGlzLT5sb2MgPSAnaHR0cHM6Ly93d3cucGludGVyZXN0LmNvbS8nOyBlbHNlaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXT09JzMwMicgJiYgIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpICR0aGlzLT5sb2MgPSAnaHR0cHM6Ly8nLkN1dEZyb21UbygkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10uJy8nLCAiLy8iLCAnLycpLicvJzsgfSBmdW5jdGlvbiBnZXRCb2FyZHMoJGN1cnI9JycpIHsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1BOXSBHZXR0aW5nIEJvYXJkcyAuLi48YnIvPlxyXG4iOyAkYm9hcmRzID0gJyc7ICRjayA9ICR0aGlzLT5jazsgJGFwVmVyID0gJHRoaXMtPmFwVmVyOyAkYnJkc0FyciA9IGFycmF5KCk7IGlmIChlbXB0eSgkdGhpcy0+bG9jKSkgeyAkZXIgPSAkdGhpcy0+Z2V0TG9jKCk7IGlmICghZW1wdHkoJGVyKSkgcmV0dXJuICRlcjsgfSAkbm9Cb2FyZHNNc2cgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+Tm8gQm9hcmRzIEZvdW5kLiBQbGVhc2UgbG9naW4gdG8geW91ciBwaW50ZXJlc3QuY29tIGFjY291bnQgYW5kIGNyZWF0ZSBhdCBsZWFzdCBvbmU8L3NwYW4+JzsgJGl1ID0gJ2h0dHA6Ly9tZW1vcnkubG9jLmdvdi9hd2FyZC9uZGZhL25kZmFodWx0L2MyMDAvYzI0MHIuanBnJzsgJHN1ID0gJy9waW4vZmluZC8/dXJsPScudXJsZW5jb2RlKCRpdSk7ICRpdXUgPSB1cmxlbmNvZGUoJGl1KTsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygkdGhpcy0+bG9jLCcnLCdKU09OJywgdHJ1ZSk7ICRoZHJzQXJyWydYLU5FVy1BUFAnXT0nMSc7ICRoZHJzQXJyWydYLUFQUC1WRVJTSU9OJ109JGFwVmVyOyAkaGRyc0FyclsnWC1QaW50ZXJlc3QtQXBwU3RhdGUnXT0nYWN0aXZlJzsgJGhkcnNBcnJbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCwgKi8qOyBxPTAuMDEnOyAkYnJkVVJMID0gJHRoaXMtPmxvYy4ncmVzb3VyY2UvQm9hcmRQaWNrZXJCb2FyZHNSZXNvdXJjZS9nZXQvP3NvdXJjZV91cmw9JTJGcGluJTJGZmluZCUyRiUzRnVybCUnLiRpdXUuJyZkYXRhPSU3QiUyMm9wdGlvbnMlMjIlM0ElN0IlMjJmaWx0ZXIlMjIlM0ElMjJhbGwlMjIlMkMlMjJmaWVsZF9zZXRfa2V5JTIyJTNBJTIyYm9hcmRfcGlja2VyJTIyJTdEJTJDJTIyY29udGV4dCUyMiUzQSU3QiU3RCU3RCZtb2R1bGVfcGF0aD1BcHAoKSUzRUltYWdlc0ZlZWRQYWdlKHJlc291cmNlJTNERmluZFBpbkltYWdlc1Jlc291cmNlKHVybCUnLiRpdXUuJykpJTNFR3JpZCgpJTNFR3JpZEl0ZW1zKCklM0VQaW5uYWJsZSgpJTNFU2hvd01vZGFsQnV0dG9uKG1vZHVsZSUzRFBpbkNyZWF0ZSknOyRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJGJyZFVSTCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9IHByaW50X3IoJHJlcCwgdHJ1ZSkuIiAtIEVSUk9SIjsgcmV0dXJuICRiYWRPdXQ7IH0gJGNrID0gJHJlcFsnY29va2llcyddOyAkY29udGVudHMgPSAkcmVwWydib2R5J107ICRrID0ganNvbl9kZWNvZGUoJGNvbnRlbnRzLCB0cnVlKTsgaWYgKCFlbXB0eSgka1sncmVzb3VyY2VfZGF0YV9jYWNoZSddKSB8fCAhZW1wdHkoJGtbJ3Jlc291cmNlX3Jlc3BvbnNlJ10pKSB7IGlmICghZW1wdHkoJGtbJ3Jlc291cmNlX2RhdGFfY2FjaGUnXSkpICRicmRzQSA9ICRrWydyZXNvdXJjZV9kYXRhX2NhY2hlJ107IGVsc2UgeyRicmRzQSA9IGFycmF5KCk7ICRicmRzQVtdID0gJGtbJ3Jlc291cmNlX3Jlc3BvbnNlJ107IH0gZm9yZWFjaCAoJGJyZHNBIGFzICRhYikgaWYgKCFlbXB0eSgkYWIpICYmICFlbXB0eSgkYWJbJ2RhdGEnXVsnYWxsX2JvYXJkcyddKSkgeyAkYmEgPSAkYWJbJ2RhdGEnXVsnYWxsX2JvYXJkcyddOyBmb3JlYWNoICgkYmEgYXMgJGtoKSB7ICRib2FyZHMgLj0gJzxvcHRpb24gJy4oJGN1cnI9PSRraFsnaWQnXT8nc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpLicgdmFsdWU9IicuJGtoWydpZCddLiciPicuJGtoWyduYW1lJ10uJzwvb3B0aW9uPic7ICRicmRzQXJyW10gPSBhcnJheSgnaWQnPT4ka2hbJ2lkJ10sICduJz0+JGtoWyduYW1lJ10pOyB9ICR0aGlzLT5ib2FyZHMgPSAkYnJkc0FycjsgcmV0dXJuICRib2FyZHM7IH0gZWxzZSByZXR1cm4gJG5vQm9hcmRzTXNnOyB9IGVsc2UgcmV0dXJuICdDYW5cJ3QgZ2V0IGRhdGEsIHBsZWFzZSB0cnkgYWdhaW4nOyB9IGZ1bmN0aW9uIHBvc3QoJG1zZywgJGltZ1VSTCwgJGxuaywgJGJvYXJkSUQsICR0aXRsZSA9ICcnLCAkcHJpY2U9JycsICR2aWE9JycpeyAkdGsgPSAkdGhpcy0+dGs7ICRjayA9ICR0aGlzLT5jazsgJGFwVmVyID0gJHRoaXMtPmFwVmVyOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbUE5dIFBvc3RpbmcgdG8gLi4uIi4kYm9hcmRJRC4iPGJyLz5cclxuIjsgaWYgKGVtcHR5KCR0aGlzLT5sb2MpKSB7ICRlciA9ICR0aGlzLT5nZXRMb2MoKTsgaWYgKCFlbXB0eSgkZXIpKSByZXR1cm4gJGVyOyB9IGZvcmVhY2ggKCRjayBhcyAkYykgaWYgKCBpc19vYmplY3QoJGMpICYmICRjLT5uYW1lPT0nY3NyZnRva2VuJykgJHRrID0gJGMtPnZhbHVlOyAkbXNnID0gc3RyaXBfdGFncygkbXNnKTsgJG1zZyA9IHN1YnN0cigkbXNnLCAwLCA0ODApOyAkdGdzID0gJyc7ICR0aGlzLT50ayA9ICR0azsgaWYgKCRtc2c9PScnKSAkbXNnID0gJyZuYnNwOyc7IGlmIChlbXB0eSgkYm9hcmRJRCkpIHJldHVybiAiQm9hcmQgaXMgbm90IHNldCwgcGxlYXNlIHJldHJpZXZlIGFuZCBzZWxlY3QgYSBib2FyZC4iOyBpZiAodHJpbSgkaW1nVVJMKT09JycpIHJldHVybiAiSW1hZ2UgaXMgbm90IFNldCI7ICRtc2cgPSBzdHJfaXJlcGxhY2UoYXJyYXkoIlxyXG4iLCAiXG4iLCAiXHIiKSwgIiAiLCAkbXNnKTsgJG1zZyA9IHN0cmlwX3RhZ3MoJG1zZyk7IGlmIChmdW5jdGlvbl9leGlzdHMoJ254c19kZWNvZGVFbnRpdGllc0Z1bGwnKSkgJG1zZyA9IG54c19kZWNvZGVFbnRpdGllc0Z1bGwoJG1zZywgRU5UX1FVT1RFUyk7ICR0aXRsZSA9IHN0cmlwX3RhZ3MoJHRpdGxlKTsgJHRpdGxlID0gc3Vic3RyKCR0aXRsZSwgMCwgOTUpOyBpZiAoZnVuY3Rpb25fZXhpc3RzKCdueHNfZGVjb2RlRW50aXRpZXNGdWxsJykpICR0aXRsZSA9IG54c19kZWNvZGVFbnRpdGllc0Z1bGwoJHRpdGxlLCBFTlRfUVVPVEVTKTsgJG1nc091dCA9IHVybGVuY29kZSgkbXNnKTsgJG1nc091dCA9IHN0cl9pcmVwbGFjZShhcnJheSgnJTI4JywgJyUyOScsICclMjcnLCAnJTIxJywgJyUyMicsICclMDknKSwgYXJyYXkoIigiLCAiKSIsICInIiwgIiEiLCAiJTVDJTIyIiwgJyU1Q3QnKSwgJG1nc091dCk7ICR0aXRsZU91dCA9IHVybGVuY29kZSgkdGl0bGUpOyAkdGl0bGVPdXQgPSBzdHJfaXJlcGxhY2UoYXJyYXkoJyUyOCcsICclMjknLCAnJTI3JywgJyUyMScsICclMjInLCAnJTA5JyksIGFycmF5KCIoIiwgIikiLCAiJyIsICIhIiwgIiU1QyUyMiIsICclNUN0JyksICR0aXRsZU91dCk7ICRmbGRzVHh0ID0gJ3NvdXJjZV91cmw9JTJGcGluJTJGZmluZCUyRiUzRnVybCUzRCcudXJsZW5jb2RlKHVybGVuY29kZSgkbG5rKSkuJyZkYXRhPSU3QiUyMm9wdGlvbnMlMjIlM0ElN0IlMjJib2FyZF9pZCUyMiUzQSUyMicuJGJvYXJkSUQuJyUyMiUyQyUyMmRlc2NyaXB0aW9uJTIyJTNBJTIyJy4kbWdzT3V0LiclMjIlMkMlMjJsaW5rJTIyJTNBJTIyJy51cmxlbmNvZGUoJGxuaykuJyUyMiUyQyUyMnRpdGxlJTIyJTNBJTIyJy4kdGl0bGVPdXQuJyUyMiUyQyUyMnNoYXJlX3R3aXR0ZXIlMjIlM0FmYWxzZSUyQyUyMmltYWdlX3VybCUyMiUzQSUyMicudXJsZW5jb2RlKCRpbWdVUkwpLiclMjIlMkMlMjJtZXRob2QlMjIlM0ElMjJzY3JhcGVkJTIyJTdEJTJDJTIyY29udGV4dCUyMiUzQSU3QiU3RCU3RCc7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJGJyZFVSTCA9ICR0aGlzLT5sb2MuJ3Jlc291cmNlL1BpblJlc291cmNlL2NyZWF0ZS8gJywgJGJyZFVSTCA9ICR0aGlzLT5sb2MsICdQT1NUJywgdHJ1ZSk7ICRoZHJzQXJyWydYLU5FVy1BUFAnXT0nMSc7ICRoZHJzQXJyWydYLUFQUC1WRVJTSU9OJ109JGFwVmVyOyAkaGRyc0FyclsnWC1DU1JGVG9rZW4nXT0kdGs7ICRoZHJzQXJyWydYLVBpbnRlcmVzdC1BcHBTdGF0ZSddPSdhY3RpdmUnOyAkaGRyc0FyclsnQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyo7IHE9MC4wMSc7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICRmbGRzVHh0LCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9wb3N0KCRicmRVUkwgPSAkdGhpcy0+bG9jLidyZXNvdXJjZS9QaW5SZXNvdXJjZS9jcmVhdGUvJywgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9IHByaW50X3IoJHJlcCwgdHJ1ZSkuIiAtIEVSUk9SIjsgcmV0dXJuICRiYWRPdXQ7IH0gJGNvbnRlbnRzID0gJHJlcFsnYm9keSddOyAkcmVzcCA9IGpzb25fZGVjb2RlKCRjb250ZW50cywgdHJ1ZSk7IGlmIChpc19hcnJheSgkcmVzcCkpIHsgaWYgKGlzc2V0KCRyZXNwWydyZXNvdXJjZV9yZXNwb25zZSddKSAmJiBpc3NldCgkcmVzcFsncmVzb3VyY2VfcmVzcG9uc2UnXVsnZXJyb3InXSkgJiYgJHJlc3BbJ3Jlc291cmNlX3Jlc3BvbnNlJ11bJ2Vycm9yJ10hPScnICkgcmV0dXJuICdSU1AgRXJyb3I6ICcucHJpbnRfcigkcmVzcFsncmVzb3VyY2VfcmVzcG9uc2UnXVsnZXJyb3InXSwgdHJ1ZSk7IGVsc2VpZiAoaXNzZXQoJHJlc3BbJ3Jlc291cmNlX3Jlc3BvbnNlJ10pICYmIGlzc2V0KCRyZXNwWydyZXNvdXJjZV9yZXNwb25zZSddWydkYXRhJ10pICYmICRyZXNwWydyZXNvdXJjZV9yZXNwb25zZSddWydkYXRhJ11bJ2lkJ10hPScnKXsgaWYgKGlzc2V0KCRyZXNwWydyZXNvdXJjZV9yZXNwb25zZSddKSAmJiBpc3NldCgkcmVzcFsncmVzb3VyY2VfcmVzcG9uc2UnXVsnZXJyb3InXSkgJiYgJHJlc3BbJ3Jlc291cmNlX3Jlc3BvbnNlJ11bJ2Vycm9yJ10hPScnKSByZXR1cm4gJ1JTUCBFcnJvciAoTm8gSUQpOiAnLnByaW50X3IoJHJlc3BbJ3Jlc291cmNlX3Jlc3BvbnNlJ11bJ2Vycm9yJ10sIHRydWUpOyBlbHNlIHsgJHRoaXMtPmNrID0gJGNrOyByZXR1cm4gYXJyYXkoImlzUG9zdGVkIj0+IjEiLCAicG9zdElEIj0+JHJlc3BbJ3Jlc291cmNlX3Jlc3BvbnNlJ11bJ2RhdGEnXVsnaWQnXSwgJ3BEYXRlJz0+ZGF0ZSgnWS1tLWQgSDppOnMnKSwgInBvc3RVUkwiPT4kYnJkVVJMID0gJHRoaXMtPmxvYy4ncGluLycuJHJlc3BbJ3Jlc291cmNlX3Jlc3BvbnNlJ11bJ2RhdGEnXVsnaWQnXSk7IH0gfSB9ZWxzZWlmIChzdHJpcG9zKCRjb250ZW50cywgJ2Jsb2NrZWQgdGhpcycpIT09ZmFsc2UpIHsgJHJldFRleHQgPSB0cmltKHN0cl9yZXBsYWNlKGFycmF5KCJcclxuIiwgIlxyIiwgIlxuIiksICIgfCAiLCBzdHJpcF90YWdzKEN1dEZyb21UbygkY29udGVudHMsICc8L2hlYWQ+JywgJzwvYm9keT4nKSkpKTsgcmV0dXJuICJQaW50ZXJlc3QgRVJST1I6ICdUaGUgU291cmNlIGlzIGJsb2NrZWQnLiBQbGVhc2Ugc2VlIGh0dHBzOi8vc3VwcG9ydC5waW50ZXJlc3QuY29tL2VudHJpZXMvMjE0MzYzMDYtd2h5LWlzLW15LXBpbi1vci1zaXRlLWJsb2NrZWQtZm9yLXNwYW0tb3ItaW5hcHByb3ByaWF0ZS1jb250ZW50LyBmb3IgbW9yZSBpbmZvIHwgUGludGVyZXN0IE1lc3NhZ2U6Ii4kcmV0VGV4dDsgfSBlbHNlaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCAnaW1hZ2UgeW91IHRyaWVkIHRvIHBpbiBpcyB0b28gc21hbGwnKSE9PWZhbHNlKSB7ICRyZXRUZXh0ID0gdHJpbShzdHJfcmVwbGFjZShhcnJheSgiXHJcbiIsICJcciIsICJcbiIpLCAiIHwgIiwgc3RyaXBfdGFncyhDdXRGcm9tVG8oJGNvbnRlbnRzLCAnPC9oZWFkPicsICc8L2JvZHk+JykpKSk7IHJldHVybiAiSW1hZ2UgeW91IHRyaWVkIHRvIHBpbiBpcyB0b28gc21hbGwgfCBQaW50ZXJlc3QgTWVzc2FnZToiLiRyZXRUZXh0OyB9IGVsc2VpZiAoc3RyaXBvcygkY29udGVudHMsICdDU1JGIHZlcmlmaWNhdGlvbiBmYWlsZWQnKSE9PWZhbHNlKSB7ICRyZXRUZXh0ID0gdHJpbShzdHJfcmVwbGFjZShhcnJheSgiXHJcbiIsICJcciIsICJcbiIpLCAiIHwgIiwgc3RyaXBfdGFncyhDdXRGcm9tVG8oJGNvbnRlbnRzLCAnPC9oZWFkPicsICc8L2JvZHk+JykpKSk7IHJldHVybiAiQ1NSRiB2ZXJpZmljYXRpb24gZmFpbGVkIC0gUGxlYXNlIGNvbnRhY3QgTmV4dFNjcmlwdHMgU3VwcG9ydCB8IFBpbnRlcmVzdCBNZXNzYWdlOiIuJHJldFRleHQ7IH0gZWxzZWlmIChzdHJpcG9zKCRjb250ZW50cywgJ09vcHMnKSE9PWZhbHNlICYmIHN0cmlwb3MoJGNvbnRlbnRzLCAnPGJvZHk+JykhPT1mYWxzZSApIHJldHVybiAnUGludGVyZXN0IEVSUk9SIE1FU1NBR0UgOiAnLnRyaW0oc3RyX3JlcGxhY2UoYXJyYXkoIlxyXG4iLCAiXHIiLCAiXG4iKSwgIiB8ICIsIHN0cmlwX3RhZ3MoQ3V0RnJvbVRvKCRjb250ZW50cywgJzwvaGVhZD4nLCAnPC9ib2R5PicpKSkpOyBlbHNlIHJldHVybiAiU29tZXRoaWcgaXMgV3JvbmcgLSBQaW50ZXJlc3QgUmV0dXJuZWQgRXJyb3IgNTAyIjsgfSB9fSBpZiAoIWNsYXNzX2V4aXN0cygnbnhzQVBJX0xJJykpe2NsYXNzIG54c0FQSV9MSXsgdmFyICRjayA9IGFycmF5KCk7IHZhciAkZGVidWcgPSBmYWxzZTsgdmFyICRwcm94eSA9IGFycmF5KCk7IHZhciAkc2lkID0gJyc7IHZhciAkbGlVc2VyID0gYXJyYXkoJ2FpZCc9PicnLCdwaWQnPT4nJywnbWlkJz0+JycpOyBmdW5jdGlvbiBoZWFkZXJzKCRyZWYsICRvcmc9JycsICR0eXBlPSdHRVQnLCAkYWo9ZmFsc2UpeyAkaGRyc0FyciA9IGFycmF5KCk7ICRoZHJzQXJyWydDYWNoZS1Db250cm9sJ109J21heC1hZ2U9MCc7ICRoZHJzQXJyWydDb25uZWN0aW9uJ109J2tlZXAtYWxpdmUnOyAkaGRyc0FyclsnUmVmZXJlciddPSRyZWY7ICRoZHJzQXJyWydVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJ109JzEnOyAkaGRyc0FyclsnVXNlci1BZ2VudCddPSdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNTYuMC4yOTI0Ljg3IFNhZmFyaS81MzcuMzYnOyBpZigkdHlwZT09J0pTT04nKSAkaGRyc0FyclsnQ29udGVudC1UeXBlJ109J2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7IGVsc2VpZigkdHlwZT09J1BPU1QnKSAkaGRyc0FyclsnQ29udGVudC1UeXBlJ109J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7IGlmKCRhaj09PXRydWUpICRoZHJzQXJyWydYLVJlcXVlc3RlZC1XaXRoJ109J1hNTEh0dHBSZXF1ZXN0JzsgaWYgKCRvcmchPScnKSAkaGRyc0FyclsnT3JpZ2luJ109JG9yZzsgaWYgKCR0eXBlPT0nR0VUJykgJGhkcnNBcnJbJ0FjY2VwdCddPSd0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwqLyo7cT0wLjgnOyBlbHNlICRoZHJzQXJyWydBY2NlcHQnXT0nKi8qJzsgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZ3pkZWZsYXRlJykpICRoZHJzQXJyWydBY2NlcHQtRW5jb2RpbmcnXT0nZGVmbGF0ZSxzZGNoJzsgJGhkcnNBcnJbJ0FjY2VwdC1MYW5ndWFnZSddPSdlbi1VUyxlbjtxPTAuOCc7IHJldHVybiAkaGRyc0FycjsgfSBmdW5jdGlvbiBzZXRTZXNzaW9uKCl7IGlmICghZW1wdHkoJHRoaXMtPnNpZCkpIHsgaWYgKGVtcHR5KCR0aGlzLT5jaykpICR0aGlzLT5jayA9IGFycmF5KCk7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltGUF0gU2V0dGluZyBTZXNzaW9uLi4uPGJyLz5cclxuIjsgZm9yZWFjaCAoJHRoaXMtPmNrIGFzICRjaT0+JGNjKSBpZiAoICR0aGlzLT5ja1skY2ldLT5uYW1lPT0nbGlfYXQnKSB1bnNldCgkdGhpcy0+Y2tbJGNpXSk7ICRjID0gbmV3IE5YU19IdHRwX0Nvb2tpZSggYXJyYXkoJ25hbWUnID0+ICdsaV9hdCcsICd2YWx1ZScgPT4gJHRoaXMtPnNpZCkgKTsgJHRoaXMtPmNrW10gPSAkYzsgfSB9IGZ1bmN0aW9uIGNoZWNrKCR1PScnKXsgJHRoaXMtPnNldFNlc3Npb24oKTsgJGNrID0gJHRoaXMtPmNrOyBpZiAoIWVtcHR5KCRjaykgJiYgaXNfYXJyYXkoJGNrKSkgeyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCdodHRwczovL3d3dy5saW5rZWRpbi5jb20nLCAnJywnSlNPTicsIHRydWUpOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbTEldIENoZWNraW5nLi4uLjs8YnIvPlxyXG4iOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCdodHRwczovL3d3dy5saW5rZWRpbi5jb20vcHNldHRpbmdzL2VtYWlsP2FzSnNvbj10cnVlJywgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHJldHVybiBmYWxzZTsgJGNrID0gJHJlcFsnY29va2llcyddOyAkY29udGVudHMgPSAkcmVwWydib2R5J107ICRqcyA9IGpzb25fZGVjb2RlKCRjb250ZW50cywgdHJ1ZSk7IGlmICghZW1wdHkoJGpzKSAmJiBpc19hcnJheSgkanMpICYmICFlbXB0eSgkanNbJ21hcCddKSAmJiAhZW1wdHkoJGpzWydtYXAnXVsnZGF0YSddKSkgeyAkanMgPSAkanNbJ21hcCddWydkYXRhJ107ICRlbSA9IGFycmF5KCk7IGlmICghZW1wdHkoJGpzWydlbWFpbCddKSkgJGVtW10gPSAkanNbJ2VtYWlsJ107IGZvcmVhY2ggKCRqcyBhcyAkaikgaWYgKCFlbXB0eSgkalsnZW1haWwnXSkpICRlbVtdID0gJGpbJ2VtYWlsJ107IGlmICghZW1wdHkoJHUpKSAkaXNDaGVja2VkID0gaW5fYXJyYXkoJHUsJGVtKTsgZWxzZSAkaXNDaGVja2VkID0gIWVtcHR5KCRlbSk7IH0gZWxzZSByZXR1cm4gZmFsc2U7IGlmICgkaXNDaGVja2VkKSAkdGhpcy0+Y2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJHRoaXMtPmNrLCAkY2spOyByZXR1cm4gJGlzQ2hlY2tlZDsgfSBlbHNlIHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiBjb25uZWN0KCR1LCRwKXsgJGJhZE91dCA9ICdDb25uZWN0IEVycm9yOiAnOyBpZiAoISR0aGlzLT5jaGVjaygkdSkpeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbTEldIE5PIFNhdmVkIERhdGE7PGJyLz5cclxuIjsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tJyk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAnJywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3Vhcy9sb2dpbj9nb2JhY2s9JnRyaz1oYl9zaWduaW4nLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gIkFVVEggRVJST1IgIzEiLiBwcmludF9yKCRyZXAsIHRydWUpOyByZXR1cm4gJGJhZE91dDsgfSAkY2sgPSBueHNDbG5Db29raWVzKCRyZXBbJ2Nvb2tpZXMnXSk7ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgaWYgKCFlbXB0eSgkdGhpcy0+cHJveHkpKSB7ICRwcnggPSBleHBsb2RlKCc6JywkdGhpcy0+cHJveHlbJ3Byb3h5J10pOyAkdGhpcy0+cHJveHkgPSAkcHJ4OyB9ICRtZCA9IGFycmF5KCk7ICRmbGRzID0gYXJyYXkoKTsgJHRyZWVJRCA9IHRyaW0oQ3V0RnJvbVRvKCRjb250ZW50cywnbmFtZT0idHJlZUlEIiBjb250ZW50PSInLCAnIicpKTsgd2hpbGUgKHN0cmlwb3MoJGNvbnRlbnRzLCAnPGlucHV0JykhPT1mYWxzZSl7ICRpbnBGaWVsZCA9IHRyaW0oQ3V0RnJvbVRvKCRjb250ZW50cywnPGlucHV0JywgJz4nKSk7ICRuYW1lID0gdHJpbShDdXRGcm9tVG8oJGlucEZpZWxkLCduYW1lPSInLCAnIicpKTsgaWYgKCBzdHJpcG9zKCRpbnBGaWVsZCwgJyJoaWRkZW4iJykhPT1mYWxzZSAmJiAkbmFtZSE9JycgJiYgIWluX2FycmF5KCRuYW1lLCAkbWQpKSB7ICRtZFtdID0gJG5hbWU7ICR2YWwgPSB0cmltKEN1dEZyb21UbygkaW5wRmllbGQsJ3ZhbHVlPSInLCAnIicpKTsgJGZsZHNbJG5hbWVdPSAkdmFsOyB9ICRjb250ZW50cyA9IHN1YnN0cigkY29udGVudHMsIHN0cmlwb3MoJGNvbnRlbnRzLCAnPGlucHV0JykrOCk7IH0gJGZsZHNbJ3Nlc3Npb25fa2V5J10gPSAkdTsgJGZsZHNbJ3Nlc3Npb25fcGFzc3dvcmQnXSA9ICRwOyAkZmxkc1snc2lnbmluJ10gPSAnU2lnbiUyMEluJzsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tLycsICdodHRwczovL3d3dy5saW5rZWRpbi5jb20nLCAnUE9TVCcsIHRydWUpOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkZmxkcywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfcG9zdCgnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3Vhcy9sb2dpbi1zdWJtaXQnLCAkYWR2U2V0KTtpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSB7ICRiYWRPdXQgPSAiQVVUSCBFUlJPUiAjMiIuIHByaW50X3IoJHJlcCwgdHJ1ZSk7IHJldHVybiAkYmFkT3V0OyB9ICRjayA9IG54c0NsbkNvb2tpZXMobnhzX01lcmdlQ29va2llQXJyKCRjaywgJHJlcFsnY29va2llcyddKSk7IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PSczMDInICYmICFlbXB0eSgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10pKSB7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS8nKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSByZXR1cm4gJ0VSUk9SIChMb2dpbiBSMi4pICcucHJpbnRfcigkcmVwLCB0cnVlKTsgaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXT09JzMwMicgJiYgIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpIHJldHVybiAnRVJST1IgKExvZ2luIFIzKSBSIHRvOiAnLnByaW50X3IoJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddLCB0cnVlKTsgaWYgKHN0cmlwb3MoJHJlcFsnYm9keSddLCAncHJvZmlsZS1lZGl0LWV4dCcpIT09ZmFsc2UpIHsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW0xJXSBMb2dpbiB3YXMgT0s7PGJyLz5cclxuIjsgJHRoaXMtPmNrID0gJGNrOyByZXR1cm4gZmFsc2U7IH0gfSAkbGdPayA9IGZhbHNlOyBpZiAoIWVtcHR5KCRyZXBbJ2Nvb2tpZXMnXSkpIGZvcmVhY2ggKCRyZXBbJ2Nvb2tpZXMnXSBhcyAkY2MpIGlmICgkY2MtPm5hbWU9PSdsaV9hdCcgJiYgIWVtcHR5KCRjYy0+dmFsdWUpICYmIHN0cmlwb3MoJGNjLT52YWx1ZSwnZGVsZXRlJyk9PT1mYWxzZSkgeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbTEldIExvZ2luIE9LOyBHb3QgQ0s7IDxici8+XHJcbiI7ICR0aGlzLT5jayA9ICRyZXBbJ2Nvb2tpZXMnXTsgcmV0dXJuIGZhbHNlOyB9IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PScyMDAnKSB7ICRjb250ZW50ID0gJHJlcFsnYm9keSddOyBpZiAoc3RyaXBvcygkY29udGVudCwgJ3Nlc3Npb25fcGFzc3dvcmQtbG9naW4tZXJyb3InKSE9PWZhbHNlKSB7IHJldHVybiAiSG1tLCB0aGF0J3Mgbm90IHRoZSByaWdodCBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2Fpbi4iO30gaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSBmb3JlYWNoICgkcmVwWydjb29raWVzJ10gYXMgJGNjTikgeyAkZmRuID0gZmFsc2U7IGZvcmVhY2ggKCRjayBhcyAkY2k9PiRjYykgaWYgKCRjY04tPm5hbWUgPT0gJGNjLT5uYW1lKSB7ICRmZG4gPSB0cnVlOyAkY2tbJGNpXSA9ICRjY047IH0gaWYgKCEkZmRuKSAkY2tbXSA9ICRjY047IH0gaWYgKHN0cmlwb3MoJGNvbnRlbnQsICcic3RhdHVzIjoib2siJykhPT1mYWxzZSkgeyBpZiAoc3RyaXBvcygkY29udGVudCwgJ3JlZGlyZWN0VXJsJykhPT1mYWxzZSkgeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbTEldIExvZ2luIFJFRElSOzxici8+XHJcbiI7ICRjb250ZW50ID0gc3RyX2lyZXBsYWNlKCcvdWFzLycsJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS91YXMvJywkY29udGVudCk7ICRySnNvbiA9IGpzb25fZGVjb2RlKCRjb250ZW50LCB0cnVlKTsgaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSBmb3JlYWNoICgkcmVwWydjb29raWVzJ10gYXMgJGNjTikgeyAkZmRuID0gZmFsc2U7IGZvcmVhY2ggKCRjayBhcyAkY2k9PiRjYykgaWYgKCRjY04tPm5hbWUgPT0gJGNjLT5uYW1lKSB7ICRmZG4gPSB0cnVlOyAkY2tbJGNpXSA9ICRjY047IH0gaWYgKCEkZmRuKSAkY2tbXSA9ICRjY047IH0gJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3Vhcy9sb2dpbi1zdWJtaXQnKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSwwKTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCRySnNvblsncmVkaXJlY3RVcmwnXSwgJGFkdlNldCk7IH0gZWxzZSB7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltMSV0gTG9naW4gd2FzIE9LOzxici8+XHJcbiI7ICR0aGlzLT5jayA9ICRjazsgcmV0dXJuIGZhbHNlOyB9fSBpZiAoc3RyaXBvcygkY29udGVudCwgJ291IGhhdmUgZXhjZWVkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvZGUgcmVxdWVzdHMnKSE9PWZhbHNlKSB7IHJldHVybiAiWW91IGhhdmUgZXhjZWVkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvZGUgcmVxdWVzdHMuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuIjt9IGlmIChzdHJpcG9zKCRjb250ZW50LCAnd2UgbmVlZCB5b3UgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24nKSE9PWZhbHNlKSB7IHJldHVybiAiTG9naW4gRXJyb3IgLSBMSU5LRURJTiBNZXNzYWdlOiAgU29ycnksIHdlIG5lZWQgeW91IHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLiBXZSBoYXZlIHJlc2VudCB0aGUgZW1haWwuIFBsZWFzZSBjaGVjayB5b3VyIGVtYWlsIG5vdy4iO30gaWYgKHN0cmlwb3MoJGNvbnRlbnQsICdwbGF5LmNoZWNrcG9pbnQubG9naW4uY29udHJvbCcpIT09ZmFsc2UpIHsgcmV0dXJuICJMb2dpbiBFcnJvciAtIE5vIEFjY2VzcyhSQ05SKS4gUGxlYXNlIHRyeSA8YSBocmVmPSdodHRwOi8vbnhzLmZ5aS9saWFjJz5BbHRlcm5hdGl2ZSBMaW5rZWRJbiBDb25maWd1cmF0aW9uIC0gaHR0cDovL254cy5meWkvbGlhYzwvYT4iO30gaWYgKHN0cmlwb3MoJGNvbnRlbnQsICcic3VibWl0UmVxdWlyZWQiOnRydWUnKSE9PWZhbHNlKSB7IHVuc2V0KCRoZHJzQXJyWydYLUlzQUpBWEZvcm0nXSk7IHVuc2V0KCRoZHJzQXJyWydYLUxpbmtlZEluLXRyYWNlRGF0YUNvbnRleHQnXSk7IHVuc2V0KCRoZHJzQXJyWydYLVJlcXVlc3RlZC1XaXRoJ10pOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkZmxkcywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfcG9zdCgnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3Vhcy9sb2dpbi1zdWJtaXQnLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gJ0VSUiAyOicucHJpbnRfcigkcmVwLCB0cnVlKTsgcmV0dXJuICRiYWRPdXQ7IH0gJGNvbnRlbnQgPSAkcmVwWydib2R5J107IH0gaWYgKCBzdHJpcG9zKCRjb250ZW50LCAnbmFtZT0iUGluVmVyaWZpY2F0aW9uRm9ybV9waW5QYXJhbSInKSE9PWZhbHNlKSB7ICRmYSA9IEN1dEZyb21UbygkY29udGVudCwnYWN0aW9uPSInLCciJyk7IGlmICggc3RyaXBvcygkY29udGVudCwgJzxkaXYgaWQ9InVhcy1jb25zdW1lci10d28tc3RlcC12ZXJpZmljYXRpb24iIGNsYXNzPSJ0d28tc3RlcC12ZXJpZmljYXRpb24iPicpIT09ZmFsc2UpIHsgJHRleHQgPSBDdXRGcm9tVG8oJGNvbnRlbnQsICc8ZGl2IGlkPSJ1YXMtY29uc3VtZXItdHdvLXN0ZXAtdmVyaWZpY2F0aW9uIiBjbGFzcz0idHdvLXN0ZXAtdmVyaWZpY2F0aW9uIj4nLCAnPHNjcmlwdCBpZD0iJykuJzwvbGk+PC91bD48L2Zvcm0+PC9kaXY+PC9kaXY+JzsgJGZvcm1jb2RlID0gJzxmb3JtICcuQ3V0RnJvbVRvKCRjb250ZW50LCAnPGRpdiBpZD0idWFzLWNvbnN1bWVyLXR3by1zdGVwLXZlcmlmaWNhdGlvbiIgY2xhc3M9InR3by1zdGVwLXZlcmlmaWNhdGlvbiI+JywgJzwvZm9ybT4nKTsgfSBlbHNlIHsgJHRleHQgPSBDdXRGcm9tVG8oJGNvbnRlbnQsICc8ZGl2IGlkPSJ1YXMtY29uc3VtZXItYXRvLXBpbi1jaGFsbGVuZ2UiIGNsYXNzPSJ0d28tc3RlcC12ZXJpZmljYXRpb24iPicsICc8c2NyaXB0IGlkPSInKS4nPC9saT48L3VsPjwvZm9ybT48L2Rpdj48L2Rpdj4nOyAkZm9ybWNvZGUgPSAnPGZvcm0gJy5DdXRGcm9tVG8oJGNvbnRlbnQsICc8ZGl2IGlkPSJ1YXMtY29uc3VtZXItYXRvLXBpbi1jaGFsbGVuZ2UiIGNsYXNzPSJ0d28tc3RlcC12ZXJpZmljYXRpb24iPicsICc8L2Zvcm0+Jyk7IH0gd2hpbGUgKHN0cmlwb3MoJGZvcm1jb2RlLCAnImhpZGRlbiInKSE9PWZhbHNlKXskZm9ybWNvZGUgPSBzdWJzdHIoJGZvcm1jb2RlLCBzdHJpcG9zKCRmb3JtY29kZSwgJyJoaWRkZW4iJykrOCk7ICRuYW1lID0gdHJpbShDdXRGcm9tVG8oJGZvcm1jb2RlLCduYW1lPSInLCAnIicpKTsgaWYgKCFpbl9hcnJheSgkbmFtZSwgJG1kKSkgeyAkbWRbXSA9ICRuYW1lOyAkdmFsID0gdHJpbShDdXRGcm9tVG8oJGZvcm1jb2RlLCd2YWx1ZT0iJywgJyInKSk7ICRmbGRzWyRuYW1lXT0gJHZhbDsgfSB9ICRmbGRzWydzZXNzaW9uX2tleSddID0gJHU7ICRmbGRzWydzZXNzaW9uX3Bhc3N3b3JkJ10gPSAkcDsgJGZsZHNbJ3NpZ25pbiddID0gJ1NpZ24lMjBJbic7ICRzZXIgPSBhcnJheSgpOyAkc2VyWydjJ10gPSAkY2s7ICRzZXJbJ2YnXSA9ICRmbGRzOyAkc2VyWydmYSddID0gJGZhOyAkc2VGb3JEQiA9IHNlcmlhbGl6ZSgkc2VyKTsgcmV0dXJuIGFycmF5KCdvdXQnID0+ICR0ZXh0LCAnc2VyJz0+JHNlRm9yREIpOyB9IGlmIChzdHJpcG9zKCRjb250ZW50LCAnY2FwdGNoYSByZWNhcHRjaGEnKSE9PWZhbHNlKSB7ICRjYSA9IG54c19yZW1vdGVfZ2V0KCdodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkvbm9zY3JpcHQ/az02TGNuYWNNU0FBQUFBRG9JdVl2TFVIU05MWGRnVWNxLWpqcWpCbzVuJyk7IGlmIChpc19ueHNfZXJyb3IoJGNhKSkgeyAkYmFkT3V0ID0gcHJpbnRfcigkY2EsIHRydWUpLiIgLSBbY2FwdGNoYV0gRVJST1IiOyByZXR1cm4gJGJhZE91dDsgfSAkaW1nID0gQ3V0RnJvbVRvKCRjYVsnYm9keSddLCAnc3JjPSJpbWFnZT9jPScsICciJyk7ICRmb3JtY29kZSA9ICc8Zm9ybSAnLkN1dEZyb21UbygkY29udGVudCwgJzxmb3JtIGFjdGlvbj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3Vhcy9jYXB0Y2hhLXN1Ym1pdCIgJywgJzwvZm9ybT4nKTsgJGZvcm1jb2RlID0gc3RyX2lyZXBsYWNlKCc8L2lmcmFtZT4nLCAnJywgJGZvcm1jb2RlKTsgJGZvcm1jb2RlID0gc3RyX2lyZXBsYWNlKCc8aWZyYW1lIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpL25vc2NyaXB0P2s9NkxjbmFjTVNBQUFBQURvSXVZdkxVSFNOTFhkZ1VjcS1qanFqQm81biIgaGVpZ2h0PSIzMDAiIHdpZHRoPSI1MDAiIGZyYW1lYm9yZGVyPSIwIj4nLCAkY2FbJ2JvZHknXSwgJGZvcm1jb2RlKTsgcmV0dXJuIGFycmF5KCdjaW1nJyA9PiAkaW1nLCAnY2snPT4kY2ssICdmb3JtY29kZSc9PiRmb3JtY29kZSk7IH0gaWYgKHN0cmlwb3MoJGNvbnRlbnQsICcvdWFzL2NvbnN1bWVyLWNhcHRjaGEtdjInKSE9PWZhbHNlKSB7ICRmcm1tID0gJ1VuZm9ydHVuYXRlbHkgeW91ciBzZXJ2ZXIgSVAgaXMgYmxhY2tsaXN0ZWQgYnkgTGlua2VkSW4gZHVlIHRvIHRoZSBwcmV2aW91cyBhYnVzZS4gPGJyLz48YnIvPkxpbmtlZEluIGlzIGFza2luZyB5b3UgdG8gZW50ZXIgY2FwdGNoYSB0byB1bmxvY2sgeW91ciBJUC48YnIvPjxici8+SGVyZSBpcyB3aGF0IHlvdSBjYW4gZG86PGJyLz4xLiBHZXQgYSB3b3JraW5nIHByb3h5IGFuZCBjb25maWd1cmUgaXQgaW4gYm90aCB5b3VyIGJyb3dzZXIgYW5kIHBsdWdpbi4nOyAkZnJtbSAuPSAnMi4gTG9naW4gdG8gTGlua2VkSW4gZnJvbSB5b3VyIGJyb3dzZXIuIFNvbHZlIGNhcHRjaGEgKGlmIGFza2VkKTxici8+IDMuIE1ha2UgYSB0ZXN0IHBvc3QgZnJvbSB0aGUgcGxndWluLjxici8+PGJyLz4gNC4gUmVtb3ZlIHByb3h5IGFuZCBwb3N0IGEgdGVzdCBhZ2Fpbi4gPGJyLz4nOyBlY2hvICRmcm1tOyBkaWUoKTsgfSBpZiAoc3RyaXBvcygkY29udGVudCwgJyJzdGF0dXMiOiJmYWlsIicpIT09ZmFsc2UpIHsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW0xJXSBMb2dpbiBmYWlsZWQ7PGJyLz5cclxuIjsgJGNvbnRlbnQgPSBzdHJfaXJlcGxhY2UoJ2hyZWY9Ii91YXMvJywnaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3Vhcy8nLCRjb250ZW50KTsgJHJKc29uID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIHRydWUpOyAkYmFkT3V0ID0gIkxPR0lOIEVSUk9SOiAiLnByaW50X3IoJHJKc29uLCB0cnVlKTsgaWYgKHN0cmlwb3MoJGNvbnRlbnQsICdUaGVyZSB3ZXJlIG9uZSBvciBtb3JlIGVycm9ycycpIT09ZmFsc2UpICRiYWRPdXQgLj0gIlxyXG48YnIvPkVycm9yIE1lc3NhZ2U6ICBIbW0sIHRoYXQncyBub3QgdGhlIHJpZ2h0IHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluLiI7IHJldHVybiAkYmFkT3V0OyB9IGlmIChzdHJpcG9zKCRjb250ZW50LCAndGV4dGFyZWEgbmFtZT0icG9zdFRleHQiJykhPT1mYWxzZSB8fCBzdHJpcG9zKCRjb250ZW50LCAnaWQ9InNoYXJlYm94LWNvbnRhaW5lciInKSE9PWZhbHNlIHx8IHN0cmlwb3MoJGNvbnRlbnQsICdjbGFzcz0iaW5pdGlhbC1sb2FkLWFuaW1hdGlvbiInKSE9PWZhbHNlKSB7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltMSV0gTG9naW4gT0s7IEdvdCBGb3JtOyA8YnIvPlxyXG4iOyAkdGhpcy0+Y2sgPSAkY2s7IHJldHVybiBmYWxzZTt9IH0gcmV0dXJuICRiYWRPdXQuIiBMSSBNU0c6Ii5wcmludF9yKCRyZXAsIHRydWUpOyB9IGVsc2UgeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbTEldIFNhdmVkIERhdGEgaXMgT0s7PGJyLz5cclxuIjsgcmV0dXJuIGZhbHNlOyB9IH0gZnVuY3Rpb24gZ2V0UGdzTGlzdCgkcGdJRCl7ICRjayA9ICR0aGlzLT5jazsgJHBncyA9ICcnOyBpZiAoIWVtcHR5KCRjaykgJiYgaXNfYXJyYXkoJGNrKSkgeyAkaGRyc0FyciA9ICR0aGlzLT5oZWFkZXJzKCdodHRwczovL3d3dy5saW5rZWRpbi5jb20nKTsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW0xJXSBQRyBMaXN0Li4uLjs8YnIvPlxyXG4iOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCdodHRwczovL3d3dy5saW5rZWRpbi5jb20vam9icy9jYXJlZXItaW50ZXJlc3RzLycsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSByZXR1cm4gZmFsc2U7ICRjayA9ICRyZXBbJ2Nvb2tpZXMnXTsgJGNvbnRlbnRzID0gJHJlcFsnYm9keSddOyAkY29udGVudHMgPSBzdHJfaXJlcGxhY2UoJyonLCcnLCRjb250ZW50cyk7IGlmIChzdHJpcG9zKCRjb250ZW50cywgJyZxdW90O2NvbXBhbmllcyZxdW90OycpIT09ZmFsc2UpIHsgJGN0ID0gc3RyX3JlcGxhY2UoJyZxdW90OycsJyInLCd7JnF1b3Q7ZGF0YSZxdW90Ozp7JnF1b3Q7Y29tcGFuaWVzJnF1b3Q7Jy5DdXRGcm9tVG8oJGNvbnRlbnRzLCAnJnF1b3Q7Y29tcGFuaWVzJnF1b3Q7JywnfV19JykuJ31dfScpOyAkY3QgPSBqc29uX2RlY29kZSgkY3QsIHRydWUpOyBpZiAoIWVtcHR5KCRjdCkgJiYgaXNfYXJyYXkoJGN0KSAmJiAhZW1wdHkoJGN0WydpbmNsdWRlZCddKSkgeyAkY3QgPSAkY3RbJ2luY2x1ZGVkJ107IGZvcmVhY2ggKCRjdCBhcyAkYykgeyAkY2lkID0gZXhwbG9kZSgnOicsJGNbJ29iamVjdFVybiddKTsgJGNpZCA9ICRjaWRbM107IGlmICghZW1wdHkoJGNpZCkpICRwZ3MgLj0gJzxvcHRpb24gY2xhc3M9Im54c0JsdWUiICcuKCgkcGdJRD09JGNpZCk/J3NlbGVjdGVkPSJzZWxlY3RlZCInOicnKS4nIHZhbHVlPSInLiRjaWQuJyIgZGF0YS12YWw9IicuJGNpZC4nIj4nLiRjWyduYW1lJ10uJyAoJy4kY2lkLicpPC9vcHRpb24+JzsgfSB9IH0gfSByZXR1cm4gJHBnczsgfSBmdW5jdGlvbiBnZXRHcnBMaXN0KCRwZ0lEKXsgJGNrID0gJHRoaXMtPmNrOyAkcGdzID0gJyc7IGlmICghZW1wdHkoJGNrKSAmJiBpc19hcnJheSgkY2spKSB7IGZvcmVhY2ggKCRjayBhcyAkY2k9PiRjYykgeyBpZigkY2MtPm5hbWUgPT0nSlNFU1NJT05JRCcpICRjc3JmdCA9IHN0cl9yZXBsYWNlKCciJywnJywkY2MtPnZhbHVlKTt9ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbScsICdodHRwczovL3d3dy5saW5rZWRpbi5jb20nKTsgJGhkcnNBcnJbJ0NzcmYtVG9rZW4nXSA9ICRjc3JmdDsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2dyb3Vwcy9teS1ncm91cHMnLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgcmV0dXJuIGZhbHNlOyAkY2sgPSAkcmVwWydjb29raWVzJ107ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgJGNvbnRlbnRzID0gc3RyX2lyZXBsYWNlKCcqJywnJywkY29udGVudHMpOyBpZiAoc3RyaXBvcygkY29udGVudHMsICcmcXVvdDtlbGVtZW50cyZxdW90OzpbJnF1b3Q7dXJuOmxpOmZzX2dyb3VwJykhPT1mYWxzZSkgeyAkY3QgPSBzdHJfcmVwbGFjZSgnJnF1b3Q7JywnIicsJ3smcXVvdDtkYXRhJnF1b3Q7OnsmcXVvdDtlbGVtZW50cyZxdW90OzpbJnF1b3Q7dXJuOmxpOmZzX2dyb3VwJy5DdXRGcm9tVG8oJGNvbnRlbnRzLCAnJnF1b3Q7ZWxlbWVudHMmcXVvdDs6WyZxdW90O3VybjpsaTpmc19ncm91cCcsJ31dfScpLid9XX0nKTsgJGN0ID0ganNvbl9kZWNvZGUoJGN0LCB0cnVlKTsgaWYgKCFlbXB0eSgkY3QpICYmIGlzX2FycmF5KCRjdCkgJiYgIWVtcHR5KCRjdFsnaW5jbHVkZWQnXSkpIHsgJGN0ID0gJGN0WydpbmNsdWRlZCddOyBmb3JlYWNoICgkY3QgYXMgJGMpIGlmKCFlbXB0eSgkY1snZ3JvdXBVcm4nXSkmJiFlbXB0eSgkY1snbmFtZSddKSkgeyAkY2lkID0gZXhwbG9kZSgnOicsJGNbJ2dyb3VwVXJuJ10pOyAkY2lkID0gJGNpZFszXTsgaWYgKCFlbXB0eSgkY2lkKSkgJHBncyAuPSAnPG9wdGlvbiBjbGFzcz0ibnhzQmx1ZSIgJy4oKCRwZ0lEPT0kY2lkKT8nc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpLicgdmFsdWU9IicuJGNpZC4nIiBkYXRhLXZhbD0iJy4kY2lkLiciPicuJGNbJ25hbWUnXVsndGV4dCddLicgKCcuJGNpZC4nKTwvb3B0aW9uPic7IH0gfSB9IH0gcmV0dXJuICRwZ3M7IH0gZnVuY3Rpb24gZ2V0R3JwTGlzdFgoJHBnSUQpeyAkY2sgPSAkdGhpcy0+Y2s7ICRwZ3MgPSAnJzsgaWYgKCFlbXB0eSgkY2spICYmIGlzX2FycmF5KCRjaykpIHsgZm9yZWFjaCAoJGNrIGFzICRjaT0+JGNjKSB7IGlmKCRjYy0+bmFtZSA9PSdKU0VTU0lPTklEJykgJGNzcmZ0ID0gc3RyX3JlcGxhY2UoJyInLCcnLCRjYy0+dmFsdWUpO30gJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tJywgJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbScpOyAkaGRyc0FyclsnQ3NyZi1Ub2tlbiddID0gJGNzcmZ0OyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCdodHRwczovL3d3dy5saW5rZWRpbi5jb20vZ3JvdXBzL215LWdyb3VwcycsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSByZXR1cm4gZmFsc2U7ICRjb250ZW50cyA9ICRyZXBbJ2JvZHknXTsgaWYgKHN0cmlwb3MoJGNvbnRlbnRzLCAnImlkIjoiJykhPT1mYWxzZSkgeyAkdWlkID0gQ3V0RnJvbVRvKCRjb250ZW50cywgJyJpZCI6IicsICciJyk7IH0gJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tJywgJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbScsICdHRVQnLCB0cnVlKTsgJGhkcnNBcnJbJ0NzcmYtVG9rZW4nXSA9ICRjc3JmdDsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW11bml0aWVzLWFwaS92MS9jb21tdW5pdGllcy9tZW1iZXJzaGlwcy8nLiR1aWQuJz9wcm9qZWN0aW9uPUZVTEwmc29ydEJ5PVJFQ0VOVExZX0pPSU5FRCZjb3VudD01MDAnLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgcmV0dXJuIGZhbHNlOyAkY29udGVudHMgPSAkcmVwWydib2R5J107IGlmIChzdHJpcG9zKCRjb250ZW50cywgJyJtaW5pTWVtYmVyc2hpcCI6JykhPT1mYWxzZSkgeyAkY3QgPSBqc29uX2RlY29kZSgkY29udGVudHMsIHRydWUpOyBpZiAoIWVtcHR5KCRjdCkgJiYgaXNfYXJyYXkoJGN0KSAmJiAhZW1wdHkoJGN0WydkYXRhJ10pKSAkY3QgPSAkY3RbJ2RhdGEnXTsgZm9yZWFjaCAoJGN0IGFzICRjKSBpZiAoIWVtcHR5KCRjWydpZCddKXx8IWVtcHR5KCRjWydncm91cCddWydpZCddKSkgeyAkcGdzIC49ICc8b3B0aW9uIGNsYXNzPSJueHNHcmVlbiIgJy4oKCRwZ0lEPT0kY1snZ3JvdXAnXVsnaWQnXSB8fCAkcGdJRD09JGNbJ2lkJ10pPydzZWxlY3RlZD0ic2VsZWN0ZWQiJzonJykuJyB2YWx1ZT0iJy4kY1snZ3JvdXAnXVsnaWQnXS4nIiBkYXRhLXZhbD0iJy4kY1snaWQnXS4nIj4nLiRjWydncm91cCddWydtaW5pJ11bJ25hbWUnXS4nICgnLiRjWydncm91cCddWydpZCddLicpPC9vcHRpb24+JzsgfSB9IH0gcmV0dXJuICRwZ3M7IH0gZnVuY3Rpb24gcG9zdFRvUHVsc2UoJG1zZywgJHRpdGxlLCAkaHRtbCwgJGltZ1VSTCl7IGdsb2JhbCAkbnhzX3BsdXJsOyAkY2sgPSAkdGhpcy0+Y2s7IGZvcmVhY2ggKCRjayBhcyAkY2k9PiRjYykgeyBpZigkY2MtPm5hbWUgPT0nSlNFU1NJT05JRCcpICRjc3JmdCA9IHN0cl9yZXBsYWNlKCciJywnJywkY2MtPnZhbHVlKTt9ICRjayA9IG54c0NsbkNvb2tpZXMoJGNrKTsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tJywgJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbScsICdKU09OJyk7ICRoZHJzQXJyWydDc3JmLVRva2VuJ10gPSAkY3NyZnQ7ICRoZHJzQXJyWydBY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQsICovKjsgcT0wLjAxJzsgJGZsZHMgPSAneyJjdXN0b21QdWJsaXNoTWVzc2FnZSI6eyJ0ZXh0IjoiIn0sImF1dGhvcnMiOlsidXJuOmxpOm1lbWJlcjozMzM2OTg0NDgiXSwic3RhdGUiOiJEUkFGVCIsInRpdGxlIjoiUG9zdCBtZSAtICcubWljcm90aW1lKCkuJyIsImNvbnRlbnRIdG1sIjoiIn0nOyAkcFVSTCA9ICdodHRwczovL3d3dy5saW5rZWRpbi5jb20vdm95YWdlci9hcGkvcHVibGlzaGluZy9ub3JtRmlyc3RQYXJ0eUFydGljbGUnOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkZmxkcywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfcG9zdCgkcFVSTCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9ICdQdWxzZSBFcnJvcjogJy5wcmludF9yKCRyZXAsIHRydWUpOyByZXR1cm4gJGJhZE91dDsgfSBlbHNlaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXT09JzIwMScgJiYgIWVtcHR5KCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSkpICRwSUQgPSBzdWJzdHIoc3RycmNocigkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICIvIiksIDEpOyAkaHRtbCA9IHN0cl9pcmVwbGFjZSgnPC9wPicsJzwvcD48YnIvPicsc3RyX2lyZXBsYWNlKCc8L2Rpdj4nLCc8L2Rpdj48YnIvPicsJGh0bWwpKTsgJGh0bWwgPSBzdHJpcF90YWdzKCRodG1sLCAnPGk+PGI+PHN0cm9uZz48YnI+PGE+Jyk7ICRmbGRzID0ganNvbl9kZWNvZGUoJ3sicGF0Y2giOnsiJHNldCI6eyJjb250ZW50SHRtbCI6IiIsInZlcnNpb24iOjB9fX0nLCB0cnVlKTsgJGZsZHNbJ3BhdGNoJ11bJyRzZXQnXVsnY29udGVudEh0bWwnXSA9ICc8cD4nLiRodG1sLic8L3A+JzsgJGZsZHNbJ3BhdGNoJ11bJyRzZXQnXVsndGl0bGUnXSA9IG5zVHJuYyhzdHJpcF90YWdzKG5sMmJyKCR0aXRsZSkpLCAxNTApOyAkZmxkcyA9IGpzb25fZW5jb2RlKCRmbGRzLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTKTsgJGdVUkwgPSAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3ZveWFnZXIvYXBpL3B1Ymxpc2hpbmcvbm9ybUZpcnN0UGFydHlBcnRpY2xlLycuJHBJRDsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJGZsZHMsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX3Bvc3QoJGdVUkwsICRhZHZTZXQpOyAkcmVzID0ganNvbl9kZWNvZGUoJHJlcFsnYm9keSddLCB0cnVlKTsgaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXSE9JzIwMCcpIHJldHVybiAnUE9TVCBDb250ZW50IEVycm9yICgnLiRwSUQuJykgLSAnLnByaW50X3IoJHJlcCk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAnJywgJycsICR0aGlzLT5wcm94eSk7ICRpbWdEYXRhID0gbnhzX3JlbW90ZV9nZXQoJGltZ1VSTCwgJGFkdlNldCk7IGxpc3QoJHdpZHRoLCAkaGVpZ2h0KSA9IGdldGltYWdlc2l6ZSgkaW1nVVJMKTsgaWYoaXNfbnhzX2Vycm9yKCRpbWdEYXRhKSB8fCBlbXB0eSgkaW1nRGF0YVsnYm9keSddKSB8fCAoIWVtcHR5KCRpbWdEYXRhWydoZWFkZXJzJ11bJ2NvbnRlbnQtbGVuZ3RoJ10pICYmIChpbnQpJGltZ0RhdGFbJ2hlYWRlcnMnXVsnY29udGVudC1sZW5ndGgnXTwyMDApKSB7ICRvcHRpb25zWydhdHRjaEltZyddID0gMDsgJGJhZE91dFtdID0gJ0ltYWdlIEVycm9yOiBDb3VsZCBub3QgZ2V0IGltYWdlICgnLiRsbmtBcnJbJ2ltZyddLicpLCB3aWxsIHBvc3Qgd2l0aG91dCBpdCAtIEVycm9yOicucHJpbnRfcigkaW1nRGF0YSwgdHJ1ZSk7IH0gZWxzZSB7ICRmaWxlU2l6ZSA9ICRpbWdEYXRhWydoZWFkZXJzJ11bJ2NvbnRlbnQtbGVuZ3RoJ107ICRpbWdEYXRhID0gJGltZ0RhdGFbJ2JvZHknXTsgJGZsZHNJbWcgPSAneyJtZWRpYVVwbG9hZFR5cGUiOiJQVUJMSVNISU5HX0NPVkVSX0lNQUdFIiwiZmlsZVNpemUiOicuJGZpbGVTaXplLicsImZpbGVuYW1lIjoiNzMyMDZfb3JpZ2luYWwuanBnIn0nOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkZmxkc0ltZywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfcG9zdCgnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3ZveWFnZXIvYXBpL3ZveWFnZXJNZWRpYVVwbG9hZE1ldGFkYXRhP2FjdGlvbj11cGxvYWQnLCAkYWR2U2V0KTsgJGpqID0ganNvbl9kZWNvZGUoJHJlcFsnYm9keSddLCB0cnVlKTsgJGhkcnNBcnJbJ21lZGlhLXR5cGUtZmFtaWx5J10gPSAnU1RJTExJTUFHRSc7ICRoZHJzQXJyWydTZWMtRmV0Y2gtRGVzdCddID0gJ2VtcHR5JzsgJGhkcnNBcnJbJ0NvbnRlbnQtVHlwZSddID0gJ2ltYWdlL2pwZWcnOyAkaGRyc0FyclsnU2VjLUZldGNoLVNpdGUnXSA9ICdzYW1lLW9yaWdpbic7ICRoZHJzQXJyWydTZWMtRmV0Y2gtTW9kZSddID0gJ2NvcnMnOyB1bnNldCgkaGRyc0FyclsnWC1SZXF1ZXN0ZWQtV2l0aCddKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJGltZ0RhdGEsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX3Bvc3QoJGpqWyd2YWx1ZSddWydzaW5nbGVVcGxvYWRVcmwnXSwgJGFkdlNldCk7ICRhZHZTZXRbJ21ldGhvZCddID0gJ1BVVCc7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dFtdID0gJ0ltYWdlIEVycm9yOiAnLnByaW50X3IoJHJlcCwgdHJ1ZSk7IH0gaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXSE9JzIwMScpIHsgJGJhZE91dFtdID0gJ0ltYWdlIFVwbG9hZCBFcnJvcjogJy5wcmludF9yKCRyZXAsIHRydWUpOyB9ICRmbGRzID0gJ3sicGF0Y2giOnsiJHNldCI6eyJ2ZXJzaW9uIjoxLCJub3JtQ292ZXJNZWRpYSI6eyJjb20ubGlua2VkaW4udm95YWdlci5wdWJsaXNoaW5nLk5vcm1Db3ZlckltYWdlIjp7Im9yaWdpbmFsSW1hZ2UiOiInLiRqalsndmFsdWUnXVsndXJuJ10uJyIsImNyb3BwZWRJbWFnZSI6IicuJGpqWyd2YWx1ZSddWyd1cm4nXS4nIiwiY3JvcEluZm8iOnsieCI6MCwieSI6MCwid2lkdGgiOicuJHdpZHRoLicsImhlaWdodCI6Jy4kaGVpZ2h0Lid9fX19fX0nOyAkZ1VSTCA9ICdodHRwczovL3d3dy5saW5rZWRpbi5jb20vdm95YWdlci9hcGkvcHVibGlzaGluZy9ub3JtRmlyc3RQYXJ0eUFydGljbGUvJy4kcElEOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkZmxkcywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfcG9zdCgkZ1VSTCwgJGFkdlNldCk7ICRyZXMgPSBqc29uX2RlY29kZSgkcmVwWydib2R5J10sIHRydWUpOyBpZiAoJHJlcFsncmVzcG9uc2UnXVsnY29kZSddIT0nMjAwJykgcmV0dXJuICJJTUcgVVBMT0FEIEVycm9yIC0gIi5wcmludF9yKCRyZXApOyB9ICRmbGRzID0gJ3sidmlzaWJsZVRvQ29ubmVjdGlvbnNPbmx5IjpmYWxzZSwiY29tbWVudHNEaXNhYmxlZCI6ZmFsc2UsImV4dGVybmFsQXVkaWVuY2VQcm92aWRlcnMiOltdLCJjb21tZW50YXJ5Ijp7InRleHQiOiInLm5zVHJuYyhzdHJpcF90YWdzKCRtc2cpLCA3MDApLiciLCJhdHRyaWJ1dGVzIjpbXX0sIm9yaWdpbiI6IlBVQkxJU0hJTkciLCJtZWRpYSI6W3sibWVkaWFVcm4iOiJ1cm46bGk6bGlua2VkSW5BcnRpY2xlOicuJHBJRC4nIn1dfSc7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJzogaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3Bvc3QvZWRpdC8nLiRwSUQuJy8nLCAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tJywgJ0pTT04nKTsgJGhkcnNBcnJbJ0NzcmYtVG9rZW4nXSA9ICRjc3JmdDsgJGhkcnNBcnJbJ3gtcmVzdGxpLXByb3RvY29sLXZlcnNpb24nXSA9ICcyLjAuMCc7JGhkcnNBcnJbJ1NlYy1GZXRjaC1EZXN0J10gPSAnZW1wdHknOyAkaGRyc0FyclsnU2VjLUZldGNoLVNpdGUnXSA9ICdzYW1lLW9yaWdpbic7ICRoZHJzQXJyWydTZWMtRmV0Y2gtTW9kZSddID0gJ2NvcnMnOyAkaGRyc0FyclsnQWNjZXB0J10gPSAnYXBwbGljYXRpb24vdm5kLmxpbmtlZGluLm5vcm1hbGl6ZWQranNvbisyLjEnOyAkaGRyc0FyclsneC1saS10cmFjayddID0gJ3siY2xpZW50VmVyc2lvbiI6IjEuNi4qIiwib3NOYW1lIjoid2ViIiwidGltZXpvbmVPZmZzZXQiOi01LCJkZXZpY2VGb3JtRmFjdG9yIjoiREVTS1RPUCIsIm1wTmFtZSI6InZveWFnZXItd2ViIiwiZGlzcGxheURlbnNpdHkiOjEuNX0nOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkZmxkcywgJHRoaXMtPnByb3h5KTsgJHJlcCA9IG54c19yZW1vdGVfcG9zdCgnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3ZveWFnZXIvYXBpL2NvbnRlbnRjcmVhdGlvbi9ub3JtU2hhcmVzJywgJGFkdlNldCk7IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PScyMDEnICYmIHN0cmlwb3MoJHJlcFsnYm9keSddLCAnImFjdGlvblRhcmdldCI6Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9wdWxzZScpIT09ZmFsc2UgKSB7ICRwdXJsID0gJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9wdWxzZScuQ3V0RnJvbVRvKCRyZXBbJ2JvZHknXSwgJyJhY3Rpb25UYXJnZXQiOiJodHRwczovL3d3dy5saW5rZWRpbi5jb20vcHVsc2UnLCciJyk7IHJldHVybiBhcnJheSgnaXNQb3N0ZWQnPT4nMScsICdwb3N0SUQnPT4kcElELCAncG9zdFVSTCc9PiRwdXJsLCAncERhdGUnPT5kYXRlKCdZLW0tZCBIOmk6cycpLCAnY2snPT4kY2spOyB9IGVsc2UgcmV0dXJuICJBcnRpY2xlIFBvc3QgUHJvYmxlbTogIi5wcmludF9yKCRyZXAsIHRydWUpOyB9IGZ1bmN0aW9uIGdldENzcmYoJGNrKXtmb3JlYWNoICgkY2sgYXMgJGNpPT4kY2MpIHsgaWYoJGNjLT5uYW1lID09J0pTRVNTSU9OSUQnKSByZXR1cm4gc3RyX3JlcGxhY2UoJyInLCcnLCRjYy0+dmFsdWUpO319IGZ1bmN0aW9uIGFkalRleHQoJHR4dCl7cmV0dXJuIHN0cl9pcmVwbGFjZSgiXHIiLCcnLHN0cl9pcmVwbGFjZSgiXG4iLCdcbicsc3RyX3JlcGxhY2UoJyInLCdcIicsIG5zVHJuYyggc3RyaXBfdGFncygkdHh0KSw3MDApKSkpO30gZnVuY3Rpb24gdXJsSW5mb0JJKCR1cmwpIHsgJGNrID0gJHRoaXMtPmNrOyAkaGRyc0FyckEgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tLycpOyAkaGRyc0FyckFbJ0NzcmYtVG9rZW4nXSA9ICR0aGlzLT5nZXRDc3JmKCRjayk7ICRoZHJzQXJyQVsnQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyo7IHE9MC4wMSc7ICRoZHJzQXJyQVsnQWNjZXB0J10gPSAnYXBwbGljYXRpb24vdm5kLmxpbmtlZGluLm5vcm1hbGl6ZWQranNvbic7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyQSwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgJGxVcmwgPSAnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3ZveWFnZXIvYXBpL2ZlZWQvdXJscHJldmlldy8nLnVybGVuY29kZSgkdXJsKTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCRsVXJsLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gcHJpbnRfcigkcmVwLCB0cnVlKS4iIC0gRVJST1IiOyB9IGVsc2UgeyAkY29udGVudHMgPSBqc29uX2RlY29kZSgkcmVwWydib2R5J10sIHRydWUpOyBpZiAoaXNfYXJyYXkoJGNvbnRlbnRzKSAmJiAhZW1wdHkoJGNvbnRlbnRzWydzdGF0dXMnXSkgJiYgJGNvbnRlbnRzWydzdGF0dXMnXT09JzUwMCcgKSByZXR1cm4gJzUwMCc7IGlmIChpc19hcnJheSgkY29udGVudHMpICYmICFlbXB0eSgkY29udGVudHNbJ2luY2x1ZGVkJ10pICkgcmV0dXJuICRjb250ZW50c1snaW5jbHVkZWQnXTsgZWxzZSByZXR1cm4gIkVycm9yOiAiLiRiYWRPdXQ7IH0gfSBmdW5jdGlvbiB1cGxvYWRJbWFnZSgkaW1nVXJsLCAkY2speyAkaGRyc0Fycj1ueHNfbWFrZUhlYWRlcnMoJGltZ1VybCk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAnJywgJycsICR0aGlzLT5wcm94eSk7ICRpbWdEYXRhID0gbnhzX3JlbW90ZV9nZXQoJGltZ1VybCwgJGFkdlNldCk7IGlmKGlzX254c19lcnJvcigkaW1nRGF0YSkgfHwgZW1wdHkoJGltZ0RhdGFbJ2JvZHknXSkgfHwgKCFlbXB0eSgkaW1nRGF0YVsnaGVhZGVycyddWydjb250ZW50LWxlbmd0aCddKSAmJiAoaW50KSRpbWdEYXRhWydoZWFkZXJzJ11bJ2NvbnRlbnQtbGVuZ3RoJ108MjAwKSkgeyAkb3B0aW9uc1snYXR0Y2hJbWcnXSA9IDA7IHJldHVybiAnSW1hZ2UgRXJyb3I6IENvdWxkIG5vdCBnZXQgaW1hZ2UgKCcuJGltZ1VybC4nKSwgd2lsbCBwb3N0IHdpdGhvdXQgaXQgLSBFcnJvcjonLnByaW50X3IoJGltZ0RhdGEsIHRydWUpOyB9IGVsc2UgJGltZ0RhdGEgPSAkaW1nRGF0YVsnYm9keSddOyAkcGFyYW1zID0gIi0tLS0tLVdlYktpdEZvcm1GUWM3ZGJaRVxyXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCJmaWxlX25hbWVcIjsgZmlsZW5hbWU9XCJJTUdfMjg4OTguanBnXCJcclxuQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnXHJcblxyXG4iLiRpbWdEYXRhLiJcclxuLS0tLS0tV2ViS2l0Rm9ybUZRYzdkYlpFLS0iOyAkaXVybCA9ICdodHRwczovL3d3dy5saW5rZWRpbi5jb20vbXVwbGQvc2xpZGVzaGFyZS91cGxvYWQnOyAkaGRyc0FyciA9IG54c19tYWtlSGVhZGVycygnaHR0cDovL3d3dy5saW5rZWRpbi5jb20nLCAnaHR0cDovL3d3dy5saW5rZWRpbi5jb20nLCAnUE9TVCcsIHRydWUpOyB1bnNldCgkaGRyc0FyclsnQ29udGVudC1UeXBlJ10pOyAkaGRyc0FyclsnQ29udGVudC1UeXBlJ109J211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS1XZWJLaXRGb3JtRlFjN2RiWkUnOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAkcGFyYW1zLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9wb3N0KCRpdXJsLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0W10gPSAnSW1hZ2UgRXJyb3I6ICcucHJpbnRfcigkcmVwLCB0cnVlKTsgfSAkaW1nSUQgPSAnJzsgaWYgKHN0cmlwb3MoJHJlcFsnYm9keSddLCAnImZpbGVfa2V5IjoiJyk9PT1mYWxzZSkgcmV0dXJuICdJbWFnZSBFcnJvcjogJy5wcmludF9yKCRyZXAsIHRydWUpOyBlbHNlIHsgJGltZ0lEID0gQ3V0RnJvbVRvKCRyZXBbJ2JvZHknXSwgJyJmaWxlX2tleSI6IicsICciJyk7ICRvID0gQ3V0RnJvbVRvKCRyZXBbJ2JvZHknXSwgJyJvcmlnaW5hbCI6WycsICddJyk7ICRvID0gZXhwbG9kZSgnLCcsJG8pOyByZXR1cm4gYXJyYXkoJ2knPT4kaW1nSUQsICd3Jz0+JG9bMF0sICdoJz0+JG9bMV0pOyB9IH0gZnVuY3Rpb24gcG9zdCgkbXNnLCAkbG5rQXJyLCAkdG8peyBnbG9iYWwgJG54c19wbHVybDsgJHBvc3RGb3JtVHlwZSA9IDA7ICRpc0dycCA9IGZhbHNlOyAkY2sgPSAkdGhpcy0+Y2s7ICR0byA9IHV0ZjhfZW5jb2RlKCR0byk7ICRwYXJ0cyA9IHBhcnNlX3VybCgkdG8pOyAkaGRyc0Fyck0gPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tJywgJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbScsICdKU09OJywgdHJ1ZSk7ICRjSUQgPSBwcmVnX3JlcGxhY2UoIi9bXjAtOV0vIiwiIiwkdG8pOyBpZiAoc3RyaXBvcygkdG8sICdncm91cHMvJykhPT1mYWxzZSkgJHdoZXJlVG8gPSAnLCJjb250YWluZXJFbnRpdHkiOiJ1cm46bGk6Z3JvdXA6Jy4kY0lELiciJzsgZWxzZWlmIChzdHJpcG9zKCR0bywgJ2NvbXBhbnkvJykhPT1mYWxzZSkgJHdoZXJlVG8gPSAnLCJvcmdhbml6YXRpb25BY3RvciI6InVybjpsaTpjb21wYW55OicuJGNJRC4nIic7IGVsc2UgJHdoZXJlVG8gPSAnJzsgJHRvID0gJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS92b3lhZ2VyL2FwaS9jb250ZW50Y3JlYXRpb24vbm9ybVNoYXJlcyc7ICRtc2cgPSBzdHJfcmVwbGFjZSgiXG4iLCdcXG4nLCBzdHJfcmVwbGFjZSgiXHIiLCcnLHN0cl9yZXBsYWNlKCJcclxuIiwiXG4iLCRtc2cpKSk7ICRtc2cgPSBzdHJfcmVwbGFjZSgnIicsJ1wiJywkbXNnKTsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly93d3cubGlua2VkaW4uY29tJywgJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbScsICdKU09OJywgdHJ1ZSk7ICRtZWRpYSA9ICcnOyBmb3JlYWNoICgkY2sgYXMgJGNpPT4kY2MpIHsgaWYoJGNjLT5uYW1lID09J0pTRVNTSU9OSUQnKSAkaGRyc0FyclsnQ3NyZi1Ub2tlbiddID0gc3RyX3JlcGxhY2UoJyInLCcnLCRjYy0+dmFsdWUpO30gJGhkcnNBcnJbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCwgKi8qOyBxPTAuMDEnOyBpZiAoIWVtcHR5KCRsbmtBcnJbJ3Bvc3RUeXBlJ10pICYmICRsbmtBcnJbJ3Bvc3RUeXBlJ109PSdJJyAmJiAhZW1wdHkoJGxua0FyclsnaW1nJ10pKSB7ICR0eHQgPSBhcnJheSgndmFsdWVzJz0+YXJyYXkoKSk7ICR0eHRbJ3ZhbHVlcyddW10gPSBhcnJheSgndmFsdWUnPT4kbXNnKTsgJGltZ0FyciA9ICR0aGlzLT51cGxvYWRJbWFnZSgkbG5rQXJyWydpbWcnXSwgJGNrKTsgaWYgKCFpc19hcnJheSgkaW1nQXJyKSkgeyAkYmFkT3V0W10gPSAnSW1hZ2UgRXJyb3I6ICcuJGltZ0FycjsgfSBlbHNlIHsgJGltZ0lEID0gJGltZ0FyclsnaSddOyAkcnMgPSBmdW5jdGlvbl9leGlzdHMoIk5YU19ta1JhbmRvbVN0ciIpP05YU19ta1JhbmRvbVN0cigpOicxYzRhN2IzNjcwMTI0NzgzYjdiOWMxYjMzMGExYzk1Nyc7ICRtZWRpYSA9ICcsIm1lZGlhIjpbeyJtZWRpYVVybiI6InVybjpsaTpjb250ZW50OkpQRUcvSU1HLycuJHJzLiciLCJjYXRlZ29yeSI6IklNQUdFIiwidGh1bWJuYWlscyI6W3siY29tLmxpbmtlZGluLnZveWFnZXIuY29tbW9uLk1lZGlhUHJveHlJbWFnZSI6eyJpbWFnZVR5cGUiOiJtcGkiLCJ1cmwiOiJodHRwOi8vaW1hZ2Utc3RvcmUuc2xpZGVzaGFyZWNkbi5jb20vJy5zdHJfaXJlcGxhY2UoJy4nLCctb3JpZ2luYWwuJywkaW1nSUQpLiciLCJvcmlnaW5hbFdpZHRoIjonLihpbnQpKCRpbWdBcnJbJ3cnXSkuJywib3JpZ2luYWxIZWlnaHQiOicuKGludCkoJGltZ0FyclsnaCddKS4nfX1dfV0nOyB9IH0gZWxzZWlmICghZW1wdHkoJGxua0FyclsncG9zdFR5cGUnXSkgJiYgJGxua0FyclsncG9zdFR5cGUnXT09J0EnICYmICFlbXB0eSgkbG5rQXJyWyd1cmwnXSkpIHsgJGN4ID0gJHRoaXMtPnVybEluZm9CSSgkbG5rQXJyWyd1cmwnXSk7IGlmICghZW1wdHkoJGN4KSAmJiBpc19hcnJheSgkY3gpKSB7IGZvcmVhY2ggKCRjeCBhcyAkY2MpIGlmICghZW1wdHkoJGNjKSAmJiAhZW1wdHkoJGNjWydpZCddKSkgeyAkbGNudCA9ICRjYzsgYnJlYWs7IH0gaWYgKGlzX2FycmF5KCRsY250KSkgeyBpZiAoZW1wdHkoJGxjbnRbJ2Rlc2NyaXB0aW9uJ10pKSAkbGNudFsnZGVzY3JpcHRpb24nXSA9ICRsY250Wyd0aXRsZSddOyAkdGh1bWIgPSAoIWVtcHR5KCRjeFswXSkmJiFlbXB0eSgkY3hbMF1bJ3VybCddKSk/J3siY29tLmxpbmtlZGluLnZveWFnZXIuY29tbW9uLk1lZGlhUHJveHlJbWFnZSI6eyJ1cmwiOiInLiRjeFswXVsndXJsJ10uJyIsIm9yaWdpbmFsV2lkdGgiOicuJGN4WzBdWydvcmlnaW5hbFdpZHRoJ10uJywib3JpZ2luYWxIZWlnaHQiOicuJGN4WzBdWydvcmlnaW5hbFdpZHRoJ10uJ319JzonJzsgJG1lZGlhID0gJywibWVkaWEiOlt7Im1lZGlhVXJuIjoiJy4kbGNudFsndXJuJ10uJyIsIm9yaWdpbmFsVXJsIjoiJy4kbGNudFsndXJsJ10uJyIsInRodW1ibmFpbHMiOlsnLiR0aHVtYi4nXSwidGl0bGUiOnsidGV4dCI6IicuJHRoaXMtPmFkalRleHQoJGxjbnRbJ3RpdGxlJ10pLiciLCJhdHRyaWJ1dGVzIjpbXX0sImRlc2NyaXB0aW9uIjp7InRleHQiOiInLiR0aGlzLT5hZGpUZXh0KCRsY250WydkZXNjcmlwdGlvbiddKS4nIiwiYXR0cmlidXRlcyI6W119fV19JzsgfSB9fSAkZmxkcyA9ICd7ImV4dGVybmFsQXVkaWVuY2VQcm92aWRlcnMiOltdLCJ2aXNpYmxlVG9Db25uZWN0aW9uc09ubHkiOmZhbHNlLCJjb21tZW50YXJ5Ijp7InRleHQiOiInLiRtc2cuJyIsImF0dHJpYnV0ZXMiOltdfSwiY29tbWVudHNEaXNhYmxlZCI6ZmFsc2UnLiR3aGVyZVRvLiRtZWRpYS4nfSc7ICRoZHJzQXJyTVsnQWNjZXB0J10gPSAnYXBwbGljYXRpb24vdm5kLmxpbmtlZGluLm5vcm1hbGl6ZWQranNvbisyLjEnOyAkaGRyc0Fyck1bJ1gtTEktVHJhY2snXSA9ICd7ImNsaWVudFZlcnNpb24iOiIxLjIuNDE1NCIsIm9zTmFtZSI6IndlYiIsInRpbWV6b25lT2Zmc2V0IjotNSwiZGV2aWNlRm9ybUZhY3RvciI6IkRFU0tUT1AiLCJtcE5hbWUiOiJ2b3lhZ2VyLXdlYiJ9JzsgJGhkcnNBcnJNWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04JzsgJGhkcnNBcnJNWydYLVJlc3RMaS1Qcm90b2NvbC1WZXJzaW9uJ10gPSAnMi4wLjAnOyAkaGRyc0Fyck1bJ1gtTEktTGFuZyddID0gJ2VuX1VTJzsgZm9yZWFjaCAoJGNrIGFzICRjaT0+JGNjKSB7IGlmKCRjYy0+bmFtZSA9PSdKU0VTU0lPTklEJykgJGhkcnNBcnJNWydDc3JmLVRva2VuJ10gPSBzdHJfcmVwbGFjZSgnIicsJycsJGNjLT52YWx1ZSk7fSAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0Fyck0sICRjaywgJGZsZHMsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX3Bvc3QoJHRvLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgeyAkYmFkT3V0ID0gcHJpbnRfcigkcmVwLCB0cnVlKS4iIC0gRVJST1IiOyByZXR1cm4gJGJhZE91dDsgfSBpZiAoJHJlcFsncmVzcG9uc2UnXVsnY29kZSddPT0nNDA5JykgcmV0dXJuICJMaW5rZWRJbiBNZXNzYWdlOiBEdXBsaWNhdGUgcG9zdHMgYXJlIG5vdCBhbGxvd2VkLiI7IGlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PScyMDEnICYmIHN0cmlwb3MoJHJlcFsnYm9keSddLCAnInRvYXN0Q3RhVXJsIjoiJykhPT1mYWxzZSApIHsgJGN0ID0gJHJlcFsnYm9keSddOyAkcGlkID0gQ3V0RnJvbVRvKCRjdCwgJyJ1cm4iOiJ1cm46bGk6YWN0aXZpdHk6JywgJyInKTsgJHB1cmwgPSBDdXRGcm9tVG8oJGN0LCAnInRvYXN0Q3RhVXJsIjoiJywgJyInKTsgcmV0dXJuIGFycmF5KCdpc1Bvc3RlZCc9PicxJywgJ3Bvc3RJRCc9PiRwaWQsICdwb3N0VVJMJz0+JHB1cmwsICdwRGF0ZSc9PmRhdGUoJ1ktbS1kIEg6aTpzJyksICdjayc9PiRjayk7IH0gZWxzZWlmICgkcmVwWydyZXNwb25zZSddWydjb2RlJ109PScyMDAnICYmIHN0cmlwb3MoJHJlcFsnYm9keSddLCAnInJlc3BvbnNlU3RhdHVzIjoiQ1JFQVRFRCInKSE9PWZhbHNlICkgeyAkY3QgPSAkcmVwWydib2R5J107ICRwaWQgPSBDdXRGcm9tVG8oJGN0LCAnYWN0aXZpdHlJZCI6IicsICciJyk7ICRwdXJsID0gJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9ncm91cHMvJy4kY0lELicvJy4kcGlkOyByZXR1cm4gYXJyYXkoJ2lzUG9zdGVkJz0+JzEnLCAncG9zdElEJz0+JHBpZCwgJ3Bvc3RVUkwnPT4kcHVybCwgJ3BEYXRlJz0+ZGF0ZSgnWS1tLWQgSDppOnMnKSwgJ2NrJz0+JGNrKTsgfSBlbHNlaWYgKCRyZXBbJ3Jlc3BvbnNlJ11bJ2NvZGUnXT09JzIwMScgJiYgc3RyaXBvcygkcmVwWydib2R5J10sICcicGVybWFsaW5rIjoiJykhPT1mYWxzZSApIHsgJGN0ID0gJHJlcFsnYm9keSddOyAkcGlkID0gQ3V0RnJvbVRvKCRjdCwgJyJpZCI6ImFjdGl2aXR5OicsICciJyk7ICRwdXJsID0gQ3V0RnJvbVRvKCRjdCwgJyJwZXJtYWxpbmsiOiInLCAnIicpOyByZXR1cm4gYXJyYXkoJ2lzUG9zdGVkJz0+JzEnLCAncG9zdElEJz0+JHBpZCwgJ3Bvc3RVUkwnPT4kcHVybCwgJ3BEYXRlJz0+ZGF0ZSgnWS1tLWQgSDppOnMnKSwgJ2NrJz0+JGNrKTsgfSBlbHNlIHsgcmV0dXJuICJQb3N0IFByb2JsZW06ICIucHJpbnRfcigkcmVwLCB0cnVlKTsgfSB9IH19IGlmICghY2xhc3NfZXhpc3RzKCdueHNBUElfRlAnKSl7Y2xhc3MgbnhzQVBJX0ZQeyB2YXIgJGNrID0gYXJyYXkoKTsgdmFyICR0az0nJzsgdmFyICR1PScnOyB2YXIgJGRlYnVnID0gdHJ1ZTsgdmFyICRwcm94eSA9IGFycmF5KCk7IHZhciAkc2lkID0gJyc7IHZhciAkY3VpZCA9ICcnOyB2YXIgJGxjaCA9ICcnOyBmdW5jdGlvbiBoZWFkZXJzKCRyZWYsICRvcmc9JycsICRwb3N0PWZhbHNlLCAkYWo9ZmFsc2UpeyAkaGRyc0FyciA9IGFycmF5KCk7ICRoZHJzQXJyWydDYWNoZS1Db250cm9sJ109J21heC1hZ2U9MCc7ICRoZHJzQXJyWydDb25uZWN0aW9uJ109J2tlZXAtYWxpdmUnOyAkaGRyc0FyclsnUmVmZXJlciddPSRyZWY7ICRoZHJzQXJyWydVc2VyLUFnZW50J109J01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS81Ni4wLjI5MjQuODcgU2FmYXJpLzUzNy4zNic7IGlmKCRwb3N0PT09J2onKSAkaGRyc0FyclsnQ29udGVudC1UeXBlJ109J2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7IGVsc2VpZigkcG9zdD09PXRydWUpICRoZHJzQXJyWydDb250ZW50LVR5cGUnXT0nYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzsgaWYoJGFqPT09dHJ1ZSkgJGhkcnNBcnJbJ1gtUmVxdWVzdGVkLVdpdGgnXT0nWE1MSHR0cFJlcXVlc3QnOyBpZiAoJG9yZyE9JycpICRoZHJzQXJyWydPcmlnaW4nXT0kb3JnOyAkaGRyc0FyclsnQWNjZXB0J109J3RleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOCc7IGlmIChmdW5jdGlvbl9leGlzdHMoJ2d6ZGVmbGF0ZScpKSAkaGRyc0FyclsnQWNjZXB0LUVuY29kaW5nJ109J2d6aXAsZGVmbGF0ZSxzZGNoJzsgJGhkcnNBcnJbJ0FjY2VwdC1MYW5ndWFnZSddPSdlbi1VUyxlbjtxPTAuOCc7IHJldHVybiAkaGRyc0FycjsgfSBmdW5jdGlvbiBzZXRTZXNzaW9uKCl7IGlmICghZW1wdHkoJHRoaXMtPnNpZCkpIHsgaWYgKGVtcHR5KCR0aGlzLT5jaykpICR0aGlzLT5jayA9IGFycmF5KCk7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltGUF0gU2V0dGluZyBTZXNzaW9uLi4uPGJyLz5cclxuIjsgZm9yZWFjaCAoJHRoaXMtPmNrIGFzICRjaT0+JGNjKSB7IGlmICggJHRoaXMtPmNrWyRjaV0tPm5hbWU9PSdhY2Nlc3NfdG9rZW4nKSB1bnNldCgkdGhpcy0+Y2tbJGNpXSk7IGlmICggJHRoaXMtPmNrWyRjaV0tPm5hbWU9PSd1c2VyaWQnKSB1bnNldCgkdGhpcy0+Y2tbJGNpXSk7IH0gJGMgPSBuZXcgTlhTX0h0dHBfQ29va2llKCBhcnJheSgnbmFtZScgPT4gJ2FjY2Vzc190b2tlbicsICd2YWx1ZScgPT4gJHRoaXMtPnNpZCkgKTsgJHRoaXMtPmNrW10gPSAkYzsgJGMgPSBuZXcgTlhTX0h0dHBfQ29va2llKCBhcnJheSgnbmFtZScgPT4gJ3VzZXJpZCcsICd2YWx1ZScgPT4gJHRoaXMtPmN1aWQpICk7ICR0aGlzLT5ja1tdID0gJGM7IH0gfSBmdW5jdGlvbiBjaGVjaygkdT0nJyl7ICR0aGlzLT5zZXRTZXNzaW9uKCk7ICRjayA9ICR0aGlzLT5jazsgaWYgKCFlbXB0eSgkY2spICYmIGlzX2FycmF5KCRjaykpIHsgJHVzciA9ICdocmUnOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbRlBdIENoZWNraW5nIHVzZXIgIi4kdS4iLi4uPGJyLz5cclxuIjsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly9mbGlwYm9hcmQuY29tLycpOyAkaGRyc0FyclsnU2VjLUZldGNoLURlc3QnXSA9ICdkb2N1bWVudCc7ICRoZHJzQXJyWydTZWMtRmV0Y2gtU2l0ZSddID0gJ25vbmUnOyAkaGRyc0FyclsnU2VjLUZldGNoLU1vZGUnXSA9ICduYXZpZ2F0ZSc7ICRoZHJzQXJyWydTZWMtRmV0Y2gtVXNlciddID0gJz8xJzsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoICdodHRwczovL2ZsaXBib2FyZC5jb20vJywgJGFkdlNldCk7ICRjayA9IG54c19NZXJnZUNvb2tpZUFycigkcmVwWydjb29raWVzJ10sICRjayk7ICRoZHJzQXJyID0gJHRoaXMtPmhlYWRlcnMoJ2h0dHBzOi8vZmxpcGJvYXJkLmNvbS9wcm9maWxlJyk7ICRoZHJzQXJyWydTZWMtRmV0Y2gtRGVzdCddID0gJ2RvY3VtZW50JzsgJGhkcnNBcnJbJ1NlYy1GZXRjaC1TaXRlJ10gPSAnbm9uZSc7ICRoZHJzQXJyWydTZWMtRmV0Y2gtTW9kZSddID0gJ25hdmlnYXRlJzsgJGhkcnNBcnJbJ1NlYy1GZXRjaC1Vc2VyJ10gPSAnPzEnOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwkY2spOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoICdodHRwczovL2ZsaXBib2FyZC5jb20vcHJvZmlsZScsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSByZXR1cm4gZmFsc2U7IGlmICghZW1wdHkoJHJlcFsnYm9keSddKSYmc3RyaXBvcygkcmVwWydib2R5J10sJyJhdXRob3JVc2VybmFtZSI6IicpIT09ZmFsc2UpIHsgJHRoaXMtPmNrID0gJGNrOyByZXR1cm4gdHJ1ZTsgfSBlbHNlIHJldHVybiBmYWxzZTsgfX0gZnVuY3Rpb24gY29ubmVjdCgkdSwkcCl7IGlmICghJHRoaXMtPmNoZWNrKCR1KSl7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltGUF0gTk8gU2F2ZWQgRGF0YTsgTG9nZ2luZyBpbi4uLjxici8+XHJcbiI7ICR1cmwgPSAiIjsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnJyk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAnJywnJywkdGhpcy0+cHJveHksIDEpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJ2h0dHBzOi8vYXV0aC5mbGlwYm9hcmQuY29tL29hdXRoMi9sb2dpbicsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXApKSByZXR1cm4gIkVSUk9SICMxLjEgLSAiLnByaW50X3IoJHJlcCwgdHJ1ZSk7IGlmIChpc3NldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10pICYmIHN0cmlwb3MoJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddLCAnbG9naW5fY2hhbGxlbmdlJykhPT1mYWxzZSkgeyAkdGhpcy0+bGNoID0gQ3V0RnJvbVRvKCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXS4nfHwnLCAnbG9naW5fY2hhbGxlbmdlPScsICd8fCcpOyAkY2sgPSAkcmVwWydjb29raWVzJ107ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHksIDApOyAkY2h1cmwgPSAkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ107ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkY2h1cmwsICRhZHZTZXQpOyAkY2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJGNrLCAkcmVwWydjb29raWVzJ10pOyBpZiAoc3RyaXBvcygkcmVwWydib2R5J10sICdjc3JmLXRva2VuIiBjb250ZW50PSInKSE9PWZhbHNlKSAkY3QgPSBDdXRGcm9tVG8oJHJlcFsnYm9keSddLCAnY3NyZi10b2tlbiIgY29udGVudD0iJywnIicpOyAkZmxkcyA9ICd7InVzZXJuYW1lIjoiJy4kdS4nIiwicGFzc3dvcmQiOiInLiRwLiciLCJjaGFsbGVuZ2UiOiInLiR0aGlzLT5sY2guJyJ9JzsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygkY2h1cmwsICdodHRwczovL2F1dGguZmxpcGJvYXJkLmNvbScsICdqJywgdHJ1ZSk7ICRoZHJzQXJyWydDU1JGLVRva2VuJ10gPSAkY3Q7ICRoZHJzQXJyWydTZWMtRmV0Y2gtU2l0ZSddID0gJ3NhbWUtb3JpZ2luJzsgJGhkcnNBcnJbJ1NlYy1GZXRjaC1Nb2RlJ10gPSAnY29ycyc7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICRmbGRzLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9wb3N0KCdodHRwczovL2F1dGguZmxpcGJvYXJkLmNvbS9vYXV0aDIvYXBpL2xvZ2luJywgJGFkdlNldCk7IGlmIChzdHJpcG9zKCRyZXBbJ2JvZHknXSwgJyJyZWRpcmVjdFRvIjoiJykhPT1mYWxzZSkgJHJ1cmwgPSBDdXRGcm9tVG8oJHJlcFsnYm9keSddLCAnInJlZGlyZWN0VG8iOiInLCciJyk7IGVsc2UgcmV0dXJuICJMb2dpbiBCbG9jayBFcnJvciAtICIucHJpbnRfcigkcmVwWydib2R5J10sIHRydWUpOyB1bnNldCgkaGRyc0FyclsnQ1NSRi1Ub2tlbiddKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsICRjaywgJycsICR0aGlzLT5wcm94eSwgMCk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkcnVybCwgJGFkdlNldCk7IGlmICghZW1wdHkoJHJlcFsnY29va2llcyddKSkgeyAkY2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJGNrLCAkcmVwWydjb29raWVzJ10pOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwgJGNrLCAnJywgJHRoaXMtPnByb3h5KTsgfSBpZiAoaXNzZXQoJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddKSAmJiBzdHJpcG9zKCRyZXBbJ2hlYWRlcnMnXVsnbG9jYXRpb24nXSwgJ2NvbnNlbnRfY2hhbGxlbmdlJykhPT1mYWxzZSkgeyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddLCAkYWR2U2V0KTsgaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSB7ICRjayA9IG54c19NZXJnZUNvb2tpZUFycigkY2ssICRyZXBbJ2Nvb2tpZXMnXSk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyB9IGlmIChpc3NldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10pICYmIHN0cmlwb3MoJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddLCAnb2F1dGgyL2F1dGg/Y2xpZW50JykhPT1mYWxzZSkgeyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddLCAkYWR2U2V0KTsgaWYgKCFlbXB0eSgkcmVwWydjb29raWVzJ10pKSB7ICRjayA9IG54c19NZXJnZUNvb2tpZUFycigkY2ssICRyZXBbJ2Nvb2tpZXMnXSk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCAkY2ssICcnLCAkdGhpcy0+cHJveHkpOyB9IGlmIChpc3NldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10pICYmIHN0cmlwb3MoJHJlcFsnaGVhZGVycyddWydsb2NhdGlvbiddLCAnb2F1dGgyL3Rva2VuP2NvZGUnKSE9PWZhbHNlKSB7ICRyZXAgPSBueHNfcmVtb3RlX2dldCgkcmVwWydoZWFkZXJzJ11bJ2xvY2F0aW9uJ10sICRhZHZTZXQpOyBpZiAoc3RyaXBvcygkcmVwWydib2R5J10sICdGb3VuZCcpIT09ZmFsc2UpIHsgJGNrID0gbnhzX01lcmdlQ29va2llQXJyKCRjaywgJHJlcFsnY29va2llcyddKTsgJHRoaXMtPmNrID0gJGNrOyBmb3JlYWNoICgkY2sgYXMgJGMpIHsgaWYgKCRjLT5uYW1lPT0ndXNlcmlkJykgJHRoaXMtPmN1aWQgPSAkYy0+dmFsdWU7IHJldHVybiBmYWxzZTsgfSB9IGVsc2UgcmV0dXJuICJMb2dpbiBFcnJvciAjMi0gICIucHJpbnRfcigkcmVwWydoZWFkZXJzJ10sIHRydWUpOyB9IGVsc2UgcmV0dXJuICJMb2dpbiBFcnJvciAjMy0gIi5wcmludF9yKCRyZXAsIHRydWUpOyB9IGVsc2UgcmV0dXJuICJMb2dpbiBFcnJvciAjNC0gIi5wcmludF9yKCRyZXAsIHRydWUpOyB9IGVsc2UgcmV0dXJuICJMb2dpbiBFcnJvciAjNS0gIi5wcmludF9yKCRyZXAsIHRydWUpOyB9IGVsc2UgcmV0dXJuICJMb2dpbiBFcnJvciAjNi0gICIucHJpbnRfcigkcmVwLCB0cnVlKTsgfX0gZnVuY3Rpb24gcG9zdCgkcG9zdCl7ICRjayA9ICR0aGlzLT5jazsgJGhkcnNBcnIgPSAkdGhpcy0+aGVhZGVycygnaHR0cHM6Ly9mbGlwYm9hcmQuY29tJyk7ICRiYWRPdXQgPSBhcnJheSgpOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbRlBdIFBvc3RpbmcgdG8gdXNlciAiLiRwb3N0WydtZ3pVUkwnXS4iLi4uPGJyLz5cclxuIjsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsJGNrKTsgJHJlcCA9IG54c19yZW1vdGVfZ2V0KCRwb3N0WydtZ3pVUkwnXSwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlcCkpIHsgJGJhZE91dCA9IHByaW50X3IoJHJlcCwgdHJ1ZSkuIiAtIEVSUk9SIDEiOyByZXR1cm4gJGJhZE91dDsgfSBpZiAoc3RyaXBvcygkcmVwWydib2R5J10sICdpZD0iX2NzcmYiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IicpIT09ZmFsc2UpICRyVG9rID0gQ3V0RnJvbVRvKCRyZXBbJ2JvZHknXSwgJ2lkPSJfY3NyZiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iJywgJyInKTsgaWYgKHN0cmlwb3MoJHJlcFsnYm9keSddLCAnY3NyZi10b2tlbiIgY29udGVudD0iJykhPT1mYWxzZSkgJHJUb2sgPSBDdXRGcm9tVG8oJHJlcFsnYm9keSddLCAnY3NyZi10b2tlbiIgY29udGVudD0iJywgJyInKTsgJG1nVVJMID0gJ2h0dHBzOi8vZmxpcGJvYXJkLmNvbS9hcGkvdjIvc29jaWFsL3NoYXJlV2l0aENvbW1lbnQ/dXNlcmlkPScuJHRoaXMtPmN1aWQuJyZtYWdhemluZVVzZXJpZD0nLiR0aGlzLT5jdWlkLicmc2VydmljZT1mbGlwYm9hcmQnOyAkclRvayA9IHN0cl9yZXBsYWNlKCcmI3gyZjsnLCcvJywkclRvayk7IGlmIChlbXB0eSgkclRvaykpIHJldHVybiAiRXJyb3IgKE5vIFRva2VuKTogIi5zdHJpcF90YWdzKCRyZXBbJ2JvZHknXSk7IGlmIChzdHJpcG9zKCRyZXBbJ2JvZHknXSwgJywibWFnYXppbmVUYXJnZXQiOiInKSE9PWZhbHNlKSAkbWd6VHJnID0gQ3V0RnJvbVRvKCRyZXBbJ2JvZHknXSwgJywibWFnYXppbmVUYXJnZXQiOiInLCAnIicpOyBpZiAoIWVtcHR5KCRyZXBbJ2Nvb2tpZXMnXSkpIGZvcmVhY2ggKCRyZXBbJ2Nvb2tpZXMnXSBhcyAkY2NOKSB7ICRmZG4gPSBmYWxzZTsgZm9yZWFjaCAoJGNrIGFzICRjaT0+JGNjKSBpZiAoJGNjTi0+bmFtZSA9PSAkY2MtPm5hbWUpIHsgJGZkbiA9IHRydWU7ICRja1skY2ldID0gJGNjTjsgfSBpZiAoISRmZG4pICRja1tdID0gJGNjTjsgfSAkZmxkcyA9IGpzb25fZW5jb2RlKGFycmF5KCJ1cmwiPT4kcG9zdFsndXJsJ10sICd0YXJnZXQnPT4kbWd6VHJnLCAndGV4dCc9PiRwb3N0Wyd0ZXh0J10pLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTKTsgJGhkcnNBcnIgPSBueHNfbWFrZUhlYWRlcnMoJ2h0dHBzOi8vZmxpcGJvYXJkLmNvbScsICdodHRwczovL2ZsaXBib2FyZC5jb20nLCAnUE9TVCcsIHRydWUpOyAkaGRyc0FyclsnQ1NSRi1Ub2tlbiddID0gJHJUb2s7ICRoZHJzQXJyWydTZWMtRmV0Y2gtRGVzdCddID0gJ2VtcHR5JzsgJGhkcnNBcnJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nOyAkaGRyc0FyclsnU2VjLUZldGNoLVNpdGUnXSA9ICdzYW1lLW9yaWdpbic7ICRoZHJzQXJyWydTZWMtRmV0Y2gtTW9kZSddID0gJ2NvcnMnOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwkY2ssJGZsZHMpOyAkcmVzcG9uc2UgPSBueHNfcmVtb3RlX3Bvc3QoJG1nVVJMLCAkYWR2U2V0KTsgaWYgKHN0cmlwb3MoJHJlc3BvbnNlWydib2R5J10sICcic3VjY2VzcyI6dHJ1ZScpIT09ZmFsc2UpIHsgJHRpZCA9IEN1dEZyb21UbygkcmVzcG9uc2VbJ2JvZHknXSwgJyJpZCI6IicsICciJyk7IHJldHVybiBhcnJheSgncG9zdElEJz0+JHRpZCwgJ2lzUG9zdGVkJz0+MSwgJ3Bvc3RVUkwnPT4gJHBvc3RbJ21nelVSTCddLCAncERhdGUnPT5kYXRlKCdZLW0tZCBIOmk6cycpLCAnY2snPT4kY2spOyB9IGVsc2UgcmV0dXJuICJFcnJvciAoUG9zdCk6ICIuc3RyaXBfdGFncygkcmVzcG9uc2VbJ2JvZHknXSk7IH0gfX0gaWYgKCFjbGFzc19leGlzdHMoJ254c0FQSV9SRCcpKXtjbGFzcyBueHNBUElfUkR7IHZhciAkY2sgPSBhcnJheSgpOyB2YXIgJG1oPScnOyB2YXIgJHNyTGlzdD0nJzsgdmFyICR1PScnOyB2YXIgJHRrbiA9ICcnOyB2YXIgJGRlYnVnID0gZmFsc2U7IHZhciAkcHJveHkgPSBhcnJheSgpOyBmdW5jdGlvbiBjaGVjaygkdT0nJyl7ICRjayA9ICR0aGlzLT5jazsgaWYgKCFlbXB0eSgkY2spICYmIGlzX2FycmF5KCRjaykpIHsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1JEXSBDaGVja2luZyB1c2VyICIuJHUuIi4uLjxici8+XHJcbiI7ICRoZHJzQXJyID0gbnhzX2dldE5YU0hlYWRlcnMoJ2h0dHBzOi8vd3d3LnJlZGRpdC5jb20vcHJlZnMvdXBkYXRlLycpOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwkY2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVwID0gbnhzX3JlbW90ZV9nZXQoICdodHRwczovL3d3dy5yZWRkaXQuY29tL3ByZWZzL3VwZGF0ZS8nLCAkYWR2U2V0KTsgaWYgKGlzX254c19lcnJvcigkcmVwKSkgcmV0dXJuIGZhbHNlOyBpZiAoc3RyaXBvcygkcmVwWydib2R5J10sJyJsb2dnZWQiOiAiJykhPT1mYWxzZSkgeyAkdXNyID0gdHJpbShzdHJpcF90YWdzKEN1dEZyb21UbygkcmVwWydib2R5J10sICcibG9nZ2VkIjogIicsICciJykpKTsgJHRoaXMtPm1oID0gdHJpbShzdHJpcF90YWdzKEN1dEZyb21UbygkcmVwWydib2R5J10sICcibW9kaGFzaCI6ICInLCAnIicpKSk7IH0gZWxzZSByZXR1cm4gZmFsc2U7IGlmIChlbXB0eSgkdSkgfHwgJHU9PSR1c3IpIHJldHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfSBlbHNlIHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiBnZXRUa24oKXsgJGhkcnNBcnIgPSBueHNfZ2V0TlhTSGVhZGVycygnaHR0cHM6Ly93d3cucmVkZGl0LmNvbScpOyAkYWR2U2V0ID0gbnhzX21rUmVtT3B0c0FycigkaGRyc0FyciwkdGhpcy0+Y2ssICcnLCAkdGhpcy0+cHJveHkpOyAkcmVzcG9uc2UgPSBueHNfcmVtb3RlX2dldCggJ2h0dHBzOi8vd3d3LnJlZGRpdC5jb20vJywgJGFkdlNldCk7ICR0aGlzLT50a24gPSBzdHJpcG9zKCRyZXNwb25zZVsnYm9keSddLCcic2Vzc2lvbiI6eyJhY2Nlc3NUb2tlbiI6IicpIT09ZmFsc2U/Q3V0RnJvbVRvKCRyZXNwb25zZVsnYm9keSddLCAnInNlc3Npb24iOnsiYWNjZXNzVG9rZW4iOiInLCciJyk6Jyc7IH0gZnVuY3Rpb24gY29ubmVjdCgkdSwkcCl7ICRiYWRPdXQgPSAnRXJyb3I6ICc7IGlmICghJHRoaXMtPmNoZWNrKCR1KSl7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltSRF0gTk8gU2F2ZWQgRGF0YTsgTG9nZ2luZyBpbi4uLjxici8+XHJcbiI7ICR1cmwgPSAiaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9hcGkvbG9naW4vIi4kdTsgJGhkcnNBcnIgPSBueHNfZ2V0TlhTSGVhZGVycygnaHR0cHM6Ly93d3cucmVkZGl0LmNvbScpOyAkZmxkcyA9IGFycmF5KCdhcGlfdHlwZScgPT4gJ2pzb24nLCAndXNlcicgPT4gJHUsICdwYXNzd2QnID0+ICRwLCAnb3AnPT4nbG9naW4tbWFpbicsICdyZW0nPT4nb24nKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsJycsJGZsZHMsICR0aGlzLT5wcm94eSk7ICRyZXNwb25zZSA9IG54c19yZW1vdGVfcG9zdCggJHVybCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlc3BvbnNlKSkgeyAifEVSUk9SIFtMT0dJTiAwMV06Ii4kYmFkT3V0ID0gcHJpbnRfcigkcmVzcG9uc2UsIHRydWUpOyByZXR1cm4gJGJhZE91dDsgfSAkdGhpcy0+Y2sgPSAkcmVzcG9uc2VbJ2Nvb2tpZXMnXTsgZm9yZWFjaCggJHRoaXMtPmNrIGFzICRrZXkgPT4gJGNrKSBpZiAoaXNfb2JqZWN0KCRjaykgJiYgJGNrLT5uYW1lID09ICdyZWRkaXRfc2Vzc2lvbicpICR0aGlzLT5ja1ska2V5XS0+dmFsdWUgPSB1cmxlbmNvZGUoJGNrLT52YWx1ZSk7ICRyZXNwYiA9IGpzb25fZGVjb2RlKCRyZXNwb25zZVsnYm9keSddLCB0cnVlKTsgaWYgKCFpc19hcnJheSgkcmVzcGIpICYmIHN0cmlwb3MoJHJlc3BvbnNlWydib2R5J10sJzwvc3R5bGU+JykhPT1mYWxzZSkgcmV0dXJuIHN0cmlwX3RhZ3MoQ3V0RnJvbVRvKCRyZXNwb25zZVsnYm9keSddLic9PS18LT09JywgJzwvc3R5bGU+JywgJz09LXwtPT0nKSk7IGlmIChpc19hcnJheSgkcmVzcGJbJ2pzb24nXVsnZXJyb3JzJ10pICYmIGNvdW50KCRyZXNwYlsnanNvbiddWydlcnJvcnMnXSk+MCApIHsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1JEXSBMb2dpbiBGQUlMICMyPGJyLz5cclxuIjsgJGJhZE91dCA9ICJ8RVJST1IgW0xPR0lOIDAyXToiLnByaW50X3IoJHJlc3BiLCB0cnVlKTsgcmV0dXJuICRiYWRPdXQ7IH0gJGRhdGEgPSAkcmVzcGJbJ2pzb24nXVsnZGF0YSddOyAkdGhpcy0+bWggPSAkZGF0YVsnbW9kaGFzaCddOyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbUkRdIExvZ2luIE9LPGJyLz5cclxuIjsgcmV0dXJuIGZhbHNlOyB9IGVsc2UgeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbUkRdIFNhdmVkIERhdGEgaXMgT0s7PGJyLz5cclxuIjsgcmV0dXJuIGZhbHNlOyB9IH0gZnVuY3Rpb24gY29ubmVjdE5ld0Rlc2lnbigkdSwkcCl7ICRiYWRPdXQgPSAnRXJyb3I6ICc7IGlmICghJHRoaXMtPmNoZWNrKCR1KSl7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltSRF0gTk8gU2F2ZWQgRGF0YTsgTG9nZ2luZyBpbi4uLjxici8+XHJcbiI7ICR1MSA9ICdodHRwczovL3d3dy5yZWRkaXQuY29tL3N1YnJlZGRpdHMvbWluZS9tb2RlcmF0b3IvJzsgJHVybCA9ICJodHRwczovL3d3dy5yZWRkaXQuY29tL2xvZ2luLz9kZXN0PSIudXJsZW5jb2RlKCR1MSk7ICRoZHJzQXJyID0gbnhzX2dldE5YU0hlYWRlcnMoJ2h0dHBzOi8vd3d3LnJlZGRpdC5jb20nKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsJycsJycsICR0aGlzLT5wcm94eSk7ICRyZXAgPSBueHNfcmVtb3RlX2dldCggJHVybCwgJGFkdlNldCk7IGlmIChpc19hcnJheSgkcmVwKSAmJiAhZW1wdHkoJHJlcFsnYm9keSddKSkgeyAkdGhpcy0+Y2sgPSAkcmVwWydjb29raWVzJ107ICR0a24gPSBDdXRGcm9tVG8oJHJlcFsnYm9keSddLCduYW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iJyAsJyI+Jyk7ICRmbGRzID0gYXJyYXkoJ290cCcgPT4gJycsICd1c2VybmFtZScgPT4gJHUsICdwYXNzd29yZCcgPT4gJHAsICdjc3JmX3Rva2VuJz0+JHRrbiwnZGVzdCc9PiR1MSk7ICRoZHJzQXJyID0gbnhzX2dldE5YU0hlYWRlcnMoJHVybCk7ICRhZHZTZXQgPSBueHNfbWtSZW1PcHRzQXJyKCRoZHJzQXJyLCR0aGlzLT5jaywkZmxkcywgJHRoaXMtPnByb3h5KTsgJHJlc3BvbnNlID0gbnhzX3JlbW90ZV9wb3N0KCAnaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9sb2dpbicsICRhZHZTZXQpOyBpZiAoaXNfbnhzX2Vycm9yKCRyZXNwb25zZSkpIHsgInxFUlJPUiBbTE9HSU4gMDFdOiIuJGJhZE91dCA9IHByaW50X3IoJHJlc3BvbnNlLCB0cnVlKTsgcmV0dXJuICRiYWRPdXQ7IH0gJHRoaXMtPmNrID0gbnhzX01lcmdlQ29va2llQXJyKCR0aGlzLT5jaywgJHJlc3BvbnNlWydjb29raWVzJ10pOyAkcmVzcGIgPSBqc29uX2RlY29kZSgkcmVzcG9uc2VbJ2JvZHknXSwgdHJ1ZSk7IGZvcmVhY2goICR0aGlzLT5jayBhcyAka2V5ID0+ICRjaykgaWYgKGlzX29iamVjdCgkY2spICYmICRjay0+bmFtZSA9PSAncmVkZGl0X3Nlc3Npb24nKSAkdGhpcy0+Y2tbJGtleV0tPnZhbHVlID0gdXJsZW5jb2RlKCRjay0+dmFsdWUpOyBpZiAoIWVtcHR5KCRyZXNwYikgJiYgaXNfYXJyYXkoJHJlc3BiKSAmJiAhZW1wdHkoJHJlc3BiWydleHBsYW5hdGlvbiddKSkgeyBlY2hvICJbUkRdIExvZ2luIEZBSUwgIzEuMiAtICgiLiRyZXNwYlsnZXhwbGFuYXRpb24nXS4iKTxici8+XHJcbiI7ICRiYWRPdXQgPSAifEVSUk9SIFtMT0dJTiAxMDFdOiIucHJpbnRfcigkcmVzcGIsIHRydWUpOyByZXR1cm4gJGJhZE91dDsgfSBpZiAoIWVtcHR5KCRyZXNwYikgJiYgaXNfYXJyYXkoJHJlc3BiKSAmJiAhZW1wdHkoJHJlc3BiWydkZXN0J10pKSB7IGlmICgkdGhpcy0+ZGVidWcpIGVjaG8gIltSRF0gTG9naW4gT0s8YnIvPlxyXG4iOyByZXR1cm4gZmFsc2U7IH0gaWYgKGlzX2FycmF5KCRyZXNwYlsnanNvbiddWydlcnJvcnMnXSkgJiYgY291bnQoJHJlc3BiWydqc29uJ11bJ2Vycm9ycyddKT4wICkgeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbUkRdIExvZ2luIEZBSUwgIzI8YnIvPlxyXG4iOyAkYmFkT3V0ID0gInxFUlJPUiBbTE9HSU4gMDJdOiIucHJpbnRfcigkcmVzcGIsIHRydWUpOyByZXR1cm4gJGJhZE91dDsgfSB9IGVsc2Uge2VjaG8gIltSRF0gTG9naW4gRkFJTCAjMS4xPGJyLz5cclxuIjsgJGJhZE91dCA9ICJ8RVJST1IgW0xPR0lOIDEwMV06Ii5wcmludF9yKCRyZXAsIHRydWUpOyByZXR1cm4gJGJhZE91dDsgfSB9IGVsc2UgeyBpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICJbUkRdIFNhdmVkIERhdGEgaXMgT0s7PGJyLz5cclxuIjsgcmV0dXJuIGZhbHNlOyB9IH0gZnVuY3Rpb24gZ2V0U3ViUmVkZGl0cygkY3Vycj0nJyl7ICRoZHJzQXJyID0gbnhzX2dldE5YU0hlYWRlcnMoJ2h0dHBzOi8vd3d3LnJlZGRpdC5jb20nKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsJHRoaXMtPmNrLCAnJywgJHRoaXMtPnByb3h5KTsgJHJlc3BvbnNlID0gbnhzX3JlbW90ZV9nZXQoICdodHRwczovL3d3dy5yZWRkaXQuY29tL3N1YnJlZGRpdHMvbWluZS9tb2RlcmF0b3IvJywgJGFkdlNldCk7ICRjbnRGID0gJHJlc3BvbnNlWydib2R5J107ICRjbnQgPSBDdXRGcm9tVG8oJGNudEYsICc8ZGl2IGlkPSJzaXRlVGFibGUiJywgJzxkaXYgY2xhc3M9ImZvb3Rlci1wYXJlbnQiPicpOyAkc3JkcyA9ICcnOyAkY250QXJyID0gZXhwbG9kZSgnPHAgY2xhc3M9InRpdGxlcm93Ij4nLCRjbnQpOyBmb3JlYWNoICgkY250QXJyIGFzICR0eHQpIGlmIChzdHJpcG9zKCR0eHQsICdjbGFzcz0idGl0bGUiJykhPT1mYWxzZSkgeyAkYmlkID0gQ3V0RnJvbVRvKCR0eHQsICc6Ly93d3cucmVkZGl0LmNvbS9yLycsICcvIicpOyAkYm5hbWUgPSB0cmltKEN1dEZyb21UbygkdHh0LCAnY2xhc3M9InRpdGxlIiA+JywgJzwvYT4nKSk7IGlmIChpc3NldCgkYmlkKSkgJHNyZHMgLj0gJzxvcHRpb24gJy4oJGN1cnI9PSRiaWQ/J3NlbGVjdGVkPSJzZWxlY3RlZCInOicnKS4nIHZhbHVlPSInLiRiaWQuJyI+Jy50cmltKCRibmFtZSkuJzwvb3B0aW9uPic7IH0gJHUgPSBDdXRGcm9tVG8oJGNudEYsICdodHRwczovL3d3dy5yZWRkaXQuY29tL3VzZXIvJywgJy8nKTsgJHJlc3BvbnNlID0gbnhzX3JlbW90ZV9nZXQoICdodHRwczovL3d3dy5yZWRkaXQuY29tL3VzZXIvJy4kdS4nLycsICRhZHZTZXQpOyAkY250RiA9ICRyZXNwb25zZVsnYm9keSddOyBpZiAoc3RyaXBvcygkY250RiwnaHJlZj0iL3VzZXIvJy4kdS4nL3N1Ym1pdCI+JykhPT1mYWxzZSkgJHNyZHMgPSAnPG9wdGlvbiAnLigkY3Vycj09JGJpZD8nc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpLicgdmFsdWU9Ii91c2VyLycuJHUuJyI+UHJvZmlsZSAoL3VzZXIvJy4kdS4nKTwvb3B0aW9uPicuJHNyZHM7ICR0aGlzLT5zckxpc3QgPSAkc3JkczsgfSBmdW5jdGlvbiBwb3N0KCRtc2csICR0aXRsZSwgJHNyLCAkdXJsKXsgaWYgKCR0aGlzLT5kZWJ1ZykgZWNobyAiW1JEXSBQb3N0aW5nLi4uPGJyLz5cclxuIjsgJGhkcnNBcnIgPSBueHNfZ2V0TlhTSGVhZGVycygnaHR0cHM6Ly93d3cucmVkZGl0LmNvbScpOyBpZiAoZW1wdHkoJHRoaXMtPnRrbikpICR0aGlzLT5nZXRUa24oKTsgJHBvc3QgPSBhcnJheSgiYXBpX3R5cGUiPT4ianNvbiIsICJ0aXRsZSI9PiR0aXRsZSwgInNwb2lsZXIiPT4iZmFsc2UiLCAibnNmdyI9PiJmYWxzZSIsICJvcmlnaW5hbF9jb250ZW50Ij0+ImZhbHNlIiwgInBvc3RfY2F0ZWdvcnkiPT4iIiwgInBvc3RfdG9fdHdpdHRlciI9PiJmYWxzZSIsICJzZW5kcmVwbGllcyI9PiJ0cnVlIiwgInZhbGlkYXRlX29uX3N1Ym1pdCI9PiJ0cnVlIik7IGlmIChzdHJpcG9zKCRzciwnL3VzZXIvJykhPT1mYWxzZSkgeyAkcG9zdFsic3IiXT0ndV8nLkN1dEZyb21Ubygkc3IuJy8nLCcvdXNlci8nLCcvJyk7ICRwb3N0WyJzdWJtaXRfdHlwZSJdPSJwcm9maWxlIjsgfSBlbHNlIHskcG9zdFsic3IiXT0kc3I7ICRwb3N0WyJzdWJtaXRfdHlwZSJdPSJzdWJyZWRkaXQiO30gaWYgKCFlbXB0eSgkdXJsKSkgeyAkcG9zdFsndXJsJ10gPSAkdXJsOyAkcG9zdFsna2luZCddPSdsaW5rJzsgJHJldE51bSA9IDE2OyB9IGVsc2UgeyAkcG9zdFsncmljaHRleHRfanNvbiddID0gJ3siZG9jdW1lbnQiOlt7ImUiOiJwYXIiLCJjIjpbeyJlIjoidGV4dCIsInQiOiInLmFkZHNsYXNoZXMoJG1zZykuJyJ9XX1dfSc7ICRwb3N0WydraW5kJ109J3NlbGYnOyAkcmV0TnVtID0gMTA7IH0gJHVybCA9ICJodHRwczovL29hdXRoLnJlZGRpdC5jb20vYXBpL3N1Ym1pdD9yZXN1Ym1pdD10cnVlJnJlZGRpdFdlYkNsaWVudD1kZXNrdG9wMngmYXBwPWRlc2t0b3AyeC1jbGllbnQtcHJvZHVjdGlvbiZydGo9b25seSZyYXdfanNvbj0xJmdpbGRpbmdfZGV0YWlsPTEiOyAkaGRyc0FyclsnQXV0aG9yaXphdGlvbiddID0gJ0JlYXJlciAnLiR0aGlzLT50a247ICRoZHJzQXJyWyd4LXJlZGRpdC1zZXNzaW9uJ10gPSB1cmxkZWNvZGUobnhzX2dldENLVmFsKCdzZXNzaW9uX3RyYWNrZXInLCAkdGhpcy0+Y2spKTsgJGhkcnNBcnJbJ3gtcmVkZGl0LWxvaWQnXSA9IHVybGRlY29kZShueHNfZ2V0Q0tWYWwoJ2xvaWQnLCAkdGhpcy0+Y2spKTsgJGFkdlNldCA9IG54c19ta1JlbU9wdHNBcnIoJGhkcnNBcnIsJHRoaXMtPmNrLCAkcG9zdCwgJHRoaXMtPnByb3h5KTsgJGFkdlNldFsnZXh0ZW5zaW9uJ109J2pzb24nOyAkcmVzcG9uc2UgPSBueHNfcmVtb3RlX3Bvc3QoJHVybCwgJGFkdlNldCk7IGlmIChpc19ueHNfZXJyb3IoJHJlc3BvbnNlKSkgeyAkYmFkT3V0WydFcnJvciddID0gInxFUlJPUiBbUE9TVCAwMV06Ii5wcmludF9yKCRyZXNwb25zZSwgdHJ1ZSk7IHJldHVybiAkYmFkT3V0OyB9IGlmIChzdHJpcG9zKCRyZXNwb25zZVsnYm9keSddLCAnQkFEX0NBUFRDSEEnKSE9PWZhbHNlICkgeyAkYmFkT3V0WydFcnJvciddID0gJ0VSUk9SOiBQb3N0IFJlamVjdGVkLiBDQVBUQ0hBIFJlcXVpcmVkLiBSZWRkaXQgdGhpbmtzIHRoYXQgeW91IGRvblwndCBoYXZlIHJpZ2h0cyB0byBwb3N0IGhlcmUgd2l0aG91dCBDQVBUQ0hBLjxici8+PGEgaHJlZj0iaHR0cDovL254cy5meWkvZmFxNzIiIHRhcmdldD0iX2JsYW5rIj5QbGVhc2Ugc2VlIEZBUSAjNy4yPC9hPic7IHJldHVybiAkYmFkT3V0OyB9ICRySlNOID0ganNvbl9kZWNvZGUoJHJlc3BvbnNlWydib2R5J10sIHRydWUpOyBpZiAoZW1wdHkoJHJKU05bJ2pzb24nXVsnZXJyb3JzJ10pJiYhZW1wdHkoJHJKU05bJ2pzb24nXVsnZGF0YSddWydpZCddKSkgeyAkdGhpcy0+Y2sgPSBueHNfTWVyZ2VDb29raWVBcnIoJHRoaXMtPmNrLCAkcmVzcG9uc2VbJ2Nvb2tpZXMnXSk7IHJldHVybiBhcnJheSgncG9zdElEJz0+JHJKU05bJ2pzb24nXVsnZGF0YSddWydpZCddLCAnaXNQb3N0ZWQnPT4xLCAncG9zdFVSTCc9PiRySlNOWydqc29uJ11bJ2RhdGEnXVsndXJsJ10sICdwRGF0ZSc9PmRhdGUoJ1ktbS1kIEg6aTpzJykpOyB9IGVsc2UgeyAkYmFkT3V0WydFcnJvciddID0gJ3xFUlJPUiBbUE9TVCAwNV06ICcucHJpbnRfcigkcmVzcG9uc2UsIHRydWUpOyByZXR1cm4gJGJhZE91dDsgfSByZXR1cm4gJGJhZE91dDsgfSB9fSAgZ2xvYmFsICRueHNfYXBpTEluZm87JG54c19hcGlMSW5mbyAgPSBhcnJheSgiMSI9PidTTkFQIFBybyBXb3JkUHJlc3MgUGx1Z2luIChMaWZldGltZSBMaWNlbnNlKTogPGIgc3R5bGU9ImNvbG9yOiMwMDU4NTg7Ij5BY3RpdmU8L2I+Ozxici8+U05BUCBQcmVtaXVtIEFQSSBTZXJ2aWNlIChBbGwgTmV0d29ya3MpOiA8YiBzdHlsZT0iY29sb3I6I0ZGMDAwMDsiPkluYWN0aXZlOzwvYj4mbmJzcDs8YnIvPkdvb2dsZSsgYW5kIFBpbnRlcmVzdCBBUEkgTGlicmFyeTogPGIgc3R5bGU9ImNvbG9yOiMwMDU4NTg7Ij5BY3RpdmU8L2I+IChPbmUgdGltZSBQYXltZW50IC0gTGlmZXRpbWUgTGljZW5zZSBQcm9tbyknLCIyIj0+JycsICJub0lHIj0+dHJ1ZSk7IA==', `autoload` = 'no' WHERE `option_name` = '__plugins_cache_242'

WordPress database error: [INSERT command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_nxs_log']
INSERT INTO `osg_nxs_log` (`date`, `act`, `type`, `nt`, `nttype`, `flt`, `uid`, `msg`, `extInfo`) VALUES ('2020-04-07 12:36:56', 'SYSTEM NOTICE', 'API', 'A', '', 'snap', '0', '--==## API UPDATED SUCCESSFULLY ##==--', ' (REQ: Array\n(\n [ud] => https://www.wordsinthebucket.com\n [uv] => 1.5.9\n [pv] => 4.3.10\n [lk] => 742156f9a77e52ebe94a48389e6d4a71\n [ukver] => 4.3.3 [ID:10858]\n [w] => b|L:1586255814|C:1586255814\n)\n|Array\n(\n [headers] => Array\n (\n [server] => nginx/1.12.2\n [date] => Tue, 07 Apr 2020 10:36:55 GMT\n [content-type] => text/html; charset=UTF-8\n [transfer-encoding] => chunked\n [connection] => keep-alive\n [vary] => Accept-Encoding\n [nxs-ctrl] => ok\n [nxs-us] => a:2:{i:0;s:29:\"http://35.184.36.171/nxs2.php\";i:1;s:36:\"https://www.nextscripts.com/nxs2.php\";}\n [nxs-vc] => 4.3.3\n [nxs-vs] => 4.4.55\n [nxs-ver] => 4.4.55 [ID:10858]\n [nxs-date] => 2020-04-07\n [nxs-time] => 10:36:55\n [x-powered-by] => 4.4.55 [ID:10858]\n [x-frame-options] => SAMEORIGIN\n [content-encoding] => gzip\n )\n\n [response] => Array\n (\n [code] => 200\n [message] => OK\n )\n\n [cookies] => Array\n (\n )\n\n)\n) ==--')

WordPress database error: [UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
UPDATE `osg_options` SET `option_value` = '1586255816', `autoload` = 'no' WHERE `option_name` = 'nxs_lBckTime'

WordPress database error: [INSERT, UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
INSERT INTO `osg_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_doing_cron', '1586255816.1895189285278320312500', 'yes') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)

WordPress database error: [INSERT, UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
INSERT INTO `osg_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_timeout__siteground_optimizer_installing', '1586256117', 'no') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)

WordPress database error: [INSERT, UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
INSERT INTO `osg_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient__siteground_optimizer_installing', '1', 'no') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)

WordPress database error: [DELETE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_statistics_useronline']
DELETE FROM `osg_statistics_useronline` WHERE timestamp < 1586262987

WordPress database error: [UPDATE command denied to user 'wordsin0_wp124'@'localhost' for table 'osg_options']
UPDATE `osg_options` SET `option_value` = '1586263017' WHERE `option_name` = 'wp_statistics_check_useronline'


Warning: Cannot modify header information - headers already sent by (output started at /home/wordsin0/public_html/wp-includes/wp-db.php:1499) in /home/wordsin0/public_html/wp-content/plugins/sg-cachepress/core/Supercacher/Supercacher_Helper.php on line 77
Virginia Vigliar
Virginia Vigliar

Virginia Vigliar

Virginia is a freelance journalist and editor based in Barcelona, consults for Oxfam in Spain and the Netherlands, and she is the Chief Editor of WIB. She is a passionate advocate of human rights and freedom of speech. And a meme enthusiast. She has worked in the development sector in Malawi and Kenya and Somalia before returning to Europe, where she gained experience in the United Kingdom, Norway, and Spain. To see her work, look at her website here: http://virginiavigliar.com/
  • Antibalas: Who is this America Dem Speak Of Today?

    It is early in the morning in Centre County, Pennsylvania, when my interview with Martin Perna, Founder of Afrobeat group Antibalas, begins. Perna is relaxed, a little tired from the early wake-up call, and he has a lot to say. “The group has become something of...
  • Is the future of AI inclusive?

    “The idea is that we are building our own MIT here,” says Roya Mahboob, founder of Digital Citizen fund, and one of the first Afghan women to become CEO of a tech company in the country. The project she is referring to is something she has envisioned...
  • Music in Exile

    “I am sorry if you don’t understand what we are saying in our songs, I will try and explain”, said Aliou Tourè, lead singer of Malian band Songhoy Blues, mid-concert in Sala Bikini in Barcelona, less than a month ago.  The atmosphere in the room was festive,...
  • Korea Blues- J.B. Lenoir

    J.B Lenoir was one of the protagonists of the Chicago blues scene of the 50s and 60s. His zebra patterned suit, and high-pitched voice could be recognised for miles. Born in Tilton, Mississippi, Lenoir started playing when he was “awful young” as he said in an interview...
  • Linaje Originarios- Condor Pasa

    Emberà is a language that is spoken by approximately 80,000 people. It is an indigenous language of Colombia and Panama and like many indigenous languages, it is in danger. Preserving culture and language is a fundamental part of maintaining a diverse cultural heritage. Progression and technology...
  • First We Take Manhattan – Leonard Cohen

    This has been an incredibly tough week. Donald Trump’s winning of the US elections against Hilary Clinton has been a shock for the whole world, and now we all stand powerless, unable to take this back. As the world tries to figure out a way to...
  • Mississippi Goddam- Nina Simone

    “You don’t have to live next to me Just give me my equality” Racial discrimination is a problem of the present. With the Republican presidential candidate Donald Trump filling our tv screens and newspapers with racist remarks and comments, and as police violence towards black people...
  • Mona Ki Ngi Xica – Bonga

    ‘Mona Ki Ngi Xica’ is part of Angolan artist Bonga’s album Angola 72, one of the most powerful and influential protest albums ever recorded. The album was smuggled into Angola and Portugal, and was a soundtrack for revolutionaries fighting for independence as the Portuguese dictatorship and colonial...
  • Boloko (Circumcision) – Fatoumata Diawara

    Born in Cote D’Ivoire to Malian parents, at 32 years old, Fatoumata Diawara is a force of nature. She escaped a restrictive environment in her family and at 20 years of age she moved to Paris to pursue a career in music and theatre. Although she...
  • Delivering Truth in Sudan

    In a  recent article about Independent Journalism, Libyan Freelance Journalist Ayat Mneina said in a that she was driven by one idea: that the truth would speak for itself and she simply had to deliver the facts. When working in a risky environment, many journalists are...
  • Ghanian Animal Farm

    Seemingly a children’s story, which is what the artist claimed to get out of an interrogation, Ebi Te Yie is in fact charged with political meaning. By the time Nana Kwame Ampadu, leader of the African Brothers Band, released this song, its genre, Highlife had been established in Ghana...
  • Latinoamèrica- Calle 13

    Released in 2011 by Calle 13 an alternative hip-hop music band famous for its songs filled with political and social consciousness ideas, Latinoamérica is inspired by a journey that two of the founders of the band took through the continent.  The song was released as a...
  • Time Will Crawl- David Bowie

    On Sunday 10th January 2016, the world lost one of music’s icon.  David Bowie fought an 18 months long battle with cancer, and lost at the age of 69. He was one of the most influential musicians of this era, a man who was flamboyant to say...
  • Zombie – Fela Kuti

    Zombie is not Fela Kuti’s only song with a political meaning. On the contrary, Fela was a political activist who used music as his weapon against the Nigerian government’s authoritarian line and the lack of freedom in his country. This is a song that marked the beginning of a dark...
  • Blackfella/Whitefella- Warumpi Band

    In 1980, Australian musician Neil Murray  moved to the Aboriginal community of Papunya in Australia, where he worked as a teacher. Here, Murray met local brothers Gordon  and Sammy Tjapanangka of the Luritja people, and they were joined by Sammy’s brother-in-law George Rrurrambu Burarrwanga from the  Yolngu people. Murray provided...
About us

Words In The Bucket is a team of global citizens with the common goal of raising awareness and information about issues related to human rights protection, social inclusion, development and environment.

We are "Rethinking World Thinking"

Subscribe