SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_component` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_admin_event` TINYINT(1) NOT NULL DEFAULT 0,
	`add_backup_folder_path` TINYINT(1) NOT NULL DEFAULT 0,
	`add_css_admin` TINYINT(1) NOT NULL DEFAULT 0,
	`add_css_site` TINYINT(1) NOT NULL DEFAULT 0,
	`add_email_helper` TINYINT(1) NOT NULL DEFAULT 0,
	`add_git_folder_path` TINYINT(1) NOT NULL DEFAULT 0,
	`add_javascript` TINYINT(1) NOT NULL DEFAULT 0,
	`add_jcb_powers_path` TINYINT(1) NOT NULL DEFAULT 0,
	`add_license` TINYINT(1) NOT NULL DEFAULT 0,
	`add_menu_prefix` CHAR(1) NOT NULL DEFAULT '',
	`add_namespace_prefix` CHAR(1) NOT NULL DEFAULT '',
	`add_php_helper_admin` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_helper_both` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_helper_site` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_method_install` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_method_uninstall` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_postflight_install` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_postflight_update` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_preflight_install` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_preflight_update` TINYINT(1) NOT NULL DEFAULT 0,
	`add_placeholders` TINYINT(1) NOT NULL DEFAULT 0,
	`add_powers` TINYINT(1) NOT NULL DEFAULT 1,
	`add_sales_server` TINYINT(1) NOT NULL DEFAULT 0,
	`add_site_event` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sql` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sql_uninstall` TINYINT(1) NOT NULL DEFAULT 0,
	`add_update_server` TINYINT(1) NOT NULL DEFAULT 0,
	`addcontributors` TEXT NOT NULL,
	`addfootable` TINYINT(1) NOT NULL DEFAULT 0,
	`addreadme` TINYINT(1) NOT NULL DEFAULT 0,
	`adduikit` TINYINT(1) NOT NULL DEFAULT 0,
	`assets_table_fix` TINYINT(1) NOT NULL DEFAULT 3,
	`author` VARCHAR(255) NOT NULL DEFAULT '',
	`backup_folder_path` VARCHAR(255) NOT NULL DEFAULT '',
	`bom` CHAR(64) NOT NULL DEFAULT '',
	`buildcomp` TINYINT(1) NOT NULL DEFAULT 0,
	`buildcompsql` MEDIUMTEXT NOT NULL,
	`companyname` CHAR(64) NOT NULL DEFAULT '',
	`component_version` CHAR(64) NOT NULL DEFAULT '',
	`copyright` VARCHAR(255) NOT NULL DEFAULT '',
	`created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
	`creatuserhelper` TINYINT(1) NOT NULL DEFAULT 0,
	`crowdin_account_api_key` TEXT NOT NULL,
	`crowdin_project_api_key` TEXT NOT NULL,
	`crowdin_project_identifier` VARCHAR(255) NOT NULL DEFAULT '',
	`crowdin_username` TEXT NOT NULL,
	`css_admin` TEXT NOT NULL,
	`css_site` TEXT NOT NULL,
	`dashboard` VARCHAR(64) NOT NULL DEFAULT '',
	`dashboard_type` TINYINT(1) NOT NULL DEFAULT 1,
	`debug_linenr` TINYINT(1) NOT NULL DEFAULT 0,
	`description` TEXT NULL,
	`email` VARCHAR(255) NOT NULL DEFAULT '',
	`emptycontributors` TINYINT(1) NOT NULL DEFAULT 0,
	`export_buy_link` VARCHAR(255) NOT NULL DEFAULT '',
	`export_key` TEXT NOT NULL,
	`git_folder_path` VARCHAR(255) NOT NULL DEFAULT '',
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`image` VARCHAR(255) NOT NULL DEFAULT '',
	`javascript` TEXT NOT NULL,
	`jcb_powers_path` VARCHAR(255) NOT NULL DEFAULT '',
	`joomla_source_link` VARCHAR(255) NOT NULL DEFAULT '',
	`license` VARCHAR(255) NOT NULL DEFAULT '',
	`license_type` TINYINT(1) NOT NULL DEFAULT 0,
	`menu_prefix` VARCHAR(100) NOT NULL DEFAULT '',
	`modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
	`mvc_versiondate` TINYINT(1) NOT NULL DEFAULT 0,
	`name` CHAR(64) NOT NULL DEFAULT '',
	`name_code` VARCHAR(255) NOT NULL DEFAULT '',
	`namespace_prefix` VARCHAR(255) NOT NULL DEFAULT '',
	`number` INT(11) NOT NULL DEFAULT 0,
	`php_admin_event` MEDIUMTEXT NOT NULL,
	`php_helper_admin` MEDIUMTEXT NOT NULL,
	`php_helper_both` MEDIUMTEXT NOT NULL,
	`php_helper_site` MEDIUMTEXT NOT NULL,
	`php_method_install` MEDIUMTEXT NOT NULL,
	`php_method_uninstall` MEDIUMTEXT NOT NULL,
	`php_postflight_install` MEDIUMTEXT NOT NULL,
	`php_postflight_update` MEDIUMTEXT NOT NULL,
	`php_preflight_install` MEDIUMTEXT NOT NULL,
	`php_preflight_update` MEDIUMTEXT NOT NULL,
	`php_site_event` MEDIUMTEXT NOT NULL,
	`preferred_joomla_version` INT(11) NOT NULL DEFAULT 3,
	`readme` TEXT NOT NULL,
	`remove_line_breaks` TINYINT(1) NOT NULL DEFAULT 0,
	`sales_server` INT(11) NOT NULL DEFAULT 0,
	`short_description` VARCHAR(255) NOT NULL DEFAULT '',
	`sql` MEDIUMTEXT NOT NULL,
	`sql_uninstall` MEDIUMTEXT NOT NULL,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`toignore` TEXT NOT NULL,
	`translation_tool` TINYINT(1) NOT NULL DEFAULT 0,
	`update_server` INT(11) NOT NULL DEFAULT 0,
	`update_server_target` TINYINT(1) NOT NULL DEFAULT 0,
	`update_server_url` VARCHAR(255) NOT NULL DEFAULT '',
	`website` CHAR(255) NOT NULL DEFAULT '',
	`whmcs_buy_link` VARCHAR(255) NOT NULL DEFAULT '',
	`whmcs_key` VARCHAR(255) NOT NULL DEFAULT '',
	`whmcs_url` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	`metakey` TEXT,
	`metadesc` TEXT NOT NULL,
	`metadata` TEXT NOT NULL,
	PRIMARY KEY  (`id`),
	KEY `idx_system_name` (`system_name`),
	KEY `idx_name_code` (`name_code`),
	KEY `idx_remove_line_breaks` (`remove_line_breaks`),
	KEY `idx_debug_linenr` (`debug_linenr`),
	KEY `idx_mvc_versiondate` (`mvc_versiondate`),
	KEY `idx_addreadme` (`addreadme`),
	KEY `idx_add_placeholders` (`add_placeholders`),
	KEY `idx_add_backup_folder_path` (`add_backup_folder_path`),
	KEY `idx_translation_tool` (`translation_tool`),
	KEY `idx_add_license` (`add_license`),
	KEY `idx_license_type` (`license_type`),
	KEY `idx_add_powers` (`add_powers`),
	KEY `idx_add_sales_server` (`add_sales_server`),
	KEY `idx_add_jcb_powers_path` (`add_jcb_powers_path`),
	KEY `idx_add_php_helper_admin` (`add_php_helper_admin`),
	KEY `idx_add_admin_event` (`add_admin_event`),
	KEY `idx_add_php_helper_site` (`add_php_helper_site`),
	KEY `idx_add_site_event` (`add_site_event`),
	KEY `idx_add_namespace_prefix` (`add_namespace_prefix`),
	KEY `idx_add_javascript` (`add_javascript`),
	KEY `idx_namespace_prefix` (`namespace_prefix`),
	KEY `idx_add_css_admin` (`add_css_admin`),
	KEY `idx_add_css_site` (`add_css_site`),
	KEY `idx_add_menu_prefix` (`add_menu_prefix`),
	KEY `idx_menu_prefix` (`menu_prefix`),
	KEY `idx_add_php_preflight_install` (`add_php_preflight_install`),
	KEY `idx_add_php_preflight_update` (`add_php_preflight_update`),
	KEY `idx_add_php_postflight_install` (`add_php_postflight_install`),
	KEY `idx_add_php_postflight_update` (`add_php_postflight_update`),
	KEY `idx_add_php_method_uninstall` (`add_php_method_uninstall`),
	KEY `idx_add_php_method_install` (`add_php_method_install`),
	KEY `idx_add_sql` (`add_sql`),
	KEY `idx_add_sql_uninstall` (`add_sql_uninstall`),
	KEY `idx_assets_table_fix` (`assets_table_fix`),
	KEY `idx_add_update_server` (`add_update_server`),
	KEY `idx_emptycontributors` (`emptycontributors`),
	KEY `idx_update_server_target` (`update_server_target`),
	KEY `idx_add_git_folder_path` (`add_git_folder_path`),
	KEY `idx_creatuserhelper` (`creatuserhelper`),
	KEY `idx_adduikit` (`adduikit`),
	KEY `idx_addfootable` (`addfootable`),
	KEY `idx_add_email_helper` (`add_email_helper`),
	KEY `idx_add_php_helper_both` (`add_php_helper_both`),
	KEY `idx_guid` (`guid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_class_helper` TINYINT(1) NOT NULL DEFAULT 0,
	`add_class_helper_header` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_method_uninstall` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_postflight_install` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_postflight_update` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_preflight_install` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_preflight_uninstall` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_preflight_update` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_script_construct` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sales_server` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sql` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sql_uninstall` TINYINT(1) NOT NULL DEFAULT 0,
	`add_update_server` TINYINT(1) NOT NULL DEFAULT 0,
	`addreadme` TINYINT(1) NOT NULL DEFAULT 0,
	`class_helper_code` MEDIUMTEXT NOT NULL,
	`class_helper_header` TEXT NOT NULL,
	`custom_get` TEXT NOT NULL,
	`default` MEDIUMTEXT NOT NULL,
	`description` TEXT NULL,
	`fields` TEXT NOT NULL,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`libraries` TEXT NOT NULL,
	`mod_code` TEXT NOT NULL,
	`module_version` CHAR(64) NOT NULL DEFAULT '',
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`php_method_uninstall` MEDIUMTEXT NOT NULL,
	`php_postflight_install` MEDIUMTEXT NOT NULL,
	`php_postflight_update` MEDIUMTEXT NOT NULL,
	`php_preflight_install` MEDIUMTEXT NOT NULL,
	`php_preflight_uninstall` MEDIUMTEXT NOT NULL,
	`php_preflight_update` MEDIUMTEXT NOT NULL,
	`php_script_construct` MEDIUMTEXT NOT NULL,
	`readme` TEXT NOT NULL,
	`sales_server` INT(11) NOT NULL DEFAULT 0,
	`snippet` INT(11) NOT NULL DEFAULT 0,
	`sql` MEDIUMTEXT NOT NULL,
	`sql_uninstall` MEDIUMTEXT NOT NULL,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`target` TINYINT(1) NOT NULL DEFAULT 0,
	`update_server` INT(11) NOT NULL DEFAULT 0,
	`update_server_target` TINYINT(1) NOT NULL DEFAULT 0,
	`update_server_url` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_system_name` (`system_name`),
	KEY `idx_add_php_method_uninstall` (`add_php_method_uninstall`),
	KEY `idx_add_php_postflight_update` (`add_php_postflight_update`),
	KEY `idx_add_php_postflight_install` (`add_php_postflight_install`),
	KEY `idx_add_php_preflight_uninstall` (`add_php_preflight_uninstall`),
	KEY `idx_addreadme` (`addreadme`),
	KEY `idx_add_sql` (`add_sql`),
	KEY `idx_update_server_target` (`update_server_target`),
	KEY `idx_add_sql_uninstall` (`add_sql_uninstall`),
	KEY `idx_add_update_server` (`add_update_server`),
	KEY `idx_add_php_script_construct` (`add_php_script_construct`),
	KEY `idx_add_php_preflight_install` (`add_php_preflight_install`),
	KEY `idx_add_sales_server` (`add_sales_server`),
	KEY `idx_add_php_preflight_update` (`add_php_preflight_update`),
	KEY `idx_guid` (`guid`),
	KEY `idx_name` (`name`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_head` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_method_uninstall` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_postflight_install` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_postflight_update` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_preflight_install` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_preflight_uninstall` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_preflight_update` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_script_construct` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sales_server` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sql` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sql_uninstall` TINYINT(1) NOT NULL DEFAULT 0,
	`add_update_server` TINYINT(1) NOT NULL DEFAULT 0,
	`addreadme` TINYINT(1) NOT NULL DEFAULT 0,
	`class_extends` INT(11) NOT NULL DEFAULT 0,
	`description` TEXT NULL,
	`fields` TEXT NOT NULL,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`head` TEXT NULL,
	`joomla_plugin_group` INT(11) NOT NULL DEFAULT 0,
	`main_class_code` MEDIUMTEXT NOT NULL,
	`method_selection` TEXT NOT NULL,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`php_method_uninstall` MEDIUMTEXT NOT NULL,
	`php_postflight_install` MEDIUMTEXT NOT NULL,
	`php_postflight_update` MEDIUMTEXT NOT NULL,
	`php_preflight_install` MEDIUMTEXT NOT NULL,
	`php_preflight_uninstall` MEDIUMTEXT NOT NULL,
	`php_preflight_update` MEDIUMTEXT NOT NULL,
	`php_script_construct` MEDIUMTEXT NOT NULL,
	`plugin_version` CHAR(64) NOT NULL DEFAULT '',
	`property_selection` TEXT NOT NULL,
	`readme` TEXT NOT NULL,
	`sales_server` INT(11) NOT NULL DEFAULT 0,
	`sql` MEDIUMTEXT NOT NULL,
	`sql_uninstall` MEDIUMTEXT NOT NULL,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`update_server` INT(11) NOT NULL DEFAULT 0,
	`update_server_target` TINYINT(1) NOT NULL DEFAULT 0,
	`update_server_url` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_system_name` (`system_name`),
	KEY `idx_class_extends` (`class_extends`),
	KEY `idx_joomla_plugin_group` (`joomla_plugin_group`),
	KEY `idx_add_sql` (`add_sql`),
	KEY `idx_add_php_method_uninstall` (`add_php_method_uninstall`),
	KEY `idx_add_php_postflight_update` (`add_php_postflight_update`),
	KEY `idx_add_php_postflight_install` (`add_php_postflight_install`),
	KEY `idx_add_update_server` (`add_update_server`),
	KEY `idx_add_sql_uninstall` (`add_sql_uninstall`),
	KEY `idx_addreadme` (`addreadme`),
	KEY `idx_update_server_target` (`update_server_target`),
	KEY `idx_add_php_script_construct` (`add_php_script_construct`),
	KEY `idx_add_php_preflight_install` (`add_php_preflight_install`),
	KEY `idx_add_php_preflight_update` (`add_php_preflight_update`),
	KEY `idx_add_php_preflight_uninstall` (`add_php_preflight_uninstall`),
	KEY `idx_add_sales_server` (`add_sales_server`),
	KEY `idx_guid` (`guid`),
	KEY `idx_name` (`name`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_power` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`description` TEXT NULL,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`settings` TEXT NOT NULL,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_system_name` (`system_name`),
	KEY `idx_guid` (`guid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_power` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_head` TINYINT(1) NOT NULL DEFAULT 0,
	`add_licensing_template` TINYINT(1) NOT NULL DEFAULT 1,
	`approved` TINYINT(1) NOT NULL DEFAULT 0,
	`approved_paths` TEXT NULL,
	`composer` TEXT NULL,
	`description` TEXT NULL,
	`extends` VARCHAR(36) NOT NULL DEFAULT '',
	`extends_custom` VARCHAR(64) NULL DEFAULT '',
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`head` TEXT NULL,
	`implements` TEXT NULL,
	`implements_custom` VARCHAR(1024) NOT NULL DEFAULT '',
	`licensing_template` TEXT NULL,
	`load_selection` TEXT NULL,
	`main_class_code` MEDIUMTEXT NOT NULL,
	`method_selection` TEXT NULL,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`namespace` VARCHAR(255) NOT NULL DEFAULT '',
	`power_version` CHAR(64) NOT NULL DEFAULT '',
	`property_selection` TEXT NULL,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`type` VARCHAR(64) NOT NULL DEFAULT '',
	`use_selection` TEXT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_system_name` (`system_name`),
	KEY `idx_namespace` (`namespace`),
	KEY `idx_type` (`type`),
	KEY `idx_extends_custom` (`extends_custom`),
	KEY `idx_implements_custom` (`implements_custom`),
	KEY `idx_add_licensing_template` (`add_licensing_template`),
	KEY `idx_guid` (`guid`),
	KEY `idx_name` (`name`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_view` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_category_submenu` TINYINT(1) NOT NULL DEFAULT 1,
	`add_css_view` TINYINT(1) NOT NULL DEFAULT 0,
	`add_css_views` TINYINT(1) NOT NULL DEFAULT 0,
	`add_custom_button` INT(1) NOT NULL DEFAULT 0,
	`add_custom_import` TINYINT(1) NOT NULL DEFAULT 0,
	`add_fadein` TINYINT(1) NOT NULL DEFAULT 0,
	`add_javascript_view_file` TINYINT(1) NOT NULL DEFAULT 0,
	`add_javascript_view_footer` TINYINT(1) NOT NULL DEFAULT 0,
	`add_javascript_views_file` TINYINT(1) NOT NULL DEFAULT 0,
	`add_javascript_views_footer` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_after_cancel` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_after_delete` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_after_publish` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_ajax` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_allowadd` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_allowedit` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_batchcopy` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_batchmove` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_before_cancel` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_before_delete` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_before_publish` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_before_save` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_document` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_getform` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_getitem` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_getitems` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_getitems_after_all` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_getlistquery` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_postsavehook` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_save` TINYINT(1) NOT NULL DEFAULT 0,
	`add_sql` TINYINT(1) NOT NULL DEFAULT 0,
	`addlinked_views` TEXT NOT NULL,
	`addpermissions` TEXT NOT NULL,
	`addtables` TEXT NOT NULL,
	`addtabs` TEXT NOT NULL,
	`ajax_input` TEXT NOT NULL,
	`alias_builder` VARCHAR(255) NOT NULL DEFAULT '',
	`alias_builder_type` TINYINT(1) NOT NULL DEFAULT 0,
	`css_view` TEXT NOT NULL,
	`css_views` TEXT NOT NULL,
	`custom_button` TEXT NOT NULL,
	`description` TEXT NULL,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`html_import_view` MEDIUMTEXT NOT NULL,
	`icon` VARCHAR(255) NOT NULL DEFAULT '',
	`icon_add` VARCHAR(255) NOT NULL DEFAULT '',
	`icon_category` VARCHAR(255) NOT NULL DEFAULT '',
	`javascript_view_file` TEXT NOT NULL,
	`javascript_view_footer` TEXT NOT NULL,
	`javascript_views_file` TEXT NOT NULL,
	`javascript_views_footer` TEXT NOT NULL,
	`mysql_table_charset` VARCHAR(64) NOT NULL DEFAULT 1,
	`mysql_table_collate` VARCHAR(64) NOT NULL DEFAULT 1,
	`mysql_table_engine` VARCHAR(64) NOT NULL DEFAULT 1,
	`mysql_table_row_format` VARCHAR(64) NOT NULL DEFAULT 0,
	`name_list` CHAR(64) NOT NULL DEFAULT '',
	`name_single` CHAR(64) NOT NULL DEFAULT '',
	`php_after_cancel` MEDIUMTEXT NOT NULL,
	`php_after_delete` MEDIUMTEXT NOT NULL,
	`php_after_publish` MEDIUMTEXT NOT NULL,
	`php_ajaxmethod` MEDIUMTEXT NOT NULL,
	`php_allowadd` MEDIUMTEXT NOT NULL,
	`php_allowedit` MEDIUMTEXT NOT NULL,
	`php_batchcopy` MEDIUMTEXT NOT NULL,
	`php_batchmove` MEDIUMTEXT NOT NULL,
	`php_before_cancel` MEDIUMTEXT NOT NULL,
	`php_before_delete` MEDIUMTEXT NOT NULL,
	`php_before_publish` MEDIUMTEXT NOT NULL,
	`php_before_save` MEDIUMTEXT NOT NULL,
	`php_controller` MEDIUMTEXT NOT NULL,
	`php_controller_list` MEDIUMTEXT NOT NULL,
	`php_document` MEDIUMTEXT NOT NULL,
	`php_getform` MEDIUMTEXT NOT NULL,
	`php_getitem` MEDIUMTEXT NOT NULL,
	`php_getitems` MEDIUMTEXT NOT NULL,
	`php_getitems_after_all` MEDIUMTEXT NOT NULL,
	`php_getlistquery` MEDIUMTEXT NOT NULL,
	`php_import` MEDIUMTEXT NOT NULL,
	`php_import_display` MEDIUMTEXT NOT NULL,
	`php_import_ext` MEDIUMTEXT NOT NULL,
	`php_import_headers` MEDIUMTEXT NOT NULL,
	`php_import_save` MEDIUMTEXT NOT NULL,
	`php_import_setdata` MEDIUMTEXT NOT NULL,
	`php_model` MEDIUMTEXT NOT NULL,
	`php_model_list` MEDIUMTEXT NOT NULL,
	`php_postsavehook` MEDIUMTEXT NOT NULL,
	`php_save` MEDIUMTEXT NOT NULL,
	`short_description` VARCHAR(255) NOT NULL DEFAULT '',
	`source` TINYINT(1) NOT NULL DEFAULT 0,
	`sql` MEDIUMTEXT NOT NULL,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`type` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name_single` (`name_single`),
	KEY `idx_add_fadein` (`add_fadein`),
	KEY `idx_mysql_table_charset` (`mysql_table_charset`),
	KEY `idx_type` (`type`),
	KEY `idx_source` (`source`),
	KEY `idx_mysql_table_row_format` (`mysql_table_row_format`),
	KEY `idx_add_category_submenu` (`add_category_submenu`),
	KEY `idx_name_list` (`name_list`),
	KEY `idx_add_php_getlistquery` (`add_php_getlistquery`),
	KEY `idx_add_css_view` (`add_css_view`),
	KEY `idx_add_php_getform` (`add_php_getform`),
	KEY `idx_add_php_before_save` (`add_php_before_save`),
	KEY `idx_add_css_views` (`add_css_views`),
	KEY `idx_add_php_save` (`add_php_save`),
	KEY `idx_add_php_postsavehook` (`add_php_postsavehook`),
	KEY `idx_add_javascript_view_file` (`add_javascript_view_file`),
	KEY `idx_add_php_allowadd` (`add_php_allowadd`),
	KEY `idx_add_php_allowedit` (`add_php_allowedit`),
	KEY `idx_add_javascript_view_footer` (`add_javascript_view_footer`),
	KEY `idx_add_php_before_cancel` (`add_php_before_cancel`),
	KEY `idx_add_php_after_cancel` (`add_php_after_cancel`),
	KEY `idx_add_javascript_views_file` (`add_javascript_views_file`),
	KEY `idx_add_php_batchcopy` (`add_php_batchcopy`),
	KEY `idx_add_php_batchmove` (`add_php_batchmove`),
	KEY `idx_add_javascript_views_footer` (`add_javascript_views_footer`),
	KEY `idx_add_php_before_publish` (`add_php_before_publish`),
	KEY `idx_add_php_after_publish` (`add_php_after_publish`),
	KEY `idx_add_custom_button` (`add_custom_button`),
	KEY `idx_add_php_before_delete` (`add_php_before_delete`),
	KEY `idx_add_php_after_delete` (`add_php_after_delete`),
	KEY `idx_add_php_document` (`add_php_document`),
	KEY `idx_mysql_table_engine` (`mysql_table_engine`),
	KEY `idx_mysql_table_collate` (`mysql_table_collate`),
	KEY `idx_add_sql` (`add_sql`),
	KEY `idx_add_php_ajax` (`add_php_ajax`),
	KEY `idx_add_custom_import` (`add_custom_import`),
	KEY `idx_add_php_getitem` (`add_php_getitem`),
	KEY `idx_add_php_getitems` (`add_php_getitems`),
	KEY `idx_guid` (`guid`),
	KEY `idx_add_php_getitems_after_all` (`add_php_getitems_after_all`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_custom_admin_view` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_css` TINYINT(1) NOT NULL DEFAULT 0,
	`add_css_document` TINYINT(1) NOT NULL DEFAULT 0,
	`add_custom_button` INT(1) NOT NULL DEFAULT 0,
	`add_javascript_file` TINYINT(1) NOT NULL DEFAULT 0,
	`add_js_document` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_ajax` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_document` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_jview` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_jview_display` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_view` TINYINT(1) NOT NULL DEFAULT 0,
	`ajax_input` TEXT NOT NULL,
	`codename` VARCHAR(255) NOT NULL DEFAULT '',
	`context` VARCHAR(255) NOT NULL DEFAULT '',
	`css` TEXT NOT NULL,
	`css_document` TEXT NOT NULL,
	`custom_button` TEXT NOT NULL,
	`custom_get` TEXT NOT NULL,
	`default` MEDIUMTEXT NOT NULL,
	`description` VARCHAR(255) NOT NULL DEFAULT '',
	`dynamic_get` INT(11) NOT NULL DEFAULT 0,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`icon` VARCHAR(255) NOT NULL DEFAULT '',
	`javascript_file` TEXT NOT NULL,
	`js_document` TEXT NOT NULL,
	`libraries` TEXT NOT NULL,
	`main_get` INT(11) NOT NULL DEFAULT 0,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`php_ajaxmethod` MEDIUMTEXT NOT NULL,
	`php_controller` MEDIUMTEXT NOT NULL,
	`php_document` MEDIUMTEXT NOT NULL,
	`php_jview` MEDIUMTEXT NOT NULL,
	`php_jview_display` MEDIUMTEXT NOT NULL,
	`php_model` MEDIUMTEXT NOT NULL,
	`php_view` MEDIUMTEXT NOT NULL,
	`snippet` INT(11) NOT NULL DEFAULT 0,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_main_get` (`main_get`),
	KEY `idx_add_php_jview_display` (`add_php_jview_display`),
	KEY `idx_codename` (`codename`),
	KEY `idx_add_php_jview` (`add_php_jview`),
	KEY `idx_context` (`context`),
	KEY `idx_add_js_document` (`add_js_document`),
	KEY `idx_add_javascript_file` (`add_javascript_file`),
	KEY `idx_add_css_document` (`add_css_document`),
	KEY `idx_add_php_document` (`add_php_document`),
	KEY `idx_add_css` (`add_css`),
	KEY `idx_add_php_view` (`add_php_view`),
	KEY `idx_add_php_ajax` (`add_php_ajax`),
	KEY `idx_dynamic_get` (`dynamic_get`),
	KEY `idx_add_custom_button` (`add_custom_button`),
	KEY `idx_guid` (`guid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_site_view` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_css` TINYINT(1) NOT NULL DEFAULT 0,
	`add_css_document` TINYINT(1) NOT NULL DEFAULT 0,
	`add_custom_button` INT(1) NOT NULL DEFAULT 0,
	`add_javascript_file` TINYINT(1) NOT NULL DEFAULT 0,
	`add_js_document` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_ajax` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_document` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_jview` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_jview_display` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_view` TINYINT(1) NOT NULL DEFAULT 0,
	`ajax_input` TEXT NOT NULL,
	`button_position` TINYINT(1) NOT NULL DEFAULT 1,
	`codename` VARCHAR(255) NOT NULL DEFAULT '',
	`context` VARCHAR(255) NOT NULL DEFAULT '',
	`css` TEXT NOT NULL,
	`css_document` TEXT NOT NULL,
	`custom_button` TEXT NOT NULL,
	`custom_get` TEXT NOT NULL,
	`default` MEDIUMTEXT NOT NULL,
	`description` VARCHAR(255) NOT NULL DEFAULT '',
	`dynamic_get` INT(11) NOT NULL DEFAULT 0,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`javascript_file` TEXT NOT NULL,
	`js_document` TEXT NOT NULL,
	`libraries` TEXT NOT NULL,
	`main_get` INT(11) NOT NULL DEFAULT 0,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`php_ajaxmethod` MEDIUMTEXT NOT NULL,
	`php_controller` MEDIUMTEXT NOT NULL,
	`php_document` MEDIUMTEXT NOT NULL,
	`php_jview` MEDIUMTEXT NOT NULL,
	`php_jview_display` MEDIUMTEXT NOT NULL,
	`php_model` MEDIUMTEXT NOT NULL,
	`php_view` MEDIUMTEXT NOT NULL,
	`snippet` INT(11) NOT NULL DEFAULT 0,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_main_get` (`main_get`),
	KEY `idx_add_php_jview_display` (`add_php_jview_display`),
	KEY `idx_add_php_document` (`add_php_document`),
	KEY `idx_add_php_view` (`add_php_view`),
	KEY `idx_codename` (`codename`),
	KEY `idx_context` (`context`),
	KEY `idx_add_php_jview` (`add_php_jview`),
	KEY `idx_add_javascript_file` (`add_javascript_file`),
	KEY `idx_add_js_document` (`add_js_document`),
	KEY `idx_add_css_document` (`add_css_document`),
	KEY `idx_add_css` (`add_css`),
	KEY `idx_dynamic_get` (`dynamic_get`),
	KEY `idx_add_php_ajax` (`add_php_ajax`),
	KEY `idx_add_custom_button` (`add_custom_button`),
	KEY `idx_button_position` (`button_position`),
	KEY `idx_guid` (`guid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_template` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_php_view` TINYINT(1) NOT NULL DEFAULT 0,
	`alias` VARCHAR(255) NOT NULL DEFAULT '',
	`description` VARCHAR(255) NOT NULL DEFAULT '',
	`dynamic_get` INT(11) NOT NULL DEFAULT 0,
	`libraries` TEXT NOT NULL,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`php_view` MEDIUMTEXT NOT NULL,
	`snippet` INT(11) NOT NULL DEFAULT 0,
	`template` TEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_dynamic_get` (`dynamic_get`),
	KEY `idx_add_php_view` (`add_php_view`),
	KEY `idx_alias` (`alias`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_layout` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_php_view` TINYINT(1) NOT NULL DEFAULT 0,
	`alias` VARCHAR(255) NOT NULL DEFAULT '',
	`description` VARCHAR(255) NOT NULL DEFAULT '',
	`dynamic_get` INT(11) NOT NULL DEFAULT 0,
	`layout` TEXT NOT NULL,
	`libraries` TEXT NOT NULL,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`php_view` MEDIUMTEXT NOT NULL,
	`snippet` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_dynamic_get` (`dynamic_get`),
	KEY `idx_add_php_view` (`add_php_view`),
	KEY `idx_alias` (`alias`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_dynamic_get` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_php_after_getitem` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_after_getitems` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_before_getitem` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_before_getitems` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_getlistquery` TINYINT(1) NOT NULL DEFAULT 0,
	`add_php_router_parse` TINYINT(1) NOT NULL DEFAULT 0,
	`addcalculation` TINYINT(1) NOT NULL DEFAULT 0,
	`db_selection` TEXT NOT NULL,
	`db_table_main` VARCHAR(255) NOT NULL DEFAULT '',
	`filter` TEXT NOT NULL,
	`getcustom` VARCHAR(255) NOT NULL DEFAULT '',
	`gettype` TINYINT(1) NOT NULL DEFAULT 0,
	`global` TEXT NOT NULL,
	`group` TEXT NOT NULL,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`join_db_table` TEXT NOT NULL,
	`join_view_table` TEXT NOT NULL,
	`main_source` TINYINT(1) NOT NULL DEFAULT 0,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`order` TEXT NOT NULL,
	`pagination` TINYINT(1) NOT NULL DEFAULT 1,
	`php_after_getitem` MEDIUMTEXT NOT NULL,
	`php_after_getitems` MEDIUMTEXT NOT NULL,
	`php_before_getitem` MEDIUMTEXT NOT NULL,
	`php_before_getitems` MEDIUMTEXT NOT NULL,
	`php_calculation` MEDIUMTEXT NOT NULL,
	`php_custom_get` MEDIUMTEXT NOT NULL,
	`php_getlistquery` MEDIUMTEXT NOT NULL,
	`php_router_parse` MEDIUMTEXT NOT NULL,
	`plugin_events` VARCHAR(255) NOT NULL DEFAULT '',
	`select_all` TINYINT(1) NOT NULL DEFAULT 0,
	`view_selection` TEXT NOT NULL,
	`view_table_main` INT(11) NOT NULL DEFAULT 0,
	`where` TEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_main_source` (`main_source`),
	KEY `idx_gettype` (`gettype`),
	KEY `idx_add_php_after_getitems` (`add_php_after_getitems`),
	KEY `idx_add_php_router_parse` (`add_php_router_parse`),
	KEY `idx_add_php_before_getitems` (`add_php_before_getitems`),
	KEY `idx_add_php_before_getitem` (`add_php_before_getitem`),
	KEY `idx_add_php_after_getitem` (`add_php_after_getitem`),
	KEY `idx_add_php_getlistquery` (`add_php_getlistquery`),
	KEY `idx_select_all` (`select_all`),
	KEY `idx_getcustom` (`getcustom`),
	KEY `idx_pagination` (`pagination`),
	KEY `idx_guid` (`guid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_custom_code` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`code` MEDIUMTEXT NOT NULL,
	`comment_type` TINYINT(1) NOT NULL DEFAULT 1,
	`component` INT(11) NOT NULL DEFAULT 0,
	`from_line` VARCHAR(100) NOT NULL DEFAULT '',
	`function_name` VARCHAR(255) NOT NULL DEFAULT '',
	`hashendtarget` VARCHAR(64) NOT NULL DEFAULT '',
	`hashtarget` VARCHAR(64) NOT NULL DEFAULT '',
	`joomla_version` INT(11) NOT NULL DEFAULT 3,
	`path` TEXT NOT NULL,
	`system_name` VARCHAR(255) NOT NULL DEFAULT '',
	`target` TINYINT(1) NOT NULL DEFAULT 0,
	`to_line` VARCHAR(100) NOT NULL DEFAULT '',
	`type` TINYINT(1) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_component` (`component`),
	KEY `idx_target` (`target`),
	KEY `idx_type` (`type`),
	KEY `idx_function_name` (`function_name`),
	KEY `idx_to_line` (`to_line`),
	KEY `idx_from_line` (`from_line`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_class_property` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`comment` TEXT NOT NULL,
	`default` TEXT NOT NULL,
	`extension_type` VARCHAR(64) NOT NULL DEFAULT '',
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`joomla_plugin_group` INT(11) NOT NULL DEFAULT 0,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`visibility` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_visibility` (`visibility`),
	KEY `idx_guid` (`guid`),
	KEY `idx_joomla_plugin_group` (`joomla_plugin_group`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_class_method` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`arguments` TEXT NOT NULL,
	`code` MEDIUMTEXT NOT NULL,
	`comment` TEXT NOT NULL,
	`extension_type` VARCHAR(64) NOT NULL DEFAULT '',
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`joomla_plugin_group` INT(11) NOT NULL DEFAULT 0,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`visibility` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_visibility` (`visibility`),
	KEY `idx_guid` (`guid`),
	KEY `idx_joomla_plugin_group` (`joomla_plugin_group`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_placeholder` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`target` VARCHAR(255) NOT NULL DEFAULT '',
	`value` TEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_target` (`target`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_library` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addconditions` MEDIUMTEXT NOT NULL,
	`description` VARCHAR(255) NOT NULL DEFAULT '',
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`how` TINYINT(1) NOT NULL DEFAULT 1,
	`libraries` TEXT NOT NULL,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`php_setdocument` MEDIUMTEXT NOT NULL,
	`target` TINYINT(1) NOT NULL DEFAULT 1,
	`type` TINYINT(1) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_how` (`how`),
	KEY `idx_guid` (`guid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_snippet` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`contributor_company` VARCHAR(255) NOT NULL DEFAULT '',
	`contributor_email` VARCHAR(255) NOT NULL DEFAULT '',
	`contributor_name` VARCHAR(255) NOT NULL DEFAULT '',
	`contributor_website` VARCHAR(255) NOT NULL DEFAULT '',
	`description` TEXT NULL,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`heading` VARCHAR(255) NOT NULL DEFAULT '',
	`library` INT(11) NOT NULL DEFAULT 0,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`snippet` TEXT NOT NULL,
	`type` INT(11) NOT NULL DEFAULT 0,
	`url` VARCHAR(255) NOT NULL DEFAULT '',
	`usage` TEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_type` (`type`),
	KEY `idx_library` (`library`),
	KEY `idx_guid` (`guid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_validation_rule` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`inherit` CHAR(64) NOT NULL DEFAULT '',
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`php` MEDIUMTEXT NOT NULL,
	`short_description` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_field` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`add_css_view` TINYINT(1) NOT NULL DEFAULT 0,
	`add_css_views` TINYINT(1) NOT NULL DEFAULT 0,
	`add_javascript_view_footer` TINYINT(1) NOT NULL DEFAULT 0,
	`add_javascript_views_footer` TINYINT(1) NOT NULL DEFAULT 0,
	`catid` INT(11) NOT NULL DEFAULT 0,
	`css_view` TEXT NOT NULL,
	`css_views` TEXT NOT NULL,
	`datadefault` CHAR(64) NOT NULL DEFAULT '',
	`datadefault_other` CHAR(64) NOT NULL DEFAULT '',
	`datalenght` CHAR(64) NOT NULL DEFAULT '',
	`datalenght_other` CHAR(64) NOT NULL DEFAULT '',
	`datatype` CHAR(64) NOT NULL DEFAULT '',
	`fieldtype` INT(11) NOT NULL DEFAULT 0,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`indexes` CHAR(64) NOT NULL DEFAULT '',
	`initiator_on_get_model` TEXT NOT NULL,
	`initiator_on_save_model` TEXT NOT NULL,
	`javascript_view_footer` TEXT NOT NULL,
	`javascript_views_footer` TEXT NOT NULL,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`null_switch` CHAR(64) NOT NULL DEFAULT '',
	`on_get_model_field` TEXT NOT NULL,
	`on_save_model_field` TEXT NOT NULL,
	`store` INT(11) NOT NULL DEFAULT 0,
	`xml` TEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_fieldtype` (`fieldtype`),
	KEY `idx_datatype` (`datatype`),
	KEY `idx_indexes` (`indexes`),
	KEY `idx_null_switch` (`null_switch`),
	KEY `idx_catid` (`catid`),
	KEY `idx_datalenght` (`datalenght`),
	KEY `idx_datadefault_other` (`datadefault_other`),
	KEY `idx_datadefault` (`datadefault`),
	KEY `idx_datalenght_other` (`datalenght_other`),
	KEY `idx_add_css_view` (`add_css_view`),
	KEY `idx_add_css_views` (`add_css_views`),
	KEY `idx_add_javascript_view_footer` (`add_javascript_view_footer`),
	KEY `idx_add_javascript_views_footer` (`add_javascript_views_footer`),
	KEY `idx_guid` (`guid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_fieldtype` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`catid` INT(11) NOT NULL DEFAULT 0,
	`datadefault` CHAR(64) NOT NULL DEFAULT '',
	`datadefault_other` CHAR(64) NOT NULL DEFAULT '',
	`datalenght` CHAR(64) NOT NULL DEFAULT '',
	`datalenght_other` CHAR(64) NOT NULL DEFAULT '',
	`datatype` CHAR(64) NOT NULL DEFAULT '',
	`description` TEXT NULL,
	`guid` VARCHAR(36) NOT NULL DEFAULT '',
	`has_defaults` TINYINT(1) NOT NULL DEFAULT 0,
	`indexes` CHAR(64) NOT NULL DEFAULT '',
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`null_switch` CHAR(64) NOT NULL DEFAULT '',
	`properties` TEXT NOT NULL,
	`short_description` VARCHAR(255) NOT NULL DEFAULT '',
	`store` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_null_switch` (`null_switch`),
	KEY `idx_indexes` (`indexes`),
	KEY `idx_datadefault_other` (`datadefault_other`),
	KEY `idx_datadefault` (`datadefault`),
	KEY `idx_datatype` (`datatype`),
	KEY `idx_has_defaults` (`has_defaults`),
	KEY `idx_datalenght` (`datalenght`),
	KEY `idx_datalenght_other` (`datalenght_other`),
	KEY `idx_guid` (`guid`),
	KEY `idx_catid` (`catid`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_language_translation` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`components` TEXT NULL,
	`modules` TEXT NULL,
	`plugins` TEXT NULL,
	`source` MEDIUMTEXT NOT NULL,
	`translation` TEXT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_language` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`langtag` VARCHAR(64) NOT NULL DEFAULT '',
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_server` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`authentication` TINYINT(1) NOT NULL DEFAULT 0,
	`host` TEXT NOT NULL,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`password` TEXT NOT NULL,
	`path` TEXT NOT NULL,
	`port` TEXT NOT NULL,
	`private` TEXT NOT NULL,
	`private_key` TEXT NOT NULL,
	`protocol` TINYINT(1) NOT NULL DEFAULT 0,
	`secret` TEXT NOT NULL,
	`signature` TEXT NOT NULL,
	`username` TEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_protocol` (`protocol`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_help_document` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`admin_view` CHAR(255) NOT NULL DEFAULT '',
	`alias` CHAR(64) NOT NULL DEFAULT '',
	`article` TINYINT(1) NOT NULL DEFAULT 0,
	`content` TEXT NOT NULL,
	`groups` TEXT NOT NULL,
	`location` TINYINT(1) NOT NULL DEFAULT 0,
	`not_required` INT(1) NOT NULL DEFAULT 0,
	`site_view` CHAR(255) NOT NULL DEFAULT '',
	`target` TINYINT(1) NOT NULL DEFAULT 0,
	`title` CHAR(64) NOT NULL DEFAULT '',
	`type` TINYINT(1) NOT NULL DEFAULT 0,
	`url` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_title` (`title`),
	KEY `idx_type` (`type`),
	KEY `idx_location` (`location`),
	KEY `idx_article` (`article`),
	KEY `idx_target` (`target`),
	KEY `idx_alias` (`alias`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_fields` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addfields` MEDIUMTEXT NOT NULL,
	`admin_view` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_admin_view` (`admin_view`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_fields_conditions` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addconditions` MEDIUMTEXT NOT NULL,
	`admin_view` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_admin_view` (`admin_view`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_fields_relations` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addrelations` MEDIUMTEXT NOT NULL,
	`admin_view` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_admin_view` (`admin_view`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_custom_tabs` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`admin_view` INT(11) NOT NULL DEFAULT 0,
	`tabs` TEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_admin_view` (`admin_view`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_admin_views` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addadmin_views` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_site_views` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addsite_views` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_custom_admin_views` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addcustom_admin_views` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_updates` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`version_update` MEDIUMTEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_mysql_tweaks` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`sql_tweak` TEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_custom_admin_menus` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addcustommenus` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_router` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`constructor_after_parent_code` MEDIUMTEXT NOT NULL,
	`constructor_before_parent_code` MEDIUMTEXT NOT NULL,
	`constructor_before_parent_manual` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`methods_code` MEDIUMTEXT NOT NULL,
	`mode_constructor_after_parent` TINYINT(1) NOT NULL DEFAULT 0,
	`mode_constructor_before_parent` TINYINT(1) NOT NULL DEFAULT 0,
	`mode_methods` TINYINT(1) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_config` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addconfig` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_dashboard` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`dashboard_tab` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`php_dashboard_methods` MEDIUMTEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_files_folders` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addfiles` TEXT NOT NULL,
	`addfilesfullpath` TEXT NOT NULL,
	`addfolders` TEXT NOT NULL,
	`addfoldersfullpath` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_placeholders` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addplaceholders` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_plugins` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addjoomla_plugins` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_modules` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addjoomla_modules` TEXT NOT NULL,
	`joomla_component` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_component` (`joomla_component`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_snippet_type` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`description` VARCHAR(255) NOT NULL DEFAULT '',
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_library_config` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addconfig` TEXT NOT NULL,
	`library` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_library` (`library`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_library_files_folders_urls` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addfiles` TEXT NOT NULL,
	`addfilesfullpath` TEXT NOT NULL,
	`addfolders` TEXT NOT NULL,
	`addfoldersfullpath` TEXT NOT NULL,
	`addurls` TEXT NOT NULL,
	`library` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_library` (`library`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_class_extends` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`comment` TEXT NOT NULL,
	`extension_type` VARCHAR(64) NOT NULL DEFAULT '',
	`head` TEXT NULL,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module_updates` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`joomla_module` INT(11) NOT NULL DEFAULT 0,
	`version_update` MEDIUMTEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_module` (`joomla_module`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module_files_folders_urls` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addfiles` TEXT NOT NULL,
	`addfilesfullpath` TEXT NOT NULL,
	`addfolders` TEXT NOT NULL,
	`addfoldersfullpath` TEXT NOT NULL,
	`addurls` TEXT NOT NULL,
	`joomla_module` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_module` (`joomla_module`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_group` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`class_extends` INT(11) NOT NULL DEFAULT 0,
	`name` VARCHAR(255) NOT NULL DEFAULT '',
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_name` (`name`),
	KEY `idx_class_extends` (`class_extends`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_updates` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`joomla_plugin` INT(11) NOT NULL DEFAULT 0,
	`version_update` MEDIUMTEXT NOT NULL,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_plugin` (`joomla_plugin`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_files_folders_urls` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
	`addfiles` TEXT NOT NULL,
	`addfilesfullpath` TEXT NOT NULL,
	`addfolders` TEXT NOT NULL,
	`addfoldersfullpath` TEXT NOT NULL,
	`addurls` TEXT NOT NULL,
	`joomla_plugin` INT(11) NOT NULL DEFAULT 0,
	`params` TEXT NULL,
	`published` TINYINT(3) NOT NULL DEFAULT 1,
	`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,
	`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
	`modified` DATETIME DEFAULT NULL,
	`checked_out` int(11) unsigned NOT NULL DEFAULT 0,
	`checked_out_time` DATETIME DEFAULT NULL,
	`version` INT(10) unsigned NOT NULL DEFAULT 1,
	`hits` INT(10) unsigned NOT NULL DEFAULT 0,
	`access` INT(10) unsigned NOT NULL DEFAULT 0,
	`ordering` INT(11) NOT NULL DEFAULT 0,
	PRIMARY KEY  (`id`),
	KEY `idx_joomla_plugin` (`joomla_plugin`),
	KEY `idx_access` (`access`),
	KEY `idx_checkout` (`checked_out`),
	KEY `idx_createdby` (`created_by`),
	KEY `idx_modifiedby` (`modified_by`),
	KEY `idx_state` (`published`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

--
-- Dumping data for table `#__componentbuilder_joomla_component`
--

INSERT INTO `#__componentbuilder_joomla_component` (`id`, `add_admin_event`, `add_backup_folder_path`, `add_css_admin`, `add_css_site`, `add_email_helper`, `add_git_folder_path`, `add_javascript`, `add_license`, `add_menu_prefix`, `add_namespace_prefix`, `add_php_helper_admin`, `add_php_helper_both`, `add_php_helper_site`, `add_php_method_uninstall`, `add_php_postflight_install`, `add_php_postflight_update`, `add_php_preflight_install`, `add_php_preflight_update`, `add_placeholders`, `add_powers`, `add_sales_server`, `add_site_event`, `add_sql`, `add_sql_uninstall`, `add_update_server`, `addcontributors`, `addfootable`, `addreadme`, `adduikit`, `assets_table_fix`, `author`, `backup_folder_path`, `bom`, `buildcomp`, `buildcompsql`, `companyname`, `component_version`, `copyright`, `created`, `creatuserhelper`, `crowdin_account_api_key`, `crowdin_project_api_key`, `crowdin_project_identifier`, `crowdin_username`, `css_admin`, `css_site`, `dashboard`, `dashboard_type`, `debug_linenr`, `description`, `email`, `emptycontributors`, `export_buy_link`, `export_key`, `git_folder_path`, `guid`, `image`, `javascript`, `joomla_source_link`, `license`, `license_type`, `menu_prefix`, `modified`, `mvc_versiondate`, `name`, `name_code`, `namespace_prefix`, `number`, `php_admin_event`, `php_helper_admin`, `php_helper_both`, `php_helper_site`, `php_method_uninstall`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_update`, `php_site_event`, `readme`, `remove_line_breaks`, `sales_server`, `short_description`, `sql`, `sql_uninstall`, `system_name`, `toignore`, `translation_tool`, `update_server`, `update_server_target`, `update_server_url`, `website`, `whmcs_buy_link`, `whmcs_key`, `whmcs_url`, `params`, `published`, `version`, `hits`, `access`, `ordering`) VALUES
(1, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', '', '', 1, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '3.2.10', 'Copyright (C) 2015. All Rights Reserved', '2015-03-20 15:27:13', 1, 'mIu5D5hcoKG7Qwq9t9+EbeIDz5myyqPT+Y9gfumTOnU=', 'ASZTKYzZpIKCLc9tWjeUim24yOLGP/P7x7ltY1+yCeQ=', '', 'kEHnfNOmA6lJcwrJs2YKnN6cupuqs/W9lZPuNJQfNJw=', '', '', '', 1, '', 'The Basic Learning Management System for Joomla.', 'info@vdm.io', 1, '', '0wpowsjavpfWE8NBDaANtTAa2HI1HwCS0MeJ0cJvu1C0O9lituow6lJ5QS5burG5YtvM0v0pJgKRnah0ucjLsw==', '', '90f80dee-d3d8-487d-a6c4-5627cb317824', 'images/vdm/LMS500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2023-09-28 06:26:25', 1, 'Learning Management', 'learningmanager', '', 4, '', '', 'CS8qKg0KCSogCVNob3VsZCBEcm9wYm94IGJlIHVwZGF0ZWQNCgkqKi8NCglwdWJsaWMgc3RhdGljICR1cGRhdGVfZHJvcGJveCA9IGZhbHNlOw0KDQoJLyoqDQoJKiAJVGhlIGRyb3Bib3ggbGlua3MNCgkqKi8NCglwdWJsaWMgc3RhdGljICRsaW5rc19kcm9wYm94Ow0KDQoJLyoqDQoJKiAJVXNlIGNvdW50ZXIgdG8gaW5zdXJlIGNvZGUgcnVuIG9uY2UNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICR1cGRhdGVfZHJvcGJveF9jb3VudGVyID0gMDsNCg0KCS8qKg0KCSAqCWNoZWNrIGlmIHRoaXMgc2Vzc2lvbiBoYXMgYSBkb3dubG9hZCBhdHRhY2hlZA0KCSAqCXZpYSBkcm9wYm94DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYXNEb3dubG9hZCgkc2Vzc2lvbiwkZGF0ZSkNCgl7DQoJCS8vIHNldCB0aGUgZHJvcGJveCBsaW5rcw0KCQlzZWxmOjpnZXREcm9wYm94KCk7DQoJCS8vIGNoZWNrIGlmIGl0IHdhcyBzZXQNCgkJaWYoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGxpbmtzX2Ryb3Bib3gpKQ0KCQl7DQoJCQkvLyBidWxkIHRoZSBsaW5rIGZyb20gc2Vzc2lvbiBpZA0KCQkJJGxpbmsgPSBzZWxmOjpnZXRTZXNzaW9uRHJvcGJveExpbmsoJHNlc3Npb24pOw0KCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGxpbmspKQ0KCQkJew0KCQkJCSRsaW5rID0gc3RydG9sb3dlcigkbGluayk7DQoJCQkJZm9yZWFjaCAoc2VsZjo6JGxpbmtzX2Ryb3Bib3ggYXMgJGZvbGRlciA9PiAkZGJfbGluaykNCgkJCQl7DQoJCQkJCSRmb2xkZXIgPSBzdHJ0b2xvd2VyKCRmb2xkZXIpOw0KCQkJCQlpZiAoc3RycG9zKCRmb2xkZXIsJGxpbmspICE9PSBmYWxzZSkNCgkJCQkJew0KCQkJCQkJJGZpbGVOYW1lID0gc3RyX3JlcGxhY2UoJGxpbmssICcnLCAkZm9sZGVyKTsNCgkJCQkJCSRidWNrZXRbJGZpbGVOYW1lXSA9ICRkYl9saW5rOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGNoZWNrIGlmIHdlIGZvdW5kIHNvbSBmaWxlcw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0KSkNCgkJCQl7DQoJCQkJCS8vIGdldCBUb2tlbiENCgkJCQkJJHRva2VuID0gSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpOw0KCQkJCQkvLyBhbmQgdXNlcg0KCQkJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCQkJZm9yZWFjaCAoJGJ1Y2tldCBhcyAkZmlsZW5hbWUgPT4gJGtleUxpbmspDQoJCQkJCXsNCgkJCQkJCSRmaWxlZGF0ZSA9IDA7DQoJCQkJCQlsaXN0KCRuYW1lLCRleHQpID0gZXhwbG9kZSgnLicsJGZpbGVuYW1lKTsNCgkJCQkJCSRrZXkgPSAkbmFtZTsNCgkJCQkJCS8vIGNoZWNrIGZvciBuYW1lcyB3aXRoIGRhdGUNCgkJCQkJCWlmIChzdHJwb3MoJG5hbWUsJ19fJykgIT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCWxpc3QoJG5hbWUsJGZpbGVkYXRlKSA9IGV4cGxvZGUoJ19fJywkbmFtZSk7DQoJCQkJCQkJLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIHVzZSB0aGlzIGZpbGUNCgkJCQkJCQkkZmlsZWRhdGUgPSBzdHJ0b3RpbWUoJGZpbGVkYXRlKTsNCgkJCQkJCX0NCgkJCQkJCS8vIHNldHVwIHRoZSBuYW1lDQoJCQkJCQlpZiAoc3RycG9zKCRuYW1lLCdfJykgIT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCSRuYW1lID0gZXhwbG9kZSgnXycsJG5hbWUpOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmIChzdHJwb3MoJG5hbWUsJy0nKSAhPT0gZmFsc2UpDQoJCQkJCQl7DQoJCQkJCQkJJG5hbWUgPSBleHBsb2RlKCctJywkbmFtZSk7DQoJCQkJCQl9DQoJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5hbWUpKQ0KCQkJCQkJew0KCQkJCQkJCSRuYW1lID0gdWN3b3JkcyhzdHJ0b2xvd2VyKGltcGxvZGUoJyAnLCRuYW1lKSkpOw0KCQkJCQkJfQ0KCQkJCQkJLy8gYnVpbGQgbGluaw0KCQkJCQkJJGRyb3Bib3hMaW5rID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLmZpbGUmdG9rZW49Jy4kdG9rZW4uJyZmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJmtleT0nLiR1c2VyLT5pZC4nYmEmbGluaz0nLiRrZXlMaW5rKTsNCgkJCQkJCWlmICgkZmlsZWRhdGUgPT0gJGRhdGUpDQoJCQkJCQl7DQoJCQkJCQkJJGZvdW5kWyRrZXldID0gJzxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstYnV0dG9uLXNtYWxsIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20iIGhyZWY9IicuJGRyb3Bib3hMaW5rLiciIHRpdGxlPSInLiRmaWxlbmFtZS4nIj48aSBjbGFzcz0idWstaWNvbi1kb3dubG9hZCI+PC9pPiBEb3dubG9hZCAnLiRuYW1lLicgKCcuJGV4dC4nKSA8ZW0+ZXhjbHVzaXZlPC9lbT48L2E+JzsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoJGZpbGVkYXRlID09IDApDQoJCQkJCQl7DQoJCQkJCQkJJGZvdW5kWyRrZXldID0gJzxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstYnV0dG9uLXNtYWxsIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20iIGhyZWY9IicuJGRyb3Bib3hMaW5rLiciIHRpdGxlPSInLiRmaWxlbmFtZS4nIj48aSBjbGFzcz0idWstaWNvbi1kb3dubG9hZCI+PC9pPiBEb3dubG9hZCAnLiRuYW1lLicgKCcuJGV4dC4nKTwvYT4nOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIG9ubHkgZ3JvdXAgYnV0dG9uIGlmIG1vcmUgdGhlbiBvbmUgaXMgc2V0DQoJCQkJCWlmIChjb3VudCgkZm91bmQpID4gMSkNCgkJCQkJew0KCQkJCQkJcmV0dXJuICc8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsIj4nLmltcGxvZGUoJycsICRmb3VuZCkuJzwvZGl2PjxkaXYgY2xhc3M9InVrLXZpc2libGUtc21hbGwiPicuaW1wbG9kZSgnJywgJGZvdW5kKS4nPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXJldHVybiBpbXBsb2RlKCcnLCAkZm91bmQpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAnPHNtYWxsPk5vIGRvd25sb2FkcyBmb3VuZCBmb3IgdGhpcyBzZXNzaW9uIGF0IHRoaXMgdGltZS48L3NtYWxsPic7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRTZXNzaW9uRHJvcGJveExpbmsoJHNlc3Npb24pDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnYS5hbGlhcycsJ2MuYWxpYXMnLCdwLmFjcm9ueW0nKSxhcnJheSgnc2Vzc2lvbicsJ2NvdXJzZScsJ3Byb2dyYW0nKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9zZXNzaW9uJywgJ2EnKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcHJvZ3JhbScsICdwJykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EucHJvZ3JhbScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgncC5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3Vyc2UnLCAnYycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdXJzZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnYy5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuKGludCkgJHNlc3Npb24pOw0KCQkvLyBlY2hvIG5sMmJyKHN0cl9yZXBsYWNlKCcjX18nLCdjYl8nLCRxdWVyeSkpOyBkaWU7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJLy8gY29uc3RydWN0IHRoZSBzZWFyY2ggc3RyaW5nIGZvciB0aGUgbGlua3MNCgkJCXJldHVybiAnVkRNX3BMZUtfaDB1RXIvJy4kcmVzdWx0LT5wcm9ncmFtLicvJy4kcmVzdWx0LT5jb3Vyc2UuJy8nLiRyZXN1bHQtPnNlc3Npb24uJy8nOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldERyb3Bib3goKQ0KCXsNCgkJLy8gR2V0IG1haW4gdXJsDQoJCSRtYWluVXJsID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2Ryb3Bib3gnLCBudWxsKTsNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRtYWluVXJsKSAmJiBzZWxmOjokdXBkYXRlX2Ryb3Bib3hfY291bnRlciA9PSAwKQ0KCQl7DQoJCQkvLyBHZXQgdXBkYXRlIHRpbWVyIHRpbWUNCgkJCSR0aW1lciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdkcm9wYm94X3RpbWVyJywgJzYwJyk7DQoJCQkvLyBHZXQgdGhlIFRpbWUgZm9yIE5vdw0KCQkJJG5vd1RpbWUgPSB0aW1lKCk7DQoJCQkvLyBHZXQgTmV4dCBVcGRhdGUgVGltZQ0KCQkJJG5leHR1cGRhdGUgPSBzdHJ0b3RpbWUoJysnLiR0aW1lci4nIG1pbnV0ZXMnLCAkbm93VGltZSk7DQoJCQkvLyB1cGRhdGUgZmlsZW5hbWUNCgkJCSRpbmZvRmlsZSA9IEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycy8nLm1kNSgkbWFpblVybC4naW5mbycpOw0KCQkJLy8gZ2V0IGxhc3QgdXBkYXRlIGluZm8NCgkJCSR1cGRhdGVJbmZvTm93ID0gZmFsc2U7DQoJCQlpZiAoKCRqc29uID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRpbmZvRmlsZS4iLmpzb24iKSkgIT09IEZBTFNFKQ0KCQkJew0KCQkJCSR1cGRhdGVJbmZvID0ganNvbl9kZWNvZGUoJGpzb24sdHJ1ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHVwZGF0ZUluZm8gPSBhcnJheSgnbmV4dHVwZGF0ZScgPT4gJG5leHR1cGRhdGUsICd1cGRhdGVhY3RpdmUnID0+IGZhbHNlLCAndXBkYXRlbm93JyA9PiBmYWxzZSk7DQoJCQkJJHVwZGF0ZUluZm9Ob3cgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgbG9jYWwgc2V0IG9mIGxpbmtzDQoJCQlpZiAoJHVwZGF0ZUluZm9bJ25leHR1cGRhdGUnXSA8ICRub3dUaW1lICYmICEkdXBkYXRlSW5mb1sndXBkYXRlYWN0aXZlJ10pDQoJCQl7DQoJCQkJc2VsZjo6JHVwZGF0ZV9kcm9wYm94ID0gdHJ1ZTsNCgkJCQkkdXBkYXRlSW5mbyA9IGFycmF5KCduZXh0dXBkYXRlJyA9PiAkbmV4dHVwZGF0ZSwgJ3VwZGF0ZWFjdGl2ZScgPT4gZmFsc2UsICd1cGRhdGVub3cnID0+IHRydWUpOw0KCQkJCSR1cGRhdGVJbmZvTm93ID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIHVwZGF0ZSBpbmZvIG5vdw0KCQkJaWYgKCR1cGRhdGVJbmZvTm93KQ0KCQkJew0KCQkJCS8vIHNhdmUgdGhlIHVwZGF0ZSBpbmZvIGZvciBuZXh0IHJ1bg0KCQkJCXNlbGY6OnNhdmVKc29uKGpzb25fZW5jb2RlKCR1cGRhdGVJbmZvKSwkaW5mb0ZpbGUpOw0KCQkJfQ0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gbWQ1KEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdiYXNpY19rZXknLCAnbG9jYWxLZXkzNGZkV0VrbCcpKTsNCgkJCS8vIGxpbmtzIGZpbGVuYW1lDQoJCQkkbGlua0ZpbGUgPSBKUEFUSF9DT01QT05FTlRfU0lURS4nL2hlbHBlcnMvJy5tZDUoJG1haW5VcmwuJ2xpbmtzJyk7DQoJCQkvLyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IHJ1biBvbmNlIHBlciBleGN1dGlvbg0KCQkJc2VsZjo6JHVwZGF0ZV9kcm9wYm94X2NvdW50ZXIrKzsNCgkJCS8vIGdldCB0aGUgbG9jYWwgbGlua3MNCgkJCWlmICgoJGpzb25saW5rcyA9IEBmaWxlX2dldF9jb250ZW50cygkbGlua0ZpbGUuIi5qc29uIikpICE9PSBGQUxTRSAmJiAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGxpbmtzX2Ryb3Bib3gpKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkanNvbmxpbmtzKSkNCgkJCQl7DQoJCQkJCS8vIGdldCBzYXZlZCBsaW5rcw0KCQkJCQkkc3RvcmVhZ2UgPSBqc29uX2RlY29kZSgkanNvbmxpbmtzLHRydWUpOw0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHN0b3JlYWdlKSkNCgkJCQkJew0KCQkJCQkJLy8gZ2V0IHNhdmVkIGxpbmtzDQoJCQkJCQlzZWxmOjokbGlua3NfZHJvcGJveCA9ICRzdG9yZWFnZTsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWlmICggISR1cGRhdGVJbmZvWyd1cGRhdGVhY3RpdmUnXSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JHVwZGF0ZV9kcm9wYm94ID0gdHJ1ZTsNCgkJCQkJCSR1cGRhdGVJbmZvID0gYXJyYXkoJ25leHR1cGRhdGUnID0+ICRuZXh0dXBkYXRlLCAndXBkYXRlYWN0aXZlJyA9PiBmYWxzZSwgJ3VwZGF0ZW5vdycgPT4gdHJ1ZSk7DQoJCQkJCQlzZWxmOjpzYXZlSnNvbihqc29uX2VuY29kZSgkdXBkYXRlSW5mbyksJGluZm9GaWxlKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVEcm9wYm94KCkNCgl7DQoJCS8vIEdldCBtYWluIHVybA0KCQkkbWFpblVybCA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdkcm9wYm94JywgbnVsbCk7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkbWFpblVybCkpDQoJCXsNCgkJCS8vIGRvbnQgYWxsb3cgb3RoZXIgdXBkYXRlcw0KCQkJc2VsZjo6JHVwZGF0ZV9kcm9wYm94ID0gZmFsc2U7DQoJCQkvLyB1cGRhdGUgZmlsZW5hbWUNCgkJCSRpbmZvRmlsZSA9IEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycy8nLm1kNSgkbWFpblVybC4naW5mbycpOw0KCQkJaWYgKCgkanNvbiA9IEBmaWxlX2dldF9jb250ZW50cygkaW5mb0ZpbGUuIi5qc29uIikpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQkkdXBkYXRlSW5mbyA9IGpzb25fZGVjb2RlKCRqc29uLHRydWUpOw0KCQkJCWlmICghJHVwZGF0ZUluZm9bJ3VwZGF0ZWFjdGl2ZSddICYmICR1cGRhdGVJbmZvWyd1cGRhdGVub3cnXSkNCgkJCQl7DQoJCQkJCSR1cGRhdGVJbmZvWyd1cGRhdGVhY3RpdmUnXSA9IHRydWU7DQoJCQkJCSR1cGRhdGVJbmZvWyd1cGRhdGVub3cnXSA9IGZhbHNlOw0KCQkJCQkvLyBzYXZlIHRoZSB1cGRhdGUgaW5mbyBmb3IgbmV4dCBydW4NCgkJCQkJc2VsZjo6c2F2ZUpzb24oanNvbl9lbmNvZGUoJHVwZGF0ZUluZm8pLCRpbmZvRmlsZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIHVwZGF0ZSBhbHJlYWR5IHJ1bm5pbmcNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBvb3BzIHNvbWV0aGluZyBpcyB3cm9uZw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCS8vIGxvYWQgdGhlIGZpbGUNCgkJCUpMb2FkZXI6OmltcG9ydCgnZHJvcGJveCcsIEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycycpOw0KCQkJLy8gdXBkYXRlIHRoZSBkcm9wYm94IGxpbmtzDQoJCQkkY29tcGlsZXJDb25maWcgPSBhcnJheSgnc2F2ZScgPT4gZmFsc2UsICdkb3dubG9hZCcgPT4gZmFsc2UpOw0KCQkJJGRyb3Bib3ggPSBuZXcgRHJvcGJveCgkbWFpblVybCwgJGNvbXBpbGVyQ29uZmlnKTsNCgkJCS8vIHNldHVwIHRoZSBsaW5rcw0KCQkJc2VsZjo6JGxpbmtzX2Ryb3Bib3ggPSAkZHJvcGJveC0+ZmlsZXM7DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGxpbmtzX2Ryb3Bib3gpKQ0KCQkJew0KCQkJCS8vIEdldCBsb2NhbCBrZXkNCgkJCQkkbG9jYWxrZXkgPSBtZDUoSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2Jhc2ljX2tleScsICdsb2NhbEtleTM0ZmRXRWtsJykpOw0KCQkJCS8vIGxpbmtzIGZpbGVuYW1lDQoJCQkJJGxpbmtGaWxlID0gSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzLycubWQ1KCRtYWluVXJsLidsaW5rcycpOw0KCQkJCS8vIGVuY3J5cHQgdGhlIHVybHMNCgkJCQkkbG9ja2VyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAyNTYpOw0KCQkJCWZvcmVhY2ggKHNlbGY6OiRsaW5rc19kcm9wYm94IGFzICRmb2xkZXIgPT4gJGxpbmspDQoJCQkJew0KCQkJCQkkc3RvcmVhZ2VbJGZvbGRlcl0gPSBiYXNlNjRfZW5jb2RlKCRsb2NrZXItPmVuY3J5cHRTdHJpbmcoJGxpbmspKTsNCgkJCQl9DQoJCQkJLy8gc2F2ZSB0aGUgdXBkYXRlIGxpbmtzIGZvciBuZXh0IHRpbWUNCgkJCQlzZWxmOjpzYXZlSnNvbihqc29uX2VuY29kZSgkc3RvcmVhZ2UpLCRsaW5rRmlsZSk7DQoJCQkJJHVwZGF0ZUluZm9bJ3VwZGF0ZWFjdGl2ZSddID0gZmFsc2U7DQoJCQkJLy8gc2F2ZSB0aGUgdXBkYXRlIGluZm8gZm9yIG5leHQgcnVuDQoJCQkJc2VsZjo6c2F2ZUpzb24oanNvbl9lbmNvZGUoJHVwZGF0ZUluZm8pLCRpbmZvRmlsZSk7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2F2ZUpzb24oJGRhdGEsJGZpbGVuYW1lKQ0KCXsNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZpbGVuYW1lLicuanNvbicsICd3Jyk7DQoJCQlmd3JpdGUoJGZwLCAkZGF0YSk7DQoJCQlmY2xvc2UoJGZwKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSogCUlzIHVzZXIgYSBGYWN1bHR5bWVtYmVyDQoJKiovDQoJcHVibGljIHN0YXRpYyAkaXNGYWN1bHR5bWVtYmVyID0gZmFsc2U7DQoNCgkvKioNCgkqIAlJcyB1c2VyIGEgRmFjaWxpdGF0b3INCgkqKi8NCglwdWJsaWMgc3RhdGljICRpc0ZhY2lsaXRhdG9yID0gZmFsc2U7DQoNCgkvKioNCgkqIAlJcyB1c2VyIGEgU3R1ZGVudA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGlzU3R1ZGVudCA9IGZhbHNlOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1c2VySXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJLy8gc2V0IHBhcmFtcw0KCQlpZiAoZW1wdHkoc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gZ2V0IHRoaXMgdXNlciBncm91cHMNCgkJJGdyb3VwcyA9IChhcnJheSkgJHVzZXItPmdldCgnZ3JvdXBzJyk7DQoJCS8vIEdldCBmYWN1bHR5IG1lbWJlciBncm91cHMNCgkJJGZhY3VsdHltZW1iZXJHcm91cHMgPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgnZmFjdWx0eW1lbWJlcnVzZXInKTsNCgkJLy8gR2V0IGZhY2lsaXRhdG9yIGdyb3Vwcw0KCQkkZmFjaWxpdGF0b3JHcm91cHMgPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgnZmFjaWxpdGF0b3J1c2VyJyk7DQoJCS8vIEdldCBzdHVkZW50IGdyb3Vwcw0KCQkkc3R1ZGVudEdyb3VwcyA9IChhcnJheSkgc2VsZjo6JHBhcmFtcy0+Z2V0KCdzdHVkZW50dXNlcicpOw0KCQkvLyBub3cgY2hlY2sgaWYgdXNlciBpcyBpbiBncm91cA0KCQlpZiAoYXJyYXlfaW50ZXJzZWN0KCRmYWN1bHR5bWVtYmVyR3JvdXBzLCAkZ3JvdXBzKSkNCgkJew0KCQkJLy8gaXMgRmFjdWx0eW1lbWJlcg0KCQkJc2VsZjo6JGlzRmFjdWx0eW1lbWJlciA9IHRydWU7DQoJCX0NCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkZmFjaWxpdGF0b3JHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBGYWNpbGl0YXRvcg0KCQkJc2VsZjo6JGlzRmFjaWxpdGF0b3IgPSB0cnVlOw0KCQl9DQoJCWlmIChhcnJheV9pbnRlcnNlY3QoJHN0dWRlbnRHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBTdHVkZW50DQoJCQlzZWxmOjokaXNTdHVkZW50ID0gdHJ1ZTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqCWNoZWNrIGF0dGVuZGFuY2Ugb2YgdGhpcyByZWxhdGlvbg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tBdHRlbmRhbmNlKCRldmVudCwgJHByb2dyYW0sICRjb3Vyc2UgPSBudWxsLCAkc2Vzc2lvbiA9IG51bGwsICR1c2VySWQgPSBudWxsLCAkd2hhdCA9ICdpZCcpDQoJew0KCQkvLyBzZXQgdXNlciB0byB0YXJnZXQNCgkJaWYoISR1c2VySWQpDQoJCXsNCgkJCSR1c2VySWQgPSBzZWxmOjokdXNlci0+aWQ7DQoJCX0NCgkJDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgkd2hhdCkpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXR0ZW5kYW5jZScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc3R1ZGVudHVzZXInKSAuICcgPSAnLiAoaW50KSR1c2VySWQpOw0KCQlpZiAoJHNlc3Npb24pDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Nlc3Npb24nKSAuICcgPSAnLiAoaW50KSRzZXNzaW9uKTsNCgkJfQ0KCQlpZiAoJGNvdXJzZSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnY291cnNlJykgLiAnID0gJy4gKGludCkkY291cnNlKTsNCgkJfQ0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwcm9ncmFtJykgLiAnID0gJy4gKGludCkkcHJvZ3JhbSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2V2ZW50JykgLiAnID0gJy4gKGludCkkZXZlbnQpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCS8qKg0KCSAqCWNoZWNrIGF0dGVuZGFuY2Ugb2YgYW55IGdpdmVuIHNwZWN0DQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjaGVja0F0dGVuZGFuY2VEeW5hbWljKCRkYXRhKQ0KCXsNCgkJJGF0dGVuZGFuY2UgPSBmYWxzZTsNCgkJLy8gc3dpdGNoIG9uIGFjdGl2ZSB0eXBlcw0KCQlzd2l0Y2ggKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfcmVsZWFzZV90eXBlKQ0KCQl7DQoJCQljYXNlIDA6DQoJCQkJLy8gaW1tZWRpYXRseQ0KCQkJCSRhdHRlbmRhbmNlID0gc2VsZjo6Y2hlY2tBdHRlbmRhbmNlKCRkYXRhLT5ldmVudF9pZCwkZGF0YS0+cHJvZ3JhbSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJLy8gYWZ0ZXIgdGFyZ2V0DQoJCQljYXNlIDM6DQoJCQkJLy8gb24gdGFyZ2V0DQoJCQkJc3dpdGNoICgkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2VfdGFyZ2V0KQ0KCQkJCXsNCgkJCQkJY2FzZSAxOg0KCQkJCQkJLy8gU2Vzc2lvbg0KCQkJCQkJJGF0dGVuZGFuY2UgPSBzZWxmOjpjaGVja0F0dGVuZGFuY2UoJGRhdGEtPmV2ZW50X2lkLCRkYXRhLT5wcm9ncmFtLCRkYXRhLT5jb3Vyc2UsJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9yZWxlYXNlX3Nlc3Npb24pOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgMjoNCgkJCQkJCS8vIERheQ0KCQkJCQkJJHNlc3Npb25zID0gc2VsZjo6Z2V0U2Vzc2lvbnMoJGRhdGEtPnByb2dyYW0sJGRhdGEtPmNvdXJzZSwkZGF0YS0+ZGF5KTsNCgkJCQkJCS8vIG5vdyBjaGVjayBpZiBhbnkgYXR0YW5kZWFuY2UgZm9yIHRoaXMgZGF5IHdhcyBsb2dlZA0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXNzaW9ucykpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJHNlc3Npb25zIGFzICRzZXNzaW9uKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGF0dGVuZGFuY2UgPSBzZWxmOjpjaGVja0F0dGVuZGFuY2UoJGRhdGEtPmV2ZW50X2lkLCRkYXRhLT5wcm9ncmFtLCRkYXRhLT5jb3Vyc2UsJHNlc3Npb24pOw0KCQkJCQkJCQkvLyBpZiBvbmUgaXMgZm91bmQgYnJlYWsNCgkJCQkJCQkJaWYgKCRhdHRlbmRhbmNlKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlicmVhazsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlIDM6DQoJCQkJCQkvLyBDb3Vyc2UNCgkJCQkJCSRhdHRlbmRhbmNlID0gc2VsZjo6Y2hlY2tBdHRlbmRhbmNlKCRkYXRhLT5ldmVudF9pZCwkZGF0YS0+cHJvZ3JhbSwkZGF0YS0+Y291cnNlKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlIDQ6DQoJCQkJCQkvLyBQcm9ncmFtDQoJCQkJCQkkYXR0ZW5kYW5jZSA9IHNlbGY6OmNoZWNrQXR0ZW5kYW5jZSgkZGF0YS0+ZXZlbnRfaWQsJGRhdGEtPnByb2dyYW0pOw0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJZGVmYXVsdCA6DQoJCQkJLy8gdGhlIGRlZmF1bHQNCgkJCQkkYXR0ZW5kYW5jZSA9IGZhbHNlOw0KCQkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiAkYXR0ZW5kYW5jZTsNCgl9DQoJDQoJLyoqDQoJICoJY2hlY2sgc2Vzc2lvbnMgb2YgdGhpcyByZWxhdGlvbg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbnMoJHByb2dyYW0sICRjb3Vyc2UgPSBudWxsLCAkZGF5ID0gbnVsbCkNCgl7DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9zZXNzaW9uJykpOw0KCQlpZiAoJGNvdXJzZSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnY291cnNlJykgLiAnID0gJy4gKGludCkkY291cnNlKTsNCgkJfQ0KCQlpZiAoJGRheSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZGF5JykgLiAnID0gJy4gKGludCkkZGF5KTsNCgkJfQ0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwcm9ncmFtJykgLiAnID0gJy4gKGludCkkcHJvZ3JhbSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkQ29sdW1uKCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCVRoZSB0YXJnZXQgdXNlci9zdHVkZW50DQoJKiovDQoJcHVibGljIHN0YXRpYyAkdXNlcjsNCg0KCS8qKg0KCSogCVRoZSBBc3Nlc3NtZW50cw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGFzc2Vzc21lbnRzID0gYXJyYXkoKTsNCgkNCgkvKioNCgkqIAlUaGUgYnVpbGQgY2hlY2tpbmcgZGF0ZXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRub3REYXRlX29uZTsNCgkNCgkvKioNCgkgKglHZXQgQXNzZXNzbWVudHMNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFzc2Vzc21lbnRzKCRkYXRhID0gbnVsbCwgJHVzZXJJZCA9IG51bGwpDQoJew0KCQkvLyBzZXQgdGhlIGNoZWNoaW5nIHRpbWUNCgkJc2VsZjo6JG5vdERhdGVfb25lID0gc3RydG90aW1lKCcwMDAwLTAwLTAwJyk7DQoJCS8vIHNldCB1c2VyIHRvIHRhcmdldA0KCQlpZigkdXNlcklkKQ0KCQl7DQoJCQlzZWxmOjokdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQkvLyBtYWtlIHN1cmUgdGhpcyBpcyBhIHN0dWRlbnQNCgkJc2VsZjo6dXNlcklzKHNlbGY6OiR1c2VyLT5pZCk7DQoJCWlmIChzZWxmOjokaXNTdHVkZW50KQ0KCQl7DQoJCQkvLyBzZXQgYXZhaWxhYmxlIGFzc2Vzc21lbnRzDQoJCQkkYXZhbGlhYmxlID0gc2VsZjo6Z2V0QXZhbGlhYmxlQXNzZXNzbWVudHMoJGRhdGEpOw0KCQkJLy8gc2V0IGFzc2Vzc21lbnRzIHN0YXRlDQoJCQlzZWxmOjpzZXRBc3Nlc3NtZW50c1N0YXRlKCRhdmFsaWFibGUpOw0KCQkJLy8gcmV0dXJuIHRoZSBhc3Nlc3NtZW50cw0KCQkJcmV0dXJuIHNlbGY6OiRhc3Nlc3NtZW50czsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCS8qKg0KCSAqCXNldCBhc3Nlc3NtZW50cyBzdGF0ZQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QXNzZXNzbWVudHNTdGF0ZSgkYXNzZXNzbWVudHMpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGFzc2Vzc21lbnRzKSkNCgkJew0KCQkJLy8gYWx3YXlzIHJlc2V0DQoJCQkkYXNzZXNzbWVudHNfYnVja2V0ID0gYXJyYXkoKTsNCgkJCS8vIGJ1aWxkIHJldHVybiBhcnJheQ0KCQkJc2VsZjo6JGFzc2Vzc21lbnRzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRhc3Nlc3NtZW50cyBhcyAka2V5ID0+ICRkYXlzKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF5cykpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkZGF5cyBhcyAkZGF5ID0+ICR0eXBlcykNCgkJCQkJew0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0eXBlcykpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJHR5cGVzIGFzICR0eXBlID0+ICRkYXRhKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gY2hlY2sgaWYgZGF0YSBpcyByZWxlYXNlZCAmIGFjdGl2ZSAmIGdldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhc3Nlc3NtZW50DQoJCQkJCQkJCSRyYSA9IHNlbGY6OmdldEFzc2Vzc21lbnRTdGF0dXMoJGRhdGEpOw0KCQkJCQkJCQkkZGF0YS0+a2V5ID0gJHJhWydpZCddOw0KCQkJCQkJCQkkZGF0YS0+b3JkZXIgPSAgJHJhWydzdGFydCddOw0KCQkJCQkJCQkkZGF0YS0+YWN0aXZlID0gJHJhWydzdGF0dXMnXTsNCgkJCQkJCQkJJGRhdGEtPnN0YXJ0ID0gZGF0ZSgibCBqUyBcb2YgRiBZIiwkcmFbJ3N0YXJ0J10pOw0KCQkJCQkJCQkkZGF0YS0+ZW5kID0gKCRyYVsnZW5kJ10gIT0gc2VsZjo6JG5vdERhdGVfb25lICYmICRyYVsnZW5kJ10pID8gZGF0ZSgibCBqUyBcb2YgRiBZIiwkcmFbJ2VuZCddKTpmYWxzZTsNCgkJCQkJCQkJJGRhdGEtPmNvdXJzZV9uYW1lID0gc2VsZjo6Z2V0VmFyKCdjb3Vyc2UnLCRkYXRhLT5jb3Vyc2UsJ2lkJywnbmFtZScpOw0KCQkJCQkJCQkkZGF0YS0+ZGF5X25hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRkYXRhLT5kYXksJ1d3Jyk7DQoJCQkJCQkJCS8vIGZpcnN0IGluc3VyZSB0aGF0IHRoZXJlIGlzIG5vdCBhbm90aGVyIGV2ZW50IHdpdGggdGhlIHNhbWUgbmFtZQ0KCQkJCQkJCQkkZGF0YS0+ZXZlbnRfbmFtZSA9IHNlbGY6OmdldEV2ZW50VW5pcXVlTmFtZSgkZGF0YS0+ZXZlbnRfbmFtZSwgJGRhdGEtPmV2ZW50X2lkKTsNCgkJCQkJCQkJaWYgKCFpc3NldChzZWxmOjokYXNzZXNzbWVudHNbJGRhdGEtPmV2ZW50X25hbWVdWydwcm9ncmFtX25hbWUnXSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ3Byb2dyYW1fbmFtZSddID0gJGRhdGEtPnByb2dyYW1fbmFtZTsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ3Byb2dyYW1fYWNyb255bSddID0gJGRhdGEtPnByb2dyYW1fYWNyb255bTsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ3Byb2dyYW1faWNvbiddID0gJGRhdGEtPnByb2dyYW1faWNvbjsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ3Byb2dyYW1fY3JlZGl0X3N5c3RlbSddID0gJGRhdGEtPnByb2dyYW1fY3JlZGl0X3N5c3RlbTsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ2lkJ10gPSAkZGF0YS0+ZXZlbnRfaWQ7DQoJCQkJCQkJCQlzZWxmOjokYXNzZXNzbWVudHNbJGRhdGEtPmV2ZW50X25hbWVdWydldmVudF9uYW1lJ10gPSAkZGF0YS0+ZXZlbnRfbmFtZTsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ2FjdGl2ZSddID0gMDsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBsb2FkIGFzc2Vzc21lbnRzDQoJCQkJCQkJCSRhc3Nlc3NtZW50c19idWNrZXRbXSA9ICRkYXRhOwkNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCS8vIGxldHMgc29ydCB0aGVzZSBhc3Nlc3NtZW50cw0KCQlpZiAoaXNzZXQoJGFzc2Vzc21lbnRzX2J1Y2tldCkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGFzc2Vzc21lbnRzX2J1Y2tldCkpDQoJCXsNCgkJCXNlbGY6OnNvcnRfYXNzZXNzbWVudHMoJGFzc2Vzc21lbnRzX2J1Y2tldCwgYXJyYXkoJ2RheScsJ29yZGVyJykpOw0KCQkJZm9yZWFjaCAoJGFzc2Vzc21lbnRzX2J1Y2tldCBhcyAkdmFsdWUpDQoJCQl7DQoJCQkJc2VsZjo6JGFzc2Vzc21lbnRzWyR2YWx1ZS0+ZXZlbnRfbmFtZV1bJ3ZhbHVlcyddWyR2YWx1ZS0+Y291cnNlX25hbWVdWyRkYXRhLT5kYXlfbmFtZV1bJHZhbHVlLT5hc3Nlc3NtZW50X3R5cGVfbmFtZV1bJHZhbHVlLT5rZXldID0gJHZhbHVlOw0KCQkJCS8vIGNvdW50IHRoZSBudW1iZXIgb2YgYWN0aXZlIHBlciBldmVudA0KCQkJCWlmICgkdmFsdWUtPmFjdGl2ZSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skdmFsdWUtPmV2ZW50X25hbWVdWydhY3RpdmUnXSsrOw0KCQkJCX0NCgkJCX0NCgkJCXNlbGY6OnNvcnRfYXNzZXNzbWVudHMoJGFzc2Vzc21lbnRzX2J1Y2tldCwgYXJyYXkoJ29yZGVyJywnYXNzZXNzbWVudF90eXBlX25hbWUnKSk7DQoJCQlmb3JlYWNoICgkYXNzZXNzbWVudHNfYnVja2V0IGFzICR2YWx1ZSkNCgkJCXsNCgkJCQkkbW9udGggPSBkYXRlKCJGIFkiLCR2YWx1ZS0+b3JkZXIpOw0KCQkJCSR2YWx1ZS0+c3RhcnRfZGF5ID0gZGF0ZSgibCBqUyIsJHZhbHVlLT5vcmRlcik7DQoJCQkJc2VsZjo6JGFzc2Vzc21lbnRzWyR2YWx1ZS0+ZXZlbnRfbmFtZV1bJ2NhbGVuZGVyJ11bJG1vbnRoXVskdmFsdWUtPnN0YXJ0X2RheV1bJHZhbHVlLT5rZXldID0gJHZhbHVlOw0KCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skdmFsdWUtPmV2ZW50X25hbWVdWyd0eXBlcyddWyR2YWx1ZS0+YXNzZXNzbWVudF90eXBlX2lkXSA9ICR2YWx1ZS0+YXNzZXNzbWVudF90eXBlX25hbWU7DQoJCQl9DQoJCQl1bnNldCgkYXNzZXNzbWVudHNfYnVja2V0KTsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGV2ZW50VW5pcXVlTmFtZSA9IGFycmF5KCk7DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50VW5pcXVlTmFtZSgkbmFtZSwgJGlkKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgb3RoZXIgZXZlbnRzIHdpdGggc2FtZSBuYW1lIGV4aXN0DQoJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50VW5pcXVlTmFtZVskbmFtZV1bJGlkXSkpDQoJCXsNCgkJCSRuciA9IDA7ICRuZXcgPSAnJzsNCgkJCWlmIChpc3NldChzZWxmOjokZXZlbnRVbmlxdWVOYW1lWyRuYW1lXSkpDQoJCQl7DQoJCQkJJG5yID0gY291bnQoc2VsZjo6JGV2ZW50VW5pcXVlTmFtZVskbmFtZV0pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRldmVudFVuaXF1ZU5hbWVbJG5hbWVdID0gYXJyYXkoKTsNCgkJCX0NCgkJCWlmICgwICE9ICRucikNCgkJCXsNCgkJCQkkbnIrKzsNCgkJCQkkbmV3ID0gJyAoJyAuICRuciAuICcpJzsNCgkJCX0NCgkJCXNlbGY6OiRldmVudFVuaXF1ZU5hbWVbJG5hbWVdWyRpZF0gPSAkbmFtZSAuICRuZXc7IA0KCQl9DQoJCXJldHVybiBzZWxmOjokZXZlbnRVbmlxdWVOYW1lWyRuYW1lXVskaWRdOw0KCX0NCgkNCgkvKioNCgkgKglzb3J0IGFzc2Vzc21lbnRzIGJ5IGRheSBhbmQgZGF0ZS9vcmRlcg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc29ydF9hc3Nlc3NtZW50cygmJGFzc2Vzc21lbnRzLCAkcHJvcHMpDQoJew0KCQl1c29ydCgkYXNzZXNzbWVudHMsIGZ1bmN0aW9uKCRhLCAkYikgdXNlICgkcHJvcHMpIHsNCgkJCWlmKCRhLT4kcHJvcHNbMF0gPT0gJGItPiRwcm9wc1swXSkNCgkJCXsNCgkJCQlyZXR1cm4gJGEtPiRwcm9wc1sxXSA+ICRiLT4kcHJvcHNbMV0gPyAxIDogLTE7DQoJCQl9DQoJCQlyZXR1cm4gJGEtPiRwcm9wc1swXSA+ICRiLT4kcHJvcHNbMF0gPyAxIDogLTE7DQoJCX0pOw0KCX0NCgkNCgkvKioNCgkgKglzZXQgYXNzZXNzbWVudCBzdGF0ZSBpbiBEQg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QXNzZXNzbWVudFN0YXRlKCRyZWxlYXNlZEFjdGl2ZSwgJGRiX3JlbGVhc2VkQWN0aXZlLCAkZXZlbnQsICRwcm9ncmFtLCAkY291cnNlLCAkZGF5LCAkYXNzZXNzbWVudF90eXBlLCAkdXNlcklkID0gbnVsbCkNCgl7DQoJCSRzdGF0dXMgPSAwOw0KCQkkY2hlY2sgPSAwOw0KCQkvLyBmaXJzdCBjaGVjayBpZiB1cGRhdGUgaXMgbmVlZGVkDQoJCWlmICgkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddKQ0KCQl7DQoJCQkkY2hlY2sgPSAyOw0KCQkJKyskc3RhdHVzOw0KCQl9DQoJCWlmICgkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddKQ0KCQl7DQoJCQkkY2hlY2sgPSAyOw0KCQkJKyskc3RhdHVzOw0KCQl9DQoJCWlmICghaXNzZXQoJGRiX3JlbGVhc2VkQWN0aXZlWydpZCddKSB8fCAkc3RhdHVzICE9ICRjaGVjayB8fCAkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gIT0gJGRiX3JlbGVhc2VkQWN0aXZlWydzdGFydCddIHx8ICRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10gIT0gJGRiX3JlbGVhc2VkQWN0aXZlWydlbmQnXSkNCgkJew0KCQkJLy8gc2V0IHVzZXIgdG8gdGFyZ2V0DQoJCQlpZighJHVzZXJJZCkNCgkJCXsNCgkJCQkkdXNlcklkID0gc2VsZjo6JHVzZXItPmlkOw0KCQkJfQ0KCQkJLy8gc2V0IHRoZSBkYXRlIG9iamVjdA0KCQkJJGRhdGUgPSBGYWN0b3J5OjpnZXREYXRlKCk7DQoJCQkvLyBzZXQgdGhlIHN0YXJ0IGRhdGUgdG8gc3FsIGlmIHNldA0KCQkJJHN0YXJ0ID0gZmFsc2U7DQoJCQlpZiAoJHJlbGVhc2VkQWN0aXZlWydzdGFydCddICE9IHNlbGY6OiRub3REYXRlX29uZSAmJiAkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pDQoJCQl7DQoJCQkJJHJlbGVhc2VkQWN0aXZlWydzdGFydCddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pOw0KCQkJCSRzdGFydCA9IHRydWU7DQoJCQl9DQoJCQkvLyBzZXQgdGhlIGVuZCBkYXRlIHRvIHNxbCBpZiBzZXQNCgkJCSRlbmQgPSBmYWxzZTsNCgkJCWlmICgkcmVsZWFzZWRBY3RpdmVbJ2VuZCddICE9IHNlbGY6OiRub3REYXRlX29uZSAmJiAkcmVsZWFzZWRBY3RpdmVbJ2VuZCddKQ0KCQkJew0KCQkJCSRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10pOw0KCQkJCSRlbmQgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gY29udmVydCB0byAxIG9yIDANCgkJCWlmICgkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddKQ0KCQkJew0KCQkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhdHVzJ10gPSAxOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhdHVzJ10gPSAwOw0KCQkJfQ0KCQkJLy8gZ2V0IGJhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQlpZiAoaXNzZXQoJGRiX3JlbGVhc2VkQWN0aXZlWydpZCddKSAmJiAkZGJfcmVsZWFzZWRBY3RpdmVbJ2lkJ10pDQoJCQl7DQoJCQkJJGRiX3JlbGVhc2VkQWN0aXZlWyd2ZXJzaW9uJ10rKzsNCgkJCQkvLyB1cGRhdGUgZW50cnkNCgkJCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJCS8vIE11c3QgYmUgYSB2YWxpZCBwcmltYXJ5IGtleSB2YWx1ZS4NCgkJCQkkb2JqZWN0LT5pZCA9ICRkYl9yZWxlYXNlZEFjdGl2ZVsnaWQnXTsNCgkJCQlpZiAoJHN0YXJ0KQ0KCQkJCXsNCgkJCQkJJG9iamVjdC0+cmVsZWFzZV9kYXRlCT0gJHJlbGVhc2VkQWN0aXZlWydzdGFydCddOw0KCQkJCX0NCgkJCQlpZiAoJGVuZCkNCgkJCQl7DQoJCQkJCSRvYmplY3QtPmFjdGl2ZV9kYXRlCT0gJHJlbGVhc2VkQWN0aXZlWydlbmQnXTsNCgkJCQl9DQoJCQkJJG9iamVjdC0+YWN0aXZlCQkJPSAkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddOw0KCQkJCSRvYmplY3QtPm1vZGlmaWVkCQk9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRvYmplY3QtPm1vZGlmaWVkX2J5CQk9ICR1c2VySWQ7DQoJCQkJJG9iamVjdC0+dmVyc2lvbgkJPSAkZGJfcmVsZWFzZWRBY3RpdmVbJ3ZlcnNpb24nXTsNCgkJCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgdXNlcnMgdGFibGUgdXNpbmcgaWQgYXMgdGhlIHByaW1hcnkga2V5Lg0KCQkJCSRkb25lID0gJGRiLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9hc3Nlc3NtZW50X3N0YXR1cycsICRvYmplY3QsICdpZCcpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCXJldHVybiAkb2JqZWN0LT5pZDsNCgkJCQl9DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gY3JlYXRlIGVudHJ5DQoJCQkJJG9iamVjdCA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQlpZiAoJHN0YXJ0KQ0KCQkJCXsNCgkJCQkJJG9iamVjdC0+cmVsZWFzZV9kYXRlID0gJHJlbGVhc2VkQWN0aXZlWydzdGFydCddOw0KCQkJCX0NCgkJCQlpZiAoJGVuZCkNCgkJCQl7DQoJCQkJCSRvYmplY3QtPmFjdGl2ZV9kYXRlID0gJHJlbGVhc2VkQWN0aXZlWydlbmQnXTsNCgkJCQl9DQoJCQkJJG9iamVjdC0+YWN0aXZlCQkJPSAkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddOw0KCQkJCSRvYmplY3QtPnN0dWRlbnR1c2VyCQk9ICR1c2VySWQ7DQoJCQkJJG9iamVjdC0+YXNzZXNzbWVudF90eXBlCT0gJGFzc2Vzc21lbnRfdHlwZTsNCgkJCQkkb2JqZWN0LT5jb3Vyc2UJCQk9ICRjb3Vyc2U7DQoJCQkJJG9iamVjdC0+ZGF5CQkJPSAkZGF5Ow0KCQkJCSRvYmplY3QtPmV2ZW50CQkJPSAkZXZlbnQ7DQoJCQkJJG9iamVjdC0+cHJvZ3JhbQkJPSAkcHJvZ3JhbTsNCgkJCQkkb2JqZWN0LT5jcmVhdGVkCQk9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRvYmplY3QtPmNyZWF0ZWRfYnkJCT0gJHVzZXJJZDsNCgkJCQkkb2JqZWN0LT52ZXJzaW9uCQk9IDE7DQoJCQkJJG9iamVjdC0+YWNjZXNzCQk9IDE7IC8vIFRPRE8gc2hvdWxkIGJlIHRoZSByZWdpc3RlcmVkIHZpZXcgYWNjZXNzDQoJCQkJLy8gSW5zZXJ0IHRoZSBvYmplY3QgaW50byB0aGUgdXNlciBwcm9maWxlIHRhYmxlLg0KCQkJCSRkb25lID0gJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9hc3Nlc3NtZW50X3N0YXR1cycsICRvYmplY3QpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCSRuZXdJZCA9ICAkZGItPmluc2VydGlkKCk7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCQlzZWxmOjpzZXRBc3NldCgkbmV3SWQsJ2Fzc2Vzc21lbnRfc3RhdHVzJyk7DQoJCQkJCXJldHVybiAkbmV3SWQ7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmIChpc3NldCgkZGJfcmVsZWFzZWRBY3RpdmVbJ2lkJ10pKQ0KCQl7DQoJCQlyZXR1cm4gJGRiX3JlbGVhc2VkQWN0aXZlWydpZCddOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICoJY2hlY2sgaWYgYXNzZXNzbWVudHMgYXJlIHJlbGVhc2VkIGFuZCBhY3RpdmUNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEFzc2Vzc21lbnRTdGF0dXMoJiRkYXRhKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBhc3Nlc21lbnQgd2FzIGFscmVhZHkgc2V0DQoJCSRkYl9yZWxlYXNlZEFjdGl2ZQkJPSBzZWxmOjpkYkFzc2Vzc21lbnRTdGF0dXMoJGRhdGEpOw0KCQkkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10JPSBzdHJ0b3RpbWUoJGRiX3JlbGVhc2VkQWN0aXZlWydzdGFydCddKTsNCgkJJGRiX3JlbGVhc2VkQWN0aXZlWydlbmQnXQk9IHN0cnRvdGltZSgkZGJfcmVsZWFzZWRBY3RpdmVbJ2VuZCddKTsNCgkJLy8gZGVmYXVsdHMNCgkJJGFjdGl2ZQkJPSB0cnVlOw0KCQkkcmVsZWFzZQk9IGZhbHNlOw0KCQkkcmVsZWFzZWRBY3RpdmUgPSBhcnJheSgnc3RhdHVzJyA9PiBmYWxzZSwgJ3N0YXJ0JyA9PiBzdHJ0b3RpbWUoJzAwMDAtMDAtMDAnKSwgJ2VuZCcgPT4gc3RydG90aW1lKCcwMDAwLTAwLTAwJykpOw0KCQkkZGF0YS0+bm90X3JlbGVhc2Vfbm90ZSA9IG51bGw7DQoJCSRkYXRhLT5ub3RfYWN0aXZlX25vdGUgPSBudWxsOw0KCQkkYXBwbGljYXRpb24JPSBzZWxmOjpjaGVja0V2ZW50QXBwbGljYXRpb24oJGRhdGEtPmV2ZW50X2lkKTsNCgkJLy8gc2V0IHRoZSBkYXRlIGZvciBub3cNCgkJJGRhdGEtPnRvZGF5CT0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1VuaXgoKTsNCgkJLy8gY2hlY2sgaWYgc3VibWlzdGlvbiB3YXMgYWxyZWFkeSBtYWRlDQoJCSRkYXRhLT5zdWJtaXNzaW9uID0gc2VsZjo6Y2hlY2tTdWJtaXNzaW9uKCRkYXRhLT5ldmVudF9pZCwkZGF0YS0+cHJvZ3JhbSwkZGF0YS0+Y291cnNlLCRkYXRhLT5kYXksJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9pZCk7DQoJCS8vIGFkZCB0aGUgYXR0ZW5kYW5jZSBzd2l0Y2gNCgkJJGRhdGEtPmF0dGVuZGFuY2UgPSAoJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9hdHRlbmRhbmNlID09IDEpID8gc2VsZjo6Y2hlY2tBdHRlbmRhbmNlRHluYW1pYygkZGF0YSk6dHJ1ZTsNCgkJLy8gb25seSBjaGVjayBpZiBub3QgcmVsZWFzZWQNCgkJaWYgKCRkYl9yZWxlYXNlZEFjdGl2ZVsnc3RhdHVzJ10gIT0gMSkNCgkJew0KCQkJLy8gY2hlY2sgaWYgdGhlIHJlbGVhc2UgYWN0aXZlIHN0YXJ0IHNob3VsZCBiZSBzZXQNCgkJCWlmICgkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPT0gc2VsZjo6JG5vdERhdGVfb25lIHx8ICEkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pDQoJCQl7DQoJCQkJJGdldERhdGUgPSB0cnVlOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRnZXREYXRlID0gZmFsc2U7DQoJCQl9DQoJCQkvLyBzd2l0Y2ggb24gcmVsZWFzZSB0eXBlcw0KCQkJc3dpdGNoICgkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2VfdHlwZSkNCgkJCXsNCgkJCQljYXNlIDA6DQoJCQkJCS8vIGltbWVkaWF0bHkNCgkJCQkJJHJlbGVhc2UgPSAoJGRhdGEtPmF0dGVuZGFuY2UpID8gJGFwcGxpY2F0aW9uOiRkYXRhLT5hdHRlbmRhbmNlOw0KCQkJCQlpZiAoISRyZWxlYXNlKQ0KCQkJCQl7DQoJCQkJCQkkZGF0YS0+bm90X3JlbGVhc2Vfbm90ZSA9ICdub19hdHRlbmRhbmNlJzsNCgkJCQkJfQ0KCQkJCQkvLyBzZXQgc3RhcnQNCgkJCQkJaWYgKCRnZXREYXRlKQ0KCQkJCQl7DQoJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPSBzZWxmOjokZXZlbnRGaXJzdERhdGU7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPSAkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyBiZWZvcmUgdGFyZ2V0DQoJCQkJCWlmICgkZ2V0RGF0ZSkNCgkJCQkJew0KCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydzdGFydCddID0gc2VsZjo6Z2V0VGFyZ2V0UmVsZWFzZURhdGUoJGRhdGEsJ2JlZm9yZScpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydzdGFydCddID0gJGRiX3JlbGVhc2VkQWN0aXZlWydzdGFydCddOw0KCQkJCQl9DQoJCQkJCWlmICgkYXBwbGljYXRpb24gJiYgJGRhdGEtPmF0dGVuZGFuY2UpDQoJCQkJCXsNCgkJCQkJCWlmICgkZGF0YS0+dG9kYXkgPiAkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pDQoJCQkJCQl7DQoJCQkJCQkJJHJlbGVhc2UgPSB0cnVlOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCSRkYXRhLT5ub3RfcmVsZWFzZV9ub3RlID0gJ2JlZm9yZV9vcGVuX2RhdGUnOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGRhdGEtPm5vdF9yZWxlYXNlX25vdGUgPSAnbm9fYXR0ZW5kYW5jZSc7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQkvLyBhZnRlciB0YXJnZXQNCgkJCQkJaWYgKCRnZXREYXRlKQ0KCQkJCQl7DQoJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPSBzZWxmOjpnZXRUYXJnZXRSZWxlYXNlRGF0ZSgkZGF0YSwnYWZ0ZXInKTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXSA9ICRkYl9yZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXTsNCgkJCQkJfQ0KCQkJCQlpZiAoJGFwcGxpY2F0aW9uICYmICRkYXRhLT5hdHRlbmRhbmNlKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJGRhdGEtPnRvZGF5ID4gJHJlbGVhc2VkQWN0aXZlWydzdGFydCddKQ0KCQkJCQkJew0KCQkJCQkJCSRyZWxlYXNlID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkZGF0YS0+bm90X3JlbGVhc2Vfbm90ZSA9ICdiZWZvcmVfb3Blbl9kYXRlJzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRkYXRhLT5ub3RfcmVsZWFzZV9ub3RlID0gJ25vX2F0dGVuZGFuY2UnOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMzoNCgkJCQkJLy8gb24gdGFyZ2V0DQoJCQkJCWlmICgkZ2V0RGF0ZSkNCgkJCQkJew0KCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydzdGFydCddID0gc2VsZjo6Z2V0VGFyZ2V0UmVsZWFzZURhdGUoJGRhdGEsJ29uJyk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPSAkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J107DQoJCQkJCX0NCgkJCQkJaWYgKCRhcHBsaWNhdGlvbiAmJiAkZGF0YS0+YXR0ZW5kYW5jZSkNCgkJCQkJew0KCQkJCQkJaWYgKCRkYXRhLT50b2RheSA+ICRyZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXSkNCgkJCQkJCXsNCgkJCQkJCQkkcmVsZWFzZSA9IHRydWU7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJGRhdGEtPm5vdF9yZWxlYXNlX25vdGUgPSAnYmVmb3JlX29wZW5fZGF0ZSc7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkZGF0YS0+bm90X3JlbGVhc2Vfbm90ZSA9ICdub19hdHRlbmRhbmNlJzsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRyZWxlYXNlID0gdHJ1ZTsNCgkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXSA9ICRkYl9yZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXTsNCgkJfQ0KCQkvLyBvbmx5IGNoZWNrIGlmIGFjdGl2ZQ0KCQlpZiAoJGRiX3JlbGVhc2VkQWN0aXZlWydzdGF0dXMnXSA9PSAxIHx8ICRyZWxlYXNlKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGUgcmVsZWFzZSBhY3RpdmUgc3RhcnQgc2hvdWxkIGJlIHNldA0KCQkJaWYgKCRkYl9yZWxlYXNlZEFjdGl2ZVsnZW5kJ10gPT0gc2VsZjo6JG5vdERhdGVfb25lIHx8ICEkZGJfcmVsZWFzZWRBY3RpdmVbJ2VuZCddKQ0KCQkJew0KCQkJCSRnZXREYXRlID0gdHJ1ZTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkZ2V0RGF0ZSA9IGZhbHNlOw0KCQkJfQ0KCQkJLy8gc3dpdGNoIG9uIGFjdGl2ZSB0eXBlDQoJCQlzd2l0Y2ggKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYWN0aXZlX3R5cGUpDQoJCQl7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyB1bnRpbCBzdWJtaXNzaW9uDQoJCQkJCWlmICgkZGF0YS0+c3VibWlzc2lvbikNCgkJCQkJew0KCQkJCQkJJGFjdGl2ZSA9IGZhbHNlOw0KCQkJCQkJJGRhdGEtPm5vdF9hY3RpdmVfbm90ZSA9ICdzdWJtaXR0ZWQnOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMjoNCgkJCQkJLy8gdW50aWwgc3VibWlzc2lvbiBvciBwZXJpb2QgYWZ0ZXIgdGFyZ2V0DQoJCQkJCWlmICgkZ2V0RGF0ZSkNCgkJCQkJew0KCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydlbmQnXSA9IHNlbGY6OmdldFRhcmdldEFjdGl2ZURhdGUoJGRhdGEsICdhZnRlcicsJHJlbGVhc2VkQWN0aXZlWydzdGFydCddKTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCS8vIG11c3QgYmUgY2hlY2tlZCBldmVyeSB0aW1lIHNpbmNlIGl0IGlzIGR5bmFtaWMNCgkJCQkJCWlmICg2ID09ICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYWN0aXZlX3RhcmdldCkNCgkJCQkJCXsNCgkJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ2VuZCddID0gc2VsZjo6Z2V0VGFyZ2V0QWN0aXZlRGF0ZSgkZGF0YSwgJ2FmdGVyJywkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCSRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10gPSAkZGJfcmVsZWFzZWRBY3RpdmVbJ2VuZCddOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWlmICgkZGF0YS0+c3VibWlzc2lvbikNCgkJCQkJew0KCQkJCQkJJGFjdGl2ZSA9IGZhbHNlOw0KCQkJCQkJJGRhdGEtPm5vdF9hY3RpdmVfbm90ZSA9ICdzdWJtaXR0ZWQnOw0KCQkJCQl9DQoJCQkJCWVsc2VpZiAoJGRhdGEtPnRvZGF5ID4gJHJlbGVhc2VkQWN0aXZlWydlbmQnXSkNCgkJCQkJew0KCQkJCQkJJGFjdGl2ZSA9IGZhbHNlOw0KCQkJCQkJJGRhdGEtPm5vdF9hY3RpdmVfbm90ZSA9ICdwYXN0X2Nsb3NlX2RhdGUnOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMzoNCgkJCQkJLy8gcGVyaW9kIGFmdGVyIHRhcmdldA0KCQkJCQlpZiAoJGdldERhdGUpDQoJCQkJCXsNCgkJCQkJCSRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10gPSBzZWxmOjpnZXRUYXJnZXRBY3RpdmVEYXRlKCRkYXRhLCAnYWZ0ZXInLCRyZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXSk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyBtdXN0IGJlIGNoZWNrZWQgZXZlcnkgdGltZSBzaW5jZSBpdCBpcyBkeW5hbWljDQoJCQkJCQlpZiAoNiA9PSAkZGF0YS0+YXNzZXNzbWVudF90eXBlX2FjdGl2ZV90YXJnZXQpDQoJCQkJCQl7DQoJCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydlbmQnXSA9IHNlbGY6OmdldFRhcmdldEFjdGl2ZURhdGUoJGRhdGEsICdhZnRlcicsJHJlbGVhc2VkQWN0aXZlWydzdGFydCddKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ2VuZCddID0gJGRiX3JlbGVhc2VkQWN0aXZlWydlbmQnXTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQlpZiAoJGRhdGEtPnRvZGF5ID4gJHJlbGVhc2VkQWN0aXZlWydlbmQnXSkNCgkJCQkJew0KCQkJCQkJJGFjdGl2ZSA9IGZhbHNlOw0KCQkJCQkJJGRhdGEtPm5vdF9hY3RpdmVfbm90ZSA9ICdwYXN0X2Nsb3NlX2RhdGUnOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHJlbGVhc2VkQWN0aXZlWydlbmQnXSA9ICRkYl9yZWxlYXNlZEFjdGl2ZVsnZW5kJ107DQoJCX0NCgkJLy8gc2V0IGdsb2JhbGx5IHJlbGVhc2Ugb2YgdGhpcyBhc3Nlc3NtZW50DQoJCWlmICgkcmVsZWFzZSAmJiAkYWN0aXZlKQ0KCQl7DQoJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddID0gdHJ1ZTsNCgkJCS8vIHNldCB0aGUgZGF0YWJhc2UgaWYgbmVlZGVkDQoJCQkkcmVsZWFzZWRBY3RpdmVbJ2lkJ10gPSBzZWxmOjpzZXRBc3Nlc3NtZW50U3RhdGUoJHJlbGVhc2VkQWN0aXZlLCRkYl9yZWxlYXNlZEFjdGl2ZSwkZGF0YS0+ZXZlbnRfaWQsJGRhdGEtPnByb2dyYW0sJGRhdGEtPmNvdXJzZSwkZGF0YS0+ZGF5LCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfaWQpOw0KCQl9DQoJCS8vIHNldCBnbG9iYWxseSBpbmFjdGl2aXR5IG9mIHRoaXMgYXNzZXNzbWVudA0KCQllbHNlDQoJCXsNCgkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhdHVzJ10gPSBmYWxzZTsNCgkJCS8vIHNldCB0aGUgZGF0YWJhc2UgaWYgbmVlZGVkDQoJCQkkcmVsZWFzZWRBY3RpdmVbJ2lkJ10gPSBzZWxmOjpzZXRBc3Nlc3NtZW50U3RhdGUoJHJlbGVhc2VkQWN0aXZlLCRkYl9yZWxlYXNlZEFjdGl2ZSwkZGF0YS0+ZXZlbnRfaWQsJGRhdGEtPnByb2dyYW0sJGRhdGEtPmNvdXJzZSwkZGF0YS0+ZGF5LCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfaWQpOw0KCQl9DQoJCXJldHVybiAkcmVsZWFzZWRBY3RpdmU7DQoJfQ0KCQ0KCS8qKg0KCSAqCWNoZWNrIGlmIGFzc2Vzc21lbnRzIGFscmVhZHkgc2V0IGluIERCDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBkYkFzc2Vzc21lbnRTdGF0dXMoJGRhdGEsJHVzZXJJZCA9IG51bGwpDQoJew0KCQkvLyBzZXQgdXNlciB0byB0YXJnZXQNCgkJaWYoISR1c2VySWQpDQoJCXsNCgkJCSR1c2VySWQgPSBzZWxmOjokdXNlci0+aWQ7DQoJCX0NCgkJDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCWFycmF5KCdpZCcsJ2FjdGl2ZScsJ3JlbGVhc2VfZGF0ZScsJ2FjdGl2ZV9kYXRlJywndmVyc2lvbicpLA0KCQkJYXJyYXkoJ2lkJywnc3RhdHVzJywnc3RhcnQnLCdlbmQnLCd2ZXJzaW9uJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXNzZXNzbWVudF9zdGF0dXMnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3N0dWRlbnR1c2VyJykgLiAnID0gJy4gKGludCkkdXNlcklkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYXNzZXNzbWVudF90eXBlJykgLiAnID0gJy4gKGludCkkZGF0YS0+YXNzZXNzbWVudF90eXBlX2lkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnY291cnNlJykgLiAnID0gJy4gKGludCkkZGF0YS0+Y291cnNlKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZGF5JykgLiAnID0gJy4gKGludCkkZGF0YS0+ZGF5KTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHJvZ3JhbScpIC4gJyA9ICcuIChpbnQpJGRhdGEtPnByb2dyYW0pOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdldmVudCcpIC4gJyA9ICcuIChpbnQpJGRhdGEtPmV2ZW50X2lkKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkQXNzb2MoKTsNCgkJfQ0KCQlyZXR1cm4gYXJyYXkoJ3N0YXR1cycgPT4gMCwgJ3N0YXJ0JyA9PiAnMDAwMC0wMC0wMCcsICdlbmQnID0+ICcwMDAwLTAwLTAwJyk7DQoJfQ0KCQ0KCS8qKg0KCSAqCVRhcmdldCBSZWxlYXNlIERhdGUNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRhcmdldFJlbGVhc2VEYXRlKCYkZGF0YSwkYWN0aW9uKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IHRoZSB0YXJnZXQgc3RhcnQgZGF0ZQ0KCQkkdGFnZXRTdGFydERhdGUgPSBmYWxzZTsNCgkJc3dpdGNoICgkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2VfdGFyZ2V0KQ0KCQl7DQoJCQljYXNlIDE6DQoJCQkJLy8gU2Vzc2lvbg0KCQkJCSRkYXkgPSBzZWxmOjpnZXRWYXIoJ3Nlc3Npb24nLCAkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2Vfc2Vzc2lvbiwgJ2lkJywgJ2RheScpOw0KCQkJCSRjb3Vyc2UgPSBzZWxmOjpnZXRWYXIoJ3Nlc3Npb24nLCAkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2Vfc2Vzc2lvbiwgJ2lkJywgJ2NvdXJzZScpOw0KCQkJCWlmICgnYWZ0ZXInID09ICRhY3Rpb24pDQoJCQkJew0KCQkJCQkkdGFnZXRTdGFydERhdGUgPSBzdHJ0b3RpbWUoc2VsZjo6Y2hlY2tBdHRlbmRhbmNlKCRkYXRhLT5ldmVudF9pZCwkZGF0YS0+cHJvZ3JhbSwkY291cnNlLCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfcmVsZWFzZV9zZXNzaW9uLHNlbGY6OiR1c2VyLT5pZCwnZGF0ZScpKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRhZ2V0U3RhcnREYXRlID0gKGlzc2V0KHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGRhdGEtPmV2ZW50X2lkXVskY291cnNlXVskZGF5XSkpID8gKHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGRhdGEtPmV2ZW50X2lkXVskY291cnNlXVskZGF5XSk6ZmFsc2U7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAyOg0KCQkJCS8vIERheQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokY291cnNlQnVja2V0WyRkYXRhLT5ldmVudF9pZF1bJGRhdGEtPmNvdXJzZV1bJGRhdGEtPmRheV0pKSA/IChzZWxmOjokY291cnNlQnVja2V0WyRkYXRhLT5ldmVudF9pZF1bJGRhdGEtPmNvdXJzZV1bJGRhdGEtPmRheV0pOmZhbHNlOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAzOg0KCQkJCS8vIENvdXJzZQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokY291cnNlRmlyc3REYXRlWyRkYXRhLT5jb3Vyc2VdKSkgPyAoc2VsZjo6JGNvdXJzZUZpcnN0RGF0ZVskZGF0YS0+Y291cnNlXSk6ZmFsc2U7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDQ6DQoJCQkJLy8gUHJvZ3JhbQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokZXZlbnRGaXJzdERhdGUpKSA/IChzZWxmOjokZXZlbnRGaXJzdERhdGUpOmZhbHNlOw0KCQkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBzZWxmOjpnZXRUYWdldERhdGUoJGRhdGEsJHRhZ2V0U3RhcnREYXRlLCdyZWxlYXNlJywkYWN0aW9uKTsNCgkJDQoJfQ0KCQ0KCS8qKg0KCSAqCVRhcmdldCBBY3RpdmUgVW50aWwgRGF0ZQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFyZ2V0QWN0aXZlRGF0ZSgmJGRhdGEsJGFjdGlvbiwkcmVsZWFzZURhdGUpDQoJew0KCQkvLyBmaXJzdCBnZXQgdGhlIHRhcmdldCBzdGFydCBkYXRlDQoJCSR0YWdldFN0YXJ0RGF0ZSA9IGZhbHNlOw0KCQlzd2l0Y2ggKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYWN0aXZlX3RhcmdldCkNCgkJew0KCQkJY2FzZSAxOg0KCQkJCS8vIFJlbGVhc2UNCgkJCQkkdGFnZXRTdGFydERhdGUgPSAkcmVsZWFzZURhdGU7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJLy8gU2Vzc2lvbg0KCQkJCSRkYXkgPSBzZWxmOjpnZXRWYXIoJ3Nlc3Npb24nLCAkZGF0YS0+YXNzZXNzbWVudF90eXBlX2FjdGl2ZV9zZXNzaW9uLCAnaWQnLCAnZGF5Jyk7DQoJCQkJJGNvdXJzZSA9IHNlbGY6OmdldFZhcignc2Vzc2lvbicsICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYWN0aXZlX3Nlc3Npb24sICdpZCcsICdjb3Vyc2UnKTsNCgkJCQlpZiAoJ2FmdGVyJyA9PSAkYWN0aW9uKQ0KCQkJCXsNCgkJCQkJJHRhZ2V0U3RhcnREYXRlID0gc3RydG90aW1lKHNlbGY6OmNoZWNrQXR0ZW5kYW5jZSgkZGF0YS0+ZXZlbnRfaWQsJGRhdGEtPnByb2dyYW0sJGNvdXJzZSwkZGF0YS0+YXNzZXNzbWVudF90eXBlX2FjdGl2ZV9zZXNzaW9uLHNlbGY6OiR1c2VyLT5pZCwnZGF0ZScpKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRhZ2V0U3RhcnREYXRlID0gKGlzc2V0KHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGRhdGEtPmV2ZW50X2lkXVskY291cnNlXVskZGF5XSkpID8gKHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGRhdGEtPmV2ZW50X2lkXVskY291cnNlXVskZGF5XSk6ZmFsc2U7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAzOg0KCQkJCS8vIERheQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokY291cnNlQnVja2V0WyRkYXRhLT5ldmVudF9pZF1bJGRhdGEtPmNvdXJzZV1bJGRhdGEtPmRheV0pKSA/IChzZWxmOjokY291cnNlQnVja2V0WyRkYXRhLT5ldmVudF9pZF1bJGRhdGEtPmNvdXJzZV1bJGRhdGEtPmRheV0pOmZhbHNlOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSA0Og0KCQkJCS8vIENvdXJzZQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokY291cnNlRmlyc3REYXRlWyRkYXRhLT5jb3Vyc2VdKSkgPyAoc2VsZjo6JGNvdXJzZUZpcnN0RGF0ZVskZGF0YS0+Y291cnNlXSk6ZmFsc2U7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDU6DQoJCQkJLy8gUHJvZ3JhbQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokZXZlbnRGaXJzdERhdGUpKSA/IChzZWxmOjokZXZlbnRGaXJzdERhdGUpOmZhbHNlOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSA2Og0KCQkJCS8vIE9wZW5lZCB0aGUgYXNzZXNzbWVudCAtIHVzZSBub3cgd2l0aCBhZGRlZCB0aW1lDQoJCQkJJHRhZ2V0U3RhcnREYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1VuaXgoKTsNCgkJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6Z2V0VGFnZXREYXRlKCRkYXRhLCR0YWdldFN0YXJ0RGF0ZSwnYWN0aXZlJywkYWN0aW9uKTsNCgkJDQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnZXREYXRlKCRkYXRhLCR0YWdldFN0YXJ0RGF0ZSwkdHlwZSwkYWN0aW9uKQ0KCXsNCgkJJHRhZ2V0RGF0ZSA9IHN0cnRvdGltZSgnMDAwMC0wMC0wMCcpOw0KCQkvLyBpZiB0YXJnZXQgc3RhcnQgZGF0ZSB3YXMgZm91bmQNCgkJaWYgKCR0YWdldFN0YXJ0RGF0ZSkNCgkJew0KCQkJaWYgKCRhY3Rpb24gIT0gJ29uJykNCgkJCXsNCgkJCQkvLyBzZXQgb3BlcmF0b3INCgkJCQkkb3BlcmF0b3IgPSAnKyc7DQoJCQkJaWYgKCRhY3Rpb24gPT0gJ2JlZm9yZScpDQoJCQkJew0KCQkJCQkkb3BlcmF0b3IgPSAnLSc7DQoJCQkJfQ0KCQkJCS8vIGdldCBwZXJpb2QgbGVuZ3RoDQoJCQkJc3dpdGNoICgkZGF0YS0+eydhc3Nlc3NtZW50X3R5cGVfJy4kdHlwZS4nX3BlcmlvZF90eXBlJ30pDQoJCQkJew0KCQkJCQljYXNlIDE6DQoJCQkJCQkvLyBtaW51dGVzDQoJCQkJCQkkdGFnZXREYXRlID0gc3RydG90aW1lKCRvcGVyYXRvci4kZGF0YS0+eydhc3Nlc3NtZW50X3R5cGVfJy4kdHlwZS4nX3BlcmlvZF9sZW5ndGgnfS4nIG1pbnV0ZXMnLCAkdGFnZXRTdGFydERhdGUpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgMjoNCgkJCQkJCS8vIGhvdXJzDQoJCQkJCQkkdGFnZXREYXRlID0gc3RydG90aW1lKCRvcGVyYXRvci4kZGF0YS0+eydhc3Nlc3NtZW50X3R5cGVfJy4kdHlwZS4nX3BlcmlvZF9sZW5ndGgnfS4nIGhvdXJzJywgJHRhZ2V0U3RhcnREYXRlKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlIDM6DQoJCQkJCQkvLyBkYXlzDQoJCQkJCQkkdGFnZXREYXRlID0gc3RydG90aW1lKCRvcGVyYXRvci4kZGF0YS0+eydhc3Nlc3NtZW50X3R5cGVfJy4kdHlwZS4nX3BlcmlvZF9sZW5ndGgnfS4nIGRheXMnLCAkdGFnZXRTdGFydERhdGUpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgNDoNCgkJCQkJCS8vIHNldmVuIGRheXMvd2Vla3MNCgkJCQkJCSR0YWdldERhdGUgPSBzdHJ0b3RpbWUoJG9wZXJhdG9yLiRkYXRhLT57J2Fzc2Vzc21lbnRfdHlwZV8nLiR0eXBlLidfcGVyaW9kX2xlbmd0aCd9Licgd2Vla3MnLCAkdGFnZXRTdGFydERhdGUpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgNToNCgkJCQkJCS8vIHRoaXJ0eSBkYXlzL21vbnRocw0KCQkJCQkJJHRhZ2V0RGF0ZSA9IHN0cnRvdGltZSgkb3BlcmF0b3IuJGRhdGEtPnsnYXNzZXNzbWVudF90eXBlXycuJHR5cGUuJ19wZXJpb2RfbGVuZ3RoJ30uJyBtb250aHMnLCAkdGFnZXRTdGFydERhdGUpOwkJCQkJCQ0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXJldHVybiAkdGFnZXRTdGFydERhdGU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICR0YWdldERhdGU7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkYXNzZXNzbWVudHNPdXRzdGFuZGluZyA9IGFycmF5KCk7DQoJDQoJLyoqDQoJICoJc2V0IEFzc2Vzc21lbnQgQ29tcGxldGlvbiBOb3Rlcw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QXNzZXNzbWVudHNPdXRzdGFuZGluZygkYXNzZXNzbWVudCwgJGV2ZW50X25hbWUsICRhZGQgPSBmYWxzZSkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgYXNzZXNzbWVudCBoYXMgYmVlbiBkb25lDQoJCWlmICgkYWRkIHx8ICEkYXNzZXNzbWVudC0+c3VibWlzc2lvbikNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokYXNzZXNzbWVudHNPdXRzdGFuZGluZ1skZXZlbnRfbmFtZV0pKQ0KCQkJew0KCQkJCXNlbGY6OiRhc3Nlc3NtZW50c091dHN0YW5kaW5nWyRldmVudF9uYW1lXSA9IGFycmF5KCk7DQoJCQl9DQoJCQlzZWxmOjokYXNzZXNzbWVudHNPdXRzdGFuZGluZ1skZXZlbnRfbmFtZV1bXSA9ICRhc3Nlc3NtZW50LT5hc3Nlc3NtZW50X3R5cGVfbmFtZSAuICcgJyAuIFRleHQ6Ol8oJ2ZvcicpIC4gJyAnLiAkYXNzZXNzbWVudC0+Y291cnNlX25hbWU7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCS8qKg0KCSAqCWdldCBBc3Nlc3NtZW50IENvbXBsZXRpb24gTm90ZXMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEFzc2Vzc21lbnRzT3V0c3RhbmRpbmcoJGV2ZW50X25hbWUpDQoJew0KCQkvLyBjaGVjayBpZiB0aGlzIGV2ZW50IGhhcyBhbnkgbm90ZXMNCgkJaWYgKGlzc2V0KHNlbGY6OiRhc3Nlc3NtZW50c091dHN0YW5kaW5nWyRldmVudF9uYW1lXSkpDQoJCXsNCgkJCXJldHVybiAnPHVsIGNsYXNzPSJ1ay1saXN0Ij48bGk+JyAuIGltcGxvZGUoJzwvbGk+PGxpPicsIHNlbGY6OiRhc3Nlc3NtZW50c091dHN0YW5kaW5nWyRldmVudF9uYW1lXSkgLiAnPC9saT48L3VsPic7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCgkNCgkvKioNCgkgKgljaGVjayBzdWJtaXNzaW9uDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja1N1Ym1pc3Npb24oJGV2ZW50LCRwcm9ncmFtLCRjb3Vyc2UsJGRheSwkYXNzZXNzbWVudCwkdXNlcklkID0gbnVsbCkNCgl7DQoJCS8vIHNldCB1c2VyIHRvIHRhcmdldA0KCQlpZighJHVzZXJJZCkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OiR1c2VyLT5pZDsNCgkJfQ0KCQkNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2Fzc2Vzc21lbnQnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3N0dWRlbnR1c2VyJykgLiAnID0gJy4gKGludCkkdXNlcklkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYXNzZXNzbWVudF90eXBlJykgLiAnID0gJy4gKGludCkkYXNzZXNzbWVudCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2NvdXJzZScpIC4gJyA9ICcuIChpbnQpJGNvdXJzZSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2RheScpIC4gJyA9ICcuIChpbnQpJGRheSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Byb2dyYW0nKSAuICcgPSAnLiAoaW50KSRwcm9ncmFtKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZXZlbnQnKSAuICcgPSAnLiAoaW50KSRldmVudCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCgkvKioNCgkqIAlUaGUgQ291cnNlIHRlbXAvQnVja2V0DQoJKiovDQoJcHVibGljIHN0YXRpYyAkY291cnNlQnVja2V0ID0gYXJyYXkoKTsNCgkNCgkvKioNCgkqIAlUaGUgRXZlbnQgRmlyc3QgRGF0ZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGV2ZW50Rmlyc3REYXRlOw0KCQ0KCS8qKg0KCSogCVRoZSBDb3Vyc2UgRmlyc3QgRGF0ZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGNvdXJzZUZpcnN0RGF0ZSA9IGFycmF5KCk7DQoJDQoJLyoqDQoJICoJc2V0IGF2YWlsYWJsZSBhc3Nlc3NtZW50cw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhbGlhYmxlQXNzZXNzbWVudHMoJGRhdGEpDQoJew0KCQlpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJLy8gbG9hZCBwcm9maWxlIG1vZGVsDQoJCQkkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgncHJvZmlsZScsIEpQQVRIX0NPTVBPTkVOVF9TSVRFKTsNCgkJCS8vIGxvYWQgZGF0YSBpZiBub25lIGdpdmVuDQoJCQkkZGF0YSA9ICRtb2RlbC0+Z2V0QXNzZXNzbWVudHMoKTsNCgkJfQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkkYXNzZXNzbWVudHMgPSBhcnJheSgpOw0KCQkJLy8gc29ydCB0aGUgZGF0YQ0KCQkJZm9yZWFjaCAoJGRhdGEgYXMgJGV2ZW50KQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgY291cnNlcyBpbmZvDQoJCQkJJGNvdXJzZUJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRldmVudC0+ZXZlbnRfY291cnNlX2RhdGUpKQ0KCQkJCXsNCgkJCQkJLy8gY29udmVydCB0byBhbiBhcnJheQ0KCQkJCQkkZXZlbnRfY291cnNlX2RhdGUgPSBqc29uX2RlY29kZSgkZXZlbnQtPmV2ZW50X2NvdXJzZV9kYXRlKTsNCgkJCQkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRldmVudF9jb3Vyc2VfZGF0ZSkpDQoJCQkJCXsNCgkJCQkJCSRldmVudC0+ZXZlbnRfY291cnNlX2RhdGUgPSBhcnJheSgpOw0KCQkJCQkJJGZpcnN0Q291cnNlID0gOTk5Ow0KCQkJCQkJJGZpcnN0RGF5ID0gOTk5Ow0KCQkJCQkJLy8gc2V0IHRoZSBjb3Vyc2VzIHRvIGRheXMNCgkJCQkJCWZvcmVhY2ggKCRldmVudF9jb3Vyc2VfZGF0ZSBhcyAka2V5ID0+ICR2YWx1ZXMpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2YWx1ZXMpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJZm9yZWFjaCgkdmFsdWVzIGFzICRuciA9PiAkdmFsdWUpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRldmVudC0+ZXZlbnRfY291cnNlX2RhdGVbJG5yXVska2V5XSA9ICR2YWx1ZTsNCgkJCQkJCQkJCS8vIHNldCBmaXJzdCBjb3Vyc2UgKFRPRE8pIHNob3VsZCB1c2Ugb3JkZXIgaW5zdGVhZA0KCQkJCQkJCQkJaWYgKCRrZXkgPT0gJ2NvdXJzZScpDQoJCQkJCQkJCQl7CQ0KCQkJCQkJCQkJCWlmICgkZmlyc3RDb3Vyc2UgPiAkdmFsdWUpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkZmlyc3RDb3Vyc2UgPSAkdmFsdWU7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gc2V0IGZpcnN0IGRheSAoc2hvdWxkIGFsd2F5cyBiZSAxIGJ1dCBqdXN0IGluY2FzZSkNCgkJCQkJCQkJCWlmICgka2V5ID09ICdkYXknKQ0KCQkJCQkJCQkJewkNCgkJCQkJCQkJCQlpZiAoJGZpcnN0RGF5ID4gJHZhbHVlKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJGZpcnN0RGF5ID0gJHZhbHVlOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkvLyBidWlsZCBzZWFyY2ggYnVja2V0DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmV2ZW50X2NvdXJzZV9kYXRlKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJGV2ZW50LT5ldmVudF9jb3Vyc2VfZGF0ZSBhcyAkdmFsKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRjb3Vyc2VCdWNrZXRbJGV2ZW50LT5ldmVudF9pZF1bJHZhbFsnY291cnNlJ11dWyR2YWxbJ2RheSddXSA9IHN0cnRvdGltZSgkdmFsWydkYXRlJ10pOw0KCQkJCQkJCS8vIHNldCBmaXJzdCBkYXkgb2YgZXZlbnQvcHJvZ3JhbQ0KCQkJCQkJCWlmICgkdmFsWydkYXknXSA9PSAkZmlyc3REYXkgJiYgJHZhbFsnY291cnNlJ10gPT0gJGZpcnN0Q291cnNlICYmICR2YWxbJ2RhdGUnXSkNCgkJCQkJCQl7DQoJCQkJCQkJCXNlbGY6OiRldmVudEZpcnN0RGF0ZSA9IHN0cnRvdGltZSgkdmFsWydkYXRlJ10pOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBzZXQgZWFjaCBjb3Vyc2UgZmlyc3QgZGF5DQoJCQkJCQkJaWYgKCR2YWxbJ2RheSddID09ICRmaXJzdERheSAmJiAkdmFsWydkYXRlJ10pDQoJCQkJCQkJew0KCQkJCQkJCQlzZWxmOjokY291cnNlRmlyc3REYXRlWyR2YWxbJ2NvdXJzZSddXSA9IHN0cnRvdGltZSgkdmFsWydkYXRlJ10pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBzZXQgdGhlIGFzc2Vzc21lbnRzIGF2YWlsYWJsZQ0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmlkUHJvZ3JhbVF1ZXN0aW9uREQpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGV2ZW50LT5pZFByb2dyYW1RdWVzdGlvbkREIGFzICRxdWVzdGlvbikNCgkJCQkJew0KCQkJCQkJaWYgKCFpc3NldCgkYXNzZXNzbWVudHMNCgkJCQkJCQkJWydwcm9ncmFtXycuc3RyX3BhZCgkcXVlc3Rpb24tPnByb2dyYW0sIDMsICcwJyxTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkgICAgJ19fZXZlbnRfJy5zdHJfcGFkKCRldmVudC0+ZXZlbnRfaWQsIDMsICcwJyxTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkgICAgJ19fY291cnNlXycuc3RyX3BhZCgkcXVlc3Rpb24tPmNvdXJzZSwgMywgJzAnLFNUUl9QQURfTEVGVCldDQoJCQkJCQkJCVsnZGF5Xycuc3RyX3BhZCgkcXVlc3Rpb24tPmRheSwgMywgJzAnLFNUUl9QQURfTEVGVCldDQoJCQkJCQkJCVsnYXNzZXNzbWVudHR5cGVfJy5zdHJfcGFkKCRxdWVzdGlvbi0+YXNzZXNzbWVudF90eXBlX2lkLCAzLCAnMCcsU1RSX1BBRF9MRUZUKV0pKQ0KCQkJCQkJew0KCQkJCQkJCS8vIGxpbnVwIHRoZSBkYXRhDQoJCQkJCQkJJHF1ZXN0aW9uLT5ldmVudF9pZCA9ICRldmVudC0+ZXZlbnRfaWQ7DQoJCQkJCQkJJHF1ZXN0aW9uLT5ldmVudF9uYW1lID0gJGV2ZW50LT5ldmVudF9uYW1lOw0KCQkJCQkJCSRxdWVzdGlvbi0+ZXZlbnRfZ3JvdXBzID0gJGV2ZW50LT5ldmVudF9ncm91cHM7DQoJCQkJCQkJJHF1ZXN0aW9uLT5wcm9ncmFtX25hbWUgPSAkZXZlbnQtPnByb2dyYW1fbmFtZTsNCgkJCQkJCQkkcXVlc3Rpb24tPnByb2dyYW1fYWNyb255bSA9ICRldmVudC0+cHJvZ3JhbV9hY3JvbnltOw0KCQkJCQkJCSRxdWVzdGlvbi0+cHJvZ3JhbV9pY29uID0gJGV2ZW50LT5wcm9ncmFtX2ljb247DQoJCQkJCQkJJHF1ZXN0aW9uLT5wcm9ncmFtX2NyZWRpdF9zeXN0ZW0gPSAkZXZlbnQtPnByb2dyYW1fY3JlZGl0X3N5c3RlbTsNCgkJCQkJCQkkcXVlc3Rpb24tPmRheV9kYXRlID0gKGlzc2V0KHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGV2ZW50LT5ldmVudF9pZF1bJHF1ZXN0aW9uLT5jb3Vyc2VdWyRxdWVzdGlvbi0+ZGF5XSkpID8gc2VsZjo6JGNvdXJzZUJ1Y2tldFskZXZlbnQtPmV2ZW50X2lkXVskcXVlc3Rpb24tPmNvdXJzZV1bJHF1ZXN0aW9uLT5kYXldIDogbnVsbDsNCgkJCQkJCQkvLyBzZXR1cCB0aGUgc3RvcmFnZSBvYmplY3QNCgkJCQkJCQkkYXNzZXNzbWVudHMNCgkJCQkJCQkJWydwcm9ncmFtXycuc3RyX3BhZCgkcXVlc3Rpb24tPnByb2dyYW0sIDMsICcwJyxTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkgICAgJ19fZXZlbnRfJy5zdHJfcGFkKCRldmVudC0+ZXZlbnRfaWQsIDMsICcwJyxTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkgICAgJ19fY291cnNlXycuc3RyX3BhZCgkcXVlc3Rpb24tPmNvdXJzZSwgMywgJzAnLFNUUl9QQURfTEVGVCldDQoJCQkJCQkJCVsnZGF5Xycuc3RyX3BhZCgkcXVlc3Rpb24tPmRheSwgMywgJzAnLFNUUl9QQURfTEVGVCldDQoJCQkJCQkJCVsnYXNzZXNzbWVudHR5cGVfJy5zdHJfcGFkKCRxdWVzdGlvbi0+YXNzZXNzbWVudF90eXBlX2lkLCAzLCAnMCcsU1RSX1BBRF9MRUZUKV0gPSAkcXVlc3Rpb247DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJGFzc2Vzc21lbnRzOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKgljaGVjayBpZiB1c2VycyBjYW4gYWNjZXNzIGEgZ2l2ZW4gYXJlYQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FuQWNjZXNzKCRpZCwkdHlwZSA9ICdldmVudCcpDQoJew0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ2V2ZW50JzoNCgkJCQkvLyBjaGVjayBpZiB1c2VyIG1heSBhY2Nlc3MgZXZlbnQgZGF0YQ0KCQkJCWlmICgkaWQpDQoJCQkJew0KCQkJCQlyZXR1cm4gc2VsZjo6Y2hlY2tFdmVudEFwcGxpY2F0aW9uKCRpZCk7DQoJCQkJfQ0KDQoJCQlicmVhazsNCgkJCWNhc2UgJ2Fzc2Vzc21lbnQnOg0KCQkJCS8vIGNoZWNrIGlmIHVzZXIgbWF5IGFjY2VzcyBhc3Nlc3NtZW50IGRhdGENCg0KCQkJYnJlYWs7DQoJCQljYXNlICdtb2R1bGUnOg0KCQkJCS8vIGNoZWNrIGlmIHVzZXIgbWF5IGFjY2VzcyBhc3Nlc3NtZW50IGRhdGENCgkJCQlpZiAoJGlkKQ0KCQkJCXsNCgkJCQkJJGV2ZW50ID0gc2VsZjo6Z2V0RXZlbnRJZCgkaWQsJHR5cGUpOw0KCQkJCQlpZiAoJGV2ZW50KQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gc2VsZjo6Y2hlY2tFdmVudEFwcGxpY2F0aW9uKCRldmVudCk7DQoJCQkJCX0NCgkJCQl9DQoJCQlicmVhazsNCgkJCWNhc2UgJ3JlZ2lzdGVyJzoNCgkJCQkvLyBjaGVjayBpZiB1c2VyIGNhbiByZWdpc3Rlcg0KCQkJCWlmICgkaWQpDQoJCQkJew0KCQkJCQkkc3RhdHVzID0gc2VsZjo6Y2hlY2tFdmVudEFwcGxpY2F0aW9uKCRpZCx0cnVlKTsNCgkJCQkJc3dpdGNoICgkc3RhdHVzKQ0KCQkJCQl7DQoJCQkJCQljYXNlIDE6DQoJCQkJCQkJLy8gYWN0aXZlDQoJCQkJCQkJJHJlc3BvbnNlID0gYXJyYXkoJ2NhbicgPT4gZmFsc2UsICd3aHknID0+IFRleHQ6Ol8oJ1lvdXIgYXBwbGljYXRpb24gd2FzIGFwcHJvdmVkIGFuZCBpcyBhY3RpdmUuJykpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlIDI6DQoJCQkJCQkJLy8gcGVuZGluZw0KCQkJCQkJCSRyZXNwb25zZSA9IGFycmF5KCdjYW4nID0+IGZhbHNlLCAnd2h5JyA9PiBUZXh0OjpfKCdBcHBsaWNhdGlvbiBpcyBwZW5kaW5nIHJldmlldywgcGxlYXNlIGNvbnRhY3Qgb3VyIG9mZmljZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKSk7DQoJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgLTE6DQoJCQkJCQkJLy8gcmVqZWN0ZWQNCgkJCQkJCQkkcmVzcG9uc2UgPSBhcnJheSgnY2FuJyA9PiBmYWxzZSwgJ3doeScgPT4gVGV4dDo6XygnQXBwbGljYXRpb24gd2FzIHJlamVjdGVkLCBwbGVhc2UgY29udGFjdCBvdXIgb2ZmaWNlIGZvciBtb3JlIGluZm9ybWF0aW9uLicpKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQkJZGVmYXVsdCA6DQoJCQkJCQkJLy8gZ29vZCBoYXMgbm90IHJlZ2lzdHJhdGlvbg0KCQkJCQkJCSRyZXNwb25zZSA9IGFycmF5KCdjYW4nID0+IHRydWUpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJcmV0dXJuICRyZXNwb25zZTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICoJZ2V0IHRoZSBldmVudCBpZCBpbiByZWxhdGlvbiB0byB0aGUgdHlwZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXZlbnRJZCgkaWQsJHR5cGUpDQoJew0KCQlpZiAoJHR5cGUgPT0gJ21vZHVsZScpDQoJCXsNCgkJCS8vIGdldCBwcm9ncmFtIGlkDQoJCQkkcHJvZ3JhbSA9IHNlbGY6OmdldFZhcignbW9kdWxlJywgJGlkLCAnaWQnLCAncHJvZ3JhbScpOw0KCQkJaWYgKCRwcm9ncmFtKQ0KCQkJew0KCQkJCS8vIGdldCBldmVudCBpZA0KCQkJCXJldHVybiBzZWxmOjpnZXRWYXIoJ2V2ZW50JywgJHByb2dyYW0sICdwcm9ncmFtJywgJ2lkJyk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqCWdldCB0aGUgbm90ZSBmb3IgdGhpcyB1c2VyIGFuZCBzZXNzaW9uDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXROb3RlKCRzZXNzaW9uKQ0KCXsNCgkJJHVzZXJJZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdjb250ZW50JykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3R1ZGVudF9ub3RlJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdzdHVkZW50dXNlcicpIC4gJyA9ICcuKGludCkgJHVzZXJJZCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Nlc3Npb24nKSAuICcgPSAnLihpbnQpICRzZXNzaW9uKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICoJZ2V0IHRoZSBhdHRlbmRhbmNlIGluIHJlbGF0aW9uIHRvIGEgc2Vzc2lvbg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXR0ZW5kYW5jZUxpc3QoJHNlc3Npb24sJGNvdXJzZSwkcHJvZ3JhbSwkZXZlbnQpDQoJew0KCQlyZXR1cm4gZmFsc2U7IC8vIFRPRE8gSG1tbW0gbm90IHN1cmUgd2hhdCBoYXBwZW5lZCBoZXJlDQoJfQ0KDQoJLyoqDQoJICoJY2hlY2sgaWYgdXNlcidzIGFwcGxpY2F0aW9uIHRvIGV2ZW50IGlzIGFwcHJvdmVkDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0V2ZW50QXBwbGljYXRpb24oJGV2ZW50LCRyZXR1cm5TdGF0dXMgPSBmYWxzZSkNCgl7DQoJCSR1c2VySWQgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnc3RhdHVzJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXBwbGljYXRpb24nKSk7DQoJCWlmICghJHJldHVyblN0YXR1cykNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc3RhdHVzJykgLiAnID0gJy4oaW50KSAxKTsNCgkJfQ0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdzdHVkZW50dXNlcicpIC4gJyA9ICcuKGludCkgJHVzZXJJZCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2V2ZW50JykgLiAnID0gJy4oaW50KSAkZXZlbnQpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICoJc2V0IGdyb3VwcyBuYW1lcw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0R3JvdXBOYW1lcygkZ3JvdXBzKQ0KCXsNCgkJLy8gY2hhbmdlIGFycmF5IG9mIGdyb3VwIGlkcyB0byBzdHJpbmcgb2YgZ3JvdXAgbmFtZXMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRncm91cHMpKQ0KCQl7DQoJCQkkZ3JvdXBzTmFtZXMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGdyb3VwcyBhcyAkZ3JvdXApDQoJCQl7DQoJCQkJJGdyb3Vwc05hbWVzW10gPSBzZWxmOjpnZXRHcm91cE5hbWUoJGdyb3VwKTsNCgkJCX0NCgkJCXJldHVybiBpbXBsb2RlKCcsICcsJGdyb3Vwc05hbWVzKTsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICoJQ2hhbmdlIHRvIG5pY2UgZmFuY3kgZGF0ZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFuY3lEYXRlKCRkYXRlKQ0KCXsNCgkJaWYgKCFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCRkYXRlKSkNCgkJew0KCQkJJGRhdGUgPSBzdHJ0b3RpbWUoJGRhdGUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCdqUyBcb1xmIEYgWScsJGRhdGUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGZhbmN5IHRpbWUgYW5kIGRhdGUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RGF0ZVRpbWUoJHRpbWUpDQoJew0KCQlpZiAoIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJHRpbWUpKQ0KCQl7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgkdGltZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJyhHOmkpIGpTIFxvXGYgRiBZJywkdGltZSk7DQoJfQ0KDQoJLyoqDQoJICoJQ2hhbmdlIHRvIG5pY2UgaG91cjptaW51dGVzIHRpbWUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5VGltZSgkdGltZSkNCgl7DQoJCWlmICghc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkdGltZSkpDQoJCXsNCgkJCSR0aW1lID0gc3RydG90aW1lKCR0aW1lKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnRzppJywkdGltZSk7DQoJfQ0KDQoJLyoqDQoJICoJQ2hlY2sgaWYgc3RyaW5nIGlzIGEgdmFsaWQgdGltZSBzdGFtcA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNWYWxpZFRpbWVTdGFtcCgkdGltZXN0YW1wKQ0KCXsNCgkJcmV0dXJuICgoaW50KSAkdGltZXN0YW1wID09PSAkdGltZXN0YW1wKQ0KCQkmJiAoJHRpbWVzdGFtcCA8PSBQSFBfSU5UX01BWCkNCgkJJiYgKCR0aW1lc3RhbXAgPj0gflBIUF9JTlRfTUFYKTsNCgl9DQoNCgkvKioNCgkgKglQcmVwYXJlIHRoZSBxdWVzdGlvbnMNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByZXBRdWVzdGlvbnMoJiRkYXRhLCRxdWVzdGlvbnNLZXkpDQoJewkNCgkJLy8gYnVpbGQgcXVlc3Rpb24gdHlwZXMgYXJyYXkNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhLT4kcXVlc3Rpb25zS2V5KSkNCgkJew0KCQkJLy8gdG8gaWRlbnRpZnkgdGhlIHR5cGVzDQoJCQkkdHlwZU5hbWUgPSBhcnJheSgNCgkJCQkxID0+IFRleHQ6Ol8oJ1llcyBObycpLA0KCQkJCTIgPT4gVGV4dDo6XygnU2VsZWN0aW9uJyksDQoJCQkJMyA9PiBUZXh0OjpfKCdNdWx0aSBTZWxlY3Rpb24nKSwNCgkJCQk0ID0+IFRleHQ6Ol8oJ1RleHQnKSwNCgkJCQk1ID0+IFRleHQ6Ol8oJ1RleHQgUGx1cycpKTsNCgkJCS8vIHNldCBzb21lIGRlZmF1bHRzDQoJCQkkcG9pbnRzCQk9IGFycmF5KCk7DQoJCQkkdG90YWwJCT0gMDsNCgkJCSRzdWJ0b3RhbAkJPSBhcnJheSgxPT4wLDI9PjAsMz0+MCw0PT4wLDU9PjApOw0KCQkJJGxvYWRlZAkJPSBhcnJheSgxPT4wLDI9PjAsMz0+MCw0PT4wLDU9PjApOw0KCQkJJGtlZXBlcgkJPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGRhdGEtPiRxdWVzdGlvbnNLZXkgYXMgJG5yID0+ICRvYmplY3QpDQoJCQl7DQoJCQkJJGZvdW5kID0gc2VsZjo6Z2V0QXZhaWxhYmxlUG9pbnQoJG9iamVjdCwgdHJ1ZSk7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRmb3VuZCkgJiYgaXNzZXQoJGZvdW5kWyd0eXBlJ10pICYmIGlzc2V0KCRmb3VuZFsncG9pbnQnXSkgJiYgJGZvdW5kWydwb2ludCddID4gMCkNCgkJCQl7DQoJCQkJCS8vIGJ1aWxkIHBvaW50cw0KCQkJCQkkdHlwZSA9ICRmb3VuZFsndHlwZSddOw0KCQkJCQkkcG9pbnRzWyR0eXBlXVskbnJdCT0gKGludCkgJGZvdW5kWydwb2ludCddOw0KCQkJCQkvLyBidWlsZCBzdWIgdG90YWwgdG8gc2VlIGlmIHdlIGhhdmUgZW5vdWdoIHBvaW50cyBmb3IgdGhlIHF1ZXN0aW9uIG1hcCByZWxhdGlvbiANCgkJCQkJJHN1YnRvdGFsWyR0eXBlXQkJPSBiY2FkZCgkc3VidG90YWxbJHR5cGVdLCAkcG9pbnRzWyR0eXBlXVskbnJdKTsNCgkJCQkJLy8gc2V0IHRoZSB0b3RhbCB0byBpbnN1cmUgd2UgaGF2ZSBlbm91Z2ggcXVlc3Rpb25zDQoJCQkJCSR0b3RhbAkJCT0gYmNhZGQoJHRvdGFsLCAkcG9pbnRzWyR0eXBlXVskbnJdKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBwb2ludHMNCgkJCWlmICgkdG90YWwgPCAkZGF0YS0+YXNzZXNzbWVudF90eXBlX3RvdGFsX3BvaW50cykNCgkJCXsNCgkJCQkvLyBzZXQgZXJyb3INCgkJCQlKRXJyb3I6OnJhaXNlV2FybmluZyg1MDAsIFRleHQ6Ol8oJ1RoZXJlIGlzIG5vdCBlbm91Z2ggcXVlc3Rpb24gKHBvaW50cykgaW4gdGhlIHN5c3RlbSwgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuJykpOw0KCQkJCSRyZXR1cm4gPSBmYWxzZTsNCgkJCX0NCgkJCS8vIHNldCBuZWVkZWQgcG9pbnQgbWFwDQoJCQkkZHluYW1pY1NlbGVjdCA9IGpzb25fZGVjb2RlKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfcXVlc3Rpb25fbWFwLCB0cnVlKTsNCgkJCSRjaGVja1BlcmNlbnQgPSAwOw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkeW5hbWljU2VsZWN0KSkNCgkJCXsNCgkJCQkkbWFwVHlwZSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGR5bmFtaWNTZWxlY3QgYXMgJGxhYmVsID0+ICR2YWx1cykNCgkJCQl7DQoJCQkJCWZvcmVhY2goJHZhbHVzIGFzICRnID0+ICR2YWx1KQ0KCQkJCQl7DQoJCQkJCQkkbWFwVHlwZVskZ11bJGxhYmVsXSA9ICR2YWx1Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGZpbmFsIHJ1biBvbiBtYXANCgkJCQlmb3JlYWNoICgkbWFwVHlwZSBhcyAkdmEpDQoJCQkJew0KCQkJCQkkbWFwWyR2YVsnYW5zd2VyX3R5cGUnXV0gPSAkdmFbJ3BlcmNlbnQnXTsNCgkJCQkJJGNoZWNrUGVyY2VudCA9IGJjYWRkKCRjaGVja1BlcmNlbnQsICR2YVsncGVyY2VudCddKTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoJGNoZWNrUGVyY2VudCAhPSAxMDApDQoJCQl7DQoJCQkJLy8gc2V0IGVycm9yDQoJCQkJSkVycm9yOjpyYWlzZVdhcm5pbmcoNTAwLCBUZXh0OjpfKCdUaGUgcXVlc3Rpb24gcGVyY2VudCBicmVha2Rvd24gaXMgbm90IHNldHVwIGNvcnJlY3RseSwgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuJykpOw0KCQkJCSRyZXR1cm4gPSBmYWxzZTsNCgkJCX0NCgkJCS8vIG5vdyB3b3JrIG91dCBob3cgbXVjaCBwb2ludHMgc2hvdWxkIGJlIGxvYWRlZCBmcm9tIGVhY2ggdHlwZQ0KCQkJJGdldCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkbWFwIGFzICR0eXBlS2V5ID0+ICRwZXJjZW50KQ0KCQkJew0KCQkJCSRnZXRbJHR5cGVLZXldID0gYmNtdWwoYmNkaXYoJHBlcmNlbnQsICcxMDAnLCA1KSwgJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV90b3RhbF9wb2ludHMpOw0KCQkJCS8vIGNoZWNrIGlmIHRoZSB0eXBlIGhhcyBlbm91Z2ggcG9pbnRzDQoJCQkJaWYgKCRnZXRbJHR5cGVLZXldID4gJHN1YnRvdGFsWyR0eXBlS2V5XSkNCgkJCQl7DQoJCQkJCWlmICgkZ2V0WyR0eXBlS2V5XSAhPSAwICYmICRzdWJ0b3RhbFskdHlwZUtleV0gIT0gMCkNCgkJCQkJew0KCQkJCQkJLy8gZ2V0IHBlcnNlbnQgbWlzIG1hdGNoDQoJCQkJCQkkcGlsbyA9IGJjZGl2KCRnZXRbJHR5cGVLZXldLCBiY211bCgkc3VidG90YWxbJHR5cGVLZXldLCAxMCkpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHBpbG8gPSAxOw0KCQkJCQl9DQoJCQkJCS8vIGFsbG93IGZvciBhc3Nlc3NtZW50X3R5cGVfbWlzbWF0Y2hfYnVmZmVyICUgcGxheSBpbiB0aGUgbWlzbWF0Y2gNCgkJCQkJaWYgKCRwaWxvID4gJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9taXNtYXRjaF9idWZmZXIpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBlcnJvcg0KCQkJCQkJSkVycm9yOjpyYWlzZVdhcm5pbmcoNTAwLCBUZXh0OjpzcHJpbnRmKCdUaGVyZSBpcyBub3QgZW5vdWdoIHBvaW50cyBpbiAlcyBxdWVzdGlvbiB0eXBlLCBwbGVhc2Ugbm90aWZ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLCR0eXBlTmFtZVskdHlwZUtleV0pKTsNCgkJCQkJCSRyZXR1cm4gPSBmYWxzZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGlmIHRoZSBicmFrZSBkb3duIGRvZXMgbm90IG1hdGNoIHVwLCBmaXggaXQNCgkJCSRnZXRUb3RhbCA9IGFycmF5X3N1bSgkZ2V0KTsNCgkJCWlmICgkZ2V0VG90YWwgIT0gJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV90b3RhbF9wb2ludHMpDQoJCQl7DQoJCQkJJHJlbW92ZSA9IDA7DQoJCQkJJGFkZCA9IDA7DQoJCQkJaWYgKCRnZXRUb3RhbCA+ICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfdG90YWxfcG9pbnRzKQ0KCQkJCXsNCgkJCQkJJHJlbW92ZQk9IGJjc3ViKCRnZXRUb3RhbCwgJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV90b3RhbF9wb2ludHMpOw0KCQkJCQkvLyByZW1vdmUgZnJvbSB0aGUgZ2V0DQoJCQkJCWZvciAoJGkgPSAxOyAkaSA8PSAkcmVtb3ZlOyApIA0KCQkJCQl7DQoJCQkJCQkkdGZyb20gPSBhcnJheV9yYW5kKCRnZXQpOw0KCQkJCQkJaWYgKCRnZXRbJHRmcm9tXSA+IDIpDQoJCQkJCQl7DQoJCQkJCQkJJGdldFskdGZyb21dLS07DQoJCQkJCQkJJGkrKzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKCRnZXRUb3RhbCA8ICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfdG90YWxfcG9pbnRzKQ0KCQkJCXsNCgkJCQkJJGFkZAk9IGJjc3ViKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfdG90YWxfcG9pbnRzLCAkZ2V0VG90YWwpOw0KCQkJCQkvLyBhZGQgdG8gdGhlIGdldA0KCQkJCQlmb3IgKCRpID0gMTsgJGkgPD0gJGFkZDsgKSANCgkJCQkJew0KCQkJCQkJJHRmcm9tID0gYXJyYXlfcmFuZCgkZ2V0KTsNCgkJCQkJCWlmICgkZ2V0WyR0ZnJvbV0gPiAyKQ0KCQkJCQkJew0KCQkJCQkJCSRnZXRbJHRmcm9tXSsrOw0KCQkJCQkJCSRpKys7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkkbWF0Y2ggPSBzZWxmOjpxdWVzdGlvblNvcnRTZWxlY3Rpb24oJHBvaW50cywkZGF0YS0+YXNzZXNzbWVudF90eXBlX3RvdGFsX3BvaW50cywkc3VidG90YWwsJGdldCwkbG9hZGVkLCRrZWVwZXIpOw0KCQkJLy8gaWYgd2Ugc3RpbGwgZGlkIG5vdCBtYWtlIGl0IHNldCBlcnJvcg0KCQkJaWYgKCEkbWF0Y2gpDQoJCQl7DQoJCQkJLy8gc2V0IGVycm9yDQoJCQkJSkVycm9yOjpyYWlzZVdhcm5pbmcoNTAwLCBUZXh0OjpfKCdUaGVyZSBpcyBub3QgZW5vdWdoIHBvaW50cyBpbiBzeXN0ZW0gdG8gcmVhY2ggc2V0IHRvdGFsLCBwbGVhc2Ugbm90aWZ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nKSk7DQoJCQkJJHJldHVybiA9IGZhbHNlOw0KCQkJfQ0KCQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgbm8gZXJyb3JzDQoJCQlpZiAoKCFpc3NldCgkcmV0dXJuKSB8fCAkcmV0dXJuKSAmJiBzZWxmOjpzaHVmZmxlQXJyYXkoJG1hdGNoKSkNCgkJCXsNCgkJCQkkYnVrZXQgPSBhcnJheSgpOw0KCQkJCS8vIHNldCB0aGUgcXVlc3Rpb25zIHRoYXQgc2hvdWxkIGJlIHVzZWQNCgkJCQlmb3JlYWNoICgkbWF0Y2ggYXMgJGlkID0+ICRwb2ludCkNCgkJCQl7DQoJCQkJCS8vIGZpcnN0IGxvYWQgdGhlIHBvaW50DQoJCQkJCSRkYXRhLT57JHF1ZXN0aW9uc0tleX1bJGlkXS0+cG9pbnQgPSAkcG9pbnQ7DQoJCQkJCS8vIHNldCB0aGUgdGV4dCBhcmVhIG1vZGUgYmFzZWQgb24gYXNzZXNzbWVudCB0eXBlIHN3aXRjaA0KCQkJCQlpZiAoJGRhdGEtPnskcXVlc3Rpb25zS2V5fVskaWRdLT5hbnN3ZXJfdHlwZSA9PSAzICYmICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfdGV4dF9pbnB1dF9tb2RlID09IDEpDQoJCQkJCXsNCgkJCQkJCSRkYXRhLT57JHF1ZXN0aW9uc0tleX1bJGlkXS0+YW5zd2VyX3R5cGUgPSA0Ow0KCQkJCQl9DQoJCQkJCSRidWtldFtdID0gJGRhdGEtPnskcXVlc3Rpb25zS2V5fVskaWRdOw0KCQkJCX0NCgkJCQkvLyBzZXQgYnkgZGVmYXVsdCBvcmRlciBpZiBuZWVkZWQNCgkJCQlpZiAoIXNlbGY6OiRmaWVsZFNodWZmbGUpDQoJCQkJew0KCQkJCQl1c29ydCgkYnVrZXQsIGZ1bmN0aW9uKCRhLCAkYikgew0KCQkJCQkJcmV0dXJuICRhLT5vcmRlcmluZyAtICRiLT5vcmRlcmluZzsNCgkJCQkJfSk7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSBvbGQgc2V0DQoJCQkJJGRhdGEtPiRxdWVzdGlvbnNLZXkgPSAkYnVrZXQ7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJLy8gc2V0IGVycm9yDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKDUwMCwgVGV4dDo6XygnTm8gcXVlc3Rpb25zIHdlcmUgc2V0IGZvciB0aGlzIGFzc2Vzc21lbnQsIHBsZWFzZSBub3RpZnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yLicpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCgkvKioNCgkqIAlUaGUgcmV0cnkgY291bnRlcg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHJldHJ5ID0gMDsNCg0KCS8qKg0KCSAqCVNvcnQgdGhlIHNlbGVjdGlvbiBvZiBxdWVzdGlvbnMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHF1ZXN0aW9uU29ydFNlbGVjdGlvbigkcG9pbnRzLCR0YXJnZXRUb3RhbCwkc3VidG90YWwsJGdldCwkbG9hZGVkLCRrZWVwZXIpDQoJew0KCQkkcmVfdHJ5ID0gJHBvaW50czsNCgkJJGdldFNvcnQgPSBmYWxzZTsNCgkJLy8gdXNlIHF1ZXN0aW9uIGdldCBtYXAgYW5kIHBvaW50IHRvIHNvcnQNCgkJZm9yZWFjaCAoJHBvaW50cyBhcyAkdHlwZSA9PiAkcG9pbnRfcykNCgkJew0KCQkJaWYgKGlzc2V0KCRnZXRbJHR5cGVdKSAmJiBpc3NldCgkc3VidG90YWxbJHR5cGVdKSAmJiBzZWxmOjpzaHVmZmxlQXJyYXkoJHBvaW50X3MpKQ0KCQkJew0KCQkJCWlmICgkZ2V0WyR0eXBlXSAhPSAkc3VidG90YWxbJHR5cGVdKQ0KCQkJCXsNCgkJCQkJLy8gYWRkIHVudGlsbCB3ZSByZWFjaCBvdXIgc3VtDQoJCQkJCWZvcmVhY2ggKCRwb2ludF9zIGFzICRpID0+ICRwb2luKQ0KCQkJCQl7DQoJCQkJCQkkY2hlY2tWYWx1ZSA9IGJjYWRkKCRsb2FkZWRbJHR5cGVdLCAkcG9pbik7DQoJCQkJCQlpZiAoJGNoZWNrVmFsdWUgPD0gJGdldFskdHlwZV0pDQoJCQkJCQl7DQoJCQkJCQkJJGtlZXBlclskaV0gPSAkcG9pbjsNCgkJCQkJCQkkbG9hZGVkWyR0eXBlXSA9IGJjYWRkKCRsb2FkZWRbJHR5cGVdLCAkcG9pbik7DQoJCQkJCQkJLy8gcmVtb3ZlIGZyb20gcG9pbnRzDQoJCQkJCQkJdW5zZXQoJHBvaW50c1skdHlwZV1bJGldKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKCRnZXRbJHR5cGVdID09ICRzdWJ0b3RhbFskdHlwZV0pDQoJCQkJew0KCQkJCQkvLyBqdXN0IGFkZCBhbGwgdW5sZXNzIHdlIGFyZSBmdWxsDQoJCQkJCSRub3dUb3RhbCA9IGFycmF5X3N1bSgka2VlcGVyKTsNCgkJCQkJZm9yZWFjaCAoJHBvaW50X3MgYXMgJGlkID0+ICRwb2ludCkNCgkJCQkJew0KCQkJCQkJJGNoZWNrVG90YWwgPSBiY2FkZCgkbm93VG90YWwsICRwb2ludCk7DQoJCQkJCQlpZiAoJGNoZWNrVG90YWwgPD0gJHRhcmdldFRvdGFsKQ0KCQkJCQkJew0KCQkJCQkJCSRrZWVwZXJbJGlkXSA9ICRwb2ludDsNCgkJCQkJCQkkbG9hZGVkWyR0eXBlXSA9IGJjYWRkKCRsb2FkZWRbJHR5cGVdLCAkcG9pbnQpOw0KCQkJCQkJCS8vIHJlbW92ZSBmcm9tIHBvaW50cw0KCQkJCQkJCXVuc2V0KCRwb2ludHNbJHR5cGVdWyRpZF0pOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgd2UgcmVhY2hlZCBvdXIgbnVtYmVyDQoJCQlpZiAoaXNzZXQoJGdldFskdHlwZV0pICYmIGlzc2V0KCRzdWJ0b3RhbFskdHlwZV0pICYmICRsb2FkZWRbJHR5cGVdICE9ICRnZXRbJHR5cGVdKQ0KCQkJew0KCQkJCSRnZXRTb3J0ID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQkvLyBkbyB3ZSBzdGlsbCBzaG9ydD8NCgkJaWYgKCRnZXRTb3J0ICYmIHNlbGY6OnNodWZmbGVBcnJheSgkcG9pbnRzKSkNCgkJew0KCQkJLy8gdHJ5IHRvIGxvYWQgbW9yZQ0KCQkJZm9yZWFjaCAoJHBvaW50cyBhcyAkdHlwZSA9PiAkcG9pbnRfcikNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJGdldFskdHlwZV0pICYmIGlzc2V0KCRzdWJ0b3RhbFskdHlwZV0pICYmIHNlbGY6OnNodWZmbGVBcnJheSgkcG9pbnRfcikpDQoJCQkJew0KCQkJCQlpZiAoYXJyYXlfc3VtKCRrZWVwZXIpICE9ICR0YXJnZXRUb3RhbCkNCgkJCQkJew0KCQkJCQkJLy8gYWRkIHVudGlsbCB3ZSByZWFjaCBvdXIgc3VtDQoJCQkJCQlmb3JlYWNoICgkcG9pbnRfciBhcyAkaW4gPT4gJHBvaW5kKQ0KCQkJCQkJew0KCQkJCQkJCSRjaGVja1RvdGFsID0gYmNhZGQoYXJyYXlfc3VtKCRrZWVwZXIpLCAkcG9pbmQpOw0KCQkJCQkJCWlmICgkY2hlY2tUb3RhbCA8PSAkdGFyZ2V0VG90YWwpDQoJCQkJCQkJew0KCQkJCQkJCQkka2VlcGVyWyRpbl0gPSAkcG9pbmQ7DQoJCQkJCQkJCSRsb2FkZWRbJHR5cGVdID0gYmNhZGQoJGxvYWRlZFskdHlwZV0sICRwb2luZCk7DQoJCQkJCQkJCS8vIHJlbW92ZSBmcm9tIHBvaW50cw0KCQkJCQkJCQl1bnNldCgkcG9pbnRzWyR0eXBlXVskaW5dKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYgKGFycmF5X3N1bSgka2VlcGVyKSA9PSAkdGFyZ2V0VG90YWwpDQoJCXsNCgkJCS8vIHJldHVybiB0aGUgaWRzIHRvIGtlZXANCgkJCXJldHVybiAka2VlcGVyOw0KCQl9DQoJCS8vIHdlIHJldHJ5IGEgZmV3IHRpbWVzDQoJCWlmIChzZWxmOjokcmV0cnkgPCA0MCkNCgkJew0KCQkJLy8gcmVzZXQgZmV3IGRlZmF1bHRzDQoJCQkkbG9hZGVkID0gYXJyYXkoMT0+MCwyPT4wLDM9PjAsND0+MCw1PT4wKTsNCgkJCSRrZWVwZXIgPSBhcnJheSgpOw0KCQkJLy8gaW5jcmVtZW50IGNvdW50ZXINCgkJCXNlbGY6OiRyZXRyeSsrOw0KCQkJLy8gbGV0cyB0cnkgYWdhaW4gPj4NCgkJCXJldHVybiBzZWxmOjpxdWVzdGlvblNvcnRTZWxlY3Rpb24oJHJlX3RyeSwkdGFyZ2V0VG90YWwsJHN1YnRvdGFsLCRnZXQsJGxvYWRlZCwka2VlcGVyKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICoJU2h1ZmZsZSBhcnJheSBidXQga2VlcCBrZXlzDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzaHVmZmxlQXJyYXkoJiRhcnJheSkgDQoJew0KCQlpZiAoaXNzZXQoJGFycmF5KSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYXJyYXkpKQ0KCQl7DQoJCQlpZiAoc2VsZjo6JGZpZWxkU2h1ZmZsZSkNCgkJCXsNCgkJCQkvLyBmaXJzdCBzZXQgdGhlIGtleXMNCgkJCQkka2V5cyA9IGFycmF5X2tleXMoJGFycmF5KTsNCgkJCQkvLyB0aGVuIHNodWZmbGUgdGhlbQ0KCQkJCXNodWZmbGUoJGtleXMpOw0KCQkJCS8vIGxvYWQgYmFzZWQgb24gdGhlIHJlc3VsdA0KCQkJCWZvcmVhY2goJGtleXMgYXMgJGtleSkNCgkJCQl7DQoJCQkJICAgICRuZXdbJGtleV0gPSAkYXJyYXlbJGtleV07DQoJCQkJfQ0KCQkJCS8vIGxvYWQgdGhlIG5ldyBvcmRlcg0KCQkJCSRhcnJheSA9ICRuZXc7DQoJCQkJLy8gZG9uZQ0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCQkNCgl9DQoJDQoJLyoqDQoJICoJR2V0IHRoZSBxdWVzdGlvbnMgbWF4IGF2YWlsYWJsZSBwb2ludA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlUG9pbnQoJiRxdWVzdGlvbiwgJHJldHVyblR5cGUgPSBmYWxzZSkNCgl7DQoJCSRwb2ludCA9IDA7DQoJCWlmICgkdHlwZSA9IHNlbGY6OmdldFF1ZXN0aW9uVHlwZSgkcXVlc3Rpb24pKQ0KCQl7DQoJCQkkcG9pbnQgPSBzZWxmOjphdmFpbGFibGVQb2ludCgkcXVlc3Rpb24sICR0eXBlKTsNCgkJCWlmICgkcmV0dXJuVHlwZSkNCgkJCXsNCgkJCQlyZXR1cm4gYXJyYXkoJ3R5cGUnID0+ICR0eXBlLCAncG9pbnQnID0+ICRwb2ludCk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRwb2ludDsNCgl9DQoNCgkvKioNCgkqIAl0byBpZGVudGlmeSB0aGUgcXVlc3Rpb24gdHlwZXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRxdWVzdGlvblR5cGVzID0gYXJyYXkoDQoJCTEgPT4gYXJyYXkoJ2Fuc3dlcl90eXBlJyA9PiAxKSwJCQkJCQkvLyBZZXMgTm8NCgkJMiA9PiBhcnJheSgnYW5zd2VyX3R5cGUnID0+IDIsICdzZWxlY3Rpb250eXBlJyA9PiAxKSwJCS8vIFNlbGVjdGlvbg0KCQkzID0+IGFycmF5KCdhbnN3ZXJfdHlwZScgPT4gMiwgJ3NlbGVjdGlvbnR5cGUnID0+IDIpLAkJLy8gTXVsdGkgU2VsZWN0aW9uDQoJCTQgPT4gYXJyYXkoJ2Fuc3dlcl90eXBlJyA9PiAzLCAndGV4dF9tYXJrX3R5cGUnID0+IDEpLAkJLy8gVGV4dA0KCQk1ID0+IGFycmF5KCdhbnN3ZXJfdHlwZScgPT4gMywgJ3RleHRfbWFya190eXBlJyA9PiAyKSk7CQkvLyBUZXh0IFBsdXMNCgkvKioNCgkgKglHZXQgdGhlIHF1ZXN0aW9ucyB0eXBlDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRRdWVzdGlvblR5cGUoJiRxdWVzdGlvbikNCgl7CQkJCQ0KCQlmb3JlYWNoIChzZWxmOjokcXVlc3Rpb25UeXBlcyBhcyAkdHlwZSA9PiAkc2VhcmNoKQ0KCQl7DQoJCQkkZm91bmQgPSAwOw0KCQkJJGxvb2sgPSBjb3VudCgkc2VhcmNoKTsNCgkJCWZvcmVhY2ggKCRzZWFyY2ggYXMgJGtleSA9PiAkdmFsKQ0KCQkJew0KCQkJCWlmICgoaW50KSAkcXVlc3Rpb24tPiRrZXkgPT0gKGludCkgJHZhbCkNCgkJCQl7DQoJCQkJCSRmb3VuZCsrOw0KCQkJCX0NCgkJCX0NCgkJCWlmICgkbG9vayA9PSAkZm91bmQpDQoJCQl7DQoJCQkJLy8gcmV0dXJuIHRoZSBmb3VuZCB0eXBlDQoJCQkJcmV0dXJuICR0eXBlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICoJR2V0IHRoZSBxdWVzdGlvbnMgbWF4IGF2YWlsYWJsZSBwb2ludA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYXZhaWxhYmxlUG9pbnQoJHF1ZXN0aW9uLCAkdHlwZSkNCgl7DQoJCSRwb2ludCA9IHNlbGY6OmdldFBvaW50KCRxdWVzdGlvbi0+aWQpOw0KCQlpZiAoJHBvaW50ID09IDApDQoJCXsNCgkJCXN3aXRjaCAoJHR5cGUpDQoJCQl7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyByYWRpbw0KCQkJCQkkcG9pbnQgPSAkcXVlc3Rpb24tPnllc25vX3BvaW50Ow0KCQkJCQlicmVhazsNCgkJCQljYXNlIDI6DQoJCQkJCS8vIGxpc3QNCgkJCQkJJHBvaW50ID0gJHF1ZXN0aW9uLT5saXN0X3BvaW50Ow0KCQkJCQlicmVhazsNCgkJCQljYXNlIDM6DQoJCQkJCS8vIG11bHRpIGxpc3QNCgkJCQkJJHBvaW50ID0gc2VsZjo6Z2V0QXZhaWxhYmxlTGlzdFBvaW50KCRxdWVzdGlvbik7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgNDoNCgkJCQkJLy8gdGV4dA0KCQkJCQkkcG9pbnQgPSAkcXVlc3Rpb24tPmNvbXBsZXRpb25fcG9pbnQ7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgNToNCgkJCQkJLy8gdGV4dCBwbHVzDQoJCQkJCSRwb2ludCA9IHNlbGY6OmdldEF2YWlsYWJsZVRleHRQbHVzUG9pbnQoJHF1ZXN0aW9uKTsNCgkJCQkJYnJlYWs7DQoJCQl9CQ0KCQkJcmV0dXJuIHNlbGY6OnNldFBvaW50KCRxdWVzdGlvbi0+aWQsICRwb2ludCk7DQoJCX0NCgkJcmV0dXJuICRwb2ludDsNCgl9DQoNCgkvKioNCgkqIAl0aGUgaGVscGVyIHNlc3Npb24NCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRzZXNzaW9uOw0KCQkNCgkvKioNCgkgKglTdG9yZSB0aGUgcG9pbnQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFBvaW50KCRpZCwgJHBvaW50KQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokc2Vzc2lvbikpDQoJCXsNCgkJCXNlbGY6OiRzZXNzaW9uID0gRmFjdG9yeTo6Z2V0U2Vzc2lvbigpOw0KCQl9DQoJCXNlbGY6OiRzZXNzaW9uLT5zZXQoJ3F1ZXN0aW9uUG9pbnQnLiRpZCwgJHBvaW50KTsNCgkJcmV0dXJuICRwb2ludDsNCgl9DQoJCQ0KCS8qKg0KCSAqCUdldCB0aGUgc3RvcmVkIHRoZSBwb2ludA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0UG9pbnQoJGlkKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokc2Vzc2lvbikpDQoJCXsNCgkJCXNlbGY6OiRzZXNzaW9uID0gRmFjdG9yeTo6Z2V0U2Vzc2lvbigpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokc2Vzc2lvbi0+Z2V0KCdxdWVzdGlvblBvaW50Jy4kaWQsIDApOw0KCX0NCgkJDQoJLyoqDQoJICoJR2V0IHRoZSBxdWVzdGlvbnMgbWF4IHBvaW50IChmb3IgYSBsaXN0KQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlTGlzdFBvaW50KCRxdWVzdGlvbikNCgl7DQoJCSR2YWx1ZSA9IDA7DQoJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcXVlc3Rpb24tPnNlbGVjdGlvbikpDQoJCXsNCgkJCSRvcHRpb25zID0ganNvbl9kZWNvZGUoJHF1ZXN0aW9uLT5zZWxlY3Rpb24sIHRydWUpOw0KCQkJaWYgKGlzc2V0KCRvcHRpb25zWyd0eXBlJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRvcHRpb25zWyd0eXBlJ10pKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRvcHRpb25zWyd0eXBlJ10gYXMgJGNvcnJlY3QpDQoJCQkJew0KCQkJCQlpZiAoJGNvcnJlY3QgPT0gMSkNCgkJCQkJew0KCQkJCQkJJHZhbHVlKys7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcXVlc3Rpb24tPnNlbGVjdGlvbikpDQoJCXsNCgkJCSR2YWx1ZSA9IGNvdW50KCRxdWVzdGlvbi0+c2VsZWN0aW9uKTsNCgkJfQ0KCQlyZXR1cm4gYmNtdWwoJHF1ZXN0aW9uLT5saXN0X3BvaW50LCAkdmFsdWUpOw0KCX0NCgkJDQoJLyoqDQoJICoJR2V0IHRoZSBxdWVzdGlvbnMgbWF4IHBvaW50IChmb3IgYSB0ZXh0IHBsdXMpDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRBdmFpbGFibGVUZXh0UGx1c1BvaW50KCRxdWVzdGlvbikNCgl7DQoJCSR2YWx1ZSA9IDE7DQoJCS8vIGNoZWNrIGlmIGl0IGlzIGFscmVhZHkgYW4gYXJyYXkgb2YgdmFsdWVzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcXVlc3Rpb24tPmtleV93b3JkcykpDQoJCXsNCgkJCSR2YWx1ZSA9IGNvdW50KCRxdWVzdGlvbi0+a2V5X3dvcmRzKTsNCgkJfQ0KCQllbHNlaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRxdWVzdGlvbi0+a2V5X3dvcmRzKSkNCgkJew0KCQkJaWYgKHN0cnBvcygkcXVlc3Rpb24tPmtleV93b3JkcywgJzsnKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJGtleXdvcmQgPSBleHBsb2RlKCc7JywgJHF1ZXN0aW9uLT5rZXlfd29yZHMpOw0KCQkJCSR2YWx1ZSA9IGNvdW50KCRrZXl3b3JkKTsNCgkJCX0NCgkJCWVsc2VpZiAoc3RycG9zKCRxdWVzdGlvbi0+a2V5X3dvcmRzLCAnLCcpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkka2V5d29yZCA9IGV4cGxvZGUoJywnLCAkcXVlc3Rpb24tPmtleV93b3Jkcyk7DQoJCQkJJHZhbHVlID0gY291bnQoJGtleXdvcmQpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBiY211bChiY2FkZCgkcXVlc3Rpb24tPndvcmRfY291bnRfcG9pbnQsICRxdWVzdGlvbi0+a2V5X3dvcmRzX3BvaW50KSwgJHZhbHVlKTsNCgl9DQoJDQoJLyoqDQoJKiAJVGhlIHNodWZmbGUgc3dpdGNoDQoJKiovDQoJcHVibGljIHN0YXRpYyAkZmllbGRTaHVmZmxlID0gZmFsc2U7DQoJDQoJLyoqDQoJICoJVGhlIG1haW4gY2FsbCBmdW5jdGlvbiB0byBsb2FkIGEgZm9ybQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGhlRm9ybSgkZGF0YSwkZmllbGRzS2V5LCRzZXR0aW5ncywgJHR5cGUpDQoJew0KCQkvLyBzaG91bGQgaXQgYmUgc2V0IHBlciB1c2VyDQoJCSRjb250cm9sZUtleSA9ICcnOw0KCQlpZiAoNCAhPSAkZGF0YS0+YXNzZXNzbWVudF90eXBlX2J1aWxkX21ldGhvZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSB1c2VybmFtZQ0KCQkJJGNvbnRyb2xlS2V5ID0gRmFjdG9yeTo6Z2V0VXNlcigpLT51c2VybmFtZTsNCgkJCWlmICgyID09ICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYnVpbGRfbWV0aG9kKQ0KCQkJew0KCQkJCSRjb250cm9sZUtleSA9ICRjb250cm9sZUtleS5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCk7DQoJCQl9DQoJCX0NCgkJLy8gc2V0IGZpbGUgbmFtZQ0KCQkkZmlsZU5hbWUgPSBtZDUoc2VyaWFsaXplKCRkYXRhKS4kY29udHJvbGVLZXkpOw0KCQkvLyBzZXQgcGFyYW1zDQoJCWlmIChlbXB0eShzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJfQ0KCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkkcGF0aAk9IHNlbGY6OiRwYXJhbXMtPmdldCgneG1scGF0aCcsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL21vZGVscy9mb3JtcycpOw0KCQkvLyBidWlsZCBmdWxsIHBhdGggdG8gZmlsZQ0KCQkkZnVsbFBhdGggPSAkcGF0aC4nLycuJGZpbGVOYW1lLicueG1sJzsNCgkJLy8gYWRkIHRoaXMgZmlsZSBuYW1lIHRvIHRoZSBzZXNzaW9uDQoJCSRzZXNzaW9uID0gRmFjdG9yeTo6Z2V0U2Vzc2lvbigpOw0KCQkkc2Vzc2lvbi0+c2V0KCR0eXBlLidfJy4kZGF0YS0+aWQsICRmaWxlTmFtZSApOw0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9idWlsZF9tZXRob2QgIT0gMSAmJiBmaWxlX2V4aXN0cygkZnVsbFBhdGgpKQ0KCQl7DQoJCQkvLyBncmVhdCB3ZSBhcmUgZG9uZSByZXR1cm4gcmVzdWx0cw0KCQkJJGRvbmUgPSB0cnVlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gY2hlY2sgdGhlIG9yZGVyaW5nIG9wdGlvbg0KCQkJaWYgKDIgPT0gJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9vcmRlcmluZ19vcHRpb24pDQoJCQl7DQoJCQkJc2VsZjo6JGZpZWxkU2h1ZmZsZSA9IHRydWU7DQoJCQl9DQoJCQkvLyBpZiB0aGlzIGlzIGFuIGFzc2Vzc21lbnQgZm9ybSBmaXJzdCBwcmVwYXJlIGZpZWxkcy9xdWVzdGlvbnMNCgkJCWlmICgnYXNzZXNzbWVudCcgPT0gJHR5cGUpDQoJCQl7DQoJCQkJaWYgKCFzZWxmOjpwcmVwUXVlc3Rpb25zKCRkYXRhLCRmaWVsZHNLZXkpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJCS8vIHByZXBhcmUgdGhlIGZpZWxkcw0KCQkJaWYgKCFzZWxmOjpwcmVwRmllbGRzKCRkYXRhLT4kZmllbGRzS2V5LCRzZXR0aW5ncywkdHlwZSkpDQoJCQl7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJLy8gYnVpbGQgdGhlIFhNTCBmb3IgdGhlIGZvcm0NCgkJCSRyZXN1bHQgPSBzZWxmOjpidWlsZFhNTCgkZGF0YS0+JGZpZWxkc0tleSwkc2V0dGluZ3MsJHR5cGUpOw0KCQkJLy8gZGlkIHdlIGdldCBhIHZhbGlkIHJlc3VsdCBzZXQNCgkJCWlmICgkcmVzdWx0KQ0KCQkJew0KCQkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCQkkZG9uZSA9IHNlbGY6OnNhdmVYTUwoJHJlc3VsdCwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCQl9DQoJCX0NCgkJLy8gZGlkIHdlIGdldCBhIHZhbGlkIHJlc3VsdCBzZXQNCgkJaWYgKCRkb25lKQ0KCQl7DQoJCQkvLyBHZXQgdGhlIGZvcm0uDQoJCQlqaW1wb3J0KCAnam9vbWxhLmZvcm0uZm9ybScgKTsNCgkJCS8vIHNldCB0aGUgcGF0aHMNCgkJCUpGb3JtOjphZGRGb3JtUGF0aCgkcGF0aCk7DQoJCQlKRm9ybTo6YWRkRmllbGRQYXRoKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL21vZGVscy9maWVsZHMnKTsNCgkJCS8vIGdyZWF0IHdlIGFyZSBkb25lIHJldHVybiByZXN1bHRzDQoJCQlyZXR1cm4gSkZvcm06OmdldEluc3RhbmNlKCdjb21fW1tbY29tcG9uZW50XV1dLicuJGZpbGVOYW1lLCAkZmlsZU5hbWUsIGFycmF5KCdjb250cm9sJyA9PiAnamZvcm0nLCAnbG9hZF9kYXRhJyA9PiBmYWxzZSksIGZhbHNlLCBmYWxzZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCgkvKioNCgkgKglQcmVwYXJlIHRoZSBmaWVsZHMgdG8gbG9hZCBpbnRvIHhtbA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcHJlcEZpZWxkcygmJGRhdGEsJiRzZXR0aW5ncywkdHlwZSkNCgl7DQoJCWlmKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJLy8gZGVmYXVsdCBmaWVsZHMNCgkJCSRkZWZhdWx0cyA9IGFycmF5KCd0eXBlJywna2V5cycsJ25hbWUnLCdsYWJlbCcsJ2Rlc2NyaXB0aW9uJyk7DQoJCQkvLyBzb21lIGV4dHJhIHByZXAgZm9yIGFzc2Vzc21lbnRzDQoJCQlpZiAoJ2Fzc2Vzc21lbnQnID09ICR0eXBlKQ0KCQkJew0KCQkJCS8vIHdlIG11c3QgYnVpbGQgdGhlIG5hbWUgYW5kIGRlc2NyaXB0aW9uDQoJCQkJZm9yZWFjaCAoJGRhdGEgYXMgJGZpZWxkKQ0KCQkJCXsNCgkJCQkJJGZpZWxkLT5uYW1lID0gJGZpZWxkLT5pZDsNCgkJCQkJJGZpZWxkLT5kZXNjcmlwdGlvbiA9IFRleHQ6OnNwcmludGYoJ1RoaXMgcXVlc3Rpb24gY291bnRzICVzIHBvaW50cy4nLCAkZmllbGQtPnBvaW50KTsNCgkJCQkJJGZpZWxkLT5sYWJlbFBvaW50ID0gJyZuYnNwOyZuYnNwOzxlbT4nIC4gJGZpZWxkLT5wb2ludCAuJyZuYnNwOycuIFRleHQ6Ol8oJ1BvaW50cycpIC4gJzwvZW0+JzsNCgkJCQkJJGZpZWxkLT5hdXRvY29tcGxldGUgPSAnZmFsc2UnOw0KCQkJCQkkZmllbGQtPmF1dG9mb2N1cyA9ICdmYWxzZSc7DQoJCQkJCSRmaWVsZC0+bGFiZWxjbGFzcyA9ICcnOw0KCQkJCX0NCgkJCQkkZGVmYXVsdHNbXSA9ICdyZXF1aXJlZCc7DQoJCQkJJGRlZmF1bHRzW10gPSAnY2xhc3MnOw0KCQkJfQ0KCQkJDQoJCQlmb3JlYWNoICgkZGF0YSBhcyAkbnIgPT4gJiRmaWVsZCkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIGtleSBwcm9wZXR5DQoJCQkJJGZpZWxkLT5rZXlzID0gYXJyYXkoKTsNCgkJCQkvLyBmaXggdGhlIG9wdGlvbnMNCgkJCQlpZiAoMiA9PSAkZmllbGQtPnskc2V0dGluZ3NbJ3R5cGUnXX0pDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIG9wdGlvbnMNCgkJCQkJc2VsZjo6c2V0T3B0aW9uc0ZpZWxkKCRmaWVsZCwkc2V0dGluZ3MpOw0KCQkJCX0NCgkJCQllbHNlaWYgKDEgPT0gJGZpZWxkLT57JHNldHRpbmdzWyd0eXBlJ119KQ0KCQkJCXsNCgkJCQkJLy8gc29tZSBleHRyYSBwcmVwIGZvciBhc3Nlc3NtZW50cw0KCQkJCQlpZiAoJ2Fzc2Vzc21lbnQnID09ICR0eXBlKQ0KCQkJCQl7DQoJCQkJCQkkZmllbGQtPnskc2V0dGluZ3NbJ29wdGlvbnMnXX1bJ3llcyddID0gVGV4dDo6XygnWWVzJyk7DQoJCQkJCQkkZmllbGQtPnskc2V0dGluZ3NbJ29wdGlvbnMnXX1bJ25vJ10gPSBUZXh0OjpfKCdObycpOw0KCQkJCQkJaWYgKCFpc3NldCgkZmllbGQtPnskc2V0dGluZ3NbJ2ZpbHRlciddfSkpDQoJCQkJCQl7DQoJCQkJCQkJJGZpZWxkLT5maWx0ZXIgPSAnV09SRCc7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgdGhlIG9wdGlvbnMNCgkJCQkJCXNlbGY6OnNldE9wdGlvbnNGaWVsZCgkZmllbGQsJHNldHRpbmdzLCdyYWRpbycpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXVuc2V0KCRmaWVsZC0+eyRzZXR0aW5nc1snb3B0aW9ucyddfSk7DQoJCQkJfQ0KCQkJCS8vIHNvbWUgY291bnRyeSBmaXgNCgkJCQlpZiAoMTEgPT0gJGZpZWxkLT57JHNldHRpbmdzWyd0eXBlJ119ICYmIGlzc2V0KCRmaWVsZC0+ZGVmYXVsdGNvdW50cnkpKQ0KCQkJCXsNCgkJCQkJJGZpZWxkLT57JHNldHRpbmdzWydkZWZhdWx0J119ID0gJGZpZWxkLT5kZWZhdWx0Y291bnRyeTsNCgkJCQl9DQoJCQkJLy8gbG9hZCB0aGUgZ2l2ZW4ga2V5cw0KCQkJCWZvcmVhY2ggKCRzZXR0aW5ncyBhcyAka2V5ID0+ICRrZXlGaWVsZCkNCgkJCQl7DQoJCQkJCWlmICghaW5fYXJyYXkoJGtleSwkZGVmYXVsdHMpICYmIGlzc2V0KCRmaWVsZC0+JGtleUZpZWxkKSkNCgkJCQkJewkJCQ0KCQkJCQkJLy8gb25seSBzZXQga2V5cyBuZWVkZWQgZm9yIHRoaXMgdHlwZQ0KCQkJCQkJJHNldCA9IHNlbGY6OiRmaWVsZFR5cGVzWyRmaWVsZC0+eyRzZXR0aW5nc1sndHlwZSddfV07DQoJCQkJCQkvLyBjaGVjayBpZiB0aGlzIGZpZWxkIGlzIHBhcnQgb2YgdGhpcyB0eXBlDQoJCQkJCQlpZiAoaXNzZXQoJHNldFska2V5XSkgJiYgIWVtcHR5KCRmaWVsZC0+JGtleUZpZWxkKSkNCgkJCQkJCXsNCgkJCQkJCQkkZmllbGQtPmtleXNbJGtleV0gPSAkZmllbGQtPiRrZXlGaWVsZDsNCgkJCQkJCX0NCgkJCQkJCS8vIHJlbW92ZSB0aGUgZmlsZWQNCgkJCQkJCXVuc2V0KCRmaWVsZC0+JGtleUZpZWxkKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCS8vIHNldCBlcnJvcg0KCQlKRXJyb3I6OnJhaXNlV2FybmluZyg1MDAsIFRleHQ6OnNwcmludGYoJ05vIGZpZWxkcyB3ZXJlIHNldCBmb3IgdGhpcyAlcywgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuJywgJHR5cGUpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE9wdGlvbnNGaWVsZCgmJGZpZWxkLCRzZXR0aW5ncywkdHlwZSA9ICdsaXN0JykNCgl7DQoJCS8vIGZpeCB0aGUgb3B0aW9ucw0KCQlpZiAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWydvcHRpb25zJ119KSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZmllbGQtPnskc2V0dGluZ3NbJ29wdGlvbnMnXX0pKQ0KCQl7DQoJCQkkZmlsdGVyID0gJ1NUUklORyc7DQoJCQkkbm90U2V0RmlsdGVyID0gdHJ1ZTsNCgkJCSRidWlsZFNlbGVjdGlvbiA9IGpzb25fZGVjb2RlKCRmaWVsZC0+eyRzZXR0aW5nc1snb3B0aW9ucyddfSx0cnVlKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVpbGRTZWxlY3Rpb25bJ3NlbGVjdGlvbiddKSkNCgkJCXsNCgkJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCQlpZiAoaXNzZXQoJGJ1aWxkU2VsZWN0aW9uWyd2YWx1ZSddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVpbGRTZWxlY3Rpb25bJ3ZhbHVlJ10pKQ0KCQkJCXsNCgkJCQkJLy8gdG8gdXNlIHZhbHVlcyBpbnN0ZWFkIG9mIHRoZSB0ZXh0DQoJCQkJCSRmaWx0ZXIgPSAnSU5UJzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gaWYgbm90IG11bHRpIHRoZW4gYWRkIHNvbWUgZml4IHRvIGluc3VyZSBubyBzZWxlY3Rpb24gaXMgc2VsZWN0ZWQgYnkgZGVmYXVsdA0KCQkJCQlpZiAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWydtdWx0aXBsZSddfSkgJiYgaXNfbnVtZXJpYygkZmllbGQtPnskc2V0dGluZ3NbJ211bHRpcGxlJ119KSkNCgkJCQkJew0KCQkJCQkJaWYgKDIgIT0gJGZpZWxkLT57JHNldHRpbmdzWydtdWx0aXBsZSddfSAmJiAnbGlzdCcgPT0gJHR5cGUpDQoJCQkJCQl7DQoJCQkJCQkJJGJ1Y2tldFsnJ10gPSBUZXh0OjpfKCdTZWxlY3Qgc29tZSBvcHRpb24nKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkvLyBidWlsZCB0aGUgc2VsZWN0aW9uIGFycmF5DQoJCQkJCWZvcmVhY2ggKCRidWlsZFNlbGVjdGlvblsnc2VsZWN0aW9uJ10gYXMgJHNlbGVjdGlvbikNCgkJCQkJew0KCQkJCQkJaWYgKHN0cnBvcygkc2VsZWN0aW9uLCd8JykgIT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCSRhcnJheV9zZXR0ZXIgPSBleHBsb2RlKCd8JywgJHNlbGVjdGlvbik7DQoJCQkJCQkJaWYgKGNvdW50KCRhcnJheV9zZXR0ZXIpID09IDIpDQoJCQkJCQkJew0KCQkJCQkJCQlsaXN0KCR2YWx1ZV9zZXR0ZXIsICR0ZXh0X3NldHRlcikgPSAkYXJyYXlfc2V0dGVyOw0KCQkJCQkJCQkkYnVja2V0W1N1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZhbHVlX3NldHRlcildID0gJHRleHRfc2V0dGVyOw0KCQkJCQkJCQkvLyBzZXQgdGhlIGZpbHRlciBiYXNlZCBvbiB0aGUgdHlwZQ0KCQkJCQkJCQlpZiAoaXNfbnVtZXJpYygkdmFsdWVfc2V0dGVyKSAmJiAkbm90U2V0RmlsdGVyKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlpZiAoaXNfaW50KCR2YWx1ZV9zZXR0ZXIpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRmaWx0ZXIgPSAnSU5UJzsNCgkJCQkJCQkJCQkkbm90U2V0RmlsdGVyID0gZmFsc2U7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQllbHNlaWYgKGlzX2Zsb2F0KCR2YWx1ZV9zZXR0ZXIpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRmaWx0ZXIgPSAnRkxPQVQnOw0KCQkJCQkJCQkJCSRub3RTZXRGaWx0ZXIgPSBmYWxzZTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlaWYgKGlzX3N0cmluZygkdmFsdWVfc2V0dGVyKSAmJiAkbm90U2V0RmlsdGVyKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkZmlsdGVyID0gJ1dPUkQnOw0KCQkJCQkJCQkJJG5vdFNldEZpbHRlciA9IGZhbHNlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoY291bnQoJGFycmF5X3NldHRlcikgPT0gMSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRidWNrZXRbJyddID0gJGFycmF5X3NldHRlclswXTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGJ1Y2tldFtTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZWxlY3Rpb24pXSA9ICRzZWxlY3Rpb247DQoJCQkJCQkJCS8vIHNldCB0aGUgZmlsdGVyIGJhc2VkIG9uIHRoZSB0eXBlDQoJCQkJCQkJCWlmIChpc19udW1lcmljKCRzZWxlY3Rpb24pICYmICRub3RTZXRGaWx0ZXIpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWlmIChpc19pbnQoJHNlbGVjdGlvbikpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGZpbHRlciA9ICdJTlQnOw0KCQkJCQkJCQkJCSRub3RTZXRGaWx0ZXIgPSBmYWxzZTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2VpZiAoaXNfZmxvYXQoJHNlbGVjdGlvbikpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGZpbHRlciA9ICdGTE9BVCc7DQoJCQkJCQkJCQkJJG5vdFNldEZpbHRlciA9IGZhbHNlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2VpZiAoaXNfc3RyaW5nKCRzZWxlY3Rpb24pICYmICRub3RTZXRGaWx0ZXIpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRmaWx0ZXIgPSAnV09SRCc7DQoJCQkJCQkJCQkkbm90U2V0RmlsdGVyID0gZmFsc2U7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJGJ1Y2tldFtTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZWxlY3Rpb24pXSA9ICRzZWxlY3Rpb247DQoJCQkJCQkJLy8gc2V0IHRoZSBmaWx0ZXIgYmFzZWQgb24gdGhlIHR5cGUNCgkJCQkJCQlpZiAoaXNfbnVtZXJpYygkc2VsZWN0aW9uKSAmJiAkbm90U2V0RmlsdGVyKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKGlzX2ludCgkc2VsZWN0aW9uKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJGZpbHRlciA9ICdJTlQnOw0KCQkJCQkJCQkJJG5vdFNldEZpbHRlciA9IGZhbHNlOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2VpZiAoaXNfZmxvYXQoJHNlbGVjdGlvbikpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRmaWx0ZXIgPSAnRkxPQVQnOw0KCQkJCQkJCQkJJG5vdFNldEZpbHRlciA9IGZhbHNlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoaXNfc3RyaW5nKCRzZWxlY3Rpb24pICYmICRub3RTZXRGaWx0ZXIpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsdGVyID0gJ1dPUkQnOw0KCQkJCQkJCQkkbm90U2V0RmlsdGVyID0gZmFsc2U7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRmaWVsZC0+eyRzZXR0aW5nc1snb3B0aW9ucyddfSA9ICRidWNrZXQ7DQoJCQl9DQoJCQkNCgkJCS8vIGZpeCBtdWx0aXBsZSBzd2l0Y2gNCgkJCWlmICgyID09ICRmaWVsZC0+eyRzZXR0aW5nc1sndHlwZSddfSAmJiBpc3NldCgkZmllbGQtPnskc2V0dGluZ3NbJ211bHRpcGxlJ119KSAmJiBpc19udW1lcmljKCRmaWVsZC0+eyRzZXR0aW5nc1snbXVsdGlwbGUnXX0pKQ0KCQkJew0KCQkJCWlmICgyID09ICRmaWVsZC0+eyRzZXR0aW5nc1snbXVsdGlwbGUnXX0pDQoJCQkJew0KCQkJCQkkZmllbGQtPnskc2V0dGluZ3NbJ211bHRpcGxlJ119ID0gJ3RydWUnOw0KCQkJCQkkZmlsdGVyID0gJ0FSUkFZJzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGZpZWxkLT57JHNldHRpbmdzWydtdWx0aXBsZSddfSA9ICdmYWxzZSc7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXVuc2V0KCRmaWVsZC0+eyRzZXR0aW5nc1snbXVsdGlwbGUnXX0pOw0KCQkJfQ0KCQkJDQoJCQkvLyBzZXQgdGhlIGZpbHRlciBpZiBub3Qgc2V0IGFscmVhZHkNCgkJCWlmICghaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWydmaWx0ZXInXX0pIHx8IGVtcHR5KCRmaWVsZC0+eyRzZXR0aW5nc1snZmlsdGVyJ119KSkNCgkJCXsNCgkJCQkkZmllbGQtPmZpbHRlciA9ICRmaWx0ZXI7DQoJCQl9DQoJCX0NCgl9DQoJDQoJLyoqDQoJICoJQ2hlY2sgaWYgYSBzdHJpbmcgaXMganNvbg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNKc29uKCRzdHJpbmcpDQoJew0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHN0cmluZykpDQoJCXsNCgkJCWpzb25fZGVjb2RlKCRzdHJpbmcpOw0KCQkJcmV0dXJuIChqc29uX2xhc3RfZXJyb3IoKSA9PT0gSlNPTl9FUlJPUl9OT05FKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJVG8gYWRkIG51bWJlcnMgdG8gcXVlc3Rpb25zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcUNvdW50ZXI7DQoJDQoJLyoqDQoJICoJQnVpbGQgdGhlIGZvcm0geG1sDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBidWlsZFhNTCgkZGF0YSwkc2V0dGluZ3MsJHR5cGVGaWVsZFNldCkNCgl7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIGFsd2F5cyByZXNldA0KCQkJJGZpZWxkU2V0ID0gYXJyYXkoKTsNCgkJCS8vIHNldCB0aGUgZGVmYXV0bCBmaWVsZHMNCgkJCSRmaWVsZFNldFtdID0gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+JzsNCgkJCSRmaWVsZFNldFtdID0gJzxmb3JtIGFkZGZpZWxkcGF0aD0iL2FkbWluaXN0cmF0b3IvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL21vZGVscy9maWVsZHMiPic7DQoJCQkkZmllbGRTZXRbXSA9ICc8ZmllbGRzZXQgbmFtZT0iJy4kdHlwZUZpZWxkU2V0LiciPic7DQoJCQkkZmllbGRTZXRbXSA9ICJcdDwhLS0gRHluYW1pYyBGaWVsZHMuIC0tPiI7DQoJCQkvLyBsb2FkIHRoZSBmaWVsZHMNCgkJCXNlbGY6OiRxQ291bnRlciA9IDE7DQoJCQlmb3JlYWNoICgkZGF0YSBhcyAkZmllbGQpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdmFsdWVzDQoJCQkJJHR5cGUgPSAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWyd0eXBlJ119KSkgPyAkZmllbGQtPnskc2V0dGluZ3NbJ3R5cGUnXX06bnVsbDsNCgkJCQkkbGFiZWwgPSAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWydsYWJlbCddfSkpID8gJGZpZWxkLT57JHNldHRpbmdzWydsYWJlbCddfTpudWxsOw0KCQkJCSRkZXNjcmlwdGlvbiA9IChpc3NldCgkZmllbGQtPnskc2V0dGluZ3NbJ2Rlc2NyaXB0aW9uJ119KSkgPyAkZmllbGQtPnskc2V0dGluZ3NbJ2Rlc2NyaXB0aW9uJ119Om51bGw7DQoJCQkJaWYgKCdhc3Nlc3NtZW50JyA9PSAkdHlwZUZpZWxkU2V0KQ0KCQkJCXsNCgkJCQkJJGxhYmVsIC49IChpc3NldCgkZmllbGQtPmxhYmVsUG9pbnQpKSA/ICRmaWVsZC0+bGFiZWxQb2ludDonJzsNCgkJCQl9DQoJCQkJJG5hbWUgPSAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWyduYW1lJ119KSkgPyAkZmllbGQtPnskc2V0dGluZ3NbJ25hbWUnXX06bnVsbDsNCgkJCQkka2V5cyA9IChpc3NldCgkZmllbGQtPmtleXMpKSA/ICRmaWVsZC0+a2V5czpudWxsOw0KCQkJCS8vIGNoZWNrIGlmIHdlIGNhbiBjb250aW51ZQ0KCQkJCWlmICgkYl9maWVsZCA9IHNlbGY6OnNldER5bmFtaWNGaWVsZCgkdHlwZSwkbGFiZWwsJGRlc2NyaXB0aW9uLCRuYW1lLCRrZXlzKSkNCgkJCQl7DQoJCQkJCSRmaWVsZFNldFtdID0gIlx0Ii4kYl9maWVsZDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCg0KCQkJJGZpZWxkU2V0W10gPSAiPC9maWVsZHNldD4iOw0KCQkJJGZpZWxkU2V0W10gPSAiPC9mb3JtPiI7DQoNCgkJCS8vIHJldHVuciB0aGUgc2V0DQoJCQlyZXR1cm4gaW1wbG9kZSgiXG4iLCRmaWVsZFNldCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCgkvKioNCgkgKglCdWlsZCB0aGUgeG1sIGZvciB0aGUgZmllbGQgKGR5bmFtaWNseSkNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldER5bmFtaWNGaWVsZCgkdHlwZSwkbGFiZWwsJGRlc2NyaXB0aW9uLCRuYW1lLCRrZXlzID0gbnVsbCkNCgl7DQoJCS8vIG9ubHkgbG9hZCB0aGUgZmllbGRzIHRoYXQgYXJlIHNldA0KCQlpZiAoaXNzZXQoc2VsZjo6JGZpZWxkVHlwZXNbJHR5cGVdKSAmJiAhaXNfbnVsbCgkbmFtZSkpDQoJCXsNCgkJCS8vIGFsd2F5cyByZXNldA0KCQkJJGZpZWxkID0gYXJyYXkoKTsNCgkJCSRzZXQgPSBzZWxmOjokZmllbGRUeXBlc1skdHlwZV07DQoJCQkvLyB0byBza2lwDQoJCQkkbm90ID0gYXJyYXkoJ3R5cGUnLCduYW1lJywnY2xhc3MnLCdsYWJlbCcsJ2ZpbHRlcicsJ2Rlc2NyaXB0aW9uJywncmVxdWlyZWQnKTsNCgkJCS8vIHRoZSBub3QgY291bnRlciBhcnJheQ0KCQkJJG5vdENvdW50ID0gYXJyYXkoJ25vdGUnLCdzcGFjZXInKTsNCgkJCSRvcHRpb25zID0gZmFsc2U7DQoJCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkJJGNsYXNzID0gKGlzc2V0KCRrZXlzWydjbGFzcyddKSkgPyAka2V5c1snY2xhc3MnXS4oKGlzc2V0KCRzZXRbJ2NsYXNzJ10pKSA/ICcgJy4kc2V0WydjbGFzcyddOicnKTooKGlzc2V0KCRzZXRbJ2NsYXNzJ10pKSA/ICRzZXRbJ2NsYXNzJ106JycpOw0KCQkJJGZpbHRlciA9IChpc3NldCgka2V5c1snZmlsdGVyJ10pKSA/ICRrZXlzWydmaWx0ZXInXTooKGlzc2V0KCRzZXRbJ2ZpbHRlciddKSkgPyAkc2V0WydmaWx0ZXInXTonU1RSSU5HJyk7DQoJCQkkcmVxdWlyZWQgPSAoaXNzZXQoJGtleXNbJ3JlcXVpcmVkJ10pKSA/ICRrZXlzWydyZXF1aXJlZCddOiAoKGlzc2V0KCRzZXRbJ3JlcXVpcmVkJ10pKSA/ICRzZXRbJ3JlcXVpcmVkJ106J2ZhbHNlJyk7DQoJCQkvLyBidWlsZCB0aGUgZmllbGQNCgkJCSRmaWVsZFtdID0gJzwhLS0gJy5TdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRuYW1lLCdXdycpLicgRmllbGQuIFR5cGU6ICcuU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2V0Wyd0eXBlJ10sJ1d3JykuJyAoam9vbWxhKSAtLT4nOw0KCQkJJGZpZWxkW10gPSAiXHQiLic8ZmllbGQnOw0KCQkJJGZpZWxkW10gPSAiXHRcdCIuJ3R5cGU9IicuJHNldFsndHlwZSddLiciJzsNCgkJCSRmaWVsZFtdID0gIlx0XHQiLiduYW1lPSInLiRuYW1lLiciJzsNCgkJCWlmICghaW5fYXJyYXkoJHNldFsndHlwZSddLCRub3RDb3VudCkpDQoJCQl7DQoJCQkJJGZpZWxkW10gPSAiXHRcdCIuJ2xhYmVsPSInLnNlbGY6OiRxQ291bnRlci4nLiAnLmh0bWxzcGVjaWFsY2hhcnModHJpbSgkbGFiZWwpKS4nIic7DQoJCQkJc2VsZjo6JHFDb3VudGVyKys7DQoJCQl9DQoJCQllbHNlaWYgKDE0ID09ICR0eXBlKQ0KCQkJew0KCQkJCSRmaWVsZFtdID0gIlx0XHQiLidsYWJlbD0iJy5odG1sc3BlY2lhbGNoYXJzKHRyaW0oJGxhYmVsKSkuJyInOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgZGVzYyBpcyBzZXQNCgkJCWlmICgkZGVzY3JpcHRpb24pDQoJCQl7DQoJCQkJJGZpZWxkW10gPSAiXHRcdCIuJ2Rlc2NyaXB0aW9uPSInLmh0bWxzcGVjaWFsY2hhcnMoJGRlc2NyaXB0aW9uKS4nIic7DQoJCQl9DQoJCQkkZmllbGRbXSA9ICJcdFx0Ii4nY2xhc3M9IicuJGNsYXNzLiciJzsNCgkJCSRmaWVsZFtdID0gIlx0XHQiLidmaWx0ZXI9IicuJGZpbHRlci4nIic7DQoJCQkkZmllbGRbXSA9ICJcdFx0Ii4ncmVxdWlyZWQ9IicuJHJlcXVpcmVkLiciJzsNCgkJCWlmIChpc3NldCgka2V5cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtleXMpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCXsNCgkJCQkJaWYgKCRrZXkgPT0gJ29wdGlvbnMnKQ0KCQkJCQl7DQoJCQkJCQkkb3B0aW9ucyA9ICR2YWx1ZTsNCgkJCQkJCSRub3RbXSA9ICRrZXk7DQoJCQkJCQljb250aW51ZTsNCgkJCQkJfQ0KCQkJCQlpZiAoIWluX2FycmF5KCRrZXksJG5vdCkpDQoJCQkJCXsNCgkJCQkJCSRub3RbXSA9ICRrZXk7DQoJCQkJCQkkZmllbGRbXSA9ICJcdFx0Ii5zZWxmOjpodG1sRXNjYXBlKCRrZXkpLic9IicuaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpLiciJzsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGxvYWQgdGhlIGRhZmF1bHRzIHN0aWxsIG5vdCBzZXQNCgkJCWZvcmVhY2ggKCRzZXQgYXMgJF9rZXkgPT4gJF92YWx1ZSkNCgkJCXsNCgkJCQlpZiAoJF9rZXkgPT0gJ29wdGlvbnMnICYmICEkb3B0aW9ucykNCgkJCQl7DQoJCQkJCSRvcHRpb25zID0gJF92YWx1ZTsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWlmICghaW5fYXJyYXkoJF9rZXksJG5vdCkpDQoJCQkJew0KCQkJCQkkZmllbGRbXSA9ICJcdFx0Ii5zZWxmOjpodG1sRXNjYXBlKCRfa2V5KS4nPSInLmh0bWxzcGVjaWFsY2hhcnMoJF92YWx1ZSkuJyInOw0KCQkJCQkkbm90W10gPSAkX2tleTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGlzIGZpZWxkIGhhcyBvcHRpb25zDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG9wdGlvbnMpKQ0KCQkJew0KCQkJCSRmaWVsZFtdID0gIlx0XHQ+IjsNCgkJCQkkZmllbGRbXSA9ICJcdFx0PCEtLSBPcHRpb24gU2V0LiAtLT4iOw0KCQkJCWZvcmVhY2goJG9wdGlvbnMgYXMgJHZhbCA9PiAkdGV4dCkNCgkJCQl7DQoJCQkJCSRmaWVsZFtdID0gIlx0XHQiLic8b3B0aW9uIHZhbHVlPSInLiR2YWwuJyI+JzsNCgkJCQkJJGZpZWxkW10gPSAiXHRcdFx0Ii5odG1sc3BlY2lhbGNoYXJzKHNlbGY6Omh0bWxFc2NhcGUoJHRleHQpKS4iPC9vcHRpb24+IjsNCgkJCQl9DQoJCQkJJGZpZWxkW10gPSAiXHQ8L2ZpZWxkPiI7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGZpZWxkW10gPSAiXHQvPiI7DQoJCQl9DQoJCQkvLyBkb25lLCByZXR1cm4gZHluYW1pYyBidWlsZGVkIGZpZWxkDQoJCQlyZXR1cm4gaW1wbG9kZSgiXG4iLCRmaWVsZCk7DQoJCX0NCgkJLy8gc2V0IGVycm9yDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKDUwMCwgVGV4dDo6XygnQSBmaWVsZCBjb3VsZCBub3QgYmUgYnVpbGQsIHBsZWFzZSBub3RpZnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yLicpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWZpZWxkVHlwZXMgRGVmYXVsdCBTZXR0aW5ncw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGZpZWxkVHlwZXMgPSBhcnJheSgNCgkJCTEgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdyYWRpbycsIA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ2J0bi1ncm91cCBidG4tZ3JvdXAteWVzbm8nLA0KCQkJCSdvcHRpb25zJyA9PiBhcnJheSgnWWVzJywnTm8nKSwNCgkJCQknZmlsdGVyJyA9PiAnd29yZCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTIgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdsaXN0JywgDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAnbGlzdF9jbGFzcycsDQoJCQkJJ211bHRpcGxlJyA9PiBmYWxzZSwNCgkJCQknb3B0aW9ucycgPT4gYXJyYXkoKSwNCgkJCQknZmlsdGVyJyA9PiAnaW50JywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ3Nob3dvbicgPT4gJycgKSwNCgkJCTMgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdlZGl0b3InLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknd2lkdGgnID0+ICcxMDAlJywgDQoJCQkJJ2hlaWdodCcgPT4gJzUwMHB4JywgDQoJCQkJJ2ZpbHRlcicgPT4gJ3NhZmVodG1sJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2J1dHRvbnMnID0+ICdmYWxzZScsDQoJCQkJJ2hpZGUnID0+ICcnLA0KCQkJCSdlZGl0b3InID0+ICdqY2V8bm9uZScsDQoJCQkJJ3Jvd3MnID0+ICcnLA0KCQkJCSdjb2xzJyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk0ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAndGV4dGFyZWEnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNDAwJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEgdWstd2lkdGgtMS0xJywNCgkJCQknd2lkdGgnID0+ICcxMDAlJywgDQoJCQkJJ2hlaWdodCcgPT4gJzUwMHB4JywgDQoJCQkJJ2ZpbHRlcicgPT4gJ3N0cmluZycsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdoaW50JyA9PiAnJywNCgkJCQkncm93cycgPT4gJzIwJywNCgkJCQknY29scycgPT4gJzEwJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk1ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAndGV4dCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknYXV0b2NvbXBsZXRlJyA9PiAnb24nLA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsIA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLCANCgkJCQknZmlsdGVyJyA9PiAnc3RyaW5nJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2hpbnQnID0+ICcnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJNiA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ3VybCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknYXV0b2NvbXBsZXRlJyA9PiAnb24nLA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsIA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknaGludCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk3ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnZW1haWwnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ2F1dG9jb21wbGV0ZScgPT4gJ29uJywNCgkJCQkndmFsaWRhdGUnID0+ICcnLCANCgkJCQknZmllbGQnID0+ICcnLA0KCQkJCSdzaXplJyA9PiAnNjAnLCANCgkJCQknbWF4bGVuZ3RoJyA9PiAnMTUwJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2hpbnQnID0+ICcnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJOCA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ3RlbCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknYXV0b2NvbXBsZXRlJyA9PiAnb24nLA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsIA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknaGludCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk5ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnY2FsZW5kYXInLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLA0KCQkJCSdmaWx0ZXInID0+ICdzZXJ2ZXJfdXRjJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2Zvcm1hdCcgPT4gJyVkLSVtLSVZJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTEwID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnY29sb3InLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLA0KCQkJCSdmaWx0ZXInID0+ICdzdHJpbmcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTExID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnY291bnRyeW5hbWUnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ2xpc3RfY2xhc3MnLA0KCQkJCSdmaWx0ZXInID0+ICdzdHJpbmcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTEyID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnaGlkZGVuJywgDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9oaWRkZW4nLCANCgkJCQknZmlsdGVyJyA9PiAnaW50JywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2RlZmF1bHQnID0+ICcxJyApLA0KCQkJMTMgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdmaWxlJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdzaXplJyA9PiAnNjAnLCANCgkJCQknZmlsdGVyJyA9PiAnJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2FjY2VwdCcgPT4gJ2ltYWdlLyonLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQkxNCA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ25vdGUnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdoZWFkaW5nJyA9PiAnaDQnLA0KCQkJCSdjbGFzcycgPT4gJ2FsZXJ0JywNCgkJCQknY2xvc2UnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTE1ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnc3BhY2VyJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknaHInID0+ICd0cnVlJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTE2ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnbm90ZScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2hlYWRpbmcnID0+ICdoNCcsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQkxNyA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ3JlZ2lvbm5hbWUnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ2xpc3RfY2xhc3MnLA0KCQkJCSdmaWx0ZXInID0+ICdzdHJpbmcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTMwID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAncGFzc3dvcmQnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3ZhbGlkYXRlLXBhc3N3b3JkJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsIA0KCQkJCSdmaWx0ZXInID0+ICdyYXcnLCANCgkJCQkndmFsaWRhdGUnID0+ICdwYXNzd29yZCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdhdXRvY29tcGxldGUnID0+ICdvZmYnLA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQkzMSA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ2NhcHRjaGEnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSd2YWxpZGF0ZScgPT4gJ2NhcHRjaGEnLCANCgkJCQknbmFtZXNwYWNlJyA9PiAnJykNCgkJCSk7DQoNCgkvKioNCgkqIAlzYXZlIFhNTA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2F2ZVhNTCgkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCkNCgl7DQoJCS8vIGNoZWNrIGlmIHBhdGggZXhpc3RzDQoJCWlmICghZmlsZV9leGlzdHMoJHBhdGgpKQ0KCQl7DQoJCQkvLyBpZiBub3QgdGhlIG1ha2UgdGhlIHBhdGgNCgkJCW1rZGlyKCRwYXRoLCAwNzU1LCB0cnVlKTsNCgkJfQ0KCQlsaWJ4bWxfdXNlX2ludGVybmFsX2Vycm9ycyh0cnVlKTsNCgkJLy8gbWFrZSBzdXJlIHRoaXMgaXMgdmFsaWQgeG1sDQoJCWlmIChzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGRhdGEpKQ0KCQl7DQoJCQkkZnAgPSBmb3BlbigkZnVsbFBhdGgsICd3Jyk7DQoJCQlmd3JpdGUoJGZwLCAkZGF0YSk7DQoJCQlmY2xvc2UoJGZwKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCQ0KCQkvLyBzZXQgZXJyb3INCgkJSkVycm9yOjpyYWlzZVdhcm5pbmcoNTAwLCBUZXh0OjpfKCdUaGUgeG1sIGZvciB0aGlzIGZyb20gY291bGQgbm90IGJlIHZhbGlkYXRlZCwgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuJykpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJGR5bmFtaWNEYXRhID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RHluYW1pY0RhdGEoJGRhdGEsICRwbGFjZWhvbGRlcnMpDQoJew0KCQkka2V5TUQ1ID0gbWQ1KCRkYXRhLmpzb25fZW5jb2RlKCRwbGFjZWhvbGRlcnMpKTsNCgkJaWYgKCFpc3NldChzZWxmOjokZHluYW1pY0RhdGFbJGtleU1ENV0pKQ0KCQl7DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJc2VsZjo6c2V0VGhlSUYoJGRhdGEsICRwbGFjZWhvbGRlcnMpOw0KCQkJCXNlbGY6OiRkeW5hbWljRGF0YVska2V5TUQ1XSA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHBsYWNlaG9sZGVycyksIGFycmF5X3ZhbHVlcygkcGxhY2Vob2xkZXJzKSwgJGRhdGEpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRkeW5hbWljRGF0YVska2V5TUQ1XSA9ICRkYXRhOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokZHluYW1pY0RhdGFbJGtleU1ENV07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUaGVJRigmJHN0cmluZywgJHBsYWNlaG9sZGVycykNCgl7CQkNCgkJLy8gb25seSBub3JtYWwgaWYgZW5kaWYNCgkJJGNvbmRpdGlvbiAJPSAnW2EtejAtOVxfXC1dKyc7DQoJCSRpbm5lcgkJPSAnKCg/Oig/IVxbXC8/SUYpKD8hXFtcLz9FTFNFKSg/IVxbXC8/RUxTRUlGKS4pKj8pJzsNCgkJJGlmCQk9ICdcW0lGXHM/KCcuJGNvbmRpdGlvbi4nKVxdJzsNCgkJJGVsc2VpZgkJPSAnXFtFTFNFSUZccz8oJy4kY29uZGl0aW9uLicpXF0nOw0KCQkkZWxzZQkJPSAnXFtFTFNFXF0nOw0KCQkkZW5kaWYJCT0gJ1xbRU5ESUZcXSc7DQoJCS8vIHNldCB0aGUgcGF0dGVybnMNCgkJJHBhdHRlcm5zID0gYXJyYXkoKTsNCgkJLy8gbm9ybWFsIGlmIGVuZGlmDQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkvLyBub3JtYWwgaWYgZWxzZSBlbmRpZg0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCS8vIGR5bmFtaWMgaWYgZWxzZWlmJ3MgZW5kaWYNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkvLyBkeW5hbWljIGlmIGVsc2VpZidzIGVsc2UgZW5kaWYNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2UuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2UuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCS8vIHJ1biB0aGUgcGF0dGVybnMgdG8gc2V0dXAgdGhlIHN0cmluZw0KCQlmb3JlYWNoICgkcGF0dGVybnMgYXMgJHBhdHRlcm4pDQoJCXsNCgkJCXdoaWxlIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkc3RyaW5nLCAkbWF0Y2gpKQ0KCQkJew0KCQkJCSRrZWVwIAk9IHNlbGY6OnJlbWFpbmRlcklGKCRtYXRjaCwgJHBsYWNlaG9sZGVycyk7DQoJCQkJJHN0cmluZwk9IHByZWdfcmVwbGFjZSgkcGF0dGVybiwgJGtlZXAsICRzdHJpbmcsIDEpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiByZW1haW5kZXJJRigmJG1hdGNoLCAmJHBsYWNlaG9sZGVycykNCgl7CQ0KCQkvLyBkZWZhdWx0IHdlIGtlZXAgbm90aGluZw0KCQkka2VlcCA9ICcnOw0KCQkkZm91bmQgPSBmYWxzZTsNCgkJLy8gZ2V0IG1hdGNoIGxlbmdodA0KCQkkbGVuZ3RoID0gY291bnQoJG1hdGNoKTsNCgkJLy8gcmFuZ2VzIHRvIGNoZWNrDQoJCSRpaSA9IHJhbmdlKDIsMzAsMik7IC8vIGV2ZW4gbnVtYmVycyAoY29udGVudCkNCgkJJGlpaSA9IHJhbmdlKDEsIDI1LCAyKTsgLy8gb2RkIG51bWJlcnMgKHBsYWNlaG9sZGVyKQ0KCQkvLyBpZiBlbXB0eSB2YWx1ZSByZW1vdmUgd2hvbGUgbGluZSBlbHNlIHNob3cgbGluZSBidXQgcmVtb3ZlIGFsbCBbQ09ERV0NCgkJZm9yZWFjaCAoJGlpaSBhcyAkY29udGVudCA9PiAkcGxhY2Vob2xkZXIpDQoJCXsNCgkJCWlmIChpc3NldCgkbWF0Y2hbJHBsYWNlaG9sZGVyXSkgJiYgZW1wdHkoJHBsYWNlaG9sZGVyc1snWycuJG1hdGNoWyRwbGFjZWhvbGRlcl0uJ10nXSkpDQoJCQl7DQoJCQkJLy8ga2VlcCBub3RoaW5nIG9yIG5leHQgb3B0aW9uDQoJCQkJJGtlZXAgPSAnJzsNCgkJCX0NCgkJCWVsc2VpZiAoaXNzZXQoJG1hdGNoWyRpaVskY29udGVudF1dKSkNCgkJCXsNCgkJCQkka2VlcCA9IGFkZGNzbGFzaGVzKCRtYXRjaFskaWlbJGNvbnRlbnRdXSwgJyQnKTsNCgkJCQkkZm91bmQgPSB0cnVlOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCS8vIGlmIG5vdCBmb3VuZCBsb2FkIGVsc2UgaWYgc2V0DQoJCWlmICghJGZvdW5kICYmIGluX2FycmF5KCRsZW5ndGgsICRpaSkpDQoJCXsNCgkJCSRrZWVwID0gYWRkY3NsYXNoZXMoJG1hdGNoWyRsZW5ndGggLSAxXSwgJyQnKTsNCgkJfQ0KCQlyZXR1cm4gJGtlZXA7CQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHBsYWNlSG9sZGVyczsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBsYWNlSG9sZGVycygkc3R1ZGVudCwgJHR5cGUgPSBudWxsLCAkY29uZmlnID0gYXJyYXkoKSkNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JHBsYWNlSG9sZGVyc1skc3R1ZGVudF0pKQ0KCQl7DQoJCQkvLyBnZXQgbmVlZGVkIGRldGFpbHMNCgkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCSRkZXRhaWxzW10gPSBzZWxmOjpnZXRpbnN0aXR1dGlvbkRldGFpbHMoKTsNCgkJCSRkZXRhaWxzW10gPSBzZWxmOjpnZXRzdHVkZW50RGV0YWlscygkc3R1ZGVudCk7DQoJCQkvLyB0eXBlIHN3aXRjaCAoVE9ETykNCgkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHN0dWRlbnRdID0gc2VsZjo6bWVyZ2VBcnJheXMoJGRldGFpbHMpOw0KCQl9DQoJCS8vIGFkZCB0aGUgY29maWcgYXJyYXkgaWYgbmVlZGVkDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnKSkNCgkJew0KCQkJJGRldGFpbHNbXSA9IHNlbGY6OiRwbGFjZUhvbGRlcnNbJHN0dWRlbnRdOw0KCQkJJGRldGFpbHNbXSA9ICRjb25maWc7DQoJCQlzZWxmOjokcGxhY2VIb2xkZXJzWyRzdHVkZW50XSA9IHNlbGY6Om1lcmdlQXJyYXlzKCRkZXRhaWxzKTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JHBsYWNlSG9sZGVyc1skc3R1ZGVudF07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkaW5zdGl0dXRpb25EZXRhaWxzID0gYXJyYXkoKTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldGluc3RpdHV0aW9uRGV0YWlscygpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ2luc3RpdHV0aW9uX25hbWUnXSkpDQoJCXsNCgkJCS8vIGdldCB0aGUgZ2xvYmFsIGluc3RpdHV0aW9uIGRldGFpbHMNCgkJCSRhcHBfcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX25hbWVdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdpbnN0aXR1dGlvbm5hbWUnLCAnJyk7DQoJCQlzZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fbG9nb10nXSA9ICc8aW1nIGFsdD0iJy5zZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fbmFtZV0nXS4nIiBzcmM9IicuVXJpOjpyb290KCkuJGFwcF9wYXJhbXMtPmdldCgnaW5zdGl0dXRpb25sb2dvJywgJycpLiciPic7DQoJCQlzZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fZW1haWxdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdlbWFpbCcsICcnKTsNCgkJCXNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ1tpbnN0aXR1dGlvbl9waG9uZV0nXSA9ICRhcHBfcGFyYW1zLT5nZXQoJ3Bob25lJywgJycpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX2ZheF0nXSA9ICRhcHBfcGFyYW1zLT5nZXQoJ2ZheCcsICcnKTsNCgkJCXNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ1tpbnN0aXR1dGlvbl9zdHJlZXRdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdzdHJlZXQnLCAnJyk7DQoJCQlzZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fcG9zdGFsXSddID0gJGFwcF9wYXJhbXMtPmdldCgncG9zdGFsJywgJycpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX3Bvc3RhbGNvZGVdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdwb3N0YWxjb2RlJywgJycpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX2NpdHldJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdjaXR5JywgJycpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX3dlYnNpdGVdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCd3ZWJzaXRlJywgJycpOw0KCQkJLy8gc2V0IHRoZSByZWdpb24NCgkJCSRyZWdpb24gPSAkYXBwX3BhcmFtcy0+Z2V0KCdyZWdpb24nKTsNCgkJCWlmICgkcmVnaW9uICYmIGlzX251bWVyaWMoJHJlZ2lvbikgJiYgJHJlZ2lvbiA+IDApDQoJCQl7DQoJCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX3JlZ2lvbl9uYW1lXSddID0gc2VsZjo6Z2V0VmFyKCdyZWdpb24nLCAkcmVnaW9uLCAnaWQnLCAnbmFtZScpOw0KCQkJfQ0KCQkJZWxzZWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcmVnaW9uKSkNCgkJCXsNCgkJCQlzZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fcmVnaW9uX25hbWVdJ10gPSAkcmVnaW9uOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ1tpbnN0aXR1dGlvbl9yZWdpb25fbmFtZV0nXSA9ICcnOw0KCQkJfQ0KCQkJLy8gc2V0IHRoZSBjb3VudHJ5DQoJCQkkY291bnRyeSA9ICRhcHBfcGFyYW1zLT5nZXQoJ2NvdW50cnknKTsNCgkJCWlmICgkY291bnRyeSAmJiBpc19udW1lcmljKCRjb3VudHJ5KSAmJiAkY291bnRyeSA+IDApDQoJCQl7DQoJCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX2NvdW50cnlfbmFtZV0nXSA9IHNlbGY6OmdldFZhcignY291bnRyeScsICRjb3VudHJ5LCAnaWQnLCAnbmFtZScpOw0KCQkJfQ0KCQkJZWxzZWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkY291bnRyeSkpDQoJCQl7DQoJCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX2NvdW50cnlfbmFtZV0nXSA9ICRjb3VudHJ5Ow0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ1tpbnN0aXR1dGlvbl9jb3VudHJ5X25hbWVdJ10gPSAnJzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsczsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRzdHVkZW50RGV0YWlscyA9IGFycmF5KCk7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRzdHVkZW50RGV0YWlscygkaWQsICRmaWVsZCA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokc3R1ZGVudERldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkNCgkJCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQkJYXJyYXkoDQoJCQkJCQknYS5pZCcsJ2EudXNlcicsJ2EubW9iaWxlX3Bob25lJywnYS5nZW5kZXInLCdhLm1hcnJpYWdlc3RhdHVzJywNCgkJCQkJCSdhLmRhdGVvZmJpcnRoJywnYS5uYXRpb25hbF9pZCcsJ2Eub2NjdXBhdGlvbicsJ2EuZW1wbG95ZXInLA0KCQkJCQkJJ2Eud29ya19waG9uZScsJ2EuaG9tZV9waG9uZScsJ2Euc3RyZWV0JywnYS5wb3N0YWwnLCdhLmNpdHknLA0KCQkJCQkJJ2EucmVnaW9uJywnYS5jb3VudHJ5JywnYS5wb3N0YWxjb2RlJywnYS5hdXRvYmlvZ3JhcGh5JyksDQoJCQkJCWFycmF5KA0KCQkJCQkJJ1tpZF0nLCdbdXNlcl9pZF0nLCdbbW9iaWxlX3Bob25lXScsJ1tnZW5kZXJdJywnW21hcnJpYWdlc3RhdHVzXScsJ1tkYXRlb2ZiaXJ0aF0nLA0KCQkJCQkJJ1tuYXRpb25hbF9pZF0nLCdbb2NjdXBhdGlvbl0nLCdbZW1wbG95ZXJdJywnW3dvcmtfcGhvbmVdJywnW2hvbWVfcGhvbmVdJywNCgkJCQkJCSdbc3RyZWV0XScsJ1twb3N0YWxdJywnW2NpdHldJywnW3JlZ2lvbl9uYW1lXScsJ1tjb3VudHJ5X25hbWVdJywnW3Bvc3RhbGNvZGVdJywnW2F1dG9iaW9ncmFwaHldJykpKTsNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQkJYXJyYXkoJ2IubmFtZScsJ2IudXNlcm5hbWUnLCdiLmVtYWlsJyksDQoJCQkJCWFycmF5KCdbbmFtZV0nLCdbdXNlcm5hbWVdJywnW2VtYWlsXScpKSk7DQoJCQkJDQoJCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX191c2VycycsICdiJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnVzZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2IuaWQnKSAuICcpJyk7DQoJCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3N0dWRlbnQgdGFibGUJCQkJDQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3R1ZGVudCcsICdhJykpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQkJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRzdHVkZW50RGV0YWlsc1skaWRdID0gJGRiLT5sb2FkQXNzb2MoKTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoJGZpZWxkKQ0KCQkJew0KCQkJCSRmaWVsZCA9ICdbJy4kZmllbGQuJ10nOw0KCQkJCWlmIChpc3NldChzZWxmOjokc3R1ZGVudERldGFpbHNbJGlkXVskZmllbGRdKSkNCgkJCQl7DQoJCQkJCXJldHVybiBzZWxmOjokc3R1ZGVudERldGFpbHNbJGlkXVskZmllbGRdOw0KCQkJCX0NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JHN0dWRlbnREZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWNvbXBvbmVudCBwYXJhbXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRwYXJhbXM7DQoNCgkvKioNCgkqIAlSZXBvcnQgQ2FyZCBJdGVtcw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHJlcG9ydENhcmRJdGVtczsNCgkNCgkvKioNCgkqIAlJcyB1c2VycyByZXBvcnQgY2FyZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHJlcG9ydENhcmQgPSBhcnJheSgpOw0KCQ0KCS8qKg0KCSogCUlzIGV2ZW50IGRldGFpbHMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRldmVudERldGFpbHMgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJSXMgUmVwb3J0IENhcmQgUHJvZ3JhbQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHJlcG9ydENhcmRQcm9ncmFtID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UmVwb3J0Q2FyZCgmJGl0ZW1zLCAmJGFzc2Vzc21lbnRzKQ0KCXsNCgkJLy8gc2V0IHBhcmFtcw0KCQlpZiAoZW1wdHkoc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gc2V0IHJlcG9ydCBjYXJkIGl0ZW1zDQoJCXNlbGY6OiRyZXBvcnRDYXJkSXRlbXMgPSAkaXRlbXM7DQoJCS8vIEJ1aWxkIHJlcG9ydCBjYXJkDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYXNzZXNzbWVudHMpKQ0KCQl7DQoJCQlmb3JlYWNoKCRhc3Nlc3NtZW50cyBhcyAkZXZlbnRfbmFtZSA9PiAmJGRhdGEpDQoJCQl7DQoJCQkJLy8gc3RhcnQgZGF0ZQ0KCQkJCSRzdGFydGRhdGUgPSBzdHJ0b3RpbWUoJzMwMDAtMDAtMDAnKTsNCgkJCQkkbm90ZGF0ZSA9IHN0cnRvdGltZSgnMjAwMC0wMC0wMCcpOw0KCQkJCS8vIGluc3VyZSB0aGF0IGV2ZW50IG5hbWUgaXMgY29ycmVjdA0KCQkJCSRkYXRhWydldmVudF9uYW1lJ10gPSAkZXZlbnRfbmFtZTsNCgkJCQkvLyBhZGQgbmVlZGVkIGV2ZW50IGRldGFpbHMNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW2V2ZW50X25hbWVdJ10gPSAkZXZlbnRfbmFtZTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Byb2dyYW1fbmFtZV0nXSA9ICRkYXRhWydwcm9ncmFtX25hbWUnXTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Byb2dyYW1fYWNyb255bV0nXSA9ICRkYXRhWydwcm9ncmFtX2Fjcm9ueW0nXTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Byb2dyYW1faWNvbl0nXSA9ICRkYXRhWydwcm9ncmFtX2ljb24nXTsNCgkJCQkvLyBpbnN1cmUgd2UgaGF2ZSBhIHByb2dyYW0gaWQNCgkJCQlpZiAoIWlzc2V0KCRkYXRhWydwcm9ncmFtX2lkJ10pICYmIGlzc2V0KCRkYXRhWydwcm9ncmFtX2Fjcm9ueW0nXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ3Byb2dyYW1fYWNyb255bSddKSkNCgkJCQl7DQoJCQkJCSRkYXRhWydwcm9ncmFtX2lkJ10gPSBzZWxmOjpnZXRWYXIoJ3Byb2dyYW0nLCAkZGF0YVsncHJvZ3JhbV9hY3JvbnltJ10sICdhY3JvbnltJywgJ2lkJyk7DQoJCQkJCS8vIHNldCB0aGUgcGFzcyBwb2ludA0KCQkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Bhc3NfY3JlZGl0XSddID0gc2VsZjo6Z2V0VmFyKCdwcm9ncmFtJywgJGRhdGFbJ3Byb2dyYW1faWQnXSwgJ2lkJywgJ3Bhc3NfY3JlZGl0Jyk7DQoJCQkJCS8vIHNldCByZXBvcnQgY2FyZCBoZWFkZXIgc3dpdGNoDQoJCQkJCXNlbGY6OiRyZXBvcnRDYXJkUHJvZ3JhbVskZGF0YVsncHJvZ3JhbV9pZCddXSA9IHNlbGY6OmdldFZhcigncHJvZ3JhbScsICRkYXRhWydwcm9ncmFtX2lkJ10sICdpZCcsICdzZXRfcmVwb3J0X2NhcmQnKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBwYXNzIHBvaW50DQoJCQkJCXNlbGY6OiRldmVudERldGFpbHNbJGV2ZW50X25hbWVdWydbcGFzc19jcmVkaXRdJ10gPSBudWxsOw0KCQkJCX0NCgkJCQkvLyBsb2FkIHRoZSByZXBvcnQgY2FyZCB2YWx1ZXMgYW5kIHNldCB0aGUgc3RhcnQgZGF0ZQ0KCQkJCWZvcmVhY2goJGRhdGFbJ3ZhbHVlcyddIGFzICRjb3Vyc2VfbmFtZSA9PiAkZGF5cykNCgkJCQl7DQoJCQkJCWZvcmVhY2goJGRheXMgYXMgJGRheV9uYW1lID0+ICRhc3Nlc3NtZW50c190eXBlcykNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCgkYXNzZXNzbWVudHNfdHlwZXMgYXMgJGFzc2Vzc21lbnRfbmFtZSA9PiAkX2Fzc2Vzc21lbnRzKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2goJF9hc3Nlc3NtZW50cyBhcyAkdmFsdWVzKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCR2YWx1ZXMtPmFzc2Vzc21lbnRfdHlwZV9hZGRfcmVwb3J0Y2FyZCA9PSAxKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjphZGRUb1JlcG9ydCgkdmFsdWVzLCAkZXZlbnRfbmFtZSwgJGNvdXJzZV9uYW1lLCAkYXNzZXNzbWVudF9uYW1lKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBidWlsZCBzdGFydCBkYXRlDQoJCQkJCQkJCWlmIChpc19udW1lcmljKCR2YWx1ZXMtPmRheV9kYXRlKSAmJiAkdmFsdWVzLT5kYXlfZGF0ZSA8ICRzdGFydGRhdGUgJiYgJHZhbHVlcy0+ZGF5X2RhdGUgPiAkbm90ZGF0ZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHN0YXJ0ZGF0ZSA9ICR2YWx1ZXMtPmRheV9kYXRlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGdldCBhc3Nlc3NtZW50IG5vdGljZSAoY2hlY2sgaWYgYWxsIGFzc2Vzc21lbnRzIGFyZSBzdWJtaXR0ZWQpDQoJCQkJc2VsZjo6JGV2ZW50RGV0YWlsc1skZXZlbnRfbmFtZV1bJ1thc3Nlc3NtZW50c19vdXRzdGFuZGluZ10nXSA9IHNlbGY6OmdldEFzc2Vzc21lbnRzT3V0c3RhbmRpbmcoJGV2ZW50X25hbWUpOw0KCQkJCS8vIGFkZCBldmVudCBkYXRlDQoJCQkJc2VsZjo6JGV2ZW50RGV0YWlsc1skZXZlbnRfbmFtZV1bJ1tldmVudF9kYXRlXSddID0gc2VsZjo6ZmFuY3lEYXRlKCRzdGFydGRhdGUpOw0KCQkJfQ0KCQkJLy8gYnVpbGQgdGhlIHJlcG9ydCB0YWJsZQ0KCQkJc2VsZjo6c2V0UmVwb3J0VGFibGUoKTsNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFJlcG9ydFRhYmxlKCkNCgl7DQoJCS8vIHNldCBmaW5hbCBkZWZhdWx0cyBwZXIvZXZlbnQNCgkJc2VsZjo6c2V0RGVmYXVsdHNQZXJFdmVudCgpOw0KCQkvLyBzb21lIGRlZmF1bHRzDQoJCSRzdHlsZSA9ICdzdHlsZT0icGFkZGluZzogMTBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjIxLCAyMjEsIDIyMSk7Iic7DQoJCSRzdHlsZU5hbWUgPSAnc3R5bGU9InBhZGRpbmc6IDEwcHg7IHRleHQtYWxpZ246IHJpZ2h0OyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjIxLCAyMjEsIDIyMSk7Iic7DQoJCS8vIHRoZSBtb2R1bGUgY3JlZGl0IHN5c3RlbSB0YWJsZXMNCgkJaWYgKGlzc2V0KHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ2NyZWRpdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdG90YWxbJ21vZHVsZSddWydjcmVkaXQnXSkpDQoJCXsNCgkJCS8vIGluaXRpYXRlIHRoZSBtb2R1bGUgcmVwb3J0IGNhcmQNCgkJCXNlbGY6OiRyZXBvcnRDYXJkWydtb2R1bGUnXSA9IGFycmF5KCk7DQoJCQkvLyBsb2FkIHRoZSBjcmVkaXQgYW5kIHBlcmNlbnRhZ2UNCgkJCWZvcmVhY2goc2VsZjo6JHBlclsnbW9kdWxlUHJvZ3JhbSddWydjcmVkaXQnXSBhcyAkZXZlbnRfbmFtZSA9PiAkbW9kdWxlcykNCgkJCXsNCgkJCQkkYWRkQ3JlZGl0ID0gZmFsc2U7DQoJCQkJaWYgKCFpc3NldChzZWxmOjokYXNzZXNzbWVudHNPdXRzdGFuZGluZ1skZXZlbnRfbmFtZV0pKQ0KCQkJCXsNCgkJCQkJJGFkZENyZWRpdCA9IHRydWU7DQoJCQkJfQ0KCQkJCWZvcmVhY2goJG1vZHVsZXMgYXMgJG1vZHVsZV9uYW1lID0+ICRjcmVkaXQpDQoJCQkJew0KCQkJCQkkcm93ID0gYXJyYXkoKTsNCgkJCQkJJHJvd1tdID0gJG1vZHVsZV9uYW1lOw0KCQkJCQkkcm93W10gPSBzZWxmOjpsb2FkUGVyTW9kdWxlKCdDb3Vyc2UnLCAkZXZlbnRfbmFtZSwgJG1vZHVsZV9uYW1lKTsNCgkJCQkJJHJvd1tdID0gc2VsZjo6bG9hZFBlck1vZHVsZSgnQXNzZXNzbWVudCcsICRldmVudF9uYW1lLCAkbW9kdWxlX25hbWUpOw0KCQkJCQkkcm93W10gPSBzZWxmOjokcGVyWydtb2R1bGVQcm9ncmFtQXZhaWxhYmxlJ11bJ2NyZWRpdCddWyRldmVudF9uYW1lXVskbW9kdWxlX25hbWVdOw0KCQkJCQlpZiAoJGFkZENyZWRpdCkNCgkJCQkJew0KCQkJCQkJJHJvd1tdID0gJGNyZWRpdDsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRyb3dbXSA9IFRleHQ6Ol8oJ3BlbmRpbmcnKTsNCgkJCQkJfQ0KCQkJCQkvLyBsb2FkIHRoZSByb3cNCgkJCQkJc2VsZjo6JHJlcG9ydENhcmRbJ21vZHVsZSddWyRldmVudF9uYW1lXVskbW9kdWxlX25hbWVdID0gJzx0ZCAnLiRzdHlsZU5hbWUuJz4nLmltcGxvZGUoJzwvdGQ+PHRkICcuJHN0eWxlLic+Jywkcm93KS4nPC90ZD4nOw0KCQkJCX0NCgkJCQlrc29ydChzZWxmOjokcmVwb3J0Q2FyZFsnbW9kdWxlJ11bJGV2ZW50X25hbWVdKTsNCgkJCX0NCgkJfQ0KCQkvLyB0aGUgYXNzZXNzbWVudCBjcmVkaXQgc3lzdGVtIHRhYmxlcw0KCQlpZiAoaXNzZXQoc2VsZjo6JHRvdGFsWydhc3Nlc3NtZW50J11bJ2NyZWRpdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdG90YWxbJ2Fzc2Vzc21lbnQnXVsnY3JlZGl0J10pKQ0KCQl7DQoJCQkvLyBpbml0aWF0ZSB0aGUgYXNzZXNzbWVudCByZXBvcnQgY2FyZA0KCQkJc2VsZjo6JHJlcG9ydENhcmRbJ2Fzc2Vzc21lbnQnXSA9IGFycmF5KCk7DQoJCQkvLyBmaXJzdCBsb2FkIHRoZSBwZXIgcHJvZ3JhbQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwZXJbJ3Byb2dyYW0nXVsnY3JlZGl0J10pKQ0KCQkJew0KCQkJCWZvcmVhY2goc2VsZjo6JHBlclsncHJvZ3JhbSddWydjcmVkaXQnXSBhcyAkZXZlbnRfbmFtZSA9PiAkX2Fzc2Vzc21lbnRzKQ0KCQkJCXsNCgkJCQkJJGFkZENyZWRpdCA9IGZhbHNlOw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRhc3Nlc3NtZW50c091dHN0YW5kaW5nWyRldmVudF9uYW1lXSkpDQoJCQkJCXsNCgkJCQkJCSRhZGRDcmVkaXQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkX2Fzc2Vzc21lbnRzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCgkX2Fzc2Vzc21lbnRzIGFzICRhc3Nlc3NtZW50X25hbWUgPT4gJGNyZWRpdHMpDQoJCQkJCQl7DQoJCQkJCQkJJHJvdyA9IGFycmF5KCk7DQoJCQkJCQkJJHJvd1tdID0gJGFzc2Vzc21lbnRfbmFtZTsNCgkJCQkJCQkkcm93W10gPSBhcnJheV9zdW0oc2VsZjo6JHBlclsncHJvZ3JhbUF2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRfbmFtZV1bJGFzc2Vzc21lbnRfbmFtZV0pOw0KCQkJCQkJCWlmICgkYWRkQ3JlZGl0KQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHJvd1tdID0gYXJyYXlfc3VtKCRjcmVkaXRzKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHJvd1tdID0gVGV4dDo6XygncGVuZGluZycpOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBsb2FkIHRoZSByb3cNCgkJCQkJCQlzZWxmOjokcmVwb3J0Q2FyZFsnYXNzZXNzbWVudCddWyRldmVudF9uYW1lXVtdID0gJzx0ZCAnLiRzdHlsZU5hbWUuJz4nLmltcGxvZGUoJzwvdGQ+PHRkICcuJHN0eWxlLic+Jywkcm93KS4nPC90ZD4nOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbG9hZCB0aGUgcGVyIGNvdXJzZQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwZXJbJ2NvdXJzZSddWydjcmVkaXQnXSkpDQoJCQl7DQoJCQkJZm9yZWFjaChzZWxmOjokcGVyWydjb3Vyc2UnXVsnY3JlZGl0J10gYXMgJGV2ZW50X25hbWUgPT4gJGNvdXJzZXMpDQoJCQkJew0KCQkJCQkkYWRkQ3JlZGl0ID0gZmFsc2U7DQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGFzc2Vzc21lbnRzT3V0c3RhbmRpbmdbJGV2ZW50X25hbWVdKSkNCgkJCQkJew0KCQkJCQkJJGFkZENyZWRpdCA9IHRydWU7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb3Vyc2VzKSkNCgkJCQkJew0KCQkJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJCQlmb3JlYWNoKCRjb3Vyc2VzIGFzICRjb3Vyc2VfbmFtZSA9PiAkX2Fzc2Vzc21lbnRzKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkX2Fzc2Vzc21lbnRzKSkNCgkJCQkJCQl7DQoJCQkJCQkJCWZvcmVhY2goJF9hc3Nlc3NtZW50cyBhcyAkYXNzZXNzbWVudF9uYW1lID0+ICRjcmVkaXRzKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkcm93ID0gYXJyYXkoKTsNCgkJCQkJCQkJCSRyb3dbXSA9ICRjb3Vyc2VfbmFtZSAuICcgLSAnIC4kYXNzZXNzbWVudF9uYW1lOw0KCQkJCQkJCQkJJHJvd1tdID0gYXJyYXlfc3VtKHNlbGY6OiRwZXJbJ2NvdXJzZUF2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRfbmFtZV1bJGNvdXJzZV9uYW1lXVskYXNzZXNzbWVudF9uYW1lXSk7DQoJCQkJCQkJCQlpZiAoJGFkZENyZWRpdCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkcm93W10gPSBhcnJheV9zdW0oJGNyZWRpdHMpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJZWxzZQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRyb3dbXSA9IFRleHQ6Ol8oJ3BlbmRpbmcnKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCS8vIGxvYWQgdGhlIHJvdw0KCQkJCQkJCQkJJGJ1Y2tldFskYXNzZXNzbWVudF9uYW1lXVtdID0gJzx0ZCAnLiRzdHlsZU5hbWUuJz4nLmltcGxvZGUoJzwvdGQ+PHRkICcuJHN0eWxlLic+Jywkcm93KS4nPC90ZD4nOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCQkJew0KCQkJCQkJCS8vIGxvYWQgYXNzZXNzbWVudCB0eXBlcyB0b2dldGhlcg0KCQkJCQkJCWZvcmVhY2ggKCRidWNrZXQgYXMgJGFzc2VtZW50X25hbWUgPT4gJHJvd3MpDQoJCQkJCQkJew0KCQkJCQkJCQlmb3JlYWNoICgkcm93cyBhcyAkcm93KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokcmVwb3J0Q2FyZFsnYXNzZXNzbWVudCddWyRldmVudF9uYW1lXVtdID0gJHJvdzsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGxvYWQgdGhlIHBlciBhc3Nlc3NtZW50DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBlclsnYXNzZXNzbWVudCddWydjcmVkaXQnXSkpDQoJCQl7DQoJCQkJZm9yZWFjaChzZWxmOjokcGVyWydhc3Nlc3NtZW50J11bJ2NyZWRpdCddIGFzICRldmVudF9uYW1lID0+ICRjb3Vyc2VzKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb3Vyc2VzKSkNCgkJCQkJew0KCQkJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJCQlmb3JlYWNoKCRjb3Vyc2VzIGFzICRjb3Vyc2VfbmFtZSA9PiAkX2Fzc2Vzc21lbnRzKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkX2Fzc2Vzc21lbnRzKSkNCgkJCQkJCQl7DQoJCQkJCQkJCWZvcmVhY2goJF9hc3Nlc3NtZW50cyBhcyAkYXNzZXNzbWVudF9uYW1lID0+ICRjcmVkaXRzKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNyZWRpdHMpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWZvcmVhY2goJGNyZWRpdHMgYXMgJGtleSA9PiAkY3JlZGl0KQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJHJvdyA9IGFycmF5KCk7DQoJCQkJCQkJCQkJCSRyb3dbXSA9ICRjb3Vyc2VfbmFtZSAuICcgLSAnIC4kYXNzZXNzbWVudF9uYW1lOw0KCQkJCQkJCQkJCQkkcm93W10gPSBzZWxmOjokcGVyWydhc3Nlc3NtZW50QXZhaWxhYmxlJ11bJ2NyZWRpdCddWyRldmVudF9uYW1lXVskY291cnNlX25hbWVdWyRhc3Nlc3NtZW50X25hbWVdWyRrZXldOw0KCQkJCQkJCQkJCQkkcm93W10gPSAkY3JlZGl0Ow0KCQkJCQkJCQkJCQkvLyBsb2FkIHRoZSByb3cNCgkJCQkJCQkJCQkJJGJ1Y2tldFskYXNzZXNzbWVudF9uYW1lXVtdID0gJzx0ZCAnLiRzdHlsZU5hbWUuJz4nLmltcGxvZGUoJzwvdGQ+PHRkICcuJHN0eWxlLic+Jywkcm93KS4nPC90ZD4nOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0KSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBsb2FkIGFzc2Vzc21lbnQgdHlwZXMgdG9nZXRoZXINCgkJCQkJCQlmb3JlYWNoICgkYnVja2V0IGFzICRhc3NlbWVudF9uYW1lID0+ICRyb3dzKQ0KCQkJCQkJCXsNCgkJCQkJCQkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykNCgkJCQkJCQkJew0KCQkJCQkJCQkJc2VsZjo6JHJlcG9ydENhcmRbJ2Fzc2Vzc21lbnQnXVskZXZlbnRfbmFtZV1bXSA9ICRyb3c7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRQZXJNb2R1bGUoJHR5cGUsICRldmVudF9uYW1lLCAkbW9kdWxlX25hbWUpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JHBlclsnbW9kdWxlJy4kdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRfbmFtZV1bJG1vZHVsZV9uYW1lXSkpDQoJCXsNCgkJCSRidWNrZXQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JHBlclsnbW9kdWxlJy4kdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRfbmFtZV1bJG1vZHVsZV9uYW1lXSBhcyAkbmFtZSA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJJGJ1Y2tldFtdID0gJG5hbWUgLiAnOiAnIC4gJHZhbHVlIC4gJyUnOw0KCQkJfQ0KCQkJcmV0dXJuIGltcGxvZGUoJzxiciAvPicsICRidWNrZXQpOw0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREZWZhdWx0c1BlckV2ZW50KCkNCgl7DQoJCS8vIHRoZSBtb2R1bGUgY3JlZGl0IHN5c3RlbSB0YWJsZXMNCgkJaWYgKGlzc2V0KHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ3BvaW50J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ3BvaW50J10pKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgcGVyY2VudGFnZSBhbmQgY3JlZGl0DQoJCQlzZWxmOjptb2R1bGVCdWlsZGVyKCk7DQoJCX0NCgkJaWYgKGlzc2V0KHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ2NyZWRpdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdG90YWxbJ21vZHVsZSddWydjcmVkaXQnXSkpDQoJCXsNCgkJCS8vIGJ1aWxkIHRoZSBwbGFjZSBob2xkZXIgY3JlZGl0IGluZm8NCgkJCWZvcmVhY2ggKHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ2NyZWRpdCddIGFzICRldmVudF9uYW1lID0+ICR2YWx1ZXMpDQoJCQl7DQoJCQkJJGNyZWRpdF9pbnQgPSBhcnJheV9zdW0oJHZhbHVlcyk7DQoJCQkJJGNyZWRpdF9yZWNlaXZlZCA9IHNlbGY6OmRpc3BsYXlDcmVkaXQoJGV2ZW50X25hbWUsICRjcmVkaXRfaW50KTsNCgkJCQkkY3JlZGl0X2F2YWlsYWJsZSA9IDA7DQoJCQkJaWYgKGlzc2V0KHNlbGY6OiR0b3RhbFsnbW9kdWxlQXZhaWxhYmxlJ11bJ2NyZWRpdCddWyRldmVudF9uYW1lXSkpDQoJCQkJew0KCQkJCQkkY3JlZGl0X2F2YWlsYWJsZSA9IGFycmF5X3N1bShzZWxmOjokdG90YWxbJ21vZHVsZUF2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRfbmFtZV0pOw0KCQkJCX0NCgkJCQkkcGFzc19zdGF0dXMgPSBzZWxmOjpwYXNzU3RhdHVzKCRldmVudF9uYW1lLCAkY3JlZGl0X2ludCk7DQoJCQkJLy8gc2V0IHNvbWUgZmluYWwgZXZlbnQgZGV0YWlscw0KCQkJCXNlbGY6OiRldmVudERldGFpbHNbJGV2ZW50X25hbWVdWydbY3JlZGl0X3JlY2VpdmVkXSddID0gJGNyZWRpdF9yZWNlaXZlZDsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW2NyZWRpdF9hdmFpbGFibGVdJ10gPSAkY3JlZGl0X2F2YWlsYWJsZTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Bhc3Nfc3RhdHVzXSddID0gJHBhc3Nfc3RhdHVzOw0KCQkJfQ0KCQl9DQoJCS8vIHRoZSBhc3Nlc3NtZW50IGNyZWRpdCBzeXN0ZW0gdGFibGVzDQoJCWlmIChpc3NldChzZWxmOjokdG90YWxbJ2Fzc2Vzc21lbnQnXVsnY3JlZGl0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR0b3RhbFsnYXNzZXNzbWVudCddWydjcmVkaXQnXSkpDQoJCXsNCgkJCS8vIGJ1aWxkIHRoZSBwbGFjZSBob2xkZXIgY3JlZGl0IGluZm8NCgkJCWZvcmVhY2ggKHNlbGY6OiR0b3RhbFsnYXNzZXNzbWVudCddWydjcmVkaXQnXSBhcyAkZXZlbnRfbmFtZSA9PiAkdmFsdWVzKQ0KCQkJew0KCQkJCSRjcmVkaXRfaW50ID0gYXJyYXlfc3VtKCR2YWx1ZXMpOw0KCQkJCSRjcmVkaXRfcmVjZWl2ZWQgPSBzZWxmOjpkaXNwbGF5Q3JlZGl0KCRldmVudF9uYW1lLCAkY3JlZGl0X2ludCk7DQoJCQkJJGNyZWRpdF9hdmFpbGFibGUgPSAwOw0KCQkJCWlmIChpc3NldChzZWxmOjokdG90YWxbJ2Fzc2Vzc21lbnRBdmFpbGFibGUnXVsnY3JlZGl0J11bJGV2ZW50X25hbWVdKSkNCgkJCQl7DQoJCQkJCSRjcmVkaXRfYXZhaWxhYmxlID0gYXJyYXlfc3VtKHNlbGY6OiR0b3RhbFsnYXNzZXNzbWVudEF2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRfbmFtZV0pOw0KCQkJCX0NCgkJCQkkcGFzc19zdGF0dXMgPSBzZWxmOjpwYXNzU3RhdHVzKCRldmVudF9uYW1lLCAkY3JlZGl0X2ludCk7DQoJCQkJLy8gc2V0IHNvbWUgZmluYWwgZXZlbnQgZGV0YWlscw0KCQkJCXNlbGY6OiRldmVudERldGFpbHNbJGV2ZW50X25hbWVdWydbY3JlZGl0X3JlY2VpdmVkXSddID0gJGNyZWRpdF9yZWNlaXZlZDsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW2NyZWRpdF9hdmFpbGFibGVdJ10gPSAkY3JlZGl0X2F2YWlsYWJsZTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Bhc3Nfc3RhdHVzXSddID0gJHBhc3Nfc3RhdHVzOw0KCQkJfQ0KCQl9CQkNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRpdGVtKCYkaWQpDQoJew0KCQkvLyBmaW5kIHRoZSBhc3Nlc3NtZW50IGlmIGl0IGhhcyBiZWVuIGRvbmUNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRyZXBvcnRDYXJkSXRlbXMpKQ0KCQl7DQoJCQlmb3JlYWNoIChzZWxmOjokcmVwb3J0Q2FyZEl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkaXRlbS0+aWQpICYmICRpdGVtLT5pZCA9PSAkaWQpDQoJCQkJew0KCQkJCQlyZXR1cm4gJGl0ZW07DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFBvaW50TW9kdWxlT2ZBc3Nlc3NtZW50KCRpZCkNCgl7DQoJCSRkYgk9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkJPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdChhcnJheSgnYS5wb2ludCcsICdhLmF2YWlsYWJsZV9wb2ludCcsICdhLm1vZHVsZScsICdhLnF1ZXN0aW9uJywgJ20ubmFtZScsICdtLnBhc3NfY3JlZGl0JywgJ20ucGFzc19wZXJjZW50YWdlJywgJ2IucmV2aWV3ZWQnKSk7IC8vIG5vdCBzdXJlIGlmIG5hbWUgaXMgdGhlIGJlc3QNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXNzZXNzbWVudF92YWx1ZScsICdhJykpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX21vZHVsZScsICdtJykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EubW9kdWxlJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdtLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2Fzc2Vzc21lbnQnLCAnYicpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmFzc2Vzc21lbnQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2IuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EuYXNzZXNzbWVudCA9ICcuIChpbnQpICRpZCk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGFuc3dlcnMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkvLyB3ZSBtdXN0IGNoZWNrIGlmIGFsbCBtb2R1bGUgdmFsdWVzIGFyZSBzZXQNCgkJCWZvcmVhY2ggKCRhbnN3ZXJzIGFzICRuciA9PiAmJGFuc3dlcikNCgkJCXsNCgkJCQkvLyBGSVggZm9yIG9sZCBhc3Nlc3NtZW50IHJlc3VsdHMgdGhhdCBkb2VzIG5vdCBoYXZlIG1vZHVsZSBhbmQgYXZhaWxhYmxlIHBvaW50IHNldCAobm90IGlkZWFsKQ0KCQkJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGFuc3dlci0+bmFtZSkgfHwgMCA9PSAkYW5zd2VyLT5hdmFpbGFibGVfcG9pbnQpDQoJCQkJew0KCQkJCQkvLyBmaW5kIHRoZSBuZWVkZWQgbW9kdWxlIG5hbWUNCgkJCQkJJHF1ZXJ5CT0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkJJHF1ZXJ5LT5zZWxlY3QoDQoJCQkJCQlhcnJheSgNCgkJCQkJCQknYS5pZCcsICdtLm5hbWUnLCAnbS5wYXNzX2NyZWRpdCcsICdtLnBhc3NfcGVyY2VudGFnZScsICdhLmFuc3dlcl90eXBlJywgJ2Euc2VsZWN0aW9udHlwZScsICdhLnRleHRfbWFya190eXBlJywNCgkJCQkJCQknYS55ZXNub19wb2ludCcsICdhLmxpc3RfcG9pbnQnLCAnYS5jb21wbGV0aW9uX3BvaW50JywgJ2Euc2VsZWN0aW9uJywgJ2Eua2V5X3dvcmRzJywNCgkJCQkJCQknYS5rZXlfd29yZHNfcG9pbnQnLCAnYS53b3JkX2NvdW50X3BvaW50Jw0KCQkJCQkJKSk7DQoJCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3F1ZXN0aW9uJywgJ2EnKSk7DQoJCQkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbW9kdWxlJywgJ20nKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5tb2R1bGUnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ20uaWQnKSAuICcpJyk7DQoJCQkJCSRxdWVyeS0+d2hlcmUoJ2EucXVlc3Rpb24gPSAnLiAkZGItPnF1b3RlKCRhbnN3ZXItPnF1ZXN0aW9uKSk7DQoJCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQkJew0KCQkJCQkJJHF1ZXN0aW9uID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJCQkvLyBpbnN1cmUgd2UgaGF2ZSB0aGUgbW9kdWxlIG5hbWUNCgkJCQkJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHF1ZXN0aW9uLT5uYW1lKSkNCgkJCQkJCXsNCgkJCQkJCQl1bnNldCgkYW5zd2Vyc1skbnJdKTsgLy8gcmVtb3ZlIHRoaXMgc2luY2Ugd2UgY2FuJ3QgcmVzb2x2ZSB0aGUgbW9kdWxlDQoJCQkJCQkJY29udGludWU7DQoJCQkJCQl9DQoJCQkJCQkvLyBsb2FkIHRoZSBhdmFpbGFibGUgcG9pbnQgaWYgbm90IHNldA0KCQkJCQkJaWYgKDAgPT0gJGFuc3dlci0+YXZhaWxhYmxlX3BvaW50KQ0KCQkJCQkJew0KCQkJCQkJCSRxdWVzdGlvbi0+YXZhaWxhYmxlX3BvaW50ID0gc2VsZjo6Z2V0QXZhaWxhYmxlUG9pbnQoJHF1ZXN0aW9uKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXVuc2V0KCRhbnN3ZXJzWyRucl0pOyAvLyByZW1vdmUgdGhpcyBzaW5jZSB3ZSBjYW4ndCByZXNvbHZlIHRoZSBtb2R1bGUNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoJCQkJCS8vIGxvYWQgdGhlIG1vZHVsZSBuYW1lIGlmIG5vdCBzZXQNCgkJCQkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkYW5zd2VyLT5uYW1lKSkNCgkJCQkJew0KCQkJCQkJJGFuc3dlci0+bmFtZSA9ICRxdWVzdGlvbi0+bmFtZTsNCgkJCQkJCSRhbnN3ZXItPnBhc3NfY3JlZGl0ID0gJHF1ZXN0aW9uLT5wYXNzX2NyZWRpdDsNCgkJCQkJCSRhbnN3ZXItPnBhc3NfcGVyY2VudGFnZSA9ICRxdWVzdGlvbi0+cGFzc19wZXJjZW50YWdlOw0KCQkJCQl9DQoJCQkJCS8vIGxvYWQgdGhlIGF2YWlsYWJsZSBwb2ludCBpZiBub3Qgc2V0DQoJCQkJCWlmICgwID09ICRhbnN3ZXItPmF2YWlsYWJsZV9wb2ludCkNCgkJCQkJew0KCQkJCQkJJGFuc3dlci0+YXZhaWxhYmxlX3BvaW50ID0gJHF1ZXN0aW9uLT5hdmFpbGFibGVfcG9pbnQ7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gcmVtb3ZlIHVubmVlZGVkIHZhbHVlcw0KCQkJCXVuc2V0KCRhbnN3ZXItPm1vZHVsZSk7DQoJCQkJdW5zZXQoJGFuc3dlci0+cXVlc3Rpb24pOw0KCQkJfQ0KCQkJcmV0dXJuICRhbnN3ZXJzOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEFzc2Vzc21lbnRSZXBvcnRWYWx1ZSgkaWQsICR0eXBlID0gJ2NyZWRpdCcpDQoJew0KCQkvLyBmaW5kIHRoZSBhc3Nlc3NtZW50IGlmIGl0IGhhcyBiZWVuIGRvbmUNCgkJaWYgKCRpdGVtID0gc2VsZjo6bG9hZGl0ZW0oJGlkKSkNCgkJew0KCQkJaWYgKCRpdGVtLT5yZXZpZXdlZCA9PSAxICYmICdjcmVkaXQnID09ICR0eXBlKQ0KCQkJew0KCQkJCS8vIG5vdyBkbyBjYWxjdWxhdGlvbg0KCQkJCWlmICgkaXRlbS0+YXNzZXNzbWVudF90eXBlX3Bhc3NfdHlwZSA9PSAxICYmIGlzc2V0KCRpdGVtLT5wb2ludCkgJiYgJGl0ZW0tPnBvaW50ID4gMCkNCgkJCQl7DQoJCQkJCS8vIHBlcmNlbnRhZ2UNCgkJCQkJJHBlcmNlbnQgPSBiY211bChiY2RpdigkaXRlbS0+cG9pbnQsICRpdGVtLT5hc3Nlc3NtZW50X3R5cGVfdG90YWxfcG9pbnRzKSwgMTAwKTsNCgkJCQkJaWYgKCRwZXJjZW50ID49ICRpdGVtLT5hc3Nlc3NtZW50X3R5cGVfcGFzc19wZXJjZW50YWdlKQ0KCQkJCQl7DQoJCQkJCQkvLyByZXR1cm4gcGFzcyBjcmVkaXQNCgkJCQkJCXJldHVybiAkaXRlbS0+YXNzZXNzbWVudF90eXBlX3Bhc3NfY3JlZGl0Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJGl0ZW0tPmFzc2Vzc21lbnRfdHlwZV9wYXNzX3R5cGUgPT0gMikNCgkJCQl7DQoJCQkJCS8vIGNvbXBsZXRpb24gKGp1c3QgcmV0dXJuIHRoZSBwYXNzIGNyZWRpdCkNCgkJCQkJcmV0dXJuICRpdGVtLT5hc3Nlc3NtZW50X3R5cGVfcGFzc19jcmVkaXQ7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmICgkaXRlbS0+cmV2aWV3ZWQgPT0gMSAmJiAncGVyY2VudGFnZScgPT0gJHR5cGUpDQoJCQl7DQoJCQkJLy8gbm93IGRvIGNhbGN1bGF0aW9uDQoJCQkJaWYgKCRpdGVtLT5hc3Nlc3NtZW50X3R5cGVfcGFzc190eXBlID09IDEgJiYgaXNzZXQoJGl0ZW0tPnBvaW50KSAmJiAkaXRlbS0+cG9pbnQgPiAwKQ0KCQkJCXsNCgkJCQkJLy8gcGVyY2VudGFnZQ0KCQkJCQlyZXR1cm4gYmNtdWwoYmNkaXYoJGl0ZW0tPnBvaW50LCAkaXRlbS0+YXNzZXNzbWVudF90eXBlX3RvdGFsX3BvaW50cywgNSksIDEwMCk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJGl0ZW0tPmFzc2Vzc21lbnRfdHlwZV9wYXNzX3R5cGUgPT0gMikNCgkJCQl7DQoJCQkJCS8vIGNvbXBsZXRpb24gKGp1c3QgcmV0dXJuIDEwMCUpDQoJCQkJCXJldHVybiAxMDA7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAnbm90LWZvdW5kJzsNCgl9DQoNCgkvKioNCgkqIAlJcyBBbGwgVG90YWxzIEFycmF5DQoJKiovDQoJcHVibGljIHN0YXRpYyAkdG90YWwgPSBhcnJheSgNCgkJJ2Fzc2Vzc21lbnQnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwZXJjZW50YWdlJyA9PiBhcnJheSgpKSwNCgkJJ2Fzc2Vzc21lbnRBdmFpbGFibGUnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwZXJjZW50YWdlJyA9PiBhcnJheSgpKSwNCgkJJ21vZHVsZScgPT4gYXJyYXkoJ2NyZWRpdCcgPT4gYXJyYXkoKSwgJ3BlcmNlbnRhZ2UnID0+IGFycmF5KCksICdwb2ludCcgPT4gYXJyYXkoKSksDQoJCSdtb2R1bGVBdmFpbGFibGUnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwb2ludCcgPT4gYXJyYXkoKSkNCgkJKTsNCg0KCS8qKg0KCSogCUlzIHBlciBBcnJheQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHBlciA9IGFycmF5KA0KCQkvLyBhc3Nlc3NtZW50IGNyZWRpdCBzeXN0ZW0NCgkJJ2Fzc2Vzc21lbnQnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwZXJjZW50YWdlJyA9PiBhcnJheSgpKSwNCgkJJ2Fzc2Vzc21lbnRBdmFpbGFibGUnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwZXJjZW50YWdlJyA9PiBhcnJheSgpKSwNCgkJJ2NvdXJzZScgPT4gYXJyYXkoJ2NyZWRpdCcgPT4gYXJyYXkoKSwgJ3BlcmNlbnRhZ2UnID0+IGFycmF5KCkpLA0KCQknY291cnNlQXZhaWxhYmxlJyA9PiBhcnJheSgnY3JlZGl0JyA9PiBhcnJheSgpLCAncGVyY2VudGFnZScgPT4gYXJyYXkoKSksDQoJCSdwcm9ncmFtJyA9PiBhcnJheSgnY3JlZGl0JyA9PiBhcnJheSgpLCAncGVyY2VudGFnZScgPT4gYXJyYXkoKSksDQoJCSdwcm9ncmFtQXZhaWxhYmxlJyA9PiBhcnJheSgnY3JlZGl0JyA9PiBhcnJheSgpLCAncGVyY2VudGFnZScgPT4gYXJyYXkoKSksDQoJCS8vIG1vZHVsZSBjcmVkaXQgc3lzdGVtDQoJCSdtb2R1bGVBc3Nlc3NtZW50JyA9PiBhcnJheSgncGVyY2VudGFnZScgPT4gYXJyYXkoKSwgJ3BvaW50JyA9PiBhcnJheSgpKSwNCgkJJ21vZHVsZUFzc2Vzc21lbnRBdmFpbGFibGUnID0+IGFycmF5KCdwb2ludCcgPT4gYXJyYXkoKSksDQoJCSdtb2R1bGVDb3Vyc2UnID0+IGFycmF5KCdwZXJjZW50YWdlJyA9PiBhcnJheSgpLCAncG9pbnQnID0+IGFycmF5KCkpLA0KCQknbW9kdWxlQ291cnNlQXZhaWxhYmxlJyA9PiBhcnJheSgncG9pbnQnID0+IGFycmF5KCkpLA0KCQknbW9kdWxlUHJvZ3JhbScgPT4gYXJyYXkoJ2NyZWRpdCcgPT4gYXJyYXkoKSwgJ3BlcmNlbnRhZ2UnID0+IGFycmF5KCksICdwb2ludCcgPT4gYXJyYXkoKSksDQoJCSdtb2R1bGVQcm9ncmFtQXZhaWxhYmxlJyA9PiBhcnJheSgnY3JlZGl0JyA9PiBhcnJheSgpLCAncG9pbnQnID0+IGFycmF5KCkpDQoJCSk7DQoNCgkvKioNCgkqIAl0aGUgcGFzcyBjcmVkaXQgYW5kIHBhc3MgcGVyY2VudGFnZSBmb3IgbW9kdWxlcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhc3NTZXR0aW5nc01vZHVsZSA9IGFycmF5KCk7DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFkZFRvUmVwb3J0KCYkdmFsdWVzLCAmJGV2ZW50X25hbWUsICYkY291cnNlX25hbWUsICYkYXNzZXNzbWVudF9uYW1lKQ0KCXsNCgkJLy8gdXNlIEFzc2Vzc21lbnQgQ3JlZGl0IFN5c3RlbQ0KCQlpZiAoJHZhbHVlcy0+cHJvZ3JhbV9jcmVkaXRfc3lzdGVtID09IDEpDQoJCXsNCgkJCWlmICghc2VsZjo6YWRkVG9Bc3Nlc3NtZW50UmVwb3J0KCR2YWx1ZXMsICRldmVudF9uYW1lLCAkY291cnNlX25hbWUsICRhc3Nlc3NtZW50X25hbWUpKQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgYXNzZXNzbWVudCBub3RpY2UgKGNoZWNrIGlmIGFsbCBhc3Nlc3NtZW50cyBhcmUgc3VibWl0dGVkKQ0KCQkJCXNlbGY6OnNldEFzc2Vzc21lbnRzT3V0c3RhbmRpbmcoJHZhbHVlcywgJGV2ZW50X25hbWUsIHRydWUpOw0KCQkJfQ0KCQl9DQoJCS8vIHVzZSBNb2R1bGUgQ3JlZGl0IFN5c3RlbQ0KCQllbHNlaWYgKCR2YWx1ZXMtPnByb2dyYW1fY3JlZGl0X3N5c3RlbSA9PSAyKQ0KCQl7DQoJCQlpZiAoIXNlbGY6OmFkZFRvTW9kdWxlUmVwb3J0KCR2YWx1ZXMsICRldmVudF9uYW1lLCAkY291cnNlX25hbWUsICRhc3Nlc3NtZW50X25hbWUpKQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgYXNzZXNzbWVudCBub3RpY2UgKGNoZWNrIGlmIGFsbCBhc3Nlc3NtZW50cyBhcmUgc3VibWl0dGVkKQ0KCQkJCXNlbGY6OnNldEFzc2Vzc21lbnRzT3V0c3RhbmRpbmcoJHZhbHVlcywgJGV2ZW50X25hbWUsIHRydWUpOw0KCQkJfQkNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWRkVG9Nb2R1bGVSZXBvcnQoJiR2YWx1ZXMsICYkZXZlbnRfbmFtZSwgJiRjb3Vyc2VfbmFtZSwgJiRhc3Nlc3NtZW50X25hbWUpDQoJew0KCQlpZiAoJHZhbHVlcy0+c3VibWlzc2lvbikNCgkJew0KCQkJLy8gZ2V0IHRoZSBwb2ludHMgYW5kIG1vZHVsZXMgb25mIHRoaXMgYXNzZXNzbWVudA0KCQkJaWYgKCRpdGVtcyA9IHNlbGY6OmdldFBvaW50TW9kdWxlT2ZBc3Nlc3NtZW50KCR2YWx1ZXMtPnN1Ym1pc3Npb24pKQ0KCQkJew0KCQkJCSR0eXBlID0gJ3BvaW50JzsNCgkJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pDQoJCQkJew0KCQkJCQlpZiAoJGl0ZW0tPnJldmlld2VkID09IDEpDQoJCQkJCXsNCgkJCQkJCS8vIHBlciBwcm9ncmFtL21vZHVsZQ0KCQkJCQkJc2VsZjo6JHBlclsnbW9kdWxlUHJvZ3JhbSddWyR0eXBlXVskZXZlbnRfbmFtZV1bJGl0ZW0tPm5hbWVdW10gPSAkaXRlbS0+cG9pbnQ7DQoJCQkJCQlzZWxmOjokcGVyWydtb2R1bGVQcm9ncmFtQXZhaWxhYmxlJ11bJHR5cGVdWyRldmVudF9uYW1lXVskaXRlbS0+bmFtZV1bXSA9ICRpdGVtLT5hdmFpbGFibGVfcG9pbnQ7DQoJCQkJCQkvLyBwZXIgY291cnNlDQoJCQkJCQlzZWxmOjokcGVyWydtb2R1bGVDb3Vyc2UnXVskdHlwZV1bJGV2ZW50X25hbWVdWyRpdGVtLT5uYW1lXVskY291cnNlX25hbWVdW10gPSAkaXRlbS0+cG9pbnQ7DQoJCQkJCQlzZWxmOjokcGVyWydtb2R1bGVDb3Vyc2VBdmFpbGFibGUnXVskdHlwZV1bJGV2ZW50X25hbWVdWyRpdGVtLT5uYW1lXVskY291cnNlX25hbWVdW10gPSAkaXRlbS0+YXZhaWxhYmxlX3BvaW50Ow0KCQkJCQkJLy8gcGVyIGFzc2Vzc21lbnQNCgkJCQkJCXNlbGY6OiRwZXJbJ21vZHVsZUFzc2Vzc21lbnQnXVskdHlwZV1bJGV2ZW50X25hbWVdWyRpdGVtLT5uYW1lXVskYXNzZXNzbWVudF9uYW1lXVtdID0gJGl0ZW0tPnBvaW50Ow0KCQkJCQkJc2VsZjo6JHBlclsnbW9kdWxlQXNzZXNzbWVudEF2YWlsYWJsZSddWyR0eXBlXVskZXZlbnRfbmFtZV1bJGl0ZW0tPm5hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkaXRlbS0+YXZhaWxhYmxlX3BvaW50Ow0KCQkJCQkJLy8gbm93IGFkZCB0byB0b3RhbHMNCgkJCQkJCXNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJHR5cGVdWyRldmVudF9uYW1lXVtdID0gJGl0ZW0tPnBvaW50Ow0KCQkJCQkJc2VsZjo6JHRvdGFsWydtb2R1bGVBdmFpbGFibGUnXVskdHlwZV1bJGV2ZW50X25hbWVdW10gPSAkaXRlbS0+YXZhaWxhYmxlX3BvaW50Ow0KCQkJCQkJLy8gc2V0IHBhc3Mgc2V0dGluZ3MgZm9yIHRoZSBtb2R1bGUgZ2xvYmFsbHkNCgkJCQkJCWlmICghaXNzZXQoc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskaXRlbS0+bmFtZV0pKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRwYXNzU2V0dGluZ3NNb2R1bGVbJGl0ZW0tPm5hbWVdWydwYXNzX2NyZWRpdCddID0gKGludCkgJGl0ZW0tPnBhc3NfY3JlZGl0Ow0KCQkJCQkJCXNlbGY6OiRwYXNzU2V0dGluZ3NNb2R1bGVbJGl0ZW0tPm5hbWVdWydwYXNzX3BlcmNlbnRhZ2UnXSA9IChpbnQpICRpdGVtLT5wYXNzX3BlcmNlbnRhZ2U7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCW1vZHVsZSBidWlsZGVyIGFycmF5DQoJKiovDQoJcHVibGljIHN0YXRpYyAkbW9kdWxlQnVpbGRlciA9IGFycmF5KA0KCQknbW9kdWxlQXNzZXNzbWVudCcgPT4gMywNCgkJJ21vZHVsZUNvdXJzZScgPT4gMywNCgkJJ21vZHVsZVByb2dyYW0nID0+IDINCgkJKTsNCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gbW9kdWxlQnVpbGRlcigpDQoJew0KCQkvLyBzZXQgcGVyIHByb2dyYW0NCgkJZm9yZWFjaCAoc2VsZjo6JG1vZHVsZUJ1aWxkZXIgYXMgJHR5cGUgPT4gJGRlcHRoKQ0KCQl7DQoJCQlzZWxmOjpydW5Nb2R1bGVCdWlsZGVyKCR0eXBlLCAkZGVwdGgpOw0KCQl9DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcnVuTW9kdWxlQnVpbGRlcigkdHlwZSwgJGRlcHRoKQ0KCXsNCgkJLy8gc2V0IHBlciBwcm9ncmFtDQoJCWlmIChpc3NldChzZWxmOjokcGVyWyR0eXBlXVsncG9pbnQnXSkgJiYgc2VsZjo6IGNoZWNrQXJyYXkoc2VsZjo6JHBlclskdHlwZV1bJ3BvaW50J10pKQ0KCQl7DQoJCQkvLyBzdW0gYW5kIGNhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZXMNCgkJCWZvcmVhY2ggKHNlbGY6OiRwZXJbJHR5cGVdWydwb2ludCddIGFzICRldmVudCA9PiAgJG1vZHVsZXMpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJG1vZHVsZXMgYXMgJG1vZHVsZSA9PiAkYXJyYXlzKQ0KCQkJCXsNCgkJCQkJaWYgKDMgPT0gJGRlcHRoKQ0KCQkJCQl7DQoJCQkJCQlmb3JlYWNoICgkYXJyYXlzIGFzICRuYW1lID0+ICR2YWx1ZXMpDQoJCQkJCQl7DQoJCQkJCQkJLy8gcmVzZXQgDQoJCQkJCQkJJHBvaW50ID0gMDsNCgkJCQkJCQkkcG9pbnRBdmFpbGFibGUgPSAwOw0KCQkJCQkJCS8vIHNldCB0aGUgcG9pbnQNCgkJCQkJCQkkcG9pbnQgPSBhcnJheV9zdW0oJHZhbHVlcyk7DQoJCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ3BvaW50J11bJGV2ZW50XVskbW9kdWxlXVskbmFtZV0gPSAkcG9pbnQ7DQoJCQkJCQkJLy8gc2V0IHRoZSBhdmFsYWJsZSBwb2ludA0KCQkJCQkJCSRwb2ludEF2YWlsYWJsZSA9IGFycmF5X3N1bShzZWxmOjokcGVyWyR0eXBlLidBdmFpbGFibGUnXVsncG9pbnQnXVskZXZlbnRdWyRtb2R1bGVdWyRuYW1lXSk7DQoJCQkJCQkJc2VsZjo6JHBlclskdHlwZS4nQXZhaWxhYmxlJ11bJ3BvaW50J11bJGV2ZW50XVskbW9kdWxlXVskbmFtZV0gPSAkcG9pbnRBdmFpbGFibGU7DQoJCQkJCQkJLy8gc2V0IHBlcmNlbnRhZ2UNCgkJCQkJCQlzZWxmOjokcGVyWyR0eXBlXVsncGVyY2VudGFnZSddWyRldmVudF1bJG1vZHVsZV1bJG5hbWVdID0gYmNtdWwoYmNkaXYoJHBvaW50LCAkcG9pbnRBdmFpbGFibGUsIDUpLCAxMDApOw0KCQkJCQkJCS8vIG5vdyBzZXQgdGhlIGNyZWRpdA0KCQkJCQkJCWlmICgnbW9kdWxlUHJvZ3JhbScgPT0gJHR5cGUgJiYgaXNzZXQoc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskbW9kdWxlXVsncGFzc19jcmVkaXQnXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkY3JlZGl0ID0gMDsNCgkJCQkJCQkJJGNyZWRpdEF2YWlsYWJsZSA9IHNlbGY6OiRwYXNzU2V0dGluZ3NNb2R1bGVbJG1vZHVsZV1bJ3Bhc3NfY3JlZGl0J107DQoJCQkJCQkJCWlmICgJaXNzZXQoc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskbW9kdWxlXVsncGFzc19wZXJjZW50YWdlJ10pICYmIA0KCQkJCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRdWyRtb2R1bGVdWyRuYW1lXSA+PSBzZWxmOjokcGFzc1NldHRpbmdzTW9kdWxlWyRtb2R1bGVdWydwYXNzX3BlcmNlbnRhZ2UnXSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJGNyZWRpdCA9ICRjcmVkaXRBdmFpbGFibGU7DQoJCQkJCQkJCX0NCgkJCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ2NyZWRpdCddWyRldmVudF1bJG1vZHVsZV1bJG5hbWVdID0gJGNyZWRpdDsNCgkJCQkJCQkJc2VsZjo6JHBlclskdHlwZS4nQXZhaWxhYmxlJ11bJ2NyZWRpdCddWyRldmVudF1bJG1vZHVsZV1bJG5hbWVdID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCQkJLy8gbm93IGFkZCB0byB0b3RhbHMNCgkJCQkJCQkJc2VsZjo6JHRvdGFsWydtb2R1bGUnXVsnY3JlZGl0J11bJGV2ZW50XVtdID0gJGNyZWRpdDsNCgkJCQkJCQkJc2VsZjo6JHRvdGFsWydtb2R1bGVBdmFpbGFibGUnXVsnY3JlZGl0J11bJGV2ZW50XVtdID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gbm93IGFkZCB0byB0b3RhbHMNCgkJCQkJCQlzZWxmOjokdG90YWxbJ21vZHVsZSddWydwZXJjZW50YWdlJ11bJGV2ZW50XVtdID0gc2VsZjo6JHBlclskdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRdWyRtb2R1bGVdWyRuYW1lXTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlaWYgKDIgPT0gJGRlcHRoKQ0KCQkJCQl7DQoJCQkJCQkvLyByZXNldCANCgkJCQkJCSRwb2ludCA9IDA7DQoJCQkJCQkkcG9pbnRBdmFpbGFibGUgPSAwOw0KCQkJCQkJLy8gc2V0IHRoZSBwb2ludA0KCQkJCQkJJHBvaW50ID0gYXJyYXlfc3VtKCRhcnJheXMpOw0KCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ3BvaW50J11bJGV2ZW50XVskbW9kdWxlXSA9ICRwb2ludDsNCgkJCQkJCS8vIHNldCB0aGUgYXZhbGFibGUgcG9pbnQNCgkJCQkJCSRwb2ludEF2YWlsYWJsZSA9IGFycmF5X3N1bShzZWxmOjokcGVyWyR0eXBlLidBdmFpbGFibGUnXVsncG9pbnQnXVskZXZlbnRdWyRtb2R1bGVdKTsNCgkJCQkJCXNlbGY6OiRwZXJbJHR5cGUuJ0F2YWlsYWJsZSddWydwb2ludCddWyRldmVudF1bJG1vZHVsZV0gPSAkcG9pbnRBdmFpbGFibGU7DQoJCQkJCQkvLyBzZXQgcGVyY2VudGFnZQ0KCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRdWyRtb2R1bGVdID0gYmNtdWwoYmNkaXYoJHBvaW50LCAkcG9pbnRBdmFpbGFibGUsIDUpLCAxMDApOw0KCQkJCQkJLy8gbm93IHNldCB0aGUgY3JlZGl0DQoJCQkJCQlpZiAoJ21vZHVsZVByb2dyYW0nID09ICR0eXBlICYmIGlzc2V0KHNlbGY6OiRwYXNzU2V0dGluZ3NNb2R1bGVbJG1vZHVsZV1bJ3Bhc3NfY3JlZGl0J10pKQ0KCQkJCQkJew0KCQkJCQkJCSRjcmVkaXQgPSAwOw0KCQkJCQkJCSRjcmVkaXRBdmFpbGFibGUgPSBzZWxmOjokcGFzc1NldHRpbmdzTW9kdWxlWyRtb2R1bGVdWydwYXNzX2NyZWRpdCddOw0KCQkJCQkJCWlmICgJaXNzZXQoc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskbW9kdWxlXVsncGFzc19wZXJjZW50YWdlJ10pICYmIA0KCQkJCQkJCQlzZWxmOjokcGVyWyR0eXBlXVsncGVyY2VudGFnZSddWyRldmVudF1bJG1vZHVsZV0gPj0gc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskbW9kdWxlXVsncGFzc19wZXJjZW50YWdlJ10pDQoJCQkJCQkJew0KCQkJCQkJCQkkY3JlZGl0ID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCQl9DQoJCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ2NyZWRpdCddWyRldmVudF1bJG1vZHVsZV0gPSAkY3JlZGl0Ow0KCQkJCQkJCXNlbGY6OiRwZXJbJHR5cGUuJ0F2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRdWyRtb2R1bGVdID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCQkvLyBub3cgYWRkIHRvIHRvdGFscw0KCQkJCQkJCXNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ2NyZWRpdCddWyRldmVudF1bXSA9ICRjcmVkaXQ7DQoJCQkJCQkJc2VsZjo6JHRvdGFsWydtb2R1bGVBdmFpbGFibGUnXVsnY3JlZGl0J11bJGV2ZW50XVtdID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCX0NCgkJCQkJCS8vIG5vdyBhZGQgdG8gdG90YWxzDQoJCQkJCQlzZWxmOjokdG90YWxbJ21vZHVsZSddWydwZXJjZW50YWdlJ11bJGV2ZW50XVtdID0gc2VsZjo6JHBlclskdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRdWyRtb2R1bGVdOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhZGRUb0Fzc2Vzc21lbnRSZXBvcnQoJiR2YWx1ZXMsICYkZXZlbnRfbmFtZSwgJiRjb3Vyc2VfbmFtZSwgJiRhc3Nlc3NtZW50X25hbWUpDQoJew0KCQkvLyBvbmx5IHVzZSBjcmVkaXQgaWYgcHJvZ3JhbSBhbHNvIHNldCB0byB1c2UgYXNzZXNzbWVudCBjcmVkaXQgc3lzdGVtDQoJCWlmICgkdmFsdWVzLT5hc3Nlc3NtZW50X3R5cGVfYWRkX2NyZWRpdHMgPT0gMSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBjcmVkaXQgdG8gYWRkDQoJCQkkdHlwZSA9ICdjcmVkaXQnOw0KCQkJJHZhbHVlQXZhaWxhYmxlID0gJHZhbHVlcy0+YXNzZXNzbWVudF90eXBlX3Bhc3NfY3JlZGl0Ow0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gZ2V0IHRoZSBwZXJjZW50YWdlIHRvIGFkZA0KCQkJJHR5cGUgPSAncGVyY2VudGFnZSc7DQoJCQkkdmFsdWVBdmFpbGFibGUgPSAxMDA7DQoJCX0NCgkJLy8gc2V0IHRoZSBhdmFpbGFibGUgdmFsdWUgdG8gdGhlIHJlcG9ydCBjYXJkDQoJCWlmICgkdmFsdWVzLT5hc3Nlc3NtZW50X3R5cGVfY29uc29saWRhdGUgPT0gMSkNCgkJew0KCQkJLy8gcGVyIGNvdXJzZQ0KCQkJc2VsZjo6JHBlclsnY291cnNlQXZhaWxhYmxlJ11bJHR5cGVdWyRldmVudF9uYW1lXVskY291cnNlX25hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkdmFsdWVBdmFpbGFibGU7DQoJCX0NCgkJZWxzZWlmICgkdmFsdWVzLT5hc3Nlc3NtZW50X3R5cGVfY29uc29saWRhdGUgPT0gMikNCgkJew0KCQkJLy8gcGVyIHByb2dyYW0NCgkJCXNlbGY6OiRwZXJbJ3Byb2dyYW1BdmFpbGFibGUnXVskdHlwZV1bJGV2ZW50X25hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkdmFsdWVBdmFpbGFibGU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBwZXIgYXNzZXNzbWVudA0KCQkJc2VsZjo6JHBlclsnYXNzZXNzbWVudEF2YWlsYWJsZSddWyR0eXBlXVskZXZlbnRfbmFtZV1bJGNvdXJzZV9uYW1lXVskYXNzZXNzbWVudF9uYW1lXVtdID0gJHZhbHVlQXZhaWxhYmxlOw0KCQl9DQoJCS8vIG5vdyBhZGQgdG8gYXZhaWxhYmxlIHRvdGFscw0KCQlzZWxmOjokdG90YWxbJ2Fzc2Vzc21lbnRBdmFpbGFibGUnXVskdHlwZV1bJGV2ZW50X25hbWVdW10gPSAkdmFsdWVBdmFpbGFibGU7DQoJCS8vIGNoZWNrIGlmIHN1Ym1pc3Npb24gd2VyZSBtYWRlDQoJCWlmICgkdmFsdWVzLT5zdWJtaXNzaW9uKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHZhbHVlcw0KCQkJJHZhbHVlID0gc2VsZjo6Z2V0QXNzZXNzbWVudFJlcG9ydFZhbHVlKCR2YWx1ZXMtPnN1Ym1pc3Npb24sICR0eXBlKTsNCgkJCS8vIG9ubHkgY29udGludWUgaWYgYSB2YWx1ZSBpcyBmb3VuZA0KCQkJaWYgKCdub3QtZm91bmQnICE9ICR2YWx1ZSkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIHZhbHVlIHRvIHRoZSByZXBvcnQgY2FyZA0KCQkJCWlmICgkdmFsdWVzLT5hc3Nlc3NtZW50X3R5cGVfY29uc29saWRhdGUgPT0gMSkNCgkJCQl7DQoJCQkJCS8vIHBlciBjb3Vyc2UNCgkJCQkJc2VsZjo6JHBlclsnY291cnNlJ11bJHR5cGVdWyRldmVudF9uYW1lXVskY291cnNlX25hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkdmFsdWU7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJHZhbHVlcy0+YXNzZXNzbWVudF90eXBlX2NvbnNvbGlkYXRlID09IDIpDQoJCQkJew0KCQkJCQkvLyBwZXIgcHJvZ3JhbQ0KCQkJCQlzZWxmOjokcGVyWydwcm9ncmFtJ11bJHR5cGVdWyRldmVudF9uYW1lXVskYXNzZXNzbWVudF9uYW1lXVtdID0gJHZhbHVlOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBwZXIgYXNzZXNzbWVudA0KCQkJCQlzZWxmOjokcGVyWydhc3Nlc3NtZW50J11bJHR5cGVdWyRldmVudF9uYW1lXVskY291cnNlX25hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkdmFsdWU7DQoJCQkJfQ0KCQkJCS8vIG5vdyBhZGQgdG8gdG90YWxzDQoJCQkJc2VsZjo6JHRvdGFsWydhc3Nlc3NtZW50J11bJHR5cGVdWyRldmVudF9uYW1lXVtdID0gJHZhbHVlOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFJlcG9ydENhcmRCdXR0b25zKCRrZXksICRuYW1lKQ0KCXsNCgkJJGJ1dHRvbnMgPSBhcnJheSgpOw0KCQkkYnV0dG9uc1tdID0gJzxkaXYgY2xhc3M9InVrLWJ1dHRvbi1ncm91cCB1ay13aWR0aC0xLTEgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSI+JzsNCgkJJGJ1dHRvbnNbXSA9ICc8YnV0dG9uICB0eXBlPSJidXR0b24iIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXN1Y2Nlc3MgdWstd2lkdGgtMS0yIiAnOw0KCQkkYnV0dG9uc1tdID0gJ29uY2xpY2s9InZpZXdQcmludChcJycuJG5hbWUuJ1wnLCBcJ2dldCcuJGtleS4nXCcpOyByZXR1cm4gZmFsc2U7Ij4nOw0KCQkkYnV0dG9uc1tdID0gJzxpIGNsYXNzPSJ1ay1pY29uLXByaW50Ij48L2k+ICcuVGV4dDo6XygnVmlldyBQcmludCcpLic8L2J1dHRvbj4nOw0KCQkkYnV0dG9uc1tdID0gJzxidXR0b24gIG9uY2xpY2s9InNldHVwRW1haWwoXCdnZXQnLiRrZXkuJ1wnLCBcJycuJG5hbWUuJ1wnKSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXdpZHRoLTEtMiI+JzsNCgkJJGJ1dHRvbnNbXSA9ICc8aSBjbGFzcz0idWstaWNvbi1lbnZlbG9wZSI+PC9pPiAnLlRleHQ6Ol8oJ0VtYWlsJykuJzwvYnV0dG9uPic7DQoJCSRidXR0b25zW10gPSAnPC9kaXY+JzsNCgkJcmV0dXJuIGltcGxvZGUoJycsICRidXR0b25zKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFJlcG9ydENhcmRIZWFkZXIoJHByb2dyYW0sICRldmVudF9kZXRhaWxzLCAkc3R1ZGVudCkNCgl7DQoJCS8vIGdldCBwbGFjZSBob2xkZXJzDQoJCSRwbGFjZWhvbGRlcnMgPSBzZWxmOjpnZXRQbGFjZUhvbGRlcnMoJHN0dWRlbnQsIG51bGwsICRldmVudF9kZXRhaWxzKTsNCgkJJGhlYWRlciA9ICcnOw0KCQkvLyBnZXQgaGVhZGVyDQoJCWlmIChpc19udW1lcmljKCRwcm9ncmFtKSAmJiAoaW50KSAkcHJvZ3JhbSA+IDAgJiYgaXNzZXQoc2VsZjo6JHJlcG9ydENhcmRQcm9ncmFtWyRwcm9ncmFtXSkgJiYgMSA9PSBzZWxmOjokcmVwb3J0Q2FyZFByb2dyYW1bJHByb2dyYW1dKQ0KCQl7DQoJCQkkaGVhZGVyID0gc2VsZjo6Z2V0VmFyKCdwcm9ncmFtJywgJHByb2dyYW0sICdpZCcsICdyZXBvcnRfY2FyZF9oZWFkZXInKTsNCgkJfQ0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRoZWFkZXIpKQ0KCQl7DQoJCQkkaGVhZGVyID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdkb2NfaGVhZGVyJyk7DQoJCX0NCgkJLy8gc2V0IHRoZSBoZWFkZXINCgkJcmV0dXJuIHNlbGY6OnNldER5bmFtaWNEYXRhKCRoZWFkZXIsICRwbGFjZWhvbGRlcnMpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UmVwb3J0Q2FyZEZvb3RlcigkcHJvZ3JhbSwgJGV2ZW50X2RldGFpbHMsICRzdHVkZW50KQ0KCXsNCgkJLy8gZ2V0IHBsYWNlIGhvbGRlcnMNCgkJJHBsYWNlaG9sZGVycyA9IHNlbGY6OmdldFBsYWNlSG9sZGVycygkc3R1ZGVudCwgbnVsbCwgJGV2ZW50X2RldGFpbHMpOw0KCQkvLyBnZXQgZm9vdGVyDQoJCSRmb290ZXIgPSAnJzsNCgkJaWYgKGlzX251bWVyaWMoJHByb2dyYW0pICYmIChpbnQpICRwcm9ncmFtID4gMCAmJiBpc3NldChzZWxmOjokcmVwb3J0Q2FyZFByb2dyYW1bJHByb2dyYW1dKSAmJiAxID09IHNlbGY6OiRyZXBvcnRDYXJkUHJvZ3JhbVskcHJvZ3JhbV0pDQoJCXsNCgkJCSRmb290ZXIgPSBzZWxmOjpnZXRWYXIoJ3Byb2dyYW0nLCAkcHJvZ3JhbSwgJ2lkJywgJ3JlcG9ydF9jYXJkX2Zvb3RlcicpOw0KCQl9DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGZvb3RlcikpDQoJCXsNCgkJCSRmb290ZXIgPSBzZWxmOjokcGFyYW1zLT5nZXQoJ2RvY19mb290ZXInKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIGZvb3Rlcg0KCQlyZXR1cm4gc2VsZjo6c2V0RHluYW1pY0RhdGEoJGZvb3RlciwgJHBsYWNlaG9sZGVycyk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXNzZWQoICRldmVudF9uYW1lLCAkY3JlZGl0KQ0KCXsNCgkJaWYgKCFpc3NldChzZWxmOjokYXNzZXNzbWVudHNPdXRzdGFuZGluZ1skZXZlbnRfbmFtZV0pICYmICRjcmVkaXQgPj0gc2VsZjo6JGV2ZW50RGV0YWlsc1skZXZlbnRfbmFtZV1bJ1twYXNzX2NyZWRpdF0nXSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGlzcGxheUNyZWRpdCgkZXZlbnRfbmFtZSwgJGNyZWRpdCkNCgl7DQoJCWlmIChzZWxmOjpwYXNzZWQoJGV2ZW50X25hbWUsICRjcmVkaXQpKQ0KCQl7DQoJCQlyZXR1cm4gJzxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47Ij4nLiRjcmVkaXQuJzwvc3Bhbj4nOw0KCQl9DQoJCXJldHVybiAnPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij4nLiRjcmVkaXQuJzwvc3Bhbj4nOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFzc1N0YXR1cygkZXZlbnRfbmFtZSwgJGNyZWRpdCkNCgl7DQoJCWlmIChzZWxmOjpwYXNzZWQoJGV2ZW50X25hbWUsICRjcmVkaXQpKQ0KCQl7DQoJCQlyZXR1cm4gJzxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47Ij4nLlRleHQ6Ol8oJ1BBU1NFRCcpLic8L3NwYW4+JzsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdG9yZU1lc3NhZ2UoJHNlbmQsICRyZWNpcGllbnQsICRzdWJqZWN0LCAkYm9keSwgJHRleHQsICRtb2RlID0gMCwgJHR5cGUgPSAnZW1haWwnKQ0KCXsNCgkJLy8gc2V0IHRoZSBzdG9yaW5nIG9iamVjdA0KCQkkbWVzc2FnZSA9IG5ldyBcc3RkQ2xhc3M7DQoJCSRtZXNzYWdlLT5zZW5kX3N0YXR1cyA9IDA7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3ViamVjdCkpDQoJCXsNCgkJCSRtZXNzYWdlLT5zdWJqZWN0ID0gJHN1YmplY3Q7DQoJCX0NCgkJaWYgKCRzZW5kKQ0KCQl7DQoJCQkkbWVzc2FnZS0+c2VuZF9zdGF0dXMgPSAxOw0KCQl9DQoJCS8vIGlmIHRoaXMgaXMgYW4gZW1haWwNCgkJaWYgKCR0eXBlID09ICdlbWFpbCcpDQoJCXsNCgkJCS8vIGNoZWNrIHdobyB0aGUgdXNlciBpcyB0aGlzIG1lc3NhZ2Ugd2FzIHNlbmQgdG8NCgkJCSR1c2VySWQgPSBzZWxmOjpnZXRWYXIobnVsbCwgJHJlY2lwaWVudCwgJ2VtYWlsJywgJ2lkJywgJz0nLCAndXNlcnMnKTsNCgkJCWlmIChpc19udW1lcmljKCR1c2VySWQpKQ0KCQkJew0KCQkJCSRtZXNzYWdlLT51c2VyID0gKGludCkgJHVzZXJJZDsNCgkJCX0NCgkJCS8vIHNldCB0aGUgZW1haWwNCgkJCSRtZXNzYWdlLT5lbWFpbCA9ICRyZWNpcGllbnQ7DQoJCX0NCgkJZWxzZWlmICgkdHlwZSA9PSAnc21zJyAmJiAkdHlwZSA9PSAnbm90aWNlJykNCgkJew0KCQkJaWYgKGlzX251bWVyaWMoJHJlY2lwaWVudCkpDQoJCQl7DQoJCQkJJG1lc3NhZ2UtPnVzZXIgPSAoaW50KSAkcmVjaXBpZW50Ow0KCQkJfQ0KCQl9DQoJCWlmIChpc3NldCgkbWVzc2FnZS0+dXNlcikpDQoJCXsNCgkJCS8vIHNldCB0aGUgYm9keSBzdHVmZg0KCQkJaWYgKCRtb2RlIHx8ICR0eXBlID09ICdub3RpY2UnKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkYm9keSkpDQoJCQkJew0KCQkJCQkkbWVzc2FnZS0+aHRtbCA9ICRib2R5Ow0KCQkJCQkvLyBzZXQgdGhlIGtpbmQNCgkJCQkJaWYgKCR0eXBlID09ICdlbWFpbCcpDQoJCQkJCXsNCgkJCQkJCSRtZXNzYWdlLT5raW5kID0gMTsJDQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0ZXh0KSAmJiAkdHlwZSAhPSAnbm90aWNlJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT50ZXh0ID0gJHRleHQ7DQoJCQkJCS8vIHNldCB0aGUga2luZA0KCQkJCQlpZiAoJHR5cGUgPT0gJ2VtYWlsJyAmJiAhaXNzZXQoJG1lc3NhZ2UtPmh0bWwpKQ0KCQkJCQl7DQoJCQkJCQkkbWVzc2FnZS0+a2luZCA9IDI7CQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkdHlwZSA9PSAnc21zJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT5raW5kID0gMzsNCgkJCQl9DQoJCQkJZWxzZWlmICgkdHlwZSA9PSAnbm90aWNlJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT5raW5kID0gNDsJDQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkYm9keSkpDQoJCQkJew0KCQkJCQkkbWVzc2FnZS0+dGV4dCA9ICRib2R5Ow0KCQkJCX0NCgkJCQkvLyBzZXQgdGhlIGtpbmQNCgkJCQlpZiAoJHR5cGUgPT0gJ2VtYWlsJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT5raW5kID0gMjsNCgkJCQl9DQoJCQkJZWxzZWlmICgkdHlwZSA9PSAnc21zJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT5raW5kID0gMzsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGlzIG1lc3NhZ2Ugd2FzIHNlbmQgYWxyZWFkeQ0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJykpKTsJCQ0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbWVzc2FnZScpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3VzZXInKSAuICcgPSAnLiRtZXNzYWdlLT51c2VyKTsNCgkJCWlmIChpc3NldCgkbWVzc2FnZS0+c3ViamVjdCkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc3ViamVjdCcpIC4gJyA9ICcuJGRiLT5xdW90ZSgkbWVzc2FnZS0+c3ViamVjdCkpOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRtZXNzYWdlLT5raW5kKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdraW5kJykgLiAnID0gJy4kbWVzc2FnZS0+a2luZCk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoJG1lc3NhZ2UtPmVtYWlsKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdlbWFpbCcpIC4gJyA9ICcuJGRiLT5xdW90ZSgkbWVzc2FnZS0+ZW1haWwpKTsNCgkJCX0NCgkJCWlmIChpc3NldCgkbWVzc2FnZS0+aHRtbCkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaHRtbCcpIC4gJyA9ICcuJGRiLT5xdW90ZSgkbWVzc2FnZS0+aHRtbCkpOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRtZXNzYWdlLT50ZXh0KSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd0ZXh0JykgLiAnID0gJy4kZGItPnF1b3RlKCQkbWVzc2FnZS0+dGV4dCkpOw0KCQkJfQ0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJG1lc3NhZ2UtPmlkID0gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCQkJJG1lc3NhZ2UtPm1vZGlmaWVkX2J5ID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCQkkbWVzc2FnZS0+bW9kaWZpZWQgPSBGYWN0b3J5OjpnZXREYXRlKCktPnRvU3FsKCk7DQoJCQkJJG1lc3NhZ2UtPmRhdGVzZW50ID0gJG1lc3NhZ2UtPm1vZGlmaWVkOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBzb21lIG1vcmUgZGVmYXVsdHMNCgkJCQkkbWVzc2FnZS0+cHVibGlzaGVkID0gMTsNCgkJCQkkbWVzc2FnZS0+Y3JlYXRlZF9ieSA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkJJG1lc3NhZ2UtPmNyZWF0ZWQgPSBGYWN0b3J5OjpnZXREYXRlKCktPnRvU3FsKCk7DQoJCQkJJG1lc3NhZ2UtPmRhdGVzZW50ID0gJG1lc3NhZ2UtPmNyZWF0ZWQ7DQoJCQkJJG1lc3NhZ2UtPnZlcnNpb24gPSAxOw0KCQkJCSRtZXNzYWdlLT5hY2Nlc3MgPSAxOw0KCQkJfQ0KCQkJLy8gdXBkYXRlIGlmIGlkIGlzIGZvdW5kDQoJCQlpZiAoaXNzZXQoJG1lc3NhZ2UtPmlkKSkNCgkJCXsNCgkJCQkkZGItPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX21lc3NhZ2UnLCAkbWVzc2FnZSwgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gaW5zZXJ0IHRoZSBuZXcgbWVzc2FnZQ0KCQkJCSRyZXN1bHQgPSAkZGItPmluc2VydE9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX21lc3NhZ2UnLCAkbWVzc2FnZSk7DQoJCQkJaWYgKCRyZXN1bHQpDQoJCQkJew0KCQkJCQkkYUlkID0gJGRiLT5pbnNlcnRpZCgpOw0KCQkJCQkvLyBtYWtlIHN1cmUgdGhlIGFjY2VzcyBvZiBhc3NldCBpcyBzZXQNCgkJCQkJc2VsZjo6c2V0QXNzZXQoJGFJZCwnbWVzc2FnZScpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0=', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdICgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10gKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdICgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdIChodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXSAoaHR0cHM6Ly93d3cudmRtLmlvL2pvb21sYS1jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdIChtYWlsdG86am9vbWxhQHZkbS5pbyk=', '', '', 'The Basic Learning Management System', '', '', 'Learning Management (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/learningmanager_update_server.xml', 'https://www.vdm.io', '', 'ZLC+o/uT82WtR+AsHX8HD8RBExDEA4h2p2RU848nDmnR7hfKjzQtlqomgRr8Zhvjduh5+Rn+zu38xQxmfhTMdg==', 'https://www.vdm.io/access/', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 439, '', 1, 2),
(2, 1, 1, 1, '', 1, '', '', '', 1, '', '', 1, '', '', 1, 1, 1, 1, '', 1, '', 1, 1, 1, 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '/var/www/jcb_j3', 'JCB.txt', '', '', 'Vast Development Method', '3.2.1-rc1', 'Copyright (C) 2015 Vast Development Method. All rights reserved.', '2015-04-30 12:04:35', '', 'HMhMLDKSyLrEPuBMJEM2GcDUhj7OY7lbAC8YaknszR8=', '6KTVm+xbGX1pknoG+r1guYUDh+l+YlLHJq2VeeKeWzo=', '', 'MARGltHnMVybJlT/Ul3J5JynJa3pt+aqtJNO8yPwhLY=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEyMHB4OyB9DQouZmllbGRMYXJnZSB7IHdpZHRoOiAzMjBweDsgfQ0KLmZpZWxkTWlkIHsgd2lkdGg6IDgwcHg7IH0NCi5maWVsZEZ1bGwgeyB3aWR0aDogMTAwJTsgfQ0KLmZpZWxkU21hbGwgeyB3aWR0aDogNjBweDsgfQ0KY29kZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAzcHg7fQ==', '', '', 1, '', 'The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!', 'joomla@vdm.io', '', 'https://vdm.bz/component-builder-self', 'q0Nx5ndmXh3j8Y4iCBNd20YXY0eaJ69bpL5GcQKyWNw=', '', '7331e978-f213-4404-9fa5-0613db40ba57', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '&#10003', '2024-04-27 10:37:31', 2, 'Component Builder', 'Componentbuilder', 'JCB', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlckhlbHBlckJvdGhd', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJGFwcF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclBvc3RmbGlnaHRVcGRhdGVdDQpbQ1VTVE9NQ09ERT1kYXRhYmFzZVNjaGVtYUNoZWNrQ2FsbCskYXBwXQ==', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskYXBwXQ==', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclByZWZsaWdodFVwZGF0ZV0NCltDVVNUT01DT0RFPXBocENvbmZpZ3VyYXRpb25DaGVja0NhbGwrJGFwcF0=', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclJlYWRNZV0=', 1, '', 'Builds Complex Joomla Components', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMSW5zdGFsbF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMVW5pbnN0YWxsXQ==', 'Component Builder (Public)', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', 3, 2, 'https://git.vdm.dev/joomla/Component-Builder/raw/branch/3.x/componentbuilder_update_server.xml', 'https://dev.vdm.io', '', 'AuPSKSfpljRFR8L15MBTyaMykK/qZhUlmcEmwddy7G0=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"0\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_site_helper\":[]}}', 1, 1218, '', 1, 1),
(3, '', '', '', '', '', '', '', 1, 1, '', 1, '', 1, '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 1, 1, 1, 3, 'Llewellyn van der Merwe', '', 'giz.txt', '', '', 'Deutsche Gesellschaft für International Zusammenarbeit (GIZ) Gmb', '3.5.0', 'Copyright (C) 2015. All Rights Reserved', '2012-06-15 01:19:00', 1, '/DM4B/gNsYQI1djKmChnS9Zk3OadbsxiRZIt2CObOv0=', 'JCABekFYdCb1Jid7QjGQJpkUNhnahz42rnQUKqqdSGc=', '', 'Fweh9P/AReEKLcdjy9FUzKN8w7tEnsX+66Pc7GBhrlo=', '', '', '', 1, '', 'Create Epidemiological Profiles for diseases and risks affecting your company. Detailed information on projected work days lost and costs. Create and edit activities and wellness responses for your workplace. Access to Small Business Modeling. Results displayed by gender. Network with other companies and wellness professionals.\r\n\r\nHaving seen the health priorities for your workforce, the tool outputs projections for how the interventions – which you have designed - are expected to benefit the company financially.\r\n\r\nBenefits are calculated based on the model projecting reductions in workdays lost due to sickness, presenteeism and death.', 'joomla@vdm.io', 1, 'https://vdm.bz/cost-benefit-projection', 'fh5IX0VlAKgp6nBbq0C83HnKqabnAWgoFNIekqjYDaEHw1aQBxWfO/Wz732g2IinutKTaGbTRfMNEsaGdU30Gw==', '', '829cc38c-5a2d-4455-9bc8-8f7129e56f19', 'images/giz.png', '', 'https://github.com/Llewellynvdm/Joomla-Cost-Benefit-Projection', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2022-05-27 05:31:41', 2, 'Cost Benefit Projection', 'costbenefitprojection', '', 2, '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIGdldCB0aGlzIHVzZXIgZ3JvdXBzDQoJCSRncm91cHMJPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCS8vIGdldCBwYXJhbXMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJJGNvdW50cnlHcm91cHMgCQkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnY291bnRyeXVzZXInKTsNCgkJJHNlcnZpY2Vwcm92aWRlckdyb3VwcwkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnc2VydmljZXByb3ZpZGVydXNlcicpOw0KCQkkbWVtYmVyR3JvdXBzIAkJCT0gKGFycmF5KSAkcGFyYW1zLT5nZXQoJ21lbWJlcnVzZXInKTsNCgkJLy8gbm93IGNoZWNrIGluIHdoYXQgZ3JvdXAgdGhpcyB1c2VyIGJlbG9uZ3MNCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkY291bnRyeUdyb3VwcywgJGdyb3VwcykpDQoJCXsNCgkJCS8vIGlzIGNvdW50cnkNCgkJCXJldHVybiAzOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRzZXJ2aWNlcHJvdmlkZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBzZXJ2aWNlcHJvdmlkZXINCgkJCXJldHVybiAyOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBtZW1iZXINCgkJCXJldHVybiAxOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0NvbXBhbnkoJGlkKQ0KCXsNCgkJLy8gY2hlY2sgdGhlIHBlciB2YWx1ZQ0KCQkkbG9jayA9IHNlbGY6OmdldFZhcignY29tcGFueScsICRpZCwgJ2lkJywgJ3BlcicpOw0KCQlpZiAoIDEgPT0gJGxvY2spDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSW50ZXJ2ZXRpb25BY2Nlc3MoJGlkLCAkc2hhcmUgPSBudWxsLCAkY29tcCA9IG51bGwpDQoJew0KICAgICAgICAgICAgICAgIC8vIHNldCBzaGFyZSB2YWx1ZSBpZiBub3Qgc2V0DQogICAgICAgICAgICAgICAgaWYgKCEkc2hhcmUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNoYXJlID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ3NoYXJlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHNoYXJlZCB3ZSBzZXQgbmVlZGVkIHZhbHVlcw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoaXMgaW50ZXJ2ZW50aW9ucyBjb21wYW55IChvd25lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkY29tcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ2NvbXBhbnknKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgaGlzIGNvbXBhbmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFuaWVzID0gc2VsZjo6aGlzQ29tcGFuaWVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB1c2VyIHR5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJUeXBlID0gc2VsZjo6dXNlcklzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gc2hhcmVkIHZhbHVlIHdlIHdpbGwgcmVzcG9uZA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hhcmluZyBpcyAxIG9ubHkgb3duZXIgbWF5IHNlZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVzZXJUeXBlID09IDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRjb21wLCAkY29tcGFuaWVzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaGFyaW5nIGlzIDIgb25seSBvd25lciBhbmQgc2VydmljZSBwcm92aWRlciBtYXkgc2VlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyVHlwZSA9PSAxIHx8ICR1c2VyVHlwZSA9PSAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29tcCwgJGNvbXBhbmllcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RIaXNVc2VycygkaWQgPSBudWxsKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGFsbCB0aGUgdXNlcnMgdG8ga2VlcA0KCQkka2VlcFVzZXJzID0gc2VsZjo6aGlzVXNlcnMoJGlkKTsNCgkJaWYgKGlzX2FycmF5KCRrZWVwVXNlcnMpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhvc2Ugbm90IHRvIGtlZXANCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ2lkJywka2VlcFVzZXJzLCd1c2VycycsJ2lkJywnTk9UIElOJywnJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzVXNlcnMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBoaW1zZWxmKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIGFycmF5KCRpZCk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvbXBhbmllcyB1c2VycyB0aGF0IGJlbG9uZyB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgaGltc2VsZikNCgkJCWNhc2UgMjoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwCQk9IHNlbGY6OmdldElkcygnaWQnLCRjb21wYW5pZXMsJ2NvbXBhbnknLCd1c2VyJyk7DQoJCQkvLyBub3cgY2hlY2sgdGhlIHJlc3VsdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRrZWVwKSkNCgkJCXsNCgkJCQkka2VlcFtdID0gJGlkOw0KCQkJCXJldHVybiBhcnJheV91bmlxdWUoJGtlZXApOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQkvLyBjb3VudHJ5IChvbmx5IGxvYWQgY29tcGFuaWVzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgY291bnRyeSkNCgkJCWNhc2UgMzoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwQwkJPSBzZWxmOjpnZXRJZHMoJ2lkJywkY29tcGFuaWVzLCdjb21wYW55JywndXNlcicpOw0KCQkJJHNlcnZpY2UJPSBzZWxmOjpoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCk7DQoJCQkka2VlcFMJCT0gc2VsZjo6Z2V0SWRzKCdpZCcsJHNlcnZpY2UsJ3NlcnZpY2VfcHJvdmlkZXInLCd1c2VyJyk7DQoJCQkvLyBtZXJnZSB0aGVzZSB2YWx1ZXMNCgkJCSRrZWVwCQk9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRrZWVwQywka2VlcFMpKTsNCgkJCS8vIG5vdyBjaGVjayB0aGUgcmVzdWx0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtlZXApKQ0KCQkJew0KCQkJCSRrZWVwW10gPSAkaWQ7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgka2VlcCk7DQoJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNDb21wYW5pZXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIG1lbWJlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY29tcGFueScpOw0KCQkJYnJlYWs7DQoJCQkvLyBzZXJ2ZXMgcHJvdmlkZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdzZXJ2aWNlX3Byb3ZpZGVyJyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnc2VydmljZV9wcm92aWRlcicpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvdW50cnkpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdjb3VudHJ5JyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY291bnRyeScpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRpZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJaWYgKDEgPT0gJGlzKSAvLyBtZW1iZXINCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygndXNlcicsJGlkLCdjb21wYW55Jywnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCWVsc2VpZiAoMiA9PSAkaXMpIC8vIHNlcnZlcyBwcm92aWRlcg0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoc2VsZjo6Z2V0SWQoJ3NlcnZpY2VfcHJvdmlkZXInLCRpZCkpOw0KCQl9DQoJCWVsc2VpZiAoMyA9PSAkaXMpIC8vIGNvdW50cnkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygnY291bnRyeScsc2VsZjo6Z2V0SWRzKCd1c2VyJywkaWQsJ2NvdW50cnknKSwnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0NvdW50cmllcygkdXNlcklkID0gbnVsbCwgJGlkID0gbnVsbCwgJGlzX3R5cGUgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQllbHNlaWYoJGlkID4gMCAmJiAkaXNfdHlwZSkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OmdldElkKCRpc190eXBlLCRpZCwnaWQnLCd1c2VyJyk7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJc3dpdGNoKCRpcykNCgkJew0KCQkJLy8gbWVtYmVyIChvbmx5IGxvYWQgY291bnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBtZW1iZXIgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCR1c2VySWQsJ2NvbXBhbnknLCdjb3VudHJ5Jyk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvdW50cnkgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgdXNlcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBhcnJheShzZWxmOjpnZXRJZCgnc2VydmljZV9wcm92aWRlcicsJHVzZXJJZCwndXNlcicsJ2NvdW50cnknKSk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb250cnllIHRoYXQgYmVsb25nIHRvIHRoZSBjb3VudHJ5IHVzZXIpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCd1c2VyJywkdXNlcklkLCdjb3VudHJ5JywnaWQnKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0N1cnJlbmNpZXMoJHVzZXJJZCA9IG51bGwsICRpZCA9IG51bGwsICRpc190eXBlID0gbnVsbCkNCgl7DQoJCSRjb3VudHJpZXMgPSBzZWxmOjpoaXNDb3VudHJpZXMoJHVzZXJJZCwkaWQsJGlzX3R5cGUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvdW50cmllcykpDQoJCXsNCgkJCSRjdXJyZW5jaWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjb3VudHJpZXMgYXMgJGNvdW50cnkpDQoJCQl7DQoJCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQkJJGN1cnJlbmNpZXNbXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ2N1cnJlbmN5JyksICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY2llcykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jaWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbmN5RGV0YWlscygkaWQgPSBmYWxzZSkNCgl7DQoJCWlmICghJGlkKQ0KCQl7DQoJCQkkaWQgPSBzZWxmOjpoaXNDdXJyZW5jaWVzKCk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZCkpDQoJCXsNCgkJCSRpZHMgPSBhcnJheV92YWx1ZXMoJGlkKTsNCgkJCSRpZCA9ICRpZFswXTsNCgkJfQ0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fY29zdGJlbmVmaXRwcm9qZWN0aW9uX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsJGN1cnJlbmN5ID0gZmFsc2UpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGEgbnVtYmVyDQoJCWlmIChpc19udW1lcmljKCRudW1iZXIpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgbmVnYXRpdmUgZmluZGVyIGZpbGUNCgkJCWluY2x1ZGVfb25jZSAnbmVnYXRpdmVmaW5kZXIucGhwJzsNCgkJCS8vIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUNCgkJCSRuZWdhdGl2ZUZpbmRlck9iaiA9IG5ldyBOZWdhdGl2ZUZpbmRlcihuZXcgRXhwcmVzc2lvbigiJG51bWJlciIpKTsNCgkJCSRuZWdhdGl2ZSA9ICRuZWdhdGl2ZUZpbmRlck9iai0+aXNJdE5lZ2F0aXZlKCkgPyBUUlVFIDogRkFMU0U7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUiEgKCcuJG51bWJlci4nKSBpcyBub3QgYSBudW1iZXIhJyk7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Y3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9CQ0KCQllbHNlDQoJCXsNCgkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3kpOw0KCQl9DQoJCS8vIHNldCB0aGUgbnVtYmVyIHRvIGN1cnJlbmN5DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY3kpKQ0KCQl7DQoJCQlpZiAoISRuZWdhdGl2ZSkNCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9wb3NpdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJysnOw0KCQkJfQ0KCQkJZWxzZSANCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9uZWdhdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJy0nOw0KCQkJCSRudW1iZXIgPSBhYnMoJG51bWJlcik7DQoJCQl9DQoJCQkkc2V0dXBOdW1iZXIgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkbnVtYmVyLCAoaW50KSRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlLCAkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxzeW1ib2wsICcgJyk7IC8vJGN1cnJlbmN5LT5jdXJyZW5jeV90aG91c2FuZHMgVE9ETyk7DQoJCQkkc2VhcmNoID0gYXJyYXkoJ3tzaWdufScsICd7bnVtYmVyfScsICd7c3ltYm9sfScpOw0KCQkJJHJlcGxhY2UgPSBhcnJheSgkc2lnbiwgJHNldHVwTnVtYmVyLCAkY3VycmVuY3ktPmN1cnJlbmN5X3N5bWJvbCk7DQoJCQkkbW9uZXlNYWRlID0gc3RyX3JlcGxhY2UgKCRzZWFyY2gsJHJlcGxhY2UsJGZvcm1hdCk7DQoNCgkJCXJldHVybiAkbW9uZXlNYWRlOw0KCQl9DQoJCXJldHVybiAkbnVtYmVyOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SWQoJHRhYmxlLCAkd2hlcmUgPSBudWxsICwgJHdoZXJlU3RyaW5nID0gJ3VzZXInLCAkd2hhdCA9ICdpZCcpDQoJew0KCQlpZighJHdoZXJlKQ0KCQl7DQoJCQkkd2hlcmUgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQl9DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0KSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCR3aGVyZVN0cmluZykgLiAnID0gJy4oaW50KSAkd2hlcmUpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJZHMoJHdoZXJlU3RyaW5nLCR3aGVyZSwkdGFibGUsJHdoYXQgPSAnaWQnLCRvcGVyYXRvciA9ICdJTicsJG1haW5fID0gJ1tbW2NvbXBvbmVudF1dXV8nKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkd2hlcmUpICYmICR3aGVyZSA+IDApDQoJCXsNCgkJCSR3aGVyZSA9IGFycmF5KCR3aGVyZSk7DQoJCX0NCg0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHdoZXJlKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0KSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX18nLiRtYWluXy4kdGFibGUpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgJy4kb3BlcmF0b3IuJyAoJyAuIGltcGxvZGUoJywnLCR3aGVyZSkgLiAnKScpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgkZGItPmxvYWRDb2x1bW4oKSk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWUoJGlkKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ25hbWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQlyZXR1cm4gJGRiLT5sb2FkUmVzdWx0KCk7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tYmluZSgkaXRlbXMpDQoJew0KCQkvLyBtYWtlIHN1cmUgdGhlIHN1bSBjbGFzcyBpcyBsb2FkZWQNCgkJSkxvYWRlcjo6aW1wb3J0KCdzdW1jb21iaW5lJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IgLiAnL2hlbHBlcnMnKTsNCgkJLy8gcmV0dXJuIHRoZSByZXN1bHQNCgkJcmV0dXJuIG5ldyBTdW1Db21iaW5lKCRpdGVtcyk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYWxjdWxhdGUoJGlkLCRkYXRhKQ0KCXsNCgkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSkpID09PSAkZGF0YSl7DQoJCQkvLyB3ZSBoYXZlIHZhbGlkIGRhdGEgbm93IGNoZWNrIGlmIHN0b3JlZCByZXN1bHQgbmVlZHMgdG8gYmUgdXBkYXRlZC4NCgkJCSRmaWxlTmFtZQk9IG1kNSgkZGF0YSk7DQoJCQkkZGF0YQkJPSB1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCRkYXRhKSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBub3QgdmFsaWQgZGF0YSBmaXJzdCBnZXQgdGhlIHZhbGlkIGRhdGENCgkJCSRtb2RlbAkJPSBzZWxmOjpnZXRNb2RlbCgnY29tcGFueWRhdGEnKTsNCgkJCSRkYXRhIAkJPSAkbW9kZWwtPmdldEl0ZW0oKGludCkkaWQpOw0KCQkJLy8gd2UgaGF2ZSB2YWxpZCBkYXRhIG5vdyBjaGVjayBpZiBzdG9yZWQgcmVzdWx0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuDQoJCQkkZmlsZU5hbWUJPSBtZDUoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJGRhdGEpKSk7DQoJCX0NCgkJLy8gc2V0IHNvbWUgZGVmYXVsdHMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJJHBhdGgJPSAkcGFyYW1zLT5nZXQoJ3Jlc3VsdHBhdGgnLCBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMnKTsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJGZ1bGxQYXRoID0gJHBhdGguJy8nLiRmaWxlTmFtZS4nLmpzb24nOw0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoZmlsZV9leGlzdHMoJGZ1bGxQYXRoKSAmJiAoKCRqc29uRmlsZSA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJGZ1bGxQYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkpDQoJCXsNCgkJCS8vIGdyZWF0IHdlIGFyZSBkb25lIHJldHVybiByZXN1bHRzDQoJCQlyZXR1cm4ganNvbl9kZWNvZGUoJGpzb25GaWxlKTsNCgkJfQ0KCQkvLyBkbyB0aGUgY2FsY3VsYXRpb24gYWdhaW4NCgkJJHJlc3VsdCA9IHNlbGY6OmRvQ2FsY3VsYXRpb24oJGRhdGEpOw0KCQkvLyBkaWQgd2UgZ2V0IGEgdmFsaWQgcmVzdWx0IHNldA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHJlc3VsdCkgfHwgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHJlc3VsdCkpDQoJCXsNCgkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCXNlbGY6OnNhdmVKc29uKCRyZXN1bHQsICRmdWxsUGF0aCwgJHBhdGgpOw0KCQkJLy8gcmV0dXJuIHJlc3VsdCBzZXQNCgkJCXJldHVybiAganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoJHJlc3VsdCkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRvQ2FsY3VsYXRpb24oJGRhdGEpDQoJew0KCQkvLyBkaWQgd2UgZ2V0IGEgdmFsaWQgcmVzdWx0IHNldA0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdGhlIHN1bSBjbGFzcyBpcyBsb2FkZWQNCgkJCUpMb2FkZXI6OmltcG9ydCgnc3VtJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IgLiAnL2hlbHBlcnMnKTsNCgkJCS8vIHJldHVybiB0aGUgcmVzdWx0DQoJCQlyZXR1cm4gbmV3IFN1bSgkZGF0YSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogU2FmZXMganNvbiB0byBhIGZpbGUNCgkqDQoJKiBAaW5wdXQJICBvYmplY3QvYXJyYXkvanNvbiAgJGRhdGEgICAgICBEYXRhIHRvIGJlIHN0b3JlZA0KCSogQGlucHV0CSAgc3RyaW5nICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoIEZ1bGwgcGF0aCB0byBmaWxlDQoJKiBAaW5wdXQJICBzdHJpbmcgICAgICAgICAgICAgICAgICAkcGF0aCAgICAgIEZ1bGwgcGF0aCB0byBmb2xkZXINCgkqDQoJKiBAcmV0dXJucyAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFzZWxmOjppc0pzb24oJGRhdGEpKQ0KCQl7DQoJCQkvLyBqc29uIGVuY29kZSBpZiBub3QganNvbg0KCQkJJGRhdGEgPSBqc29uX2VuY29kZSgkZGF0YSk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHRoaXMgaXMgYSBzdHJpbmcNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZ1bGxQYXRoLCAndycpOw0KCQkJZndyaXRlKCRmcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCRmcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0pzb24oJHN0cmluZykNCgl7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3RyaW5nKSkNCgkJew0KCQkJanNvbl9kZWNvZGUoJHN0cmluZyk7DQoJCQlyZXR1cm4gKGpzb25fbGFzdF9lcnJvcigpID09PSBKU09OX0VSUk9SX05PTkUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFVzZXJIYWNrKCkNCgl7DQoJCSRmaWxlcyA9IGFycmF5KA0KCQkJMCA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvbW9kZWxzL3VzZXJzLnBocCcsDQoJCQkJJ3JlcGxhY2UnID0+IGFycmF5KA0KCQkJCQkiSk1vZGVsTGlzdFxue1xuXHQvKioiID0+ICJKTW9kZWxMaXN0XG57XG5cdC8qXG5cdCogQSBWRE0gaGFjayB0byByZXN0cmljdCB1c2VycyBiYXNlZCBvbiB1c2VyJ3MgcmVsYXRpb24gdG8gdGhlaXIgY29tcG9uZW50XG5cdCpcblx0KiBUaGlzIGp1c3QgcHJvb2ZzIHRoZSB0aGUgaGFjayBpcyBpbnBsYWNlXG5cdCovXG5cdHB1YmxpYyBcJHJlc3RyaWN0VXNlcnMgPSB0cnVlO1xuXG5cdC8qKiIsDQoJCQkJCSJcJGV4Y2x1ZGVkID0ganNvbl9kZWNvZGUoYmFzZTY0X2RlY29kZShcJGFwcC0+aW5wdXQtPmdldCgnZXhjbHVkZWQnLCAnJywgJ0JBU0U2NCcpKSk7IiA9PiAiXCRleGNsdWRlZCA9IGpzb25fZGVjb2RlKGJhc2U2NF9kZWNvZGUoXCRhcHAtPmlucHV0LT5nZXQoJ2V4Y2x1ZGVkJywgJycsICdCQVNFNjQnKSkpO1xuXHRcdC8vIGFkZCB0aGUgZ2xvYmFsIGV4Y2x1ZGUgZm9yIFtbW2NvbXBvbmVudF1dXVxuXHRcdGlmIChcJHRoaXMtPnJlc3RyaWN0VXNlcnMgJiYgIUZhY3Rvcnk6OmdldFVzZXIoKS0+YXV0aG9yaXNlKCdjb3JlLm9wdGlvbnMnLCAnY29tX1tbW2NvbXBvbmVudF1dXScpKVxuXHRcdHtcblx0XHRcdEpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgY29tcG9uZW50IGlzIGluc3RhbGxlZFxuXHRcdFx0aWYgKGNsYXNzX2V4aXN0cygnW1tbQ29tcG9uZW50XV1dSGVscGVyJykpXG5cdFx0XHR7XG5cdFx0XHRcdFwkZXhjbHVkZWRHbG9iYWwgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Om5vdEhpc1VzZXJzKCk7XG5cdFx0XHRcdGlmIChcJGV4Y2x1ZGVkR2xvYmFsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCRleGNsdWRlZCA9IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6Om1lcmdlKGFycmF5KFwkZXhjbHVkZWRHbG9iYWwsXCRleGNsdWRlZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSIpDQoJCQkpLA0KCQkJMSA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvbW9kZWxzL3VzZXIucGhwJywNCgkJCQkncmVwbGFjZScgPT4gYXJyYXkoDQoJCQkJCSIvLyBUaGUgdXNlciBzaG91bGQgbm90IGJlIGFibGUgdG8gc2V0IHRoZSByZXF1aXJlUmVzZXQgdmFsdWUgb24gdGhlaXIgb3duIGFjY291bnQiID0+ICJpZiAoIUZhY3Rvcnk6OmdldFVzZXIoKS0+YXV0aG9yaXNlKCdjb3JlLmFkbWluJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSAmJiAhRmFjdG9yeTo6Z2V0VXNlcigpLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fW1tbY29tcG9uZW50XV1dJykpDQoJCXsNCgkJCS8vIGxvYWQgb3VyIGhlbHBlciBjbGFzcyBmb3IgQ29zdCBCZW5lZml0IFByb2plY3Rpb24gQ29tcG9uZW50DQoJCQlKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KCQkJLy8gY2hlY2sgaWYgdGhlIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQNCgkJCWlmIChjbGFzc19leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicpKQ0KCQkJew0KCQkJCVwkaXMgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OnVzZXJJcygpOw0KCQkJCXN3aXRjaChcJGlzKQ0KCQkJCXsNCgkJCQkJY2FzZSAxOg0KCQkJCQljYXNlIDI6DQoJCQkJCWNhc2UgMzoNCgkJCQkJCS8vIERpc2FibGUgZmllbGRzIGZvciBkaXNwbGF5Lg0KCQkJCQkJXCRmb3JtLT5yZW1vdmVHcm91cCgncGFyYW1zJyk7DQoJCQkJCQkvLyBkaXNhYmxlIHNvbWUgZmllbGRzDQoJCQkJCQlcJGZvcm0tPnNldEZpZWxkQXR0cmlidXRlKCdzZW5kRW1haWwnLCAnZGlzYWJsZWQnLCAndHJ1ZScpOw0KCQkJCQkJXCRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgnc2VuZEVtYWlsJywgJ2ZpbHRlcicsICd1bnNldCcpOw0KCQkJCQkJXCRmb3JtLT5yZW1vdmVGaWVsZCgnc2VuZEVtYWlsJyk7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCS8vIFRoZSB1c2VyIHNob3VsZCBub3QgYmUgYWJsZSB0byBzZXQgdGhlIHJlcXVpcmVSZXNldCB2YWx1ZSBvbiB0aGVpciBvd24gYWNjb3VudCIsDQoJCQkJCSJcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5tYW5hZ2UnLCAnY29tX3VzZXJzJykiID0+ICJcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5tYW5hZ2UnLCAnY29tX3VzZXJzJykgJiYgIFwkdXNlci0+YXV0aG9yaXNlKCdjb3JlLm9wdGlvbnMnLCAnY29tX1tbW2NvbXBvbmVudF1dXScpIikNCgkJCSksDQoJCQkyID0+IGFycmF5KA0KCQkJCSdwYXRoJyA9PiBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV91c2Vycy9jb250cm9sbGVycy91c2VyLnBocCcsDQoJCQkJJ3JlcGxhY2UnID0+IGFycmF5KA0KCQkJCQkicmV0dXJuIHBhcmVudDo6YWxsb3dFZGl0KFwkZGF0YSwgXCRrZXkpOyIgPT4gImlmICghRmFjdG9yeTo6Z2V0VXNlcigpLT5hdXRob3Jpc2UoJ2NvcmUuYWRtaW4nLCAnY29tX1tbW2NvbXBvbmVudF1dXScpICYmICFGYWN0b3J5OjpnZXRVc2VyKCktPmF1dGhvcmlzZSgnY29yZS5vcHRpb25zJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSkNCgkJew0KCQkJLy8gbG9hZCBvdXIgaGVscGVyIGNsYXNzIGZvciBDb3N0IEJlbmVmaXQgUHJvamVjdGlvbiBDb21wb25lbnQNCgkJCUpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7DQoJCQkvLyBjaGVjayBpZiB0aGUgY29tcG9uZW50IGlzIGluc3RhbGxlZA0KCQkJaWYgKGNsYXNzX2V4aXN0cygnW1tbQ29tcG9uZW50XV1dSGVscGVyJykpDQoJCQl7DQoJCQkJXCRoaXNVc2VycyA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6aGlzVXNlcnMoKTsNCgkJCQlpZiAoIWluX2FycmF5KFwkZGF0YVtcJGtleV0sXCRoaXNVc2VycykpDQoJCQkJew0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIHBhcmVudDo6YWxsb3dFZGl0KFwkZGF0YSwgXCRrZXkpOyIpDQoJCQkpLA0KCQkJMyA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvdmlld3MvdXNlcnMvdmlldy5odG1sLnBocCcsDQoJCQkJJ3JlcGxhY2UnID0+IGFycmF5KA0KCQkJCQkiaWYgKFwkY2FuRG8tPmdldCgnY29yZS5jcmVhdGUnKSkiID0+ICJpZiAoXCRjYW5Eby0+Z2V0KCdjb3JlLmNyZWF0ZScpICYmIFwkdXNlci0+YXV0aG9yaXNlKCdjb3JlLm9wdGlvbnMnLCAnY29tX2Nvc3RiZW5lZml0cHJvamVjdGlvbicpKSIpDQoJCQkpLA0KCQkJNCA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvdmlld3MvdXNlcnMvdmlldy5odG1sLnBocCcsDQoJCQkJJ3JlcGxhY2UnID0+IGFycmF5KAkJCQkJDQoJCQkJCSIvLyBBZGQgYSBiYXRjaCBidXR0b25cblx0XHRpZiAoXCR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUuY3JlYXRlJywgJ2NvbV91c2VycycpIiA9PiAiLy8gQWRkIGEgYmF0Y2ggYnV0dG9uIG9ubHkgaWYgdXNlciBhbHNvIGhhcyBhZG1pbiByaWdodCBpbiBjb21fY29zdGJlbmVmaXRwcm9qZWN0aW9uXG5cdFx0aWYgKFwkdXNlci0+YXV0aG9yaXNlKCdjb3JlLmNyZWF0ZScsICdjb21fdXNlcnMnKVxuXHRcdFx0JiYgXCR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fY29zdGJlbmVmaXRwcm9qZWN0aW9uJykiKQ0KCQkJKQ0KCQkpOw0KCQkvLyBjaGVjayBpZiBoYWNrIGlzIHN0aWxsIHNldA0KCQlyZXR1cm4gc2VsZjo6c2V0SGFjaygkZmlsZXMpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SGFjaygkZmlsZXMpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpbGVzKSkNCgkJew0KCQkJJGNoZWNraW5nID0gYXJyYXkoKTsNCgkJCS8vIGdldCB0aGUgZmlsZSB0b29scw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZmlsZScpOw0KCQkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKQ0KCQkJew0KCQkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJCQkvLyBnZXQgcmVsYXRlZCBmaWxlcw0KCQkJCSRhY3R1YWxGaWxlID0gSkZpbGU6OnJlYWQoJGZpbGVbJ3BhdGgnXSk7DQoJCQkJLy8gY2hlY2sgaWYgaGFjayBpcyBzdGlsbCBzZXQNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpbGVbJ3JlcGxhY2UnXSkpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkZmlsZVsncmVwbGFjZSddIGFzICRvcmlnaW5hbCA9PiAkdXBkYXRlU3RyaW5nKQ0KCQkJCQl7DQoJCQkJCQlpZiAoc3RycG9zKCRhY3R1YWxGaWxlLCR1cGRhdGVTdHJpbmcpID09PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBzZXQgdGhlIGhhY2sgYWdhaW4NCgkJCQkJCQkkdXBkYXRlID0gdHJ1ZTsNCgkJCQkJCQkkYWN0dWFsRmlsZSA9IHN0cl9yZXBsYWNlKCRvcmlnaW5hbCwgJHVwZGF0ZVN0cmluZywgJGFjdHVhbEZpbGUpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkdXBkYXRlKQ0KCQkJCXsNCgkJCQkJJGRvbmVbJGZpbGVbJ3BhdGgnXV0gPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjp3cml0ZSgkZmlsZVsncGF0aCddLCRhY3R1YWxGaWxlKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGRvbmVbJGZpbGVbJ3BhdGgnXV0gPSB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkZG9uZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB3cml0ZUZpbGUoJHBhdGgsJGRhdGEpDQoJew0KCQkkZmggPSBmb3BlbigkcGF0aCwgInciKTsNCgkJaWYgKCFpc19yZXNvdXJjZSgkZmgpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJaWYgKGZ3cml0ZSgkZmgsICRkYXRhKSkNCgkJew0KCQkJLy8gY2xvc2UgZmlsZS4NCgkJCWZjbG9zZSgkZmgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gY2xvc2UgZmlsZS4NCgkJZmNsb3NlKCRmaCk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIEdldCBDU1YgSGVhZGVycw0KCSovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlSGVhZGVyc0NTVigkcGF0aCkNCgl7DQoJCS8vIHNldCB0aGUgaGVhZGVycw0KCQlpZigoJGhhbmRsZSA9IGZvcGVuKCRwYXRoLCAncicpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSRyZXN1bHQgPSBmZ2V0Y3N2KCRoYW5kbGUpOw0KCQkJZmNsb3NlKCRoYW5kbGUpOw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRyZXN1bHQpKQ0KCQkJew0KCQkJCSRrZXkgPSAnQSc7DQoJCQkJZm9yZWFjaCAoJHJlc3VsdCBhcyAkaGVhZGVyKQ0KCQkJCXsNCgkJCQkJJGhlYWRlcnNbJGtleV0gPSAkaGVhZGVyOw0KCQkJCQkka2V5Kys7DQoJCQkJfQ0KCQkJCXJldHVybiAkaGVhZGVyczsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIHVzZXIgbm90aWNlIGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXNlcm5vdGljZSA9IGZhbHNlOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlUGF0aCgkdHlwZSwgJG5hbWUgPSAnbGlzdGluZycsICRrZXkgPSAnJywgJGZpbGVUeXBlID0gJy5qc29uJywgJFBBVEggPSBKUEFUSF9DT01QT05FTlRfU0lURSkNCgl7DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHskdHlwZS4kbmFtZX0pKQ0KCQl7DQoJCQkvLyBHZXQgbG9jYWwga2V5DQoJCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkJLy8gc2V0IHRoZSBuYW1lDQoJCQkkZmlsZU5hbWUgPSBtZDUoJHR5cGUuJG5hbWUuJGxvY2Fsa2V5LiRrZXkpOw0KCQkJLy8gc2V0IGZpbGUgcGF0aAkJCQ0KCQkJc2VsZjo6JHskdHlwZS4kbmFtZX0gPSAkUEFUSC4nL2hlbHBlcnMvJy4kZmlsZU5hbWUuJGZpbGVUeXBlOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgcGF0aA0KCQlyZXR1cm4gc2VsZjo6JHskdHlwZS4kbmFtZX07DQoJfQ0KDQoJLyoqDQoJKiAJZ2V0IHRoZSBsb2NhbGtleQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2Fsa2V5ID0gZmFsc2U7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2NhbEtleSgpDQoJew0KCQlpZiAoIXNlbGY6OiRsb2NhbGtleSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBtYWluIGtleQ0KCQkJc2VsZjo6JGxvY2Fsa2V5ID0gbWQ1KEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdiYXNpYycsICdsb2NhbEtleTM0ZmRXRWtsJykpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9jYWxrZXk7DQoJfQ==', '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIGdldCB0aGlzIHVzZXIgZ3JvdXBzDQoJCSRncm91cHMJPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCS8vIGdldCBwYXJhbXMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJJGNvdW50cnlHcm91cHMgCQkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnY291bnRyeXVzZXInKTsNCgkJJHNlcnZpY2Vwcm92aWRlckdyb3VwcwkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnc2VydmljZXByb3ZpZGVydXNlcicpOw0KCQkkbWVtYmVyR3JvdXBzIAkJCT0gKGFycmF5KSAkcGFyYW1zLT5nZXQoJ21lbWJlcnVzZXInKTsNCgkJLy8gbm93IGNoZWNrIGluIHdoYXQgZ3JvdXAgdGhpcyB1c2VyIGJlbG9uZ3MNCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkY291bnRyeUdyb3VwcywgJGdyb3VwcykpDQoJCXsNCgkJCS8vIGlzIGNvdW50cnkNCgkJCXJldHVybiAzOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRzZXJ2aWNlcHJvdmlkZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBzZXJ2aWNlcHJvdmlkZXINCgkJCXJldHVybiAyOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBtZW1iZXINCgkJCXJldHVybiAxOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSW50ZXJ2ZXRpb25BY2Nlc3MoJGlkLCAkc2hhcmUgPSBudWxsLCAkY29tcCA9IG51bGwpDQoJew0KICAgICAgICAgICAgICAgIC8vIHNldCBzaGFyZSB2YWx1ZSBpZiBub3Qgc2V0DQogICAgICAgICAgICAgICAgaWYgKCEkc2hhcmUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNoYXJlID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ3NoYXJlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHNoYXJlZCB3ZSBzZXQgbmVlZGVkIHZhbHVlcw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoaXMgaW50ZXJ2ZW50aW9ucyBjb21wYW55IChvd25lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkY29tcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ2NvbXBhbnknKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgaGlzIGNvbXBhbmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFuaWVzID0gc2VsZjo6aGlzQ29tcGFuaWVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB1c2VyIHR5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJUeXBlID0gc2VsZjo6dXNlcklzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gc2hhcmVkIHZhbHVlIHdlIHdpbGwgcmVzcG9uZA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hhcmluZyBpcyAxIG9ubHkgb3duZXIgbWF5IHNlZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVzZXJUeXBlID09IDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRjb21wLCAkY29tcGFuaWVzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaGFyaW5nIGlzIDIgb25seSBvd25lciBhbmQgc2VydmljZSBwcm92aWRlciBtYXkgc2VlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyVHlwZSA9PSAxIHx8ICR1c2VyVHlwZSA9PSAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29tcCwgJGNvbXBhbmllcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RIaXNVc2VycygkaWQgPSBudWxsKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGFsbCB0aGUgdXNlcnMgdG8ga2VlcA0KCQkka2VlcFVzZXJzID0gc2VsZjo6aGlzVXNlcnMoJGlkKTsNCgkJaWYgKGlzX2FycmF5KCRrZWVwVXNlcnMpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhvc2Ugbm90IHRvIGtlZXANCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ2lkJywka2VlcFVzZXJzLCd1c2VycycsJ2lkJywnTk9UIElOJywnJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzVXNlcnMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBoaW1zZWxmKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIGFycmF5KCRpZCk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvbXBhbmllcyB1c2VycyB0aGF0IGJlbG9uZyB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgaGltc2VsZikNCgkJCWNhc2UgMjoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwCQk9IHNlbGY6OmdldElkcygnaWQnLCRjb21wYW5pZXMsJ2NvbXBhbnknLCd1c2VyJyk7DQoJCQkvLyBub3cgY2hlY2sgdGhlIHJlc3VsdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRrZWVwKSkNCgkJCXsNCgkJCQkka2VlcFtdID0gJGlkOw0KCQkJCXJldHVybiBhcnJheV91bmlxdWUoJGtlZXApOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQkvLyBjb3VudHJ5IChvbmx5IGxvYWQgY29tcGFuaWVzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgY291bnRyeSkNCgkJCWNhc2UgMzoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwQwkJPSBzZWxmOjpnZXRJZHMoJ2lkJywkY29tcGFuaWVzLCdjb21wYW55JywndXNlcicpOw0KCQkJJHNlcnZpY2UJPSBzZWxmOjpoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCk7DQoJCQkka2VlcFMJCT0gc2VsZjo6Z2V0SWRzKCdpZCcsJHNlcnZpY2UsJ3NlcnZpY2VfcHJvdmlkZXInLCd1c2VyJyk7DQoJCQkvLyBtZXJnZSB0aGVzZSB2YWx1ZXMNCgkJCSRrZWVwCQk9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRrZWVwQywka2VlcFMpKTsNCgkJCS8vIG5vdyBjaGVjayB0aGUgcmVzdWx0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtlZXApKQ0KCQkJew0KCQkJCSRrZWVwW10gPSAkaWQ7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgka2VlcCk7DQoJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNDb21wYW5pZXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIG1lbWJlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY29tcGFueScpOw0KCQkJYnJlYWs7DQoJCQkvLyBzZXJ2ZXMgcHJvdmlkZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdzZXJ2aWNlX3Byb3ZpZGVyJyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnc2VydmljZV9wcm92aWRlcicpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvdW50cnkpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdjb3VudHJ5JyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY291bnRyeScpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRpZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJaWYgKDEgPT0gJGlzKSAvLyBtZW1iZXINCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygndXNlcicsJGlkLCdjb21wYW55Jywnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCWVsc2VpZiAoMiA9PSAkaXMpIC8vIHNlcnZlcyBwcm92aWRlcg0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoc2VsZjo6Z2V0SWQoJ3NlcnZpY2VfcHJvdmlkZXInLCRpZCkpOw0KCQl9DQoJCWVsc2VpZiAoMyA9PSAkaXMpIC8vIGNvdW50cnkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygnY291bnRyeScsc2VsZjo6Z2V0SWRzKCd1c2VyJywkaWQsJ2NvdW50cnknKSwnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0NvdW50cmllcygkdXNlcklkID0gbnVsbCwgJGlkID0gbnVsbCwgJGlzX3R5cGUgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQllbHNlaWYoJGlkID4gMCAmJiAkaXNfdHlwZSkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OmdldElkKCRpc190eXBlLCRpZCwnaWQnLCd1c2VyJyk7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJc3dpdGNoKCRpcykNCgkJew0KCQkJLy8gbWVtYmVyIChvbmx5IGxvYWQgY291bnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBtZW1iZXIgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCR1c2VySWQsJ2NvbXBhbnknLCdjb3VudHJ5Jyk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvdW50cnkgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgdXNlcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBhcnJheShzZWxmOjpnZXRJZCgnc2VydmljZV9wcm92aWRlcicsJHVzZXJJZCwndXNlcicsJ2NvdW50cnknKSk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb250cnllIHRoYXQgYmVsb25nIHRvIHRoZSBjb3VudHJ5IHVzZXIpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCd1c2VyJywkdXNlcklkLCdjb3VudHJ5JywnaWQnKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0N1cnJlbmNpZXMoJHVzZXJJZCA9IG51bGwsICRpZCA9IG51bGwsICRpc190eXBlID0gbnVsbCkNCgl7DQoJCSRjb3VudHJpZXMgPSBzZWxmOjpoaXNDb3VudHJpZXMoJHVzZXJJZCwkaWQsJGlzX3R5cGUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvdW50cmllcykpDQoJCXsNCgkJCSRjdXJyZW5jaWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjb3VudHJpZXMgYXMgJGNvdW50cnkpDQoJCQl7DQoJCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQkJJGN1cnJlbmNpZXNbXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ2N1cnJlbmN5JyksICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY2llcykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jaWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbmN5RGV0YWlscygkaWQgPSBmYWxzZSkNCgl7DQoJCWlmICghJGlkKQ0KCQl7DQoJCQkkaWQgPSBzZWxmOjpoaXNDdXJyZW5jaWVzKCk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZCkpDQoJCXsNCgkJCSRpZHMgPSBhcnJheV92YWx1ZXMoJGlkKTsNCgkJCSRpZCA9ICRpZFswXTsNCgkJfQ0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsJGN1cnJlbmN5ID0gZmFsc2UpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGEgbnVtYmVyDQoJCWlmIChpc19udW1lcmljKCRudW1iZXIpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgbmVnYXRpdmUgZmluZGVyIGZpbGUNCgkJCWluY2x1ZGVfb25jZSAnbmVnYXRpdmVmaW5kZXIucGhwJzsNCgkJCS8vIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUNCgkJCSRuZWdhdGl2ZUZpbmRlck9iaiA9IG5ldyBOZWdhdGl2ZUZpbmRlcihuZXcgRXhwcmVzc2lvbigiJG51bWJlciIpKTsNCgkJCSRuZWdhdGl2ZSA9ICRuZWdhdGl2ZUZpbmRlck9iai0+aXNJdE5lZ2F0aXZlKCkgPyBUUlVFIDogRkFMU0U7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUiEgKCcuJG51bWJlci4nKSBpcyBub3QgYSBudW1iZXIhJyk7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Y3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9CQ0KCQllbHNlDQoJCXsNCgkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3kpOw0KCQl9DQoJCS8vIHNldCB0aGUgbnVtYmVyIHRvIGN1cnJlbmN5DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY3kpKQ0KCQl7DQoJCQlpZiAoISRuZWdhdGl2ZSkNCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9wb3NpdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJysnOw0KCQkJfQ0KCQkJZWxzZSANCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9uZWdhdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJy0nOw0KCQkJCSRudW1iZXIgPSBhYnMoJG51bWJlcik7DQoJCQl9DQoJCQkkc2V0dXBOdW1iZXIgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkbnVtYmVyLCAoaW50KSRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlLCAkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxzeW1ib2wsICcgJyk7IC8vJGN1cnJlbmN5LT5jdXJyZW5jeV90aG91c2FuZHMgVE9ETyk7DQoJCQkkc2VhcmNoID0gYXJyYXkoJ3tzaWdufScsICd7bnVtYmVyfScsICd7c3ltYm9sfScpOw0KCQkJJHJlcGxhY2UgPSBhcnJheSgkc2lnbiwgJHNldHVwTnVtYmVyLCAkY3VycmVuY3ktPmN1cnJlbmN5X3N5bWJvbCk7DQoJCQkkbW9uZXlNYWRlID0gc3RyX3JlcGxhY2UgKCRzZWFyY2gsJHJlcGxhY2UsJGZvcm1hdCk7DQoNCgkJCXJldHVybiAkbW9uZXlNYWRlOw0KCQl9DQoJCXJldHVybiAkbnVtYmVyOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F1c2VSaXNrRGV0YWlscygkaWQsJGRldGFpbHMgPSBudWxsKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGV0YWlscykpDQoJCXsNCgkJCSRkZXRhaWxzID0gYXJyYXkoJ25hbWUnLCdhbGlhcycsJ2Rlc2NyaXB0aW9uJywncmVmJyk7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGRldGFpbHMpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY2F1c2VyaXNrJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJZCgkdGFibGUsICR3aGVyZSA9IG51bGwgLCAkd2hlcmVTdHJpbmcgPSAndXNlcicsICR3aGF0ID0gJ2lkJykNCgl7DQoJCWlmKCEkd2hlcmUpDQoJCXsNCgkJCSR3aGVyZSA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgPSAnLihpbnQpICR3aGVyZSk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElkcygkd2hlcmVTdHJpbmcsJHdoZXJlLCR0YWJsZSwkd2hhdCA9ICdpZCcsJG9wZXJhdG9yID0gJ0lOJywkbWFpbl8gPSAnW1tbY29tcG9uZW50XV1dXycpDQoJew0KCQlpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR3aGVyZSkgJiYgJHdoZXJlID4gMCkNCgkJew0KCQkJJHdoZXJlID0gYXJyYXkoJHdoZXJlKTsNCgkJfQ0KDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkd2hlcmUpKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycuJG1haW5fLiR0YWJsZSkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkd2hlcmVTdHJpbmcpIC4gJyAnLiRvcGVyYXRvci4nICgnIC4gaW1wbG9kZSgnLCcsJHdoZXJlKSAuICcpJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlyZXR1cm4gYXJyYXlfdW5pcXVlKCRkYi0+bG9hZENvbHVtbigpKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZSgkaWQpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnbmFtZScpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4oaW50KSAkaWQpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21iaW5lKCRpdGVtcykNCgl7DQoJCS8vIG1ha2Ugc3VyZSB0aGUgc3VtIGNsYXNzIGlzIGxvYWRlZA0KCQlKTG9hZGVyOjppbXBvcnQoJ3N1bWNvbWJpbmUnLCBKUEFUSF9DT01QT05FTlRfQURNSU5JU1RSQVRPUiAuICcvaGVscGVycycpOw0KCQkvLyByZXR1cm4gdGhlIHJlc3VsdA0KCQlyZXR1cm4gbmV3IFN1bUNvbWJpbmUoJGl0ZW1zKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZSgkaWQsJGRhdGEpDQoJew0KCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhKSkgPT09ICRkYXRhKXsNCgkJCS8vIHdlIGhhdmUgdmFsaWQgZGF0YSBub3cgY2hlY2sgaWYgc3RvcmVkIHJlc3VsdCBuZWVkcyB0byBiZSB1cGRhdGVkLg0KCQkJJGZpbGVOYW1lCT0gbWQ1KCRkYXRhKTsNCgkJCSRkYXRhCQk9IHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJGRhdGEpKTsNCgkJfSBlbHNlIHsNCgkJCS8vIG5vdCB2YWxpZCBkYXRhIGZpcnN0IGdldCB0aGUgdmFsaWQgZGF0YQ0KCQkJJG1vZGVsCQk9IHNlbGY6OmdldE1vZGVsKCdjb21wYW55ZGF0YScpOw0KCQkJJGRhdGEgCQk9ICRtb2RlbC0+Z2V0SXRlbSgoaW50KSRpZCk7DQoJCQkvLyB3ZSBoYXZlIHZhbGlkIGRhdGEgbm93IGNoZWNrIGlmIHN0b3JlZCByZXN1bHQgbmVlZHMgdG8gYmUgdXBkYXRlZC4NCgkJCSRmaWxlTmFtZQk9IG1kNShiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkZGF0YSkpKTsNCgkJfQ0KCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkkcGFyYW1zCT0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQkkcGF0aAk9ICRwYXJhbXMtPmdldCgncmVzdWx0cGF0aCcsIEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycycpOw0KCQkvLyBidWlsZCBmdWxsIHBhdGggdG8gZmlsZQ0KCQkkZnVsbFBhdGggPSAkcGF0aC4nLycuJGZpbGVOYW1lLicuanNvbic7DQoJCS8vIGNoZWNrIGlmIGZpbGUgZXhpc3RzDQoJCWlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpICYmICgoJGpzb25GaWxlID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0Q29udGVudCgkZnVsbFBhdGgsIEZBTFNFKSkgIT09IEZBTFNFKSkNCgkJew0KCQkJLy8gZ3JlYXQgd2UgYXJlIGRvbmUgcmV0dXJuIHJlc3VsdHMNCgkJCXJldHVybiBqc29uX2RlY29kZSgkanNvbkZpbGUpOw0KCQl9DQoJCS8vIGRvIHRoZSBjYWxjdWxhdGlvbiBhZ2Fpbg0KCQkkcmVzdWx0ID0gc2VsZjo6ZG9DYWxjdWxhdGlvbigkZGF0YSk7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSB8fCBTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSkNCgkJew0KCQkJLy8gbm93IHNhdmUgZm9yIG5leHQgdGltZQ0KCQkJc2VsZjo6c2F2ZUpzb24oJHJlc3VsdCwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCQkvLyByZXR1cm4gcmVzdWx0IHNldA0KCQkJcmV0dXJuICBqc29uX2RlY29kZShqc29uX2VuY29kZSgkcmVzdWx0KSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZG9DYWxjdWxhdGlvbigkZGF0YSkNCgl7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSB0aGUgc3VtIGNsYXNzIGlzIGxvYWRlZA0KCQkJSkxvYWRlcjo6aW1wb3J0KCdzdW0nLCBKUEFUSF9DT01QT05FTlRfQURNSU5JU1RSQVRPUiAuICcvaGVscGVycycpOw0KCQkJLy8gcmV0dXJuIHRoZSByZXN1bHQNCgkJCXJldHVybiBuZXcgU3VtKCRkYXRhKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFzZWxmOjppc0pzb24oJGRhdGEpKQ0KCQl7DQoJCQkvLyBqc29uIGVuY29kZSBpZiBub3QganNvbg0KCQkJJGRhdGEgPSBqc29uX2VuY29kZSgkZGF0YSk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHRoaXMgaXMgYSBzdHJpbmcNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZ1bGxQYXRoLCAndycpOw0KCQkJZndyaXRlKCRmcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCRmcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0pzb24oJHN0cmluZykNCgl7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3RyaW5nKSkNCgkJew0KCQkJanNvbl9kZWNvZGUoJHN0cmluZyk7DQoJCQlyZXR1cm4gKGpzb25fbGFzdF9lcnJvcigpID09PSBKU09OX0VSUk9SX05PTkUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKglzZXQgZ3JvdXBzIG5hbWVzDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRHcm91cE5hbWVzKCRncm91cHMpDQoJew0KCQkvLyBjaGFuZ2UgYXJyYXkgb2YgZ3JvdXAgaWRzIHRvIHN0cmluZyBvZiBncm91cCBuYW1lcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCXsNCgkJCSRncm91cHNOYW1lcyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkZ3JvdXBzIGFzICRncm91cCkNCgkJCXsNCgkJCQkkZ3JvdXBzTmFtZXNbXSA9IHNlbGY6OmdldEdyb3VwTmFtZSgkZ3JvdXApOw0KCQkJfQ0KCQkJcmV0dXJuIGltcGxvZGUoJywgJywkZ3JvdXBzTmFtZXMpOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbmFtaWJpYS9DQlAtSm9vbWxhLTMtQ29tcG9uZW50L21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQucG5nICJUaGUgIyMjQ29tcG9uZW50X25hbWUjIyMiKQ0KDQojIyNERVNDUklQVElPTiMjIw0KDQojIFJlcXVpcmVtZW50cw0KDQpEdWUgdG8gdGhlIHNpemUgb2YgdGhlIHBlcm1pc3Npb25hbCBzdHJ1Y3R1cmUsIHlvdSB3aWxsIG5lZWQgdG8gaW5jcmVhc2UgbWF4X2lucHV0X3ZhcnMgdW50aWwgdGhlIHBlcm1pc3Npb25zIGFyZSBhYmxlIHRvIHNhdmUuDQpgYGANCm1heF9pbnB1dF92YXJzID0gNTAwMA0KYGBgDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oaHR0cHM6Ly93d3cuc3RhZmZoZWFsdGhjYnAuY29tLykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKGh0dHBzOi8vd3d3LnN0YWZmaGVhbHRoY2JwLmNvbS8pDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbyk=', '', '', 'Cost Benefit Projection Tool.', '', '', 'Cost Benefit Projection (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Cost-Benefit-Projection/master/costbenefitprojection_update_server.xml', 'http://www.vdm.io', '', 'KF4DOoTG/SbAenJVZ+C70b8v2mo/9AGoHRUZn38fNjGbD5l8WbBkTcAJsbhGhgenVlLqlgMCYhDPW1id2M7vdg==', 'http://www.vdm.io/access/', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 229, '', 1, 6),
(4, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '3.0.2', 'Copyright (C) 2014. All Rights Reserved', '2015-07-16 21:16:17', '', '', '', '', '', '', '', '', 1, '', 'Adding PHP/JS/CSS to your joomla articles and modules has never been so easy!', 'joomla@vdm.io', '', '', 'ikiTKPjL3OpNgd4GSy83H6r6AqvvqqJL3eq1OJcbwZY=', '', '79cd73b9-3989-4e44-ad15-4c8e44fe272e', 'images/vdm/codebox500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2017-08-17 21:48:57', 1, 'Code Box', 'codebox', '', 4, '', '', '', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKSA=', '', '', 'Adding PHP/JS/CSS', '', '', 'Code Box', '', '', '', 1, '', 'http://www.vdm.io/joomla', '', '614dod0JnHfCW3c4CWFarRBQIwKacNEPkOsMoRdEfjY=', '', '', 1, 20, '', 1, 3),
(5, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '1.0.5', 'Copyright (C) 2015. All Rights Reserved', '2015-08-05 00:40:06', '', 'fJ8k5rxm0gLeNHfPfCHRUdLna4XdjaIF6J2QAv6Jd4M=', 'sQUMRQJ3xdXI2mZ/01zGerfPjyaNSu+2B/qqqGPboCg=', '', 'Q1plhG96+yqMLlJnmvFINIm6j3X6XnOLfhnre4pAcZU=', '', '', '', 1, '', 'Just a basic demo of the most basic implementations of the [Joomla] (http://www.joomla.org) Component Builder\'s ability.', 'info@vdm.io', '', 'http://vdm.bz/get-advance-demo-key', 'Arlr/PFBJ+vUM2vgEoMU6IyzriNLJ8dfZQZ39QyPL4pAVL02VyXNvoMUo8M3q0wV', '', 'ec2c3e36-e2b1-4bab-842d-bd0f9d07ea00', 'images/vdm/demo500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demoAdvanced.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2020-11-17 17:18:18', '', 'Demo', 'demo', '', 4, '', '', '', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0gKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9uYW1pYmlhL2RlbW8tam9vbWxhLTMtY29tcG9uZW50L21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJUaGUgIyMjQ29tcG9uZW50X25hbWUjIyMiKQ0KDQojIyNERVNDUklQVElPTiMjIw0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10gKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXSAobWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10gKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZQ0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0gKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdIChodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0gKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQpbQ1VTVE9NQ09ERT1yZWFkTUVjb250cmlidXRvcnNd', '', '', 'Demo Component', '', '', 'Demo - advanced (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/demo_update_server.xml', 'https://www.vdm.io/', '', 'WNVXyWZW/ISgKhNT6u/2tJuir0CX7eM+kOhmLyGdh7g=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 33, '', 1, 8),
(7, 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, 1, '{}', 3, 1, 2, 3, 'Llewellyn van der Merwe', '', 'member.txt', '', '', 'Joomla Component Builder', '2.1.0', 'Copyright (C) 2015. All Rights Reserved', '2018-07-06 07:11:12', 1, '68wV5f9XVz3GHqOVYxj2taJbVlf8VAuydrJiTerSRcg=', 'v9x/NUXzZ3Sr0jujcwzSi9+vLlW825igzyKS8VKSa6Q=', '', 'g9p4Kk67OAYDRed7Ci4v96amxeN72DdzI6dVt/P+KyI=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', 'A_177', 2, '', 'A [Members manager](https://github.com/vdm-io/Joomla-Members-Manager) to use as a base for any kind of project that needs user integration. You can with much ease adapt it using the [JCB package](https://github.com/vdm-io/JCB-Community-Packages/raw/master/JCB_membersManager.zip).\r\n\r\nWatch this [tutorial](https://youtu.be/lkE0ZiSWufg) to see how.', 'joomla@vdm.io', '', 'https://vdm.bz/how-to-get-free-vdm-package-keys', 'kBdRTTE3bIx3bSYH77nanyPGPm4sktWK6zWiZjaXbb3bJ1at45ns37DLeH17pszTwEqgwZR2kfYWVsHgDbu5vA==', '', '40130d87-591c-4f8a-b0ba-62c65fa2ec5d', 'images/membermanager300.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Members-Manager', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9733;', '2021-03-08 03:19:07', 2, 'Members Manager', 'membersmanager', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9bWVtYmVybWFuYWdlckhlbHBlckJvdGhdDQoJLyoqDQoJICogQ2FuIGEgbWVtYmVyIGFjY2VzcyBhbm90aGVyIG1lbWJlcidzIGRhdGENCgkgKg0KCSAqIEBwYXJhbSAgIG1peCAgICAgICRtZW1iZXIgICAgVGhlIHRoZSBtZW1iZXIgYmVpbmcgYWNjZXNzZWQNCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGRvIGEgZHluYW1pYyBnZXQgb2YgbWVtYmVyIElEIHVzZSB0aGUgZm9sbG93aW5nIGFycmF5DQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSggdGFibGUsIHdoZXJlLCB3aGVyZVN0cmluZywgd2hhdCkNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkdHlwZXMgICAgIFRoZSB0eXBlIG9mIG1lbWJlciBiZWluZyBhY2Nlc3NlZA0KCSAqIEBwYXJhbSAgIG1peCAgICAgICR1c2VyICAgICAgVGhlIGFjdGl2ZSB1c2VyDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuICBib29sIHRydWUgb2YgY2FuIGFjY2Vzcw0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYW5BY2Nlc3NNZW1iZXIoJG1lbWJlciA9IG51bGwsICR0eXBlcyA9IG51bGwsICR1c2VyID0gbnVsbCwgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGhlcmUgeW91IGNhbiBkbyB5b3VyIG93biBjdXN0b20gdmFsaWRhdGlvbg0KCQlyZXR1cm4gdHJ1ZTsNCgl9', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoSk1NKQ0KWyFbR2l0SHViIHJlbGVhc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3JlbGVhc2UvbGxld2VsbHludmRtL0pvb21sYS1NZW1iZXJzLU1hbmFnZXIuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2xsZXdlbGx5bnZkbS9Kb29tbGEtTWVtYmVycy1NYW5hZ2VyL3JlbGVhc2VzKQ0KDQogIVtNZW1iZXJzIE1hbmFnZXIgaW1hZ2VdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sbGV3ZWxseW52ZG0vSm9vbWxhLU1lbWJlcnMtTWFuYWdlci9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlIE1lbWJlcnMgTWFuYWdlciIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KW0NVU1RPTUNPREU9cmVhZE1FY29udHJpYnV0b3JzXQ==', '', '', 'Members Manager', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'Members Manager (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/llewellynvdm/Joomla-Members-Manager/master/membersmanager_server.xml', 'https://www.joomlacomponentbuilder.com/', '', 'mwbQuahJB22SvquixI5MRucHYJFNOn2yLIUdF2q/9wU=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 243, '', 1, 49),
(8, '', 1, '', '', '', 1, '', '', 1, 1, '', 1, '', '', '', 1, '', 1, '', 1, '', '', '', '', 1, '{}', 1, 1, 2, 3, 'Llewellyn van der Merwe', '/var/www/sermondistributor_j3', 'SD.txt', '', '', 'Vast Development Method', '3.0.4', 'Copyright (C) 2015. All Rights Reserved', '2015-10-22 16:59:20', '', 'ZKUukroWwDG76wW55dhuJx1syv/siy0FTMf+luh7V7E=', 'uKEL3D/OAqh3fm21KTakHQMlMHJywXvPgRQmRSWb/28=', '', 'ntJ42FGYUvbPqWaIIj5uFAtmIrKbUk+LNtcmjE2ptuQ=', '', '', '', 1, '', 'Distributor is a highly advanced sermon distributor that runs on the [Joomla 3.x](http://www.joomla.org) framework. You can link a shared folder from Dropbox to the component and use Dropbox as your file host, not to mention the advanced auto builder that gives you the ability to simply load sermons to your website by only adding them to Dropbox.', 'joomla@vdm.io', 1, 'http://vdm.bz/get-sermon-distributor-key', 'dS20XbfUACMfeeeKiURfZJAuxLcOZ8HT6pQQzWhg0LsaP4JEn2B4/s9+PLBHV+QjgKJ6grZntqY+ltqzNgVAVQ==', '/var/git_', '11b41fbe-26e2-4257-a987-5b1278784539', 'images/vdm/SD500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Sermon-Distributor', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-03-07 13:39:29', 2, 'Sermon Distributor', 'sermondistributor', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSogCVRoZSBnbG9iYWwgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zID0gZmFsc2U7DQoNCgkvKioNCgkqIAlVcGRhdGUgV2F0Y2hlcg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHVwZGF0ZVdhdGNoID0gMTsNCg0KCS8qKg0KCSogCVVwZGF0ZSBXYXRjaGVyIChpZiBhcnJheSBpcyBvbmx5IG9uZSB2YWx1ZSkNCgkqKi8NCglwdWJsaWMgc3RhdGljICR1cGRhdGVXYXRjaF8gPSAwOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBsaW5rcyBhdXRvDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfYXV0bzsNCg0KCS8qKg0KCSogCVRoZSBleHRlcm5hbCBzb3VyY2UgbGlua3MgbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfbWFudWFsOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gYXV0bw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHNlbGVjdF9leHRlcm5hbHNvdXJjZV9hdXRvOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkc2VsZWN0X2V4dGVybmFsc291cmNlX21hbnVhbDsNCg0KCS8qKg0KCSogCVRoZSB1cGRhdGUgZXJyb3JzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXBkYXRlRXJyb3JzID0gYXJyYXkoKTsNCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQoJLyoqDQoJKiAJZ2V0IERvd25sb2FkIGxpbmtzIG9mIGEgc2VybW9uDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZExpbmtzKCYkc2VybW9uKQ0KCXsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkvLyBkZWNyeXB0IHRoZSB1cmxzDQoJCSRzYWZlID0gbmV3IEZPRkVuY3J5cHRBZXMoJGxvY2Fsa2V5LCAxMjgpOw0KCQkvLyBpbnRlcm5hbCBkb3dubG9hZCB1cmwNCgkJJGtleUNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzOw0KCQkka2V5Q291bnRlci0+c2VybW9uID0gJHNlcm1vbi0+aWQ7DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGtleUNvdW50ZXItPnByZWFjaGVyID0gJHNlcm1vbi0+cHJlYWNoZXI7DQoJCX0NCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGtleUNvdW50ZXItPnNlcmllcyA9ICRzZXJtb24tPnNlcmllczsNCgkJfQ0KCQkka2V5Q291bnRlclJBVyA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKGpzb25fZW5jb2RlKCRrZXlDb3VudGVyKSk7DQoJCSRrZXlDb3VudGVyID0gc2VsZjo6YmFzZTY0X3VybGVuY29kZSgka2V5Q291bnRlclJBVyk7DQoJCSR0b2tlbiA9IEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKTsNCgkJJGRvd25sb2FkVVJMID0gVXJpOjpyb290KCkuJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLmZpbGUma2V5PScuJGtleUNvdW50ZXIuJyZ0b2tlbj0nLiR0b2tlbjsNCgkJLy8gY2hlY2sgaWYgbG9jYWwgLmh0YWNjZXNzIHNob3VsZCBiZSBzZXQNCgkJJHNldEh0YWNjZXNzID0gZmFsc2U7DQoJCSRvbmNsaWNrID0gJyBvbmNsaWNrPSJzZXJtb25Db3VudGVyKFwnJy4ka2V5Q291bnRlclJBVy4nXCcsXCdGSUxFTkFNRVwnKTsiJzsNCgkJLy8gY2hlY2sgd2hhdCBzb3VyY2Ugb2Ygb3VyIGxpbmsNCgkJc3dpdGNoICgkc2VybW9uLT5zb3VyY2UpDQoJCXsNCgkJCWNhc2UgMToNCgkJCQkvLyBsb2NhbCBmaWxlIGdldCBsb2NhbCBmb2xkZXIgYW5kIGNoZWNrIGlmIG91dHNpZGUgcm9vdCAoaWYgbm90IHRoZW4gYWxsb3cgZGlyZWN0KQ0KCQkJCSRsb2NhbEZvbGRlciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsb2NhbGZvbGRlcicsIEpQQVRIX1JPT1QuJy9pbWFnZXMnKS4nLyc7DQoJCQkJLy8gc2hvdWxkIHdlIGFsbG93IGRpcmVjdCBkb3dubG9hZHMNCgkJCQkkYWxsb3dEaXJlY3QgPSBmYWxzZTsNCgkJCQlpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgc3RycG9zKCRsb2NhbEZvbGRlciwgSlBBVEhfUk9PVCkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGFsbG93RGlyZWN0ID0gdHJ1ZTsNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gVXJpOjpyb290KCkuc3RyX3JlcGxhY2UoSlBBVEhfUk9PVCwgJycsICRsb2NhbEZvbGRlcik7DQoJCQkJCS8vIGluc3VyZSBubyBkb3VibGUgLy8gaXMgaW4gdGhlIFVSTA0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlclVSTCk7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCX0NCgkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBwYXRoIG5hbWUNCgkJCQkkbG9jYWxGb2xkZXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlcik7DQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJzovJywgJzovLycsICRsb2NhbEZvbGRlcik7DQoJCQkJaWYgKHNlbGY6OmNoZWNrQXJyYXkoJHNlcm1vbi0+bG9jYWxfZmlsZXMpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCgkc2VybW9uLT5sb2NhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQl7DQoJCQkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUgfHwgISRhbGxvd0RpcmVjdCkNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIGZpbGUgbmFtZSB1c2UgdGhlIHNhbWUgbWV0aG9kIGFzIHRoZSBhdXRvDQoJCQkJCQkJJGZpbGVuYW1lID0gc2VsZjo6Z2V0RG93bmxvYWRGaWxlTmFtZSgkc2VybW9uLCRrZXksJ2xvY2FsJyk7DQoJCQkJCQkJJGxvY2tlZEZvbGRlclBhdGggPSAkc2FmZS0+ZW5jcnlwdFN0cmluZygkbG9jYWxGb2xkZXIuJGtleSk7DQoJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkb3dubG9hZFVSTC4nJmxpbms9Jy5zZWxmOjpiYXNlNjRfdXJsZW5jb2RlKCRsb2NrZWRGb2xkZXJQYXRoKS4nJmZpbGVuYW1lPScuJGZpbGVuYW1lOw0KCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmICgyID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJJGZpbGVuYW1lID0gJGtleTsNCgkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGxvY2FsRm9sZGVyVVJMLiRrZXk7DQoJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJJHNldEh0YWNjZXNzID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQkvLyBEcm9wYm94IGdldCBnbG9iYWwgZHJvcGJveCBzd2l0Y2ggDQoJCQkJJGFkZFRvQnV0dG9uID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2FkZF90b19idXR0b24nLCAwKTsNCgkJCQlpZiAoMSA9PSAkc2VybW9uLT5idWlsZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjpjaGVja0FycmF5KCRzZXJtb24tPm1hbnVhbF9maWxlcykpDQoJCQkJCXsNCgkJCQkJCS8vIG1hbnVhbCBkcm9wYm94DQoJCQkJCQlmb3JlYWNoKCRzZXJtb24tPm1hbnVhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdtYW51YWwnLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnZHJvcGJveF9tYW51YWwnKTsNCgkJCQkJCQkJLy8gc2hvdWxkIHdlIGVuY3J5cHQgc3RyaW5nIHRoaXMgc3RyaW5nDQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5IHx8IChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwsIHRydWUpKSAhPT0gJGRyb3BVUkwpKSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0DQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkcm9wVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGRyb3BVUkwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGxvY2sgdGhlIGluZm8ga2V5DQoJCQkJCQkJCSRpbmZvS2V5ID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZpbmZvPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkaW5mb0tleSkuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZHJvcFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRrZXkpOw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkcm9wVVJMOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRhZGRUb0J1dHRvbiAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5KSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0IChzbyBkb24ndCBkZWNyeXB0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsICRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRyb3Bib3hfYnV0dG9uc1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJz9kbD0xJywgJz9kbD0wJywgcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoJGRyb3BVUkwpLCAiXDAiKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+YnVpbGQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6Y2hlY2tBcnJheSgkc2VybW9uLT5hdXRvX3Nlcm1vbnMpKQ0KCQkJCQl7DQoJCQkJCQkvLyBhdXRvbWF0aWMgZHJvcGJveA0KCQkJCQkJZm9yZWFjaCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMgYXMgJGZpbGVuYW1lID0+ICRrZXkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBsaW5rDQoJCQkJCQkJJGRyb3BVUkwgPSBzZWxmOjpnZXRFeHRlcm5hbFNvdXJjZUxpbmsoJ2F1dG8nLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gc2hvdWxkIHdlIGVuY3J5cHQgc3RyaW5nIHRoaXMgc3RyaW5nDQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5IHx8IChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwsIHRydWUpKSAhPT0gJGRyb3BVUkwpKSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0DQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkcm9wVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGRyb3BVUkwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGxvY2sgdGhlIGluZm8ga2V5DQoJCQkJCQkJCSRpbmZvS2V5ID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZpbmZvPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkaW5mb0tleSkuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZHJvcFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkcm9wVVJMOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRhZGRUb0J1dHRvbiAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5KSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0IChzbyBkb24ndCBkZWNyeXB0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsICRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRyb3Bib3hfYnV0dG9uc1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJz9kbD0xJywgJz9kbD0wJywgcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoJGRyb3BVUkwpLCAiXDAiKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMzoNCgkJCQkvLyB1cmwgZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwkc2VybW9uLT51cmwsJ3VybCcpOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSkNCgkJCQl7DQoJCQkJCSRsb2NrZWRVUkwgPSAkc2FmZS0+ZW5jcnlwdFN0cmluZygkc2VybW9uLT51cmwpOw0KCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGRvd25sb2FkVVJMLicmbGluaz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGxvY2tlZFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUpDQoJCQkJew0KCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJHNlcm1vbi0+dXJsOw0KCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgkJLy8gcmVtb3ZlIHRoZSB2YWx1ZXMgbm8gbG9uZ2VyIG5lZWRlZA0KCQl1bnNldCgkc2VybW9uLT5sb2NhbF9maWxlcyk7DQoJCXVuc2V0KCRzZXJtb24tPm1hbnVhbF9maWxlcyk7DQoJCXVuc2V0KCRzZXJtb24tPmF1dG9fc2VybW9ucyk7DQoJCXVuc2V0KCRzZXJtb24tPnVybCk7DQoJCS8vIHNob3VsZCB3ZSBzZXQgdGhlIGxvY2FsIC5odGFjY2VzcyBmb3IgdGhlIGRvd25sb2FkIGZvbGRlcg0KCQlpZiAoJHNldEh0YWNjZXNzKQ0KCQl7DQoJCQkvLyBUT0RPIHdlIG1heSBuZWVkIHRvIGFkZCB0aGlzIGxhdHRlciB0byBlbmZvcmNlIGRvd25sb2FkIG9mIGZpbGVzLg0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmV4dFVwZGF0ZVZhbHVlcygkYXNBcnJheSA9IGZhbHNlKQ0KCXsNCgkJLy8gZmluZCB0aGUgbmV4dCB2YWx1ZQ0KCQkkbmV4dCA9IGZhbHNlOw0KCQkvLyBnZXQgYWN0dWFsIHVwZGF0ZSB2YWx1ZXMNCgkJJHVwZGF0ZXMgPSBzZWxmOjpnZXRFeHRlcm5hbExpc3RpbmdVcGRhdGVLZXlzKCk7DQoJCS8vIGdldCBsYXN0IHVwZGF0ZQ0KCQkkdXBkYXRlUGF0aCA9IHNlbGY6OmdldEZpbGVQYXRoKCdwYXRoJywgJ3VwZGF0ZWxhc3QnLCAndHh0JywgJ3ZEbScsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJaWYgKCgkbGFzdFVwZGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkdXBkYXRlUGF0aCkpICE9PSBGQUxTRSAmJiBzZWxmOjpjaGVja0FycmF5KCR1cGRhdGVzKSkNCgkJew0KCQkJLy8gaXMgaXQgdGltZSB0byB3YXRjaA0KCQkJaWYgKHNlbGY6OiR1cGRhdGVXYXRjaF8gPiAwKQ0KCQkJew0KCQkJCS8vIGluY3JlbWVudCB0aGUgd2F0Y2gsIGFzIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIG5ldyByb3VuZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaCsrOw0KCQkJCS8vIG5ldyByb3VuZCBoYXMgc3RhcnRlZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8gPSAwOw0KCQkJfQ0KCQkJLy8gbm93IGNoZWNrIHdoYXQgaXMgbmV4dA0KCQkJJGxhc3RLZXkgPSBhcnJheV9zZWFyY2goJGxhc3RVcGRhdGUsICR1cGRhdGVzKTsNCgkJCWlmICghaXNfbnVsbCgkbGFzdEtleSkpDQoJCQl7DQoJCQkJJG5leHRLZXkgPSAkbGFzdEtleSArIDE7DQoJCQkJaWYgKGlzc2V0KCR1cGRhdGVzWyRuZXh0S2V5XSkpDQoJCQkJew0KCQkJCQkkbmV4dCA9ICR1cGRhdGVzWyRuZXh0S2V5XTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbGFzdCBpdGVtIGluIGFycmF5LCBzbyBuZXh0IHJvdW5kIGFib3V0IHRvIHN0YXJ0DQoJCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8rKzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmVzdCBhbmQgc3RhcnQgd2l0aCB0aGUgZmlyc3Qga2V5DQoJCWlmICghJG5leHQgJiYgc2VsZjo6Y2hlY2tBcnJheSgkdXBkYXRlcykpDQoJCXsNCgkJCS8vIHNhdmUgdGhlIGZpcnN0IHNldA0KCQkJJHN0YXJ0ID0gcmVzZXQoJHVwZGF0ZXMpOw0KCQkJJG5leHQgPSAkc3RhcnQ7DQoJCX0NCgkJLy8gc2F2ZSB0byBmaWxlIGlmIG5leHQgaXMgZm91bmQNCgkJaWYgKCRuZXh0KQ0KCQl7DQoJCQlzZWxmOjp3cml0ZUZpbGUoJHVwZGF0ZVBhdGgsJG5leHQpOw0KCQkJLy8gY29udmVydCB0byBhcnJheSBvZiBuZWVkZWQNCgkJCWlmICgkYXNBcnJheSkNCgkJCXsNCgkJCQlpZiAoc3RycG9zKCRuZXh0LCAnLCcpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRuZXh0ID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRuZXh0KSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRuZXh0Ow0KCX0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2F2ZUZpbGUoJGRhdGEsICRwYXRoX2ZpbGVuYW1lKQ0KCXsNCgkJcmV0dXJuIHNlbGY6OndyaXRlRmlsZSgkcGF0aF9maWxlbmFtZSwgJGRhdGEpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxMaXN0aW5nVXBkYXRlS2V5cygkaWQgPSBudWxsLCAkdXBkYXRlTWV0aG9kID0gMiwgJHJldHVyblR5cGUgPSAxKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJJGRiID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCdzaGFyZWR1cmwnLCdmb2xkZXInLCdwZXJtaXNzaW9udHlwZScsJ2Ryb3Bib3hvcHRpb25zJywnYnVpbGQnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9leHRlcm5hbF9zb3VyY2UnKSk7DQoJCWlmICgkdXBkYXRlTWV0aG9kICYmIGlzX251bWVyaWMoJHVwZGF0ZU1ldGhvZCkpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3VwZGF0ZV9tZXRob2QnKSAuICcgPSAnLiAoaW50KSAkdXBkYXRlTWV0aG9kKTsNCgkJfQ0KCQlpZiAoJGlkICYmIGlzX251bWVyaWMoJGlkKSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQl9DQoJCWVsc2VpZiAoJGlkICYmIHNlbGY6OmNoZWNrQXJyYXkoJGlkKSkNCgkJew0KCQkJJGlkcyA9IGltcGxvZGUoJywnLCBhcnJheV9tYXAoICdpbnR2YWwnLCAkaWQpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnIElOICAoJyAuICRpZHMgLiAnKScpOw0KCQl9DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkcmVzdWx0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCSR1cGRhdGVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRyZXN1bHRzIGFzICRyZXN1bHQpDQoJCQl7DQoJCQkJaWYgKCdmdWxsJyA9PSAkcmVzdWx0LT5wZXJtaXNzaW9udHlwZSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgZm9sZGVyIG9yIHVybHMNCgkJCQkJc3dpdGNoICgkcmVzdWx0LT5kcm9wYm94b3B0aW9ucykNCgkJCQkJew0KCQkJCQkJY2FzZSAxOiAvLyBzaGFyZWR1cmwNCgkJCQkJCQlpZiAoc2VsZjo6Y2hlY2tKc29uKCRyZXN1bHQtPnNoYXJlZHVybCkpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFyZ2V0cyA9IGpzb25fZGVjb2RlKCRyZXN1bHQtPnNoYXJlZHVybCktPnRzaGFyZWR1cmw7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlIDI6IC8vIGZvbGRlcnMNCgkJCQkJCQlpZiAoc2VsZjo6Y2hlY2tKc29uKCRyZXN1bHQtPmZvbGRlcikpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFyZ2V0cyA9IGpzb25fZGVjb2RlKCRyZXN1bHQtPmZvbGRlciktPnRmb2xkZXI7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJaWYgKHNlbGY6OmNoZWNrQXJyYXkoJHRhcmdldHMpKQ0KCQkJCQl7DQoJCQkJCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCQkJCXsNCgkJCQkJCQkkbnIgPSAka2V5ICsgMTsNCgkJCQkJCQkvLyBpZCwgdGFyZ2V0LCB0eXBlDQoJCQkJCQkJaWYgKDEgPT0gJHJldHVyblR5cGUpDQoJCQkJCQkJew0KCQkJCQkJCQkkdXBkYXRlc1tdID0gJHJlc3VsdC0+aWQgLiAnLCAnLiAkbnIgLiAnLCAnIC4gJHJlc3VsdC0+YnVpbGQ7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UgLy8gb25seSByZXR1cm4gdGhlIHRhcmdldHMNCgkJCQkJCQl7DQoJCQkJCQkJCSR1cGRhdGVzW10gPSAkbnI7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIGlkLCB0YXJnZXQsIHR5cGUNCgkJCQkJaWYgKDEgPT0gJHJldHVyblR5cGUpDQoJCQkJCXsNCgkJCQkJCSR1cGRhdGVzW10gPSAkcmVzdWx0LT5pZCAuICcsIDEsICcuICRyZXN1bHQtPmJ1aWxkOw0KCQkJCQl9DQoJCQkJCWVsc2UgLy8gb25seSByZXR1cm4gdGhlIHRhcmdldHMNCgkJCQkJew0KCQkJCQkJJHVwZGF0ZXNbXSA9IDE7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJHVwZGF0ZXM7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCR0eXBlLCAkcmV0dXJuID0gNywgJGdldCA9IGZhbHNlLCAkdGFyZ2V0ID0gJ2xpbmtzJykNCgl7DQoJCS8vIG1ha2Ugc3VyZSBhbGwgZGVmYXVsdHMgYXJlIHNldA0KCQkkZm91bmQgPSBzZWxmOjpjaGVja0V4dGVybmFsU291cmNlTG9jYWxMaXN0aW5nKCR0eXBlLCAkdGFyZ2V0KTsNCgkJaWYgKCRmb3VuZCkNCgkJew0KCQkJc3dpdGNoKCRyZXR1cm4pDQoJCQl7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyByZXR1cm4gYSBsaW5rDQoJCQkJCWlmIChpc3NldChzZWxmOjokeyR0YXJnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfVskZ2V0XSkpDQoJCQkJCXsNCgkJCQkJCXJldHVybiBzZWxmOjokeyR0YXJnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfVskZ2V0XTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlIDI6DQoJCQkJCS8vIHJldHVybiBhbGwgbGlua3MNCgkJCQkJcmV0dXJuIHNlbGY6OiR7JHRhcmdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9Ow0KCQkJCQlicmVhazsNCgkJCQlkZWZhdWx0IDoNCgkJCQkJLy8ganVzdCBjb25maXJtIHRoYXQgaXQgaXMgc2V0DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3VudERvd25sb2FkKCRjb3VudGVyLCAkZmlsZW5hbWUpDQoJew0KCQkvLyBHZXQgbG9jYWwga2V5DQoJCSRsb2NhbGtleSA9IHNlbGY6OmdldExvY2FsS2V5KCk7DQoJCSRvcGVuZXIgPSBuZXcgRk9GRW5jcnlwdEFlcygkbG9jYWxrZXksIDEyOCk7DQoJCSRjb3VudGVyID0ganNvbl9kZWNvZGUocnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygkY291bnRlciksICJcMCIpKTsNCgkJaWYgKHNlbGY6OmNoZWNrT2JqZWN0KCRjb3VudGVyKSkNCgkJew0KCQkJJGNvdW50ZXItPmZpbGVuYW1lID0gJGZpbGVuYW1lOw0KCQkJLy8gc2V0IHRoZSBkYXRlIG9iamVjdA0KCQkJJGRhdGUgPSBKb29tbGFfX18zOTQwMzA2Ml84NGZiXzQ2ZTBfYmFjNF8wMDIzZjc2NmU4MjdfX19Qb3dlcjo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXREYm8oKTsNCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCdjb3VudGVyJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3N0YXRpc3RpYycpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Nlcm1vbicpIC4gJyA9ICcuIChpbnQpICRjb3VudGVyLT5zZXJtb24pOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZmlsZW5hbWUnKSAuICcgPSAnLiAkZGItPnF1b3RlKCRjb3VudGVyLT5maWxlbmFtZSkpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJHN0YXRpc3RpYyA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJCS8vIGFscmVhZHkgaGFzIGFuIGVudHJ5DQoJCQkJJHN0YXRpc3RpYy0+Y291bnRlcisrOw0KCQkJCSRzdGF0aXN0aWMtPm1vZGlmaWVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJLy8gdXBkYXRlIHRoZSBlbnRyeQ0KCQkJCXJldHVybiAkZGItPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX3N0YXRpc3RpYycsICRzdGF0aXN0aWMsICdpZCcpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRjb3VudGVyLT5jb3VudGVyID0gMTsNCgkJCQkkY291bnRlci0+cHVibGlzaGVkID0gMTsNCgkJCQkkY291bnRlci0+Y3JlYXRlZCA9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRjb3VudGVyLT5hY2Nlc3MgPSAxOw0KCQkJCSRjb3VudGVyLT52ZXJzaW9uID0gMTsNCgkJCQkvLyBzZXQgYSBuZXcgZW50cnkNCgkJCQkkZG9uZSA9ICRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJGNvdW50ZXIpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCSRuZXdJZCA9ICAkZGItPmluc2VydGlkKCk7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCQlyZXR1cm4gc2VsZjo6c2V0QXNzZXQoJG5ld0lkLCdzdGF0aXN0aWMnKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUluZm8oJGtleSkNCgl7DQoJCWlmIChzZWxmOjpjaGVja1N0cmluZygka2V5KSAmJiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRrZXksIHRydWUpKSA9PT0gJGtleSkpDQoJCXsNCgkJCS8vIEdldCBsb2NhbCBrZXkNCgkJCSRsb2NhbGtleSA9IHNlbGY6OmdldExvY2FsS2V5KCk7DQoJCQkkb3BlbmVyID0gbmV3IEZPRkVuY3J5cHRBZXMoJGxvY2Fsa2V5LCAxMjgpOw0KCQkJJGtleSA9IHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoJGtleSksICJcMCIpOw0KCQkJLy8gbG9hZCB0aGUgbGlua3MgZnJvbSB0aGUgZGF0YWJhc2UNCgkJCSRkYiA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoJ3NpemUnKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2xvY2FsX2xpc3RpbmcnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdrZXknKSAuICcgPSAnLiAkZGItPnF1b3RlKCRrZXkpKTsNCiAJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkaW5mbyA9IGFycmF5KCk7DQoJCQkJLy8gZ2V0IHRoZSBzaXplIG9mIHRoZSBmaWxlDQoJCQkJJGluZm9bJ2ZpbGVzaXplJ10gPSAkZGItPmxvYWRSZXN1bHQoKTsNCgkJCQkvLyBnZXQgdGhlIG1pbWUgdHlwZQ0KCQkJCSRpbmZvWyd0eXBlJ10gPSBTdXBlcl9fX2YxMWRjNzkwXzcxM2VfNDcwNl85YTg1X2EzMThlZDNhZDU2ZV9fX1Bvd2VyOjptaW1lVHlwZSgka2V5KTsNCgkJCQkvLyByZXR1cm4gaW5mbw0KCQkJCXJldHVybiAkaW5mbzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZEZpbGVOYW1lKCYkc2VybW9uLCAkZmlsZSwgJHR5cGUpDQoJew0KCQkvLyBmaXJzdCBnZXQgZmlsZSBuYW1lIGFuZCBmaWxlIHR5cGUNCgkJJGZpbGUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRmaWxlKTsNCgkJJGZpbGVUeXBlID0gcGF0aGluZm8oJGZpbGUsIFBBVEhJTkZPX0VYVEVOU0lPTik7DQoJCWlmICgkZmlsZVR5cGUpDQoJCXsNCgkJCSRmaWxlID0gc3RyX3JlcGxhY2UoJy4nLiRmaWxlVHlwZSwgJycsICRmaWxlKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRmaWxlVHlwZSA9ICdlcnJvcic7DQoJCX0NCgkJLy8gbm93IGJ1aWxkIGRvd25sb2FkIG5hbWUNCgkJJGRvd25sb2FkTmFtZSA9IGFycmF5KCk7DQoJCS8vIGJ1aWxkIHRoZSBEb3dubG9hZCBGaWxlIE5hbWUgLSBmaXJzdCBhZGQgdGhlIHByZWFjaGVyIG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gc2VsZjo6c2FmZVN0cmluZygkc2VybW9uLT5wcmVhY2hlcl9uYW1lLCdVJyk7DQoJCX0NCgkJLy8gYWRkIHRoZSBzZXJpZXMgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gc2VsZjo6c2FmZVN0cmluZygkc2VybW9uLT5zZXJpZXNfbmFtZSwnRicpOw0KCQl9DQoJCS8vIGFkZCB0aGUgY2F0ZWdvcnkgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPmNhdGlkICYmIHNlbGY6OmNoZWNrU3RyaW5nKCRzZXJtb24tPmNhdGVnb3J5KSkNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gc2VsZjo6c2FmZVN0cmluZygkc2VybW9uLT5jYXRlZ29yeSwgJ0YnKTsNCgkJfQ0KCQlpZiAoJ2Ryb3Bib3hfbWFudWFsJyA9PSAkdHlwZSB8fCAnbG9jYWwnID09ICR0eXBlKQ0KCQl7DQoJCQkvLyBhZGQgdGhlIG1haW4gZmlsZSBuYW1lDQoJCQkkZG93bmxvYWROYW1lW10gPSBzZWxmOjpzYWZlU3RyaW5nKCRzZXJtb24tPm5hbWUsJ0YnKTsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IHNlbGY6OnNhZmVTdHJpbmcoJGZpbGUsJ0YnKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IHNlbGY6OnNhZmVTdHJpbmcoJHNlcm1vbi0+bmFtZSwnRicpOw0KCQkJaWYgKCdlcnJvcicgPT0gJGZpbGVUeXBlIHx8IHN0cnBvcygnPycsICRmaWxlVHlwZSkgIT09IGZhbHNlIHx8IHN0cnBvcygnJicsICRmaWxlVHlwZSkgIT09IGZhbHNlICkNCgkJCXsNCgkJCQkkZmlsZVR5cGUgPSAnbXAzJzsgLy8gVE9ETyB3ZSBkb24ndCBrbm93IHRoZSB1cmwgZmlsZXR5cGUgKHNldHRpbmcgdG8gbXAzIGJ1dCB0aGlzIGNvdWxkIGJlIHdyb25nKQ0KCQkJfQ0KCQl9DQoJCS8vIG5vdyBidWlsZCB0aGUgZG93bmxvYWQgZmlsZSBuYW1lDQoJCXJldHVybiBpbXBsb2RlKCdfXycsICRkb3dubG9hZE5hbWUpLicuJy4kZmlsZVR5cGU7DQoJfQ0KDQoJLyoqDQoJKiAJY2hlY2sgRXh0ZXJuYWwgU291cmNlIExvY2FsIExpc3RpbmcgKGRvIHdlIGhhdmUgdGhlIGZpbGVzKQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tFeHRlcm5hbFNvdXJjZUxvY2FsTGlzdGluZygkdHlwZSwgJGdldCA9ICdsaW5rcycpDQoJew0KCQkvLyBnZXQgdGhlIGxvY2FsIGxpbmtzDQoJCWlmIChpc3NldChzZWxmOjokeyRnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfSkgJiYgc2VsZjo6Y2hlY2tBcnJheShzZWxmOjokeyRnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfSkpDQoJCXsNCgkJCS8vIHJldHVybiB0cnVlIHdlIGhhdmUgbGlua3MgbG9hZGVkDQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0YXJnZXQgPSBhcnJheSgnbGlua3MnID0+ICd1cmwnLCAnc2VsZWN0JyA9PiAnbmFtZScpOw0KCQkJJGJ1aWxkID0gYXJyYXkoICdhdXRvJyA9PiAyLCAnbWFudWFsJyA9PiAxKTsNCgkJCWlmIChpc3NldCgkYnVpbGRbJHR5cGVdKSkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBsaW5rcyBmcm9tIHRoZSBkYXRhYmFzZQ0KCQkJCSRkYiA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXREYm8oKTsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2tleScsICR0YXJnZXRbJGdldF0pKSk7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbG9jYWxfbGlzdGluZycpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdidWlsZCcpIC4gJyA9ICcuIChpbnQpICRidWlsZFskdHlwZV0pOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsgLy8gVE9ETyB3ZSBjYW4gbm93IGxpbWl0IHRoZSBsaW5rcyB0byBhY2Nlc3MgZ3JvdXBzDQogCQkJCS8vIFJlc2V0IHRoZSBxdWVyeSB1c2luZyBvdXIgbmV3bHkgcG9wdWxhdGVkIHF1ZXJ5IG9iamVjdC4NCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHskZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX0gPSAkZGItPmxvYWRBc3NvY0xpc3QoJ2tleScsICR0YXJnZXRbJGdldF0pOw0KCQkJCQkvLyByZXR1cm4gdHJ1ZSB3ZSBoYXZlIGxpbmtzIGxvYWRlZA0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWdldCB0aGUgbG9jYWxrZXkNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRsb2NhbGtleSA9IGFycmF5KCk7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2NhbEtleSgkdHlwZSA9ICdiYXNpY19rZXknKQ0KCXsNCgkJaWYgKCFpc3NldChzZWxmOjokbG9jYWxrZXlbJHR5cGVdKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBtYWluIGtleQ0KCQkJc2VsZjo6JGxvY2Fsa2V5WyR0eXBlXSA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCR0eXBlLCAnbG9jYWxLZXkzNGZkV0VrbCcpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9jYWxrZXlbJHR5cGVdOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlRXh0ZXJuYWxTb3VyY2UoJGlkLCAkdGFyZ2V0ID0gMCwgJHR5cGUgPSBmYWxzZSwgJGZvcmNlID0gZmFsc2UsICRzbGV1dGVsID0gbnVsbCkNCgl7DQoJCSRzb3VyY2UgPSBzZWxmOjpnZXRWYXIoJ2V4dGVybmFsX3NvdXJjZScsIChpbnQpICRpZCwgJ2lkJywgJ2V4dGVybmFsc291cmNlcycpOw0KCQlpZiAoMSA9PSAkc291cmNlKSAvLyBEcm9wYm94IGlzIHRoZSBzb3VyY2UNCgkJew0KCQkJLy8gbG9hZCB0aGUgZmlsZQ0KCQkJSkxvYWRlcjo6aW1wb3J0KCdkcm9wYm94dXBkYXRlcicsIEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycycpOw0KCQkJLy8gdXBkYXRlIHR5cGVzDQoJCQkkdHlwZXMgPSBhcnJheSgnbWFudWFsJywnYXV0bycpOw0KCQkJLy8gb2theSBub3cgdXBkYXRlIHRoaXMgdHlwZQ0KCQkJaWYgKHNlbGY6OmNoZWNrU3RyaW5nKCR0eXBlKSAmJiBpbl9hcnJheSgkdHlwZSwkdHlwZXMpKQ0KCQkJew0KCQkJCSRkcm9wYm94ID0gbmV3IERyb3Bib3h1cGRhdGVyKCk7DQoJCQkJaWYgKCRkcm9wYm94LT51cGRhdGUoJGlkLCAkdGFyZ2V0LCAkdHlwZSwgJGZvcmNlLCAkc2xldXRlbCkpDQoJCQkJew0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQkJc2VsZjo6c2V0VXBkYXRlRXJyb3IoJGlkLCAkZHJvcGJveC0+Z2V0RXJyb3JzKCkpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KCQlzZWxmOjpzZXRVcGRhdGVFcnJvcigkaWQsIGFycmF5KEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdUaGUgZXh0ZXJuYWwgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZC4nKSkpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTb3VyY2VTdGF0dXMoJGlkKQ0KCXsNCgkJLy8gZmlzdCBnZXQgZXJyb3JzIGlmIGFueSBpcyBmb3VuZA0KCQkkZXJyb3JzID0gYXJyYXkoKTsNCgkJaWYgKCR0YXJnZXRzID0gc2VsZjo6Z2V0RXh0ZXJuYWxMaXN0aW5nVXBkYXRlS2V5cygkaWQsIG51bGwsIDEpKQ0KCQl7DQoJCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAkdGFyZ2V0KQ0KCQkJew0KCQkJCSRrZXkgPSBwcmVnX3JlcGxhY2UoJy9bICxdKy8nLCAnJywgdHJpbSgkdGFyZ2V0KSk7DQoJCQkJaWYgKCRlcnJvciA9IHNlbGY6OmdldFVwZGF0ZUVycm9yKDAsICRrZXkpKQ0KCQkJCXsNCgkJCQkJJGVycm9yc1tdID0gJGVycm9yOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBjaGVjayB3aGVuIHdhcyB0aGUgbGFzdCB1cGRhdGUNCgkJJHVwZGF0ZUluZm8gPSBzZWxmOjp1cGRhdGVJbmZvKCRpZCk7DQoJCWlmICghJHVwZGF0ZUluZm8pDQoJCXsNCgkJCSRlcnJvcnNbXSA9IEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdUaGlzIHNvdXJjZSBoYXMgbm8gbG9jYWwgbGlzdGluZyBzZXQuJyk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIHJldHVybiBzdHJpbmcNCgkJaWYgKGlzc2V0KCR1cGRhdGVJbmZvWydsYXN0J10pIHx8IHNlbGY6OmNoZWNrQXJyYXkoJGVycm9ycykpDQoJCXsNCgkJCSRib2R5ID0gYXJyYXkoKTsNCgkJCS8vIGdyZWF0IHdlIGhhdmUgc291cmNlIHN0YXR1cw0KCQkJaWYgKGlzc2V0KCR1cGRhdGVJbmZvWydsYXN0J10pKQ0KCQkJew0KCQkJCSRib2R5W10gPSAnPGgzPicuIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdMaXN0aW5nIEluZm8nKSAuICc8L2gzPic7DQoJCQkJJGJvZHlbXSA9ICc8cD48Yj4nLiBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnTGFzdCBVcGRhdGUnKSAuICc6PC9iPiA8ZW0+Jy4kdXBkYXRlSW5mb1snbGFzdCddOw0KCQkJCSRib2R5W10gPSAnPC9lbT48YnIgLz48Yj4nLiBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnTnVtYmVyIG9mIEZpbGVzIExpc3RlZCcpIC4gJzo8L2I+IDxlbT4nLiR1cGRhdGVJbmZvWydxdHknXTsNCgkJCQkkYm9keVtdID0gJzwvZW0+PC9wPic7DQoJCQl9DQoJCQkvLyBub3cgc2V0IGFueSBlcnJvcnMgZm91bmQNCgkJCWlmIChzZWxmOjpjaGVja0FycmF5KCRlcnJvcnMpKQ0KCQkJew0KCQkJCSRib2R5W10gPSAnPGgzPicuIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdOb3RpY2UhJykgLiAnPC9oMz4nOw0KCQkJCSRib2R5W10gPSBpbXBsb2RlKCcnLCAkZXJyb3JzKTsNCgkJCX0NCgkJCXJldHVybiAnPGEgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLXN1Y2Nlc3MiIGhyZWY9IiNzb3VyY2Utc3RhdHVzJy4kaWQuJyIgZGF0YS10b2dnbGU9Im1vZGFsIj4nLkpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdWaWV3IFVwZGF0ZSBTdGF0dXMnKS4nPC9hPicgDQoJCQkJLiBKb29tbGFfX18zNDY5MGM3NV8xMDkwXzQ3ZWJfOGMwNl83MjI4ZGM3ZWVkZDZfX19Qb3dlcjo6XygnYm9vdHN0cmFwLnJlbmRlck1vZGFsJywgJ3NvdXJjZS1zdGF0dXMnLiRpZCwgYXJyYXkoJ3RpdGxlJyA9PiBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnU291cmNlIFN0YXR1cyBSZXBvcnQuJykpLCBpbXBsb2RlKCcnLCAkYm9keSkpOw0KCQl9DQogCQkvLyBubyBzdGF0dXMgZm91bmQNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlSW5mbygkaWQpDQoJew0KCQkkZGIgPSBKb29tbGFfX18zOTQwMzA2Ml84NGZiXzQ2ZTBfYmFjNF8wMDIzZjc2NmU4MjdfX19Qb3dlcjo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmNyZWF0ZWQnLCdhLm1vZGlmaWVkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbG9jYWxfbGlzdGluZycsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmV4dGVybmFsX3NvdXJjZScpIC4gJyA9ICcgLiAoaW50KSAkaWQpOw0KIAkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJHF0eSA9ICRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkZGF0YSA9ICRkYi0+bG9hZFJvd0xpc3QoKTsNCgkJCSRsYXN0ID0gMDsNCgkJCWZvcmVhY2ggKCRkYXRhIGFzICRkYXRlcykNCgkJCXsNCgkJCQlmb3JlYWNoICgkZGF0ZXMgYXMgJGRhdGUpDQoJCQkJew0KCQkJCQkkdGltZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCQkJCWlmICgkdGltZSA+ICRsYXN0KQ0KCQkJCQl7DQoJCQkJCQkkbGFzdCA9ICR0aW1lOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJJGluZm9bJ3F0eSddID0gKGludCkgJHF0eTsNCgkJCSRpbmZvWydsYXN0J10gPSBzZWxmOjpmYW5jeURhdGUoJGxhc3QpOw0KCQkJcmV0dXJuICRpbmZvOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwZGF0ZUVycm9yKCRpZCwgJGZpbGVLZXkgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHVwZGF0ZSBlcnJvciBmcm9tIGZpbGUNCgkJaWYgKCRmaWxlS2V5KQ0KCQl7DQoJCQkkZmlsZV9wYXRoID0gc2VsZjo6Z2V0RmlsZVBhdGgoJ3BhdGgnLCAndXBkYXRlZXJyb3InLCAndHh0JywgJGZpbGVLZXksIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJCS8vIGNoZWNrIGlmIGl0IGlzIHNldA0KCQkJaWYgKCgkdGV4dCA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZV9wYXRoKSkgIT09IEZBTFNFKQ0KCQkJew0KCQkJCS8vIG5vIGVycm9yIG9uIHN1Y2Nlc3MNCgkJCQlpZiAoJ3N1Y2Nlc3MnICE9ICR0ZXh0KQ0KCQkJCXsNCgkJCQkJcmV0dXJuICR0ZXh0Ow0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQllbHNlaWYgKGlzc2V0KHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkgJiYgc2VsZjo6Y2hlY2tBcnJheShzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pKQ0KCQl7DQoJCQlyZXR1cm4gJzx1bD48bGk+Jy5pbXBsb2RlKCc8L2xpPjxsaT4nLCBzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pLic8L2xpPjwvdWw+JzsNCgkJfQ0KCQlyZXR1cm4gSm9vbWxhX19fYmE2MzI2ZWZfY2I3OV80MzQ4XzgwZjRfYWIwODYwODJlM2M1X19fUG93ZXI6Ol8oJ1Vua25vd24gZXJyb3IgaGFzIG9jY3VycmVkLicpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VXBkYXRlRXJyb3IoJGlkLCAkZXJyb3JBcnJheSkNCgl7DQoJCWlmIChzZWxmOjpjaGVja0FycmF5KCRlcnJvckFycmF5KSAmJiAkaWQgPiAwKQ0KCQl7DQoJCQlmb3JlYWNoICgkZXJyb3JBcnJheSBhcyAkZXJyb3IpDQoJCQl7DQoJCQkJaWYgKCFpc3NldChzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHVwZGF0ZUVycm9yc1skaWRdID0gYXJyYXkoKTsNCgkJCQl9DQoJCQkJc2VsZjo6JHVwZGF0ZUVycm9yc1skaWRdW10gPSAkZXJyb3I7DQoJCQl9DQoJCX0NCgl9DQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9Y3VybFdvcmtlckhlbHBlcl0NCltDVVNUT01DT0RFPWxvY2tlcl0=', '', '', '', 'CQkJLy8gY2hlY2sgaWYgYW55IGxpbmtzIHdlcmUgZm91bmQNCgkJCWlmICgoaXNzZXQoJHRoaXMtPnVwZGF0ZVRhcmdldHNVKSAmJiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmNoZWNrQXJyYXkoJHRoaXMtPnVwZGF0ZVRhcmdldHNVKSkgfHwgKGlzc2V0KCR0aGlzLT51cGRhdGVUYXJnZXRzRikgJiYgW1tbQ29tcG9uZW50XV1dSGVscGVyOjpjaGVja0FycmF5KCR0aGlzLT51cGRhdGVUYXJnZXRzRikpKQ0KCQkJew0KCQkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkJJGRiID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldERibygpOw0KDQoJCQkJLy8gZ2V0IHRoZSBmaWxlIHR5cGVzDQoJCQkJJGRyb3Bib3hfZmlsZXR5cGVzID0gJHRoaXMtPmNvbVBhcmFtcy0+Z2V0KCJkcm9wYm94X2ZpbGV0eXBlcyIsIG51bGwpOw0KDQoJCQkJLy8gc29tZSBkZWZhdWx0cw0KCQkJCSR1c2VyID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldFVzZXIoKTsNCgkJCQkkdG9kYXlEYXRlID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldERhdGUoKS0+dG9TcWwoKTsNCg0KCQkJCS8vIG5vdyBzdG9yZSB0aGUgb2xkIGRhdGEgdG8gdGhlIG5ldyBhcmVhDQoJCQkJaWYgKGlzc2V0KCR0aGlzLT51cGRhdGVUYXJnZXRzVSkgJiZbW1tDb21wb25lbnRdXV1IZWxwZXI6OmNoZWNrQXJyYXkoJHRoaXMtPnVwZGF0ZVRhcmdldHNVKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCR0aGlzLT51cGRhdGVUYXJnZXRzVSBhcyAkdHlwZSA9PiAkdXJscykNCgkJCQkJew0KCQkJCQkJJGRlc2NyaXB0aW9uID0gJ0NvbmZpZyAnLiAkdHlwZSAuICcgdXJsICc7DQoJCQkJCQkkYnVpbGRPcHRpb24gPSAxOw0KCQkJCQkJaWYgKCdhdXRvJyA9PSAkdHlwZSkNCgkJCQkJCXsNCgkJCQkJCQkkYnVpbGRPcHRpb24gPSAyOw0KCQkJCQkJfQ0KCQkJCQkJJHVybHMgPSAnIicuaW1wbG9kZSgnIiwgIicsICR1cmxzKS4nIic7DQoJCQkJCQkkZGF0YSA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkJCWlmIChbW1tDb21wb25lbnRdXV1IZWxwZXI6OmNoZWNrQXJyYXkoJGRyb3Bib3hfZmlsZXR5cGVzKSkNCgkJCQkJCXsNCgkJCQkJCQkkZGF0YS0+ZmlsZXR5cGVzID0ganNvbl9lbmNvZGUoJGRyb3Bib3hfZmlsZXR5cGVzKTsNCgkJCQkJCX0NCgkJCQkJCSRkYXRhLT5leHRlcm5hbHNvdXJjZXMgPSAxOw0KCQkJCQkJJGRhdGEtPmJ1aWxkID0gJGJ1aWxkT3B0aW9uOw0KCQkJCQkJJGRhdGEtPmRlc2NyaXB0aW9uID0gJGRlc2NyaXB0aW9uOw0KCQkJCQkJJGRhdGEtPnVwZGF0ZV9tZXRob2QgPSAxOw0KCQkJCQkJJGRhdGEtPnVwZGF0ZV90aW1lciA9IDA7DQoJCQkJCQkkZGF0YS0+cGVybWlzc2lvbnR5cGUgPSAnZnVsbCc7DQoJCQkJCQkkZGF0YS0+Y3JlYXRlZCA9ICR0b2RheURhdGU7DQoJCQkJCQkkZGF0YS0+Y3JlYXRlZF9ieSA9ICR1c2VyLT5pZDsNCgkJCQkJCSRkYXRhLT5zaGFyZWR1cmwgPSAneyJ0c2hhcmVkdXJsIjpbJy4kdXJscy4nXX0nOw0KCQkJCQkJLy8gYWRkIHRvIGRhdGFiYXNlDQoJCQkJCQlpZiAoJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9leHRlcm5hbF9zb3VyY2UnLCAkZGF0YSkpDQoJCQkJCQl7DQoJCQkJCQkJJGFJZCA9ICRkYi0+aW5zZXJ0aWQoKTsNCgkJCQkJCQkvLyBtYWtlIHN1cmUgdGhlIGFjY2VzcyBvZiBhc3NldCBpcyBzZXQNCgkJCQkJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6OnNldEFzc2V0KCRhSWQsJ2V4dGVybmFsX3NvdXJjZScpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChpc3NldCgkdGhpcy0+dXBkYXRlVGFyZ2V0c0YpICYmIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tBcnJheSgkdGhpcy0+dXBkYXRlVGFyZ2V0c0YpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJHRoaXMtPnVwZGF0ZVRhcmdldHNGIGFzICR0eXBlID0+ICRmb2xkZXIpDQoJCQkJCXsNCgkJCQkJCSRkZXNjcmlwdGlvbiA9ICdDb25maWcgJy4gJHR5cGUgLiAnIGZvbGRlciAnOw0KCQkJCQkJJGJ1aWxkT3B0aW9uID0gMTsNCgkJCQkJCWlmICgnYXV0bycgPT0gJHR5cGUpDQoJCQkJCQl7DQoJCQkJCQkJJGJ1aWxkT3B0aW9uID0gMjsNCgkJCQkJCX0NCgkJCQkJCSRmb2xkZXIgPSAnIicuaW1wbG9kZSgnIiwgIicsICRmb2xkZXIpLiciJzsNCgkJCQkJCSRkYXRhID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJCQkJaWYgKFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tBcnJheSgkZHJvcGJveF9maWxldHlwZXMpKQ0KCQkJCQkJew0KCQkJCQkJCSRkYXRhLT5maWxldHlwZXMgPSBqc29uX2VuY29kZSgkZHJvcGJveF9maWxldHlwZXMpOw0KCQkJCQkJfQ0KCQkJCQkJJGRhdGEtPmV4dGVybmFsc291cmNlcyA9IDE7DQoJCQkJCQkkZGF0YS0+YnVpbGQgPSAkYnVpbGRPcHRpb247DQoJCQkJCQkkZGF0YS0+ZGVzY3JpcHRpb24gPSAkZGVzY3JpcHRpb247DQoJCQkJCQkkZGF0YS0+dXBkYXRlX21ldGhvZCA9IDE7DQoJCQkJCQkkZGF0YS0+dXBkYXRlX3RpbWVyID0gMDsNCgkJCQkJCSRkYXRhLT5wZXJtaXNzaW9udHlwZSA9ICdmdWxsJzsNCgkJCQkJCSRkYXRhLT5jcmVhdGVkID0gJHRvZGF5RGF0ZTsNCgkJCQkJCSRkYXRhLT5jcmVhdGVkX2J5ID0gJHVzZXItPmlkOw0KCQkJCQkJJGRhdGEtPmZvbGRlciA9ICd7InRmb2xkZXIiOlsnLiRmb2xkZXIuJ119JzsNCgkJCQkJCS8vIGFkZCB0byBkYXRhYmFzZQ0KCQkJCQkJaWYgKCRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fZXh0ZXJuYWxfc291cmNlJywgJGRhdGEpKQ0KCQkJCQkJew0KCQkJCQkJCSRhSWQgPSAkZGItPmluc2VydGlkKCk7DQoJCQkJCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQkJCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjpzZXRBc3NldCgkYUlkLCdleHRlcm5hbF9zb3VyY2UnKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCQkJJGFwcCA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXRBcHBsaWNhdGlvbigpOw0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdZb3VyIERyb3Bib3ggaW50ZWdyYXRpb24gaGFzIGJlZW4gbW92ZWQsIGFuZCBjYW4gbm93IGJlIHZpZXdlZCBhdCB0aGUgbmV3IGV4dGVybmFsIHNvdXJjZSB2aWV3LiBZb3Ugd2lsbCBub3cgbmVlZCBhbiBBUFAgdG9rZW4gdG8gdXBkYXRlIHlvdXIgbG9jYWwgbGlzdGluZyBvZiB0aGUgRHJvcGJveCBmaWxlcy4gUGxlYXNlIHJldmlldyB0aGUgV2lraSB0YWIgd2hlbiBjcmVhdGluZy9lZGl0aW5nIHRoZSBleHRlcm5hbCBzb3VyY2UsIG9yIG9wZW4gYW4gaXNzdWUgb24gZ2l0aHViIGlmIHlvdSBleHBlcmllbmNlIGFueSBtb3JlIGRpZmZpY3VsdGllcy4nLCAnSW5mbycpOw0KCQkJfQ==', '', 'CQkvLyBsb2FkIHRoZSBoZWxwZXIgY2xhc3MNCgkJSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCgkJLy8gY2hlY2sgdGhlIHZlcnNpb24gb2YgU2VybW9uIERpc3RyaWJ1dG9yDQoJCSRtYW5pZmVzdCA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6bWFuaWZlc3QoKTsNCgkJaWYgKGlzc2V0KCRtYW5pZmVzdC0+dmVyc2lvbikgJiYgc3RycG9zKCRtYW5pZmVzdC0+dmVyc2lvbiwgJy4nKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSR2ZXJzaW9uID0gZXhwbG9kZSgnLicsICRtYW5pZmVzdC0+dmVyc2lvbik7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldERibygpOw0KCQkJaWYgKCR2ZXJzaW9uWzBdID09IDEgJiYgJHZlcnNpb25bMV0gPCA0KQ0KCQkJew0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyB1cGRhdGUgYWxsIG1hbnVhbCBhbmQgYXV0byBsaW5rcyBpbiBzZXJtb25zDQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywgJ21hbnVhbF9maWxlcycpKSk7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc2VybW9uJykpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3NvdXJjZScpIC4gJyA9IDInKTsNCgkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCSRyb3dzID0gJGRiLT5sb2FkQXNzb2NMaXN0KCdpZCcsICdtYW51YWxfZmlsZXMnKTsNCgkJCQkJZm9yZWFjaCAoJHJvd3MgYXMgJGlkID0+ICRmaWxlcykNCgkJCQkJew0KCQkJCQkJaWYgKFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tKc29uKCRmaWxlcykpDQoJCQkJCQl7DQoJCQkJCQkJJGZpbGVzID0ganNvbl9kZWNvZGUoJGZpbGVzLCB0cnVlKTsNCgkJCQkJCQlpZiAoW1tbQ29tcG9uZW50XV1dSGVscGVyOjpjaGVja0FycmF5KCRmaWxlcykpDQoJCQkJCQkJew0KCQkJCQkJCQlmb3JlYWNoICgkZmlsZXMgYXMgJG5yID0+ICYkZmlsZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHRtcCA9IHN0cl9yZXBsYWNlKCdWRE1fcExlS19oMHVFci8nLCAnJywgJGZpbGUpOw0KCQkJCQkJCQkJJG5ldyA9IHN0cnRvbG93ZXIoJHRtcCk7DQoJCQkJCQkJCQkvLyBub3cgdXBkYXRlIHRoZSBmaWxlDQoJCQkJCQkJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCR0bXAsICRuZXcsICRmaWxlKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIG9ubHkgdXBkYXRlIGlmIGl0IHdhcyBmaXhlZA0KCQkJCQkJaWYgKFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tBcnJheSgkZmlsZXMpKQ0KCQkJCQkJew0KCQkJCQkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkJLy8gbWFrZSBzdXJlIHRoZSBmaWxlcyBhcmUgc2V0IHRvIGpzb24NCgkJCQkJCQkkb2JqZWN0LT5tYW51YWxfZmlsZXMgPSBqc29uX2VuY29kZSgkZmlsZXMpOw0KCQkJCQkJCSRvYmplY3QtPmlkID0gJGlkOw0KCQkJCQkJCUpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc2VybW9uJywgJG9iamVjdCwgJ2lkJyk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gZG8gYW4gdXBkYXRlIGJ5IG1vdmluZyBjb25maWcgZGF0YSB0byB0aGUgbmV3IGV4dGVybmFsIHNvdXJjZSBhcmVhLg0KCQkJCSR0aGlzLT5jb21QYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCQkJLy8gdGhlIG51bWJlciBvZiBsaW5rcw0KCQkJCSRudW1iZXJzID0gcmFuZ2UoMSwgNCk7DQoJCQkJLy8gdGhlIHR5cGVzIG9mIGxpbmtzDQoJCQkJJHR5cGVzID0gYXJyYXkoJ2F1dG8nLCdtYW51YWwnKTsNCgkJCQkvLyB0aGUgdXBkYXRlIHRhcmdldHMNCgkJCQkkdGhpcy0+dXBkYXRlVGFyZ2V0c1UgPSBhcnJheSgpOw0KCQkJCSR0aGlzLT51cGRhdGVUYXJnZXRzRiA9IGFycmF5KCk7DQoJCQkJLy8gZ2V0IGFsbCBsaXN0ZWQgdGFyZ2V0cyBiYXN0IG9uIHR5cGUNCgkJCQlmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpDQoJCQkJew0KCQkJCQkvLyBub3cgY2hlY2sgaWYgdGhleSBhcmUgc2V0DQoJCQkJCWZvcmVhY2ggKCRudW1iZXJzIGFzICRudW1iZXIpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCB0aGUgbnVtYmVyIHRvIHN0cmluZw0KCQkJCQkJJG51bVN0ciA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6c2FmZVN0cmluZygkbnVtYmVyKTsNCgkJCQkJCS8vIEdldCB0aGUgdXJsDQoJCQkJCQkkdXJsID0gJHRoaXMtPmNvbVBhcmFtcy0+Z2V0KCR0eXBlLidkcm9wYm94Jy4kbnVtU3RyLCBudWxsKTsNCgkJCQkJCS8vIG9ubHkgbG9hZCB0aG9zZSB0aGF0IGFyZSBzZXQNCgkJCQkJCWlmICgkdXJsICYmIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tTdHJpbmcoJHVybCkpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKCFpc3NldCgkdGhpcy0+dXBkYXRlVGFyZ2V0c1VbJHR5cGVdKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSR0aGlzLT51cGRhdGVUYXJnZXRzVVskdHlwZV0gPSBhcnJheSgpOw0KCQkJCQkJCX0NCgkJCQkJCQkkdGhpcy0+dXBkYXRlVGFyZ2V0c1VbJHR5cGVdW10gPSAkdXJsOw0KCQkJCQkJfQ0KCQkJCQkJLy8gR2V0IHRoZSBmb2xkZXJzIGlmIHNldA0KCQkJCQkJJGZvbGRlciA9ICR0aGlzLT5jb21QYXJhbXMtPmdldCgkdHlwZS4nZHJvcGJveGZvbGRlcicuJG51bVN0ciwgbnVsbCk7DQoJCQkJCQkvLyBvbmx5IGxvYWQgdGhvc2UgdGhhdCBhcmUgc2V0DQoJCQkJCQlpZiAoJGZvbGRlciAmJiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmNoZWNrU3RyaW5nKCRmb2xkZXIpKQ0KCQkJCQkJew0KCQkJCQkJCWlmICghaXNzZXQoJHRoaXMtPnVwZGF0ZVRhcmdldHNGWyR0eXBlXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGhpcy0+dXBkYXRlVGFyZ2V0c0ZbJHR5cGVdID0gYXJyYXkoKTsNCgkJCQkJCQl9DQoJCQkJCQkJJHRoaXMtPnVwZGF0ZVRhcmdldHNGWyR0eXBlXVtdID0gJGZvbGRlcjsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIHRhcmdldCB2ZXJzaW9uIGxlc3MgdGhlbiBvciBlcXVhbCB0byAyLjAuMg0KCQkJaWYgKGNvdW50KCR2ZXJzaW9uKSA9PSAzICYmICgkdmVyc2lvblswXSA9PSAyICYmICR2ZXJzaW9uWzFdID09IDAgJiYgJHZlcnNpb25bMl0gPD0gMykgfHwgICgkdmVyc2lvblswXSA8IDIpKQ0KCQkJew0KCQkJCS8vIHdlIG5lZWQgdG8gbWFrZSBhIGRhdGFiYXNlIGNvcnJlY3Rpb24NCgkJCQkkZml4X2NhdGVnb3JpZXMgPSBhcnJheSgNCgkJCQkJJ2NvbV9zZXJtb25kaXN0cmlidXRvci5zZXJtb25zJyA9PiAnY29tX3Nlcm1vbmRpc3RyaWJ1dG9yLnNlcm1vbicNCgkJCQkpOw0KW0NVU1RPTUNPREU9Zml4Q2F0ZWdvcmllc05hbWluZ10NCgkJCX0NCgkJfQ==', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvY2hyaXN0aWFuL0pvb21sYS1TZXJtb24tRGlzdHJpYnV0b3IvcmF3L2JyYW5jaC9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KVGhlIGJlc3Qgd2F5IHRvIHNlZSBhbGwgeW91ciBvcHRpb25zIGlzIHRvIGluc3RhbGwgdGhpcyBjb21wb25lbnQgb24geW91IEpvb21sYSB3ZWJzaXRlIGFuZCB0ZXN0IGFsbCBmZWF0dXJlcyB5b3Vyc2VsZi4gSGVyZSBpcyBhIFtkaXJlY3QgZG93bmxvYWQgbGlua10oaHR0cHM6Ly9naXQudmRtLmRldi9jaHJpc3RpYW4vSm9vbWxhLVNlcm1vbi1EaXN0cmlidXRvci9hcmNoaXZlL21hc3Rlci56aXApDQoNCiAqKklmIHlvdSBsaWtlIG91ciBjb21wb25lbnQgcGxlYXNlIHJhdGUgaXQgb24gdGhlIFtKb29tbGEgSW5kZXhdKGh0dHA6Ly9leHRlbnNpb25zLmpvb21sYS5vcmcvZXh0ZW5zaW9ucy9leHRlbnNpb24vbGl2aW5nL3JlbGlnaW9uL3Nlcm1vbi1kaXN0cmlidXRvcikqKg0KDQojIyMgRXhhbXBsZSBXZWJzaXRlLCBUaGF0IEhhcyBPdmVyIDYwMDAgQXVkaW8gRmlsZXMNCg0KW0xvdWRWb2ljZS5vcmddKGh0dHA6Ly93d3cubG91ZHZvaWNlLm9yZykNCltUcnVlQ2hyaXN0aWFuLkNodXJjaF0oaHR0cHM6Ly90cnVlY2hyaXN0aWFuLmNodXJjaC8pDQoNCiMjIyBTb21lIFZpZGVvIERlbW9uc3RyYXRpb25zDQoNCisgW1NldHVwIG92ZXJ2aWV3XShodHRwczovL3lvdXR1LmJlL3lNUHAxQ3AzV18wP3Q9MjBtOHMpDQorIFtTZXR1cCBEcm9wYm94XShodHRwczovL3lvdXR1LmJlL2J0cEtGRGswLWRJKQ0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZSA6aG91cmdsYXNzOg0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmxsZXdlbGx5bkBqb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSk=', 1, '', 'A sermon distributor that links to Dropbox.', '', '', 'SermonDistributor (public)', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/christian/Joomla-Sermon-Distributor/raw/branch/3.x/sermondistributor_update_server.xml', 'https://www.vdm.io/', '', 'wYUPtkF7wf9oElDwxV+wpc7+8d1dEbx+60+sCitHg6I=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 456, '', 1, 51),
(9, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', '', 1, '', 1, '{\"addcontributors0\":{\"name\":\"CrossWire\",\"title\":\"Modules\",\"email\":\"sword-support@crosswire.org\",\"website\":\"https:\\/\\/wiki.crosswire.org\\/\",\"use\":\"2\",\"show\":\"3\"}}', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/getbible_j3', 'getBible.txt', '', '', 'Vast Development Method', '3.0.9', 'Copyright (C) 2015. All Rights Reserved', '2015-12-03 01:42:15', '', 'WhakPvjCkWnGdctg/smdT6v066C5C4LVSQEB6mI8IUY=', 'ufh7xN30c2gDeh3Ond+j0avLsgeYmHCznjyggIFu9II=', '', 'jfhmfXB1y7wL18HAkAe05yoha/QmICC3BDTbmW8LcnY=', '', '', '', 1, '', 'Welcome to the next level of scripture engagement - The Bible for Joomla! Our purpose is to bring the Word of God to every person, in their native language, entirely free. This isn\'t just a typical extension; it\'s a groundbreaking tool developed to span language divides and deliver a rich, customizable Bible study experience to users worldwide.\r\n\r\nWith an impressive array of 80 translations, our Joomla extension allows people from all corners of the globe to read, comprehend, and meditate on the Holy Scriptures in their preferred language. Moreover, we offer the unique opportunity for individuals to host the Bible on their own website, further extending the reach of the Word.\r\n\r\nWe\'ve integrated robust features such as note-taking, tagging, and a search function, to enhance your interaction with the Scriptures. This allows users to immerse themselves in the text, crafting a personal journey through the Bible that can be revisited in future sessions. Furthermore, our innovative linker system assigns each visitor a unique identifier (GUID) - no login required. This means you can create notes, select favorite verses, and even share sessions, while maintaining control over your personalized content.\r\n\r\nA distinctive feature of our application is the integration with OpenAI. This advanced capability allows website owners to create custom prompts to interact with OpenAI using text from any translation. This function allows you to ask questions, gain clarity, and deepen your understanding of the Scriptures in an engaging and user-friendly manner.\r\n\r\nIn essence, The Bible for Joomla is designed to transform how the Word of God is shared, studied, and comprehended. Its comprehensive features, combined with a user-friendly interface, make it an essential tool for individuals, churches, and website owners alike. Join us on this journey of faith as we make the wisdom and guidance of the Scriptures accessible to all, one verse, one language, and one website at a time.', 'joomla@vdm.io', '', 'https://vdm.bz/get-bible', 'p80zGYsGeHr9dMLJ3A4I1NFtH/rbsPznXzsY6dSKtUM=', '/var/git_', '294267c5-bcf9-4b61-b462-af2364e0358b', 'images/getBible.jpg', '', 'https://git.vdm.dev/getBible/joomla-component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-04-25 15:35:03', '', 'Get Bible', 'Getbible', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSAqIExvYWQgdGhlIHNjcmlwdHVyZSBpbnRvIGNvbnRlbnQNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICYkcm93ICAgICBUaGUgYXJ0aWNsZSBvYmplY3QuICBOb3RlICRhcnRpY2xlLT50ZXh0IGlzIGFsc28gYXZhaWxhYmxlDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJHBsdWdpbiAgIFRoZSBwbHVnaW4gcGFyYW1zDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMi4wLjENCgkgKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkU2NyaXB0dXJlKG9iamVjdCAmJHJvdywgb2JqZWN0ICRwbHVnaW4pOiB2b2lkDQoJew0KCQkvLyBnZXQgY2FsbCBzdHJpbmcNCgkJJGNhbGxfY2xhc3MgPSAkcGx1Z2luLT5nZXQoJ2NhbGxfY2xhc3MnLCAnZ2V0QmlibGUnKTsNCg0KCQkvLyBTaW1wbGUgcGVyZm9ybWFuY2UgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYm90IHNob3VsZCBwcm9jZXNzIGZ1cnRoZXINCgkJaWYgKHN0cnBvcygkcm93LT50ZXh0LCAkY2FsbF9jbGFzcykgPT09IGZhbHNlKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlTdXBlcl9fXzExODkyY2ZhXzM3NGVfNGUzZl9iMGJjXzUzMTg3MWM4MjJkOV9fX1Bvd2VyOjpfKCdHZXRCaWJsZS5Mb2FkZXInKS0+c2V0KCRyb3csICRwbHVnaW4pOw0KCX0=', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJGFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJGFwcF0=', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskYXBwXQ==', 'CQkJLy8gY2hlY2sgaWYgdGhpcyBoYXMgdGhlIG9sZCBnZXRCaWJsZSBleHRlbnNpb24gaW5zdGFsbGVkDQoJCQkkcGF0aCA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL2dldC5waHAnOw0KCQkJaWYgKGlzX3JlYWRhYmxlKCRwYXRoKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgiDQoJCQkJCTxwPlVuZm9ydHVuYXRlbHksIHlvdXIgYXR0ZW1wdCB0byBpbnN0YWxsIGdldEJpYmxlIFZlcnNpb24gMiBoYXMgZmFpbGVkLiBUaGUgcmVhc29uIGZvciB0aGlzIGZhaWx1cmUgaXMgZHVlIHRvIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbiBvZiB0aGUgcHJldmlvdXMgdmVyc2lvbiB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBvdXIgbGF0ZXN0IHVwZGF0ZS4NCgkJCQkJV2UgZGVlcGx5IHJlZ3JldCB0aGlzIGludGVycnVwdGlvbiB0byB5b3VyIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBUbyByZXNvbHZlIHRoaXMgaXNzdWUsIHBsZWFzZSBmaXJzdCB1bmluc3RhbGwgdGhlIG9sZCB2ZXJzaW9uIG9mIGdldEJpYmxlLiBJZiB5b3UgaGF2ZSBwZXJzb25hbGl6ZWQgbm90ZXMgYW5kIHRhZ3MgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiwgPGI+ZG9uJ3QgZm9yZ2V0IHRvIG1hbnVhbGx5IGJhY2sgdGhlbSB1cDwvYj4sIGFzIHRoZXkgd2lsbCBiZSBsb3N0IG90aGVyd2lzZS48L3A+DQoJCQkJCTxwPldlIHVuZGVyc3RhbmQgdGhhdCB0aGlzIHByb2Nlc3MgbWF5IGJlIGluY29udmVuaWVudCBhbmQgY291bGQgcG90ZW50aWFsbHkgcG9zZSBjaGFsbGVuZ2VzLiBUaGVyZWZvcmUsIHdlJ3ZlIHB1dCBhIHN1cHBvcnQgdGVhbSBpbiBwbGFjZSB0byBhc3Npc3QgeW91LiBTaG91bGQgeW91IHJlcXVpcmUgYW55IHRlY2huaWNhbCBhc3Npc3RhbmNlIG9yIGhhdmUgcXVlc3Rpb25zLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IHRvIHVzIGF0OiA8YSBocmVmPSdodHRwczovL2dpdC52ZG0uZGV2L2dldEJpYmxlL3N1cHBvcnQnIHRpdGxlPSdnZXRCaWJsZSBTdXBwb3J0Jz5nZXRCaWJsZSBTdXBwb3J0PC9hPi4NCgkJCQkJV2UgYXBwcmVjaWF0ZSB5b3VyIHVuZGVyc3RhbmRpbmcgYW5kIGNvb3BlcmF0aW9uIGR1cmluZyB0aGlzIHRyYW5zaXRpb24gdG8gZ2V0QmlibGUgVmVyc2lvbiAyLiBPdXIgdGVhbSBpcyBjb21taXR0ZWQgdG8gaGVscGluZyB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LiBUaGFuayB5b3UhPC9wPiIsICdlcnJvcicpOw0KDQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KW0NVU1RPTUNPREU9Z2V0QmlibGVSZW1vdmVPbGRMaWJdDQpbQ1VTVE9NQ09ERT1waHBDb25maWd1cmF0aW9uQ2hlY2tDYWxsKyRhcHBd', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvam9vbWxhLWNvbXBvbmVudC9yYXcvYnJhbmNoL21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJHZXRCaWJsZSIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', 1, '', 'The Bible for Joomla', 'Q1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlX29uX2xpbmtlcl9hbmRfdGFnDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlKGxpbmtlciwgdGFnKTsNCg0KQ1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdmVyc2Vfb25fdmVyc2VfYW5kX2FiYnJldmlhdGlvbg0KT04gI19fW1tbY29tcG9uZW50XV1dX3ZlcnNlKHZlcnNlLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV9ib29rX29uX25yX2FuZF9hYmJyZXZpYXRpb24NCk9OICNfX1tbW2NvbXBvbmVudF1dXV9ib29rKG5yLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV90YWdfb25fZ3VpZF9hbmRfcHVibGlzaGVkDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnKGd1aWQsIHB1Ymxpc2hlZCk7', '', 'Get Bible', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/getBible/joomla-component/raw/branch/3.x/update_server.xml', 'https://getbible.net', '', 'q9tMo1AjOAL6I9oZqofypze1ACLIXoHGBjPM4tQ3i20=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"\",\"power_admin_helper\":{\"power_admin_helper0\":{\"power\":\"11892cfa-374e-4e3f-b0bc-531871c822d9\",\"as\":\"GetBibleFactory\",\"build\":\"2\"},\"power_admin_helper1\":{\"power\":\"4612af84-5a42-4ea5-87bf-9d79cc19c330\",\"as\":\"GiteaFactory\",\"build\":\"2\"}},\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 231, '', 1, 53),
(10, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.6', 'Copyright (C) 2015. All Rights Reserved', '2015-08-05 00:40:06', '', 'Sb63t8FUeBmJerlrccYnV+c45itSf6qozwyJbovlt00=', 'Scf4AZ51hU0np7AfozZ9okVz5XH/+i2h7HG0vAuMxzs=', '', 'n/IPG15cndggdC4wOdJ39irK69zVxjsQvlGLtJQWF5w=', '', '', '', 1, '', 'Just a basic country listing with currency and region linkage.', 'joomla@vdm.io', '', '', 'TMwZZ6OZ74oJ8SHkEmmHI6+8kFIcSE79ZVaUl6FEGWU=', '', '1813baef-e42d-4673-aca6-94327e1fe873', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2020-11-17 17:18:47', 2, 'JCB Countries', 'jcb_countries', '', 4, '', '', '', '', '', '', '', '', '', '', 'ICMgIyMjQ29tcG9uZW50X25hbWUjIyMgKCMjI1ZFUlNJT04jIyMpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KW0NVU1RPTUNPREU9cmVhZE1FY29udHJpYnV0b3JzXQ==', '', '', 'JCB Country Component', '', '', 'JCB Countries (public)', '.git', '', '', 1, 'https://www.vdm.io/updates/demointernal_update_server.xml', 'http://www.joomlacomponentbuilder.com', '', 'B4bdzi10xwbp40t4yt2GfwJHBHY4jZKHXBEOUqcSR1E=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 31, '', 1, 4),
(11, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', 1, '', 1, 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '2.10.0', 'Copyright (C) 2015. All Rights Reserved', '2015-04-30 12:04:35', '', 'eowQ0CIjxqtgfLAW0VSgzSDJLZOeYQVvAaBcSgQLsn8=', 'QkCHQBQPz4f6gdF6impjQPKUtbWS0aq0tLfRA6nWGyw=', '', 'fUkVTE3M3hVpj/Nmb/klQBRsOLD33eE9yP7JdwU0fNs=', '', '', 'A_134', 2, '', 'The Component helps to update/sync all your field types to the latest release of JCB without the need to install a fresh JCB. Since all JCB packages also include the data down to the field-type layer, we basically build one view that has all field types in it and so will include all field-types as per/say to update your system.\r\n\r\nShould you have customized your field-types, it will probably override them!', 'joomla@vdm.io', '', '', 'IHelGQOmQQriHgaIu3hZcGbfg2ooXq5p+9BTWRsd1V8=', '', '551053a0-0e17-4cec-909a-28079878ce1e', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#171;', '2022-06-22 14:47:21', 3, 'Field Type Updater', 'field_type_updater', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'JCB Field Type Updater', '', '', 'Field Type Updater (public)', '.git', '', '', 1, 'https://www.vdm.io/updates/componentbuilder_basic_update_server.xml', 'http://www.joomlacomponentbuilder.com', '', 'oDiIF5J79N0K4p7b6ygC6MYCzSEIH7iVML4/SlvsFwg=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 43, '', 1, 55),
(12, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, '', 2, 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.1', 'Copyright (C) 2015. All Rights Reserved', '2015-04-30 13:04:35', '', 'sajfsZ/cXooNKDqU/c9mb8GPS2LhFpIcHFtG0p7HcnI=', 'wFf9c7zgXfT5EeLS81c1EfTkTGNDbp2sVo6qMqilMgU=', '', 'SQ28+O95n2Iw3QJquIZOTi0SDj2ORX4iJYP+BgIaPIY=', '', '', '', 1, '', 'The Component Builder\'s Compiler Configuration Architect', 'joomla@vdm.io', '', '', 'aMOO874VLYioby1Mp/sowVQ/lsbMV1maSl+R40gxrVY=', '', 'e3272f27-e9ec-42a5-bdd4-e45976f67ce3', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2019-07-04 01:17:05', 2, 'Compiler Configuration Architect', 'compilerconfigurationarchitect', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Builds JCB Compiler', '', '', 'Compiler Configuration Architect', '.git', '', '', 2, 'https://raw.githubusercontent.com/vdm-io/Compiler-Configuration-Architect/master/compilerconfigurationarchitect_update_server.xml', 'http://www.joomlacomponentbuilder.com', '', '6wcdNcmqeGJ8qOOVr0KBv/GSfHo6NFLlQK/Tw7ZRtro=', '', '', 1, 41, '', 1, 57),
(13, 1, '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', '', '', '', 1, '', '', '', '', '', '{}', 3, 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.3', 'Copyright (C) 2019 Vast Development Method. All rights reserved.', '2019-07-30 11:04:35', '', '0L8umlMVGbIHBECkJo9MdF/WOL+DKQ36mdkuHyiSfc4=', 'TJMfFavY9uf+yMAG9r2+PP/+p5+th76IQsqYDUq7Dd4=', '', '5z12QnQCfREITlFuWJKPAy2AyjYtFg+Z5oqxtZgAe1o=', '', '', '', 1, '', 'The library of books, documents, media and other type of files.', 'dev@vdm.io', '', '', 'zprR7+IHQCH3c3V94azOxAawULNZzTAHdgrseaOKw4M=', '', 'b8fa56f7-483b-4b8f-9845-4479ce15ccc7', 'images/vdm/Libary500.jpg', '', '', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '&Copf;&Lopf;', '2021-03-08 03:13:22', 3, 'Library', 'librarydatabase', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9ZmlsZUhlbHBlckJvdGhd', 'W0NVU1RPTUNPREU9Y291bnRMb2NhbERvd25sb2FkXQ==', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Library of books and more', '', '', 'Library (books)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Plugin-Builder/master/pluginbuilder_update_server.xml', 'https://www.vdm.io/', '', 'uxsjjVYguNu3me77pIvjROAyZO635/LEg6Xv32Xs24o=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 96, '', 1, 54),
(14, 1, '', 1, '', 1, '', '', '', 1, '', '', 1, '', '', '', 1, '', 1, '', 1, '', 1, 1, 1, 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'JCB-pro.txt', '', '', 'Vast Development Method', '3.1.6', 'Copyright (C) 2015 Vast Development Method. All rights reserved.', '2015-04-30 12:04:35', '', 'Szn2KFyt+xquQEoCXEQGYeN/K01CYQG9mzQ6/5sy0kY=', '2apXsgmRStpvRORC56BI8bYI0tCfEK5qrmgVx5eclh/JUyy3NLstqb7a8IWAow/3VIk5aovN3J7hQccaiFb54A==', 'joomla-component-builder', 'fk1chg/pRL/5EzYsisjrDCv/+I72xNIpZzRjakzqsWo=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEyMHB4OyB9DQouZmllbGRMYXJnZSB7IHdpZHRoOiAzMjBweDsgfQ0KLmZpZWxkTWlkIHsgd2lkdGg6IDgwcHg7IH0NCi5maWVsZEZ1bGwgeyB3aWR0aDogMTAwJTsgfQ0KLmZpZWxkU21hbGwgeyB3aWR0aDogNjBweDsgfQ0KY29kZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAzcHg7fQ==', '', '', 1, '', 'The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!', 'joomla@vdm.io', '', 'https://vdm.bz/contribute-financially-to-jcb', 'wtbW3I4qj/wjgY5xeJ1EF65i5V2eyZmXu6dRGsbBYi8Qg05hB39CdFNEeVZjIqDKkkTO98phUEkK2+q3E0HD7g==', '', '67d8681b-6556-45a0-94f1-a53cd9cdad97', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '&#10003', '2023-10-21 13:48:20', 2, 'Component Builder', 'componentbuilder', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'CS8qDQoJICogQ29tcGlsZXIgYXV0b2xvYWRlcg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXV0b0xvYWRlcigpDQoJew0KCQkvLyBsb2FkIHRoZSBjb21waWxlciBjbGFzc2VzDQoJCXJlcXVpcmVfb25jZSBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvZ2V0LnBocCc7DQoJCXJlcXVpcmVfb25jZSBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvc3RydWN0dXJlLnBocCc7DQoJCXJlcXVpcmVfb25jZSBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvaW50ZXJwcmV0YXRpb24ucGhwJzsNCgkJcmVxdWlyZV9vbmNlIEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9pbmZ1c2lvbi5waHAnOw0KCX0NCg0KCS8qKg0KCSAqCWluZGVudCBIVE1MDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbmRlbnQoJGh0bWwpDQoJew0KCQkvLyBsb2FkIHRoZSBjbGFzcw0KCQlyZXF1aXJlX29uY2UgSlBBVEhfQURNSU5JU1RSQVRPUi4nL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL2luZGVudGVyLnBocCc7DQoJCS8vIHNldCBuZXcgaW5kZW50ZXINCgkJJGluZGVudGVyID0gbmV3IEluZGVudGVyKCk7DQoJCS8vIHJldHVybiBpbmRlbnRlZCBodG1sDQoJCXJldHVybiAkaW5kZW50ZXItPmluZGVudCgkaHRtbCk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0ZpbGVUeXBlKCRmaWxlLCAkc3VmaXgpIHsNCgkJLy8gbm93IGNoZWNrIGlmIHRoZSBmaWxlIGVuZHMgd2l0aCB0aGUgc3VmaXgNCgkJcmV0dXJuICRzdWZpeCA9PT0gIiIgfHwgKCRzdWZpeCA9PSBzdWJzdHIoc3RycmNocigkZmlsZSwgIi4iKSwgLXN0cmxlbigkc3VmaXgpKSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbWFnZUluZm8oJHBhdGgsJHJlcXVlc3QgPSAndHlwZScpDQoJew0KCQkvLyBzZXQgaW1hZ2UNCgkJJGltYWdlID0gSlBBVEhfU0lURS4nLycuJHBhdGg7DQoJCS8vIGNoYWNrIGlmIGV4aXN0cw0KCQlpZiAoZmlsZV9leGlzdHMoJGltYWdlKSkNCgkJew0KCQkJLy8gZ2V0IGltYWdlIGluZm8NCgkJCSRyZXN1bHQgPSBnZXRpbWFnZXNpemUoJGltYWdlKTsNCgkJCS8vIHJldHVybiB0eXBlIHJlcXVlc3QNCgkJCXN3aXRjaCAoJHJlcXVlc3QpDQoJCQl7DQoJCQkJY2FzZSAnd2lkdGgnOg0KCQkJCQlyZXR1cm4gJHJlc3VsdFswXTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnaGVpZ2h0JzoNCgkJCQkJcmV0dXJuICRyZXN1bHRbMV07DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3R5cGUnOg0KCQkJCQkkZXh0ZW5zaW9ucyA9IGFycmF5KA0KCQkJCQkJSU1BR0VUWVBFX0dJRiA9PiAiZ2lmIiwNCgkJCQkJCUlNQUdFVFlQRV9KUEVHID0+ICJqcGciLA0KCQkJCQkJSU1BR0VUWVBFX1BORyA9PiAicG5nIiwNCgkJCQkJCUlNQUdFVFlQRV9TV0YgPT4gInN3ZiIsDQoJCQkJCQlJTUFHRVRZUEVfUFNEID0+ICJwc2QiLA0KCQkJCQkJSU1BR0VUWVBFX0JNUCA9PiAiYm1wIiwNCgkJCQkJCUlNQUdFVFlQRV9USUZGX0lJID0+ICJ0aWZmIiwNCgkJCQkJCUlNQUdFVFlQRV9USUZGX01NID0+ICJ0aWZmIiwNCgkJCQkJCUlNQUdFVFlQRV9KUEMgPT4gImpwYyIsDQoJCQkJCQlJTUFHRVRZUEVfSlAyID0+ICJqcDIiLA0KCQkJCQkJSU1BR0VUWVBFX0pQWCA9PiAianB4IiwNCgkJCQkJCUlNQUdFVFlQRV9KQjIgPT4gImpiMiIsDQoJCQkJCQlJTUFHRVRZUEVfU1dDID0+ICJzd2MiLA0KCQkJCQkJSU1BR0VUWVBFX0lGRiA9PiAiaWZmIiwNCgkJCQkJCUlNQUdFVFlQRV9XQk1QID0+ICJ3Ym1wIiwNCgkJCQkJCUlNQUdFVFlQRV9YQk0gPT4gInhibSIsDQoJCQkJCQlJTUFHRVRZUEVfSUNPID0+ICJpY28iDQoJCQkJCSk7DQoJCQkJCXJldHVybiAkZXh0ZW5zaW9uc1skcmVzdWx0WzJdXTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnYXR0cic6DQoJCQkJCXJldHVybiAkcmVzdWx0WzNdOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdhbGwnOg0KCQkJCWRlZmF1bHQ6DQoJCQkJCXJldHVybiAkcmVzdWx0Ow0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QmV0d2VlbigkY29udGVudCwkc3RhcnQsJGVuZCkNCgl7DQoJCSRyID0gZXhwbG9kZSgkc3RhcnQsICRjb250ZW50KTsNCgkJaWYgKGlzc2V0KCRyWzFdKSkNCgkJew0KCQkJJHIgPSBleHBsb2RlKCRlbmQsICRyWzFdKTsNCgkJCXJldHVybiAkclswXTsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsQmV0d2VlbigkY29udGVudCwkc3RhcnQsJGVuZCkNCgl7DQoJCSRidWtldCA9IGFycmF5KCk7DQoJCWZvciAoJGkgPSAwOyA7ICRpKyspDQoJCXsNCgkJCSRmb3VuZCA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OmJldHdlZW4oJGNvbnRlbnQsJHN0YXJ0LCRlbmQpOw0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRmb3VuZCkpDQoJCQl7DQoJCQkJJGJ1a2V0W10gPSAkZm91bmQ7DQoJCQkJJHJlbW92ZSA9ICRzdGFydC4kZm91bmQuJGVuZDsNCgkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKCRyZW1vdmUsJycsJGNvbnRlbnQpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJLy8gc2FmZXR5IGNhdGNoDQoJCQlpZiAoJGkgPT0gNTAwKQ0KCQkJew0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAgYXJyYXlfdW5pcXVlKCRidWtldCk7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHlwZUZpZWxkKCR0eXBlLCRvcHRpb24gPSAnZGVmYXVsdCcpDQoJew0KCQkvLyBsaXN0IG9mIGRlZmF1bHQgZmllbGRzDQoJCS8vIGh0dHBzOi8vZG9jcy5qb29tbGEub3JnL0Zvcm1fZmllbGQNCgkJJGZpZWxkcyA9IGFycmF5KA0KCQkJJ2RlZmF1bHQnID0+IGFycmF5KA0KCQkJCSdhY2Nlc3NsZXZlbCcsJ2NhY2hlaGFuZGxlcicsJ2NhbGVuZGFyJywnY2FwdGNoYScsJ2NhdGVnb3J5JywnY2hlY2tib3gnLA0KCQkJCSdjaGVja2JveGVzJywnY29sb3InLCdjb21ibycsJ2NvbXBvbmVudGxheW91dCcsJ2NvbnRlbnRsYW5ndWFnZScsJ2VkaXRvcicsDQoJCQkJJ2Nocm9tZXN0eWxlJywnY29udGVudHR5cGUnLCdkYXRhYmFzZWNvbm5lY3Rpb24nLCdlZGl0b3JzJywnZW1haWwnLCdmaWxlJywNCgkJCQknZmlsZWxpc3QnLCdmb2xkZXJsaXN0JywnZ3JvdXBlZGxpc3QnLCdoaWRkZW4nLCdmaWxlJywnaGVhZGVydGFnJywnaGVscHNpdGUnLA0KCQkJCSdpbWFnZWxpc3QnLCdpbnRlZ2VyJywnbGFuZ3VhZ2UnLCdsaXN0JywnbWVkaWEnLCdtZW51Jywnbm90ZScsJ3Bhc3N3b3JkJywNCgkJCQkncGx1Z2lucycsJ3JhbmdlJywncmFkaW8nLCdyZXBlYXRhYmxlJywncnVsZXMnLCdzZXNzaW9uaGFuZGxlcicsJ3NwYWNlcicsJ3NxbCcsJ3RhZycsDQoJCQkJJ3RlbCcsJ21lbnVpdGVtJywnbW9kdWxlbGF5b3V0JywnbWV0ZXInLCdtb2R1bGVvcmRlcicsJ21vZHVsZXBvc2l0aW9uJywnbW9kdWxldGFnJywNCgkJCQkndGVtcGxhdGVzdHlsZScsJ3RleHQnLCd0ZXh0YXJlYScsJ3RpbWV6b25lJywndXJsJywndXNlcicsJ3VzZXJncm91cCcNCgkJCSksIA0KCQkJJ3RleHQnID0+IGFycmF5KA0KCQkJCSdjYWxlbmRhcicsJ2NvbG9yJywnZWRpdG9yJywnZW1haWwnLCdwYXNzd29yZCcsJ3RlbCcsJ3RleHQnLCd0ZXh0YXJlYScsJ3VybCcsJ251bWJlcicsJ3JhbmdlJw0KCQkJKSwgDQoJCQknbGlzdCcgPT4gYXJyYXkoDQoJCQkJJ2NoZWNrYm94ZXMnLCdjaGVja2JveCcsJ2xpc3QnLCdyYWRpbycNCgkJCSksIA0KCQkJJ2R5bmFtaWMnID0+IGFycmF5KA0KCQkJCSdjYXRlZ29yeScsJ2hlYWRlcnRhZycsJ3RhZycsJ3J1bGVzJywndXNlcicsJ2ZpbGUnLCdmaWxlbGlzdCcsJ2ZvbGRlcmxpc3QnLCdpbWFnZWxpc3QnLCdpbnRlZ2VyJywndGltZXpvbmUnLCdtZWRpYScsJ21ldGVyJw0KCQkJKQ0KCQkpOw0KCQkNCgkJaWYgKGluX2FycmF5KCR0eXBlLCRmaWVsZHNbJG9wdGlvbl0pKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7CQkNCgl9', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlckhlbHBlckJvdGhd', '', '', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclBvc3RmbGlnaHRVcGRhdGVdDQoJCQkvLyB3ZSBtdXN0IHVwZGF0ZSBhbGwgYXJlYXMgdGhhdCBtYXkgaGF2ZSBsaW5rZWQgcG93ZXJzIGluIHRoZSB0YXJnZXQgZmllbGRzIG9mIHRoZWlyIHBhcmFtcw0KCQkJJHRhcmdldHMgPSBbDQoJCQkJJ2FkbWluX3ZpZXcnID0+IFsNCgkJCQkJJ2FkZF9hZG1pbl92aWV3X21vZGVsJyA9PiAncG93ZXJfYWRtaW5fdmlld19tb2RlbCcsDQoJCQkJCSdhZGRfYWRtaW5fdmlldycgPT4gJ3Bvd2VyX2FkbWluX3ZpZXcnLA0KCQkJCQknYWRkX2FkbWluX3ZpZXdfaHRtbCcgPT4gJ3Bvd2VyX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdhZGRfc2l0ZV9hZG1pbl92aWV3X2h0bWwnID0+ICdwb3dlcl9zaXRlX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdhZGRfYWRtaW5fdmlld19jb250cm9sbGVyJyAgPT4gJ3Bvd2VyX2FkbWluX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdhZGRfYWpheF9tb2RlbCcgPT4gJ3Bvd2VyX2FqYXhfbW9kZWwnLA0KCQkJCQknYWRkX2FkbWluX3ZpZXdzX21vZGVsJyA9PiAncG93ZXJfYWRtaW5fdmlld3NfbW9kZWwnLA0KCQkJCQknYWRkX2FkbWluX3ZpZXdzJyA9PiAncG93ZXJfYWRtaW5fdmlld3MnLA0KCQkJCQknYWRkX2FkbWluX3ZpZXdzX2h0bWwnID0+ICdwb3dlcl9hZG1pbl92aWV3c19odG1sJywNCgkJCQkJJ2FkZF9hZG1pbl92aWV3c19jb250cm9sbGVyJyA9PiAncG93ZXJfYWRtaW5fdmlld3NfY29udHJvbGxlcicNCgkJCQldLA0KCQkJCSdzaXRlX3ZpZXcnID0+IFsNCgkJCQkJJ2FkZF9zaXRlX3ZpZXdfbW9kZWwnID0+ICdwb3dlcl9zaXRlX3ZpZXdfbW9kZWwnLA0KCQkJCQknYWRkX3NpdGVfdmlldycgPT4gJ3Bvd2VyX3NpdGVfdmlldycsDQoJCQkJCSdhZGRfc2l0ZV92aWV3X2h0bWwnID0+ICdwb3dlcl9zaXRlX3ZpZXdfaHRtbCcsDQoJCQkJCSdhZGRfc2l0ZV92aWV3X2NvbnRyb2xsZXInICA9PiAncG93ZXJfc2l0ZV92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknYWRkX3NpdGVfdmlld3NfbW9kZWwnID0+ICdwb3dlcl9zaXRlX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2FkZF9zaXRlX3ZpZXdzJyA9PiAncG93ZXJfc2l0ZV92aWV3cycsDQoJCQkJCSdhZGRfc2l0ZV92aWV3c19odG1sJyA9PiAncG93ZXJfc2l0ZV92aWV3c19odG1sJywNCgkJCQkJJ2FkZF9zaXRlX3ZpZXdzX2NvbnRyb2xsZXInID0+ICdwb3dlcl9zaXRlX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknYWRkX2FqYXhfbW9kZWwnID0+ICdwb3dlcl9hamF4X21vZGVsJw0KCQkJCV0sDQoJCQkJJ2N1c3RvbV9hZG1pbl92aWV3JyA9PiBbDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfbW9kZWwnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld19tb2RlbCcsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXcnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlldycsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcgPT4gJ3Bvd2VyX2N1c3RvbV9hZG1pbl92aWV3X2h0bWwnLA0KCQkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X2NvbnRyb2xsZXInICA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJyA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3MnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld3MnLA0KCQkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19odG1sJyA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnLA0KCQkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19jb250cm9sbGVyJyA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknYWRkX2FqYXhfbW9kZWwnID0+ICdwb3dlcl9hamF4X21vZGVsJw0KCQkJCV0sDQoJCQkJJ2R5bmFtaWNfZ2V0JyA9PiBbDQoJCQkJCSdhZGRfc2l0ZV92aWV3X21vZGVsJyA9PiAncG93ZXJfc2l0ZV92aWV3X21vZGVsJywNCgkJCQkJJ2FkZF9zaXRlX3ZpZXcnID0+ICdwb3dlcl9zaXRlX3ZpZXcnLA0KCQkJCQknYWRkX3NpdGVfdmlld19odG1sJyA9PiAncG93ZXJfc2l0ZV92aWV3X2h0bWwnLA0KCQkJCQknYWRkX3NpdGVfdmlld19jb250cm9sbGVyJyAgPT4gJ3Bvd2VyX3NpdGVfdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2FkZF9zaXRlX3ZpZXdzX21vZGVsJyA9PiAncG93ZXJfc2l0ZV92aWV3c19tb2RlbCcsDQoJCQkJCSdhZGRfc2l0ZV92aWV3cycgPT4gJ3Bvd2VyX3NpdGVfdmlld3MnLA0KCQkJCQknYWRkX3NpdGVfdmlld3NfaHRtbCcgPT4gJ3Bvd2VyX3NpdGVfdmlld3NfaHRtbCcsDQoJCQkJCSdhZGRfc2l0ZV92aWV3c19jb250cm9sbGVyJyA9PiAncG93ZXJfc2l0ZV92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19tb2RlbCcgPT4gJ3Bvd2VyX2N1c3RvbV9hZG1pbl92aWV3X21vZGVsJywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlldycgPT4gJ3Bvd2VyX2N1c3RvbV9hZG1pbl92aWV3JywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19odG1sJyA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfY29udHJvbGxlcicgID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnLA0KCQkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3cycgPT4gJ3Bvd2VyX2N1c3RvbV9hZG1pbl92aWV3cycsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld3NfaHRtbCcsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld3NfY29udHJvbGxlcicsDQoJCQkJCSdhZGRfYWpheF9tb2RlbCcgPT4gJ3Bvd2VyX2FqYXhfbW9kZWwnDQoJCQkJXSwNCgkJCQknY29tcG9uZW50X2Rhc2hib2FyZCcgPT4gWw0KCQkJCQknYWRkX2Rhc2hib2FyZF9tb2RlbCcgPT4gJ3Bvd2VyX2Rhc2hib2FyZF9tb2RlbCcsDQoJCQkJCSdhZGRfZGFzaGJvYXJkX3ZpZXcnID0+ICdwb3dlcl9kYXNoYm9hcmRfdmlldycsDQoJCQkJCSdhZGRfZGFzaGJvYXJkX3ZpZXdfaHRtbCcgID0+ICdwb3dlcl9kYXNoYm9hcmRfdmlld19odG1sJywNCgkJCQkJJ2FkZF9kYXNoYm9hcmRfY29udHJvbGxlcicgPT4gJ3Bvd2VyX2Rhc2hib2FyZF9jb250cm9sbGVyJywNCgkJCQkJJ2FkZF9hamF4X21vZGVsJyA9PiAncG93ZXJfYWpheF9tb2RlbCcNCgkJCQldLA0KCQkJCSdqb29tbGFfY29tcG9uZW50JyA9PiBbDQoJCQkJCSdhZGRfYWRtaW5fY29tcG9uZW50JyA9PiAncG93ZXJfYWRtaW5fY29tcG9uZW50JywNCgkJCQkJJ2FkZF9zaXRlX2NvbXBvbmVudCcgID0+ICdwb3dlcl9zaXRlX2NvbXBvbmVudCcsDQoJCQkJCSdhZGRfYWRtaW5faGVscGVyJyA9PiAncG93ZXJfYWRtaW5faGVscGVyJywNCgkJCQkJJ2FkZF9zaXRlX2hlbHBlcicgPT4gJ3Bvd2VyX3NpdGVfaGVscGVyJw0KCQkJCV0NCgkJCV07DQoJCQkvLyB0YXJnZXQgdmVyc2lvbiBsZXNzIHRoZW4gb3IgZXF1YWwgdG8gMy4wLjEwDQoJCQlpZiAoY291bnQoJHRoaXMtPkpDQnZlcnNpb24pID09IDMgJiYgJHRoaXMtPkpDQnZlcnNpb25bMF0gPD0gMyAmJiAkdGhpcy0+SkNCdmVyc2lvblsxXSA9PSAwICYmICR0aGlzLT5KQ0J2ZXJzaW9uWzJdIDw9IDEwKQ0KCQkJew0KCQkJCS8vIGtlZXAgdHJhY2sgb2YgdXNlZA0KCQkJCSRtYXBwZXIgPSBhcnJheSgpOw0KCQkJCS8vIG91ciBnZXQgZnVuY3Rpb24NCgkJCQkkZ2V0R3VpZEZyb21JZCA9IGZ1bmN0aW9uICgkaWQpIHVzZSgmJG1hcHBlcikNCgkJCQl7DQoJCQkJCWlmIChpc19udW1lcmljKCRpZCkgJiYgaXNzZXQoJG1hcHBlclskaWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gdG8gdXBkYXRlIHRoaXMgcG93ZXINCgkJCQkJCXJldHVybiAkbWFwcGVyWyRpZF07DQoJCQkJCX0NCgkJCQkJZWxzZWlmIChpc19udW1lcmljKCRpZCkgJiYNCgkJCQkJCSgkZ3VpZCA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OnZhcigncG93ZXInLCAkaWQsICdpZCcsICdndWlkJykpICE9PSBmYWxzZSkNCgkJCQkJew0KCQkJCQkJLy8gbm90IHRvIGZldGNoIGl0IGFnYWluDQoJCQkJCQkkbWFwcGVyWyRpZF0gPSAkZ3VpZDsNCgkJCQkJCXJldHVybiAkZ3VpZDsNCgkJCQkJfQ0KCQkJCQllbHNlaWYoIWlzX251bWVyaWMoJGlkKSAmJiANCgkJCQkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6dmFsaWRHVUlEKCRpZCkpDQoJCQkJCXsNCgkJCQkJCS8vIGtlZXAgdGhpcyBwb3dlcg0KCQkJCQkJcmV0dXJuICRpZDsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfTsNCgkJCQkvLyB1cGRhdGUgYWxsIHRhYmxlcw0KCQkJCWZvcmVhY2ggKCR0YXJnZXRzIGFzICR0YWJsZSA9PiAkZmllbGRzKQ0KCQkJCXsNCgkJCQkJLy8gY2hlY2sgaXQgdGhpcyB0YWJsZSBhY3RpdmUNCgkJCQkJJGFjdGl2ZSA9ICR0YWJsZSAuICdfaGVhZGVycyc7DQoJCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJCS8vIGdldCBhbGwgaWRzIGFuZCBndWlkcyBvZiBlYWNoIHRhYmxlDQoJCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsICdwYXJhbXMnKSkpOw0KCQkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nIC4gJHRhYmxlKSk7DQoJCQkJCS8vIFJlc2V0IHRoZSBxdWVyeSB1c2luZyBvdXIgbmV3bHkgcG9wdWxhdGVkIHF1ZXJ5IG9iamVjdC4NCgkJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJCQl7DQoJCQkJCQkvLyBnZXQgdGhlIHJvd3MNCgkJCQkJCSRyb3dzID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJCQkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykNCgkJCQkJCXsNCgkJCQkJCQkvLyBsb2FkIHZhbHVlIG5vdCB0byB1c2UgaXQgYWdhaW4NCgkJCQkJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHJvdy0+cGFyYW1zKSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIG5vdyBvcGVuIHRoZSBwYXJhbXMNCgkJCQkJCQkJJHBhcmFtcyA9IGpzb25fZGVjb2RlKCRyb3ctPnBhcmFtcyk7DQoJCQkJCQkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJCQkJCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBhY3RpdmUgZGF0YQ0KCQkJCQkJCQlpZiAoaXNzZXQoJHBhcmFtcy0+eyRhY3RpdmV9KSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkYWRkID0+ICRwb3dlcikNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBjaGVjayBpZiBoZWFkZXJzIGluIGFjdGl2ZQ0KCQkJCQkJCQkJCWlmIChpc3NldCgkcGFyYW1zLT57JGFjdGl2ZX0tPnskYWRkfSkgJiYNCgkJCQkJCQkJCQkJJHBhcmFtcy0+eyRhY3RpdmV9LT57JGFkZH0gJiYNCgkJCQkJCQkJCQkJaXNfYXJyYXkoJHBhcmFtcy0+eyRhY3RpdmV9LT57JHBvd2VyfSkpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkvLyBnZXQgcG93ZXJzIGFuZCB1cGRhdGUNCgkJCQkJCQkJCQkJJHBvd2VycyA9IFtdOw0KCQkJCQkJCQkJCQlmb3JlYWNoICgkcGFyYW1zLT57JGFjdGl2ZX0tPnskcG93ZXJ9IGFzICRpZCkNCgkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJaWYgKCgkZ3VpZCA9ICRnZXRHdWlkRnJvbUlkKCRpZCkpICE9PWZhbHNlKQ0KCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCS8vIHRvIHVwZGF0ZSB0aGlzIHBvd2VyDQoJCQkJCQkJCQkJCQkJJHBvd2Vyc1tdID0gJGd1aWQ7DQoJCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIGZvdW5kIHBvd2VycyB0byB1cGRhdGUNCgkJCQkJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwb3dlcnMpKQ0KCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkvLyB1cGRhdGUgdGhlIGxvY2FsIHBhcmFtcw0KCQkJCQkJCQkJCQkJJHBhcmFtcy0+eyRhY3RpdmV9LT57JHBvd2VyfSA9ICRwb3dlcnM7DQoJCQkJCQkJCQkJCQkvLyB0byB1cGRhdGUgdGhpcyBwYXJhbXMNCgkJCQkJCQkJCQkJCSR1cGRhdGUgPSB0cnVlOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGNoZWNrIGlmIHVwZGF0ZSBtdXN0IGJlIG1hZGUNCgkJCQkJCQkJaWYgKCR1cGRhdGUpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJCQkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQkJCQkJLy8gbG9hZCB0aGUgZ3VpZA0KCQkJCQkJCQkJJHVwZGF0ZV9maWVsZHMgPSBhcnJheSgNCgkJCQkJCQkJCQkkZGItPnF1b3RlTmFtZSgncGFyYW1zJykgLiAnID0gJyAuICRkYi0+cXVvdGUoanNvbl9lbmNvZGUoJHBhcmFtcykpDQoJCQkJCQkJCQkpOw0KCQkJCQkJCQkJLy8gQ29uZGl0aW9ucyBmb3Igd2hpY2ggcmVjb3JkcyBzaG91bGQgYmUgdXBkYXRlZC4NCgkJCQkJCQkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkJCQkJCQkJJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuIChpbnQpICRyb3ctPmlkDQoJCQkJCQkJCQkpOw0KCQkJCQkJCSAJCS8vIHVwZGF0ZSB0aGUgcm93DQoJCQkJCQkJCQkkcXVlcnktPnVwZGF0ZSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuICR0YWJsZSkpLT5zZXQoJHVwZGF0ZV9maWVsZHMpLT53aGVyZSgkY29uZGl0aW9ucyk7DQoJCQkJCQkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJCQkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyB3ZSBtdXN0IHVwZGF0ZSBhbGwgcG93ZXJzIGFzLXdlbGwgd2hlcmUgaXQgaGFzIGxpbmtlZCBJRCdzIGluIGl0cyBvd24gZmllbGRzDQoJCQkJJGZpZWxkcyA9IFsNCgkJCQkJJ3VzZV9zZWxlY3Rpb24nID0+ICd1c2UnLA0KCQkJCQknbG9hZF9zZWxlY3Rpb24nID0+ICdsb2FkJywNCgkJCQkJJ2ltcGxlbWVudHMnID0+IDIsDQoJCQkJCSdleHRlbmRzJyA9PiAxDQoJCQkJXTsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJLy8gZ2V0IGFsbCBpZHMgYW5kIGd1aWRzIG9mIGVhY2ggdGFibGUNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnKSkpOw0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5X2tleXMoJGZpZWxkcykpKTsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9wb3dlcicpKTsNCgkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCS8vIGdldCB0aGUgcm93cw0KCQkJCQkkcm93cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykNCgkJCQkJew0KCQkJCQkJJHVwZGF0ZSA9IGZhbHNlOw0KCQkJCQkJJHVwZGF0ZV9maWVsZHMgPSBbXTsNCgkJCQkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkID0+ICRrZXkpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKGlzX2ludCgka2V5KSAmJiAka2V5ID09IDEpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoaXNfbnVtZXJpYygkcm93LT57JGZpZWxkfSkgJiYNCgkJCQkJCQkJCSRyb3ctPnskZmllbGR9ID4gMCAmJg0KCQkJCQkJCQkJKCRndWlkID0gJGdldEd1aWRGcm9tSWQoJHJvdy0+eyRmaWVsZH0pKSAhPT1mYWxzZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJLy8gbG9hZCB0aGUgZmllbGQNCgkJCQkJCQkJCSR1cGRhdGVfZmllbGRzW10gPSAkZGItPnF1b3RlTmFtZSgkZmllbGQpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRndWlkKTsNCgkJCQkJCQkJCSR1cGRhdGUgPSB0cnVlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoaXNfaW50KCRrZXkpICYmICRrZXkgPT0gMikNCgkJCQkJCQl7DQoJCQkJCQkJCSRhcnJheSA9IChhcnJheSkganNvbl9kZWNvZGUoJHJvdy0+eyRmaWVsZH0sIHRydWUpOw0KCQkJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGFycmF5LCB0cnVlKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHBvd2VycyA9IFtdOw0KCQkJCQkJCQkJZm9yZWFjaCAoJGFycmF5IGFzICRpZCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQlpZiAoaXNfbnVtZXJpYygkaWQpICYmICRpZCA+IDAgJiYNCgkJCQkJCQkJCQkJKCRndWlkID0gJGdldEd1aWRGcm9tSWQoJGlkKSkgIT09ZmFsc2UpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkvLyB0byB1cGRhdGUgdGhpcyBwb3dlcg0KCQkJCQkJCQkJCQkkcG93ZXJzW10gPSAkZ3VpZDsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBvd2VycykpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gbG9hZCB0aGUgZmllbGQNCgkJCQkJCQkJCQkkdXBkYXRlX2ZpZWxkc1tdID0gJGRiLT5xdW90ZU5hbWUoJGZpZWxkKSAuICcgPSAnIC4gJGRiLT5xdW90ZShqc29uX2VuY29kZSgkcG93ZXJzKSk7DQoJCQkJCQkJCQkJJHVwZGF0ZSA9IHRydWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcm93LT57JGZpZWxkfSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkc3ViZm9ybSA9IGpzb25fZGVjb2RlKCRyb3ctPnskZmllbGR9LCB0cnVlKTsNCgkJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzdWJmb3JtLCB0cnVlKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHBvd2VycyA9IFtdOw0KCQkJCQkJCQkJZm9yZWFjaCAoJHN1YmZvcm0gYXMgJHNlbGVjdGlvbiA9PiAkdmFsdWUpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJaWYgKGlzc2V0KCR2YWx1ZVska2V5XSkgJiYgaXNfbnVtZXJpYygkdmFsdWVbJGtleV0pICYmICR2YWx1ZVska2V5XSA+IDAgJiYNCgkJCQkJCQkJCQkJKCRndWlkID0gJGdldEd1aWRGcm9tSWQoJHZhbHVlWyRrZXldKSkgIT09ZmFsc2UpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkvLyB0byB1cGRhdGUgdGhpcyBwb3dlcg0KCQkJCQkJCQkJCQkkcG93ZXJzWyRzZWxlY3Rpb25dID0gWyRrZXkgPT4gJGd1aWRdOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcG93ZXJzKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBsb2FkIHRoZSBmaWVsZA0KCQkJCQkJCQkJCSR1cGRhdGVfZmllbGRzW10gPSAkZGItPnF1b3RlTmFtZSgkZmllbGQpIC4gJyA9ICcgLiAkZGItPnF1b3RlKGpzb25fZW5jb2RlKCRwb3dlcnMpKTsNCgkJCQkJCQkJCQkkdXBkYXRlID0gdHJ1ZTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCB1cGRhdGUgdGhpcyBwb3dlcg0KCQkJCQkJaWYgKCR1cGRhdGUpDQoJCQkJCQl7DQoJCQkJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQkJCS8vIENvbmRpdGlvbnMgZm9yIHdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHVwZGF0ZWQuDQoJCQkJCQkJJGNvbmRpdGlvbnMgPSBhcnJheSgNCgkJCQkJCQkJJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuIChpbnQpICRyb3ctPmlkDQoJCQkJCQkJKTsNCgkJCQkJCQkvLyB1cGRhdGUgdGhlIHJvdw0KCQkJCQkJCSRxdWVyeS0+dXBkYXRlKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcG93ZXInKSktPnNldCgkdXBkYXRlX2ZpZWxkcyktPndoZXJlKCRjb25kaXRpb25zKTsNCgkJCQkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyB0YXJnZXQgdmVyc2lvbiBsZXNzIHRoZW4gb3IgZXF1YWwgdG8gMy4wLjE0DQoJCQlpZiAoY291bnQoJHRoaXMtPkpDQnZlcnNpb24pID09IDMgJiYgJHRoaXMtPkpDQnZlcnNpb25bMF0gPD0gMyAmJiAkdGhpcy0+SkNCdmVyc2lvblsxXSA9PSAwICYmICR0aGlzLT5KQ0J2ZXJzaW9uWzJdIDw9IDE0KQ0KCQkJew0KCQkJCS8vIGNvbnZlcnQgYWxsIHBvd2VycyBpbiBwYXJhbXMgdG8gc3ViZm9ybSBmb3JtYXQNCgkJCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAkdGFibGUgPT4gJGZpZWxkcykNCgkJCQl7DQoJCQkJCS8vIGNoZWNrIGl0IHRoaXMgdGFibGUgYWN0aXZlDQoJCQkJCSRhY3RpdmUgPSAkdGFibGUgLiAnX2hlYWRlcnMnOw0KCQkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQkvLyBnZXQgYWxsIGlkcyBhbmQgZ3VpZHMgb2YgZWFjaCB0YWJsZQ0KCQkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAncGFyYW1zJykpKTsNCgkJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJyAuICR0YWJsZSkpOw0KCQkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQkJew0KCQkJCQkJLy8gZ2V0IHRoZSByb3dzDQoJCQkJCQkkcm93cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQkJCWZvcmVhY2ggKCRyb3dzIGFzICRyb3cpDQoJCQkJCQl7DQoJCQkJCQkJLy8gbG9hZCB2YWx1ZSBub3QgdG8gdXNlIGl0IGFnYWluDQoJCQkJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRyb3ctPnBhcmFtcykpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBub3cgb3BlbiB0aGUgcGFyYW1zDQoJCQkJCQkJCSRwYXJhbXMgPSBqc29uX2RlY29kZSgkcm93LT5wYXJhbXMpOw0KCQkJCQkJCQkkdXBkYXRlID0gZmFsc2U7DQoJCQkJCQkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgYWN0aXZlIGRhdGENCgkJCQkJCQkJaWYgKGlzc2V0KCRwYXJhbXMtPnskYWN0aXZlfSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGFkZCA9PiAkcG93ZXIpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gY2hlY2sgaWYgaGVhZGVycyBpbiBhY3RpdmUNCgkJCQkJCQkJCQlpZiAoaXNzZXQoJHBhcmFtcy0+eyRhY3RpdmV9LT57JGFkZH0pICYmDQoJCQkJCQkJCQkJCSRwYXJhbXMtPnskYWN0aXZlfS0+eyRhZGR9ICYmDQoJCQkJCQkJCQkJCWlzX2FycmF5KCRwYXJhbXMtPnskYWN0aXZlfS0+eyRwb3dlcn0pKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJLy8gZ2V0IHBvd2VycyBhbmQgdXBkYXRlDQoJCQkJCQkJCQkJCSRwb3dlcnMgPSBbXTsNCgkJCQkJCQkJCQkJZm9yZWFjaCAoJHBhcmFtcy0+eyRhY3RpdmV9LT57JHBvd2VyfSBhcyAkbnIgPT4gJGd1aWQpDQoJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCS8vIGNvbnZlcnQgdG8gc3ViLWZvcm0gZm9ybWF0DQoJCQkJCQkJCQkJCQkkcG93ZXJzWyRwb3dlci4kbnJdID0gWydwb3dlcicgPT4gJGd1aWQsICdidWlsZCcgPT4gMiwgJ2FzJyA9PiAnZGVmYXVsdCddOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCS8vIHVwZGF0ZSB0aGUgbG9jYWwgcGFyYW1zDQoJCQkJCQkJCQkJCSRwYXJhbXMtPnskYWN0aXZlfS0+eyRwb3dlcn0gPSAkcG93ZXJzOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCQkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQkJCQkvLyBsb2FkIHRoZSBndWlkDQoJCQkJCQkJCSR1cGRhdGVfZmllbGRzID0gYXJyYXkoDQoJCQkJCQkJCQkkZGItPnF1b3RlTmFtZSgncGFyYW1zJykgLiAnID0gJyAuICRkYi0+cXVvdGUoanNvbl9lbmNvZGUoJHBhcmFtcykpDQoJCQkJCQkJCSk7DQoJCQkJCQkJCS8vIENvbmRpdGlvbnMgZm9yIHdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHVwZGF0ZWQuDQoJCQkJCQkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkJCQkJCQkkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAnIC4gKGludCkgJHJvdy0+aWQNCgkJCQkJCQkJKTsNCgkJCQkJCQkgCS8vIHVwZGF0ZSB0aGUgcm93DQoJCQkJCQkJCSRxdWVyeS0+dXBkYXRlKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJy4gJHRhYmxlKSktPnNldCgkdXBkYXRlX2ZpZWxkcyktPndoZXJlKCRjb25kaXRpb25zKTsNCgkJCQkJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCQkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclByZWZsaWdodFVwZGF0ZV0=', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclJlYWRNZV0=', '', '', 'Builds Complex Joomla Components', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMSW5zdGFsbF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMVW5pbnN0YWxsXQ==', 'Component Builder (Pro)', '.git, .github, .gitignore, .idea, SECURITY.md, .editorconfig, .octojpack', 1, '', 2, 'https://io.vdm.dev/update/componentbuilder_update_server.xml', 'https://dev.vdm.io', '', 'kv00V8vcC2V9uJmCbRyLTsOX93B3ECsPzipj7bZ7PoU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\",\"power_admin_helper\":{\"power_admin_helper0\":{\"power\":\"79d765b3-7319-4988-9730-446c7f347020\",\"as\":\"default\",\"build\":\"1\"}},\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\",\"power_site_helper\":{\"power_site_helper0\":{\"power\":\"79d765b3-7319-4988-9730-446c7f347020\",\"as\":\"default\",\"build\":\"1\"}}}}', 2, 99, '', 1, 56),
(15, '', '', '', '', '', '', '', 1, 1, '', 1, '', 1, '', '', '', '', '', '', 1, '', '', '', '', 1, '{\"addcontributors0\":{\"name\":\"Patrick Hanlon, M.Sc. PH\",\"title\":\"Health Economist\",\"email\":\"Patrick.Hanlon@unibas.ch\",\"website\":\"http:\\/\\/www.swisstph.ch\\/about-us\\/staff\\/detailview.html?tx_x4epersdb_pi1[showUid]=2267&cHash=1b1c5db0808e04d3f1afe0f3a3f67998\",\"use\":\"2\",\"show\":\"3\"},\"addcontributors1\":{\"name\":\"Matthew Black\",\"title\":\"Development Advisor\",\"email\":\"matthew.black@giz.de\",\"website\":\"http:\\/\\/www.giz.de\",\"use\":\"2\",\"show\":\"3\"},\"addcontributors2\":{\"name\":\"Dr. Pascal Geldsetzer\",\"title\":\"Associate Expert\",\"email\":\"pascal.geldsetzer@giz.de\",\"website\":\"http:\\/\\/www.giz.de\",\"use\":\"2\",\"show\":\"1\"}}', 1, 1, 1, 3, 'Llewellyn van der Merwe', '', 'giz.txt', '', '', 'Deutsche Gesellschaft für International Zusammenarbeit (GIZ) Gmb', '3.3.9', 'Copyright (C) 2015. All Rights Reserved', '2016-01-31 20:20:17', 1, '', '', '', '', '', '', '', 1, '', '[Create Epidemiological Profiles] (https://www.staffhealthcbp.com/) for diseases and risks affecting your company. Detailed information on projected work days lost and costs. Create and edit activities and wellness responses for your workplace. Access to Small Business Modelling. Results displayed by gender. Network with other companies and wellness professionals.\r\n\r\nHaving seen the health priorities for your workforce, the tool outputs projections for how the interventions – which you have designed - are expected to benefit the company financially.\r\n\r\nBenefits are calculated based on the model projecting reductions in workdays lost due to sickness, presenteeism and death.', 'llewellyn@vdm.io', 1, '', '', '', '9be33818-561f-4020-9625-653ba0caef01', 'images/giz.png', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2016-03-11 13:48:37', '', 'Cost Benefit Projection', 'costbenefitprojection', '', 2, '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIGdldCB0aGlzIHVzZXIgZ3JvdXBzDQoJCSRncm91cHMJPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCS8vIGdldCBwYXJhbXMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJJGNvdW50cnlHcm91cHMgCQkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnY291bnRyeXVzZXInKTsNCgkJJHNlcnZpY2Vwcm92aWRlckdyb3VwcwkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnc2VydmljZXByb3ZpZGVydXNlcicpOw0KCQkkbWVtYmVyR3JvdXBzIAkJCT0gKGFycmF5KSAkcGFyYW1zLT5nZXQoJ21lbWJlcnVzZXInKTsNCgkJLy8gbm93IGNoZWNrIGluIHdoYXQgZ3JvdXAgdGhpcyB1c2VyIGJlbG9uZ3MNCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkY291bnRyeUdyb3VwcywgJGdyb3VwcykpDQoJCXsNCgkJCS8vIGlzIGNvdW50cnkNCgkJCXJldHVybiAzOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRzZXJ2aWNlcHJvdmlkZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBzZXJ2aWNlcHJvdmlkZXINCgkJCXJldHVybiAyOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBtZW1iZXINCgkJCXJldHVybiAxOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0NvbXBhbnkoJGlkKQ0KCXsNCgkJLy8gY2hlY2sgdGhlIHBlciB2YWx1ZQ0KCQkkbG9jayA9IHNlbGY6OmdldFZhcignY29tcGFueScsICRpZCwgJ2lkJywgJ3BlcicpOw0KCQlpZiAoIDEgPT0gJGxvY2spDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSW50ZXJ2ZXRpb25BY2Nlc3MoJGlkLCAkc2hhcmUgPSBudWxsLCAkY29tcCA9IG51bGwpDQoJew0KICAgICAgICAgICAgICAgIC8vIHNldCBzaGFyZSB2YWx1ZSBpZiBub3Qgc2V0DQogICAgICAgICAgICAgICAgaWYgKCEkc2hhcmUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNoYXJlID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ3NoYXJlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHNoYXJlZCB3ZSBzZXQgbmVlZGVkIHZhbHVlcw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoaXMgaW50ZXJ2ZW50aW9ucyBjb21wYW55IChvd25lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkY29tcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ2NvbXBhbnknKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgaGlzIGNvbXBhbmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFuaWVzID0gc2VsZjo6aGlzQ29tcGFuaWVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB1c2VyIHR5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJUeXBlID0gc2VsZjo6dXNlcklzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gc2hhcmVkIHZhbHVlIHdlIHdpbGwgcmVzcG9uZA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hhcmluZyBpcyAxIG9ubHkgb3duZXIgbWF5IHNlZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVzZXJUeXBlID09IDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRjb21wLCAkY29tcGFuaWVzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaGFyaW5nIGlzIDIgb25seSBvd25lciBhbmQgc2VydmljZSBwcm92aWRlciBtYXkgc2VlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyVHlwZSA9PSAxIHx8ICR1c2VyVHlwZSA9PSAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29tcCwgJGNvbXBhbmllcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RIaXNVc2VycygkaWQgPSBudWxsKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGFsbCB0aGUgdXNlcnMgdG8ga2VlcA0KCQkka2VlcFVzZXJzID0gc2VsZjo6aGlzVXNlcnMoJGlkKTsNCgkJaWYgKGlzX2FycmF5KCRrZWVwVXNlcnMpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhvc2Ugbm90IHRvIGtlZXANCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ2lkJywka2VlcFVzZXJzLCd1c2VycycsJ2lkJywnTk9UIElOJywnJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzVXNlcnMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBoaW1zZWxmKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIGFycmF5KCRpZCk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvbXBhbmllcyB1c2VycyB0aGF0IGJlbG9uZyB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgaGltc2VsZikNCgkJCWNhc2UgMjoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwCQk9IHNlbGY6OmdldElkcygnaWQnLCRjb21wYW5pZXMsJ2NvbXBhbnknLCd1c2VyJyk7DQoJCQkvLyBub3cgY2hlY2sgdGhlIHJlc3VsdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRrZWVwKSkNCgkJCXsNCgkJCQkka2VlcFtdID0gJGlkOw0KCQkJCXJldHVybiBhcnJheV91bmlxdWUoJGtlZXApOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQkvLyBjb3VudHJ5IChvbmx5IGxvYWQgY29tcGFuaWVzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgY291bnRyeSkNCgkJCWNhc2UgMzoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwQwkJPSBzZWxmOjpnZXRJZHMoJ2lkJywkY29tcGFuaWVzLCdjb21wYW55JywndXNlcicpOw0KCQkJJHNlcnZpY2UJPSBzZWxmOjpoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCk7DQoJCQkka2VlcFMJCT0gc2VsZjo6Z2V0SWRzKCdpZCcsJHNlcnZpY2UsJ3NlcnZpY2VfcHJvdmlkZXInLCd1c2VyJyk7DQoJCQkvLyBtZXJnZSB0aGVzZSB2YWx1ZXMNCgkJCSRrZWVwCQk9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRrZWVwQywka2VlcFMpKTsNCgkJCS8vIG5vdyBjaGVjayB0aGUgcmVzdWx0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtlZXApKQ0KCQkJew0KCQkJCSRrZWVwW10gPSAkaWQ7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgka2VlcCk7DQoJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNDb21wYW5pZXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIG1lbWJlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY29tcGFueScpOw0KCQkJYnJlYWs7DQoJCQkvLyBzZXJ2ZXMgcHJvdmlkZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdzZXJ2aWNlX3Byb3ZpZGVyJyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnc2VydmljZV9wcm92aWRlcicpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvdW50cnkpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdjb3VudHJ5JyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY291bnRyeScpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRpZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJaWYgKDEgPT0gJGlzKSAvLyBtZW1iZXINCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygndXNlcicsJGlkLCdjb21wYW55Jywnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCWVsc2VpZiAoMiA9PSAkaXMpIC8vIHNlcnZlcyBwcm92aWRlcg0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoc2VsZjo6Z2V0SWQoJ3NlcnZpY2VfcHJvdmlkZXInLCRpZCkpOw0KCQl9DQoJCWVsc2VpZiAoMyA9PSAkaXMpIC8vIGNvdW50cnkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygnY291bnRyeScsc2VsZjo6Z2V0SWRzKCd1c2VyJywkaWQsJ2NvdW50cnknKSwnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0NvdW50cmllcygkdXNlcklkID0gbnVsbCwgJGlkID0gbnVsbCwgJGlzX3R5cGUgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQllbHNlaWYoJGlkID4gMCAmJiAkaXNfdHlwZSkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OmdldElkKCRpc190eXBlLCRpZCwnaWQnLCd1c2VyJyk7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJc3dpdGNoKCRpcykNCgkJew0KCQkJLy8gbWVtYmVyIChvbmx5IGxvYWQgY291bnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBtZW1iZXIgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCR1c2VySWQsJ2NvbXBhbnknLCdjb3VudHJ5Jyk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvdW50cnkgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgdXNlcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBhcnJheShzZWxmOjpnZXRJZCgnc2VydmljZV9wcm92aWRlcicsJHVzZXJJZCwndXNlcicsJ2NvdW50cnknKSk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb250cnllIHRoYXQgYmVsb25nIHRvIHRoZSBjb3VudHJ5IHVzZXIpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCd1c2VyJywkdXNlcklkLCdjb3VudHJ5JywnaWQnKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0N1cnJlbmNpZXMoJHVzZXJJZCA9IG51bGwsICRpZCA9IG51bGwsICRpc190eXBlID0gbnVsbCkNCgl7DQoJCSRjb3VudHJpZXMgPSBzZWxmOjpoaXNDb3VudHJpZXMoJHVzZXJJZCwkaWQsJGlzX3R5cGUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvdW50cmllcykpDQoJCXsNCgkJCSRjdXJyZW5jaWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjb3VudHJpZXMgYXMgJGNvdW50cnkpDQoJCQl7DQoJCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQkJJGN1cnJlbmNpZXNbXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ2N1cnJlbmN5JyksICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY2llcykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jaWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbmN5RGV0YWlscygkaWQgPSBmYWxzZSkNCgl7DQoJCWlmICghJGlkKQ0KCQl7DQoJCQkkaWQgPSBzZWxmOjpoaXNDdXJyZW5jaWVzKCk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZCkpDQoJCXsNCgkJCSRpZHMgPSBhcnJheV92YWx1ZXMoJGlkKTsNCgkJCSRpZCA9ICRpZFswXTsNCgkJfQ0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fY29zdGJlbmVmaXRwcm9qZWN0aW9uX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsJGN1cnJlbmN5ID0gZmFsc2UpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGEgbnVtYmVyDQoJCWlmIChpc19udW1lcmljKCRudW1iZXIpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgbmVnYXRpdmUgZmluZGVyIGZpbGUNCgkJCWluY2x1ZGVfb25jZSAnbmVnYXRpdmVmaW5kZXIucGhwJzsNCgkJCS8vIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUNCgkJCSRuZWdhdGl2ZUZpbmRlck9iaiA9IG5ldyBOZWdhdGl2ZUZpbmRlcihuZXcgRXhwcmVzc2lvbigiJG51bWJlciIpKTsNCgkJCSRuZWdhdGl2ZSA9ICRuZWdhdGl2ZUZpbmRlck9iai0+aXNJdE5lZ2F0aXZlKCkgPyBUUlVFIDogRkFMU0U7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUiEgKCcuJG51bWJlci4nKSBpcyBub3QgYSBudW1iZXIhJyk7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Y3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9CQ0KCQllbHNlDQoJCXsNCgkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3kpOw0KCQl9DQoJCS8vIHNldCB0aGUgbnVtYmVyIHRvIGN1cnJlbmN5DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY3kpKQ0KCQl7DQoJCQlpZiAoISRuZWdhdGl2ZSkNCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9wb3NpdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJysnOw0KCQkJfQ0KCQkJZWxzZSANCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9uZWdhdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJy0nOw0KCQkJCSRudW1iZXIgPSBhYnMoJG51bWJlcik7DQoJCQl9DQoJCQkkc2V0dXBOdW1iZXIgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkbnVtYmVyLCAoaW50KSRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlLCAkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxzeW1ib2wsICcgJyk7IC8vJGN1cnJlbmN5LT5jdXJyZW5jeV90aG91c2FuZHMgVE9ETyk7DQoJCQkkc2VhcmNoID0gYXJyYXkoJ3tzaWdufScsICd7bnVtYmVyfScsICd7c3ltYm9sfScpOw0KCQkJJHJlcGxhY2UgPSBhcnJheSgkc2lnbiwgJHNldHVwTnVtYmVyLCAkY3VycmVuY3ktPmN1cnJlbmN5X3N5bWJvbCk7DQoJCQkkbW9uZXlNYWRlID0gc3RyX3JlcGxhY2UgKCRzZWFyY2gsJHJlcGxhY2UsJGZvcm1hdCk7DQoNCgkJCXJldHVybiAkbW9uZXlNYWRlOw0KCQl9DQoJCXJldHVybiAkbnVtYmVyOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SWQoJHRhYmxlLCAkd2hlcmUgPSBudWxsICwgJHdoZXJlU3RyaW5nID0gJ3VzZXInLCAkd2hhdCA9ICdpZCcpDQoJew0KCQlpZighJHdoZXJlKQ0KCQl7DQoJCQkkd2hlcmUgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQl9DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0KSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCR3aGVyZVN0cmluZykgLiAnID0gJy4oaW50KSAkd2hlcmUpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJZHMoJHdoZXJlU3RyaW5nLCR3aGVyZSwkdGFibGUsJHdoYXQgPSAnaWQnLCRvcGVyYXRvciA9ICdJTicsJG1haW5fID0gJ1tbW2NvbXBvbmVudF1dXV8nKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkd2hlcmUpICYmICR3aGVyZSA+IDApDQoJCXsNCgkJCSR3aGVyZSA9IGFycmF5KCR3aGVyZSk7DQoJCX0NCg0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHdoZXJlKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0KSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX18nLiRtYWluXy4kdGFibGUpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgJy4kb3BlcmF0b3IuJyAoJyAuIGltcGxvZGUoJywnLCR3aGVyZSkgLiAnKScpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgkZGItPmxvYWRDb2x1bW4oKSk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWUoJGlkKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ25hbWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQlyZXR1cm4gJGRiLT5sb2FkUmVzdWx0KCk7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tYmluZSgkaXRlbXMpDQoJew0KCQkvLyBtYWtlIHN1cmUgdGhlIHN1bSBjbGFzcyBpcyBsb2FkZWQNCgkJSkxvYWRlcjo6aW1wb3J0KCdzdW1jb21iaW5lJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IgLiAnL2hlbHBlcnMnKTsNCgkJLy8gcmV0dXJuIHRoZSByZXN1bHQNCgkJcmV0dXJuIG5ldyBTdW1Db21iaW5lKCRpdGVtcyk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYWxjdWxhdGUoJGlkLCRkYXRhKQ0KCXsNCgkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSkpID09PSAkZGF0YSl7DQoJCQkvLyB3ZSBoYXZlIHZhbGlkIGRhdGEgbm93IGNoZWNrIGlmIHN0b3JlZCByZXN1bHQgbmVlZHMgdG8gYmUgdXBkYXRlZC4NCgkJCSRmaWxlTmFtZQk9IG1kNSgkZGF0YSk7DQoJCQkkZGF0YQkJPSB1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCRkYXRhKSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBub3QgdmFsaWQgZGF0YSBmaXJzdCBnZXQgdGhlIHZhbGlkIGRhdGENCgkJCSRtb2RlbAkJPSBzZWxmOjpnZXRNb2RlbCgnY29tcGFueWRhdGEnKTsNCgkJCSRkYXRhIAkJPSAkbW9kZWwtPmdldEl0ZW0oKGludCkkaWQpOw0KCQkJLy8gd2UgaGF2ZSB2YWxpZCBkYXRhIG5vdyBjaGVjayBpZiBzdG9yZWQgcmVzdWx0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuDQoJCQkkZmlsZU5hbWUJPSBtZDUoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJGRhdGEpKSk7DQoJCX0NCgkJLy8gc2V0IHNvbWUgZGVmYXVsdHMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJJHBhdGgJPSAkcGFyYW1zLT5nZXQoJ3Jlc3VsdHBhdGgnLCBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMnKTsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJGZ1bGxQYXRoID0gJHBhdGguJy8nLiRmaWxlTmFtZS4nLmpzb24nOw0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoZmlsZV9leGlzdHMoJGZ1bGxQYXRoKSAmJiAoKCRqc29uRmlsZSA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJGZ1bGxQYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkpDQoJCXsNCgkJCS8vIGdyZWF0IHdlIGFyZSBkb25lIHJldHVybiByZXN1bHRzDQoJCQlyZXR1cm4ganNvbl9kZWNvZGUoJGpzb25GaWxlKTsNCgkJfQ0KCQkvLyBkbyB0aGUgY2FsY3VsYXRpb24gYWdhaW4NCgkJJHJlc3VsdCA9IHNlbGY6OmRvQ2FsY3VsYXRpb24oJGRhdGEpOw0KCQkvLyBkaWQgd2UgZ2V0IGEgdmFsaWQgcmVzdWx0IHNldA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHJlc3VsdCkgfHwgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHJlc3VsdCkpDQoJCXsNCgkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCXNlbGY6OnNhdmVKc29uKCRyZXN1bHQsICRmdWxsUGF0aCwgJHBhdGgpOw0KCQkJLy8gcmV0dXJuIHJlc3VsdCBzZXQNCgkJCXJldHVybiAganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoJHJlc3VsdCkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRvQ2FsY3VsYXRpb24oJGRhdGEpDQoJew0KCQkvLyBkaWQgd2UgZ2V0IGEgdmFsaWQgcmVzdWx0IHNldA0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdGhlIHN1bSBjbGFzcyBpcyBsb2FkZWQNCgkJCUpMb2FkZXI6OmltcG9ydCgnc3VtJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IgLiAnL2hlbHBlcnMnKTsNCgkJCS8vIHJldHVybiB0aGUgcmVzdWx0DQoJCQlyZXR1cm4gbmV3IFN1bSgkZGF0YSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2F2ZUpzb24oJGRhdGEsICRmdWxsUGF0aCwgJHBhdGggPSBfX0RJUl9fKQ0KCXsNCgkJLy8gY2hlY2sgaWYgcGF0aCBleGlzdHMNCgkJaWYgKCFmaWxlX2V4aXN0cygkcGF0aCkpDQoJCXsNCgkJCS8vIGlmIG5vdCB0aGUgbWFrZSB0aGUgcGF0aA0KCQkJbWtkaXIoJHBhdGgsIDA3NTUsIHRydWUpOw0KCQl9DQoJCS8vIGNoZWNrIHRoYXQgdGhlIHN0cmluZyBpcyBqc29uDQoJCWlmICghc2VsZjo6aXNKc29uKCRkYXRhKSkNCgkJew0KCQkJLy8ganNvbiBlbmNvZGUgaWYgbm90IGpzb24NCgkJCSRkYXRhID0ganNvbl9lbmNvZGUoJGRhdGEpOw0KCQl9DQoJCS8vIG1ha2Ugc3VyZSB0aGlzIGlzIGEgc3RyaW5nDQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCSRmcCA9IGZvcGVuKCRmdWxsUGF0aCwgJ3cnKTsNCgkJCWZ3cml0ZSgkZnAsICRkYXRhKTsNCgkJCWZjbG9zZSgkZnApOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNKc29uKCRzdHJpbmcpDQoJew0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHN0cmluZykpDQoJCXsNCgkJCWpzb25fZGVjb2RlKCRzdHJpbmcpOw0KCQkJcmV0dXJuIChqc29uX2xhc3RfZXJyb3IoKSA9PT0gSlNPTl9FUlJPUl9OT05FKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRVc2VySGFjaygpDQoJew0KCQkkZmlsZXMgPSBhcnJheSgNCgkJCTAgPT4gYXJyYXkoDQoJCQkJJ3BhdGgnID0+IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3VzZXJzL21vZGVscy91c2Vycy5waHAnLA0KCQkJCSdyZXBsYWNlJyA9PiBhcnJheSgNCgkJCQkJIkpNb2RlbExpc3Rcbntcblx0LyoqIiA9PiAiSk1vZGVsTGlzdFxue1xuXHQvKlxuXHQqIEEgVkRNIGhhY2sgdG8gcmVzdHJpY3QgdXNlcnMgYmFzZWQgb24gdXNlcidzIHJlbGF0aW9uIHRvIHRoZWlyIGNvbXBvbmVudFxuXHQqXG5cdCogVGhpcyBqdXN0IHByb29mcyB0aGUgdGhlIGhhY2sgaXMgaW5wbGFjZVxuXHQqL1xuXHRwdWJsaWMgXCRyZXN0cmljdFVzZXJzID0gdHJ1ZTtcblxuXHQvKioiLA0KCQkJCQkiXCRleGNsdWRlZCA9IGpzb25fZGVjb2RlKGJhc2U2NF9kZWNvZGUoXCRhcHAtPmlucHV0LT5nZXQoJ2V4Y2x1ZGVkJywgJycsICdCQVNFNjQnKSkpOyIgPT4gIlwkZXhjbHVkZWQgPSBqc29uX2RlY29kZShiYXNlNjRfZGVjb2RlKFwkYXBwLT5pbnB1dC0+Z2V0KCdleGNsdWRlZCcsICcnLCAnQkFTRTY0JykpKTtcblx0XHQvLyBhZGQgdGhlIGdsb2JhbCBleGNsdWRlIGZvciBbW1tjb21wb25lbnRdXV1cblx0XHRpZiAoXCR0aGlzLT5yZXN0cmljdFVzZXJzKVxuXHRcdHtcblx0XHRcdEpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgY29tcG9uZW50IGlzIGluc3RhbGxlZFxuXHRcdFx0aWYgKGNsYXNzX2V4aXN0cygnW1tbQ29tcG9uZW50XV1dSGVscGVyJykpXG5cdFx0XHR7XG5cdFx0XHRcdFwkZXhjbHVkZWRHbG9iYWwgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Om5vdEhpc1VzZXJzKCk7XG5cdFx0XHRcdGlmIChcJGV4Y2x1ZGVkR2xvYmFsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCRleGNsdWRlZCA9IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6Om1lcmdlKGFycmF5KFwkZXhjbHVkZWRHbG9iYWwsXCRleGNsdWRlZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSIpDQoJCQkpLA0KCQkJMSA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvbW9kZWxzL3VzZXIucGhwJywNCgkJCQkncmVwbGFjZScgPT4gYXJyYXkoDQoJCQkJCSIvLyBUaGUgdXNlciBzaG91bGQgbm90IGJlIGFibGUgdG8gc2V0IHRoZSByZXF1aXJlUmVzZXQgdmFsdWUgb24gdGhlaXIgb3duIGFjY291bnQiID0+ICJpZiAoIUZhY3Rvcnk6OmdldFVzZXIoKS0+YXV0aG9yaXNlKCdjb3JlLmFkbWluJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSAmJiAhRmFjdG9yeTo6Z2V0VXNlcigpLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fW1tbY29tcG9uZW50XV1dJykpDQoJCXsNCgkJCS8vIGxvYWQgb3VyIGhlbHBlciBjbGFzcyBmb3IgQ29zdCBCZW5lZml0IFByb2plY3Rpb24gQ29tcG9uZW50DQoJCQlKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KCQkJLy8gY2hlY2sgaWYgdGhlIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQNCgkJCWlmIChjbGFzc19leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicpKQ0KCQkJew0KCQkJCVwkaXMgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OnVzZXJJcygpOw0KCQkJCXN3aXRjaChcJGlzKQ0KCQkJCXsNCgkJCQkJY2FzZSAxOg0KCQkJCQljYXNlIDI6DQoJCQkJCWNhc2UgMzoNCgkJCQkJCS8vIERpc2FibGUgZmllbGRzIGZvciBkaXNwbGF5Lg0KCQkJCQkJXCRmb3JtLT5yZW1vdmVHcm91cCgncGFyYW1zJyk7DQoJCQkJCQkvLyBkaXNhYmxlIHNvbWUgZmllbGRzDQoJCQkJCQlcJGZvcm0tPnNldEZpZWxkQXR0cmlidXRlKCdzZW5kRW1haWwnLCAnZGlzYWJsZWQnLCAndHJ1ZScpOw0KCQkJCQkJXCRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgnc2VuZEVtYWlsJywgJ2ZpbHRlcicsICd1bnNldCcpOw0KCQkJCQkJXCRmb3JtLT5yZW1vdmVGaWVsZCgnc2VuZEVtYWlsJyk7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCS8vIFRoZSB1c2VyIHNob3VsZCBub3QgYmUgYWJsZSB0byBzZXQgdGhlIHJlcXVpcmVSZXNldCB2YWx1ZSBvbiB0aGVpciBvd24gYWNjb3VudCIsDQoJCQkJCSJcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5tYW5hZ2UnLCAnY29tX3VzZXJzJykiID0+ICJcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5tYW5hZ2UnLCAnY29tX3VzZXJzJykgJiYgIFwkdXNlci0+YXV0aG9yaXNlKCdjb3JlLmFkbWluJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSIpDQoJCQkpLA0KCQkJMiA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvY29udHJvbGxlcnMvdXNlci5waHAnLA0KCQkJCSdyZXBsYWNlJyA9PiBhcnJheSgNCgkJCQkJInJldHVybiBwYXJlbnQ6OmFsbG93RWRpdChcJGRhdGEsIFwka2V5KTsiID0+ICJpZiAoIUZhY3Rvcnk6OmdldFVzZXIoKS0+YXV0aG9yaXNlKCdjb3JlLmFkbWluJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSAmJiAhRmFjdG9yeTo6Z2V0VXNlcigpLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fW1tbY29tcG9uZW50XV1dJykpDQoJCXsNCgkJCS8vIGxvYWQgb3VyIGhlbHBlciBjbGFzcyBmb3IgQ29zdCBCZW5lZml0IFByb2plY3Rpb24gQ29tcG9uZW50DQoJCQlKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KCQkJLy8gY2hlY2sgaWYgdGhlIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQNCgkJCWlmIChjbGFzc19leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicpKQ0KCQkJew0KCQkJCVwkaGlzVXNlcnMgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Omhpc1VzZXJzKCk7DQoJCQkJaWYgKCFpbl9hcnJheShcJGRhdGFbXCRrZXldLFwkaGlzVXNlcnMpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBwYXJlbnQ6OmFsbG93RWRpdChcJGRhdGEsIFwka2V5KTsiKQ0KCQkJKSwNCgkJCTMgPT4gYXJyYXkoDQoJCQkJJ3BhdGgnID0+IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3VzZXJzL3ZpZXdzL3VzZXJzL3ZpZXcuaHRtbC5waHAnLA0KCQkJCSdyZXBsYWNlJyA9PiBhcnJheSgNCgkJCQkJImlmIChcJGNhbkRvLT5nZXQoJ2NvcmUuY3JlYXRlJykpIiA9PiAiaWYgKFwkY2FuRG8tPmdldCgnY29yZS5jcmVhdGUnKSAmJiBcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5hZG1pbicsICdjb21fY29zdGJlbmVmaXRwcm9qZWN0aW9uJykpIikNCgkJCSksDQoJCQk0ID0+IGFycmF5KA0KCQkJCSdwYXRoJyA9PiBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV91c2Vycy92aWV3cy91c2Vycy92aWV3Lmh0bWwucGhwJywNCgkJCQkncmVwbGFjZScgPT4gYXJyYXkoCQkJCQkNCgkJCQkJIi8vIEFkZCBhIGJhdGNoIGJ1dHRvblxuXHRcdGlmIChcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5jcmVhdGUnLCAnY29tX3VzZXJzJykiID0+ICIvLyBBZGQgYSBiYXRjaCBidXR0b24gb25seSBpZiB1c2VyIGFsc28gaGFzIGFkbWluIHJpZ2h0IGluIGNvbV9jb3N0YmVuZWZpdHByb2plY3Rpb25cblx0XHRpZiAoXCR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUuY3JlYXRlJywgJ2NvbV91c2VycycpXG5cdFx0XHQmJiBcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5hZG1pbicsICdjb21fY29zdGJlbmVmaXRwcm9qZWN0aW9uJykiKQ0KCQkJKQ0KCQkpOw0KCQkvLyBjaGVjayBpZiBoYWNrIGlzIHN0aWxsIHNldA0KCQlyZXR1cm4gc2VsZjo6c2V0SGFjaygkZmlsZXMpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SGFjaygkZmlsZXMpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpbGVzKSkNCgkJew0KCQkJJGNoZWNraW5nID0gYXJyYXkoKTsNCgkJCS8vIGdldCB0aGUgZmlsZSB0b29scw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZmlsZScpOw0KCQkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKQ0KCQkJew0KCQkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJCQkvLyBnZXQgcmVsYXRlZCBmaWxlcw0KCQkJCSRhY3R1YWxGaWxlID0gSkZpbGU6OnJlYWQoJGZpbGVbJ3BhdGgnXSk7DQoJCQkJLy8gY2hlY2sgaWYgaGFjayBpcyBzdGlsbCBzZXQNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpbGVbJ3JlcGxhY2UnXSkpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkZmlsZVsncmVwbGFjZSddIGFzICRvcmlnaW5hbCA9PiAkdXBkYXRlU3RyaW5nKQ0KCQkJCQl7DQoJCQkJCQlpZiAoc3RycG9zKCRhY3R1YWxGaWxlLCR1cGRhdGVTdHJpbmcpID09PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBzZXQgdGhlIGhhY2sgYWdhaW4NCgkJCQkJCQkkdXBkYXRlID0gdHJ1ZTsNCgkJCQkJCQkkYWN0dWFsRmlsZSA9IHN0cl9yZXBsYWNlKCRvcmlnaW5hbCwgJHVwZGF0ZVN0cmluZywgJGFjdHVhbEZpbGUpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkdXBkYXRlKQ0KCQkJCXsNCgkJCQkJJGRvbmVbJGZpbGVbJ3BhdGgnXV0gPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjp3cml0ZSgkZmlsZVsncGF0aCddLCRhY3R1YWxGaWxlKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGRvbmVbJGZpbGVbJ3BhdGgnXV0gPSB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkZG9uZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB3cml0ZUZpbGUoJHBhdGgsJGRhdGEpDQoJew0KCQkkZmggPSBmb3BlbigkcGF0aCwgInciKTsNCgkJaWYgKCFpc19yZXNvdXJjZSgkZmgpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJaWYgKGZ3cml0ZSgkZmgsICRkYXRhKSkNCgkJew0KCQkJLy8gY2xvc2UgZmlsZS4NCgkJCWZjbG9zZSgkZmgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gY2xvc2UgZmlsZS4NCgkJZmNsb3NlKCRmaCk7DQoJCXJldHVybiBmYWxzZTsNCgl9', '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIGdldCB0aGlzIHVzZXIgZ3JvdXBzDQoJCSRncm91cHMJPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCS8vIGdldCBwYXJhbXMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJJGNvdW50cnlHcm91cHMgCQkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnY291bnRyeXVzZXInKTsNCgkJJHNlcnZpY2Vwcm92aWRlckdyb3VwcwkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnc2VydmljZXByb3ZpZGVydXNlcicpOw0KCQkkbWVtYmVyR3JvdXBzIAkJCT0gKGFycmF5KSAkcGFyYW1zLT5nZXQoJ21lbWJlcnVzZXInKTsNCgkJLy8gbm93IGNoZWNrIGluIHdoYXQgZ3JvdXAgdGhpcyB1c2VyIGJlbG9uZ3MNCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkY291bnRyeUdyb3VwcywgJGdyb3VwcykpDQoJCXsNCgkJCS8vIGlzIGNvdW50cnkNCgkJCXJldHVybiAzOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRzZXJ2aWNlcHJvdmlkZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBzZXJ2aWNlcHJvdmlkZXINCgkJCXJldHVybiAyOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBtZW1iZXINCgkJCXJldHVybiAxOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSW50ZXJ2ZXRpb25BY2Nlc3MoJGlkLCAkc2hhcmUgPSBudWxsLCAkY29tcCA9IG51bGwpDQoJew0KICAgICAgICAgICAgICAgIC8vIHNldCBzaGFyZSB2YWx1ZSBpZiBub3Qgc2V0DQogICAgICAgICAgICAgICAgaWYgKCEkc2hhcmUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNoYXJlID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ3NoYXJlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHNoYXJlZCB3ZSBzZXQgbmVlZGVkIHZhbHVlcw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoaXMgaW50ZXJ2ZW50aW9ucyBjb21wYW55IChvd25lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkY29tcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ2NvbXBhbnknKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgaGlzIGNvbXBhbmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFuaWVzID0gc2VsZjo6aGlzQ29tcGFuaWVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB1c2VyIHR5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJUeXBlID0gc2VsZjo6dXNlcklzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gc2hhcmVkIHZhbHVlIHdlIHdpbGwgcmVzcG9uZA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hhcmluZyBpcyAxIG9ubHkgb3duZXIgbWF5IHNlZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVzZXJUeXBlID09IDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRjb21wLCAkY29tcGFuaWVzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaGFyaW5nIGlzIDIgb25seSBvd25lciBhbmQgc2VydmljZSBwcm92aWRlciBtYXkgc2VlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyVHlwZSA9PSAxIHx8ICR1c2VyVHlwZSA9PSAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29tcCwgJGNvbXBhbmllcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RIaXNVc2VycygkaWQgPSBudWxsKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGFsbCB0aGUgdXNlcnMgdG8ga2VlcA0KCQkka2VlcFVzZXJzID0gc2VsZjo6aGlzVXNlcnMoJGlkKTsNCgkJaWYgKGlzX2FycmF5KCRrZWVwVXNlcnMpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhvc2Ugbm90IHRvIGtlZXANCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ2lkJywka2VlcFVzZXJzLCd1c2VycycsJ2lkJywnTk9UIElOJywnJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzVXNlcnMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBoaW1zZWxmKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIGFycmF5KCRpZCk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvbXBhbmllcyB1c2VycyB0aGF0IGJlbG9uZyB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgaGltc2VsZikNCgkJCWNhc2UgMjoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwCQk9IHNlbGY6OmdldElkcygnaWQnLCRjb21wYW5pZXMsJ2NvbXBhbnknLCd1c2VyJyk7DQoJCQkvLyBub3cgY2hlY2sgdGhlIHJlc3VsdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRrZWVwKSkNCgkJCXsNCgkJCQkka2VlcFtdID0gJGlkOw0KCQkJCXJldHVybiBhcnJheV91bmlxdWUoJGtlZXApOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQkvLyBjb3VudHJ5IChvbmx5IGxvYWQgY29tcGFuaWVzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgY291bnRyeSkNCgkJCWNhc2UgMzoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwQwkJPSBzZWxmOjpnZXRJZHMoJ2lkJywkY29tcGFuaWVzLCdjb21wYW55JywndXNlcicpOw0KCQkJJHNlcnZpY2UJPSBzZWxmOjpoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCk7DQoJCQkka2VlcFMJCT0gc2VsZjo6Z2V0SWRzKCdpZCcsJHNlcnZpY2UsJ3NlcnZpY2VfcHJvdmlkZXInLCd1c2VyJyk7DQoJCQkvLyBtZXJnZSB0aGVzZSB2YWx1ZXMNCgkJCSRrZWVwCQk9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRrZWVwQywka2VlcFMpKTsNCgkJCS8vIG5vdyBjaGVjayB0aGUgcmVzdWx0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtlZXApKQ0KCQkJew0KCQkJCSRrZWVwW10gPSAkaWQ7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgka2VlcCk7DQoJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNDb21wYW5pZXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIG1lbWJlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY29tcGFueScpOw0KCQkJYnJlYWs7DQoJCQkvLyBzZXJ2ZXMgcHJvdmlkZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdzZXJ2aWNlX3Byb3ZpZGVyJyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnc2VydmljZV9wcm92aWRlcicpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvdW50cnkpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdjb3VudHJ5JyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY291bnRyeScpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRpZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJaWYgKDEgPT0gJGlzKSAvLyBtZW1iZXINCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygndXNlcicsJGlkLCdjb21wYW55Jywnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCWVsc2VpZiAoMiA9PSAkaXMpIC8vIHNlcnZlcyBwcm92aWRlcg0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoc2VsZjo6Z2V0SWQoJ3NlcnZpY2VfcHJvdmlkZXInLCRpZCkpOw0KCQl9DQoJCWVsc2VpZiAoMyA9PSAkaXMpIC8vIGNvdW50cnkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygnY291bnRyeScsc2VsZjo6Z2V0SWRzKCd1c2VyJywkaWQsJ2NvdW50cnknKSwnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0NvdW50cmllcygkdXNlcklkID0gbnVsbCwgJGlkID0gbnVsbCwgJGlzX3R5cGUgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQllbHNlaWYoJGlkID4gMCAmJiAkaXNfdHlwZSkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OmdldElkKCRpc190eXBlLCRpZCwnaWQnLCd1c2VyJyk7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJc3dpdGNoKCRpcykNCgkJew0KCQkJLy8gbWVtYmVyIChvbmx5IGxvYWQgY291bnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBtZW1iZXIgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCR1c2VySWQsJ2NvbXBhbnknLCdjb3VudHJ5Jyk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvdW50cnkgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgdXNlcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBhcnJheShzZWxmOjpnZXRJZCgnc2VydmljZV9wcm92aWRlcicsJHVzZXJJZCwndXNlcicsJ2NvdW50cnknKSk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb250cnllIHRoYXQgYmVsb25nIHRvIHRoZSBjb3VudHJ5IHVzZXIpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCd1c2VyJywkdXNlcklkLCdjb3VudHJ5JywnaWQnKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0N1cnJlbmNpZXMoJHVzZXJJZCA9IG51bGwsICRpZCA9IG51bGwsICRpc190eXBlID0gbnVsbCkNCgl7DQoJCSRjb3VudHJpZXMgPSBzZWxmOjpoaXNDb3VudHJpZXMoJHVzZXJJZCwkaWQsJGlzX3R5cGUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvdW50cmllcykpDQoJCXsNCgkJCSRjdXJyZW5jaWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjb3VudHJpZXMgYXMgJGNvdW50cnkpDQoJCQl7DQoJCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQkJJGN1cnJlbmNpZXNbXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ2N1cnJlbmN5JyksICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY2llcykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jaWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbmN5RGV0YWlscygkaWQgPSBmYWxzZSkNCgl7DQoJCWlmICghJGlkKQ0KCQl7DQoJCQkkaWQgPSBzZWxmOjpoaXNDdXJyZW5jaWVzKCk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZCkpDQoJCXsNCgkJCSRpZHMgPSBhcnJheV92YWx1ZXMoJGlkKTsNCgkJCSRpZCA9ICRpZFswXTsNCgkJfQ0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsJGN1cnJlbmN5ID0gZmFsc2UpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGEgbnVtYmVyDQoJCWlmIChpc19udW1lcmljKCRudW1iZXIpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgbmVnYXRpdmUgZmluZGVyIGZpbGUNCgkJCWluY2x1ZGVfb25jZSAnbmVnYXRpdmVmaW5kZXIucGhwJzsNCgkJCS8vIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUNCgkJCSRuZWdhdGl2ZUZpbmRlck9iaiA9IG5ldyBOZWdhdGl2ZUZpbmRlcihuZXcgRXhwcmVzc2lvbigiJG51bWJlciIpKTsNCgkJCSRuZWdhdGl2ZSA9ICRuZWdhdGl2ZUZpbmRlck9iai0+aXNJdE5lZ2F0aXZlKCkgPyBUUlVFIDogRkFMU0U7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUiEgKCcuJG51bWJlci4nKSBpcyBub3QgYSBudW1iZXIhJyk7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Y3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9CQ0KCQllbHNlDQoJCXsNCgkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3kpOw0KCQl9DQoJCS8vIHNldCB0aGUgbnVtYmVyIHRvIGN1cnJlbmN5DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY3kpKQ0KCQl7DQoJCQlpZiAoISRuZWdhdGl2ZSkNCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9wb3NpdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJysnOw0KCQkJfQ0KCQkJZWxzZSANCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9uZWdhdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJy0nOw0KCQkJCSRudW1iZXIgPSBhYnMoJG51bWJlcik7DQoJCQl9DQoJCQkkc2V0dXBOdW1iZXIgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkbnVtYmVyLCAoaW50KSRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlLCAkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxzeW1ib2wsICcgJyk7IC8vJGN1cnJlbmN5LT5jdXJyZW5jeV90aG91c2FuZHMgVE9ETyk7DQoJCQkkc2VhcmNoID0gYXJyYXkoJ3tzaWdufScsICd7bnVtYmVyfScsICd7c3ltYm9sfScpOw0KCQkJJHJlcGxhY2UgPSBhcnJheSgkc2lnbiwgJHNldHVwTnVtYmVyLCAkY3VycmVuY3ktPmN1cnJlbmN5X3N5bWJvbCk7DQoJCQkkbW9uZXlNYWRlID0gc3RyX3JlcGxhY2UgKCRzZWFyY2gsJHJlcGxhY2UsJGZvcm1hdCk7DQoNCgkJCXJldHVybiAkbW9uZXlNYWRlOw0KCQl9DQoJCXJldHVybiAkbnVtYmVyOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F1c2VSaXNrRGV0YWlscygkaWQsJGRldGFpbHMgPSBudWxsKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGV0YWlscykpDQoJCXsNCgkJCSRkZXRhaWxzID0gYXJyYXkoJ25hbWUnLCdhbGlhcycsJ2Rlc2NyaXB0aW9uJywncmVmJyk7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGRldGFpbHMpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY2F1c2VyaXNrJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJZCgkdGFibGUsICR3aGVyZSA9IG51bGwgLCAkd2hlcmVTdHJpbmcgPSAndXNlcicsICR3aGF0ID0gJ2lkJykNCgl7DQoJCWlmKCEkd2hlcmUpDQoJCXsNCgkJCSR3aGVyZSA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgPSAnLihpbnQpICR3aGVyZSk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElkcygkd2hlcmVTdHJpbmcsJHdoZXJlLCR0YWJsZSwkd2hhdCA9ICdpZCcsJG9wZXJhdG9yID0gJ0lOJywkbWFpbl8gPSAnW1tbY29tcG9uZW50XV1dXycpDQoJew0KCQlpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR3aGVyZSkgJiYgJHdoZXJlID4gMCkNCgkJew0KCQkJJHdoZXJlID0gYXJyYXkoJHdoZXJlKTsNCgkJfQ0KDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkd2hlcmUpKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycuJG1haW5fLiR0YWJsZSkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkd2hlcmVTdHJpbmcpIC4gJyAnLiRvcGVyYXRvci4nICgnIC4gaW1wbG9kZSgnLCcsJHdoZXJlKSAuICcpJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlyZXR1cm4gYXJyYXlfdW5pcXVlKCRkYi0+bG9hZENvbHVtbigpKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZSgkaWQpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnbmFtZScpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4oaW50KSAkaWQpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21iaW5lKCRpdGVtcykNCgl7DQoJCS8vIG1ha2Ugc3VyZSB0aGUgc3VtIGNsYXNzIGlzIGxvYWRlZA0KCQlKTG9hZGVyOjppbXBvcnQoJ3N1bWNvbWJpbmUnLCBKUEFUSF9DT01QT05FTlRfQURNSU5JU1RSQVRPUiAuICcvaGVscGVycycpOw0KCQkvLyByZXR1cm4gdGhlIHJlc3VsdA0KCQlyZXR1cm4gbmV3IFN1bUNvbWJpbmUoJGl0ZW1zKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZSgkaWQsJGRhdGEpDQoJew0KCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhKSkgPT09ICRkYXRhKXsNCgkJCS8vIHdlIGhhdmUgdmFsaWQgZGF0YSBub3cgY2hlY2sgaWYgc3RvcmVkIHJlc3VsdCBuZWVkcyB0byBiZSB1cGRhdGVkLg0KCQkJJGZpbGVOYW1lCT0gbWQ1KCRkYXRhKTsNCgkJCSRkYXRhCQk9IHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJGRhdGEpKTsNCgkJfSBlbHNlIHsNCgkJCS8vIG5vdCB2YWxpZCBkYXRhIGZpcnN0IGdldCB0aGUgdmFsaWQgZGF0YQ0KCQkJJG1vZGVsCQk9IHNlbGY6OmdldE1vZGVsKCdjb21wYW55ZGF0YScpOw0KCQkJJGRhdGEgCQk9ICRtb2RlbC0+Z2V0SXRlbSgoaW50KSRpZCk7DQoJCQkvLyB3ZSBoYXZlIHZhbGlkIGRhdGEgbm93IGNoZWNrIGlmIHN0b3JlZCByZXN1bHQgbmVlZHMgdG8gYmUgdXBkYXRlZC4NCgkJCSRmaWxlTmFtZQk9IG1kNShiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkZGF0YSkpKTsNCgkJfQ0KCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkkcGFyYW1zCT0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQkkcGF0aAk9ICRwYXJhbXMtPmdldCgncmVzdWx0cGF0aCcsIEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycycpOw0KCQkvLyBidWlsZCBmdWxsIHBhdGggdG8gZmlsZQ0KCQkkZnVsbFBhdGggPSAkcGF0aC4nLycuJGZpbGVOYW1lLicuanNvbic7DQoJCS8vIGNoZWNrIGlmIGZpbGUgZXhpc3RzDQoJCWlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpICYmICgoJGpzb25GaWxlID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0Q29udGVudCgkZnVsbFBhdGgsIEZBTFNFKSkgIT09IEZBTFNFKSkNCgkJew0KCQkJLy8gZ3JlYXQgd2UgYXJlIGRvbmUgcmV0dXJuIHJlc3VsdHMNCgkJCXJldHVybiBqc29uX2RlY29kZSgkanNvbkZpbGUpOw0KCQl9DQoJCS8vIGRvIHRoZSBjYWxjdWxhdGlvbiBhZ2Fpbg0KCQkkcmVzdWx0ID0gc2VsZjo6ZG9DYWxjdWxhdGlvbigkZGF0YSk7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSB8fCBTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSkNCgkJew0KCQkJLy8gbm93IHNhdmUgZm9yIG5leHQgdGltZQ0KCQkJc2VsZjo6c2F2ZUpzb24oJHJlc3VsdCwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCQkvLyByZXR1cm4gcmVzdWx0IHNldA0KCQkJcmV0dXJuICBqc29uX2RlY29kZShqc29uX2VuY29kZSgkcmVzdWx0KSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZG9DYWxjdWxhdGlvbigkZGF0YSkNCgl7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSB0aGUgc3VtIGNsYXNzIGlzIGxvYWRlZA0KCQkJSkxvYWRlcjo6aW1wb3J0KCdzdW0nLCBKUEFUSF9DT01QT05FTlRfQURNSU5JU1RSQVRPUiAuICcvaGVscGVycycpOw0KCQkJLy8gcmV0dXJuIHRoZSByZXN1bHQNCgkJCXJldHVybiBuZXcgU3VtKCRkYXRhKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFzZWxmOjppc0pzb24oJGRhdGEpKQ0KCQl7DQoJCQkvLyBqc29uIGVuY29kZSBpZiBub3QganNvbg0KCQkJJGRhdGEgPSBqc29uX2VuY29kZSgkZGF0YSk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHRoaXMgaXMgYSBzdHJpbmcNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZ1bGxQYXRoLCAndycpOw0KCQkJZndyaXRlKCRmcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCRmcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0pzb24oJHN0cmluZykNCgl7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3RyaW5nKSkNCgkJew0KCQkJanNvbl9kZWNvZGUoJHN0cmluZyk7DQoJCQlyZXR1cm4gKGpzb25fbGFzdF9lcnJvcigpID09PSBKU09OX0VSUk9SX05PTkUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKglzZXQgZ3JvdXBzIG5hbWVzDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRHcm91cE5hbWVzKCRncm91cHMpDQoJew0KCQkvLyBjaGFuZ2UgYXJyYXkgb2YgZ3JvdXAgaWRzIHRvIHN0cmluZyBvZiBncm91cCBuYW1lcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCXsNCgkJCSRncm91cHNOYW1lcyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkZ3JvdXBzIGFzICRncm91cCkNCgkJCXsNCgkJCQkkZ3JvdXBzTmFtZXNbXSA9IHNlbGY6OmdldEdyb3VwTmFtZSgkZ3JvdXApOw0KCQkJfQ0KCQkJcmV0dXJuIGltcGxvZGUoJywgJywkZ3JvdXBzTmFtZXMpOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoJDQoJLyoqDQoJICoJZ2V0IGdyb3VwIG5hbWUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEdyb3VwTmFtZSgkaWQpDQoJew0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2EudGl0bGUnKSk7DQoJCSRxdWVyeS0+ZnJvbSgnI19fdXNlcmdyb3VwcyBBUyBhJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EuaWQgPSAnLiRpZCk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCSRmb3VuZCA9ICRkYi0+Z2V0TnVtUm93cygpOw0KCQlpZigkZm91bmQpDQogICAgICAgCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCX0NCgkJcmV0dXJuICRpZCAuICctIG5vdCBmb3VuZCc7DQoJfQ==', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XSAoaHR0cDovL3d3dy5qb29tbGEub3JnLykgY29tcG9uZW50Lg0KDQogIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0gKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9uYW1pYmlhL0NCUC1Kb29tbGEtMy1Db21wb25lbnQvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvY29tcG9uZW50LTMwMC5wbmcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgUmVxdWlyZW1lbnRzDQoNCkR1ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcGVybWlzc2lvbmFsIHN0cnVjdHVyZSwgeW91IHdpbGwgbmVlZCB0byBpbmNyZWFzZSBtYXhfaW5wdXRfdmFycyB1bnRpbCB0aGUgcGVybWlzc2lvbnMgYXJlIGFibGUgdG8gc2F2ZS4NCmBgYA0KbWF4X2lucHV0X3ZhcnMgPSA1MDAwDQpgYGANCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSAoaHR0cHM6Ly93d3cuc3RhZmZoZWFsdGhjYnAuY29tLykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdIChtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSAoaHR0cHM6Ly93d3cuc3RhZmZoZWFsdGhjYnAuY29tLykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0gKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXSAobWFpbHRvOmpvb21sYUB2ZG0uaW8p', '', '', 'Cost Benefit Projection Tool.', '', '', 'Cost Benefit Projection (giz)', '', '', '', '', 'https://www.vdm.io/updates/costbenefitprojection_update_server.xml', 'http://www.vdm.io', '', '6dsrYP4PHKaU5b8bBcr4DtIqz2FGQCndqTcZ1tu6TKAHrCs6Dr3XwYmlpPZ3CJav', 'https://www.vdm.io/access/', '', 2, 17, '', 1, 5),
(16, 1, '', '', '', 1, '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', 1, '', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2016-02-01 15:43:01', 1, '', '', '', '', '', '', '', 1, 1, 'Electronic Trading Platform for Joomla', 'joomla@vdm.io', '', '', 'zjZMKoAm8xoIirA9kENdznjWw7q2vy3lawYY3pBk4a4=', '', 'ae5048b0-1b04-4a04-862c-e80396553814', 'images/electronic_trading.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2017-06-16 09:03:33', 1, 'Electronic Trading', 'electronictrading', '', 4, 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlsb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw==', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnbG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ2xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlsb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0=', 'CS8qKg0KCSogCXRoZSBCdXRsZXINCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRzZXNzaW9uOw0KDQoNCglwcm90ZWN0ZWQgc3RhdGljICRmaWxlcGF0aCA9ICcnOw0KCXByb3RlY3RlZCBzdGF0aWMgJGZpbGVsaW5rID0gJyc7DQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zOw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXI7DQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9ja2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGJhc2lja2V5Ow0KDQoJLyoqDQoJKiAJc3RhcnQgYSBzZXNzaW9uIGlmIG5vdCBhbHJlYWR5IHNldCwgYW5kIGxvYWQgd2l0aCBkYXRhDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkU2Vzc2lvbigpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRzZXNzaW9uKSB8fCAhU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHNlc3Npb24pKQ0KCQl7DQoJCQlzZWxmOjokc2Vzc2lvbiA9IEZhY3Rvcnk6OmdldFNlc3Npb24oKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIGRlZmF1bHRzDQoJCXNlbGY6OnNldFNlc3Npb25EZWZhdWx0cygpOw0KCX0NCg0KCS8qKg0KCSogCXNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgYW55IHdhcyBhbHJlYWR5IHNldA0KCQlpZiAoISRjdXJyZW5jeSA9IHNlbGY6OmdldCgnQUNUSVZFX0NVUlJFTkNZJywgbnVsbCkpDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkJaWYgKCAkdXNlci0+aWQgPiAwKQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgYWN0aXZlIHVzZXJzIGN1cnJlbmN5DQoJCQkJc2VsZjo6c2V0KCdBQ1RJVkVfQ1VSUkVOQ1knLCBzZWxmOjpnZXRVc2VyQ3VycmVuY3koJHVzZXIpKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBzZXQgcHVibGljIGN1cnJlbmN5DQoJCQkJc2VsZjo6c2V0KCdBQ1RJVkVfQ1VSUkVOQ1knLCBzZWxmOjpnZXRQdWJsaWNDdXJyZW5jeSgpKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSogCXRoZSBsb2NhbCBzZXNzaW9uIG1lbW9yeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2FsU2Vzc2lvbiA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlnaXZlIFNlc3Npb24gbW9yZSB0byBrZWVwDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXQoJGtleSwgJHZhbHVlKQ0KCXsNCgkJLy8gc2V0IHRvIGxvY2FsIG1lbW9yeSB0byBzcGVlZCB1cCBwcm9ncmFtDQoJCXNlbGY6OiRsb2NhbFNlc3Npb25bJGtleV0gPSAkdmFsdWU7DQoJCS8vIGxvYWQgdG8gc2Vzc2lvbiBmb3IgbGF0ZXIgdXNlDQoJCXJldHVybiBzZWxmOjokc2Vzc2lvbi0+c2V0KCRrZXksIHNlbGY6OiRsb2NhbFNlc3Npb25bJGtleV0pOw0KCX0NCg0KCS8qKg0KCSogCWdldCBpbmZvIGZyb20gU2Vzc2lvbg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KCRrZXksICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCS8vIGNoZWNrIGlmIGluIGxvY2FsIG1lbW9yeQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRsb2NhbFNlc3Npb25bJGtleV0pKQ0KCQl7DQoJCQkvLyBzZXQgdG8gbG9jYWwgbWVtb3J5IHRvIHNwZWVkIHVwIHByb2dyYW0NCgkJCXNlbGY6OiRsb2NhbFNlc3Npb25bJGtleV0gPSBzZWxmOjokc2Vzc2lvbi0+Z2V0KCRrZXksICRkZWZhdWx0KTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGxvY2FsU2Vzc2lvblska2V5XTsNCgl9DQoNCgkvKioNCgkqIAl0aGUgdXNlciBpcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGlzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwsICRsb2NhbFVzZXJJZCA9IGZhbHNlKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRpZCkgJiYgJGlkIGluc3RhbmNlb2YgSlVzZXIpDQoJCXsNCgkJCS8vIGp1c3QgcGFzcyB0aGUgb2JqZWN0DQoJCQkkdXNlciA9ICRpZDsNCgkJfQ0KCQllbHNlaWYoaXNfbnVtZXJpYygkaWQpICYmICRpZCA+IDApDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJaWYgKCFpc3NldChzZWxmOjokaXNbJHVzZXItPmlkXSkpDQoJCXsNCgkJCS8vIG5vdyBjaGVjayBpbiB3aGF0IGdyb3VwIHRoaXMgdXNlciBiZWxvbmdzDQoJCQlpZiAoJHVzZXItPmF1dGhvcmlzZSgnY29yZS5vcHRpb25zJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSkNCgkJCXsNCgkJCQkvLyBpcyBhZG1pbg0KCQkJCXNlbGY6OiRpc1skdXNlci0+aWRdID0gMzsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBnZXQgdGhpcyB1c2VyIGdyb3Vwcw0KCQkJCSRncm91cHMgPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKTsNCgkJCQl9DQoJCQkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJCQkkYWRtaW5Hcm91cHMgCQkJPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgnYWRtaW51c2VyJyk7DQoJCQkJJG9yZ2FuaXplckdyb3VwcwkJPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgnb3JnYW5pemVydXNlcicpOw0KCQkJCSRyZWdpc3RlcmVkR3JvdXBzIAkJPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgncmVnaXN0ZXJlZHVzZXInKTsNCgkJCQkvLyBub3cgY2hlY2sgaW4gd2hhdCBncm91cCB0aGlzIHVzZXIgYmVsb25ncw0KCQkJCWlmICggYXJyYXlfaW50ZXJzZWN0KCRhZG1pbkdyb3VwcywgJGdyb3VwcykpDQoJCQkJew0KCQkJCQkvLyBpcyBhZG1pbg0KCQkJCQlzZWxmOjokaXNbJHVzZXItPmlkXSA9IDM7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRvcmdhbml6ZXJHcm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gaXMgb3JnYW5pc2F0aW9uDQoJCQkJCXNlbGY6OiRpc1skdXNlci0+aWRdID0gMjsNCgkJCQl9DQoJCQkJZWxzZWlmIChhcnJheV9pbnRlcnNlY3QoJHJlZ2lzdGVyZWRHcm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gaXMgcmVnaXN0ZXJlZCB1c2VyDQoJCQkJCXNlbGY6OiRpc1skdXNlci0+aWRdID0gMTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbm90IHBhcnQgb2YgdGhpcyBhcmVhDQoJCQkJCXNlbGY6OiRpc1skdXNlci0+aWRdID0gbnVsbDsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYgKCRsb2NhbFVzZXJJZCkNCgkJew0KCQkJcmV0dXJuIGFycmF5KCdpcycgPT4gc2VsZjo6JGlzWyR1c2VyLT5pZF0sICdpZCcgPT4gc2VsZjo6Z2V0TG9jYWxVc2VySWQoJHVzZXItPmlkLCBzZWxmOjokaXNbJHVzZXItPmlkXSkpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokaXNbJHVzZXItPmlkXTsNCgl9DQoNCgkvKioNCgkqIAl0aGUgbG9jYWwgdXNlciBpZHMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRsb2NhbFVzZXJJZCA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvY2FsVXNlcklkKCR1c2VySWQsICRpcykNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JGxvY2FsVXNlcklkWyR1c2VySWRdKSkNCgkJew0KCQkJc3dpdGNoKCRpcykNCgkJCXsNCgkJCQljYXNlIDM6IC8vIHNpbmNlIGFkbWluIGhhcyBhY2Nlc3MgdG8gYWxsIChhdCB0aGlzIHRpbWUpDQoJCQkJCXNlbGY6OiRsb2NhbFVzZXJJZFskdXNlcklkXSA9IC0xOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgMjogLy8gZ2V0IG9yZ2FuaXplciBsb2NhbCBzeXN0ZW0gaWQNCgkJCQkJc2VsZjo6JGxvY2FsVXNlcklkWyR1c2VySWRdID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkdXNlcklkLCAndXNlcicsICdpZCcpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgMTogLy8gZ2V0IHJlZ2lzdGVyZWQgdXNlciBsb2NhbCBzeXN0ZW0gaWQNCgkJCQkJc2VsZjo6JGxvY2FsVXNlcklkWyR1c2VySWRdID0gc2VsZjo6Z2V0VmFyKCdyZWdpc3RlcmVkX3VzZXInLCAkdXNlcklkLCAndXNlcicsICdpZCcpOw0KCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6IC8vIHRoZSBkZWZhdWx0IGlzIHRvIHNldCBpdCB0byB6ZXJvDQoJCQkJCXNlbGY6OiRsb2NhbFVzZXJJZFskdXNlcklkXSA9IDA7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2NhbFVzZXJJZFskdXNlcklkXTsJCQ0KCX0NCg0KCS8qKg0KCSogCXRoZSBwdWJsaWMgY3VycmVuY3kNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICR1c2Vyc0N1cnJlbmN5ID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogCWdldCB0aGUgdXNlciBjdXJyZW5jeQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VXNlckN1cnJlbmN5KCR1c2VySWQgPSBudWxsKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCR1c2VySWQpICYmICR1c2VySWQgaW5zdGFuY2VvZiBKVXNlcikNCgkJew0KCQkJJHVzZXIgPSAkdXNlcklkOw0KCQl9DQoJCWVsc2VpZiAoaXNfbnVtZXJpYygkdXNlcklkKSAmJiAkdXNlcklkID4gMCkNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJLy8gb25seSBzZXQgYWdhaW4gaWYgbm90IGZvdW5kDQoJCWlmICghaXNzZXQoc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSkpDQoJCXsNCgkJCSRhcnJheSA9IChhcnJheSkgc2VsZjo6dXNlcklzKCR1c2VyLCB0cnVlKTsNCgkJCS8vIHNldCBpbiByZWxhdGlvbg0KCQkJc3dpdGNoKCRhcnJheVsnaXMnXSkNCgkJCXsNCgkJCQkvLyByZWdpc3RlcmVkIHVzZXIgY3VycmVuY3kNCgkJCQljYXNlIDE6DQoJCQkJc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSA9IHNlbGY6OmdldFZhcnMoJ3JlZ2lzdGVyZWRfdXNlcicsICRhcnJheVsnaWQnXSwgJ2lkJywgJ2N1cnJlbmN5Jyk7DQoJCQkJYnJlYWs7DQoJCQkJLy8gb3JnYW5pemVyIGN1cnJlbmN5DQoJCQkJY2FzZSAyOg0KCQkJCXNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0gPSBzZWxmOjpnZXRWYXJzKCdvcmdhbml6ZXInLCAkYXJyYXlbJ2lkJ10sICdpZCcsICAnY3VycmVuY3knKTsNCgkJCQlicmVhazsNCgkJCQkvLyBhZG1pbiBjYW4gYWNjZXNzIGFsbA0KCQkJCWNhc2UgMzogDQoJCQkJc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKTsNCgkJCQlicmVhazsNCgkJCQkvLyBhbGwgb3RoZXIgZ2V0cyB0aGUgcHVibGljDQoJCQkJZGVmYXVsdDoNCgkJCQlzZWxmOjokdXNlcnNDdXJyZW5jeVskdXNlci0+aWRdID0gc2VsZjo6Z2V0UHVibGljQ3VycmVuY3koKTsNCgkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXTsNCgl9DQoNCg0KCS8qKg0KCSogCXRoZSBwdWJsaWMgY3VycmVuY3kNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRwdWJsaWNDdXJyZW5jeSA9ICdzZXQnOw0KDQoJLyoqDQoJKiAJc2V0IHRoZSBwdWJsaWMvZGVmYXVsdCBjdXJyZW5jeQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHVibGljQ3VycmVuY3koKQ0KCXsNCgkJaWYgKCdzZXQnID09PSBzZWxmOjokcHVibGljQ3VycmVuY3kpDQoJCXsNCgkJCS8vIGdldCB0aGlzIGxvY2F0aW9uIGRhdGENCgkJCSRsb2NhdGlvbkRhdGEgPSBzZWxmOjpnZXRMb2NhdGlvbmRhdGEoKTsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgbG9jYXRpb24gZGF0YQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsb2NhdGlvbkRhdGEpICYmIGlzc2V0KCRsb2NhdGlvbkRhdGFbJ0NVUlJFTkNZX0NPREVfVEhSRUUnXSkpDQoJCQl7DQoJCQkJc2VsZjo6JHB1YmxpY0N1cnJlbmN5ID0gJGxvY2F0aW9uRGF0YVsnQ1VSUkVOQ1lfQ09ERV9USFJFRSddOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRwdWJsaWNDdXJyZW5jeSA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JHB1YmxpY0N1cnJlbmN5Ow0KCX0NCg0KCS8qKg0KCSogCVRoZSBvd25lcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG93bmVyID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogCWFycmF5IHRvIGNoZWNrIHVzZXINCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRjaGVja1VzZXIgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJd2FudHMgdG8gZWRpdA0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHZpZXdBY2Nlc3M7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc0FjY2VzcygkcmVjb3JkSWQsICR1c2VySWQgPSBudWxsLCAkdG8gPSAnZXZlbnQnLCAkdmlld0FjY2VzcyA9IGZhbHNlKQ0KCXsNCgkJLy8gc2V0IGlmIHZpZXcgYWNjZXNzIGlzIGFsbCB0aGF0IGlzIHJlcXVpcmVkIA0KCQlzZWxmOjokdmlld0FjY2VzcyA9ICR2aWV3QWNjZXNzOw0KCQlpZighJHVzZXJJZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHVzZXIpKQ0KCQkJew0KCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQlzZWxmOjokdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCX0NCgkJCSR1c2VySWQgPSBzZWxmOjokdXNlci0+aWQ7DQoJCX0NCgkJJGFycmF5ID0gKGFycmF5KSBzZWxmOjp1c2VySXMoJHVzZXJJZCwgdHJ1ZSk7DQoJCWlmIChpc3NldCgkYXJyYXlbJ2lzJ10pICYmICRhcnJheVsnaXMnXSAmJiAkcmVjb3JkSWQgPiAwKQ0KCQl7DQoJCQlzd2l0Y2goJHRvKQ0KCQkJew0KCQkJCWNhc2UgJ2V2ZW50JzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0V2ZW50KCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3ZlbnVlJzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc1ZlbnVlKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzT3JnYW5pemVyKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdpbnZvaWNlJzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0ludm9pY2UoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAncGF5bWVudF9tZXRob2QnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzUGF5bWVudE1ldGhvZCgkYXJyYXlbJ2lzJ10sICRyZWNvcmRJZCwgJGFycmF5WydpZCddLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICd0YXhfcnVsZSc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NUYXhSdWxlKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ21lc3NhZ2VzX2J1aWxkZXInOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzTWVzc2FnZXNCdWlsZGVyKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2NvbmNlcHQnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzQ29uY2VwdCgkYXJyYXlbJ2lzJ10sICRyZWNvcmRJZCwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY29udGVudCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NDb250ZW50KCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdidW5kbGUnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzQnVuZGxlKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NFdmVudCgkdHlwZSwgJHJlY29yZElkLCAkb3JnSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignZXZlbnQnLCAkcmVjb3JkSWQsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSA9PSAkb3JnSWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2V2ZW50LmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5ldmVudC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzVmVudWUoJHR5cGUsICRyZWNvcmRJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWyd2ZW51ZScuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCd2ZW51ZScsICRyZWNvcmRJZCwgJ2lkJywgJ2NyZWF0ZWRfYnknKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWyd2ZW51ZScuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCd2ZW51ZS5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0udmVudWUuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc09yZ2FuaXplcigkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ29yZ2FuaXplcicuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ29yZ2FuaXplcicuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignb3JnYW5pemVyJywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ29yZ2FuaXplcicuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdvcmdhbml6ZXIuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLm9yZ2FuaXplci4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzSW52b2ljZSgkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBldmVudCBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnaW52b2ljZScuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignaW52b2ljZScsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQkJZGVmYXVsdDogLy8gc2V0IHRoZSBkZWZhdWx0IHRvDQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJYnJlYWs7DQoJCX0NCgkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJaWYgKHNlbGY6OiRvd25lclsnaW52b2ljZScuJHJlY29yZElkXSA9PSAkbG9jYWxJZCkNCgkJew0KCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQl7DQoJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnaW52b2ljZS5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uaW52b2ljZS4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzUGF5bWVudE1ldGhvZCgkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydwYXltZW50X21ldGhvZCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ3BheW1lbnRfbWV0aG9kJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdwYXltZW50X21ldGhvZCcsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ3BheW1lbnRfbWV0aG9kJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdwYXltZW50X21ldGhvZC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ucGF5bWVudF9tZXRob2QuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc1RheFJ1bGUoJHR5cGUsICRyZWNvcmRJZCwgJGxvY2FsSUQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcigndGF4X3J1bGUnLCAkcmVjb3JkSWQsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSA9PSAkbG9jYWxJRCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgncGF5bWVudF9tZXRob2QuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLnBheW1lbnRfbWV0aG9kLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NNZXNzYWdlc0J1aWxkZXIoJHR5cGUsICRyZWNvcmRJZCwgJGxvY2FsSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydtZXNzYWdlc19idWlsZGVyJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdtZXNzYWdlc19idWlsZGVyJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnbWVzc2FnZXNfYnVpbGRlcicuJHJlY29yZElkXSA9PSAkbG9jYWxJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnbWVzc2FnZXNfYnVpbGRlci5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ubWVzc2FnZXNfYnVpbGRlci4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQ29uY2VwdCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnY29uY2VwdCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignY29uY2VwdCcsICRyZWNvcmRJZCwgJ2lkJywgJ2NyZWF0ZWRfYnknKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2NvbmNlcHQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbmNlcHQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0NvbnRlbnQoJHR5cGUsICRyZWNvcmRJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2NvbmNlcHQnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ2NvbmNlcHQnLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnY29uY2VwdCcuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdjb25jZXB0LmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5jb25jZXB0LicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJCXJldHVybiBzZWxmOjokdXNlci0+YXV0aG9yaXNlKCdjb250ZW50LmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5jb250ZW50LicgLiAoaW50KSAgJHJlY29yZElkKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0J1bmRsZSgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2J1bmRsZScuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2J1bmRsZScuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignYnVuZGxlJywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2J1bmRsZScuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdidW5kbGUuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmJ1bmRsZS4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzSXRlbXMoJHRhYmxlLCAkdXNlcklkID0gbnVsbCkNCgl7DQoJCWlmKCR1c2VySWQgPiAwKQ0KCQl7DQoJCQkkYXJyYXkgPSAoYXJyYXkpIHNlbGY6OnVzZXJJcygkdXNlcklkLCB0cnVlKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRhcnJheSA9IChhcnJheSkgc2VsZjo6dXNlcklzKEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQsIHRydWUpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGFycmF5WydpcyddKQ0KCQl7DQoJCQkvLyByZWdpc3RlcmVkIChvbmx5IGxvYWQgaXRlbXMgdGhhdCBiZWxvbmcgdG8gdGhlIHJlZ2lzdGVyZWQgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRWYXJzKCR0YWJsZSwgJGFycmF5WydpZCddLCAncmVnaXN0ZXJlZF91c2VyJyk7DQoJCQlicmVhazsNCgkJCS8vIG9yZ2FuaXplciAob25seSBsb2FkIGl0ZW1zIHRoYXQgYmVsb25nIHRvIHRoZSBvcmdhbml6ZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0VmFycygkdGFibGUsICRhcnJheVsnaWQnXSwgJ29yZ2FuaXplcicpOw0KCQkJYnJlYWs7DQoJCQkvLyBhZG1pbiBjYW4gYWNjZXNzIGFsbA0KCQkJY2FzZSAzOiANCgkJCXJldHVybiAtMTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRsb2NhdGlvbmRhdGFIZWxwZXIgPSBmYWxzZTsgDQoNCgkvKioNCgkqIAlMb2FkIHRoZSBkYXRhIGZvciBJUCBhbmQgQ3VycmVuY3kgDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2NhdGlvbmRhdGEoJGlwID0gbnVsbCwgJHByb3RvY29sID0gbnVsbCwgJGtleSA9IG51bGwsICRiYXNlID0gJ1VTRCcsICRtb2RlID0gMCwgJHN0cmluZyA9IDAsICR2YWx1ZSA9IDEuMDApDQoJewkJDQoJCWlmIChzZWxmOjpsb2FkTG9jYXRpb25EYXRhKCkpDQoJCXsNCgkJCXJldHVybiBsb2NhdGlvbmRhdGFIZWxwZXI6OmdldExvY2F0aW9uZGF0YSgkaXAsICRwcm90b2NvbCwgJGtleSwgJGJhc2UsICRtb2RlLCAkc3RyaW5nLCAkdmFsdWUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiByZXR1cm5zIEV4Y2hhbmdlUmF0ZXMNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeGNoYW5nZVJhdGUoJGZyb20sICRmcm9tVmFsdWUsICR0byA9ICdVU0QnKQ0KCXsNCgkJaWYgKHNlbGY6OmxvYWRMb2NhdGlvbkRhdGEoKSkNCgkJew0KCQkJcmV0dXJuIGxvY2F0aW9uZGF0YUhlbHBlcjo6Z2V0RXhjaGFuZ2VSYXRlKCRmcm9tLCAkZnJvbVZhbHVlLCAkdG8pOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCg0KCS8qKg0KCSogCXByZXBhcmUgYmFzZTY0IHN0cmluZyBmb3IgdXJsDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiYXNlNjRfdXJsZW5jb2RlKCRzdHJpbmcsICRlbmNvZGUgPSBmYWxzZSkNCgl7DQoJCWlmICgkZW5jb2RlKQ0KCQl7DQoJCQkkc3RyaW5nID0gYmFzZTY0X2VuY29kZSgkc3RyaW5nKTsNCgkJfQ0KCQlyZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXkoJysnLCAnLycpLCBhcnJheSgnLScsICdfJyksICRzdHJpbmcpOw0KCX0NCg0KCS8qKg0KCSogCXByZXBhcmUgYmFzZTY0IHN0cmluZyBmb3JtIHVybA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmFzZTY0X3VybGRlY29kZSgkc3RyaW5nLCAkZGVjb2RlID0gZmFsc2UpDQoJew0KCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoYXJyYXkoJy0nLCAnXycpLCBhcnJheSgnKycsICcvJyksICRzdHJpbmcpOw0KCQlpZiAoJGRlY29kZSkNCgkJew0KCQkJJHN0cmluZyA9IGJhc2U2NF9kZWNvZGUoJHN0cmluZyk7DQoJCX0NCgkJcmV0dXJuICRzdHJpbmc7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRpbWFnZQ0KCSAqIEByZXR1cm4gYm9vbHxzdGRDbGFzcw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW1hZ2VGaWxlUHJvcGVydGllcygkaW1hZ2UsICRmb2xkZXIgPSBmYWxzZSkNCgl7DQoJCWlmICgkZm9sZGVyKQ0KCQl7DQoJCQkkbG9jYWxmb2xkZXIgPSAkZm9sZGVyOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHNldGltYWdlc2ZvbGRlciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKS0+Z2V0KCdzZXRpbWFnZXNmb2xkZXInLCAxKTsNCgkJCWlmICgyID09ICRzZXRpbWFnZXNmb2xkZXIpDQoJCQl7DQoJCQkJJGxvY2FsZm9sZGVyID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ2ltYWdlc2ZvbGRlcicsIEpQQVRIX1NJVEUuJy9pbWFnZXMvIyMjY29tcG9uZW50IyMjJyk7DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHNldGltYWdlc2ZvbGRlcikNCgkJCXsNCgkJCQkkbG9jYWxmb2xkZXIgPSAgSlBBVEhfU0lURS4nL2ltYWdlcyc7DQoJCQl9DQoJCQllbHNlIC8vIGp1c3QgaW4tY2FzZSA6KQ0KCQkJew0KCQkJCSRsb2NhbGZvbGRlciA9ICBKUEFUSF9TSVRFLicvaW1hZ2VzLyMjI2NvbXBvbmVudCMjIyc7DQoJCQl9DQoJCX0NCgkJLy8gaW1wb3J0IGFsbCBuZWVkZWQgY2xhc3Nlcw0KCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5mb2xkZXInKTsNCgkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZmlsZScpOw0KCQlqaW1wb3J0KCdqb29tbGEuaW1hZ2UuaW1hZ2UnKTsNCgkJLy8gc2V0dXAgdGhlIGZvbGRlciBpZiBpdCBkb2VzIG5vdCBleGlzdA0KCQlpZiAoSkZvbGRlcjo6ZXhpc3RzKCRsb2NhbGZvbGRlcikgJiYgSkZpbGU6OmV4aXN0cygkbG9jYWxmb2xkZXIuJy8nLiRpbWFnZSkpDQoJCXsNCgkJCSRwcm9wZXJ0aWVzID0gSkltYWdlOjpnZXRJbWFnZUZpbGVQcm9wZXJ0aWVzKCRsb2NhbGZvbGRlci4nLycuJGltYWdlKTsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgcHJvcGVydGllcw0KCQkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRwcm9wZXJ0aWVzKSkNCgkJCXsNCgkJCQkvLyByZW1vdmUgdGhlIHNlcnZlciBwYXRoDQoJCQkJJGltYWdlUGF0aCA9IHRyaW0oc3RyX3JlcGxhY2UoSlBBVEhfU0lURSwnJywkbG9jYWxmb2xkZXIpLCcvJykuJy8nLiRpbWFnZTsNCgkJCQkvLyBub3cgYWRkIHRoZSBzcmMgcGF0aCB0byBzaG93IHRoZSBpbWFnZQ0KCQkJCSRwcm9wZXJ0aWVzLT5zcmMgPSBVcmk6OnJvb3QoKS4kaW1hZ2VQYXRoOw0KCQkJCS8vIHJldHVybiB0aGUgaW1hZ2UgcHJvcGVydGllcw0KCQkJCXJldHVybiAkcHJvcGVydGllczsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJGR5bmFtaWNEYXRhID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RHluYW1pY0RhdGEoJGRhdGEsICRwbGFjZWhvbGRlcnMpDQoJew0KCQkka2V5TUQ1ID0gbWQ1KCRkYXRhLmpzb25fZW5jb2RlKCRwbGFjZWhvbGRlcnMpKTsNCgkJaWYgKCFpc3NldChzZWxmOjokZHluYW1pY0RhdGFbJGtleU1ENV0pKQ0KCQl7DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJc2VsZjo6c2V0VGhlSUYoJGRhdGEsICRwbGFjZWhvbGRlcnMpOw0KCQkJCXNlbGY6OiRkeW5hbWljRGF0YVska2V5TUQ1XSA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHBsYWNlaG9sZGVycyksIGFycmF5X3ZhbHVlcygkcGxhY2Vob2xkZXJzKSwgJGRhdGEpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRkeW5hbWljRGF0YVska2V5TUQ1XSA9ICRkYXRhOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokZHluYW1pY0RhdGFbJGtleU1ENV07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUaGVJRigmJHN0cmluZywgJHBsYWNlaG9sZGVycykNCgl7CQkNCgkJLy8gb25seSBub3JtYWwgaWYgZW5kaWYNCgkJJGNvbmRpdGlvbiAJPSAnW2EtejAtOVxfXC1dKyc7DQoJCSRpbm5lcgkJPSAnKCg/Oig/IVxbXC8/SUYpKD8hXFtcLz9FTFNFKSg/IVxbXC8/RUxTRUlGKS4pKj8pJzsNCgkJJGlmCQk9ICdcW0lGXHM/KCcuJGNvbmRpdGlvbi4nKVxdJzsNCgkJJGVsc2VpZgkJPSAnXFtFTFNFSUZccz8oJy4kY29uZGl0aW9uLicpXF0nOw0KCQkkZWxzZQkJPSAnXFtFTFNFXF0nOw0KCQkkZW5kaWYJCT0gJ1xbRU5ESUZcXSc7DQoJCS8vIHNldCB0aGUgcGF0dGVybnMNCgkJJHBhdHRlcm5zID0gYXJyYXkoKTsNCgkJLy8gbm9ybWFsIGlmIGVuZGlmDQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkvLyBub3JtYWwgaWYgZWxzZSBlbmRpZg0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCS8vIGR5bmFtaWMgaWYgZWxzZWlmJ3MgZW5kaWYNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkvLyBkeW5hbWljIGlmIGVsc2VpZidzIGVsc2UgZW5kaWYNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2UuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2UuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCS8vIHJ1biB0aGUgcGF0dGVybnMgdG8gc2V0dXAgdGhlIHN0cmluZw0KCQlmb3JlYWNoICgkcGF0dGVybnMgYXMgJHBhdHRlcm4pDQoJCXsNCgkJCXdoaWxlIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkc3RyaW5nLCAkbWF0Y2gpKQ0KCQkJew0KCQkJCSRrZWVwIAk9IHNlbGY6OnJlbWFpbmRlcklGKCRtYXRjaCwgJHBsYWNlaG9sZGVycyk7DQoJCQkJJHN0cmluZwk9IHByZWdfcmVwbGFjZSgkcGF0dGVybiwgJGtlZXAsICRzdHJpbmcsIDEpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiByZW1haW5kZXJJRigmJG1hdGNoLCAmJHBsYWNlaG9sZGVycykNCgl7CQ0KCQkvLyBkZWZhdWx0IHdlIGtlZXAgbm90aGluZw0KCQkka2VlcCA9ICcnOw0KCQkkZm91bmQgPSBmYWxzZTsNCgkJLy8gZ2V0IG1hdGNoIGxlbmdodA0KCQkkbGVuZ3RoID0gY291bnQoJG1hdGNoKTsNCgkJLy8gcmFuZ2VzIHRvIGNoZWNrDQoJCSRpaSA9IHJhbmdlKDIsMzAsMik7IC8vIGV2ZW4gbnVtYmVycyAoY29udGVudCkNCgkJJGlpaSA9IHJhbmdlKDEsIDI1LCAyKTsgLy8gb2RkIG51bWJlcnMgKHBsYWNlaG9sZGVyKQ0KCQkvLyBpZiBlbXB0eSB2YWx1ZSByZW1vdmUgd2hvbGUgbGluZSBlbHNlIHNob3cgbGluZSBidXQgcmVtb3ZlIGFsbCBbQ09ERV0NCgkJZm9yZWFjaCAoJGlpaSBhcyAkY29udGVudCA9PiAkcGxhY2Vob2xkZXIpDQoJCXsNCgkJCWlmIChpc3NldCgkbWF0Y2hbJHBsYWNlaG9sZGVyXSkgJiYgZW1wdHkoJHBsYWNlaG9sZGVyc1snWycuJG1hdGNoWyRwbGFjZWhvbGRlcl0uJ10nXSkpDQoJCQl7DQoJCQkJLy8ga2VlcCBub3RoaW5nIG9yIG5leHQgb3B0aW9uDQoJCQkJJGtlZXAgPSAnJzsNCgkJCX0NCgkJCWVsc2VpZiAoaXNzZXQoJG1hdGNoWyRpaVskY29udGVudF1dKSkNCgkJCXsNCgkJCQkka2VlcCA9IGFkZGNzbGFzaGVzKCRtYXRjaFskaWlbJGNvbnRlbnRdXSwgJyQnKTsNCgkJCQkkZm91bmQgPSB0cnVlOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCS8vIGlmIG5vdCBmb3VuZCBsb2FkIGVsc2UgaWYgc2V0DQoJCWlmICghJGZvdW5kICYmIGluX2FycmF5KCRsZW5ndGgsICRpaSkpDQoJCXsNCgkJCSRrZWVwID0gYWRkY3NsYXNoZXMoJG1hdGNoWyRsZW5ndGggLSAxXSwgJyQnKTsNCgkJfQ0KCQlyZXR1cm4gJGtlZXA7CQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHBsYWNlSG9sZGVyczsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBsYWNlSG9sZGVycygkb3JnYW5pemVyID0gbnVsbCwgJHJlZ2lzdGVyZWQgPSBudWxsLCAkY29uZmlnID0gYXJyYXkoKSwgJHR5cGUgPSBudWxsKQ0KCXsNCgkJLy8gc2V0IHRvIGdsb2JhbCBpZiBub3QgZ2l2ZW4NCgkJaWYgKCEkb3JnYW5pemVyICYmIHNlbGY6OiRvcmdhbml6ZXIpDQoJCXsNCgkJCSRvcmdhbml6ZXIgPSBzZWxmOjokb3JnYW5pemVyOw0KCQl9DQoJCS8vIHNldCB0byBnbG9iYWwgaWYgbm90IGdpdmVuDQoJCWlmICghJHJlZ2lzdGVyZWQgJiYgc2VsZjo6JHJlZ2lzdGVyZWQpDQoJCXsNCgkJCSRyZWdpc3RlcmVkID0gc2VsZjo6JHJlZ2lzdGVyZWQ7DQoJCX0NCgkJaWYgKCRvcmdhbml6ZXIgJiYgJHJlZ2lzdGVyZWQpDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHBsYWNlSG9sZGVyc1skb3JnYW5pemVyLidfJy4kcmVnaXN0ZXJlZF0pKQ0KCQkJew0KCQkJCS8vIGdldCBuZWVkZWQgZGV0YWlscw0KCQkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCQkkZGV0YWlsc1tdID0gc2VsZjo6Z2V0T3JnYW5pemVyRGV0YWlscygoaW50KSAkb3JnYW5pemVyKTsNCgkJCQkkZGV0YWlsc1tdID0gc2VsZjo6Z2V0UmVnaXN0ZXJlZERldGFpbHMoKGludCkgJHJlZ2lzdGVyZWQpOw0KCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJG9yZ2FuaXplci4nXycuJHJlZ2lzdGVyZWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoJGRldGFpbHMpOw0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBjb25maWcgYXJyYXkgaWYgbmVlZGVkDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbmZpZykpDQoJCQl7DQoJCQkJJGRldGFpbHNbXSA9IHNlbGY6OiRwbGFjZUhvbGRlcnNbJG9yZ2FuaXplci4nXycuJHJlZ2lzdGVyZWRdOw0KCQkJCSRkZXRhaWxzW10gPSAkY29uZmlnOw0KCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJG9yZ2FuaXplci4nXycuJHJlZ2lzdGVyZWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoJGRldGFpbHMpOw0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OiRwbGFjZUhvbGRlcnNbJG9yZ2FuaXplci4nXycuJHJlZ2lzdGVyZWRdOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyAkaXRlbU9yZ2FuaXplciA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEl0ZW1Pcmdhbml6ZXIoJiRpdGVtLCAkdHlwZSwgJGtleSA9ICdpZCcsICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPiRrZXkpICYmIChpbnQpICRpdGVtLT4ka2V5ID4gMCkNCgkJew0KCQkJLy8gY2hlY2sgaWYgYWxyZWFkeSBzZXQNCgkJCWlmICghaXNzZXQoc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRJdGVtT3JnYW5pemVyKCRpdGVtLCAkdHlwZSwgJGtleSk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldKSAmJiBzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0pDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiRpdGVtT3JnYW5pemVyWyR0eXBlLiRpdGVtLT4ka2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGRlZmF1bHQ7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SXRlbU9yZ2FuaXplcigmJGl0ZW0sICR0eXBlLCAka2V5KQ0KCXsNCgkJLy8gZ2V0IG9yZ2FuaXplciBpZCBmb3IgdmFyaW91cyB0eXBlcyBvZiBpdGVtcw0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ3RyYW5zYWN0aW9uJzoNCgkJCQlpZiAoaXNzZXQoJGl0ZW0tPmludm9pY2UpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldID0gc2VsZjo6Z2V0VmFyKCdpbnZvaWNlJywgJGl0ZW0tPmludm9pY2UsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJG9yZ2FuaXplckRldGFpbHMgPSBhcnJheSgpOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPcmdhbml6ZXJWYWx1ZSgkaWQsICRmaWVsZCwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCRpZCA+IDAgKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldE9yZ2FuaXplckRldGFpbHMoJGlkKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZmllbGQgaWYgc2V0DQoJCQkkZmllbGQgPSAnW29yZ2FuaXplcl8nLiRmaWVsZC4nXSc7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkgJiYgaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZmllbGRdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZmllbGRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE9yZ2FuaXplckRldGFpbHMoJGlkKQ0KCXsNCgkJaWYgKCRpZCA+IDApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0T3JnYW5pemVyRGV0YWlscygkaWQpOw0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0T3JnYW5pemVyRGV0YWlscygkaWQpDQoJew0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoDQoJCQlhcnJheSgNCgkJCQknYS5pZCcsJ2EudXNlcicsJ2EubW9iaWxlX3Bob25lJywnYS5jb21wYW55bmFtZScsJ2EucHVibGljbnVtYmVyJywnYS5jdXJyZW5jeScsDQoJCQkJJ2Euc3RyZWV0JywnYS5wb3N0YWwnLCdhLmNpdHknLCAnYS5yZWdpb24nLCdhLmNvdW50cnknLCdhLnBvc3RhbGNvZGUnLCdhLndlYnNpdGUnLA0KCQkJCSdhLnByZWZpeCcsJ2EudGF4X2NvbXBvdW5kJywnYS50YXhlZCcsJ2EudGF4X3R5cGUnLCdhLmRvY19mb290ZXInLCdhLmRvY19oZWFkZXInKSwNCgkJCWFycmF5KA0KCQkJCSdbb3JnYW5pemVyX2lkXScsJ1tvcmdhbml6ZXJfdXNlcl9pZF0nLCdbb3JnYW5pemVyX21vYmlsZV9waG9uZV0nLCdbb3JnYW5pemVyX2NvbXBhbnluYW1lXScsJ1tvcmdhbml6ZXJfcHVibGljbnVtYmVyXScsJ1tvcmdhbml6ZXJfY3VycmVuY3ldJywNCgkJCQknW29yZ2FuaXplcl9zdHJlZXRdJywnW29yZ2FuaXplcl9wb3N0YWxdJywnW29yZ2FuaXplcl9jaXR5XScsJ1tvcmdhbml6ZXJfcmVnaW9uXScsJ1tvcmdhbml6ZXJfY291bnRyeV0nLCdbb3JnYW5pemVyX3Bvc3RhbGNvZGVdJywnW29yZ2FuaXplcl93ZWJzaXRlXScsDQoJCQkJJ1tvcmdhbml6ZXJfcHJlZml4XScsJ1tvcmdhbml6ZXJfdGF4X2NvbXBvdW5kXScsJ1tvcmdhbml6ZXJfdGF4ZWRdJywnW29yZ2FuaXplcl90YXhfdHlwZV0nLCdbb3JnYW5pemVyX2RvY19mb290ZXJdJywnW29yZ2FuaXplcl9kb2NfaGVhZGVyXScpKSk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXIgdGFibGUJCQkJDQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX29yZ2FuaXplcicsICdhJykpOwkJCQkNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2IubmFtZScsJ2IudXNlcm5hbWUnLCdiLmVtYWlsJyksYXJyYXkoJ1tvcmdhbml6ZXJfbmFtZV0nLCdbb3JnYW5pemVyX3VzZXJuYW1lXScsJ1tvcmdhbml6ZXJfZW1haWxdJykpKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX191c2VycycsICdiJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnVzZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2IuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdjLm5hbWUnKSxhcnJheSgnW29yZ2FuaXplcl9yZWdpb25fbmFtZV0nKSkpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWdpb24nLCAnYycpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2MuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdkLm5hbWUnKSxhcnJheSgnW29yZ2FuaXplcl9jb3VudHJ5X25hbWVdJykpKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY291bnRyeScsICdkJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdW50cnknKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2QuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQkvLyBsb2FkIHRoZSBxdWVyeQ0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0gPSAkZGItPmxvYWRBc3NvYygpOw0KCQkJLy8gc2V0IHNvbWUgc3BlY2lhbCB2YWx1ZXMNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWydbb3JnYW5pemVyX3dlYnNpdGVdJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJ1tvcmdhbml6ZXJfd2Vic2l0ZV0nXSkpIA0KCQkJew0KCQkJCS8vIHNldCBsaW5rDQoJCQkJaWYgKHN0cnBvcyhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWydbb3JnYW5pemVyX3dlYnNpdGVdJ10sICdodHRwOi8vJykgIT09IGZhbHNlIHx8IHN0cnBvcyhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWydbb3JnYW5pemVyX3dlYnNpdGVdJ10sICdodHRwczovLycpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRsaW5rID0gJzxhIGhyZWY9Iicuc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl93ZWJzaXRlXSddLiciPic7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRsaW5rID0gJzxhIGhyZWY9Imh0dHA6Ly8nLnNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJ1tvcmdhbml6ZXJfd2Vic2l0ZV0nXS4nIj4nOw0KCQkJCX0NCgkJCQkvLyBzZXQgdGhlIGxpbmsgbmFtZQ0KCQkJCSRsaW5rID0gJzxhIGhyZWY9Iicuc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl93ZWJzaXRlXSddLiciPic7DQoJCQkJaWYgKGlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJ1tvcmdhbml6ZXJfY29tcGFueW5hbWVdJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJ1tvcmdhbml6ZXJfY29tcGFueW5hbWVdJ10pKQ0KCQkJCXsNCgkJCQkJJGxpbmsgLj0gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl9jb21wYW55bmFtZV0nXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGxpbmsgLj0gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl9uYW1lXSddOw0KCQkJCX0NCgkJCQkkbGluayAuPSAnPC9hPic7DQoJCQkJc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl93ZWJzaXRlX2xpbmtdJ10gPSAkbGluazsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHJlZ1VzZXJzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVnVXNlclZhbHVlKCRpZCwgJGZpZWxkLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFJlZ1VzZXJWYWx1ZSgkaWQpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBmaWVsZCBpZiBzZXQNCgkJCSRmaWVsZCA9ICdbcmVnaXN0ZXJlZF8nLiRmaWVsZC4nXSc7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF0pICYmIGlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmaWVsZF0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokcmVnVXNlcnNbJGlkXVskZmllbGRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlZ2lzdGVyZWREZXRhaWxzKCRpZCkNCgl7DQoJCWlmICgkaWQgPiAwKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRSZWdVc2VyVmFsdWUoJGlkKTsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjokcmVnVXNlcnNbJGlkXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0UmVnVXNlclZhbHVlKCRpZCkNCgl7DQoJCS8vIGZpcnN0IGdldCB0aGUgdXNlcg0KCQkkdXNlcklkID0gc2VsZjo6Z2V0VmFyKCdyZWdpc3RlcmVkX3VzZXInLCAkaWQsICdpZCcsICd1c2VyJyk7DQoJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJLy8gbm93IGxvYWQgYWxsIGN1c3RvbSB2YWx1ZXMNCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoJ2EubmFtZScsJ2EudmFsdWUnKSwNCgkJCWFycmF5KCduYW1lJywndmFsdWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX3JlZ2lzdHJ5X2N1c3RvbV92YWx1ZScsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCdhLnJlZ2lzdGVyZWRfdXNlciA9ICcgLiAoaW50KSAkaWQpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA+PSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGN1c3RvbVZhbHVlcyA9ICRkYi0+bG9hZEFzc29jTGlzdCgnbmFtZScsICd2YWx1ZScpOw0KCQkJLy8gcG9zc2libGUga2V5cw0KCQkJJHNlYXJjaCA9IGFycmF5KA0KCQkJCSdjb3VudHJ5JyANCgkJCQkJPT4gYXJyYXkoJ2NvdW50cnknLCAnY291bnRyeV9vbmUnLCAnY291bnRyeV8xJywgJ2NvdW50cnkxJywgJ2NvdW50cnlvbmUnLCAnY291bnRyeV8nKSwgDQoJCQkJJ3JlZ2lvbicgDQoJCQkJCT0+IGFycmF5KCdyZWdpb24nLCAncmVnaW9uX29uZScsICdyZWdpb25fMScsICdyZWdpb24xJywgJ3JlZ2lvbm9uZScsICdyZWdpb25fJykNCgkJCQkpOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF0gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGN1c3RvbVZhbHVlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCXsNCgkJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfJy4ka2V5LiddJ10gPSAkdmFsdWU7DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR2YWx1ZSkgJiYgIWlzX251bWVyaWMoJHZhbHVlKSkNCgkJCQl7DQoJCQkJCSRmb3VuZCA9IGZhbHNlOw0KCQkJCQkkbmV3VmFsdWUgPSAnJzsNCgkJCQkJZm9yZWFjaCAoJHNlYXJjaCBhcyAkY29kZSA9PiAka2V5cykNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCgka2V5cyBhcyAka2VfeSkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoISRmb3VuZCAmJiAka2VfeSA9PSBzdHJ0b2xvd2VyKCRrZXkpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCRuZXdWYWx1ZSA9IHNlbGY6OmdldFZhcigkY29kZSwgJHZhbHVlLCAnbmFtZScsICdpZCcpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkvLyBpbnN1cmUgd2UgdXNlIHRoZSBjb3JyZWN0IGtleQ0KCQkJCQkJCQkJJGtleSA9ICRjb2RlOw0KCQkJCQkJCQkJLy8gc3RvcCBzZWFyY2ggZm9yIHRoaXMgZmllbGQNCgkJCQkJCQkJCSRmb3VuZCA9IHRydWU7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gYWRkIGFsc28gaWYgZm91bmQNCgkJCQkJaWYgKCRmb3VuZCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJ1tyZWdpc3RlcmVkXycuJGtleS4nXSddID0gJG5ld1ZhbHVlOw0KCQkJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJ1tyZWdpc3RlcmVkXycuJGtleS4nX25hbWVdJ10gPSAkdmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gbm93IGxvYWQgYWxsIHRoZSB1c2VyIHZhbHVlcw0KCQlpZiAoJHVzZXJJZCA+IDApDQoJCXsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF9pZF0nXSA9ICRpZDsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF91c2VyX2lkXSddID0gJHVzZXJJZDsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF9uYW1lXSddID0gJHVzZXItPm5hbWU7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfdXNlcm5hbWVdJ10gPSAkdXNlci0+dXNlcm5hbWU7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfZW1haWxdJ10gPSAkdXNlci0+ZW1haWw7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXSA9IGZhbHNlOw0KCQl9DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJHRheExvY2F0aW9uID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGF4TG9jYXRpb24oJHR5cGUsICRpZCwgJHZpZXcpDQoJew0KCQlpZiAoJGlkID4gMCApDQoJCXsNCgkJCSRrZXkgPSAkdHlwZS4kdmlldy4kaWQ7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiR0YXhMb2NhdGlvblska2V5XSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0VGF4TG9jYXRpb24oJHR5cGUsICRpZCwgJHZpZXcsICRrZXkpOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KHNlbGY6OiR0YXhMb2NhdGlvblska2V5XSkgJiYgc2VsZjo6JHRheExvY2F0aW9uWyRrZXldID4gMCkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JHRheExvY2F0aW9uWyRrZXldOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFRheExvY2F0aW9uKCRmaWVsZCwgJGlkLCAkdmlldywgJGtleSkNCgl7DQoJCXN3aXRjaCAoJHZpZXcpDQoJCXsNCgkJCWNhc2UgJ2ludm9pY2UnOg0KCQkJCS8vIGdldCB0aGUgY2xpZW50IGlkIGZyb20gam9iIGlkDQoJCQkJJHJlZ2lzdGVyZWRfdXNlciA9IHNlbGY6OmdldFZhcigkdmlldywgJGlkLCAnaWQnLCAncmVnaXN0ZXJlZF91c2VyJyk7DQoJCQkJLy8gcmV0dXJuIGxvY2F0aW9uIGlkIGZyb20gY2xpZW50IHRhYmxlDQoJCQkJaWYgKCRyZWdpc3RlcmVkX3VzZXIgPiAwKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHRheExvY2F0aW9uWyRrZXldID0gc2VsZjo6Z2V0UmVnVXNlclZhbHVlKCRyZWdpc3RlcmVkX3VzZXIsICRmaWVsZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRheCgmJHRheGVkLCAmJHRvdGFsLCAkaWQsICR2aWV3KQ0KCXsNCgkJJHNldFRheCA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKS0+Z2V0KCd0YXhlZCcsIDApOw0KCQlpZiAoJHNldFRheCA9PSAxICYmIDEgPT0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ3RheGVkJywgMCkpDQoJCXsNCgkJCS8vIHNldCB0aGUgdGF4IHRvIHRoaXMgYXJyYXkNCgkJCSR0YXggPSBhcnJheSgpOw0KCQkJJHRheEFkZFRvdGFsID0gYXJyYXkoKTsNCgkJCSRkZWR1Y3QgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQNCgkJCSRjb3VudHJ5ID0gc2VsZjo6Z2V0VGF4TG9jYXRpb24oJ2NvdW50cnknLCAkaWQsICR2aWV3KTsNCgkJCS8vIGdldCB0aGUgcmVnaW9uIG9mIHRoZSBjbGllbnQNCgkJCSRyZWdpb24gPSBzZWxmOjpnZXRUYXhMb2NhdGlvbigncmVnaW9uJywgJGlkLCAkdmlldyk7DQoJCQkvLyBub3cgZ2V0IHRheCBsZXZlbCAxIG9mIHRoaXMgQ291bnRyeSBhbmQgb3IgUmVnaW9uDQoJCQkkdGF4TGV2ZWwxID0gc2VsZjo6Z2V0VGF4UnVsZSgxLCRjb3VudHJ5LCRyZWdpb24pOw0KCQkJLy8gbm93IGdldCB0YXggbGV2ZWwgMiBvZiB0aGlzIENvdW50cnkgYW5kIG9yIFJlZ2lvbg0KCQkJJHRheExldmVsMiA9IHNlbGY6OmdldFRheFJ1bGUoMiwkY291bnRyeSwkcmVnaW9uKTsNCgkJCS8vIHRheCB0eXBlcw0KCQkJJHRheF90eXBlID0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ3RheF90eXBlJywgMik7DQoJCQkvLyB0YXggY29tcG91bmQNCgkJCSR0YXhfY29tcG91bmQgPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZShzZWxmOjokb3JnYW5pemVyLCAndGF4X2NvbXBvdW5kJywgbnVsbCk7DQoJCQkvLyBiYXNlZCBvbiB0YXggdHlwZQ0KCQkJaWYgKDIgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCS8vIHRheCBleGNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGF4WzBdWyduYW1lJ10gPSAkdGF4TGV2ZWwxWyduYW1lJ107DQoJCQkJCSR0YXhbMF1bJ3RheCddID0gJHRheExldmVsMVsndGF4J107DQoJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwxWyd0YXgnXSwgMjApOw0KCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0bXBBbW91bnQsIDEwMCwgNCk7DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGF4ZWRTdWIgPSBiY2FkZCgkdGF4ZWQsICR0YXhbMF1bJ2Ftb3VudCddLCAyMCk7DQoJCQkJCQkkdG1wQW1vdW50ID0gIGJjbXVsKCR0YXhlZFN1YiwgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRtcEFtb3VudCwgMTAwLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdG1wQW1vdW50LCAxMDAsIDQpOw0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzFdWydhbW91bnQnXTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCSRyZW1vdmFsID0gYXJyYXkoKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCX0NCgkJCQkkcmVtb3ZhbCA9IHNlbGY6OmJjc3VtKCRyZW1vdmFsKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFswXVsnbmFtZSddID0gJHRheExldmVsMVsnbmFtZSddOw0KCQkJCQkkdGF4WzBdWyd0YXgnXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmICR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsX2EgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRlbXBWYWwzID0gYmNkaXYoJHRheExldmVsMVsndGF4J10sIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWw0ID0gYmNhZGQoJHRlbXBWYWwzLCAxLCAyMCk7DQoJCQkJCQkkdGVtcFZhbF9iID0gYmNkaXYoJHRlbXBWYWxfYSwgJHRlbXBWYWw0LCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9ICBiY3N1YigkdGVtcFZhbF9hLCAkdGVtcFZhbF9iLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCRyZW1vdmFsLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJGV4Y2x1ZGluZyA9IGJjZGl2KCR0YXhlZCwgJHRlbXBWYWwyLCAyMCk7DQoJCQkJCQkkdGVtcFZhbCA9IGJjbXVsKCRleGNsdWRpbmcsICR0YXhMZXZlbDFbJ3RheCddLCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0ZW1wVmFsLCAxMDAsIDQpOyANCgkJCQkJfQ0KCQkJCQkvLyByZW1vdmUgZnJvbSBwcmljZQ0KCQkJCQkkZGVkdWN0W10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNzdWIoJHRheGVkLCAkdGVtcFZhbCwgNCk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkdGF4WzFdWyduYW1lJ10gPSAkdGF4TGV2ZWwyWyduYW1lJ107DQoJCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQkJJHRlbXBWYWwxID0gYmNkaXYoJHJlbW92YWwsIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWwyID0gYmNhZGQoJHRlbXBWYWwxLCAxLCAyMCk7DQoJCQkJCQkkZXhjbHVkaW5nID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNtdWwoJGV4Y2x1ZGluZywgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRlbXBWYWwsIDEwMCwgNCk7IA0KCQkJCQl9DQoJCQkJCS8vIHJlbW92ZSBmcm9tIHByaWNlDQoJCQkJCSRkZWR1Y3RbXSA9ICR0YXhbMV1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyB0YXggc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheCkpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSB0YXggdG8gdG90YWwNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheEFkZFRvdGFsKSkNCgkJCQl7DQoJCQkJCSR0YXhlZCA9IHNlbGY6OmJjc3VtKCR0YXhBZGRUb3RhbCk7DQoJCQkJCSR0b3RhbCA9IHNlbGY6OmJjc3VtKGFycmF5KCR0b3RhbCwgJHRheGVkKSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRlZHVjdCkpDQoJCQkJew0KCQkJCQkkdGF4ZWQgPSBzZWxmOjpiY3N1bSgkZGVkdWN0KTsNCgkJCQl9DQoJCQkJcmV0dXJuICR0YXg7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkJDQoJcHJvdGVjdGVkIHN0YXRpYyAkdGF4cnVsZXMgPSBhcnJheSgpOw0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUYXhSdWxlKCRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIGJ1aWxkIHRoZSBrZXkNCgkJaWYgKHNlbGY6OiRvcmdhbml6ZXIpDQoJCXsNCgkJCSRrZXkgPSAkbGV2ZWwuJGNvdW50cnkuJHJlZ2lvbi5zZWxmOjokb3JnYW5pemVyOw0KCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGJlZW4gc2V0DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiR0YXhydWxlc1ska2V5XSkpDQoJCQl7DQoJCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQkvLyBzZXQgdGhlIHRheCBydWxlDQoJCQkJc2VsZjo6c2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCwgJGNvdW50cnksICRyZWdpb24pOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGJlZW4gc2V0DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHRheHJ1bGVzWyRrZXldKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdGF4cnVsZXNbJGtleV0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokdGF4cnVsZXNbJGtleV07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoCSdhLmlkJywnYS50YXgnLCdhLm5hbWUnKSwNCgkJCWFycmF5KAknaWQnLCd0YXgnLCduYW1lJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdGF4X3J1bGUnLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EubGV2ZWwnKSAuICcgPSAnLiAoaW50KSAkbGV2ZWwpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLm9yZ2FuaXplcicpIC4gJyA9ICcuIChpbnQpIHNlbGY6OiRvcmdhbml6ZXIpOw0KCQkvLyBjaGVjayBmb3IgY291bnRyeSBhbmQgcmVnaW9uDQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeScpIC4gJyA9ICcuIChpbnQpICRjb3VudHJ5KTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnLiAoaW50KSAkcmVnaW9uKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlzZWxmOjokdGF4cnVsZXNbJGtleV0gPSAkZGItPmxvYWRBc3NvYygpOw0KCQl9DQoJCWVsc2VpZiAoKGludCkkY291bnRyeSA+IDAgJiYgKGludCkkcmVnaW9uID4gMCkNCgkJew0KCQkJLy8gbm93IG9ubHkgY2hlY2sgZm9yIGNvdW50cnkNCgkJCXJldHVybiBzZWxmOjpzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSk7DQoJCX0NCgkJZWxzZWlmICgoaW50KSRjb3VudHJ5ID4gMCAmJiAkcmVnaW9uID09IDApDQoJCXsNCgkJCS8vIG5vdyBjaGVjayBmb3IgYW55IHdpdGhvdXQgY291bnRyeQ0KCQkJcmV0dXJuIHNlbGY6OnNldFRheFJ1bGUoJGRiLCAka2V5LCAkbGV2ZWwpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJKiBAcGFyYW0gZmxvYXQgJGFtb3VudA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmNzdW0oJGFycmF5LCAkc2NhbGUgPSA0KQ0KCXsNCgkJJHJlcyA9IDAuMDsNCgkJZm9yZWFjaCgkYXJyYXkgYXMgJHZhbCl7DQoJCQkkcmVzID0gYmNhZGQoJHJlcywgJHZhbCwgJHNjYWxlKTsNCgkJfQ0KCQlyZXR1cm4gJHJlczsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGFtb3VudA0KCSAqIEByZXR1cm4gbWl4ZWR8bnVtYmVyDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGRDdXJyZW5jeSgkYW1vdW50LCAkb3JnYW5pemVyID0gbnVsbCkNCgl7DQoJCS8vIGZpcnN0IHdlIG11c3Qga25vdyB3aG8gaXMgbG9va2luZyAocHVibGljIHwgdXNlciB8IG9yZ2luaXplciB8IGFkbWluKQ0KCQlpZiAoJG9yZ2FuaXplcikNCgkJew0KCQkJc2VsZjo6JG9yZ2FuaXplciA9ICRvcmdhbml6ZXI7DQoJCX0NCgkJcmV0dXJuIHNlbGY6Om1ha2VNb25leSgkYW1vdW50KTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjdXJyZW5jeURldGFpbHMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogQHBhcmFtIGJvb2wgJGNvZGV0aHJlZQ0KCSAqIEByZXR1cm4gYm9vbHxtaXhlZA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lEZXRhaWxzKCRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCS8vIGNoZWNrIGlmIGN1cnJlbmN5IGNvZGV0aHJlZSBpcyBzZXQNCgkJaWYgKCEkY29kZXRocmVlKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHByaWNlIGN1cnJlbmN5DQoJCQkkY29kZXRocmVlID0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ2N1cnJlbmN5JywgZmFsc2UpOw0KCQl9DQoJCS8vIHJldHVybiBjYWNoZWQgZGF0YSBpZiBzZXQNCgkJaWYgKCRjb2RldGhyZWUgJiYgIWlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KAknYS5pZCcsJ2EubmFtZScsJ2EuY29kZXRocmVlJywnYS5udW1lcmljY29kZScsJ2Euc3ltYm9sJywnYS50aG91c2FuZHMnLCdhLmRlY2ltYWxwbGFjZScsDQoJCQkJCSdhLmRlY2ltYWxzeW1ib2wnLCdhLnBvc2l0aXZlc3R5bGUnLCdhLm5lZ2F0aXZlc3R5bGUnKSwNCgkJCQlhcnJheSgJJ2N1cnJlbmN5X2lkJywnY3VycmVuY3lfbmFtZScsJ2N1cnJlbmN5X2NvZGV0aHJlZScsJ2N1cnJlbmN5X251bWVyaWNjb2RlJywnY3VycmVuY3lfc3ltYm9sJywNCgkJCQkJJ2N1cnJlbmN5X3Rob3VzYW5kcycsJ2N1cnJlbmN5X2RlY2ltYWxwbGFjZScsJ2N1cnJlbmN5X2RlY2ltYWxzeW1ib2wnLCdjdXJyZW5jeV9wb3NpdGl2ZXN0eWxlJywNCgkJCQkJJ2N1cnJlbmN5X25lZ2F0aXZlc3R5bGUnKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY3VycmVuY3knLCAnYScpKTsNCgkJCWlmIChpc19udW1lcmljKCRjb2RldGhyZWUpKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkY29kZXRocmVlKTsNCgkJCX0NCgkJCWVsc2VpZiAoc3RybGVuKCRjb2RldGhyZWUpID09IDMpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb2RldGhyZWUnKSAuICcgPSAnLiRkYi0+cXVvdGUoJGNvZGV0aHJlZSkpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCdOT05FJykpOw0KCQkJfQ0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQl9DQoJCS8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBzZXQNCgkJaWYgKGlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRudW1iZXINCgkgKiBAcGFyYW0gYm9vbCAkY3VycmVuY3kNCgkgKiBAcmV0dXJuIG1peGVkfG51bWJlcg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsICRjdXJyZW5jeSA9IGZhbHNlKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgd2UgaGF2ZSBhIG51bWJlcg0KCQlpZiAoaXNfbnVtZXJpYygkbnVtYmVyKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIG5lZ2F0aXZlIGZpbmRlciBmaWxlDQoJCQlpbmNsdWRlX29uY2UgJ25lZ2F0aXZlZmluZGVyLnBocCc7DQoJCQkvLyBjaGVjayBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlDQoJCQkkbmVnYXRpdmVGaW5kZXJPYmogPSBuZXcgW1tbQ29tcG9uZW50XV1dTmVnYXRpdmVGaW5kZXIobmV3IFtbW0NvbXBvbmVudF1dXUV4cHJlc3Npb24oIiRudW1iZXIiKSk7DQoJCQkkbmVnYXRpdmUgPSAkbmVnYXRpdmVGaW5kZXJPYmotPmlzSXROZWdhdGl2ZSgpID8gVFJVRSA6IEZBTFNFOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8ganVzdCByZXR1cm4gdGhlIHN0cmluZw0KCQkJcmV0dXJuICRudW1iZXI7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmdldEN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmdldEN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Z2V0Q3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGN1cnJlbmN5ID0gc2VsZjo6Z2V0Q3VycmVuY3lEZXRhaWxzKCRjdXJyZW5jeSk7DQoJCX0NCgkJLy8gc2V0IHRoZSBudW1iZXIgdG8gY3VycmVuY3kNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRjdXJyZW5jeSkpDQoJCXsNCgkJCWlmICghJG5lZ2F0aXZlKQ0KCQkJew0KCQkJCSRmb3JtYXQgPSAkY3VycmVuY3ktPmN1cnJlbmN5X3Bvc2l0aXZlc3R5bGU7DQoJCQkJJHNpZ24gPSAnKyc7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGZvcm1hdCA9ICRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZTsNCgkJCQkkc2lnbiA9ICctJzsNCgkJCQkkbnVtYmVyID0gYWJzKCRudW1iZXIpOw0KCQkJfQ0KCQkJJHNldHVwTnVtYmVyID0gbnVtYmVyX2Zvcm1hdCgoZmxvYXQpJG51bWJlciwgKGludCkkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxwbGFjZSwgJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sLCAnICcpOyAvLyRjdXJyZW5jeS0+Y3VycmVuY3lfdGhvdXNhbmRzIFRPRE8pOw0KCQkJJHNlYXJjaCA9IGFycmF5KCd7c2lnbn0nLCAne251bWJlcn0nLCAne3N5bWJvbH0nKTsNCgkJCSRyZXBsYWNlID0gYXJyYXkoJHNpZ24sICRzZXR1cE51bWJlciwgJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpOw0KCQkJJG1vbmV5TWFkZSA9IHN0cl9yZXBsYWNlICgkc2VhcmNoLCRyZXBsYWNlLCRmb3JtYXQpOw0KDQoJCQlyZXR1cm4gJG1vbmV5TWFkZTsNCgkJfQ0KCQlyZXR1cm4gJG51bWJlcjsNCgl9DQoNCgkvKioNCgkgKglDaGFuZ2UgdG8gbmljZSBmYW5jeSBkYXRlDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeURhdGUoJGRhdGUpDQoJew0KCQlpZiAoIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJGRhdGUpKQ0KCQl7DQoJCQkkZGF0ZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ2pTIFxvXGYgRiBZJywkZGF0ZSk7DQoJfQ0KDQoJLyoqDQoJICoJQ2hhbmdlIHRvIG5pY2UgZmFuY3kgdGltZSBhbmQgZGF0ZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFuY3lEYXRlVGltZSgkdGltZSkNCgl7DQoJCWlmICghc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkdGltZSkpDQoJCXsNCgkJCSR0aW1lID0gc3RydG90aW1lKCR0aW1lKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnKEc6aSkgalMgXG9cZiBGIFknLCR0aW1lKTsNCgl9DQoNCgkvKioNCgkgKglDaGFuZ2UgdG8gbmljZSBob3VyOm1pbnV0ZXMgdGltZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFuY3lUaW1lKCR0aW1lKQ0KCXsNCgkJaWYgKCFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCR0aW1lKSkNCgkJew0KCQkJJHRpbWUgPSBzdHJ0b3RpbWUoJHRpbWUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCdHOmknLCR0aW1lKTsNCgl9DQoNCgkvKioNCgkgKglDaGVjayBpZiBzdHJpbmcgaXMgYSB2YWxpZCB0aW1lIHN0YW1wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkVGltZVN0YW1wKCR0aW1lc3RhbXApDQoJew0KCQlyZXR1cm4gKChpbnQpICR0aW1lc3RhbXAgPT09ICR0aW1lc3RhbXApDQoJCSYmICgkdGltZXN0YW1wIDw9IFBIUF9JTlRfTUFYKQ0KCQkmJiAoJHRpbWVzdGFtcCA+PSB+UEhQX0lOVF9NQVgpOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZmlsZU5hbWUNCgkgKiBAcGFyYW0gJGZpbGVGb3JtYXQNCgkgKiBAcGFyYW0gJHRhcmdldA0KCSAqIEBwYXJhbSAkcGF0aA0KCSAqIEBwYXJhbSAkZnVsbFBhdGgNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlc2l6ZUltYWdlKCRmaWxlTmFtZSwgJGZpbGVGb3JtYXQsICR0YXJnZXQsICRwYXRoLCAkZnVsbFBhdGgpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpOw0KCQl9DQoJCS8vIGZpcnN0IGNoZWNrIGlmIHdlIHNob3VsZCByZXNpemUgdGhpcyB0YXJnZXQNCgkJaWYgKDEgPT0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdjcm9wXycuJHRhcmdldCwgMCkpDQoJCXsNCgkJCS8vIGxvYWQgdGhlIHNpemUgdG8gYmUgc2V0DQoJCQkkaGVpZ2h0ID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCR0YXJnZXQuJ19oZWlnaHQnLCAnbm90X3NldCcpOw0KCQkJJHdpZHRoID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCR0YXJnZXQuJ193aWR0aCcsICdub3Rfc2V0Jyk7DQoJCQkvLyBnZXQgaW1hZ2UgcHJvcGVydGllcw0KCQkJJGltYWdlID0gc2VsZjo6Z2V0SW1hZ2VGaWxlUHJvcGVydGllcygkZmlsZU5hbWUuJy4nLiRmaWxlRm9ybWF0LCAkcGF0aCk7DQoJCQlpZiAoJHdpZHRoICE9PSAnbm90X3NldCcgJiYgJGhlaWdodCAhPT0gJ25vdF9zZXQnICYmICgkaW1hZ2UtPndpZHRoICE9ICR3aWR0aCB8fCAkaW1hZ2UtPmhlaWdodCAhPSAkaGVpZ2h0KSkNCgkJCXsNCgkJCQkvLyBpZiBpbWFnZSBpcyBodWdlIGFuZCBzaG91bGQgb25seSBiZSBzY2FsZWQsIHJlc2l6ZSBpdCBvbiB0aGUgZmx5DQoJCQkJaWYoKCRpbWFnZS0+d2lkdGggPiA5MDAgfHwgJGltYWdlLT5oZWlnaHQgPiA3MDApICYmICgkaGVpZ2h0ID09IDAgfHwgJHdpZHRoID09IDApKQ0KCQkJCXsNCgkJCQkJaWYoJGZpbGVGb3JtYXQgPT0gImpwZyIgfHwgJGZpbGVGb3JtYXQgPT0gImpwZWciICkNCgkJCQkJew0KCQkJCQkJJHNyYyA9IGltYWdlY3JlYXRlZnJvbWpwZWcoJGZ1bGxQYXRoKTsNCgkJCQkJfQ0KCQkJCQllbHNlaWYoJGZpbGVGb3JtYXQgPT0gInBuZyIpDQoJCQkJCXsNCgkJCQkJCSRzcmMgPSBpbWFnZWNyZWF0ZWZyb21wbmcoJGZ1bGxQYXRoKTsNCgkJCQkJfQ0KCQkJCQllbHNlaWYoJGZpbGVGb3JtYXQgPT0gImdpZiIpDQoJCQkJCXsNCgkJCQkJCSRzcmMgPSBpbWFnZWNyZWF0ZWZyb21naWYoJGZ1bGxQYXRoKTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCQlpZiAoJGhlaWdodCAhPSAwKQ0KCQkJCQl7DQoJCQkJCQkkaFJhdGlvID0gJGltYWdlLT5oZWlnaHQgLyAkaGVpZ2h0Ow0KCQkJCQl9DQoJCQkJCWlmICgkd2lkdGggIT0gMCkNCgkJCQkJew0KCQkJCQkJJHdSYXRpbyA9ICRpbWFnZS0+d2lkdGggLyAkd2lkdGg7DQoJCQkJCX0NCgkJCQkJaWYgKGlzc2V0KCRoUmF0aW8pICYmIGlzc2V0KCR3UmF0aW8pKQ0KCQkJCQl7DQoJCQkJCQkkbWF4UmF0aW8JPSBtYXgoJHdSYXRpbywgJGhSYXRpbyk7DQoJCQkJCX0NCgkJCQkJZWxzZWlmIChpc3NldCgkd1JhdGlvKSkNCgkJCQkJew0KCQkJCQkJJG1heFJhdGlvCT0gJHdSYXRpbzsNCgkJCQkJfQ0KCQkJCQllbHNlaWYgKGlzc2V0KCRoUmF0aW8pKQ0KCQkJCQl7DQoJCQkJCQkkbWF4UmF0aW8JPSAkaFJhdGlvOw0KCQkJCQl9DQoJCQkJCWlmICgkbWF4UmF0aW8gPiAxKQ0KCQkJCQl7DQoJCQkJCQkkbmV3d2lkdGgJPSAkaW1hZ2UtPndpZHRoIC8gJG1heFJhdGlvOw0KCQkJCQkJJG5ld2hlaWdodAk9ICRpbWFnZS0+aGVpZ2h0IC8gJG1heFJhdGlvOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJG5ld3dpZHRoCT0gJGltYWdlLT53aWR0aDsNCgkJCQkJCSRuZXdoZWlnaHQJPSAkaW1hZ2UtPmhlaWdodDsNCgkJCQkJfQ0KDQoJCQkJCSR0bXAJCQk9IGltYWdlY3JlYXRldHJ1ZWNvbG9yKCRuZXd3aWR0aCwgJG5ld2hlaWdodCk7DQoJCQkJCSRiYWNrZ3JvdW5kQ29sb3IJPSBpbWFnZWNvbG9yYWxsb2NhdGUoJHRtcCwgMjU1LCAyNTUsIDI1NSk7DQoNCgkJCQkJaW1hZ2VmaWxsKCR0bXAsIDAsIDAsICRiYWNrZ3JvdW5kQ29sb3IpOw0KCQkJCQlpbWFnZWNvcHlyZXNhbXBsZWQoJHRtcCwgJHNyYywgMCwgMCwgMCwgMCwkbmV3d2lkdGgsICRuZXdoZWlnaHQsICRpbWFnZS0+d2lkdGgsICRpbWFnZS0+aGVpZ2h0KTsNCgkJCQkJaW1hZ2VqcGVnKCR0bXAsICRmdWxsUGF0aCwgMTAwKTsNCgkJCQkJaW1hZ2VkZXN0cm95KCRzcmMpOw0KCQkJCQlpbWFnZWRlc3Ryb3koJHRtcCk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgY29udGludWUgaWYgaW1hZ2Ugc2hvdWxkIGJlIGNyb3BwZWQNCgkJCQlpZiAoJGhlaWdodCAhPSAwICYmICR3aWR0aCAhPSAwKQ0KCQkJCXsNCgkJCQkJLy8gSW5jbHVkZSB3aWRlaW1hZ2UgLSBodHRwOi8vd2lkZWltYWdlLnNvdXJjZWZvcmdlLm5ldA0KCQkJCQlyZXF1aXJlX29uY2UoSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvd2lkZWltYWdlL1dpZGVJbWFnZS5waHAnKTsNCgkJCQkJJGJ1aWxkZXIgPSBXaWRlSW1hZ2U6OmxvYWQoJGZ1bGxQYXRoKTsNCgkJCQkJJHJlc2l6ZWQgPSAkYnVpbGRlci0+cmVzaXplKCR3aWR0aCwgJGhlaWdodCwgJ291dHNpZGUnKS0+Y3JvcCgnY2VudGVyJywgJ21pZGRsZScsICR3aWR0aCwgJGhlaWdodCk7DQoJCQkJCSRyZXNpemVkLT5zYXZlVG9GaWxlKCRmdWxsUGF0aCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdEb2NOdW1iZXIoJG9yZ2FuaXplciwgJGlkID0gbnVsbCkNCgl7DQoJCWlmIChpc19udW1lcmljKCRvcmdhbml6ZXIpKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGlzIGludm9pY2UgaGFzIHRyYW5zYWN0aW9ucw0KCQkJJGlzSW52b2ljZSA9IGZhbHNlOw0KCQkJaWYgKCRpZCkNCgkJCXsNCgkJCQlpZiAoJGZvdW5kVHJhbnMgPSBzZWxmOjpnZXRWYXIoJ3RyYW5zYWN0aW9uJywgJGlkLCAnaW52b2ljZScsICdpZCcpKQ0KCQkJCXsNCgkJCQkJJGlzSW52b2ljZSA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZmlyc3Qgd2UgZ2V0IG9yZ2FuaXplcnMgaW52b2ljaW5nIG1ldGhvZA0KCQkJJHByb2Zvcm1hID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAncHJvZm9ybWEnKTsNCgkJCWlmICgwID09ICRwcm9mb3JtYSB8fCAkaXNJbnZvaWNlKQ0KCQkJew0KCQkJCSRpc0ludm9pY2UgPSB0cnVlOw0KCQkJCSRuZXh0ID0gKGludCkgc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAnbmV4dF9pbnZvaWNlX251bWJlcicpOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgbmV4dCBpcyBhIG51bWJlcg0KCQkJCWlmICghaXNfbnVtZXJpYygkbmV4dCkgfHwgISRuZXh0IHx8IGVtcHR5KCRuZXh0KSB8fCAkbmV4dCA8IDEpDQoJCQkJew0KCQkJCQkkbmV4dCA9IDE7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSB0aGUgbmV4dCBudW1iZXIgbm93DQoJCQkJJG9yZyA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkkb3JnLT5pZCA9ICRvcmdhbml6ZXI7DQoJCQkJJG9yZy0+bmV4dF9pbnZvaWNlX251bWJlciA9IChpbnQpICRuZXh0ICsgMTsNCgkJCQlGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fb3JnYW5pemVyJywgJG9yZywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHByb2Zvcm1hKQ0KCQkJew0KCQkJCSRuZXh0ID0gKGludCkgc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAnbmV4dF9wcm9mb3JtYV9udW1iZXInKTsNCgkJCQkvLyBtYWtlIHN1cmUgdGhlIG5leHQgaXMgYSBudW1iZXINCgkJCQlpZiAoIWlzX251bWVyaWMoJG5leHQpIHx8ICEkbmV4dCB8fCBlbXB0eSgkbmV4dCkgfHwgJG5leHQgPCAxKQ0KCQkJCXsNCgkJCQkJJG5leHQgPSAxOw0KCQkJCX0NCgkJCQkvLyB1cGRhdGUgdGhlIG5leHQgbnVtYmVyIG5vdw0KCQkJCSRvcmcgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJG9yZy0+aWQgPSAkb3JnYW5pemVyOw0KCQkJCSRvcmctPm5leHRfcHJvZm9ybWFfbnVtYmVyID0gKGludCkgJG5leHQgKyAxOw0KCQkJCUZhY3Rvcnk6OmdldERibygpLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAkb3JnLCAnaWQnKTsNCgkJCX0NCgkJCS8vIGdldCBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZSgkb3JnYW5pemVyLCAncHJlZml4JywgJ1ZETScpOw0KCQkJaWYgKCRpc0ludm9pY2UpDQoJCQl7DQoJCQkJcmV0dXJuICdJTlYtJy4kcHJlZml4LnNwcmludGYoJyUwN2QnLCAkbmV4dCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICdQSS0nLiRwcmVmaXguc3ByaW50ZignJTA2ZCcsICRuZXh0KTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tOcigmJGl0ZW0sICR3aGVyZSkNCgl7DQoJCWxpc3QoJHR5cGUsICRjb2x1bW4pID0gZXhwbG9kZSgnLicsICR3aGVyZSk7DQoJCWlmICgkdHlwZSAmJiAkY29sdW1uICYmIGlzc2V0KCRpdGVtLT4kY29sdW1uKSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgYWxsIGl0ZW1zIHdpdGggdGhlIHNhbWUgY29sdW1uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2lkJyAsJ2NyZWF0ZWQnLCAnbnVtYmVyJywgJ29yZ2FuaXplcicpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJGNvbHVtbikgLiAnID0gJy4kZGItPnF1b3RlKCRpdGVtLT4kY29sdW1uKSk7DQoJCQlpZiAoaXNzZXQoJGl0ZW0tPm9yZ2FuaXplcikpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnb3JnYW5pemVyJykgLiAnID0gJyAuIChpbnQpICRpdGVtLT5vcmdhbml6ZXIpOw0KCQkJfQ0KCQkJJHF1ZXJ5LT5vcmRlcignY3JlYXRlZCBBU0MnKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCSRmb3VuZCA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQlpZiAoY291bnQoJGZvdW5kKSA+IDEpDQoJCQkJew0KCQkJCQkvLyBpcyB0aGUgY3VycmVudCBpdGVtIHRoZSBvbGRlciBvbmU/DQoJCQkJCWlmICgkaXRlbS0+aWQgIT0gJGZvdW5kWzBdLT5pZCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uKTsJCQkJCQkJDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBpbnN1cmUgd2UgdXBkYXRlIFByb2Zvcm1hcyBvbmNlIHBheW1lbnQgaXMgbWFkZQ0KCQkJaWYgKHN0cnBvcygkaXRlbS0+JGNvbHVtbiwgJ1BJJykgIT09IGZhbHNlKQ0KCQkJew0KCQkJCWlmICgkdXBkYXRlID0gc2VsZjo6Z2V0VmFyKCd0cmFuc2FjdGlvbicsICRpdGVtLT5pZCwgJ2ludm9pY2UnLCAnaWQnKSkNCgkJCQl7DQoJCQkJCS8vIGlmIHByb2Zvcm1hIGlzIHNldCBzdG9yZSBiYWNrdXAgZm9yIGxhdGVyIHVzZS4NCgkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uLCBmYWxzZSwgJ3Byb2Zvcm1hJyk7DQoJCQkJCS8vIHVwZGF0ZSB0byBpbnZvaWNlDQoJCQkJCXNlbGY6OnNldE5yKCRpdGVtLCAkdHlwZSwgJGNvbHVtbik7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmICghJHVwZGF0ZSA9IHNlbGY6OmdldFZhcigndHJhbnNhY3Rpb24nLCAkaXRlbS0+aWQsICdpbnZvaWNlJywgJ2lkJykpDQoJCQkJew0KCQkJCQkvLyB0YWtlIGJhY2sgdG8gcHJvZm9ybWEgKFRPRE8gLSBtYXkgbm90IGJlIGlkZWFsKQ0KCQkJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoISRpdGVtLT4kY29sdW1uIHx8IGVtcHR5KCRpdGVtLT4kY29sdW1uKSkNCgkJew0KCQkJLy8gaWYgbm90IHNldCwgdGhlbiBzZXQgbm93DQoJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOwkNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE5yKCYkaXRlbSwgJiR0eXBlLCAmJGNvbHVtbiwgJG5ldyA9IHRydWUsICRvdGhlciA9IG51bGwpDQoJew0KCQlpZiAoJG5ldykNCgkJew0KCQkJLy8gZmlyc3QgdXBkYXRlIHRoZSBpdGVtDQoJCQkkaXRlbS0+JGNvbHVtbgk9IHNlbGY6Om5ld0RvY051bWJlcigkaXRlbS0+b3JnYW5pemVyLCAkaXRlbS0+aWQpOw0KCQl9DQoJCS8vIG5vdyB1cGRhdGUgdGhlIHRhYmxlDQoJCSR1cGRhdGVJdGVtCQk9IG5ldyBcc3RkQ2xhc3M7DQoJCSR1cGRhdGVJdGVtLT5pZAkJPSAkaXRlbS0+aWQ7DQoJCWlmICgkY29sdW1uKQ0KCQl7DQoJCQkkdXBkYXRlSXRlbS0+JGNvbHVtbiA9ICRpdGVtLT4kY29sdW1uOw0KCQkJaWYgKCRvdGhlcikNCgkJCXsNCgkJCQkvLyB1cGRhdGUgdGhlIG90aGVyIGZpZWxkIHdpdGggdGhlIGNvbHVtbg0KCQkJCSR1cGRhdGVJdGVtLT4kb3RoZXIgPSAkaXRlbS0+JGNvbHVtbjsNCgkJCQkkaXRlbS0+JG90aGVyID0gJGl0ZW0tPiRjb2x1bW47DQoJCQl9DQoJCX0JCQkJDQoJCS8vIHVwZGF0ZSB0aGUgaXRlbSBub3cNCgkJRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUsICR1cGRhdGVJdGVtLCAnaWQnKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZpbGVQYXRoKCR0eXBlID0gJ3BhdGgnLCAkdGFyZ2V0ID0gJ2ZpbGVwYXRoJywgJGRlZmF1bHQgPSBKUEFUSF9TSVRFIC4gJy9pbWFnZXMvJywgJGNyZWF0ZUlmTm90U2V0ID0gdHJ1ZSkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJJGZpbGVQYXRoID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCR0YXJnZXQsICRkZWZhdWx0KTsNCgkJLy8gY2hlY2sgdGhlIGZpbGUgcGF0aA0KCQlpZiAoc3RycG9zKCRmaWxlUGF0aCwgSlBBVEhfU0lURSkgPT09IGZhbHNlKQ0KCQl7DQoJCQkkZmlsZVBhdGggPSBKUEFUSF9TSVRFIC4gJy9pbWFnZXMvJzsNCgkJfQ0KCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5mb2xkZXInKTsNCgkJLy8gY3JlYXRlIHRoZSBmb2xkZXIgaWYgaXQgZG9lcyBub3QgZXhpc3QNCgkJaWYgKCRjcmVhdGVJZk5vdFNldCAmJiAhSkZvbGRlcjo6ZXhpc3RzKCRmaWxlUGF0aCkpDQoJCXsNCgkJCUpGb2xkZXI6OmNyZWF0ZSgkZmlsZVBhdGgpOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgdXJsDQoJCWlmICgkdHlwZSA9PT0gJ3VybCcpDQoJCXsNCgkJCSRmaWxlUGF0aCA9IHRyaW0oc3RyX3JlcGxhY2UoSlBBVEhfU0lURSwgJycsJGZpbGVQYXRoKSwnLycpOw0KCQkJcmV0dXJuIFVyaTo6cm9vdCgpLiRmaWxlUGF0aC4nLyc7DQoJCX0NCgkJcmV0dXJuICcvJy50cmltKCRmaWxlUGF0aCwgJy8nKS4nLyc7DQoJfQ==', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnbG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ2xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlsb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0=', '', '', '', '', '', 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlsb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw==', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Electronic Trading Platform', '', '', 'Electronic Trading', '', '', '', 2, 'https://www.vdm.io/updates/electronic_trading_update_server.xml', 'https://www.vdm.io/', '', 'rhDqJicA7+30SXfWLrbrcIZjn/Urz39X3VeSsq2rTq4=', '', '', 2, 55, '', 1, 58),
(17, 1, '', 1, '', '', '', '', '', 1, '', 1, '', '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'JCB-pro.txt', '', '', 'Vast Development Method', '3.1.19', 'Copyright (C) 2015. All Rights Reserved', '2016-02-29 09:48:50', '', 'xmPvSegoAgCMLKDgZYrxDfZk72ACVYwppJH8oNbz1LA=', 'p+fdxfXxLoZ55Tfe/CgzA/EVRkLPVW0i9pwi2qkp/4Y=', '', 'G8usp0HTPVHhb3fhDSNaFpTuMTLgEXtyaElwU1ZCVSM=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEzMHB4OyB9DQouZmllbGRTbWFsbCB7IHdpZHRoOiA2MHB4OyB9DQpjb2RlIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW46IDNweDt9', '', '', 1, '', 'The Component Builder for [Joomla](http://www.joomla.org/) that is highly advanced, truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](http://www.joomla.org/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!', 'joomla@vdm.io', '', '', '1UI8B7I2vDDAV21z06SbWlfsn9fztwTv/xXftsr743hbcGVO0yacLAqNoy9X8kYq9wbGYYaSy3yatbFyvNJCQQ==', '', '93a8be13-f9bb-4e22-82a3-3bf27ef1cba1', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2023-10-21 13:48:03', 1, 'Component Builder', 'componentbuilder', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'CS8qDQoJICogQXV0b2xvYWRlcg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXV0b0xvYWRlcigkdHlwZSA9ICdjb21waWxlcicpDQoJew0KCQkvLyBsb2FkIHRoZSB0eXBlIGNsYXNzZXMNCgkJaWYgKCdzbWFydCcgIT09ICR0eXBlKQ0KCQl7DQoJCQlmb3JlYWNoIChnbG9iKEpQQVRIX0FETUlOSVNUUkFUT1IuIi9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy8iLiR0eXBlLiIvKi5waHAiKSBhcyAkYXV0b0ZpbGUpDQoJCQl7DQoJCQkJcmVxdWlyZV9vbmNlICRhdXRvRmlsZTsNCgkJCX0NCgkJfQ0KCQkvLyBsb2FkIG9ubHkgaWYgY29tcGlsZXINCgkJaWYgKCdjb21waWxlcicgPT09ICR0eXBlKQ0KCQl7DQoJCQkvLyBpbXBvcnQgdGhlIEpvb21sYSBsaWJyYXJ5cw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZmlsZScpOw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZm9sZGVyJyk7DQoJCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5hcmNoaXZlJyk7DQoJCQlqaW1wb3J0KCdqb29tbGEuYXBwbGljYXRpb24uY29tcG9uZW50Lm1vZGVsbGlzdCcpOw0KCQkJLy8gaW5jbHVkZSBjbGFzcyB0byBtaW5pZnkganMNCgkJCXJlcXVpcmVfb25jZSBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvanMucGhwJzsNCgkJfQ0KCQkvLyBsb2FkIG9ubHkgaWYgc21hcnQNCgkJaWYgKCdzbWFydCcgPT09ICR0eXBlKQ0KCQl7DQoJCQkvLyBpbXBvcnQgdGhlIEpvb21sYSBsaWJyYXJpZXMNCgkJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZpbGUnKTsNCgkJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZvbGRlcicpOw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uYXJjaGl2ZScpOw0KCQkJamltcG9ydCgnam9vbWxhLmFwcGxpY2F0aW9uLmNvbXBvbmVudC5tb2RlbGxpc3QnKTsNCgkJfQ0KCQkvLyBsb2FkIHRoaXMgZm9yIGFsbA0KCQlqaW1wb3J0KCdqb29tbGEuYXBwbGljYXRpb24nKTsNCgl9DQoNCgkvKioNCgkqIAlUaGUgZHluYW1pYyBidWlsZGVyIG9mIHZpZXdzLCB0YWJsZXMgYW5kIGZpZWxkcw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHluYW1pY0J1aWxkZXIoJiRkYXRhLCAkdHlwZSkNCgl7DQoJCSRleHRydWRlcl9fID0gbmV3IFN1cGVyX19fMTlhMzkzNzlfZDE5Ml80NWQ2X2IxNThfZDE4Y2JkNDA0OWJkX19fUG93ZXIoJGRhdGEpOw0KCX0NCg0KCS8qKg0KCSogCVRoZSB6aXBwZXIgbWV0aG9kDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB6aXAoJHdvcmtpbmdESVIsICYkZmlsZXBhdGgpDQoJew0KCQkvLyBzdG9yZSB0aGUgY3VycmVudCBqb29tbGEgd29ya2luZyBkaXJlY3RvcnkNCgkJJGpvb21sYSA9IGdldGN3ZCgpOw0KDQoJCS8vIHdlIGFyZSBjaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIGNvbXBvbmVudCB0ZW1wIGZvbGRlcg0KCQljaGRpcigkd29ya2luZ0RJUik7DQoNCgkJLy8gdGhlIGZ1bGwgZmlsZSBwYXRoIG9mIHRoZSB6aXAgZmlsZQ0KCQkkZmlsZXBhdGggPSBKUGF0aDo6Y2xlYW4oJGZpbGVwYXRoKTsNCg0KCQkvLyBkZWxldGUgYW4gZXhpc3RpbmcgemlwIGZpbGUgKG9yIHVzZSBhbiBleGNsdXNpb24gcGFyYW1ldGVyIGluIEpGb2xkZXI6OmZpbGVzKCkNCgkJSkZpbGU6OmRlbGV0ZSgkZmlsZXBhdGgpOw0KDQoJCS8vIGdldCBhIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRyZWUNCgkJJGZpbGVzID0gSkZvbGRlcjo6ZmlsZXMoJy4nLCAnJywgdHJ1ZSwgdHJ1ZSk7DQoJCSR6aXBBcnJheSA9IGFycmF5KCk7DQoJCS8vIHNldHVwIHRoZSB6aXAgYXJyYXkNCgkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKQ0KCQl7DQoJCSAgICR0bXAgPSBhcnJheSgpOw0KCQkgICAkdG1wWyduYW1lJ10gPSBzdHJfcmVwbGFjZSgnLi8nLCAnJywgJGZpbGUpOw0KCQkgICAkdG1wWydkYXRhJ10gPSBKRmlsZTo6cmVhZCgkZmlsZSk7DQoJCSAgICR0bXBbJ3RpbWUnXSA9IGZpbGVtdGltZSgkZmlsZSk7DQoJCSAgICR6aXBBcnJheVtdID0gJHRtcDsNCgkJfQ0KDQoJCS8vIGNoYW5nZSBiYWNrIHRvIGpvb21sYSB3b3JraW5nIGRpcmVjdG9yeQ0KCQljaGRpcigkam9vbWxhKTsNCg0KCQkvLyBnZXQgdGhlIHppcCBhZGFwdGVyDQoJCSR6aXAgPSBKQXJjaGl2ZTo6Z2V0QWRhcHRlcignemlwJyk7DQoNCgkJLy9jcmVhdGUgdGhlIHppcCBmaWxlDQoJCWlmICgkemlwLT5jcmVhdGUoJGZpbGVwYXRoLCAkemlwQXJyYXkpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCS8qKg0KCSAqIFJlbW92ZSBmb2xkZXJzIHdpdGggZmlsZXMNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZGlyICBUaGUgcGF0aCB0byBmb2xkZXIgdG8gcmVtb3ZlDQoJICogQHBhcmFtICAgYm9vbGVhbiAgICRnaXQgIGlmIHRoZXJlIGlzIGEgZ2l0IGZvbGRlciBpbiB0aGF0IG11c3Qgbm90IGJlIHJlbW92ZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gICBUcnVlIGluIGFsbCBpcyByZW1vdmVkDQoJICogDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZW1vdmVGb2xkZXIoJGRpciwgJGdpdCA9IGZhbHNlKQ0KCXsNCgkJaWYgKEpGb2xkZXI6OmV4aXN0cygkZGlyKSkNCgkJew0KCQkJJGl0ID0gbmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRkaXIpOw0KCQkJJGl0ID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IoJGl0LCBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpDSElMRF9GSVJTVCk7DQoJCQlmb3JlYWNoICgkaXQgYXMgJGZpbGUpDQoJCQl7DQoJCQkJaWYgKCcuJyA9PT0gJGZpbGUtPmdldEJhc2VuYW1lKCkgfHwgJy4uJyA9PT0gICRmaWxlLT5nZXRCYXNlbmFtZSgpKSBjb250aW51ZTsNCgkJCQlpZiAoJGZpbGUtPmlzRGlyKCkpDQoJCQkJew0KCQkJCQlpZiAoJGdpdCAmJiBzdHJwb3MoJGZpbGUtPmdldFBhdGhuYW1lKCksICRkaXIuJy8uZ2l0JykgIT09IGZhbHNlKSBjb250aW51ZTsNCgkJCQkJSkZvbGRlcjo6ZGVsZXRlKCRmaWxlLT5nZXRQYXRobmFtZSgpKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJaWYgKCRnaXQgJiYgc3RycG9zKCRmaWxlLT5nZXRQYXRobmFtZSgpLCAkZGlyLicvLmdpdCcpICE9PSBmYWxzZSkgY29udGludWU7DQoJCQkJCUpGaWxlOjpkZWxldGUoJGZpbGUtPmdldFBhdGhuYW1lKCkpOw0KCQkJCX0NCgkJCX0NCgkJCWlmICghJGdpdCAmJiBKRm9sZGVyOjpkZWxldGUoJGRpcikpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCUNyZWF0ZSBmaWxlIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBmaWxlDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3cml0ZUZpbGUoJHBhdGgsICRkYXRhKQ0KCXsNCgkJJGZoID0gZm9wZW4oJHBhdGgsICJ3Iik7DQoJCWlmICghaXNfcmVzb3VyY2UoJGZoKSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWlmIChmd3JpdGUoJGZoLCAkZGF0YSkpDQoJCXsNCgkJCS8vIGNsb3NlIGZpbGUuDQoJCQlmY2xvc2UoJGZoKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCS8vIGNsb3NlIGZpbGUuDQoJCWZjbG9zZSgkZmgpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIHVzZXIgbm90aWNlIGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXNlcm5vdGljZSA9IGZhbHNlOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZVBhdGgoJHR5cGUsICRuYW1lID0gJ2xpc3RpbmcnLCAka2V5ID0gJycsICRmaWxlVHlwZSA9ICcuanNvbicsICRQQVRIID0gSlBBVEhfQ09NUE9ORU5UX1NJVEUpDQoJew0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7JHR5cGUuJG5hbWV9KSkNCgkJew0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJCS8vIHNldCB0aGUgbmFtZQ0KCQkJJGZpbGVOYW1lID0gbWQ1KCR0eXBlLiRuYW1lLiRsb2NhbGtleS4ka2V5KTsNCgkJCS8vIHNldCBmaWxlIHBhdGgJCQkNCgkJCXNlbGY6OiR7JHR5cGUuJG5hbWV9ID0gJFBBVEguJy9oZWxwZXJzLycuJGZpbGVOYW1lLiRmaWxlVHlwZTsNCgkJfQ0KCQkvLyByZXR1cm4gdGhlIHBhdGgNCgkJcmV0dXJuIHNlbGY6OiR7JHR5cGUuJG5hbWV9Ow0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZpZWxkT3B0aW9ucygkdmFsdWUsICR0eXBlLCAkc2V0dGluZ3MgPSBhcnJheSgpKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSANCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ3Byb3BlcnRpZXMnLCAnc2hvcnRfZGVzY3JpcHRpb24nLCAnZGVzY3JpcHRpb24nKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9maWVsZHR5cGUnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkdHlwZSkgLiAnID0gJy4gJHZhbHVlKTsNCgkJIA0KCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJJHByb3BlcnRpZXMgPSBqc29uX2RlY29kZSgkcmVzdWx0LT5wcm9wZXJ0aWVzLHRydWUpOw0KCQkJJHBvaW50ZXIgPSAwOw0KCQkJJGZpZWxkID0gYXJyYXkoJ3ZhbHVlcycgPT4gIjxmaWVsZCAiLCAndmFsdWVzX2Rlc2NyaXB0aW9uJyA9PiAnPHVsPicsICdzaG9ydF9kZXNjcmlwdGlvbicgPT4gJHJlc3VsdC0+c2hvcnRfZGVzY3JpcHRpb24sICdkZXNjcmlwdGlvbicgPT4gJHJlc3VsdC0+ZGVzY3JpcHRpb24pOw0KCQkJZm9yZWFjaCAoJHByb3BlcnRpZXNbJ25hbWUnXSBhcyAkbGluZSkNCgkJCXsNCgkJCQkkZmllbGRbJ3ZhbHVlc19kZXNjcmlwdGlvbiddIC49ICc8bGk+PGI+Jy4kcHJvcGVydGllc1snbmFtZSddWyRwb2ludGVyXS4nPC9iPiAnLiRwcm9wZXJ0aWVzWydkZXNjcmlwdGlvbiddWyRwb2ludGVyXS4nPC9saT4nOw0KCQkJCWlmKGlzc2V0KCRzZXR0aW5nc1skcHJvcGVydGllc1snbmFtZSddWyRwb2ludGVyXV0pKQ0KCQkJCXsNCgkJCQkJJGZpZWxkWyd2YWx1ZXMnXSAuPSAiXG5cdCIuJHByb3BlcnRpZXNbJ25hbWUnXVskcG9pbnRlcl0uJz0iJy4kc2V0dGluZ3NbJHByb3BlcnRpZXNbJ25hbWUnXVskcG9pbnRlcl1dLiciICc7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRmaWVsZFsndmFsdWVzJ10gLj0gIlxuXHQiLiRwcm9wZXJ0aWVzWyduYW1lJ11bJHBvaW50ZXJdLic9IicuJHByb3BlcnRpZXNbJ2V4YW1wbGUnXVskcG9pbnRlcl0uJyIgJzsNCgkJCQl9DQoJCQkJJHBvaW50ZXIrKzsNCgkJCX0NCgkJCSRmaWVsZFsndmFsdWVzJ10gLj0gIlxuLz4iOw0KCQkJJGZpZWxkWyd2YWx1ZXNfZGVzY3JpcHRpb24nXSAuPSAnPC91bD4nOw0KCQkJLy8gcmV0dXJuIGZvdW5kIGZpZWxkIG9wdGlvbnMNCgkJCXJldHVybiAkZmllbGQ7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWdldCB0aGUgbG9jYWxrZXkNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRsb2NhbGtleSA9IGZhbHNlOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYWxLZXkoKQ0KCXsNCgkJaWYgKCFzZWxmOjokbG9jYWxrZXkpDQoJCXsNCgkJCS8vIGdldCB0aGUgbWFpbiBrZXkNCgkJCXNlbGY6OiRsb2NhbGtleSA9IG1kNShKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnYmFzaWNfa2V5JywgJ2xvY2FsS2V5MzRmZFdFa2wnKSk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2NhbGtleTsNCgl9DQoNCgkvKioNCgkgKglpbmRlbnQgSFRNTA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5kZW50KCRodG1sKQ0KCXsNCgkJLy8gbG9hZCB0aGUgY2xhc3MNCgkJcmVxdWlyZV9vbmNlIEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9pbmRlbnRlci5waHAnOw0KCQkvLyBzZXQgbmV3IGluZGVudGVyDQoJCSRpbmRlbnRlciA9IG5ldyBJbmRlbnRlcigpOw0KCQkvLyByZXR1cm4gaW5kZW50ZWQgaHRtbA0KCQlyZXR1cm4gJGluZGVudGVyLT5pbmRlbnQoJGh0bWwpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tGaWxlVHlwZSgkZmlsZSwgJHN1Zml4KSB7DQoJCS8vIG5vdyBjaGVjayBpZiB0aGUgZmlsZSBlbmRzIHdpdGggdGhlIHN1Zml4DQoJCXJldHVybiAkc3VmaXggPT09ICIiIHx8ICgkc3VmaXggPT0gc3Vic3RyKHN0cnJjaHIoJGZpbGUsICIuIiksIC1zdHJsZW4oJHN1Zml4KSkpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW1hZ2VJbmZvKCRwYXRoLCRyZXF1ZXN0ID0gJ3R5cGUnKQ0KCXsNCgkJLy8gc2V0IGltYWdlDQoJCSRpbWFnZSA9IEpQQVRIX1NJVEUuJy8nLiRwYXRoOw0KCQkvLyBjaGVjayBpZiBleGlzdHMNCgkJaWYgKGZpbGVfZXhpc3RzKCRpbWFnZSkgJiYgJHJlc3VsdCA9IEBnZXRpbWFnZXNpemUoJGltYWdlKSkNCgkJew0KCQkJLy8gcmV0dXJuIHR5cGUgcmVxdWVzdA0KCQkJc3dpdGNoICgkcmVxdWVzdCkNCgkJCXsNCgkJCQljYXNlICd3aWR0aCc6DQoJCQkJCXJldHVybiAkcmVzdWx0WzBdOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdoZWlnaHQnOg0KCQkJCQlyZXR1cm4gJHJlc3VsdFsxXTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAndHlwZSc6DQoJCQkJCSRleHRlbnNpb25zID0gYXJyYXkoDQoJCQkJCQlJTUFHRVRZUEVfR0lGID0+ICJnaWYiLA0KCQkJCQkJSU1BR0VUWVBFX0pQRUcgPT4gImpwZyIsDQoJCQkJCQlJTUFHRVRZUEVfUE5HID0+ICJwbmciLA0KCQkJCQkJSU1BR0VUWVBFX1NXRiA9PiAic3dmIiwNCgkJCQkJCUlNQUdFVFlQRV9QU0QgPT4gInBzZCIsDQoJCQkJCQlJTUFHRVRZUEVfQk1QID0+ICJibXAiLA0KCQkJCQkJSU1BR0VUWVBFX1RJRkZfSUkgPT4gInRpZmYiLA0KCQkJCQkJSU1BR0VUWVBFX1RJRkZfTU0gPT4gInRpZmYiLA0KCQkJCQkJSU1BR0VUWVBFX0pQQyA9PiAianBjIiwNCgkJCQkJCUlNQUdFVFlQRV9KUDIgPT4gImpwMiIsDQoJCQkJCQlJTUFHRVRZUEVfSlBYID0+ICJqcHgiLA0KCQkJCQkJSU1BR0VUWVBFX0pCMiA9PiAiamIyIiwNCgkJCQkJCUlNQUdFVFlQRV9TV0MgPT4gInN3YyIsDQoJCQkJCQlJTUFHRVRZUEVfSUZGID0+ICJpZmYiLA0KCQkJCQkJSU1BR0VUWVBFX1dCTVAgPT4gIndibXAiLA0KCQkJCQkJSU1BR0VUWVBFX1hCTSA9PiAieGJtIiwNCgkJCQkJCUlNQUdFVFlQRV9JQ08gPT4gImljbyINCgkJCQkJKTsNCgkJCQkJcmV0dXJuICRleHRlbnNpb25zWyRyZXN1bHRbMl1dOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdhdHRyJzoNCgkJCQkJcmV0dXJuICRyZXN1bHRbM107DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2FsbCc6DQoJCQkJZGVmYXVsdDoNCgkJCQkJcmV0dXJuICRyZXN1bHQ7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRCZXR3ZWVuKCRjb250ZW50LCRzdGFydCwkZW5kKQ0KCXsNCgkJJHIgPSBleHBsb2RlKCRzdGFydCwgJGNvbnRlbnQpOw0KCQlpZiAoaXNzZXQoJHJbMV0pKQ0KCQl7DQoJCQkkciA9IGV4cGxvZGUoJGVuZCwgJHJbMV0pOw0KCQkJcmV0dXJuICRyWzBdOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBbGxCZXR3ZWVuKCRjb250ZW50LCRzdGFydCwkZW5kKQ0KCXsNCgkJJGJ1a2V0ID0gYXJyYXkoKTsNCgkJZm9yICgkaSA9IDA7IDsgJGkrKykNCgkJew0KCQkJJGZvdW5kID0gU3VwZXJfX19kYjg3YzMzOV81YmI2XzQyOTFfYTdlZl8yYzQ4ZWExYjA2YmNfX19Qb3dlcjo6YmV0d2VlbigkY29udGVudCwkc3RhcnQsJGVuZCk7DQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGZvdW5kKSkNCgkJCXsNCgkJCQkkYnVrZXRbXSA9ICRmb3VuZDsNCgkJCQkkcmVtb3ZlID0gJHN0YXJ0LiRmb3VuZC4kZW5kOw0KCQkJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoJHJlbW92ZSwnJywkY29udGVudCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQkvLyBzYWZldHkgY2F0Y2gNCgkJCWlmICgkaSA9PSA1MDApDQoJCQl7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICBhcnJheV91bmlxdWUoJGJ1a2V0KTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0eXBlRmllbGQoJHR5cGUsJG9wdGlvbiA9ICdkZWZhdWx0JykNCgl7DQoJCS8vIGxpc3Qgb2YgZGVmYXVsdCBmaWVsZHMNCgkJLy8gaHR0cHM6Ly9kb2NzLmpvb21sYS5vcmcvRm9ybV9maWVsZA0KCQkkZmllbGRzID0gYXJyYXkoDQoJCQknZGVmYXVsdCcgPT4gYXJyYXkoDQoJCQkJJ2FjY2Vzc2xldmVsJywnY2FjaGVoYW5kbGVyJywnY2FsZW5kYXInLCdjYXB0Y2hhJywnY2F0ZWdvcnknLCdjaGVja2JveCcsDQoJCQkJJ2NoZWNrYm94ZXMnLCdjb2xvcicsJ2NvbWJvJywnY29tcG9uZW50bGF5b3V0JywnY29udGVudGxhbmd1YWdlJywnZWRpdG9yJywNCgkJCQknY2hyb21lc3R5bGUnLCdjb250ZW50dHlwZScsJ2RhdGFiYXNlY29ubmVjdGlvbicsJ2VkaXRvcnMnLCdlbWFpbCcsJ2ZpbGUnLA0KCQkJCSdmaWxlbGlzdCcsJ2ZvbGRlcmxpc3QnLCdncm91cGVkbGlzdCcsJ2hpZGRlbicsJ2ZpbGUnLCdoZWFkZXJ0YWcnLCdoZWxwc2l0ZScsDQoJCQkJJ2ltYWdlbGlzdCcsJ2ludGVnZXInLCdsYW5ndWFnZScsJ2xpc3QnLCdtZWRpYScsJ21lbnUnLCdub3RlJywncGFzc3dvcmQnLA0KCQkJCSdwbHVnaW5zJywncmFuZ2UnLCdyYWRpbycsJ3JlcGVhdGFibGUnLCdydWxlcycsJ3Nlc3Npb25oYW5kbGVyJywnc3BhY2VyJywnc3FsJywndGFnJywNCgkJCQkndGVsJywnbWVudWl0ZW0nLCdtb2R1bGVsYXlvdXQnLCdtZXRlcicsJ21vZHVsZW9yZGVyJywnbW9kdWxlcG9zaXRpb24nLCdtb2R1bGV0YWcnLA0KCQkJCSd0ZW1wbGF0ZXN0eWxlJywndGV4dCcsJ3RleHRhcmVhJywndGltZXpvbmUnLCd1cmwnLCd1c2VyJywndXNlcmdyb3VwJw0KCQkJKSwgDQoJCQkndGV4dCcgPT4gYXJyYXkoDQoJCQkJJ2NhbGVuZGFyJywnY29sb3InLCdlZGl0b3InLCdlbWFpbCcsJ3Bhc3N3b3JkJywndGVsJywndGV4dCcsJ3RleHRhcmVhJywndXJsJywnbnVtYmVyJywncmFuZ2UnDQoJCQkpLCANCgkJCSdsaXN0JyA9PiBhcnJheSgNCgkJCQknY2hlY2tib3hlcycsJ2NoZWNrYm94JywnbGlzdCcsJ3JhZGlvJw0KCQkJKSwgDQoJCQknZHluYW1pYycgPT4gYXJyYXkoDQoJCQkJJ2NhdGVnb3J5JywnaGVhZGVydGFnJywndGFnJywncnVsZXMnLCd1c2VyJywnZmlsZScsJ2ZpbGVsaXN0JywnZm9sZGVybGlzdCcsJ2ltYWdlbGlzdCcsJ2ludGVnZXInLCd0aW1lem9uZScsJ21lZGlhJywnbWV0ZXInDQoJCQkpDQoJCSk7DQoJCQ0KCQlpZiAoaW5fYXJyYXkoJHR5cGUsJGZpZWxkc1skb3B0aW9uXSkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsJCQ0KCX0NCltDVVNUT01DT0RFPWdldEltcG9ydFNjcmlwdHNdDQoJLyoqDQoJKiAJc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBub3RpbmcgZm9yIG5vdw0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQpbQ1VTVE9NQ09ERT10aGVCdXRsZXJdIA==', '', '', '', '', '', '', '', '', 'IyBKb29tbGEgIyMjQ29tcG9uZW50X25hbWUjIyMgKEpDQikNClshW0dpdEh1YiByZWxlYXNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvcmVsZWFzZXMpIFshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvZG93bmxvYWRzL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvdG90YWwuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvcmVsZWFzZXMpDQoNClRoaXMgaXMgYSBbSm9vbWxhIDMueF0oaHR0cDovL3d3dy5qb29tbGEub3JnLykgY29tcG9uZW50Lg0KDQogIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvY29tcG9uZW50LTMwMC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCllvdSBjYW4gaW5zdGFsbCBpdCBxdWl0ZSBlYXNpbHkgYW5kIHdpdGggbm8gbGltaXRhdGlvbnMuIE9uIFtnaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3JlbGVhc2VzKSBpcyB0aGUgbGF0ZXN0IHJlbGVhc2UgKCMjI1ZFUlNJT04jIyMpIHdpdGggKipBTEwqKiBpdHMgZmVhdHVyZXMgYW5kICoqQUxMKiogY29uY2VwdHMgdG90YWxseSBvcGVuLXNvdXJjZSBhbmQgZnJlZSENCg0KT25jZSBpbnN0YWxsZWQgdXBncmFkZXMgYXJlIHF1aWNrIGFuZCBlYXN5IHZpYSB0aGUgZGVmYXVsdCBKb29tbGEgdXBncmFkZSBhcmVhLg0KDQojIFNvbWUgb2YgdGhlIEZlYXR1cmVzDQoNCisgQWRkaW5nIG15U1FMIER1bXAgdG8gYW55IFZpZXcvVGFibGUuDQorIEdyYWIgZXhpc3RpbmcgVGFibGUgZGF0YSBhbmQgYnVpbGQgYSBkeW5hbWljIGR1bXAuDQorIFVubGltaXRlZCBKb29tbGEgQ29tcG9uZW50cy4NCisgVW5saW1pdGVkIFRhYmxlcy9WaWV3cy4NCisgUmV1c2luZyBWaWV3cyBhbmQgRmllbGRzLg0KKyBSdW5zIG9uIFlvdXIgT3duIEpvb21sYSBJbnN0YWxsLg0KKyBBZGQgRHluYW1pYy9jdXN0b20gYmFjay1lbmQgdmlld3MgdGhhdCB1c2VzIFRhYmxlIGFuZCBDaGFydCByZXN1bHQgc2V0cy4NCisgQnVpbGQgZGF0YSBxdWVyeSBvZiBleHRyZW1lIGNvbXBsZXggbmF0dXJlIHRvIHVzZSBpbiBEeW5hbWljL2N1c3RvbSB2aWV3cy4NCisgSGlnaGx5IER5bmFtaWMvY3VzdG9tIEZyb250LWVuZCBTdHJ1Y3R1cmVzLg0KKyBEeW5hbWljYWxseSBzZXR1cCB0ZW1wbGF0ZXMgYW5kIGxheW91dHMgZm9yIEZyb250LWVuZCBkZXNpZ24uDQorIEludGVncmF0aW9uIG9mIHRoZSBleGNlbGxlbnQgVUlLSVQgbGliLg0KKyBJbnRlZ3JhdGlvbiBvZiB0aGUgZXhjZWxsZW50IEZPT1RBQkxFIGxpYi4NCisgQWxsIEpvb21sYSBTdGFuZGFyZCBGaWVsZCBUeXBlcyAoaW5jbHVkaW5nIHJlcGVhdGFibGUgZmllbGRzKS4NCisgU3Ryb25nIEltcGxlbWVudGF0aW9uIG9mIGFsbCBKb29tbGEgRm9ybSBTZWN1cml0eS4NCisgTG9hZCBkYXRhIHZpYSBhamF4IHdpdGggZWFzZS4NCisgWW91IGNhbiBhZGQgYW4gVXBkYXRlIFNlcnZlciB0byBDb21wb25lbnRzIHlvdSBidWlsZC4NCisgQnVpbGQgYWR2YW5jZWQgRHluYW1pYyBmcm9udC1lbmQgZm9ybXMuDQorIER5bmFtaWMgZGF0YSBxdWVyaWVzIGZyb20gbXVsdGlwbGUgdGFibGVzLg0KKyBQbGFjZSBpbiBsb2NhbCBHSVQgZm9sZGVyLCBhbmQgcHVibGlzaCB0byBzYWxlcyBzZXJ2ZXIuDQorIEluY2x1ZGUgYW55IGFtb3VudCBvZiBjdXN0b20gZmlsZXMgYW5kIGZvbGRlcnMgZHVyaW5nIGJ1aWxkLg0KKyBTdGF0aWMgaGVscGVyIGNsYXNzIHdpdGggc21hcnQgbWV0aG9kcyBhbHJlYWR5IGluY2x1ZGVkLg0KKyBTdGF0aWMgaGVscGVyIG1ldGhvZHMgQ2FuIGVhc2lseSBiZSBhZGRlZC4NCisgRGlyZWN0IGluc3RhbGwgZnJvbSBjb21wbGllciB2aWV3Lg0KKyBJbnRlZ3JhdGl2ZSB3aXRoIG5hdGl2ZSBKb29tbGEgQ2F0ZWdvcmllcyBhbmQgVGFncy4NCisgRnVsbHkgRHluYW1pYyBTZWFyY2ggRnJpZW5kbHkgVVJMIEF1dG8gSW1wbGVtZW50YXRpb24uDQorIEN1c3RvbSBzY3JpcHRpbmcgb3B0aW9ucyBhbGwgb3ZlciB0aGUgTVZDIHN0cnVjdHVyZS4NCisgUGVybWlzc2lvbiBpbXBsZW1lbnRhdGlvbiBkb3duIHRvIGVhY2ggdmlldywgaXRlbSBhbmQgZmllbGQuDQorIEVhc3kgZXh0ZW5kaWJsZSB0byBpbmNsdWRlIG90aGVyIGxpYnJhcmllcy4NCisgQ2FuIGluY2x1ZGUgU1FMIGFuZCB2aXNpb25pbmcgdXBkYXRlIGxpbmsgdG8gZGlzdHJpYnV0ZSB5b3VyIGNvbXBvbmVudCB1cGRhdGVzIHZpYSBKb29tbGEgZGVmYXVsdCB1cGdyYWRlIG9mIGNvbXBvbmVudHMuDQorIEVhc3kgRXhwb3J0ICYgSW1wb3J0IGFkZG9uIHRvIGFsbCBiYWNrZW5kLXRhYmxlcy4NCisgT3ZlcnJpZGluZyBhYmlsaXR5IG9mIGltcG9ydCBjb25jZXB0cyBpbiBhbGwgYmFja2VuZC10YWJsZXMuDQorIFRoZSBCYXRjaCBhbmQgRmlsdGVyIGltcGxlbWVudGF0aW9uIG9uIGFsbCBiYWNrZW5kLWxpc3Qgdmlld3MuDQorIFRoaXMgYW5kIG11Y2ggbXVjaCBtb3JlIGFyZSBhbGwgcG9zc2libGUgd2l0aCB0aGlzIGNvbXBvbmVudCBidWlsZGVyIQ0KDQojIEp1c3QgSW1hZ2luZQ0KDQorIFlvdXIgQ29tcG9uZW50IEJhY2stZW5kIGNhbiBiZSBtb3JlIGFkdmFuY2VkIHRoZW4gdGhlIEpvb21sYSBBcnRpY2xlIE1hbmFnZXIuDQorIFlvdXIgQ29kZSBhcyBQZXJmZWN0bHkgVW5pZmllZCB0byB0aGUgc3RyaWN0IEpvb21sYSBTdGFuZGFyZHMuDQorIEFkZGluZyBDdXN0b20gU2NyaXB0aW5nIGFsbW9zdCBhbnl3aGVyZSBpbiB0aGUgTVZDIHN0cnVjdHVyZS4NCisgSW1wb3J0IGFuZCBleHBvcnQgZmVhdHVyZSB0byBhbGwgYmFja2VuZC12aWV3cy4NCisgQmF0Y2ggY29weSBhbmQgbW92ZS91cGRhdGUgZmVhdHVyZSBmb3IgYWxsIGJhY2tlbmQtdmlld3MuDQorIEhpc3RvcnkgdHJhY2tpbmcgcGVyL2NoYW5nZSBtYWRlIG9uIGFueSBiYWNrLWVuZCBpdGVtLg0KKyBEeW5hbWljIGZpZWxkIGNvbnRyb2wsIHRvIHNob3cgYW5kIGhpZGUgZmllbGRzIGluIGFtYXppbmcgd2F5cy4NCisgRnJvbnQtZW5kIGZyZWVkb20gb2YgZGVzaWduIHRoYXQgYWxsb3dzIGZvciBhbnkgbGlicmFyeSB0byBiZSB1c2VkLg0KKyBUaGlzIGFuZCBtdWNoIG11Y2ggbW9yZSBhcmUgYWxsIHBvc3NpYmxlIHdpdGggdGhpcyBjb21wb25lbnQgYnVpbGRlciENCg0KIyBZb3UgYXJlIGluIENvbnRyb2wNCg0KKyBZb3UgY2FuIGNoYW5nZSB0aGUgbGljZW5zaW5nIHRlbXBsYXRlIGZvciB5b3VyIGNvbXBvbmVudHMuDQorIFlvdSBjYW4gY2hhbmdlL2ltcHJvdmUgZXhpc3RpbmcgZmllbGQgdHlwZXMgYW5kIGFkZCBtb3JlLg0KKyBMaW5lIG51bWJlcnMgdG8gc2hvdyB3aGVyZSBpbiBjb21waWxlciB3YXMgdGhlIGNvZGUgYnVpbGQuDQorIFlvdSBjYW4gaW1wcm92ZSB0aGUgY29tcG9uZW50IHNpbmNlIGFsbCBjb2RlIGFyZSBvcGVuLXNvdXJjZS4NCisgRnJlZSB1cGRhdGVzIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2plY3QuDQorIFlvdSBjYW4gZHluYW1pY2FsbHkgYWRkIGludGVybmFsIGhlbHAgc3RydWN0dXJlcyB0byBhbGwgY29tcG9uZW50Lg0KKyBUaGVyZSBpcyBubyBsaW1pdGF0aW9ucyBvbiBob3cgYmlnIG9yIGhvdyBtdWNoIHlvdSB3YW50IHRvIGJ1aWxkIChzZXJ2ZXIgbGltaXRhdGlvbiBvbmx5KS4NCisgVGhpcyBpcyBhIGNvbXBsZXRlIGZhY3Rvcnkga2luZCBvZiBjb21wb25lbnQgdGhhdCBmdW5jdGlvbnMgbGlrZSBhIGRlcGxveW1lbnQgaHViLg0KKyBFeHBvcnQgYW55IGNvbXBvbmVudCBjb21wbGV0ZWx5IG1hcHBlZCBpbiBKQ0IgYW5kIGltcG9ydCBpbnRvIGFub3RoZXIgSkNCLg0KKyBUaGlzIGFuZCBtdWNoIG11Y2ggbW9yZSBhcmUgYWxsIHBvc3NpYmxlIHdpdGggdGhpcyBjb21wb25lbnQgYnVpbGRlciENCg0KIyBBY2Nlc3MgdGhlIFZpZGVvIFR1dG9yaWFscw0KDQpTZWUgdGhlIGJyZWFrZG93biBvZiB0aGUgW3R1dG9yaWFscyBvbiBnaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3dpa2kpIGJlIHN1cmUgdG8gbG9naW4gdG8geW91ciB5b3V0dWJlIGFjY291bnQgdG8gdmlldyB0aGVzZSB0dXRvcmlhbHMuDQoNCiMgZ2l0SHViIFN1cHBvcnQNCg0KV291bGQgeW91IHJlcXVpcmUgbW9yZSBoZWxwIHBsZWFzZSBvcGVuIGFuZCBpc3N1ZSBoZXJlIG9uIFtnaXRIdWIgdG9kYXldKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL2lzc3VlcykhDQoNCiMgV0hZIEdJVkUgSVQgQVdBWSBMSUtFIFRISVM/DQoNCj4gSSBhbSBhbiBPcGVuIFNvdXJjZSBFbnRodXNpYXN0DQo+IFdobyBTdXBwb3J0IHRoZSBKb29tbGEgQ29tbXVuaXR5DQoNCk15IGlkZWEgd2FzIHRvIGFsbW9zdCBsZXQgdGhpcyB0b29sIHNlcnZlIGFzIGEgY2hlYXQgc2hlZXQgdG8gaG93IHRoaW5ncyBjYW4gYmUgZG9uZS4uLiBhbmQgd2l0aCB0aGUgaGVscCBvZiBvdGhlciBkZXZlbG9wZXJzIChtb3JlIGFkdmFuY2VkIHRoZW4gbWUpIGVuZCB1cCBmb3JtdWxhdGluZyB0aGUgd2F5IGhvdyB0aGluZ3Mgbm90IG9ubHkgY2FuLCBidXQgbXVzdCBiZSBkb25lIHRvIGluc3VyZSBzZWN1cmUsIHN0YWJsZSwgc2NhbGFibGUgYW5kIG1haW50YWluYWJsZSBjb2RlIGlzIHByb2R1Y2VkLiANCg0KIyBNQUtJTkcgSVQgQkVUVEVSIQ0KDQpDb21wb25lbnQgQnVpbGRlciBpcyBtYXBwZWQgYXMgYSBjb21wb25lbnQgaW4gaXRzZWxmIG9uIG15IGxvY2FsIGRldmVsb3BtZW50IGVudmlyb25tZW50LiBTbyBJIGFtIGltcHJvdmluZyBpdCBsaWtlIHlvdSB3b3VsZCBhbnkgb3RoZXIgY29tcG9uZW50IGluIGl0LiBJIGFtIGxvb2tpbmcgZm9yIGRldmVsb3BlcnMgd2l0aCB0aGUgKipza2lsbCoqIGFuZCB0aGUgKipkZXNpcmUqKiB0byByZWFsbHkgam9pbiBtZS4uLiBhbmQgdGhlbiBJIHdpbGwgcG9zc2libGUgZ2l2ZSB0aGVtIGFjY2VzcyB0byB0aGlzLCBzbyB3ZSBjYW4gYWxsIGhlbHAgaW1wcm92ZSB0aGlzIHNpbXBsZSwgeWV0IGFkdmFuY2VkIHRvb2wuDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQojIyBEb25hdGlvbnMNCg0KQ29tZSBvbiBidXkgbWUgYSBjb2ZmZWUgOikNCiAqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', '', '', 'Builds Complex Joomla Components', '', '', 'Component Builder (Packager)', '.git', '', '', 3, 'https://io.vdm.dev/update/componentbuilder_public_update_server.xml', 'https://dev.vdm.io', '', '15B/DnhhAf9l5DqzHLDbRPk/6CerG+Yc70BjTuJcbFk=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 2, 163, '', 1, 59),
(18, '', '', '', '', '', '', '', '', '', '', 1, '', 1, '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.1.0', 'Copyright (C) 2015. All Rights Reserved', '2016-02-24 13:21:00', '', 'PprMpPvlxnRi9ShaF7Sow9ENowuNfZw1tbyLnCocGBU=', '2FYCb5rnMNxRgDaDgcSPlfmf6VR7f2CtVGAxW3dSb5c=', '', 'UXU18uqabZOU8kYAoNwRTFBevvohQ7cK2F4c+M3puXk=', '', '', '', 1, '', 'Support Groups component adds the ability to your Joomla website to manage various support groups and their related details. Integration with Google Maps is one of its main features.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-support-groups', 'zDF8cOazWQPMVpPc5EBb781TrBjsgNplnrZ/ko36KH7kb39urdAkJZcD11DAZAenJJ0CZOrI5/I+FZeTWwSuZQ==', '', '36d66191-9524-4800-966c-be16df1cd5a2', 'images/vdm/SGD500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Support-Groups', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2021-04-14 15:47:40', 1, 'Support Groups', 'supportgroups', '', 4, '', 'CS8qKg0KCSogCVRoZSBnbG9iYWwgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zID0gZmFsc2U7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEN1cnJlbmN5KCRhbW91bnQsJHN1cHBvcnRfZ3JvdXApDQoJew0KCQkvLyBnZXQgdGhlIGN1cnJlbmN5IGlkDQoJCSRjdXJyZW5jeSA9IHNlbGY6OmdldEN1cnJlbmN5KCRzdXBwb3J0X2dyb3VwKTsNCgkJLy8gbWFrZSBtb25leQ0KCQlyZXR1cm4gc2VsZjo6bWFrZU1vbmV5KCRhbW91bnQsJGN1cnJlbmN5KTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjdXJyZW5jeSA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEN1cnJlbmN5KCRzdXBwb3J0X2dyb3VwKQ0KCXsNCgkJaWYgKCFpc3NldChzZWxmOjokY3VycmVuY3lbJHN1cHBvcnRfZ3JvdXBdKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBsb2NhdGlvbg0KCQkJJGFyZWEgPSBzZWxmOjpnZXRWYXIoJ3N1cHBvcnRfZ3JvdXAnLCAkc3VwcG9ydF9ncm91cCwgJ2lkJywgJ2FyZWEnKTsNCgkJCS8vIGdldCB0aGUgUmVnaW9uDQoJCQkkcmVnaW9uID0gc2VsZjo6Z2V0VmFyKCdhcmVhJywgJGFyZWEsICdpZCcsICdyZWdpb24nKTsNCgkJCS8vIGdldCB0aGUgQ291bnRyeQ0KCQkJJGNvdW50cnkgPSBzZWxmOjpnZXRWYXIoJ3JlZ2lvbicsICRyZWdpb24sICdpZCcsICdjb3VudHJ5Jyk7DQoJCQkvLyBnZXQgdGhlIEN1cnJlbmN5IENvZGV0aHJlZQ0KCQkJJGNvZGV0aHJlZSA9IHNlbGY6OmdldFZhcignY291bnRyeScsICRjb3VudHJ5LCAnaWQnLCAnY3VycmVuY3knKTsNCgkJCS8vIGdldCBjdXJyZW5jeSBpZA0KCQkJc2VsZjo6JGN1cnJlbmN5WyRzdXBwb3J0X2dyb3VwXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCAkY29kZXRocmVlLCAnY29kZXRocmVlJywgJ2lkJyk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRjdXJyZW5jeVskc3VwcG9ydF9ncm91cF07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkY3VycmVuY3lEZXRhaWxzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lEZXRhaWxzKCRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCS8vIHJldHVybiBjYWNoZWQgZGF0YSBpZiBzZXQNCgkJaWYgKCRjb2RldGhyZWUgJiYgIWlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KAknYS5pZCcsJ2EubmFtZScsJ2EuY29kZXRocmVlJywnYS5udW1lcmljY29kZScsJ2Euc3ltYm9sJywnYS50aG91c2FuZHMnLCdhLmRlY2ltYWxwbGFjZScsDQoJCQkJCSdhLmRlY2ltYWxzeW1ib2wnLCdhLnBvc2l0aXZlc3R5bGUnLCdhLm5lZ2F0aXZlc3R5bGUnKSwNCgkJCQlhcnJheSgJJ2N1cnJlbmN5X2lkJywnY3VycmVuY3lfbmFtZScsJ2N1cnJlbmN5X2NvZGV0aHJlZScsJ2N1cnJlbmN5X251bWVyaWNjb2RlJywnY3VycmVuY3lfc3ltYm9sJywNCgkJCQkJJ2N1cnJlbmN5X3Rob3VzYW5kcycsJ2N1cnJlbmN5X2RlY2ltYWxwbGFjZScsJ2N1cnJlbmN5X2RlY2ltYWxzeW1ib2wnLCdjdXJyZW5jeV9wb3NpdGl2ZXN0eWxlJywNCgkJCQkJJ2N1cnJlbmN5X25lZ2F0aXZlc3R5bGUnKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY3VycmVuY3knLCAnYScpKTsNCgkJCWlmIChpc19udW1lcmljKCRjb2RldGhyZWUpKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkY29kZXRocmVlKTsNCgkJCX0NCgkJCWVsc2VpZiAoc3RybGVuKCRjb2RldGhyZWUpID09IDMpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb2RldGhyZWUnKSAuICcgPSAnLiRkYi0+cXVvdGUoJGNvZGV0aHJlZSkpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCdOT05FJykpOw0KCQkJfQ0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQl9DQoJCS8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBzZXQNCgkJaWYgKGlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9bWFrZU1vbmV5XQ0KW0NVU1RPTUNPREU9Z2V0RmlsZVBhdGhd', '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0VG90YWxzKCYkZGF0YSwmJHR5cGUsJiRpZCkNCgl7DQoJCWxpc3QoJHBhdGgsICRmaWxlTmFtZSwgJGZ1bGxQYXRoKSA9IHNlbGY6OmdldFRvdGFsc0ZpbGVQYXRoKCR0eXBlLCRpZCk7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCXJldHVybiBzZWxmOjpzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VG90YWxzKCYkdHlwZSwmJGlkKQ0KCXsNCgkJbGlzdCgkcGF0aCwgJGZpbGVOYW1lLCAkZnVsbFBhdGgpID0gc2VsZjo6Z2V0VG90YWxzRmlsZVBhdGgoJHR5cGUsJGlkKTsNCgkJLy8gY2hlY2sgaWYgZmlsZSBleGlzdHMNCgkJaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkgJiYgKCgkanNvbkZpbGUgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRDb250ZW50KCRmdWxsUGF0aCwgRkFMU0UpKSAhPT0gRkFMU0UpKQ0KCQl7DQoJCQkvLyBncmVhdCB3ZSBhcmUgZG9uZSByZXR1cm4gcmVzdWx0cyBhcyBhcnJheQ0KCQkJcmV0dXJuIGpzb25fZGVjb2RlKCRqc29uRmlsZSx0cnVlKTsNCgkJfQ0KCQkvLyByZW1vdmUgdGhlIG9sZCBmaWxlcw0KCQlzZWxmOjpyZW1vdmVGaWxlKCRwYXRoLCAkZmlsZU5hbWUpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VG90YWxzRmlsZVBhdGgoJiR0eXBlLCYkaWQpDQoJew0KCQkkcGF0aFswXSA9IEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy90b3RhbHMnOw0KCQkkcGF0aFsxXSA9IHNlbGY6OmdldEZpbGVLRVkoJHR5cGUsJGlkKTsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJHBhdGhbMl0gPSAkcGF0aFswXS4nLycuJHBhdGhbMV0uJy5qc29uJzsNCg0KCQlyZXR1cm4gJHBhdGg7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUtFWSgmJHR5cGUsJiRpZCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkvLyBHZXQgZnJvbSAjX19zdXBwb3J0Z3JvdXBzX3N1cHBvcnRfZ3JvdXAgYXMgYQ0KCQkkcXVlcnktPnNlbGVjdCgnTUFYKGEubW9kaWZpZWQpJyk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fc3VwcG9ydGdyb3Vwc19zdXBwb3J0X2dyb3VwJywgJ2EnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAnVkRNXycuJHR5cGUuJ19fJy5tZDUoJGRiLT5sb2FkUmVzdWx0KCkpLidfXycuJGlkOw0KCQl9DQoJCXJldHVybiAnVkRNXycuJHR5cGUuJ19fMjg5ZDdiMDUyNzg2OGQ3ZjlhNWY4YzdiMWM4MGQ3YTZfXycuJGlkOw0KCX0NCg0KCS8qKg0KCSogU2FmZXMganNvbiB0byBhIGZpbGUNCgkqDQoJKiBAaW5wdXQJICBvYmplY3QvYXJyYXkvanNvbiAgJGRhdGEgICAgICBEYXRhIHRvIGJlIHN0b3JlZA0KCSogQGlucHV0CSAgc3RyaW5nICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoIEZ1bGwgcGF0aCB0byBmaWxlDQoJKiBAaW5wdXQJICBzdHJpbmcgICAgICAgICAgICAgICAgICAkcGF0aCAgICAgIEZ1bGwgcGF0aCB0byBmb2xkZXINCgkqDQoJKiBAcmV0dXJucyAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIGpzb24gZW5jb2RlIGlmIG5vdCBqc29uDQoJCQkkZGF0YSA9IGpzb25fZW5jb2RlKCRkYXRhKTsNCgkJfQ0KCQkvLyBtYWtlIHN1cmUgdGhpcyBpcyBhIHN0cmluZw0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkkZnAgPSBmb3BlbigkZnVsbFBhdGgsICd3Jyk7DQoJCQlmd3JpdGUoJGZwLCAkZGF0YSk7DQoJCQlmY2xvc2UoJGZwKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICogUmVtb3ZlIGZpbGUNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZGlyICBUaGUgcGF0aCB0byBmb2xkZXIgdG8gcmVtb3ZlDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG5ld0ZpbGVOYW1lIHRoZSBuZXcgZmlsZSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICAgVHJ1ZSBpbiBhbGwgaXMgcmVtb3ZlZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRmlsZSgkZGlyLCAkbmV3RmlsZU5hbWUpDQoJew0KCQlpZiAoaXNfZGlyKCRkaXIpKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgb2xkIGZvbGRlciBuYW1lDQoJCQkkb2xkRmlsZU5hbWUgPSBleHBsb2RlKCdfXycsJG5ld0ZpbGVOYW1lKTsNCgkJCS8vIGxpdHRsZSBmaXggdG8gcmVtb3ZlIHRoaXMgaXRlbSBvbGQgZmlsZSBpZiBmb3VuZA0KCQkJJGZvdW5kID0gZ2xvYigkZGlyLicvJy4kb2xkRmlsZU5hbWVbMF0uJyonLiRvbGRGaWxlTmFtZVsyXS4nLmpzb24nKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZm91bmQpICYmICgkZG9uZSA9IEBhcnJheV9tYXAoICJ1bmxpbmsiLCRmb3VuZCkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXShodHRwczovL2dpdGh1Yi5jb20vTGxld2VsbHludmRtL0pvb21sYS1TdXBwb3J0LUdyb3Vwcy9yYXcvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvdmRtLWNvbXBvbmVudC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIENvbXBvbmVudCBOdW1iZXINCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQojIEpvb21sYSBDb21wb25lbnQgQnVpbGRlcg0KDQpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBKQ0IgdmlzaXQgW1ZETV0oaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlcikgVG9kYXkhIFRoZSBmdXR1cmUgaXMgaGVyZSENCg0KW0NVU1RPTUNPREU9cmVhZE1FY29udHJpYnV0b3JzXQ==', '', '', 'Support Groups', '', '', 'Support Groups (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Support-Groups/master/supportgroups_update_server.xml', 'http://www.vdm.io', '', 'MnqAN/BKB4RuSo9ssgLixjWmebnM+y38CXbQNAFuIII=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 144, '', 1, 63),
(19, 1, '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, '', '', 3, '', 1, 3, 'Ty Coon', '', 'default.txt', '', '', 'Yoyodyne, Inc.', '1.0.14', 'Copyright (C) 2015. All Rights Reserved', '2016-03-07 02:41:12', '', 'ZeWxi5fFOiZerEt+g/op1T9TR9PdxqXLighoYlKcWSU=', 'L6B/srznyHaxTDT3/Oq6C8IILZBj7KdleiRPmBoUhHg=', '', 'a+oNwrKFUAUh3fq4wi9j+cnSHkcbMARJoW8Gm5AZKiw=', '', '', 'A_174', 2, '', 'gitHubbing', 'hacker@gnu.org', '', '', '69IXWWHwipHPBqDFjepXHwmLfs470iYEsn3PHouCrmk=', '', '67499184-219e-40f3-bf38-8b1c7d619126', 'images/toilet-paper-icon.png', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2020-07-23 13:36:28', '', 'gitHubbing', 'githubbing', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCglwcm90ZWN0ZWQgc3RhdGljICRkb1Rlc3QgPSBmYWxzZTsNCglwdWJsaWMgc3RhdGljICRub3RFbWFpbCA9IGFycmF5KCAndXNlcnMubm9yZXBseS5naXRodWIuY29tJywgJ25vcmVwbHknLCAnbm9fcmVwbHknKTsNCg0KCS8vIEFycmF5IG9mIHJlbGF0aW9uc2hpcCBuYW1lcw0KCXB1YmxpYyBzdGF0aWMgJHJlbGF0aW9uc2hpcE5hbWUgPSBhcnJheSgNCgkJCTEgPT4gJ0FkbWluJywNCgkJCTIgPT4gJ1B1c2gnLA0KCQkJMyA9PiAnUHVsbCcsDQoJCQk0ID0+ICdGb3JrZWQnLA0KCQkJNSA9PiAnU3RhcmdhemVyJywNCgkJCTYgPT4gJ1dhdGNoZXInDQoJCSk7DQoNCgkvKioNCgkqIAlzZXQgdGhlIHNlc3Npb24gZGVmYXVsdHMgaWYgbm90IHNldA0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0U2Vzc2lvbkRlZmF1bHRzKCkNCgl7DQoJCS8vIG5vdGluZyBmb3Igbm93DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCVNlbmQgdGhlIGNvbmZpcm1hdGlvbiBlbWFpbHMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRlbXBsYXRlKCR0eXBlLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCSRib2R5ID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCR0eXBlLCAkZGVmYXVsdCk7DQoJCS8vIHJldHVybiB0aGUgdGVtcGxhdGUgaWYgZm91bmQNCgkJaWYgKCRib2R5KQ0KCQl7DQoJCQlyZXR1cm4gJGJvZHk7DQoJCX0NCgkJcmV0dXJuIFRleHQ6OnNwcmludGYoJ05vIHRlbXBsYXRlIGZvciA8Yj4lczwvYj4gd2VyZSBmb3VuZCcsIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHR5cGUsICd3JykpOw0KCX0NCg0KCS8qKg0KCSogCWdldCBwbGFjZSBob2xkZXJzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQbGFjZUhvbGRlcnMoJHR5cGUpDQoJew0KCQlpZiAoJ2RvY3VtZW50JyA9PSAkdHlwZSkNCgkJew0KCQkJcmV0dXJuIGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQl9DQoJCWVsc2VpZiAoJ2VtYWlsJyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfaGVhZGVyXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW3RleHRfaGVhZGVyXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfdmFsdWVzKHNlbGY6OmdldFNlbGVjdGlvbignZGV2ZWxvcGVyJywgJGYuJ2RldmVsb3Blcl8nLCAkYikpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV92YWx1ZXMoc2VsZjo6Z2V0U2VsZWN0aW9uKCdwcm9qZWN0JywgJGYuJ3Byb2plY3RfJywgJGIpKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXkoJ1t1bnN1YnNjcmliZV9saW5rXScsICdbdW5zdWJzY3JpYmVfdXJsXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2RvY3VtZW50X2Zvb3Rlcl0nKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXkoJ1t0ZXh0X2Zvb3Rlcl0nKTsNCgkJCXJldHVybiAgc2VsZjo6bWVyZ2VBcnJheXMoJHBsYWNlaG9sZGVyKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBSZXR1cm4gYXJyYXkgb2Ygc2VsZWN0aW9ucw0KCSogDQoJKiBAcmV0dXJuICAgIGFycmF5IGlmIHR5cGUgbWF0Y2gNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0eXBlLCAkZiA9ICcnLCAkYiA9ICcnKQ0KCXsNCgkJaWYgKCdkZXZlbG9wZXInID09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLm5hbWUnID0+ICRmLiduYW1lJy4kYiwJDQoJCQkJJ2EuZW1haWwnID0+ICRmLidlbWFpbCcuJGIsDQoJCQkJJ2EuaGlyZWFibGUnID0+ICRmLidoaXJlYWJsZScuJGIsDQoJCQkJJ2EubG9jYXRpb24nID0+ICRmLidsb2NhdGlvbicuJGIsDQoJCQkJJ2EuYmlvJyA9PiAkZi4nYmlvJy4kYiwNCgkJCQknYS5ibG9nJyA9PiAkZi4nYmxvZycuJGIsDQoJCQkJJ2EubG9naW4nID0+ICRmLid1c2VybmFtZScuJGIsDQoJCQkJJ2EuZ2l0aHViX2lkJyA9PiAkZi4nZ2l0aHViX2lkJy4kYg0KCQkJKTsNCgkJfQ0KCQlpZiAoJ3Byb2plY3QnID09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsDQoJCQkJJ2EubmFtZScgPT4gJGYuJ25hbWUnLiRiLA0KCQkJCSdhLmRlc2NyaXB0aW9uJyA9PiAkZi4nZGVzY3JpcHRpb24nLiRiLA0KCQkJCSdhLnNob3J0X2Rlc2NyaXB0aW9uJyA9PiAkZi4nc2hvcnRfZGVzY3JpcHRpb24nLiRiLA0KCQkJCSdhLnByb2plY3QnID0+ICRmLidwcm9qZWN0Jy4kYiwNCgkJCQknYS50b2tlbnMnID0+ICRmLid0b2tlbnMnLiRiDQoJCQkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIAlzZW5kIG1lc3NhZ2VzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZW5kTWVzc2FnZXMoJHBrcywgJGRiID0gbnVsbCwgJHRlc3QgPSBmYWxzZSkNCgl7DQoJCS8vIHRlc3Qgc3dpdGNoDQoJCXNlbGY6OiRkb1Rlc3QgPSAkdGVzdDsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJLy8gc2VuZCBvbmUgbWVzc2FnZSBhdCBhIHRpbWUNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwa3MpKQ0KCQl7DQoJCQkkc2VuZCA9IHRydWU7DQoJCQkkZiA9ICdbZGV2ZWxvcGVyXyc7DQoJCQkkYiA9ICddJzsNCgkJCSRzZWxlY3Rpb24gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ2RldmVsb3BlcicsICRmLCAkYik7DQoJCQlmb3JlYWNoICgkcGtzIGFzICRwaykNCgkJCXsNCgkJCQkkcHJvamVjdCA9IG51bGw7DQoJCQkJJHJlbFsncmVsYXRpb25zaGlwJ10gPSBUZXh0OjpfKCdhbnknKTsNCgkJCQkkcmVsWydub3RfcmVsYXRpb25zaGlwJ10gPSBUZXh0OjpfKCdubycpOw0KCQkJCSRyZWxbJ2hpcmVhYmxlJ10gPSAnJzsNCgkJCQlpZiAoISRpdGVtcyA9IHNlbGY6OmdldFN1YnNjcmliZXJzKCRwaywgJHJlbCwgJHByb2plY3QsICRkYiwgJHNlbGVjdGlvbikpDQoJCQkJew0KCQkJCQkvLyBkb24ndCBzaG93IHN1Y2Nlc3MgbWVzc2FnZQ0KCQkJCQkkc2VuZCA9IGZhbHNlOw0KCQkJCX0NCgkJCQllbHNlaWYgKCFzZWxmOjpzZW5kTWVzc2FnZXNOb3coJGl0ZW1zLCAkcGssICRwcm9qZWN0LCAkZGIpKQ0KCQkJCXsNCgkJCQkJLy8gdGFpbG9yIGFyb3VuZCBhIHByb2plY3QNCgkJCQkJaWYgKCRwcm9qZWN0KQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgYSBtZXNzYWdlIHRoYXQgdGhpcyBtYWlsIGxpc3QgaGFzIG5vIHN1YnNjcmlwdGlvbg0KCQkJCQkJc2VsZjo6JG1lc3NhZ2VzWydFcnJvciddW10gPSBUZXh0OjpzcHJpbnRmKCdUaGVyZSB3YXMgYW4gZXJyb3Igc2VuZGluZyA8Yj4lczwvYj4gdG8gdGhlIHN1YnNjcmliZXJzIG9mIDxiPiVzLyVzPC9iPiBiYXNlZCBvbiA8Yj4lczwvYj4gcmVsYXRpb25zaGlwIGV4Y2x1ZGluZyA8Yj4lczwvYj4gcmVsYXRpb25zaGlwJXMuJywgc2VsZjo6Z2V0VmFyKCdtZXNzYWdlJywgJHBrLCAnaWQnLCAnc3ViamVjdCcpLCBzZWxmOjpnZXRWYXIoJ3Byb2plY3QnLCAkcHJvamVjdCwgJ2lkJywgJ25hbWUnKSwgc2VsZjo6Z2V0VmFyKCdwcm9qZWN0JywgJHByb2plY3QsICdpZCcsICdwcm9qZWN0JyksICRyZWxbJ3JlbGF0aW9uc2hpcCddLCAkcmVsWydub3RfcmVsYXRpb25zaGlwJ10sICRyZWxbJ2hpcmVhYmxlJ10pOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGEgbWVzc2FnZSB0aGF0IHRoaXMgbWFpbCBsaXN0IGhhcyBubyBzdWJzY3JpcHRpb24NCgkJCQkJCXNlbGY6OiRtZXNzYWdlc1snRXJyb3InXVtdID0gVGV4dDo6c3ByaW50ZignVGhlcmUgd2FzIGFuIGVycm9yIHNlbmRpbmcgPGI+JXM8L2I+IHRvIHRoZSBzdWJzY3JpYmVycy4nLCBzZWxmOjpnZXRWYXIoJ21lc3NhZ2UnLCAkcGssICdpZCcsICdzdWJqZWN0JykpOw0KCQkJCQl9DQoJCQkJCS8vIGRvbid0IHNob3cgc3VjY2VzcyBtZXNzYWdlDQoJCQkJCSRzZW5kID0gZmFsc2U7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWlmICgkcHJvamVjdCkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGEgbWVzc2FnZSB0aGF0IHRoaXMgbWFpbCBsaXN0IGhhcyBubyBzdWJzY3JpcHRpb24NCgkJCQkJCXNlbGY6OiRtZXNzYWdlc1snU3VjY2VzcyddW10gPSBUZXh0OjpzcHJpbnRmKCc8Yj4lczwvYj4gd2FzIHNlbmQgdG8gdGhlIHN1YnNjcmliZXJzIG9mIDxiPiVzLyVzPC9iPiBiYXNlZCBvbiA8Yj4lczwvYj4gcmVsYXRpb25zaGlwIGV4Y2x1ZGluZyA8Yj4lczwvYj4gcmVsYXRpb25zaGlwJXMuJywgc2VsZjo6Z2V0VmFyKCdtZXNzYWdlJywgJHBrLCAnaWQnLCAnc3ViamVjdCcpLCBzZWxmOjpnZXRWYXIoJ3Byb2plY3QnLCAkcHJvamVjdCwgJ2lkJywgJ25hbWUnKSwgc2VsZjo6Z2V0VmFyKCdwcm9qZWN0JywgJHByb2plY3QsICdpZCcsICdwcm9qZWN0JyksICRyZWxbJ3JlbGF0aW9uc2hpcCddLCAkcmVsWydub3RfcmVsYXRpb25zaGlwJ10sICRyZWxbJ2hpcmVhYmxlJ10pOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGEgbWVzc2FnZSB0aGF0IHRoaXMgbWFpbCBsaXN0IGhhcyBubyBzdWJzY3JpcHRpb24NCgkJCQkJCXNlbGY6OiRtZXNzYWdlc1snU3VjY2VzcyddW10gPSBUZXh0OjpzcHJpbnRmKCc8Yj4lczwvYj4gd2FzIHNlbmQgdG8gYWxsIHN1YnNjcmliZXJzLicsIHNlbGY6OmdldFZhcignbWVzc2FnZScsICRwaywgJ2lkJywgJ3N1YmplY3QnKSk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gZnJlZSBtZW1vcnkNCgkJCQl1bnNldCgkaXRlbXMpOw0KCQkJfQ0KCQkJcmV0dXJuICRzZW5kOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgU3Vic2NyaXB0aW9uIE1lc3NhZ2VzIG9mIE9uZSBEZXZlbG9wZXIgdGhhdCB3YXMgc2VuZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U3Vic2NyaXB0aW9uTWVzc2FnZXMoJGdpdGh1Yl9pZCwgJGRiID0gbnVsbCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24NCgkJaWYgKCEkZGIpDQoJCXsNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQl9DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KCdtLmlkJywgJ20uc3ViamVjdCcsICdtLnByb2plY3QnLCAncC5wcm9qZWN0JywgJ3AubmFtZScsICdtLnRleHRib2R5JyksIGFycmF5KCdtZXNzYWdlX2lkJywgJ3N1YmplY3QnLCAncHJvamVjdF9pZCcsICdwcm9qZWN0JywgJ3Byb2plY3RfbmFtZScsICd0ZXh0Ym9keScpDQoJCQkpDQoJCSk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9zZW5kIHRhYmxlDQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3NlbmQnLCAnYScpKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9tZXNzYWdlJywgJ20nKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5tZXNzYWdlJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdtLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2plY3QnLCAncCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdtLnByb2plY3QnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3AuaWQnKSAuICcpJyk7DQoJCS8vIG9ubHkgZ2V0IHRoaXMgZGV2ZWxvcGVyDQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EudXNlcicpIC4gJyA9ICcgLiAoaW50KSAkZ2l0aHViX2lkKTsNCgkJLy8gT3JkZXIgdGhlIHJlc3VsdHMgYnkgb3JkZXJpbmcNCgkJJHF1ZXJ5LT5vcmRlcignbS5zdWJqZWN0ICBBU0MnKTsNCgkJLy8gTG9hZCB0aGUgaXRlbXMNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkQXNzb2NMaXN0KCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWdldCB0aGUgZGV2ZWxvcGVycyBnaXRodWIgSURzIG9mIGEgZ2l2ZW4gbGlzdCBvZiBQcm9qZWN0cyAoc3Vic2NyaWJlZCkNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByb2plY3RzRGV2ZWxvcGVySURzKCRwcm9qZWN0cywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGNoZWNrIHRoYXQgaXQgaXMgYW4gYXJyYXkNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvamVjdHMpICYmIGlzX251bWVyaWMoJHByb2plY3RzKSkNCgkJew0KCQkJJHByb2plY3RzID0gYXJyYXkoJHByb2plY3RzKTsNCgkJfQ0KCQllbHNlaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvamVjdHMpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJLy8gU2VsZWN0IHNvbWUgZmllbGRzDQoJCSRxdWVyeS0+c2VsZWN0KCd1c2VyJyk7DQoJCS8vIEZyb20gdGhlIFtbW0NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlcg0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlcicsICdhJykpOw0KCQkvLyBvbmx5IGZvciB0aGUgc2VsZWN0ZWQgcHJvamVjdA0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnByb2plY3QnKSAuICcgSU4gKCcgLiBpbXBsb2RlKCcsICcsICRwcm9qZWN0cykgLiAnKScpOw0KCQkvLyBvbmx5IGdldCB1c2VycyBzdGlsbCBzdWJzY3JpYmVkDQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2Euc3RhdHVzJykgLiAnID0gMScpOw0KCQkvLyBMb2FkIHRoZSBpdGVtcw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCS8vIHJldHVybiBmb3VuZCBJRHMNCgkJCXJldHVybiBhcnJheV91bmlxdWUoKGFycmF5KSRkYi0+bG9hZENvbHVtbigpKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJZ2V0IFN1YnNjcmliZXJzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTdWJzY3JpYmVycygkcGssICYkcmVsLCAmJHByb2plY3QsICRkYiA9IG51bGwsICRzZWxlY3Rpb24gPSBudWxsLCAkZiA9ICdbZGV2ZWxvcGVyXycsICRiID0gJ10nLCAkcmVtb3ZlX3NlbmQgPSB0cnVlKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJLy8gZ2V0IHNlbGVjdGlvbg0KCQlpZiAoISRzZWxlY3Rpb24gfHwgIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZWxlY3Rpb24pKQ0KCQl7DQoJCQkkc2VsZWN0aW9uID0gc2VsZjo6Z2V0U2VsZWN0aW9uKCdkZXZlbG9wZXInLCAkZiwgJGIpOw0KCQl9DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5X2tleXMoJHNlbGVjdGlvbiksIGFycmF5X3ZhbHVlcygkc2VsZWN0aW9uKQ0KCQkJKQ0KCQkpOw0KCQkvLyBGcm9tIHRoZSBbW1tDb21wb25lbnRdXV1fZGV2ZWxvcGVyIHRhYmxlDQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2RldmVsb3BlcicsICdhJykpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uc2hpcF9idWlsZGVyJywgJ3InKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5naXRodWJfaWQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3IudXNlcicpIC4gJyknKTsNCgkJLy8gZ2V0IHRoZSBtZXNzYWdlDQoJCSRtZXNzYWdlID0gc2VsZjo6Z2V0TWVzc2FnZSgkcGssICRkYik7DQoJCS8vIGdldCB0aGUgbWVzc2FnZSBwcm9qZWN0DQoJCWlmIChpc3NldCgkbWVzc2FnZS0+cHJvamVjdCkgJiYgJG1lc3NhZ2UtPnByb2plY3QgPiAwKQ0KCQl7DQoJCQkkcHJvamVjdCA9ICRtZXNzYWdlLT5wcm9qZWN0Ow0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHByb2plY3QgPSBzZWxmOjpnZXRWYXIoJ21lc3NhZ2UnLCAkcGssICdpZCcsICdwcm9qZWN0Jyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9qZWN0IElEDQoJCWlmICgkcHJvamVjdCA+IDApDQoJCXsNCgkJCS8vIG9ubHkgZGV2ZWxvcGVycyBwYXJ0IG9mIHRoaXMgcHJvamVjdA0KCQkJaWYgKCFzZWxmOjokZG9UZXN0KQ0KCQkJew0KCQkJCWlmICgkX2FjdGl2ZV9naXRodWJfdXNlcnMgPSBzZWxmOjpnZXRQcm9qZWN0c0RldmVsb3BlcklEcygkcHJvamVjdCwgJGRiKSkNCgkJCQl7DQoJCQkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgZXhjbHVkaW5nIHVzZXJzDQoJCQkJCWlmIChpc3NldCgkbWVzc2FnZS0+bm90X3Byb2plY3RzKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkbWVzc2FnZS0+bm90X3Byb2plY3RzKSkNCgkJCQkJew0KCQkJCQkJLy8gY29udmVydCB0byBhbiBhcnJheQ0KCQkJCQkJJG5vdF9wcm9qZWN0cyA9IChhcnJheSkganNvbl9kZWNvZGUoJG1lc3NhZ2UtPm5vdF9wcm9qZWN0cywgdHJ1ZSk7DQoJCQkJCQkvLyByZW1vdmUgdXNlcnMgZnJvbSBhY3RpdmUgaWYgZm91bmQNCgkJCQkJCWlmICgkX3JlbW92ZV91c2VycyA9IHNlbGY6OmdldFByb2plY3RzRGV2ZWxvcGVySURzKCRub3RfcHJvamVjdHMsICRkYikpDQoJCQkJCQl7DQoJCQkJCQkJJF9hY3RpdmVfZ2l0aHViX3VzZXJzID0gYXJyYXlfZGlmZigkX2FjdGl2ZV9naXRodWJfdXNlcnMsICRfcmVtb3ZlX3VzZXJzKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBub3cgY2hlY2sgaWYgd2UgY2FuIGNvbnRpbnVlDQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRfYWN0aXZlX2dpdGh1Yl91c2VycykpDQoJCQkJew0KCQkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmdpdGh1Yl9pZCcpIC4gJyAgSU4gKCcgLiBpbXBsb2RlKCcsICcsICRfYWN0aXZlX2dpdGh1Yl91c2VycykgLiAnKScpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gZmFsc2U7IC8vIHdlIG11c3QgaGF2ZSBzdWJzY3JpYmVycw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXJldHVybiBmYWxzZTsgLy8gbWF5YmUgbGF0ZXIgd2UgY2FuIGFsbG93IGJ1aWxkIG9yIGdsb2JhbCBlbWFpbCAoVE9ETykNCgkJfQ0KCQkvLyBmaWx0ZXIgYnkgcmVsYXRpb25zaGlwDQoJCSRyZWxfdGFyZ2V0cyA9IGFycmF5KA0KCQkJJ3JlbGF0aW9uc2hpcCcgPT4gYXJyYXkoJ29wZXJhdG9yJyA9PiAnSU4nLCAnZmllbGQnID0+ICdyLnJlbGF0aW9uc2hpcCcpLA0KCQkJJ25vdF9yZWxhdGlvbnNoaXAnID0+IGFycmF5KCdvcGVyYXRvcicgPT4gJ05PVCBJTicsICdmaWVsZCcgPT4gJ3IucmVsYXRpb25zaGlwJykpOw0KCQkkdG1wID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJHJlbF90YXJnZXRzIGFzICRfcmVsID0+ICRfdGFyZ2V0KQ0KCQl7DQoJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJG1lc3NhZ2UtPnskX3JlbH0pKQ0KCQkJew0KCQkJCS8vIGNvbnZlcnQgdG8gYW4gYXJyYXkNCgkJCQkkdG1wWyRfcmVsXSA9IChhcnJheSkganNvbl9kZWNvZGUoJG1lc3NhZ2UtPnskX3JlbH0sIHRydWUpOw0KCQkJCS8vIGNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhbiBhcnJheQ0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdG1wWyRfcmVsXSkpDQoJCQkJew0KCQkJCQlpZiAoIXNlbGY6OiRkb1Rlc3QpDQoJCQkJCXsNCgkJCQkJCS8vIG9ubHkgZ2V0IHVzZXJzIHdobyBoYXMgdGhlIGNvcnJlY3QgcmVsYXRpb25zaGlwDQoJCQkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCRfdGFyZ2V0WydmaWVsZCddKSAuJyAnLiRfdGFyZ2V0WydvcGVyYXRvciddLicgKCcgLiBpbXBsb2RlKCcsICcsICR0bXBbJF9yZWxdKSAuICcpJyk7DQoJCQkJCX0NCgkJCQkJLy8gdXBkYXRlIHRoZSByZWxhdGlvbnNoaXAgc3RyaW5nDQoJCQkJCSRidWNrZXQgPSBhcnJheSgpOw0KCQkJCQlmb3JlYWNoICgkdG1wWyRfcmVsXSBhcyAkcmVsX2lkKQ0KCQkJCQl7DQoJCQkJCQkvLyBTZXQgdGhlIG5hbWUuDQoJCQkJCQlpZiAoaXNzZXQoc2VsZjo6JHJlbGF0aW9uc2hpcE5hbWVbJHJlbF9pZF0pKQ0KCQkJCQkJew0KCQkJCQkJCSRidWNrZXRbXSA9IHNlbGY6OiRyZWxhdGlvbnNoaXBOYW1lWyRyZWxfaWRdOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIGRvIHdlIGhhdmUgYW4gYXJyYXkNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCQl7DQoJCQkJCQkkcmVsWyRfcmVsXSA9IGltcGxvZGUoJywgJywgJGJ1Y2tldCk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gZmlsdGVyIGJhc2VkIG9uIGhpcmVhYmxlDQoJCWlmIChzZWxmOjokZG9UZXN0KQ0KCQl7DQoJCQkkcmVsWydoaXJlYWJsZSddID0gJyAnLiBUZXh0OjpfKCdhbmQgaXMgdGVzdGFibGUnKTsNCgkJfQ0KCQllbHNlaWYgKGlzc2V0KCRtZXNzYWdlLT5oaXJlYWJsZSkpDQoJCXsNCgkJCWlmICgkbWVzc2FnZS0+aGlyZWFibGUgPT0gMSkNCgkJCXsNCgkJCQkvLyBsb2FkIG9ubHkgdGhvc2UgaGlyZWFibGUNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmhpcmVhYmxlJykgLiAnID0gMScpOw0KCQkJCSRyZWxbJ2hpcmVhYmxlJ10gPSAnICcuIFRleHQ6Ol8oJ2FuZCBpcyBoaXJlYWJsZScpOw0KCQkJfQ0KCQkJZWxzZWlmICgkbWVzc2FnZS0+aGlyZWFibGUgPT0gMikNCgkJCXsNCgkJCQkvLyBsb2FkIGJvdGgNCgkJCQkkcmVsWydoaXJlYWJsZSddID0gJyc7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gbG9hZCBvbmx5IHRob3NlIHdobyBhcmVuJ3QgaGlyZWFibGUNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmhpcmVhYmxlJykgLiAnID0gMCcpOw0KCQkJCSRyZWxbJ2hpcmVhYmxlJ10gPSAnICcuIFRleHQ6Ol8oImFuZCBpc24ndCBoaXJlYWJsZSIpOw0KCQkJfQ0KCQl9DQoJCS8vIG9ubHkgaWYgbm90IGEgdGVzdA0KCQlpZiAoIXNlbGY6OiRkb1Rlc3QpDQoJCXsNCgkJCS8vIG9ubHkgZ2V0IHB1Ymxpc2hlZCB1c2Vycw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCQkvLyBvbmx5IGdldCB1c2VycyB3aXRoIGVtYWlscw0KCQkJJHF1ZXJ5LT53aGVyZSgkcXVlcnktPmNoYXJMZW5ndGgoJ2EuZW1haWwnKS4nID4gNCcpOw0KCQkJLy8gT3JkZXIgdGhlIHJlc3VsdHMgYnkgb3JkZXJpbmcNCgkJCSRxdWVyeS0+b3JkZXIoJ2EubG9naW4gIEFTQycpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gb25seSBnZXQgdGhlIHRlc3Rlcg0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcgLiAoaW50KSBzZWxmOjpnZXRUZXN0ZXIoKSk7DQoJCX0NCgkJLy8gTG9hZCB0aGUgaXRlbXMNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkvLyBpbnN1cmUgaXQgbG9hZHMgZWFjaCB1c2VyIG9ubHkgb25jZQ0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkQXNzb2NMaXN0KCRmLidnaXRodWJfaWQnLiRiKTsNCgkJCS8vIHNldCB2YWx1ZXMgdG8gZGlzcGxheSBjb3JyZWN0bHkuDQoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJG5yID0+ICYkaXRlbSkNCgkJCXsNCgkJCQkvLyBjaGVjayBpZiB0aGlzIHVzZXIgYWxyZWFkeSByZWNlaXZlZCB0aGUgbWVzc2FnZQ0KCQkJCWlmICghc2VsZjo6JGRvVGVzdCAmJiAkcmVtb3ZlX3NlbmQgJiYgc2VsZjo6d2FzU2VuZCgkcGssICRpdGVtWyRmLidnaXRodWJfaWQnLiRiXSwgJGRiKSkNCgkJCQl7DQoJCQkJCS8vIGFscmVhZHkgcmVjZWl2ZWQgdGhpcyBtZXNzYWdlDQoJCQkJCXVuc2V0KCRpdGVtc1skbnJdKTsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCS8vIGZpeCBuYW1lIGlmIG5vbmUgZm91bmQNCgkJCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtWyRmLiduYW1lJy4kYl0pKQ0KCQkJCXsNCgkJCQkJJGl0ZW1bJGYuJ25hbWUnLiRiXSA9ICRpdGVtWyRmLid1c2VybmFtZScuJGJdOw0KCQkJCX0NCgkJCQkvLyBzZXQgcmVsYXRpb25zaGlwIG5hbWVzDQoJCQkJaWYgKCFzZWxmOjokZG9UZXN0ICYmICRwcm9qZWN0KQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoaXMgdXNlcyByZWxhdGlvbnNoaXANCgkJCQkJJHJlbGF0aW9uc2hpcCA9IHNlbGY6OmdldFJlbGF0aW9uc2hpcHMoJHByb2plY3QsICRpdGVtWyRmLidnaXRodWJfaWQnLiRiXSk7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVsYXRpb25zaGlwKSkNCgkJCQkJew0KCQkJCQkJLy8gZG8gYSBzZWNvbmQgcm91bmQgdG8gcmVtb3ZlIGlmIGluIGEgbm90IHJlbGF0aW9uc2hpcA0KCQkJCQkJaWYgKGlzc2V0KCR0bXBbJ25vdF9yZWxhdGlvbnNoaXAnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRtcFsnbm90X3JlbGF0aW9uc2hpcCddKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIHJlbGF0aW9uc2hpcCBhcnJheQ0KCQkJCQkJCSRyZWxhdGlvbnNoaXBBcnJheSA9IChhcnJheSkgYXJyYXlfbWFwKCBmdW5jdGlvbiAoJHJlbGF0aW9uKSB7IHJldHVybiAkcmVsYXRpb24tPnJlbGF0aW9uc2hpcDsgfSwgJHJlbGF0aW9uc2hpcCk7DQoJCQkJCQkJaWYgKGFycmF5X2ludGVyc2VjdCgkdG1wWydub3RfcmVsYXRpb25zaGlwJ10sICRyZWxhdGlvbnNoaXBBcnJheSkpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBoYXMgYSBub3QgcmVsYXRpb25zaGlwDQoJCQkJCQkJCXVuc2V0KCRpdGVtc1skbnJdKTsNCgkJCQkJCQkJY29udGludWU7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJGl0ZW1bJGYuJ3JlbGF0aW9uc2hpcHMnLiRiXSA9IGltcGxvZGUoJywgJywgYXJyYXlfbWFwKCBmdW5jdGlvbiAoJHJlbGF0aW9uKSB7IHJldHVybiAkcmVsYXRpb24tPnJlbGF0aW9uc2hpcF9uYW1lOyB9LCAkcmVsYXRpb25zaGlwKSk7DQoJCQkJCX0NCgkJCQkJZWxzZWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkcmVsYXRpb25zaGlwKSkNCgkJCQkJew0KCQkJCQkJLy8gZG8gYSBzZWNvbmQgcm91bmQgdG8gcmVtb3ZlIGlmIGluIGEgbm90IHJlbGF0aW9uc2hpcA0KCQkJCQkJaWYgKGlzc2V0KCR0bXBbJ25vdF9yZWxhdGlvbnNoaXAnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRtcFsnbm90X3JlbGF0aW9uc2hpcCddKSkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoaW5fYXJyYXkoJHJlbGF0aW9uc2hpcC0+cmVsYXRpb25zaGlwLCAkdG1wWydub3RfcmVsYXRpb25zaGlwJ10pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gaGFzIGEgbm90IHJlbGF0aW9uc2hpcA0KCQkJCQkJCQl1bnNldCgkaXRlbXNbJG5yXSk7DQoJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRpdGVtWyRmLidyZWxhdGlvbnNoaXBzJy4kYl0gPSAkcmVsYXRpb25zaGlwLT5yZWxhdGlvbnNoaXBfbmFtZTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRpdGVtWyRmLidyZWxhdGlvbnNoaXBzJy4kYl0gPSAnJzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRkb1Rlc3QpDQoJCQkJew0KCQkJCQkkaXRlbVskZi4ncmVsYXRpb25zaGlwcycuJGJdID0gJ3Rlc3Rlcic7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGl0ZW1zDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGl0ZW1zKSkNCgkJCXsNCgkJCQlyZXR1cm4gJGl0ZW1zOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmICgkcHJvamVjdCkNCgkJCQl7DQoJCQkJCS8vIHNldCBhIG1lc3NhZ2UgdGhhdCB0aGlzIG1haWwgbGlzdCBoYXMgbm8gc3Vic2NyaXB0aW9uDQoJCQkJCXNlbGY6OiRtZXNzYWdlc1snTm90aWNlJ11bXSA9IFRleHQ6OnNwcmludGYoJ0FsbCBzdWJzY3JpYmVycyB0byA8Yj4lcy8lczwvYj4gaGFzIGFscmVhZHkgcmVjZWl2ZWQgPGI+JXM8L2I+IGJhc2VkIG9uIDxiPiVzPC9iPiByZWxhdGlvbnNoaXAgZXhjbHVkaW5nIDxiPiVzPC9iPiByZWxhdGlvbnNoaXAlcy4nLCBzZWxmOjpnZXRWYXIoJ3Byb2plY3QnLCAkcHJvamVjdCwgJ2lkJywgJ25hbWUnKSwgc2VsZjo6Z2V0VmFyKCdwcm9qZWN0JywgJHByb2plY3QsICdpZCcsICdwcm9qZWN0JyksIHNlbGY6OmdldFZhcignbWVzc2FnZScsICRwaywgJ2lkJywgJ3N1YmplY3QnKSwgJHJlbFsncmVsYXRpb25zaGlwJ10sICRyZWxbJ25vdF9yZWxhdGlvbnNoaXAnXSwgJHJlbFsnaGlyZWFibGUnXSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIHNldCBhIG1lc3NhZ2UgdGhhdCB0aGlzIG1haWwgbGlzdCBoYXMgbm8gc3Vic2NyaXB0aW9uDQoJCQkJCXNlbGY6OiRtZXNzYWdlc1snTm90aWNlJ11bXSA9IFRleHQ6OnNwcmludGYoJ0FsbCBzdWJzY3JpYmVycyBoYXZlIGFscmVhZHkgcmVjZWl2ZWQgPGI+JXM8L2I+LicsIHNlbGY6OmdldFZhcignbWVzc2FnZScsICRwaywgJ2lkJywgJ3N1YmplY3QnKSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJaWYgKCRwcm9qZWN0KQ0KCQkJew0KCQkJCS8vIHNldCBhIG1lc3NhZ2UgdGhhdCB0aGlzIG1haWwgbGlzdCBoYXMgbm8gc3Vic2NyaXB0aW9uDQoJCQkJc2VsZjo6JG1lc3NhZ2VzWydXYXJuaW5nJ11bXSA9IFRleHQ6OnNwcmludGYoJ1RoZXJlIGFyZSBubyBzdWJzY3JpYmVycyBmb3IgPGI+JXMvJXM8L2I+IGJhc2VkIG9uIDxiPiVzPC9iPiByZWxhdGlvbnNoaXAgZXhjbHVkaW5nIDxiPiVzPC9iPiByZWxhdGlvbnNoaXAlcywgc28gPGI+JXM8L2I+IGNhbiBub3QgYmUgc2VuZCBhdCB0aGlzIHRpbWUuJywgc2VsZjo6Z2V0VmFyKCdwcm9qZWN0JywgJHByb2plY3QsICdpZCcsICduYW1lJyksIHNlbGY6OmdldFZhcigncHJvamVjdCcsICRwcm9qZWN0LCAnaWQnLCAncHJvamVjdCcpLCAkcmVsWydyZWxhdGlvbnNoaXAnXSwgJHJlbFsnbm90X3JlbGF0aW9uc2hpcCddLCAkcmVsWydoaXJlYWJsZSddLCBzZWxmOjpnZXRWYXIoJ21lc3NhZ2UnLCAkcGssICdpZCcsICdzdWJqZWN0JykpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBhIG1lc3NhZ2UgdGhhdCB0aGlzIG1haWwgbGlzdCBoYXMgbm8gc3Vic2NyaXB0aW9uDQoJCQkJc2VsZjo6JG1lc3NhZ2VzWydXYXJuaW5nJ10gPSBUZXh0OjpzcHJpbnRmKCdUaGVyZSBhcmUgbm8gc3Vic2NyaWJlcnMgZm9yIDxiPiVzPC9iPiBhdCB0aGlzIHRpbWUuJywgc2VsZjo6Z2V0VmFyKCdtZXNzYWdlJywgJHBrLCAnaWQnLCAnc3ViamVjdCcpKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJR2V0IHRoZSB0ZXN0ZXINCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRlc3RlcigpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokcGFyYW1zLT5nZXQoJ3Rlc3RlcicsIDApOw0KCX0NCg0KCS8qKg0KCSogCUdldCB0aGUgdW5zdWJzY3JpYmUga2V5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRVbnN1YnNjcmliZUtleSgpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokcGFyYW1zLT5nZXQoJ3Vuc3Vic2NyaWJlX2tleScsICd0aDFzTXVzdEIzTE9jazNkIW5Tb20zRjBybScpOw0KCX0NCg0KCS8qKg0KCSogCUdldCB0aGUgdW5zdWJzY3JpYmUgdXJsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRVbnN1YnNjcmliZVVybCgpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokcGFyYW1zLT5nZXQoJ3Vuc3Vic2NyaWJlX3VybCcsICcjJyk7DQoJfQ0KDQoJLyoqDQoJKiAJU2VuZCBtZXNzYWdlcyBub3cNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNlbmRNZXNzYWdlc05vdygkaXRlbXMsICRtZXNzYWdlX2lkLCAkcHJvamVjdF9pZCwgJGRiID0gbnVsbCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24NCgkJaWYgKCEkZGIpDQoJCXsNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQl9DQoJCS8vIGdldCB0aGUgbWVzc2FnZQ0KCQlpZiAoISRtZXNzYWdlID0gc2VsZjo6Z2V0TWVzc2FnZSgkbWVzc2FnZV9pZCwgJGRiKSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSBhIG1lc3NhZ2UgaHRtbCBib2R5DQoJCWlmICghaXNzZXQoJG1lc3NhZ2UtPmh0bWxib2R5KSB8fCAhU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJG1lc3NhZ2UtPmh0bWxib2R5KSkNCgkJew0KCQkJRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+ZW5xdWV1ZU1lc3NhZ2UoVGV4dDo6c3ByaW50ZignVGhlcmUgd2FzIGFuIGVycm9yIHNlbmRpbmcgPGI+JXM8L2I+IHNpbmNlIGl0IGhhcyBubyBodG1sIHNldC4nLCAkbWVzc2FnZS0+c3ViamVjdCksICdFcnJvcicpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vIGJ1aWxkIGdsb2JhbCB2YWx1ZXMNCgkJJGdsb2JhbCA9IGFycmF5KCk7DQoJCS8vIGFkZCBmb290ZXIgJiBoZWFkZXINCgkJJGdsb2JhbFtdID0gYXJyYXkoJ1tkb2N1bWVudF9mb290ZXJdJyA9PiBzZWxmOjpnZXRUZW1wbGF0ZSgnZG9jX2Zvb3RlcicsICcnKSwgJ1tkb2N1bWVudF9oZWFkZXJdJyA9PiBzZWxmOjpnZXRUZW1wbGF0ZSgnZG9jX2hlYWRlcicsICcnKSwgJ1t0ZXh0X2Zvb3Rlcl0nID0+IHNlbGY6OmdldFRlbXBsYXRlKCd0ZXh0X2Zvb3RlcicsICcnKSwgJ1t0ZXh0X2hlYWRlcl0nID0+IHNlbGY6OmdldFRlbXBsYXRlKCd0ZXh0X2hlYWRlcicsICcnKSk7DQoJCS8vIGdldCBjb21wYW55IGRldGFpbHMNCgkJJGdsb2JhbFtdID0gc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJyk7DQoJCS8vIGdldCBwcm9qZWN0IGRldGFpbHMNCgkJaWYgKCRwcm9qZWN0X2lkKQ0KCQl7DQoJCQkkZ2xvYmFsW10gPSBzZWxmOjpnZXRQcm9qZWN0cygkcHJvamVjdF9pZCwgJGRiLCBmYWxzZSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY29tYmluZQ0KCQkkZ2xvYmFsID0gc2VsZjo6bWVyZ2VBcnJheXMoJGdsb2JhbCk7DQoJCS8vIGdldCB0aGUgdW5zdWJzY3JpYmUga2V5DQoJCSRrZXlVbnN1YnNjcmliZSA9IHNlbGY6OmdldFVuc3Vic2NyaWJlS2V5KCk7DQoJCS8vIGdldCB0aGUgdW5zdWJzY3JpYmUgdXJsDQoJCSR1cmxVbnN1YnNjcmliZSA9IHNlbGY6OmdldFVuc3Vic2NyaWJlVXJsKCk7DQoJCS8vIHN0YXJ0IHRoZSBlbmdpbmUNCgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQl7DQoJCQkvLyBsb2FkIHRvIHByb2plY3QgZGV0YWlscw0KCQkJJGl0ZW1bJ1twcm9qZWN0X25hbWVdJ10gPSAkZ2xvYmFsWydbcHJvamVjdF9uYW1lXSddOw0KCQkJJGl0ZW1bJ1twcm9qZWN0X3Byb2plY3RdJ10gPSAkZ2xvYmFsWydbcHJvamVjdF9wcm9qZWN0XSddOw0KCQkJJGl0ZW1bJ1twcm9qZWN0X2Rlc2NyaXB0aW9uXSddID0gJGdsb2JhbFsnW3Byb2plY3RfZGVzY3JpcHRpb25dJ107DQoJCQkkaXRlbVsnW3Byb2plY3Rfc2hvcnRfZGVzY3JpcHRpb25dJ10gPSAkZ2xvYmFsWydbcHJvamVjdF9zaG9ydF9kZXNjcmlwdGlvbl0nXTsNCgkJCS8vIHNldCB1bnN1YnNjcmliZQ0KCQkJJHVuc3Vic2NyaWJlID0gJHVybFVuc3Vic2NyaWJlIC4gc2VsZjo6bG9jaygkaXRlbSwgJGtleVVuc3Vic2NyaWJlLCAwKTsNCgkJCS8vIGxvYWQgdG8gZW1haWwgdGhlIHVuc3Vic2NyaWJlDQoJCQkkaXRlbVsnW3Vuc3Vic2NyaWJlX2xpbmtdJ10gPSAnPGEgaHJlZj0iJyAuICR1bnN1YnNjcmliZSAuICciIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iJyAuIFRleHQ6Ol8oJ1Vuc3Vic2NyaWJlJykgLiAnIj4nIC4gVGV4dDo6XygnVW5zdWJzY3JpYmUnKSAuICc8L2E+JzsNCgkJCSRpdGVtWydbdW5zdWJzY3JpYmVfdXJsXSddID0gJHVuc3Vic2NyaWJlOw0KCQkJLy8gc2V0IHBsYWNlaG9sZGVycw0KCQkJJHBsYWNlaG9sZGVycyA9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRnbG9iYWwsICRpdGVtKSk7DQoJCQkvLyBnZXQgdGhlIGJvZHkgZm9yIGJvdGggaHRtbCBhbmQgdGV4dA0KCQkJJGh0bWwgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZS0+aHRtbGJvZHksICRwbGFjZWhvbGRlcnMpOw0KCQkJJHRleHQgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJG1lc3NhZ2UtPnRleHRib2R5KSkgPyBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZS0+dGV4dGJvZHksICRwbGFjZWhvbGRlcnMpIDogJyc7DQoJCQkvLyBzZXQgdGhlIHN1YmplY3QNCgkJCSRzdWJqZWN0ID0gKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRtZXNzYWdlLT5zdWJqZWN0KSkgPyBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZS0+c3ViamVjdCwgJHBsYWNlaG9sZGVycykgOiBUZXh0OjpfKCdObyBzdWJqZWN0IHdhcyBzZXQnKTsNCgkJCS8vIGFkZCBzb21lIGN1c3RvbSBlbWFpbCBoZWFkZXJzDQoJCQlbW1tDb21wb25lbnRdXV1FbWFpbDo6c2V0SGVhZGVyKCdMaXN0LVVuc3Vic2NyaWJlJywgJzwnIC4gJHVuc3Vic2NyaWJlIC4gJz4nKTsNCgkJCS8vIG5vdyBzZW5kIHRoZSBlbWFpbA0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRodG1sKSAmJiAkcmVzdWx0ID0gW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJGl0ZW1bJ1tkZXZlbG9wZXJfZW1haWxdJ10sICRzdWJqZWN0LCBbW1tDb21wb25lbnRdXV1FbWFpbDo6c2V0VGFibGVCb2R5KCRodG1sLCAkc3ViamVjdCksICR0ZXh0LCAxKSkNCgkJCXsNCgkJCQkvLyB1cGRhdGUgdGhlIHNlbmQgdGFibGUgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBzZW5kIHRoaXMgbWVzc2FnZSB0byB0aGlzIGRldmVsb3BlciBhZ2Fpbg0KCQkJCXNlbGY6Om1lc3NhZ2VTZW5kKCRtZXNzYWdlX2lkLCAkaXRlbVsnW2RldmVsb3Blcl9naXRodWJfaWRdJ10sICRkYik7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJKiAJc2V0IHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIHNlbmQNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1lc3NhZ2VTZW5kKCRtZXNzYWdlX2lkLCAkdXNlciwgJGRiID0gbnVsbCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24NCgkJaWYgKCEkZGIpDQoJCXsNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQl9DQoJCS8vIHVwZGF0ZSB0aGUgdGFibGUNCgkJJG9iamVjdCA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJJG9iamVjdC0+dXNlciA9IChpbnQpICR1c2VyOw0KCQkkb2JqZWN0LT5tZXNzYWdlID0gKGludCkgJG1lc3NhZ2VfaWQ7DQoJCSRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc2VuZCcsICRvYmplY3QpOw0KCX0NCg0KCS8qKg0KCSogCWNoZWNrIGlmIGEgbWVzc2FnZSB3YXMgc2VuZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2FzU2VuZCgkbWVzc2FnZV9pZCwgJHVzZXIsICRkYiA9IG51bGwpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uDQoJCWlmICghJGRiKQ0KCQl7DQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJfQ0KCQkvLyBzdGFydCB0aGUgcXVlcnkNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJLy8gU2VsZWN0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBtZXNzYWdlDQoJCSRxdWVyeS0+c2VsZWN0KCdhLionKTsNCgkJJHF1ZXJ5LT5mcm9tKCcjX19bW1tjb21wb25lbnRdXV1fc2VuZCBBUyBhJyk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EubWVzc2FnZScpIC4gJyA9ICcgLiAoaW50KSAkbWVzc2FnZV9pZCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EudXNlcicpIC4gJyA9ICcgLiAoaW50KSAkdXNlcik7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCW1lc3NhZ2VzIGluIG1lbW9yeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG1hc3NhZ2VNZW1vcnkgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJZ2V0IGEgbWVzc2FnZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TWVzc2FnZSgkbWVzc2FnZV9pZCwgJGRiID0gbnVsbCkNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JG1hc3NhZ2VNZW1vcnlbJG1lc3NhZ2VfaWRdKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQkJaWYgKCEkZGIpDQoJCQl7DQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQl9DQoJCQkvLyBzdGFydCB0aGUgcXVlcnkNCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkvLyBTZWxlY3QgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG1lc3NhZ2UNCgkJCSRxdWVyeS0+c2VsZWN0KCdhLionKTsNCgkJCSRxdWVyeS0+ZnJvbSgnI19fW1tbY29tcG9uZW50XV1dX21lc3NhZ2UgQVMgYScpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcgLiAoaW50KSAkbWVzc2FnZV9pZCk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlzZWxmOjokbWFzc2FnZU1lbW9yeVskbWVzc2FnZV9pZF0gPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlzZWxmOjokbWFzc2FnZU1lbW9yeVskbWVzc2FnZV9pZF0gPSBmYWxzZTsNCgkJCX0NCgkJfQ0KCQkvLyByZXR1cm4gdGhlIG1lc3NhZ2UNCgkJcmV0dXJuIHNlbGY6OiRtYXNzYWdlTWVtb3J5WyRtZXNzYWdlX2lkXTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlbGF0aW9uc2hpcHMoJHByb2plY3QgPSBudWxsLCAkdXNlciA9IG51bGwsICRyZWwgPSBudWxsLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJLy8gU2VsZWN0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSByZWxhdGlvbnNoaXAgYnVpbGRlcg0KCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoJCS8vIGxpbmsgaW4gdGhlIG90aGVyIHZhbHVlcw0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KA0KCQkJCQknZC5sb2dpbicsDQoJCQkJCSdkLmVtYWlsJywNCgkJCQkJJ3AubmFtZScsDQoJCQkJCSdwLnByb2plY3QnDQoJCQkJKSwgYXJyYXkoDQoJCQkJCSdsb2dpbicsDQoJCQkJCSdlbWFpbCcsDQoJCQkJCSdvd25lcicsDQoJCQkJCSdwcm9qZWN0X25hbWUnDQoJCQkJKQ0KCQkJKQ0KCQkpOw0KCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlciBBUyBhJyk7DQoJCS8vIG9ubHkgY2hlY2sgZm9yIHVzZXIgaWYgc2V0DQoJCWlmICgkdXNlcikNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS51c2VyJykgLiAnID0gJyAuIChpbnQpICR1c2VyKTsNCgkJfQ0KCQkvLyBvbmx5IGNoZWNrIGZvciBwcm9qZWN0IGlmIHNldA0KCQlpZiAoJHByb2plY3QpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EucHJvamVjdCcpIC4gJyA9ICcgLiAoaW50KSAkcHJvamVjdCk7DQoJCX0NCgkJLy8gb25seSBjaGVjayBmb3IgcmVsYXRpb25zaGlwIGlmIHNldA0KCQlpZiAoJHJlbCkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5yZWxhdGlvbnNoaXAnKSAuICcgPSAnIC4gKGludCkgJHJlbCk7DQoJCX0NCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9kZXZlbG9wZXInLCAnZCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnVzZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2QuZ2l0aHViX2lkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2plY3QnLCAncCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnByb2plY3QnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3AuaWQnKSAuICcpJyk7DQoJCS8vIHNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCSRudW1iZXIgPSAkZGItPmdldE51bVJvd3MoKTsNCgkJaWYgKCRudW1iZXIgPT0gMSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgaXRlbQ0KCQkJJGl0ZW0gPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCS8vIHNldCB0aGUgbmFtZQ0KCQkJaWYgKGlzc2V0KHNlbGY6OiRyZWxhdGlvbnNoaXBOYW1lWyRpdGVtLT5yZWxhdGlvbnNoaXBdKSkNCgkJCXsNCgkJCQkkaXRlbS0+cmVsYXRpb25zaGlwX25hbWUgPSBzZWxmOjokcmVsYXRpb25zaGlwTmFtZVskaXRlbS0+cmVsYXRpb25zaGlwXTsNCgkJCX0NCgkJCXJldHVybiAkaXRlbTsNCgkJfQ0KCQllbHNlaWYgKCRudW1iZXIgPiAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBpdGVtcw0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRuciA9PiAmJGl0ZW0pDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSBuYW1lDQoJCQkJaWYgKGlzc2V0KHNlbGY6OiRyZWxhdGlvbnNoaXBOYW1lWyRpdGVtLT5yZWxhdGlvbnNoaXBdKSkNCgkJCQl7DQoJCQkJCSRpdGVtLT5yZWxhdGlvbnNoaXBfbmFtZSA9IHNlbGY6OiRyZWxhdGlvbnNoaXBOYW1lWyRpdGVtLT5yZWxhdGlvbnNoaXBdOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkaXRlbXM7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VG9rZW4oJiR0b2tlbnMpDQoJew0KCQkkdG9rZW5zID0gYXJyYXlfdmFsdWVzKCR0b2tlbnMpOw0KCQkkdG9rZW4gPSBhcnJheV9zaGlmdCgkdG9rZW5zKTsNCgkJYXJyYXlfcHVzaCgkdG9rZW5zLCAkdG9rZW4pOw0KCQlyZXR1cm4gJHRva2VuWyd0b2tlbiddOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvamVjdHMoJGlkID0gbnVsbCwgJGRiID0gbnVsbCwgJGp1c3RUb2tlbnMgPSBmYWxzZSwgJHBsYWNlaG9sZGVycyA9IGZhbHNlKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJLy8gU2VsZWN0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBmaWVsZA0KCQlpZiAoJHBsYWNlaG9sZGVycykNCgkJew0KCQkJJHNlbGVjdGlvbiA9IHNlbGY6OmdldFNlbGVjdGlvbigncHJvamVjdCcsICdbcHJvamVjdF8nLCAnXScpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHNlbGVjdGlvbiA9IHNlbGY6OmdldFNlbGVjdGlvbigncHJvamVjdCcpOw0KCQl9DQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5X2tleXMoJHNlbGVjdGlvbiksIGFycmF5X3ZhbHVlcygkc2VsZWN0aW9uKQ0KCQkJKQ0KCQkpOw0KCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV9wcm9qZWN0IEFTIGEnKTsNCgkJaWYgKGlzX251bWVyaWMoJGlkKSAmJiAkaWQgPiAwKQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJyAuIChpbnQpICRpZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkkbnVtYmVyID0gJGRiLT5nZXROdW1Sb3dzKCk7DQoJCS8vIGdldCBkZXRhaWxzIG9mIG9uZSBwcm9qZWN0IGFzIHBsYWNlaG9sZGVycw0KCQlpZiAoJHBsYWNlaG9sZGVycyAmJiAkbnVtYmVyID09IDEpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRBc3NvYygpOw0KCQl9DQoJCWVsc2VpZiAoISRwbGFjZWhvbGRlcnMgJiYgJG51bWJlciA9PSAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBpdGVtDQoJCQkkaXRlbSA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJLy8gR2V0IHRoZSBtZWRpdW0gZW5jcnlwdGlvbi4NCgkJCSRtZWRpdW1rZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnbWVkaXVtJyk7DQoJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJJG1lZGl1bSA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRtZWRpdW1rZXkpOw0KCQkJaWYgKCFlbXB0eSgkaXRlbS0+dG9rZW5zKSAmJiAkbWVkaXVta2V5ICYmICFpc19udW1lcmljKCRpdGVtLT50b2tlbnMpICYmICRpdGVtLT50b2tlbnMgPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaXRlbS0+dG9rZW5zLCB0cnVlKSkpDQoJCQl7DQoJCQkJLy8gbWVkaXVtIGRlY3J5cHQgZGF0YSB0b2tlbnMuDQoJCQkJJGl0ZW0tPnRva2VucyA9IHJ0cmltKCRtZWRpdW0tPmRlY3J5cHRTdHJpbmcoJGl0ZW0tPnRva2VucyksICJcMCIpOw0KCQkJfQ0KCQkJaWYgKCFlbXB0eSgkaXRlbS0+dG9rZW5zKSkNCgkJCXsNCgkJCQkvLyBDb252ZXJ0IHRoZSB0b2tlbnMgZmllbGQgdG8gYW4gYXJyYXkuDQoJCQkJJGl0ZW0tPnRva2VucyA9IGpzb25fZGVjb2RlKCRpdGVtLT50b2tlbnMsIHRydWUpOw0KCQkJfQ0KCQkJLy8gcmV0dXJuIGp1c3QgdGhlIHRva2Vucw0KCQkJaWYgKCRqdXN0VG9rZW5zKQ0KCQkJew0KCQkJCXJldHVybiBhcnJheV92YWx1ZXMoJGl0ZW0tPnRva2Vucyk7DQoJCQl9DQoJCQkvLyByZXR1cm4gdGhlIHByb2plY3QNCgkJCXJldHVybiAkaXRlbTsNCgkJfQ0KCQllbHNlaWYgKCEkcGxhY2Vob2xkZXJzICYmICRudW1iZXIgPiAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBpdGVtcw0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJLy8gR2V0IHRoZSBtZWRpdW0gZW5jcnlwdGlvbi4NCgkJCSRtZWRpdW1rZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnbWVkaXVtJyk7DQoJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJJG1lZGl1bSA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRtZWRpdW1rZXkpOw0KCQkJZm9yZWFjaCgkaXRlbXMgYXMgJG5yID0+ICYkaXRlbSkNCgkJCXsNCgkJCQlpZiAoIWVtcHR5KCRpdGVtLT50b2tlbnMpICYmICRtZWRpdW1rZXkgJiYgIWlzX251bWVyaWMoJGl0ZW0tPnRva2VucykgJiYgJGl0ZW0tPnRva2VucyA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRpdGVtLT50b2tlbnMsIHRydWUpKSkNCgkJCQl7DQoJCQkJCS8vIG1lZGl1bSBkZWNyeXB0IGRhdGEgdG9rZW5zLg0KCQkJCQkkaXRlbS0+dG9rZW5zID0gcnRyaW0oJG1lZGl1bS0+ZGVjcnlwdFN0cmluZygkaXRlbS0+dG9rZW5zKSwgIlwwIik7DQoJCQkJfQ0KCQkJCWlmICghZW1wdHkoJGl0ZW0tPnRva2VucykpDQoJCQkJew0KCQkJCQkvLyBDb252ZXJ0IHRoZSB0b2tlbnMgZmllbGQgdG8gYW4gYXJyYXkuDQoJCQkJCSRpdGVtLT50b2tlbnMgPSBqc29uX2RlY29kZSgkaXRlbS0+dG9rZW5zLCB0cnVlKTsNCgkJCQl9DQoJCQkJLy8gcmV0dXJuIGp1c3QgdGhlIHRva2Vucw0KCQkJCWlmICgkanVzdFRva2VucykNCgkJCQl7DQoJCQkJCSRpdGVtID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJCQkkaXRlbS0+dG9rZW5zID0gYXJyYXlfdmFsdWVzKCRpdGVtLT50b2tlbnMpOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkaXRlbXM7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tFbWFpbEFuZERvbWFpbigkX2VtYWlsKQ0KCXsNCgkJJGV4cCA9ICIvXiguKilAKC4qKSQvIjsNCgkJcHJlZ19tYXRjaCgkZXhwLCAkX2VtYWlsLCAkbWF0Y2hlcyk7DQoNCgkJaWYgKCFlbXB0eSgkbWF0Y2hlc1sxXSkgJiYgKCFmaWx0ZXJfdmFyKCRfZW1haWwsIEZJTFRFUl9WQUxJREFURV9FTUFJTCkpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQkvLyBjaGVjayBpZiBpdCBoYXMgdGhlIHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbQ0KCQlpZiAoc2VsZjo6c3RycG9zYSgkX2VtYWlsLCBzZWxmOjokbm90RW1haWwpICE9PSBmYWxzZSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJcmV0dXJuIChjaGVja2Ruc3JyKCRtYXRjaGVzWzJdLCAnTVgnKSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdHJwb3NhKCRoYXlzdGFjaywgJG5lZWRsZXMgPSBhcnJheSgpLCAkb2Zmc2V0ID0gMCkNCgl7DQoJCSRjaHIgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRuZWVkbGVzIGFzICRuZWVkbGUpDQoJCXsNCgkJCSRyZXMgPSBzdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlLCAkb2Zmc2V0KTsNCgkJCWlmICgkcmVzICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkY2hyWyRuZWVkbGVdID0gJHJlczsNCgkJCX0NCgkJfQ0KDQoJCWlmKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY2hyKSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiBtaW4oJGNocik7DQoJfQ0KW0NVU1RPTUNPREU9Z2V0R2l0aHViUmVwb0ZpbGVMaXN0XQ0KW0NVU1RPTUNPREU9bG9hZE1lc3NhZ2VzXQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KW0NVU1RPTUNPREU9bG9ja2VyXQ0KW0NVU1RPTUNPREU9dXJsRXhpc3RzXQ0KW0NVU1RPTUNPREU9YmFzZVNpeHR5Rm91clVSTF0NCltDVVNUT01DT0RFPWN1cmxXb3JrZXJIZWxwZXJdDQpbQ1VTVE9NQ09ERT1nZXRDb21wYW55RGV0YWlsc10NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1zZXRTdWJmb3JtVGFibGVd', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'gitHubbing', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlcmAgKA0KCWB1c2VyYCBJTlQoNjUpIHVuc2lnbmVkIE5PVCBOVUxMIERFRkFVTFQgMCwNCglgcHJvamVjdGAgSU5UKDEwKSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUIDAsDQoJYHJlbGF0aW9uc2hpcGAgSU5UKDEwKSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUIDAsDQoJYHN0YXR1c2AgSU5UKDEwKSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUIDEsDQoJS0VZICBgaWR4X3VzZXJgIChgdXNlcmApLA0KCUtFWSAgYGlkeF9wcm9qZWN0YCAoYHByb2plY3RgKSwNCglLRVkgIGBpZHhfcmVsYXRpb25zaGlwYCAoYHJlbGF0aW9uc2hpcGApLA0KCUtFWSAgYGlkeF9zdGF0dXNgIChgc3RhdHVzYCkNCikgRU5HSU5FPU15SVNBTSBBVVRPX0lOQ1JFTUVOVD0wIERFRkFVTFQgQ0hBUlNFVD11dGY4Ow0KDQpDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3NlbmRgICgNCglgdXNlcmAgSU5UKDY1KSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUIDAsDQoJYG1lc3NhZ2VgIElOVCgxMCkgdW5zaWduZWQgTk9UIE5VTEwgREVGQVVMVCAwLA0KCUtFWSAgYGlkeF91c2VyYCAoYHVzZXJgKSwNCglLRVkgIGBpZHhfbWVzc2FnZWAgKGBtZXNzYWdlYCkNCikgRU5HSU5FPU15SVNBTSBBVVRPX0lOQ1JFTUVOVD0wIERFRkFVTFQgQ0hBUlNFVD11dGY4Ow==', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlcmA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3NlbmRgOw==', 'gitHubbing', '.git', '', '', 1, '', 'https://www.gnu.org/', '', 'FgU8dnv4esXb4Y0Pod03W/PVxU/lV2IK9pwkJK3hDVo=', '', '', 1, 148, '', 1, 64),
(20, 1, '', 1, '', 1, '', '', '', 1, '', 1, '', '', '', '', '', '', 1, '', 1, '', 1, '', '', '', '', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.2.6', 'Copyright (C) 2015. All Rights Reserved', '2016-03-07 02:59:34', 1, 'F4Hy7Xd96SXDPdxXM6kP3JBujyRs+yFWvq8rjqWAASY=', 'AJ9USWMt2/6+tbNPYO+ugWnRfRWRjK5XB8V0gq0Kq3I=', '', '+7JrFIHK+uE62eET7M02iOMjaFYQ40ItHM8t7bUPCN0=', 'LnZkbS1iYWRnZSB7DQogICAgLW1vei1ib3JkZXItYm90dG9tLWNvbG9yczogbm9uZTsNCiAgICAtbW96LWJvcmRlci1sZWZ0LWNvbG9yczogbm9uZTsNCiAgICAtbW96LWJvcmRlci1yaWdodC1jb2xvcnM6IG5vbmU7DQogICAgLW1vei1ib3JkZXItdG9wLWNvbG9yczogbm9uZTsNCiAgICBiYWNrZ3JvdW5kOiAjMDA5ZGQ4IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMGI0ZjUsICMwMDhkYzUpIHJlcGVhdCBzY3JvbGwgMCAwIGJvcmRlci1ib3g7DQogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMikgcmdiYSgwLCAwLCAwLCAwLjIpIHJnYmEoMCwgMCwgMCwgMC4zKTsNCiAgICBib3JkZXItaW1hZ2U6IG5vbmU7DQogICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICAgIGJvcmRlci1zdHlsZTogc29saWQ7DQogICAgYm9yZGVyLXdpZHRoOiAxcHg7DQogICAgY29sb3I6ICNmZmY7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICBmb250LXdlaWdodDogNzAwOw0KICAgIGxpbmUtaGVpZ2h0OiAxNHB4Ow0KICAgIHBhZGRpbmc6IDAgNXB4Ow0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOw0KICAgIHRleHQtdHJhbnNmb3JtOiBub25lOw0KICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQp9DQoNCi52ZG0tdGV4dC1kYW5nZXIgew0KICAgIGNvbG9yOiAjZDMyYzQ2Ow0KfQ0KDQoudmRtLWRhbmdlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmM0NjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZWU0NjVhLCAjYzExYTM5KTsNCn0NCi52ZG0td2FybmluZyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5YTEyNDsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZmJiNDUwLCAjZjg5NDA2KTsNCn0NCi52ZG0tc3VjY2VzcyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzgyYmI0MjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjOWZkMjU2LCAjNmZhYzM0KTsNCn0=', '', '', 1, '', 'Job Tracking System', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-job-tracking-system', 'KN+kAEoH9uOH3HwtlSviUI4XYyRQ+MlhzXeHP8OqsMYeF3xrBw4uQhF+EsiBOYbCihsiM3vM7fjR6tTejSrPig==', '', 'd742c3eb-c2fe-4796-ab8e-5e37b9748c4d', 'images/vdm/JT500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2021-08-05 09:37:35', '', 'Job Tracking', 'Jobtracking', '', 4, 'CQlzZWxmOjpsb2FkVXBkYXRlckFqYXgoJGRvY3VtZW50KTsNCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw==', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSogCXNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gbm90aW5nIHNldCBmb3Igbm93DQoJfQ0KDQoJLyoqDQoJKiAJTG9hZCB0aGUgYXV0byB1cGRhdGVyDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkVXBkYXRlckFqYXgoJGRvY3VtZW50KQ0KCXsNCgkJJGRvY3VtZW50LT5hZGRTY3JpcHREZWNsYXJhdGlvbigiDQoJCQlqUXVlcnkod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCXJ1blF1ZXVlKDMpOw0KCQkJfSk7DQoJCQkNCgkJCWZ1bmN0aW9uIHJ1blF1ZXVlKGZyb212aWV3KXsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImFkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9YWpheC51cGRhdGluZyZmb3JtYXQ9anNvbic7DQoJCQkJaWYoZnJvbXZpZXcgPiAwKXsNCgkJCQkJdmFyIHJlcXVlc3QgPSAndG9rZW49Ii5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuIiZmcm9tdmlldz0nK2Zyb212aWV3Ow0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnR0VUJywNCgkJCQkJdXJsOiBnZXRVcmwsDQoJCQkJCWRhdGFUeXBlOiAnanNvbnAnLA0KCQkJCQlkYXRhOiByZXF1ZXN0LA0KCQkJCQlqc29ucDogJ2NhbGxiYWNrJw0KCQkJCX0pOw0KCQkJfQ0KCQkiKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjbGllbnREZXRhaWxzID0gYXJyYXkoKTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENsaWVudERldGFpbHMoJGlkLCAkdHlwZSA9ICdjbGllbnQnLCAkbWV0aG9kID0gJ29iamVjdCcpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRjbGllbnREZXRhaWxzWyRpZC4kbWV0aG9kXSkpDQoJCXsNCgkJCWlmICgkdHlwZSAhPSAnY2xpZW50JykNCgkJCXsNCgkJCQkkaWQgPSBzZWxmOjpnZXRWYXIoKHN0cmluZykgJHR5cGUsIChpbnQpICRpZCwgJ2lkJywgJ2NsaWVudCcpOw0KCQkJfQ0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkNCgkJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJCXsNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQkJYXJyYXkoJ2EubmFtZScsICdhLmNvbnRhY3RfcGVyc29uJywnYS5lbWFpbCcsJ2EucGhvbmUnLCdhLm1vYmlsZV9waG9uZScsJ2EuZmF4JywnYS5wb3N0YWwnLCdhLnBvc3RhbGNvZGUnLCdhLmNpdHknLCdhLnN0cmVldCcsJ2Eud2Vic2l0ZScsJ2EuZGlzY291bnQnKSwgDQoJCQkJCWFycmF5KCdbY2xpZW50X25hbWVdJywnW2NsaWVudF9jb250YWN0X3BlcnNvbl0nLCdbY2xpZW50X2VtYWlsXScsJ1tjbGllbnRfcGhvbmVdJywnW2NsaWVudF9tb2JpbGVdJywnW2NsaWVudF9mYXhdJywnW2NsaWVudF9wb3N0YWxdJywnW2NsaWVudF9wb3N0YWxjb2RlXScsJ1tjbGllbnRfY2l0eV0nLCdbY2xpZW50X3N0cmVldF0nLCdbY2xpZW50X3dlYnNpdGVdJywnW2Rpc2NvdW50X2lkXScpKSk7DQoJCQkJCQ0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdyLm5hbWUnLCAnYy5uYW1lJywnZC5hbW91bnQnLCdkLnR5cGUnKSwgYXJyYXkoJ1tjbGllbnRfcmVnaW9uX25hbWVdJywnW2NsaWVudF9jb3VudHJ5X25hbWVdJywnW2Rpc2NvdW50X2Ftb3VudF0nLCdbZGlzY291bnRfdHlwZV0nKSkpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+c2VsZWN0KCdhLionKTsNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnci5uYW1lJywgJ2MubmFtZScsJ2QuYW1vdW50JywnZC50eXBlJyksIGFycmF5KCdyZWdpb25fbmFtZScsJ2NvdW50cnlfbmFtZScsJ2Rpc2NvdW50X2Ftb3VudCcsJ2Rpc2NvdW50X3R5cGUnKSkpOw0KCQkJfQ0KDQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY2xpZW50IHRhYmxlDQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jbGllbnQnLCAnYScpKTsNCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcmVnaW9uJywgJ3InKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3IuaWQnKSAuICcpJyk7DQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnYycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdW50cnknKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2MuaWQnKSAuICcpJyk7DQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2Rpc2NvdW50JywgJ2QnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5kaXNjb3VudCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnZC5pZCcpIC4gJyknKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQkJLy8gbG9hZCB0aGUgcXVlcnkNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGNsaWVudERldGFpbHNbJGlkLiRtZXRob2RdID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiRjbGllbnREZXRhaWxzWyRpZC4kbWV0aG9kXSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICghaXNzZXQoc2VsZjo6JGNsaWVudERldGFpbHNbJGlkLiRtZXRob2RdKSkNCgkJew0KCQkJc2VsZjo6JGNsaWVudERldGFpbHNbJGlkLiRtZXRob2RdID0gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRjbGllbnREZXRhaWxzWyRpZC4kbWV0aG9kXTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRqb2JPcmRlcnNEZXRhaWxzID0gYXJyYXkoKTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEpvYk9yZGVyRGV0YWlscygkaWQsICR0eXBlLCAkbWV0aG9kID0gJ29iamVjdCcpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRqb2JPcmRlcnNEZXRhaWxzWyRpZC4kbWV0aG9kXSkpDQoJCXsNCgkJCWlmICgkaWQgPiAwICkNCgkJCXsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJDQoJCQkJLy8gU2VsZWN0IHNvbWUgZmllbGRzDQoJCQkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJCQl7DQoJCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCQkJYXJyYXkoJ2Euam9ibnVtYmVyJywnYS5vcmRlcl9kYXRlJywnYS5kZWxpdmVyeV9kYXRlJywnYS5jcmVhdGVkX2J5JywnYS5jaGVja19saXN0JyksIA0KCQkJCQkJYXJyYXkoJ1tqb2JudW1iZXJdJywnW29yZGVyX2RhdGVdJywnW2RlbGl2ZXJ5X2RhdGVdJywnY3JlYXRlZF9ieScsJ2NoZWNrX2xpc3QnKSkpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoJCQkJDQoJCQkJfQ0KCQkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9qb2Jfb3JkZXIgdGFibGUNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9qb2Jfb3JkZXInLCAnYScpKTsNCgkJCQlpZiAoJHR5cGUgPT0gJ2pvYl9vcmRlcicgfHwgJHR5cGUgPT0gJ2pvYl9vcmRlcnMnKQ0KCQkJCXsNCgkJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuIChpbnQpICRpZCk7DQoJCQkJfQ0KCQkJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kKQ0KCQkJCQl7DQoJCQkJCQkkZGV0YWlscyA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJewkJDQoJCQkJCQkkZGV0YWlscyA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQkJCQlmb3JlYWNoICgkZGV0YWlscyBhcyAka2V5ID0+ICYkdmFsdWUpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKCRrZXkgPT0gJ2NyZWF0ZWRfYnknICYmICR2YWx1ZSA+IDApDQoJCQkJCQkJew0KCQkJCQkJCQkkc3RhZmYgPSBGYWN0b3J5OjpnZXRVc2VyKCR2YWx1ZSk7DQoJCQkJCQkJCS8vIHNldCBzdGFmZiBkZXRhaWxzDQoJCQkJCQkJCSRkZXRhaWxzWydbc3RhZmZfbmFtZV0nXSA9ICRzdGFmZi0+bmFtZTsNCgkJCQkJCQkJJGRldGFpbHNbJ1tzdGFmZl9lbWFpbF0nXSA9ICRzdGFmZi0+ZW1haWw7DQoJCQkJCQkJfQ0KCQkJCQkJCWlmICgnMDAwMC0wMC0wMCAwMDowMDowMCcgIT0gJHZhbHVlICYmIHN0cnBvcygka2V5LCAnX2RhdGUnKSAhPT0gZmFsc2UpDQoJCQkJCQkJew0KCQkJCQkJCQkkdmFsdWUgPSBzZWxmOjpmYW5jeURhdGUoJHZhbHVlKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgnMDAwMC0wMC0wMCAwMDowMDowMCcgPT0gJHZhbHVlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHZhbHVlID0gJzAwMDAtMDAtMDAnOw0KCQkJCQkJCX0NCgkJCQkJCQlpZiAoJGtleSA9PSAnY2hlY2tfbGlzdCcpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBidWlsZCBjaGVjayBsaXN0DQoJCQkJCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkdmFsdWUpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkZmllbGRzID0ganNvbl9kZWNvZGUoJHZhbHVlLHRydWUpOw0KCQkJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRmaWVsZHMpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWZvcmVhY2goJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQlpZiAoIWlzc2V0KCRkZXRhaWxzWyRmaWVsZF0pKQ0KCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkkZGV0YWlsc1snWycuJGZpZWxkLiddJ10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRmaWVsZCwgJ1d3Jyk7DQoJCQkJCQkJCQkJCX0JDQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJCXVuc2V0KCRkZXRhaWxzWyRrZXldKTsJCQkJCQkNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJdW5zZXQoJGRldGFpbHNbJ2NyZWF0ZWRfYnknXSk7DQoJCQkJCXNlbGY6OiRqb2JPcmRlcnNEZXRhaWxzWyRpZC4kbWV0aG9kXSA9ICRkZXRhaWxzOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRqb2JPcmRlcnNEZXRhaWxzWyRpZC4kbWV0aG9kXSkpDQoJCXsNCgkJCXNlbGY6OiRqb2JPcmRlcnNEZXRhaWxzWyRpZC4kbWV0aG9kXSA9IGZhbHNlOw0KCQl9DQoJCXJldHVybiBzZWxmOjokam9iT3JkZXJzRGV0YWlsc1skaWQuJG1ldGhvZF07DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRKb2JPcmRlcigkaWQsICRkYiA9IG51bGwsICR0eXBlID0gJ2pvYl9zdGF0dXMnLCAkbWV0aG9kID0gJ2FycmF5JykNCgl7DQoJCWlmICghJGRiKQ0KCQl7DQoJCQkvLyBnZXQgYSBkYXRhYmFzZSBjb25uZWN0aW9uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJfQ0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQ0KCQkvLyBTZWxlY3QgYWxsIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9qb2Jfb3JkZXIgdGFibGUNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX29yZGVyJywgJ2EnKSk7DQoJCWlmICgkdHlwZSA9PSAnam9iX3N0YXR1cycpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQl9DQoJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJaWYgKCdvYmplY3QnID09ICRtZXRob2QpDQoJCQl7DQoJCQkJcmV0dXJuICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQkJZWxzZWlmICgnYXJyYXknID09ICRtZXRob2QpDQoJCQl7DQoJCQkJcmV0dXJuICRkYi0+bG9hZEFzc29jKCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICRkYi0+bG9hZFJvdygpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5lZWRlZEl0ZW0oJGpvYl9vcmRlciwgJGl0ZW0sICRkYiA9IG51bGwpDQoJew0KCQlpZiAoJGpvYl9vcmRlciA+IDApDQoJCXsNCgkJCWlmICghJGRiKQ0KCQkJew0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJfQ0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdChhcnJheSgnaWQnLCdpdGVtJywnbmVlZGVkJywnb3JkZXJlZCcsJ2FsbG9jYXRlZCcpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX25lZWRlZF9pdGVtJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnam9iX29yZGVyJykgLiAnID0gJy4gKGludCkgJGpvYl9vcmRlcik7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpdGVtJykgLiAnICA9ICcgLiAoaW50KSAkaXRlbSk7DQoJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyBkYXRhIHJldHVybmVkDQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJcmV0dXJuICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5lZWRlZEl0ZW1zKCRqb2Jfb3JkZXIsICR0eXBlID0gMCkNCgl7DQoJCWlmICgkam9iX29yZGVyID4gMCkNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KGFycmF5KCdpZCcsJ2l0ZW0nLCduZWVkZWQnLCdvcmRlcmVkJywnYWxsb2NhdGVkJykpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbmVlZGVkX2l0ZW0nKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdqb2Jfb3JkZXInKSAuICcgPSAnLiAoaW50KSAkam9iX29yZGVyKTsNCgkJCS8vIGRlZmF1bHQgaXMgdG8gZ2V0IGFsbCAoMCkNCgkJCWlmICgxID09ICR0eXBlKSAvLyByZWFkeQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2FsbG9jYXRlZCA9IG5lZWRlZCcpOw0KCQkJfQ0KCQkJZWxzZWlmICgyID09ICR0eXBlKSAvLyBub3QgcmVhZHkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhbGxvY2F0ZWQgIT0gbmVlZGVkJyk7DQoJCQl9DQoJCQllbHNlaWYgKDYgPT0gJHR5cGUpIC8vIGhhcyBwcm9ibGVtcw0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ3Byb2JsZW0gPSAwJyk7DQoJCQl9DQoJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyBkYXRhIHJldHVybmVkDQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJaWYgKDMgPT0gJHR5cGUgfHwgNiA9PSAkdHlwZSkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlyZXR1cm4gJGRiLT5sb2FkT2JqZWN0TGlzdCgnaXRlbScpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc1Byb2JsZW0oJGpvYl9vcmRlcikNCgl7DQoJCXJldHVybiBzZWxmOjpnZXROZWVkZWRJdGVtcygkam9iX29yZGVyLCA2KTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyAkbmVlZGVkSXRlbXMgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJG5lZWRlZFF0eSA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZU5lZWRlZEl0ZW1zKCRqb2Jfb3JkZXIsICRwcm9kdWN0cyA9IG51bGwsICRqb2Jfc3RhdHVzID0gbnVsbCwgJHVzZXJJZCA9IG51bGwsICR0b2RheURhdGUgPSBudWxsLCAkZGIgPSBudWxsKQ0KCXsNCgkJaWYgKCRqb2Jfb3JkZXIgPiAwKQ0KCQl7DQoJCQkvLyBnZXQgam9iIHN0YXR1cw0KCQkJaWYgKCEkam9iX3N0YXR1cykNCgkJCXsNCgkJCQkkam9iX3N0YXR1cyA9IHNlbGY6OmdldFZhcignam9iX29yZGVyJywgJGpvYl9vcmRlciwgJ2lkJywgJ2pvYl9zdGF0dXMnKTsJDQoJCQl9DQoJCQkvLyBjb252ZXJ0IHByb2R1Y3MgdG8gYXJyYXkNCgkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkam9iX3N0YXR1cykpDQoJCQl7DQoJCQkJJGpvYl9zdGF0dXMgPSBqc29uX2RlY29kZSgkam9iX3N0YXR1cywgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBnZXQgYWN0aXZhdGlvbiBzdGF0dXMNCgkJCSRhY3RpdmF0aW5nX29yZGVyX3N0YXR1cyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdvcmRlcl9zdGF0dXMnLCBudWxsKTsNCgkJCS8vIG9ubHkgY29udGludWUgaWYgam9iIHN0YXR1cyBoYXMgb3JkZXJpbmcgc3RhdHVzIGFjdGl2ZSwgb3IgYWxyZWFkeSBoYXMgbmVlZGVkIGl0ZW1zIHNldC4NCgkJCWlmICgoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGpvYl9zdGF0dXMpICYmIGluX2FycmF5KCRhY3RpdmF0aW5nX29yZGVyX3N0YXR1cywgJGpvYl9zdGF0dXMpKSB8fCBzZWxmOjpnZXROZWVkZWRJdGVtcygkam9iX29yZGVyLCAzKSkNCgkJCXsNCgkJCQkvLyBjaGVja2VyDQoJCQkJJGNoZWNrZXIgPSB0cnVlOw0KCQkJCXNlbGY6OiRuZWVkZWRJdGVtcyA9IGFycmF5KCk7DQoJCQkJc2VsZjo6JG5lZWRlZFF0eSA9IGFycmF5KCk7DQoJCQkJJHRhYmxlID0gJ25lZWRlZF9pdGVtJzsNCgkJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJCWlmICghJGRiKQ0KCQkJCXsNCgkJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJfQ0KCQkJCS8vIGdldCBwcm9kdWN0cw0KCQkJCWlmICghJHByb2R1Y3RzKQ0KCQkJCXsNCgkJCQkJJHByb2R1Y3RzID0gc2VsZjo6Z2V0VmFyKCdqb2Jfb3JkZXInLCAkam9iX29yZGVyLCAnaWQnLCAncHJvZHVjdCcpOwkNCgkJCQl9DQoJCQkJLy8gY29udmVydCBwcm9kdWNzIHRvIGFycmF5DQoJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0cykpDQoJCQkJew0KCQkJCQkkcHJvZHVjdHMgPSBqc29uX2RlY29kZSgkcHJvZHVjdHMsIHRydWUpOw0KCQkJCX0NCgkJCQkvLyBjb250aW51ZSBvbmx5IGlmIHByb2R1Y3RzIGFyZSBmb3VuZA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdHMpICYmIGlzc2V0KCRwcm9kdWN0c1snaXRlbSddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdHNbJ2l0ZW0nXSkpDQoJCQkJew0KCQkJCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgdXNlciBJRA0KCQkJCQlpZighJHVzZXJJZCkNCgkJCQkJew0KCQkJCQkJJHVzZXJJZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkJCX0NCgkJCQkJLy8gYWxzbyBnZXQgdG9kYXlzIGRhdGUgaWYgbm90IGZvdW5kDQoJCQkJCWlmICghJHRvZGF5RGF0ZSkNCgkJCQkJew0KCQkJCQkJJHRvZGF5RGF0ZSA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9TcWwoKTsNCgkJCQkJfQ0KCQkJCQkvLyBub3cgbG9vcCBwcm9kdWN0cyBhbmQgc2VlIGlmIHRoZXkgYXJlIGFsbCByZWFkeSBzZXQNCgkJCQkJZm9yZWFjaCAoJHByb2R1Y3RzWydpdGVtJ10gYXMgJG5yID0+ICRpdGVtSWQpDQoJCQkJCXsNCgkJCQkJCWlmICgkaXRlbUlkID4gMSkgLy8gVE9ETyBvd24gcHJvZHVjdCBoYXMgSUQgMQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRuZWVkZWRRdHlbJGl0ZW1JZF1bXSA9IChpbnQpIChpc3NldCgkcHJvZHVjdHNbJ3F0eSddWyRucl0pKSA/ICRwcm9kdWN0c1sncXR5J11bJG5yXSA6IDA7DQoJCQkJCQkJaWYgKCFzZWxmOjpzZXROZWVkZWRJdGVtKCRqb2Jfb3JkZXIsICRpdGVtSWQsIHNlbGY6OiRuZWVkZWRRdHlbJGl0ZW1JZF0sICR1c2VySWQsICR0b2RheURhdGUsICRkYiwgJHRhYmxlKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRjaGVja2VyID0gZmFsc2U7DQoJCQkJCQkJfQ0KCQkJCQkJCXNlbGY6OiRuZWVkZWRJdGVtc1tdID0gJGl0ZW1JZDsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBjaGVjayBpZiBuZWVkZWQgaXRlbXMgd2VyZSBmb3VuZA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokbmVlZGVkSXRlbXMpKQ0KCQkJCXsNCgkJCQkJLy8gcmVtb3ZlIGFsbCB0aGF0IGlzIG5vdCBpbiB0aGlzIGFycmF5DQoJCQkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkJCSAgICAkZGItPnF1b3RlTmFtZSgnaXRlbScpIC4gJyBOT1QgSU4gKCcgLiBpbXBsb2RlKCcsJywgc2VsZjo6JG5lZWRlZEl0ZW1zKSAuICcpJywNCgkJCQkJICAgICRkYi0+cXVvdGVOYW1lKCdqb2Jfb3JkZXInKSAuICcgPSAnIC4gKGludCkgJGpvYl9vcmRlcg0KCQkJCQkpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBubyBuZWVkZWQgaXRlbXMgZm9yIHRoaXMgam9iLCBzbyBjbGVhciBhbGwgaXRlbXMNCgkJCQkJJGNvbmRpdGlvbnMgPSBhcnJheSgNCgkJCQkJICAgICRkYi0+cXVvdGVOYW1lKCdqb2Jfb3JkZXInKSAuICcgPSAnIC4gKGludCkgJGpvYl9vcmRlcg0KCQkJCQkpOw0KCQkJCX0NCgkJCQkvLyBkZWxldGUgYWxsIG5vdCBuZWVkZWQNCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCSRxdWVyeS0+ZGVsZXRlKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJy4kdGFibGUpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRjb25kaXRpb25zKTsNCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJLy8gcmV0dXJuIHRoZSBjaGVja2VyDQoJCQkJcmV0dXJuICRjaGVja2VyOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXROZWVkZWRJdGVtKCYkam9iX29yZGVyLCAmJGl0ZW0sICYkbmVlZGVkLCAmJHVzZXJJZCwgJiR0b2RheURhdGUsICYkZGIsICYkdGFibGUpDQoJew0KCQkvLyBhbHdheXMgZ2V0IHN1cHBsaWVyDQoJCSRzdXBwbGllciA9IHNlbGY6OmdldFZhcignaXRlbScsICRpdGVtLCAnaWQnLCAnc3VwcGxpZXInKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2lkJywndmVyc2lvbicsJ25lZWRlZCcsJ3N1cHBsaWVyJykpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdqb2Jfb3JkZXInKSAuICcgPSAnLiAoaW50KSAkam9iX29yZGVyKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaXRlbScpIC4gJyA9ICcuIChpbnQpICRpdGVtKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJLy8gY2hlY2sgaWYgZm91bmQNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkvLyB1cGRhdGUgdGhlIHJlY29yZA0KCQkJJHJlY29yZCA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQlpZiAoJG5lZWRlZCAhPSAkcmVjb3JkWyduZWVkZWQnXSB8fCAkc3VwcGxpZXIgIT0gJHJlY29yZFsnc3VwcGxpZXInXSkNCgkJCXsNCgkJCQkvLyBjcmVhdGUgbmV3IG9iamVjdA0KCQkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJG9iamVjdC0+aWQgPSAoaW50KSAkcmVjb3JkWydpZCddOw0KCQkJCSRvYmplY3QtPm5lZWRlZCA9IChpbnQpIGFycmF5X3N1bSgkbmVlZGVkKTsNCgkJCQkkb2JqZWN0LT5zdXBwbGllciA9IChpbnQpICRzdXBwbGllcjsNCgkJCQkkb2JqZWN0LT52ZXJzaW9uID0gKGludCkgJHJlY29yZFsndmVyc2lvbiddICsgMTsNCgkJCQkkb2JqZWN0LT5tb2RpZmllZF9ieSA9IChpbnQpICR1c2VySWQ7DQoJCQkJJG9iamVjdC0+bW9kaWZpZWQgPSAkdG9kYXlEYXRlOw0KCQkJCS8vIHVwZGF0ZSBub3cNCgkJCQlyZXR1cm4gJGRiLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSwgJG9iamVjdCwgJ2lkJyk7DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvLyBhZGQgbmV3IHJlY29yZA0KCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KCQkkb2JqZWN0LT5pdGVtID0gKGludCkgJGl0ZW07DQoJCSRvYmplY3QtPmpvYl9vcmRlciA9IChpbnQpICRqb2Jfb3JkZXI7DQoJCSRvYmplY3QtPm5lZWRlZCA9IChpbnQpIGFycmF5X3N1bSgkbmVlZGVkKTsNCgkJJG9iamVjdC0+c3VwcGxpZXIgPSAoaW50KSAkc3VwcGxpZXI7DQoJCSRvYmplY3QtPmNyZWF0ZWRfYnkgPSAoaW50KSAkdXNlcklkOw0KCQkkb2JqZWN0LT5jcmVhdGVkID0gJHRvZGF5RGF0ZTsNCgkJJG9iamVjdC0+cHVibGlzaGVkID0gMTsNCgkJJG9iamVjdC0+dmVyc2lvbiA9IDE7DQoJCS8vIGFkZCBub3cNCgkJJGRvbmUgPSAkZGItPmluc2VydE9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlLCAkb2JqZWN0KTsNCgkJaWYgKCRkb25lKQ0KCQl7DQoJCQkkYUlkID0gJGRiLT5pbnNlcnRpZCgpOw0KCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQlyZXR1cm4gc2VsZjo6c2V0QXNzZXQoJGFJZCwkdGFibGUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENoZWNrTGlzdCgpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJyonKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX3N0YXR1cycpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykuICcgPSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJJG9wdGlvbnMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+c3dpdGNoKSkNCgkJCQl7DQoJCQkJCSRzd2l0Y2hlcyA9IGpzb25fZGVjb2RlKCRpdGVtLT5zd2l0Y2gsIHRydWUpOw0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHN3aXRjaGVzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJHN3aXRjaGVzIGFzICRmaWVsZCA9PiAkdmFsdWVzKQ0KCQkJCQkJew0KCQkJCQkJCWlmICgnc3dpdGNoJyA9PSAkZmllbGQgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZhbHVlcykpDQoJCQkJCQkJew0KCQkJCQkJCQlmb3JlYWNoICgkdmFsdWVzIGFzICR2YWx1ZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHN0YXR1c05hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtLT5uYW1lKTsNCgkJCQkJCQkJCSRzd2l0Y2hOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmFsdWUpOw0KCQkJCQkJCQkJJHRtcCA9IGFycmF5KA0KCQkJCQkJCQkJCSd2YWx1ZScgICAgPT4gJHN0YXR1c05hbWUuJ19fJy4kc3dpdGNoTmFtZS4nX19zZWxlY3RlZCcsDQoJCQkJCQkJCQkJJ3RleHQnICAgICA9PiAnJm5ic3A7Jm5ic3A7PGI+Jy4kdmFsdWUuJzwvYj4nLA0KCQkJCQkJCQkJCSdjaGVja2VkJyAgPT4gZmFsc2UNCgkJCQkJCQkJCSk7DQoJCQkJCQkJCQkkb3B0aW9uc1tdID0gKG9iamVjdCkgJHRtcDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkb3B0aW9uczsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQcm9kdWN0aW9uVHlwZXMoJHNldFN0YXR1cyA9IG51bGwpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJyonKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcHJvZHVjdGlvbl90eXBlJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKS4gJyA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkkb3B0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRpdGVtLT5lbXB0eSkpDQoJCQkJew0KCQkJCQkkdGFyZ2V0cz0ganNvbl9kZWNvZGUoJGl0ZW0tPmVtcHR5LCB0cnVlKTsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0YXJnZXRzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJGZpZWxkTmFtZSkNCgkJCQkJCXsNCgkJCQkJCQkkdG1wID0gYXJyYXkoDQoJCQkJCQkJCSd2YWx1ZScgICAgPT4gJ2pvYl9vcmRlcl9fJy5TdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtLT5hbGlhcykuJ19fJy5TdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRmaWVsZE5hbWUpLidfZW1wdHknLA0KCQkJCQkJCQkndGV4dCcgICAgID0+ICcmbmJzcDsmbmJzcDs8Yj4nLiRpdGVtLT5hbGlhcy4nICcuJGZpZWxkTmFtZS4nIEVtcHR5PC9iPicsDQoJCQkJCQkJCSdjaGVja2VkJyAgPT4gZmFsc2UNCgkJCQkJCQkpOw0KCQkJCQkJCWlmICgkc2V0U3RhdHVzKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRtcFsnZmllbGQnXSA9ICRmaWVsZE5hbWU7DQoJCQkJCQkJCSR0bXBbJ2lkJ10gPSAkaXRlbS0+aWQ7DQoJCQkJCQkJCSR0bXBbJ3R5cGUnXSA9ICdlbXB0eSc7DQoJCQkJCQkJfQ0KCQkJCQkJCSRvcHRpb25zW10gPSAob2JqZWN0KSAkdG1wOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR0bXAgPSBhcnJheSgNCgkJCQkJJ3ZhbHVlJyAgICA9PiAnam9iX29yZGVyX18nLlN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGl0ZW0tPmFsaWFzKS4nX19zZWxlY3RlZCcsDQoJCQkJCSd0ZXh0JyAgICAgPT4gJyZuYnNwOyZuYnNwOzxiPicuJGl0ZW0tPmFsaWFzLicgU2VsZWN0ZWQ8L2I+JywNCgkJCQkJJ2NoZWNrZWQnICA9PiBmYWxzZQ0KCQkJCSk7DQoJCQkJaWYgKCRzZXRTdGF0dXMpDQoJCQkJew0KCQkJCQkkdG1wWydmaWVsZCddID0gJ3Byb2R1Y3Rpb25fdHlwZSc7DQoJCQkJCSR0bXBbJ2lkJ10gPSAkaXRlbS0+aWQ7DQoJCQkJCSR0bXBbJ3R5cGUnXSA9ICdzZWxlY3RlZCc7DQoJCQkJfQ0KCQkJCSRvcHRpb25zW10gPSAob2JqZWN0KSAkdG1wOw0KCQkJfQ0KCQkJcmV0dXJuICRvcHRpb25zOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrQ2hlY2tMaXN0KCYkZGF0YSkNCgl7DQoJCSRjaGVja1snaGlzJ10JPSBzZWxmOjpoaXNTdGF0dXNlcygnY2hlY2stbGlzdCcpOw0KCQkkbWVyZ2UJCT0gYXJyYXkoKTsNCgkJJHR5cGVTZXQJPSAnanNvbic7DQoJCWlmIChpc3NldCgkZGF0YVsnaWQnXSkgJiYgJGRhdGFbJ2lkJ10gPiAwKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIG9sZCBjaGVja2xpc3QNCgkJCSRjaGVja1snb2xkJ10gPSBzZWxmOjpnZXRWYXIoJ2pvYl9vcmRlcicsJGRhdGFbJ2lkJ10sJ2lkJywnY2hlY2tfbGlzdCcpOw0KCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRjaGVja1snb2xkJ10pKQ0KCQkJew0KCQkJCSRjaGVja1snb2xkJ10gPSBqc29uX2RlY29kZSgkY2hlY2tbJ29sZCddLCB0cnVlKTsNCgkJCX0NCgkJfQ0KCQlpZiAoaXNzZXQoJGRhdGFbJ2NoZWNrX2xpc3QnXSkgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ2NoZWNrX2xpc3QnXSkpDQoJCXsNCgkJCSRjaGVja1snbmV3J10gPSBqc29uX2RlY29kZSgkZGF0YVsnY2hlY2tfbGlzdCddLCB0cnVlKTsNCgkJCSR0eXBlU2V0ID0gJ2pzb24nOw0KCQl9DQoJCWVsc2VpZiAoaXNzZXQoJGRhdGFbJ2NoZWNrX2xpc3QnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ2NoZWNrX2xpc3QnXSkpDQoJCXsNCgkJCSRjaGVja1snbmV3J10gPSAkZGF0YVsnY2hlY2tfbGlzdCddOw0KCQkJJHR5cGVTZXQgPSAnYXJyYXknOw0KCQl9DQoJCS8vIG5vdyBsZXRzIHNlZSBkb2VzIGhlIGhhdmUgYW55IGFjY2Vzcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNoZWNrWydoaXMnXSkpDQoJCXsNCgkJCS8vIGhlIGNhbiBlZGl0IHNvbWUgbGV0cyBmaW5kIGl0DQoJCQlpZiAoaXNzZXQoJGNoZWNrWydvbGQnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNoZWNrWydvbGQnXSkpDQoJCQl7DQoJCQkJLy8gcmVtb3ZlIHdoYXQgaGUgY2FuIHVwZGF0ZSBmcm9tIG9sZA0KCQkJCSRtZXJnZVtdID0gKGFycmF5KSBhcnJheV9kaWZmKCRjaGVja1snb2xkJ10sICRjaGVja1snaGlzJ10pOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRjaGVja1snbmV3J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjaGVja1snbmV3J10pKQ0KCQkJew0KCQkJCS8vIGdldCB0aG9zZSBoZSBoYXMgYW5kIGNhbiBlZGl0Lg0KCQkJCSRtZXJnZVtdID0gKGFycmF5KSBhcnJheV9pbnRlcnNlY3QoJGNoZWNrWyduZXcnXSwgJGNoZWNrWydoaXMnXSk7DQoJCQl9DQoJCQkkY2hlY2tbJ2tlZXAnXSA9IHNlbGY6Om1lcmdlQXJyYXlzKCRtZXJnZSk7DQoJCQkvLyBlbnN1cmUgb25seSB0aGUga2VlcCB3aGF0IGhlIGNhbiB1cGRhdGUNCgkJCXNlbGY6OnNldENoZWNrTGlzdCgkZGF0YSwgJGNoZWNrLCAna2VlcCcsICR0eXBlU2V0KTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGhlIGlzIG5vdCBhbGxvd2VkIHRvIGVkaXQgYW55DQoJCQlzZWxmOjpzZXRDaGVja0xpc3QoJGRhdGEsICRjaGVjaywgJ29sZCcsICR0eXBlU2V0KTsNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldENoZWNrTGlzdCgmJGRhdGEsICRjaGVjaywgJHdpdGgsICR0eXBlU2V0KQ0KCXsNCgkJaWYgKGlzc2V0KCRjaGVja1skd2l0aF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjaGVja1skd2l0aF0pKQ0KCQl7DQoJCQkvLyByZXN0b3JlIHRoZSBvbGQgc2V0DQoJCQlpZiAoJ2pzb24nID09ICR0eXBlU2V0KQ0KCQkJew0KCQkJCSRkYXRhWydjaGVja19saXN0J10gPSBqc29uX2VuY29kZSgkY2hlY2tbJHdpdGhdKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkZGF0YVsnY2hlY2tfbGlzdCddID0gJGNoZWNrWyR3aXRoXTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGNsZWFyIGFueSBzZWxlY3Rpb25zIG1hZGUNCgkJCSRkYXRhWydjaGVja19saXN0J10gPSAnJzsNCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHluYW1pY1VwZGF0ZUpvYlN0YXR1cygpDQoJew0KCQkvLyBmaXJzdCB3ZSBtdXN0IGdldCBhbGwgdGhlIHB1Ymxpc2hlZCBqb2JzIGFuZCB0aGVpciBkYXRhDQoJCSRpZHMgPSBzZWxmOjpnZXRWYXJzKCdqb2Jfb3JkZXInLCAxLCAncHVibGlzaGVkJywgJ2lkJyk7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KICAgICAgICAgICAgIAkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQlmb3JlYWNoICgkaWRzIGFzICRpZCkNCgkJCXsNCgkJCQlpZiAoJGpvYiA9IHNlbGY6OmdldEpvYk9yZGVyKCRpZCwgJGRiKSkNCgkJCQl7DQoJCQkJCSRqb2JTdGF0dXMgPSBzZWxmOjpzZXRKb2JTdGF0dXMoJGpvYik7DQoJCQkJCWlmICgkam9iWydqb2Jfc3RhdHVzJ10gIT0gJGpvYlN0YXR1cykNCgkJCQkJew0KCQkJCQkJLy8gdXBkYXRlIHRoZSBzdGF0dXMNCgkJCQkJCSR1cGRhdGVJdGVtCQk9IG5ldyBcc3RkQ2xhc3M7DQoJCQkJCQkkdXBkYXRlSXRlbS0+aWQJCT0gJGlkOw0KCQkJCQkJJHVwZGF0ZUl0ZW0tPmpvYl9zdGF0dXMJPSAkam9iU3RhdHVzOwkJCQkJCQ0KCQkJCQkJLy8gdXBkYXRlIHRoZSBpdGVtIG5vdw0KCQkJCQkJJGRiLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9qb2Jfb3JkZXInLCAkdXBkYXRlSXRlbSwgJ2lkJyk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQogICAgICAgICAgICAgIAkJcmV0dXJuIHRydWU7DQoJCX0NCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRKb2JTdGF0dXMoJGpvYikNCgl7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkam9iKSkNCgkJew0KCQkJJGpvYiA9IChhcnJheSkgJGpvYjsNCgkJfQ0KCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhcnJheQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGpvYikpDQoJCXsNCgkJCSR1cGRhdGVyID0gYXJyYXkoKTsNCgkJCSRqb2JTdGF0dXMgPSBhcnJheSgpOw0KCQkJJG5vdyA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9Vbml4KCk7DQoJCQkkb3JkZXJUaW1lID0gKGlzc2V0KCRqb2JbJ29yZGVyX2RhdGUnXSkpID8gc3RydG90aW1lKCRqb2JbJ29yZGVyX2RhdGUnXSkgOiBmYWxzZTsNCgkJCSRkZWxpdmVyeVRpbWUgPSAoaXNzZXQoJGpvYlsnZGVsaXZlcnlfZGF0ZSddKSkgPyBzdHJ0b3RpbWUoJGpvYlsnZGVsaXZlcnlfZGF0ZSddKSA6IGZhbHNlOw0KCQkJLy8gc2V0IHNvbWUgYmFzaWMgdmFsdWVzDQoJCQkkdXBkYXRlclsnam9iX29yZGVyX19wcm9kdWN0X19zZWxlY3RlZCddID0gDQoJCQkJKGlzc2V0KCRqb2JbJ3Byb2R1Y3QnXSkgJiYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRqb2JbJ3Byb2R1Y3QnXSkgfHwgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGpvYlsncHJvZHVjdCddKSkpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJJHVwZGF0ZXJbJ2pvYl9vcmRlcl9fcHJvZHVjdF9fYWxsX2FsbG9jYXRlZCddID0gDQoJCQkJKCR1cGRhdGVyWydqb2Jfb3JkZXJfX3Byb2R1Y3RfX3NlbGVjdGVkJ10pID8gc2VsZjo6aXNBbGxBbGxvY2F0ZWQoJGpvYlsnaWQnXSwgJGpvYlsncHJvZHVjdCddKSA6IGZhbHNlOw0KCQkJJHVwZGF0ZXJbJ2pvYl9vcmRlcl9fcHJvZHVjdGlvbl9fc2VsZWN0ZWQnXSA9IA0KCQkJCShpc3NldCgkam9iWydwcm9kdWN0aW9uJ10pICYmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkam9iWydwcm9kdWN0aW9uJ10pIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRqb2JbJ3Byb2R1Y3Rpb24nXSkpKSA/IHRydWUgOiBmYWxzZTsNCgkJCSR1cGRhdGVyWydqb2Jfb3JkZXJfX29yZGVyX2RhdGVfX3NldCddID0gKGlzc2V0KCRqb2JbJ29yZGVyX2RhdGUnXSkpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJJHVwZGF0ZXJbJ2pvYl9vcmRlcl9fb3JkZXJfZGF0ZV9fcGFzdCddID0gKCRvcmRlclRpbWUgJiYgJG9yZGVyVGltZSA8ICRub3cpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJJHVwZGF0ZXJbJ2pvYl9vcmRlcl9fZGVsaXZlcnlfZGF0ZV9fc2V0J10gPSAoaXNzZXQoJGpvYlsnZGVsaXZlcnlfZGF0ZSddKSkgPyB0cnVlIDogZmFsc2U7DQoJCQkkdXBkYXRlclsnam9iX29yZGVyX19kZWxpdmVyeV9kYXRlX19wYXN0J10gPSAoJGRlbGl2ZXJ5VGltZSAmJiAkZGVsaXZlcnlUaW1lIDwgJG5vdykgPyB0cnVlIDogZmFsc2U7DQoJCQkvLyBzZXR1cCByZXBsYWNlbWVudCBhcnJheQ0KCQkJJHJlcGxhY2VbJ2pvYl9vcmRlcl9fcHJvZHVjdF9fc2VsZWN0ZWQnXSA9ICJ1cGRhdGVyWydqb2Jfb3JkZXJfX3Byb2R1Y3RfX3NlbGVjdGVkJ10iOw0KCQkJJHJlcGxhY2VbJ2pvYl9vcmRlcl9fcHJvZHVjdF9fYWxsX2FsbG9jYXRlZCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fcHJvZHVjdF9fYWxsX2FsbG9jYXRlZCddIjsNCgkJCSRyZXBsYWNlWydqb2Jfb3JkZXJfX3Byb2R1Y3Rpb25fX3NlbGVjdGVkJ10gPSAidXBkYXRlclsnam9iX29yZGVyX19wcm9kdWN0aW9uX19zZWxlY3RlZCddIjsNCgkJCSRyZXBsYWNlWydqb2Jfb3JkZXJfX29yZGVyX2RhdGVfX3NldCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fb3JkZXJfZGF0ZV9fc2V0J10iOw0KCQkJJHJlcGxhY2VbJ2pvYl9vcmRlcl9fb3JkZXJfZGF0ZV9fcGFzdCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fb3JkZXJfZGF0ZV9fcGFzdCddIjsNCgkJCSRyZXBsYWNlWydqb2Jfb3JkZXJfX2RlbGl2ZXJ5X2RhdGVfX3NldCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fZGVsaXZlcnlfZGF0ZV9fc2V0J10iOw0KCQkJJHJlcGxhY2VbJ2pvYl9vcmRlcl9fZGVsaXZlcnlfZGF0ZV9fcGFzdCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fZGVsaXZlcnlfZGF0ZV9fcGFzdCddIjsNCgkJCS8vIHNldCB0aGUgY2hlY2stbGlzdCB2YWx1ZXMNCgkJCSRjaGVja0xpc3QgPSBzZWxmOjpnZXRDaGVja0xpc3QoKTsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNoZWNrTGlzdCkpDQoJCQl7DQoJCQkJZm9yZWFjaCgkY2hlY2tMaXN0IGFzICRvYmplY3QpDQoJCQkJew0KCQkJCQkvLyBzZXR1cCBzd2l0Y2hlcw0KCQkJCQkkdXBkYXRlclsoc3RyaW5nKSAkb2JqZWN0LT52YWx1ZV0gPSBmYWxzZTsNCgkJCQkJJHJlcGxhY2VbKHN0cmluZykgJG9iamVjdC0+dmFsdWVdID0gInVwZGF0ZXJbJyIuKHN0cmluZykgJG9iamVjdC0+dmFsdWUuIiddIjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBub3cgc2V0IGpvYiBjaGVjayBsaXN0DQoJCQlpZiAoaXNzZXQoJGpvYlsnY2hlY2tfbGlzdCddKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkam9iWydjaGVja19saXN0J10pKQ0KCQkJew0KCQkJCSRqb2JDaGVja0xpc3QgPSBqc29uX2RlY29kZSgkam9iWydjaGVja19saXN0J10sIHRydWUpOw0KCQkJfQ0KCQkJZWxzZWlmIChpc3NldCgkam9iWydjaGVja19saXN0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRqb2JbJ2NoZWNrX2xpc3QnXSkpDQoJCQl7DQoJCQkJJGpvYkNoZWNrTGlzdCA9ICRqb2JbJ2NoZWNrX2xpc3QnXTsNCgkJCX0NCgkJCS8vIG5vdyB1cGRhdGUgdGhlIG9uY2Ugc2VsZWN0ZWQNCgkJCWlmIChpc3NldCgkam9iQ2hlY2tMaXN0KSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkam9iQ2hlY2tMaXN0KSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkam9iQ2hlY2tMaXN0IGFzICR2YWx1ZSkNCgkJCQl7DQoJCQkJCSR1cGRhdGVyWyhzdHJpbmcpICR2YWx1ZV0gPSB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGdldCB0aGUgcHJvZHVjdGlvbiB0eXBlcw0KCQkJJHByb2R1Y3Rpb25UeXBlcyA9IHNlbGY6OmdldFByb2R1Y3Rpb25UeXBlcyh0cnVlKTsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHByb2R1Y3Rpb25UeXBlcykpDQoJCQl7DQoJCQkJZm9yZWFjaCgkcHJvZHVjdGlvblR5cGVzIGFzICRvYmplY3QpDQoJCQkJew0KCQkJCQkvLyBzZXR1cCBlbXB0eSB0eXBlcw0KCQkJCQlpZiAoJG9iamVjdC0+dHlwZSA9PSAnZW1wdHknKQ0KCQkJCQl7DQoJCQkJCQkkdXBkYXRlclsoc3RyaW5nKSAkb2JqZWN0LT52YWx1ZV0gPSBzZWxmOjppc0VtcHR5KCRqb2JbJ3Byb2R1Y3Rpb24nXSwoc3RyaW5nKSAkb2JqZWN0LT5maWVsZCwgJ3Byb2R1Y3Rpb25fdHlwZScsIChpbnQpICRvYmplY3QtPmlkKTsNCgkJCQkJCSRyZXBsYWNlWyhzdHJpbmcpICRvYmplY3QtPnZhbHVlXSA9ICJ1cGRhdGVyWyciLihzdHJpbmcpICRvYmplY3QtPnZhbHVlLiInXSI7DQoJCQkJCX0NCgkJCQkJZWxzZWlmICgkb2JqZWN0LT50eXBlID09ICdzZWxlY3RlZCcpDQoJCQkJCXsNCgkJCQkJCSR1cGRhdGVyWyhzdHJpbmcpICRvYmplY3QtPnZhbHVlXSA9IHNlbGY6OmlzRXEoJGpvYlsncHJvZHVjdGlvbiddLChzdHJpbmcpICRvYmplY3QtPmZpZWxkLCAoaW50KSAkb2JqZWN0LT5pZCk7DQoJCQkJCQkkcmVwbGFjZVsoc3RyaW5nKSAkb2JqZWN0LT52YWx1ZV0gPSAidXBkYXRlclsnIi4oc3RyaW5nKSAkb2JqZWN0LT52YWx1ZS4iJ10iOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbm93IGxldHMgcnVuIHRoZSBhY3RpdmF0aW9uIHNjcmlwdHMNCgkJCSRzY3JpcHRzID0gc2VsZjo6Z2V0QWN0aXZhdGlvblNjcmlwdHMoKTsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNjcmlwdHMpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRzY3JpcHRzIGFzICRpZCA9PiAkc2NyaXB0KQ0KCQkJCXsNCgkJCQkJaWYgKCFlbXB0eSgkc2NyaXB0WydhY3RpdmF0ZSddKSkNCgkJCQkJew0KCQkJCQkJJHNjcmlwdCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHJlcGxhY2UpLCBhcnJheV92YWx1ZXMoJHJlcGxhY2UpLCBiYXNlNjRfZGVjb2RlKCRzY3JpcHRbJ2FjdGl2YXRlJ10pKTsNCgkJCQkJCWlmIChzZWxmOjpydW5GdW5jKCRzY3JpcHQsJHVwZGF0ZXIpKQ0KCQkJCQkJew0KCQkJCQkJCSRqb2JTdGF0dXNbXSA9ICRpZDsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkam9iU3RhdHVzKSkNCgkJCXsNCgkJCQlyZXR1cm4ganNvbl9lbmNvZGUoJGpvYlN0YXR1cyk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gaXNFcSgkZGF0YSwgJGZpbmQsICRpZCkNCgl7DQoJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCSRkYXRhID0ganNvbl9kZWNvZGUoJGRhdGEsdHJ1ZSk7DQoJCX0NCgkJLy8gbm90IGNoZWNrIGlmIGZpbmQgaXMgZm91bmQNCgkJaWYgKGlzc2V0KCRkYXRhWyRmaW5kXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJGZpbmRdKSkNCgkJew0KCQkJZm9yZWFjaCAoJGRhdGFbJGZpbmRdIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJew0KCQkJCWlmICgkdmFsdWUgPT0gJGlkKQ0KCQkJCXsNCgkJCQkJLy8gZXZlbiBpZiBvbmUgZmllbGQgaXMgZXF1YWwgcmV0dXJuIHRoYXQgaXQgaXMgZm91bmQNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIHRoZSBmaWVsZCBpcyBub3Qgc2V0LCB0aGVyZWZvcmUgbm90IHNlbGVjdGVkLg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBpc0VtcHR5KCRkYXRhLCAkZmluZCwgJGFuZCA9IG51bGwsICRhdCA9IG51bGwpDQoJew0KCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLHRydWUpOw0KCQl9DQoJCS8vIG5vdCBjaGVjayBpZiBmaW5kIGlzIGZvdW5kDQoJCWlmIChpc3NldCgkZGF0YVskZmluZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhWyRmaW5kXSkpDQoJCXsNCgkJCWZvcmVhY2ggKCRkYXRhWyRmaW5kXSBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCXsNCgkJCQlpZiAoJGFuZCkNCgkJCQl7DQoJCQkJCWlmICgkYXQpDQoJCQkJCXsNCgkJCQkJCWlmICgoZW1wdHkoJHZhbHVlKSB8fCAkdmFsdWUgPT0gJycpICYmIGlzc2V0KCRkYXRhWyRhbmRdWyRrZXldKSAmJiAkZGF0YVskYW5kXVska2V5XSA9PSAkYXQpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZXZlbiBpZiBvbmUgZmllbGQgaW4gZW1wdHkgd2Ugc2hvdWxkIHJldHVybiB0aGF0IGl0IGlzIGVtcHR5DQoJCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZWlmICgoZW1wdHkoJHZhbHVlKSB8fCAkdmFsdWUgPT0gJycpICYmIChlbXB0eSgkZGF0YVskYW5kXVska2V5XSkgfHwgJGRhdGFbJGFuZF1bJGtleV0gPT0gJycpKQ0KCQkJCQl7DQoJCQkJCQkvLyBldmVuIGlmIG9uZSBmaWVsZCBpbiBlbXB0eSB3ZSBzaG91bGQgcmV0dXJuIHRoYXQgaXQgaXMgZW1wdHkNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2VpZiAoZW1wdHkoJHZhbHVlKSB8fCAkdmFsdWUgPT0gJycpDQoJCQkJew0KCQkJCQkvLyBldmVuIGlmIG9uZSBmaWVsZCBpbiBlbXB0eSB3ZSBzaG91bGQgcmV0dXJuIHRoYXQgaXQgaXMgZW1wdHkNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gaWYgd2UgYXJyaXZlZCBoZXJlIHRoYXQgbWVhbnMgdGhlIGZpZWxkIGlzIG5vdCBlbXB0eQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vIHRoZSBmaWVsZCBpcyBub3Qgc2V0LCB0aGVyZWZvcmUgZW1wdHkuDQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcnVuRnVuYygkc2NyaXB0LCYkdXBkYXRlcikNCgl7DQoJCXJldHVybiBzdHJsZW4oJHNjcmlwdCkgPyBldmFsKCIgIi4gJHNjcmlwdCAuICIgIiApOiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFjdGl2YXRpb25TY3JpcHRzKCkNCgl7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoNCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2l0ZW0gdGFibGUNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX3N0YXR1cycsICdhJykpOw0KDQoJCS8vIExvYWQgdGhlIGl0ZW1zDQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZEFzc29jTGlzdCgnaWQnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBpc0FsbEFsbG9jYXRlZCgkam9iX29yZGVyLCAkcHJvZHVjdHMpDQoJew0KCQlpZiAoJGpvYl9vcmRlciA+IDApDQoJCXsNCgkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdHMpKQ0KCQkJew0KCQkJCSRwcm9kdWN0cyA9IGpzb25fZGVjb2RlKCRwcm9kdWN0cywgdHJ1ZSk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoJHByb2R1Y3RzWydpdGVtJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0c1snaXRlbSddKSkNCgkJCXsNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQlmb3JlYWNoICgkcHJvZHVjdHNbJ2l0ZW0nXSBhcyAkbnIgPT4gJGl0ZW0pDQoJCQkJew0KCQkJCQkkZm91bmQgPSBzZWxmOjpnZXROZWVkZWRJdGVtKCRqb2Jfb3JkZXIsICRpdGVtLCAkZGIpOw0KCQkJCQlpZiAoIWlzc2V0KCRmb3VuZC0+YWxsb2NhdGVkKSB8fCAkZm91bmQtPmFsbG9jYXRlZCAhPSAkcHJvZHVjdHNbJ3F0eSddWyRucl0pDQoJCQkJCXsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdKb2JOdW1iZXIoKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCdqb2JudW1iZXInKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX29yZGVyJykpOw0KCQkkcXVlcnktPm9yZGVyKCdqb2JudW1iZXIgQVNDJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGpvYm51bWJlcnMgPSAkZGItPmxvYWRDb2x1bW4oKTsNCgkJCSRsYXN0ID0gZW5kKCRqb2JudW1iZXJzKTsNCgkJCS8vIGdldCB0aGUgbnVtYmVyDQoJCQkkbGFzdCA9IChpbnQpIHByZWdfcmVwbGFjZSgiL1teMC05LC5dLyIsICIiLCAkbGFzdCk7DQoJCQkvLyBpbmNyZW1lbnQNCgkJCXJldHVybiAnSicuc3ByaW50ZignJTA4ZCcsICsrJGxhc3QpOw0KCQl9DQoJCXJldHVybiAnSicuc3ByaW50ZignJTA4ZCcsIDEpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdW5pcXVlTnIoJiRpdGVtICwgJHdoZXJlKQ0KCXsNCgkJbGlzdCgkdHlwZSwgJGNvbHVtbikgPSBleHBsb2RlKCcuJywgJHdoZXJlKTsNCgkJaWYgKCR0eXBlICYmICRjb2x1bW4pDQoJCXsNCgkJCS8vIGxvYWQgdGhlIGFsbCBpdGVtcyB3aXRoIHRoZSBzYW1lIGNvbHVtbg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KGFycmF5KCdpZCcgLCdjcmVhdGVkJykpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJy4kdHlwZSkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkY29sdW1uKSAuICcgPSAnLiRkYi0+cXVvdGUoJGl0ZW0tPiRjb2x1bW4pKTsNCgkJCSRxdWVyeS0+b3JkZXIoJ2NyZWF0ZWQgQVNDJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkZm91bmQgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkJaWYgKGNvdW50KCRmb3VuZCkgPiAxKQ0KCQkJCXsNCgkJCQkJLy8gaXMgdGhlIGN1cnJlbnQgaXRlbSB0aGUgb2xkZXIgb25lPw0KCQkJCQlpZiAoJGl0ZW0tPmlkICE9ICRmb3VuZFswXS0+aWQpDQoJCQkJCXsNCgkJCQkJCS8vIGZpcnN0IHVwZGF0ZSB0aGUgaXRlbQ0KCQkJCQkJJGl0ZW0tPiRjb2x1bW4JCT0gc2VsZjo6bmV3Sm9iTnVtYmVyKCk7DQoJCQkJCQkvLyBub3cgdXBkYXRlIHRoZSB0YWJsZQ0KCQkJCQkJJHVwZGF0ZUl0ZW0JCT0gbmV3IFxzdGRDbGFzczsNCgkJCQkJCSR1cGRhdGVJdGVtLT5pZAkJPSAkaXRlbS0+aWQ7DQoJCQkJCQkkdXBkYXRlSXRlbS0+JGNvbHVtbgk9ICRpdGVtLT4kY29sdW1uOwkJCQkJCQ0KCQkJCQkJLy8gdXBkYXRlIHRoZSBpdGVtIG5vdw0KCQkJCQkJRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUsICR1cGRhdGVJdGVtLCAnaWQnKTsJCQkJCQkNCgkJCQkJfQ0KCQkJCX0NCgkJDQoJCQl9DQoJCQkNCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFibGUoJHR5cGUgPSBudWxsLCAkcHJlZml4ID0gJ1tbW0NvbXBvbmVudF1dXVRhYmxlJywgJGNvbmZpZyA9IGFycmF5KCkpDQoJew0KCQlpZiAoJHR5cGUpDQoJCXsNCgkJCXJldHVybiBKVGFibGU6OmdldEluc3RhbmNlKCR0eXBlLCAkcHJlZml4LCAkY29uZmlnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNKb2JzKCR1c2VyID0gbnVsbCwgJGdyb3VwID0gbnVsbCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCdqb2Jfc3RhdHVzJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX29yZGVyJykpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRpdGVtcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaXRlbXMpKQ0KCQkJew0KCQkJCWlmICghaXNzZXQoJHVzZXIpIHx8ICFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkdXNlcikpDQoJCQkJew0KCQkJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCQl9DQoJCQkJaWYgKCFpc3NldCgkZ3JvdXBzKSB8fCAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCQkJew0KCQkJCQkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0KCdncm91cHMnKTsNCgkJCQl9DQoJCQkJLy8gdGhlIGJ1Y2tldCBvZiBoaXMgaWRzDQoJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OmlzSGlzKCRpdGVtLT5pZCwgJHVzZXIsICRncm91cCwgJGl0ZW0tPmpvYl9zdGF0dXMpKQ0KCQkJCQl7DQoJCQkJCQkkYnVja2V0W10gPSAkaXRlbS0+aWQ7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuICRidWNrZXQ7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSGlzKCRqb2IsICR1c2VyID0gbnVsbCwgJGdyb3VwID0gbnVsbCwgJGpvYlN0YXR1cyA9IG51bGwpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCR1c2VyKSkNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJaWYgKCEkdXNlci0+YXV0aG9yaXNlKCdjb3JlLm9wdGlvbnMnLCAnY29tX1tbW2NvbXBvbmVudF1dXScpKQ0KCQl7DQoJCQlpZiAoISRqb2JTdGF0dXMpDQoJCQl7DQoJCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkam9iKSAmJiAhaXNzZXQoJGpvYi0+am9iX3N0YXR1cykpDQoJCQkJew0KCQkJCQkkam9iU3RhdHVzID0gc2VsZjo6Z2V0VmFyKCdqb2Jfb3JkZXInLCAoaW50KSAkam9iLCAnaWQnLCAnam9iX3N0YXR1cycpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkam9iU3RhdHVzID0gc2VsZjo6Z2V0VmFyKCdqb2Jfb3JkZXInLCAoaW50KSAkam9iLT5pZCwgJ2lkJywgJ2pvYl9zdGF0dXMnKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayB0aGF0IHRoZXJlIGFyZSBzdGF0dXMgc2V0IGZvciB0aGlzIGpvYi1vcmRlcg0KCQkJaWYgKGlzc2V0KCRqb2JTdGF0dXMpICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRqb2JTdGF0dXMpKQ0KCQkJew0KCQkJCSRqb2JTdGF0dXNlcyA9IGpzb25fZGVjb2RlKCRqb2JTdGF0dXMsIHRydWUpOw0KCQkJfQ0KCQkJZWxzZWlmIChpc3NldCgkam9iU3RhdHVzKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkam9iU3RhdHVzKSkNCgkJCXsNCgkJCQkkam9iU3RhdHVzZXMgPSBhcnJheSgkam9iU3RhdHVzKTsNCgkJCX0NCgkJCWlmIChpc3NldCgkam9iU3RhdHVzZXMpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRqb2JTdGF0dXNlcykpDQoJCQl7DQoJCQkJaWYgKCFpc3NldCgkZ3JvdXBzKSB8fCAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCQkJew0KCQkJCQkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0KCdncm91cHMnKTsNCgkJCQl9DQoJCQkJaWYgKCRoaXNTdGF0dXNlcyA9IHNlbGY6Omhpc1N0YXR1c2VzKCdzdGF0dXMtaWQnLCRncm91cHMpKQ0KCQkJCXsNCgkJCQkJaWYgKGFycmF5X2ludGVyc2VjdCgkaGlzU3RhdHVzZXMsICRqb2JTdGF0dXNlcykpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OmVkaXRpbmdBY2Nlc3MoJGpvYiwgJHVzZXIpOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljICRzdGF0dXNlcyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc1N0YXR1c2VzKCR0eXBlLCAkZ3JvdXBzID0gbnVsbCkNCgl7DQoJCWlmICghU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkJJGdyb3VwcyA9IChhcnJheSkgJHVzZXItPmdldCgnZ3JvdXBzJyk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRncm91cHMpKQ0KCQl7DQoJCQkkbWQ1ID0gbWQ1KGpzb25fZW5jb2RlKCRncm91cHMpLiR0eXBlKTsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHN0YXR1c2VzWyRtZDVdKSkNCgkJCXsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoNCgkJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1faXRlbSB0YWJsZQ0KCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2pvYl9zdGF0dXMnLCAnYScpKTsNCg0KCQkJCS8vIExvYWQgdGhlIGl0ZW1zDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCSRpdGVtcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQkJc2VsZjo6JHN0YXR1c2VzWyRtZDVdID0gYXJyYXkoKTsNCgkJCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJCQl7DQoJCQkJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPnN3aXRjaCkpDQoJCQkJCQl7DQoJCQkJCQkJJHN3aXRjaGVzID0ganNvbl9kZWNvZGUoJGl0ZW0tPnN3aXRjaCwgdHJ1ZSk7DQoJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzd2l0Y2hlcykpDQoJCQkJCQkJew0KCQkJCQkJCQlmb3JlYWNoICgkc3dpdGNoZXMgYXMgJGZpZWxkID0+ICR2YWx1ZXMpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWlmICgnc3dpdGNoJyA9PSAkZmllbGQgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZhbHVlcykpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJZm9yZWFjaCAoJHZhbHVlcyBhcyAkbnIgPT4gJHZhbHVlKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJaWYgKGFycmF5X2ludGVyc2VjdCgkc3dpdGNoZXNbJ2dyb3VwcyddWyRucl0sICRncm91cHMpKQ0KCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQlpZiAoJHR5cGUgPT0gJ2NoZWNrLWxpc3QnKQ0KCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCSRzdGF0dXNOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbS0+bmFtZSk7DQoJCQkJCQkJCQkJCQkJJHN3aXRjaE5hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2YWx1ZSk7DQoJCQkJCQkJCQkJCQkJc2VsZjo6JHN0YXR1c2VzWyRtZDVdW10gPSAkc3RhdHVzTmFtZS4nX18nLiRzd2l0Y2hOYW1lLidfX3NlbGVjdGVkJzsNCgkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJCWVsc2VpZiAoJHR5cGUgPT0gJ3N0YXR1cy1pZCcpDQoJCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkJc2VsZjo6JHN0YXR1c2VzWyRtZDVdWyRpdGVtLT5pZF0gPSAkaXRlbS0+aWQ7DQoJCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBvbmx5IHJldHVybiBpZiB2YWx1ZXMgaGFzIGJlZW4gc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHN0YXR1c2VzWyRtZDVdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JHN0YXR1c2VzWyRtZDVdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVkaXRpbmdBY2Nlc3MoJGl0ZW0sICR1c2VyID0gbnVsbCkNCgl7DQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHVzZXIpKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQlpZiAoISR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fW1tbY29tcG9uZW50XV1dJykpDQoJCXsNCgkJCS8vIGlmIG93bmVyIHdobyBjcmVhdGVkIGl0DQoJCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGl0ZW0pICYmIGlzc2V0KCRpdGVtLT5jcmVhdGVkX2J5KSkNCgkJCXsNCgkJCQkkY3JlYXRlZF9ieSA9ICRpdGVtLT5jcmVhdGVkX2J5Ow0KCQkJfQ0KCQkJZWxzZWlmIChpc19udW1lcmljKCRpdGVtKSkNCgkJCXsNCgkJCQkkY3JlYXRlZF9ieSA9IHNlbGY6OmdldFZhcignam9iX29yZGVyJywgKGludCkgJGl0ZW0sICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoJGNyZWF0ZWRfYnkpICYmIGlzX251bWVyaWMoJGNyZWF0ZWRfYnkpICYmICFlbXB0eSgkY3JlYXRlZF9ieSkgJiYgJGNyZWF0ZWRfYnkgIT0gMCAmJiAkY3JlYXRlZF9ieSA9PSAkdXNlci0+aWQpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBpZiBjaGVja2VkIGl0IG91dCBieSB0aGlzIHVzZXINCgkJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPmNoZWNrZWRfb3V0KSkNCgkJCXsNCgkJCQkkY2hlY2tlZF9vdXQgPSAkaXRlbS0+Y2hlY2tlZF9vdXQ7DQoJCQl9DQoJCQllbHNlaWYgKGlzX251bWVyaWMoJGl0ZW0pKQ0KCQkJew0KCQkJCSRjaGVja2VkX291dCA9IHNlbGY6OmdldFZhcignam9iX29yZGVyJywgKGludCkgJGl0ZW0sICdpZCcsICdjaGVja2VkX291dCcpOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRjaGVja2VkX291dCkgJiYgaXNfbnVtZXJpYygkY2hlY2tlZF9vdXQpICYmICFlbXB0eSgkY2hlY2tlZF9vdXQpICYmICRjaGVja2VkX291dCAhPSAwICYmICRjaGVja2VkX291dCA9PSAkdXNlci0+aWQpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBvciBpZiBtb2RpZmllZCBieSB0aGlzIHVzZXIgMTAgbWludXRlcyBhZ28NCgkJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPm1vZGlmaWVkX2J5KSkNCgkJCXsNCgkJCQkkbW9kaWZpZWRfYnkgPSAkaXRlbS0+bW9kaWZpZWRfYnk7DQoJCQl9DQoJCQllbHNlaWYgKGlzX251bWVyaWMoJGl0ZW0pKQ0KCQkJew0KCQkJCSRtb2RpZmllZF9ieSA9IHNlbGY6OmdldFZhcignam9iX29yZGVyJywgKGludCkgJGl0ZW0sICdpZCcsICdtb2RpZmllZF9ieScpOw0KCQkJfQkJCQkNCgkJCWlmIChpc3NldCgkbW9kaWZpZWRfYnkpICYmICFlbXB0eSgkbW9kaWZpZWRfYnkpICYmICRtb2RpZmllZF9ieSAhPSAwICYmICRtb2RpZmllZF9ieSA9PSAkdXNlci0+aWQpDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRpdGVtKSAmJiBpc3NldCgkaXRlbS0+bW9kaWZpZWQpKQ0KCQkJCXsNCgkJCQkJJG1vZGlmaWVkID0gJGl0ZW0tPm1vZGlmaWVkOw0KCQkJCX0NCgkJCQllbHNlaWYgKGlzX251bWVyaWMoJGl0ZW0pKQ0KCQkJCXsNCgkJCQkJJG1vZGlmaWVkID0gc2VsZjo6Z2V0VmFyKCdqb2Jfb3JkZXInLCAoaW50KSAkaXRlbSwgJ2lkJywgJ21vZGlmaWVkJyk7DQoJCQkJfQ0KCQkJCSRtb2RpZmllZFRpbWUgPSAoIWVtcHR5KCRtb2RpZmllZCkgJiYgJG1vZGlmaWVkICE9ICcwMDAwLTAwLTAwIDAwOjAwOjAwJykgPyBzdHJ0b3RpbWUoJG1vZGlmaWVkKSA6IGZhbHNlOw0KCQkJCWlmICgkbW9kaWZpZWRUaW1lKQ0KCQkJCXsNCgkJCQkJJG5vdyA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9Vbml4KCk7DQogCQkJCQkkdGVuTWludXRzQWdvID0gJG5vdyAtICgxMCAqIDYwKTsNCgkJCQkJaWYgKCRtb2RpZmllZFRpbWUgPiAkdGVuTWludXRzQWdvKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldENsaWVudCgkZGF0YSkNCgl7DQoJCSRzZXRWYWx1ZXMgID0gYXJyYXkoDQoJCQknbmFtZScsJ2NvbnRhY3RfcGVyc29uJywnZW1haWwnLA0KCQkJJ3Bob25lJywnbW9iaWxlX3Bob25lJywnZmF4Jywnd2Vic2l0ZScsDQoJCQknc3RyZWV0JywncG9zdGFsJywncmVnaW9uJywnY2l0eScsJ2NvdW50cnknLA0KCQkJJ3Bvc3RhbGNvZGUnICk7DQoJCS8vIG5ldyBjbGllbnQNCgkJJGNsaWVudCA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJZm9yZWFjaCAoJHNldFZhbHVlcyBhcyAkbG9hZCkNCgkJew0KCQkJaWYgKGlzc2V0KCRkYXRhWyRsb2FkXSkgJiYgIWVtcHR5KCRkYXRhWyRsb2FkXSkpDQoJCQl7DQoJCQkJJGNsaWVudC0+JGxvYWQgPSAkZGF0YVskbG9hZF07DQoJCQl9DQoJCX0NCgkJLy8gb25seSBjcmVhdGUgaWYgYWxsIG5lZWRlZCB2YWx1ZXMgYXJlIHNldA0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGNsaWVudCkgJiYgaXNzZXQoJGNsaWVudC0+bmFtZSkgJiYgaXNzZXQoJGNsaWVudC0+ZW1haWwpICYmIChpc3NldCgkY2xpZW50LT5waG9uZSkgfHwgaXNzZXQoJGNsaWVudC0+bW9iaWxlX3Bob25lKSkpDQoJCXsNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gbG9hZCBmZXcgbW9yZSBuZWVkZWQgdmFsdWVzDQoJCQkkY2xpZW50LT5jcmVhdGVkX2J5CT0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRjbGllbnQtPmNyZWF0ZWQJCT0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1NxbCgpOw0KCQkJJGNsaWVudC0+cHVibGlzaGVkCT0gMTsNCgkJCSRjbGllbnQtPmFjY2VzcwkJPSAxOw0KCQkJJGNsaWVudC0+b3JkZXJpbmcJPSAxOw0KCQkJJGNsaWVudC0+dmVyc2lvbgkJPSAxOw0KCQkJLy8gbm93IGNyZWF0ZSB0aGUgY2xpZW50DQoJCQkkZG9uZSA9ICRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fY2xpZW50JywgJGNsaWVudCk7DQoJCQlpZiAoJGRvbmUpDQoJCQl7DQoJCQkJJGlkID0gJGRiLT5pbnNlcnRpZCgpOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCXNlbGY6OnNldEFzc2V0KCRpZCwnY2xpZW50Jyk7DQoJCQkJLy8gcmV0dXJuIHRoZSBuZXcgY2xpZW50IGlkDQoJCQkJcmV0dXJuICRpZDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gMDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEltYWdlRmlsZVByb3BlcnRpZXMoJGltYWdlKQ0KCXsNCgkJJHNldGltYWdlc2ZvbGRlciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKS0+Z2V0KCdzZXRpbWFnZXNmb2xkZXInLCAxKTsNCgkJaWYgKDIgPT0gJHNldGltYWdlc2ZvbGRlcikNCgkJew0KCQkJJGxvY2FsZm9sZGVyID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ2ltYWdlc2ZvbGRlcicsIEpQQVRIX1NJVEUuJy9pbWFnZXMvIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJZWxzZWlmICgxID09ICRzZXRpbWFnZXNmb2xkZXIpDQoJCXsNCgkJCSRsb2NhbGZvbGRlciA9ICBKUEFUSF9TSVRFLicvaW1hZ2VzJzsNCgkJfQ0KCQllbHNlIC8vIGp1c3QgaW4tY2FzZSA6KQ0KCQl7DQoJCQkkbG9jYWxmb2xkZXIgPSAgSlBBVEhfU0lURS4nL2ltYWdlcy8jIyNjb21wb25lbnQjIyMnOw0KCQl9DQoJCS8vIGltcG9ydCBhbGwgbmVlZGVkIGNsYXNzZXMNCgkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZm9sZGVyJyk7DQoJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZpbGUnKTsNCgkJamltcG9ydCgnam9vbWxhLmltYWdlLmltYWdlJyk7DQoJCS8vIHNldHVwIHRoZSBmb2xkZXIgaWYgaXQgZG9lcyBub3QgZXhpc3QNCgkJaWYgKEpGb2xkZXI6OmV4aXN0cygkbG9jYWxmb2xkZXIpICYmIEpGaWxlOjpleGlzdHMoJGxvY2FsZm9sZGVyLicvJy4kaW1hZ2UpKQ0KCQl7DQoJCQkkcHJvcGVydGllcyA9IEpJbWFnZTo6Z2V0SW1hZ2VGaWxlUHJvcGVydGllcygkbG9jYWxmb2xkZXIuJy8nLiRpbWFnZSk7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHByb3BlcnRpZXMNCgkJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkcHJvcGVydGllcykpDQoJCQl7DQoJCQkJLy8gcmVtb3ZlIHRoZSBzZXJ2ZXIgcGF0aA0KCQkJCSRpbWFnZVBhdGggPSB0cmltKHN0cl9yZXBsYWNlKEpQQVRIX1NJVEUsJycsJGxvY2FsZm9sZGVyKSwnLycpLicvJy4kaW1hZ2U7DQoJCQkJLy8gbm93IGFkZCB0aGUgc3JjIHBhdGggdG8gc2hvdyB0aGUgaW1hZ2UNCgkJCQkkcHJvcGVydGllcy0+c3JjID0gVXJpOjpyb290KCkuJGltYWdlUGF0aDsNCgkJCQkvLyByZXR1cm4gdGhlIGltYWdlIHByb3BlcnRpZXMNCgkJCQlyZXR1cm4gJHByb3BlcnRpZXM7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljICR0YXhMb2NhdGlvbiA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRheExvY2F0aW9uKCR0eXBlLCAkaWQsICR2aWV3KQ0KCXsNCgkJaWYgKCRpZCA+IDAgKQ0KCQl7DQoJCQkka2V5ID0gJHR5cGUuJHZpZXcuJGlkOw0KCQkJaWYgKCFpc3NldChzZWxmOjokdGF4TG9jYXRpb25bJGtleV0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFRheExvY2F0aW9uKCR0eXBlLCAkaWQsICR2aWV3LCAka2V5KTsNCgkJCX0NCgkJCWlmIChpc3NldChzZWxmOjokdGF4TG9jYXRpb25bJGtleV0pICYmIHNlbGY6OiR0YXhMb2NhdGlvblska2V5XSA+IDApDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiR0YXhMb2NhdGlvblska2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUYXhMb2NhdGlvbigkdHlwZSwgJGlkLCAkdmlldywgJGtleSkNCgl7DQoJCXN3aXRjaCAoJHZpZXcpDQoJCXsNCgkJCWNhc2UgJ2pvYl9vcmRlcic6DQoJCQkJLy8gZ2V0IHRoZSBjbGllbnQgaWQgZnJvbSBqb2IgaWQNCgkJCQkkY2xpZW50X2lkID0gc2VsZjo6Z2V0VmFyKCR2aWV3LCAkaWQsICdpZCcsICdjbGllbnQnKTsNCgkJCQkvLyByZXR1cm4gbG9jYXRpb24gaWQgZnJvbSBjbGllbnQgdGFibGUNCgkJCQlpZiAoJGNsaWVudF9pZCA+IDApDQoJCQkJew0KCQkJCQlzZWxmOjokdGF4TG9jYXRpb25bJGtleV0gPSBzZWxmOjpnZXRWYXIoJ2NsaWVudCcsICRjbGllbnRfaWQsICdpZCcsICR0eXBlKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGF4KCYkdGF4ZWQsICYkdG90YWwsICRpZCwgJHZpZXcpDQoJew0KCQkkc2V0VGF4ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ3RheGVkJywgMCk7DQoJCWlmICgkc2V0VGF4ID09IDEpDQoJCXsNCgkJCS8vIHNldCB0aGUgdGF4IHRvIHRoaXMgYXJyYXkNCgkJCSR0YXggPSBhcnJheSgpOw0KCQkJJHRheEFkZFRvdGFsID0gYXJyYXkoKTsNCgkJCSRkZWR1Y3QgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQNCgkJCSRjb3VudHJ5ID0gc2VsZjo6Z2V0VGF4TG9jYXRpb24oJ2NvdW50cnknLCAkaWQsICR2aWV3KTsNCgkJCS8vIGdldCB0aGUgcmVnaW9uIG9mIHRoZSBjbGllbnQNCgkJCSRyZWdpb24gPSBzZWxmOjpnZXRUYXhMb2NhdGlvbigncmVnaW9uJywgJGlkLCAkdmlldyk7DQoJCQkvLyBub3cgZ2V0IHRheCBsZXZlbCAxIG9mIHRoaXMgQ291bnRyeSBhbmQgb3IgUmVnaW9uDQoJCQkkdGF4TGV2ZWwxID0gc2VsZjo6Z2V0VGF4UnVsZSgxLCRjb3VudHJ5LCRyZWdpb24pOw0KCQkJLy8gbm93IGdldCB0YXggbGV2ZWwgMiBvZiB0aGlzIENvdW50cnkgYW5kIG9yIFJlZ2lvbg0KCQkJJHRheExldmVsMiA9IHNlbGY6OmdldFRheFJ1bGUoMiwkY291bnRyeSwkcmVnaW9uKTsNCgkJCS8vIHRheCB0eXBlcw0KCQkJJHRheF90eXBlID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ3RheF90eXBlJywgMik7DQoJCQkvLyB0YXggY29tcG91bmQNCgkJCSR0YXhfY29tcG91bmQgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyktPmdldCgndGF4X2NvbXBvdW5kJywgbnVsbCk7DQoJCQkvLyBiYXNlZCBvbiB0YXggdHlwZQ0KCQkJaWYgKDIgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCS8vIHRheCBleGNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGF4WzBdWyduYW1lJ10gPSAkdGF4TGV2ZWwxWyduYW1lJ107DQoJCQkJCSR0YXhbMF1bJ3RheCddID0gJHRheExldmVsMVsndGF4J107DQoJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwxWyd0YXgnXSwgMjApOw0KCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0bXBBbW91bnQsIDEwMCwgNCk7DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGF4ZWRTdWIgPSBiY2FkZCgkdGF4ZWQsICR0YXhbMF1bJ2Ftb3VudCddLCAyMCk7DQoJCQkJCQkkdG1wQW1vdW50ID0gIGJjbXVsKCR0YXhlZFN1YiwgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRtcEFtb3VudCwgMTAwLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdG1wQW1vdW50LCAxMDAsIDQpOw0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzFdWydhbW91bnQnXTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCSRyZW1vdmFsID0gYXJyYXkoKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCX0NCgkJCQkkcmVtb3ZhbCA9IHNlbGY6OmJjc3VtKCRyZW1vdmFsKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFswXVsnbmFtZSddID0gJHRheExldmVsMVsnbmFtZSddOw0KCQkJCQkkdGF4WzBdWyd0YXgnXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmICR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsX2EgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRlbXBWYWwzID0gYmNkaXYoJHRheExldmVsMVsndGF4J10sIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWw0ID0gYmNhZGQoJHRlbXBWYWwzLCAxLCAyMCk7DQoJCQkJCQkkdGVtcFZhbF9iID0gYmNkaXYoJHRlbXBWYWxfYSwgJHRlbXBWYWw0LCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9ICBiY3N1YigkdGVtcFZhbF9hLCAkdGVtcFZhbF9iLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCRyZW1vdmFsLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJGV4Y2x1ZGluZyA9IGJjZGl2KCR0YXhlZCwgJHRlbXBWYWwyLCAyMCk7DQoJCQkJCQkkdGVtcFZhbCA9IGJjbXVsKCRleGNsdWRpbmcsICR0YXhMZXZlbDFbJ3RheCddLCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0ZW1wVmFsLCAxMDAsIDQpOyANCgkJCQkJfQ0KCQkJCQkvLyByZW1vdmUgZnJvbSBwcmljZQ0KCQkJCQkkZGVkdWN0W10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNzdWIoJHRheGVkLCAkdGVtcFZhbCwgNCk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkdGF4WzFdWyduYW1lJ10gPSAkdGF4TGV2ZWwyWyduYW1lJ107DQoJCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQkJJHRlbXBWYWwxID0gYmNkaXYoJHJlbW92YWwsIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWwyID0gYmNhZGQoJHRlbXBWYWwxLCAxLCAyMCk7DQoJCQkJCQkkZXhjbHVkaW5nID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNtdWwoJGV4Y2x1ZGluZywgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRlbXBWYWwsIDEwMCwgNCk7IA0KCQkJCQl9DQoJCQkJCS8vIHJlbW92ZSBmcm9tIHByaWNlDQoJCQkJCSRkZWR1Y3RbXSA9ICR0YXhbMV1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyB0YXggc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheCkpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSB0YXggdG8gdG90YWwNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheEFkZFRvdGFsKSkNCgkJCQl7DQoJCQkJCSR0YXhlZCA9IHNlbGY6OmJjc3VtKCR0YXhBZGRUb3RhbCk7DQoJCQkJCSR0b3RhbCA9IHNlbGY6OmJjc3VtKGFycmF5KCR0b3RhbCwgJHRheGVkKSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRlZHVjdCkpDQoJCQkJew0KCQkJCQkkdGF4ZWQgPSBzZWxmOjpiY3N1bSgkZGVkdWN0KTsNCgkJCQl9DQoJCQkJcmV0dXJuICR0YXg7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkJDQoJcHJvdGVjdGVkIHN0YXRpYyAkdGF4cnVsZXMgPSBhcnJheSgpOw0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUYXhSdWxlKCRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIGJ1aWxkIHRoZSBrZXkNCgkJJGtleSA9ICRsZXZlbC4kY291bnRyeS4kcmVnaW9uOw0KCQkvLyBjaGVjayBpZiBpdCBoYXMgYmVlbiBzZXQNCgkJaWYgKCFpc3NldChzZWxmOjokdGF4cnVsZXNbJGtleV0pKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBzZXQgdGhlIHRheCBydWxlDQoJCQlzZWxmOjpzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSwgJHJlZ2lvbik7DQoJCX0NCgkJaWYgKGlzc2V0KHNlbGY6OiR0YXhydWxlc1ska2V5XSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHRheHJ1bGVzWyRrZXldKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiR0YXhydWxlc1ska2V5XTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSA9IDAsICRyZWdpb24gPSAwKQ0KCXsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoDQoJCQlhcnJheSgJJ2EuaWQnLCdhLnRheCcsJ2EubmFtZScpLA0KCQkJYXJyYXkoCSdpZCcsJ3RheCcsJ25hbWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV90YXhfcnVsZScsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5sZXZlbCcpIC4gJyA9ICcuIChpbnQpICRsZXZlbCk7DQoJCS8vIGNoZWNrIGZvciBjb3VudHJ5IGFuZCByZWdpb24NCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb3VudHJ5JykgLiAnID0gJy4gKGludCkgJGNvdW50cnkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnJlZ2lvbicpIC4gJyA9ICcuIChpbnQpICRyZWdpb24pOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXNlbGY6OiR0YXhydWxlc1ska2V5XSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCX0NCgkJZWxzZWlmICgoaW50KSRjb3VudHJ5ID4gMCAmJiAoaW50KSRyZWdpb24gPiAwKQ0KCQl7DQoJCQkvLyBub3cgb25seSBjaGVjayBmb3IgY291bnRyeQ0KCQkJcmV0dXJuIHNlbGY6OnNldFRheFJ1bGUoJGRiLCAka2V5LCAkbGV2ZWwsICRjb3VudHJ5KTsNCgkJfQ0KCQllbHNlaWYgKChpbnQpJGNvdW50cnkgPiAwICYmICRyZWdpb24gPT0gMCkNCgkJew0KCQkJLy8gbm93IGNoZWNrIGZvciBhbnkgd2l0aG91dCBjb3VudHJ5DQoJCQlyZXR1cm4gc2VsZjo6c2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCk7DQoJCX0NCgl9DQoNCgkvKioNCgkqIEBwYXJhbSBmbG9hdCAkYW1vdW50DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiY3N1bSgkYXJyYXksICRzY2FsZSA9IDQpDQoJew0KCQkkcmVzID0gMC4wOw0KCQlmb3JlYWNoKCRhcnJheSBhcyAkdmFsKXsNCgkJCSRyZXMgPSBiY2FkZCgkcmVzLCAkdmFsLCAkc2NhbGUpOw0KCQl9DQoJCXJldHVybiAkcmVzOw0KCX0NCg0KCS8qKg0KCSogQHBhcmFtIGZsb2F0ICRhbW91bnQNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZEN1cnJlbmN5KCRhbW91bnQpDQoJew0KCQlyZXR1cm4gc2VsZjo6bWFrZU1vbmV5KCRhbW91bnQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGN1cnJlbmN5RGV0YWlscyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEN1cnJlbmN5RGV0YWlscygkY29kZXRocmVlID0gZmFsc2UpDQoJew0KCQkvLyBjaGVjayBpZiBjdXJyZW5jeSBjb2RldGhyZWUgaXMgc2V0DQoJCWlmICghJGNvZGV0aHJlZSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBtYWluIGN1cnJlbmN5DQoJCQkkY29kZXRocmVlID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ2N1cnJlbmN5JywgbnVsbCk7DQoJCX0NCgkJLy8gcmV0dXJuIGNhY2hlZCBkYXRhIGlmIHNldA0KCQlpZiAoJGNvZGV0aHJlZSAmJiAhaXNzZXQoc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoDQoJCQkJYXJyYXkoCSdhLmlkJywnYS5uYW1lJywnYS5jb2RldGhyZWUnLCdhLm51bWVyaWNjb2RlJywnYS5zeW1ib2wnLCdhLnRob3VzYW5kcycsJ2EuZGVjaW1hbHBsYWNlJywNCgkJCQkJJ2EuZGVjaW1hbHN5bWJvbCcsJ2EucG9zaXRpdmVzdHlsZScsJ2EubmVnYXRpdmVzdHlsZScpLA0KCQkJCWFycmF5KAknY3VycmVuY3lfaWQnLCdjdXJyZW5jeV9uYW1lJywnY3VycmVuY3lfY29kZXRocmVlJywnY3VycmVuY3lfbnVtZXJpY2NvZGUnLCdjdXJyZW5jeV9zeW1ib2wnLA0KCQkJCQknY3VycmVuY3lfdGhvdXNhbmRzJywnY3VycmVuY3lfZGVjaW1hbHBsYWNlJywnY3VycmVuY3lfZGVjaW1hbHN5bWJvbCcsJ2N1cnJlbmN5X3Bvc2l0aXZlc3R5bGUnLA0KCQkJCQknY3VycmVuY3lfbmVnYXRpdmVzdHlsZScpKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jdXJyZW5jeScsICdhJykpOw0KCQkJaWYgKGlzX251bWVyaWMoJGNvZGV0aHJlZSkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuIChpbnQpICRjb2RldGhyZWUpOw0KCQkJfQ0KCQkJZWxzZWlmIChzdHJsZW4oJGNvZGV0aHJlZSkgPT0gMykNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmNvZGV0aHJlZScpIC4gJyA9ICcuJGRiLT5xdW90ZSgkY29kZXRocmVlKSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb2RldGhyZWUnKSAuICcgPSAnLiRkYi0+cXVvdGUoJ05PTkUnKSk7DQoJCQl9DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQl9DQoJCX0NCgkJLy8gbWFrZSBzdXJlIGl0IGhhcyBiZWVuIHNldA0KCQlpZiAoaXNzZXQoc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKglQdWJsaXNoIGFsbCByZWxhdGVkIGRhdGEgZnJvbSB0aGUgc3lzdGVtDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwdWJsaXNoUmVsYXRlZERhdGEoJiRwa3MsICR2YWx1ZSwgICR0eXBlKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJLy8gY2xlYXIgYWxsIHJlbGF0ZWQgZGF0YSB0byBqb2Jfb3JkZXJzDQoJCQljYXNlICdqb2Jfb3JkZXInOg0KCQkJCS8vIGdldCBuZWVkZWRfaXRlbSBpZHMgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGlzIGpvYiBvcmRlcg0KCQkJCSRpZHMgPSBzZWxmOjpnZXRWYXJzKCduZWVkZWRfaXRlbScsICRwa3MsICdqb2Jfb3JkZXInKTsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGlkcykpDQoJCQkJew0KCQkJCQkvLyBnZXQgbW9kZWwNCgkJCQkJJG5lZWRlZEl0ZW0gPSBzZWxmOjpnZXRNb2RlbCgnbmVlZGVkX2l0ZW0nKTsNCgkJCQkJLy8gdXBkYXRlIHRoZSBzdGF0ZQ0KCQkJCQkkbmVlZGVkSXRlbS0+cHVibGlzaCgkaWRzLCAoaW50KSAkdmFsdWUpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQkJZGVmYXVsdDoNCgkJCQkvLyBkbyBub3RoaW5nDQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqCURlbGV0ZSBhbGwgcmVsYXRlZCBkYXRhIGZyb20gdGhlIHN5c3RlbQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVsZXRlUmVsYXRlZERhdGEoJHBrcywgJHR5cGUpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQkvLyBjbGVhciBhbGwgcmVsYXRlZCBkYXRhIHRvIGpvYl9vcmRlcnMNCgkJCWNhc2UgJ2pvYl9vcmRlcic6DQoJCQkJLy8gZ2V0IG5lZWRlZF9pdGVtIGlkcyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoaXMgam9iIG9yZGVyDQoJCQkJJGlkcyA9IHNlbGY6OmdldFZhcnMoJ25lZWRlZF9pdGVtJywgJHBrcywgJ2pvYl9vcmRlcicpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJCQl7DQoJCQkJCS8vIGdldCBtb2RlbA0KCQkJCQkkbmVlZGVkSXRlbSA9IHNlbGY6OmdldE1vZGVsKCduZWVkZWRfaXRlbScpOw0KCQkJCQkvLyBmaXJzdCBtb3ZlIHRvIHRyYXNoDQoJCQkJCSRuZWVkZWRJdGVtLT5wdWJsaXNoKCRpZHMsICctMicpOw0KCQkJCQkvLyB0aGVuIGRlbGV0ZSB0aGUgbmVlZGVkX2l0ZW1zDQoJCQkJCSRuZWVkZWRJdGVtLT5kZWxldGUoJGlkcyk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCS8vIGRvIG5vdGhpbmcNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJLyoqDQoJKiBHZXQgQ1NWIEhlYWRlcnMNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUhlYWRlcnNDU1YoJHBhdGgpDQoJew0KCQkvLyBzZXQgdGhlIGhlYWRlcnMNCgkJaWYoKCRoYW5kbGUgPSBmb3BlbigkcGF0aCwgJ3InKSkgIT09IGZhbHNlKQ0KCQl7DQoJCQkkcmVzdWx0ID0gZmdldGNzdigkaGFuZGxlKTsNCgkJCWZjbG9zZSgkaGFuZGxlKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSkNCgkJCXsNCgkJCQkka2V5ID0gJ0EnOw0KCQkJCWZvcmVhY2ggKCRyZXN1bHQgYXMgJGhlYWRlcikNCgkJCQl7DQoJCQkJCSRoZWFkZXJzWyRrZXldID0gJGhlYWRlcjsNCgkJCQkJJGtleSsrOw0KCQkJCX0NCgkJCQlyZXR1cm4gJGhlYWRlcnM7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1nZXRDb21wYW55RGV0YWlsc10NCltDVVNUT01DT0RFPW1ha2VNb25leV0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVd', '', '', '', '', '', '', 'Ly8gbG9hZCB0aGUgaGVscGVyIGNsYXNzDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KLy8gY2hlY2sgdGhlIHZlcnNpb24gb2YgSkNCDQokbWFuaWZlc3QgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Om1hbmlmZXN0KCk7DQppZiAoaXNzZXQoJG1hbmlmZXN0LT52ZXJzaW9uKSAmJiBzdHJwb3MoJG1hbmlmZXN0LT52ZXJzaW9uLCAnLicpICE9PSBmYWxzZSkNCnsNCgkvLyBnZXQgdGhlIHZlcnNpb24NCgkkdGhpcy0+SkNCdmVyc2lvbiA9IGV4cGxvZGUoJy4nLCAkbWFuaWZlc3QtPnZlcnNpb24pOw0KCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoNCgkvLyB0YXJnZXQgdmVyc2lvbiBsZXNzIHRoZW4gb3IgZXF1YWwgdG8gMS4yLjQNCglpZiAoY291bnQoJHRoaXMtPkpDQnZlcnNpb24pID09IDMgJiYgJHRoaXMtPkpDQnZlcnNpb25bMF0gPT0gMSAmJiAoJHRoaXMtPkpDQnZlcnNpb25bMV0gPCAyIHx8ICgkdGhpcy0+SkNCdmVyc2lvblsxXSA9PSAyICYmICR0aGlzLT5KQ0J2ZXJzaW9uWzJdIDw9IDQpKSkNCgl7DQoJCSRmaXhfY2F0ZWdvcmllcyA9IGFycmF5KA0KCQkJJ2NvbV9qb2J0cmFja2luZy5pdGVtcycgPT4gJ2NvbV9qb2J0cmFja2luZy5pdGVtJw0KCQkpOw0KCQkvLyB0YXJnZXRlZCB0YWJsZXMgKHRvIGZpeCBhbGwgcGxhY2VzIGNhdGVnb3JpZXMgYXJlIG1hcHBlZCBpbnRvIEpvb21sYSkNCgkJJGZpeF90YWJsZXMgPSBhcnJheSgNCgkJCSdjb250ZW50X3R5cGVzJyA9PiBhcnJheSgNCgkJCQknaWQnID0+ICd0eXBlX2lkJywNCgkJCQkna2V5JyA9PiAndHlwZV9hbGlhcycsDQoJCQkJJ3N1ZmZpeCcgPT4gJy5jYXRlZ29yeScpLA0KCQkJJ2NvbnRlbnRpdGVtX3RhZ19tYXAnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ3R5cGVfaWQnLA0KCQkJCSdrZXknID0+ICd0eXBlX2FsaWFzJywNCgkJCQknc3VmZml4JyA9PiAnLmNhdGVnb3J5JyksDQoJCQkndWNtX2NvbnRlbnQnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ2NvcmVfY29udGVudF9pZCcsDQoJCQkJJ2tleScgPT4gJ2NvcmVfdHlwZV9hbGlhcycsDQoJCQkJJ3N1ZmZpeCcgPT4gJy5jYXRlZ29yeScpLA0KCQkJJ2NhdGVnb3JpZXMnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ2lkJywNCgkJCQkna2V5JyA9PiAnZXh0ZW5zaW9uJywNCgkJCQknc3VmZml4JyA9PiAnJykNCgkJKTsNCg0KCQkvLyB0aGUgc2NyaXB0IHRoYXQgZG9lcyB0aGUgd29yaw0KCQlmb3JlYWNoICgkZml4X2NhdGVnb3JpZXMgYXMgJGZpeCA9PiAkY2F0ZWdvcnkpDQoJCXsNCgkJCS8vIGxvb3Agb3ZlciB0aGUgdGFyZ2V0ZWQgdGFibGVzDQoJCQlmb3JlYWNoICgkZml4X3RhYmxlcyBhcyAkX3RhYmxlID0+ICRfdXBkYXRlKQ0KCQkJew0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyBnZXQgYWxsIHR5cGVfaWRzDQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2lkJ10pKTsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycgLiAkX3RhYmxlKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSggJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2tleSddKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkZml4IC4gJF91cGRhdGVbJ3N1ZmZpeCddKSk7DQoJCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQkJew0KDQoJCQkJCS8vIGFsbCB0aGVzZSBtdXN0IGJlIHVwZGF0ZWQNCgkJCQkJJGlkcyA9ICRkYi0+bG9hZENvbHVtbigpOw0KCQkJCQkvLyBGaWVsZHMgdG8gdXBkYXRlLg0KCQkJCQkkZmllbGRzID0gYXJyYXkoDQoJCQkJCQkkZGItPnF1b3RlTmFtZSgkX3VwZGF0ZVsna2V5J10pIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRjYXRlZ29yeSAuICRfdXBkYXRlWydzdWZmaXgnXSkNCgkJCQkJKTsNCgkJCQkJLy8gQ29uZGl0aW9ucyBmb3Igd2hpY2ggcmVjb3JkcyBzaG91bGQgYmUgdXBkYXRlZC4NCgkJCQkJJGNvbmRpdGlvbnMgPSBhcnJheSgNCgkJCQkJCSRkYi0+cXVvdGVOYW1lKCRfdXBkYXRlWydpZCddKSAuICcgSU4gKCcgLiBpbXBsb2RlKCcsICcsICRpZHMpIC4gJyknDQoJCQkJCSk7DQoJCQkJCSRxdWVyeS0+dXBkYXRlKCRkYi0+cXVvdGVOYW1lKCcjX18nIC4gJF90YWJsZSkpLT5zZXQoJGZpZWxkcyktPndoZXJlKCRjb25kaXRpb25zKTsNCgkJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCQkkcmVzdWx0ID0gJGRiLT5leGVjdXRlKCk7DQoJCQkJCS8vIG9uIHN1Y2Nlc3MNCgkJCQkJaWYgKCRyZXN1bHQpDQoJCQkJCXsNCgkJCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCI8cD5VcGRhdGVkIDxiPiNfXyRfdGFibGUgLSAiIC4gJF91cGRhdGVbJ2tleSddIC4gIjwvYj4gZnJvbSA8Yj4kZml4PC9iPiIgLiAkX3VwZGF0ZVsnc3VmZml4J10gLiAiIHRvIDxiPiRjYXRlZ29yeTwvYj4iIC4gJF91cGRhdGVbJ3N1ZmZpeCddIC4gIiE8L3A+IiwgJ05vdGljZScpOw0KCQkJCQl9DQoNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Job Tracking System', '', '', 'Job Tracking System (public)', '.git', '', '', 1, 'https://www.vdm.io/updates/jobtracking_update_server.xml', 'http://www.vdm.io', '', 'CJpVqCNFjGXI6kAZq2SeW2o81dbCpl/nKa1qKI95sxc=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 276, '', 1, 65),
(21, 1, '', '', '', 1, '', '', 1, 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', '', '{}', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.9', 'Copyright (C) 2015. All Rights Reserved', '2016-04-12 06:15:10', 1, 'W+rX/bAf3YBY7mg27LxP1c1hUSTt/X3nrC92YrQ6N4w=', 'V2dMVofpOp4cynARFJWeWoTjXJoU80WVQIYa+tr/HbU=', '', '6ICvaCumsJ9IXoiqJ535qHF8Qt/CQwBRb54bQEdV1JA=', '', '', '', 1, '', 'Event registration component.', 'joomla@vdm.io', '', '', 'Mp77p5kOVAltncyTBfVIrsdXLV5sQWDqmsQFJ3O9Dq4=', '', 'e9b1b779-cb04-453c-b606-31c3e12e92c9', 'images/event_registry.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 3, '', '2021-03-08 03:12:03', 1, 'Registry', 'registry', '', 4, 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw0KCQkvLyBjbGVhciB0aGUgY2FydCBpdGVtcyBpZiBleHBpcmVkDQoJCXNlbGY6OmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KTs=', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnTG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ0xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCWNhbmNlbCBFeHBpcmVkIENhcnQgSXRlbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KQ0KCXsNCgkJLy8gYWRkIGFuIGV2ZW50IHRoYXQgd2lsbCBzZW5kIG91dCBhbGwgY29uZmlybWF0aW9uIGVtYWlscywgbm90IHlldCBzZW5kDQoJCSRkb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oIg0KCQkJalF1ZXJ5KHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQljYW5jZWxFeHBpcmVkQ2FydEl0ZW1zKDEpLmRvbmUoZnVuY3Rpb24ocmVzdWx0KSB7DQoJCQkJCWlmKHJlc3VsdCl7DQoJCQkJCQljb25zb2xlLmxvZyhyZXN1bHQpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2FuY2VsRXhwaXJlZENhcnRJdGVtcyh0eXBlKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguY2FuY2VsRXhwaXJlZENhcnRJdGVtcyZmb3JtYXQ9anNvbic7DQoJCQkJaWYodHlwZSA+IDApew0KCQkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnR5cGU9Jyt0eXBlOw0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnUE9TVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0iKTsNCgl9', 'CXB1YmxpYyBzdGF0aWMgJGV2ZW50Ow0KCXB1YmxpYyBzdGF0aWMgJGV2ZW50QnVpbGRlciA9IGFycmF5KCk7DQoJcHVibGljIHN0YXRpYyAkY29uY2VwdEhUTUwgPSBhcnJheSgpOw0KCXB1YmxpYyBzdGF0aWMgJGV2ZW50T3B0aW9ucyA9IGFycmF5KCk7DQoJcHVibGljIHN0YXRpYyAkbG9jYXRpb25zID0gYXJyYXkoKTsNCglwdWJsaWMgc3RhdGljICRmaWx0ZXJJbnB1dDsNCglwdWJsaWMgc3RhdGljICRvcmdhbml6ZXIgPSBudWxsOw0KCXB1YmxpYyBzdGF0aWMgJHJlZ2lzdGVyZWQgPSBudWxsOw0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkZGlzYWJsZUJ1dHRvbnMgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGRpc2FibGVCdXR0b25zQ2hlY2sgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbmNlcHRTd2l0Y2hPbmx5ID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRidW5kbGVTd2l0Y2hPbmx5ID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRjb25jZXB0cyA9IGFycmF5KCk7DQoJcHJvdGVjdGVkIHN0YXRpYyAkY29uY2VwdERhdGEgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbnRlbnREYXRhID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRidXR0b25TY3JpcHQgPSBhcnJheSgnICcpOw0KCXByb3RlY3RlZCBzdGF0aWMgJHJldHVyblR5cGU7DQoJcHJvdGVjdGVkIHN0YXRpYyAkZmlsZXBhdGggPSAnJzsNCglwcm90ZWN0ZWQgc3RhdGljICRmaWxlbGluayA9ICcnOw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCglwcm90ZWN0ZWQgc3RhdGljICR1c2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2tlcjsNCglwcm90ZWN0ZWQgc3RhdGljICRiYXNpY2tleTsNCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWdldEl0ZW1EYXRhXQ0KCS8qKg0KCSogCXNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gZ2V0IHVzZXIgb2JqZWN0DQoJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkvLyBmaXJzdCBjaGVjayBpZiBhbnkgd2FzIGFscmVhZHkgc2V0DQoJCWlmICghJGN1cnJlbmN5ID0gc2VsZjo6Z2V0KCdBQ1RJVkVfQ1VSUkVOQ1knLCBudWxsKSkNCgkJew0KCQkJaWYgKCR1c2VyLT5pZCA+IDApDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSBhY3RpdmUgdXNlcnMgY3VycmVuY3kNCgkJCQlzZWxmOjpzZXQoJ0FDVElWRV9DVVJSRU5DWScsIHNlbGY6OmdldFVzZXJDdXJyZW5jeSgkdXNlcikpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBwdWJsaWMgY3VycmVuY3kNCgkJCQlzZWxmOjpzZXQoJ0FDVElWRV9DVVJSRU5DWScsIHNlbGY6OmdldFB1YmxpY0N1cnJlbmN5KCkpOw0KCQkJfQ0KCQl9DQoJCS8vIHNldCBwdWJsaWMga2V5IGlmIG5lZWRlZA0KCQlpZiAoICR1c2VyLT5pZCA9PSAwKQ0KCQl7DQoJCQlpZiAoISRwdWJsaWMgPSBzZWxmOjpnZXQoJ3B1YmxpY0tlZVknLCBudWxsKSkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIGFjdGl2ZSB1c2VycyBwdWJsaWMNCgkJCQlzZWxmOjpzZXQoJ3B1YmxpY0tlZVknLCBzZWxmOjpyYW5kb21rZXkoNykpOw0KCQkJfQ0KCQl9DQoJfQ0KW0NVU1RPTUNPREU9dXNlcklzVGhyZWUrYWRtaW51c2VyLG9yZ2FuaXplcnVzZXIscmVnaXN0ZXJlZHVzZXIsb3JnYW5pemVyLHJlZ2lzdGVyZWRfdXNlcl0NCgkvKioNCgkqIAl0aGUgcHVibGljIGN1cnJlbmN5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXNlcnNDdXJyZW5jeSA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlnZXQgdGhlIHVzZXIgY3VycmVuY3kNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVzZXJDdXJyZW5jeSgkdXNlcklkID0gbnVsbCkNCgl7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkdXNlcklkKSAmJiAkdXNlcklkIGluc3RhbmNlb2YgSlVzZXIpDQoJCXsNCgkJCSR1c2VyID0gJHVzZXJJZDsNCgkJfQ0KCQllbHNlaWYgKGlzX251bWVyaWMoJHVzZXJJZCkgJiYgJHVzZXJJZCA+IDApDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIG9ubHkgc2V0IGFnYWluIGlmIG5vdCBmb3VuZA0KCQlpZiAoIWlzc2V0KHNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0pKQ0KCQl7DQoJCQkkYXJyYXkgPSAoYXJyYXkpIHNlbGY6OnVzZXJJcygkdXNlciwgdHJ1ZSk7DQoJCQkvLyBzZXQgaW4gcmVsYXRpb24NCgkJCXN3aXRjaCgkYXJyYXlbJ2lzJ10pDQoJCQl7DQoJCQkJLy8gYWRtaW4gdXNlIGdsb2JhbA0KCQkJCWNhc2UgMzogDQoJCQkJc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKTsNCgkJCQlicmVhazsNCgkJCQkvLyBvcmdhbml6ZXIgY3VycmVuY3kNCgkJCQljYXNlIDI6DQoJCQkJc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSA9IHNlbGY6OmdldFZhcignb3JnYW5pemVyJywgJGFycmF5WydpZCddLCAnaWQnLCAgJ2N1cnJlbmN5Jyk7DQoJCQkJYnJlYWs7DQoJCQkJLy8gcmVnaXN0ZXJlZCB1c2VyIGN1cnJlbmN5DQoJCQkJY2FzZSAxOg0KCQkJCXNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0gPSBzZWxmOjpnZXRSZWdVc2VyVmFsdWUoJGFycmF5WydpZCddLCAnY3VycmVuY3lfY29kZXRocmVlJywgc2VsZjo6Z2V0UHVibGljQ3VycmVuY3koKSk7DQoJCQkJYnJlYWs7DQoJCQkJLy8gYWxsIG90aGVyIGdldHMgdGhlIHB1YmxpYw0KCQkJCWRlZmF1bHQ6DQoJCQkJcmV0dXJuIHNlbGY6OmdldFB1YmxpY0N1cnJlbmN5KCk7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF07DQoJfQ0KDQoJLyoqDQoJKiAJdGhlIGV2ZW50IGN1cnJlbmN5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkZXZlbnRDdXJyZW5jeSA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlnZXQgdGhlIHVzZXIgY3VycmVuY3kNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50Q3VycmVuY3koJGlkID0gbnVsbCkNCgl7DQoJCWlmIChpc19udW1lcmljKCRpZCkgJiYgJGlkID4gMCkNCgkJew0KCQkJJGV2ZW50ID0gKGludCkgJGlkOw0KCQl9DQoJCWVsc2VpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5pZCkgJiYgc2VsZjo6JGV2ZW50LT5pZCA+IDApDQoJCXsNCgkJCSRldmVudCA9IChpbnQpIHNlbGY6OiRldmVudC0+aWQ7DQoJCX0NCgkJZWxzZWlmICghJGlkICYmIGlzc2V0KHNlbGY6OiRldmVudC0+b3JnYW5pemVyKSAmJiBzZWxmOjokZXZlbnQtPm9yZ2FuaXplciA+IDApDQoJCXsNCgkJCWlmICgkY3VycmVuY3kgPSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsIHNlbGY6OiRldmVudC0+b3JnYW5pemVyLCAnaWQnLCAnY3VycmVuY3knKSkNCgkJCXsNCgkJCQlyZXR1cm4gJGN1cnJlbmN5Ow0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gcmV0dXJuIGRlZmF1bHQgY3VycmVuY3kgb2YgdGhlIGN1cnJlbnQgdXNlcg0KCQkJcmV0dXJuIHNlbGY6OmdldFVzZXJDdXJyZW5jeSgpOw0KCQl9DQoJCS8vIGNoZWNrIGlmIGFscmVhZHkgc2V0DQoJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50Q3VycmVuY3lbJGV2ZW50XSkpDQoJCXsNCgkJCS8vIGdldCBldmVudCBvcmdhbml6ZXINCgkJCWlmICghJGlkICYmIGlzc2V0KHNlbGY6OiRldmVudC0+b3JnYW5pemVyKSAmJiBzZWxmOjokZXZlbnQtPm9yZ2FuaXplciA+IDApDQoJCQl7DQoJCQkJaWYgKCRjdXJyZW5jeSA9IHNlbGY6OmdldFZhcignb3JnYW5pemVyJywgc2VsZjo6JGV2ZW50LT5vcmdhbml6ZXIsICdpZCcsICdjdXJyZW5jeScpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50Q3VycmVuY3lbJGV2ZW50XSA9ICRjdXJyZW5jeTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKCRvcmdJZCA9IHNlbGY6OmdldFZhcignZXZlbnQnLCAkZXZlbnQsICdpZCcsICdvcmdhbml6ZXInKSkNCgkJCXsNCgkJCQlpZiAoJGN1cnJlbmN5ID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnSWQsICdpZCcsICdjdXJyZW5jeScpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50Q3VycmVuY3lbJGV2ZW50XSA9ICRjdXJyZW5jeTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmV0dXJuIGlmIGZvdW5kDQoJCWlmIChpc3NldChzZWxmOjokZXZlbnRDdXJyZW5jeVskZXZlbnRdKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiRldmVudEN1cnJlbmN5WyRldmVudF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KDQoJLyoqDQoJKiAJdGhlIHB1YmxpYyBjdXJyZW5jeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHB1YmxpY0N1cnJlbmN5ID0gJ3NldCc7DQoNCgkvKioNCgkqIAlzZXQgdGhlIHB1YmxpYy9kZWZhdWx0IGN1cnJlbmN5DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQdWJsaWNDdXJyZW5jeSgpDQoJew0KCQlpZiAoJ3NldCcgPT09IHNlbGY6OiRwdWJsaWNDdXJyZW5jeSkNCgkJew0KCQkJLy8gZ2V0IHRoaXMgbG9jYXRpb24gZGF0YQ0KCQkJJGxvY2F0aW9uRGF0YSA9IHNlbGY6OmdldExvY2F0aW9uZGF0YSgpOw0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBsb2NhdGlvbiBkYXRhDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGxvY2F0aW9uRGF0YSkgJiYgaXNzZXQoJGxvY2F0aW9uRGF0YVsnQ1VSUkVOQ1lfQ09ERV9USFJFRSddKSkNCgkJCXsNCgkJCQlzZWxmOjokcHVibGljQ3VycmVuY3kgPSAkbG9jYXRpb25EYXRhWydDVVJSRU5DWV9DT0RFX1RIUkVFJ107DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJc2VsZjo6JHB1YmxpY0N1cnJlbmN5ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2N1cnJlbmN5JywgJ1VTRCcpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokcHVibGljQ3VycmVuY3k7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIG93bmVyDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkb3duZXIgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJYXJyYXkgdG8gY2hlY2sgdXNlcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGNoZWNrVXNlciA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAl3YW50cyB0byBlZGl0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdmlld0FjY2VzczsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzQWNjZXNzKCRyZWNvcmRJZCwgJHVzZXJJZCA9IG51bGwsICR0byA9ICdldmVudCcsICR2aWV3QWNjZXNzID0gZmFsc2UpDQoJew0KCQkvLyBzZXQgaWYgdmlldyBhY2Nlc3MgaXMgYWxsIHRoYXQgaXMgcmVxdWlyZWQgDQoJCXNlbGY6OiR2aWV3QWNjZXNzID0gJHZpZXdBY2Nlc3M7DQoJCWlmKCEkdXNlcklkKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdXNlcikpDQoJCQl7DQoJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCXNlbGY6OiR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkJfQ0KCQkJJHVzZXJJZCA9IHNlbGY6OiR1c2VyLT5pZDsNCgkJfQ0KCQkkYXJyYXkgPSAoYXJyYXkpIHNlbGY6OnVzZXJJcygkdXNlcklkLCB0cnVlKTsNCgkJaWYgKGlzc2V0KCRhcnJheVsnaXMnXSkgJiYgJGFycmF5WydpcyddICYmICRyZWNvcmRJZCA+IDApDQoJCXsNCgkJCXN3aXRjaCgkdG8pDQoJCQl7DQoJCQkJY2FzZSAnZXZlbnQnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzRXZlbnQoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAndmVudWUnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzVmVudWUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ29yZ2FuaXplcic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NPcmdhbml6ZXIoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2ludm9pY2UnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzSW52b2ljZSgkYXJyYXlbJ2lzJ10sICRyZWNvcmRJZCwgJGFycmF5WydpZCddLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdwYXltZW50X21ldGhvZCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NQYXltZW50TWV0aG9kKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3RheF9ydWxlJzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc1RheFJ1bGUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnbWVzc2FnZXNfYnVpbGRlcic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NNZXNzYWdlc0J1aWxkZXIoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY29uY2VwdCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NDb25jZXB0KCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdjb250ZW50JzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0NvbnRlbnQoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2J1bmRsZSc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NCdW5kbGUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0V2ZW50KCR0eXBlLCAkcmVjb3JkSWQsICRvcmdJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdldmVudCcsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID09ICRvcmdJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnZXZlbnQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmV2ZW50LicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NWZW51ZSgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsndmVudWUnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ3ZlbnVlJywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ3ZlbnVlLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS52ZW51ZS4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzT3JnYW5pemVyKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ29yZ2FuaXplci5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ub3JnYW5pemVyLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NJbnZvaWNlKCR0eXBlLCAkcmVjb3JkSWQsICRsb2NhbElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIGV2ZW50IG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2ludm9pY2UnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdpbnZvaWNlJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0OiAvLyBzZXQgdGhlIGRlZmF1bHQgdG8NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlicmVhazsNCgkJfQ0KCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQlpZiAoc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQl7DQoJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCXsNCgkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdpbnZvaWNlLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5pbnZvaWNlLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NQYXltZW50TWV0aG9kKCR0eXBlLCAkcmVjb3JkSWQsICRsb2NhbElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ3BheW1lbnRfbWV0aG9kJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsncGF5bWVudF9tZXRob2QnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ3BheW1lbnRfbWV0aG9kJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsncGF5bWVudF9tZXRob2QnLiRyZWNvcmRJZF0gPT0gJGxvY2FsSWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ3BheW1lbnRfbWV0aG9kLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5wYXltZW50X21ldGhvZC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzVGF4UnVsZSgkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJRCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCd0YXhfcnVsZScsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID09ICRsb2NhbElEKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdwYXltZW50X21ldGhvZC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ucGF5bWVudF9tZXRob2QuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc01lc3NhZ2VzQnVpbGRlcigkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ21lc3NhZ2VzX2J1aWxkZXInLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ21lc3NhZ2VzX2J1aWxkZXInLCAkcmVjb3JkSWQsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydtZXNzYWdlc19idWlsZGVyJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdtZXNzYWdlc19idWlsZGVyLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5tZXNzYWdlc19idWlsZGVyLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NDb25jZXB0KCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdjb25jZXB0JywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2NvbmNlcHQnLiRyZWNvcmRJZF0gPT0gJHVzZXJJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnY29uY2VwdC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uY29uY2VwdC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQ29udGVudCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnY29uY2VwdCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignY29uY2VwdCcsICRyZWNvcmRJZCwgJ2lkJywgJ2NyZWF0ZWRfYnknKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2NvbmNlcHQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbmNlcHQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgkJcmV0dXJuIHNlbGY6OiR1c2VyLT5hdXRob3Jpc2UoJ2NvbnRlbnQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbnRlbnQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQnVuZGxlKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdidW5kbGUnLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2J1bmRsZS5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uYnVuZGxlLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNJdGVtcygkdGFibGUsICR1c2VySWQgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRhcnJheSA9IChhcnJheSkgc2VsZjo6dXNlcklzKCR1c2VySWQsIHRydWUpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGFycmF5ID0gKGFycmF5KSBzZWxmOjp1c2VySXMoRmFjdG9yeTo6Z2V0VXNlcigpLT5pZCwgdHJ1ZSk7DQoJCX0NCgkJLy8gcmV0dXJuIGluIHJlbGF0aW9uDQoJCXN3aXRjaCgkYXJyYXlbJ2lzJ10pDQoJCXsNCgkJCS8vIHJlZ2lzdGVyZWQgKG9ubHkgbG9hZCBpdGVtcyB0aGF0IGJlbG9uZyB0byB0aGUgcmVnaXN0ZXJlZCB1c2VyKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIHNlbGY6OmdldFZhcnMoJHRhYmxlLCAkYXJyYXlbJ2lkJ10sICdyZWdpc3RlcmVkX3VzZXInKTsNCgkJCWJyZWFrOw0KCQkJLy8gb3JnYW5pemVyIChvbmx5IGxvYWQgaXRlbXMgdGhhdCBiZWxvbmcgdG8gdGhlIG9yZ2FuaXplcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBzZWxmOjpnZXRWYXJzKCR0YWJsZSwgJGFycmF5WydpZCddLCAnb3JnYW5pemVyJyk7DQoJCQlicmVhazsNCgkJCS8vIGFkbWluIGNhbiBhY2Nlc3MgYWxsDQoJCQljYXNlIDM6IA0KCQkJcmV0dXJuIC0xOw0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJExvY2F0aW9uZGF0YUhlbHBlciA9IGZhbHNlOyANCg0KCS8qKg0KCSogCUxvYWQgdGhlIGRhdGEgZm9yIElQIGFuZCBDdXJyZW5jeSANCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvY2F0aW9uZGF0YSgkaXAgPSBudWxsLCAkcHJvdG9jb2wgPSBudWxsLCAka2V5ID0gbnVsbCwgJGJhc2UgPSAnVVNEJywgJG1vZGUgPSAwLCAkc3RyaW5nID0gMCwgJHZhbHVlID0gMS4wMCkNCgl7CQkNCgkJaWYgKHNlbGY6OmxvYWRMb2NhdGlvbkRhdGEoKSkNCgkJew0KCQkJcmV0dXJuIExvY2F0aW9uZGF0YUhlbHBlcjo6Z2V0TG9jYXRpb25kYXRhKCRpcCwgJHByb3RvY29sLCAka2V5LCAkYmFzZSwgJG1vZGUsICRzdHJpbmcsICR2YWx1ZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIHJldHVybnMgRXhjaGFuZ2VSYXRlcw0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4Y2hhbmdlUmF0ZSgkZnJvbSwgJGZyb21WYWx1ZSwgJHRvID0gJ1VTRCcpDQoJew0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQlyZXR1cm4gTG9jYXRpb25kYXRhSGVscGVyOjpnZXRFeGNoYW5nZVJhdGUoJGZyb20sICRmcm9tVmFsdWUsICR0byk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZGF0YQ0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50KCRldmVudCwgJHR5cGUpDQoJew0KCQkvLyBpZiBvbmx5IGlkIGdpdmVuIGdldCB0aGUgb2JqZWN0DQoJCWlmIChpc19udW1lcmljKCRldmVudCkgJiYgJGV2ZW50ID4gMCApDQoJCXsNCgkJCSRldmVudCA9IHNlbGY6OmdldEFsbFZhbHVlcygkZXZlbnQsICdldmVudCcsIGFycmF5KCdldmVudF9kb2N1bWVudHMnLCdiYW5uZXJfaW1hZ2UnLCdwb3N0ZXJfaW1hZ2UnLCd0ZWFzZXJfaW1hZ2UnLCdldmVudF9pbWFnZXMnKSk7DQoJCX0NCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgZXZlbnQgb2JqZWN0LCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGRhdGENCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRldmVudCkpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBuZWVkZWQgZGF0ZXMNCgkJCWlmIChpc3NldCgkZXZlbnQtPmRhdGUpICYmICduZWUnICE9ICRldmVudC0+ZGF0ZSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmRhdGUpKQ0KCQkJew0KCQkJCSRldmVudC0+ZGF0ZSA9IGpzb25fZGVjb2RlKCRldmVudC0+ZGF0ZSwgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGNvc3QNCgkJCWlmIChpc3NldCgkZXZlbnQtPmNvc3QpICYmICduZWUnICE9ICRldmVudC0+Y29zdCAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmNvc3QpKQ0KCQkJew0KCQkJCSRldmVudC0+Y29zdCA9IGpzb25fZGVjb2RlKCRldmVudC0+Y29zdCwgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgaW1wb3J0YW50IGRhdGEgd2FzIHNldA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudC0+Y29zdCkgfHwgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5kYXRlKSkNCgkJCXsNCgkJCQkvLyBzZXQgYWRqdXN0bWVudHMNCgkJCQlpZiAoaXNzZXQoJGV2ZW50LT5hZGp1c3RtZW50KSAmJiAnbmVlJyAhPSAkZXZlbnQtPmFkanVzdG1lbnQgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5hZGp1c3RtZW50KSkNCgkJCQl7DQoJCQkJCSRldmVudC0+YWRqdXN0bWVudCA9IGpzb25fZGVjb2RlKCRldmVudC0+YWRqdXN0bWVudCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCS8vIHNldCBsaW1pdCBwZXIgZ3JvdXANCgkJCQlpZiAoaXNzZXQoJGV2ZW50LT5saW1pdHBlcmdyb3VwKSAmJiAnbmVlJyAhPSAkZXZlbnQtPmxpbWl0cGVyZ3JvdXAgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5saW1pdHBlcmdyb3VwKSkNCgkJCQl7DQoJCQkJCSRldmVudC0+bGltaXRwZXJncm91cCA9IGpzb25fZGVjb2RlKCRldmVudC0+bGltaXRwZXJncm91cCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCS8vIGZpbmFsIGNoZWNrDQoJCQkJaWYgKAlpc3NldCgkZXZlbnQtPnR5cGUpICYmIGlzX251bWVyaWMoJGV2ZW50LT50eXBlKSAmJg0KCQkJCQlpc3NldCgkZXZlbnQtPmlkKSAmJiBpc19udW1lcmljKCRldmVudC0+aWQpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50ID0gJGV2ZW50Ow0KCQkJCQkvLyBkYXRlIG9yIGp1c3QgY29zdA0KCQkJCQlyZXR1cm4gc2VsZjo6ZXZlbnRCdWlsZGVyKCR0eXBlKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkcmV0dXJuVHlwZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV2ZW50QnVpbGRlcigkcmV0dXJuVHlwZSkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJLy8gc2V0IHRoZSByZXR1cm4gdHlwZQ0KCQlzZWxmOjokcmV0dXJuVHlwZSA9ICRyZXR1cm5UeXBlOw0KCQkvLyBzZXR1cCBhIGZpbHRlcklucHV0DQoJCXNlbGY6OiRmaWx0ZXJJbnB1dCA9IG5ldyBKRmlsdGVySW5wdXQoKTsNCgkJLy8gc2V0IHRoZSBmaWxlIHBhdGgNCgkJc2VsZjo6JGZpbGVwYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgpOw0KCQkvLyBub3cgYWRkIHRoZSB1cmwgcGF0aCB0byBzaG93IHRoZSBpbWFnZQ0KCQlzZWxmOjokZmlsZWxpbmsgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRQYXRoKCd1cmwnKTsNCgkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQlzZWxmOjokYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJc2VsZjo6JGxvY2tlciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKHNlbGY6OiRiYXNpY2tleSwgMTI4KTsNCgkJLy8gcmVzZXQgZ2xvYmFsDQoJCSR0aW1lU2V0ID0gZmFsc2U7DQoJCS8vIGxvYWQgY29uY2VwdCBwZXIgZGF0ZQ0KCQlpZiAoc2VsZjo6c2V0RGF0ZXMoKSkNCgkJew0KCQkJJHRpbWVTZXQgPSB0cnVlOw0KCQl9DQoJCS8vIGxvYWQgY29uY2VwdCBwZXIgY29zdA0KCQllbHNlaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCXNlbGY6OiRjb25jZXB0cyA9IGFycmF5X3VuaXF1ZShhcnJheV9maWx0ZXIoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pKTsNCgkJfQ0KCQkvLyBjaGVjayBidW5kbGVyDQoJCXNlbGY6OnNldEJ1bmRsZXIoKTsNCgkJaWYgKGlzc2V0KHNlbGY6OiRjb25jZXB0cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbmNlcHRzKSkNCgkJew0KCQkJLy8gYnVpbGQgY29uY2VwdHMNCgkJCWZvcmVhY2ggKHNlbGY6OiRjb25jZXB0cyBhcyAkZXZlbnRfY29uY2VwdF90aW1lID0+ICRjb25jZXB0KQ0KCQkJew0KCQkJCWlmICghJHRpbWVTZXQpDQoJCQkJew0KCQkJCQkkZXZlbnRfY29uY2VwdF90aW1lID0gc2VsZjo6JGV2ZW50LT5pZC4nXycuJGNvbmNlcHQuJ19fMCc7DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIGNvbmNlcHQgZGl2DQoJCQkJc2VsZjo6JGNvbmNlcHRIVE1MWyRldmVudF9jb25jZXB0X3RpbWVdID0gc2VsZjo6YnVpbGRDb25jZXB0KCRjb25jZXB0LCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJfQ0KDQoJCQkvLyBsb2FkIG9ycGhhbiBwcmljZSB2YXJpYXRpb25zDQoJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSkNCgkJCXsNCgkJCQlzZWxmOjpsb2FkT3JwaGFuVmFyaWF0aW9ucygpOw0KCQkJfQ0KDQoJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIERpc3BsYXkgQ29udGVudA0KCQkJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJCQkkY29udGVudFtdID0gJzxkaXYgaWQ9InByZXZpZXciIGNsYXNzPSJ3aXJlLWJvcmRlciI+PGRpdiBjbGFzcz0idWstZ3JpZCI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstd2lkdGgtMS0xIj4nOw0KDQoJCQkJLy8gc2V0IHRoZSBFdmVudCBTdGFydCBhbmQgRW5kIERhdGUNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10pKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJldmVudC1zdGFydC1lbmQiPicuc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10uJzwvZGl2Pic7DQoJCQkJfQ0KCQkJCS8vIHNldCBldmVudCBuYW1lDQoJCQkJaWYgKHNlbGY6OiRldmVudC0+aWQgPiAwKQ0KCQkJCXsNCgkJCQkJJGVkaXQgPSAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKSA/IHNlbGY6OmxvYWRFZGl0QnV0dG9uKCdldmVudCcsc2VsZjo6JGV2ZW50LT5pZCkgOiAnJzsNCgkJCQkJJGVkaXRDbGFzcyA9IChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZWRpdCkpID8gJyBjbGFzcz0idWstdmlzaWJsZS1ob3Zlci1pbmxpbmUiJyA6ICcnOw0KCQkJCQlzZWxmOjokZXZlbnQtPm5hbWUgPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpOw0KCQkJCQkkY29udGVudFtdID0gJzxoMicuJGVkaXRDbGFzcy4nPicuIHNlbGY6OiRldmVudC0+bmFtZSAuICRlZGl0IC4nPC9oMj4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlzZWxmOjokZXZlbnQtPm5hbWUgPSBUZXh0OjpfKCdUaGUgRXZlbnQgTmFtZScpOw0KCQkJCQkkY29udGVudFtdID0gJzxoMj48c3BhbiBpZD0iZXZlbnROYW1lIj4nLiBzZWxmOjokZXZlbnQtPm5hbWUgLic8L3NwYW4+PC9oMj4nOw0KCQkJCX0NCgkJCQkvLyBub3cgbG9hZCB0aGUgYmFubmVyDQoJCQkJaWYgKCRiYW5uZXIgPSBzZWxmOjpnZXRFdmVudEltYWdlKCdiYW5uZXJfaW1hZ2UnLCAxLCBzZWxmOjokZXZlbnQtPm5hbWUsICd1ay10aHVtYm5haWwgdWstbWFyZ2luJykpDQoJCQkJew0KCQkJCQkkY29udGVudFtdID0gJGJhbm5lcjsNCgkJCQl9DQoJCQkJLy8gc2V0IGV2ZW50IGRldGFpbHMNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kZXRhaWxzKSAmJiAgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kZXRhaWxzKSkNCgkJCQl7DQoJCQkJCSRjb250ZW50W10gPSAnPHA+Jy5zZWxmOjokZmlsdGVySW5wdXQtPmNsZWFuKHNlbGY6OiRldmVudC0+ZGV0YWlscykuJzwvcD4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkY29udGVudFtdID0gJzxwPicuVGV4dDo6XygnVGhlIGV2ZW50IGRldGFpbHMgY29tZSBoZXJlJykuJywgbG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvci48L3A+JzsNCgkJCQl9DQoJCQkJLy8gbG9hZCB0aGUgY29uY2VwdHMNCgkJCQkkY29udGVudFtdID0gc2VsZjo6bG9hZENvbmNlcHRMYXlvdXQoKTsNCg0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nKQ0KCQkJCXsNCgkJCQkJLy8gYWRkIGR1bW15IGJ1eSBidXR0b24NCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj48ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEiPjxkaXYgY2xhc3M9InVrLXBhbmVsIj4nOw0KCQkJCQkkY29udGVudFtdID0gJzxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tbGFyZ2UgdWstd2lkdGgtMS0xIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIG9uY2xpY2s9ImFsZXJ0KFwnQ2FydCBub3QgYWN0aXZlIGluIGFkbWluIGFyZWFcJyk7Ij4gJzsNCgkJCQkJJGNvbnRlbnRbXSA9IFRleHQ6Ol8oJ1RvdGFsJyk7DQoJCQkJCSRjb250ZW50W10gPSAnOiA8c3BhbiBpZD0idG90YWwiPjAuMDA8L3NwYW4+IC0gJzsNCgkJCQkJJGNvbnRlbnRbXSA9IFRleHQ6Ol8oJ0J1eSBOb3cnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L2J1dHRvbj4nOw0KCQkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJLy8gdGhlIHJlYWwgc2hvcHBpbmcgY2FydCBidXR0b24NCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj48ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEiPjxkaXYgY2xhc3M9InVrLXBhbmVsIj4nOw0KCQkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9ImNhcnQtYWN0aXZlLWJ1dHRvbnMgdWstYnV0dG9uLWdyb3VwIHVrLXdpZHRoLTEtMSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4nOw0KCQkJCQkkY29udGVudFtdID0gJzxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLWxhcmdlIHVrLXdpZHRoLTEtNCB1ay1idXR0b24tcHJpbWFyeSIgaHJlZj0iI1ZETS12aWV3LWNhcnQtbm93IiBkYXRhLXVrLW1vZGFsPjxpIGNsYXNzPSJ1ay1pY29uLWV5ZSI+PC9pPiA8c3BhbiBjbGFzcz0idWstaGlkZGVuLXNtYWxsIj4nOw0KCQkJCQkkY29udGVudFtdID0gVGV4dDo6XygnVmlldyBDYXJ0Jyk7DQoJCQkJCSRjb250ZW50W10gPSAnPC9zcGFuPjwvYT4nOw0KCQkJCQkkY29udGVudFtdID0gJzxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLWxhcmdlIHVrLXdpZHRoLTMtNCB1ay1idXR0b24tc3VjY2VzcyIgaHJlZj0iJy4gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oW1tbQ29tcG9uZW50XV1dSGVscGVyUm91dGU6OmdldENoZWNrb3V0Um91dGUoKSkgLiciPjxzcGFuIGNsYXNzPSJWRE0tY2FydC10b3RhbCI+PC9zcGFuPiA8c3BhbiBjbGFzcz0idWstaGlkZGVuLXNtYWxsIj4nOw0KCQkJCQkkY29udGVudFtdID0gVGV4dDo6XygnQ2hlY2sgT3V0Jyk7DQoJCQkJCSRjb250ZW50W10gPSAnPC9zcGFuPiA8aSBjbGFzcz0idWstaWNvbi1zaG9wcGluZy1jYXJ0Ij48L2k+PC9hPjwvZGl2Pic7DQoJCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0iY2FydC1pbmFjdGl2ZS1idXR0b24iPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tbGFyZ2UgdWstd2lkdGgtMS0xIHVrLWJ1dHRvbi1wcmltYXJ5IiBocmVmPSIjVkRNLXZpZXctY2FydC1ub3ciIGRhdGEtdWstbW9kYWw+PGkgY2xhc3M9InVrLWljb24tZXllIj48L2k+IDxzcGFuIGNsYXNzPSJ1ay1oaWRkZW4tc21hbGwiPic7DQoJCQkJCSRjb250ZW50W10gPSBUZXh0OjpfKCdWaWV3IEVtcHR5IENhcnQnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L3NwYW4+PC9hPjwvZGl2Pic7DQoJCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+JzsNCgkJCQl9DQoNCgkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoNCg0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nKQ0KCQkJCXsNCgkJCQkJLy8gYWRkIHNvbWUgc2NyaXB0Ow0KCQkJCQkkc2NyaXB0ID0gYXJyYXkoKTsNCgkJCQkJJHNjcmlwdFtdID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHRvdGFsID0ge307JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBhdmFpbGFibGUgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHRha2VuID0ge307IHZhciB0aWNrZXRzID0ge307JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBjYXBhY2l0eSA9ICcuc2VsZjo6JGV2ZW50LT5jYXBhY2l0eS4nOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdqUXVlcnkoIiNldmVudE5hbWUiKS50ZXh0KGpRdWVyeSgiI2pmb3JtX25hbWUiKS52YWwoKSk7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdqUXVlcnkoIi5zZWxlY3QtYnV0dG9uIikuY2xpY2soZnVuY3Rpb24oKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBidXR0b24gPSB0aGlzLmlkLnNwbGl0KCItIik7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBjdXJyZW50VmFsdWUgPSBqUXVlcnkoIiMiK2J1dHRvblswXSsiLW51bWJlciIpLmRhdGEoInF0eSIpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoYnV0dG9uWzFdID09ICJwbHVzIikgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgbmV3VmFsdWUgPSAxICsgK2N1cnJlbnRWYWx1ZTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnaWYgKHRpY2tldHMuaGFzT3duUHJvcGVydHkoYnV0dG9uWzBdKSkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd0YWtlbltidXR0b25bMF1dID0gbmV3VmFsdWU7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciB0b3RhbFRha2VuID0gc3VtKHRha2VuKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnaWYgKGNhcGFjaXR5ICE9IDAgJiYgdG90YWxUYWtlbiA+IGNhcGFjaXR5KSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ25ld1ZhbHVlID0gbmV3VmFsdWUgLSAxOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd0YWtlbltidXR0b25bMF1dID0gbmV3VmFsdWU7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ1VJa2l0Lm5vdGlmeSgiVGhlIEV2ZW50IElzIEZ1bGwuIiwge3N0YXR1czpcJ3dhcm5pbmdcJ30pOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9fSc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoYXZhaWxhYmxlLmhhc093blByb3BlcnR5KGJ1dHRvblswXSkgJiYgYXZhaWxhYmxlW2J1dHRvblswXV0gIT0gMCAmJiBuZXdWYWx1ZSA9PSBhdmFpbGFibGVbYnV0dG9uWzBdXSkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdVSWtpdC5ub3RpZnkoIlRoaXMgT3B0aW9uIGlzIEZ1bGwuIiwge3N0YXR1czpcJ3dhcm5pbmdcJ30pOyBqUXVlcnkoIiMiK2J1dHRvblswXSsiLXBsdXMiKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30gZWxzZSBpZiAoYnV0dG9uWzFdID09ICJtaW51cyIgJiYgY3VycmVudFZhbHVlICE9IDApIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIG5ld1ZhbHVlID0gK2N1cnJlbnRWYWx1ZSAtIDE7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3Rha2VuW2J1dHRvblswXV0gPSBuZXdWYWx1ZTsgalF1ZXJ5KCIjIitidXR0b25bMF0rIi1wbHVzIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSBlbHNlIGlmIChidXR0b25bMV0gPT0gInNlbGVjdCIpIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHByZXNzZWQgPSBqUXVlcnkodGhpcykuZGF0YSgidWstYnV0dG9uIik7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2lmIChwcmVzc2VkID09IDEpIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIG5ld1ZhbHVlID0gMTsgalF1ZXJ5KHRoaXMpLmRhdGEoInVrLWJ1dHRvbiIsIDIpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9IGVsc2Ugeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgbmV3VmFsdWUgPSAwOyBqUXVlcnkodGhpcykuZGF0YSgidWstYnV0dG9uIiwgMSk7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30nOw0KCQkJCQkkc2NyaXB0W10gPSAnfSBlbHNlIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIG5ld1ZhbHVlID0gMDsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZihqUXVlcnkodGhpcykuZGF0YSgib25seSIpKSB7IG9ubHlTd2l0Y2godGhpcyxuZXdWYWx1ZSk7IH0nOw0KCQkJCQkkc2NyaXB0W10gPSAndG90YWxTZXR0ZXIodGhpcyxuZXdWYWx1ZSk7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2lmIChidXR0b25bMV0gPT0gIm1pbnVzIiB8fCBidXR0b25bMV0gPT0gInBsdXMiKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeSgiIyIrYnV0dG9uWzBdKyItbnVtYmVyIikuZGF0YSgicXR5IiwgbmV3VmFsdWUpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAobmV3VmFsdWUgPT0gMCkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICduZXdWYWx1ZUhUTUwgPSAwOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9IGVsc2Ugeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICduZXdWYWx1ZUhUTUwgPSBcJzxzcGFuIGNsYXNzPSJ1ay1iYWRnZSB1ay1iYWRnZS1ub3RpZmljYXRpb24gdWstYmFkZ2Utc3VjY2VzcyI+XCcrbmV3VmFsdWUrXCc8L3NwYW4+XCc7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30nOw0KCQkJCQkkc2NyaXB0W10gPSAnalF1ZXJ5KCIjIitidXR0b25bMF0rIi1udW1iZXIiKS5odG1sKG5ld1ZhbHVlSFRNTCk7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30nOw0KCQkJCQkkc2NyaXB0W10gPSAnfSk7fSk7JzsNCgkJCQkJJHNjcmlwdFtdID0gaW1wbG9kZSgnJyxzZWxmOjokYnV0dG9uU2NyaXB0KTsNCgkJCQkJJHNjcmlwdFtdID0gJzwvc2NyaXB0Pic7DQoJCQkJCS8vIGxvYWQgdGhlIGRpc3BsYXkNCgkJCQkJcmV0dXJuIGltcGxvZGUoJycsJGNvbnRlbnQpLmltcGxvZGUoJycsJHNjcmlwdCk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJLy8gYWRkIHNvbWUgc2NyaXB0Ow0KCQkJCQkkc2NyaXB0ID0gYXJyYXkoKTsNCgkJCQkJJHNjcmlwdFtdID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGF2YWlsYWJsZSA9IHt9Oyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgdGFrZW4gPSB7fTsgdmFyIHRpY2tldHMgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGNhcGFjaXR5ID0gJy5zZWxmOjokZXZlbnQtPmNhcGFjaXR5Lic7JzsNCgkJCQkJJHNjcmlwdFtdID0gaW1wbG9kZSgnJyxzZWxmOjokYnV0dG9uU2NyaXB0KTsNCgkJCQkJJHNjcmlwdFtdID0gJzwvc2NyaXB0Pic7DQoNCgkJCQkJLy8gbG9hZCB0aGUgZGlzcGxheQ0KCQkJCQkkY29udGVudCA9IGltcGxvZGUoJycsJGNvbnRlbnQpLmltcGxvZGUoJycsJHNjcmlwdCk7DQoNCgkJCQkJLy8gZ2V0IHRoZSBkb2N1bWVudHMgZm9yIGRvd25sb2Fkcw0KCQkJCQlpZiAoJGRvd25sb2FkcyA9IHNlbGY6OmdldEV2ZW50RG93bmxvYWRzKCkpDQoJCQkJCXsNCgkJCQkJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkZG93bmxvYWRzKSwgYXJyYXlfdmFsdWVzKCRkb3dubG9hZHMpLCAkY29udGVudCk7DQoJCQkJCQkvLyByZW1vdmUgbGlua3MNCgkJCQkJCWZvcmVhY2ggKCRkb3dubG9hZHMgYXMgJGtleSA9PiAkbGluaykNCgkJCQkJCXsNCgkJCQkJCQlpZiAoc3RycG9zKCRrZXksICdbRE9DTElOSz0nKSAhPT0gZmFsc2UpDQoJCQkJCQkJew0KCQkJCQkJCQl1bnNldCgkZG93bmxvYWRzWyRrZXldKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBzZXQgZXZlbnQgcG9zdGVyDQoJCQkJCSRwb3N0ZXIgPSBzZWxmOjpnZXRFdmVudEltYWdlKCdwb3N0ZXJfaW1hZ2UnKTsNCgkJCQkJLy8gc2V0IGV2ZW50IGltYWdlcw0KCQkJCQkkZXZlbnRJbWFnZXMgPSBzZWxmOjpnZXRFdmVudEltYWdlKCdldmVudF9pbWFnZXMnLCAyKTsNCgkJCQkJJGV2ZW50SW1hZ2VXaWR0aCA9IHNlbGY6OiRwYXJhbXMtPmdldCgnZXZlbnRfd2lkdGgnLCA4MDApOw0KCQkJCQkkZXZlbnRJbWFnZUhlaWdodCA9ICBzZWxmOjokcGFyYW1zLT5nZXQoJ2V2ZW50X2hlaWdodCcsIDYwMCk7DQoJCQkJCQ0KCQkJCQkvLyBub3cgc2V0IHRoZSBzZWxlY3Rpb24gb25seSBzd2l0Y2hlcyAgKCgkYnVuZGxlICE9IDAgJiYgJGJ1bmRsZSA9PSAkb3RoZXJCdW5kbGUpIHx8ICgkYnVuZGxlID09ICRvdGhlckJ1bmRsZSAmJiAkY29uY2VwdCA9PSAkb3RoZXJDb25jZXB0KSkgPC0tLSB0aGUgSmF2YVNjcmlwdCBsb2dpYw0KCQkJCQlmb3JlYWNoIChzZWxmOjokZGlzYWJsZUJ1dHRvbnNDaGVjayBhcyAkYnV0dG9uSWQgPT4gJGF0KQ0KCQkJCQl7DQoJCQkJCQlpZiAoaXNzZXQoc2VsZjo6JGNvbmNlcHRTd2l0Y2hPbmx5WyRhdFsnY29uY2VwdCddXSkpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoc2VsZjo6JGNvbmNlcHRTd2l0Y2hPbmx5WyRhdFsnY29uY2VwdCddXSBhcyAkbnIgPT4gJGJ1Y2tldCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgoKGludCkgJGF0WydidW5kbGUnXSA+IDAgJiYgKGludCkgJGF0WydidW5kbGUnXSA9PSAoaW50KSAkYnVja2V0WydidW5kbGUnXSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCXNlbGY6OiRkaXNhYmxlQnV0dG9uc1snIyMjJy4kYnV0dG9uSWQuJyMjIyddID0gJ2Rpc2FibGVkJzsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmIChpc3NldChzZWxmOjokYnVuZGxlU3dpdGNoT25seVskYXRbJ2J1bmRsZSddXSkpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGF0WydidW5kbGUnXV0gYXMgJG5yID0+ICRidWNrZXQpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoKGludCkgJGF0WydidW5kbGUnXSA+IDAgfHwgKGludCkgJGF0Wydjb25jZXB0J10gPT0gKGludCkgJGJ1Y2tldFsnY29uY2VwdCddKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokZGlzYWJsZUJ1dHRvbnNbJyMjIycuJGJ1dHRvbklkLicjIyMnXSA9ICdkaXNhYmxlZCc7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gdXBkYXRlIHRoZSBkaXNhYmxlZCBidXR0b25zDQoJCQkJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cyhzZWxmOjokZGlzYWJsZUJ1dHRvbnMpLCBhcnJheV92YWx1ZXMoc2VsZjo6JGRpc2FibGVCdXR0b25zKSwgJGNvbnRlbnQpOw0KDQoJCQkJCS8vIG5vdyBsZXRzIGFkZCB0aGUgcG9zdGVyIGV2ZW50IGltYWdlcyBhbmQgdGhlIGRvd25sb2FkIGJ1dHRvbnMgaWYgZm91bmQNCgkJCQkJJHRhYnMgPSBmYWxzZTsNCgkJCQkJaWYgKCRwb3N0ZXIgfHwgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJCXsNCgkJCQkJCWlmICgkcG9zdGVyICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkb3dubG9hZHMpKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChjb3VudCgkZG93bmxvYWRzKSA9PSAxKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhYk5hbWUyID0gVGV4dDo6XygnUG9zdGVyICYgRG93bmxvYWQnKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhYk5hbWUyID0gVGV4dDo6XygnUG9zdGVyICYgRG93bmxvYWRzJyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmICgkcG9zdGVyKQ0KCQkJCQkJew0KCQkJCQkJCSR0YWJOYW1lID0gVGV4dDo6XygnUG9zdGVyJyk7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkb3dubG9hZHMpKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChjb3VudCgkZG93bmxvYWRzKSA9PSAxKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhYk5hbWUyID0gVGV4dDo6XygnRG93bmxvYWQnKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhYk5hbWUyID0gVGV4dDo6XygnRG93bmxvYWRzJyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJHRhYnMgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnRJbWFnZXMpKQ0KCQkJCQl7DQoJCQkJCQlpZiAoY291bnQoJGV2ZW50SW1hZ2VzKSA9PSAxKQ0KCQkJCQkJew0KCQkJCQkJCSR0YWJOYW1lMyA9IFRleHQ6Ol8oJ0V2ZW50IEltYWdlJyk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJHRhYk5hbWUzID0gVGV4dDo6XygnRXZlbnQgSW1hZ2VzJyk7DQoJCQkJCQl9DQoJCQkJCQkkdGFicyA9IHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gYnVpbGQgdGFicw0KCQkJCQlpZiAoJHRhYnMpDQoJCQkJCXsNCgkJCQkJCSR0YWJDb250cm9sSUQgPSBtZDUoc2VsZjo6JGV2ZW50LT5uYW1lLnNlbGY6OiRldmVudC0+aWQpOw0KCQkJCQkJJGJvZHkgPSBhcnJheSgpOw0KCQkJCQkJJGJvZHlbXSA9ICc8dWwgY2xhc3M9InVrLXN1Ym5hdiB1ay1zdWJuYXYtcGlsbCIgZGF0YS11ay1zd2l0Y2hlcj0ie2Nvbm5lY3Q6XCcjJy4kdGFiQ29udHJvbElELidcJ30iPic7DQoJCQkJCQkkYm9keVtdID0gJzxsaT48YSBocmVmPSIiPicuIFRleHQ6Ol8oJ1JlZ2lzdGVyJykgLic8L2E+PC9saT4nOw0KCQkJCQkJaWYgKGlzc2V0KCR0YWJOYW1lMikpDQoJCQkJCQl7DQoJCQkJCQkJJGJvZHlbXSA9ICc8bGk+PGEgaHJlZj0iIj4nLiAkdGFiTmFtZTIgLic8L2E+PC9saT4nOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKGlzc2V0KCR0YWJOYW1lMykpDQoJCQkJCQl7DQoJCQkJCQkJJGJvZHlbXSA9ICc8bGk+PGEgaHJlZj0iIj4nLiAkdGFiTmFtZTMgLic8L2E+PC9saT4nOw0KCQkJCQkJfQ0KCQkJCQkJJGJvZHlbXSA9ICc8L3VsPic7DQoNCgkJCQkJCSRib2R5W10gPSAnPHVsIGlkPSInLiR0YWJDb250cm9sSUQuJyIgY2xhc3M9InVrLXN3aXRjaGVyIj4nOw0KCQkJCQkJJGJvZHlbXSA9ICc8bGk+JyAuICRjb250ZW50IC4gJzwvbGk+JzsNCgkJCQkJCWlmIChpc3NldCgkdGFiTmFtZTIpKQ0KCQkJCQkJew0KCQkJCQkJCSRib2R5W10gPSAnPGxpPic7DQoJCQkJCQkJaWYgKCRwb3N0ZXIgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJCQkJew0KCQkJCQkJCQkkYm9keVtdID0gJzxkaXYgY2xhc3M9InVrLWdyaWQiPic7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTQtNSI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1wYW5lbCI+JyAuICRwb3N0ZXIgLiAnPC9kaXY+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8L2Rpdj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0xLTUiPic7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstcGFuZWwiPicgLiBpbXBsb2RlKCcnLCAkZG93bmxvYWRzKSAuICc8L2Rpdj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzwvZGl2Pic7DQoJCQkJCQkJCSRib2R5W10gPSAnPC9kaXY+JzsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgkcG9zdGVyKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGJvZHlbXSA9ICRwb3N0ZXI7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJCQkJew0KCQkJCQkJCQkkYm9keVtdID0gaW1wbG9kZSgnJywgJGRvd25sb2Fkcyk7DQoJCQkJCQkJfQ0KCQkJCQkJCSRib2R5W10gPSAnPC9saT4nOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKGlzc2V0KCR0YWJOYW1lMykpDQoJCQkJCQl7DQoJCQkJCQkJJGJvZHlbXSA9ICc8bGk+JzsNCgkJCQkJCQkkYm9keVtdID0gJzxkaXYgY2xhc3M9InVrLWdyaWQgdWstZ3JpZC13aWR0aC1tZWRpdW0tMS00IiBkYXRhLXVrLWdyaWQtbWFyZ2luPic7DQoJCQkJCQkJZm9yZWFjaCAoJGV2ZW50SW1hZ2VzIGFzICR2YWwpDQoJCQkJCQkJew0KCQkJCQkJCQkkYm9keVtdID0gJzxkaXY+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8YSBocmVmPSInIC4gJHZhbFsndXJsJ10gLiAnIiBkYXRhLXVrLWxpZ2h0Ym94PSJ7Z3JvdXA6XCdncm91cC0nIC4gJHRhYkNvbnRyb2xJRCAuICdcJ30iIHRpdGxlPSInIC4gJHZhbFsnbmFtZSddIC4gJyI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8aW1nIHNyYz0iJyAuICR2YWxbJ3VybCddIC4gJyIgYWx0PSIiIHdpZHRoPSInIC4gJGV2ZW50SW1hZ2VXaWR0aCAuICciIGhlaWdodD0iJyAuICRldmVudEltYWdlSGVpZ2h0IC4gJyI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8L2E+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8L2Rpdj4nOw0KCQkJCQkJCX0NCgkJCQkJCQkkYm9keVtdID0gJzwvZGl2Pic7DQoJCQkJCQkJJGJvZHlbXSA9ICc8L2xpPic7DQoJCQkJCQl9DQoJCQkJCQkkYm9keVtdID0gJzwvdWw+JzsNCgkJCQkJCS8vIHJldHVybiBib2R5DQoJCQkJCQlyZXR1cm4gaW1wbG9kZSgnJywkYm9keSk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuICRjb250ZW50Ow0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ29wdGlvbnMnICYmICRvcHRpb25zID0gc2VsZjo6Z2V0RXZlbnRPcHRpb25zKCkpDQoJCQl7DQoJCQkJcmV0dXJuICRvcHRpb25zOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcmV0dXJuIHN0cmluZyBpbWFnZSBsaW5rDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudEltYWdlKCR0YXJnZXQsICR0eXBlID0gMSwgJG5hbWUgPSBudWxsLCAkY2xhc3MgPSAndWstbWFyZ2luJykNCgl7DQoJCS8vIGdldCBpbWFnZSBpZiBub3QgYXZhaWxhYmxlDQoJCWlmICgoIWlzc2V0KHNlbGY6OiRldmVudC0+JHRhcmdldCkgfHwgIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+JHRhcmdldCkpICYmIHNlbGY6OiRldmVudC0+aWQgPiAwKQ0KCQl7DQoJCQlzZWxmOjokZXZlbnQtPiR0YXJnZXQgPSBzZWxmOjpkZWNyeXB0U3RyaW5nKHNlbGY6OmdldFZhcignZXZlbnQnLCBzZWxmOjokZXZlbnQtPmlkLCAnaWQnLCAkdGFyZ2V0KSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCBpbWFnZSBpcyBqc29uDQoJCWlmICgkdHlwZSA9PSAyICYmIHNlbGY6OiRldmVudC0+JHRhcmdldCAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPiR0YXJnZXQpKQ0KCQl7DQoJCQkkc2V0RmlsZU5hbWUgPSBmYWxzZTsNCgkJCWlmICghJG5hbWUpDQoJCQl7DQoJCQkJJHNldEZpbGVOYW1lID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIGJ1aWxkIGFuIGFycmF5IG9mIGltYWdlcw0KCQkJJHRtcCA9IGpzb25fZGVjb2RlKHNlbGY6OiRldmVudC0+JHRhcmdldCwgdHJ1ZSk7DQoJCQlpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0bXApKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSRidWNrZXQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHRtcCBhcyAkZmlsZU5hbWUpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIGFycmF5DQoJCQkJaWYgKHN0cnBvcygkZmlsZU5hbWUsICdfJykgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGV4dGVudGlvbiA9IGV4cGxvZGUoJ18nLCAkZmlsZU5hbWUpOw0KCQkJCQkkYWN0dWFsTmFtZSA9IHNlbGY6OiRldmVudC0+bmFtZTsNCgkJCQkJaWYgKCRzZXRGaWxlTmFtZSAmJiBzdHJwb3MoJGZpbGVOYW1lLCAnVkRNJykgIT09IGZhbHNlKQ0KCQkJCQl7DQoJCQkJCQkkZmlsZU5hbWVBcnJheSA9IGV4cGxvZGUoJ1ZETScsICRmaWxlTmFtZSk7DQoJCQkJCQlpZiAoaXNzZXQoJGZpbGVOYW1lQXJyYXlbMV0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRmaWxlTmFtZUFycmF5WzFdKSkNCgkJCQkJCXsNCgkJCQkJCQkkYWN0dWFsTmFtZSA9ICRmaWxlTmFtZUFycmF5WzFdOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWlmIChpc3NldCgkZXh0ZW50aW9uWzJdKSkNCgkJCQkJew0KCQkJCQkJaWYgKCRzZXRGaWxlTmFtZSkNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9ICRhY3R1YWxOYW1lOw0KCQkJCQkJfQ0KCQkJCQkJLy8gc2V0IGJhc2ljIGJ1Y2tldCBkZXRhaWxzDQoJCQkJCQkkdG1wQnVja2V0ID0gYXJyYXkoKTsNCgkJCQkJCSR0bXBCdWNrZXRbJ2xpbmsnXSA9ICc8aW1nIGNsYXNzPSInLiRjbGFzcy4nIiBzcmM9Iicuc2VsZjo6JGZpbGVsaW5rLiRmaWxlTmFtZS4nLicuJGV4dGVudGlvblsyXS4nIiBhbHQ9IicuICRuYW1lIC4nIj4nOw0KCQkJCQkJJHRtcEJ1Y2tldFsndXJsJ10gPSBzZWxmOjokZmlsZWxpbmsuJGZpbGVOYW1lLicuJy4kZXh0ZW50aW9uWzJdOw0KCQkJCQkJJHRtcEJ1Y2tldFsnbmFtZSddID0gICRuYW1lOw0KCQkJCQkJLy8gYWRkIHRvIGJ1Y2tldA0KCQkJCQkJJGJ1Y2tldFtdID0gJHRtcEJ1Y2tldDsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0KSkNCgkJCXsNCgkJCQlyZXR1cm4gJGJ1Y2tldDsNCgkJCX0NCgkJfQ0KCQkvLyBjaGVjayB0aGF0IGltYWdlIGlzIG9ubHkgYSBzdHJpbmcNCgkJZWxzZWlmICgkdHlwZSA9PSAxICYmIGlzc2V0KHNlbGY6OiRldmVudC0+JHRhcmdldCkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT4kdGFyZ2V0KSkNCgkJew0KCQkJLy8gcmV0dXJuIG9uZSBpbWFnZSBsaW5rDQoJCQlpZiAoc3RycG9zKHNlbGY6OiRldmVudC0+JHRhcmdldCwgJ18nKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJGV4dGVudGlvbiA9IGV4cGxvZGUoJ18nLCBzZWxmOjokZXZlbnQtPiR0YXJnZXQpOw0KCQkJCSRhY3R1YWxOYW1lID0gc2VsZjo6JGV2ZW50LT5uYW1lOw0KCQkJCWlmIChzdHJwb3Moc2VsZjo6JGV2ZW50LT4kdGFyZ2V0LCAnVkRNJykgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGZpbGVOYW1lQXJyYXkgPSBleHBsb2RlKCdWRE0nLCBzZWxmOjokZXZlbnQtPiR0YXJnZXQpOw0KCQkJCQlpZiAoaXNzZXQoJGZpbGVOYW1lQXJyYXlbMV0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRmaWxlTmFtZUFycmF5WzFdKSkNCgkJCQkJew0KCQkJCQkJJGFjdHVhbE5hbWUgPSAkZmlsZU5hbWVBcnJheVsxXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJew0KCQkJCQlpZiAoISRuYW1lKQ0KCQkJCQl7DQoJCQkJCQkkbmFtZSA9ICRhY3R1YWxOYW1lOw0KCQkJCQl9DQoJCQkJCXJldHVybiAnPGltZyBjbGFzcz0iJy4kY2xhc3MuJyIgc3JjPSInLnNlbGY6OiRmaWxlbGluay5zZWxmOjokZXZlbnQtPiR0YXJnZXQuJy4nLiRleHRlbnRpb25bMl0uJyIgYWx0PSInLiAkbmFtZSAuJyI+JzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEByZXR1cm4gYXJyYXkgb2YgbGlua3MNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50RG93bmxvYWRzKCkNCgl7DQoJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmV2ZW50X2RvY3VtZW50cykpDQoJCXsNCgkJCS8vIGZpcnN0IG1ha2Ugc3VyZSBpdCBpcyBKc29uIHZhbHVlcw0KCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzKSkNCgkJCXsNCgkJCQlzZWxmOjokZXZlbnQtPmV2ZW50X2RvY3VtZW50cyA9IGpzb25fZGVjb2RlKHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzLCB0cnVlKTsNCgkJCX0NCgkJCS8vIG5vdyBjaGVjayBpZiBpdCBpcyBhbiBhcnJheQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzKSkNCgkJCXsNCgkJCQkkc2Vzc2lvblRva2VuID0gSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpOw0KCQkJCSRkb21haW4gPSBVcmk6OnJvb3QoKTsNCgkJCQkkZG93bmxvYWRzID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmV2ZW50X2RvY3VtZW50cyBhcyAkZmlsZU5hbWUpDQoJCQkJew0KCQkJCQkvLyBtYWtlIHN1cmUgdGhpcyBhIGNvcnJlY3QgZmlsZSBuYW1lDQoJCQkJCWlmIChzdHJwb3MoJGZpbGVOYW1lLCAnXycpICE9PSBmYWxzZSAmJiBzdHJwb3MoJGZpbGVOYW1lLCAnVkRNJykgIT09IGZhbHNlKQ0KCQkJCQl7DQoJCQkJCQkkZmlsZUFycmF5ID0gZXhwbG9kZSgnXycsICRmaWxlTmFtZSk7DQoJCQkJCQkkbmFtZUFycmF5ID0gZXhwbG9kZSgnVkRNJywgJGZpbGVOYW1lKTsNCgkJCQkJCS8vIG1vcmUgY2hlY2tzDQoJCQkJCQlpZiAoaXNzZXQoJG5hbWVBcnJheVsxXSkgJiYgaXNzZXQoJGZpbGVBcnJheVsyXSkpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKHNlbGY6OiRiYXNpY2tleSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIEdldCB0aGUgZW5jcnlwdGlvbiBvYmplY3QuDQoJCQkJCQkJCSRsb2NhbEZpbGUgPSBzZWxmOjpiYXNlNjRfdXJsZW5jb2RlKHNlbGY6OiRsb2NrZXItPmVuY3J5cHRTdHJpbmcoJGZpbGVOYW1lKSk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIGNhbiBub3QgZ2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdCBzbyBvbmx5IGJhc2U2NCBlbmNvZGUNCgkJCQkJCQkJJGxvY2FsRmlsZSA9IHNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGZpbGVOYW1lLCB0cnVlKTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gYnVpbGQgbGluayANCgkJCQkJCQkkbGluayA9ICRkb21haW4gLiAnaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9ZG93bmxvYWQuZG9jdW1lbnQmZmlsZT0nIC4gJGxvY2FsRmlsZSAuICcmdG9rZW49JyAuICRzZXNzaW9uVG9rZW47DQoJCQkJCQkJLy8gYnVpbGQgdGhlIGZpbGUgbmFtZQ0KCQkJCQkJCSRmaWxlTmFtZSA9ICRuYW1lQXJyYXlbMV0gLiAnLicgLiAkZmlsZUFycmF5WzJdOw0KCQkJCQkJCSRkb3dubG9hZHNbJ1tET0NMSU5LPScuJGZpbGVOYW1lLiddJ10gPSAnPGEgaHJlZj0iJyAuICRsaW5rIC4gJyIgdHl0bGU9IiAnIC4gVGV4dDo6XygnRG93bmxvYWQnKSAuICciPicgLiAkZmlsZU5hbWUgLiAnPC9hPic7DQoJCQkJCQkJJGRvd25sb2Fkc1snW0RPQ0JVVFRPTj0nLiRmaWxlTmFtZS4nXSddID0gJzxhIGhyZWY9IicgLiAkbGluayAuICciIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXN1Y2Nlc3MgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEiPjxpIGNsYXNzPSJ1ay1pY29uLWRvd25sb2FkIj48L2k+ICcgLiBUZXh0OjpfKCdEb3dubG9hZCcpIC4gJyAnIC4gJGZpbGVOYW1lIC4gJzwvYT4nOw0KCQkJCQkJfSANCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJew0KCQkJCQlyZXR1cm4gJGRvd25sb2FkczsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkdGFibGUNCgkgKiBAcGFyYW0gJHZhbHVlDQoJICogQHJldHVybiBib29sfG1peGVkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBsb2FkRWRpdEJ1dHRvbigkdGFibGUsICRpZCkNCgl7CQkNCgkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdXNlcikpDQoJCXsNCgkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCXNlbGY6OiR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIG9ubHkgbG9hZCB0byBhZG1pbiBhbmQgb3JnYW5pemVyIHdobyBvd24gdGhpcyBpdGVtDQoJCWlmIChzZWxmOjpoYXNBY2Nlc3MoJGlkLCBzZWxmOjokdXNlci0+aWQsICR0YWJsZSkpDQoJCXsNCgkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nKQ0KCQkJew0KCQkJCSRyZWYgPSAoaXNzZXQoc2VsZjo6JGV2ZW50LT5pZCkgJiYgc2VsZjo6JGV2ZW50LT5pZCA+IDApID8gIiZyZWY9ZXZlbnQmcmVmaWQ9Ii5zZWxmOjokZXZlbnQtPmlkIDogJyc7DQoJCQkJJGVkaXQgPSAiaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnZpZXc9Ii4kdGFibGUuIiZ0YXNrPSIuJHRhYmxlLiIuZWRpdCZpZD0iLiRpZC4kcmVmOw0KCQkJCXJldHVybiAnIDxhIG9uY2xpY2s9IlVJa2l0Lm1vZGFsLmNvbmZpcm0oXCcnLlRleHQ6Ol8oJ0FsbCB1bnNhdmVkIHdvcmsgd2lsbCBiZSBsb3N0LCBhcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/JykuJ1wnLCBmdW5jdGlvbigpeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwnJy4kZWRpdC4nXCcgfSkiICBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGNsYXNzPSJ1ay1pY29uLXBlbmNpbCB1ay1oaWRkZW4iPjwvYT4nOw0KCQkJfQ0KCQkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQl7DQoJCQkJJHJlZiA9IChpc3NldChzZWxmOjokZXZlbnQtPmlkKSAmJiBzZWxmOjokZXZlbnQtPmlkID4gMCkgPyAiJnJlZj1yZWdpc3RyeSZyZWZpZD0iLnNlbGY6OiRldmVudC0+aWQgOiAnJzsNCgkJCQkkZWRpdCA9ICJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdmlldz0iLiR0YWJsZS4iJnRhc2s9Ii4kdGFibGUuIi5lZGl0JmlkPSIuJGlkLiRyZWY7DQoJCQkJcmV0dXJuICcgPGEgaHJlZj0iJy4kZWRpdC4nIiBjbGFzcz0idWstaWNvbi1wZW5jaWwgdWstaGlkZGVuIj48L2E+JzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICR0YWJsZQ0KCSAqIEBwYXJhbSAkdmFsdWUNCgkgKiBAcmV0dXJuIGJvb2x8bWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWROYW1lKCR0YWJsZSwkdmFsdWUpDQoJew0KCQlpZiAoJ2V2ZW50JyA9PT0gJHRhYmxlICYmIGlzc2V0KHNlbGY6OiRldmVudC0+bmFtZSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokZXZlbnQtPm5hbWU7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OmdldFZhcigkdGFibGUsKGludCkgJHZhbHVlLCdpZCcsJ25hbWUnKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRPcnBoYW5WYXJpYXRpb25zKCkNCgl7DQoJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJLy8gaXNvbGF0ZSB0aGUgb3JwaGFuIHZhcmlhdGlvbnMNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCSRhbm90aGVyQ29uY2VwdCA9IGFycmF5KCk7DQoJCQkkdmFyaWF0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSBhcyAka2V5ID0+ICRjb25jZXB0KQ0KCQkJew0KCQkJCWlmICghaW5fYXJyYXkoJGNvbmNlcHQsc2VsZjo6JGNvbmNlcHRzKSkNCgkJCQl7DQoJCQkJCWlmIChpc19udW1lcmljKCRjb25jZXB0KSkNCgkJCQkJew0KCQkJCQkJLy8gYW5vdGhlciBjb25jZXB0DQoJCQkJCQkkYW5vdGhlckNvbmNlcHRbJGNvbmNlcHRdID0gJGNvbmNlcHQ7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyB0b3RhbCBvcnBoYW4NCgkJCQkJCSR2YXJpYXRpb25zW3NlbGY6OiRldmVudC0+Y29zdFsndmFyaWF0aW9uJ11bJGtleV1dID0gJGtleTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGZpcnN0IGxvYWQgdGhlIG90aGVyIGNvbnNlcHRzICh0aGF0IGhhdmUgbm8gZGF0ZSAtIHRhcmdldCB3aG9sZSBldmVudCkNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYW5vdGhlckNvbmNlcHQpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRhbm90aGVyQ29uY2VwdCBhcyAkY29uY2VwdCkNCgkJCQl7DQoJCQkJCS8vIGFub3RoZXIgY29uY2VwdA0KCQkJCQlzZWxmOjokY29uY2VwdEhUTUxbc2VsZjo6JGV2ZW50LT5pZC4nXycuJGNvbmNlcHQuJ19fMCddID0gc2VsZjo6YnVpbGRDb25jZXB0KCRjb25jZXB0LHNlbGY6OiRldmVudC0+aWQuJ18nLiRjb25jZXB0LidfXzAnKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgb3JwaGFuIHZhcmlhdGlvbnMgKHRoYXQgaGF2ZSBubyBkYXRlIG9yIGNvbmNlcHQgLSB0YXJnZXQgd2hvbGUgZXZlbnQpDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZhcmlhdGlvbnMpKQ0KCQkJew0KCQkJCSRwcmljZSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHZhcmlhdGlvbnMgYXMgJHZhcmlhdGlvbiA9PiAka2V5KQ0KCQkJCXsNCgkJCQkJLy8gYW5vdGhlciB2YXJpYXRpb24gYnV0dG9uDQoJCQkJCWlmIChjb3VudCgkcHJpY2UpID4gMiAmJiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpKQ0KCQkJCQl7DQoJCQkJCQkkcHJpY2VbXSA9ICc8YnIgLz4nOw0KCQkJCQl9DQoJCQkJCWlmICgkYnV0dG9uID0gc2VsZjo6c2V0QnV5QnV0dG9ucygka2V5KSkNCgkJCQkJew0KCQkJCQkJJHByaWNlW10gPSAkYnV0dG9uOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQl7DQoJCQkJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj48ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMy01Ij48L2Rpdj48ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMi01Ij4nOw0KCQkJCQkkY29udGVudFtdID0gaW1wbG9kZSgnJywkcHJpY2UpOw0KCQkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2Pic7DQoNCgkJCQkJLy8gcmV0dXJuIHRoZSBvcnBoYW4gc3R1ZmYgdG8gYSBiZWxvbmcgKFRPRE8gLSB0aGlzIGlzIG5vdCBpZGVhbCkNCgkJCQkJc2VsZjo6JGNvbmNlcHRIVE1MW3NlbGY6OiRldmVudC0+aWQuJ185OTk5OTk5OTlfXzAnXSA9IGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudE9wdGlvbnNbc2VsZjo6JGV2ZW50LT5pZC4nXzk5OTk5OTk5OV9fMCddID0gJHByaWNlOw0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9uc1tzZWxmOjokZXZlbnQtPmlkLidfOTk5OTk5OTk5X18wJ10pKQ0KCQkJCQl7DQoJCQkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRPcHRpb25zW3NlbGY6OiRldmVudC0+aWQuJ185OTk5OTk5OTlfXzAnXSBhcyAkbnIgPT4gJiRjb3N0aW5nKQ0KCQkJCQkJew0KCQkJCQkJCSRjb3N0aW5nWyduYW1lJ10gPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpIC4gJyAoJyAuJGNvc3RpbmdbJ25hbWUnXSAuJyknOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRjb25jZXB0cw0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ29uY2VwdExheW91dCgpDQoJew0KCQkkY29udGVudCA9IGFycmF5KCk7DQoJCSRjb25jZXB0cyA9IHNlbGY6OmdldENvbmNlcHRzSFRNTCgpOw0KCQkvLyBjaGVjayBsYXlvdXQgb3B0aW9uDQoJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlciddKSB8fCAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlciddKSkNCgkJew0KCQkJLy8gbG9hZCBkZWZhdWx0IGxheW91dA0KCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nOw0KCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nLCRjb25jZXB0cyk7DQoJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCX0NCgkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWydidW5kbGVyJ10pKQ0KCQl7DQoJCQkvLyBsb2FkIGluIGJ1bmRsZXMgbGF5b3V0DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRCdWlsZGVyWydidW5kbGVyJ10gYXMgJGJ1bmRsZSA9PiAkYXJyYXkpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nOw0KCQkJCSRlZGl0ID0gc2VsZjo6bG9hZEVkaXRCdXR0b24oJ2J1bmRsZScsICRidW5kbGUpOw0KCQkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkJJGNvbnRlbnRbXSA9ICc8aDMgY2xhc3M9InVrLXBhbmVsLXRpdGxlJy4kZWRpdENsYXNzLiciPicuIHNlbGY6OmxvYWROYW1lKCdidW5kbGUnLCRidW5kbGUpIC4gJGVkaXQgLic8L2gzPic7DQoJCQkJJGRldGFpbHMgPSBzZWxmOjpnZXRWYXIoJ2J1bmRsZScsKGludCkgJGJ1bmRsZSwnaWQnLCdkZXNjcmlwdGlvbicpOw0KCQkJCS8vIGxvYWQgYnVuZGxlIGRldGFpbHMNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRldGFpbHMpKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2PicuJGRldGFpbHMuJzwvZGl2Pic7DQoJCQkJfQ0KCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0id2lyZS1ib3JkZXIiPjxkaXYgY2xhc3M9InVrLWdyaWQiPic7DQoJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGFycmF5IGFzICRldmVudF9jb25jZXB0X3RpbWUpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCQkJew0KCQkJCQkJJGJ1Y2tldFtdID0gJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQkJCQkJdW5zZXQoJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+Jy5pbXBsb2RlKCc8L2Rpdj48ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEiPjxocj4nLCRidWNrZXQpLic8L2Rpdj4nOw0KCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+JzsNCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIG1vcmUgY29uY2VwdHMgbGVmdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb25jZXB0cykpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtc3BhY2UiPic7DQoJCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtc3BhY2UiPicsJGNvbmNlcHRzKTsNCgkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QnVuZGxlcigpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kYXRlWydidW5kbGUnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kYXRlWydidW5kbGUnXSkpDQoJCXsNCgkJCSRidW5kbGVyID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKHNlbGY6OiRldmVudC0+ZGF0ZVsnYnVuZGxlJ10gYXMgJGtleSA9PiAkYnVuZGxlKQ0KCQkJew0KCQkJCSRjb25jZXB0ID0gc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJGtleV07DQoJCQkJaWYgKGlzX251bWVyaWMoJGJ1bmRsZSkpDQoJCQkJew0KCQkJCQlpZiAoJGtleV90aW1lID0gc2VsZjo6Z2V0RXZlbnRDb25jZXB0VGltZSgka2V5KSkNCgkJCQkJew0KCQkJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV90aW1lXVsnc3RhcnQnXSkpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddWyRrZXlfdGltZV1bJ3N0YXJ0J10gPSAwOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGtleV90aW1lID0gMDsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVswXVsnc3RhcnQnXSA9IDA7DQoJCQkJCX0NCg0KCQkJCQkkYnVuZGxlcltdID0gYXJyYXkoJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSwgJ2NvbmNlcHQnID0+IChpbnQpICRjb25jZXB0LCAnc3RhcnQnID0+IChpbnQpIHNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVska2V5X3RpbWVdWydzdGFydCddKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiBhbnkgYnVuZGxlcyBoYXMgYmVlbiBsb2FkZWQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVuZGxlcikpDQoJCQl7DQoJCQkJLy8gc29ydCB0aGUgYnVuZGxlcw0KCQkJCXVzb3J0KCRidW5kbGVyLCBmdW5jdGlvbigkYSwgJGIpIHsNCgkJCQkJcmV0dXJuICRhWydzdGFydCddIC0gJGJbJ3N0YXJ0J107DQoJCQkJfSk7DQoJCQkJLy8gcGFjayB0aGUgYnVuZGxlcw0KCQkJCWZvcmVhY2ggKCRidW5kbGVyIGFzICRhcnJheSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2J1bmRsZXInXVskYXJyYXlbJ2J1bmRsZSddXVtzZWxmOjokZXZlbnQtPmlkLidfJy4kYXJyYXlbJ2NvbmNlcHQnXS4nX18nLiRhcnJheVsnc3RhcnQnXV0gPSBzZWxmOjokZXZlbnQtPmlkLidfJy4kYXJyYXlbJ2NvbmNlcHQnXS4nX18nLiRhcnJheVsnc3RhcnQnXTsNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bc2VsZjo6JGV2ZW50LT5pZC4nXycuJGFycmF5Wydjb25jZXB0J10uJ19fJy4kYXJyYXlbJ3N0YXJ0J11dID0gJGFycmF5WydidW5kbGUnXTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGNvbmNlcHQNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkQ29uY2VwdCgmJGNvbmNlcHQsICRldmVudF9jb25jZXB0X3RpbWUpDQoJew0KCQkkY29udGVudCA9IGFycmF5KCk7DQoJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJew0KCQkJaWYgKGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddKSkNCgkJCXsNCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9ImNvbmNlcHQtc3RhcnQtZW5kIj4nLnNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddLic8L2Rpdj4nOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhpcyBjb25jZXB0IGlzIGFscmVhZHkgbG9hZGVkDQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0pKQ0KCQkJew0KCQkJCXNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0gPSBzZWxmOjpnZXRBbGxWYWx1ZXMoJGNvbmNlcHQsICdjb25jZXB0JywgYXJyYXkoJ2NvbmNlcHRfaW1hZ2UnKSk7DQoJCQl9DQoJCQkvLyBvbmx5IGNvbnRpbnVlIGlmIHdlIGhhdmUgdmFsdWVzDQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0pKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSRlZGl0ID0gc2VsZjo6bG9hZEVkaXRCdXR0b24oJ2NvbmNlcHQnLCRjb25jZXB0KTsNCgkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkkY29udGVudFtdID0gJzxoMyBjbGFzcz0idWstcGFuZWwtdGl0bGUnLiRlZGl0Q2xhc3MuJyI+Jy5zZWxmOjokY29uY2VwdERhdGFbJGNvbmNlcHRdLT5uYW1lIC4gJGVkaXQgLic8L2gzPic7DQoJCQkvLyBhZGQgY29uY2VwdCBpbWFnZQ0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0tPmNvbmNlcHRfaW1hZ2UpICYmIHN0cnBvcyhzZWxmOjokY29uY2VwdERhdGFbJGNvbmNlcHRdLT5jb25jZXB0X2ltYWdlLCAnXycpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+Y29uY2VwdF9pbWFnZSk7DQoJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwiIHNyYz0iJy5zZWxmOjokZmlsZWxpbmsuc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+Y29uY2VwdF9pbWFnZS4nLicuJGV4dGVudGlvblsyXS4nIiBhbHQ9ImNvbmNlcHQgaW1hZ2UiPic7DQoJCQkJfQ0KCQkJfQ0KCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj4nOw0KDQoJCQkvLyB3b3Jrb3V0IHdpZHRocw0KCQkJJGNvbmNlcHREZXRhaWxzID0gZmFsc2U7DQoJCQkkY29uY2VwdENvbnRlbnQgPSBmYWxzZTsNCgkJCSRjb25jZXB0Q29zdGluZyA9IGZhbHNlOw0KCQkJJHNldFNwYWNlciA9IGZhbHNlOw0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0tPmRldGFpbHMpKQ0KCQkJew0KCQkJCSRjb25jZXB0RGV0YWlscyA9IHRydWU7DQoJCQl9DQoJCQlpZiAoc2VsZjo6c2V0Q29uY2VwdENvbnRlbnQoJGV2ZW50X2NvbmNlcHRfdGltZSkpDQoJCQl7DQoJCQkJJGNvbmNlcHRDb250ZW50ID0gdHJ1ZTsNCgkJCX0NCgkJCWlmIChzZWxmOjpzZXRDb25jZXB0Q29zdGluZygkY29uY2VwdCwkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCXsNCgkJCQkkY29uY2VwdENvc3RpbmcgPSB0cnVlOw0KCQkJfQ0KCQkJaWYgKCRjb25jZXB0RGV0YWlscyAmJiAkY29uY2VwdENvbnRlbnQgJiYgJGNvbmNlcHRDb3N0aW5nKQ0KCQkJew0KCQkJCS8vIHRocmVlIGlzIHRydWUNCgkJCQkkd2lkdGhzRGV0YWlscyA9IDE7DQoJCQkJJHdpZHRoc0NvbnRlbnQgPSAyOw0KCQkJfQ0KCQkJZWxzZWlmICgkY29uY2VwdERldGFpbHMgeG9yICRjb25jZXB0Q29udGVudCB4b3IgJGNvbmNlcHRDb3N0aW5nKQ0KCQkJew0KCQkJCS8vIG9uZSBpcyB0cnVlDQoJCQkJJHdpZHRoc0RldGFpbHMgPSA1Ow0KCQkJCSR3aWR0aHNDb250ZW50ID0gNTsNCgkJCQkvLyBsb2FkIGJsYW5rIHNwYWNlcg0KCQkJCSRzZXRTcGFjZXIgPSB0cnVlOw0KCQkJfQ0KCQkJZWxzZWlmICgkY29uY2VwdERldGFpbHMgfHwgJGNvbmNlcHRDb250ZW50IHx8ICRjb25jZXB0Q29zdGluZykNCgkJCXsNCgkJCQkvLyB0d28gaXMgdHJ1ZQ0KCQkJCWlmICgkY29uY2VwdENvc3RpbmcpDQoJCQkJew0KCQkJCQkkd2lkdGhzRGV0YWlscyA9IDM7DQoJCQkJCSR3aWR0aHNDb250ZW50ID0gMzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHdpZHRoc0RldGFpbHMgPSAyOw0KCQkJCQkkd2lkdGhzQ29udGVudCA9IDM7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbG9hZCBjb25jZXB0IGRldGFpbHMNCgkJCWlmICgkY29uY2VwdERldGFpbHMgJiYgaXNzZXQoc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XSkgJiYgaXNzZXQoc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+ZGV0YWlscykpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tJy4kd2lkdGhzRGV0YWlscy4nLTUiPic7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2Picuc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+ZGV0YWlscy4nPC9kaXY+JzsNCgkJCQkkY29udGVudFtdID0gJzwvZGl2Pic7DQoJCQl9DQoJCQkvLyBzZXQgc29tZSBjb250ZW50DQoJCQlpZiAoJGNvbmNlcHRDb250ZW50ICYmIGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXSkgJiYgaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJew0KCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLScuJHdpZHRoc0NvbnRlbnQuJy01Ij4nOw0KCQkJCSRjb250ZW50W10gPSBpbXBsb2RlKCcnLHNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXSk7DQoJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJfQ0KCQkJLy8gc2V0IHNvbWUgY29udGVudA0KCQkJaWYgKCRjb25jZXB0Q29zdGluZyAmJiBpc3NldChzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCXsNCgkJCQlpZiAoJHNldFNwYWNlcikNCgkJCQl7DQoJCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTMtNSI+JzsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJCX0NCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0yLTUiPic7DQoJCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJycsc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSk7DQoJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJfQ0KCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KDQoJCQlyZXR1cm4gaW1wbG9kZSgnJywkY29udGVudCk7DQoJCX0NCgkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnb3B0aW9ucycpDQoJCXsNCgkJCWlmIChzZWxmOjpzZXRDb25jZXB0Q29zdGluZygkY29uY2VwdCwkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCXsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCQkJew0KCQkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdIGFzICRuciA9PiAmJGNvc3RpbmcpDQoJCQkJCXsNCgkJCQkJCSRjb3N0aW5nWyduYW1lJ10gPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpIC4gJyAoJyAuc2VsZjo6bG9hZE5hbWUoJ2NvbmNlcHQnLCRjb25jZXB0KSAuICcgLSAnIC4gJGNvc3RpbmdbJ25hbWUnXSAuJyknOw0KCQkJCQkJaWYgKGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddKSkNCgkJCQkJCXsNCgkJCQkJCQkkY29zdGluZ1snZGF0ZSddID0gc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskZXZlbnRfY29uY2VwdF90aW1lXVsnc3RhcnQtZW5kJ107DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZXZlbnRfY29uY2VwdF90aW1lDQoJICogQHJldHVybiBib29sDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRDb25jZXB0Q29udGVudCgmJGV2ZW50X2NvbmNlcHRfdGltZSkNCgl7DQoJCWlmIChpc3NldChzZWxmOjokbG9jYXRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJew0KCQkJJGtleSA9IHNlbGY6OmdldExvY2F0aW9uKCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+ZGF0ZVsnY29udGVudCddWyRrZXldKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmRhdGVbJ2NvbnRlbnQnXVska2V5XSkpDQoJCQl7DQoJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdID0gYXJyYXkoKTsNCgkJCQl9DQoJCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50LT5kYXRlWydjb250ZW50J11bJGtleV0gYXMgJGNvbnRlbnQpDQoJCQkJew0KCQkJCQkvLyBjaGVjayBpZiB0aGlzIGNvbnRlbnQgaXMgYWxyZWFkeSBsb2FkZWQNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdKSkNCgkJCQkJew0KCQkJCQkJLy8gbG9hZCB0aGUgZGF0YQ0KCQkJCQkJc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XSA9IHNlbGY6OmdldEFsbFZhbHVlcygkY29udGVudCwgJ2NvbnRlbnQnLCBhcnJheSgnY29udGVudF9pbWFnZScpKTsNCgkJCQkJfQ0KCQkJCQkvLyBvbmx5IGxvYWQgdGhlIGNvbnRlbnQgaWYgd2UgaGF2ZSB2YWx1ZXMNCgkJCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdKSkNCgkJCQkJew0KCQkJCQkJY29udGludWU7DQoJCQkJCX0NCgkJCQkJLy8gbm93IGxvYWQgdGhlIGJhbm5lcg0KCQkJCQkkYmFubmVyID0gZmFsc2U7DQoJCQkJCWlmIChpc3NldChzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5jb250ZW50X2ltYWdlKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5jb250ZW50X2ltYWdlKSAmJiBzdHJwb3Moc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+Y29udGVudF9pbWFnZSwgJ18nKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCSRleHRlbnRpb24gPSBleHBsb2RlKCdfJywgc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+Y29udGVudF9pbWFnZSk7DQoJCQkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJCQl7DQoJCQkJCQkJJGJhbm5lciA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwgdWstbWFyZ2luIiBzcmM9Iicuc2VsZjo6JGZpbGVsaW5rLnNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmNvbnRlbnRfaW1hZ2UuJy4nLiRleHRlbnRpb25bMl0uJyIgYWx0PSInLnNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPm5hbWUuJyI+JzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkkZWRpdCA9IHNlbGY6OmxvYWRFZGl0QnV0dG9uKCdjb250ZW50JywkY29udGVudCk7DQoJCQkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5kZXRhaWxzKSB8fCAkYmFubmVyKQ0KCQkJCQl7DQoJCQkJCQkkcmFuZG9tID0gc2VsZjo6cmFuZG9ta2V5KDUpOw0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAnPGRpdiBjbGFzcz0idWstbWFyZ2luJy4kZWRpdENsYXNzLiciPjxhIGhyZWY9IiMiIGRhdGEtdWstdG9nZ2xlPSJ7dGFyZ2V0OlwnI2NvbicuJHJhbmRvbS4nXCd9Ij4nLnNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPm5hbWUuJzwvYT4nIC4gJGVkaXQgLic8L2Rpdj4nOw0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAnPGRpdiBpZD0iY29uJy4kcmFuZG9tLiciIGNsYXNzPSJ1ay1oaWRkZW4iPic7DQoJCQkJCQlpZiAoJGJhbm5lcikNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9ICRiYW5uZXI7DQoJCQkJCQl9DQoJCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+ZGV0YWlscykgfHwgJGJhbm5lcikNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9IHNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmRldGFpbHM7DQoJCQkJCQl9DQoJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9ICc8L2Rpdj4nOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAnPGRpdiBjbGFzcz0idWstbWFyZ2luJy4kZWRpdENsYXNzLiciPicuc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+bmFtZSAuICRlZGl0IC4nPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBmb3VuZA0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGNvbmNlcHQNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gYm9vbA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0Q29uY2VwdENvc3RpbmcoJiRjb25jZXB0LCYkZXZlbnRfY29uY2VwdF90aW1lKQ0KCXsNCgkJJGZvdW5kID0gZmFsc2U7DQoJCS8vIGNoZWNrIGlmIHRoaXMgY29uY2VwdCBoYXMgYSB2YXJpYXRpb24gcmVsYXRpb24NCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkgJiYgaW5fYXJyYXkoJGNvbmNlcHQsIHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSkNCgkJew0KCQkJJGV4dHJhcyA9IGFycmF5KCk7DQoJCQkkYnV0dG9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSBhcyAka2V5ID0+ICRjaGVja2VyKQ0KCQkJew0KCQkJCWlmICgkY29uY2VwdCA9PSAkY2hlY2tlciAmJiBpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pICYmIGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsndmFyaWF0aW9uJ11bJGtleV0pICYmICFzZWxmOjokZXZlbnQtPmNvc3RbJ2V4dHJhJ11bJGtleV0pDQoJCQkJew0KCQkJCQlpZiAoY291bnQoJGJ1dHRvbnMpID4gMiAmJiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpKQ0KCQkJCQl7DQoJCQkJCQkkYnV0dG9uc1tdID0gJzxiciAvPic7DQoJCQkJCX0NCgkJCQkJaWYgKCRidXR0b24gPSBzZWxmOjpzZXRCdXlCdXR0b25zKCRrZXksICRjb25jZXB0LCAkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCQkJew0KCQkJCQkJJGJ1dHRvbnNbXSA9ICRidXR0b247DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZWlmICgkY29uY2VwdCA9PSAkY2hlY2tlciAmJiBpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pICYmIGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsndmFyaWF0aW9uJ11bJGtleV0pICYmIHNlbGY6OiRldmVudC0+Y29zdFsnZXh0cmEnXVska2V5XSkNCgkJCQl7DQoJCQkJCWlmIChjb3VudCgkZXh0cmFzKSA+IDIgJiYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKSkNCgkJCQkJew0KCQkJCQkJJGV4dHJhc1tdID0gJzxiciAvPic7DQoJCQkJCX0NCgkJCQkJaWYgKCRidXR0b24gPSBzZWxmOjpzZXRCdXlCdXR0b25zKCRrZXksICRjb25jZXB0LCAkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCQkJew0KCQkJCQkJJGV4dHJhc1tdID0gJGJ1dHRvbjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnV0dG9ucykpDQoJCQl7DQoJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSA9IGFycmF5KCk7DQoJCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXVtdID0gaW1wbG9kZSgnJywkYnV0dG9ucyk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ29wdGlvbnMnKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSA9ICRidXR0b25zOw0KCQkJCX0NCgkJCQkkZm91bmQgPSB0cnVlOw0KCQkJfQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRleHRyYXMpKQ0KCQkJew0KCQkJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCQkJew0KCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdID0gYXJyYXkoKTsNCgkJCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSBpbXBsb2RlKCcnLCRleHRyYXMpOw0KCQkJCQl9DQoJCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ29wdGlvbnMnKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdID0gJGV4dHJhczsNCgkJCQkJfQ0KDQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXVtdID0gJzxocj4nOw0KCQkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXVtdID0gaW1wbG9kZSgnJywkZXh0cmFzKTsNCgkJCQkJfQ0KCQkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSA9IGFycmF5X21lcmdlKHNlbGY6OiRldmVudE9wdGlvbnNbJGV2ZW50X2NvbmNlcHRfdGltZV0sICRleHRyYXMpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRmb3VuZCA9IHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRmb3VuZDsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGtleQ0KCSAqIEBwYXJhbSBpbnQgJGNvbmNlcHQNCgkgKiBAcGFyYW0gc3RyaW5nICRldmVudF9jb25jZXB0X3RpbWUNCgkgKiBAcmV0dXJuIGFycmF5fGJvb2x8c3RyaW5nDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRCdXlCdXR0b25zKCRrZXksICRjb25jZXB0ID0gMCwgJGV2ZW50X2NvbmNlcHRfdGltZSA9ICcwX18wJykNCgl7DQoJCS8vIDEgIDwtIGluZGl2aWR1YWwgYW5kIGdyb3VwDQoJCS8vIDIgIDwtIG9ubHkgaW5kaXZpZHVhbA0KCQkvLyAzIDwtIG9ubHkgZ3JvdXANCgkJLy8gNCA8LSBjdXN0b20gcmVnDQoJCS8vIDUgPC0gY2xvc2UgcmVnDQoJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmlkKSkNCgkJew0KCQkJLy8gc2V0IHRoZSBwcmljZQ0KCQkJaWYgKHNlbGY6OiRldmVudC0+dHlwZSAhPSA1ICYmICgkY29uY2VwdFByaWNlID0gc2VsZjo6Z2V0Q29uY2VwdFByaWNlKCRrZXkpKSkNCgkJCXsNCgkJCQkkdmFyaWF0aW9uID0gKGludCkgc2VsZjo6JGV2ZW50LT5jb3N0Wyd2YXJpYXRpb24nXVska2V5XTsNCgkJCQkkcXR5ID0gKGludCkgc2VsZjo6JGV2ZW50LT5jb3N0WydxdHknXVska2V5XTsNCgkJCQkkb25seSA9IChpbnQpIHNlbGY6OiRldmVudC0+Y29zdFsnb25seSddWyRrZXldOw0KCQkJCSRleHRyYSA9IChpbnQpIHNlbGY6OiRldmVudC0+Y29zdFsnZXh0cmEnXVska2V5XTsNCgkJCQkkdGF4ZWQgPSAoaW50KSBzZWxmOjokZXZlbnQtPmNvc3RbJ3RheGVkJ11bJGtleV07DQoJCQkJLy8gc3RhcnQgYnVpbGRpbmcgdGhlIGJ1dHRvbg0KCQkJCSRidXR0b24gPSBhcnJheSgpOw0KCQkJCWlmIChzZWxmOjokZXZlbnQtPnR5cGUgPT0gNCkNCgkJCQl7DQoJCQkJCSRidXR0b25bXSA9ICc8ZGl2ICBjbGFzcz0idWstd2lkdGgtMS0xIHVrLXRleHQtYm9sZCB1ay10ZXh0LXN1Y2Nlc3MgdWstdGV4dC1sYXJnZSI+JzsNCgkJCQkJJGJ1dHRvbltdID0gc2VsZjo6bG9hZE5hbWUoJ3ZhcmlhdGlvbicsJHZhcmlhdGlvbik7DQoJCQkJCSRidXR0b25bXSA9ICcgICcgLiRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE9fTU9ORVknXTsNCgkJCQkJJGJ1dHRvbltdID0gJzwvZGl2Pic7DQoJCQkJCSRidXR0b25bXSA9ICc8YSBocmVmPSIjQ1VTVE9NX0xJTksiIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEiIHRhcmdldD0iX2JsYW5rIj4nOw0KCQkJCQkkYnV0dG9uW10gPSBUZXh0OjpfKCdSZWdpc3RlcicpOw0KCQkJCQkkYnV0dG9uW10gPSAnPC9hPic7DQoNCgkJCQkJJGJ1eUlkID0gbnVsbDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGJ1bmRsZSA9IDA7DQoJCQkJCSR0aW1lID0gZXhwbG9kZSgnX18nLCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJCQl7DQoJCQkJCQkkYnVuZGxlID0gc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bJGV2ZW50X2NvbmNlcHRfdGltZV07DQoJCQkJCX0NCgkJCQkJLy8gc3dpdGNoIElEDQoJCQkJCSRzd2l0Y2hJRCA9IHNlbGY6OiRldmVudC0+aWQgLiAnXycgLiAoaW50KSAkYnVuZGxlIC4gJ18nIC4oaW50KSAkdGltZVsxXSAuICdfJyAuKGludCkgJGNvbmNlcHQgLiAnXycgLiAoaW50KSAkdmFyaWF0aW9uOw0KCQkJCQkvLyBjaGVja2luZyBJRA0KCQkJCQkkY2hlY2tpbmdJRCA9IHNlbGY6OiRldmVudC0+b3JnYW5pemVyIC4gJ18nIC4gJHN3aXRjaElEOw0KCQkJCQkvLyBjaGVja2luZyBLRVkNCgkJCQkJJElES0VZID0gbWQ1KCRjaGVja2luZ0lEKTsNCgkJCQkJLy8gc2V0IGJ1eSBJRA0KCQkJCQkkYnV5SWQgPSAkSURLRVkgLiAnX18nIC4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UTyddIC4gJ19fJyAuICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfSUQnXTsNCgkJCQkJLy8gZ2V0IHF0eSBhdmFpbGFibGUNCgkJCQkJJGFjdHVhbFFUWSA9IHNlbGY6OmdldFF0eUF2YWlsYWJsZSgkcXR5LCAndmFyaWF0aW9uJywgJGNoZWNraW5nSUQpOw0KCQkJCQkvLyBnZXQgcXR5IHRoaXMgdXNlciBoYXMgc2VsZWN0ZWQgDQoJCQkJCSRzZWxlY3RlZFFUWSA9IHNlbGY6OmFjdGl2ZUNhcnRRdHkoJGNoZWNraW5nSUQpOw0KCQkJCQkvLyBzZXQgdmFyaWF0aW9uIG5hbWUNCgkJCQkJJHZhcmlhdGlvbk5hbWUgPSBzZWxmOjpsb2FkTmFtZSgndmFyaWF0aW9uJywkdmFyaWF0aW9uKTsNCgkJCQkJLy8gc2V0IGJ1dHRvbiBieSBJRA0KCQkJCQkkYnV0dG9uSWQgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRidXlJZCwgJ2NBbWVsJyk7DQoJCQkJCS8vIHdlIHJlbW92ZSBkaXNhYmxlciBpZiBub3QgbmVlZGVkDQoJCQkJCXNlbGY6OiRkaXNhYmxlQnV0dG9uc1snIyMjJy4kYnV0dG9uSWQuJyMjIyddID0gJyc7DQoJCQkJCWlmICggc2VsZjo6JHJldHVyblR5cGUgIT09ICdvcHRpb25zJykNCgkJCQkJew0KCQkJCQkJLy8gc2V0IHNvbWUgSmF2YVNjcmlwdCB2YWx1ZXMNCgkJCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRidXR0b25TY3JpcHRbXSA9ICdhdmFpbGFibGVbIicuJGJ1dHRvbklkLiciXSA9ICcuIChpbnQpICRxdHkuJzsnOw0KCQkJCQkJfQ0KCQkJCQkJLy8gdGlja2V0IGJlaGF2aW9yIA0KCQkJCQkJaWYgKCEkZXh0cmEpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGJ1dHRvblNjcmlwdFtdID0gJ3RpY2tldHNbIicuJGJ1dHRvbklkLiciXSA9IDE7JzsNCgkJCQkJCX0NCgkJCQkJCS8vIHNldCB0aGUgb25seSBzd2l0Y2gNCgkJCQkJCSRvbmx5U3dpdGNoID0gJyc7DQoJCQkJCQlpZiAoMSA9PSAkb25seSAmJiAhJGV4dHJhKQ0KCQkJCQkJew0KCQkJCQkJCSRvbmx5U3dpdGNoID0gJ2RhdGEtb25seT0iMSInOw0KCQkJCQkJCS8vIG1ha2Ugc3VyZSBzZWxlY3RlZCBvbmx5IHZhbHVlcyBhcmUgc2V0IGFnYWluDQoJCQkJCQkJaWYgKCRzZWxlY3RlZFFUWSA+IDApDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBsb2FkIHBlciBjb25jZXB0DQoJCQkJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNvbmNlcHRTd2l0Y2hPbmx5WyRjb25jZXB0XSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCXNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskY29uY2VwdF0gPSBhcnJheSgpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIHRoaXMgaXMgdGhlIGFjdGl2ZSBzZWxlY3Rpb24NCgkJCQkJCQkJc2VsZjo6JGNvbmNlcHRTd2l0Y2hPbmx5WyRjb25jZXB0XVtdID0gYXJyYXkoJ2NvbmNlcHQnID0+IChpbnQpICRjb25jZXB0LCAnYnVuZGxlJyA9PiAoaW50KSAkYnVuZGxlKTsNCgkJCQkJCQkJLy8gbG9hZCBwZXIgYnVuZGxlDQoJCQkJCQkJCWlmICghaXNzZXQoc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGJ1bmRsZV0pKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokYnVuZGxlU3dpdGNoT25seVskYnVuZGxlXSA9IGFycmF5KCk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gdGhpcyBpcyB0aGUgYWN0aXZlIHNlbGVjdGlvbg0KCQkJCQkJCQlzZWxmOjokYnVuZGxlU3dpdGNoT25seVskYnVuZGxlXVtdID0gYXJyYXkoJ2NvbmNlcHQnID0+IChpbnQpICRjb25jZXB0LCAnYnVuZGxlJyA9PiAoaW50KSAkYnVuZGxlKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJc2VsZjo6JGRpc2FibGVCdXR0b25zQ2hlY2tbJGJ1dHRvbklkXSA9IGFycmF5KCdjb25jZXB0JyA9PiAoaW50KSAkY29uY2VwdCwgJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJGJ1dHRvbltdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSB1ay10ZXh0LWJvbGQgdWstdGV4dC1zdWNjZXNzIHVrLXRleHQtbGFyZ2UiPic7DQoJCQkJCQkkYnV0dG9uW10gPSAkdmFyaWF0aW9uTmFtZTsNCgkJCQkJCSRidXR0b25bXSA9ICc8YnIgY2xhc3M9InVrLXZpc2libGUtc21hbGwiLz4gIDxzcGFuIGNsYXNzPSInLiRidXR0b25JZC4nLXByaWNlIj4nIC4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UT19NT05FWSddIC4nPC9zcGFuPic7DQoJCQkJCQkkYnV0dG9uW10gPSAnPC9kaXY+JzsNCg0KCQkJCQkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgc3RpbGwgcGxhY2Ugb3BlbiBvbiB0aGlzIHZhcmlhdGlvbg0KCQkJCQkJaWYgKCRxdHkgIT0gMCAmJiAkYWN0dWFsUVRZIDw9IDAgJiYgJHNlbGVjdGVkUVRZIDw9IDAgJiYgc2VsZjo6JHJldHVyblR5cGUgIT09ICdhZG1pbicpDQoJCQkJCQl7DQoJCQkJCQkJLy8gc3RhcnQgYnVpbGRpbmcgdGhlIGJ1dHRvbg0KCQkJCQkJCSRidXR0b24gPSBhcnJheSgpOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEgdWstdGV4dC1ib2xkIHVrLXRleHQtbXV0ZWQgdWstdGV4dC1sYXJnZSI+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAkdmFyaWF0aW9uTmFtZTsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPGJyIGNsYXNzPSJ1ay12aXNpYmxlLXNtYWxsIi8+ICcgLiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX1RPX01PTkVZJ10gLicgPHNtYWxsPignIC4gVGV4dDo6XygnVGhpcyBPcHRpb24gaXMgRnVsbC4nKSAuICcpPC9zbWFsbD4nOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8L2Rpdj4nOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8YnV0dG9uIGNsYXNzPSJ1ay1idXR0b24gdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+ICc7DQoJCQkJCQkJJGJ1dHRvbltdID0gVGV4dDo6XygnQ2xvc2VkJyk7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYgKHNlbGY6OiRldmVudC0+dHlwZSA9PSAyKQ0KCQkJCQkJew0KCQkJCQkJCWlmICgkc2VsZWN0ZWRRVFkgPiAwKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gIGlkPSInLiRidXR0b25JZC4nLXNlbGVjdCIgY2xhc3M9InNlbGVjdC1idXR0b24gdWstYnV0dG9uIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0xIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIGRhdGEtYnV5PSInLiRidXlJZC4nIiBkYXRhLXN3aXRjaD0iJy4kc3dpdGNoSUQuJyIgJy4kb25seVN3aXRjaC4nIGRhdGEtdWstYnV0dG9uPSIwIj4gJzsNCgkJCQkJCQkJJGJ1dHRvbltdID0gVGV4dDo6XygnU2VsZWN0Jyk7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8L2J1dHRvbj4nOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlDQoJCQkJCQkJew0KCQkJCQkJCQkkYnV0dG9uW10gPSAnPGJ1dHRvbiAgaWQ9IicuJGJ1dHRvbklkLictc2VsZWN0IiBjbGFzcz0ic2VsZWN0LWJ1dHRvbiB1ay1idXR0b24gdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgZGF0YS11ay1idXR0b249IjAiPiAnOw0KCQkJCQkJCQkkYnV0dG9uW10gPSBUZXh0OjpfKCdTZWxlY3QnKTsNCgkJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCS8vIGFkZCB0byBjYXJ0IGJ1dHRvbg0KCQkJCQkJCSRidXR0b25bXSA9ICc8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIj4nOw0KCQkJCQkJCWlmICgkcXR5ICE9IDAgJiYgJGFjdHVhbFFUWSA8PSAwICYmICRzZWxlY3RlZFFUWSA+IDApDQoJCQkJCQkJew0KCQkJCQkJCQkkYnV0dG9uW10gPSAnPGJ1dHRvbiBpZD0iJy4kYnV0dG9uSWQuJy1wbHVzIiBjbGFzcz0ic2VsZWN0LWJ1dHRvbiB1ay1idXR0b24gdWstYnV0dG9uLXNtYWxsIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0zIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIGRhdGEtYnV5PSInLiRidXlJZC4nIiBkYXRhLXN3aXRjaD0iJy4kc3dpdGNoSUQuJyIgJy4kb25seVN3aXRjaC4nIGRpc2FibGVkPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8YnV0dG9uIGlkPSInLiRidXR0b25JZC4nLXBsdXMiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgIyMjJy4kYnV0dG9uSWQuJyMjIz4nOw0KCQkJCQkJCX0NCgkJCQkJCQkkYnV0dG9uW10gPSAnPGkgY2xhc3M9InVrLWljb24tcGx1cyI+PC9pPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gaWQ9IicuJGJ1dHRvbklkLictbWludXMiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgIyMjJy4kYnV0dG9uSWQuJyMjIz4nOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8aSBjbGFzcz0idWstaWNvbi1taW51cyI+PC9pPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+JzsNCgkJCQkJCQlpZiAoJHNlbGVjdGVkUVRZID4gMCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8c3BhbiBpZD0iJy4kYnV0dG9uSWQuJy1udW1iZXIiIGRhdGEtcXR5PSInLiRzZWxlY3RlZFFUWS4nIj48c3BhbiBjbGFzcz0idWstYmFkZ2UgdWstYmFkZ2Utbm90aWZpY2F0aW9uIHVrLWJhZGdlLXN1Y2Nlc3MiPicuJHNlbGVjdGVkUVRZLic8L3NwYW4+PC9zcGFuPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCQkkYnV0dG9uW10gPSAnPHNwYW4gaWQ9IicuJGJ1dHRvbklkLictbnVtYmVyIiBkYXRhLXF0eT0iMCI+MDwvc3Bhbj4nOwkJCQkJCQ0KCQkJCQkJCX0NCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9idXR0b24+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9kaXY+JzsNCgkJCQkJCX0NCgkJCQkJCQ0KCQkJCQkJLy8gY2hlY2sgaWYgdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgaW4gcHJpY2UNCgkJCQkJCSRzdG9yZWRQcmljZSA9IHNlbGY6OmdldEV2ZW50RGV0YWlscygkSURLRVksICdwcmljZScsICdpZCcsIGZhbHNlKTsNCgkJCQkJCWlmICgkc3RvcmVkUHJpY2UgIT09ICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE8nXSkNCgkJCQkJCXsNCgkJCQkJCQkvLyB1cGRhdGUgdGhlIHByaWNlIGlmIHRoZXJlIHdhcyBhIGNoYW5nZQ0KCQkJCQkJCXNlbGY6OnVwZGF0ZUV2ZW50RGV0YWlsKCRJREtFWSwgYXJyYXkoDQoJCQkJCQkJCSdpZCcgPT4gJElES0VZLA0KCQkJCQkJCQknYnV5X2lkJyA9PiAkYnV5SWQsDQoJCQkJCQkJCSdjaGVja19pZCcgPT4gJGNoZWNraW5nSUQsDQoJCQkJCQkJCSdzd2l0Y2hfaWQnID0+ICRzd2l0Y2hJRCwNCgkJCQkJCQkJJ3ByaWNlJyA9PiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX0ZST00nXSwNCgkJCQkJCQkJJ25hbWUnID0+ICR2YXJpYXRpb25OYW1lLA0KCQkJCQkJCQkncXR5JyA9PiAkcXR5LA0KCQkJCQkJCQknb25seScgPT4gJG9ubHksDQoJCQkJCQkJCSdleHRyYScgPT4gJGV4dHJhLA0KCQkJCQkJCQkndGF4ZWQnID0+ICR0YXhlZCwNCgkJCQkJCQkJJ3ByaWNlT2JqZWN0JyA9PiAkY29uY2VwdFByaWNlKSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gb25seSByZXR1cm4gYnV0dG9uIGlmIGFkbWluIG9yIHNpdGUgcmV0dXJuIHR5cGUNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQkJew0KCQkJCQlyZXR1cm4gIGltcGxvZGUoJycsJGJ1dHRvbik7DQoJCQkJfQ0KCQkJCS8vIGlmIG9wdGlvbnMgdGhlbiByZXR1cm4gYXJyYXkgb2YgcmVzdWx0cw0KCQkJCWVsc2VpZiAoJGJ1eUlkICYmIHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXJldHVybiBhcnJheSgNCgkJCQkJCSdpZCcgPT4gJElES0VZLA0KCQkJCQkJJ2J1eV9pZCcgPT4gJGJ1eUlkLA0KCQkJCQkJJ2NoZWNrX2lkJyA9PiAkY2hlY2tpbmdJRCwNCgkJCQkJCSdzd2l0Y2hfaWQnID0+ICRzd2l0Y2hJRCwNCgkJCQkJCSdwcmljZScgPT4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UTyddLA0KCQkJCQkJJ25hbWUnID0+ICR2YXJpYXRpb25OYW1lLA0KCQkJCQkJJ3F0eScgPT4gJHF0eSwNCgkJCQkJCSdvbmx5JyA9PiAkb25seSwNCgkJCQkJCSdleHRyYScgPT4gJGV4dHJhLA0KCQkJCQkJJ3RheGVkJyA9PiAkdGF4ZWQsDQoJCQkJCQkncHJpY2VPYmplY3QnID0+ICRjb25jZXB0UHJpY2UpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudERldGFpbHMoJGtleSwgJHdoYXQgPSAncHJpY2UnLCAkdHlwZSA9ICduYW1lJywgJHJldHJ5ID0gdHJ1ZSwgJHByaWNlQ29udmVydGlvbiA9IHRydWUpDQoJew0KCQlpZiAoJ25hbWUnID09ICR0eXBlKQ0KCQl7DQoJCQkka2V5ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgka2V5KTsNCgkJfQ0KCQkvLyBnZXQgdGhlIGV2ZW50IGRldGFpbHMNCgkJJGV2ZW50RGV0YWlscyA9IHNlbGY6OmdldCgnZXZlbnREZXRhaWxzVkRNJywgbnVsbCk7DQoJCWlmICgkZXZlbnREZXRhaWxzICYmIGlzc2V0KCRldmVudERldGFpbHNbJHR5cGVdWyRrZXldKSAmJiBpc3NldCgkZXZlbnREZXRhaWxzWyR0eXBlXVska2V5XVskd2hhdF0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6ZXZlbnREZXRhaWxQcmVwKCRldmVudERldGFpbHNbJHR5cGVdWyRrZXldLCAkd2hhdCwgJHByaWNlQ29udmVydGlvbik7DQoJCX0NCgkJLy8gaWYgbm90IHNldCByZXRyeSwgYnkgc2V0dGluZyBpdA0KCQlpZiAoJHJldHJ5KQ0KCQl7DQoJCQlzZWxmOjpzZXRFdmVudE9wdGlvbnMoKTsNCgkJCXJldHVybiBzZWxmOjpnZXRFdmVudERldGFpbHMoJGtleSwgJHdoYXQsICR0eXBlLCBmYWxzZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZXZlbnREZXRhaWxQcmVwKCYkdmFsdWVzLCAmJHdoYXQsICRwcmljZUNvbnZlcnRpb24pDQoJew0KCQlpZiAoJ3ByaWNlJyA9PT0gJHdoYXQgJiYgJHByaWNlQ29udmVydGlvbikNCgkJew0KCQkJLy8gdXNlZCBmb3IgdGhlIGludm9pY2UgdmlldyBtYWlubHkNCgkJCSRqaW5wdXQgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dDsNCgkJCSRkYXRhID0gJGppbnB1dC0+Z2V0QXJyYXkoYXJyYXkoDQoJCQkJJ29yZ2FuaXplcl9jdXJyZW5jeScgPT4gJ3dvcmQnLA0KCQkJCSdyZWdpc3RlcmVkX3VzZXJfY3VycmVuY3knID0+ICd3b3JkJywNCgkJCQknZXhjaGFuZ2VfcmF0ZScgPT4gJ2Zsb2F0Jw0KCQkJKSk7DQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ29yZ2FuaXplcl9jdXJyZW5jeSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0YVsncmVnaXN0ZXJlZF91c2VyX2N1cnJlbmN5J10pKQ0KCQkJew0KCQkJCSRjaGVjayA9ICRkYXRhWydvcmdhbml6ZXJfY3VycmVuY3knXS4kZGF0YVsncmVnaXN0ZXJlZF91c2VyX2N1cnJlbmN5J107DQoJCQkJJG9yZ2FuaXplcl9jdXJyZW5jeSA9ICdOT05FJzsNCgkJCQlpZiAoaXNzZXQoJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9OQU1FJ10pICYmICRjaGVjayA9PT0gJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9OQU1FJ10pDQoJCQkJew0KCQkJCQlyZXR1cm4gJHZhbHVlc1skd2hhdF07DQoJCQkJfQ0KCQkJCS8vIGlmIGV4Y2hhbmdlIHJhdGUgaXMgbm90IHNldA0KCQkJCWlmIChpc3NldCgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pKQ0KCQkJCXsNCgkJCQkJJG9yZ2FuaXplcl9jdXJyZW5jeSA9IHNlbGY6OmdldEZyb21DdXJyZW5jeSgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pOw0KCQkJCX0NCgkJCQlpZiAoJGRhdGFbJ2V4Y2hhbmdlX3JhdGUnXSA9PSAwICYmICRvcmdhbml6ZXJfY3VycmVuY3kgPT09ICRkYXRhWydvcmdhbml6ZXJfY3VycmVuY3knXSkNCgkJCQl7DQoJCQkJCSRyZXN1bHQgPSBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJGRhdGFbJ29yZ2FuaXplcl9jdXJyZW5jeSddLCAkdmFsdWVzWyR3aGF0XSwgJGRhdGFbJ3JlZ2lzdGVyZWRfdXNlcl9jdXJyZW5jeSddKTsNCgkJCQkJLy8gbm93IHVwZGF0ZSB0aGUgZGF0YQ0KCQkJCQlyZXR1cm4gJHJlc3VsdFsnRVhDSEFOR0VfUkFURV9UTyddOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gYmNtdWwoJHZhbHVlc1skd2hhdF0sICRkYXRhWydleGNoYW5nZV9yYXRlJ10sIDIpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGZvciBvdGhlciB2aWV3cw0KCQkJZWxzZWlmIChpc3NldCgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pKQ0KCQkJew0KCQkJCSRvcmdhbml6ZXJfY3VycmVuY3kgPSBzZWxmOjpnZXRGcm9tQ3VycmVuY3koJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9JRCddKTsNCgkJCQkkYWN0aXZlX2N1cnJlbmN5ID0gIHNlbGY6OmdldFVzZXJDdXJyZW5jeSgpOw0KCQkJCSRyZXN1bHQgPSBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJG9yZ2FuaXplcl9jdXJyZW5jeSwgJHZhbHVlc1skd2hhdF0sICRhY3RpdmVfY3VycmVuY3kpOw0KCQkJCS8vIG5vdyB1cGRhdGUgdGhlIGRhdGENCgkJCQlyZXR1cm4gJHJlc3VsdFsnRVhDSEFOR0VfUkFURV9UTyddOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkdmFsdWVzWyR3aGF0XTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEZyb21DdXJyZW5jeSgkZXhjaGFuZ2VfSUQpDQoJew0KCQkkZnJvbUFycmF5ID0gYXJyYXlfbWFwKCdzdHJ0b3VwcGVyJywgKGFycmF5KSBleHBsb2RlKCctJywgJGV4Y2hhbmdlX0lEKSk7DQoJCXJldHVybiAkZnJvbUFycmF5WzBdOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0RXZlbnRPcHRpb25zKCkNCgl7DQoJCSRldmVudHMgPSBzZWxmOjpnZXRWYXJzKCdldmVudCcsIDEsICdwdWJsaXNoZWQnKTsNCgkJLy8gb25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGFuIGFycmF5DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnRzKSkNCgkJew0KCQkJJGJ1Y2tldCA9IGFycmF5KCk7ICRidWNrZXRbJ25hbWUnXSA9IGFycmF5KCk7ICAkYnVja2V0WydpZCddID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goJGV2ZW50cyBhcyAkaXRlbSkNCgkJCXsNCgkJCQlpZiAoJGV2ZW50T3B0aW9ucyA9IHNlbGY6OmdldEV2ZW50KCRpdGVtLCAnb3B0aW9ucycpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCgkZXZlbnRPcHRpb25zIGFzICRldmVudCkNCgkJCQkJew0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudCkpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJGV2ZW50IGFzICRvcHRpb24pDQoJCQkJCQkJew0KCQkJCQkJCQkkb3B0aW9uWydfbmFtZSddID0gKGlzc2V0KCRvcHRpb25bJ2RhdGUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJG9wdGlvblsnZGF0ZSddKSkgPyAgJG9wdGlvblsnbmFtZSddLiAnIH4gJyAuICRvcHRpb25bJ2RhdGUnXSA6ICAkb3B0aW9uWyduYW1lJ107DQoJCQkJCQkJCSRzZWxlY3QgPSBKRmlsdGVyT3V0cHV0OjpjbGVhblRleHQoJG9wdGlvblsnX25hbWUnXSk7DQoJCQkJCQkJCS8vIHN0b3JlIGluIHNlc3Npb24NCgkJCQkJCQkJJGtleSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlbGVjdCk7DQoJCQkJCQkJCSRvcHRpb25bJ3NlbGVjdCddID0gICRzZWxlY3Q7DQoJCQkJCQkJCSRidWNrZXRbJ25hbWUnXVska2V5XSA9ICRvcHRpb247DQoJCQkJCQkJCSRidWNrZXRbJ2lkJ11bJG9wdGlvblsnaWQnXV0gPSAkb3B0aW9uOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0WydpZCddKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXQoJ2V2ZW50RGV0YWlsc1ZETScsICRidWNrZXQpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVFdmVudERldGFpbCgka2V5LCAkdmFsdWVzKQ0KCXsNCgkJLy8gZ2V0IHRoZSBldmVudCBEZXRhaWxzIGZyb20gbWVtb3J5DQoJCSRldmVudERldGFpbHMgPSBzZWxmOjpnZXQoJ2V2ZW50RGV0YWlsc1ZETScsIG51bGwpOw0KCQkvLyBtYWtlIHN1cmUgdGhlIGlkIGlzIGZvdW5kDQoJCWlmICgkZXZlbnREZXRhaWxzICYmIGlzc2V0KCRldmVudERldGFpbHNbJ2lkJ11bJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudERldGFpbHNbJ2lkJ11bJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2YWx1ZXMpKQ0KCQl7DQoJCQkkc2VsZWN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkZXZlbnREZXRhaWxzWydpZCddWyRrZXldWydzZWxlY3QnXSk7DQoJCQlmb3JlYWNoICgkdmFsdWVzIGFzICRmaWVsZCA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJLy8gdXBkYXRlIHRoZSBmaWVsZCBpbiBJRA0KCQkJCSRldmVudERldGFpbHNbJ2lkJ11bJGtleV1bJGZpZWxkXSA9ICR2YWx1ZTsNCgkJCQkvLyB1cGRhdGUgdGhlIGZpZWxkIGluIHNlbGVjdGlvbg0KCQkJCSRldmVudERldGFpbHNbJ25hbWUnXVskc2VsZWN0XVskZmllbGRdID0gJHZhbHVlOw0KCQkJfQ0KCQkJLy8gc3RvcmUgYmFjayB0byBtZW1vcnkNCgkJCXNlbGY6OnNldCgnZXZlbnREZXRhaWxzVkRNJywgJGV2ZW50RGV0YWlscyk7DQoJCX0NCgl9DQoNCgkvKioNCgkqICBHZXQgYWxsIGl0ZW1zIGluIENhcnQNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2FydCgkc3RhdHVzID0gMSwgJGJvdGggPSB0cnVlKQ0KCXsNCgkJLy8gYWx3YXlzIGNoZWNrIGZvciBwdWJsaWMga2V5DQoJCSRwdWJsaWMgPSBzZWxmOjpnZXQoJ3B1YmxpY0tlZVknLCBudWxsKTsNCgkJLy8gZ2V0IHVzZXIgb2JqZWN0DQoJCSR1c2VySXMgPSBzZWxmOjp1c2VySXMobnVsbCwgdHJ1ZSk7DQoJCS8vIG5vdyBjaGVjayB0aGUgaWQgYWdhaW5zdCB0aGUgcmVnaXN0ZXJlZCB2YWx1ZXMNCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmtleScpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3JlZ2lzdGVyJywgJ2EnKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2V2ZW50JywgJ2UnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuZXZlbnQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2UuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2Euc3RhdHVzID0gJyAuIChpbnQpICRzdGF0dXMpOw0KCQkkcXVlcnktPm9yZGVyKCdlLm5hbWUgQVNDJyk7DQoJCWlmICgkdXNlcklzWydpcyddID09IDEgJiYgJHVzZXJJc1snaWQnXSA+IDApDQoJCXsNCgkJCWlmICgkcHVibGljICYmICRib3RoID09PSB0cnVlKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykgLiAnIE9SIGEucmVnaXN0ZXJlZF91c2VyID0gJy4gKGludCkgJHVzZXJJc1snaWQnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnLiAoaW50KSAkdXNlcklzWydpZCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRwdWJsaWMpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCS8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNhcnQgaXRlbXMNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCSRyZWdpc3RyYXRpb25zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJZm9yZWFjaCAoJHJlZ2lzdHJhdGlvbnMgYXMgJHJlZykNCgkJCXsNCgkJCQkvLyBvcmdhbml6ZXJfZXZlbnRfYnVuZGxlX3RpbWVfY29uY2VwdF92YXJpYXRpb24NCgkJCQkkZ2V0ID0gZXhwbG9kZSgnXycsICRyZWctPmtleSk7DQoJCQkJJGlkID0gbWQ1KCRyZWctPmtleSk7DQoJCQkJLy8gbG9hZCB0aGUgdmFsdWVzDQoJCQkJaWYgKCFpc3NldCgkYnVja2V0WyRnZXRbMF1dKSkNCgkJCQl7DQoJCQkJCSRidWNrZXRbJGdldFswXV0gPSBhcnJheSgpOw0KCQkJCX0NCgkJCQkvLyBjb3VudCB0aGUgbnVtYmVyIG9mIHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgdmFyaWF0aW9uIGFuZCBzZXQgaXRzIG5lZWRlZCB2YWx1ZXMNCgkJCQlpZiAoIWlzc2V0KCRidWNrZXRbJGdldFswXV1bJGlkXSkpDQoJCQkJew0KCQkJCQkkYnVja2V0WyRnZXRbMF1dWyRpZF0gPSBhcnJheSgpOw0KCQkJCQkkYnVja2V0WyRnZXRbMF1dWyRpZF1bJ3F0eSddID0gMTsNCgkJCQkJJGJ1Y2tldFskZ2V0WzBdXVskaWRdWydldmVudCddID0gKGludCkgJGdldFsxXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGJ1Y2tldFskZ2V0WzBdXVskaWRdWydxdHknXSsrOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkYnVja2V0Ow0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqICBDaGVjayBpZiB0aGUgcXR5IGlzIHN0aWxsIGF2YWlsYWJsZQ0KCSovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhY3RpdmVDYXJ0UXR5KCRrZXlJRCkNCgl7DQoJCS8vIGFsd2F5cyBjaGVjayBmb3IgcHVibGljIGtleQ0KCQkkcHVibGljID0gc2VsZjo6Z2V0KCdwdWJsaWNLZWVZJywgbnVsbCk7DQoJCS8vIGdldCB1c2VyIG9iamVjdA0KCQkkdXNlcklzID0gc2VsZjo6dXNlcklzKG51bGwsIHRydWUpOw0KCQkvLyBub3cgY2hlY2sgdGhlIGlkIGFnYWluc3QgdGhlIHJlZ2lzdGVyZWQgdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnYS5pZCcpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcmVnaXN0ZXInLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5rZXkgPSAnIC4gJGRiLT5xdW90ZSgka2V5SUQpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5zdGF0dXMgPSAxJyk7DQoJCWlmICgkdXNlcklzWydpcyddID09IDEgJiYgJHVzZXJJc1snaWQnXSA+IDApDQoJCXsNCgkJCWlmICgkcHVibGljKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykgLiAnIE9SIGEucmVnaXN0ZXJlZF91c2VyID0gJy4gKGludCkgJHVzZXJJc1snaWQnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnLiAoaW50KSAkdXNlcklzWydpZCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRwdWJsaWMpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuIDA7DQoJCX0NCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgY2FydCBpdGVtcw0KCQlyZXR1cm4gKGludCkgJGRiLT5nZXROdW1Sb3dzKCk7DQoJfQ0KDQoJLyoqDQoJKiAgQ2hlY2sgaWYgdGhlIHF0eSBpcyBzdGlsbCBhdmFpbGFibGUNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UXR5QXZhaWxhYmxlKCRxdHksICR0eXBlLCAka2V5SUQpDQoJew0KCQlpZiAoKCd2YXJpYXRpb24nID09PSAkdHlwZSB8fCAnZXZlbnQnID09PSAkdHlwZSkgJiYgKChpc19udW1lcmljKCRxdHkpICYmICRxdHkgPiAwKSB8fCAndGFrZW4nID09PSAkcXR5KSkNCgkJew0KCQkJLy8gbm93IGNoZWNrIHRoZSBpZCBhZ2FpbnN0IHRoZSByZWdpc3RlcmVkIHZhbHVlcw0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWdpc3RlcicsICdhJykpOw0KCQkJaWYgKCd2YXJpYXRpb24nID09PSAkdHlwZSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhLmtleSA9ICcgLiAkZGItPnF1b3RlKCRrZXlJRCkpOw0KCQkJfQ0KCQkJZWxzZWlmICgnZXZlbnQnID09PSAkdHlwZSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhLmV2ZW50ID0gJyAuIChpbnQpICRrZXlJRCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICRxdHk7DQoJCQl9DQoJCQkkcXVlcnktPndoZXJlKCdhLnN0YXR1cyA+PSAxJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCSRyZWdpc3RlcmVkID0gJGRiLT5nZXROdW1Sb3dzKCk7DQoJCQlpZiAoJ3Rha2VuJyA9PT0gJHF0eSkNCgkJCXsNCgkJCQlyZXR1cm4gJHJlZ2lzdGVyZWQ7DQoJCQl9DQoJCQlpZiAoJHJlZ2lzdGVyZWQgPj0gJHF0eSkNCgkJCXsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCXJldHVybiBiY3N1YigkcXR5LCAkcmVnaXN0ZXJlZCk7DQoJCX0NCgkJcmV0dXJuICRxdHk7DQoJfQ0KDQoJLyoqDQoJKiBAIHJldHVybiBmbG9hdCBvbiBzdWNjZXNzDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbmNlcHRQcmljZSgka2V5KQ0KCXsNCgkJLy8gZmlyc3Qgd2UgZ2V0IHRoZSByYXcgc2V0IHByaWNlIChpbiBvcmdhbml6ZXJzIGN1cnJlbmN5KQ0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0WydwcmljZSddWyRrZXldKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pKQ0KCQl7DQoJCQkkb3JnUmF3ID0gc2VsZjo6JGZpbHRlcklucHV0LT5jbGVhbihzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pOw0KCQkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkb3JnUmF3KSkNCgkJCXsNCgkJCQkkb3JnUmF3ID0gIjAuMDAiOw0KCQkJfQ0KCQkJLy8gZ2V0IG9yZ2FuaXplciBjdXJyZW5jeQ0KCQkJaWYgKCRvcmdDdXJyZW5jeSA9IHNlbGY6OmdldEV2ZW50Q3VycmVuY3koKSkNCgkJCXsNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBhY3RpdmUgcGFydHkgY3VycmVuY3kNCgkJCQkJJGFjdGl2ZUN1cnJlbmN5ID0gc2VsZjo6Z2V0KCdBQ1RJVkVfQ1VSUkVOQ1knKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGFjdGl2ZUN1cnJlbmN5ID0gJG9yZ0N1cnJlbmN5Ow0KCQkJCX0NCgkJCQkvLyBzZXQgYWN0aXZlIHByaWNlIG9iamVjdA0KCQkJCXJldHVybiBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJG9yZ0N1cnJlbmN5LCAkb3JnUmF3LCAkYWN0aXZlQ3VycmVuY3kpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcmV0dXJuIG1peGVkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25jZXB0c0hUTUwoKQ0KCXsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0SFRNTCkpDQoJCXsNCgkJCSR0aGlzRXZlbnQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JGNvbmNlcHRIVE1MIGFzICRldmVudF9jb25jZXB0X190aW1lID0+ICRIVE1MKQ0KCQkJew0KCQkJCSRsb29raW5nID0gZXhwbG9kZSgnXycsJGV2ZW50X2NvbmNlcHRfX3RpbWUpOw0KCQkJCWlmIChzZWxmOjokZXZlbnQtPmlkID09ICRsb29raW5nWzBdKQ0KCQkJCXsNCgkJCQkJJHRoaXNFdmVudFskZXZlbnRfY29uY2VwdF9fdGltZV0gPSAkSFRNTDsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXNFdmVudCkpDQoJCQl7DQoJCQkJcmV0dXJuICR0aGlzRXZlbnQ7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEByZXR1cm4gbWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50T3B0aW9ucygpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9ucykpDQoJCXsNCgkJCSR0aGlzRXZlbnQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50T3B0aW9ucyBhcyAkZXZlbnRfY29uY2VwdF9fdGltZSA9PiAkb3B0aW9ucykNCgkJCXsNCgkJCQkkbG9va2luZyA9IGV4cGxvZGUoJ18nLCRldmVudF9jb25jZXB0X190aW1lKTsNCgkJCQlpZiAoc2VsZjo6JGV2ZW50LT5pZCA9PSAkbG9va2luZ1swXSkNCgkJCQl7DQoJCQkJCSR0aGlzRXZlbnRbJGV2ZW50X2NvbmNlcHRfX3RpbWVdID0gJG9wdGlvbnM7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzRXZlbnQpKQ0KCQkJew0KCQkJCXJldHVybiAkdGhpc0V2ZW50Ow0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gbWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbnNlcHRJZCgkZXZlbnRfY29uY2VwdF90aW1lKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRjb25jZXB0c1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokY29uY2VwdHNbJGV2ZW50X2NvbmNlcHRfdGltZV07DQoJCX0NCgkJcmV0dXJuICRldmVudF9jb25jZXB0X3RpbWU7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRldmVudF9jb25jZXB0X3RpbWUNCgkgKiBAcmV0dXJuIGludHxtaXhlZA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYXRpb24oJGV2ZW50X2NvbmNlcHRfdGltZSkNCgl7DQoJCWlmIChpc3NldChzZWxmOjokbG9jYXRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiRsb2NhdGlvbnNbJGV2ZW50X2NvbmNlcHRfdGltZV07DQoJCX0NCgkJcmV0dXJuIDk5OTk7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRsb2NhdGlvbg0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50Q29uY2VwdFRpbWUoJGxvY2F0aW9uKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+ZGF0ZVsnc3RhcnQnXVskbG9jYXRpb25dKSAmJiBpc3NldChzZWxmOjokZXZlbnQtPmRhdGVbJ2NvbmNlcHQnXVskbG9jYXRpb25dKSkNCgkJew0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+ZGF0ZVsnc3RhcnQnXVskbG9jYXRpb25dKSkNCgkJCXsNCgkJCQkkdGltZXN0YW1wID0gc3RydG90aW1lKHNlbGY6OiRldmVudC0+ZGF0ZVsnc3RhcnQnXVskbG9jYXRpb25dKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGltZXN0YW1wID0gMDsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjokZXZlbnQtPmlkLidfJy5zZWxmOjokZXZlbnQtPmRhdGVbJ2NvbmNlcHQnXVskbG9jYXRpb25dLidfXycuJHRpbWVzdGFtcDsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREYXRlcygpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+ZGF0ZVsnY29uY2VwdCddKSkNCgkJew0KCQkJJHR5cGVzID0gYXJyYXkoJ3N0YXJ0JywgJ2VuZCcpOw0KCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQnXSA9IHN0cnRvdGltZSgnMjMwMC0wMC0wMCcpOw0KCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZW5kJ10gPSBzdHJ0b3RpbWUoJzAwMDAtMDAtMDAnKTsNCgkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXSA9IGFycmF5KCk7DQoJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goICR0eXBlcyBhcyAkdHlwZSkNCgkJCXsNCgkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmRhdGVbJHR5cGVdIGFzICRuciA9PiAkZGF0ZSkNCgkJCQl7DQoJCQkJCSRkYXRlID0gc2VsZjo6JGZpbHRlcklucHV0LT5jbGVhbigkZGF0ZSk7DQoJCQkJCS8vIGdldCB0aGUga2V5DQoJCQkJCSRrZXkgPSBzZWxmOjpnZXRFdmVudENvbmNlcHRUaW1lKCRucik7DQoJCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0ZSkpDQoJCQkJCXsNCgkJCQkJCSR0aW1lc3RhbXAgPSBzdHJ0b3RpbWUoJGRhdGUpOw0KCQkJCQkJaWYgKCgnc3RhcnQnID09ICR0eXBlKSAmJiBzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA+ICR0aW1lc3RhbXApDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclskdHlwZV0gPSAkdGltZXN0YW1wOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmICgoJ2VuZCcgPT0gJHR5cGUpICYmIHNlbGY6OiRldmVudEJ1aWxkZXJbJHR5cGVdIDwgJHRpbWVzdGFtcCkNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA9ICR0aW1lc3RhbXA7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgdGltZSBzdGFtcA0KCQkJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV0pKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVska2V5XSA9IGFycmF5KCk7DQoJCQkJCQl9DQoJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV1bJHR5cGVdID0gJHRpbWVzdGFtcDsNCgkJCQkJfQ0KCQkJCQkvLyBzZXQgZ2xvYmFsIGNvbmNlcHQga2V5cw0KCQkJCQlpZiAoJ3N0YXJ0JyA9PSAkdHlwZSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGNvbmNlcHRzWyRrZXldID0gc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJG5yXTsNCgkJCQkJCXNlbGY6OiRsb2NhdGlvbnNbJGtleV0gPSAkbnI7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aW1lIGFyZSBzZXQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ10pKQ0KCQkJew0KCQkJCS8vIG5vdyBsb29wIHRoZSB0aW1lIHN0YW1wcw0KCQkJCWZvcmVhY2ggKHNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXSBhcyAkb24gPT4gJGRhdGVzKQ0KCQkJCXsNCgkJCQkJaWYgKGlzc2V0KCRkYXRlc1snc3RhcnQnXSkgJiYgaXNzZXQoJGRhdGVzWydlbmQnXSkpDQoJCQkJCXsNCgkJCQkJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dKSkNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRvbl0gPSBhcnJheSgpOw0KCQkJCQkJfQ0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dWydzdGFydCddID0gc2VsZjo6ZmFuY3lEYXRlKCRkYXRlc1snc3RhcnQnXSk7DQoJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRvbl1bJ2VuZCddID0gc2VsZjo6ZmFuY3lEYXRlKCRkYXRlc1snZW5kJ10pOw0KCQkJCQkJaWYgKGRhdGUoJ1ltZCcsICRkYXRlc1snc3RhcnQnXSkgPT0gZGF0ZSgnWW1kJywgJGRhdGVzWydlbmQnXSkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gc2FtZSBkYXkNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRvbl1bJ3N0YXJ0LWVuZCddID0gIAlzZWxmOjpmYW5jeVRpbWUoJGRhdGVzWydzdGFydCddKQ0KCQkJCQkJCQkuJyAnLlRleHQ6Ol8oJ3RvJykuJyAnLiBzZWxmOjpmYW5jeVRpbWUoJGRhdGVzWydlbmQnXSkNCgkJCQkJCQkJLicgJy5UZXh0OjpfKCdvbiB0aGUnKS4nICcuIHNlbGY6OmZhbmN5RGF0ZSgkZGF0ZXNbJ2VuZCddKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkvLyBhbm90aGVyIGRheQ0KCQkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJG9uXVsnc3RhcnQtZW5kJ10gPSAgCXNlbGY6OmZhbmN5RGF0ZVRpbWUoJGRhdGVzWydzdGFydCddKQ0KCQkJCQkJCQkuJyAnLlRleHQ6Ol8oJ3RvJykuJyAnLiBzZWxmOjpmYW5jeURhdGVUaW1lKCRkYXRlc1snZW5kJ10pOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIHNldCB0aGUgZXZlbnQgc3RhcnQgYW5kIGVuZCBkYXRlDQoJCQkJaWYgKGRhdGUoJ1ltZCcsIHNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10pID09IGRhdGUoJ1ltZCcsIHNlbGY6OiRldmVudEJ1aWxkZXJbJ2VuZCddKSkNCgkJCQl7DQoJCQkJCS8vIG9uZSBkYXkgZXZlbnQNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10gPSBzZWxmOjpmYW5jeURhdGUoc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQnXSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoZGF0ZSgnWW0nLCBzZWxmOjokZXZlbnRCdWlsZGVyWydzdGFydCddKSA9PSBkYXRlKCdZbScsIHNlbGY6OiRldmVudEJ1aWxkZXJbJ2VuZCddKSkNCgkJCQl7DQoJCQkJCS8vICBtdWx0aSBkYXkgZXZlbnQgaW4gc2FtZSBtb250aA0KCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydzdGFydC1lbmQnXSA9ICBkYXRlKCdqUycsIHNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10pLicgLSAnLiBzZWxmOjpmYW5jeURhdGUoc2VsZjo6JGV2ZW50QnVpbGRlclsnZW5kJ10pOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBtdWx0aSBkYXkgZXZlbnQNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10gPSBzZWxmOjpmYW5jeURhdGUoc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQnXSkuJyAtICcuIHNlbGY6OmZhbmN5RGF0ZShzZWxmOjokZXZlbnRCdWlsZGVyWydlbmQnXSk7DQoJCQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGlkDQoJICogQHBhcmFtICR0eXBlDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRBbGxWYWx1ZXMoJGlkLCAkdHlwZSwgJGVuY3J5cHRlZE5hbWVzID0gYXJyYXkoKSkNCgl7DQoJCS8vIG5vdyBsb2FkIGFsbCBjdXN0b20gdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnYS4qJykpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0eXBlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCA9ICcgLiAoaW50KSAkaWQpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA+PSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlbmNyeXB0ZWROYW1lcykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGVuY3J5cHRlZE5hbWVzIGFzICRlbmNyeXB0ZWQpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJHJlc3VsdC0+JGVuY3J5cHRlZCkgJiYgIWVtcHR5KCRyZXN1bHQtPiRlbmNyeXB0ZWQpKQ0KCQkJCQl7DQoJCQkJCQkkcmVzdWx0LT4kZW5jcnlwdGVkID0gc2VsZjo6ZGVjcnlwdFN0cmluZygkcmVzdWx0LT4kZW5jcnlwdGVkKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkcmVzdWx0Ow0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRlY3J5cHRTdHJpbmcoJHZhbHVlKQ0KCXsNCgkJaWYgKHNlbGY6OiRiYXNpY2tleSAmJiAhaXNfbnVtZXJpYygkdmFsdWUpICYmICR2YWx1ZSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCR2YWx1ZSwgdHJ1ZSkpKQ0KCQl7DQoJCQkvLyBkZWNyeXB0ICB2YWx1ZQ0KCQkJJHZhbHVlPSBydHJpbShzZWxmOjokbG9ja2VyLT5kZWNyeXB0U3RyaW5nKCR2YWx1ZSksICJcMCIpOw0KCQl9DQoJCXJldHVybiAkdmFsdWU7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRpZHMNCgkgKiBAcGFyYW0gJHR5cGUNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5hbWVzKCRpZHMsICR0eXBlKQ0KCXsNCgkJLy8gc2V0dXAgdGhlIGdldCBhcnJheQ0KCQkkZ2V0ID0gYXJyYXkoJ2EuaWQnKTsNCgkJc3dpdGNoKCR0eXBlKQ0KCQl7DQoJCQljYXNlICd2ZW51ZSc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJJGdldFtdID0gJ2EubmFtZSc7DQoJCQkJJHRhYmxlID0gJyNfX1tbW2NvbXBvbmVudF1dXV92ZW51ZSc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkkZ2V0W10gPSAnYS50aXRsZSc7DQoJCQkJJHRhYmxlID0gJyNfX2NhdGVnb3JpZXMnOw0KCQkJYnJlYWs7DQoJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCSRnZXRbXSA9ICdhLmNvbXBhbnluYW1lJzsNCgkJCQkkZ2V0W10gPSAnYS51c2VyJzsNCgkJCQkkdGFibGUgPSAnI19fW1tbY29tcG9uZW50XV1dX29yZ2FuaXplcic7DQoJCQlicmVhazsJCQkJDQoJCX0NCgkJaWYgKCFpc3NldCgkdGFibGUpIHx8ICFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJLy8gY2hlY2sgdGhlIGFycmF5IG9mIGlkcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGlkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCRpZHMgYXMgJGlkKQ0KCQkJeyANCgkJCQlpZiAoIShpc19udW1lcmljKCRpZCkpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIG51bGw7DQoJCQkJfSANCgkJCX0NCgkJfQ0KCQkvLyBub3cgbG9hZCBhbGwgY3VzdG9tIHZhbHVlcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGdldCkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJHRhYmxlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCBJTiAoJyAuIGltcGxvZGUoJywgJywgJGlkcykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkNCgkJCXsNCgkJCQlzd2l0Y2goJHR5cGUpDQoJCQkJew0KCQkJCQljYXNlICd2ZW51ZSc6DQoJCQkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkJCSRidWNrZXRbJGl0ZW0tPmlkXSA9ICRpdGVtLT5uYW1lOw0KCQkJCQlicmVhazsNCgkJCQkJY2FzZSAnY2F0aWQnOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQkkYnVja2V0WyRpdGVtLT5pZF0gPSAkaXRlbS0+dGl0bGU7DQoJCQkJCWJyZWFrOw0KCQkJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmNvbXBhbnluYW1lKSkNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9ICRpdGVtLT5jb21wYW55bmFtZTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9IEZhY3Rvcnk6OmdldFVzZXIoJGl0ZW0tPnVzZXIpLT5uYW1lOw0KCQkJCQkJfQ0KCQkJCQkJJGJ1Y2tldFskaXRlbS0+aWRdID0gJG5hbWU7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkYnVja2V0Ow0KCQl9DQoJCXJldHVybiBudWxsOw0KCX0NCltDVVNUT01DT0RFPWltYWdlSGVscGVyc10gDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCglwcm90ZWN0ZWQgc3RhdGljICRwbGFjZUhvbGRlcnM7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQbGFjZUhvbGRlcnMoJHR5cGUsICRpZCA9IG51bGwsICRyZWdpc3RlcmVkID0gbnVsbCwgJGNvbmZpZyA9IGFycmF5KCkpDQoJew0KCQlpZiAoJ2ludm9pY2UnID09PSAkdHlwZSkNCgkJew0KCQkJLy8gc2V0IHRvIGdsb2JhbCBpZiBub3QgZ2l2ZW4NCgkJCWlmICghJGlkICYmIHNlbGY6OiRvcmdhbml6ZXIpDQoJCQl7DQoJCQkJJGlkID0gc2VsZjo6JG9yZ2FuaXplcjsNCgkJCX0NCgkJCS8vIHNldCB0byBnbG9iYWwgaWYgbm90IGdpdmVuDQoJCQlpZiAoISRyZWdpc3RlcmVkICYmIHNlbGY6OiRyZWdpc3RlcmVkKQ0KCQkJew0KCQkJCSRyZWdpc3RlcmVkID0gc2VsZjo6JHJlZ2lzdGVyZWQ7DQoJCQl9DQoJCQlpZiAoJG9yZ2FuaXplciAmJiAkcmVnaXN0ZXJlZCkNCgkJCXsNCgkJCQkvLyBnZXQgbmVlZGVkIGRldGFpbHMNCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdKSkNCgkJCQl7DQoJCQkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldE9yZ2FuaXplckRldGFpbHMoKGludCkgJGlkKTsNCgkJCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldFJlZ2lzdGVyZWREZXRhaWxzKChpbnQpICRyZWdpc3RlcmVkKTsNCgkJCQkJc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkLidfJy4kcmVnaXN0ZXJlZF0gPSBzZWxmOjptZXJnZUFycmF5cygkZGV0YWlscyk7DQoJCQkJfQ0KCQkJCS8vIGFkZCB0aGUgY29uZmlnIGFycmF5IGlmIG5lZWRlZA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoYXJyYXkoc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkLidfJy4kcmVnaXN0ZXJlZF0sICRjb25maWcpKTsNCgkJCQl9DQoJCQkJcmV0dXJuIHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2VpZiAoISRpZCAmJiAoJ29yZ2FuaXplcicgPT09ICR0eXBlIHx8ICd2ZW51ZScgPT09ICR0eXBlKSkNCgkJew0KCQkJcmV0dXJuIGFycmF5X3ZhbHVlcyhzZWxmOjpnZXRTZWxlY3Rpb24oJHR5cGUsICdbJy4kdHlwZS4nXycsICddJykpOw0KCQl9DQoJCWVsc2VpZiAoJ3ZlbnVlJyA9PT0gJHR5cGUgJiYgJGlkID4gMCkNCgkJew0KCQkJDQoJCX0NCgkJZWxzZWlmICgnb3JnYW5pemVyJyA9PT0gJHR5cGUgJiYgJGlkID4gMCkNCgkJew0KCQkJLy8gZ2V0IG5lZWRlZCBkZXRhaWxzDQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF0pKQ0KCQkJew0KCQkJCS8vIGxvYWQgdGhlIG9yZ2FuaXplcg0KCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF0gPSBzZWxmOjpnZXRPcmdhbml6ZXJEZXRhaWxzKChpbnQpICRpZCk7DQoJCQl9DQoNCgkJCS8vIGFkZCB0aGUgY29uZmlnIGFycmF5IGlmIG5lZWRlZA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb25maWcpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF0gPSBzZWxmOjptZXJnZUFycmF5cyhhcnJheShzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdLCAkY29uZmlnKSk7DQoJCQl9DQoNCgkJCS8vIGlmIGxvYWRlZCByZXR1cm4NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBSZXR1cm4gYXJyYXkgb2Ygc2VsZWN0aW9ucw0KCSogDQoJKiBAcmV0dXJuICAgIGFycmF5IGlmIHR5cGUgbWF0Y2gNCgkqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0eXBlLCAkZiwgJGIpDQoJew0KCQlpZiAoJ29yZ2FuaXplcicgPT09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLnVzZXInID0+ICRmLid1c2VyX2lkJy4kYiwNCgkJCQknYS5tb2JpbGVfcGhvbmUnID0+ICRmLidtb2JpbGVfcGhvbmUnLiRiLA0KCQkJCSdhLmNvbXBhbnluYW1lJyA9PiAkZi4nY29tcGFueW5hbWUnLiRiLA0KCQkJCSdhLnB1YmxpY251bWJlcicgPT4gJGYuJ3B1YmxpY251bWJlcicuJGIsDQoJCQkJJ2EuY3VycmVuY3knID0+ICRmLidjdXJyZW5jeScuJGIsDQoJCQkJJ2Euc3RyZWV0JyA9PiAkZi4nc3RyZWV0Jy4kYiwNCgkJCQknYS5wb3N0YWwnID0+ICRmLidwb3N0YWwnLiRiLA0KCQkJCSdhLmNpdHknID0+ICRmLidjaXR5Jy4kYiwNCgkJCQknYS5yZWdpb24nID0+ICRmLidyZWdpb24nLiRiLA0KCQkJCSdhLmNvdW50cnknID0+ICRmLidjb3VudHJ5Jy4kYiwNCgkJCQknYS5wb3N0YWxjb2RlJyA9PiAkZi4ncG9zdGFsY29kZScuJGIsDQoJCQkJJ2Eud2Vic2l0ZScgPT4gJGYuJ3dlYnNpdGUnLiRiLA0KCQkJCSdhJyA9PiAkZi4nd2Vic2l0ZV9saW5rJy4kYiwNCgkJCQknYS5sb2dvX2ltYWdlJyA9PiAkZi4nbG9nbycuJGIsDQoJCQkJJ2InID0+ICRmLidsb2dvX3VybCcuJGIsDQoJCQkJJ2EucHJlZml4JyA9PiAkZi4ncHJlZml4Jy4kYiwNCgkJCQknYS50YXhfY29tcG91bmQnID0+ICRmLid0YXhfY29tcG91bmQnLiRiLA0KCQkJCSdhLnRheGVkJyA9PiAkZi4ndGF4ZWQnLiRiLA0KCQkJCSdhLnRheF90eXBlJyA9PiAkZi4ndGF4X3R5cGUnLiRiLA0KCQkJCSdhLmRvY19mb290ZXInID0+ICRmLidkb2NfZm9vdGVyJy4kYiwNCgkJCQknYS5kb2NfaGVhZGVyJyA9PiAkZi4nZG9jX2hlYWRlcicuJGIsDQoJCQkJJ2IubmFtZScgPT4gJGYuJ25hbWUnLiRiLA0KCQkJCSdjJyA9PiAkZi4nX25hbWUnLiRiLA0KCQkJCSdiLnVzZXJuYW1lJyA9PiAkZi4ndXNlcm5hbWUnLiRiLA0KCQkJCSdiLmVtYWlsJyA9PiAkZi4nZW1haWwnLiRiLA0KCQkJCSdjLm5hbWUnID0+ICRmLidyZWdpb25fbmFtZScuJGIsDQoJCQkJJ2QubmFtZScgPT4gJGYuJ2NvdW50cnlfbmFtZScuJGINCgkJCSk7DQoJCX0NCgkJaWYgKCd2ZW51ZScgPT09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLnVzZXInID0+ICRmLid1c2VyX2lkJy4kYiwNCgkJCQknYS5tb2JpbGVfcGhvbmUnID0+ICRmLidtb2JpbGVfcGhvbmUnLiRiLA0KCQkJCSdhLmNvbXBhbnluYW1lJyA9PiAkZi4nY29tcGFueW5hbWUnLiRiLA0KCQkJCSdhLnB1YmxpY251bWJlcicgPT4gJGYuJ3B1YmxpY251bWJlcicuJGIsDQoJCQkJJ2EuY3VycmVuY3knID0+ICRmLidjdXJyZW5jeScuJGIsDQoJCQkJJ2Euc3RyZWV0JyA9PiAkZi4nc3RyZWV0Jy4kYiwNCgkJCQknYS5wb3N0YWwnID0+ICRmLidwb3N0YWwnLiRiLA0KCQkJCSdhLmNpdHknID0+ICRmLidjaXR5Jy4kYiwNCgkJCQknYS5yZWdpb24nID0+ICRmLidyZWdpb24nLiRiLA0KCQkJCSdhLmNvdW50cnknID0+ICRmLidjb3VudHJ5Jy4kYiwNCgkJCQknYS5wb3N0YWxjb2RlJyA9PiAkZi4ncG9zdGFsY29kZScuJGIsDQoJCQkJJ2Eud2Vic2l0ZScgPT4gJGYuJ3dlYnNpdGUnLiRiLA0KCQkJCSdhLnByZWZpeCcgPT4gJGYuJ3ByZWZpeCcuJGIsDQoJCQkJJ2EudGF4X2NvbXBvdW5kJyA9PiAkZi4ndGF4X2NvbXBvdW5kJy4kYiwNCgkJCQknYS50YXhlZCcgPT4gJGYuJ3RheGVkJy4kYiwNCgkJCQknYS50YXhfdHlwZScgPT4gJGYuJ3RheF90eXBlJy4kYiwNCgkJCQknYS5kb2NfZm9vdGVyJyA9PiAkZi4nZG9jX2Zvb3RlcicuJGIsDQoJCQkJJ2EuZG9jX2hlYWRlcicgPT4gJGYuJ2RvY19oZWFkZXInLiRiLA0KCQkJCSdiLm5hbWUnID0+ICRmLiduYW1lJy4kYiwNCgkJCQknYi51c2VybmFtZScgPT4gJGYuJ3VzZXJuYW1lJy4kYiwNCgkJCQknYi5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYy5uYW1lJyA9PiAkZi4ncmVnaW9uX25hbWUnLiRiDQoJCQkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyAkaXRlbU9yZ2FuaXplciA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEl0ZW1Pcmdhbml6ZXIoJiRpdGVtLCAkdHlwZSwgJGtleSA9ICdpZCcsICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPiRrZXkpICYmIChpbnQpICRpdGVtLT4ka2V5ID4gMCkNCgkJew0KCQkJLy8gY2hlY2sgaWYgYWxyZWFkeSBzZXQNCgkJCWlmICghaXNzZXQoc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRJdGVtT3JnYW5pemVyKCRpdGVtLCAkdHlwZSwgJGtleSk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldKSAmJiBzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0pDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiRpdGVtT3JnYW5pemVyWyR0eXBlLiRpdGVtLT4ka2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGRlZmF1bHQ7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SXRlbU9yZ2FuaXplcigmJGl0ZW0sICR0eXBlLCAka2V5KQ0KCXsNCgkJLy8gZ2V0IG9yZ2FuaXplciBpZCBmb3IgdmFyaW91cyB0eXBlcyBvZiBpdGVtcw0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ3RyYW5zYWN0aW9uJzoNCgkJCQlpZiAoaXNzZXQoJGl0ZW0tPmludm9pY2UpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldID0gc2VsZjo6Z2V0VmFyKCdpbnZvaWNlJywgJGl0ZW0tPmludm9pY2UsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJG9yZ2FuaXplckRldGFpbHMgPSBhcnJheSgpOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPcmdhbml6ZXJWYWx1ZSgkaWQsICRmaWVsZCwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCRpZCA+IDAgKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldE9yZ2FuaXplckRldGFpbHMoJGlkKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZmllbGQgaWYgc2V0DQoJCQkkZmllbGQgPSAnW29yZ2FuaXplcl8nLiRmaWVsZC4nXSc7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkgJiYgaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZmllbGRdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZmllbGRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE9yZ2FuaXplckRldGFpbHMoJGlkKQ0KCXsNCgkJaWYgKCRpZCA+IDApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0T3JnYW5pemVyRGV0YWlscygkaWQpOw0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0T3JnYW5pemVyRGV0YWlscygkaWQsICRtZXRob2QgPSAncGxhY2Vob2xkZXInKQ0KCXsNCgkJJGYgPSAnJzsNCgkJJGIgPSAnJzsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT09ICRtZXRob2QpDQoJCXsNCgkJCSRmID0gJ1tvcmdhbml6ZXJfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkc2VsZWN0aW9uID0gc2VsZjo6Z2V0U2VsZWN0aW9uKCdvcmdhbml6ZXInLCAkZiwgJGIpOw0KCQkvLyByZW1vdmUgc29tZSB0aGF0IGFyZSBzZXQgZHluYW1pY2FsbHkNCgkJdW5zZXQoJHNlbGVjdGlvblsnYSddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnYiddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnYyddKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkc2VsZWN0aW9uKSwgYXJyYXlfdmFsdWVzKCRzZWxlY3Rpb24pKSk7DQoNCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX29yZ2FuaXplciB0YWJsZQkJCQkNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fb3JnYW5pemVyJywgJ2EnKSk7CQkJCQ0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX3VzZXJzJywgJ2InKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EudXNlcicpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnYi5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcmVnaW9uJywgJ2MnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EucmVnaW9uJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdjLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JywgJ2QnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnZC5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuIChpbnQpICRpZCk7DQoJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQkvLyBsb2FkIHRoZSBuYW1lDQoJCQlpZiAoaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nY29tcGFueW5hbWUnLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nY29tcGFueW5hbWUnLiRiXSkpDQoJCQl7DQoJCQkJJG5hbWUgPSBzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidjb21wYW55bmFtZScuJGJdOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRuYW1lID0gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nbmFtZScuJGJdOw0KCQkJfQ0KCQkJc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nX25hbWUnLiRiXSA9ICRuYW1lOw0KCQkJLy8gc2V0IHdlYnNpdGUgbGluaw0KCQkJJGxpbmsgPSAnJzsNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGUnLiRiXSkpIA0KCQkJew0KCQkJCS8vIHNldCBsaW5rDQoJCQkJaWYgKHN0cnBvcyhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0sICdodHRwOi8vJykgIT09IGZhbHNlIHx8IHN0cnBvcyhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0sICdodHRwczovLycpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRsaW5rID0gJzxhIGhyZWY9Iicuc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nd2Vic2l0ZScuJGJdLiciPicgLiAkbmFtZSAuICc8L2E+JzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGxpbmsgPSAnPGEgaHJlZj0iaHR0cDovLycuc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nd2Vic2l0ZScuJGJdLiciPicgLiAkbmFtZSAuICc8L2E+JzsNCgkJCQl9DQoJCQl9DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlX2xpbmsnLiRiXSA9ICRsaW5rOw0KDQoJCQkvLyBzZXQgbG9nbyBpbWFnZQ0KCQkJJGxvZ29Gb3VuZCA9ICcnOw0KCQkJJGxvZ29VcmwgPSAnJzsNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidsb2dvJy4kYl0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ28nLiRiXSkpIA0KCQkJew0KCQkJCS8vIEdldCB0aGUgYmFzaWMgZW5jcnlwdGlvbi4NCgkJCQlzZWxmOjokYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJCQkkbG9nbyA9IHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ28nLiRiXTsNCgkJCQlpZiAoc2VsZjo6JGJhc2lja2V5KQ0KCQkJCXsNCgkJCQkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJCQkJc2VsZjo6JGxvY2tlciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKHNlbGY6OiRiYXNpY2tleSwgMTI4KTsNCgkJCQkJJGxvZ28gPSBzZWxmOjpkZWNyeXB0U3RyaW5nKCRsb2dvKTsNCgkJCQl9DQoJCQkJaWYgKHN0cnBvcygkbG9nbywgJ18nKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICRsb2dvKTsNCgkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQl7DQoJCQkJCQkkbG9nb1VybCA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldFBhdGgoJ3VybCcpLiRsb2dvLicuJy4kZXh0ZW50aW9uWzJdOw0KCQkJCQkJJGxvZ29Gb3VuZCA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwiIHNyYz0iJy4kbG9nb1VybC4nIiBhbHQ9IicuJG5hbWUuJyI+JzsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIG5vdyBhZGQgdGhlIGxvZ28NCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ28nLiRiXSA9ICRsb2dvRm91bmQ7DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidsb2dvX3VybCcuJGJdID0gJGxvZ29Vcmw7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdID0gZmFsc2U7DQoJCX0NCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRyZWdVc2VycyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlZ1VzZXJWYWx1ZSgkaWQsICRmaWVsZCwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCRpZCA+IDAgKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRSZWdVc2VyVmFsdWUoJGlkKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZmllbGQgaWYgc2V0DQoJCQkkZmllbGQgPSAnW3JlZ2lzdGVyZWRfJy4kZmllbGQuJ10nOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdKSAmJiBpc3NldChzZWxmOjokcmVnVXNlcnNbJGlkXVskZmllbGRdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGZpZWxkXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGRlZmF1bHQ7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkRGV0YWlscygkaWQpDQoJew0KCQlpZiAoJGlkID4gMCkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokcmVnVXNlcnNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0UmVnVXNlclZhbHVlKCRpZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JHJlZ1VzZXJzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFJlZ1VzZXJWYWx1ZSgkaWQsICRtZXRob2QgPSAncGxhY2Vob2xkZXInKQ0KCXsNCgkJJGYgPSAnJzsNCgkJJGIgPSAnJzsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT09ICRtZXRob2QpDQoJCXsNCgkJCSRmID0gJ1tyZWdpc3RlcmVkXyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQkvLyBmaXJzdCBnZXQgdGhlIHVzZXINCgkJJHVzZXJJZCA9IHNlbGY6OmdldFZhcigncmVnaXN0ZXJlZF91c2VyJywgJGlkLCAnaWQnLCAndXNlcicpOw0KCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCS8vIG5vdyBsb2FkIGFsbCBjdXN0b20gdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCWFycmF5KCdhLm5hbWUnLCdhLnZhbHVlJyksDQoJCQlhcnJheSgnbmFtZScsJ3ZhbHVlJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19yZWdpc3RyeV9jdXN0b21fdmFsdWUnLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnIC4gKGludCkgJGlkKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5wdWJsaXNoZWQgPj0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRjdXN0b21WYWx1ZXMgPSAkZGItPmxvYWRBc3NvY0xpc3QoJ25hbWUnLCAndmFsdWUnKTsNCgkJCS8vIHBvc3NpYmxlIGtleXMNCgkJCSRzZWFyY2ggPSBhcnJheSgNCgkJCQknY291bnRyeScgDQoJCQkJCT0+IGFycmF5KCdjb3VudHJ5JywgJ2NvdW50cnlfb25lJywgJ2NvdW50cnlfMScsICdjb3VudHJ5MScsICdjb3VudHJ5b25lJywgJ2NvdW50cnlfJyksIA0KCQkJCSdjdXJyZW5jeScgDQoJCQkJCT0+IGFycmF5KCdjdXJyZW5jeScsICdjdXJyZW5jeV9vbmUnLCAnY3VycmVuY3lfMScsICdjdXJyZW5jeTEnLCAnY3VycmVuY3lvbmUnLCAnY3VycmVuY3lfJyksIA0KCQkJCSdyZWdpb24nIA0KCQkJCQk9PiBhcnJheSgncmVnaW9uJywgJ3JlZ2lvbl9vbmUnLCAncmVnaW9uXzEnLCAncmVnaW9uMScsICdyZWdpb25vbmUnLCAncmVnaW9uXycpDQoJCQkJKTsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjdXN0b21WYWx1ZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJGtleS4kYl0gPSAkdmFsdWU7DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR2YWx1ZSkgJiYgIWlzX251bWVyaWMoJHZhbHVlKSkNCgkJCQl7DQoJCQkJCSRmb3VuZCA9IGZhbHNlOw0KCQkJCQkkbmV3VmFsdWUgPSAnJzsNCgkJCQkJZm9yZWFjaCAoJHNlYXJjaCBhcyAkY29kZSA9PiAka2V5cykNCgkJCQkJew0KCQkJCQkJaWYgKCEkZm91bmQpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCgka2V5cyBhcyAka2VfeSkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICghJGZvdW5kICYmICRrZV95ID09PSBzdHJ0b2xvd2VyKCRrZXkpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlpZiAoJG5ld1ZhbHVlID0gc2VsZjo6Z2V0VmFyKCRjb2RlLCAkdmFsdWUsICduYW1lJywgJ2lkJykpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gaW5zdXJlIHdlIHVzZSB0aGUgY29ycmVjdCBrZXkNCgkJCQkJCQkJCQkka2V5ID0gJGNvZGU7DQoJCQkJCQkJCQkJLy8gc3RvcCBzZWFyY2ggZm9yIHRoaXMgZmllbGQNCgkJCQkJCQkJCQkkZm91bmQgPSB0cnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIGFkZCBhbHNvIGlmIGZvdW5kDQoJCQkJCWlmICgkZm91bmQpDQoJCQkJCXsNCgkJCQkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLiRrZXkuJGJdID0gKGludCkgJG5ld1ZhbHVlOw0KCQkJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJGtleS4nX25hbWUnLiRiXSA9ICR2YWx1ZTsNCgkJCQkJCWlmICgnY291bnRyeScgPT09ICRrZXkgfHwgJ2N1cnJlbmN5JyA9PT0gJGtleSkNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4ka2V5LidfY29kZXRocmVlJy4kYl0gPSBzZWxmOjpnZXRWYXIoJGtleSwgKGludCkgJG5ld1ZhbHVlLCAnaWQnLCAnY29kZXRocmVlJyk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gaWYgbm8gY3VycmVuY3kgd2FzIGZvdW5kIGJ1dCBjb3VudHJ5LCB0aGVuIHNldCB0aGUgY3VycmVuY3kgdG8gdGhhdCBvZiB0aGUgY291bnRyeQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjdXJyZW5jeV9uYW1lJy4kYl0pICYmIGlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjb3VudHJ5X25hbWUnLiRiXSkpDQoJCXsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjdXJyZW5jeV9jb2RldGhyZWUnLiRiXSA9IHNlbGY6OmdldFZhcignY291bnRyeScsIHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjb3VudHJ5Jy4kYl0sICdpZCcsICdjdXJyZW5jeScpOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5Jy4kYl0gPSBzZWxmOjpnZXRWYXIoJ2N1cnJlbmN5Jywgc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5X2NvZGV0aHJlZScuJGJdLCAnY29kZXRocmVlJywgJ2lkJyk7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4nY3VycmVuY3lfbmFtZScuJGJdID0gc2VsZjo6Z2V0VmFyKCdjdXJyZW5jeScsIHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjdXJyZW5jeScuJGJdLCAnaWQnLCAnbmFtZScpOw0KCQl9DQoJCS8vIG5vdyBsb2FkIGFsbCB0aGUgdXNlciB2YWx1ZXMNCgkJaWYgKCR1c2VySWQgPiAwKQ0KCQl7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfaWRdJ10gPSAkaWQ7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfdXNlcl9pZF0nXSA9ICR1c2VySWQ7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfbmFtZV0nXSA9ICR1c2VyLT5uYW1lOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJ1tyZWdpc3RlcmVkX3VzZXJuYW1lXSddID0gJHVzZXItPnVzZXJuYW1lOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJ1tyZWdpc3RlcmVkX2VtYWlsXSddID0gJHVzZXItPmVtYWlsOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljICR0YXhMb2NhdGlvbiA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRheExvY2F0aW9uKCR0eXBlLCAkaWQsICR2aWV3KQ0KCXsNCgkJaWYgKCRpZCA+IDAgfHwgJ2NhcnQnID09PSAkdmlldykNCgkJew0KCQkJJGtleSA9ICR0eXBlLiR2aWV3LiRpZDsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHRheExvY2F0aW9uWyRrZXldKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRUYXhMb2NhdGlvbigkdHlwZSwgJGlkLCAkdmlldywgJGtleSk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHRheExvY2F0aW9uWyRrZXldKSAmJiBzZWxmOjokdGF4TG9jYXRpb25bJGtleV0gPiAwKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokdGF4TG9jYXRpb25bJGtleV07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VGF4TG9jYXRpb24oJGZpZWxkLCAkaWQsICR2aWV3LCAka2V5KQ0KCXsNCgkJc3dpdGNoICgkdmlldykNCgkJew0KCQkJY2FzZSAnaW52b2ljZSc6DQoJCQkJLy8gZ2V0IHRoZSBjbGllbnQgaWQgZnJvbSBqb2IgaWQNCgkJCQkkcmVnaXN0ZXJlZF91c2VyID0gc2VsZjo6Z2V0VmFyKCR2aWV3LCAkaWQsICdpZCcsICdyZWdpc3RlcmVkX3VzZXInKTsNCgkJCQkvLyByZXR1cm4gbG9jYXRpb24gaWQgZnJvbSBjbGllbnQgdGFibGUNCgkJCQlpZiAoJHJlZ2lzdGVyZWRfdXNlciA+IDApDQoJCQkJew0KCQkJCQlzZWxmOjokdGF4TG9jYXRpb25bJGtleV0gPSBzZWxmOjpnZXRSZWdVc2VyVmFsdWUoJHJlZ2lzdGVyZWRfdXNlciwgJGZpZWxkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJCWNhc2UgJ2NhcnQnOg0KCQkJY2FzZSAnZXZlbnQnOg0KCQkJCS8vIGZpcnN0IGZpbmQgb3V0IHdobyB0aGlzIGlzDQoJCQkJJHVzZXJJcyA9IHNlbGY6OnVzZXJJcyhudWxsLCB0cnVlKTsNCgkJCQlpZiAoJHVzZXJJc1snaXMnXSA9PSAzIHx8ICR1c2VySXNbJ2lzJ10gPT0gMikNCgkJCQl7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQllbHNlaWYgKCR1c2VySXNbJ2lzJ10gPT0gMSAmJiAkdXNlcklzWydpZCddID4gMCkNCgkJCQl7DQoJCQkJCXNlbGY6OiR0YXhMb2NhdGlvblska2V5XSA9IHNlbGY6OmdldFJlZ1VzZXJWYWx1ZSgkdXNlcklzWydpZCddLCAkZmllbGQpOw0KCQkJCX0NCgkJCQllbHNlaWYgKCdjb3VudHJ5JyA9PT0gJGZpZWxkKQ0KCQkJCXsNCgkJCQkJLy8gcHVibGljIHVzZXIgc28gd2UgZmlyc3QgZ2V0IGNvdW50cnkNCgkJCQkJaWYgKCRjb3VudHJ5VGhyZWUgPSBzZWxmOjpnZXRMb2NhdGlvbmRhdGEobnVsbCwgbnVsbCwgbnVsbCwgJ1VTRCcsIDEwLCAxKSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JHRheExvY2F0aW9uWyRrZXldID0gc2VsZjo6Z2V0VmFyKCdjb3VudHJ5JywgJGNvdW50cnlUaHJlZSwgJ2NvZGV0aHJlZScsICdpZCcpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRheCgmJHRheGVkLCAmJHRvdGFsLCAkaWQsICR2aWV3KQ0KCXsNCgkJJHNldFRheCA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKS0+Z2V0KCd0YXhlZCcsIDApOw0KCQlpZiAoJHNldFRheCA9PSAxICYmIDEgPT0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ3RheGVkJywgMCkpDQoJCXsNCgkJCS8vIHNldCB0aGUgdGF4IHRvIHRoaXMgYXJyYXkNCgkJCSR0YXggPSBhcnJheSgpOw0KCQkJJHRheEFkZFRvdGFsID0gYXJyYXkoKTsNCgkJCSRkZWR1Y3QgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQNCgkJCSRjb3VudHJ5ID0gc2VsZjo6Z2V0VGF4TG9jYXRpb24oJ2NvdW50cnknLCAkaWQsICR2aWV3KTsNCgkJCS8vIGdldCB0aGUgcmVnaW9uIG9mIHRoZSBjbGllbnQNCgkJCSRyZWdpb24gPSBzZWxmOjpnZXRUYXhMb2NhdGlvbigncmVnaW9uJywgJGlkLCAkdmlldyk7DQoJCQkvLyBub3cgZ2V0IHRheCBsZXZlbCAxIG9mIHRoaXMgQ291bnRyeSBhbmQgb3IgUmVnaW9uDQoJCQkkdGF4TGV2ZWwxID0gc2VsZjo6Z2V0VGF4UnVsZSgxLCRjb3VudHJ5LCRyZWdpb24pOw0KCQkJLy8gbm93IGdldCB0YXggbGV2ZWwgMiBvZiB0aGlzIENvdW50cnkgYW5kIG9yIFJlZ2lvbg0KCQkJJHRheExldmVsMiA9IHNlbGY6OmdldFRheFJ1bGUoMiwkY291bnRyeSwkcmVnaW9uKTsNCgkJCS8vIHRheCB0eXBlcw0KCQkJJHRheF90eXBlID0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ3RheF90eXBlJywgMik7DQoJCQkvLyB0YXggY29tcG91bmQNCgkJCSR0YXhfY29tcG91bmQgPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZShzZWxmOjokb3JnYW5pemVyLCAndGF4X2NvbXBvdW5kJywgbnVsbCk7DQoJCQkvLyBiYXNlZCBvbiB0YXggdHlwZQ0KCQkJaWYgKDIgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCS8vIHRheCBleGNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGF4WzBdWyduYW1lJ10gPSAkdGF4TGV2ZWwxWyduYW1lJ107DQoJCQkJCSR0YXhbMF1bJ3RheCddID0gJHRheExldmVsMVsndGF4J107DQoJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwxWyd0YXgnXSwgMjApOw0KCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0bXBBbW91bnQsIDEwMCwgNCk7DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGF4ZWRTdWIgPSBiY2FkZCgkdGF4ZWQsICR0YXhbMF1bJ2Ftb3VudCddLCAyMCk7DQoJCQkJCQkkdG1wQW1vdW50ID0gIGJjbXVsKCR0YXhlZFN1YiwgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRtcEFtb3VudCwgMTAwLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdG1wQW1vdW50LCAxMDAsIDQpOw0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzFdWydhbW91bnQnXTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCSRyZW1vdmFsID0gYXJyYXkoKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCX0NCgkJCQkkcmVtb3ZhbCA9IHNlbGY6OmJjc3VtKCRyZW1vdmFsKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFswXVsnbmFtZSddID0gJHRheExldmVsMVsnbmFtZSddOw0KCQkJCQkkdGF4WzBdWyd0YXgnXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmICR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsX2EgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRlbXBWYWwzID0gYmNkaXYoJHRheExldmVsMVsndGF4J10sIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWw0ID0gYmNhZGQoJHRlbXBWYWwzLCAxLCAyMCk7DQoJCQkJCQkkdGVtcFZhbF9iID0gYmNkaXYoJHRlbXBWYWxfYSwgJHRlbXBWYWw0LCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9ICBiY3N1YigkdGVtcFZhbF9hLCAkdGVtcFZhbF9iLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCRyZW1vdmFsLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJGV4Y2x1ZGluZyA9IGJjZGl2KCR0YXhlZCwgJHRlbXBWYWwyLCAyMCk7DQoJCQkJCQkkdGVtcFZhbCA9IGJjbXVsKCRleGNsdWRpbmcsICR0YXhMZXZlbDFbJ3RheCddLCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0ZW1wVmFsLCAxMDAsIDQpOyANCgkJCQkJfQ0KCQkJCQkvLyByZW1vdmUgZnJvbSBwcmljZQ0KCQkJCQkkZGVkdWN0W10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNzdWIoJHRheGVkLCAkdGVtcFZhbCwgNCk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkdGF4WzFdWyduYW1lJ10gPSAkdGF4TGV2ZWwyWyduYW1lJ107DQoJCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQkJJHRlbXBWYWwxID0gYmNkaXYoJHJlbW92YWwsIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWwyID0gYmNhZGQoJHRlbXBWYWwxLCAxLCAyMCk7DQoJCQkJCQkkZXhjbHVkaW5nID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNtdWwoJGV4Y2x1ZGluZywgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRlbXBWYWwsIDEwMCwgNCk7IA0KCQkJCQl9DQoJCQkJCS8vIHJlbW92ZSBmcm9tIHByaWNlDQoJCQkJCSRkZWR1Y3RbXSA9ICR0YXhbMV1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyB0YXggc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheCkpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSB0YXggdG8gdG90YWwNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheEFkZFRvdGFsKSkNCgkJCQl7DQoJCQkJCSR0YXhlZCA9IHNlbGY6OmJjc3VtKCR0YXhBZGRUb3RhbCk7DQoJCQkJCSR0b3RhbCA9IHNlbGY6OmJjc3VtKGFycmF5KCR0b3RhbCwgJHRheGVkKSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRlZHVjdCkpDQoJCQkJew0KCQkJCQkkdGF4ZWQgPSBzZWxmOjpiY3N1bSgkZGVkdWN0KTsNCgkJCQl9DQoJCQkJcmV0dXJuICR0YXg7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkJDQoJcHJvdGVjdGVkIHN0YXRpYyAkdGF4cnVsZXMgPSBhcnJheSgpOw0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUYXhSdWxlKCRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIGJ1aWxkIHRoZSBrZXkNCgkJaWYgKHNlbGY6OiRvcmdhbml6ZXIpDQoJCXsNCgkJCSRrZXkgPSAkbGV2ZWwuJGNvdW50cnkuJHJlZ2lvbi5zZWxmOjokb3JnYW5pemVyOw0KCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGJlZW4gc2V0DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiR0YXhydWxlc1ska2V5XSkpDQoJCQl7DQoJCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQkvLyBzZXQgdGhlIHRheCBydWxlDQoJCQkJc2VsZjo6c2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCwgJGNvdW50cnksICRyZWdpb24pOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGJlZW4gc2V0DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHRheHJ1bGVzWyRrZXldKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdGF4cnVsZXNbJGtleV0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokdGF4cnVsZXNbJGtleV07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoCSdhLmlkJywnYS50YXgnLCdhLm5hbWUnKSwNCgkJCWFycmF5KAknaWQnLCd0YXgnLCduYW1lJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdGF4X3J1bGUnLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EubGV2ZWwnKSAuICcgPSAnLiAoaW50KSAkbGV2ZWwpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLm9yZ2FuaXplcicpIC4gJyA9ICcuIChpbnQpIHNlbGY6OiRvcmdhbml6ZXIpOw0KCQkvLyBjaGVjayBmb3IgY291bnRyeSBhbmQgcmVnaW9uDQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeScpIC4gJyA9ICcuIChpbnQpICRjb3VudHJ5KTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnLiAoaW50KSAkcmVnaW9uKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlzZWxmOjokdGF4cnVsZXNbJGtleV0gPSAkZGItPmxvYWRBc3NvYygpOw0KCQl9DQoJCWVsc2VpZiAoKGludCkkY291bnRyeSA+IDAgJiYgKGludCkkcmVnaW9uID4gMCkNCgkJew0KCQkJLy8gbm93IG9ubHkgY2hlY2sgZm9yIGNvdW50cnkNCgkJCXJldHVybiBzZWxmOjpzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSk7DQoJCX0NCgkJZWxzZWlmICgoaW50KSRjb3VudHJ5ID4gMCAmJiAkcmVnaW9uID09IDApDQoJCXsNCgkJCS8vIG5vdyBjaGVjayBmb3IgYW55IHdpdGhvdXQgY291bnRyeQ0KCQkJcmV0dXJuIHNlbGY6OnNldFRheFJ1bGUoJGRiLCAka2V5LCAkbGV2ZWwpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJKiBAcGFyYW0gZmxvYXQgJGFtb3VudA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmNzdW0oJGFycmF5LCAkc2NhbGUgPSA0KQ0KCXsNCgkJJHJlcyA9IDAuMDsNCgkJZm9yZWFjaCgkYXJyYXkgYXMgJHZhbCl7DQoJCQkkcmVzID0gYmNhZGQoJHJlcywgJHZhbCwgJHNjYWxlKTsNCgkJfQ0KCQlyZXR1cm4gJHJlczsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGFtb3VudA0KCSAqIEByZXR1cm4gbWl4ZWR8bnVtYmVyDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGRDdXJyZW5jeSgkYW1vdW50LCAkY29kZXRocmVlID0gbnVsbCkNCgl7DQoJCXJldHVybiBzZWxmOjptYWtlTW9uZXkoJGFtb3VudCwgJGNvZGV0aHJlZSk7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkY3VycmVuY3lEZXRhaWxzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSAqIEBwYXJhbSBib29sICRjb2RldGhyZWUNCgkgKiBAcmV0dXJuIGJvb2x8bWl4ZWQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEN1cnJlbmN5RGV0YWlscygkY29kZXRocmVlID0gZmFsc2UpDQoJew0KCQkvLyBjaGVjayBpZiBjdXJyZW5jeSBjb2RldGhyZWUgaXMgc2V0DQoJCWlmICghJGNvZGV0aHJlZSAmJiBpc3NldChzZWxmOjokb3JnYW5pemVyKSAmJiBzZWxmOjokb3JnYW5pemVyID4gMCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBwcmljZSBjdXJyZW5jeQ0KCQkJJGNvZGV0aHJlZSA9IHNlbGY6OmdldE9yZ2FuaXplclZhbHVlKHNlbGY6OiRvcmdhbml6ZXIsICdjdXJyZW5jeScsIGZhbHNlKTsNCgkJfQ0KCQllbHNlaWYgKCEkY29kZXRocmVlKQ0KCQl7DQoJCQkkY29kZXRocmVlID0gc2VsZjo6Z2V0KCdBQ1RJVkVfQ1VSUkVOQ1knKTsNCgkJfQ0KCQkvLyByZXR1cm4gY2FjaGVkIGRhdGEgaWYgc2V0DQoJCWlmICgkY29kZXRocmVlICYmICFpc3NldChzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQlpZiAoaXNfbnVtZXJpYygkY29kZXRocmVlKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJy4gKGludCkgJGNvZGV0aHJlZSk7DQoJCQl9DQoJCQllbHNlaWYgKHN0cmxlbigkY29kZXRocmVlKSA9PSAzKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCRjb2RldGhyZWUpKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmNvZGV0aHJlZScpIC4gJyA9ICcuJGRiLT5xdW90ZSgnTk9ORScpKTsNCgkJCX0NCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0gPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQkvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gc2V0DQoJCWlmIChpc3NldChzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPW1ha2VNb25leV0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdEb2NOdW1iZXIoJG9yZ2FuaXplciwgJGlkID0gbnVsbCkNCgl7DQoJCWlmIChpc19udW1lcmljKCRvcmdhbml6ZXIpKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGlzIGludm9pY2UgaGFzIHRyYW5zYWN0aW9ucw0KCQkJJGlzSW52b2ljZSA9IGZhbHNlOw0KCQkJaWYgKCRpZCkNCgkJCXsNCgkJCQlpZiAoJGZvdW5kVHJhbnMgPSBzZWxmOjpnZXRWYXIoJ3RyYW5zYWN0aW9uJywgJGlkLCAnaW52b2ljZScsICdpZCcpKQ0KCQkJCXsNCgkJCQkJJGlzSW52b2ljZSA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZmlyc3Qgd2UgZ2V0IG9yZ2FuaXplcnMgaW52b2ljaW5nIG1ldGhvZA0KCQkJJHByb2Zvcm1hID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAncHJvZm9ybWEnKTsNCgkJCWlmICgwID09ICRwcm9mb3JtYSB8fCAkaXNJbnZvaWNlKQ0KCQkJew0KCQkJCSRpc0ludm9pY2UgPSB0cnVlOw0KCQkJCSRuZXh0ID0gKGludCkgc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAnbmV4dF9pbnZvaWNlX251bWJlcicpOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgbmV4dCBpcyBhIG51bWJlcg0KCQkJCWlmICghaXNfbnVtZXJpYygkbmV4dCkgfHwgISRuZXh0IHx8IGVtcHR5KCRuZXh0KSB8fCAkbmV4dCA8IDEpDQoJCQkJew0KCQkJCQkkbmV4dCA9IDE7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSB0aGUgbmV4dCBudW1iZXIgbm93DQoJCQkJJG9yZyA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkkb3JnLT5pZCA9ICRvcmdhbml6ZXI7DQoJCQkJJG9yZy0+bmV4dF9pbnZvaWNlX251bWJlciA9IChpbnQpICRuZXh0ICsgMTsNCgkJCQlGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fb3JnYW5pemVyJywgJG9yZywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHByb2Zvcm1hKQ0KCQkJew0KCQkJCSRuZXh0ID0gKGludCkgc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAnbmV4dF9wcm9mb3JtYV9udW1iZXInKTsNCgkJCQkvLyBtYWtlIHN1cmUgdGhlIG5leHQgaXMgYSBudW1iZXINCgkJCQlpZiAoIWlzX251bWVyaWMoJG5leHQpIHx8ICEkbmV4dCB8fCBlbXB0eSgkbmV4dCkgfHwgJG5leHQgPCAxKQ0KCQkJCXsNCgkJCQkJJG5leHQgPSAxOw0KCQkJCX0NCgkJCQkvLyB1cGRhdGUgdGhlIG5leHQgbnVtYmVyIG5vdw0KCQkJCSRvcmcgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJG9yZy0+aWQgPSAkb3JnYW5pemVyOw0KCQkJCSRvcmctPm5leHRfcHJvZm9ybWFfbnVtYmVyID0gKGludCkgJG5leHQgKyAxOw0KCQkJCUZhY3Rvcnk6OmdldERibygpLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAkb3JnLCAnaWQnKTsNCgkJCX0NCgkJCS8vIGdldCBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZSgkb3JnYW5pemVyLCAncHJlZml4JywgJ1ZETScpOw0KCQkJaWYgKCRpc0ludm9pY2UpDQoJCQl7DQoJCQkJcmV0dXJuICdJTlYtJy4kcHJlZml4LnNwcmludGYoJyUwN2QnLCAkbmV4dCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICdQSS0nLiRwcmVmaXguc3ByaW50ZignJTA2ZCcsICRuZXh0KTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tOcigmJGl0ZW0sICR3aGVyZSkNCgl7DQoJCWxpc3QoJHR5cGUsICRjb2x1bW4pID0gZXhwbG9kZSgnLicsICR3aGVyZSk7DQoJCWlmICgkdHlwZSAmJiAkY29sdW1uICYmIGlzc2V0KCRpdGVtLT4kY29sdW1uKSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgYWxsIGl0ZW1zIHdpdGggdGhlIHNhbWUgY29sdW1uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2lkJyAsJ2NyZWF0ZWQnLCAnbnVtYmVyJywgJ29yZ2FuaXplcicpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJGNvbHVtbikgLiAnID0gJy4kZGItPnF1b3RlKCRpdGVtLT4kY29sdW1uKSk7DQoJCQlpZiAoaXNzZXQoJGl0ZW0tPm9yZ2FuaXplcikpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnb3JnYW5pemVyJykgLiAnID0gJyAuIChpbnQpICRpdGVtLT5vcmdhbml6ZXIpOw0KCQkJfQ0KCQkJJHF1ZXJ5LT5vcmRlcignY3JlYXRlZCBBU0MnKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCSRmb3VuZCA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQlpZiAoY291bnQoJGZvdW5kKSA+IDEpDQoJCQkJew0KCQkJCQkvLyBpcyB0aGUgY3VycmVudCBpdGVtIHRoZSBvbGRlciBvbmU/DQoJCQkJCWlmICgkaXRlbS0+aWQgIT0gJGZvdW5kWzBdLT5pZCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uKTsJCQkJCQkJDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBpbnN1cmUgd2UgdXBkYXRlIFByb2Zvcm1hcyBvbmNlIHBheW1lbnQgaXMgbWFkZQ0KCQkJaWYgKHN0cnBvcygkaXRlbS0+JGNvbHVtbiwgJ1BJJykgIT09IGZhbHNlKQ0KCQkJew0KCQkJCWlmICgkdXBkYXRlID0gc2VsZjo6Z2V0VmFyKCd0cmFuc2FjdGlvbicsICRpdGVtLT5pZCwgJ2ludm9pY2UnLCAnaWQnKSkNCgkJCQl7DQoJCQkJCS8vIGlmIHByb2Zvcm1hIGlzIHNldCBzdG9yZSBiYWNrdXAgZm9yIGxhdGVyIHVzZS4NCgkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uLCBmYWxzZSwgJ3Byb2Zvcm1hJyk7DQoJCQkJCS8vIHVwZGF0ZSB0byBpbnZvaWNlDQoJCQkJCXNlbGY6OnNldE5yKCRpdGVtLCAkdHlwZSwgJGNvbHVtbik7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmICghJHVwZGF0ZSA9IHNlbGY6OmdldFZhcigndHJhbnNhY3Rpb24nLCAkaXRlbS0+aWQsICdpbnZvaWNlJywgJ2lkJykpDQoJCQkJew0KCQkJCQkvLyB0YWtlIGJhY2sgdG8gcHJvZm9ybWEgKFRPRE8gLSBtYXkgbm90IGJlIGlkZWFsKQ0KCQkJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoISRpdGVtLT4kY29sdW1uIHx8IGVtcHR5KCRpdGVtLT4kY29sdW1uKSkNCgkJew0KCQkJLy8gaWYgbm90IHNldCwgdGhlbiBzZXQgbm93DQoJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOwkNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE5yKCYkaXRlbSwgJiR0eXBlLCAmJGNvbHVtbiwgJG5ldyA9IHRydWUsICRvdGhlciA9IG51bGwpDQoJew0KCQlpZiAoJG5ldykNCgkJew0KCQkJLy8gZmlyc3QgdXBkYXRlIHRoZSBpdGVtDQoJCQkkaXRlbS0+JGNvbHVtbgk9IHNlbGY6Om5ld0RvY051bWJlcigkaXRlbS0+b3JnYW5pemVyLCAkaXRlbS0+aWQpOw0KCQl9DQoJCS8vIG5vdyB1cGRhdGUgdGhlIHRhYmxlDQoJCSR1cGRhdGVJdGVtCQk9IG5ldyBcc3RkQ2xhc3M7DQoJCSR1cGRhdGVJdGVtLT5pZAkJPSAkaXRlbS0+aWQ7DQoJCWlmICgkY29sdW1uKQ0KCQl7DQoJCQkkdXBkYXRlSXRlbS0+JGNvbHVtbiA9ICRpdGVtLT4kY29sdW1uOw0KCQkJaWYgKCRvdGhlcikNCgkJCXsNCgkJCQkvLyB1cGRhdGUgdGhlIG90aGVyIGZpZWxkIHdpdGggdGhlIGNvbHVtbg0KCQkJCSR1cGRhdGVJdGVtLT4kb3RoZXIgPSAkaXRlbS0+JGNvbHVtbjsNCgkJCQkkaXRlbS0+JG90aGVyID0gJGl0ZW0tPiRjb2x1bW47DQoJCQl9DQoJCX0JCQkJDQoJCS8vIHVwZGF0ZSB0aGUgaXRlbSBub3cNCgkJRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUsICR1cGRhdGVJdGVtLCAnaWQnKTsNCgl9DQpbQ1VTVE9NQ09ERT1nZXRGaWxlUGF0aF0=', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnTG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ0xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCWNhbmNlbCBFeHBpcmVkIENhcnQgSXRlbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KQ0KCXsNCgkJLy8gYWRkIGFuIGV2ZW50IHRoYXQgd2lsbCBzZW5kIG91dCBhbGwgY29uZmlybWF0aW9uIGVtYWlscywgbm90IHlldCBzZW5kDQoJCSRkb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oIg0KCQkJalF1ZXJ5KHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQljYW5jZWxFeHBpcmVkQ2FydEl0ZW1zKDEpLmRvbmUoZnVuY3Rpb24ocmVzdWx0KSB7DQoJCQkJCWlmKHJlc3VsdCl7DQoJCQkJCQljb25zb2xlLmxvZyhyZXN1bHQpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2FuY2VsRXhwaXJlZENhcnRJdGVtcyh0eXBlKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hamF4LmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMmZm9ybWF0PWpzb24nOw0KCQkJCWlmKHR5cGUgPiAwKXsNCgkJCQkJdmFyIHJlcXVlc3QgPSAndG9rZW49Ii5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuIiZ0eXBlPScrdHlwZTsNCgkJCQl9DQoJCQkJcmV0dXJuIGpRdWVyeS5hamF4KHsNCgkJCQkJdHlwZTogJ1BPU1QnLA0KCQkJCQl1cmw6IGdldFVybCwNCgkJCQkJZGF0YVR5cGU6ICdqc29ucCcsDQoJCQkJCWRhdGE6IHJlcXVlc3QsDQoJCQkJCWpzb25wOiAnY2FsbGJhY2snDQoJCQkJfSk7DQoJCQl9Iik7DQoJfQ==', '', '', '', '', '', 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw0KCQkvLyBjbGVhciB0aGUgY2FydCBpdGVtcyBpZiBleHBpcmVkDQoJCXNlbGY6OmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KTs=', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Event registration component.', '', '', 'Registry (Roline\'s)', '.git', '', '', 1, '', 'https://www.vdm.io/', '', 'HWgZuTTqfBVha6eZiPtm59rZlYbUddGwhlDZ4oCnvVRn+FEWarAZm4q721Rvwehy', 'https://www.vdm.io/access/', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 2, 492, '', 1, 66),
(22, 1, '', '', '', '', '', '', '', 1, '', 1, '', 1, '', '', '', '', '', '', 1, '', 1, '', '', 1, '', 1, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.3.2', 'Copyright (C) 2015. All Rights Reserved', '2016-05-25 04:13:34', '', '', '', '', '', '', '', '', 1, 1, 'Distributor is a highly advanced sermon distributor that runs on the [Joomla 3.x] (http://www.joomla.org) framework. You can link a shared folder from Dropbox to the component and use Dropbox as your file host, not to mention the advanced auto builder that gives you the ability to simply load sermons to your website by only adding them to Dropbox.', 'llewellyn@vdm.io', 1, '', '', '', '409c36f3-5699-4cd3-a15b-4e495e96f32c', 'images/sermon-distro.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2016-05-25 04:13:21', '', 'Sermon Distributor', 'sermondistributor', '', 4, 'CQlzZWxmOjpsb2FkRHJvcGJveEFqYXgoJGRvY3VtZW50KTs=', 'CS8qKg0KCSogCUxvYWQgdGhlIERyb3Bib3ggQWpheCB0byBwYWdlDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkRHJvcGJveEFqYXgoJGRvY3VtZW50KQ0KCXsNCgkJJGRvY3VtZW50LT5hZGRTY3JpcHREZWNsYXJhdGlvbigiDQoJCQlqUXVlcnkod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCWNoZWNrRHJvcGJveExpc3RpbmcoMyk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2hlY2tEcm9wYm94TGlzdGluZyhmcm9tdmlldyl7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguY2hlY2tEcm9wYm94TGlzdGluZyZmb3JtYXQ9anNvbic7DQoJCQkJaWYoZnJvbXZpZXcgPiAwKXsNCgkJCQkJdmFyIHJlcXVlc3QgPSAndG9rZW49Ii5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuIiZmcm9tdmlldz0nK2Zyb212aWV3Ow0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnR0VUJywNCgkJCQkJdXJsOiBnZXRVcmwsDQoJCQkJCWRhdGFUeXBlOiAnanNvbnAnLA0KCQkJCQlkYXRhOiByZXF1ZXN0LA0KCQkJCQlqc29ucDogJ2NhbGxiYWNrJw0KCQkJCX0pOw0KCQkJfQ0KCQkiKTsNCgl9DQoNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBsaW5rcyBhdXRvDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZHJvcGJveF9hdXRvOw0KCQ0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGxpbmtzIG1hbnVhbA0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxpbmtzX2Ryb3Bib3hfbWFudWFsOw0KDQoJLyoqDQoJKiAJVGhlIGRyb3Bib3ggaW5mbyBGaWxlIE5hbWUNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRhdXRvcHJvZ3Jlc3MgPSBmYWxzZTsNCg0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbWFudWFscHJvZ3Jlc3MgPSBmYWxzZTsNCg0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkYXV0b2xpc3RpbmcgPSBmYWxzZTsNCg0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbWFudWFsbGlzdGluZyA9IGZhbHNlOw0KDQoJLyoqDQoJKiAJY2hlY2sgRHJvcGJveCBMb2NhbCBMaXN0aW5nDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZExpbmtzKCYkc2VybW9uKQ0KCXsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkvLyBkZWNyeXB0IHRoZSB1cmxzDQoJCSRzYWZlID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAyNTYpOw0KCQkvLyBpbnRlcm5hbCBkb3dubG9hZCB1cmwNCgkJJGtleUNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzOw0KCQkka2V5Q291bnRlci0+c2VybW9uID0gJHNlcm1vbi0+aWQ7DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGtleUNvdW50ZXItPnByZWFjaGVyID0gJHNlcm1vbi0+cHJlYWNoZXI7DQoJCX0NCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGtleUNvdW50ZXItPnNlcmllcyA9ICRzZXJtb24tPnNlcmllczsNCgkJfQ0KCQkka2V5Q291bnRlciA9IGJhc2U2NF9lbmNvZGUoJHNhZmUtPmVuY3J5cHRTdHJpbmcoanNvbl9lbmNvZGUoJGtleUNvdW50ZXIpKSk7DQoJCSR0b2tlbiA9IEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKTsNCgkJJGRvd25sb2FkVVJMID0gJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLmZpbGUma2V5PScuJGtleUNvdW50ZXIuJyZ0b2tlbj0nLiR0b2tlbjsNCgkJLy8gY2hlY2sgaWYgbG9jYWwgLmh0YWNjZXNzIHNob3VsZCBiZSBzZXQNCgkJJHNldEh0YWNjZXNzID0gZmFsc2U7DQoJCSRvbmNsaWNrID0gJyBvbmNsaWNrPSJzZXJtb25Db3VudGVyKFwnJy4ka2V5Q291bnRlci4nXCcsXCdGSUxFTkFNRVwnKTsiJzsNCgkJLy8gY2hlY2sgd2hhdCBzb3VyY2Ugb2Ygb3VyIGxpbmsNCgkJc3dpdGNoICgkc2VybW9uLT5zb3VyY2UpDQoJCXsNCgkJCWNhc2UgMToNCgkJCQkvLyBsb2NhbCBmaWxlIGdldCBsb2NhbCBmb2xkZXIgYW5kIGNoZWNrIGlmIG91dHNpZGUgcm9vdCAoaWYgbm90IHRoZW4gYWxsb3cgZGlyZWN0KQ0KCQkJCSRsb2NhbEZvbGRlciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsb2NhbGZvbGRlcicsIEpQQVRIX1JPT1QuJy9pbWFnZXMnKS4nLyc7DQoJCQkJLy8gc2hvdWxkIHdlIGFsbG93IGRpcmVjdCBkb3dubG9hZHMNCgkJCQkkYWxsb3dEaXJlY3QgPSBmYWxzZTsNCgkJCQlpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgc3RycG9zKCRsb2NhbEZvbGRlciwgSlBBVEhfUk9PVCkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGFsbG93RGlyZWN0ID0gdHJ1ZTsNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gVXJpOjpyb290KCkuc3RyX3JlcGxhY2UoSlBBVEhfUk9PVCwgJycsICRsb2NhbEZvbGRlcik7DQoJCQkJCS8vIGluc3VyZSBubyBkb3VibGUgLy8gaXMgaW4gdGhlIFVSTA0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlclVSTCk7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCX0NCgkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBwYXRoIG5hbWUNCgkJCQkkbG9jYWxGb2xkZXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlcik7DQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJzovJywgJzovLycsICRsb2NhbEZvbGRlcik7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPmxvY2FsX2ZpbGVzKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2goJHNlcm1vbi0+bG9jYWxfZmlsZXMgYXMgJGtleSkNCgkJCQkJew0KCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlIHx8ICEkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwka2V5LCdsb2NhbCcpOw0KCQkJCQkJCSRsb2NrZWRGb2xkZXJQYXRoID0gYmFzZTY0X2VuY29kZSgkc2FmZS0+ZW5jcnlwdFN0cmluZygkbG9jYWxGb2xkZXIuJGtleSkpOw0KCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBKb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XygkZG93bmxvYWRVUkwuJyZsaW5rPScuJGxvY2tlZEZvbGRlclBhdGguJyZmaWxlbmFtZT0nLiRmaWxlbmFtZSk7DQoJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRhbGxvd0RpcmVjdCkNCgkJCQkJCXsNCgkJCQkJCQkkZmlsZW5hbWUgPSAka2V5Ow0KCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkbG9jYWxGb2xkZXJVUkwuJGtleTsNCgkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQkkc2V0SHRhY2Nlc3MgPSB0cnVlOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAyOg0KCQkJCS8vIERyb3Bib3ggZ2V0IGdsb2JhbCBkcm9wYm94IHN3aXRjaCANCgkJCQkkZHJvcGJveEJ1dHRvbiA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdhZGRfdG9fZHJvcGJveCcsIDEpOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmJ1aWxkKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPm1hbnVhbF9maWxlcykpDQoJCQkJCXsNCgkJCQkJCS8vIG1hbnVhbCBkcm9wYm94DQoJCQkJCQlmb3JlYWNoKCRzZXJtb24tPm1hbnVhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RHJvcGJveExpbmsoJ21hbnVhbCcsMSwka2V5KTsNCgkJCQkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBnZXQgdGhlIGZpbGUgbmFtZSB1c2UgdGhlIHNhbWUgbWV0aG9kIGFzIHRoZSBhdXRvDQoJCQkJCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwka2V5LCdkcm9wYm94X21hbnVhbCcpOw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJGRvd25sb2FkVVJMLicmbGluaz0nLiRkcm9wVVJMLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSAnJzsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgyID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRmaWxlbmFtZSA9IHN0cl9yZXBsYWNlKCdWRE1fcExlS19oMHVFci8nLCAnJywgJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZyhiYXNlNjRfZGVjb2RlKCRkcm9wVVJMKSkpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gYnVpbGQgZHJvcGJveCBzd2l0Y2ggaWYgbmVlZGVkDQoJCQkJCQkJaWYgKDEgPT0gJGRyb3Bib3hCdXR0b24gJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsIHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwpKSkpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrX2Ryb2JveFskZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5idWlsZCkNCgkJCQl7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5hdXRvX3Nlcm1vbnMpKQ0KCQkJCQl7DQoJCQkJCQkvLyBhdXRvbWF0aWMgZHJvcGJveA0KCQkJCQkJZm9yZWFjaCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMgYXMgJGZpbGVuYW1lID0+ICRrZXkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBsaW5rDQoJCQkJCQkJJGRyb3BVUkwgPSBzZWxmOjpnZXREcm9wYm94TGluaygnYXV0bycsMSwka2V5KTsNCgkJCQkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBnZXQgdGhlIGZpbGUgbmFtZSAodXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJGRvd25sb2FkVVJMLicmbGluaz0nLiRkcm9wVVJMLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSAnJzsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgyID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZyhiYXNlNjRfZGVjb2RlKCRkcm9wVVJMKSkpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gYnVpbGQgZHJvcGJveCBzd2l0Y2ggaWYgbmVlZGVkDQoJCQkJCQkJaWYgKDEgPT0gJGRyb3Bib3hCdXR0b24gJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsIHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwpKSkpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrX2Ryb2JveFskZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAzOg0KCQkJCS8vIHVybCBnZXQgdGhlIGZpbGUgbmFtZSB1c2UgdGhlIHNhbWUgbWV0aG9kIGFzIHRoZSBhdXRvDQoJCQkJJGZpbGVuYW1lID0gc2VsZjo6Z2V0RG93bmxvYWRGaWxlTmFtZSgkc2VybW9uLCRzZXJtb24tPnVybCwndXJsJyk7DQoJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlKQ0KCQkJCXsNCgkJCQkJJGxvY2tlZFVSTCA9IGJhc2U2NF9lbmNvZGUoJHNhZmUtPmVuY3J5cHRTdHJpbmcoJHNlcm1vbi0+dXJsKSk7DQoJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBKb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XygkZG93bmxvYWRVUkwuJyZsaW5rPScuJGxvY2tlZFVSTC4nJmZpbGVuYW1lPScuJGZpbGVuYW1lKTsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUpDQoJCQkJew0KCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJHNlcm1vbi0+dXJsOw0KCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgkJLy8gcmVtb3ZlIHRoZSB2YWx1ZXMgbm8gbG9uZ2VyIG5lZWRlZA0KCQl1bnNldCgkc2VybW9uLT5sb2NhbF9maWxlcyk7DQoJCXVuc2V0KCRzZXJtb24tPm1hbnVhbF9maWxlcyk7DQoJCXVuc2V0KCRzZXJtb24tPmF1dG9fc2VybW9ucyk7DQoJCXVuc2V0KCRzZXJtb24tPnVybCk7DQoJCS8vIHNob3VsZCB3ZSBzZXQgdGhlIGxvY2FsIC5odGFjY2VzcyBmb3IgdGhlIGRvd25sb2FkIGZvbGRlcg0KCQlpZiAoJHNldEh0YWNjZXNzKQ0KCQl7DQoJCQkvLyBUT0RPIHdlIG1heSBuZWVkIHRvIGFkZCB0aGlzIGxhdHRlciB0byBlbmZvcmNlIGRvd25sb2FkIG9mIGZpbGVzLg0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldERyb3Bib3hMaW5rKCR0eXBlLCAkcmV0dXJuID0gZmFsc2UsICR0YXJnZXQgPSBmYWxzZSkNCgl7DQoJCS8vIG1ha2Ugc3VyZSBhbGwgZGVmYXVsdHMgYXJlIHNldA0KCQkkZm91bmQgPSBzZWxmOjpjaGVja0Ryb3Bib3hMb2NhbExpc3RpbmcoJHR5cGUpOw0KCQlpZiAoJGZvdW5kKQ0KCQl7DQoJCQlzd2l0Y2goJHJldHVybikNCgkJCXsNCgkJCQljYXNlIDE6DQoJCQkJCS8vIHJldHVybiBhIGxpbmsNCgkJCQkJaWYgKGlzc2V0KHNlbGY6OiR7J2xpbmtzX2Ryb3Bib3hfJy4kdHlwZX1bJHRhcmdldF0pKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gc2VsZjo6JHsnbGlua3NfZHJvcGJveF8nLiR0eXBlfVskdGFyZ2V0XTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlIDI6DQoJCQkJCS8vIHJldHVybiBhbGwgbGlua3MNCgkJCQkJcmV0dXJuIHNlbGY6OiR7J2xpbmtzX2Ryb3Bib3hfJy4kdHlwZX07DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQgOg0KCQkJCQkvLyBqdXN0IGNvbmZpcm0gdGhhdCBpdCBpcyBzZXQNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvdW50RG93bmxvYWQoJGNvdW50ZXIsJGZpbGVuYW1lKQ0KCXsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkkb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAyNTYpOw0KCQkkY291bnRlciA9IGpzb25fZGVjb2RlKHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoYmFzZTY0X2RlY29kZSgkY291bnRlcikpKSk7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY291bnRlcikpDQoJCXsNCgkJCSRjb3VudGVyLT5maWxlbmFtZSA9ICRmaWxlbmFtZTsNCgkJCS8vIHNldCB0aGUgZGF0ZSBvYmplY3QNCgkJCSRkYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsJ2NvdW50ZXInKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc2VybW9uJykgLiAnID0gJy4gKGludCkgJGNvdW50ZXItPnNlcm1vbik7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdmaWxlbmFtZScpIC4gJyA9ICcuICRkYi0+cXVvdGUoJGNvdW50ZXItPmZpbGVuYW1lKSk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkc3RhdGlzdGljID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJLy8gYWxyZWFkeSBoYXMgYW4gZW50cnkNCgkJCQkkc3RhdGlzdGljLT5jb3VudGVyKys7DQoJCQkJJHN0YXRpc3RpYy0+bW9kaWZpZWQgPSAkZGF0ZS0+dG9TcWwoKTsNCgkJCQkvLyB1cGRhdGUgdGhlIGVudHJ5DQoJCQkJcmV0dXJuICRkYi0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJHN0YXRpc3RpYywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IGEgbmV3IGVudHJ5DQoJCQkJJGNvdW50ZXItPmNvdW50ZXIgPSAxOw0KCQkJCSRjb3VudGVyLT5wdWJsaXNoZWQgPSAxOw0KCQkJCSRjb3VudGVyLT5jcmVhdGVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJJGNvdW50ZXItPmFjY2VzcyA9IDE7DQoJCQkJJGNvdW50ZXItPnZlcnNpb24gPSAxOw0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRkb25lID0gJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9zdGF0aXN0aWMnLCAkY291bnRlcik7DQoJCQkJLy8gaWYgZG9uZSByZXR1cm4gbGFzdCB1c2VkIGlkDQoJCQkJaWYgKCRkb25lKQ0KCQkJCXsNCgkJCQkJJG5ld0lkID0gICRkYi0+aW5zZXJ0aWQoKTsNCgkJCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQkJCXJldHVybiBzZWxmOjpzZXRBc3NldCgkbmV3SWQsJ3N0YXRpc3RpYycpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRGaWxlTmFtZSgmJHNlcm1vbiwkZmlsZSwkdHlwZSkNCgl7DQoJCS8vIGZpcnN0IGdldCBmaWxlIG5hbWUgYW5kIGZpbGUgdHlwZQ0KCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCdWRE1fcExlS19oMHVFci8nLCAnJywgJGZpbGUpOw0KCQkkZmlsZVR5cGUgPSBwYXRoaW5mbygkZmlsZSwgUEFUSElORk9fRVhURU5TSU9OKTsNCgkJaWYgKCRmaWxlVHlwZSkNCgkJew0KCQkJJGZpbGUgPSBzdHJfcmVwbGFjZSgnLicuJGZpbGVUeXBlLCAnJywgJGZpbGUpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGZpbGVUeXBlID0gJ2Vycm9yJzsNCgkJfQ0KCQkvLyBub3cgYnVpbGQgZG93bmxvYWQgbmFtZQ0KCQkkZG93bmxvYWROYW1lID0gYXJyYXkoKTsNCgkJLy8gYnVpbGQgdGhlIERvd25sb2FkIEZpbGUgTmFtZSAtIGZpcnN0IGFkZCB0aGUgcHJlYWNoZXIgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPnByZWFjaGVyKQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPnByZWFjaGVyX25hbWUsJ1UnKTsNCgkJfQ0KCQkvLyBhZGQgdGhlIHNlcmllcyBuYW1lIGlmIHNldA0KCQlpZiAoJHNlcm1vbi0+c2VyaWVzKQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPnNlcmllc19uYW1lLCdGJyk7DQoJCX0NCgkJLy8gYWRkIHRoZSBjYXRlZ29yeSBuYW1lIGlmIHNldA0KCQlpZiAoJHNlcm1vbi0+Y2F0aWQgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHNlcm1vbi0+Y2F0ZWdvcnkpKQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPmNhdGVnb3J5LCAnRicpOw0KCQl9DQoJCWlmICgnZHJvcGJveF9tYW51YWwnID09ICR0eXBlIHx8ICdsb2NhbCcgPT0gJHR5cGUpDQoJCXsNCgkJCS8vIGFkZCB0aGUgbWFpbiBmaWxlIG5hbWUNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+bmFtZSwnRicpOw0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkZmlsZSwnRicpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5uYW1lLCdGJyk7DQoJCQlpZiAoJ2Vycm9yJyA9PSAkZmlsZVR5cGUgfHwgc3RycG9zKCc/JywgJGZpbGVUeXBlKSAhPT0gZmFsc2UgfHwgc3RycG9zKCcmJywgJGZpbGVUeXBlKSAhPT0gZmFsc2UgKQ0KCQkJew0KCQkJCSRmaWxlVHlwZSA9ICdtcDMnOyAvLyBUT0RPIHdlIGRvbid0IGtub3cgdGhlIHVybCBmaWxldHlwZSAoc2V0dGluZyB0byBtcDMgYnV0IHRoaXMgY291bGQgYmUgd3JvbmcpDQoJCQl9DQoJCX0NCgkJLy8gbm93IGJ1aWxkIHRoZSBkb3dubG9hZCBmaWxlIG5hbWUNCgkJcmV0dXJuIGltcGxvZGUoJ19fJywgJGRvd25sb2FkTmFtZSkuJy4nLiRmaWxlVHlwZTsNCgl9DQoNCgkvKioNCgkqIAljaGVjayBEcm9wYm94IExvY2FsIExpc3RpbmcgKGRvIHdlIGhhdmUgdGhlIGZpbGVzKQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tEcm9wYm94TG9jYWxMaXN0aW5nKCR0eXBlKQ0KCXsNCgkJJGZpbGVQYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgkdHlwZSk7DQoJCS8vIGdldCB0aGUgbG9jYWwgbGlua3MNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7J2xpbmtzX2Ryb3Bib3hfJy4kdHlwZX0pKQ0KCQl7DQoJCQkvLyByZXR1cm4gdHJ1ZSB3ZSBoYXZlIGxpbmtzIGxvYWRlZA0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJZWxzZWlmICgoJGpzb25saW5rcyA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJGZpbGVQYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkNCgkJewkJCQ0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRqc29ubGlua3MpKQ0KCQkJew0KCQkJCS8vIGdldCBzYXZlZCBsaW5rcw0KCQkJCSRzdG9yZWFnZSA9IGpzb25fZGVjb2RlKCRqc29ubGlua3MsdHJ1ZSk7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzdG9yZWFnZSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBzYXZlZCBsaW5rcw0KCQkJCQlzZWxmOjokeydsaW5rc19kcm9wYm94XycuJHR5cGV9ID0gJHN0b3JlYWdlOw0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEZpbGVQYXRoKCR0eXBlLCAkbmFtZSA9ICdsaXN0aW5nJykNCgl7DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHskdHlwZS4kbmFtZX0pKQ0KCQl7DQoJCQkvLyBHZXQgbG9jYWwga2V5DQoJCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkJLy8gc2V0IHRoZSBuYW1lDQoJCQkkZmlsZU5hbWUgPSBtZDUoJHR5cGUuJG5hbWUuJGxvY2Fsa2V5KTsNCgkJCS8vIHNldCBmaWxlIHBhdGgJCQkNCgkJCXNlbGY6OiR7JHR5cGUuJG5hbWV9ID0gSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzLycuJGZpbGVOYW1lLicuanNvbic7DQoJCX0NCgkJLy8gcmV0dXJuIHRoZSBwYXRoDQoJCXJldHVybiBzZWxmOjokeyR0eXBlLiRuYW1lfTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgdGhlIGxvY2Fsa2V5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9jYWxrZXkgPSBmYWxzZTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvY2FsS2V5KCkNCgl7DQoJCWlmICghc2VsZjo6JGxvY2Fsa2V5KQ0KCQl7DQoJCQkvLyBnZXQgdGhlIG1haW4ga2V5DQoJCQlzZWxmOjokbG9jYWxrZXkgPSBtZDUoSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2xpbmtfZW5jcnlwdGlvbicsICdsb2NhbEtleTM0ZmRXRWtsJykpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9jYWxrZXk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVEcm9wYm94KCR0eXBlID0gZmFsc2UsICRmb3JjZSA9IGZhbHNlKQ0KCXsNCgkJLy8gbG9hZCB0aGUgZmlsZQ0KCQlKTG9hZGVyOjppbXBvcnQoJ2Ryb3Bib3h1cGRhdGVyJywgSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzJyk7DQoJCS8vIHVwZGF0ZSB0eXBlcw0KCQkkdHlwZXMgPSBhcnJheSgnbWFudWFsJywnYXV0bycpOw0KCQkvLyBva2F5IG5vdyB1cGRhdGUgdGhpcyB0eXBlDQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdHlwZSkgJiYgaW5fYXJyYXkoJHR5cGUsJHR5cGVzKSkNCgkJew0KCQkJJGRyb3Bib3ggPSBuZXcgRHJvcGJveHVwZGF0ZXIoKTsNCgkJCXJldHVybiAkZHJvcGJveC0+dXBkYXRlKCR0eXBlLCRmb3JjZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwZGF0ZVByb2dyZXNzKCR0eXBlKQ0KCXsNCgkJJGZpbGVQYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgkdHlwZSwncHJvZ3Jlc3MnKTsNCgkJLy8gZ2V0IHRoZSBzZXQgcHJvZ3Jlc3MNCgkJaWYgKCgkcHJvZ3Jlc3MgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRDb250ZW50KCRmaWxlUGF0aCwgRkFMU0UpKSAhPT0gRkFMU0UpDQoJCXsJCQkNCgkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcHJvZ3Jlc3MpKQ0KCQkJew0KCQkJCS8vIGdldCBzZXQgcHJvZ3Jlc3MNCgkJCQkkcHJvZ3Jlc3MgPSBqc29uX2RlY29kZSgkcHJvZ3Jlc3MsdHJ1ZSk7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwcm9ncmVzcykpDQoJCQkJew0KCQkJCQkvLyByZXR1cm4gdGUgcHJvZ3Jlc3MNCgkJCQkJcmV0dXJuICRwcm9ncmVzc1sncmVwb3J0J107DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAwOw0KCX0NCg==', '', 'CS8qKg0KCSogCUxvYWQgdGhlIERyb3Bib3ggQWpheCB0byBwYWdlDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkRHJvcGJveEFqYXgoJGRvY3VtZW50KQ0KCXsNCgkJJGRvY3VtZW50LT5hZGRTY3JpcHREZWNsYXJhdGlvbigiDQoJCQlqUXVlcnkod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCWNoZWNrRHJvcGJveExpc3RpbmcoMyk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2hlY2tEcm9wYm94TGlzdGluZyhmcm9tdmlldyl7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hamF4LmNoZWNrRHJvcGJveExpc3RpbmcmZm9ybWF0PWpzb24nOw0KCQkJCWlmKGZyb212aWV3ID4gMCl7DQoJCQkJCXZhciByZXF1ZXN0ID0gJ3Rva2VuPSIuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLiImZnJvbXZpZXc9Jytmcm9tdmlldzsNCgkJCQl9DQoJCQkJcmV0dXJuIGpRdWVyeS5hamF4KHsNCgkJCQkJdHlwZTogJ0dFVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0NCgkJIik7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIGRyb3Bib3ggbGlua3MgYXV0bw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxpbmtzX2Ryb3Bib3hfYXV0bzsNCgkNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBsaW5rcyBtYW51YWwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRsaW5rc19kcm9wYm94X21hbnVhbDsNCg0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkYXV0b3Byb2dyZXNzID0gZmFsc2U7DQoNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBpbmZvIEZpbGUgTmFtZQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG1hbnVhbHByb2dyZXNzID0gZmFsc2U7DQoNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBpbmZvIEZpbGUgTmFtZQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGF1dG9saXN0aW5nID0gZmFsc2U7DQoNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBpbmZvIEZpbGUgTmFtZQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG1hbnVhbGxpc3RpbmcgPSBmYWxzZTsNCg0KCS8qKg0KCSogCWNoZWNrIERyb3Bib3ggTG9jYWwgTGlzdGluZw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRMaW5rcygmJHNlcm1vbikNCgl7DQoJCSRsaW5rcyA9IGFycmF5KCk7DQoJCS8vIEdldCBsb2NhbCBrZXkNCgkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJLy8gZGVjcnlwdCB0aGUgdXJscw0KCQkkc2FmZSA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRsb2NhbGtleSwgMjU2KTsNCgkJLy8gaW50ZXJuYWwgZG93bmxvYWQgdXJsDQoJCSRrZXlDb3VudGVyID0gbmV3IFxzdGRDbGFzczsNCgkJJGtleUNvdW50ZXItPnNlcm1vbiA9ICRzZXJtb24tPmlkOw0KCQlpZiAoJHNlcm1vbi0+cHJlYWNoZXIpDQoJCXsNCgkJCSRrZXlDb3VudGVyLT5wcmVhY2hlciA9ICRzZXJtb24tPnByZWFjaGVyOw0KCQl9DQoJCWlmICgkc2VybW9uLT5zZXJpZXMpDQoJCXsNCgkJCSRrZXlDb3VudGVyLT5zZXJpZXMgPSAkc2VybW9uLT5zZXJpZXM7DQoJCX0NCgkJJGtleUNvdW50ZXIgPSBiYXNlNjRfZW5jb2RlKCRzYWZlLT5lbmNyeXB0U3RyaW5nKGpzb25fZW5jb2RlKCRrZXlDb3VudGVyKSkpOw0KCQkkdG9rZW4gPSBKb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCk7DQoJCSRkb3dubG9hZFVSTCA9ICdpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1kb3dubG9hZC5maWxlJmtleT0nLiRrZXlDb3VudGVyLicmdG9rZW49Jy4kdG9rZW47DQoJCS8vIGNoZWNrIGlmIGxvY2FsIC5odGFjY2VzcyBzaG91bGQgYmUgc2V0DQoJCSRzZXRIdGFjY2VzcyA9IGZhbHNlOw0KCQkkb25jbGljayA9ICcgb25jbGljaz0ic2VybW9uQ291bnRlcihcJycuJGtleUNvdW50ZXIuJ1wnLFwnRklMRU5BTUVcJyk7Iic7DQoJCS8vIGNoZWNrIHdoYXQgc291cmNlIG9mIG91ciBsaW5rDQoJCXN3aXRjaCAoJHNlcm1vbi0+c291cmNlKQ0KCQl7DQoJCQljYXNlIDE6DQoJCQkJLy8gbG9jYWwgZmlsZSBnZXQgbG9jYWwgZm9sZGVyIGFuZCBjaGVjayBpZiBvdXRzaWRlIHJvb3QgKGlmIG5vdCB0aGVuIGFsbG93IGRpcmVjdCkNCgkJCQkkbG9jYWxGb2xkZXIgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnbG9jYWxmb2xkZXInLCBKUEFUSF9ST09ULicvaW1hZ2VzJykuJy8nOw0KCQkJCS8vIHNob3VsZCB3ZSBhbGxvdyBkaXJlY3QgZG93bmxvYWRzDQoJCQkJJGFsbG93RGlyZWN0ID0gZmFsc2U7DQoJCQkJaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlICYmIHN0cnBvcygkbG9jYWxGb2xkZXIsIEpQQVRIX1JPT1QpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRhbGxvd0RpcmVjdCA9IHRydWU7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IFVyaTo6cm9vdCgpLnN0cl9yZXBsYWNlKEpQQVRIX1JPT1QsICcnLCAkbG9jYWxGb2xkZXIpOw0KCQkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBVUkwNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnOi8nLCAnOi8vJywgJGxvY2FsRm9sZGVyVVJMKTsNCgkJCQl9DQoJCQkJLy8gaW5zdXJlIG5vIGRvdWJsZSAvLyBpcyBpbiB0aGUgcGF0aCBuYW1lDQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbG9jYWxGb2xkZXIpOw0KCQkJCSRsb2NhbEZvbGRlciA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXIpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5sb2NhbF9maWxlcykpDQoJCQkJew0KCQkJCQlmb3JlYWNoKCRzZXJtb24tPmxvY2FsX2ZpbGVzIGFzICRrZXkpDQoJCQkJCXsNCgkJCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSB8fCAhJGFsbG93RGlyZWN0KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgZmlsZSBuYW1lIHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGF1dG8NCgkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnbG9jYWwnKTsNCgkJCQkJCQkkbG9ja2VkRm9sZGVyUGF0aCA9IGJhc2U2NF9lbmNvZGUoJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGxvY2FsRm9sZGVyLiRrZXkpKTsNCgkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJGRvd25sb2FkVVJMLicmbGluaz0nLiRsb2NrZWRGb2xkZXJQYXRoLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOw0KCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmICgyID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJJGZpbGVuYW1lID0gJGtleTsNCgkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGxvY2FsRm9sZGVyVVJMLiRrZXk7DQoJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJJHNldEh0YWNjZXNzID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQkvLyBEcm9wYm94IGdldCBnbG9iYWwgZHJvcGJveCBzd2l0Y2ggDQoJCQkJJGRyb3Bib3hCdXR0b24gPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnYWRkX3RvX2Ryb3Bib3gnLCAxKTsNCgkJCQlpZiAoMSA9PSAkc2VybW9uLT5idWlsZCkNCgkJCQl7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5tYW51YWxfZmlsZXMpKQ0KCQkJCQl7DQoJCQkJCQkvLyBtYW51YWwgZHJvcGJveA0KCQkJCQkJZm9yZWFjaCgkc2VybW9uLT5tYW51YWxfZmlsZXMgYXMgJGtleSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIGxpbmsNCgkJCQkJCQkkZHJvcFVSTCA9IHNlbGY6OmdldERyb3Bib3hMaW5rKCdtYW51YWwnLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnZHJvcGJveF9tYW51YWwnKTsNCgkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IEpvb21sYV9fX2Q0Yzc2MDk5XzRjMzJfNDA4YV84NzAxX2QwYTcyNDQ4NGRmZF9fX1Bvd2VyOjpfKCRkb3dubG9hZFVSTC4nJmxpbms9Jy4kZHJvcFVSTC4nJmZpbGVuYW1lPScuJGZpbGVuYW1lKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRrZXkpOw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoYmFzZTY0X2RlY29kZSgkZHJvcFVSTCkpKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRkcm9wYm94QnV0dG9uICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHNlcm1vbi0+ZHJvcGJveF9idXR0b25zWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnP2RsPTEnLCAnP2RsPTAnLCBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZyhiYXNlNjRfZGVjb2RlKCRkcm9wVVJMKSkpKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+YnVpbGQpDQoJCQkJew0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNlcm1vbi0+YXV0b19zZXJtb25zKSkNCgkJCQkJew0KCQkJCQkJLy8gYXV0b21hdGljIGRyb3Bib3gNCgkJCQkJCWZvcmVhY2goJHNlcm1vbi0+YXV0b19zZXJtb25zIGFzICRmaWxlbmFtZSA9PiAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RHJvcGJveExpbmsoJ2F1dG8nLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgKHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGF1dG8NCgkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IEpvb21sYV9fX2Q0Yzc2MDk5XzRjMzJfNDA4YV84NzAxX2QwYTcyNDQ4NGRmZF9fX1Bvd2VyOjpfKCRkb3dubG9hZFVSTC4nJmxpbms9Jy4kZHJvcFVSTC4nJmZpbGVuYW1lPScuJGZpbGVuYW1lKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoYmFzZTY0X2RlY29kZSgkZHJvcFVSTCkpKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRkcm9wYm94QnV0dG9uICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHNlcm1vbi0+ZHJvcGJveF9idXR0b25zWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnP2RsPTEnLCAnP2RsPTAnLCBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZyhiYXNlNjRfZGVjb2RlKCRkcm9wVVJMKSkpKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMzoNCgkJCQkvLyB1cmwgZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwkc2VybW9uLT51cmwsJ3VybCcpOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSkNCgkJCQl7DQoJCQkJCSRsb2NrZWRVUkwgPSBiYXNlNjRfZW5jb2RlKCRzYWZlLT5lbmNyeXB0U3RyaW5nKCRzZXJtb24tPnVybCkpOw0KCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJGRvd25sb2FkVVJMLicmbGluaz0nLiRsb2NrZWRVUkwuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZSk7DQoJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlKQ0KCQkJCXsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRzZXJtb24tPnVybDsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJCS8vIHJlbW92ZSB0aGUgdmFsdWVzIG5vIGxvbmdlciBuZWVkZWQNCgkJdW5zZXQoJHNlcm1vbi0+bG9jYWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5tYW51YWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMpOw0KCQl1bnNldCgkc2VybW9uLT51cmwpOw0KCQkvLyBzaG91bGQgd2Ugc2V0IHRoZSBsb2NhbCAuaHRhY2Nlc3MgZm9yIHRoZSBkb3dubG9hZCBmb2xkZXINCgkJaWYgKCRzZXRIdGFjY2VzcykNCgkJew0KCQkJLy8gVE9ETyB3ZSBtYXkgbmVlZCB0byBhZGQgdGhpcyBsYXR0ZXIgdG8gZW5mb3JjZSBkb3dubG9hZCBvZiBmaWxlcy4NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREcm9wYm94TGluaygkdHlwZSwgJHJldHVybiA9IGZhbHNlLCAkdGFyZ2V0ID0gZmFsc2UpDQoJew0KCQkvLyBtYWtlIHN1cmUgYWxsIGRlZmF1bHRzIGFyZSBzZXQNCgkJJGZvdW5kID0gc2VsZjo6Y2hlY2tEcm9wYm94TG9jYWxMaXN0aW5nKCR0eXBlKTsNCgkJaWYgKCRmb3VuZCkNCgkJew0KCQkJc3dpdGNoKCRyZXR1cm4pDQoJCQl7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyByZXR1cm4gYSBsaW5rDQoJCQkJCWlmIChpc3NldChzZWxmOjokeydsaW5rc19kcm9wYm94XycuJHR5cGV9WyR0YXJnZXRdKSkNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHNlbGY6OiR7J2xpbmtzX2Ryb3Bib3hfJy4kdHlwZX1bJHRhcmdldF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQkvLyByZXR1cm4gYWxsIGxpbmtzDQoJCQkJCXJldHVybiBzZWxmOjokeydsaW5rc19kcm9wYm94XycuJHR5cGV9Ow0KCQkJCQlicmVhazsNCgkJCQlkZWZhdWx0IDoNCgkJCQkJLy8ganVzdCBjb25maXJtIHRoYXQgaXQgaXMgc2V0DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3VudERvd25sb2FkKCRjb3VudGVyLCRmaWxlbmFtZSkNCgl7DQoJCS8vIEdldCBsb2NhbCBrZXkNCgkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJJG9wZW5lciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRsb2NhbGtleSwgMjU2KTsNCgkJJGNvdW50ZXIgPSBqc29uX2RlY29kZShydHJpbSgkb3BlbmVyLT5kZWNyeXB0U3RyaW5nKGJhc2U2NF9kZWNvZGUoJGNvdW50ZXIpKSkpOw0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGNvdW50ZXIpKQ0KCQl7DQoJCQkkY291bnRlci0+ZmlsZW5hbWUgPSAkZmlsZW5hbWU7DQoJCQkvLyBzZXQgdGhlIGRhdGUgb2JqZWN0DQoJCQkkZGF0ZSA9IEZhY3Rvcnk6OmdldERhdGUoKTsNCgkJCS8vIGZpcnN0IGNoZWNrIGlmIHRoaXMgZmlsZSBhbHJlYWR5IGhhcyBzdGF0aXN0aWNzDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCdjb3VudGVyJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3N0YXRpc3RpYycpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Nlcm1vbicpIC4gJyA9ICcuIChpbnQpICRjb3VudGVyLT5zZXJtb24pOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZmlsZW5hbWUnKSAuICcgPSAnLiAkZGItPnF1b3RlKCRjb3VudGVyLT5maWxlbmFtZSkpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJHN0YXRpc3RpYyA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJCS8vIGFscmVhZHkgaGFzIGFuIGVudHJ5DQoJCQkJJHN0YXRpc3RpYy0+Y291bnRlcisrOw0KCQkJCSRzdGF0aXN0aWMtPm1vZGlmaWVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJLy8gdXBkYXRlIHRoZSBlbnRyeQ0KCQkJCXJldHVybiAkZGItPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX3N0YXRpc3RpYycsICRzdGF0aXN0aWMsICdpZCcpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRjb3VudGVyLT5jb3VudGVyID0gMTsNCgkJCQkkY291bnRlci0+cHVibGlzaGVkID0gMTsNCgkJCQkkY291bnRlci0+Y3JlYXRlZCA9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRjb3VudGVyLT5hY2Nlc3MgPSAxOw0KCQkJCSRjb3VudGVyLT52ZXJzaW9uID0gMTsNCgkJCQkvLyBzZXQgYSBuZXcgZW50cnkNCgkJCQkkZG9uZSA9ICRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJGNvdW50ZXIpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCSRuZXdJZCA9ICAkZGItPmluc2VydGlkKCk7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCQlyZXR1cm4gc2VsZjo6c2V0QXNzZXQoJG5ld0lkLCdzdGF0aXN0aWMnKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldERvd25sb2FkRmlsZU5hbWUoJiRzZXJtb24sJGZpbGUsJHR5cGUpDQoJew0KCQkvLyBmaXJzdCBnZXQgZmlsZSBuYW1lIGFuZCBmaWxlIHR5cGUNCgkJJGZpbGUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRmaWxlKTsNCgkJJGZpbGVUeXBlID0gcGF0aGluZm8oJGZpbGUsIFBBVEhJTkZPX0VYVEVOU0lPTik7DQoJCWlmICgkZmlsZVR5cGUpDQoJCXsNCgkJCSRmaWxlID0gc3RyX3JlcGxhY2UoJy4nLiRmaWxlVHlwZSwgJycsICRmaWxlKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRmaWxlVHlwZSA9ICdlcnJvcic7DQoJCX0NCgkJLy8gbm93IGJ1aWxkIGRvd25sb2FkIG5hbWUNCgkJJGRvd25sb2FkTmFtZSA9IGFycmF5KCk7DQoJCS8vIGJ1aWxkIHRoZSBEb3dubG9hZCBGaWxlIE5hbWUgLSBmaXJzdCBhZGQgdGhlIHByZWFjaGVyIG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5wcmVhY2hlcl9uYW1lLCdVJyk7DQoJCX0NCgkJLy8gYWRkIHRoZSBzZXJpZXMgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5zZXJpZXNfbmFtZSwnRicpOw0KCQl9DQoJCS8vIGFkZCB0aGUgY2F0ZWdvcnkgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPmNhdGlkICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPmNhdGVnb3J5KSkNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5jYXRlZ29yeSwgJ0YnKTsNCgkJfQ0KCQlpZiAoJ2Ryb3Bib3hfbWFudWFsJyA9PSAkdHlwZSB8fCAnbG9jYWwnID09ICR0eXBlKQ0KCQl7DQoJCQkvLyBhZGQgdGhlIG1haW4gZmlsZSBuYW1lDQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPm5hbWUsJ0YnKTsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGZpbGUsJ0YnKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+bmFtZSwnRicpOw0KCQkJaWYgKCdlcnJvcicgPT0gJGZpbGVUeXBlIHx8IHN0cnBvcygnPycsICRmaWxlVHlwZSkgIT09IGZhbHNlIHx8IHN0cnBvcygnJicsICRmaWxlVHlwZSkgIT09IGZhbHNlICkNCgkJCXsNCgkJCQkkZmlsZVR5cGUgPSAnbXAzJzsgLy8gVE9ETyB3ZSBkb24ndCBrbm93IHRoZSB1cmwgZmlsZXR5cGUgKHNldHRpbmcgdG8gbXAzIGJ1dCB0aGlzIGNvdWxkIGJlIHdyb25nKQ0KCQkJfQ0KCQl9DQoJCS8vIG5vdyBidWlsZCB0aGUgZG93bmxvYWQgZmlsZSBuYW1lDQoJCXJldHVybiBpbXBsb2RlKCdfXycsICRkb3dubG9hZE5hbWUpLicuJy4kZmlsZVR5cGU7DQoJfQ0KDQoJLyoqDQoJKiAJY2hlY2sgRHJvcGJveCBMb2NhbCBMaXN0aW5nIChkbyB3ZSBoYXZlIHRoZSBmaWxlcykNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrRHJvcGJveExvY2FsTGlzdGluZygkdHlwZSkNCgl7DQoJCSRmaWxlUGF0aCA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldFBhdGgoJHR5cGUpOw0KCQkvLyBnZXQgdGhlIGxvY2FsIGxpbmtzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokeydsaW5rc19kcm9wYm94XycuJHR5cGV9KSkNCgkJew0KCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCWVsc2VpZiAoKCRqc29ubGlua3MgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRDb250ZW50KCRmaWxlUGF0aCwgRkFMU0UpKSAhPT0gRkFMU0UpDQoJCXsJCQkNCgkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkanNvbmxpbmtzKSkNCgkJCXsNCgkJCQkvLyBnZXQgc2F2ZWQgbGlua3MNCgkJCQkkc3RvcmVhZ2UgPSBqc29uX2RlY29kZSgkanNvbmxpbmtzLHRydWUpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc3RvcmVhZ2UpKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgc2F2ZWQgbGlua3MNCgkJCQkJc2VsZjo6JHsnbGlua3NfZHJvcGJveF8nLiR0eXBlfSA9ICRzdG9yZWFnZTsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlUGF0aCgkdHlwZSwgJG5hbWUgPSAnbGlzdGluZycpDQoJew0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7JHR5cGUuJG5hbWV9KSkNCgkJew0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJCS8vIHNldCB0aGUgbmFtZQ0KCQkJJGZpbGVOYW1lID0gbWQ1KCR0eXBlLiRuYW1lLiRsb2NhbGtleSk7DQoJCQkvLyBzZXQgZmlsZSBwYXRoCQkJDQoJCQlzZWxmOjokeyR0eXBlLiRuYW1lfSA9IEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycy8nLiRmaWxlTmFtZS4nLmpzb24nOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgcGF0aA0KCQlyZXR1cm4gc2VsZjo6JHskdHlwZS4kbmFtZX07DQoJfQ0KDQoJLyoqDQoJKiAJZ2V0IHRoZSBsb2NhbGtleQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2Fsa2V5ID0gZmFsc2U7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2NhbEtleSgpDQoJew0KCQlpZiAoIXNlbGY6OiRsb2NhbGtleSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBtYWluIGtleQ0KCQkJc2VsZjo6JGxvY2Fsa2V5ID0gbWQ1KEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsaW5rX2VuY3J5cHRpb24nLCAnbG9jYWxLZXkzNGZkV0VrbCcpKTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGxvY2Fsa2V5Ow0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlRHJvcGJveCgkdHlwZSA9IGZhbHNlLCAkZm9yY2UgPSBmYWxzZSkNCgl7DQoJCS8vIGxvYWQgdGhlIGZpbGUNCgkJSkxvYWRlcjo6aW1wb3J0KCdkcm9wYm94dXBkYXRlcicsIEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycycpOw0KCQkvLyB1cGRhdGUgdHlwZXMNCgkJJHR5cGVzID0gYXJyYXkoJ21hbnVhbCcsJ2F1dG8nKTsNCgkJLy8gb2theSBub3cgdXBkYXRlIHRoaXMgdHlwZQ0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHR5cGUpICYmIGluX2FycmF5KCR0eXBlLCR0eXBlcykpDQoJCXsNCgkJCSRkcm9wYm94ID0gbmV3IERyb3Bib3h1cGRhdGVyKCk7DQoJCQlyZXR1cm4gJGRyb3Bib3gtPnVwZGF0ZSgkdHlwZSwkZm9yY2UpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9', '', '', '', '', '', 'CQlzZWxmOjpsb2FkRHJvcGJveEFqYXgoJGRvY3VtZW50KTs=', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdIChodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vU2VybW9uRGlzdHJpYnV0b3IvSm9vbWxhLTMtQ29tcG9uZW50L21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL2NvbXBvbmVudC0zMDAuanBnICJUaGUgIyMjQ29tcG9uZW50X25hbWUjIyMiKQ0KDQojIyNERVNDUklQVElPTiMjIw0KDQpUaGUgYmVzdCB3YXkgdG8gc2VlIGFsbCB5b3VyIG9wdGlvbnMgaXMgdG8gaW5zdGFsbCB0aGlzIGNvbXBvbmVudCBvbiB5b3UgSm9vbWxhIHdlYnNpdGUgYW5kIHRlc3QgYWxsIGZlYXR1cmVzIHlvdXJzZWxmLiBIZXJlIGlzIGEgW2RpcmVjdCBkb3dubG9hZCBsaW5rXSAoaHR0cHM6Ly9naXRodWIuY29tL1Nlcm1vbkRpc3RyaWJ1dG9yL0pvb21sYS0zLUNvbXBvbmVudC9hcmNoaXZlL21hc3Rlci56aXApDQoNCiAqKklmIHlvdSBsaWtlIG91ciBjb21wb25lbnQgcGxlYXNlIHJhdGUgaXQgb24gdGhlIFtKb29tbGEgSW5kZXhdIChodHRwOi8vZXh0ZW5zaW9ucy5qb29tbGEub3JnL2V4dGVuc2lvbnMvZXh0ZW5zaW9uL2xpdmluZy9yZWxpZ2lvbi9zZXJtb24tZGlzdHJpYnV0b3IpKioNCg0KIyMjIEV4YW1wbGUgV2Vic2l0ZSwgVGhhdCBIYXMgT3ZlciA2MDAwIEF1ZGlvIEZpbGVzDQoNCltMb3VkVm9pY2Uub3JnXSAoaHR0cDovL3d3dy5sb3Vkdm9pY2Uub3JnKQ0KDQojIyMgU29tZSBWaWRlbyBEZW1vbnN0cmF0aW9ucw0KDQorIFtTZXR1cCBvdmVydmlld10gKGh0dHBzOi8veW91dHUuYmUveU1QcDFDcDNXXzA/dD0yMG04cykNCisgW1NldHVwIERyb3Bib3hdIChodHRwczovL3lvdXR1LmJlL2J0cEtGRGswLWRJKQ0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10gKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXSAobWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10gKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZSA6aG91cmdsYXNzOg0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0gKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdIChodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0gKG1haWx0bzpqb29tbGFAdmRtLmlvKQ==', '', '', 'A sermon distributor that links to Dropbox.', '', '', 'SermonDistributor CB', '', '', '', '', 'https://www.vdm.io/updates/sermondistributor_update_server.xml', 'https://www.vdm.io/', '', 'oz68X4QEkJLSanYLWykDILqykGlGZ/7ZfYrbysptSlA=', '', '', 2, 1, '', 1, 52),
(23, 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.0', 'Copyright (C) 2015. All Rights Reserved', '2016-06-28 05:19:42', '', '7ciMzl2FIRZhkqI3MKfNRBqkUFXJiJZYyFCv8JjP32w=', '13ZRKOEE+tbXzZsi5sW0onLPXpxNcZDkm/h8y/aIeJQ=', '', 'iyhjiaUATJV6Eb/6DmVfzoauOOgZ2KePKC4IW2tFF1Y=', '', '', '', 1, '', 'The internal Joomla API for currency conversion per/user location.', 'joomla@vdm.io', '', 'http://vdm.bz/get-location-data-key', 'oQvbVMpd0fOhPxFeJB8DYgd6WWK00uEEHYPl9Ew0KZ5xvyit+X8iFY6Owy+9bC097N6k4CYNfTNHJQ21FzuRsg==', '', '121fc9c5-efcc-4473-9b9f-ca2bea65ee13', 'images/vdm/LOCATION500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_locationData.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2021-03-08 03:11:50', 1, 'Currency Method', 'currencymethod', '', 4, 'CQlzZWxmOjp0aGVRdWV1ZSgkZG9jdW1lbnQpOw==', 'CS8qKg0KCSogCVRoZSB1c2VyIG5vdGljZSBpbmZvIEZpbGUgTmFtZQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXJub3RpY2UgPSBmYWxzZTsNCg0KCS8qKg0KCSogCUxvYWQgdGhlIFVwZGF0ZSBRdWV1ZSBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRoZVF1ZXVlKCRkb2N1bWVudCwgJGZvcmNlID0gZmFsc2UpDQoJew0KCQkvLyBzZXQgdGhlIHRpbWUNCgkJJG5vdyA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9Vbml4KCk7DQoJCS8vIHNob3VsZCBhbiB1cGRhdGUgYmUgZm9yY2VkDQoJCSR1cGRhdGUgPSAxOyAvLyA8LS0gZG9u4oCZdCBmb3JjZSB1cGRhdGUNCgkJaWYgKCRmb3JjZSkNCgkJew0KCQkJJHVwZGF0ZSA9IDI7IC8vIDwtLSBmb3JjZSB1cGRhdGUNCgkJfQ0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJdGhlUXVldWUoKTsNCgkJCX0pOw0KCQkJZnVuY3Rpb24gdGhlUXVldWUoKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXgudGhlUXVldWUmZm9ybWF0PWpzb24nOw0KCQkJCXZhciByZXF1ZXN0ID0gJ3Rva2VuPSIuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLiImdGltZT0iLiRub3cuIiZmb3JjZT0iLiR1cGRhdGUuIic7DQoJCQkJcmV0dXJuIGpRdWVyeS5hamF4KHsNCgkJCQkJdHlwZTogJ0dFVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0NCgkJIik7DQoJfQ==', 'CS8qKg0KCSogCVRoZSBjb21wb25lbnQgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zOw0KDQoJLyoqDQoJKiAJVGhlIG5vdGljZSBzd2l0Y2ggaWYgY3VybCBub3QgZm91bmQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRjdXJsRXJyb3JMb2FkZWQgPSBmYWxzZTsNCg0KCS8qKg0KCSogCUxvYWQgdGhlIGRhdGEgZm9yIElQIGFuZCBDdXJyZW5jeSANCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFtbW0NvbXBvbmVudF1dXSgkaXAsICRwcm90b2NvbCwgJGtleSwgJGJhc2UsICRtb2RlLCAkc3RyaW5nLCAkdmFsdWUpDQoJew0KCQkvLyB3ZSBzdGlsbCBuZWVkIHRvIGFkZCBrZXkgY2hlY2sNCgkJLy8gaWYgbm8gaXAgZGV0ZWN0ZWQgdHJ5IGdldHRpbmcgdGhlIGlwIG9yIHJldHVybiB0aGUgZGVmYXVsdA0KCQlpZiAoISRpcCkNCgkJew0KCQkJaWYgKCRmb3VuZCA9IHNlbGY6OmdldElQKCkpDQoJCQl7DQoJCQkJLy8gbG9hZCB0aGUgcmVzdWx0cyBmb3VuZA0KCQkJCSRpcCA9ICRmb3VuZFsnaXAnXTsNCgkJCQkkcHJvdG9jb2wgPSAkZm91bmRbJ3Byb3RvY29sJ107DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSBkZWZhdWx0DQoJCQkJJGlwID0gJzAuMC4wLjAnOw0KCQkJCSRwcm90b2NvbCA9IDE7DQoJCQl9DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIHByb3RvY29sDQoJCWlmICghJHByb3RvY29sKQ0KCQl7DQoJCQlpZiAoISRwcm90b2NvbCA9IHNlbGY6OmlzVmFsaWRJUCgkaXAsICRzdHJpY3QgPSB0cnVlKSkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIGRlZmF1bHQNCgkJCQkkaXAgPSAnMC4wLjAuMCc7DQoJCQkJJHByb3RvY29sID0gMTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc2VsZjo6Z2V0W1tbQ29tcG9uZW50XV1dRmFjdG9yeSgkaXAsICRwcm90b2NvbCktPmdldEluZm8oKGludCkgJG1vZGUsIChpbnQpICRzdHJpbmcsIChmbG9hdCkgJHZhbHVlLCAkYmFzZSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyAkZm9yY2VbW1tDb21wb25lbnRdXV1UYWJsZSA9IHRydWU7IA0KDQoJcHVibGljIHN0YXRpYyAkZGVmYXVsdENvbXBvbmVudCA9ICJjb21fW1tbY29tcG9uZW50XV1dIjsgDQoNCglwcm90ZWN0ZWQgc3RhdGljICRbW1tjb21wb25lbnRdXV1GYWN0b3J5ID0gYXJyYXkoKTsgDQoJDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRbW1tDb21wb25lbnRdXV1GYWN0b3J5KCRpcCwgJHByb3RvY29sKQ0KCXsNCgkJJGdldHRlciA9IG1kNSgkaXApOw0KCQlpZiAoIWlzc2V0KHNlbGY6OiRbW1tjb21wb25lbnRdXV1GYWN0b3J5WyRnZXR0ZXJdKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGZhY3RvcnkgZmlsZQ0KCQkJaW5jbHVkZV9vbmNlICdbW1tjb21wb25lbnRdXV1mYWN0b3J5LnBocCc7DQoJCQkvLyBmaXJzdCBsb2FkIHRoZSBmYWN0b3J5DQoJCQlzZWxmOjokW1tbY29tcG9uZW50XV1dRmFjdG9yeVskZ2V0dGVyXSA9IG5ldyBbW1tDb21wb25lbnRdXV1GYWN0b3J5KCRpcCwgJHByb3RvY29sLCBzZWxmOjokZGVmYXVsdENvbXBvbmVudCwgc2VsZjo6JGZvcmNlW1tbQ29tcG9uZW50XV1dVGFibGUpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokW1tbY29tcG9uZW50XV1dRmFjdG9yeVskZ2V0dGVyXTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRleGNoYW5nZVJhdGVzID0gYXJyYXkoKTsgDQoNCgkvKioNCgkgKiByZXR1cm5zIEV4Y2hhbmdlUmF0ZSBmcm9tICNfXyMjI2NvbXBvbmVudCMjI19leGNoYW5nZV9yYXRlIGRhdGFiYXNlDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXhjaGFuZ2VSYXRlKCRmcm9tLCAkZnJvbVZhbHVlLCAkdG8gPSAnVVNEJywgJHJldHJ5ID0gdHJ1ZSkNCgl7DQoJCS8vIG9ubHkgY29udGludWUgaWYgZnJvbSBhbmQgdG8gaXMgc2V0DQoJCWlmKCRmcm9tICYmICR0bykNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dKSkNCgkJCXsNCgkJCQlpZiAoJGZyb20gPT0gJHRvKQ0KCQkJCXsNCgkJCQkJLy8gaXQgaXMgdGhlIHNhbWUgY3VycmVuY3kgc28gc2V0IGFsbCBvbmUgb24gb25lDQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfSUQnXQkJPSBzdHJ0b2xvd2VyKCRmcm9tKS4nLScuc3RydG9sb3dlcigkZnJvbSk7DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfTkFNRSddCQk9ICRmcm9tLiRmcm9tOw0KCQkJCQlzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFJ10JCT0gMS4wMDsNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9BU0snXQkJPSAxLjAwOw0KCQkJCQlzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX0JJRCddCQk9IDEuMDA7DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfREFURSddCQk9IDA7DQoJCQkJCS8vIG5vdyBzZXQgdGhlIG1vbmV5DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfTU9ORVknXQkJPSBzZWxmOjptYWtlTW9uZXkoc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURSddLCAkZnJvbSk7DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfQVNLX01PTkVZJ10JPSBzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX01PTkVZJ107DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfQklEX01PTkVZJ10JPSBzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX01PTkVZJ107DQoJCQkJCWlmICghJGZyb21WYWx1ZSkNCgkJCQkJew0KCQkJCQkJJGZyb21WYWx1ZSA9IDEuMDA7DQoJCQkJCX0NCgkJCQkJLy8gc2V0IHRoZSBjb252ZXJ0aW9uDQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfRlJPTSddCQk9IChmbG9hdCkgJGZyb21WYWx1ZTsNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9GUk9NX01PTkVZJ10JPSBzZWxmOjptYWtlTW9uZXkoc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9GUk9NJ10sICRmcm9tKTsNCgkJCQkJLy8gY2FsY3VsYXRlIHRoZSBuZXcgdmFsdWUNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9UTyddCQk9IChmbG9hdCkgJGZyb21WYWx1ZTsNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9UT19NT05FWSddCT0gc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9GUk9NX01PTkVZJ107DQoJCQkJCQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXTsJCQ0KCQkJCX0NCgkJCQkvLyB0aGUgZ2V0IHZhbHVlcw0KCQkJCSRnZXQgPSBhcnJheSgNCgkJCQkJJ0VYQ0hBTkdFX1JBVEVfSUQnCT0+ICdhLmFsaWFzJywgDQoJCQkJCSdFWENIQU5HRV9SQVRFX05BTUUnCT0+ICdhLm5hbWUnLCANCgkJCQkJJ0VYQ0hBTkdFX1JBVEUnCQk9PiAnYS5yYXRlJywNCgkJCQkJJ0VYQ0hBTkdFX1JBVEVfQVNLJwk9PiAnYS5hc2snLA0KCQkJCQknRVhDSEFOR0VfUkFURV9CSUQnCT0+ICdhLmJpZCcsDQoJCQkJCSdFWENIQU5HRV9SQVRFX0RBVEUnCT0+ICdhLmRhdGVfcmF0ZScpOw0KCQkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCSRxdWVyeQ0KCQkJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheV92YWx1ZXMoJGdldCksYXJyYXlfa2V5cygkZ2V0KSkpDQoJCQkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fIyMjY29tcG9uZW50IyMjX2V4Y2hhbmdlX3JhdGUnLCAnYScpKQ0KCQkJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmZyb20nKSAuICcgPSAnLiAkZGItPnF1b3RlKCRmcm9tKSkNCgkJCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS50bycpIC4gJyA9ICcuICRkYi0+cXVvdGUoJHRvKSkNCgkJCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQkJew0KCQkJCQkkcmF0ZXMgPSAkZGItPmxvYWRBc3NvYygpOw0KCQkJCQkvLyBsb2FkIGluIHRvIGFjdGl2ZSBkYXRhDQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b10gPSBhcnJheSgpOw0KCQkJCQlmb3JlYWNoICgkcmF0ZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJCXsNCgkJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJGtleV0gPSAkdmFsdWU7DQoJCQkJCX0NCgkJCQkJLy8gbm93IHNldCB0aGUgbW9uZXkNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9NT05FWSddCQk9IHNlbGY6Om1ha2VNb25leShzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFJ10sICR0byk7DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfQVNLX01PTkVZJ10JPSBzZWxmOjptYWtlTW9uZXkoc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9BU0snXSwgJHRvKTsNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9CSURfTU9ORVknXQk9IHNlbGY6Om1ha2VNb25leShzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX0JJRCddLCAkdG8pOw0KCQkJCX0NCgkJCQllbHNlaWYgKCRyZXRyeSkNCgkJCQl7DQoJCQkJCS8vIGlmIG5vdCBmb3VuZCB0cnkgYWdhaW4gd2l0aCBkZWZhdWx0DQoJCQkJCSRkZWZhdWx0ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcyhzZWxmOjokZGVmYXVsdENvbXBvbmVudCktPmdldCgnY3VycmVuY3knLCAnVVNEJyk7DQoJCQkJCXJldHVybiBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJGZyb20sICRmcm9tVmFsdWUsICRkZWZhdWx0LCBmYWxzZSk7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY29uZmlybSB0aGF0IGl0IHdhcyBhY3R1YWxseSBzZXQNCgkJCWlmIChpc3NldChzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dKSkNCgkJCXsNCgkJCQkvLyBjaGVjayBpZiBhIGZyb20gdmFsdWUgaXMgc2V0DQoJCQkJaWYgKCEkZnJvbVZhbHVlKQ0KCQkJCXsNCgkJCQkJJGZyb21WYWx1ZSA9IDEuMDA7DQoJCQkJfQ0KCQkJCS8vIHNldCB0aGUgY29udmVydGlvbg0KCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfRlJPTSddCQkJPSAoZmxvYXQpICRmcm9tVmFsdWU7DQoJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9GUk9NX01PTkVZJ10JCT0gc2VsZjo6bWFrZU1vbmV5KHNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfRlJPTSddLCAkZnJvbSk7DQoJCQkJLy8gY2FsY3VsYXRlIHRoZSBuZXcgdmFsdWUNCgkJCQlzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX1RPJ10JCQk9IGJjbXVsKHNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfRlJPTSddLCBzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFJ10sIDQpOw0KCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfVE9fTU9ORVknXQkJPSBzZWxmOjptYWtlTW9uZXkoc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9UTyddLCAkdG8pOw0KCQkJCS8vIGxvYWQgdGhlIGN1cnJlbmN5IHBhaXIgbmFtZQ0KCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0NVUlJFTkNZX1BBSVInXQkJCQk9ICRmcm9tLiR0bzsNCgkJCQkvLyBsb2FkIHRoZSBjdXJyZW5jeSBuYW1lcw0KCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0ZST01fQ1VSUkVOQ1lfQ09ERV9USFJFRSddCQkJPSAkZnJvbTsNCgkJCQlzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydUT19DVVJSRU5DWV9DT0RFX1RIUkVFJ10JCQk9ICR0bzsNCgkJCQkvLyByZXR1cm4gdGhlIGV4Y2hhbmdlIHJhdGUNCgkJCQlyZXR1cm4gc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAgZ2V0IGlwIGFkZHJlc3MNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElQKCRwbHVzUHJvdG9jb2wgPSB0cnVlLCAkdXNlUHJveHkgPSAnZ2xvYmFsJykNCgl7DQoJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCB1c2UgcHJveHkNCgkJJHVzZVByb3h5ID0gKCR1c2VQcm94eSA9PSAnZ2xvYmFsJykgPyBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgndXNlX3Byb3h5JywgdHJ1ZSkgOiAgKCAoJHVzZVByb3h5KSA/IHRydWUgOiBmYWxzZSk7DQoJCS8vIGdldCB0aGUgaW5wdXQgdmFsdWVzDQoJCSRzZXJ2ZXIgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dC0+c2VydmVyOw0KCQkvLyBnZXQgcmVtb3RlIGFkZHJlc3MgKG1vc3Qgc2VjdXJlIElQIHNpbmNlIGl0IGlzIHNldCBieSB0aGUgc2VydmVyKQ0KCQkkZGVmYXVsdElQID0gJHNlcnZlci0+Z2V0KCdSRU1PVEVfQUREUicsIGZhbHNlLCAnQ01EJyk7DQoJCWlmICgkdXNlUHJveHkpDQoJCXsNCgkJCS8vIHByb3h5IG9wdGlvbnMgYXJyYXkNCgkJCSRwcm94aWVzRGVmYXVsdCA9IGFycmF5KA0KCQkJCSdIVFRQX1hfUkVBTF9JUCcsDQoJCQkJJ0hUVFBfQ0xJRU5UX0lQJywNCgkJCQknSFRUUF9UUlVFX0NMSUVOVF9JUCcsDQoJCQkJJ0hUVFBfWF9GV0RfSVBfQUREUicsDQoJCQkJJ0hUVFBfWF9GT1JXQVJERURfRk9SJywNCgkJCQknSFRUUF9YX0ZPUldBUkRFRCcsDQoJCQkJJ0hUVFBfRk9SV0FSREVEX0ZPUicsDQoJCQkJJ0hUVFBfRk9SV0FSREVEJywNCgkJCQknSFRUUF9WSUEnLA0KCQkJCSdIVFRQX1hfQ09NSU5HX0ZST00nLA0KCQkJCSdIVFRQX0NPTUlOR19GUk9NJw0KCQkJKTsNCgkJCSRwcm94aWVzID0gKGFycmF5KSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgncHJveGllcycsICRwcm94aWVzRGVmYXVsdCk7DQoNCgkJCWZvcmVhY2ggKCRwcm94aWVzIGFzICRwcm94eSkNCgkJCXsNCgkJCQlpZiAoJGlwID0gICRzZXJ2ZXItPmdldCgkcHJveHksIGZhbHNlLCAnU1RSSU5HJykpDQoJCQkJew0KCQkJCQkvLyBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIElQcw0KCQkJCQlpZiAoc3RycG9zKCRpcCwgJywnKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCSR0bXAgPSBleHBsb2RlKCcsICcsICRpcCk7DQoJCQkJCQkvLyBncmFiIHRoZSBmaXJzdCBJUA0KCQkJCQkJJGlwID0gcmVzZXQoJHRtcCk7DQoJCQkJCQkvLyBubyBsb25nZXIgbmVlZCB0aGlzDQoJCQkJCQl1bnNldCgkdG1wKTsNCgkJCQkJfQ0KCQkJCQkvLyBjaGVjayBpZiB2YWxpZCBJUCBpbiBzdHJpY3QgbW9kZQ0KCQkJCQlpZiAoJHByb3RvY29sID0gc2VsZjo6aXNWYWxpZElQKCRpcCwgdHJ1ZSkpDQoJCQkJCXsNCgkJCQkJCS8vIHJldHVybiBwcm94eSBJUCAobm90IHRoYXQgc2VjdXJlKQ0KCQkJCQkJaWYgKCRwbHVzUHJvdG9jb2wpDQoJCQkJCQl7DQoJCQkJCQkJcmV0dXJuIGFycmF5KCdpcCcgPT4gJGlwLCAncHJvdG9jb2wnID0+ICRwcm90b2NvbCk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJcmV0dXJuICRpcDsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBjaGVjayBpZiB2YWlsaWQgSVANCgkJaWYgKCRwcm90b2NvbCA9IHNlbGY6OmlzVmFsaWRJUCgkZGVmYXVsdElQLCB0cnVlKSkNCgkJew0KCQkJLy8gcmV0dXJuIGRlZmF1bHQgSVAgKG1vc3Qgc2VjdXJlKQ0KCQkJaWYgKCRwbHVzUHJvdG9jb2wpDQoJCQl7DQoJCQkJcmV0dXJuICBhcnJheSgnaXAnID0+ICRkZWZhdWx0SVAsICdwcm90b2NvbCcgPT4gJHByb3RvY29sKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlyZXR1cm4gJGRlZmF1bHRJUDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9aXNWYWxpZElQXQ0KCS8qKg0KCSogQHBhcmFtIGZsb2F0ICRhbW91bnQNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZEN1cnJlbmN5KCRhbW91bnQsICRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCXJldHVybiBzZWxmOjptYWtlTW9uZXkoJGFtb3VudCwgJGNvZGV0aHJlZSk7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkY3VycmVuY3lEZXRhaWxzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lEZXRhaWxzKCRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCS8vIGNoZWNrIGlmIGN1cnJlbmN5IGNvZGV0aHJlZSBpcyBzZXQNCgkJaWYgKCEkY29kZXRocmVlKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIG1haW4gY3VycmVuY3kNCgkJCSRjb2RldGhyZWUgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKHNlbGY6OiRkZWZhdWx0Q29tcG9uZW50KS0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKTsNCgkJfQ0KCQkvLyByZXR1cm4gY2FjaGVkIGRhdGEgaWYgc2V0DQoJCWlmICgkY29kZXRocmVlICYmICFpc3NldChzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQlpZiAoaXNfbnVtZXJpYygkY29kZXRocmVlKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJy4gKGludCkgJGNvZGV0aHJlZSk7DQoJCQl9DQoJCQllbHNlaWYgKHN0cmxlbigkY29kZXRocmVlKSA9PSAzKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCRjb2RldGhyZWUpKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmNvZGV0aHJlZScpIC4gJyA9ICcuJGRiLT5xdW90ZSgnTk9ORScpKTsNCgkJCX0NCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0gPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQkvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gc2V0DQoJCWlmIChpc3NldChzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPW1ha2VNb25leV0gDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXSANCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KIFtDVVNUT01DT0RFPXdyaXRlRmlsZV0=', 'CS8qKg0KCSogCUxvYWQgdGhlIFVwZGF0ZSBRdWV1ZSBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRoZVF1ZXVlKCRkb2N1bWVudCwgJGZvcmNlID0gZmFsc2UpDQoJew0KCQkvLyBzZXQgdGhlIHRpbWUNCgkJJG5vdyA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9Vbml4KCk7DQoJCS8vIHNob3VsZCBhbiB1cGRhdGUgYmUgZm9yY2VkDQoJCSR1cGRhdGUgPSAxOyAvLyA8LS0gZG9u4oCZdCBmb3JjZSB1cGRhdGUNCgkJaWYgKCRmb3JjZSkNCgkJew0KCQkJJHVwZGF0ZSA9IDI7IC8vIDwtLSBmb3JjZSB1cGRhdGUNCgkJfQ0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJdGhlUXVldWUoKTsNCgkJCX0pOw0KCQkJZnVuY3Rpb24gdGhlUXVldWUoKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hamF4LnRoZVF1ZXVlJmZvcm1hdD1qc29uJzsNCgkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnRpbWU9Ii4kbm93LiImZm9yY2U9Ii4kdXBkYXRlLiInOw0KCQkJCXJldHVybiBqUXVlcnkuYWpheCh7DQoJCQkJCXR5cGU6ICdHRVQnLA0KCQkJCQl1cmw6IGdldFVybCwNCgkJCQkJZGF0YVR5cGU6ICdqc29ucCcsDQoJCQkJCWRhdGE6IHJlcXVlc3QsDQoJCQkJCWpzb25wOiAnY2FsbGJhY2snDQoJCQkJfSk7DQoJCQl9DQoJCSIpOw0KCX0=', '', '', '', '', '', 'CQlzZWxmOjp0aGVRdWV1ZSgkZG9jdW1lbnQpOw==', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS92ZG0taW8vSm9vbWxhLUN1cnJlbmN5LU1ldGhvZC9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KV2hhdCBpcyB0aGlzPw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqIFRoaXMgaXMgYSAjIyNDb21wb25lbnRfbmFtZSMjIyBBUEkgQ29tcG9uZW50IGZvciBKb29tbGEhIHZlcnNpb24gMy54DQoqIERldGFpbGVkIGNoYW5nZXMgaW4gdGhlIFtDaGFuZ2Vsb2ddKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUxvY2F0aW9uLURhdGEvY29tbWl0cy9tYXN0ZXIpDQoNCldoYXQgaXMgIyMjQ29tcG9uZW50X25hbWUjIyMgQVBJPw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqICMjI0NvbXBvbmVudF9uYW1lIyMjISBpcyBhICoqSVAgdG8gQ291bnRyeSwgQ3VycmVuY3kgYW5kIEV4Y2hhbmdlIFJhdGUgQ29tcG9uZW50KiogKEFwcGxpY2F0aW9uIFByb2dyYW1tYWJsZSBJbnRlcmZhY2UpIHdoaWNoIGVuYWJsZXMgeW91IHRvIHJldHJpZXZlIHRoZSBjb3VudHJ5LCBjdXJyZW5jeSBhbmQgZXhjaGFuZ2UgcmF0ZSBkYXRhIGZyb20gYW55IGdpdmVuIElQLg0KKiBJdCdzIGEgKipmcmVlIGFuZCBPcGVuU291cmNlIHNvZnR3YXJlKiosIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb3IgbGF0ZXINCiogVGhpcyBpcyBhIHNpbXBsZSBhbmQgcG93ZXJmdWwgYWRkb24gdG8gSm9vbWxhIGFuZCBpdCByZXF1aXJlcyBhIHNlcnZlciB3aXRoIFBIUCBhbmQgTXlTUUwgd2l0aCB0aGUgSm9vbWxhIDMueCBmcmFtZXdvcmsgaW5zdGFsbGVkIHRvIHJ1biBpdC4NCk1vcmUgW2RldGFpbHMgaGVyZSBhYm91dCBKb29tbGFdKGh0dHA6Ly93d3cuam9vbWxhLm9yZy9hYm91dC1qb29tbGEuaHRtbCkNCg0KQnVpbGQgRGV0YWlscw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQpJcyAjIyNDb21wb25lbnRfbmFtZSMjIyBmb3IgeW91Pw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqIElmIHlvdXIgcnVubmluZyBhIEpvb21sYSAzIFdlYnNpdGUgYW5kIHdvdWxkIGxpa2UgeW91ciBvd24gSVAgdG8gQ291bnRyeSBhbmQgQ3VycmVuY3kgRXhjaGFuZ2UgUmF0ZSBBUEkuDQoNCkxlYXJuICMjI0NvbXBvbmVudF9uYW1lIyMjIEFQSSENCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKiBtb3JlIGluZm8gY29taW5nIHNvb24uLi4NCg0KV2hlcmUgZG8gd2UgZ2V0IElQIFVwZGF0ZXM/DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiogVGhlIGRhdGFiYXNlIHVzZWQgdG8gdXBkYXRlIHRoZSBJUCB0YWJsZXMgaXMgcHJvdmlkZWQgYnkgW3NvZnR3YXJlNzcubmV0XShodHRwOi8vc29mdHdhcmU3Ny5uZXQvZ2VvLWlwLykgYXMgW2RvbmF0aW9ud2FyZV0oaHR0cDovL3NvZnR3YXJlNzcubmV0L2dlby1pcC8/bGljZW5zZSkuIFRoZXkgbmVlZCB5b3VyIHN1cHBvcnQhIFBsZWFzZSBtYWtlIGEgW2RvbmF0aW9uIHZpYSBwYXlwYWxdKGh0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3I/Y21kPV9zLXhjbGljayZob3N0ZWRfYnV0dG9uX2lkPTNIS004TjVYWFVIVjYpIG5vdyENCg0KV2hlcmUgZG8gd2UgZ2V0IEV4Y2hhbmdlIFJhdGUgVXBkYXRlcz8NCi0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqIFsxRm9yZ2VdKGh0dHBzOi8vMWZvcmdlLmNvbS8pIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgZXhjaGFuZ2UgcmF0ZXMuIFlvdSB3aWxsIG5lZWQgYSBbZnJlZSBBUEkga2V5XShodHRwczovLzFmb3JnZS5jb20vcmVnaXN0ZXIpLg0KKiBbT3BlbiBFeGNoYW5nZSBSYXRlc10oaHR0cHM6Ly9vcGVuZXhjaGFuZ2VyYXRlcy5vcmcvKSBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIGV4Y2hhbmdlIHJhdGVzLiBZb3Ugd2lsbCBuZWVkIGEgW2ZyZWUgQVBJIGtleV0oaHR0cHM6Ly9vcGVuZXhjaGFuZ2VyYXRlcy5vcmcvc2lnbnVwL2ZyZWUpLg0KKiBbRXhjaGFuZ2UgUmF0ZSBBUEldKGh0dHBzOi8vd3d3LmV4Y2hhbmdlcmF0ZS1hcGkuY29tKSBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIGV4Y2hhbmdlIHJhdGVzLiBZb3Ugd2lsbCBuZWVkIGEgW2ZyZWUgQVBJIGtleV0oaHR0cHM6Ly93d3cuZXhjaGFuZ2VyYXRlLWFwaS5jb20vYXBwL3NpZ251cCkuDQoqIFtGaXhlcl0oaHR0cHM6Ly9maXhlci5pby8pIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgZXhjaGFuZ2UgcmF0ZXMuIFlvdSB3aWxsIG5lZWQgYSBbZnJlZSBBUEkga2V5XShodHRwczovL2ZpeGVyLmlvL3NpZ251cC9mcmVlKS4NCiogW0N1cnJlbmN5IExheWVyXShodHRwczovL2N1cnJlbmN5bGF5ZXIuY29tLykgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBleGNoYW5nZSByYXRlcy4gWW91IHdpbGwgbmVlZCBhIFtmcmVlIEFQSSBrZXldKGh0dHBzOi8vY3VycmVuY3lsYXllci5jb20vc2lnbnVwP3BsYW49MSkuDQoqIFlvdSB0ZWxsIHVzIHdobyB3ZSBzaG91bGQgYWxzbyBhZGQuLi4uDQoNClVwZGF0ZXMgYXJlIGZyZWUhDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiogQWx3YXlzIHVzZSB0aGUgW2xhdGVzdCB2ZXJzaW9uXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1DdXJyZW5jeS1NZXRob2QvemlwYmFsbC9tYXN0ZXIvKS4NCg0KV2hlcmUgY2FuIHlvdSBnZXQgc3VwcG9ydCBhbmQgaGVscD8NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKiBbTmVlZCBIZWxwP10oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ3VycmVuY3ktTWV0aG9kL2lzc3VlcykuDQoqIFJlcG9ydCBhbiBbaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUN1cnJlbmN5LU1ldGhvZC9pc3N1ZXMpLg0KDQpDb3B5cmlnaHQ6DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiogQ29weXJpZ2h0IChDKSBbVmFzdCBEZXZlbG9wbWVudCBNZXRob2RdKGh0dHBzOi8vd3d3LnZkbS5pbykuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIA0KKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9yIGxhdGVyDQoqIFNlZSBbTGljZW5zZSBkZXRhaWxzXShodHRwczovL3d3dy52ZG0uaW8vZ251LWdwbCkNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cudmRtLmlvL2pvb21sYS1jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKGh0dHA6Ly9jYXJlZXJzLnN0YWNrb3ZlcmZsb3cuY29tL2xsZXdlbGx5bikNCg0KIyMgRG9uYXRpb25zDQoNCkNvbWUgb24gYnV5IG1lIGEgY29mZmVlIDopDQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', '', '', 'The internal Joomla API for currency conversion per/user location.', '', '', 'Currency Method', '.git', '', '', 2, 'https://raw.githubusercontent.com/vdm-io/Joomla-Location-Data/master/update_server.xml', 'https://www.vdm.io/', '', 'yCK3vIvvmW9lhQWhjQ59UYZNI2+Gu8ea3xi/9pIsZmo=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 140, '', 1, 68),
(24, 1, '', '', '', 1, '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, 1, 1, '', '', 1, '', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.2.4', 'Copyright (C) 2015. All Rights Reserved', '2016-10-11 13:21:41', 1, 'oFMwe3AxUsKMJtJimKkJsHaTYqDYqWZkC61nC1SxEfo=', 'sZha0cp6FAtJnJFM3FA4KZ9a9LRPQWleEVOfkQERTVg=', '', '4w0Rzv/4G3yVkL4YNV1q5vXzbInZDw9WsrRqb49Wz98=', '', '', '', 1, '', 'Expert Database component adds the ability to your Joomla to manage various experts and their related details.', 'llewellyn@vdm.io', '', 'https://vdm.bz/jcb-expert-database', 'g5iSlb/hQAUP2TW/lKRX5LOTtOtKoaCU1Z9vJSRU2/KybhqmUpzRFEvM5l9nu1pqIxQ2lbplpKvzFRt4WlqMDQ==', '', '9c00695f-70da-4e01-a1c4-1fc766994467', 'images/vdm/EXPERT500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_expertDatabase.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2022-03-18 18:16:48', 1, 'Expert Database', 'expertdatabase', '', 4, 'CQlzZWxmOjpsb2FkQ29uZmlybWF0aW9uQWpheCgkZG9jdW1lbnQpOw==', 'CS8qKg0KCSogCUxvYWQgdGhlIENvbmZpcm1hdGlvbiBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDb25maXJtYXRpb25BamF4KCRkb2N1bWVudCkNCgl7DQoJCS8vIGFkZCBhbiBldmVudCB0aGF0IHdpbGwgc2VuZCBvdXQgYWxsIGNvbmZpcm1hdGlvbiBlbWFpbHMsIG5vdCB5ZXQgc2VuZA0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJc2VuZENvbmZpcm1hdGlvbkVtYWlscygxKTsNCgkJCX0pOw0KCQkJDQoJCQlmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKHR5cGUpIHsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImFkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9YWpheC5zZW5kQ29uZmlybWF0aW9uRW1haWxzJmZvcm1hdD1qc29uJzsNCgkJCQlpZih0eXBlID4gMCl7DQoJCQkJCXZhciByZXF1ZXN0ID0gJ3Rva2VuPSIuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLiImdHlwZT0nK3R5cGU7DQoJCQkJfQ0KCQkJCXJldHVybiBqUXVlcnkuYWpheCh7DQoJCQkJCXR5cGU6ICdQT1NUJywNCgkJCQkJdXJsOiBnZXRVcmwsDQoJCQkJCWRhdGFUeXBlOiAnanNvbnAnLA0KCQkJCQlkYXRhOiByZXF1ZXN0LA0KCQkJCQlqc29ucDogJ2NhbGxiYWNrJw0KCQkJCX0pOw0KCQkJfSIpOw0KCX0=', 'CS8qKg0KCSogCVRoZSBtYWluIHNlbmQgZW1haWwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXBseUVtYWlsOw0KDQoJLyoqDQoJKiAJVGhlIGNvbXBvbmVudCBwYXJhbXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRwYXJhbXM7DQoNCgkvKioNCgkqIAlUaGUgTWFpbiBmcm9tIG5hbWUNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXBseU5hbWU7DQoNCgkvKioNCgkqIAlTZW5kIHRoZSBjb25maXJtYXRpb24gZW1haWxzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUZW1wbGF0ZSgkdHlwZSwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJfQ0KCQkkYm9keSA9IHNlbGY6OiRwYXJhbXMtPmdldCgkdHlwZSwgJGRlZmF1bHQpOw0KCQkvLyByZXR1cm4gdGhlIHRlbXBsYXRlIGlmIGZvdW5kDQoJCWlmICgkYm9keSkNCgkJew0KCQkJcmV0dXJuICRib2R5Ow0KCQl9DQoJCXJldHVybiBUZXh0OjpzcHJpbnRmKCdObyB0ZW1wbGF0ZSBmb3IgPGI+JXM8L2I+IHdlcmUgZm91bmQnLCBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR0eXBlLCAndycpKTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgcGxhY2UgaG9sZGVycw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGxhY2VIb2xkZXJzKCR0eXBlKQ0KCXsNCgkJaWYgKCdkb2N1bWVudCcgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJfQ0KCQllbHNlaWYgKCdjb25maXJtYXRpb25fZW1haWwnID09ICR0eXBlKQ0KCQl7DQoJCQkkZiA9ICdbJzsNCgkJCSRiID0gJ10nOw0KCQkJJHBsYWNlaG9sZGVyID0gYXJyYXkoKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXkoJ1tkb2N1bWVudF9oZWFkZXJdJyk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV92YWx1ZXMoc2VsZjo6Z2V0U2VsZWN0aW9uKCdleHBlcnQnLCAkZi4nZXhwZXJ0XycsICRiKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X3ZhbHVlcyhzZWxmOjpnZXRTZWxlY3Rpb24oJ3JlZmVycmFsJywgJGYuJ3JlZmVycmFsXycsICRiKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbY29uZmlybWF0aW9uX2xpbmtdJyk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfZm9vdGVyXScpOw0KCQkJcmV0dXJuICBzZWxmOjptZXJnZUFycmF5cygkcGxhY2Vob2xkZXIpOw0KCQl9DQoJCWVsc2VpZiAoJ2V4cGVydF9wcm9maWxlJyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfaGVhZGVyXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfdmFsdWVzKHNlbGY6OmdldFNlbGVjdGlvbignZXhwZXJ0JywgJGYuJ2V4cGVydF8nLCAkYikpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2lzX29yZ2FuaXNhdGlvbl0nLCAnW2lzX2FkbWluXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2RvY3VtZW50X2Zvb3Rlcl0nKTsNCgkJCXJldHVybiAgc2VsZjo6bWVyZ2VBcnJheXMoJHBsYWNlaG9sZGVyKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJU2VuZCBhIG1lc3NhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRNZXNzYWdlKCRlcG9zY29kZSwgJHJlcGx5VG9OYW1lLCAkcmVwbHlUb0VtYWlsLCAkbWVzc2FnZSkNCgl7DQoJCSRlcG9zY29kZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGRlY29kZSgkZXBvc2NvZGUpOw0KCQkvLyBHZXQgYSBDcnlwdCBLZXkNCgkJJGJhc2lja2V5ID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJJG9wZW5lciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRiYXNpY2tleSwgMTI4KTsNCgkJJGVwb3NDb2RlID0gcnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygkZXBvc2NvZGUpLCAiXDAiKTsNCgkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRlcG9zQ29kZSkpDQoJCXsNCgkJCSR0YXJnZXQgPSBqc29uX2RlY29kZSgkZXBvc0NvZGUpOw0KCQkJaWYgKGlzc2V0KCR0YXJnZXQtPmlkKSAmJiAkdGFyZ2V0LT5pZCA+IDApDQoJCQl7DQoJCQkJJGV4cGVydCA9IHNlbGY6OmdldEV4cGVydERldGFpbHMoJHRhcmdldC0+aWQsICdvYmplY3QnLCAnc3BlY2lhbCcpOw0KCQkJCWlmIChpc3NldCgkZXhwZXJ0LT5lbWFpbCkgJiYgaXNzZXQoJHRhcmdldC0+ZW1haWwpICYmICRleHBlcnQtPmVtYWlsID09ICR0YXJnZXQtPmVtYWlsKQ0KCQkJCXsNCgkJCQkJLy8gc2V0dXAgdGhlIHN1YmplY3QNCgkJCQkJJHN1YmplY3QgPSBUZXh0OjpzcHJpbnRmKCdBIG1lc3NhZ2UgZnJvbSAlcyB0byAlcycsICRyZXBseVRvTmFtZSwgJGV4cGVydC0+bmFtZSk7DQoJCQkJCS8vIHNldHVwIHRoZSBodG1sDQoJCQkJCSRtZXNzYWdlSHRtbCA9IHN0cl9yZXBsYWNlKCJcbiIsICI8YnIgLz4iLCAkbWVzc2FnZSk7DQoJCQkJCSRodG1sID0gVGV4dDo6c3ByaW50ZignJXM8YnIgLz48YnIgLz4lczxiciAvPiVzJywgJG1lc3NhZ2VIdG1sLCAkcmVwbHlUb05hbWUsICRyZXBseVRvRW1haWwpOw0KCQkJCQkkdGV4dCA9IFRleHQ6OnNwcmludGYoIiVzXG5cbiVzXG4lcyIsICRtZXNzYWdlLCAkcmVwbHlUb05hbWUsICRyZXBseVRvRW1haWwpOw0KCQkJCQkvLyBzZW5kIHRoZSBlbWFpbA0KCQkJCQlpZiAoW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJGV4cGVydC0+ZW1haWwsICRzdWJqZWN0LCBbW1tDb21wb25lbnRdXV1FbWFpbDo6c2V0VGFibGVCb2R5KCRodG1sLCAkc3ViamVjdCksICR0ZXh0LCAxLCBudWxsLCBudWxsLCAkcmVwbHlUb0VtYWlsLCAgJHJlcGx5VG9OYW1lKSkNCgkJCQkJew0KCQkJCQkJcmV0dXJuIGFycmF5KCdtZXNzYWdlJyA9PiAgVGV4dDo6c3ByaW50ZignJXMgeW91ciBtZXNzYWdlIHRvICVzIHdhcyBzZW5kIHN1Y2Nlc3NmdWxseSEnLCAkcmVwbHlUb05hbWUsICRleHBlcnQtPm5hbWUpLCAnc3RhdHVzJyA9PiAnc3VjY2VzcycpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBhcnJheSgnbWVzc2FnZScgPT4gIFRleHQ6OnNwcmludGYoJyVzIHRoZXJlIHdhcyBhbiBFUlJPUiBzZW5kaW5nIHlvdXIgbWVzc2FnZSEnLCAkcmVwbHlUb05hbWUpLCAnc3RhdHVzJyA9PiAnZGFuZ2VyJyk7DQoJfQ0KDQoJLyoqDQoJKiAJdGhlIGNvbmZpcm1hdGlvbiBlbWFpbHMgdG8gc2VuZA0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbmZpcm1hdGlvbkVtYWlscyA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlTZW5kIHRoZSBjb25maXJtYXRpb24gZW1haWxzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKCkNCgl7DQoJCS8vIGZpcnN0IHdlIGdldCBhbGwgdGhlIGRhdGEgYW5kIHNldCB0aGUgZW1haWxzIGFzIHNlbmQgKHRvIGluc3VyZSBlbWFpbHMgYXJlIG5vdCBzZW5kIG1vcmUgdGhlbiBvbmNlKQ0KCQlpZiAoJGxpc3QgPSBzZWxmOjpnZXRDb25maXJtYXRpb25OZWVkZWRMaXN0KCkpDQoJCXsNCgkJCS8vIGdldCB0aGUgY29tcGFueQ0KCQkJJGNvbXBhbnkgPSAgc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJyk7DQoJCQkvLyBnZXQgZW1haWwgdGVtcGxhdGUNCgkJCSR0ZW1wbGF0ZSA9IHNlbGY6OmdldFRlbXBsYXRlKCdjb25maXJtYXRpb25fZW1haWwnKTsNCgkJCSRzdWJqZWN0X3RlbXBsYXRlID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ3N1YmplY3RfY29uZmlybWF0aW9uX2VtYWlsJywgJ0hpIFtyZWZlcnJhbF9uYW1lXSwgcGxlYXNlIGNvbmZpcm0gdGhlIGRldGFpbHMgb2YgW2V4cGVydF9uYW1lXScpOw0KCQkJLy8gc2V0IHNvbWUgZGVmYXVsdHMNCgkJCSRkb2NfaGVhZGVyID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2RvY19oZWFkZXInKTsNCgkJCSRkb2NfZm9vdGVyID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2RvY19mb290ZXInKTsNCgkJCSRkZWZhdWx0W10gPSBhcnJheSgnW2RvY3VtZW50X2hlYWRlcl0nID0+IHNlbGY6OnNldER5bmFtaWNEYXRhKCRkb2NfaGVhZGVyLCAkY29tcGFueSksICdbZG9jdW1lbnRfZm9vdGVyXScgPT4gc2VsZjo6c2V0RHluYW1pY0RhdGEoJGRvY19mb290ZXIsICRjb21wYW55KSk7DQoJCQkvLyBub3cgbGV0cyBnZXQgdGhlIGNvbXBhbnkgZGV0YWlscw0KCQkJJGRlZmF1bHRbXSA9ICRjb21wYW55Ow0KCQkJJGRldGFpbHMgPSBhcnJheSgpOw0KCQkJJGRldGFpbHNbMF0gPSBzZWxmOjptZXJnZUFycmF5cygkZGVmYXVsdCk7DQoJCQkvLyBzdGFydCBidWlsZGluZyB0aGUgZW1haWxzDQoJCQlmb3JlYWNoICgkbGlzdCBhcyAkcmVmZXJlbmNlKQ0KCQkJew0KCQkJCS8vIG5vdyBsZXRzIGdldCB0aGUgZXhwZXJ0IGRldGFpbHMNCgkJCQkkZGV0YWlsc1sxXSA9IHNlbGY6OmdldEV4cGVydERldGFpbHMoJHJlZmVyZW5jZVsnW3JlZmVycmFsX2V4cGVydF9pZF0nXSwgJ3BsYWNlaG9sZGVyJywgJ2Z1bGwnKTsNCgkJCQkkZGV0YWlsc1syXSA9ICRyZWZlcmVuY2U7DQoJCQkJLy8gbm93IG1vcmUgdmFsdWVzDQoJCQkJJHBsYWNlaG9sZGVycyA9IHNlbGY6Om1lcmdlQXJyYXlzKCRkZXRhaWxzKTsNCgkJCQkkYm9keSA9IHNlbGY6OnNldER5bmFtaWNEYXRhKCR0ZW1wbGF0ZSwgJHBsYWNlaG9sZGVycyk7DQoJCQkJJHN1YmplY3QgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkc3ViamVjdF90ZW1wbGF0ZSwgJHBsYWNlaG9sZGVycyk7DQoJCQkJLy8gc2V0IHRoZSBlbWFpbCBkZXRhaWxzDQoJCQkJc2VsZjo6JGNvbmZpcm1hdGlvbkVtYWlsc1tdID0gYXJyYXkoJ2lkJyA9PiAkcmVmZXJlbmNlWydbcmVmZXJyYWxfaWRdJ10sICdlbWFpbCcgPT4gJHJlZmVyZW5jZVsnW3JlZmVycmFsX2VtYWlsXSddLCAnc3ViamVjdCcgPT4gJHN1YmplY3QsICdodG1sJyA9PiAkYm9keSk7DQoJCQkJLy8gbGV0cyBzZW5kIG1haWwgZWFjaCB0aW1lIHdlIGhhdmUgbW9yZSB0aGVuIDEwIHNldA0KCQkJCXNlbGY6OnNlbmRDb25maXJtYXRpb25FbWFpbCgxMCk7DQoJCQl9DQoJCQkvLyBzZW5kIGZpbmFsIGVtYWlscyBpZiBhbnkgcmVtYWluDQoJCQlzZWxmOjpzZW5kQ29uZmlybWF0aW9uRW1haWwoKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIFNlbmQgdGhlIGVtYWlsIG5lZWRlZCBmb3IgY29uZmlybWF0aW9uDQoJKg0KCSogQHBhcmFtIGludCAgJHF0eSB0aGUgcXR5IGJlZm9yZSBlbWFpbGluZyB0aGUgbGlzdA0KCSoNCgkqIEByZXR1cm4gIGJvb2xlYW4gZmFsc2Ugb24gZmFpbHVyZQ0KCSoNCgkqKi8JDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWwoJHF0eSA9IDEpDQoJew0KCQlpZiAoY291bnQoc2VsZjo6JGNvbmZpcm1hdGlvbkVtYWlscykgPj0gJHF0eSkNCgkJew0KCQkJLy8gc2VuZCB0aGUgZW1haWxzDQoJCQlmb3JlYWNoIChzZWxmOjokY29uZmlybWF0aW9uRW1haWxzIGFzICRkZXRhaWxzKQ0KCQkJew0KCQkJCWlmICghW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJGRldGFpbHNbJ2VtYWlsJ10sICRkZXRhaWxzWydzdWJqZWN0J10sIFtbW0NvbXBvbmVudF1dXUVtYWlsOjpzZXRUYWJsZUJvZHkoJGRldGFpbHNbJ2h0bWwnXSwgJGRldGFpbHNbJ3N1YmplY3QnXSksICcnLCAxLCBudWxsLCBudWxsLCBzZWxmOjokcmVwbHlFbWFpbCwgIHNlbGY6OiRyZXBseU5hbWUpKQ0KCQkJCXsNCgkJCQkJJGZpZWxkcyA9IGFycmF5KCk7DQoJCQkJCSRmaWVsZHNbXSA9ICRkYi0+cXVvdGVOYW1lKCdlbWFpbHNlbmQnKSAuICcgPSAwJzsgIC8vIHNldCB0byBlcnJvciBhcyBub3Qgc2VuZA0KCQkJCQlzZWxmOjokdXBkYXRlcltdICA9IGFycmF5KCdmaWVsZHMnID0+ICRmaWVsZHMsICdjb25kaXRpb25zJyA9PiBhcnJheSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAnIC4gJGRldGFpbHNbJ2lkJ10pKTsNCgkJCQkJLy8gcnVuIHVwZGF0ZSBpZiBtYW55IHZhbHVlcyBmb3VuZA0KCQkJCQlzZWxmOjp1cGRhdGVEYXRhKDEwKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBydW4gdXBkYXRlIG9uIGxhc3QgcmVtYWluaW5nIHZhbHVlcw0KCQkJc2VsZjo6dXBkYXRlRGF0YSgpOw0KCQkJLy8gY2xlYXIgdGhlIHZhbHVlcyBhcnJheQ0KCQkJc2VsZjo6JGNvbmZpcm1hdGlvbkVtYWlscyA9IGFycmF5KCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJT25jZSB0aGUgZW1haWwgd2FzIHNlbmQgdGhlIGdpdmVzIHVzIHRoZSBvcHRpb24gdGhlIHN0b3JlIHRoZSBtYXNzYWdlDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdG9yZU1lc3NhZ2UoJHNlbmRtYWlsLCAkcmVjaXBpZW50LCAkc3ViamVjdCwgJGJvZHksICR0ZXh0b25seSwgJG1vZGUsICR0eXBlKQ0KCXsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJKiAJdGhlIHVwZGF0ZXIgYXJyYXkNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICR1cGRhdGVyID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogCUdldCB0aGUgbGlzdCBvZiB1bi1lbWFpbGVkIGNvbmZpcm1hdGlvbnMgYW5kIGxvY2sgdGhlbQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uTmVlZGVkTGlzdCgkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJykNCgl7DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PSAkbWV0aG9kKQ0KCQl7DQoJCQkkZiA9ICdbcmVmZXJyYWxfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIGdldCB0aGUgbGlzdCBvZiB2YWx1ZXMgd2Ugd2FudCBmcm9tIGRiDQoJCSRzZWxlY3Rpb24gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ3JlZmVycmFsJywgJGYsICRiKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkc2VsZWN0aW9uKSwgYXJyYXlfdmFsdWVzKCRzZWxlY3Rpb24pKSk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24gdGFibGUuDQoJCSRxdWVyeS0+ZnJvbSgnI19fW1tbY29tcG9uZW50XV1dX2NvbmZpcm1hdGlvbiBBUyBhJyk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9jb3VudHJ5IHRhYmxlLg0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnYicpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdW50cnknKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2IuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EuZW1haWxzZW5kID0gMicpOw0KCQkkcXVlcnktPndoZXJlKCdhLmNvbmZpcm1lZCA9IDAnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCS8vIEdldCB0aGUgYmFzaWMgZW5jcnlwdGlvbi4NCgkJCSRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycsICdlcmpnNDM1OXdpZGN1amUzYXNhaWYwOXRidjk5aG93aWQwcmdmMDM4aGZob2RpOHdmb2VkJyk7IC8vIHdlIG11c3QgaGF2ZSBhIGtleSBoZXJlDQoJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJJGJhc2ljID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGJhc2lja2V5LCAxMjgpOw0KCQkJLy8gbG9hZCB0aGUgbGlzdCBvZiBleHBlcnRzIHRvIGNvbmZpcm0NCgkJCSRsaXN0ID0gJGRiLT5sb2FkQXNzb2NMaXN0KCk7DQoJCQlmb3JlYWNoICgkbGlzdCBhcyAkbnIgPT4gJHJlZmVyZW5jZSkNCgkJCXsNCgkJCQkkZmllbGRzID0gYXJyYXkoKTsNCgkJCQkkZmllbGRzW10gPSAkZGItPnF1b3RlTmFtZSgnZW1haWxzZW5kJykgLiAnID0gMSc7IC8vIGxvY2sgZG93biB0byBsb29rIGFzIHNlbmQgdG8ga2VlcCBtdWx0aSBlbWFpbHMgZnJvbSBiZWluZyBzZW5kDQoJCQkJc2VsZjo6JHVwZGF0ZXJbXSAgPSBhcnJheSgnZmllbGRzJyA9PiAkZmllbGRzLCAnY29uZGl0aW9ucycgPT4gYXJyYXkoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuICRyZWZlcmVuY2VbJGYuJ2lkJy4kYl0pKTsNCgkJCQkvLyBidWlsZCB0aGUgY29uZmlybWF0aW9uIGxpbmsNCgkJCQkkbGlzdFskbnJdWydbY29uZmlybWF0aW9uX2xpbmtdJ10gPSBzZWxmOjpnZXRDb25maXJtYXRpb25MaW5rKCRyZWZlcmVuY2UsIGFycmF5KCRmLCAkYiksICRiYXNpYyk7DQoJCQkJLy8gcnVuIHVwZGF0ZSBpZiBtYW55IHZhbHVlcyBmb3VuZA0KCQkJCXNlbGY6OnVwZGF0ZURhdGEoMTAwKTsNCgkJCX0NCgkJCS8vIHJ1biB1cGRhdGUgb24gbGFzdCByZW1haW5pbmcgdmFsdWVzDQoJCQlzZWxmOjp1cGRhdGVEYXRhKCk7DQoJCQkvLyByZXR1cm4gdGhlIGZvdW5kIGxpc3QNCgkJCXJldHVybiAkbGlzdDsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9YmFzZVNpeHR5Rm91clVSTF0NCgkvKioNCgkgKglUbyBsb2FkIHRoZSBhcHBsaWNhdGlvbiBmb3JtDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBcHBsaWNhdGlvbkZvcm0oJGRhdGEgPSBudWxsLCAkdHlwZSA9ICdleHBlcnQnLCAkYWNjZXNzID0gJ3B1YmxpYycpDQoJew0KCQkvLyBnZXQgZm9ybXMgcGF0aA0KCQkkcGF0aAk9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9tb2RlbHMvZm9ybXMnOw0KCQkvLyBidWlsZCBmdWxsIHBhdGggdG8gZmlsZQ0KCQkkZnVsbFBhdGggPSAkcGF0aC4nLycuJHR5cGUuJy54bWwnOw0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoZmlsZV9leGlzdHMoJGZ1bGxQYXRoKSkNCgkJew0KCQkJLy8gR2V0IHRoZSBmb3JtLg0KCQkJamltcG9ydCggJ2pvb21sYS5mb3JtLmZvcm0nICk7DQoJCQkvLyBzZXQgdGhlIHBhdGhzDQoJCQlKRm9ybTo6YWRkRm9ybVBhdGgoJHBhdGgpOw0KCQkJSkZvcm06OmFkZEZpZWxkUGF0aChKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vbW9kZWxzL2ZpZWxkcycpOw0KCQkJLy8gZ3JlYXQgd2UgYXJlIGRvbmUgcmV0dXJuIHJlc3VsdHMNCgkJCSRmb3JtID0gSkZvcm06OmdldEluc3RhbmNlKCdjb21fW1tbY29tcG9uZW50XV1dLicuJHR5cGUsICR0eXBlLCBhcnJheSgnY29udHJvbCcgPT4gJ2pmb3JtJywgJ2xvYWRfZGF0YScgPT4gZmFsc2UpLCBmYWxzZSwgZmFsc2UpOw0KCQkJLy8gY2hhbmdlIHRoZSBmb3JtIGZvciBwdWJsaWMgc3VibWlzc2lvbg0KCQkJaWYgKCdwdWJsaWMnID09ICRhY2Nlc3MpDQoJCQl7DQoJCQkJc2VsZjo6cHVibGljQXBwbGljYXRpb25Gb3JtKCRmb3JtLCAkdHlwZSk7DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgZGF0YQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJCXsNCgkJCQkkZm9ybS0+YmluZCgkZGF0YSk7DQoJCQl9DQoJCQlyZXR1cm4gJGZvcm07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGFwcGxpY2F0aW9uRmllbGRzID0gDQoJCWFycmF5KA0KCQkJJ2V4cGVydCcgPT4NCgkJCQlhcnJheSgNCgkJCQkJJ3JlbW92ZUZpZWxkcycgPT4NCgkJCQkJCWFycmF5KCdpZCcsJ2NyZWF0ZWQnLCdjcmVhdGVkX2J5JywncHVibGlzaGVkJywnbW9kaWZpZWQnLCdtb2RpZmllZF9ieScsJ2FjY2VzcycsJ29yZGVyaW5nJywndmVyc2lvbicsJ21ldGFrZXknLCdtZXRhZGVzYycsJ3VzZXInLCdhc3NldF9pZCcsJ3J1bGVzJyksDQoJCQkJCSdyZW1vdmVHcm91cHMnID0+DQoJCQkJCQlhcnJheSgnbWV0YWRhdGEnLCdhY2Nlc3Njb250cm9sJykNCgkJCQkpDQoJCSk7DQoNCgkvKioNCgkgKglNb2RlbCB0aGUgZm9ybSBmb3IgcHVibGkgc3VibWlzc2lvbg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcHVibGljQXBwbGljYXRpb25Gb3JtKCYkZm9ybSwgJHR5cGUpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXSkpDQoJCXsNCgkJCWlmIChpc3NldChzZWxmOjokYXBwbGljYXRpb25GaWVsZHNbJHR5cGVdWydyZW1vdmVGaWVsZHMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlRmllbGRzJ10pKQ0KCQkJew0KCQkJCS8vIGZpcnN0IHJlbW92ZSBhbGwgdW53YW50ZWQgZmllbGRzDQoJCQkJZm9yZWFjaCAoc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlRmllbGRzJ10gYXMgJGZpZWxkKQ0KCQkJCXsNCgkJCQkJJGZvcm0tPnJlbW92ZUZpZWxkKCRmaWVsZCk7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGlzc2V0KHNlbGY6OiRhcHBsaWNhdGlvbkZpZWxkc1skdHlwZV1bJ3JlbW92ZUdyb3VwcyddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokYXBwbGljYXRpb25GaWVsZHNbJHR5cGVdWydyZW1vdmVHcm91cHMnXSkpDQoJCQl7DQoJCQkJLy8gZmlyc3QgcmVtb3ZlIGFsbCB1bndhbnRlZCBmaWVsZHMNCgkJCQlmb3JlYWNoIChzZWxmOjokYXBwbGljYXRpb25GaWVsZHNbJHR5cGVdWydyZW1vdmVHcm91cHMnXSBhcyAkZ3JvdXApDQoJCQkJew0KCQkJCQkkZm9ybS0+cmVtb3ZlR3JvdXAoJGdyb3VwKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gYWRkIHRoZSB1c2VyIGZpZWxkcw0KCQlzZWxmOjphZGRVc2VyRmllbGRzKCRmb3JtKTsNCgl9DQoNCgkvKioNCgkgKglBZGQgdXNlciBmaWVsZHMgdG8gYXBwbGljYXRpb24NCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFkZFVzZXJGaWVsZHMoJiRmb3JtKQ0KCXsNCgkJLy8gd2UgbXVzdCBhZGQgc29tZSB1c2VyIGZpZWxkcw0KCQkkdXNlckZpZWxkcyA9DQoJCQlhcnJheSgNCgkJCQknbmFtZScgPT4NCgkJCQkJYXJyYXkoJ25hbWUnLCd1c2VybmFtZScsJ2VtYWlsJywncGFzc3dvcmQnLCdwYXNzd29yZDInLCAnY2FwdGNoYScpLA0KCQkJCSd0eXBlJyA9Pg0KCQkJCQlhcnJheSgndGV4dCcsJ3RleHQnLCdlbWFpbCcsJ3Bhc3N3b3JkJywncGFzc3dvcmQnLCdjYXB0Y2hhJyksDQoJCQkJJ2xhYmVsJyA9Pg0KCQkJCQlhcnJheShUZXh0OjpfKCdOYW1lJyksVGV4dDo6XygnVXNlcm5hbWUvTG9naW4tbmFtZScpLFRleHQ6Ol8oJ0VtYWlsJyksVGV4dDo6XygnUGFzc3dvcmQnKSxUZXh0OjpfKCdDb25maXJtIFBhc3N3b3JkJyksVGV4dDo6XygnUmVDYXB0Y2hhJykpLA0KCQkJCSdkZXNjcmlwdGlvbicgPT4NCgkJCQkJYXJyYXkoVGV4dDo6XygnWW91ciBGdWxsIE5hbWUnKSxUZXh0OjpfKCdTZXQgdGhlIHVzZXJuYW1lL2xvZ2luLW5hbWUgb2YgeW91ciBjaG9pY2UuJyksVGV4dDo6XygnWW91ciBFbWFpbCBBZGRyZXNzJyksVGV4dDo6XygnVXNlIGF0IGxlYXN0IDYgY2hhcmFjdGVycywgdXBwZXItY2FzZSBhbmQgbG93ZXItY2FzZSBsZXR0ZXIsIG51bWJlcnMgYW5kIGF0IGxlYXN0IG9uZSBzcGVjaWFsIGNoYXJhY3Rlci4nKSxUZXh0OjpfKCdDb25maXJtIFBhc3N3b3JkJyksVGV4dDo6XygnSnVzdCBjaGVja2luZyB0aGF0IHlvdXIgbm90IGEgcm9ib3QuJykpLA0KCQkJCSdoaW50JyA9Pg0KCQkJCQlhcnJheShUZXh0OjpfKCdFeHBlcnQgRnVsbCBOYW1lJyksIFRleHQ6Ol8oJ1VzZXJuYW1lJyksICd5b3VyQGVtYWlsLmNvbScsbnVsbCxudWxsLG51bGwpLA0KCQkJCSdjbGFzcycgPT4NCgkJCQkJYXJyYXkoJ3RleHRfYXJlYScsJ3RleHRfYXJlYScsJ3RleHRfYXJlYScsJ3RleHRfYXJlYScsJ3RleHRfYXJlYScsbnVsbCksDQoJCQkJJ3ZhbGlkYXRlJyA9Pg0KCQkJCQlhcnJheShudWxsLCBudWxsLCAnZW1haWwnLCBudWxsLCBudWxsLCAnY2FwdGNoYScpLA0KCQkJCSdmaWx0ZXInID0+DQoJCQkJCWFycmF5KCdzdHJpbmcnLCAnc3RyaW5nJywgJ2VtYWlsJywgbnVsbCwgbnVsbCxudWxsKSwNCgkJCQknZmllbGQnID0+DQoJCQkJCWFycmF5KG51bGwsIG51bGwsIG51bGwsICdwYXNzd29yZDInLCBudWxsLCBudWxsKQ0KCQkJKTsNCgkJJGFkZFJlQ2FwdGNoYSA9IEZhY3Rvcnk6OmdldENvbmZpZygpLT5nZXQoJ2NhcHRjaGEnKTsNCgkJLy8gbm93IGxvb3AgdGhlIGZpZWxkcyBhbmQgYWRkIHRvIGZvcm0NCgkJZm9yZWFjaCAoJHVzZXJGaWVsZHNbJ25hbWUnXSBhcyAkbnIgPT4gJG5hbWUpDQoJCXsNCgkJCS8vIGJ1aWxkIHRoZSBmaWVsZA0KCQkJJHhtbCA9IGFycmF5KCk7DQoJCQkvLyBvbmx5IGxvYWQgUmVDYXB0Y2hhIGlmIHR1cm5lZCBvbiBpbiBzeXN0ZW0NCgkJCWlmICgnY2FwdGNoYScgIT0gJG5hbWUgfHwgJGFkZFJlQ2FwdGNoYSkNCgkJCXsNCgkJCQkkeG1sW10gPSAnPGZpZWxkICc7DQoJCQkJJHhtbFtdID0gJ3R5cGU9IicuJHVzZXJGaWVsZHNbJ3R5cGUnXVskbnJdLiciICc7DQoJCQkJJHhtbFtdID0gJ25hbWU9IicuJG5hbWUuJyIgJzsNCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2xhYmVsJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdsYWJlbD0iJy4kdXNlckZpZWxkc1snbGFiZWwnXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snZGVzY3JpcHRpb24nXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2Rlc2NyaXB0aW9uPSInLiR1c2VyRmllbGRzWydkZXNjcmlwdGlvbiddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydjbGFzcyddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnY2xhc3M9IicuJHVzZXJGaWVsZHNbJ2NsYXNzJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJ2NhcHRjaGEnICE9ICRuYW1lKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ3JlcXVpcmVkPSJ0cnVlIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2ZpbHRlciddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnZmlsdGVyPSInLiR1c2VyRmllbGRzWydmaWx0ZXInXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1sndmFsaWRhdGUnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ3ZhbGlkYXRlPSInLiR1c2VyRmllbGRzWyd2YWxpZGF0ZSddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydmaWVsZCddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnZmllbGQ9IicuJHVzZXJGaWVsZHNbJ2ZpZWxkJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2hpbnQnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2hpbnQ9IicuJHVzZXJGaWVsZHNbJ2hpbnQnXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCSR4bWxbXSA9ICcvPic7DQoJCQkJLy8gc2V0IHRoZSBmaWVsZA0KCQkJCSRmb3JtLT5zZXRGaWVsZCggc2ltcGxleG1sX2xvYWRfc3RyaW5nKGltcGxvZGUoIlxuIiwgJHhtbCkpKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSogVGhpcyBjb25maXJtcyBleHBlcnRzDQoJKg0KCSogQHBhcmFtIHN0cmluZyB0aGUgYmFzZTY0IGVuY3J5cHRlZCBzdHJpbmcNCgkqDQoJKiBAcmV0dXJuICBib29sZWFuIGZhbHNlIG9uIGZhaWx1cmUNCgkqDQoJKiovCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29uZmlybUV4cGVydCgkYWN0aW9uKQ0KCXsNCgkJLy8gZXJyb3IgYXJyYXkgaWYgbmVlZGVkDQoJCSRlcnJvcnMgPSBhcnJheSgpOw0KCQkvLyBHZXQgdGhlIGJhc2ljIGVuY3J5cHRpb24uDQoJCSRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycsICdlcmpnNDM1OXdpZGN1amUzYXNhaWYwOXRidjk5aG93aWQwcmdmMDM4aGZob2RpOHdmb2VkJyk7IC8vIHdlIG11c3QgaGF2ZSBhIGtleSBoZXJlDQoJCS8vIEdldCB0aGUgZW5jcmlwdGlvbiBvYmplY3QuDQoJCSRvcGVuZXIgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcigkYmFzaWNrZXksIDEyOCk7DQoJCS8vIHdlIHRyeSB0byBvcGVuIGl0DQoJCWlmICgkcmVmZXJlbmNlID0ganNvbl9kZWNvZGUocnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZyhzZWxmOjpiYXNlNjRfdXJsZGVjb2RlKCRhY3Rpb24pKSwgIlwwIikpKQ0KCQl7DQoJCQlpZiAoaXNzZXQoJHJlZmVyZW5jZS0+aWQpKQ0KCQkJew0KCQkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCS8vIGdldCB2YWx1ZXMgaW4gZGF0YWJhc2UNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnZXhwZXJ0JywgJ25hbWUnLCAnZW1haWwnLCAnY29uZmlybWVkJykpKTsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24nKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAnLiAoaW50KSAkcmVmZXJlbmNlLT5pZCk7DQoJCQkJLy8gbm93IGdldCB0aGUgZGF0YQ0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQlpZiAoJGRiLT5leGVjdXRlKCkpDQoJCQkJew0KCQkJCQkkbG9jYWwgPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCQkJJHZlcmlmaWVkID0gZmFsc2U7CQkJDQoJCQkJCS8vIG5vdyBjaGVjayBpZiB0aGUgZGF0YSBpcyBzdGlsbCB0aGUgc2FtZQ0KCQkJCQlpZiAoJGxvY2FsLT5jb25maXJtZWQgPT0gMSkNCgkJCQkJew0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnVGhlIGRldGFpbHMgd2VyZSBhbHJlYWR5IHN1Y2Nlc3NmdWxseSB2ZXJpZmllZC4nKTsNCgkJCQkJCSR2ZXJpZmllZCA9IHRydWU7DQoJCQkJCX0NCgkJCQkJaWYgKCRsb2NhbC0+ZXhwZXJ0ICE9ICRyZWZlcmVuY2UtPmV4cGVydF9pZCkNCgkJCQkJew0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnVGhlIHdyb25nIGV4cGVydCB3YXMgc2VsZWN0ZWQuJyk7DQoJCQkJCX0NCgkJCQkJaWYgKCRsb2NhbC0+bmFtZSAhPSAkcmVmZXJlbmNlLT5uYW1lKQ0KCQkJCQl7DQoJCQkJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdZb3VyIG5hbWUgbm8gbG9uZ2VyIG1hdGNoIHRoZSBuYW1lIHdlIGhhdmUgb24gZmlsZS4nKTsNCgkJCQkJfQ0KCQkJCQlpZiAoJGxvY2FsLT5lbWFpbCAhPSAkcmVmZXJlbmNlLT5lbWFpbCkNCgkJCQkJew0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnWW91ciBlbWFpbCBubyBsb25nZXIgbWF0Y2ggdGhlIGVtYWlsIHdlIGhhdmUgb24gZmlsZS4nKTsNCgkJCQkJfQ0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9ycykpDQoJCQkJCXsNCgkJCQkJCWlmICghJHZlcmlmaWVkKQ0KCQkJCQkJew0KCQkJCQkJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1RoZXNlIGNoYW5nZXMgbWF5IGhhdmUgYmVlbiBtYWRlIGJ5IHRoZSBleHBlcnQgYWZ0ZXIgdGhlIGVtYWlsIHdhcyBzZW5kIHRvIHlvdS4nKTsNCgkJCQkJCX0NCgkJCQkJCS8vIHNldCB0aGUgZXJyb3INCgkJCQkJCXNlbGY6OnNldEVycm9yKDEsICRlcnJvcnMpOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJLy8gQ3JlYXRlIGFuIG9iamVjdCBmb3IgdGhlIHJlY29yZCB3ZSBhcmUgZ29pbmcgdG8gdXBkYXRlLg0KCQkJCQkJJG9iamVjdCA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkJCS8vIE11c3QgYmUgYSB2YWxpZCBwcmltYXJ5IGtleSB2YWx1ZS4NCgkJCQkJCSRvYmplY3QtPmlkID0gJHJlZmVyZW5jZS0+aWQ7DQoJCQkJCQkkb2JqZWN0LT5jb25maXJtZWQgPSAxOw0KDQoJCQkJCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgY29uZmlybWF0aW9uIHRhYmxlIHVzaW5nIGlkIGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJCQkJCWlmIChGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJywgJG9iamVjdCwgJ2lkJykpDQoJCQkJCQl7DQoJCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCQl9DQoJCQkJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdUaGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIHRoZSB2ZXJpZmljYXRpb24gcHJvc2VzLicpOw0KCQkJCQkJLy8gc2V0IHRoZSBlcnJvcg0KCQkJCQkJc2VsZjo6c2V0RXJyb3IoMSwgJGVycm9ycyk7DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJJGVycm9yc1tdID0gVGV4dDo6XygnWW91ciBsaW5rIGlzIG5vdCB2YWxpZC4nKTsNCgkJLy8gc2V0IHRoZSBlcnJvcg0KCQlzZWxmOjpzZXRFcnJvcigxLCAkZXJyb3JzKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogQnVpbGQgdGhlIGxpbmsgdXNlZCB0byBjb25maXJtIGV4cGVydCBkYXRhDQoJKg0KCSogQHBhcmFtIGFycmF5IHRoZSByZWZlcnJhbHMgZGV0YWlscw0KCSoNCgkqIEByZXR1cm4gIGJvb2xlYW4gZmFsc2Ugb24gZmFpbHVyZQ0KCSoNCgkqKi8JDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25maXJtYXRpb25MaW5rKCRyZWZlcmVuY2UsICRvdXQsIFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIgJGxvY2tlcikNCgl7DQoJCSRidWNrZXQgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRyZWZlcmVuY2UgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCSRhdEtleSA9IHN0cl9yZXBsYWNlKCRvdXQsICcnLCAka2V5KTsNCgkJCSRidWNrZXRbJGF0S2V5XSA9ICR2YWx1ZTsNCgkJfQ0KCQlyZXR1cm4gVXJpOjpyb290KCkuJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWNvbmZpcm0uZXhwZXJ0JmFjdGlvbj0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGxvY2tlci0+ZW5jcnlwdFN0cmluZyhqc29uX2VuY29kZSgkYnVja2V0KSkpOw0KCX0NCg0KCS8qKg0KCSogVXBkYXRlIHRoZSBkYXRhIGZyb20gdGhlIGZpbGUgdG8gdGhlIGRhdGFiYXNlDQoJKg0KCSogQHBhcmFtIGludCAgJHF0eSB0aGUgcXR5IGJlZm9yZSBkb2luZyBhbiB1cGRhdGUNCgkqIEBwYXJhbSBhcnJheSAgJHRhYmxlIFRoZSB0YWJsZSBiZWluZyB1cGRhdGVkDQoJKg0KCSogQHJldHVybiAgYm9vbGVhbiBmYWxzZSBvbiBmYWlsdXJlDQoJKg0KCSoqLwkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZURhdGEoJHF0eSA9IDEsICR0YWJsZSA9ICdjb25maXJtYXRpb24nKQ0KCXsNCgkJaWYgKGNvdW50KHNlbGY6OiR1cGRhdGVyKSA+PSAkcXR5KQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBkYXRhDQoJCQlmb3JlYWNoKHNlbGY6OiR1cGRhdGVyIGFzICR2YWx1ZSkNCgkJCXsNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCS8vIFByZXBhcmUgdGhlIHVwZGF0ZSBxdWVyeS4NCgkJCQkkcXVlcnktPnVwZGF0ZSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlKSkNCgkJCQkJLT5zZXQoJHZhbHVlWydmaWVsZHMnXSktPndoZXJlKCR2YWx1ZVsnY29uZGl0aW9ucyddKTsNCgkJCQkvLyBTZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0IGFuZCBleGVjdXRlIGl0Lg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCX0NCgkJCS8vIGNsZWFyIHRoZSB2YWx1ZXMgYXJyYXkNCgkJCXNlbGY6OiR1cGRhdGVyID0gYXJyYXkoKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4cGVydERpc3BsYXkoJiRpZCwgJHZpZXcgPSBudWxsLCAkdHlwZSA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCkNCgkJew0KCQkJLy8gcmVzZXQgdGhlIGRldGFpbHMgYXJyYXkNCgkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCS8vIGdldCB0aGUgY29tcGFueQ0KCQkJJGNvbXBhbnkgPSAgc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJyk7DQoJCQkvLyBnZXQgZW1haWwgdGVtcGxhdGUNCgkJCSR0ZW1wbGF0ZSA9IHNlbGY6OmdldFRlbXBsYXRlKCdleHBlcnRfcHJvZmlsZScpOw0KCQkJLy8gc2V0IGRvY3VtZW50IGhlYWRlciBhbmQgZm9vdGVyDQoJCQkkZG9jX2hlYWRlciA9IHNlbGY6OmdldFRlbXBsYXRlKCdkb2NfaGVhZGVyJyk7DQoJCQkkZG9jX2Zvb3RlciA9IHNlbGY6OmdldFRlbXBsYXRlKCdkb2NfZm9vdGVyJyk7DQoJCQkkZGV0YWlsc1tdID0gYXJyYXkoJ1tkb2N1bWVudF9oZWFkZXJdJyA9PiBzZWxmOjpzZXREeW5hbWljRGF0YSgkZG9jX2hlYWRlciwgJGNvbXBhbnkpLCAnW2RvY3VtZW50X2Zvb3Rlcl0nID0+IHNlbGY6OnNldER5bmFtaWNEYXRhKCRkb2NfZm9vdGVyLCAkY29tcGFueSkpOw0KCQkJLy8gbm93IGxldHMgZ2V0IHRoZSBjb21wYW55IGRldGFpbHMNCgkJCSRkZXRhaWxzW10gPSAkY29tcGFueTsNCgkJCS8vIGdldCB1c2VyIGFjY2VzcyByaWdodHMNCgkJCSR1c2VySXMgPSBzZWxmOjp1c2VySXMoKTsNCgkJCSRhY2Nlc3MgPSAncHVibGljJzsNCgkJCWlmICgkdXNlcklzID09IDIgfHwgJHVzZXJJcyA9PSAzKQ0KCQkJew0KCQkJCSRhY2Nlc3MgPSAnc3BlY2lhbCc7DQoJCQkJaWYgKCR1c2VySXMgPT0gMikgDQoJCQkJew0KCQkJCQkkZGV0YWlsc1tdID0gYXJyYXkoJ1tpc19vcmdhbmlzYXRpb25dJyA9PiAxKTsNCgkJCQl9DQoJCQkJZWxzZWlmICgkdXNlcklzID09IDMpDQoJCQkJew0KCQkJCQkkZGV0YWlsc1tdID0gYXJyYXkoJ1tpc19hZG1pbl0nID0+IDEpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoJHVzZXJJcyA9PSAxKQ0KCQkJew0KCQkJCWlmICgncHJvZmlsZScgPT0gJHZpZXcgJiYgMTk0OCA9PSAkdHlwZSkgLy8gd2hlbiBleHBlcnQgdmlld3Mgb3duIHByb2ZpbGUgKFRPRE8gbW9yZSBjaGVja3MgdG8gaW5zdXJlIGl0IGlzIHRydWUpDQoJCQkJew0KCQkJCQkkYWNjZXNzID0gJ2Z1bGwnOw0KCQkJCX0NCgkJCQkkZGV0YWlsc1tdID0gYXJyYXkoJ1tpc19leHBlcnRdJyA9PiAxKTsNCgkJCX0NCgkJCS8vIG5vdyBsZXRzIGdldCB0aGUgZXhwZXJ0IGRldGFpbHMNCgkJCSRkZXRhaWxzW10gPSBzZWxmOjpnZXRFeHBlcnREZXRhaWxzKCRpZCwgJ3BsYWNlaG9sZGVyJywgJGFjY2Vzcyk7DQoJCQkvLyBub3cgbWVyZSB2YWx1ZXMNCgkJCSRwbGFjZWhvbGRlcnMgPSBzZWxmOjptZXJnZUFycmF5cygkZGV0YWlscyk7DQoJCQlpZiAoJGJvZHkgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkdGVtcGxhdGUsICRwbGFjZWhvbGRlcnMpKQ0KCQkJew0KCQkJCXJldHVybiAkYm9keTsNCgkJCX0JCQkNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkZXhwZXJ0RGV0YWlscyA9IGFycmF5KCk7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeHBlcnREZXRhaWxzKCYkaWQsICRtZXRob2QgPSAnb2JqZWN0JywgJGFjY2VzcyA9ICdwdWJsaWMnKQ0KCXsNCgkJLy8gd2UgbmVlZCB0byBtYW5hZ2Ugc29tZSBtZW1vcnkgaGVyZQ0KCQlpZiAoY291bnQoc2VsZjo6JGV4cGVydERldGFpbHMpID49IDIwMCkNCgkJew0KCQkJLy8gcmVtb3ZlIGZpcnN0IDEwMCBmcm9tIG1lbW9yeQ0KCQkJZm9yZWFjaCAoc2VsZjo6JGV4cGVydERldGFpbHMgYXMgJHJlbW92ZSA9PiAkbm93KQ0KCQkJew0KCQkJCS8vIHJlbW92ZSB0aGUgZmlyc3QgdmFsdWVzIHRoYXQgd2FzIHNldA0KCQkJCXVuc2V0KHNlbGY6OiRleHBlcnREZXRhaWxzWyRyZW1vdmVdKTsNCgkJCQlpZiAoY291bnQoc2VsZjo6JGV4cGVydERldGFpbHMpIDw9IDEwMCkNCgkJCQl7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRleHBlcnREZXRhaWxzWyRpZC4kbWV0aG9kLiRhY2Nlc3NdKSkNCgkJew0KCQkJLy8gZ2V0IGV4cGVydCBkZXRhaWxzDQoJCQlzZWxmOjokZXhwZXJ0RGV0YWlsc1skaWQuJG1ldGhvZC4kYWNjZXNzXSA9IHNlbGY6OmdldEV4cGVydCgkaWQsICRtZXRob2QsICRhY2Nlc3MpOw0KCQl9DQoJCWlmICghaXNzZXQoc2VsZjo6JGV4cGVydERldGFpbHNbJGlkLiRtZXRob2QuJGFjY2Vzc10pKQ0KCQl7DQoJCQlzZWxmOjokZXhwZXJ0RGV0YWlsc1skaWQuJG1ldGhvZC4kYWNjZXNzXSA9IGZhbHNlOw0KCQl9DQoJCXJldHVybiBzZWxmOjokZXhwZXJ0RGV0YWlsc1skaWQuJG1ldGhvZC4kYWNjZXNzXTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRleHBlcnQgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiBHZXQgdGhlIA0KCSogDQoJKiBAcmV0dXJuICAgIGh0bWwgc3RyaW5nDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV4cGVydCgmJGlkLCAkbWV0aG9kID0gJ29iamVjdCcsICRhY2Nlc3MgPSAncHVibGljJykNCgl7DQoJCS8vIHdlIG5lZWQgdG8gbWFuYWdlIHNvbWUgbWVtb3J5IGhlcmUNCgkJaWYgKGNvdW50KHNlbGY6OiRleHBlcnQpID49IDEwMCkNCgkJew0KCQkJLy8gcmVtb3ZlIGZpcnN0IDUwIGZyb20gbWVtb3J5DQoJCQlmb3JlYWNoIChzZWxmOjokZXhwZXJ0IGFzICRyZW1vdmUgPT4gJG5vdykNCgkJCXsNCgkJCQkvLyByZW1vdmUgdGhlIGZpcnN0IHZhbHVlcyB0aGF0IHdhcyBzZXQNCgkJCQl1bnNldChzZWxmOjokZXhwZXJ0WyRyZW1vdmVdKTsNCgkJCQlpZiAoY291bnQoc2VsZjo6JGV4cGVydCkgPD0gNTApDQoJCQkJew0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJJGYgPSAnJzsNCgkJJGIgPSAnJzsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW2V4cGVydF8nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJaWYgKCFpc3NldChzZWxmOjokZXhwZXJ0WyRpZC4kbWV0aG9kLiRhY2Nlc3NdKSkNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJCSRzZWxlY3Rpb24gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ2V4cGVydCcsICRmLCAkYik7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRzZWxlY3Rpb24pLCBhcnJheV92YWx1ZXMoJHNlbGVjdGlvbikpKTsNCg0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2V4cGVydCB0YWJsZQ0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fZXhwZXJ0JywgJ2EnKSk7DQoNCgkJCS8vIEZyb20gdGhlIHVzZXJzIHRhYmxlLg0KCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX3VzZXJzJywgJ2cnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS51c2VyJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdnLmlkJykgLiAnKScpOw0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2NvdW50cnkgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnaCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdW50cnlyZXNpZGVuY2UnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2guaWQnKSAuICcpJyk7DQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fYXJlYV9vZl9leHBlcnRpc2UgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2FyZWFfb2ZfZXhwZXJ0aXNlJywgJ2knKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5hcmVhX29mX2V4cGVydGlzZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnaS5pZCcpIC4gJyknKTsNCgkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9jb3VudHJ5IHRhYmxlLg0KCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JywgJ2onKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5uYXRpb25hbGl0eScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnai5pZCcpIC4gJyknKTsNCgkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9hY2FkZW1pY19xdWFsaWZpY2F0aW9uIHRhYmxlLg0KCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9hY2FkZW1pY19xdWFsaWZpY2F0aW9uJywgJ2snKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5hY2FkZW1pY19xdWFsaWZpY2F0aW9uJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdrLmlkJykgLiAnKScpOw0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3ByZWZpeCB0YWJsZS4NCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcHJlZml4JywgJ3AnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5wcmVmaXgnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3AuaWQnKSAuICcpJyk7DQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fdGl0bGUgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3RpdGxlJywgJ3QnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS50aXRsZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgndC5pZCcpIC4gJyknKTsNCg0KCQkJJHF1ZXJ5LT53aGVyZSgnYS5pZCA9ICcuKGludCkgJGlkKTsNCgkJCS8vIG9ubHkgbG9hZCBjb25maXJtZWQgcHJvZmlsZXMgdG8gdGhlc2UgZ3JvdXBzDQoJCQlpZiAoJ3B1YmxpYycgPT0gJGFjY2VzcyB8fCAnc3BlY2lhbCcgPT0gJGFjY2VzcykNCgkJCXsNCgkJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uIHRhYmxlLg0KCQkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJywgJ2MnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnYy5leHBlcnQnKSAuICcpJyk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYy5jb25maXJtZWQgPSAxJyk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgdGhleSBoYXZlIGFjY2VzcyB0byB0aGlzIHByb2ZpbGUgYW5kIGl0IGlzIHB1Ymxpc2hlZA0KCQkJaWYgKCdwdWJsaWMnID09ICRhY2Nlc3MpDQoJCQl7DQoJCQkJJHVzZXIJPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCQkJJGxldmVscwk9ICR1c2VyLT5nZXRBdXRob3Jpc2VkVmlld0xldmVscygpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EuYWNjZXNzIElOICgnIC4gaW1wbG9kZSgnLCcsICRsZXZlbHMpIC4gJyknKTsNCgkJCX0NCg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJaWYgKCdvYmplY3QnID09ICRtZXRob2QpDQoJCQkJew0KCQkJCQlzZWxmOjokZXhwZXJ0WyRpZC4kbWV0aG9kLiRhY2Nlc3NdID0gc2VsZjo6bW9kZWxFeHBlcnQoJGRiLT5sb2FkT2JqZWN0KCksICRtZXRob2QsICRhY2Nlc3MsICRmLCAkYik7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10gPSBzZWxmOjptb2RlbEV4cGVydCgkZGItPmxvYWRBc3NvYygpLCAkbWV0aG9kLCAkYWNjZXNzLCAkZiwgJGIpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyByZXR1cm4gdGhlIHZhbHVlcw0KCQlpZiAoIWlzc2V0KHNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10pKQ0KCQl7DQoJCQlzZWxmOjokZXhwZXJ0WyRpZC4kbWV0aG9kLiRhY2Nlc3NdID0gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc107DQoJfQ0KDQoJLyoqDQoJKiBSZXR1cm4gYXJyYXkgb2Ygc2VsZWN0aW9ucw0KCSogDQoJKiBAcmV0dXJuICAgIGFycmF5IGlmIHR5cGUgbWF0Y2gNCgkqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0eXBlLCAkZiwgJGIpDQoJew0KCQlpZiAoJ2V4cGVydCcgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknZy5uYW1lJyA9PiAkZi4nbmFtZScuJGIsCQ0KCQkJCSdnLmVtYWlsJyA9PiAkZi4nZW1haWwnLiRiLA0KCQkJCSdoLm5hbWUnID0+ICRmLidjb3VudHJ5cmVzaWRlbmNlJy4kYiwNCgkJCQknaS5uYW1lJyA9PiAkZi4nYXJlYV9vZl9leHBlcnRpc2UnLiRiLA0KCQkJCSdhLmNpdHknID0+ICRmLidjaXR5Jy4kYiwNCgkJCQknYS5waG9uZScgPT4gJGYuJ3Bob25lJy4kYiwNCgkJCQknYS5zdW1tYXJ5JyA9PiAkZi4nc3VtbWFyeScuJGIsDQoJCQkJJ2EuYWRkcmVzcycgPT4gJGYuJ2FkZHJlc3MnLiRiLA0KCQkJCSdhLmN2a2V5JyA9PiAkZi4nY3ZsaW5rJy4kYiwNCgkJCQkncC5uYW1lJyA9PiAkZi4ncHJlZml4Jy4kYiwNCgkJCQknYS5tZW1iZXJzaGlwJyA9PiAkZi4nbWVtYmVyc2hpcCcuJGIsDQoJCQkJJ3QubmFtZScgPT4gJGYuJ3RpdGxlJy4kYiwNCgkJCQknYS5wcm9mZXNzaW9uJyA9PiAkZi4ncHJvZmVzc2lvbicuJGIsDQoJCQkJJ2EuZXhwZXJpZW5jZScgPT4gJGYuJ2V4cGVyaWVuY2UnLiRiLA0KCQkJCSdhLm1vYmlsZV9waG9uZScgPT4gJGYuJ21vYmlsZV9waG9uZScuJGIsDQoJCQkJJ2oubmFtZScgPT4gJGYuJ25hdGlvbmFsaXR5Jy4kYiwNCgkJCQknYS5vcmdhbmlzYXRpb24nID0+ICRmLidvcmdhbmlzYXRpb24nLiRiLA0KCQkJCSdrLm5hbWUnID0+ICRmLidhY2FkZW1pY19xdWFsaWZpY2F0aW9uJy4kYiwNCgkJCQknYS5zcGVjaWFsaXNhdGlvbicgPT4gJGYuJ3NwZWNpYWxpc2F0aW9uJy4kYiwNCgkJCQknYS53b3JrZWRfZm9yJyA9PiAkZi4nd29ya2VkX2ZvcicuJGIsDQoJCQkJJ2Eud2Vic2l0ZScgPT4gJGYuJ3dlYnNpdGUnLiRiLA0KCQkJCSdhLmdlb2dyYXBoaWNfZm9jdXMnID0+ICRmLidnZW9ncmFwaGljX2ZvY3VzJy4kYiwNCgkJCQknYS5wcm9mZXNzaW9uYWxfbmV0d29ya3MnID0+ICRmLidwcm9mZXNzaW9uYWxfbmV0d29ya3MnLiRiLA0KCQkJCSdhLnByaXZhY3lfYWNhZGVtaWNfcXVhbGlmaWNhdGlvbicgPT4gJGYuJ3ByaXZhY3lfYWNhZGVtaWNfcXVhbGlmaWNhdGlvbicuJGIsDQoJCQkJJ2EucHJpdmFjeV9hZGRyZXNzJyA9PiAkZi4ncHJpdmFjeV9hZGRyZXNzJy4kYiwNCgkJCQknYS5wcml2YWN5X2NpdHknID0+ICRmLidwcml2YWN5X2NpdHknLiRiLA0KCQkJCSdhLnByaXZhY3lfY291bnRyeXJlc2lkZW5jZScgPT4gJGYuJ3ByaXZhY3lfY291bnRyeXJlc2lkZW5jZScuJGIsDQoJCQkJJ2EucHJpdmFjeV9jdicgPT4gJGYuJ3ByaXZhY3lfY3ZsaW5rJy4kYiwNCgkJCQknYS5wcml2YWN5X21lbWJlcnNoaXAnID0+ICRmLidwcml2YWN5X21lbWJlcnNoaXAnLiRiLA0KCQkJCSdhLnByaXZhY3lfbW9iaWxlX3Bob25lJyA9PiAkZi4ncHJpdmFjeV9tb2JpbGVfcGhvbmUnLiRiLA0KCQkJCSdhLnByaXZhY3lfbmF0aW9uYWxpdHknID0+ICRmLidwcml2YWN5X25hdGlvbmFsaXR5Jy4kYiwNCgkJCQknYS5wcml2YWN5X29yZ2FuaXNhdGlvbicgPT4gJGYuJ3ByaXZhY3lfb3JnYW5pc2F0aW9uJy4kYiwNCgkJCQknYS5wcml2YWN5X3Bob25lJyA9PiAkZi4ncHJpdmFjeV9waG9uZScuJGIsDQoJCQkJJ2EucHJpdmFjeV9wcm9mZXNzaW9uJyA9PiAkZi4ncHJpdmFjeV9wcm9mZXNzaW9uJy4kYiwNCgkJCQknYS5wcml2YWN5X3Byb2Zlc3Npb25hbF9uZXR3b3JrcycgPT4gJGYuJ3ByaXZhY3lfcHJvZmVzc2lvbmFsX25ldHdvcmtzJy4kYiwNCgkJCQknYS5wcml2YWN5X3dvcmtlZF9mb3InID0+ICRmLidwcml2YWN5X3dvcmtlZF9mb3InLiRiDQoJCQkpOw0KCQl9DQoJCWlmICgncmVmZXJyYWwnID09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsDQoJCQkJJ2EuZXhwZXJ0JyA9PiAkZi4nZXhwZXJ0X2lkJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2Eub3JnYW5pc2F0aW9uJyA9PiAkZi4nb3JnYW5pc2F0aW9uJy4kYiwNCgkJCQknYS5wb3NpdGlvbicgPT4gJGYuJ3Bvc2l0aW9uJy4kYiwNCgkJCQknYi5uYW1lJyA9PiAkZi4nY291bnRyeScuJGIsDQoJCQkJJ2EuZW1haWwnID0+ICRmLidlbWFpbCcuJGINCgkJCSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogVGhlIG1vZGVsbGluZyBvZiBFeHBlcnQgZGF0YQ0KCSogDQoJKiBAcmV0dXJuICAgIG9iamVjdCBvZiBhbGxvd2VkIHZhbHVlcw0KCSovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBtb2RlbEV4cGVydCgkaXRlbSwgJiRtZXRob2QsICYkYWNjZXNzLCAmJGYsICYkYikNCgl7DQoJCS8vIGZpbGVyIGFsbCBwcml2YWN5IGluZm8gdGhhdCB0aGV5IHVzZXIgZG9lcyBub3Qgd2FudCBwdWJsaWMNCgkJaWYgKCdwdWJsaWMnID09ICRhY2Nlc3MpDQoJCXsNCgkJCWZvcmVhY2ggKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJew0KCQkJCWlmIChzdHJwb3MoJGtleSwgJGYuJ3ByaXZhY3lfJykgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJaWYgKCR2YWx1ZSA9PSAwKQ0KCQkJCQl7DQoJCQkJCQkvLyByZW1vdmUgZnJvbSBkYXRhIGl0IGlzIG5vdCBwdWJsaWMNCgkJCQkJCSR2YWx1ZUtleSA9IHN0cl9yZXBsYWNlKCdwcml2YWN5XycsICcnLCAka2V5KTsNCgkJCQkJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kKQ0KCQkJCQkJew0KCQkJCQkJCXVuc2V0KCRpdGVtLT4kdmFsdWVLZXkpOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCXVuc2V0KCRpdGVtWyR2YWx1ZUtleV0pOw0KCQkJCQkJfQ0KCQkJCQkJLy8gYWxzbyByZW1vdmUgdGhlIHByaXZhY3kgdmFsdWVzDQoJCQkJCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCkNCgkJCQkJCXsNCgkJCQkJCQl1bnNldCgkaXRlbS0+JGtleSk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJdW5zZXQoJGl0ZW1bJGtleV0pOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQkNCgkJCX0NCgkJfQ0KCQkvLyBHZXQgdGhlIGJhc2ljIGVuY3JpcHRpb24uDQoJCSRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycpOw0KCQkvLyBHZXQgdGhlIGVuY3JpcHRpb24gb2JqZWN0Lg0KCQkkYmFzaWMgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcigkYmFzaWNrZXksIDEyOCk7DQoJCS8vIG5vdCBmb3VuZCwgcmVtb3ZlDQoJCSRyZW1vdmVMaW5rID0gdHJ1ZTsNCgkJLy8gc3RhcnQgaW1wbGVtZW50YXRpb24gdG8gYnVpbGQgQ1YgbGluaw0KCQlpZiAoJGJhc2lja2V5ICYmICdvYmplY3QnID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0pKQ0KCQl7DQoJCQlpZiAoIWVtcHR5KCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9KSAmJiAhaXNfbnVtZXJpYygkaXRlbS0+eyRmLidjdmxpbmsnLiRifSkgJiYgJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0gPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaXRlbS0+eyRmLidjdmxpbmsnLiRifSwgdHJ1ZSkpKQ0KCQkJew0KCQkJCSRrZXkgPSBydHJpbSgkYmFzaWMtPmRlY3J5cHRTdHJpbmcoJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0pLCAiXDAiKTsNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGtleSkgJiYgIWlzX251bWVyaWMoJGtleSkpDQoJCQkJew0KCQkJCQkka2V5QXJyYXkgPSBleHBsb2RlKCcuJywgJGtleSk7DQoJCQkJCSRpdGVtLT57JGYuJ2N2bGluaycuJGJ9ID0gVXJpOjpyb290KCkuJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLnBkZiZ0b2tlbj0nLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4nJmZpbGU9JyAuICRrZXlBcnJheVswXSAuICcucGRmJzsNCgkJCQkJJHJlbW92ZUxpbmsgPSBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJZWxzZWlmICgkYmFzaWNrZXkgJiYgaXNzZXQoJGl0ZW1bJGYuJ2N2bGluaycuJGJdKSkNCgkJew0KCQkJaWYgKCFlbXB0eSgkaXRlbVskZi4nY3ZsaW5rJy4kYl0pICYmICFpc19udW1lcmljKCRpdGVtWyRmLidjdmxpbmsnLiRiXSkgJiYgJGl0ZW1bJGYuJ2N2bGluaycuJGJdID09PSBiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGl0ZW1bJGYuJ2N2bGluaycuJGJdLCB0cnVlKSkpDQoJCQl7DQoJCQkJJGtleSA9IHJ0cmltKCRiYXNpYy0+ZGVjcnlwdFN0cmluZygkaXRlbVskZi4nY3ZsaW5rJy4kYl0pLCAiXDAiKTsNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGtleSkgJiYgIWlzX251bWVyaWMoJGtleSkpDQoJCQkJew0KCQkJCQkka2V5QXJyYXkgPSBleHBsb2RlKCcuJywgJGtleSk7DQoJCQkJCSRpdGVtWyRmLidjdmxpbmsnLiRiXSA9IFVyaTo6cm9vdCgpLidpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1kb3dubG9hZC5wZGYmdG9rZW49Jy5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuJyZmaWxlPScgLiAka2V5QXJyYXlbMF0gLiAnLnBkZic7DQoJCQkJCSRyZW1vdmVMaW5rID0gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICgkcmVtb3ZlTGluaykNCgkJew0KCQkJaWYgKGlzc2V0KCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9KSkNCgkJCXsNCgkJCQl1bnNldCgkaXRlbS0+eyRmLidjdmxpbmsnLiRifSk7DQoJCQl9DQoJCQllbHNlaWYgKGlzc2V0KCRpdGVtWyRmLidjdmxpbmsnLiRiXSkpDQoJCQl7DQoJCQkJdW5zZXQoJGl0ZW1bJGYuJ2N2bGluaycuJGJdKTsNCgkJCX0NCgkJfQ0KCQkvLyBidWlsZCB0aGUgbmFtZQ0KCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCAmJiBpc3NldCgkaXRlbS0+eyRmLiduYW1lJy4kYn0pKQ0KCQl7DQoJCQkkdGl0bGUgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbS0+eyRmLid0aXRsZScuJGJ9KSkgPyAkaXRlbS0+eyRmLid0aXRsZScuJGJ9LicuICcgOiAoKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGl0ZW0tPnskZi4ncHJlZml4Jy4kYn0pKSA/ICRpdGVtLT57JGYuJ3ByZWZpeCcuJGJ9LicuICc6ICcnKTsNCgkJCSRpdGVtLT57JGYuJ25hbWUnLiRifSA9ICR0aXRsZS4kaXRlbS0+eyRmLiduYW1lJy4kYn07DQoJCQkvLyBhbHNvIHJlbW92ZSB0aXRsZSBhbmQgcHJlZml4DQoJCQl1bnNldCgkaXRlbS0+eyRmLidwcmVmaXgnLiRifSk7DQoJCQl1bnNldCgkaXRlbS0+eyRmLid0aXRsZScuJGJ9KTsNCgkJfQ0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PSAkbWV0aG9kICYmIGlzc2V0KCRpdGVtWyRmLiduYW1lJy4kYl0pKQ0KCQl7DQoJCQkkdGl0bGUgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbVskZi4ndGl0bGUnLiRiXSkpID8gJGl0ZW1bJGYuJ3RpdGxlJy4kYl0uJy4gJyA6ICgoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbVskZi4ncHJlZml4Jy4kYl0pKSA/ICRpdGVtWyRmLidwcmVmaXgnLiRiXS4nLiAnOiAnJyk7DQoJCQkkaXRlbVskZi4nbmFtZScuJGJdID0gJHRpdGxlLiRpdGVtWyRmLiduYW1lJy4kYl07DQoJCQkvLyBhbHNvIHJlbW92ZSB0aXRsZSBhbmQgcHJlZml4DQoJCQl1bnNldCgkaXRlbVskZi4ncHJlZml4Jy4kYl0pOw0KCQkJdW5zZXQoJGl0ZW1bJGYuJ3RpdGxlJy4kYl0pOw0KCQl9DQoJCS8vIGJ1aWxkIHRoZSBleHBlcmllbmNlDQoJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kICYmIGlzc2V0KCRpdGVtLT57JGYuJ2V4cGVyaWVuY2UnLiRifSkpDQoJCXsNCgkJCSR5ZWFycyA9ICgkaXRlbS0+eyRmLidleHBlcmllbmNlJy4kYn0gPT0gMSkgPyBUZXh0OjpfKCdZZWFyJyk6IFRleHQ6Ol8oJ1llYXJzJyk7DQoJCQkkaXRlbS0+eyRmLidleHBlcmllbmNlJy4kYn0gPSAkaXRlbS0+eyRmLidleHBlcmllbmNlJy4kYn0uJyAnLiR5ZWFyczsNCgkJfQ0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PSAkbWV0aG9kICYmIGlzc2V0KCRpdGVtWyRmLidleHBlcmllbmNlJy4kYl0pKQ0KCQl7DQoJCQkkeWVhcnMgPSAoJGl0ZW1bJGYuJ2V4cGVyaWVuY2UnLiRiXSA9PSAxKSA/IFRleHQ6Ol8oJ1llYXInKTogVGV4dDo6XygnWWVhcnMnKTsNCgkJCSRpdGVtWyRmLidleHBlcmllbmNlJy4kYl0gPSAkaXRlbVskZi4nZXhwZXJpZW5jZScuJGJdLicgJy4keWVhcnM7DQoJCX0NCgkJLy8gc2V0IHNwZWNpYWxpc2F0aW9uIGFuZCBnZW9ncmFwaGljX2ZvY3VzIHRvIHN0cmluZw0KCQkkdGFibGVzID0gYXJyYXkoJ3NwZWNpYWxpc2F0aW9uJywnZ2VvZ3JhcGhpY19mb2N1cycpOw0KCQlmb3JlYWNoICgkdGFibGVzIGFzICR0YWJsZSkNCgkJew0KCQkJaWYgKCdvYmplY3QnID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW0tPnskZi4kdGFibGUuJGJ9KSkNCgkJCXsNCgkJCQkkc3R1ZmYgPSBqc29uX2RlY29kZSgkaXRlbS0+eyRmLiR0YWJsZS4kYn0sdHJ1ZSk7DQoJCQkJJGxpbmUgPSBhcnJheSgpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc3R1ZmYpKQ0KCQkJCXsNCgkJCQkJJG5hYW0gPSAnJzsNCgkJCQkJZm9yZWFjaCAoJHN0dWZmIGFzICR2YWwpDQoJCQkJCXsNCgkJCQkJCWlmICgkbmFhbSA9IHNlbGY6OmdldFZhcigkdGFibGUsICR2YWwsICdpZCcsICduYW1lJykpDQoJCQkJCQl7DQoJCQkJCQkJJGxpbmVbXSA9ICRuYWFtOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChpc3NldCgkbGluZSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGxpbmUpKQ0KCQkJCXsNCgkJCQkJJGl0ZW0tPnskZi4kdGFibGUuJGJ9ID0gaW1wbG9kZSgnLCAnLCAkbGluZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXVuc2V0KCRpdGVtLT57JGYuJHRhYmxlLiRifSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmIChpc3NldCgkaXRlbVskZi4kdGFibGUuJGJdKSkNCgkJCXsNCgkJCQkkc3R1ZmYgPSBqc29uX2RlY29kZSgkaXRlbVskZi4kdGFibGUuJGJdLHRydWUpOw0KCQkJCSRsaW5lID0gYXJyYXkoKTsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHN0dWZmKSkNCgkJCQl7DQoJCQkJCSRuYWFtID0gJyc7DQoJCQkJCWZvcmVhY2ggKCRzdHVmZiBhcyAkdmFsKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJG5hYW0gPSBzZWxmOjpnZXRWYXIoJHRhYmxlLCAkdmFsLCAnaWQnLCAnbmFtZScpKQ0KCQkJCQkJew0KCQkJCQkJCSRsaW5lW10gPSAkbmFhbTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoaXNzZXQoJGxpbmUpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsaW5lKSkNCgkJCQl7DQoJCQkJCSRpdGVtWyRmLiR0YWJsZS4kYl0gPSBpbXBsb2RlKCcsICcsICRsaW5lKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5zZXQoJGl0ZW1bJGYuJHRhYmxlLiRiXSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIHJlbW92ZSAwIGFuZCByZXBsYWNlIHdpdGggZW1wdHkgc3RyaW5nDQoJCWlmICgncGxhY2Vob2xkZXInID09ICRtZXRob2QpDQoJCXsNCgkJCWZvcmVhY2ggKCRpdGVtIGFzICRrZXkgPT4gJiR2YWx1ZSkNCgkJCXsNCgkJCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR2YWx1ZSkpDQoJCQkJew0KCQkJCQkkdmFsdWUgPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRpdGVtOw0KCX0NCltDVVNUT01DT0RFPWdldENvbXBhbnlEZXRhaWxzXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPXVzZXJJc1RocmVlK2FkbWludXNlcixvcmdhbmlzYXRpb251c2VyLGV4cGVydHVzZXIsb3JnYW5pc2F0aW9uLGV4cGVydF0NCgkvKioNCgkqIAlUaGUgb3duZXINCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRvd25lciA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc0FjY2VzcygkcmVjb3JkSWQsICR1c2VySWQgPSBudWxsLCAkdG8gPSAnZXhwZXJ0JykNCgl7DQoJCWlmKCEkdXNlcklkKQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJfQ0KCQkkdHlwZSA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJaWYgKCR0eXBlICYmICRyZWNvcmRJZCA+IDApDQoJCXsNCgkJCXN3aXRjaCgkdG8pDQoJCQl7DQoJCQkJY2FzZSAnZXhwZXJ0JzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0V4cGVydCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdvcmdhbmlzYXRpb24nOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzT3JnYW5pc2F0aW9uKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc09yZ2FuaXNhdGlvbigkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbmlzYXRpb24gaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ29yZ2FuaXNhdGlvbicuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ29yZ2FuaXNhdGlvbicuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignb3JnYW5pc2F0aW9uJywgJHJlY29yZElkLCAnaWQnLCAndXNlcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ29yZ2FuaXNhdGlvbicuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0V4cGVydCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAxOiAvLyBjaGVjayBpZiBleHBlcnQgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2V4cGVydCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V4cGVydCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignZXhwZXJ0JywgJHJlY29yZElkLCAnaWQnLCAndXNlcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V4cGVydCcuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGNoZWNrIGNvbmZpcm1hdGlvbg0KCSoNCgkqIEBpbnB1dAkgIGludCAgICAgICAgICAgICAgICAgICAgICAgJGlkICAgICBUaGUgZGF0YSBpZA0KCSogQGlucHV0CSAgYXJyYXkgICAgICAgICAgICAgICAgICAgJGRhdGEgICAgIFRoZSB2YWxpZCBkYXRhDQoJKg0KCSogQHJldHVybnMgIGJvb2xlYW4gb24gc3VjY2Vzcw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tDb25maXJtYXRpb24oJGlkLCAmJGRhdGEpDQoJew0KCQkkdXBkYXRlRGF0YSA9IGFycmF5KCk7DQoJCS8vIGxvYWQgdGhlIHJlZmVyZW5jZSBkYXRhIGlmIHNldA0KCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ3JlZmVyZW5jZSddKSkNCgkJew0KCQkJJHJlZmVyZW5jZSA9IGpzb25fZGVjb2RlKCRkYXRhWydyZWZlcmVuY2UnXSx0cnVlKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBjb25maXJtYXRpb24gZGF0YSBzZXQNCgkJaWYgKCRjb25maXJtYXRpb24gPSBzZWxmOjpnZXRDb25maXJtYXRpb24oJGlkKSkNCgkJew0KCQkJLy8gdGhlcmUgaXMgYW55IHJlZmVyZW5jZSBkYXRhIHNldA0KCQkJaWYgKGlzc2V0KCRyZWZlcmVuY2UpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ2VtYWlsJ10pKQ0KCQkJew0KCQkJCS8vIHdlIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGUgZGF0YSBpZiB0aGUgZW1haWwgY2hhbmdlZA0KCQkJCWlmICgJJHJlZmVyZW5jZVsnZW1haWwnXVswXSAhPT0gJGNvbmZpcm1hdGlvblsnZW1haWwnXSB8fA0KCQkJCQkkcmVmZXJlbmNlWydvcmdhbmlzYXRpb25fcmVmJ11bMF0gIT09ICRjb25maXJtYXRpb25bJ29yZ2FuaXNhdGlvbiddIHx8DQoJCQkJCSRyZWZlcmVuY2VbJ25hbWUnXVswXSAhPT0gJGNvbmZpcm1hdGlvblsnbmFtZSddIHx8DQoJCQkJCSRyZWZlcmVuY2VbJ3Bob25lJ11bMF0gIT09ICRjb25maXJtYXRpb25bJ3Bob25lJ10gfHwNCgkJCQkJJHJlZmVyZW5jZVsiY291bnRyeSJdWzBdICE9PSAkY29uZmlybWF0aW9uWydjb3VudHJ5J10gIHx8DQoJCQkJCSRyZWZlcmVuY2VbInBvc2l0aW9uIl1bMF0gIT09ICRjb25maXJtYXRpb25bJ3Bvc2l0aW9uJ10NCgkJCQkJKQ0KCQkJCXsNCgkJCQkJaWYgKChpc3NldCgkY29uZmlybWF0aW9uWydjb25maXJtZWQnXSkgJiYgJGNvbmZpcm1hdGlvblsnY29uZmlybWVkJ10gPT0gMSkgfHwgKCFzZWxmOjp1cGRhdGVDb25maXJtYXRpb24oJGlkLCAkcmVmZXJlbmNlLCAkZGF0YSkpKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgdGhlIHJlZmVyZW5jZSBkYXRhIGJhY2sgZW4gbG9hZCBlcnJvcg0KCQkJCQkJJHJlZmVyZW5jZVsib3JnYW5pc2F0aW9uX3JlZiJdWzBdID0gJGNvbmZpcm1hdGlvblsnb3JnYW5pc2F0aW9uJ107DQoJCQkJCQkkcmVmZXJlbmNlWyJuYW1lIl1bMF0gPSAkY29uZmlybWF0aW9uWyduYW1lJ107DQoJCQkJCQkkcmVmZXJlbmNlWyJlbWFpbCJdWzBdID0gJGNvbmZpcm1hdGlvblsnZW1haWwnXTsNCgkJCQkJCSRyZWZlcmVuY2VbInBob25lIl1bMF0gPSAkY29uZmlybWF0aW9uWydwaG9uZSddOw0KCQkJCQkJJHJlZmVyZW5jZVsicG9zaXRpb24iXVswXSA9ICRjb25maXJtYXRpb25bJ3Bvc2l0aW9uJ107DQoJCQkJCQkkcmVmZXJlbmNlWyJjb3VudHJ5Il1bMF0gPSAkY29uZmlybWF0aW9uWydjb3VudHJ5J107DQoJCQkJCQkvLyB1cGRhdGUgdGhlIHJlZmVyZW5jZSBkYXRhDQoJCQkJCQlzZWxmOjp1cGRhdGVSZWZlcmVuY2VEYXRhKCRpZCwganNvbl9lbmNvZGUoJHJlZmVyZW5jZSkpOw0KCQkJCQkJLy8gc2V0IHRoZSB3YXJuaW5nIG5vdGljZSBzaW5jZSBub3QgcmVmZXJyYWwgd2FzIHNldA0KCQkJCQkJaWYgKGlzc2V0KCRjb25maXJtYXRpb25bJ2NvbmZpcm1lZCddKSAmJiAkY29uZmlybWF0aW9uWydjb25maXJtZWQnXSA9PSAxKQ0KCQkJCQkJew0KCQkJCQkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IGNhbm5vdCBkZWxldGUgb3IgY2hhbmdlIHRoaXMgZmlyc3QgcmVmZXJlbmNlIHBlcnNvbiBkZXRhaWxzIGFmdGVyIHRoaXMgcGVyc29uIGhhcyB2ZXJpZmllZCB5b3VyIGluZm9ybWF0aW9uLCB1bmxlc3MgeW91IGNvbnRhY3Qgc3VwcG9ydCB3aXRoIHRoZSByZWFzb25zIGZvciBkb2luZyBzby4nKTsNCgkJCQkJCX0NCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJCS8vIHNldCB0aGUgcmVmZXJlbmNlIGRhdGEgYmFjayBlbiBsb2FkIGVycm9yDQoJCQkkdXBkYXRlRGF0YVsib3JnYW5pc2F0aW9uX3JlZiJdW10gPSAkY29uZmlybWF0aW9uWydvcmdhbmlzYXRpb24nXTsNCgkJCSR1cGRhdGVEYXRhWyJuYW1lIl1bXSA9ICRjb25maXJtYXRpb25bJ25hbWUnXTsNCgkJCSR1cGRhdGVEYXRhWyJlbWFpbCJdW10gPSAkY29uZmlybWF0aW9uWydlbWFpbCddOw0KCQkJJHVwZGF0ZURhdGFbInBob25lIl1bXSA9ICRjb25maXJtYXRpb25bJ3Bob25lJ107DQoJCQkkdXBkYXRlRGF0YVsicG9zaXRpb24iXVtdID0gJGNvbmZpcm1hdGlvblsncG9zaXRpb24nXTsNCgkJCSR1cGRhdGVEYXRhWyJjb3VudHJ5Il1bXSA9ICRjb25maXJtYXRpb25bJ2NvdW50cnknXTsNCgkJCS8vIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIGRhdGENCgkJCXNlbGY6OnVwZGF0ZVJlZmVyZW5jZURhdGEoJGlkLCBqc29uX2VuY29kZSgkdXBkYXRlRGF0YSkpOw0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgY2Fubm90IGRlbGV0ZSBvciBjaGFuZ2UgdGhpcyBmaXJzdCByZWZlcmVuY2UgcGVyc29uIGRldGFpbHMgYWZ0ZXIgdGhpcyBwZXJzb24gaGFzIHZlcmlmaWVkIHlvdXIgaW5mb3JtYXRpb24sIHVubGVzcyB5b3UgY29udGFjdCBzdXBwb3J0IHdpdGggdGhlIHJlYXNvbnMgZm9yIGRvaW5nIHNvLicpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vIHRoZXJlIGlzIGFueSByZWZlcmVuY2UgZGF0YSBzZXQNCgkJaWYgKGlzc2V0KCRyZWZlcmVuY2UpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ2VtYWlsJ10pKQ0KCQl7DQoJCQlpZiAoc2VsZjo6c2V0Q29uZmlybWF0aW9uKCRpZCwgJHJlZmVyZW5jZSwgJGRhdGEpKQ0KCQkJew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCS8vIHNldCB0aGUgd2FybmluZyBub3RpY2Ugc2luY2Ugbm90IHJlZmVycmFsIHdhcyBzZXQNCgkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3VyIGFjY291bnQgd2lsbCBub3QgYmUgYWN0aXZhdGVkLiBJdCBpcyBtYW5kYXRvcnkgdG8gYWRkIGF0IGxlYXN0IG9uZSByZWZlcmVuY2UgcGVyc29uIGluIG9yZGVyIHRvIHZlcmlmeSB0aGUgaW5mb3JtYXRpb24geW91IHByb3ZpZGVkLicpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiB1cGRhdGUgUmVmZXJlbmNlIERhdGENCgkqDQoJKiBAaW5wdXQJICBpbnQgICAgICAgICRpZCAgICAgVGhlIGV4cGVydCBpZA0KCSogQGlucHV0CSAgc3RyaW5nICAgICAgICAkcmVmZXJlbmNlICAgICBUaGUgcmVmZXJlbmNlIGpzb24NCgkqDQoJKiBAcmV0dXJucyAgYm9vbCBvbiBzdWNjZXNzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVSZWZlcmVuY2VEYXRhKCRpZCwgJHZhbHVlLCAkdGFyZ2V0ID0gInJlZmVyZW5jZSIpDQoJewkJDQoJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJJG9iamVjdCA9IG5ldyBcc3RkQ2xhc3MoKTsNCiANCgkJLy8gTXVzdCBiZSBhIHZhbGlkIHByaW1hcnkga2V5IHZhbHVlLg0KCQkkb2JqZWN0LT5pZCA9ICRpZDsNCgkJJG9iamVjdC0+JHRhcmdldCA9ICR2YWx1ZTsNCiANCgkJLy8gVXBkYXRlIHRoZWlyIGRldGFpbHMgaW4gdGhlIGV4cGVydCB0YWJsZSB1c2luZyBpZCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCXJldHVybiBGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fZXhwZXJ0JywgJG9iamVjdCwgJ2lkJyk7DQoJfQ0KDQoJLyoqDQoJKiBnZXQgY29uZmlybWF0aW9uDQoJKg0KCSogQGlucHV0CSAgaW50ICAgICAgICAkaWQgICAgIFRoZSBleHBlcnQgaWQNCgkqDQoJKiBAcmV0dXJucyAgb2JqZWN0IGlmIGZvdW5kDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25maXJtYXRpb24oJGlkKQ0KCXsJCQ0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJ2EuKicpOw0KCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24gQVMgYScpOw0KCQkkcXVlcnktPndoZXJlKCdhLmV4cGVydCA9ICcuIChpbnQpICRpZCk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkQXNzb2MoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiB1cGRhdGUgY29uZmlybWF0aW9uDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVDb25maXJtYXRpb24oJGlkLCAkcmVmZXJlbmNlLCAmJGRhdGEpDQoJew0KCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggZGF0YSBhbmQgdGhhdCBpdCBpcyBjb3JyZWN0DQoJCSRtYWlsID0gRmFjdG9yeTo6Z2V0TWFpbGVyKCk7DQoJCSR1cGRhdGUgPSB0cnVlOw0KCQlpZiAoISRtYWlsLT5WYWxpZGF0ZUFkZHJlc3MoJHJlZmVyZW5jZVsnZW1haWwnXVswXSkpDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gJHJlZmVyZW5jZVsnZW1haWwnXVswXSAuICcgJyAuIFRleHQ6Ol8oJ2lzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIDxiPihSZWZlcmVuY2VzIEVSUk9SISk8L2I+Jyk7DQoJCQkkdXBkYXRlID0gZmFsc2U7DQoJCX0NCgkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcmVmZXJlbmNlWyduYW1lJ11bMF0pKQ0KCQl7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdSBuZWVkIHRvIGFkZCByZWZlcmVuY2UgbmFtZS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ29yZ2FuaXNhdGlvbl9yZWYnXVswXSkpDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IG5lZWQgdG8gYWRkIHJlZmVyZW5jZSBvcmdhbmlzYXRpb24gbmFtZS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoIWlzc2V0KCRyZWZlcmVuY2VbJ2NvdW50cnknXVswXSkgfHwgJHJlZmVyZW5jZVsnY291bnRyeSddWzBdIDw9IDApDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IG5lZWQgdG8gYWRkIHJlZmVyZW5jZSBjb3VudHJ5LiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHVwZGF0ZSA9IGZhbHNlOw0KCQl9DQoJCWlmICgkdXBkYXRlKQ0KCQl7DQoJCQkvLyBDcmVhdGUgYW4gb2JqZWN0IGZvciB0aGUgcmVjb3JkIHdlIGFyZSBnb2luZyB0byB1cGRhdGUuDQoJCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJLy8gTXVzdCBiZSBhIHZhbGlkIHByaW1hcnkga2V5IHZhbHVlLg0KCQkJJG9iamVjdC0+ZXhwZXJ0ID0gJGlkOw0KCQkJJG9iamVjdC0+b3JnYW5pc2F0aW9uID0gJHJlZmVyZW5jZVsnb3JnYW5pc2F0aW9uX3JlZiddWzBdOw0KCQkJJG9iamVjdC0+bmFtZSA9ICRyZWZlcmVuY2VbJ25hbWUnXVswXTsNCgkJCSRvYmplY3QtPmVtYWlsID0gJHJlZmVyZW5jZVsnZW1haWwnXVswXTsNCgkJCSRvYmplY3QtPnBob25lID0gJHJlZmVyZW5jZVsncGhvbmUnXVswXTsNCgkJCSRvYmplY3QtPnBvc2l0aW9uID0gJHJlZmVyZW5jZVsncG9zaXRpb24nXVswXTsNCgkJCSRvYmplY3QtPmNvdW50cnkgPSAoaW50KSAkcmVmZXJlbmNlWydjb3VudHJ5J11bMF07DQoJCQkkb2JqZWN0LT5lbWFpbHNlbmQgPSAyOw0KDQoJCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgZXhwZXJ0IHRhYmxlIHVzaW5nIGV4cGVydCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQlyZXR1cm4gRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX2NvbmZpcm1hdGlvbicsICRvYmplY3QsICdleHBlcnQnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgY29uZmlybWF0aW9uDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRDb25maXJtYXRpb24oJGlkLCAkcmVmZXJlbmNlLCAmJGRhdGEpDQoJew0KCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggZGF0YSBhbmQgdGhhdCBpdCBpcyBjb3JyZWN0DQoJCSRtYWlsID0gRmFjdG9yeTo6Z2V0TWFpbGVyKCk7DQoJCSRzdG9yZSA9IHRydWU7DQoJCWlmICghJG1haWwtPlZhbGlkYXRlQWRkcmVzcygkcmVmZXJlbmNlWydlbWFpbCddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSAkcmVmZXJlbmNlWydlbWFpbCddWzBdIC4gJyAnIC4gVGV4dDo6XygnaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcy4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSRzdG9yZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnbmFtZSddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIG5hbWUuIDxiPihSZWZlcmVuY2VzIEVSUk9SISk8L2I+Jyk7DQoJCQkkc3RvcmUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ29yZ2FuaXNhdGlvbl9yZWYnXVswXSkpDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IG5lZWQgdG8gYWRkIHJlZmVyZW5jZSBvcmdhbmlzYXRpb24gbmFtZS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSRzdG9yZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghaXNzZXQoJHJlZmVyZW5jZVsnY291bnRyeSddWzBdKSB8fCAkcmVmZXJlbmNlWydjb3VudHJ5J11bMF0gPD0gMCkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIGNvdW50cnkuIDxiPihSZWZlcmVuY2VzIEVSUk9SISk8L2I+Jyk7DQoJCQkkc3RvcmUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoJHN0b3JlKQ0KCQl7DQoJCQkvLyBDcmVhdGUgYW4gb2JqZWN0IGZvciB0aGUgcmVjb3JkIHdlIGFyZSBnb2luZyB0byB1cGRhdGUuDQoJCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJLy8gTXVzdCBiZSBhIHZhbGlkIHByaW1hcnkga2V5IHZhbHVlLg0KCQkJJG9iamVjdC0+ZXhwZXJ0ID0gJGlkOw0KCQkJJG9iamVjdC0+b3JnYW5pc2F0aW9uID0gJHJlZmVyZW5jZVsnb3JnYW5pc2F0aW9uX3JlZiddWzBdOw0KCQkJJG9iamVjdC0+bmFtZSA9ICRyZWZlcmVuY2VbJ25hbWUnXVswXTsNCgkJCSRvYmplY3QtPmVtYWlsID0gJHJlZmVyZW5jZVsnZW1haWwnXVswXTsNCgkJCSRvYmplY3QtPnBob25lID0gJHJlZmVyZW5jZVsncGhvbmUnXVswXTsNCgkJCSRvYmplY3QtPnBvc2l0aW9uID0gJHJlZmVyZW5jZVsncG9zaXRpb24nXVswXTsNCgkJCSRvYmplY3QtPmNvdW50cnkgPSAoaW50KSAkcmVmZXJlbmNlWydjb3VudHJ5J11bMF07DQoJCQkkb2JqZWN0LT5lbWFpbHNlbmQgPSAyOw0KDQoJCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgZXhwZXJ0IHRhYmxlIHVzaW5nIGlkIGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJCXJldHVybiBGYWN0b3J5OjpnZXREYm8oKS0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJywgJG9iamVjdCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPWhlbHBlckVycm9yc10=', 'CS8qKg0KCSogCUxvYWQgdGhlIENvbmZpcm1hdGlvbiBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDb25maXJtYXRpb25BamF4KCRkb2N1bWVudCkNCgl7DQoJCS8vIGFkZCBhbiBldmVudCB0aGF0IHdpbGwgc2VuZCBvdXQgYWxsIGNvbmZpcm1hdGlvbiBlbWFpbHMsIG5vdCB5ZXQgc2VuZA0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJc2VuZENvbmZpcm1hdGlvbkVtYWlscygxKTsNCgkJCX0pOw0KCQkJDQoJCQlmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKHR5cGUpIHsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguc2VuZENvbmZpcm1hdGlvbkVtYWlscyZmb3JtYXQ9anNvbic7DQoJCQkJaWYodHlwZSA+IDApew0KCQkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnR5cGU9Jyt0eXBlOw0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnUE9TVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0iKTsNCgl9', '', '', '', '', '', 'CQlzZWxmOjpsb2FkQ29uZmlybWF0aW9uQWpheCgkZG9jdW1lbnQpOw==', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Expert Database', '', '', 'Expert Database (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/expertdatabase_update_server.xml', 'http://www.vdm.io', '', '+0F3f7K0ampGK9b6ZYmR+QGwNik51oBRG+Mail7kHsJ3c4Td3MPUUp290mkpqjm2FElXcGch52OM0I19xHtStQ==', 'https://www.vdm.io/access/', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 221, '', 1, 60),
(25, '', '', '', '', '', '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', 1, '', '', '', '', 1, '{}', '', 1, 1, 3, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '2.1.0', 'Copyright (C) 2015. All Rights Reserved', '2016-10-18 11:44:09', '', 'mvVkzmHCEIoBhzD3gR3uTzXRGwNVNRWw8Hr1vrXxb+I=', 'BbloLSYT6Yup6v3I/YNmrdOwzjbI4BGfDvJSB82N9DU=', '', 'VtSt2RMz+AHCrwc7jk1G70t83ZwZsNp2upqfzMyaVHE=', '', '', '', 1, '', 'Just a basic demo of the most basic implementations of the [Joomla](http://www.joomla.org) Component Builder\'s ability.', 'joomla@vdm.io', '', '', 'nZDegSPK87rXA4KMC6P8I6zEldjVIJpPYGRPZlKBI+U=', '', 'efde995e-60aa-4b39-b644-44349dfb660d', 'images/vdm/demo500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Demo-Component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-01-19 11:57:08', '', 'Demo', 'demo', 'JCB', 4, '', '', '', 'CS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGZhbmN5IGRhdGUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RGF0ZSgkZGF0ZSkNCgl7DQoJCWlmICghc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkZGF0ZSkpDQoJCXsNCgkJCSRkYXRlID0gc3RydG90aW1lKCRkYXRlKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnalMgXG9cZiBGIFknLCRkYXRlKTsNCgl9DQoNCgkvKioNCgkgKglDaGFuZ2UgdG8gbmljZSBmYW5jeSB0aW1lIGFuZCBkYXRlDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeURhdGVUaW1lKCR0aW1lKQ0KCXsNCgkJaWYgKCFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCR0aW1lKSkNCgkJew0KCQkJJHRpbWUgPSBzdHJ0b3RpbWUoJHRpbWUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCcoRzppKSBqUyBcb1xmIEYgWScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGhvdXI6bWludXRlcyB0aW1lDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeVRpbWUoJHRpbWUpDQoJew0KCQlpZiAoIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJHRpbWUpKQ0KCQl7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgkdGltZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ0c6aScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIHRpbWUgc3RhbXANCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWRUaW1lU3RhbXAoJHRpbWVzdGFtcCkNCgl7DQoJCXJldHVybiAoKGludCkgJHRpbWVzdGFtcCA9PT0gJHRpbWVzdGFtcCkNCgkJJiYgKCR0aW1lc3RhbXAgPD0gUEhQX0lOVF9NQVgpDQoJCSYmICgkdGltZXN0YW1wID49IH5QSFBfSU5UX01BWCk7DQoJfQ0K', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnVGhpcyBpcyBhIGRlbW8gY29tcG9uZW50IGRldmVsb3BlZCBpbiA8YSBocmVmPSJodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyIiB0YWdldD0iX2JhbG5rIiB0aXRsZT0iSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIj5KQ0I8L2E+ISBZb3UgY2FuIGJ1aWxkIG1vcmUgY29tcG9uZW50cyBsaWtlIHRoaXMgd2l0aCBKQ0IsIGNoZWNrb3V0IG91ciBwYWdlIG9uIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyIiB0YWdldD0iX2JhbG5rIiB0aXRsZT0iSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIj5naXRodWI8L2E+IGZvciBtb3JlIGluZm8uIFRoZSBmdXR1cmUgb2YgPGEgaHJlZj0iaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlciIgdGFnZXQ9Il9iYWxuayIgdGl0bGU9Ikpvb21sYSBDb21wb25lbnQgQnVpbGRlciI+Sm9vbWxhIENvbXBvbmVudCBEZXZlbG9wbWVudDwvYT4gaXMgSGVyZSEnLCAnSW5mbycpOw==', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25hbWliaWEvZGVtby1qb29tbGEtMy1jb21wb25lbnQvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvdmRtLWNvbXBvbmVudC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCltDVVNUT01DT0RFPXJlYWRNRWNvbnRyaWJ1dG9yc10=', '', '', 'Demo Component', '', '', 'Demo (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/namibia/demo-joomla-3-component/master/demo_updateserver.xml', 'https://www.vdm.io/', '', '6GeGhXcYZEQosGCi0ZXeuAj3oXBwARl7OnRm9h3rxPQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 54, '', 1, 10),
(26, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.5', 'Copyright (C) 2015. All Rights Reserved', '2016-10-18 11:44:09', '', 'V57IYyl69MoRbHvbC+yMIgFWIddrGmkXyPSp1h92rwI=', 'S6GyJe2D2H9ZYjSpC3AQucfZQLo6Dh+PwMvHmOTXgaE=', '', 'awUIYFU9kVsk5AJjwLVFX+F3goHgHrjjKrcQiXnn3k0=', '', '', 'A_110', 2, '', 'Just a basic Notice Board.', 'info@vdm.io', '', '', 'UNL4cGpxdFD7CctzvGO1ixIUs28WPZKXLEcrp9+GXNHbF4gQux3b2G7AqI2n+AxprTYcmla/cEn2C72BdnAvAw==', '', 'c327d3ae-57a4-4403-817d-6f1c694b4b29', 'images/demo300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2021-05-16 15:19:34', '', 'Notice Board', 'noticeboard', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Notice Board', '', '', 'Notice Board', '.git', '', '', 1, '', 'https://www.vdm.io/', '', 'lmEbDzExkqR4uqaWVPEL/ysXmPo6eNVDGOYmP3V3zb0=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 49, '', 1, 9),
(27, '', '', '', '', '', '', '', '', 1, '', 1, '', 1, '', '', '', '', '', '', 1, '', '', '', '', 1, '', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.1', 'Copyright (C) 2015. All Rights Reserved', '2016-10-24 02:49:33', '', '', '', '', '', '', '', '', 1, 1, 'Expert Database component adds the ability to your Joomla to manage various experts and their related details.', 'llewellyn@vdm.io', '', '', '', '', 'f051c1f2-cedb-41e4-bd3c-3cc0cd594979', 'images/expertdatabase.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2016-10-12 09:25:30', '', 'Expert Database', 'expertdatabase', '', 4, '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0Q3VycmVuY3koJGFtb3VudCwkc3VwcG9ydF9ncm91cCkNCgl7DQoJCS8vIGdldCB0aGUgY3VycmVuY3kgaWQNCgkJJGN1cnJlbmN5ID0gc2VsZjo6Z2V0Q3VycmVuY3koJHN1cHBvcnRfZ3JvdXApOw0KCQkvLyBtYWtlIG1vbmV5DQoJCXJldHVybiBzZWxmOjptYWtlTW9uZXkoJGFtb3VudCwkY3VycmVuY3kpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGN1cnJlbmN5ID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3koJHN1cHBvcnRfZ3JvdXApDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRjdXJyZW5jeVskc3VwcG9ydF9ncm91cF0pKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGxvY2F0aW9uDQoJCQkkYXJlYSA9IHNlbGY6OmdldFZhcignc3VwcG9ydF9ncm91cCcsICRzdXBwb3J0X2dyb3VwLCAnaWQnLCAnYXJlYScpOw0KCQkJLy8gZ2V0IHRoZSBSZWdpb24NCgkJCSRyZWdpb24gPSBzZWxmOjpnZXRWYXIoJ2FyZWEnLCAkYXJlYSwgJ2lkJywgJ3JlZ2lvbicpOw0KCQkJLy8gZ2V0IHRoZSBDb3VudHJ5DQoJCQkkY291bnRyeSA9IHNlbGY6OmdldFZhcigncmVnaW9uJywgJHJlZ2lvbiwgJ2lkJywgJ2NvdW50cnknKTsNCgkJCS8vIGdldCB0aGUgQ3VycmVuY3kgQ29kZXRocmVlDQoJCQkkY29kZXRocmVlID0gc2VsZjo6Z2V0VmFyKCdjb3VudHJ5JywgJGNvdW50cnksICdpZCcsICdjdXJyZW5jeScpOw0KCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQlzZWxmOjokY3VycmVuY3lbJHN1cHBvcnRfZ3JvdXBdID0gc2VsZjo6Z2V0VmFyKCdjdXJyZW5jeScsICRjb2RldGhyZWUsICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGN1cnJlbmN5WyRzdXBwb3J0X2dyb3VwXTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjdXJyZW5jeURldGFpbHMgPSBhcnJheSgpOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDdXJyZW5jeURldGFpbHMoJGlkID0gZmFsc2UpDQoJew0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skaWRdKSkNCgkJCXsNCgkJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQkJJ2EuZGVjaW1hbHN5bWJvbCcsJ2EucG9zaXRpdmVzdHlsZScsJ2EubmVnYXRpdmVzdHlsZScpLA0KCQkJCQlhcnJheSgJJ2N1cnJlbmN5X2lkJywnY3VycmVuY3lfbmFtZScsJ2N1cnJlbmN5X2NvZGV0aHJlZScsJ2N1cnJlbmN5X251bWVyaWNjb2RlJywnY3VycmVuY3lfc3ltYm9sJywNCgkJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCQknY3VycmVuY3lfbmVnYXRpdmVzdHlsZScpKSk7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY3VycmVuY3knLCAnYScpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skaWRdID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGlkXSA9IGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiBzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1ha2VNb25leSgkbnVtYmVyLCRjdXJyZW5jeSA9IGZhbHNlKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgd2UgaGF2ZSBhIG51bWJlcg0KCQlpZiAoaXNfbnVtZXJpYygkbnVtYmVyKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIG5lZ2F0aXZlIGZpbmRlciBmaWxlDQoJCQlpbmNsdWRlX29uY2UgJ25lZ2F0aXZlZmluZGVyLnBocCc7DQoJCQkvLyBjaGVjayBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlDQoJCQkkbmVnYXRpdmVGaW5kZXJPYmogPSBuZXcgTmVnYXRpdmVGaW5kZXIobmV3IEV4cHJlc3Npb24oIiRudW1iZXIiKSk7DQoJCQkkbmVnYXRpdmUgPSAkbmVnYXRpdmVGaW5kZXJPYmotPmlzSXROZWdhdGl2ZSgpID8gVFJVRSA6IEZBTFNFOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbignRVJST1IhICgnLiRudW1iZXIuJykgaXMgbm90IGEgbnVtYmVyIScpOw0KCQl9DQoJCS8vIHNldHVwIHRoZSBjdXJyZW5jeQ0KCQkkY3VycmVuY3kgPSBzZWxmOjpnZXRDdXJyZW5jeURldGFpbHMoJGN1cnJlbmN5KTsNCgkJLy8gc2V0IHRoZSBudW1iZXIgdG8gY3VycmVuY3kNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRjdXJyZW5jeSkpDQoJCXsNCgkJCWlmICghJG5lZ2F0aXZlKQ0KCQkJew0KCQkJCSRmb3JtYXQgPSAkY3VycmVuY3ktPmN1cnJlbmN5X3Bvc2l0aXZlc3R5bGU7DQoJCQkJJHNpZ24gPSAnKyc7DQoJCQl9DQoJCQllbHNlIA0KCQkJew0KCQkJCSRmb3JtYXQgPSAkY3VycmVuY3ktPmN1cnJlbmN5X25lZ2F0aXZlc3R5bGU7DQoJCQkJJHNpZ24gPSAnLSc7DQoJCQkJJG51bWJlciA9IGFicygkbnVtYmVyKTsNCgkJCX0NCgkJCSRzZXR1cE51bWJlciA9IG51bWJlcl9mb3JtYXQoKGZsb2F0KSRudW1iZXIsIChpbnQpJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFscGxhY2UsICRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHN5bWJvbCwgJyAnKTsgLy8kY3VycmVuY3ktPmN1cnJlbmN5X3Rob3VzYW5kcyBUT0RPKTsNCgkJCSRzZWFyY2ggPSBhcnJheSgne3NpZ259JywgJ3tudW1iZXJ9JywgJ3tzeW1ib2x9Jyk7DQoJCQkkcmVwbGFjZSA9IGFycmF5KCRzaWduLCAkc2V0dXBOdW1iZXIsICRjdXJyZW5jeS0+Y3VycmVuY3lfc3ltYm9sKTsNCgkJCSRtb25leU1hZGUgPSBzdHJfcmVwbGFjZSAoJHNlYXJjaCwkcmVwbGFjZSwkZm9ybWF0KTsNCg0KCQkJcmV0dXJuICRtb25leU1hZGU7DQoJCX0NCgkJcmV0dXJuICRudW1iZXI7DQoJfQ==', '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0VG90YWxzKCYkZGF0YSwmJHR5cGUsJiRpZCkNCgl7DQoJCWxpc3QoJHBhdGgsICRmaWxlTmFtZSwgJGZ1bGxQYXRoKSA9IHNlbGY6OmdldFRvdGFsc0ZpbGVQYXRoKCR0eXBlLCRpZCk7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCXJldHVybiBzZWxmOjpzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VG90YWxzKCYkdHlwZSwmJGlkKQ0KCXsNCgkJbGlzdCgkcGF0aCwgJGZpbGVOYW1lLCAkZnVsbFBhdGgpID0gc2VsZjo6Z2V0VG90YWxzRmlsZVBhdGgoJHR5cGUsJGlkKTsNCgkJLy8gY2hlY2sgaWYgZmlsZSBleGlzdHMNCgkJaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkgJiYgKCgkanNvbkZpbGUgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRDb250ZW50KCRmdWxsUGF0aCwgRkFMU0UpKSAhPT0gRkFMU0UpKQ0KCQl7DQoJCQkvLyBncmVhdCB3ZSBhcmUgZG9uZSByZXR1cm4gcmVzdWx0cyBhcyBhcnJheQ0KCQkJcmV0dXJuIGpzb25fZGVjb2RlKCRqc29uRmlsZSx0cnVlKTsNCgkJfQ0KCQkvLyByZW1vdmUgdGhlIG9sZCBmaWxlcw0KCQlzZWxmOjpyZW1vdmVGaWxlKCRwYXRoLCAkZmlsZU5hbWUpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VG90YWxzRmlsZVBhdGgoJiR0eXBlLCYkaWQpDQoJew0KCQkkcGF0aFswXSA9IEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy90b3RhbHMnOw0KCQkkcGF0aFsxXSA9IHNlbGY6OmdldEZpbGVLRVkoJHR5cGUsJGlkKTsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJHBhdGhbMl0gPSAkcGF0aFswXS4nLycuJHBhdGhbMV0uJy5qc29uJzsNCg0KCQlyZXR1cm4gJHBhdGg7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUtFWSgmJHR5cGUsJiRpZCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkvLyBHZXQgZnJvbSAjX19zdXBwb3J0Z3JvdXBzX3N1cHBvcnRfZ3JvdXAgYXMgYQ0KCQkkcXVlcnktPnNlbGVjdCgnTUFYKGEubW9kaWZpZWQpJyk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fc3VwcG9ydGdyb3Vwc19zdXBwb3J0X2dyb3VwJywgJ2EnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAnVkRNXycuJHR5cGUuJ19fJy5tZDUoJGRiLT5sb2FkUmVzdWx0KCkpLidfXycuJGlkOw0KCQl9DQoJCXJldHVybiAnVkRNXycuJHR5cGUuJ19fMjg5ZDdiMDUyNzg2OGQ3ZjlhNWY4YzdiMWM4MGQ3YTZfXycuJGlkOw0KCX0NCg0KCS8qKg0KCSogU2FmZXMganNvbiB0byBhIGZpbGUNCgkqDQoJKiBAaW5wdXQJICBvYmplY3QvYXJyYXkvanNvbiAgJGRhdGEgICAgICBEYXRhIHRvIGJlIHN0b3JlZA0KCSogQGlucHV0CSAgc3RyaW5nICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoIEZ1bGwgcGF0aCB0byBmaWxlDQoJKiBAaW5wdXQJICBzdHJpbmcgICAgICAgICAgICAgICAgICAkcGF0aCAgICAgIEZ1bGwgcGF0aCB0byBmb2xkZXINCgkqDQoJKiBAcmV0dXJucyAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIGpzb24gZW5jb2RlIGlmIG5vdCBqc29uDQoJCQkkZGF0YSA9IGpzb25fZW5jb2RlKCRkYXRhKTsNCgkJfQ0KCQkvLyBtYWtlIHN1cmUgdGhpcyBpcyBhIHN0cmluZw0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkkZnAgPSBmb3BlbigkZnVsbFBhdGgsICd3Jyk7DQoJCQlmd3JpdGUoJGZwLCAkZGF0YSk7DQoJCQlmY2xvc2UoJGZwKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICogUmVtb3ZlIGZpbGUNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZGlyICBUaGUgcGF0aCB0byBmb2xkZXIgdG8gcmVtb3ZlDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG5ld0ZpbGVOYW1lIHRoZSBuZXcgZmlsZSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICAgVHJ1ZSBpbiBhbGwgaXMgcmVtb3ZlZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRmlsZSgkZGlyLCAkbmV3RmlsZU5hbWUpDQoJew0KCQlpZiAoaXNfZGlyKCRkaXIpKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgb2xkIGZvbGRlciBuYW1lDQoJCQkkb2xkRmlsZU5hbWUgPSBleHBsb2RlKCdfXycsJG5ld0ZpbGVOYW1lKTsNCgkJCS8vIGxpdHRsZSBmaXggdG8gcmVtb3ZlIHRoaXMgaXRlbSBvbGQgZmlsZSBpZiBmb3VuZA0KCQkJJGZvdW5kID0gZ2xvYigkZGlyLicvJy4kb2xkRmlsZU5hbWVbMF0uJyonLiRvbGRGaWxlTmFtZVsyXS4nLmpzb24nKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZm91bmQpICYmICgkZG9uZSA9IEBhcnJheV9tYXAoICJ1bmxpbmsiLCRmb3VuZCkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdICgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10gKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdICgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdIChodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXSAoaHR0cHM6Ly93d3cudmRtLmlvL2pvb21sYS1jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdIChtYWlsdG86am9vbWxhQHZkbS5pbyk=', '', '', 'Expert Database', '', '', 'Expert Database', '', '', 1, '', 'https://www.vdm.io/updates/expertdatabase_update_server.xml', 'http://www.vdm.io', '', '6Yhb0wT+oV3orb5BRtGGXTErmcOt5zbG9qvp6gXBAKE=', '', '', 2, 1, '', 1, 61),
(28, 1, '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', 1, '', 1, '', 1, '', '', 1, '{}', 3, 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.1.0', 'Copyright (C) 2015. All Rights Reserved', '2017-01-30 13:53:54', '', 'W5w/1yunFpPFY2FzYnFJShB59TlJQgDT6OKL7VpdsHw=', '6bgN5/SL8NYyDfXP9WkSciik8zsDc4IFiZR2CxAR4o4=', '', 'CQPzu/5seQ3SMX8Wwe2NTYuybly28gzpYdqcsH11vbo=', '', '', '', 1, '', 'Just a basic Questions & Answers.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-questions-and-answers', '+vgKi8pQvsX3FKwpeuyJjwhf0lQDrMgAJHxAhPeiXn6otdpQhSZjMH5GN4ZMKUAj/HRP3gI5RWbSrPg8iBTOkA==', '', 'a9f20ea4-e0f6-481e-874f-9eb9536d274c', 'images/vdm/QA500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Questions-and-Answers', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2021-05-27 00:47:00', 2, 'Questions and Answers', 'questionsanswers', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogCXRoZSBnbG9iYWxzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zOw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXI7DQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9ja2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGJhc2lja2V5Ow0KDQoJLyoqDQoJKiAJc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBub3Rpbmcgc2V0IGZvciBub3cNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGlkcw0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqIEByZXR1cm4gYXJyYXl8bnVsbA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmFtZXMoJGlkcywgJHR5cGUpDQoJew0KCQkvLyBzZXR1cCB0aGUgZ2V0IGFycmF5DQoJCSRnZXQgPSBhcnJheSgnYS5pZCcpOw0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkkZ2V0W10gPSAnYS50aXRsZSc7DQoJCQkJJHRhYmxlID0gJyNfX2NhdGVnb3JpZXMnOw0KCQkJYnJlYWs7CQkNCgkJfQ0KCQlpZiAoIWlzc2V0KCR0YWJsZSkgfHwgIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZHMpKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KCQkvLyBjaGVjayB0aGUgYXJyYXkgb2YgaWRzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KCQkJZm9yZWFjaCAoJGlkcyBhcyAkaWQpDQoJCQl7IA0KCQkJCWlmICghKGlzX251bWVyaWMoJGlkKSkpDQoJCQkJew0KCQkJCQlyZXR1cm4gbnVsbDsNCgkJCQl9IA0KCQkJfQ0KCQl9DQoJCS8vIG5vdyBsb2FkIGFsbCBjdXN0b20gdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgkZ2V0KSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgkdGFibGUsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCdhLmlkIElOICgnIC4gaW1wbG9kZSgnLCAnLCAkaWRzKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRpdGVtcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCSRidWNrZXQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCXN3aXRjaCgkdHlwZSkNCgkJCQl7DQoJCQkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCQkJJGJ1Y2tldFskaXRlbS0+aWRdID0gJGl0ZW0tPnRpdGxlOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJGJ1Y2tldDsNCgkJfQ0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc0VkaXRBY2Nlc3MoJHJlY29yZElkLCAkdXNlcklkID0gbnVsbCwgJHRvID0gJ3F1ZXN0aW9uX2FuZF9hbnN3ZXInKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCR1c2VySWQpICYmICR1c2VySWQgaW5zdGFuY2VvZiBKVXNlcikNCgkJew0KCQkJJHVzZXIgPSAkdXNlcklkOw0KCQl9DQoJCWVsc2VpZiAoaXNfbnVtZXJpYygkdXNlcklkKSAmJiAkdXNlcklkID4gMCkNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJaWYgKCR1c2VyLT5hdXRob3Jpc2UoJHRvLicuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLicuJHRvLicuJyAuIChpbnQpICAkcmVjb3JkSWQpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9aW1hZ2VIZWxwZXJzXQ0KW0NVU1RPTUNPREU9Z2V0Rm9sZGVyUGF0aF0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQpbQ1VTVE9NQ09ERT1zZXREeW5hbWljRGF0YUlGXQ0KW0NVU1RPTUNPREU9Z2V0TGlua09wdGlvbnNdDQpbQ1VTVE9NQ09ERT1taW1lVHlwZV0=', '', '', '', '', '', 'CQkvLyBsb2FkIHRoZSBoZWxwZXIgY2xhc3MNCgkJSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCgkJLy8gY2hlY2sgdGhlIHZlcnNpb24gb2YgUW5BDQoJCSRtYW5pZmVzdCA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6bWFuaWZlc3QoKTsNCgkJaWYgKGlzc2V0KCRtYW5pZmVzdC0+dmVyc2lvbikgJiYgc3RycG9zKCRtYW5pZmVzdC0+dmVyc2lvbiwgJy4nKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSR2ZXJzaW9uID0gZXhwbG9kZSgnLicsICRtYW5pZmVzdC0+dmVyc2lvbik7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyB0YXJnZXQgdmVyc2lvbiBsZXNzIHRoZW4gb3IgZXF1YWwgdG8gMS4wLjMNCgkJCWlmIChjb3VudCgkdmVyc2lvbikgPT0gMyAmJiAkdmVyc2lvblswXSA9PSAxICYmICR2ZXJzaW9uWzFdID09IDAgJiYgJHZlcnNpb25bMl0gPD0gNCkNCgkJCXsNCgkJCQkvLyB3ZSBuZWVkIHRvIG1ha2UgYSBkYXRhYmFzZSBjb3JyZWN0aW9uDQoJCQkJJGZpeF9jYXRlZ29yaWVzID0gYXJyYXkoDQoJCQkJCSdjb21fcXVlc3Rpb25zYW5zd2Vycy5xdWVzdGlvbnNfYW5kX2Fuc3dlcnMnID0+ICdjb21fcXVlc3Rpb25zYW5zd2Vycy5xdWVzdGlvbl9hbmRfYW5zd2VyJw0KCQkJCSk7DQpbQ1VTVE9NQ09ERT1maXhDYXRlZ29yaWVzTmFtaW5nXQ0KCQkJfQ0KCQl9', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXShodHRwczovL2dpdGh1Yi5jb20vTGxld2VsbHludmRtL0pvb21sYS1RdWVzdGlvbnMtYW5kLUFuc3dlcnMvcmF3L21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJUaGUgIyMjQ29tcG9uZW50X25hbWUjIyMiKQ0KDQojIyNERVNDUklQVElPTiMjIw0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyBDb21wb25lbnQgTnVtYmVyDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KW0NVU1RPTUNPREU9cmVhZE1FY29udHJpYnV0b3JzXQ==', '', '', 'Questions & Answers', '', '', 'Questions and Answers (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Questions-and-Answers/master/questionsanswers_server.xml', 'https://www.vdm.io/', '', 'KzaMID78l8VUzhcvn64zaWH8zYrTFYKtsnTeY7CkXOw=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 70, '', 1, 7),
(29, 1, '', '', '', 1, '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', '', '{}', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.1.1', 'Copyright (C) 2015. All Rights Reserved', '2017-03-02 01:16:34', 1, 'SPum2cLzUIYtL7B0+ssENc8brbn7pp6iBpbW0zLxMHo=', 'ewagRPPiNZsft15c4vz3DCDjtYsu+AKQw1SdqIdyEFw=', '', 'SLB9t4i32oC7pPDr+hk0B37QywO1uh10I3T8xRHAfvI=', '', '', 'A_76', 2, '', 'Event registration component.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_registry', 'DNj5SxMf3DEhnKMVRBJfY9rvhxemC3cDMVbuWrWnBvRBmQWF+jpV/wkNfyjhfoNa8F4C2eOjtot7QDt7+E6NxA==', '', 'b7f99d5a-57ee-4d91-8470-dcee7d8fc5d6', 'images/vdm/ER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-03-08 03:17:40', 2, 'Registry', 'registry', '', 4, 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw0KCQkvLyBjbGVhciB0aGUgY2FydCBpdGVtcyBpZiBleHBpcmVkDQoJCXNlbGY6OmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KTs=', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnTG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ0xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCWNhbmNlbCBFeHBpcmVkIENhcnQgSXRlbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KQ0KCXsNCgkJLy8gYWRkIGFuIGV2ZW50IHRoYXQgd2lsbCBzZW5kIG91dCBhbGwgY29uZmlybWF0aW9uIGVtYWlscywgbm90IHlldCBzZW5kDQoJCSRkb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oIg0KCQkJalF1ZXJ5KHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQljYW5jZWxFeHBpcmVkQ2FydEl0ZW1zKDEpLmRvbmUoZnVuY3Rpb24ocmVzdWx0KSB7DQoJCQkJCWlmKHJlc3VsdCl7DQoJCQkJCQljb25zb2xlLmxvZyhyZXN1bHQpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2FuY2VsRXhwaXJlZENhcnRJdGVtcyh0eXBlKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguY2FuY2VsRXhwaXJlZENhcnRJdGVtcyZmb3JtYXQ9anNvbic7DQoJCQkJaWYodHlwZSA+IDApew0KCQkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnR5cGU9Jyt0eXBlOw0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnUE9TVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0iKTsNCgl9', 'CXB1YmxpYyBzdGF0aWMgJGV2ZW50Ow0KCXB1YmxpYyBzdGF0aWMgJGV2ZW50QnVpbGRlciA9IGFycmF5KCk7DQoJcHVibGljIHN0YXRpYyAkY29uY2VwdEhUTUwgPSBhcnJheSgpOw0KCXB1YmxpYyBzdGF0aWMgJGxvY2F0aW9ucyA9IGFycmF5KCk7DQoJcHVibGljIHN0YXRpYyAkZmlsdGVySW5wdXQ7DQoJcHVibGljIHN0YXRpYyAkb3JnYW5pemVyID0gbnVsbDsNCglwdWJsaWMgc3RhdGljICRyZWdpc3RlcmVkID0gbnVsbDsNCg0KCXByb3RlY3RlZCBzdGF0aWMgJGV2ZW50T3B0aW9ucyA9IGFycmF5KCdkaXNwbGF5JyA9PiBhcnJheSgpLCAnb3B0aW9ucycgPT4gYXJyYXkoKSk7DQoJcHJvdGVjdGVkIHN0YXRpYyAkZGlzYWJsZUJ1dHRvbnMgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGRpc2FibGVCdXR0b25zQ2hlY2sgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbmNlcHRTd2l0Y2hPbmx5ID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRidW5kbGVTd2l0Y2hPbmx5ID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRjb25jZXB0cyA9IGFycmF5KCk7DQoJcHJvdGVjdGVkIHN0YXRpYyAkY29uY2VwdERhdGEgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbnRlbnREYXRhID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRidXR0b25TY3JpcHQgPSBhcnJheSgnICcpOw0KCXByb3RlY3RlZCBzdGF0aWMgJHJldHVyblR5cGU7DQoJcHJvdGVjdGVkIHN0YXRpYyAkZmlsZXBhdGggPSAnJzsNCglwcm90ZWN0ZWQgc3RhdGljICRmaWxlbGluayA9ICcnOw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCglwcm90ZWN0ZWQgc3RhdGljICR1c2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2tlcjsNCglwcm90ZWN0ZWQgc3RhdGljICRiYXNpY2tleTsNCg0KCXByb3RlY3RlZCBzdGF0aWMgJGV2ZW50RmllbGRzID0gYXJyYXkoKTsNCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWdldEhUTUxdDQoJLyoqDQoJKiAJc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBnZXQgdXNlciBvYmplY3QNCgkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCS8vIGZpcnN0IGNoZWNrIGlmIGFueSB3YXMgYWxyZWFkeSBzZXQNCgkJaWYgKCEkY3VycmVuY3kgPSBzZWxmOjpnZXQoJ0FDVElWRV9DVVJSRU5DWScsIG51bGwpKQ0KCQl7DQoJCQlpZiAoJHVzZXItPmlkID4gMCkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIGFjdGl2ZSB1c2VycyBjdXJyZW5jeQ0KCQkJCXNlbGY6OnNldCgnQUNUSVZFX0NVUlJFTkNZJywgc2VsZjo6Z2V0VXNlckN1cnJlbmN5KCR1c2VyKSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHB1YmxpYyBjdXJyZW5jeQ0KCQkJCXNlbGY6OnNldCgnQUNUSVZFX0NVUlJFTkNZJywgc2VsZjo6Z2V0UHVibGljQ3VycmVuY3koKSk7DQoJCQl9DQoJCX0NCgkJLy8gc2V0IHB1YmxpYyBrZXkgaWYgbmVlZGVkDQoJCWlmICggJHVzZXItPmlkID09IDApDQoJCXsNCgkJCWlmICghJHB1YmxpYyA9IHNlbGY6OmdldCgncHVibGljS2VlWScsIG51bGwpKQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgYWN0aXZlIHVzZXJzIHB1YmxpYw0KCQkJCXNlbGY6OnNldCgncHVibGljS2VlWScsIHNlbGY6OnJhbmRvbWtleSg3KSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKglUbyBsb2FkIHRoZSBhcHBsaWNhdGlvbiBmb3JtDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQYXBlcldvcmsoJGlkLCAka2V5cykNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJLy8gZ2V0IGZvcm1zIHBhdGgNCgkJJHBhdGggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3htbHBhdGgnLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vbW9kZWxzL2Zvcm1zJyk7DQoJCS8vIGJ1aWxkIGZ1bGwgcGF0aCB0byBmaWxlDQoJCSRmaWxlTmFtZSA9ICd2ZG1fZHluYW1pY19mb3JtJzsNCgkJJGZ1bGxQYXRoID0gJHBhdGguJy8nLiRmaWxlTmFtZS4nLnhtbCc7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHVzZXIpKQ0KCQl7DQoJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQlzZWxmOjokdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpDQoJCXsNCgkJCS8vIGdyZWF0IHRoZSBmaWxlIGFuZCBzYWZlIHRvIHBhdGgNCgkJCXNlbGY6OnNldER5bmFtaWNGb3JtWE1MKCRmdWxsUGF0aCwgJHBhdGgpOw0KCQl9DQoJCS8vIGNoZWNrIGlmIGZpbGUgZXhpc3RzDQoJCWlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKQ0KCQl7DQoJCQkvLyBHZXQgdGhlIGZvcm0uDQoJCQlqaW1wb3J0KCAnam9vbWxhLmZvcm0uZm9ybScgKTsNCgkJCS8vIHNldCB0aGUgcGF0aHMNCgkJCUpGb3JtOjphZGRGb3JtUGF0aCgkcGF0aCk7DQoJCQlKRm9ybTo6YWRkRmllbGRQYXRoKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9tb2RlbHMvZmllbGRzJyk7DQoJCQkvLyBncmVhdCB3ZSBhcmUgZG9uZSByZXR1cm4gcmVzdWx0cw0KCQkJJGZvcm0gPSBKRm9ybTo6Z2V0SW5zdGFuY2UoJ2NvbV9bW1tjb21wb25lbnRdXV0uJy4kZmlsZU5hbWUsICRmaWxlTmFtZSwgYXJyYXkoJ2NvbnRyb2wnID0+ICdqZm9ybScsICdsb2FkX2RhdGEnID0+IGZhbHNlKSwgZmFsc2UsIGZhbHNlKTsNCgkJCWlmIChzZWxmOjokdXNlci0+aWQgPT0gMCkNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHVzZXIgZmllbGRzDQoJCQkJc2VsZjo6YWRkVXNlckZpZWxkcygkZm9ybSk7DQoJCQl9DQoJCQkvLyBsb2FkIHRoZSBkeW5hbWljIGZpZWxkDQoJCQlzZWxmOjpnZXREeW5hbWljRmllbGRzKCRpZCwgJGtleXMsICRmb3JtKTsNCgkJCS8vIG5vdyBsb2FkIHRoZSBkYXRhDQoJCQkkZGF0YSA9IHNlbGY6OmdldCgnZm9ybURhdGEnLiRpZCk7DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQkJew0KCQkJCSRmb3JtLT5iaW5kKCRkYXRhKTsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjptb2RlbEZvcm0oJGZvcm0pOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKglNb2RlbCB0aGUgZm9ybSBkaXNwbGF5DQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBtb2RlbEZvcm0oJiRmb3JtKQ0KCXsNCgkJcmV0dXJuICdzb29uIHdlIHdpbGwgYWRkIG1vcmUgaHRtbCBoZXJlISc7DQoJfQ0KDQoJLyoqDQoJICoJR2V0IHRoZSBkeW5hbWljIGZpZWxkcw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RHluYW1pY0ZpZWxkcygkaWQsICRidWlsZCwgJiRmb3JtKQ0KCXsNCgkJLy8gZ2V0IHRoZSBmb3JtIHNlbGVjdGlvbg0KCQkkZm9ybUJ1aWxkZXIgPSBqc29uX2RlY29kZShzZWxmOjpiYXNlNjRfdXJsZGVjb2RlKCRidWlsZCwgdHJ1ZSksIHRydWUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZvcm1CdWlsZGVyKSkNCgkJew0KCQkJLy8gbG9vcCB0aGUgZXZlbnRzDQoJCQlzZWxmOjokZXZlbnRGaWVsZHMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGZvcm1CdWlsZGVyIGFzICRldmVudCA9PiAkYnVpbGRlcikNCgkJCXsNCgkJCQkvLyBnZXQgYWxsIGN1c3RvbSBmaWVsZHMgb2YgZXZlbnQNCgkJCQlpZiAoJGZpZWxkcyA9IHNlbGY6OmdldFZhcignZXZlbnQnLCAoaW50KSAkZXZlbnQsICdpZCcsICdjdXN0b21maWVsZCcpKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRmaWVsZHMpKQ0KCQkJCQl7DQoJCQkJCQkkZmllbGRzID0ganNvbl9kZWNvZGUoJGZpZWxkcywgdHJ1ZSk7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRmaWVsZHMpKQ0KCQkJCQl7DQoJCQkJCQkvLyBva2F5IHNvIHdlIGhhdmUgY3VzdG9tIGZpZWxkcw0KCQkJCQkJc2VsZjo6c2V0RHluYW1pY0ZpZWxkcygkZXZlbnQsICRidWlsZGVyLCAkZmllbGRzKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRGaWVsZHMpKQ0KCQkJew0KCQkJCXZhcl9kdW1wKHNlbGY6OiRldmVudEZpZWxkcyk7ZXhpdDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkgKglTZXQgdGhlIGR5bmFtaWMgZmllbGRzDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREeW5hbWljRmllbGRzKCYkZXZlbnQsICYkYnVpbGRlciwgJiRmaWVsZHMpDQoJew0KCQlmb3JlYWNoICgkZmllbGRzWydmaWVsZCddIGFzICRuciA9PiAkZmllbGQpDQoJCXsNCgkJCS8vIGZpcnN0IGxvYWQgdGhvc2UgYmFzZWQgb24gdmFyaWF0aW9uDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpZWxkc1sndmFyaWF0aW9uJ11bJG5yXSkpDQoJCQl7DQoJCQkJLy8gb25seSBhZGQgaXQgaWYgdGhlIHZhcmlhdGlvbiBpcyBzZWxlY3RlZA0KCQkJCWlmICgkdmFyaWF0aW9ucyA9IGFycmF5X2ludGVyc2VjdCgkYnVpbGRlclsndmFyaWF0aW9uJ10sICRmaWVsZHNbJ3ZhcmlhdGlvbiddWyRucl0pKQ0KCQkJCXsNCgkJCQkJJHF0eSA9IGFycmF5KCk7DQoJCQkJCWZvcmVhY2ggKCR2YXJpYXRpb25zIGFzICR2YXJpYXRpb24pDQoJCQkJCXsNCgkJCQkJCSR2TnIgPSBhcnJheV9zZWFyY2goJHZhcmlhdGlvbiwgJGJ1aWxkZXJbJ3ZhcmlhdGlvbiddKTsNCgkJCQkJCXNlbGY6OnNldER5bmFtaWNGaWVsZCgkZXZlbnQsICRmaWVsZCwgICRidWlsZGVyWydxdHknXVskdk5yXSwgJGZpZWxkc1snZWFjaF9yZWdpc3RyYXRpb24nXVskbnJdLCAkYnVpbGRlclsnc3dpdGNoJ11bJHZOcl0sICRidWlsZGVyWydjb25jZXB0J11bJHZOcl0sICRidWlsZGVyWydidW5kbGUnXVskdk5yXSwgJGJ1aWxkZXJbJ3ZhcmlhdGlvbiddWyR2TnJdKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBhZGQgYWxsIGZpZWxkcyBub3QgbGlua2VkIHRvIHZhcmlhdGlvbnMNCgkJCQlzZWxmOjpzZXREeW5hbWljRmllbGQoJGV2ZW50LCAkZmllbGQsIGFycmF5X3N1bSgkYnVpbGRlclsncXR5J10pLCAkZmllbGRzWydlYWNoX3JlZ2lzdHJhdGlvbiddWyRucl0pOw0KCQkJfQ0KCQl9DQoJCWV4aXQ7DQoJfQ0KDQoJLyoqDQoJICoJU2V0IHRoZSBkeW5hbWljIGZpZWxkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREeW5hbWljRmllbGQoJGV2ZW50LCAkaWQsICRxdHksICRlYWNoLCAkc3dpdGNoID0gbnVsbCwgJGNvbmNlcHQgPSAwLCAkYnVuZGxlID0gMCwgJHZhcmlhdGlvbiA9IDApDQoJew0KCQkvLyBzdGFydCBldmVudCBmaWVsZCBhcnJheQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRldmVudEZpZWxkc1skZXZlbnRdKSkNCgkJew0KCQkJc2VsZjo6JGV2ZW50RmllbGRzWyRldmVudF0gPSBhcnJheSgpOw0KCQl9DQoJCS8vIGdldCB0aGUgZmllbGQNCgkJJGZpZWxkID0gc2VsZjo6Z2V0RmllbGQoJGlkKTsNCgkJdmFyX2R1bXAoJGZpZWxkKTsNCgl9DQoNCgkvKioNCgkgKglnZXQgdGhlIGZpZWxkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWVsZCgkaWQpDQoJew0KCQkvLyBnZXQgZGF0YWJhc2UgdmFsdWVzIG9mIHRoaXMgZmllbGQNCgkJJGRiID0gc2VsZjo6Z2V0QWxsVmFsdWVzKCRpZCwgJ2N1c3RvbV9maWVsZCcpOw0KCQlJZiAoaXNzZXQoc2VsZjo6JGZpZWxkVHlwZXNbJGRiLT5maWVsZF90eXBlXSkpDQoJCXsNCgkJCSRmaWVsZCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZmllbGRUeXBlc1skZGItPmZpZWxkX3R5cGVdIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkZGItPnska2V5fSkpDQoJCQkJew0KCQkJCQkkZmllbGRbJGtleV0gPSAkZGItPnska2V5fTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGZpZWxkWyRrZXldID0gJHZhbHVlOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGRvIHNvbWUgZXh0cmEgcHJlcA0KCQkJaWYgKCRkYi0+ZmllbGRfdHlwZSA9PSAxMSAmJiBpc3NldCgkZGItPmRlZmF1bHRjb3VudHJ5KSkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBjb3JyZWN0IGNvdW50cnkgZGVmYXVsdCB2YWx1ZQ0KCQkJCSRmaWVsZFsnZGVmYXVsdCddID0gJGRiLT5kZWZhdWx0Y291bnRyeTsNCgkJCX0NCgkJCWVsc2VpZiAoJGRiLT5maWVsZF90eXBlID09IDE3ICYmIGlzc2V0KCRkYi0+ZGVmYXVsdHJlZ2lvbikpDQoJCQl7DQoJCQkJLy8gbG9hZCB0aGUgY29ycmVjdCByZWdpb24gZGVmYXVsdCB2YWx1ZQ0KCQkJCSRmaWVsZFsnZGVmYXVsdCddID0gJGRiLT5kZWZhdWx0cmVnaW9uOw0KCQkJfQ0KCQkJZWxzZWlmICgoJGRiLT5maWVsZF90eXBlID09IDEgfHwgJGRiLT5maWVsZF90eXBlID09IDIpICYmIChpc3NldCgkZGItPnNlbGVjdGlvbikgJiYgaXNzZXQoJGRiLT5zZWxlY3Rpb250eXBlKSkpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIG9wdGlvbnMgYXJyYXkNCgkJCQlzZWxmOjpzZXRGaWVsZE9wdGlvbnMoJGZpZWxkLCAkZGIpOw0KCQkJfQ0KCQkJcmV0dXJuICRmaWVsZDsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICoJU2V0IHRoZSBvcHRpb25zIGZvciB0aGUgZmllbGQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldEZpZWxkT3B0aW9ucygmJGZpZWxkLCAmJGRiKQ0KCXsNCgkJLy8gc2V0IHRoZSBzZWxlY3Rpb24gb3B0aW9uDQoJCWlmICgkZGItPmZpZWxkX3R5cGUgPT0gMiAmJiAkZGItPnNlbGVjdGlvbnR5cGUgPT0gMikNCgkJew0KCQkJJGZpZWxkWydtdWx0aXBsZSddID0gJ3RydWUnOw0KCQkJJGZpZWxkWydmaWx0ZXInXSA9ICdBUlJBWSc7DQoJCX0NCgkJZWxzZWlmICgkZGItPmZpZWxkX3R5cGUgPT0gMiAmJiAkZGItPnNlbGVjdGlvbnR5cGUgPT0gMSkNCgkJew0KCQkJJGZpZWxkWydtdWx0aXBsZSddID0gJ2ZhbHNlJzsNCgkJfQ0KCQkvLyBzZXQgb3B0aW9ucw0KCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGRiLT5zZWxlY3Rpb24pKQ0KCQl7DQoJCQkkZGItPnNlbGVjdGlvbiA9IGpzb25fZGVjb2RlKCRkYi0+c2VsZWN0aW9uLCB0cnVlKTsNCgkJfQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRiLT5zZWxlY3Rpb24pKQ0KCQl7DQoJCQkkb3B0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoKCRkYi0+c2VsZWN0aW9uWydzZWxlY3Rpb24nXSBhcyAkc2VsZWN0aW9uKQ0KCQkJew0KCQkJCXNlbGY6OnNldEZpZWxkT3B0aW9uKCRzZWxlY3Rpb24sICRvcHRpb25zKTsNCgkJCX0NCgkJCS8vIGxvYWQgdGhlIG9wdGlvbnMNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkb3B0aW9ucykpDQoJCQl7DQoJCQkJJGZpZWxkWydvcHRpb25zJ10gPSAkb3B0aW9uczsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqCVNldCB0aGUgb3B0aW9uIGZvciB0aGUgZmllbGQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldEZpZWxkT3B0aW9uKCRzZWxlY3Rpb24sICYkb3B0aW9ucykNCgl7DQoJCWlmIChzdHJwb3MoJHNlbGVjdGlvbiwnfCcpICE9PSBmYWxzZSkNCgkJew0KCQkJJGFycmF5X3NldHRlciA9IGV4cGxvZGUoJ3wnLCAkc2VsZWN0aW9uKTsNCgkJCWlmIChjb3VudCgkYXJyYXlfc2V0dGVyKSA9PSAyKQ0KCQkJew0KCQkJCWlmIChpc19udW1lcmljKCRhcnJheV9zZXR0ZXJbMF0pIHx8IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRhcnJheV9zZXR0ZXJbMF0pKQ0KCQkJCXsNCgkJCQkJJG9wdGlvbnNbJGFycmF5X3NldHRlclswXV0gPSAkYXJyYXlfc2V0dGVyWzFdOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkb3B0aW9uc1snJ10gPSAkYXJyYXlfc2V0dGVyWzFdOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoY291bnQoJGFycmF5X3NldHRlcikgPT0gMSkNCgkJCXsNCgkJCQkkb3B0aW9uc1snJ10gPSAkYXJyYXlfc2V0dGVyWzBdOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmIChpc19udW1lcmljKCRzZWxlY3Rpb24pIHx8IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRzZWxlY3Rpb24pKQ0KCQkJCXsNCgkJCQkJJG9wdGlvbnNbJHNlbGVjdGlvbl0gPSAkc2VsZWN0aW9uOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCWlmIChpc19udW1lcmljKCRzZWxlY3Rpb24pIHx8IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRzZWxlY3Rpb24pKQ0KCQkJew0KCQkJCSRvcHRpb25zWyRzZWxlY3Rpb25dID0gJHNlbGVjdGlvbjsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqCVNldCB0aGUgZHluYW1pYyBiYXNlIGZvcm0geG1sDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREeW5hbWljRm9ybVhNTCgkZnVsbFBhdGgsICRwYXRoKQ0KCXsNCgkJLy8gYWx3YXlzIHJlc2V0DQoJCSRmaWVsZFNldCA9IGFycmF5KCk7DQoJCS8vIHNldCB0aGUgZGVmYXVsdCBmaWVsZHMNCgkJJGZpZWxkU2V0W10gPSAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4nOw0KCQkkZmllbGRTZXRbXSA9ICc8Zm9ybSBhZGRmaWVsZHBhdGg9Ii9hZG1pbmlzdHJhdG9yL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9tb2RlbHMvZmllbGRzIj4nOw0KCQkkZmllbGRTZXRbXSA9ICc8ZmllbGRzZXQgbmFtZT0iZGVmYXVsdCI+JzsNCgkJJGZpZWxkU2V0W10gPSAiXHQ8IS0tIEp1c3QgdG8gaGF2ZSBhIGZvcm0gdG8gc3RhcnQgd2l0aC4gLS0+IjsNCgkJJGZpZWxkU2V0W10gPSAiPC9maWVsZHNldD4iOw0KCQkkZmllbGRTZXRbXSA9ICI8L2Zvcm0+IjsNCgkJLy8gc2V0IHRoZSBmb3JtDQoJCSRmb3JtID0gaW1wbG9kZSgiXG4iLCRmaWVsZFNldCk7DQoJCS8vIHNldCB0aGUgZmlsZQ0KCQlyZXR1cm4gc2VsZjo6c2F2ZVhNTCgkZm9ybSwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJfQ0KDQoJLyoqDQoJKiAJc2F2ZSBYTUwNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdmVYTUwoJGRhdGEsICRmdWxsUGF0aCwgJHBhdGgpDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJbGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnModHJ1ZSk7DQoJCS8vIG1ha2Ugc3VyZSB0aGlzIGlzIHZhbGlkIHhtbA0KCQlpZiAoc2ltcGxleG1sX2xvYWRfc3RyaW5nKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZ1bGxQYXRoLCAndycpOw0KCQkJZndyaXRlKCRmcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCRmcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkNCgkJLy8gc2V0IGVycm9yDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKDUwMCwgVGV4dDo6XygnVGhlIHhtbCBmb3IgdGhpcyBmcm9tIGNvdWxkIG5vdCBiZSB2YWxpZGF0ZWQsIHBsZWFzZSBub3RpZnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yLicpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqCUFkZCB1c2VyIGZpZWxkcyB0byBhcHBsaWNhdGlvbg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWRkVXNlckZpZWxkcygmJGZvcm0pDQoJew0KCQkvLyB3ZSBtdXN0IGFkZCBzb21lIHVzZXIgZmllbGRzDQoJCSR1c2VyRmllbGRzID0NCgkJCWFycmF5KA0KCQkJCSduYW1lJyA9Pg0KCQkJCQlhcnJheSgnbmFtZScsJ3VzZXJuYW1lJywnZW1haWwnLCdwYXNzd29yZCcsJ3Bhc3N3b3JkMicsICdjYXB0Y2hhJyksDQoJCQkJJ3R5cGUnID0+DQoJCQkJCWFycmF5KCd0ZXh0JywndGV4dCcsJ2VtYWlsJywncGFzc3dvcmQnLCdwYXNzd29yZCcsJ2NhcHRjaGEnKSwNCgkJCQknbGFiZWwnID0+DQoJCQkJCWFycmF5KFRleHQ6Ol8oJ05hbWUnKSwgVGV4dDo6XygnVXNlcm5hbWUvTG9naW4tbmFtZScpLCBUZXh0OjpfKCdFbWFpbCcpLCBUZXh0OjpfKCdQYXNzd29yZCcpLCBUZXh0OjpfKCdDb25maXJtIFBhc3N3b3JkJyksIFRleHQ6Ol8oJ1JlQ2FwdGNoYScpKSwNCgkJCQknZGVzY3JpcHRpb24nID0+DQoJCQkJCWFycmF5KFRleHQ6Ol8oJ1lvdXIgRnVsbCBOYW1lJyksIFRleHQ6Ol8oJ1NldCB0aGUgdXNlcm5hbWUvbG9naW4tbmFtZSBvZiB5b3VyIGNob2ljZS4nKSwgVGV4dDo6XygnWW91ciBFbWFpbCBBZGRyZXNzJyksIFRleHQ6Ol8oJ1VzZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnMsIHVwcGVyLWNhc2UgYW5kIGxvd2VyLWNhc2UgbGV0dGVyLCBudW1iZXJzIGFuZCBhdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIuJyksIFRleHQ6Ol8oJ0NvbmZpcm0gUGFzc3dvcmQnKSwgVGV4dDo6XygnSnVzdCBjaGVja2luZyB0aGF0IHlvdXIgbm90IGEgcm9ib3QuJykpLA0KCQkJCSdoaW50JyA9Pg0KCQkJCQlhcnJheShUZXh0OjpfKCdZb3VyIEZ1bGwgTmFtZScpLCBUZXh0OjpfKCdVc2VybmFtZScpLCAneW91ckBlbWFpbC5jb20nLG51bGwsbnVsbCxudWxsKSwNCgkJCQknY2xhc3MnID0+DQoJCQkJCWFycmF5KCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLG51bGwpLA0KCQkJCSd2YWxpZGF0ZScgPT4NCgkJCQkJYXJyYXkobnVsbCwgbnVsbCwgJ2VtYWlsJywgbnVsbCwgbnVsbCwgJ2NhcHRjaGEnKSwNCgkJCQknZmlsdGVyJyA9Pg0KCQkJCQlhcnJheSgnc3RyaW5nJywgJ3N0cmluZycsICdlbWFpbCcsIG51bGwsIG51bGwsbnVsbCksDQoJCQkJJ2ZpZWxkJyA9Pg0KCQkJCQlhcnJheShudWxsLCBudWxsLCBudWxsLCAncGFzc3dvcmQyJywgbnVsbCwgbnVsbCkNCgkJCSk7DQoJCSRhZGRSZUNhcHRjaGEgPSBGYWN0b3J5OjpnZXRDb25maWcoKS0+Z2V0KCdjYXB0Y2hhJyk7DQoJCS8vIG5vdyBsb29wIHRoZSBmaWVsZHMgYW5kIGFkZCB0byBmb3JtDQoJCWZvcmVhY2ggKCR1c2VyRmllbGRzWyduYW1lJ10gYXMgJG5yID0+ICRuYW1lKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgZmllbGQNCgkJCSR4bWwgPSBhcnJheSgpOw0KCQkJLy8gb25seSBsb2FkIFJlQ2FwdGNoYSBpZiB0dXJuZWQgb24gaW4gc3lzdGVtDQoJCQlpZiAoJ2NhcHRjaGEnICE9ICRuYW1lIHx8ICRhZGRSZUNhcHRjaGEpDQoJCQl7DQoJCQkJJHhtbFtdID0gJzxmaWVsZCAnOw0KCQkJCSR4bWxbXSA9ICd0eXBlPSInLiR1c2VyRmllbGRzWyd0eXBlJ11bJG5yXS4nIiAnOw0KCQkJCSR4bWxbXSA9ICduYW1lPSInLiRuYW1lLiciICc7DQoJCQkJaWYgKCR1c2VyRmllbGRzWydsYWJlbCddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnbGFiZWw9IicuJHVzZXJGaWVsZHNbJ2xhYmVsJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2Rlc2NyaXB0aW9uJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdkZXNjcmlwdGlvbj0iJy4kdXNlckZpZWxkc1snZGVzY3JpcHRpb24nXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snY2xhc3MnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2NsYXNzPSInLiR1c2VyRmllbGRzWydjbGFzcyddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCdjYXB0Y2hhJyAhPSAkbmFtZSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdyZXF1aXJlZD0idHJ1ZSIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydmaWx0ZXInXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2ZpbHRlcj0iJy4kdXNlckZpZWxkc1snZmlsdGVyJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ3ZhbGlkYXRlJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICd2YWxpZGF0ZT0iJy4kdXNlckZpZWxkc1sndmFsaWRhdGUnXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snZmllbGQnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2ZpZWxkPSInLiR1c2VyRmllbGRzWydmaWVsZCddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydoaW50J11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdoaW50PSInLiR1c2VyRmllbGRzWydoaW50J11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQkkeG1sW10gPSAnLz4nOw0KCQkJCS8vIHNldCB0aGUgZmllbGQNCgkJCQkkZm9ybS0+c2V0RmllbGQoIHNpbXBsZXhtbF9sb2FkX3N0cmluZyhpbXBsb2RlKCJcbiIsICR4bWwpKSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkqIAlmaWVsZFR5cGVzIERlZmF1bHQgU2V0dGluZ3MNCgkqKi8NCglwdWJsaWMgc3RhdGljICRmaWVsZFR5cGVzID0gYXJyYXkoDQoJCQkxID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAncmFkaW8nLCANCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICdidG4tZ3JvdXAgYnRuLWdyb3VwLXllc25vJywNCgkJCQknb3B0aW9ucycgPT4gYXJyYXkoJ1llcycsJ05vJyksDQoJCQkJJ2ZpbHRlcicgPT4gJ3dvcmQnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMiA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ2xpc3QnLCANCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICdsaXN0X2NsYXNzJywNCgkJCQknbXVsdGlwbGUnID0+ICdmYWxzZScsDQoJCQkJJ29wdGlvbnMnID0+IGFycmF5KCksDQoJCQkJJ2ZpbHRlcicgPT4gJ2ludCcsIA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnICksDQoJCQkzID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnZWRpdG9yJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3dpZHRoJyA9PiAnMTAwJScsIA0KCQkJCSdoZWlnaHQnID0+ICc1MDBweCcsIA0KCQkJCSdmaWx0ZXInID0+ICdzYWZlaHRtbCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdidXR0b25zJyA9PiAnZmFsc2UnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknaGlkZScgPT4gJycsDQoJCQkJJ2VkaXRvcicgPT4gJ2pjZXxub25lJywNCgkJCQkncm93cycgPT4gJycsDQoJCQkJJ2NvbHMnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTQgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICd0ZXh0YXJlYScsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE0MDAnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYSB1ay13aWR0aC0xLTEnLA0KCQkJCSd3aWR0aCcgPT4gJzEwMCUnLCANCgkJCQknaGVpZ2h0JyA9PiAnNTAwcHgnLCANCgkJCQknZmlsdGVyJyA9PiAnc3RyaW5nJywgDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnJywNCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2hpbnQnID0+ICcnLA0KCQkJCSdyb3dzJyA9PiAnMjAnLA0KCQkJCSdjb2xzJyA9PiAnMTAnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTUgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICd0ZXh0JywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdhdXRvY29tcGxldGUnID0+ICdvbicsDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnJywgDQoJCQkJJ2ZpZWxkJyA9PiAnJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsIA0KCQkJCSdmaWx0ZXInID0+ICdzdHJpbmcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknaGludCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk2ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAndXJsJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdhdXRvY29tcGxldGUnID0+ICdvbicsDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnJywgDQoJCQkJJ2ZpZWxkJyA9PiAnJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdoaW50JyA9PiAnJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTcgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdlbWFpbCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknYXV0b2NvbXBsZXRlJyA9PiAnb24nLA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsIA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknaGludCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk4ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAndGVsJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdhdXRvY29tcGxldGUnID0+ICdvbicsDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnJywgDQoJCQkJJ2ZpZWxkJyA9PiAnJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdoaW50JyA9PiAnJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTkgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdjYWxlbmRhcicsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsDQoJCQkJJ2ZpbHRlcicgPT4gJ3NlcnZlcl91dGMnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknZm9ybWF0JyA9PiAnJWQtJW0tJVknLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTAgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdjb2xvcicsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsDQoJCQkJJ2ZpbHRlcicgPT4gJ3N0cmluZycsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTEgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdjb3VudHJ5bmFtZScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAnbGlzdF9jbGFzcycsDQoJCQkJJ2ZpbHRlcicgPT4gJ3N0cmluZycsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTIgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdoaWRkZW4nLCANCgkJCQknY2xhc3MnID0+ICd0ZXh0X2hpZGRlbicsIA0KCQkJCSdmaWx0ZXInID0+ICdpbnQnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknZGVmYXVsdCcgPT4gJzEnICksDQoJCQkxMyA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ2ZpbGUnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdmaWx0ZXInID0+ICcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknYWNjZXB0JyA9PiAnaW1hZ2UvKicsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTE0ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnbm90ZScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2hlYWRpbmcnID0+ICdoNCcsDQoJCQkJJ2NsYXNzJyA9PiAnYWxlcnQnLA0KCQkJCSdjbG9zZScgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTUgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdzcGFjZXInLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdocicgPT4gJ3RydWUnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTYgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdub3RlJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknaGVhZGluZycgPT4gJ2g0JywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTE3ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAncmVnaW9ubmFtZScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAnbGlzdF9jbGFzcycsDQoJCQkJJ2ZpbHRlcicgPT4gJ3N0cmluZycsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMzAgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdwYXNzd29yZCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndmFsaWRhdGUtcGFzc3dvcmQnLA0KCQkJCSdzaXplJyA9PiAnNjAnLCANCgkJCQknbWF4bGVuZ3RoJyA9PiAnMTUwJywgDQoJCQkJJ2ZpbHRlcicgPT4gJ3JhdycsIA0KCQkJCSd2YWxpZGF0ZScgPT4gJ3Bhc3N3b3JkJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2F1dG9jb21wbGV0ZScgPT4gJ29mZicsDQoJCQkJJ2ZpZWxkJyA9PiAnJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTMxID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnY2FwdGNoYScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnY2FwdGNoYScsIA0KCQkJCSduYW1lc3BhY2UnID0+ICcnKQ0KCQkJKTsNCltDVVNUT01DT0RFPXVzZXJJc1RocmVlK2FkbWludXNlcixvcmdhbml6ZXJ1c2VyLHJlZ2lzdGVyZWR1c2VyLG9yZ2FuaXplcixyZWdpc3RlcmVkX3VzZXJdDQoJLyoqDQoJKiAJdGhlIHB1YmxpYyBjdXJyZW5jeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXJzQ3VycmVuY3kgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJZ2V0IHRoZSB1c2VyIGN1cnJlbmN5DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VyQ3VycmVuY3koJHVzZXJJZCA9IG51bGwpDQoJew0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHVzZXJJZCkgJiYgJHVzZXJJZCBpbnN0YW5jZW9mIEpVc2VyKQ0KCQl7DQoJCQkkdXNlciA9ICR1c2VySWQ7DQoJCX0NCgkJZWxzZWlmIChpc19udW1lcmljKCR1c2VySWQpICYmICR1c2VySWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQkvLyBvbmx5IHNldCBhZ2FpbiBpZiBub3QgZm91bmQNCgkJaWYgKCFpc3NldChzZWxmOjokdXNlcnNDdXJyZW5jeVskdXNlci0+aWRdKSkNCgkJew0KCQkJJGFycmF5ID0gKGFycmF5KSBzZWxmOjp1c2VySXMoJHVzZXIsIHRydWUpOw0KCQkJLy8gc2V0IGluIHJlbGF0aW9uDQoJCQlzd2l0Y2goJGFycmF5WydpcyddKQ0KCQkJew0KCQkJCS8vIGFkbWluIHVzZSBnbG9iYWwNCgkJCQljYXNlIDM6IA0KCQkJCXNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0gPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnY3VycmVuY3knLCAnVVNEJyk7DQoJCQkJYnJlYWs7DQoJCQkJLy8gb3JnYW5pemVyIGN1cnJlbmN5DQoJCQkJY2FzZSAyOg0KCQkJCXNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0gPSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsICRhcnJheVsnaWQnXSwgJ2lkJywgICdjdXJyZW5jeScpOw0KCQkJCWJyZWFrOw0KCQkJCS8vIHJlZ2lzdGVyZWQgdXNlciBjdXJyZW5jeQ0KCQkJCWNhc2UgMToNCgkJCQlzZWxmOjokdXNlcnNDdXJyZW5jeVskdXNlci0+aWRdID0gc2VsZjo6Z2V0UmVnVXNlclZhbHVlKCRhcnJheVsnaWQnXSwgJ2N1cnJlbmN5X2NvZGV0aHJlZScsIHNlbGY6OmdldFB1YmxpY0N1cnJlbmN5KCkpOw0KCQkJCWJyZWFrOw0KCQkJCS8vIGFsbCBvdGhlciBnZXRzIHRoZSBwdWJsaWMNCgkJCQlkZWZhdWx0Og0KCQkJCXJldHVybiBzZWxmOjpnZXRQdWJsaWNDdXJyZW5jeSgpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokdXNlcnNDdXJyZW5jeVskdXNlci0+aWRdOw0KCX0NCg0KCS8qKg0KCSogCXRoZSBldmVudCBjdXJyZW5jeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGV2ZW50Q3VycmVuY3kgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJZ2V0IHRoZSB1c2VyIGN1cnJlbmN5DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudEN1cnJlbmN5KCRpZCA9IG51bGwpDQoJew0KCQlpZiAoaXNfbnVtZXJpYygkaWQpICYmICRpZCA+IDApDQoJCXsNCgkJCSRldmVudCA9IChpbnQpICRpZDsNCgkJfQ0KCQllbHNlaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+aWQpICYmIHNlbGY6OiRldmVudC0+aWQgPiAwKQ0KCQl7DQoJCQkkZXZlbnQgPSAoaW50KSBzZWxmOjokZXZlbnQtPmlkOw0KCQl9DQoJCWVsc2VpZiAoISRpZCAmJiBpc3NldChzZWxmOjokZXZlbnQtPm9yZ2FuaXplcikgJiYgc2VsZjo6JGV2ZW50LT5vcmdhbml6ZXIgPiAwKQ0KCQl7DQoJCQlpZiAoJGN1cnJlbmN5ID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCBzZWxmOjokZXZlbnQtPm9yZ2FuaXplciwgJ2lkJywgJ2N1cnJlbmN5JykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jeTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIHJldHVybiBkZWZhdWx0IGN1cnJlbmN5IG9mIHRoZSBjdXJyZW50IHVzZXINCgkJCXJldHVybiBzZWxmOjpnZXRVc2VyQ3VycmVuY3koKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiBhbHJlYWR5IHNldA0KCQlpZiAoIWlzc2V0KHNlbGY6OiRldmVudEN1cnJlbmN5WyRldmVudF0pKQ0KCQl7DQoJCQkvLyBnZXQgZXZlbnQgb3JnYW5pemVyDQoJCQlpZiAoISRpZCAmJiBpc3NldChzZWxmOjokZXZlbnQtPm9yZ2FuaXplcikgJiYgc2VsZjo6JGV2ZW50LT5vcmdhbml6ZXIgPiAwKQ0KCQkJew0KCQkJCWlmICgkY3VycmVuY3kgPSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsIHNlbGY6OiRldmVudC0+b3JnYW5pemVyLCAnaWQnLCAnY3VycmVuY3knKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEN1cnJlbmN5WyRldmVudF0gPSAkY3VycmVuY3k7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmICgkb3JnSWQgPSBzZWxmOjpnZXRWYXIoJ2V2ZW50JywgJGV2ZW50LCAnaWQnLCAnb3JnYW5pemVyJykpDQoJCQl7DQoJCQkJaWYgKCRjdXJyZW5jeSA9IHNlbGY6OmdldFZhcignb3JnYW5pemVyJywgJG9yZ0lkLCAnaWQnLCAnY3VycmVuY3knKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEN1cnJlbmN5WyRldmVudF0gPSAkY3VycmVuY3k7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIHJldHVybiBpZiBmb3VuZA0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50Q3VycmVuY3lbJGV2ZW50XSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokZXZlbnRDdXJyZW5jeVskZXZlbnRdOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCg0KCS8qKg0KCSogCXRoZSBwdWJsaWMgY3VycmVuY3kNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRwdWJsaWNDdXJyZW5jeSA9ICdzZXQnOw0KDQoJLyoqDQoJKiAJc2V0IHRoZSBwdWJsaWMvZGVmYXVsdCBjdXJyZW5jeQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHVibGljQ3VycmVuY3koKQ0KCXsNCgkJaWYgKCdzZXQnID09PSBzZWxmOjokcHVibGljQ3VycmVuY3kpDQoJCXsNCgkJCS8vIGdldCB0aGlzIGxvY2F0aW9uIGRhdGENCgkJCSRsb2NhdGlvbkRhdGEgPSBzZWxmOjpnZXRMb2NhdGlvbmRhdGEoKTsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgbG9jYXRpb24gZGF0YQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsb2NhdGlvbkRhdGEpICYmIGlzc2V0KCRsb2NhdGlvbkRhdGFbJ0NVUlJFTkNZX0NPREVfVEhSRUUnXSkpDQoJCQl7DQoJCQkJc2VsZjo6JHB1YmxpY0N1cnJlbmN5ID0gJGxvY2F0aW9uRGF0YVsnQ1VSUkVOQ1lfQ09ERV9USFJFRSddOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGZhbGwgb3ZlciB0byB5b3VyIGNvbXBvbmVudCBkZWZhdWx0IGN1cnJlbmN5DQoJCQkJc2VsZjo6JHB1YmxpY0N1cnJlbmN5ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2N1cnJlbmN5JywgJ1VTRCcpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokcHVibGljQ3VycmVuY3k7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIG93bmVyDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkb3duZXIgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJYXJyYXkgdG8gY2hlY2sgdXNlcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGNoZWNrVXNlciA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAl3YW50cyB0byBlZGl0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdmlld0FjY2VzczsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzQWNjZXNzKCRyZWNvcmRJZCwgJHVzZXJJZCA9IG51bGwsICR0byA9ICdldmVudCcsICR2aWV3QWNjZXNzID0gZmFsc2UpDQoJew0KCQkvLyBzZXQgaWYgdmlldyBhY2Nlc3MgaXMgYWxsIHRoYXQgaXMgcmVxdWlyZWQgDQoJCXNlbGY6OiR2aWV3QWNjZXNzID0gJHZpZXdBY2Nlc3M7DQoJCWlmKCEkdXNlcklkKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdXNlcikpDQoJCQl7DQoJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCXNlbGY6OiR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkJfQ0KCQkJJHVzZXJJZCA9IHNlbGY6OiR1c2VyLT5pZDsNCgkJfQ0KCQkkYXJyYXkgPSAoYXJyYXkpIHNlbGY6OnVzZXJJcygkdXNlcklkLCB0cnVlKTsNCgkJaWYgKGlzc2V0KCRhcnJheVsnaXMnXSkgJiYgJGFycmF5WydpcyddICYmICRyZWNvcmRJZCA+IDApDQoJCXsNCgkJCXN3aXRjaCgkdG8pDQoJCQl7DQoJCQkJY2FzZSAnZXZlbnQnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzRXZlbnQoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAndmVudWUnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzVmVudWUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ29yZ2FuaXplcic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NPcmdhbml6ZXIoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2ludm9pY2UnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzSW52b2ljZSgkYXJyYXlbJ2lzJ10sICRyZWNvcmRJZCwgJGFycmF5WydpZCddLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdwYXltZW50X21ldGhvZCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NQYXltZW50TWV0aG9kKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3RheF9ydWxlJzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc1RheFJ1bGUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnbWVzc2FnZXNfYnVpbGRlcic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NNZXNzYWdlc0J1aWxkZXIoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY29uY2VwdCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NDb25jZXB0KCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdjb250ZW50JzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0NvbnRlbnQoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2J1bmRsZSc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NCdW5kbGUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0V2ZW50KCR0eXBlLCAkcmVjb3JkSWQsICRvcmdJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdldmVudCcsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID09ICRvcmdJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnZXZlbnQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmV2ZW50LicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NWZW51ZSgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsndmVudWUnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ3ZlbnVlJywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ3ZlbnVlLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS52ZW51ZS4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzT3JnYW5pemVyKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ29yZ2FuaXplci5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ub3JnYW5pemVyLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NJbnZvaWNlKCR0eXBlLCAkcmVjb3JkSWQsICRsb2NhbElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIGV2ZW50IG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2ludm9pY2UnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdpbnZvaWNlJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0OiAvLyBzZXQgdGhlIGRlZmF1bHQgdG8NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlicmVhazsNCgkJfQ0KCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQlpZiAoc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQl7DQoJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCXsNCgkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdpbnZvaWNlLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5pbnZvaWNlLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NQYXltZW50TWV0aG9kKCR0eXBlLCAkcmVjb3JkSWQsICRsb2NhbElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ3BheW1lbnRfbWV0aG9kJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsncGF5bWVudF9tZXRob2QnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ3BheW1lbnRfbWV0aG9kJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsncGF5bWVudF9tZXRob2QnLiRyZWNvcmRJZF0gPT0gJGxvY2FsSWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ3BheW1lbnRfbWV0aG9kLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5wYXltZW50X21ldGhvZC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzVGF4UnVsZSgkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJRCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCd0YXhfcnVsZScsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID09ICRsb2NhbElEKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdwYXltZW50X21ldGhvZC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ucGF5bWVudF9tZXRob2QuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc01lc3NhZ2VzQnVpbGRlcigkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ21lc3NhZ2VzX2J1aWxkZXInLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ21lc3NhZ2VzX2J1aWxkZXInLCAkcmVjb3JkSWQsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydtZXNzYWdlc19idWlsZGVyJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdtZXNzYWdlc19idWlsZGVyLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5tZXNzYWdlc19idWlsZGVyLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NDb25jZXB0KCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdjb25jZXB0JywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2NvbmNlcHQnLiRyZWNvcmRJZF0gPT0gJHVzZXJJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnY29uY2VwdC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uY29uY2VwdC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQ29udGVudCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnY29uY2VwdCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignY29uY2VwdCcsICRyZWNvcmRJZCwgJ2lkJywgJ2NyZWF0ZWRfYnknKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2NvbmNlcHQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbmNlcHQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgkJcmV0dXJuIHNlbGY6OiR1c2VyLT5hdXRob3Jpc2UoJ2NvbnRlbnQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbnRlbnQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQnVuZGxlKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdidW5kbGUnLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2J1bmRsZS5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uYnVuZGxlLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNJdGVtcygkdGFibGUsICR1c2VySWQgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRhcnJheSA9IChhcnJheSkgc2VsZjo6dXNlcklzKCR1c2VySWQsIHRydWUpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGFycmF5ID0gKGFycmF5KSBzZWxmOjp1c2VySXMoRmFjdG9yeTo6Z2V0VXNlcigpLT5pZCwgdHJ1ZSk7DQoJCX0NCgkJLy8gcmV0dXJuIGluIHJlbGF0aW9uDQoJCXN3aXRjaCgkYXJyYXlbJ2lzJ10pDQoJCXsNCgkJCS8vIHJlZ2lzdGVyZWQgKG9ubHkgbG9hZCBpdGVtcyB0aGF0IGJlbG9uZyB0byB0aGUgcmVnaXN0ZXJlZCB1c2VyKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIHNlbGY6OmdldFZhcnMoJHRhYmxlLCAkYXJyYXlbJ2lkJ10sICdyZWdpc3RlcmVkX3VzZXInKTsNCgkJCWJyZWFrOw0KCQkJLy8gb3JnYW5pemVyIChvbmx5IGxvYWQgaXRlbXMgdGhhdCBiZWxvbmcgdG8gdGhlIG9yZ2FuaXplcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBzZWxmOjpnZXRWYXJzKCR0YWJsZSwgJGFycmF5WydpZCddLCAnb3JnYW5pemVyJyk7DQoJCQlicmVhazsNCgkJCS8vIGFkbWluIGNhbiBhY2Nlc3MgYWxsDQoJCQljYXNlIDM6IA0KCQkJcmV0dXJuIC0xOw0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJExvY2F0aW9uZGF0YUhlbHBlciA9IGZhbHNlOyANCg0KCS8qKg0KCSogCUxvYWQgdGhlIGRhdGEgZm9yIElQIGFuZCBDdXJyZW5jeSANCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvY2F0aW9uZGF0YSgkaXAgPSBudWxsLCAkcHJvdG9jb2wgPSBudWxsLCAka2V5ID0gbnVsbCwgJGJhc2UgPSAnVVNEJywgJG1vZGUgPSAwLCAkc3RyaW5nID0gMCwgJHZhbHVlID0gMS4wMCkNCgl7CQkNCgkJaWYgKHNlbGY6OmxvYWRMb2NhdGlvbkRhdGEoKSkNCgkJew0KCQkJcmV0dXJuIExvY2F0aW9uZGF0YUhlbHBlcjo6Z2V0TG9jYXRpb25kYXRhKCRpcCwgJHByb3RvY29sLCAka2V5LCAkYmFzZSwgJG1vZGUsICRzdHJpbmcsICR2YWx1ZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIHJldHVybnMgRXhjaGFuZ2VSYXRlcw0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4Y2hhbmdlUmF0ZSgkZnJvbSwgJGZyb21WYWx1ZSwgJHRvID0gJ1VTRCcpDQoJew0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQlyZXR1cm4gTG9jYXRpb25kYXRhSGVscGVyOjpnZXRFeGNoYW5nZVJhdGUoJGZyb20sICRmcm9tVmFsdWUsICR0byk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZGF0YQ0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50KCRldmVudCwgJHR5cGUpDQoJew0KCQkvLyBpZiBvbmx5IGlkIGdpdmVuIGdldCB0aGUgb2JqZWN0DQoJCWlmIChpc19udW1lcmljKCRldmVudCkgJiYgJGV2ZW50ID4gMCApDQoJCXsNCgkJCSRldmVudCA9IHNlbGY6OmdldEFsbFZhbHVlcygkZXZlbnQsICdldmVudCcsIGFycmF5KCdldmVudF9kb2N1bWVudHMnLCdiYW5uZXJfaW1hZ2UnLCdwb3N0ZXJfaW1hZ2UnLCd0ZWFzZXJfaW1hZ2UnLCdldmVudF9pbWFnZXMnKSk7DQoJCX0NCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgZXZlbnQgb2JqZWN0LCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGRhdGENCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRldmVudCkpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBuZWVkZWQgZGF0ZXMNCgkJCWlmIChpc3NldCgkZXZlbnQtPmRhdGUpICYmICduZWUnICE9ICRldmVudC0+ZGF0ZSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmRhdGUpKQ0KCQkJew0KCQkJCSRldmVudC0+ZGF0ZSA9IGpzb25fZGVjb2RlKCRldmVudC0+ZGF0ZSwgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGNvc3QNCgkJCWlmIChpc3NldCgkZXZlbnQtPmNvc3QpICYmICduZWUnICE9ICRldmVudC0+Y29zdCAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmNvc3QpKQ0KCQkJew0KCQkJCSRldmVudC0+Y29zdCA9IGpzb25fZGVjb2RlKCRldmVudC0+Y29zdCwgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgaW1wb3J0YW50IGRhdGEgd2FzIHNldA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudC0+Y29zdCkgfHwgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5kYXRlKSkNCgkJCXsNCgkJCQkvLyBzZXQgYWRqdXN0bWVudHMNCgkJCQlpZiAoaXNzZXQoJGV2ZW50LT5hZGp1c3RtZW50KSAmJiAnbmVlJyAhPSAkZXZlbnQtPmFkanVzdG1lbnQgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5hZGp1c3RtZW50KSkNCgkJCQl7DQoJCQkJCSRldmVudC0+YWRqdXN0bWVudCA9IGpzb25fZGVjb2RlKCRldmVudC0+YWRqdXN0bWVudCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCS8vIHNldCBsaW1pdCBwZXIgZ3JvdXANCgkJCQlpZiAoaXNzZXQoJGV2ZW50LT5saW1pdHBlcmdyb3VwKSAmJiAnbmVlJyAhPSAkZXZlbnQtPmxpbWl0cGVyZ3JvdXAgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5saW1pdHBlcmdyb3VwKSkNCgkJCQl7DQoJCQkJCSRldmVudC0+bGltaXRwZXJncm91cCA9IGpzb25fZGVjb2RlKCRldmVudC0+bGltaXRwZXJncm91cCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCS8vIGZpbmFsIGNoZWNrDQoJCQkJaWYgKAlpc3NldCgkZXZlbnQtPnR5cGUpICYmIGlzX251bWVyaWMoJGV2ZW50LT50eXBlKSAmJg0KCQkJCQlpc3NldCgkZXZlbnQtPmlkKSAmJiBpc19udW1lcmljKCRldmVudC0+aWQpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50ID0gJGV2ZW50Ow0KCQkJCQkvLyBkYXRlIG9yIGp1c3QgY29zdA0KCQkJCQlyZXR1cm4gc2VsZjo6ZXZlbnRCdWlsZGVyKCR0eXBlKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkcmV0dXJuVHlwZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGV2ZW50QnVpbGRlcigkcmV0dXJuVHlwZSkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJLy8gc2V0IHRoZSByZXR1cm4gdHlwZQ0KCQlzZWxmOjokcmV0dXJuVHlwZSA9ICRyZXR1cm5UeXBlOw0KCQkvLyBzZXR1cCBhIGZpbHRlcklucHV0DQoJCXNlbGY6OiRmaWx0ZXJJbnB1dCA9IG5ldyBKRmlsdGVySW5wdXQoKTsNCgkJLy8gc2V0IHRoZSBmaWxlIHBhdGgNCgkJc2VsZjo6JGZpbGVwYXRoID0gc2VsZjo6Z2V0Rm9sZGVyUGF0aCgpOw0KCQkvLyBub3cgYWRkIHRoZSB1cmwgcGF0aCB0byBzaG93IHRoZSBpbWFnZQ0KCQlzZWxmOjokZmlsZWxpbmsgPSBzZWxmOjpnZXRGb2xkZXJQYXRoKCd1cmwnKTsNCgkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQlzZWxmOjokYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJc2VsZjo6JGxvY2tlciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKHNlbGY6OiRiYXNpY2tleSwgMTI4KTsNCgkJLy8gcmVzZXQgZ2xvYmFsDQoJCSR0aW1lU2V0ID0gZmFsc2U7DQoJCS8vIGxvYWQgY29uY2VwdCBwZXIgZGF0ZQ0KCQlpZiAoc2VsZjo6c2V0RGF0ZXMoKSkNCgkJew0KCQkJJHRpbWVTZXQgPSB0cnVlOw0KCQl9DQoJCS8vIGxvYWQgY29uY2VwdCBwZXIgY29zdA0KCQllbHNlaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCXNlbGY6OiRjb25jZXB0cyA9IGFycmF5X3VuaXF1ZShhcnJheV9maWx0ZXIoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pKTsNCgkJfQ0KCQkvLyBjaGVjayBidW5kbGVyDQoJCXNlbGY6OnNldEJ1bmRsZXIoKTsNCgkJaWYgKGlzc2V0KHNlbGY6OiRjb25jZXB0cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbmNlcHRzKSkNCgkJew0KCQkJLy8gYnVpbGQgY29uY2VwdHMNCgkJCWZvcmVhY2ggKHNlbGY6OiRjb25jZXB0cyBhcyAkZXZlbnRfY29uY2VwdF90aW1lID0+ICRjb25jZXB0KQ0KCQkJew0KCQkJCWlmICghJHRpbWVTZXQpDQoJCQkJew0KCQkJCQkkZXZlbnRfY29uY2VwdF90aW1lID0gc2VsZjo6JGV2ZW50LT5pZC4nXycuJGNvbmNlcHQuJ19fMCc7DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIGNvbmNlcHQgZGl2DQoJCQkJc2VsZjo6JGNvbmNlcHRIVE1MWyRldmVudF9jb25jZXB0X3RpbWVdID0gc2VsZjo6YnVpbGRDb25jZXB0KCRjb25jZXB0LCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJfQ0KDQoJCQkvLyBsb2FkIG9ycGhhbiBwcmljZSB2YXJpYXRpb25zDQoJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSkNCgkJCXsNCgkJCQlzZWxmOjpsb2FkT3JwaGFuVmFyaWF0aW9ucygpOw0KCQkJfQ0KDQoJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIERpc3BsYXkgQ29udGVudA0KCQkJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJCQkkY29udGVudFtdID0gJzxkaXYgaWQ9InByZXZpZXciIGNsYXNzPSJ3aXJlLWJvcmRlciI+PGRpdiBjbGFzcz0idWstZ3JpZCI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstd2lkdGgtMS0xIj4nOw0KDQoJCQkJLy8gc2V0IHRoZSBFdmVudCBTdGFydCBhbmQgRW5kIERhdGUNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10pKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJldmVudC1zdGFydC1lbmQiPicuc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10uJzwvZGl2Pic7DQoJCQkJfQ0KCQkJCS8vIHNldCBldmVudCBuYW1lDQoJCQkJaWYgKHNlbGY6OiRldmVudC0+aWQgPiAwKQ0KCQkJCXsNCgkJCQkJJGVkaXQgPSAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKSA/IHNlbGY6OmxvYWRFZGl0QnV0dG9uKCdldmVudCcsc2VsZjo6JGV2ZW50LT5pZCkgOiAnJzsNCgkJCQkJJGVkaXRDbGFzcyA9IChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZWRpdCkpID8gJyBjbGFzcz0idWstdmlzaWJsZS1ob3Zlci1pbmxpbmUiJyA6ICcnOw0KCQkJCQlzZWxmOjokZXZlbnQtPm5hbWUgPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpOw0KCQkJCQkkY29udGVudFtdID0gJzxoMicuJGVkaXRDbGFzcy4nPicuIHNlbGY6OiRldmVudC0+bmFtZSAuICRlZGl0IC4nPC9oMj4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlzZWxmOjokZXZlbnQtPm5hbWUgPSBUZXh0OjpfKCdUaGUgRXZlbnQgTmFtZScpOw0KCQkJCQkkY29udGVudFtdID0gJzxoMj48c3BhbiBpZD0iZXZlbnROYW1lIj4nLiBzZWxmOjokZXZlbnQtPm5hbWUgLic8L3NwYW4+PC9oMj4nOw0KCQkJCX0NCgkJCQkvLyBub3cgbG9hZCB0aGUgYmFubmVyDQoJCQkJaWYgKCRiYW5uZXIgPSBzZWxmOjpnZXRFdmVudEltYWdlKCdiYW5uZXJfaW1hZ2UnLCAxLCBzZWxmOjokZXZlbnQtPm5hbWUsICd1ay10aHVtYm5haWwgdWstbWFyZ2luJykpDQoJCQkJew0KCQkJCQkkY29udGVudFtdID0gJGJhbm5lcjsNCgkJCQl9DQoJCQkJLy8gc2V0IGV2ZW50IGRldGFpbHMNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kZXRhaWxzKSAmJiAgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kZXRhaWxzKSkNCgkJCQl7DQoJCQkJCSRjb250ZW50W10gPSBzZWxmOjokZXZlbnQtPmRldGFpbHM7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRjb250ZW50W10gPSAnPHA+Jy5UZXh0OjpfKCdUaGUgZXZlbnQgZGV0YWlscyBjb21lIGhlcmUnKS4nLCBsb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yLjwvcD4nOw0KCQkJCX0NCgkJCQkvLyBsb2FkIHRoZSBjb25jZXB0cw0KCQkJCSRjb250ZW50W10gPSBzZWxmOjpsb2FkQ29uY2VwdExheW91dCgpOw0KDQoJCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicpDQoJCQkJew0KCQkJCQkvLyBhZGQgZHVtbXkgYnV5IGJ1dHRvbg0KCQkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwiPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1sYXJnZSB1ay13aWR0aC0xLTEgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iYWxlcnQoXCdDYXJ0IG5vdCBhY3RpdmUgaW4gYWRtaW4gYXJlYVwnKTsiPiAnOw0KCQkJCQkkY29udGVudFtdID0gVGV4dDo6XygnVG90YWwnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc6IDxzcGFuIGlkPSJ0b3RhbCI+MC4wMDwvc3Bhbj4gLSAnOw0KCQkJCQkkY29udGVudFtdID0gVGV4dDo6XygnQnV5IE5vdycpOw0KCQkJCQkkY29udGVudFtdID0gJzwvYnV0dG9uPic7DQoJCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+JzsNCgkJCQl9DQoJCQkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQkJew0KCQkJCQkvLyB0aGUgcmVhbCBzaG9wcGluZyBjYXJ0IGJ1dHRvbg0KCQkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwiPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0iY2FydC1hY3RpdmUtYnV0dG9ucyB1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tbGFyZ2UgdWstd2lkdGgtMS00IHVrLWJ1dHRvbi1wcmltYXJ5IiBocmVmPSIjVkRNLXZpZXctY2FydC1ub3ciIGRhdGEtdWstbW9kYWw+PGkgY2xhc3M9InVrLWljb24tZXllIj48L2k+IDxzcGFuIGNsYXNzPSJ1ay1oaWRkZW4tc21hbGwiPic7DQoJCQkJCSRjb250ZW50W10gPSBUZXh0OjpfKCdWaWV3IENhcnQnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L3NwYW4+PC9hPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tbGFyZ2UgdWstd2lkdGgtMy00IHVrLWJ1dHRvbi1zdWNjZXNzIiBocmVmPSInLiBKb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XyhbW1tDb21wb25lbnRdXV1IZWxwZXJSb3V0ZTo6Z2V0Q2hlY2tvdXRSb3V0ZSgpKSAuJyI+PHNwYW4gY2xhc3M9IlZETS1jYXJ0LXRvdGFsIj48L3NwYW4+IDxzcGFuIGNsYXNzPSJ1ay1oaWRkZW4tc21hbGwiPic7DQoJCQkJCSRjb250ZW50W10gPSBUZXh0OjpfKCdDaGVjayBPdXQnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L3NwYW4+IDxpIGNsYXNzPSJ1ay1pY29uLXNob3BwaW5nLWNhcnQiPjwvaT48L2E+PC9kaXY+JzsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJjYXJ0LWluYWN0aXZlLWJ1dHRvbiI+JzsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8YSBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1sYXJnZSB1ay13aWR0aC0xLTEgdWstYnV0dG9uLXByaW1hcnkiIGhyZWY9IiNWRE0tdmlldy1jYXJ0LW5vdyIgZGF0YS11ay1tb2RhbD48aSBjbGFzcz0idWstaWNvbi1leWUiPjwvaT4gPHNwYW4gY2xhc3M9InVrLWhpZGRlbi1zbWFsbCI+JzsNCgkJCQkJJGNvbnRlbnRbXSA9IFRleHQ6Ol8oJ1ZpZXcgRW1wdHkgQ2FydCcpOw0KCQkJCQkkY29udGVudFtdID0gJzwvc3Bhbj48L2E+PC9kaXY+JzsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj48L2Rpdj48L2Rpdj4nOw0KCQkJCX0NCg0KCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+JzsNCg0KDQoJCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicpDQoJCQkJew0KCQkJCQkvLyBhZGQgc29tZSBzY3JpcHQ7DQoJCQkJCSRzY3JpcHQgPSBhcnJheSgpOw0KCQkJCQkkc2NyaXB0W10gPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPic7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgdG90YWwgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGF2YWlsYWJsZSA9IHt9Oyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgdGFrZW4gPSB7fTsgdmFyIHRpY2tldHMgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGNhcGFjaXR5ID0gJy5zZWxmOjokZXZlbnQtPmNhcGFjaXR5Lic7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeSgiI2V2ZW50TmFtZSIpLnRleHQoalF1ZXJ5KCIjamZvcm1fbmFtZSIpLnZhbCgpKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeSgiLnNlbGVjdC1idXR0b24iKS5jbGljayhmdW5jdGlvbigpIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGJ1dHRvbiA9IHRoaXMuaWQuc3BsaXQoIi0iKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGN1cnJlbnRWYWx1ZSA9IGpRdWVyeSgiIyIrYnV0dG9uWzBdKyItbnVtYmVyIikuZGF0YSgicXR5Iik7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2lmIChidXR0b25bMV0gPT0gInBsdXMiKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBuZXdWYWx1ZSA9IDEgKyArY3VycmVudFZhbHVlOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAodGlja2V0cy5oYXNPd25Qcm9wZXJ0eShidXR0b25bMF0pKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3Rha2VuW2J1dHRvblswXV0gPSBuZXdWYWx1ZTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHRvdGFsVGFrZW4gPSBzdW0odGFrZW4pOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoY2FwYWNpdHkgIT0gMCAmJiB0b3RhbFRha2VuID4gY2FwYWNpdHkpIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAnbmV3VmFsdWUgPSBuZXdWYWx1ZSAtIDE7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3Rha2VuW2J1dHRvblswXV0gPSBuZXdWYWx1ZTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnVUlraXQyLm5vdGlmeSgiVGhlIEV2ZW50IElzIEZ1bGwuIiwge3N0YXR1czpcJ3dhcm5pbmdcJ30pOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9fSc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoYXZhaWxhYmxlLmhhc093blByb3BlcnR5KGJ1dHRvblswXSkgJiYgYXZhaWxhYmxlW2J1dHRvblswXV0gIT0gMCAmJiBuZXdWYWx1ZSA9PSBhdmFpbGFibGVbYnV0dG9uWzBdXSkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdVSWtpdDIubm90aWZ5KCJUaGlzIE9wdGlvbiBpcyBGdWxsLiIsIHtzdGF0dXM6XCd3YXJuaW5nXCd9KTsgalF1ZXJ5KCIjIitidXR0b25bMF0rIi1wbHVzIikuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9IGVsc2UgaWYgKGJ1dHRvblsxXSA9PSAibWludXMiICYmIGN1cnJlbnRWYWx1ZSAhPSAwKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBuZXdWYWx1ZSA9ICtjdXJyZW50VmFsdWUgLSAxOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd0YWtlbltidXR0b25bMF1dID0gbmV3VmFsdWU7IGpRdWVyeSgiIyIrYnV0dG9uWzBdKyItcGx1cyIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30gZWxzZSBpZiAoYnV0dG9uWzFdID09ICJzZWxlY3QiKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBwcmVzc2VkID0galF1ZXJ5KHRoaXMpLmRhdGEoInNlbGVjdGlvbiIpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAocHJlc3NlZCA9PSAxKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBuZXdWYWx1ZSA9IDE7IGpRdWVyeSh0aGlzKS5kYXRhKCJzZWxlY3Rpb24iLCAyKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSBlbHNlIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIG5ld1ZhbHVlID0gMDsgalF1ZXJ5KHRoaXMpLmRhdGEoInNlbGVjdGlvbiIsIDEpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30gZWxzZSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBuZXdWYWx1ZSA9IDA7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30nOw0KCQkJCQkkc2NyaXB0W10gPSAnaWYoalF1ZXJ5KHRoaXMpLmRhdGEoIm9ubHkiKSkgeyBvbmx5U3dpdGNoKHRoaXMsbmV3VmFsdWUpOyB9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3RvdGFsU2V0dGVyKHRoaXMsbmV3VmFsdWUpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoYnV0dG9uWzFdID09ICJtaW51cyIgfHwgYnV0dG9uWzFdID09ICJwbHVzIikgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdqUXVlcnkoIiMiK2J1dHRvblswXSsiLW51bWJlciIpLmRhdGEoInF0eSIsIG5ld1ZhbHVlKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnaWYgKG5ld1ZhbHVlID09IDApIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAnbmV3VmFsdWVIVE1MID0gMDsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSBlbHNlIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAnbmV3VmFsdWVIVE1MID0gXCc8c3BhbiBjbGFzcz0idWstYmFkZ2UgdWstYmFkZ2Utbm90aWZpY2F0aW9uIHVrLWJhZGdlLXN1Y2Nlc3MiPlwnK25ld1ZhbHVlK1wnPC9zcGFuPlwnOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeSgiIyIrYnV0dG9uWzBdKyItbnVtYmVyIikuaHRtbChuZXdWYWx1ZUhUTUwpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30pO30pOyc7DQoJCQkJCSRzY3JpcHRbXSA9IGltcGxvZGUoJycsc2VsZjo6JGJ1dHRvblNjcmlwdCk7DQoJCQkJCSRzY3JpcHRbXSA9ICc8L3NjcmlwdD4nOw0KCQkJCQkvLyBsb2FkIHRoZSBkaXNwbGF5DQoJCQkJCXJldHVybiBpbXBsb2RlKCcnLCRjb250ZW50KS5pbXBsb2RlKCcnLCRzY3JpcHQpOw0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQl7DQoJCQkJCS8vIGFkZCBzb21lIHNjcmlwdDsNCgkJCQkJJHNjcmlwdCA9IGFycmF5KCk7DQoJCQkJCSRzY3JpcHRbXSA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBhdmFpbGFibGUgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHRha2VuID0ge307IHZhciB0aWNrZXRzID0ge307JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBjYXBhY2l0eSA9ICcuc2VsZjo6JGV2ZW50LT5jYXBhY2l0eS4nOyc7DQoJCQkJCSRzY3JpcHRbXSA9IGltcGxvZGUoJycsc2VsZjo6JGJ1dHRvblNjcmlwdCk7DQoJCQkJCSRzY3JpcHRbXSA9ICc8L3NjcmlwdD4nOw0KDQoJCQkJCS8vIGxvYWQgdGhlIGRpc3BsYXkNCgkJCQkJJGNvbnRlbnQgPSBpbXBsb2RlKCcnLCRjb250ZW50KS5pbXBsb2RlKCcnLCRzY3JpcHQpOw0KDQoJCQkJCS8vIGdldCB0aGUgZG9jdW1lbnRzIGZvciBkb3dubG9hZHMNCgkJCQkJaWYgKCRkb3dubG9hZHMgPSBzZWxmOjpnZXRFdmVudERvd25sb2FkcygpKQ0KCQkJCQl7DQoJCQkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJGRvd25sb2FkcyksIGFycmF5X3ZhbHVlcygkZG93bmxvYWRzKSwgJGNvbnRlbnQpOw0KCQkJCQkJLy8gcmVtb3ZlIGxpbmtzDQoJCQkJCQlmb3JlYWNoICgkZG93bmxvYWRzIGFzICRrZXkgPT4gJGxpbmspDQoJCQkJCQl7DQoJCQkJCQkJaWYgKHN0cnBvcygka2V5LCAnW0RPQ0xJTks9JykgIT09IGZhbHNlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJdW5zZXQoJGRvd25sb2Fkc1ska2V5XSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJLy8gc2V0IGV2ZW50IHBvc3Rlcg0KCQkJCQkkcG9zdGVyID0gc2VsZjo6Z2V0RXZlbnRJbWFnZSgncG9zdGVyX2ltYWdlJyk7DQoJCQkJCS8vIHNldCBldmVudCBpbWFnZXMNCgkJCQkJJGV2ZW50SW1hZ2VzID0gc2VsZjo6Z2V0RXZlbnRJbWFnZSgnZXZlbnRfaW1hZ2VzJywgMik7DQoJCQkJCSRldmVudEltYWdlV2lkdGggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ2V2ZW50X3dpZHRoJywgODAwKTsNCgkJCQkJJGV2ZW50SW1hZ2VIZWlnaHQgPSAgc2VsZjo6JHBhcmFtcy0+Z2V0KCdldmVudF9oZWlnaHQnLCA2MDApOw0KCQkJCQkNCgkJCQkJLy8gbm93IHNldCB0aGUgc2VsZWN0aW9uIG9ubHkgc3dpdGNoZXMgICgoJGJ1bmRsZSAhPSAwICYmICRidW5kbGUgPT0gJG90aGVyQnVuZGxlKSB8fCAoJGJ1bmRsZSA9PSAkb3RoZXJCdW5kbGUgJiYgJGNvbmNlcHQgPT0gJG90aGVyQ29uY2VwdCkpIDwtLS0gdGhlIEphdmFTY3JpcHQgbG9naWMNCgkJCQkJZm9yZWFjaCAoc2VsZjo6JGRpc2FibGVCdXR0b25zQ2hlY2sgYXMgJGJ1dHRvbklkID0+ICRhdCkNCgkJCQkJew0KCQkJCQkJaWYgKGlzc2V0KHNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskYXRbJ2NvbmNlcHQnXV0pKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2ggKHNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskYXRbJ2NvbmNlcHQnXV0gYXMgJG5yID0+ICRidWNrZXQpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoKChpbnQpICRhdFsnYnVuZGxlJ10gPiAwICYmIChpbnQpICRhdFsnYnVuZGxlJ10gPT0gKGludCkgJGJ1Y2tldFsnYnVuZGxlJ10pKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokZGlzYWJsZUJ1dHRvbnNbJyMjIycuJGJ1dHRvbklkLicjIyMnXSA9ICdkaXNhYmxlZCc7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQlpZiAoaXNzZXQoc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGF0WydidW5kbGUnXV0pKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2ggKHNlbGY6OiRidW5kbGVTd2l0Y2hPbmx5WyRhdFsnYnVuZGxlJ11dIGFzICRuciA9PiAkYnVja2V0KQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKChpbnQpICRhdFsnYnVuZGxlJ10gPiAwIHx8IChpbnQpICRhdFsnY29uY2VwdCddID09IChpbnQpICRidWNrZXRbJ2NvbmNlcHQnXSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJc2VsZjo6JGRpc2FibGVCdXR0b25zWycjIyMnLiRidXR0b25JZC4nIyMjJ10gPSAnZGlzYWJsZWQnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIHVwZGF0ZSB0aGUgZGlzYWJsZWQgYnV0dG9ucw0KCQkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoc2VsZjo6JGRpc2FibGVCdXR0b25zKSwgYXJyYXlfdmFsdWVzKHNlbGY6OiRkaXNhYmxlQnV0dG9ucyksICRjb250ZW50KTsNCg0KCQkJCQkvLyBub3cgbGV0cyBhZGQgdGhlIHBvc3RlciBldmVudCBpbWFnZXMgYW5kIHRoZSBkb3dubG9hZCBidXR0b25zIGlmIGZvdW5kDQoJCQkJCSR0YWJzID0gZmFsc2U7DQoJCQkJCWlmICgkcG9zdGVyIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkb3dubG9hZHMpKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJHBvc3RlciAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZG93bmxvYWRzKSkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoY291bnQoJGRvd25sb2FkcykgPT0gMSkNCgkJCQkJCQl7DQoJCQkJCQkJCSR0YWJOYW1lMiA9IFRleHQ6Ol8oJ1Bvc3RlciAmIERvd25sb2FkJyk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCSR0YWJOYW1lMiA9IFRleHQ6Ol8oJ1Bvc3RlciAmIERvd25sb2FkcycpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoJHBvc3RlcikNCgkJCQkJCXsNCgkJCQkJCQkkdGFiTmFtZTIgPSBUZXh0OjpfKCdQb3N0ZXInKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKGNvdW50KCRkb3dubG9hZHMpID09IDEpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFiTmFtZTIgPSBUZXh0OjpfKCdEb3dubG9hZCcpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFiTmFtZTIgPSBUZXh0OjpfKCdEb3dubG9hZHMnKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQkkdGFicyA9IHRydWU7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudEltYWdlcykpDQoJCQkJCXsNCgkJCQkJCWlmIChjb3VudCgkZXZlbnRJbWFnZXMpID09IDEpDQoJCQkJCQl7DQoJCQkJCQkJJHRhYk5hbWUzID0gVGV4dDo6XygnRXZlbnQgSW1hZ2UnKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkdGFiTmFtZTMgPSBUZXh0OjpfKCdFdmVudCBJbWFnZXMnKTsNCgkJCQkJCX0NCgkJCQkJCSR0YWJzID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBidWlsZCB0YWJzDQoJCQkJCWlmICgkdGFicykNCgkJCQkJew0KCQkJCQkJJHRhYkNvbnRyb2xJRCA9IG1kNShzZWxmOjokZXZlbnQtPm5hbWUuc2VsZjo6JGV2ZW50LT5pZCk7DQoJCQkJCQkkYm9keSA9IGFycmF5KCk7DQoJCQkJCQkkYm9keVtdID0gJzx1bCBjbGFzcz0idWstc3VibmF2IHVrLXN1Ym5hdi1waWxsIiBkYXRhLXVrLXN3aXRjaGVyPSJ7Y29ubmVjdDpcJyMnLiR0YWJDb250cm9sSUQuJ1wnfSI+JzsNCgkJCQkJCSRib2R5W10gPSAnPGxpPjxhIGhyZWY9IiI+Jy4gVGV4dDo6XygnUmVnaXN0ZXInKSAuJzwvYT48L2xpPic7DQoJCQkJCQlpZiAoaXNzZXQoJHRhYk5hbWUyKSkNCgkJCQkJCXsNCgkJCQkJCQkkYm9keVtdID0gJzxsaT48YSBocmVmPSIiPicuICR0YWJOYW1lMiAuJzwvYT48L2xpPic7DQoJCQkJCQl9DQoJCQkJCQlpZiAoaXNzZXQoJHRhYk5hbWUzKSkNCgkJCQkJCXsNCgkJCQkJCQkkYm9keVtdID0gJzxsaT48YSBocmVmPSIiPicuICR0YWJOYW1lMyAuJzwvYT48L2xpPic7DQoJCQkJCQl9DQoJCQkJCQkkYm9keVtdID0gJzwvdWw+JzsNCg0KCQkJCQkJJGJvZHlbXSA9ICc8dWwgaWQ9IicuJHRhYkNvbnRyb2xJRC4nIiBjbGFzcz0idWstc3dpdGNoZXIiPic7DQoJCQkJCQkkYm9keVtdID0gJzxsaT4nIC4gJGNvbnRlbnQgLiAnPC9saT4nOw0KCQkJCQkJaWYgKGlzc2V0KCR0YWJOYW1lMikpDQoJCQkJCQl7DQoJCQkJCQkJJGJvZHlbXSA9ICc8bGk+JzsNCgkJCQkJCQlpZiAoJHBvc3RlciAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZG93bmxvYWRzKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstZ3JpZCI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tNC01Ij4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzxkaXYgY2xhc3M9InVrLXBhbmVsIj4nIC4gJHBvc3RlciAuICc8L2Rpdj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzwvZGl2Pic7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTEtNSI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1wYW5lbCI+JyAuIGltcGxvZGUoJycsICRkb3dubG9hZHMpIC4gJzwvZGl2Pic7DQoJCQkJCQkJCSRib2R5W10gPSAnPC9kaXY+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8L2Rpdj4nOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlaWYgKCRwb3N0ZXIpDQoJCQkJCQkJew0KCQkJCQkJCQkkYm9keVtdID0gJHBvc3RlcjsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZG93bmxvYWRzKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRib2R5W10gPSBpbXBsb2RlKCcnLCAkZG93bmxvYWRzKTsNCgkJCQkJCQl9DQoJCQkJCQkJJGJvZHlbXSA9ICc8L2xpPic7DQoJCQkJCQl9DQoJCQkJCQlpZiAoaXNzZXQoJHRhYk5hbWUzKSkNCgkJCQkJCXsNCgkJCQkJCQkkYm9keVtdID0gJzxsaT4nOw0KCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstZ3JpZCB1ay1ncmlkLXdpZHRoLW1lZGl1bS0xLTQiIGRhdGEtdWstZ3JpZC1tYXJnaW4+JzsNCgkJCQkJCQlmb3JlYWNoICgkZXZlbnRJbWFnZXMgYXMgJHZhbCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzxhIGhyZWY9IicgLiAkdmFsWyd1cmwnXSAuICciIGRhdGEtdWstbGlnaHRib3g9Intncm91cDpcJ2dyb3VwLScgLiAkdGFiQ29udHJvbElEIC4gJ1wnfSIgdGl0bGU9IicgLiAkdmFsWyduYW1lJ10gLiAnIj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzxpbWcgc3JjPSInIC4gJHZhbFsndXJsJ10gLiAnIiBhbHQ9IiIgd2lkdGg9IicgLiAkZXZlbnRJbWFnZVdpZHRoIC4gJyIgaGVpZ2h0PSInIC4gJGV2ZW50SW1hZ2VIZWlnaHQgLiAnIj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzwvYT4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzwvZGl2Pic7DQoJCQkJCQkJfQ0KCQkJCQkJCSRib2R5W10gPSAnPC9kaXY+JzsNCgkJCQkJCQkkYm9keVtdID0gJzwvbGk+JzsNCgkJCQkJCX0NCgkJCQkJCSRib2R5W10gPSAnPC91bD4nOw0KCQkJCQkJLy8gcmV0dXJuIGJvZHkNCgkJCQkJCXJldHVybiBpbXBsb2RlKCcnLCRib2R5KTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gJGNvbnRlbnQ7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnb3B0aW9ucycgJiYgJG9wdGlvbnMgPSBzZWxmOjpnZXRFdmVudE9wdGlvbnMoKSkNCgkJCXsNCgkJCQlyZXR1cm4gJG9wdGlvbnM7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEByZXR1cm4gc3RyaW5nIGltYWdlIGxpbmsNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50SW1hZ2UoJHRhcmdldCwgJHR5cGUgPSAxLCAkbmFtZSA9IG51bGwsICRjbGFzcyA9ICd1ay1tYXJnaW4nKQ0KCXsNCgkJLy8gZ2V0IGltYWdlIGlmIG5vdCBhdmFpbGFibGUNCgkJaWYgKCghaXNzZXQoc2VsZjo6JGV2ZW50LT4kdGFyZ2V0KSB8fCAhU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT4kdGFyZ2V0KSkgJiYgc2VsZjo6JGV2ZW50LT5pZCA+IDApDQoJCXsNCgkJCXNlbGY6OiRldmVudC0+JHRhcmdldCA9IHNlbGY6OmRlY3J5cHRTdHJpbmcoc2VsZjo6Z2V0VmFyKCdldmVudCcsIHNlbGY6OiRldmVudC0+aWQsICdpZCcsICR0YXJnZXQpKTsNCgkJfQ0KCQkvLyBjaGVjayB0aGF0IGltYWdlIGlzIGpzb24NCgkJaWYgKCR0eXBlID09IDIgJiYgc2VsZjo6JGV2ZW50LT4kdGFyZ2V0ICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+JHRhcmdldCkpDQoJCXsNCgkJCSRzZXRGaWxlTmFtZSA9IGZhbHNlOw0KCQkJaWYgKCEkbmFtZSkNCgkJCXsNCgkJCQkkc2V0RmlsZU5hbWUgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gYnVpbGQgYW4gYXJyYXkgb2YgaW1hZ2VzDQoJCQkkdG1wID0ganNvbl9kZWNvZGUoc2VsZjo6JGV2ZW50LT4kdGFyZ2V0LCB0cnVlKTsNCgkJCWlmICghU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRtcCkpDQoJCQl7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkdG1wIGFzICRmaWxlTmFtZSkNCgkJCXsNCgkJCQkvLyBidWlsZCB0aGUgYXJyYXkNCgkJCQlpZiAoc3RycG9zKCRmaWxlTmFtZSwgJ18nKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICRmaWxlTmFtZSk7DQoJCQkJCSRhY3R1YWxOYW1lID0gc2VsZjo6JGV2ZW50LT5uYW1lOw0KCQkJCQlpZiAoJHNldEZpbGVOYW1lICYmIHN0cnBvcygkZmlsZU5hbWUsICdWRE0nKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCSRmaWxlTmFtZUFycmF5ID0gZXhwbG9kZSgnVkRNJywgJGZpbGVOYW1lKTsNCgkJCQkJCWlmIChpc3NldCgkZmlsZU5hbWVBcnJheVsxXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGZpbGVOYW1lQXJyYXlbMV0pKQ0KCQkJCQkJew0KCQkJCQkJCSRhY3R1YWxOYW1lID0gJGZpbGVOYW1lQXJyYXlbMV07DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJHNldEZpbGVOYW1lKQ0KCQkJCQkJew0KCQkJCQkJCSRuYW1lID0gJGFjdHVhbE5hbWU7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgYmFzaWMgYnVja2V0IGRldGFpbHMNCgkJCQkJCSR0bXBCdWNrZXQgPSBhcnJheSgpOw0KCQkJCQkJJHRtcEJ1Y2tldFsnbGluayddID0gJzxpbWcgY2xhc3M9IicuJGNsYXNzLiciIHNyYz0iJy5zZWxmOjokZmlsZWxpbmsuJGZpbGVOYW1lLicuJy4kZXh0ZW50aW9uWzJdLiciIGFsdD0iJy4gJG5hbWUgLiciPic7DQoJCQkJCQkkdG1wQnVja2V0Wyd1cmwnXSA9IHNlbGY6OiRmaWxlbGluay4kZmlsZU5hbWUuJy4nLiRleHRlbnRpb25bMl07DQoJCQkJCQkkdG1wQnVja2V0WyduYW1lJ10gPSAgJG5hbWU7DQoJCQkJCQkvLyBhZGQgdG8gYnVja2V0DQoJCQkJCQkkYnVja2V0W10gPSAkdG1wQnVja2V0Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJew0KCQkJCXJldHVybiAkYnVja2V0Ow0KCQkJfQ0KCQl9DQoJCS8vIGNoZWNrIHRoYXQgaW1hZ2UgaXMgb25seSBhIHN0cmluZw0KCQllbHNlaWYgKCR0eXBlID09IDEgJiYgaXNzZXQoc2VsZjo6JGV2ZW50LT4kdGFyZ2V0KSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPiR0YXJnZXQpKQ0KCQl7DQoJCQkvLyByZXR1cm4gb25lIGltYWdlIGxpbmsNCgkJCWlmIChzdHJwb3Moc2VsZjo6JGV2ZW50LT4kdGFyZ2V0LCAnXycpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsIHNlbGY6OiRldmVudC0+JHRhcmdldCk7DQoJCQkJJGFjdHVhbE5hbWUgPSBzZWxmOjokZXZlbnQtPm5hbWU7DQoJCQkJaWYgKHN0cnBvcyhzZWxmOjokZXZlbnQtPiR0YXJnZXQsICdWRE0nKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkZmlsZU5hbWVBcnJheSA9IGV4cGxvZGUoJ1ZETScsIHNlbGY6OiRldmVudC0+JHRhcmdldCk7DQoJCQkJCWlmIChpc3NldCgkZmlsZU5hbWVBcnJheVsxXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGZpbGVOYW1lQXJyYXlbMV0pKQ0KCQkJCQl7DQoJCQkJCQkkYWN0dWFsTmFtZSA9ICRmaWxlTmFtZUFycmF5WzFdOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChpc3NldCgkZXh0ZW50aW9uWzJdKSkNCgkJCQl7DQoJCQkJCWlmICghJG5hbWUpDQoJCQkJCXsNCgkJCQkJCSRuYW1lID0gJGFjdHVhbE5hbWU7DQoJCQkJCX0NCgkJCQkJcmV0dXJuICc8aW1nIGNsYXNzPSInLiRjbGFzcy4nIiBzcmM9Iicuc2VsZjo6JGZpbGVsaW5rLnNlbGY6OiRldmVudC0+JHRhcmdldC4nLicuJGV4dGVudGlvblsyXS4nIiBhbHQ9IicuICRuYW1lIC4nIj4nOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHJldHVybiBhcnJheSBvZiBsaW5rcw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RXZlbnREb3dubG9hZHMoKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzKSkNCgkJew0KCQkJLy8gZmlyc3QgbWFrZSBzdXJlIGl0IGlzIEpzb24gdmFsdWVzDQoJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5ldmVudF9kb2N1bWVudHMpKQ0KCQkJew0KCQkJCXNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzID0ganNvbl9kZWNvZGUoc2VsZjo6JGV2ZW50LT5ldmVudF9kb2N1bWVudHMsIHRydWUpOw0KCQkJfQ0KCQkJLy8gbm93IGNoZWNrIGlmIGl0IGlzIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5ldmVudF9kb2N1bWVudHMpKQ0KCQkJew0KCQkJCSRzZXNzaW9uVG9rZW4gPSBKb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCk7DQoJCQkJJGRvbWFpbiA9IFVyaTo6cm9vdCgpOw0KCQkJCSRkb3dubG9hZHMgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzIGFzICRmaWxlTmFtZSkNCgkJCQl7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGlzIGEgY29ycmVjdCBmaWxlIG5hbWUNCgkJCQkJaWYgKHN0cnBvcygkZmlsZU5hbWUsICdfJykgIT09IGZhbHNlICYmIHN0cnBvcygkZmlsZU5hbWUsICdWRE0nKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCSRmaWxlQXJyYXkgPSBleHBsb2RlKCdfJywgJGZpbGVOYW1lKTsNCgkJCQkJCSRuYW1lQXJyYXkgPSBleHBsb2RlKCdWRE0nLCAkZmlsZU5hbWUpOw0KCQkJCQkJLy8gbW9yZSBjaGVja3MNCgkJCQkJCWlmIChpc3NldCgkbmFtZUFycmF5WzFdKSAmJiBpc3NldCgkZmlsZUFycmF5WzJdKSkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoc2VsZjo6JGJhc2lja2V5KQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJCQkJCQkJJGxvY2FsRmlsZSA9IHNlbGY6OmJhc2U2NF91cmxlbmNvZGUoc2VsZjo6JGxvY2tlci0+ZW5jcnlwdFN0cmluZygkZmlsZU5hbWUpKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gY2FuIG5vdCBnZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0IHNvIG9ubHkgYmFzZTY0IGVuY29kZQ0KCQkJCQkJCQkkbG9jYWxGaWxlID0gc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZmlsZU5hbWUsIHRydWUpOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBidWlsZCBsaW5rIA0KCQkJCQkJCSRsaW5rID0gJGRvbWFpbiAuICdpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1kb3dubG9hZC5kb2N1bWVudCZmaWxlPScgLiAkbG9jYWxGaWxlIC4gJyZ0b2tlbj0nIC4gJHNlc3Npb25Ub2tlbjsNCgkJCQkJCQkvLyBidWlsZCB0aGUgZmlsZSBuYW1lDQoJCQkJCQkJJGZpbGVOYW1lID0gJG5hbWVBcnJheVsxXSAuICcuJyAuICRmaWxlQXJyYXlbMl07DQoJCQkJCQkJJGRvd25sb2Fkc1snW0RPQ0xJTks9Jy4kZmlsZU5hbWUuJ10nXSA9ICc8YSBocmVmPSInIC4gJGxpbmsgLiAnIiB0eXRsZT0iICcgLiBUZXh0OjpfKCdEb3dubG9hZCcpIC4gJyI+JyAuICRmaWxlTmFtZSAuICc8L2E+JzsNCgkJCQkJCQkkZG93bmxvYWRzWydbRE9DQlVUVE9OPScuJGZpbGVOYW1lLiddJ10gPSAnPGEgaHJlZj0iJyAuICRsaW5rIC4gJyIgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tc3VjY2VzcyB1ay1tYXJnaW4tc21hbGwtYm90dG9tIHVrLXdpZHRoLTEtMSI+PGkgY2xhc3M9InVrLWljb24tZG93bmxvYWQiPjwvaT4gJyAuIFRleHQ6Ol8oJ0Rvd25sb2FkJykgLiAnICcgLiAkZmlsZU5hbWUgLiAnPC9hPic7DQoJCQkJCQl9IA0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZG93bmxvYWRzKSkNCgkJCQl7DQoJCQkJCXJldHVybiAkZG93bmxvYWRzOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICR0YWJsZQ0KCSAqIEBwYXJhbSAkdmFsdWUNCgkgKiBAcmV0dXJuIGJvb2x8bWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRFZGl0QnV0dG9uKCR0YWJsZSwgJGlkKQ0KCXsJCQ0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiR1c2VyKSkNCgkJew0KCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJc2VsZjo6JHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJLy8gb25seSBsb2FkIHRvIGFkbWluIGFuZCBvcmdhbml6ZXIgd2hvIG93biB0aGlzIGl0ZW0NCgkJaWYgKHNlbGY6Omhhc0FjY2VzcygkaWQsIHNlbGY6OiR1c2VyLT5pZCwgJHRhYmxlKSkNCgkJew0KCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicpDQoJCQl7DQoJCQkJJHJlZiA9IChpc3NldChzZWxmOjokZXZlbnQtPmlkKSAmJiBzZWxmOjokZXZlbnQtPmlkID4gMCkgPyAiJnJlZj1ldmVudCZyZWZpZD0iLnNlbGY6OiRldmVudC0+aWQgOiAnJzsNCgkJCQkkZWRpdCA9ICJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdmlldz0iLiR0YWJsZS4iJnRhc2s9Ii4kdGFibGUuIi5lZGl0JmlkPSIuJGlkLiRyZWY7DQoJCQkJcmV0dXJuICcgPGEgb25jbGljaz0iVUlraXQyLm1vZGFsLmNvbmZpcm0oXCcnLlRleHQ6Ol8oJ0FsbCB1bnNhdmVkIHdvcmsgd2lsbCBiZSBsb3N0LCBhcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/JykuJ1wnLCBmdW5jdGlvbigpeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwnJy4kZWRpdC4nXCcgfSkiICBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGNsYXNzPSJ1ay1pY29uLXBlbmNpbCB1ay1oaWRkZW4iPjwvYT4nOw0KCQkJfQ0KCQkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQl7DQoJCQkJJHJlZiA9IChpc3NldChzZWxmOjokZXZlbnQtPmlkKSAmJiBzZWxmOjokZXZlbnQtPmlkID4gMCkgPyAiJnJlZj1yZWdpc3RyeSZyZWZpZD0iLnNlbGY6OiRldmVudC0+aWQgOiAnJzsNCgkJCQkkZWRpdCA9ICJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdmlldz0iLiR0YWJsZS4iJnRhc2s9Ii4kdGFibGUuIi5lZGl0JmlkPSIuJGlkLiRyZWY7DQoJCQkJcmV0dXJuICcgPGEgaHJlZj0iJy4kZWRpdC4nIiBjbGFzcz0idWstaWNvbi1wZW5jaWwgdWstaGlkZGVuIj48L2E+JzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICR0YWJsZQ0KCSAqIEBwYXJhbSAkdmFsdWUNCgkgKiBAcmV0dXJuIGJvb2x8bWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWROYW1lKCR0YWJsZSwkdmFsdWUpDQoJew0KCQlpZiAoJ2V2ZW50JyA9PT0gJHRhYmxlICYmIGlzc2V0KHNlbGY6OiRldmVudC0+bmFtZSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokZXZlbnQtPm5hbWU7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OmdldFZhcigkdGFibGUsKGludCkgJHZhbHVlLCdpZCcsJ25hbWUnKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRPcnBoYW5WYXJpYXRpb25zKCkNCgl7DQoJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJLy8gaXNvbGF0ZSB0aGUgb3JwaGFuIHZhcmlhdGlvbnMNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCSRhbm90aGVyQ29uY2VwdCA9IGFycmF5KCk7DQoJCQkkdmFyaWF0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSBhcyAka2V5ID0+ICRjb25jZXB0KQ0KCQkJew0KCQkJCWlmICghaW5fYXJyYXkoJGNvbmNlcHQsc2VsZjo6JGNvbmNlcHRzKSkNCgkJCQl7DQoJCQkJCWlmIChpc19udW1lcmljKCRjb25jZXB0KSkNCgkJCQkJew0KCQkJCQkJLy8gYW5vdGhlciBjb25jZXB0DQoJCQkJCQkkYW5vdGhlckNvbmNlcHRbJGNvbmNlcHRdID0gJGNvbmNlcHQ7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyB0b3RhbCBvcnBoYW4NCgkJCQkJCSR2YXJpYXRpb25zW3NlbGY6OiRldmVudC0+Y29zdFsndmFyaWF0aW9uJ11bJGtleV1dID0gJGtleTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGZpcnN0IGxvYWQgdGhlIG90aGVyIGNvbnNlcHRzICh0aGF0IGhhdmUgbm8gZGF0ZSAtIHRhcmdldCB3aG9sZSBldmVudCkNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYW5vdGhlckNvbmNlcHQpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRhbm90aGVyQ29uY2VwdCBhcyAkY29uY2VwdCkNCgkJCQl7DQoJCQkJCS8vIGFub3RoZXIgY29uY2VwdA0KCQkJCQlzZWxmOjokY29uY2VwdEhUTUxbc2VsZjo6JGV2ZW50LT5pZC4nXycuJGNvbmNlcHQuJ19fMCddID0gc2VsZjo6YnVpbGRDb25jZXB0KCRjb25jZXB0LHNlbGY6OiRldmVudC0+aWQuJ18nLiRjb25jZXB0LidfXzAnKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgb3JwaGFuIHZhcmlhdGlvbnMgKHRoYXQgaGF2ZSBubyBkYXRlIG9yIGNvbmNlcHQgLSB0YXJnZXQgd2hvbGUgZXZlbnQpDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZhcmlhdGlvbnMpKQ0KCQkJew0KCQkJCSRwcmljZSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHZhcmlhdGlvbnMgYXMgJHZhcmlhdGlvbiA9PiAka2V5KQ0KCQkJCXsNCgkJCQkJLy8gYW5vdGhlciB2YXJpYXRpb24gYnV0dG9uDQoJCQkJCWlmIChjb3VudCgkcHJpY2UpID4gMiAmJiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpKQ0KCQkJCQl7DQoJCQkJCQkkcHJpY2VbXSA9ICc8YnIgLz4nOw0KCQkJCQl9DQoJCQkJCWlmICgkYnV0dG9uID0gc2VsZjo6c2V0QnV5QnV0dG9ucygka2V5KSkNCgkJCQkJew0KCQkJCQkJJHByaWNlW10gPSAkYnV0dG9uOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQl7DQoJCQkJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj48ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMy01Ij48L2Rpdj48ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMi01Ij4nOw0KCQkJCQkkY29udGVudFtdID0gaW1wbG9kZSgnJywkcHJpY2UpOw0KCQkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2Pic7DQoNCgkJCQkJLy8gcmV0dXJuIHRoZSBvcnBoYW4gc3R1ZmYgdG8gYSBiZWxvbmcgKFRPRE8gLSB0aGlzIGlzIG5vdCBpZGVhbCkNCgkJCQkJc2VsZjo6JGNvbmNlcHRIVE1MW3NlbGY6OiRldmVudC0+aWQuJ185OTk5OTk5OTlfXzAnXSA9IGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudE9wdGlvbnNbJ29wdGlvbnMnXVtzZWxmOjokZXZlbnQtPmlkLidfOTk5OTk5OTk5X18wJ10gPSAkcHJpY2U7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRPcHRpb25zWydvcHRpb25zJ11bc2VsZjo6JGV2ZW50LT5pZC4nXzk5OTk5OTk5OV9fMCddKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddW3NlbGY6OiRldmVudC0+aWQuJ185OTk5OTk5OTlfXzAnXSBhcyAkbnIgPT4gJiRjb3N0aW5nKQ0KCQkJCQkJew0KCQkJCQkJCSRjb3N0aW5nWyduYW1lJ10gPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpIC4gJyAoJyAuJGNvc3RpbmdbJ25hbWUnXSAuJyknOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRjb25jZXB0cw0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ29uY2VwdExheW91dCgpDQoJew0KCQkkY29udGVudCA9IGFycmF5KCk7DQoJCSRjb25jZXB0cyA9IHNlbGY6OmdldENvbmNlcHRzSFRNTCgpOw0KCQkvLyBjaGVjayBsYXlvdXQgb3B0aW9uDQoJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlciddKSB8fCAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlciddKSkNCgkJew0KCQkJLy8gbG9hZCBkZWZhdWx0IGxheW91dA0KCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nOw0KCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nLCRjb25jZXB0cyk7DQoJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCX0NCgkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWydidW5kbGVyJ10pKQ0KCQl7DQoJCQkvLyBsb2FkIGluIGJ1bmRsZXMgbGF5b3V0DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRCdWlsZGVyWydidW5kbGVyJ10gYXMgJGJ1bmRsZSA9PiAkYXJyYXkpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nOw0KCQkJCSRlZGl0ID0gc2VsZjo6bG9hZEVkaXRCdXR0b24oJ2J1bmRsZScsICRidW5kbGUpOw0KCQkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkJJGNvbnRlbnRbXSA9ICc8aDMgY2xhc3M9InVrLXBhbmVsLXRpdGxlJy4kZWRpdENsYXNzLiciPicuIHNlbGY6OmxvYWROYW1lKCdidW5kbGUnLCRidW5kbGUpIC4gJGVkaXQgLic8L2gzPic7DQoJCQkJJGRldGFpbHMgPSBzZWxmOjpnZXRWYXIoJ2J1bmRsZScsKGludCkgJGJ1bmRsZSwnaWQnLCdkZXNjcmlwdGlvbicpOw0KCQkJCS8vIGxvYWQgYnVuZGxlIGRldGFpbHMNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRldGFpbHMpKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2PicuJGRldGFpbHMuJzwvZGl2Pic7DQoJCQkJfQ0KCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0id2lyZS1ib3JkZXIiPjxkaXYgY2xhc3M9InVrLWdyaWQiPic7DQoJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGFycmF5IGFzICRldmVudF9jb25jZXB0X3RpbWUpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCQkJew0KCQkJCQkJJGJ1Y2tldFtdID0gJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQkJCQkJdW5zZXQoJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+Jy5pbXBsb2RlKCc8L2Rpdj48ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEiPjxocj4nLCRidWNrZXQpLic8L2Rpdj4nOw0KCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+JzsNCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIG1vcmUgY29uY2VwdHMgbGVmdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb25jZXB0cykpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtc3BhY2UiPic7DQoJCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtc3BhY2UiPicsJGNvbmNlcHRzKTsNCgkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QnVuZGxlcigpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kYXRlWydidW5kbGUnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kYXRlWydidW5kbGUnXSkpDQoJCXsNCgkJCSRidW5kbGVyID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKHNlbGY6OiRldmVudC0+ZGF0ZVsnYnVuZGxlJ10gYXMgJGtleSA9PiAkYnVuZGxlKQ0KCQkJew0KCQkJCSRjb25jZXB0ID0gc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJGtleV07DQoJCQkJaWYgKGlzX251bWVyaWMoJGJ1bmRsZSkpDQoJCQkJew0KCQkJCQlpZiAoJGtleV90aW1lID0gc2VsZjo6Z2V0RXZlbnRDb25jZXB0VGltZSgka2V5KSkNCgkJCQkJew0KCQkJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV90aW1lXVsnc3RhcnQnXSkpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddWyRrZXlfdGltZV1bJ3N0YXJ0J10gPSAwOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGtleV90aW1lID0gMDsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVswXVsnc3RhcnQnXSA9IDA7DQoJCQkJCX0NCg0KCQkJCQkkYnVuZGxlcltdID0gYXJyYXkoJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSwgJ2NvbmNlcHQnID0+IChpbnQpICRjb25jZXB0LCAnc3RhcnQnID0+IChpbnQpIHNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVska2V5X3RpbWVdWydzdGFydCddKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiBhbnkgYnVuZGxlcyBoYXMgYmVlbiBsb2FkZWQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVuZGxlcikpDQoJCQl7DQoJCQkJLy8gc29ydCB0aGUgYnVuZGxlcw0KCQkJCXVzb3J0KCRidW5kbGVyLCBmdW5jdGlvbigkYSwgJGIpIHsNCgkJCQkJcmV0dXJuICRhWydzdGFydCddIC0gJGJbJ3N0YXJ0J107DQoJCQkJfSk7DQoJCQkJLy8gcGFjayB0aGUgYnVuZGxlcw0KCQkJCWZvcmVhY2ggKCRidW5kbGVyIGFzICRhcnJheSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2J1bmRsZXInXVskYXJyYXlbJ2J1bmRsZSddXVtzZWxmOjokZXZlbnQtPmlkLidfJy4kYXJyYXlbJ2NvbmNlcHQnXS4nX18nLiRhcnJheVsnc3RhcnQnXV0gPSBzZWxmOjokZXZlbnQtPmlkLidfJy4kYXJyYXlbJ2NvbmNlcHQnXS4nX18nLiRhcnJheVsnc3RhcnQnXTsNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bc2VsZjo6JGV2ZW50LT5pZC4nXycuJGFycmF5Wydjb25jZXB0J10uJ19fJy4kYXJyYXlbJ3N0YXJ0J11dID0gJGFycmF5WydidW5kbGUnXTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGNvbmNlcHQNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkQ29uY2VwdCgmJGNvbmNlcHQsICRldmVudF9jb25jZXB0X3RpbWUpDQoJew0KCQkkY29udGVudCA9IGFycmF5KCk7DQoJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJew0KCQkJaWYgKGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddKSkNCgkJCXsNCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9ImNvbmNlcHQtc3RhcnQtZW5kIj4nLnNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddLic8L2Rpdj4nOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhpcyBjb25jZXB0IGlzIGFscmVhZHkgbG9hZGVkDQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0pKQ0KCQkJew0KCQkJCXNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0gPSBzZWxmOjpnZXRBbGxWYWx1ZXMoJGNvbmNlcHQsICdjb25jZXB0JywgYXJyYXkoJ2NvbmNlcHRfaW1hZ2UnKSk7DQoJCQl9DQoJCQkvLyBvbmx5IGNvbnRpbnVlIGlmIHdlIGhhdmUgdmFsdWVzDQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0pKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSRlZGl0ID0gc2VsZjo6bG9hZEVkaXRCdXR0b24oJ2NvbmNlcHQnLCRjb25jZXB0KTsNCgkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkkY29udGVudFtdID0gJzxoMyBjbGFzcz0idWstcGFuZWwtdGl0bGUnLiRlZGl0Q2xhc3MuJyI+Jy5zZWxmOjokY29uY2VwdERhdGFbJGNvbmNlcHRdLT5uYW1lIC4gJGVkaXQgLic8L2gzPic7DQoJCQkvLyBhZGQgY29uY2VwdCBpbWFnZQ0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0tPmNvbmNlcHRfaW1hZ2UpICYmIHN0cnBvcyhzZWxmOjokY29uY2VwdERhdGFbJGNvbmNlcHRdLT5jb25jZXB0X2ltYWdlLCAnXycpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+Y29uY2VwdF9pbWFnZSk7DQoJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwiIHNyYz0iJy5zZWxmOjokZmlsZWxpbmsuc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+Y29uY2VwdF9pbWFnZS4nLicuJGV4dGVudGlvblsyXS4nIiBhbHQ9ImNvbmNlcHQgaW1hZ2UiPic7DQoJCQkJfQ0KCQkJfQ0KCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj4nOw0KDQoJCQkvLyB3b3Jrb3V0IHdpZHRocw0KCQkJJGNvbmNlcHREZXRhaWxzID0gZmFsc2U7DQoJCQkkY29uY2VwdENvbnRlbnQgPSBmYWxzZTsNCgkJCSRjb25jZXB0Q29zdGluZyA9IGZhbHNlOw0KCQkJJHNldFNwYWNlciA9IGZhbHNlOw0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0tPmRldGFpbHMpKQ0KCQkJew0KCQkJCSRjb25jZXB0RGV0YWlscyA9IHRydWU7DQoJCQl9DQoJCQlpZiAoc2VsZjo6c2V0Q29uY2VwdENvbnRlbnQoJGV2ZW50X2NvbmNlcHRfdGltZSkpDQoJCQl7DQoJCQkJJGNvbmNlcHRDb250ZW50ID0gdHJ1ZTsNCgkJCX0NCgkJCWlmIChzZWxmOjpzZXRDb25jZXB0Q29zdGluZygkY29uY2VwdCwkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCXsNCgkJCQkkY29uY2VwdENvc3RpbmcgPSB0cnVlOw0KCQkJfQ0KCQkJaWYgKCRjb25jZXB0RGV0YWlscyAmJiAkY29uY2VwdENvbnRlbnQgJiYgJGNvbmNlcHRDb3N0aW5nKQ0KCQkJew0KCQkJCS8vIHRocmVlIGlzIHRydWUNCgkJCQkkd2lkdGhzRGV0YWlscyA9IDE7DQoJCQkJJHdpZHRoc0NvbnRlbnQgPSAyOw0KCQkJfQ0KCQkJZWxzZWlmICgkY29uY2VwdERldGFpbHMgeG9yICRjb25jZXB0Q29udGVudCB4b3IgJGNvbmNlcHRDb3N0aW5nKQ0KCQkJew0KCQkJCS8vIG9uZSBpcyB0cnVlDQoJCQkJJHdpZHRoc0RldGFpbHMgPSA1Ow0KCQkJCSR3aWR0aHNDb250ZW50ID0gNTsNCgkJCQkvLyBsb2FkIGJsYW5rIHNwYWNlcg0KCQkJCSRzZXRTcGFjZXIgPSB0cnVlOw0KCQkJfQ0KCQkJZWxzZWlmICgkY29uY2VwdERldGFpbHMgfHwgJGNvbmNlcHRDb250ZW50IHx8ICRjb25jZXB0Q29zdGluZykNCgkJCXsNCgkJCQkvLyB0d28gaXMgdHJ1ZQ0KCQkJCWlmICgkY29uY2VwdENvc3RpbmcpDQoJCQkJew0KCQkJCQkkd2lkdGhzRGV0YWlscyA9IDM7DQoJCQkJCSR3aWR0aHNDb250ZW50ID0gMzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHdpZHRoc0RldGFpbHMgPSAyOw0KCQkJCQkkd2lkdGhzQ29udGVudCA9IDM7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbG9hZCBjb25jZXB0IGRldGFpbHMNCgkJCWlmICgkY29uY2VwdERldGFpbHMgJiYgaXNzZXQoc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XSkgJiYgaXNzZXQoc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+ZGV0YWlscykpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tJy4kd2lkdGhzRGV0YWlscy4nLTUiPic7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2Picuc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+ZGV0YWlscy4nPC9kaXY+JzsNCgkJCQkkY29udGVudFtdID0gJzwvZGl2Pic7DQoJCQl9DQoJCQkvLyBzZXQgc29tZSBjb250ZW50DQoJCQlpZiAoJGNvbmNlcHRDb250ZW50ICYmIGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXSkgJiYgaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJew0KCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLScuJHdpZHRoc0NvbnRlbnQuJy01Ij4nOw0KCQkJCSRjb250ZW50W10gPSBpbXBsb2RlKCcnLHNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXSk7DQoJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJfQ0KCQkJLy8gc2V0IHNvbWUgY29udGVudA0KCQkJaWYgKCRjb25jZXB0Q29zdGluZyAmJiBpc3NldChzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudE9wdGlvbnNbJ2Rpc3BsYXknXVskZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCQl7DQoJCQkJaWYgKCRzZXRTcGFjZXIpDQoJCQkJew0KCQkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0zLTUiPic7DQoJCQkJCSRjb250ZW50W10gPSAnPC9kaXY+JzsNCgkJCQl9DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMi01Ij4nOw0KCQkJCSRjb250ZW50W10gPSBpbXBsb2RlKCcnLHNlbGY6OiRldmVudE9wdGlvbnNbJ2Rpc3BsYXknXVskZXZlbnRfY29uY2VwdF90aW1lXSk7DQoJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJfQ0KCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KDQoJCQlyZXR1cm4gaW1wbG9kZSgnJywkY29udGVudCk7DQoJCX0NCgkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnb3B0aW9ucycpDQoJCXsNCgkJCWlmIChzZWxmOjpzZXRDb25jZXB0Q29zdGluZygkY29uY2VwdCwkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCXsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKHNlbGY6OiRldmVudE9wdGlvbnNbJ29wdGlvbnMnXVskZXZlbnRfY29uY2VwdF90aW1lXSBhcyAkbnIgPT4gJiRjb3N0aW5nKQ0KCQkJCQl7DQoJCQkJCQkkY29zdGluZ1snbmFtZSddID0gc2VsZjo6bG9hZE5hbWUoJ2V2ZW50JyxzZWxmOjokZXZlbnQtPmlkKSAuICcgKCcgLnNlbGY6OmxvYWROYW1lKCdjb25jZXB0JywkY29uY2VwdCkgLiAnIC0gJyAuICRjb3N0aW5nWyduYW1lJ10gLicpJzsNCgkJCQkJCWlmIChpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRldmVudF9jb25jZXB0X3RpbWVdWydzdGFydC1lbmQnXSkpDQoJCQkJCQl7DQoJCQkJCQkJJGNvc3RpbmdbJ2RhdGUnXSA9IHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gYm9vbA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0Q29uY2VwdENvbnRlbnQoJiRldmVudF9jb25jZXB0X3RpbWUpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGxvY2F0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCXsNCgkJCSRrZXkgPSBzZWxmOjpnZXRMb2NhdGlvbigkZXZlbnRfY29uY2VwdF90aW1lKTsNCgkJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmRhdGVbJ2NvbnRlbnQnXVska2V5XSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kYXRlWydjb250ZW50J11bJGtleV0pKQ0KCQkJew0KCQkJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXSA9IGFycmF5KCk7DQoJCQkJfQ0KCQkJCWZvcmVhY2ggKHNlbGY6OiRldmVudC0+ZGF0ZVsnY29udGVudCddWyRrZXldIGFzICRjb250ZW50KQ0KCQkJCXsNCgkJCQkJLy8gY2hlY2sgaWYgdGhpcyBjb250ZW50IGlzIGFscmVhZHkgbG9hZGVkDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XSkpDQoJCQkJCXsNCgkJCQkJCS8vIGxvYWQgdGhlIGRhdGENCgkJCQkJCXNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0gPSBzZWxmOjpnZXRBbGxWYWx1ZXMoJGNvbnRlbnQsICdjb250ZW50JywgYXJyYXkoJ2NvbnRlbnRfaW1hZ2UnKSk7DQoJCQkJCX0NCgkJCQkJLy8gb25seSBsb2FkIHRoZSBjb250ZW50IGlmIHdlIGhhdmUgdmFsdWVzDQoJCQkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoJCQkJCS8vIG5vdyBsb2FkIHRoZSBiYW5uZXINCgkJCQkJJGJhbm5lciA9IGZhbHNlOw0KCQkJCQlpZiAoaXNzZXQoc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+Y29udGVudF9pbWFnZSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+Y29udGVudF9pbWFnZSkgJiYgc3RycG9zKHNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmNvbnRlbnRfaW1hZ2UsICdfJykgIT09IGZhbHNlKQ0KCQkJCQl7DQoJCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsIHNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmNvbnRlbnRfaW1hZ2UpOw0KCQkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQkJew0KCQkJCQkJCSRiYW5uZXIgPSAnPGltZyBjbGFzcz0idWstdGh1bWJuYWlsIHVrLW1hcmdpbiIgc3JjPSInLnNlbGY6OiRmaWxlbGluay5zZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5jb250ZW50X2ltYWdlLicuJy4kZXh0ZW50aW9uWzJdLiciIGFsdD0iJy5zZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5uYW1lLiciPic7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJJGVkaXQgPSBzZWxmOjpsb2FkRWRpdEJ1dHRvbignY29udGVudCcsJGNvbnRlbnQpOw0KCQkJCQkkZWRpdENsYXNzID0gKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRlZGl0KSkgPyAnIHVrLXZpc2libGUtaG92ZXItaW5saW5lJyA6ICcnOw0KCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+ZGV0YWlscykgfHwgJGJhbm5lcikNCgkJCQkJew0KCQkJCQkJJHJhbmRvbSA9IHNlbGY6OnJhbmRvbWtleSg1KTsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXVtdID0gJzxkaXYgY2xhc3M9InVrLW1hcmdpbicuJGVkaXRDbGFzcy4nIj48YSBocmVmPSIjIiBkYXRhLXVrLXRvZ2dsZT0ie3RhcmdldDpcJyNjb24nLiRyYW5kb20uJ1wnfSI+Jy5zZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5uYW1lLic8L2E+JyAuICRlZGl0IC4nPC9kaXY+JzsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXVtdID0gJzxkaXYgaWQ9ImNvbicuJHJhbmRvbS4nIiBjbGFzcz0idWstaGlkZGVuIj4nOw0KCQkJCQkJaWYgKCRiYW5uZXIpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAkYmFubmVyOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmRldGFpbHMpIHx8ICRiYW5uZXIpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSBzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5kZXRhaWxzOw0KCQkJCQkJfQ0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAnPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXVtdID0gJzxkaXYgY2xhc3M9InVrLW1hcmdpbicuJGVkaXRDbGFzcy4nIj4nLnNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPm5hbWUgLiAkZWRpdCAuJzwvZGl2Pic7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gZm91bmQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRjb25jZXB0DQoJICogQHBhcmFtICRldmVudF9jb25jZXB0X3RpbWUNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldENvbmNlcHRDb3N0aW5nKCYkY29uY2VwdCwmJGV2ZW50X2NvbmNlcHRfdGltZSkNCgl7DQoJCSRmb3VuZCA9IGZhbHNlOw0KCQkvLyBjaGVjayBpZiB0aGlzIGNvbmNlcHQgaGFzIGEgdmFyaWF0aW9uIHJlbGF0aW9uDQoJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pICYmIGluX2FycmF5KCRjb25jZXB0LCBzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCSRleHRyYXMgPSBhcnJheSgpOw0KCQkJJGJ1dHRvbnMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10gYXMgJGtleSA9PiAkY2hlY2tlcikNCgkJCXsNCgkJCQlpZiAoJGNvbmNlcHQgPT0gJGNoZWNrZXIgJiYgaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0WydwcmljZSddWyRrZXldKSAmJiBpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ3ZhcmlhdGlvbiddWyRrZXldKSAmJiAhc2VsZjo6JGV2ZW50LT5jb3N0WydleHRyYSddWyRrZXldKQ0KCQkJCXsNCgkJCQkJaWYgKGNvdW50KCRidXR0b25zKSA+IDIgJiYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKSkNCgkJCQkJew0KCQkJCQkJJGJ1dHRvbnNbXSA9ICc8YnIgLz4nOw0KCQkJCQl9DQoJCQkJCWlmICgkYnV0dG9uID0gc2VsZjo6c2V0QnV5QnV0dG9ucygka2V5LCAkY29uY2VwdCwgJGV2ZW50X2NvbmNlcHRfdGltZSkpDQoJCQkJCXsNCgkJCQkJCSRidXR0b25zW10gPSAkYnV0dG9uOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJGNvbmNlcHQgPT0gJGNoZWNrZXIgJiYgaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0WydwcmljZSddWyRrZXldKSAmJiBpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ3ZhcmlhdGlvbiddWyRrZXldKSAmJiBzZWxmOjokZXZlbnQtPmNvc3RbJ2V4dHJhJ11bJGtleV0pDQoJCQkJew0KCQkJCQlpZiAoY291bnQoJGV4dHJhcykgPiAyICYmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykpDQoJCQkJCXsNCgkJCQkJCSRleHRyYXNbXSA9ICc8YnIgLz4nOw0KCQkJCQl9DQoJCQkJCWlmICgkYnV0dG9uID0gc2VsZjo6c2V0QnV5QnV0dG9ucygka2V5LCAkY29uY2VwdCwgJGV2ZW50X2NvbmNlcHRfdGltZSkpDQoJCQkJCXsNCgkJCQkJCSRleHRyYXNbXSA9ICRidXR0b247DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBsb2FkIHRoZSBidXR0b25zDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGJ1dHRvbnMpKQ0KCQkJew0KCQkJCS8vIGlnbml0ZSB0aGUgZW5naW5lDQoJCQkJc2VsZjo6c3RhcnRFdmVudE9wdGlvbnNCdWlsZGVyKCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJCS8vIGxvYWQgdGhlIHBheWxvYWQNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQkJew0KCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9IGltcGxvZGUoJycsJGJ1dHRvbnMpOw0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudE9wdGlvbnNbJ29wdGlvbnMnXVskZXZlbnRfY29uY2VwdF90aW1lXSA9ICRidXR0b25zOw0KCQkJCX0NCgkJCQkkZm91bmQgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gbG9hZCB0aGUgZXh0cmFzDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGV4dHJhcykpDQoJCQl7DQoJCQkJLy8gaWduaXRlIHRoZSBlbmdpbmUNCgkJCQlzZWxmOjpzdGFydEV2ZW50T3B0aW9uc0J1aWxkZXIoJGV2ZW50X2NvbmNlcHRfdGltZSk7DQoJCQkJLy8gbG9hZCB0aGUgcGF5bG9hZA0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQl7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9ICc8aHI+JzsNCgkJCQkJfQ0KCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9IGltcGxvZGUoJycsJGV4dHJhcyk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ29wdGlvbnMnKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddWyRldmVudF9jb25jZXB0X3RpbWVdID0gYXJyYXlfbWVyZ2Uoc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddWyRldmVudF9jb25jZXB0X3RpbWVdLCAkZXh0cmFzKTsNCgkJCQl9DQoJCQkJJGZvdW5kID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGZvdW5kOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc3RhcnRFdmVudE9wdGlvbnNCdWlsZGVyKCYkZXZlbnRfY29uY2VwdF90aW1lKQ0KCXsNCgkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQl7DQoJCQkvLyBzZXQgYXJyYXkgaWYgbm90IHNldA0KCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudE9wdGlvbnNbJ2Rpc3BsYXknXVskZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCQl7DQoJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1snZGlzcGxheSddWyRldmVudF9jb25jZXB0X3RpbWVdID0gYXJyYXkoKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJew0KCQkJLy8gc2V0IGFycmF5IGlmIG5vdCBzZXQNCgkJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddWyRldmVudF9jb25jZXB0X3RpbWVdKSB8fCBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRPcHRpb25zWydvcHRpb25zJ11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJew0KCQkJCXNlbGY6OiRldmVudE9wdGlvbnNbJ29wdGlvbnMnXVskZXZlbnRfY29uY2VwdF90aW1lXSA9IGFycmF5KCk7DQoJCQl9DQoJCX0JDQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRrZXkNCgkgKiBAcGFyYW0gaW50ICRjb25jZXB0DQoJICogQHBhcmFtIHN0cmluZyAkZXZlbnRfY29uY2VwdF90aW1lDQoJICogQHJldHVybiBhcnJheXxib29sfHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QnV5QnV0dG9ucygka2V5LCAkY29uY2VwdCA9IDAsICRldmVudF9jb25jZXB0X3RpbWUgPSAnMF9fMCcpDQoJew0KCQkvLyAxIDwtIGluZGl2aWR1YWwgYW5kIGdyb3VwDQoJCS8vIDIgPC0gb25seSBpbmRpdmlkdWFsDQoJCS8vIDMgPC0gb25seSBncm91cA0KCQkvLyA0IDwtIGN1c3RvbSByZWcNCgkJLy8gNSA8LSBjbG9zZSByZWcNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+aWQpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIHByaWNlDQoJCQlpZiAoc2VsZjo6JGV2ZW50LT50eXBlICE9IDUgJiYgKCRjb25jZXB0UHJpY2UgPSBzZWxmOjpnZXRDb25jZXB0UHJpY2UoJGtleSkpKQ0KCQkJew0KCQkJCSR2YXJpYXRpb24gPSAoaW50KSBzZWxmOjokZXZlbnQtPmNvc3RbJ3ZhcmlhdGlvbiddWyRrZXldOw0KCQkJCSRxdHkgPSAoaW50KSBzZWxmOjokZXZlbnQtPmNvc3RbJ3F0eSddWyRrZXldOw0KCQkJCSRvbmx5ID0gKGludCkgc2VsZjo6JGV2ZW50LT5jb3N0Wydvbmx5J11bJGtleV07DQoJCQkJJGV4dHJhID0gKGludCkgc2VsZjo6JGV2ZW50LT5jb3N0WydleHRyYSddWyRrZXldOw0KCQkJCSR0YXhlZCA9IChpbnQpIHNlbGY6OiRldmVudC0+Y29zdFsndGF4ZWQnXVska2V5XTsNCgkJCQkvLyBidWlsZCBzd3RpY2ggaWQNCgkJCQkkYnVuZGxlID0gMDsNCgkJCQkkdGltZSA9IGV4cGxvZGUoJ19fJywkZXZlbnRfY29uY2VwdF90aW1lKTsNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJCXsNCgkJCQkJJGJ1bmRsZSA9IHNlbGY6OiRldmVudEJ1aWxkZXJbJ2J1bmRsZSddWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQkJCX0NCgkJCQkvLyBzd2l0Y2ggSUQNCgkJCQkkc3dpdGNoSUQgPSBzZWxmOjokZXZlbnQtPmlkIC4gJ18nIC4gKGludCkgJGJ1bmRsZSAuICdfJyAuKGludCkgJHRpbWVbMV0gLiAnXycgLihpbnQpICRjb25jZXB0IC4gJ18nIC4gKGludCkgJHZhcmlhdGlvbjsNCgkJCQkvLyBzdGFydCBidWlsZGluZyB0aGUgYnV0dG9uDQoJCQkJJGJ1dHRvbiA9IGFycmF5KCk7DQoJCQkJaWYgKHNlbGY6OiRldmVudC0+dHlwZSA9PSA0KQ0KCQkJCXsNCgkJCQkJLy8gc2V0IGxpbmsgaWYgbm90IHNldA0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRldmVudC0+Y3VzdG9tdXJsKSAmJiBzZWxmOjokZXZlbnQtPmlkID4gMCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGV2ZW50LT5jdXN0b211cmwgPSBzZWxmOjpnZXRWYXIoJ2V2ZW50Jywgc2VsZjo6JGV2ZW50LT5pZCwgJ2lkJywgJ2N1c3RvbXVybCcpOw0KCQkJCQl9DQoJCQkJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5jdXN0b211cmwpKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokZXZlbnQtPmN1c3RvbXVybCA9ICcjQ1VTVE9NX0xJTksnOw0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0aGUgbmVlZGVkIHZhcnMgdG8gcGFzcyB0aGUgc2VsZWN0aW9uDQoJCQkJCSRzZWxlY3Rpb25WYWx1ZSA9ICRzd2l0Y2hJRCAuICdfXycgLiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX1RPJ10gLiAnX18nIC4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9JRCddOw0KCQkJCQkkc2VsZWN0aW9uVmFyID0gJyZbW1tjb21wb25lbnRdXV1fc2VsZWN0aW9uPScuJHNlbGVjdGlvblZhbHVlOw0KCQkJCQkkYnV0dG9uW10gPSAnPGRpdiAgY2xhc3M9InVrLXdpZHRoLTEtMSB1ay10ZXh0LWJvbGQgdWstdGV4dC1zdWNjZXNzIHVrLXRleHQtbGFyZ2UiPic7DQoJCQkJCSRidXR0b25bXSA9IHNlbGY6OmxvYWROYW1lKCd2YXJpYXRpb24nLCR2YXJpYXRpb24pOw0KCQkJCQkkYnV0dG9uW10gPSAnICAnIC4kY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX1RPX01PTkVZJ107DQoJCQkJCSRidXR0b25bXSA9ICc8L2Rpdj4nOw0KCQkJCQkkYnV0dG9uW10gPSAnPGEgaHJlZj0iJyAuIHNlbGY6OiRldmVudC0+Y3VzdG9tdXJsIC4gJHNlbGVjdGlvblZhciAuICciIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEiIHRhcmdldD0iX2JsYW5rIj4nOw0KCQkJCQkkYnV0dG9uW10gPSBUZXh0OjpfKCdSZWdpc3RlcicpOw0KCQkJCQkkYnV0dG9uW10gPSAnPC9hPic7DQoNCgkJCQkJJGJ1eUlkID0gbnVsbDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gY2hlY2tpbmcgSUQNCgkJCQkJJGNoZWNraW5nSUQgPSBzZWxmOjokZXZlbnQtPm9yZ2FuaXplciAuICdfJyAuICRzd2l0Y2hJRDsNCgkJCQkJLy8gY2hlY2tpbmcgS0VZDQoJCQkJCSRJREtFWSA9IG1kNSgkY2hlY2tpbmdJRCk7DQoJCQkJCS8vIHNldCBidXkgSUQNCgkJCQkJJGJ1eUlkID0gJElES0VZIC4gJ19fJyAuICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE8nXSAuICdfXycgLiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX0lEJ107DQoJCQkJCS8vIGdldCBxdHkgYXZhaWxhYmxlDQoJCQkJCSRhY3R1YWxRVFkgPSBzZWxmOjpnZXRRdHlBdmFpbGFibGUoJHF0eSwgJ3ZhcmlhdGlvbicsICRjaGVja2luZ0lEKTsNCgkJCQkJLy8gZ2V0IHF0eSB0aGlzIHVzZXIgaGFzIHNlbGVjdGVkIA0KCQkJCQkkc2VsZWN0ZWRRVFkgPSBzZWxmOjphY3RpdmVDYXJ0UXR5KCRjaGVja2luZ0lEKTsNCgkJCQkJLy8gc2V0IHZhcmlhdGlvbiBuYW1lDQoJCQkJCSR2YXJpYXRpb25OYW1lID0gc2VsZjo6bG9hZE5hbWUoJ3ZhcmlhdGlvbicsJHZhcmlhdGlvbik7DQoJCQkJCS8vIHNldCBidXR0b24gYnkgSUQNCgkJCQkJJGJ1dHRvbklkID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkYnV5SWQsICdjQW1lbCcpOw0KCQkJCQkvLyB3ZSByZW1vdmUgZGlzYWJsZXIgaWYgbm90IG5lZWRlZA0KCQkJCQlzZWxmOjokZGlzYWJsZUJ1dHRvbnNbJyMjIycuJGJ1dHRvbklkLicjIyMnXSA9ICcnOw0KCQkJCQlpZiAoIHNlbGY6OiRyZXR1cm5UeXBlICE9PSAnb3B0aW9ucycpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBzb21lIEphdmFTY3JpcHQgdmFsdWVzDQoJCQkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJykNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokYnV0dG9uU2NyaXB0W10gPSAnYXZhaWxhYmxlWyInLiRidXR0b25JZC4nIl0gPSAnLiAoaW50KSAkcXR5Lic7JzsNCgkJCQkJCX0NCgkJCQkJCS8vIHRpY2tldCBiZWhhdmlvciANCgkJCQkJCWlmICghJGV4dHJhKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRidXR0b25TY3JpcHRbXSA9ICd0aWNrZXRzWyInLiRidXR0b25JZC4nIl0gPSAxOyc7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgdGhlIG9ubHkgc3dpdGNoDQoJCQkJCQkkb25seVN3aXRjaCA9ICcnOw0KCQkJCQkJaWYgKDEgPT0gJG9ubHkgJiYgISRleHRyYSkNCgkJCQkJCXsNCgkJCQkJCQkkb25seVN3aXRjaCA9ICdkYXRhLW9ubHk9IjEiJzsNCgkJCQkJCQkvLyBtYWtlIHN1cmUgc2VsZWN0ZWQgb25seSB2YWx1ZXMgYXJlIHNldCBhZ2Fpbg0KCQkJCQkJCWlmICgkc2VsZWN0ZWRRVFkgPiAwKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gbG9hZCBwZXIgY29uY2VwdA0KCQkJCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskY29uY2VwdF0pKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokY29uY2VwdFN3aXRjaE9ubHlbJGNvbmNlcHRdID0gYXJyYXkoKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyB0aGlzIGlzIHRoZSBhY3RpdmUgc2VsZWN0aW9uDQoJCQkJCQkJCXNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskY29uY2VwdF1bXSA9IGFycmF5KCdjb25jZXB0JyA9PiAoaW50KSAkY29uY2VwdCwgJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSk7DQoJCQkJCQkJCS8vIGxvYWQgcGVyIGJ1bmRsZQ0KCQkJCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRidW5kbGVTd2l0Y2hPbmx5WyRidW5kbGVdKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGJ1bmRsZV0gPSBhcnJheSgpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIHRoaXMgaXMgdGhlIGFjdGl2ZSBzZWxlY3Rpb24NCgkJCQkJCQkJc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGJ1bmRsZV1bXSA9IGFycmF5KCdjb25jZXB0JyA9PiAoaW50KSAkY29uY2VwdCwgJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCXNlbGY6OiRkaXNhYmxlQnV0dG9uc0NoZWNrWyRidXR0b25JZF0gPSBhcnJheSgnY29uY2VwdCcgPT4gKGludCkgJGNvbmNlcHQsICdidW5kbGUnID0+IChpbnQpICRidW5kbGUpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRidXR0b25bXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEgdWstdGV4dC1ib2xkIHVrLXRleHQtc3VjY2VzcyB1ay10ZXh0LWxhcmdlIj4nOw0KCQkJCQkJJGJ1dHRvbltdID0gJHZhcmlhdGlvbk5hbWU7DQoJCQkJCQkkYnV0dG9uW10gPSAnPGJyIGNsYXNzPSJ1ay12aXNpYmxlLXNtYWxsIi8+ICA8c3BhbiBjbGFzcz0iJy4kYnV0dG9uSWQuJy1wcmljZSI+JyAuICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE9fTU9ORVknXSAuJzwvc3Bhbj4nOw0KCQkJCQkJJGJ1dHRvbltdID0gJzwvZGl2Pic7DQoNCgkJCQkJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIHN0aWxsIHBsYWNlIG9wZW4gb24gdGhpcyB2YXJpYXRpb24NCgkJCQkJCWlmICgkcXR5ICE9IDAgJiYgJGFjdHVhbFFUWSA8PSAwICYmICRzZWxlY3RlZFFUWSA8PSAwICYmIHNlbGY6OiRyZXR1cm5UeXBlICE9PSAnYWRtaW4nKQ0KCQkJCQkJew0KCQkJCQkJCS8vIHN0YXJ0IGJ1aWxkaW5nIHRoZSBidXR0b24NCgkJCQkJCQkkYnV0dG9uID0gYXJyYXkoKTsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtMS0xIHVrLXRleHQtYm9sZCB1ay10ZXh0LW11dGVkIHVrLXRleHQtbGFyZ2UiPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJHZhcmlhdGlvbk5hbWU7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxiciBjbGFzcz0idWstdmlzaWJsZS1zbWFsbCIvPiAnIC4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UT19NT05FWSddIC4nIDxzbWFsbD4oJyAuIFRleHQ6Ol8oJ1RoaXMgT3B0aW9uIGlzIEZ1bGwuJykgLiAnKTwvc21hbGw+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9kaXY+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0xIiB0eXBlPSJidXR0b24iIGRpc2FibGVkPiAnOw0KCQkJCQkJCSRidXR0b25bXSA9IFRleHQ6Ol8oJ0Nsb3NlZCcpOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8L2J1dHRvbj4nOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmIChzZWxmOjokZXZlbnQtPnR5cGUgPT0gMikNCgkJCQkJCXsNCgkJCQkJCQlpZiAoJHNlbGVjdGVkUVRZID4gMCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8YnV0dG9uICBpZD0iJy4kYnV0dG9uSWQuJy1zZWxlY3QiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1tYXJnaW4tc21hbGwtYm90dG9tIHVrLXdpZHRoLTEtMSB1ay1idXR0b24tc3VjY2VzcyB1ay1hY3RpdmUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgZGF0YS1zZWxlY3Rpb249IjIiICMjIycuJGJ1dHRvbklkLicjIyM+ICc7DQoJCQkJCQkJCSRidXR0b25bXSA9IFRleHQ6Ol8oJ1NlbGVjdCcpOw0KCQkJCQkJCQkkYnV0dG9uW10gPSAnPC9idXR0b24+JzsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gIGlkPSInLiRidXR0b25JZC4nLXNlbGVjdCIgY2xhc3M9InNlbGVjdC1idXR0b24gdWstYnV0dG9uIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0xIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIGRhdGEtYnV5PSInLiRidXlJZC4nIiBkYXRhLXN3aXRjaD0iJy4kc3dpdGNoSUQuJyIgJy4kb25seVN3aXRjaC4nIGRhdGEtc2VsZWN0aW9uPSIxIiAjIyMnLiRidXR0b25JZC4nIyMjPiAnOw0KCQkJCQkJCQkkYnV0dG9uW10gPSBUZXh0OjpfKCdTZWxlY3QnKTsNCgkJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCS8vIGFkZCB0byBjYXJ0IGJ1dHRvbg0KCQkJCQkJCSRidXR0b25bXSA9ICc8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIj4nOw0KCQkJCQkJCWlmICgkcXR5ICE9IDAgJiYgJGFjdHVhbFFUWSA8PSAwICYmICRzZWxlY3RlZFFUWSA+IDApDQoJCQkJCQkJew0KCQkJCQkJCQkkYnV0dG9uW10gPSAnPGJ1dHRvbiBpZD0iJy4kYnV0dG9uSWQuJy1wbHVzIiBjbGFzcz0ic2VsZWN0LWJ1dHRvbiB1ay1idXR0b24gdWstYnV0dG9uLXNtYWxsIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0zIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIGRhdGEtYnV5PSInLiRidXlJZC4nIiBkYXRhLXN3aXRjaD0iJy4kc3dpdGNoSUQuJyIgJy4kb25seVN3aXRjaC4nIGRpc2FibGVkPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8YnV0dG9uIGlkPSInLiRidXR0b25JZC4nLXBsdXMiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgIyMjJy4kYnV0dG9uSWQuJyMjIz4nOw0KCQkJCQkJCX0NCgkJCQkJCQkkYnV0dG9uW10gPSAnPGkgY2xhc3M9InVrLWljb24tcGx1cyI+PC9pPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gaWQ9IicuJGJ1dHRvbklkLictbWludXMiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgIyMjJy4kYnV0dG9uSWQuJyMjIz4nOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8aSBjbGFzcz0idWstaWNvbi1taW51cyI+PC9pPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+JzsNCgkJCQkJCQlpZiAoJHNlbGVjdGVkUVRZID4gMCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8c3BhbiBpZD0iJy4kYnV0dG9uSWQuJy1udW1iZXIiIGRhdGEtcXR5PSInLiRzZWxlY3RlZFFUWS4nIj48c3BhbiBjbGFzcz0idWstYmFkZ2UgdWstYmFkZ2Utbm90aWZpY2F0aW9uIHVrLWJhZGdlLXN1Y2Nlc3MiPicuJHNlbGVjdGVkUVRZLic8L3NwYW4+PC9zcGFuPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCQkkYnV0dG9uW10gPSAnPHNwYW4gaWQ9IicuJGJ1dHRvbklkLictbnVtYmVyIiBkYXRhLXF0eT0iMCI+MDwvc3Bhbj4nOwkJCQkJCQ0KCQkJCQkJCX0NCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9idXR0b24+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9kaXY+JzsNCgkJCQkJCX0NCgkJCQkJCQ0KCQkJCQkJLy8gY2hlY2sgaWYgdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgaW4gcHJpY2UNCgkJCQkJCSRzdG9yZWRQcmljZSA9IHNlbGY6OmdldEV2ZW50RGV0YWlscygkSURLRVksICdwcmljZScsICdpZCcsIGZhbHNlKTsNCgkJCQkJCWlmICgkc3RvcmVkUHJpY2UgIT09ICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE8nXSkNCgkJCQkJCXsNCgkJCQkJCQkvLyB1cGRhdGUgdGhlIHByaWNlIGlmIHRoZXJlIHdhcyBhIGNoYW5nZQ0KCQkJCQkJCXNlbGY6OnVwZGF0ZUV2ZW50RGV0YWlsKCRJREtFWSwgYXJyYXkoDQoJCQkJCQkJCSdpZCcgPT4gJElES0VZLA0KCQkJCQkJCQknYnV5X2lkJyA9PiAkYnV5SWQsDQoJCQkJCQkJCSdjaGVja19pZCcgPT4gJGNoZWNraW5nSUQsDQoJCQkJCQkJCSdzd2l0Y2hfaWQnID0+ICRzd2l0Y2hJRCwNCgkJCQkJCQkJJ3ByaWNlJyA9PiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX0ZST00nXSwNCgkJCQkJCQkJJ25hbWUnID0+ICR2YXJpYXRpb25OYW1lLA0KCQkJCQkJCQkncXR5JyA9PiAkcXR5LA0KCQkJCQkJCQknb25seScgPT4gJG9ubHksDQoJCQkJCQkJCSdleHRyYScgPT4gJGV4dHJhLA0KCQkJCQkJCQkndGF4ZWQnID0+ICR0YXhlZCwNCgkJCQkJCQkJJ3ByaWNlT2JqZWN0JyA9PiAkY29uY2VwdFByaWNlKSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gb25seSByZXR1cm4gYnV0dG9uIGlmIGFkbWluIG9yIHNpdGUgcmV0dXJuIHR5cGUNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQkJew0KCQkJCQlyZXR1cm4gIGltcGxvZGUoJycsJGJ1dHRvbik7DQoJCQkJfQ0KCQkJCS8vIGlmIG9wdGlvbnMgdGhlbiByZXR1cm4gYXJyYXkgb2YgcmVzdWx0cw0KCQkJCWVsc2VpZiAoJGJ1eUlkICYmIHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXJldHVybiBhcnJheSgNCgkJCQkJCSdpZCcgPT4gJElES0VZLA0KCQkJCQkJJ2J1eV9pZCcgPT4gJGJ1eUlkLA0KCQkJCQkJJ2NoZWNrX2lkJyA9PiAkY2hlY2tpbmdJRCwNCgkJCQkJCSdzd2l0Y2hfaWQnID0+ICRzd2l0Y2hJRCwNCgkJCQkJCSdwcmljZScgPT4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UTyddLA0KCQkJCQkJJ25hbWUnID0+ICR2YXJpYXRpb25OYW1lLA0KCQkJCQkJJ3F0eScgPT4gJHF0eSwNCgkJCQkJCSdvbmx5JyA9PiAkb25seSwNCgkJCQkJCSdleHRyYScgPT4gJGV4dHJhLA0KCQkJCQkJJ3RheGVkJyA9PiAkdGF4ZWQsDQoJCQkJCQkncHJpY2VPYmplY3QnID0+ICRjb25jZXB0UHJpY2UpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudERldGFpbHMoJGtleSwgJHdoYXQgPSAncHJpY2UnLCAkdHlwZSA9ICduYW1lJywgJHJldHJ5ID0gdHJ1ZSwgJHByaWNlQ29udmVydGlvbiA9IHRydWUpDQoJew0KCQlpZiAoJ25hbWUnID09ICR0eXBlKQ0KCQl7DQoJCQkka2V5ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgka2V5KTsNCgkJfQ0KCQkvLyBnZXQgdGhlIGV2ZW50IGRldGFpbHMNCgkJJGV2ZW50RGV0YWlscyA9IHNlbGY6OmdldCgnZXZlbnREZXRhaWxzVkRNJywgbnVsbCk7DQoJCWlmICgkZXZlbnREZXRhaWxzICYmIGlzc2V0KCRldmVudERldGFpbHNbJHR5cGVdWyRrZXldKSAmJiBpc3NldCgkZXZlbnREZXRhaWxzWyR0eXBlXVska2V5XVskd2hhdF0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6ZXZlbnREZXRhaWxQcmVwKCRldmVudERldGFpbHNbJHR5cGVdWyRrZXldLCAkd2hhdCwgJHByaWNlQ29udmVydGlvbik7DQoJCX0NCgkJLy8gaWYgbm90IHNldCByZXRyeSwgYnkgc2V0dGluZyBpdA0KCQlpZiAoJHJldHJ5KQ0KCQl7DQoJCQlzZWxmOjpzZXRFdmVudE9wdGlvbnMoKTsNCgkJCXJldHVybiBzZWxmOjpnZXRFdmVudERldGFpbHMoJGtleSwgJHdoYXQsICR0eXBlLCBmYWxzZSwgJHByaWNlQ29udmVydGlvbik7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZXZlbnREZXRhaWxQcmVwKCYkdmFsdWVzLCAmJHdoYXQsICRwcmljZUNvbnZlcnRpb24pDQoJew0KCQlpZiAoJ3ByaWNlJyA9PT0gJHdoYXQgJiYgJHByaWNlQ29udmVydGlvbikNCgkJew0KCQkJLy8gdXNlZCBmb3IgdGhlIGludm9pY2UgdmlldyBtYWlubHkNCgkJCSRqaW5wdXQgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dDsNCgkJCSRkYXRhID0gJGppbnB1dC0+Z2V0QXJyYXkoYXJyYXkoDQoJCQkJJ29yZ2FuaXplcl9jdXJyZW5jeScgPT4gJ3dvcmQnLA0KCQkJCSdyZWdpc3RlcmVkX3VzZXJfY3VycmVuY3knID0+ICd3b3JkJywNCgkJCQknZXhjaGFuZ2VfcmF0ZScgPT4gJ2Zsb2F0Jw0KCQkJKSk7DQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ29yZ2FuaXplcl9jdXJyZW5jeSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0YVsncmVnaXN0ZXJlZF91c2VyX2N1cnJlbmN5J10pKQ0KCQkJew0KCQkJCSRjaGVjayA9ICRkYXRhWydvcmdhbml6ZXJfY3VycmVuY3knXS4kZGF0YVsncmVnaXN0ZXJlZF91c2VyX2N1cnJlbmN5J107DQoJCQkJJG9yZ2FuaXplcl9jdXJyZW5jeSA9ICdOT05FJzsNCgkJCQlpZiAoaXNzZXQoJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9OQU1FJ10pICYmICRjaGVjayA9PT0gJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9OQU1FJ10pDQoJCQkJew0KCQkJCQlyZXR1cm4gJHZhbHVlc1skd2hhdF07DQoJCQkJfQ0KCQkJCS8vIGlmIGV4Y2hhbmdlIHJhdGUgaXMgbm90IHNldA0KCQkJCWlmIChpc3NldCgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pKQ0KCQkJCXsNCgkJCQkJJG9yZ2FuaXplcl9jdXJyZW5jeSA9IHNlbGY6OmdldEZyb21DdXJyZW5jeSgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pOw0KCQkJCX0NCgkJCQlpZiAoJGRhdGFbJ2V4Y2hhbmdlX3JhdGUnXSA9PSAwICYmICRvcmdhbml6ZXJfY3VycmVuY3kgPT09ICRkYXRhWydvcmdhbml6ZXJfY3VycmVuY3knXSkNCgkJCQl7DQoJCQkJCSRyZXN1bHQgPSBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJGRhdGFbJ29yZ2FuaXplcl9jdXJyZW5jeSddLCAkdmFsdWVzWyR3aGF0XSwgJGRhdGFbJ3JlZ2lzdGVyZWRfdXNlcl9jdXJyZW5jeSddKTsNCgkJCQkJLy8gbm93IHVwZGF0ZSB0aGUgZGF0YQ0KCQkJCQlyZXR1cm4gJHJlc3VsdFsnRVhDSEFOR0VfUkFURV9UTyddOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gYmNtdWwoJHZhbHVlc1skd2hhdF0sICRkYXRhWydleGNoYW5nZV9yYXRlJ10sIDIpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGZvciBvdGhlciB2aWV3cw0KCQkJZWxzZWlmIChpc3NldCgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pKQ0KCQkJew0KCQkJCSRvcmdhbml6ZXJfY3VycmVuY3kgPSBzZWxmOjpnZXRGcm9tQ3VycmVuY3koJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9JRCddKTsNCgkJCQkkYWN0aXZlX2N1cnJlbmN5ID0gIHNlbGY6OmdldFVzZXJDdXJyZW5jeSgpOw0KCQkJCSRyZXN1bHQgPSBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJG9yZ2FuaXplcl9jdXJyZW5jeSwgJHZhbHVlc1skd2hhdF0sICRhY3RpdmVfY3VycmVuY3kpOw0KCQkJCS8vIG5vdyB1cGRhdGUgdGhlIGRhdGENCgkJCQlyZXR1cm4gJHJlc3VsdFsnRVhDSEFOR0VfUkFURV9UTyddOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkdmFsdWVzWyR3aGF0XTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEZyb21DdXJyZW5jeSgkZXhjaGFuZ2VfSUQpDQoJew0KCQkkZnJvbUFycmF5ID0gYXJyYXlfbWFwKCdzdHJ0b3VwcGVyJywgKGFycmF5KSBleHBsb2RlKCctJywgJGV4Y2hhbmdlX0lEKSk7DQoJCXJldHVybiAkZnJvbUFycmF5WzBdOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0RXZlbnRPcHRpb25zKCkNCgl7DQoJCSRldmVudHMgPSBzZWxmOjpnZXRWYXJzKCdldmVudCcsIDEsICdwdWJsaXNoZWQnKTsNCgkJLy8gb25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGFuIGFycmF5DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnRzKSkNCgkJew0KCQkJJGJ1Y2tldCA9IGFycmF5KCk7ICRidWNrZXRbJ25hbWUnXSA9IGFycmF5KCk7ICAkYnVja2V0WydpZCddID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goJGV2ZW50cyBhcyAkaXRlbSkNCgkJCXsNCgkJCQlpZiAoJGV2ZW50T3B0aW9ucyA9IHNlbGY6OmdldEV2ZW50KCRpdGVtLCAnb3B0aW9ucycpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCgkZXZlbnRPcHRpb25zIGFzICRldmVudCkNCgkJCQkJew0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudCkpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJGV2ZW50IGFzICRvcHRpb24pDQoJCQkJCQkJew0KCQkJCQkJCQkkb3B0aW9uWydfbmFtZSddID0gKGlzc2V0KCRvcHRpb25bJ2RhdGUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJG9wdGlvblsnZGF0ZSddKSkgPyAgJG9wdGlvblsnbmFtZSddLiAnIH4gJyAuICRvcHRpb25bJ2RhdGUnXSA6ICAkb3B0aW9uWyduYW1lJ107DQoJCQkJCQkJCSRzZWxlY3QgPSBKRmlsdGVyT3V0cHV0OjpjbGVhblRleHQoJG9wdGlvblsnX25hbWUnXSk7DQoJCQkJCQkJCS8vIHN0b3JlIGluIHNlc3Npb24NCgkJCQkJCQkJJGtleSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlbGVjdCk7DQoJCQkJCQkJCSRvcHRpb25bJ3NlbGVjdCddID0gICRzZWxlY3Q7DQoJCQkJCQkJCSRidWNrZXRbJ25hbWUnXVska2V5XSA9ICRvcHRpb247DQoJCQkJCQkJCSRidWNrZXRbJ2lkJ11bJG9wdGlvblsnaWQnXV0gPSAkb3B0aW9uOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0WydpZCddKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXQoJ2V2ZW50RGV0YWlsc1ZETScsICRidWNrZXQpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVFdmVudERldGFpbCgka2V5LCAkdmFsdWVzKQ0KCXsNCgkJLy8gZ2V0IHRoZSBldmVudCBEZXRhaWxzIGZyb20gbWVtb3J5DQoJCSRldmVudERldGFpbHMgPSBzZWxmOjpnZXQoJ2V2ZW50RGV0YWlsc1ZETScsIG51bGwpOw0KCQkvLyBtYWtlIHN1cmUgdGhlIGlkIGlzIGZvdW5kDQoJCWlmICgkZXZlbnREZXRhaWxzICYmIGlzc2V0KCRldmVudERldGFpbHNbJ2lkJ11bJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudERldGFpbHNbJ2lkJ11bJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2YWx1ZXMpKQ0KCQl7DQoJCQkkc2VsZWN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkZXZlbnREZXRhaWxzWydpZCddWyRrZXldWydzZWxlY3QnXSk7DQoJCQlmb3JlYWNoICgkdmFsdWVzIGFzICRmaWVsZCA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJLy8gdXBkYXRlIHRoZSBmaWVsZCBpbiBJRA0KCQkJCSRldmVudERldGFpbHNbJ2lkJ11bJGtleV1bJGZpZWxkXSA9ICR2YWx1ZTsNCgkJCQkvLyB1cGRhdGUgdGhlIGZpZWxkIGluIHNlbGVjdGlvbg0KCQkJCSRldmVudERldGFpbHNbJ25hbWUnXVskc2VsZWN0XVskZmllbGRdID0gJHZhbHVlOw0KCQkJfQ0KCQkJLy8gc3RvcmUgYmFjayB0byBtZW1vcnkNCgkJCXNlbGY6OnNldCgnZXZlbnREZXRhaWxzVkRNJywgJGV2ZW50RGV0YWlscyk7DQoJCX0NCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEV2ZW50U3RhcnREYXRlKCRkYXRlcykNCgl7DQoJCWlmIChpc3NldCgkZGF0ZXNbJ3N0YXJ0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRlc1snc3RhcnQnXSkpDQoJCXsNCgkJCSRzdGFydCA9IHN0cnRvdGltZSgnMDAtMDAtMzAwMCAwMDowMDowMCcpOw0KCQkJJGZvdW5kID0gZmFsc2U7DQoJCQlmb3JlYWNoICgkZGF0ZXNbJ3N0YXJ0J10gYXMgJGRhdGUpDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRlKSkNCgkJCQl7DQoJCQkJCSR0aW1lID0gc3RydG90aW1lKCRkYXRlKTsNCgkJCQkJaWYgKCR0aW1lIDwgJHN0YXJ0KQ0KCQkJCQl7DQoJCQkJCQkkc3RhcnQgPSAkdGltZTsNCgkJCQkJCSRmb3VuZCA9IHRydWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlpZiAoJGZvdW5kKQ0KCQkJew0KCQkJCXJldHVybiBhcnJheSgndGV4dCcgPT4gc2VsZjo6ZmFuY3lEYXlUaW1lRGF0ZSgkc3RhcnQpLCAnaW50JyA9PiBiY2RpdigoaW50KSAkc3RhcnQsIDM2MDApKTsNCgkJCX0JDQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIGFycmF5KCd0ZXh0JyA9PiBUZXh0OjpfKCdOb3QgU2V0JyksICdpbnQnID0+IDApOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RXZlbnRUZWFzZXJJbWFnZSgkaXRlbSwgJGZpbGVMaW5rLCAkZGVmYXVsdF90ZWFzZXJfaW1hZ2UpDQoJew0KCQkkdGVhc2VyX2ltYWdlID0gJyc7DQoJCS8vIGxvYWQgdGhlIGV2ZW50IHRlYXNlciBpbWFnZQ0KCQlpZiAoaXNzZXQoJGl0ZW0tPnRlYXNlcl9pbWFnZSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPnRlYXNlcl9pbWFnZSkgJiYgc3RycG9zKCRpdGVtLT50ZWFzZXJfaW1hZ2UsICdfJykgIT09IGZhbHNlKQ0KCQl7DQoJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICRpdGVtLT50ZWFzZXJfaW1hZ2UpOw0KCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJew0KCQkJCSR0ZWFzZXJfaW1hZ2UgPSAnPGltZyBjbGFzcz0idWstdGh1bWJuYWlsIHVrLW1hcmdpbiIgc3JjPSInLiRmaWxlTGluay4kaXRlbS0+dGVhc2VyX2ltYWdlLicuJy4kZXh0ZW50aW9uWzJdLiciIGFsdD0iJy4kaXRlbS0+bmFtZS4nIj4nOw0KCQkJfQ0KCQl9DQoJCS8vIHNldCBkZWZhdWx0IHRlYXNlciBpbWFnZSwgaWYgb25lIGlzIG5vdCBzZXQNCgkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGVhc2VyX2ltYWdlKSkNCgkJew0KCQkJJHRlYXNlcl9pbWFnZSA9ICRkZWZhdWx0X3RlYXNlcl9pbWFnZTsNCgkJfQ0KCQlyZXR1cm4gJHRlYXNlcl9pbWFnZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRCdXR0b25zKCRpdGVtLCAkdHlwZSwgJHVzZXIsICRuYW1lLCAkaWQsICRjaGVja2VkX291dCwgJG9yZ2FuaXplcl9uYW1lID0gJ29yZ2FuaXplcicsICRlcG9zY29kZSA9ICdlcG9zY29kZScsICRzbHVnID0gJ3NsdWcnKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRpdGVtKSkNCgkJew0KCQkJJGl0ZW0gPSAoYXJyYXkpICRpdGVtOw0KCQl9DQoJCSRlZGl0ID0gVXJpOjpyb290KCkuImluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PWV2ZW50cyZ0YXNrPSIuJHR5cGUuIi5lZGl0JnJlZj1ldmVudHMiOw0KCQkkY2FuQ2hlY2tpbiA9ICRpdGVtWyRjaGVja2VkX291dF0gPT0gJHVzZXItPmlkIHx8ICRpdGVtWyRjaGVja2VkX291dF0gPT0gMDsNCgkJJGNhbkVkaXQgPSBzZWxmOjpoYXNBY2Nlc3MoJGl0ZW1bJGlkXSwgJHVzZXItPmlkLCAkdHlwZSk7DQoJCSRzdGFydCA9ICc8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIj4nOw0KCQkkZW5kID0gJzwvZGl2Pic7DQoJCSRidXR0b24gPSBhcnJheSgpOw0KCQkkc2l6ZSA9IDE7DQoJCWlmICgkY2FuRWRpdCAmJiAhJGl0ZW1bJGNoZWNrZWRfb3V0XSkNCgkJew0KCQkJJGJ1dHRvbltdID0gJyA8YSBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXdpZHRoLTEtNSIgaHJlZj0iJy4kZWRpdC4nJmlkPScuJGl0ZW1bJGlkXS4nIj4nDQoJCQkJCS4gJzxpIGNsYXNzPSJ1ay1pY29uLXBlbmNpbCI+PC9pPjwvYT4nOw0KCQkJJHNpemUgPSAyOw0KCQl9DQoJCWVsc2VpZiAoJGNhbkVkaXQgJiYgJGNhbkNoZWNraW4pDQoJCXsNCgkJCSRidXR0b25bXSA9ICcgPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay13aWR0aC0xLTUiIGhyZWY9IicuJGVkaXQuJyZpZD0nLiRpdGVtWyRpZF0uJyI+Jw0KCQkJCQkuICc8aSBjbGFzcz0idWstaWNvbi1sb2NrIj48L2k+PC9hPic7IA0KCQkJJHNpemUgPSAyOw0KCQl9DQoJCWVsc2VpZiAoJGNhbkVkaXQpDQoJCXsNCgkJCSRidXR0b25bXSA9ICcgPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay13aWR0aC0xLTUiIGhyZWY9IiMiIGRpc2FibGVkPicNCgkJCQkJLiAnPGkgY2xhc3M9InVrLWljb24tbG9jayI+PC9pPjwvYT4nOyANCgkJCSRzaXplID0gMjsNCgkJfQ0KCQlpZiAoJHR5cGUgPT09ICdvcmdhbml6ZXInKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIGNvbnRhY3QgKGVtYWlsKSBidXR0b24NCgkJCSRidXR0b25bXSA9ICcgPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLXdpZHRoLTEtNSIgJw0KCQkJCS4gJ2RhdGEtdWstbW9kYWw9Int0YXJnZXQ6XCcjc2V0TWVzc2FnZVwnLCBjZW50ZXI6dHJ1ZX0iIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0ic2V0TWVzc2FnZShcJycuJGl0ZW1bJGVwb3Njb2RlXS4nXCcsIFwnJy4kaXRlbVskb3JnYW5pemVyX25hbWVdLidcJykiPicNCgkJCQkuICc8aSBjbGFzcz0idWstaWNvbi1lbnZlbG9wZSI+PC9pPjwvYnV0dG9uPic7DQoJCQlpZiAoMiA9PT0gJHNpemUpDQoJCQl7DQoJCQkJJHNpemUgPSAzOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRzaXplID0gMjsNCgkJCX0NCgkJfQ0KCQlpZiAoMiA9PT0gJHNpemUpDQoJCXsNCgkJCSRidXR0b25TaXplID0gJzQtNSc7DQoJCX0NCgkJZWxzZWlmICgzID09PSAkc2l6ZSkNCgkJew0KCQkJJGJ1dHRvblNpemUgPSAnMy01JzsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRzdGFydCA9ICcnOw0KCQkJJGVuZCA9ICcnOw0KCQkJJGJ1dHRvblNpemUgPSAnMS0xJzsNCgkJfQ0KCQkkdHlwZUJ1dHRvbiA9IHNlbGY6OmdldFR5cGVCdXR0b24oJGl0ZW0sICR0eXBlLCAkaWQsICRzbHVnKTsNCgkJLy8gc2V0IHRoZSBtYWluIGJ1dHRvbg0KCQkkYnV0dG9uW10gPSAnIDwnLiR0eXBlQnV0dG9uWyd0eXBlJ10uJyBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1zdWNjZXNzIHVrLXdpZHRoLScuJGJ1dHRvblNpemUuJyIgJy4kdHlwZUJ1dHRvblsnYWN0aW9uJ10uJz4nDQoJCQkuICR0eXBlQnV0dG9uWydpY29uJ10gLiAkaXRlbVskbmFtZV0gLiAkdHlwZUJ1dHRvblsnZXh0cmFUZXh0J10gLiAnPC8nLiR0eXBlQnV0dG9uWyd0eXBlJ10uJz4nOw0KCQkvLyBzZXQgZ3JvdXAgYnV0dG9uDQoJCXJldHVybiAkc3RhcnQuaW1wbG9kZSgnJywgJGJ1dHRvbikuJGVuZDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFR5cGVCdXR0b24oJGl0ZW0sICR0eXBlLCAkaWQsICRzbHVnKQ0KCXsNCgkJLy8gc2V0IHRoZSBtYWluIHN0dWZmDQoJCSRidXR0b24gPSBhcnJheSgpOw0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ2V2ZW50JzoNCgkJCQkkYnV0dG9uWydhY3Rpb24nXSA9ICcgaHJlZj0iJy5Kb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XyhbW1tDb21wb25lbnRdXV1IZWxwZXJSb3V0ZTo6Z2V0UmVnaXN0cnlSb3V0ZSgkaXRlbVskc2x1Z10pKS4nIiAnOw0KCQkJCSRidXR0b25bJ3R5cGUnXSA9ICdhJzsNCgkJCQkkYnV0dG9uWydleHRyYVRleHQnXSA9ICcgKCcgLiBUZXh0OjpfKCdHZXQgTW9yZSBJbmZvJykgLiAnKSc7DQoJCQlicmVhazsNCgkJCWRlZmF1bHQ6DQoJCQkJJGJ1dHRvblsnYWN0aW9uJ10gPSAnIHR5cGU9ImJ1dHRvbiIgZGF0YS11ay1tb2RhbD0ie3RhcmdldDpcJyNpdGVtLWluZm8tZnVsbFwnfSIgb25jbGljaz0iZ2V0SXRlbURhdGFGdWxsKFwnJy4kdHlwZS4nX18nLiRpdGVtWyRpZF0uJ1wnKSIgJzsNCgkJCQkkYnV0dG9uWyd0eXBlJ10gPSAnYnV0dG9uJzsNCgkJCQkkYnV0dG9uWydleHRyYVRleHQnXSA9ICcnOw0KCQl9DQoJCS8vIHNldCB0aGUgaWNvbg0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ2V2ZW50JzoNCgkJCQkkYnV0dG9uWydpY29uJ10gPSAnPGkgY2xhc3M9InVrLWljb24tc2hvcHBpbmctY2FydCI+PC9pPiAnOw0KCQkJYnJlYWs7DQoJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCSRidXR0b25bJ2ljb24nXSA9ICc8aSBjbGFzcz0idWstaWNvbi11c2VyIj48L2k+ICc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3ZlbnVlJzoNCgkJCQkkYnV0dG9uWydpY29uJ10gPSAnPGkgY2xhc3M9InVrLWljb24tbWFwLW1hcmtlciI+PC9pPiAnOw0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCSRidXR0b25bJ2ljb24nXSA9ICcnOwkNCgkJfQ0KCQlyZXR1cm4gJGJ1dHRvbjsNCgl9DQoNCgkvKioNCgkqICBHZXQgYWxsIGl0ZW1zIGluIENhcnQNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2FydCgkc3RhdHVzID0gMSwgJGJvdGggPSB0cnVlKQ0KCXsNCgkJLy8gYWx3YXlzIGNoZWNrIGZvciBwdWJsaWMga2V5DQoJCSRwdWJsaWMgPSBzZWxmOjpnZXQoJ3B1YmxpY0tlZVknLCBudWxsKTsNCgkJLy8gZ2V0IHVzZXIgb2JqZWN0DQoJCSR1c2VySXMgPSBzZWxmOjp1c2VySXMobnVsbCwgdHJ1ZSk7DQoJCS8vIG5vdyBjaGVjayB0aGUgaWQgYWdhaW5zdCB0aGUgcmVnaXN0ZXJlZCB2YWx1ZXMNCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmtleScpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3JlZ2lzdGVyJywgJ2EnKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2V2ZW50JywgJ2UnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuZXZlbnQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2UuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2Euc3RhdHVzID0gJyAuIChpbnQpICRzdGF0dXMpOw0KCQkkcXVlcnktPm9yZGVyKCdlLm5hbWUgQVNDJyk7DQoJCWlmICgkdXNlcklzWydpcyddID09IDEgJiYgJHVzZXJJc1snaWQnXSA+IDApDQoJCXsNCgkJCWlmICgkcHVibGljICYmICRib3RoID09PSB0cnVlKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykgLiAnIE9SIGEucmVnaXN0ZXJlZF91c2VyID0gJy4gKGludCkgJHVzZXJJc1snaWQnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnLiAoaW50KSAkdXNlcklzWydpZCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRwdWJsaWMpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCS8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNhcnQgaXRlbXMNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCSRyZWdpc3RyYXRpb25zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJZm9yZWFjaCAoJHJlZ2lzdHJhdGlvbnMgYXMgJHJlZykNCgkJCXsNCgkJCQkvLyBvcmdhbml6ZXJfZXZlbnRfYnVuZGxlX3RpbWVfY29uY2VwdF92YXJpYXRpb24NCgkJCQkkZ2V0ID0gZXhwbG9kZSgnXycsICRyZWctPmtleSk7DQoJCQkJJGlkID0gbWQ1KCRyZWctPmtleSk7DQoJCQkJLy8gbG9hZCB0aGUgdmFsdWVzDQoJCQkJaWYgKCFpc3NldCgkYnVja2V0WyRnZXRbMF1dKSkNCgkJCQl7DQoJCQkJCSRidWNrZXRbJGdldFswXV0gPSBhcnJheSgpOw0KCQkJCX0NCgkJCQkvLyBjb3VudCB0aGUgbnVtYmVyIG9mIHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgdmFyaWF0aW9uIGFuZCBzZXQgaXRzIG5lZWRlZCB2YWx1ZXMNCgkJCQlpZiAoIWlzc2V0KCRidWNrZXRbJGdldFswXV1bJGlkXSkpDQoJCQkJew0KCQkJCQkkYnVja2V0WyRnZXRbMF1dWyRpZF0gPSBhcnJheSgpOw0KCQkJCQkkYnVja2V0WyRnZXRbMF1dWyRpZF1bJ3F0eSddID0gMTsNCgkJCQkJJGJ1Y2tldFskZ2V0WzBdXVskaWRdWydldmVudCddID0gKGludCkgJGdldFsxXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGJ1Y2tldFskZ2V0WzBdXVskaWRdWydxdHknXSsrOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkYnVja2V0Ow0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqICBDaGVjayBpZiB0aGUgcXR5IGlzIHN0aWxsIGF2YWlsYWJsZQ0KCSovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhY3RpdmVDYXJ0UXR5KCRrZXlJRCkNCgl7DQoJCS8vIGFsd2F5cyBjaGVjayBmb3IgcHVibGljIGtleQ0KCQkkcHVibGljID0gc2VsZjo6Z2V0KCdwdWJsaWNLZWVZJywgbnVsbCk7DQoJCS8vIGdldCB1c2VyIG9iamVjdA0KCQkkdXNlcklzID0gc2VsZjo6dXNlcklzKG51bGwsIHRydWUpOw0KCQkvLyBub3cgY2hlY2sgdGhlIGlkIGFnYWluc3QgdGhlIHJlZ2lzdGVyZWQgdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnYS5pZCcpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcmVnaXN0ZXInLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5rZXkgPSAnIC4gJGRiLT5xdW90ZSgka2V5SUQpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5zdGF0dXMgPSAxJyk7DQoJCWlmICgkdXNlcklzWydpcyddID09IDEgJiYgJHVzZXJJc1snaWQnXSA+IDApDQoJCXsNCgkJCWlmICgkcHVibGljKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykgLiAnIE9SIGEucmVnaXN0ZXJlZF91c2VyID0gJy4gKGludCkgJHVzZXJJc1snaWQnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnLiAoaW50KSAkdXNlcklzWydpZCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRwdWJsaWMpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuIDA7DQoJCX0NCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgY2FydCBpdGVtcw0KCQlyZXR1cm4gKGludCkgJGRiLT5nZXROdW1Sb3dzKCk7DQoJfQ0KDQoJLyoqDQoJKiAgQ2hlY2sgaWYgdGhlIHF0eSBpcyBzdGlsbCBhdmFpbGFibGUNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UXR5QXZhaWxhYmxlKCRxdHksICR0eXBlLCAka2V5SUQpDQoJew0KCQlpZiAoKCd2YXJpYXRpb24nID09PSAkdHlwZSB8fCAnZXZlbnQnID09PSAkdHlwZSkgJiYgKChpc19udW1lcmljKCRxdHkpICYmICRxdHkgPiAwKSB8fCAndGFrZW4nID09PSAkcXR5KSkNCgkJew0KCQkJLy8gbm93IGNoZWNrIHRoZSBpZCBhZ2FpbnN0IHRoZSByZWdpc3RlcmVkIHZhbHVlcw0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWdpc3RlcicsICdhJykpOw0KCQkJaWYgKCd2YXJpYXRpb24nID09PSAkdHlwZSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhLmtleSA9ICcgLiAkZGItPnF1b3RlKCRrZXlJRCkpOw0KCQkJfQ0KCQkJZWxzZWlmICgnZXZlbnQnID09PSAkdHlwZSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhLmV2ZW50ID0gJyAuIChpbnQpICRrZXlJRCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICRxdHk7DQoJCQl9DQoJCQkkcXVlcnktPndoZXJlKCdhLnN0YXR1cyA+PSAxJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCSRyZWdpc3RlcmVkID0gJGRiLT5nZXROdW1Sb3dzKCk7DQoJCQlpZiAoJ3Rha2VuJyA9PT0gJHF0eSkNCgkJCXsNCgkJCQlyZXR1cm4gJHJlZ2lzdGVyZWQ7DQoJCQl9DQoJCQlpZiAoJHJlZ2lzdGVyZWQgPj0gJHF0eSkNCgkJCXsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCXJldHVybiBiY3N1YigkcXR5LCAkcmVnaXN0ZXJlZCk7DQoJCX0NCgkJcmV0dXJuICRxdHk7DQoJfQ0KDQoJLyoqDQoJKiBAIHJldHVybiBmbG9hdCBvbiBzdWNjZXNzDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbmNlcHRQcmljZSgka2V5KQ0KCXsNCgkJLy8gZmlyc3Qgd2UgZ2V0IHRoZSByYXcgc2V0IHByaWNlIChpbiBvcmdhbml6ZXJzIGN1cnJlbmN5KQ0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0WydwcmljZSddWyRrZXldKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pKQ0KCQl7DQoJCQkkb3JnUmF3ID0gc2VsZjo6JGZpbHRlcklucHV0LT5jbGVhbihzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pOw0KCQkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkb3JnUmF3KSkNCgkJCXsNCgkJCQkkb3JnUmF3ID0gIjAuMDAiOw0KCQkJfQ0KCQkJLy8gZ2V0IG9yZ2FuaXplciBjdXJyZW5jeQ0KCQkJaWYgKCRvcmdDdXJyZW5jeSA9IHNlbGY6OmdldEV2ZW50Q3VycmVuY3koKSkNCgkJCXsNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBhY3RpdmUgcGFydHkgY3VycmVuY3kNCgkJCQkJJGFjdGl2ZUN1cnJlbmN5ID0gc2VsZjo6Z2V0KCdBQ1RJVkVfQ1VSUkVOQ1knKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGFjdGl2ZUN1cnJlbmN5ID0gJG9yZ0N1cnJlbmN5Ow0KCQkJCX0NCgkJCQkvLyBzZXQgYWN0aXZlIHByaWNlIG9iamVjdA0KCQkJCXJldHVybiBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJG9yZ0N1cnJlbmN5LCAkb3JnUmF3LCAkYWN0aXZlQ3VycmVuY3kpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcmV0dXJuIG1peGVkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25jZXB0c0hUTUwoKQ0KCXsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0SFRNTCkpDQoJCXsNCgkJCSR0aGlzRXZlbnQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JGNvbmNlcHRIVE1MIGFzICRldmVudF9jb25jZXB0X190aW1lID0+ICRIVE1MKQ0KCQkJew0KCQkJCSRsb29raW5nID0gZXhwbG9kZSgnXycsJGV2ZW50X2NvbmNlcHRfX3RpbWUpOw0KCQkJCWlmIChzZWxmOjokZXZlbnQtPmlkID09ICRsb29raW5nWzBdKQ0KCQkJCXsNCgkJCQkJJHRoaXNFdmVudFskZXZlbnRfY29uY2VwdF9fdGltZV0gPSAkSFRNTDsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXNFdmVudCkpDQoJCQl7DQoJCQkJcmV0dXJuICR0aGlzRXZlbnQ7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEByZXR1cm4gbWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50T3B0aW9ucygpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddKSkNCgkJew0KCQkJJHRoaXNFdmVudCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRPcHRpb25zWydvcHRpb25zJ10gYXMgJGV2ZW50X2NvbmNlcHRfX3RpbWUgPT4gJG9wdGlvbnMpDQoJCQl7DQoJCQkJJGxvb2tpbmcgPSBleHBsb2RlKCdfJywkZXZlbnRfY29uY2VwdF9fdGltZSk7DQoJCQkJaWYgKHNlbGY6OiRldmVudC0+aWQgPT0gJGxvb2tpbmdbMF0pDQoJCQkJew0KCQkJCQkkdGhpc0V2ZW50WyRldmVudF9jb25jZXB0X190aW1lXSA9ICRvcHRpb25zOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpc0V2ZW50KSkNCgkJCXsNCgkJCQlyZXR1cm4gJHRoaXNFdmVudDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRldmVudF9jb25jZXB0X3RpbWUNCgkgKiBAcmV0dXJuIG1peGVkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25zZXB0SWQoJGV2ZW50X2NvbmNlcHRfdGltZSkNCgl7DQoJCWlmIChpc3NldChzZWxmOjokY29uY2VwdHNbJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6JGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQl9DQoJCXJldHVybiAkZXZlbnRfY29uY2VwdF90aW1lOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZXZlbnRfY29uY2VwdF90aW1lDQoJICogQHJldHVybiBpbnR8bWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldExvY2F0aW9uKCRldmVudF9jb25jZXB0X3RpbWUpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGxvY2F0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokbG9jYXRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQl9DQoJCXJldHVybiA5OTk5Ow0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkbG9jYXRpb24NCgkgKiBAcmV0dXJuIGJvb2x8c3RyaW5nDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudENvbmNlcHRUaW1lKCRsb2NhdGlvbikNCgl7DQoJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmRhdGVbJ3N0YXJ0J11bJGxvY2F0aW9uXSkgJiYgaXNzZXQoc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJGxvY2F0aW9uXSkpDQoJCXsNCgkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmRhdGVbJ3N0YXJ0J11bJGxvY2F0aW9uXSkpDQoJCQl7DQoJCQkJJHRpbWVzdGFtcCA9IHN0cnRvdGltZShzZWxmOjokZXZlbnQtPmRhdGVbJ3N0YXJ0J11bJGxvY2F0aW9uXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRpbWVzdGFtcCA9IDA7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JGV2ZW50LT5pZC4nXycuc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJGxvY2F0aW9uXS4nX18nLiR0aW1lc3RhbXA7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0RGF0ZXMoKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+ZGF0ZVsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmRhdGVbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCSR0eXBlcyA9IGFycmF5KCdzdGFydCcsICdlbmQnKTsNCgkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10gPSBzdHJ0b3RpbWUoJzIzMDAtMDAtMDAnKTsNCgkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2VuZCddID0gc3RydG90aW1lKCcwMDAwLTAwLTAwJyk7DQoJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ10gPSBhcnJheSgpOw0KCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXSA9IGFycmF5KCk7DQoJCQlmb3JlYWNoKCAkdHlwZXMgYXMgJHR5cGUpDQoJCQl7DQoJCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50LT5kYXRlWyR0eXBlXSBhcyAkbnIgPT4gJGRhdGUpDQoJCQkJew0KCQkJCQkvLyBnZXQgdGhlIGtleQ0KCQkJCQlpZiAoJGtleSA9IHNlbGY6OmdldEV2ZW50Q29uY2VwdFRpbWUoJG5yKSkNCgkJCQkJew0KCQkJCQkJLy8gcHJlcCB0aGUgZGF0YQ0KCQkJCQkJJGRhdGUgPSBzZWxmOjokZmlsdGVySW5wdXQtPmNsZWFuKCRkYXRlKTsNCgkJCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0ZSkpDQoJCQkJCQl7DQoJCQkJCQkJJHRpbWVzdGFtcCA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCQkJCQkJaWYgKCgnc3RhcnQnID09ICR0eXBlKSAmJiBzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA+ICR0aW1lc3RhbXApDQoJCQkJCQkJew0KCQkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA9ICR0aW1lc3RhbXA7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoKCdlbmQnID09ICR0eXBlKSAmJiBzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA8ICR0aW1lc3RhbXApDQoJCQkJCQkJew0KCQkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA9ICR0aW1lc3RhbXA7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIHNldCB0aW1lIHN0YW1wDQoJCQkJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV0pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddWyRrZXldID0gYXJyYXkoKTsNCgkJCQkJCQl9DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddWyRrZXldWyR0eXBlXSA9ICR0aW1lc3RhbXA7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgZ2xvYmFsIGNvbmNlcHQga2V5cw0KCQkJCQkJaWYgKCdzdGFydCcgPT0gJHR5cGUpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGNvbmNlcHRzWyRrZXldID0gc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJG5yXTsNCgkJCQkJCQlzZWxmOjokbG9jYXRpb25zWyRrZXldID0gJG5yOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGltZSBhcmUgc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddKSkNCgkJCXsNCgkJCQkvLyBub3cgbG9vcCB0aGUgdGltZSBzdGFtcHMNCgkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ10gYXMgJG9uID0+ICRkYXRlcykNCgkJCQl7DQoJCQkJCWlmIChpc3NldCgkZGF0ZXNbJ3N0YXJ0J10pICYmIGlzc2V0KCRkYXRlc1snZW5kJ10pKQ0KCQkJCQl7DQoJCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJG9uXSkpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dID0gYXJyYXkoKTsNCgkJCQkJCX0NCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJG9uXVsnc3RhcnQnXSA9IHNlbGY6OmZhbmN5RGF0ZSgkZGF0ZXNbJ3N0YXJ0J10pOw0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dWydlbmQnXSA9IHNlbGY6OmZhbmN5RGF0ZSgkZGF0ZXNbJ2VuZCddKTsNCgkJCQkJCWlmIChkYXRlKCdZbWQnLCAkZGF0ZXNbJ3N0YXJ0J10pID09IGRhdGUoJ1ltZCcsICRkYXRlc1snZW5kJ10pKQ0KCQkJCQkJew0KCQkJCQkJCS8vIHNhbWUgZGF5DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dWydzdGFydC1lbmQnXSA9ICAJc2VsZjo6ZmFuY3lUaW1lKCRkYXRlc1snc3RhcnQnXSkNCgkJCQkJCQkJLicgJy5UZXh0OjpfKCd0bycpLicgJy4gc2VsZjo6ZmFuY3lUaW1lKCRkYXRlc1snZW5kJ10pDQoJCQkJCQkJCS4nICcuVGV4dDo6Xygnb24gdGhlJykuJyAnLiBzZWxmOjpmYW5jeURhdGUoJGRhdGVzWydlbmQnXSk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJLy8gYW5vdGhlciBkYXkNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRvbl1bJ3N0YXJ0LWVuZCddID0gIAlzZWxmOjpmYW5jeURhdGVUaW1lKCRkYXRlc1snc3RhcnQnXSkNCgkJCQkJCQkJLicgJy5UZXh0OjpfKCd0bycpLicgJy4gc2VsZjo6ZmFuY3lEYXRlVGltZSgkZGF0ZXNbJ2VuZCddKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBzZXQgdGhlIGV2ZW50IHN0YXJ0IGFuZCBlbmQgZGF0ZQ0KCQkJCWlmIChkYXRlKCdZbWQnLCBzZWxmOjokZXZlbnRCdWlsZGVyWydzdGFydCddKSA9PSBkYXRlKCdZbWQnLCBzZWxmOjokZXZlbnRCdWlsZGVyWydlbmQnXSkpDQoJCQkJew0KCQkJCQkvLyBvbmUgZGF5IGV2ZW50DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0LWVuZCddID0gc2VsZjo6ZmFuY3lEYXRlKHNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10pOw0KCQkJCX0NCgkJCQllbHNlaWYgKGRhdGUoJ1ltJywgc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQnXSkgPT0gZGF0ZSgnWW0nLCBzZWxmOjokZXZlbnRCdWlsZGVyWydlbmQnXSkpDQoJCQkJew0KCQkJCQkvLyAgbXVsdGkgZGF5IGV2ZW50IGluIHNhbWUgbW9udGgNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10gPSAgZGF0ZSgnalMnLCBzZWxmOjokZXZlbnRCdWlsZGVyWydzdGFydCddKS4nIC0gJy4gc2VsZjo6ZmFuY3lEYXRlKHNlbGY6OiRldmVudEJ1aWxkZXJbJ2VuZCddKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbXVsdGkgZGF5IGV2ZW50DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0LWVuZCddID0gc2VsZjo6ZmFuY3lEYXRlKHNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10pLicgLSAnLiBzZWxmOjpmYW5jeURhdGUoc2VsZjo6JGV2ZW50QnVpbGRlclsnZW5kJ10pOw0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRpZA0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsVmFsdWVzKCRpZCwgJHR5cGUsICRlbmNyeXB0ZWROYW1lcyA9IGFycmF5KCkpDQoJew0KCQkvLyBub3cgbG9hZCBhbGwgY3VzdG9tIHZhbHVlcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJ2EuKicpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0eXBlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCA9ICcgLiAoaW50KSAkaWQpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA+PSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlbmNyeXB0ZWROYW1lcykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGVuY3J5cHRlZE5hbWVzIGFzICRlbmNyeXB0ZWQpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJHJlc3VsdC0+JGVuY3J5cHRlZCkgJiYgIWVtcHR5KCRyZXN1bHQtPiRlbmNyeXB0ZWQpKQ0KCQkJCQl7DQoJCQkJCQkkcmVzdWx0LT4kZW5jcnlwdGVkID0gc2VsZjo6ZGVjcnlwdFN0cmluZygkcmVzdWx0LT4kZW5jcnlwdGVkKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkcmVzdWx0Ow0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRlY3J5cHRTdHJpbmcoJHZhbHVlKQ0KCXsNCgkJaWYgKHNlbGY6OiRiYXNpY2tleSAmJiAhaXNfbnVtZXJpYygkdmFsdWUpICYmICR2YWx1ZSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCR2YWx1ZSwgdHJ1ZSkpKQ0KCQl7DQoJCQkvLyBkZWNyeXB0ICB2YWx1ZQ0KCQkJJHZhbHVlPSBydHJpbShzZWxmOjokbG9ja2VyLT5kZWNyeXB0U3RyaW5nKCR2YWx1ZSksICJcMCIpOw0KCQl9DQoJCXJldHVybiAkdmFsdWU7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRpZHMNCgkgKiBAcGFyYW0gJHR5cGUNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5hbWVzKCRpZHMsICR0eXBlKQ0KCXsNCgkJLy8gc2V0dXAgdGhlIGdldCBhcnJheQ0KCQkkZ2V0ID0gYXJyYXkoJ2EuaWQnKTsNCgkJc3dpdGNoKCR0eXBlKQ0KCQl7DQoJCQljYXNlICd2ZW51ZSc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJJGdldFtdID0gJ2EubmFtZSc7DQoJCQkJJHRhYmxlID0gJyNfX1tbW2NvbXBvbmVudF1dXV92ZW51ZSc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkkZ2V0W10gPSAnYS50aXRsZSc7DQoJCQkJJHRhYmxlID0gJyNfX2NhdGVnb3JpZXMnOw0KCQkJYnJlYWs7DQoJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCSRnZXRbXSA9ICdhLmNvbXBhbnluYW1lJzsNCgkJCQkkZ2V0W10gPSAnYS51c2VyJzsNCgkJCQkkdGFibGUgPSAnI19fW1tbY29tcG9uZW50XV1dX29yZ2FuaXplcic7DQoJCQlicmVhazsJCQkJDQoJCX0NCgkJaWYgKCFpc3NldCgkdGFibGUpIHx8ICFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJLy8gY2hlY2sgdGhlIGFycmF5IG9mIGlkcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGlkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCRpZHMgYXMgJGlkKQ0KCQkJeyANCgkJCQlpZiAoIShpc19udW1lcmljKCRpZCkpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIG51bGw7DQoJCQkJfSANCgkJCX0NCgkJfQ0KCQkvLyBub3cgbG9hZCBhbGwgY3VzdG9tIHZhbHVlcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGdldCkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJHRhYmxlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCBJTiAoJyAuIGltcGxvZGUoJywgJywgJGlkcykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkNCgkJCXsNCgkJCQlzd2l0Y2goJHR5cGUpDQoJCQkJew0KCQkJCQljYXNlICd2ZW51ZSc6DQoJCQkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkJCSRidWNrZXRbJGl0ZW0tPmlkXSA9ICRpdGVtLT5uYW1lOw0KCQkJCQlicmVhazsNCgkJCQkJY2FzZSAnY2F0aWQnOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQkkYnVja2V0WyRpdGVtLT5pZF0gPSAkaXRlbS0+dGl0bGU7DQoJCQkJCWJyZWFrOw0KCQkJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmNvbXBhbnluYW1lKSkNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9ICRpdGVtLT5jb21wYW55bmFtZTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9IEZhY3Rvcnk6OmdldFVzZXIoJGl0ZW0tPnVzZXIpLT5uYW1lOw0KCQkJCQkJfQ0KCQkJCQkJJGJ1Y2tldFskaXRlbS0+aWRdID0gJG5hbWU7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkYnVja2V0Ow0KCQl9DQoJCXJldHVybiBudWxsOw0KCX0NCltDVVNUT01DT0RFPWltYWdlSGVscGVyc10gDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCglwcm90ZWN0ZWQgc3RhdGljICRwbGFjZUhvbGRlcnM7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQbGFjZUhvbGRlcnMoJHR5cGUsICRpZCA9IG51bGwsICRyZWdpc3RlcmVkID0gbnVsbCwgJGNvbmZpZyA9IGFycmF5KCkpDQoJew0KCQlpZiAoJ2ludm9pY2UnID09PSAkdHlwZSkNCgkJew0KCQkJLy8gc2V0IHRvIGdsb2JhbCBpZiBub3QgZ2l2ZW4NCgkJCWlmICghJGlkICYmIHNlbGY6OiRvcmdhbml6ZXIpDQoJCQl7DQoJCQkJJGlkID0gc2VsZjo6JG9yZ2FuaXplcjsNCgkJCX0NCgkJCS8vIHNldCB0byBnbG9iYWwgaWYgbm90IGdpdmVuDQoJCQlpZiAoISRyZWdpc3RlcmVkICYmIHNlbGY6OiRyZWdpc3RlcmVkKQ0KCQkJew0KCQkJCSRyZWdpc3RlcmVkID0gc2VsZjo6JHJlZ2lzdGVyZWQ7DQoJCQl9DQoJCQlpZiAoJG9yZ2FuaXplciAmJiAkcmVnaXN0ZXJlZCkNCgkJCXsNCgkJCQkvLyBnZXQgbmVlZGVkIGRldGFpbHMNCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdKSkNCgkJCQl7DQoJCQkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldE9yZ2FuaXplckRldGFpbHMoKGludCkgJGlkKTsNCgkJCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldFJlZ2lzdGVyZWREZXRhaWxzKChpbnQpICRyZWdpc3RlcmVkKTsNCgkJCQkJc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkLidfJy4kcmVnaXN0ZXJlZF0gPSBzZWxmOjptZXJnZUFycmF5cygkZGV0YWlscyk7DQoJCQkJfQ0KCQkJCS8vIGFkZCB0aGUgY29uZmlnIGFycmF5IGlmIG5lZWRlZA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoYXJyYXkoc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkLidfJy4kcmVnaXN0ZXJlZF0sICRjb25maWcpKTsNCgkJCQl9DQoJCQkJcmV0dXJuIHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2VpZiAoJ3ZlbnVlJyA9PT0gJHR5cGUgJiYgJGlkID4gMCkNCgkJew0KCQkJLy8gZ2V0IG5lZWRlZCBkZXRhaWxzDQoJCQlyZXR1cm4gc2VsZjo6Z2V0VmVudWVEZXRhaWxzKChpbnQpICRpZCk7DQoJCX0NCgkJZWxzZWlmICgnZXZlbnQnID09PSAkdHlwZSAmJiAkaWQgPiAwKQ0KCQl7DQoJCQkvLyBnZXQgbmVlZGVkIGRldGFpbHMNCgkJCXJldHVybiBzZWxmOjpnZXRCYXNpY0V2ZW50RGV0YWlscygoaW50KSAkaWQpOw0KCQl9DQoJCWVsc2VpZiAoJ29yZ2FuaXplcicgPT09ICR0eXBlICYmICRpZCA+IDApDQoJCXsNCgkJCS8vIGdldCBuZWVkZWQgZGV0YWlscw0KCQkJaWYgKCFpc3NldChzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdKSkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBvcmdhbml6ZXINCgkJCQlzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdID0gc2VsZjo6Z2V0T3JnYW5pemVyRGV0YWlscygoaW50KSAkaWQpOw0KCQkJfQ0KDQoJCQkvLyBhZGQgdGhlIGNvbmZpZyBhcnJheSBpZiBuZWVkZWQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoYXJyYXkoc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkXSwgJGNvbmZpZykpOw0KCQkJfQ0KDQoJCQkvLyBpZiBsb2FkZWQgcmV0dXJuDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkXSkpDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF07DQoJCQl9DQoJCX0NCgkJZWxzZWlmICgoISRpZCB8fCAkaWQgPT0gMCkgJiYgKCdvcmdhbml6ZXInID09PSAkdHlwZSB8fCAndmVudWUnID09PSAkdHlwZSB8fCAnZXZlbnQnID09PSAkdHlwZSkpDQoJCXsNCgkJCXJldHVybiBhcnJheV92YWx1ZXMoc2VsZjo6Z2V0U2VsZWN0aW9uKCR0eXBlLCAnWycuJHR5cGUuJ18nLCAnXScpKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBSZXR1cm4gYXJyYXkgb2Ygc2VsZWN0aW9ucw0KCSogDQoJKiBAcmV0dXJuICAgIGFycmF5IGlmIHR5cGUgbWF0Y2gNCgkqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0eXBlLCAkZiwgJGIpDQoJew0KCQlpZiAoJ29yZ2FuaXplcicgPT09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLnVzZXInID0+ICRmLid1c2VyX2lkJy4kYiwNCgkJCQknYS5tb2JpbGVfcGhvbmUnID0+ICRmLidtb2JpbGVfcGhvbmUnLiRiLA0KCQkJCSdhLmNvbXBhbnluYW1lJyA9PiAkZi4nY29tcGFueW5hbWUnLiRiLA0KCQkJCSdhLnB1YmxpY251bWJlcicgPT4gJGYuJ3B1YmxpY251bWJlcicuJGIsDQoJCQkJJ2EuY3VycmVuY3knID0+ICRmLidjdXJyZW5jeScuJGIsDQoJCQkJJ2Euc3RyZWV0JyA9PiAkZi4nc3RyZWV0Jy4kYiwNCgkJCQknYS5wb3N0YWwnID0+ICRmLidwb3N0YWwnLiRiLA0KCQkJCSdhLmNpdHknID0+ICRmLidjaXR5Jy4kYiwNCgkJCQknYy5uYW1lJyA9PiAkZi4ncmVnaW9uJy4kYiwNCgkJCQknZC5uYW1lJyA9PiAkZi4nY291bnRyeScuJGIsDQoJCQkJJ2EucG9zdGFsY29kZScgPT4gJGYuJ3Bvc3RhbGNvZGUnLiRiLA0KCQkJCSdhLndlYnNpdGUnID0+ICRmLid3ZWJzaXRlJy4kYiwNCgkJCQknYScgPT4gJGYuJ3dlYnNpdGVfbGluaycuJGIsDQoJCQkJJ2EubG9nb19pbWFnZScgPT4gJGYuJ2xvZ28nLiRiLA0KCQkJCSdiJyA9PiAkZi4nbG9nb191cmwnLiRiLA0KCQkJCSdhLnByZWZpeCcgPT4gJGYuJ3ByZWZpeCcuJGIsDQoJCQkJJ2EudGF4X2NvbXBvdW5kJyA9PiAkZi4ndGF4X2NvbXBvdW5kJy4kYiwNCgkJCQknYS50YXhlZCcgPT4gJGYuJ3RheGVkJy4kYiwNCgkJCQknYS50YXhfdHlwZScgPT4gJGYuJ3RheF90eXBlJy4kYiwNCgkJCQknYS5kb2NfZm9vdGVyJyA9PiAkZi4nZG9jX2Zvb3RlcicuJGIsDQoJCQkJJ2EuZG9jX2hlYWRlcicgPT4gJGYuJ2RvY19oZWFkZXInLiRiLA0KCQkJCSdiLm5hbWUnID0+ICRmLiduYW1lJy4kYiwNCgkJCQknYycgPT4gJGYuJ19uYW1lJy4kYiwNCgkJCQknYi51c2VybmFtZScgPT4gJGYuJ3VzZXJuYW1lJy4kYiwNCgkJCQknYi5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYy5uYW1lJyA9PiAkZi4ncmVnaW9uX25hbWUnLiRiLA0KCQkJCSdkLm5hbWUnID0+ICRmLidjb3VudHJ5X25hbWUnLiRiDQoJCQkpOw0KCQl9DQoJCWVsc2VpZiAoJ3ZlbnVlJyA9PT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknYS5pZCcgPT4gJGYuJ2lkJy4kYiwJDQoJCQkJJ2EuY29udGFjdF9wZXJzb24nID0+ICRmLidjb250YWN0X3BlcnNvbicuJGIsDQoJCQkJJ2EuZW1haWwnID0+ICRmLidlbWFpbCcuJGIsDQoJCQkJJ2EucGhvbmUnID0+ICRmLidwaG9uZScuJGIsDQoJCQkJJ2EubmFtZScgPT4gJGYuJ25hbWUnLiRiLA0KCQkJCSdhLmRldGFpbHMnID0+ICRmLidkZXRhaWxzJy4kYiwNCgkJCQknYS5iYW5uZXJfaW1hZ2UnID0+ICRmLidiYW5uZXJfaW1hZ2UnLiRiLA0KCQkJCSdhJyA9PiAkZi4nYmFubmVyX2ltYWdlX3VybCcuJGIsDQoJCQkJJ2EucG9zdGVyX2ltYWdlJyA9PiAkZi4ncG9zdGVyX2ltYWdlJy4kYiwNCgkJCQknYicgPT4gJGYuJ3Bvc3Rlcl9pbWFnZV91cmwnLiRiLA0KCQkJCSdhLnRlYXNlcl9pbWFnZScgPT4gJGYuJ3RlYXNlcl9pbWFnZScuJGIsDQoJCQkJJ2MnID0+ICRmLid0ZWFzZXJfaW1hZ2VfdXJsJy4kYiwNCgkJCQknYS52ZW51ZV9pbWFnZXMnID0+ICRmLid2ZW51ZV9pbWFnZXMnLiRiLA0KCQkJCSdhLnN0cmVldCcgPT4gJGYuJ3N0cmVldCcuJGIsDQoJCQkJJ2EuY2l0eScgPT4gJGYuJ2NpdHknLiRiLA0KCQkJCSdkLm5hbWUnID0+ICRmLidjb3VudHJ5Jy4kYiwNCgkJCQknYS5tYXJrZXInID0+ICRmLidtYXAnLiRiLA0KCQkJCSdhLmNyZWF0ZWRfYnknID0+ICRmLidjcmVhdGVkX2J5X2lkJy4kYg0KCQkJKTsNCgkJfQ0KCQllbHNlaWYgKCdldmVudCcgPT09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLm5hbWUnID0+ICRmLiduYW1lJy4kYiwNCgkJCQknYS5hbGlhcycgPT4gJGYuJ2FsaWFzJy4kYiwNCgkJCQknYS5kYXRlJyA9PiAkZi4nZGF0ZScuJGIsDQoJCQkJJ2EucmVsYXRlZF9ldmVudCcgPT4gJGYuJ3JlbGF0ZWRfZXZlbnQnLiRiLA0KCQkJCSdhLmFydGljbGUnID0+ICRmLidhcnRpY2xlJy4kYiwNCgkJCQknYS5kZXRhaWxzJyA9PiAkZi4nZGV0YWlscycuJGIsDQoJCQkJJ2EudGVhc2VyJyA9PiAkZi4ndGVhc2VyJy4kYiwNCgkJCQknYS5iYW5uZXJfaW1hZ2UnID0+ICRmLidiYW5uZXJfaW1hZ2UnLiRiLA0KCQkJCSdhJyA9PiAkZi4nYmFubmVyX2ltYWdlX3VybCcuJGIsDQoJCQkJJ2EucG9zdGVyX2ltYWdlJyA9PiAkZi4ncG9zdGVyX2ltYWdlJy4kYiwNCgkJCQknYicgPT4gJGYuJ3Bvc3Rlcl9pbWFnZV91cmwnLiRiLA0KCQkJCSdhLnRlYXNlcl9pbWFnZScgPT4gJGYuJ3RlYXNlcl9pbWFnZScuJGIsDQoJCQkJJ2MnID0+ICRmLid0ZWFzZXJfaW1hZ2VfdXJsJy4kYiwNCgkJCQknYS5ldmVudF9pbWFnZXMnID0+ICRmLidldmVudF9pbWFnZXMnLiRiLA0KCQkJCSdhLmNoZWNrZWRfb3V0JyA9PiAkZi4nY2hlY2tlZF9vdXQnLiRiLA0KCQkJCSdkJyA9PiAkZi4nZXZlbnRfYnV0dG9uJy4kYiwNCgkJCQknZScgPT4gJGYuJ29yZ2FuaXplcl9idXR0b24nLiRiLA0KCQkJCSdmJyA9PiAkZi4ndmVudWVfYnV0dG9uJy4kYiwNCgkJCQknZC5pZCcgPT4gJGYuJ3ZlbnVlX2lkJy4kYiwNCgkJCQknZC5uYW1lJyA9PiAkZi4ndmVudWVfbmFtZScuJGIsDQoJCQkJJ2QuY2hlY2tlZF9vdXQnID0+ICRmLid2ZW51ZV9jaGVja2VkX291dCcuJGIsDQoJCQkJJ2UuaWQnID0+ICRmLidjYXRlZ29yeV9pZCcuJGIsDQoJCQkJJ2UudGl0bGUnID0+ICRmLidjYXRlZ29yeV9uYW1lJy4kYiwNCgkJCQknZS5jaGVja2VkX291dCcgPT4gJGYuJ2NhdGVnb3J5X2NoZWNrZWRfb3V0Jy4kYiwNCgkJCQknZi5pZCcgPT4gJGYuJ29yZ2FuaXplcl9pZCcuJGIsDQoJCQkJJ2YuY29tcGFueW5hbWUnID0+ICRmLidvcmdhbml6YXRpb24nLiRiLA0KCQkJCSdmLnVzZXInID0+ICRmLidvcmdhbml6ZXJfdXNlcicuJGIsDQoJCQkJJ2YuY2hlY2tlZF9vdXQnID0+ICRmLidvcmdhbml6ZXJfY2hlY2tlZF9vdXQnLiRiLA0KCQkJCSdjLm5hbWUnID0+ICRmLidvcmdhbml6ZXInLiRiLA0KCQkJCSdjLmVtYWlsJyA9PiAkZi4nb3JnYW5pemVyX2VtYWlsJy4kYg0KCQkJKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkYmFzaWNFdmVudERldGFpbHMgPSBhcnJheSgpOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRCYXNpY0V2ZW50VmFsdWUoJGlkLCAkZmllbGQsICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCWlmICgkaWQgPiAwICkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0QmFzaWNFdmVudERldGFpbHMoJGlkKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZmllbGQgaWYgc2V0DQoJCQkkZmllbGQgPSAnW2V2ZW50XycuJGZpZWxkLiddJzsNCgkJCWlmIChpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXSkgJiYgaXNzZXQoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGZpZWxkXSkpDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmaWVsZF07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRkZWZhdWx0Ow0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QmFzaWNFdmVudERldGFpbHMoJGlkKQ0KCXsNCgkJaWYgKCRpZCA+IDApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldEJhc2ljRXZlbnREZXRhaWxzKCRpZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QmFzaWNFdmVudERldGFpbHMoJGlkLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJykNCgl7DQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkkZiA9ICdbZXZlbnRfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkc2VsZWN0aW9uID0gc2VsZjo6Z2V0U2VsZWN0aW9uKCdldmVudCcsICRmLCAkYik7DQoJCS8vIHJlbW92ZSBzb21lIHRoYXQgYXJlIHNldCBkeW5hbWljYWxseQ0KCQl1bnNldCgkc2VsZWN0aW9uWydhJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydiJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydjJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydkJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydlJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydmJ10pOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRzZWxlY3Rpb24pLCBhcnJheV92YWx1ZXMoJHNlbGVjdGlvbikpKTsNCg0KCQkvLyBHZXQgdGhlIGN1cnJlbnQgdXNlciBmb3IgYXV0aG9yaXNhdGlvbiBjaGVja3MNCgkJJHVzZXIJPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCSRsZXZlbHMJPSAkdXNlci0+Z2V0QXV0aG9yaXNlZFZpZXdMZXZlbHMoKTsNCg0KCQkvLyBHZXQgZnJvbSAjX19bW1tjb21wb25lbnRdXV1fZXZlbnQgYXMgYQ0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9ldmVudCcsICdhJykpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvbXBvbmVudF1dXV92ZW51ZSBhcyBkDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3ZlbnVlJywgJ2QnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EudmVudWUnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2QuaWQnKSAuICcpJyk7DQoNCgkJLy8gR2V0IGZyb20gI19fY2F0ZWdvcmllcyBhcyBlDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fY2F0ZWdvcmllcycsICdlJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNhdGlkJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdlLmlkJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXIgYXMgZg0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAnZicpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5vcmdhbml6ZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2YuaWQnKSAuICcpJyk7DQoNCgkJLy8gR2V0IGZyb20gI19fdXNlcnMgYXMgYw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX3VzZXJzJywgJ2MnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2YudXNlcicpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnYy5pZCcpIC4gJyknKTsNCgkJLy8gZmlsdGVycw0KCQkkcXVlcnktPndoZXJlKCdhLmFjY2Vzc3JlZ2lzdHJhdGlvbiBJTiAoJyAuIGltcGxvZGUoJywnLCAkbGV2ZWxzKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJy4gKGludCkgJGlkKTsNCgkJLy8gbG9hZCB0aGUgcXVlcnkNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQkvLyBHZXQgdGhlIGJhc2ljIGVuY3J5cHRpb24uDQoJCQlzZWxmOjokYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJCS8vIEdldCB0aGUgZW5jcnlwdGlvbiBvYmplY3QuDQoJCQlzZWxmOjokbG9ja2VyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoc2VsZjo6JGJhc2lja2V5LCAxMjgpOw0KCQkJLy8gc2V0IGltYWdlIGZpbGUgbGluaw0KCQkJc2VsZjo6JGZpbGVsaW5rID0gc2VsZjo6Z2V0Rm9sZGVyUGF0aCgndXJsJyk7DQoJCQkvLyBvcGVuIHRoZSB0ZWFzZXIgaW1hZ2UNCgkJCSRpbWFnZXMgPSBhcnJheSgndGVhc2VyX2ltYWdlJywncG9zdGVyX2ltYWdlJywnYmFubmVyX2ltYWdlJyk7DQoJCQlmb3JlYWNoICgkaW1hZ2VzIGFzICRpbWFnZSkNCgkJCXsNCgkJCQkvLyBzZXQgaW1hZ2UNCgkJCQkkaW1hZ2VGb3VuZCA9ICcnOw0KCQkJCSRpbWFnZVVybCA9ICcnOw0KCQkJCWlmIChpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4kaW1hZ2UuJGJdKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4kaW1hZ2UuJGJdKSkgDQoJCQkJew0KCQ0KCQkJCQkkdG1wSW1hZ2UgPSBzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4kaW1hZ2UuJGJdOw0KCQkJCQkvLyBvcGVuIHRoZSBzdHJpbmcuDQoJCQkJCSR0bXBJbWFnZSA9IHNlbGY6OmRlY3J5cHRTdHJpbmcoJHRtcEltYWdlKTsNCgkJCQkJaWYgKHN0cnBvcygkdG1wSW1hZ2UsICdfJykgIT09IGZhbHNlKQ0KCQkJCQl7DQoJCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICR0bXBJbWFnZSk7DQoJCQkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJCQl7DQoJCQkJCQkJJGltYWdlVXJsID0gc2VsZjo6JGZpbGVsaW5rLiR0bXBJbWFnZS4nLicuJGV4dGVudGlvblsyXTsNCgkJCQkJCQkkaW1hZ2VGb3VuZCA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwiIHNyYz0iJy4kaW1hZ2VVcmwuJyIgYWx0PSInLnNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLiduYW1lJy4kYl0uJyI+JzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBub3cgYWRkIHRoZSBpbWFnZQ0KCQkJCXNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLiRpbWFnZS4kYl0gPSAkaW1hZ2VGb3VuZDsNCgkJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4kaW1hZ2UuJ191cmwnLiRiXSA9ICRpbWFnZVVybDsNCgkJCX0NCgkJCS8vIHNldCB0aGUgZ2FsbGVyeSBvZiBpbWFnZXMNCgkJCWlmIChpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZXZlbnRfaW1hZ2VzJy4kYl0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidldmVudF9pbWFnZXMnLiRiXSkpDQoJCQl7DQoJCQkJJHRtcEltYWdlcyA9IHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidldmVudF9pbWFnZXMnLiRiXTsNCgkJCQlpZiAoc2VsZjo6JGJhc2lja2V5KQ0KCQkJCXsNCgkJCQkJLy8gb3BlbiB0aGUgc3RyaW5nLg0KCQkJCQkkdG1wSW1hZ2VzID0gc2VsZjo6ZGVjcnlwdFN0cmluZygkdG1wSW1hZ2VzKTsNCgkJCQl9DQoJCQkJLy8gYnVpbGQgYW4gYXJyYXkgb2YgaW1hZ2VzDQoJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCR0bXBJbWFnZXMpKQ0KCQkJCXsNCgkJCQkJJHRtcEltYWdlcyA9IGpzb25fZGVjb2RlKCR0bXBJbWFnZXMsIHRydWUpOw0KCQkJCX0NCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRtcEltYWdlcykpDQoJCQkJew0KCQkJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCQkJZm9yZWFjaCAoJHRtcEltYWdlcyBhcyAkZmlsZU5hbWUpDQoJCQkJCXsNCgkJCQkJCS8vIGJ1aWxkIHRoZSBhcnJheQ0KCQkJCQkJaWYgKHN0cnBvcygkZmlsZU5hbWUsICdfJykgIT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCSRleHRlbnRpb24gPSBleHBsb2RlKCdfJywgJGZpbGVOYW1lKTsNCgkJCQkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBzZXQgbGluaw0KCQkJCQkJCQkkYnVja2V0W10gPSBzZWxmOjokZmlsZWxpbmsuJGZpbGVOYW1lLicuJy4kZXh0ZW50aW9uWzJdOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoaXNzZXQoJGJ1Y2tldCkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGJ1Y2tldCkpDQoJCQkJew0KCQkJCQkkZXZlbnRJbWFnZVdpZHRoID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdldmVudF93aWR0aCcsIDgwMCk7DQoJCQkJCSRldmVudEltYWdlSGVpZ2h0ID0gIHNlbGY6OiRwYXJhbXMtPmdldCgnZXZlbnRfaGVpZ2h0JywgNjAwKTsNCgkJCQkJJHRhYkNvbnRyb2xJRCA9IG1kNShzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nbmFtZScuJGJdLnNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidpZCcuJGJdKTsNCgkJCQkJLy8gYnVpbGQgZ2FsbGVyeQ0KCQkJCQkkZ2FsbGVyeSA9IGFycmF5KCk7DQoJCQkJCSRjb3VudCA9IGNvdW50KCRidWNrZXQpOw0KCQkJCQlpZiAoJGNvdW50ID09IDEpDQoJCQkJCXsNCgkJCQkJCSRnYWxsZXJ5W10gPSAnPGRpdiBjbGFzcz0idWstZ3JpZCB1ay1ncmlkLXdpZHRoLTEtMSIgZGF0YS11ay1ncmlkLW1hcmdpbj4nOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIHVrLWdyaWQtd2lkdGgtbWVkaXVtLTEtNCIgZGF0YS11ay1ncmlkLW1hcmdpbj4nOw0KCQkJCQl9DQoJCQkJCWZvcmVhY2ggKCRidWNrZXQgYXMgJHZhbCkNCgkJCQkJew0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8ZGl2Pic7DQoJCQkJCQkkZ2FsbGVyeVtdID0gJzxhIGhyZWY9IicgLiAkdmFsIC4gJyIgZGF0YS11ay1saWdodGJveD0ie2dyb3VwOlwnZ3JvdXAtJyAuICR0YWJDb250cm9sSUQgLiAnXCd9IiB0aXRsZT0iJyAuIHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLiduYW1lJy4kYl0gLiAnIj4nOw0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8aW1nIHNyYz0iJyAuICR2YWwgLiAnIiBhbHQ9ImV2ZW50IGltYWdlIiB3aWR0aD0iJyAuICRldmVudEltYWdlV2lkdGggLiAnIiBoZWlnaHQ9IicgLiAkZXZlbnRJbWFnZUhlaWdodCAuICciPic7DQoJCQkJCQkkZ2FsbGVyeVtdID0gJzwvYT4nOw0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8L2Rpdj4nOw0KCQkJCQl9DQoJCQkJCSRnYWxsZXJ5W10gPSAnPC9kaXY+JzsNCgkJCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2V2ZW50X2ltYWdlcycuJGJdID0gaW1wbG9kZSgnJywgJGdhbGxlcnkpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZXZlbnRfaW1hZ2VzJy4kYl0gPSAnJzsNCgkJCQl9DQoJCQl9DQoJCQkvLyBkbyBmaW5hbCBidWlsZA0KCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidyZWxhdGVkX2V2ZW50Jy4kYl0pKQ0KCQkJew0KCQkJCS8vIERlY29kZSByZWxhdGVkX2V2ZW50DQoJCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ3JlbGF0ZWRfZXZlbnQnLiRiXSA9IGpzb25fZGVjb2RlKHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidyZWxhdGVkX2V2ZW50Jy4kYl0sIHRydWUpOw0KCQkJfQ0KCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidhcnRpY2xlJy4kYl0pKQ0KCQkJew0KCQkJCS8vIERlY29kZSBhcnRpY2xlcw0KCQkJCXNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidhcnRpY2xlJy4kYl0gPSBqc29uX2RlY29kZShzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nYXJ0aWNsZScuJGJdLCB0cnVlKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjayhzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZGF0ZScuJGJdKSkNCgkJCXsNCgkJCQkvLyBEZWNvZGUgZGF0ZXMNCgkJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZGF0ZScuJGJdID0ganNvbl9kZWNvZGUoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2RhdGUnLiRiXSwgdHJ1ZSk7DQoJCQkJaWYgKCRkYXRlID0gc2VsZjo6c2V0RXZlbnRTdGFydERhdGUoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2RhdGUnLiRiXSkpDQoJCQkJew0KCQkJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZGF0ZScuJGJdID0gJGRhdGVbJ3RleHQnXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2RhdGUnLiRiXSA9ICcnOw0KCQkJCX0NCgkJCX0NCgkJCS8vIHNldCBlbWFpbCBzZWNyZXQNCgkJCSRlcG9zQ29kZSA9IGFycmF5KCdpZCcgPT4gc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ29yZ2FuaXplcl9pZCcuJGJdLCAnZW1haWwnID0+IHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidvcmdhbml6ZXJfZW1haWwnLiRiXSk7DQoJCQkkZXBvc0NvZGUgPSBqc29uX2VuY29kZSgkZXBvc0NvZGUpOw0KCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2Vwb3Njb2RlJy4kYl0gPSBzZWxmOjpiYXNlNjRfdXJsZW5jb2RlKHNlbGY6OiRsb2NrZXItPmVuY3J5cHRTdHJpbmcoJGVwb3NDb2RlKSk7DQoJCQkvLyBBbHdheXMgY3JlYXRlIGEgc2x1ZyBmb3Igc2VmIFVSTCdzDQoJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nc2x1ZycuJGJdID0gKGlzc2V0KHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidhbGlhcycuJGJdKSAmJiBpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4naWQnLiRiXSkpID8gc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2lkJy4kYl0uJzonLnNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidhbGlhcycuJGJdIDogc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2lkJy4kYl07DQoJCQkvLyBzZXQgZXZlbnQgYnV0dG9ucw0KCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2V2ZW50X2J1dHRvbicuJGJdID0gc2VsZjo6bG9hZEJ1dHRvbnMoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0sICdldmVudCcsICR1c2VyLCAkZi4nbmFtZScuJGIsICRmLidpZCcuJGIsICRmLidjaGVja2VkX291dCcuJGIsICRmLidvcmdhbml6ZXInLiRiLCAkZi4nZXBvc2NvZGUnLiRiLCAkZi4nc2x1ZycuJGIpOw0KCQkJLy8gc2V0IG9yZ2FuaXplciBidXR0b25zDQoJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nb3JnYW5pemVyX2J1dHRvbicuJGJdID0gc2VsZjo6bG9hZEJ1dHRvbnMoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0sICdvcmdhbml6ZXInLCAkdXNlciwgJGYuJ29yZ2FuaXplcicuJGIsICRmLidvcmdhbml6ZXJfaWQnLiRiLCAkZi4nb3JnYW5pemVyX2NoZWNrZWRfb3V0Jy4kYiwgJGYuJ29yZ2FuaXplcicuJGIsICRmLidlcG9zY29kZScuJGIsICRmLidzbHVnJy4kYik7DQoJCQkvLyBzZXQgdmVudWUgYnV0dG9ucw0KCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ3ZlbnVlX2J1dHRvbicuJGJdID0gc2VsZjo6bG9hZEJ1dHRvbnMoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0sICd2ZW51ZScsICR1c2VyLCAkZi4ndmVudWVfbmFtZScuJGIsICRmLid2ZW51ZV9pZCcuJGIsICRmLid2ZW51ZV9jaGVja2VkX291dCcuJGIsICRmLidvcmdhbml6ZXInLiRiLCAkZi4nZXBvc2NvZGUnLiRiLCAkZi4nc2x1ZycuJGIpOwkJCQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHZlbnVlRGV0YWlscyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFZlbnVlVmFsdWUoJGlkLCAkZmllbGQsICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCWlmICgkaWQgPiAwICkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokdmVudWVEZXRhaWxzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFZlbnVlRGV0YWlscygkaWQpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBmaWVsZCBpZiBzZXQNCgkJCSRmaWVsZCA9ICdbdmVudWVfJy4kZmllbGQuJ10nOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXSkgJiYgaXNzZXQoc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmaWVsZF0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGZpZWxkXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGRlZmF1bHQ7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRWZW51ZURldGFpbHMoJGlkKQ0KCXsNCgkJaWYgKCRpZCA+IDApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRWZW51ZURldGFpbHMoJGlkKTsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjokdmVudWVEZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VmVudWVEZXRhaWxzKCRpZCwgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicpDQoJew0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW3ZlbnVlXyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJJHNlbGVjdGlvbiA9IHNlbGY6OmdldFNlbGVjdGlvbigndmVudWUnLCAkZiwgJGIpOw0KCQkvLyByZW1vdmUgc29tZSB0aGF0IGFyZSBzZXQgZHluYW1pY2FsbHkNCgkJdW5zZXQoJHNlbGVjdGlvblsnYSddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnYiddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnYyddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnZCddKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkc2VsZWN0aW9uKSwgYXJyYXlfdmFsdWVzKCRzZWxlY3Rpb24pKSk7DQoNCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3ZlbnVlIHRhYmxlCQkJCQ0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV92ZW51ZScsICdhJykpOwkJCQkNCg0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JywgJ2QnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnZC5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuIChpbnQpICRpZCk7DQoJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdID0gJGRiLT5sb2FkQXNzb2MoKTsNCgkJCS8vIEdldCB0aGUgYmFzaWMgZW5jcnlwdGlvbi4NCgkJCXNlbGY6OiRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycpOw0KCQkJaWYgKHNlbGY6OiRiYXNpY2tleSkNCgkJCXsNCgkJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJCXNlbGY6OiRsb2NrZXIgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcihzZWxmOjokYmFzaWNrZXksIDEyOCk7DQoJCQl9DQoJCQkvLyBzZXQgaW1hZ2UgZmlsZSBsaW5rDQoJCQlzZWxmOjokZmlsZWxpbmsgPSBzZWxmOjpnZXRGb2xkZXJQYXRoKCd1cmwnKTsNCgkJCS8vIHNldCBzaW5nbGUgaW1hZ2VzDQoJCQkkaW1hZ2VzID0gYXJyYXkoJ2Jhbm5lcl9pbWFnZScsICdwb3N0ZXJfaW1hZ2UnLCAndGVhc2VyX2ltYWdlJyk7DQoJCQlmb3JlYWNoICgkaW1hZ2VzIGFzICRpbWFnZSkNCgkJCXsNCgkJCQkvLyBzZXQgaW1hZ2UNCgkJCQkkaW1hZ2VGb3VuZCA9ICcnOw0KCQkJCSRpbWFnZVVybCA9ICcnOw0KCQkJCWlmIChpc3NldChzZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGYuJGltYWdlLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLiRpbWFnZS4kYl0pKSANCgkJCQl7DQoJCQkJCQ0KCQkJCQkkdG1wSW1hZ2UgPSBzZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGYuJGltYWdlLiRiXTsNCgkJCQkJLy8gb3BlbiB0aGUgc3RyaW5nLg0KCQkJCQkkdG1wSW1hZ2UgPSBzZWxmOjpkZWNyeXB0U3RyaW5nKCR0bXBJbWFnZSk7DQoJCQkJCWlmIChzdHJwb3MoJHRtcEltYWdlLCAnXycpICE9PSBmYWxzZSkNCgkJCQkJew0KCQkJCQkJJGV4dGVudGlvbiA9IGV4cGxvZGUoJ18nLCAkdG1wSW1hZ2UpOw0KCQkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQkJew0KCQkJCQkJCSRpbWFnZVVybCA9IHNlbGY6OiRmaWxlbGluay4kdG1wSW1hZ2UuJy4nLiRleHRlbnRpb25bMl07DQoJCQkJCQkJJGltYWdlRm91bmQgPSAnPGltZyBjbGFzcz0idWstdGh1bWJuYWlsIiBzcmM9IicuJGltYWdlVXJsLiciIGFsdD0iJy5zZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGYuJ25hbWUnLiRiXS4nIj4nOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIG5vdyBhZGQgdGhlIGltYWdlDQoJCQkJc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLiRpbWFnZS4kYl0gPSAkaW1hZ2VGb3VuZDsNCgkJCQlzZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGYuJGltYWdlLidfdXJsJy4kYl0gPSAkaW1hZ2VVcmw7DQoJCQl9DQoJCQkvLyBzZXQgdGhlIGdhbGxlcnkgb2YgaW1hZ2VzDQoJCQlpZiAoaXNzZXQoc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLid2ZW51ZV9pbWFnZXMnLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLid2ZW51ZV9pbWFnZXMnLiRiXSkpDQoJCQl7DQoJCQkJJHRtcEltYWdlcyA9IHNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXVskZi4ndmVudWVfaW1hZ2VzJy4kYl07DQoJCQkJaWYgKHNlbGY6OiRiYXNpY2tleSkNCgkJCQl7DQoJCQkJCS8vIG9wZW4gdGhlIHN0cmluZy4NCgkJCQkJJHRtcEltYWdlcyA9IHNlbGY6OmRlY3J5cHRTdHJpbmcoJHRtcEltYWdlcyk7DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIGFuIGFycmF5IG9mIGltYWdlcw0KCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkdG1wSW1hZ2VzKSkNCgkJCQl7DQoJCQkJCSR0bXBJbWFnZXMgPSBqc29uX2RlY29kZSgkdG1wSW1hZ2VzLCB0cnVlKTsNCgkJCQl9DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0bXBJbWFnZXMpKQ0KCQkJCXsNCgkJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJCWZvcmVhY2ggKCR0bXBJbWFnZXMgYXMgJGZpbGVOYW1lKQ0KCQkJCQl7DQoJCQkJCQkvLyBidWlsZCB0aGUgYXJyYXkNCgkJCQkJCWlmIChzdHJwb3MoJGZpbGVOYW1lLCAnXycpICE9PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICRmaWxlTmFtZSk7DQoJCQkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gc2V0IGxpbmsNCgkJCQkJCQkJJGJ1Y2tldFtdID0gc2VsZjo6JGZpbGVsaW5rLiRmaWxlTmFtZS4nLicuJGV4dGVudGlvblsyXTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKGlzc2V0KCRidWNrZXQpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCXsNCgkJCQkJJGV2ZW50SW1hZ2VXaWR0aCA9IHNlbGY6OiRwYXJhbXMtPmdldCgndmVudWVfd2lkdGgnLCA4MDApOw0KCQkJCQkkZXZlbnRJbWFnZUhlaWdodCA9ICBzZWxmOjokcGFyYW1zLT5nZXQoJ3ZlbnVlX2hlaWdodCcsIDYwMCk7DQoJCQkJCSR0YWJDb250cm9sSUQgPSBtZDUoc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLiduYW1lJy4kYl0uc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLidpZCcuJGJdKTsNCgkJCQkJLy8gYnVpbGQgZ2FsbGVyeQ0KCQkJCQkkZ2FsbGVyeSA9IGFycmF5KCk7DQoJCQkJCSRjb3VudCA9IGNvdW50KCRidWNrZXQpOw0KCQkJCQlpZiAoJGNvdW50ID09IDEpDQoJCQkJCXsNCgkJCQkJCSRnYWxsZXJ5W10gPSAnPGRpdiBjbGFzcz0idWstZ3JpZCB1ay1ncmlkLXdpZHRoLTEtMSIgZGF0YS11ay1ncmlkLW1hcmdpbj4nOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIHVrLWdyaWQtd2lkdGgtbWVkaXVtLTEtNCIgZGF0YS11ay1ncmlkLW1hcmdpbj4nOw0KCQkJCQl9DQoJCQkJCWZvcmVhY2ggKCRidWNrZXQgYXMgJHZhbCkNCgkJCQkJew0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8ZGl2Pic7DQoJCQkJCQkkZ2FsbGVyeVtdID0gJzxhIGhyZWY9IicgLiAkdmFsIC4gJyIgZGF0YS11ay1saWdodGJveD0ie2dyb3VwOlwnZ3JvdXAtJyAuICR0YWJDb250cm9sSUQgLiAnXCd9IiB0aXRsZT0iJyAuIHNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXVskZi4nbmFtZScuJGJdIC4gJyI+JzsNCgkJCQkJCSRnYWxsZXJ5W10gPSAnPGltZyBzcmM9IicgLiAkdmFsIC4gJyIgYWx0PSJ2ZW51ZSBpbWFnZSIgd2lkdGg9IicgLiAkZXZlbnRJbWFnZVdpZHRoIC4gJyIgaGVpZ2h0PSInIC4gJGV2ZW50SW1hZ2VIZWlnaHQgLiAnIj4nOw0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8L2E+JzsNCgkJCQkJCSRnYWxsZXJ5W10gPSAnPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCQkkZ2FsbGVyeVtdID0gJzwvZGl2Pic7DQoJCQkJCXNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXVskZi4ndmVudWVfaW1hZ2VzJy4kYl0gPSBpbXBsb2RlKCcnLCAkZ2FsbGVyeSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXVskZi4ndmVudWVfaW1hZ2VzJy4kYl0gPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokdmVudWVEZXRhaWxzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljICRpdGVtT3JnYW5pemVyID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SXRlbU9yZ2FuaXplcigmJGl0ZW0sICR0eXBlLCAka2V5ID0gJ2lkJywgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRpdGVtKSAmJiBpc3NldCgkaXRlbS0+JGtleSkgJiYgKGludCkgJGl0ZW0tPiRrZXkgPiAwKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiBhbHJlYWR5IHNldA0KCQkJaWYgKCFpc3NldChzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldEl0ZW1Pcmdhbml6ZXIoJGl0ZW0sICR0eXBlLCAka2V5KTsNCgkJCX0NCgkJCWlmIChpc3NldChzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0pICYmIHNlbGY6OiRpdGVtT3JnYW5pemVyWyR0eXBlLiRpdGVtLT4ka2V5XSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRJdGVtT3JnYW5pemVyKCYkaXRlbSwgJHR5cGUsICRrZXkpDQoJew0KCQkvLyBnZXQgb3JnYW5pemVyIGlkIGZvciB2YXJpb3VzIHR5cGVzIG9mIGl0ZW1zDQoJCXN3aXRjaCgkdHlwZSkNCgkJew0KCQkJY2FzZSAndHJhbnNhY3Rpb24nOg0KCQkJCWlmIChpc3NldCgkaXRlbS0+aW52b2ljZSkpDQoJCQkJew0KCQkJCQlzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0gPSBzZWxmOjpnZXRWYXIoJ2ludm9pY2UnLCAkaXRlbS0+aW52b2ljZSwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkb3JnYW5pemVyRGV0YWlscyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE9yZ2FuaXplclZhbHVlKCRpZCwgJGZpZWxkLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0T3JnYW5pemVyRGV0YWlscygkaWQpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBmaWVsZCBpZiBzZXQNCgkJCSRmaWVsZCA9ICdbb3JnYW5pemVyXycuJGZpZWxkLiddJzsNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdKSAmJiBpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmaWVsZF0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmaWVsZF07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRkZWZhdWx0Ow0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0T3JnYW5pemVyRGV0YWlscygkaWQpDQoJew0KCQlpZiAoJGlkID4gMCkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRPcmdhbml6ZXJEZXRhaWxzKCRpZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRPcmdhbml6ZXJEZXRhaWxzKCRpZCwgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicpDQoJew0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW29yZ2FuaXplcl8nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJLy8gU2VsZWN0IHNvbWUgZmllbGRzDQoJCSRzZWxlY3Rpb24gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ29yZ2FuaXplcicsICRmLCAkYik7DQoJCS8vIHJlbW92ZSBzb21lIHRoYXQgYXJlIHNldCBkeW5hbWljYWxseQ0KCQl1bnNldCgkc2VsZWN0aW9uWydhJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydiJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydjJ10pOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRzZWxlY3Rpb24pLCBhcnJheV92YWx1ZXMoJHNlbGVjdGlvbikpKTsNCg0KCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fb3JnYW5pemVyIHRhYmxlCQkJCQ0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAnYScpKTsJCQkJDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnLCAnYicpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS51c2VyJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdiLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWdpb24nLCAnYycpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2MuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnZCcpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5jb3VudHJ5JykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdkLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJy4gKGludCkgJGlkKTsNCgkJLy8gbG9hZCB0aGUgcXVlcnkNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdID0gJGRiLT5sb2FkQXNzb2MoKTsNCgkJCS8vIGxvYWQgdGhlIG5hbWUNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidjb21wYW55bmFtZScuJGJdKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidjb21wYW55bmFtZScuJGJdKSkNCgkJCXsNCgkJCQkkbmFtZSA9IHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2NvbXBhbnluYW1lJy4kYl07DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJG5hbWUgPSBzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLiduYW1lJy4kYl07DQoJCQl9DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidfbmFtZScuJGJdID0gJG5hbWU7DQoJCQkvLyBzZXQgd2Vic2l0ZSBsaW5rDQoJCQkkbGluayA9ICcnOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGUnLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nd2Vic2l0ZScuJGJdKSkgDQoJCQl7DQoJCQkJLy8gc2V0IGxpbmsNCgkJCQlpZiAoc3RycG9zKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGUnLiRiXSwgJ2h0dHA6Ly8nKSAhPT0gZmFsc2UgfHwgc3RycG9zKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGUnLiRiXSwgJ2h0dHBzOi8vJykgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGxpbmsgPSAnPGEgaHJlZj0iJy5zZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0uJyI+JyAuICRuYW1lIC4gJzwvYT4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkbGluayA9ICc8YSBocmVmPSJodHRwOi8vJy5zZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0uJyI+JyAuICRuYW1lIC4gJzwvYT4nOw0KCQkJCX0NCgkJCX0NCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGVfbGluaycuJGJdID0gJGxpbms7DQoNCgkJCS8vIHNldCBsb2dvIGltYWdlDQoJCQkkbG9nb0ZvdW5kID0gJyc7DQoJCQkkbG9nb1VybCA9ICcnOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ28nLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nbG9nbycuJGJdKSkgDQoJCQl7DQoJCQkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQkJCXNlbGY6OiRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycpOw0KCQkJCSRsb2dvID0gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nbG9nbycuJGJdOw0KCQkJCWlmIChzZWxmOjokYmFzaWNrZXkpDQoJCQkJew0KCQkJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJCQlzZWxmOjokbG9ja2VyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoc2VsZjo6JGJhc2lja2V5LCAxMjgpOw0KCQkJCQkkbG9nbyA9IHNlbGY6OmRlY3J5cHRTdHJpbmcoJGxvZ28pOw0KCQkJCX0NCgkJCQlpZiAoc3RycG9zKCRsb2dvLCAnXycpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRleHRlbnRpb24gPSBleHBsb2RlKCdfJywgJGxvZ28pOw0KCQkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJCXsNCgkJCQkJCSRsb2dvVXJsID0gc2VsZjo6Z2V0Rm9sZGVyUGF0aCgndXJsJykuJGxvZ28uJy4nLiRleHRlbnRpb25bMl07DQoJCQkJCQkkbG9nb0ZvdW5kID0gJzxpbWcgY2xhc3M9InVrLXRodW1ibmFpbCIgc3JjPSInLiRsb2dvVXJsLiciIGFsdD0iJy4kbmFtZS4nIj4nOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbm93IGFkZCB0aGUgbG9nbw0KCQkJc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nbG9nbycuJGJdID0gJGxvZ29Gb3VuZDsNCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ29fdXJsJy4kYl0gPSAkbG9nb1VybDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHJlZ1VzZXJzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVnVXNlclZhbHVlKCRpZCwgJGZpZWxkLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFJlZ1VzZXJWYWx1ZSgkaWQpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBmaWVsZCBpZiBzZXQNCgkJCSRmaWVsZCA9ICdbcmVnaXN0ZXJlZF8nLiRmaWVsZC4nXSc7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF0pICYmIGlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmaWVsZF0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokcmVnVXNlcnNbJGlkXVskZmllbGRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlZ2lzdGVyZWREZXRhaWxzKCRpZCkNCgl7DQoJCWlmICgkaWQgPiAwKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRSZWdVc2VyVmFsdWUoJGlkKTsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjokcmVnVXNlcnNbJGlkXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0UmVnVXNlclZhbHVlKCRpZCwgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicpDQoJew0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW3JlZ2lzdGVyZWRfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIGZpcnN0IGdldCB0aGUgdXNlcg0KCQkkdXNlcklkID0gc2VsZjo6Z2V0VmFyKCdyZWdpc3RlcmVkX3VzZXInLCAkaWQsICdpZCcsICd1c2VyJyk7DQoJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJLy8gbm93IGxvYWQgYWxsIGN1c3RvbSB2YWx1ZXMNCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoJ2EubmFtZScsJ2EudmFsdWUnKSwNCgkJCWFycmF5KCduYW1lJywndmFsdWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX3JlZ2lzdHJ5X2N1c3RvbV92YWx1ZScsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCdhLnJlZ2lzdGVyZWRfdXNlciA9ICcgLiAoaW50KSAkaWQpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA+PSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGN1c3RvbVZhbHVlcyA9ICRkYi0+bG9hZEFzc29jTGlzdCgnbmFtZScsICd2YWx1ZScpOw0KCQkJLy8gcG9zc2libGUga2V5cw0KCQkJJHNlYXJjaCA9IGFycmF5KA0KCQkJCSdjb3VudHJ5JyANCgkJCQkJPT4gYXJyYXkoJ2NvdW50cnknLCAnY291bnRyeV9vbmUnLCAnY291bnRyeV8xJywgJ2NvdW50cnkxJywgJ2NvdW50cnlvbmUnLCAnY291bnRyeV8nKSwgDQoJCQkJJ2N1cnJlbmN5JyANCgkJCQkJPT4gYXJyYXkoJ2N1cnJlbmN5JywgJ2N1cnJlbmN5X29uZScsICdjdXJyZW5jeV8xJywgJ2N1cnJlbmN5MScsICdjdXJyZW5jeW9uZScsICdjdXJyZW5jeV8nKSwgDQoJCQkJJ3JlZ2lvbicgDQoJCQkJCT0+IGFycmF5KCdyZWdpb24nLCAncmVnaW9uX29uZScsICdyZWdpb25fMScsICdyZWdpb24xJywgJ3JlZ2lvbm9uZScsICdyZWdpb25fJykNCgkJCQkpOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF0gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGN1c3RvbVZhbHVlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCXsNCgkJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4ka2V5LiRiXSA9ICR2YWx1ZTsNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHZhbHVlKSAmJiAhaXNfbnVtZXJpYygkdmFsdWUpKQ0KCQkJCXsNCgkJCQkJJGZvdW5kID0gZmFsc2U7DQoJCQkJCSRuZXdWYWx1ZSA9ICcnOw0KCQkJCQlmb3JlYWNoICgkc2VhcmNoIGFzICRjb2RlID0+ICRrZXlzKQ0KCQkJCQl7DQoJCQkJCQlpZiAoISRmb3VuZCkNCgkJCQkJCXsNCgkJCQkJCQlmb3JlYWNoKCRrZXlzIGFzICRrZV95KQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCEkZm91bmQgJiYgJGtlX3kgPT09IHN0cnRvbG93ZXIoJGtleSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWlmICgkbmV3VmFsdWUgPSBzZWxmOjpnZXRWYXIoJGNvZGUsICR2YWx1ZSwgJ25hbWUnLCAnaWQnKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBpbnN1cmUgd2UgdXNlIHRoZSBjb3JyZWN0IGtleQ0KCQkJCQkJCQkJCSRrZXkgPSAkY29kZTsNCgkJCQkJCQkJCQkvLyBzdG9wIHNlYXJjaCBmb3IgdGhpcyBmaWVsZA0KCQkJCQkJCQkJCSRmb3VuZCA9IHRydWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gYWRkIGFsc28gaWYgZm91bmQNCgkJCQkJaWYgKCRmb3VuZCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJGtleS4kYl0gPSAoaW50KSAkbmV3VmFsdWU7DQoJCQkJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4ka2V5LidfbmFtZScuJGJdID0gJHZhbHVlOw0KCQkJCQkJaWYgKCdjb3VudHJ5JyA9PT0gJGtleSB8fCAnY3VycmVuY3knID09PSAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLiRrZXkuJ19jb2RldGhyZWUnLiRiXSA9IHNlbGY6OmdldFZhcigka2V5LCAoaW50KSAkbmV3VmFsdWUsICdpZCcsICdjb2RldGhyZWUnKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBpZiBubyBjdXJyZW5jeSB3YXMgZm91bmQgYnV0IGNvdW50cnksIHRoZW4gc2V0IHRoZSBjdXJyZW5jeSB0byB0aGF0IG9mIHRoZSBjb3VudHJ5DQoJCWlmICghaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5X25hbWUnLiRiXSkgJiYgaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2NvdW50cnlfbmFtZScuJGJdKSkNCgkJew0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5X2NvZGV0aHJlZScuJGJdID0gc2VsZjo6Z2V0VmFyKCdjb3VudHJ5Jywgc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2NvdW50cnknLiRiXSwgJ2lkJywgJ2N1cnJlbmN5Jyk7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4nY3VycmVuY3knLiRiXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4nY3VycmVuY3lfY29kZXRocmVlJy4kYl0sICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjdXJyZW5jeV9uYW1lJy4kYl0gPSBzZWxmOjpnZXRWYXIoJ2N1cnJlbmN5Jywgc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5Jy4kYl0sICdpZCcsICduYW1lJyk7DQoJCX0NCgkJLy8gbm93IGxvYWQgYWxsIHRoZSB1c2VyIHZhbHVlcw0KCQlpZiAoJHVzZXJJZCA+IDApDQoJCXsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF9pZF0nXSA9ICRpZDsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF91c2VyX2lkXSddID0gJHVzZXJJZDsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF9uYW1lXSddID0gJHVzZXItPm5hbWU7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfdXNlcm5hbWVdJ10gPSAkdXNlci0+dXNlcm5hbWU7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfZW1haWxdJ10gPSAkdXNlci0+ZW1haWw7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXSA9IGZhbHNlOw0KCQl9DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJHRheExvY2F0aW9uID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGF4TG9jYXRpb24oJHR5cGUsICRpZCwgJHZpZXcpDQoJew0KCQlpZiAoJGlkID4gMCB8fCAnY2FydCcgPT09ICR2aWV3KQ0KCQl7DQoJCQkka2V5ID0gJHR5cGUuJHZpZXcuJGlkOw0KCQkJaWYgKCFpc3NldChzZWxmOjokdGF4TG9jYXRpb25bJGtleV0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFRheExvY2F0aW9uKCR0eXBlLCAkaWQsICR2aWV3LCAka2V5KTsNCgkJCX0NCgkJCWlmIChpc3NldChzZWxmOjokdGF4TG9jYXRpb25bJGtleV0pICYmIHNlbGY6OiR0YXhMb2NhdGlvblska2V5XSA+IDApDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiR0YXhMb2NhdGlvblska2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUYXhMb2NhdGlvbigkZmllbGQsICRpZCwgJHZpZXcsICRrZXkpDQoJew0KCQlzd2l0Y2ggKCR2aWV3KQ0KCQl7DQoJCQljYXNlICdpbnZvaWNlJzoNCgkJCQkvLyBnZXQgdGhlIGNsaWVudCBpZCBmcm9tIGpvYiBpZA0KCQkJCSRyZWdpc3RlcmVkX3VzZXIgPSBzZWxmOjpnZXRWYXIoJHZpZXcsICRpZCwgJ2lkJywgJ3JlZ2lzdGVyZWRfdXNlcicpOw0KCQkJCS8vIHJldHVybiBsb2NhdGlvbiBpZCBmcm9tIGNsaWVudCB0YWJsZQ0KCQkJCWlmICgkcmVnaXN0ZXJlZF91c2VyID4gMCkNCgkJCQl7DQoJCQkJCXNlbGY6OiR0YXhMb2NhdGlvblska2V5XSA9IHNlbGY6OmdldFJlZ1VzZXJWYWx1ZSgkcmVnaXN0ZXJlZF91c2VyLCAkZmllbGQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQkJY2FzZSAnY2FydCc6DQoJCQljYXNlICdldmVudCc6DQoJCQkJLy8gZmlyc3QgZmluZCBvdXQgd2hvIHRoaXMgaXMNCgkJCQkkdXNlcklzID0gc2VsZjo6dXNlcklzKG51bGwsIHRydWUpOw0KCQkJCWlmICgkdXNlcklzWydpcyddID09IDMgfHwgJHVzZXJJc1snaXMnXSA9PSAyKQ0KCQkJCXsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJHVzZXJJc1snaXMnXSA9PSAxICYmICR1c2VySXNbJ2lkJ10gPiAwKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHRheExvY2F0aW9uWyRrZXldID0gc2VsZjo6Z2V0UmVnVXNlclZhbHVlKCR1c2VySXNbJ2lkJ10sICRmaWVsZCk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJ2NvdW50cnknID09PSAkZmllbGQpDQoJCQkJew0KCQkJCQkvLyBwdWJsaWMgdXNlciBzbyB3ZSBmaXJzdCBnZXQgY291bnRyeQ0KCQkJCQlpZiAoJGNvdW50cnlUaHJlZSA9IHNlbGY6OmdldExvY2F0aW9uZGF0YShudWxsLCBudWxsLCBudWxsLCAnVVNEJywgMTAsIDEpKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokdGF4TG9jYXRpb25bJGtleV0gPSBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeVRocmVlLCAnY29kZXRocmVlJywgJ2lkJyk7DQoJCQkJCX0NCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGF4KCYkdGF4ZWQsICYkdG90YWwsICRpZCwgJHZpZXcpDQoJew0KCQkkc2V0VGF4ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ3RheGVkJywgMCk7DQoJCWlmICgkc2V0VGF4ID09IDEgJiYgMSA9PSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZShzZWxmOjokb3JnYW5pemVyLCAndGF4ZWQnLCAwKSkNCgkJew0KCQkJLy8gc2V0IHRoZSB0YXggdG8gdGhpcyBhcnJheQ0KCQkJJHRheCA9IGFycmF5KCk7DQoJCQkkdGF4QWRkVG90YWwgPSBhcnJheSgpOw0KCQkJJGRlZHVjdCA9IGFycmF5KCk7DQoJCQkvLyBnZXQgdGhlIGNvdW50cnkgb2YgdGhlIGNsaWVudA0KCQkJJGNvdW50cnkgPSBzZWxmOjpnZXRUYXhMb2NhdGlvbignY291bnRyeScsICRpZCwgJHZpZXcpOw0KCQkJLy8gZ2V0IHRoZSByZWdpb24gb2YgdGhlIGNsaWVudA0KCQkJJHJlZ2lvbiA9IHNlbGY6OmdldFRheExvY2F0aW9uKCdyZWdpb24nLCAkaWQsICR2aWV3KTsNCgkJCS8vIG5vdyBnZXQgdGF4IGxldmVsIDEgb2YgdGhpcyBDb3VudHJ5IGFuZCBvciBSZWdpb24NCgkJCSR0YXhMZXZlbDEgPSBzZWxmOjpnZXRUYXhSdWxlKDEsJGNvdW50cnksJHJlZ2lvbik7DQoJCQkvLyBub3cgZ2V0IHRheCBsZXZlbCAyIG9mIHRoaXMgQ291bnRyeSBhbmQgb3IgUmVnaW9uDQoJCQkkdGF4TGV2ZWwyID0gc2VsZjo6Z2V0VGF4UnVsZSgyLCRjb3VudHJ5LCRyZWdpb24pOw0KCQkJLy8gdGF4IHR5cGVzDQoJCQkkdGF4X3R5cGUgPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZShzZWxmOjokb3JnYW5pemVyLCAndGF4X3R5cGUnLCAyKTsNCgkJCS8vIHRheCBjb21wb3VuZA0KCQkJJHRheF9jb21wb3VuZCA9IHNlbGY6OmdldE9yZ2FuaXplclZhbHVlKHNlbGY6OiRvcmdhbml6ZXIsICd0YXhfY29tcG91bmQnLCBudWxsKTsNCgkJCS8vIGJhc2VkIG9uIHRheCB0eXBlDQoJCQlpZiAoMiA9PSAkdGF4X3R5cGUpDQoJCQl7DQoJCQkJLy8gdGF4IGV4Y2x1ZGVkDQoJCQkJaWYgKCR0YXhMZXZlbDEgJiYgaXNzZXQoJHRheExldmVsMVsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMVsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDFbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMVsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMF1bJ25hbWUnXSA9ICR0YXhMZXZlbDFbJ25hbWUnXTsNCgkJCQkJJHRheFswXVsndGF4J10gPSAkdGF4TGV2ZWwxWyd0YXgnXTsNCgkJCQkJJHRtcEFtb3VudCA9ICBiY211bCgkdGF4ZWQsICR0YXhMZXZlbDFbJ3RheCddLCAyMCk7DQoJCQkJCSR0YXhbMF1bJ2Ftb3VudCddID0gYmNkaXYoJHRtcEFtb3VudCwgMTAwLCA0KTsNCgkJCQkJLy8gYWRkIHRvIHRheCB0b3RhbA0KCQkJCQkkdGF4QWRkVG90YWxbXSA9ICR0YXhbMF1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFsxXVsnbmFtZSddID0gJHRheExldmVsMlsnbmFtZSddOw0KCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmIGlzc2V0KCR0YXhbMF1bJ2Ftb3VudCddKSAmJiAkdGF4WzBdWydhbW91bnQnXSA+IDApDQoJCQkJCXsNCgkJCQkJCSR0YXhlZFN1YiA9IGJjYWRkKCR0YXhlZCwgJHRheFswXVsnYW1vdW50J10sIDIwKTsNCgkJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkU3ViLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdG1wQW1vdW50LCAxMDAsIDQpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHRtcEFtb3VudCA9ICBiY211bCgkdGF4ZWQsICR0YXhMZXZlbDJbJ3RheCddLCAyMCk7DQoJCQkJCQkkdGF4WzFdWydhbW91bnQnXSA9IGJjZGl2KCR0bXBBbW91bnQsIDEwMCwgNCk7DQoJCQkJCX0NCgkJCQkJLy8gYWRkIHRvIHRheCB0b3RhbA0KCQkJCQkkdGF4QWRkVG90YWxbXSA9ICR0YXhbMV1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoMSA9PSAkdGF4X3R5cGUpDQoJCQl7DQoJCQkJJHJlbW92YWwgPSBhcnJheSgpOw0KCQkJCS8vIHRheCBpbmNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkcmVtb3ZhbFtdID0gJHRheExldmVsMVsndGF4J107DQoJCQkJfQ0KCQkJCWlmICgkdGF4TGV2ZWwyICYmIGlzc2V0KCR0YXhMZXZlbDJbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDJbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwyWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDJbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkcmVtb3ZhbFtdID0gJHRheExldmVsMlsndGF4J107DQoJCQkJfQ0KCQkJCSRyZW1vdmFsID0gc2VsZjo6YmNzdW0oJHJlbW92YWwpOw0KCQkJCS8vIHRheCBpbmNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGF4WzBdWyduYW1lJ10gPSAkdGF4TGV2ZWwxWyduYW1lJ107DQoJCQkJCSR0YXhbMF1bJ3RheCddID0gJHRheExldmVsMVsndGF4J107DQoJCQkJCWlmICgkdGF4X2NvbXBvdW5kID09IDEgJiYgJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkpDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCR0YXhMZXZlbDJbJ3RheCddLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJHRlbXBWYWxfYSA9IGJjZGl2KCR0YXhlZCwgJHRlbXBWYWwyLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDMgPSBiY2RpdigkdGF4TGV2ZWwxWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDQgPSBiY2FkZCgkdGVtcFZhbDMsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsX2IgPSBiY2RpdigkdGVtcFZhbF9hLCAkdGVtcFZhbDQsIDIwKTsNCgkJCQkJCSR0YXhbMF1bJ2Ftb3VudCddID0gIGJjc3ViKCR0ZW1wVmFsX2EsICR0ZW1wVmFsX2IsIDQpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHRlbXBWYWwxID0gYmNkaXYoJHJlbW92YWwsIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWwyID0gYmNhZGQoJHRlbXBWYWwxLCAxLCAyMCk7DQoJCQkJCQkkZXhjbHVkaW5nID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNtdWwoJGV4Y2x1ZGluZywgJHRheExldmVsMVsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMF1bJ2Ftb3VudCddID0gYmNkaXYoJHRlbXBWYWwsIDEwMCwgNCk7IA0KCQkJCQl9DQoJCQkJCS8vIHJlbW92ZSBmcm9tIHByaWNlDQoJCQkJCSRkZWR1Y3RbXSA9ICR0YXhbMF1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFsxXVsnbmFtZSddID0gJHRheExldmVsMlsnbmFtZSddOw0KCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmIGlzc2V0KCR0YXhbMF1bJ2Ftb3VudCddKSAmJiAkdGF4WzBdWydhbW91bnQnXSA+IDApDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCR0YXhMZXZlbDJbJ3RheCddLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJHRlbXBWYWwgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY3N1YigkdGF4ZWQsICR0ZW1wVmFsLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJCSR0YXhbMV1bJ3RheCddID0gJHRheExldmVsMlsndGF4J107DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkcmVtb3ZhbCwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSRleGNsdWRpbmcgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRlbXBWYWwgPSBiY211bCgkZXhjbHVkaW5nLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdGVtcFZhbCwgMTAwLCA0KTsgDQoJCQkJCX0NCgkJCQkJLy8gcmVtb3ZlIGZyb20gcHJpY2UNCgkJCQkJJGRlZHVjdFtdID0gJHRheFsxXVsnYW1vdW50J107DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhlcmUgd2FzIHRheCBzZXQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGF4KSkNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHRheCB0byB0b3RhbA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGF4QWRkVG90YWwpKQ0KCQkJCXsNCgkJCQkJJHRheGVkID0gc2VsZjo6YmNzdW0oJHRheEFkZFRvdGFsKTsNCgkJCQkJJHRvdGFsID0gc2VsZjo6YmNzdW0oYXJyYXkoJHRvdGFsLCAkdGF4ZWQpKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGVkdWN0KSkNCgkJCQl7DQoJCQkJCSR0YXhlZCA9IHNlbGY6OmJjc3VtKCRkZWR1Y3QpOw0KCQkJCX0NCgkJCQlyZXR1cm4gJHRheDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQkNCglwcm90ZWN0ZWQgc3RhdGljICR0YXhydWxlcyA9IGFycmF5KCk7DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRheFJ1bGUoJGxldmVsLCAkY291bnRyeSA9IDAsICRyZWdpb24gPSAwKQ0KCXsNCgkJLy8gYnVpbGQgdGhlIGtleQ0KCQlpZiAoc2VsZjo6JG9yZ2FuaXplcikNCgkJew0KCQkJJGtleSA9ICRsZXZlbC4kY291bnRyeS4kcmVnaW9uLnNlbGY6OiRvcmdhbml6ZXI7DQoJCQkvLyBjaGVjayBpZiBpdCBoYXMgYmVlbiBzZXQNCgkJCWlmICghaXNzZXQoc2VsZjo6JHRheHJ1bGVzWyRrZXldKSkNCgkJCXsNCgkJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJCS8vIHNldCB0aGUgdGF4IHJ1bGUNCgkJCQlzZWxmOjpzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSwgJHJlZ2lvbik7DQoJCQl9DQoJCQkvLyBjaGVjayBpZiBpdCBoYXMgYmVlbiBzZXQNCgkJCWlmIChpc3NldChzZWxmOjokdGF4cnVsZXNbJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR0YXhydWxlc1ska2V5XSkpDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiR0YXhydWxlc1ska2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSA9IDAsICRyZWdpb24gPSAwKQ0KCXsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoDQoJCQlhcnJheSgJJ2EuaWQnLCdhLnRheCcsJ2EubmFtZScpLA0KCQkJYXJyYXkoCSdpZCcsJ3RheCcsJ25hbWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV90YXhfcnVsZScsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5sZXZlbCcpIC4gJyA9ICcuIChpbnQpICRsZXZlbCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2Eub3JnYW5pemVyJykgLiAnID0gJy4gKGludCkgc2VsZjo6JG9yZ2FuaXplcik7DQoJCS8vIGNoZWNrIGZvciBjb3VudHJ5IGFuZCByZWdpb24NCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb3VudHJ5JykgLiAnID0gJy4gKGludCkgJGNvdW50cnkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnJlZ2lvbicpIC4gJyA9ICcuIChpbnQpICRyZWdpb24pOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXNlbGY6OiR0YXhydWxlc1ska2V5XSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCX0NCgkJZWxzZWlmICgoaW50KSRjb3VudHJ5ID4gMCAmJiAoaW50KSRyZWdpb24gPiAwKQ0KCQl7DQoJCQkvLyBub3cgb25seSBjaGVjayBmb3IgY291bnRyeQ0KCQkJcmV0dXJuIHNlbGY6OnNldFRheFJ1bGUoJGRiLCAka2V5LCAkbGV2ZWwsICRjb3VudHJ5KTsNCgkJfQ0KCQllbHNlaWYgKChpbnQpJGNvdW50cnkgPiAwICYmICRyZWdpb24gPT0gMCkNCgkJew0KCQkJLy8gbm93IGNoZWNrIGZvciBhbnkgd2l0aG91dCBjb3VudHJ5DQoJCQlyZXR1cm4gc2VsZjo6c2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCk7DQoJCX0NCgl9DQoNCgkvKioNCgkqIEBwYXJhbSBmbG9hdCAkYW1vdW50DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiY3N1bSgkYXJyYXksICRzY2FsZSA9IDQpDQoJew0KCQkkcmVzID0gMC4wOw0KCQlmb3JlYWNoKCRhcnJheSBhcyAkdmFsKXsNCgkJCSRyZXMgPSBiY2FkZCgkcmVzLCAkdmFsLCAkc2NhbGUpOw0KCQl9DQoJCXJldHVybiAkcmVzOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkYW1vdW50DQoJICogQHJldHVybiBtaXhlZHxudW1iZXINCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZEN1cnJlbmN5KCRhbW91bnQsICRjb2RldGhyZWUgPSBudWxsKQ0KCXsNCgkJcmV0dXJuIHNlbGY6Om1ha2VNb25leSgkYW1vdW50LCAkY29kZXRocmVlKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjdXJyZW5jeURldGFpbHMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogQHBhcmFtIGJvb2wgJGNvZGV0aHJlZQ0KCSAqIEByZXR1cm4gYm9vbHxtaXhlZA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lEZXRhaWxzKCRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCS8vIGNoZWNrIGlmIGN1cnJlbmN5IGNvZGV0aHJlZSBpcyBzZXQNCgkJaWYgKCEkY29kZXRocmVlICYmIGlzc2V0KHNlbGY6OiRvcmdhbml6ZXIpICYmIHNlbGY6OiRvcmdhbml6ZXIgPiAwKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHByaWNlIGN1cnJlbmN5DQoJCQkkY29kZXRocmVlID0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ2N1cnJlbmN5JywgZmFsc2UpOw0KCQl9DQoJCWVsc2VpZiAoISRjb2RldGhyZWUpDQoJCXsNCgkJCSRjb2RldGhyZWUgPSBzZWxmOjpnZXQoJ0FDVElWRV9DVVJSRU5DWScpOw0KCQl9DQoJCS8vIHJldHVybiBjYWNoZWQgZGF0YSBpZiBzZXQNCgkJaWYgKCRjb2RldGhyZWUgJiYgIWlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KAknYS5pZCcsJ2EubmFtZScsJ2EuY29kZXRocmVlJywnYS5udW1lcmljY29kZScsJ2Euc3ltYm9sJywnYS50aG91c2FuZHMnLCdhLmRlY2ltYWxwbGFjZScsDQoJCQkJCSdhLmRlY2ltYWxzeW1ib2wnLCdhLnBvc2l0aXZlc3R5bGUnLCdhLm5lZ2F0aXZlc3R5bGUnKSwNCgkJCQlhcnJheSgJJ2N1cnJlbmN5X2lkJywnY3VycmVuY3lfbmFtZScsJ2N1cnJlbmN5X2NvZGV0aHJlZScsJ2N1cnJlbmN5X251bWVyaWNjb2RlJywnY3VycmVuY3lfc3ltYm9sJywNCgkJCQkJJ2N1cnJlbmN5X3Rob3VzYW5kcycsJ2N1cnJlbmN5X2RlY2ltYWxwbGFjZScsJ2N1cnJlbmN5X2RlY2ltYWxzeW1ib2wnLCdjdXJyZW5jeV9wb3NpdGl2ZXN0eWxlJywNCgkJCQkJJ2N1cnJlbmN5X25lZ2F0aXZlc3R5bGUnKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY3VycmVuY3knLCAnYScpKTsNCgkJCWlmIChpc19udW1lcmljKCRjb2RldGhyZWUpKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkY29kZXRocmVlKTsNCgkJCX0NCgkJCWVsc2VpZiAoc3RybGVuKCRjb2RldGhyZWUpID09IDMpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb2RldGhyZWUnKSAuICcgPSAnLiRkYi0+cXVvdGUoJGNvZGV0aHJlZSkpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCdOT05FJykpOw0KCQkJfQ0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQl9DQoJCS8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBzZXQNCgkJaWYgKGlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9bWFrZU1vbmV5XQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld0RvY051bWJlcigkb3JnYW5pemVyLCAkaWQgPSBudWxsKQ0KCXsNCgkJaWYgKGlzX251bWVyaWMoJG9yZ2FuaXplcikpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaW52b2ljZSBoYXMgdHJhbnNhY3Rpb25zDQoJCQkkaXNJbnZvaWNlID0gZmFsc2U7DQoJCQlpZiAoJGlkKQ0KCQkJew0KCQkJCWlmICgkZm91bmRUcmFucyA9IHNlbGY6OmdldFZhcigndHJhbnNhY3Rpb24nLCAkaWQsICdpbnZvaWNlJywgJ2lkJykpDQoJCQkJew0KCQkJCQkkaXNJbnZvaWNlID0gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBmaXJzdCB3ZSBnZXQgb3JnYW5pemVycyBpbnZvaWNpbmcgbWV0aG9kDQoJCQkkcHJvZm9ybWEgPSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsICRvcmdhbml6ZXIsICdpZCcsICdwcm9mb3JtYScpOw0KCQkJaWYgKDAgPT0gJHByb2Zvcm1hIHx8ICRpc0ludm9pY2UpDQoJCQl7DQoJCQkJJGlzSW52b2ljZSA9IHRydWU7DQoJCQkJJG5leHQgPSAoaW50KSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsICRvcmdhbml6ZXIsICdpZCcsICduZXh0X2ludm9pY2VfbnVtYmVyJyk7DQoJCQkJLy8gbWFrZSBzdXJlIHRoZSBuZXh0IGlzIGEgbnVtYmVyDQoJCQkJaWYgKCFpc19udW1lcmljKCRuZXh0KSB8fCAhJG5leHQgfHwgZW1wdHkoJG5leHQpIHx8ICRuZXh0IDwgMSkNCgkJCQl7DQoJCQkJCSRuZXh0ID0gMTsNCgkJCQl9DQoJCQkJLy8gdXBkYXRlIHRoZSBuZXh0IG51bWJlciBub3cNCgkJCQkkb3JnID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJCSRvcmctPmlkID0gJG9yZ2FuaXplcjsNCgkJCQkkb3JnLT5uZXh0X2ludm9pY2VfbnVtYmVyID0gKGludCkgJG5leHQgKyAxOw0KCQkJCUZhY3Rvcnk6OmdldERibygpLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAkb3JnLCAnaWQnKTsNCgkJCX0NCgkJCWVsc2VpZiAoMSA9PSAkcHJvZm9ybWEpDQoJCQl7DQoJCQkJJG5leHQgPSAoaW50KSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsICRvcmdhbml6ZXIsICdpZCcsICduZXh0X3Byb2Zvcm1hX251bWJlcicpOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgbmV4dCBpcyBhIG51bWJlcg0KCQkJCWlmICghaXNfbnVtZXJpYygkbmV4dCkgfHwgISRuZXh0IHx8IGVtcHR5KCRuZXh0KSB8fCAkbmV4dCA8IDEpDQoJCQkJew0KCQkJCQkkbmV4dCA9IDE7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSB0aGUgbmV4dCBudW1iZXIgbm93DQoJCQkJJG9yZyA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkkb3JnLT5pZCA9ICRvcmdhbml6ZXI7DQoJCQkJJG9yZy0+bmV4dF9wcm9mb3JtYV9udW1iZXIgPSAoaW50KSAkbmV4dCArIDE7DQoJCQkJRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX29yZ2FuaXplcicsICRvcmcsICdpZCcpOw0KCQkJfQ0KCQkJLy8gZ2V0IHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OmdldE9yZ2FuaXplclZhbHVlKCRvcmdhbml6ZXIsICdwcmVmaXgnLCAnVkRNJyk7DQoJCQlpZiAoJGlzSW52b2ljZSkNCgkJCXsNCgkJCQlyZXR1cm4gJ0lOVi0nLiRwcmVmaXguc3ByaW50ZignJTA3ZCcsICRuZXh0KTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlyZXR1cm4gJ1BJLScuJHByZWZpeC5zcHJpbnRmKCclMDZkJywgJG5leHQpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja05yKCYkaXRlbSwgJHdoZXJlKQ0KCXsNCgkJbGlzdCgkdHlwZSwgJGNvbHVtbikgPSBleHBsb2RlKCcuJywgJHdoZXJlKTsNCgkJaWYgKCR0eXBlICYmICRjb2x1bW4gJiYgaXNzZXQoJGl0ZW0tPiRjb2x1bW4pKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBhbGwgaXRlbXMgd2l0aCB0aGUgc2FtZSBjb2x1bW4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdChhcnJheSgnaWQnICwnY3JlYXRlZCcsICdudW1iZXInLCAnb3JnYW5pemVyJykpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJy4kdHlwZSkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkY29sdW1uKSAuICcgPSAnLiRkYi0+cXVvdGUoJGl0ZW0tPiRjb2x1bW4pKTsNCgkJCWlmIChpc3NldCgkaXRlbS0+b3JnYW5pemVyKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdvcmdhbml6ZXInKSAuICcgPSAnIC4gKGludCkgJGl0ZW0tPm9yZ2FuaXplcik7DQoJCQl9DQoJCQkkcXVlcnktPm9yZGVyKCdjcmVhdGVkIEFTQycpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJGZvdW5kID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJCWlmIChjb3VudCgkZm91bmQpID4gMSkNCgkJCQl7DQoJCQkJCS8vIGlzIHRoZSBjdXJyZW50IGl0ZW0gdGhlIG9sZGVyIG9uZT8NCgkJCQkJaWYgKCRpdGVtLT5pZCAhPSAkZm91bmRbMF0tPmlkKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOwkJCQkJCQkNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGluc3VyZSB3ZSB1cGRhdGUgUHJvZm9ybWFzIG9uY2UgcGF5bWVudCBpcyBtYWRlDQoJCQlpZiAoc3RycG9zKCRpdGVtLT4kY29sdW1uLCAnUEknKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJaWYgKCR1cGRhdGUgPSBzZWxmOjpnZXRWYXIoJ3RyYW5zYWN0aW9uJywgJGl0ZW0tPmlkLCAnaW52b2ljZScsICdpZCcpKQ0KCQkJCXsNCgkJCQkJLy8gaWYgcHJvZm9ybWEgaXMgc2V0IHN0b3JlIGJhY2t1cCBmb3IgbGF0ZXIgdXNlLg0KCQkJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4sIGZhbHNlLCAncHJvZm9ybWEnKTsNCgkJCQkJLy8gdXBkYXRlIHRvIGludm9pY2UNCgkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJaWYgKCEkdXBkYXRlID0gc2VsZjo6Z2V0VmFyKCd0cmFuc2FjdGlvbicsICRpdGVtLT5pZCwgJ2ludm9pY2UnLCAnaWQnKSkNCgkJCQl7DQoJCQkJCS8vIHRha2UgYmFjayB0byBwcm9mb3JtYSAoVE9ETyAtIG1heSBub3QgYmUgaWRlYWwpDQoJCQkJCXNlbGY6OnNldE5yKCRpdGVtLCAkdHlwZSwgJGNvbHVtbik7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICghJGl0ZW0tPiRjb2x1bW4gfHwgZW1wdHkoJGl0ZW0tPiRjb2x1bW4pKQ0KCQl7DQoJCQkvLyBpZiBub3Qgc2V0LCB0aGVuIHNldCBub3cNCgkJCXNlbGY6OnNldE5yKCRpdGVtLCAkdHlwZSwgJGNvbHVtbik7CQ0KCQl9DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0TnIoJiRpdGVtLCAmJHR5cGUsICYkY29sdW1uLCAkbmV3ID0gdHJ1ZSwgJG90aGVyID0gbnVsbCkNCgl7DQoJCWlmICgkbmV3KQ0KCQl7DQoJCQkvLyBmaXJzdCB1cGRhdGUgdGhlIGl0ZW0NCgkJCSRpdGVtLT4kY29sdW1uCT0gc2VsZjo6bmV3RG9jTnVtYmVyKCRpdGVtLT5vcmdhbml6ZXIsICRpdGVtLT5pZCk7DQoJCX0NCgkJLy8gbm93IHVwZGF0ZSB0aGUgdGFibGUNCgkJJHVwZGF0ZUl0ZW0JCT0gbmV3IFxzdGRDbGFzczsNCgkJJHVwZGF0ZUl0ZW0tPmlkCQk9ICRpdGVtLT5pZDsNCgkJaWYgKCRjb2x1bW4pDQoJCXsNCgkJCSR1cGRhdGVJdGVtLT4kY29sdW1uID0gJGl0ZW0tPiRjb2x1bW47DQoJCQlpZiAoJG90aGVyKQ0KCQkJew0KCQkJCS8vIHVwZGF0ZSB0aGUgb3RoZXIgZmllbGQgd2l0aCB0aGUgY29sdW1uDQoJCQkJJHVwZGF0ZUl0ZW0tPiRvdGhlciA9ICRpdGVtLT4kY29sdW1uOw0KCQkJCSRpdGVtLT4kb3RoZXIgPSAkaXRlbS0+JGNvbHVtbjsNCgkJCX0NCgkJfQkJCQkNCgkJLy8gdXBkYXRlIHRoZSBpdGVtIG5vdw0KCQlGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fJy4kdHlwZSwgJHVwZGF0ZUl0ZW0sICdpZCcpOw0KCX0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9Z2V0Rm9sZGVyUGF0aF0NCltDVVNUT01DT0RFPWdldExpbmtPcHRpb25zXQ==', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnTG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ0xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCWNhbmNlbCBFeHBpcmVkIENhcnQgSXRlbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KQ0KCXsNCgkJLy8gYWRkIGFuIGV2ZW50IHRoYXQgd2lsbCBzZW5kIG91dCBhbGwgY29uZmlybWF0aW9uIGVtYWlscywgbm90IHlldCBzZW5kDQoJCSRkb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oIg0KCQkJalF1ZXJ5KHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQljYW5jZWxFeHBpcmVkQ2FydEl0ZW1zKDEpLmRvbmUoZnVuY3Rpb24ocmVzdWx0KSB7DQoJCQkJCWlmKHJlc3VsdCl7DQoJCQkJCQljb25zb2xlLmxvZyhyZXN1bHQpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2FuY2VsRXhwaXJlZENhcnRJdGVtcyh0eXBlKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hamF4LmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMmZm9ybWF0PWpzb24nOw0KCQkJCWlmKHR5cGUgPiAwKXsNCgkJCQkJdmFyIHJlcXVlc3QgPSAndG9rZW49Ii5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuIiZ0eXBlPScrdHlwZTsNCgkJCQl9DQoJCQkJcmV0dXJuIGpRdWVyeS5hamF4KHsNCgkJCQkJdHlwZTogJ1BPU1QnLA0KCQkJCQl1cmw6IGdldFVybCwNCgkJCQkJZGF0YVR5cGU6ICdqc29ucCcsDQoJCQkJCWRhdGE6IHJlcXVlc3QsDQoJCQkJCWpzb25wOiAnY2FsbGJhY2snDQoJCQkJfSk7DQoJCQl9Iik7DQoJfQ==', '', '', '', '', '', 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw0KCQkvLyBjbGVhciB0aGUgY2FydCBpdGVtcyBpZiBleHBpcmVkDQoJCXNlbGY6OmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KTs=', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Event registration component.', '', '', 'Registry', '.git', '', 1, 1, 'https://www.vdm.io/updates/registry_update_server.xml', 'https://www.vdm.io/', '', 'jqif3P20pl7i+oN/1eoZAJmOTlPh+TxrApbvTXJTruk86ZFIi6euOwrcLiunSXiH', 'https://www.vdm.io/access/', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 96, '', 1, 67),
(30, 1, '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', '', 1, '', 1, '', 1, '', '', '', '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.1.0', 'Copyright (C) 2015. All Rights Reserved', '2017-01-30 13:53:54', '', 'Zdib+VUoIO/nAixMFHZyp2kTyD8oovQFhnAqodP9u6c=', 'EUg/4403qYU3kFEWMPLOQ//UpQBIJVDy36kZcnuooyk=', '', 'KSHC/+OhgfJ+HNbeFktXS39k1XO/hHNoB0f8P+7XzWQ=', '', '', '', 1, '', 'Just a basic document manager.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-document-manager', 'wnfGON0VXO+EKjfaWp2UHLQHb2EwbwTjs77WSjBR8rhfMb5/Ry8MsIK7XSbzqvrWW7j/YCn79Ku+E7ze924KWA==', '', '99cefa69-b61d-4964-adf5-2147b4b01742', 'images/vdm/DM500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_documentManager.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2021-03-08 03:12:29', 1, 'Document Manager', 'documentmananger', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogCXRoZSBnbG9iYWxzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zOw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXI7DQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9ja2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGJhc2lja2V5Ow0KDQoJLyoqDQoJKiAJc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBub3Rpbmcgc2V0IGZvciBub3cNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGlkcw0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqIEByZXR1cm4gYXJyYXl8bnVsbA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmFtZXMoJGlkcywgJHR5cGUsICRnZXRBbGlhcyA9IGZhbHNlKQ0KCXsNCgkJLy8gc2V0dXAgdGhlIGdldCBhcnJheQ0KCQkkZ2V0ID0gYXJyYXkoJ2EuaWQnKTsNCgkJaWYgKCRnZXRBbGlhcykNCgkJew0KCQkJJGdldFtdID0gJ2EuYWxpYXMnOw0KCQl9DQoJCXN3aXRjaCgkdHlwZSkNCgkJew0KCQkJY2FzZSAnY2F0aWQnOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCSRnZXRbXSA9ICdhLnRpdGxlJzsNCgkJCQkkdGFibGUgPSAnI19fY2F0ZWdvcmllcyc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3R5cGUnOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCSRnZXRbXSA9ICdhLm5hbWUnOw0KCQkJCSR0YWJsZSA9ICcjX19bW1tjb21wb25lbnRdXV1fdHlwZSc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3RhZyc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJJGdldFtdID0gJ2EudGl0bGUnOw0KCQkJCSR0YWJsZSA9ICcjX190YWdzJzsNCgkJCWJyZWFrOwkJDQoJCX0NCgkJaWYgKCFpc3NldCgkdGFibGUpIHx8ICFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJLy8gY2hlY2sgdGhlIGFycmF5IG9mIGlkcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGlkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCRpZHMgYXMgJGlkKQ0KCQkJeyANCgkJCQlpZiAoIShpc19udW1lcmljKCRpZCkpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIG51bGw7DQoJCQkJfSANCgkJCX0NCgkJfQ0KCQkvLyBub3cgbG9hZCBhbGwgY3VzdG9tIHZhbHVlcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGdldCkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJHRhYmxlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCBJTiAoJyAuIGltcGxvZGUoJywgJywgJGlkcykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkNCgkJCXsNCgkJCQkvLyBzZXQgYWxpYXMgaWYgbmVlZGVkDQoJCQkJaWYgKCRnZXRBbGlhcyAmJiBpc3NldCgkaXRlbS0+YWxpYXMpICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5hbGlhcykpDQoJCQkJew0KCQkJCQkkaXRlbS0+aWQgPSAkaXRlbS0+aWQgLiAnOicgLiAkaXRlbS0+YWxpYXM7DQoJCQkJfQ0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCXN3aXRjaCgkdHlwZSkNCgkJCQl7DQoJCQkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkJY2FzZSAndGFnJzoNCgkJCQkJCSRidWNrZXRbJGl0ZW0tPmlkXSA9ICRpdGVtLT50aXRsZTsNCgkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgJ3R5cGUnOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQkkYnVja2V0WyRpdGVtLT5pZF0gPSAkaXRlbS0+bmFtZTsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRidWNrZXQ7DQoJCX0NCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYXNFZGl0QWNjZXNzKCRyZWNvcmRJZCwgJHVzZXJJZCA9IG51bGwsICR0byA9ICdkb2N1bWVudCcpDQoJew0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHVzZXJJZCkgJiYgJHVzZXJJZCBpbnN0YW5jZW9mIEpVc2VyKQ0KCQl7DQoJCQkkdXNlciA9ICR1c2VySWQ7DQoJCX0NCgkJZWxzZWlmIChpc19udW1lcmljKCR1c2VySWQpICYmICR1c2VySWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQlpZiAoJHVzZXItPmF1dGhvcmlzZSgkdG8uJy5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uJy4kdG8uJy4nIC4gKGludCkgICRyZWNvcmRJZCkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgbGlzdCBvZiB0YXJnZXQgKGlkID0+IG5hbWUpDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMaXN0KCR0YXJnZXQpDQoJew0KCQlzd2l0Y2goJHRhcmdldCkNCgkJew0KCQkJY2FzZSAnY2F0aWQnOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCXJldHVybiBzZWxmOjpnZXRDYXRlZ29yeUxpc3QoKTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAndHlwZSc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJcmV0dXJuIHNlbGY6OmdldFR5cGVMaXN0KCk7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3RhZyc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJcmV0dXJuIHNlbGY6OmdldFRhZ0xpc3QoKTsNCgkJCWJyZWFrOwkJDQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogZ2V0IHRoZSBsaXN0IG9mIGNhdGVnb3JpZXMgKGlkID0+IHRpdGxlKQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlMaXN0KCkNCgl7DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCSRxdWVyeQ0KCQkJLT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywgJ3RpdGxlJykpKQ0KCQkJLT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19jYXRlZ29yaWVzJykpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKSAuICcgPj0gMScpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdleHRlbnNpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgnY29tX1tbW2NvbXBvbmVudF1dXS5kb2N1bWVudCcpKQ0KCQkJLT5vcmRlcigkZGItPnF1b3RlTmFtZSgndGl0bGUnKSAuICcgYXNjJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZEFzc29jTGlzdCgnaWQnLCAndGl0bGUnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBnZXQgdGhlIGxpc3Qgb2YgdHlwZXMgKGlkID0+IHRpdGxlKQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnTGlzdCgpDQoJew0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnkNCgkJCS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmlkJywgJ2EudGl0bGUnKSkpDQoJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX3RhZ3MnLCAnYScpKQ0KCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPj0gMScpDQoJCQktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fY29udGVudGl0ZW1fdGFnX21hcCcsICd0JykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3QudGFnX2lkJykgLiAnKScpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA+PSAxJykNCgkJCS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3QudHlwZV9hbGlhcycpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCdjb21fW1tbY29tcG9uZW50XV1dLmRvY3VtZW50JykpDQoJCQktPm9yZGVyKCRkYi0+cXVvdGVOYW1lKCdhLnRpdGxlJykgLiAnIGFzYycpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRBc3NvY0xpc3QoJ2lkJywgJ3RpdGxlJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogZ2V0IHRoZSBsaXN0IG9mIHR5cGVzIChpZCA9PiBuYW1lKQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VHlwZUxpc3QoKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5DQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAnbmFtZScpKSkNCgkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3R5cGUnKSkNCgkJCS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA+PSAxJykNCgkJCS0+b3JkZXIoJGRiLT5xdW90ZU5hbWUoJ25hbWUnKSAuICcgYXNjJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZEFzc29jTGlzdCgnaWQnLCAnbmFtZScpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgZG9jdW1lbnQgSURzIG9mIHRoZSB0YXJnZXRzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb2N1bWVudEZpbHRlcklkcygkdGFyZ2V0LCAkdGFyZ2V0cykNCgl7DQoJCS8vIFdoYXQgZXZlci4uLg0KCQlpZiAoJHRhcmdldCA9PT0gJ3R5cGUnKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6Z2V0VHlwZURvY3VtZW50SURzKCR0YXJnZXRzKTsNCgkJfQ0KCQllbHNlaWYgKCR0YXJnZXQgPT09ICd0YWcnKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6Z2V0VGFnRG9jdW1lbnRJRHMoJHRhcmdldHMpOw0KCQl9DQoJCWVsc2VpZiAoJHRhcmdldCA9PT0gJ2NhdGlkJykNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldENhdGVnb3J5RG9jdW1lbnRJRHMoJHRhcmdldHMpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgbGlzdCBkb2N1bWVudCBpZHMgb2YgdGhlc2UgdHlwZXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFR5cGVEb2N1bWVudElEcygkaWRzKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5DQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAndHlwZScpKSkNCgkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2RvY3VtZW50JykpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd0eXBlJykgLiAnICE9ICcgLiAkZGItPnF1b3RlKCcnKSk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdHMgPSAkZGItPmxvYWRBc3NvY0xpc3QoKTsNCgkJCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRyZXN1bHRzIGFzICRrID0+ICR2KQ0KCQkJew0KCQkJCSR2YWx1ZXMgPSBqc29uX2RlY29kZSgkdlsndHlwZSddLCB0cnVlKTsNCgkJCQlpZiAoYXJyYXlfaW50ZXJzZWN0KCRpZHMsICR2YWx1ZXMpKQ0KCQkJCXsNCgkJCQkJJG1hdGNoZXNbJHZbJ2lkJ11dID0gJHZbJ2lkJ107DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gQ2hlY2tzIHRoYXQgd2UgZm91bmQgbWF0Y2hlcw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRtYXRjaGVzKSkNCgkJCXsNCgkJCQlyZXR1cm4gYXJyYXlfdmFsdWVzKCRtYXRjaGVzKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBnZXQgdGhlIGxpc3QgZG9jdW1lbnQgaWRzIG9mIHRoZXNlIHRhZ3MNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0RvY3VtZW50SURzKCRpZHMpDQoJew0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnkNCgkJCS0+c2VsZWN0KCdjb250ZW50X2l0ZW1faWQnKQ0KCQkJLT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19jb250ZW50aXRlbV90YWdfbWFwJykpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd0YWdfaWQnKSAuICcgSU4gKCcgLiBpbXBsb2RlKCcsJywgJGlkcykgLiAnKScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiBhcnJheV91bmlxdWUoJGRiLT5sb2FkQ29sdW1uKCkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgbGlzdCBkb2N1bWVudCBpZHMgb2YgdGhlc2UgY2F0ZWdvcmllcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlEb2N1bWVudElEcygkaWRzKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5DQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAnY2F0aWQnKSkpDQoJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9kb2N1bWVudCcpKQ0KCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnY2F0aWQnKSAuICcgIT0gJyAuICRkYi0+cXVvdGUoJycpKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkcmVzdWx0cyA9ICRkYi0+bG9hZEFzc29jTGlzdCgpOw0KCQkJJG1hdGNoZXMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHJlc3VsdHMgYXMgJGsgPT4gJHYpDQoJCQl7DQoJCQkJJHZhbHVlID0ganNvbl9kZWNvZGUoJHZbJ2NhdGlkJ10sIHRydWUpOw0KCQkJCWlmIChhcnJheV9pbnRlcnNlY3QoJGlkcywgJHZhbHVlKSkNCgkJCQl7DQoJCQkJCSRtYXRjaGVzWyR2WydpZCddXSA9ICR2WydpZCddOw0KCQkJCX0NCgkJCX0NCgkJCS8vIENoZWNrcyB0aGF0IHdlIGZvdW5kIG1hdGNoZXMNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbWF0Y2hlcykpDQoJCQl7DQoJCQkJcmV0dXJuIGFycmF5X3ZhbHVlcygkbWF0Y2hlcyk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWltYWdlSGVscGVyc10NCltDVVNUT01DT0RFPWdldEZvbGRlclBhdGhdDQpbQ1VTVE9NQ09ERT1nZXRGaWxlUGF0aF0NCltDVVNUT01DT0RFPWdldEltYWdlTGlua10NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldExpbmtPcHRpb25zXQ0KW0NVU1RPTUNPREU9bWltZVR5cGVd', 'CS8qKg0KCSogCXNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3VudExvY2FsRG93bmxvYWQoJiRuYW1lLCAmJGlucHV0KQ0KCXsNCgkJLy8gZ2V0IHRoZSBpZA0KCQlpZiAoJGlkID0gJGlucHV0LT5nZXQoJ2NvdW50ZXInLCBOVUxMLCAnSU5UJykpDQoJCXsNCgkJCS8vIHNldCB0aGUgZGF0ZSBvYmplY3QNCgkJCSRkYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsJ2NvdW50ZXInKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZG9jdW1lbnQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZmlsZW5hbWUnKSAuICcgPSAnLiAkZGItPnF1b3RlKCRuYW1lKSk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkc3RhdGlzdGljID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJLy8gYWxyZWFkeSBoYXMgYW4gZW50cnkNCgkJCQkkc3RhdGlzdGljLT5jb3VudGVyKys7DQoJCQkJJHN0YXRpc3RpYy0+bW9kaWZpZWQgPSAkZGF0ZS0+dG9TcWwoKTsNCgkJCQkvLyB1cGRhdGUgdGhlIGVudHJ5DQoJCQkJcmV0dXJuICRkYi0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJHN0YXRpc3RpYywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IGEgbmV3IGVudHJ5DQoJCQkJJGNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJGNvdW50ZXItPmZpbGVuYW1lID0gKHN0cmluZykgJG5hbWU7DQoJCQkJJGNvdW50ZXItPmRvY3VtZW50ID0gKGludCkgJGlkOw0KCQkJCSRjb3VudGVyLT5jb3VudGVyID0gMTsNCgkJCQkkY291bnRlci0+cHVibGlzaGVkID0gMTsNCgkJCQkkY291bnRlci0+Y3JlYXRlZCA9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRjb3VudGVyLT5hY2Nlc3MgPSAxOw0KCQkJCSRjb3VudGVyLT52ZXJzaW9uID0gMTsNCgkJCQkvLyBzZXQgYSBuZXcgZW50cnkNCgkJCQkkZG9uZSA9ICRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJGNvdW50ZXIpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCSRuZXdJZCA9ICAkZGItPmluc2VydGlkKCk7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCQlyZXR1cm4gc2VsZjo6c2V0QXNzZXQoJG5ld0lkLCdzdGF0aXN0aWMnKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9', '', '', '', '', 'Ly8gbG9hZCB0aGUgaGVscGVyIGNsYXNzDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KLy8gY2hlY2sgdGhlIHZlcnNpb24gb2YgSkNCDQokbWFuaWZlc3QgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Om1hbmlmZXN0KCk7DQppZiAoaXNzZXQoJG1hbmlmZXN0LT52ZXJzaW9uKSAmJiBzdHJwb3MoJG1hbmlmZXN0LT52ZXJzaW9uLCAnLicpICE9PSBmYWxzZSkNCnsNCgkvLyBnZXQgdGhlIHZlcnNpb24NCgkkdGhpcy0+SkNCdmVyc2lvbiA9IGV4cGxvZGUoJy4nLCAkbWFuaWZlc3QtPnZlcnNpb24pOw0KCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJLy8gdGFyZ2V0IHZlcnNpb24gbGVzcyB0aGVuIG9yIGVxdWFsIHRvIDEuMC4xMA0KCWlmIChjb3VudCgkdGhpcy0+SkNCdmVyc2lvbikgPT0gMyAmJiAkdGhpcy0+SkNCdmVyc2lvblswXSA8PSAxICYmICR0aGlzLT5KQ0J2ZXJzaW9uWzFdID09IDAgJiYgJHRoaXMtPkpDQnZlcnNpb25bMl0gPD0gMTApDQoJew0KCQkvLyB3ZSBuZWVkIHRvIG1ha2UgYSBkYXRhYmFzZSBjb3JyZWN0aW9uIGZvciB0aGUgZmllbGQgY2F0ZWdvcmllcyBhbmQgdGhlIGZpZWxkdHlwZSBjYXRlZ29yaWVzDQoJCSRmaXhfY2F0ZWdvcmllcyA9IGFycmF5KA0KCQkJJ2NvbV9kb2N1bWVudG1hbmFuZ2VyLmRvY3VtZW50cycgPT4gJ2NvbV9kb2N1bWVudG1hbmFuZ2VyLmRvY3VtZW50Jw0KCQkpOw0KCQkvLyB0YXJnZXRlZCB0YWJsZXMgKHRvIGZpeCBhbGwgcGxhY2VzIGNhdGVnb3JpZXMgYXJlIG1hcHBlZCBpbnRvIEpvb21sYSkNCgkJJGZpeF90YWJsZXMgPSBhcnJheSgNCgkJCSdjb250ZW50X3R5cGVzJyA9PiBhcnJheSgNCgkJCQknaWQnID0+ICd0eXBlX2lkJywNCgkJCQkna2V5JyA9PiAndHlwZV9hbGlhcycsDQoJCQkJJ3N1ZmZpeCcgPT4gJy5jYXRlZ29yeScpLA0KCQkJJ2NvbnRlbnRpdGVtX3RhZ19tYXAnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ3R5cGVfaWQnLA0KCQkJCSdrZXknID0+ICd0eXBlX2FsaWFzJywNCgkJCQknc3VmZml4JyA9PiAnLmNhdGVnb3J5JyksDQoJCQkndWNtX2NvbnRlbnQnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ2NvcmVfY29udGVudF9pZCcsDQoJCQkJJ2tleScgPT4gJ2NvcmVfdHlwZV9hbGlhcycsDQoJCQkJJ3N1ZmZpeCcgPT4gJy5jYXRlZ29yeScpLA0KCQkJJ2NhdGVnb3JpZXMnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ2lkJywNCgkJCQkna2V5JyA9PiAnZXh0ZW5zaW9uJywNCgkJCQknc3VmZml4JyA9PiAnJykNCgkJKTsNCg0KCQkvLyB0aGUgc2NyaXB0IHRoYXQgZG9lcyB0aGUgd29yaw0KCQlmb3JlYWNoICgkZml4X2NhdGVnb3JpZXMgYXMgJGZpeCA9PiAkY2F0ZWdvcnkpDQoJCXsNCgkJCS8vIGxvb3Agb3ZlciB0aGUgdGFyZ2V0ZWQgdGFibGVzDQoJCQlmb3JlYWNoICgkZml4X3RhYmxlcyBhcyAkX3RhYmxlID0+ICRfdXBkYXRlKQ0KCQkJew0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyBnZXQgYWxsIHR5cGVfaWRzDQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2lkJ10pKTsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycgLiAkX3RhYmxlKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSggJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2tleSddKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkZml4IC4gJF91cGRhdGVbJ3N1ZmZpeCddKSk7DQoJCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQkJew0KCQkJCQkvLyBhbGwgdGhlc2UgbXVzdCBiZSB1cGRhdGVkDQoJCQkJCSRpZHMgPSAkZGItPmxvYWRDb2x1bW4oKTsNCgkJCQkJLy8gRmllbGRzIHRvIHVwZGF0ZS4NCgkJCQkJJGZpZWxkcyA9IGFycmF5KA0KCQkJCQkJJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2tleSddKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkY2F0ZWdvcnkgLiAkX3VwZGF0ZVsnc3VmZml4J10pDQoJCQkJCSk7DQoJCQkJCS8vIENvbmRpdGlvbnMgZm9yIHdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHVwZGF0ZWQuDQoJCQkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkJCQkkZGItPnF1b3RlTmFtZSgkX3VwZGF0ZVsnaWQnXSkgLiAnIElOICgnIC4gaW1wbG9kZSgnLCAnLCAkaWRzKSAuICcpJw0KCQkJCQkpOw0KCQkJCQkkcXVlcnktPnVwZGF0ZSgkZGItPnF1b3RlTmFtZSgnI19fJyAuICRfdGFibGUpKS0+c2V0KCRmaWVsZHMpLT53aGVyZSgkY29uZGl0aW9ucyk7DQoJCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkJJHJlc3VsdCA9ICRkYi0+ZXhlY3V0ZSgpOw0KCQkJCQkvLyBvbiBzdWNjZXNzDQoJCQkJCWlmICgkcmVzdWx0KQ0KCQkJCQl7DQoJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgiPHA+VXBkYXRlZCA8Yj4jX18kX3RhYmxlIC0gIiAuICRfdXBkYXRlWydrZXknXSAuICI8L2I+IGZyb20gPGI+JGZpeDwvYj4iIC4gJF91cGRhdGVbJ3N1ZmZpeCddIC4gIiB0byA8Yj4kY2F0ZWdvcnk8L2I+IiAuICRfdXBkYXRlWydzdWZmaXgnXSAuICIhPC9wPiIsICdOb3RpY2UnKTsNCgkJCQkJfQ0KDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ==', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Document Manager', '', '', 'Document Manager (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/documentmananger_server.xml', 'https://www.vdm.io/', '', 'aTztaqDOt1+Vw90EP+DXPDoPAdbiYmjtFnAiRryEkn4=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 97, '', 1, 11),
(31, 1, '', '', '', 1, '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', '', '', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.2.1', 'Copyright (C) 2015. All Rights Reserved', '2017-06-01 22:25:40', 1, '', '', '', '', '', '', '', 1, '', 'Expert Database component adds the ability to your Joomla to manage various experts and their related details.', 'llewellyn@vdm.io', '', '', 'tVUYzE97vvcoI5JEiOwLKU3BzT5nGjkhmsAag9Qu0DsyHgSoWt2XzuB3SQ/sMh2Y', '', '4adef9ac-bbcc-40ac-8449-9e0baa27e73a', 'images/expertdatabase.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2017-08-25 00:36:38', 1, 'Expert Database', 'expertdatabase', '', 4, 'CQlzZWxmOjpsb2FkQ29uZmlybWF0aW9uQWpheCgkZG9jdW1lbnQpOw==', 'CS8qKg0KCSogCUxvYWQgdGhlIENvbmZpcm1hdGlvbiBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDb25maXJtYXRpb25BamF4KCRkb2N1bWVudCkNCgl7DQoJCS8vIGFkZCBhbiBldmVudCB0aGF0IHdpbGwgc2VuZCBvdXQgYWxsIGNvbmZpcm1hdGlvbiBlbWFpbHMsIG5vdCB5ZXQgc2VuZA0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJc2VuZENvbmZpcm1hdGlvbkVtYWlscygxKTsNCgkJCX0pOw0KCQkJDQoJCQlmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKHR5cGUpIHsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImFkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9YWpheC5zZW5kQ29uZmlybWF0aW9uRW1haWxzJmZvcm1hdD1qc29uJzsNCgkJCQlpZih0eXBlID4gMCl7DQoJCQkJCXZhciByZXF1ZXN0ID0gJ3Rva2VuPSIuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLiImdHlwZT0nK3R5cGU7DQoJCQkJfQ0KCQkJCXJldHVybiBqUXVlcnkuYWpheCh7DQoJCQkJCXR5cGU6ICdQT1NUJywNCgkJCQkJdXJsOiBnZXRVcmwsDQoJCQkJCWRhdGFUeXBlOiAnanNvbnAnLA0KCQkJCQlkYXRhOiByZXF1ZXN0LA0KCQkJCQlqc29ucDogJ2NhbGxiYWNrJw0KCQkJCX0pOw0KCQkJfSIpOw0KCX0=', 'CS8qKg0KCSogCVRoZSBtYWluIHNlbmQgZW1haWwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXBseUVtYWlsOw0KDQoJLyoqDQoJKiAJVGhlIGNvbXBvbmVudCBwYXJhbXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRwYXJhbXM7DQoNCgkvKioNCgkqIAlUaGUgTWFpbiBmcm9tIG5hbWUNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXBseU5hbWU7DQoNCgkvKioNCgkqIAlTZW5kIHRoZSBjb25maXJtYXRpb24gZW1haWxzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUZW1wbGF0ZSgkdHlwZSwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJfQ0KCQkkYm9keSA9IHNlbGY6OiRwYXJhbXMtPmdldCgkdHlwZSwgJGRlZmF1bHQpOw0KCQkvLyByZXR1cm4gdGhlIHRlbXBsYXRlIGlmIGZvdW5kDQoJCWlmICgkYm9keSkNCgkJew0KCQkJcmV0dXJuICRib2R5Ow0KCQl9DQoJCXJldHVybiBUZXh0OjpzcHJpbnRmKCdObyB0ZW1wbGF0ZSBmb3IgPGI+JXM8L2I+IHdlcmUgZm91bmQnLCBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR0eXBlLCAndycpKTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgcGxhY2UgaG9sZGVycw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGxhY2VIb2xkZXJzKCR0eXBlKQ0KCXsNCgkJaWYgKCdkb2N1bWVudCcgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJfQ0KCQllbHNlaWYgKCdjb25maXJtYXRpb25fZW1haWwnID09ICR0eXBlKQ0KCQl7DQoJCQkkZiA9ICdbJzsNCgkJCSRiID0gJ10nOw0KCQkJJHBsYWNlaG9sZGVyID0gYXJyYXkoKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXkoJ1tkb2N1bWVudF9oZWFkZXJdJyk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV92YWx1ZXMoc2VsZjo6Z2V0U2VsZWN0aW9uKCdleHBlcnQnLCAkZi4nZXhwZXJ0XycsICRiKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X3ZhbHVlcyhzZWxmOjpnZXRTZWxlY3Rpb24oJ3JlZmVycmFsJywgJGYuJ3JlZmVycmFsXycsICRiKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbY29uZmlybWF0aW9uX2xpbmtdJyk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfZm9vdGVyXScpOw0KCQkJcmV0dXJuICBzZWxmOjptZXJnZUFycmF5cygkcGxhY2Vob2xkZXIpOw0KCQl9DQoJCWVsc2VpZiAoJ2V4cGVydF9wcm9maWxlJyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfaGVhZGVyXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfdmFsdWVzKHNlbGY6OmdldFNlbGVjdGlvbignZXhwZXJ0JywgJGYuJ2V4cGVydF8nLCAkYikpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2lzX29yZ2FuaXNhdGlvbl0nLCAnW2lzX2FkbWluXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2RvY3VtZW50X2Zvb3Rlcl0nKTsNCgkJCXJldHVybiAgc2VsZjo6bWVyZ2VBcnJheXMoJHBsYWNlaG9sZGVyKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJU2VuZCBhIG1lc3NhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRNZXNzYWdlKCRlcG9zY29kZSwgJHJlcGx5VG9OYW1lLCAkcmVwbHlUb0VtYWlsLCAkbWVzc2FnZSkNCgl7DQoJCSRlcG9zY29kZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGRlY29kZSgkZXBvc2NvZGUpOw0KCQkvLyBHZXQgYSBDcnlwdCBLZXkNCgkJJGJhc2lja2V5ID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJJG9wZW5lciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRiYXNpY2tleSwgMTI4KTsNCgkJJGVwb3NDb2RlID0gcnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygkZXBvc2NvZGUpLCAiXDAiKTsNCgkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRlcG9zQ29kZSkpDQoJCXsNCgkJCSR0YXJnZXQgPSBqc29uX2RlY29kZSgkZXBvc0NvZGUpOw0KCQkJaWYgKGlzc2V0KCR0YXJnZXQtPmlkKSAmJiAkdGFyZ2V0LT5pZCA+IDApDQoJCQl7DQoJCQkJJGV4cGVydCA9IHNlbGY6OmdldEV4cGVydERldGFpbHMoJHRhcmdldC0+aWQsICdvYmplY3QnLCAnc3BlY2lhbCcpOw0KCQkJCWlmIChpc3NldCgkZXhwZXJ0LT5lbWFpbCkgJiYgaXNzZXQoJHRhcmdldC0+ZW1haWwpICYmICRleHBlcnQtPmVtYWlsID09ICR0YXJnZXQtPmVtYWlsKQ0KCQkJCXsNCgkJCQkJLy8gc2V0dXAgdGhlIHN1YmplY3QNCgkJCQkJJHN1YmplY3QgPSBUZXh0OjpzcHJpbnRmKCdBIG1lc3NhZ2UgZnJvbSAlcyB0byAlcycsICRyZXBseVRvTmFtZSwgJGV4cGVydC0+bmFtZSk7DQoJCQkJCS8vIHNldHVwIHRoZSBodG1sDQoJCQkJCSRtZXNzYWdlSHRtbCA9IHN0cl9yZXBsYWNlKCJcbiIsICI8YnIgLz4iLCAkbWVzc2FnZSk7DQoJCQkJCSRodG1sID0gVGV4dDo6c3ByaW50ZignJXM8YnIgLz48YnIgLz4lczxiciAvPiVzJywgJG1lc3NhZ2VIdG1sLCAkcmVwbHlUb05hbWUsICRyZXBseVRvRW1haWwpOw0KCQkJCQkkdGV4dCA9IFRleHQ6OnNwcmludGYoIiVzXG5cbiVzXG4lcyIsICRtZXNzYWdlLCAkcmVwbHlUb05hbWUsICRyZXBseVRvRW1haWwpOw0KCQkJCQkvLyBzZW5kIHRoZSBlbWFpbA0KCQkJCQlpZiAoW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJGV4cGVydC0+ZW1haWwsICRzdWJqZWN0LCBzZWxmOjplbWFpbEJvZHkoJGh0bWwsICRzdWJqZWN0KSwgJHRleHQsIDEsIG51bGwsIG51bGwsICRyZXBseVRvRW1haWwsICAkcmVwbHlUb05hbWUpKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gYXJyYXkoJ21lc3NhZ2UnID0+ICBUZXh0OjpzcHJpbnRmKCclcyB5b3VyIG1lc3NhZ2UgdG8gJXMgd2FzIHNlbmQgc3VjY2Vzc2Z1bGx5IScsICRyZXBseVRvTmFtZSwgJGV4cGVydC0+bmFtZSksICdzdGF0dXMnID0+ICdzdWNjZXNzJyk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGFycmF5KCdtZXNzYWdlJyA9PiAgVGV4dDo6c3ByaW50ZignJXMgdGhlcmUgd2FzIGFuIEVSUk9SIHNlbmRpbmcgeW91ciBtZXNzYWdlIScsICRyZXBseVRvTmFtZSksICdzdGF0dXMnID0+ICdkYW5nZXInKTsNCgl9DQoNCgkvKioNCgkqIAl0aGUgY29uZmlybWF0aW9uIGVtYWlscyB0byBzZW5kDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkY29uZmlybWF0aW9uRW1haWxzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogCVNlbmQgdGhlIGNvbmZpcm1hdGlvbiBlbWFpbHMNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRDb25maXJtYXRpb25FbWFpbHMoKQ0KCXsNCgkJLy8gZmlyc3Qgd2UgZ2V0IGFsbCB0aGUgZGF0YSBhbmQgc2V0IHRoZSBlbWFpbHMgYXMgc2VuZCAodG8gaW5zdXJlIGVtYWlscyBhcmUgbm90IHNlbmQgbW9yZSB0aGVuIG9uY2UpDQoJCWlmICgkbGlzdCA9IHNlbGY6OmdldENvbmZpcm1hdGlvbk5lZWRlZExpc3QoKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBjb21wYW55DQoJCQkkY29tcGFueSA9ICBzZWxmOjpnZXRDb21wYW55RGV0YWlscygncGxhY2Vob2xkZXInKTsNCgkJCS8vIGdldCBlbWFpbCB0ZW1wbGF0ZQ0KCQkJJHRlbXBsYXRlID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2NvbmZpcm1hdGlvbl9lbWFpbCcpOw0KCQkJJHN1YmplY3RfdGVtcGxhdGUgPSBzZWxmOjpnZXRUZW1wbGF0ZSgnc3ViamVjdF9jb25maXJtYXRpb25fZW1haWwnLCAnSGkgW3JlZmVycmFsX25hbWVdLCBwbGVhc2UgY29uZmlybSB0aGUgZGV0YWlscyBvZiBbZXhwZXJ0X25hbWVdJyk7DQoJCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkJJGRvY19oZWFkZXIgPSBzZWxmOjpnZXRUZW1wbGF0ZSgnZG9jX2hlYWRlcicpOw0KCQkJJGRvY19mb290ZXIgPSBzZWxmOjpnZXRUZW1wbGF0ZSgnZG9jX2Zvb3RlcicpOw0KCQkJJGRlZmF1bHRbXSA9IGFycmF5KCdbZG9jdW1lbnRfaGVhZGVyXScgPT4gc2VsZjo6c2V0RHluYW1pY0RhdGEoJGRvY19oZWFkZXIsICRjb21wYW55KSwgJ1tkb2N1bWVudF9mb290ZXJdJyA9PiBzZWxmOjpzZXREeW5hbWljRGF0YSgkZG9jX2Zvb3RlciwgJGNvbXBhbnkpKTsNCgkJCS8vIG5vdyBsZXRzIGdldCB0aGUgY29tcGFueSBkZXRhaWxzDQoJCQkkZGVmYXVsdFtdID0gJGNvbXBhbnk7DQoJCQkkZGV0YWlscyA9IGFycmF5KCk7DQoJCQkkZGV0YWlsc1swXSA9IHNlbGY6Om1lcmdlQXJyYXlzKCRkZWZhdWx0KTsNCgkJCS8vIHN0YXJ0IGJ1aWxkaW5nIHRoZSBlbWFpbHMNCgkJCWZvcmVhY2ggKCRsaXN0IGFzICRyZWZlcmVuY2UpDQoJCQl7DQoJCQkJLy8gbm93IGxldHMgZ2V0IHRoZSBleHBlcnQgZGV0YWlscw0KCQkJCSRkZXRhaWxzWzFdID0gc2VsZjo6Z2V0RXhwZXJ0RGV0YWlscygkcmVmZXJlbmNlWydbcmVmZXJyYWxfZXhwZXJ0X2lkXSddLCAncGxhY2Vob2xkZXInLCAnZnVsbCcpOw0KCQkJCSRkZXRhaWxzWzJdID0gJHJlZmVyZW5jZTsNCgkJCQkvLyBub3cgbW9yZSB2YWx1ZXMNCgkJCQkkcGxhY2Vob2xkZXJzID0gc2VsZjo6bWVyZ2VBcnJheXMoJGRldGFpbHMpOw0KCQkJCSRib2R5ID0gc2VsZjo6c2V0RHluYW1pY0RhdGEoJHRlbXBsYXRlLCAkcGxhY2Vob2xkZXJzKTsNCgkJCQkkc3ViamVjdCA9IHNlbGY6OnNldER5bmFtaWNEYXRhKCRzdWJqZWN0X3RlbXBsYXRlLCAkcGxhY2Vob2xkZXJzKTsNCgkJCQkvLyBzZXQgdGhlIGVtYWlsIGRldGFpbHMNCgkJCQlzZWxmOjokY29uZmlybWF0aW9uRW1haWxzW10gPSBhcnJheSgnaWQnID0+ICRyZWZlcmVuY2VbJ1tyZWZlcnJhbF9pZF0nXSwgJ2VtYWlsJyA9PiAkcmVmZXJlbmNlWydbcmVmZXJyYWxfZW1haWxdJ10sICdzdWJqZWN0JyA9PiAkc3ViamVjdCwgJ2h0bWwnID0+ICRib2R5KTsNCgkJCQkvLyBsZXRzIHNlbmQgbWFpbCBlYWNoIHRpbWUgd2UgaGF2ZSBtb3JlIHRoZW4gMTAgc2V0DQoJCQkJc2VsZjo6c2VuZENvbmZpcm1hdGlvbkVtYWlsKDEwKTsNCgkJCX0NCgkJCS8vIHNlbmQgZmluYWwgZW1haWxzIGlmIGFueSByZW1haW4NCgkJCXNlbGY6OnNlbmRDb25maXJtYXRpb25FbWFpbCgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogU2VuZCB0aGUgZW1haWwgbmVlZGVkIGZvciBjb25maXJtYXRpb24NCgkqDQoJKiBAcGFyYW0gaW50ICAkcXR5IHRoZSBxdHkgYmVmb3JlIGVtYWlsaW5nIHRoZSBsaXN0DQoJKg0KCSogQHJldHVybiAgYm9vbGVhbiBmYWxzZSBvbiBmYWlsdXJlDQoJKg0KCSoqLwkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNlbmRDb25maXJtYXRpb25FbWFpbCgkcXR5ID0gMSkNCgl7DQoJCWlmIChjb3VudChzZWxmOjokY29uZmlybWF0aW9uRW1haWxzKSA+PSAkcXR5KQ0KCQl7DQoJCQkvLyBzZW5kIHRoZSBlbWFpbHMNCgkJCWZvcmVhY2ggKHNlbGY6OiRjb25maXJtYXRpb25FbWFpbHMgYXMgJGRldGFpbHMpDQoJCQl7DQoJCQkJaWYgKCFbW1tDb21wb25lbnRdXV1FbWFpbDo6c2VuZCgkZGV0YWlsc1snZW1haWwnXSwgJGRldGFpbHNbJ3N1YmplY3QnXSwgc2VsZjo6ZW1haWxCb2R5KCRkZXRhaWxzWydodG1sJ10sICRkZXRhaWxzWydzdWJqZWN0J10pLCAnJywgMSwgbnVsbCwgbnVsbCwgc2VsZjo6JHJlcGx5RW1haWwsICBzZWxmOjokcmVwbHlOYW1lKSkNCgkJCQl7DQoJCQkJCSRmaWVsZHMgPSBhcnJheSgpOw0KCQkJCQkkZmllbGRzW10gPSAkZGItPnF1b3RlTmFtZSgnZW1haWxzZW5kJykgLiAnID0gMCc7ICAvLyBzZXQgdG8gZXJyb3IgYXMgbm90IHNlbmQNCgkJCQkJc2VsZjo6JHVwZGF0ZXJbXSAgPSBhcnJheSgnZmllbGRzJyA9PiAkZmllbGRzLCAnY29uZGl0aW9ucycgPT4gYXJyYXkoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuICRkZXRhaWxzWydpZCddKSk7DQoJCQkJCS8vIHJ1biB1cGRhdGUgaWYgbWFueSB2YWx1ZXMgZm91bmQNCgkJCQkJc2VsZjo6dXBkYXRlRGF0YSgxMCk7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gcnVuIHVwZGF0ZSBvbiBsYXN0IHJlbWFpbmluZyB2YWx1ZXMNCgkJCXNlbGY6OnVwZGF0ZURhdGEoKTsNCgkJCS8vIGNsZWFyIHRoZSB2YWx1ZXMgYXJyYXkNCgkJCXNlbGY6OiRjb25maXJtYXRpb25FbWFpbHMgPSBhcnJheSgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCU9uY2UgdGhlIGVtYWlsIHdhcyBzZW5kIHRoZSBnaXZlcyB1cyB0aGUgb3B0aW9uIHRoZSBzdG9yZSB0aGUgbWFzc2FnZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RvcmVNZXNzYWdlKCRzZW5kbWFpbCwgJHJlY2lwaWVudCwgJHN1YmplY3QsICRib2R5LCAkdGV4dG9ubHksICRtb2RlLCAkdHlwZSkNCgl7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCXRoZSB1cGRhdGVyIGFycmF5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXBkYXRlciA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlHZXQgdGhlIGxpc3Qgb2YgdW4tZW1haWxlZCBjb25maXJtYXRpb25zIGFuZCBsb2NrIHRoZW0NCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbmZpcm1hdGlvbk5lZWRlZExpc3QoJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicpDQoJew0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW3JlZmVycmFsXyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQkvLyBnZXQgdGhlIGxpc3Qgb2YgdmFsdWVzIHdlIHdhbnQgZnJvbSBkYg0KCQkkc2VsZWN0aW9uID0gc2VsZjo6Z2V0U2VsZWN0aW9uKCdyZWZlcnJhbCcsICRmLCAkYik7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5X2tleXMoJHNlbGVjdGlvbiksIGFycmF5X3ZhbHVlcygkc2VsZWN0aW9uKSkpOw0KCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uIHRhYmxlLg0KCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24gQVMgYScpOw0KCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY291bnRyeSB0YWJsZS4NCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JywgJ2InKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5jb3VudHJ5JykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdiLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCdhLmVtYWlsc2VuZCA9IDInKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5jb25maXJtZWQgPSAwJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkvLyBHZXQgdGhlIGJhc2ljIGVuY3J5cHRpb24uDQoJCQkkYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnLCAnZXJqZzQzNTl3aWRjdWplM2FzYWlmMDl0YnY5OWhvd2lkMHJnZjAzOGhmaG9kaTh3Zm9lZCcpOyAvLyB3ZSBtdXN0IGhhdmUgYSBrZXkgaGVyZQ0KCQkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJCSRiYXNpYyA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRiYXNpY2tleSwgMTI4KTsNCgkJCS8vIGxvYWQgdGhlIGxpc3Qgb2YgZXhwZXJ0cyB0byBjb25maXJtDQoJCQkkbGlzdCA9ICRkYi0+bG9hZEFzc29jTGlzdCgpOw0KCQkJZm9yZWFjaCAoJGxpc3QgYXMgJG5yID0+ICRyZWZlcmVuY2UpDQoJCQl7DQoJCQkJJGZpZWxkcyA9IGFycmF5KCk7DQoJCQkJJGZpZWxkc1tdID0gJGRiLT5xdW90ZU5hbWUoJ2VtYWlsc2VuZCcpIC4gJyA9IDEnOyAvLyBsb2NrIGRvd24gdG8gbG9vayBhcyBzZW5kIHRvIGtlZXAgbXVsdGkgZW1haWxzIGZyb20gYmVpbmcgc2VuZA0KCQkJCXNlbGY6OiR1cGRhdGVyW10gID0gYXJyYXkoJ2ZpZWxkcycgPT4gJGZpZWxkcywgJ2NvbmRpdGlvbnMnID0+IGFycmF5KCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcgLiAkcmVmZXJlbmNlWyRmLidpZCcuJGJdKSk7DQoJCQkJLy8gYnVpbGQgdGhlIGNvbmZpcm1hdGlvbiBsaW5rDQoJCQkJJGxpc3RbJG5yXVsnW2NvbmZpcm1hdGlvbl9saW5rXSddID0gc2VsZjo6Z2V0Q29uZmlybWF0aW9uTGluaygkcmVmZXJlbmNlLCBhcnJheSgkZiwgJGIpLCAkYmFzaWMpOw0KCQkJCS8vIHJ1biB1cGRhdGUgaWYgbWFueSB2YWx1ZXMgZm91bmQNCgkJCQlzZWxmOjp1cGRhdGVEYXRhKDEwMCk7DQoJCQl9DQoJCQkvLyBydW4gdXBkYXRlIG9uIGxhc3QgcmVtYWluaW5nIHZhbHVlcw0KCQkJc2VsZjo6dXBkYXRlRGF0YSgpOw0KCQkJLy8gcmV0dXJuIHRoZSBmb3VuZCBsaXN0DQoJCQlyZXR1cm4gJGxpc3Q7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQoJLyoqDQoJICoJVG8gbG9hZCB0aGUgYXBwbGljYXRpb24gZm9ybQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXBwbGljYXRpb25Gb3JtKCRkYXRhID0gbnVsbCwgJHR5cGUgPSAnZXhwZXJ0JywgJGFjY2VzcyA9ICdwdWJsaWMnKQ0KCXsNCgkJLy8gZ2V0IGZvcm1zIHBhdGgNCgkJJHBhdGgJPSBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vbW9kZWxzL2Zvcm1zJzsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJGZ1bGxQYXRoID0gJHBhdGguJy8nLiR0eXBlLicueG1sJzsNCgkJLy8gY2hlY2sgaWYgZmlsZSBleGlzdHMNCgkJaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpDQoJCXsNCgkJCS8vIEdldCB0aGUgZm9ybS4NCgkJCWppbXBvcnQoICdqb29tbGEuZm9ybS5mb3JtJyApOw0KCQkJLy8gc2V0IHRoZSBwYXRocw0KCQkJSkZvcm06OmFkZEZvcm1QYXRoKCRwYXRoKTsNCgkJCUpGb3JtOjphZGRGaWVsZFBhdGgoSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL21vZGVscy9maWVsZHMnKTsNCgkJCS8vIGdyZWF0IHdlIGFyZSBkb25lIHJldHVybiByZXN1bHRzDQoJCQkkZm9ybSA9IEpGb3JtOjpnZXRJbnN0YW5jZSgnY29tX1tbW2NvbXBvbmVudF1dXS4nLiR0eXBlLCAkdHlwZSwgYXJyYXkoJ2NvbnRyb2wnID0+ICdqZm9ybScsICdsb2FkX2RhdGEnID0+IGZhbHNlKSwgZmFsc2UsIGZhbHNlKTsNCgkJCS8vIGNoYW5nZSB0aGUgZm9ybSBmb3IgcHVibGljIHN1Ym1pc3Npb24NCgkJCWlmICgncHVibGljJyA9PSAkYWNjZXNzKQ0KCQkJew0KCQkJCXNlbGY6OnB1YmxpY0FwcGxpY2F0aW9uRm9ybSgkZm9ybSwgJHR5cGUpOw0KCQkJfQ0KCQkJLy8gbm93IGxvYWQgdGhlIGRhdGENCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCQl7DQoJCQkJJGZvcm0tPmJpbmQoJGRhdGEpOw0KCQkJfQ0KCQkJcmV0dXJuICRmb3JtOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRhcHBsaWNhdGlvbkZpZWxkcyA9IA0KCQlhcnJheSgNCgkJCSdleHBlcnQnID0+DQoJCQkJYXJyYXkoDQoJCQkJCSdyZW1vdmVGaWVsZHMnID0+DQoJCQkJCQlhcnJheSgnaWQnLCdjcmVhdGVkJywnY3JlYXRlZF9ieScsJ3B1Ymxpc2hlZCcsJ21vZGlmaWVkJywnbW9kaWZpZWRfYnknLCdhY2Nlc3MnLCdvcmRlcmluZycsJ3ZlcnNpb24nLCdtZXRha2V5JywnbWV0YWRlc2MnLCd1c2VyJywnYXNzZXRfaWQnLCdydWxlcycpLA0KCQkJCQkncmVtb3ZlR3JvdXBzJyA9Pg0KCQkJCQkJYXJyYXkoJ21ldGFkYXRhJywnYWNjZXNzY29udHJvbCcpDQoJCQkJKQ0KCQkpOw0KDQoJLyoqDQoJICoJTW9kZWwgdGhlIGZvcm0gZm9yIHB1YmxpIHN1Ym1pc3Npb24NCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHB1YmxpY0FwcGxpY2F0aW9uRm9ybSgmJGZvcm0sICR0eXBlKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRhcHBsaWNhdGlvbkZpZWxkc1skdHlwZV0pKQ0KCQl7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlRmllbGRzJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRhcHBsaWNhdGlvbkZpZWxkc1skdHlwZV1bJ3JlbW92ZUZpZWxkcyddKSkNCgkJCXsNCgkJCQkvLyBmaXJzdCByZW1vdmUgYWxsIHVud2FudGVkIGZpZWxkcw0KCQkJCWZvcmVhY2ggKHNlbGY6OiRhcHBsaWNhdGlvbkZpZWxkc1skdHlwZV1bJ3JlbW92ZUZpZWxkcyddIGFzICRmaWVsZCkNCgkJCQl7DQoJCQkJCSRmb3JtLT5yZW1vdmVGaWVsZCgkZmllbGQpOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChpc3NldChzZWxmOjokYXBwbGljYXRpb25GaWVsZHNbJHR5cGVdWydyZW1vdmVHcm91cHMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlR3JvdXBzJ10pKQ0KCQkJew0KCQkJCS8vIGZpcnN0IHJlbW92ZSBhbGwgdW53YW50ZWQgZmllbGRzDQoJCQkJZm9yZWFjaCAoc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlR3JvdXBzJ10gYXMgJGdyb3VwKQ0KCQkJCXsNCgkJCQkJJGZvcm0tPnJlbW92ZUdyb3VwKCRncm91cCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIGFkZCB0aGUgdXNlciBmaWVsZHMNCgkJc2VsZjo6YWRkVXNlckZpZWxkcygkZm9ybSk7DQoJfQ0KDQoJLyoqDQoJICoJQWRkIHVzZXIgZmllbGRzIHRvIGFwcGxpY2F0aW9uDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhZGRVc2VyRmllbGRzKCYkZm9ybSkNCgl7DQoJCS8vIHdlIG11c3QgYWRkIHNvbWUgdXNlciBmaWVsZHMNCgkJJHVzZXJGaWVsZHMgPQ0KCQkJYXJyYXkoDQoJCQkJJ25hbWUnID0+DQoJCQkJCWFycmF5KCduYW1lJywndXNlcm5hbWUnLCdlbWFpbCcsJ3Bhc3N3b3JkJywncGFzc3dvcmQyJywgJ2NhcHRjaGEnKSwNCgkJCQkndHlwZScgPT4NCgkJCQkJYXJyYXkoJ3RleHQnLCd0ZXh0JywnZW1haWwnLCdwYXNzd29yZCcsJ3Bhc3N3b3JkJywnY2FwdGNoYScpLA0KCQkJCSdsYWJlbCcgPT4NCgkJCQkJYXJyYXkoVGV4dDo6XygnTmFtZScpLFRleHQ6Ol8oJ1VzZXJuYW1lL0xvZ2luLW5hbWUnKSxUZXh0OjpfKCdFbWFpbCcpLFRleHQ6Ol8oJ1Bhc3N3b3JkJyksVGV4dDo6XygnQ29uZmlybSBQYXNzd29yZCcpLFRleHQ6Ol8oJ1JlQ2FwdGNoYScpKSwNCgkJCQknZGVzY3JpcHRpb24nID0+DQoJCQkJCWFycmF5KFRleHQ6Ol8oJ1lvdXIgRnVsbCBOYW1lJyksVGV4dDo6XygnU2V0IHRoZSB1c2VybmFtZS9sb2dpbi1uYW1lIG9mIHlvdXIgY2hvaWNlLicpLFRleHQ6Ol8oJ1lvdXIgRW1haWwgQWRkcmVzcycpLFRleHQ6Ol8oJ1VzZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnMsIHVwcGVyLWNhc2UgYW5kIGxvd2VyLWNhc2UgbGV0dGVyLCBudW1iZXJzIGFuZCBhdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIuJyksVGV4dDo6XygnQ29uZmlybSBQYXNzd29yZCcpLFRleHQ6Ol8oJ0p1c3QgY2hlY2tpbmcgdGhhdCB5b3VyIG5vdCBhIHJvYm90LicpKSwNCgkJCQknaGludCcgPT4NCgkJCQkJYXJyYXkoVGV4dDo6XygnRXhwZXJ0IEZ1bGwgTmFtZScpLCBUZXh0OjpfKCdVc2VybmFtZScpLCAneW91ckBlbWFpbC5jb20nLG51bGwsbnVsbCxudWxsKSwNCgkJCQknY2xhc3MnID0+DQoJCQkJCWFycmF5KCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLG51bGwpLA0KCQkJCSd2YWxpZGF0ZScgPT4NCgkJCQkJYXJyYXkobnVsbCwgbnVsbCwgJ2VtYWlsJywgbnVsbCwgbnVsbCwgJ2NhcHRjaGEnKSwNCgkJCQknZmlsdGVyJyA9Pg0KCQkJCQlhcnJheSgnc3RyaW5nJywgJ3N0cmluZycsICdlbWFpbCcsIG51bGwsIG51bGwsbnVsbCksDQoJCQkJJ2ZpZWxkJyA9Pg0KCQkJCQlhcnJheShudWxsLCBudWxsLCBudWxsLCAncGFzc3dvcmQyJywgbnVsbCwgbnVsbCkNCgkJCSk7DQoJCSRhZGRSZUNhcHRjaGEgPSBGYWN0b3J5OjpnZXRDb25maWcoKS0+Z2V0KCdjYXB0Y2hhJyk7DQoJCS8vIG5vdyBsb29wIHRoZSBmaWVsZHMgYW5kIGFkZCB0byBmb3JtDQoJCWZvcmVhY2ggKCR1c2VyRmllbGRzWyduYW1lJ10gYXMgJG5yID0+ICRuYW1lKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgZmllbGQNCgkJCSR4bWwgPSBhcnJheSgpOw0KCQkJLy8gb25seSBsb2FkIFJlQ2FwdGNoYSBpZiB0dXJuZWQgb24gaW4gc3lzdGVtDQoJCQlpZiAoJ2NhcHRjaGEnICE9ICRuYW1lIHx8ICRhZGRSZUNhcHRjaGEpDQoJCQl7DQoJCQkJJHhtbFtdID0gJzxmaWVsZCAnOw0KCQkJCSR4bWxbXSA9ICd0eXBlPSInLiR1c2VyRmllbGRzWyd0eXBlJ11bJG5yXS4nIiAnOw0KCQkJCSR4bWxbXSA9ICduYW1lPSInLiRuYW1lLiciICc7DQoJCQkJaWYgKCR1c2VyRmllbGRzWydsYWJlbCddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnbGFiZWw9IicuJHVzZXJGaWVsZHNbJ2xhYmVsJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2Rlc2NyaXB0aW9uJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdkZXNjcmlwdGlvbj0iJy4kdXNlckZpZWxkc1snZGVzY3JpcHRpb24nXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snY2xhc3MnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2NsYXNzPSInLiR1c2VyRmllbGRzWydjbGFzcyddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCdjYXB0Y2hhJyAhPSAkbmFtZSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdyZXF1aXJlZD0idHJ1ZSIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydmaWx0ZXInXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2ZpbHRlcj0iJy4kdXNlckZpZWxkc1snZmlsdGVyJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ3ZhbGlkYXRlJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICd2YWxpZGF0ZT0iJy4kdXNlckZpZWxkc1sndmFsaWRhdGUnXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snZmllbGQnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2ZpZWxkPSInLiR1c2VyRmllbGRzWydmaWVsZCddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydoaW50J11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdoaW50PSInLiR1c2VyRmllbGRzWydoaW50J11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQkkeG1sW10gPSAnLz4nOw0KCQkJCS8vIHNldCB0aGUgZmllbGQNCgkJCQkkZm9ybS0+c2V0RmllbGQoIHNpbXBsZXhtbF9sb2FkX3N0cmluZyhpbXBsb2RlKCJcbiIsICR4bWwpKSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkqIFRoaXMgY29uZmlybXMgZXhwZXJ0cw0KCSoNCgkqIEBwYXJhbSBzdHJpbmcgdGhlIGJhc2U2NCBlbmNyeXB0ZWQgc3RyaW5nDQoJKg0KCSogQHJldHVybiAgYm9vbGVhbiBmYWxzZSBvbiBmYWlsdXJlDQoJKg0KCSoqLwkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbmZpcm1FeHBlcnQoJGFjdGlvbikNCgl7DQoJCS8vIGVycm9yIGFycmF5IGlmIG5lZWRlZA0KCQkkZXJyb3JzID0gYXJyYXkoKTsNCgkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQkkYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnLCAnZXJqZzQzNTl3aWRjdWplM2FzYWlmMDl0YnY5OWhvd2lkMHJnZjAzOGhmaG9kaTh3Zm9lZCcpOyAvLyB3ZSBtdXN0IGhhdmUgYSBrZXkgaGVyZQ0KCQkvLyBHZXQgdGhlIGVuY3JpcHRpb24gb2JqZWN0Lg0KCQkkb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGJhc2lja2V5LCAxMjgpOw0KCQkvLyB3ZSB0cnkgdG8gb3BlbiBpdA0KCQlpZiAoJHJlZmVyZW5jZSA9IGpzb25fZGVjb2RlKHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoc2VsZjo6YmFzZTY0X3VybGRlY29kZSgkYWN0aW9uKSksICJcMCIpKSkNCgkJew0KCQkJaWYgKGlzc2V0KCRyZWZlcmVuY2UtPmlkKSkNCgkJCXsNCgkJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyBnZXQgdmFsdWVzIGluIGRhdGFiYXNlDQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2V4cGVydCcsICduYW1lJywgJ2VtYWlsJywgJ2NvbmZpcm1lZCcpKSk7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJykpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4gKGludCkgJHJlZmVyZW5jZS0+aWQpOw0KCQkJCS8vIG5vdyBnZXQgdGhlIGRhdGENCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJaWYgKCRkYi0+ZXhlY3V0ZSgpKQ0KCQkJCXsNCgkJCQkJJGxvY2FsID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJCSR2ZXJpZmllZCA9IGZhbHNlOwkJCQ0KCQkJCQkvLyBub3cgY2hlY2sgaWYgdGhlIGRhdGEgaXMgc3RpbGwgdGhlIHNhbWUNCgkJCQkJaWYgKCRsb2NhbC0+Y29uZmlybWVkID09IDEpDQoJCQkJCXsNCgkJCQkJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1RoZSBkZXRhaWxzIHdlcmUgYWxyZWFkeSBzdWNjZXNzZnVsbHkgdmVyaWZpZWQuJyk7DQoJCQkJCQkkdmVyaWZpZWQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWlmICgkbG9jYWwtPmV4cGVydCAhPSAkcmVmZXJlbmNlLT5leHBlcnRfaWQpDQoJCQkJCXsNCgkJCQkJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1RoZSB3cm9uZyBleHBlcnQgd2FzIHNlbGVjdGVkLicpOw0KCQkJCQl9DQoJCQkJCWlmICgkbG9jYWwtPm5hbWUgIT0gJHJlZmVyZW5jZS0+bmFtZSkNCgkJCQkJew0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnWW91ciBuYW1lIG5vIGxvbmdlciBtYXRjaCB0aGUgbmFtZSB3ZSBoYXZlIG9uIGZpbGUuJyk7DQoJCQkJCX0NCgkJCQkJaWYgKCRsb2NhbC0+ZW1haWwgIT0gJHJlZmVyZW5jZS0+ZW1haWwpDQoJCQkJCXsNCgkJCQkJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1lvdXIgZW1haWwgbm8gbG9uZ2VyIG1hdGNoIHRoZSBlbWFpbCB3ZSBoYXZlIG9uIGZpbGUuJyk7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlcnJvcnMpKQ0KCQkJCQl7DQoJCQkJCQlpZiAoISR2ZXJpZmllZCkNCgkJCQkJCXsNCgkJCQkJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdUaGVzZSBjaGFuZ2VzIG1heSBoYXZlIGJlZW4gbWFkZSBieSB0aGUgZXhwZXJ0IGFmdGVyIHRoZSBlbWFpbCB3YXMgc2VuZCB0byB5b3UuJyk7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgdGhlIGVycm9yDQoJCQkJCQlzZWxmOjpzZXRFcnJvcigxLCAkZXJyb3JzKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCQkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkJCQkkb2JqZWN0LT5pZCA9ICRyZWZlcmVuY2UtPmlkOw0KCQkJCQkJJG9iamVjdC0+Y29uZmlybWVkID0gMTsNCg0KCQkJCQkJLy8gVXBkYXRlIHRoZWlyIGRldGFpbHMgaW4gdGhlIGNvbmZpcm1hdGlvbiB0YWJsZSB1c2luZyBpZCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQkJCQlpZiAoRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX2NvbmZpcm1hdGlvbicsICRvYmplY3QsICdpZCcpKQ0KCQkJCQkJew0KCQkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQkJfQ0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyB0aGUgdmVyaWZpY2F0aW9uIHByb3Nlcy4nKTsNCgkJCQkJCS8vIHNldCB0aGUgZXJyb3INCgkJCQkJCXNlbGY6OnNldEVycm9yKDEsICRlcnJvcnMpOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1lvdXIgbGluayBpcyBub3QgdmFsaWQuJyk7DQoJCS8vIHNldCB0aGUgZXJyb3INCgkJc2VsZjo6c2V0RXJyb3IoMSwgJGVycm9ycyk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIEJ1aWxkIHRoZSBsaW5rIHVzZWQgdG8gY29uZmlybSBleHBlcnQgZGF0YQ0KCSoNCgkqIEBwYXJhbSBhcnJheSB0aGUgcmVmZXJyYWxzIGRldGFpbHMNCgkqDQoJKiBAcmV0dXJuICBib29sZWFuIGZhbHNlIG9uIGZhaWx1cmUNCgkqDQoJKiovCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uTGluaygkcmVmZXJlbmNlLCAkb3V0LCBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyICRsb2NrZXIpDQoJew0KCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkcmVmZXJlbmNlIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQkkYXRLZXkgPSBzdHJfcmVwbGFjZSgkb3V0LCAnJywgJGtleSk7DQoJCQkkYnVja2V0WyRhdEtleV0gPSAkdmFsdWU7DQoJCX0NCgkJcmV0dXJuIFVyaTo6cm9vdCgpLidpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1jb25maXJtLmV4cGVydCZhY3Rpb249Jy5zZWxmOjpiYXNlNjRfdXJsZW5jb2RlKCRsb2NrZXItPmVuY3J5cHRTdHJpbmcoanNvbl9lbmNvZGUoJGJ1Y2tldCkpKTsNCgl9DQoNCgkvKioNCgkqIFVwZGF0ZSB0aGUgZGF0YSBmcm9tIHRoZSBmaWxlIHRvIHRoZSBkYXRhYmFzZQ0KCSoNCgkqIEBwYXJhbSBpbnQgICRxdHkgdGhlIHF0eSBiZWZvcmUgZG9pbmcgYW4gdXBkYXRlDQoJKiBAcGFyYW0gYXJyYXkgICR0YWJsZSBUaGUgdGFibGUgYmVpbmcgdXBkYXRlZA0KCSoNCgkqIEByZXR1cm4gIGJvb2xlYW4gZmFsc2Ugb24gZmFpbHVyZQ0KCSoNCgkqKi8JDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVEYXRhKCRxdHkgPSAxLCAkdGFibGUgPSAnY29uZmlybWF0aW9uJykNCgl7DQoJCWlmIChjb3VudChzZWxmOjokdXBkYXRlcikgPj0gJHF0eSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgZGF0YQ0KCQkJZm9yZWFjaChzZWxmOjokdXBkYXRlciBhcyAkdmFsdWUpDQoJCQl7DQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyBQcmVwYXJlIHRoZSB1cGRhdGUgcXVlcnkuDQoJCQkJJHF1ZXJ5LT51cGRhdGUoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSkpDQoJCQkJCS0+c2V0KCR2YWx1ZVsnZmllbGRzJ10pLT53aGVyZSgkdmFsdWVbJ2NvbmRpdGlvbnMnXSk7DQoJCQkJLy8gU2V0IHRoZSBxdWVyeSB1c2luZyBvdXIgbmV3bHkgcG9wdWxhdGVkIHF1ZXJ5IG9iamVjdCBhbmQgZXhlY3V0ZSBpdC4NCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQl9DQoJCQkvLyBjbGVhciB0aGUgdmFsdWVzIGFycmF5DQoJCQlzZWxmOjokdXBkYXRlciA9IGFycmF5KCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBlbWFpbEJvZHkoJiRodG1sLCAmJHN1YmplY3QpDQoJew0KCQkkYm9keSA9IGFycmF5KCk7DQoJCSRib2R5W10gPSAiPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU5cIiBcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGRcIj4iOw0KCQkkYm9keVtdID0gIjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPiI7DQoJCSRib2R5W10gPSAiPGhlYWQ+IjsNCgkJJGJvZHlbXSA9ICI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiIC8+IjsNCgkJJGJvZHlbXSA9ICI8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiLz4iOw0KCQkkYm9keVtdID0gIjx0aXRsZT4iLiRzdWJqZWN0LiI8L3RpdGxlPiI7DQoJCSRib2R5W10gPSAiPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPiI7DQoJCSRib2R5W10gPSAiI291dGxvb2sgYSB7cGFkZGluZzowO30iOw0KCQkkYm9keVtdID0gIi5FeHRlcm5hbENsYXNzIHt3aWR0aDoxMDAlO30iOw0KCQkkYm9keVtdID0gIi5FeHRlcm5hbENsYXNzLCAuRXh0ZXJuYWxDbGFzcyBwLCAuRXh0ZXJuYWxDbGFzcyBzcGFuLCAuRXh0ZXJuYWxDbGFzcyBmb250LCAuRXh0ZXJuYWxDbGFzcyB0ZCwgLkV4dGVybmFsQ2xhc3MgZGl2IHtsaW5lLWhlaWdodDogMTAwJTt9ICI7DQoJCSRib2R5W10gPSAicCB7bWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBmb250LXNpemU6IDBweDsgbGluZS1oZWlnaHQ6IDBweDt9ICI7DQoJCSRib2R5W10gPSAidGFibGUgdGQge2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7fSI7DQoJCSRib2R5W10gPSAidGFibGUge2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IG1zby10YWJsZS1sc3BhY2U6MHB0OyBtc28tdGFibGUtcnNwYWNlOjBwdDsgfSI7DQoJCSRib2R5W10gPSAiaW1nIHtkaXNwbGF5OiBibG9jazsgb3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO30iOw0KCQkkYm9keVtdID0gImEgaW1nIHtib3JkZXI6IG5vbmU7fSI7DQoJCSRib2R5W10gPSAiYSB7dGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogIzAwMDAwMTt9IjsNCgkJJGJvZHlbXSA9ICJhLnBob25lIHt0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMDAwMDAxICFpbXBvcnRhbnQ7IHBvaW50ZXItZXZlbnRzOiBhdXRvOyBjdXJzb3I6IGRlZmF1bHQ7fSI7DQoJCSRib2R5W10gPSAic3BhbiB7Zm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMTdweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6ICMwMDAwMDE7fSI7DQoJCSRib2R5W10gPSAiPC9zdHlsZT4iOw0KCQkkYm9keVtdID0gIjwhLS1baWYgZ3RlIG1zbyA5XT4iOw0KCQkkYm9keVtdID0gIjxzdHlsZT4iOw0KCQkkYm9keVtdID0gIi8qIFRhcmdldCBPdXRsb29rIDIwMDcgYW5kIDIwMTAgKi8iOw0KCQkkYm9keVtdID0gIjwvc3R5bGU+IjsNCgkJJGJvZHlbXSA9ICI8IVtlbmRpZl0tLT4iOw0KCQkkYm9keVtdID0gIjwvaGVhZD4iOw0KCQkkYm9keVtdID0gIjxib2R5IHN0eWxlPVwid2lkdGg6MTAwJTsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7XCI+IjsNCgkJJGJvZHlbXSA9ICJcbjwhLS0gYm9keSB3cmFwcGVyIC0tPiI7DQoJCSRib2R5W10gPSAiPHRhYmxlIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGJvcmRlcj1cIjBcIiBzdHlsZT1cIm1hcmdpbjowOyBwYWRkaW5nOjA7IHdpZHRoOjEwMCU7IGxpbmUtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XCI+IjsNCgkJJGJvZHlbXSA9ICI8dHI+IjsNCgkJJGJvZHlbXSA9ICI8dGQgdmFsaWduPVwidG9wXCI+IjsNCgkJJGJvZHlbXSA9ICI8IS0tIGVkZ2Ugd3JhcHBlciAtLT4iOw0KCQkkYm9keVtdID0gIjx0YWJsZSBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBib3JkZXI9XCIwXCIgYWxpZ249XCJjZW50ZXJcIiB3aWR0aD1cIjgwMFwiID4iOw0KCQkkYm9keVtdID0gIjx0cj4iOw0KCQkkYm9keVtdID0gIjx0ZCB2YWxpZ249XCJ0b3BcIj4iOw0KCQkkYm9keVtdID0gIjwhLS0gY29udGVudCB3cmFwcGVyIC0tPiI7DQoJCSRib2R5W10gPSAiPHRhYmxlIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGJvcmRlcj1cIjBcIiBhbGlnbj1cImNlbnRlclwiIHdpZHRoPVwiNzgwXCI+IjsNCgkJJGJvZHlbXSA9ICI8dHI+IjsNCgkJJGJvZHlbXSA9ICI8dGQgdmFsaWduPVwidG9wXCIgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiPiI7DQoJCSRib2R5W10gPSAkaHRtbDsNCgkJJGJvZHlbXSA9ICI8L3RkPiI7DQoJCSRib2R5W10gPSAiPC90cj4iOw0KCQkkYm9keVtdID0gIjwvdGFibGU+IjsNCgkJJGJvZHlbXSA9ICI8IS0tIC8gY29udGVudCB3cmFwcGVyIC0tPiI7DQoJCSRib2R5W10gPSAiPC90ZD4iOw0KCQkkYm9keVtdID0gIjwvdHI+IjsNCgkJJGJvZHlbXSA9ICI8L3RhYmxlPiI7DQoJCSRib2R5W10gPSAiPCEtLSAvIGVkZ2Ugd3JhcHBlciAtLT4iOw0KCQkkYm9keVtdID0gIjwvdGQ+IjsNCgkJJGJvZHlbXSA9ICI8L3RyPiI7DQoJCSRib2R5W10gPSAiPC90YWJsZT4iOw0KCQkkYm9keVtdID0gIjwhLS0gLyBwYWdlIHdyYXBwZXIgLS0+IjsNCgkJJGJvZHlbXSA9ICI8L2JvZHk+IjsNCgkJJGJvZHlbXSA9ICI8L2h0bWw+IjsNCgkJcmV0dXJuIGltcGxvZGUoIlxuIiwgJGJvZHkpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXhwZXJ0RGlzcGxheSgmJGlkLCAkdmlldyA9IG51bGwsICR0eXBlID0gbnVsbCkNCgl7DQoJCWlmICgkaWQgPiAwKQ0KCQl7DQoJCQkvLyByZXNldCB0aGUgZGV0YWlscyBhcnJheQ0KCQkJJGRldGFpbHMgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBjb21wYW55DQoJCQkkY29tcGFueSA9ICBzZWxmOjpnZXRDb21wYW55RGV0YWlscygncGxhY2Vob2xkZXInKTsNCgkJCS8vIGdldCBlbWFpbCB0ZW1wbGF0ZQ0KCQkJJHRlbXBsYXRlID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2V4cGVydF9wcm9maWxlJyk7DQoJCQkvLyBzZXQgZG9jdW1lbnQgaGVhZGVyIGFuZCBmb290ZXINCgkJCSRkb2NfaGVhZGVyID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2RvY19oZWFkZXInKTsNCgkJCSRkb2NfZm9vdGVyID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2RvY19mb290ZXInKTsNCgkJCSRkZXRhaWxzW10gPSBhcnJheSgnW2RvY3VtZW50X2hlYWRlcl0nID0+IHNlbGY6OnNldER5bmFtaWNEYXRhKCRkb2NfaGVhZGVyLCAkY29tcGFueSksICdbZG9jdW1lbnRfZm9vdGVyXScgPT4gc2VsZjo6c2V0RHluYW1pY0RhdGEoJGRvY19mb290ZXIsICRjb21wYW55KSk7DQoJCQkvLyBub3cgbGV0cyBnZXQgdGhlIGNvbXBhbnkgZGV0YWlscw0KCQkJJGRldGFpbHNbXSA9ICRjb21wYW55Ow0KCQkJLy8gZ2V0IHVzZXIgYWNjZXNzIHJpZ2h0cw0KCQkJJHVzZXJJcyA9IHNlbGY6OnVzZXJJcygpOw0KCQkJJGFjY2VzcyA9ICdwdWJsaWMnOw0KCQkJaWYgKCR1c2VySXMgPT0gMiB8fCAkdXNlcklzID09IDMpDQoJCQl7DQoJCQkJJGFjY2VzcyA9ICdzcGVjaWFsJzsNCgkJCQlpZiAoJHVzZXJJcyA9PSAyKSANCgkJCQl7DQoJCQkJCSRkZXRhaWxzW10gPSBhcnJheSgnW2lzX29yZ2FuaXNhdGlvbl0nID0+IDEpOw0KCQkJCX0NCgkJCQllbHNlaWYgKCR1c2VySXMgPT0gMykNCgkJCQl7DQoJCQkJCSRkZXRhaWxzW10gPSBhcnJheSgnW2lzX2FkbWluXScgPT4gMSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmICgkdXNlcklzID09IDEpDQoJCQl7DQoJCQkJaWYgKCdwcm9maWxlJyA9PSAkdmlldyAmJiAxOTQ4ID09ICR0eXBlKSAvLyB3aGVuIGV4cGVydCB2aWV3cyBvd24gcHJvZmlsZSAoVE9ETyBtb3JlIGNoZWNrcyB0byBpbnN1cmUgaXQgaXMgdHJ1ZSkNCgkJCQl7DQoJCQkJCSRhY2Nlc3MgPSAnZnVsbCc7DQoJCQkJfQ0KCQkJCSRkZXRhaWxzW10gPSBhcnJheSgnW2lzX2V4cGVydF0nID0+IDEpOw0KCQkJfQ0KCQkJLy8gbm93IGxldHMgZ2V0IHRoZSBleHBlcnQgZGV0YWlscw0KCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldEV4cGVydERldGFpbHMoJGlkLCAncGxhY2Vob2xkZXInLCAkYWNjZXNzKTsNCgkJCS8vIG5vdyBtZXJlIHZhbHVlcw0KCQkJJHBsYWNlaG9sZGVycyA9IHNlbGY6Om1lcmdlQXJyYXlzKCRkZXRhaWxzKTsNCgkJCWlmICgkYm9keSA9IHNlbGY6OnNldER5bmFtaWNEYXRhKCR0ZW1wbGF0ZSwgJHBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJcmV0dXJuICRib2R5Ow0KCQkJfQkJCQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRleHBlcnREZXRhaWxzID0gYXJyYXkoKTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4cGVydERldGFpbHMoJiRpZCwgJG1ldGhvZCA9ICdvYmplY3QnLCAkYWNjZXNzID0gJ3B1YmxpYycpDQoJew0KCQkvLyB3ZSBuZWVkIHRvIG1hbmFnZSBzb21lIG1lbW9yeSBoZXJlDQoJCWlmIChjb3VudChzZWxmOjokZXhwZXJ0RGV0YWlscykgPj0gMjAwKQ0KCQl7DQoJCQkvLyByZW1vdmUgZmlyc3QgMTAwIGZyb20gbWVtb3J5DQoJCQlmb3JlYWNoIChzZWxmOjokZXhwZXJ0RGV0YWlscyBhcyAkcmVtb3ZlID0+ICRub3cpDQoJCQl7DQoJCQkJLy8gcmVtb3ZlIHRoZSBmaXJzdCB2YWx1ZXMgdGhhdCB3YXMgc2V0DQoJCQkJdW5zZXQoc2VsZjo6JGV4cGVydERldGFpbHNbJHJlbW92ZV0pOw0KCQkJCWlmIChjb3VudChzZWxmOjokZXhwZXJ0RGV0YWlscykgPD0gMTAwKQ0KCQkJCXsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICghaXNzZXQoc2VsZjo6JGV4cGVydERldGFpbHNbJGlkLiRtZXRob2QuJGFjY2Vzc10pKQ0KCQl7DQoJCQkvLyBnZXQgZXhwZXJ0IGRldGFpbHMNCgkJCXNlbGY6OiRleHBlcnREZXRhaWxzWyRpZC4kbWV0aG9kLiRhY2Nlc3NdID0gc2VsZjo6Z2V0RXhwZXJ0KCRpZCwgJG1ldGhvZCwgJGFjY2Vzcyk7DQoJCX0NCgkJaWYgKCFpc3NldChzZWxmOjokZXhwZXJ0RGV0YWlsc1skaWQuJG1ldGhvZC4kYWNjZXNzXSkpDQoJCXsNCgkJCXNlbGY6OiRleHBlcnREZXRhaWxzWyRpZC4kbWV0aG9kLiRhY2Nlc3NdID0gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRleHBlcnREZXRhaWxzWyRpZC4kbWV0aG9kLiRhY2Nlc3NdOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGV4cGVydCA9IGFycmF5KCk7DQoNCgkvKioNCgkqIEdldCB0aGUgDQoJKiANCgkqIEByZXR1cm4gICAgaHRtbCBzdHJpbmcNCgkqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RXhwZXJ0KCYkaWQsICRtZXRob2QgPSAnb2JqZWN0JywgJGFjY2VzcyA9ICdwdWJsaWMnKQ0KCXsNCgkJLy8gd2UgbmVlZCB0byBtYW5hZ2Ugc29tZSBtZW1vcnkgaGVyZQ0KCQlpZiAoY291bnQoc2VsZjo6JGV4cGVydCkgPj0gMTAwKQ0KCQl7DQoJCQkvLyByZW1vdmUgZmlyc3QgNTAgZnJvbSBtZW1vcnkNCgkJCWZvcmVhY2ggKHNlbGY6OiRleHBlcnQgYXMgJHJlbW92ZSA9PiAkbm93KQ0KCQkJew0KCQkJCS8vIHJlbW92ZSB0aGUgZmlyc3QgdmFsdWVzIHRoYXQgd2FzIHNldA0KCQkJCXVuc2V0KHNlbGY6OiRleHBlcnRbJHJlbW92ZV0pOw0KCQkJCWlmIChjb3VudChzZWxmOjokZXhwZXJ0KSA8PSA1MCkNCgkJCQl7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PSAkbWV0aG9kKQ0KCQl7DQoJCQkkZiA9ICdbZXhwZXJ0Xyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10pKQ0KCQl7DQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkJJHNlbGVjdGlvbiA9IHNlbGY6OmdldFNlbGVjdGlvbignZXhwZXJ0JywgJGYsICRiKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5X2tleXMoJHNlbGVjdGlvbiksIGFycmF5X3ZhbHVlcygkc2VsZWN0aW9uKSkpOw0KDQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fZXhwZXJ0IHRhYmxlDQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9leHBlcnQnLCAnYScpKTsNCg0KCQkJLy8gRnJvbSB0aGUgdXNlcnMgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnLCAnZycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnVzZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2cuaWQnKSAuICcpJyk7DQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY291bnRyeSB0YWJsZS4NCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY291bnRyeScsICdoJykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeXJlc2lkZW5jZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnaC5pZCcpIC4gJyknKTsNCgkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9hcmVhX29mX2V4cGVydGlzZSB0YWJsZS4NCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXJlYV9vZl9leHBlcnRpc2UnLCAnaScpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmFyZWFfb2ZfZXhwZXJ0aXNlJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdpLmlkJykgLiAnKScpOw0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2NvdW50cnkgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnaicpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLm5hdGlvbmFsaXR5JykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdqLmlkJykgLiAnKScpOw0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2FjYWRlbWljX3F1YWxpZmljYXRpb24gdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2FjYWRlbWljX3F1YWxpZmljYXRpb24nLCAnaycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmFjYWRlbWljX3F1YWxpZmljYXRpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2suaWQnKSAuICcpJyk7DQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fcHJlZml4IHRhYmxlLg0KCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9wcmVmaXgnLCAncCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnByZWZpeCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgncC5pZCcpIC4gJyknKTsNCgkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV90aXRsZSB0YWJsZS4NCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdGl0bGUnLCAndCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnRpdGxlJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCd0LmlkJykgLiAnKScpOw0KDQoJCQkkcXVlcnktPndoZXJlKCdhLmlkID0gJy4oaW50KSAkaWQpOw0KCQkJLy8gb25seSBsb2FkIGNvbmZpcm1lZCBwcm9maWxlcyB0byB0aGVzZSBncm91cHMNCgkJCWlmICgncHVibGljJyA9PSAkYWNjZXNzIHx8ICdzcGVjaWFsJyA9PSAkYWNjZXNzKQ0KCQkJew0KCQkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24gdGFibGUuDQoJCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24nLCAnYycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdjLmV4cGVydCcpIC4gJyknKTsNCgkJCQkkcXVlcnktPndoZXJlKCdjLmNvbmZpcm1lZCA9IDEnKTsNCgkJCX0NCgkJCS8vIG1ha2Ugc3VyZSB0aGV5IGhhdmUgYWNjZXNzIHRvIHRoaXMgcHJvZmlsZSBhbmQgaXQgaXMgcHVibGlzaGVkDQoJCQlpZiAoJ3B1YmxpYycgPT0gJGFjY2VzcykNCgkJCXsNCgkJCQkkdXNlcgk9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCQkkbGV2ZWxzCT0gJHVzZXItPmdldEF1dGhvcmlzZWRWaWV3TGV2ZWxzKCk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5wdWJsaXNoZWQgPSAxJyk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5hY2Nlc3MgSU4gKCcgLiBpbXBsb2RlKCcsJywgJGxldmVscykgLiAnKScpOw0KCQkJfQ0KDQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCkNCgkJCQl7DQoJCQkJCXNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10gPSBzZWxmOjptb2RlbEV4cGVydCgkZGItPmxvYWRPYmplY3QoKSwgJG1ldGhvZCwgJGFjY2VzcywgJGYsICRiKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV4cGVydFskaWQuJG1ldGhvZC4kYWNjZXNzXSA9IHNlbGY6Om1vZGVsRXhwZXJ0KCRkYi0+bG9hZEFzc29jKCksICRtZXRob2QsICRhY2Nlc3MsICRmLCAkYik7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIHJldHVybiB0aGUgdmFsdWVzDQoJCWlmICghaXNzZXQoc2VsZjo6JGV4cGVydFskaWQuJG1ldGhvZC4kYWNjZXNzXSkpDQoJCXsNCgkJCXNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10gPSBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGV4cGVydFskaWQuJG1ldGhvZC4kYWNjZXNzXTsNCgl9DQoNCgkvKioNCgkqIFJldHVybiBhcnJheSBvZiBzZWxlY3Rpb25zDQoJKiANCgkqIEByZXR1cm4gICAgYXJyYXkgaWYgdHlwZSBtYXRjaA0KCSovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oJHR5cGUsICRmLCAkYikNCgl7DQoJCWlmICgnZXhwZXJ0JyA9PSAkdHlwZSkNCgkJew0KCQkJcmV0dXJuIGFycmF5KA0KCQkJCSdnLm5hbWUnID0+ICRmLiduYW1lJy4kYiwJDQoJCQkJJ2cuZW1haWwnID0+ICRmLidlbWFpbCcuJGIsDQoJCQkJJ2gubmFtZScgPT4gJGYuJ2NvdW50cnlyZXNpZGVuY2UnLiRiLA0KCQkJCSdpLm5hbWUnID0+ICRmLidhcmVhX29mX2V4cGVydGlzZScuJGIsDQoJCQkJJ2EuY2l0eScgPT4gJGYuJ2NpdHknLiRiLA0KCQkJCSdhLnBob25lJyA9PiAkZi4ncGhvbmUnLiRiLA0KCQkJCSdhLnN1bW1hcnknID0+ICRmLidzdW1tYXJ5Jy4kYiwNCgkJCQknYS5hZGRyZXNzJyA9PiAkZi4nYWRkcmVzcycuJGIsDQoJCQkJJ2EuY3ZrZXknID0+ICRmLidjdmxpbmsnLiRiLA0KCQkJCSdwLm5hbWUnID0+ICRmLidwcmVmaXgnLiRiLA0KCQkJCSdhLm1lbWJlcnNoaXAnID0+ICRmLidtZW1iZXJzaGlwJy4kYiwNCgkJCQkndC5uYW1lJyA9PiAkZi4ndGl0bGUnLiRiLA0KCQkJCSdhLnByb2Zlc3Npb24nID0+ICRmLidwcm9mZXNzaW9uJy4kYiwNCgkJCQknYS5leHBlcmllbmNlJyA9PiAkZi4nZXhwZXJpZW5jZScuJGIsDQoJCQkJJ2EubW9iaWxlX3Bob25lJyA9PiAkZi4nbW9iaWxlX3Bob25lJy4kYiwNCgkJCQknai5uYW1lJyA9PiAkZi4nbmF0aW9uYWxpdHknLiRiLA0KCQkJCSdhLm9yZ2FuaXNhdGlvbicgPT4gJGYuJ29yZ2FuaXNhdGlvbicuJGIsDQoJCQkJJ2submFtZScgPT4gJGYuJ2FjYWRlbWljX3F1YWxpZmljYXRpb24nLiRiLA0KCQkJCSdhLnNwZWNpYWxpc2F0aW9uJyA9PiAkZi4nc3BlY2lhbGlzYXRpb24nLiRiLA0KCQkJCSdhLndvcmtlZF9mb3InID0+ICRmLid3b3JrZWRfZm9yJy4kYiwNCgkJCQknYS53ZWJzaXRlJyA9PiAkZi4nd2Vic2l0ZScuJGIsDQoJCQkJJ2EuZ2VvZ3JhcGhpY19mb2N1cycgPT4gJGYuJ2dlb2dyYXBoaWNfZm9jdXMnLiRiLA0KCQkJCSdhLnByb2Zlc3Npb25hbF9uZXR3b3JrcycgPT4gJGYuJ3Byb2Zlc3Npb25hbF9uZXR3b3JrcycuJGIsDQoJCQkJJ2EucHJpdmFjeV9hY2FkZW1pY19xdWFsaWZpY2F0aW9uJyA9PiAkZi4ncHJpdmFjeV9hY2FkZW1pY19xdWFsaWZpY2F0aW9uJy4kYiwNCgkJCQknYS5wcml2YWN5X2FkZHJlc3MnID0+ICRmLidwcml2YWN5X2FkZHJlc3MnLiRiLA0KCQkJCSdhLnByaXZhY3lfY2l0eScgPT4gJGYuJ3ByaXZhY3lfY2l0eScuJGIsDQoJCQkJJ2EucHJpdmFjeV9jb3VudHJ5cmVzaWRlbmNlJyA9PiAkZi4ncHJpdmFjeV9jb3VudHJ5cmVzaWRlbmNlJy4kYiwNCgkJCQknYS5wcml2YWN5X2N2JyA9PiAkZi4ncHJpdmFjeV9jdmxpbmsnLiRiLA0KCQkJCSdhLnByaXZhY3lfbWVtYmVyc2hpcCcgPT4gJGYuJ3ByaXZhY3lfbWVtYmVyc2hpcCcuJGIsDQoJCQkJJ2EucHJpdmFjeV9tb2JpbGVfcGhvbmUnID0+ICRmLidwcml2YWN5X21vYmlsZV9waG9uZScuJGIsDQoJCQkJJ2EucHJpdmFjeV9uYXRpb25hbGl0eScgPT4gJGYuJ3ByaXZhY3lfbmF0aW9uYWxpdHknLiRiLA0KCQkJCSdhLnByaXZhY3lfb3JnYW5pc2F0aW9uJyA9PiAkZi4ncHJpdmFjeV9vcmdhbmlzYXRpb24nLiRiLA0KCQkJCSdhLnByaXZhY3lfcGhvbmUnID0+ICRmLidwcml2YWN5X3Bob25lJy4kYiwNCgkJCQknYS5wcml2YWN5X3Byb2Zlc3Npb24nID0+ICRmLidwcml2YWN5X3Byb2Zlc3Npb24nLiRiLA0KCQkJCSdhLnByaXZhY3lfcHJvZmVzc2lvbmFsX25ldHdvcmtzJyA9PiAkZi4ncHJpdmFjeV9wcm9mZXNzaW9uYWxfbmV0d29ya3MnLiRiLA0KCQkJCSdhLnByaXZhY3lfd29ya2VkX2ZvcicgPT4gJGYuJ3ByaXZhY3lfd29ya2VkX2ZvcicuJGINCgkJCSk7DQoJCX0NCgkJaWYgKCdyZWZlcnJhbCcgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknYS5pZCcgPT4gJGYuJ2lkJy4kYiwNCgkJCQknYS5leHBlcnQnID0+ICRmLidleHBlcnRfaWQnLiRiLA0KCQkJCSdhLm5hbWUnID0+ICRmLiduYW1lJy4kYiwNCgkJCQknYS5vcmdhbmlzYXRpb24nID0+ICRmLidvcmdhbmlzYXRpb24nLiRiLA0KCQkJCSdhLnBvc2l0aW9uJyA9PiAkZi4ncG9zaXRpb24nLiRiLA0KCQkJCSdiLm5hbWUnID0+ICRmLidjb3VudHJ5Jy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYg0KCQkJKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBUaGUgbW9kZWxsaW5nIG9mIEV4cGVydCBkYXRhDQoJKiANCgkqIEByZXR1cm4gICAgb2JqZWN0IG9mIGFsbG93ZWQgdmFsdWVzDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIG1vZGVsRXhwZXJ0KCRpdGVtLCAmJG1ldGhvZCwgJiRhY2Nlc3MsICYkZiwgJiRiKQ0KCXsNCgkJLy8gZmlsZXIgYWxsIHByaXZhY3kgaW5mbyB0aGF0IHRoZXkgdXNlciBkb2VzIG5vdCB3YW50IHB1YmxpYw0KCQlpZiAoJ3B1YmxpYycgPT0gJGFjY2VzcykNCgkJew0KCQkJZm9yZWFjaCAoJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJaWYgKHN0cnBvcygka2V5LCAkZi4ncHJpdmFjeV8nKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQlpZiAoJHZhbHVlID09IDApDQoJCQkJCXsNCgkJCQkJCS8vIHJlbW92ZSBmcm9tIGRhdGEgaXQgaXMgbm90IHB1YmxpYw0KCQkJCQkJJHZhbHVlS2V5ID0gc3RyX3JlcGxhY2UoJ3ByaXZhY3lfJywgJycsICRrZXkpOw0KCQkJCQkJaWYgKCdvYmplY3QnID09ICRtZXRob2QpDQoJCQkJCQl7DQoJCQkJCQkJdW5zZXQoJGl0ZW0tPiR2YWx1ZUtleSk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJdW5zZXQoJGl0ZW1bJHZhbHVlS2V5XSk7DQoJCQkJCQl9DQoJCQkJCQkvLyBhbHNvIHJlbW92ZSB0aGUgcHJpdmFjeSB2YWx1ZXMNCgkJCQkJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kKQ0KCQkJCQkJew0KCQkJCQkJCXVuc2V0KCRpdGVtLT4ka2V5KTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQl1bnNldCgkaXRlbVska2V5XSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9CQ0KCQkJfQ0KCQl9DQoJCS8vIEdldCB0aGUgYmFzaWMgZW5jcmlwdGlvbi4NCgkJJGJhc2lja2V5ID0gc2VsZjo6Z2V0Q3J5cHRLZXkoJ2Jhc2ljJyk7DQoJCS8vIEdldCB0aGUgZW5jcmlwdGlvbiBvYmplY3QuDQoJCSRiYXNpYyA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRiYXNpY2tleSwgMTI4KTsNCgkJLy8gbm90IGZvdW5kLCByZW1vdmUNCgkJJHJlbW92ZUxpbmsgPSB0cnVlOw0KCQkvLyBzdGFydCBpbXBsZW1lbnRhdGlvbiB0byBidWlsZCBDViBsaW5rDQoJCWlmICgkYmFzaWNrZXkgJiYgJ29iamVjdCcgPT0gJG1ldGhvZCAmJiBpc3NldCgkaXRlbS0+eyRmLidjdmxpbmsnLiRifSkpDQoJCXsNCgkJCWlmICghZW1wdHkoJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0pICYmICFpc19udW1lcmljKCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9KSAmJiAkaXRlbS0+eyRmLidjdmxpbmsnLiRifSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9LCB0cnVlKSkpDQoJCQl7DQoJCQkJJGtleSA9IHJ0cmltKCRiYXNpYy0+ZGVjcnlwdFN0cmluZygkaXRlbS0+eyRmLidjdmxpbmsnLiRifSksICJcMCIpOw0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygka2V5KSAmJiAhaXNfbnVtZXJpYygka2V5KSkNCgkJCQl7DQoJCQkJCSRrZXlBcnJheSA9IGV4cGxvZGUoJy4nLCAka2V5KTsNCgkJCQkJJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0gPSBVcmk6OnJvb3QoKS4naW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9ZG93bmxvYWQucGRmJnRva2VuPScuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLicmZmlsZT0nIC4gJGtleUFycmF5WzBdIC4gJy5wZGYnOw0KCQkJCQkkcmVtb3ZlTGluayA9IGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRiYXNpY2tleSAmJiBpc3NldCgkaXRlbVskZi4nY3ZsaW5rJy4kYl0pKQ0KCQl7DQoJCQlpZiAoIWVtcHR5KCRpdGVtWyRmLidjdmxpbmsnLiRiXSkgJiYgIWlzX251bWVyaWMoJGl0ZW1bJGYuJ2N2bGluaycuJGJdKSAmJiAkaXRlbVskZi4nY3ZsaW5rJy4kYl0gPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaXRlbVskZi4nY3ZsaW5rJy4kYl0sIHRydWUpKSkNCgkJCXsNCgkJCQkka2V5ID0gcnRyaW0oJGJhc2ljLT5kZWNyeXB0U3RyaW5nKCRpdGVtWyRmLidjdmxpbmsnLiRiXSksICJcMCIpOw0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygka2V5KSAmJiAhaXNfbnVtZXJpYygka2V5KSkNCgkJCQl7DQoJCQkJCSRrZXlBcnJheSA9IGV4cGxvZGUoJy4nLCAka2V5KTsNCgkJCQkJJGl0ZW1bJGYuJ2N2bGluaycuJGJdID0gVXJpOjpyb290KCkuJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLnBkZiZ0b2tlbj0nLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4nJmZpbGU9JyAuICRrZXlBcnJheVswXSAuICcucGRmJzsNCgkJCQkJJHJlbW92ZUxpbmsgPSBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYgKCRyZW1vdmVMaW5rKQ0KCQl7DQoJCQlpZiAoaXNzZXQoJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0pKQ0KCQkJew0KCQkJCXVuc2V0KCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9KTsNCgkJCX0NCgkJCWVsc2VpZiAoaXNzZXQoJGl0ZW1bJGYuJ2N2bGluaycuJGJdKSkNCgkJCXsNCgkJCQl1bnNldCgkaXRlbVskZi4nY3ZsaW5rJy4kYl0pOw0KCQkJfQ0KCQl9DQoJCS8vIGJ1aWxkIHRoZSBuYW1lDQoJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kICYmIGlzc2V0KCRpdGVtLT57JGYuJ25hbWUnLiRifSkpDQoJCXsNCgkJCSR0aXRsZSA9IChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtLT57JGYuJ3RpdGxlJy4kYn0pKSA/ICRpdGVtLT57JGYuJ3RpdGxlJy4kYn0uJy4gJyA6ICgoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbS0+eyRmLidwcmVmaXgnLiRifSkpID8gJGl0ZW0tPnskZi4ncHJlZml4Jy4kYn0uJy4gJzogJycpOw0KCQkJJGl0ZW0tPnskZi4nbmFtZScuJGJ9ID0gJHRpdGxlLiRpdGVtLT57JGYuJ25hbWUnLiRifTsNCgkJCS8vIGFsc28gcmVtb3ZlIHRpdGxlIGFuZCBwcmVmaXgNCgkJCXVuc2V0KCRpdGVtLT57JGYuJ3ByZWZpeCcuJGJ9KTsNCgkJCXVuc2V0KCRpdGVtLT57JGYuJ3RpdGxlJy4kYn0pOw0KCQl9DQoJCWlmICgncGxhY2Vob2xkZXInID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW1bJGYuJ25hbWUnLiRiXSkpDQoJCXsNCgkJCSR0aXRsZSA9IChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtWyRmLid0aXRsZScuJGJdKSkgPyAkaXRlbVskZi4ndGl0bGUnLiRiXS4nLiAnIDogKChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtWyRmLidwcmVmaXgnLiRiXSkpID8gJGl0ZW1bJGYuJ3ByZWZpeCcuJGJdLicuICc6ICcnKTsNCgkJCSRpdGVtWyRmLiduYW1lJy4kYl0gPSAkdGl0bGUuJGl0ZW1bJGYuJ25hbWUnLiRiXTsNCgkJCS8vIGFsc28gcmVtb3ZlIHRpdGxlIGFuZCBwcmVmaXgNCgkJCXVuc2V0KCRpdGVtWyRmLidwcmVmaXgnLiRiXSk7DQoJCQl1bnNldCgkaXRlbVskZi4ndGl0bGUnLiRiXSk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIGV4cGVyaWVuY2UNCgkJaWYgKCdvYmplY3QnID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW0tPnskZi4nZXhwZXJpZW5jZScuJGJ9KSkNCgkJew0KCQkJJHllYXJzID0gKCRpdGVtLT57JGYuJ2V4cGVyaWVuY2UnLiRifSA9PSAxKSA/IFRleHQ6Ol8oJ1llYXInKTogVGV4dDo6XygnWWVhcnMnKTsNCgkJCSRpdGVtLT57JGYuJ2V4cGVyaWVuY2UnLiRifSA9ICRpdGVtLT57JGYuJ2V4cGVyaWVuY2UnLiRifS4nICcuJHllYXJzOw0KCQl9DQoJCWlmICgncGxhY2Vob2xkZXInID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW1bJGYuJ2V4cGVyaWVuY2UnLiRiXSkpDQoJCXsNCgkJCSR5ZWFycyA9ICgkaXRlbVskZi4nZXhwZXJpZW5jZScuJGJdID09IDEpID8gVGV4dDo6XygnWWVhcicpOiBUZXh0OjpfKCdZZWFycycpOw0KCQkJJGl0ZW1bJGYuJ2V4cGVyaWVuY2UnLiRiXSA9ICRpdGVtWyRmLidleHBlcmllbmNlJy4kYl0uJyAnLiR5ZWFyczsNCgkJfQ0KCQkvLyBzZXQgc3BlY2lhbGlzYXRpb24gYW5kIGdlb2dyYXBoaWNfZm9jdXMgdG8gc3RyaW5nDQoJCSR0YWJsZXMgPSBhcnJheSgnc3BlY2lhbGlzYXRpb24nLCdnZW9ncmFwaGljX2ZvY3VzJyk7DQoJCWZvcmVhY2ggKCR0YWJsZXMgYXMgJHRhYmxlKQ0KCQl7DQoJCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCAmJiBpc3NldCgkaXRlbS0+eyRmLiR0YWJsZS4kYn0pKQ0KCQkJew0KCQkJCSRzdHVmZiA9IGpzb25fZGVjb2RlKCRpdGVtLT57JGYuJHRhYmxlLiRifSx0cnVlKTsNCgkJCQkkbGluZSA9IGFycmF5KCk7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzdHVmZikpDQoJCQkJew0KCQkJCQkkbmFhbSA9ICcnOw0KCQkJCQlmb3JlYWNoICgkc3R1ZmYgYXMgJHZhbCkNCgkJCQkJew0KCQkJCQkJaWYgKCRuYWFtID0gc2VsZjo6Z2V0VmFyKCR0YWJsZSwgJHZhbCwgJ2lkJywgJ25hbWUnKSkNCgkJCQkJCXsNCgkJCQkJCQkkbGluZVtdID0gJG5hYW07DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKGlzc2V0KCRsaW5lKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGluZSkpDQoJCQkJew0KCQkJCQkkaXRlbS0+eyRmLiR0YWJsZS4kYn0gPSBpbXBsb2RlKCcsICcsICRsaW5lKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5zZXQoJGl0ZW0tPnskZi4kdGFibGUuJGJ9KTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKGlzc2V0KCRpdGVtWyRmLiR0YWJsZS4kYl0pKQ0KCQkJew0KCQkJCSRzdHVmZiA9IGpzb25fZGVjb2RlKCRpdGVtWyRmLiR0YWJsZS4kYl0sdHJ1ZSk7DQoJCQkJJGxpbmUgPSBhcnJheSgpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc3R1ZmYpKQ0KCQkJCXsNCgkJCQkJJG5hYW0gPSAnJzsNCgkJCQkJZm9yZWFjaCAoJHN0dWZmIGFzICR2YWwpDQoJCQkJCXsNCgkJCQkJCWlmICgkbmFhbSA9IHNlbGY6OmdldFZhcigkdGFibGUsICR2YWwsICdpZCcsICduYW1lJykpDQoJCQkJCQl7DQoJCQkJCQkJJGxpbmVbXSA9ICRuYWFtOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChpc3NldCgkbGluZSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGxpbmUpKQ0KCQkJCXsNCgkJCQkJJGl0ZW1bJGYuJHRhYmxlLiRiXSA9IGltcGxvZGUoJywgJywgJGxpbmUpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQl1bnNldCgkaXRlbVskZi4kdGFibGUuJGJdKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmVtb3ZlIDAgYW5kIHJlcGxhY2Ugd2l0aCBlbXB0eSBzdHJpbmcNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJew0KCQkJZm9yZWFjaCAoJGl0ZW0gYXMgJGtleSA9PiAmJHZhbHVlKQ0KCQkJew0KCQkJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHZhbHVlKSkNCgkJCQl7DQoJCQkJCSR2YWx1ZSA9ICcnOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGl0ZW07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkY29tcGFueURldGFpbHMgPSBhcnJheSgpOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29tcGFueURldGFpbHMoJG1ldGhvZCA9ICdhcnJheScpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXSkpDQoJCXsNCgkJCSRmID0gJyc7DQoJCQkkYiA9ICcnOw0KCQkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJCXsNCgkJCQkkZiA9ICdbJzsNCgkJCQkkYiA9ICddJzsNCgkJCX0NCgkJCSRhcHBQYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF0gPSBhcnJheSgpOw0KCQkJc2VsZjo6JGNvbXBhbnlEZXRhaWxzWyRtZXRob2RdWyRmLidjb21wYW55X25hbWUnLiRiXSA9ICRhcHBQYXJhbXMtPmdldCgnY29tcGFueW5hbWUnLCAnJyk7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfbG9nbycuJGJdID0gJzxpbWcgYWx0PSInLnNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9uYW1lJy4kYl0uJyIgc3JjPSInLlVyaTo6cm9vdCgpLiRhcHBQYXJhbXMtPmdldCgnY29tcGFueWxvZ28nLCAnJykuJyI+JzsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9lbWFpbCcuJGJdID0gJGFwcFBhcmFtcy0+Z2V0KCdlbWFpbCcsICcnKTsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9waG9uZScuJGJdID0gJGFwcFBhcmFtcy0+Z2V0KCdwaG9uZScsICcnKTsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9tb2JpbGUnLiRiXSA9ICRhcHBQYXJhbXMtPmdldCgnbW9iaWxlX3Bob25lJywgJycpOw0KCQkJc2VsZjo6JGNvbXBhbnlEZXRhaWxzWyRtZXRob2RdWyRmLidjb21wYW55X3N0cmVldCcuJGJdID0gJGFwcFBhcmFtcy0+Z2V0KCdzdHJlZXQnLCAnJyk7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfcG9zdGFsJy4kYl0gPSAkYXBwUGFyYW1zLT5nZXQoJ3Bvc3RhbCcsICcnKTsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9wb3N0YWxjb2RlJy4kYl0gPSAkYXBwUGFyYW1zLT5nZXQoJ3Bvc3RhbGNvZGUnLCAnJyk7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfY2l0eScuJGJdID0gJGFwcFBhcmFtcy0+Z2V0KCdjaXR5JywgJycpOw0KCQkJc2VsZjo6JGNvbXBhbnlEZXRhaWxzWyRtZXRob2RdWyRmLidjb21wYW55X3dlYnNpdGUnLiRiXSA9ICRhcHBQYXJhbXMtPmdldCgnd2Vic2l0ZScsICcnKTsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9yZWdpb24nLiRiXSA9ICRhcHBQYXJhbXMtPmdldCgncmVnaW9uJywgJycpOw0KCQkJLy8gc2V0IHRoZSBjb3VudHJ5DQoJCQkkY291bnRyeSA9ICRhcHBQYXJhbXMtPmdldCgnY291bnRyeScpOw0KCQkJaWYgKCRjb3VudHJ5ICYmICRjb3VudHJ5ID4gMCkNCgkJCXsNCgkJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfY291bnRyeV9uYW1lJy4kYl0gPSBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ25hbWUnKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfY291bnRyeV9uYW1lJy4kYl0gPSAnJzsNCgkJCX0NCgkJCS8vIGlmIG9iamVjdCBpcyBjYWxsZWQgZm9yDQoJCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCkNCgkJCXsNCgkJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF0gPSAob2JqZWN0KSBzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF07DQoJCQl9DQoJCX0NCgkJLy8gcmV0dXJuIHRoZSB2YWx1ZXMNCgkJaWYgKCFpc3NldChzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF0pKQ0KCQl7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF0gPSBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGNvbXBhbnlEZXRhaWxzWyRtZXRob2RdOw0KCX0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQogW0NVU1RPTUNPREU9dXNlcklzVGhyZWUrYWRtaW51c2VyLG9yZ2FuaXNhdGlvbnVzZXIsZXhwZXJ0dXNlcixvcmdhbmlzYXRpb24sZXhwZXJ0XQ0KCS8qKg0KCSogCVRoZSBvd25lcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG93bmVyID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzQWNjZXNzKCRyZWNvcmRJZCwgJHVzZXJJZCA9IG51bGwsICR0byA9ICdleHBlcnQnKQ0KCXsNCgkJaWYoISR1c2VySWQpDQoJCXsNCgkJCSR1c2VySWQgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQl9DQoJCSR0eXBlID0gc2VsZjo6dXNlcklzKCR1c2VySWQpOw0KCQlpZiAoJHR5cGUgJiYgJHJlY29yZElkID4gMCkNCgkJew0KCQkJc3dpdGNoKCR0bykNCgkJCXsNCgkJCQljYXNlICdleHBlcnQnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzRXhwZXJ0KCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ29yZ2FuaXNhdGlvbic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NPcmdhbmlzYXRpb24oJHR5cGUsICRyZWNvcmRJZCwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzT3JnYW5pc2F0aW9uKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXNhdGlvbiBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnb3JnYW5pc2F0aW9uJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnb3JnYW5pc2F0aW9uJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdvcmdhbmlzYXRpb24nLCAkcmVjb3JkSWQsICdpZCcsICd1c2VyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnb3JnYW5pc2F0aW9uJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzRXhwZXJ0KCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDE6IC8vIGNoZWNrIGlmIGV4cGVydCBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXhwZXJ0Jy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnZXhwZXJ0Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdleHBlcnQnLCAkcmVjb3JkSWQsICdpZCcsICd1c2VyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnZXhwZXJ0Jy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogY2hlY2sgY29uZmlybWF0aW9uDQoJKg0KCSogQGlucHV0CSAgaW50ICAgICAgICAgICAgICAgICAgICAgICAkaWQgICAgIFRoZSBkYXRhIGlkDQoJKiBAaW5wdXQJICBhcnJheSAgICAgICAgICAgICAgICAgICAkZGF0YSAgICAgVGhlIHZhbGlkIGRhdGENCgkqDQoJKiBAcmV0dXJucyAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0NvbmZpcm1hdGlvbigkaWQsICYkZGF0YSkNCgl7DQoJCSR1cGRhdGVEYXRhID0gYXJyYXkoKTsNCgkJLy8gbG9hZCB0aGUgcmVmZXJlbmNlIGRhdGEgaWYgc2V0DQoJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZGF0YVsncmVmZXJlbmNlJ10pKQ0KCQl7DQoJCQkkcmVmZXJlbmNlID0ganNvbl9kZWNvZGUoJGRhdGFbJ3JlZmVyZW5jZSddLHRydWUpOw0KCQl9DQoJCS8vIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNvbmZpcm1hdGlvbiBkYXRhIHNldA0KCQlpZiAoJGNvbmZpcm1hdGlvbiA9IHNlbGY6OmdldENvbmZpcm1hdGlvbigkaWQpKQ0KCQl7DQoJCQkvLyB0aGVyZSBpcyBhbnkgcmVmZXJlbmNlIGRhdGEgc2V0DQoJCQlpZiAoaXNzZXQoJHJlZmVyZW5jZSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnZW1haWwnXSkpDQoJCQl7DQoJCQkJLy8gd2UgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBkYXRhIGlmIHRoZSBlbWFpbCBjaGFuZ2VkDQoJCQkJaWYgKAkkcmVmZXJlbmNlWydlbWFpbCddWzBdICE9PSAkY29uZmlybWF0aW9uWydlbWFpbCddIHx8DQoJCQkJCSRyZWZlcmVuY2VbJ29yZ2FuaXNhdGlvbl9yZWYnXVswXSAhPT0gJGNvbmZpcm1hdGlvblsnb3JnYW5pc2F0aW9uJ10gfHwNCgkJCQkJJHJlZmVyZW5jZVsnbmFtZSddWzBdICE9PSAkY29uZmlybWF0aW9uWyduYW1lJ10gfHwNCgkJCQkJJHJlZmVyZW5jZVsncGhvbmUnXVswXSAhPT0gJGNvbmZpcm1hdGlvblsncGhvbmUnXSB8fA0KCQkJCQkkcmVmZXJlbmNlWyJjb3VudHJ5Il1bMF0gIT09ICRjb25maXJtYXRpb25bJ2NvdW50cnknXSAgfHwNCgkJCQkJJHJlZmVyZW5jZVsicG9zaXRpb24iXVswXSAhPT0gJGNvbmZpcm1hdGlvblsncG9zaXRpb24nXQ0KCQkJCQkpDQoJCQkJew0KCQkJCQlpZiAoKGlzc2V0KCRjb25maXJtYXRpb25bJ2NvbmZpcm1lZCddKSAmJiAkY29uZmlybWF0aW9uWydjb25maXJtZWQnXSA9PSAxKSB8fCAoIXNlbGY6OnVwZGF0ZUNvbmZpcm1hdGlvbigkaWQsICRyZWZlcmVuY2UsICRkYXRhKSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCB0aGUgcmVmZXJlbmNlIGRhdGEgYmFjayBlbiBsb2FkIGVycm9yDQoJCQkJCQkkcmVmZXJlbmNlWyJvcmdhbmlzYXRpb25fcmVmIl1bMF0gPSAkY29uZmlybWF0aW9uWydvcmdhbmlzYXRpb24nXTsNCgkJCQkJCSRyZWZlcmVuY2VbIm5hbWUiXVswXSA9ICRjb25maXJtYXRpb25bJ25hbWUnXTsNCgkJCQkJCSRyZWZlcmVuY2VbImVtYWlsIl1bMF0gPSAkY29uZmlybWF0aW9uWydlbWFpbCddOw0KCQkJCQkJJHJlZmVyZW5jZVsicGhvbmUiXVswXSA9ICRjb25maXJtYXRpb25bJ3Bob25lJ107DQoJCQkJCQkkcmVmZXJlbmNlWyJwb3NpdGlvbiJdWzBdID0gJGNvbmZpcm1hdGlvblsncG9zaXRpb24nXTsNCgkJCQkJCSRyZWZlcmVuY2VbImNvdW50cnkiXVswXSA9ICRjb25maXJtYXRpb25bJ2NvdW50cnknXTsNCgkJCQkJCS8vIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIGRhdGENCgkJCQkJCXNlbGY6OnVwZGF0ZVJlZmVyZW5jZURhdGEoJGlkLCBqc29uX2VuY29kZSgkcmVmZXJlbmNlKSk7DQoJCQkJCQkvLyBzZXQgdGhlIHdhcm5pbmcgbm90aWNlIHNpbmNlIG5vdCByZWZlcnJhbCB3YXMgc2V0DQoJCQkJCQlpZiAoaXNzZXQoJGNvbmZpcm1hdGlvblsnY29uZmlybWVkJ10pICYmICRjb25maXJtYXRpb25bJ2NvbmZpcm1lZCddID09IDEpDQoJCQkJCQl7DQoJCQkJCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgY2Fubm90IGRlbGV0ZSBvciBjaGFuZ2UgdGhpcyBmaXJzdCByZWZlcmVuY2UgcGVyc29uIGRldGFpbHMgYWZ0ZXIgdGhpcyBwZXJzb24gaGFzIHZlcmlmaWVkIHlvdXIgaW5mb3JtYXRpb24sIHVubGVzcyB5b3UgY29udGFjdCBzdXBwb3J0IHdpdGggdGhlIHJlYXNvbnMgZm9yIGRvaW5nIHNvLicpOw0KCQkJCQkJfQ0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJLy8gc2V0IHRoZSByZWZlcmVuY2UgZGF0YSBiYWNrIGVuIGxvYWQgZXJyb3INCgkJCSR1cGRhdGVEYXRhWyJvcmdhbmlzYXRpb25fcmVmIl1bXSA9ICRjb25maXJtYXRpb25bJ29yZ2FuaXNhdGlvbiddOw0KCQkJJHVwZGF0ZURhdGFbIm5hbWUiXVtdID0gJGNvbmZpcm1hdGlvblsnbmFtZSddOw0KCQkJJHVwZGF0ZURhdGFbImVtYWlsIl1bXSA9ICRjb25maXJtYXRpb25bJ2VtYWlsJ107DQoJCQkkdXBkYXRlRGF0YVsicGhvbmUiXVtdID0gJGNvbmZpcm1hdGlvblsncGhvbmUnXTsNCgkJCSR1cGRhdGVEYXRhWyJwb3NpdGlvbiJdW10gPSAkY29uZmlybWF0aW9uWydwb3NpdGlvbiddOw0KCQkJJHVwZGF0ZURhdGFbImNvdW50cnkiXVtdID0gJGNvbmZpcm1hdGlvblsnY291bnRyeSddOw0KCQkJLy8gdXBkYXRlIHRoZSByZWZlcmVuY2UgZGF0YQ0KCQkJc2VsZjo6dXBkYXRlUmVmZXJlbmNlRGF0YSgkaWQsIGpzb25fZW5jb2RlKCR1cGRhdGVEYXRhKSk7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdSBjYW5ub3QgZGVsZXRlIG9yIGNoYW5nZSB0aGlzIGZpcnN0IHJlZmVyZW5jZSBwZXJzb24gZGV0YWlscyBhZnRlciB0aGlzIHBlcnNvbiBoYXMgdmVyaWZpZWQgeW91ciBpbmZvcm1hdGlvbiwgdW5sZXNzIHlvdSBjb250YWN0IHN1cHBvcnQgd2l0aCB0aGUgcmVhc29ucyBmb3IgZG9pbmcgc28uJyk7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJLy8gdGhlcmUgaXMgYW55IHJlZmVyZW5jZSBkYXRhIHNldA0KCQlpZiAoaXNzZXQoJHJlZmVyZW5jZSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnZW1haWwnXSkpDQoJCXsNCgkJCWlmIChzZWxmOjpzZXRDb25maXJtYXRpb24oJGlkLCAkcmVmZXJlbmNlLCAkZGF0YSkpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJLy8gc2V0IHRoZSB3YXJuaW5nIG5vdGljZSBzaW5jZSBub3QgcmVmZXJyYWwgd2FzIHNldA0KCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdXIgYWNjb3VudCB3aWxsIG5vdCBiZSBhY3RpdmF0ZWQuIEl0IGlzIG1hbmRhdG9yeSB0byBhZGQgYXQgbGVhc3Qgb25lIHJlZmVyZW5jZSBwZXJzb24gaW4gb3JkZXIgdG8gdmVyaWZ5IHRoZSBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZWQuJyk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIHVwZGF0ZSBSZWZlcmVuY2UgRGF0YQ0KCSoNCgkqIEBpbnB1dAkgIGludCAgICAgICAgJGlkICAgICBUaGUgZXhwZXJ0IGlkDQoJKiBAaW5wdXQJICBzdHJpbmcgICAgICAgICRyZWZlcmVuY2UgICAgIFRoZSByZWZlcmVuY2UganNvbg0KCSoNCgkqIEByZXR1cm5zICBib29sIG9uIHN1Y2Nlc3MNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZVJlZmVyZW5jZURhdGEoJGlkLCAkdmFsdWUsICR0YXJnZXQgPSAicmVmZXJlbmNlIikNCgl7CQkNCgkJLy8gQ3JlYXRlIGFuIG9iamVjdCBmb3IgdGhlIHJlY29yZCB3ZSBhcmUgZ29pbmcgdG8gdXBkYXRlLg0KCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KIA0KCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCSRvYmplY3QtPmlkID0gJGlkOw0KCQkkb2JqZWN0LT4kdGFyZ2V0ID0gJHZhbHVlOw0KIA0KCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgZXhwZXJ0IHRhYmxlIHVzaW5nIGlkIGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJcmV0dXJuIEZhY3Rvcnk6OmdldERibygpLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9leHBlcnQnLCAkb2JqZWN0LCAnaWQnKTsNCgl9DQoNCgkvKioNCgkqIGdldCBjb25maXJtYXRpb24NCgkqDQoJKiBAaW5wdXQJICBpbnQgICAgICAgICRpZCAgICAgVGhlIGV4cGVydCBpZA0KCSoNCgkqIEByZXR1cm5zICBvYmplY3QgaWYgZm91bmQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbmZpcm1hdGlvbigkaWQpDQoJewkJDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoJCSRxdWVyeS0+ZnJvbSgnI19fW1tbY29tcG9uZW50XV1dX2NvbmZpcm1hdGlvbiBBUyBhJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EuZXhwZXJ0ID0gJy4gKGludCkgJGlkKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRBc3NvYygpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIHVwZGF0ZSBjb25maXJtYXRpb24NCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZUNvbmZpcm1hdGlvbigkaWQsICRyZWZlcmVuY2UsICYkZGF0YSkNCgl7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBkYXRhIGFuZCB0aGF0IGl0IGlzIGNvcnJlY3QNCgkJJG1haWwgPSBGYWN0b3J5OjpnZXRNYWlsZXIoKTsNCgkJJHVwZGF0ZSA9IHRydWU7DQoJCWlmICghJG1haWwtPlZhbGlkYXRlQWRkcmVzcygkcmVmZXJlbmNlWydlbWFpbCddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSAkcmVmZXJlbmNlWydlbWFpbCddWzBdIC4gJyAnIC4gVGV4dDo6XygnaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcy4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ25hbWUnXVswXSkpDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IG5lZWQgdG8gYWRkIHJlZmVyZW5jZSBuYW1lLiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHVwZGF0ZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnb3JnYW5pc2F0aW9uX3JlZiddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIG9yZ2FuaXNhdGlvbiBuYW1lLiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHVwZGF0ZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghaXNzZXQoJHJlZmVyZW5jZVsnY291bnRyeSddWzBdKSB8fCAkcmVmZXJlbmNlWydjb3VudHJ5J11bMF0gPD0gMCkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIGNvdW50cnkuIDxiPihSZWZlcmVuY2VzIEVSUk9SISk8L2I+Jyk7DQoJCQkkdXBkYXRlID0gZmFsc2U7DQoJCX0NCgkJaWYgKCR1cGRhdGUpDQoJCXsNCgkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkkb2JqZWN0LT5leHBlcnQgPSAkaWQ7DQoJCQkkb2JqZWN0LT5vcmdhbmlzYXRpb24gPSAkcmVmZXJlbmNlWydvcmdhbmlzYXRpb25fcmVmJ11bMF07DQoJCQkkb2JqZWN0LT5uYW1lID0gJHJlZmVyZW5jZVsnbmFtZSddWzBdOw0KCQkJJG9iamVjdC0+ZW1haWwgPSAkcmVmZXJlbmNlWydlbWFpbCddWzBdOw0KCQkJJG9iamVjdC0+cGhvbmUgPSAkcmVmZXJlbmNlWydwaG9uZSddWzBdOw0KCQkJJG9iamVjdC0+cG9zaXRpb24gPSAkcmVmZXJlbmNlWydwb3NpdGlvbiddWzBdOw0KCQkJJG9iamVjdC0+Y291bnRyeSA9IChpbnQpICRyZWZlcmVuY2VbJ2NvdW50cnknXVswXTsNCgkJCSRvYmplY3QtPmVtYWlsc2VuZCA9IDI7DQoNCgkJCS8vIFVwZGF0ZSB0aGVpciBkZXRhaWxzIGluIHRoZSBleHBlcnQgdGFibGUgdXNpbmcgZXhwZXJ0IGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJCXJldHVybiBGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJywgJG9iamVjdCwgJ2V4cGVydCcpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIHNldCBjb25maXJtYXRpb24NCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldENvbmZpcm1hdGlvbigkaWQsICRyZWZlcmVuY2UsICYkZGF0YSkNCgl7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBkYXRhIGFuZCB0aGF0IGl0IGlzIGNvcnJlY3QNCgkJJG1haWwgPSBGYWN0b3J5OjpnZXRNYWlsZXIoKTsNCgkJJHN0b3JlID0gdHJ1ZTsNCgkJaWYgKCEkbWFpbC0+VmFsaWRhdGVBZGRyZXNzKCRyZWZlcmVuY2VbJ2VtYWlsJ11bMF0pKQ0KCQl7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9ICRyZWZlcmVuY2VbJ2VtYWlsJ11bMF0gLiAnICcgLiBUZXh0OjpfKCdpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHN0b3JlID0gZmFsc2U7DQoJCX0NCgkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcmVmZXJlbmNlWyduYW1lJ11bMF0pKQ0KCQl7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdSBuZWVkIHRvIGFkZCByZWZlcmVuY2UgbmFtZS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSRzdG9yZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnb3JnYW5pc2F0aW9uX3JlZiddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIG9yZ2FuaXNhdGlvbiBuYW1lLiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHN0b3JlID0gZmFsc2U7DQoJCX0NCgkJaWYgKCFpc3NldCgkcmVmZXJlbmNlWydjb3VudHJ5J11bMF0pIHx8ICRyZWZlcmVuY2VbJ2NvdW50cnknXVswXSA8PSAwKQ0KCQl7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdSBuZWVkIHRvIGFkZCByZWZlcmVuY2UgY291bnRyeS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSRzdG9yZSA9IGZhbHNlOw0KCQl9DQoJCWlmICgkc3RvcmUpDQoJCXsNCgkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkkb2JqZWN0LT5leHBlcnQgPSAkaWQ7DQoJCQkkb2JqZWN0LT5vcmdhbmlzYXRpb24gPSAkcmVmZXJlbmNlWydvcmdhbmlzYXRpb25fcmVmJ11bMF07DQoJCQkkb2JqZWN0LT5uYW1lID0gJHJlZmVyZW5jZVsnbmFtZSddWzBdOw0KCQkJJG9iamVjdC0+ZW1haWwgPSAkcmVmZXJlbmNlWydlbWFpbCddWzBdOw0KCQkJJG9iamVjdC0+cGhvbmUgPSAkcmVmZXJlbmNlWydwaG9uZSddWzBdOw0KCQkJJG9iamVjdC0+cG9zaXRpb24gPSAkcmVmZXJlbmNlWydwb3NpdGlvbiddWzBdOw0KCQkJJG9iamVjdC0+Y291bnRyeSA9IChpbnQpICRyZWZlcmVuY2VbJ2NvdW50cnknXVswXTsNCgkJCSRvYmplY3QtPmVtYWlsc2VuZCA9IDI7DQoNCgkJCS8vIFVwZGF0ZSB0aGVpciBkZXRhaWxzIGluIHRoZSBleHBlcnQgdGFibGUgdXNpbmcgaWQgYXMgdGhlIHByaW1hcnkga2V5Lg0KCQkJcmV0dXJuIEZhY3Rvcnk6OmdldERibygpLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24nLCAkb2JqZWN0KTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9aGVscGVyRXJyb3JzXQ==', 'CS8qKg0KCSogCUxvYWQgdGhlIENvbmZpcm1hdGlvbiBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDb25maXJtYXRpb25BamF4KCRkb2N1bWVudCkNCgl7DQoJCS8vIGFkZCBhbiBldmVudCB0aGF0IHdpbGwgc2VuZCBvdXQgYWxsIGNvbmZpcm1hdGlvbiBlbWFpbHMsIG5vdCB5ZXQgc2VuZA0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJc2VuZENvbmZpcm1hdGlvbkVtYWlscygxKTsNCgkJCX0pOw0KCQkJDQoJCQlmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKHR5cGUpIHsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguc2VuZENvbmZpcm1hdGlvbkVtYWlscyZmb3JtYXQ9anNvbic7DQoJCQkJaWYodHlwZSA+IDApew0KCQkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnR5cGU9Jyt0eXBlOw0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnUE9TVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0iKTsNCgl9', '', '', '', '', '', 'CQlzZWxmOjpsb2FkQ29uZmlybWF0aW9uQWpheCgkZG9jdW1lbnQpOw==', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Expert Database', '', '', 'Expert Database (Manos)', '', '', '', 1, 'https://www.vdm.io/updates/expertdatabase_update_server.xml', 'http://www.vdm.io', '', 'zSYEoVlA9p1iyV/JrkCLRwmThI0jeYJfXizVtS48+Dbcg8C5CE8A/fZMNtJWaNvLoOrv2asyvQOQB2Vh7F/h4w==', 'https://www.vdm.io/access/', '', 2, 5, '', 1, 62),
(32, '', '', '', '', '', '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.3', 'Copyright (C) 2015. All Rights Reserved', '2017-06-16 19:13:20', '', '54Nlhb/V3NPJ/yahgAFbte09Jo8xyB7TWPRZKvhXaqM=', '40sDxN28jGZ9sFg9B24mgBQItFN9xm+qYBeE05PYVwk=', '', '41s1TWjLw/emmZi1+vw6yTm65rhbpIsVama2dtpEys0=', '', '', '', 1, '', 'The watcher that helps monitor dynamic IP changes.', 'info@vdm.io', '', '', 't17fhvVRF0sPjxpHhemffyAy+Tp52Wc0B9S1hsdKMnK5RLQoTPV1dsw5IEsofM5V', '', '9220910b-4c08-40b2-bdb2-57514a493910', 'images/vdm/DYNAMICIP500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2020-05-25 12:10:19', '', 'Dynamic IP', 'dynamicip', '', 4, '', '', '', 'W0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWlzVmFsaWRJUF0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmFyXygmJGtleSwgJHRhYmxlLCAkd2hlcmUgPSBudWxsLCAkd2hlcmVTdHJpbmcgPSAndXNlcicsICR3aGF0ID0gJ2lkJywgJG9wZXJhdG9yID0gJz0nLCAkbWFpbiA9ICdbW1tjb21wb25lbnRdXV0nKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0LCAkd2hlcmVTdHJpbmcpKSk7DQoJCWlmIChlbXB0eSgkdGFibGUpKQ0KCQl7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycuJG1haW4pKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fJy4kbWFpbi4nXycuJHRhYmxlKSk7DQoJCX0NCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkc2VhcmNoID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJZm9yZWFjaCAoJHNlYXJjaCBhcyAkaXRlbSkNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJGl0ZW0tPnskd2hlcmVTdHJpbmd9KSAmJiAhaXNfbnVtZXJpYygkaXRlbS0+eyR3aGVyZVN0cmluZ30pICYmICRpdGVtLT57JHdoZXJlU3RyaW5nfSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRpdGVtLT57JHdoZXJlU3RyaW5nfSwgdHJ1ZSkpKQ0KCQkJCXsNCgkJCQkJLy8gYmFzaWMgZGVjcnlwdCBkYXRhIHZhbHVlLg0KCQkJCQkkaXRlbS0+eyR3aGVyZVN0cmluZ30gPSBydHJpbSgka2V5LT5kZWNyeXB0U3RyaW5nKCRpdGVtLT57JHdoZXJlU3RyaW5nfSksICJcMCIpOw0KCQkJCX0NCgkJCQkvLyBzZWUgaWYgaXQgaXMgdGhpcyBvbmUNCgkJCQlpZiAoaXNzZXQoJGl0ZW0tPnskd2hlcmVTdHJpbmd9KSAmJiBpc3NldCgkaXRlbS0+eyR3aGF0fSkgJiYgJGl0ZW0tPnskd2hlcmVTdHJpbmd9ID09PSAkd2hlcmUpDQoJCQkJew0KCQkJCQlyZXR1cm4gJGl0ZW0tPnskd2hhdH07DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnRmlyc3Qgc2V0IHRoZSBjb21wb25lbnRzIGdsb2JhbCBzZXR0aW5ncyBhbmQgcGVybWlzc2lvbnMgaW4gdGhlIDxiPk9wdGlvbnM8L2I+IGFyZWEsIG9yIHRoZSBmcm9udC1lbmQgb2YgdGhlIGNvbXBvbmVudCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiA8YnIgLz5QbGVhc2Ugbm90ZSB0aGF0IGVhY2ggdmlldyBvbiB0aGUgZnJvbnQtZW5kIGhhcyBhY2Nlc3MgYW5kIHBlcm1pc3Npb25zLCBzbyBpZiB5b3Ugd291bGQgbGlrZSB0aGUgcHVibGljIHRvIGFjY2VzcyB0aG9zZSB2aWV3cyB0aGV5IG11c3QgYmUgZ2l2ZW4gdGhlIGFjY2VzcyBhbmQgcGVybWlzc2lvbi4nLCAnSW5mbycpOw==', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', '', '', 'Dynamic IP', '', '', 'Dynamic IP', '.git', '', 1, 1, 'https://www.vdm.io/updates/demo_update_server.xml', 'https://www.vdm.io/', '', 'qcgAgVbJW4swWf16dQYpJw73vqPuS+NB/B+ck6XsdqE=', '', '', 1, 34, '', 1, 13),
(33, '', '', '', '', '', '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', 1, '', '', '', '', '', '{}', '', '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '3.0.3', 'Copyright (C) 2015. All Rights Reserved', '2016-10-18 11:44:09', '', 'o8KXSRmDTHWcqZCIQBGBEIzUWKp3gloU4rAwbGXE+5Q=', 'Dcwzi8PkJn+0a6NOGjmtWUw3JIDQGN/wJI9PPKq1OTQ=', '', 'koqQzSNiTjmHtjFu+bZEoZ6m/gsmQGHSApLDOF9n958=', '', '', '', 1, '', 'Google Plus Profile Feed.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-google-plus-profiles', 'IC9msQX0nf9zeyJ8LnlRwuo9nq+9gPDN/7MNC9tLXQ/x41kDGVsIqVlLvDKN5nCjrXskwgVR5vrm3fpMYbZ0fA==', '', 'c4e35263-cf03-4e12-9045-ad416ab613ad', 'images/vdm/GooglePlus500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_googlePlusProfileFeed.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:11:26', 2, 'Google Plus Profiles', 'googleplusprofile', '', 4, '', '', '', 'W0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0=', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnRmlyc3Qgc2V0IHRoZSBjb21wb25lbnRzIGdsb2JhbCBzZXR0aW5ncyBhbmQgcGVybWlzc2lvbnMgaW4gdGhlIDxiPk9wdGlvbnM8L2I+IGFyZWEsIG9yIHRoZSBmcm9udC1lbmQgb2YgdGhlIGNvbXBvbmVudCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiA8YnIgLz5QbGVhc2Ugbm90ZSB0aGF0IGVhY2ggdmlldyBvbiB0aGUgZnJvbnQtZW5kIGhhcyBhY2Nlc3MgYW5kIHBlcm1pc3Npb25zLCBzbyBpZiB5b3Ugd291bGQgbGlrZSB0aGUgcHVibGljIHRvIGFjY2VzcyB0aG9zZSB2aWV3cyB0aGV5IG11c3QgYmUgZ2l2ZW4gdGhlIGFjY2VzcyBhbmQgcGVybWlzc2lvbi4nLCAnSW5mbycpOw==', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Google Plus Profile Feed.', '', '', 'Google Plus Profiles (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/google_plus_profile_server.xml', 'https://www.vdm.io/', '', 'DLskP0PGQKG9Zbggb/uWlfr3MMzyMJsMuuwsGMcr7KE=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 85, '', 1, 14),
(34, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', 1, '', 1, '', '', 1, '', '', '', '', '', '', '', 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.1', 'Copyright (C) 2015. All Rights Reserved', '2017-07-17 10:38:15', '', '', '', '', '', '', '', '', 1, '', 'The Sync Portal that helps synchronization of data across multiple databases.', 'info@vdm.io', '', '', 'qqDFvORZ7GJ/mZpJbbg3wdmHk5u2AGSiHN+BOV8XuExPRj6zvjNi8CHf5R6RveTMusOYhval993w7PsFEZ7mng==', '', 'd51f4a4a-d524-4458-8c27-7f3ee458d36a', 'images/vdm/SYNC500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2018-02-22 15:15:30', '', 'Sync Portal', 'syncportal', '', 4, '', '', 'CXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCltDVVNUT01DT0RFPWNvbmZpcm1UcnVzdCt0cnVzdF9zaXRlLFZETV0NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN5bmNVcmwoJHN5c3RlbSwgJHR5cGUgPSAndHJ1c3QnKQ0KCXsNCgkJLy8gYnVpbGQgdGhlIHN5bmMgdXJsIHRvIHF1ZXJ5DQoJCXN3aXRjaCAoJHN5c3RlbVsnbGlua190eXBlJ10pDQoJCXsNCgkJCWNhc2UgMToNCgkJCQkvLyBJUA0KCQkJCWlmICgyID09ICRzeXN0ZW1bJ2lwX3R5cGUnXSAmJiBzZWxmOjppc1ZhbGlkSVAoJHN5c3RlbVsnaXAnXSkpDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIFN0YXRpYyBJUA0KCQkJCQkkdXJsID0gJ2h0dHA6Ly8nIC4gdHJpbSgkc3lzdGVtWydpcCddKTsNCgkJCQl9DQoJCQkJZWxzZWlmICgxID09ICRzeXN0ZW1bJ2lwX3R5cGUnXSkNCgkJCQl7DQoJCQkJCS8vIG11c3Qgc3RpbGwgYnVpbGQgdGhpcw0KCQkJCX0NCgkJCWJyZWFrOw0KCQkJY2FzZSAyOg0KCQkJCS8vIERPTUFJTg0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3lzdGVtWyd1cmwnXSkpDQoJCQkJew0KCQkJCQkkdXJsID0gdHJpbSgkc3lzdGVtWyd1cmwnXSwgJy8nKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQkvLyBjaGVjayBpZiBhIHVybCB3YXMgZm91bmQNCgkJaWYgKGlzc2V0KCR1cmwpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhlIHVybA0KCQkJcmV0dXJuICR1cmwgLiAnL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFwaS4nIC4gJHR5cGU7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc3luY1RhYmxlc0F2YWlsYWJsZSgkdGFibGVzKQ0KCXsNCgkJLy8gZ2V0IHRoZSB3YXRjaGVyIG1vZGVsDQoJCSRtb2RlbCA9IHNlbGY6OmdldE1vZGVsKCd3YXRjaGVycycsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgcGxhY2UgaG9sZGVycw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGxhY2VIb2xkZXJzKCR0eXBlKQ0KCXsNCgkJaWYgKCd0cnVzdF9yZXF1ZXN0JyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ3RydXN0X3JlcXVlc3QnLCAkZiwgJGIpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2NvbmZpcm1hdGlvbl9saW5rXScpOw0KCQkJcmV0dXJuICBzZWxmOjptZXJnZUFycmF5cygkcGxhY2Vob2xkZXIpOw0KCQl9DQoJCWVsc2VpZiAoJ3RydXN0X2NvbmZpcm0nID09ICR0eXBlKQ0KCQl7DQoJCQkkZiA9ICdbJzsNCgkJCSRiID0gJ10nOw0KCQkJJHBsYWNlaG9sZGVyID0gYXJyYXkoKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfa2V5cyhzZWxmOjpnZXRDb21wYW55RGV0YWlscygncGxhY2Vob2xkZXInKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IHNlbGY6OmdldFNlbGVjdGlvbigndHJ1c3RfY29uZmlybScsICRmLCAkYik7DQoJCQlyZXR1cm4gIHNlbGY6Om1lcmdlQXJyYXlzKCRwbGFjZWhvbGRlcik7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCU9uY2UgdGhlIGVtYWlsIHdhcyBzZW5kIHRoZSBnaXZlcyB1cyB0aGUgb3B0aW9uIHRoZSBzdG9yZSB0aGUgbWFzc2FnZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RvcmVNZXNzYWdlKCRzZW5kbWFpbCwgJHJlY2lwaWVudCwgJHN1YmplY3QsICRib2R5LCAkdGV4dG9ubHksICRtb2RlLCAkdHlwZSkNCgl7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogUmV0dXJuIGFycmF5IG9mIHNlbGVjdGlvbnMNCgkqIA0KCSogQHJldHVybiAgICBhcnJheSBpZiB0eXBlIG1hdGNoDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigkdHlwZSwgJGYsICRiKQ0KCXsNCgkJaWYgKCd0cnVzdF9yZXF1ZXN0JyA9PSAkdHlwZSkNCgkJew0KCQkJcmV0dXJuIGFycmF5KA0KCQkJCSdhLmNoYWluJyA9PiAkZi4nY2hhaW4nLiRiLAkNCgkJCQknYS51cmwnID0+ICRmLid1cmwnLiRiLA0KCQkJCSdhLnBhdGgnID0+ICRmLidwYXRoJy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2EubWV0aG9kJyA9PiAkZi4nbWV0aG9kJy4kYiwNCgkJCQknYS5yZXF1ZXN0X2lkJyA9PiAkZi4ncmVxdWVzdF9pZCcuJGINCgkJCSk7DQoJCX0NCgkJZWxzZWlmICgndHJ1c3RfY29uZmlybScgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknYS51cmwnID0+ICRmLid1cmwnLiRiLA0KCQkJCSdhLnBhdGgnID0+ICRmLidwYXRoJy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2EudHJ1c3RrZXknID0+ICRmLid0cnVzdGtleScuJGIsDQoJCQkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN5bmNDaGFpbigkaWQpDQoJew0KCQkvLyBsb2FkIHRoZSBidWNrZXQNCgkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCS8vIGZpcnN0IGdldCBhbGwgR2F0ZXdheXMgTGlua2VkIHRvIHN5bmMgc2l0ZQ0KCQkkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgnc3luY19zaXRlJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IpOw0KCQkkbW9kZWwtPnN5bmNfc2l0ZXZ2dnYgPSAkaWQ7DQoJCS8vIG5vdyBnZXQgYWxsIHdhdGNoZXJzIGxpbmtlZCB0byBnYXRld2F5cw0KCQlpZiAoJGdhdGVXYXlzID0gJG1vZGVsLT5nZXRWdnlnYXRld2F5cygpKQ0KCQl7DQoJCQlmb3JlYWNoICgkZ2F0ZVdheXMgYXMgJGdhdGUpDQoJCQl7DQoJCQkJLy8gbWFrZSBzdXJlIHRvIGNvbnZlcnQgaWYgbmVlZGVkDQoJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRnYXRlLT5oYXNoZXMpKQ0KCQkJCXsNCgkJCQkJJGdhdGUtPmhhc2hlcyA9IGpzb25fZGVjb2RlKCRnYXRlLT5oYXNoZXMsIHRydWUpOw0KCQkJCX0NCgkJCQkvLyBtYWtlIHN1cmUgaXQgaXMgYXJyYXkNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdhdGUtPmhhc2hlcykpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkZ2F0ZS0+aGFzaGVzIGFzICRnZXQpDQoJCQkJCXsNCgkJCQkJCSR3YXRjaGVycyA9IHNlbGY6OmdldFZhcignd2F0Y2hlcicsICRnZXRbJ3dhdGNoZXInXSwgJ2lkJywgJ2hhc2hlcycpOw0KCQkJCQkJLy8gbWFrZSBzdXJlIHRvIGNvbnZlcnQgaWYgbmVlZGVkDQoJCQkJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHdhdGNoZXJzKSkNCgkJCQkJCXsNCgkJCQkJCQkkd2F0Y2hlcnMgPSBqc29uX2RlY29kZSgkd2F0Y2hlcnMsIHRydWUpOw0KCQkJCQkJfQ0KCQkJCQkJLy8gbWFrZSBzdXJlIGl0IGlzIGFycmF5DQoJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHdhdGNoZXJzKSkNCgkJCQkJCXsNCgkJCQkJCQlmb3JlYWNoICgkd2F0Y2hlcnMgYXMgJHdhdGNoZXIpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBub3cgZ2V0IGFsbCB0YWJsZXMgbGlua2VkIHRvIHdhdGNoZXJzDQoJCQkJCQkJCSRuYW1lID0gc2VsZjo6Z2V0VmFyKCd0YWJsZScsICR3YXRjaGVyWyd0YWJsZSddLCAnaWQnLCAnbmFtZScpOw0KCQkJCQkJCQkkYnVja2V0WyRuYW1lXSA9IGFycmF5KCduYW1lJyA9PiAkbmFtZSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIGlmIGZvdW5kIHRhYmxlcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGJ1Y2tldCkpDQoJCXsNCgkJCS8vIHNvcnQgYnkgdGFibGUgbmFtZQ0KCQkJa3NvcnQoJGJ1Y2tldCk7DQoJCQkvLyBsb2FkIHRoZSBjaGFpbg0KCQkJJGNoYWluID0gYXJyYXkoKTsNCgkJCSRjb3VudGVyID0gMDsNCgkJCWZvcmVhY2ggKCRidWNrZXQgYXMgJGFycmF5KQ0KCQkJew0KCQkJCSRjaGFpblsnY2hhaW4nLiRjb3VudGVyXSA9ICRhcnJheTsNCgkJCQkkY291bnRlcisrOw0KCQkJfQ0KCQkJcmV0dXJuICRjaGFpbjsNCgkJfQ0KCQkvLyBub25lIGZvdW5kDQoJCXJldHVybiBudWxsOw0KCX0NCltDVVNUT01DT0RFPWdldFRlbXBsYXRlXQ0KW0NVU1RPTUNPREU9bWRzaXhdDQpbQ1VTVE9NQ09ERT1nZXRDb21wYW55RGV0YWlsc10NCltDVVNUT01DT0RFPWN1cmxXb3JrZXJIZWxwZXJdDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KW0NVU1RPTUNPREU9c2V0SGlkZGVuRmlsZV0NCltDVVNUT01DT0RFPWxvY2tlcl0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1pc1ZhbGlkSVBdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ==', '', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnPGgxPkhvdyBpdCB3b3JrczwvaDE+PHA+UGxlYXNlIHdhdGNoIHRoZSBmb2xsb3dpbmcgPGEgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPnR1dG9yaWFsPC9hPiBiZWZvcmUgeW91IGNvbnRpbnVlLiBUaGlzIHdpbGwgaW5zdXJlIHRoYXQgeW91IGZ1bGwgdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgYW5kIGF2b2lkIGNvcnJ1cHRpb24gb2YgeW91IGRhdGEuPC9wPicsICdJbmZvJyk7', '', 'CQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY3VybCBpbnN0YWxsZWQNCgkJCWlmICghZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnRXJyb3IhIEN1cmwgbm90IGZvdW5kISBDdXJsIGlzIHJlcXVpcmVkIHRvIHJ1biB0aGUgc3luYyBvcGVyYXRpb25zLCB3aXRob3V0IGl0IHdlIGNhbiBub3QgY29udGludWUuJywgJ2Vycm9yJyk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', '', '', 'Sync Portal', '', '', 'Sync Portal', '.git', '', '', 1, 'https://www.vdm.io/updates/demo_update_server.xml', 'https://www.vdm.io/', '', '3NkQKoYfIUTod/HWu93LdYEEjTyf7G5ti0El5QJRaqM=', '', '', 1, 127, '', 1, 16),
(35, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, 1, '', '', '', 1, '{}', 3, 1, 3, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.8', 'Copyright (C) 2015. All Rights Reserved', '2018-02-26 15:27:39', '', 'AIEdncGGYhXwT3K9riCVHj77bZdow5JNzfd5v/JFWRE=', '+qzH++P20Vn9Lu6rDFk8Guugn5VHGPApQXV92hIl21o=', '', 'VxGjDkRxSYPEI0CbN5lPWPGZMuMBwE7dh48Jb4AZxn0=', '', '', '', 1, '', 'Certification Authority', 'joomla@vdm.io', '', '', 'VMTs0q3O6q5SP+sxS2o2+28AeqDNOJbwXric5PkFxS8yVHU+7K9o8XeGgIDrcW4xHSw5dCLESW4Rnadyr4OAXg==', '', '679e64b0-9d16-42df-a5ca-87e1de35c2a9', 'images/vdm/CA500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2021-03-08 03:12:42', 2, 'Certification Authority', 'CertificationAuthority', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29uZmlybVRydXN0K3RydXN0X3BvcnRhbCxKQ0JdDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTeW5jVXJsKCRzeXN0ZW0sICR0eXBlID0gJ3RydXN0JykNCgl7DQoJCS8vIGJ1aWxkIHRoZSBzeW5jIHVybCB0byBxdWVyeQ0KCQlzd2l0Y2ggKCRzeXN0ZW1bJ2xpbmtfdHlwZSddKQ0KCQl7DQoJCQljYXNlIDE6DQoJCQkJLy8gSVANCgkJCQlpZiAoMiA9PSAkc3lzdGVtWydpcF90eXBlJ10gJiYgc2VsZjo6aXNWYWxpZElQKCRzeXN0ZW1bJ2lwJ10pKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBTdGF0aWMgSVANCgkJCQkJJHVybCA9ICdodHRwOi8vJyAuIHRyaW0oJHN5c3RlbVsnaXAnXSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoMSA9PSAkc3lzdGVtWydpcF90eXBlJ10pDQoJCQkJew0KCQkJCQkvLyBtdXN0IHN0aWxsIGJ1aWxkIHRoaXMNCgkJCQl9DQoJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQkvLyBET01BSU4NCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHN5c3RlbVsndXJsJ10pKQ0KCQkJCXsNCgkJCQkJJHVybCA9IHRyaW0oJHN5c3RlbVsndXJsJ10sICcvJyk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJLy8gY2hlY2sgaWYgYSB1cmwgd2FzIGZvdW5kDQoJCWlmIChpc3NldCgkdXJsKSkNCgkJew0KCQkJLy8gcmV0dXJuIHRoZSB1cmwNCgkJCXJldHVybiAkdXJsIC4gJy9pbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hcGkuJyAuICR0eXBlOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoNCgkvKioNCgkqIAlnZXQgcGxhY2UgaG9sZGVycw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGxhY2VIb2xkZXJzKCR0eXBlKQ0KCXsNCgkJaWYgKCd0cnVzdF9yZXF1ZXN0JyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ3RydXN0X3JlcXVlc3QnLCAkZiwgJGIpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2NvbmZpcm1hdGlvbl9saW5rXScpOw0KCQkJcmV0dXJuICBzZWxmOjptZXJnZUFycmF5cygkcGxhY2Vob2xkZXIpOw0KCQl9DQoJCWVsc2VpZiAoJ3RydXN0X2NvbmZpcm0nID09ICR0eXBlKQ0KCQl7DQoJCQkkZiA9ICdbJzsNCgkJCSRiID0gJ10nOw0KCQkJJHBsYWNlaG9sZGVyID0gYXJyYXkoKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfa2V5cyhzZWxmOjpnZXRDb21wYW55RGV0YWlscygncGxhY2Vob2xkZXInKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IHNlbGY6OmdldFNlbGVjdGlvbigndHJ1c3RfY29uZmlybScsICRmLCAkYik7DQoJCQlyZXR1cm4gIHNlbGY6Om1lcmdlQXJyYXlzKCRwbGFjZWhvbGRlcik7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCU9uY2UgdGhlIGVtYWlsIHdhcyBzZW5kIHRoZSBnaXZlcyB1cyB0aGUgb3B0aW9uIHRoZSBzdG9yZSB0aGUgbWFzc2FnZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RvcmVNZXNzYWdlKCRzZW5kbWFpbCwgJHJlY2lwaWVudCwgJHN1YmplY3QsICRib2R5LCAkdGV4dG9ubHksICRtb2RlLCAkdHlwZSkNCgl7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogUmV0dXJuIGFycmF5IG9mIHNlbGVjdGlvbnMNCgkqIA0KCSogQHJldHVybiAgICBhcnJheSBpZiB0eXBlIG1hdGNoDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigkdHlwZSwgJGYsICRiKQ0KCXsNCgkJaWYgKCd0cnVzdF9yZXF1ZXN0JyA9PSAkdHlwZSkNCgkJew0KCQkJcmV0dXJuIGFycmF5KA0KCQkJCSdhLmNoYWluJyA9PiAkZi4nY2hhaW4nLiRiLAkNCgkJCQknYS51cmwnID0+ICRmLid1cmwnLiRiLA0KCQkJCSdhLnBhdGgnID0+ICRmLidwYXRoJy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2EubWV0aG9kJyA9PiAkZi4nbWV0aG9kJy4kYiwNCgkJCQknYS5yZXF1ZXN0X2lkJyA9PiAkZi4ncmVxdWVzdF9pZCcuJGINCgkJCSk7DQoJCX0NCgkJZWxzZWlmICgndHJ1c3RfY29uZmlybScgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknYS51cmwnID0+ICRmLid1cmwnLiRiLA0KCQkJCSdhLnBhdGgnID0+ICRmLidwYXRoJy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2EudHJ1c3RrZXknID0+ICRmLid0cnVzdGtleScuJGIsDQoJCQkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN5bmNDaGFpbigkaWQpDQoJew0KCQkvLyBub25lIGZvdW5kDQoJCXJldHVybiBudWxsOw0KCX0NCltDVVNUT01DT0RFPWdldENvbXBhbnlEZXRhaWxzXQ0KW0NVU1RPTUNPREU9YmFzZVNpeHR5Rm91clVSTF0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1nZXRUZW1wbGF0ZV0gDQpbQ1VTVE9NQ09ERT1tZHNpeF0NCltDVVNUT01DT0RFPWN1cmxXb3JrZXJIZWxwZXJdDQpbQ1VTVE9NQ09ERT1sb2NrZXJdDQpbQ1VTVE9NQ09ERT11cmxFeGlzdHNdDQpbQ1VTVE9NQ09ERT1nZXRGaWxlUGF0aF0NCltDVVNUT01DT0RFPWdldEZvbGRlclBhdGhdDQpbQ1VTVE9NQ09ERT1nZXRGaWxlQ29udGVudHNdDQpbQ1VTVE9NQ09ERT1jb21wb3NlVkVORE9SK3BocHNlY2xpYl0NCltDVVNUT01DT0RFPWNyeXB0XQ==', '', '', '', '', '', '', '', 'IyBKb29tbGEgIyMjQ29tcG9uZW50X25hbWUjIyMgKEpDQikNClshW0dpdEh1YiByZWxlYXNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvcmVsZWFzZXMpIFshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvZG93bmxvYWRzL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvdG90YWwuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvcmVsZWFzZXMpDQoNClRoaXMgaXMgYSBbSm9vbWxhIDMueF0oaHR0cHM6Ly9leHRlbnNpb25zLmpvb21sYS5vcmcvZXh0ZW5zaW9uL2NvbXBvbmVudC1idWlsZGVyLykgY29tcG9uZW50LiBbX19TZWUgSW4gQWN0aW9uX19dKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9SVFmc0xZSWVibGsmbGlzdD1QTFFSR0ZJOFhaX3d0R3ZQUVpXQmZEenpsRVJMUWdwTVJFJmluZGV4PTQ1KQ0KDQogIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvdmRtLWNvbXBvbmVudC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCllvdSBjYW4gaW5zdGFsbCBpdCBxdWl0ZSBlYXNpbHkgYW5kIHdpdGggbm8gbGltaXRhdGlvbnMuIE9uIFtnaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3JlbGVhc2VzKSBpcyB0aGUgbGF0ZXN0IHJlbGVhc2UgKCMjI0FDVFVBTFZFUlNJT04jIyMpIHdpdGggKipBTEwqKiBpdHMgZmVhdHVyZXMgYW5kICoqQUxMKiogY29uY2VwdHMgdG90YWxseSBvcGVuLXNvdXJjZSBhbmQgZnJlZSEgDQoNCj4gV2F0Y2ggUXVpY2sgQnVpbGQgb2YgYSBIZWxsbyBXb3JsZCBjb21wb25lbnQgaW4gW0pDQiBvbiBZb3V0dWJlXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUlRZnNMWUllYmxrJmxpc3Q9UExRUkdGSThYWl93dEd2UFFaV0JmRHp6bEVSTFFncE1SRSZpbmRleD00NSkNCg0KT25jZSBpbnN0YWxsZWQgdXBncmFkZXMgYXJlIHF1aWNrIGFuZCBlYXN5IHZpYSB0aGUgZGVmYXVsdCBKb29tbGEgdXBncmFkZSBhcmVhLg0KDQpTb21lIG9mIHRoZSBGZWF0dXJlcw0KPT09PT09PT09PT09PT09PT09PT0NCg0KKyBBZGRpbmcgbXlTUUwgRHVtcCB0byBhbnkgVmlldy9UYWJsZS4NCisgR3JhYiBleGlzdGluZyBUYWJsZSBkYXRhIGFuZCBidWlsZCBhIGR5bmFtaWMgZHVtcC4NCisgVW5saW1pdGVkIEpvb21sYSBDb21wb25lbnRzLg0KKyBVbmxpbWl0ZWQgVGFibGVzL1ZpZXdzLg0KKyBSZXVzaW5nIFZpZXdzIGFuZCBGaWVsZHMuDQorIFJ1bnMgb24gWW91ciBPd24gSm9vbWxhIEluc3RhbGwuDQorIEFkZCBEeW5hbWljL2N1c3RvbSBiYWNrLWVuZCB2aWV3cyB0aGF0IHVzZXMgVGFibGUgYW5kIENoYXJ0IHJlc3VsdCBzZXRzLg0KKyBCdWlsZCBkYXRhIHF1ZXJ5IG9mIGV4dHJlbWUgY29tcGxleCBuYXR1cmUgdG8gdXNlIGluIER5bmFtaWMvY3VzdG9tIHZpZXdzLg0KKyBIaWdobHkgRHluYW1pYy9jdXN0b20gRnJvbnQtZW5kIFN0cnVjdHVyZXMuDQorIER5bmFtaWNhbGx5IHNldHVwIHRlbXBsYXRlcyBhbmQgbGF5b3V0cyBmb3IgRnJvbnQtZW5kIGRlc2lnbi4NCisgSW50ZWdyYXRpb24gb2YgdGhlIGV4Y2VsbGVudCBVSUtJVCBsaWIuDQorIEludGVncmF0aW9uIG9mIHRoZSBleGNlbGxlbnQgRk9PVEFCTEUgbGliLg0KKyBBbGwgSm9vbWxhIFN0YW5kYXJkIEZpZWxkIFR5cGVzIChpbmNsdWRpbmcgcmVwZWF0YWJsZSBmaWVsZHMpLg0KKyBTdHJvbmcgSW1wbGVtZW50YXRpb24gb2YgYWxsIEpvb21sYSBGb3JtIFNlY3VyaXR5Lg0KKyBMb2FkIGRhdGEgdmlhIGFqYXggd2l0aCBlYXNlLg0KKyBZb3UgY2FuIGFkZCBhbiBVcGRhdGUgU2VydmVyIHRvIENvbXBvbmVudHMgeW91IGJ1aWxkLg0KKyBCdWlsZCBhZHZhbmNlZCBEeW5hbWljIGZyb250LWVuZCBmb3Jtcy4NCisgRHluYW1pYyBkYXRhIHF1ZXJpZXMgZnJvbSBtdWx0aXBsZSB0YWJsZXMuDQorIFBsYWNlIGluIGxvY2FsIEdJVCBmb2xkZXIsIGFuZCBwdWJsaXNoIHRvIHNhbGVzIHNlcnZlci4NCisgSW5jbHVkZSBhbnkgYW1vdW50IG9mIGN1c3RvbSBmaWxlcyBhbmQgZm9sZGVycyBkdXJpbmcgYnVpbGQuDQorIFN0YXRpYyBoZWxwZXIgY2xhc3Mgd2l0aCBzbWFydCBtZXRob2RzIGFscmVhZHkgaW5jbHVkZWQuDQorIFN0YXRpYyBoZWxwZXIgbWV0aG9kcyBDYW4gZWFzaWx5IGJlIGFkZGVkLg0KKyBEaXJlY3QgaW5zdGFsbCBmcm9tIGNvbXBsaWVyIHZpZXcuDQorIEludGVncmF0aXZlIHdpdGggbmF0aXZlIEpvb21sYSBDYXRlZ29yaWVzIGFuZCBUYWdzLg0KKyBGdWxseSBEeW5hbWljIFNlYXJjaCBGcmllbmRseSBVUkwgQXV0byBJbXBsZW1lbnRhdGlvbi4NCisgQ3VzdG9tIHNjcmlwdGluZyBvcHRpb25zIGFsbCBvdmVyIHRoZSBNVkMgc3RydWN0dXJlLg0KKyBQZXJtaXNzaW9uIGltcGxlbWVudGF0aW9uIGRvd24gdG8gZWFjaCB2aWV3LCBpdGVtIGFuZCBmaWVsZC4NCisgRWFzeSBleHRlbmRpYmxlIHRvIGluY2x1ZGUgb3RoZXIgbGlicmFyaWVzLg0KKyBDYW4gaW5jbHVkZSBTUUwgYW5kIHZpc2lvbmluZyB1cGRhdGUgbGluayB0byBkaXN0cmlidXRlIHlvdXIgY29tcG9uZW50IHVwZGF0ZXMgdmlhIEpvb21sYSBkZWZhdWx0IHVwZ3JhZGUgb2YgY29tcG9uZW50cy4NCisgRWFzeSBFeHBvcnQgJiBJbXBvcnQgYWRkb24gdG8gYWxsIGJhY2tlbmQtdGFibGVzLg0KKyBPdmVycmlkaW5nIGFiaWxpdHkgb2YgaW1wb3J0IGNvbmNlcHRzIGluIGFsbCBiYWNrZW5kLXRhYmxlcy4NCisgVGhlIEJhdGNoIGFuZCBGaWx0ZXIgaW1wbGVtZW50YXRpb24gb24gYWxsIGJhY2tlbmQtbGlzdCB2aWV3cy4NCisgVGhpcyBhbmQgbXVjaCBtdWNoIG1vcmUgYXJlIGFsbCBwb3NzaWJsZSB3aXRoIHRoaXMgY29tcG9uZW50IGJ1aWxkZXIhDQoNCkp1c3QgSW1hZ2luZQ0KPT09PT09PT09PT09PT09PT09PT0NCg0KKyBZb3VyIENvbXBvbmVudCBCYWNrLWVuZCBjYW4gYmUgbW9yZSBhZHZhbmNlZCB0aGVuIHRoZSBKb29tbGEgQXJ0aWNsZSBNYW5hZ2VyLg0KKyBZb3VyIENvZGUgYXMgUGVyZmVjdGx5IFVuaWZpZWQgdG8gdGhlIHN0cmljdCBKb29tbGEgU3RhbmRhcmRzLg0KKyBBZGRpbmcgQ3VzdG9tIFNjcmlwdGluZyBhbG1vc3QgYW55d2hlcmUgaW4gdGhlIE1WQyBzdHJ1Y3R1cmUuDQorIEltcG9ydCBhbmQgZXhwb3J0IGZlYXR1cmUgdG8gYWxsIGJhY2tlbmQtdmlld3MuDQorIEJhdGNoIGNvcHkgYW5kIG1vdmUvdXBkYXRlIGZlYXR1cmUgZm9yIGFsbCBiYWNrZW5kLXZpZXdzLg0KKyBIaXN0b3J5IHRyYWNraW5nIHBlci9jaGFuZ2UgbWFkZSBvbiBhbnkgYmFjay1lbmQgaXRlbS4NCisgRHluYW1pYyBmaWVsZCBjb250cm9sLCB0byBzaG93IGFuZCBoaWRlIGZpZWxkcyBpbiBhbWF6aW5nIHdheXMuDQorIEZyb250LWVuZCBmcmVlZG9tIG9mIGRlc2lnbiB0aGF0IGFsbG93cyBmb3IgYW55IGxpYnJhcnkgdG8gYmUgdXNlZC4NCisgVGhpcyBhbmQgbXVjaCBtdWNoIG1vcmUgYXJlIGFsbCBwb3NzaWJsZSB3aXRoIHRoaXMgY29tcG9uZW50IGJ1aWxkZXIhDQoNCllvdSBhcmUgaW4gQ29udHJvbA0KPT09PT09PT09PT09PT09PT09PT0NCg0KKyBZb3UgY2FuIGNoYW5nZSB0aGUgbGljZW5zaW5nIHRlbXBsYXRlIGZvciB5b3VyIGNvbXBvbmVudHMuDQorIFlvdSBjYW4gY2hhbmdlL2ltcHJvdmUgZXhpc3RpbmcgZmllbGQgdHlwZXMgYW5kIGFkZCBtb3JlLg0KKyBMaW5lIG51bWJlcnMgdG8gc2hvdyB3aGVyZSBpbiBjb21waWxlciB3YXMgdGhlIGNvZGUgYnVpbGQuDQorIFlvdSBjYW4gaW1wcm92ZSB0aGUgY29tcG9uZW50IHNpbmNlIGFsbCBjb2RlIGFyZSBvcGVuLXNvdXJjZS4NCisgRnJlZSB1cGRhdGVzIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2plY3QuDQorIFlvdSBjYW4gZHluYW1pY2FsbHkgYWRkIGludGVybmFsIGhlbHAgc3RydWN0dXJlcyB0byBhbGwgY29tcG9uZW50Lg0KKyBUaGVyZSBpcyBubyBsaW1pdGF0aW9ucyBvbiBob3cgYmlnIG9yIGhvdyBtdWNoIHlvdSB3YW50IHRvIGJ1aWxkIChzZXJ2ZXIgbGltaXRhdGlvbiBvbmx5KS4NCisgVGhpcyBpcyBhIGNvbXBsZXRlIGZhY3Rvcnkga2luZCBvZiBjb21wb25lbnQgdGhhdCBmdW5jdGlvbnMgbGlrZSBhIGRlcGxveW1lbnQgaHViLg0KKyBFeHBvcnQgYW55IGNvbXBvbmVudCBjb21wbGV0ZWx5IG1hcHBlZCBpbiBKQ0IgYW5kIGltcG9ydCBpbnRvIGFub3RoZXIgSkNCLg0KKyBUaGlzIGFuZCBtdWNoIG11Y2ggbW9yZSBhcmUgYWxsIHBvc3NpYmxlIHdpdGggdGhpcyBjb21wb25lbnQgYnVpbGRlciENCg0KR2V0IE1vcmUgRGVtbyBDb250ZW50DQo9PT09PT09PT09PT09PT09PT09PQ0KDQo+ICoqWW91IGNhbiBwdXJjaGFzZSBtb3JlIFtkZW1vIGNvbnRlbnRdKGh0dHA6Ly92ZG0uYnovamNiLXBhY2thZ2VzKSBmb3IgIyMjQ29tcG9uZW50X25hbWUjIyM6KioNCg0KKyAqRGVtbyBDb21wb25lbnQqIHNlZSB0aGUgYnVpbGQgb24gW2dpdGh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL25hbWliaWEvZGVtby1qb29tbGEtMy1jb21wb25lbnQpIG9yIGdldCB0aGUgW0pDQiBQYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pDQi1QYWNrYWdlcy9yYXcvbWFzdGVyL0pDQl9kZW1vLnppcCkgXyhmcmVlKV8NCisgKkFkdmFuY2UgRGVtbyBDb21wb25lbnQqIGdldCB0aGUgW0pDQiBQYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pDQi1QYWNrYWdlcy9yYXcvbWFzdGVyL0pDQl9kZW1vQWR2YW5jZWQuemlwKSBfKFtidXkga2V5XShodHRwOi8vdmRtLmJ6L2dldC1hZHZhbmNlLWRlbW8ta2V5KSlfDQorICpTZXJtb24gRGlzdHJpYnV0b3IqIHNlZSB0aGUgYnVpbGQgb24gW2dpdGh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL1Nlcm1vbkRpc3RyaWJ1dG9yL0pvb21sYS0zLUNvbXBvbmVudCkgb3IgZ2V0IHRoZSBbSkNCIFBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSkNCLVBhY2thZ2VzL3Jhdy9tYXN0ZXIvSkNCX3Nlcm1vbmRpc3RyaWJ1dG9yLnppcCkgXyhbYnV5IGtleV0oaHR0cDovL3ZkbS5iei9nZXQtc2VybW9uLWRpc3RyaWJ1dG9yLWtleSkpXw0KKyAqTG9jYXRpb24gRGF0YSogc2VlIHRoZSBidWlsZCBvbiBbZ2l0aHViXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1Mb2NhdGlvbi1EYXRhKSBvciBnZXQgdGhlIFtKQ0IgUGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9KQ0ItUGFja2FnZXMvcmF3L21hc3Rlci9KQ0JfbG9jYXRpb25EYXRhLnppcCkgXyhbYnV5IGtleV0oaHR0cDovL3ZkbS5iei9nZXQtbG9jYXRpb24tZGF0YS1rZXkpKV8NCisgKk1vcmUgQ29taW5nLi4uKg0KDQpXaGVyZSBjYW4geW91IGdldCBzdXBwb3J0IGFuZCBoZWxwPw0KPT09PT09PT09PT09PT09PT09PT0NCg0KKyBbVGhlIEpDQiBUdXRvcmlhbHNdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UExRUkdGSThYWl93dEd2UFFaV0JmRHp6bEVSTFFncE1SRSkNCisgW0hlbGxvIFdvcmxkIFR1dG9yaWFsXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUlRZnNMWUllYmxrJmxpc3Q9UExRUkdGSThYWl93dEd2UFFaV0JmRHp6bEVSTFFncE1SRSZpbmRleD00NSkNCisgW1RoZSBKQ0IhIFdpa2ldKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3dpa2kpDQorIFtKQ0IgR29vZ2xlIEdyb3VwL2ZvcnVtXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2EvdmRtLmlvL2QvZm9ydW0vamNiKQ0KKyBbUmVwb3J0IGEgU2VjdXJpdHkgSXNzdWVdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tL3JlcG9ydC1zZWN1cml0eS1pc3N1ZXMpDQorIFtDb21tdW5pdHkgQ29tcGxhaW50XShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbS9jb21tdW5pdHktY29tcGxhaW50KQ0KKyBbT3BlbiBJc3N1ZSBPbiBHaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL2lzc3VlcykgXl4NCg0KU2luY2UgSkNCIGhhcyBbYmVjb21lIGEgY29tbXVuaXR5XShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9ibG9iL3N0YWdpbmcvLmdpdGh1Yi9TVVBQT1JULm1kKSBwcm9qZWN0IFtWRE0uaW9dKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpIGlzICoqbm8gbG9uZ2VyIHNvbGVseSByZXNwb25zaWJsZSoqIGZvciBzdXBwb3J0Lg0KDQpXZSBoYXZlIHN0YXJ0ZWQgYSBbKipKQ0IgZm9ydW0qKl0oaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL3ZkbS5pby9kL2ZvcnVtL2pjYikgd2hlcmUgeW91IGNhbiBwb3N0IHF1ZXN0aW9ucywgYWJvdXQgaG93IHRoaW5ncyB3b3JrLCBvciBpZiB5b3UgbmVlZCBzb21lIGtpbmQgb2YgaGVscCBpbiByZWxhdGlvbiB0byB5b3VyIGRldmVsb3BtZW50IG9mIHlvdXIgY29tcG9uZW50cy4NCg0KXl4gVGhlbiBpZiB5b3UgcnVuIGludG8gYW55IGlzc3VlcywgcmVsYXRlZCB0byB0aGUgSkNCIGNvZGUsIGxpa2UgYnVncywgKipzdGFydCBieSBzZWFyY2hpbmcqKiB0aGUgKCpvcGVuICYgY2xvc2VkKikgaXNzdWVzIG92ZXIgb24gR2l0aHViLCBhbmQgaWYgdGhlIGlzc3VlIGhhcyBub3QgYmVlbiBtZW50aW9uZWQgYmVmb3JlLCAqKnRoZW4gb25seSoqIG9wZW4gYSBuZXcgaXNzdWUsIGZvbGxvd2luZyB0aGUgW2NvbW11bml0eSBndWlkZWxpbmVzXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9ibG9iL21hc3Rlci8uZ2l0aHViL0NPTlRSSUJVVElORy5tZCkuDQoNCldIWSBHSVZFIElUIEFXQVkgTElLRSBUSElTPw0KPT09PT09PT09PT09PT09PT09PT0NCg0KPiBXZSBhcmUgT3BlbiBTb3VyY2UgRW50aHVzaWFzdA0KPiBXaG8gU3VwcG9ydCB0aGUgSm9vbWxhIENvbW11bml0eQ0KDQpPdXIgaWRlYSB3YXMgdG8gYWxtb3N0IGxldCB0aGlzIHRvb2wgc2VydmUgYXMgYSBjaGVhdCBzaGVldCB0byBob3cgdGhpbmdzIGNhbiBiZSBkb25lLi4uIGFuZCB3aXRoIHRoZSBoZWxwIG9mIG90aGVyIGRldmVsb3BlcnMgZW5kIHVwIGZvcm11bGF0aW5nIHRoZSB3YXkgaG93IHRoaW5ncyBub3Qgb25seSBjYW4sIGJ1dCBtdXN0IGJlIGRvbmUgdG8gaW5zdXJlIHNlY3VyZSwgc3RhYmxlLCBzY2FsYWJsZSBhbmQgbWFpbnRhaW5hYmxlIGNvZGUgaXMgcHJvZHVjZWQuIA0KDQpNQUtJTkcgSVQgQkVUVEVSIQ0KPT09PT09PT09PT09PT09PT09PT0NCg0KQ29tcG9uZW50IEJ1aWxkZXIgaXMgbWFwcGVkIGFzIGEgY29tcG9uZW50IGluIGl0c2VsZiBvbiBteSBsb2NhbCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gU28gd2UgYXJlIGltcHJvdmluZyBpdCBsaWtlIHlvdSB3b3VsZCBhbnkgb3RoZXIgY29tcG9uZW50IGluIGl0LiBJIGFtIGxvb2tpbmcgZm9yIGRldmVsb3BlcnMgd2l0aCB0aGUgKipza2lsbCoqIGFuZCB0aGUgKipkZXNpcmUqKiB0byByZWFsbHkgam9pbiB1cy4uLiBhbmQgdGhlbiB3ZSB3aWxsIFtwb3NzaWJsZSBnaXZlIHRoZW0gYWNjZXNzXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PWxMT2Z4OVlBN1ZRJmxpc3Q9UExRUkdGSThYWl93c2Z6M05kS2F3Q2lZc0FMdVotR2h3SikgdG8gdGhpcywgc28gd2UgY2FuIGFsbCBoZWxwIGltcHJvdmUgdGhpcyBzaW1wbGUsIHlldCBhZHZhbmNlZCB0b29sLg0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oaHR0cHM6Ly93d3cudmRtLmlvLykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI0FDVFVBTFZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmllbGQgY291bnQqOiAqKiMjI0ZJRUxEX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQojIyBEb25hdGlvbnMNCg0KQ29tZSBvbiBidXkgVkRNIGEgY29mZmVlIDopDQogKiBPcGVuIENvbGxlY3RpdmU6IFtKb29tbGEtQ29tcG9uZW50LUJ1aWxkZXJdKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlcik=', '', '', 'Certification Authority', '', '', 'Certification Authority', '.git, .github', '', 1, 1, 'https://www.vdm.io/updates/certificationauthority_update_server.xml', 'https://www.vdm.io', '', 'CWxMWTAk4dMjFc8FuG0fB9okNIENoXyPlnUbkdHx4qE=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 12, '', 1, 69),
(36, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn', '', 'default.txt', '', '', 'VDM', '1.1.1', 'Copyright (C) 2015. All Rights Reserved', '2017-09-20 01:21:36', '', '/XJGJoD2dKTqyJhxXeoGE0YK5BBlyg1fUR0SpwxDH30=', 'a8a8NXtGxOCg8ASo0XdOOeR8u5RUag2ET+ikfWxULmo=', '', '0jZ65WmtQKZrZKOJcAn4blOqs1kR7ILcMpYnjcvmCT8=', '', '', '', 1, '', '', 'joomla@vdm.io', '', '', 'fb5eHOid0kP2pP2rMqTX0T2IVb548xGD/yEis81L4Tw=', '', '2dea78a6-e0be-4260-8f7d-b278e0b661a8', 'images/demo300.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Hello-World-Component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-03-07 13:38:50', '', 'Hello World', 'HelloWorld', 'JCB', 4, '', '', 'W0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KW0NVU1RPTUNPREU9cmVtb3ZlRm9sZGVyXQ==', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQpbQ1VTVE9NQ09ERT1yZWFkTUVjb250cmlidXRvcnNd', '', '', 'Hello World', '', '', 'Hello World (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Hello-World-Component/master/helloworld_updateserver.xml', 'https://www.vdm.io', '', '5ZLmKq90y+Rw5NhMdx4zzQIzGCQXnXPXNNKPt1VUJVo=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 26, '', 1, 48),
(38, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.11', 'Copyright (C) 2015. All Rights Reserved', '2018-08-06 14:56:04', '', 'DDqhKfMaxgOxOi8Fi/LRCdMLwGehkjYNuvi7ABAiLPY=', '2lcbvIz8wbuYvgcTT0AkruIGkKk/eITskCWhJUe5iZw=', '', 'EOj0Eq9DxXxfbb1es7CtSnWWu/9MbbGia2HVegss6bc=', '', '', 'A_101', 2, '', 'Anthropometry', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_anthropometry', '+2q2ksbp2S8xrelxzlL93YeOn85WOaaH6AMXe8MRdhZErBnfo+S81DfJPMAD8ZTSjVn3LwQpzOcwo+NNJO1Kdw==', '', '12327a9d-f9c1-4ae1-bc23-5b254ce3bf5b', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:39:17', 2, 'Anthropometry', 'anthropometry', '', 4, '', '', 'W0NVU1RPTUNPREU9YW50aHJvcG9tZXRyeUhlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Anthropometry', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0dXNfbm9ybWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdHVzX25vcm1gIChgaWRgLCBgY2FsY3VsYXRpb25fdHlwZWAsIGBjYWxjdWxhdGlvbnNgLCBgc2VsZWN0aW9uYCwgYHRlbXBsYXRlc2AsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMTAsIDI0LjlcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMjUsIDI5LjlcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMzAsIDQwXCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCAyMDBcIn19JywgJ2JtaScsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJkZXNpcmFibGVcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkRlc2lyYWJsZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMSBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkRlc2lyYWJsZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2VzcyB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+RGVzaXJhYmxlPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJncmFkZSAxIG9iZXNpdHlcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RGVzaXJhYmxlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R3JhZGUgMSBPYmVzaXR5PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5EZXNpcmFibGU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnkgdWstdmlzaWJsZS1zbWFsbFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiZ3JhZGUgMiBvYmVzaXR5XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkRlc2lyYWJsZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMSBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+R3JhZGUgMiBPYmVzaXR5PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RGVzaXJhYmxlPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMSBPYmVzaXR5PFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdyYWRlIDMgb2Jlc2l0eVxcL21vcmJpZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5EZXNpcmFibGU8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMiBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkRlc2lyYWJsZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAxOTo0MTo1NScpLA0KKDIsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMC45NTksIDIwLjAwXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuOTEsIDAuOTU4XCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuMDAwMDAxLCAwLjk1XCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuODU5LCAyMFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLjgxLCAwLjg1OFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLjAwLCAwLjgwXCJ9fScsICd3aHInLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwiaGlnaCByaXNrXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5IaWdoIHJpc2s8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPk1vZGVyYXRlIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkxvdyByaXNrPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+SGlnaCByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+TW9kZXJhdGUgcmlzazxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+TG93IHJpc2s8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5IaWdoIHJpc2s8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcIm1vZGVyYXRlIHJpc2tcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+SGlnaCByaXNrPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+TW9kZXJhdGUgcmlzazxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+TG93IHJpc2s8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+SGlnaCByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Mb3cgcmlzazxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJsb3cgcmlza1wiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5IaWdoIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPk1vZGVyYXRlIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Mb3cgcmlzazxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5IaWdoIHJpc2s8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkxvdyByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2VzcyB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+TG93IHJpc2s8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAxOTo0OToxMScpLA0KKDMsIDEsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjIyLjRcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE3LjRcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE1LjlcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE0LjFcIn0sXCJjYWxjdWxhdGlvbnM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjkuNFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjQuMlwifSxcImNhbGN1bGF0aW9uczZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjAuNVwifSxcImNhbGN1bGF0aW9uczdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMTlcIn0sXCJjYWxjdWxhdGlvbnM4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjE3LjVcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEzLjlcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNi4xXCJ9LFwiY2FsY3VsYXRpb25zMTFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjIuNVwifSxcImNhbGN1bGF0aW9uczEyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIxLjFcIn0sXCJjYWxjdWxhdGlvbnMxM1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxOS42XCJ9LFwiY2FsY3VsYXRpb25zMTRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMTYuM1wifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjI3LjVcIn0sXCJjYWxjdWxhdGlvbnMxNlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyNC4xXCJ9LFwiY2FsY3VsYXRpb25zMTdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjIuN1wifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIxLjNcIn0sXCJjYWxjdWxhdGlvbnMxOVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxNy45XCJ9LFwiY2FsY3VsYXRpb25zMjBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjguNVwifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjI1XCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjMuNVwifSxcImNhbGN1bGF0aW9uczIzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zMjRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTguNFwifSxcImNhbGN1bGF0aW9uczI1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjI3LjdcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyMy43XCJ9LFwiY2FsY3VsYXRpb25zMjdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjIuMVwifSxcImNhbGN1bGF0aW9uczI4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjIwLjZcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIxNy4xXCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjkuM1wifSxcImNhbGN1bGF0aW9uczMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjI0LjlcIn0sXCJjYWxjdWxhdGlvbnMzMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyMy4xXCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjEuNlwifSxcImNhbGN1bGF0aW9uczM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjE4XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMzIuMVwifSxcImNhbGN1bGF0aW9uczM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjI4LjFcIn0sXCJjYWxjdWxhdGlvbnMzN1wiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNi40XCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjQuOVwifSxcImNhbGN1bGF0aW9uczM5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIxLjNcIn0sXCJjYWxjdWxhdGlvbnM0MFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIzNS42XCJ9LFwiY2FsY3VsYXRpb25zNDFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMzEuNlwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjMwLjFcIn0sXCJjYWxjdWxhdGlvbnM0M1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyOC41XCJ9LFwiY2FsY3VsYXRpb25zNDRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjVcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzNi42XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMzIuNVwifSxcImNhbGN1bGF0aW9uczQ3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjMwLjlcIn0sXCJjYWxjdWxhdGlvbnM0OFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyOS4zXCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjUuMVwifX0nLCAnZmF0X3BlcmNlbnRhZ2UnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXIgdWstdmlzaWJsZS1zbWFsbFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+RmFpcjxcXC9idXR0b24+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAyMDowMToyMycpOw0KDQotLQ0KLS0gRHVtcGluZyBkYXRhIGZvciB0YWJsZSBgI19fW1tbY29tcG9uZW50XV1dX2NoYXJ0YA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV9jaGFydGAgKGBpZGAsIGBkZXRhaWxzYCwgYGphdmFzY3JpcHRfdGFibGVgLCBgbmFtZWAsIGBudW1iZXJgLCBgdGFyZ2V0YCwgYHRhcmdldF9maWVsZHNgLCBgdHlwZWAsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJMYWJlbFwiLFwidHlwZVwiOlwic3RyaW5nXCJ9LHtcImxhYmVsXCI6XCJWYWx1ZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCJMZWFuIFdlaWdodFwifSx7XCJ2XCI6OTIuMzR9XX0se1wiY1wiOlt7XCJ2XCI6XCJGYXQgV2VpZ2h0XCJ9LHtcInZcIjoxOS42NX1dfV19LFwib3B0aW9uc1wiOntcImZvbnROYW1lXCI6XCJWZXJkYW5hXCIsXCJoQXhpc1wiOntcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwibm9uZVwiLFwibGVnZW5kVGV4dFN0eWxlXCI6e1wiY29sb3JcIjpcIiMyMjJcIixcImZvbnRTaXplXCI6MTIsXCJib2xkXCI6dHJ1ZSxcIml0YWxpY1wiOnRydWV9LFwidGl0bGVcIjpcIkJvZHkgV2VpZ2h0XCIsXCJ0aXRsZVRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMDAwXCIsXCJmb250U2l6ZVwiOlwiMjBcIixcImJvbGRcIjp0cnVlfSxcInZBeGVzXCI6W3tcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJsb2dTY2FsZVwiOmZhbHNlfSx7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwibG9nU2NhbGVcIjpmYWxzZX1dLFwidHlwZVwiOlwibGluZVwiLFwiYm9vbGVhblJvbGVcIjpcImNlcnRhaW50eVwiLFwic2VyaWVzXCI6W3tcInR5cGVcIjpcImJhcnNcIn0se1widHlwZVwiOlwiYmFyc1wifSx7XCJ0eXBlXCI6XCJiYXJzXCJ9LHtcInR5cGVcIjpcImJhcnNcIn0se1widHlwZVwiOlwiYmFyc1wifV0sXCJ3aWR0aFwiOjYwMCxcImhlaWdodFwiOjM3MSxcImlzM0RcIjp0cnVlLFwicGllSG9sZVwiOjAsXCJzbGljZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiM5M2M0N2RcIn0sXCIxXCI6e1wiY29sb3JcIjpcIiNiNGE3ZDZcIn19LFwicGllU2xpY2VUZXh0XCI6XCJsYWJlbFwiLFwidGhlbWVcIjpcIm1heGltaXplZFwifSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIlBpZUNoYXJ0XCJ9JywgJyhMYWJlbCwgVmFsdWUpXHJcbihbYW50aHJvcG9tZXRyeV9sYWJlbF9sZWFuX3dlaWdodF0sIFthbnRocm9wb21ldHJ5X2xlYW5fd2VpZ2h0XSlcclxuKFthbnRocm9wb21ldHJ5X2xhYmVsX2ZhdF93ZWlnaHRdLCBbYW50aHJvcG9tZXRyeV9mYXRfd2VpZ2h0XSknLCAnQm9keSBXZWlnaHQnLCAzLCAxLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcImxlYW5fd2VpZ2h0XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcImZhdF93ZWlnaHRcIn19JywgJ1BpZUNoYXJ0JywgMSwgJzIwMTgtMDktMjcgMTA6Mzg6NDMnKSwNCigyLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIkJNSVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJGYXQgUGVyY2VudGFnZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzA4XCJ9LHtcInZcIjozMi43Mn0se1widlwiOjIzLjYzfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8wNFwifSx7XCJ2XCI6MzIuNzJ9LHtcInZcIjoyMy42M31dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjMyLjcyfSx7XCJ2XCI6MTcuNTV9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzEwXCJ9LHtcInZcIjozMi43Mn0se1widlwiOjE3LjU1fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOVwifSx7XCJ2XCI6MzAuNTV9LHtcInZcIjoyOC4yfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOFwifSx7XCJ2XCI6MzIuNzJ9LHtcInZcIjoyNi43MX1dfV19LFwib3B0aW9uc1wiOntcImhBeGlzXCI6e1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwic2xhbnRlZFRleHRBbmdsZVwiOjMwLFwic2xhbnRlZFRleHRcIjp0cnVlLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidmlld1dpbmRvd1wiOm51bGwsXCJ2aWV3V2luZG93TW9kZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwiaW5cIixcInRpdGxlXCI6XCJQcm9ncmVzc1wiLFwidkF4ZXNcIjpbe1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcImxvZ1NjYWxlXCI6ZmFsc2V9LHtcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJsb2dTY2FsZVwiOmZhbHNlfV0sXCJpc1N0YWNrZWRcIjpmYWxzZSxcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwibGluZVdpZHRoXCI6MixcImludGVycG9sYXRlTnVsbHNcIjp0cnVlLFwiZG9tYWluQXhpc1wiOntcImRpcmVjdGlvblwiOi0xfSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcInNlcmllc1wiOntcIjBcIjp7XCJ0YXJnZXRBeGlzSW5kZXhcIjoxLFwiZXJyb3JCYXJzXCI6e1wiZXJyb3JUeXBlXCI6XCJub25lXCJ9fSxcIjFcIjp7XCJ0YXJnZXRBeGlzSW5kZXhcIjowLFwiZXJyb3JCYXJzXCI6e1wiZXJyb3JUeXBlXCI6XCJub25lXCIsXCJtYWduaXR1ZGVcIjoxMH19fSxcInRoZW1lXCI6XCJtYXhpbWl6ZWRcIixcImZvY3VzVGFyZ2V0XCI6XCJjYXRlZ29yeVwifSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkxpbmVDaGFydFwifScsICcoRGF5LCBbYW50aHJvcG9tZXRyeV9sYWJlbF9ibWldLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9mYXRfcGVyY2VudGFnZV0pXHJcbihbMF9hbnRocm9wb21ldHJ5X2RheV0sIFswX2FudGhyb3BvbWV0cnlfYm1pXSwgWzBfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pXHJcbihbMV9hbnRocm9wb21ldHJ5X2RheV0sIFsxX2FudGhyb3BvbWV0cnlfYm1pXSwgWzFfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pXHJcbihbMl9hbnRocm9wb21ldHJ5X2RheV0sIFsyX2FudGhyb3BvbWV0cnlfYm1pXSwgWzJfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pJywgJ1Byb2dyZXNzJywgNCwgMywgJ3tcInRhcmdldF9maWVsZHMwXCI6e1wic2VsZWN0aW9uXCI6XCJkYXlcIn0sXCJ0YXJnZXRfZmllbGRzMVwiOntcInNlbGVjdGlvblwiOlwiYm1pXCJ9LFwidGFyZ2V0X2ZpZWxkczJcIjp7XCJzZWxlY3Rpb25cIjpcImZhdF9wZXJjZW50YWdlXCJ9fScsICdMaW5lQ2hhcnQnLCAxLCAnMjAxOC0wOS0yNyAxMToyODozNycpLA0KKDMsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJEYXlcIixcInR5cGVcIjpcInN0cmluZ1wifSx7XCJsYWJlbFwiOlwiV2VpZ2h0XCIsXCJ0eXBlXCI6XCJudW1iZXJcIn1dLFwicm93c1wiOlt7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjExMn1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMDkvMTBcIn0se1widlwiOjExMn1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMDkvMDlcIn0se1widlwiOjk5fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOFwifSx7XCJ2XCI6MTEyfV19XX0sXCJvcHRpb25zXCI6e1widGl0bGVcIjpcIldlaWdodFwiLFwidkF4ZXNcIjpbe1widGl0bGVcIjpudWxsLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfX0se1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbH1dLFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcImxpbmVXaWR0aFwiOjIsXCJoQXhpc1wiOntcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjpudWxsLFwidmlld1dpbmRvd01vZGVcIjpudWxsLFwic2xhbnRlZFRleHRBbmdsZVwiOjMwLFwic2xhbnRlZFRleHRcIjp0cnVlLFwidGl0bGVcIjpcIlwifSxcImxlZ2VuZFwiOlwibm9uZVwiLFwid2lkdGhcIjo2MDAsXCJoZWlnaHRcIjozNzEsXCJkb21haW5BeGlzXCI6e1wiZGlyZWN0aW9uXCI6LTF9LFwic2VyaWVzXCI6e1wiMFwiOntcImNvbG9yXCI6XCIjNzQxYjQ3XCIsXCJ0YXJnZXRBeGlzSW5kZXhcIjowLFwibGluZVdpZHRoXCI6NCxcInBvaW50U2l6ZVwiOjEwfX0sXCJ0aGVtZVwiOlwibWF4aW1pemVkXCJ9LFwic3RhdGVcIjp7fSxcInZpZXdcIjp7XCJjb2x1bW5zXCI6bnVsbCxcInJvd3NcIjpudWxsfSxcImlzRGVmYXVsdFZpc3VhbGl6YXRpb25cIjp0cnVlLFwiY2hhcnRUeXBlXCI6XCJMaW5lQ2hhcnRcIn0nLCAnKERheSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfd2VpZ2h0XSlcclxuKFswX2FudGhyb3BvbWV0cnlfZGF5XSwgWzBfYW50aHJvcG9tZXRyeV93ZWlnaHRdKVxyXG4oWzFfYW50aHJvcG9tZXRyeV9kYXldLCBbMV9hbnRocm9wb21ldHJ5X3dlaWdodF0pXHJcbihbMl9hbnRocm9wb21ldHJ5X2RheV0sIFsyX2FudGhyb3BvbWV0cnlfd2VpZ2h0XSlcclxuKFszX2FudGhyb3BvbWV0cnlfZGF5XSwgWzNfYW50aHJvcG9tZXRyeV93ZWlnaHRdKVxyXG4oWzRfYW50aHJvcG9tZXRyeV9kYXldLCBbNF9hbnRocm9wb21ldHJ5X3dlaWdodF0pJywgJ1dlaWdodCcsIDUsIDMsICd7XCJ0YXJnZXRfZmllbGRzMFwiOntcInNlbGVjdGlvblwiOlwiZGF5XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcIndlaWdodFwifX0nLCAnTGluZUNoYXJ0JywgMSwgJzIwMTgtMTAtMDQgMjE6Mzc6MTgnKSwNCig0LCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIkNhbGZcIixcInR5cGVcIjpcIm51bWJlclwifSx7XCJsYWJlbFwiOlwiQ2hlc3RcIixcInR5cGVcIjpcIm51bWJlclwifSx7XCJsYWJlbFwiOlwiSGlwXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIk1pZGRsZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJOYXZlbFwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJOZWNrXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlRoaWdoXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlVwcGVyIEFybVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzA4XCJ9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6MTA2LjV9LHtcInZcIjozMn0se1widlwiOm51bGx9LHtcInZcIjpudWxsfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8wOFwifSx7XCJ2XCI6NDIuNX0se1widlwiOjExM30se1widlwiOjg1fSx7XCJ2XCI6ODB9LHtcInZcIjoxMTB9LHtcInZcIjpudWxsfSx7XCJ2XCI6MjN9LHtcInZcIjoyM31dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjQyLjV9LHtcInZcIjoxMTkuNX0se1widlwiOjEyNS4yfSx7XCJ2XCI6MTA2LjV9LHtcInZcIjoxMDYuNX0se1widlwiOm51bGx9LHtcInZcIjo2NS41fSx7XCJ2XCI6MzYuNX1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjo4MH0se1widlwiOjMwfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzEwXCJ9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6ODB9LHtcInZcIjozMH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOVwifSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOjExMH0se1widlwiOjQ1fSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzA4XCJ9LHtcInZcIjo0Mi41fSx7XCJ2XCI6MTE5LjV9LHtcInZcIjoxMTUuNX0se1widlwiOjEwNi41fSx7XCJ2XCI6MTEyfSx7XCJ2XCI6bnVsbH0se1widlwiOjY1LjV9LHtcInZcIjozNi41fV19XX0sXCJvcHRpb25zXCI6e1wibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwibm9uZVwiLFwidGl0bGVcIjpcIkNpcmN1bWZlcmVuY2VzXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbCxcInRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMjIyXCIsXCJmb250U2l6ZVwiOlwiMTJcIixcIml0YWxpY1wiOmZhbHNlfSxcInNsYW50ZWRUZXh0QW5nbGVcIjo2MCxcInNsYW50ZWRUZXh0XCI6dHJ1ZX0sXCJ3aWR0aFwiOjYwMCxcImhlaWdodFwiOjM3MSxcImludGVycG9sYXRlTnVsbHNcIjp0cnVlLFwiZm9jdXNUYXJnZXRcIjpcImNhdGVnb3J5XCIsXCJzZXJpZXNcIjp7XCIwXCI6e1widGFyZ2V0QXhpc0luZGV4XCI6MX0sXCIyXCI6e1widGFyZ2V0QXhpc0luZGV4XCI6MSxcImxpbmVXaWR0aFwiOjJ9LFwiM1wiOntcInRhcmdldEF4aXNJbmRleFwiOjF9fSxcImRvbWFpbkF4aXNcIjp7XCJkaXJlY3Rpb25cIjoxfSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcImZvbnROYW1lXCI6XCJWZXJkYW5hXCIsXCJ0aXRsZVRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMDAwXCIsXCJmb250U2l6ZVwiOjEyLFwiYm9sZFwiOnRydWUsXCJpdGFsaWNcIjp0cnVlfX0sXCJzdGF0ZVwiOnt9LFwidmlld1wiOntcImNvbHVtbnNcIjpudWxsLFwicm93c1wiOm51bGx9LFwiaXNEZWZhdWx0VmlzdWFsaXphdGlvblwiOmZhbHNlLFwiY2hhcnRUeXBlXCI6XCJMaW5lQ2hhcnRcIn0nLCAnKERheSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfY2FsZl0sIFthbnRocm9wb21ldHJ5X2xhYmVsX2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfaGlwXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfbWlkZGxlXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9jaXJjdW1mZXJlbmNlc19uZWNrXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfdGhpZ2hdLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzBfYW50aHJvcG9tZXRyeV9kYXldLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzBfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFswX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzBfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzFfYW50aHJvcG9tZXRyeV9kYXldLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzFfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFsxX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzFfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzJfYW50aHJvcG9tZXRyeV9kYXldLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzJfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFsyX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzJfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzNfYW50aHJvcG9tZXRyeV9kYXldLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzNfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFszX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzNfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzRfYW50aHJvcG9tZXRyeV9kYXldLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzRfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFs0X2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzRfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4vLyBUaGUgcmVzdCBvZiB0aGUgcm93cyBhcmUgYWRkZWQgZHluYW1pY2FsbHlcclxuLy8gWW91IG5lZWQgb25seSBzZXQgdGhlIGZldyBhYm92ZScsICdDaXJjdW1mZXJlbmNlcycsIDMsIDMsICd7XCJ0YXJnZXRfZmllbGRzMFwiOntcInNlbGVjdGlvblwiOlwiZGF5XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX2NhbGZcIn0sXCJ0YXJnZXRfZmllbGRzMlwiOntcInNlbGVjdGlvblwiOlwiY2lyY3VtZmVyZW5jZXNfY2hlc3RcIn0sXCJ0YXJnZXRfZmllbGRzM1wiOntcInNlbGVjdGlvblwiOlwiY2lyY3VtZmVyZW5jZXNfaGlwXCJ9LFwidGFyZ2V0X2ZpZWxkczRcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX21pZGRsZVwifSxcInRhcmdldF9maWVsZHM1XCI6e1wic2VsZWN0aW9uXCI6XCJjaXJjdW1mZXJlbmNlc19uYXZlbFwifSxcInRhcmdldF9maWVsZHM2XCI6e1wic2VsZWN0aW9uXCI6XCJjaXJjdW1mZXJlbmNlc19uZWNrXCJ9LFwidGFyZ2V0X2ZpZWxkczdcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX3RoaWdoXCJ9LFwidGFyZ2V0X2ZpZWxkczhcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX3VwcGVyX2FybVwifX0nLCAnTGluZUNoYXJ0JywgJycsICcyMDE4LTEwLTA0IDIxOjUxOjQ4Jyk7DQo=', '', 'Anthropometry (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'AMcPvMJWBRsUNjLuEwg9tYNEFkXRrfn6TMayKbUalW8=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 151, '', 1, 47),
(39, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2018-08-10 13:06:34', '', 'WFTndiFWqEP3VQCQ0AxC8lHxV2wt5zmqZd676/YNImU=', 'IyB+NbU+o4/3Gt/VDPtD3P5YYgkui9RLCYcrmKai5jk=', '', 'ajsiq1dXN27cjOsdcFpVk82R1tItqdc0+DPn4xBmlX8=', '', '', 'A_188', 2, '', 'Medical Aid Info', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_medicalaid', 'KCDC7tfGMQPxIWoQYwWHJri/Dv+uBt4wxLYKnbb4Aw/V5Jc0teUehHc+hK5gxg5a', '', 'a918111a-c0f8-40b6-9484-14a718222cec', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:37:56', 2, 'Medical Aid', 'medicalaid', '', 4, '', '', 'W0NVU1RPTUNPREU9bWVkaWNhbGFpZEhlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Medical Aid Info', '', '', 'Medical Aid (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'wbujqapJbtxhp5KMWAoAL0nuh47xUD0cYnzAC8Lisqk=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 38, '', 1, 20),
(40, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2018-08-21 13:15:04', '', 'wqakjzYJsqZ4J0z8Ubf+/uGndhzVE9VNr7qzCAcZxms=', '9Qfx4NouLwPCAleYwuyiyl4G3dOIJ2Z63XVDJyJyWDU=', '', 'jPr2Qo+KKztte9yW4/Lkm/3YQIaRdwZf2odiXY1EWww=', '', '', 'A_189', 2, '', 'Contact Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_contactdetails', 'Opdm097HIpeBhw8ceGrCBNLj3DH4qurxw6Cq/NIiQK9hEBr39lcEych/zvStB//ZE48LM8NjZ1k56VIxMLUr8w==', '', '4b11bb3d-fabf-4e7b-a61a-2777ac58f2d1', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:37:52', 2, 'Contact', 'contactdetails', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29udGFjdGRldGFpbHNIZWxwZXJCb3RoXQ==', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Contact Details', '', '', 'Contact Details (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'NAm0jkpCAyIQBpz1KePHBQNvgSmi3dCvevy91gyPOaM=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 40, '', 1, 46),
(41, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2018-08-21 19:33:15', '', '9M+/Gjj00W7CZV5jgGmCKquJuUQb2thGxeT9+oVPJCQ=', 'YV5sZj5kK2MugOfwacI+zlMqpvxVUULI2jzGvKhjfb8=', '', '4aUyispvHA6idDSZH2HhZH+y+BdOTFcXoaWNjVA16xA=', '', '', 'A_190', 2, '', 'Personal Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_personaldetails', '/bw9MqxWvsKcP5ob3e+EXyxycrzNrbHH6RvL6rkYypQ0OUjncUIgCwsTxItFSYPdosA6WY+rT9RW6khunqSS9Q==', '', 'e6583709-0244-4d3a-807e-191e0f4a38f5', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:37:49', 2, 'Personal', 'personaldetails', '', 4, '', '', 'W0NVU1RPTUNPREU9cGVyc29uYWxkZXRhaWxzSGVscGVyQm90aF0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Personal Details', '', '', 'Personal Details (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', '9fJdT9+z3MMBT3JP/g8TBiv8yjoeWtZncrzm5Tlaa6Y=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 37, '', 1, 45),
(42, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2018-09-12 00:41:47', '', 'tsbYVAclNERm1P8eqajX42R8Kbtmr6IUY5pnPNK7Myk=', '0GasKfzV/E7i5pzYhOyNPTbtF3G1aIIw9rTQc2TxDxw=', '', 'd5JzN7wmc7Z45uLmxvB/VaWD273BbnWGzcX/8Y48g2E=', '', '', 'A_193', 2, '', 'Doctor Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_doctordetails', 'FMIbYsaxQuRN2zWW9kKIg8E1wS2ZHpO8WwYnHxYZ8/XQaQ1IbaMprFLGolaP6dAbisgWMy+MyIMusJsLCuMp8w==', '', '7f8d6250-0847-4c9e-94f2-a763c2b92916', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:39:19', 2, 'Doctor', 'doctordetails', '', 4, '', '', 'W0NVU1RPTUNPREU9ZG9jdG9yZGV0YWlsc0hlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Doctor Details', '', '', 'Doctor Details (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', '7znurjprij+BlsXeCIs1X9qJN3hWKlIndblN0kQODKs=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 17, '', 1, 44),
(43, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.5', 'Copyright (C) 2015. All Rights Reserved', '2018-09-12 19:55:57', '', 'lVh4+h/JdcdCsM3P8kN5rga7qPxsad0Upvtg1c5tAaY=', 'TnqxzaYo3URMy9ERxS5oceROiGJ1j9bXoKvSl+89LFU=', '', 'pkfWlOLugsjdtcw61qCPc3SO5GsoYv28sla7akR47bI=', '', '', '', 1, '', 'Communicate', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_communicate', 'cm0Oae7wqQ7/T9g9jCTeZFq59QfbS3mtozQAfcyn/78AdUIytw7wJEK/PlElD1NyMb7wmx/hTI6pJ/l5+8w22g==', '', '4b980308-89af-4197-9806-74db00409630', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:37:32', 2, 'Communicate', 'communicate', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29tbXVuaWNhdGVIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Communicate', '', '', 'Communicate (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'rrLXYfJQAdN+hwWEWgnKC3FkonVlvTuKS+atUkJvQkQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 55, '', 1, 43),
(44, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2018-10-09 16:09:37', '', 'zyzQlJpk6sNhrkRgaomXxwY8XIIGpowvew7Oxv9MpfY=', '+ekjDgmY0soLJ4cWC7dlPMV4kZyIbyi4Sm5u7MD3Wds=', '', 'iWFsbz05JeFtBV83U1KslTdA+dwovh7BanK7iD9VVKY=', '', '', 'A_198', 2, '', 'Fitness Test', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_fitnesstest', 'Y7w/ZptPLhfcWIv4bKaIkmYHw07wrf9hjbF145UB0uR8lQ1CfLhQhI27vhUjSlA54KC9pFOTD3Ae2+CU/MCO9g==', '', '718b6c81-471b-49c7-b24d-d8fb526b0eff', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:37:28', 2, 'Fitness Test', 'fitnesstest', '', 4, '', '', 'W0NVU1RPTUNPREU9Zml0bmVzc3Rlc3RIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Fitness Test', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0dXNfbm9ybWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdHVzX25vcm1gIChgaWRgLCBgY2FsY3VsYXRpb25fdHlwZWAsIGBjYWxjdWxhdGlvbnNgLCBgc2VsZWN0aW9uYCwgYHRlbXBsYXRlc2AsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsIDEsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjUzXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI1MFwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNDRcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjM5XCJ9LFwiY2FsY3VsYXRpb25zNFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzNVwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNThcIn0sXCJjYWxjdWxhdGlvbnM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjU1XCJ9LFwiY2FsY3VsYXRpb25zN1wiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczhcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDRcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjM5XCJ9LFwiY2FsY3VsYXRpb25zMTBcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNjBcIn0sXCJjYWxjdWxhdGlvbnMxMVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI1NlwifSxcImNhbGN1bGF0aW9uczEyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjUxXCJ9LFwiY2FsY3VsYXRpb25zMTNcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDZcIn0sXCJjYWxjdWxhdGlvbnMxNFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjYyXCJ9LFwiY2FsY3VsYXRpb25zMTZcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNTlcIn0sXCJjYWxjdWxhdGlvbnMxN1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI1NFwifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjQ4XCJ9LFwiY2FsY3VsYXRpb25zMTlcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiNDJcIn0sXCJjYWxjdWxhdGlvbnMyMFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI2N1wifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjYzXCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNTlcIn0sXCJjYWxjdWxhdGlvbnMyM1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCI1NVwifSxcImNhbGN1bGF0aW9uczI0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjUwXCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNDdcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczI3XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMjhcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMzBcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczMwXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjUyXCJ9LFwiY2FsY3VsYXRpb25zMzFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNDVcIn0sXCJjYWxjdWxhdGlvbnMzMlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczMzXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMzRcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnMzNVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI1NVwifSxcImNhbGN1bGF0aW9uczM2XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjQ3XCJ9LFwiY2FsY3VsYXRpb25zMzdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNDJcIn0sXCJjYWxjdWxhdGlvbnMzOFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIzN1wifSxcImNhbGN1bGF0aW9uczM5XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjI4XCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNThcIn0sXCJjYWxjdWxhdGlvbnM0MVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjQ0XCJ9LFwiY2FsY3VsYXRpb25zNDNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDBcIn0sXCJjYWxjdWxhdGlvbnM0NFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzMVwifSxcImNhbGN1bGF0aW9uczQ1XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjY0XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNTVcIn0sXCJjYWxjdWxhdGlvbnM0N1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQ4XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjQ0XCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMzdcIn19JywgJ3BhcnRpYWxfY3VybF91cHMnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZTI4MzI3XFxcIj48Yj5GYWlyPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcIndvcmRcIjpcImF2ZXJhZ2VcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiMyZDcwOTFcXFwiPjxiPkF2ZXJhZ2U8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzM1wiOntcInRhcmdldFwiOlwiM1wiLFwid29yZFwiOlwiZ29vZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9fScsIDEsICcyMDE4LTEwLTExIDE5OjU2OjU5JyksDQooMiwgMSwgJ3tcImNhbGN1bGF0aW9uczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMThcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI4XCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCI3XCJ9LFwiY2FsY3VsYXRpb25zNFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzXCJ9LFwiY2FsY3VsYXRpb25zNVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMTZcIn0sXCJjYWxjdWxhdGlvbnM3XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjExXCJ9LFwiY2FsY3VsYXRpb25zOFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxMFwifSxcImNhbGN1bGF0aW9uczlcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiNFwifSxcImNhbGN1bGF0aW9uczEwXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjI3XCJ9LFwiY2FsY3VsYXRpb25zMTFcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjJcIn0sXCJjYWxjdWxhdGlvbnMxMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxNlwifSxcImNhbGN1bGF0aW9uczEzXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMTRcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiOVwifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMTZcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjhcIn0sXCJjYWxjdWxhdGlvbnMxN1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyMlwifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjE5XCJ9LFwiY2FsY3VsYXRpb25zMTlcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTRcIn0sXCJjYWxjdWxhdGlvbnMyMFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIzN1wifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjMxXCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjRcIn0sXCJjYWxjdWxhdGlvbnMyM1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczI0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIxOFwifSxcImNhbGN1bGF0aW9uczI3XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMjhcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTBcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI3XCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnMzMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczMyXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjE0XCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTJcIn0sXCJjYWxjdWxhdGlvbnMzNFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI4XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMzNcIn0sXCJjYWxjdWxhdGlvbnMzNlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyN1wifSxcImNhbGN1bGF0aW9uczM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTdcIn0sXCJjYWxjdWxhdGlvbnMzOVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIxNVwifSxcImNhbGN1bGF0aW9uczQwXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjQzXCJ9LFwiY2FsY3VsYXRpb25zNDFcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMzRcIn0sXCJjYWxjdWxhdGlvbnM0MlwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyOFwifSxcImNhbGN1bGF0aW9uczQzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIzXCJ9LFwiY2FsY3VsYXRpb25zNDRcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjFcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQ2XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjQwXCJ9LFwiY2FsY3VsYXRpb25zNDdcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMzJcIn0sXCJjYWxjdWxhdGlvbnM0OFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyNlwifSxcImNhbGN1bGF0aW9uczQ5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjIzXCJ9fScsICdwdXNoX3VwcycsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMTk6NTg6NDUnKSwNCigzLCAxLCAne1wiY2FsY3VsYXRpb25zMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczFcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMThcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxMFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiN1wifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjIzXCJ9LFwiY2FsY3VsYXRpb25zN1wiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxNFwifSxcImNhbGN1bGF0aW9uczhcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTJcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjhcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIzM1wifSxcImNhbGN1bGF0aW9uczExXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjI3XCJ9LFwiY2FsY3VsYXRpb25zMTJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjJcIn0sXCJjYWxjdWxhdGlvbnMxM1wiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxN1wifSxcImNhbGN1bGF0aW9uczE0XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMTVcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNDNcIn0sXCJjYWxjdWxhdGlvbnMxNlwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIzNFwifSxcImNhbGN1bGF0aW9uczE3XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjI4XCJ9LFwiY2FsY3VsYXRpb25zMThcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMxOVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczIwXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjQ5XCJ9LFwiY2FsY3VsYXRpb25zMjFcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNDBcIn0sXCJjYWxjdWxhdGlvbnMyMlwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIzMlwifSxcImNhbGN1bGF0aW9uczIzXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjI2XCJ9LFwiY2FsY3VsYXRpb25zMjRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMyNVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIxOFwifSxcImNhbGN1bGF0aW9uczI2XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMjdcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiOFwifSxcImNhbGN1bGF0aW9uczI4XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjdcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzXCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjFcIn0sXCJjYWxjdWxhdGlvbnMzMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIxNlwifSxcImNhbGN1bGF0aW9uczMyXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjExXCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTBcIn0sXCJjYWxjdWxhdGlvbnMzNFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI0XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjdcIn0sXCJjYWxjdWxhdGlvbnMzNlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyMlwifSxcImNhbGN1bGF0aW9uczM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjE2XCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTVcIn0sXCJjYWxjdWxhdGlvbnMzOVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI5XCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMzRcIn0sXCJjYWxjdWxhdGlvbnM0MVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyOFwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zNDNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTlcIn0sXCJjYWxjdWxhdGlvbnM0NFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIxNFwifSxcImNhbGN1bGF0aW9uczQ1XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjM3XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMzFcIn0sXCJjYWxjdWxhdGlvbnM0N1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNFwifSxcImNhbGN1bGF0aW9uczQ4XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIxXCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTVcIn19JywgJ3B1bGxfdXBzJywgJ3tcInRlbXBsYXRlczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcIndvcmRcIjpcInBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwiZmFpclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+RmFpcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJhdmVyYWdlXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjMmQ3MDkxXFxcIj48Yj5BdmVyYWdlPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5FeGNlbGxlbnQ8XFwvYj48XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDowODozMScpLA0KKDQsIDIsICd7XCJjYWxjdWxhdGlvbnM0OVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDIwXCJ9LFwiY2FsY3VsYXRpb25zNTBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIyMSwgNDBcIn0sXCJjYWxjdWxhdGlvbnM1MVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCA2MFwifSxcImNhbGN1bGF0aW9uczUyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiNjEsIDgwXCJ9LFwiY2FsY3VsYXRpb25zNTNcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI4MSwgMTAwXCJ9LFwiY2FsY3VsYXRpb25zNTRcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDEsIDMwMFwifX0nLCAnYnJpZGdlX3NpZGVfbGVmdCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcInBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+RmFpcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5FeGNlbGxlbnQ8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNVwiOntcInRhcmdldFwiOlwiNVwiLFwid29yZFwiOlwiU3VwZXJpb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5TdXBlcmlvcjxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDoxNDo1MCcpLA0KKDUsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMCwgMjBcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMjEsIDQwXCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCA2MFwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI2MSwgODBcIn0sXCJjYWxjdWxhdGlvbnM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiODEsIDEwMFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDEsIDMwMFwifX0nLCAnYnJpZGdlX3NpZGVfcmlnaHQnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwidmVyeSBwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5WZXJ5IFBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiMyZDcwOTFcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcIndvcmRcIjpcIlN1cGVyaW9yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+U3VwZXJpb3I8XFwvYj48XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMjA6Mjk6MDcnKSwNCig2LCAyLCAne1wiY2FsY3VsYXRpb25zMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDMwXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjMxLCA2MFwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI2MSwgOTBcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTEsIDExOVwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMjAsIDE0OVwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNTAsIDMwMFwifX0nLCAnZnJvbnRfYnJpZGdlJywgJ3tcInRlbXBsYXRlczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcIndvcmRcIjpcInZlcnkgcG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+VmVyeSBQb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiZmFpclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZTI4MzI3XFxcIj48Yj5GYWlyPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzM1wiOntcInRhcmdldFwiOlwiM1wiLFwid29yZFwiOlwiZ29vZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjMmQ3MDkxXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM1XCI6e1widGFyZ2V0XCI6XCI1XCIsXCJ3b3JkXCI6XCJTdXBlcmlvclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPlN1cGVyaW9yPFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9fScsIDEsICcyMDE4LTEwLTExIDIwOjMwOjM4JyksDQooNywgMiwgJ3tcImNhbGN1bGF0aW9uczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLCA4M1wifSxcImNhbGN1bGF0aW9uczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI4NCwgOTRcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTUsIDEwMlwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDMsIDExMlwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMTMsIDMwMFwifX0nLCAnZ3JpcF9zdHJlbmd0aF90b3RhbCcsICd7XCJ0ZW1wbGF0ZXM1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNlwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczhcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzOVwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDozMzo0MScpLA0KKDgsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMCwgOTFcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTEsIDEyNVwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMjYsIDE3NlwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNzcsIDIwOFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIyMDksIDMwMFwifX0nLCAnYmFja19zdHJlbmd0aCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDozODo1MicpLA0KKDksIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiLTUwLCAtOFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNywgLTFcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDVcIn0sXCJjYWxjdWxhdGlvbnMxNVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjYsIDE2XCJ9LFwiY2FsY3VsYXRpb25zMjBcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNywgMTAwXCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNTAsIC03XCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNiwgLTFcIn0sXCJjYWxjdWxhdGlvbnMzNVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDEwXCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMSwgMjBcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjIxLCAxMDBcIn19JywgJ3NpdF9yZWFjaCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMjI6MTc6MDYnKTsNCg0KLS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9jaGFydGANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fY2hhcnRgIChgaWRgLCBgZGV0YWlsc2AsIGBqYXZhc2NyaXB0X3RhYmxlYCwgYG5hbWVgLCBgbnVtYmVyYCwgYHRhcmdldGAsIGB0YXJnZXRfZmllbGRzYCwgYHR5cGVgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgKSBWQUxVRVMNCigxLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiU3RhZ2VcIixcInR5cGVcIjpcInN0cmluZ1wifSx7XCJsYWJlbFwiOlwiSGVhcnQgUmF0ZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJTeXN0b2xpYyBCbG9vZCBQcmVzc3VyZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJEaWFzdG9saWMgQmxvb2QgUHJlc3N1cmVcIixcInR5cGVcIjpcIm51bWJlclwifV0sXCJyb3dzXCI6W3tcImNcIjpbe1widlwiOlwiUmVzdFwifSx7XCJ2XCI6NzJ9LHtcInZcIjo0M30se1widlwiOjUzfV19LHtcImNcIjpbe1widlwiOlwiQCAyNSBXYXR0XCJ9LHtcInZcIjo4OX0se1widlwiOjUzfSx7XCJ2XCI6NjN9XX0se1wiY1wiOlt7XCJ2XCI6XCJAIDUwIFdhdHRcIn0se1widlwiOjkzfSx7XCJ2XCI6NjN9LHtcInZcIjo3M31dfSx7XCJjXCI6W3tcInZcIjpcIkAgNzUgV2F0dFwifSx7XCJ2XCI6OTJ9LHtcInZcIjo2M30se1widlwiOjczfV19LHtcImNcIjpbe1widlwiOlwiRmluYWwgLSAzIG1pbiByZXN0XCJ9LHtcInZcIjo3OH0se1widlwiOjU0fSx7XCJ2XCI6NTh9XX1dfSxcIm9wdGlvbnNcIjp7XCJmb2N1c1RhcmdldFwiOlwiY2F0ZWdvcnlcIixcImhBeGlzXCI6e1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidmlld1dpbmRvd1wiOm51bGwsXCJ2aWV3V2luZG93TW9kZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwiaW5cIixcInRoZW1lXCI6XCJtYXhpbWl6ZWRcIixcInRpdGxlXCI6XCJZTUNBXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJjdXJ2ZVR5cGVcIjpcImZ1bmN0aW9uXCIsXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwid2lkdGhcIjo2MDAsXCJoZWlnaHRcIjozNzF9LFwic3RhdGVcIjp7fSxcInZpZXdcIjp7XCJjb2x1bW5zXCI6bnVsbCxcInJvd3NcIjpudWxsfSxcImlzRGVmYXVsdFZpc3VhbGl6YXRpb25cIjpmYWxzZSxcImNoYXJ0VHlwZVwiOlwiTGluZUNoYXJ0XCJ9JywgJyhbZml0bmVzc3Rlc3RfbGFiZWxfeW1jYV9zdGFnZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF95bWNhX2hlYXJ0X3JhdGVdLCBbZml0bmVzc3Rlc3RfbGFiZWxfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV0pXHJcbihbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9vbmVdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX29uZV0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX29uZV0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9vbmVdKVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90d29dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3R3b10sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdHdvXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdvXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3R3b10pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90aHJlZV0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfdGhyZWVdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX3RocmVlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfZm91cl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfZm91cl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfZm91cl0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZm91cl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9maXZlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9maXZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9maXZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9maXZlXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF95bWNhX3N0YWdlX3NpeF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2Vfc2l4XSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9zaXhdLCBbZml0bmVzc3Rlc3RfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zaXhdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2l4XSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF95bWNhX3N0YWdlX3NldmVuXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9zZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zZXZlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9laWdodF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfZWlnaHRdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX2VpZ2h0XSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfbmluZV0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfbmluZV0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfbmluZV0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX25pbmVdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfbmluZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90ZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3Rlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdGVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3Rlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9lbGV2ZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX2VsZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfZWxldmVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWxldmVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2VsZXZlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90d2VsdmVdKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3R3ZWx2ZV0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdHdlbHZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdlbHZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3R3ZWx2ZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90aGlydGVlbl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfdGhpcnRlZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX3RoaXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhpcnRlZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhpcnRlZW5dKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfZm91cnRlZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX2ZvdXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9mb3VydGVlbl0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJ0ZWVuXSlbRU5ESUZdJywgJ1lNQ0EnLCAzLCAxLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcInltY2Ffc3RhZ2Vfb25lXCJ9fScsICdMaW5lQ2hhcnQnLCAxLCAnMjAxOC0xMC0xMSAyMjo1MzoxOCcpLA0KKDIsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJTdGFnZVwiLFwidHlwZVwiOlwic3RyaW5nXCJ9LHtcImxhYmVsXCI6XCJIZWFydCBSYXRlXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlN5c3RvbGljIEJsb29kIFByZXNzdXJlXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIkRpYXN0b2xpYyBCbG9vZCBQcmVzc3VyZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCJSZXN0XCJ9LHtcInZcIjo3Mn0se1widlwiOjY0fSx7XCJ2XCI6NTR9XX0se1wiY1wiOlt7XCJ2XCI6XCJAIDEwIFdhdHRcIn0se1widlwiOjgzfSx7XCJ2XCI6Njd9LHtcInZcIjo1N31dfSx7XCJjXCI6W3tcInZcIjpcIkAgMTIgV2F0dFwifSx7XCJ2XCI6OTB9LHtcInZcIjo2OX0se1widlwiOjU5fV19LHtcImNcIjpbe1widlwiOlwiQCAxNCBXYXR0XCJ9LHtcInZcIjo5NH0se1widlwiOjY5fSx7XCJ2XCI6NjB9XX0se1wiY1wiOlt7XCJ2XCI6XCJGaW5hbCAtIDMgbWluIHJlc3RcIn0se1widlwiOjc5fSx7XCJ2XCI6NjR9LHtcInZcIjo1N31dfV19LFwib3B0aW9uc1wiOntcImFubm90YXRpb25zXCI6e1wiZG9tYWluXCI6e319LFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJ2aWV3V2luZG93XCI6bnVsbCxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbH0sXCJsZWdhY3lTY2F0dGVyQ2hhcnRMYWJlbHNcIjp0cnVlLFwibGVnZW5kXCI6XCJpblwiLFwidGl0bGVcIjpcIkJydWNlXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJpc1N0YWNrZWRcIjpmYWxzZSxcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwidXNlRmlyc3RDb2x1bW5Bc0RvbWFpblwiOmZhbHNlLFwidGhlbWVcIjpcIm1heGltaXplZFwiLFwiZm9jdXNUYXJnZXRcIjpcImNhdGVnb3J5XCIsXCJzZXJpZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiNlMDY2NjZcIn0sXCIxXCI6e1wiY29sb3JcIjpcIiNlNjkxMzhcIn0sXCIyXCI6e1wiY29sb3JcIjpcIiM4NTIwMGNcIn19fSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkNvbHVtbkNoYXJ0XCJ9JywgJyhbZml0bmVzc3Rlc3RfbGFiZWxfYnJ1Y2Vfc3RhZ2VdLCBbZml0bmVzc3Rlc3RfbGFiZWxfYnJ1Y2VfaGVhcnRfcmF0ZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVdKVxyXG4oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX29uZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9oZWFydF9yYXRlX29uZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9vbmVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX29uZV0pXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV90d29dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV9icnVjZV9zdGFnZV90d29dLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfaGVhcnRfcmF0ZV90d29dLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdvXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV90d29dKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X2JydWNlX3N0YWdlX3RocmVlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2VfdGhyZWVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfaGVhcnRfcmF0ZV90aHJlZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV90aHJlZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X2JydWNlX3N0YWdlX2ZvdXJdKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV9icnVjZV9zdGFnZV9mb3VyXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfZm91cl0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9mb3VyXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9mb3VyXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9maXZlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2VfZml2ZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9oZWFydF9yYXRlX2ZpdmVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfYnJ1Y2Vfc3RhZ2Vfc2l4XShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2Vfc2l4XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfc2l4XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX3NpeF0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2l4XSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9zZXZlbl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX3NldmVuXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3NldmVuXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9laWdodF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX2VpZ2h0XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2VpZ2h0XSlbRU5ESUZdJywgJ0JydWNlJywgMywgMSwgJ3tcInRhcmdldF9maWVsZHMwXCI6e1wic2VsZWN0aW9uXCI6XCJicnVjZV9zdGFnZV9vbmVcIn19JywgJ0NvbHVtbkNoYXJ0JywgMSwgJzIwMTgtMTAtMTEgMjM6Mjg6MTcnKSwNCigzLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIlZPXFx1MjA4Mm1heFwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzEyXCJ9LHtcInZcIjoxNzAuNTY3fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8xMVwifSx7XCJ2XCI6MTYzLjE0Nn1dfV19LFwib3B0aW9uc1wiOntcInRpdGxlXCI6XCJWbzJtYXhcIixcInZBeGVzXCI6W3tcInRpdGxlXCI6bnVsbCxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWV9LHtcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWV9XSxcImxlZ2FjeVNjYXR0ZXJDaGFydExhYmVsc1wiOnRydWUsXCJjdXJ2ZVR5cGVcIjpcImZ1bmN0aW9uXCIsXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbH0sXCJsZWdlbmRcIjpcIm5vbmVcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwiZG9tYWluQXhpc1wiOntcImRpcmVjdGlvblwiOjF9LFwidGhlbWVcIjpcIm1heGltaXplZFwiLFwiaW50ZXJwb2xhdGVOdWxsc1wiOnRydWUsXCJzZXJpZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiNhNjRkNzlcIn19fSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkxpbmVDaGFydFwifScsICcoW2ZpdG5lc3N0ZXN0X2xhYmVsX2RheV0sIFtmaXRuZXNzdGVzdF9sYWJlbF92bzJtYXhdKVxyXG4oWzBfZml0bmVzc3Rlc3RfZGF5XSwgWzBfZml0bmVzc3Rlc3Rfdm8ybWF4XSlcclxuKFsxX2ZpdG5lc3N0ZXN0X2RheV0sIFsxX2ZpdG5lc3N0ZXN0X3ZvMm1heF0pXHJcbihbMl9maXRuZXNzdGVzdF9kYXldLCBbMl9maXRuZXNzdGVzdF92bzJtYXhdXSlcclxuKFszX2ZpdG5lc3N0ZXN0X2RheV0sIFszX2ZpdG5lc3N0ZXN0X3ZvMm1heF0pXHJcbihbNF9maXRuZXNzdGVzdF9kYXldLCBbNF9maXRuZXNzdGVzdF92bzJtYXhdKScsICdWbzJtYXgnLCAzLCAzLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcImRheVwifSxcInRhcmdldF9maWVsZHMxXCI6e1wic2VsZWN0aW9uXCI6XCJ2bzJtYXhcIn19JywgJ0xpbmVDaGFydCcsIDEsICcyMDE4LTEwLTEyIDEzOjQ4OjEzJyk7', '', 'Fitness Test (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'oih1GS9YYhu8cGMLn9xdQT8PVllZ0camYBjEYbHqsgQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 52, '', 1, 50),
(45, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2018-10-15 14:33:08', '', 'jKdfyoOPNLF1n3ZHp1Cb7IW4Lu13zO36e33wI/y7Ry4=', 'r7A8hbtLv0B/VHRfBtCmH5xvRq9j7PT7gz5PI6F/FP0=', '', '2dMIdzUuuZZ4g2G2DHEU74//Y4HkGUR+QOqQx9iFeLw=', '', '', 'A_199', 2, '', 'Bankable Projects', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_bankableprojects', 'kTcbfJRadrKm5MThXCqdHwpHH91ugchmvlgPE7biwFlFyD6m7Ccne2MzU3fh39KIEXq2Yu6Avl20OtlKBi3Pyw==', '', '3ed2025c-f489-44e4-9cc1-cf033a57b061', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:37:25', 2, 'Bankable Projects', 'bankableprojects', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEFkZCBKb2luIFRhYmxlcyBiYXNlZCBvbiBmaWx0ZXINCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRxdWVyeSAgVGhlIGRhdGFiYXNlIHF1ZXJ5IG9iamVjdA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRmaWx0ZXIgIFRoZSB0YXJnZXQgYXJlYSB0aGF0IG1hZGUgdGhlIHJlcXVlc3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gam9pbkZvcm1EZXRhaWxzKCYkcXVlcnksICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCX0NCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3R5cGUgdGFibGUuDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdHlwZScsICd0JykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EudHlwZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgndC5pZCcpIC4gJyknKTsNCgl9DQoNCgkvKioNCgkgKiBBZGQgb3JkZXIgYmFzZWQgb24gZmlsdGVyDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkcXVlcnkgIFRoZSBkYXRhYmFzZSBxdWVyeSBvYmplY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICBUaGUgdGFyZ2V0IGFyZWEgdGhhdCBtYWRlIHRoZSByZXF1ZXN0DQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gb3JkZXJGb3JtRGV0YWlscygmJHF1ZXJ5LCAkZmlsdGVyID0gJ25vbmUnLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCS8vIGlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJLy8gew0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJLy8gCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkvLyB9DQoJCS8vIHRoZSBkZWZhdWx0IG9yZGVyIGlzIGJ5IGNyZWF0ZSBkYXRlDQoJCSRxdWVyeS0+b3JkZXIoJ2EuY3JlYXRlZCBERVNDJyk7IC8vIHRvIGluc3VyZSBsYXN0IHNob3dzIGZpcnN0DQoJfQ0KDQoJLyoqDQoJICogR2V0IHNlbGVjdGlvbiAgYmFzZWQgb24gdHlwZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgbWFpbiB0YWJsZSB0byBzZWxlY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kICAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0byByZXR1cm4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICAgIFRoZSBraW5kIG9mIGZpbHRlciAodG8gcmV0dXJuIG9ubHkgdmFsdWVzIHJlcXVpcmVkKQ0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRkYiAgICAgVGhlIGRhdGFiYXNlIG9iamVjdA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oJHRhYmxlID0gJ2Zvcm0nLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJywgJGZpbHRlciA9ICdub25lJywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gcHJlcCBmb3IgcGxhY2Vob2xkZXJzDQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHBsYWNlaG9sZGVyIHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OiRwYXJhbXMtPmdldCgncGxhY2Vob2xkZXJfcHJlZml4JywgJ1tbW2NvbXBvbmVudF1dXScpOw0KCQkJJGYgPSAnWycgLiAkcHJlZml4IC4gJ18nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gZ2V0IHN0YXR1cyBub3JtIGZpZWxkcw0KCQlpZiAobWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRTdGF0dXNOb3JtRmllbGRzJykpDQoJCXsNCgkJCSRub3JtcyA9IHNlbGY6OmdldFN0YXR1c05vcm1GaWVsZHMoKTsNCgkJfQ0KCQkvLyBnZXQgY2hhcnRzDQoJCWlmICgnY2hhcnQnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRBdmFpbGFibGVDaGFydHMnKSkNCgkJew0KCQkJJGNoYXJ0cyA9IHNlbGY6OmdldEF2YWlsYWJsZUNoYXJ0cygpOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQkkY29sdW1ucyA9IGFycmF5KCdpZCcsICdjcmVhdGVkJywgJ21vZGlmaWVkJywgJ25hbWUnKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gcmVtb3ZlIHBhcmFtcyBhbHdheXMNCgkJCSRyZW1vdmUgPSBhcnJheSgkZiAuICdwYXJhbXMnIC4gJGIpOw0KCQkJLy8gcmVtb3ZlIHRoZSBub3JtcyBpZiBmb3VuZA0KCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkbm9ybXMgYXMgJG5vcm0pDQoJCQkJew0KCQkJCQkkcmVtb3ZlW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRyZW1vdmU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBjb2x1bW5zIG9mIHRoaXMgdGFibGUNCgkJCSRjb2x1bW5zID0gJGRiLT5nZXRUYWJsZUNvbHVtbnMoIiNfX1tbW2NvbXBvbmVudF1dXV8iIC4gJHRhYmxlLCBmYWxzZSk7DQoJCQkvLyBhbHdheXMgcmVtb3ZlIHRoZXNlDQoJCQkkcmVtb3ZlID0gYXJyYXkoJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnKTsNCgkJCS8vIGlmIHBsYWNlaG9sZGVyIGFuZCBub25lIGZpbHRlciB0aGVuIHJlbW92ZSBzb21lIG1vcmUNCgkJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kICYmICgncmVwb3J0JyA9PT0gJGZpbHRlciB8fCAnZW1haWwnID09PSAkZmlsdGVyKSkNCgkJCXsNCgkJCQkkcmVtb3ZlW10gPSAnYWNjZXNzJzsNCgkJCQkkcmVtb3ZlW10gPSAnY3JlYXRlZF9ieSc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikNCgkJCXsNCgkJCQkkc2VsZWN0aW9uWydhLicgLiAkY29sdW1uXSA9ICRmIC4gJGNvbHVtbiAuICRiOw0KCQkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCQlpZiAoJ3Byb2ZpbGUnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIpDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIGxhYmVsIGZvciB0aGVzZSBmaWVsZHMNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPicgLiAkY29sdW1uXSA9ICRmIC4gJ2xhYmVsXycgLiAkY29sdW1uIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBsaW5rZWQgdmFsdWVzDQoJCQkkc2VsZWN0aW9uWyd0Lm5hbWUnXSA9ICRmIC4gJ3R5cGVfbmFtZScgLiAkYjsNCgkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCWlmICgncHJvZmlsZScgIT09ICRmaWx0ZXIpDQoJCQl7DQoJCQkJLy8gZG8gc29tZSBjb252ZXJzaW9uIGZvciBjcmVhdGVkIGRhdGUNCgkJCQlpZiAoaW5fYXJyYXkoJ2NyZWF0ZWQnLCAkY29sdW1ucykpDQoJCQkJew0KCQkJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGhEYXk6Y3JlYXRlZCddID0gJGYgLiAnZGF5JyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGg6Y3JlYXRlZCddID0gJGYgLiAnbW9udGgnIC4gJGI7DQoJCQkJCSRzZWxlY3Rpb25bJ2ZhbmN5RGF0ZTpjcmVhdGVkJ10gPSAkZiAuICdjcmVhdGVkJyAuICRiOw0KCQkJCQkvLyBzZXQgbGFiZWwgZm9yIGRheSBhbmQgbW9udGgNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPmRheSddID0gJGYgLiAnbGFiZWxfZGF5JyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydzZXRMYWJlbC0+bW9udGgnXSA9ICRmIC4gJ2xhYmVsX21vbnRoJyAuICRiOw0KCQkJCX0NCgkJCQkvLyBhZGQgdGhlIG5vcm1zIGlmIGZvdW5kDQoJCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRub3JtcyBhcyAkbm9ybSkNCgkJCQkJew0KCQkJCQkJaWYgKCdlbWFpbCcgPT09ICRmaWx0ZXIgfHwgJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2ZpZWxkJyA9PT0gJGZpbHRlciAgfHwgJ2NoYXJ0JyA9PT0gJGZpbHRlcikNCgkJCQkJCXsNCgkJCQkJCQkkc2VsZWN0aW9uWydnZXRWYWx1ZVN0YXR1czonIC4gJG5vcm0uICd8YWdlfGdlbmRlciddID0gJGYgLiAnc3RhdHVzXycgLiAkbm9ybSAuICRiOw0KCQkJCQkJfQ0KCQkJCQkJLy8gZG8gbm90IGxvYWQgZm9yIGZpZWxkDQoJCQkJCQlpZiAoJ2ZpZWxkJyAhPT0gJGZpbHRlciAmJiAnY2hhcnQnICE9PSAkZmlsdGVyKQ0KCQkJCQkJew0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfc2NhbGUnIC4gJGI7DQoJCQkJCQkJJHNlbGVjdGlvbltdID0gJGYgLiAnc3RhdHVzXycgLiAkbm9ybS4gJ193b3JkJyAuICRiOw0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfdGFibGUnIC4gJGI7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gYWRkIHRoZSBjaGFydCBkaXYgYW5kIEpTIGNvZGUgKG9ubHkgaWYgZmlsdGVyIGlzIG5vdCBjaGFydCkNCgkJCQlpZiAoJ2NoYXJ0JyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyICYmIGlzc2V0KCRjaGFydHMpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjaGFydHMpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGNoYXJ0cyBhcyAkY2hhcnQgPT4gJHZhbHVlcykNCgkJCQkJew0KCQkJCQkJLy8gbWFrZSBzdXJlIHRoZSBjaGFydCBuYW1lIGlzIHNhdmUNCgkJCQkJCSRzZWxlY3Rpb25bJ3NldENoYXJ0Q29kZS0+JyAuICRjaGFydF0gPSAkZiAuICRjaGFydCAuICRiOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRzZWxlY3Rpb247DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldFZhbHVlU3RhdHVzXQ0KW0NVU1RPTUNPREU9Z2V0U3RhdHVzTm9ybUZpZWxkc10NCltDVVNUT01DT0RFPWdldENoYXJ0Q29kZV0NCltDVVNUT01DT0RFPWdldEF2YWlsYWJsZUNoYXJ0c10NCltDVVNUT01DT0RFPWdldE11bHRpQ2hhcnREYXRhVGFibGVdDQpbQ1VTVE9NQ09ERT1nZXRIZWxwZXJDbGFzc10NCltDVVNUT01DT0RFPWdldFRlbXBsYXRlXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldEFOWVRlbXBsYXRlK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1EZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUNvbXBhbnlEZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPXBhcmFtc01vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1sYWJlbE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT10ZW1wbGF0ZU1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1jaGFydE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1yZW1vdmVBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWxvYWRSZXBvcnRUYWJdDQpbQ1VTVE9NQ09ERT1nZXRSZXBvcnRdDQpbQ1VTVE9NQ09ERT10aGVCdXRsZXJdDQpbQ1VTVE9NQ09ERT1zZXRUYWJdDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJOYW1lXQ0KW0NVU1RPTUNPREU9YmNtYXRoXQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWdldEJldHdlZW5dDQpbQ1VTVE9NQ09ERT1nZXRDb3JlTmFtZV0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Bankable Projects', '', '', 'Bankable Projects (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'hf7yYVzaVFQ2UsPUbb+lb+2Xx79x7DKbXnLblPnk4ko=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 16, '', 1, 22),
(46, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2018-11-24 01:54:02', '', 'PDKvQr1omtxg1PHpAFU3HiVLe70cToFa/9eg87wOf3w=', 'o/rDMwNXBeOLEXJ0o9JpkhHeastC8pZ5hME9gq1JriQ=', '', 'fU3WMu9a1djTuX5mAz5t1mu/amTPpqmJmchvOzS/vTQ=', '', '', 'A_201', 2, '', 'Donor Funded Projects', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_donorfundedprojects', 'eVfE2ScgVPJ8DhBaw8UfCZbXbk/Sr8BR/ln+Mj3CYKoAZ1/lNB2mFx8IVIOc/VvZMjxKHPQDbrlNUwia8N4Mkg==', '', '92181cd8-81a3-448c-b4df-adc0e93c84f9', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2020-07-28 00:37:22', 2, 'Donor Funded Projects', 'donorfundedprojects', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEFkZCBKb2luIFRhYmxlcyBiYXNlZCBvbiBmaWx0ZXINCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRxdWVyeSAgVGhlIGRhdGFiYXNlIHF1ZXJ5IG9iamVjdA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRmaWx0ZXIgIFRoZSB0YXJnZXQgYXJlYSB0aGF0IG1hZGUgdGhlIHJlcXVlc3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gam9pbkZvcm1EZXRhaWxzKCYkcXVlcnksICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCX0NCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3NlY3RvciB0YWJsZS4NCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9zZWN0b3InLCAncycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnNlY3RvcicpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgncy5pZCcpIC4gJyknKTsNCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2RlcGFydG1lbnQgdGFibGUuDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fZGVwYXJ0bWVudCcsICdkJykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuZGVwYXJ0bWVudCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnZC5pZCcpIC4gJyknKTsNCgl9DQoNCgkvKioNCgkgKiBBZGQgb3JkZXIgYmFzZWQgb24gZmlsdGVyDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkcXVlcnkgIFRoZSBkYXRhYmFzZSBxdWVyeSBvYmplY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICBUaGUgdGFyZ2V0IGFyZWEgdGhhdCBtYWRlIHRoZSByZXF1ZXN0DQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gb3JkZXJGb3JtRGV0YWlscygmJHF1ZXJ5LCAkZmlsdGVyID0gJ25vbmUnLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCS8vIGlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJLy8gew0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJLy8gCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkvLyB9DQoJCS8vIHRoZSBkZWZhdWx0IG9yZGVyIGlzIGJ5IGNyZWF0ZSBkYXRlDQoJCSRxdWVyeS0+b3JkZXIoJ2EuY3JlYXRlZCBERVNDJyk7IC8vIHRvIGluc3VyZSBsYXN0IHNob3dzIGZpcnN0DQoJfQ0KDQoJLyoqDQoJICogR2V0IHNlbGVjdGlvbiAgYmFzZWQgb24gdHlwZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgbWFpbiB0YWJsZSB0byBzZWxlY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kICAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0byByZXR1cm4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICAgIFRoZSBraW5kIG9mIGZpbHRlciAodG8gcmV0dXJuIG9ubHkgdmFsdWVzIHJlcXVpcmVkKQ0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRkYiAgICAgVGhlIGRhdGFiYXNlIG9iamVjdA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oJHRhYmxlID0gJ2Zvcm0nLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJywgJGZpbHRlciA9ICdub25lJywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gcHJlcCBmb3IgcGxhY2Vob2xkZXJzDQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHBsYWNlaG9sZGVyIHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OiRwYXJhbXMtPmdldCgncGxhY2Vob2xkZXJfcHJlZml4JywgJ1tbW2NvbXBvbmVudF1dXScpOw0KCQkJJGYgPSAnWycgLiAkcHJlZml4IC4gJ18nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gZ2V0IHN0YXR1cyBub3JtIGZpZWxkcw0KCQlpZiAobWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRTdGF0dXNOb3JtRmllbGRzJykpDQoJCXsNCgkJCSRub3JtcyA9IHNlbGY6OmdldFN0YXR1c05vcm1GaWVsZHMoKTsNCgkJfQ0KCQkvLyBnZXQgY2hhcnRzDQoJCWlmICgnY2hhcnQnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRBdmFpbGFibGVDaGFydHMnKSkNCgkJew0KCQkJJGNoYXJ0cyA9IHNlbGY6OmdldEF2YWlsYWJsZUNoYXJ0cygpOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQkkY29sdW1ucyA9IGFycmF5KCdpZCcsICdjcmVhdGVkJywgJ21vZGlmaWVkJywgJ25hbWUnKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gcmVtb3ZlIHBhcmFtcyBhbHdheXMNCgkJCSRyZW1vdmUgPSBhcnJheSgkZiAuICdwYXJhbXMnIC4gJGIpOw0KCQkJLy8gcmVtb3ZlIHRoZSBub3JtcyBpZiBmb3VuZA0KCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkbm9ybXMgYXMgJG5vcm0pDQoJCQkJew0KCQkJCQkkcmVtb3ZlW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRyZW1vdmU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBjb2x1bW5zIG9mIHRoaXMgdGFibGUNCgkJCSRjb2x1bW5zID0gJGRiLT5nZXRUYWJsZUNvbHVtbnMoIiNfX1tbW2NvbXBvbmVudF1dXV8iIC4gJHRhYmxlLCBmYWxzZSk7DQoJCQkvLyBhbHdheXMgcmVtb3ZlIHRoZXNlDQoJCQkkcmVtb3ZlID0gYXJyYXkoJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnKTsNCgkJCS8vIGlmIHBsYWNlaG9sZGVyIGFuZCBub25lIGZpbHRlciB0aGVuIHJlbW92ZSBzb21lIG1vcmUNCgkJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kICYmICgncmVwb3J0JyA9PT0gJGZpbHRlciB8fCAnZW1haWwnID09PSAkZmlsdGVyKSkNCgkJCXsNCgkJCQkkcmVtb3ZlW10gPSAnYWNjZXNzJzsNCgkJCQkkcmVtb3ZlW10gPSAnY3JlYXRlZF9ieSc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikNCgkJCXsNCgkJCQkkc2VsZWN0aW9uWydhLicgLiAkY29sdW1uXSA9ICRmIC4gJGNvbHVtbiAuICRiOw0KCQkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCQlpZiAoJ3Byb2ZpbGUnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIpDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIGxhYmVsIGZvciB0aGVzZSBmaWVsZHMNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPicgLiAkY29sdW1uXSA9ICRmIC4gJ2xhYmVsXycgLiAkY29sdW1uIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBsaW5rZWQgdmFsdWVzDQoJCQkkc2VsZWN0aW9uWydzLm5hbWUnXSA9ICRmIC4gJ3NlY3Rvcl9uYW1lJyAuICRiOw0KCQkJJHNlbGVjdGlvblsnZC5uYW1lJ10gPSAkZiAuICdkZXBhcnRtZW50X25hbWUnIC4gJGI7DQoJCQkvLyBzZXQgZGF0ZSBkZXRhaWxzDQoJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGhEYXk6c3RhcnRfZGF0ZSddID0gJGYgLiAnc3RhcnRfZGF0ZScgLiAkYjsNCgkJCSRzZWxlY3Rpb25bJ2ZhbmN5RGF0ZTpzdGFydF9kYXRlJ10gPSAkZiAuICdzdGFydF9kYXRlX2ZhbmN5JyAuICRiOw0KCQkJJHNlbGVjdGlvblsnc2V0WWVhck1vbnRoRGF5OmVuZF9kYXRlJ10gPSAkZiAuICdlbmRfZGF0ZScgLiAkYjsNCgkJCSRzZWxlY3Rpb25bJ2ZhbmN5RGF0ZTplbmRfZGF0ZSddID0gJGYgLiAnZW5kX2RhdGVfZmFuY3knIC4gJGI7DQoJCQkvLyB3ZSBtdXN0IGFkZCB0aGUgcGFyYW1zDQoJCQlpZiAoJ3Byb2ZpbGUnICE9PSAkZmlsdGVyKQ0KCQkJew0KCQkJCS8vIGRvIHNvbWUgY29udmVyc2lvbiBmb3IgY3JlYXRlZCBkYXRlDQoJCQkJaWYgKGluX2FycmF5KCdjcmVhdGVkJywgJGNvbHVtbnMpKQ0KCQkJCXsNCgkJCQkJJHNlbGVjdGlvblsnc2V0WWVhck1vbnRoRGF5OmNyZWF0ZWQnXSA9ICRmIC4gJ2RheScgLiAkYjsNCgkJCQkJJHNlbGVjdGlvblsnc2V0WWVhck1vbnRoOmNyZWF0ZWQnXSA9ICRmIC4gJ21vbnRoJyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydmYW5jeURhdGU6Y3JlYXRlZCddID0gJGYgLiAnY3JlYXRlZCcgLiAkYjsNCgkJCQkJLy8gc2V0IGxhYmVsIGZvciBkYXkgYW5kIG1vbnRoDQoJCQkJCSRzZWxlY3Rpb25bJ3NldExhYmVsLT5kYXknXSA9ICRmIC4gJ2xhYmVsX2RheScgLiAkYjsNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPm1vbnRoJ10gPSAkZiAuICdsYWJlbF9tb250aCcgLiAkYjsNCgkJCQl9DQoJCQkJLy8gYWRkIHRoZSBub3JtcyBpZiBmb3VuZA0KCQkJCWlmIChpc3NldCgkbm9ybXMpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRub3JtcykpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkbm9ybXMgYXMgJG5vcm0pDQoJCQkJCXsNCgkJCQkJCWlmICgnZW1haWwnID09PSAkZmlsdGVyIHx8ICdyZXBvcnQnID09PSAkZmlsdGVyIHx8ICdmaWVsZCcgPT09ICRmaWx0ZXIgIHx8ICdjaGFydCcgPT09ICRmaWx0ZXIpDQoJCQkJCQl7DQoJCQkJCQkJJHNlbGVjdGlvblsnZ2V0VmFsdWVTdGF0dXM6JyAuICRub3JtLiAnfGFnZXxnZW5kZXInXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0gLiAkYjsNCgkJCQkJCX0NCgkJCQkJCS8vIGRvIG5vdCBsb2FkIGZvciBmaWVsZA0KCQkJCQkJaWYgKCdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgJ2NoYXJ0JyAhPT0gJGZpbHRlcikNCgkJCQkJCXsNCgkJCQkJCQkkc2VsZWN0aW9uW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtLiAnX3NjYWxlJyAuICRiOw0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfd29yZCcgLiAkYjsNCgkJCQkJCQkkc2VsZWN0aW9uW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtLiAnX3RhYmxlJyAuICRiOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGFkZCB0aGUgY2hhcnQgZGl2IGFuZCBKUyBjb2RlIChvbmx5IGlmIGZpbHRlciBpcyBub3QgY2hhcnQpDQoJCQkJaWYgKCdjaGFydCcgIT09ICRmaWx0ZXIgJiYgJ2ZpZWxkJyAhPT0gJGZpbHRlciAmJiBpc3NldCgkY2hhcnRzKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY2hhcnRzKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRjaGFydHMgYXMgJGNoYXJ0ID0+ICR2YWx1ZXMpDQoJCQkJCXsNCgkJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgY2hhcnQgbmFtZSBpcyBzYXZlDQoJCQkJCQkkc2VsZWN0aW9uWydzZXRDaGFydENvZGUtPicgLiAkY2hhcnRdID0gJGYgLiAkY2hhcnQgLiAkYjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQpbQ1VTVE9NQ09ERT1nZXRQbGFjZUhvbGRlcnNSZXBvcnRdDQpbQ1VTVE9NQ09ERT1nZXRWYWx1ZVN0YXR1c10NCltDVVNUT01DT0RFPWdldFN0YXR1c05vcm1GaWVsZHNdDQpbQ1VTVE9NQ09ERT1nZXRDaGFydENvZGVdDQpbQ1VTVE9NQ09ERT1nZXRBdmFpbGFibGVDaGFydHNdDQpbQ1VTVE9NQ09ERT1nZXRNdWx0aUNoYXJ0RGF0YVRhYmxlXQ0KW0NVU1RPTUNPREU9Z2V0SGVscGVyQ2xhc3NdDQpbQ1VTVE9NQ09ERT1nZXRUZW1wbGF0ZV0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1nZXRBTllUZW1wbGF0ZStBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllGb3JtRGV0YWlscytBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllDb21wYW55RGV0YWlscytBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPW1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1wYXJhbXNNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bGFiZWxNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9dGVtcGxhdGVNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9Y2hhcnRNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9cmVtb3ZlQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1sb2FkUmVwb3J0VGFiXQ0KW0NVU1RPTUNPREU9Z2V0UmVwb3J0XQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9c2V0VGFiXQ0KW0NVU1RPTUNPREU9Z2V0TWVtYmVyTmFtZV0NCltDVVNUT01DT0RFPWJjbWF0aF0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1nZXRCZXR3ZWVuXQ0KW0NVU1RPTUNPREU9Z2V0Q29yZU5hbWVd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Donor Funded Projects', '', '', 'Donor Funded Projects (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'UHkXmtEshVPYiMOPHun5etxQVJbdE7TwsUOniDLGDxc=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 17, '', 1, 27),
(47, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.7', 'Copyright (C) 2015. All Rights Reserved', '2018-12-17 13:44:13', '', '8KogkX0DGBXFLjRn89PBVw2v6bCMxl5JIcLRfxHqT3Y=', 'xHj9/R0B7h0jJc5mEbKXDwLLkPl7x81sIgNH637pf1E=', '', 'doZjfO8o56YZAFsCxzC9M5qGBHw/VyEqchNxp95a0WQ=', '', '', 'A_202', 2, '', 'Orthopedic', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_orthopedic', '3YAVq4fIs4AGim5iRlAS0IjrkUkh3kXpVSkwMUaIMnm2tTtK0Hz5q54IWoKBgZKM', '', 'fd4ac451-6e52-4381-9f0a-f4b30681a38d', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-03-08 03:21:21', 2, 'Orthopedic', 'orthopedic', '', 4, '', '', 'W0NVU1RPTUNPREU9b3J0aG9wZWRpY0hlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Orthopedic', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlYA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlYCAoYGlkYCwgYGFsaWFzYCwgYGRlc2NyaXB0aW9uYCwgYG5hbWVgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgKSBWQUxVRVMNCigxLCAnYWN0aXZlLXJhbmdlLW9mLW1vdGlvbicsICcnLCAnQWN0aXZlIFJhbmdlIG9mIE1vdGlvbicsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooMiwgJ2Z1bmN0aW9uYWwtbW92ZW1lbnRzJywgJycsICdGdW5jdGlvbmFsIE1vdmVtZW50cycsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooMywgJ21hbnVhbC1tdXNjbGUtdGVzdCcsICcnLCAnTWFudWFsIE11c2NsZSBUZXN0JywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCig0LCAnbXVzY2xlLWxlbmd0aCcsICcnLCAnTXVzY2xlIExlbmd0aCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNSwgJ211c2NsZS1zdHJlbmd0aC10ZXN0JywgJycsICdNdXNjbGUgU3RyZW5ndGggVGVzdCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNiwgJ211c2NsZS10ZXN0JywgJycsICdNdXNjbGUgVGVzdCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNywgJ25ldXJvbG9naWNhbC1leGFtJywgJycsICdOZXVyb2xvZ2ljYWwgRXhhbScsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooOCwgJ3BhbHBhdGlvbicsICcnLCAnUGFscGF0aW9uJywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCig5LCAncGFzc2l2ZS1yYW5nZS1vZi1tb3Rpb24nLCAnJywgJ1Bhc3NpdmUgUmFuZ2Ugb2YgTW90aW9uJywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCigxMCwgJ3NwZWNpYWwtdGVzdCcsICcnLCAnU3BlY2lhbCBUZXN0JywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCigxMSwgJ3N0cmVuZ3RoLXRlc3QnLCAnJywgJ1N0cmVuZ3RoIFRlc3QnLCAxLCAnMjAxOC0xMi0xOCAyMzoyMDo0MycpOw==', '', 'Orthopedic (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', '79hK57LOaEERbWSvsJ2uCUgeC2v7Y9XGr7uYTA9yCZw=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 38, '', 1, 26),
(48, 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, 1, '{}', 3, '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2019-02-04 21:30:52', 1, 'cNJiur6BS8xT5BJp6M0QouQXp9BIhMdOKI0f98GwqKM=', 'daG3mVWavTJSf9unuChgSHkKoxbbPYXKS3yT17wHVEA=', '', '3xiTEv9mFVpLvXpCi9vYbSxw0wIVHilpdD12oPdQn7E=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', 'A_177', 2, '', 'Coral is a system of integration that allows many diverse concepts to co exist.', 'joomla@vdm.io', '', '', 'HqMQciOxsDF38VTMdkXa3SAfmSBbWgwwI2wOQzgUnehKN8RNjPlgKBfU5gjhnkm6oiYo8EPLiIXwktqPHmtJxGKzUOdckz3fXAkdO2Om9Fs=', '', '3ff9d8f6-11a0-4f2c-9353-1895cf5810fc', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9733;', '2021-12-19 22:22:11', 2, 'Coral', 'coral', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9bWVtYmVybWFuYWdlckhlbHBlckJvdGhdDQpbQ1VTVE9NQ09ERT1jYW5BY2Nlc3NNZW1iZXJd', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'The Beauty of Integration', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'Coral', '.git', '', 3, 1, 'https://io.vdm.dev/update/coral_update_server.xml', 'https://www.vdm.io/', '', 'lR119LmUKB2wvDxdXvkP8+HxiLXH6bUZvhgRgQ8mNh8=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"0\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"}}', 1, 15, '', 1, 25),
(49, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Vast Development Method', '1.0.0', 'Copyright (C) 2020. All Rights Reserved', '2019-02-06 20:27:41', '', 'qi7pclcRmViYcJ3HlGS8Z4EO7WvLPMXdFbpOXaO0HKo=', 'UKpPHjDizbeiqz9bOeJZnawh0fBaqWzX2+KIu2eF0us=', '', '1YrQH07qqwW4vfxK3+/kjkA3y7NtHVjkFMBQzbX0Q2U=', '', '', 'A_86', 2, '', 'Company Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_companies', 'IvHgukl+ExbWtxnsb4w/CqY1HGvjhOPvKkJxIY/+9WcfamkxSaK3Vkbq4QudMA4K', '', 'e906966f-c8c8-412e-8e3f-5817b1fe756b', 'images/vdm/INTER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&oast;', '2021-03-08 03:17:57', 2, 'Company', 'tradeshow_company', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEdldCBzZWxlY3Rpb24gIGJhc2VkIG9uIHR5cGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIG1haW4gdGFibGUgdG8gc2VsZWN0DQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZCAgICBUaGUgdHlwZSBvZiB2YWx1ZXMgdG8gcmV0dXJuDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGZpbHRlciAgICBUaGUga2luZCBvZiBmaWx0ZXIgKHRvIHJldHVybiBvbmx5IHZhbHVlcyByZXF1aXJlZCkNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGIgICAgIFRoZSBkYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0YWJsZSA9ICdmb3JtJywgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicsICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCS8vIHByZXAgZm9yIHBsYWNlaG9sZGVycw0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBwbGFjZWhvbGRlciBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3BsYWNlaG9sZGVyX3ByZWZpeCcsICdbW1tjb21wb25lbnRdXV0nKTsNCgkJCSRmID0gJ1snIC4gJHByZWZpeCAuICdfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQlpZiAoKCRmaWVsZHMgPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3Byb2ZpbGVfZmllbGRzJywgZmFsc2UpKSAhPT0gZmFsc2UgJiYgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGZpZWxkcykpDQoJCQl7DQoJCQkJJGNvbHVtbnMgPSBhcnJheSgnaWQnKTsgLy8gbmVlZGVkIGZvciBwZXJtaXNzaW9uIGNoZWNrDQoJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQkkY29sdW1uc1tdID0gJGZpZWxkLT5maWVsZDsNCgkJCQl9DQoJCQkJLy8gYWRkIGRhdGVzIGZvciBkaXNwbGF5DQoJCQkJJGNvbHVtbnNbXSA9ICdjcmVhdGVkJzsNCgkJCQkkY29sdW1uc1tdID0gJ21vZGlmaWVkJzsNCgkJCX0NCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gbm90aW5nIHRvIHJlbW92ZQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRkYikpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZGF0YWJhc2UgY29sdW1ucyBvZiB0aGlzIHRhYmxlDQoJCQkkY29sdW1ucyA9ICRkYi0+Z2V0VGFibGVDb2x1bW5zKCIjX19bW1tjb21wb25lbnRdXV1fIiAuICR0YWJsZSwgZmFsc2UpOw0KCQkJLy8gYWx3YXlzIHJlbW92ZSB0aGVzZQ0KCQkJJHJlbW92ZSA9IGFycmF5KCdhc3NldF9pZCcsICdjaGVja2VkX291dCcsICdjaGVja2VkX291dF90aW1lJyk7DQoJCQkvLyBpZiBwbGFjZWhvbGRlciBhbmQgbm9uZSBmaWx0ZXIgdGhlbiByZW1vdmUgc29tZSBtb3JlDQoJCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCAmJiAoJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2VtYWlsJyA9PT0gJGZpbHRlcikpDQoJCQl7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2FjY2Vzcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2NyZWF0ZWRfYnknOw0KCQkJCSRyZW1vdmVbXSA9ICdpZCc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJLy8gbG9hZCB0aGUgY29sdW1ucyB0byBzZWxlY3Rpb24NCgkJCWZvcmVhY2ggKCRjb2x1bW5zIGFzICRjb2x1bW4pDQoJCQl7DQoJCQkJJHNlbGVjdGlvblsnYS4nIC4gJGNvbHVtbl0gPSAkZiAuICRjb2x1bW4gLiAkYjsNCgkJCQkvLyB3ZSBtdXN0IGFkZCB0aGUgbGFiZWxzDQoJCQkJaWYgKCdwcm9maWxlJyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBsYWJlbCBmb3IgdGhlc2UgZmllbGRzDQoJCQkJCSRzZWxlY3Rpb25bJ3NldExhYmVsLT4nIC4gJGNvbHVtbl0gPSAkZiAuICdsYWJlbF8nIC4gJGNvbHVtbiAuICRiOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQpbQ1VTVE9NQ09ERT1nZXRGb2xkZXJQYXRoXQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9Z2V0UGxhY2VIb2xkZXJzUmVwb3J0XQ0KW0NVU1RPTUNPREU9Z2V0QU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1tb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bGFiZWxNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9cmVtb3ZlQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJOYW1lXQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWdldENvcmVOYW1lXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Company Details', '', '', 'Company (tradeshow)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_companydetails_server.xml', 'http://www.vdm.io', '', 'P1gnb8JQEfs7tcSvkg6Swf2UhDZeDksNNBaerj9gWek=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 21, '', 1, 24),
(50, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.11', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 20:06:53', '', '4diAWcihanuttZ0jDXOo1UZosKniJAFHtkSlzOdB1Gc=', 'ZTymcvrTiJzWQyyRUh5xR0o4fs1N1oVU2s7OdYGytlo=', '', '8oZJl/ju/2LPdpwdoTW3YQOA3Obo7mdPx8BFs8M+MEw=', '', '', 'A_101', 2, '', 'Anthropometry', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_anthropometry', 'ECWXtQIFbWanedMA0C1fow6UxJdw41EEoNxrrOAwclDi/Q16K9ttdJvcG+ij0kOJkOiknEZPlGPn7ZOG9x1BUw==', '', '25a25b20-e7b7-465b-a398-4a6cb1448a13', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:28:04', 2, 'Anthropometry', 'coral_anthropometry', '', 4, '', '', 'W0NVU1RPTUNPREU9YW50aHJvcG9tZXRyeUhlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Anthropometry', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0dXNfbm9ybWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdHVzX25vcm1gIChgaWRgLCBgY2FsY3VsYXRpb25fdHlwZWAsIGBjYWxjdWxhdGlvbnNgLCBgc2VsZWN0aW9uYCwgYHRlbXBsYXRlc2AsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMTAsIDI0LjlcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMjUsIDI5LjlcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMzAsIDQwXCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCAyMDBcIn19JywgJ2JtaScsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJkZXNpcmFibGVcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkRlc2lyYWJsZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMSBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkRlc2lyYWJsZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2VzcyB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+RGVzaXJhYmxlPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJncmFkZSAxIG9iZXNpdHlcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RGVzaXJhYmxlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R3JhZGUgMSBPYmVzaXR5PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5EZXNpcmFibGU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnkgdWstdmlzaWJsZS1zbWFsbFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiZ3JhZGUgMiBvYmVzaXR5XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkRlc2lyYWJsZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMSBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+R3JhZGUgMiBPYmVzaXR5PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RGVzaXJhYmxlPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMSBPYmVzaXR5PFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdyYWRlIDMgb2Jlc2l0eVxcL21vcmJpZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5EZXNpcmFibGU8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMiBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkRlc2lyYWJsZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAxOTo0MTo1NScpLA0KKDIsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMC45NTksIDIwLjAwXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuOTEsIDAuOTU4XCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuMDAwMDAxLCAwLjk1XCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuODU5LCAyMFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLjgxLCAwLjg1OFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLjAwLCAwLjgwXCJ9fScsICd3aHInLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwiaGlnaCByaXNrXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5IaWdoIHJpc2s8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPk1vZGVyYXRlIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkxvdyByaXNrPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+SGlnaCByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+TW9kZXJhdGUgcmlzazxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+TG93IHJpc2s8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5IaWdoIHJpc2s8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcIm1vZGVyYXRlIHJpc2tcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+SGlnaCByaXNrPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+TW9kZXJhdGUgcmlzazxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+TG93IHJpc2s8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+SGlnaCByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Mb3cgcmlzazxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJsb3cgcmlza1wiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5IaWdoIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPk1vZGVyYXRlIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Mb3cgcmlzazxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5IaWdoIHJpc2s8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkxvdyByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2VzcyB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+TG93IHJpc2s8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAxOTo0OToxMScpLA0KKDMsIDEsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjIyLjRcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE3LjRcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE1LjlcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE0LjFcIn0sXCJjYWxjdWxhdGlvbnM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjkuNFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjQuMlwifSxcImNhbGN1bGF0aW9uczZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjAuNVwifSxcImNhbGN1bGF0aW9uczdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMTlcIn0sXCJjYWxjdWxhdGlvbnM4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjE3LjVcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEzLjlcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNi4xXCJ9LFwiY2FsY3VsYXRpb25zMTFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjIuNVwifSxcImNhbGN1bGF0aW9uczEyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIxLjFcIn0sXCJjYWxjdWxhdGlvbnMxM1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxOS42XCJ9LFwiY2FsY3VsYXRpb25zMTRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMTYuM1wifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjI3LjVcIn0sXCJjYWxjdWxhdGlvbnMxNlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyNC4xXCJ9LFwiY2FsY3VsYXRpb25zMTdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjIuN1wifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIxLjNcIn0sXCJjYWxjdWxhdGlvbnMxOVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxNy45XCJ9LFwiY2FsY3VsYXRpb25zMjBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjguNVwifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjI1XCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjMuNVwifSxcImNhbGN1bGF0aW9uczIzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zMjRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTguNFwifSxcImNhbGN1bGF0aW9uczI1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjI3LjdcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyMy43XCJ9LFwiY2FsY3VsYXRpb25zMjdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjIuMVwifSxcImNhbGN1bGF0aW9uczI4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjIwLjZcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIxNy4xXCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjkuM1wifSxcImNhbGN1bGF0aW9uczMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjI0LjlcIn0sXCJjYWxjdWxhdGlvbnMzMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyMy4xXCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjEuNlwifSxcImNhbGN1bGF0aW9uczM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjE4XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMzIuMVwifSxcImNhbGN1bGF0aW9uczM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjI4LjFcIn0sXCJjYWxjdWxhdGlvbnMzN1wiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNi40XCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjQuOVwifSxcImNhbGN1bGF0aW9uczM5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIxLjNcIn0sXCJjYWxjdWxhdGlvbnM0MFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIzNS42XCJ9LFwiY2FsY3VsYXRpb25zNDFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMzEuNlwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjMwLjFcIn0sXCJjYWxjdWxhdGlvbnM0M1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyOC41XCJ9LFwiY2FsY3VsYXRpb25zNDRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjVcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzNi42XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMzIuNVwifSxcImNhbGN1bGF0aW9uczQ3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjMwLjlcIn0sXCJjYWxjdWxhdGlvbnM0OFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyOS4zXCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjUuMVwifX0nLCAnZmF0X3BlcmNlbnRhZ2UnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXIgdWstdmlzaWJsZS1zbWFsbFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+RmFpcjxcXC9idXR0b24+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAyMDowMToyMycpOw0KDQotLQ0KLS0gRHVtcGluZyBkYXRhIGZvciB0YWJsZSBgI19fW1tbY29tcG9uZW50XV1dX2NoYXJ0YA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV9jaGFydGAgKGBpZGAsIGBkZXRhaWxzYCwgYGphdmFzY3JpcHRfdGFibGVgLCBgbmFtZWAsIGBudW1iZXJgLCBgdGFyZ2V0YCwgYHRhcmdldF9maWVsZHNgLCBgdHlwZWAsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJMYWJlbFwiLFwidHlwZVwiOlwic3RyaW5nXCJ9LHtcImxhYmVsXCI6XCJWYWx1ZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCJMZWFuIFdlaWdodFwifSx7XCJ2XCI6OTIuMzR9XX0se1wiY1wiOlt7XCJ2XCI6XCJGYXQgV2VpZ2h0XCJ9LHtcInZcIjoxOS42NX1dfV19LFwib3B0aW9uc1wiOntcImZvbnROYW1lXCI6XCJWZXJkYW5hXCIsXCJoQXhpc1wiOntcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwibm9uZVwiLFwibGVnZW5kVGV4dFN0eWxlXCI6e1wiY29sb3JcIjpcIiMyMjJcIixcImZvbnRTaXplXCI6MTIsXCJib2xkXCI6dHJ1ZSxcIml0YWxpY1wiOnRydWV9LFwidGl0bGVcIjpcIkJvZHkgV2VpZ2h0XCIsXCJ0aXRsZVRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMDAwXCIsXCJmb250U2l6ZVwiOlwiMjBcIixcImJvbGRcIjp0cnVlfSxcInZBeGVzXCI6W3tcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJsb2dTY2FsZVwiOmZhbHNlfSx7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwibG9nU2NhbGVcIjpmYWxzZX1dLFwidHlwZVwiOlwibGluZVwiLFwiYm9vbGVhblJvbGVcIjpcImNlcnRhaW50eVwiLFwic2VyaWVzXCI6W3tcInR5cGVcIjpcImJhcnNcIn0se1widHlwZVwiOlwiYmFyc1wifSx7XCJ0eXBlXCI6XCJiYXJzXCJ9LHtcInR5cGVcIjpcImJhcnNcIn0se1widHlwZVwiOlwiYmFyc1wifV0sXCJ3aWR0aFwiOjYwMCxcImhlaWdodFwiOjM3MSxcImlzM0RcIjp0cnVlLFwicGllSG9sZVwiOjAsXCJzbGljZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiM5M2M0N2RcIn0sXCIxXCI6e1wiY29sb3JcIjpcIiNiNGE3ZDZcIn19LFwicGllU2xpY2VUZXh0XCI6XCJsYWJlbFwiLFwidGhlbWVcIjpcIm1heGltaXplZFwifSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIlBpZUNoYXJ0XCJ9JywgJyhMYWJlbCwgVmFsdWUpXHJcbihbYW50aHJvcG9tZXRyeV9sYWJlbF9sZWFuX3dlaWdodF0sIFthbnRocm9wb21ldHJ5X2xlYW5fd2VpZ2h0XSlcclxuKFthbnRocm9wb21ldHJ5X2xhYmVsX2ZhdF93ZWlnaHRdLCBbYW50aHJvcG9tZXRyeV9mYXRfd2VpZ2h0XSknLCAnQm9keSBXZWlnaHQnLCAzLCAxLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcImxlYW5fd2VpZ2h0XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcImZhdF93ZWlnaHRcIn19JywgJ1BpZUNoYXJ0JywgMSwgJzIwMTgtMDktMjcgMTA6Mzg6NDMnKSwNCigyLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIkJNSVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJGYXQgUGVyY2VudGFnZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzA4XCJ9LHtcInZcIjozMi43Mn0se1widlwiOjIzLjYzfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8wNFwifSx7XCJ2XCI6MzIuNzJ9LHtcInZcIjoyMy42M31dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjMyLjcyfSx7XCJ2XCI6MTcuNTV9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzEwXCJ9LHtcInZcIjozMi43Mn0se1widlwiOjE3LjU1fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOVwifSx7XCJ2XCI6MzAuNTV9LHtcInZcIjoyOC4yfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOFwifSx7XCJ2XCI6MzIuNzJ9LHtcInZcIjoyNi43MX1dfV19LFwib3B0aW9uc1wiOntcImhBeGlzXCI6e1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwic2xhbnRlZFRleHRBbmdsZVwiOjMwLFwic2xhbnRlZFRleHRcIjp0cnVlLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidmlld1dpbmRvd1wiOm51bGwsXCJ2aWV3V2luZG93TW9kZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwiaW5cIixcInRpdGxlXCI6XCJQcm9ncmVzc1wiLFwidkF4ZXNcIjpbe1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcImxvZ1NjYWxlXCI6ZmFsc2V9LHtcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJsb2dTY2FsZVwiOmZhbHNlfV0sXCJpc1N0YWNrZWRcIjpmYWxzZSxcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwibGluZVdpZHRoXCI6MixcImludGVycG9sYXRlTnVsbHNcIjp0cnVlLFwiZG9tYWluQXhpc1wiOntcImRpcmVjdGlvblwiOi0xfSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcInNlcmllc1wiOntcIjBcIjp7XCJ0YXJnZXRBeGlzSW5kZXhcIjoxLFwiZXJyb3JCYXJzXCI6e1wiZXJyb3JUeXBlXCI6XCJub25lXCJ9fSxcIjFcIjp7XCJ0YXJnZXRBeGlzSW5kZXhcIjowLFwiZXJyb3JCYXJzXCI6e1wiZXJyb3JUeXBlXCI6XCJub25lXCIsXCJtYWduaXR1ZGVcIjoxMH19fSxcInRoZW1lXCI6XCJtYXhpbWl6ZWRcIixcImZvY3VzVGFyZ2V0XCI6XCJjYXRlZ29yeVwifSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkxpbmVDaGFydFwifScsICcoRGF5LCBbYW50aHJvcG9tZXRyeV9sYWJlbF9ibWldLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9mYXRfcGVyY2VudGFnZV0pXHJcbihbMF9hbnRocm9wb21ldHJ5X2RheV0sIFswX2FudGhyb3BvbWV0cnlfYm1pXSwgWzBfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pXHJcbihbMV9hbnRocm9wb21ldHJ5X2RheV0sIFsxX2FudGhyb3BvbWV0cnlfYm1pXSwgWzFfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pXHJcbihbMl9hbnRocm9wb21ldHJ5X2RheV0sIFsyX2FudGhyb3BvbWV0cnlfYm1pXSwgWzJfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pJywgJ1Byb2dyZXNzJywgNCwgMywgJ3tcInRhcmdldF9maWVsZHMwXCI6e1wic2VsZWN0aW9uXCI6XCJkYXlcIn0sXCJ0YXJnZXRfZmllbGRzMVwiOntcInNlbGVjdGlvblwiOlwiYm1pXCJ9LFwidGFyZ2V0X2ZpZWxkczJcIjp7XCJzZWxlY3Rpb25cIjpcImZhdF9wZXJjZW50YWdlXCJ9fScsICdMaW5lQ2hhcnQnLCAxLCAnMjAxOC0wOS0yNyAxMToyODozNycpLA0KKDMsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJEYXlcIixcInR5cGVcIjpcInN0cmluZ1wifSx7XCJsYWJlbFwiOlwiV2VpZ2h0XCIsXCJ0eXBlXCI6XCJudW1iZXJcIn1dLFwicm93c1wiOlt7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjExMn1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMDkvMTBcIn0se1widlwiOjExMn1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMDkvMDlcIn0se1widlwiOjk5fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOFwifSx7XCJ2XCI6MTEyfV19XX0sXCJvcHRpb25zXCI6e1widGl0bGVcIjpcIldlaWdodFwiLFwidkF4ZXNcIjpbe1widGl0bGVcIjpudWxsLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfX0se1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbH1dLFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcImxpbmVXaWR0aFwiOjIsXCJoQXhpc1wiOntcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjpudWxsLFwidmlld1dpbmRvd01vZGVcIjpudWxsLFwic2xhbnRlZFRleHRBbmdsZVwiOjMwLFwic2xhbnRlZFRleHRcIjp0cnVlLFwidGl0bGVcIjpcIlwifSxcImxlZ2VuZFwiOlwibm9uZVwiLFwid2lkdGhcIjo2MDAsXCJoZWlnaHRcIjozNzEsXCJkb21haW5BeGlzXCI6e1wiZGlyZWN0aW9uXCI6LTF9LFwic2VyaWVzXCI6e1wiMFwiOntcImNvbG9yXCI6XCIjNzQxYjQ3XCIsXCJ0YXJnZXRBeGlzSW5kZXhcIjowLFwibGluZVdpZHRoXCI6NCxcInBvaW50U2l6ZVwiOjEwfX0sXCJ0aGVtZVwiOlwibWF4aW1pemVkXCJ9LFwic3RhdGVcIjp7fSxcInZpZXdcIjp7XCJjb2x1bW5zXCI6bnVsbCxcInJvd3NcIjpudWxsfSxcImlzRGVmYXVsdFZpc3VhbGl6YXRpb25cIjp0cnVlLFwiY2hhcnRUeXBlXCI6XCJMaW5lQ2hhcnRcIn0nLCAnKERheSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfd2VpZ2h0XSlcclxuKFswX2FudGhyb3BvbWV0cnlfZGF5XSwgWzBfYW50aHJvcG9tZXRyeV93ZWlnaHRdKVxyXG4oWzFfYW50aHJvcG9tZXRyeV9kYXldLCBbMV9hbnRocm9wb21ldHJ5X3dlaWdodF0pXHJcbihbMl9hbnRocm9wb21ldHJ5X2RheV0sIFsyX2FudGhyb3BvbWV0cnlfd2VpZ2h0XSlcclxuKFszX2FudGhyb3BvbWV0cnlfZGF5XSwgWzNfYW50aHJvcG9tZXRyeV93ZWlnaHRdKVxyXG4oWzRfYW50aHJvcG9tZXRyeV9kYXldLCBbNF9hbnRocm9wb21ldHJ5X3dlaWdodF0pJywgJ1dlaWdodCcsIDUsIDMsICd7XCJ0YXJnZXRfZmllbGRzMFwiOntcInNlbGVjdGlvblwiOlwiZGF5XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcIndlaWdodFwifX0nLCAnTGluZUNoYXJ0JywgMSwgJzIwMTgtMTAtMDQgMjE6Mzc6MTgnKSwNCig0LCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIkNhbGZcIixcInR5cGVcIjpcIm51bWJlclwifSx7XCJsYWJlbFwiOlwiQ2hlc3RcIixcInR5cGVcIjpcIm51bWJlclwifSx7XCJsYWJlbFwiOlwiSGlwXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIk1pZGRsZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJOYXZlbFwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJOZWNrXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlRoaWdoXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlVwcGVyIEFybVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzA4XCJ9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6MTA2LjV9LHtcInZcIjozMn0se1widlwiOm51bGx9LHtcInZcIjpudWxsfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8wOFwifSx7XCJ2XCI6NDIuNX0se1widlwiOjExM30se1widlwiOjg1fSx7XCJ2XCI6ODB9LHtcInZcIjoxMTB9LHtcInZcIjpudWxsfSx7XCJ2XCI6MjN9LHtcInZcIjoyM31dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjQyLjV9LHtcInZcIjoxMTkuNX0se1widlwiOjEyNS4yfSx7XCJ2XCI6MTA2LjV9LHtcInZcIjoxMDYuNX0se1widlwiOm51bGx9LHtcInZcIjo2NS41fSx7XCJ2XCI6MzYuNX1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjo4MH0se1widlwiOjMwfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzEwXCJ9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6ODB9LHtcInZcIjozMH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOVwifSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOjExMH0se1widlwiOjQ1fSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzA4XCJ9LHtcInZcIjo0Mi41fSx7XCJ2XCI6MTE5LjV9LHtcInZcIjoxMTUuNX0se1widlwiOjEwNi41fSx7XCJ2XCI6MTEyfSx7XCJ2XCI6bnVsbH0se1widlwiOjY1LjV9LHtcInZcIjozNi41fV19XX0sXCJvcHRpb25zXCI6e1wibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwibm9uZVwiLFwidGl0bGVcIjpcIkNpcmN1bWZlcmVuY2VzXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbCxcInRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMjIyXCIsXCJmb250U2l6ZVwiOlwiMTJcIixcIml0YWxpY1wiOmZhbHNlfSxcInNsYW50ZWRUZXh0QW5nbGVcIjo2MCxcInNsYW50ZWRUZXh0XCI6dHJ1ZX0sXCJ3aWR0aFwiOjYwMCxcImhlaWdodFwiOjM3MSxcImludGVycG9sYXRlTnVsbHNcIjp0cnVlLFwiZm9jdXNUYXJnZXRcIjpcImNhdGVnb3J5XCIsXCJzZXJpZXNcIjp7XCIwXCI6e1widGFyZ2V0QXhpc0luZGV4XCI6MX0sXCIyXCI6e1widGFyZ2V0QXhpc0luZGV4XCI6MSxcImxpbmVXaWR0aFwiOjJ9LFwiM1wiOntcInRhcmdldEF4aXNJbmRleFwiOjF9fSxcImRvbWFpbkF4aXNcIjp7XCJkaXJlY3Rpb25cIjoxfSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcImZvbnROYW1lXCI6XCJWZXJkYW5hXCIsXCJ0aXRsZVRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMDAwXCIsXCJmb250U2l6ZVwiOjEyLFwiYm9sZFwiOnRydWUsXCJpdGFsaWNcIjp0cnVlfX0sXCJzdGF0ZVwiOnt9LFwidmlld1wiOntcImNvbHVtbnNcIjpudWxsLFwicm93c1wiOm51bGx9LFwiaXNEZWZhdWx0VmlzdWFsaXphdGlvblwiOmZhbHNlLFwiY2hhcnRUeXBlXCI6XCJMaW5lQ2hhcnRcIn0nLCAnKERheSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfY2FsZl0sIFthbnRocm9wb21ldHJ5X2xhYmVsX2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfaGlwXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfbWlkZGxlXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9jaXJjdW1mZXJlbmNlc19uZWNrXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfdGhpZ2hdLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzBfYW50aHJvcG9tZXRyeV9kYXldLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzBfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFswX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzBfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzFfYW50aHJvcG9tZXRyeV9kYXldLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzFfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFsxX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzFfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzJfYW50aHJvcG9tZXRyeV9kYXldLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzJfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFsyX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzJfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzNfYW50aHJvcG9tZXRyeV9kYXldLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzNfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFszX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzNfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzRfYW50aHJvcG9tZXRyeV9kYXldLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzRfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFs0X2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzRfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4vLyBUaGUgcmVzdCBvZiB0aGUgcm93cyBhcmUgYWRkZWQgZHluYW1pY2FsbHlcclxuLy8gWW91IG5lZWQgb25seSBzZXQgdGhlIGZldyBhYm92ZScsICdDaXJjdW1mZXJlbmNlcycsIDMsIDMsICd7XCJ0YXJnZXRfZmllbGRzMFwiOntcInNlbGVjdGlvblwiOlwiZGF5XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX2NhbGZcIn0sXCJ0YXJnZXRfZmllbGRzMlwiOntcInNlbGVjdGlvblwiOlwiY2lyY3VtZmVyZW5jZXNfY2hlc3RcIn0sXCJ0YXJnZXRfZmllbGRzM1wiOntcInNlbGVjdGlvblwiOlwiY2lyY3VtZmVyZW5jZXNfaGlwXCJ9LFwidGFyZ2V0X2ZpZWxkczRcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX21pZGRsZVwifSxcInRhcmdldF9maWVsZHM1XCI6e1wic2VsZWN0aW9uXCI6XCJjaXJjdW1mZXJlbmNlc19uYXZlbFwifSxcInRhcmdldF9maWVsZHM2XCI6e1wic2VsZWN0aW9uXCI6XCJjaXJjdW1mZXJlbmNlc19uZWNrXCJ9LFwidGFyZ2V0X2ZpZWxkczdcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX3RoaWdoXCJ9LFwidGFyZ2V0X2ZpZWxkczhcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX3VwcGVyX2FybVwifX0nLCAnTGluZUNoYXJ0JywgJycsICcyMDE4LTEwLTA0IDIxOjUxOjQ4Jyk7DQo=', '', 'Anthropometry (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_anthropometry_server.xml', 'http://www.vdm.io', '', 'rfe7CO7xK6KBxobI8+M/YRQ0mg1zbOmv8pmsmWynCGg=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 11, '', 1, 23),
(51, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:03:52', '', '8NFbjPIRqtyFYjXf9cgXCa2Yw0ZLkjZ3vfsK1HODusg=', 't9QihU1+uDb6nkvICLy4Me4Kw3J4f+Tsw33K5oOdI7g=', '', 'xBQEhdioWj0xBhbZMEgkCo7PSwylsaadj5bvgOY6TIs=', '', '', 'A_188', 2, '', 'Medical Aid Info', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_medicalaid', 'cGCACZt85oxM20ztOyRarIDDgGMpqwxwypOIfljEh4w5jrd/Pux9+0RZyJax0UrY', '', '705be6e4-9cc0-405e-b772-6f9e54f07838', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:27:39', 2, 'Medical Aid', 'coral_medicalaid', '', 4, '', '', 'W0NVU1RPTUNPREU9bWVkaWNhbGFpZEhlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Medical Aid Info', '', '', 'Medical Aid (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_medicalaid_server.xml', 'http://www.vdm.io', '', 'Mq1QTg8AIvgd7JBiNDJI6rYhRb0plOs2qigJDc+6GHU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 8, '', 1, 21),
(52, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.3', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:05:31', '', 'QwZI1BiaWmTS0anBpVvqtZEd2AsaMqHf+cQ61QijkNs=', '53XWHWscjYet9/2uOseE/YDP6vx6YXau/rRAGuJ5mhU=', '', '1tLvEhB5ag4ldY9ZSrZ9jQZ0k4/GQfY3U9P6KYzep20=', '', '', 'A_189', 2, '', 'Contact Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_contactdetails', '1PWzKLwhU2ENa8+yjDwwVgLP5mrAbFKQiHhbLnN3U2Z2ZdDVvB2j4lmhOasGRFFGOa5MZJiP9oEr8552E8vvUg==', '', 'e0228373-f560-4d61-8f2f-553d3674f245', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:28:14', 2, 'Contact', 'coral_contactdetails', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29udGFjdGRldGFpbHNIZWxwZXJCb3RoXQ==', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Contact Details', '', '', 'Contact Details (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_contactdetails_server.xml', 'http://www.vdm.io', '', 'oCK4MOKNKUHMkQ4HZuNY4C8OtpJw9l0HlOk39ZQAtlE=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 9, '', 1, 17),
(53, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:07:27', '', 'LE2CU3KIhuQ21TtiwtUlq46LG3MQq9AgCl8hDYjnuRE=', 'uA0toPlC2azBt7J+no6aB3v1r+UWExfqQhir8Wuk6wE=', '', 'yjGktgp/Mzqf9b3rcq/5sSay2p2r7KNeo84mkvkUv9c=', '', '', 'A_190', 2, '', 'Personal Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_personaldetails', 'cfl6/KQMzcbh+A0rQNy58iAMWa6Atm9obsfEIXdOqCyNE1d6l+p4419ftiJHXRpmYC+gFo/qpJlhopYj68MuTw==', '', '01db3a87-9e36-4959-a490-64582cc369db', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:27:49', 2, 'Personal', 'coral_personaldetails', '', 4, '', '', 'W0NVU1RPTUNPREU9cGVyc29uYWxkZXRhaWxzSGVscGVyQm90aF0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Personal Details', '', '', 'Personal Details (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_personaldetails_server.xml', 'http://www.vdm.io', '', 'gF3D+fLBYY4rK78k5Ty5rs3URFXZ7BXVKPhP+03knnU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 13, '', 1, 19),
(54, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:08:53', '', 'mg467KYDaGLTXPeHtCf3G7ORrPHETnpqWAPAlL+ctp4=', 'kvUBCp6T568wVm1g+/9xVLPoJ3DgtPYIl0x3cEjKQkk=', '', '9Mtl4Gk+GgvwaHtOd8VXvsSOTgZ9qdAtI+YJoILNRO4=', '', '', 'A_193', 2, '', 'Doctor Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_doctordetails', 'UH3vD3UEpRgXVAsj95yFAjUMzBF4aoCVz/R6oMyxcON/32X2aCPW88suyBzRifapMEzKdthPFuC8IMLPqtaPkg==', '', '4e3321d6-0fad-4916-bd92-cd36d81fc695', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:27:33', 2, 'Doctor', 'coral_doctordetails', '', 4, '', '', 'W0NVU1RPTUNPREU9ZG9jdG9yZGV0YWlsc0hlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkK2NvcmFsXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Doctor Details', '', '', 'Doctor Details (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_doctordetails_server.xml', 'http://www.vdm.io', '', 'H0IcbqK10IAQdO5c8JSLzyhEot27+p+N/fmARYoCPC0=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 6, '', 1, 18),
(55, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.5', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:09:55', '', '1VWz93/qjNiFwZXP/wlBrYe4qI/oYn/hpYpSKbYJTss=', '3GX+XZCGa4PkBOFVnXeqOtcktbCrmsfY5lLr2OJyC+0=', '', 'n/xQ+LZhbxhSSzG7Wyd3dr1CtV4UJRraYmAGCvBeM2M=', '', '', '', 1, '', 'Communicate', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_communicate', 'umYy+mxep7WIgRkS4teMHfx7O8+f/SFg1kiDcJBXueDsEnrLjADFnHGs8fhq9fBdO4BLxi84O0iJs6S0CxwBUw==', '', 'a3809036-adb7-455e-b2f7-634aed05e33c', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:27:59', 2, 'Communicate', 'coral_communicate', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29tbXVuaWNhdGVIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Communicate', '', '', 'Communicate (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_communicate_server.xml', 'http://www.vdm.io', '', 'xNLlKoDw7Ztj7nP3JHX08h/Pzz/514R2vkr04xFPJAw=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 8, '', 1, 28),
(56, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.5', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:10:55', '', 'FWA/RJgvHyHW80DpylnqtxdFCH0gYMx11Alf1TlY5NM=', '2ktBxO5XfGGgIDcjxYVMZYU6JxYYK6VL0lyr2Q52R2c=', '', 'oyAKzpNqvq19QlcEeQj43KTvJc+YwPakUSEHo2bgFYQ=', '', '', 'A_198', 2, '', 'Fitness Test', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_fitnesstest', '7Oofno/gye7Bh8McOZ0REABjxSVETqzyc7et70rLIlBoTFeUE0cnp8ZvA+L/IPifYPHbwQuIwMCDds/QVDgUqQ==', '', '5dc356a3-62fa-4c43-89f8-b942050645b1', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:27:54', 2, 'Fitness Test', 'coral_fitnesstest', '', 4, '', '', 'W0NVU1RPTUNPREU9Zml0bmVzc3Rlc3RIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Fitness Test', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0dXNfbm9ybWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdHVzX25vcm1gIChgaWRgLCBgY2FsY3VsYXRpb25fdHlwZWAsIGBjYWxjdWxhdGlvbnNgLCBgc2VsZWN0aW9uYCwgYHRlbXBsYXRlc2AsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsIDEsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjUzXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI1MFwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNDRcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjM5XCJ9LFwiY2FsY3VsYXRpb25zNFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzNVwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNThcIn0sXCJjYWxjdWxhdGlvbnM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjU1XCJ9LFwiY2FsY3VsYXRpb25zN1wiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczhcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDRcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjM5XCJ9LFwiY2FsY3VsYXRpb25zMTBcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNjBcIn0sXCJjYWxjdWxhdGlvbnMxMVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI1NlwifSxcImNhbGN1bGF0aW9uczEyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjUxXCJ9LFwiY2FsY3VsYXRpb25zMTNcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDZcIn0sXCJjYWxjdWxhdGlvbnMxNFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjYyXCJ9LFwiY2FsY3VsYXRpb25zMTZcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNTlcIn0sXCJjYWxjdWxhdGlvbnMxN1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI1NFwifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjQ4XCJ9LFwiY2FsY3VsYXRpb25zMTlcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiNDJcIn0sXCJjYWxjdWxhdGlvbnMyMFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI2N1wifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjYzXCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNTlcIn0sXCJjYWxjdWxhdGlvbnMyM1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCI1NVwifSxcImNhbGN1bGF0aW9uczI0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjUwXCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNDdcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczI3XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMjhcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMzBcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczMwXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjUyXCJ9LFwiY2FsY3VsYXRpb25zMzFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNDVcIn0sXCJjYWxjdWxhdGlvbnMzMlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczMzXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMzRcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnMzNVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI1NVwifSxcImNhbGN1bGF0aW9uczM2XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjQ3XCJ9LFwiY2FsY3VsYXRpb25zMzdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNDJcIn0sXCJjYWxjdWxhdGlvbnMzOFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIzN1wifSxcImNhbGN1bGF0aW9uczM5XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjI4XCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNThcIn0sXCJjYWxjdWxhdGlvbnM0MVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjQ0XCJ9LFwiY2FsY3VsYXRpb25zNDNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDBcIn0sXCJjYWxjdWxhdGlvbnM0NFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzMVwifSxcImNhbGN1bGF0aW9uczQ1XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjY0XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNTVcIn0sXCJjYWxjdWxhdGlvbnM0N1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQ4XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjQ0XCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMzdcIn19JywgJ3BhcnRpYWxfY3VybF91cHMnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZTI4MzI3XFxcIj48Yj5GYWlyPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcIndvcmRcIjpcImF2ZXJhZ2VcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiMyZDcwOTFcXFwiPjxiPkF2ZXJhZ2U8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzM1wiOntcInRhcmdldFwiOlwiM1wiLFwid29yZFwiOlwiZ29vZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9fScsIDEsICcyMDE4LTEwLTExIDE5OjU2OjU5JyksDQooMiwgMSwgJ3tcImNhbGN1bGF0aW9uczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMThcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI4XCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCI3XCJ9LFwiY2FsY3VsYXRpb25zNFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzXCJ9LFwiY2FsY3VsYXRpb25zNVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMTZcIn0sXCJjYWxjdWxhdGlvbnM3XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjExXCJ9LFwiY2FsY3VsYXRpb25zOFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxMFwifSxcImNhbGN1bGF0aW9uczlcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiNFwifSxcImNhbGN1bGF0aW9uczEwXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjI3XCJ9LFwiY2FsY3VsYXRpb25zMTFcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjJcIn0sXCJjYWxjdWxhdGlvbnMxMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxNlwifSxcImNhbGN1bGF0aW9uczEzXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMTRcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiOVwifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMTZcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjhcIn0sXCJjYWxjdWxhdGlvbnMxN1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyMlwifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjE5XCJ9LFwiY2FsY3VsYXRpb25zMTlcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTRcIn0sXCJjYWxjdWxhdGlvbnMyMFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIzN1wifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjMxXCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjRcIn0sXCJjYWxjdWxhdGlvbnMyM1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczI0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIxOFwifSxcImNhbGN1bGF0aW9uczI3XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMjhcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTBcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI3XCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnMzMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczMyXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjE0XCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTJcIn0sXCJjYWxjdWxhdGlvbnMzNFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI4XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMzNcIn0sXCJjYWxjdWxhdGlvbnMzNlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyN1wifSxcImNhbGN1bGF0aW9uczM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTdcIn0sXCJjYWxjdWxhdGlvbnMzOVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIxNVwifSxcImNhbGN1bGF0aW9uczQwXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjQzXCJ9LFwiY2FsY3VsYXRpb25zNDFcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMzRcIn0sXCJjYWxjdWxhdGlvbnM0MlwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyOFwifSxcImNhbGN1bGF0aW9uczQzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIzXCJ9LFwiY2FsY3VsYXRpb25zNDRcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjFcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQ2XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjQwXCJ9LFwiY2FsY3VsYXRpb25zNDdcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMzJcIn0sXCJjYWxjdWxhdGlvbnM0OFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyNlwifSxcImNhbGN1bGF0aW9uczQ5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjIzXCJ9fScsICdwdXNoX3VwcycsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMTk6NTg6NDUnKSwNCigzLCAxLCAne1wiY2FsY3VsYXRpb25zMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczFcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMThcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxMFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiN1wifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjIzXCJ9LFwiY2FsY3VsYXRpb25zN1wiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxNFwifSxcImNhbGN1bGF0aW9uczhcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTJcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjhcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIzM1wifSxcImNhbGN1bGF0aW9uczExXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjI3XCJ9LFwiY2FsY3VsYXRpb25zMTJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjJcIn0sXCJjYWxjdWxhdGlvbnMxM1wiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxN1wifSxcImNhbGN1bGF0aW9uczE0XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMTVcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNDNcIn0sXCJjYWxjdWxhdGlvbnMxNlwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIzNFwifSxcImNhbGN1bGF0aW9uczE3XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjI4XCJ9LFwiY2FsY3VsYXRpb25zMThcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMxOVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczIwXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjQ5XCJ9LFwiY2FsY3VsYXRpb25zMjFcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNDBcIn0sXCJjYWxjdWxhdGlvbnMyMlwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIzMlwifSxcImNhbGN1bGF0aW9uczIzXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjI2XCJ9LFwiY2FsY3VsYXRpb25zMjRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMyNVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIxOFwifSxcImNhbGN1bGF0aW9uczI2XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMjdcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiOFwifSxcImNhbGN1bGF0aW9uczI4XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjdcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzXCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjFcIn0sXCJjYWxjdWxhdGlvbnMzMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIxNlwifSxcImNhbGN1bGF0aW9uczMyXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjExXCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTBcIn0sXCJjYWxjdWxhdGlvbnMzNFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI0XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjdcIn0sXCJjYWxjdWxhdGlvbnMzNlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyMlwifSxcImNhbGN1bGF0aW9uczM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjE2XCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTVcIn0sXCJjYWxjdWxhdGlvbnMzOVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI5XCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMzRcIn0sXCJjYWxjdWxhdGlvbnM0MVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyOFwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zNDNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTlcIn0sXCJjYWxjdWxhdGlvbnM0NFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIxNFwifSxcImNhbGN1bGF0aW9uczQ1XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjM3XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMzFcIn0sXCJjYWxjdWxhdGlvbnM0N1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNFwifSxcImNhbGN1bGF0aW9uczQ4XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIxXCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTVcIn19JywgJ3B1bGxfdXBzJywgJ3tcInRlbXBsYXRlczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcIndvcmRcIjpcInBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwiZmFpclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+RmFpcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJhdmVyYWdlXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjMmQ3MDkxXFxcIj48Yj5BdmVyYWdlPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5FeGNlbGxlbnQ8XFwvYj48XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDowODozMScpLA0KKDQsIDIsICd7XCJjYWxjdWxhdGlvbnM0OVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDIwXCJ9LFwiY2FsY3VsYXRpb25zNTBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIyMSwgNDBcIn0sXCJjYWxjdWxhdGlvbnM1MVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCA2MFwifSxcImNhbGN1bGF0aW9uczUyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiNjEsIDgwXCJ9LFwiY2FsY3VsYXRpb25zNTNcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI4MSwgMTAwXCJ9LFwiY2FsY3VsYXRpb25zNTRcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDEsIDMwMFwifX0nLCAnYnJpZGdlX3NpZGVfbGVmdCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcInBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+RmFpcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5FeGNlbGxlbnQ8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNVwiOntcInRhcmdldFwiOlwiNVwiLFwid29yZFwiOlwiU3VwZXJpb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5TdXBlcmlvcjxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDoxNDo1MCcpLA0KKDUsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMCwgMjBcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMjEsIDQwXCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCA2MFwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI2MSwgODBcIn0sXCJjYWxjdWxhdGlvbnM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiODEsIDEwMFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDEsIDMwMFwifX0nLCAnYnJpZGdlX3NpZGVfcmlnaHQnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwidmVyeSBwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5WZXJ5IFBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiMyZDcwOTFcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcIndvcmRcIjpcIlN1cGVyaW9yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+U3VwZXJpb3I8XFwvYj48XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMjA6Mjk6MDcnKSwNCig2LCAyLCAne1wiY2FsY3VsYXRpb25zMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDMwXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjMxLCA2MFwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI2MSwgOTBcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTEsIDExOVwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMjAsIDE0OVwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNTAsIDMwMFwifX0nLCAnZnJvbnRfYnJpZGdlJywgJ3tcInRlbXBsYXRlczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcIndvcmRcIjpcInZlcnkgcG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+VmVyeSBQb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiZmFpclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZTI4MzI3XFxcIj48Yj5GYWlyPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzM1wiOntcInRhcmdldFwiOlwiM1wiLFwid29yZFwiOlwiZ29vZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjMmQ3MDkxXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM1XCI6e1widGFyZ2V0XCI6XCI1XCIsXCJ3b3JkXCI6XCJTdXBlcmlvclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPlN1cGVyaW9yPFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9fScsIDEsICcyMDE4LTEwLTExIDIwOjMwOjM4JyksDQooNywgMiwgJ3tcImNhbGN1bGF0aW9uczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLCA4M1wifSxcImNhbGN1bGF0aW9uczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI4NCwgOTRcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTUsIDEwMlwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDMsIDExMlwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMTMsIDMwMFwifX0nLCAnZ3JpcF9zdHJlbmd0aF90b3RhbCcsICd7XCJ0ZW1wbGF0ZXM1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNlwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczhcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzOVwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDozMzo0MScpLA0KKDgsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMCwgOTFcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTEsIDEyNVwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMjYsIDE3NlwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNzcsIDIwOFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIyMDksIDMwMFwifX0nLCAnYmFja19zdHJlbmd0aCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDozODo1MicpLA0KKDksIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiLTUwLCAtOFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNywgLTFcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDVcIn0sXCJjYWxjdWxhdGlvbnMxNVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjYsIDE2XCJ9LFwiY2FsY3VsYXRpb25zMjBcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNywgMTAwXCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNTAsIC03XCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNiwgLTFcIn0sXCJjYWxjdWxhdGlvbnMzNVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDEwXCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMSwgMjBcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjIxLCAxMDBcIn19JywgJ3NpdF9yZWFjaCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMjI6MTc6MDYnKTsNCg0KLS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9jaGFydGANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fY2hhcnRgIChgaWRgLCBgZGV0YWlsc2AsIGBqYXZhc2NyaXB0X3RhYmxlYCwgYG5hbWVgLCBgbnVtYmVyYCwgYHRhcmdldGAsIGB0YXJnZXRfZmllbGRzYCwgYHR5cGVgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgKSBWQUxVRVMNCigxLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiU3RhZ2VcIixcInR5cGVcIjpcInN0cmluZ1wifSx7XCJsYWJlbFwiOlwiSGVhcnQgUmF0ZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJTeXN0b2xpYyBCbG9vZCBQcmVzc3VyZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJEaWFzdG9saWMgQmxvb2QgUHJlc3N1cmVcIixcInR5cGVcIjpcIm51bWJlclwifV0sXCJyb3dzXCI6W3tcImNcIjpbe1widlwiOlwiUmVzdFwifSx7XCJ2XCI6NzJ9LHtcInZcIjo0M30se1widlwiOjUzfV19LHtcImNcIjpbe1widlwiOlwiQCAyNSBXYXR0XCJ9LHtcInZcIjo4OX0se1widlwiOjUzfSx7XCJ2XCI6NjN9XX0se1wiY1wiOlt7XCJ2XCI6XCJAIDUwIFdhdHRcIn0se1widlwiOjkzfSx7XCJ2XCI6NjN9LHtcInZcIjo3M31dfSx7XCJjXCI6W3tcInZcIjpcIkAgNzUgV2F0dFwifSx7XCJ2XCI6OTJ9LHtcInZcIjo2M30se1widlwiOjczfV19LHtcImNcIjpbe1widlwiOlwiRmluYWwgLSAzIG1pbiByZXN0XCJ9LHtcInZcIjo3OH0se1widlwiOjU0fSx7XCJ2XCI6NTh9XX1dfSxcIm9wdGlvbnNcIjp7XCJmb2N1c1RhcmdldFwiOlwiY2F0ZWdvcnlcIixcImhBeGlzXCI6e1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidmlld1dpbmRvd1wiOm51bGwsXCJ2aWV3V2luZG93TW9kZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwiaW5cIixcInRoZW1lXCI6XCJtYXhpbWl6ZWRcIixcInRpdGxlXCI6XCJZTUNBXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJjdXJ2ZVR5cGVcIjpcImZ1bmN0aW9uXCIsXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwid2lkdGhcIjo2MDAsXCJoZWlnaHRcIjozNzF9LFwic3RhdGVcIjp7fSxcInZpZXdcIjp7XCJjb2x1bW5zXCI6bnVsbCxcInJvd3NcIjpudWxsfSxcImlzRGVmYXVsdFZpc3VhbGl6YXRpb25cIjpmYWxzZSxcImNoYXJ0VHlwZVwiOlwiTGluZUNoYXJ0XCJ9JywgJyhbZml0bmVzc3Rlc3RfbGFiZWxfeW1jYV9zdGFnZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF95bWNhX2hlYXJ0X3JhdGVdLCBbZml0bmVzc3Rlc3RfbGFiZWxfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV0pXHJcbihbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9vbmVdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX29uZV0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX29uZV0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9vbmVdKVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90d29dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3R3b10sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdHdvXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdvXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3R3b10pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90aHJlZV0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfdGhyZWVdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX3RocmVlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfZm91cl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfZm91cl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfZm91cl0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZm91cl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9maXZlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9maXZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9maXZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9maXZlXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF95bWNhX3N0YWdlX3NpeF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2Vfc2l4XSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9zaXhdLCBbZml0bmVzc3Rlc3RfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zaXhdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2l4XSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF95bWNhX3N0YWdlX3NldmVuXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9zZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zZXZlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9laWdodF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfZWlnaHRdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX2VpZ2h0XSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfbmluZV0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfbmluZV0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfbmluZV0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX25pbmVdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfbmluZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90ZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3Rlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdGVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3Rlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9lbGV2ZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX2VsZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfZWxldmVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWxldmVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2VsZXZlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90d2VsdmVdKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3R3ZWx2ZV0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdHdlbHZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdlbHZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3R3ZWx2ZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90aGlydGVlbl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfdGhpcnRlZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX3RoaXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhpcnRlZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhpcnRlZW5dKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfZm91cnRlZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX2ZvdXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9mb3VydGVlbl0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJ0ZWVuXSlbRU5ESUZdJywgJ1lNQ0EnLCAzLCAxLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcInltY2Ffc3RhZ2Vfb25lXCJ9fScsICdMaW5lQ2hhcnQnLCAxLCAnMjAxOC0xMC0xMSAyMjo1MzoxOCcpLA0KKDIsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJTdGFnZVwiLFwidHlwZVwiOlwic3RyaW5nXCJ9LHtcImxhYmVsXCI6XCJIZWFydCBSYXRlXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlN5c3RvbGljIEJsb29kIFByZXNzdXJlXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIkRpYXN0b2xpYyBCbG9vZCBQcmVzc3VyZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCJSZXN0XCJ9LHtcInZcIjo3Mn0se1widlwiOjY0fSx7XCJ2XCI6NTR9XX0se1wiY1wiOlt7XCJ2XCI6XCJAIDEwIFdhdHRcIn0se1widlwiOjgzfSx7XCJ2XCI6Njd9LHtcInZcIjo1N31dfSx7XCJjXCI6W3tcInZcIjpcIkAgMTIgV2F0dFwifSx7XCJ2XCI6OTB9LHtcInZcIjo2OX0se1widlwiOjU5fV19LHtcImNcIjpbe1widlwiOlwiQCAxNCBXYXR0XCJ9LHtcInZcIjo5NH0se1widlwiOjY5fSx7XCJ2XCI6NjB9XX0se1wiY1wiOlt7XCJ2XCI6XCJGaW5hbCAtIDMgbWluIHJlc3RcIn0se1widlwiOjc5fSx7XCJ2XCI6NjR9LHtcInZcIjo1N31dfV19LFwib3B0aW9uc1wiOntcImFubm90YXRpb25zXCI6e1wiZG9tYWluXCI6e319LFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJ2aWV3V2luZG93XCI6bnVsbCxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbH0sXCJsZWdhY3lTY2F0dGVyQ2hhcnRMYWJlbHNcIjp0cnVlLFwibGVnZW5kXCI6XCJpblwiLFwidGl0bGVcIjpcIkJydWNlXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJpc1N0YWNrZWRcIjpmYWxzZSxcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwidXNlRmlyc3RDb2x1bW5Bc0RvbWFpblwiOmZhbHNlLFwidGhlbWVcIjpcIm1heGltaXplZFwiLFwiZm9jdXNUYXJnZXRcIjpcImNhdGVnb3J5XCIsXCJzZXJpZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiNlMDY2NjZcIn0sXCIxXCI6e1wiY29sb3JcIjpcIiNlNjkxMzhcIn0sXCIyXCI6e1wiY29sb3JcIjpcIiM4NTIwMGNcIn19fSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkNvbHVtbkNoYXJ0XCJ9JywgJyhbZml0bmVzc3Rlc3RfbGFiZWxfYnJ1Y2Vfc3RhZ2VdLCBbZml0bmVzc3Rlc3RfbGFiZWxfYnJ1Y2VfaGVhcnRfcmF0ZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVdKVxyXG4oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX29uZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9oZWFydF9yYXRlX29uZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9vbmVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX29uZV0pXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV90d29dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV9icnVjZV9zdGFnZV90d29dLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfaGVhcnRfcmF0ZV90d29dLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdvXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV90d29dKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X2JydWNlX3N0YWdlX3RocmVlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2VfdGhyZWVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfaGVhcnRfcmF0ZV90aHJlZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV90aHJlZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X2JydWNlX3N0YWdlX2ZvdXJdKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV9icnVjZV9zdGFnZV9mb3VyXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfZm91cl0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9mb3VyXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9mb3VyXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9maXZlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2VfZml2ZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9oZWFydF9yYXRlX2ZpdmVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfYnJ1Y2Vfc3RhZ2Vfc2l4XShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2Vfc2l4XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfc2l4XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX3NpeF0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2l4XSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9zZXZlbl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX3NldmVuXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3NldmVuXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9laWdodF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX2VpZ2h0XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2VpZ2h0XSlbRU5ESUZdJywgJ0JydWNlJywgMywgMSwgJ3tcInRhcmdldF9maWVsZHMwXCI6e1wic2VsZWN0aW9uXCI6XCJicnVjZV9zdGFnZV9vbmVcIn19JywgJ0NvbHVtbkNoYXJ0JywgMSwgJzIwMTgtMTAtMTEgMjM6Mjg6MTcnKSwNCigzLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIlZPXFx1MjA4Mm1heFwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzEyXCJ9LHtcInZcIjoxNzAuNTY3fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8xMVwifSx7XCJ2XCI6MTYzLjE0Nn1dfV19LFwib3B0aW9uc1wiOntcInRpdGxlXCI6XCJWbzJtYXhcIixcInZBeGVzXCI6W3tcInRpdGxlXCI6bnVsbCxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWV9LHtcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWV9XSxcImxlZ2FjeVNjYXR0ZXJDaGFydExhYmVsc1wiOnRydWUsXCJjdXJ2ZVR5cGVcIjpcImZ1bmN0aW9uXCIsXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbH0sXCJsZWdlbmRcIjpcIm5vbmVcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwiZG9tYWluQXhpc1wiOntcImRpcmVjdGlvblwiOjF9LFwidGhlbWVcIjpcIm1heGltaXplZFwiLFwiaW50ZXJwb2xhdGVOdWxsc1wiOnRydWUsXCJzZXJpZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiNhNjRkNzlcIn19fSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkxpbmVDaGFydFwifScsICcoW2ZpdG5lc3N0ZXN0X2xhYmVsX2RheV0sIFtmaXRuZXNzdGVzdF9sYWJlbF92bzJtYXhdKVxyXG4oWzBfZml0bmVzc3Rlc3RfZGF5XSwgWzBfZml0bmVzc3Rlc3Rfdm8ybWF4XSlcclxuKFsxX2ZpdG5lc3N0ZXN0X2RheV0sIFsxX2ZpdG5lc3N0ZXN0X3ZvMm1heF0pXHJcbihbMl9maXRuZXNzdGVzdF9kYXldLCBbMl9maXRuZXNzdGVzdF92bzJtYXhdXSlcclxuKFszX2ZpdG5lc3N0ZXN0X2RheV0sIFszX2ZpdG5lc3N0ZXN0X3ZvMm1heF0pXHJcbihbNF9maXRuZXNzdGVzdF9kYXldLCBbNF9maXRuZXNzdGVzdF92bzJtYXhdKScsICdWbzJtYXgnLCAzLCAzLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcImRheVwifSxcInRhcmdldF9maWVsZHMxXCI6e1wic2VsZWN0aW9uXCI6XCJ2bzJtYXhcIn19JywgJ0xpbmVDaGFydCcsIDEsICcyMDE4LTEwLTEyIDEzOjQ4OjEzJyk7', '', 'Fitness Test (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_fitnesstest_server.xml', 'http://www.vdm.io', '', 'MnxgjFaDrp3YgcpTRakS6MFgbPoXauxaYLh1uCupYtU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 12, '', 1, 29),
(57, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:12:05', '', 'SJStMAudP7ng/sBm0iK0RPflolrulfOskLA32B2CQKU=', '45cYuqhCH35FFnDgYff1nWXE4iIRJFBLFn4xPNJIt40=', '', 'Ebil+Lx31hLp5Voef/f383O3nZcr3CigMYmvDEkTNz8=', '', '', 'A_240', 2, '', 'Health Logs', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_bankableprojects', 'ZtzPx0ECWxoMKqtVwka+aKUV3rVuAtgTXIrc0jKXE3X+Bwclk7BT84b62z8bHq3YRxrJf27roj/5HO149AHOQg==', '', 'b9391695-15ea-43cc-8f89-a9de41ed5d0f', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:28:09', 2, 'Health Log', 'coral_healthlog', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEFkZCBKb2luIFRhYmxlcyBiYXNlZCBvbiBmaWx0ZXINCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRxdWVyeSAgVGhlIGRhdGFiYXNlIHF1ZXJ5IG9iamVjdA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRmaWx0ZXIgIFRoZSB0YXJnZXQgYXJlYSB0aGF0IG1hZGUgdGhlIHJlcXVlc3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gam9pbkZvcm1EZXRhaWxzKCYkcXVlcnksICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCX0NCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3R5cGUgdGFibGUuDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdHlwZScsICd0JykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EudHlwZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgndC5pZCcpIC4gJyknKTsNCgl9DQoNCgkvKioNCgkgKiBBZGQgb3JkZXIgYmFzZWQgb24gZmlsdGVyDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkcXVlcnkgIFRoZSBkYXRhYmFzZSBxdWVyeSBvYmplY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICBUaGUgdGFyZ2V0IGFyZWEgdGhhdCBtYWRlIHRoZSByZXF1ZXN0DQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gb3JkZXJGb3JtRGV0YWlscygmJHF1ZXJ5LCAkZmlsdGVyID0gJ25vbmUnLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCS8vIGlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJLy8gew0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJLy8gCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkvLyB9DQoJCS8vIHRoZSBkZWZhdWx0IG9yZGVyIGlzIGJ5IGNyZWF0ZSBkYXRlDQoJCSRxdWVyeS0+b3JkZXIoJ2EuY3JlYXRlZCBERVNDJyk7IC8vIHRvIGluc3VyZSBsYXN0IHNob3dzIGZpcnN0DQoJfQ0KDQoJLyoqDQoJICogR2V0IHNlbGVjdGlvbiAgYmFzZWQgb24gdHlwZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgbWFpbiB0YWJsZSB0byBzZWxlY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kICAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0byByZXR1cm4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICAgIFRoZSBraW5kIG9mIGZpbHRlciAodG8gcmV0dXJuIG9ubHkgdmFsdWVzIHJlcXVpcmVkKQ0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRkYiAgICAgVGhlIGRhdGFiYXNlIG9iamVjdA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oJHRhYmxlID0gJ2Zvcm0nLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJywgJGZpbHRlciA9ICdub25lJywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gcHJlcCBmb3IgcGxhY2Vob2xkZXJzDQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHBsYWNlaG9sZGVyIHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OiRwYXJhbXMtPmdldCgncGxhY2Vob2xkZXJfcHJlZml4JywgJ1tbW2NvbXBvbmVudF1dXScpOw0KCQkJJGYgPSAnWycgLiAkcHJlZml4IC4gJ18nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gZ2V0IHN0YXR1cyBub3JtIGZpZWxkcw0KCQlpZiAobWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRTdGF0dXNOb3JtRmllbGRzJykpDQoJCXsNCgkJCSRub3JtcyA9IHNlbGY6OmdldFN0YXR1c05vcm1GaWVsZHMoKTsNCgkJfQ0KCQkvLyBnZXQgY2hhcnRzDQoJCWlmICgnY2hhcnQnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRBdmFpbGFibGVDaGFydHMnKSkNCgkJew0KCQkJJGNoYXJ0cyA9IHNlbGY6OmdldEF2YWlsYWJsZUNoYXJ0cygpOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQkkY29sdW1ucyA9IGFycmF5KCdpZCcsICdjcmVhdGVkJywgJ21vZGlmaWVkJywgJ25hbWUnKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gcmVtb3ZlIHBhcmFtcyBhbHdheXMNCgkJCSRyZW1vdmUgPSBhcnJheSgkZiAuICdwYXJhbXMnIC4gJGIpOw0KCQkJLy8gcmVtb3ZlIHRoZSBub3JtcyBpZiBmb3VuZA0KCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkbm9ybXMgYXMgJG5vcm0pDQoJCQkJew0KCQkJCQkkcmVtb3ZlW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRyZW1vdmU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBjb2x1bW5zIG9mIHRoaXMgdGFibGUNCgkJCSRjb2x1bW5zID0gJGRiLT5nZXRUYWJsZUNvbHVtbnMoIiNfX1tbW2NvbXBvbmVudF1dXV8iIC4gJHRhYmxlLCBmYWxzZSk7DQoJCQkvLyBhbHdheXMgcmVtb3ZlIHRoZXNlDQoJCQkkcmVtb3ZlID0gYXJyYXkoJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnKTsNCgkJCS8vIGlmIHBsYWNlaG9sZGVyIGFuZCBub25lIGZpbHRlciB0aGVuIHJlbW92ZSBzb21lIG1vcmUNCgkJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kICYmICgncmVwb3J0JyA9PT0gJGZpbHRlciB8fCAnZW1haWwnID09PSAkZmlsdGVyKSkNCgkJCXsNCgkJCQkkcmVtb3ZlW10gPSAnYWNjZXNzJzsNCgkJCQkkcmVtb3ZlW10gPSAnY3JlYXRlZF9ieSc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikNCgkJCXsNCgkJCQkkc2VsZWN0aW9uWydhLicgLiAkY29sdW1uXSA9ICRmIC4gJGNvbHVtbiAuICRiOw0KCQkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCQlpZiAoJ3Byb2ZpbGUnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIpDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIGxhYmVsIGZvciB0aGVzZSBmaWVsZHMNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPicgLiAkY29sdW1uXSA9ICRmIC4gJ2xhYmVsXycgLiAkY29sdW1uIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBsaW5rZWQgdmFsdWVzDQoJCQkkc2VsZWN0aW9uWyd0Lm5hbWUnXSA9ICRmIC4gJ3R5cGVfbmFtZScgLiAkYjsNCgkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCWlmICgncHJvZmlsZScgIT09ICRmaWx0ZXIpDQoJCQl7DQoJCQkJLy8gZG8gc29tZSBjb252ZXJzaW9uIGZvciBjcmVhdGVkIGRhdGUNCgkJCQlpZiAoaW5fYXJyYXkoJ2NyZWF0ZWQnLCAkY29sdW1ucykpDQoJCQkJew0KCQkJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGhEYXk6Y3JlYXRlZCddID0gJGYgLiAnZGF5JyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGg6Y3JlYXRlZCddID0gJGYgLiAnbW9udGgnIC4gJGI7DQoJCQkJCSRzZWxlY3Rpb25bJ2ZhbmN5RGF0ZTpjcmVhdGVkJ10gPSAkZiAuICdjcmVhdGVkJyAuICRiOw0KCQkJCQkvLyBzZXQgbGFiZWwgZm9yIGRheSBhbmQgbW9udGgNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPmRheSddID0gJGYgLiAnbGFiZWxfZGF5JyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydzZXRMYWJlbC0+bW9udGgnXSA9ICRmIC4gJ2xhYmVsX21vbnRoJyAuICRiOw0KCQkJCX0NCgkJCQkvLyBhZGQgdGhlIG5vcm1zIGlmIGZvdW5kDQoJCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRub3JtcyBhcyAkbm9ybSkNCgkJCQkJew0KCQkJCQkJaWYgKCdlbWFpbCcgPT09ICRmaWx0ZXIgfHwgJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2ZpZWxkJyA9PT0gJGZpbHRlciAgfHwgJ2NoYXJ0JyA9PT0gJGZpbHRlcikNCgkJCQkJCXsNCgkJCQkJCQkkc2VsZWN0aW9uWydnZXRWYWx1ZVN0YXR1czonIC4gJG5vcm0uICd8YWdlfGdlbmRlciddID0gJGYgLiAnc3RhdHVzXycgLiAkbm9ybSAuICRiOw0KCQkJCQkJfQ0KCQkJCQkJLy8gZG8gbm90IGxvYWQgZm9yIGZpZWxkDQoJCQkJCQlpZiAoJ2ZpZWxkJyAhPT0gJGZpbHRlciAmJiAnY2hhcnQnICE9PSAkZmlsdGVyKQ0KCQkJCQkJew0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfc2NhbGUnIC4gJGI7DQoJCQkJCQkJJHNlbGVjdGlvbltdID0gJGYgLiAnc3RhdHVzXycgLiAkbm9ybS4gJ193b3JkJyAuICRiOw0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfdGFibGUnIC4gJGI7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gYWRkIHRoZSBjaGFydCBkaXYgYW5kIEpTIGNvZGUgKG9ubHkgaWYgZmlsdGVyIGlzIG5vdCBjaGFydCkNCgkJCQlpZiAoJ2NoYXJ0JyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyICYmIGlzc2V0KCRjaGFydHMpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjaGFydHMpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGNoYXJ0cyBhcyAkY2hhcnQgPT4gJHZhbHVlcykNCgkJCQkJew0KCQkJCQkJLy8gbWFrZSBzdXJlIHRoZSBjaGFydCBuYW1lIGlzIHNhdmUNCgkJCQkJCSRzZWxlY3Rpb25bJ3NldENoYXJ0Q29kZS0+JyAuICRjaGFydF0gPSAkZiAuICRjaGFydCAuICRiOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRzZWxlY3Rpb247DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldFZhbHVlU3RhdHVzXQ0KW0NVU1RPTUNPREU9Z2V0U3RhdHVzTm9ybUZpZWxkc10NCltDVVNUT01DT0RFPWdldENoYXJ0Q29kZV0NCltDVVNUT01DT0RFPWdldEF2YWlsYWJsZUNoYXJ0c10NCltDVVNUT01DT0RFPWdldE11bHRpQ2hhcnREYXRhVGFibGVdDQpbQ1VTVE9NQ09ERT1nZXRIZWxwZXJDbGFzc10NCltDVVNUT01DT0RFPWdldFRlbXBsYXRlXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldEFOWVRlbXBsYXRlK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1EZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUNvbXBhbnlEZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPXBhcmFtc01vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1sYWJlbE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT10ZW1wbGF0ZU1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1jaGFydE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1yZW1vdmVBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWxvYWRSZXBvcnRUYWJdDQpbQ1VTVE9NQ09ERT1nZXRSZXBvcnRdDQpbQ1VTVE9NQ09ERT10aGVCdXRsZXJdDQpbQ1VTVE9NQ09ERT1zZXRUYWJdDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJOYW1lXQ0KW0NVU1RPTUNPREU9YmNtYXRoXQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWdldEJldHdlZW5dDQpbQ1VTVE9NQ09ERT1nZXRDb3JlTmFtZV0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Health Logs', '', '', 'Health Log (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_bankableprojects_server.xml', 'http://www.vdm.io', '', 'krtqJQxW6xiHCLIHWBWvAWWGnNVRNM9fUviM2YkG7LA=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 12, '', 1, 30),
(58, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, 1, '', '', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'george-media.txt', '', '', 'Vast Development Method', '1.0.20', 'Copyright (C) 2020. All Rights Reserved', '2019-02-12 21:13:15', '', 'rGg3D1+RxX1sMWck2P3t+KXdTBvPNzxL7jWorxm1v68=', 'OPMNRw3HOt7aql6sBmvzZMmvfA7CPVXkKX8DtaRLKbw=', '', 'K+niBg8TTYxQS2WekpOCXGv8xytOU/k8g5BeYYI5hd0=', '', '', 'A_247', 2, '', 'The MyMakita Products', 'joomla@vdm.io', '', '', 'cGUV2m2W7Lmf2fuwmxGcB5BEGfExdUArJ9cZo9zh899e52jZj1zbIoJ1fxx0Ax24ScJGtjichRWVNvuqHvFVoQ==', '', '4b059a57-6845-419c-bdec-505a537eda95', 'images/vdm/Makita500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&zigrarr;', '2020-07-08 01:07:33', 2, 'Products', 'mymakita_products', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEpVU1QgU09NRSBMQU5HIEZJWCBGT1IgTk9XDQoJICogVGV4dDo6XygnUmVnaXN0ZXIgUHJvZHVjdHMnKTsNCgkgKiBUZXh0OjpfKCdFZGl0IFJlZ2lzdGVyZWQgUHJvZHVjdHMnKTsNCgkgKiovDQoNCgkvKioNCgkgKiBHZXQgc2VsZWN0aW9uICBiYXNlZCBvbiB0eXBlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSBtYWluIHRhYmxlIHRvIHNlbGVjdA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRtZXRob2QgICAgVGhlIHR5cGUgb2YgdmFsdWVzIHRvIHJldHVybg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRmaWx0ZXIgICAgVGhlIGtpbmQgb2YgZmlsdGVyICh0byByZXR1cm4gb25seSB2YWx1ZXMgcmVxdWlyZWQpDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuIGFycmF5DQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigkdGFibGUgPSAnZm9ybScsICRtZXRob2QgPSAncGxhY2Vob2xkZXInLCAkZmlsdGVyID0gJ25vbmUnLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJfQ0KCQkvLyBwcmVwIGZvciBwbGFjZWhvbGRlcnMNCgkJJGYgPSAnJzsNCgkJJGIgPSAnJzsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT09ICRtZXRob2QpDQoJCXsNCgkJCS8vIGdldCB0aGUgcGxhY2Vob2xkZXIgcHJlZml4DQoJCQkkcHJlZml4ID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdwbGFjZWhvbGRlcl9wcmVmaXgnLCAnW1tbY29tcG9uZW50XV1dJyk7DQoJCQkkZiA9ICdbJyAuICRwcmVmaXggLiAnXyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQkvLyBvbmx5IGdldCB3aGF0IHdlIG5lZWQNCgkJaWYgKCdwcm9maWxlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gZ2V0IHRoZSBmaWVsZHMvY29sdW1ucw0KCQkJaWYgKCgkZmllbGRzID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdwcm9maWxlX2ZpZWxkcycsIGZhbHNlKSkgIT09IGZhbHNlICYmIFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRmaWVsZHMpKQ0KCQkJew0KCQkJCSRjb2x1bW5zID0gYXJyYXkoJ2lkJyk7IC8vIG5lZWRlZCBmb3IgcGVybWlzc2lvbiBjaGVjaw0KCQkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKQ0KCQkJCXsNCgkJCQkJJGNvbHVtbnNbXSA9ICRmaWVsZC0+ZmllbGQ7DQoJCQkJfQ0KCQkJCS8vIGFkZCBkYXRlcyBmb3IgZGlzcGxheQ0KCQkJCSRjb2x1bW5zW10gPSAnY3JlYXRlZCc7DQoJCQkJJGNvbHVtbnNbXSA9ICdtb2RpZmllZCc7DQoJCQl9DQoJCX0NCgkJLy8gc2V0IHRoZSB2YWx1ZXMgeW91IHdhbnQgdG8gcmVtb3ZlIGFmdGVyIG1vZGVsaW5nDQoJCWVsc2VpZiAoJ3JlbW92ZScgPT09ICRmaWx0ZXIpDQoJCXsNCgkJCS8vIHJlbW92ZSBwYXJhbXMgYWx3YXlzDQoJCQkkcmVtb3ZlID0gYXJyYXkoJGYgLiAncGFyYW1zJyAuICRiKTsNCgkJCXJldHVybiAkcmVtb3ZlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRkYikpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZGF0YWJhc2UgY29sdW1ucyBvZiB0aGlzIHRhYmxlDQoJCQkkY29sdW1ucyA9ICRkYi0+Z2V0VGFibGVDb2x1bW5zKCIjX19bW1tjb21wb25lbnRdXV1fIiAuICR0YWJsZSwgZmFsc2UpOw0KCQkJLy8gYWx3YXlzIHJlbW92ZSB0aGVzZQ0KCQkJJHJlbW92ZSA9IGFycmF5KCdhc3NldF9pZCcsICdjaGVja2VkX291dCcsICdjaGVja2VkX291dF90aW1lJyk7DQoJCQkvLyBpZiBwbGFjZWhvbGRlciBhbmQgbm9uZSBmaWx0ZXIgdGhlbiByZW1vdmUgc29tZSBtb3JlDQoJCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCAmJiAoJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2VtYWlsJyA9PT0gJGZpbHRlcikpDQoJCQl7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2FjY2Vzcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2NyZWF0ZWRfYnknOw0KCQkJCSRyZW1vdmVbXSA9ICdpZCc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikNCgkJCXsNCgkJCQkkc2VsZWN0aW9uWydhLicgLiAkY29sdW1uXSA9ICRmIC4gJGNvbHVtbiAuICRiOw0KCQkJCS8vIHdlIG11c3QgYWRkIHRoZSBsYWJlbA0KCQkJCWlmICgncHJvZmlsZScgIT09ICRmaWx0ZXIgJiYgJ2ZpZWxkJyAhPT0gJGZpbHRlcikNCgkJCQl7DQoJCQkJCS8vIHNldCB0aGUgbGFiZWwgZm9yIHRoZXNlIGZpZWxkcw0KCQkJCQkkc2VsZWN0aW9uWydzZXRMYWJlbC0+JyAuICRjb2x1bW5dID0gJGYgLiAnbGFiZWxfJyAuICRjb2x1bW4gLiAkYjsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJHNlbGVjdGlvbjsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBwcm9kdWN0cyBmcm9tIHJlZ2lzdHJ5DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvZHVjdCgkaWQsICRndWlkKQ0KCXsNCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gaW50IGFuZCBpdCBpcyBncmF0ZXIgdGhlbiAwDQoJCWlmICghaXNfbnVtZXJpYygkaWQpICYmICRpZCA8IDEpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQkvLyBnZXQgdGhlIHByb2R1Y3RzIGZyb20gdGhlIHJlZ2lzdHJ5DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvbXBvbmVudF1dXV9wcm9kdWN0X3JlZ2lzdHJhdGlvbiBhcyBwDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoJ3Auc2VyaWFsJywncC5kZWFsZXJfbmFtZScsJ3AuaW52b2ljZV9udW1iZXInLCdwLmludm9pY2VfZGF0ZScsJ3AuYnJhbmQnLCdwLmNyZWF0ZWQnLCdndWlkJyksDQoJCQlhcnJheSgnc2VyaWFsJywnZGVhbGVyX25hbWUnLCdpbnZvaWNlX251bWJlcicsJ2ludm9pY2VfZGF0ZScsJ2JyYW5kJywnY3JlYXRlZCcsJ3dhcnJhbnR5X251bWJlcicpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2R1Y3RfcmVnaXN0cmF0aW9uJywgJ3AnKSk7DQoNCgkJLy8gR2V0IGZyb20gI19fW1tbY29tcG9uZW50XV1dX3Byb2R1Y3QgYXMgcHANCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ3BwLmNvZGUnLCdwcC53YXJyYW50eScsJ3BwLmV4dGVuZGVkJywncHAubmFtZScsJ3BwLnR5cGUnKSwgYXJyYXkoJ3Byb2R1Y3RfY29kZScsJ3dhcnJhbnR5JywnZXh0ZW5kZWQnLCdwcm9kdWN0X25hbWUnLCd0eXBlJykpKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX19teW1ha2l0YV9wcm9kdWN0c19wcm9kdWN0JywgJ3BwJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdwLnByb2R1Y3QnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3BwLmNvZGUnKSAuICcpJyk7DQoNCgkJLy8gR2V0IGZyb20gI19fW1tbY29yZV1dXV9tZW1iZXIgYXMgbQ0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnbS5zdXJuYW1lJyksYXJyYXkoJ3N1cm5hbWUnKSkpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvcmVdXV1fbWVtYmVyJywgJ20nKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ20uaWQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3AubWVtYmVyJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX3VzZXJzIGFzIHUNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ3UubmFtZScsJ3UuZW1haWwnKSwgYXJyYXkoJ25hbWUnLCdlbWFpbCcpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnLCAndScpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnbS51c2VyJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCd1LmlkJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvcmVdXV1fY29udGFjdGRldGFpbHNfZm9ybSBhcyBjYw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnY2Mub2NjdXBhdGlvbl9vdGhlcicsJ2NjLnBob25lJywnY2MucG9zdGFsJywnY2MucG9zdGFsY29kZScsJ2NjLnN1YnVyYicpLCBhcnJheSgnb2NjdXBhdGlvbl9vdGhlcicsJ3Bob25lJywncG9zdGFsJywncG9zdGFsY29kZScsJ3N1YnVyYicpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29yZV1dXV9jb250YWN0ZGV0YWlsc19mb3JtJywgJ2NjJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdwLm1lbWJlcicpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnY2MubWVtYmVyJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvcmVdXV1fY29udGFjdGRldGFpbHNfb2NjdXBhdGlvbiBhcyBvbw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnb28ubmFtZScpLCBhcnJheSgnb2NjdXBhdGlvbicpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29yZV1dXV9jb250YWN0ZGV0YWlsc19vY2N1cGF0aW9uJywgJ29vJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdjYy5vY2N1cGF0aW9uJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdvby5pZCcpIC4gJyknKTsNCg0KCQkvLyBHZXQgZnJvbSAjX19bW1tjb3JlXV1dX2NvbnRhY3RkZXRhaWxzX3JlZ2lvbiBhcyByDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdyLm5hbWUnKSwgYXJyYXkoJ3JlZ2lvbicpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29yZV1dXV9jb250YWN0ZGV0YWlsc19yZWdpb24nLCAncicpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnY2MucmVnaW9uJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdyLmlkJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvcmVdXV1fY29udGFjdGRldGFpbHNfY291bnRyeSBhcyB0dA0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgndHQubmFtZScpLCBhcnJheSgnY291bnRyeScpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29yZV1dXV9jb250YWN0ZGV0YWlsc19jb3VudHJ5JywgJ3R0JykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdjYy5jb3VudHJ5JykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCd0dC5pZCcpIC4gJyknKTsNCg0KCQkvLyBvbmx5IHJldHVybiB0aGUgcHJvZHVjdCBpbiBxdWVzdGlvbg0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwLmZvcm0nKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkZ3VpZCkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwLmlkJykgLiAnID0gJyAuIChpbnQpICRpZCk7DQoNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkcHJvZHVjdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJLy8gZG8gc29tZSBob3VzZSBjbGVhbmluZw0KCQkJJHByb2R1Y3QtPmZ1bGxfbmFtZSA9ICRwcm9kdWN0LT5uYW1lIC4gJyAnIC4gJHByb2R1Y3QtPnN1cm5hbWU7DQoJCQkvLyBnZXQgd2FycmFudHkNCgkJCSR3YXJyYW50eSA9IHNlbGY6OmdldFdhcnJhbnR5RGV0YWlscygkcHJvZHVjdCwgZmFsc2UpOw0KCQkJJHByb2R1Y3QtPndhcnJhbnR5X2V4cGlyZV9kYXRlID0gJHdhcnJhbnR5WydleHBpcmUnXTsNCgkJCSRwcm9kdWN0LT53YXJyYW50eV9hY3RpdmUgPSAkd2FycmFudHlbJ2FjdGl2ZSddOw0KCQkJJHByb2R1Y3QtPndhcnJhbnR5X3N0YXR1cyA9ICgkd2FycmFudHlbJ2FjdGl2ZSddKSA/IFRleHQ6Ol8oJ1VuZGVyIFdhcnJhbnR5JykgOiBUZXh0OjpfKCdPdXQgb2YgV2FycmFudHknKTsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdBdXN0cmFsaWEvU3lkbmV5Jyk7DQoJCQkvLyBmaXggZGF0ZXMNCgkJCSRwcm9kdWN0LT5yZWdpc3RyYXRpb25fZGF0ZSA9IHNlbGY6OnNldERheU1vbnRoWWVhcigkcHJvZHVjdC0+Y3JlYXRlZCk7DQoJCQkvLyBtYWtlIHN1cmUgd2UgYXJlIGluIEF1c3RyYWxpYQ0KCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJLy8gc2V0IHRoZSBpbnZvaWNlIGRhdGUNCgkJCSRwcm9kdWN0LT5pbnZvaWNlX2RhdGUgPSBzZWxmOjpzZXREYXlNb250aFllYXIoJHByb2R1Y3QtPmludm9pY2VfZGF0ZSArIDApOw0KCQkJLy8gc2V0IG9jY3VwYXRpb24NCgkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdC0+b2NjdXBhdGlvbl9vdGhlcikgJiYgIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0LT5vY2N1cGF0aW9uKSApDQoJCQl7DQoJCQkJJHByb2R1Y3QtPm9jY3VwYXRpb24gPSAkcHJvZHVjdC0+b2NjdXBhdGlvbl9vdGhlcjsNCgkJCX0NCgkJCS8vIG1ha2Ugc3VyZSB0aGUgZnVsbF9uYW1lIG5hbWUgaXMgbm90IGxvbmdlciB0aGVuIDYwDQoJCQkkcHJvZHVjdC0+ZnVsbF9uYW1lID0gc2VsZjo6c29ydGVuKCRwcm9kdWN0LT5mdWxsX25hbWUsIDYwLCBmYWxzZSk7DQoJCQkvLyBtYWtlIHN1cmUgdGhlIGRlYWxlciBuYW1lIGlzIG5vdCBsb25nZXIgdGhlbiA2MA0KCQkJJHByb2R1Y3QtPmRlYWxlcl9uYW1lID0gc2VsZjo6c29ydGVuKCRwcm9kdWN0LT5kZWFsZXJfbmFtZSwgNjAsIGZhbHNlKTsNCgkJCS8vIG1ha2Ugc3VyZSB0aGUgcHJvZHVjdCBuYW1lIGlzIG5vdCBsb25nZXIgdGhlbiA0MA0KCQkJJHByb2R1Y3QtPnByb2R1Y3RfbmFtZSA9IHNlbGY6OnNvcnRlbigkcHJvZHVjdC0+cHJvZHVjdF9uYW1lLCA0MCwgZmFsc2UpOw0KCQkJLy8gcmVtb3ZlIHNvbWUgc3R1ZmYgbm8gbG9uZ2VyIG5lZWRlZA0KCQkJdW5zZXQoJHByb2R1Y3QtPm9jY3VwYXRpb25fb3RoZXIpOw0KCQkJdW5zZXQoJHByb2R1Y3QtPmNyZWF0ZWQpOw0KCQkJdW5zZXQoJHByb2R1Y3QtPnR5cGUpOw0KCQkJdW5zZXQoJHByb2R1Y3QtPmJyYW5kKTsNCgkJCXVuc2V0KCRwcm9kdWN0LT53YXJyYW50eSk7DQoJCQl1bnNldCgkcHJvZHVjdC0+ZXh0ZW5kZWQpOw0KCQkJLy8gbm93IHJldHVybiBwcm9kdWN0IGRldGFpbHMNCgkJCXJldHVybiAkcHJvZHVjdDsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBwcm9kdWN0cyBmcm9tIHJlZ2lzdHJ5DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvZHVjdHMoJiRmaWVsZCwgJiRkYXRhLCAkYnJhbmQNCgkpIC8vIGRhdGEgaXMgYW4gb2JqZWN0DQoJew0KCQkvLyBDb252ZXJ0IHRoZSBmaWVsZCB0byBhbiBhcnJheS4NCgkJJGZpZWxkID0gYXJyYXkoKTsNCgkJaWYgKHNlbGY6OnZhbGlkYXRlR1VJRCgkZGF0YS0+Z3VpZCkNCgkJCSYmICgoJGJyYW5kID09IDEgJiYgJGRhdGEtPmFkZF9tYWtpdGFfcHJvZHVjdHMgPT0gMSkNCgkJCQl8fCAoJGJyYW5kID09IDINCgkJCQkJJiYgJGRhdGEtPmFkZF9vdGhlcl9wcm9kdWN0cyA9PSAxKSkpDQoJCXsNCgkJCS8vIGdldCB0aGUgcHJvZHVjdHMgZnJvbSB0aGUgcmVnaXN0cnkNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnYS5wcm9kdWN0JywgJ2Euc2VyaWFsJywgJ2EubmFtZScsICdhLnByb2R1Y3RfY29kZScpKSk7DQoJCQkkcXVlcnktPmZyb20oDQoJCQkJJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9wcm9kdWN0X3JlZ2lzdHJhdGlvbicsICdhJykNCgkJCSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJCSRxdWVyeS0+d2hlcmUoDQoJCQkJJGRiLT5xdW90ZU5hbWUoJ2EuZm9ybScpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRkYXRhLT5ndWlkKQ0KCQkJKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuYnJhbmQnKSAuICcgPSAnIC4gKGludCkgJGJyYW5kKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCSRwcm9kdWN0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQlmb3JlYWNoICgkcHJvZHVjdHMgYXMgJG5yID0+ICRwcm9kdWN0KQ0KCQkJCXsNCgkJCQkJaWYgKCRicmFuZCA9PSAxKQ0KCQkJCQl7DQoJCQkJCQkkZmllbGRbJ21ha2l0YV9wcm9kdWN0cycgLiAkbnJdID0gYXJyYXkoDQoJCQkJCQkJJ3Byb2R1Y3QnID0+ICRwcm9kdWN0LT5wcm9kdWN0LA0KCQkJCQkJCSdzZXJpYWwnICA9PiAkcHJvZHVjdC0+c2VyaWFsDQoJCQkJCQkpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGZpZWxkWydvdGhlcl9wcm9kdWN0cycgLiAkbnJdID0gYXJyYXkoDQoJCQkJCQkJJ25hbWUnICAgICAgICAgPT4gJHByb2R1Y3QtPm5hbWUsDQoJCQkJCQkJJ3Byb2R1Y3RfY29kZScgPT4gJHByb2R1Y3QtPnByb2R1Y3RfY29kZSwNCgkJCQkJCQknc2VyaWFsJyAgICAgICA9PiAkcHJvZHVjdC0+c2VyaWFsDQoJCQkJCQkpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2VuZCBwcm9kdWN0IHJlZ2lzdHJhdGlvbiBlbWFpbA0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRQcm9kdWN0UmVnaXN0cmF0aW9uRW1haWwoJiRyZWNpcGllbnQpDQoJew0KCQkvLyBsb2FkIHRoZSB3ZWJzaXRlIGxpbmsNCgkJJHJlY2lwaWVudFsnbWFraXRhX3VybCddID0gVXJpOjpyb290KCk7IC8vICdodHRwczovL3d3dy5tYWtpdGEuY29tLmF1LycgZGlkIGhhcmQgY29kZSB0aGlzLCBidXQgd2FzIGFza2VkIHRvIHVzZSB0aGUgd2Vic2l0ZSByb290IChkeW5hbWljIGdpdmVuIGJ5IEpvb21sYSkgaW5zdGVhZC4NCgkJLy8gZ2V0IHRoZSBtZXNzYWdlIHRlbXBsYXRlDQoJCSRtZXNzYWdlID0gc2VsZjo6Z2V0RW1haWxUZW1wbGF0ZSgpOw0KCQkvLyBjb252ZXJ0ICRyZWNpcGllbnQgdG8gcGxhY2Vob2xkZXJzDQoJCSRwbGFjZWhvbGRlcnMgPSBhcnJheSgpOw0KCQlmb3JlYWNoICgkcmVjaXBpZW50IGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQkkcGxhY2Vob2xkZXJzWydbJyAuICRrZXkgLiAnXSddID0gJHZhbHVlOw0KCQl9DQoJCXJldHVybiBzZWxmOjpzZW5kTWVzc2FnZSgkcmVjaXBpZW50LCAkbWVzc2FnZSwgJHBsYWNlaG9sZGVycyk7DQoJfQ0KDQoJLyoqDQoJICogU2VuZCBhIE1lc3NhZ2UNCgkgKg0KCSAqIEByZXR1cm4gYm9vbGVhbg0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZW5kTWVzc2FnZSgmJHJlY2lwaWVudCwgJiRtZXNzYWdlLCAmJHBsYWNlaG9sZGVycykNCgl7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHJlY2lwaWVudCBkZXRhaWxzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVjaXBpZW50KSAmJiBpc3NldCgkcmVjaXBpZW50WydlbWFpbCddKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgcGxhY2Vob2xkZXJzDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJLy8gYm90aCBodG1sIGFuZCB0ZXh0DQoJCQkJJGh0bWwgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZVsnaHRtbCddLCAkcGxhY2Vob2xkZXJzKTsNCgkJCQkkdGV4dCA9IHNlbGY6OnNldER5bmFtaWNEYXRhKCRtZXNzYWdlWyd0ZXh0J10sICRwbGFjZWhvbGRlcnMpOw0KCQkJCS8vIHNldCBtb2RlIHRvIEhUTUwNCgkJCQkkbW9kZSA9IDE7DQoJCQkJLy8gc2V0IHRoZSBzdWJqZWN0DQoJCQkJJHN1YmplY3QgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZVsnc3ViamVjdCddLCAkcGxhY2Vob2xkZXJzKTsNCgkJCQkvLyBub3cgc2VuZCB0aGUgZW1haWwNCgkJCQlpZiAoW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJHJlY2lwaWVudFsnZW1haWwnXSwgJHN1YmplY3QsICRodG1sLCAkdGV4dCwgJG1vZGUpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBTZXQgdGhlIHByb2R1Y3RzIHRvIHRoZSByZWdpc3RyeQ0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFByb2R1Y3RzKCYkZmllbGQsICYkZGF0YSwgJGJyYW5kDQoJKSAvLyBkYXRhIGlzIGFuIGFycmF5DQoJew0KCQkvLyBzYXZlIHRoZSBwcm9kdWN0cyB0byB0aGUgcmVnaXN0cnkNCgkJaWYgKHNlbGY6OnZhbGlkYXRlR1VJRCgkZGF0YVsnZ3VpZCddKSkNCgkJew0KCQkJJHByb2R1Y3RzID0gYXJyYXkoKTsNCgkJCS8vIGdldCB0aGUgcHJvZHVjdHMgZnJvbSB0aGUgcmVnaXN0cnkNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnYS5pZCcsICdhLnZlcnNpb24nLCAnYS5wcm9kdWN0JywgJ2Euc2VyaWFsJywgJ2EubmFtZScsICdhLnByb2R1Y3RfY29kZScsICdhLmd1aWQnLCAnYS5jcmVhdGVkJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgNCgkJCQkkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2R1Y3RfcmVnaXN0cmF0aW9uJywgJ2EnKQ0KCQkJKTsNCgkJCSRxdWVyeS0+d2hlcmUoDQoJCQkJJGRiLT5xdW90ZU5hbWUoJ2EuZm9ybScpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRkYXRhWydndWlkJ10pDQoJCQkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5icmFuZCcpIC4gJyA9ICcgLiAoaW50KSAkYnJhbmQpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJHByb2R1Y3RzID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgd2UgbXVzdCBpbnNlcnQgb3IgdXBkYXRlIHByb2R1Y3RzDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpZWxkKQ0KCQkJCSYmICgoJGJyYW5kID09IDEgJiYgJGRhdGFbJ2FkZF9tYWtpdGFfcHJvZHVjdHMnXSA9PSAxKQ0KCQkJCQl8fCAoJGJyYW5kID09IDIgJiYgJGRhdGFbJ2FkZF9vdGhlcl9wcm9kdWN0cyddID09IDEpKSkNCgkJCXsNCg0KCQkJCS8vIGdldCB0aGUgdXNlciBvYmplY3QNCgkJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkJCSR0b2RheURhdGUgPSBGYWN0b3J5OjpnZXREYXRlKCktPnRvU3FsKCk7DQoJCQkJLy8gc3RvcmUgdGhlIGRhdGENCgkJCQlmb3JlYWNoICgkZmllbGQgYXMgJGsgPT4gJHByb2R1Y3QpDQoJCQkJew0KCQkJCQkvLyBidWlsZCBzdG9yaW5nIG9iamVjdA0KCQkJCQkkc3RvcmUgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCSRzdG9yZS0+Zm9ybSA9ICRkYXRhWydndWlkJ107DQoJCQkJCSRzdG9yZS0+c2VyaWFsID0gJHByb2R1Y3RbJ3NlcmlhbCddOw0KCQkJCQkkc3RvcmUtPmJyYW5kID0gKGludCkgJGJyYW5kOw0KCQkJCQkkc3RvcmUtPm1lbWJlciA9IChpbnQpICRkYXRhWydtZW1iZXInXTsNCgkJCQkJJHN0b3JlLT5kZWFsZXJfbmFtZSA9ICRkYXRhWydkZWFsZXJfbmFtZSddOw0KCQkJCQkkc3RvcmUtPmludm9pY2VfbnVtYmVyID0gJGRhdGFbJ2ludm9pY2VfbnVtYmVyJ107DQoJCQkJCSRzdG9yZS0+aW52b2ljZV9kYXRlID0gJGRhdGFbJ2ludm9pY2VfZGF0ZSddOw0KCQkJCQkkc3RvcmUtPnB1Ymxpc2hlZCA9IDE7DQoJCQkJCS8vIHNldCBwcm9kdWN0IGRldGFpbHMNCgkJCQkJaWYgKCRicmFuZCA9PSAxICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0Wydwcm9kdWN0J10pKQ0KCQkJCQl7DQoJCQkJCQkkc3RvcmUtPnByb2R1Y3QgPSAkcHJvZHVjdFsncHJvZHVjdCddOw0KCQkJCQkJLy8gc3R1cGlkIGZpeCBmb3IgY29tYm8gKFRoaXNpc2FDb21ib0tpdCkgVE9ETw0KCQkJCQkJaWYgKCdUaGlzaXNhQ29tYm9LaXQnID09PSAkc3RvcmUtPnNlcmlhbCkNCgkJCQkJCXsNCgkJCQkJCQkkc3RvcmUtPnNlcmlhbCA9ICRzdG9yZS0+cHJvZHVjdCAuICctJyAuIHNlbGY6OnJhbmRvbWtleSg3KTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlaWYgKCRicmFuZCA9PSAyICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0WyduYW1lJ10pDQoJCQkJCQkmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdFsncHJvZHVjdF9jb2RlJ10pKQ0KCQkJCQl7DQoJCQkJCQkkc3RvcmUtPm5hbWUgPSAkcHJvZHVjdFsnbmFtZSddOw0KCQkJCQkJJHN0b3JlLT5wcm9kdWN0X2NvZGUgPSAkcHJvZHVjdFsncHJvZHVjdF9jb2RlJ107DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyByZW1vdmUgZnJvbSBmaWVsZCBzZXQNCgkJCQkJCXVuc2V0KCRmaWVsZFska10pOw0KCQkJCQkJY29udGludWU7DQoJCQkJCX0NCgkJCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBwcm9kdWN0cyBpbiB0aGUgcmVnaXN0cnkNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0cykpDQoJCQkJCXsNCgkJCQkJCSRzZWFyY2hpbmcgPSB0cnVlOw0KCQkJCQkJZm9yZWFjaCAoJHByb2R1Y3RzIGFzICRuciA9PiAkX3Byb2R1Y3QpDQoJCQkJCQl7DQoJCQkJCQkJLy8gY2hlY2sgaWYgcHJvZHVjdCBpcyBmb3VuZA0KCQkJCQkJCWlmICgkc2VhcmNoaW5nICYmIHN0cmNhc2VjbXAoJHN0b3JlLT5zZXJpYWwsICRfcHJvZHVjdC0+c2VyaWFsKSA9PSAwICYmIA0KCQkJCQkJCQkoDQoJCQkJCQkJCSAgKCRicmFuZCA9PSAxICYmIHN0cmNhc2VjbXAoJHN0b3JlLT5wcm9kdWN0LCAkX3Byb2R1Y3QtPnByb2R1Y3QpID09IDApIHx8DQoJCQkJCQkJCSAgKCRicmFuZCA9PSAyICYmIHN0cmNhc2VjbXAoJHN0b3JlLT5wcm9kdWN0X2NvZGUsICRfcHJvZHVjdC0+cHJvZHVjdF9jb2RlKSA9PSAwKQ0KCQkJCQkJCQkpDQoJCQkJCQkJKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gbWFwIHRvIGV4aXN0aW5nIHByb2R1Y3QgKElEKQ0KCQkJCQkJCQkkc3RvcmUtPmlkID0gJF9wcm9kdWN0LT5pZDsNCgkJCQkJCQkJLy8gc2V0IHRoZSBHVUlEDQoJCQkJCQkJCWlmIChzZWxmOjp2YWxpZGF0ZUdVSUQoJF9wcm9kdWN0LT5ndWlkKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHN0b3JlLT5ndWlkID0gJF9wcm9kdWN0LT5ndWlkOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzdG9yZS0+dmVyc2lvbiA9ICRfcHJvZHVjdC0+dmVyc2lvbiArIDE7DQoJCQkJCQkJCSRzdG9yZS0+bW9kaWZpZWRfYnkgPSAkdXNlci0+aWQ7DQoJCQkJCQkJCSRzdG9yZS0+bW9kaWZpZWQgPSAkdG9kYXlEYXRlOw0KCQkJCQkJCQkkc3RvcmUtPmNyZWF0ZWQgPSAkX3Byb2R1Y3QtPmNyZWF0ZWQ7DQoJCQkJCQkJCS8vIHJlbW92ZSBmcm9tIGFycmF5DQoJCQkJCQkJCXVuc2V0KCRwcm9kdWN0c1skbnJdKTsNCgkJCQkJCQkJLy8gYnJlYWsgb3V0IG9mIHRoaXMgbG9vcA0KCQkJCQkJCQkkc2VhcmNoaW5nID0gZmFsc2U7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIHVwZGF0ZQ0KCQkJCQlpZiAoaXNzZXQoJHN0b3JlLT5pZCkpDQoJCQkJCXsNCgkJCQkJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSBHVUlEDQoJCQkJCQl3aGlsZSAoIXNlbGY6OnZhbGlkR1VJRCgkc3RvcmUtPmd1aWQsICdwcm9kdWN0X3JlZ2lzdHJhdGlvbicsICRzdG9yZS0+aWQpKQ0KCQkJCQkJew0KCQkJCQkJCSRzdG9yZS0+Z3VpZCA9IHNlbGY6OkdVSUQoKTsNCgkJCQkJCX0NCgkJCQkJCSRkYi0+dXBkYXRlT2JqZWN0KA0KCQkJCQkJCScjX19bW1tjb21wb25lbnRdXV1fcHJvZHVjdF9yZWdpc3RyYXRpb24nLCAkc3RvcmUsDQoJCQkJCQkJJ2lkJw0KCQkJCQkJKTsNCgkJCQkJfQ0KCQkJCQkvLyBpbnNlcnQNCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkc3RvcmUtPnZlcnNpb24gPSAxOw0KCQkJCQkJJHN0b3JlLT5ndWlkID0gc2VsZjo6R1VJRCgpOw0KCQkJCQkJLy8gdmFsaWRhdGUgdW50aWwgR1VJRA0KCQkJCQkJd2hpbGUgKCFzZWxmOjp2YWxpZEdVSUQoJHN0b3JlLT5ndWlkLCAncHJvZHVjdF9yZWdpc3RyYXRpb24nKSkNCgkJCQkJCXsNCgkJCQkJCQkkc3RvcmUtPmd1aWQgPSBzZWxmOjpHVUlEKCk7DQoJCQkJCQl9DQoJCQkJCQkkc3RvcmUtPmNyZWF0ZWRfYnkgPSAkdXNlci0+aWQ7DQoJCQkJCQkkc3RvcmUtPmNyZWF0ZWQgPSAkdG9kYXlEYXRlOw0KCQkJCQkJJGRiLT5pbnNlcnRPYmplY3QoDQoJCQkJCQkJJyNfX1tbW2NvbXBvbmVudF1dXV9wcm9kdWN0X3JlZ2lzdHJhdGlvbicsICRzdG9yZQ0KCQkJCQkJKTsNCgkJCQkJfQ0KCQkJCQkvLyBiYW5kPTEgbWVhbnMgTWFraXRhDQoJCQkJCWlmICgkc3RvcmUtPmJyYW5kID09IDEpDQoJCQkJCXsNCgkJCQkJCS8vIGRvIHRoZSBjb21wZXRpdGlvbiBjaGVjayB0byBzZWUgaWYgdGhpcyBwcm9kdWN0IHF1YWxpZnkNCgkJCQkJCXNlbGY6OnNldFF1YWxpZnlpbmcoJHN0b3JlKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBDb252ZXJ0IHRoZSBmaWVsZCB0byBhbiBzdHJpbmcgKGpzb24pLg0KCQkJCSRqc29uID0gbmV3IEpSZWdpc3RyeTsNCgkJCQkkanNvbi0+bG9hZEFycmF5KCRmaWVsZCk7DQoJCQkJJGZpZWxkID0gKHN0cmluZykgJGpzb247DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gZW1wdHkgdGhlIHByb2R1Y3RzDQoJCQkJJGZpZWxkID0gJyc7DQoJCQl9DQoJCQkvLyBpZiB3ZSBoYXZlIHByb2R1Y3RzIGxlZnQgZGVsZXRlIHRoZW0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdHMpKQ0KCQkJew0KCQkJCS8vIGdldCB0aG9zZSB3ZSBhcmUgZ29pbmcgdG8gZGVsZXRlDQoJCQkJJGRlbGV0ZSA9IGFycmF5X21hcChmdW5jdGlvbigkcHJvZHVjdCl7DQoJCQkJCXJldHVybiAkcHJvZHVjdC0+aWQ7DQoJCQkJfSwgJHByb2R1Y3RzKTsNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCS8vIGRlbGV0ZSBhbGwgYWxsIHRoZXNlDQoJCQkJJGNvbmRpdGlvbnMgPSBhcnJheSgNCgkJCQkJJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnIElOICgnIC4gaW1wbG9kZSgnLCcsICRkZWxldGUpIC4gJyknDQoJCQkJKTsNCgkJCQkkcXVlcnktPmRlbGV0ZSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2R1Y3RfcmVnaXN0cmF0aW9uJykpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGNvbmRpdGlvbnMpOw0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGVtcHR5IHRoZSBwcm9kdWN0cw0KCQkJJGZpZWxkID0gJyc7DQoJCX0NCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFF1YWxpZnlpbmcoJiRwcm9kdWN0KQ0KCXsNCgkJaWYgKCgkaGVscGVyQ2xhc3MgPSBzZWxmOjpnZXRIZWxwZXJDbGFzcygnY29tX1tbW2NvbXBldGl0aW9uXV1dJykpICE9PSBmYWxzZSAmJiBtZXRob2RfZXhpc3RzKCRoZWxwZXJDbGFzcywgJ3NldFF1YWxpZnlpbmcnKSkNCgkJew0KCQkJcmV0dXJuICRoZWxwZXJDbGFzczo6c2V0UXVhbGlmeWluZygkcHJvZHVjdCk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBUaGUgcHJvZHVjdHMgd2FycmFudHkgZGV0YWlscw0KCSAqDQoJICogQHZhciBhcnJheQ0KCSAqDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyAkd2FycmFudHlEZXRhaWxzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSAqIEdldCB0aGUgcHJvZHVjdHMgd2FycmFudHkgZGV0YWlscw0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRXYXJyYW50eURldGFpbHMoJiRwcm9kdWN0LCAkYWRkX2xpbmsgPSB0cnVlKQ0KCXsNCgkJLy8gYmFuZD0xIG1lYW5zIE1ha2l0YSwgYW5kIHR5cGU9MSBtZWFucyB0aGlzIGlzIGEgcHJvZHVjdCBub3QgYSBjb21iby9raXQNCgkJaWYgKCRwcm9kdWN0LT5icmFuZCA9PSAxICYmICRwcm9kdWN0LT50eXBlID09IDEpDQoJCXsNCgkJCS8vIHRvIHNwZWVkdXAsIGFuZCBhdm9pZCBkb3VibGUgY2FsY3VsYXRpb25zDQoJCQkkY2FjaGVLZXkgPSAoJGFkZF9saW5rKSA/ICRwcm9kdWN0LT5ndWlkIC4gJ19MJyA6ICRwcm9kdWN0LT5ndWlkOw0KCQkJaWYgKCFpc3NldChzZWxmOjokd2FycmFudHlEZXRhaWxzWyRjYWNoZUtleV0pKQ0KCQkJew0KCQkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCS8vIHNldCB0aGUgd2FycmFudHkgdG8gbm90IGJlaW5nIGFjdGl2ZSAodW50aWwgcHJvdmVuIG90aGVyd2lzZSkNCgkJCQkkYWN0aXZlID0gMDsNCgkJCQkvLyBsaW5rIHRvIGdldCB0aGUgd2FycmFudHkgY2VydA0KCQkJCSRsaW5rID0gbnVsbDsNCgkJCQkvLyBzd2l0Y2ggdG8gYWRkIGV4dGVuZGVkIHdhcnJhbnR5IG9uY2UNCgkJCQkkc2hvdWxkX3N0aWxsX2FkZF9leHRlbmRlZCA9IHRydWU7DQoJCQkJJHllYXJzX2V4dGVuZGVkID0gNTsNCgkJCQkvLyBoYXMgY2VydGlmaWNhdGUNCgkJCQkkaGFzX2NlcnQgPSBmYWxzZTsNCgkJCQkvLyBtYWtlIHN1cmUgd2UgYXJlIGluIEF1c3RyYWxpYQ0KCQkJCWRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0F1c3RyYWxpYS9TeWRuZXknKTsNCgkJCQkvLyBnZXQgdGhlIHRpbWUgc3RhbXAgZm9yIG5vdw0KCQkJCSR0b2RheV9kYXRlID0gdGltZSgpOw0KCQkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCS8vIHRoZSByZWdpc3RyYXRpb24gZGF0ZSBpcyB0aGUgY3JlYXRlZCBkYXRlDQoJCQkJJGNyZWF0ZWRfZGF0ZSA9IHN0cnRvdGltZSgkcHJvZHVjdC0+Y3JlYXRlZCk7DQoJCQkJLy8gc2V0IHRoZSBpbnZvaWNlIGRhdGUNCgkJCQkkaW52b2ljZV9kYXRlID0gKGludCkgJHByb2R1Y3QtPmludm9pY2VfZGF0ZTsNCgkJCQkvLyBleHBpcmUgZGF0ZSBkZWZhdWx0IHRvIGludm9pY2UgZGF0ZQ0KCQkJCSRleHBpcmVfZGF0ZSA9ICRpbnZvaWNlX2RhdGU7DQoJCQkJLy8gYWRkIG5vcm1hbCB3YXJyYW50eSBpZiBleGlzdA0KCQkJCWlmICgkcHJvZHVjdC0+d2FycmFudHkgPiAwKQ0KCQkJCXsNCgkJCQkJLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiBBdXN0cmFsaWENCgkJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCQkvLyB1cGRhdGUgZXhwaXJlIGRhdGUgd2l0aCBhY3R1YWwgd2FycmFudHkNCgkJCQkJJGV4cGlyZV9kYXRlID0gc3RydG90aW1lKCcrJyAuICRwcm9kdWN0LT53YXJyYW50eSAuJ3llYXJzJywgJGludm9pY2VfZGF0ZSk7DQoJCQkJCS8vIGRlZHVjdCB0aGUgbm9ybWFsIHdhcnJhbnR5IGZyb20gZXh0ZW5kZWQgd2FycmFudHkNCgkJCQkJJHllYXJzX2V4dGVuZGVkID0gJHllYXJzX2V4dGVuZGVkIC0gJHByb2R1Y3QtPndhcnJhbnR5Ow0KDQoJCQkJCS8vIHdlIGNvdW50IHllYXJzIGFkZGVkDQoJCQkJCSR5ZWFyc19hZGRlZCA9ICRwcm9kdWN0LT53YXJyYW50eTsNCgkJCQl9DQoJCQkJLy8gYWRkIGV4dGVuZGVkIGRhdGUgaWYgcHJvZHVjdCBxdWFsaWZ5DQoJCQkJaWYgKCRzaG91bGRfc3RpbGxfYWRkX2V4dGVuZGVkICYmICRwcm9kdWN0LT5leHRlbmRlZCA9PSAxKQ0KCQkJCXsNCgkJCQkJLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiBBdXN0cmFsaWENCgkJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCQkvLyBzdGVwIGZvcndhcmQgMzAgZGF5cyBmcm9tIHB1cmNoYXNlIGRhdGUgKGludm9pY2UgZGF0ZSkNCgkJCQkJJGZvcndhcmRfdGhpcnR5X2RhdGUgPSBzdHJ0b3RpbWUoJyszMGRheXMnLCAkaW52b2ljZV9kYXRlKTsNCgkJCQkJLy8gbm93IGNoZWNrIGlmIHRoZSByZWdpc3RyYXRpb24gZmFsbHMgaW4gdGhlIA0KCQkJCQkvLyBxdWFsaWZ5aW5nIDMwIGRheXMgYWZ0ZXIgcHVyY2hhc2luZyB0aGUgcHJvZHVjdA0KCQkJCQkvLyBzbyBpZiB0aGUgZm9yd2FyZF90aGlydHlfZGF0ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIGNyZWF0ZWRfZGF0ZQ0KCQkJCQkvLyB0aGUgdGhlIHByb2R1Y3QgcXVhbGlmaWVzDQoJCQkJCWlmICgkZm9yd2FyZF90aGlydHlfZGF0ZSA+PSAkY3JlYXRlZF9kYXRlKQ0KCQkJCQl7DQoJCQkJCQkvLyBtYWtlIHN1cmUgd2UgYXJlIGluIEF1c3RyYWxpYQ0KCQkJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCQkJLy8gYWRkIHRoZSBleHRlbmRlZCB3YXJyYW50eSB5ZWFycw0KCQkJCQkJJGV4cGlyZV9kYXRlID0gc3RydG90aW1lKCcrJyAuICR5ZWFyc19leHRlbmRlZCAuICd5ZWFycycsICRleHBpcmVfZGF0ZSk7DQoJCQkJCQkvLyBtYWtlIHN1cmUgd2UgYWRkIGl0IG9ubHkgb25jZQ0KCQkJCQkJJHNob3VsZF9zdGlsbF9hZGRfZXh0ZW5kZWQgPSBmYWxzZTsNCgkJCQkJCS8vIGhhcyBjZXJ0aWZpY2F0ZQ0KCQkJCQkJJGhhc19jZXJ0ID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBtYWtlIHN1cmUgd2UgYXJlIHN0aWxsIGluIDIwMjAgYW5kIGJlZm9yZSBlbmQgb2YgQXVndXN0DQoJCQkJCSR0aGlzX3llYXIgPSBzZWxmOjpzZXRZZWFyKCR0b2RheV9kYXRlKTsNCgkJCQkJJHRoaXNfbW9udGggPSBzZWxmOjpzZXRNb250aCgkdG9kYXlfZGF0ZSk7DQoJCQkJCS8vIHNlZSBpZiB0aGlzIGZhbGxzIGluIENPVklELTE5IHNwZWNpYWwNCgkJCQkJaWYgKCRzaG91bGRfc3RpbGxfYWRkX2V4dGVuZGVkICYmICcyMDIwJyA9PSAkdGhpc195ZWFyICYmICR0aGlzX21vbnRoIDw9IDgpDQoJCQkJCXsNCgkJCQkJCS8vIGNoZWNrIGlmIGludm9pY2UgeWVhciBpcyAyMDIwDQoJCQkJCQkkeWVhciA9IHNlbGY6OnNldFllYXIoJGludm9pY2VfZGF0ZSk7DQoJCQkJCQkvLyBjaGVjayBpZiBtb250aCBpcyBiZXR3ZWVuIEphbnVhcnkgYW5kIEp1bHkNCgkJCQkJCSRtb250aCA9IHNlbGY6OnNldE1vbnRoKCRpbnZvaWNlX2RhdGUpOw0KCQkJCQkJLy8gaWYgdGhlIGNyaXRlcmlhIGlzIG1ldCwgd2UgYWRkIGV4dGVuZGVkIHdhcnJhbnR5DQoJCQkJCQlpZiAoJzIwMjAnID09ICR5ZWFyICYmICRtb250aCA8PSA3KQ0KCQkJCQkJew0KCQkJCQkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQkJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCQkJCS8vIGFkZCB0aGUgZXh0ZW5kZWQgd2FycmFudHkgeWVhcnMNCgkJCQkJCQkkZXhwaXJlX2RhdGUgPSBzdHJ0b3RpbWUoJysnIC4gJHllYXJzX2V4dGVuZGVkIC4gJ3llYXJzJywgJGV4cGlyZV9kYXRlKTsNCgkJCQkJCQkvLyBtYWtlIHN1cmUgd2UgYWRkIGl0IG9ubHkgb25jZSBUT0RPIG1vcmUgb3B0aW9ucyBjb3VsZCBiZSBhZGRlZA0KCQkJCQkJCSRzaG91bGRfc3RpbGxfYWRkX2V4dGVuZGVkID0gZmFsc2U7DQoJCQkJCQkJLy8gaGFzIGNlcnRpZmljYXRlDQoJCQkJCQkJJGhhc19jZXJ0ID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBub3cgY2hlY2sgaWYgd2FycmFudHkgaXMgYWN0aXZlDQoJCQkJaWYgKCRleHBpcmVfZGF0ZSA+PSAkdG9kYXlfZGF0ZSkNCgkJCQl7DQoJCQkJCS8vIGFjdGl2YXRlIHdhcnJhbnR5DQoJCQkJCSRhY3RpdmUgPSAxOw0KCQkJCQkvLyBvbmx5IGFkZCB0aGUgbGluayBpZiBhc2tlZCB0byAoZGVmYXVsdCBpcyB0cnVlKQ0KCQkJCQlpZiAoJGFkZF9saW5rICYmICRoYXNfY2VydCkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IHRoZSBkb3dubG9hZCBsaW5rDQoJCQkJCQkkbGluayA9IEpvb21sYV9fX2Q0Yzc2MDk5XzRjMzJfNDA4YV84NzAxX2QwYTcyNDQ4NGRmZF9fX1Bvd2VyOjpfKCJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1kb3dubG9hZC53YXJyYW50eSZrZXk9IiAuIHVybGVuY29kZShzZWxmOjplbmNyeXB0KCRwcm9kdWN0LT5pZCkpIC4gIiZndWlkPSIgLiAkcHJvZHVjdC0+Zm9ybSAuICImIiAuIEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKSAuICI9MSIpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCS8vIG5vIHJldHVybiB3YXJyYW50eSBkZXRhaWxzDQoJCQkJc2VsZjo6JHdhcnJhbnR5RGV0YWlsc1skY2FjaGVLZXldID0gYXJyYXkoJ2FjdGl2ZScgPT4gJGFjdGl2ZSwgJ2V4cGlyZScgPT4gc2VsZjo6c2V0RGF5TW9udGhZZWFyKCRleHBpcmVfZGF0ZSksICdsaW5rJyA9PiAkbGluaywgJ3F1YWxpZnknID0+ICRoYXNfY2VydCk7DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGUgdmFsdWUgd2FzIGluZGVlZCBzZXQNCgkJCWlmIChpc3NldChzZWxmOjokd2FycmFudHlEZXRhaWxzWyRjYWNoZUtleV0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokd2FycmFudHlEZXRhaWxzWyRjYWNoZUtleV07DQoJCQl9DQoJCX0NCgkJLy8gZm9yIG90aGVyIGJyYW5kcyBhbmQgY29tYm8va2l0J3MNCgkJcmV0dXJuIGFycmF5KCdhY3RpdmUnID0+IDAsICdleHBpcmUnID0+IDAsICdsaW5rJyA9PiBudWxsLCAncXVhbGlmeScgPT4gZmFsc2UpOw0KCX0NCg0KCS8qKg0KCSAqIE1haW4gaW1hZ2UgbGluaw0KCSAqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRpbWFnZUxpbms7DQoNCgkvKioNCgkgKiBEdW1teSBJbWFnZSBsaW5rDQoJICoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGR1bW15SW1hZ2VMaW5rOw0KDQoJLyoqDQoJICogR2V0IHRoZSBwcm9kdWN0cyBpbWFnZSBsaW5rDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbWFnZUxpbmsoJiRwcm9kdWN0KQ0KCXsNCgkJaWYgKCRwcm9kdWN0LT5icmFuZCA9PSAxICYmICgkcGF0aCA9IHNlbGY6OmdldFZhcignaW1hZ2VzJywgc3RydG9sb3dlcigkcHJvZHVjdC0+Y29kZSksICdjb2RlJywgJ3BhdGgnKSkgIT09IGZhbHNlKQ0KCQl7DQoJCQlyZXR1cm4gVXJpOjpyb290KCkgLiAnaW1hZ2VzL3Byb2R1Y3RzLycgLiAkcGF0aDsNCgkJfQ0KCQkvLyByZXR1cm4gdGhlIGR1bW15IGltYWdlIFRPRE8gd2UgY2FuIGFkZCB0eXBlcyBpZiB3ZSBsaWtlDQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGR1bW15SW1hZ2VMaW5rKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCQl7DQoJCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZHVtbXkgaW1hZ2UgcGF0aC4NCgkJCXNlbGY6OiRkdW1teUltYWdlTGluayA9IFVyaTo6cm9vdCgpIC4gc2VsZjo6JHBhcmFtcy0+Z2V0KCdpbWFnZV9kdW1teV9wYXRoJywgJ2ltYWdlcy9sb2dvLnBuZycpOw0KCQkJLy8gY2hlY2sgaWYgaW1hZ2UgZXhpc3QNCgkJCWlmICghc2VsZjo6dXJsRXhpc3RzKHNlbGY6OiRkdW1teUltYWdlTGluaykpDQoJCQl7DQoJCQkJc2VsZjo6JGR1bW15SW1hZ2VMaW5rID0gJyMnOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokZHVtbXlJbWFnZUxpbms7DQoJfQ0KDQoJLyoqDQoJKiBHZXQgdGhlIHByb2R1Y3QgcmVnaXN0cmF0aW9uIGVtYWlsIHRlbXBsYXRlDQoJKg0KCSogQHJldHVybiAgYXJyYXkgICAgT24gc3VjY2VzcyB0aGUgZW1haWwgdGVtcGxhdGUNCgkqDQoJKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEVtYWlsVGVtcGxhdGUoKQ0KCXsNCgkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKTsNCgkJfQ0KCQlyZXR1cm4gYXJyYXkoDQoJCQknc3ViamVjdCcgPT4gc2VsZjo6JHBhcmFtcy0+Z2V0KCdzdWJqZWN0JywgVGV4dDo6XygnW25hbWVdLCB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB5b3VyIHRvb2xzIHdpdGggTXlNYWtpdGEnKSksDQoJCQknaHRtbCcgPT4gc2VsZjo6JHBhcmFtcy0+Z2V0KCdodG1sYm9keScsICdbbmFtZV08YnIgLz5bbWFraXRhX3VybF0nKSwNCgkJCSd0ZXh0JyA9PiBzZWxmOjokcGFyYW1zLT5nZXQoJ3RleHRib2R5JywgJ1tuYW1lXVxuW21ha2l0YV91cmxdJykNCgkJCSk7DQoJfQ0KDQoJLyoqDQoJKiBHZXQgdGhlIHdhcnJhbnR5IHRlbXBsYXRlDQoJKg0KCSogQHJldHVybiAgc3RyaW5nICAgIE9uIHN1Y2Nlc3MgdGhlIHdhcnJhbnR5IHRlbXBsYXRlDQoJKg0KCSovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRXYXJyYW50eVRlbXBsYXRlKCkNCgl7DQoJCXJldHVybiBMT0NLQkFTRTY0KCgoKDx0YWJsZSB3aWR0aD0iODAwIj4NCjx0Ym9keT48dHIgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxNTJweDsiPjx0ZCB3aWR0aD0iMTUwIj48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPltmdWxsX25hbWVdPC9iPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPltwaG9uZV08L2I+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iZm9udC1zaXplOjE1cHg7IGxpbmUtaGVpZ2h0OiAzM3B4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W2VtYWlsXTwvYj4NCjwvdGQ+DQo8L3RyPg0KPC90Ym9keT48L3RhYmxlPg0KDQo8dGFibGUgd2lkdGg9IjgwMCI+DQo8dGJvZHk+PHRyIHN0eWxlPSJsaW5lLWhlaWdodDogMTNweDsiPjx0ZCB3aWR0aD0iMTUwIj48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzJweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPltkZWFsZXJfbmFtZV08L2I+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iZm9udC1zaXplOjE1cHg7IGxpbmUtaGVpZ2h0OiAzMnB4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W2ludm9pY2VfbnVtYmVyXTwvYj4NCjwvdGQ+DQo8L3RyPg0KPHRyIHN0eWxlPSJmb250LXNpemU6MTVweDsgbGluZS1oZWlnaHQ6IDMycHg7IHZlcnRpY2FsLWFsaWduOmJvdHRvbTsiPg0KPHRkPjwvdGQ+DQo8dGQ+DQo8Yj5baW52b2ljZV9kYXRlXTwvYj4NCjwvdGQ+DQo8L3RyPg0KPC90Ym9keT48L3RhYmxlPg0KDQo8dGFibGUgd2lkdGg9IjcyMCI+DQo8dGJvZHk+PHRyIHN0eWxlPSJsaW5lLWhlaWdodDogMjhweDsiPjx0ZCB3aWR0aD0iMzUwIj48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDozM3B4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W3Byb2R1Y3RfY29kZV08L2I+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iZm9udC1zaXplOjE1cHg7IGxpbmUtaGVpZ2h0OiAzM3B4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W3NlcmlhbF08L2I+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iZm9udC1zaXplOjE1cHg7IGxpbmUtaGVpZ2h0OiAzM3B4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W3Byb2R1Y3RfbmFtZV08L2I+DQo8L3RkPg0KPC90cj4NCjwvdGJvZHk+PC90YWJsZT4NCg0KPHRhYmxlIHdpZHRoPSI3MjAiPg0KPHRib2R5Pjx0ciBzdHlsZT0ibGluZS1oZWlnaHQ6IDIwcHg7Ij48dGQgd2lkdGg9IjM1MCI+PC90ZD48dGQ+PC90ZD48L3RyPg0KPHRyIHN0eWxlPSJmb250LXNpemU6MTVweDsgbGluZS1oZWlnaHQ6MzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPlt3YXJyYW50eV9udW1iZXJdPC9iPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPltpbnZvaWNlX2RhdGVdPC9iPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPlt3YXJyYW50eV9leHBpcmVfZGF0ZV08L2I+DQo8L3RkPg0KPC90cj4NCjwvdGJvZHk+PC90YWJsZT4pKSkpOw0KCX0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1EZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWxhYmVsTW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWdldE1lbWJlck5hbWVdDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldExpbmtPcHRpb25zXQ0KW0NVU1RPTUNPREU9bWltZVR5cGVdDQpbQ1VTVE9NQ09ERT13cml0ZUZpbGVdDQpbQ1VTVE9NQ09ERT1nZXRCZXR3ZWVuXQ0KW0NVU1RPTUNPREU9Z1VJRF0NCltDVVNUT01DT0RFPWNyeXB0XQ0KW0NVU1RPTUNPREU9Z2V0Q3J5cHRdDQpbQ1VTVE9NQ09ERT1nZXRDcnlwdFBhc3NVc2VyXQ0KW0NVU1RPTUNPREU9Y29tcG9zZVZFTkRPUitwaHBzZWNsaWJdDQpbQ1VTVE9NQ09ERT1nZXRIZWxwZXJDbGFzc10NCltDVVNUT01DT0RFPWNhbkFjY2Vzc01lbWJlckRhdGFdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9YXJyYXlQYXJ0aXRpb25dDQogW0NVU1RPTUNPREU9dXJsRXhpc3RzXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbQ29tcG9uZW50IGltYWdlXShodHRwczovL3d3dy52ZG0uaW8vaW1hZ2VzL01ha2l0YTUwMC5qcGcgIlRoZSBNYWtpdGEgQ29tcG9uZW50IikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'The MyMakita Products', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9pbWFnZXNgICgNCglgY29kZWAgVkFSQ0hBUig2NCkgTk9UIE5VTEwgREVGQVVMVCAnJywNCglgcGF0aGAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJycsDQoJUFJJTUFSWSBLRVkgIChgY29kZWApDQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0Zjg7', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9pbWFnZXNgOw==', 'Products (mymakita)', '.git', '', '', 1, '', 'http://www.vdm.io', '', 'ypLnpEqOfQEPOTOqxYyDK6yFt8umORR1fhiC/6K0TfU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 176, '', 1, 31),
(59, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.7', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:14:30', '', 'C3Zg8urLsFMNpxaom1+0jJkHK1dEotIRUb1ZNX3RWbk=', 'XulMeX5W2+ecezoEL1+gulTaaJQf6baZNTbdTSujzP0=', '', 'DrAWJCUprUjO68dd93yw+EUa+CvH0XW4XxiC2AYPZng=', '', '', 'A_202', 2, '', 'Orthopedic', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_orthopedic', '3x5PSUKI0txZMgQTO2lfjAspJV1B65jIBD6H0O3n9pOylGn6kZ9UCzMYnDsJXHzY', '', 'f1b1ab96-6231-44f5-a21c-4d00fc7d2cb6', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-12-19 22:28:19', 2, 'Orthopedic', 'coral_orthopedic', '', 4, '', '', 'W0NVU1RPTUNPREU9b3J0aG9wZWRpY0hlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Orthopedic', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlYA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlYCAoYGlkYCwgYGFsaWFzYCwgYGRlc2NyaXB0aW9uYCwgYG5hbWVgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgKSBWQUxVRVMNCigxLCAnYWN0aXZlLXJhbmdlLW9mLW1vdGlvbicsICcnLCAnQWN0aXZlIFJhbmdlIG9mIE1vdGlvbicsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooMiwgJ2Z1bmN0aW9uYWwtbW92ZW1lbnRzJywgJycsICdGdW5jdGlvbmFsIE1vdmVtZW50cycsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooMywgJ21hbnVhbC1tdXNjbGUtdGVzdCcsICcnLCAnTWFudWFsIE11c2NsZSBUZXN0JywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCig0LCAnbXVzY2xlLWxlbmd0aCcsICcnLCAnTXVzY2xlIExlbmd0aCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNSwgJ211c2NsZS1zdHJlbmd0aC10ZXN0JywgJycsICdNdXNjbGUgU3RyZW5ndGggVGVzdCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNiwgJ211c2NsZS10ZXN0JywgJycsICdNdXNjbGUgVGVzdCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNywgJ25ldXJvbG9naWNhbC1leGFtJywgJycsICdOZXVyb2xvZ2ljYWwgRXhhbScsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooOCwgJ3BhbHBhdGlvbicsICcnLCAnUGFscGF0aW9uJywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCig5LCAncGFzc2l2ZS1yYW5nZS1vZi1tb3Rpb24nLCAnJywgJ1Bhc3NpdmUgUmFuZ2Ugb2YgTW90aW9uJywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCigxMCwgJ3NwZWNpYWwtdGVzdCcsICcnLCAnU3BlY2lhbCBUZXN0JywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCigxMSwgJ3N0cmVuZ3RoLXRlc3QnLCAnJywgJ1N0cmVuZ3RoIFRlc3QnLCAxLCAnMjAxOC0xMi0xOCAyMzoyMDo0MycpOw==', '', 'Orthopedic (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_orthopedic_server.xml', 'http://www.vdm.io', '', 'wkO7vaI4Mdw7BqUTMYlqxUqWoEo+M5Ch35qN7dZ9mi8=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"}}', 1, 13, '', 1, 32),
(60, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, 1, '', '', '', 1, '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.7', 'Copyright (C) 2015. All Rights Reserved', '2019-05-07 20:25:06', '', 'duF73iYN4QhKZ1/NE9GcVbG8VUbkP+aM060DGXwMqn4=', '3uO+1kKg9R603fAVO+dbA0Hkw/yZ9trV6dEcX2v+7Xo=', '', 'ecp2UWis3Sbd5VUvxquIULKhgJE6T1w5mNciWyI2ZUw=', '', '', 'A_213', 2, '', 'Invoicing', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_invoicing', 'k9EtnDjnEiCc0yQHlC9QpQ/m65IkMacyYQiYHmUAKcnKa0MBVqrah7fPljDcNPyVbcTFN27S6M1U97YLGNLqkw==', '', 'ccd30536-16a0-427f-98f9-327bb2f0ab4e', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#9734;', '2021-03-08 03:18:14', 2, 'Invoicing', 'coral_invoicing', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEdldCBzZWxlY3Rpb24gIGJhc2VkIG9uIHR5cGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIG1haW4gdGFibGUgdG8gc2VsZWN0DQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZCAgICBUaGUgdHlwZSBvZiB2YWx1ZXMgdG8gcmV0dXJuDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGZpbHRlciAgICBUaGUga2luZCBvZiBmaWx0ZXIgKHRvIHJldHVybiBvbmx5IHZhbHVlcyByZXF1aXJlZCkNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGIgICAgIFRoZSBkYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0YWJsZSA9ICdmb3JtJywgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicsICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCS8vIHByZXAgZm9yIHBsYWNlaG9sZGVycw0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBwbGFjZWhvbGRlciBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3BsYWNlaG9sZGVyX3ByZWZpeCcsICdbW1tjb21wb25lbnRdXV0nKTsNCgkJCSRmID0gJ1snIC4gJHByZWZpeCAuICdfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQlpZiAoKCRmaWVsZHMgPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3Byb2ZpbGVfZmllbGRzJywgZmFsc2UpKSAhPT0gZmFsc2UgJiYgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGZpZWxkcykpDQoJCQl7DQoJCQkJJGNvbHVtbnMgPSBhcnJheSgnaWQnKTsgLy8gbmVlZGVkIGZvciBwZXJtaXNzaW9uIGNoZWNrDQoJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQkkY29sdW1uc1tdID0gJGZpZWxkLT5maWVsZDsNCgkJCQl9DQoJCQkJLy8gYWRkIGRhdGVzIGZvciBkaXNwbGF5DQoJCQkJJGNvbHVtbnNbXSA9ICdjcmVhdGVkJzsNCgkJCQkkY29sdW1uc1tdID0gJ21vZGlmaWVkJzsNCgkJCX0NCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gbm90aW5nIHRvIHJlbW92ZQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRkYikpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZGF0YWJhc2UgY29sdW1ucyBvZiB0aGlzIHRhYmxlDQoJCQkkY29sdW1ucyA9ICRkYi0+Z2V0VGFibGVDb2x1bW5zKCIjX19bW1tjb21wb25lbnRdXV1fIiAuICR0YWJsZSwgZmFsc2UpOw0KCQkJLy8gYWx3YXlzIHJlbW92ZSB0aGVzZQ0KCQkJJHJlbW92ZSA9IGFycmF5KCdhc3NldF9pZCcsICdjaGVja2VkX291dCcsICdjaGVja2VkX291dF90aW1lJyk7DQoJCQkvLyBpZiBwbGFjZWhvbGRlciBhbmQgbm9uZSBmaWx0ZXIgdGhlbiByZW1vdmUgc29tZSBtb3JlDQoJCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCAmJiAoJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2VtYWlsJyA9PT0gJGZpbHRlcikpDQoJCQl7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2FjY2Vzcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2NyZWF0ZWRfYnknOw0KCQkJCSRyZW1vdmVbXSA9ICdpZCc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJLy8gbG9hZCB0aGUgY29sdW1ucyB0byBzZWxlY3Rpb24NCgkJCWZvcmVhY2ggKCRjb2x1bW5zIGFzICRjb2x1bW4pDQoJCQl7DQoJCQkJJHNlbGVjdGlvblsnYS4nIC4gJGNvbHVtbl0gPSAkZiAuICRjb2x1bW4gLiAkYjsNCgkJCQkvLyB3ZSBtdXN0IGFkZCB0aGUgbGFiZWxzDQoJCQkJaWYgKCdwcm9maWxlJyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBsYWJlbCBmb3IgdGhlc2UgZmllbGRzDQoJCQkJCSRzZWxlY3Rpb25bJ3NldExhYmVsLT4nIC4gJGNvbHVtbl0gPSAkZiAuICdsYWJlbF8nIC4gJGNvbHVtbiAuICRiOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgaW52b2ljZSBpdGVtcw0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGl0ZW0gICAgIFRoZSBpdGVtIG9iamVjdA0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEl0ZW1zKCYkaXRlbSkNCgl7DQoJCS8vIGNoZWNrIGlmIGludm9pY2UgZXhpc3QNCgkJaWYgKGlzc2V0KCRpdGVtLT5pZCkgJiYgJGl0ZW0tPmlkID4gMCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAncHJvZHVjdF9jb2RlJywgJ3RheGVkJywgJ21lbWJlcicsICdjb21wYW55JywgJ3ByaWNlJywgJ2Rlc2NyaXB0aW9uJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2ludm9pY2VfaXRlbScpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2Zvcm0nKSAuICcgPSAnIC4gKGludCkgJGl0ZW0tPmlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCS8vIHN0YXJ0IGJ1aWxkaW5nIHN1YmZvcm0NCgkJCQkkaXRlbS0+aXRlbXMgPSBhcnJheSgpOw0KCQkJCSRpdGVtLT5jb21wYW5pZXMgPSBhcnJheSgpOw0KCQkJCSRpdGVtcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQlmb3JlYWNoICgkaXRlbXMgYXMgJHIgPT4gJGxpbmUpDQoJCQkJew0KCQkJCQkvLyBsb2FkIGl0ZW1zDQoJCQkJCSRpdGVtLT5pdGVtc1snaXRlbXMnIC4gJHJdID0gYXJyYXkoKTsNCgkJCQkJJGl0ZW0tPml0ZW1zWydpdGVtcycgLiAkcl1bJ2hhc2gnXSA9ICRsaW5lLT5pZDsNCgkJCQkJJGl0ZW0tPml0ZW1zWydpdGVtcycgLiAkcl1bJ3Byb2R1Y3RfY29kZSddID0gJGxpbmUtPnByb2R1Y3RfY29kZTsNCgkJCQkJJGl0ZW0tPml0ZW1zWydpdGVtcycgLiAkcl1bJ2Rlc2NyaXB0aW9uJ10gPSAkbGluZS0+ZGVzY3JpcHRpb247DQoJCQkJCSRpdGVtLT5pdGVtc1snaXRlbXMnIC4gJHJdWydwcmljZSddID0gJGxpbmUtPnByaWNlOw0KCQkJCQkkaXRlbS0+aXRlbXNbJ2l0ZW1zJyAuICRyXVsndGF4ZWQnXSA9ICRsaW5lLT50YXhlZDsNCgkJCQkJLy8gJGl0ZW0tPml0ZW1zWydpdGVtcycgLiAkcl1bJ3F0eSddID0gJGxpbmUtPnF0eTsNCgkJCQkJLy8gbG9hZCBjb21wYW5pZXMNCgkJCQkJJGl0ZW0tPmNvbXBhbmllc1tdID0gJGxpbmUtPmNvbXBhbnk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogc2F2ZSBpbnZvaWNlIGl0ZW1zDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRpdGVtICAgICBUaGUgaXRlbSBhcnJheQ0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdmVJdGVtcygmJGl0ZW0pDQoJew0KCQkvLyBjaGVjayBpZiBpbnZvaWNlIGV4aXN0DQoJCWlmIChpc3NldCgkaXRlbVsnaWQnXSkgJiYgJGl0ZW1bJ2lkJ10gPiAwKQ0KCQl7DQoJCQkvLyBtb3JlIHNvb24NCgkJfQ0KCX0NCltDVVNUT01DT0RFPWdldEZvbGRlclBhdGhdDQpbQ1VTVE9NQ09ERT10aGVCdXRsZXJdDQpbQ1VTVE9NQ09ERT1nZXRQbGFjZUhvbGRlcnNSZXBvcnRdDQpbQ1VTVE9NQ09ERT1nZXRBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPW1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1sYWJlbE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1yZW1vdmVBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWdldE1lbWJlck5hbWVdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9Z2V0Q29yZU5hbWVd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ0KW0NVU1RPTUNPREU9dGVzdElmQ29tcGFueUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Invoicing', '', '', 'Invoicing (coral)', '.git', '', 1, 1, 'https://www.vdm.io/updates/coral_billing_server.xml', 'http://www.vdm.io', '', 'Hz9S2dRlC31zdUbI6Se0qMK8BTuJqlgV16VhmPzFvbg=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 25, '', 1, 33),
(61, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2019-06-24 12:49:07', '', 'n5BVLqYY61IDBZjyKKeBTi3PQR54i7v8rGoNwavhPgs=', '9ygtntEElSNNzfIKkn+gnd1EpsiUyhqV7jAfyvtyhn0=', '', 'vuP+5AtGk9ERYFsgT1Dxg663LrhU+d9FZZOCe7Jcqm4=', '', '', 'A_216', 2, '', 'Importing Tool', 'Joomla@vdm.io', '', '', 'a8n/ZinoyVCee7VxyI/QzyC867sY8+gdqp3MeWoZ9wc=', '', '3ffa1cc4-f8a0-4634-b4b3-1284c6af3b71', '', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2019-06-24 12:55:08', '', 'Importing Tool', 'importingtool', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Importing Tool', '', '', 'Importing Tool', '.git', '', '', 1, '', 'https://www.vdm.io/', '', '69/Iny0Vpc7HnQ9Z0NuCkAbvqk7MbjDQGM5cecflQBQ=', '', '', 1, 4, '', 1, 71),
(62, 1, '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', 1, '{}', 3, 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.5', 'Copyright (C) 2015. All Rights Reserved', '2019-09-25 12:57:04', '', 'WJQGIiIAJINZg6MshYpOG+wYEjZxxPrMeeBW72hCQQA=', 'WAvyW/Ys6au3aN/lDopdZsfch1yxT2jghvhSQv0OGMU=', '', 'CsPjdpjUhnXzWNfsh1DGu81c46yHp1cvpcH471e/tng=', '', '', '', 1, '', 'A secure file repository.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-document-manager', 'jflVSFC/q6reGgpn/E2L+jgbmV79TOt8EQ4pknhJD4iT8FmAd10Tz1XmxBDVZ93QPKhkNyeorYC3NUgV16DNHg==', '', '2ca5b474-ca30-4577-913e-842a77e295ff', 'images/vdm/SR500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_documentManager.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2021-03-08 03:13:35', 2, 'Secure Repository', 'SecureRepository', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9ZmlsZUhlbHBlckJvdGhd', 'W0NVU1RPTUNPREU9Y291bnRMb2NhbERvd25sb2FkXQ==', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Secure File Repository', '', '', 'Secure Repository', '.git', '', 1, 2, 'https://www.vdm.io/updates/securerepository_server.xml', 'https://www.vdm.io/', '', 'dYJ+HemHdp1NE8uXQ/TfzLW3yZdv69Xq8aBSEfHR+pQ=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 27, '', 1, 15),
(63, 1, '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, '', '', '', '{}', '', 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2019 Vast Development Method. All rights reserved.', '2019-08-01 00:28:27', '', 'v2k4J0qsLE0E8nhLDz9zaVcCJHiADgckA+lBmOVV4ZA=', 'BfPUJkUrVutxYIDWt8i46MwpOE+JBPGPCN8xkLK5SdY=', '', 'kYoJjyBPIKCuC/DHdF8tEliOkOli3MEqrvWyj5qUZhc=', '', '', '', 1, '', 'Curriculum Builder', 'dev@vdm.io', '', '', '26mWghoAiABgwOQjiMXXhqHAXyS6SsYxbNhl8ocxPjE=', '', '4c3b9815-8930-4f11-8ad7-ad5b552927c2', 'images/vdm/CUB500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&Copf;&Lopf;', '2020-11-22 03:45:54', 3, 'Curriculum Builder', 'curriculumbuilder', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogVGhlIGdsb2JhbCBwYXJhbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRwYXJhbXMgPSBmYWxzZTsNCg0KCS8qKg0KCSogIHNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gbm90aW5nIGZvciBub3cNCgkJcmV0dXJuIHRydWU7DQoJfQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9Z1VJRF0NCltDVVNUT01DT0RFPWNyeXB0XQ0KW0NVU1RPTUNPREU9Z2V0Q3J5cHRdDQpbQ1VTVE9NQ09ERT1nZXRDcnlwdFBhc3NdDQpbQ1VTVE9NQ09ERT1nZXRFZGl0QnV0dG9uXQ0KW0NVU1RPTUNPREU9Z2V0RWRpdEJ1dHRvbkdVSURdDQpbQ1VTVE9NQ09ERT1zZXRTdWJmb3JtVGFibGVdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9YmNtYXRoXQ0KW0NVU1RPTUNPREU9Y29tcG9zZVZFTkRPUitwaHBzZWNsaWJd', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Curriculum Builder', '', '', 'Curriculum Builder', '.git', '', '', 1, '', 'https://www.vdm.io/', '', 'lYDhXW46jMK3cmBfyPcr95anvrilyVWw3rgaGrcxW08=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 39, '', 1, 70),
(64, 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, 1, '{}', 3, '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.1', 'Copyright (C) 2019. All Rights Reserved', '2019-06-24 19:13:57', 1, 'UdGyz2HyeSAWh4V8qTyePmiehQG9nsUBWfNYf0OZbx8=', 'B+mVpoNvMd5cBBoPVd0XCQ3GpdmTLzo5fWSED95/PAA=', '', 'hHNvxXcbEEU5JnV/KJWwk0x71HkcG3wVMyU92mmP7Ss=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', '', 1, '', 'Whale is an education member manager that integrates with many other components in Joomla.', 'joomla@vdm.io', '', '', '3bz0m6mdJeP1QL1abyj5ZD2DgMbcbubdTYv5nGeH+leI9UIhDZuo9F5Fm64U2FGyaRBf93bT4GxN5IulwRtX7hgxAzms4n46F5cooeowSXw=', '', '4cd86a0a-b8f9-4f07-b904-9b96bdb5bf4b', 'images/vdm/WHALE500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&Copf;&Lopf;', '2021-03-08 03:19:29', 2, 'Whale', 'whale', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9bWVtYmVybWFuYWdlckhlbHBlckJvdGhdDQpbQ1VTVE9NQ09ERT1jYW5BY2Nlc3NNZW1iZXJd', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'The Education Member Manager', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'Whale', '.git', '', 1, 3, 'https://www.vdm.io/updates/whale_server.xml', 'https://www.vdm.io/', '', 'LOFJmKrqH5HXUBZNbTRp+ZSsyjEDxokQ2BFhU65+M/Q=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 20, '', 1, 34),
(65, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.3', 'Copyright (C) 2019. All Rights Reserved', '2020-02-22 16:56:44', '', 'AILXAZHGoDcO84yVvQWM/oXimAYf7IlSW3NoEE6K1Tc=', 'A+hVHAQCVCgXZN1DHBRiEY/cyRqyhEBHfRMAglN9haM=', '', '9wTGn7cu1H2RW7fglZMBIdju1sCiUn1TpwxbYbsjErI=', '', '', 'A_189', 2, '', 'Contact Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_contactdetails', 'IpDszQXzrHdrZbDn3XBSP68F7/4AA8x1cozN2lg7IqFodiqcQ78JpVUITzBLMihLXKM8loLHj11ALZxsBLl5sg==', '', '12f14a26-d198-4b98-b662-686cedc379e6', 'images/vdm/WHALE500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&Copf;&Lopf;', '2020-07-26 00:38:28', 2, 'Contact', 'whale_contactdetails', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29udGFjdGRldGFpbHNIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Contact Details', '', '', 'Contact Details (whale)', '.git', '', 1, 1, 'https://www.vdm.io/updates/coral_contactdetails_server.xml', 'http://www.vdm.io', '', 'wBtNQiZgcfgDr9dHyigBA5m4mX8huF+SSbTf9mtSatM=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 12, '', 1, 35),
(66, '', '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', 1, '', '', 1, '', '', 1, 1, '', '{}', '', 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.6', 'Copyright (C) 2020. All Rights Reserved', '2017-06-16 19:13:20', '', 'tLe8nXe/rm4UFzW9KPFSXJAF+tZRA2lR1QWsnms0zpc=', 'Z4dLjLE/k+oamCDLA3OIT6QFHHSZE8w6eaNmID2ma4g=', '', 'IxxErDaGXf2tioCBYsNN3L7Y/V/azZgA+YP9k1qlw2s=', '', '', 'A_243', 2, '', 'The sentinel server portal of the project.', 'info@vdm.io', '', '', 'X0i9nKs6X5SwD91kpEGmkWjpz+tQa4LmRTY4SeF/LDTLrzPzedd3UU56W5+HDy3l', '', '3dc577a9-81a8-4391-a82a-c47e51cb595d', 'images/vdm/Sentinel500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&Omega;', '2020-05-24 22:57:50', '', 'Sentinel', 'sentinel', '', 4, '', '', 'W0NVU1RPTUNPREU9c2VudGluZWxIZWxwZXJCb3RoXQ==', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmFyXygkdGFibGUsICR3aGVyZSA9IG51bGwsICR3aGVyZVN0cmluZyA9ICd1c2VyJywgJHdoYXQgPSAnaWQnKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0LCAkd2hlcmVTdHJpbmcpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlKSk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHNlYXJjaCA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCWZvcmVhY2ggKCRzZWFyY2ggYXMgJGl0ZW0pDQoJCQl7DQoJCQkJaWYgKGlzc2V0KCRpdGVtLT57JHdoZXJlU3RyaW5nfSkpDQoJCQkJew0KCQkJCQkvLyBiYXNpYyBkZWNyeXB0IGRhdGEgdmFsdWUuDQoJCQkJCSRpdGVtLT57JHdoZXJlU3RyaW5nfSA9IHNlbGY6OmRlY3J5cHQoJGl0ZW0tPnskd2hlcmVTdHJpbmd9KTsNCgkJCQl9DQoJCQkJLy8gc2VlIGlmIGl0IGlzIHRoaXMgb25lDQoJCQkJaWYgKGlzc2V0KCRpdGVtLT57JHdoZXJlU3RyaW5nfSkgJiYgaXNzZXQoJGl0ZW0tPnskd2hhdH0pICYmICRpdGVtLT57JHdoZXJlU3RyaW5nfSA9PT0gJHdoZXJlKQ0KCQkJCXsNCgkJCQkJcmV0dXJuICRpdGVtLT57JHdoYXR9Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKSA=', '', '', 'Sentinel Server.', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9kYXRhYCAoDQoJYG1lbWJlcmAgSU5UKDExKSBOT1QgTlVMTCBERUZBVUxUIDAsDQoJYGd1aWRgIFZBUkNIQVIoMzYpIE5PVCBOVUxMIERFRkFVTFQgJycsDQoJYHN0YXRpb25gIFZBUkNIQVIoMzYpIE5PVCBOVUxMIERFRkFVTFQgJycsDQoJYHR5cGVgIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLA0KCWBuYW1lYCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwgREVGQVVMVCAnJywNCglgdGltZWAgdGV4dCBOT1QgTlVMTCwNCglgdmFsdWVgIHRleHQgTk9UIE5VTEwsDQoJS0VZIGBpZHhfZ3VpZGAgKGBndWlkYCksDQoJS0VZIGBpZHhfbmFtZWAgKGBuYW1lYCksDQoJS0VZIGBpZHhfc3RhdGlvbmAgKGBzdGF0aW9uYCksDQoJS0VZIGBpZHhfbWVtYmVyYCAoYG1lbWJlcmApLA0KCUtFWSBgaWR4X3R5cGVgIChgdHlwZWApDQopIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9kYXRhYDs=', 'Sentinel', '.git', '', 1, 1, 'https://www.vdm.io/updates/demo_update_server.xml', 'https://www.vdm.io/', '', '7CXwuY5CJpupcDV211Gm4mRixTqVZ4QUhBmURvGvjGA=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 56, '', 1, 12),
(67, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.3', 'Copyright (C) 2019. All Rights Reserved', '2020-03-15 15:10:46', '', 'Ei1ioftwLwqpiUGX5/GiOeM7V+cmTj0TNA1jWTnKq60=', 'MFfw/alHiNeQaXzWCWenKPitzR/pBmFFnk4RXS43P8w=', '', 'OBcjRlhHM0pQeV44OmO+hHEpZk1gF1uiRTJqggpxhAg=', '', '', 'A_245', 2, '', 'The syllabus subscription manager', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_syllabus_subscription', 'FoAPdDIBPxFQiCAv9VGUBoTzS7br/Rc21mR3mt6gtm39gdH0yCROk5g9elMAszus7Qtc0Hwk7HBKwLZLub/ylw==', '', '275549e5-e136-4ef7-b2ed-b3104f7844fe', 'images/vdm/WHALE500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&Copf;&Lopf;', '2020-05-25 19:34:55', 2, 'Syllabus Subscription', 'whale_syllabus_subscription', '', 4, '', '', 'W0NVU1RPTUNPREU9c3lsbGFidXNTdWJzY3JpcHRpb25IZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Syllabus subscription manager', '', '', 'Syllabus Subscription (whale)', '.git', '', 1, 1, 'https://www.vdm.io/updates/coral_contactdetails_server.xml', 'http://www.vdm.io', '', 'WvhI9MNG/3vvUYxbP+2uW95p+YSfgGqdHwUoGhaZp90=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 11, '', 1, 36),
(68, 1, '', '', 1, 1, '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, '', '{}', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'george-media.txt', '', '', 'Vast Development Method', '1.0.1', 'Copyright (C) 2020. All Rights Reserved', '2020-05-19 08:28:48', 1, 'c3bs902wPklTKLLOhd8mZpBsy9vve07ZUI+VFVjWEf4=', 'jiNQg1gpq38XPjjLiabqwJiZLNp+duN94peqXdc/Ia0=', '', 'CfL6QkMw5fRPkpzh+ozi3GknXWlFqROONLzCTXAjyjg=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', 'A_252', 2, '', 'The MyMakita member manager that integrates with other components in Joomla.', 'joomla@vdm.io', '', '', 'mimu2TOQZEFLMMekPQ/peXSXRa+11onAIXm6+KAJd/sSRB+Sm3JjoDKggnteotqeRdWIBkSlHSAMxXAS3eC/+Q==', '', 'a0e5a4ff-690f-4536-b0d8-13fb58f9d5f9', 'images/vdm/Makita500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&zigrarr;', '2021-03-08 03:18:26', 2, 'MyMakita', 'mymakita', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSogdGhlIGJ1dHRvbiBuYW1lcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGJ1dHRvbk5hbWVzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogdGhlIG9wZW5lcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG9wZW5lcjsNCg0KCS8qKg0KCSogdGhlIHJldHVybiBoZXJlIHBhdGgNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXR1cm5faGVyZTsNCg0KCS8qKg0KCSAqIEdldCBzZWxlY3Rpb24gIGJhc2VkIG9uIHR5cGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIG1haW4gdGFibGUgdG8gc2VsZWN0DQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZCAgICBUaGUgdHlwZSBvZiB2YWx1ZXMgdG8gcmV0dXJuDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGZpbHRlciAgICBUaGUga2luZCBvZiBmaWx0ZXIgKHRvIHJldHVybiBvbmx5IHZhbHVlcyByZXF1aXJlZCkNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGIgICAgIFRoZSBkYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0YWJsZSA9ICdtZW1iZXInLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJywgJGZpbHRlciA9ICdub25lJywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gcHJlcCBmb3IgcGxhY2Vob2xkZXJzDQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHBsYWNlaG9sZGVyIHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OiRwYXJhbXMtPmdldCgncGxhY2Vob2xkZXJfcHJlZml4JywgJ1tbW2NvbXBvbmVudF1dXScpOw0KCQkJJGYgPSAnWycgLiAkcHJlZml4IC4gJ18nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gZ2V0IGNoYXJ0cw0KCQlpZiAoJ2NoYXJ0JyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyICYmIG1ldGhvZF9leGlzdHMoX19DTEFTU19fLCAnZ2V0QW55QXZhaWxhYmxlQ2hhcnRzJykgJiYgbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRBbGxDb21wb25lbnRzJykpDQoJCXsNCgkJCWlmICgoJGNvbXBvbmVudHMgPSBzZWxmOjpnZXRBbGxDb21wb25lbnRzKG51bGwsIGFycmF5KCdBc3Nlc3NtZW50JykpKSAhPT0gZmFsc2UgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudHMpKQ0KCQkJew0KCQkJCS8vIENoYXJ0IFRhcmdldCBUeXBlcw0KCQkJCSR0YXJnZXRzID0gYXJyYXkoMiwzKTsNCgkJCQkvLyBsb2FkIHBlciBjb21wb25lbnQNCgkJCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAkdGFyZ2V0KQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGNvbXBvbmVudHMgYXMgJGNvbXBvbmVudCkNCgkJCQkJew0KCQkJCQkJaWYgKCgkZGF0YSA9IHNlbGY6OmdldEFueUF2YWlsYWJsZUNoYXJ0cyhudWxsLCAkdGFyZ2V0LCAkY29tcG9uZW50LT5lbGVtZW50KSkgIT09IGZhbHNlICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJCQkJCXsNCgkJCQkJCQkkY29tID0gc3RyX3JlcGxhY2UoJ2NvbV8nLCAnJywgJGNvbXBvbmVudC0+ZWxlbWVudCk7DQoJCQkJCQkJZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkY2hhcnREYXRhKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGNoYXJ0c1ska2V5IC4gJ1xeLycgLiAkY29tcG9uZW50LT5lbGVtZW50IC4gJ1xeLycgLiAkdGFyZ2V0XSA9ICRjb20gLiAnXycgLiAka2V5Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBvbmx5IGdldCB3aGF0IHdlIG5lZWQNCgkJaWYgKCdlbWFpbCcgPT09ICRmaWx0ZXIgfHwgJ3JlcG9ydCcgPT09ICRmaWx0ZXIpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdGhlIERCIG9iamVjdA0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQkJew0KCQkJCS8vIGdldCB0aGUgZGF0YWJhc2Ugb2JqZWN0DQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQl9DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIGNvbHVtbnMgb2YgdGhpcyB0YWJsZQ0KCQkJJGNvbHVtbnMgPSAkZGItPmdldFRhYmxlQ29sdW1ucygiI19fW1tbY29tcG9uZW50XV1dXyIgLiAkdGFibGUsIGZhbHNlKTsNCgkJCS8vIGFsd2F5cyByZW1vdmUgdGhlc2UNCgkJCSRyZW1vdmUgPSBhcnJheSgnYXNzZXRfaWQnLCAnY2hlY2tlZF9vdXQnLCAnY2hlY2tlZF9vdXRfdGltZScpOw0KCQkJLy8gcmVtb3ZlDQoJCQlmb3JlYWNoICgkcmVtb3ZlIGFzICRrZXkpDQoJCQl7DQoJCQkJdW5zZXQoJGNvbHVtbnNbJGtleV0pOw0KCQkJfQ0KCQkJLy8gcHJlcCB0aGUgY29sdW1ucw0KCQkJJGNvbHVtbnMgPSBhcnJheV9rZXlzKCRjb2x1bW5zKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGNvbHVtbnMNCgkJaWYgKGlzc2V0KCRjb2x1bW5zKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29sdW1ucykpDQoJCXsNCgkJCS8vIGNvbnZlcnQgdGhlIGNvbHVtbnMgZm9yIHF1ZXJ5IHNlbGVjdGlvbg0KCQkJJHNlbGVjdGlvbiA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uKQ0KCQkJew0KCQkJCSRzZWxlY3Rpb25bJ2EuJyAuICRjb2x1bW5dID0gJGYgLiAkY29sdW1uIC4gJGI7DQoJCQkJLy8gd2UgbXVzdCBhZGQgdGhlIHBhcmFtcw0KCQkJCWlmICgncHJvZmlsZScgIT09ICRmaWx0ZXIgJiYgJ2ZpZWxkJyAhPT0gJGZpbHRlcikNCgkJCQl7DQoJCQkJCS8vIHNldCB0aGUgbGFiZWwgZm9yIHRoZXNlIGZpZWxkcw0KCQkJCQkkc2VsZWN0aW9uWydzZXRMYWJlbC0+JyAuICRjb2x1bW5dID0gJGYgLiAnbGFiZWxfJyAuICRjb2x1bW4gLiAkYjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBuZWVkZWQgdmFsdWVzDQoJCQlpZiAoJ21lbWJlcicgPT09ICR0YWJsZSkNCgkJCXsNCgkJCQkvLyBzZXQgbmFtZXMgYW5kIGVtYWlscw0KCQkJCSRzZWxlY3Rpb25bJ3NldE1lbWJlck5hbWU6aWR8dXNlcnxuYW1lfHN1cm5hbWUnXSA9ICRmIC4gJ25hbWUnIC4gJGI7DQoJCQkJJHNlbGVjdGlvblsnc2V0TWVtYmVyRW1haWw6aWR8dXNlcnxlbWFpbCddID0gJGYgLiAnZW1haWwnIC4gJGI7DQoJCQkJJHNlbGVjdGlvblsnc2V0TWVtYmVyTmFtZTpjcmVhdGVkX2J5fHVzZXInXSA9ICRmIC4gJ2NyZWF0ZWRfbmFtZScgLiAkYjsNCgkJCQkkc2VsZWN0aW9uWydzZXRNZW1iZXJFbWFpbDpjcmVhdGVkX2J5fHVzZXInXSA9ICRmIC4gJ2NyZWF0ZWRfZW1haWwnIC4gJGI7DQoJCQkJJHNlbGVjdGlvblsnc2V0TWVtYmVyTmFtZTptb2RpZmllZF9ieXx1c2VyJ10gPSAkZiAuICdtb2RpZmllZF9uYW1lJyAuICRiOw0KCQkJCSRzZWxlY3Rpb25bJ3NldE1lbWJlckVtYWlsOm1vZGlmaWVkX2J5fHVzZXInXSA9ICRmIC4gJ21vZGlmaWVkX2VtYWlsJyAuICRiOw0KCQkJCS8vIGdldCBuYW1lIGFuZCBlbWFpbA0KCQkJCSRzZWxlY3Rpb25bJ2dldE1lbWJlck5hbWU6bWFpbl9tZW1iZXInXSA9ICRmIC4gJ21haW5fbmFtZScgLiAkYjsNCgkJCQkkc2VsZWN0aW9uWydnZXRNZW1iZXJFbWFpbDptYWluX21lbWJlciddID0gJGYgLiAnbWFpbl9lbWFpbCcgLiAkYjsNCgkJCQkvLyBzZXQgZmFuY3kgZGF0ZXMNCgkJCQkkc2VsZWN0aW9uWydmYW5jeURhdGU6Y3JlYXRlZCddID0gJGYgLiAnY3JlYXRlZCcgLiAkYjsNCgkJCQkkc2VsZWN0aW9uWydmYW5jeURhdGU6bW9kaWZpZWQnXSA9ICRmIC4gJ21vZGlmaWVkJyAuICRiOw0KCQkJCS8vIHNldCBwcm9maWxlIGltYWdlDQoJCQkJJHNlbGVjdGlvblsnc2V0SW1hZ2VMaW5rOnByb2ZpbGVfaW1hZ2V8bmFtZSddID0gJGYgLiAncHJvZmlsZV9pbWFnZV91cmwnIC4gJGI7DQoJCQkJJHNlbGVjdGlvblsnc2V0SW1hZ2VIVE1MOnByb2ZpbGVfaW1hZ2VfdXJsfG5hbWUnXSA9ICRmIC4gJ3Byb2ZpbGVfaW1hZ2VfaHRtbCcgLiAkYjsNCgkJCQkvLyBzZXQgcHJvZmlsZQ0KCQkJCSRzZWxlY3Rpb25bJ3NldFByb2ZpbGVMaW5rOmlkfHRva2VuJ10gPSAgJGYgLiAncHJvZmlsZV9saW5rX3VybCcgLiAkYjsNCgkJCQkvLyBzZXQgdGhlIHJldHVybiB2YWx1ZQ0KCQkJCXNlbGY6OiRyZXR1cm5faGVyZSA9IHVybGVuY29kZShiYXNlNjRfZW5jb2RlKChzdHJpbmcpIFVyaTo6Z2V0SW5zdGFuY2UoKSkpOw0KCQkJCS8vIHNldCBlZGl0IGxpbmsNCgkJCQkkc2VsZWN0aW9uWydzZXRNZW1iZXJFZGl0VVJMOmlkfGNyZWF0ZWRfYnknXSA9ICAkZiAuICdlZGl0X3VybCcgLiAkYjsNCgkJCQkvLyBHZXQgdGhlIG1lZGl1bSBlbmNyeXB0aW9uLg0KCQkJCSRtZWRpdW1rZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnbWVkaXVtJyk7DQoJCQkJaWYgKCRtZWRpdW1rZXkpDQoJCQkJew0KCQkJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJCQlzZWxmOjokb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJG1lZGl1bWtleSk7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBjaGFydCBkaXYgYW5kIEpTIGNvZGUgKG9ubHkgaWYgZmlsdGVyIGlzIG5vdCBjaGFydCkNCgkJCWlmICgnY2hhcnQnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgaXNzZXQoJGNoYXJ0cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNoYXJ0cykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGNoYXJ0cyBhcyAkY2hhcnQgPT4gJHZhbHVlKQ0KCQkJCXsNCgkJCQkJLy8gbWFrZSBzdXJlIHRoZSBjaGFydCBuYW1lIGlzIHNhdmUNCgkJCQkJJHNlbGVjdGlvblsnc2V0TXVsdGlDaGFydC0+JyAuICRjaGFydF0gPSAkZiAuICR2YWx1ZSAuICRiOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIHNldCBpbWFnZSBIVE1MDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRJbWFnZUhUTUwoJG9iamVjdCkNCgl7DQoJCXJldHVybiAnPGltZyBzcmM9IicgLiAkb2JqZWN0LT5nZXQoJ3Byb2ZpbGVfaW1hZ2VfdXJsJywgJyMnKSAuICciIGNsYXNzPSJtZW1iZXItaW1hZ2UiIGFsdD0iJyAuICRvYmplY3QtPmdldCgnbmFtZScsIFRleHQ6Ol8oJ01lbWJlcicpKSAuICcgJyAuIFRleHQ6Ol8oJ0ltYWdlJykgLiAnIiAvPic7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgaW1hZ2UgbGluaw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SW1hZ2VMaW5rKCRpdGVtKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcGVuZXIpICYmICgkaW1hZ2UgPSAkaXRlbS0+Z2V0KCdwcm9maWxlX2ltYWdlJywgZmFsc2UpKSAhPT0gZmFsc2UgJiYgIWlzX251bWVyaWMoJGltYWdlKSAmJiAkaW1hZ2UgPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaW1hZ2UsIHRydWUpKSkNCgkJew0KCQkJLy8gbm93IHVubG9jaw0KCQkJJGl0ZW0tPnNldCgncHJvZmlsZV9pbWFnZScsIHJ0cmltKHNlbGY6OiRvcGVuZXItPmRlY3J5cHRTdHJpbmcoJGltYWdlKSwgIlwwIikpOw0KCQl9DQoJCS8vIGdldCBsaW5rDQoJCXJldHVybiBzZWxmOjpnZXRJbWFnZUxpbmsoJGl0ZW0sICdwcm9maWxlX2ltYWdlJywgJ25hbWUnLCBudWxsLCBmYWxzZSk7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgbWVtYmVyIGVkaXQgdXJsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRNZW1iZXJFZGl0VVJMKCRpdGVtKQ0KCXsNCgkJaWYgKHNlbGY6OmNhbkFjY2Vzc01lbWJlcigkaXRlbS0+Z2V0KCdpZCcsIDApKSAmJiAoJHVybCA9IHNlbGY6OmdldEVkaXRVUkwoJGl0ZW0sICdtZW1iZXInLCAnbWVtYmVycycsICcmcmV0dXJuPScgLiBzZWxmOjokcmV0dXJuX2hlcmUpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCXJldHVybiAkdXJsOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoNCgkvKioNCgkqIHNldCBwcm9maWxlIGxpbmsNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFByb2ZpbGVMaW5rKCRvYmplY3QpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCS8vIG9ubHkgbG9hZCBsaW5rIGlmIG9wZW4gdG8gcHVibGljIG9yIGhhcyBhY2Nlc3MNCgkJaWYgKDIgPT0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdsb2dpbl9yZXF1aXJlZCcsIDEpIHx8IHNlbGY6OmNhbkFjY2Vzc01lbWJlcigkb2JqZWN0LT5nZXQoJ2lkJywgMCkpKQ0KCQl7DQoJCQlyZXR1cm4gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PXByb2ZpbGUmaWQ9Jy4gJG9iamVjdC0+Z2V0KCdpZCcpIC4gJzonIC4gJG9iamVjdC0+Z2V0KCd0b2tlbicpIC4gJyZyZXR1cm49JyAuIHNlbGY6OiRyZXR1cm5faGVyZSk7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCS8qKg0KCSogc2V0IG1lbWJlciBuYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRNZW1iZXJOYW1lKCRvYmplY3QpDQoJew0KCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgY3JlYXRlZCBieSBvciBtb2RpZmllZCBieQ0KCQlpZiAoKCR1c2VyID0gJG9iamVjdC0+Z2V0KCdjcmVhdGVkX2J5JywgZmFsc2UpKSAhPT0gZmFsc2UgfHwgKCR1c2VyID0gJG9iamVjdC0+Z2V0KCdtb2RpZmllZF9ieScsIGZhbHNlKSkgIT09IGZhbHNlICkNCgkJew0KCQkJJG9iamVjdC0+c2V0KCd1c2VyJywgJHVzZXIpOw0KCQl9DQoJCXJldHVybiBzZWxmOjpnZXRNZW1iZXJOYW1lKCRvYmplY3QtPmdldCgnaWQnLCBudWxsKSwgJG9iamVjdC0+Z2V0KCd1c2VyJywgbnVsbCksICRvYmplY3QtPmdldCgnbmFtZScsIG51bGwpLCAkb2JqZWN0LT5nZXQoJ3N1cm5hbWUnLCBudWxsKSk7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgbWVtYmVyIGVtYWlsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRNZW1iZXJFbWFpbCgkb2JqZWN0KQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGNyZWF0ZWQgYnkgb3IgbW9kaWZpZWQgYnkNCgkJaWYgKCgkdXNlciA9ICRvYmplY3QtPmdldCgnY3JlYXRlZF9ieScsIGZhbHNlKSkgIT09IGZhbHNlIHx8ICgkdXNlciA9ICRvYmplY3QtPmdldCgnbW9kaWZpZWRfYnknLCBmYWxzZSkpICE9PSBmYWxzZSApDQoJCXsNCgkJCSRvYmplY3QtPnNldCgndXNlcicsICR1c2VyKTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6Z2V0TWVtYmVyRW1haWwoJG9iamVjdC0+Z2V0KCdpZCcsIG51bGwpLCAkb2JqZWN0LT5nZXQoJ3VzZXInLCBudWxsKSwgJG9iamVjdC0+Z2V0KCdlbWFpbCcsIG51bGwpKTsNCgl9DQoNCgkvKioNCgkqIHNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gbm90aW5nIGZvciBub3cNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJKiBnZXQgYnV0dG9uIG5hbWUNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEJ1dHRvbk5hbWUoJHR5cGUsICRkZWZhdWx0KQ0KCXsNCgkJaWYgKCFpc3NldChzZWxmOjokYnV0dG9uTmFtZXNbJHR5cGVdKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCQl7DQoJCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgYnV0dG9uIG5hbWUNCgkJCXNlbGY6OiRidXR0b25OYW1lc1skdHlwZV0gPSBzZWxmOjokcGFyYW1zLT5nZXQoJ2J1dHRvbl8nLiAkdHlwZSAuICdfbmFtZScsICRkZWZhdWx0KTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGJ1dHRvbk5hbWVzWyR0eXBlXTsNCgl9DQoNCgkvKioNCgkqIHJlbW92ZSBhbGwgZ3JvdXBzIHRoYXQgYXJlIHBhcnQgb2YgdGFyZ2V0IGdyb3VwcyBpbiB0aGUgbWVtYmVyIHR5cGVzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZW1vdmVNZW1iZXJHcm91cHMoJiRncm91cHMpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCXsNCgkJCS8vIGdldCBkYXRhYmFzZSBvYmplY3QNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KGFycmF5KCdhLmlkJykpOw0KCQkJJHF1ZXJ5LT5mcm9tKCcjX19bW1tjb21wb25lbnRdXV1fdHlwZSBBUyBhJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCS8vIGdldCBhbGwgdHlwZXMNCgkJCSR0eXBlcyA9ICRkYi0+bG9hZENvbHVtbigpOw0KCQkJLy8gbm93IGdldCBhbGwgdGFyZ2V0IGdyb3Vwcw0KCQkJJGdyb3Vwc190YXJnZXQgPSBzZWxmOjpnZXRNZW1iZXJHcm91cHNCeVR5cGUoJHR5cGVzLCAnZ3JvdXBzX3RhcmdldCcpOw0KCQkJLy8gbm93IHVwZGF0ZSB0aGUgZ3JvdXBzDQoJCQkkZ3JvdXBzID0gYXJyYXlfZGlmZigkZ3JvdXBzLCAkZ3JvdXBzX3RhcmdldCk7DQoJCX0NCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgcmVnaXN0cmF0aW9uIGZvcm0NCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZvcm1zKCR0YXJnZXRzKQ0KCXsNCgkJLy8gZ2V0IHRoZSBhcHAgb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkvLyBnZXQgbGFuZ3VhZ2Ugb2JqZWN0DQoJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJLy8gc3RhcnQgZm9ybXMgYXJyYXkNCgkJJGZvcm1zPSBhcnJheSgpOw0KCQkvLyBsb2FkIHRoZSBzY3JpcHRzIGFsc28NCgkJJHNjcmlwdCA9IGFycmF5KCk7DQoJCS8vIHNldCB0aGUgZm9ybXMNCgkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJGRldGFpbCkNCgkJew0KCQkJLy8gc29yZSBkYXRhIGluIHNlc3Npb24NCgkJCSRkYXRhID0gJGFwcC0+Z2V0VXNlclN0YXRlKCRkZXRhaWxbJ2NvbV8nXSAuICcuZWRpdC4nIC4gJGRldGFpbFsndGFibGUnXSAuICcuZGF0YScsIG51bGwpOw0KCQkJLy8gZ2V0IHRoZSBmb3JtDQoJCQkkZm9ybXNbJGRldGFpbFsnY29tJ11dID0gc2VsZjo6Z2V0TWVtYmVyRm9ybXMoMCwgJGRldGFpbFsnY29tXyddLCAkZGV0YWlsWyd0YWJsZSddLCAkZGF0YSwgdHJ1ZSwgJGRldGFpbFsnY29udHJvbCddKTsNCgkJCS8vIHdlIG11c3QgYWxzbyBnZXQgdGhlIHNjcmlwdHMNCgkJCS8vIHRyeSB0byBsb2FkIHRoZSB0cmFuc2xhdGlvbg0KCQkJJGxhbmctPmxvYWQoJGRldGFpbFsnY29tXyddLCBKUEFUSF9BRE1JTklTVFJBVE9SLCBudWxsLCBmYWxzZSwgdHJ1ZSk7DQoJCQkvLyBnZXQgdGhlIHNjcmlwdHMNCgkJCXNlbGY6OmdldEZpZWxkc1NjcmlwdCgkZGV0YWlsWydjb21fJ10sICRzY3JpcHQpOw0KCQl9DQoJCS8vIHRyeSBzb21lIHBsdWdpbiBsYW5ndWVzDQoJCSRsYW5nLT5sb2FkKCdwbGdfdXNlcl90ZXJtcycsIEpQQVRIX0FETUlOSVNUUkFUT1IsIG51bGwsIGZhbHNlLCB0cnVlKTsNCgkJLy8gbm93IGFkZCB0aGUgc2NyaXB0cyBpZiBmb3VuZA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNjcmlwdCkpDQoJCXsNCgkJCUZhY3Rvcnk6OmdldERvY3VtZW50KCktPmFkZFNjcmlwdERlY2xhcmF0aW9uKGltcGxvZGUoIlxuIiwgJHNjcmlwdCkpOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgZm9ybXMNCgkJcmV0dXJuICRmb3JtczsNCgl9DQoNCgkvKioNCgkqIHVwZGF0ZSB0aGUgdHlwZSBtYXAsIGZvciBxdWljayBzZWFyY2gNCgkgKg0KCSAqIEBwYXJhbSAgIGludCAgICRtZW1iZXIgICAgIFRoZSBtZW1iZXIgSUQNCgkgKiBAcGFyYW0gICBzdHJpbmcvYXJyYXkgICAkdHlwZXMgICAgIFRoZSB0eXBlcw0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZVR5cGVzKCYkbWVtYmVyLCAkdHlwZXMgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHRoZSBhcHAgb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkvLyBnZXQgZGF0YWJhc2Ugb2JqZWN0DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkvLyBkZWxldGUgYWxsIHR5cGVzIHRoZSBhcmUgbGlua2VkIHRvIHRoaXMgbWVtYmVyDQoJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCSAgICAkZGItPnF1b3RlTmFtZSgnbWVtYmVyJykgLiAnID0gJyAuIChpbnQpICRtZW1iZXINCgkJKTsNCgkJJHF1ZXJ5LT5kZWxldGUoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcCcpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkY29uZGl0aW9ucyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCS8vIG5vdyBzZXQgdGhlIG5ldyB2YWx1ZXMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0eXBlcykpDQoJCXsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJLy8gSW5zZXJ0IGNvbHVtbnMuDQoJCQkkY29sdW1ucyA9IGFycmF5KCdtZW1iZXInLCAndHlwZScpOw0KCQkJLy8gYnVpbGQgaW5zZXJ0IHF1ZXJ5DQoJCQkkcXVlcnktPmluc2VydCgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3R5cGVfbWFwJykpOw0KCQkJJHF1ZXJ5LT5jb2x1bW5zKCRkYi0+cXVvdGVOYW1lKCRjb2x1bW5zKSk7DQoJCQkvLyBidWlsZCB0aGUgdmFsdWVzDQoJCQlmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpDQoJCQl7DQoJCQkJICRxdWVyeS0+dmFsdWVzKChpbnQpICRtZW1iZXIgLiAnLCcgLiAoaW50KSAkdHlwZSk7DQoJCQl9DQoJCQkvLyBTZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0IGFuZCBleGVjdXRlIGl0Lg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCX0NCgl9DQpbQ1VTVE9NQ09ERT12YWxpZGF0ZUR5bmFtaWNGb3JtXQ0KW0NVU1RPTUNPREU9c2F2ZUR5bmFtaWNWaWV3c10NCltDVVNUT01DT0RFPXNhdmVEeW5hbWljRm9ybV0NCltDVVNUT01DT0RFPWdldEFueVBsYWNlSG9sZGVycyttZW1iZXJdDQpbQ1VTVE9NQ09ERT1nZXRQbGFjZUhvbGRlcnNSZXBvcnRdDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJzQnlUeXBlXQ0KW0NVU1RPTUNPREU9Z2V0UmVsYXRpb25zaGlwc0J5VHlwZXNdDQpbQ1VTVE9NQ09ERT1nZXRSZWxhdGlvbnNoaXBzQnlNZW1iZXJdDQpbQ1VTVE9NQ09ERT1nZXRBY2Nlc3NdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9Z2V0QmV0d2Vlbl0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQpbQ1VTVE9NQ09ERT1vcGVuVmFsaWRCYXNlU2l4dHlGb3VyXSANCltDVVNUT01DT0RFPWxvY2tlcl0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1nZXRUZW1wbGF0ZV0NCltDVVNUT01DT0RFPWdldEZvbGRlclBhdGhdDQpbQ1VTVE9NQ09ERT1pbWFnZUhlbHBlcnNdDQpbQ1VTVE9NQ09ERT13cml0ZUZpbGVdDQpbQ1VTVE9NQ09ERT1nZXRMaW5rT3B0aW9uc10NCltDVVNUT01DT0RFPWdldEltYWdlTGlua10NCltDVVNUT01DT0RFPWdldEVkaXRCdXR0b25dDQpbQ1VTVE9NQ09ERT1nZXRDcmVhdGVCdXR0b25dDQpbQ1VTVE9NQ09ERT1jaGVja1VuaXF1ZV0NCltDVVNUT01DT0RFPWdldENvbXBhbnlEZXRhaWxzXQ0KW0NVU1RPTUNPREU9Z2V0SGVscGVyQ2xhc3NdDQpbQ1VTVE9NQ09ERT1nZXRSZXBvcnRdDQpbQ1VTVE9NQ09ERT1nZXRBTllUZW1wbGF0ZStBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllGb3JtRGV0YWlscytBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllDb21wYW55RGV0YWlscytBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllDaGFydENvZGUrQW55XQ0KW0NVU1RPTUNPREU9Z2V0QU5ZTXVsdGlDaGFydERhdGFUYWJsZStBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllBdmFpbGFibGVDaGFydHMrQW55XQ0KW0NVU1RPTUNPREU9Z2V0QU5ZRm9ybXMrTWVtYmVyXQ0KW0NVU1RPTUNPREU9Z2V0QU5ZRGV0YWlscyttZW1iZXIsTWVtYmVyXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK21lbWJlcixNZW1iZXJdDQpbQ1VTVE9NQ09ERT1sYWJlbE1vZGVsQU5ZRGV0YWlscyttZW1iZXIsTWVtYmVyXQ0KW0NVU1RPTUNPREU9bXVsdGlDaGFydE1vZGVsQU5ZRGV0YWlscyttZW1iZXIsTWVtYmVyXQ0KW0NVU1RPTUNPREU9Z2V0TWVtYmVyTmFtZV0NCltDVVNUT01DT0RFPWdldEFsbENvbXBvbmVudHMrJ0luZm8nJiM0NDsnQXNzZXNzbWVudCddDQpbQ1VTVE9NQ09ERT1nZXRDb21wb25lbnROYW1lKydJbmZvJyYjNDQ7J0Fzc2Vzc21lbnQnXQ0KW0NVU1RPTUNPREU9Z2V0Q29tcG9uZW50c0F2YWlsbGFibGUraW5mbyxJbmZvLCYjOTE7JiM5MTsmIzkxO2NvbXBvbmVudCYjOTM7JiM5MzsmIzkzO10NCltDVVNUT01DT0RFPWdldENvbXBvbmVudHNBdmFpbGxhYmxlK2Fzc2Vzc21lbnQsQXNzZXNzbWVudCwmIzkxOyYjOTE7JiM5MTtjb21wb25lbnQmIzkzOyYjOTM7JiM5MztdDQpbQ1VTVE9NQ09ERT1sb2FkSW50ZWdyYXRlZFRhYnNdDQpbQ1VTVE9NQ09ERT1zZXRUYWJdDQpbQ1VTVE9NQ09ERT1zZXRTdWJmb3JtVGFibGVdDQpbQ1VTVE9NQ09ERT1zYXZlUmVsYXRpb25zaGlwc10NCltDVVNUT01DT0RFPWFycmF5UGFydGl0aW9uXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KW0NVU1RPTUNPREU9YmNtYXRoXQ0KW0NVU1RPTUNPREU9Z1VJRF0NCltDVVNUT01DT0RFPWdldENvcmVOYW1lXQ0KW0NVU1RPTUNPREU9bWltZVR5cGVdDQpbQ1VTVE9NQ09ERT10cmlnZ2VyUGx1Z2luXQ0KW0NVU1RPTUNPREU9Y2FuQWNjZXNzTWVtYmVyXQ0KW0NVU1RPTUNPREU9cmVnaXN0ZXJVc2VyXQ==', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbQ29tcG9uZW50IGltYWdlXShodHRwczovL3d3dy52ZG0uaW8vaW1hZ2VzL01ha2l0YTUwMC5qcGcgIlRoZSBNYWtpdGEgQ29tcG9uZW50IikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'The MyMakita Member Manager', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'MyMakita', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita/master/update_server.xml', 'http://www.vdm.io', '', 'WZPKTSsZfiK0J5Pujq+Lqgf9cG0dzik44VD5UljLVls=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 65, '', 1, 37),
(69, '', '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', 1, '', '', 1, '', '', 1, 1, '', '{}', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'george-media.txt', '', '', 'Vast Development Method', '1.0.7', 'Copyright (C) 2020. All Rights Reserved', '2020-05-20 11:23:58', '', 'nPivTPzlBZ91Y5p+LzlRAMbU/A43NFZ/ArMkylCqFYw=', 'SQLuWYe+Izc7i9CnY4qFhvroPAqlQ1NmbR1CmQPTYGo=', '', '+qs1ypqe6t+RFF+Pe81Nhi/jGNA9fzw8s9iu1jZcxeE=', '', '', 'A_248', 2, '', 'MyMakita Members Contact Details', 'joomla@vdm.io', '', '', 'KK233XYTqvWCH8mZocCiQJ54ys8pB8WW9MgZM4tDIDqO9mGtwyiE+V8HYDhXj0GcO1zu/nG6x4Gt39Hh+20T3A==', '', 'd4af561a-6410-466f-bfab-8b069a732fbd', 'images/vdm/Makita500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&zigrarr;', '2020-08-04 03:15:33', 2, 'Contact', 'mymakita_contactdetails', '', 4, '', '', 'CS8qKg0KCSAqIGxvYWQgY3JvbiB0YWJzDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkaXRlbSAgICAgICAgICAgICAgVGhlIGl0ZW0gdmFsdWVzDQoJICogQHBhcmFtICAgc3RyaW5nICAgICR2aWV3X25hbWUgIFRoZSBuYW1lIG9mIHRoZSB2aWV3DQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ3JvblRhYnMoJiRpdGVtLCAkdmlld19uYW1lKQ0KCXsNCgkJJHRtcCA9ICcnOw0KCQkvLyBvbmx5IGlmIGFsbCB2YWx1ZXMgbmVlZGVkIGFyZSBzZXQNCgkJaWYgKGlzc2V0KCRpdGVtLT5hY2Nlc3NfdG9rZW4pICYmIGlzc2V0KCRpdGVtLT5hcHBfa2V5KSAmJiBpc3NldCgkaXRlbS0+YXBwX3NlY3JldCkgJiYgaXNzZXQoJGl0ZW0tPnJlZnJlc2hfdG9rZW4pICYmDQoJCQlTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+YWNjZXNzX3Rva2VuKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+YXBwX2tleSkgJiYNCgkJCVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5hcHBfc2VjcmV0KSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+cmVmcmVzaF90b2tlbikgJiYNCgkJCWlzc2V0KCRpdGVtLT5ndWlkKSAmJiBzZWxmOjp2YWxpZGF0ZUdVSUQoJGl0ZW0tPmd1aWQpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIHVwZGF0ZSBVUkwNCgkJCSR1cGRhdGVfdXJsID0gVXJpOjpyb290KCkgLiAnaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJmtleT0nIC4gJGl0ZW0tPmd1aWQgLiAnJnRhc2s9Y29uc3RhbnRjb250YWN0LnN5bmMnOw0KCQkJLy8gc2V0dXAgdGhlIGNyb24gdXJsDQoJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkNCgkJCXsNCgkJCQkkcGF0aCA9ICcwIDAgKiAqICogY3VybCAtcyAiJyAuICR1cGRhdGVfdXJsIC4gJyIgPi9kZXYvbnVsbCAyPiYxJzsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcGF0aCA9ICdZb3UgbXVzdCBmaXJzdCBpbnN0YWxsL3NldHVwIGN1cmwgb24geW91ciBzZXJ2ZXIuJzsNCgkJCX0NCgkJCS8vIGJ1aWxkIHRoZSB0YWINCgkJCSR0bXAgLj0gSHRtbDo6XygnYm9vdHN0cmFwLmFkZFRhYicsICR2aWV3X25hbWUgLiAnVGFiJywgc2VsZjo6cmFuZG9ta2V5KDEwKSwgVGV4dDo6XygnQ3JvbiBKb2InLCB0cnVlKSk7DQoJCQkkdG1wIC49IFBIUF9FT0wgLiAnPGRpdiBjbGFzcz0id2VsbCB3ZWxsLWxhcmdlIj48ZGl2IGNsYXNzPSJyb3ctZmx1aWQgZm9ybS1ob3Jpem9udGFsLWRlc2t0b3AiPic7DQoJCQkkdG1wIC49IFBIUF9FT0wgLiAnPGgyIGNsYXNzPSJtb2R1bGUtdGl0bGUgbmF2LWhlYWRlciI+JyAuIFRleHQ6Ol8oJ0Nyb24gSm9iIERldGFpbHMnKSAuICc8L2gyPic7DQoNCgkJCSR0bXAgLj0gUEhQX0VPTCAuICc8cD5Zb3UgY2FuIHJ1biBhIGNyb25qb2IgdGhhdCB3aWxsIHN5bmMgYWxsIHlvdXIgY29udGFjdHMgd2l0aCBjb25zdGFudCBjb250YWN0IG9uY2UgcGVyL2RheS48YnIgLz48YnIgLz4nOw0KCQkJJHRtcCAuPSBQSFBfRU9MIC4gJzxiPlVTRSBUSEUgRk9MTE9XSU5HOjwvYj4gPHNwYW4gaWQ9ImNyb25qb2Itc3luYyI+PGNvZGU+JyAuICRwYXRoIC4gJzwvY29kZT48L3NwYW4+JzsNCgkJCSR0bXAgLj0gUEhQX0VPTCAuICc8YnIgLz48YnIgLz48YSBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIiBocmVmPSInIC4gJHVwZGF0ZV91cmwgLiAnIiB0YXJnZXQ9Il9ibGFuayI+UnVuIFVwZGF0ZSBOb3cgTWFudWFsbHk8L2E+JzsNCgkJCSR0bXAgLj0gUEhQX0VPTCAuICc8YnIgLz48YnIgLz5QbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdXIgSm9vbWxhIHdlYnNpdGUgaGFzIGEgRmlyZXdhbGwgaW5zdGFsbGVkLCBpdCB3aWxsIG5vdCBhbGxvdyBjcm9uam9iIHZpYSBkaXJlY3QgVVJMIChtb3N0IG9mIHRoZSB0aW1lKSwgeW91IHdpbGwgdGhlbiBuZWVkIHRvIGFkYXB0IHRoZSBjb3Juam9iIHJlcXVlc3QgdG8gbG9vayBsaWtlIGEgYnJvd3Nlci4gRm9yIG1vcmUgaW5mbyBwbGVhc2UgcmVhZCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE1OTc4MjMvMTQyOTY3Nyc7DQoNCgkJCSR0bXAgLj0gUEhQX0VPTCAuICc8L3A+PC9kaXY+PC9kaXY+JzsNCgkJCSR0bXAgLj0gSHRtbDo6XygnYm9vdHN0cmFwLmVuZFRhYicpOw0KCQl9DQoJCXJldHVybiAkdG1wOw0KCX0NCltDVVNUT01DT0RFPWNvbnRhY3RkZXRhaWxzSGVscGVyQm90aF0NCltDVVNUT01DT0RFPWdVSURd', 'CS8qKg0KCSAqIGdldCB0aGUgYXBwIHZhbHVlcw0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGd1aWQgICAgVGhlIEdVSUQgb2YgdGhlIGxvY2FsIEFQUA0KCSAqDQoJICogQHJldHVybiBvYmplY3QNCgkgKg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXBwKCRndWlkKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIEdVSUQNCgkJaWYgKHNlbGY6OnZhbGlkYXRlR1VJRCgkZ3VpZCkgJiYgKCRpZCA9IHNlbGY6OmdldFZhcignY29uc3RhbnRfY29udGFjdCcsICRndWlkLCAnZ3VpZCcsICdpZCcpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCS8vIG5vdyBnZXQgdGhlIG1vZGVsDQoJCQkkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgnY29uc3RhbnRfY29udGFjdCcsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJCS8vIG5vdyByZXR1cm4gdGhlIEFQUA0KCQkJcmV0dXJuICRtb2RlbC0+Z2V0SXRlbSgkaWQpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBzZXQgdGhlIGFwcCB2YWx1ZXMNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0eXBlICAgIFRoZSB0eXBlIG9mIHZhbHVlcw0KCSAqIEBwYXJhbSAgIG1peCAgICAgICR2YWx1ZSAgIFRoZSB2YWx1ZS9zDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGd1aWQgICAgVGhlIEdVSUQgb2YgdGhlIGxvY2FsIEFQUA0KCSAqDQoJICogQHJldHVybiBib29sDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEFwcCgkdHlwZSwgJHZhbHVlLCAkZ3VpZCkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCBHVUlEDQoJCWlmIChzZWxmOjp2YWxpZGF0ZUdVSUQoJGd1aWQpICYmICgkaWQgPSBzZWxmOjpnZXRWYXIoJ2NvbnN0YW50X2NvbnRhY3QnLCAkZ3VpZCwgJ2d1aWQnLCAnaWQnKSkgIT09IGZhbHNlKQ0KCQl7DQoJCQlpZiAoJ25leHQnID09PSAkdHlwZSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6c2V0QXBwTmV4dElEKCRpZCwgJHZhbHVlKTsNCgkJCX0NCgkJCWVsc2VpZiAoJ3Rva2VuJyA9PT0gJHR5cGUpDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OnNldEFwcFRva2VucygkaWQsICR2YWx1ZSk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIHVwZGF0ZS9zZXQgdGhlIEFwcCBUb2tlbnMNCgkgKg0KCSAqIEBwYXJhbSAgIGludCAgICAgICAkaWQgICAgICAgICAgIFRoZSBJRCBvZiB0aGUgbG9jYWwgQVBQDQoJICogQHBhcmFtICAgYXJyYXkgICAkdG9rZW5zICAgIFRoZSBuZXcgdG9rZW5zDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QXBwVG9rZW5zKCRpZCwgJiR0b2tlbnMpDQoJew0KCQkvLyBjaGVjayBpZiB0b2tlbnMgYXJlIHNldA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRva2VucykgJiYgIGlzc2V0KCR0b2tlbnNbJ2FjY2Vzc190b2tlbiddKSAmJiBpc3NldCgkdG9rZW5zWydyZWZyZXNoX3Rva2VuJ10pICYmDQoJCQlTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdG9rZW5zWydhY2Nlc3NfdG9rZW4nXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRva2Vuc1sncmVmcmVzaF90b2tlbiddKSkNCgkJew0KCQkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQkJJGJhc2lja2V5ID0gc2VsZjo6Z2V0Q3J5cHRLZXkoJ2Jhc2ljJyk7DQoJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJJGJhc2ljID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGJhc2lja2V5KTsNCgkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkkb2JqZWN0LT5pZCA9IChpbnQpICRpZDsNCgkJCSRvYmplY3QtPmFjY2Vzc190b2tlbiA9ICRiYXNpYy0+ZW5jcnlwdFN0cmluZygkdG9rZW5zWydhY2Nlc3NfdG9rZW4nXSk7DQoJCQkkb2JqZWN0LT5yZWZyZXNoX3Rva2VuID0gJGJhc2ljLT5lbmNyeXB0U3RyaW5nKCR0b2tlbnNbJ3JlZnJlc2hfdG9rZW4nXSk7DQoJCQkvLyBVcGRhdGUgQVBQIFRPS0VOUyB1c2luZyBpZCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQlyZXR1cm4gRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX2NvbnN0YW50X2NvbnRhY3QnLCAkb2JqZWN0LCAnaWQnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogdXBkYXRlL3NldCB0aGUgQXBwIE5leHQgSUQNCgkgKg0KCSAqIEBwYXJhbSAgIGludCAgICAgICAkaWQgICAgICAgICAgIFRoZSBJRCBvZiB0aGUgbG9jYWwgQVBQDQoJICogQHBhcmFtICAgaW50ICAgICAgICRuZXh0ICAgICAgIFRoZSBuZXh0IGlkIHRvIHN0YXJ0IHdpdGgNCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRBcHBOZXh0SUQoJGlkLCAmJG5leHQpDQoJew0KCQlpZiAoaXNfbnVtZXJpYygkbmV4dCkpDQoJCXsNCgkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkkb2JqZWN0LT5pZCA9IChpbnQpICRpZDsNCgkJCSRvYmplY3QtPm5leHRfaWQgPSAoaW50KSAkbmV4dDsNCgkJCS8vIFVwZGF0ZSBBUFAgbmV4dF9pZCB1c2luZyBpZCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQlyZXR1cm4gRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX2NvbnN0YW50X2NvbnRhY3QnLCAkb2JqZWN0LCAnaWQnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbQ29tcG9uZW50IGltYWdlXShodHRwczovL3d3dy52ZG0uaW8vaW1hZ2VzL01ha2l0YTUwMC5qcGcgIlRoZSBNYWtpdGEgQ29tcG9uZW50IikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Contact Details', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9zeW5jYCAoDQoJYGFwcGAgSU5UKDExKSBOT1QgTlVMTCwNCglgY29udGFjdGAgSU5UKDExKSBOT1QgTlVMTCwNCglgbW9kaWZpZWRgIERBVEVUSU1FIE5PVCBOVUxMIERFRkFVTFQgJzAwMDAtMDAtMDAgMDA6MDA6MDAnLA0KCVBSSU1BUlkgS0VZIChgYXBwYCwgYGNvbnRhY3RgKQ0KKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0IERFRkFVTFQgQ09MTEFURT11dGY4bWI0X3VuaWNvZGVfY2k7', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9zeW5jYDs=', 'Contact Details (mymakita)', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita_contactdetails/master/update_server.xml', 'http://www.vdm.io', '', 'sGvJftIoLEAS6/R7xK/gfKEKZfTBKf1msC+mYDUfRsQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 74, '', 1, 38),
(70, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'george-media.txt', '', '', 'Vast Development Method', '1.0.1', 'Copyright (C) 2020. All Rights Reserved', '2020-06-27 20:06:25', '', 'lQRaWnxCVAXWbM3PSzpOwkwWOUTqhc42ltcwwyFr10w=', 'TWodCPpX+2hZKGepw4+/qy3E/VS17mS1mEA7yhc3rMc=', '', 'TzbmxqgmTHzpTLhbxhJ6KNTeehkYRrVG8KC1t8/eDLY=', '', '', 'A_254', 2, '', 'MyMakita Competition Details', 'joomla@vdm.io', '', '', 'W37pqjT2aYIvtmMLuunwJCCfxS00AEhMQX/451TmjYp6Vn9e2IMTYIfd3BJ15P0JY0e2Af+M8/IUvxJFfsjwNg==', '', 'c592813d-418e-4c18-b2a2-537e0a7b6d13', 'images/vdm/Makita500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&zigrarr;', '2020-07-08 03:16:16', 2, 'Competition', 'mymakita_competition', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSogY2hlY2sgaWYgdGhpcyBwcm9kdWN0IHF1YWxpZnlpbmcgaW4gYSBjb21wZXRpdGlvbiBhbmQgc2V0IGl0IGlmIGl0IGRvZXMNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFF1YWxpZnlpbmcoJiRwcm9kdWN0LCAkYnVsayA9IGZhbHNlLCAkY29tcGV0aXRpb25faWQgPSAwKQ0KCXsNCgkJaWYgKCgkY29tcGV0aXRpb25zID0gc2VsZjo6Z2V0QWN0aXZlQ29tcGV0aXRpb25zKCkpICE9PSBmYWxzZSAmJiBzZWxmOjp2YWxpZGF0ZUVudHJ5KCRwcm9kdWN0LCAkY29tcGV0aXRpb25zLCAkYnVsaykpDQoJCXsNCgkJCS8vIHN0YXJ0IGVudHJ5DQoJCQkkZW50cnkgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkkZW50cnktPmd1aWQgPSAkcHJvZHVjdC0+Z3VpZDsNCgkJCSRlbnRyeS0+bWVtYmVyID0gJHByb2R1Y3QtPm1lbWJlcjsNCgkJCSRlbnRyeS0+Y3JlYXRlZF9ieSA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+Z2V0KCdpZCcpOw0KCQkJJGVudHJ5LT5jcmVhdGVkID0gJHByb2R1Y3QtPmNyZWF0ZWQ7DQoJCQkkZW50cnktPnB1Ymxpc2hlZCA9IDE7DQoJCQkkZW50cnktPnZlcnNpb24gPSAxOw0KCQkJLy8gYnVpbGQgd2l0aCBjb21wZXRpdGlvbiBJRCBkZWFscyB3aXRoIG9uZSBjb21wZXRpdGlvbiBhdCBhIHRpbWUNCgkJCWlmICgkYnVsayAmJiAkY29tcGV0aXRpb25faWQgPiAwKQ0KCQkJew0KCQkJCXNlbGY6OnN0b3JlQ29tcGV0aXRpb25FbnRyeSgkZW50cnksICRjb21wZXRpdGlvbl9pZCwgJGJ1bGspOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHN0b3JlIHRoZSBlbnRyaWVzIHRvIGFsbCBjb21wZXRpdGlvbnMNCgkJCQlmb3JlYWNoICgkY29tcGV0aXRpb25zIGFzICRjb21wZXRpdGlvbikNCgkJCQl7DQoJCQkJCXNlbGY6OnN0b3JlQ29tcGV0aXRpb25FbnRyeSgkZW50cnksICRjb21wZXRpdGlvbi0+aWQpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSogY2hlY2sgaWYgdGhpcyBwcm9kdWN0IHF1YWxpZnlpbmcgaW4gYSBjb21wZXRpdGlvbiBhbmQgc2V0IGl0IGlmIGl0IGRvZXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHN0b3JlQ29tcGV0aXRpb25FbnRyeSgmJGVudHJ5LCAmJGNvbXBldGl0aW9uX2lkLCAkYnVsayA9IGZhbHNlKQ0KCXsNCgkJLy8gdXBkYXRlIGVudHJ5DQoJCSRlbnRyeS0+Y29tcGV0aXRpb24gPSAkY29tcGV0aXRpb25faWQ7DQoJCS8vIGluc2VydCBlbnRyeQ0KCQlGYWN0b3J5OjpnZXREYm8oKS0+aW5zZXJ0T2JqZWN0KA0KCQkJJyNfX1tbW2NvbXBvbmVudF1dXV9lbnRyeScsICRlbnRyeQ0KCQkpOw0KCQkvLyBkbyBub3Qgc2V0IHNlc3Npb24gaWYgd2UgaGF2ZSBidWxrIHVwZGF0ZSBydW5uaW5nDQoJCWlmICghJGJ1bGspDQoJCXsNCgkJCS8vIHNldCB0cnVlIHRvIHNob3cgbm90aWNlIGluIHRoaXMgc2Vzc2lvbg0KCQkJJGtleSA9ICRlbnRyeS0+Y29tcGV0aXRpb24gLiAnX3ZkbV9tYWtpdGFfJyAuICRlbnRyeS0+bWVtYmVyOw0KCQkJc2VsZjo6c2V0KCRrZXksIDEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogVG8gVmFsaWRhdGUgdGhlIEVudHJ5DQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZUVudHJ5KCYkcHJvZHVjdCwgJiRjb21wZXRpdGlvbnMsICRidWxrKQ0KCXsNCgkJLy8gYnVsayBoYXMgYWxyZWFkeSBzZXQgdGhlIHByb2R1Y3QgZGV0YWlscyBhbmQgdmFsaWRhdGVkIHRoYXQgdGhleSBhcmUgdmFsaWQNCgkJaWYgKCRidWxrIHx8ICgoJHBfZGV0YWlscyA9IHNlbGY6OmdldFByb2R1Y3REZXRhaWxzKCRwcm9kdWN0LT5wcm9kdWN0KSkgIT09IGZhbHNlICYmDQoJCQkkcF9kZXRhaWxzLT5leHRlbmRlZCA9PSAxICYmICRwX2RldGFpbHMtPnR5cGUgPT0gMSkpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHRoZSBwcm9kdWN0IGludm9pY2UgZGF0ZSBmYWxscyB3aXRoaW4gdGhlIGNvbXBldGl0aW9ucyBkYXRlcw0KCQkJaWYgKCRidWxrIHx8IHNlbGY6OnZhbGlkYXRlSW52b2ljZURhdGUoJHByb2R1Y3QsICRjb21wZXRpdGlvbnMpKQ0KCQkJew0KCQkJCS8vIGxvYWQgZGV0YWlscyB0byBwcm9kdWN0DQoJCQkJaWYgKCEkYnVsaykNCgkJCQl7DQoJCQkJCSRwcm9kdWN0LT50eXBlID0gJHBfZGV0YWlscy0+dHlwZTsNCgkJCQkJJHByb2R1Y3QtPmV4dGVuZGVkID0gJHBfZGV0YWlscy0+ZXh0ZW5kZWQ7DQoJCQkJCSRwcm9kdWN0LT53YXJyYW50eSA9ICRwX2RldGFpbHMtPndhcnJhbnR5Ow0KCQkJCX0NCgkJCQkkd2FycmFudHkgPSBzZWxmOjpnZXRXYXJyYW50eURldGFpbHMoJHByb2R1Y3QpOw0KCQkJCS8vIG9ubHkgcXVhbGlmeSBpZiBhY3RpdmUgZXh0ZW5kZWQgd2FycmFudHkgYW5kIGhhcyBuZXZlciBiZWVuIGVudGVyZWQgd2l0aCAoKHRoaXMgcHJvZHVjdCkpIGluIGFueSBwcmV2aW91cyBjb21wZXRpdGlvbnMuDQoJCQkJaWYgKCR3YXJyYW50eVsnYWN0aXZlJ10gPT0gMSAmJiAkd2FycmFudHlbJ3F1YWxpZnknXSAmJiAoJGJ1bGsgfHwgKCRleGlzdCA9IHNlbGY6OmdldFZhcignZW50cnknLCAkcHJvZHVjdC0+Z3VpZCwgJ2d1aWQnLCAnaWQnKSkgPT09IGZhbHNlKSkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogVG8gVmFsaWRhdGUgdGhlIEludm9pY2UgRGF0ZQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVJbnZvaWNlRGF0ZSgmJHByb2R1Y3QsICYkY29tcGV0aXRpb25zKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBwcm9kdWN0IGludm9pY2UgcXVhbGlmeQ0KCQlmb3JlYWNoICgkY29tcGV0aXRpb25zIGFzICRuciA9PiAkY29tcGV0aXRpb24pDQoJCXsNCgkJCS8vIGNoZWNrIGlmIGludm9pY2UgZGF0ZSBpcyBvbGRlciB0aGVuIHN0YXJ0IGRhdGUgb2YgY29tcGV0aXRpb24NCgkJCWlmICgoaW50KSAkcHJvZHVjdC0+aW52b2ljZV9kYXRlIDwgKGludCkgJGNvbXBldGl0aW9uLT5zdGFydCkNCgkJCXsNCgkJCQkvLyByZW1vdmUgY29tcGV0aXRpb25zIHRvIHdoaWNoIHRoZSBwcm9kdWN0IGRvZXMgbm90IHF1YWxpZnkNCgkJCQl1bnNldCgkY29tcGV0aXRpb25zWyRucl0pOw0KCQkJfQ0KCQl9DQoJCS8vIG5vdyBjaGVjayBpZiB3ZSBoYXZlIGFueSBjb21wZXRpdGlvbnMgbGVmdA0KCQlyZXR1cm4gU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBldGl0aW9ucyk7DQoJfQ0KDQoJLyoqDQoJICogQWN0aXZlIENvbXBldGl0aW9ucyANCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljICRhY3RpdmVDb21wZXRpdGlvbnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogR2V0IEFjdGl2ZSBDb21wZXRpdGlvbnMgDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBY3RpdmVDb21wZXRpdGlvbnMoJG1lbWJlciA9IDAsICRjb21wID0gMCkNCgl7DQoJCSRrZXkgPSAkbWVtYmVyIC4gJ18nIC4gJGNvbXA7DQoJCS8vIGNoZWNrIGlmIHdlIGFscmVhZHkgc2V0IHRoaXMNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokYWN0aXZlQ29tcGV0aXRpb25zWyRrZXldKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiBBdXN0cmFsaWENCgkJCWRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0F1c3RyYWxpYS9TeWRuZXknKTsNCgkJCS8vIGdldCBkYXRhYmFzZSBvYmplY3QNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gY2hlY2sgaWYgbWVtYmVyIHdhcyBhZGRlZA0KCQkJaWYgKCRtZW1iZXIgPiAwKQ0KCQkJew0KCQkJCS8vIGdldCBhbGwgaXRlbSBpZHMgb2YgZW50cmllcyB0aGF0IGJlbG9uZyB0byB0aGlzIG1lbWJlcg0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSkNCgkJCQkJLT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2EuZ3VpZCcsICdjLmlkJykpKQ0KCQkJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9lbnRyeScsICdhJykpOw0KCQkJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvbXBldGl0aW9uJywgJ2MnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuY29tcGV0aXRpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2MuaWQnKSAuICcpJyk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYy5zdGFydCcpIC4gJyA8PSAnIC4gKGludCkgdGltZSgpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdjLmVuZCcpIC4gJyA+PSAnIC4gKGludCkgdGltZSgpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLm1lbWJlcicpIC4gJyA9ICcgLiAoaW50KSAkbWVtYmVyKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdjLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJCX0NCgkJCWVsc2VpZiAoJGNvbXAgPiAwKQ0KCQkJew0KCQkJCS8vIGdldCBhbGwgaXRlbSBkZXRhaWxzIG9mIHRoaXMgY29tcGV0aXRpb24NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpDQoJCQkJCS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCQkJYXJyYXkoJ25hbWUnLCAnc3RhcnQnLCAnZW5kJywgJ2NvbXBldGl0aW9uc19ub3RpY2VfdGVtcGxhdGUnLCAnY29tcGV0aXRpb25zX3RlbXBsYXRlJyksDQoJCQkJCQlhcnJheSgnY29tcGV0aXRpb25fbmFtZScsICdjb21wZXRpdGlvbl9zdGFydF9kYXRlJywgJ2NvbXBldGl0aW9uX2VuZF9kYXRlJywgJ25vdGljZV90ZW1wbGF0ZScsICdjb21wZXRpdGlvbnNfdGVtcGxhdGUnKQ0KCQkJCQkpKQ0KCQkJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb21wZXRpdGlvbicpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcgLiAoaW50KSAkY29tcCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gZ2V0IGFsbCBjb21wZXRpdGlvbnMgdGhhdCBhcmUgYWN0aXZlDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKQ0KCQkJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAnbmFtZScsICdzdGFydCcsICdlbmQnLCAnY29tcGV0aXRpb25zX25vdGljZV90ZW1wbGF0ZScpKSkNCgkJCQkJLT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY29tcGV0aXRpb24nKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc3RhcnQnKSAuICcgPD0gJyAuIChpbnQpIHRpbWUoKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZW5kJykgLiAnID49ICcgLiAoaW50KSB0aW1lKCkpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJCX0NCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KS0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCS8vIHN0b3JlIGZvciBsYXRlcg0KCQkJCWlmICgkY29tcCA+IDApDQoJCQkJew0KCQkJCQlzZWxmOjokYWN0aXZlQ29tcGV0aXRpb25zWyRrZXldID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiRhY3RpdmVDb21wZXRpdGlvbnNbJGtleV0gPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkJfQ0KCQkJCS8vIGp1c3QgcmV0dXJuIGZvdW5kIGNvbXBldGl0aW9ucyANCgkJCQlyZXR1cm4gc2VsZjo6JGFjdGl2ZUNvbXBldGl0aW9uc1ska2V5XTsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGFjdGl2ZUNvbXBldGl0aW9uc1ska2V5XTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgUHJvZHVjdCBEZXRhaWwNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFjdGl2ZUNvbXBldGl0aW9uc01lc3NhZ2VzKCYkbWVtYmVyKQ0KCXsNCgkJaWYgKCRtZW1iZXIgJiYgKCRjb21wZXRpdGlvbnMgPSBzZWxmOjpnZXRBY3RpdmVDb21wZXRpdGlvbnMoJG1lbWJlci0+aWQpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCS8vIGdldCBjb21wZXRpdGlvbiBkZXRhaWxzDQoJCQkkX2NvbXBldGl0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkY29tcGV0aXRpb25zIGFzICRjb21wZXRpdGlvbikNCgkJCXsNCgkJCQlpZiAoIWlzc2V0KCRfY29tcGV0aXRpb25zWyRjb21wZXRpdGlvbi0+aWRdKSkNCgkJCQl7DQoJCQkJCS8vIGdldCBjb21wZXRpdGlvbiBkZXRhaWxzDQoJCQkJCSRfY29tcGV0aXRpb25zWyRjb21wZXRpdGlvbi0+aWRdID0gc2VsZjo6Z2V0QWN0aXZlQ29tcGV0aXRpb25zKDAsICRjb21wZXRpdGlvbi0+aWQpOw0KCQkJCQkvLyBhZGQgY291bnRlcg0KCQkJCQkkX2NvbXBldGl0aW9uc1skY29tcGV0aXRpb24tPmlkXS0+bnVtYmVyX29mX3Byb2R1Y3RzX2VudGVyZWQgPSAxOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkX2NvbXBldGl0aW9uc1skY29tcGV0aXRpb24tPmlkXS0+bnVtYmVyX29mX3Byb2R1Y3RzX2VudGVyZWQrKzsNCgkJCQl9DQoJCQl9DQoJCQl1bnNldCgkY29tcGV0aXRpb25zKTsNCgkJCXVuc2V0KCRjb21wZXRpdGlvbik7DQoJCQkvLyBzZXQgYmFzZSBwbGFjZWhvbGRlcnMNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCdbZnVsbF9uYW1lXScgPT4gJG1lbWJlci0+ZnVsbF9uYW1lLCAnW25hbWVdJyA9PiAkbWVtYmVyLT5uYW1lLCAnW3N1cm5hbWVdJyA9PiAkbWVtYmVyLT5zdXJuYW1lKTsNCgkJCS8vIG5vdyBidWlsZCB0aGUgbWVzc2FnZXMNCgkJCSRtZW1iZXItPmNvbXBldGl0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkX2NvbXBldGl0aW9ucyBhcyAkaWQgPT4gJGNvbXBldGl0aW9uKQ0KCQkJew0KCQkJCSRwbGFjZWhvbGRlclsnW251bWJlcl9vZl9wcm9kdWN0c19lbnRlcmVkXSddID0gJGNvbXBldGl0aW9uLT5udW1iZXJfb2ZfcHJvZHVjdHNfZW50ZXJlZDsNCgkJCQkkcGxhY2Vob2xkZXJbJ1tjb21wZXRpdGlvbl9lbmRfZGF0ZV0nXSA9ICRjb21wZXRpdGlvbi0+Y29tcGV0aXRpb25fZW5kX2RhdGU7DQoJCQkJJHBsYWNlaG9sZGVyWydbY29tcGV0aXRpb25fc3RhcnRfZGF0ZV0nXSA9ICRjb21wZXRpdGlvbi0+Y29tcGV0aXRpb25fc3RhcnRfZGF0ZTsNCgkJCQkkcGxhY2Vob2xkZXJbJ1tjb21wZXRpdGlvbl9uYW1lXSddID0gJGNvbXBldGl0aW9uLT5jb21wZXRpdGlvbl9uYW1lOw0KCQkJCS8vIHNldCBrZXkNCgkJCQkka2V5ID0gJGlkIC4gJ192ZG1fbWFraXRhXycgLiAkbWVtYmVyLT5pZDsNCgkJCQkvLyBhZGQgdGhlIHByb2ZpbGUgbm90aWNlDQoJCQkJJG1lbWJlci0+Y29tcGV0aXRpb25zWyRpZF0gPSBhcnJheSgnY29tcGV0aXRpb25zX3RlbXBsYXRlJyA9PiB0cmltKHNlbGY6OnNldER5bmFtaWNEYXRhKCRjb21wZXRpdGlvbi0+Y29tcGV0aXRpb25zX3RlbXBsYXRlLCAkcGxhY2Vob2xkZXIpKSk7DQoJCQkJLy8gaXMgdGhlIG5vdGljZSBzdGlsbCBhY3RpdmUNCgkJCQlpZiAoc2VsZjo6Z2V0KCRrZXkpID09IDEpDQoJCQkJew0KCQkJCQkkbWVtYmVyLT5jb21wZXRpdGlvbnNbJGlkXVsnbm90aWNlX3RlbXBsYXRlJ10gPSB0cmltKHNlbGY6OnNldER5bmFtaWNEYXRhKCRjb21wZXRpdGlvbi0+bm90aWNlX3RlbXBsYXRlLCAkcGxhY2Vob2xkZXIpKTsNCgkJCQl9DQoJCQkJLy8gbWFrZSBzdXJlIHRoZSBub3RpY2UgaXMgbm90IGFkZGVkIGFnYWluDQoJCQkJc2VsZjo6c2V0KCRrZXksIG51bGwpOw0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBQcm9kdWN0IERldGFpbA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvZHVjdERldGFpbHMoJiRjb2RlKQ0KCXsNCgkJLy8gZ2V0IGRhdGFiYXNlIG9iamVjdA0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gZ2V0IGFsbCBpdGVtIGlkcyBvZiBFbnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlcg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpDQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgndHlwZScsJ3dhcnJhbnR5JywnZXh0ZW5kZWQnKSkpDQoJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW3Byb2R1Y3RzXV1dX3Byb2R1Y3QnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2NvZGUnKSAuICcgPSAnIC4gICRkYi0+cXVvdGUoJGNvZGUpKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZE9iamVjdCgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFdhcnJhbnR5RGV0YWlscygmJHByb2R1Y3QsICRhZGRfbGluayA9IGZhbHNlKQ0KCXsNCgkJaWYgKCgkaGVscGVyQ2xhc3MgPSBzZWxmOjpnZXRIZWxwZXJDbGFzcygnW1tbcHJvZHVjdHNdXV0nKSkgIT09IGZhbHNlICYmIG1ldGhvZF9leGlzdHMoJGhlbHBlckNsYXNzLCAnZ2V0V2FycmFudHlEZXRhaWxzJykpDQoJCXsNCgkJCXJldHVybiAkaGVscGVyQ2xhc3M6OmdldFdhcnJhbnR5RGV0YWlscygkcHJvZHVjdCwgJGFkZF9saW5rKTsNCgkJfQ0KCX0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJOYW1lXQ0KW0NVU1RPTUNPREU9Z2V0SGVscGVyQ2xhc3NdDQpbQ1VTVE9NQ09ERT1jYW5BY2Nlc3NNZW1iZXJEYXRhXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbQ29tcG9uZW50IGltYWdlXShodHRwczovL3d3dy52ZG0uaW8vaW1hZ2VzL01ha2l0YTUwMC5qcGcgIlRoZSBNYWtpdGEgQ29tcG9uZW50IikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Competition Details', '', '', 'Competition (mymakita)', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita_contactdetails/master/update_server.xml', 'http://www.vdm.io', '', '7zJ8lOdXDPAFp/EDYMkNaR2ykAAlesgeWbBdcvgecoY=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 50, '', 1, 39),
(71, 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, '', '{}', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Vast Development Method', '1.0.0', 'Copyright (C) 2020. All Rights Reserved', '2020-07-03 13:47:05', 1, 'NEe9OpwGlAPGqu8E+I9+15yDDexd+CY6BbIAQmwCaZs=', '9l7XznNOXO4eJo09NW06SeHHmSUdz56Aikwt+K93qto=', '', '6l6dpiHO0txj5F0mec0GrzEKvtDRaCkllWeBXz99XTQ=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', 'A_252', 2, '', 'The tradeshow member manager that integrates with other components in Joomla, and the Joomla user suite.', 'joomla@vdm.io', '', '', 'obfWNiZGHzltZ5e+DYOTW5DtDS28vo4Q2s3aRO27LEjXk+FoFUdpPPA2go+he8S2kWlTYw+N9VkznCycTUjAPA==', '', '4962adb3-5e1e-4335-bb03-9cb11c9614eb', 'images/vdm/INTER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&oast;', '2021-03-08 03:18:38', 2, 'Trade Show', 'tradeshow', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSogdGhlIGJ1dHRvbiBuYW1lcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGJ1dHRvbk5hbWVzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogdGhlIG9wZW5lcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG9wZW5lcjsNCg0KCS8qKg0KCSogdGhlIHJldHVybiBoZXJlIHBhdGgNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXR1cm5faGVyZTsNCg0KCS8qKg0KCSogc2V0IGltYWdlIEhUTUwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldEltYWdlSFRNTCgkb2JqZWN0KQ0KCXsNCgkJcmV0dXJuICc8aW1nIHNyYz0iJyAuICRvYmplY3QtPmdldCgncHJvZmlsZV9pbWFnZV91cmwnLCAnIycpIC4gJyIgY2xhc3M9Im1lbWJlci1pbWFnZSIgYWx0PSInIC4gJG9iamVjdC0+Z2V0KCduYW1lJywgVGV4dDo6XygnTWVtYmVyJykpIC4gJyAnIC4gVGV4dDo6XygnSW1hZ2UnKSAuICciIC8+JzsNCgl9DQoNCgkvKioNCgkqIHNldCBpbWFnZSBsaW5rDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRJbWFnZUxpbmsoJGl0ZW0pDQoJew0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JG9wZW5lcikgJiYgKCRpbWFnZSA9ICRpdGVtLT5nZXQoJ3Byb2ZpbGVfaW1hZ2UnLCBmYWxzZSkpICE9PSBmYWxzZSAmJiAhaXNfbnVtZXJpYygkaW1hZ2UpICYmICRpbWFnZSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRpbWFnZSwgdHJ1ZSkpKQ0KCQl7DQoJCQkvLyBub3cgdW5sb2NrDQoJCQkkaXRlbS0+c2V0KCdwcm9maWxlX2ltYWdlJywgcnRyaW0oc2VsZjo6JG9wZW5lci0+ZGVjcnlwdFN0cmluZygkaW1hZ2UpLCAiXDAiKSk7DQoJCX0NCgkJLy8gZ2V0IGxpbmsNCgkJcmV0dXJuIHNlbGY6OmdldEltYWdlTGluaygkaXRlbSwgJ3Byb2ZpbGVfaW1hZ2UnLCAnbmFtZScsIG51bGwsIGZhbHNlKTsNCgl9DQoNCgkvKioNCgkqIHNldCBtZW1iZXIgZWRpdCB1cmwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE1lbWJlckVkaXRVUkwoJGl0ZW0pDQoJew0KCQlpZiAoc2VsZjo6Y2FuQWNjZXNzTWVtYmVyKCRpdGVtLT5nZXQoJ2lkJywgMCkpICYmICgkdXJsID0gc2VsZjo6Z2V0RWRpdFVSTCgkaXRlbSwgJ21lbWJlcicsICdtZW1iZXJzJywgJyZyZXR1cm49JyAuIHNlbGY6OiRyZXR1cm5faGVyZSkpICE9PSBmYWxzZSkNCgkJew0KCQkJcmV0dXJuICR1cmw7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCS8qKg0KCSogc2V0IHByb2ZpbGUgbGluaw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0UHJvZmlsZUxpbmsoJG9iamVjdCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gb25seSBsb2FkIGxpbmsgaWYgb3BlbiB0byBwdWJsaWMgb3IgaGFzIGFjY2Vzcw0KCQlpZiAoMiA9PSBzZWxmOjokcGFyYW1zLT5nZXQoJ2xvZ2luX3JlcXVpcmVkJywgMSkgfHwgc2VsZjo6Y2FuQWNjZXNzTWVtYmVyKCRvYmplY3QtPmdldCgnaWQnLCAwKSkpDQoJCXsNCgkJCXJldHVybiBKb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XygnaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnZpZXc9cHJvZmlsZSZpZD0nLiAkb2JqZWN0LT5nZXQoJ2lkJykgLiAnOicgLiAkb2JqZWN0LT5nZXQoJ3Rva2VuJykgLiAnJnJldHVybj0nIC4gc2VsZjo6JHJldHVybl9oZXJlKTsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgbWVtYmVyIG5hbWUNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE1lbWJlck5hbWUoJG9iamVjdCkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBjcmVhdGVkIGJ5IG9yIG1vZGlmaWVkIGJ5DQoJCWlmICgoJHVzZXIgPSAkb2JqZWN0LT5nZXQoJ2NyZWF0ZWRfYnknLCBmYWxzZSkpICE9PSBmYWxzZSB8fCAoJHVzZXIgPSAkb2JqZWN0LT5nZXQoJ21vZGlmaWVkX2J5JywgZmFsc2UpKSAhPT0gZmFsc2UgKQ0KCQl7DQoJCQkkb2JqZWN0LT5zZXQoJ3VzZXInLCAkdXNlcik7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OmdldE1lbWJlck5hbWUoJG9iamVjdC0+Z2V0KCdpZCcsIG51bGwpLCAkb2JqZWN0LT5nZXQoJ3VzZXInLCBudWxsKSwgJG9iamVjdC0+Z2V0KCduYW1lJywgbnVsbCksICRvYmplY3QtPmdldCgnc3VybmFtZScsIG51bGwpKTsNCgl9DQoNCgkvKioNCgkqIHNldCBtZW1iZXIgZW1haWwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE1lbWJlckVtYWlsKCRvYmplY3QpDQoJew0KCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgY3JlYXRlZCBieSBvciBtb2RpZmllZCBieQ0KCQlpZiAoKCR1c2VyID0gJG9iamVjdC0+Z2V0KCdjcmVhdGVkX2J5JywgZmFsc2UpKSAhPT0gZmFsc2UgfHwgKCR1c2VyID0gJG9iamVjdC0+Z2V0KCdtb2RpZmllZF9ieScsIGZhbHNlKSkgIT09IGZhbHNlICkNCgkJew0KCQkJJG9iamVjdC0+c2V0KCd1c2VyJywgJHVzZXIpOw0KCQl9DQoJCXJldHVybiBzZWxmOjpnZXRNZW1iZXJFbWFpbCgkb2JqZWN0LT5nZXQoJ2lkJywgbnVsbCksICRvYmplY3QtPmdldCgndXNlcicsIG51bGwpLCAkb2JqZWN0LT5nZXQoJ2VtYWlsJywgbnVsbCkpOw0KCX0NCg0KCS8qKg0KCSogc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBub3RpbmcgZm9yIG5vdw0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkqIGdldCBidXR0b24gbmFtZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QnV0dG9uTmFtZSgkdHlwZSwgJGRlZmF1bHQpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRidXR0b25OYW1lc1skdHlwZV0pKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJCXsNCgkJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBidXR0b24gbmFtZQ0KCQkJc2VsZjo6JGJ1dHRvbk5hbWVzWyR0eXBlXSA9IHNlbGY6OiRwYXJhbXMtPmdldCgnYnV0dG9uXycuICR0eXBlIC4gJ19uYW1lJywgJGRlZmF1bHQpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokYnV0dG9uTmFtZXNbJHR5cGVdOw0KCX0NCg0KCS8qKg0KCSogcmVtb3ZlIGFsbCBncm91cHMgdGhhdCBhcmUgcGFydCBvZiB0YXJnZXQgZ3JvdXBzIGluIHRoZSBtZW1iZXIgdHlwZXMNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbW92ZU1lbWJlckdyb3VwcygmJGdyb3VwcykNCgl7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZ3JvdXBzKSkNCgkJew0KCQkJLy8gZ2V0IGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2EuaWQnKSk7DQoJCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV90eXBlIEFTIGEnKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJLy8gZ2V0IGFsbCB0eXBlcw0KCQkJJHR5cGVzID0gJGRiLT5sb2FkQ29sdW1uKCk7DQoJCQkvLyBub3cgZ2V0IGFsbCB0YXJnZXQgZ3JvdXBzDQoJCQkkZ3JvdXBzX3RhcmdldCA9IHNlbGY6OmdldE1lbWJlckdyb3Vwc0J5VHlwZSgkdHlwZXMsICdncm91cHNfdGFyZ2V0Jyk7DQoJCQkvLyBub3cgdXBkYXRlIHRoZSBncm91cHMNCgkJCSRncm91cHMgPSBhcnJheV9kaWZmKCRncm91cHMsICRncm91cHNfdGFyZ2V0KTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSogZ2V0IHRoZSByZWdpc3RyYXRpb24gZm9ybQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Rm9ybXMoJHRhcmdldHMpDQoJew0KCQkvLyBnZXQgdGhlIGFwcCBvYmplY3QNCgkJJGFwcCA9IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCk7DQoJCS8vIGdldCBsYW5ndWFnZSBvYmplY3QNCgkJJGxhbmcgPSBGYWN0b3J5OjpnZXRMYW5ndWFnZSgpOw0KCQkvLyBzdGFydCBmb3JtcyBhcnJheQ0KCQkkZm9ybXM9IGFycmF5KCk7DQoJCS8vIGxvYWQgdGhlIHNjcmlwdHMgYWxzbw0KCQkkc2NyaXB0ID0gYXJyYXkoKTsNCgkJLy8gc2V0IHRoZSBmb3Jtcw0KCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAkZGV0YWlsKQ0KCQl7DQoJCQkvLyBnZXQgZGF0YSBmcm9tIHNlc3Npb24NCgkJCSRkYXRhID0gJGFwcC0+Z2V0VXNlclN0YXRlKCRkZXRhaWxbJ2NvbV8nXSAuICcuZWRpdC4nIC4gJGRldGFpbFsndGFibGUnXSAuICcuZGF0YScsIG51bGwpOw0KCQkJLy8gZ2V0IHRoZSBmb3JtDQoJCQkkZm9ybXNbJGRldGFpbFsnY29tJ11dID0gc2VsZjo6Z2V0TWVtYmVyRm9ybXMoMCwgJGRldGFpbFsnY29tXyddLCAkZGV0YWlsWyd0YWJsZSddLCAkZGF0YSwgdHJ1ZSwgJGRldGFpbFsnY29udHJvbCddKTsNCgkJCS8vIHdlIG11c3QgYWxzbyBnZXQgdGhlIHNjcmlwdHMNCgkJCS8vIHRyeSB0byBsb2FkIHRoZSB0cmFuc2xhdGlvbg0KCQkJJGxhbmctPmxvYWQoJGRldGFpbFsnY29tXyddLCBKUEFUSF9BRE1JTklTVFJBVE9SLCBudWxsLCBmYWxzZSwgdHJ1ZSk7DQoJCQkvLyBnZXQgdGhlIHNjcmlwdHMNCgkJCXNlbGY6OmdldEZpZWxkc1NjcmlwdCgkZGV0YWlsWydjb21fJ10sICRzY3JpcHQpOw0KCQl9DQoJCS8vIHRyeSBzb21lIHBsdWdpbiBsYW5ndWVzDQoJCSRsYW5nLT5sb2FkKCdwbGdfdXNlcl90ZXJtcycsIEpQQVRIX0FETUlOSVNUUkFUT1IsIG51bGwsIGZhbHNlLCB0cnVlKTsNCgkJLy8gbm93IGFkZCB0aGUgc2NyaXB0cyBpZiBmb3VuZA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNjcmlwdCkpDQoJCXsNCgkJCUZhY3Rvcnk6OmdldERvY3VtZW50KCktPmFkZFNjcmlwdERlY2xhcmF0aW9uKGltcGxvZGUoIlxuIiwgJHNjcmlwdCkpOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgZm9ybXMNCgkJcmV0dXJuICRmb3JtczsNCgl9DQoNCgkvKioNCgkqIHVwZGF0ZSB0aGUgdHlwZSBtYXAsIGZvciBxdWljayBzZWFyY2gNCgkgKg0KCSAqIEBwYXJhbSAgIGludCAgICRtZW1iZXIgICAgIFRoZSBtZW1iZXIgSUQNCgkgKiBAcGFyYW0gICBzdHJpbmcvYXJyYXkgICAkdHlwZXMgICAgIFRoZSB0eXBlcw0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZVR5cGVzKCYkbWVtYmVyLCAkdHlwZXMgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHRoZSBhcHAgb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkvLyBnZXQgZGF0YWJhc2Ugb2JqZWN0DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkvLyBkZWxldGUgYWxsIHR5cGVzIHRoZSBhcmUgbGlua2VkIHRvIHRoaXMgbWVtYmVyDQoJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCSAgICAkZGItPnF1b3RlTmFtZSgnbWVtYmVyJykgLiAnID0gJyAuIChpbnQpICRtZW1iZXINCgkJKTsNCgkJJHF1ZXJ5LT5kZWxldGUoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcCcpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkY29uZGl0aW9ucyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCS8vIG5vdyBzZXQgdGhlIG5ldyB2YWx1ZXMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0eXBlcykpDQoJCXsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJLy8gSW5zZXJ0IGNvbHVtbnMuDQoJCQkkY29sdW1ucyA9IGFycmF5KCdtZW1iZXInLCAndHlwZScpOw0KCQkJLy8gYnVpbGQgaW5zZXJ0IHF1ZXJ5DQoJCQkkcXVlcnktPmluc2VydCgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3R5cGVfbWFwJykpOw0KCQkJJHF1ZXJ5LT5jb2x1bW5zKCRkYi0+cXVvdGVOYW1lKCRjb2x1bW5zKSk7DQoJCQkvLyBidWlsZCB0aGUgdmFsdWVzDQoJCQlmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpDQoJCQl7DQoJCQkJICRxdWVyeS0+dmFsdWVzKChpbnQpICRtZW1iZXIgLiAnLCcgLiAoaW50KSAkdHlwZSk7DQoJCQl9DQoJCQkvLyBTZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0IGFuZCBleGVjdXRlIGl0Lg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBzYXZlIHRoZSBkeW5hbWljIHZhbHVlcw0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRhdGUgICAgIFRoZSBtYWluIERhdGENCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdmlldyAgICAgVGhlIHZpZXcgbmFtZQ0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdmVEeW5hbWljVmFsdWVzKCYkZGF0YSwgJHZpZXcgPSAnbWVtYmVyJykNCgl7DQoJCS8vIGdldCBhbGwgdGhlIGF2YWlsYWJsZSBjb21wb25lbnQgY2FsbGluZyBtZXRvZHMNCgkJJGNsYXNzID0gbmV3IFJlZmxlY3Rpb25DbGFzcygnW1tbQ29tcG9uZW50XV1dSGVscGVyJyk7DQoJCSRtZXRob2RzID0gYXJyYXlfZmlsdGVyKCRjbGFzcy0+Z2V0TWV0aG9kcyhSZWZsZWN0aW9uTWV0aG9kOjpJU19QVUJMSUMpLA0KCQkJZnVuY3Rpb24gKCRtZXRob2QpIHsNCgkJCQlpZiAoc3RycG9zKCRtZXRob2QtPm5hbWUsICdnZXQnKSAhPT0gZmFsc2UgJiYgc3RycG9zKCRtZXRob2QtPm5hbWUsICdBdmFpbGxhYmxlJykgIT09IGZhbHNlICkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCSk7DQoJCS8vIHNldCB0eXBlIGlmIG5vdCBzZXQNCgkJaWYgKCFpc3NldCgkZGF0YVsndHlwZSddKSAmJiAkdmlldyA9PSAnbWVtYmVyJykNCgkJew0KCQkJJGRhdGFbJ3R5cGUnXSA9IHNlbGY6OmdldFZhcigkdmlldywgJGRhdGFbJ2lkJ10sICdpZCcsICd0eXBlJyk7DQoJCX0NCgkJLy8gc2V0IGFjY291bnQgaWYgbm90IHNldA0KCQlpZiAoIWlzc2V0KCRkYXRhWydhY2NvdW50J10pICYmICR2aWV3ID09ICdtZW1iZXInKQ0KCQl7DQoJCQkkZGF0YVsnYWNjb3VudCddID0gc2VsZjo6Z2V0VmFyKCR2aWV3LCAkZGF0YVsnaWQnXSwgJ2lkJywgJ2FjY291bnQnKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIG1ldGhvZHMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRtZXRob2RzKSAmJiBpc3NldCgkZGF0YVsndHlwZSddLCAkZGF0YVsnYWNjb3VudCddKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCQl7DQoJCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgYXBwIG9iamVjdA0KCQkJJGFwcCA9IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCk7DQoJCQkvLyBnZXQgdGhlIHBvc3Qgb2JqZWN0DQoJCQkkcG9zdCA9IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmlucHV0LT5wb3N0Ow0KCQkJLy8gZ2V0IHRoZSB1c2VyIG9iamVjdA0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQkvLyBzdGFydCBsb29waW5nIHRoZSBtZXRob2RzDQoJCQlmb3JlYWNoICgkbWV0aG9kcyBhcyAkbWV0aG9kKQ0KCQkJew0KCQkJCS8vIGdldCBjb21wb25lbnRzDQoJCQkJJGNvbXBvbmVudHMgPSBzZWxmOjp7JG1ldGhvZC0+bmFtZX0oJGRhdGFbJ3R5cGUnXSwgJGRhdGFbJ2FjY291bnQnXSk7DQoJCQkJLy8gY2hlY2sgaWYgd2UgZm91bmQgY29tcG9uZW50cw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29tcG9uZW50cykpDQoJCQkJew0KCQkJCQkvLyBnZXQgYXNzZXNzbWVudCBkZXRhaWxzDQoJCQkJCWZvcmVhY2ggKCRjb21wb25lbnRzIGFzICRfbmFtZSA9PiAkY29tcCkNCgkJCQkJew0KCQkJCQkJLy8gb25seSBzYXZlIG9uZSB0byBvbmUgY29tcG9uZW50cw0KCQkJCQkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRjb21wKSAmJiBpc3NldCgkY29tcC0+ZWxlbWVudCkpDQoJCQkJCQl7DQoJCQkJCQkJJF9jb21wb25lbnQgPSAkY29tcC0+ZWxlbWVudDsNCgkJCQkJCQkkY29tcG9uZW50ID0gc3RyX3JlcGxhY2UoJ2NvbV8nLCAnJywgJF9jb21wb25lbnQpOw0KCQkJCQkJCSRDb21wb25lbnQgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRjb21wb25lbnQsICdGJyk7DQoJCQkJCQkJJENPTXBvbmVudCA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGNvbXBvbmVudCwgJ1cnKTsNCgkJCQkJCQkvLyBnZXQgdGhlIHBvc3RlZCBkYXRlIGlmIHRoZXJlIHdlcmUgYW55DQoJCQkJCQkJJF9kYXRhICA9ICRwb3N0LT5nZXQoJGNvbXBvbmVudCwgYXJyYXkoKSwgJ2FycmF5Jyk7DQoJCQkJCQkJLy8gY2hlY2sgaWYgdXNlciBhcmUgYWxsb3dlZCB0byBlZGl0IGZvcm0gdmFsdWVzIG9yIGNyZWF0ZSBmb3JtIHZhbHVlcw0KCQkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkX2RhdGEpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBsb2NhbCBwYXJhbXMNCgkJCQkJCQkJJHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJF9jb21wb25lbnQpOw0KCQkJCQkJCQkvLyBtYWtlIHN1cmUgdGhlIElEIGlzIHNldA0KCQkJCQkJCQlpZiAoIWlzc2V0KCRfZGF0YVsnaWQnXSkgfHwgIWlzX251bWVyaWMoJF9kYXRhWydpZCddKSB8fCAkX2RhdGFbJ2lkJ10gPT0gMCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJLy8gc2V0IGlkIHRvIHplcm8gYXMgdGhpcyB3aWxsIGNhdXNlIG5ldyBpdGVtIHRvIGJlIGNyZWF0ZWQNCgkJCQkJCQkJCSRfZGF0YVsnaWQnXSA9IDA7DQoJCQkJCQkJCQkvLyBzZXQgZGVmYXVsdCBhY2Nlc3MNCgkJCQkJCQkJCSRfZGF0YVsnYWNjZXNzJ10gPSAkcGFyYW1zLT5nZXQoJ2RlZmF1bHRfYWNjZXNzbGV2ZWwnLCBzZWxmOjokcGFyYW1zLT5nZXQoJ2RlZmF1bHRfYWNjZXNzbGV2ZWwnLCAxKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gY2hlY2sgaWYgdXNlciBtYXkgZWRpdA0KCQkJCQkJCQlpZiAoJF9kYXRhWydpZCddID4gMCAmJiAhJHVzZXItPmF1dGhvcmlzZSgnY29yZS5lZGl0JywgJF9jb21wb25lbnQgLiAnLmZvcm0uJyAuIChpbnQpICRfZGF0YVsnaWQnXSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vIGNoZWNrIGVkaXQgb3duDQoJCQkJCQkJCQlpZiAoKCRjcmVhdGVkX2J5ID0gc2VsZjo6Z2V0VmFyKCdmb3JtJywgJF9kYXRhWydpZCddLCAnaWQnLCAnY3JlYXRlZF9ieScsICc9JywgJGNvbXBvbmVudCkpID09PSBmYWxzZSB8fCAkY3JlYXRlZF9ieSAhPSAkdXNlci0+aWQgfHwgISR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUuZWRpdC5vd24nLCAkX2NvbXBvbmVudCkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGFwcC0+ZW5xdWV1ZU1lc3NhZ2UoVGV4dDo6c3ByaW50ZignWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gZWRpdCAlcywgcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLCAkQ09NcG9uZW50LCAkX2RhdGFbJ2lkJ10pLCAnd2FybmluZycpOw0KCQkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGNoZWNrIGlmIHVzZXIgbWF5IGNyZWF0ZQ0KCQkJCQkJCQlpZiAoJF9kYXRhWydpZCddID09IDAgJiYgISR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUuY3JlYXRlJywgJF9jb21wb25lbnQpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpzcHJpbnRmKCdZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBhZGQgZGF0YSB0byAlcywgcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLCAkQ09NcG9uZW50KSwgJ3dhcm5pbmcnKTsNCgkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgbWVtYmVyIElEIGlzIHNldCBpZiB2aWV3IGlzIG1lbWJlcg0KCQkJCQkJCQlpZiAoJ21lbWJlcicgPT09ICR2aWV3ICYmICFpc3NldCgkX2RhdGFbJHZpZXddKSB8fCAhaXNfbnVtZXJpYygkX2RhdGFbJHZpZXddKSB8fCAkX2RhdGFbJHZpZXddID09IDApDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWlmICgkX2RhdGFbJ2lkJ10gPiAwICYmICRkYXRhWydpZCddID4gMCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBnZXQgdGhlIG1lbWJlciBJRA0KCQkJCQkJCQkJCWlmICgoJG1lbWJlciA9IHNlbGY6OmdldFZhcignZm9ybScsICRfZGF0YVsnaWQnXSwgJ2lkJywgJHZpZXcsICc9JywgJGNvbXBvbmVudCkpID09PSBmYWxzZSB8fCAkbWVtYmVyICE9ICRkYXRhWydpZCddKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJGFwcC0+ZW5xdWV1ZU1lc3NhZ2UoVGV4dDo6c3ByaW50ZignTWVtYmVyIElEIG1pc21hdGNoLCAlcy0lcyBjb3VsZCBub3QgYmUgc2F2ZWQuJywgJENPTXBvbmVudCwgJF9kYXRhWydpZCddKSwgJ2Vycm9yJyk7DQoJCQkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2VpZiAoJF9kYXRhWydpZCddID4gMCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBnZXQgdGhlIG1lbWJlciBJRA0KCQkJCQkJCQkJCWlmICgoJG1lbWJlciA9IHNlbGY6OmdldFZhcignZm9ybScsICRfZGF0YVsnaWQnXSwgJ2lkJywgJHZpZXcsICc9JywgJGNvbXBvbmVudCkpID09PSBmYWxzZSB8fCAkbWVtYmVyID09IDApDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpzcHJpbnRmKCdNZW1iZXIgSUQgbWlzbWF0Y2gsICVzLSVzIGNvdWxkIG5vdCBiZSBzYXZlZC4nLCAkQ09NcG9uZW50LCAkX2RhdGFbJ2lkJ10pLCAnZXJyb3InKTsNCgkJCQkJCQkJCQkJY29udGludWU7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJZWxzZWlmICgkZGF0YVsnaWQnXSA+IDApDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gZ2V0IHRoZSBtZW1iZXIgSUQNCgkJCQkJCQkJCQkkbWVtYmVyID0gJGRhdGFbJ2lkJ107DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGFwcC0+ZW5xdWV1ZU1lc3NhZ2UoVGV4dDo6c3ByaW50ZignJXMgY291bGQgbm90IGJlIHNhdmVkLCBwbGVhc2UgdHJ5IGFnYWluLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byB0aGUgZmFjdCB0aGlzIHRoZSBtZW1iZXIgSUQgd2FzIG5vdCByZWFkeS4nLCAkQ09NcG9uZW50KSwgJ2Vycm9yJyk7DQoJCQkJCQkJCQkJY29udGludWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkvLyBzZXQgdGhlIG1lbWJlciBJRA0KCQkJCQkJCQkJJF9kYXRhWyR2aWV3XSA9ICRtZW1iZXI7DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gY2hlY2sgaWYgdGhlIGNsYXNzIGFuZCBtZXRob2QgZXhpc3QNCgkJCQkJCQkJaWYgKCgkaGVscGVyQ2xhc3MgPSBzZWxmOjpnZXRIZWxwZXJDbGFzcygkX2NvbXBvbmVudCkpID09PSBmYWxzZSB8fCAhbWV0aG9kX2V4aXN0cygkaGVscGVyQ2xhc3MsICdnZXRNb2RlbCcpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQljb250aW51ZTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBnZXQgdGhlIG1vZGVsDQoJCQkJCQkJCSRtb2RlbCA9ICRoZWxwZXJDbGFzczo6Z2V0TW9kZWwoJ2Zvcm0nLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzLycgLiAkX2NvbXBvbmVudCwgJENvbXBvbmVudCk7DQoJCQkJCQkJCS8vIGRvIHdlIGhhdmUgdGhlIG1vZGVsDQoJCQkJCQkJCWlmICgkbW9kZWwpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vIGZvcmNlIG90aGVyIGNvbXBvbmVudCBwYXRoIChUT0RPKSB3aWxsIGJlIGFuIGlzc3VlIGlmIGZvcm1zIGFuZCBmaWVsZHMgYXJlIHRoZSBzYW1lDQoJCQkJCQkJCQlcSkZvcm06OmFkZEZvcm1QYXRoKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvJyAuICRfY29tcG9uZW50IC4gJy9tb2RlbHMvZm9ybXMnKTsNCgkJCQkJCQkJCVxKRm9ybTo6YWRkRmllbGRQYXRoKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvJyAuICRfY29tcG9uZW50IC4gJy9tb2RlbHMvZmllbGRzJyk7DQoJCQkJCQkJCQkvLyBWYWxpZGF0ZSB0aGUgcG9zdGVkIGRhdGEuDQoJCQkJCQkJCQkvLyBTb21ldGltZXMgdGhlIGZvcm0gbmVlZHMgc29tZSBwb3N0ZWQgZGF0YSwgc3VjaCBhcyBmb3IgcGx1Z2lucyBhbmQgbW9kdWxlcy4NCgkJCQkJCQkJCSRmb3JtID0gJG1vZGVsLT5nZXRGb3JtKCRfZGF0YSwgZmFsc2UpOw0KCQkJCQkJCQkJaWYgKCEkZm9ybSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgkbW9kZWwtPmdldEVycm9yKCksICdlcnJvcicpOw0KCQkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gcmVtb3ZlIGFsbCBmaWVsZHMgbm90IHBhcnQgb2YgdGhlIGFsbG93ZWQgZWRpdCBmaWVsZHMNCgkJCQkJCQkJCWlmICgoJGZpZWxkcyA9ICRwYXJhbXMtPmdldCgnZWRpdF9maWVsZHMnLCBmYWxzZSkpICE9PSBmYWxzZSAmJiBTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZmllbGRzKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBidWlsZCBhIGZpZWxkcyBhcnJheSBidWNrZXQNCgkJCQkJCQkJCQkkZmllbGRBY3RpdmUgPSBhcnJheSgpOw0KCQkJCQkJCQkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJHJvdykNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSRmaWVsZEFjdGl2ZVskcm93LT5maWVsZF0gPSAkcm93LT5maWVsZDsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJLy8gc2V0IHRoZSBrZWVwIHZhbHVlcw0KCQkJCQkJCQkJCSRmaWVsZEFjdGl2ZVsnaWQnXSA9ICdpZCc7DQoJCQkJCQkJCQkJJGZpZWxkQWN0aXZlWydtZW1iZXInXSA9ICdtZW1iZXInOw0KCQkJCQkJCQkJCSRmaWVsZEFjdGl2ZVsnYXNzZXRfaWQnXSA9ICdhc3NldF9pZCc7DQoJCQkJCQkJCQkJJGZpZWxkQWN0aXZlWydjcmVhdGVkJ10gPSAnY3JlYXRlZCc7DQoJCQkJCQkJCQkJJGZpZWxkQWN0aXZlWydjcmVhdGVkX2J5J10gPSAnY3JlYXRlZF9ieSc7DQoJCQkJCQkJCQkJJGZpZWxkQWN0aXZlWydtb2RpZmllZCddID0gJ21vZGlmaWVkJzsNCgkJCQkJCQkJCQkkZmllbGRBY3RpdmVbJ21vZGlmaWVkX2J5J10gPSAnbW9kaWZpZWRfYnknOw0KCQkJCQkJCQkJCSRmaWVsZEFjdGl2ZVsnYWNjZXNzJ10gPSAnYWNjZXNzJzsNCgkJCQkJCQkJCQkkZmllbGRBY3RpdmVbJ3ZlcnNpb24nXSA9ICd2ZXJzaW9uJzsNCgkJCQkJCQkJCQkkZmllbGRBY3RpdmVbJ3J1bGVzJ10gPSAncnVsZXMnOw0KCQkJCQkJCQkJCS8vIGdldCB0aGUgZGF0YWJhc2UgY29sdW1ucyBvZiB0aGlzIHRhYmxlDQoJCQkJCQkJCQkJJGNvbHVtbnMgPSAkZGItPmdldFRhYmxlQ29sdW1ucygiI19fIiAuICRjb21wb25lbnQgLiAiX2Zvcm0iLCBmYWxzZSk7DQoJCQkJCQkJCQkJLy8gbm93IG1ha2Ugc3VyZSB0aGUgZmllbGRzIHRoYXQgYXJlIG5vdCBlZGl0YWJsZSBhcmUgcmVtb3ZlZCAoc28gY2FuJ3QgYmUgdXBkYXRlZCB2aWEgdGhpcyBmb3JtKQ0KCQkJCQkJCQkJCWZvcmVhY2goYXJyYXlfa2V5cygkY29sdW1ucykgYXMgJGZpZWxkKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJaWYgKCFpc3NldCgkZmllbGRBY3RpdmVbJGZpZWxkXSkpDQoJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCSRmb3JtLT5yZW1vdmVGaWVsZCgkZmllbGQpOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gU2VuZCBhbiBvYmplY3Qgd2hpY2ggY2FuIGJlIG1vZGlmaWVkIHRocm91Z2ggdGhlIHBsdWdpbiBldmVudA0KCQkJCQkJCQkJJG9iakRhdGEgPSAob2JqZWN0KSAkX2RhdGE7DQoJCQkJCQkJCQkkYXBwLT50cmlnZ2VyRXZlbnQoDQoJCQkJCQkJCQkJJ29uQ29udGVudE5vcm1hbGlzZVJlcXVlc3REYXRhJywNCgkJCQkJCQkJCQlhcnJheSgkX2NvbXBvbmVudCAuICcuZm9ybScsICRvYmpEYXRhLCAkZm9ybSkNCgkJCQkJCQkJCSk7DQoJCQkJCQkJCQkkX2RhdGEgPSAoYXJyYXkpICRvYmpEYXRhOw0KCQkJCQkJCQkJLy8gVGVzdCB3aGV0aGVyIHRoZSBkYXRhIGlzIHZhbGlkLg0KCQkJCQkJCQkJJHZhbGlkRGF0YSA9ICRtb2RlbC0+dmFsaWRhdGUoJGZvcm0sICRfZGF0YSk7DQoJCQkJCQkJCQkvLyBDaGVjayBmb3IgdmFsaWRhdGlvbiBlcnJvcnMuDQoJCQkJCQkJCQlpZiAoJHZhbGlkRGF0YSA9PT0gZmFsc2UpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gR2V0IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLg0KCQkJCQkJCQkJCSRlcnJvcnMgPSAkbW9kZWwtPmdldEVycm9ycygpOw0KCQkJCQkJCQkJCS8vIFB1c2ggdXAgdG8gdGhyZWUgdmFsaWRhdGlvbiBtZXNzYWdlcyBvdXQgdG8gdGhlIHVzZXIuDQoJCQkJCQkJCQkJZm9yICgkaSA9IDAsICRuID0gY291bnQoJGVycm9ycyk7ICRpIDwgJG4gJiYgJGkgPCAzOyAkaSsrKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJaWYgKCRlcnJvcnNbJGldIGluc3RhbmNlb2YgXEV4Y2VwdGlvbikNCgkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJJGFwcC0+ZW5xdWV1ZU1lc3NhZ2UoJGVycm9yc1skaV0tPmdldE1lc3NhZ2UoKSwgJ3dhcm5pbmcnKTsNCgkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCRlcnJvcnNbJGldLCAnd2FybmluZycpOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gYWx3YXlzIGxvYWQgbWVtYmVyIGJhY2sNCgkJCQkJCQkJCWlmICghaXNfbnVtZXJpYygkdmFsaWREYXRhWyR2aWV3XSkgfHwgJHZhbGlkRGF0YVskdmlld10gPT0gMCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkdmFsaWREYXRhWyR2aWV3XSA9ICRtZW1iZXI7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkvLyBBdHRlbXB0IHRvIHNhdmUgdGhlIGRhdGEuDQoJCQkJCQkJCQlpZiAoISRtb2RlbC0+c2F2ZSgkdmFsaWREYXRhKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpzcHJpbnRmKCclcyBkYXRhIGNvdWxkIG5vdCBiZSBzYXZlZCcsICRDT01wb25lbnQpLCAnZXJyb3InKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KW0NVU1RPTUNPREU9Z2V0QW55UGxhY2VIb2xkZXJzK21lbWJlcl0NCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldE1lbWJlcnNCeVR5cGVdDQpbQ1VTVE9NQ09ERT1nZXRSZWxhdGlvbnNoaXBzQnlUeXBlc10NCltDVVNUT01DT0RFPWdldFJlbGF0aW9uc2hpcHNCeU1lbWJlcl0NCltDVVNUT01DT0RFPWdldEFjY2Vzc10NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1nZXRCZXR3ZWVuXQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9YmFzZVNpeHR5Rm91clVSTF0NCltDVVNUT01DT0RFPW9wZW5WYWxpZEJhc2VTaXh0eUZvdXJdIA0KW0NVU1RPTUNPREU9bG9ja2VyXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldFRlbXBsYXRlXQ0KW0NVU1RPTUNPREU9Z2V0Rm9sZGVyUGF0aF0NCltDVVNUT01DT0RFPWltYWdlSGVscGVyc10NCltDVVNUT01DT0RFPXdyaXRlRmlsZV0NCltDVVNUT01DT0RFPWdldExpbmtPcHRpb25zXQ0KW0NVU1RPTUNPREU9Z2V0SW1hZ2VMaW5rXQ0KW0NVU1RPTUNPREU9Z2V0RWRpdEJ1dHRvbl0NCltDVVNUT01DT0RFPWdldENyZWF0ZUJ1dHRvbl0NCltDVVNUT01DT0RFPWNoZWNrVW5pcXVlXQ0KW0NVU1RPTUNPREU9Z2V0Q29tcGFueURldGFpbHNdDQpbQ1VTVE9NQ09ERT1nZXRIZWxwZXJDbGFzc10NCltDVVNUT01DT0RFPWdldFJlcG9ydF0NCltDVVNUT01DT0RFPWdldEFOWVRlbXBsYXRlK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1EZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUNvbXBhbnlEZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1zK01lbWJlcl0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrbWVtYmVyLE1lbWJlcl0NCltDVVNUT01DT0RFPW1vZGVsQU5ZRGV0YWlscyttZW1iZXIsTWVtYmVyXQ0KW0NVU1RPTUNPREU9bGFiZWxNb2RlbEFOWURldGFpbHMrbWVtYmVyLE1lbWJlcl0NCltDVVNUT01DT0RFPWdldE1lbWJlck5hbWVdDQpbQ1VTVE9NQ09ERT1nZXRBbGxDb21wb25lbnRzKydJbmZvJyYjNDQ7J0Fzc2Vzc21lbnQnXQ0KW0NVU1RPTUNPREU9Z2V0Q29tcG9uZW50TmFtZSsnSW5mbycmIzQ0OydBc3Nlc3NtZW50J10NCltDVVNUT01DT0RFPWdldENvbXBvbmVudHNBdmFpbGxhYmxlK2luZm8sSW5mbywmIzkxOyYjOTE7JiM5MTtjb21wb25lbnQmIzkzOyYjOTM7JiM5MztdDQpbQ1VTVE9NQ09ERT1nZXRDb21wb25lbnRzQXZhaWxsYWJsZSthc3Nlc3NtZW50LEFzc2Vzc21lbnQsJiM5MTsmIzkxOyYjOTE7Y29tcG9uZW50JiM5MzsmIzkzOyYjOTM7XQ0KW0NVU1RPTUNPREU9bG9hZEludGVncmF0ZWRUYWJzXQ0KW0NVU1RPTUNPREU9c2V0VGFiXQ0KW0NVU1RPTUNPREU9c2V0U3ViZm9ybVRhYmxlXQ0KW0NVU1RPTUNPREU9c2F2ZVJlbGF0aW9uc2hpcHNdDQpbQ1VTVE9NQ09ERT1hcnJheVBhcnRpdGlvbl0NCltDVVNUT01DT0RFPWdldEZpbGVDb250ZW50c10NCltDVVNUT01DT0RFPWJjbWF0aF0NCltDVVNUT01DT0RFPWdVSURdDQpbQ1VTVE9NQ09ERT1nZXRDb3JlTmFtZV0NCltDVVNUT01DT0RFPW1pbWVUeXBlXQ0KW0NVU1RPTUNPREU9dHJpZ2dlclBsdWdpbl0NCltDVVNUT01DT0RFPWNhbkFjY2Vzc01lbWJlcl0=', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'The Tradeshow Member Manager', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'Trade Show', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita/master/update_server.xml', 'http://www.vdm.io', '', '60dT/Pblxd6gCktQbfcYDS7dz1f+WwUbWB7tF33W3fg=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 15, '', 1, 40),
(72, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Vast Development Method', '1.0.0', 'Copyright (C) 2020. All Rights Reserved', '2020-07-03 15:40:40', '', 'J9NlVYI02Eu7AgPKZpTm5FJn08mLqO8dFBsFtfPkXz8=', '8a60unLh/MKEy+Bk+U/DJKZpFatQlE10ON+7M0l6B9k=', '', 'TtVYGl4jbbtGejB8ajWigIAFBT35hSTBbYxPkDQlvmg=', '', '', 'A_255', 2, '', 'Tradeshow Members Contact Details', 'joomla@vdm.io', '', '', 'xte7yVjY5MNHAicUV1HSnpCG5bGN1Xqs61tQ+wrOIVrrPKTa45QbhayrfXo1plrqiVjKNheWOnCtvk+4S97eDw==', '', 'e2602a97-fc53-453c-a5bf-972b6402add3', 'images/vdm/INTER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&oast;', '2020-07-20 23:18:52', 2, 'Contact', 'tradeshow_contactdetails', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29udGFjdGRldGFpbHNIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Contact Details', '', '', 'Contact Details (tradeshow)', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita_contactdetails/master/update_server.xml', 'http://www.vdm.io', '', 'XZD29QMr0qG96JwEhYJavC6EAXsjzKqbvwf+IHduPQ0=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 12, '', 1, 41),
(73, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Vast Development Method', '1.0.0', 'Copyright (C) 2020. All Rights Reserved', '2020-07-05 02:26:09', '', 'yUyHgT14jAW4fsHUg7PkwaoYVdwkgGLQBVa+JpKmy6E=', 'iNI0cSm59PTSv7sJJ9S3WIarGn3RoDz8BGGq79BnEFY=', '', 'eLhRw2cXGVaGcDPohMuh5jgMlcSYRM4AdYSS+AiVT7g=', '', '', 'A_256', 2, '', 'Tradeshow Members Interests Details', 'joomla@vdm.io', '', '', 'eOuN2nUyNDC7P7RaoGD3naJ/uTavr8Q6ZOpcZD8IprH3IUN1EmCuJOCRT5DrIGZ53B6RNhxJbm0h5BQjwqur4Q==', '', 'e64adafd-3574-415f-8ef8-96bf201ccec6', 'images/vdm/INTER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&oast;', '2020-07-09 02:34:42', 2, 'Interests', 'tradeshow_interests', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEdldCBzZWxlY3Rpb24gIGJhc2VkIG9uIHR5cGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIG1haW4gdGFibGUgdG8gc2VsZWN0DQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZCAgICBUaGUgdHlwZSBvZiB2YWx1ZXMgdG8gcmV0dXJuDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGZpbHRlciAgICBUaGUga2luZCBvZiBmaWx0ZXIgKHRvIHJldHVybiBvbmx5IHZhbHVlcyByZXF1aXJlZCkNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGIgICAgIFRoZSBkYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0YWJsZSA9ICdmb3JtJywgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicsICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCS8vIHByZXAgZm9yIHBsYWNlaG9sZGVycw0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBwbGFjZWhvbGRlciBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3BsYWNlaG9sZGVyX3ByZWZpeCcsICdbW1tjb21wb25lbnRdXV0nKTsNCgkJCSRmID0gJ1snIC4gJHByZWZpeCAuICdfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQlpZiAoKCRmaWVsZHMgPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3Byb2ZpbGVfZmllbGRzJywgZmFsc2UpKSAhPT0gZmFsc2UgJiYgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGZpZWxkcykpDQoJCQl7DQoJCQkJJGNvbHVtbnMgPSBhcnJheSgnaWQnKTsgLy8gbmVlZGVkIGZvciBwZXJtaXNzaW9uIGNoZWNrDQoJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQkkY29sdW1uc1tdID0gJGZpZWxkLT5maWVsZDsNCgkJCQl9DQoJCQkJLy8gYWRkIGRhdGVzIGZvciBkaXNwbGF5DQoJCQkJJGNvbHVtbnNbXSA9ICdjcmVhdGVkJzsNCgkJCQkkY29sdW1uc1tdID0gJ21vZGlmaWVkJzsNCgkJCX0NCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gc3RhcnQgYnVpbGQgcmVtb3ZhbA0KCQkJJHJlbW92YWwgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBmaWVsZHMvY29sdW1ucw0KCQkJJHJlbW92YWxbXSA9ICRmIC4gJ3BhcmFtcycgLiAkYjsNCgkJCXJldHVybiAkcmVtb3ZhbDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdGhlIERCIG9iamVjdA0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQkJew0KCQkJCS8vIGdldCB0aGUgZGF0YWJhc2Ugb2JqZWN0DQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQl9DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIGNvbHVtbnMgb2YgdGhpcyB0YWJsZQ0KCQkJJGNvbHVtbnMgPSAkZGItPmdldFRhYmxlQ29sdW1ucygiI19fW1tbY29tcG9uZW50XV1dXyIgLiAkdGFibGUsIGZhbHNlKTsNCgkJCS8vIGFsd2F5cyByZW1vdmUgdGhlc2UNCgkJCSRyZW1vdmUgPSBhcnJheSgnYXNzZXRfaWQnLCAnY2hlY2tlZF9vdXQnLCAnY2hlY2tlZF9vdXRfdGltZScpOw0KCQkJLy8gaWYgcGxhY2Vob2xkZXIgYW5kIG5vbmUgZmlsdGVyIHRoZW4gcmVtb3ZlIHNvbWUgbW9yZQ0KCQkJaWYgKCdwbGFjZWhvbGRlcicgPT09ICRtZXRob2QgJiYgKCdyZXBvcnQnID09PSAkZmlsdGVyIHx8ICdlbWFpbCcgPT09ICRmaWx0ZXIpKQ0KCQkJew0KCQkJCSRyZW1vdmVbXSA9ICdwYXJhbXMnOw0KCQkJCSRyZW1vdmVbXSA9ICdhY2Nlc3MnOw0KCQkJCSRyZW1vdmVbXSA9ICdjcmVhdGVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnaWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdvcmRlcmluZyc7DQoJCQkJJHJlbW92ZVtdID0gJ3ZlcnNpb24nOw0KCQkJCSRyZW1vdmVbXSA9ICdwdWJsaXNoZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdtb2RpZmllZF9ieSc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkJzsNCgkJCQkkcmVtb3ZlW10gPSAnaGl0cyc7DQoJCQl9DQoJCQkvLyByZW1vdmUNCgkJCWZvcmVhY2ggKCRyZW1vdmUgYXMgJGtleSkNCgkJCXsNCgkJCQl1bnNldCgkY29sdW1uc1ska2V5XSk7DQoJCQl9DQoJCQkvLyBwcmVwIHRoZSBjb2x1bW5zDQoJCQkkY29sdW1ucyA9IGFycmF5X2tleXMoJGNvbHVtbnMpOw0KCQl9DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGNvbHVtbnMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb2x1bW5zKSkNCgkJew0KCQkJLy8gY29udmVydCB0aGUgY29sdW1ucyBmb3IgcXVlcnkgc2VsZWN0aW9uDQoJCQkkc2VsZWN0aW9uID0gYXJyYXkoKTsNCgkJCS8vIGxvYWQgdGhlIGNvbHVtbnMgdG8gc2VsZWN0aW9uDQoJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uKQ0KCQkJew0KCQkJCSRzZWxlY3Rpb25bJ2EuJyAuICRjb2x1bW5dID0gJGYgLiAkY29sdW1uIC4gJGI7DQoJCQkJLy8gd2UgbXVzdCBhZGQgdGhlIGxhYmVsDQoJCQkJaWYgKCdwcm9maWxlJyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBsYWJlbCBmb3IgdGhlc2UgZmllbGRzDQoJCQkJCSRzZWxlY3Rpb25bJ3NldExhYmVsLT4nIC4gJGNvbHVtbl0gPSAkZiAuICdsYWJlbF8nIC4gJGNvbHVtbiAuICRiOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWxhYmVsTW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPXJlbW92ZUFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9Z2V0TWVtYmVyTmFtZV0NCltDVVNUT01DT0RFPWdldEhlbHBlckNsYXNzXQ0KW0NVU1RPTUNPREU9Y2FuQWNjZXNzTWVtYmVyRGF0YV0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Interests Details', '', '', 'Interests (tradeshow)', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita_contactdetails/master/update_server.xml', 'http://www.vdm.io', '', 'p64m7REo8QwAaxkYcuH3+j3lWdyOeu8LN0hd/GpEDKs=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 4, '', 1, 42),
(74, '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', '', 1, '', 3, 'Joomla! Project', '', 'joomla.txt', '', '', 'Open Source Matters', '2.0.1', '(C) 2020 Open Source Matters, Inc.', '2020-07-29 22:24:08', '', 'nuPe7BZe0OtMlyNeeHPuS8SHX8O9HvQWj5jF+XCWih554qg/aohgU1kHkZ8Bc9ZKXxaS0LNvAD1PDZ/mNvPKh/ZktsZmU/CiEIV7jDRfnn0Z67gQ4qq8ukNLvrA7vTSgnLMGHXGVOP5jkiSKKT6LfA==', 'wWB7GJgVI/YsjDN7d2Xx3J7X2yE5cu/7jHL0zRp36uM=', '', 'v3X9AzJS8wSMIb81VZpN4bI3w785Wil6K4jI4Cl2dcI=', '', '', 'A_265', 2, '', 'A component to keep track of release checking.', 'admin@joomla.org', '', '', 'v31/4wVSWaILOAk2YmJ+QAkatJjr/U4Q15RcHU8nXPA=', '/var/git_', '12903467-e133-4b2a-9fb2-5c8b6141fc0d', 'images/vdm/INTER500.jpg', '', 'https://git.vdm.dev/joomla/com_release_checking', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '&#187;', '2024-03-07 13:38:20', 2, 'Track Release Checking', 'releasechecking', 'JCB', 4, '', '', '', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIFNvbWUgRnVuIE51bWJlcnMNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKio=', 1, '', 'Track Release Checking', '', '', 'Track Release Checking', '.git', '', '', 2, 'https://raw.githubusercontent.com/joomla-projects/com_release_checking/master/update_server.xml', 'http://www.joomla.org', '', 'DSEQLzE3zgLZWTiI7dH7LTbsTw5ebd58CnojuOFFj/g=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 51, '', 1, 19),
(75, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{\"addcontributors0\":{\"name\":\"Mauritz van der Merwe\",\"title\":\"Lila-Lead\",\"email\":\"mauritz@nampharm.com.na\",\"website\":\"https:\\/\\/www.nampharm.com.na\\/\",\"use\":\"2\",\"show\":\"3\"}}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'nampharm.txt', '', '', 'NamPharm', '1.0.0', 'Copyright (C) 2021. All Rights Reserved', '2021-08-23 17:39:20', '', 'E2gQdKS7fPBdXSh5QGPg8XUxr5RE+KYb2O4hIRpPiJo=', 'nwDmkj3a/7a20Tx85owMgVKUVXmw1dXluKkupmanRME=', '', '+B2X3uAaAiq/s7njAISK7utK8wFgFrLLMAWxIFguvG4=', '', '', 'A_259', 2, '', 'Managing the integration with Lila', 'llewellyn@vdm.io', '', 'https://git.vdm.dev/NamPharm', '/QqJA76V+vHv0yV/XxFoZVVErzwjjZyg4PTcKxGfAHoah/HwHvVMA4h6kCm8qWuG', '', '3e6ad3e9-4638-4853-8a39-177338c9899c', 'images/vdm/INTER500.jpg', '', 'https://git.vdm.dev/NamPharm/lilapharm', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2021-11-13 15:41:01', 2, 'LilaPharm', 'LilaPharm', '', 4, '', '', '', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', 1, '', 'Managing the integration with Lila', '', '', 'LilaPharm', '.git', '', '', 1, '', 'https://git.vdm.dev/NamPharm', '', 'E0X+mbMN8utwWS03NdaBIc2x8FL5/eQTD7xtRrqrduQ=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 16, '', 1, 73),
(77, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.2', 'Copyright (C) 2020. All Rights Reserved', '2022-05-19 19:45:15', '', 'ajPZSR9ECiF8dpmSxaMBqdg3FzmwebLHIqnh5aNP9oU=', 'Q7cGyROmDxs86z12EUNFK5OnnfGBdaet2LsCAiD6I18=', '', 'rf6ckpi4p5G/57685LcBwAeoPT2tUYuXlfK5J/EB0TI=', '', '', '', 1, '', 'To update the core powers of JCB', 'joomla@vdm.io', '', '', 'YxOrE3VZMV4NCTchaLing682C5FYf/BlivX9ncHR2SU=', '', '371f04cc-4f9b-466c-b6ad-e9b4466a48a7', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#171;', '2022-09-20 10:15:18', 3, 'Power Updater', 'PowerUpdater', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Power Updater', '', '', 'Power Updater', '.git', '', '', 1, 'https://www.vdm.io/updates/componentbuilder_basic_update_server.xml', 'http://www.joomlacomponentbuilder.com', '', 'mluySSH3I1cPJE6ONgLgnaQSbWmY8NrrI8bQh5nju/E=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"1\",\"admin_component\":\"\",\"power_admin_component\":{\"power_admin_component0\":{\"power\":\"8025e71c-8e21-44cb-b23e-dce2fb5a1ab5\",\"as\":\"default\",\"build\":\"2\"}},\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 14, '', 1, 55),
(78, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.2', 'Copyright (C) 2022. All Rights Reserved', '2022-09-20 10:22:50', '', 'WF9UyIOqL1Y1RmqBCYBgGNOOTmkKeb+bpiYUF0E97sc=', '/teVDI0QeBd/DEYVguwfIbG1gh/FCiStK0so6FKoYPc=', '', '7LZ6671VY+qBiuIGUzFFuuzTSBN+aqdXScZ4cV+IZhU=', '', '', '', 1, '', 'To update the core compiler of JCB', 'joomla@vdm.io', '', '', '/bu8qaakJoHxhQEQk+3Hhx5DxXCCaoPJaHpRA78vycU=', '', '7b7f5f0d-5d5d-4a14-b1c5-47f4541ec6df', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder/src/branch/staging/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#171;', '2022-09-20 10:36:48', 3, 'Compiler Updater', 'CompilerUpdater', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Compiler Updater', '', '', 'Compiler Updater', '.git', '', '', 1, '', 'http://www.joomlacomponentbuilder.com', '', 'WrCSG395h8L2AStJAE+GcU4y1jIvzHt8wS8tj66kP/g=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"1\",\"admin_component\":\"\",\"power_admin_component\":{\"power_admin_component0\":{\"power\":\"32533a86-e602-4941-87c3-90bdd703989a\",\"as\":\"default\",\"build\":\"2\"}},\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 5, '', 1, 55),
(79, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.0', 'Copyright (C) 2022. All Rights Reserved', '2022-12-02 13:22:33', '', 'lPYL2eF+0NZjPxC0XaIeqJA5TEhl2ThtH4A41XeH+D0=', 'vOO5Yu75v70pS9PTvr8KYIFiW3fIBHXJhPpdRuCLDPU=', '', 'MoGIpuhFxT5u/6Vjn1O6qulD52PVAGyOeg5aWGDAgFI=', '', '', '', 1, '', 'To update the search classes of JCB', 'joomla@vdm.io', '', '', 'Z3gsAcjBJsQ2wbjV0v8SIi/8uKXk3Ej6x1dbkcQqSBk=', '', '4940e53c-8f00-4b87-bf13-04ef9b8aa7e9', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder/src/branch/staging/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#171;', '2022-12-02 13:25:24', 3, 'Search Updater', 'SearchUpdater', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Search Updater', '', '', 'Search Updater', '.git', '', '', 1, '', 'http://www.joomlacomponentbuilder.com', '', '65PyHbdXxTdBj2RkLruCsjIvsxJzMesCfl/6pL8UKmw=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"1\",\"admin_component\":\"\",\"power_admin_component\":{\"power_admin_component0\":{\"power\":\"27977769-0fc0-4ade-8068-3299d0d66e25\",\"as\":\"default\",\"build\":\"1\"}},\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 3, '', 1, 55),
(80, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Octoleo', '1.0.2', 'Copyright (C) 2022. All Rights Reserved', '2023-02-17 12:52:16', '', 'gjvvZWW9dda/XKgVcNl77diP4aIHScvJLVI873vJz9o=', 'fXaT9P1lb2dvQlpl5P8wrebvUJdVqEP5Da+aVdZVh9c=', '', 'QpJksp5hClG8qqwyEMDNBj1r3uzKameP7EKSuc7D3zM=', '', '', '', 1, '', 'Octoleo - Joomla Extension', 'octoleo@vdm.io', '', '', 'TcpNAqfyKC9Kxnonh76heWZTQS41BxXpUAvRPZKVNpo=', '', '70b0c5c7-2735-48a2-824d-39660179da67', 'images/vdm/WHALE500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder/src/branch/staging/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#171;', '2023-11-28 12:55:47', 3, 'Octoleo', 'Octoleo', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Joomla Extension', '', '', 'Octoleo', '.git', '', '', 1, '', 'https://git.vdm.dev/Llewellyn', '', '1IbAsXMv1z3laR1QOw/7+5OAKgZ43I1J4FvfS1ZTDSc=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"1\",\"admin_component\":\"\",\"power_admin_component\":{\"power_admin_component0\":{\"power\":\"1a41f760-fb8f-4ded-ab87-9180cc846ca7\",\"as\":\"default\",\"build\":\"2\"}},\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 8, '', 1, 55),
(83, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 3, 3, 'Llewellyn van der Merwe', '/var/www/sermondistributor_j4', 'SD.txt', '', '', 'Vast Development Method', '4.0.0-beta1', 'Copyright (C) 2015. All Rights Reserved', '2015-10-22 16:59:20', '', 'L0K4HBwUNnpeGTf4rx2/ggxpFlbUErmORKBYS7GXB4U=', 'P+K1TMDoiqK9KAgplYnZKNXjjZZRUN64kUhTHVPndMc=', '', 'igIrKuNnwzTkv6yQTWSlxJxzsj3UU94xRx5zieUpm2s=', '', '', '', 1, '', 'Distributor is a highly advanced sermon distributor that runs on the [Joomla 4.x & 5.x](http://www.joomla.org) framework. You can link a shared folder from Dropbox to the component and use Dropbox as your file host, not to mention the advanced auto builder that gives you the ability to simply load sermons to your website by only adding them to Dropbox.', 'joomla@vdm.io', 1, 'http://vdm.bz/get-sermon-distributor-key', 'XGvstI4CFtBkA5eZjfvf4o8t8ysiqasRS8sWAYi2oPjeARiIu+cKEhMzA6La9ZtQZzspXOokiZYuyOvZqJiD/A==', '/var/git_', '5aeca7ea-25aa-4ebb-b2ef-8e2a11be02af', 'images/vdm/SD500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Sermon-Distributor', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-03-07 13:39:40', 2, 'Sermon Distributor', 'sermondistributor', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSogCVRoZSBnbG9iYWwgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zID0gZmFsc2U7DQoNCgkvKioNCgkqIAlVcGRhdGUgV2F0Y2hlcg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHVwZGF0ZVdhdGNoID0gMTsNCg0KCS8qKg0KCSogCVVwZGF0ZSBXYXRjaGVyIChpZiBhcnJheSBpcyBvbmx5IG9uZSB2YWx1ZSkNCgkqKi8NCglwdWJsaWMgc3RhdGljICR1cGRhdGVXYXRjaF8gPSAwOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBsaW5rcyBhdXRvDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfYXV0bzsNCg0KCS8qKg0KCSogCVRoZSBleHRlcm5hbCBzb3VyY2UgbGlua3MgbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfbWFudWFsOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gYXV0bw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHNlbGVjdF9leHRlcm5hbHNvdXJjZV9hdXRvOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkc2VsZWN0X2V4dGVybmFsc291cmNlX21hbnVhbDsNCg0KCS8qKg0KCSogCVRoZSB1cGRhdGUgZXJyb3JzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXBkYXRlRXJyb3JzID0gYXJyYXkoKTsNCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQoJLyoqDQoJKiAJZ2V0IERvd25sb2FkIGxpbmtzIG9mIGEgc2VybW9uDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZExpbmtzKCYkc2VybW9uKQ0KCXsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkvLyBkZWNyeXB0IHRoZSB1cmxzDQoJCSRzYWZlID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAxMjgpOw0KCQkvLyBpbnRlcm5hbCBkb3dubG9hZCB1cmwNCgkJJGtleUNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzOw0KCQkka2V5Q291bnRlci0+c2VybW9uID0gJHNlcm1vbi0+aWQ7DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGtleUNvdW50ZXItPnByZWFjaGVyID0gJHNlcm1vbi0+cHJlYWNoZXI7DQoJCX0NCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGtleUNvdW50ZXItPnNlcmllcyA9ICRzZXJtb24tPnNlcmllczsNCgkJfQ0KCQkka2V5Q291bnRlclJBVyA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKGpzb25fZW5jb2RlKCRrZXlDb3VudGVyKSk7DQoJCSRrZXlDb3VudGVyID0gc2VsZjo6YmFzZTY0X3VybGVuY29kZSgka2V5Q291bnRlclJBVyk7DQoJCSR0b2tlbiA9IFNlc3Npb246OmdldEZvcm1Ub2tlbigpOw0KCQkkZG93bmxvYWRVUkwgPSBVcmk6OnJvb3QoKS4naW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9ZG93bmxvYWQuZmlsZSZrZXk9Jy4ka2V5Q291bnRlci4nJnRva2VuPScuJHRva2VuOw0KCQkvLyBjaGVjayBpZiBsb2NhbCAuaHRhY2Nlc3Mgc2hvdWxkIGJlIHNldA0KCQkkc2V0SHRhY2Nlc3MgPSBmYWxzZTsNCgkJJG9uY2xpY2sgPSAnIG9uY2xpY2s9InNlcm1vbkNvdW50ZXIoXCcnLiRrZXlDb3VudGVyUkFXLidcJyxcJ0ZJTEVOQU1FXCcpOyInOw0KCQkvLyBjaGVjayB3aGF0IHNvdXJjZSBvZiBvdXIgbGluaw0KCQlzd2l0Y2ggKCRzZXJtb24tPnNvdXJjZSkNCgkJew0KCQkJY2FzZSAxOg0KCQkJCS8vIGxvY2FsIGZpbGUgZ2V0IGxvY2FsIGZvbGRlciBhbmQgY2hlY2sgaWYgb3V0c2lkZSByb290IChpZiBub3QgdGhlbiBhbGxvdyBkaXJlY3QpDQoJCQkJJGxvY2FsRm9sZGVyID0gQ29tcG9uZW50SGVscGVyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsb2NhbGZvbGRlcicsIEpQQVRIX1JPT1QuJy9pbWFnZXMnKS4nLyc7DQoJCQkJLy8gc2hvdWxkIHdlIGFsbG93IGRpcmVjdCBkb3dubG9hZHMNCgkJCQkkYWxsb3dEaXJlY3QgPSBmYWxzZTsNCgkJCQlpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgc3RycG9zKCRsb2NhbEZvbGRlciwgSlBBVEhfUk9PVCkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGFsbG93RGlyZWN0ID0gdHJ1ZTsNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gVXJpOjpyb290KCkuc3RyX3JlcGxhY2UoSlBBVEhfUk9PVCwgJycsICRsb2NhbEZvbGRlcik7DQoJCQkJCS8vIGluc3VyZSBubyBkb3VibGUgLy8gaXMgaW4gdGhlIFVSTA0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlclVSTCk7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCX0NCgkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBwYXRoIG5hbWUNCgkJCQkkbG9jYWxGb2xkZXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlcik7DQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJzovJywgJzovLycsICRsb2NhbEZvbGRlcik7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPmxvY2FsX2ZpbGVzKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2goJHNlcm1vbi0+bG9jYWxfZmlsZXMgYXMgJGtleSkNCgkJCQkJew0KCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlIHx8ICEkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwka2V5LCdsb2NhbCcpOw0KCQkJCQkJCSRsb2NrZWRGb2xkZXJQYXRoID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGxvY2FsRm9sZGVyLiRrZXkpOw0KCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkbG9ja2VkRm9sZGVyUGF0aCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSAnJzsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGFsbG93RGlyZWN0KQ0KCQkJCQkJew0KCQkJCQkJCSRmaWxlbmFtZSA9ICRrZXk7DQoJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRsb2NhbEZvbGRlclVSTC4ka2V5Ow0KCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCSRzZXRIdGFjY2VzcyA9IHRydWU7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJLy8gRHJvcGJveCBnZXQgZ2xvYmFsIGRyb3Bib3ggc3dpdGNoIA0KCQkJCSRhZGRUb0J1dHRvbiA9IENvbXBvbmVudEhlbHBlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnYWRkX3RvX2J1dHRvbicsIDApOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmJ1aWxkKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPm1hbnVhbF9maWxlcykpDQoJCQkJCXsNCgkJCQkJCS8vIG1hbnVhbCBkcm9wYm94DQoJCQkJCQlmb3JlYWNoKCRzZXJtb24tPm1hbnVhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdtYW51YWwnLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnZHJvcGJveF9tYW51YWwnKTsNCgkJCQkJCQkJLy8gc2hvdWxkIHdlIGVuY3J5cHQgc3RyaW5nIHRoaXMgc3RyaW5nDQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5IHx8IChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwsIHRydWUpKSAhPT0gJGRyb3BVUkwpKSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0DQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkcm9wVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGRyb3BVUkwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGxvY2sgdGhlIGluZm8ga2V5DQoJCQkJCQkJCSRpbmZvS2V5ID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZpbmZvPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkaW5mb0tleSkuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZHJvcFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRrZXkpOw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkcm9wVVJMOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRhZGRUb0J1dHRvbiAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5KSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0IChzbyBkb24ndCBkZWNyeXB0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsICRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRyb3Bib3hfYnV0dG9uc1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJz9kbD0xJywgJz9kbD0wJywgcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoJGRyb3BVUkwpLCAiXDAiKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+YnVpbGQpDQoJCQkJew0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNlcm1vbi0+YXV0b19zZXJtb25zKSkNCgkJCQkJew0KCQkJCQkJLy8gYXV0b21hdGljIGRyb3Bib3gNCgkJCQkJCWZvcmVhY2goJHNlcm1vbi0+YXV0b19zZXJtb25zIGFzICRmaWxlbmFtZSA9PiAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdhdXRvJywxLCRrZXkpOw0KCQkJCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIHNob3VsZCB3ZSBlbmNyeXB0IHN0cmluZyB0aGlzIHN0cmluZw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSB8fCAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkcm9wVVJMLCB0cnVlKSkgIT09ICRkcm9wVVJMKSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldA0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkZHJvcFVSTCA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKCRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBsb2NrIHRoZSBpbmZvIGtleQ0KCQkJCQkJCQkkaW5mb0tleSA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKCRrZXkpOw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGRvd25sb2FkVVJMLicmaW5mbz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGluZm9LZXkpLicmbGluaz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGRyb3BVUkwpLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWU7DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCdsb2NhbEtleTM0ZmRXRWtsJyA9PSAkbG9jYWxrZXkpIC8vIGhtbW0gbm8gZ2xvYmFsIGtleSBoYXMgYmVlbiBzZXQgKHNvIGRvbid0IGRlY3J5cHQpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZHJvcFVSTDsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZygkZHJvcFVSTCksICJcMCIpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBidWlsZCBkcm9wYm94IHN3aXRjaCBpZiBuZWVkZWQNCgkJCQkJCQlpZiAoMSA9PSAkYWRkVG9CdXR0b24gJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZHJvcGJveF9idXR0b25zWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnP2RsPTEnLCAnP2RsPTAnLCAkZHJvcFVSTCk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsIHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIikpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tfZHJvYm94WyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDM6DQoJCQkJLy8gdXJsIGdldCB0aGUgZmlsZSBuYW1lIHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGF1dG8NCgkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJHNlcm1vbi0+dXJsLCd1cmwnKTsNCgkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUpDQoJCQkJew0KCQkJCQkkbG9ja2VkVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJHNlcm1vbi0+dXJsKTsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkb3dubG9hZFVSTC4nJmxpbms9Jy5zZWxmOjpiYXNlNjRfdXJsZW5jb2RlKCRsb2NrZWRVUkwpLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWU7DQoJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlKQ0KCQkJCXsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRzZXJtb24tPnVybDsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJCS8vIHJlbW92ZSB0aGUgdmFsdWVzIG5vIGxvbmdlciBuZWVkZWQNCgkJdW5zZXQoJHNlcm1vbi0+bG9jYWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5tYW51YWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMpOw0KCQl1bnNldCgkc2VybW9uLT51cmwpOw0KCQkvLyBzaG91bGQgd2Ugc2V0IHRoZSBsb2NhbCAuaHRhY2Nlc3MgZm9yIHRoZSBkb3dubG9hZCBmb2xkZXINCgkJaWYgKCRzZXRIdGFjY2VzcykNCgkJew0KCQkJLy8gVE9ETyB3ZSBtYXkgbmVlZCB0byBhZGQgdGhpcyBsYXR0ZXIgdG8gZW5mb3JjZSBkb3dubG9hZCBvZiBmaWxlcy4NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5leHRVcGRhdGVWYWx1ZXMoJGFzQXJyYXkgPSBmYWxzZSkNCgl7DQoJCS8vIGZpbmQgdGhlIG5leHQgdmFsdWUNCgkJJG5leHQgPSBmYWxzZTsNCgkJLy8gZ2V0IGFjdHVhbCB1cGRhdGUgdmFsdWVzDQoJCSR1cGRhdGVzID0gc2VsZjo6Z2V0RXh0ZXJuYWxMaXN0aW5nVXBkYXRlS2V5cygpOw0KCQkvLyBnZXQgbGFzdCB1cGRhdGUNCgkJJHVwZGF0ZVBhdGggPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRQYXRoKCdwYXRoJywgJ3VwZGF0ZWxhc3QnLCAndHh0JywgJ3ZEbScsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJaWYgKCgkbGFzdFVwZGF0ZSA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJHVwZGF0ZVBhdGgsIEZBTFNFKSkgIT09IEZBTFNFICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR1cGRhdGVzKSkNCgkJew0KCQkJLy8gaXMgaXQgdGltZSB0byB3YXRjaA0KCQkJaWYgKHNlbGY6OiR1cGRhdGVXYXRjaF8gPiAwKQ0KCQkJew0KCQkJCS8vIGluY3JlbWVudCB0aGUgd2F0Y2gsIGFzIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIG5ldyByb3VuZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaCsrOw0KCQkJCS8vIG5ldyByb3VuZCBoYXMgc3RhcnRlZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8gPSAwOw0KCQkJfQ0KCQkJLy8gbm93IGNoZWNrIHdoYXQgaXMgbmV4dA0KCQkJJGxhc3RLZXkgPSBhcnJheV9zZWFyY2goJGxhc3RVcGRhdGUsICR1cGRhdGVzKTsNCgkJCWlmICghaXNfbnVsbCgkbGFzdEtleSkpDQoJCQl7DQoJCQkJJG5leHRLZXkgPSAkbGFzdEtleSArIDE7DQoJCQkJaWYgKGlzc2V0KCR1cGRhdGVzWyRuZXh0S2V5XSkpDQoJCQkJew0KCQkJCQkkbmV4dCA9ICR1cGRhdGVzWyRuZXh0S2V5XTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbGFzdCBpdGVtIGluIGFycmF5LCBzbyBuZXh0IHJvdW5kIGFib3V0IHRvIHN0YXJ0DQoJCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8rKzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmVzdCBhbmQgc3RhcnQgd2l0aCB0aGUgZmlyc3Qga2V5DQoJCWlmICghJG5leHQgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHVwZGF0ZXMpKQ0KCQl7DQoJCQkvLyBzYXZlIHRoZSBmaXJzdCBzZXQNCgkJCSRzdGFydCA9IHJlc2V0KCR1cGRhdGVzKTsNCgkJCSRuZXh0ID0gJHN0YXJ0Ow0KCQl9DQoJCS8vIHNhdmUgdG8gZmlsZSBpZiBuZXh0IGlzIGZvdW5kDQoJCWlmICgkbmV4dCkNCgkJew0KCQkJU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6d3JpdGUoJHVwZGF0ZVBhdGgsJG5leHQpOw0KCQkJLy8gY29udmVydCB0byBhcnJheSBvZiBuZWVkZWQNCgkJCWlmICgkYXNBcnJheSkNCgkJCXsNCgkJCQlpZiAoc3RycG9zKCRuZXh0LCAnLCcpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRuZXh0ID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRuZXh0KSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRuZXh0Ow0KCX0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2F2ZUZpbGUoJGRhdGEsICRwYXRoX2ZpbGVuYW1lKQ0KCXsNCgkJcmV0dXJuIFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OndyaXRlKCRwYXRoX2ZpbGVuYW1lLCAkZGF0YSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeHRlcm5hbExpc3RpbmdVcGRhdGVLZXlzKCRpZCA9IG51bGwsICR1cGRhdGVNZXRob2QgPSAyLCAkcmV0dXJuVHlwZSA9IDEpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB0aGlzIGZpbGUgYWxyZWFkeSBoYXMgc3RhdGlzdGljcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywnc2hhcmVkdXJsJywnZm9sZGVyJywncGVybWlzc2lvbnR5cGUnLCdkcm9wYm94b3B0aW9ucycsJ2J1aWxkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fZXh0ZXJuYWxfc291cmNlJykpOw0KCQlpZiAoJHVwZGF0ZU1ldGhvZCAmJiBpc19udW1lcmljKCR1cGRhdGVNZXRob2QpKQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd1cGRhdGVfbWV0aG9kJykgLiAnID0gJy4gKGludCkgJHVwZGF0ZU1ldGhvZCk7DQoJCX0NCgkJaWYgKCRpZCAmJiBpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4gKGludCkgJGlkKTsNCgkJfQ0KCQllbHNlaWYgKCRpZCAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWQpKQ0KCQl7DQoJCQkkaWRzID0gaW1wbG9kZSgnLCcsIGFycmF5X21hcCggJ2ludHZhbCcsICRpZCkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgSU4gICgnIC4gJGlkcyAuICcpJyk7DQoJCX0NCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRyZXN1bHRzID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJJHVwZGF0ZXMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHJlc3VsdHMgYXMgJHJlc3VsdCkNCgkJCXsNCgkJCQlpZiAoJ2Z1bGwnID09ICRyZXN1bHQtPnBlcm1pc3Npb250eXBlKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCBmb2xkZXIgb3IgdXJscw0KCQkJCQlzd2l0Y2ggKCRyZXN1bHQtPmRyb3Bib3hvcHRpb25zKQ0KCQkJCQl7DQoJCQkJCQljYXNlIDE6IC8vIHNoYXJlZHVybA0KCQkJCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0LT5zaGFyZWR1cmwpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhcmdldHMgPSBqc29uX2RlY29kZSgkcmVzdWx0LT5zaGFyZWR1cmwpLT50c2hhcmVkdXJsOw0KCQkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAyOiAvLyBmb2xkZXJzDQoJCQkJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRyZXN1bHQtPmZvbGRlcikpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFyZ2V0cyA9IGpzb25fZGVjb2RlKCRyZXN1bHQtPmZvbGRlciktPnRmb2xkZXI7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0YXJnZXRzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJCQl7DQoJCQkJCQkJJG5yID0gJGtleSArIDE7DQoJCQkJCQkJLy8gaWQsIHRhcmdldCwgdHlwZQ0KCQkJCQkJCWlmICgxID09ICRyZXR1cm5UeXBlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHVwZGF0ZXNbXSA9ICRyZXN1bHQtPmlkIC4gJywgJy4gJG5yIC4gJywgJyAuICRyZXN1bHQtPmJ1aWxkOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIC8vIG9ubHkgcmV0dXJuIHRoZSB0YXJnZXRzDQoJCQkJCQkJew0KCQkJCQkJCQkkdXBkYXRlc1tdID0gJG5yOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBpZCwgdGFyZ2V0LCB0eXBlDQoJCQkJCWlmICgxID09ICRyZXR1cm5UeXBlKQ0KCQkJCQl7DQoJCQkJCQkkdXBkYXRlc1tdID0gJHJlc3VsdC0+aWQgLiAnLCAxLCAnLiAkcmVzdWx0LT5idWlsZDsNCgkJCQkJfQ0KCQkJCQllbHNlIC8vIG9ubHkgcmV0dXJuIHRoZSB0YXJnZXRzDQoJCQkJCXsNCgkJCQkJCSR1cGRhdGVzW10gPSAxOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICR1cGRhdGVzOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4dGVybmFsU291cmNlTGluaygkdHlwZSwgJHJldHVybiA9IDcsICRnZXQgPSBmYWxzZSwgJHRhcmdldCA9ICdsaW5rcycpDQoJew0KCQkvLyBtYWtlIHN1cmUgYWxsIGRlZmF1bHRzIGFyZSBzZXQNCgkJJGZvdW5kID0gc2VsZjo6Y2hlY2tFeHRlcm5hbFNvdXJjZUxvY2FsTGlzdGluZygkdHlwZSwgJHRhcmdldCk7DQoJCWlmICgkZm91bmQpDQoJCXsNCgkJCXN3aXRjaCgkcmV0dXJuKQ0KCQkJew0KCQkJCWNhc2UgMToNCgkJCQkJLy8gcmV0dXJuIGEgbGluaw0KCQkJCQlpZiAoaXNzZXQoc2VsZjo6JHskdGFyZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX1bJGdldF0pKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gc2VsZjo6JHskdGFyZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX1bJGdldF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQkvLyByZXR1cm4gYWxsIGxpbmtzDQoJCQkJCXJldHVybiBzZWxmOjokeyR0YXJnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfTsNCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdCA6DQoJCQkJCS8vIGp1c3QgY29uZmlybSB0aGF0IGl0IGlzIHNldA0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY291bnREb3dubG9hZCgkY291bnRlciwgJGZpbGVuYW1lKQ0KCXsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkkb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAxMjgpOw0KCQkkY291bnRlciA9IGpzb25fZGVjb2RlKHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoJGNvdW50ZXIpLCAiXDAiKSk7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY291bnRlcikpDQoJCXsNCgkJCSRjb3VudGVyLT5maWxlbmFtZSA9ICRmaWxlbmFtZTsNCgkJCS8vIHNldCB0aGUgZGF0ZSBvYmplY3QNCgkJCSRkYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsJ2NvdW50ZXInKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc2VybW9uJykgLiAnID0gJy4gKGludCkgJGNvdW50ZXItPnNlcm1vbik7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdmaWxlbmFtZScpIC4gJyA9ICcuICRkYi0+cXVvdGUoJGNvdW50ZXItPmZpbGVuYW1lKSk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkc3RhdGlzdGljID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJLy8gYWxyZWFkeSBoYXMgYW4gZW50cnkNCgkJCQkkc3RhdGlzdGljLT5jb3VudGVyKys7DQoJCQkJJHN0YXRpc3RpYy0+bW9kaWZpZWQgPSAkZGF0ZS0+dG9TcWwoKTsNCgkJCQkvLyB1cGRhdGUgdGhlIGVudHJ5DQoJCQkJcmV0dXJuICRkYi0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJHN0YXRpc3RpYywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IGEgbmV3IGVudHJ5DQoJCQkJJGNvdW50ZXItPmNvdW50ZXIgPSAxOw0KCQkJCSRjb3VudGVyLT5wdWJsaXNoZWQgPSAxOw0KCQkJCSRjb3VudGVyLT5jcmVhdGVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJJGNvdW50ZXItPmFjY2VzcyA9IDE7DQoJCQkJJGNvdW50ZXItPnZlcnNpb24gPSAxOw0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRkb25lID0gJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9zdGF0aXN0aWMnLCAkY291bnRlcik7DQoJCQkJLy8gaWYgZG9uZSByZXR1cm4gbGFzdCB1c2VkIGlkDQoJCQkJaWYgKCRkb25lKQ0KCQkJCXsNCgkJCQkJJG5ld0lkID0gICRkYi0+aW5zZXJ0aWQoKTsNCgkJCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQkJCXJldHVybiBzZWxmOjpzZXRBc3NldCgkbmV3SWQsJ3N0YXRpc3RpYycpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlSW5mbygka2V5KQ0KCXsNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRrZXkpICYmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGtleSwgdHJ1ZSkpID09PSAka2V5KSkNCgkJew0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJCSRvcGVuZXIgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcigkbG9jYWxrZXksIDEyOCk7DQoJCQkka2V5ID0gcnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygka2V5KSwgIlwwIik7DQoJCQkvLyBsb2FkIHRoZSBsaW5rcyBmcm9tIHRoZSBkYXRhYmFzZQ0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCdzaXplJyk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9sb2NhbF9saXN0aW5nJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgna2V5JykgLiAnID0gJy4gJGRiLT5xdW90ZSgka2V5KSk7DQogCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJGluZm8gPSBhcnJheSgpOw0KCQkJCS8vIGdldCB0aGUgc2l6ZSBvZiB0aGUgZmlsZQ0KCQkJCSRpbmZvWydmaWxlc2l6ZSddID0gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCQkJLy8gZ2V0IHRoZSBtaW1lIHR5cGUNCgkJCQkkaW5mb1sndHlwZSddID0gU3VwZXJfX19mMTFkYzc5MF83MTNlXzQ3MDZfOWE4NV9hMzE4ZWQzYWQ1NmVfX19Qb3dlcjo6bWltZVR5cGUoJGtleSk7DQoJCQkJLy8gcmV0dXJuIGluZm8NCgkJCQlyZXR1cm4gJGluZm87DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRGaWxlTmFtZSgmJHNlcm1vbiwgJGZpbGUsICR0eXBlKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGZpbGUgbmFtZSBhbmQgZmlsZSB0eXBlDQoJCSRmaWxlID0gc3RyX3JlcGxhY2UoJ1ZETV9wTGVLX2gwdUVyLycsICcnLCAkZmlsZSk7DQoJCSRmaWxlVHlwZSA9IHBhdGhpbmZvKCRmaWxlLCBQQVRISU5GT19FWFRFTlNJT04pOw0KCQlpZiAoJGZpbGVUeXBlKQ0KCQl7DQoJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCcuJy4kZmlsZVR5cGUsICcnLCAkZmlsZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZmlsZVR5cGUgPSAnZXJyb3InOw0KCQl9DQoJCS8vIG5vdyBidWlsZCBkb3dubG9hZCBuYW1lDQoJCSRkb3dubG9hZE5hbWUgPSBhcnJheSgpOw0KCQkvLyBidWlsZCB0aGUgRG93bmxvYWQgRmlsZSBOYW1lIC0gZmlyc3QgYWRkIHRoZSBwcmVhY2hlciBuYW1lIGlmIHNldA0KCQlpZiAoJHNlcm1vbi0+cHJlYWNoZXIpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+cHJlYWNoZXJfbmFtZSwnVScpOw0KCQl9DQoJCS8vIGFkZCB0aGUgc2VyaWVzIG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5zZXJpZXMpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+c2VyaWVzX25hbWUsJ0YnKTsNCgkJfQ0KCQkvLyBhZGQgdGhlIGNhdGVnb3J5IG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5jYXRpZCAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5jYXRlZ29yeSkpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+Y2F0ZWdvcnksICdGJyk7DQoJCX0NCgkJaWYgKCdkcm9wYm94X21hbnVhbCcgPT0gJHR5cGUgfHwgJ2xvY2FsJyA9PSAkdHlwZSkNCgkJew0KCQkJLy8gYWRkIHRoZSBtYWluIGZpbGUgbmFtZQ0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5uYW1lLCdGJyk7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRmaWxlLCdGJyk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPm5hbWUsJ0YnKTsNCgkJCWlmICgnZXJyb3InID09ICRmaWxlVHlwZSB8fCBzdHJwb3MoJz8nLCAkZmlsZVR5cGUpICE9PSBmYWxzZSB8fCBzdHJwb3MoJyYnLCAkZmlsZVR5cGUpICE9PSBmYWxzZSApDQoJCQl7DQoJCQkJJGZpbGVUeXBlID0gJ21wMyc7IC8vIFRPRE8gd2UgZG9uJ3Qga25vdyB0aGUgdXJsIGZpbGV0eXBlIChzZXR0aW5nIHRvIG1wMyBidXQgdGhpcyBjb3VsZCBiZSB3cm9uZykNCgkJCX0NCgkJfQ0KCQkvLyBub3cgYnVpbGQgdGhlIGRvd25sb2FkIGZpbGUgbmFtZQ0KCQlyZXR1cm4gaW1wbG9kZSgnX18nLCAkZG93bmxvYWROYW1lKS4nLicuJGZpbGVUeXBlOw0KCX0NCg0KCS8qKg0KCSogCWNoZWNrIEV4dGVybmFsIFNvdXJjZSBMb2NhbCBMaXN0aW5nIChkbyB3ZSBoYXZlIHRoZSBmaWxlcykNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrRXh0ZXJuYWxTb3VyY2VMb2NhbExpc3RpbmcoJHR5cGUsICRnZXQgPSAnbGlua3MnKQ0KCXsNCgkJLy8gZ2V0IHRoZSBsb2NhbCBsaW5rcw0KCQlpZiAoaXNzZXQoc2VsZjo6JHskZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7JGdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9KSkNCgkJew0KCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRhcmdldCA9IGFycmF5KCdsaW5rcycgPT4gJ3VybCcsICdzZWxlY3QnID0+ICduYW1lJyk7DQoJCQkkYnVpbGQgPSBhcnJheSggJ2F1dG8nID0+IDIsICdtYW51YWwnID0+IDEpOw0KCQkJaWYgKGlzc2V0KCRidWlsZFskdHlwZV0pKQ0KCQkJew0KCQkJCS8vIGxvYWQgdGhlIGxpbmtzIGZyb20gdGhlIGRhdGFiYXNlDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdrZXknLCAkdGFyZ2V0WyRnZXRdKSkpOw0KCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2xvY2FsX2xpc3RpbmcnKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYnVpbGQnKSAuICcgPSAnLiAoaW50KSAkYnVpbGRbJHR5cGVdKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKSAuICcgPSAxJyk7IC8vIFRPRE8gd2UgY2FuIG5vdyBsaW1pdCB0aGUgbGlua3MgdG8gYWNjZXNzIGdyb3Vwcw0KIAkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiR7JGdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9ID0gJGRiLT5sb2FkQXNzb2NMaXN0KCdrZXknLCAkdGFyZ2V0WyRnZXRdKTsNCgkJCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgdGhlIGxvY2Fsa2V5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9jYWxrZXkgPSBhcnJheSgpOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYWxLZXkoJHR5cGUgPSAnYmFzaWNfa2V5JykNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JGxvY2Fsa2V5WyR0eXBlXSkpDQoJCXsNCgkJCS8vIGdldCB0aGUgbWFpbiBrZXkNCgkJCXNlbGY6OiRsb2NhbGtleVskdHlwZV0gPSBDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJHR5cGUsICdsb2NhbEtleTM0ZmRXRWtsJyk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2NhbGtleVskdHlwZV07DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbFNvdXJjZSgkaWQsICR0YXJnZXQgPSAwLCAkdHlwZSA9IGZhbHNlLCAkZm9yY2UgPSBmYWxzZSwgJHNsZXV0ZWwgPSBudWxsKQ0KCXsNCgkJJHNvdXJjZSA9IHNlbGY6OmdldFZhcignZXh0ZXJuYWxfc291cmNlJywgKGludCkgJGlkLCAnaWQnLCAnZXh0ZXJuYWxzb3VyY2VzJyk7DQoJCWlmICgxID09ICRzb3VyY2UpIC8vIERyb3Bib3ggaXMgdGhlIHNvdXJjZQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBmaWxlDQoJCQlKTG9hZGVyOjppbXBvcnQoJ2Ryb3Bib3h1cGRhdGVyJywgSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzJyk7DQoJCQkvLyB1cGRhdGUgdHlwZXMNCgkJCSR0eXBlcyA9IGFycmF5KCdtYW51YWwnLCdhdXRvJyk7DQoJCQkvLyBva2F5IG5vdyB1cGRhdGUgdGhpcyB0eXBlDQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHR5cGUpICYmIGluX2FycmF5KCR0eXBlLCR0eXBlcykpDQoJCQl7DQoJCQkJJGRyb3Bib3ggPSBuZXcgRHJvcGJveHVwZGF0ZXIoKTsNCgkJCQlpZiAoJGRyb3Bib3gtPnVwZGF0ZSgkaWQsICR0YXJnZXQsICR0eXBlLCAkZm9yY2UsICRzbGV1dGVsKSkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlzZWxmOjpzZXRVcGRhdGVFcnJvcigkaWQsICRkcm9wYm94LT5nZXRFcnJvcnMoKSk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCXNlbGY6OnNldFVwZGF0ZUVycm9yKCRpZCwgYXJyYXkoVGV4dDo6XygnVGhlIGV4dGVybmFsIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQuJykpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U291cmNlU3RhdHVzKCRpZCkNCgl7DQoJCS8vIGZpc3QgZ2V0IGVycm9ycyBpZiBhbnkgaXMgZm91bmQNCgkJJGVycm9ycyA9IGFycmF5KCk7DQoJCWlmICgkdGFyZ2V0cyA9IHNlbGY6OmdldEV4dGVybmFsTGlzdGluZ1VwZGF0ZUtleXMoJGlkLCBudWxsLCAxKSkNCgkJew0KCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJHRhcmdldCkNCgkJCXsNCgkJCQkka2V5ID0gcHJlZ19yZXBsYWNlKCcvWyAsXSsvJywgJycsIHRyaW0oJHRhcmdldCkpOw0KCQkJCWlmICgkZXJyb3IgPSBzZWxmOjpnZXRVcGRhdGVFcnJvcigwLCAka2V5KSkNCgkJCQl7DQoJCQkJCSRlcnJvcnNbXSA9ICRlcnJvcjsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gY2hlY2sgd2hlbiB3YXMgdGhlIGxhc3QgdXBkYXRlDQoJCSR1cGRhdGVJbmZvID0gc2VsZjo6dXBkYXRlSW5mbygkaWQpOw0KCQlpZiAoISR1cGRhdGVJbmZvKQ0KCQl7DQoJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdUaGlzIHNvdXJjZSBoYXMgbm8gbG9jYWwgbGlzdGluZyBzZXQuJyk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIHJldHVybiBzdHJpbmcNCgkJaWYgKGlzc2V0KCR1cGRhdGVJbmZvWydsYXN0J10pIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlcnJvcnMpKQ0KCQl7DQoJCQkkYm9keSA9IGFycmF5KCk7DQoJCQkvLyBncmVhdCB3ZSBoYXZlIHNvdXJjZSBzdGF0dXMNCgkJCWlmIChpc3NldCgkdXBkYXRlSW5mb1snbGFzdCddKSkNCgkJCXsNCgkJCQkkYm9keVtdID0gJzxoMz4nLiBUZXh0OjpfKCdMaXN0aW5nIEluZm8nKSAuICc8L2gzPic7DQoJCQkJJGJvZHlbXSA9ICc8cD48Yj4nLiBUZXh0OjpfKCdMYXN0IFVwZGF0ZScpIC4gJzo8L2I+IDxlbT4nLiR1cGRhdGVJbmZvWydsYXN0J107DQoJCQkJJGJvZHlbXSA9ICc8L2VtPjxiciAvPjxiPicuIFRleHQ6Ol8oJ051bWJlciBvZiBGaWxlcyBMaXN0ZWQnKSAuICc6PC9iPiA8ZW0+Jy4kdXBkYXRlSW5mb1sncXR5J107DQoJCQkJJGJvZHlbXSA9ICc8L2VtPjwvcD4nOw0KCQkJfQ0KCQkJLy8gbm93IHNldCBhbnkgZXJyb3JzIGZvdW5kDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9ycykpDQoJCQl7DQoJCQkJJGJvZHlbXSA9ICc8aDM+Jy4gVGV4dDo6XygnTm90aWNlIScpIC4gJzwvaDM+JzsNCgkJCQkkYm9keVtdID0gaW1wbG9kZSgnJywgJGVycm9ycyk7DQoJCQl9DQoJCQlyZXR1cm4gJzxhIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1zdWNjZXNzIiBocmVmPSIjc291cmNlLXN0YXR1cycuJGlkLiciIGRhdGEtdG9nZ2xlPSJtb2RhbCI+Jy5UZXh0OjpfKCdWaWV3IFVwZGF0ZSBTdGF0dXMnKS4nPC9hPicgDQoJCQkJLiBIdG1sOjpfKCdib290c3RyYXAucmVuZGVyTW9kYWwnLCAnc291cmNlLXN0YXR1cycuJGlkLCBhcnJheSgndGl0bGUnID0+IFRleHQ6Ol8oJ1NvdXJjZSBTdGF0dXMgUmVwb3J0LicpKSwgaW1wbG9kZSgnJywgJGJvZHkpKTsNCgkJfQ0KIAkJLy8gbm8gc3RhdHVzIGZvdW5kDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZUluZm8oJGlkKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmNyZWF0ZWQnLCdhLm1vZGlmaWVkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbG9jYWxfbGlzdGluZycsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmV4dGVybmFsX3NvdXJjZScpIC4gJyA9ICcgLiAoaW50KSAkaWQpOw0KIAkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJHF0eSA9ICRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkZGF0YSA9ICRkYi0+bG9hZFJvd0xpc3QoKTsNCgkJCSRsYXN0ID0gMDsNCgkJCWZvcmVhY2ggKCRkYXRhIGFzICRkYXRlcykNCgkJCXsNCgkJCQlmb3JlYWNoICgkZGF0ZXMgYXMgJGRhdGUpDQoJCQkJew0KCQkJCQkkdGltZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCQkJCWlmICgkdGltZSA+ICRsYXN0KQ0KCQkJCQl7DQoJCQkJCQkkbGFzdCA9ICR0aW1lOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJJGluZm9bJ3F0eSddID0gKGludCkgJHF0eTsNCgkJCSRpbmZvWydsYXN0J10gPSBzZWxmOjpmYW5jeURhdGUoJGxhc3QpOw0KCQkJcmV0dXJuICRpbmZvOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwZGF0ZUVycm9yKCRpZCwgJGZpbGVLZXkgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHVwZGF0ZSBlcnJvciBmcm9tIGZpbGUNCgkJaWYgKCRmaWxlS2V5KQ0KCQl7DQoJCQkkZmlsZV9wYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgncGF0aCcsICd1cGRhdGVlcnJvcicsICd0eHQnLCAkZmlsZUtleSwgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IpOw0KCQkJLy8gY2hlY2sgaWYgaXQgaXMgc2V0DQoJCQlpZiAoKCR0ZXh0ID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0Q29udGVudCgkZmlsZV9wYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQkvLyBubyBlcnJvciBvbiBzdWNjZXNzDQoJCQkJaWYgKCdzdWNjZXNzJyAhPSAkdGV4dCkNCgkJCQl7DQoJCQkJCXJldHVybiAkdGV4dDsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZWxzZWlmIChpc3NldChzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkpDQoJCXsNCgkJCXJldHVybiAnPHVsPjxsaT4nLmltcGxvZGUoJzwvbGk+PGxpPicsIHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkuJzwvbGk+PC91bD4nOw0KCQl9DQoJCXJldHVybiBUZXh0OjpfKCdVbmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFVwZGF0ZUVycm9yKCRpZCwgJGVycm9yQXJyYXkpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9yQXJyYXkpICYmICRpZCA+IDApDQoJCXsNCgkJCWZvcmVhY2ggKCRlcnJvckFycmF5IGFzICRlcnJvcikNCgkJCXsNCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkpDQoJCQkJew0KCQkJCQlzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0gPSBhcnJheSgpOw0KCQkJCX0NCgkJCQlzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF1bXSA9ICRlcnJvcjsNCgkJCX0NCgkJfQ0KCX0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1jdXJsV29ya2VySGVscGVyXQ0KW0NVU1RPTUNPREU9bG9ja2VyXQ==', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvY2hyaXN0aWFuL0pvb21sYS1TZXJtb24tRGlzdHJpYnV0b3IvcmF3L2JyYW5jaC9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KVGhlIGJlc3Qgd2F5IHRvIHNlZSBhbGwgeW91ciBvcHRpb25zIGlzIHRvIGluc3RhbGwgdGhpcyBjb21wb25lbnQgb24geW91IEpvb21sYSB3ZWJzaXRlIGFuZCB0ZXN0IGFsbCBmZWF0dXJlcyB5b3Vyc2VsZi4gSGVyZSBpcyBhIFtkaXJlY3QgZG93bmxvYWQgbGlua10oaHR0cHM6Ly9naXQudmRtLmRldi9jaHJpc3RpYW4vSm9vbWxhLVNlcm1vbi1EaXN0cmlidXRvci9hcmNoaXZlL21hc3Rlci56aXApDQoNCiAqKklmIHlvdSBsaWtlIG91ciBjb21wb25lbnQgcGxlYXNlIHJhdGUgaXQgb24gdGhlIFtKb29tbGEgSW5kZXhdKGh0dHA6Ly9leHRlbnNpb25zLmpvb21sYS5vcmcvZXh0ZW5zaW9ucy9leHRlbnNpb24vbGl2aW5nL3JlbGlnaW9uL3Nlcm1vbi1kaXN0cmlidXRvcikqKg0KDQojIyMgRXhhbXBsZSBXZWJzaXRlLCBUaGF0IEhhcyBPdmVyIDYwMDAgQXVkaW8gRmlsZXMNCg0KW0xvdWRWb2ljZS5vcmddKGh0dHA6Ly93d3cubG91ZHZvaWNlLm9yZykNCltUcnVlQ2hyaXN0aWFuLkNodXJjaF0oaHR0cHM6Ly90cnVlY2hyaXN0aWFuLmNodXJjaC8pDQoNCiMjIyBTb21lIFZpZGVvIERlbW9uc3RyYXRpb25zDQoNCisgW1NldHVwIG92ZXJ2aWV3XShodHRwczovL3lvdXR1LmJlL3lNUHAxQ3AzV18wP3Q9MjBtOHMpDQorIFtTZXR1cCBEcm9wYm94XShodHRwczovL3lvdXR1LmJlL2J0cEtGRGswLWRJKQ0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZSA6aG91cmdsYXNzOg0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', 1, '', 'A sermon distributor that links to Dropbox.', '', '', 'SermonDistributor (public) J4', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/christian/Joomla-Sermon-Distributor/raw/branch/4.x/sermondistributor_update_server.xml', 'https://www.vdm.io/', '', 'CTe2AYh1RvzNnJ5tek4WGInU9PnFW5UVgUE6+8jwUds=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 22, '', 1, 51),
(84, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', '', 1, '', 1, '{\"addcontributors0\":{\"name\":\"CrossWire\",\"title\":\"Modules\",\"email\":\"sword-support@crosswire.org\",\"website\":\"https:\\/\\/wiki.crosswire.org\\/\",\"use\":\"2\",\"show\":\"3\"}}', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/getbible_j5', 'getBible.txt', '', '', 'Vast Development Method', '5.0.12', 'Copyright (C) 2015. All Rights Reserved', '2015-12-03 01:42:15', '', '0XN4CcxFXCsxCXgMFjh2D0Dwqdy1AIqsbGC0LVszx2Q=', 'I6X7uvf/xn8zG2BHZx2oLsXwWfr4JG4DreGhyvNZFg8=', '', 'VDSl2o9iyJbk2J9aJCjxhYrp/G6JqRZkevdNX894bNc=', '', '', '', 1, '', 'Welcome to the next level of scripture engagement - The Bible for Joomla! Our purpose is to bring the Word of God to every person, in their native language, entirely free. This isn\'t just a typical extension; it\'s a groundbreaking tool developed to span language divides and deliver a rich, customizable Bible study experience to users worldwide.\r\n\r\nWith an impressive array of 80 translations, our Joomla extension allows people from all corners of the globe to read, comprehend, and meditate on the Holy Scriptures in their preferred language. Moreover, we offer the unique opportunity for individuals to host the Bible on their own website, further extending the reach of the Word.\r\n\r\nWe\'ve integrated robust features such as note-taking, tagging, and a search function, to enhance your interaction with the Scriptures. This allows users to immerse themselves in the text, crafting a personal journey through the Bible that can be revisited in future sessions. Furthermore, our innovative linker system assigns each visitor a unique identifier (GUID) - no login required. This means you can create notes, select favorite verses, and even share sessions, while maintaining control over your personalized content.\r\n\r\nA distinctive feature of our application is the integration with OpenAI. This advanced capability allows website owners to create custom prompts to interact with OpenAI using text from any translation. This function allows you to ask questions, gain clarity, and deepen your understanding of the Scriptures in an engaging and user-friendly manner.\r\n\r\nIn essence, The Bible for Joomla is designed to transform how the Word of God is shared, studied, and comprehended. Its comprehensive features, combined with a user-friendly interface, make it an essential tool for individuals, churches, and website owners alike. Join us on this journey of faith as we make the wisdom and guidance of the Scriptures accessible to all, one verse, one language, and one website at a time.', 'joomla@vdm.io', '', 'https://vdm.bz/get-bible', 'rPFLeDAp4QRfwLLtJwZnujlR11b2sDDB4wJQVzYSAbU=', '/var/git_', 'bbe46e21-60a6-4fb2-8010-97f30d01472d', 'images/getBible.jpg', '', 'https://git.vdm.dev/getBible/joomla-component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-04-25 15:35:17', '', 'Get Bible', 'Getbible', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSAqIExvYWQgdGhlIHNjcmlwdHVyZSBpbnRvIGNvbnRlbnQNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICYkcm93ICAgICBUaGUgYXJ0aWNsZSBvYmplY3QuICBOb3RlICRhcnRpY2xlLT50ZXh0IGlzIGFsc28gYXZhaWxhYmxlDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJHBsdWdpbiAgIFRoZSBwbHVnaW4gcGFyYW1zDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMi4wLjENCgkgKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkU2NyaXB0dXJlKG9iamVjdCAmJHJvdywgb2JqZWN0ICRwbHVnaW4pOiB2b2lkDQoJew0KCQkvLyBnZXQgY2FsbCBzdHJpbmcNCgkJJGNhbGxfY2xhc3MgPSAkcGx1Z2luLT5nZXQoJ2NhbGxfY2xhc3MnLCAnZ2V0QmlibGUnKTsNCg0KCQkvLyBTaW1wbGUgcGVyZm9ybWFuY2UgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYm90IHNob3VsZCBwcm9jZXNzIGZ1cnRoZXINCgkJaWYgKHN0cnBvcygkcm93LT50ZXh0LCAkY2FsbF9jbGFzcykgPT09IGZhbHNlKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlTdXBlcl9fXzExODkyY2ZhXzM3NGVfNGUzZl9iMGJjXzUzMTg3MWM4MjJkOV9fX1Bvd2VyOjpfKCdHZXRCaWJsZS5Mb2FkZXInKS0+c2V0KCRyb3csICRwbHVnaW4pOw0KCX0=', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9Z2V0QmlibGVSZW1vdmVPbGRMaWJdDQpbQ1VTVE9NQ09ERT1waHBDb25maWd1cmF0aW9uQ2hlY2tDYWxsKyR0aGlzLT5hcHBd', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvam9vbWxhLWNvbXBvbmVudC9yYXcvYnJhbmNoLzUuMC9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJHZXRCaWJsZSIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', 1, '', 'The Bible for Joomla', 'Q1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlX29uX2xpbmtlcl9hbmRfdGFnDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlKGxpbmtlciwgdGFnKTsNCg0KQ1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdmVyc2Vfb25fdmVyc2VfYW5kX2FiYnJldmlhdGlvbg0KT04gI19fW1tbY29tcG9uZW50XV1dX3ZlcnNlKHZlcnNlLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV9ib29rX29uX25yX2FuZF9hYmJyZXZpYXRpb24NCk9OICNfX1tbW2NvbXBvbmVudF1dXV9ib29rKG5yLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV90YWdfb25fZ3VpZF9hbmRfcHVibGlzaGVkDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnKGd1aWQsIHB1Ymxpc2hlZCk7', '', 'Get Bible J5', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/getBible/joomla-component/raw/branch/5.x/update_server.xml', 'https://getbible.net', '', 'CLMpkr0hmWG0WixbK+MiXAMRzXc19qym7pfWgMP6XNQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"\",\"power_admin_helper\":{\"power_admin_helper0\":{\"power\":\"11892cfa-374e-4e3f-b0bc-531871c822d9\",\"as\":\"GetBibleFactory\",\"build\":\"1\"},\"power_admin_helper1\":{\"power\":\"4612af84-5a42-4ea5-87bf-9d79cc19c330\",\"as\":\"GiteaFactory\",\"build\":\"1\"}},\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 23, '', 1, 53),
(85, 1, 1, 1, '', 1, '', '', '', 1, 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', 1, 1, 1, 1, '', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/jcb_j5', 'JCB.txt', '', '', 'Vast Development Method', '5.0.0-rc1', 'Copyright (C) 2015 Vast Development Method. All rights reserved.', '2015-04-30 12:04:35', '', 'r35h7GKtIY16mKdfOZcYz5p1gBuLfGZ1D/zsj9xZsSI=', 'P2XujNqxhLXCvrszLHvzLOZtmwtZ0G/sSd/v9q8y91U=', '', 'Rr66kUKLlDlnyYgUuJHgPHClIrU3q9w6KTgapmoY8sI=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEyMHB4OyB9DQouZmllbGRMYXJnZSB7IHdpZHRoOiAzMjBweDsgfQ0KLmZpZWxkTWlkIHsgd2lkdGg6IDgwcHg7IH0NCi5maWVsZEZ1bGwgeyB3aWR0aDogMTAwJTsgfQ0KLmZpZWxkU21hbGwgeyB3aWR0aDogNjBweDsgfQ0KY29kZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAzcHg7fQ==', '', '', 1, '', 'The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!', 'joomla@vdm.io', '', 'https://vdm.bz/component-builder-self', 'mbosbpYKPxqf1TgM4T3HdThzA4Csx7uJ++3WlVmONfg=', '', '3d694e49-3821-41b3-a8b5-f262506e9673', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '&#10003', '2024-04-27 10:55:57', 2, 'Component Builder', 'Componentbuilder', 'VDM', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlckhlbHBlckJvdGhd', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', 'W0NVU1RPTUNPREU9Y29tcG9uZW50QnVpbGRlclByZWZsaWdodFVwZGF0ZUpmaXZlXQ0KW0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclJlYWRNZV0=', 1, '', 'Builds Complex Joomla Components', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMSW5zdGFsbF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMVW5pbnN0YWxsXQ==', 'Component Builder (Public) J5', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', 3, 2, 'https://git.vdm.dev/joomla/Component-Builder/raw/branch/5.x/componentbuilder_update_server.xml', 'https://dev.vdm.io', '', 'OhMBUNLb8a0uJIyDBTR7DHydbI+odzre/AwNBAP5uOY=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"0\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_site_helper\":[]}}', 1, 42, '', 1, 1),
(86, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn', '', 'default.txt', '', '', 'VDM', '5.0.0', 'Copyright (C) 2015. All Rights Reserved', '2024-02-02 16:07:26', '', 'nBiES/HRMHYRdi2aYge8F1G3fOI436PehiXXUty6J7A=', '3Ek9cjcehKnHQLNiBLLhCpF+h53s2yWSqW97IFT/3Fo=', '', 'I6IvNpSaDtIK17mSc/OrqFFnJMajZPYaeBSCIqgLmGg=', '', '', '', 1, '', '', 'joomla@vdm.io', '', '', 'MLFFvGPVwPR5C7cK9g1SKaJvtolooz9HTTbPH91lhb0=', '', '3745af8f-f96b-4e17-831e-eb4062cd4389', 'images/demo300.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Hello-World-Component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-03-07 13:38:41', '', 'Hello World', 'HelloWorld', 'JCB', 4, '', '', 'W0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KW0NVU1RPTUNPREU9cmVtb3ZlRm9sZGVyXQ==', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQpbQ1VTVE9NQ09ERT1yZWFkTUVjb250cmlidXRvcnNd', '', '', 'Hello World', '', '', 'HelloWorld (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Hello-World-Component/master/helloworld_updateserver.xml', 'https://www.vdm.io', '', 'IYXEGnRpJLAhUHUm1R0kWAwYZdCVUAXn7W5LPacqCgM=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 3, '', 1, 48),
(87, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', '', 1, '', 1, '{\"addcontributors0\":{\"name\":\"CrossWire\",\"title\":\"Modules\",\"email\":\"sword-support@crosswire.org\",\"website\":\"https:\\/\\/wiki.crosswire.org\\/\",\"use\":\"2\",\"show\":\"3\"}}', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/getbible_j4', 'getBible.txt', '', '', 'Vast Development Method', '4.0.12', 'Copyright (C) 2015. All Rights Reserved', '2015-12-03 01:42:15', '', 'RR4KRth9vUzGwahsXvGuDlE7/MZqGaa2oIVUysoj+Cc=', '5ueRIZmVndaaM0V//2OhWRG9EqiL+xkS8D1upoNI4n0=', '', 'zlDXIGUCHWjXN/D08bLet3sQs9jOE+coYn5i/vK1JlA=', '', '', '', 1, '', 'Welcome to the next level of scripture engagement - The Bible for Joomla! Our purpose is to bring the Word of God to every person, in their native language, entirely free. This isn\'t just a typical extension; it\'s a groundbreaking tool developed to span language divides and deliver a rich, customizable Bible study experience to users worldwide.\r\n\r\nWith an impressive array of 80 translations, our Joomla extension allows people from all corners of the globe to read, comprehend, and meditate on the Holy Scriptures in their preferred language. Moreover, we offer the unique opportunity for individuals to host the Bible on their own website, further extending the reach of the Word.\r\n\r\nWe\'ve integrated robust features such as note-taking, tagging, and a search function, to enhance your interaction with the Scriptures. This allows users to immerse themselves in the text, crafting a personal journey through the Bible that can be revisited in future sessions. Furthermore, our innovative linker system assigns each visitor a unique identifier (GUID) - no login required. This means you can create notes, select favorite verses, and even share sessions, while maintaining control over your personalized content.\r\n\r\nA distinctive feature of our application is the integration with OpenAI. This advanced capability allows website owners to create custom prompts to interact with OpenAI using text from any translation. This function allows you to ask questions, gain clarity, and deepen your understanding of the Scriptures in an engaging and user-friendly manner.\r\n\r\nIn essence, The Bible for Joomla is designed to transform how the Word of God is shared, studied, and comprehended. Its comprehensive features, combined with a user-friendly interface, make it an essential tool for individuals, churches, and website owners alike. Join us on this journey of faith as we make the wisdom and guidance of the Scriptures accessible to all, one verse, one language, and one website at a time.', 'joomla@vdm.io', '', 'https://vdm.bz/get-bible', 'P/9mu1sMoY6DTUiVy8dBt6OYYnw1ov6SL/DxzJl4eXw=', '/var/git_', '626c492a-25c8-4567-a9d0-1e2c80789308', 'images/getBible.jpg', '', 'https://git.vdm.dev/getBible/joomla-component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-04-25 15:35:10', '', 'Get Bible', 'Getbible', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSAqIExvYWQgdGhlIHNjcmlwdHVyZSBpbnRvIGNvbnRlbnQNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICYkcm93ICAgICBUaGUgYXJ0aWNsZSBvYmplY3QuICBOb3RlICRhcnRpY2xlLT50ZXh0IGlzIGFsc28gYXZhaWxhYmxlDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJHBsdWdpbiAgIFRoZSBwbHVnaW4gcGFyYW1zDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMi4wLjENCgkgKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkU2NyaXB0dXJlKG9iamVjdCAmJHJvdywgb2JqZWN0ICRwbHVnaW4pOiB2b2lkDQoJew0KCQkvLyBnZXQgY2FsbCBzdHJpbmcNCgkJJGNhbGxfY2xhc3MgPSAkcGx1Z2luLT5nZXQoJ2NhbGxfY2xhc3MnLCAnZ2V0QmlibGUnKTsNCg0KCQkvLyBTaW1wbGUgcGVyZm9ybWFuY2UgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYm90IHNob3VsZCBwcm9jZXNzIGZ1cnRoZXINCgkJaWYgKHN0cnBvcygkcm93LT50ZXh0LCAkY2FsbF9jbGFzcykgPT09IGZhbHNlKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlTdXBlcl9fXzExODkyY2ZhXzM3NGVfNGUzZl9iMGJjXzUzMTg3MWM4MjJkOV9fX1Bvd2VyOjpfKCdHZXRCaWJsZS5Mb2FkZXInKS0+c2V0KCRyb3csICRwbHVnaW4pOw0KCX0=', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9Z2V0QmlibGVSZW1vdmVPbGRMaWJdDQpbQ1VTVE9NQ09ERT1waHBDb25maWd1cmF0aW9uQ2hlY2tDYWxsKyR0aGlzLT5hcHBd', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvam9vbWxhLWNvbXBvbmVudC9yYXcvYnJhbmNoLzUuMC9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJHZXRCaWJsZSIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', 1, '', 'The Bible for Joomla', 'Q1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlX29uX2xpbmtlcl9hbmRfdGFnDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlKGxpbmtlciwgdGFnKTsNCg0KQ1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdmVyc2Vfb25fdmVyc2VfYW5kX2FiYnJldmlhdGlvbg0KT04gI19fW1tbY29tcG9uZW50XV1dX3ZlcnNlKHZlcnNlLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV9ib29rX29uX25yX2FuZF9hYmJyZXZpYXRpb24NCk9OICNfX1tbW2NvbXBvbmVudF1dXV9ib29rKG5yLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV90YWdfb25fZ3VpZF9hbmRfcHVibGlzaGVkDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnKGd1aWQsIHB1Ymxpc2hlZCk7', '', 'Get Bible J4', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/getBible/joomla-component/raw/branch/4.x/update_server.xml', 'https://getbible.net', '', 'sarvt+VcI4GQlwrmL1w3kRhszBhGjIZwPdDFkiP+TvI=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"\",\"power_admin_helper\":{\"power_admin_helper0\":{\"power\":\"11892cfa-374e-4e3f-b0bc-531871c822d9\",\"as\":\"GetBibleFactory\",\"build\":\"1\"},\"power_admin_helper1\":{\"power\":\"4612af84-5a42-4ea5-87bf-9d79cc19c330\",\"as\":\"GiteaFactory\",\"build\":\"1\"}},\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 12, '', 1, 53),
(88, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 3, 3, 'Llewellyn van der Merwe', '/var/www/sermondistributor_j5', 'SD.txt', '', '', 'Vast Development Method', '5.0.0-beta1', 'Copyright (C) 2015. All Rights Reserved', '2015-10-22 16:59:20', '', 'sCJHDIYwBV3t4M72i8g316yIPusajHN3qfiNBvsCg/g=', '18hUvFIOBZv3HelZKP4Ww7twWuxFqe65V3FxJmgMVzk=', '', '/WHc+nIN3Myh9BMZ9B80n/K9dMUsvO9hP8thR1OwOEY=', '', '', '', 1, '', 'Distributor is a highly advanced sermon distributor that runs on the [Joomla 4.x & 5.x](http://www.joomla.org) framework. You can link a shared folder from Dropbox to the component and use Dropbox as your file host, not to mention the advanced auto builder that gives you the ability to simply load sermons to your website by only adding them to Dropbox.', 'joomla@vdm.io', 1, 'http://vdm.bz/get-sermon-distributor-key', 'aXQ+iPTzl4tip40QGvzIh0EpOLfmTXtBW9L7fzzHTTL6miU3cDvcvQKkgCHv8XRLiVBi3KoxUV0SDXTIM88PKg==', '/var/git_', '2a62e359-1500-4adb-a2b5-f8d97f23d782', 'images/vdm/SD500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Sermon-Distributor', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '&#187;', '2024-03-07 17:17:15', 2, 'Sermon Distributor', 'sermondistributor', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSogCVRoZSBnbG9iYWwgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zID0gZmFsc2U7DQoNCgkvKioNCgkqIAlVcGRhdGUgV2F0Y2hlcg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHVwZGF0ZVdhdGNoID0gMTsNCg0KCS8qKg0KCSogCVVwZGF0ZSBXYXRjaGVyIChpZiBhcnJheSBpcyBvbmx5IG9uZSB2YWx1ZSkNCgkqKi8NCglwdWJsaWMgc3RhdGljICR1cGRhdGVXYXRjaF8gPSAwOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBsaW5rcyBhdXRvDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfYXV0bzsNCg0KCS8qKg0KCSogCVRoZSBleHRlcm5hbCBzb3VyY2UgbGlua3MgbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfbWFudWFsOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gYXV0bw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHNlbGVjdF9leHRlcm5hbHNvdXJjZV9hdXRvOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkc2VsZWN0X2V4dGVybmFsc291cmNlX21hbnVhbDsNCg0KCS8qKg0KCSogCVRoZSB1cGRhdGUgZXJyb3JzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXBkYXRlRXJyb3JzID0gYXJyYXkoKTsNCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQoJLyoqDQoJKiAJZ2V0IERvd25sb2FkIGxpbmtzIG9mIGEgc2VybW9uDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZExpbmtzKCYkc2VybW9uKQ0KCXsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkvLyBkZWNyeXB0IHRoZSB1cmxzDQoJCSRzYWZlID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAxMjgpOw0KCQkvLyBpbnRlcm5hbCBkb3dubG9hZCB1cmwNCgkJJGtleUNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzOw0KCQkka2V5Q291bnRlci0+c2VybW9uID0gJHNlcm1vbi0+aWQ7DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGtleUNvdW50ZXItPnByZWFjaGVyID0gJHNlcm1vbi0+cHJlYWNoZXI7DQoJCX0NCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGtleUNvdW50ZXItPnNlcmllcyA9ICRzZXJtb24tPnNlcmllczsNCgkJfQ0KCQkka2V5Q291bnRlclJBVyA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKGpzb25fZW5jb2RlKCRrZXlDb3VudGVyKSk7DQoJCSRrZXlDb3VudGVyID0gc2VsZjo6YmFzZTY0X3VybGVuY29kZSgka2V5Q291bnRlclJBVyk7DQoJCSR0b2tlbiA9IFNlc3Npb246OmdldEZvcm1Ub2tlbigpOw0KCQkkZG93bmxvYWRVUkwgPSBVcmk6OnJvb3QoKS4naW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9ZG93bmxvYWQuZmlsZSZrZXk9Jy4ka2V5Q291bnRlci4nJnRva2VuPScuJHRva2VuOw0KCQkvLyBjaGVjayBpZiBsb2NhbCAuaHRhY2Nlc3Mgc2hvdWxkIGJlIHNldA0KCQkkc2V0SHRhY2Nlc3MgPSBmYWxzZTsNCgkJJG9uY2xpY2sgPSAnIG9uY2xpY2s9InNlcm1vbkNvdW50ZXIoXCcnLiRrZXlDb3VudGVyUkFXLidcJyxcJ0ZJTEVOQU1FXCcpOyInOw0KCQkvLyBjaGVjayB3aGF0IHNvdXJjZSBvZiBvdXIgbGluaw0KCQlzd2l0Y2ggKCRzZXJtb24tPnNvdXJjZSkNCgkJew0KCQkJY2FzZSAxOg0KCQkJCS8vIGxvY2FsIGZpbGUgZ2V0IGxvY2FsIGZvbGRlciBhbmQgY2hlY2sgaWYgb3V0c2lkZSByb290IChpZiBub3QgdGhlbiBhbGxvdyBkaXJlY3QpDQoJCQkJJGxvY2FsRm9sZGVyID0gQ29tcG9uZW50SGVscGVyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsb2NhbGZvbGRlcicsIEpQQVRIX1JPT1QuJy9pbWFnZXMnKS4nLyc7DQoJCQkJLy8gc2hvdWxkIHdlIGFsbG93IGRpcmVjdCBkb3dubG9hZHMNCgkJCQkkYWxsb3dEaXJlY3QgPSBmYWxzZTsNCgkJCQlpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgc3RycG9zKCRsb2NhbEZvbGRlciwgSlBBVEhfUk9PVCkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGFsbG93RGlyZWN0ID0gdHJ1ZTsNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gVXJpOjpyb290KCkuc3RyX3JlcGxhY2UoSlBBVEhfUk9PVCwgJycsICRsb2NhbEZvbGRlcik7DQoJCQkJCS8vIGluc3VyZSBubyBkb3VibGUgLy8gaXMgaW4gdGhlIFVSTA0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlclVSTCk7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCX0NCgkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBwYXRoIG5hbWUNCgkJCQkkbG9jYWxGb2xkZXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlcik7DQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJzovJywgJzovLycsICRsb2NhbEZvbGRlcik7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPmxvY2FsX2ZpbGVzKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2goJHNlcm1vbi0+bG9jYWxfZmlsZXMgYXMgJGtleSkNCgkJCQkJew0KCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlIHx8ICEkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwka2V5LCdsb2NhbCcpOw0KCQkJCQkJCSRsb2NrZWRGb2xkZXJQYXRoID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGxvY2FsRm9sZGVyLiRrZXkpOw0KCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkbG9ja2VkRm9sZGVyUGF0aCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSAnJzsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGFsbG93RGlyZWN0KQ0KCQkJCQkJew0KCQkJCQkJCSRmaWxlbmFtZSA9ICRrZXk7DQoJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRsb2NhbEZvbGRlclVSTC4ka2V5Ow0KCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCSRzZXRIdGFjY2VzcyA9IHRydWU7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJLy8gRHJvcGJveCBnZXQgZ2xvYmFsIGRyb3Bib3ggc3dpdGNoIA0KCQkJCSRhZGRUb0J1dHRvbiA9IENvbXBvbmVudEhlbHBlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnYWRkX3RvX2J1dHRvbicsIDApOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmJ1aWxkKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPm1hbnVhbF9maWxlcykpDQoJCQkJCXsNCgkJCQkJCS8vIG1hbnVhbCBkcm9wYm94DQoJCQkJCQlmb3JlYWNoKCRzZXJtb24tPm1hbnVhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdtYW51YWwnLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnZHJvcGJveF9tYW51YWwnKTsNCgkJCQkJCQkJLy8gc2hvdWxkIHdlIGVuY3J5cHQgc3RyaW5nIHRoaXMgc3RyaW5nDQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5IHx8IChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwsIHRydWUpKSAhPT0gJGRyb3BVUkwpKSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0DQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkcm9wVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGRyb3BVUkwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGxvY2sgdGhlIGluZm8ga2V5DQoJCQkJCQkJCSRpbmZvS2V5ID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZpbmZvPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkaW5mb0tleSkuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZHJvcFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRrZXkpOw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkcm9wVVJMOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRhZGRUb0J1dHRvbiAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5KSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0IChzbyBkb24ndCBkZWNyeXB0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsICRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRyb3Bib3hfYnV0dG9uc1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJz9kbD0xJywgJz9kbD0wJywgcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoJGRyb3BVUkwpLCAiXDAiKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+YnVpbGQpDQoJCQkJew0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNlcm1vbi0+YXV0b19zZXJtb25zKSkNCgkJCQkJew0KCQkJCQkJLy8gYXV0b21hdGljIGRyb3Bib3gNCgkJCQkJCWZvcmVhY2goJHNlcm1vbi0+YXV0b19zZXJtb25zIGFzICRmaWxlbmFtZSA9PiAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdhdXRvJywxLCRrZXkpOw0KCQkJCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIHNob3VsZCB3ZSBlbmNyeXB0IHN0cmluZyB0aGlzIHN0cmluZw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSB8fCAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkcm9wVVJMLCB0cnVlKSkgIT09ICRkcm9wVVJMKSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldA0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkZHJvcFVSTCA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKCRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBsb2NrIHRoZSBpbmZvIGtleQ0KCQkJCQkJCQkkaW5mb0tleSA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKCRrZXkpOw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGRvd25sb2FkVVJMLicmaW5mbz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGluZm9LZXkpLicmbGluaz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGRyb3BVUkwpLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWU7DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCdsb2NhbEtleTM0ZmRXRWtsJyA9PSAkbG9jYWxrZXkpIC8vIGhtbW0gbm8gZ2xvYmFsIGtleSBoYXMgYmVlbiBzZXQgKHNvIGRvbid0IGRlY3J5cHQpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZHJvcFVSTDsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZygkZHJvcFVSTCksICJcMCIpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBidWlsZCBkcm9wYm94IHN3aXRjaCBpZiBuZWVkZWQNCgkJCQkJCQlpZiAoMSA9PSAkYWRkVG9CdXR0b24gJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZHJvcGJveF9idXR0b25zWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnP2RsPTEnLCAnP2RsPTAnLCAkZHJvcFVSTCk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsIHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIikpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tfZHJvYm94WyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDM6DQoJCQkJLy8gdXJsIGdldCB0aGUgZmlsZSBuYW1lIHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGF1dG8NCgkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJHNlcm1vbi0+dXJsLCd1cmwnKTsNCgkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUpDQoJCQkJew0KCQkJCQkkbG9ja2VkVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJHNlcm1vbi0+dXJsKTsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkb3dubG9hZFVSTC4nJmxpbms9Jy5zZWxmOjpiYXNlNjRfdXJsZW5jb2RlKCRsb2NrZWRVUkwpLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWU7DQoJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlKQ0KCQkJCXsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRzZXJtb24tPnVybDsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJCS8vIHJlbW92ZSB0aGUgdmFsdWVzIG5vIGxvbmdlciBuZWVkZWQNCgkJdW5zZXQoJHNlcm1vbi0+bG9jYWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5tYW51YWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMpOw0KCQl1bnNldCgkc2VybW9uLT51cmwpOw0KCQkvLyBzaG91bGQgd2Ugc2V0IHRoZSBsb2NhbCAuaHRhY2Nlc3MgZm9yIHRoZSBkb3dubG9hZCBmb2xkZXINCgkJaWYgKCRzZXRIdGFjY2VzcykNCgkJew0KCQkJLy8gVE9ETyB3ZSBtYXkgbmVlZCB0byBhZGQgdGhpcyBsYXR0ZXIgdG8gZW5mb3JjZSBkb3dubG9hZCBvZiBmaWxlcy4NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5leHRVcGRhdGVWYWx1ZXMoJGFzQXJyYXkgPSBmYWxzZSkNCgl7DQoJCS8vIGZpbmQgdGhlIG5leHQgdmFsdWUNCgkJJG5leHQgPSBmYWxzZTsNCgkJLy8gZ2V0IGFjdHVhbCB1cGRhdGUgdmFsdWVzDQoJCSR1cGRhdGVzID0gc2VsZjo6Z2V0RXh0ZXJuYWxMaXN0aW5nVXBkYXRlS2V5cygpOw0KCQkvLyBnZXQgbGFzdCB1cGRhdGUNCgkJJHVwZGF0ZVBhdGggPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRQYXRoKCdwYXRoJywgJ3VwZGF0ZWxhc3QnLCAndHh0JywgJ3ZEbScsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJaWYgKCgkbGFzdFVwZGF0ZSA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJHVwZGF0ZVBhdGgsIEZBTFNFKSkgIT09IEZBTFNFICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR1cGRhdGVzKSkNCgkJew0KCQkJLy8gaXMgaXQgdGltZSB0byB3YXRjaA0KCQkJaWYgKHNlbGY6OiR1cGRhdGVXYXRjaF8gPiAwKQ0KCQkJew0KCQkJCS8vIGluY3JlbWVudCB0aGUgd2F0Y2gsIGFzIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIG5ldyByb3VuZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaCsrOw0KCQkJCS8vIG5ldyByb3VuZCBoYXMgc3RhcnRlZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8gPSAwOw0KCQkJfQ0KCQkJLy8gbm93IGNoZWNrIHdoYXQgaXMgbmV4dA0KCQkJJGxhc3RLZXkgPSBhcnJheV9zZWFyY2goJGxhc3RVcGRhdGUsICR1cGRhdGVzKTsNCgkJCWlmICghaXNfbnVsbCgkbGFzdEtleSkpDQoJCQl7DQoJCQkJJG5leHRLZXkgPSAkbGFzdEtleSArIDE7DQoJCQkJaWYgKGlzc2V0KCR1cGRhdGVzWyRuZXh0S2V5XSkpDQoJCQkJew0KCQkJCQkkbmV4dCA9ICR1cGRhdGVzWyRuZXh0S2V5XTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbGFzdCBpdGVtIGluIGFycmF5LCBzbyBuZXh0IHJvdW5kIGFib3V0IHRvIHN0YXJ0DQoJCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8rKzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmVzdCBhbmQgc3RhcnQgd2l0aCB0aGUgZmlyc3Qga2V5DQoJCWlmICghJG5leHQgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHVwZGF0ZXMpKQ0KCQl7DQoJCQkvLyBzYXZlIHRoZSBmaXJzdCBzZXQNCgkJCSRzdGFydCA9IHJlc2V0KCR1cGRhdGVzKTsNCgkJCSRuZXh0ID0gJHN0YXJ0Ow0KCQl9DQoJCS8vIHNhdmUgdG8gZmlsZSBpZiBuZXh0IGlzIGZvdW5kDQoJCWlmICgkbmV4dCkNCgkJew0KCQkJU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6d3JpdGUoJHVwZGF0ZVBhdGgsJG5leHQpOw0KCQkJLy8gY29udmVydCB0byBhcnJheSBvZiBuZWVkZWQNCgkJCWlmICgkYXNBcnJheSkNCgkJCXsNCgkJCQlpZiAoc3RycG9zKCRuZXh0LCAnLCcpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRuZXh0ID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRuZXh0KSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRuZXh0Ow0KCX0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2F2ZUZpbGUoJGRhdGEsICRwYXRoX2ZpbGVuYW1lKQ0KCXsNCgkJcmV0dXJuIFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OndyaXRlKCRwYXRoX2ZpbGVuYW1lLCAkZGF0YSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeHRlcm5hbExpc3RpbmdVcGRhdGVLZXlzKCRpZCA9IG51bGwsICR1cGRhdGVNZXRob2QgPSAyLCAkcmV0dXJuVHlwZSA9IDEpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB0aGlzIGZpbGUgYWxyZWFkeSBoYXMgc3RhdGlzdGljcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywnc2hhcmVkdXJsJywnZm9sZGVyJywncGVybWlzc2lvbnR5cGUnLCdkcm9wYm94b3B0aW9ucycsJ2J1aWxkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fZXh0ZXJuYWxfc291cmNlJykpOw0KCQlpZiAoJHVwZGF0ZU1ldGhvZCAmJiBpc19udW1lcmljKCR1cGRhdGVNZXRob2QpKQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd1cGRhdGVfbWV0aG9kJykgLiAnID0gJy4gKGludCkgJHVwZGF0ZU1ldGhvZCk7DQoJCX0NCgkJaWYgKCRpZCAmJiBpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4gKGludCkgJGlkKTsNCgkJfQ0KCQllbHNlaWYgKCRpZCAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWQpKQ0KCQl7DQoJCQkkaWRzID0gaW1wbG9kZSgnLCcsIGFycmF5X21hcCggJ2ludHZhbCcsICRpZCkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgSU4gICgnIC4gJGlkcyAuICcpJyk7DQoJCX0NCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRyZXN1bHRzID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJJHVwZGF0ZXMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHJlc3VsdHMgYXMgJHJlc3VsdCkNCgkJCXsNCgkJCQlpZiAoJ2Z1bGwnID09ICRyZXN1bHQtPnBlcm1pc3Npb250eXBlKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCBmb2xkZXIgb3IgdXJscw0KCQkJCQlzd2l0Y2ggKCRyZXN1bHQtPmRyb3Bib3hvcHRpb25zKQ0KCQkJCQl7DQoJCQkJCQljYXNlIDE6IC8vIHNoYXJlZHVybA0KCQkJCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0LT5zaGFyZWR1cmwpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhcmdldHMgPSBqc29uX2RlY29kZSgkcmVzdWx0LT5zaGFyZWR1cmwpLT50c2hhcmVkdXJsOw0KCQkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAyOiAvLyBmb2xkZXJzDQoJCQkJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRyZXN1bHQtPmZvbGRlcikpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFyZ2V0cyA9IGpzb25fZGVjb2RlKCRyZXN1bHQtPmZvbGRlciktPnRmb2xkZXI7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0YXJnZXRzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJCQl7DQoJCQkJCQkJJG5yID0gJGtleSArIDE7DQoJCQkJCQkJLy8gaWQsIHRhcmdldCwgdHlwZQ0KCQkJCQkJCWlmICgxID09ICRyZXR1cm5UeXBlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHVwZGF0ZXNbXSA9ICRyZXN1bHQtPmlkIC4gJywgJy4gJG5yIC4gJywgJyAuICRyZXN1bHQtPmJ1aWxkOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIC8vIG9ubHkgcmV0dXJuIHRoZSB0YXJnZXRzDQoJCQkJCQkJew0KCQkJCQkJCQkkdXBkYXRlc1tdID0gJG5yOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBpZCwgdGFyZ2V0LCB0eXBlDQoJCQkJCWlmICgxID09ICRyZXR1cm5UeXBlKQ0KCQkJCQl7DQoJCQkJCQkkdXBkYXRlc1tdID0gJHJlc3VsdC0+aWQgLiAnLCAxLCAnLiAkcmVzdWx0LT5idWlsZDsNCgkJCQkJfQ0KCQkJCQllbHNlIC8vIG9ubHkgcmV0dXJuIHRoZSB0YXJnZXRzDQoJCQkJCXsNCgkJCQkJCSR1cGRhdGVzW10gPSAxOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICR1cGRhdGVzOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4dGVybmFsU291cmNlTGluaygkdHlwZSwgJHJldHVybiA9IDcsICRnZXQgPSBmYWxzZSwgJHRhcmdldCA9ICdsaW5rcycpDQoJew0KCQkvLyBtYWtlIHN1cmUgYWxsIGRlZmF1bHRzIGFyZSBzZXQNCgkJJGZvdW5kID0gc2VsZjo6Y2hlY2tFeHRlcm5hbFNvdXJjZUxvY2FsTGlzdGluZygkdHlwZSwgJHRhcmdldCk7DQoJCWlmICgkZm91bmQpDQoJCXsNCgkJCXN3aXRjaCgkcmV0dXJuKQ0KCQkJew0KCQkJCWNhc2UgMToNCgkJCQkJLy8gcmV0dXJuIGEgbGluaw0KCQkJCQlpZiAoaXNzZXQoc2VsZjo6JHskdGFyZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX1bJGdldF0pKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gc2VsZjo6JHskdGFyZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX1bJGdldF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQkvLyByZXR1cm4gYWxsIGxpbmtzDQoJCQkJCXJldHVybiBzZWxmOjokeyR0YXJnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfTsNCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdCA6DQoJCQkJCS8vIGp1c3QgY29uZmlybSB0aGF0IGl0IGlzIHNldA0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY291bnREb3dubG9hZCgkY291bnRlciwgJGZpbGVuYW1lKQ0KCXsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkkb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAxMjgpOw0KCQkkY291bnRlciA9IGpzb25fZGVjb2RlKHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoJGNvdW50ZXIpLCAiXDAiKSk7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY291bnRlcikpDQoJCXsNCgkJCSRjb3VudGVyLT5maWxlbmFtZSA9ICRmaWxlbmFtZTsNCgkJCS8vIHNldCB0aGUgZGF0ZSBvYmplY3QNCgkJCSRkYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsJ2NvdW50ZXInKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc2VybW9uJykgLiAnID0gJy4gKGludCkgJGNvdW50ZXItPnNlcm1vbik7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdmaWxlbmFtZScpIC4gJyA9ICcuICRkYi0+cXVvdGUoJGNvdW50ZXItPmZpbGVuYW1lKSk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkc3RhdGlzdGljID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJLy8gYWxyZWFkeSBoYXMgYW4gZW50cnkNCgkJCQkkc3RhdGlzdGljLT5jb3VudGVyKys7DQoJCQkJJHN0YXRpc3RpYy0+bW9kaWZpZWQgPSAkZGF0ZS0+dG9TcWwoKTsNCgkJCQkvLyB1cGRhdGUgdGhlIGVudHJ5DQoJCQkJcmV0dXJuICRkYi0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJHN0YXRpc3RpYywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IGEgbmV3IGVudHJ5DQoJCQkJJGNvdW50ZXItPmNvdW50ZXIgPSAxOw0KCQkJCSRjb3VudGVyLT5wdWJsaXNoZWQgPSAxOw0KCQkJCSRjb3VudGVyLT5jcmVhdGVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJJGNvdW50ZXItPmFjY2VzcyA9IDE7DQoJCQkJJGNvdW50ZXItPnZlcnNpb24gPSAxOw0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRkb25lID0gJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9zdGF0aXN0aWMnLCAkY291bnRlcik7DQoJCQkJLy8gaWYgZG9uZSByZXR1cm4gbGFzdCB1c2VkIGlkDQoJCQkJaWYgKCRkb25lKQ0KCQkJCXsNCgkJCQkJJG5ld0lkID0gICRkYi0+aW5zZXJ0aWQoKTsNCgkJCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQkJCXJldHVybiBzZWxmOjpzZXRBc3NldCgkbmV3SWQsJ3N0YXRpc3RpYycpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlSW5mbygka2V5KQ0KCXsNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRrZXkpICYmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGtleSwgdHJ1ZSkpID09PSAka2V5KSkNCgkJew0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJCSRvcGVuZXIgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcigkbG9jYWxrZXksIDEyOCk7DQoJCQkka2V5ID0gcnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygka2V5KSwgIlwwIik7DQoJCQkvLyBsb2FkIHRoZSBsaW5rcyBmcm9tIHRoZSBkYXRhYmFzZQ0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCdzaXplJyk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9sb2NhbF9saXN0aW5nJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgna2V5JykgLiAnID0gJy4gJGRiLT5xdW90ZSgka2V5KSk7DQogCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJGluZm8gPSBhcnJheSgpOw0KCQkJCS8vIGdldCB0aGUgc2l6ZSBvZiB0aGUgZmlsZQ0KCQkJCSRpbmZvWydmaWxlc2l6ZSddID0gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCQkJLy8gZ2V0IHRoZSBtaW1lIHR5cGUNCgkJCQkkaW5mb1sndHlwZSddID0gU3VwZXJfX19mMTFkYzc5MF83MTNlXzQ3MDZfOWE4NV9hMzE4ZWQzYWQ1NmVfX19Qb3dlcjo6bWltZVR5cGUoJGtleSk7DQoJCQkJLy8gcmV0dXJuIGluZm8NCgkJCQlyZXR1cm4gJGluZm87DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRGaWxlTmFtZSgmJHNlcm1vbiwgJGZpbGUsICR0eXBlKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGZpbGUgbmFtZSBhbmQgZmlsZSB0eXBlDQoJCSRmaWxlID0gc3RyX3JlcGxhY2UoJ1ZETV9wTGVLX2gwdUVyLycsICcnLCAkZmlsZSk7DQoJCSRmaWxlVHlwZSA9IHBhdGhpbmZvKCRmaWxlLCBQQVRISU5GT19FWFRFTlNJT04pOw0KCQlpZiAoJGZpbGVUeXBlKQ0KCQl7DQoJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCcuJy4kZmlsZVR5cGUsICcnLCAkZmlsZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZmlsZVR5cGUgPSAnZXJyb3InOw0KCQl9DQoJCS8vIG5vdyBidWlsZCBkb3dubG9hZCBuYW1lDQoJCSRkb3dubG9hZE5hbWUgPSBhcnJheSgpOw0KCQkvLyBidWlsZCB0aGUgRG93bmxvYWQgRmlsZSBOYW1lIC0gZmlyc3QgYWRkIHRoZSBwcmVhY2hlciBuYW1lIGlmIHNldA0KCQlpZiAoJHNlcm1vbi0+cHJlYWNoZXIpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+cHJlYWNoZXJfbmFtZSwnVScpOw0KCQl9DQoJCS8vIGFkZCB0aGUgc2VyaWVzIG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5zZXJpZXMpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+c2VyaWVzX25hbWUsJ0YnKTsNCgkJfQ0KCQkvLyBhZGQgdGhlIGNhdGVnb3J5IG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5jYXRpZCAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5jYXRlZ29yeSkpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+Y2F0ZWdvcnksICdGJyk7DQoJCX0NCgkJaWYgKCdkcm9wYm94X21hbnVhbCcgPT0gJHR5cGUgfHwgJ2xvY2FsJyA9PSAkdHlwZSkNCgkJew0KCQkJLy8gYWRkIHRoZSBtYWluIGZpbGUgbmFtZQ0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5uYW1lLCdGJyk7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRmaWxlLCdGJyk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPm5hbWUsJ0YnKTsNCgkJCWlmICgnZXJyb3InID09ICRmaWxlVHlwZSB8fCBzdHJwb3MoJz8nLCAkZmlsZVR5cGUpICE9PSBmYWxzZSB8fCBzdHJwb3MoJyYnLCAkZmlsZVR5cGUpICE9PSBmYWxzZSApDQoJCQl7DQoJCQkJJGZpbGVUeXBlID0gJ21wMyc7IC8vIFRPRE8gd2UgZG9uJ3Qga25vdyB0aGUgdXJsIGZpbGV0eXBlIChzZXR0aW5nIHRvIG1wMyBidXQgdGhpcyBjb3VsZCBiZSB3cm9uZykNCgkJCX0NCgkJfQ0KCQkvLyBub3cgYnVpbGQgdGhlIGRvd25sb2FkIGZpbGUgbmFtZQ0KCQlyZXR1cm4gaW1wbG9kZSgnX18nLCAkZG93bmxvYWROYW1lKS4nLicuJGZpbGVUeXBlOw0KCX0NCg0KCS8qKg0KCSogCWNoZWNrIEV4dGVybmFsIFNvdXJjZSBMb2NhbCBMaXN0aW5nIChkbyB3ZSBoYXZlIHRoZSBmaWxlcykNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrRXh0ZXJuYWxTb3VyY2VMb2NhbExpc3RpbmcoJHR5cGUsICRnZXQgPSAnbGlua3MnKQ0KCXsNCgkJLy8gZ2V0IHRoZSBsb2NhbCBsaW5rcw0KCQlpZiAoaXNzZXQoc2VsZjo6JHskZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7JGdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9KSkNCgkJew0KCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRhcmdldCA9IGFycmF5KCdsaW5rcycgPT4gJ3VybCcsICdzZWxlY3QnID0+ICduYW1lJyk7DQoJCQkkYnVpbGQgPSBhcnJheSggJ2F1dG8nID0+IDIsICdtYW51YWwnID0+IDEpOw0KCQkJaWYgKGlzc2V0KCRidWlsZFskdHlwZV0pKQ0KCQkJew0KCQkJCS8vIGxvYWQgdGhlIGxpbmtzIGZyb20gdGhlIGRhdGFiYXNlDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdrZXknLCAkdGFyZ2V0WyRnZXRdKSkpOw0KCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2xvY2FsX2xpc3RpbmcnKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYnVpbGQnKSAuICcgPSAnLiAoaW50KSAkYnVpbGRbJHR5cGVdKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKSAuICcgPSAxJyk7IC8vIFRPRE8gd2UgY2FuIG5vdyBsaW1pdCB0aGUgbGlua3MgdG8gYWNjZXNzIGdyb3Vwcw0KIAkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiR7JGdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9ID0gJGRiLT5sb2FkQXNzb2NMaXN0KCdrZXknLCAkdGFyZ2V0WyRnZXRdKTsNCgkJCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgdGhlIGxvY2Fsa2V5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9jYWxrZXkgPSBhcnJheSgpOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYWxLZXkoJHR5cGUgPSAnYmFzaWNfa2V5JykNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JGxvY2Fsa2V5WyR0eXBlXSkpDQoJCXsNCgkJCS8vIGdldCB0aGUgbWFpbiBrZXkNCgkJCXNlbGY6OiRsb2NhbGtleVskdHlwZV0gPSBDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJHR5cGUsICdsb2NhbEtleTM0ZmRXRWtsJyk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2NhbGtleVskdHlwZV07DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbFNvdXJjZSgkaWQsICR0YXJnZXQgPSAwLCAkdHlwZSA9IGZhbHNlLCAkZm9yY2UgPSBmYWxzZSwgJHNsZXV0ZWwgPSBudWxsKQ0KCXsNCgkJJHNvdXJjZSA9IHNlbGY6OmdldFZhcignZXh0ZXJuYWxfc291cmNlJywgKGludCkgJGlkLCAnaWQnLCAnZXh0ZXJuYWxzb3VyY2VzJyk7DQoJCWlmICgxID09ICRzb3VyY2UpIC8vIERyb3Bib3ggaXMgdGhlIHNvdXJjZQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBmaWxlDQoJCQlKTG9hZGVyOjppbXBvcnQoJ2Ryb3Bib3h1cGRhdGVyJywgSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzJyk7DQoJCQkvLyB1cGRhdGUgdHlwZXMNCgkJCSR0eXBlcyA9IGFycmF5KCdtYW51YWwnLCdhdXRvJyk7DQoJCQkvLyBva2F5IG5vdyB1cGRhdGUgdGhpcyB0eXBlDQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHR5cGUpICYmIGluX2FycmF5KCR0eXBlLCR0eXBlcykpDQoJCQl7DQoJCQkJJGRyb3Bib3ggPSBuZXcgRHJvcGJveHVwZGF0ZXIoKTsNCgkJCQlpZiAoJGRyb3Bib3gtPnVwZGF0ZSgkaWQsICR0YXJnZXQsICR0eXBlLCAkZm9yY2UsICRzbGV1dGVsKSkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlzZWxmOjpzZXRVcGRhdGVFcnJvcigkaWQsICRkcm9wYm94LT5nZXRFcnJvcnMoKSk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCXNlbGY6OnNldFVwZGF0ZUVycm9yKCRpZCwgYXJyYXkoVGV4dDo6XygnVGhlIGV4dGVybmFsIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQuJykpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U291cmNlU3RhdHVzKCRpZCkNCgl7DQoJCS8vIGZpc3QgZ2V0IGVycm9ycyBpZiBhbnkgaXMgZm91bmQNCgkJJGVycm9ycyA9IGFycmF5KCk7DQoJCWlmICgkdGFyZ2V0cyA9IHNlbGY6OmdldEV4dGVybmFsTGlzdGluZ1VwZGF0ZUtleXMoJGlkLCBudWxsLCAxKSkNCgkJew0KCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJHRhcmdldCkNCgkJCXsNCgkJCQkka2V5ID0gcHJlZ19yZXBsYWNlKCcvWyAsXSsvJywgJycsIHRyaW0oJHRhcmdldCkpOw0KCQkJCWlmICgkZXJyb3IgPSBzZWxmOjpnZXRVcGRhdGVFcnJvcigwLCAka2V5KSkNCgkJCQl7DQoJCQkJCSRlcnJvcnNbXSA9ICRlcnJvcjsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gY2hlY2sgd2hlbiB3YXMgdGhlIGxhc3QgdXBkYXRlDQoJCSR1cGRhdGVJbmZvID0gc2VsZjo6dXBkYXRlSW5mbygkaWQpOw0KCQlpZiAoISR1cGRhdGVJbmZvKQ0KCQl7DQoJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdUaGlzIHNvdXJjZSBoYXMgbm8gbG9jYWwgbGlzdGluZyBzZXQuJyk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIHJldHVybiBzdHJpbmcNCgkJaWYgKGlzc2V0KCR1cGRhdGVJbmZvWydsYXN0J10pIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlcnJvcnMpKQ0KCQl7DQoJCQkkYm9keSA9IGFycmF5KCk7DQoJCQkvLyBncmVhdCB3ZSBoYXZlIHNvdXJjZSBzdGF0dXMNCgkJCWlmIChpc3NldCgkdXBkYXRlSW5mb1snbGFzdCddKSkNCgkJCXsNCgkJCQkkYm9keVtdID0gJzxoMz4nLiBUZXh0OjpfKCdMaXN0aW5nIEluZm8nKSAuICc8L2gzPic7DQoJCQkJJGJvZHlbXSA9ICc8cD48Yj4nLiBUZXh0OjpfKCdMYXN0IFVwZGF0ZScpIC4gJzo8L2I+IDxlbT4nLiR1cGRhdGVJbmZvWydsYXN0J107DQoJCQkJJGJvZHlbXSA9ICc8L2VtPjxiciAvPjxiPicuIFRleHQ6Ol8oJ051bWJlciBvZiBGaWxlcyBMaXN0ZWQnKSAuICc6PC9iPiA8ZW0+Jy4kdXBkYXRlSW5mb1sncXR5J107DQoJCQkJJGJvZHlbXSA9ICc8L2VtPjwvcD4nOw0KCQkJfQ0KCQkJLy8gbm93IHNldCBhbnkgZXJyb3JzIGZvdW5kDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9ycykpDQoJCQl7DQoJCQkJJGJvZHlbXSA9ICc8aDM+Jy4gVGV4dDo6XygnTm90aWNlIScpIC4gJzwvaDM+JzsNCgkJCQkkYm9keVtdID0gaW1wbG9kZSgnJywgJGVycm9ycyk7DQoJCQl9DQoJCQlyZXR1cm4gJzxhIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1zdWNjZXNzIiBocmVmPSIjc291cmNlLXN0YXR1cycuJGlkLiciIGRhdGEtdG9nZ2xlPSJtb2RhbCI+Jy5UZXh0OjpfKCdWaWV3IFVwZGF0ZSBTdGF0dXMnKS4nPC9hPicgDQoJCQkJLiBIdG1sOjpfKCdib290c3RyYXAucmVuZGVyTW9kYWwnLCAnc291cmNlLXN0YXR1cycuJGlkLCBhcnJheSgndGl0bGUnID0+IFRleHQ6Ol8oJ1NvdXJjZSBTdGF0dXMgUmVwb3J0LicpKSwgaW1wbG9kZSgnJywgJGJvZHkpKTsNCgkJfQ0KIAkJLy8gbm8gc3RhdHVzIGZvdW5kDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZUluZm8oJGlkKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmNyZWF0ZWQnLCdhLm1vZGlmaWVkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbG9jYWxfbGlzdGluZycsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmV4dGVybmFsX3NvdXJjZScpIC4gJyA9ICcgLiAoaW50KSAkaWQpOw0KIAkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJHF0eSA9ICRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkZGF0YSA9ICRkYi0+bG9hZFJvd0xpc3QoKTsNCgkJCSRsYXN0ID0gMDsNCgkJCWZvcmVhY2ggKCRkYXRhIGFzICRkYXRlcykNCgkJCXsNCgkJCQlmb3JlYWNoICgkZGF0ZXMgYXMgJGRhdGUpDQoJCQkJew0KCQkJCQkkdGltZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCQkJCWlmICgkdGltZSA+ICRsYXN0KQ0KCQkJCQl7DQoJCQkJCQkkbGFzdCA9ICR0aW1lOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJJGluZm9bJ3F0eSddID0gKGludCkgJHF0eTsNCgkJCSRpbmZvWydsYXN0J10gPSBzZWxmOjpmYW5jeURhdGUoJGxhc3QpOw0KCQkJcmV0dXJuICRpbmZvOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwZGF0ZUVycm9yKCRpZCwgJGZpbGVLZXkgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHVwZGF0ZSBlcnJvciBmcm9tIGZpbGUNCgkJaWYgKCRmaWxlS2V5KQ0KCQl7DQoJCQkkZmlsZV9wYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgncGF0aCcsICd1cGRhdGVlcnJvcicsICd0eHQnLCAkZmlsZUtleSwgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IpOw0KCQkJLy8gY2hlY2sgaWYgaXQgaXMgc2V0DQoJCQlpZiAoKCR0ZXh0ID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0Q29udGVudCgkZmlsZV9wYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQkvLyBubyBlcnJvciBvbiBzdWNjZXNzDQoJCQkJaWYgKCdzdWNjZXNzJyAhPSAkdGV4dCkNCgkJCQl7DQoJCQkJCXJldHVybiAkdGV4dDsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZWxzZWlmIChpc3NldChzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkpDQoJCXsNCgkJCXJldHVybiAnPHVsPjxsaT4nLmltcGxvZGUoJzwvbGk+PGxpPicsIHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkuJzwvbGk+PC91bD4nOw0KCQl9DQoJCXJldHVybiBUZXh0OjpfKCdVbmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFVwZGF0ZUVycm9yKCRpZCwgJGVycm9yQXJyYXkpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9yQXJyYXkpICYmICRpZCA+IDApDQoJCXsNCgkJCWZvcmVhY2ggKCRlcnJvckFycmF5IGFzICRlcnJvcikNCgkJCXsNCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkpDQoJCQkJew0KCQkJCQlzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0gPSBhcnJheSgpOw0KCQkJCX0NCgkJCQlzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF1bXSA9ICRlcnJvcjsNCgkJCX0NCgkJfQ0KCX0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1jdXJsV29ya2VySGVscGVyXQ0KW0NVU1RPTUNPREU9bG9ja2VyXQ==', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvY2hyaXN0aWFuL0pvb21sYS1TZXJtb24tRGlzdHJpYnV0b3IvcmF3L2JyYW5jaC9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KVGhlIGJlc3Qgd2F5IHRvIHNlZSBhbGwgeW91ciBvcHRpb25zIGlzIHRvIGluc3RhbGwgdGhpcyBjb21wb25lbnQgb24geW91IEpvb21sYSB3ZWJzaXRlIGFuZCB0ZXN0IGFsbCBmZWF0dXJlcyB5b3Vyc2VsZi4gSGVyZSBpcyBhIFtkaXJlY3QgZG93bmxvYWQgbGlua10oaHR0cHM6Ly9naXQudmRtLmRldi9jaHJpc3RpYW4vSm9vbWxhLVNlcm1vbi1EaXN0cmlidXRvci9hcmNoaXZlL21hc3Rlci56aXApDQoNCiAqKklmIHlvdSBsaWtlIG91ciBjb21wb25lbnQgcGxlYXNlIHJhdGUgaXQgb24gdGhlIFtKb29tbGEgSW5kZXhdKGh0dHA6Ly9leHRlbnNpb25zLmpvb21sYS5vcmcvZXh0ZW5zaW9ucy9leHRlbnNpb24vbGl2aW5nL3JlbGlnaW9uL3Nlcm1vbi1kaXN0cmlidXRvcikqKg0KDQojIyMgRXhhbXBsZSBXZWJzaXRlLCBUaGF0IEhhcyBPdmVyIDYwMDAgQXVkaW8gRmlsZXMNCg0KW0xvdWRWb2ljZS5vcmddKGh0dHA6Ly93d3cubG91ZHZvaWNlLm9yZykNCltUcnVlQ2hyaXN0aWFuLkNodXJjaF0oaHR0cHM6Ly90cnVlY2hyaXN0aWFuLmNodXJjaC8pDQoNCiMjIyBTb21lIFZpZGVvIERlbW9uc3RyYXRpb25zDQoNCisgW1NldHVwIG92ZXJ2aWV3XShodHRwczovL3lvdXR1LmJlL3lNUHAxQ3AzV18wP3Q9MjBtOHMpDQorIFtTZXR1cCBEcm9wYm94XShodHRwczovL3lvdXR1LmJlL2J0cEtGRGswLWRJKQ0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZSA6aG91cmdsYXNzOg0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', 1, '', 'A sermon distributor that links to Dropbox.', '', '', 'SermonDistributor (public) J5', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/christian/Joomla-Sermon-Distributor/raw/branch/5.x/sermondistributor_update_server.xml', 'https://www.vdm.io/', '', 'c5rhaxX7uhTwV9PXKN4f17ZBCnqfgXa+m8DRot2YmIA=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 5, '', 1, 51),
(89, 1, 1, 1, '', 1, '', '', '', 1, 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', 1, 1, 1, 1, '', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/jcb_j4', 'JCB.txt', '', '', 'Vast Development Method', '4.0.0-rc1', 'Copyright (C) 2015 Vast Development Method. All rights reserved.', '2015-04-30 12:04:35', '', 'cpBTiwUUdMl4NaaOtDjZq1+0i8wqscXxjPW2RphsorY=', 'AJHOIg7SdMkXmFuvZ4PJ7SzL+FFFI51zsjU+6JHkhHo=', '', 'uRKIManIX3JIt/6bEDE3kVzH+WiGWQ7lv1VI0kjPCww=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEyMHB4OyB9DQouZmllbGRMYXJnZSB7IHdpZHRoOiAzMjBweDsgfQ0KLmZpZWxkTWlkIHsgd2lkdGg6IDgwcHg7IH0NCi5maWVsZEZ1bGwgeyB3aWR0aDogMTAwJTsgfQ0KLmZpZWxkU21hbGwgeyB3aWR0aDogNjBweDsgfQ0KY29kZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAzcHg7fQ==', '', '', 1, '', 'The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!', 'joomla@vdm.io', '', 'https://vdm.bz/component-builder-self', 'pvFpmPCET6+0v1gpe5YIWYo8OEB0FhESnYmWwRahfiY=', '', '1e25ffd3-3535-4f6c-8cb4-d3418862c952', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '&#10003', '2024-04-27 10:51:26', 2, 'Component Builder', 'Componentbuilder', 'VDM', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlckhlbHBlckJvdGhd', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', 'W0NVU1RPTUNPREU9Y29tcG9uZW50QnVpbGRlclByZWZsaWdodFVwZGF0ZUpmaXZlXQ0KW0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclJlYWRNZV0=', 1, '', 'Builds Complex Joomla Components', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMSW5zdGFsbF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMVW5pbnN0YWxsXQ==', 'Component Builder (Public) J4', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', 3, 2, 'https://git.vdm.dev/joomla/Component-Builder/raw/branch/4.x/componentbuilder_update_server.xml', 'https://dev.vdm.io', '', 'GfWpBeuAOZ83sPk5r1IW+rLmnkPElMrAlKHTjwyy4GY=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"0\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_site_helper\":[]}}', 1, 27, '', 1, 1);

--
-- Dumping data for table `#__componentbuilder_joomla_plugin`
--

INSERT INTO `#__componentbuilder_joomla_plugin` (`id`, `add_head`, `add_php_method_uninstall`, `add_php_postflight_install`, `add_php_postflight_update`, `add_php_preflight_install`, `add_php_preflight_uninstall`, `add_php_preflight_update`, `add_php_script_construct`, `add_sales_server`, `add_sql`, `add_sql_uninstall`, `add_update_server`, `addreadme`, `class_extends`, `description`, `fields`, `guid`, `head`, `joomla_plugin_group`, `method_selection`, `main_class_code`, `name`, `php_method_uninstall`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_uninstall`, `php_preflight_update`, `php_script_construct`, `plugin_version`, `property_selection`, `readme`, `sales_server`, `sql`, `sql_uninstall`, `system_name`, `update_server`, `update_server_target`, `update_server_url`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
(1, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 4, 'The plugin to fully integrate componentbuilder with the privacy suite of Joomla.', '{}', '518f7be7-140c-47d3-9fb2-b6717230e0fc', 'dXNlIEpvb21sYVxVdGlsaXRpZXNcQXJyYXlIZWxwZXI7DQoNCkpMb2FkZXI6OnJlZ2lzdGVyKCdQcml2YWN5UGx1Z2luJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fcHJpdmFjeS9oZWxwZXJzL3BsdWdpbi5waHAnKTsNCkpMb2FkZXI6OnJlZ2lzdGVyKCdQcml2YWN5UmVtb3ZhbFN0YXR1cycsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3ByaXZhY3kvaGVscGVycy9yZW1vdmFsL3N0YXR1cy5waHAnKTsNCkpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7IA==', 10, '{\"method_selection0\":{\"method\":\"51\"},\"method_selection1\":{\"method\":\"52\"},\"method_selection2\":{\"method\":\"53\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICAkYXBwOw0KDQoJLyoqDQoJICogRGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAdmFyICAgIERhdGFiYXNlRHJpdmVyDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRkYjsNCg0KCS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcmVtb3ZlIGluZm9ybWF0aW9uIHJlcXVlc3QgY2FuIGJlIHByb2Nlc3NlZA0KCSAqDQoJICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgUHJpdmFjeVJlbW92YWxTdGF0dXMNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblByaXZhY3lDYW5SZW1vdmVEYXRhKFByaXZhY3lUYWJsZVJlcXVlc3QgJHJlcXVlc3QsIEpVc2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRzdGF0dXMgPSBuZXcgUHJpdmFjeVJlbW92YWxTdGF0dXM7DQoNCgkJLy8gVGhpcyBwbHVnaW4gb25seSBwcm9jZXNzZXMgZGF0YSBmb3IgcmVnaXN0ZXJlZCB1c2VyIGFjY291bnRzDQoJCWlmICghJHVzZXIpDQoJCXsNCgkJCXJldHVybiAkc3RhdHVzOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhlIGhlbHBlciBtZXRob2QgaXMgc2V0IGluIHRoZSBjb21wb25lbnQNCgkJaWYgKG1ldGhvZF9leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsICdvblByaXZhY3lDYW5SZW1vdmVEYXRhJykpDQoJCXsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6b25Qcml2YWN5Q2FuUmVtb3ZlRGF0YSgkdGhpcywgJHN0YXR1cywgJHJlcXVlc3QsICR1c2VyKTsNCgkJfQ0KDQoJCXJldHVybiAkc3RhdHVzOw0KCX0NCg0KCS8qKg0KCSAqIFByb2Nlc3NlcyBhbiBleHBvcnQgcmVxdWVzdCBmb3IgSm9vbWxhIGNvcmUgdXNlciBkYXRhDQoJICoNCgkgKiBAcGFyYW0gICBQcml2YWN5VGFibGVSZXF1ZXN0ICAkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZA0KCSAqIEBwYXJhbSAgIEpVc2VyICAgICAgICAgICAgICAgICR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblByaXZhY3lFeHBvcnRSZXF1ZXN0KFByaXZhY3lUYWJsZVJlcXVlc3QgJHJlcXVlc3QsIEpVc2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRkb21haW5zID0gYXJyYXkoKTsNCg0KCQkvLyBUaGlzIHBsdWdpbiBvbmx5IHByb2Nlc3NlcyBkYXRhIGZvciByZWdpc3RlcmVkIHVzZXIgYWNjb3VudHMNCgkJaWYgKCEkdXNlcikNCgkJew0KCQkJcmV0dXJuICRkb21haW5zOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhlIGhlbHBlciBtZXRob2QgaXMgc2V0IGluIHRoZSBjb21wb25lbnQNCgkJaWYgKG1ldGhvZF9leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsICdvblByaXZhY3lFeHBvcnRSZXF1ZXN0JykpDQoJCXsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6b25Qcml2YWN5RXhwb3J0UmVxdWVzdCgkdGhpcywgJGRvbWFpbnMsICRyZXF1ZXN0LCAkdXNlcik7DQoJCX0NCg0KCQlyZXR1cm4gJGRvbWFpbnM7DQoJfQ0KDQoJLyoqDQoJICogUmVtb3ZlcyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSByZW1vdmUgaW5mb3JtYXRpb24gcmVxdWVzdA0KCSAqDQoJICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUHJpdmFjeVJlbW92ZURhdGEoUHJpdmFjeVRhYmxlUmVxdWVzdCAkcmVxdWVzdCwgSlVzZXIgJHVzZXIgPSBudWxsKQ0KCXsNCgkJLy8gVGhpcyBwbHVnaW4gb25seSBwcm9jZXNzZXMgZGF0YSBmb3IgcmVnaXN0ZXJlZCB1c2VyIGFjY291bnRzDQoJCWlmICghJHVzZXIpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCS8vIGNoZWNrIGlmIHRoZSBoZWxwZXIgbWV0aG9kIGlzIHNldCBpbiB0aGUgY29tcG9uZW50DQoJCWlmIChtZXRob2RfZXhpc3RzKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCAnb25Qcml2YWN5UmVtb3ZlRGF0YScpKQ0KCQl7DQoJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6Om9uUHJpdmFjeVJlbW92ZURhdGEoJHRoaXMsICRyZXF1ZXN0LCAkdXNlcik7DQoJCX0NCgl9', '[[[Component]]]', 'Ly8gUEhQIE1ldGhvZCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFBvc3RmbGlnaHQgKGluc3RhbGwp', 'Ly8gUEhQIFBvc3RmbGlnaHQgKHVwZGF0ZSk=', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', 'Ly8gUEhQIFByZWZsaWdodCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFByZWZsaWdodCAodXBkYXRlKQ==', '', '1.0.0', '{\"property_selection0\":{\"property\":\"31\"},\"property_selection1\":{\"property\":\"32\"},\"property_selection2\":{\"property\":\"33\"}}', 'IyAjIyNQTFVHSU5fTkFNRSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw==', '', '', '', 'Global Privacy', '', 1, 'https://www.vdm.io/updates/componentbuilder_global_privacy.xml', '', 1, '2019-07-16 00:49:50', '2020-05-24 22:49:38', 29, '', 1),
(21, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Plugin to autoload the powers of componentbuilder', '{}', '86dd28b5-18d4-437e-8a53-7eaf23478fc8', '', 8, '{}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAmJHN1YmplY3QgIFRoZSBvYmplY3QgdG8gb2JzZXJ2ZSAtLSBldmVudCBkaXNwYXRjaGVyLg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGNvbmZpZyAgICBBbiBvcHRpb25hbCBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjb25maWd1cmF0aW9uIHNldHRpbmdzLg0KCSAqDQoJICogQHNpbmNlICAgMS42DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdWJqZWN0LCAkY29uZmlnKQ0KCXsNCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgkc3ViamVjdCwgJGNvbmZpZyk7IyMjUExVR0lOX1BPV0VSX0FVVE9MT0FERVIjIyMNCgl9', '[[[Component]]] Powers Autoloader', '', '', '', 'Ly8gV0hBVD8=', '', '', '', '1.0.1', '{\"property_selection0\":{\"property\":\"25\"},\"property_selection1\":{\"property\":\"27\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Powers Autoloader', '', 1, '', '', 1, '2021-11-11 02:22:02', '2024-03-01 21:18:38', 16, '', 8),
(24, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Add Access Token to easy update [[[Component]]]', '{}', '29ac30d2-1c1a-4b9e-9cfa-c5fcb08caa01', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuDQoJICoNCgkgKiBGb3IgbW9kaWZpY2F0aW9uIG9mIFVSTCBhbmQgaGVhZGVycyBiZWZvcmUgcGFja2FnZSBkb3dubG9hZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkKCYkdXJsLCAmJGhlYWRlcnMpDQoJew0KCQkvLyBzZXQgdGhlIFVSSSBvYmplY3QNCgkJJHVyaSA9IEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgkdXJsKTsNCgkJJHBhcnRzID0gZXhwbG9kZSgnLycsICR1cmktPmdldFBhdGgoKSk7DQoNCgkJLy8gY2hlY2sgdGhhdCB0aGlzIGlzIG91ciBBUEkNCgkJaWYgKCR1cmktPmdldEhvc3QoKSA9PSAnW1tbZ2l0ZWFfdXJsXV1dJyAmJiBpbl9hcnJheSgnW1tbZ2l0ZWFfcGFja2FnZV9uYW1lXV1dJywgJHBhcnRzKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSB0b2tlbiBpZiBzZXQNCgkJCSR0b2tlbiA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdnaXRlYV90b2tlbicsIGZhbHNlKTsNCgkJCS8vIG9ubHkgYWRkIGlmIHRva2VuIGlzIHNldA0KCQkJaWYgKCR0b2tlbikNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHRva2VuDQoJCQkJJHVyaS0+c2V0VmFyKCdhY2Nlc3NfdG9rZW4nLCAkdG9rZW4pOw0KCQkJCS8vIHVwZGF0ZSB0aGUgVVJMDQoJCQkJJHVybCA9ICR1cmktPnRvU3RyaW5nKCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSByZXR1cm4gVVJMDQoJCQkJJHJldHVybiA9IHVybGVuY29kZShiYXNlNjRfZW5jb2RlKChzdHJpbmcpIEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgpKSk7DQoJCQkJLy8gc2V0IHRoZSB1cmxzDQoJCQkJJGdldF9hY2Nlc3NfdG9rZW5fdXJsID0gJyJodHRwczovL1tbW2dpdGVhX3VybF1dXS91c2VyL3NldHRpbmdzL2FwcGxpY2F0aW9ucyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSInIC4gVGV4dDo6XygnR2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciJyAuIEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpyb290KCkgLiAnYWRtaW5pc3RyYXRvci9pbmRleC5waHA/b3B0aW9uPWNvbV9jb25maWcmdmlldz1jb21wb25lbnQmY29tcG9uZW50PWNvbV9bW1tjb21wb25lbnRdXV0mcGF0aD0mcmV0dXJuPScgLiAkcmV0dXJuIC4gJyIgdGl0bGU9IicgLiBUZXh0OjpfKCdTZXQgQWNjZXNzIFRva2VuJykgLiAnIic7DQoJCQkJLy8gbG9hZCB0aGUgbWVzc2FnZQ0KCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKA0KCQkJCQlUZXh0OjpzcHJpbnRmKCJJZiB0aGVyZSB3YXMgYSBkb3dubG9hZC91cGRhdGUgZXJyb3IsIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB0aGUgPGEgaHJlZj0lcyA+QVBJIEFjY2VzcyBUb2tlbjwvYT4gZm9yIHVwZGF0ZXMgb2YgW1tbY29tcG9uZW50XV1dIGhhcyBub3QgYmVlbiBzZXQsIHlvdSBjYW4gc2V0IHRoaXMgYWNjZXNzIHRva2VuIGluIHRoZSA8YSBocmVmPSVzID5nbG9iYWwgb3B0aW9ucyB0YWI8L2E+LiIsDQoJCQkJCQkkZ2V0X2FjY2Vzc190b2tlbl91cmwsDQoJCQkJCQkkc2V0X2FjY2Vzc190b2tlbl91cmwNCgkJCQkJKSwgJ25vdGljZScpOw0KCQkJfQ0KCQl9DQoJfQ0K', 'componentbuilder', '', '', '', 'Ly8gbmVlZHMgZml4', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"39\"},\"property_selection1\":{\"property\":\"37\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev)', '', 1, '', '', 1, '2021-12-08 07:42:39', '2024-03-01 21:17:50', 17, '', 9),
(28, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 'This plugin is used to load PreUpVer on your website. So it adds https://cdn.jsdelivr.net/gh/Llewellynvdm/PreUpVer@1.0.0/dist/js/preupver.min.js to the header of your website. See: https://git.vdm.dev/Llewellyn/PreUpVer for more details.', '{}', 'dd6580c4-6bbb-4d13-a868-0b38fbb6a66e', 'dXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXEh0bWxcSFRNTEhlbHBlcjsNCg==', 8, '{\"method_selection0\":{\"method\":\"122\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBoZWFkIGlzIGNvbXBpbGVkIGFuZCBhbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBoZWFkIGRhdGEuDQoJICogSW4gdGhpcyBjYXNlLCBpdCdzIHVzZWQgdG8gYWRkIGEgSmF2YVNjcmlwdCBmaWxlIHRvIHRoZSBmcm9udCBlbmQgb2YgdGhlIEpvb21sYSBzaXRlLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMy4wLjANCgkgKiBAdGhyb3dzICBFeGNlcHRpb24gb24gZXJyb3IuDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQmVmb3JlQ29tcGlsZUhlYWQoKQ0KCXsNCgkJLy8gQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBzaXRlIGFwcGxpY2F0aW9uDQoJCWlmICgkdGhpcy0+YXBwLT5pc0NsaWVudCgnc2l0ZScpKSB7DQoJCQlIVE1MSGVscGVyOjpfKCdzY3JpcHQnLCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0xsZXdlbGx5bnZkbS9QcmVVcFZlckAxLjAuMC9kaXN0L2pzL3ByZXVwdmVyLm1pbi5qcycsIFsndmVyc2lvbicgPT4gJ2F1dG8nXSk7DQoJCX0NCgl9', 'PreUpVerLoader', '', '', '', 'CQkJJGp2ZXJzaW9uID0gbmV3IEpWZXJzaW9uKCk7DQoJCQlpZiAoISRqdmVyc2lvbi0+aXNDb21wYXRpYmxlKCczLjEwLjAnKSkgew0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgdXBncmFkZSB0byBhdCBsZWFzdCBKb29tbGEhIDMuMTAgYmVmb3JlIGNvbnRpbnVpbmchJywgJ2Vycm9yJyk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0K', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"25\"}}', 'IyBQcmVVcFZlciBMb2FkZXIgKFtbW3BsdWdpbi52ZXJzaW9uXV1dKQ0KDQojIyBJbnRyb2R1Y3Rpb24NCg0KUHJlVXBWZXIgaXMgYSB2ZXJzYXRpbGUgSmF2YVNjcmlwdCBsaWJyYXJ5IGRlc2lnbmVkIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlcnMgb2YgbGlicmFyeSBzY3JpcHRzIGluIHlvdXIgZG9jdW1lbnRhdGlvbi4gSXQgaWRlbnRpZmllcyBzcGVjaWZpYyBgPHByZT5gIHRhZ3Mgb24geW91ciB3ZWJwYWdlIGFuZCB1cGRhdGVzIHRoZW0gd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gdGFnIGZldGNoZWQgZnJvbSBhIHNwZWNpZmllZCByZXBvc2l0b3J5LCBlbnN1cmluZyB5b3VyIGRvY3VtZW50YXRpb24gYWx3YXlzIGRpc3BsYXlzIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uDQoNCiMjIEhvdyBJdCBXb3Jrcw0KDQpQcmVVcFZlciBvcGVyYXRlcyBieSBzZWFyY2hpbmcgZm9yIGA8cHJlPmAgdGFncyB3aXRoIGEgZGVzaWduYXRlZCBjbGFzcyAoYHByZXVwdmVyYCkgYW5kIHVzaW5nIHRoZWlyIGRhdGEgYXR0cmlidXRlcyB0byBwZXJmb3JtIHZlcnNpb24gdXBkYXRlcy4gSXQgc2ltcGxpZmllcyB0aGUgcHJvY2VzcyBvZiBrZWVwaW5nIHlvdXIgbGlicmFyeSByZWZlcmVuY2VzIHVwLXRvLWRhdGUgaW4gZG9jdW1lbnRhdGlvbi4NCg0KIyMjIEF1dG9tYXRpYyBEZXRlY3Rpb24gYW5kIFVwZGF0aW5nDQoNCldoZW4gdGhlIHdlYnBhZ2UgbG9hZHMsIFByZVVwVmVyIGZpbmRzIGFsbCBgPHByZT5gIHRhZ3MgbWFya2VkIHdpdGggdGhlIGBwcmV1cHZlcmAgY2xhc3MuIEl0IHRoZW4gZXh0cmFjdHMgbmVjZXNzYXJ5IGRldGFpbHMgZnJvbSB0aGVpciBkYXRhIGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZXMgZWFjaCB0YWcgd2l0aCB0aGUgbGF0ZXN0IGxpYnJhcnkgdmVyc2lvbi4NCg0KIyMjIFVzYWdlDQoNCjEuICoqTWFya2luZyBgPHByZT5gIFRhZ3M6KioNCg0KICAgQWRkIHRoZSBgY2xhc3M9InByZXVwdmVyImAgdG8gYDxwcmU+YCB0YWdzIGluIHlvdXIgSFRNTCBhbmQgZGVmaW5lIHRoZSByZXF1aXJlZCBkYXRhIGF0dHJpYnV0ZXMgZm9yIGF1dG9tYXRpYyB1cGRhdGluZzoNCg0KICAgYGBgaHRtbA0KICAgPHByZSBpZD0idW5pcXVlLWlkIiBjbGFzcz0icHJldXB2ZXIiDQogICAgICAgIGRhdGEtYXBpLXVybD0iaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy91c2VybmFtZS9saWJyYXJ5L3RhZ3MiDQogICAgICAgIGRhdGEtZGVzY3JpcHRpb249IkRlc2NyaXB0aW9uIG9mIHRoZSBsaWJyYXJ5IHNjcmlwdCINCiAgICAgICAgZGF0YS11cmw9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC91c2VybmFtZS9saWJyYXJ5QCR7dmVyc2lvbn0vZGlzdC9saWJyYXJ5Lm1pbi5qcyI+DQogICA8L3ByZT4NCiAgIGBgYA0KDQogICBSZXBsYWNlIGB1bmlxdWUtaWRgLCBgdXNlcm5hbWVgLCBgbGlicmFyeWAsIGFuZCBvdGhlciBwbGFjZWhvbGRlcnMgd2l0aCB5b3VyIHNwZWNpZmljIGRldGFpbHMuDQoNCjIuICoqQXR0cmlidXRlcyBFeHBsYWluZWQ6KioNCg0KICAgLSBgaWRgOiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYDxwcmU+YCB0YWcuDQogICAtIGBkYXRhLWFwaS11cmxgOiBUaGUgQVBJIFVSTCB0byBmZXRjaCB0aGUgbGF0ZXN0IGxpYnJhcnkgdmVyc2lvbi4NCiAgIC0gYGRhdGEtZGVzY3JpcHRpb25gOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBsaWJyYXJ5IHNjcmlwdC4NCiAgIC0gYGRhdGEtdXJsYDogVGhlIFVSTCBvZiB0aGUgc2NyaXB0LCB3aGVyZSBgJHt2ZXJzaW9ufWAgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBudW1iZXIuDQoNCiMjIyBFeGFtcGxlDQoNCkNoZWNrIG91dCB0aGUgW3Rlc3RzXShodHRwczovL2dpdC52ZG0uZGV2L0xsZXdlbGx5bi9QcmVVcFZlci9zcmMvYnJhbmNoL21hc3Rlci90ZXN0cy8pIGZvbGRlciBmb3IgdGhlIGV4YW1wbGVzIHdlIHVzZSB0byB0ZXN0IGlmIHRoaXMgbGlicmFyeSB3b3JrcyBhcyBleHBlY3RlZC4NCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkF1dGhvcio6IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQorICpOYW1lKjogW1ByZVVwVmVyIExvYWRlcl0oaHR0cHM6Ly9naXQudmRtLmRldi9MbGV3ZWxseW4vUHJlVXBWZXIpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6IFtbW3BsdWdpbi52ZXJzaW9uXV1dDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCj4gVGhpcyAqKnBsdWdpbioqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', '', '', '', 'PreUpVer Loader', '', 1, '', '', 1, '2023-11-28 09:01:02', '2023-11-28 11:27:32', 5, '', 2);

--
-- Dumping data for table `#__componentbuilder_joomla_power`
--

INSERT INTO `#__componentbuilder_joomla_power` (`id`, `description`, `guid`, `settings`, `system_name`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES
(1, 'The Joomla Factory class', '39403062-84fb-46e0-bac4-0023f766e827', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Factory\",\"joomla_version\":\"0\"}}', 'JFactory', '', 1, '2024-04-09 15:00:24', '0000-00-00 00:00:00', 1, '', 1, 1),
(2, 'The core Joomla Text class.', 'ba6326ef-cb79-4348-80f4-ab086082e3c5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Text\",\"joomla_version\":\"0\"}}', 'JText', '', 1, '2024-04-09 15:01:16', '0000-00-00 00:00:00', 1, '', 1, 2),
(3, 'The Joomla core component helper class.', 'aeb8e463-291f-4445-9ac4-34b637c12dbd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\ComponentHelper\",\"joomla_version\":\"0\"}}', 'JComponentHelper', '', 1, '2024-04-09 15:02:09', '0000-00-00 00:00:00', 1, '', 1, 3),
(4, 'The Joomla core session class.', '5ba38513-5c4f-4b0d-935e-49e986a6bce8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Session\\\\Session\",\"joomla_version\":\"0\"}}', 'JSession', '', 1, '2024-04-09 15:03:18', '0000-00-00 00:00:00', 1, '', 1, 4),
(5, 'The Joomla core uri class.', 'eecc143e-b5cf-4c33-ba4d-97da1df61422', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Uri\\\\Uri\",\"joomla_version\":\"0\"}}', 'JUri', '', 1, '2024-04-09 15:04:32', '0000-00-00 00:00:00', 1, '', 1, 5),
(6, 'HTTP client class.', '8417ac0e-2abd-4452-91fd-4ca6493d55f2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\Http\",\"joomla_version\":\"0\"}}', 'JHttp', '', 1, '2024-04-27 11:59:57', '0000-00-00 00:00:00', 1, '', 1, 6),
(7, 'Route handling class', 'd4c76099-4c32-408a-8701-d0a724484dfd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Router\\\\Route\",\"joomla_version\":\"0\"}}', 'JRoute', '', 1, '2024-04-27 12:01:46', '0000-00-00 00:00:00', 1, '', 1, 7),
(8, 'Class to create and parse routes', '4efa4c21-5114-472a-b1f8-48aa9bd14900', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Router\\\\Router\",\"joomla_version\":\"0\"}}', 'JRouter', '', 1, '2024-04-27 12:02:16', '0000-00-00 00:00:00', 1, '', 1, 7),
(9, 'This is an abstracted input class used to manage retrieving data from the application environment.', '59106b64-dd51-4280-be0a-1b9b9ebb7161', '{\"settings0\":{\"namespace\":\"Joomla\\\\Input\\\\Input\",\"joomla_version\":\"0\"}}', 'JInput', '', 1, '2024-04-27 12:04:55', '0000-00-00 00:00:00', 1, '', 1, 8),
(10, 'Helper to render a Layout object, storing a base path', '7ab82272-0b3d-4bb1-af35-e63a096cfe0b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Layout\\\\LayoutHelper\",\"joomla_version\":\"0\"}}', 'JLayoutHelper', '', 1, '2024-04-27 12:06:33', '0000-00-00 00:00:00', 1, '', 1, 9),
(11, 'Utility class for all HTML drawing classes', '34690c75-1090-47eb-8c06-7228dc7eedd6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\HTMLHelper\",\"joomla_version\":\"0\"}}', 'JHtml', '', 1, '2024-04-27 12:07:27', '0000-00-00 00:00:00', 1, '', 1, 10),
(12, 'Class that handles all access authorisation routines.', '2d513d69-8c7c-4dab-bb84-c5ecafb91a9d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Access\",\"joomla_version\":\"0\"}}', 'JAccess', '', 1, '2024-04-27 12:56:41', '0000-00-00 00:00:00', 1, '', 1, 11),
(13, 'Access rules class.', '80425d73-1789-4f59-b49d-1a712611a77a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Rules\",\"joomla_version\":\"0\"}}', 'JRules', '', 1, '2024-04-27 12:57:12', '0000-00-00 00:00:00', 1, '', 1, 11),
(14, 'Rule class.', 'b07d4be5-bbbe-48c9-a2ab-843090a1c0de', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Rule\",\"joomla_version\":\"0\"}}', 'JRule', '', 1, '2024-04-27 12:57:34', '0000-00-00 00:00:00', 1, '', 1, 11),
(15, 'JDate is a class that stores a date and provides logic to manipulate and render that date in a variety of formats.', '3864fa33-ab10-48d5-98ea-5e1397e6a191', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Date\\\\Date\",\"joomla_version\":\"0\"}}', 'JDate', '', 1, '2024-04-27 12:58:11', '0000-00-00 00:00:00', 1, '', 1, 11);

--
-- Dumping data for table `#__componentbuilder_admin_view`
--

INSERT INTO `#__componentbuilder_admin_view` (`id`, `add_css_view`, `add_css_views`, `add_custom_button`, `add_custom_import`, `add_fadein`, `add_javascript_view_file`, `add_javascript_view_footer`, `add_javascript_views_file`, `add_javascript_views_footer`, `add_php_ajax`, `add_php_allowedit`, `add_php_batchcopy`, `add_php_batchmove`, `add_php_getitem`, `add_php_getitems`, `add_php_getitems_after_all`, `add_php_getlistquery`, `add_php_postsavehook`, `add_php_save`, `add_sql`, `addlinked_views`, `addpermissions`, `addtables`, `addtabs`, `add_php_before_delete`, `add_php_before_publish`, `add_php_document`, `add_php_after_delete`, `add_php_after_publish`, `php_before_delete`, `php_before_publish`, `php_controller`, `php_document`, `php_after_delete`, `php_after_publish`, `ajax_input`, `css_view`, `css_views`, `custom_button`, `description`, `html_import_view`, `icon`, `icon_add`, `icon_category`, `javascript_view_file`, `javascript_view_footer`, `javascript_views_file`, `javascript_views_footer`, `name_list`, `system_name`, `name_single`, `php_ajaxmethod`, `php_allowedit`, `php_batchcopy`, `php_batchmove`, `php_getitem`, `php_getitems`, `php_getitems_after_all`, `php_getlistquery`, `php_import`, `php_import_display`, `php_import_save`, `php_import_setdata`, `php_model`, `php_postsavehook`, `php_save`, `short_description`, `source`, `sql`, `type`, `php_before_save`, `php_controller_list`, `php_getform`, `php_after_cancel`, `php_allowadd`, `php_before_cancel`, `php_import_ext`, `php_import_headers`, `php_model_list`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `guid`) VALUES
(109, '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{\"addtabs0\":{\"name\":\"Details\"},\"addtabs1\":{\"name\":\"More\"}}', '', '', '', '', '', '', '', '', '', '', '', '{}', '', '', '{}', '', '', 'images/WoodMannequin-icon.png', 'images/WoodMannequin-icon-plus.png', '', '', '', '', '', 'Looks', 'Look', 'Look', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'The demo view', '', '', 1, '', '', '', '', '', '', '', '', '', '{\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"ASC\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"\",\"direction\":\"ASC\"}}},\"privacy\":{\"activate\":\"1\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"682\"}}', 1, '2016-10-18 11:44:46', '2020-05-21 14:39:27', 18, '', 110, 'c1053952-8a84-4398-aef1-41726f7c0043');

--
-- Dumping data for table `#__componentbuilder_site_view`
--

INSERT INTO `#__componentbuilder_site_view` (`id`, `add_css_document`, `add_css`, `add_js_document`, `add_php_document`, `add_php_jview`, `add_php_jview_display`, `add_php_view`, `add_php_ajax`, `add_custom_button`, `custom_button`, `button_position`, `php_controller`, `php_model`, `ajax_input`, `php_ajaxmethod`, `codename`, `css_document`, `css`, `custom_get`, `default`, `description`, `dynamic_get`, `js_document`, `main_get`, `name`, `system_name`, `php_document`, `php_jview`, `php_jview_display`, `php_view`, `snippet`, `params`, `javascript_file`, `libraries`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `guid`) VALUES
(23, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'looks', '', '', '', 'PHRhYmxlIGNsYXNzPSJ1ay10YWJsZSB1ay10YWJsZS1ob3ZlciI+DQogICAgPGNhcHRpb24+PD9waHAgZWNobyBUZXh0OjpfKCdMaXN0IG9mIGFsbCBsb29rcycpOyA/PjwvY2FwdGlvbj4NCiAgICA8dGhlYWQ+DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIFRleHQ6Ol8oJ05hbWUnKTsgPz48L3RoPg0KICAgICAgICAgICAgPHRoPjw/cGhwIGVjaG8gVGV4dDo6XygnRGVzY3JpcHRpb24nKTsgPz48L3RoPg0KICAgICAgICA8L3RyPg0KICAgIDwvdGhlYWQ+DQogICAgPHRib2R5Pg0KICAgICAgICA8P3BocCBmb3JlYWNoICgkdGhpcy0+aXRlbXMgYXMgJGl0ZW0pOiA/Pg0KICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQ+PGEgaHJlZj0iPD9waHAgZWNobyAgW1tbQ29tcG9uZW50XV1dSGVscGVyUm91dGU6OmdldExvb2tpbmdSb3V0ZSgkaXRlbS0+c2x1Zyk7ID8+IiA+PD9waHAgZWNobyAkaXRlbS0+bmFtZTsgPz48L2E+PC90ZD4NCiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICR0aGlzLT5lc2NhcGUoJGl0ZW0tPmRlc2NyaXB0aW9uLCB0cnVlLCAxMjApOyA/Pjw/cGhwIGVjaG8gJGl0ZW0tPmVkaXRMaW5rOyA/PjwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgPC90Ym9keT4NCjwvdGFibGU+', 'The List of all published looks', 36, '', 36, 'Looks', 'Looks', '', '', '', '', '', '', '', '', 1, '2016-04-05 14:31:59', '2016-10-20 15:57:24', 9, '', 14, 'b2dce59e-e3b8-4467-bcb5-8f2df4bdfeb7'),
(25, '', '', '', '', 1, 1, '', '', '', '', 1, '', '', '', '', 'looking', '', '', '', 'PGFydGljbGUgY2xhc3M9InVrLWNvbW1lbnQiPg0KICAgIDxoZWFkZXIgY2xhc3M9InVrLWNvbW1lbnQtaGVhZGVyIj4NCiAgICAgICAgPGltZyBjbGFzcz0idWstY29tbWVudC1hdmF0YXIiIHNyYz0ie2ltYWdldXJsfSIgYWx0PSIiPg0KICAgICAgICA8aDQgY2xhc3M9InVrLWNvbW1lbnQtdGl0bGUiPjw/cGhwIGVjaG8gJHRoaXMtPmVzY2FwZSgkdGhpcy0+aXRlbS0+bmFtZSk7ID8+PC9oND4NCiAgICAgICAgPGRpdiBjbGFzcz0idWstY29tbWVudC1tZXRhIj48P3BocCBlY2hvIFRleHQ6Ol8oJ0hpdHMnKTsgPz46IDw/cGhwIGVjaG8gJHRoaXMtPml0ZW0tPmhpdHM7ID8+PC9kaXY+DQogICAgPC9oZWFkZXI+DQogICAgPGRpdiBjbGFzcz0idWstY29tbWVudC1ib2R5Ij4NCiAgICAgICAgPD9waHAgZWNobyAkdGhpcy0+aXRlbS0+ZGVzY3JpcHRpb247ID8+DQogICAgICAgIDw/cGhwIGlmICgkdGhpcy0+aXRlbS0+YWRkKTogPz4NCiAgICAgICAgICAgIDxiciAvPg0KICAgICAgICAgICAgPCEtLSBUaGlzIGlzIGEgYnV0dG9uIHRvZ2dsaW5nIHRoZSBtb2RhbCAtLT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiIgZGF0YS11ay1tb2RhbD0ie3RhcmdldDonI21vcmUtZGV0YWlscy0wOTAnfSI+PD9waHAgZWNobyBUZXh0OjpfKCdNb3JlIERldGFpbHMnKTsgPz48L2J1dHRvbj4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgPC9kaXY+DQo8L2FydGljbGU+DQo8P3BocCBpZiAoJHRoaXMtPml0ZW0tPmFkZCk6ID8+DQo8IS0tIFRoaXMgaXMgdGhlIG1vZGFsIC0tPg0KPGRpdiBpZD0ibW9yZS1kZXRhaWxzLTA5MCIgY2xhc3M9InVrLW1vZGFsIj4NCiAgICA8ZGl2IGNsYXNzPSJ1ay1tb2RhbC1kaWFsb2ciPg0KICAgICAgICA8YSBjbGFzcz0idWstbW9kYWwtY2xvc2UgdWstY2xvc2UiPjwvYT4NCiAgICAgICAgPGRsIGNsYXNzPSJ1ay1kZXNjcmlwdGlvbi1saXN0LWhvcml6b250YWwiPg0KICAgICAgICA8P3BocCBpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPml0ZW0tPmRhdGVvZmJpcnRoKSk6ID8+DQogICAgICAgICAgICA8ZHQ+PD9waHAgZWNobyBUZXh0OjpfKCdCaXJ0aCBkYXknKTsgPz48L2R0PjxkZD48P3BocCBlY2hvIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZmFuY3lEYXRlKCR0aGlzLT5lc2NhcGUoJHRoaXMtPml0ZW0tPmRhdGVvZmJpcnRoKSk7ID8+PC9kZD4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgIDw/cGhwIGlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+aXRlbS0+ZW1haWwpKTogPz4NCiAgICAgICAgICAgIDxkdD48P3BocCBlY2hvIFRleHQ6Ol8oJ0VtYWlsJyk7ID8+PC9kdD48ZGQ+PD9waHAgZWNobyAkdGhpcy0+ZXNjYXBlKCR0aGlzLT5pdGVtLT5lbWFpbCk7ID8+PC9kZD4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgIDw/cGhwIGlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+aXRlbS0+bW9iaWxlX3Bob25lKSk6ID8+DQogICAgICAgICAgICA8ZHQ+PD9waHAgZWNobyBUZXh0OjpfKCdNb2JpbGUnKTsgPz48L2R0PjxkZD48P3BocCBlY2hvICR0aGlzLT5lc2NhcGUoJHRoaXMtPml0ZW0tPm1vYmlsZV9waG9uZSk7ID8+PC9kZD4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgIDw/cGhwIGlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+aXRlbS0+d2Vic2l0ZSkpOiA/Pg0KICAgICAgICAgICAgPGR0Pjw/cGhwIGVjaG8gVGV4dDo6XygnV2Vic2l0ZScpOyA/PjwvZHQ+PGRkPjw/cGhwIGVjaG8gJHRoaXMtPmVzY2FwZSgkdGhpcy0+aXRlbS0+d2Vic2l0ZSk7ID8+PC9kZD4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgIDwvZGw+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjw/cGhwIGVuZGlmOyA/Pg==', 'Looking at a look', 39, '', 39, 'Looking', 'Looking', '', 'CSAvKioNCgkgKiBJbmNyZW1lbnQgdGhlIGhpdCBjb3VudGVyIGZvciB0aGUgcHJlYWNoZXIuDQoJICoNCgkgKiBAcGFyYW0gICBpbnRlZ2VyICAkcGsgIFByaW1hcnkga2V5IG9mIHRoZSBwcmVhY2hlciB0byBpbmNyZW1lbnQuDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICBUcnVlIGlmIHN1Y2Nlc3NmdWw7DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGhpdCgkcGsgPSAwKQ0KCXsNCgkJaWYgKCRwaykNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkvLyBGaWVsZHMgdG8gdXBkYXRlLg0KCQkJJGZpZWxkcyA9IGFycmF5KA0KCQkJICAgICRkYi0+cXVvdGVOYW1lKCdoaXRzJykgLiAnID0gJy4kZGItPnF1b3RlTmFtZSgnaGl0cycpLicgKyAxJw0KCQkJKTsNCg0KCQkJLy8gQ29uZGl0aW9ucyBmb3Igd2hpY2ggcmVjb3JkcyBzaG91bGQgYmUgdXBkYXRlZC4NCgkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkgICAgJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuICRwaw0KCQkJKTsNCg0KCQkJJHF1ZXJ5LT51cGRhdGUoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9sb29rJykpLT5zZXQoJGZpZWxkcyktPndoZXJlKCRjb25kaXRpb25zKTsNCg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJcmV0dXJuICRkYi0+ZXhlY3V0ZSgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9', 'Ly8gYWRkIGEgaGl0IHRvIHRoZSBsb29rDQppZiAoJHRoaXMtPmhpdCgkdGhpcy0+aXRlbS0+aWQpKQ0Kew0KCSR0aGlzLT5pdGVtLT5oaXRzKys7DQp9', '', '', '', '', '', 1, '2016-10-20 15:11:29', '2016-10-20 17:10:58', 16, '', 14, '851ed44e-5431-4951-876f-4b62a4c56ad2');

--
-- Dumping data for table `#__componentbuilder_dynamic_get`
--

INSERT INTO `#__componentbuilder_dynamic_get` (`id`, `add_php_after_getitem`, `add_php_before_getitem`, `add_php_after_getitems`, `add_php_before_getitems`, `add_php_getlistquery`, `php_after_getitem`, `php_before_getitem`, `php_before_getitems`, `php_getlistquery`, `php_after_getitems`, `pagination`, `addcalculation`, `db_selection`, `db_table_main`, `filter`, `getcustom`, `gettype`, `global`, `join_db_table`, `join_view_table`, `main_source`, `name`, `order`, `php_calculation`, `php_custom_get`, `view_selection`, `view_table_main`, `where`, `php_router_parse`, `group`, `params`, `published`, `version`, `hits`, `ordering`, `guid`) VALUES
(36, '', '', 1, '', '', '', '', '', '', 'CQkvLyBkbyBhIHF1aWNrIGJ1aWxkIG9mIGFsbCBlZGl0IGxpbmtzIGxpbmtzDQoJCWlmIChpc3NldCgkaXRlbXMpICYmICRpdGVtcykNCgkJew0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRuciA9PiAmJGl0ZW0pDQoJCQl7DQoJCQkJJGNhbkRvID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRBY3Rpb25zKCdsb29rJywkaXRlbSwnbG9va3MnKTsNCgkJCQlpZiAoJGNhbkRvLT5nZXQoJ2xvb2suZWRpdCcpKQ0KCQkJCXsNCgkJCQkJJGl0ZW0tPmVkaXRMaW5rID0gJzxiciAvPjxiciAvPjxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstd2lkdGgtMS0xIiBocmVmPSInOw0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgLj0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PWxvb2smdGFzaz1sb29rLmVkaXQmaWQ9JyAuICRpdGVtLT5pZCk7DQoJCQkJCSRpdGVtLT5lZGl0TGluayAuPSAnIj48aSBjbGFzcz0idWstaWNvbi1wZW5jaWwiPjwvaT48c3BhbiBjbGFzcz0idWstaGlkZGVuLXNtYWxsIj4nOw0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgLj0gVGV4dDo6XygnRWRpdCBMb29rJyk7DQoJCQkJCSRpdGVtLT5lZGl0TGluayAuPSAnPC9zcGFuPjwvYT4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0=', 1, '', '', '', '', '', 2, '', '', '', 1, 'Looks', '{\"order0\":{\"table_key\":\"a.name\",\"direction\":\"ASC\"}}', '', '', 'a.*', 109, '{\"where0\":{\"table_key\":\"a.published\",\"operator\":\"1\",\"value_key\":\"1\"}}', '', '', '', 1, 12, '', 13, '32b3ae7d-8aa8-47f1-ab2e-30076ddaa029'),
(39, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '{\"filter0\":{\"filter_type\":\"1\",\"state_key\":\"id\",\"operator\":\"1\",\"table_key\":\"a.id\"}}', '', 1, '', '', '', 1, 'Looking', '', '', '', 'a.id AS id\r\na.name AS name\r\na.alias AS alias\r\na.description AS description\r\na.add AS add\r\na.email AS email\r\na.mobile_phone AS mobile_phone\r\na.dateofbirth AS dateofbirth\r\na.image AS image\r\na.website AS website\r\na.published AS published\r\na.hits AS hits\r\na.created_by AS created_by', 109, '', '', '', '', 1, 8, '', '', '98e6ea56-0911-4d89-b1f4-8f0bb1e4aa5a');

--
-- Dumping data for table `#__componentbuilder_library`
--

INSERT INTO `#__componentbuilder_library` (`id`, `addconditions`, `description`, `type`, `how`, `name`, `php_setdocument`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `libraries`, `params`, `guid`) VALUES
(1, '', '', 1, '', 'No Library', '', 1, '2017-11-11 22:08:33', '2017-12-08 15:51:34', 4, '', 1, '', '', 'bc8e675d-7536-4a68-b186-fb4b988fa3e2'),
(2, '', '', 1, 1, 'Bootstrap v4', '', 1, '2017-11-12 02:08:39', '2017-12-17 09:04:10', 18, '', 2, '', '', '6f6650a5-ebff-4783-8508-f0285c0e98a6'),
(3, '{}', '', 1, 1, 'Uikit v3', '', 1, '2017-11-11 22:08:45', '2021-05-27 00:18:36', 20, '', 3, '', '', '5eeee148-cebd-4a92-bc0e-56efea3cffdc'),
(4, '', '', 1, 4, 'Uikit v2', '', 1, '2017-11-11 22:08:51', '2018-06-29 02:36:17', 6, '', 4, '', '', '367fbf66-890e-42a7-a82d-f780d2f86786'),
(5, '', '', 1, 4, 'FooTable v2', '', 1, '2017-11-11 22:08:57', '2017-12-11 20:07:32', 9, '', 5, '', '', 'a90edd5a-8521-4fb1-b6b3-9a21e9f56642'),
(6, '', '', 1, 4, 'FooTable v3', '', 1, '2017-11-25 22:11:03', '2017-12-10 15:54:45', 12, '', 6, '', '', '86829029-dc8a-424e-b046-b189a92565d9');

--
-- Dumping data for table `#__componentbuilder_snippet`
--

INSERT INTO `#__componentbuilder_snippet` (`id`, `contributor_company`, `contributor_email`, `contributor_name`, `contributor_website`, `description`, `heading`, `library`, `name`, `snippet`, `type`, `url`, `usage`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `guid`) VALUES
(1, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'The grid system of UIkit follows the mobile-first approach and accomodates up to 10 grid columns. It uses units with predefined classes inside each grid, which define the column width. It is also possible to combine the grid with classes from the Flex component, although it works only in modern browsers.', 'Create a fully responsive, fluid and nestable grid layout.', 4, 'Grid', 'PGRpdiBkYXRhLXVrLWdyaWQtbWFyZ2luPSIiIGNsYXNzPSJ0bS1ncmlkLXRydW5jYXRlIHVrLWdyaWQgdWstZ3JpZC1kaXZpZGVyIHVrLXRleHQtY2VudGVyIj4NCiAgICA8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMS0zIj4NCiAgICAJPGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtYm94Ij4NCiAgICAgICAgCXtjb250ZW50fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMS0zIj4NCiAgICAJPGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtYm94Ij4NCiAgICAgICAgCXtjb250ZW50fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMS0zIj4NCiAgICAJPGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtYm94Ij4NCiAgICAgICAgCXtjb250ZW50fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2Pg==', 1, 'http://getuikit.com/docs/grid.html', 'To create the grid container, add the .uk-grid class to a parent element. Add one of the .uk-width-* classes to child elements to determine, how the units shall be sized. The grid supports 1, 2, 3, 4, 5, 6 and 10 unit divisions. This table gives you an overview of the uk-width-* classes that can be applied to units.', '', 1, '2015-05-19 17:18:32', '2017-11-11 22:09:27', 77, '', 1, 'fba0aa3f-03e4-49e7-92b6-9d5e98f66967'),
(2, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'UIkit uses panels to outline certain sections of your content, which can be styled differently. Typically, panels are arranged in grid columns from the Grid component.', 'Create layout boxes with different styles.', 4, 'Panel', 'PGRpdiBkYXRhLXVrLWdyaWQtbWFyZ2luPSIiIGNsYXNzPSJ1ay1ncmlkIj4NCiAgICA8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtYm94Ij4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idWstcGFuZWwtdGl0bGUiPnt0aXRsZX08L2gzPg0KICAgICAgICAgICAge2NvbnRlbnR9DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ1ay1wYW5lbCB1ay1wYW5lbC1ib3giPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ1ay1wYW5lbC10aXRsZSI+e3RpdGxlfTwvaDM+DQogICAgICAgICAgICB7Y29udGVudH0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQo8L2Rpdj4=', 1, 'http://getuikit.com/docs/panel.html', 'The Panel component consists of the panel itself, the panel title and a panel badge. To prevent redundant white space, top and bottom margins are removed from the panel\'s content.', '', 1, '2015-05-19 20:04:54', '2017-11-11 22:09:27', 70, '', 1, '4b6e7ee3-75d9-459a-805e-764915247253'),
(3, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Separate content sections by bundling them in blocks with different styles.', 4, 'Block', 'PGRpdiBjbGFzcz0idWstYmxvY2sgdWstYmxvY2stcHJpbWFyeSI+e2NvbnRlbnR9PC9kaXY+', 1, 'http://getuikit.com/docs/block.html', 'To apply this component, just add the .uk-block class to a container element.', '', 1, '2015-05-19 20:09:41', '2017-11-11 22:09:27', 56, '', 2, 'cf2eb2fa-38d1-431c-9383-939c58becd7a'),
(4, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create articles within your page.', 4, 'Article', 'PGFydGljbGUgY2xhc3M9InVrLWFydGljbGUiPg0KICAgIDxoMSBjbGFzcz0idWstYXJ0aWNsZS10aXRsZSI+e3RpdGxlfTwvaDE+DQogICAgPHAgY2xhc3M9InVrLWFydGljbGUtbWV0YSI+e21ldGF9PC9wPg0KICAgIDxwIGNsYXNzPSJ1ay1hcnRpY2xlLWxlYWQiPntjb250ZW50fTwvcD4NCiAgICB7Y29udGVudH0NCiAgICA8aHIgY2xhc3M9InVrLWFydGljbGUtZGl2aWRlciI+DQogICAge2NvbnRlbnR9DQo8L2FydGljbGU+', 1, 'http://getuikit.com/docs/article.html', 'The article component consists of the article itself, a title, meta data, an opening paragraph and dividers.', '', 1, '2015-05-19 20:12:06', '2017-11-11 22:09:27', 53, '', 3, 'ced3bf82-0a72-4acd-a1f5-471959993f2b'),
(5, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create comments, for example about articles.', 4, 'Comment', 'PGFydGljbGUgY2xhc3M9InVrLWNvbW1lbnQiPg0KICAgIDxoZWFkZXIgY2xhc3M9InVrLWNvbW1lbnQtaGVhZGVyIj4NCiAgICAgICAgPGltZyBjbGFzcz0idWstY29tbWVudC1hdmF0YXIiIHNyYz0ie2ltYWdldXJsfSIgYWx0PSIiPg0KICAgICAgICA8aDQgY2xhc3M9InVrLWNvbW1lbnQtdGl0bGUiPnt0aXRsZX08L2g0Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJ1ay1jb21tZW50LW1ldGEiPnttZXRhfTwvZGl2Pg0KICAgIDwvaGVhZGVyPg0KICAgIDxkaXYgY2xhc3M9InVrLWNvbW1lbnQtYm9keSI+e3RpdGxlfTwvZGl2Pg0KPC9hcnRpY2xlPg==', 1, 'http://getuikit.com/docs/comment.html', 'The Comment component consists of a comment header, including an avatar, a title and meta data, and a comment body.', '', 1, '2015-05-19 20:13:53', '2017-11-11 22:09:27', 54, '', 4, '29e9ecf1-0646-44a6-a226-37cfdd4242dc'),
(6, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful utility classes to style your content.', 4, 'Utility Container', 'PGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTEtMiB1ay1jb250YWluZXItY2VudGVyIj57Y29udGVudH08L2Rpdj4=', 1, 'http://getuikit.com/docs/utility.html', 'Add the .uk-container class to a block element to give it a max-width and wrap the main content of your website. For large screens it applies a different max-width.\r\n\r\nTo center the container, use the .uk-container-center class. For any other block element, you additionally need to apply a width.', '', 1, '2015-05-19 20:18:00', '2017-11-11 22:09:27', 56, '', 5, '18735087-2ad0-465b-9468-bfac52b56721'),
(7, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful utility classes to style your content.', 4, 'Utility Clearing and floating', 'PGRpdiBjbGFzcz0idWstY2xlYXJmaXgiPg0KICAgIDxkaXYgY2xhc3M9InVrLWZsb2F0LXJpZ2h0Ij57Y29udGVudH08L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJ1ay1mbG9hdC1sZWZ0Ij57Y29udGVudH08L2Rpdj4NCjwvZGl2Pg==', 1, 'http://getuikit.com/docs/utility.html', 'Floating is fundamental for creating all kinds of layouts. But floats need to be cleared or in the worst case, you might end up with a scrambled site. The following classes will help you to setup basic layouts.', '', 1, '2015-05-19 20:18:54', '2017-11-11 22:09:27', 54, '', 5, '24e36964-a3ba-416d-93f5-be56c0e30231'),
(8, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'This component uses Flexbox, a concept that is still quite new but extremely powerful for creating layouts.', 'Utilize the power of Flexbox to create a wide range of layouts.', 4, 'Flex', 'PGRpdiBjbGFzcz0idWstZmxleCB1ay1mbGV4LXdyYXAgdWstZmxleC13cmFwLXJldmVyc2UgdWstZmxleC13cmFwLXNwYWNlLWFyb3VuZCI+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtMS0zIHVrLXBhbmVsIHVrLXBhbmVsLWJveCB1ay1wYW5lbC1ib3gtcHJpbWFyeSI+e2NvbnRlbnR9PC9kaXY+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtMS0yIHVrLXBhbmVsIHVrLXBhbmVsLWJveCB1ay1wYW5lbC1ib3gtcHJpbWFyeSB1ay1tYXJnaW4tbGVmdCI+e2NvbnRlbnR9PC9kaXY+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtMS0zIHVrLXBhbmVsIHVrLXBhbmVsLWJveCB1ay1wYW5lbC1ib3gtcHJpbWFyeSI+e2NvbnRlbnR9PC9kaXY+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtMS0zIHVrLXBhbmVsIHVrLXBhbmVsLWJveCB1ay1wYW5lbC1ib3gtcHJpbWFyeSB1ay1tYXJnaW4tbGVmdCI+e2NvbnRlbnR9PC9kaXY+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtMS0yIHVrLXBhbmVsIHVrLXBhbmVsLWJveCB1ay1wYW5lbC1ib3gtcHJpbWFyeSI+e2NvbnRlbnR9PC9kaXY+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtMS0zIHVrLXBhbmVsIHVrLXBhbmVsLWJveCB1ay1wYW5lbC1ib3gtcHJpbWFyeSB1ay1tYXJnaW4tbGVmdCI+e2NvbnRlbnR9PC9kaXY+DQo8L2Rpdj4=', 1, 'http://getuikit.com/docs/flex.html', 'To apply this component, just add the .uk-flex class to a  element. This will create the flex container. By default, all flex items will be aligned to the left and equally matched in height and width.', '', 1, '2015-05-19 20:22:23', '2017-11-11 22:09:27', 55, '', 5, '7725158d-f8b6-4fc3-ada7-0cd994f98ce5'),
(9, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'This component allows you to create fullscreen teasers using images, objects or even iframes. Regardless what kind of element, it will always be centered vertically and horizontally and cover its container without losing its proportions. You can also place additional content, like text or an image, on top of the image or video.', 'Expand images or videos to cover their entire container.', 4, 'Cover', 'PGRpdiBjbGFzcz0idWstY292ZXIiPg0KICAgIDx2aWRlbyBjbGFzcz0idWstY292ZXItb2JqZWN0IiB3aWR0aD0iIiBoZWlnaHQ9IiI+DQogICAgICAgIDxzb3VyY2Ugc3JjPSIiIHR5cGU9IiI+DQogICAgPC92aWRlbz4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJ1ay1jb3Zlci1iYWNrZ3JvdW5kIj4NCiAgICA8aW1nIGNsYXNzPSJ1ay1pbnZpc2libGUiIHNyYz0iIiB3aWR0aD0iIiBoZWlnaHQ9IiIgYWx0PSIiPg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9InVrLWNvdmVyIHVrLXBvc2l0aW9uLXJlbGF0aXZlIj4NCiAgICA8aW1nIGNsYXNzPSJ1ay1pbnZpc2libGUiIHNyYz0iIiB3aWR0aD0iIiBoZWlnaHQ9IiIgYWx0PSIiPg0KICAgIDx2aWRlbyBjbGFzcz0idWstY292ZXItb2JqZWN0IHVrLXBvc2l0aW9uLWFic29sdXRlIiB3aWR0aD0iIiBoZWlnaHQ9IiI+DQogICAgICAgIDxzb3VyY2Ugc3JjPSIiIHR5cGU9IiI+DQogICAgPC92aWRlbz4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJ1ay1jb3Zlci1iYWNrZ3JvdW5kIHVrLXBvc2l0aW9uLXJlbGF0aXZlIj4NCiAgICA8aW1nIGNsYXNzPSJ1ay1pbnZpc2libGUiIHNyYz0iIiB3aWR0aD0iIiBoZWlnaHQ9IiIgYWx0PSIiPg0KICAgIDxkaXYgY2xhc3M9InVrLXBvc2l0aW9uLWNvdmVyIHVrLWZsZXggdWstZmxleC1jZW50ZXIgdWstZmxleC1taWRkbGUiPntjb250ZW50fTwvZGl2Pg0KPC9kaXY+', 1, 'http://getuikit.com/docs/cover.html', 'The Cover component is applied differently, depending on whether you are using a background image, an object or an iframe. The simplest way is to add the .uk-cover-background class to a  element with a background image.', '', 1, '2015-05-19 20:29:57', '2017-11-11 22:09:27', 54, '', 5, '2ca20d4d-82d3-412d-bada-95c2ba0d9bb0'),
(10, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'The Dynamic Grid component allows you to create a dynamic and responsive grid layout utilizing the Grid component. Grid items will arrange themselves fluently and seamlessly for a gap-free multi-column layout on all device sizes.', 'Create a multi-column, dynamic grid layout whose items can be sorted and filtered.', 4, 'Dynamic Grid', 'PCEtLSBUaGlzIGlzIGEgZ3JpZCB1c2luZyB1ay13aWR0aC0qIG9uIGVhY2ggaXRlbSAtLT4NCjxkaXYgZGF0YS11ay1ncmlkPg0KICAgIDxkaXYgY2xhc3M9InVrLXdpZHRoLXNtYWxsLTEtMiB1ay13aWR0aC1tZWRpdW0tMS00Ij57Y29udGVudH08L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJ1ay13aWR0aC1zbWFsbC0xLTIgdWstd2lkdGgtbWVkaXVtLTEtNCI+e2NvbnRlbnR9PC9kaXY+DQo8L2Rpdj4NCg0KPCEtLSBUaGlzIGlzIGEgZ3JpZCB1c2luZyB1ay1ncmlkLXdpZHRoLSogb24gdGhlIGdyaWQgaXRzZWxmIC0tPg0KPGRpdiBjbGFzcz0idWstZ3JpZC13aWR0aC1zbWFsbC0xLTIgdWstZ3JpZC13aWR0aC1tZWRpdW0tMS00IiBkYXRhLXVrLWdyaWQ+DQogICAgPGRpdj57Y29udGVudH08L2Rpdj4NCiAgICA8ZGl2Pntjb250ZW50fTwvZGl2Pg0KPC9kaXY+DQoNCjwhLS0gRmlsdGVyIENvbnRyb2xzIC0tPg0KPHVsIGlkPSJteS1pZCIgY2xhc3M9InVrLXN1Ym5hdiI+DQogICAgPGxpIGRhdGEtdWstZmlsdGVyPSIiPjxhIGhyZWY9IiI+QWxsPC9hPjwvbGk+DQogICAgPGxpIGRhdGEtdWstZmlsdGVyPSJmaWx0ZXItYSI+PGEgaHJlZj0iIj5BIEZpbHRlcjwvYT48L2xpPg0KICAgIDxsaSBkYXRhLXVrLWZpbHRlcj0iZmlsdGVyLWIiPjxhIGhyZWY9IiI+YiBGaWx0ZXI8L2E+PC9saT4NCjwvdWw+DQo8IS0tIER5bmFtaWMgR3JpZCAtLT4NCjxkaXYgZGF0YS11ay1ncmlkPSJ7Y29udHJvbHM6ICcjbXktaWQnfSI+DQogICAgPGRpdiBkYXRhLXVrLWZpbHRlcj0iZmlsdGVyLWEiPntjb250ZW50fTwvZGl2Pg0KICAgIDxkaXYgZGF0YS11ay1maWx0ZXI9ImZpbHRlci1iIj57Y29udGVudH08L2Rpdj4NCjwvZGl2Pg==', 1, 'http://getuikit.com/docs/grid-js.html', 'To apply this component, add the data-uk-grid attribute to the container element. Set the width of the grid items by using the uk-width-* or .uk-grid-width-* classes from the Grid component.', '', 1, '2015-05-19 20:35:29', '2017-11-11 22:09:27', 53, '', 5, 'c7824206-e8db-4c3d-a910-5e0735fdb74b'),
(11, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Defines different styles for list navigations.', 4, 'Nav', 'PHVsIGNsYXNzPSJ1ay1uYXYgdWstbmF2LXNpZGUiPg0KICAgIDxsaSBjbGFzcz0idWstYWN0aXZlIj48YSBocmVmPSIjIj5BY3RpdmU8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iIyI+SXRlbTwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjIj5JdGVtPC9hPjwvbGk+DQo8L3VsPg==', 2, 'http://getuikit.com/docs/nav.html', 'To apply this component, add the .uk-nav class to an  element. Use  elements as menu items within the list. To apply an active state to a menu item, just add the .uk-active class.', '', 1, '2015-05-19 20:39:09', '2017-11-11 22:09:27', 53, '', 6, '5e214ba9-2152-4192-9f26-143346ed8090'),
(12, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Defines different styles for the navigation bar.', 4, 'Navbar', 'PG5hdiBjbGFzcz0idWstbmF2YmFyIj4NCiAgICA8dWwgY2xhc3M9InVrLW5hdmJhci1uYXYiPg0KICAgICAgICA8bGkgY2xhc3M9InVrLWFjdGl2ZSI+PGEgaHJlZj0iIj5BY3RpdmU8L2E+PC9saT4NCiAgICAgICAgPGxpPjxhIGhyZWY9IiI+SXRlbTwvYT48L2xpPg0KICAgICAgICA8bGkgZGF0YS11ay1kcm9wZG93bj0iIiBjbGFzcz0idWstcGFyZW50IiBhcmlhLWhhc3BvcHVwPSJ0cnVlIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+DQogICAgICAgICAgICA8YSBocmVmPSIiPlBhcmVudDwvYT4NCiAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InVrLWRyb3Bkb3duIHVrLWRyb3Bkb3duLW5hdmJhciIgc3R5bGU9IiI+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ1ay1uYXYgdWstbmF2LW5hdmJhciI+DQogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjIj5JdGVtPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjIj5Bbm90aGVyIGl0ZW08L2E+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ1ay1uYXYtaGVhZGVyIj5IZWFkZXI8L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyI+SXRlbTwvYT48L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyI+QW5vdGhlciBpdGVtPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idWstbmF2LWRpdmlkZXIiPjwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjIj5TZXBhcmF0ZWQgaXRlbTwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICANCiAgICAgICAgPC9saT4NCiAgICA8L3VsPg0KPC9uYXY+', 2, 'http://getuikit.com/docs/navbar.html', 'The Navbar component consists of the navbar itself and one or more navigations.', '', 1, '2015-05-19 20:41:10', '2017-11-11 22:09:27', 53, '', 6, '431dd68d-40cf-4b3b-9cce-b743a7f36ac3'),
(13, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Defines different styles for a sub navigation.', 4, 'Subnav', 'PHVsIGNsYXNzPSJ1ay1zdWJuYXYgdWstc3VibmF2LXBpbGwiPg0KICAgIDxsaSBjbGFzcz0idWstYWN0aXZlIj48YSBocmVmPSIjIj5BY3RpdmU8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iIyI+SXRlbTwvYT48L2xpPg0KICAgIDxsaSBjbGFzcz0idWstZGlzYWJsZWQiPjxhIGhyZWY9IiMiPkRpc2FibGVkPC9hPjwvbGk+DQogICAgPGxpIGRhdGEtdWstZHJvcGRvd249Inttb2RlOidjbGljayd9Ij4NCiAgICAgICAgPGEgaHJlZj0iIyI+TW9yZSA8aSBjbGFzcz0idWstaWNvbi1jYXJldC1kb3duIj48L2k+PC9hPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ1ay1kcm9wZG93biB1ay1kcm9wZG93bi1zbWFsbCI+DQogICAgICAgICAgICA8dWwgY2xhc3M9InVrLW5hdiB1ay1uYXYtZHJvcGRvd24iPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjIj5JdGVtPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPkFub3RoZXIgaXRlbTwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idWstbmF2LWhlYWRlciI+SGVhZGVyPC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyI+SXRlbTwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjIj5Bbm90aGVyIGl0ZW08L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InVrLW5hdi1kaXZpZGVyIj48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjIj5TZXBhcmF0ZWQgaXRlbTwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9saT4NCjwvdWw+', 2, 'http://getuikit.com/docs/subnav.html', 'To apply this component, use the following classes. To align a subnav, for example to horizontally center it, you can use the Flex component.', '', 1, '2015-05-19 20:42:37', '2017-11-11 22:09:27', 53, '', 6, 'b8f8835d-ffe4-4b0f-ad69-a7e847dbedbd'),
(14, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create breadcrumbs to show users their location within a website.', 4, 'Breadcrumb', 'PHVsIGNsYXNzPSJ1ay1icmVhZGNydW1iIj4NCiAgICA8bGk+PGEgaHJlZj0iIyI+SG9tZTwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjIj5CbG9nPC9hPjwvbGk+DQogICAgPGxpPjxzcGFuPkNhdGVnb3J5PC9zcGFuPjwvbGk+DQogICAgPGxpIGNsYXNzPSJ1ay1hY3RpdmUiPjxzcGFuPlBvc3Q8L3NwYW4+PC9saT4NCjwvdWw+', 2, 'http://getuikit.com/docs/breadcrumb.html', 'The Breadcrumb component consists of links which are aligned side by side and separated by a divider.', '', 1, '2015-05-19 20:44:01', '2017-11-11 22:09:27', 53, '', 6, 'c1cccf2b-84c3-46de-81f1-0ca5f2bfd13d'),
(15, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easlily create a nicely looking pagination to navigate through pages.', 4, 'Pagination', 'PHVsIGNsYXNzPSJ1ay1wYWdpbmF0aW9uIj4NCiAgICA8bGk+PGEgaHJlZj0iIyI+MTwvYT48L2xpPg0KICAgIDxsaT48c3Bhbj4uLi48L3NwYW4+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iIyI+ODwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjIj45PC9hPjwvbGk+DQogICAgPGxpIGNsYXNzPSJ1ay1hY3RpdmUiPjxzcGFuPjEwPC9zcGFuPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiMiPjExPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiMiPjEyPC9hPjwvbGk+DQogICAgPGxpPjxzcGFuPi4uLjwvc3Bhbj48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjIj4yMDwvYT48L2xpPg0KPC91bD4=', 2, 'http://getuikit.com/docs/pagination.html', 'The Pagination component consists of button-like styled links, that are aligned side by side.', '', 1, '2015-05-19 20:45:49', '2017-11-11 22:09:27', 53, '', 6, '597e8806-9e28-4411-9a94-61d874d2ac0e'),
(16, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create a tabbed navigation with different styles.', 4, 'Tab', 'PHVsIGNsYXNzPSJ1ay10YWIiIGRhdGEtdWstdGFiPg0KICAgIDxsaSBjbGFzcz0idWstYWN0aXZlIj48YSBocmVmPSIiPkFjdGl2ZTwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIiPkl0ZW08L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iIj5JdGVtPC9hPjwvbGk+DQogICAgPGxpIGNsYXNzPSJ1ay1kaXNhYmxlZCI+PGEgaHJlZj0iIj5EaXNhYmxlZDwvYT48L2xpPg0KPC91bD4=', 2, 'http://getuikit.com/docs/tab.html', 'The Tab component consists of clickable tabs, that are aligned side by side.\r\n\r\nThe data-uk-tab attribute is required for two purposes. Firstly, it enables the responsive behaviour. If the parent container is too small to accomodate all tabs, they will be combined into a dropdown, toggled by a single tab, which represents the active tab item. This also requires the Dropdown component in order to work.\r\n\r\nAnd secondly, its functionality is coupled to the Switcher component, which is necessary to dynamically transition through different contents using tabbed navigation.', '', 1, '2015-05-19 20:47:34', '2017-11-11 22:09:27', 55, '', 6, '690739e8-9547-472c-a4e7-c9362321b37b'),
(17, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create a tabbed navigation with different styles.', 4, 'Thumbnav', 'PHVsIGNsYXNzPSJ1ay10aHVtYm5hdiI+DQogICAgPGxpIGNsYXNzPSJ1ay1hY3RpdmUiPjxhIGhyZWY9IiI+PGltZyBzcmM9IiIgYWx0PSIiPjwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIiPjxpbWcgc3JjPSIiIGFsdD0iIj48L2E+PC9saT4NCjwvdWw+', 2, 'http://getuikit.com/docs/thumbnav.html', 'To apply this component, add the .uk-thumbnav class to an  element and nest your thumbnail images inside  elements within the list items. The thumbnav will wrap into several rows, if it is wider than its container and automatically applies a gutter. Add the .uk-active class to create an active state.\r\n\r\nTo align a subnav, for example to horizontally center it, you can use the Flex component.', '', 1, '2015-05-19 20:48:42', '2017-11-11 22:09:27', 54, '', 6, '0e405e4f-4701-46e1-8631-8ce5e13736de'),
(18, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'Modifiers\r\n\r\nTo display the list in a different style, just add a modifier class to the the .uk-list class. The modifiers of the List component are not combinable with each other.', 'Easily create nicely looking lists, which come in different styles.', 4, 'List', 'PHVsIGNsYXNzPSJ1ay1saXN0IHVrLWxpc3Qtc3RyaXBlZCI+DQogICAgPGxpPi4uLjwvbGk+DQogICAgPGxpPi4uLjwvbGk+DQogICAgPGxpPi4uLjwvbGk+DQo8L3VsPg==', 3, 'http://getuikit.com/docs/list.html', 'To apply this component, add the .uk-list class to an unordered or ordered list. The list will now display without any spacing or list-style. [uk-list-line] [uk-list-space]', '', 1, '2015-06-01 16:09:04', '2017-11-11 22:09:27', 3, '', 6, '74ab3937-65e0-4dab-9eb1-2ff87554bdde'),
(19, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'Add the .uk-description-list-horizontal class to display terms and descriptions side by side.', 'Easily create nicely looking description lists, which come in different styles.', 4, 'Description list', 'PGRsIGNsYXNzPSJ1ay1kZXNjcmlwdGlvbi1saXN0LWhvcml6b250YWwiPg0KICAgIDxkdD4uLi48L2R0Pg0KICAgIDxkZD4uLi48L2RkPg0KPC9kbD4=', 3, 'http://getuikit.com/docs/description-list.html', 'There is no component class necessary to create a description list, but UIkit provides a couple of modifier classes to display the list in a different style. The modifiers of the Description list component are not combinable with each other. [uk-description-list-line]', '', 1, '2015-06-01 16:10:54', '2017-11-11 22:09:27', 54, '', 6, 'dae0a910-056d-4e04-b603-43c23d705c1a'),
(20, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking tables, which come in different styles.', 4, 'Table', 'PHRhYmxlIGNsYXNzPSJ1ay10YWJsZSB1ay10YWJsZS1ob3ZlciI+DQogICAgPGNhcHRpb24+Li4uPC9jYXB0aW9uPg0KICAgIDx0aGVhZD4NCiAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRoPi4uLjwvdGg+DQogICAgICAgIDwvdHI+DQogICAgPC90aGVhZD4NCiAgICA8dGZvb3Q+DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZD4uLi48L3RkPg0KICAgICAgICA8L3RyPg0KICAgIDwvdGZvb3Q+DQogICAgPHRib2R5Pg0KICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQ+Li4uPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICA8L3Rib2R5Pg0KPC90YWJsZT4=', 3, 'http://getuikit.com/docs/table.html', 'To apply this component, add the .uk-table class to a  element.', '', 1, '2015-06-01 16:12:46', '2017-11-11 22:09:27', 53, '', 6, 'b0f501cf-ca6c-4261-bf4c-dc10e036a259'),
(21, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button href', 'PGEgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSIgaHJlZj0iIj4uLi48L2E+', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:17:24', '2017-11-11 22:09:27', 11, '', 7, '0a0ed2e9-ab18-472b-899b-6209b60aff08'),
(22, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button primary', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IiB0eXBlPSJidXR0b24iPi4uLjwvYnV0dG9uPg==', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:18:37', '2017-11-11 22:09:27', 10, '', 7, 'efaae1eb-1cb7-4761-84b7-a804c1b09b15'),
(23, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button disabled', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIiB0eXBlPSJidXR0b24iIGRpc2FibGVkPi4uLjwvYnV0dG9uPg==', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:18:53', '2017-11-11 22:09:27', 10, '', 7, 'b47d9020-eb39-45d4-a6e4-33b28ca51ac7'),
(24, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button success', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iPi4uLjwvYnV0dG9uPg==', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:19:15', '2017-11-11 22:09:27', 10, '', 7, 'd1686780-d1d4-4732-8a0f-184bc29e96ac'),
(25, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button danger', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1kYW5nZXIiIHR5cGU9ImJ1dHRvbiI+Li4uPC9idXR0b24+', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:19:28', '2017-11-11 22:09:27', 10, '', 7, 'aaa1d48e-1f21-4f69-b503-27d462070d29'),
(26, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button mini', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLWJ1dHRvbi1taW5pIiB0eXBlPSJidXR0b24iPi4uLjwvYnV0dG9uPg==', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:20:06', '2017-11-11 22:09:27', 10, '', 7, '5f6cfab0-c011-4f01-b4a2-a6e5712b3df1'),
(27, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button small', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1zdWNjZXNzIHVrLWJ1dHRvbi1zbWFsbCIgdHlwZT0iYnV0dG9uIj4uLi48L2J1dHRvbj4=', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:20:37', '2017-11-11 22:09:27', 10, '', 7, 'c91a3e7d-d56c-43d5-90bf-5d0a436a92ea'),
(28, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button large', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1sYXJnZSIgdHlwZT0iYnV0dG9uIj4uLi48L2J1dHRvbj4=', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:20:58', '2017-11-11 22:09:27', 10, '', 7, '29cbadf8-661a-479f-b219-60fbcfb819d9'),
(29, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button full width', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLXdpZHRoLTEtMSB1ay1tYXJnaW4tc21hbGwtYm90dG9tIiB0eXBlPSJidXR0b24iPi4uLjwvYnV0dG9uPg==', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:21:28', '2017-11-11 22:09:27', 10, '', 7, '1077c3fd-a993-4b8b-97a1-72f82327366c'),
(30, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button group', 'PGRpdiBjbGFzcz0idWstYnV0dG9uLWdyb3VwIj4NCiAgICA8YSBjbGFzcz0idWstYnV0dG9uIiBocmVmPSIiPi4uLjwvYT4NCiAgICA8YnV0dG9uIGNsYXNzPSJ1ay1idXR0b24iPi4uLjwvYnV0dG9uPg0KICAgIDxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiI+Li4uPC9idXR0b24+DQo8L2Rpdj4=', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:21:42', '2017-11-11 22:09:27', 10, '', 7, '8cb09ac8-95c5-4eaa-a6c2-849f74bf5767'),
(31, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easily create nicely looking buttons, which come in different styles.', 4, 'Button dropdowns', 'PCEtLSBUaGlzIGlzIHRoZSBjb250YWluZXIgZW5hYmxpbmcgdGhlIEphdmFTY3JpcHQgLS0+DQo8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZHJvcGRvd24iIGRhdGEtdWstZHJvcGRvd24+DQoNCiAgICA8IS0tIFRoaXMgaXMgdGhlIGJ1dHRvbiB0b2dnbGluZyB0aGUgZHJvcGRvd24gLS0+DQogICAgPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIj4uLi48L2J1dHRvbj4NCg0KICAgIDwhLS0gVGhpcyBpcyB0aGUgZHJvcGRvd24gLS0+DQogICAgPGRpdiBjbGFzcz0idWstZHJvcGRvd24gdWstZHJvcGRvd24tc21hbGwiPg0KICAgICAgICA8dWwgY2xhc3M9InVrLW5hdiB1ay1uYXYtZHJvcGRvd24iPg0KICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiI+Li4uPC9hPjwvbGk+DQogICAgICAgICAgICA8bGk+PGEgaHJlZj0iIj4uLi48L2E+PC9saT4NCiAgICAgICAgPC91bD4NCiAgICA8L2Rpdj4NCg0KPC9kaXY+', 4, 'http://getuikit.com/docs/button.html', 'To apply this component, add the .uk-button class to an  or  element. Now you have created a button. Add the disabled attribute to a  element to disable the button.', '', 1, '2015-06-01 16:22:52', '2017-11-11 22:09:27', 10, '', 7, '5b5ebfa4-408c-4b5e-9d28-a6370c944bdc'),
(32, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'This component is using the fantastic Font Awesome icon font, a project by Dave Gandy. Altogether Font Awesome provides more than 300 symbols and glyphs for web-related actions. Icon fonts are great, because they enable you to easily change color, size and more via CSS. They are scalable vector graphics, which means that they look great on high-resolution displays.', 'Place vector icons anywhere using an icon font.', 4, 'Icon', 'PGkgY2xhc3M9InVrLWljb24tY29nIj48L2k+', 4, 'http://getuikit.com/docs/icon.html', 'To apply this component, add any .uk-icon-* class to an  or  element. Et voilà, you have a vector icon, which inherits size and color just like your text does.', '', 1, '2015-06-01 16:24:46', '2017-11-11 22:09:27', 10, '', 8, 'df1fa1bc-231e-4f67-be48-f9ea6812ae3d'),
(33, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Easlily create nicely looking badges to label and highlight your content.', 4, 'Badge', 'PGRpdiBjbGFzcz0idWstYmFkZ2UiPi4uLjwvZGl2Pg==', 4, 'http://getuikit.com/docs/badge.html', 'To create a badge, just add the .uk-badge class to a  or  element.', '', 1, '2015-06-01 16:25:53', '2017-11-11 22:09:27', 10, '', 8, '20532a80-6b61-4b5d-a861-05dbc4d82e02'),
(34, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Defines styles for success, warning and error messages.', 4, 'Alert', 'PGRpdiBjbGFzcz0idWstYWxlcnQgdWstYWxlcnQtc3VjY2VzcyIgZGF0YS11ay1hbGVydD4NCiAgICA8YSBocmVmPSIiIGNsYXNzPSJ1ay1hbGVydC1jbG9zZSB1ay1jbG9zZSI+PC9hPg0KICAgIDxwPi4uLjwvcD4NCjwvZGl2Pg==', 4, 'http://getuikit.com/docs/badge.html', 'To apply this component, add the .uk-alert class to a block element.', '', 1, '2015-06-01 16:26:54', '2017-11-11 22:09:27', 10, '', 8, '9b0e4beb-680a-412b-a477-391cdb81c844'),
(35, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text small', 'PHNwYW4gY2xhc3M9InVrLXRleHQtc21hbGwiPkFkZCB0aGlzIGNsYXNzIHRvIGRlY3JlYXNlIHRoZSBmb250IHNpemUuPC9zcGFuPg==', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:29:02', '2017-11-11 22:09:27', 10, '', 8, '8516fb71-8f10-4828-a670-af861fd8aae5'),
(36, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text large', 'PHNwYW4gY2xhc3M9InVrLXRleHQtbGFyZ2UiPkFkZCB0aGlzIGNsYXNzIHRvIGRlY3JlYXNlIHRoZSBmb250IHNpemUuPC9zcGFuPg==', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:29:14', '2017-11-11 22:09:27', 10, '', 8, '6188947b-c807-4ab7-8960-51a1d808efcb'),
(37, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text bold', 'PHNwYW4gY2xhc3M9InVrLXRleHQtYm9sZCI+QWRkIHRoaXMgY2xhc3MgdG8gZGVjcmVhc2UgdGhlIGZvbnQgc2l6ZS48L3NwYW4+', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:29:24', '2017-11-11 22:09:27', 10, '', 8, 'adabb157-ec5d-4c62-857f-2d89e77815e2'),
(38, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text muted', 'PHNwYW4gY2xhc3M9InVrLXRleHQtbXV0ZWQiPkFkZCB0aGlzIGNsYXNzIHRvIGRlY3JlYXNlIHRoZSBmb250IHNpemUuPC9zcGFuPg==', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:29:36', '2017-11-11 22:09:27', 10, '', 8, 'bb0b4ed1-5fb2-4799-9645-9d878d8d86a7'),
(39, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text primary', 'PHNwYW4gY2xhc3M9InVrLXRleHQtcHJpbWFyeSI+QWRkIHRoaXMgY2xhc3MgdG8gZGVjcmVhc2UgdGhlIGZvbnQgc2l6ZS48L3NwYW4+', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:29:46', '2017-11-11 22:09:27', 10, '', 8, '02d1e0d7-d461-46f2-b7d5-4c6d95558e11'),
(40, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text success', 'PHNwYW4gY2xhc3M9InVrLXRleHQtc3VjY2VzcyI+QWRkIHRoaXMgY2xhc3MgdG8gZGVjcmVhc2UgdGhlIGZvbnQgc2l6ZS48L3NwYW4+', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:29:57', '2017-11-11 22:09:27', 10, '', 8, 'f6a191bb-ef7a-4a91-823a-466200d35b4d'),
(41, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text warning', 'PHNwYW4gY2xhc3M9InVrLXRleHQtd2FybmluZyI+QWRkIHRoaXMgY2xhc3MgdG8gZGVjcmVhc2UgdGhlIGZvbnQgc2l6ZS48L3NwYW4+', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:30:09', '2017-11-11 22:09:27', 10, '', 8, 'd3a259e2-9839-4922-98d1-ef7ddf03da6b'),
(42, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text danger', 'PHNwYW4gY2xhc3M9InVrLXRleHQtZGFuZ2VyIj5BZGQgdGhpcyBjbGFzcyB0byBkZWNyZWFzZSB0aGUgZm9udCBzaXplLjwvc3Bhbj4=', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:30:19', '2017-11-11 22:09:27', 10, '', 8, '0994d67d-401e-49e1-a7ad-68f8c3c0460a'),
(43, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text contrast', 'PHNwYW4gY2xhc3M9InVrLXRleHQtY29udHJhc3QiPkFkZCB0aGlzIGNsYXNzIHRvIGRlY3JlYXNlIHRoZSBmb250IHNpemUuPC9zcGFuPg==', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:30:31', '2017-11-11 22:09:27', 10, '', 8, 'a5931e90-0d0e-4c60-8485-ae8b5620d540'),
(44, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text right', 'PHNwYW4gY2xhc3M9InVrLXRleHQtcmlnaHQiPkFkZCB0aGlzIGNsYXNzIHRvIGRlY3JlYXNlIHRoZSBmb250IHNpemUuPC9zcGFuPg==', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:31:18', '2017-11-11 22:09:27', 10, '', 8, '24d3dcc3-5ac3-4366-85b8-0a75cac6cef9'),
(45, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text center', 'PHNwYW4gY2xhc3M9InVrLXRleHQtY2VudGVyIj5BZGQgdGhpcyBjbGFzcyB0byBkZWNyZWFzZSB0aGUgZm9udCBzaXplLjwvc3Bhbj4=', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:31:30', '2017-11-11 22:09:27', 10, '', 8, '2ced9267-0326-440e-85e7-3ac8911fbbf5'),
(46, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text justify', 'PHNwYW4gY2xhc3M9InVrLXRleHQtanVzdGlmeSI+QWRkIHRoaXMgY2xhc3MgdG8gZGVjcmVhc2UgdGhlIGZvbnQgc2l6ZS48L3NwYW4+', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:31:41', '2017-11-11 22:09:27', 10, '', 8, '79acfaa7-7a31-441e-8830-3f63c1e1aa54'),
(47, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text truncate', 'PHNwYW4gY2xhc3M9InVrLXRleHQtdHJ1bmNhdGUiPkFkZCB0aGlzIGNsYXNzIHRvIGRlY3JlYXNlIHRoZSBmb250IHNpemUuPC9zcGFuPg==', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:32:17', '2017-11-11 22:09:27', 10, '', 8, '0f43f9ec-98d6-4856-be34-f4e852520bf8'),
(48, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A collection of useful text utility classes to style your content.', 4, 'Text nowrap', 'PHNwYW4gY2xhc3M9InVrLXRleHQtbm93cmFwIj5BZGQgdGhpcyBjbGFzcyB0byBkZWNyZWFzZSB0aGUgZm9udCBzaXplLjwvc3Bhbj4=', 4, 'http://getuikit.com/docs/text.html', 'UIkit offers various text utlities to style your text. ', '', 1, '2015-06-01 16:32:30', '2017-11-11 22:09:27', 10, '', 8, '5489c68b-4926-43f3-980b-e5b251f10ac8'),
(49, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation fade', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLWZhZGUiPi4uLjwvZGl2Pg==', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:33:49', '2017-11-11 22:09:27', 10, '', 8, '6cba0fb7-f790-4ad2-ba03-2cdca25a8dd9'),
(50, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation scale-up', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNjYWxlLXVwIj4uLi48L2Rpdj4=', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:34:02', '2017-11-11 22:09:27', 10, '', 8, '11df7f35-5e63-43e1-96ef-f2a0f58bef19'),
(51, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation scale-down', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNjYWxlLWRvd24iPi4uLjwvZGl2Pg==', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:34:11', '2017-11-11 22:09:27', 10, '', 8, '1b4c533e-94f6-4a55-81a2-1370c088582d'),
(52, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation slide-top', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNsaWRlLXRvcCI+Li4uPC9kaXY+', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:34:22', '2017-11-11 22:09:27', 10, '', 8, '8fc46f20-9783-42cb-92e2-3e0fc5a875c7'),
(53, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation slide-bottom', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNsaWRlLWJvdHRvbSI+Li4uPC9kaXY+', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:34:34', '2017-11-11 22:09:27', 10, '', 8, '2d8ed2c0-20af-4c3e-8e0a-fea75fdce181'),
(54, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation slide-left', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNsaWRlLWxlZnQiPi4uLjwvZGl2Pg==', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:34:46', '2017-11-11 22:09:27', 10, '', 8, '0bb64e85-6438-4aac-9f60-ad9c8f3c522b'),
(55, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation slide-right', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNsaWRlLXJpZ2h0Ij4uLi48L2Rpdj4=', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:34:57', '2017-11-11 22:09:27', 10, '', 8, 'cc303d9d-7940-433f-a918-e46b937f34b6'),
(56, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation shake', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNoYWtlIj4uLi48L2Rpdj4=', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:35:08', '2017-11-11 22:09:27', 10, '', 8, 'b688ea4a-23b3-470c-b499-dedac36a9c19'),
(57, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation scale', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNjYWxlIj4uLi48L2Rpdj4=', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:35:19', '2017-11-11 22:09:27', 10, '', 8, '997b5991-5be8-4efb-b5e6-1ae988ea4f4a'),
(58, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation fade reverse', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLWZhZGUgdWstYW5pbWF0aW9uLXJldmVyc2UiPi4uLjwvZGl2Pg==', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:37:24', '2017-11-11 22:09:27', 11, '', 8, '6bfd3c02-d4f2-464a-a61b-040324d96789'),
(59, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation scale-up reverse', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNjYWxlLXVwIHVrLWFuaW1hdGlvbi1yZXZlcnNlIj4uLi48L2Rpdj4=', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:38:33', '2017-11-11 22:09:27', 10, '', 8, '71296148-4c2f-4c69-bbc8-de50d76dc6c8'),
(60, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation scale-down reverse', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNjYWxlLWRvd24gdWstYW5pbWF0aW9uLXJldmVyc2UiPi4uLjwvZGl2Pg==', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:38:49', '2017-11-11 22:09:27', 10, '', 8, 'a5c4eadc-e98a-45e1-9c88-d9f761256c88'),
(61, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation slide-top reverse', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNsaWRlLXRvcCB1ay1hbmltYXRpb24tcmV2ZXJzZSI+Li4uPC9kaXY+', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:39:02', '2017-11-11 22:09:27', 10, '', 8, '79766303-ff2d-465c-8b4a-a2d2cae268e4'),
(62, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation slide-bottom reverse', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNsaWRlLWJvdHRvbSB1ay1hbmltYXRpb24tcmV2ZXJzZSI+Li4uPC9kaXY+', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:39:13', '2017-11-11 22:09:27', 10, '', 8, 'c20f18a6-74b4-4368-be0b-52d532500f79'),
(63, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation slide-left reverse', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNsaWRlLWxlZnQgdWstYW5pbWF0aW9uLXJldmVyc2UiPi4uLjwvZGl2Pg==', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:39:26', '2017-11-11 22:09:27', 10, '', 8, 'f4dfb5f9-33ed-4cfc-baab-4f6e3f80fa19'),
(64, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation slide-right reverse', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNsaWRlLXJpZ2h0IHVrLWFuaW1hdGlvbi1yZXZlcnNlIj4uLi48L2Rpdj4=', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:39:38', '2017-11-11 22:09:27', 10, '', 8, '735a91e2-6867-43a7-ad66-cb6576018bfe'),
(65, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'A basic collection of smooth animations to use within your page.', 4, 'Animation scale reverse', 'PGRpdiBjbGFzcz0idWstYW5pbWF0aW9uLXNjYWxlIHVrLWFuaW1hdGlvbi1yZXZlcnNlIj4uLi48L2Rpdj4=', 4, 'http://getuikit.com/docs/animation.html', 'To apply this component, add any .uk-animation-* class to an element and it will fade in with a nice animation. These classes are commonly set by using JavaScript to apply the animation to specific behaviors.', '', 1, '2015-06-01 16:40:02', '2017-11-11 22:09:27', 10, '', 8, '918eaa08-13ff-4d7b-b691-2ced6afde21e'),
(66, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create modal dialogs with different styles and transitions.', 4, 'Modal default', 'PCEtLSBUaGlzIGlzIGEgYnV0dG9uIHRvZ2dsaW5nIHRoZSBtb2RhbCAtLT4NCjxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiIgZGF0YS11ay1tb2RhbD0ie3RhcmdldDonI215LWlkJ30iPi4uLjwvYnV0dG9uPg0KDQo8IS0tIFRoaXMgaXMgdGhlIG1vZGFsIC0tPg0KPGRpdiBpZD0ibXktaWQiIGNsYXNzPSJ1ay1tb2RhbCI+DQogICAgPGRpdiBjbGFzcz0idWstbW9kYWwtZGlhbG9nIj4NCiAgICAgICAgPGEgY2xhc3M9InVrLW1vZGFsLWNsb3NlIHVrLWNsb3NlIj48L2E+DQogICAgICAgIC4uLg0KICAgIDwvZGl2Pg0KPC9kaXY+', 5, 'http://getuikit.com/docs/modal.html', 'The modal component consists of an overlay, a dialog and a close button.', '', 1, '2015-06-01 19:57:08', '2017-11-11 22:09:27', 10, '', 8, '732ecce3-c923-4221-ab04-d7f424b8cd1e'),
(67, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create modal dialogs with different styles and transitions.', 4, 'Modal header-footer', 'PCEtLSBUaGlzIGlzIGEgYnV0dG9uIHRvZ2dsaW5nIHRoZSBtb2RhbCAtLT4NCjxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiIgZGF0YS11ay1tb2RhbD0ie3RhcmdldDonI215LWlkJ30iPi4uLjwvYnV0dG9uPg0KDQo8IS0tIFRoaXMgaXMgdGhlIG1vZGFsIC0tPg0KPGRpdiBpZD0ibXktaWQiIGNsYXNzPSJ1ay1tb2RhbCI+DQogICAgPGRpdiBjbGFzcz0idWstbW9kYWwtZGlhbG9nIj4NCiAgICAgICAgPGRpdiBjbGFzcz0idWstbW9kYWwtaGVhZGVyIj4uLi48L2Rpdj4NCiAgICAgICAgLi4uDQogICAgICAgIDxkaXYgY2xhc3M9InVrLW1vZGFsLWZvb3RlciI+Li4uPC9kaXY+DQogICAgPC9kaXY+DQo8L2Rpdj4=', 5, 'http://getuikit.com/docs/modal.html', 'The modal component consists of an overlay, a dialog and a close button.', '', 1, '2015-06-01 19:57:50', '2017-11-11 22:09:27', 10, '', 8, 'a0114851-724e-4bb1-b617-f44b33abafde'),
(68, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create modal dialogs with different styles and transitions.', 4, 'Modal image', 'PCEtLSBUaGlzIGlzIGEgYnV0dG9uIHRvZ2dsaW5nIHRoZSBtb2RhbCAtLT4NCjxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiIgZGF0YS11ay1tb2RhbD0ie3RhcmdldDonI215LWlkJ30iPi4uLjwvYnV0dG9uPg0KDQo8IS0tIFRoaXMgaXMgdGhlIG1vZGFsIC0tPg0KPGRpdiBpZD0ibXktaWQiIGNsYXNzPSJ1ay1tb2RhbCI+DQogICAgPGRpdiBjbGFzcz0idWstbW9kYWwtZGlhbG9nIHVrLW1vZGFsLWRpYWxvZy1saWdodGJveCI+DQogICAgICAgIDxhIGhyZWY9IiIgY2xhc3M9InVrLW1vZGFsLWNsb3NlIHVrLWNsb3NlIHVrLWNsb3NlLWFsdCI+PC9hPg0KICAgICAgICA8aW1nIHNyYz0iIiBhbHQ9IiI+DQogICAgPC9kaXY+DQo8L2Rpdj4=', 5, 'http://getuikit.com/docs/modal.html', 'The modal component consists of an overlay, a dialog and a close button.', '', 1, '2015-06-01 19:58:26', '2017-11-11 22:09:27', 10, '', 8, '296abb37-599b-4fe2-bd17-9008b026a2fc'),
(69, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'The Off-canvas component is perfect for building a mobile navigation, similar to those which are popular with many native mobile apps, where a single button in the upper left corner toggles an off-canvas sidebar with a menu.', 'Create a smooth off-canvas sidebar that slides in and out of the page.', 4, 'Off-canvas default', 'PCEtLSBUaGlzIGlzIGEgYnV0dG9uIHRvZ2dsaW5nIHRoZSBvZmYtY2FudmFzIHNpZGViYXIgLS0+DQo8YnV0dG9uIGNsYXNzPSJ1ay1idXR0b24iIGRhdGEtdWstb2ZmY2FudmFzPSJ7dGFyZ2V0OicjbXktaWQnfSI+Li4uPC9idXR0b24+DQoNCjwhLS0gVGhpcyBpcyB0aGUgb2ZmLWNhbnZhcyBzaWRlYmFyIC0tPg0KPGRpdiBpZD0ibXktaWQiIGNsYXNzPSJ1ay1vZmZjYW52YXMiPg0KICAgIDxkaXYgY2xhc3M9InVrLW9mZmNhbnZhcy1iYXIiPi4uLjwvZGl2Pg0KPC9kaXY+', 5, 'http://getuikit.com/docs/offcanvas.html', 'The Off-canvas component consists of an overlay and an off-canvas bar.', '', 1, '2015-06-01 20:00:09', '2017-11-11 22:09:27', 10, '', 8, '063b892a-956b-4950-a7e0-afa8a6c9e14f'),
(70, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'The Off-canvas component is perfect for building a mobile navigation, similar to those which are popular with many native mobile apps, where a single button in the upper left corner toggles an off-canvas sidebar with a menu.', 'Create a smooth off-canvas sidebar that slides in and out of the page.', 4, 'Off-canvas right', 'PCEtLSBUaGlzIGlzIGEgYnV0dG9uIHRvZ2dsaW5nIHRoZSBvZmYtY2FudmFzIHNpZGViYXIgLS0+DQo8YnV0dG9uIGNsYXNzPSJ1ay1idXR0b24iIGRhdGEtdWstb2ZmY2FudmFzPSJ7dGFyZ2V0OicjbXktaWQnfSI+Li4uPC9idXR0b24+DQoNCjwhLS0gVGhpcyBpcyB0aGUgb2ZmLWNhbnZhcyBzaWRlYmFyIC0tPg0KPGRpdiBpZD0ibXktaWQiIGNsYXNzPSJ1ay1vZmZjYW52YXMiPg0KICAgIDxkaXYgY2xhc3M9InVrLW9mZmNhbnZhcy1iYXIgdWstb2ZmY2FudmFzLWJhci1mbGlwIj4uLi48L2Rpdj4NCjwvZGl2Pg==', 5, 'http://getuikit.com/docs/offcanvas.html', 'The Off-canvas component consists of an overlay and an off-canvas bar.', '', 1, '2015-06-01 20:00:37', '2017-11-11 22:09:27', 10, '', 8, 'e5a619b7-ef6f-46b4-a30b-4b79b2d8d43f'),
(71, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Dynamically transition through different content panes.', 4, 'Switcher default', 'PCEtLSBUaGlzIGlzIHRoZSBjb250YWluZXIgb2YgdGhlIHRvZ2dsaW5nIGVsZW1lbnRzIC0tPg0KPHVsIGRhdGEtdWstc3dpdGNoZXI9Intjb25uZWN0OicjbXktaWQnfSI+DQogICAgPGxpPjxhIGhyZWY9IiI+Li4uPC9hPjwvbGk+DQo8L3VsPg0KDQo8IS0tIFRoaXMgaXMgdGhlIGNvbnRhaW5lciBvZiB0aGUgY29udGVudCBpdGVtcyAtLT4NCjx1bCBpZD0ibXktaWQiIGNsYXNzPSJ1ay1zd2l0Y2hlciI+DQogICAgPGxpPi4uLjwvbGk+DQo8L3VsPg==', 5, 'http://getuikit.com/docs/switcher.html', 'The switcher component consists of a number of toggles and their related content items. Add the data-uk-switcher=\"{connect:\'#ID\'}\" attribute to the element which contains the toggles, targetting the same id as is used on the element containing the content items. Add the .uk-switcher class to the same element. Typically the switcher is combined with other components, some of which will be shown here.', '', 1, '2015-06-01 20:02:41', '2017-11-11 22:09:27', 10, '', 8, 'fd850fcf-366b-4b7e-9ccc-bb515f316ab7'),
(72, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'In some cases you want to switch to another content section from within the active content. This is possible using the data-uk-switcher-item attribute. To target the items, you need to set the data attribute to the number of the respective content item.', 'Dynamically transition through different content panes.', 4, 'Switcher in-content', 'PCEtLSBUaGlzIGlzIHRoZSBuYXYgY29udGFpbmluZyB0aGUgdG9nZ2xpbmcgZWxlbWVudHMgLS0+DQo8dWwgZGF0YS11ay1zd2l0Y2hlcj0ie2Nvbm5lY3Q6JyNteS1pZCd9Ij4NCiAgICA8bGk+PGEgaHJlZj0iIj4uLi48L2E+PC9saT4NCjwvdWw+DQoNCjwhLS0gVGhpcyBpcyB0aGUgY29udGFpbmVyIG9mIHRoZSBjb250ZW50IGl0ZW1zIC0tPg0KPHVsIGlkPSJteS1pZCIgY2xhc3M9InVrLXN3aXRjaGVyIj4NCiAgICA8bGk+IC4uLiA8YSBocmVmPSIiIGRhdGEtdWstc3dpdGNoZXItaXRlbT0iMCI+Li4uPC9hPjwvbGk+DQogICAgPGxpPiAuLi4gPGEgaHJlZj0iIiBkYXRhLXVrLXN3aXRjaGVyLWl0ZW09IjEiPi4uLjwvYT48L2xpPg0KPC91bD4=', 5, 'http://getuikit.com/docs/switcher.html', 'The switcher component consists of a number of toggles and their related content items. Add the data-uk-switcher=\"{connect:\'#ID\'}\" attribute to the element which contains the toggles, targetting the same id as is used on the element containing the content items. Add the .uk-switcher class to the same element. Typically the switcher is combined with other components, some of which will be shown here.', '', 1, '2015-06-01 20:04:24', '2017-11-11 22:09:27', 10, '', 8, 'c2e83f1f-facd-43ba-ae8d-fc3ccc1debc7'),
(73, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'It is also possible to connect multiple content containers. Just extend the connect parameter with the ID of the additional container.', 'Dynamically transition through different content panes.', 4, 'Switcher multiple-items', 'PCEtLSBUaGlzIGlzIHRoZSBuYXYgY29udGFpbmluZyB0aGUgdG9nZ2xpbmcgZWxlbWVudHMgLS0+DQo8dWwgZGF0YS11ay1zd2l0Y2hlcj0ie2Nvbm5lY3Q6JyNteS1pZC1vbmUsICNteS1pZC10d28nfSI+DQogICAgPGxpPjxhIGhyZWY9IiI+Li4uPC9hPjwvbGk+DQo8L3VsPg0KDQo8IS0tIFRoZXNlIGFyZSB0aGUgY29udGFpbmVycyBvZiB0aGUgY29udGVudCBpdGVtcyAtLT4NCjx1bCBpZD0ibXktaWQtb25lIiBjbGFzcz0idWstc3dpdGNoZXIiPg0KICAgIDxsaT4uLi48L2xpPg0KPC91bD4NCg0KPHVsIGlkPSJteS1pZC10d28iIGNsYXNzPSJ1ay1zd2l0Y2hlciI+DQogICAgPGxpPi4uLjwvbGk+DQo8L3VsPg==', 5, 'http://getuikit.com/docs/switcher.html', 'The switcher component consists of a number of toggles and their related content items. Add the data-uk-switcher=\"{connect:\'#ID\'}\" attribute to the element which contains the toggles, targetting the same id as is used on the element containing the content items. Add the .uk-switcher class to the same element. Typically the switcher is combined with other components, some of which will be shown here.', '', 1, '2015-06-01 20:04:53', '2017-11-11 22:09:27', 10, '', 8, '7ca69d59-8d39-4d54-a88b-f9c673fcef2d'),
(74, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'The Switcher component allows you to add different animations to items when toggling between them. All you need to do is add the animation parameter to the data-attribute and define the animation that you want to apply. Check the table below for an overview of the animations provided.\r\n\r\nYou can also apply multiple animations by using the uk-animation-* classes from the Animation component. That way you can even create your own custom class to apply a different transition to the switcher.', 'Dynamically transition through different content panes.', 4, 'Switcher animation', 'PCEtLSBUaGlzIGlzIHRoZSBjb250YWluZXIgb2YgdGhlIHRvZ2dsaW5nIGVsZW1lbnRzIC0tPg0KPHVsIGRhdGEtdWstc3dpdGNoZXI9Intjb25uZWN0OicjbXktaWQnLCBhbmltYXRpb246ICd1ay1hbmltYXRpb24tZmFkZSwgdWstYW5pbWF0aW9uLXNsaWRlLWxlZnQnfSI+DQogICAgPGxpPjxhIGhyZWY9IiI+Li4uPC9hPjwvbGk+DQo8L3VsPg0KDQo8IS0tIFRoaXMgaXMgdGhlIGNvbnRhaW5lciBvZiB0aGUgY29udGVudCBpdGVtcyAtLT4NCjx1bCBpZD0ibXktaWQiIGNsYXNzPSJ1ay1zd2l0Y2hlciI+DQogICAgPGxpPi4uLjwvbGk+DQo8L3VsPg==', 5, 'http://getuikit.com/docs/switcher.html', 'The switcher component consists of a number of toggles and their related content items. Add the data-uk-switcher=\"{connect:\'#ID\'}\" attribute to the element which contains the toggles, targetting the same id as is used on the element containing the content items. Add the .uk-switcher class to the same element. Typically the switcher is combined with other components, some of which will be shown here.', '', 1, '2015-06-01 20:06:42', '2017-11-11 22:09:27', 10, '', 8, '2d1b0fad-f2ff-49b8-97dc-aab9d3553a15'),
(75, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'As an exception to the rule, add the data-uk-tab=\"{connect:\'#ID\'}\" attribute, using the parameter \"tab\" instead of \"switcher\", to the tabbed navigation to combine the switcher with the Tab component.', 'Dynamically transition through different content panes.', 4, 'Switcher tabs-horizontal', 'PCEtLSBUaGlzIGlzIHRoZSB0YWJiZWQgbmF2aWdhdGlvbiBjb250YWluaW5nIHRoZSB0b2dnbGluZyBlbGVtZW50cyAtLT4NCjx1bCBjbGFzcz0idWstdGFiIiBkYXRhLXVrLXRhYj0ie2Nvbm5lY3Q6JyNteS1pZCd9Ij4NCiAgICA8bGk+PGEgaHJlZj0iIj4uLi48L2E+PC9saT4NCjwvdWw+DQoNCjwhLS0gVGhpcyBpcyB0aGUgY29udGFpbmVyIG9mIHRoZSBjb250ZW50IGl0ZW1zIC0tPg0KPHVsIGlkPSJteS1pZCIgY2xhc3M9InVrLXN3aXRjaGVyIHVrLW1hcmdpbiI+DQogICAgPGxpPi4uLjwvbGk+DQo8L3VsPg==', 5, 'http://getuikit.com/docs/switcher.html', 'The switcher component consists of a number of toggles and their related content items. Add the data-uk-switcher=\"{connect:\'#ID\'}\" attribute to the element which contains the toggles, targetting the same id as is used on the element containing the content items. Add the .uk-switcher class to the same element. Typically the switcher is combined with other components, some of which will be shown here.', '', 1, '2015-06-01 20:08:04', '2017-11-11 22:09:27', 10, '', 8, 'f271532f-7bbb-4fab-a21c-7487ed72790e'),
(76, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'Use the Grid component to display content correctly with a vertical tabbed navigation.', 'Dynamically transition through different content panes.', 4, 'Switcher tabs-vertical', 'PCEtLSBUaGlzIGlzIHRoZSBsZWZ0IHZlcnRpY2FsIHRhYmJlZCBuYXZpZ2F0aW9uIC0tPg0KPGRpdiBjbGFzcz0idWstZ3JpZCI+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTEtMiI+DQogICAgICAgIDwhLS0gVGhpcyBpcyB0aGUgdmVydGljYWwgdGFiYmVkIG5hdmlnYXRpb24gY29udGFpbmluZyB0aGUgdG9nZ2xpbmcgZWxlbWVudHMgLS0+DQogICAgICAgIDx1bCBjbGFzcz0idWstdGFiIHVrLXRhYi1sZWZ0IiBkYXRhLXVrLXRhYj0ie2Nvbm5lY3Q6JyNteS1pZCd9Ij4uLi48L3VsPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0xLTIiPg0KICAgICAgICA8IS0tIFRoaXMgaXMgdGhlIGNvbnRhaW5lciBvZiB0aGUgY29udGVudCBpdGVtcyAtLT4NCiAgICAgICAgPHVsIGlkPSJteS1pZCIgY2xhc3M9InVrLXN3aXRjaGVyIj4uLi48L3VsPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQoNCjwhLS0gVGhpcyBpcyB0aGUgcmlnaHQgdmVydGljYWwgdGFiYmVkIG5hdmlnYXRpb24gLS0+DQo8ZGl2IGNsYXNzPSJ1ay1ncmlkIj4NCiAgICA8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMS0yIHVrLXB1c2gtMS0yIj4NCiAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSB2ZXJ0aWNhbCB0YWJiZWQgbmF2aWdhdGlvbiBjb250YWluaW5nIHRoZSB0b2dnbGluZyBlbGVtZW50cyAtLT4NCiAgICAgICAgPHVsIGNsYXNzPSJ1ay10YWIgdWstdGFiLXJpZ2h0IiBkYXRhLXVrLXRhYj0ie2Nvbm5lY3Q6JyNteS1pZCd9Ij4uLi48L3VsPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0xLTIgdWstcHVsbC0xLTIiPg0KICAgICAgICA8IS0tIFRoaXMgaXMgdGhlIGNvbnRhaW5lciBvZiB0aGUgY29udGVudCBpdGVtcyAtLT4NCiAgICAgICAgPHVsIGlkPSJteS1pZCIgY2xhc3M9InVrLXN3aXRjaGVyIj4uLi48L3VsPg0KICAgIDwvZGl2Pg0KPC9kaXY+', 5, 'http://getuikit.com/docs/switcher.html', 'The switcher component consists of a number of toggles and their related content items. Add the data-uk-switcher=\"{connect:\'#ID\'}\" attribute to the element which contains the toggles, targetting the same id as is used on the element containing the content items. Add the .uk-switcher class to the same element. Typically the switcher is combined with other components, some of which will be shown here.', '', 1, '2015-06-01 20:09:01', '2017-11-11 22:09:27', 10, '', 8, '86a0a1f5-5cce-4d65-9c74-2e39c6ba1bf8'),
(77, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'The switcher can also be applied to buttons or button groups from the Button component. Just add the switcher data attribute to a  element around a group of buttons or to the element with the .button-group class.', 'Dynamically transition through different content panes.', 4, 'Switcher button-group', 'PCEtLSBUaGlzIGlzIHRoZSBidXR0b24gZ3JvdXAgY29udGFpbmluZyB0aGUgdG9nZ2xpbmcgYnV0dG9ucyAtLT4NCjxkaXYgY2xhc3M9InVrLWJ1dHRvbi1ncm91cCIgZGF0YS11ay1zd2l0Y2hlcj0ie2Nvbm5lY3Q6JyNteS1pZCd9Ij4NCiAgICA8YnV0dG9uIGNsYXNzPSJ1ay1idXR0b24iIHR5cGU9ImJ1dHRvbiI+Li4uPC9idXR0b24+DQo8L2Rpdj4NCg0KPCEtLSBUaGlzIGlzIHRoZSBjb250YWluZXIgb2YgdGhlIGNvbnRlbnQgaXRlbXMgLS0+DQo8dWwgaWQ9Im15LWlkIiBjbGFzcz0idWstc3dpdGNoZXIgdWstbWFyZ2luIj4uLi48L3VsPg==', 5, 'http://getuikit.com/docs/switcher.html', 'The switcher component consists of a number of toggles and their related content items. Add the data-uk-switcher=\"{connect:\'#ID\'}\" attribute to the element which contains the toggles, targetting the same id as is used on the element containing the content items. Add the .uk-switcher class to the same element. Typically the switcher is combined with other components, some of which will be shown here.', '', 1, '2015-06-01 20:10:00', '2017-11-11 22:09:27', 10, '', 8, 'd252e658-4c57-4115-845c-0bdf66f4f640'),
(78, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'To apply the switcher to the Nav component, add the data attribute to the nav . Use the Grid component to arrange nav and content in a grid layout.', 'Dynamically transition through different content panes.', 4, 'Switcher navs', 'PGRpdiBjbGFzcz0idWstZ3JpZCI+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTEtNCI+DQoNCiAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSBuYXYgY29udGFpbmluZyB0aGUgdG9nZ2xpbmcgZWxlbWVudHMgLS0+DQogICAgICAgIDx1bCBjbGFzcz0idWstbmF2IHVrLW5hdi1zaWRlIiBkYXRhLXVrLXN3aXRjaGVyPSJ7Y29ubmVjdDonI215LWlkJ30iPg0KICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiI+Li4uPC9hPjwvbGk+DQogICAgICAgIDwvdWw+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTMtNCI+DQoNCiAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSBjb250YWluZXIgb2YgdGhlIGNvbnRlbnQgaXRlbXMgLS0+DQogICAgICAgIDx1bCBpZD0ibXktaWQiIGNsYXNzPSJ1ay1zd2l0Y2hlciI+DQogICAgICAgICAgICA8bGk+Li4uPC9saT4NCiAgICAgICAgPC91bD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg==', 5, 'http://getuikit.com/docs/switcher.html', 'The switcher component consists of a number of toggles and their related content items. Add the data-uk-switcher=\"{connect:\'#ID\'}\" attribute to the element which contains the toggles, targetting the same id as is used on the element containing the content items. Add the .uk-switcher class to the same element. Typically the switcher is combined with other components, some of which will be shown here.', '', 1, '2015-06-01 20:10:30', '2017-11-11 22:09:27', 10, '', 8, '517a296e-57c2-4d4b-9aae-589b23d1a398'),
(79, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Hide, switch or change the appearence of different contents through a toggle.', 4, 'Toggle default', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIiBkYXRhLXVrLXRvZ2dsZT0ie3RhcmdldDonI215LWlkJ30iPi4uLjwvYnV0dG9uPg0KDQo8ZGl2IGlkPSJteS1pZCI+Li4uPC9kaXY+', 5, 'http://getuikit.com/docs/toggle.html', 'To apply this component, just add the data-uk-toggle=\"{target: #ID}\" attribute to a  or  element. You can use any selector with the toggle attribute.\r\n\r\nThe toggle will add or remove a class from the item. By default, it adds the .uk-hidden class to hide the element.', '', 1, '2015-06-01 20:12:07', '2017-11-11 22:09:27', 10, '', 8, 'dae732b0-379e-4412-9bdb-559f87dc5992'),
(80, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'You can also toggle multiple items at the same time. Just use the appropriate selector.', 'Hide, switch or change the appearence of different contents through a toggle.', 4, 'Toggle multiple', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIiBkYXRhLXVrLXRvZ2dsZT0ie3RhcmdldDonLm15LWNsYXNzJ30iPi4uLjwvYnV0dG9uPg0KDQo8ZGl2IGNsYXNzPSJteS1jbGFzcyI+Li4uPC9kaXY+DQo8ZGl2IGNsYXNzPSJteS1jbGFzcyB1ay1oaWRkZW4iPi4uLjwvZGl2Pg==', 5, 'http://getuikit.com/docs/toggle.html', 'To apply this component, just add the data-uk-toggle=\"{target: #ID}\" attribute to a  or  element. You can use any selector with the toggle attribute.\r\n\r\nThe toggle will add or remove a class from the item. By default, it adds the .uk-hidden class to hide the element.', '', 1, '2015-06-01 20:12:34', '2017-11-11 22:09:27', 10, '', 8, '7a7c7acb-b309-40c5-92fe-33702c5f2f16'),
(81, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'You can also toggle multiple items at the same time. Just use the appropriate selector.', 'Hide, switch or change the appearence of different contents through a toggle.', 4, 'Toggle class', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIiBkYXRhLXVrLXRvZ2dsZT0ie3RhcmdldDonI215LWlkJywgY2xzOid1ay1wYW5lbC1ib3gtcHJpbWFyeSd9Ij4uLi48L2J1dHRvbj4NCg0KPGRpdiBpZD0ibXktaWQiIGNsYXNzPSJ1ay1wYW5lbCB1ay1wYW5lbC1ib3giPi4uLjwvZGl2Pg==', 5, 'http://getuikit.com/docs/toggle.html', 'To apply this component, just add the data-uk-toggle=\"{target: #ID}\" attribute to a  or  element. You can use any selector with the toggle attribute.\r\n\r\nThe toggle will add or remove a class from the item. By default, it adds the .uk-hidden class to hide the element.', '', 1, '2015-06-01 20:13:06', '2017-11-11 22:09:27', 19, '', 8, '10a7755a-4309-4172-b1bd-89a2e0d6edb6'),
(82, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'The Toggle component allows you to add animations to items when toggling between them. Just add one of the .uk-animation-* classes from the Animation component to the animation parameter. The class will be applied to the in as well as the out animation. If you prefer a different out animation, just add another class.', 'Hide, switch or change the appearence of different contents through a toggle.', 4, 'Toggle animations', 'PGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIiBkYXRhLXVrLXRvZ2dsZT0ie3RhcmdldDonI215LWlkJywgYW5pbWF0aW9uOid1ay1hbmltYXRpb24tc2xpZGUtbGVmdCwgdWstYW5pbWF0aW9uLXNsaWRlLWJvdHRvbSd9Ij4uLi48L2J1dHRvbj4NCg0KPGRpdiBpZD0ibXktaWQiPi4uLjwvZGl2Pg==', 5, 'http://getuikit.com/docs/toggle.html', 'To apply this component, just add the data-uk-toggle=\"{target: #ID}\" attribute to a  or  element. You can use any selector with the toggle attribute.\r\n\r\nThe toggle will add or remove a class from the item. By default, it adds the .uk-hidden class to hide the element.', '', 1, '2015-06-01 20:13:34', '2017-11-11 22:09:27', 19, '', 8, '31f54883-606b-43d5-b110-fba9774b7a34'),
(83, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Trigger events and animations while scrolling your page.', 4, 'Scrollspy default', 'PGRpdiBkYXRhLXVrLXNjcm9sbHNweT0ie2NsczondWstYW5pbWF0aW9uLWZhZGUnfSI+Li4uPC9kaXY+DQoNCjxkaXYgZGF0YS11ay1zY3JvbGxzcHk9IntjbHM6J3VrLWFuaW1hdGlvbi1mYWRlJywgcmVwZWF0OiB0cnVlfSI+Li4uPC9kaXY+DQoNCjxkaXYgZGF0YS11ay1zY3JvbGxzcHk9IntjbHM6J3VrLWFuaW1hdGlvbi1mYWRlJywgZGVsYXk6OTAwfSI+Li4uPC9kaXY+', 5, 'http://getuikit.com/docs/scrollspy.html', 'The scrollspy component listens to page scrolling and triggers events based on the scroll position. For example, if you scroll down a page and an element appears the first time in the viewport you can trigger a smooth animation to fade in the element. Just add the data-uk-scrollspy attribute and the following options.', '', 1, '2015-06-01 20:15:00', '2017-11-11 22:09:27', 19, '', 8, '39b72b40-85ec-4cc6-aded-c86611f31c24'),
(84, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'You can also group scrollspy elements, so you won\'t have to apply the data attribute to each of them. Just add the data-uk-scollspy\"{target:\'MY-CLASS\'}\" attribute to a container element, targetting the selector the items you want to animate within the container. When using a delay it will be applied cumulatively to the items within the row that scrolls into view. The delay will be resetted for the next row within the group when it scrolls into view.', 'Trigger events and animations while scrolling your page.', 4, 'Scrollspy groups', 'PGRpdiBkYXRhLXVrLXNjcm9sbHNweT0ie2NsczondWstYW5pbWF0aW9uLWZhZGUnLCB0YXJnZXQ6Jy5teS1jbGFzcycsIGRlbGF5OjMwMH0iPg0KDQogICAgPCEtLSBUaGlzIGl0ZW0gaGFzIG5vIGRlbGF5IC0tPg0KICAgIDxkaXYgY2xhc3M9Im15LWNsYXNzIj4uLi48L2Rpdj4NCg0KICAgIDwhLS0gVGhpcyBpdGVtIGhhcyBhIGRlbGF5IG9mIDMwMG1zIC0tPg0KICAgIDxkaXYgY2xhc3M9Im15LWNsYXNzIj4uLi48L2Rpdj4NCg0KICAgIDwhLS0gVGhpcyBpdGVtIGhhcyBhIGRlbGF5IG9mIDYwMG1zIC0tPg0KICAgIDxkaXYgY2xhc3M9Im15LWNsYXNzIj4uLi48L2Rpdj4NCg0KPC9kaXY+', 5, 'http://getuikit.com/docs/scrollspy.html', 'The scrollspy component listens to page scrolling and triggers events based on the scroll position. For example, if you scroll down a page and an element appears the first time in the viewport you can trigger a smooth animation to fade in the element. Just add the data-uk-scrollspy attribute and the following options.', '', 1, '2015-06-01 20:15:18', '2017-11-11 22:09:27', 20, '', 8, '6e666e60-5206-4633-a433-83f41f914ed7'),
(85, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create a fancy lightbox for images and videos utilizing the Modal component.', 4, 'Lightbox single-image', 'PGEgdGl0bGU9IlRpdGxlIiBkYXRhLXVrLWxpZ2h0Ym94PSIiIGhyZWY9IiIgY2xhc3M9InVrLWJ1dHRvbiI+T3BlbiBsaWdodGJveDwvYT4=', 5, 'http://getuikit.com/docs/lightbox.html', 'To apply this component, add the data-uk-lightbox attribute to an anchor linking to the image you wish to display. If a title attribute exists it will be displayed as a caption for the lightbox.', '', 1, '2015-06-01 20:18:50', '2017-11-11 22:09:27', 19, '', 9, 'b3fb0556-ff50-4380-b7f7-8f2519e02d81'),
(86, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'You can link multiple images to the same lightbox and switch between them from within the lightbox, thus creating a gallery. Just add the {group:\'my-group\'} option to the data attribute of each item using the same name on all items that you want to group. Make sure to include the CSS from the Slidenav component, so you can navigate between the items.', 'Create a fancy lightbox for images and videos utilizing the Modal component.', 4, 'Lightbox groups-image', 'PGRpdiBkYXRhLXVrLWdyaWQtbWFyZ2luPSIiIGNsYXNzPSJ1ay1ncmlkIHVrLWdyaWQtd2lkdGgtbWVkaXVtLTEtNCI+DQogICAgPGRpdj4NCiAgICAgICAgPGEgdGl0bGU9IlRpdGxlIiBkYXRhLXVrLWxpZ2h0Ym94PSJ7Z3JvdXA6J2dyb3VwMSd9IiBocmVmPSJpbWFnZXMvcGxhY2Vob2xkZXJfODAweDYwMF8xLmpwZyI+DQogICAgICAgICAgICA8aW1nIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIiBhbHQ9IiIgc3JjPSJpbWFnZXMvcGxhY2Vob2xkZXJfODAweDYwMF8xLmpwZyI+DQogICAgICAgIDwvYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2Pg0KICAgICAgICA8YSB0aXRsZT0iVGl0bGUiIGRhdGEtdWstbGlnaHRib3g9Intncm91cDonZ3JvdXAxJ30iIGRhdGEtbGlnaHRib3gtdHlwZT0iaW1hZ2UiIGhyZWY9ImltYWdlcy9wbGFjZWhvbGRlcl84MDB4NjAwXzIuanBnIj4NCiAgICAgICAgICAgIDxpbWcgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiIGFsdD0iIiBzcmM9ImltYWdlcy9wbGFjZWhvbGRlcl84MDB4NjAwXzIuanBnIj4NCiAgICAgICAgPC9hPg0KICAgIDwvZGl2Pg0KICAgIDxkaXY+DQogICAgICAgIDxhIHRpdGxlPSJUaXRsZSIgZGF0YS11ay1saWdodGJveD0ie2dyb3VwOidncm91cDEnfSIgZGF0YS1saWdodGJveC10eXBlPSJpbWFnZSIgaHJlZj0iaW1hZ2VzL3BsYWNlaG9sZGVyXzgwMHg2MDBfMy5qcGciPg0KICAgICAgICAgICAgPGltZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjYwMCIgYWx0PSIiIHNyYz0iaW1hZ2VzL3BsYWNlaG9sZGVyXzgwMHg2MDBfMy5qcGciPg0KICAgICAgICA8L2E+DQogICAgPC9kaXY+DQogICAgPGRpdj4NCiAgICAgICAgPGEgdGl0bGU9IlRpdGxlIiBkYXRhLXVrLWxpZ2h0Ym94PSJ7Z3JvdXA6J2dyb3VwMSd9IiBkYXRhLWxpZ2h0Ym94LXR5cGU9ImltYWdlIiBocmVmPSJpbWFnZXMvcGxhY2Vob2xkZXJfODAweDYwMF80LmpwZyI+DQogICAgICAgICAgICA8aW1nIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIiBhbHQ9IiIgc3JjPSJpbWFnZXMvcGxhY2Vob2xkZXJfODAweDYwMF80LmpwZyI+DQogICAgICAgIDwvYT4NCiAgICA8L2Rpdj4NCjwvZGl2Pg==', 5, 'http://getuikit.com/docs/lightbox.html', 'To apply this component, add the data-uk-lightbox attribute to an anchor linking to the image you wish to display. If a title attribute exists it will be displayed as a caption for the lightbox.', '', 1, '2015-06-01 20:21:01', '2017-11-11 22:09:27', 20, '', 9, '9fb9dbd8-23b1-4a85-a144-c4ad95f105d1'),
(87, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'A lightbox is not restricted to images. Other media, like videos, can be displayed inside a lightbox and it will automatically generate the correct output by evaluating your path.', 'Create a fancy lightbox for images and videos utilizing the Modal component.', 4, 'Lightbox content-sources', 'PHA+DQogICAgPGEgdGl0bGU9IlRpdGxlIiBkYXRhLXVrLWxpZ2h0Ym94PSJ7Z3JvdXA6J2dyb3VwMid9IiBocmVmPSJpbWFnZXMvcGxhY2Vob2xkZXJfODAweDYwMF8xLmpwZyIgY2xhc3M9InVrLWJ1dHRvbiI+SW1hZ2U8L2E+DQogICAgPGEgZGF0YS11ay1saWdodGJveD0ie2dyb3VwOidncm91cDInfSIgaHJlZj0iaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9odG1sNS92aWRlb3MvYmlnX2J1Y2tfYnVubnkubXA0IiBjbGFzcz0idWstYnV0dG9uIj5NUDQ8L2E+DQogICAgPGEgZGF0YS11ay1saWdodGJveD0ie2dyb3VwOidncm91cDInfSIgaHJlZj0iaHR0cDovL3ZpbWVvLmNvbS8xMDg0NTM3IiBjbGFzcz0idWstYnV0dG9uIj5WaW1lbzwvYT4NCiAgICA8YSBkYXRhLXVrLWxpZ2h0Ym94PSJ7Z3JvdXA6J2dyb3VwMid9IiBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVlFN1Z6bEx0cC00IiBjbGFzcz0idWstYnV0dG9uIj5Zb3VUdWJlPC9hPg0KPC9wPg==', 5, 'http://getuikit.com/docs/lightbox.html', 'To apply this component, add the data-uk-lightbox attribute to an anchor linking to the image you wish to display. If a title attribute exists it will be displayed as a caption for the lightbox.', '', 1, '2015-06-01 20:22:21', '2017-11-11 22:09:27', 19, '', 9, '4e0dcf96-2140-49e9-bbed-8f84b36f4f3c'),
(88, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'To display multiple content sections at the same time without one collapsing when the other one is opened, add the {collapse: false} option to the date attribute.', 'Create a list of items, allowing each item\'s content to be expanded and collapsed by clicking its header.', 4, 'Accordion', 'PGRpdiBjbGFzcz0idWstYWNjb3JkaW9uIiBkYXRhLXVrLWFjY29yZGlvbj4NCg0KICAgIDxoMyBjbGFzcz0idWstYWNjb3JkaW9uLXRpdGxlIj4uLi48L2gzPg0KICAgIDxkaXYgY2xhc3M9InVrLWFjY29yZGlvbi1jb250ZW50Ij4uLi48L2Rpdj4NCg0KICAgIDxoMyBjbGFzcz0idWstYWNjb3JkaW9uLXRpdGxlIj4uLi48L2gzPg0KICAgIDxkaXYgY2xhc3M9InVrLWFjY29yZGlvbi1jb250ZW50Ij4uLi48L2Rpdj4NCg0KICAgIDxoMyBjbGFzcz0idWstYWNjb3JkaW9uLXRpdGxlIj4uLi48L2gzPg0KICAgIDxkaXYgY2xhc3M9InVrLWFjY29yZGlvbi1jb250ZW50Ij4uLi48L2Rpdj4NCg0KPC9kaXY+', 5, 'http://getuikit.com/docs/accordion.html', 'To apply the Accordion component, add the uk-accordion class and the data-uk-accordion attribute to a container element. Add the uk-accordion-content class to each of the content sections within the container. Finally, add the uk-accordion-title class to any element, like a heading, above the content section to create a toggle.', '', 1, '2015-06-01 20:24:59', '2017-11-11 22:09:27', 20, '', 10, 'f5bd905c-8d79-4eb6-bb61-e139af27f573'),
(90, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'This is a input field for uikit form', 'Add Input field - row', 4, 'Input field', 'ICAgICAgICA8ZGl2IGNsYXNzPSJ1ay1mb3JtLXJvdyI+DQoJCTxsYWJlbCBjbGFzcz0idWstZm9ybS1sYWJlbCIgPg0KCQkJPD9waHAgZWNobyBUZXh0OjpfKCdMYWJlbCcpOyA/Pg0KCQk8L2xhYmVsPg0KCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0iPD9waHAgZWNobyBUZXh0OjpfKCdhZGQgc29tZSB0ZXh0IGhlcmUhJyk7ID8+Ij4gPHNwYW4gY2xhc3M9InVrLWZvcm0taGVscC1pbmxpbmUiPjw/cGhwIGVjaG8gVGV4dDo6XygnaGVscCBuZWVkZWQnKTsgPz48L3NwYW4+DQoJPC9kaXY+', 3, 'http://getuikit.com/docs/form.html', '', '', 1, '2015-11-29 03:54:40', '2017-11-11 22:09:27', 20, '', 12, 'f1319e45-395a-492e-a899-f2fec00de5ec'),
(91, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'This is a textarea field for uikit form', 'Add textarea - row', 4, 'Textarea', 'CTxkaXYgY2xhc3M9InVrLWZvcm0tcm93Ij4NCgkJPGxhYmVsIGNsYXNzPSJ1ay1mb3JtLWxhYmVsIiA+DQoJCQk8P3BocCBlY2hvIEpUZXh0OjpfKCdMYWJlbCcpOyA/Pg0KCQk8L2xhYmVsPg0KCQk8dGV4dGFyZWEgY29scz0iIiByb3dzPSIiICBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogMjE2cHg7IiBwbGFjZWhvbGRlcj0iPD9waHAgZWNobyBKVGV4dDo6XygnYWRkIHNvbWUgdGV4dCBoZXJlIScpOyA/PiI+PHx8fHxGSVh8fHx8fHx0ZXh0YXJlYT4NCgkJPHAgY2xhc3M9InVrLWZvcm0taGVscC1ibG9jayI+PD9waHAgZWNobyBKVGV4dDo6XygnaGVscCBuZWVkZWQnKTsgPz48L3A+DQoJPC9kaXY+', 3, 'http://getuikit.com/docs/form.html', '', '', 1, '2015-11-29 03:55:57', '2017-11-11 22:09:27', 22, '', 12, '22207e7c-6096-4b6e-8e03-0616745c8447'),
(92, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'This is a uikit form', 'Add Form', 4, 'Form', 'PGZvcm0gY2xhc3M9InVrLWZvcm0iPg0KICAgIDxmaWVsZHNldD4NCiAgICAgICAgPGxlZ2VuZD48P3BocCBlY2hvIFRleHQ6Ol8oJ0xlZ2VuZCcpOyA/PjwvbGVnZW5kPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ1ay1mb3JtLXJvdyI+DQoJCTxsYWJlbCBjbGFzcz0idWstZm9ybS1sYWJlbCIgPg0KCQkJPD9waHAgZWNobyBUZXh0OjpfKCdMYWJlbCcpOyA/Pg0KCQk8L2xhYmVsPg0KCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0iPD9waHAgZWNobyBUZXh0OjpfKCdhZGQgc29tZSB0ZXh0IGhlcmUhJyk7ID8+Ij4gPHNwYW4gY2xhc3M9InVrLWZvcm0taGVscC1pbmxpbmUiPjw/cGhwIGVjaG8gVGV4dDo6XygnaGVscCBuZWVkZWQnKTsgPz48L3NwYW4+DQoJPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InVrLWZvcm0tcm93Ij4NCgkJPGxhYmVsIGNsYXNzPSJ1ay1mb3JtLWxhYmVsIiA+DQoJCQk8P3BocCBlY2hvIFRleHQ6Ol8oJ0xhYmVsJyk7ID8+DQoJCTwvbGFiZWw+DQoJCTx0ZXh0YXJlYSBjb2xzPSIiIHJvd3M9IiIgIHN0eWxlPSJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAyMTZweDsiIHBsYWNlaG9sZGVyPSI8P3BocCBlY2hvIFRleHQ6Ol8oJ2FkZCBzb21lIHRleHQgaGVyZSEnKTsgPz4iPjx8fHx8fEZJWHx8fHx8dGV4dGFyZWE+DQoJCTxwIGNsYXNzPSJ1ay1mb3JtLWhlbHAtYmxvY2siPjw/cGhwIGVjaG8gVGV4dDo6XygnaGVscCBuZWVkZWQnKTsgPz48L3A+DQoJPC9kaXY+DQogICAgPC9maWVsZHNldD4NCjwvZm9ybT4=', 1, 'http://getuikit.com/docs/form.html', 'To apply this component, add the .uk-form class to a form element. All form control elements are placed side by side within the next row.', '', 1, '2015-11-29 03:57:03', '2017-11-20 23:42:28', 21, '', 12, '6d6bebcf-e291-4344-a39e-f072fa22bf71'),
(95, 'Vast Development Method', 'joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', '', 'Create a list of items that can be shown individually by clicking an item\'s header.', 3, 'Accordion', 'PHVsIHVrLWFjY29yZGlvbj4NCiAgICA8bGkgY2xhc3M9InVrLW9wZW4iPg0KICAgICAgICA8aDMgY2xhc3M9InVrLWFjY29yZGlvbi10aXRsZSI+SXRlbSAxPC9oMz4NCiAgICAgICAgPGRpdiBjbGFzcz0idWstYWNjb3JkaW9uLWNvbnRlbnQiPg0KICAgICAgICAgICAgPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2xpPg0KICAgIDxsaT4NCiAgICAgICAgPGgzIGNsYXNzPSJ1ay1hY2NvcmRpb24tdGl0bGUiPkl0ZW0gMjwvaDM+DQogICAgICAgIDxkaXYgY2xhc3M9InVrLWFjY29yZGlvbi1jb250ZW50Ij4NCiAgICAgICAgICAgIDxwPlV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciByZXByZWhlbmRlcml0LjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9saT4NCiAgICA8bGk+DQogICAgICAgIDxoMyBjbGFzcz0idWstYWNjb3JkaW9uLXRpdGxlIj5JdGVtIDM8L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ1ay1hY2NvcmRpb24tY29udGVudCI+DQogICAgICAgICAgICA8cD5EdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IHByb2lkZW50LjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9saT4NCjwvdWw+', 15, 'https://getuikit.com/docs/accordion', 'The Accordion component consists of a parent container with the uk-accordion attribute, and a title and content part for each accordion item.\r\n\r\n.uk-accordion-title -  Defines and styles the toggle for each accordion item. Typically used on a heading.\r\n\r\n.uk-accordion-content - Defines the content part for each accordion item.\r\n\r\n', '', 1, '2017-11-20 17:21:09', '2017-11-20 23:41:14', 1, '', 14, 'c76d547f-8bcd-48e6-ba64-4ae971404a1b'),
(96, 'Vast Development Method', 'Joomla@vdm.io', 'Llewellyn van der Merwe', 'https://www.vdm.io/', 'FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome – No matter how many columns of data you may have in them.\r\n\r\nHave you ever wanted to show a lot of data in a table, but hate how badly it scales on smaller mobile devices? The FooTable jQuery plugin solves this problem by allowing you to hide certain columns on smaller devices, but still allowing the user to expand each row to see the columns that were hidden.', 'metro-blue', 5, 'FooTable', 'PHRhYmxlIGNsYXNzPSJmb290YWJsZSBtZXRyby1ibHVlIiBkYXRhLWZpbHRlcj0iI2ZpbHRlciIgZGF0YS1wYWdlLXNpemU9IjUiPg0KICA8dGhlYWQ+DQogICAgPHRyPg0KICAgICAgPHRoIGRhdGEtdG9nZ2xlPSJ0cnVlIj5OYW1lPC90aD4NCiAgICAgIDx0aCBkYXRhLWhpZGU9InBob25lLHRhYmxldCI+UGhvbmU8L3RoPg0KICAgICAgPHRoIGRhdGEtaGlkZT0icGhvbmUsdGFibGV0Ij5FbWFpbDwvdGg+DQogICAgPC90cj4NCiAgPC90aGVhZD4NCiAgPHRib2R5Pg0KICAgIDx0cj4NCiAgICAgIDx0ZD5Cb2IgTWFuPC90ZD4NCiAgICAgIDx0ZD41NTUtMTIzNDU8L3RkPg0KICAgICAgPHRkPmJvYkBob21lLmNvbTwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQ+QnJpZGdldCBKb25lczwvdGQ+DQogICAgICA8dGQ+NTQ0LTc3NjY1NTwvdGQ+DQogICAgICA8dGQ+YmpvbmVzQG15c2l0ZS5jb208L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgPHRkPlRvbSBKb25lczwvdGQ+DQogICAgICA8dGQ+NTU1LTk5OTExPC90ZD4NCiAgICAgIDx0ZD5jcnVpc2UxQGNyYXp5LmNvbTwvdGQ+DQogICAgPC90cj4NCiAgPC90Ym9keT4NCjwvdGFibGU+', 32, 'https://github.com/fooplugins/FooTable/tree/V2', '', '', 1, '2015-09-26 14:07:03', '2017-11-25 22:24:55', 3, '', 15, '57eace63-c278-4685-8bb7-a40bfdee704e'),
(97, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.', 'alert-success', 2, 'Alerts - Success', 'PGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyIgcm9sZT0iYWxlcnQiPg0KICAgIDxzdHJvbmc+V2VsbCBkb25lITwvc3Ryb25nPiBZb3Ugc3VjY2Vzc2Z1bGx5IHJlYWQgdGhpcw0KICAgIGltcG9ydGFudCBhbGVydCBtZXNzYWdlLg0KPC9kaXY+', 7, 'https://getbootstrap.com/docs/4.0/components/alerts/', 'Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight required contextual classes (e.g., .alert-success).', '', 1, '2017-11-01 00:00:00', '2017-11-13 10:12:34', 1, '', 16, 'eac77139-a69b-4eef-9276-254194d2bed5'),
(98, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.', 'alert-heading', 2, 'Alerts - Heading', 'PGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyIgcm9sZT0iYWxlcnQiPg0KICA8aDQgY2xhc3M9ImFsZXJ0LWhlYWRpbmciPldlbGwgZG9uZSE8L2g0Pg0KICBZb3Ugc3VjY2Vzc2Z1bGx5IHJlYWQgdGhpcyBpbXBvcnRhbnQgYWxlcnQgbWVzc2FnZS4NCjwvZGl2Pg==', 7, 'https://getbootstrap.com/docs/4.0/components/alerts/', 'Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight required contextual classes (e.g., .alert-success).', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:06:26', 1, '', 17, '7fdc4a3a-6b6b-4126-98d6-2c2dfe726f8d'),
(99, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.', 'alert-link', 2, 'Alerts - Link', 'PGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIiByb2xlPSJhbGVydCI+DQogIDxzdHJvbmc+T2ggc25hcCE8L3N0cm9uZz4NCiAgPGEgaHJlZj0iIyIgY2xhc3M9ImFsZXJ0LWxpbmsiPkNoYW5nZSBhIGZldyB0aGluZ3MgdXA8L2E+DQogIGFuZCB0cnkgc3VibWl0dGluZyBhZ2Fpbi4NCjwvZGl2Pg==', 7, 'https://getbootstrap.com/docs/4.0/components/alerts/', 'Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight required contextual classes (e.g., .alert-success).', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:06:19', 1, '', 17, '0910fd26-4d44-4d85-827f-14207d99ce45'),
(100, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.', 'alert-danger', 2, 'Alerts - Danger', 'PGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIiByb2xlPSJhbGVydCI+DQogIDxzdHJvbmc+T2ggc25hcCE8L3N0cm9uZz4gQ2hhbmdlIGEgZmV3IHRoaW5ncyB1cCBhbmQgdHJ5IHN1Ym1pdHRpbmcgYWdhaW4uDQo8L2Rpdj4=', 7, 'https://getbootstrap.com/docs/4.0/components/alerts/', 'Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight required contextual classes (e.g., .alert-success).', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:06:19', 1, '', 17, '597d1a5b-1dd9-438b-a019-5b074afa8191'),
(101, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.', 'alert-dismissible', 2, 'Alerts - Dismissible', 'PGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyBhbGVydC1kaXNtaXNzaWJsZSBmYWRlIHNob3ciIHJvbGU9ImFsZXJ0Ij4NCiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJhbGVydCIgYXJpYS1sYWJlbD0iQ2xvc2UiPg0KICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj7Dlzwvc3Bhbj4NCiAgPC9idXR0b24+DQogIDxzdHJvbmc+SG9seSBndWFjYW1vbGUhPC9zdHJvbmc+IFlvdSBzaG91bGQgY2hlY2sgaW4gb24gc29tZSBvZiB0aG9zZSBmaWVsZHMgYmVsb3cuDQo8L2Rpdj4=', 7, 'https://getbootstrap.com/docs/4.0/components/alerts/', 'Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight required contextual classes (e.g., .alert-success).', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:06:23', 1, '', 17, 'e0f1a436-8527-462b-ba27-cbe60504b8f6'),
(102, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.', 'alert-info', 2, 'Alerts - Info', 'PGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgcm9sZT0iYWxlcnQiPg0KICAgIDxzdHJvbmc+SGVhZHMgdXAhPC9zdHJvbmc+IFRoaXMgYWxlcnQgbmVlZHMgeW91ciBhdHRlbnRpb24sDQogICAgYnV0IGl0J3Mgbm90IHN1cGVyIGltcG9ydGFudC4NCjwvZGl2Pg==', 7, 'https://getbootstrap.com/docs/4.0/components/alerts/', 'Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight required contextual classes (e.g., .alert-success).', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:06:08', 1, '', 18, 'c7a51b7a-c1b7-45cb-95c6-b8cda5d32417'),
(103, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-danger', 2, 'Badge - Danger', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWRhbmdlciI+RGFuZ2VyPC9zcGFuPg==', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:13:21', 1, '', 19, '4cc7a7b5-7d3a-4086-8a00-d7b99e3db5b2'),
(104, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.', 'alert-warning', 2, 'Alerts - Warning', 'PGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgcm9sZT0iYWxlcnQiPg0KICAgIDxzdHJvbmc+SGVhZHMgdXAhPC9zdHJvbmc+IFRoaXMgYWxlcnQgbmVlZHMgeW91ciBhdHRlbnRpb24sDQogICAgYnV0IGl0J3Mgbm90IHN1cGVyIGltcG9ydGFudC4NCjwvZGl2Pg==', 7, 'https://getbootstrap.com/docs/4.0/components/alerts/', 'Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight required contextual classes (e.g., .alert-success).', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:06:13', 1, '', 20, 'f7de3d3c-326c-4039-a184-f0aa1e4719d3'),
(105, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-info', 2, 'Badge - Info', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWluZm8iPkluZm88L3NwYW4+', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:13:15', 1, '', 21, 'b7eb3854-3024-440b-bb88-2197e3b934dc'),
(106, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-dark', 2, 'Badge - Dark', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWRhcmsiPkRhcms8L3NwYW4+', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:13:28', 1, '', 21, 'c3e0aa51-2cbc-4bf3-8e84-1b6bc2672f2b'),
(107, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-light', 2, 'Badge - Light', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWxpZ2h0Ij5MaWdodDwvc3Bhbj4=', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:13:26', 1, '', 22, 'f03cb9b8-fffd-41af-9c84-eeed30c97d4b'),
(108, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-pill', 2, 'Badge - Pill', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXBpbGwgYmFkZ2UtcHJpbWFyeSI+U2Vjb25kYXJ5PC9zcGFuPg==', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-11 23:53:03', 1, '', 23, '491da919-5afe-4cbb-8cec-1a4d49778c0a'),
(109, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-primary', 2, 'Badge - Primary', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXByaW1hcnkiPlByaW1hcnk8L3NwYW4+', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:13:06', 1, '', 23, 'c0d1d1f1-907a-4712-afc5-a905ff75bfbe'),
(110, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-secondary', 2, 'Badge - Secondary', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXNlY29uZGFyeSI+U2Vjb25kYXJ5PC9zcGFuPg==', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:13:09', 1, '', 24, '72bcef22-7fcc-4152-892f-23f4e619ef24'),
(111, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-warning', 2, 'Badge - Warning', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXdhcm5pbmciPldhcm5pbmc8L3NwYW4+', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:13:18', 1, '', 24, 'f6895007-f66b-4d66-ad52-9823e3b7dee0'),
(112, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Indicate the current page\'s location within a navigational hierarchy that automatically adds separators via CSS.', 'breadcrumb', 2, 'Breadcrumb', 'PG9sIGNsYXNzPSJicmVhZGNydW1iIj4NCiAgPGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gYWN0aXZlIj5Ib21lPC9saT4NCjwvb2w+DQo8b2wgY2xhc3M9ImJyZWFkY3J1bWIiPg0KICA8bGkgY2xhc3M9ImJyZWFkY3J1bWItaXRlbSI+PGEgaHJlZj0iIyI+SG9tZTwvYT48L2xpPg0KICA8bGkgY2xhc3M9ImJyZWFkY3J1bWItaXRlbSBhY3RpdmUiPkxpYnJhcnk8L2xpPg0KPC9vbD4NCjxvbCBjbGFzcz0iYnJlYWRjcnVtYiI+DQogIDxsaSBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIj48YSBocmVmPSIjIj5Ib21lPC9hPjwvbGk+DQogIDxsaSBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIj48YSBocmVmPSIjIj5MaWJyYXJ5PC9hPjwvbGk+DQogIDxsaSBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIGFjdGl2ZSI+RGF0YTwvbGk+DQo8L29sPg==', 9, 'https://getbootstrap.com/docs/4.0/components/breadcrumb/', 'Separators are automatically added in CSS through ::before and content.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:01:21', 1, '', 25, '25ea0f36-f123-4b2e-82c1-3bb44991c0cb'),
(113, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge-success', 2, 'Badge - Success', 'PHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXN1Y2Nlc3MiPlN1Y2Nlc3M8L3NwYW4+', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:13:12', 1, '', 24, '736daa76-4a91-4a26-a684-3412c126e2ec'),
(114, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Group a series of buttons together on a single line with the button group, and super-power them with JavaScript.', 'btn-toolbar', 2, 'Button - Toolbar', 'PGRpdiBjbGFzcz0iYnRuLXRvb2xiYXIiIHJvbGU9InRvb2xiYXIiIGFyaWEtbGFiZWw9IlRvb2xiYXIgd2l0aCBidXR0b24gZ3JvdXBzIj4NCiAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iRmlyc3QgZ3JvdXAiPg0KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPjE8L2J1dHRvbj4NCiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5Ij4yPC9idXR0b24+DQogICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSI+MzwvYnV0dG9uPg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iU2Vjb25kIGdyb3VwIj4NCiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5Ij41PC9idXR0b24+DQogICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSI+NjwvYnV0dG9uPg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iVGhpcmQgZ3JvdXAiPg0KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPjg8L2J1dHRvbj4NCiAgPC9kaXY+DQo8L2Rpdj4=', 11, 'https://getbootstrap.com/docs/4.0/components/button-group/', 'Combine sets of button groups into button toolbars for more complex components. Use utility classes as needed to space out groups, buttons, and more.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:28:16', 1, '', 26, 'f7a6f877-ee4c-4cbe-b1a7-314ff55172b7'),
(115, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Group a series of buttons together on a single line with the button group, and super-power them with JavaScript.', 'btn-group (nested)', 2, 'Button Group (nested)', 'PGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iQnV0dG9uIGdyb3VwIHdpdGggbmVzdGVkIGRyb3Bkb3duIj4NCiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSI+MTwvYnV0dG9uPg0KICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5Ij4yPC9idXR0b24+DQoNCiAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCI+DQogICAgPGJ1dHRvbiBpZD0iYnRuR3JvdXBEcm9wMSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkgZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iIGFyaWEtaGFzcG9wdXA9InRydWUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIj4NCiAgICAgIERyb3Bkb3duDQogICAgPC9idXR0b24+DQogICAgPGRpdiBjbGFzcz0iZHJvcGRvd24tbWVudSIgYXJpYS1sYWJlbGxlZGJ5PSJidG5Hcm91cERyb3AxIj4NCiAgICAgIDxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSIjIj5Ecm9wZG93biBsaW5rPC9hPg0KICAgICAgPGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9IiMiPkRyb3Bkb3duIGxpbms8L2E+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KPC9kaXY+', 11, 'https://getbootstrap.com/docs/4.0/components/button-group/', 'Wrap a series of buttons with .btn in .btn-group. Add on optional JavaScript radio and checkbox style behavior with our buttons plugin.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:28:08', 1, '', 26, 'e97f45dd-c391-4b01-9737-c1cd90c2be30'),
(116, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Documentation and examples for badges, our small count and labeling component.', 'badge', 2, 'Badge', 'PGgxPkV4YW1wbGUgaGVhZGluZyA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2Utc2Vjb25kYXJ5Ij5OZXc8L3NwYW4+PC9oMT4NCjxoMj5FeGFtcGxlIGhlYWRpbmcgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXNlY29uZGFyeSI+TmV3PC9zcGFuPjwvaDI+DQo8aDM+RXhhbXBsZSBoZWFkaW5nIDxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS1zZWNvbmRhcnkiPk5ldzwvc3Bhbj48L2gzPg0KPGg0PkV4YW1wbGUgaGVhZGluZyA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2Utc2Vjb25kYXJ5Ij5OZXc8L3NwYW4+PC9oND4NCjxoNT5FeGFtcGxlIGhlYWRpbmcgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXNlY29uZGFyeSI+TmV3PC9zcGFuPjwvaDU+DQo8aDY+RXhhbXBsZSBoZWFkaW5nIDxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS1zZWNvbmRhcnkiPk5ldzwvc3Bhbj48L2g2Pg==', 8, 'https://getbootstrap.com/docs/4.0/components/badge/', 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:12:58', 1, '', 26, '003efb29-e3f9-4378-a463-4de8e5675766'),
(117, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Group a series of buttons together on a single line with the button group, and super-power them with JavaScript.', 'btn-group-lg', 2, 'Button Group - Large', 'PGRpdiBjbGFzcz0iYnRuLWdyb3VwIGJ0bi1ncm91cC1sZyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IkJhc2ljIGV4YW1wbGUiPg0KICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5Ij5MZWZ0PC9idXR0b24+DQogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPk1pZGRsZTwvYnV0dG9uPg0KICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5Ij5SaWdodDwvYnV0dG9uPg0KPC9kaXY+', 11, 'https://getbootstrap.com/docs/4.0/components/button-group/', 'Wrap a series of buttons with .btn in .btn-group. Add on optional JavaScript radio and checkbox style behavior with our buttons plugin.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:27:34', 1, '', 27, '710bde0f-89cc-4acc-a83d-e20fa0cbb893'),
(118, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'radio as button', 2, 'Button - As Radio', 'PGRpdiBjbGFzcz0iYnRuLWdyb3VwIiBkYXRhLXRvZ2dsZT0iYnV0dG9ucyI+DQogIDxsYWJlbCBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGFjdGl2ZSI+DQogICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJvcHRpb25zIiBpZD0ib3B0aW9uMSIgY2hlY2tlZD0iIj4gUmFkaW8gMSAocHJlc2VsZWN0ZWQpDQogIDwvbGFiZWw+DQogIDxsYWJlbCBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij4NCiAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im9wdGlvbnMiIGlkPSJvcHRpb24yIj4gUmFkaW8gMg0KICA8L2xhYmVsPg0KPC9kaXY+', 12, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:35:00', 1, '', 27, '14c313be-d933-4858-92bc-b5d47a9db508'),
(119, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'active button', 2, 'Button - Active', 'PGEgaHJlZj0iIyIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGcgYWN0aXZlIiByb2xlPSJidXR0b24iIGFyaWEtcHJlc3NlZD0idHJ1ZSI+UHJpbWFyeSBsaW5rPC9hPg==', 12, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:17:18', 1, '', 27, '56f1534d-ea2d-471b-8633-aeed414df87a'),
(120, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'checkbox as button', 2, 'Button - As Checkbox', 'PGRpdiBjbGFzcz0iYnRuLWdyb3VwIiBkYXRhLXRvZ2dsZT0iYnV0dG9ucyI+DQogIDxsYWJlbCBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGFjdGl2ZSI+DQogICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkPSIiPiBDaGVja2JveCAxIChwcmUtY2hlY2tlZCkNCiAgPC9sYWJlbD4NCiAgPGxhYmVsIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPg0KICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCI+IENoZWNrYm94IDINCiAgPC9sYWJlbD4NCjwvZGl2Pg==', 12, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:34:41', 1, '', 27, '7f9ab8c9-15aa-4b2b-8271-114b032cdef4'),
(121, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-block', 2, 'Button - Block', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayI+QmxvY2sgbGV2ZWwgYnV0dG9uPC9idXR0b24+', 12, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:17:15', 1, '', 28, 'e64dd4ca-a1cd-4442-9cf4-5d18a9e3dd91'),
(122, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'disabled button', 2, 'Button - Disabled', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEtdG9nZ2xlPSJidXR0b24iIGFyaWEtcHJlc3NlZD0iZmFsc2UiPg0KICBTaW5nbGUgdG9nZ2xlDQo8L2J1dHRvbj4=', 12, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:34:21', 1, '', 28, '52c9caa1-7f2b-4a8f-bb60-9a4158d27c0a'),
(123, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Group a series of buttons together on a single line with the button group, and super-power them with JavaScript.', 'btn-group-vertical', 2, 'Button Group - Vertical', 'PGRpdiBjbGFzcz0iYnRuLWdyb3VwLXZlcnRpY2FsIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iQmFzaWMgZXhhbXBsZSI+DQogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPkxlZnQ8L2J1dHRvbj4NCiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSI+TWlkZGxlPC9idXR0b24+DQogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPlJpZ2h0PC9idXR0b24+DQo8L2Rpdj4=', 11, 'https://getbootstrap.com/docs/4.0/components/button-group/', 'Wrap a series of buttons with .btn in .btn-group. Add on optional JavaScript radio and checkbox style behavior with our buttons plugin.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:27:56', 1, '', 28, '64415e4e-f38f-4e46-9ca1-6eea596f2456'),
(124, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-lg', 2, 'Button - Large', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxnIj5MYXJnZSBidXR0b248L2J1dHRvbj4=', 12, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:17:07', 1, '', 29, 'ed94a4f7-b396-4201-a7da-b268db30b13d'),
(125, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-sm', 2, 'Button - Small', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLXNtIj5TbWFsbCBidXR0b248L2J1dHRvbj4=', 12, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:17:13', 1, '', 29, '4becf0e5-2fac-483a-b4bb-92b0b1608c3b'),
(126, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Group a series of buttons together on a single line with the button group, and super-power them with JavaScript.', 'btn-group-sm', 2, 'Button Group - Small', 'PGRpdiBjbGFzcz0iYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IkJhc2ljIGV4YW1wbGUiPg0KICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5Ij5MZWZ0PC9idXR0b24+DQogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPk1pZGRsZTwvYnV0dG9uPg0KICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5Ij5SaWdodDwvYnV0dG9uPg0KPC9kaXY+', 11, 'https://getbootstrap.com/docs/4.0/components/button-group/', 'Wrap a series of buttons with .btn in .btn-group. Add on optional JavaScript radio and checkbox style behavior with our buttons plugin.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:27:45', 1, '', 29, '3af366d7-978f-487a-a966-0477d7ea9d1a'),
(127, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-danger', 2, 'Button - Danger', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRhbmdlciI+RGFuZ2VyPC9idXR0b24+', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:20', 1, '', 30, '772bc812-118c-4bf0-a286-b467c3d4cee6'),
(128, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Group a series of buttons together on a single line with the button group, and super-power them with JavaScript.', 'btn-group', 2, 'Button Group', 'PGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iQmFzaWMgZXhhbXBsZSI+DQogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPkxlZnQ8L2J1dHRvbj4NCiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSI+TWlkZGxlPC9idXR0b24+DQogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPlJpZ2h0PC9idXR0b24+DQo8L2Rpdj4=', 11, 'https://getbootstrap.com/docs/4.0/components/button-group/', 'Wrap a series of buttons with .btn in .btn-group. Add on optional JavaScript radio and checkbox style behavior with our buttons plugin.', '', 1, '2017-11-01 00:00:00', '2017-11-22 00:25:49', 1, '', 30, 'cebe97c4-ff4a-4a74-bd12-ebe02ecfd814'),
(129, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-info', 2, 'Button - Info', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWluZm8iPkluZm88L2J1dHRvbj4=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:14', 1, '', 31, '35d64d76-fd06-4821-9cfb-7cc8a8901ccf'),
(130, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-link', 2, 'Button - Link', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsiPkxpbms8L2J1dHRvbj4=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:30', 1, '', 32, 'e6356804-5499-478d-b0cb-5f708fd1a739'),
(131, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-outline-danger', 2, 'Button - Outline Danger', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFuZ2VyIj5EYW5nZXI8L2J1dHRvbj4=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:15:40', 1, '', 32, '206c8a71-71b4-4e66-9bdb-9247e0efdf27'),
(132, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-outline-info', 2, 'Button - Outline Info', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtaW5mbyI+SW5mbzwvYnV0dG9uPg==', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:15:34', 1, '', 33, 'ab044e3e-675a-4172-8849-a5fd61d889e3'),
(133, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-outline-primary', 2, 'Button - Outline Primary', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSI+UHJpbWFyeTwvYnV0dG9uPg==', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:51', 1, '', 34, '6a26904a-fdae-4333-892a-932548b8a11d'),
(134, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-outline-light', 2, 'Button - Outline Light', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtbGlnaHQiPkxpZ2h0PC9idXR0b24+DQo=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.', '', 1, '2017-11-01 00:00:00', '2017-11-11 23:54:26', 1, '', 34, '5e418043-9a54-4cc3-abef-ac2c6b467a4f'),
(135, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-dark', 2, 'Button - Dark', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRhcmsiPkRhcms8L2J1dHRvbj4=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:26', 1, '', 35, 'ad5973b8-1860-49b8-9022-ac43d24a2bc5'),
(136, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-outline-secondary', 2, 'Button - Outline Secondary', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5Ij5TZWNvbmRhcnk8L2J1dHRvbj4=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:53', 1, '', 35, 'ea92c635-9155-451c-a7f8-4353c60641c8'),
(137, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-light', 2, 'Button - Light', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpZ2h0Ij5MaWdodDwvYnV0dG9uPg==', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:23', 1, '', 36, '0cee266b-156e-44a9-aff0-af6935f139e9'),
(138, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-outline-success', 2, 'Button - Outline Success', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtc3VjY2VzcyI+U3VjY2VzczwvYnV0dG9uPg==', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:55', 1, '', 36, '8798c735-ae7b-4657-8776-d07b0ec5bfe3'),
(139, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-outline-warning', 2, 'Button - Outline Warning', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtd2FybmluZyI+V2FybmluZzwvYnV0dG9uPg==', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:15:37', 1, '', 36, '56c2a53e-7076-4c4a-9a79-0e9037e19fec'),
(140, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-outline-dark', 2, 'Button - Outline Dark', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFyayI+RGFyazwvYnV0dG9uPg==', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:15:47', 1, '', 36, '4560a0a9-c5e9-4db5-b85b-f547206dc4f5'),
(141, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-primary', 2, 'Button - Primary', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPlByaW1hcnk8L2J1dHRvbj4=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 22:39:59', 1, '', 37, 'a2e15c1b-e002-41ba-b222-808a4de5d3cb'),
(142, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-success', 2, 'Button - Success', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiPlN1Y2Nlc3M8L2J1dHRvbj4=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:11', 1, '', 38, 'ba1c21b9-612d-4d8b-8d74-333e6dd6a140'),
(143, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-warning', 2, 'Button - Warning', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXdhcm5pbmciPldhcm5pbmc8L2J1dHRvbj4=', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 23:14:17', 1, '', 39, '7c1fd0a6-3460-4034-b562-9eed77e53764'),
(144, 'Most Wanted Web Services, Inc.', 'sales@mwweb.host', 'Steve Voorhees', 'https://mostwantedwebhosting.com', 'Use Bootstrap\'s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.', 'btn-secondary', 2, 'Button - Secondary', 'PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSI+U2Vjb25kYXJ5PC9idXR0b24+', 10, 'https://getbootstrap.com/docs/4.0/components/buttons/', 'Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.', '', 1, '2017-11-01 00:00:00', '2017-11-21 22:40:04', 1, '', 40, '5f6714fb-0030-40a6-b269-4d96d1b1bf08');

--
-- Dumping data for table `#__componentbuilder_validation_rule`
--

INSERT INTO `#__componentbuilder_validation_rule` (`id`, `name`, `php`, `short_description`, `published`, `created`, `params`) VALUES
(1, 'inspect', 'CS8qKg0KCSAqIE1ldGhvZCB0byB0ZXN0IHRoZSB2YWx1ZS4NCgkgKg0KCSAqIEBwYXJhbSAgIFxTaW1wbGVYTUxFbGVtZW50ICAkZWxlbWVudCAgVGhlIFNpbXBsZVhNTEVsZW1lbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYDxmaWVsZD5gIHRhZyBmb3IgdGhlIGZvcm0gZmllbGQgb2JqZWN0Lg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAgICAgICAkdmFsdWUgICAgVGhlIGZvcm0gZmllbGQgdmFsdWUgdG8gdmFsaWRhdGUuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAgICAgICRncm91cCAgICBUaGUgZmllbGQgbmFtZSBncm91cCBjb250cm9sIHZhbHVlLiBUaGlzIGFjdHMgYXMgYW4gYXJyYXkgY29udGFpbmVyIGZvciB0aGUgZmllbGQuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSBpZiB0aGUgZmllbGQgaGFzIG5hbWU9ImZvbyIgYW5kIHRoZSBncm91cCB2YWx1ZSBpcyBzZXQgdG8gImJhciIgdGhlbiB0aGUNCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwgZmllbGQgbmFtZSB3b3VsZCBlbmQgdXAgYmVpbmcgImJhcltmb29dIi4NCgkgKiBAcGFyYW0gICBSZWdpc3RyeSAgICAgICAgICAgJGlucHV0ICAgIEFuIG9wdGlvbmFsIFJlZ2lzdHJ5IG9iamVjdCB3aXRoIHRoZSBlbnRpcmUgZGF0YSBzZXQgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgZW50aXJlIGZvcm0uDQoJICogQHBhcmFtICAgRm9ybSAgICAgICAgICAgICAgICRmb3JtICAgICBUaGUgZm9ybSBvYmplY3QgZm9yIHdoaWNoIHRoZSBmaWVsZCBpcyBiZWluZyB0ZXN0ZWQuDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqDQoJICogQHNpbmNlICAgMTEuMQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0KFxTaW1wbGVYTUxFbGVtZW50ICRlbGVtZW50LCAkdmFsdWUsICRncm91cCA9IG51bGwsIFJlZ2lzdHJ5ICRpbnB1dCA9IG51bGwsIEZvcm0gJGZvcm0gPSBudWxsKQ0KCXsNCgkJLy8gbG9vayBpbnRvIHRoZXNlIHZhbHVlcyBvbmUgYXQgYSB0aW1lDQoJCWVjaG8gJzxwcmU+ZWxlbWVudDxiciAvPic7DQoJCXZhcl9kdW1wKCRlbGVtZW50KTsNCgkJZWNobyAndmFsdWU8YnIgLz4nOw0KCQl2YXJfZHVtcCgkdmFsdWUpOw0KCQllY2hvICdncm91cDxiciAvPic7DQoJCXZhcl9kdW1wKCRncm91cCk7DQoJCWVjaG8gJ2lucHV0PGJyIC8+JzsNCgkJdmFyX2R1bXAoJGlucHV0KTsNCgkJZWNobyAnZm9ybTxiciAvPic7DQoJCXZhcl9kdW1wKCRmb3JtKTsNCgkJamV4aXQoKTsNCgl9', 'simple function to inspect the test values', 1, '2018-03-30 09:22:15', ''),
(2, 'code', 'CS8qKg0KCSAqIE1ldGhvZCB0byB0ZXN0IHRoZSB2YWx1ZS4NCgkgKg0KCSAqIEBwYXJhbSAgIFxTaW1wbGVYTUxFbGVtZW50ICAkZWxlbWVudCAgVGhlIFNpbXBsZVhNTEVsZW1lbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYDxmaWVsZD5gIHRhZyBmb3IgdGhlIGZvcm0gZmllbGQgb2JqZWN0Lg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAgICAgICAkdmFsdWUgICAgVGhlIGZvcm0gZmllbGQgdmFsdWUgdG8gdmFsaWRhdGUuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAgICAgICRncm91cCAgICBUaGUgZmllbGQgbmFtZSBncm91cCBjb250cm9sIHZhbHVlLiBUaGlzIGFjdHMgYXMgYW4gYXJyYXkgY29udGFpbmVyIGZvciB0aGUgZmllbGQuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSBpZiB0aGUgZmllbGQgaGFzIG5hbWU9ImZvbyIgYW5kIHRoZSBncm91cCB2YWx1ZSBpcyBzZXQgdG8gImJhciIgdGhlbiB0aGUNCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwgZmllbGQgbmFtZSB3b3VsZCBlbmQgdXAgYmVpbmcgImJhcltmb29dIi4NCgkgKiBAcGFyYW0gICBSZWdpc3RyeSAgICAgICAgICAgJGlucHV0ICAgIEFuIG9wdGlvbmFsIFJlZ2lzdHJ5IG9iamVjdCB3aXRoIHRoZSBlbnRpcmUgZGF0YSBzZXQgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgZW50aXJlIGZvcm0uDQoJICogQHBhcmFtICAgRm9ybSAgICAgICAgICAgICAgICRmb3JtICAgICBUaGUgZm9ybSBvYmplY3QgZm9yIHdoaWNoIHRoZSBmaWVsZCBpcyBiZWluZyB0ZXN0ZWQuDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0KFxTaW1wbGVYTUxFbGVtZW50ICRlbGVtZW50LCAkdmFsdWUsICRncm91cCA9IG51bGwsIFJlZ2lzdHJ5ICRpbnB1dCA9IG51bGwsIEZvcm0gJGZvcm0gPSBudWxsKQ0KCXsNCgkJLy8gVGhpcyByZW1vdmVzIGFsbCB2YWxpZGF0aW9uIChpcyBkYW5nZXJvdXMpIGJ1dCBuZWVkZWQgdG8gc3VibWl0IGNvZGUgdmlhIEpDQg0KCQlyZXR1cm4gdHJ1ZTsNCg0KCQkvKioNCgkJICogTXkgaWRlYSBpcyB0byBhZGQgc29tZSBraW5kIG9mIHZhbGlkYXRpb24gdG8gaW1wcm92ZSBKQ0IgY29kZSAocGVyL2xhbmd1YWdlKQ0KCQkgKg0KCQkgKiBTbyBhdCB0aGlzIHRpbWUgdGhpcyBjb2RlIHZhbGlkYXRpb24gaXMgdXNlZCBmb3IgSmF2YVNjcmlwdCxDU1MsSFRNTCBhbmQgUEhQLg0KCQkgKiBXZSBjYW4gc2VlIHdoYXQgbGFuZ3VhZ2UgaXMgYmVpbmcgd29ya2VkIG9uIHdpdGggdGhlIHN5bnRheCBwcm9wZXJ0eSBpbiB0aGUgJGVsZW1lbnQuIChpbiBKQ0IpDQoJCSAqIFdoYXQgY29tcGxpY2F0ZXMgdGhpbmdzIGlzIHRoZSBwbGFjZWhvbGRlcnMsIG9mIGJvdGggY3VzdG9tIGNvZGUsIGNvbXBvbmVudCwgYW5kIHZpZXcgbmFtZXMuDQoJCSAqIElkZWFsbHkgd2UgY291bGQgc3RyaXAgdGhlbSBhbmQgdGhlbiB2YWxpZGF0ZSB0aGUgY29kZSB0byBiZWluZyBzeW50YWN0aWNhbGx5IGNvcnJlY3QuDQoJCSAqIEJ1dCBzaW5jZSBzb21lIG9mIHRoZSBwbGFjZWhvbGRlcnMgZm9ybSBwYXJ0IG9mIHRoZSBjbGFzcy9mdW5jdGlvbiBuYW1lcyBhbmQgdGhlIG1vcmUsIGl0IHNlZW1zIGxpa2Ugd2UgYXJlIHByZXNzZWQgZm9yIGEgbXVjaCBtb3JlIGFkdmFuY2Ugc29sdXRpb24uDQoJCSAqIElmIHlvdSBoYXZlIGFueSBpZGVhcyB0byBob3cgd2UgY2FuIGdvIGFib3V0IHRvIGRvIHRoaXMsIHRoZW4gcGxlYXNlIG9wZW4gYW4gaXNzdWUgb24gZ2l0aHViIGFuZCBsZXRzIGJlZ2luLiAodGhpcyBpcyBhIG5pY2UgdG8gaGF2ZSwgc28gZG9uJ3QgYnJlYWsgYSBsZWcuLi4pDQoJCSAqLw0KCX0=', 'To validate code', 1, '2018-06-24 19:11:45', ''),
(3, 'uniquefield', 'CS8qKg0KCSAqIE1ldGhvZCB0byB0ZXN0IHRoZSBmaWVsZCB2YWx1ZSBmb3IgdW5pcXVlbmVzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIFxTaW1wbGVYTUxFbGVtZW50ICAkZWxlbWVudCAgVGhlIFNpbXBsZVhNTEVsZW1lbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYDxmaWVsZD5gIHRhZyBmb3IgdGhlIGZvcm0gZmllbGQgb2JqZWN0Lg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAgICAgICAkdmFsdWUgICAgVGhlIGZvcm0gZmllbGQgdmFsdWUgdG8gdmFsaWRhdGUuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAgICAgICRncm91cCAgICBUaGUgZmllbGQgbmFtZSBncm91cCBjb250cm9sIHZhbHVlLiBUaGlzIGFjdHMgYXMgYW4gYXJyYXkgY29udGFpbmVyIGZvciB0aGUgZmllbGQuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSBpZiB0aGUgZmllbGQgaGFzIG5hbWU9ImZvbyIgYW5kIHRoZSBncm91cCB2YWx1ZSBpcyBzZXQgdG8gImJhciIgdGhlbiB0aGUNCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwgZmllbGQgbmFtZSB3b3VsZCBlbmQgdXAgYmVpbmcgImJhcltmb29dIi4NCgkgKiBAcGFyYW0gICBSZWdpc3RyeSAgICAgICAgICAgJGlucHV0ICAgIEFuIG9wdGlvbmFsIFJlZ2lzdHJ5IG9iamVjdCB3aXRoIHRoZSBlbnRpcmUgZGF0YSBzZXQgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgZW50aXJlIGZvcm0uDQoJICogQHBhcmFtICAgRm9ybSAgICAgICAgICAgICAgICRmb3JtICAgICBUaGUgZm9ybSBvYmplY3QgZm9yIHdoaWNoIHRoZSBmaWVsZCBpcyBiZWluZyB0ZXN0ZWQuDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqDQoJICogQHNpbmNlICAgMTEuMQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0KFxTaW1wbGVYTUxFbGVtZW50ICRlbGVtZW50LCAkdmFsdWUsICRncm91cCA9IG51bGwsIFJlZ2lzdHJ5ICRpbnB1dCA9IG51bGwsIEZvcm0gJGZvcm0gPSBudWxsKQ0KCXsNCgkJLy8gR2V0IHRoZSBkYXRhYmFzZSBvYmplY3QgYW5kIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJLy8gR2V0IHRoZSBleHRyYSBmaWVsZCBjaGVjayBhdHRyaWJ1dGUuDQoJCSRpZCA9ICgkaW5wdXQgaW5zdGFuY2VvZiBSZWdpc3RyeSkgPyAkaW5wdXQtPmdldCgnaWQnLCBudWxsKSA6IG51bGw7DQoNCgkJLy8gZ2V0IHRoZSBjb21wb25lbnQgJiB0YWJsZSBuYW1lDQoJCSR0YWJsZSA9ICgkZm9ybSBpbnN0YW5jZW9mIEZvcm0pID8gJGZvcm0tPmdldE5hbWUoKSA6ICcnOw0KDQoJCS8vIGdldCB0aGUgY29sdW1uIG5hbWUNCgkJJG5hbWUgPSAoYXJyYXkpICRlbGVtZW50LT5hdHRyaWJ1dGVzKCktPnsnbmFtZSd9Ow0KCQkkY29sdW1uID0gKHN0cmluZykgdHJpbSgkbmFtZVswXSk7DQoJCQ0KCQkvLyBjaGVjayB0aGF0IHdlIGhhdmUgYSB2YWx1ZQ0KCQlpZiAoc3RybGVuKCR2YWx1ZSkgJiYgc3RybGVuKCR0YWJsZSkgPiAzICYmIHN0cnBvcygkdGFibGUsICdbW1tjb21wb25lbnRdXV0uJykgIT09IGZhbHNlKQ0KCQl7DQoJCQkvLyBub3cgZ2V0IHRoZSB0YWJsZSBuYW1lDQoJCQkkdGFibGVBcnJheSA9IGV4cGxvZGUoJy4nLCAkdGFibGUpOw0KCQkJLy8gZG8gd2UgaGF2ZSB0d28gdmFsdWVzDQoJCQlpZiAoY291bnQoIChhcnJheSkgJHRhYmxlQXJyYXkpID09IDIpDQoJCQl7DQoJCQkJLy8gQnVpbGQgdGhlIHF1ZXJ5Lg0KCQkJCSRxdWVyeS0+c2VsZWN0KCdDT1VOVCgqKScpDQoJCQkJCS0+ZnJvbSgnI19fW1tbY29tcG9uZW50XV1dXycgLiAoc3RyaW5nKSAkdGFibGVBcnJheVsxXSkNCgkJCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgkY29sdW1uKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkdmFsdWUpKTsNCg0KCQkJCS8vIHJlbW92ZSB0aGlzIGl0ZW0gZnJvbSB0aGUgbGlzdA0KCQkJCWlmICgkaWQgPiAwKQ0KCQkJCXsNCgkJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPD4gJyAuIChpbnQpICRpZCk7DQoJCQkJfQ0KDQoJCQkJLy8gU2V0IGFuZCBxdWVyeSB0aGUgZGF0YWJhc2UuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkdXBsaWNhdGUgPSAoYm9vbCkgJGRiLT5sb2FkUmVzdWx0KCk7DQoNCgkJCQlpZiAoJGR1cGxpY2F0ZSkNCgkJCQl7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gdHJ1ZTsNCgl9', 'unique field value', 1, '2018-07-21 06:06:42', ''),
(4, 'memberloginname', 'CS8qKg0KCSAqIE1ldGhvZCB0byB0ZXN0IHRoZSB1c2VybmFtZSBmb3IgdW5pcXVlbmVzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIFxTaW1wbGVYTUxFbGVtZW50ICAkZWxlbWVudCAgVGhlIFNpbXBsZVhNTEVsZW1lbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYDxmaWVsZD5gIHRhZyBmb3IgdGhlIGZvcm0gZmllbGQgb2JqZWN0Lg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAgICAgICAkdmFsdWUgICAgVGhlIGZvcm0gZmllbGQgdmFsdWUgdG8gdmFsaWRhdGUuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAgICAgICRncm91cCAgICBUaGUgZmllbGQgbmFtZSBncm91cCBjb250cm9sIHZhbHVlLiBUaGlzIGFjdHMgYXMgYW4gYXJyYXkgY29udGFpbmVyIGZvciB0aGUgZmllbGQuDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSBpZiB0aGUgZmllbGQgaGFzIG5hbWU9ImZvbyIgYW5kIHRoZSBncm91cCB2YWx1ZSBpcyBzZXQgdG8gImJhciIgdGhlbiB0aGUNCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwgZmllbGQgbmFtZSB3b3VsZCBlbmQgdXAgYmVpbmcgImJhcltmb29dIi4NCgkgKiBAcGFyYW0gICBSZWdpc3RyeSAgICAgICAgICAgJGlucHV0ICAgIEFuIG9wdGlvbmFsIFJlZ2lzdHJ5IG9iamVjdCB3aXRoIHRoZSBlbnRpcmUgZGF0YSBzZXQgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgZW50aXJlIGZvcm0uDQoJICogQHBhcmFtICAgRm9ybSAgICAgICAgICAgICAgICRmb3JtICAgICBUaGUgZm9ybSBvYmplY3QgZm9yIHdoaWNoIHRoZSBmaWVsZCBpcyBiZWluZyB0ZXN0ZWQuDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqDQoJICogQHNpbmNlICAgMTEuMQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0ZXN0KFxTaW1wbGVYTUxFbGVtZW50ICRlbGVtZW50LCAkdmFsdWUsICRncm91cCA9IG51bGwsIFJlZ2lzdHJ5ICRpbnB1dCA9IG51bGwsIEZvcm0gJGZvcm0gPSBudWxsKQ0KCXsNCgkJLy8gR2V0IHRoZSBkYXRhYmFzZSBvYmplY3QgYW5kIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJLy8gQnVpbGQgdGhlIHF1ZXJ5Lg0KCQkkcXVlcnktPnNlbGVjdCgnQ09VTlQoKiknKQ0KCQkJLT5mcm9tKCcjX191c2VycycpDQoJCQktPndoZXJlKCd1c2VybmFtZSA9ICcgLiAkZGItPnF1b3RlKCR2YWx1ZSkpOw0KDQoJCS8vIEdldCB0aGUgdXNlciBJRCBpZiBzZXQuDQoJCSR1c2VySWQgPSAoJGZvcm0gaW5zdGFuY2VvZiBGb3JtICYmICgkdXNlcklkID0gJGZvcm0tPmdldFZhbHVlKCd1c2VyJykpKSA/ICR1c2VySWQgOiAoKCRpbnB1dCBpbnN0YW5jZW9mIFJlZ2lzdHJ5ICYmICgkdXNlcklkID0gJGlucHV0LT5nZXQoJ3VzZXInKSkpID8gJHVzZXJJZCA6IDApOw0KCQkvLyBpZiBzdGlsbCBub3QgdXNlciBpcyBmb3VuZCBnZXQgbWVtYmVyIGlkDQoJCWlmICgkdXNlcklkID09IDApDQoJCXsNCgkJCSRtZW1iZXJJZCA9ICgkZm9ybSBpbnN0YW5jZW9mIEZvcm0gJiYgKCRtZW1iZXJJZCA9ICRmb3JtLT5nZXRWYWx1ZSgnaWQnKSkpID8gJG1lbWJlcklkIDogKCgkaW5wdXQgaW5zdGFuY2VvZiBSZWdpc3RyeSAmJiAoJG1lbWJlcklkID0gJGlucHV0LT5nZXQoJ2lkJykpKSA/ICRtZW1iZXJJZCA6IDApOw0KCQl9DQoJCS8vIGdldCBhY2NvdW50IHR5cGUgaWYgbmVlZGVkDQoJCWlmICgkdXNlcklkID09IDAgJiYgJG1lbWJlcklkID4gMCkNCgkJew0KCQkJJGFjY291bnRJZCA9ICgkZm9ybSBpbnN0YW5jZW9mIEZvcm0gJiYgKCRhY2NvdW50SWQgPSAkZm9ybS0+Z2V0VmFsdWUoJ2FjY291bnQnKSkpID8gJGFjY291bnRJZCA6ICgoJGlucHV0IGluc3RhbmNlb2YgUmVnaXN0cnkgJiYgKCRhY2NvdW50SWQgPSAkaW5wdXQtPmdldCgnYWNjb3VudCcpKSkgPyAkYWNjb3VudElkIDogMCk7DQoJCQkvLyBtYWtlIHN1cmUgdGhlc2UgYWNjb3VudCBpcyBzZXQNCgkJCWlmICgkYWNjb3VudElkID09IDApDQoJCQl7DQoJCQkJJGFjY291bnRJZCA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OnZhcignbWVtYmVyJywgJG1lbWJlcklkLCAnaWQnLCAnYWNjb3VudCcpOw0KCQkJfQ0KCQl9DQoJCS8vIGdldCB1c2VyIHZhbHVlIGlmIG5vdCBzZXQgKGR1ZSB0byBwZXJtaXNzaW9ucykNCgkJaWYgKCR1c2VySWQgPT0gMCAmJiAkbWVtYmVySWQgPiAwICYmICRhY2NvdW50SWQgPiAwICYmICgxID09ICRhY2NvdW50SWQgfHwgNCA9PSAkYWNjb3VudElkKSkNCgkJew0KCQkJJHVzZXJJZCA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OnZhcignbWVtYmVyJywgJG1lbWJlcklkLCAnaWQnLCAndXNlcicpOw0KCQl9DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnIDw+ICcgLiAoaW50KSAkdXNlcklkKTsNCg0KCQkvLyBTZXQgYW5kIHF1ZXJ5IHRoZSBkYXRhYmFzZS4NCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZHVwbGljYXRlID0gKGJvb2wpICRkYi0+bG9hZFJlc3VsdCgpOw0KDQoJCWlmICgkZHVwbGljYXRlKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQlyZXR1cm4gdHJ1ZTsNCgl9', 'Validate the member username', 1, '2018-09-16 00:42:59', ''),
(5, 'memberuseremail', 'CS8qKg0KCSAqIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlIGluIHRlc3RpbmcgYSBmb3JtIGZpZWxkIHZhbHVlLg0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDExLjENCgkgKiBAbGluayAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWwtbWFya3VwL2lucHV0LmVtYWlsLmh0bWwNCgkgKi8NCglwcm90ZWN0ZWQgJHJlZ2V4ID0gIl5bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05LV0rKD86XC5bYS16QS1aMC05LV0rKSokIjsNCg0KCS8qKg0KCSAqIE1ldGhvZCB0byB0ZXN0IHRoZSBlbWFpbCBhZGRyZXNzIGFuZCBvcHRpb25hbGx5IGNoZWNrIGZvciB1bmlxdWVuZXNzLg0KCSAqDQoJICogQHBhcmFtICAgXFNpbXBsZVhNTEVsZW1lbnQgICRlbGVtZW50ICBUaGUgU2ltcGxlWE1MRWxlbWVudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBgPGZpZWxkPmAgdGFnIGZvciB0aGUgZm9ybSBmaWVsZCBvYmplY3QuDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAgICAgICAgICR2YWx1ZSAgICBUaGUgZm9ybSBmaWVsZCB2YWx1ZSB0byB2YWxpZGF0ZS4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICAgICAgJGdyb3VwICAgIFRoZSBmaWVsZCBuYW1lIGdyb3VwIGNvbnRyb2wgdmFsdWUuIFRoaXMgYWN0cyBhcyBhbiBhcnJheSBjb250YWluZXIgZm9yIHRoZSBmaWVsZC4NCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlIGlmIHRoZSBmaWVsZCBoYXMgbmFtZT0iZm9vIiBhbmQgdGhlIGdyb3VwIHZhbHVlIGlzIHNldCB0byAiYmFyIiB0aGVuIHRoZQ0KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbCBmaWVsZCBuYW1lIHdvdWxkIGVuZCB1cCBiZWluZyAiYmFyW2Zvb10iLg0KCSAqIEBwYXJhbSAgIFJlZ2lzdHJ5ICAgICAgICAgICAkaW5wdXQgICAgQW4gb3B0aW9uYWwgUmVnaXN0cnkgb2JqZWN0IHdpdGggdGhlIGVudGlyZSBkYXRhIHNldCB0byB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBlbnRpcmUgZm9ybS4NCgkgKiBAcGFyYW0gICBGb3JtICAgICAgICAgICAgICAgJGZvcm0gICAgIFRoZSBmb3JtIG9iamVjdCBmb3Igd2hpY2ggdGhlIGZpZWxkIGlzIGJlaW5nIHRlc3RlZC4NCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gIFRydWUgaWYgdGhlIHZhbHVlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuDQoJICoNCgkgKiBAc2luY2UgICAxMS4xDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHRlc3QoXFNpbXBsZVhNTEVsZW1lbnQgJGVsZW1lbnQsICR2YWx1ZSwgJGdyb3VwID0gbnVsbCwgUmVnaXN0cnkgJGlucHV0ID0gbnVsbCwgRm9ybSAkZm9ybSA9IG51bGwpDQoJew0KCQkvLyBJZiB0aGUgZmllbGQgaXMgZW1wdHkgYW5kIG5vdCByZXF1aXJlZCwgdGhlIGZpZWxkIGlzIHZhbGlkLg0KCQkkcmVxdWlyZWQgPSAoKHN0cmluZykgJGVsZW1lbnRbJ3JlcXVpcmVkJ10gPT0gJ3RydWUnIHx8IChzdHJpbmcpICRlbGVtZW50WydyZXF1aXJlZCddID09ICdyZXF1aXJlZCcpOw0KDQoJCWlmICghJHJlcXVpcmVkICYmIGVtcHR5KCR2YWx1ZSkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoNCgkJLy8gSWYgdGhlIHRsZCBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgY2hhbmdlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVxdWlyZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgZm9yIGl0Lg0KCQkkdGxkID0gKChzdHJpbmcpICRlbGVtZW50Wyd0bGQnXSA9PSAndGxkJyB8fCAoc3RyaW5nKSAkZWxlbWVudFsndGxkJ10gPT0gJ3JlcXVpcmVkJyk7DQoNCgkJaWYgKCR0bGQpDQoJCXsNCgkJCSR0aGlzLT5yZWdleCA9ICJeW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSkiDQoJCQkJLiAnPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSskJzsNCgkJfQ0KDQoJCS8vIERldGVybWluZSBpZiB0aGUgbXVsdGlwbGUgYXR0cmlidXRlIGlzIHByZXNlbnQNCgkJJG11bHRpcGxlID0gKChzdHJpbmcpICRlbGVtZW50WydtdWx0aXBsZSddID09ICd0cnVlJyB8fCAoc3RyaW5nKSAkZWxlbWVudFsnbXVsdGlwbGUnXSA9PSAnbXVsdGlwbGUnKTsNCg0KCQlpZiAoISRtdWx0aXBsZSkNCgkJew0KCQkJLy8gSGFuZGxlIGlkbiBlbWFpbCBhZGRyZXNzZXMgYnkgY29udmVydGluZyB0byBwdW55Y29kZS4NCgkJCSR2YWx1ZSA9IFxKU3RyaW5nUHVueWNvZGU6OmVtYWlsVG9QdW55Y29kZSgkdmFsdWUpOw0KDQoJCQkvLyBUZXN0IHRoZSB2YWx1ZSBhZ2FpbnN0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24uDQoJCQlpZiAoIXBhcmVudDo6dGVzdCgkZWxlbWVudCwgJHZhbHVlLCAkZ3JvdXAsICRpbnB1dCwgJGZvcm0pKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR2YWx1ZXMgPSBleHBsb2RlKCcsJywgJHZhbHVlKTsNCg0KCQkJZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpDQoJCQl7DQoJCQkJLy8gSGFuZGxlIGlkbiBlbWFpbCBhZGRyZXNzZXMgYnkgY29udmVydGluZyB0byBwdW55Y29kZS4NCgkJCQkkdmFsdWUgPSBcSlN0cmluZ1B1bnljb2RlOjplbWFpbFRvUHVueWNvZGUoJHZhbHVlKTsNCg0KCQkJCS8vIFRlc3QgdGhlIHZhbHVlIGFnYWluc3QgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4NCgkJCQlpZiAoIXBhcmVudDo6dGVzdCgkZWxlbWVudCwgJHZhbHVlLCAkZ3JvdXAsICRpbnB1dCwgJGZvcm0pKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCS8vIENoZWNrIGlmIHdlIHNob3VsZCB0ZXN0IGZvciB1bmlxdWVuZXNzLiBUaGlzIG9ubHkgY2FuIGJlIHVzZWQgaWYgbXVsdGlwbGUgaXMgbm90IHRydWUNCgkJJHVuaXF1ZSA9ICgoc3RyaW5nKSAkZWxlbWVudFsndW5pcXVlJ10gPT0gJ3RydWUnIHx8IChzdHJpbmcpICRlbGVtZW50Wyd1bmlxdWUnXSA9PSAndW5pcXVlJyk7DQoNCgkJaWYgKCR1bmlxdWUgJiYgISRtdWx0aXBsZSkNCgkJew0KCQkJLy8gR2V0IHRoZSBkYXRhYmFzZSBvYmplY3QgYW5kIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJLy8gQnVpbGQgdGhlIHF1ZXJ5Lg0KCQkJJHF1ZXJ5LT5zZWxlY3QoJ0NPVU5UKCopJykNCgkJCQktPmZyb20oJyNfX3VzZXJzJykNCgkJCQktPndoZXJlKCdlbWFpbCA9ICcgLiAkZGItPnF1b3RlKCR2YWx1ZSkpOw0KDQoJCQkvLyBHZXQgdGhlIHVzZXIgSUQgaWYgc2V0Lg0KCQkJJHVzZXJJZCA9ICgkZm9ybSBpbnN0YW5jZW9mIEZvcm0gJiYgKCR1c2VySWQgPSAkZm9ybS0+Z2V0VmFsdWUoJ3VzZXInKSkpID8gJHVzZXJJZCA6ICgoJGlucHV0IGluc3RhbmNlb2YgUmVnaXN0cnkgJiYgKCR1c2VySWQgPSAkaW5wdXQtPmdldCgndXNlcicpKSkgPyAkdXNlcklkIDogMCk7DQoJCQkvLyBpZiBzdGlsbCBub3QgdXNlciBpcyBmb3VuZCBnZXQgbWVtYmVyIGlkDQoJCQlpZiAoJHVzZXJJZCA9PSAwKQ0KCQkJew0KCQkJCSRtZW1iZXJJZCA9ICgkZm9ybSBpbnN0YW5jZW9mIEZvcm0gJiYgKCRtZW1iZXJJZCA9ICRmb3JtLT5nZXRWYWx1ZSgnaWQnKSkpID8gJG1lbWJlcklkIDogKCgkaW5wdXQgaW5zdGFuY2VvZiBSZWdpc3RyeSAmJiAoJG1lbWJlcklkID0gJGlucHV0LT5nZXQoJ2lkJykpKSA/ICRtZW1iZXJJZCA6IDApOw0KCQkJfQ0KCQkJLy8gZ2V0IGFjY291bnQgdHlwZSBpZiBuZWVkZWQNCgkJCWlmICgkdXNlcklkID09IDAgJiYgJG1lbWJlcklkID4gMCkNCgkJCXsNCgkJCQkkYWNjb3VudElkID0gKCRmb3JtIGluc3RhbmNlb2YgRm9ybSAmJiAoJGFjY291bnRJZCA9ICRmb3JtLT5nZXRWYWx1ZSgnYWNjb3VudCcpKSkgPyAkYWNjb3VudElkIDogKCgkaW5wdXQgaW5zdGFuY2VvZiBSZWdpc3RyeSAmJiAoJGFjY291bnRJZCA9ICRpbnB1dC0+Z2V0KCdhY2NvdW50JykpKSA/ICRhY2NvdW50SWQgOiAwKTsNCgkJCQkvLyBtYWtlIHN1cmUgdGhlc2UgYWNjb3VudCBpcyBzZXQNCgkJCQlpZiAoJGFjY291bnRJZCA9PSAwKQ0KCQkJCXsNCgkJCQkJJGFjY291bnRJZCA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OnZhcignbWVtYmVyJywgJG1lbWJlcklkLCAnaWQnLCAnYWNjb3VudCcpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGdldCB1c2VyIHZhbHVlIGlmIG5vdCBzZXQgKGR1ZSB0byBwZXJtaXNzaW9ucykNCgkJCWlmICgkdXNlcklkID09IDAgJiYgJG1lbWJlcklkID4gMCAmJiAkYWNjb3VudElkID4gMCAmJiAoMSA9PSAkYWNjb3VudElkIHx8IDQgPT0gJGFjY291bnRJZCkpDQoJCQl7DQoJCQkJJHVzZXJJZCA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OnZhcignbWVtYmVyJywgJG1lbWJlcklkLCAnaWQnLCAndXNlcicpOw0KCQkJfQ0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPD4gJyAuIChpbnQpICR1c2VySWQpOw0KDQoJCQkvLyBTZXQgYW5kIHF1ZXJ5IHRoZSBkYXRhYmFzZS4NCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkdXBsaWNhdGUgPSAoYm9vbCkgJGRiLT5sb2FkUmVzdWx0KCk7DQoNCgkJCWlmICgkZHVwbGljYXRlKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiB0cnVlOw0KCX0=', 'Validate the member useremail', 1, '2018-09-16 00:43:44', ''),
(6, 'iban', 'CS8qKg0KCSogTWV0aG9kIHRvIGNoZWNrIGlmIElCQU4gaXMgdmFsaWQuDQoJKg0KCSogQHBhcmFtICAgXFNpbXBsZVhNTEVsZW1lbnQgICRlbGVtZW50ICBUaGUgU2ltcGxlWE1MRWxlbWVudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBgPGZpZWxkPmAgdGFnIGZvciB0aGUgZm9ybSBmaWVsZCBvYmplY3QuDQoJKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICAgICAgJHZhbHVlICAgIFRoZSBmb3JtIGZpZWxkIHZhbHVlIHRvIHZhbGlkYXRlLg0KCSogQHBhcmFtICAgc3RyaW5nICAgICAgICAgICAgICRncm91cCAgICBUaGUgZmllbGQgbmFtZSBncm91cCBjb250cm9sIHZhbHVlLiBUaGlzIGFjdHMgYXMgYW4gYXJyYXkgY29udGFpbmVyIGZvciB0aGUgZmllbGQuDQoJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlIGlmIHRoZSBmaWVsZCBoYXMgbmFtZT0iZm9vIiBhbmQgdGhlIGdyb3VwIHZhbHVlIGlzIHNldCB0byAiYmFyIiB0aGVuIHRoZQ0KCSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsIGZpZWxkIG5hbWUgd291bGQgZW5kIHVwIGJlaW5nICJiYXJbZm9vXSIuDQoJKiBAcGFyYW0gICBSZWdpc3RyeSAgICAgICAgICAgJGlucHV0ICAgIEFuIG9wdGlvbmFsIFJlZ2lzdHJ5IG9iamVjdCB3aXRoIHRoZSBlbnRpcmUgZGF0YSBzZXQgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgZW50aXJlIGZvcm0uDQoJKiBAcGFyYW0gICBGb3JtICAgICAgICAgICAgICAgJGZvcm0gICAgIFRoZSBmb3JtIG9iamVjdCBmb3Igd2hpY2ggdGhlIGZpZWxkIGlzIGJlaW5nIHRlc3RlZC4NCgkqDQoJKiBAcmV0dXJuICBib29sZWFuICBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSoNCgkqIEBzaW5jZSAgIDMuOS4wDQoJKi8NCglwdWJsaWMgZnVuY3Rpb24gdGVzdChcU2ltcGxlWE1MRWxlbWVudCAkZWxlbWVudCwgJHZhbHVlLCAkZ3JvdXAgPSBudWxsLCBSZWdpc3RyeSAkaW5wdXQgPSBudWxsLCBGb3JtICRmb3JtID0gbnVsbCkNCgl7DQoJCSRjb3VudHJ5Q29kZU9mZnNldCA9IDA7IC8vIENPVU5UUllfQ09ERV9PRkZTRVQNCgkJJGNvdW50cnlDb2RlTGVuZ3RoID0gMjsgLy9DT1VOVFJZX0NPREVfTEVOR1RIDQoJCSRjaGVja3N1bU9mZnNldCA9IDI7IC8vQ0hFQ0tTVU1fT0ZGU0VUDQoJCSRjaGVja3N1bUxlbmd0aCA9IDI7IC8vQ0hFQ0tTVU1fTEVOR1RIDQoJCSRpbnN0aXR1dGVJZGVudGlmaWNhdGlvbk9mZnNldCA9IDQ7IC8vSU5TVElUVVRFX0lERU5USUZJQ0FUSU9OX09GRlNFVA0KDQoJCS8qKg0KCQkqIEB2YXIgYXJyYXkgQ291bnRyeSBjb2RlIHRvIHNpemUsIHJlZ2V4IGZvcm1hdCBmb3IgZWFjaCBjb3VudHJ5IHRoYXQgc3VwcG9ydHMgSUJBTg0KCQkqLw0KCQkkaWJhbkZvcm1hdE1hcCA9IGFycmF5KA0KCQkJJ0FBJyA9PiBhcnJheSgxMiwgJ15bQS1aMC05XXsxMn0kJyksDQoJCQknQUQnID0+IGFycmF5KDIwLCAnXlswLTldezR9WzAtOV17NH1bQS1aMC05XXsxMn0kJyksDQoJCQknQUUnID0+IGFycmF5KDE5LCAnXlswLTldezN9WzAtOV17MTZ9JCcpLA0KCQkJJ0FMJyA9PiBhcnJheSgyNCwgJ15bMC05XXs4fVtBLVowLTldezE2fSQnKSwNCgkJCSdBTycgPT4gYXJyYXkoMjEsICdeWzAtOV17MjF9JCcpLA0KCQkJJ0FUJyA9PiBhcnJheSgxNiwgJ15bMC05XXs1fVswLTldezExfSQnKSwNCgkJCSdBWCcgPT4gYXJyYXkoMTQsICdeWzAtOV17Nn1bMC05XXs3fVswLTldezF9JCcpLA0KCQkJJ0FaJyA9PiBhcnJheSgyNCwgJ15bQS1aXXs0fVtBLVowLTldezIwfSQnKSwNCgkJCSdCQScgPT4gYXJyYXkoMTYsICdeWzAtOV17M31bMC05XXszfVswLTldezh9WzAtOV17Mn0kJyksDQoJCQknQkUnID0+IGFycmF5KDEyLCAnXlswLTldezN9WzAtOV17N31bMC05XXsyfSQnKSwNCgkJCSdCRicgPT4gYXJyYXkoMjMsICdeWzAtOV17MjN9JCcpLA0KCQkJJ0JHJyA9PiBhcnJheSgxOCwgJ15bQS1aXXs0fVswLTldezR9WzAtOV17Mn1bQS1aMC05XXs4fSQnKSwNCgkJCSdCSCcgPT4gYXJyYXkoMTgsICdeW0EtWl17NH1bQS1aMC05XXsxNH0kJyksDQoJCQknQkknID0+IGFycmF5KDEyLCAnXlswLTldezEyfSQnKSwNCgkJCSdCSicgPT4gYXJyYXkoMjQsICdeW0EtWl17MX1bMC05XXsyM30kJyksDQoJCQknQkwnID0+IGFycmF5KDIzLCAnXlswLTldezV9WzAtOV17NX1bQS1aMC05XXsxMX1bMC05XXsyfSQnKSwNCgkJCSdCUicgPT4gYXJyYXkoMjUsICdeWzAtOV17OH1bMC05XXs1fVswLTldezEwfVtBLVpdezF9W0EtWjAtOV17MX0kJyksDQoJCQknQ0gnID0+IGFycmF5KDE3LCAnXlswLTldezV9W0EtWjAtOV17MTJ9JCcpLA0KCQkJJ0NJJyA9PiBhcnJheSgyNCwgJ15bQS1aXXsxfVswLTldezIzfSQnKSwNCgkJCSdDTScgPT4gYXJyYXkoMjMsICdeWzAtOV17MjN9JCcpLA0KCQkJJ0NSJyA9PiBhcnJheSgxNywgJ15bMC05XXs0fVswLTldezEzfSQnKSwNCgkJCSdDVicgPT4gYXJyYXkoMjEsICdeWzAtOV17MjF9JCcpLA0KCQkJJ0NZJyA9PiBhcnJheSgyNCwgJ15bMC05XXszfVswLTldezV9W0EtWjAtOV17MTZ9JCcpLA0KCQkJJ0NaJyA9PiBhcnJheSgyMCwgJ15bMC05XXs0fVswLTldezZ9WzAtOV17MTB9JCcpLA0KCQkJJ0RFJyA9PiBhcnJheSgxOCwgJ15bMC05XXs4fVswLTldezEwfSQnKSwNCgkJCSdESycgPT4gYXJyYXkoMTQsICdeWzAtOV17NH1bMC05XXs5fVswLTldezF9JCcpLA0KCQkJJ0RPJyA9PiBhcnJheSgyNCwgJ15bQS1aMC05XXs0fVswLTldezIwfSQnKSwNCgkJCSdEWicgPT4gYXJyYXkoMjAsICdeWzAtOV17MjB9JCcpLA0KCQkJJ0VFJyA9PiBhcnJheSgxNiwgJ15bMC05XXsyfVswLTldezJ9WzAtOV17MTF9WzAtOV17MX0kJyksDQoJCQknRVMnID0+IGFycmF5KDIwLCAnXlswLTldezR9WzAtOV17NH1bMC05XXsxfVswLTldezF9WzAtOV17MTB9JCcpLA0KCQkJJ0ZJJyA9PiBhcnJheSgxNCwgJ15bMC05XXs2fVswLTldezd9WzAtOV17MX0kJyksDQoJCQknRk8nID0+IGFycmF5KDE0LCAnXlswLTldezR9WzAtOV17OX1bMC05XXsxfSQnKSwNCgkJCSdGUicgPT4gYXJyYXkoMjMsICdeWzAtOV17NX1bMC05XXs1fVtBLVowLTldezExfVswLTldezJ9JCcpLA0KCQkJJ0dCJyA9PiBhcnJheSgxOCwgJ15bQS1aXXs0fVswLTldezZ9WzAtOV17OH0kJyksDQoJCQknR0UnID0+IGFycmF5KDE4LCAnXltBLVpdezJ9WzAtOV17MTZ9JCcpLA0KCQkJJ0dGJyA9PiBhcnJheSgyMywgJ15bMC05XXs1fVswLTldezV9W0EtWjAtOV17MTF9WzAtOV17Mn0kJyksDQoJCQknR0knID0+IGFycmF5KDE5LCAnXltBLVpdezR9W0EtWjAtOV17MTV9JCcpLA0KCQkJJ0dMJyA9PiBhcnJheSgxNCwgJ15bMC05XXs0fVswLTldezl9WzAtOV17MX0kJyksDQoJCQknR1AnID0+IGFycmF5KDIzLCAnXlswLTldezV9WzAtOV17NX1bQS1aMC05XXsxMX1bMC05XXsyfSQnKSwNCgkJCSdHUicgPT4gYXJyYXkoMjMsICdeWzAtOV17M31bMC05XXs0fVtBLVowLTldezE2fSQnKSwNCgkJCSdHVCcgPT4gYXJyYXkoMjQsICdeW0EtWjAtOV17NH1bQS1aMC05XXsyMH0kJyksDQoJCQknSFInID0+IGFycmF5KDE3LCAnXlswLTldezd9WzAtOV17MTB9JCcpLA0KCQkJJ0hVJyA9PiBhcnJheSgyNCwgJ15bMC05XXszfVswLTldezR9WzAtOV17MX1bMC05XXsxNX1bMC05XXsxfSQnKSwNCgkJCSdJRScgPT4gYXJyYXkoMTgsICdeW0EtWl17NH1bMC05XXs2fVswLTldezh9JCcpLA0KCQkJJ0lMJyA9PiBhcnJheSgxOSwgJ15bMC05XXszfVswLTldezN9WzAtOV17MTN9JCcpLA0KCQkJJ0lSJyA9PiBhcnJheSgyMiwgJ15bMC05XXsyMn0kJyksDQoJCQknSVMnID0+IGFycmF5KDIyLCAnXlswLTldezR9WzAtOV17Mn1bMC05XXs2fVswLTldezEwfSQnKSwNCgkJCSdJVCcgPT4gYXJyYXkoMjMsICdeW0EtWl17MX1bMC05XXs1fVswLTldezV9W0EtWjAtOV17MTJ9JCcpLA0KCQkJJ0pPJyA9PiBhcnJheSgyNiwgJ15bQS1aXXs0fVswLTldezR9W0EtWjAtOV17MTh9JCcpLA0KCQkJJ0tXJyA9PiBhcnJheSgyNiwgJ15bQS1aXXs0fVtBLVowLTldezIyfSQnKSwNCgkJCSdLWicgPT4gYXJyYXkoMTYsICdeWzAtOV17M31bQS1aMC05XXsxM30kJyksDQoJCQknTEInID0+IGFycmF5KDI0LCAnXlswLTldezR9W0EtWjAtOV17MjB9JCcpLA0KCQkJJ0xDJyA9PiBhcnJheSgyOCwgJ15bQS1aXXs0fVtBLVowLTldezI0fSQnKSwNCgkJCSdMSScgPT4gYXJyYXkoMTcsICdeWzAtOV17NX1bQS1aMC05XXsxMn0kJyksDQoJCQknTFQnID0+IGFycmF5KDE2LCAnXlswLTldezV9WzAtOV17MTF9JCcpLA0KCQkJJ0xVJyA9PiBhcnJheSgxNiwgJ15bMC05XXszfVtBLVowLTldezEzfSQnKSwNCgkJCSdMVicgPT4gYXJyYXkoMTcsICdeW0EtWl17NH1bQS1aMC05XXsxM30kJyksDQoJCQknTUMnID0+IGFycmF5KDIzLCAnXlswLTldezV9WzAtOV17NX1bQS1aMC05XXsxMX1bMC05XXsyfSQnKSwNCgkJCSdNRCcgPT4gYXJyYXkoMjAsICdeW0EtWjAtOV17Mn1bQS1aMC05XXsxOH0kJyksDQoJCQknTUUnID0+IGFycmF5KDE4LCAnXlswLTldezN9WzAtOV17MTN9WzAtOV17Mn0kJyksDQoJCQknTUYnID0+IGFycmF5KDIzLCAnXlswLTldezV9WzAtOV17NX1bQS1aMC05XXsxMX1bMC05XXsyfSQnKSwNCgkJCSdNRycgPT4gYXJyYXkoMjMsICdeWzAtOV17MjN9JCcpLA0KCQkJJ01LJyA9PiBhcnJheSgxNSwgJ15bMC05XXszfVtBLVowLTldezEwfVswLTldezJ9JCcpLA0KCQkJJ01MJyA9PiBhcnJheSgyNCwgJ15bQS1aXXsxfVswLTldezIzfSQnKSwNCgkJCSdNUScgPT4gYXJyYXkoMjMsICdeWzAtOV17NX1bMC05XXs1fVtBLVowLTldezExfVswLTldezJ9JCcpLA0KCQkJJ01SJyA9PiBhcnJheSgyMywgJ15bMC05XXs1fVswLTldezV9WzAtOV17MTF9WzAtOV17Mn0kJyksDQoJCQknTVQnID0+IGFycmF5KDI3LCAnXltBLVpdezR9WzAtOV17NX1bQS1aMC05XXsxOH0kJyksDQoJCQknTVUnID0+IGFycmF5KDI2LCAnXltBLVpdezR9WzAtOV17Mn1bMC05XXsyfVswLTldezEyfVswLTldezN9W0EtWl17M30kJyksDQoJCQknTVonID0+IGFycmF5KDIxLCAnXlswLTldezIxfSQnKSwNCgkJCSdOQycgPT4gYXJyYXkoMjMsICdeWzAtOV17NX1bMC05XXs1fVtBLVowLTldezExfVswLTldezJ9JCcpLA0KCQkJJ05MJyA9PiBhcnJheSgxNCwgJ15bQS1aXXs0fVswLTldezEwfSQnKSwNCgkJCSdOTycgPT4gYXJyYXkoMTEsICdeWzAtOV17NH1bMC05XXs2fVswLTldezF9JCcpLA0KCQkJJ1BGJyA9PiBhcnJheSgyMywgJ15bMC05XXs1fVswLTldezV9W0EtWjAtOV17MTF9WzAtOV17Mn0kJyksDQoJCQknUEsnID0+IGFycmF5KDIwLCAnXltBLVpdezR9W0EtWjAtOV17MTZ9JCcpLA0KCQkJJ1BMJyA9PiBhcnJheSgyNCwgJ15bMC05XXs4fVswLTldezE2fSQnKSwNCgkJCSdQTScgPT4gYXJyYXkoMjMsICdeWzAtOV17NX1bMC05XXs1fVtBLVowLTldezExfVswLTldezJ9JCcpLA0KCQkJJ1BTJyA9PiBhcnJheSgyNSwgJ15bQS1aXXs0fVtBLVowLTldezIxfSQnKSwNCgkJCSdQVCcgPT4gYXJyYXkoMjEsICdeWzAtOV17NH1bMC05XXs0fVswLTldezExfVswLTldezJ9JCcpLA0KCQkJJ1FBJyA9PiBhcnJheSgyNSwgJ15bQS1aXXs0fVswLTldezR9W0EtWjAtOV17MTd9JCcpLA0KCQkJJ1JFJyA9PiBhcnJheSgyMywgJ15bMC05XXs1fVswLTldezV9W0EtWjAtOV17MTF9WzAtOV17Mn0kJyksDQoJCQknUk8nID0+IGFycmF5KDIwLCAnXltBLVpdezR9W0EtWjAtOV17MTZ9JCcpLA0KCQkJJ1JTJyA9PiBhcnJheSgxOCwgJ15bMC05XXszfVswLTldezEzfVswLTldezJ9JCcpLA0KCQkJJ1NBJyA9PiBhcnJheSgyMCwgJ15bMC05XXsyfVtBLVowLTldezE4fSQnKSwNCgkJCSdTQycgPT4gYXJyYXkoMjcsICdeW0EtWl17NH1bMC05XXs0fVswLTldezE2fVtBLVpdezN9JCcpLA0KCQkJJ1NFJyA9PiBhcnJheSgyMCwgJ15bMC05XXszfVswLTldezE2fVswLTldezF9JCcpLA0KCQkJJ1NJJyA9PiBhcnJheSgxNSwgJ15bMC05XXs1fVswLTldezh9WzAtOV17Mn0kJyksDQoJCQknU0snID0+IGFycmF5KDIwLCAnXlswLTldezR9WzAtOV17Nn1bMC05XXsxMH0kJyksDQoJCQknU00nID0+IGFycmF5KDIzLCAnXltBLVpdezF9WzAtOV17NX1bMC05XXs1fVtBLVowLTldezEyfSQnKSwNCgkJCSdTTicgPT4gYXJyYXkoMjQsICdeW0EtWl17MX1bMC05XXsyM30kJyksDQoJCQknU1QnID0+IGFycmF5KDIxLCAnXlswLTldezh9WzAtOV17MTF9WzAtOV17Mn0kJyksDQoJCQknVEYnID0+IGFycmF5KDIzLCAnXlswLTldezV9WzAtOV17NX1bQS1aMC05XXsxMX1bMC05XXsyfSQnKSwNCgkJCSdUTCcgPT4gYXJyYXkoMTksICdeWzAtOV17M31bMC05XXsxNH1bMC05XXsyfSQnKSwNCgkJCSdUTicgPT4gYXJyYXkoMjAsICdeWzAtOV17Mn1bMC05XXszfVswLTldezEzfVswLTldezJ9JCcpLA0KCQkJJ1RSJyA9PiBhcnJheSgyMiwgJ15bMC05XXs1fVswLTldezF9W0EtWjAtOV17MTZ9JCcpLA0KCQkJJ1VBJyA9PiBhcnJheSgyNSwgJ15bMC05XXs2fVtBLVowLTldezE5fSQnKSwNCgkJCSdWRycgPT4gYXJyYXkoMjAsICdeW0EtWl17NH1bMC05XXsxNn0kJyksDQoJCQknV0YnID0+IGFycmF5KDIzLCAnXlswLTldezV9WzAtOV17NX1bQS1aMC05XXsxMX1bMC05XXsyfSQnKSwNCgkJCSdYSycgPT4gYXJyYXkoMTYsICdeWzAtOV17NH1bMC05XXsxMH1bMC05XXsyfSQnKSwNCgkJCSdZVCcgPT4gYXJyYXkoMjMsICdeWzAtOV17NX1bMC05XXs1fVtBLVowLTldezExfVswLTldezJ9JCcpDQoJCSk7DQoNCgkJLy8gQ0xFQU4gVVAgSUJBTg0KCQkkaWJhbiA9IHByZWdfcmVwbGFjZSgnL1teYS16MC05XSsvaScsICcnLCB0cmltKHN0cnRvdXBwZXIoJHZhbHVlKSkpOw0KDQoJCS8vIENIRUNLIENvdW50cnkgQ29kZQ0KCQkkY291bnRyeUNvZGUgPSBzdWJzdHIoJGliYW4sICRjb3VudHJ5Q29kZU9mZnNldCwgJGNvdW50cnlDb2RlTGVuZ3RoKTsNCgkJJGlzQ291bnRyeUNvZGVWYWxpZCA9ICEoaXNzZXQoJGliYW5Gb3JtYXRNYXBbJGNvdW50cnlDb2RlXSkgPT09IGZhbHNlKTsNCg0KCQkkdmFsaWRMZW5ndGggPSAkY291bnRyeUNvZGVMZW5ndGggKyAkY2hlY2tzdW1MZW5ndGggKyAkaWJhbkZvcm1hdE1hcFskY291bnRyeUNvZGVdWzBdOw0KCQkkaXNMZW5ndGhWYWxpZCA9IHN0cmxlbigkaWJhbikgPT09ICR2YWxpZExlbmd0aDsNCg0KCQkkYWNjb3VudElkZW50aWZpY2F0aW9uID0gc3Vic3RyKCRpYmFuLCAkaW5zdGl0dXRlSWRlbnRpZmljYXRpb25PZmZzZXQpOw0KCQkkaXNGb3JtYXRWYWxpZCA9ICEocHJlZ19tYXRjaCgnLycgLiAkaWJhbkZvcm1hdE1hcFskY291bnRyeUNvZGVdWzFdIC4gJy8nLCAkYWNjb3VudElkZW50aWZpY2F0aW9uKSAhPT0gMSk7DQoNCgkJJGNoZWNrc3VtID0gc3Vic3RyKCRpYmFuLCAkY2hlY2tzdW1PZmZzZXQsICRjaGVja3N1bUxlbmd0aCk7DQoJCSRhY2NvdW50SWRlbnRpZmljYXRpb24gPSBzdWJzdHIoJGliYW4sICRpbnN0aXR1dGVJZGVudGlmaWNhdGlvbk9mZnNldCk7DQoNCgkJLy8gR0VUIE5VTUVSSUMgQ09VTlRSWSBDT0RFDQoJCSRudW1lcmljUmVwcmVzZW50YXRpb24gPSAnJzsNCgkJJGxldHRlclJlcHJlc2VudGF0aW9uID0gJGNvdW50cnlDb2RlOw0KCQlmb3JlYWNoIChzdHJfc3BsaXQoJGxldHRlclJlcHJlc2VudGF0aW9uKSBhcyAkY2hhcikNCgkJew0KCQkJJG9yZCA9IG9yZCgkY2hhcik7DQoJCQlpZiAoJG9yZCA+PSA2NSAmJiAkb3JkIDw9IDkwKQ0KCQkJew0KCQkJCSRudW1lcmljUmVwcmVzZW50YXRpb24gLj0gKHN0cmluZykgKCRvcmQgLSA1NSk7DQoJCQl9DQoJCQllbHNlaWYgKCRvcmQgPj0gNDggJiYgJG9yZCA8PSA1NykNCgkJCXsNCgkJCQkkbnVtZXJpY1JlcHJlc2VudGF0aW9uIC49IChzdHJpbmcpICgkb3JkIC0gNDgpOw0KCQkJfQ0KCQl9DQoJCSRudW1lcmljQ291bnRyeUNvZGUgPSAkbnVtZXJpY1JlcHJlc2VudGF0aW9uOw0KDQoJCSRudW1lcmljUmVwcmVzZW50YXRpb24gPSAnJzsNCgkJJGxldHRlclJlcHJlc2VudGF0aW9uID0gJGFjY291bnRJZGVudGlmaWNhdGlvbjsNCgkJZm9yZWFjaCAoc3RyX3NwbGl0KCRsZXR0ZXJSZXByZXNlbnRhdGlvbikgYXMgJGNoYXIpDQoJCXsNCgkJCSRvcmQgPSBvcmQoJGNoYXIpOw0KCQkJaWYgKCRvcmQgPj0gNjUgJiYgJG9yZCA8PSA5MCkNCgkJCXsNCgkJCQkkbnVtZXJpY1JlcHJlc2VudGF0aW9uIC49IChzdHJpbmcpICgkb3JkIC0gNTUpOw0KCQkJfQ0KCQkJZWxzZWlmICgkb3JkID49IDQ4ICYmICRvcmQgPD0gNTcpDQoJCQl7DQoJCQkJJG51bWVyaWNSZXByZXNlbnRhdGlvbiAuPSAoc3RyaW5nKSAoJG9yZCAtIDQ4KTsNCgkJCX0NCgkJfQ0KCQkkbnVtZXJpY0FjY291bnRJZGVudGlmaWNhdGlvbiA9ICRudW1lcmljUmVwcmVzZW50YXRpb247DQoJCSRpbnZlcnRlZEliYW4gPSAkbnVtZXJpY0FjY291bnRJZGVudGlmaWNhdGlvbiAuICRudW1lcmljQ291bnRyeUNvZGUgLiAkY2hlY2tzdW07DQoNCgkJLy8gQ0hFQ0tTVU0gQkNNT0QNCgkJJHggPSAkaW52ZXJ0ZWRJYmFuOw0KCQkkeSA9IDk3Ow0KCQlpZiAoIWZ1bmN0aW9uX2V4aXN0cygnYmNtb2QnKSkNCgkJew0KCQkJJHRha2UgPSA1Ow0KCQkJJG1vZCA9ICcnOw0KCQkJZG8gew0KCQkJCSRhID0gKGludCkkbW9kIC4gc3Vic3RyKCR4LCAwLCAkdGFrZSk7DQoJCQkJJHggPSBzdWJzdHIoJHgsICR0YWtlKTsNCgkJCQkkbW9kID0gJGEgJSAkeTsNCgkJCX0gd2hpbGUgKHN0cmxlbigkeCkpOw0KCQkJJGJjbW9kID0gKHN0cmluZykkbW9kOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGJjbW9kID0gYmNtb2QoJHgsICR5KTsNCgkJfQ0KDQoJCSRpc0NoZWNrc3VtVmFsaWQgPSAkYmNtb2QgPT09ICcxJzsNCg0KCQlpZiAoISRpc0NvdW50cnlDb2RlVmFsaWQgfHwgISRpc0xlbmd0aFZhbGlkIHx8ICEkaXNGb3JtYXRWYWxpZCB8fCAhJGlzQ2hlY2tzdW1WYWxpZCkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkgICAgcmV0dXJuIHRydWU7DQoJCX0NCgl9', 'IBAN validation', 1, '2019-02-12 23:14:43', '');

--
-- Dumping data for table `#__componentbuilder_field`
--

INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`, `add_javascript_view_footer`, `add_javascript_views_footer`, `css_view`, `css_views`, `datadefault`, `datadefault_other`, `datalenght`, `datalenght_other`, `datatype`, `indexes`, `javascript_view_footer`, `javascript_views_footer`, `name`, `null_switch`, `store`, `fieldtype`, `xml`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `guid`, `on_get_model_field`, `on_save_model_field`, `initiator_on_get_model`, `initiator_on_save_model`, `params`) VALUES
(23, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Alias', 'NOT NULL', '', 24, '\"<field\\n\\ttype=\\\"text\\\"\\n\\tname=\\\"alias\\\"\\n\\tlabel=\\\"Alias\\\"\\n\\tfilter=\\\"STRING\\\"\\n\\thint=\\\"Auto-generated from name\\\"\\n\\/>\"', 1, '2015-04-09 13:46:04', '2023-06-27 23:46:54', 3, '', 216, '335866ce-b81b-4329-901d-c20254135c9c', '', '', '', '', ''),
(84, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Description (full width)', 'NULL', '', 25, '\"<field\\n\\ttype=\\\"textarea\\\"\\n\\tname=\\\"description\\\"\\n\\tlabel=\\\"Description\\\"\\n\\trows=\\\"11\\\"\\n\\tcols=\\\"10\\\"\\n\\tdescription=\\\"Add Description Here\\\"\\n\\tclass=\\\"text_area span12\\\"\\n\\tfilter=\\\"HTML\\\"\\n\\thint=\\\"Add Description Here\\\"\\n\\/>\"', 1, '2015-03-19 18:20:49', '2024-03-06 15:53:48', 5, '', 265, '749a9917-90c3-49c4-9e72-aa33b0683a87', '', '', '', '', ''),
(100, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Email (required)', 'NOT NULL', '', 24, '\"<field \\r\\n\\ttype=\\\"text\\\" \\r\\n\\tname=\\\"email\\\" \\r\\n\\tlabel=\\\"Email\\\" \\r\\n\\tsize=\\\"10\\\" \\r\\n\\tmaxlength=\\\"50\\\" \\r\\n\\tdescription=\\\"Enter Email\\\" \\r\\n\\tclass=\\\"text_area\\\"\\r\\n\\tfilter=\\\"STRING\\\" \\r\\n\\tvalidate=\\\"email\\\" \\r\\n\\trequired=\\\"true\\\"\\r\\n\\tmessage=\\\"Error! Please add email address here.\\\" \\r\\n\\thint=\\\"demo@example.com\\\" \\r\\n\\/>\"', 1, '2015-05-05 23:44:32', '2016-02-07 22:43:18', 4, '', 285, '10c1eccb-b3c3-4325-a056-45a72d116fd8', '', '', '', '', ''),
(158, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Image', 'NOT NULL', '', 12, '\"<field\\n\\ttype=\\\"media\\\"\\n\\tname=\\\"image\\\"\\n\\tlabel=\\\"Image\\\"\\n\\/>\"', 1, '2015-04-29 14:00:56', '2020-06-07 02:17:46', 2, '', 45, '0d6970af-b361-4f65-84f6-0eb0c5f09bad', '', '', '', '', ''),
(196, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Mobile Phone', 'NOT NULL', '', 23, '\"<field type=\\\"text\\\" \\r\\nname=\\\"mobile_phone\\\" \\r\\nlabel=\\\"Mobile Phone\\\" \\r\\nsize=\\\"10\\\" \\r\\nmaxlength=\\\"50\\\" \\r\\ndefault=\\\"\\\" \\r\\ndescription=\\\"Enter Mobile Phone Number\\\" \\r\\nclass=\\\"text_area\\\" \\r\\nfilter=\\\"STRING\\\" \\r\\nvalidated=\\\"tel\\\" \\r\\nrequired=\\\"true\\\" \\r\\nmessage=\\\"Error! Please add mobile phone number here.\\\" \\r\\nhint=\\\"Mobile Phone Here\\\"  \\/>\"', 1, '2015-04-07 22:12:58', '2016-03-28 14:00:02', 2, '', 7, '65933a19-243a-48b2-aae9-34e2da710051', '', '', '', '', ''),
(199, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Name (Key - Required)', 'NOT NULL', '', 24, '\"<field\\n\\ttype=\\\"text\\\"\\n\\tname=\\\"name\\\"\\n\\tlabel=\\\"Name\\\"\\n\\tsize=\\\"40\\\"\\n\\tmaxlength=\\\"150\\\"\\n\\tdescription=\\\"Enter Name Here\\\"\\n\\tclass=\\\"text_area\\\"\\n\\treadonly=\\\"false\\\"\\n\\tdisabled=\\\"false\\\"\\n\\trequired=\\\"true\\\"\\n\\tfilter=\\\"STRING\\\"\\n\\tmessage=\\\"Error! Please add name here.\\\"\\n\\thint=\\\"Name Here\\\"\\n\\/>\"', 1, '2015-03-19 17:30:59', '2023-06-19 22:38:40', 10, '', 4, '5d3d34dd-4876-4c6a-86ab-b4e162f22c08', '', '', '', '', ''),
(203, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Not Required', 'NOT NULL', '', 9, '\"<field\\n\\ttype=\\\"hidden\\\"\\n\\tname=\\\"not_required\\\"\\n\\tdefault=\\\"\\u4e00_\\u4e00\\\"\\n\\/>\"', 1, '2015-05-08 16:19:16', '2023-09-27 07:57:19', 16, '', 19, 'da5e6901-6958-40e5-a4f5-6822d6fe57ac', '', '', '', '', ''),
(280, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Website', 'NOT NULL', '', 27, '\"<field\\n\\ttype=\\\"url\\\"\\n\\tname=\\\"website\\\"\\n\\tlabel=\\\"Website\\\"\\n\\tsize=\\\"60\\\"\\n\\tmaxlength=\\\"150\\\"\\n\\tdescription=\\\"Enter website address\\\"\\n\\tclass=\\\"text_area\\\"\\n\\tfilter=\\\"url\\\"\\n\\tvalidated=\\\"url\\\"\\n\\tmessage=\\\"Error! Please add website here.\\\"\\n\\thint=\\\"http:\\/\\/www.example.com\\\"\\n\\tscheme=\\\"http,https\\\"\\n\\/>\"', 1, '2015-04-08 00:36:16', '2018-07-08 00:11:05', 2, '', 105, '6c3a6983-d1bf-4e5e-9e99-deea00b0cefd', '', '', '', '', ''),
(682, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add More', 'NOT NULL', '', 17, '\"<field\\n\\ttype=\\\"radio\\\"\\n\\tname=\\\"add\\\"\\n\\tlabel=\\\"Add More\\\"\\n\\tdescription=\\\"\\\"\\n\\tclass=\\\"btn-group btn-group-yesno\\\"\\n\\toption=\\\"1|Yes,0|No\\\"\\n\\tdefault=\\\"0\\\"\\n\\trequired=\\\"true\\\"\\n\\/>\"', 1, '2015-08-05 01:18:20', '2023-01-20 11:15:45', 7, '', 196, 'a66389aa-2323-4f44-8c23-ff44969639be', '', '', '', '', ''),
(1011, '', '', '', '', '', '', 'Other', '0000-00-00', '', '', 'DATE', '', '', '', 'Date of Birth', 'NOT NULL', '', 1, '\"<field\\n\\ttype=\\\"calendar\\\"\\n\\tname=\\\"dateofbirth\\\"\\n\\tlabel=\\\"Date of Birth\\\"\\n\\tdefault=\\\"1970-01-01\\\"\\n\\tdescription=\\\"Your date of birth\\\"\\n\\tformat=\\\"%Y-%m-%d\\\"\\n\\tminyear=\\\"-120\\\"\\n\\tmaxyear=\\\"-1\\\"\\n\\tfilter=\\\"STRING\\\"\\n\\ttodaybutton=\\\"false\\\"\\n\\trequired=\\\"true\\\"\\n\\/>\"', 1, '2015-12-07 01:47:32', '2018-08-03 09:56:07', 4, '', 649, 'cb2bdf20-8800-407b-a4f6-250152a0bdfb', '', '', '', '', '');

--
-- Dumping data for table `#__componentbuilder_fieldtype`
--

INSERT INTO `#__componentbuilder_fieldtype` (`id`, `description`, `name`, `properties`, `short_description`, `params`, `published`, `version`, `hits`, `ordering`, `guid`) VALUES
(1, 'The calendar form field type provides a text box for entry of a date. An icon next to the text box provides a link to a pop-up calendar, which can also be used to enter the date value. If the field has a saved value this is shown in the text box. Otherwis', 'Calendar', '{\"properties0\":{\"name\":\"type\",\"example\":\"calendar\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be calendar.\"},\"properties1\":{\"name\":\"name\",\"example\":\"date\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select a date\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"NOW\",\"adjustable\":\"1\",\"description\":\"(optional) is the default date. This must be given in the same format as specified by the format argument. You can put \\\"NOW\\\" to have current time.\"},\"properties4\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the text box.\"},\"properties5\":{\"name\":\"readonly\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is whether the text box is read-only (true or false). If the text box is read-only, the date cannot be changed, but can be selected and copied. No calendar icon will be shown.\"},\"properties6\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is whether the text box is disabled (true or false). If the text box is disabled, the date cannot be changed, selected or copied.\"},\"properties7\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties8\":{\"name\":\"format\",\"example\":\"%d-%m-%Y\",\"adjustable\":\"1\",\"description\":\"(optional) is the date format to be used. This is in the format used by PHP to specify date string formats (see below). If no format argument is given, \'%Y-%m-%d\' is assumed (giving dates like \'2008-04-16\').\"},\"properties9\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is time zone to be used. There are two values; server_utc and user_utc. The first one is server time zone and the later is user time zone as configured in global configuration and user information respectively.\"},\"properties10\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties23\":{\"name\":\"message\",\"example\":\"Error! Please add some text here.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The error message that will be displayed instead of the default message.\"},\"properties11\":{\"name\":\"size\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional)\"},\"properties12\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties13\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties14\":{\"name\":\"translateformat\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): If set to true, the calendar will use a language string to determine the format. The `format` attribute is ignored. If false, the `format` attribute is used (same behaviour as today). (starting with 3.7.0)\"},\"properties15\":{\"name\":\"showtime\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): If set to true and translateformat is true, the language key DATE_FORMAT_CALENDAR_DATETIME is used, otherwise DATE_FORMAT_CALENDAR_DATE. (starting with 3.7.0)\"},\"properties16\":{\"name\":\"timeformat\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): can be set to 12 (and specify AM or PM) or 24 (starting with 3.7.0)\"},\"properties17\":{\"name\":\"singleheader\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): if set to false, the year and the month selection will be set on two separates lines, with independant selection (starting with 3.7.0)\"},\"properties18\":{\"name\":\"todaybutton\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): if set to true, a button is added at the bottom of the datePicker to select the date of the current day (starting with 3.7.0)\"},\"properties19\":{\"name\":\"weeknumbers\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): if set to true, a column is added at the left of the datePicker to display the number of the week in the current year (starting with 3.7.0)\"},\"properties20\":{\"name\":\"filltable\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): if set to true, dates of the previous and next month is added at the top and the bottom of the current month to fill the grid (starting with 3.7.0)\"},\"properties21\":{\"name\":\"minyear\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): set a signed integer for a number of years (-10, -2, 0, 7, 12, ...) to define the relative lower limit for the year selection. The user could not select a year before your limit (starting with 3.7.0)\"},\"properties22\":{\"name\":\"maxyear\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional): set a signed integer for a number of years (-10, -2, 0, 7, 12, ...) to define the relative upper limit for the year selection. The user could not select a year after your limit (starting with 3.7.0)\"}}', 'provides a text box for entry of a date. An icon next to the text box provides a link to a pop-up calendar, which can also be used to enter the date value.', '', 1, 9, '', '', '6cf5a33f-cb25-4a58-bfec-7e1511896402'),
(2, 'The category form field type provides a drop down list of all published categories for a certain extension. If the parameter has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected. If the show_root', 'Category', '{\"properties0\":{\"name\":\"type\",\"example\":\"category\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be category.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mycategory\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select a category\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"extension\",\"example\":\"com_content\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the name of the extension for which the categories will be retrieved. For example, to list content categories, use the value \'com_content\'. You can add also target one view, use the value \'com_component.view\'.\"},\"properties4\":{\"name\":\"scope\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is an alias for extension.\"},\"properties5\":{\"name\":\"required\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties6\":{\"name\":\"show_root\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) is whether a choice representing the root category will be shown. Remove completely if it is not to be shown.\"},\"properties7\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default category ID number.\"},\"properties8\":{\"name\":\"description\",\"example\":\"select one of the following categories\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties9\":{\"name\":\"class\",\"example\":\"inputbox\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties10\":{\"name\":\"published\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) (1\\/0\\/2\\/-2) is whether the drop down will show only published (1), unpublished (0), archived (2) or trashed (-2) categories. It is possible to combine different publishing status by entering the list of the corresponding numbers separated by comma (e.g. \\\"0,2,-2\\\" will display only unpublished, archived and trashed categories in the drop-down).\"},\"properties11\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties12\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides a drop down list of categories for an extension.', '', 1, 13, '', '', 'f70346b3-2096-4f44-8b26-01ab87da7d1e'),
(3, 'The checkbox form field type provides a single checkbox. If the parameter has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Checkbox', '{\"properties0\":{\"name\":\"type\",\"example\":\"checkbox\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be checkbox\"},\"properties1\":{\"name\":\"name\",\"example\":\"show_title\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Show title\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"value\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) is the value of the parameter if this checkbox is set (usually 1).\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default value (usually 0 or 1).\"},\"properties5\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties6\":{\"name\":\"description\",\"example\":\"Show the title of the item\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the label.\"},\"properties7\":{\"name\":\"class\",\"example\":\"inputbox\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties8\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties9\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (JavaScript use)\"}}', 'provides a single checkbox to be checked or unchecked', '', 1, 7, '', '', '10066262-b6e3-4f82-941e-cbe4f61ddd6c'),
(4, 'The checkboxes form field type provides a set of checkboxes. Note: unlike most standard form field types, such as textfield or checkbox, this field is not an \"out of the box\" solution. It will create checkboxes for you, and submit their values in form of ', 'Checkboxes', '{\"properties0\":{\"name\":\"type\",\"example\":\"checkboxes\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be checkboxs\"},\"properties1\":{\"name\":\"name\",\"example\":\"toppings\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select Toppings\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"option\",\"example\":\"anch|Anchovies,chor|Chorizo,on|Onions,mush|Mushrooms\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default value.\"},\"properties5\":{\"name\":\"description\",\"example\":\"Select the topping of your choice\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the label.\"},\"properties6\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties7\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties8\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides unlimited checkboxes that can be used for multi-select.', '', 1, 4, '', '', 'ac10859b-58da-4584-9682-36a6c2c8d04d'),
(5, 'Provides a color picker. Enter the color as #ff00ff or pick it from the palet.', 'Color', '{\"properties0\":{\"name\":\"type\",\"example\":\"color\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be color.\"},\"properties1\":{\"name\":\"name\",\"example\":\"backgroundcolor\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"default\",\"example\":\"#FFFFFF\",\"adjustable\":\"1\",\"description\":\"(optional) provides a color when not set.\"},\"properties3\":{\"name\":\"label\",\"example\":\"Background\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties4\":{\"name\":\"description\",\"example\":\"Select the background color here.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) tooltip for the form field.\"},\"properties5\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties6\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides a color picker when clicking the input box.', '', 1, 5, '', '', '7f60f198-53e7-4fe9-813f-d1b6c553680e'),
(6, 'The list form field type provides a drop down list or a list box of other current component table entries. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Custom', '{\"properties0\":{\"name\":\"type\",\"example\":\"subjects\",\"mandatory\":\"1\",\"description\":\"(mandatory) can be anything, just not the same as any other default Joomla field type. You can also not use the \\\"_\\\" (underscore) or \\\"-\\\" (hyphen) in the type name, and no spaces.\"},\"properties1\":{\"name\":\"name\",\"example\":\"subject\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select a Subject\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"list_class\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties24\":{\"name\":\"layout\",\"example\":\"joomla.form.field.list-fancy-select\",\"adjustable\":\"1\",\"description\":\"(optional) New layout field added in Joomla 4\"},\"properties6\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties7\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties8\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties9\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties10\":{\"name\":\"readonly\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties11\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties12\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties13\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"},\"properties14\":{\"name\":\"extends\",\"example\":\"list\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The JFormField sub class that should be extended. The options are (\'list\',\'radio\',\'checkboxes\')\"},\"properties15\":{\"name\":\"button\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) to add new button next to field in edit view\"},\"properties16\":{\"name\":\"table\",\"example\":\"#__###component###_subject\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The table being linked to. The ###TABLE### placeholder holds the table in the php.\"},\"properties17\":{\"name\":\"component\",\"example\":\"com_###component###\",\"mandatory\":\"1\",\"description\":\"(mandatory) The name of the component where this table is found. Must be com_users\"},\"properties18\":{\"name\":\"view\",\"example\":\"subject\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The single view name if the place this field is added.\"},\"properties19\":{\"name\":\"views\",\"example\":\"subjects\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The list view name if the place this field is added.\"},\"properties20\":{\"name\":\"value_field\",\"example\":\"name\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The name of the text field in table linked to. The ###TEXT### placeholder holds the value_field in the php.\"},\"properties21\":{\"name\":\"key_field\",\"example\":\"id\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The field from the linked table to save in this table as the unique key. The ###ID### placeholder holds the key_field in the php.\"},\"properties22\":{\"name\":\"prime_php\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"This field makes sure that the PHP used here is used to build the field type, and other are custom fields with the same field type are ignored. So to avoid that they over write the PHP added here. You should only have one prime per\\/type. To disable remove the field or set to 0\"},\"properties23\":{\"name\":\"type_php_1\",\"example\":\"\\/\\/ Get the user object.\\r\\n\\t\\t$user = Factory::getUser();\\r\\n\\t\\t\\/\\/ Get the databse object.\\r\\n\\t\\t$db = Factory::getDBO();\\r\\n\\t\\t$query = $db->getQuery(true);\\r\\n\\t\\t$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\r\\n\\t\\t$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\r\\n\\t\\t$query->where($db->quoteName(\'a.published\') . \' = 1\');\\r\\n\\t\\t$query->order(\'a.###TEXT### ASC\');\\r\\n\\t\\t\\/\\/ Implement View Level Access (if set in table)\\r\\n\\t\\tif (!$user->authorise(\'core.options\', \'[[[com_component]]]\'))\\r\\n\\t\\t{\\r\\n\\t\\t\\t$columns = $db->getTableColumns(\'###TABLE###\');\\r\\n\\t\\t\\tif(isset($columns[\'access\']))\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\t$groups = implode(\',\', $user->getAuthorisedViewLevels());\\r\\n\\t\\t\\t\\t$query->where(\'a.access IN (\' . $groups . \')\');\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\t$db->setQuery((string)$query);\\r\\n\\t\\t$items = $db->loadObjectList();\\r\\n\\t\\t$options = [];\\r\\n\\t\\tif ($items)\\r\\n\\t\\t{\\r\\n\\t\\t\\tif ($this->multiple === false)\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\t$options[] = Html::_(\'select.option\', \'\', Text::_(\'Select an option\'));\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tforeach($items as $item)\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\t$options[] = Html::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn $options;\",\"adjustable\":\"1\",\"description\":\"The php for the getOptions method.\"}}', 'provides a drop down list of items entries.', '', 1, 30, '', '', 'dd2e1f4b-f5db-45e8-85fa-efd27bae7b6a'),
(7, 'The a list of users that can be targeting one or more groups and excluded users that already belongs to an item in a view.', 'CustomUser', '{\"properties0\":{\"name\":\"type\",\"example\":\"staffusers\",\"mandatory\":\"1\",\"description\":\"(mandatory) can be anything, just not the same as any other default Joomla field type.\"},\"properties1\":{\"name\":\"name\",\"example\":\"staff\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Staff\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties5\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties6\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties7\":{\"name\":\"readonly\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties8\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties9\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"\"},\"properties10\":{\"name\":\"hint\",\"example\":\"select a user\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties12\":{\"name\":\"extends\",\"example\":\"user\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The JFormField sub class that should be extended. The options are (\'list\',\'radio\',\'checkboxes\')\"},\"properties13\":{\"name\":\"table\",\"example\":\"#__users\",\"mandatory\":\"1\",\"description\":\"(mandatory) The table being linked to. Must be #__users\"},\"properties14\":{\"name\":\"component\",\"example\":\"com_users\",\"mandatory\":\"1\",\"description\":\"(mandatory) The name of the component where this table is found. Must be com_users\"},\"properties15\":{\"name\":\"view\",\"example\":\"###view###\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The single view name if the place this field is added.\"},\"properties16\":{\"name\":\"views\",\"example\":\"###views###\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The list view name if the place this field is added.\"},\"properties17\":{\"name\":\"value_field\",\"example\":\"name\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The name of the text field in table linked to.\"},\"properties18\":{\"name\":\"key_field\",\"example\":\"id\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The field from the linked table to save in this table as the unique key.\"},\"properties19\":{\"name\":\"type_php_1\",\"example\":\"\\t\\t\\/\\/ set the groups array\\r\\n\\t\\treturn ComponentHelper::getParams(\'com_###component###\')->get(\'###type###\');\",\"adjustable\":\"1\",\"description\":\"The php for the getGroups method.\"},\"properties22\":{\"name\":\"type_phpx_1\",\"example\":\"\\t\\t\\/\\/ To ensure that there is only one record per user\\r\\n\\t\\t\\/\\/ Get a db connection.\\r\\n\\t\\t$db = Factory::getDbo();\\r\\n\\t\\t\\/\\/ Create a new query object.\\r\\n\\t\\t$query = $db->getQuery(true);\\r\\n\\t\\t\\/\\/ Select all records from the #__###component###_###view### table from ###CODE### column\\\".\\r\\n\\t\\t$query->select($db->quoteName(\'###CODE###\'));\\r\\n\\t\\t$query->from($db->quoteName(\'#__###component###_###view###\'));\\r\\n\\t\\t$db->setQuery($query);\\r\\n\\t\\t$db->execute();\\r\\n\\t\\t$found = $db->getNumRows();\\r\\n\\t\\tif ($found)\\r\\n\\t\\t{\\r\\n\\t\\t\\t\\/\\/ return all users already used\\r\\n\\t\\t\\treturn array_unique($db->loadColumn());\\r\\n\\t\\t}\\r\\n\\t\\treturn null;\",\"adjustable\":\"1\",\"description\":\"The php for the getExcluded method.\"}}', 'Provides list of users.', '', 1, 6, '', '', 'a4a39f70-070f-459c-be4b-0ac103a29b9a'),
(8, 'The Editor field type provides a WYSIWYG editor.', 'Editor', '{\"properties0\":{\"name\":\"type\",\"example\":\"editor\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be editor.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mytextblock\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Test Field\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"Some text\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties4\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the label.\"},\"properties5\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties6\":{\"name\":\"width\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) defines the width (in pixels) of the wysiwyg editor and defaults to 100%.\"},\"properties7\":{\"name\":\"height\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) defines the height (in pixels) of the wysiwyg editor and defaults to 250px.\"},\"properties8\":{\"name\":\"cols\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) defines the width of the editor (in columns).\"},\"properties9\":{\"name\":\"rows\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) defines the height of the editor (in rows).\"},\"properties10\":{\"name\":\"buttons\",\"example\":\"no\",\"adjustable\":\"1\",\"description\":\"(optional) can be an array of plugin buttons to be excluded or set to false. The default editors-xtd are: article, image, pagebreak and readmore.\"},\"properties11\":{\"name\":\"syntax\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) can be used to set the code syntax matching for this field.\"},\"properties12\":{\"name\":\"hide\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) array of plugin buttons to be hidden. eg... set buttons=\\\"true\\\" hide=\\\"readmore,pagebreak\\\"\"},\"properties13\":{\"name\":\"editor\",\"example\":\"codemirror|none\",\"adjustable\":\"1\",\"description\":\"specifies the editor to be used and can include two options (editor=\\\"desired|alternative\\\")\"},\"properties14\":{\"name\":\"filter\",\"example\":\"safehtml\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties15\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties16\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties17\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides an editor area field.', '', 1, 11, '', '', '51f288d2-6eaa-42bc-a182-a6f69b3032b8'),
(9, 'The hidden form field type provides a hidden field for saving a field whose value cannot be altered directly by a user in the Administrator (it can be altered in code or by editing the params.ini file). If the parameter has a saved value this is entered i', 'Hidden', '{\"properties0\":{\"name\":\"type\",\"example\":\"hidden\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be hidden.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mysecretvariable\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"default\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the data which needs to be collected.\"},\"properties5\":{\"name\":\"filter\",\"example\":\"STRING\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties4\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"}}', 'provides a hidden field for saving a form field whose value cannot be altered directly by a user.', '', 1, 2, '', '', '82f1b5ca-bb9b-44d7-9a7a-9a03fb2a31dd'),
(10, 'The integer form field type provides a select box with a range of integer values. If the field has a value saved, this value is displayed when the page is first loaded. If not, the default value (if any) is selected.', 'Integer', '{\"properties0\":{\"name\":\"type\",\"example\":\"integer\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be integer.\"},\"properties1\":{\"name\":\"name\",\"example\":\"size\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Size\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default value.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties6\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties7\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties8\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties9\":{\"name\":\"first\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) this value is the lowest on the list.\"},\"properties10\":{\"name\":\"last\",\"example\":\"20\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) this value is the highest on the list.\"},\"properties11\":{\"name\":\"step\",\"example\":\"5\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) each option will be the previous option incremented by this integer, starting with the first value until the last value is reached.\"},\"properties12\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties13\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a drop down list of integers between a minimum and maximum.', '', 1, 6, '', '', 'fdbb50ea-35d2-45b2-a0bc-076fdf1544b8'),
(11, 'The list form field type provides a drop down list or a list box of custom-defined entries. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'List', '{\"properties0\":{\"name\":\"type\",\"example\":\"list\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be list.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mylist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an option\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"list_class\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties6\":{\"name\":\"layout\",\"example\":\"joomla.form.field.list-fancy-select\",\"adjustable\":\"1\",\"description\":\"(optional) New layout field added in Joomla 4\"},\"properties7\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties8\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) filter options\"},\"properties9\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties10\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties11\":{\"name\":\"option\",\"example\":\"0|Option 1,1|Option 2,2|Option 1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties12\":{\"name\":\"useglobal\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional)  if set to true, it will show the value that is set in the global configuration if found in the database.\"},\"properties13\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default list item value.\"},\"properties14\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties15\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a drop down list of custom-defined entries.', '', 1, 12, '', '', 'a51dfc06-1b9b-4d0a-86ba-f705bcd40d4d'),
(12, 'The media form field type provides modal access to the media manager for the choice of an image. Users with appropriate permissions will be able to upload files.', 'Media', '{\"properties0\":{\"name\":\"type\",\"example\":\"media\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be media.\"},\"properties1\":{\"name\":\"name\",\"example\":\"media\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Media\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"directory\",\"example\":\"\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the directory from which the user will be able to choose a file. This attribute should be relative to the top level \\/images\\/ folder.\"},\"properties5\":{\"name\":\"preview\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) shows or hides the preview of the currently chosen image. (\\\"true\\\": Show always, \\\"tooltip\\\": Show as tooltip, \\\"false\\\": Show never) (since Joomla! 2.5.5)\"},\"properties6\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties7\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides modal access to the media manager for insertion of images with upload for users with appropriate permissions.', '', 1, 5, '', '', '69957007-e3d4-4976-a32b-611d02dbad71'),
(13, 'Provides a meter to show value in a range, updated with jQuery if needed or simply a fixed value.', 'Meter', '{\"properties0\":{\"name\":\"type\",\"example\":\"meter\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be meter.\"},\"properties1\":{\"name\":\"name\",\"example\":\"meter\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Meter\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"width\",\"example\":\"330px\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of meter box\"},\"properties4\":{\"name\":\"color\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The background color\"},\"properties5\":{\"name\":\"default\",\"example\":\"9\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"animated\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) lets the bar have strips\"},\"properties7\":{\"name\":\"active\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) lets the strips on the bar move\"},\"properties8\":{\"name\":\"description\",\"example\":\"Enter some description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties9\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties10\":{\"name\":\"min\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(mandatory) this value is the min on the meter.\"},\"properties11\":{\"name\":\"max\",\"example\":\"20\",\"adjustable\":\"1\",\"description\":\"(mandatory) this value is the max on meter.\"},\"properties12\":{\"name\":\"step\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) each option will be the previous option incremented by this integer, starting with the first value until the last value is reached.\"},\"properties13\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a meter to show value in a range.', '', 1, 3, '', '', '81668284-e572-4e17-927b-ba697fc64bd0'),
(14, 'This form field makes it possible to create titles, texts, descriptions and even alert boxes. It also allows you to bring order in the settings for extensions, by separating them with useful titles. Or adding descriptions for certain settings (without having to rely on the tooltips). Or adding any other text you want.', 'Note', '{\"properties0\":{\"name\":\"type\",\"example\":\"note\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be note\"},\"properties1\":{\"name\":\"name\",\"example\":\"note_one\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"The notice\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory or optional if using description) (translatable) is the descriptive title of the note \"},\"properties3\":{\"name\":\"description\",\"example\":\"The notice description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional if using label)(translatable) the description\\/text of the note \"},\"properties4\":{\"name\":\"heading\",\"example\":\"h4\",\"adjustable\":\"1\",\"description\":\"(optional) the type of heading element to use for the label (default: h4)\"},\"properties5\":{\"name\":\"class\",\"example\":\"alert\",\"adjustable\":\"1\",\"description\":\"(optional) a class name (or class names), like these examples ( alert, alert alert-info, alert alert-success, alert alert-error )\"},\"properties6\":{\"name\":\"close\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) a value of \'true\' (for alerts) or the value for the data-dismiss of the bootstrap close icon\"},\"properties7\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'supports a one line text field.', '', 1, 5, '', '', 'f9ecacd0-8481-4157-8c71-d7aaefc2b7c3'),
(15, 'Provides a one line text box with up-down handles to set a number in the field.', 'Number', '{\"properties0\":{\"name\":\"type\",\"example\":\"number\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be number.\"},\"properties1\":{\"name\":\"name\",\"example\":\"number\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Number\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default value.\"},\"properties4\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties5\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties6\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties7\":{\"name\":\"min\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) this value is the lowest on the list.\"},\"properties8\":{\"name\":\"max\",\"example\":\"40\",\"mandatory\":\"1\",\"description\":\"(mandatory) this value is the highest on the list.\"},\"properties9\":{\"name\":\"step\",\"example\":\"5\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) each option will be the previous option incremented by this integer, starting with the first value until the last value is reached.\"},\"properties10\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Javascript that should run on changing of the value.\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a one line text box with up-down handles to set a number in the field.', '', 1, 4, '', '', '5abd2b73-643b-4273-841a-787991aad968'),
(16, 'The password form field type provides a text box for entry of a password. The password characters will be obscured as they are entered. If the field has a saved value this is entered (in obscured form) into the text box. If not, the default value (if any)', 'Password', '{\"properties0\":{\"name\":\"type\",\"example\":\"password\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be password.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mypassword\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Enter A Password\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"size\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties4\":{\"name\":\"default\",\"example\":\"secret\",\"adjustable\":\"1\",\"description\":\"(optional) is the default password.\"},\"properties5\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties6\":{\"name\":\"message\",\"example\":\"Error! Please add password here.\",\"adjustable\":\"1\",\"description\":\"(optional) The error message that will be displayed instead of the default message.\"},\"properties7\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties8\":{\"name\":\"readonly\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties10\":{\"name\":\"required\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties11\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties12\":{\"name\":\"field\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) used in validation of \\\"equals\\\" to link the field to match.\"},\"properties13\":{\"name\":\"filter\",\"example\":\"raw\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties14\":{\"name\":\"hint\",\"example\":\"Password Here\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The placeholder to display inside the text box.\"},\"properties15\":{\"name\":\"autocomplete\",\"example\":\"off\",\"adjustable\":\"1\",\"description\":\"(optional) The autocomplete state for the form field.  If \'off\' element will not be automatically completed by browser.\"},\"properties16\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties17\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a text box for entry of a password. The password characters will be obscured as they are entered.', '', 1, 10, '', '', '0022598d-0ee1-44f2-aa94-c2eb47595f73'),
(17, 'The radio form field type provides radio buttons to select different options. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Radio', '{\"properties0\":{\"name\":\"type\",\"example\":\"radio\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be radio.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myradiovalue\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an option\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"class\",\"example\":\"btn-group btn-group-yesno\",\"adjustable\":\"1\",\"description\":\"(optional) New in Joomla 3, if set to class=\\\"btn-group btn-group-yesno\\\" will show the nice coloured buttons\"},\"properties5\":{\"name\":\"option\",\"example\":\"1|Yes,0|No\",\"adjustable\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties6\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default radio button item value.\"},\"properties7\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties8\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties9\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties10\":{\"name\":\"readonly\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties11\":{\"name\":\"disabled\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties12\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties13\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides radio buttons to select different options.', '', 1, 18, '', '', 'b868ed59-4208-4206-8504-95a35a74a11c'),
(18, 'Provides a horizontal scroll bar to specify a value in a range.', 'Range', '{\"properties0\":{\"name\":\"type\",\"example\":\"range\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be range.\"},\"properties1\":{\"name\":\"name\",\"example\":\"range\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Range\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"9\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties4\":{\"name\":\"description\",\"example\":\"Enter some description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties5\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties6\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties7\":{\"name\":\"min\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(mandatory) this value is the min on the meter.\"},\"properties8\":{\"name\":\"max\",\"example\":\"20\",\"adjustable\":\"1\",\"description\":\"(mandatory) this value is the max on meter.\"},\"properties9\":{\"name\":\"step\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) each option will be the previous option incremented by this integer, starting with the first value until the last value is reached.\"},\"properties10\":{\"name\":\"required\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties11\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties12\":{\"name\":\"onchange\",\"example\":\"jQuery(\'#jform_range\').closest(\'.controls\').find(\'span\').remove(); var value = jQuery(\'#jform_range\').val();jQuery(\'#jform_range\').closest(\'.controls\').append(\' \'+value+\'\');\",\"adjustable\":\"1\",\"description\":\"(optional) javascript to run when the range is changed\"},\"properties13\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a horizontal scroll bar to specify a value in a range.', '', 1, 5, '', '', '627d3845-7273-4f75-8e63-7b3a319a42c8'),
(19, 'Provides a modal with rows of formfields that you specify. As many options can be added as desired. Note this form field has a jQuery based javascript file as a dependency.', 'Repeatable', '{\"properties0\":{\"name\":\"type\",\"example\":\"repeatable\",\"adjustable\":\"1\",\"description\":\"(mandatory) must be repeatable.\"},\"properties1\":{\"name\":\"name\",\"example\":\"repeatable_list\",\"adjustable\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter\"},\"properties2\":{\"name\":\"label\",\"example\":\"The Repeatable List\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) description text for the form field. Displays at the top of the modal with the name as well as in the usual position in the form\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The default value for the form field if the field is left empty. Note this has to be a json string compatible with the contents of the form field.\"},\"properties5\":{\"name\":\"id\",\"example\":\"aid\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) id of the hidden from field. (the modal will have this id with an added suffix of \\\"_modal\\\" and the table within the modal will have this id with a suffix of _modal_table\\\")\"},\"properties6\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) class of the table.\"},\"properties7\":{\"name\":\"select\",\"example\":\"Click here\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) The text to show on the modal button.\"},\"properties8\":{\"name\":\"icon\",\"example\":\"list\",\"adjustable\":\"1\",\"description\":\"(optional) The icon to show on the select button (is prefixed with \\\"icon-\\\").\"},\"properties9\":{\"name\":\"maximum\",\"example\":\"50\",\"adjustable\":\"1\",\"description\":\"(optional) The maximum number of rows of fields allowed (by default 999 to be effectively infinite)\"},\"properties10\":{\"name\":\"fields\",\"example\":\"1,2,3\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The fields to add to the modal. All fields must first be created in component builder as a field before you can add them here, since you must use the id of the field. Separate the field ids with commas. Do not add custom fields that are not also used in this component.\"},\"properties11\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Use only if you would like to save raw data, since the default is best.\"},\"properties12\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Allows form fields which can have as many options as the user desires.', '', 1, 5, '', '', '05bf68d4-52f9-4705-8ae7-cba137fce0ad'),
(20, 'The spacer form field type provides a visual separator between parameter field elements. It is purely a visual aid and no field value is stored.', 'Spacer', '{\"properties0\":{\"name\":\"type\",\"example\":\"spacer\",\"adjustable\":\"0\",\"mandatory\":\"1\",\"translatable\":\"0\",\"description\":\"(mandatory) must be spacer.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myspacer\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"0\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"The notice\",\"adjustable\":\"1\",\"mandatory\":\"0\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is the text to use as a spacer.\"},\"properties3\":{\"name\":\"description\",\"example\":\"The notice description\",\"adjustable\":\"1\",\"mandatory\":\"0\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"hr\",\"example\":\"\",\"adjustable\":\"1\",\"mandatory\":\"0\",\"translatable\":\"0\",\"description\":\"(optional) is whether to display a horizontal rule (\'true\' or \'false\'). If this attribute is \'true\', the label attribute will be ignored.\"},\"properties5\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"mandatory\":\"0\",\"translatable\":\"0\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"}}', 'provides a visual separator between form fields. It is purely a visual aid and no value is stored.', '', 1, 1, '', '', '626d0cba-a908-4a4f-a447-96d781aeaa0b'),
(21, 'Using this generic form field type forces you to write SQL in an XML file and is rather limited. For more flexibility, consider using Custom FieldType.\r\n\r\nThe sql form field type provides a drop down list of entries obtained by running a query on the Joom', 'SQL', '{\"properties0\":{\"name\":\"type\",\"example\":\"sql\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be sql.\"},\"properties1\":{\"name\":\"name\",\"example\":\"title\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field. This must match the name of the query results column that contains the values that will be shown to the user in the drop-down list, unless a different name is specified in the value_field attribute.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an article\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"query\",\"example\":\"SELECT id, concat( title, \' (\', created, \')\') AS title FROM #__content\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the SQL query which will provide the data for the drop-down list. The query must return two columns; one called \'value\' (unless overridden by the key_field attribute) which will hold the values of the list items; the other called the same as the value of the name attribute (unless overridden by the value_field attribute) containing the text to be shown in the drop-down list.\"},\"properties4\":{\"name\":\"default\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the default value. This is the value of the \'value\' field, unless overridden by the key_field attribute.\"},\"properties5\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties6\":{\"name\":\"readonly\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties7\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties8\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties9\":{\"name\":\"key_field\",\"example\":\"id\",\"adjustable\":\"1\",\"description\":\"(optional) is the name of the column that will contain values for the parameter. If omitted then the column called \'value\' will be used, if it exists.\"},\"properties10\":{\"name\":\"value_field\",\"example\":\"title\",\"adjustable\":\"1\",\"description\":\"(optional) is the name of the column that will contain values to be shown to the user in the drop-down list. If omitted then the column with the same name as the name attribute will be used, if it exists.\"},\"properties11\":{\"name\":\"translate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) will translate the output of the value_field if set to true. It defaults to false.\"},\"properties12\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides a drop down list of entries obtained by running a query on the Joomla Database. The first results column returned by the query provides the values for the drop down box.', '', 1, 3, '', '', 'd4c16f1e-fd6e-4714-90eb-f9d97edd9c32'),
(22, 'The Tag field type provides a point where you can enter tags - this is either AJAX or nested.', 'Tag', '{\"properties0\":{\"name\":\"type\",\"example\":\"tag\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be tag.\"},\"properties1\":{\"name\":\"name\",\"example\":\"tags\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"mode\",\"example\":\"ajax\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the way the tags will be loaded, the options are ( ajax or nested )\"},\"properties3\":{\"name\":\"label\",\"example\":\"Tags\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties4\":{\"name\":\"description\",\"example\":\"Assign tags to ###VIEW### items. Tag names must be unique.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is the description of the field.\"},\"properties5\":{\"name\":\"id\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the id to add to the field. Note if none is set this will be the name of the field.\"},\"properties6\":{\"name\":\"class\",\"example\":\"inputbox small\",\"adjustable\":\"1\",\"description\":\"(optional) is the class to add to the field.\"},\"properties7\":{\"name\":\"published\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) determines if non published tags should be allowed.\"},\"properties8\":{\"name\":\"language\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is language to filter the existing tags by.\"},\"properties9\":{\"name\":\"multiple\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) is the ability to add more than 1 tag to the form field.\"},\"properties10\":{\"name\":\"custom\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) if the ajax mode is chosen setting this to [deny] will prevent users from adding in new tags.\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides an entry point for tags (either AJAX or Nested).', '', 1, 3, '', '', '48cba89e-8fcb-481e-a7d3-2e41773e452d'),
(23, 'The tel field type is an alias for a text field. Telephone numbers can be validated using the tel rule and filtered using the tel input filter.', 'Tel', '{\"properties0\":{\"name\":\"type\",\"example\":\"text\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be text.\"},\"properties1\":{\"name\":\"name\",\"example\":\"phone\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Phone\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"size\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties4\":{\"name\":\"maxlength\",\"example\":\"50\",\"adjustable\":\"1\",\"description\":\"(optional) limits the number of characters that may be entered.\"},\"properties5\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"description\",\"example\":\"Enter phone number\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties7\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties8\":{\"name\":\"readonly\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties10\":{\"name\":\"required\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties11\":{\"name\":\"filter\",\"example\":\"tel\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties12\":{\"name\":\"validated\",\"example\":\"tel\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to validated the input data.\"},\"properties13\":{\"name\":\"message\",\"example\":\"Error! Please add phone number here.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The error message that will be displayed instead of the default message.\"},\"properties14\":{\"name\":\"hint\",\"example\":\"Your Phone Number\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The placeholder to display inside the text box.\"},\"properties15\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties16\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides an input field for a telephone number.', '', 1, 6, '', '', '1c6c519c-3bc8-4914-8940-3e9591b0bce6'),
(24, 'The text form field type provides a text box for data entry. If the field has a value saved, this value is displayed when the page is first loaded. If not, the default value (if any) is selected.', 'Text', '{\"properties0\":{\"name\":\"type\",\"example\":\"text\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be text.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mytextvalue\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Enter some text\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"size\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties4\":{\"name\":\"maxlength\",\"example\":\"50\",\"adjustable\":\"1\",\"description\":\"(optional) limits the number of characters that may be entered.\"},\"properties5\":{\"name\":\"default\",\"example\":\"Some text\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"description\",\"example\":\"Enter some description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties7\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties8\":{\"name\":\"readonly\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties10\":{\"name\":\"required\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties11\":{\"name\":\"filter\",\"example\":\"STRING\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties12\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties13\":{\"name\":\"field\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) used in validation of \\\"equals\\\" to link the field to match.\"},\"properties14\":{\"name\":\"message\",\"example\":\"Error! Please add some text here.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The error message that will be displayed instead of the default message.\"},\"properties15\":{\"name\":\"hint\",\"example\":\"Your Name Here\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The placeholder to display inside the text box.\"},\"properties16\":{\"name\":\"autocomplete\",\"example\":\"on\",\"adjustable\":\"1\",\"description\":\"(optional) The autocomplete state for the form field.  If \'off\' element will not be automatically completed by browser.\"},\"properties17\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties18\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a text box for data entry.', '', 1, 10, '', '', '201327fe-3067-4316-a155-3fe2a52e05c0'),
(25, 'The textarea form field type provides a text area for entry of multi-line text. If the field has a value saved, this value is displayed when the page is first loaded. If not, the default value (if any) is selected.', 'Textarea', '{\"properties0\":{\"name\":\"type\",\"example\":\"textarea\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be textarea.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mytextarea\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Enter some text\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"rows\",\"example\":\"10\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the height of the visible text area in lines. If omitted the width is determined by the browser. The value of rows does not limit the number of lines that may be entered.\"},\"properties4\":{\"name\":\"cols\",\"example\":\"5\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the width of the visible text area in characters. If omitted the width is determined by the browser. The value of cols does not limit the number of characters that may be entered.\"},\"properties5\":{\"name\":\"default\",\"example\":\"default text\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"description\",\"example\":\"Text Area\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the label.\"},\"properties7\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties8\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties9\":{\"name\":\"filter\",\"example\":\"raw\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties10\":{\"name\":\"hint\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The placeholder to display inside the textarea.\"},\"properties11\":{\"name\":\"required\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties12\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties13\":{\"name\":\"readonly\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties14\":{\"name\":\"disabled\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties15\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties16\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a text area for entry of multi-line text.', '', 1, 9, '', '', '76fe1250-6fa7-49e5-a0ee-f06d8d4c9f99'),
(26, 'The timezones form field type provides a drop down list of time zones. If the field has a value saved, this value is displayed when the page is first loaded. If not, the default value (if any) is selected.', 'Timezone', '{\"properties0\":{\"name\":\"type\",\"example\":\"timezone\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be timezone.\"},\"properties1\":{\"name\":\"name\",\"example\":\"timezone\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Timezone\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default time zone. For example, use \'-10\' for \'(UTC -10:00) Hawaii\'.\"},\"properties4\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties5\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides a drop down list of time zones.', '', 1, 3, '', '', 'ed8d8cf4-cb05-49cc-95ef-4ef275f539f9'),
(27, 'This field essentially is a text field with the type of url. If a fully qualified url (that is one with a scheme and domain such as http://example.com) is entered and it uses idn (that is uses characters that are non ascii such as ê or Ψ) it will translat', 'URL', '{\"properties0\":{\"name\":\"type\",\"example\":\"url\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be url.\"},\"properties1\":{\"name\":\"name\",\"example\":\"website\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Website\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"size\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties4\":{\"name\":\"maxlength\",\"example\":\"50\",\"adjustable\":\"1\",\"description\":\"(optional) limits the number of characters that may be entered.\"},\"properties5\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"description\",\"example\":\"Enter website address\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties7\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties8\":{\"name\":\"readonly\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties10\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties11\":{\"name\":\"relative\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) set to true for relative URLs\"},\"properties12\":{\"name\":\"filter\",\"example\":\"url\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties13\":{\"name\":\"validated\",\"example\":\"url\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties14\":{\"name\":\"scheme\",\"example\":\"http,https,mailto\",\"adjustable\":\"1\",\"description\":\"(optional) Validates that the value is a URL with a valid scheme (which can be restricted by the optional comma-separated field \'scheme\'), and passes a basic syntax check.\"},\"properties15\":{\"name\":\"message\",\"example\":\"Error! Please add website here.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties16\":{\"name\":\"hint\",\"example\":\"Your Website Here\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The placeholder to display inside the text box.\"},\"properties19\":{\"name\":\"autocomplete\",\"example\":\"on\",\"adjustable\":\"1\",\"description\":\"(optional) The autocomplete state for the form field.  If \'off\' element will not be automatically completed by browser.\"},\"properties17\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties18\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a URL text input field.', '', 1, 10, '', '', '8df6e07e-2b16-43ed-a18d-2059fa44cdf1'),
(28, 'The user form field type provides a modal select box of users.', 'User', '{\"properties0\":{\"name\":\"type\",\"example\":\"user\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be user.\"},\"properties1\":{\"name\":\"name\",\"example\":\"user\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field. This must match the name of the query results column that contains the values that will be shown to the user in the drop-down list, unless a different name is specified in the value_field attribute.\"},\"properties2\":{\"name\":\"label\",\"example\":\"User\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties5\":{\"name\":\"size\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties6\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties7\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides a modal list of users.', '', 1, 4, '', '', 'b0641980-5e78-42f6-972f-86aa607db23e'),
(29, 'The usergroup form field type provides a modal select box of user groups.', 'Usergrouplist', '{\"properties0\":{\"name\":\"type\",\"example\":\"usergrouplist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be usergroup.\"},\"properties1\":{\"name\":\"name\",\"example\":\"usergroup\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field. This must match the name of the query results column that contains the values that will be shown to the user in the drop-down list, unless a different name is specified in the value_field attribute.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Group\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Select a group\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties9\":{\"name\":\"layout\",\"example\":\"joomla.form.field.list-fancy-select\",\"adjustable\":\"1\",\"description\":\"(optional) (translatable) is the layout, for example joomla.form.field.list-fancy-select.\"},\"properties5\":{\"name\":\"size\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties6\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the field required true if yes.\"},\"properties10\":{\"name\":\"checksuperusergroup\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) is boolean to omit Super User groups. Values 1 or 0.\"},\"properties7\":{\"name\":\"multiple\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) If set to multiple then allows more than one usergroup to be selected.\"},\"properties8\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides a drop down list of user groups.', '', 1, 5, '', '', 'e2f31181-fbb3-4c3a-859d-72b6b0cff308'),
(30, 'The filelist form field type provides a drop down list of files from a specified directory. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.\r\n\r\nBy default, the first item on the', 'Filelist', '{\"properties0\":{\"name\":\"type\",\"example\":\"filelist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be filelist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myfile\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select a file\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"directory\",\"example\":\"images\\/stories\",\"adjustable\":\"1\",\"description\":\"(optional) is the filesystem path to the directory containing the files to be listed. If omitted the directory given by JPATH_ROOT is assumed.\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default file name.\"},\"properties5\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties6\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to filter the list of files selected for inclusion in the drop-down list. If omitted, all files in the directory are included. The filter argument expression is applied before the exclude argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties7\":{\"name\":\"exclude\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to exclude files from the list. The exclude argument expression is applied after the filter argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties8\":{\"name\":\"stripext\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true then file name extensions will be stripped from the file names listed. Also note that the file name will be saved without the extension too.\"},\"properties9\":{\"name\":\"hide_none\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Do not use -\' item is omitted from the drop-down list.\"},\"properties10\":{\"name\":\"hide_default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Use default -\' item is omitted from the drop-down list.\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a drop down list of files from a specified directory.', '', 1, 4, '', 1, '0c80df15-52c6-4647-983b-4bb4888a2edf'),
(31, 'The folderlist form field type provides a drop down list of folders from a specfied directory. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.\r\n\r\nBy default, the first item on ', 'Folderlist', '{\"properties0\":{\"name\":\"type\",\"example\":\"folderlist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be folderlist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myfolder\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select a folder\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"directory\",\"example\":\"images\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the filesystem path to the directory containing the folders to be listed.\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default folder name.\"},\"properties5\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties6\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to filter the list of folders selected for inclusion in the drop-down list. If omitted, all folders in the directory are included. The filter argument expression is applied before the exclude argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties7\":{\"name\":\"exclude\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to exclude folders from the list. The exclude argument expression is applied after the filter argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties8\":{\"name\":\"hide_none\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Do not use -\' item is omitted from the drop-down list.\"},\"properties9\":{\"name\":\"hide_default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Use default -\' item is omitted from the drop-down list.\"},\"properties10\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a drop down list of folders from a specified directory.', '', 1, 4, '', 2, 'd3ab2ae4-9370-4497-ae6d-dee2e0b74b7a'),
(32, 'Note: When using the file input type you should always add the attribute enctype=\"multipart/form-data\" to your form tag. Otherwise, the uploaded files will not be attached correctly.\r\n\r\nNote 2: You can put a soft limit file size by adding a hidden field with name=\"MAX_FILE_SIZE\" and value the maximum allowed bytes which is handled by php, but you must also handle it in your code with or without it.', 'File', '{\"properties0\":{\"name\":\"type\",\"example\":\"file\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be file.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myfilevalue\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Enter some text\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Choose an image from your computer with maximum 100KB\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value, but doesn\'t mean much for a file.\"},\"properties5\":{\"name\":\"size\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the file box in characters.\"},\"properties6\":{\"name\":\"accept\",\"example\":\"image\\/*\",\"adjustable\":\"1\",\"description\":\"(optional) Tells the browser what MIME types your form will allow to be uploaded.\"},\"properties7\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties8\":{\"name\":\"labelclass\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) adds a CSS class for form field\'s label; for Joomla 2.5.4+\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute\"},\"properties10\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"},\"properties11\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) For Joomla form validating it to be filled in\"},\"properties12\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Whether to Joomla validate the field according to rules\"},\"properties13\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides an input field for files', '', 1, 9, '', 3, '6da71c1e-119c-4e0d-a309-f3e52ecfa1d1'),
(33, 'The menuitem form field type provides a drop down grouped list of the available menu items from your Joomla site.', 'menuitem', '{\"properties0\":{\"name\":\"type\",\"example\":\"menuitem\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be menuitem.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mymenuitem\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select a menu item\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default menu item. Note that this is the ItemID number of the menu item.\"},\"properties4\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties5\":{\"name\":\"published\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) determines whether all menu items are listed or only published menu items. If state is \'0\' then all menu items will be listed. If state is \'1\' then only published menu items will be listed.\"},\"properties6\":{\"name\":\"filter\",\"example\":\"int\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties7\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides a drop down list of the available menu items from your Joomla site.', '', 1, 5, '', 4, 'f183b0e2-017f-48bd-8dba-d332ce1b8d9e'),
(34, 'Remember all views already have [accesslevel] added by default, only add this if you need more custom access selection! Provides a dropdown list of accesslevel options with the current option selected.', 'Accesslevel', '{\"properties0\":{\"name\":\"type\",\"example\":\"accesslevel\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be accesslevel\"},\"properties1\":{\"name\":\"name\",\"example\":\"accesstwo\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field. This must match the name of the query results column that contains the values that will be shown to the user in the drop-down list, unless a different name is specified in the value_field attribute. \"},\"properties2\":{\"name\":\"label\",\"example\":\"Access Two\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Select an access level to this concept.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties5\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the field required true if yes.\"},\"properties6\":{\"name\":\"multiple\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) If set to multiple then allows more than one usergroup to be selected.\"},\"properties7\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'List of accesslevels', '', 1, 4, '', 5, '913ed2ce-836c-48e8-97af-e482441f47df'),
(35, 'Provides a form with rows of fields that you specify. As many options can be added as desired. Note this form field has a jQuery based javascript file as a dependency.', 'Subform', '{\"properties0\":{\"name\":\"type\",\"example\":\"subform\",\"description\":\"(mandatory) must be subform.\"},\"properties1\":{\"name\":\"name\",\"example\":\"options\",\"adjustable\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter\"},\"properties2\":{\"name\":\"label\",\"example\":\"The Option List\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"layout\",\"example\":\"joomla.form.field.subform.repeatable-table\",\"adjustable\":\"1\",\"description\":\"(mandatory) The layout for the repeatable table.\"},\"properties4\":{\"name\":\"component\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) To change the component where it should search for layout\"},\"properties5\":{\"name\":\"client\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Function to initialise the application clientFrontend: site or 0Backend: admin or 1\"},\"properties6\":{\"name\":\"multiple\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The rows to be multiple.\"},\"properties7\":{\"name\":\"buttons\",\"example\":\"add,remove,move\",\"adjustable\":\"1\",\"description\":\"(optional) Which buttons to show if multiple mode is true.Options: add,remove,move\"},\"properties8\":{\"name\":\"fields\",\"example\":\"1,2,3\",\"adjustable\":\"1\",\"description\":\"(mandatory) The fields to add to the modal. All fields must first be created in component builder as a field before you can add them here, since you must use the id of the field. Separate the field ids with commas. Do not add custom fields that are not also used in this component.\"},\"properties9\":{\"name\":\"formsource\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) you can add a path to a xml file containing the fields.\"},\"properties10\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) description text for the form field. Displays at the top of the modal with the name as well as in the usual position in the form\"},\"properties11\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The default value for the form field if the field is left empty. Note this has to be a json string compatible with the contents of the form field.\"},\"properties12\":{\"name\":\"icon\",\"example\":\"list\",\"adjustable\":\"1\",\"description\":\"(optional) The icon to show on the select button (is prefixed with \\\"icon-\\\").\"},\"properties13\":{\"name\":\"max\",\"example\":\"50\",\"adjustable\":\"1\",\"description\":\"(optional) The maximum number of rows of fields allowed (by default 999 to be effectively infinite)\"},\"properties14\":{\"name\":\"min\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The minimum number of rows of fields required\"},\"properties15\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Use only if you would like to save raw data, since the default is best.\"},\"properties16\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Allows form fields which can have as many options as the user desires.', '', 1, 14, '', 6, '7139f2c8-a70a-46a6-bbe3-4eefe54ca515'),
(36, 'Provides an input field for an email address.', 'Email', '{\"properties0\":{\"name\":\"type\",\"example\":\"email\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be email.\"},\"properties1\":{\"name\":\"name\",\"example\":\"email\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Email Address\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"size\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties4\":{\"name\":\"maxlength\",\"example\":\"50\",\"adjustable\":\"1\",\"description\":\"(optional) limits the number of characters that may be entered.\"},\"properties5\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"description\",\"example\":\"Enter some description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties7\":{\"name\":\"class\",\"example\":\"inputbox\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties8\":{\"name\":\"readonly\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties10\":{\"name\":\"required\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties11\":{\"name\":\"filter\",\"example\":\"STRING\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties12\":{\"name\":\"validate\",\"example\":\"email\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties13\":{\"name\":\"unique\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) Used in validation, to check if we should test for uniqueness, to insure that this email does not already belong to another user. Check line 99 in \\/libraries\\/src\\/Form\\/Rule\\/EmailRule.php\"},\"properties14\":{\"name\":\"field\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) used in validation of \\\"equals\\\" to link the field to match.\"},\"properties15\":{\"name\":\"message\",\"example\":\"Error! Please add some text here.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The error message that will be displayed instead of the default message.\"},\"properties16\":{\"name\":\"hint\",\"example\":\"your@email.com\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The placeholder to display inside the text box.\"},\"properties17\":{\"name\":\"autocomplete\",\"example\":\"on\",\"adjustable\":\"1\",\"description\":\"(optional) The autocomplete state for the form field.  If \'off\' element will not be automatically completed by browser.\"},\"properties18\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties19\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'Email form field type', '', 1, 7, '', 7, '35948af5-9e79-4454-8dfa-682ee4fdf650'),
(37, 'Provides a dropdown list of plugin options from the folder.', 'Plugins', '{\"properties0\":{\"name\":\"type\",\"example\":\"plugins\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be editors.\"},\"properties1\":{\"name\":\"name\",\"example\":\"editor\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an editor\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties4\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the label.\"},\"properties5\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties6\":{\"name\":\"folder\",\"example\":\"editors\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) editors or captcha.\"},\"properties7\":{\"name\":\"filter\",\"example\":\"cmd\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties8\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a dropdown list of plugin options from the folder.', '', 1, 8, '', 8, '37fa4e1d-b7ca-4a8f-aa4b-d8085c135233'),
(38, 'Provides the use of a captcha plugin.', 'Captcha', '{\"properties0\":{\"name\":\"type\",\"example\":\"captcha\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be captcha.\"},\"properties3\":{\"name\":\"name\",\"example\":\"captcha\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"validate\",\"example\":\"captcha\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be captcha.\"},\"properties1\":{\"name\":\"label\",\"example\":\"Captcha\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties4\":{\"name\":\"description\",\"example\":\"We do not like spam, please show us you are human\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties5\":{\"name\":\"namespace\",\"example\":\"componentbuilder\",\"description\":\"(optional) the component name seems to work\"}}', 'Captcha robot check.', '', 1, 2, '', 9, '206fdad4-14d0-45f1-9c84-3d09abf48a39'),
(39, 'The list form field type provides a drop down list or a list box of custom-defined entries. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Groupedlist', '{\"properties0\":{\"name\":\"type\",\"example\":\"groupedlist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be groupedlist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mygrouplist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an option\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"list_class\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties6\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties7\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) filter options\"},\"properties8\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties9\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties10\":{\"name\":\"option\",\"example\":\"Group Name@@1,1|Option 1|1,2|Option 2|1,Group Name 2@@2,3|Option 3|2\",\"adjustable\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties11\":{\"name\":\"useglobal\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional)  if set to true, it will show the value that is set in the global configuration if found in the database.\"},\"properties12\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default list item value.\"},\"properties13\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties14\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a drop down list of custom-defined entries.', '', 1, 2, '', 10, '088d47c0-b058-4894-b92e-dcf1b9d5a722'),
(40, 'The modulelayout form field type provides a drop down list of all available layouts for a module, grouped by core and template. If the parameter has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Modulelayout', '{\"properties0\":{\"name\":\"type\",\"example\":\"modulelayout\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be modulelayout.\"},\"properties1\":{\"name\":\"name\",\"example\":\"layout\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Layout\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Module layout\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"module\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a specific module name (e.g. mod_articles_category).\"},\"properties5\":{\"name\":\"client_id\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional). If 0 (site): Forces searching for layouts only in directories \\/modules\\/[MODULENAME]\\/tmpl\\/ and all \\/templates\\/[TEMPLATENAME]\\/html\\/[MODULENAME]\\/. If 1 (administrator): Forces searching for layouts only in directories \\/administrator\\/modules\\/[MODULENAME]\\/tmpl\\/ and all \\/administrator\\/templates\\/[TEMPLATENAME]\\/html\\/[MODULENAME]\\/.\\r\\n\"},\"properties6\":{\"name\":\"template\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a template name (e.g. protostar or isis). If set forces searching for module template overrides only in this template.\"}}', 'modulelayout', '', 1, 1, '', 11, '7520c8f4-543d-4c7a-8e4f-e2da71c3b1cd'),
(43, 'Provides a combobox field, which offers a list like the List Form Field Type, but additionally allows free text.', 'Combo', '{\"properties0\":{\"name\":\"type\",\"example\":\"combo\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be combo.\"},\"properties1\":{\"name\":\"name\",\"example\":\"type\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Type\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) tooltip for the form field.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"combobox\",\"adjustable\":\"1\",\"description\":\"(optional) specify your own classes for additonal markup, defaults to \\\"combobox\\\".\"},\"properties6\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) filter options\"},\"properties7\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties8\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field.  This value will determine which method is used to validate the value for a field.\"},\"properties9\":{\"name\":\"option\",\"example\":\"0|Option 1,1|Option 2,2|Option 1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties10\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default list item value.\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties12\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'Provides a combobox list field, allows free text.', '', 1, 2, '', 13, '2c8b128f-7da2-4f55-b1d7-3613f902f590'),
(44, 'The imagelist form field type provides a drop down list of image files in a specified directory. Only files with .png, .gif, .jpg, .bmp, .ico extensions are listed. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.\r\n\r\nBy default, the first item on the list is \'- Do not use -\' (which is translatable) and is given the value \'-1\' and this is followed by \'- Use default -\' (also translatable) given the value \'0\'.', 'Imagelist', '{\"properties0\":{\"name\":\"type\",\"example\":\"imagelist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be imagelist.\"},\"properties6\":{\"name\":\"name\",\"example\":\"myimagelist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties5\":{\"name\":\"label\",\"example\":\"Select an image\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties4\":{\"name\":\"directory\",\"example\":\"images\\/stories\",\"adjustable\":\"1\",\"description\":\"(optional) is the filesystem path to the directory containing the image files to be listed. If omitted the directory given by JPATH_ROOT is assumed.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default image file name.\"},\"properties2\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties1\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to filter the list of image files selected for inclusion in the drop-down list. If omitted, all image files in the directory are included. The filter argument expression is applied before the exclude argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties9\":{\"name\":\"exclude\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to exclude image files from the list. The exclude argument expression is applied after the filter argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties8\":{\"name\":\"stripext\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true then file name extensions will be stripped from the image file names listed. Also note that the file name will be saved without the extension too.\"},\"properties7\":{\"name\":\"hide_none\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Do not use -\' item is omitted from the drop-down list.\"},\"properties10\":{\"name\":\"hide_default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Use default -\' item is omitted from the drop-down list.\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a drop down list of image files from a specified directory.', '', 1, 1, '', 14, '72680e92-2859-49c6-ad92-c2329c52f9f8');

--
-- Dumping data for table `#__componentbuilder_language`
--

INSERT INTO `#__componentbuilder_language` (`id`, `langtag`, `name`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
(1, 'af-ZA', 'Afrikaans', '', 1, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(2, 'sq-AL', 'Albanian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(3, 'ar-AA', 'Arabic Unitag', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(4, 'hy-AM', 'Armenian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(5, 'id-ID', 'Indonesian, Bahasa Indonesia', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(6, 'eu-ES', 'Basque', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(7, 'be-BY', 'Belarusian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(8, 'bn-BD', 'Bengali, Bangladesh', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(9, 'bs-BA', 'Bosnian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(10, 'bg-BG', 'Bulgarian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(11, 'ca-ES', 'Catalan', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(12, 'zh-CN', 'Chinese, Simplified', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(13, 'zh-TW', 'Chinese, Traditional', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(14, 'hr-HR', 'Croatian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(15, 'cs-CZ', 'Czech', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(16, 'da-DK', 'Danish', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(17, 'prs-AF', 'Dari Persian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(18, 'nl-NL', 'Dutch', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(19, 'dz-BT', 'Dzongkha', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(20, 'en-AU', 'English, Australia', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(21, 'en-CA', 'English, Canada', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(22, 'en-GB', 'English GB', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(23, 'en-NZ', 'English, New Zealand', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(24, 'en-US', 'English, USA', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(25, 'eo-XX', 'Esperanto', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(26, 'et-EE', 'Estonian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(27, 'fi-FI', 'Finnish', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(28, 'nl-BE', 'Flemish', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(29, 'fr-FR', 'French', '', 1, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(30, 'fr-CA', 'French, Canada', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(31, 'gl-ES', 'Galician', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(32, 'ka-GE', 'Georgian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(33, 'de-AT', 'German, Austria', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(34, 'de-CH', 'German, Switzerland', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(35, 'de-DE', 'German', '', 1, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(36, 'de-LI', 'German, Liechtenstein', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(37, 'de-LU', 'German, Luxembourg', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(38, 'el-GR', 'Greek', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(39, 'he-IL', 'Hebrew', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(40, 'hi-IN', 'Hindi, India', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(41, 'hu-HU', 'Hungarian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(42, 'ga-IE', 'Irish', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(43, 'it-IT', 'Italian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(44, 'ja-JP', 'Japanese', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(45, 'km-KH', 'Khmer', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(46, 'ko-KR', 'Korean', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(47, 'lv-LV', 'Latvian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(48, 'mk-MK', 'Macedonian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(49, 'ms-MY', 'Malay', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(50, 'srp-ME', 'Montenegrin', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(51, 'nb-NO', 'Norwegian Bokmål', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(52, 'nn-NO', 'Norwegian Nynorsk', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(53, 'fa-IR', 'Persian Farsi', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(54, 'pl-PL', 'Polish', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(55, 'pt-PT', 'Portuguese, Portugal', '', 1, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(56, 'pt-BR', 'Portuguese, Brazil', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(57, 'ro-RO', 'Romanian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(58, 'ru-RU', 'Russian', '', 1, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 6, '', 1),
(59, 'sr-RS', 'Serbian, Cyrillic', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(60, 'sr-YU', 'Serbian, Latin', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(61, 'si-LK', 'Sinhala', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(62, 'sk-SK', 'Slovak', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(63, 'sl-SI', 'Slovenian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(64, 'es-ES', 'Spanish', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(65, 'es-CO', 'Spanish, Colombia', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(66, 'sw-KE', 'Swahili', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(67, 'sv-SE', 'Swedish', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(68, 'sy-IQ', 'Syriac, East', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(69, 'ta-IN', 'Tamil, India', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(70, 'th-TH', 'Thai', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(71, 'tr-TR', 'Turkish', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(72, 'tk-TM', 'Turkmen', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(73, 'uk-UA', 'Ukrainian', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(74, 'ug-CN', 'Uyghur', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(75, 'vi-VN', 'Vietnamese', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(76, 'cy-GB', 'Welsh', '', 2, '2018-04-19 13:43:44', '2023-12-26 07:40:20', 5, '', 1),
(77, 'lt-LT', 'Lithuanian', '', 2, '2018-09-14 10:39:11', '2023-12-26 07:40:20', 4, '', 2),
(78, 'kk-KZ', 'Kazakh', '', 2, '2020-03-19 13:41:00', '2023-12-26 07:40:20', 3, '', 3);

--
-- Dumping data for table `#__componentbuilder_help_document`
--

INSERT INTO `#__componentbuilder_help_document` (`id`, `admin_view`, `alias`, `article`, `content`, `groups`, `location`, `site_view`, `target`, `title`, `type`, `url`, `params`, `published`, `version`, `hits`, `ordering`) VALUES
(1, 'components', '2016-03-04-02-31-55', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p>\r\n<h3>Create</h3>\r\n<p>You can create a component by clicking on the\r\n    <button>New</button>button in the toolbar, this will open a window where you can add all the needed values to create a new component.</p>\r\n<h3>Edit</h3>\r\n<p>You can edit components in two ways.</p>\r\n<ul>\r\n    <li>You can click on the box next to the component name and then click on the\r\n        <button>Edit</button>button in the toolbar; this will open the component and if you have permission it will give you access to edit the values of a component.</li>\r\n    <li>You can simply click on the component name; this will open the component and if you have permission it will give you access to edit the values of a component.</li>\r\n</ul>\r\n<h3>Edit State</h3>\r\n<p>You can publish, unpublish, archive, and trash any component by clicking in the boxes next the component names and then click on the corresponding button of the task you want to perform. This will change the state of all the components you’ve selected.</p>\r\n<p>If you have trashed a component it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed components. To completely remove these components from your system do the following: first select all the components you want to permanently delete by clicking in the boxes next to the component names and then click on the\r\n    <button>Empty trash</button>button in the toolbar. This will permanently delete the components from the database. On the other hand if you would like to change the status of the component to publish, unpublish or archive, click in the boxes next to the component names and then click on the corresponding button of the task you want to perform. This will change the state of all the components you’ve selected.</p>\r\n<h3>Check-in</h3>\r\n<p>When another user on your Joomla website opens a component the system checks the component out to that user. A little lock will show up next to the component name. When you hover over the lock it will show to you who checked it out and when.</p>\r\n<p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p>\r\n<p>If this feature has not yet checked-in any of the components that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the component names and then click on the\r\n    <button>Check-in</button>button in the toolbar, or simply click on the little lock. This will then check in the component, which will mean that it removes the component from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p>\r\n<h3>Batch Feature</h3>\r\n<p>You can use the Batch feature to update or copy many components at once by clicking in the boxes next the component names and then click on the\r\n    <button>Batch</button>button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the\r\n    <button>Process</button>button. Once completed this batch feature will have either copied or updated all the components according to the task you selected.</p>\r\n<h3>Export & Import</h3>\r\n<p>The export and import feature is some of the most exciting features to the list view of components. With them you can update and create many components at once.</p>\r\n<h3>Export</h3>\r\n<p>The export option only exports the components selected. So to export all components you must change the limited number of components that are being loaded to \"All\". The box that limits the number of components being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the component records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the components. Next click on the\r\n    <button>Export Date</button>button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p>\r\n<h3>Import</h3>\r\n<p>The import option can be used to create components or update existing components. The way to update existing components is to use the same id as the component you want to update. Best way to do this is to first export the components you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new components via an import, simple leave the id field empty.</p>\r\n<p>So once you have your excel document ready you will again open the list view of components and click on the\r\n    <button>Import Data</button>button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p>\r\n<p>Once you have the file selected you can click on the\r\n    <button>Upload File</button> or\r\n    <button>Get File</button>button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p>\r\n<p>When the field to column relationship has correctly been mapped you can click on the\r\n    <button>continue</button>button at the bottom of the page. This should return you to the list view of components with a success message.</p>\r\n<h3>Debug</h3>\r\n<p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Components', 2, '', '', 1, 12, '', 1),
(2, 'admin_views', 'welcome-to-the-list-view-of-admin-views', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create an admin view by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new admin view.</p> <h3>Edit</h3> <p>You can edit admin views in two ways.</p> <ul> <li>You can click on the box next to the admin view name and then click on the <button>Edit</button> button in the toolbar; this will open the admin view and if you have permission it will give you access to edit the values of an admin view.</li> <li>You can simply click on the admin view name; this will open the admin view and if you have permission it will give you access to edit the values of an admin view.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any admin view by clicking in the boxes next the admin view names and then click on the corresponding button of the task you want to perform. This will change the state of all the admin views you’ve selected.</p> <p>If you have trashed an admin view it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed admin views. To completely remove these admin views from your system do the following: first select all the admin views you want to permanently delete by clicking in the boxes next to the admin view names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the admin views from the database. On the other hand if you would like to change the status of the admin view to publish, unpublish or archive, click in the boxes next to the admin view names and then click on the corresponding button of the task you want to perform. This will change the state of all the admin views you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens an admin view the system checks the admin view out to that user. A little lock will show up next to the admin view name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the admin views that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the admin view names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the admin view, which will mean that it removes the admin view from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many admin views at once by clicking in the boxes next the admin view names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the admin views according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of admin views. With them you can update and create many admin views at once.</p> <h3>Export</h3> <p>The export option only exports the admin views selected. So to export all admin views you must change the limited number of admin views that are being loaded to \"All\". The box that limits the number of admin views being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the admin view records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the admin views. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create admin views or update existing admin views. The way to update existing admin views is to use the same id as the admin view you want to update. Best way to do this is to first export the admin views you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new admin views via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of admin views and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of admin views with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Admin Views', 2, '', '', 1, 5, '', 2),
(3, 'custom_admin_views', 'welcome-to-the-list-view-of-custom-admin-views', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a custom admin view by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new custom admin view.</p> <h3>Edit</h3> <p>You can edit custom admin views in two ways.</p> <ul> <li>You can click on the box next to the custom admin view name and then click on the <button>Edit</button> button in the toolbar; this will open the custom admin view and if you have permission it will give you access to edit the values of a custom admin view.</li> <li>You can simply click on the custom admin view name; this will open the custom admin view and if you have permission it will give you access to edit the values of a custom admin view.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any custom admin view by clicking in the boxes next the custom admin view names and then click on the corresponding button of the task you want to perform. This will change the state of all the custom admin views you’ve selected.</p> <p>If you have trashed a custom admin view it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed custom admin views. To completely remove these custom admin views from your system do the following: first select all the custom admin views you want to permanently delete by clicking in the boxes next to the custom admin view names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the custom admin views from the database. On the other hand if you would like to change the status of the custom admin view to publish, unpublish or archive, click in the boxes next to the custom admin view names and then click on the corresponding button of the task you want to perform. This will change the state of all the custom admin views you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a custom admin view the system checks the custom admin view out to that user. A little lock will show up next to the custom admin view name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the custom admin views that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the custom admin view names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the custom admin view, which will mean that it removes the custom admin view from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many custom admin views at once by clicking in the boxes next the custom admin view names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the custom admin views according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of custom admin views. With them you can update and create many custom admin views at once.</p> <h3>Export</h3> <p>The export option only exports the custom admin views selected. So to export all custom admin views you must change the limited number of custom admin views that are being loaded to \"All\". The box that limits the number of custom admin views being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the custom admin view records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the custom admin views. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create custom admin views or update existing custom admin views. The way to update existing custom admin views is to use the same id as the custom admin view you want to update. Best way to do this is to first export the custom admin views you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new custom admin views via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of custom admin views and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of custom admin views with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Custom Admin Views', 2, '', '', 1, 4, '', 3),
(4, 'site_views', 'welcome-to-the-list-view-of-site-views', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a site view by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new site view.</p> <h3>Edit</h3> <p>You can edit site views in two ways.</p> <ul> <li>You can click on the box next to the site view name and then click on the <button>Edit</button> button in the toolbar; this will open the site view and if you have permission it will give you access to edit the values of a site view.</li> <li>You can simply click on the site view name; this will open the site view and if you have permission it will give you access to edit the values of a site view.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any site view by clicking in the boxes next the site view names and then click on the corresponding button of the task you want to perform. This will change the state of all the site views you’ve selected.</p> <p>If you have trashed a site view it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed site views. To completely remove these site views from your system do the following: first select all the site views you want to permanently delete by clicking in the boxes next to the site view names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the site views from the database. On the other hand if you would like to change the status of the site view to publish, unpublish or archive, click in the boxes next to the site view names and then click on the corresponding button of the task you want to perform. This will change the state of all the site views you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a site view the system checks the site view out to that user. A little lock will show up next to the site view name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the site views that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the site view names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the site view, which will mean that it removes the site view from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many site views at once by clicking in the boxes next the site view names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the site views according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of site views. With them you can update and create many site views at once.</p> <h3>Export</h3> <p>The export option only exports the site views selected. So to export all site views you must change the limited number of site views that are being loaded to \"All\". The box that limits the number of site views being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the site view records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the site views. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create site views or update existing site views. The way to update existing site views is to use the same id as the site view you want to update. Best way to do this is to first export the site views you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new site views via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of site views and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of site views with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Site Views', 2, '', '', 1, 3, '', 4),
(5, 'templates', 'welcome-to-the-list-view-of-templates', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a template by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new template.</p> <h3>Edit</h3> <p>You can edit templates in two ways.</p> <ul> <li>You can click on the box next to the template name and then click on the <button>Edit</button> button in the toolbar; this will open the template and if you have permission it will give you access to edit the values of a template.</li> <li>You can simply click on the template name; this will open the template and if you have permission it will give you access to edit the values of a template.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any template by clicking in the boxes next the template names and then click on the corresponding button of the task you want to perform. This will change the state of all the templates you’ve selected.</p> <p>If you have trashed a template it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed templates. To completely remove these templates from your system do the following: first select all the templates you want to permanently delete by clicking in the boxes next to the template names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the templates from the database. On the other hand if you would like to change the status of the template to publish, unpublish or archive, click in the boxes next to the template names and then click on the corresponding button of the task you want to perform. This will change the state of all the templates you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a template the system checks the template out to that user. A little lock will show up next to the template name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the templates that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the template names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the template, which will mean that it removes the template from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many templates at once by clicking in the boxes next the template names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the templates according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of templates. With them you can update and create many templates at once.</p> <h3>Export</h3> <p>The export option only exports the templates selected. So to export all templates you must change the limited number of templates that are being loaded to \"All\". The box that limits the number of templates being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the template records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the templates. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create templates or update existing templates. The way to update existing templates is to use the same id as the template you want to update. Best way to do this is to first export the templates you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new templates via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of templates and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of templates with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Templates', 2, '', '', 1, 4, '', 5),
(6, 'layouts', 'welcome-to-the-list-view-of-layouts', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a layout by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new layout.</p> <h3>Edit</h3> <p>You can edit layouts in two ways.</p> <ul> <li>You can click on the box next to the layout name and then click on the <button>Edit</button> button in the toolbar; this will open the layout and if you have permission it will give you access to edit the values of a layout.</li> <li>You can simply click on the layout name; this will open the layout and if you have permission it will give you access to edit the values of a layout.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any layout by clicking in the boxes next the layout names and then click on the corresponding button of the task you want to perform. This will change the state of all the layouts you’ve selected.</p> <p>If you have trashed a layout it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed layouts. To completely remove these layouts from your system do the following: first select all the layouts you want to permanently delete by clicking in the boxes next to the layout names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the layouts from the database. On the other hand if you would like to change the status of the layout to publish, unpublish or archive, click in the boxes next to the layout names and then click on the corresponding button of the task you want to perform. This will change the state of all the layouts you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a layout the system checks the layout out to that user. A little lock will show up next to the layout name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the layouts that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the layout names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the layout, which will mean that it removes the layout from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many layouts at once by clicking in the boxes next the layout names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the layouts according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of layouts. With them you can update and create many layouts at once.</p> <h3>Export</h3> <p>The export option only exports the layouts selected. So to export all layouts you must change the limited number of layouts that are being loaded to \"All\". The box that limits the number of layouts being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the layout records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the layouts. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create layouts or update existing layouts. The way to update existing layouts is to use the same id as the layout you want to update. Best way to do this is to first export the layouts you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new layouts via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of layouts and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of layouts with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Layouts', 2, '', '', 1, 3, '', 6),
(7, 'dynamic_gets', 'welcome-to-the-list-view-of-dynamic-gets', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a dynamic get by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new dynamic get.</p> <h3>Edit</h3> <p>You can edit dynamic gets in two ways.</p> <ul> <li>You can click on the box next to the dynamic get name and then click on the <button>Edit</button> button in the toolbar; this will open the dynamic get and if you have permission it will give you access to edit the values of a dynamic get.</li> <li>You can simply click on the dynamic get name; this will open the dynamic get and if you have permission it will give you access to edit the values of a dynamic get.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any dynamic get by clicking in the boxes next the dynamic get names and then click on the corresponding button of the task you want to perform. This will change the state of all the dynamic gets you’ve selected.</p> <p>If you have trashed a dynamic get it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed dynamic gets. To completely remove these dynamic gets from your system do the following: first select all the dynamic gets you want to permanently delete by clicking in the boxes next to the dynamic get names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the dynamic gets from the database. On the other hand if you would like to change the status of the dynamic get to publish, unpublish or archive, click in the boxes next to the dynamic get names and then click on the corresponding button of the task you want to perform. This will change the state of all the dynamic gets you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a dynamic get the system checks the dynamic get out to that user. A little lock will show up next to the dynamic get name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the dynamic gets that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the dynamic get names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the dynamic get, which will mean that it removes the dynamic get from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many dynamic gets at once by clicking in the boxes next the dynamic get names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the dynamic gets according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of dynamic gets. With them you can update and create many dynamic gets at once.</p> <h3>Export</h3> <p>The export option only exports the dynamic gets selected. So to export all dynamic gets you must change the limited number of dynamic gets that are being loaded to \"All\". The box that limits the number of dynamic gets being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the dynamic get records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the dynamic gets. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create dynamic gets or update existing dynamic gets. The way to update existing dynamic gets is to use the same id as the dynamic get you want to update. Best way to do this is to first export the dynamic gets you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new dynamic gets via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of dynamic gets and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of dynamic gets with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Dynamic Gets', 2, '', '', 1, 3, '', 7),
(8, 'snippets', 'welcome-to-the-list-view-of-snippets', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a snippet by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new snippet.</p> <h3>Edit</h3> <p>You can edit snippets in two ways.</p> <ul> <li>You can click on the box next to the snippet name and then click on the <button>Edit</button> button in the toolbar; this will open the snippet and if you have permission it will give you access to edit the values of a snippet.</li> <li>You can simply click on the snippet name; this will open the snippet and if you have permission it will give you access to edit the values of a snippet.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any snippet by clicking in the boxes next the snippet names and then click on the corresponding button of the task you want to perform. This will change the state of all the snippets you’ve selected.</p> <p>If you have trashed a snippet it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed snippets. To completely remove these snippets from your system do the following: first select all the snippets you want to permanently delete by clicking in the boxes next to the snippet names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the snippets from the database. On the other hand if you would like to change the status of the snippet to publish, unpublish or archive, click in the boxes next to the snippet names and then click on the corresponding button of the task you want to perform. This will change the state of all the snippets you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a snippet the system checks the snippet out to that user. A little lock will show up next to the snippet name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the snippets that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the snippet names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the snippet, which will mean that it removes the snippet from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many snippets at once by clicking in the boxes next the snippet names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the snippets according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of snippets. With them you can update and create many snippets at once.</p> <h3>Export</h3> <p>The export option only exports the snippets selected. So to export all snippets you must change the limited number of snippets that are being loaded to \"All\". The box that limits the number of snippets being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the snippet records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the snippets. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create snippets or update existing snippets. The way to update existing snippets is to use the same id as the snippet you want to update. Best way to do this is to first export the snippets you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new snippets via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of snippets and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of snippets with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Snippets', 2, '', '', 1, 3, '', 8),
(9, 'fields', 'welcome-to-the-list-view-of-fields', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a field by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new field.</p> <h3>Edit</h3> <p>You can edit fields in two ways.</p> <ul> <li>You can click on the box next to the field name and then click on the <button>Edit</button> button in the toolbar; this will open the field and if you have permission it will give you access to edit the values of a field.</li> <li>You can simply click on the field name; this will open the field and if you have permission it will give you access to edit the values of a field.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any field by clicking in the boxes next the field names and then click on the corresponding button of the task you want to perform. This will change the state of all the fields you’ve selected.</p> <p>If you have trashed a field it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed fields. To completely remove these fields from your system do the following: first select all the fields you want to permanently delete by clicking in the boxes next to the field names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the fields from the database. On the other hand if you would like to change the status of the field to publish, unpublish or archive, click in the boxes next to the field names and then click on the corresponding button of the task you want to perform. This will change the state of all the fields you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a field the system checks the field out to that user. A little lock will show up next to the field name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the fields that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the field names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the field, which will mean that it removes the field from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many fields at once by clicking in the boxes next the field names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the fields according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of fields. With them you can update and create many fields at once.</p> <h3>Export</h3> <p>The export option only exports the fields selected. So to export all fields you must change the limited number of fields that are being loaded to \"All\". The box that limits the number of fields being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the field records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the fields. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create fields or update existing fields. The way to update existing fields is to use the same id as the field you want to update. Best way to do this is to first export the fields you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new fields via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of fields and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of fields with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Fields', 2, '', '', 1, 3, '', 9),
(10, 'fieldtypes', 'welcome-to-the-list-view-of-fieldtypes', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a fieldtype by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new fieldtype.</p> <h3>Edit</h3> <p>You can edit fieldtypes in two ways.</p> <ul> <li>You can click on the box next to the fieldtype name and then click on the <button>Edit</button> button in the toolbar; this will open the fieldtype and if you have permission it will give you access to edit the values of a fieldtype.</li> <li>You can simply click on the fieldtype name; this will open the fieldtype and if you have permission it will give you access to edit the values of a fieldtype.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any fieldtype by clicking in the boxes next the fieldtype names and then click on the corresponding button of the task you want to perform. This will change the state of all the fieldtypes you’ve selected.</p> <p>If you have trashed a fieldtype it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed fieldtypes. To completely remove these fieldtypes from your system do the following: first select all the fieldtypes you want to permanently delete by clicking in the boxes next to the fieldtype names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the fieldtypes from the database. On the other hand if you would like to change the status of the fieldtype to publish, unpublish or archive, click in the boxes next to the fieldtype names and then click on the corresponding button of the task you want to perform. This will change the state of all the fieldtypes you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a fieldtype the system checks the fieldtype out to that user. A little lock will show up next to the fieldtype name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the fieldtypes that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the fieldtype names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the fieldtype, which will mean that it removes the fieldtype from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many fieldtypes at once by clicking in the boxes next the fieldtype names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the fieldtypes according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of fieldtypes. With them you can update and create many fieldtypes at once.</p> <h3>Export</h3> <p>The export option only exports the fieldtypes selected. So to export all fieldtypes you must change the limited number of fieldtypes that are being loaded to \"All\". The box that limits the number of fieldtypes being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the fieldtype records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the fieldtypes. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create fieldtypes or update existing fieldtypes. The way to update existing fieldtypes is to use the same id as the fieldtype you want to update. Best way to do this is to first export the fieldtypes you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new fieldtypes via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of fieldtypes and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of fieldtypes with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Fieldtypes', 2, '', '', 1, 3, '', 10),
(11, 'help_documents', 'welcome-to-the-list-view-of-help-documents', '', '<p>Here as in all Joomla backend list views you can perform all the common tasks, and more.</p> <h3>Create</h3> <p>You can create a help document by clicking on the <button>New</button> button in the toolbar, this will open a window where you can add all the needed values to create a new help document.</p> <h3>Edit</h3> <p>You can edit help documents in two ways.</p> <ul> <li>You can click on the box next to the help document name and then click on the <button>Edit</button> button in the toolbar; this will open the help document and if you have permission it will give you access to edit the values of a help document.</li> <li>You can simply click on the help document name; this will open the help document and if you have permission it will give you access to edit the values of a help document.</li> </ul> <h3>Edit State</h3> <p>You can publish, unpublish, archive, and trash any help document by clicking in the boxes next the help document names and then click on the corresponding button of the task you want to perform. This will change the state of all the help documents you’ve selected.</p> <p>If you have trashed a help document it is in the trash and can still be found in the database. To view items that are still in the trash change the “- Select Status –“ filter to Trashed. Here you will see the list of trashed help documents. To completely remove these help documents from your system do the following: first select all the help documents you want to permanently delete by clicking in the boxes next to the help document names and then click on the <button>Empty trash</button> button in the toolbar. This will permanently delete the help documents from the database. On the other hand if you would like to change the status of the help document to publish, unpublish or archive, click in the boxes next to the help document names and then click on the corresponding button of the task you want to perform. This will change the state of all the help documents you’ve selected.</p> <h3>Check-in</h3> <p>When another user on your Joomla website opens a help document the system checks the help document out to that user. A little lock will show up next to the help document name. When you hover over the lock it will show to you who checked it out and when.</p> <p>Component builder adds a nice feature to all its components that is called the auto check-in feature. This feature has a time setting that you can update in the component\'s global settings.</p> <p>If this feature has not yet checked-in any of the help documents that you as the administrator wants to open you can force a check-in by clicking in the boxes next to the help document names and then click on the <button>Check-in</button> button in the toolbar, or simply click on the little lock. This will then check in the help document, which will mean that it removes the help document from the user who checked it out before you. Remember that they will lose all changes they have made if they have not yet clicked save. This can cause very unpleasant circumstances, so only use this feature if you are absolutely sure you know what you are doing.</p> <h3>Batch Feature</h3> <p>You can use the Batch feature to update or copy many help documents at once by clicking in the boxes next the help document names and then click on the <button>Batch</button> button in the toolbar. This will open a popup window with multiple dropdown options of fields you can change with the batch feature. You can then select update or copy depending of your desired task and finally click on the <button>Process</button> button. Once completed this batch feature will have either copied or updated all the help documents according to the task you selected.</p> <h3>Export & Import</h3> <p>The export and import feature is some of the most exciting features to the list view of help documents. With them you can update and create many help documents at once.</p> <h3>Export</h3> <p>The export option only exports the help documents selected. So to export all help documents you must change the limited number of help documents that are being loaded to \"All\". The box that limits the number of help documents being loaded is found on the right top corner of the page. Simply change it from the number to “All” and the page should now reload with all the help document records from the database, excluding those in trash. If you want those also to load you must change the “- Select Status –“ filter to “All” as well. Now you can click on the tick box at the very top of the table. This should select all the help documents. Next click on the <button>Export Date</button> button in the toolbar. This should open a download window and you can select to save the excel file to your computer.</p> <h3>Import</h3> <p>The import option can be used to create help documents or update existing help documents. The way to update existing help documents is to use the same id as the help document you want to update. Best way to do this is to first export the help documents you want to update and then make the changes you have in mind in the excel document without removing or changing the id. To instead create new help documents via an import, simple leave the id field empty.</p> <p>So once you have your excel document ready you will again open the list view of help documents and click on the <button>Import Data</button> button in the toolbar. This will open a page where you can select the excel file on your computer as an upload, or on the server in a directory, or at any direct url to the excel document.</p> <p>Once you have the file selected you can click on the <button>Upload File</button> or <button>Get File</button> button depending on the method you have chosen. When file has successfully been uploaded or retrieved a new window will open where you can map the excel document headers of each column to the field names used in the database. Usually if you’re using an exported version of the excel document this mapping will be done for you, yet if you have changed any of the header names you may need to set these field relationships manually. There is an option to ignore a column in the case when you want to leave a field totally unchanged.</p> <p>When the field to column relationship has correctly been mapped you can click on the <button>continue</button> button at the bottom of the page. This should return you to the list view of help documents with a success message.</p> <h3>Debug</h3> <p>In the event that any of the above features did not work as expected, please read the error message carefully since it should usually give you enough information to why your request could not be processed. Subsequently if you are still not able to perform the request after making all needed corrections according to the error messages, then please contact your system administrator.</p>', '\"\"', 1, '', 2, 'Welcome to the List view of Help Documents', 2, '', '', 1, 3, '', 11);

--
-- Dumping data for table `#__componentbuilder_admin_fields`
--

INSERT INTO `#__componentbuilder_admin_fields` (`id`, `addfields`, `admin_view`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(111, '{\"0\":{\"field\":\"84\",\"list\":\"1\",\"order_list\":\"2\",\"sort\":\"1\",\"search\":\"1\",\"tab\":\"1\",\"alignment\":\"3\",\"order_edit\":\"1\"},\"1\":{\"field\":\"199\",\"list\":\"1\",\"order_list\":\"1\",\"title\":\"1\",\"sort\":\"1\",\"search\":\"1\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":\"4\",\"order_edit\":\"1\"},\"2\":{\"field\":\"23\",\"list\":\"\",\"order_list\":\"0\",\"alias\":\"1\",\"search\":\"1\",\"tab\":\"1\",\"alignment\":\"4\",\"order_edit\":\"2\"},\"3\":{\"field\":\"203\",\"list\":\"2\",\"order_list\":\"0\",\"tab\":\"1\",\"alignment\":\"5\",\"order_edit\":\"1\"},\"4\":{\"field\":\"682\",\"list\":\"\",\"order_list\":\"0\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"1\",\"tab\":\"2\",\"alignment\":\"1\",\"order_edit\":\"1\"},\"5\":{\"field\":\"100\",\"list\":\"\",\"order_list\":\"0\",\"tab\":\"2\",\"alignment\":\"2\",\"order_edit\":\"1\"},\"6\":{\"field\":\"196\",\"list\":\"\",\"order_list\":\"0\",\"tab\":\"2\",\"alignment\":\"2\",\"order_edit\":\"2\"},\"7\":{\"field\":\"1011\",\"list\":\"\",\"order_list\":\"0\",\"tab\":\"2\",\"alignment\":\"2\",\"order_edit\":\"3\"},\"8\":{\"field\":\"158\",\"list\":\"\",\"order_list\":\"0\",\"tab\":\"2\",\"alignment\":\"2\",\"order_edit\":\"4\"},\"9\":{\"field\":\"280\",\"list\":\"\",\"order_list\":\"0\",\"tab\":\"2\",\"alignment\":\"2\",\"order_edit\":\"5\"}}', 109, 1, '2017-10-12 19:52:03', '2019-01-28 16:27:19', 7, '', '', '');

--
-- Dumping data for table `#__componentbuilder_admin_fields_conditions`
--

INSERT INTO `#__componentbuilder_admin_fields_conditions` (`id`, `addconditions`, `admin_view`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(111, '{\"addconditions0\":{\"target_field\":[\"1011\",\"100\",\"158\",\"196\",\"280\"],\"target_behavior\":\"1\",\"target_relation\":\"0\",\"match_field\":\"682\",\"match_behavior\":\"1\",\"match_options\":\"1|Yes\"}}', 109, 1, '2017-10-12 21:36:00', '0000-00-00 00:00:00', 2, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_admin_views`
--

INSERT INTO `#__componentbuilder_component_admin_views` (`id`, `addadmin_views`, `joomla_component`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(27, '{\"addadmin_views0\":{\"adminview\":\"109\",\"icomoon\":\"eye-open\",\"mainmenu\":\"1\",\"dashboard_add\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"joomla_fields\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"port\":\"1\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"1\"}}', 25, 1, '2017-10-28 03:56:26', '2021-02-08 10:32:04', 7, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_site_views`
--

INSERT INTO `#__componentbuilder_component_site_views` (`id`, `addsite_views`, `joomla_component`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(27, '{\"addsite_views0\":{\"siteview\":\"23\",\"menu\":\"1\",\"metadata\":\"1\",\"default_view\":\"1\",\"access\":\"1\",\"public_access\":\"1\"},\"addsite_views1\":{\"siteview\":\"25\",\"metadata\":\"1\",\"access\":\"1\"}}', 25, 1, '2017-10-28 03:56:26', '2020-02-27 21:32:04', 4, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_custom_admin_views`
--

INSERT INTO `#__componentbuilder_component_custom_admin_views` (`id`, `addcustom_admin_views`, `joomla_component`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(27, '', 25, 1, '2017-10-28 03:56:26', '0000-00-00 00:00:00', 2, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_updates`
--

INSERT INTO `#__componentbuilder_component_updates` (`id`, `joomla_component`, `version_update`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(27, 25, '{\"version_update0\":{\"version\":\"2.0.0\",\"mysql\":\"ALTER TABLE `#__demo_look` ENGINE = InnoDB;\\r\\n\\r\\nALTER TABLE `#__demo_look` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\",\"url\":\"https:\\/\\/git.vdm.dev\\/joomla\\/Demo-Component\\/archive\\/v2.0.0.zip\",\"update_server_adv\":\"0\",\"update_server_type\":\"component\",\"update_element\":\"\",\"update_state\":\"stable\",\"update_target_version\":\"3.*\",\"change_log\":\"\",\"update_client\":\"site\"},\"version_update1\":{\"version\":\"2.0.2\",\"mysql\":\"ALTER TABLE `#__demo_look` CHANGE `image` `image` VARCHAR(255) NOT NULL DEFAULT \'\';\",\"url\":\"https:\\/\\/git.vdm.dev\\/joomla\\/Demo-Component\\/archive\\/v2.0.2.zip\",\"update_server_adv\":\"0\",\"update_server_type\":\"component\",\"update_element\":\"\",\"update_state\":\"stable\",\"update_target_version\":\"3.*\",\"change_log\":\"\",\"update_client\":\"site\"},\"version_update2\":{\"version\":\"2.0.3\",\"mysql\":\"\",\"url\":\"https:\\/\\/git.vdm.dev\\/joomla\\/Demo-Component\\/archive\\/v2.0.3.zip\",\"update_server_adv\":\"0\",\"update_server_type\":\"component\",\"update_element\":\"\",\"update_state\":\"stable\",\"update_target_version\":\"3.*\",\"change_log\":\"\",\"update_client\":\"site\"},\"version_update3\":{\"version\":\"2.1.0\",\"mysql\":\"\",\"url\":\"https:\\/\\/git.vdm.dev\\/joomla\\/Demo-Component\\/archive\\/v2.1.0.zip\",\"update_server_adv\":\"0\",\"update_server_type\":\"component\",\"update_element\":\"\",\"update_state\":\"stable\",\"update_target_version\":\"3.*\",\"change_log\":\"\",\"update_client\":\"site\"}}', 1, '2017-10-28 03:56:26', '2022-05-27 05:23:46', 9, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_mysql_tweaks`
--

INSERT INTO `#__componentbuilder_component_mysql_tweaks` (`id`, `joomla_component`, `sql_tweak`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(27, 25, '', 1, '2017-10-28 03:56:26', '0000-00-00 00:00:00', 2, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_custom_admin_menus`
--

INSERT INTO `#__componentbuilder_component_custom_admin_menus` (`id`, `addcustommenus`, `joomla_component`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(27, '', 25, 1, '2017-10-28 03:56:26', '0000-00-00 00:00:00', 2, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_config`
--

INSERT INTO `#__componentbuilder_component_config` (`id`, `addconfig`, `joomla_component`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(27, '', 25, 1, '2017-10-28 03:56:26', '0000-00-00 00:00:00', 2, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_dashboard`
--

INSERT INTO `#__componentbuilder_component_dashboard` (`id`, `dashboard_tab`, `joomla_component`, `php_dashboard_methods`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES
(27, '', 25, '', 1, '2017-10-28 03:56:26', '0000-00-00 00:00:00', 2, '', '', '');

--
-- Dumping data for table `#__componentbuilder_component_files_folders`
--

INSERT INTO `#__componentbuilder_component_files_folders` (`id`, `addfiles`, `addfolders`, `joomla_component`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `addfilesfullpath`, `addfoldersfullpath`) VALUES
(27, '', '', 25, '', 1, '2017-10-28 03:56:26', '0000-00-00 00:00:00', 2, '', '', '', '');

--
-- Dumping data for table `#__componentbuilder_snippet_type`
--

INSERT INTO `#__componentbuilder_snippet_type` (`id`, `name`, `description`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
(1, 'Layout', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 1),
(2, 'Navigations', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 2),
(3, 'Elements', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 3),
(4, 'Common', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 4),
(5, 'JavaScript', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 5),
(6, 'Charts', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 6),
(7, 'Alerts', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 7),
(8, 'Badges', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 8),
(9, 'Breadcrumbs', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 9),
(10, 'Buttons', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 10),
(11, 'Button Groups', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 11),
(12, 'Button Modifiers', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 12),
(13, 'Cards', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 13),
(14, 'Carousel', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 14),
(15, 'Collapse', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 15),
(16, 'Dropdowns', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 16),
(17, 'Forms', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 17),
(18, 'Form Input Groups', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 18),
(19, 'Custom Forms', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 19),
(20, 'Grid', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 20),
(21, 'Images', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 21),
(22, 'Jumbotron', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 22),
(23, 'List Group', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 23),
(24, 'Media Objects', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 24),
(25, 'Modal', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 25),
(26, 'Navs', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 26),
(27, 'Navbar', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 27),
(28, 'Pagination', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 28),
(29, 'Popover', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 29),
(30, 'Progress', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 30),
(31, 'Scrollspy', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 31),
(32, 'Tables', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 32),
(33, 'Tooltips', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 33),
(34, 'Typography', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 34),
(35, 'Utility: Borders', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 35),
(36, 'Utility: Colors', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 36),
(37, 'Utility: Display', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 37),
(38, 'Utility: Flexbox', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 38),
(39, 'Utility: Misc', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 39),
(40, 'Utility: Positioning', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 40),
(41, 'Utility: Sizing', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 41),
(42, 'Utility: Spacing', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 42),
(43, 'Utility: Text', '', '', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, '', 43);

--
-- Dumping data for table `#__componentbuilder_library_config`
--

INSERT INTO `#__componentbuilder_library_config` (`id`, `addconfig`, `library`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
(1, '{\"addconfig0\":{\"field\":\"2635\",\"custom_value\":\"\",\"tabname\":\"Icon Settings\"},\"addconfig1\":{\"field\":\"2636\",\"custom_value\":\"\",\"tabname\":\"Icon Settings\"},\"addconfig2\":{\"field\":\"2639\",\"custom_value\":\"\",\"tabname\":\"Icon Settings\"},\"addconfig3\":{\"field\":\"2637\",\"custom_value\":\"\",\"tabname\":\"Icon Settings\"},\"addconfig4\":{\"field\":\"2638\",\"custom_value\":\"\",\"tabname\":\"Icon Settings\"},\"addconfig7\":{\"field\":\"2640\",\"custom_value\":\"\",\"tabname\":\"Icon Settings\"},\"addconfig6\":{\"field\":\"2641\",\"custom_value\":\"\",\"tabname\":\"Icon Settings\"},\"addconfig5\":{\"field\":\"2642\",\"custom_value\":\"\",\"tabname\":\"Icon Settings\"}}', 7, '', 1, '2019-10-03 09:55:37', '2019-10-03 16:41:01', 2, '', 1);

--
-- Dumping data for table `#__componentbuilder_library_files_folders_urls`
--

INSERT INTO `#__componentbuilder_library_files_folders_urls` (`id`, `addfiles`, `addfolders`, `addurls`, `library`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
(2, '', '', '{\"addurls0\":{\"url\":\"https:\\/\\/maxcdn.bootstrapcdn.com\\/bootstrap\\/4.0.0-alpha.6\\/js\\/bootstrap.min.js\",\"type\":\"2\"},\"addurls1\":{\"url\":\"https:\\/\\/maxcdn.bootstrapcdn.com\\/bootstrap\\/4.0.0-alpha.6\\/css\\/bootstrap.min.css\",\"type\":\"2\"}}', 2, '', 1, '2017-11-25 16:17:36', '2018-05-02 23:29:05', 11, '', 2),
(3, '{}', '{}', '{\"addurls2\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.6.22\\/dist\\/css\\/uikit.min.css\",\"type\":2},\"addurls0\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.6.22\\/dist\\/js\\/uikit.min.js\",\"type\":2},\"addurls1\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.6.22\\/dist\\/js\\/uikit-icons.min.js\",\"type\":2}}', 3, '', 1, '2017-11-25 21:47:40', '2021-05-27 00:16:34', 11, '', 3),
(4, '{}', '{\"addfolders0\":{\"folder\":\"file_icon_vectors\",\"path\":\"\\/media\\/vector\",\"rename\":\"1\"}}', '{}', 7, '', 1, '2019-10-03 09:24:30', '2019-10-03 09:25:39', 2, '', 4),
(5, '{}', '{}', '{\"addurls0\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/grapesjs\\/0.14.15\\/css\\/grapes.min.css\",\"type\":2},\"addurls2\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/grapesjs\\/0.14.15\\/grapes.min.js\",\"type\":2}}', 8, '', 1, '2020-02-10 21:34:33', '2020-02-18 21:12:35', 5, '', 5),
(6, '{}', '{}', '{\"addurls0\":{\"url\":\"https:\\/\\/raw.githubusercontent.com\\/artf\\/grapesjs-preset-webpage\\/master\\/dist\\/grapesjs-preset-webpage.min.css\",\"type\":2},\"addurls1\":{\"url\":\"https:\\/\\/raw.githubusercontent.com\\/artf\\/grapesjs-preset-webpage\\/master\\/dist\\/grapesjs-preset-webpage.min.js\",\"type\":2},\"addurls2\":{\"url\":\"https:\\/\\/static.filestackapi.com\\/v3\\/filestack-0.1.10.js\",\"type\":2}}', 9, '', 1, '2020-02-18 21:13:16', '2020-02-18 21:14:11', 2, '', 5),
(7, '{}', '{}', '{\"addurls0\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/vue\",\"type\":3}}', 10, '', 1, '2020-06-05 13:11:54', '0000-00-00 00:00:00', 1, '', 6),
(8, '{}', '{}', '{\"addurls2\":{\"url\":\"https:\\/\\/cdn.datatables.net\\/1.10.21\\/js\\/jquery.dataTables.min.js\",\"type\":2},\"addurls1\":{\"url\":\"https:\\/\\/cdn.datatables.net\\/1.10.21\\/css\\/dataTables.uikit.min.css\",\"type\":2}}', 11, '', 1, '2020-06-27 21:34:44', '0000-00-00 00:00:00', 1, '', 7),
(9, '{}', '{}', '{\"addurls3\":{\"url\":\"http:\\/\\/code.jquery.com\\/ui\\/1.11.1\\/themes\\/smoothness\\/jquery-ui.css\",\"type\":2},\"addurls0\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/jquery-ui-timepicker-addon\\/1.6.3\\/jquery-ui-timepicker-addon.min.css\",\"type\":2},\"addurls1\":{\"url\":\"http:\\/\\/code.jquery.com\\/ui\\/1.11.1\\/jquery-ui.min.js\",\"type\":2},\"addurls2\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/jquery-ui-timepicker-addon\\/1.6.3\\/jquery-ui-timepicker-addon.min.js\",\"type\":2}}', 12, '', 1, '2020-06-29 00:00:44', '2020-06-29 04:32:57', 4, '', 8),
(10, '{}', '{}', '{\"addurls0\":{\"url\":\"https:\\/\\/cdn.datatables.net\\/v\\/dt\\/jszip-2.5.0\\/dt-1.11.5\\/b-2.2.2\\/b-colvis-2.2.2\\/b-html5-2.2.2\\/b-print-2.2.2\\/cr-1.5.5\\/date-1.1.2\\/fc-4.0.2\\/fh-3.2.2\\/kt-2.6.4\\/r-2.2.9\\/rg-1.1.4\\/rr-1.2.8\\/sc-2.0.5\\/sb-1.3.2\\/sp-2.0.0\\/sl-1.3.4\\/sr-1.1.0\\/datatables.min.css\",\"type\":3},\"addurls1\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/pdfmake\\/0.1.36\\/pdfmake.min.js\",\"type\":3},\"addurls2\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/pdfmake\\/0.1.36\\/vfs_fonts.js\",\"type\":3},\"addurls3\":{\"url\":\"https:\\/\\/cdn.datatables.net\\/v\\/dt\\/jszip-2.5.0\\/dt-1.11.5\\/b-2.2.2\\/b-colvis-2.2.2\\/b-html5-2.2.2\\/b-print-2.2.2\\/cr-1.5.5\\/date-1.1.2\\/fc-4.0.2\\/fh-3.2.2\\/kt-2.6.4\\/r-2.2.9\\/rg-1.1.4\\/rr-1.2.8\\/sc-2.0.5\\/sb-1.3.2\\/sp-2.0.0\\/sl-1.3.4\\/sr-1.1.0\\/datatables.min.js\",\"type\":3}}', 13, '', 1, '2022-10-17 20:56:24', '0000-00-00 00:00:00', 1, '', 9),
(11, '{}', '{}', '{\"addurls0\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/nouislider\\/dist\\/nouislider.min.css\",\"type\":2},\"addurls1\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/nouislider\\/dist\\/nouislider.min.js\",\"type\":2}}', 14, '', 1, '2023-06-26 15:02:42', '2023-07-24 18:11:41', 3, '', 10),
(12, '{}', '{}', '{\"addurls4\":{\"url\":\"https:\\/\\/cdn.datatables.net\\/v\\/bs5\\/jszip-3.10.1\\/dt-2.0.2\\/b-3.0.1\\/b-colvis-3.0.1\\/b-html5-3.0.1\\/b-print-3.0.1\\/cr-2.0.0\\/date-1.5.2\\/fc-5.0.0\\/fh-4.0.1\\/kt-2.12.0\\/r-3.0.0\\/rg-1.5.0\\/rr-1.5.0\\/sc-2.4.1\\/sb-1.7.0\\/sp-2.3.0\\/sl-2.0.0\\/sr-1.4.0\\/datatables.min.css\",\"type\":3},\"addurls1\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/pdfmake\\/0.2.7\\/pdfmake.min.js\",\"type\":3},\"addurls2\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/pdfmake\\/0.2.7\\/vfs_fonts.js\",\"type\":3},\"addurls3\":{\"url\":\"https:\\/\\/cdn.datatables.net\\/v\\/bs5\\/jszip-3.10.1\\/dt-2.0.2\\/b-3.0.1\\/b-colvis-3.0.1\\/b-html5-3.0.1\\/b-print-3.0.1\\/cr-2.0.0\\/date-1.5.2\\/fc-5.0.0\\/fh-4.0.1\\/kt-2.12.0\\/r-3.0.0\\/rg-1.5.0\\/rr-1.5.0\\/sc-2.4.1\\/sb-1.7.0\\/sp-2.3.0\\/sl-2.0.0\\/sr-1.4.0\\/datatables.min.js\",\"type\":3}}', 15, '', 1, '2024-03-09 16:27:28', '2024-03-09 16:29:30', 2, '', 9);


CREATE TABLE IF NOT EXISTS `#__componentbuilder_external_code` (
	`target` VARCHAR(255) NOT NULL DEFAULT '',
	`hash` VARCHAR(64) NOT NULL DEFAULT '',
	PRIMARY KEY  (`target`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;



--
-- Always insure this column name is large enough for long component and view names.
--
ALTER TABLE `#__assets` CHANGE `name` `name` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'The unique name for the asset.';
