diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql
index 3d7e95c8c..973901285 100644
--- a/admin/sql/install.mysql.utf8.sql
+++ b/admin/sql/install.mysql.utf8.sql
@@ -3,7 +3,7 @@ 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.',
+ `asset_id` INT(10) unsigned 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,
@@ -86,7 +86,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_component` (
`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,
+ `remove_line_breaks` TINYINT(1) NOT NULL DEFAULT 1,
`sales_server` INT(11) NOT NULL DEFAULT 0,
`short_description` VARCHAR(255) NOT NULL DEFAULT '',
`sql` MEDIUMTEXT NOT NULL,
@@ -99,15 +99,15 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_component` (
`update_server_url` VARCHAR(255) NOT NULL DEFAULT '',
`website` CHAR(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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
`metakey` TEXT,
`metadesc` TEXT,
`metadata` TEXT,
@@ -163,7 +163,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_component` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -207,17 +207,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_system_name` (`system_name`),
KEY `idx_add_php_method_uninstall` (`add_php_method_uninstall`),
@@ -244,7 +244,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -285,17 +285,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_system_name` (`system_name`),
KEY `idx_class_extends` (`class_extends`),
@@ -324,23 +324,23 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_system_name` (`system_name`),
KEY `idx_guid` (`guid`),
@@ -353,7 +353,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_power` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -380,17 +380,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_power` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_system_name` (`system_name`),
KEY `idx_namespace` (`namespace`),
@@ -409,7 +409,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_power` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -503,17 +503,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_view` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name_single` (`name_single`),
KEY `idx_add_fadein` (`add_fadein`),
@@ -564,7 +564,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_view` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -602,17 +602,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_custom_admin_view` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_main_get` (`main_get`),
@@ -639,7 +639,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_custom_admin_view` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -677,17 +677,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_site_view` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_main_get` (`main_get`),
@@ -715,7 +715,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_site_view` (
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.',
+ `asset_id` INT(10) unsigned 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 '',
@@ -726,17 +726,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_template` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_dynamic_get` (`dynamic_get`),
@@ -751,7 +751,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_template` (
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.',
+ `asset_id` INT(10) unsigned 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 '',
@@ -762,17 +762,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_layout` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_dynamic_get` (`dynamic_get`),
@@ -787,7 +787,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_layout` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -823,17 +823,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_dynamic_get` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_main_source` (`main_source`),
@@ -857,7 +857,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_dynamic_get` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -870,19 +870,19 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_custom_code` (
`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,
+ `type` TINYINT(1) 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_component` (`component`),
KEY `idx_target` (`target`),
@@ -899,7 +899,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_custom_code` (
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.',
+ `asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`comment` TEXT NOT NULL,
`default` TEXT NOT NULL,
`extension_type` VARCHAR(64) NOT NULL DEFAULT '',
@@ -908,17 +908,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_class_property` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_visibility` (`visibility`),
@@ -933,7 +933,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_class_property` (
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.',
+ `asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`arguments` TEXT NOT NULL,
`code` MEDIUMTEXT NOT NULL,
`comment` TEXT NOT NULL,
@@ -943,17 +943,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_class_method` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_visibility` (`visibility`),
@@ -968,21 +968,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_class_method` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_target` (`target`),
KEY `idx_access` (`access`),
@@ -994,7 +994,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_placeholder` (
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.',
+ `asset_id` INT(10) unsigned 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 '',
@@ -1005,17 +1005,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_library` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_how` (`how`),
@@ -1029,7 +1029,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_library` (
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.',
+ `asset_id` INT(10) unsigned 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 '',
@@ -1044,17 +1044,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_snippet` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_type` (`type`),
@@ -1069,23 +1069,23 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_snippet` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_access` (`access`),
@@ -1097,7 +1097,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_validation_rule` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -1124,17 +1124,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_field` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_fieldtype` (`fieldtype`),
@@ -1160,7 +1160,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_field` (
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.',
+ `asset_id` INT(10) unsigned 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 '',
@@ -1177,17 +1177,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_fieldtype` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_null_switch` (`null_switch`),
@@ -1209,24 +1209,24 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_fieldtype` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_access` (`access`),
KEY `idx_checkout` (`checked_out`),
@@ -1237,21 +1237,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_language_translation` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_access` (`access`),
@@ -1263,7 +1263,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_language` (
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.',
+ `asset_id` INT(10) unsigned 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 '',
@@ -1277,17 +1277,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_server` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_protocol` (`protocol`),
@@ -1300,9 +1300,9 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_server` (
CREATE TABLE IF NOT EXISTS `#__componentbuilder_repository` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
- `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
- `access_repo` TINYINT(1) NOT NULL DEFAULT 0,
- `addplaceholders` TEXT NOT NULL,
+ `asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
+ `access_repo` TINYINT(1) NULL DEFAULT 0,
+ `addplaceholders` TEXT NULL,
`base` VARCHAR(255) NOT NULL DEFAULT '',
`guid` VARCHAR(36) NOT NULL DEFAULT '',
`organisation` VARCHAR(255) NOT NULL DEFAULT '',
@@ -1315,17 +1315,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_repository` (
`username` VARCHAR(255) NULL DEFAULT '',
`write_branch` VARCHAR(255) 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_system_name` (`system_name`),
KEY `idx_organisation` (`organisation`),
@@ -1347,7 +1347,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_repository` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -1360,16 +1360,16 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_help_document` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_title` (`title`),
KEY `idx_type` (`type`),
@@ -1385,21 +1385,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_help_document` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_admin_view` (`admin_view`),
KEY `idx_access` (`access`),
@@ -1411,21 +1411,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_fields` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_admin_view` (`admin_view`),
KEY `idx_access` (`access`),
@@ -1437,21 +1437,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_fields_conditions` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_admin_view` (`admin_view`),
KEY `idx_access` (`access`),
@@ -1463,21 +1463,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_fields_relations` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_admin_view` (`admin_view`),
KEY `idx_access` (`access`),
@@ -1489,21 +1489,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_custom_tabs` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1515,21 +1515,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_admin_views` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1541,21 +1541,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_site_views` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1567,21 +1567,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_custom_admin_views` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1593,21 +1593,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_updates` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1619,21 +1619,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_mysql_tweaks` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1645,7 +1645,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_custom_admin_menus` (
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.',
+ `asset_id` INT(10) unsigned 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,
@@ -1655,17 +1655,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_router` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1677,21 +1677,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_router` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1703,22 +1703,22 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_config` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1730,24 +1730,24 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_dashboard` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1759,21 +1759,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_files_folders` (
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,
+ `asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
+ `addplaceholders` TEXT 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1785,21 +1785,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_placeholders` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1811,21 +1811,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_plugins` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_component` (`joomla_component`),
KEY `idx_access` (`access`),
@@ -1837,21 +1837,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_modules` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_access` (`access`),
@@ -1863,21 +1863,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_snippet_type` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_library` (`library`),
KEY `idx_access` (`access`),
@@ -1889,7 +1889,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_library_config` (
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.',
+ `asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`addfiles` TEXT NOT NULL,
`addfilesfullpath` TEXT NOT NULL,
`addfolders` TEXT NOT NULL,
@@ -1897,17 +1897,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_library_files_folders_urls` (
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_library` (`library`),
KEY `idx_access` (`access`),
@@ -1919,23 +1919,23 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_library_files_folders_urls` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_access` (`access`),
@@ -1947,21 +1947,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_class_extends` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_module` (`joomla_module`),
KEY `idx_access` (`access`),
@@ -1973,7 +1973,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module_updates` (
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.',
+ `asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`addfiles` TEXT NOT NULL,
`addfilesfullpath` TEXT NOT NULL,
`addfolders` TEXT NOT NULL,
@@ -1981,17 +1981,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module_files_folders_urls
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_module` (`joomla_module`),
KEY `idx_access` (`access`),
@@ -2003,21 +2003,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module_files_folders_urls
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`),
KEY `idx_class_extends` (`class_extends`),
@@ -2030,21 +2030,21 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_group` (
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.',
+ `asset_id` INT(10) unsigned 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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_plugin` (`joomla_plugin`),
KEY `idx_access` (`access`),
@@ -2056,7 +2056,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_updates` (
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.',
+ `asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`addfiles` TEXT NOT NULL,
`addfilesfullpath` TEXT NOT NULL,
`addfolders` TEXT NOT NULL,
@@ -2064,17 +2064,17 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_files_folders_urls
`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,
+ `published` TINYINT(3) NULL DEFAULT 1,
+ `created_by` INT(10) unsigned NULL DEFAULT 0,
+ `modified_by` INT(10) unsigned NULL DEFAULT 0,
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME DEFAULT NULL,
- `checked_out` int(11) unsigned NOT NULL DEFAULT 0,
+ `checked_out` int(11) unsigned 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,
+ `version` INT(10) unsigned NULL DEFAULT 1,
+ `hits` INT(10) unsigned NULL DEFAULT 0,
+ `access` INT(10) unsigned NULL DEFAULT 0,
+ `ordering` INT(11) NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_joomla_plugin` (`joomla_plugin`),
KEY `idx_access` (`access`),
@@ -2088,74 +2088,46 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_files_folders_urls
-- 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_jcb_powers_path`, `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`, `jcb_powers_path`, `joomla_source_link`, `license`, `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_method_install`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_update`, `php_site_event`, `preferred_joomla_version`, `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`, `params`, `published`, `version`, `hits`, `access`, `ordering`) VALUES
-(25, '', '', '', '', '', '', '', 1, 1, '', '', 1, '', '', 1, 1, 1, 1, '', 1, '', '', '', '', 1, '{}', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '5.0.0', 'Copyright (C) 2015. All Rights Reserved', '2016-10-18 11:44:09', '', '6Czr+0dclpw2DP5349CySufDDZodETdRK6PqgAgsWmQ=', 'L+Zxx5r4izmuIH34ys5WjJeugFu7belTFg667n9FLJ4=', '', 'xiJ4RIc7//ZBwlPpTwqeyUV6wVjPPuseC+m4E5bsVP8=', '', '', '', 1, '', 'Just a basic demo of the most basic implementations of the [Joomla](http://www.joomla.org) Component Builder\'s ability.', 'joomla@vdm.io', '', '', 'Hql5z9PBZh7yhl1OSKkD5WOZSiuybVKCqiFBvJaF/H8=', '', 'efde995e-60aa-4b39-b644-44349dfb660d', 'images/vdm/demo500.jpg', '', 'libraries/jcb_demo', 'https://github.com/Llewellynvdm/Joomla-Demo-Component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', '»', '2024-07-27 20:27:52', '', 'Demo', 'Demo', 'JCB', 4, '', '', 'CS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGZhbmN5IGRhdGUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RGF0ZSgkZGF0ZSkNCgl7DQoJCWlmICghc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkZGF0ZSkpDQoJCXsNCgkJCSRkYXRlID0gc3RydG90aW1lKCRkYXRlKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnalMgXG9cZiBGIFknLCRkYXRlKTsNCgl9DQoNCgkvKioNCgkgKglDaGFuZ2UgdG8gbmljZSBmYW5jeSB0aW1lIGFuZCBkYXRlDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeURhdGVUaW1lKCR0aW1lKQ0KCXsNCgkJaWYgKCFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCR0aW1lKSkNCgkJew0KCQkJJHRpbWUgPSBzdHJ0b3RpbWUoJHRpbWUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCcoRzppKSBqUyBcb1xmIEYgWScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGhvdXI6bWludXRlcyB0aW1lDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeVRpbWUoJHRpbWUpDQoJew0KCQlpZiAoIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJHRpbWUpKQ0KCQl7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgkdGltZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ0c6aScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIHRpbWUgc3RhbXANCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWRUaW1lU3RhbXAoJHRpbWVzdGFtcCkNCgl7DQoJCXJldHVybiAoKGludCkgJHRpbWVzdGFtcCA9PT0gJHRpbWVzdGFtcCkNCgkJJiYgKCR0aW1lc3RhbXAgPD0gUEhQX0lOVF9NQVgpDQoJCSYmICgkdGltZXN0YW1wID49IH5QSFBfSU5UX01BWCk7DQoJfQ==', '', '', '', 'CQkJLy8gQ2hlY2sgdGhhdCB0aGUgZGF0YWJhc2UgaXMgdXAtdG8gZGF0ZQ0KCQkJaWYgKCR0aGlzLT5jbGFzc0V4aXN0cyhTdXBlcl9fXzcwOWQ3Mjk0XzlhNDNfNDZlMl9iNjRlX2QxNmExNmYwZWFiMV9fX1Bvd2VyOjpjbGFzcykpDQoJCQl7DQoJCQkJKG5ldyBTdXBlcl9fXzcwOWQ3Mjk0XzlhNDNfNDZlMl9iNjRlX2QxNmExNmYwZWFiMV9fX1Bvd2VyKCkpLT5ydW4oKTsNCgkJCX0NCg0KCQkJLy8gR2V0IEFwcGxpY2F0aW9uIG9iamVjdA0KCQkJJHRoaXMtPmFwcCA/Pz0gRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKTsNCgkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKCdUaGlzIGlzIGEgZGVtbyBjb21wb25lbnQgZGV2ZWxvcGVkIGluIDxhIGhyZWY9Imh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIiIHRhZ2V0PSJfYmFsbmsiIHRpdGxlPSJKb29tbGEgQ29tcG9uZW50IEJ1aWxkZXIiPkpDQjwvYT4hIFlvdSBjYW4gYnVpbGQgbW9yZSBjb21wb25lbnRzIGxpa2UgdGhpcyB3aXRoIEpDQiwgY2hlY2tvdXQgb3VyIHBhZ2Ugb24gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIiIHRhZ2V0PSJfYmFsbmsiIHRpdGxlPSJKb29tbGEgQ29tcG9uZW50IEJ1aWxkZXIiPmdpdGh1YjwvYT4gZm9yIG1vcmUgaW5mby4gVGhlIGZ1dHVyZSBvZiA8YSBocmVmPSJodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyIiB0YWdldD0iX2JhbG5rIiB0aXRsZT0iSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIj5Kb29tbGEgQ29tcG9uZW50IERldmVsb3BtZW50PC9hPiBpcyBIZXJlIScsICdJbmZvJyk7', 'CQkJLy8gQ2hlY2sgdGhhdCB0aGUgZGF0YWJhc2UgaXMgdXAtdG8gZGF0ZQ0KCQkJaWYgKCR0aGlzLT5jbGFzc0V4aXN0cyhTdXBlcl9fXzcwOWQ3Mjk0XzlhNDNfNDZlMl9iNjRlX2QxNmExNmYwZWFiMV9fX1Bvd2VyOjpjbGFzcykpDQoJCQl7DQoJCQkJKG5ldyBTdXBlcl9fXzcwOWQ3Mjk0XzlhNDNfNDZlMl9iNjRlX2QxNmExNmYwZWFiMV9fX1Bvd2VyKCkpLT5ydW4oKTsNCgkJCX0=', 'CQkJLy8gQ2hlY2sgdGhhdCB0aGUgUEhQIGNvbmZpZ3VyYXRpb25zIGFyZSBzdWZmaWNpZW50IA0KCQkJaWYgKCR0aGlzLT5jbGFzc0V4aXN0cyhTdXBlcl9fXzRiMmQ2ZjI4XzM0NmVfNDZlY19iZjI0X2Q0NzAzMTljY2EyZF9fX1Bvd2VyOjpjbGFzcykpDQoJCQl7DQoJCQkJKG5ldyBTdXBlcl9fXzRiMmQ2ZjI4XzM0NmVfNDZlY19iZjI0X2Q0NzAzMTljY2EyZF9fX1Bvd2VyKCkpLT5ydW4oKTsNCgkJCX0=', 'CQkJLy8gQ2hlY2sgdGhhdCB0aGUgUEhQIGNvbmZpZ3VyYXRpb25zIGFyZSBzdWZmaWNpZW50IA0KCQkJaWYgKCR0aGlzLT5jbGFzc0V4aXN0cyhTdXBlcl9fXzRiMmQ2ZjI4XzM0NmVfNDZlY19iZjI0X2Q0NzAzMTljY2EyZF9fX1Bvd2VyOjpjbGFzcykpDQoJCQl7DQoJCQkJKG5ldyBTdXBlcl9fXzRiMmQ2ZjI4XzM0NmVfNDZlY19iZjI0X2Q0NzAzMTljY2EyZF9fX1Bvd2VyKCkpLT5ydW4oKTsNCgkJCX0=', '', 5, '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/', '{\"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, 63, '', 1, 10);
+INSERT INTO `#__componentbuilder_joomla_component` (`id`, `add_menu_prefix`, `add_namespace_prefix`, `menu_prefix`, `mvc_versiondate`, `add_css_admin`, `add_css_site`, `add_email_helper`, `add_git_folder_path`, `add_javascript`, `add_jcb_powers_path`, `add_php_helper_admin`, `add_php_helper_both`, `add_php_helper_site`, `add_php_method_install`, `add_php_postflight_install`, `add_php_method_uninstall`, `add_php_postflight_update`, `add_php_preflight_install`, `add_php_preflight_update`, `add_placeholders`, `add_powers`, `add_sql`, `add_sql_uninstall`, `addcontributors`, `addfootable`, `adduikit`, `assets_table_fix`, `add_admin_event`, `add_backup_folder_path`, `add_site_event`, `add_update_server`, `add_sales_server`, `sales_server`, `update_server`, `update_server_target`, `php_admin_event`, `php_site_event`, `preferred_joomla_version`, `addreadme`, `readme`, `remove_line_breaks`, `author`, `backup_folder_path`, `bom`, `buildcomp`, `buildcompsql`, `companyname`, `component_version`, `update_server_url`, `copyright`, `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`, `joomla_source_link`, `export_key`, `git_folder_path`, `guid`, `image`, `javascript`, `jcb_powers_path`, `license`, `name`, `system_name`, `toignore`, `translation_tool`, `name_code`, `namespace_prefix`, `number`, `php_helper_admin`, `php_helper_both`, `php_helper_site`, `php_method_install`, `php_postflight_install`, `php_method_uninstall`, `php_postflight_update`, `php_preflight_install`, `php_preflight_update`, `short_description`, `sql`, `sql_uninstall`, `website`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `metakey`, `metadesc`, `metadata`) VALUES
+(25, 1, 1, '»', '', '', '', '', '', '', 1, '', 1, '', '', 1, '', 1, 1, 1, '', 1, '', '', '{}', '', 3, 3, '', '', '', 1, '', '', '', 2, '', '', 5, 1, 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25hbWliaWEvZGVtby1qb29tbGEtMy1jb21wb25lbnQvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvdmRtLWNvbXBvbmVudC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCltDVVNUT01DT0RFPXJlYWRNRWNvbnRyaWJ1dG9yc10=', 1, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '5.0.0', 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Demo-Component/master/demo_updateserver.xml', 'Copyright (C) 2015. All Rights Reserved', '', 'WRXn/cc9LwB1KVbzzRFFIepQNx++BKWgKzCywK2tTdY=', 'leP0yRviVA27p84l8xp4MBqrCuILYGSLUh8jeeysxgA=', '', 'W8LKdLNNiJooa3nQ59LqueLc66XF+2aViSJBN8rhX0U=', '', '', '', 1, '', 'This is just a simple demonstration showcasing the most basic functionality of the [Joomla!](http://www.joomla.org) Component Builder (JCB). While this example covers the fundamentals, JCB offers a wide range of powerful features and customization options for building advanced Joomla! extensions with ease.', 'joomla@vdm.io', '', '', 'https://github.com/Llewellynvdm/Joomla-Demo-Component', 'xK6ABhxXjWLMdbRzgZlNlqUcpqAkWEMYSTA5OgfQ8ac=', '', 'efde995e-60aa-4b39-b644-44349dfb660d', 'images/vdm/demo500.jpg', '', 'libraries/jcb_demo', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 'Demo', 'Demo (public)', '.git', '', 'Demo', 'Demo', 4, '', 'W0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0=', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGxdDQpbQ1VTVE9NQ09ERT11bmxvY2tUaGVQb3dlck9mSm9vbWxhRGV2ZWxvcG1lbnQrRGVtb10=', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGxd', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbF0=', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbF0=', 'Demo Component', '', '', 'https://www.vdm.io/', '{\"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, '2016-10-18 11:44:09', '2024-09-16 23:03:54', 75, '', 10, '', '', '{\"robots\":\"\",\"rights\":\"\"}');
+
+--
+-- Dumping data for table `#__componentbuilder_joomla_module`
+--
+
+INSERT INTO `#__componentbuilder_joomla_module` (`id`, `class_helper_code`, `class_helper_header`, `add_class_helper`, `add_class_helper_header`, `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`, `custom_get`, `default`, `description`, `fields`, `guid`, `libraries`, `mod_code`, `module_version`, `name`, `php_method_uninstall`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_uninstall`, `php_preflight_update`, `php_script_construct`, `readme`, `sales_server`, `sql`, `sql_uninstall`, `system_name`, `target`, `update_server`, `update_server_target`, `update_server_url`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES
+(8, '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', 'PGgxPjw/cGhwIGVjaG8gSm9vbWxhX19fYmE2MzI2ZWZfY2I3OV80MzQ4XzgwZjRfYWIwODYwODJlM2M1X19fUG93ZXI6Ol8oJ2NQYW5lbCBSZWRpcmVjdCcpOyA/PjwvaDE+DQo8cD48P3BocCBlY2hvIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdTZXR1cCB5b3VyIHJlZGlyZWN0IGluIHRoZSBhZG1pbiBtb2RlbCA8Yj5jUGFuZWwgUmVkaXJlY3Q8L2I+IG9yIGNoYW5nZSB0aGlzIG1vZGVscyA8Yj5BY2Nlc3M8L2I+IHRvIG5vdCB0YXJnZXQgdGhpcyB1c2VycyBhY2Nlc3MgbGV2ZWwuJyk7ID8+PC9wPg==', 'To Redirect your Control Panel to any other part of the admin area in your Joomla for a selected group of users', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Details\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3044\",\"custom_value\":\"\"}}}}', 'c013529f-2a8d-4e93-8767-ed2583867aeb', '', 'Ly8gZ2V0IHRoZSBzZXQgdmFsdWVzIGZvcm0gY3BhbmVsIHJlZGlyZWN0IG1vZHVsZQ0KJHJlZGlyZWN0ID0gJHBhcmFtcy0+Z2V0KCdyZWRpcmVjdCcsbnVsbCk7DQoNCi8vIHJlZGlyZWN0IGlmIHRoZSB1c2VyIGlzIGluIGdpdmVuIHNlbGVjdGVkIGdyb3VwDQppZiAoJHJlZGlyZWN0ICYmIGlzX29iamVjdCgkcmVkaXJlY3QpICYmIGNvdW50KChhcnJheSkkcmVkaXJlY3QpID4gMCkNCnsNCgkvLyBnZXQgYXBwbGljYXRpb24NCgkkYXBwID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldEFwcGxpY2F0aW9uKCk7DQoJLy8gc2V0IHRoZSB1c2VyIG9iamVjdA0KCSR1c2VyID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldFVzZXIoKTsNCgkvLyBnZXQgdXNlciBncm91cHMNCgkkZ3JvdXBzCT0gKGFycmF5KSAkdXNlci0+Z2V0QXV0aG9yaXNlZEdyb3VwcygpOw0KCS8vIGxvb3Agb3ZlciB0aGUgc2V0IHZhbHVlcw0KCWZvcmVhY2ggKCRyZWRpcmVjdCBhcyAkZ28pDQoJew0KCQlpZiAoaXNfb2JqZWN0KCRnbykpDQoJCXsNCgkJCWlmIChpc19hcnJheSgkZ28tPmdyb3VwcykgJiYgY291bnQoJGdvLT5ncm91cHMpKQ0KCQkJew0KCQkJCWlmIChhcnJheV9pbnRlcnNlY3QoJGdvLT5ncm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gbWF0Y2ggZm91bmQgLSByZWRpcmVjdA0KCQkJCQkkYXBwLT5yZWRpcmVjdCgkZ28tPnVybCk7DQoJCQkJCWJyZWFrOw0KDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyBnZXQgdGhlIG1vZHVsZSBjbGFzcyBzZnggKGxvY2FsKQ0KJG1vZHVsZWNsYXNzX3NmeCA9IGh0bWxzcGVjaWFsY2hhcnMoJHBhcmFtcy0+Z2V0KCdtb2R1bGVjbGFzc19zZngnKSwgRU5UX0NPTVBBVCwgJ1VURi04Jyk7DQoNCi8vIGxvYWQgdGhlIGRlZmF1bHQgVG1wbA0KcmVxdWlyZSBKb29tbGFfX19mMTVkNTU2ZF8zM2RkXzRlZTNfYTBmN18wNjUzZTRhN2ExZTRfX19Qb3dlcjo6Z2V0TGF5b3V0UGF0aCgnbW9kX1tbW21vZHVsZV1dXScsICRwYXJhbXMtPmdldCgnbGF5b3V0JywgJ2RlZmF1bHQnKSk7', '5.0.0', 'cPanelRedirect', '', '', '', 'Ly8gVE9ETyBwcmVmbGlnaHQgbXVzdCBiZSBhbiBpbnN0YW5jZS4uLg==', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'cPanel Redirect', 2, '', 1, '', '', 1, '2016-06-01 10:20:06', '2024-09-10 15:31:03', 23, '', 1, 7),
+(9, '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', 'PGgxPjw/cGhwIGVjaG8gSm9vbWxhX19fYmE2MzI2ZWZfY2I3OV80MzQ4XzgwZjRfYWIwODYwODJlM2M1X19fUG93ZXI6Ol8oJ1NpdGUgUmVkaXJlY3QnKTsgPz48L2gxPg0KPHA+PD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnU2V0dXAgeW91ciByZWRpcmVjdCBpbiB0aGUgc2l0ZSBtb2RlbCA8Yj5TaXRlIFJlZGlyZWN0PC9iPiBvciBjaGFuZ2UgdGhpcyBtb2RlbHMgPGI+QWNjZXNzPC9iPiB0byBub3QgdGFyZ2V0IHRoaXMgdXNlcnMgYWNjZXNzIGxldmVsLicpOyA/PjwvcD4=', 'To Redirect your Site Page to any other part of the admin area in your Joomla for a selected group of users', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Details\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3044\",\"custom_value\":\"\"}}}}', '21c9f6f5-3193-485d-94e7-f9c789a9fa2e', '', 'Ly8gZ2V0IHRoZSBzZXQgdmFsdWVzIGZvcm0gY3BhbmVsIHJlZGlyZWN0IG1vZHVsZQ0KJHJlZGlyZWN0ID0gJHBhcmFtcy0+Z2V0KCdyZWRpcmVjdCcsbnVsbCk7DQoNCi8vIHJlZGlyZWN0IGlmIHRoZSB1c2VyIGlzIGluIGdpdmVuIHNlbGVjdGVkIGdyb3VwDQppZiAoJHJlZGlyZWN0ICYmIGlzX29iamVjdCgkcmVkaXJlY3QpICYmIGNvdW50KChhcnJheSkkcmVkaXJlY3QpID4gMCkNCnsNCgkvLyBnZXQgYXBwbGljYXRpb24NCgkkYXBwID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldEFwcGxpY2F0aW9uKCk7DQoJLy8gc2V0IHRoZSB1c2VyIG9iamVjdA0KCSR1c2VyID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldFVzZXIoKTsNCgkvLyBnZXQgdXNlciBncm91cHMNCgkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0QXV0aG9yaXNlZEdyb3VwcygpOw0KCS8vIGxvb3Agb3ZlciB0aGUgc2V0IHZhbHVlcw0KCWZvcmVhY2ggKCRyZWRpcmVjdCBhcyAkZ28pDQoJew0KCQlpZiAoaXNfb2JqZWN0KCRnbykpDQoJCXsNCgkJCWlmIChpc19hcnJheSgkZ28tPmdyb3VwcykgJiYgY291bnQoJGdvLT5ncm91cHMpKQ0KCQkJew0KCQkJCWlmIChhcnJheV9pbnRlcnNlY3QoJGdvLT5ncm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gbWF0Y2ggZm91bmQgLSByZWRpcmVjdA0KCQkJCQkkYXBwLT5yZWRpcmVjdCgkZ28tPnVybCk7DQoJCQkJCWJyZWFrOw0KDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyBnZXQgdGhlIG1vZHVsZSBjbGFzcyBzZnggKGxvY2FsKQ0KJG1vZHVsZWNsYXNzX3NmeCA9IGh0bWxzcGVjaWFsY2hhcnMoJHBhcmFtcy0+Z2V0KCdtb2R1bGVjbGFzc19zZngnKSwgRU5UX0NPTVBBVCwgJ1VURi04Jyk7DQoNCi8vIGxvYWQgdGhlIGRlZmF1bHQgVG1wbA0KcmVxdWlyZSBKb29tbGFfX19mMTVkNTU2ZF8zM2RkXzRlZTNfYTBmN18wNjUzZTRhN2ExZTRfX19Qb3dlcjo6Z2V0TGF5b3V0UGF0aCgnbW9kX1tbW21vZHVsZV1dXScsICRwYXJhbXMtPmdldCgnbGF5b3V0JywgJ2RlZmF1bHQnKSk7', '5.0.0', 'SiteRedirect', '', '', '', 'Ly8gVE9ETyBwcmVmbGlnaHQgbXVzdCBiZSBhbiBpbnN0YW5jZS4uLg==', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Site Redirect', 1, '', 1, '', '', 1, '2016-06-01 10:20:06', '2024-09-16 16:08:09', 21, '', 1, 7),
+(10, 'CS8qKg0KCSAqIFRoZSBNb2R1bGUgUGFyYW1zDQoJICoNCgkgKiBAdmFyICAgIFJlZ2lzdHJ5DQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgJHBhcmFtczsNCg0KCS8qKg0KCSAqIFRoZSBZZWFycw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICR5ZWFyczsNCg0KCS8qKg0KCSAqIFRoZSBCcmFuY2hlcw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICRicmFuY2hlczsNCg0KCS8qKg0KCSAqIFRoZSBMZWdlbmQNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAkbGVnZW5kOw0KDQoJLyoqDQoJICogVGhlIFdpZHRoDQoJICoNCgkgKiBAdmFyICAgIGludA0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICR3aWR0aDsNCg0KCS8qKg0KCSAqIFRoZSBIZWlnaHQNCgkgKg0KCSAqIEB2YXIgICAgaW50DQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgJGhlaWdodDsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yDQoJICoNCgkgKiBAcGFyYW0gUmVnaXN0cnkgICRwYXJhbXMgIFRoZSBtb2R1bGUgcGFyYW1zDQoJICoNCgkgKiBAc2luY2UgMS4wLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUmVnaXN0cnkgJHBhcmFtcykNCgl7DQoJCSR0aGlzLT5wYXJhbXMgPSAkcGFyYW1zOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBZZWFycw0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB5ZWFycygpOiBhcnJheQ0KCXsNCgkJaWYgKGVtcHR5KCR0aGlzLT55ZWFycykpDQoJCXsNCgkJCSR0aGlzLT55ZWFycyA9IGl0ZXJhdG9yX3RvX2FycmF5KA0KCQkJCW5ldyBcRGF0ZVBlcmlvZCgNCgkJCQkJJHRoaXMtPm1pbigpLA0KCQkJCQluZXcgRGF0ZUludGVydmFsKCdQMVknKSwNCgkJCQkJJHRoaXMtPm1heCgpDQoJCQkJKQ0KCQkJKTsNCgkJfQ0KDQoJCXJldHVybiAkdGhpcy0+eWVhcnM7DQoJfQ0KDQoJLyoqDQoJICogR2V0IFdpZHRoDQoJICoNCgkgKiBAcmV0dXJuIGludA0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB3aWR0aCgpOiBpbnQNCgl7DQoJCWlmIChlbXB0eSgkdGhpcy0+d2lkdGgpKQ0KCQl7DQoJCQkkeWVhcnMgPSAkdGhpcy0+eWVhcnMoKTsNCg0KCQkJJHRoaXMtPndpZHRoID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdtYXJnaW5fbGVmdCcsIDgwKSArIA0KCQkJCSR0aGlzLT5wYXJhbXMtPmdldCgnbWFyZ2luX3JpZ2h0JywgNTApICsNCgkJCQkoKGNvdW50KCR5ZWFycykgLSAxKSAqICR0aGlzLT5wYXJhbXMtPmdldCgneWVhcl93aWR0aCcsIDEyMCkpOw0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT53aWR0aDsNCgl9DQoNCgkvKioNCgkgKiBHZXQgSGVpZ2h0DQoJICoNCgkgKiBAcmV0dXJuIGludA0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBoZWlnaHQoKTogaW50DQoJew0KCQlpZiAoZW1wdHkoJHRoaXMtPmhlaWdodCkpDQoJCXsNCgkJCSRicmFuY2hlcyA9ICR0aGlzLT5icmFuY2hlcygpOw0KDQoJCQkkdGhpcy0+aGVpZ2h0ID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdoZWFkZXJfaGVpZ2h0JywgIDI0KSArDQoJCQkJJHRoaXMtPnBhcmFtcy0+Z2V0KCdmb290ZXJfaGVpZ2h0JywgMjQpICsNCgkJCQkoY291bnQoJGJyYW5jaGVzKSAqICR0aGlzLT5wYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKSk7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPmhlaWdodDsNCgl9DQoNCgkvKioNCgkgKiBHZXQgQnJhbmNoZXMNCgkgKg0KCSAqIEZldGNoZXMgYW5kIHByb2Nlc3NlcyB0aGUgYnJhbmNoZXMgb3IgdmVyc2lvbnMgZnJvbSB0aGUgcGFyYW1ldGVycy4gDQoJICogSXQgc2FuaXRpemVzIHRoZSBicmFuY2ggZGF0YSwgY2FsY3VsYXRlcyB0aGVpciBwb3NpdGlvbnMsIHNvcnRzIHRoZW0sIGFuZCB0aGVuIHJldHVybnMuDQoJICogSWYgbm8gdmFsaWQgYnJhbmNoZXMgb3IgdmVyc2lvbnMgYXJlIGZvdW5kLCBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uLg0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICogQHNpbmNlIDIuMC4xDQoJICogQHRocm93cyBFeGNlcHRpb24gSWYgbm8gdmFsaWQgYnJhbmNoZXMgb3IgdmVyc2lvbnMgYXJlIGZvdW5kLg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBicmFuY2hlcygpOiBhcnJheQ0KCXsNCgkJaWYgKGVtcHR5KCR0aGlzLT5icmFuY2hlcykpDQoJCXsNCgkJCSRicmFuY2hlcyA9IChhcnJheSkgJHRoaXMtPnBhcmFtcy0+Z2V0KCd2ZXJzaW9ucycpOw0KDQoJCQlpZiAoZW1wdHkoJGJyYW5jaGVzKSkNCgkJCXsNCgkJCQl0aHJvdyBuZXcgXEV4Y2VwdGlvbigiTm8gdmVyc2lvbnMgZm91bmQuIik7DQoJCQl9DQoJCQkkdGhpcy0+c2FuaXRpemUoJGJyYW5jaGVzKTsNCg0KCQkJaWYgKGVtcHR5KCRicmFuY2hlcykpDQoJCQl7DQoJCQkJdGhyb3cgbmV3IFxFeGNlcHRpb24oIk5vIHZlcnNpb25zIGZvdW5kLiIpOw0KCQkJfQ0KDQoJCQkkdGhpcy0+c2V0VG9wKCRicmFuY2hlcyk7DQoJCQkkdGhpcy0+c29ydCgkYnJhbmNoZXMpOw0KDQoJCQkkdGhpcy0+YnJhbmNoZXMgPSAkYnJhbmNoZXM7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPmJyYW5jaGVzOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBMZWdlbmQgdmFsdWVzIChieSBjb2xvcikNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgMi4wLjENCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbGVnZW5kKCk6IGFycmF5DQoJew0KCQlpZiAoZW1wdHkoJHRoaXMtPmxlZ2VuZCkpDQoJCXsNCgkJCSRicmFuY2hlcyA9ICR0aGlzLT5icmFuY2hlcygpOw0KDQoJCQlmb3JlYWNoICgkYnJhbmNoZXMgYXMgJHZlcnNpb24pDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHZlcnNpb24tPmRhdGVzIGFzICRkYXRlKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmxlZ2VuZFskZGF0ZS0+Y29sb3JdID0gJGRhdGU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT5sZWdlbmQ7DQoJfQ0KDQoJLyoqDQoJICogQ3VycmVudCBzdGF0ZSBvZiBhIGJyYW5jaA0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAkZGF0ZXMgIFRoZSBicmFuY2ggZGF0ZXMNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nfG51bGwNCgkgKiBAc2luY2UgMi4wLjENCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc3RhdGUoYXJyYXkgJGRhdGVzKTogP3N0cmluZw0KCXsNCgkJLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlLg0KCQkkbm93ID0gbmV3IFxEYXRlVGltZSgpOw0KDQoJCS8vIENoZWNrIGlmIHRvZGF5J3MgZGF0ZSBpcyBiZWZvcmUgdGhlIGVhcmxpZXN0IHN0YXJ0IGRhdGUuDQoJCSRlYXJsaWVzdERhdGUgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ2QtbS1ZJywgJGRhdGVzWzBdLT5zdGFydCk7DQoJCWlmICgkbm93IDwgJGVhcmxpZXN0RGF0ZSkNCgkJew0KCQkJcmV0dXJuICd2Y3MtZnV0dXJlJzsNCgkJfQ0KDQoJCS8vIENoZWNrIGlmIHRvZGF5J3MgZGF0ZSBpcyBhZnRlciB0aGUgbGF0ZXN0IGVuZCBkYXRlLg0KCQkkbGF0ZXN0RGF0ZSA9IFxEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnZC1tLVknLCBlbmQoJGRhdGVzKS0+ZW5kKTsNCgkJaWYgKCRub3cgPiAkbGF0ZXN0RGF0ZSkNCgkJew0KCQkJcmV0dXJuICd2Y3MtZW9sJzsNCgkJfQ0KDQoJCS8vIERldGVybWluZSB3aGljaCBzdGF0ZSB0aGUgY3VycmVudCBkYXRlIGZhbGxzIHVuZGVyLg0KCQlmb3JlYWNoICgkZGF0ZXMgYXMgJGRhdGUpDQoJCXsNCgkJCSRpbml0aWFsID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRkYXRlLT5zdGFydCk7DQoJCQkkZW5kID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRkYXRlLT5lbmQpOw0KDQoJCQlpZiAoJG5vdyA+PSAkaW5pdGlhbCAmJiAkbm93IDw9ICRlbmQpDQoJCQl7DQoJCQkJcmV0dXJuICRkYXRlLT5zdGF0ZTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIE1pbmltdW0gTnVtYmVyIG9mIFllYXJzDQoJICoNCgkgKiBAcmV0dXJuID8NCgkgKiBAc2luY2UgMS4wLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbWluKCkNCgl7DQoJCSRub3cgPSBuZXcgXERhdGVUaW1lKCdKYW51YXJ5IDEnKTsNCgkJcmV0dXJuICRub3ctPnN1YihuZXcgRGF0ZUludGVydmFsKCdQJyAuDQoJCQkkdGhpcy0+cGFyYW1zLT5nZXQoJ21pbl95ZWFycycsIDMpIC4gJ1knKSk7DQoJfQ0KDQoJLyoqDQoJICogTWF4aW11bSBOdW1iZXIgb2YgWWVhcnMNCgkgKg0KCSAqIEByZXR1cm4gPw0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBtYXgoKQ0KCXsNCgkJJG5vdyA9IG5ldyBcRGF0ZVRpbWUoJ0phbnVhcnkgMScpOw0KCQlyZXR1cm4gJG5vdy0+YWRkKG5ldyBEYXRlSW50ZXJ2YWwoJ1AnIC4NCgkJCSR0aGlzLT5wYXJhbXMtPmdldCgnbWF4X3llYXJzJywgMykgLiAnWScpKTsNCgl9DQoNCgkvKioNCgkgKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhpcyBkYXRlDQoJICoNCgkgKiBAcGFyYW0gRGF0ZVRpbWUgJGRhdGUgVGhlIGJyYW5jaCBzdGF0ZSBkYXRlDQoJICoNCgkgKiBAcmV0dXJuIGZsb2F0DQoJICogQHNpbmNlIDEuMC4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGNvb3JkaW5hdGVzKERhdGVUaW1lICRkYXRlKTogZmxvYXQNCgl7DQoJCSRkaWZmID0gJGRhdGUtPmRpZmYoJHRoaXMtPm1pbigpKTsNCg0KCQlpZiAoISRkaWZmLT5pbnZlcnQpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+cGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApOw0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT5wYXJhbXMtPmdldCgnbWFyZ2luX2xlZnQnLCA4MCkgKw0KCQkJKCRkaWZmLT5kYXlzIC8NCgkJCQkoMzY1LjI0IC8gJHRoaXMtPnBhcmFtcy0+Z2V0KCd5ZWFyX3dpZHRoJywgMTIwKSkNCgkJCSk7DQoJfQ0KDQoJLyoqDQoJICogU29ydCBCcmFuY2hlcyBzdGF0ZSdzIGJ5IGRhdGUNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGJyYW5jaGVzICBUaGUgYnJhbmNoZXMNCgkgKg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSAyLjAuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzb3J0KGFycmF5ICYkYnJhbmNoZXMpOiB2b2lkDQoJew0KCQlmb3JlYWNoICgkYnJhbmNoZXMgYXMgJGtleSA9PiAmJGJyYW5jaCkNCgkJew0KCQkJdXNvcnQoJGJyYW5jaC0+ZGF0ZXMsIGZ1bmN0aW9uKCRhLCAkYikgew0KCQkJCSRzdGFydERhdGVBID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRhLT5zdGFydCk7DQoJCQkJJHN0YXJ0RGF0ZUIgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ2QtbS1ZJywgJGItPnN0YXJ0KTsNCg0KCQkJCWlmICgkc3RhcnREYXRlQSA9PSAkc3RhcnREYXRlQikNCgkJCQl7DQoJCQkJCSRlbmREYXRlQSA9IFxEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnZC1tLVknLCAkYS0+ZW5kKTsNCgkJCQkJJGVuZERhdGVCID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRiLT5lbmQpOw0KCQkJCQlyZXR1cm4gJGVuZERhdGVBIDw9PiAkZW5kRGF0ZUI7DQoJCQkJfQ0KDQoJCQkJcmV0dXJuICRzdGFydERhdGVBIDw9PiAkc3RhcnREYXRlQjsNCgkJCX0pOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2V0IFRvcA0KCSAqDQoJICogQ2FsY3VsYXRlcyB0aGUgdG9wIHBvc2l0aW9uIGZvciBlYWNoIGJyYW5jaCBiYXNlZCBvbiBwYXJhbWV0ZXJzIGZvciBicmFuY2ggaGVpZ2h0IGFuZCBoZWFkZXIgaGVpZ2h0Lg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRicmFuY2hlcyBSZWZlcmVuY2UgdG8gdGhlIGJyYW5jaGVzIGFycmF5Lg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlIDIuMC4xDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFRvcChhcnJheSAmJGJyYW5jaGVzKTogdm9pZA0KCXsNCgkJJGJyYW5jaF9oZWlnaHQgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2JyYW5jaF9oZWlnaHQnLCAzMCk7DQoJCSRoZWFkZXJfaGVpZ2h0ID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdoZWFkZXJfaGVpZ2h0JywgMjQpOw0KDQoJCSRpID0gMDsNCgkJZm9yZWFjaCAoJGJyYW5jaGVzIGFzICRrZXkgPT4gJiRicmFuY2gpDQoJCXsNCgkJCSRicmFuY2gtPnRvcCA9ICRoZWFkZXJfaGVpZ2h0ICsgKCRicmFuY2hfaGVpZ2h0ICogJGkrKyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBTYW5pdGl6ZQ0KCSAqDQoJICogU2FuaXRpemVzIHRoZSBicmFuY2hlcyBieSBjaGVja2luZyB0aGUgZXhpc3RlbmNlIGFuZCB0eXBlIG9mICdkYXRlcycgYW5kICdkYXRlLT5zdGF0ZScuIA0KCSAqIEFsc28gbW9kaWZpZXMgdGhlIHN0YXRlIG9mIGVhY2ggZGF0ZSBlbnRyeSB3aXRoaW4gYSBicmFuY2guDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgJGJyYW5jaGVzIFJlZmVyZW5jZSB0byB0aGUgYnJhbmNoZXMgYXJyYXkuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgMi4wLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2FuaXRpemUoYXJyYXkgJiRicmFuY2hlcyk6IHZvaWQNCgl7DQoJCWZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICYkYnJhbmNoKQ0KCQl7DQoJCQlpZiAoZW1wdHkoJGJyYW5jaC0+ZGF0ZXMpIHx8ICFpc19vYmplY3QoJGJyYW5jaC0+ZGF0ZXMpKQ0KCQkJew0KCQkJCXVuc2V0KCRicmFuY2hlc1ska2V5XSk7DQoJCQkJY29udGludWU7DQoJCQl9DQoNCgkJCSRicmFuY2gtPmRhdGVzID0gKGFycmF5KSAkYnJhbmNoLT5kYXRlczsNCg0KCQkJJHJlbW92ZSA9IGZhbHNlOw0KCQkJZm9yZWFjaCAoJGJyYW5jaC0+ZGF0ZXMgYXMgJGsgPT4gJiRkYXRlKQ0KCQkJew0KCQkJCWlmIChlbXB0eSgkZGF0ZS0+c3RhdGUpKQ0KCQkJCXsNCgkJCQkJJHJlbW92ZSA9IHRydWU7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkkZGF0ZS0+c3RhdGUgPSAkdGhpcy0+bWFrZVNhZmUoJGtleSAuICctJyAuICRkYXRlLT5zdGF0ZSk7DQoJCQl9DQoNCgkJCWlmICgkcmVtb3ZlKQ0KCQkJew0KCQkJCXVuc2V0KCRicmFuY2hlc1ska2V5XSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBHZXQgY3NzIHNhZmUgY2xhc3MgbmFtZQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgJG5hbWUgIFRoZSBzdHJpbmcgdG8gbWFrZSBzYWZlDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAyLjAuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBtYWtlU2FmZShzdHJpbmcgJG5hbWUpOiBzdHJpbmcNCgl7DQoJCS8vIEVuc3VyZSBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBkaWdpdA0KCQlpZiAocHJlZ19tYXRjaCgnL15bMC05XS8nLCAkbmFtZSkpDQoJCXsNCgkJCSRuYW1lID0gJ3Zjcy0nIC4gJG5hbWU7DQoJCX0NCg0KCQkvLyBSZXBsYWNlIGFueSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd2l0aCBoeXBoZW5zDQoJCSRuYW1lID0gcHJlZ19yZXBsYWNlKCcvW15hLXpBLVowLTldKy8nLCAnLScsICRuYW1lKTsNCg0KCQkvLyBDb252ZXJ0IHRvIGxvd2VyY2FzZQ0KCQkkbmFtZSA9IHN0cnRvbG93ZXIoJG5hbWUpOw0KDQoJCXJldHVybiAkbmFtZTsNCgl9', 'dXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTs=', 1, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, '', 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdib3g9IjAgMCA8P3BocCBlY2hvICRoZWxwZXItPndpZHRoKCk7ID8+IDw/cGhwIGVjaG8gJGhlbHBlci0+aGVpZ2h0KCk7ID8+Ig0KCXdpZHRoPSI8P3BocCBlY2hvICRoZWxwZXItPndpZHRoKCk7ID8+IiBoZWlnaHQ9Ijw/cGhwIGVjaG8gJGhlbHBlci0+aGVpZ2h0KCk7ID8+Ij4NCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCQl0ZXh0IHsNCgkJCWZpbGw6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCd0ZXh0X2NvbG9yJywgJyMzMzMnKTsgPz47DQoJCQlmb250LWZhbWlseTogIlNvdXJjZSBTYW5zIFBybyIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQoJCQlmb250LXNpemU6IDw/cGhwIGVjaG8gKDIgLyAzKSAqICRwYXJhbXMtPmdldCgnaGVhZGVyX2hlaWdodCcsIDI0KTsgPz5weDsNCgkJfQ0KCQlnLnZjcy1mdXR1cmUgcmVjdCwNCgkJLnZjcy1icmFuY2hlcyByZWN0LnZjcy1mdXR1cmUgew0KCQkJZmlsbDogPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2Z1dHVyZV9jb2xvcicsICcjNTA5MWNkJyk7ID8+Ow0KCQl9DQoJCWcudmNzLWZ1dHVyZSB0ZXh0IHsNCgkJCWZpbGw6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdmdXR1cmVfdGV4dF9jb2xvcicsICcjZmZmJyk7ID8+Ow0KCQl9DQoJCWcudmNzLWVvbCByZWN0LA0KCQkudmNzLWJyYW5jaGVzIHJlY3QudmNzLWVvbCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZW5kX29mX2xpZmVfY29sb3InLCAnI2YzMycpOyA/PjsNCgkJfQ0KCQlnLnZjcy1lb2wgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZW5kX29mX2xpZmVfdGV4dF9jb2xvcicsICcjZmZmJyk7ID8+Ow0KCQl9DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAkdmVyc2lvbik6ID8+DQoJCQk8P3BocCBmb3JlYWNoICgkdmVyc2lvbi0+ZGF0ZXMgYXMgJGRhdGUpOiA/Pg0KCQkJCWcuPD9waHAgZWNobyAkZGF0ZS0+c3RhdGU7ID8+IHJlY3QsDQoJCQkJLnZjcy1icmFuY2hlcyByZWN0Ljw/cGhwIGVjaG8gJGRhdGUtPnN0YXRlOyA/PiB7DQoJCQkJCWZpbGw6IDw/cGhwIGVjaG8gJGRhdGUtPmNvbG9yOyA/PjsNCgkJCQl9DQoJCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQkudmNzLWJyYW5jaC1sYWJlbHMgdGV4dCB7DQoJCWRvbWluYW50LWJhc2VsaW5lOiBjZW50cmFsOw0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCQkudmNzLXRvZGF5IGxpbmUgew0KCQkJc3Ryb2tlOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgndG9kYXlfbGluZV9jb2xvcicsICcjZjMzJyk7ID8+Ow0KCQkJc3Ryb2tlLWRhc2hhcnJheTogNywgNzsNCgkJCXN0cm9rZS13aWR0aDogM3B4Ow0KCQl9DQoJCS52Y3MtdG9kYXkgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgndG9kYXlfdGV4dF9jb2xvcicsICcjZjMzJyk7ID8+Ow0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCQkudmNzLXllYXJzIGxpbmUgew0KCQkJc3Ryb2tlOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgneWVhcnNfbGluZV9jb2xvcicsICcjMDAwJyk7ID8+Ow0KCQl9DQoJCS52Y3MteWVhcnMgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgneWVhcnNfdGV4dF9jb2xvcicsICcjMDAwJyk7ID8+Ow0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCTwvc3R5bGU+DQoJPCEtLSBCcmFuY2ggbGFiZWxzIC0tPg0KCTxnIGNsYXNzPSJ2Y3MtYnJhbmNoLWxhYmVscyI+DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICRicmFuY2gpOiA/Pg0KCQkJPGcgY2xhc3M9Ijw/cGhwIGVjaG8gJGhlbHBlci0+c3RhdGUoJGJyYW5jaC0+ZGF0ZXMpOyA/PiI+DQoJCQkJPHJlY3QgeD0iMCIgeT0iPD9waHAgZWNobyAkYnJhbmNoLT50b3A7ID8+IiB3aWR0aD0iPD9waHAgZWNobyAwLjUgKiAkcGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApOyA/PiINCgkJCQkJaGVpZ2h0PSI8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKTsgPz4iLz4NCgkJCQk8dGV4dCB4PSI8P3BocCBlY2hvIDAuMjUgKiAkcGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApOyA/PiIgeT0iPD9waHAgZWNobyAkYnJhbmNoLT50b3AgKyAoMC41ICogJHBhcmFtcy0+Z2V0KCdicmFuY2hfaGVpZ2h0JywgMzApKTsgPz4iPg0KCQkJCQk8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJyYW5jaC0+dmVyc2lvbik7ID8+DQoJCQkJPC90ZXh0Pg0KCQkJPC9nPg0KCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCTwvZz4NCgk8IS0tIEJyYW5jaCBibG9ja3MgLS0+DQoJPGcgY2xhc3M9InZjcy1icmFuY2hlcyI+DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICR2ZXJzaW9uKTogPz4NCgkJCTw/cGhwDQoJCQkJJHkgPSAkdmVyc2lvbi0+dG9wOw0KCQkJCSRoZWlnaHQgPSAkcGFyYW1zLT5nZXQoJ2JyYW5jaF9oZWlnaHQnLCAzMCk7DQoJCQk/Pg0KCQkJPD9waHAgZm9yZWFjaCAoJHZlcnNpb24tPmRhdGVzIGFzICRkYXRlKTogPz4NCgkJCQk8P3BocA0KCQkJCQkkeF9zdGFydCA9ICRoZWxwZXItPmNvb3JkaW5hdGVzKG5ldyBEYXRlVGltZSgkZGF0ZS0+c3RhcnQpKTsNCgkJCQkJJHhfZW5kID0gJGhlbHBlci0+Y29vcmRpbmF0ZXMobmV3IERhdGVUaW1lKCRkYXRlLT5lbmQpKTsNCgkJCQk/Pg0KCQkJCTxnIGNsYXNzPSI8P3BocCBlY2hvICRkYXRlLT5zdGF0ZTsgPz4iPg0KCQkJCQk8cmVjdA0KCQkJCQkJeD0iPD9waHAgZWNobyAkeF9zdGFydDsgPz4iDQoJCQkJCQl5PSI8P3BocCBlY2hvICR5OyA/PiINCgkJCQkJCXdpZHRoPSI8P3BocCBlY2hvICR4X2VuZCAtICR4X3N0YXJ0OyA/PiINCgkJCQkJCWhlaWdodD0iPD9waHAgZWNobyAkaGVpZ2h0OyA/PiI+DQoJCQkJCQkJPHRpdGxlPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGF0ZS0+bGFiZWwpOyA/PjwvdGl0bGU+DQoJCQkJCTwvcmVjdD4NCgkJCQk8L2c+DQoJCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCTwvZz4NCgk8IS0tIFllYXIgbGluZXMgLS0+DQoJPGcgY2xhc3M9InZjcy15ZWFycyI+DQoJCTw/cGhwIGZvcmVhY2ggKCRoZWxwZXItPnllYXJzKCkgYXMgJGRhdGUpOiA/Pg0KCQkJPGxpbmUgeDE9Ijw/cGhwIGVjaG8gJGhlbHBlci0+Y29vcmRpbmF0ZXMoJGRhdGUpOyA/PiIgeTE9Ijw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdoZWFkZXJfaGVpZ2h0JywgMjQpOyA/PiINCgkJCQl4Mj0iPD9waHAgZWNobyAkaGVscGVyLT5jb29yZGluYXRlcygkZGF0ZSk7ID8+Ig0KCQkJCXkyPSI8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnaGVhZGVyX2hlaWdodCcsIDI0KSArICgkcXR5ICogJHBhcmFtcy0+Z2V0KCdicmFuY2hfaGVpZ2h0JywgMzApKTsgPz4iLz4NCgkJCTx0ZXh0IHg9Ijw/cGhwIGVjaG8gJGhlbHBlci0+Y29vcmRpbmF0ZXMoJGRhdGUpIDs/PiIgeT0iPD9waHAgZWNobyAwLjggKiAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCk7ID8+Ij4NCgkJCQk8P3BocCBlY2hvICRkYXRlLT5mb3JtYXQoJ2ogTSBZJyk7ID8+DQoJCQk8L3RleHQ+DQoJCTw/cGhwIGVuZGZvcmVhY2g7ID8+DQoJPC9nPg0KCTwhLS0gVG9kYXkgLS0+DQoJPGcgY2xhc3M9InZjcy10b2RheSI+DQoJCTw/cGhwDQoJCQkkbm93ID0gbmV3IERhdGVUaW1lOw0KCQkJJHggPSAkaGVscGVyLT5jb29yZGluYXRlcygkbm93KTsNCgkJPz4NCgkJPGxpbmUgeDE9Ijw/cGhwIGVjaG8gJHg7ID8+IiB5MT0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCk7ID8+IiB4Mj0iPD9waHAgZWNobyAkeDsgPz4iDQoJCQl5Mj0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCkgKyAoJHF0eSAqICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKSk7ID8+Ii8+DQoJCTx0ZXh0IHg9Ijw/cGhwIGVjaG8gJHg7ID8+Ig0KCQkJeT0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCkgKyAoJHF0eSAqICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKSkgKyAoMC44ICogJHBhcmFtcy0+Z2V0KCdmb290ZXJfaGVpZ2h0JywgMjQpKTsgPz4iPg0KCQkJPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnVG9kYXknKSAuICc6ICcgLiAkbm93LT5mb3JtYXQoJ2ogTSBZJyk7ID8+DQoJCTwvdGV4dD4NCgk8L2c+DQo8L3N2Zz4NCjw/cGhwIGlmICgkcGFyYW1zLT5nZXQoJ3Nob3dfbGVnZW5kJywgMCkgPT0gMSk6ID8+DQo8P3BocCANCi8vIGdldCB0aGUgbGVnZW5kIHZhbHVlcw0KJGxlZ2VuZCA9ICRoZWxwZXItPmxlZ2VuZCgpOw0KPz4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLyogQm94IFNoYWRvdyAqLw0KCS52Y3MtYm94LXNoYWRvdy1tZWRpdW0gew0KCQlib3gtc2hhZG93OiAwIDEwcHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDAuNXJlbSAxLjVyZW0gcmdiYSgwLCAwLCAwLCAwLjI1KTsNCgl9DQoJLyogQ2FyZCBTdHlsZXMgKi8NCgkudmNzLWNhcmQgew0KCQlib3JkZXItcmFkaXVzOiA0cHg7DQoJCW1hcmdpbi10b3A6IDE1cHg7DQoJfQ0KCS52Y3MtY2FyZC1sZWdlbmQgew0KCQliYWNrZ3JvdW5kLWNvbG9yOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnbGVnZW5kX2JhY2tncm91bmRfY29sb3InLCAnIzQ5NDQ0NCcpOyA/PjsNCgkJY29sb3I6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdsZWdlbmRfdGV4dF9jb2xvcicsICcjZmJmM2VmJyk7ID8+Ow0KCX0NCgkudmNzLWNhcmQtYm9keSB7DQoJCXBhZGRpbmc6IDRweDsNCgl9DQoJLyogR3JpZCBTdHlsZXMgKi8NCgkudmNzLWdyaWQgew0KCQlkaXNwbGF5OiBmbGV4Ow0KCQlmbGV4LXdyYXA6IHdyYXA7DQoJfQ0KCS52Y3MtZ3JpZC1tYXRjaCA+IGRpdiB7DQoJCXBhZGRpbmc6IDVweDsNCgkJbWluLWhlaWdodDogMXB4Ow0KCQltYXJnaW46IDEwcHg7DQoJfQ0KCS8qIEZsZXhib3ggU3R5bGVzICovDQoJLnZjcy1mbGV4IHsNCgkJZGlzcGxheTogZmxleDsNCgkJYWxpZ24taXRlbXM6IGNlbnRlcjsNCgkJanVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KCX0NCgkudmNzLWZsZXgtbWlkZGxlIHsNCgkJYWxpZ24taXRlbXM6IGNlbnRlcjsNCgl9DQoJLyogQ29sb3IgQm94IFN0eWxlcyAqLw0KCS52Y3MtY29sb3ItYm94IHsNCgkJd2lkdGg6IDIwcHg7DQoJCWhlaWdodDogMjBweDsNCgkJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCQltYXJnaW4tcmlnaHQ6IDVweDsNCgl9DQoJLnZjcy1mdXR1cmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZnV0dXJlX2NvbG9yJywgJyMwMDAnKTsgPz47IH0NCgkudmNzLWVvbCB7IGJhY2tncm91bmQtY29sb3I6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdlbmRfb2ZfbGlmZV9jb2xvcicsICcjZjMzJyk7ID8+OyB9DQoJPD9waHAgZm9yZWFjaCAoJGxlZ2VuZCBhcyAkc3RhdGUpOiA/Pg0KCQkuPD9waHAgZWNobyAkc3RhdGUtPnN0YXRlOyA/PiB7IGJhY2tncm91bmQtY29sb3I6IDw/cGhwIGVjaG8gJHN0YXRlLT5jb2xvcjsgPz47IH0NCgk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCS8qIE1lZGlhIFF1ZXJ5IGZvciBzbWFsbGVyIHNjcmVlbnMgKi8NCglAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsNCgkJLnZjcy1ncmlkIHsNCgkJCWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQoJCX0NCgkJLnZjcy1mbGV4IHsNCgkJCWRpc3BsYXk6IGJsb2NrOw0KCQl9DQoJCS52Y3MtZ3JpZC1tYXRjaCA+IGRpdiB7DQoJCQltYXJnaW46IDRweDsNCgkJCXBhZGRpbmc6IDA7DQoJCX0NCgl9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcz0idmNzLWJveC1zaGFkb3ctbWVkaXVtIj4NCgk8ZGl2IGNsYXNzPSJ2Y3MtY2FyZCB2Y3MtY2FyZC1sZWdlbmQgdmNzLWNhcmQtYm9keSI+DQoJCTxkaXYgY2xhc3M9InZjcy1ncmlkLW1hdGNoIHZjcy1ncmlkIj4NCgkJCTxkaXYgY2xhc3M9InZjcy1mbGV4IHZjcy1mbGV4LW1pZGRsZSI+DQoJCQkJPHNwYW4NCgkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggdmNzLWZ1dHVyZSBoYXNUb29sdGlwIg0KCQkJCQl0aXRsZT0iPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnUGxhbm5lZCByZWxlYXNlIHNjaGVkdWxlJyk7ID8+Ig0KCQkJCT48L3NwYW4+PD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnRnV0dXJlIFJlbGVhc2VzJyk7ID8+DQoJCQk8L2Rpdj4NCgkJCTw/cGhwIGZvcmVhY2ggKCRsZWdlbmQgYXMgJHN0YXRlKTogPz4NCgkJCQk8ZGl2IGNsYXNzPSJ2Y3MtZmxleCB2Y3MtZmxleC1taWRkbGUiPg0KCQkJCQk8c3Bhbg0KCQkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggPD9waHAgZWNobyAkc3RhdGUtPnN0YXRlOyA/PiBoYXNUb29sdGlwIg0KCQkJCQkJdGl0bGU9Ijw/cGhwIGVjaG8gJHN0YXRlLT5kZXNjcmlwdGlvbiA/PyAnJzsgPz4iDQoJCQkJCT48L3NwYW4+PD9waHAgZWNobyAkc3RhdGUtPmxhYmVsOyA/Pg0KCQkJCTwvZGl2Pg0KCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4NCgkJCTxkaXYgY2xhc3M9InZjcy1mbGV4IHZjcy1mbGV4LW1pZGRsZSI+DQoJCQkJPHNwYW4NCgkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggdmNzLWVvbCBoYXNUb29sdGlwIg0KCQkJCQl0aXRsZT0iPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnVmVyc2lvbiBFbmQgb2YgTGlmZSBzY2hlZHVsZSAtIGV4cGVjdCBubyBtb3JlIHN1cHBvcnQnKTsgPz4iDQoJCQkJPjwvc3Bhbj48P3BocCBlY2hvIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdWZXJzaW9uIGF0IEVuZCBvZiBMaWZlJyk7ID8+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4NCjw/cGhwIGVuZGlmOyA/Pg==', 'Version Calendar in SVG', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"dimention\",\"label\":\"Dimentions\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3051\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"3053\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3050\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"3049\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"3052\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"3054\",\"custom_value\":\"\"}}},\"fields1\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"style\",\"label\":\"Styles\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3058\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"3337\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3061\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"3060\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"3059\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"3065\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"3066\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"3063\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"3064\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"3333\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"3334\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"3335\",\"custom_value\":\"\"}}},\"fields2\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"versions\",\"label\":\"Versions\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3056\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"3055\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3071\",\"custom_value\":\"\"}}}}', '2dcaa8af-0bb0-4fac-8584-4e4e418620cd', '', 'Ly8gSW5jbHVkZSB0aGUgaGVscGVyIGZ1bmN0aW9ucyBvbmx5IG9uY2UNClxKTG9hZGVyOjpyZWdpc3RlcignTW9kW1tbTW9kdWxlXV1dSGVscGVyJywgX19ESVJfXyAuICcvaGVscGVyLnBocCcpOw0KDQp0cnkNCnsNCgkvLyBHZXQgdGhlIEhlbHBlciBjbGFzcw0KCSRoZWxwZXIgPSBuZXcgTW9kW1tbTW9kdWxlXV1dSGVscGVyKCRwYXJhbXMpOw0KDQoJLy8gc2V0IHRoZSBicmFuY2hlcw0KCSRicmFuY2hlcyA9ICRoZWxwZXItPmJyYW5jaGVzKCk7DQoNCgkvLyBzZXQgYnJhbmNoIHF0eQ0KCSRxdHkgPSBjb3VudCgkYnJhbmNoZXMpOw0KDQoJLy8gZ2V0IHRoZSBtb2R1bGUgY2xhc3Mgc2Z4IChsb2NhbCkNCgkkbW9kdWxlY2xhc3Nfc2Z4ID0gaHRtbHNwZWNpYWxjaGFycygkcGFyYW1zLT5nZXQoJ21vZHVsZWNsYXNzX3NmeCcpLCBFTlRfQ09NUEFULCAnVVRGLTgnKTsNCg0KCS8vIGxvYWQgdGhlIGRlZmF1bHQgVG1wbA0KCXJlcXVpcmUgSm9vbWxhX19fZjE1ZDU1NmRfMzNkZF80ZWUzX2EwZjdfMDY1M2U0YTdhMWU0X19fUG93ZXI6OmdldExheW91dFBhdGgoJ21vZF9bW1ttb2R1bGVdXV0nLCAkcGFyYW1zLT5nZXQoJ2xheW91dCcsICdkZWZhdWx0JykpOw0KfSANCmNhdGNoIChFeGNlcHRpb24gJGUpIA0Kew0KCS8vIE91dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBhbG9uZyB3aXRoIHRoZSBleGNlcHRpb24gbWVzc2FnZQ0KCWVjaG8gIldhcm5pbmc6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpOw0KfQ==', '2.0.1', 'Version_Calendar_svg', '', '', '', 'Ly8gVE9ETw==', '', '', '', 'IyBWZXJzaW9uIENhbGVuZGFyIGluIFNWRyAoW1tbbW9kdWxlLnZlcnNpb25dXV0pDQoNCj4gVGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIHdhcyB0YWtlbiBmcm9tIHRoZSBbUEhQIHN1cHBvcnRlZCB2ZXJzaW9uc10oaHR0cHM6Ly9naXRodWIuY29tL3BocC93ZWItcGhwL2Jsb2IvbWFzdGVyL2ltYWdlcy9zdXBwb3J0ZWQtdmVyc2lvbnMucGhwKS4NCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbT3BlbiBTb3VyY2UgTWF0dGVyc10oaHR0cDovL3d3dy5qb29tbGEub3JnKQ0KKyAqQXV0aG9yKjogW0pvb21sYSEgUHJvamVjdF0obWFpbHRvOmFkbWluQGpvb21sYS5vcmcpDQorICpOYW1lKjogW1ZlcnNpb24gQ2FsZW5kYXIgc3ZnXShodHRwOi8vd3d3Lmpvb21sYS5vcmcpDQorICpGaXJzdCBCdWlsZCo6IDNyZCBTZXB0ZW1iZXIsIDIwMjINCisgKlZlcnNpb24qOiBbW1ttb2R1bGUudmVyc2lvbl1dXQ0KKyAqQ29weXJpZ2h0KjogKEMpIDIwMjIgT3BlbiBTb3VyY2UgTWF0dGVycywgSW5jLg0KKyAqTGljZW5zZSo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0', '', '', '', 'Version Calendar', 1, '', 1, '', '', 1, '2022-09-03 04:42:25', '2024-09-16 16:06:50', 70, '', 1, 8);
--
-- 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', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1ByaXZhY3lQbHVnaW4nLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9wcml2YWN5L2hlbHBlcnMvcGx1Z2luLnBocCcpOw0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1ByaXZhY3lSZW1vdmFsU3RhdHVzJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fcHJpdmFjeS9oZWxwZXJzL3JlbW92YWwvc3RhdHVzLnBocCcpOw0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcVXRpbGl0aWVzXEFycmF5SGVscGVyOw==', 10, '{\"method_selection0\":{\"method\":\"51\"},\"method_selection1\":{\"method\":\"52\"},\"method_selection2\":{\"method\":\"53\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICAkYXBwOw0KDQoJLyoqDQoJICogRGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAdmFyICAgIERhdGFiYXNlRHJpdmVyDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRkYjsNCg0KCS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcmVtb3ZlIGluZm9ybWF0aW9uIHJlcXVlc3QgY2FuIGJlIHByb2Nlc3NlZA0KCSAqDQoJICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgUHJpdmFjeVJlbW92YWxTdGF0dXMNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblByaXZhY3lDYW5SZW1vdmVEYXRhKFByaXZhY3lUYWJsZVJlcXVlc3QgJHJlcXVlc3QsIEpVc2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRzdGF0dXMgPSBuZXcgUHJpdmFjeVJlbW92YWxTdGF0dXM7DQoNCgkJLy8gVGhpcyBwbHVnaW4gb25seSBwcm9jZXNzZXMgZGF0YSBmb3IgcmVnaXN0ZXJlZCB1c2VyIGFjY291bnRzDQoJCWlmICghJHVzZXIpDQoJCXsNCgkJCXJldHVybiAkc3RhdHVzOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhlIGhlbHBlciBtZXRob2QgaXMgc2V0IGluIHRoZSBjb21wb25lbnQNCgkJaWYgKG1ldGhvZF9leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsICdvblByaXZhY3lDYW5SZW1vdmVEYXRhJykpDQoJCXsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6b25Qcml2YWN5Q2FuUmVtb3ZlRGF0YSgkdGhpcywgJHN0YXR1cywgJHJlcXVlc3QsICR1c2VyKTsNCgkJfQ0KDQoJCXJldHVybiAkc3RhdHVzOw0KCX0NCg0KCS8qKg0KCSAqIFByb2Nlc3NlcyBhbiBleHBvcnQgcmVxdWVzdCBmb3IgSm9vbWxhIGNvcmUgdXNlciBkYXRhDQoJICoNCgkgKiBAcGFyYW0gICBQcml2YWN5VGFibGVSZXF1ZXN0ICAkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZA0KCSAqIEBwYXJhbSAgIEpVc2VyICAgICAgICAgICAgICAgICR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblByaXZhY3lFeHBvcnRSZXF1ZXN0KFByaXZhY3lUYWJsZVJlcXVlc3QgJHJlcXVlc3QsIEpVc2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRkb21haW5zID0gYXJyYXkoKTsNCg0KCQkvLyBUaGlzIHBsdWdpbiBvbmx5IHByb2Nlc3NlcyBkYXRhIGZvciByZWdpc3RlcmVkIHVzZXIgYWNjb3VudHMNCgkJaWYgKCEkdXNlcikNCgkJew0KCQkJcmV0dXJuICRkb21haW5zOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhlIGhlbHBlciBtZXRob2QgaXMgc2V0IGluIHRoZSBjb21wb25lbnQNCgkJaWYgKG1ldGhvZF9leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsICdvblByaXZhY3lFeHBvcnRSZXF1ZXN0JykpDQoJCXsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6b25Qcml2YWN5RXhwb3J0UmVxdWVzdCgkdGhpcywgJGRvbWFpbnMsICRyZXF1ZXN0LCAkdXNlcik7DQoJCX0NCg0KCQlyZXR1cm4gJGRvbWFpbnM7DQoJfQ0KDQoJLyoqDQoJICogUmVtb3ZlcyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSByZW1vdmUgaW5mb3JtYXRpb24gcmVxdWVzdA0KCSAqDQoJICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUHJpdmFjeVJlbW92ZURhdGEoUHJpdmFjeVRhYmxlUmVxdWVzdCAkcmVxdWVzdCwgSlVzZXIgJHVzZXIgPSBudWxsKQ0KCXsNCgkJLy8gVGhpcyBwbHVnaW4gb25seSBwcm9jZXNzZXMgZGF0YSBmb3IgcmVnaXN0ZXJlZCB1c2VyIGFjY291bnRzDQoJCWlmICghJHVzZXIpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCS8vIGNoZWNrIGlmIHRoZSBoZWxwZXIgbWV0aG9kIGlzIHNldCBpbiB0aGUgY29tcG9uZW50DQoJCWlmIChtZXRob2RfZXhpc3RzKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCAnb25Qcml2YWN5UmVtb3ZlRGF0YScpKQ0KCQl7DQoJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6Om9uUHJpdmFjeVJlbW92ZURhdGEoJHRoaXMsICRyZXF1ZXN0LCAkdXNlcik7DQoJCX0NCgl9', '[[[Component]]]', 'Ly8gUEhQIE1ldGhvZCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFBvc3RmbGlnaHQgKGluc3RhbGwp', 'Ly8gUEhQIFBvc3RmbGlnaHQgKHVwZGF0ZSk=', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', 'Ly8gUEhQIFByZWZsaWdodCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFByZWZsaWdodCAodXBkYXRlKQ==', '', '1.0.1', '{\"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', '2024-08-06 20:53:17', 30, '', 1),
-(2, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to link your components to the privacy suite of Joomla by adding a new privacy tab to the JCB admin views, where you can set all the required details for the integration.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Global Privacy\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2600\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"}}},\"fields1\":{\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"plugin\",\"label\":\"Plugin\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2600\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"}}},\"fields2\":{\"file\":\"admin_view\",\"fields_name\":\"params.privacy\",\"fieldset\":\"privacy\",\"label\":\"Privacy\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2603\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2604\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2605\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2606\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2607\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2608\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2611\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2612\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2613\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2614\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2615\",\"custom_value\":\"\"}}}}', 'a3e3ce4d-f6c1-4a92-bdc0-d7c61a0756c1', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEZhY3Rvcnk7DQp1c2UgSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbjsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow0KdXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw==', 3, '{\"method_selection0\":{\"method\":\"113\"},\"method_selection1\":{\"method\":\"12\"},\"method_selection2\":{\"method\":\"0\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uDQoJICoNCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZXBhcmVGb3JtKEZvcm0gJGZvcm0sICRkYXRhKQ0KCXsNCgkJJGNvbnRleHQgPSAkZm9ybS0+Z2V0TmFtZSgpOw0KDQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoc3RycG9zKCRjb250ZXh0LCAnY29tX1tbW2NvbXBvbmVudF1dXS5hZG1pbl92aWV3JykgPT09IDApDQoJCXsNCgkJCS8vIEFkZCB0aGUgZm9ybXMgcGF0aA0KCQkJRm9ybTo6YWRkRm9ybVBhdGgoX19ESVJfXyAuICcvZm9ybXMnKTsNCgkJCS8vIGFkZCB0aGUgYWRtaW4gdmlldyBwYXJhbXMgZm9yIHByaXZhY3kgaW50ZWdyYXRpb24NCgkJCSRmb3JtLT5sb2FkRmlsZSgnYWRtaW5fdmlldycpOw0KCQkJLy8gaWYgdGhlIGdsb2JhbCBwbHVnaW4gaXMgbm90IHNldCwgYWxsb3cgaXQgdG8gYmUgc2V0IGZyb20gdGhlIGFkbWluIHZpZXcNCgkJCWlmICgoJHBsdWdpbiA9ICR0aGlzLT5wYXJhbXMtPmdldCgncGx1Z2luJywgMCkpID09IDApDQoJCQl7DQoJCQkJJGZvcm0tPmxvYWRGaWxlKCdjb25maWcnKTsNCgkJCQkvLyBtYWtlIHRoZSBwbHVnaW4gZmllbGQgcmVxdWlyZWQgKExBVEVSIHdoZW4gd2UgY2FuIGdpdmUgbW9yZSBpbmZvKQ0KCQkJCS8vJGZvcm0tPnNldEZpZWxkQXR0cmlidXRlKCdwbHVnaW4nLCAncmVxdWlyZWQnLCB0cnVlLCAncGFyYW1zLnByaXZhY3knKTsNCgkJCQkvLyRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgncGx1Z2luJywgJ3Nob3dvbicsICdhY3RpdmF0ZToxJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCQkJLy8kZm9ybS0+c2V0RmllbGRBdHRyaWJ1dGUoJ25vdGVfc2VsZWN0X3ByaXZhY3lfcGx1Z2luJywgJ3Nob3dvbicsICdhY3RpdmF0ZToxJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCQl9DQoJCQkvLyB1cGRhdGUgYWxsIGVkaXRvcnMgdG8gdXNlIHRoaXMgY29tcG9uZW50cyBnbG9iYWwgZWRpdG9yDQoJCQkkZ2xvYmFsX2VkaXRvciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdlZGl0b3InLCAnbm9uZScpOw0KCQkJLy8gc2V0IHRoZSBmaWVsZCBlZGl0b3IgdmFsdWUgKHdpdGggbm9uZSBhcyBmYWxsYmFjaykNCgkJCSRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgnY3VzdG9tX2xpbmsnLCAnZWRpdG9yJywgJGdsb2JhbF9lZGl0b3IgLiAnfG5vbmUnLCAncGFyYW1zLnByaXZhY3knKTsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkgKiBUaGlzIGlzIGFuIGV2ZW50IHRoYXQgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSB0aGUgY29udGVudA0KCSAqIGlzIHNhdmVkIGludG8gdGhlIGRhdGFiYXNlLg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgcGFzc2VkIHRvIHRoZSBwbHVnaW4gKGFkZGVkIGluIDEuNikuDQoJICogQHBhcmFtICAgb2JqZWN0ICAkYXJ0aWNsZSAgQSBKVGFibGVDb250ZW50IG9iamVjdC4NCgkgKiBAcGFyYW0gICBib29sICAgICRpc05ldyAgICBJZiB0aGUgY29udGVudCBpcyBqdXN0IGFib3V0IHRvIGJlIGNyZWF0ZWQuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkLg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudEJlZm9yZVNhdmUoJGNvbnRleHQsICRpdGVtLCAkaXNOZXcsICRkYXRhID0gYXJyYXkoKSkNCgl7DQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoJ2NvbV9bW1tjb21wb25lbnRdXV0uYWRtaW5fdmlldycgPT09ICRjb250ZXh0KQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGpzb24NCgkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+cGFyYW1zKSkNCgkJCXsNCgkJCQkvLyBDb252ZXJ0IHRoZSBwYXJhbXMgZmllbGQgdG8gYW4gYXJyYXkuDQoJCQkJJHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5Ow0KCQkJCSRyZWdpc3RyeS0+bG9hZFN0cmluZygkaXRlbS0+cGFyYW1zKTsNCgkJCQkkaXRlbS0+cGFyYW1zID0gJHJlZ2lzdHJ5LT50b0FycmF5KCk7DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGUgcGx1Z2luIHdhcyBzZXQNCgkJCWlmIChpc3NldCgkaXRlbS0+cGFyYW1zWydwbHVnaW4nXSkgJiYgJGl0ZW0tPnBhcmFtc1sncGx1Z2luJ10gPiAwKQ0KCQkJew0KCQkJCS8vIGZpcnN0IHNldCBuZXcgcGFyYW1zDQoJCQkJJHRoaXMtPnBhcmFtcy0+c2V0KCdwbHVnaW4nLCAoaW50KSAkaXRlbS0+cGFyYW1zWydwbHVnaW4nXSk7DQoJCQkJLy8gdXBkYXRlIHRoZSBnbG9iYWwgcGx1Z2luIHNldHRpbmdzDQoJCQkJJGV4dGVuc2lvblRhYmxlID0gbmV3ICBcSnRhYmxlRXh0ZW5zaW9uKEZhY3Rvcnk6OmdldERibygpKTsNCgkJCQkkZXh0ZW5zaW9uVGFibGUtPmxvYWQoYXJyYXkoJ2VsZW1lbnQnID0+ICdbW1tjb21wb25lbnRdXV1wcml2YWN5dGFicycpKTsNCgkJCQkvLyBTYXZlIHRoZSBjaGFuZ2UNCgkJCQkkZXh0ZW5zaW9uVGFibGUtPnNldCgncGFyYW1zJywgJHRoaXMtPnBhcmFtcy0+dG9TdHJpbmcoKSk7DQoJCQkJJGV4dGVuc2lvblRhYmxlLT5zYXZlKChhcnJheSkgJGV4dGVuc2lvblRhYmxlKTsNCgkJCQkvLyBhbmQgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBwYXJhbXMNCgkJCQl1bnNldCgkaXRlbS0+cGFyYW1zWydwbHVnaW4nXSk7DQoJCQkJLy8gY2xlYXIgdGhlIHBsdWdpbiBjYWNoZQ0KCQkJCSR0aGlzLT5jbGVhbkNhY2hlKCdjb21fcGx1Z2lucycsIDApOw0KCQkJCSR0aGlzLT5jbGVhbkNhY2hlKCdjb21fcGx1Z2lucycsIDEpOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhbiBhcnJheQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5wYXJhbXMpKQ0KCQkJew0KCQkJCS8vIENvbnZlcnQgdGhlIHBhcmFtcyBmaWVsZCB0byBhIHN0cmluZy4NCgkJCQkkcGFyYW1zID0gbmV3IFJlZ2lzdHJ5Ow0KCQkJCSRwYXJhbXMtPmxvYWRBcnJheSgkaXRlbS0+cGFyYW1zKTsNCgkJCQkkaXRlbS0+cGFyYW1zID0gKHN0cmluZykgJHBhcmFtczsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIENsZWFuIHRoZSBjYWNoZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGdyb3VwICAgICAgVGhlIGNhY2hlIGdyb3VwDQoJICogQHBhcmFtICAgaW50ZWdlciAgJGNsaWVudF9pZCAgVGhlIElEIG9mIHRoZSBjbGllbnQNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDMuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBjbGVhbkNhY2hlKCRncm91cCA9IG51bGwsICRjbGllbnRfaWQgPSAwKQ0KCXsNCgkJJGNvbmYgPSBGYWN0b3J5OjpnZXRDb25maWcoKTsNCg0KCQkkb3B0aW9ucyA9IGFycmF5KA0KCQkJJ2RlZmF1bHRncm91cCcgPT4gJGdyb3VwID86IChpc3NldCgkdGhpcy0+b3B0aW9uKSA/ICR0aGlzLT5vcHRpb24gOiBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dC0+Z2V0KCdvcHRpb24nKSksDQoJCQknY2FjaGViYXNlJyA9PiAkY2xpZW50X2lkID8gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY2FjaGUnIDogJGNvbmYtPmdldCgnY2FjaGVfcGF0aCcsIEpQQVRIX1NJVEUgLiAnL2NhY2hlJyksDQoJCQkncmVzdWx0JyA9PiB0cnVlLA0KCQkpOw0KDQoJCXRyeQ0KCQl7DQoJCQkvKiogQHZhciBcSkNhY2hlQ29udHJvbGxlckNhbGxiYWNrICRjYWNoZSAqLw0KCQkJJGNhY2hlID0gXEpDYWNoZTo6Z2V0SW5zdGFuY2UoJ2NhbGxiYWNrJywgJG9wdGlvbnMpOw0KCQkJJGNhY2hlLT5jbGVhbigpOw0KCQl9DQoJCWNhdGNoIChcSkNhY2hlRXhjZXB0aW9uICRleGNlcHRpb24pDQoJCXsNCgkJCSRvcHRpb25zWydyZXN1bHQnXSA9IGZhbHNlOw0KCQl9DQoNCgkJLy8gVHJpZ2dlciB0aGUgb25Db250ZW50Q2xlYW5DYWNoZSBldmVudC4NCgkJXEpFdmVudERpc3BhdGNoZXI6OmdldEluc3RhbmNlKCktPnRyaWdnZXIoJ29uQ29udGVudENsZWFuQ2FjaGUnLCAkb3B0aW9ucyk7DQoJfQ==', '[[[Component]]] Privacy Tabs', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.0.3', '{\"property_selection0\":{\"property\":\"9\"},\"property_selection1\":{\"property\":\"7\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Privacy Tabs', '', 1, '', '', 1, '2019-08-17 01:17:45', '2024-08-06 20:53:40', 98, '', 2),
-(3, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to build the privacy plugin for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to link your admin views to the privacy suite of Joomla via our other Content - [[[Component]]] Privacy Tabs plugin.', '{}', 'b49dddae-2195-4d2a-8f12-69032852a104', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbjsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcUGxhY2VmaXg7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xJbmRlbnQ7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xMaW5lOw==', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"},\"method_selection2\":{\"method\":\"70\"},\"method_selection3\":{\"method\":\"119\"},\"method_selection4\":{\"method\":\"120\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoqDQoJICogR2xvYmFsIHN3aXRjaCB0byBzZWUgaWYgY29tcG9uZW50IGhhdmUgbmVlZCBvZiBwcml2YWN5IHBsdWdpbiB0byBiZSBsb2FkZWQuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkbG9hZFByaXZhY3kgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIFRoZSBWaWV3cyBMaW5rZWQgdG8gSm9vbWxhIFVzZXJzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGFjdGl2ZVZpZXdzID0gW107DQoNCgkvKioNCgkgKiBUaGUgVmlld3MgcGVybWlzc2lvbiBmaWVsZHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkcGVybWlzc2lvbkZpZWxkcyA9IFtdOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGFkZCB0aGUgcHJpdmFjeQ0KCQkkdmlldy0+cGFyYW1zID0gKGlzc2V0KCR2aWV3LT5wYXJhbXMpICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXMpKSA/IGpzb25fZGVjb2RlKCR2aWV3LT5wYXJhbXMsIHRydWUpIDogJHZpZXctPnBhcmFtczsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXMpICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPnBhcmFtc1sncHJpdmFjeSddKSAmJiANCgkJCWlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYWN0aXZhdGUnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhY3RpdmF0ZSddID09IDEpDQoJCXsNCgkJCS8vIGFjdGl2YXRlIHRoZSBsb2FkIG9mIHRoZSBwcml2YWN5IHBsdWdpbg0KCQkJJHRoaXMtPmxvYWRQcml2YWN5ID0gdHJ1ZTsNCgkJCS8vIGxvYWQgdGhlIGFkbWluIHZpZXcgZGV0YWlscw0KCQkJJHRoaXMtPmFjdGl2ZVZpZXdzWyR2aWV3LT5pZF0gPSAkdmlldzsNCgkJCS8vIGFkZCBwZXJtaXNzaW9ucw0KCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zID0gKGlzc2V0KCR2aWV3LT5hZGRwZXJtaXNzaW9ucykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHZpZXctPmFkZHBlcm1pc3Npb25zKSkgPyBqc29uX2RlY29kZSgkdmlldy0+YWRkcGVybWlzc2lvbnMsIHRydWUpIDogbnVsbDsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+YWRkcGVybWlzc2lvbnMpKQ0KCQkJew0KCQkJCSR2aWV3LT5hZGRwZXJtaXNzaW9ucyA9IGFycmF5X3ZhbHVlcygkdmlldy0+YWRkcGVybWlzc2lvbnMpOw0KCQkJCS8vIGFkZCB0aGUgbmV3IHBlcm1pc3Npb25zDQoJCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zW10gPSBhcnJheSgnYWN0aW9uJyA9PiAndmlldy5wcml2YWN5LmRlbGV0ZScsICdpbXBsZW1lbnRhdGlvbicgPT4gMywgJ3RpdGxlJyA9PiAkdmlldy0+bmFtZV9saXN0IC4gJyBQcml2YWN5IERlbGV0ZScsICdkZXNjcmlwdGlvbicgPT4gJyBBbGxvd3MgdGhlIHVzZXJzIGluIHRoaXMgZ3JvdXAgdG8gcmVtb3ZlIHRoZWlyIHBlcnNvbmFsIGRhdGEgaW4gJyAuICR2aWV3LT5uYW1lX2xpc3QgLiAnIHZpYSB0aGUgSm9vbWxhIHByaXZhY3kgc3VpdGUuJyk7DQoJCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zW10gPSBhcnJheSgnYWN0aW9uJyA9PiAndmlldy5wcml2YWN5LmFjY2VzcycsICdpbXBsZW1lbnRhdGlvbicgPT4gMywgJ3RpdGxlJyA9PiAkdmlldy0+bmFtZV9saXN0IC4gJyBQcml2YWN5IEFjY2VzcycsICdkZXNjcmlwdGlvbicgPT4gJyBBbGxvd3MgdGhlIHVzZXJzIGluIHRoaXMgZ3JvdXAgdG8gYWNjZXNzIHRoZWlyIHBlcnNvbmFsIGRhdGEgaW4gJyAuICR2aWV3LT5uYW1lX2xpc3QgLiAnIHZpYSB0aGUgSm9vbWxhIHByaXZhY3kgc3VpdGUuJyk7DQoJCQkJLy8gY29udmVydCBiYWNrIHRvIGpzb24NCgkJCQkkdmlldy0+YWRkcGVybWlzc2lvbnMgPSBqc29uX2VuY29kZSgkdmlldy0+YWRkcGVybWlzc2lvbnMsIEpTT05fRk9SQ0VfT0JKRUNUKTsNCgkJCX0NCgkJCS8vIGFkZCBwbGFjZWhvbGRlcnMgdG8gdmlldyBpZiBub3QgYWxyZWFkeSBzZXQNCgkJCWlmICghaXNzZXQoJHRoaXMtPmFjdGl2ZVZpZXdzWyR2aWV3LT5pZF0tPnBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJJHRoaXMtPmFjdGl2ZVZpZXdzWyR2aWV3LT5pZF0tPnBsYWNlaG9sZGVycyA9IENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5hY3RpdmU7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBjb21wb25lbnQgbmVlZHMgYSBwcml2YWN5IHBsdWdpbiBsb2FkZWQNCgkJaWYgKCR0aGlzLT5sb2FkUHJpdmFjeSkNCgkJew0KCQkJJHBsdWdpbiA9IEpQbHVnaW5IZWxwZXI6OmdldFBsdWdpbignY29udGVudCcsICdbW1tjb21wb25lbnRdXV1wcml2YWN5dGFicycpOw0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBqc29uDQoJCQlpZiAoaXNzZXQoJHBsdWdpbi0+cGFyYW1zKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcGx1Z2luLT5wYXJhbXMpKQ0KCQkJew0KCQkJCS8vIENvbnZlcnQgdGhlIHBhcmFtcyBmaWVsZCB0byBhbiBhcnJheS4NCgkJCQkkcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnk7DQoJCQkJJHJlZ2lzdHJ5LT5sb2FkU3RyaW5nKCRwbHVnaW4tPnBhcmFtcyk7DQoJCQkJJHBsdWdpbi0+cGFyYW1zID0gJHJlZ2lzdHJ5LT50b0FycmF5KCk7DQoJCQl9DQoJCQkvLyBub3cgZ2V0IHRoZSBwbHVnaW4gSUQgaWYgc2V0DQoJCQlpZiAoaXNzZXQoJHBsdWdpbi0+cGFyYW1zWydwbHVnaW4nXSkgJiYgJHBsdWdpbi0+cGFyYW1zWydwbHVnaW4nXSA+IDApDQoJCQl7DQoJCQkJLy8gaWYgbGlua2VkIGl0IHdpbGwgb25seSBsb2FkIGl0IG9uY2UNCgkJCQlDRmFjdG9yeTo6XygnSm9vbWxhcGx1Z2luLkRhdGEnKS0+c2V0KCRwbHVnaW4tPnBhcmFtc1sncGx1Z2luJ10pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCUZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmVucXVldWVNZXNzYWdlKFRleHQ6Ol8oJ1lvdSBkbyBub3QgaGF2ZSBhIGdsb2JhbCBwcml2YWN5IHBsdWdpbiBzZXR1cCwgc28gdGhlIGludGVncmF0aW9uIHdpdGggSm9vbWxhIHByaXZhY3kgc3VpdGUgY291bGQgbm90IGJlIGJ1aWxkLicpLCAnV2FybmluZycpOw0KCQkJCSR0aGlzLT5sb2FkUHJpdmFjeT0gZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgVXBkYXRlIEZpbGVzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZVVwZGF0ZUZpbGVzKCRjb21waWxlcikNCgl7DQoJCS8vIGNoZWNrIGlmIHByaXZhY3kgaXMgdG8gYmUgbG9hZGVkDQoJCWlmICgkdGhpcy0+bG9hZFByaXZhY3kgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmFjdGl2ZVZpZXdzKSkNCgkJew0KCQkJLy8gZ2V0IGNvbXBpbGVyIGRlZmF1bHRzDQoJCQkkc3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IENGYWN0b3J5OjpfKCdDb25maWcnKS0+Z2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCBmYWxzZSk7DQoJCQkkZXhwb3J0VGV4dE9ubHkgPSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmdldCgnZXhwb3J0X3RleHRfb25seScsIDEpOw0KDQoJCQkvLyBsb2FkIHRoZSBnZXRQcml2YWN5RXhwb3J0IGZ1bmN0aW9ucw0KCQkJZm9yZWFjaCAoJHRoaXMtPmFjdGl2ZVZpZXdzIGFzICRpZCA9PiAmJHZpZXcpDQoJCQl7DQoJCQkJLy8gc2V0IHBlcm1pc3Npb25zIGJhc2VkIG9uIHZpZXcNCgkJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydwZXJtaXNzaW9ucyddKSkNCgkJCQl7DQoJCQkJCUNGYWN0b3J5OjpfKCdDb25maWcnKS0+c2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCAoYm9vbCkgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydwZXJtaXNzaW9ucyddKTsNCgkJCQl9DQoNCgkJCQkvLyBhbGxvdyB0ZXh0IG9ubHkgZXhwb3J0DQoJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5zZXQoJ2V4cG9ydF90ZXh0X29ubHknLCAxKTsNCg0KCQkJCS8vIHNldCB2aWV3IGxpc3QgbmFtZQ0KCQkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJCSR2aWV3TmFtZV9zaW5nbGUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX3NpbmdsZSk7DQoJCQkJLy8gbG9hZCB0aGUgZnVuY3Rpb24NCgkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk11bHRpJyktPmFkZCgkdmlld05hbWVfbGlzdCAuICd8TU9ERUxFWFBPUlRNRVRIT0QnLA0KCQkJCQkkY29tcGlsZXItPnNldEdldEl0ZW1zTW9kZWxNZXRob2QoDQoJCQkJCQkkdmlld05hbWVfc2luZ2xlLA0KCQkJCQkJJHZpZXdOYW1lX2xpc3QsDQoJCQkJCQlbDQoJCQkJCQkJJ2Z1bmN0aW9uTmFtZScgPT4gJ2dldFByaXZhY3lFeHBvcnQnLA0KCQkJCQkJCSdkb2NEZXNjJyA9PiAnTWV0aG9kIHRvIGdldCBkYXRhIGR1cmluZyBhbiBleHBvcnQgcmVxdWVzdC4nLA0KCQkJCQkJCSd0eXBlJyA9PiAncHJpdmFjeScNCgkJCQkJCV0NCgkJCQkJKQ0KCQkJCSk7DQoJCQkJLy8gZ2V0IHRoZSBwZXJtaXNzaW9ucyBidWlsZGluZyB2YWx1ZXMgZm9yIGxhdGVyIGlmIG5lZWRlZA0KCQkJCWlmIChDRmFjdG9yeTo6XygnQ29uZmlnJyktPmdldCgncGVybWlzc2lvbl9zdHJpY3RfcGVyX2ZpZWxkJywgZmFsc2UpICYmDQoJCQkJCWlzc2V0KCRjb21waWxlci0+cGVybWlzc2lvbkZpZWxkc1skdmlld05hbWVfc2luZ2xlXSkgJiYNCgkJCQkJU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBpbGVyLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdKSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdID0gJGNvbXBpbGVyLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gc2V0IGNvbXBpbGVyIGRlZmF1bHRzDQoJCQlDRmFjdG9yeTo6XygnQ29uZmlnJyktPnNldCgncGVybWlzc2lvbl9zdHJpY3RfcGVyX2ZpZWxkJywgJHN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpOw0KCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5zZXQoJ2V4cG9ydF90ZXh0X29ubHknLCAkZXhwb3J0VGV4dE9ubHkpOw0KDQoJCQkvLyBhZGQgaGVscGVyIGNsYXNzZXMNCgkJCSRoZWxwZXJfc3RyaW5ncyA9IFsnQ1VTVE9NX0hFTFBFUl9TQ1JJUFQnLCAnU0lURV9DVVNUT01fSEVMUEVSX1NDUklQVCcsICdCT1RIX0NVU1RPTV9IRUxQRVJfU0NSSVBUJ107DQoJCQkkcHJpdmFjeV9ldmVudHMgPSBbDQoJCQkJJ1ByaXZhY3lDYW5SZW1vdmVEYXRhJyA9PiB0cnVlLA0KCQkJCSdQcml2YWN5RXhwb3J0UmVxdWVzdCcgPT4gdHJ1ZSwNCgkJCQknUHJpdmFjeVJlbW92ZURhdGEnID0+IHRydWUNCgkJCV07DQoNCgkJCWZvcmVhY2ggKCRoZWxwZXJfc3RyaW5ncyBhcyAkaGVscGVyKQ0KCQkJew0KCQkJCWlmICgoJGhlbHBlcl9jb250ZW50ID0gQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+Z2V0KCRoZWxwZXIpKSAhPT0gbnVsbCAmJg0KCQkJCQlTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaGVscGVyX2NvbnRlbnQpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJHByaXZhY3lfZXZlbnRzIGFzICRwcml2YWN5X2V2ZW50ID0+ICYkYWRkKQ0KCQkJCQl7DQoJCQkJCQkvLyBjaGVjayBpZiB0aGUgZXZlbiBpcyBvdmVyd3JpdGVuDQoJCQkJCQlpZiAoc3RycG9zKCRoZWxwZXJfY29udGVudCwgJ3B1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb24nIC4gJHByaXZhY3lfZXZlbnQgLiAnKCcpICE9PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkkYWRkID0gZmFsc2U7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIGFkZCB0aGUgZXZlbnRzIHN0aWxsIG5lZWRlZA0KCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWRkKCdCT1RIX0NVU1RPTV9IRUxQRVJfU0NSSVBUJywNCgkJCQlDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkdGhpcy0+Z2V0SGVscGVyTWV0aG9kKCRwcml2YWN5X2V2ZW50cykpDQoJCQkpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBMYW5nIEZpbGUgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRMYW5nRmlsZURhdGEoKQ0KCXsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5sYW5ndWFnZUFycmF5KSkNCgkJew0KCQkJZm9yZWFjaCgkdGhpcy0+bGFuZ3VhZ2VBcnJheSBhcyAka2V5ID0+ICRzdHJpbmcpDQoJCQl7DQoJCQkJQ0ZhY3Rvcnk6Ol8oJ0xhbmd1YWdlJyktPnNldCgnc2l0ZScsICRrZXksICRzdHJpbmcpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBIZWxwZXIgbWV0aG9kcyBuZWVkZWQgdG8gaW50ZWdyYXRlIHdpdGggSm9vbWxhIFByaXZhY3kgU3VpdGUNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkaGVscGVyTWV0aG9kcyAgVGhlIGhlbHBlciBtZXRob2RzIHN0cmluZw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhlbHBlck1ldGhvZCgmJGV2ZW50cykNCgl7DQoJCSRtZXRob2RzID0gJyc7DQoJCWZvcmVhY2ggKCRldmVudHMgYXMgJGV2ZW50ID0+ICRhZGQpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHRoZSBldmVuIHNob3VsZCBiZSBhZGRlZA0KCQkJaWYgKCRhZGQpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSBldmVudA0KCQkJCSR0aGlzLT57J3NldCcuJGV2ZW50fSgkbWV0aG9kcyk7DQoJCQl9DQoJCX0NCgkJLy8gb25seSBhZGQgaGVhZGVyIGlmIHRoZXJlIHdhcyBldmVudHMgYWRkZWQNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRtZXRob2RzKSkNCgkJew0KCQkJJG1ldGhvZHMgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA8PDw9PT0gUHJpdmFjeSBpbnRlZ3JhdGlvbiB3aXRoIEpvb21sYSBQcml2YWN5IHN1aXRlID09PT4+PiIgLiBQSFBfRU9MIC4gJG1ldGhvZHM7DQoJCX0NCg0KCQlyZXR1cm4gJG1ldGhvZHM7DQoJfQ0KDQoJLyoqDQoJICogU2V0IFByaXZhY3kgQ2FuIFJlbW92ZSBEYXRhDQoJICogDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZHMgIFRoZSBtZXRob2RzIHN0cmluZw0KCSAqIA0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0UHJpdmFjeUNhblJlbW92ZURhdGEoJiRtZXRob2RzKQ0KCXsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIvKioiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHJlbW92ZSBpbmZvcm1hdGlvbiByZXF1ZXN0IGNhbiBiZSBwcm9jZXNzZWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBQcml2YWN5UGx1Z2luICBcJHBsdWdpbiAgVGhlIHBsdWdpbiBiZWluZyBwcm9jZXNzZWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lSZW1vdmFsU3RhdHVzICBcJHN0YXR1cyAgVGhlIHN0YXR1cyBiZWluZyBzZXQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lUYWJsZVJlcXVlc3QgIFwkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHBhcmFtICAgSlVzZXIgICAgICAgICAgICAgICAgXCR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHJldHVybiAgUHJpdmFjeVJlbW92YWxTdGF0dXMiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqLyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAicHVibGljIHN0YXRpYyBmdW5jdGlvbiBvblByaXZhY3lDYW5SZW1vdmVEYXRhKCZcJHBsdWdpbiwgJlwkc3RhdHVzLCAmXCRyZXF1ZXN0LCAmXCR1c2VyKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAieyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQnVja2V0IHRvIGdldCBhbGwgcmVhc29ucyB3aHkgcmVtb3ZhbCBub3QgYWxsb3dlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRyZWFzb25zID0gYXJyYXkoKTsiOw0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KDQoJCQkvLyBsb2FkIHRoZSBjYW5EbyBmcm9tIGdldEFjdGlvbnMgaGVscGVyIG1ldGhvZA0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSAiIC4gJHZpZXctPm5hbWVfbGlzdDsNCgkJCS8vIHNldCB0aGUgaWYgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBwZXJtaXNzaW9uIGJ1aWxkZXINCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRBY3Rpb24oJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUuZGVsZXRlJykNCgkJCQkuICInLCAnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJykgJiYgIVwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBDRmFjdG9yeTo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEFjdGlvbigkdmlld05hbWVfc2luZ2xlLCAnY29yZS5wcml2YWN5LmRlbGV0ZScpDQoJCQkJLiAiJywgJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIicpKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkJLy8gc2V0IGxhbmd1YWdlIGtleQ0KCQkJJGxhbmdfa2V5ID0gJHZpZXctPnBsYWNlaG9sZGVyc1tQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKV0gLiAnX1BSSVZBQ1lfQ0FOVF9SRU1PVkVfJyAuICR2aWV3LT5wbGFjZWhvbGRlcnNbUGxhY2VmaXg6Ol8oIlZJRVdTIildOw0KCQkJLy8gc2V0IGxhbmd1YWdlIHN0cmluZw0KCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbJGxhbmdfa2V5XSA9ICJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byByZW1vdmUvZGVsZXRlICIuICR2aWV3LT5uYW1lX2xpc3QgLiAiLiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcmVhc29uc1tdID0gSlRlIiAuICJ4dDo6XygnIiAuICRsYW5nX2tleSAuICInKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJCS8vIHNldCBsYW5ndWFnZSBrZXkNCgkJCSRsYW5nX2tleSA9ICR2aWV3LT5wbGFjZWhvbGRlcnNbUGxhY2VmaXg6Ol8oIkxBTkdfUFJFRklYIildIC4gJ19QUklWQUNZX0NBTlRfUkVNT1ZFX0NPTlRBQ1RfU1VQUE9SVCc7DQoJCX0NCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDaGVjayBpZiBhbnkgcmVhc29ucyB3ZXJlIGZvdW5kIG5vdCB0byBhbGxvdyByZW1vdmFsIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoU3VwZXJfXyIuIl8wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soXCRyZWFzb25zKSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkc3RhdHVzLT5jYW5SZW1vdmUgPSBmYWxzZTsiOw0KCQkvLyBzZXQgbGFuZ3VhZ2Ugc3RyaW5nDQoJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nX2tleV0gPSAnUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgbW9yZSBkZXRhaWxzLic7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRzdGF0dXMtPnJlYXNvbiA9IGltcGxvZGUoJyAnIC4gUEhQX0VPTCwgXCRyZWFzb25zKSAuICcgJyAuIFBIUF9FT0wgLiBKVGUiIC4gInh0OjpfKCciIC4gJGxhbmdfa2V5IC4gIicpOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAicmV0dXJuIFwkc3RhdHVzOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCX0NCg0KCS8qKg0KCSAqIFNldCBQcml2YWN5IEV4cG9ydCBSZXF1ZXN0DQoJICogDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZHMgIFRoZSBtZXRob2RzIHN0cmluZw0KCSAqIA0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0UHJpdmFjeUV4cG9ydFJlcXVlc3QoJiRtZXRob2RzKQ0KCXsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIvKioiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIFByb2Nlc3NlcyBhbiBleHBvcnQgcmVxdWVzdCBmb3IgSm9vbWxhIGNvcmUgdXNlciBkYXRhIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHBhcmFtICAgUHJpdmFjeVBsdWdpbiAgXCRwbHVnaW4gIFRoZSBwbHVnaW4gYmVpbmcgcHJvY2Vzc2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBEb21haW5BcnJheSAgXCRkb21haW5zICBUaGUgYXJyYXkgb2YgZG9tYWlucyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgXCRyZXF1ZXN0ICBUaGUgcmVxdWVzdCByZWNvcmQgYmVpbmcgcHJvY2Vzc2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICBcJHVzZXIgICAgIFRoZSB1c2VyIGFjY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCBpZiBhdmFpbGFibGUiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqLyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAicHVibGljIHN0YXRpYyBmdW5jdGlvbiBvblByaXZhY3lFeHBvcnRSZXF1ZXN0KCZcJHBsdWdpbiwgJlwkZG9tYWlucywgJlwkcmVxdWVzdCwgJlwkdXNlcikiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInsiOw0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB2aWV3IGxpc3QgbmFtZQ0KCQkJJHZpZXdOYW1lX2xpc3QgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX2xpc3QpOw0KCQkJLy8gc2V0IHZpZXcgc2luZ2xlIG5hbWUNCgkJCSR2aWV3TmFtZV9zaW5nbGUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX3NpbmdsZSk7DQoJCQkvLyBsb2FkIHRoZSBjYW5EbyBmcm9tIGdldEFjdGlvbnMgaGVscGVyIG1ldGhvZA0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGFjY2VzcyAiIC4gJHZpZXctPm5hbWVfbGlzdDsNCgkJCS8vIHNldCB0aGUgaWYgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBwZXJtaXNzaW9uIGJ1aWxkZXINCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKFwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBDRmFjdG9yeTo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEdsb2JhbCgkdmlld05hbWVfc2luZ2xlLCAnY29yZS5hY2Nlc3MnKQ0KCQkJCS4gIicsICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSB8fCBcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRHbG9iYWwoJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUucHJpdmFjeS5hY2Nlc3MnKQ0KCQkJCS4gIicsICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgR2V0ICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZG9tYWluc1tdID0gc2VsZjo6Y3JlYXRlIiAuIHVjZmlyc3QoJHZpZXdOYW1lX2xpc3QpIC4gIkRvbWFpbihcJHBsdWdpbiwgXCR1c2VyKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJfQ0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInJldHVybiBcJGRvbWFpbnM7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICJ9IiAuIFBIUF9FT0w7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmFjdGl2ZVZpZXdzIGFzICR2aWV3KQ0KCQl7DQoJCQkvLyBzZXQgdmlldyBsaXN0IG5hbWUNCgkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIi8qKiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIENyZWF0ZSB0aGUgZG9tYWluIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZTsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBKVGFibGVVc2VyICBcJHVzZXIgIFRoZSBKVGFibGVVc2VyIG9iamVjdCB0byBwcm9jZXNzIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICovIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAicHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRG9tYWluKCZcJHBsdWdpbiwgJlwkdXNlcikiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgY3JlYXRlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiBkb21haW4iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJGRvbWFpbiA9IHNlbGY6OmNyZWF0ZURvbWFpbignIiAuICR2aWV3TmFtZV9zaW5nbGUgLiAiJywgJyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiXyIgLiAkdmlld05hbWVfc2luZ2xlIC4gIl9kYXRhJyk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGRhdGFiYXNlIG9iamVjdCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgYWxsIGl0ZW0gaWRzIG9mICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiB0aGF0IGJlbG9uZyB0byB0aGlzIHVzZXIiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICItPnNlbGVjdCgnaWQnKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi0+ZnJvbShcJGRiLT5xdW90ZU5hbWUoJyNfXyIgLiBQbGFjZWZpeDo6XygnY29tcG9uZW50JykgLiAnXycgLiAkdmlld05hbWVfc2luZ2xlIC4gIicpKTsiOw0KCQkJLy8gZ2V0IHZpYSBjdXN0b20gc2NyaXB0DQoJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSA9PSAzKQ0KCQkJew0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBzdHJfcmVwbGFjZShhcnJheV9rZXlzKCR2aWV3LT5wbGFjZWhvbGRlcnMpLCBhcnJheV92YWx1ZXMoJHZpZXctPnBsYWNlaG9sZGVycyksICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnY3VzdG9tX2xpbmsnXSk7DQoJCQl9DQoJCQkvLyBqdXN0IGFub3RoZXIgZmllbGQNCgkJCWVsc2VpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSA9PSAyICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnb3RoZXJfdXNlcl9maWVsZCddKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGZpZWxkIG5hbWUNCgkJCQlpZiAoKCRmaWVsZF9uYW1lID0gJHRoaXMtPmdldEZpZWxkTmFtZSgkdmlldy0+ZmllbGRzLCAkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ290aGVyX3VzZXJfZmllbGQnXSkpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeS0+d2hlcmUoXCRkYi0+cXVvdGVOYW1lKCciIC4gJGZpZWxkX25hbWUgLiAiJykgLiAnID0gJyAuIFwkZGItPnF1b3RlKFwkdXNlci0+aWQpKTsiOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBnaXZlIGEgd2FybmluZyBtZXNzYWdlIChUT0RPKQ0KDQoJCQkJCS8vIHN0b3AgYW55IGZyb20gbG9hZGluZw0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiID09PT0gRVJST1IgPT09PT0gRVJST1IgPT09PT09IChmaWVsZCBuYW1lIG5vdCBmb3VuZCkiOw0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAtMic7IC8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIDwtLSB0aGlzIHdpbGwgbmV2ZXIgcmV0dXJuIGFueSB2YWx1ZS4gQ2hlY2sgeW91ciBbb3RoZXIgdXNlciBmaWVsZF0gc2VsZWN0ZWQgaW4gdGhlIGFkbWluIHZpZXcgcHJpdmFjeSB0YWIuIjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBnZXQgYmFzZWQgb24gY3JlYXRlZCBieQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeS0+d2hlcmUoXCRkYi0+cXVvdGVOYW1lKCdjcmVhdGVkX2J5JykgLiAnID0gJyAuIFwkZGItPnF1b3RlKFwkdXNlci0+aWQpKTsiOw0KCQkJfQ0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgYWxsIGl0ZW1zIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIGRvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcGtzID0gXCRkYi0+c2V0UXVlcnkoXCRxdWVyeSktPmxvYWRDb2x1bW4oKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgdGhlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiBtb2RlbCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgnIiAuICR2aWV3TmFtZV9saXN0IC4gIicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJyk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgR2V0IGFsbCBpdGVtIGRldGFpbHMgb2YgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlciI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkaXRlbXMgPSBcJG1vZGVsLT5nZXRQcml2YWN5RXhwb3J0KFwkcGtzLCBcJHVzZXIpOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGNoZWNrIGlmIHdlIGhhdmUgaXRlbXMgc2luY2UgcGVybWlzc2lvbnMgY291bGQgYmxvY2sgdGhlIHJlcXVlc3QiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoU3VwZXJfXyIuIl8wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soXCRpdGVtcykpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFJlbW92ZSAiIC4gJHZpZXctPm5hbWVfc2luZ2xlIC4gIiBkZWZhdWx0IGNvbHVtbnMiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJmb3JlYWNoIChhcnJheSgncGFyYW1zJywgJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnLCAnY3JlYXRlZCcsICdjcmVhdGVkX2J5JywgJ21vZGlmaWVkJywgJ21vZGlmaWVkX2J5JywgJ3B1Ymxpc2hlZCcsICdvcmRlcmluZycsICdhY2Nlc3MnLCAndmVyc2lvbicsICdoaXRzJykgYXMgXCRjb2x1bW4pIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkaXRlbXMgPSBBcnJheUhlbHBlcjo6ZHJvcENvbHVtbihcJGl0ZW1zLCBcJGNvbHVtbik7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGxvYWQgdGhlIGl0ZW1zIGludG8gdGhlIGRvbWFpbiBvYmplY3QiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJmb3JlYWNoIChcJGl0ZW1zIGFzIFwkaXRlbSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCRkb21haW4tPmFkZEl0ZW0oc2VsZjo6Y3JlYXRlSXRlbUZyb21BcnJheShcJGl0ZW0sIFwkaXRlbVsnaWQnXSkpOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAicmV0dXJuIFwkZG9tYWluOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCgkJfQ0KCQkvLyB3ZSBtdXN0IGFkZCB0aGVzZSBoZWxwZXIgbWV0aG9kcw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQ3JlYXRlIGEgbmV3IGRvbWFpbiBvYmplY3QiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBzdHJpbmcgIFwkbmFtZSAgICAgICAgIFRoZSBkb21haW4ncyBuYW1lIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBzdHJpbmcgIFwkZGVzY3JpcHRpb24gIFRoZSBkb21haW4ncyBkZXNjcmlwdGlvbiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEByZXR1cm4gIFByaXZhY3lFeHBvcnREb21haW4iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAc2luY2UgICAzLjkuMCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICovIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICJwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZURvbWFpbihcJG5hbWUsIFwkZGVzY3JpcHRpb24gPSAnJykiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkZG9tYWluICAgICAgICAgICAgICA9IG5ldyBQcml2YWN5RXhwb3J0RG9tYWluOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRkb21haW4tPm5hbWUgICAgICAgID0gXCRuYW1lOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRkb21haW4tPmRlc2NyaXB0aW9uID0gXCRkZXNjcmlwdGlvbjsiOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInJldHVybiBcJGRvbWFpbjsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIn0iOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQ3JlYXRlIGFuIGl0ZW0gb2JqZWN0IGZvciBhbiBhcnJheSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgXCRkYXRhICAgIFRoZSBhcnJheSBkYXRhIHRvIGNvbnZlcnQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIGludGVnZXJ8bnVsbCAgXCRpdGVtSWQgIFRoZSBJRCBvZiB0aGlzIGl0ZW0iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0SXRlbSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBzaW5jZSAgIDMuOS4wIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKi8iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlSXRlbUZyb21BcnJheShhcnJheSBcJGRhdGEsIFwkaXRlbUlkID0gbnVsbCkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkaXRlbSA9IG5ldyBQcml2YWN5RXhwb3J0SXRlbTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkaXRlbS0+aWQgPSBcJGl0ZW1JZDsiOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gImZvcmVhY2ggKFwkZGF0YSBhcyBcJGtleSA9PiBcJHZhbHVlKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAieyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiaWYgKGlzX29iamVjdChcJHZhbHVlKSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkdmFsdWUgPSAoYXJyYXkpIFwkdmFsdWU7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoaXNfYXJyYXkoXCR2YWx1ZSkpIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJHZhbHVlID0gcHJpbnRfcihcJHZhbHVlLCB0cnVlKTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZmllbGQgICAgICAgID0gbmV3IFByaXZhY3lFeHBvcnRGaWVsZDsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZmllbGQtPm5hbWUgID0gXCRrZXk7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGZpZWxkLT52YWx1ZSA9IFwkdmFsdWU7IjsNCg0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGl0ZW0tPmFkZEZpZWxkKFwkZmllbGQpOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAicmV0dXJuIFwkaXRlbTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGZpZWxkIG5hbWUNCgkgKiANCgkgKiBAcGFyYW0gICBhcnJheSAgICRmaWVsZHMgIFRoZSBmaWVsZHMgYXJyYXkNCgkgKiBAcGFyYW0gICBpbnQgICAgICAgJGlkICAgICAgIFRoZSBmaWVsZCBpZA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZyAgICBUaGUgZmllbGQgbmFtZQ0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRGaWVsZE5hbWUoJiRmaWVsZHMsICRpZCkNCgl7DQoJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKQ0KCQl7DQoJCQlpZiAoJGZpZWxkWydmaWVsZCddID09ICRpZCkNCgkJCXsNCgkJCQlyZXR1cm4gJGZpZWxkWydiYXNlX25hbWUnXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogU2V0IFByaXZhY3kgUmVtb3ZlIERhdGENCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kcyAgVGhlIG1ldGhvZHMgc3RyaW5nDQoJICogDQoJICogQHJldHVybiAgdm9pZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRQcml2YWN5UmVtb3ZlRGF0YSgmJG1ldGhvZHMpDQoJew0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogUmVtb3ZlcyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSByZW1vdmUgaW5mb3JtYXRpb24gcmVxdWVzdCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lUYWJsZVJlcXVlc3QgIFwkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHBhcmFtICAgSlVzZXIgICAgICAgICAgICAgICAgXCR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHJldHVybiAgdm9pZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICovIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICJwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9uUHJpdmFjeVJlbW92ZURhdGEoJlwkcGx1Z2luLCAmXCRyZXF1ZXN0LCAmXCR1c2VyKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAieyI7DQoJCWZvcmVhY2ggKCR0aGlzLT5hY3RpdmVWaWV3cyBhcyAkdmlldykNCgkJew0KCQkJLy8gc2V0IHRoZSBhbm9ueW1pemUgc3dpdGNoDQoJCQkkYW5vbnltaXplID0gZmFsc2U7DQoJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemUnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemUnXSA9PSAxICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplX2ZpZWxkcyddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSwgdHJ1ZSkpDQoJCQl7DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJGFub255bWl6ZSA9IHRydWU7DQoJCQl9DQoJCQkvLyBzZXQgdmlldyBsaXN0IG5hbWUNCgkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KCQkJLy8gbG9hZCB0aGUgY2FuRG8gZnJvbSBnZXRBY3Rpb25zIGhlbHBlciBtZXRob2QNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBkZWxldCAiIC4gJHZpZXctPm5hbWVfbGlzdDsNCgkJCS8vIHNldCB0aGUgaWYgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBwZXJtaXNzaW9uIGJ1aWxkZXINCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKFwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBDRmFjdG9yeTo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEFjdGlvbigkdmlld05hbWVfc2luZ2xlLCAnY29yZS5kZWxldGUnKQ0KCQkJCS4gIicsICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSB8fCBcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRBY3Rpb24oJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUucHJpdmFjeS5kZWxldGUnKQ0KCQkJCS4gIicsICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBwbGFpbiBkZWxldGUsIG9yIGl0IGlzIGEgQW5vbnltaXplIA0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gYW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBBbm9ueW1pemUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZSAuICIgZGF0YSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJzZWxmOjphbm9ueW1pemUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRGF0YShcJHBsdWdpbiwgXCR1c2VyKTsiOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGp1c3QgZHVtcCwgZGVsZXRlIHRoZSByb3dzDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBSZW1vdmUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZSAuICIgZGF0YSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJzZWxmOjpyZW1vdmUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRGF0YShcJHBsdWdpbiwgXCR1c2VyKTsiOw0KCQkJfQ0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJfQ0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCg0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB0aGUgYW5vbnltaXplIHN3aXRjaA0KCQkJJGFub255bWl6ZSA9IGZhbHNlOw0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplJ10gPT0gMSAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemVfZmllbGRzJ10sIHRydWUpKQ0KCQkJew0KCQkJCS8vIEFub255bWl6ZSB0aGUgZGF0YQ0KCQkJCSRhbm9ueW1pemUgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gc2V0IHZpZXcgbGlzdCBuYW1lDQoJCQkkdmlld05hbWVfbGlzdCA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfbGlzdCk7DQoJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJJHZpZXdOYW1lX3NpbmdsZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfc2luZ2xlKTsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIvKioiOw0KDQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgcGxhaW4gZGVsZXRlLCBvciBpdCBpcyBhIEFub255bWl6ZQ0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBBbm9ueW1pemUgdGhlICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRhdGEiOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIERlbGV0ZSB0aGUgcm93cw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogUmVtb3ZlIHRoZSAiIC4gJHZpZXctPm5hbWVfc2luZ2xlIC4gIiBkYXRhIjsNCgkJCX0NCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIEpUYWJsZVVzZXIgIFwkdXNlciAgVGhlIEpUYWJsZVVzZXIgb2JqZWN0IHRvIHByb2Nlc3MiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEByZXR1cm4gIHZvaWQiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKi8iOw0KDQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgcGxhaW4gZGVsZXRlLCBvciBpdCBpcyBhIEFub255bWl6ZSANCgkJCWlmICgkYW5vbnltaXplKQ0KCQkJew0KCQkJCS8vIEFub255bWl6ZSB0aGUgZGF0YQ0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAicHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhbm9ueW1pemUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRGF0YSgmXCRwbHVnaW4sICZcJHVzZXIpIjsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBEZWxldGUgdGhlIHJvd3MNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlIiAuIHVjZmlyc3QoJHZpZXdOYW1lX2xpc3QpIC4gIkRhdGEoJlwkcGx1Z2luLCAmXCR1c2VyKSI7DQoJCQl9DQoNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGdldCBkYXRhYmFzZSBvYmplY3QiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGFsbCBpdGVtIGlkcyBvZiAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgdGhhdCBiZWxvbmcgdG8gdGhpcyB1c2VyIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeSA9IFwkZGItPmdldFF1ZXJ5KHRydWUpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLT5zZWxlY3QoJ2lkJykiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICItPmZyb20oXCRkYi0+cXVvdGVOYW1lKCcjX18iIC4gUGxhY2VmaXg6Ol8oJ2NvbXBvbmVudCcpIC4gJ18nIC4gJHZpZXdOYW1lX3NpbmdsZSAuICInKSk7IjsNCgkJCS8vIGdldCB2aWEgY3VzdG9tIHNjcmlwdA0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMykNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkdmlldy0+cGxhY2Vob2xkZXJzKSwgYXJyYXlfdmFsdWVzKCR2aWV3LT5wbGFjZWhvbGRlcnMpLCAkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2N1c3RvbV9saW5rJ10pOw0KCQkJfQ0KCQkJLy8ganVzdCBhbm90aGVyIGZpZWxkDQoJCQllbHNlaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMiAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ290aGVyX3VzZXJfZmllbGQnXSkpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBmaWVsZCBuYW1lDQoJCQkJaWYgKCgkZmllbGRfbmFtZSA9ICR0aGlzLT5nZXRGaWVsZE5hbWUoJHZpZXctPmZpZWxkcywgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydvdGhlcl91c2VyX2ZpZWxkJ10pKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnIiAuICRmaWVsZF9uYW1lIC4gIicpIC4gJyA9ICcgLiBcJGRiLT5xdW90ZShcJHVzZXItPmlkKSk7IjsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSAoVE9ETykNCg0KCQkJCQkvLyBzdG9wIGFueSBmcm9tIGxvYWRpbmcNCgkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA9PT09IEVSUk9SID09PT09IEVSUk9SID09PT09PSAoZmllbGQgbmFtZSBub3QgZm91bmQpIjsNCgkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gLTInOyAvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA8LS0gdGhpcyB3aWxsIG5ldmVyIHJldHVybiBhbnkgdmFsdWUuIENoZWNrIHlvdXIgW290aGVyIHVzZXIgZmllbGRdIHNlbGVjdGVkIGluIHRoZSBhZG1pbiB2aWV3IHByaXZhY3kgdGFiLiI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZ2V0IGJhc2VkIG9uIGNyZWF0ZWQgYnkNCgkJCWVsc2UNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnY3JlYXRlZF9ieScpIC4gJyA9ICcgLiBcJGRiLT5xdW90ZShcJHVzZXItPmlkKSk7IjsNCgkJCX0NCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGFsbCBpdGVtcyBmb3IgdGhlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiB0YWJsZSB0aGF0IGJlbG9uZyB0byB0aGlzIHVzZXIiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHBrcyA9IFwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpLT5sb2FkQ29sdW1uKCk7IjsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuUEhQX0VPTCAuICBJbmRlbnQ6Ol8oMikgLiAiaWYgKFN1cGVyX18iLiJfMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKFwkcGtzKSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IHRoZSAiIC4gJHZpZXdOYW1lX3NpbmdsZSAuICIgbW9kZWwiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJG1vZGVsID0gc2VsZjo6Z2V0TW9kZWwoJyIgLiAkdmlld05hbWVfc2luZ2xlIC4gIicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJyk7IjsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBwbGFpbiBkZWxldGUsIG9yIGl0IGlzIGEgQW5vbnltaXplIA0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIHBzZXVkb2Fub255bWlzZWQgZGF0YSBhcnJheQ0KCQkJCSRfZGF0YV9idWNrZXQgPSBhcnJheSgpOw0KCQkJCSRfcmFuZG9tX2J1Y2tldCA9IGFycmF5KCk7DQoJCQkJJF9wZXJtaXNzaW9uX2J1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemVfZmllbGRzJ10gYXMgJHJvdykNCgkJCQl7DQoJCQkJCWlmICgoJGZpZWxkX25hbWUgPSAkdGhpcy0+Z2V0RmllbGROYW1lKCR2aWV3LT5maWVsZHMsICRyb3dbJ2ZpZWxkJ10pKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCWlmICAoJ1JBTkRPTScgPT09ICRyb3dbJ3ZhbHVlJ10pIA0KCQkJCQkJew0KCQkJCQkJCSRfcmFuZG9tX2J1Y2tldFskZmllbGRfbmFtZV0gPSA4OyAvLyAoVE9ETykgbWFrZSB0aGUgc2l6ZSBkeW5hbWljDQoJCQkJCQl9DQoJCQkJCQkkX2RhdGFfYnVja2V0W10gPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIiciIC4gJGZpZWxkX25hbWUgLiAiJyA9PiAnIiAuICRyb3dbJ3ZhbHVlJ10gLiInIjsNCgkJCQkJCSRfcGVybWlzc2lvbl9idWNrZXRbJGZpZWxkX25hbWVdID0gJGZpZWxkX25hbWU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0aGlzIGlzIHRoZSBwc2V1ZG9hbm9ueW1pc2VkIGRhdGEgYXJyYXkgZm9yICIgLiAkdmlldy0+bmFtZV9saXN0Ow0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YSA9IGFycmF5KCI7DQoJCQkJJG1ldGhvZHMgLj0gaW1wbG9kZSgnLCcsICRfZGF0YV9idWNrZXQpOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiKTsiOw0KDQoJCQkJLy8gYWRkIHRoZSBwZXJtaXNzaW9uYWwgcmVtb3ZhbCBvZiB2YWx1ZXMgdGhlIHVzZXIgaGFzIG5vdCByaWdodCB0byB2aWV3IG9yIGFjY2Vzcw0KCQkJCSRoYXNQZXJtaXNzaW9uYWwgPSBmYWxzZTsNCgkJCQlpZiAoaXNzZXQoJHRoaXMtPnBlcm1pc3Npb25GaWVsZHNbJHZpZXdOYW1lX3NpbmdsZV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdIGFzICRmaWVsZE5hbWUgPT4gJHBlcm1pc3Npb25fb3B0aW9ucykNCgkJCQkJew0KCQkJCQkJaWYgKCEkaGFzUGVybWlzc2lvbmFsICYmIGlzc2V0KCRfcGVybWlzc2lvbl9idWNrZXRbJGZpZWxkTmFtZV0pKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2goJHBlcm1pc3Npb25fb3B0aW9ucyBhcyAkcGVybWlzc2lvbl9vcHRpb24gPT4gJGZpZWxkVHlwZSkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICghJGhhc1Blcm1pc3Npb25hbCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJc3dpdGNoICgkcGVybWlzc2lvbl9vcHRpb24pDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJY2FzZSAnYWNjZXNzJzoNCgkJCQkJCQkJCQljYXNlICd2aWV3JzoNCgkJCQkJCQkJCQljYXNlICdlZGl0JzoNCgkJCQkJCQkJCQkJJGhhc1Blcm1pc3Npb25hbCA9IHRydWU7DQoJCQkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gYWRkIHRoZSBub3RlcyBhbmQgZ2V0IHRoZSBnbG9iYWwgc3dpdGNoDQoJCQkJCWlmICgkaGFzUGVybWlzc2lvbmFsKQ0KCQkJCQl7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBHZXQgZ2xvYmFsIHBlcm1pc3Npb25hbCBjb250cm9sIGFjdGl2YXRpb24uIChkZWZhdWx0IGlzIGluYWN0aXZlKSI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJyktPmdldCgnc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkJywgMCk7IjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiaWYoXCRzdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGQpIjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHJlbW92ZSBhbGwgZmllbGRzIHRoYXQgaXMgbm90IHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkIjsNCgkJCQkJCWZvcmVhY2ggKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdIGFzICRmaWVsZE5hbWUgPT4gJHBlcm1pc3Npb25fb3B0aW9ucykNCgkJCQkJCXsNCgkJCQkJCQlpZiAoaXNzZXQoJF9wZXJtaXNzaW9uX2J1Y2tldFskZmllbGROYW1lXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gImlmICgiOw0KCQkJCQkJCQkkX3Blcm1pc3Npb25faWYgPSBhcnJheSgpOw0KCQkJCQkJCQlmb3JlYWNoICgkcGVybWlzc2lvbl9vcHRpb25zIGFzICRwZXJtX2tleSA9PiAkZmllbGRfdHlwcmV3KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkX3Blcm1pc3Npb25faWZbXSA9ICIhXCR1c2VyLT5hdXRob3Jpc2UoJyIgLiAkdmlld05hbWVfc2luZ2xlIC4gIi4iIC4gJHBlcm1fa2V5IC4gIi4iIC4gJGZpZWxkTmFtZSAuICInLCAnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJykiOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRtZXRob2RzIC49ICBpbXBsb2RlKCcgfHwgJywgJF9wZXJtaXNzaW9uX2lmKTsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gICIpIjsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJ7IjsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg1KSAuICJ1bnNldChcJHBzZXVkb2Fub255bWlzZWREYXRhWyciLiAkZmllbGROYW1lIC4gIiddKTsiOw0KCQkJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIn0iOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoJCQkJCX0NCgkJCQl9DQoNCg0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IHRoZSAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgdGFibGUiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0YWJsZSA9IFwkbW9kZWwtPmdldFRhYmxlKCk7IjsNCg0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIHBzZXVkb2Fub255bWlzZWQgZGF0YSBmb3IgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHNldCI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIVN1cGVyX18iLiJfMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKFwkcHNldWRvYW5vbnltaXNlZERhdGEpKSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHN0aWxsIGFyY2hpdmUgYWxsIGl0ZW1zIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkdGFibGUtPnB1Ymxpc2goXCRwa3MsIDIpOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJyZXR1cm4gZmFsc2U7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBJdGVyYXRlIHRoZSBpdGVtcyB0byBhbm9uaW1pemUgZWFjaCBvbmUuIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImZvcmVhY2ggKFwkcGtzIGFzIFwkaSA9PiBcJHBrKSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkdGFibGUtPnJlc2V0KCk7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkcHNldWRvYW5vbnltaXNlZERhdGFbJ2lkJ10gPSBcJHBrOyI7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRfcmFuZG9tX2J1Y2tldCkpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkX3JhbmRvbV9idWNrZXQgYXMgJGZpZWxkTmFtZSA9PiAkc2l6ZSkNCgkJCQkJew0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJpZiAoaXNzZXQoXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YVsnIiAuICRmaWVsZE5hbWUgLiAiJ10pKSI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gInsiOw0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg1KSAuICJcJHBzZXVkb2Fub255bWlzZWREYXRhWyciIC4gJGZpZWxkTmFtZSAuICInXSA9IHNlbGY6OnJhbmRvbWtleSgiIC4gKGludCkgJHNpemUgLiAiKTsiOw0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJ9IjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJpZiAoXCR0YWJsZS0+YmluZChcJHBzZXVkb2Fub255bWlzZWREYXRhKSkiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAieyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg1KSAuICJcJHRhYmxlLT5zdG9yZSgpOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJ9IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBhcmNoaXZlIGFsbCBpdGVtcyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHRhYmxlLT5wdWJsaXNoKFwkcGtzLCAyKTsiOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIERlbGV0ZSB0aGUgcm93cw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IHRoZSAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgdGFibGUiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0YWJsZSA9IFwkbW9kZWwtPmdldFRhYmxlKCk7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEl0ZXJhdGUgdGhlIGl0ZW1zIHRvIGRlbGV0ZSBlYWNoIG9uZS4iOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiZm9yZWFjaCAoXCRwa3MgYXMgXCRpID0+IFwkcGspIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiaWYgKFwkdGFibGUtPmxvYWQoXCRwaykpIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gInsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNSkgLiAiXCR0YWJsZS0+ZGVsZXRlKFwkcGspOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJ9IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2xlYXIgdGhlIGNvbXBvbmVudCdzIGNhY2hlIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkbW9kZWwtPmNsZWFuQ2FjaGUoKTsiOw0KCQkJfQ0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCQl9DQoJfQ==', '[[[Component]]] Privacy Compiler', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.2.4', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Privacy Compiler', '', 1, '', '', 1, '2019-08-17 23:47:50', '2024-08-06 21:31:30', 159, '', 3),
-(4, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to tweak the export options for your components during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\nAlso be sure to activate the component/s that should be targeted with this added export feature under the Component Activation tab.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Settings\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2680\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2681\",\"custom_value\":\"\"}}}}', 'e3681356-565b-46a2-aa11-b2d9ab908938', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEFwcGxpY2F0aW9uXENNU0FwcGxpY2F0aW9uOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcRmFjdG9yeSBhcyBDRmFjdG9yeTsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcVXRpbGl0aWVzXEluZGVudDsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcVXRpbGl0aWVzXExpbmU7', 11, '{\"method_selection0\":{\"method\":\"92\"},\"method_selection1\":{\"method\":\"56\"},\"method_selection2\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogVGhlIGxhbmd1YWdlIHN0cmluZyBidWlsZGVyDQoJICogDQoJICogQHZhciAgICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJGxhbmd1YWdlQXJyYXkgPSBbXTsNCg0KCS8qDQoJICogVGhlIEV4cG9ydCBUZXh0IE9ubHkgc3dpdGNoDQoJICogDQoJICogQHZhciAgICAgIGludA0KCSAqLw0KCXByb3RlY3RlZCAkZXhwb3J0VGV4dE9ubHkgPSAwOw0KDQoJLyoNCgkgKiBUaGUgU3RyaWN0IEZpZWxkIEV4cG9ydCBQZXJtaXNzaW9ucyBzd2l0Y2gNCgkgKiANCgkgKiBAdmFyICAgICAgYm9vbA0KCSAqLw0KCXByb3RlY3RlZCAkc3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IGZhbHNlOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIEdldCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldENvbXBvbmVudERhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAkdGhpcy0+Y29tcG9uZW50QWN0aXZlKCkpDQoJCXsNCgkJCS8vIGFjdGl2YXRlIGV4cG9ydCB0ZXh0IG9ubHkNCgkJCUNGYWN0b3J5OjpfKCdDb25maWcnKS0+c2V0KCdleHBvcnRfdGV4dF9vbmx5JywgKGludCkgJHRoaXMtPmV4cG9ydFRleHRPbmx5KTsNCg0KCQkJLy8gYWN0aXZhdGUgc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkIGlmIHNldCBpbiBwbHVnaW4gKGRlZmF1bHQgdHJ1ZSkNCgkJCUNGYWN0b3J5OjpfKCdDb25maWcnKS0+c2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCAoYm9vbCkgJHRoaXMtPnN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQWZ0ZXIgTW9kZWwgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJNb2RlbENvbXBvbmVudERhdGEoJiRjb21wb25lbnQpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGV4cG9ydCBmb3IgYW55IHZpZXcNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJLy8gc2V0IHRoZSBleHBvcnQvaW1wb3J0IG9wdGlvbg0KCQkJaWYgKGlzc2V0KCRjb21wb25lbnQtPmFkbWluX3ZpZXdzKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29tcG9uZW50LT5hZG1pbl92aWV3cykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGNvbXBvbmVudC0+YWRtaW5fdmlld3MgYXMgJHZpZXcpDQoJCQkJew0KCQkJCQlpZiAoISR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAoaXNzZXQoJHZpZXdbJ3BvcnQnXSkgJiYgJHZpZXdbJ3BvcnQnXSB8fCAxID09ICR2aWV3WydzZXR0aW5ncyddLT5hZGRfY3VzdG9tX2ltcG9ydCkpDQoJCQkJCXsNCgkJCQkJCSR0aGlzLT5leHBvcnRUZXh0T25seSA9IDE7DQoJCQkJCQkkdGhpcy0+c3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IChib29sKSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3N0cmljdF9wZXJtaXNzaW9uX3Blcl9maWVsZCcsIDEpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBMYW5nIEZpbGUgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRMYW5nRmlsZURhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAkdGhpcy0+Y29tcG9uZW50QWN0aXZlKCkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmxhbmd1YWdlQXJyYXkpKQ0KCQl7DQoJCQlmb3JlYWNoKCR0aGlzLT5sYW5ndWFnZUFycmF5IGFzICRrZXkgPT4gJHN0cmluZykNCgkJCXsNCgkJCQlDRmFjdG9yeTo6XygnTGFuZ3VhZ2UnKS0+c2V0KCdhZG1pbnN5cycsICRrZXksICRzdHJpbmcpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBDb25maWcgRmllbGQgc2V0c10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRDb25maWdGaWVsZHNldHMoJiR0aW1lcikNCgl7DQoJCS8vIG9ubHkgYWRkIGZpZWxkcyBhZnRlciBzZWNvbmQgdGltZQ0KCQlpZiAoJHRoaXMtPmV4cG9ydFRleHRPbmx5ICYmICR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSAmJiAkdGltZXIgPT0gMikNCgkJew0KCQkJLy8gbWFpbiBsYW5nIHByZWZpeA0KCQkJJGxhbmcgPSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmxhbmdfcHJlZml4IC4gJ19DT05GSUcnOw0KCQkJLy8gc3RhcnQgYnVpbGRpbmcgZmllbGQgc2V0IGZvciBjb25maWcNCgkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygxKSAuICI8ZmllbGRzZXQiOw0KCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDIpIC4gJ25hbWU9ImV4cG9ydF90ZXh0X29ubHlfY29uZmlnIic7DQoJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMikgLiAnbGFiZWw9IicgLiAkbGFuZyAuICdfRVhQT1JUX1RFWFRfT05MWV9UQUJfTEFCRUwiJzsNCgkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygyKSAuICdkZXNjcmlwdGlvbj0iJyAuICRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9ERVNDUklQVElPTiI+JzsNCgkJCS8vIHNldHVwIGxhbmcNCgkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9MQUJFTCddID0gIkV4cG9ydCBPcHRpb25zIjsNCgkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9ERVNDUklQVElPTiddID0gIkhlcmUgYXJlIHNvbWUgZXh0cmEgb3B0aW9uIHRvIGFkanVzdCB0aGUgZXhwb3J0IGJlaGF2aW9yIG9mIGFkbWluIHZpZXdzLiI7DQoJCQkvLyBhZGQgY3VzdG9tIEV4cG9ydCBPcHRpb25zDQoJCQlpZiAoaXNzZXQoJGNvbmZpZ0ZpZWxkU2V0c0N1c3RvbUZpZWxkWydFeHBvcnQgT3B0aW9ucyddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnRmllbGRTZXRzQ3VzdG9tRmllbGRbJ0V4cG9ydCBPcHRpb25zJ10pKQ0KCQkJew0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IGltcGxvZGUoIiIsICRjb25maWdGaWVsZFNldHNDdXN0b21GaWVsZFsnRXhwb3J0IE9wdGlvbnMnXSk7DQoJCQkJdW5zZXQoJGNvbmZpZ0ZpZWxkU2V0c0N1c3RvbUZpZWxkWydFeHBvcnQgT3B0aW9ucyddKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfRVhQT1JUX1RFWFRfT05MWV9MQUJFTCddID0gIkV4cG9ydCBUZXh0IE9ubHkiOw0KCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX0RFU0NSSVBUSU9OJ10gPSAiVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZXhwb3J0IG9mIHN0cmluZy90ZXh0IGluc3RlYWQgb2YgbGlua2VkIElEcyBpbiBhbGwgYWRtaW4gdmlld3MgdGhhdCBoYXZlIGFuIGV4cG9ydCBvcHRpb24uIjsNCg0KCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19BQ1RJVkFURSddID0gIkFjdGl2YXRlIjsNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfREVBQ1RJVkFURSddID0gIkRlYWN0aXZhdGUiOw0KDQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICI8IS0tIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4cG9ydCBUZXh0IE9ubHkgRmllbGQuIFR5cGU6IFJhZGlvLiAoam9vbWxhKSAtLT4iOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygyKSAuICI8ZmllbGQiOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJ0eXBlPVwicmFkaW9cIiI7DQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDMpIC4gIm5hbWU9XCJleHBvcnRfdGV4dF9vbmx5XCIiOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJsYWJlbD1cIiIgLiAkbGFuZyAuICJfRVhQT1JUX1RFWFRfT05MWV9MQUJFTFwiIjsNCgkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMykgLiAiZGVzY3JpcHRpb249XCIiIC4gJGxhbmcgLiAiX0VYUE9SVF9URVhUX09OTFlfREVTQ1JJUFRJT05cIiI7DQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDMpIC4gImNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC15ZXNub1wiIjsNCgkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMykgLiAiZGVmYXVsdD1cIjBcIj4iOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8IS0tIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIE9wdGlvbiBTZXQuIC0tPiI7DQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDMpIC4gIjxvcHRpb24gdmFsdWU9XCIxXCI+IjsNCgkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oNCkgLiAkbGFuZyAuICJfQUNUSVZBVEU8L29wdGlvbj4iOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8b3B0aW9uIHZhbHVlPVwiMFwiPiI7DQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDQpIC4gJGxhbmcgLiAiX0RFQUNUSVZBVEU8L29wdGlvbj4iOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygyKSAuICI8L2ZpZWxkPiI7DQoNCgkJCQkvLyBhZGQgIHN0cmljdCBGaWVsZCBFeHBvcnQgUGVybWlzc2lvbnMgZmllbGQNCgkJCQlpZiAoJHRoaXMtPnN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpDQoJCQkJew0KCQkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfU1RSSUNUX1BFUk1JU1NJT05fUEVSX0ZJRUxEX0xBQkVMJ10gPSAiVXNlIFN0cmljdCBQZXJtaXNzaW9uIHBlci9maWVsZCI7DQoJCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19TVFJJQ1RfUEVSTUlTU0lPTl9QRVJfRklFTERfREVTQ1JJUFRJT04nXSA9ICJVc2Ugc3RyaWN0IHBlcm1pc3Npb25zIHBlci9maWVsZCBpbiB0aGUgZXhwb3J0IG1ldGhvZHMgd2hlcmUgdGhlcmUgYXJlIGZpZWxkcyBwZXJtaXNzaW9ucyBpbiBhIHZpZXcuIjsNCg0KCQkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIjwhLS0iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgU3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkIEZpZWxkLiBUeXBlOiBSYWRpby4gKGpvb21sYSkgLS0+IjsNCgkJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDIpIC4gIjxmaWVsZCI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJ0eXBlPVwicmFkaW9cIiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJuYW1lPVwic3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkXCIiOw0KCQkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMykgLiAibGFiZWw9XCIiIC4gJGxhbmcgLiAiX1NUUklDVF9QRVJNSVNTSU9OX1BFUl9GSUVMRF9MQUJFTFwiIjsNCgkJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDMpIC4gImRlc2NyaXB0aW9uPVwiIiAuICRsYW5nIC4gIl9TVFJJQ1RfUEVSTUlTU0lPTl9QRVJfRklFTERfREVTQ1JJUFRJT05cIiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAteWVzbm9cIiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJkZWZhdWx0PVwiMVwiPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8IS0tIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIE9wdGlvbiBTZXQuIC0tPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8b3B0aW9uIHZhbHVlPVwiMVwiPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6Xyg0KSAuICRsYW5nIC4gIl9BQ1RJVkFURTwvb3B0aW9uPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8b3B0aW9uIHZhbHVlPVwiMFwiPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6Xyg0KSAuICRsYW5nIC4gIl9ERUFDVElWQVRFPC9vcHRpb24+IjsNCgkJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDIpIC4gIjwvZmllbGQ+IjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjbG9zZSB0aGF0IGZpZWxkc2V0DQoJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMSkgLiAiPC9maWVsZHNldD4iOw0KCQl9DQoJfQ0KDQpbQ1VTVE9NQ09ERT1jb21wb25lbnRBY3RpdmVd', '[[[Component]]] Export Compiler', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.2.1', '{\"property_selection0\":{\"property\":\"34\"},\"property_selection1\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Export Compiler', '', 1, '', '', 1, '2019-08-21 20:42:45', '2024-08-06 20:53:51', 45, '', 2),
-(5, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to improve your action log integration with Joomla for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"activate\",\"label\":\"Component Activation\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2680\",\"custom_value\":\"\"}}}}', '91e831bf-5337-4b9c-8f6c-e90255b9e36a', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcRmFjdG9yeSBhcyBDRmFjdG9yeTsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcVXRpbGl0aWVzXFBsYWNlZml4Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcSW5kZW50Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcTGluZTs=', 11, '{\"method_selection0\":{\"method\":\"59\"},\"method_selection1\":{\"method\":\"120\"},\"method_selection2\":{\"method\":\"79\"},\"method_selection3\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoqDQoJICogVGhlIFNjcmlwdHMNCgkgKiANCgkgKiBAdmFyICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJHNjcmlwdHNBcnJheSA9IFsnUE9TVElOU1RBTExTQ1JJUFQnID0+IFtdLCAnUE9TVFVQREFURVNDUklQVCcgPT4gW10sICdVTklOU1RBTExTQ1JJUFQnID0+IFtdXTsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldENvbXBvbmVudERhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+bGFuZ3VhZ2VBcnJheSkpDQoJCXsNCgkJCWZvcmVhY2goJHRoaXMtPmxhbmd1YWdlQXJyYXkgYXMgJGtleSA9PiAkc3RyaW5nKQ0KCQkJew0KCQkJCUNGYWN0b3J5OjpfKCdMYW5ndWFnZScpLT5zZXQoJ2FkbWluJywgJGtleSwgJHN0cmluZyk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBCdWlsZCBGaWxlcyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkFmdGVyQnVpbGRGaWxlc0NvbnRlbnQoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJJGZ1bmN0aW9uX25hbWUgPSAnZ2V0TWFpbkozJzsNCgkJCWlmIChDRmFjdG9yeTo6XygnQ29uZmlnJyktPmdldCgnam9vbWxhX3ZlcnNpb24nLCAzKSAhPSAzKQ0KCQkJew0KCQkJCSRmdW5jdGlvbl9uYW1lID0gJ2dldE1haW5KNCc7DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgc2NyaXB0IHN0cmluZ3MgdG8gdGhlICBjb21wb25lbnQNCgkJCWZvcmVhY2ggKCR0aGlzLT5zY3JpcHRzQXJyYXkgYXMgJHRhcmdldCA9PiAmJGJ1Y2tldCkNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIGNvbXBvbmVudCBtYWluIHRhcmdldCBzY3JpcHQNCgkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hZGQoJHRhcmdldCwgJHRoaXMtPnskZnVuY3Rpb25fbmFtZSAuICR0YXJnZXR9KCkpOw0KCQkJCS8vIGFkZCB0aGUgY29tcG9uZW50IHZpZXdzIHRhcmdldCBzY3JpcHRzDQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCXsNCgkJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWRkKCR0YXJnZXQsIGltcGxvZGUoJycsICRidWNrZXQpKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGFkZCB0aGUgYmV0dGVyIGludGVncmF0aW9uIHdpdGggYWN0aW9uIGxvZw0KCQlpZiAoJHRoaXMtPmNvbXBvbmVudEFjdGl2ZSgpICYmU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPmZpZWxkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCR2aWV3LT5maWVsZHMgYXMgJGZpZWxkKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkZmllbGRbJ3RpdGxlJ10pICYmICRmaWVsZFsndGl0bGUnXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJHRpdGxlX2hvbGRlciA9ICRmaWVsZFsnYmFzZV9uYW1lJ107DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGlmIG5vdCBmb3VuZCB0cnkgYWdhaW4NCgkJCWlmICghaXNzZXQoJHRpdGxlX2hvbGRlcikpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHZpZXctPmZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJGZpZWxkWydsaXN0J10pICYmICRmaWVsZFsnbGlzdCddID09IDEgJiYNCgkJCQkJCWlzc2V0KCRmaWVsZFsnb3JkZXJfbGlzdCddKSAmJiAkZmllbGRbJ29yZGVyX2xpc3QnXSA9PSAxICYmDQoJCQkJCQlpc3NldCgkZmllbGRbJ2xpbmsnXSkgJiYgJGZpZWxkWydsaW5rJ10gPT0gMSkNCgkJCQkJew0KCQkJCQkJJHRpdGxlX2hvbGRlciA9ICRmaWVsZFsnYmFzZV9uYW1lJ107DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gaWYgZm91bmQgdXBkYXRlIHBsYWNlaG9sZGVyDQoJCQlpZiAoaXNzZXQoJHRpdGxlX2hvbGRlcikpDQoJCQl7DQoJCQkJLy8gc2V0IG1haW4gdGl0bGUNCgkJCQlDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+c2V0KCc8PDxNQUlOX1RJVExFPj4+JywgJHRpdGxlX2hvbGRlciwgZmFsc2UpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGZhbGwgYmFjayBvbiBJRA0KCQkJCUNGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5zZXQoJzw8PE1BSU5fVElUTEU+Pj4nLCAnaWQnLCBmYWxzZSk7DQoJCQl9DQoNCgkJCSRmdW5jdGlvbl9uYW1lID0gJ2dldFZpZXdKMyc7DQoJCQlpZiAoQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5nZXQoJ2pvb21sYV92ZXJzaW9uJywgMykgIT0gMykNCgkJCXsNCgkJCQkkZnVuY3Rpb25fbmFtZSA9ICdnZXRWaWV3SjQnOw0KCQkJfQ0KDQoJCQkvLyBub3cgbG9hZCB0aGUgc2NyaXB0IHN0cmluZ3MNCgkJCWZvcmVhY2ggKCR0aGlzLT5zY3JpcHRzQXJyYXkgYXMgJHRhcmdldCA9PiAmJGJ1Y2tldCkNCgkJCXsNCgkJCQkkYnVja2V0W10gPSAkdGhpcy0+eyRmdW5jdGlvbl9uYW1lIC4gJHRhcmdldH0oKTsNCgkJCX0NCg0KCQkJLy8ganVzdCByZW1vdmUgaXQgYWdhaW4NCgkJCUNGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5yZW1vdmUoJzw8PE1BSU5fVElUTEU+Pj4nKTsNCg0KCQkJLy8gc2V0IGxhbmd1YWdlIHN0cmluZw0KCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPmdldF8oIkxBTkdfUFJFRklYIikgLiAnX1RZUEVfJyAuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5nZXRfKCJWSUVXIildID0gJHZpZXctPm5hbWVfc2luZ2xlOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFBvc3QgSW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozUE9TVElOU1RBTExTQ1JJUFQoKQ0KCXsNCgkJJHNjcmlwdCA9IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCBkYiBpZiBub3Qgc2V0IGFscmVhZHkuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImlmICghaXNzZXQoXCRkYikpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCRkYiA9IEZhY3Rvcnk6OmdldERibygpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ3JlYXRlIHRoZSAiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIiBhY3Rpb24gbG9ncyBleHRlbnNpb25zIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIl9hY3Rpb25fbG9nc19leHRlbnNpb25zID0gbmV3IFxzdGRDbGFzcygpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMtPmV4dGVuc2lvbiA9ICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgdGhlIG9iamVjdCBpbnRvIHRoZSBhY3Rpb24gbG9ncyBleHRlbnNpb25zIHRhYmxlLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnNfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnLCBcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBQb3N0IEluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKM1BPU1RJTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSB0aGUgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX3RpdGxlID0gJyIgLiBQbGFjZWZpeDo6XygiVklFVyIpIC4gIic7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZy0+aWRfaG9sZGVyID0gJ2lkJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRpdGxlX2hvbGRlciA9ICc8PDxNQUlOX1RJVExFPj4+JzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRhYmxlX25hbWUgPSAnI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRleHRfcHJlZml4ID0gJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgdGhlIG9iamVjdCBpbnRvIHRoZSBhY3Rpb24gbG9nIGNvbmZpZyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dfY29uZmlnJywgXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgTWFpbiBQb3N0IFVwZGF0ZSBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozUE9TVFVQREFURVNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgU2V0IGRiIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiaWYgKCFpc3NldChcJGRiKSkiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDcmVhdGUgdGhlICIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgb2JqZWN0LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucy0+ZXh0ZW5zaW9uID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIic7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENoZWNrIGlmICIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiIGFjdGlvbiBsb2cgZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gYWN0aW9uIGxvZ3MgZXh0ZW5zaW9ucyBEQi4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRxdWVyeSA9IFwkZGItPmdldFF1ZXJ5KHRydWUpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT5zZWxlY3QoXCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcpKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnktPmZyb20oXCRkYi0+cXVvdGVOYW1lKCcjX19hY3Rpb25fbG9nc19leHRlbnNpb25zJykpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2V4dGVuc2lvbicpIC4gJyBMSUtFICcuIFwkZGItPnF1b3RlKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucy0+ZXh0ZW5zaW9uKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGRiLT5leGVjdXRlKCk7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCB0aGUgb2JqZWN0IGludG8gdGhlIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUgaWYgbm90IGZvdW5kLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIVwkZGItPmdldE51bVJvd3MoKSkiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnNfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnLCBcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFBvc3QgVXBkYXRlIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3SjNQT1NUVVBEQVRFU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSB0aGUgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT5pZCA9IG51bGw7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX3RpdGxlID0gJyIgLiBQbGFjZWZpeDo6XygiVklFVyIpIC4gIic7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZy0+aWRfaG9sZGVyID0gJ2lkJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRpdGxlX2hvbGRlciA9ICc8PDxNQUlOX1RJVExFPj4+JzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRhYmxlX25hbWUgPSAnI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRleHRfcHJlZml4ID0gJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuICBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIGlzIGFscmVhZHkgaW4gYWN0aW9uX2xvZ19jb25maWcgREIuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRxdWVyeS0+c2VsZWN0KFwkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnKSkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT5mcm9tKFwkZGItPnF1b3RlTmFtZSgnI19fYWN0aW9uX2xvZ19jb25maWcnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgndHlwZV9hbGlhcycpIC4gJyBMSUtFICcuIFwkZGItPnF1b3RlKFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGRiLT5leGVjdXRlKCk7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCB0aGUgb2JqZWN0IGludG8gdGhlIGNvbnRlbnQgdHlwZXMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImlmIChcJGRiLT5nZXROdW1Sb3dzKCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPmlkID0gXCRkYi0+bG9hZFJlc3VsdCgpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZ19VcGRhdGVkID0gXCRkYi0+dXBkYXRlT2JqZWN0KCcjX19hY3Rpb25fbG9nX2NvbmZpZycsIFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLCAnaWQnKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJlbHNlIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWdfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dfY29uZmlnJywgXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozVU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgYXBwIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFpc3NldChcJGFwcCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiIGZyb20gdGhlIGFjdGlvbl9sb2dzX2V4dGVuc2lvbnMgdGFibGUiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIl9hY3Rpb25fbG9nc19leHRlbnNpb25zID0gYXJyYXkoIFwkZGItPnF1b3RlTmFtZSgnZXh0ZW5zaW9uJykgLiAnID0gJyAuIFwkZGItPnF1b3RlKCdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSApOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPmRlbGV0ZShcJGRiLT5xdW90ZU5hbWUoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucyk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4ZWN1dGUgdGhlIHF1ZXJ5IHRvIHJlbW92ZSAiIC4gUGxhY2VmaXg6Ol8oIkNvbXBvbmVudCIpIC4gIiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX3JlbW92ZWRfZG9uZSA9IFwkZGItPmV4ZWN1dGUoKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfcmVtb3ZlZF9kb25lKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIElmIHN1Y2Nlc3NmdWxseSByZW1vdmUgIiAuIFBsYWNlZml4OjpfKCJDb21wb25lbnQiKSAuICIgYWRkIHF1ZXVlZCBzdWNjZXNzIG1lc3NhZ2UuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZSIgLiAieHQ6Ol8oJ1RoZSBjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIgZXh0ZW5zaW9uIHdhcyByZW1vdmVkIGZyb20gdGhlIDxiPiNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnM8L2I+IHRhYmxlJykpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Vmlld0ozVU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgYXBwIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFpc3NldChcJGFwcCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiBmcm9tIHRoZSBhY3Rpb25fbG9nX2NvbmZpZyB0YWJsZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZyA9IGFycmF5KCBcJGRiLT5xdW90ZU5hbWUoJ3R5cGVfYWxpYXMnKSAuICcgPSAnLiBcJGRiLT5xdW90ZSgnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiLiIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicpICk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeS0+ZGVsZXRlKFwkZGItPnF1b3RlTmFtZSgnI19fYWN0aW9uX2xvZ19jb25maWcnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRkYi0+c2V0UXVlcnkoXCRxdWVyeSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4ZWN1dGUgdGhlIHF1ZXJ5IHRvIHJlbW92ZSBjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIuIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnX2RvbmUgPSBcJGRiLT5leGVjdXRlKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gImlmIChcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZ19kb25lKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIElmIHN1Y2Nlc3NmdWxseSByZW1vdmVkICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiBhZGQgcXVldWVkIHN1Y2Nlc3MgbWVzc2FnZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAtPmVucXVldWVNZXNzYWdlKFRlIiAuICJ4dDo6XygnVGhlIGNvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICIgdHlwZSBhbGlhcyB3YXMgcmVtb3ZlZCBmcm9tIHRoZSA8Yj4jX19hY3Rpb25fbG9nX2NvbmZpZzwvYj4gdGFibGUnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIn0iOw0KDQoJCXJldHVybiBDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkc2NyaXB0KTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIE1haW4gUG9zdCBJbnN0YWxsIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRNYWluSjRQT1NUSU5TVEFMTFNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKQ0KCQkJLiAiIEFkZCBjb21wb25lbnQgdG8gdGhlIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkdGhpcy0+c2V0QWN0aW9uTG9nc0V4dGVuc2lvbnMoKTsiOw0KDQoJCXJldHVybiAkc2NyaXB0Ow0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBQb3N0IEluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKNFBPU1RJTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgQWRkICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiB0byB0aGUgYWN0aW9uIGxvZ3MgY29uZmlnIHRhYmxlLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHRoaXMtPnNldEFjdGlvbkxvZ0NvbmZpZygiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdHlwZVRpdGxlIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIiciIC4gUGxhY2VmaXg6Ol8oIlZJRVciKSAuICInLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0eXBlQWxpYXMiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBpZEhvbGRlciI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInaWQnLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0aXRsZUhvbGRlciI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInPDw8TUFJTl9USVRMRT4+PicsIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRhYmxlTmFtZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGV4dFByZWZpeCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInIiAuIFBsYWNlZml4OjpfKCJMQU5HX1BSRUZJWCIpIC4gIiciOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiKTsiOw0KDQoJCXJldHVybiBDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkc2NyaXB0KTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIE1haW4gUG9zdCBVcGRhdGUgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE1haW5KNFBPU1RVUERBVEVTQ1JJUFQoKQ0KCXsNCgkJJHNjcmlwdCA9IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykNCgkJCS4gIiBBZGQvVXBkYXRlIGNvbXBvbmVudCBpbiB0aGUgYWN0aW9uIGxvZ3MgZXh0ZW5zaW9ucyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0aGlzLT5zZXRBY3Rpb25Mb2dzRXh0ZW5zaW9ucygpOyI7DQoNCgkJcmV0dXJuICRzY3JpcHQ7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFBvc3QgVXBkYXRlIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3SjRQT1NUVVBEQVRFU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgQWRkL1VwZGF0ZSAiIC4gUGxhY2VmaXg6Ol8oIlZpZXciKSAuICIgaW4gdGhlIGFjdGlvbiBsb2dzIGNvbmZpZyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0aGlzLT5zZXRBY3Rpb25Mb2dDb25maWcoIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHR5cGVUaXRsZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInIiAuIFBsYWNlZml4OjpfKCJWSUVXIikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdHlwZUFsaWFzIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIidjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIuIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgaWRIb2xkZXIiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJ2lkJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGl0bGVIb2xkZXIiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJzw8PE1BSU5fVElUTEU+Pj4nLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0YWJsZU5hbWUiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJyNfXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiXyIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicsIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRleHRQcmVmaXgiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIik7IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbko0VU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgUmVtb3ZlIGNvbXBvbmVudCBmcm9tIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkdGhpcy0+cmVtb3ZlQWN0aW9uTG9nc0V4dGVuc2lvbnMoKTsiOw0KDQoJCXJldHVybiAkc2NyaXB0Ow0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBVbmluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKNFVOSU5TVEFMTFNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKQ0KCQkJLiAiIFJlbW92ZSAiIC4gUGxhY2VmaXg6Ol8oIlZpZXciKSAuICIgZnJvbSBhY3Rpb24gbG9ncyBjb25maWcgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkdGhpcy0+cmVtb3ZlQWN0aW9uTG9nQ29uZmlnKCdjb21fIg0KCQkJLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiLiIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KW0NVU1RPTUNPREU9Y29tcG9uZW50QWN0aXZlXQ==', '[[[Component]]] ActionLog Compiler', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '2.0.1', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB ActionLog Compiler', '', 1, '', '', 1, '2019-08-27 08:22:41', '2024-08-06 20:53:55', 65, '', 3),
-(6, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to add download link, url or icon and more to content from the [[[Component]]].', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2644\",\"custom_value\":\"1\"},\"fields1\":{\"field\":\"2645\",\"custom_value\":\"md\"},\"fields2\":{\"field\":\"2646\",\"custom_value\":\"\"}}}}', 'cbbd9ccd-441b-4c88-b0bb-44c724943df0', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEFwcGxpY2F0aW9uXENNU0FwcGxpY2F0aW9uOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjs=', 3, '{\"method_selection0\":{\"method\":\"16\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogQWRkIHRoZSBjc3MgZmlsZXMgdG8gdGhlIGRvY3VtZW50IGZvciB0aGUgdmVjdG9yIHN5bGUNCgkgKg0KCSAqIEB2YXIgICAgYm9vbGVhbg0KCSAqLw0KCXByb3RlY3RlZCAgJGFkZGNzcyA9IGZhbHNlOw0KCXByb3RlY3RlZCAgJHNldGNzcyA9IGZhbHNlOw0KDQoJLyoqDQoJICogVGhpcyBpcyB0aGUgZmlyc3Qgc3RhZ2UgaW4gcHJlcGFyaW5nIGNvbnRlbnQgZm9yIG91dHB1dCBhbmQgaXMgdGhlDQoJICogbW9zdCBjb21tb24gcG9pbnQgZm9yIGNvbnRlbnQgb3JpZW50YXRlZCBwbHVnaW5zIHRvIGRvIHRoZWlyIHdvcmsuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIHRoZSBwbHVnaW4uDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJiRyb3cgICAgIFRoZSBhcnRpY2xlIG9iamVjdC4gIE5vdGUgJGFydGljbGUtPnRleHQgaXMgYWxzbyBhdmFpbGFibGUNCgkgKiBAcGFyYW0gICBtaXhlZCAgICAmJHBhcmFtcyAgVGhlIGFydGljbGUgcGFyYW1zDQoJICogQHBhcmFtICAgaW50ZWdlciAgJHBhZ2UgICAgIFRoZSAncGFnZScgbnVtYmVyDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Db250ZW50UHJlcGFyZSgkY29udGV4dCwgJiRyb3csICYkcGFyYW1zLCAkcGFnZSA9IDApDQoJew0KCQkvLyBTaW1wbGUgcGVyZm9ybWFuY2UgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYm90IHNob3VsZCBwcm9jZXNzIGZ1cnRoZXINCgkJaWYgKHN0cnBvcygkcm93LT50ZXh0LCAnW1tbW1NFQ1VSRUZJTEVdXV09JykgIT09IGZhbHNlKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgcmVwbGFjZW1lbnQgdmFsdWVzDQoJCQkkcmVwbGFjZW1lbnQgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IGFsbCBJRCBrZXlzDQoJCQkka2V5cyA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OmFsbEJldHdlZW4oJHJvdy0+dGV4dCwgJ1tbW1tTRUNVUkVGSUxFXV1dPScsICddJyk7DQoJCQkvLyBtYWtlIHN1cmUgd2UgcmVhbGx5IGhhdmUgc29tZXRoaW5nIChzaG91bGQgbm90IGJlIG5lZWRlZC4uLikNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygka2V5cykpDQoJCQl7DQoJCQkJJGlkcyA9IGFycmF5KCk7DQoJCQkJJGJ1aWxkZXIgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2goJGtleXMgYXMgJGtleSkNCgkJCQl7DQoJCQkJCWlmIChzdHJwb3MoJGtleSwgJ18nKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCWxpc3QoJHR5cGUsICRpZCkgPSBleHBsb2RlKCdfJywgJGtleSwgMik7DQoJCQkJCQkkaWRzWyhpbnQpICRpZF0gPSAoaW50KSAkaWQ7DQoJCQkJCQkkYnVpbGRlclska2V5XSA9IGFycmF5KCdpZCcgPT4gKGludCkgJGlkLCAndHlwZScgPT4gJHR5cGUpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGJ1aWxkZXJbJGtleV0gPSBudWxsOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGdldCBpdGVtcw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSAmJiAoJGl0ZW1zID0gJHRoaXMtPmdldEl0ZW1zKGFycmF5X3ZhbHVlcygkaWRzKSkpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRidWlsZGVyIGFzICRrZXkgPT4gJHRhcmdldCkNCgkJCQkJew0KCQkJCQkJLy8gYnVpbGQgdGhlIHBsYWNlaG9sZGVyIGtleQ0KCQkJCQkJJF9rZXkgPSAnW1tbW1NFQ1VSRUZJTEVdXV09JyAuICRrZXkgLiAnXSc7DQoJCQkJCQkvLyBtYWtlIHN1cmUgaXQgZ2V0cyByZW1vdmVkIGlmIG5vdCBmb3VuZA0KCQkJCQkJJHJlcGxhY2VtZW50WyRfa2V5XSA9ICcnOw0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0YXJnZXQpICYmIGlzc2V0KCR0YXJnZXRbJ2lkJ10pICYmIGlzc2V0KCRpdGVtc1skdGFyZ2V0WydpZCddXSkpDQoJCQkJCQl7DQoJCQkJCQkJJHJlcGxhY2VtZW50WyRfa2V5XSA9ICR0aGlzLT5nZXREb3dubG9hZFN0cmluZygkdGFyZ2V0Wyd0eXBlJ10sICRpdGVtc1skdGFyZ2V0WydpZCddXSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gbm93IHVwZGF0ZSB0aGUgY29udGVudA0KCQkJCQkkcm93LT50ZXh0ID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkcmVwbGFjZW1lbnQpLCBhcnJheV92YWx1ZXMoJHJlcGxhY2VtZW50KSwgJHJvdy0+dGV4dCk7DQoJCQkJCS8vIGFkZCB0aGUgY3NzIGZpbGVzDQoJCQkJCWlmICgkdGhpcy0+YWRkY3NzKQ0KCQkJCQl7DQoJCQkJCQkvLyBnZXQgdGhlIGRvY3VtZW50IG9iamVjdA0KCQkJCQkJJGRvY3VtZW50ID0gRmFjdG9yeTo6Z2V0RG9jdW1lbnQoKTsNCltDVVNUT01DT0RFPWZpbGVJY29uVmV0b3JzQ1NTKyQsCQkJCQkJXQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogVGhlIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBmaWxlIGRvd25sb2FkIHN0cmluZw0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHR5cGUgIFRoZSB0eXBlIG9mIGRvd25sb2FkIHN0cmluZw0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGl0ZW0gIFRoZSBmaWxlIGl0ZW0gb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RG93bmxvYWRTdHJpbmcoJHR5cGUsICRpdGVtKQ0KCXsNCgkJc3dpdGNoKCR0eXBlKQ0KCQl7DQoJCQljYXNlICdpY29uJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlDQoJCQkJaWYgKCEkdGhpcy0+c2V0Y3NzKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmFkZGNzcyA9ICR0aGlzLT5wYXJhbXMtPmdldCgnYWRkX2NzcycsIHRydWUpOw0KCQkJCQkkdGhpcy0+c2V0Y3NzID0gdHJ1ZTsNCgkJCQl9DQoJCQkJJHRpdGxlID0gKGlzc2V0KCRpdGVtLT5kZXNjcmlwdGlvbikgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmRlc2NyaXB0aW9uKSkgPyAkaXRlbS0+ZGVzY3JpcHRpb24gOiAkaXRlbS0+bmFtZTsNCgkJCQlyZXR1cm4gJzxhIGhyZWY9IicgLiAkaXRlbS0+bGluayAuICciIHRpdGxlPSInIC4gICR0aXRsZSAgLiAnIj4nIC4NCgkJCQkJJzxzcGFuIGNsYXNzPSJmaXYtJyAuIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0RmlsZVZlY3RvclN0eWxlKHRydWUpIC4gJyBmaXYtaWNvbi0nIC4gJGl0ZW0tPmZpbGVfZXh0ZW5zaW9uIC4gJyBmaXYtc2l6ZS0nIC4gJHRoaXMtPnBhcmFtcy0+Z2V0KCdpY29uX3NpemUnLCAnbWQnKSAuICciPjwvc3Bhbj4nIC4NCgkJCQkJJzwvYT4nOw0KCQkJYnJlYWs7DQoJCQljYXNlICdpY29uLW1kJzoNCgkJCWNhc2UgJ2ljb24tbWVkaXVtJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggbWVkaXVtIHNpemUNCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLW1kIj48L3NwYW4+JyAuDQoJCQkJCSc8L2E+JzsNCgkJCWJyZWFrOw0KCQkJY2FzZSAnaWNvbi1sZyc6DQoJCQljYXNlICdpY29uLWxhcmdlJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggbGFyZ2Ugc2l6ZQ0KCQkJCWlmICghJHRoaXMtPnNldGNzcykNCgkJCQl7DQoJCQkJCSR0aGlzLT5hZGRjc3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF9jc3MnLCB0cnVlKTsNCgkJCQkJJHRoaXMtPnNldGNzcyA9IHRydWU7DQoJCQkJfQ0KCQkJCSR0aXRsZSA9IChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQkJcmV0dXJuICc8YSBocmVmPSInIC4gJGl0ZW0tPmxpbmsgLiAnIiB0aXRsZT0iJyAuICAkdGl0bGUgIC4gJyI+JyAuDQoJCQkJCSc8c3BhbiBjbGFzcz0iZml2LScgLiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZpbGVWZWN0b3JTdHlsZSh0cnVlKSAuICcgZml2LWljb24tJyAuICRpdGVtLT5maWxlX2V4dGVuc2lvbiAuICcgZml2LXNpemUtbGciPjwvc3Bhbj4nIC4NCgkJCQkJJzwvYT4nOw0KCQkJYnJlYWs7DQoJCQljYXNlICdpY29uLXhsJzoNCgkJCWNhc2UgJ2ljb24teGxhcmdlJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggeGxhcmdlIHNpemUNCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLXhsIj48L3NwYW4+JyAuDQoJCQkJCSc8L2E+JzsNCgkJCWJyZWFrOw0KDQoJCQljYXNlICdpY29uK25hbWUnOg0KCQkJCS8vIHRoZSBpY29uIHR5cGUgd2l0aCBuYW1lIHVuZGVyDQoJCQkJaWYgKCEkdGhpcy0+c2V0Y3NzKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmFkZGNzcyA9ICR0aGlzLT5wYXJhbXMtPmdldCgnYWRkX2NzcycsIHRydWUpOw0KCQkJCQkkdGhpcy0+c2V0Y3NzID0gdHJ1ZTsNCgkJCQl9DQoJCQkJJHRpdGxlID0gKGlzc2V0KCRpdGVtLT5kZXNjcmlwdGlvbikgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmRlc2NyaXB0aW9uKSkgPyAkaXRlbS0+ZGVzY3JpcHRpb24gOiAkaXRlbS0+bmFtZTsNCgkJCQlyZXR1cm4gJzxhIGhyZWY9IicgLiAkaXRlbS0+bGluayAuICciIHRpdGxlPSInIC4gICR0aXRsZSAgLiAnIj4nIC4NCgkJCQkJJzxzcGFuIGNsYXNzPSJmaXYtJyAuIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0RmlsZVZlY3RvclN0eWxlKHRydWUpIC4gJyBmaXYtaWNvbi0nIC4gJGl0ZW0tPmZpbGVfZXh0ZW5zaW9uIC4gJyBmaXYtc2l6ZS0nIC4gJHRoaXMtPnBhcmFtcy0+Z2V0KCdpY29uX3NpemUnLCAnbWQnKSAuICciPjwvc3Bhbj4gPGJyIC8+JyAuDQoJCQkJCSRpdGVtLT5maWxlX25hbWUgLiAnPC9hPic7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2ljb24tbWQrbmFtZSc6DQoJCQljYXNlICdpY29uLW1lZGl1bStuYW1lJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggbWVkaXVtIHNpemUgYW5kIG5hbWUgdW5kZXINCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLW1kIj48L3NwYW4+IDxiciAvPicgLg0KCQkJCQkkaXRlbS0+ZmlsZV9uYW1lIC4gJzwvYT4nOw0KCQkJYnJlYWs7DQoJCQljYXNlICdpY29uLWxnK25hbWUnOg0KCQkJY2FzZSAnaWNvbi1sYXJnZStuYW1lJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggbGFyZ2Ugc2l6ZSBhbmQgbmFtZSB1bmRlcg0KCQkJCWlmICghJHRoaXMtPnNldGNzcykNCgkJCQl7DQoJCQkJCSR0aGlzLT5hZGRjc3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF9jc3MnLCB0cnVlKTsNCgkJCQkJJHRoaXMtPnNldGNzcyA9IHRydWU7DQoJCQkJfQ0KCQkJCSR0aXRsZSA9IChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQkJcmV0dXJuICc8YSBocmVmPSInIC4gJGl0ZW0tPmxpbmsgLiAnIiB0aXRsZT0iJyAuICAkdGl0bGUgIC4gJyI+JyAuDQoJCQkJCSc8c3BhbiBjbGFzcz0iZml2LScgLiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZpbGVWZWN0b3JTdHlsZSh0cnVlKSAuICcgZml2LWljb24tJyAuICRpdGVtLT5maWxlX2V4dGVuc2lvbiAuICcgZml2LXNpemUtbGciPjwvc3Bhbj4gPGJyIC8+JyAuDQoJCQkJCSRpdGVtLT5maWxlX25hbWUgLiAnPC9hPic7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2ljb24teGwrbmFtZSc6DQoJCQljYXNlICdpY29uLXhsYXJnZStuYW1lJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggeGxhcmdlIHNpemUgYW5kIG5hbWUgdW5kZXINCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLXhsIj48L3NwYW4+IDxiciAvPicgLg0KCQkJCQkkaXRlbS0+ZmlsZV9uYW1lIC4gJzwvYT4nOw0KCQkJYnJlYWs7DQoNCgkJCWNhc2UgJ2ljb24tbmFtZSc6DQoJCQkJLy8gdGhlIGljb24gdHlwZSB3aXRoIG5hbWUgbmV4dCB0bw0KCQkJCWlmICghJHRoaXMtPnNldGNzcykNCgkJCQl7DQoJCQkJCSR0aGlzLT5hZGRjc3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF9jc3MnLCB0cnVlKTsNCgkJCQkJJHRoaXMtPnNldGNzcyA9IHRydWU7DQoJCQkJfQ0KCQkJCSR0aXRsZSA9IChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQkJcmV0dXJuICc8YSBocmVmPSInIC4gJGl0ZW0tPmxpbmsgLiAnIiB0aXRsZT0iJyAuICAkdGl0bGUgIC4gJyI+JyAuDQoJCQkJCSc8c3BhbiBjbGFzcz0iZml2LScgLiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZpbGVWZWN0b3JTdHlsZSh0cnVlKSAuICcgZml2LWljb24tJyAuICRpdGVtLT5maWxlX2V4dGVuc2lvbiAuICcgZml2LXNpemUtJyAuICR0aGlzLT5wYXJhbXMtPmdldCgnaWNvbl9zaXplJywgJ21kJykgLiAnIj48L3NwYW4+ICcgLg0KCQkJCQkkaXRlbS0+ZmlsZV9uYW1lIC4gJzwvYT4nOw0KCQkJYnJlYWs7DQoJCQljYXNlICdpY29uLW1kLW5hbWUnOg0KCQkJY2FzZSAnaWNvbi1tZWRpdW0tbmFtZSc6DQoJCQkJLy8gdGhlIGljb24gdHlwZSB3aXRoIG1lZGl1bSBzaXplIGFuZCBuYW1lIG5leHQgdG8NCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLW1kIj48L3NwYW4+JyAuDQoJCQkJCSRpdGVtLT5maWxlX25hbWUgLiAnPC9hPic7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2ljb24tbGctbmFtZSc6DQoJCQljYXNlICdpY29uLWxhcmdlLW5hbWUnOg0KCQkJCS8vIHRoZSBpY29uIHR5cGUgd2l0aCBsYXJnZSBzaXplIGFuZCBuYW1lIG5leHQgdG8NCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLWxnIj48L3NwYW4+JyAuDQoJCQkJCSRpdGVtLT5maWxlX25hbWUgLiAnPC9hPic7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2ljb24teGwtbmFtZSc6DQoJCQljYXNlICdpY29uLXhsYXJnZS1uYW1lJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggeGxhcmdlIHNpemUgYW5kIG5hbWUgbmV4dCB0bw0KCQkJCWlmICghJHRoaXMtPnNldGNzcykNCgkJCQl7DQoJCQkJCSR0aGlzLT5hZGRjc3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF9jc3MnLCB0cnVlKTsNCgkJCQkJJHRoaXMtPnNldGNzcyA9IHRydWU7DQoJCQkJfQ0KCQkJCSR0aXRsZSA9IChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQkJcmV0dXJuICc8YSBocmVmPSInIC4gJGl0ZW0tPmxpbmsgLiAnIiB0aXRsZT0iJyAuICAkdGl0bGUgIC4gJyI+JyAuDQoJCQkJCSc8c3BhbiBjbGFzcz0iZml2LScgLiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZpbGVWZWN0b3JTdHlsZSh0cnVlKSAuICcgZml2LWljb24tJyAuICRpdGVtLT5maWxlX2V4dGVuc2lvbiAuICcgZml2LXNpemUteGwiPjwvc3Bhbj4nIC4NCgkJCQkJJGl0ZW0tPmZpbGVfbmFtZSAuICc8L2E+JzsNCgkJCWJyZWFrOw0KDQoJCQljYXNlICduYW1lJzoNCgkJCQkvLyBqdXN0IHRoZSBmaWxlIG5hbWUNCgkJCQlyZXR1cm4gJGl0ZW0tPmZpbGVfbmFtZTsNCgkJCWNhc2UgJ2Rlc2NyaXB0aW9uJzoNCgkJCQkvLyBqdXN0IHRoZSBmaWxlIGRlc2NyaXB0aW9uDQoJCQkJcmV0dXJuIChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3VybCc6DQoJCQkJLy8gdGhlIHVybCB0eXBlDQoJCQkJcmV0dXJuICRpdGVtLT5saW5rOw0KCQkJYnJlYWs7DQoJCQljYXNlICdsaW5rJzoNCgkJCQkvLyB0aGUgbGluayB0eXBlDQoJCQkJJHRpdGxlID0gKGlzc2V0KCRpdGVtLT5kZXNjcmlwdGlvbikgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmRlc2NyaXB0aW9uKSkgPyAkaXRlbS0+ZGVzY3JpcHRpb24gOiAkaXRlbS0+bmFtZTsNCgkJCQlyZXR1cm4gJzxhIGhyZWY9IicgLiAkaXRlbS0+bGluayAuICciIHRpdGxlPSInIC4gICR0aXRsZSAgLiAnIj4nIC4gJGl0ZW0tPmZpbGVfbmFtZSAuICc8L2E+JzsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoNCgkvKioNCgkgKiBUaGUgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGZpbGVzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRpZHMgIFRoZSBpZHMgb2YgdGhlIGZpbGVzIHRvIHJldHJpZXZlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRJdGVtcygkaWRzKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywgJ21haW5fZmlsZScsICdhY2Nlc3MnLCAnbmFtZScsICdkZXNjcmlwdGlvbicpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2ZpbGUnKSk7DQoNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgSU4gKCcgLiBpbXBsb2RlKCcsJywkaWRzKSAuICcpJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBpdGVtcw0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgnaWQnKTsNCgkJCS8vIHNldCBsaW5rIG9wdGlvbnMNCgkJCSRsaW5rb3B0aW9ucyA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0TGlua09wdGlvbnMoKTsNCgkJCS8vIGdldCBzZXNzaW9uIHRva2VuDQoJCQkkc2Vzc2lvbiA9IEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKTsNCgkJCS8vICB1bmxvY2sgc29tZSBkYXRhDQoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGlkID0+ICYkaXRlbSkNCgkJCXsNCgkJCQlpZiAoIWVtcHR5KCRpdGVtLT5tYWluX2ZpbGUpICYmICFpc19udW1lcmljKCRpdGVtLT5tYWluX2ZpbGUpICYmICRpdGVtLT5tYWluX2ZpbGUgPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaXRlbS0+bWFpbl9maWxlLCB0cnVlKSkpDQoJCQkJew0KCQkJCQkvLyBtZWRpdW0gZGVjcnlwdCBkYXRhIG1haW5fZmlsZS4NCgkJCQkJJGl0ZW0tPm1haW5fZmlsZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZGVjcnlwdCgkaXRlbS0+bWFpbl9maWxlKTsNCgkJCQl9DQpbQ1VTVE9NQ09ERT1zZXRTZWN1cmVGaWxlTGlua0luSXRlbU9iamVjdCsJCQkJXQ0KCQkJfQ0KCQkJcmV0dXJuICRpdGVtczsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '[[[Component]]] Download in Content', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.0.1', '{\"property_selection0\":{\"property\":\"9\"},\"property_selection1\":{\"property\":\"7\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'set Download of Files in Content', '', 1, '', '', 1, '2019-09-13 17:15:19', '2024-08-06 20:54:16', 25, '', 2),
-(7, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to add language packaging to JCB. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{}', '12dea095-2cc8-4830-b435-3d4599177ed1', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcUGxhY2VmaXg7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xJbmRlbnQ7', 11, '{\"method_selection0\":{\"method\":\"88\"},\"method_selection1\":{\"method\":\"55\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBEYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEB2YXIgICAgRGF0YWJhc2VEcml2ZXINCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkZGI7DQoNCgkvKioNCgkgKiBBcHBsaWNhdGlvbiBvYmplY3QNCgkgKg0KCSAqIEB2YXIgICAgQ01TQXBwbGljYXRpb24NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXBwOw0KDQoJLyoqDQoJICogVGhlIHBlcmNlbnRhZ2UgYmVmb3JlIGEgbGFuZ3VhZ2UgY2FuIGJlIGFkZGVkDQoJICogDQoJICogQHZhciAgICAgaW50DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcGVyY2VudGFnZUxhbmd1YWdlQWRkOw0KDQoJLyoqDQoJICogVGhlIHBlcmNlbnRhZ2UgYmVmb3JlIGEgbGFuZ3VhZ2UgY2FuIGJlIGFkZGVkDQoJICogDQoJICogQHZhciAgICAgaW50DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcGVyY2VudGFnZUxhbmd1YWdlQWRkT3ZlcmlkZSA9IDIwMDsNCg0KCS8qKg0KCSAqIFRoZSBsYW5ndWFnZXMgbmFtZXMNCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGxhbmd1YWdlTmFtZXMgPSBbXTsNCg0KCS8qKg0KCSAqIFRoZSBsYW5ndWFnZSBidWlsZGluZyB0cmFja2VyDQoJICogDQoJICogQHZhciAgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRsYW5ndWFnZVRyYWNrZXIgPSBbXTsNCg0KCS8qKg0KCSAqIFRoZSBzaG91bGQgdGhlIHNpdGUgZm9sZGVyIGJlIHJlbW92ZWQNCgkgKiANCgkgKiBAdmFyICAgICBib29sDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcmVtb3ZlU2l0ZUZvbGRlcjsNCg0KCS8qKg0KCSAqIFRoZSBzaG91bGQgdGhlIHNpdGUgZm9sZGVyIGJlIHJlbW92ZWQNCgkgKiANCgkgKiBAdmFyICAgICBib29sDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcmVtb3ZlU2l0ZUVkaXRGb2xkZXI7DQoNCgkvKioNCgkgKiBUaGUgY29tcG9uZW50IHBhdGgNCgkgKiANCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRjb21wb25lbnRQYXRoOw0KDQoJLyoqDQoJICogVGhlIGNvbXBpbGVyIHBhdGgNCgkgKiANCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRjb21waWxlclBhdGg7DQoNCgkvKioNCgkgKiBUaGUgdGVtcG9yYWwgcGF0aA0KCSAqIA0KCSAqIEB2YXIgICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJHRlbXBQYXRoOw0KDQoJLyoqDQoJICogVGhlIGpvb21sYSB2ZXJzaW9uDQoJICogDQoJICogQHZhciAgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkam9vbWxhVmVyc2lvbjsNCg0KCS8qKg0KCSAqIFRoZSBjb21wb25lbnQgdmVyc2lvbg0KCSAqIA0KCSAqIEB2YXIgICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGNvbXBvbmVudF92ZXJzaW9uOw0KDQoJLyoqDQoJICogVGhlIGNvbXBvbmVudCBuYW1lDQoJICogDQoJICogQHZhciAgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkY29tcG9uZW50Q29kZU5hbWU7DQoNCgkvKioNCgkgKiBUaGUgZmlsZSBjb250ZW50IHN0YXRpYyB2YWx1ZXMNCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGZpbGVDb250ZW50U3RhdGljOw0KDQoJLyoNCgkgKiBUaGUgbGluZSBudW1iZXJzIFN3aXRjaA0KCSAqIA0KCSAqIEB2YXIgICAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkZGVidWdMaW5lbnIgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIFRoZSBBY3RpdmUgQ29tcG9uZW50cw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhY3RpdmVDb21wb25lbnRzID0gW107DQoNCgkvKioNCgkgKiBUaGUgQWN0aXZlIENvbXBvbmVudHMgTmFtZXMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYWN0aXZlQ29tcG9uZW50c05hbWVzID0gW107DQoNCgkvKioNCgkgKiBUaGUgTGFuZ3VhZ2VzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGxhbmd1YWdlcyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIExhbmd1YWdlIGJ1aWxkIGRldGFpbHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYnVpbGREZXRhaWxzID0gW107DQoNCgkvKioNCgkgKiBUaGUgRXhjbHVkZWQgTGFuZ3VhZ2VzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGV4Y2x1ZGVkTGFuZyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIEFjdGl2ZSBMYW5ndWFnZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkbGFuZ1RhZzsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbENvbXBvbmVudERhdGEoJiRjb21wb25lbnQpDQoJew0KCQkvLyBhZGQgdGhlIHByaXZhY3kNCgkJJGNvbXBvbmVudC0+cGFyYW1zID0gKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtcykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudC0+cGFyYW1zKSkgPyBqc29uX2RlY29kZSgkY29tcG9uZW50LT5wYXJhbXMsIHRydWUpIDogJGNvbXBvbmVudC0+cGFyYW1zOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudC0+cGFyYW1zKSAmJiBpc3NldCgkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXSkgJiYNCgkJCWlzc2V0KCRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydhY3RpdmF0ZSddKSAmJiAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsnYWN0aXZhdGUnXSA9PSAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBhZG1pbiBjb21wb25lbnQgZGV0YWlscw0KCQkJJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGNvbXBvbmVudC0+aWRdID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9jb250ZXh0Ow0KCQkJJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNOYW1lc1skY29tcG9uZW50LT5pZF0gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRjb21wb25lbnQtPm5hbWVfY29kZSk7DQoJCQkkdGhpcy0+YWN0aXZlQ29tcG9uZW50c1JlYWxOYW1lc1skY29tcG9uZW50LT5pZF0gPSAkY29tcG9uZW50LT5uYW1lOw0KCQkJLy8gYWRkIGV4Y2x1ZGVkIGxpc3Qgb2YgbGFuZ3VhZ2VzDQoJCQlpZiAoaXNzZXQoJGNvbXBvbmVudC0+cGFyYW1zWydsYW5ndWFnZV9vcHRpb25zJ11bJ2xhbmd1YWdlcyddKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXhjbHVkZWRMYW5nWyRjb21wb25lbnQtPmlkXSA9ICRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydsYW5ndWFnZXMnXTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXhjbHVkZWRMYW5nWyRjb21wb25lbnQtPmlkXSA9IGFycmF5KCk7DQoJCQl9DQoJCQkvLyBub3cgc2V0IHRoZSBjb21wb25lbnQgYWRkIGxhbmd1YWdlcyBpZiB3ZSBzaG91bGQgdXNlIGxvY2FsICgyKQ0KCQkJaWYgKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWyd1c2VfcGVyY2VudGFnZWxhbmd1YWdlYWRkJ10pICYmICRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWyd1c2VfcGVyY2VudGFnZWxhbmd1YWdlYWRkJ10gPT0gMikNCgkJCXsNCgkJCQkkdGhpcy0+cGVyY2VudGFnZUxhbmd1YWdlQWRkT3ZlcmlkZSA9ICRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydwZXJjZW50YWdlbGFuZ3VhZ2VhZGQnXTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldF0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldCgpDQoJew0KCQkvLyBnZXQgY29tcG9uZW50IGlkDQoJCSRpZCA9IChpbnQpIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5jb21wb25lbnRfaWQ7DQoJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIGFjdGl2ZQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHMpDQoJCQkmJiBpc3NldCgkdGhpcy0+YWN0aXZlQ29tcG9uZW50c1skaWRdKSAmJiAkdGhpcy0+cGVyY2VudGFnZUxhbmd1YWdlQWRkT3ZlcmlkZSAhPSAyMDApDQoJCXsNCgkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5zZXQoJ3BlcmNlbnRhZ2VfbGFuZ3VhZ2VfYWRkJywgJHRoaXMtPnBlcmNlbnRhZ2VMYW5ndWFnZUFkZE92ZXJpZGUpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBMYW5nIEZpbGUgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRMYW5nRmlsZURhdGEoKQ0KCXsNCgkJLy8gbGV0cyBtYXAgc29tZSBhcnJheXMgdG8gdGhlIHBsdWdpbiBmb3IgbGF0ZXIgdXNlDQoJCSR0aGlzLT5jb21waWxlclBhdGggPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+Y29tcGlsZXJfcGF0aDsNCgkJJHRoaXMtPnRlbXBQYXRoID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnRtcF9wYXRoOw0KCQkkdGhpcy0+bGFuZ1RhZyA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZzsNCgkJJHRoaXMtPmRlYnVnTGluZW5yID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmdldCgnZGVidWdfbGluZV9ucicsIGZhbHNlKTsNCgkJJHRoaXMtPmNvbXBvbmVudF92ZXJzaW9uID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmdldCgnY29tcG9uZW50X3ZlcnNpb24nLCAnMS4wLjAnKTsNCgkJJHRoaXMtPmpvb21sYVZlcnNpb24gPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+am9vbWxhX3ZlcnNpb247DQoJCSR0aGlzLT5wZXJjZW50YWdlTGFuZ3VhZ2VBZGQgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+cGVyY2VudGFnZV9sYW5ndWFnZV9hZGQ7DQoJCSR0aGlzLT5yZW1vdmVTaXRlRm9sZGVyID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnJlbW92ZV9zaXRlX2ZvbGRlcjsNCgkJJHRoaXMtPnJlbW92ZVNpdGVFZGl0Rm9sZGVyID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnJlbW92ZV9zaXRlX2VkaXRfZm9sZGVyOw0KCQkkdGhpcy0+Y29tcG9uZW50UGF0aCA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1V0aWxpdGllcy5QYXRocycpLT5jb21wb25lbnRfcGF0aDsNCgkJJHRoaXMtPmNvbXBvbmVudENvZGVOYW1lID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9jb2RlX25hbWU7DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIEJ1aWxkIFBsdWdpbiBMYW5nIEZpbGVzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZUJ1aWxkUGx1Z2luTGFuZ0ZpbGVzKCYkcGx1Z2luKQ0KCXsNCgkJLy8gZ2V0IGNvbXBvbmVudCBpZA0KCQkkaWQgPSAoaW50KSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+Y29tcG9uZW50X2lkOw0KCQkvLyBjaGVjayBpZiB0aGVyZSBpcyBhY3RpdmUNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5hY3RpdmVDb21wb25lbnRzKSAmJiBpc3NldCgkdGhpcy0+YWN0aXZlQ29tcG9uZW50c1skaWRdKSkNCgkJew0KCQkJLy8gc2V0IGZpbGUgbmFtZQ0KCQkJJGZpbGVfbmFtZSA9ICdwbGdfJyAuIHN0cnRvbG93ZXIoJHBsdWdpbi0+Z3JvdXApIC4gJ18nIC4gc3RydG9sb3dlcigkcGx1Z2luLT5jb2RlX25hbWUpOw0KCQkJLy8gZXh0cnVkZSB0aGUgbGFuZ3VhZ2VzIHRoYXQgc2hvdWxkIG5vdCByZW1haW4gaW4gdGhlIHBsdWdpbg0KCQkJJHRoaXMtPmV4dHJ1ZGVMYW5ndWFnZXMoJGlkLCAncGx1Z2lucycsIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZywgJGZpbGVfbmFtZSwgJ2FkbWluJyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgQnVpbGQgTW9kdWxlIExhbmcgRmlsZXNdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlQnVpbGRNb2R1bGVMYW5nRmlsZXMoJiRtb2R1bGUpDQoJew0KCQkvLyBnZXQgY29tcG9uZW50IGlkDQoJCSRpZCA9IChpbnQpIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5jb21wb25lbnRfaWQ7DQoJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIGFjdGl2ZQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHMpICYmIGlzc2V0KCR0aGlzLT5hY3RpdmVDb21wb25lbnRzWyRpZF0pKQ0KCQl7DQoJCQkvLyBleHRydWRlIHRoZSBsYW5ndWFnZXMgdGhhdCBzaG91bGQgbm90IHJlbWFpbiBpbiB0aGUgbW9kdWxlDQoJCQkkdGhpcy0+ZXh0cnVkZUxhbmd1YWdlcygkaWQsICdtb2R1bGVzJywgU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmxhbmdfdGFnLCAkbW9kdWxlLT5maWxlX25hbWUsICRtb2R1bGUtPnRhcmdldF9jbGllbnQpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIEJ1aWxkIEFsbCBMYW5nIEZpbGVzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZUJ1aWxkQWxsTGFuZ0ZpbGVzKCR0YXJnZXRBcmVhKQ0KCXsNCgkJLy8gZ2V0IGNvbXBvbmVudCBpZA0KCQkkaWQgPSAoaW50KSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+Y29tcG9uZW50X2lkOw0KCQkvLyBjaGVjayBpZiB0aGVyZSBpcyBhY3RpdmUNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5hY3RpdmVDb21wb25lbnRzKSAmJiBpc3NldCgkdGhpcy0+YWN0aXZlQ29tcG9uZW50c1skaWRdKSkNCgkJew0KCQkJLy8gc2V0IGZpbGUgbmFtZQ0KCQkJJGZpbGVfbmFtZSA9ICdjb21fJyAuICR0aGlzLT5hY3RpdmVDb21wb25lbnRzTmFtZXNbJGlkXTsNCgkJCS8vIGV4dHJ1ZGUgdGhlIGxhbmd1YWdlcyB0aGF0IHNob3VsZCBub3QgcmVtYWluIGluIHRoZSBtb2R1bGUNCgkJCSR0aGlzLT5leHRydWRlTGFuZ3VhZ2VzKCRpZCwgJHRhcmdldEFyZWEsIENGYWN0b3J5OjpfKCdDb25maWcnKS0+bGFuZ190YWcsICRmaWxlX25hbWUpOw0KCQl9DQoJCS8vIGJ1aWxkIHRoZSBsYW5ndWFnZSBwYWNrYWdlcw0KCQkkdGhpcy0+YnVpbGRMYW5ndWFnZXMoJGlkLCBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmxhbmdfdGFnKTsNCgl9DQoNCgkvKioNCgkgKiBFeHRydWRlciBvZiB0aGUgbGFuZ3VhZ2VzDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZXh0cnVkZUxhbmd1YWdlcygmJGlkLCAkdGFyZ2V0QXJlYSwgJGxhbmdUYWcsICYkZmlsZV9uYW1lLCAkdGFyZ2V0X2NsaWVudCA9ICdib3RoJykNCgl7DQoJCSRtYWluTGFuZ0xvYWRlciA9IFtdOw0KCQkvLyBjaGVjayBpZiB0aGlzIGlkIHdhcyBzZXQgYmVmb3JlDQoJCWlmICghaXNzZXQoJHRoaXMtPmxhbmd1YWdlc1skaWRdKSkNCgkJew0KCQkJJHRoaXMtPmxhbmd1YWdlc1skaWRdID0gW107DQoJCQkkdGhpcy0+YnVpbGREZXRhaWxzWyRpZF0gPSBbXTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB0aGlzIGZpbGUgbmFtZSB3YXMgc2V0IGJlZm9yZQ0KCQlpZiAoIWlzc2V0KCR0aGlzLT5sYW5ndWFnZXNbJGlkXVskZmlsZV9uYW1lXSkpDQoJCXsNCgkJCSR0aGlzLT5sYW5ndWFnZXNbJGlkXVskZmlsZV9uYW1lXSA9IFtdOw0KCQl9DQoJCS8vIHNldCBhbGwgdGhlIGV4dHJhIGxhbmd1YWdlcyBub3QgZXhjbHVkZWQNCgkJZm9yZWFjaCAoU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5MYW5ndWFnZXMnKS0+Z2V0KCR0YXJnZXRBcmVhKSBhcyAka2V5ID0+ICRsYW5ndWFnZSkNCgkJew0KCQkJaWYgKCRrZXkgIT09ICRsYW5nVGFnICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsYW5ndWFnZSkgJiYgKCFpc3NldCgkdGhpcy0+ZXhjbHVkZWRMYW5nWyRpZF0pIHx8ICFpbl9hcnJheSgka2V5LCAkdGhpcy0+ZXhjbHVkZWRMYW5nWyRpZF0pKSkNCgkJCXsNCgkJCQkvLyBhZGQgdG8gb3VyIGJ1Y2tldA0KCQkJCSR0aGlzLT5sYW5ndWFnZXNbJGlkXVskZmlsZV9uYW1lXVska2V5XSA9ICRsYW5ndWFnZTsNCgkJCQkvLyByZW1vdmUgZnJvbSB0aGUgSkNCIGJ1aWxkDQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5MYW5ndWFnZXMnKS0+cmVtb3ZlKCJ7JHRhcmdldEFyZWF9Lnska2V5fSIpOw0KCQkJfQ0KCQkJLy8gY291bnQgdGhlIGFyZWEgc3RyaW5ncw0KCQkJaWYgKCRsYW5nVGFnID09PSAka2V5KQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRsYW5ndWFnZSBhcyAkYXJlYSA9PiAkbGFuZ3VhZ2VTdHJpbmdzKQ0KCQkJCXsNCgkJCQkJJG1haW5MYW5nTG9hZGVyWyRhcmVhXSA9IGNvdW50KCRsYW5ndWFnZVN0cmluZ3MpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBzdG9yZSBkZXRhaWxzIGZvciBidWlsZA0KCQkkdGhpcy0+YnVpbGREZXRhaWxzWyRpZF1bJGZpbGVfbmFtZV0gPSBbJGxhbmdUYWcgPT4gJG1haW5MYW5nTG9hZGVyLCAndGFyZ2V0X2NsaWVudCcgPT4gJHRhcmdldF9jbGllbnRdOw0KCX0NCg0KCS8qKg0KCSAqIFN0YXJ0IHRoZSBidWlsZGluZyBvZiB0aGUgbGFuZ3VhZ2VzIHBhY2thZ2VzDQoJICogDQoJICogQHJldHVybiAgdm9pZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBidWlsZExhbmd1YWdlcygmJGlkLCAkbGFuZ1RhZykNCgl7DQoJCWlmIChpc3NldCgkdGhpcy0+bGFuZ3VhZ2VzWyRpZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5sYW5ndWFnZXNbJGlkXSkpDQoJCXsNCgkJCS8vIHJlc3QgeG1sIGFycmF5DQoJCQkkbGFuZ1hNTCA9IFtdOw0KCQkJJGxhbmdOYW1lcyA9IFtdOw0KCQkJJGxhbmdQYWNrYWdlcyA9IFtdOw0KCQkJJGxhbmdaSVBOYW1lcyA9IFtdOw0KCQkJJGxhbmdYTUxOYW1lcyA9IFtdOw0KCQkJJHZlcnNpb25OYW1lID0gJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNOYW1lc1skaWRdIC4gJ192JyAuIHN0cl9yZXBsYWNlKCcuJywgJ18nLCAkdGhpcy0+Y29tcG9uZW50X3ZlcnNpb24gLiAnX19KJyAuICR0aGlzLT5qb29tbGFWZXJzaW9uKTsNCgkJCWZvcmVhY2ggKCR0aGlzLT5sYW5ndWFnZXNbJGlkXSBhcyAkZmlsZV9uYW1lID0+ICRsYW5ndWFnZXMpDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsYW5ndWFnZXMpICYmIGlzc2V0KCR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVskbGFuZ1RhZ10pKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBtYWluIGxhbmcgbG9hZGVyDQoJCQkJCSRtYWluTGFuZ0xvYWRlciA9ICR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVskbGFuZ1RhZ107DQoJCQkJCS8vIGdldCB0aGUgdGFyZ2V0IGNsaWVudA0KCQkJCQkkdGFyZ2V0X2NsaWVudCA9ICR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVsndGFyZ2V0X2NsaWVudCddOw0KCQkJCQlmb3JlYWNoICgkbGFuZ3VhZ2VzIGFzICR0YWcgPT4gJGFyZWFzKQ0KCQkJCQl7DQoJCQkJCQkvLyB0cmltIHRoZSB0YWcNCgkJCQkJCSR0YWcgPSB0cmltKCR0YWcpOw0KCQkJCQkJLy8gZ2V0IGxhbmd1YWdlIG5hbWUNCgkJCQkJCSRsYW5nTmFtZSA9ICR0aGlzLT5nZXRMYW5ndWFnZU5hbWUoJHRhZyk7DQoJCQkJCQkkbGFuZ0NvZGVOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkbGFuZ05hbWUsICdGJyk7DQoJCQkJCQkvLyBzZXQgdGhlIGZpbGUgZm9sZGVyIG5hbWUNCgkJCQkJCSRsYW5nRm9sZGVyRmlsZU5hbWUgPSAkbGFuZ0NvZGVOYW1lIC4gJ18nIC4gJHZlcnNpb25OYW1lOw0KCQkJCQkJLy8gc2V0IHRoZSBtYWluIGZvbGRlciBwYXRoDQoJCQkJCQkkbWFpbl9wYXRoID0gJHRoaXMtPmNvbXBpbGVyUGF0aCAuICcvJyAuICRsYW5nRm9sZGVyRmlsZU5hbWUgLiAnLyc7DQoJCQkJCQkvLyBzZXQgdGhlIGxhbmd1YWdlIG5hbWUgZm9yIGxhdGVyDQoJCQkJCQkkbGFuZ05hbWVzWyRtYWluX3BhdGhdID0gJGxhbmdOYW1lOw0KCQkJCQkJLy8gc2V0IHRoZSBsYW5nIHppcCBuYW1lIGZvciBsYXRlcg0KCQkJCQkJJGxhbmdaSVBOYW1lc1skbWFpbl9wYXRoXSA9ICRsYW5nRm9sZGVyRmlsZU5hbWU7DQoJCQkJCQkvLyBzZXQgdGhlIGxhbmcgeG1sIG5hbWUgZm9yIGxhdGVyDQoJCQkJCQkkbGFuZ1hNTE5hbWVzWyRtYWluX3BhdGhdID0gJGxhbmdDb2RlTmFtZSAuICdfJyAuICR0aGlzLT5hY3RpdmVDb21wb25lbnRzTmFtZXNbJGlkXSA7DQoJCQkJCQkvLyB3ZSBtdXN0IGNoZWNrIGlmIG9sZCBmb2xkZXIgaXMgZm91bmQgYW5kIHJlbW92ZSBpdA0KCQkJCQkJaWYgKCFpc3NldCgkdGhpcy0+bGFuZ3VhZ2VUcmFja2VyWyRtYWluX3BhdGhdKSAmJiBKRm9sZGVyOjpleGlzdHMoJG1haW5fcGF0aCkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gcmVtb3ZlIHRoZSBtYWluIGZvbGRlcg0KCQkJCQkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6cmVtb3ZlRm9sZGVyKCRtYWluX3BhdGgpOw0KCQkJCQkJCS8vIGRvIG5vdCByZW1vdmUgaXQgYWdhaW4NCgkJCQkJCQkkdGhpcy0+bGFuZ3VhZ2VUcmFja2VyWyRtYWluX3BhdGhdID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJCS8vIGNoZWNrIGlmIGV4aXN0IGFuZCBjcmVhdGUgaWYgbm90DQoJCQkJCQlpZiAoIUpGb2xkZXI6OmV4aXN0cygkbWFpbl9wYXRoKSkNCgkJCQkJCXsNCgkJCQkJCQlKRm9sZGVyOjpjcmVhdGUoJG1haW5fcGF0aCk7DQoJCQkJCQkJLy8gY291bnQgdGhlIGZvbGRlciBjcmVhdGVkDQoJCQkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnVXRpbGl0aWVzLkNvdW50ZXInKS0+Zm9sZGVyKys7DQoJCQkJCQl9DQoJCQkJCQlmb3JlYWNoICgkYXJlYXMgYXMgJGFyZWEgPT4gJGxhbmd1YWdlU3RyaW5ncykNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIGZpbGUgbmFtZQ0KCQkJCQkJCSRmaWxlTmFtZSA9ICR0aGlzLT5nZXRMYW5ndWFnZUZpbGVOYW1lKCRmaWxlX25hbWUsICR0YWcsICRhcmVhKTsNCgkJCQkJCQkvLyBjaGVjayBpZiBsYW5ndWFnZSBzaG91bGQgYmUgYWRkZWQNCgkJCQkJCQlpZiAoU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnTGFuZ3VhZ2UuVHJhbnNsYXRpb24nKS0+Y2hlY2soJHRhZywgJGxhbmd1YWdlU3RyaW5ncywgJG1haW5MYW5nTG9hZGVyWyRhcmVhXSwgJGZpbGVOYW1lKSAmJiAoJGFjdGlvbnMgPSAkdGhpcy0+Z2V0TGFuZ0FjdGlvbnMoJGZpbGVfbmFtZSwgJHRhZywgJGFyZWEsICR0YXJnZXRfY2xpZW50KSkgIT09IGZhbHNlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gc2V0IHRoZSBsYW5ndWFnZSBkYXRhDQoJCQkJCQkJCSRsYW5nID0gYXJyYXlfbWFwKA0KCQkJCQkJCQkJZnVuY3Rpb24gKCRsYW5nc3RyaW5nLCAkcGxhY2Vob2xkZXIpIHsNCgkJCQkJCQkJCQlyZXR1cm4gJHBsYWNlaG9sZGVyIC4gJz0iJyAuICRsYW5nc3RyaW5nIC4gJyInOw0KCQkJCQkJCQkJfSwgYXJyYXlfdmFsdWVzKCRsYW5ndWFnZVN0cmluZ3MpLA0KCQkJCQkJCQkJYXJyYXlfa2V5cygkbGFuZ3VhZ2VTdHJpbmdzKQ0KCQkJCQkJCQkpOw0KCQkJCQkJCQkvLyBzZXQgdGhlIGxpbmUgY291bnRlcg0KCQkJCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdVdGlsaXRpZXMuQ291bnRlcicpLT5saW5lICs9IGNvdW50KA0KCQkJCQkJCQkJKGFycmF5KSAkbGFuZw0KCQkJCQkJCQkpOw0KCQkJCQkJCQkvLyBjaGVjayB0aGF0IHRoZSBtYWluIGZvbGRlciBleGlzdA0KCQkJCQkJCQlmb3JlYWNoICgkYWN0aW9ucyBhcyAkYWN0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkY2xpZW50X3BhdGggPSAkbWFpbl9wYXRoIC4gJGFjdFsndGFyZ2V0X2NsaWVudCddIC4gJy8nOw0KCQkJCQkJCQkJLy8gY2hlY2sgaWYgZXhpc3QgYW5kIGNyZWF0ZSBpZiBub3QNCgkJCQkJCQkJCWlmICghSkZvbGRlcjo6ZXhpc3RzKCRjbGllbnRfcGF0aCkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJSkZvbGRlcjo6Y3JlYXRlKCRjbGllbnRfcGF0aCk7DQoJCQkJCQkJCQkJLy8gY291bnQgdGhlIGZvbGRlciBjcmVhdGVkDQoJCQkJCQkJCQkJJHRoaXMtPmZvbGRlckNvdW50Kys7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkvLyB3cml0ZSB0aGUgbGFuZ3VhZ2UgZGF0YSB0byBhIGZpbGUNCgkJCQkJCQkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6d3JpdGVGaWxlKA0KCQkJCQkJCQkJCSRjbGllbnRfcGF0aCAuICRhY3RbJ2ZpbGVfbmFtZSddLCBpbXBsb2RlKFBIUF9FT0wsICRsYW5nKQ0KCQkJCQkJCQkJKTsNCgkJCQkJCQkJCS8vIGNvdW50IHRoZSBmaWxlIGNyZWF0ZWQNCgkJCQkJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1V0aWxpdGllcy5Db3VudGVyJyktPmxpbmUrKzsNCgkJCQkJCQkJCS8vIGJ1aWxkIHhtbCBzdHJpbmdzDQoJCQkJCQkJCQlpZiAoIWlzc2V0KCRsYW5nWE1MWyRtYWluX3BhdGhdKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkbGFuZ1hNTFskbWFpbl9wYXRoXSA9IGFycmF5KCk7DQoJCQkJCQkJCQkJJGxhbmdQYWNrYWdlc1skbWFpbl9wYXRoXSA9IGFycmF5KCk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoIWlzc2V0KCRsYW5nWE1MWyRtYWluX3BhdGhdWyRhY3RbJ3RhcmdldF9jbGllbnQnXV0pKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRsYW5nWE1MWyRtYWluX3BhdGhdWyRhY3RbJ3RhcmdldF9jbGllbnQnXV0gPSBhcnJheSgpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gc2V0IHRoZSBwYWNrYWdlIHRhcmdldHMNCgkJCQkJCQkJCSRsYW5nUGFja2FnZXNbJG1haW5fcGF0aF1bJGFjdFsndGFyZ2V0X2NsaWVudCddXSA9ICRhY3RbJ3RhcmdldCddOw0KCQkJCQkJCQkJJGxhbmdYTUxbJG1haW5fcGF0aF1bJGFjdFsndGFyZ2V0X2NsaWVudCddXVtdID0gJGFjdFsnZmlsZV9uYW1lJ107DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gY2xlYXIgbWVtb3J5DQoJCQkJCQkJCXVuc2V0KCRsYW5nKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIGxvYWQgdGhlIGxhbmcgeG1sDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGxhbmdYTUwpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRsYW5nWE1MIGFzICRtYWluX3BhdGggPT4gJHRhcmdldF9jbGllbnRzKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBYTUwNCgkJCQkJJHhtbCA9IHN0cl9yZXBsYWNlKA0KCQkJCQkJCWFycmF5X2tleXMoU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hbGxBY3RpdmUoKSksDQoJCQkJCQkJYXJyYXlfdmFsdWVzKFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWxsQWN0aXZlKCkpLA0KCQkJCQkJCSR0aGlzLT5nZXRMYW5ndWFnZVhNTCgkdGFyZ2V0X2NsaWVudHMsICRsYW5nUGFja2FnZXNbJG1haW5fcGF0aF0sICRsYW5nTmFtZXNbJG1haW5fcGF0aF0pDQoJCQkJCQkpOw0KCQkJCQkvLyBnZXQgdGhlIFhNTCBGaWxlIE5hbWUNCgkJCQkJJHhtbEZpbGVOYW1lID0gJGxhbmdYTUxOYW1lc1skbWFpbl9wYXRoXSAuICcueG1sJzsNCgkJCQkJLy8gd3JpdGUgdGhlIGxhbmd1YWdlIGRhdGEgdG8gYSBmaWxlDQoJCQkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6d3JpdGVGaWxlKA0KCQkJCQkJJG1haW5fcGF0aCAuICR4bWxGaWxlTmFtZSwgJHhtbA0KCQkJCQkpOw0KCQkJCQkvLyBzZXQgdGhlIHppcCBmdWxsIHBhdGgNCgkJCQkJJHppcFBhdGggPSAkdGhpcy0+dGVtcFBhdGggLiAnLycgLiAkbGFuZ1pJUE5hbWVzWyRtYWluX3BhdGhdIC4gJy56aXAnOw0KCQkJCQkvLyBub3cgemlwIHRoZSBwYWNrYWdlDQoJCQkJCWlmIChbW1tDb21wb25lbnRdXV1IZWxwZXI6OnppcCgNCgkJCQkJCSRtYWluX3BhdGgsICR6aXBQYXRoDQoJCQkJCSkpDQoJCQkJCXsNCgkJCQkJCS8vIG5vdyByZW1vdmUgdGhlIHBhY2thZ2UNCgkJCQkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6cmVtb3ZlRm9sZGVyKCRtYWluX3BhdGgpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBsYW5ndWFnZSB4bWwNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VYTUwoJiR0YXJnZXRfY2xpZW50cywgJiR0YXJnZXRzLCAmJGxhbmd1YWdlKQ0KCXsNCgkJJHhtbCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuICc8ZXh0ZW5zaW9uIHR5cGU9ImZpbGUiIHZlcnNpb249IjMuMiIgbWV0aG9kPSJ1cGdyYWRlIj4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAnPG5hbWU+JyAuIFBsYWNlZml4OjpfaCgnQ29tcG9uZW50JykgLiAnIC0gJyAuICRsYW5ndWFnZSAuICcgTGFuZ3VhZ2UgUGFjazwvbmFtZT4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAnPGNyZWF0aW9uRGF0ZT4nIC4gUGxhY2VmaXg6Ol9oKCdCVUlMRERBVEUnKSAuICc8L2NyZWF0aW9uRGF0ZT4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAnPGF1dGhvcj4nIC4gUGxhY2VmaXg6Ol9oKCdBVVRIT1InKSAuICc8L2F1dGhvcj4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAnPGF1dGhvckVtYWlsPicgLiBQbGFjZWZpeDo6X2goJ0FVVEhPUkVNQUlMJykgLiAnPC9hdXRob3JFbWFpbD4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAnPGF1dGhvclVybD4nIC4gUGxhY2VmaXg6Ol9oKCdBVVRIT1JXRUJTSVRFJykgLiAnPC9hdXRob3JVcmw+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzxjb3B5cmlnaHQ+JyAuIFBsYWNlZml4OjpfaCgnQ09QWVJJR0hUJykgLiAnPC9jb3B5cmlnaHQ+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzxsaWNlbnNlPicgLiBQbGFjZWZpeDo6X2goJ0xJQ0VOU0UnKSAuICc8L2xpY2Vuc2U+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzx2ZXJzaW9uPicgLiBQbGFjZWZpeDo6X2goJ0FDVFVBTFZFUlNJT04nKSAuICc8L3ZlcnNpb24+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzxkZXNjcmlwdGlvbj4nIC4gJGxhbmd1YWdlIC4gJyBMYW5ndWFnZSBQYWNrIC0gJyAuIFBsYWNlZml4OjpfaCgnU0hPUlRfREVTQ1JJUFRJT04nKSAuICc8L2Rlc2NyaXB0aW9uPic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICc8ZmlsZXNldD4nOw0KCQlmb3JlYWNoICgkdGFyZ2V0X2NsaWVudHMgYXMgJHRhcmdldF9jbGllbnQgPT4gJGZpbGVzKQ0KCQl7DQoJCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAnPGZpbGVzIGZvbGRlcj0iJyAuICR0YXJnZXRfY2xpZW50IC4gJyIgdGFyZ2V0PSInIC4gJHRhcmdldHNbJHRhcmdldF9jbGllbnRdIC4gJyI+JzsNCgkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkNCgkJCXsNCgkJCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAnPGZpbGVuYW1lPicgLiAkZmlsZSAuICc8L2ZpbGVuYW1lPic7DQoJCQl9DQoJCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAnPC9maWxlcz4nOw0KCQl9DQoJCSR4bWwgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICc8L2ZpbGVzZXQ+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gJzwvZXh0ZW5zaW9uPic7DQoNCgkJcmV0dXJuICR4bWw7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBsYW5ndWFnZSBuYW1lDQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExhbmd1YWdlTmFtZSgmJHRhZykNCgl7DQoJCWlmICghaXNzZXQoJHRoaXMtPmxhbmd1YWdlTmFtZXNbJHRhZ10pKQ0KCQl7DQoJCQlpZiAoKCRuYW1lID0gU3VwZXJfX19kYjg3YzMzOV81YmI2XzQyOTFfYTdlZl8yYzQ4ZWExYjA2YmNfX19Qb3dlcjo6dmFyKCdsYW5ndWFnZScsICR0YWcsICdsYW5ndGFnJywgJ25hbWUnKSkgIT09IGZhbHNlKQ0KCQkJew0KCQkJCSR0aGlzLT5sYW5ndWFnZU5hbWVzWyR0YWddID0gJG5hbWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmxhbmd1YWdlTmFtZXNbJHRhZ10gPSAkdGFnOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkdGhpcy0+bGFuZ3VhZ2VOYW1lc1skdGFnXTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGxhbmd1YWdlIGFjdGlvbnMNCgkgKiANCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRMYW5nQWN0aW9ucygmJGZpbGVfbmFtZSwgJiR0YWcsICYkYXJlYSwgJiR0YXJnZXRfY2xpZW50KQ0KCXsNCgkJLy8gY29tcG9uZW50IGV4dGVudGlvbiB0eXBlDQoJCWlmIChzdHJwb3MoJGZpbGVfbmFtZSwgJ2NvbV8nKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSR0YXJnZXRfY2xpZW50ID0gJ2FkbWluJzsNCgkJCSR0YXJnZXQgPSAnYWRtaW5pc3RyYXRvci9sYW5ndWFnZS8nOw0KCQkJaWYgKHN0cnBvcygkYXJlYSwgJ3NpdGUnKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJHRhcmdldF9jbGllbnQgPSAnc2l0ZSc7DQoJCQkJJHRhcmdldCA9ICdsYW5ndWFnZS8nOw0KCQkJfQ0KCQkJcmV0dXJuIGFycmF5KA0KCQkJCWFycmF5KA0KCQkJCQkndGFyZ2V0X2NsaWVudCcgPT4gJHRhcmdldF9jbGllbnQsDQoJCQkJCSd0YXJnZXQnID0+ICR0YXJnZXQgLiAkdGFnLA0KCQkJCQknZmlsZV9uYW1lJyA9PiAkdGhpcy0+Z2V0TGFuZ3VhZ2VGaWxlTmFtZSgkZmlsZV9uYW1lLCAkdGFnLCAkYXJlYSkNCgkJCQkpDQoJCQkpOw0KCQl9DQoJCWVsc2VpZiAoJ2FkbWluJyA9PT0gJHRhcmdldF9jbGllbnQpDQoJCXsNCgkJCSR0YXJnZXQgPSAnYWRtaW5pc3RyYXRvci9sYW5ndWFnZS8nOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRhcmdldCA9ICdsYW5ndWFnZS8nOw0KCQl9DQoJCS8vIG1vZHVsZS9wbHVnaW4gZXh0ZW5zaW9uIHR5cGUgKFRPRE8gd2UgcmV0dXJuIGJvdGggZm9yIG5vdykNCgkJcmV0dXJuIGFycmF5KA0KCQkJYXJyYXkoDQoJCQkJJ3RhcmdldF9jbGllbnQnID0+ICR0YXJnZXRfY2xpZW50LA0KCQkJCSd0YXJnZXQnID0+ICR0YXJnZXQgLiAkdGFnLA0KCQkJCSdmaWxlX25hbWUnID0+ICR0aGlzLT5nZXRMYW5ndWFnZUZpbGVOYW1lKCRmaWxlX25hbWUsICR0YWcsICRhcmVhKQ0KCQkJKSwNCgkJCWFycmF5KA0KCQkJCSd0YXJnZXRfY2xpZW50JyA9PiAkdGFyZ2V0X2NsaWVudCwNCgkJCQkndGFyZ2V0JyA9PiAkdGFyZ2V0IC4gJHRhZywNCgkJCQknZmlsZV9uYW1lJyA9PiAkdGhpcy0+Z2V0TGFuZ3VhZ2VGaWxlTmFtZSgkZmlsZV9uYW1lLCAkdGFnLCAkYXJlYSwgJy5zeXMnKQ0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgbGFuZ3VhZ2UgZmlsZSBuYW1lDQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExhbmd1YWdlRmlsZU5hbWUoJiRmaWxlX25hbWUsICYkdGFnLCAmJGFyZWEsICR0eXBlID0gJycpDQoJew0KCQkvLyBjb21wb25lbnQgZXh0ZW5zaW9uIHR5cGUNCgkJaWYgKHN0cnBvcygkZmlsZV9uYW1lLCAnY29tXycpICE9PSBmYWxzZSkNCgkJew0KCQkJaWYgKHN0cnBvcygkYXJlYSwgJ3N5cycpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkdHlwZSA9ICcuc3lzJzsNCgkJCX0NCgkJfQ0KCQkvLyBmaWxlIG5hbWUNCgkJcmV0dXJuICR0YWcgLiAnLicgLiAkZmlsZV9uYW1lIC4gJHR5cGUgLiAnLmluaSc7DQoJfQ0KDQoJLyoqDQoJICogY2hlY2sgaWYgYSB0cmFuc2xhdGlvbiBzaG91bGQgYmUgYWRkZWQNCgkgKiANCgkgKiBAcmV0dXJuICBib29sDQoJICogQGRlcHJlY2F0ZWQgMy40IFVzZSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdMYW5ndWFnZS5UcmFuc2xhdGlvbicpLT5jaGVjayguLi4pOw0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzaG91bGRMYW5ndWFnZUJlQWRkZWQoJiR0YWcsICYkbGFuZ3VhZ2VTdHJpbmdzLCAmJHRvdGFsLCAmJGZpbGVfbmFtZSkgew0KCQkvLyBvbmx5IGxvZyBtZXNzYWdlcyBmb3Igbm9uZSAkdGhpcy0+bGFuZ1RhZyB0cmFuc2xhdGlvbnMNCgkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnTGFuZ3VhZ2UuVHJhbnNsYXRpb24nKS0+Y2hlY2soDQoJCQkkdGFnLCAkbGFuZ3VhZ2VTdHJpbmdzLCAkdG90YWwsICRmaWxlX25hbWUNCgkJKTsNCgl9DQo=', '[[[Component]]] Language Packaging', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQkvLyBsb2FkIHRoZSBoZWxwZXIgY2xhc3MNCgkJCUpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7DQoJCQkvLyBibG9jayBpbnN0YWxsDQoJCQkkYmxvY2tJbnN0YWxsID0gdHJ1ZTsNCgkJCS8vIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIEpDQg0KCQkJJG1hbmlmZXN0ID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjptYW5pZmVzdCgpOw0KCQkJaWYgKGlzc2V0KCRtYW5pZmVzdC0+dmVyc2lvbikgJiYgc3RycG9zKCRtYW5pZmVzdC0+dmVyc2lvbiwgJy4nKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSB2ZXJzaW9uDQoJCQkJJGpjYlZlcnNpb24gPSBleHBsb2RlKCcuJywgJG1hbmlmZXN0LT52ZXJzaW9uKTsNCgkJCQkvLyBjaGVjayB0aGF0IHdlIGhhdmUgSkNCIDIuMTAuMTMgb3IgaGlnaGVyIGluc3RhbGxlZA0KCQkJCWlmIChjb3VudCgkamNiVmVyc2lvbikgPT0gMyAmJiAoKCRqY2JWZXJzaW9uWzBdID09IDIgJiYgJGpjYlZlcnNpb25bMV0gPj0gMTAgJiYgKCgkamNiVmVyc2lvblsxXSA9PSAxMCAmJiAkamNiVmVyc2lvblsyXSA+PSAxMykgfHwgKCRqY2JWZXJzaW9uWzFdID4gMTApKSkgfHwgJGpjYlZlcnNpb25bMF0gPj0gMykpDQoJCQkJew0KCQkJCQkkYmxvY2tJbnN0YWxsID0gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWxsb3cgaW5zdGFsbCBpZiBhbGwgY29uZGl0aW9ucyBhcmUgbWV0DQoJCQlpZiAoJGJsb2NrSW5zdGFsbCkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnUGxlYXNlIHVwZ3JhZGUgdG8gSkNCIDIuMTAuMTMgb3IgaGlnaGVyIGJlZm9yZSBpbnN0YWxsaW5nIHRoaXMgcGx1Z2luLicsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0=', '', '', '', '1.2.1', '{\"property_selection0\":{\"property\":\"34\"},\"property_selection1\":{\"property\":\"35\"},\"property_selection2\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Language Packaging', '', 1, '', '', 1, '2019-10-12 22:36:16', '2024-08-06 20:54:21', 85, '', 2),
-(8, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to integrate componentbuilder with [[[curriculumbuilder_link_name]]]. To activate it you must first enable it here.', '{}', '3b7fd798-af89-4cd9-b85a-1c43b83ec655', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw==', 3, '{}', 'CS8qKg0KCSAqIERhdGFiYXNlIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBEYXRhYmFzZURyaXZlcg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRkYjsNCg0KCS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqLw0KCXByb3RlY3RlZCAgJGFwcDsNCg0KCS8qKg0KCSAqIExvY2tlZCBmaWxlbiBuYW1lDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCAgJGZpbGVMb2NrZWQ7DQoNCgkvKioNCgkgKiBIaWRkZW4gZmlsZSBwYXRoDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCAgJGhpZGVuRmlsZTsNCg0KCS8qKg0KCSAqIE9wZW4gZmlsZSBwYXRoDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCAgJG9wZW5GaWxlOw0KDQoJLyoqDQoJICogSGlkZGVuIGltYWdlIGZvbGRlciBwYXRoDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCAgJGhpZGVuUGFnZXNGb2xkZXI7DQoNCgkvKioNCgkgKiBUaGUgcGFnZXMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgICRwYWdlczsNCg0KCS8qKg0KCSAqIEZpbGUgTmFtZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgICRmaWxlTmFtZSA9IGZhbHNlOw0KDQoJLyoqDQoJICogRmlsZSBFeHRlbnNpb24NCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICovDQoJcHJvdGVjdGVkICAkZmlsZUV4dGVuc2lvbiA9IGZhbHNlOw0KDQoJLyoqDQoJICogVGhpcyBpcyBhIGV2ZW50IHRvIGJ1aWxkIHRoZSB2aWV3IGFyZWENCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gdGhlIHBsdWdpbi4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbltbW2NvbXBvbmVudF9hY3JvbnltXV1dUHJvY2Vzc2luZ1JlcXVlc3QoJGNvbnRleHQsICRhamF4LCAmJHBhZ2UsICYkdGFyZ2V0LCAmJHJlc3VsdCkNCgl7DQoJCWlmICgnY29tX1tbW2NvbXBvbmVudF1dXS5zdGFnZScgPT09ICRjb250ZXh0DQoJCQkmJiAkdGhpcy0+YXBwLT5pc0NsaWVudCgnYWRtaW5pc3RyYXRvcicpDQoJCQkmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcGFnZSkNCgkJCSYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCR0YXJnZXQpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHVzZXIgb2JqZWN0DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCS8vIGdldCBwYWdlIHZhbHVlcw0KCQkJJHBhZ2UgPSBqc29uX2RlY29kZSgkcGFnZSk7DQoJCQkvLyBnZXQgcGFnZSB2YWx1ZXMNCgkJCSR0YXJnZXQgPSBqc29uX2RlY29kZSgkdGFyZ2V0KTsNCgkJCS8vIHNhbml0aXphIHN0cmluZ3MNCgkJCWlmIChpc3NldCgkcGFnZS0+bmFtZSkgJiYgaXNzZXQoJHBhZ2UtPmV4dHJ1ZGUpICYmIGlzc2V0KCRwYWdlLT5pbWFnZSkgJiYgaXNzZXQoJHBhZ2UtPmh0bWwpICYmIGlzc2V0KCRwYWdlLT5zdmcpDQoJCQkJJiYgMSA9PSAkcGFnZS0+ZXh0cnVkZSAmJiBpc3NldCgkdGFyZ2V0LT51c2VyKSAmJiBpc3NldCgkdGFyZ2V0LT50eXBlKSAmJiAoJHRhcmdldC0+dXNlciA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZGVjcnlwdCgkdGFyZ2V0LT51c2VyKSkgIT09IGZhbHNlDQoJCQkJJiYgJHRhcmdldC0+dXNlciA9PSAkdXNlci0+Z2V0KCdpZCcpDQoJCQkJJiYgaXNzZXQoJHRhcmdldC0+bmFtZSkgJiYgaXNzZXQoJHRhcmdldC0+ZmlsZW5hbWUpICYmICgkdGFyZ2V0LT5maWxlbmFtZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZGVjcnlwdCgkdGFyZ2V0LT5maWxlbmFtZSkpICE9PSBmYWxzZQ0KCQkJCSYmIGlzc2V0KCR0YXJnZXQtPmd1aWQpICYmICgkdGFyZ2V0LT5ndWlkID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpkZWNyeXB0KCR0YXJnZXQtPmd1aWQpKSAhPT0gZmFsc2UgJiYgW1tbQ29tcG9uZW50XV1dSGVscGVyOjp2YWxpZEdVSUQoJHRhcmdldC0+Z3VpZCkNCgkJCQkmJiBzdHJwb3MoJHRhcmdldC0+ZmlsZW5hbWUsICdWRE0nKSAhPT0gZmFsc2UgJiYgc3RycG9zKCRwYWdlLT5uYW1lLCAnX3BhZ2UnKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJLy8gbG9hZCB0aGUgZmlsZSBjbGFzcw0KCQkJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZpbGUnKTsNCgkJCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5mb2xkZXInKTsNCgkJCQkvLyBub3cgbGV0cyBnZXQgdGhlIGZpbGUgZGF0YQ0KCQkJCSR0aGlzLT5oaWRlblBhdGggPSBydHJpbShbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZvbGRlclBhdGgoJ3BhdGgnLCAnaGlkZGVuZmlsZXBhdGgnKSwgJy8nKTsNCgkJCQkkdGhpcy0+aGlkZW5GaWxlID0gJHRoaXMtPmhpZGVuUGF0aCAuICcvJyAuICR0YXJnZXQtPmZpbGVuYW1lOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgZmlsZSBleGlzdA0KCQkJCWlmIChKRmlsZTo6ZXhpc3RzKCR0aGlzLT5oaWRlbkZpbGUpKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgPSAkdGhpcy0+aGlkZW5QYXRoIC4gJy8ucGFnZXNfJyAuIHRyaW0oJHRhcmdldC0+ZmlsZW5hbWUsICcuJyk7DQoJCQkJCS8vIG1ha2UgcGF0aCBzYWZlDQoJCQkJCSR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyID0gSkZvbGRlcjo6bWFrZVNhZmUoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIpOw0KCQkJCQkvLyBkb2VzIHRoZSBpbWFnZSBleGlzdA0KCQkJCQlpZiAoSkZvbGRlcjo6ZXhpc3RzKCR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyKSAmJiBKRmlsZTo6ZXhpc3RzKCR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyIC4gJy8nIC4gJy4nIC4gJHBhZ2UtPm5hbWUpKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgdGhlIGRhdGVzDQoJCQkJCQkkZGF0ZSA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9TcWwoKTsNCgkJCQkJCS8vIGdldCBbW1tjdXJyaWN1bHVtYnVpbGRlcl1dXSBoZWxwZXIgY2xhc3MNCgkJCQkJCSRbW1tDdXJyaWN1bHVtYnVpbGRlcl1dXUhlbHBlciA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0SGVscGVyQ2xhc3MoJ1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dJyk7DQoJCQkJCQkvLyBidWlsZCB0aGUgcmVzb3VyY2UgYW5kIGtlZXAgdGhlIEdVSUQgcmVhZHkgaWYgbW9yZSBwYWdlcyBpcyB0byBiZSBidWlsZA0KCQkJCQkJaWYgKCgkcmVzb3VyY2UgPSAkW1tbQ3VycmljdWx1bWJ1aWxkZXJdXV1IZWxwZXI6OmdldFZhcigncmVzb3VyY2UnLCAkdGFyZ2V0LT5ndWlkLCAnZ3VpZCcsICdpZCcpKSA9PT0gZmFsc2UpDQoJCQkJCQl7DQoJCQkJCQkJLy8gc2V0IHRoZSBkYXRhIGZvciB0aGUgcmVzb3VyY2UNCgkJCQkJCQkkZGF0YSA9IGFycmF5KA0KCQkJCQkJCQknaWQnID0+IDAsDQoJCQkJCQkJCSdndWlkJyA9PiAkdGFyZ2V0LT5ndWlkLA0KCQkJCQkJCQknbmFtZScgPT4gJHRhcmdldC0+bmFtZSwNCgkJCQkJCQkJJ3B1Ymxpc2hlZCcgPT4gMCwNCgkJCQkJCQkJJ3ZlcnNpb24nID0+IDEsDQoJCQkJCQkJCSdjcmVhdGVkX2J5JyA9PiAkdGFyZ2V0LT51c2VyLA0KCQkJCQkJCQknY3JlYXRlZCcgPT4gJGRhdGUsDQoJCQkJCQkJCSd0eXBlJyA9PiAkdGFyZ2V0LT50eXBlKTsNCgkJCQkJCQkkcmVzb3VyY2VNb2RlbCA9ICRbW1tDdXJyaWN1bHVtYnVpbGRlcl1dXUhlbHBlcjo6Z2V0TW9kZWwoJ3Jlc291cmNlJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY3VycmljdWx1bWJ1aWxkZXJdXV0nKTsNCgkJCQkJCQlpZiAoISRyZXNvdXJjZU1vZGVsLT5zYXZlKCRkYXRhKSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIGRvIG5vdCBjb250aW51ZSB0byBzZXQgdGhlIHBhZ2VzIGlmIHdlIGNvdWxkIG5vdCBjcmVhdGUgdGhlIHJlc291cmNlDQoJCQkJCQkJCSR0YXJnZXQtPmd1aWQgPSBudWxsOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcmVzb3VyY2UNCgkJCQkJCWlmIChbW1tDb21wb25lbnRdXV1IZWxwZXI6OnZhbGlkR1VJRCgkdGFyZ2V0LT5ndWlkKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIFBhZ2UgTW9kZWwNCgkJCQkJCQkkcGFnZU1vZGVsID0gJFtbW0N1cnJpY3VsdW1idWlsZGVyXV1dSGVscGVyOjpnZXRNb2RlbCgncGFnZScsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dJyk7DQoJCQkJCQkJLy8gc2V0IHRoZSBkYXRhIGZvciB0aGUgcGFnZQ0KCQkJCQkJCSRkYXRhID0gYXJyYXkoDQoJCQkJCQkJCSdpZCcgPT4gMCwNCgkJCQkJCQkJJ251bWJlcicgPT4gKGludCkgJHBhZ2UtPm5hbWUsDQoJCQkJCQkJCSdndWlkJyA9PiAnJywNCgkJCQkJCQkJJ3Jlc291cmNlJyA9PiAkdGFyZ2V0LT5ndWlkLA0KCQkJCQkJCQknbmFtZScgPT4gJHRhcmdldC0+bmFtZSwNCgkJCQkJCQkJJ2NvbnRlbnQnID0+ICcnLA0KCQkJCQkJCQkncHVibGlzaGVkJyA9PiAwLA0KCQkJCQkJCQkndmVyc2lvbicgPT4gMSwNCgkJCQkJCQkJJ2NyZWF0ZWRfYnknID0+ICR0YXJnZXQtPnVzZXIsDQoJCQkJCQkJCSdjcmVhdGVkJyA9PiAkZGF0ZSwNCgkJCQkJCQkJJ3R5cGUnID0+ICR0YXJnZXQtPnR5cGUpOw0KCQkJCQkJCS8vIHNldCB0aGUgaW1hZ2UNCgkJCQkJCQlpZiAoMSA9PSAkcGFnZS0+aW1hZ2UpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBnZXQgY29udGVudA0KCQkJCQkJCQkkZGF0YVsnY29udGVudCddID0gJzxpbWcgc3JjPSInIC4gJHRoaXMtPmdldExpbmsoJy4nLiRwYWdlLT5uYW1lKSAuICciIGFsdD0iJyAuICRwYWdlLT5uYW1lIC4gJyI+JzsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gc2V0IHRoZSBwYWdlIGFzIEhUTUwNCgkJCQkJCQllbHNlaWYgKDEgPT0gJHBhZ2UtPmh0bWwpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBnZXQgY29udGVudA0KCQkJCQkJCQkkdGhpcy0+Z2V0SFRNTEZyb21QREYoJGRhdGEsIChpbnQpICRwYWdlLT5uYW1lKTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gc2V0IHRoZSBwYWdlIGFzIEhUTUwNCgkJCQkJCQllbHNlaWYgKDEgPT0gJHBhZ2UtPnN2ZykNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIGdldCBjb250ZW50DQoJCQkJCQkJCSR0aGlzLT5nZXRTVkdGcm9tUERGKCRkYXRhLCAoaW50KSAkcGFnZS0+bmFtZSk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIHNhdmUgdGhlIHBhZ2UgaWYgYW55IG9mIHRoZSBvcHRpb25zIHdhcyBzZXQNCgkJCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ2NvbnRlbnQnXSkgJiYgKDEgPT0gJHBhZ2UtPmh0bWwgfHwgMSA9PSAkcGFnZS0+c3ZnIHx8IDEgPT0gJHBhZ2UtPmltYWdlKSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIHNhdmUgdGhlIHBhZ2UNCgkJCQkJCQkJaWYgKCRwYWdlTW9kZWwtPnNhdmUoJGRhdGEpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkcmVzdWx0ID0gdHJ1ZTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgaXMgYSBldmVudCB0byBidWlsZCB0aGUgdmlldyBhcmVhDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIHRoZSBwbHVnaW4uDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25bW1tjb21wb25lbnRfYWNyb255bV1dXUJ1aWxkVmlldygkY29udGV4dCwgJHZpZXcpDQoJew0KCQlpZiAoJ2NvbV9bW1tjb21wb25lbnRdXV0uc3RhZ2UnID09PSAkY29udGV4dCAmJiAkdGhpcy0+YXBwLT5pc0NsaWVudCgnYWRtaW5pc3RyYXRvcicpKQ0KCQl7DQoJCQkvLyBleHRyYWN0IHRoZSBwYWdlcyBmcm9tIHRoZSBQREYgYW5kIGxvYWQgdGhlaXIgcGF0aHMgdG8gbWVtb3J5DQoJCQlpZiAoJHRoaXMtPnNldFBhZ2VzKCkgJiYgJHRoaXMtPmZpbGVOYW1lKQ0KCQkJew0KCQkJCS8vIGJ1aWxkIHRoZSBzZWxlY3Rpb24gYXJlYQ0KCQkJCWlmICgoJHZpZXctPl9kaXNwbGF5X3ZpZXdfaGVhZGVyID0gJHRoaXMtPmJ1aWxkUmVzb3VyY2VBcmVhKCkpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCS8vIGJ1aWxkIHRoZSBzZWxlY3Rpb24gYXJlYQ0KCQkJCQkkdmlldy0+X2Rpc3BsYXlfdmlldyA9ICR0aGlzLT5idWlsZFNlbGVjdGlvbkFyZWEoKTsNCgkJCQkJLy8gYnVpbGQgdGhlIGphdmFzY3JpcHQNCgkJCQkJJHZpZXctPl9kaXNwbGF5X3ZpZXdfZm9vdGVyID0gJHRoaXMtPmJ1aWxkSmF2YVNjcmlwdCgpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgaXMgYSBnZXQgaXRlbSBldmVudCB0byBpbmplY3QgY3VzdG9tIGJlaGF2aW9yLg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IGJlaW5nIHBhc3NlZCB0byB0aGUgcGx1Z2luLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uW1tbY29tcG9uZW50X2Fjcm9ueW1dXV1HZXRJdGVtKCRjb250ZXh0LCAuLi4kYXJncykNCgl7DQoJCS8vIGFjdGlvbiB0byBiZSB0YWtlbiB3aXRoIHdlIGhhdmUgZmlsZSBpdGVtDQoJCWlmICgnY29tX1tbW2NvbXBvbmVudF1dXS5maWxlJyA9PT0gJGNvbnRleHQgJiYgJHRoaXMtPmFwcC0+aXNDbGllbnQoJ2FkbWluaXN0cmF0b3InKSAmJiBpc3NldCgkYXJnc1swXSkNCgkJCS8vIGp1c3QgZm9yIFBERidzIGZvciBub3cNCgkJCSYmIGlzc2V0KCRhcmdzWzBdLT5maWxlX2V4dGVuc2lvbikgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGFyZ3NbMF0tPmZpbGVfZXh0ZW5zaW9uKSAmJiAncGRmJyA9PT0gc3RydG9sb3dlcigkYXJnc1swXS0+ZmlsZV9leHRlbnNpb24pKQ0KCQl7DQoJCQlpZiAoKCRrZXkgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoJGFyZ3NbMF0tPm1haW5fZmlsZSkpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkka2V5ID0gdXJsZW5jb2RlKCRrZXkpOw0KCQkJCS8vICRhcmdzWzBdID09ICRpdGVtDQoJCQkJJGFyZ3NbMF0tPm9uY2xpY2sgLj0gIm9wZW5QZGZQYXRoU2VsZWN0aW9uKCIgLiAoaW50KSAkYXJnc1swXS0+aWQgLiAiLCAnIiAuICRhcmdzWzBdLT5maWxlX25hbWUgLiAiJywgJyIgLiAka2V5IC4gIicpIjsNCgkJCQkkYXJnc1swXS0+bGluayA9ICcjJzsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCdjb21fW1tbY29tcG9uZW50XV1dLnN0YWdlJyA9PT0gJGNvbnRleHQgJiYgJHRoaXMtPmFwcC0+aXNDbGllbnQoJ2FkbWluaXN0cmF0b3InKSAmJiAkYXJnc1sxXSA+IDApDQoJCXsNCgkJCS8vICRhcmdzWzBdID09ICR0aGlzDQoJCQkvLyAkYXJnc1sxXSA9PSAkcGsNCgkJCS8vICRhcmdzWzJdID09ICRxdWVyeQ0KCQkJLy8gJGFyZ3NbM10gPT0gJGRiDQoJCQlpZiAoKCRicmlkZ2UgPSAkdGhpcy0+YXBwLT5pbnB1dC0+Z2V0KCdicmlkZ2UnLCBmYWxzZSwgJ2Jhc2U2NCcpKSAhPT0gZmFsc2UNCgkJCQkmJiAoJGJyaWRnZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZGVjcnlwdCgkYnJpZGdlKSkgIT09IGZhbHNlDQoJCQkJJiYgJ1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dLnJlc291cmNlLnBkZicgPT09ICRicmlkZ2UNCgkJCQkmJiAoJHRoaXMtPmZpbGVMb2NrZWQgPSAkdGhpcy0+YXBwLT5pbnB1dC0+Z2V0KCdrZXknLCBmYWxzZSwgJ2Jhc2U2NCcpKSAhPT0gZmFsc2UNCgkJCQkmJiAoJGZpbGUgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmRlY3J5cHQoJHRoaXMtPmZpbGVMb2NrZWQpKSAhPT0gZmFsc2UNCgkJCQkmJiBzdHJwb3MoJGZpbGUsICdWRE0nKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJLy8gbG9hZCB0aGUgZmlsZSBjbGFzcw0KCQkJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZpbGUnKTsNCgkJCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5mb2xkZXInKTsNCgkJCQkvLyBub3cgbGV0cyBnZXQgdGhlIGZpbGUgZGF0YQ0KCQkJCSR0aGlzLT5oaWRlblBhdGggPSBydHJpbShbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZvbGRlclBhdGgoJ3BhdGgnLCAnaGlkZGVuZmlsZXBhdGgnKSwgJy8nKTsNCgkJCQkkdGhpcy0+aGlkZW5GaWxlID0gJHRoaXMtPmhpZGVuUGF0aCAuICcvJyAuICRmaWxlOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgZmlsZSBleGlzdA0KCQkJCWlmIChKRmlsZTo6ZXhpc3RzKCR0aGlzLT5oaWRlbkZpbGUpKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgPSAkdGhpcy0+aGlkZW5QYXRoIC4gJy8ucGFnZXNfJyAuIHRyaW0oJGZpbGUsICcuJyk7DQoJCQkJCS8vIGV4dHJhY3QgdGhlIHBhZ2VzIGZyb20gdGhlIFBERiBhbmQgbG9hZCB0aGVpciBwYXRocyB0byBtZW1vcnkNCgkJCQkJaWYgKCR0aGlzLT5zZXRQYWdlcygpKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+ZmlsZU5hbWUgPSBleHBsb2RlKCdWRE0nLCAkZmlsZSlbMV07DQoJCQkJCQkkdGhpcy0+X2ZpbGVOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdGhpcy0+ZmlsZU5hbWUsICdXJywgJ18nLCBmYWxzZSwgZmFsc2UpOw0KCQkJCQkJJHRoaXMtPmZpbGVFeHRlbnNpb24gPSBleHBsb2RlKCdfJywgJGZpbGUpWzJdOw0KCQkJCQkJJHRoaXMtPmZpbGVOYW1lIC49ICcuJyAuICR0aGlzLT5maWxlRXh0ZW5zaW9uOw0KCQkJCQkJJHRoaXMtPmd1aWQgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OkdVSUQoKTsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKFRleHQ6Ol8oJ1RoZSBQREYgZmlsZSBjb3VsZCBub3QgYmUgZm91bmQsIHBsZWFzZSB0cnkgYWdhaW4hJyksICdlcnJvcicpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogVGhpcyBpcyBhIHNldCBEb2N1bWVudCBldmVudCB0byBpbmplY3QgY3VzdG9tIGJlaGF2aW9yLg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IGJlaW5nIHBhc3NlZCB0byB0aGUgcGx1Z2luLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uW1tbY29tcG9uZW50X2Fjcm9ueW1dXV1Eb2N1bWVudCgkY29udGV4dCwgJHZpZXcpDQoJew0KCQkvLyBhY3Rpb24gdG8gYmUgdGFrZW4gd2l0aCBmb2xkZXJzIGRvY3VtZW50DQoJCWlmICgnY29tX1tbW2NvbXBvbmVudF1dXS5mb2xkZXJzJyA9PT0gJGNvbnRleHQgJiYgJHRoaXMtPmFwcC0+aXNDbGllbnQoJ2FkbWluaXN0cmF0b3InKSAmJiBpc3NldCgkdmlldy0+ZG9jdW1lbnQpKQ0KCQl7DQoJCQkvLyBidWlsZCBicmlkZ2Uga2V5IChvbmx5IGNvbnRpbnVlIGlmIHdlIGNhbiBjcmVhdGUgYSBrZXkpDQoJCQlpZiAoKCRrZXkgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoJ1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dLnJlc291cmNlLnBkZicpKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJGtleSA9IHVybGVuY29kZSgka2V5KTsNCgkJCQkvLyBhZGQgSmF2YVNjcmlwdCB0byBkb2N1bWVudA0KCQkJCSR2aWV3LT5kb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oImZ1bmN0aW9uIG9wZW5QZGZQYXRoU2VsZWN0aW9uKGZpbGVJRCwgZmlsZU5hbWUsIGZpbGVLZXkpIHsNCgkJCQkJVUlraXQubW9kYWwuY29uZmlybSgnV291bGQgeW91IGxpa2UgdG8gdXNlIDxiPicrZmlsZU5hbWUrJzwvYj4gaW4gW1tbY3VycmljdWx1bWJ1aWxkZXJfbGlua19uYW1lXV1dIGFzIGEgcmVzb3VyY2U/JykudGhlbihmdW5jdGlvbiAoKSB7DQoJCSAgCQkJCWpRdWVyeSgnI1tbW2NvbXBvbmVudF1dXV9sb2FkZXInKS5odG1sKCc8YnIgLz48Y2VudGVyPjxkaXYgY2xhc3M9XCd1ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1yaWdodCB1ay1hbmltYXRpb24tc2NhbGUtdXAgdWstYm94LXNoYWRvdy1ib3R0b21cJz48aDI+IiAuIFRleHQ6Ol8oJ1dlIGFyZSBleHRyYWN0aW5nIHRoZSBwYWdlcyBmcm9tIHRoZSBQREYsIHRoaXMgbWF5IHRha2UgYSBtb21lbnQuPGJyIC8+UGxlYXNlIHdhaXQgYW5kIGRvIG5vdCByZWRpcmVjdCBhd2F5IGZyb20gdGhpcyBwYWdlIScpIC4gIjwvaDI+PC9kaXY+PC9jZW50ZXI+Jyk7DQoJCQkJCQlqUXVlcnkoJyNsb2FkaW5nJykuc2hvdygpOw0KCQkgIAkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdmlldz1zdGFnZSZicmlkZ2U9IiAuICRrZXkgLiAiJmtleT0nICsgZmlsZUtleSArICcmaWQ9JyArIGZpbGVJRDsNCgkJIAkgIAkJfSk7DQoJCQkJfSIpOw0KCQkJfQ0KCQl9DQoJCWVsc2VpZiAoJ2NvbV9bW1tjb21wb25lbnRdXV0uc3RhZ2UnID09PSAkY29udGV4dCAmJiAkdGhpcy0+YXBwLT5pc0NsaWVudCgnYWRtaW5pc3RyYXRvcicpICYmICR0aGlzLT5maWxlTmFtZSAmJiBpc3NldCgkdmlldy0+ZG9jdW1lbnQpKQ0KCQl7DQoJCQkvLyAgd2UgdXBkYXRlIHRoZSBoZWFkaW5nLCB0aXRsZSBhbmQgaWNvbg0KCQkJJHZpZXctPmRvY3VtZW50LT5zZXRUaXRsZShUZXh0OjpfKCdFeHRydWRlJykgLiAnICcgLiAkdGhpcy0+ZmlsZU5hbWUpOw0KCQkJSlRvb2xiYXJIZWxwZXI6OnRpdGxlKFRleHQ6Ol8oJ0V4dHJ1ZGUnKSAuICcgJyAuICR0aGlzLT5maWxlTmFtZSwgJ2Fycm93LXVwLTQnKTsNCgkJfQ0KCX0NCgkJCQkJCS8vIHdlIGxlYXZlIHRoaXMgb3V0IGZvciBub3cuICciIC4gJGFyZ3NbMF0tPmxpbmsgLiAiJywgDQoJCQkJCQkvLyAsIGZ1bmN0aW9uICgpIHsNCgkJCQkJCS8vIFVJa2l0Lm1vZGFsLmNvbmZpcm0oJ1dvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlIGRvd25sb2FkaW5nIDxiPicrZmlsZU5hbWUrJzwvYj4/JykudGhlbihmdW5jdGlvbiAoKSB7DQoJCSAgCQkJCS8vCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbGluazsNCgkJIAkgIAkJCS8vIH0sIGZ1bmN0aW9uICgpIHsNCgkJCQkJCS8vCVVJa2l0Lm1vZGFsLmFsZXJ0KCc8aDM+T2theSBzbyB3aHkgZGlkIHlvdSBjbGljayBvbiB0aGUgZmlsZT88L2gzPjxwPkhtbW0geW91IG11c3QgaGF2ZSBiZWVuIGEgbGl0dGxlIGN1cmlvdXMgaG93IHRoaW5ncyB3b3JrIEkgc3VwcG9zZS48L3A+PGg0PlZlcnkgd2VsbCBlbmpveSE8L2g0PicpOw0KCQkgICAJCQkJLy8gfSk7DQoJCSAgIAkJCQkvLyB9KTsNCg0KCS8qKg0KCSAqIFNldCB0aGUgcGFnZXMgbGlua3MNCgkgKg0KCSAqDQoJICogQHJldHVybiAgYXJyYXkgb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFBhZ2VzKCkNCgl7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcikpDQoJCXsNCgkJCS8vIG1ha2UgcGF0aCBzYWZlDQoJCQkkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlciA9IEpGb2xkZXI6Om1ha2VTYWZlKCR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyKTsNCgkJCS8vIGNoZWNrIGlmIHRoZSBwYXRoIGV4aXN0DQoJCQlpZiAoIUpGb2xkZXI6OmV4aXN0cygkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcikpDQoJCQl7DQoJCQkJLy8gY3JlYXRlIHRoZSBwYWdlcyBmb2xkZXINCgkJCQlKRm9sZGVyOjpjcmVhdGUoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIpOw0KCQkJfQ0KCQkJLy8ganVzdCBsb2FkIHRoZWlyIHBhdGhzIHRvIG1lbW9yeQ0KCQkJcmV0dXJuICR0aGlzLT5nZXRQYWdlcygpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIHBhZ2VzIGxpbmtzDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5IG9uIHN1Y2Nlc3MNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRQYWdlcygkdHJ5ID0gdHJ1ZSkNCgl7DQoJCS8vIGFsd2F5cyByZW1vdmUgdGhlIG9wZW4gUERGIGlmIGZvdW5kDQoJCWlmIChpc3NldCgkdGhpcy0+b3BlbkZpbGUpICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5vcGVuRmlsZSkpDQoJCXsNCgkJCSR0aGlzLT5vcGVuRmlsZSA9ICcnOw0KCQl9DQoJCS8vIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGVtIGxvYWRlZA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPnBhZ2VzKSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gY2hlY2sgaWYgaXQgbm93IGV4aXN0DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcikgJiYgSkZvbGRlcjo6ZXhpc3RzKCR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyKSkNCgkJew0KCQkJLy8gd2UgbXVzdCBmaXJzdCBzdG9yZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQ0KCQkJJGpvb21sYSA9IGdldGN3ZCgpOw0KCQkJLy8gZ28gdG8gdGhhdCBoaWRkZW4gaW1hZ2UgZm9sZGVyDQoJCQljaGRpcigkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcik7DQoJCQkvLyBsb2FkIGFsbCB0aGUgcGFnZXMgaW4gdGhpcyBwYXRoDQoJCQkkdGhpcy0+cGFnZXMgPSBKRm9sZGVyOjpmaWxlcygnLicsICdfcGFnZScsIGZhbHNlLCB0cnVlLCBhcnJheSgpLCBhcnJheSgpKTsNCgkJCS8vIGdvIHRvIHRoYXQgam9vbWxhIGZvbGRlcg0KCQkJY2hkaXIoJGpvb21sYSk7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGFueQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5wYWdlcykpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBleHRyYWN0IHRoZSBwYWdlcyBmcm9tIHRoZSBQREYNCgkJCWlmICgkdHJ5KQ0KCQkJew0KCQkJCXJldHVybiAkdGhpcy0+Z2V0UGFnZXNGcm9tUERGKCk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIGdldCBhIGh0bWwgcGFnZSBmcm9tIFBERg0KCSAqDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SFRNTEZyb21QREYoJiRkYXRhLCAkbnIpDQoJew0KCQlpZiAoYHdoaWNoIHBkZnRvaHRtbGApDQoJCXsNCgkJCS8vIG9wZW4gdGhlIFBERg0KCQkJJHRoaXMtPm9wZW5QREYoKTsNCg0KCQkJJG5hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpyYW5kb20oMjApOw0KCQkJJHRlbXBPcGVuRmlsZSA9ICR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyIC4gJy8nIC4gJG5hbWUgLiAnLnBkZic7DQoNCgkJCS8vIHdlIGhhdmUgdG8gcGxhY2UgdGhlIG9wZW5lZCBmaWxlIG9uIHRoZSBkcml2ZQ0KCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjp3cml0ZUZpbGUoJHRlbXBPcGVuRmlsZSwgJHRoaXMtPm9wZW5GaWxlKTsNCg0KCQkJLy8gd2UgbXVzdCBmaXJzdCBzdG9yZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQ0KCQkJJGpvb21sYSA9IGdldGN3ZCgpOw0KCQkJLy8gZ28gdG8gdGhhdCBoaWRkZW4gaW1hZ2UgZm9sZGVyDQoJCQljaGRpcigkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcik7DQoJCQkvLyBub3cgd2UgcnVuIHRoZSBjb21tYW5kDQoJCQlzaGVsbF9leGVjKCJwZGZ0b2h0bWwgLWYgJG5yIC1sICRuciAtcCAtYyAtcyAtbm9mcmFtZXMgLWZvbnRmdWxsbmFtZSAtZm10IGpwZyAkbmFtZS5wZGYgJG5hbWUiKTsNCgkJCS8vIHJlbW92ZSBvcGVuIGZpbGUNCgkJCUpGaWxlOjpkZWxldGUoJHRlbXBPcGVuRmlsZSk7DQoNCgkJCS8vIGdldCB0aGUgZG9tIGRvY3VtZW50IGNsYXNzDQoJCQkkaHRtbCA9IG5ldyBET01Eb2N1bWVudCgpOw0KDQoJCQkvLyBnZXQgdGhlIGh0bWwNCgkJCSRodG1sLT5sb2FkSFRNTEZpbGUoIiRuYW1lLmh0bWwiKTsNCgkJCSRpbWFnZV9uYW1lID0gJG5hbWUgLiBzdHJfcGFkKChzdHJpbmcpJG5yLCAzLCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQkvLyBsb2FkIHRoZSBpbWFnZQ0KCQkJJGltYWdlX2RhdGEgPSBmaWxlX2dldF9jb250ZW50cygiJGltYWdlX25hbWUuanBnIik7DQoJCQkkaW1hZ2VfZGF0YSA9IExpYnJhcnlkYXRhYmFzZUhlbHBlcjo6ZW5jcnlwdCgkaW1hZ2VfZGF0YSk7DQoJCQkkaW1hZ2VfbGluayA9ICR0aGlzLT5nZXRMaW5rKCRpbWFnZV9uYW1lKTsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6d3JpdGVGaWxlKCRpbWFnZV9uYW1lLCB3b3Jkd3JhcCgkaW1hZ2VfZGF0YSwgMTI4LCAiXG4iLCB0cnVlKSk7DQoNCgkJCS8vIHJlbW92ZSBvcGVuIGZpbGUNCgkJCUpGaWxlOjpkZWxldGUoIiRuYW1lLmh0bWwiKTsNCgkJCUpGaWxlOjpkZWxldGUoIiRpbWFnZV9uYW1lLmpwZyIpOw0KDQoJCQkvLyBnbyB0byB0aGF0IGpvb21sYSBmb2xkZXINCgkJCWNoZGlyKCRqb29tbGEpOw0KDQoJCQkvLyBleHRydWRlIHRoZSBodG1sDQoJCQkkZGl2cyA9ICRodG1sLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2Jyk7DQoJCQkkc3R5bGVzID0gJGh0bWwtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHlsZScpOw0KCQkJLy8gbG9hZCB0aGUgYmFja2dyb3VuZCBpbWFnZSBzdHJpbmcNCgkJCSRpbWFnZXMgPSAkaHRtbC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpOw0KCQkJJGltYWdlX3NyYyA9IG51bGw7DQoJCQkvLyBtYWtlIHN1cmUgdGhlcmUgaXMgYW4gaW1hZ2UNCgkJCWlmICgkaW1hZ2VzLT5sZW5ndGggPiAwKQ0KCQkJew0KCQkJCSRpbWFnZV9zcmMgPSAkaW1hZ2VzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ3NyYycpOw0KCQkJfQ0KCQkJLy8gbG9hZCB0aGUgYm9keSBodG1sIHRvIHRoZSBwYWdlIGRhdGFiYXNlIGFycmF5DQoJCQlpZiAoJGRpdnMtPmxlbmd0aCA9PSAxKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaW1hZ2Vfc3JjKSkNCgkJCQl7DQoJCQkJCSRkYXRhWydjb250ZW50J10gPSBzdHJfcmVwbGFjZSgkaW1hZ2Vfc3JjLCAkaW1hZ2VfbGluaywgJGh0bWwtPnNhdmVIVE1MKCRkaXZzLT5pdGVtKDApKSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRkYXRhWydjb250ZW50J10gPSAkaHRtbC0+c2F2ZUhUTUwoJGRpdnMtPml0ZW0oMCkpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGxvYWQgdGhlIGJvZHkgY3NzIHRvIHRoZSBwYWdlIGRhdGFiYXNlIGFycmF5DQoJCQlpZiAoJHN0eWxlcy0+bGVuZ3RoID09IDIpDQoJCQl7DQoJCQkJJGRhdGFbJ2NzcyddID0gJHN0eWxlcy0+aXRlbSgxKS0+bm9kZVZhbHVlOw0KCQkJCSRkYXRhWydhZGRfY3NzJ10gPSAxOw0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIGdldCBhIGh0bWwgcGFnZSBmcm9tIFBERg0KCSAqDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U1ZHRnJvbVBERigmJGRhdGEsICRucikNCgl7DQoJCWlmIChgd2hpY2ggcGRmdG9jYWlyb2ApDQoJCXsNCgkJCS8vIG9wZW4gdGhlIFBERg0KCQkJJHRoaXMtPm9wZW5QREYoKTsNCg0KCQkJJG5hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpyYW5kb20oMjApOw0KCQkJJHRlbXBPcGVuRmlsZSA9ICR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyIC4gJy8nIC4gJG5hbWUgLiAnLnBkZic7DQoNCgkJCS8vIHdlIGhhdmUgdG8gcGxhY2UgdGhlIG9wZW5lZCBmaWxlIG9uIHRoZSBkcml2ZQ0KCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjp3cml0ZUZpbGUoJHRlbXBPcGVuRmlsZSwgJHRoaXMtPm9wZW5GaWxlKTsNCg0KCQkJLy8gd2UgbXVzdCBmaXJzdCBzdG9yZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQ0KCQkJJGpvb21sYSA9IGdldGN3ZCgpOw0KCQkJLy8gZ28gdG8gdGhhdCBoaWRkZW4gaW1hZ2UgZm9sZGVyDQoJCQljaGRpcigkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcik7DQoJCQkvLyBub3cgd2UgcnVuIHRoZSBjb21tYW5kDQoJCQlzaGVsbF9leGVjKCJwZGZ0b2NhaXJvIC1mICRuciAtbCAkbnIgLXN2ZyAkbmFtZS5wZGYgJG5hbWUiKTsNCgkJCS8vIHJlbW92ZSBvcGVuIGZpbGUNCgkJCUpGaWxlOjpkZWxldGUoJHRlbXBPcGVuRmlsZSk7DQoNCgkJCS8vIGxvYWQgdGhlIHN2ZyBkYXRhDQoJCQkkZGF0YVsnY29udGVudCddID0gZmlsZV9nZXRfY29udGVudHMoJG5hbWUpOw0KDQoJCQkvLyByZW1vdmUgb3BlbiBmaWxlDQoJCQlKRmlsZTo6ZGVsZXRlKCRuYW1lKTsNCgkJCS8vIGdvIHRvIHRoYXQgam9vbWxhIGZvbGRlcg0KCQkJY2hkaXIoJGpvb21sYSk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHBhZ2VzIGZyb20gUERGDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFBhZ2VzRnJvbVBERigpDQoJew0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0DQoJCWlmIChKRmlsZTo6ZXhpc3RzKCR0aGlzLT5oaWRlbkZpbGUpKQ0KCQl7DQoJCQkvLyBvcGVuIHRoZSBQREYNCgkJCWlmICghJHRoaXMtPm9wZW5QREYoKSkNCgkJCXsNCgkJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdXZSBjb3VsZCBub3Qgb3BlbiB0aGUgZGVjcnlwdCB0aGUgUERGIHRvIGV4dHJhY3QgdGhlIHBhZ2VzLCBwbGVhc2UgdHJ5IGFnYWluISBQbGVhc2UgaW5mb3JtIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgaWYgdGhpcyBjb250aW51ZXMgdG8gaGFwcGVuLicpLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQkvLyB1c2UgcGRmdG9jYWlybyAoQkVTVCBPUFRJT04pDQoJCQlpZiAoYHdoaWNoIHBkZnRvY2Fpcm9gKQ0KCQkJew0KCQkJCSRuYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6cmFuZG9tKDIwKTsNCgkJCQkkdGVtcE9wZW5GaWxlID0gJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgLiAnLycgLiAkbmFtZSAuICcucGRmJzsNCgkJCQkvLyB3ZSBoYXZlIHRvIHBsYWNlIHRoZSBvcGVuZWQgZmlsZSBvbiB0aGUgZHJpdmUNCgkJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6OndyaXRlRmlsZSgkdGVtcE9wZW5GaWxlLCAkdGhpcy0+b3BlbkZpbGUpOw0KCQkJCS8vIHdlIG11c3QgZmlyc3Qgc3RvcmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkNCgkJCQkkam9vbWxhID0gZ2V0Y3dkKCk7DQoJCQkJLy8gZ28gdG8gdGhhdCBoaWRkZW4gaW1hZ2UgZm9sZGVyDQoJCQkJY2hkaXIoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIpOw0KCQkJCS8vIG5vdyB3ZSBydW4gdGhlIGNvbW1hbmQNCgkJCQlzaGVsbF9leGVjKCJwZGZ0b2NhaXJvIC1qcGVnICRuYW1lLnBkZiBwYWdlIik7DQoJCQkJLy8gcmVtb3ZlIG9wZW4gZmlsZQ0KCQkJCUpGaWxlOjpkZWxldGUoJHRlbXBPcGVuRmlsZSk7DQoJCQkJLy8gbm93IGVuY3J5cHQgdGhlIHBhZ2VzDQoJCQkJJHBhZ2VzID0gSkZvbGRlcjo6ZmlsZXMoJy4nLCAnLmpwZycsIGZhbHNlLCB0cnVlLCBhcnJheSgpLCBhcnJheSgpKTsNCgkJCQkvLyBmaXJzdCBnZXQgY29udGVudCB0aGUgcmVtb3ZlIGZpbGUgdGhlIHNhdmUgZW5jcnlwdGVkIGNvbnRlbnQNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBhZ2VzKSkNCgkJCQl7DQoJCQkJCWFycmF5X21hcCggZnVuY3Rpb24oJGltYWdlKXsNCgkJCQkJCSRwYWdlX251bWJlciA9IHN0cl9yZXBsYWNlKGFycmF5KCcuLycsICdwYWdlLScsICcuanBnJyksICcnLCAkaW1hZ2UpOw0KCQkJCQkJJGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkaW1hZ2UpOw0KCQkJCQkJSkZpbGU6OmRlbGV0ZSgkaW1hZ2UpOw0KCQkJCQkJJGRhdGEgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoJGRhdGEpOw0KCQkJCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjp3cml0ZUZpbGUoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgLiAnLy4nIC4gJHBhZ2VfbnVtYmVyIC4gJ19wYWdlJywgd29yZHdyYXAoJGRhdGEsIDEyOCwgIlxuIiwgdHJ1ZSkpOw0KCQkJCQl9LCAkcGFnZXMpOw0KCQkJCX0NCgkJCQkvLyBnbyB0byB0aGF0IGpvb21sYSBmb2xkZXINCgkJCQljaGRpcigkam9vbWxhKTsNCgkJCQkNCgkJCX0NCgkJCWVsc2VpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnaW1hZ2ljaycpKQ0KCQkJew0KCQkJCS8vIHRyeSB0byBydW4gdGhlIGV4dHJhdGlvbg0KCQkJCWlmICghJHRoaXMtPmltYWdpY2tQREZ4dHJhY3QoKSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKFRleHQ6Ol8oJ1dlIGNvdWxkIG5vdCBleHRyYXh0IHRoZSBwYWdlcyBmcm9tIHRoZSBQREYsIHBsZWFzZSB0cnkgYWdhaW4hIFBsZWFzZSBpbmZvcm0geW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBpZiB0aGlzIGNvbnRpbnVlcyB0byBoYXBwZW4uJyksICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdQbGVhc2UgaW5mb3JtIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgdGhhdCB5b3UgbmVlZCB0aGUgUEhQIDxiPmltYWdpY2sgZXh0cmFjdGlvbjwvYj4gaW5zdGFsbGVkIG9uIHlvdXIgaG9zdGluZyBhY2NvdW50LiBUaGUgZXh0cmFjdGlvbiBvZiB0aGUgcGFnZXMgZnJvbSB5b3VyIFBERiBmaWxlcyBhcmUgZG9uZSB3aXRoIHRoaXMgbGlicmFyeSE8YnIgLz5odHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldHVwLnBocCcpLCAnZXJyb3InKTsNCgkJCX0NCgkJfQ0KCQkvLyB0cnkgdG8gbG9hZCB0aGUgcGFnZXMgbGlua3MgYWdhaW4NCgkJcmV0dXJuICR0aGlzLT5nZXRQYWdlcyhmYWxzZSk7DQoJfQ0KDQoJLyoqDQoJICogb3BlbiB0aGUgUERGDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIG9wZW5QREYoKQ0KCXsNCgkJJGRhdGEgPSBzdHJfcmVwbGFjZSgiXG4iLCAnJywgZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPmhpZGVuRmlsZSkpOw0KCQlpZiAoJGRhdGEgPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpKQ0KCQl7DQoJCQlpZiAobWV0aG9kX2V4aXN0cygnW1tbQ29tcG9uZW50XV1dSGVscGVyJywgJ2RlY3J5cHQnKQ0KCQkJCSYmICgkdGhpcy0+b3BlbkZpbGUgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmRlY3J5cHQoJGRhdGEpKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQkJDQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEV4dHJhY3QgcGFnZXMgZnJvbSBQREYNCgkgKg0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW1hZ2lja1BERnh0cmFjdCgpDQoJew0KCQlpZiAoaXNzZXQoJHRoaXMtPm9wZW5GaWxlKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+b3BlbkZpbGUpKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSB3aG9sZSBQREYNCgkJCSRwZGYgPSBuZXcgaW1hZ2ljaygpOw0KCQkJLy8gc2V0IGltYWdlIHJlc29sdXRpb24gKFRPRE8pDQoJCQkkcGRmLT5zZXRSZXNvbHV0aW9uKDE0NCwgMTQ0KTsNCgkJCS8vIGxvYWQgdGhlIFBERg0KCQkJJHBkZi0+cmVhZEltYWdlQmxvYigkdGhpcy0+b3BlbkZpbGUpOw0KCQkJLy8gJHBkZi0+ZGVzcGVja2xlaW1hZ2UoKTsNCgkJCS8vIGdldCB0aGUgbnVtYmVyIHBhZ2VzDQoJCQkkbnVtYmVyID0gJHBkZi0+Z2V0TnVtYmVySW1hZ2VzKCk7DQoJCQkvLyBDb252ZXJ0IFBERiBwYWdlcyB0byBpbWFnZXMNCgkJCWZvcigkaSA9IDA7ICRpIDwgJG51bWJlcjsgJGkrKykNCgkJCXsNCgkJCQkvLyBzZXQgbWVtb3J5IHN0b3JhZ2UNCgkJCQkkdG1wX2hhbmRsZSA9IGZvcGVuKCJwaHA6Ly90ZW1wIiwgJ3IrJyk7DQoJCQkJLy8gU2V0IGl0ZXJhdG9yIHBvc3Rpb24NCgkJCQkkcGRmLT5zZXRJdGVyYXRvckluZGV4KCRpKTsNCgkJCQkvLyBTZXQgaW1hZ2UgZm9ybWF0DQoJCQkJJHBkZi0+c2V0SW1hZ2VGb3JtYXQoJ2pwZWcnKTsNCgkJCQkkcGRmLT5zZXRJbWFnZUNvbXByZXNzaW9uKGltYWdpY2s6OkNPTVBSRVNTSU9OX0xPU1NMRVNTSlBFRyk7DQoJCQkJJHBkZi0+c2V0SW1hZ2VDb21wcmVzc2lvblF1YWxpdHkoMTAwKTsNCgkJCQkkcGRmLT5zZXRJbWFnZUFscGhhQ2hhbm5lbChJbWFnaWNrOjpBTFBIQUNIQU5ORUxfUkVNT1ZFKTsNCgkJCQkkcGRmLT50cmFuc3BhcmVudFBhaW50SW1hZ2UoJyNmZmZmZmYnLCAwLCAwLCBmYWxzZSk7DQoJCQkJLy8gV3JpdGUgUGFnZXMgdG8gdGhlIGhpZGRlbiBwYWdlIGZvbGRlcg0KCQkJCSRwZGYtPndyaXRlSW1hZ2VGaWxlKCR0bXBfaGFuZGxlKTsNCgkJCQlyZXdpbmQoJHRtcF9oYW5kbGUpOw0KCQkJCS8vIHNldCB0aGUgcGFnZSBudW1iZXINCgkJCQkkcGFnZV9udW1lciA9ICRpICsgMTsNCgkJCQkvLyBub3cgd3JpdGUgdGhlIGZpbGUgdG8gZHJpdmUgZW5jcnlwdGVkDQoJCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjp3cml0ZUZpbGUoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgLiAnLy4nIC4gJHBhZ2VfbnVtZXIgLiAnX3BhZ2UnLCB3b3Jkd3JhcChbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoc3RyZWFtX2dldF9jb250ZW50cygkdG1wX2hhbmRsZSkpLCAxMjgsICJcbiIsIHRydWUpKTsNCgkJCQkvLyBjbGVhbiB1cCB5b3VyIHRlbXBvcmFyeSBzdG9yYWdlIGhhbmRsZQ0KCQkJCWZjbG9zZSgkdG1wX2hhbmRsZSk7DQoJCQl9DQoJCQkkdGhpcy0+b3BlbkZpbGUgPSAnJzsNCgkJCXJldHVybiAkcGRmLT5jbGVhcigpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBidWlsZCB0aGUgc2VsZWN0aW9uIHZpZXcgYXJlYQ0KCSAqDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcgb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1aWxkUmVzb3VyY2VBcmVhKCkNCgl7DQoJCS8vIHNldCB0aGUgaGVhZGluZw0KCQkkYXJlYSA9ICc8aDQ+JyAuIFRleHQ6Ol8oJ1Jlc291cmNlJykgLiAnPC9oND4nOw0KDQoJCSRhcmVhIC49ICc8ZGl2IGNsYXNzPSJmb3JtLWlubGluZSBmb3JtLWlubGluZS1oZWFkZXIiPic7DQoNCgkJLy8gbmFtZSBhdHRyaWJ1dGVzDQoJCSRhdHRyaWJ1dGVzID0gYXJyYXkoDQoJCQkndHlwZScgPT4gJ3RleHQnLA0KCQkJJ25hbWUnID0+ICdyZXNvdXJjZV9uYW1lJywNCgkJCSdsYWJlbCcgPT4gSnVzdFRFWFQ6Ol8oJ05hbWUnKSwNCgkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQknZGVzY3JpcHRpb24nID0+IEp1c3RURVhUOjpfKCdBZGQgdGhlIG5hbWUgaGVyZSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGNhbGwgdGhpcyByZXNvdXJjZS4nKSk7DQoJCSRmaWVsZCA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0RmllbGRPYmplY3QoJGF0dHJpYnV0ZXMsICR0aGlzLT5fZmlsZU5hbWUpOw0KDQoJCSRhcmVhIC49ICc8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4nOw0KCQkkYXJlYSAuPSAnPGRpdiBjbGFzcz0iY29udHJvbC1sYWJlbCI+JyAuICRmaWVsZC0+bGFiZWwgLiAnPC9kaXY+JzsNCgkJJGFyZWEgLj0gJzxkaXYgY2xhc3M9ImNvbnRyb2xzIj4nIC4gJGZpZWxkLT5pbnB1dCAuICc8L2Rpdj4nOw0KCQkkYXJlYSAuPSAnPC9kaXY+JzsNCg0KCQkkYXJlYSAuPSAnPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+JzsNCgkJJGFyZWEgLj0gJzxkaXYgY2xhc3M9ImNvbnRyb2xzIj48YnV0dG9uIGNsYXNzPSJidG4gYnV0dG9uLXVuZG8tMiIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLnJlbG9hZChmYWxzZSk7Ij48c3BhbiBjbGFzcz0iaWNvbi11bmRvLTIiPjwvc3Bhbj4gJyAuIFRleHQ6Ol8oJ1Jlc2V0JykgLiAnPC9idXR0b24+PC9kaXY+JzsNCgkJJGFyZWEgLj0gJzwvZGl2Pic7DQoNCgkJJGFyZWEgLj0gJzxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPic7DQoJCSRhcmVhIC49ICc8ZGl2IGNsYXNzPSJjb250cm9scyI+PGJ1dHRvbiBjbGFzcz0iYnRuIGJ1dHRvbi1hcnJvdy11cC00IiAgb25jbGljaz0iZXh0cnVkZVNlbGVjdGVkKCk7Ij48c3BhbiBjbGFzcz0iaWNvbi1hcnJvdy11cC00Ij48L3NwYW4+ICcgLiBUZXh0OjpfKCdFeHRydWRlJykgLiAnPC9idXR0b24+PC9kaXY+JzsNCgkJJGFyZWEgLj0gJzwvZGl2Pic7DQoNCgkJJGFyZWEgLj0gJzwvZGl2Pic7DQoNCgkJcmV0dXJuICRhcmVhOw0KCX0NCg0KCS8qKg0KCSAqIGJ1aWxkIHRoZSBzZWxlY3Rpb24gdmlldyBhcmVhDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZyBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRTZWxlY3Rpb25BcmVhKCkNCgl7DQoJCSRhcmVhID0gJyc7DQoJCSRsaW5rcyA9ICR0aGlzLT5nZXRMaW5rcygpOw0KCQkkbmFtZXMgPSAkdGhpcy0+Z2V0TmFtZXMoKTsNCgkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIGxpbmtzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGlua3MpKQ0KCQl7DQoJCQkkYXJlYSA9ICc8c3R5bGU+LnVrLWxpZ2h0Ym94IHt6LWluZGV4OjIwMDA7fTwvc3R5bGU+JzsNCgkJCS8vIG9ubHkgbG9hZCB0aGVzIGlmIHdlIGhhdmUgbW9yZSB0aGVuNSBwYWdlcw0KCQkJaWYgKGNvdW50KCRsaW5rcykgPiA1KQ0KCQkJew0KCQkJCSRhcmVhIC49IFBIUF9FT0wgLiAnPGRpdiAgaWQ9InNlbGVjdF9idXR0b25fYWxsXzEyMyI+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxidXR0b24gY2xhc3M9InNlbGVjdF9idXR0b25fYWxsIHVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay13aWR0aC0xLTEgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSIgZGF0YS12YWx1ZT0iMSIgb25jbGljaz0idG9nZ2xlU2VsZWN0aW9uKFwnYWxsXCcpIiB1ay10b2dnbGU9InRhcmdldDogLnNlbGVjdGlvbl9hbGw7IGFuaW1hdGlvbjogdWstYW5pbWF0aW9uLWZhZGU7Ij5VbnNlbGVjdCBBbGw8L2J1dHRvbj4nOw0KCQkJCSRhcmVhIC49IFBIUF9FT0wgLiAnPC9kaXY+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgIGlkPSJzZWxlY3RfYnV0dG9uX2FsbF8xMjQiIGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIHNlbGVjdGlvbl9hbGwiPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImV4dHJ1ZGVfaW1hZ2VfYWxsIHVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay1idXR0b24tc21hbGwgdWstd2lkdGgtMS0yIiAgb25jbGljaz0ic2V0RXh0cnVkZVN0YXR1cyhcJ2ltYWdlXCcsIFwnaHRtbFwnLCBcJ3N2Z1wnLCBcJ2FsbFwnKSIgZGF0YS12YWx1ZT0iMSIgdWstaWNvbj0iaWNvbjogaW1hZ2UiPjwvYnV0dG9uPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImV4dHJ1ZGVfaHRtbF9hbGwgdWstYnV0dG9uIHVrLWJ1dHRvbi1kZWZhdWx0IHVrLWJ1dHRvbi1zbWFsbCB1ay13aWR0aC0xLTIiICBvbmNsaWNrPSJzZXRFeHRydWRlU3RhdHVzKFwnaHRtbFwnLCBcJ2ltYWdlXCcsIFwnc3ZnXCcsIFwnYWxsXCcpIiBkYXRhLXZhbHVlPSIwIj5IVE1MPC9idXR0b24+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZXh0cnVkZV9zdmdfYWxsIHVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay1idXR0b24tc21hbGwgdWstd2lkdGgtMS0yIiAgb25jbGljaz0ic2V0RXh0cnVkZVN0YXR1cyhcJ3N2Z1wnLCBcJ2ltYWdlXCcsIFwnaHRtbFwnLCBcJ2FsbFwnKSIgZGF0YS12YWx1ZT0iMCI+U1ZHPC9idXR0b24+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzwvZGl2Pic7DQoJCQl9DQoJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLWdyaWQtc21hbGwgdWstY2hpbGQtd2lkdGgtMS0yQHMgdWstY2hpbGQtd2lkdGgtMS0zQG0gdWstY2hpbGQtd2lkdGgtMS01QGwiIHVrLWdyaWQgdWstbGlnaHRib3g9ImFuaW1hdGlvbjogc2xpZGUiPic7DQoJCQlmb3JlYWNoICgkbmFtZXMgYXMgJGxpbmsgPT4gJG5hbWUpDQoJCQl7DQoJCQkJLy9tYWtlIHN1cmUgdGhlIG5hbWUgaXMgc2VjdXJlDQoJCQkJJF9uYW1lID0gTGlicmFyeWRhdGFiYXNlSGVscGVyOjpzYWZlU3RyaW5nKCRuYW1lKTsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLXBhZGRpbmctc21hbGwiPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIGNsYXNzPSJzZWxlY3RfYnV0dG9uX2FsbCBzZWxlY3RfYnV0dG9uXycgLiAkX25hbWUgLiAnIHVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay13aWR0aC0xLTEgdWstYnV0dG9uLXNtYWxsIiBkYXRhLXZhbHVlPSIxIiBvbmNsaWNrPSJ0b2dnbGVTZWxlY3Rpb24oXCcnIC4gJF9uYW1lIC4gJ1wnKSIgdHlwZT0iYnV0dG9uIiB1ay10b2dnbGU9InRhcmdldDogLnNlbGVjdGlvbl8nIC4gJF9uYW1lIC4gJzsgYW5pbWF0aW9uOiB1ay1hbmltYXRpb24tZmFkZTsiPlVuc2VsZWN0PC9idXR0b24+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLWJveC1zaGFkb3ctbWVkaXVtIj4nOw0KCQkJCSRhcmVhIC49IFBIUF9FT0wgLiAnPGEgY2xhc3M9InVrLWlubGluZSIgaHJlZj0iJyAuICRsaW5rc1skbGlua10gLiAnIiBkYXRhLWFsdD0iSW1hZ2UiPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8aW1nIHNyYz0iJyAuICRsaW5rc1skbGlua10gLiAnIiBhbHQ9IicgLiAkbmFtZSAuICciPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8ZGl2IGNsYXNzPSJ1ay1vdmVybGF5IHVrLWxpZ2h0IHVrLWJhY2tncm91bmQtcHJpbWFyeSB1ay1wb3NpdGlvbi1jZW50ZXIgc2VsZWN0aW9uX2FsbCBzZWxlY3Rpb25fJyAuICRfbmFtZSAuICciPjxzcGFuIHVrLWljb249ImNoZWNrIj48L3NwYW4+PC9kaXY+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLW92ZXJsYXkgdWstb3ZlcmxheS1wcmltYXJ5IHVrLXBvc2l0aW9uLWNlbnRlciBzZWxlY3Rpb25fYWxsIHNlbGVjdGlvbl8nIC4gJF9uYW1lIC4gJyIgaGlkZGVuPjxzcGFuIHVrLWljb249ImJhbiI+PC9zcGFuPjwvZGl2Pic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8L2E+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLXRleHQtbGlnaHRlciB1ay10ZXh0LXNtYWxsIHVrLXRleHQtY2VudGVyIj4nIC4gJG5hbWUgLiAnPC9kaXY+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLWJ1dHRvbi1ncm91cCB1ay13aWR0aC0xLTEgc2VsZWN0aW9uX2FsbCBzZWxlY3Rpb25fJyAuICRfbmFtZSAuICciPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImV4dHJ1ZGVfaW1hZ2VfJyAuICRfbmFtZSAuICcgZXh0cnVkZV9pbWFnZV9hbGwgdWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLWJ1dHRvbi1zbWFsbCB1ay13aWR0aC0xLTMiICBvbmNsaWNrPSJzZXRFeHRydWRlU3RhdHVzKFwnaW1hZ2VcJywgXCdodG1sXCcsIFwnc3ZnXCcsIFwnJyAuICRfbmFtZSAuICdcJykiIGRhdGEtdmFsdWU9IjEiIHVrLWljb249Imljb246IGltYWdlIj48L2J1dHRvbj4nOw0KCQkJCSRhcmVhIC49IFBIUF9FT0wgLiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJleHRydWRlX2h0bWxfJyAuICRfbmFtZSAuICcgZXh0cnVkZV9odG1sX2FsbCB1ay1idXR0b24gdWstYnV0dG9uLWRlZmF1bHQgdWstYnV0dG9uLXNtYWxsIHVrLXdpZHRoLTEtMyIgIG9uY2xpY2s9InNldEV4dHJ1ZGVTdGF0dXMoXCdodG1sXCcsIFwnaW1hZ2VcJywgXCdzdmdcJywgXCcnIC4gJF9uYW1lIC4gJ1wnKSIgZGF0YS12YWx1ZT0iMCI+SFRNTDwvYnV0dG9uPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImV4dHJ1ZGVfc3ZnXycgLiAkX25hbWUgLiAnIGV4dHJ1ZGVfc3ZnX2FsbCB1ay1idXR0b24gdWstYnV0dG9uLWRlZmF1bHQgdWstYnV0dG9uLXNtYWxsIHVrLXdpZHRoLTEtMyIgIG9uY2xpY2s9InNldEV4dHJ1ZGVTdGF0dXMoXCdzdmdcJywgXCdpbWFnZVwnLCBcJ2h0bWxcJywgXCcnIC4gJF9uYW1lIC4gJ1wnKSIgZGF0YS12YWx1ZT0iMCI+U1ZHPC9idXR0b24+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCQl9DQoJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzwvZGl2Pic7DQoJCX0NCgkJcmV0dXJuICRhcmVhOw0KCX0NCg0KCS8qKg0KCSAqIGJ1aWxkIHRoZSBhamF4IGJlaGF2aW9yDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZyBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRKYXZhU2NyaXB0KCkNCgl7DQoJCSRzY3JpcHQgPSAnJzsNCgkJLy8gZ2V0IHRoZSBwYWdlIG5hbWVzDQoJCSRuYW1lcyA9ICR0aGlzLT5nZXROYW1lcygpOw0KCQkkdXNlciA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZW5jcnlwdChGYWN0b3J5OjpnZXRVc2VyKCktPmdldCgnaWQnKSk7DQoJCSRndWlkID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjplbmNyeXB0KCR0aGlzLT5ndWlkKTsNCgkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIGxpbmtzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbmFtZXMpKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgSlNPTiBvYmplY3QgdGhhdCB3aWxsIGJlIHNlbmQNCgkJCSRqc29uID0gbmV3IFxzdGRDbGFzcygpOyANCgkJCWZvcmVhY2ggKCRuYW1lcyBhcyAkbmFtZSkNCgkJCXsNCgkJCQkkX25hbWUgPSBMaWJyYXJ5ZGF0YWJhc2VIZWxwZXI6OnNhZmVTdHJpbmcoJG5hbWUpOw0KCQkJCSRqc29uLT4kX25hbWUgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJGpzb24tPiRfbmFtZS0+bmFtZSA9ICRuYW1lOw0KCQkJCSRqc29uLT4kX25hbWUtPmV4dHJ1ZGUgPSAxOw0KCQkJCSRqc29uLT4kX25hbWUtPmltYWdlID0gMTsNCgkJCQkkanNvbi0+JF9uYW1lLT5odG1sID0gMDsNCgkJCQkkanNvbi0+JF9uYW1lLT5zdmcgPSAwOw0KCQkJfQ0KCQkJJHNjcmlwdCAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPic7DQoJCQkkc2NyaXB0IC49ICd2YXIgRGF0YVJlc291cmNlTmFtZSA9ICInIC4gJHRoaXMtPmZpbGVMb2NrZWQgLiAnIjsnOw0KCQkJJHNjcmlwdCAuPSAndmFyIERhdGFSZXNvdXJjZVBhZ2VzPSAnIC4ganNvbl9lbmNvZGUoJGpzb24pIC4gJzsnOw0KDQoJCQkkc2NyaXB0IC49ICdmdW5jdGlvbiBpc0VtcHR5KG9iaikgeyc7DQoJCQkkc2NyaXB0IC49ICdmb3IodmFyIGtleSBpbiBvYmopIHsnOw0KCQkJJHNjcmlwdCAuPSAnaWYob2JqLmhhc093blByb3BlcnR5KGtleSkpJzsNCgkJCSRzY3JpcHQgLj0gJ3JldHVybiBmYWxzZTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICdyZXR1cm4gdHJ1ZTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkvLyBtYWtlIGFuIGFqYXggcG9zdC9nZXQgdG8gc3RhcnQgdGhlIGV4dHJ1c2lvbg0KCQkJJHNjcmlwdCAuPSAnZnVuY3Rpb24gZXh0cnVkZVNlbGVjdGVkKCl7JzsNCgkJCSRzY3JpcHQgLj0gJy8qIHdlIHN0YXJ0dXAgdGhlIHNwaW5uZXIgKi8nOw0KCQkJJHNjcmlwdCAuPSAnalF1ZXJ5KCIjbG9hZGluZyIpLnNob3coKTsnOw0KCQkJJHNjcmlwdCAuPSAndmFyIHR5cGUgPSBKU09OLnN0cmluZ2lmeSh7JzsNCgkJCSRzY3JpcHQgLj0gJ2ZpbGVuYW1lOiBEYXRhUmVzb3VyY2VOYW1lLCc7DQoJCQkkc2NyaXB0IC49ICduYW1lOiBqUXVlcnkoIiNyZXNvdXJjZV9uYW1lIikudmFsKCksJzsNCgkJCSRzY3JpcHQgLj0gJ3VzZXI6ICInIC4gJHVzZXIgLiAnIiwnOw0KCQkJJHNjcmlwdCAuPSAnZ3VpZDogIicgLiAkZ3VpZCAuICciLCc7DQoJCQkkc2NyaXB0IC49ICd0eXBlOiAxJzsNCgkJCSRzY3JpcHQgLj0gJ30pOyc7DQoJCQkkc2NyaXB0IC49ICcvKiBvbmx5IGFjdCBpZiBleHRydXNpb24gaXMgYWN0aXZlLiAqLyc7DQoJCQkkc2NyaXB0IC49ICdwcm9jZXNzaW5nUmVxdWVzdChPYmplY3Qua2V5cyhEYXRhUmVzb3VyY2VQYWdlcykuZmlsdGVyKGZ1bmN0aW9uKGtleSl7JzsNCgkJCSRzY3JpcHQgLj0gJ3JldHVybiBEYXRhUmVzb3VyY2VQYWdlc1trZXldLmV4dHJ1ZGU7JzsNCgkJCSRzY3JpcHQgLj0gJ30pLCB0eXBlKTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICdmdW5jdGlvbiB0b2dnbGVTZWxlY3Rpb24ocGFnZSl7JzsNCgkJCS8vIG9ubHkgYWRkIHRoZXNlIGlmIHdlIGhhdmUgbW9yZSB0aGVuIGZpdmUNCgkJCWlmIChjb3VudCgkbmFtZXMpID4gNSkNCgkJCXsNCgkJCQkkc2NyaXB0IC49ICdpZiAocGFnZSAhPT0gImFsbCIpeyc7DQoJCQkJJHNjcmlwdCAuPSAnalF1ZXJ5KCIjc2VsZWN0X2J1dHRvbl9hbGxfMTIzIikucmVtb3ZlKCk7JzsNCgkJCQkkc2NyaXB0IC49ICd9JzsNCgkJCX0NCgkJCSRzY3JpcHQgLj0gJ3ZhciBidXR0b24gPSBqUXVlcnkoIi5zZWxlY3RfYnV0dG9uXyIrcGFnZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhciB2YWx1ZSA9IGJ1dHRvbi5kYXRhKCJ2YWx1ZSIpOyc7DQoJCQkkc2NyaXB0IC49ICdpZiAodmFsdWUpeyc7DQoJCQkkc2NyaXB0IC49ICdidXR0b24udGV4dCgiU2VsZWN0Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhbHVlID0gMDsnOw0KCQkJJHNjcmlwdCAuPSAnfSBlbHNlIHsnOw0KCQkJJHNjcmlwdCAuPSAnYnV0dG9uLnRleHQoIlVuc2VsZWN0Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhbHVlID0gMTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkvLyBvbmx5IGFkZCB0aGVzZSBpZiB3ZSBoYXZlIG1vcmUgdGhlbiBmaXZlDQoJCQlpZiAoY291bnQoJG5hbWVzKSA+IDUpDQoJCQl7DQoJCQkJJHNjcmlwdCAuPSAnaWYgKHBhZ2UgPT09ICJhbGwiKXsnOw0KCQkJCSRzY3JpcHQgLj0gJ2pRdWVyeS5lYWNoKERhdGFSZXNvdXJjZVBhZ2VzLCBmdW5jdGlvbihwLCBrZXkpIHsnOw0KCQkJCSRzY3JpcHQgLj0gJ2tleS5leHRydWRlID0gdmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICd9KTsnOw0KCQkJCSRzY3JpcHQgLj0gJ30gZWxzZSB7JzsNCgkJCQkkc2NyaXB0IC49ICdEYXRhUmVzb3VyY2VQYWdlc1twYWdlXS5leHRydWRlID0gdmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICd9JzsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkc2NyaXB0IC49ICdEYXRhUmVzb3VyY2VQYWdlc1twYWdlXS5leHRydWRlID0gdmFsdWU7JzsNCgkJCX0NCgkJCSRzY3JpcHQgLj0gJ2J1dHRvbi5kYXRhKCJ2YWx1ZSIsIHZhbHVlKTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICdmdW5jdGlvbiBzZXRFeHRydWRlU3RhdHVzKGFjdGlvbiwgb3RoZXJhY3Rpb24sIGFub3RoZXJhY3Rpb24sIHBhZ2Upeyc7DQoJCQkvLyBvbmx5IGFkZCB0aGVzZSBpZiB3ZSBoYXZlIG1vcmUgdGhlbiBmaXZlDQoJCQlpZiAoY291bnQoJG5hbWVzKSA+IDUpDQoJCQl7DQoJCQkJJHNjcmlwdCAuPSAnaWYgKHBhZ2UgIT09ICJhbGwiKXsnOw0KCQkJCSRzY3JpcHQgLj0gJ2pRdWVyeSgiI3NlbGVjdF9idXR0b25fYWxsXzEyNCIpLnJlbW92ZSgpOyc7DQoJCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQl9DQoJCQkkc2NyaXB0IC49ICd2YXIgYnV0dG9uID0galF1ZXJ5KCIuZXh0cnVkZV8iK2FjdGlvbisiXyIrcGFnZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhciBvdGhlcmJ1dHRvbiA9IGpRdWVyeSgiLmV4dHJ1ZGVfIitvdGhlcmFjdGlvbisiXyIrcGFnZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhciBhbm90aGVyYnV0dG9uID0galF1ZXJ5KCIuZXh0cnVkZV8iK2Fub3RoZXJhY3Rpb24rIl8iK3BhZ2UpOyc7DQoJCQkkc2NyaXB0IC49ICd2YXIgdmFsdWUgPSBidXR0b24uZGF0YSgidmFsdWUiKTsnOw0KCQkJJHNjcmlwdCAuPSAnaWYgKHZhbHVlKXsnOw0KCQkJJHNjcmlwdCAuPSAndmFsdWUgPSAwOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcnZhbHVlID0gMTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcnZhbHVlID0gMDsnOw0KCQkJJHNjcmlwdCAuPSAnfSBlbHNlIHsnOw0KCQkJJHNjcmlwdCAuPSAndmFsdWUgPSAxOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcnZhbHVlID0gMDsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcnZhbHVlID0gMDsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkvLyBvbmx5IGFkZCB0aGVzZSBpZiB3ZSBoYXZlIG1vcmUgdGhlbiBmaXZlDQoJCQlpZiAoY291bnQoJG5hbWVzKSA+IDUpDQoJCQl7DQoJCQkJJHNjcmlwdCAuPSAnaWYgKHBhZ2UgPT09ICJhbGwiKXsnOw0KCQkJCSRzY3JpcHQgLj0gJ2pRdWVyeS5lYWNoKERhdGFSZXNvdXJjZVBhZ2VzLCBmdW5jdGlvbihwLCBrZXkpIHsnOw0KCQkJCSRzY3JpcHQgLj0gJ2tleVthY3Rpb25dID0gdmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICdrZXlbb3RoZXJhY3Rpb25dID0gb3RoZXJ2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ2tleVthbm90aGVyYWN0aW9uXSA9IGFub3RoZXJ2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ30pOyc7DQoJCQkJJHNjcmlwdCAuPSAnfSBlbHNlIHsnOw0KCQkJCSRzY3JpcHQgLj0gJ0RhdGFSZXNvdXJjZVBhZ2VzW3BhZ2VdW2FjdGlvbl0gPSB2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ0RhdGFSZXNvdXJjZVBhZ2VzW3BhZ2VdW290aGVyYWN0aW9uXSA9IG90aGVydmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICdEYXRhUmVzb3VyY2VQYWdlc1twYWdlXVthbm90aGVyYWN0aW9uXSA9IGFub3RoZXJ2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ30nOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRzY3JpcHQgLj0gJ0RhdGFSZXNvdXJjZVBhZ2VzW3BhZ2VdW2FjdGlvbl0gPSB2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ0RhdGFSZXNvdXJjZVBhZ2VzW3BhZ2VdW290aGVyYWN0aW9uXSA9IG90aGVydmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICdEYXRhUmVzb3VyY2VQYWdlc1twYWdlXVthbm90aGVyYWN0aW9uXSA9IGFub3RoZXJ2YWx1ZTsnOw0KCQkJfQ0KCQkJJHNjcmlwdCAuPSAnYnV0dG9uLmRhdGEoInZhbHVlIiwgdmFsdWUpOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcmJ1dHRvbi5kYXRhKCJ2YWx1ZSIsIG90aGVydmFsdWUpOyc7DQoJCQkkc2NyaXB0IC49ICdhbm90aGVyYnV0dG9uLmRhdGEoInZhbHVlIiwgYW5vdGhlcnZhbHVlKTsnOw0KCQkJJHNjcmlwdCAuPSAnaWYgKHZhbHVlKXsnOw0KCQkJJHNjcmlwdCAuPSAnYnV0dG9uLmFkZENsYXNzKCJ1ay1idXR0b24tcHJpbWFyeSIpOyc7DQoJCQkkc2NyaXB0IC49ICdidXR0b24ucmVtb3ZlQ2xhc3MoInVrLWJ1dHRvbi1kZWZhdWx0Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ290aGVyYnV0dG9uLmFkZENsYXNzKCJ1ay1idXR0b24tZGVmYXVsdCIpOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcmJ1dHRvbi5yZW1vdmVDbGFzcygidWstYnV0dG9uLXByaW1hcnkiKTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcmJ1dHRvbi5hZGRDbGFzcygidWstYnV0dG9uLWRlZmF1bHQiKTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcmJ1dHRvbi5yZW1vdmVDbGFzcygidWstYnV0dG9uLXByaW1hcnkiKTsnOw0KCQkJJHNjcmlwdCAuPSAnfSBlbHNlIHsnOw0KCQkJJHNjcmlwdCAuPSAnYnV0dG9uLmFkZENsYXNzKCJ1ay1idXR0b24tZGVmYXVsdCIpOyc7DQoJCQkkc2NyaXB0IC49ICdidXR0b24ucmVtb3ZlQ2xhc3MoInVrLWJ1dHRvbi1wcmltYXJ5Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ290aGVyYnV0dG9uLmFkZENsYXNzKCJ1ay1idXR0b24tcHJpbWFyeSIpOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcmJ1dHRvbi5yZW1vdmVDbGFzcygidWstYnV0dG9uLWRlZmF1bHQiKTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcmJ1dHRvbi5hZGRDbGFzcygidWstYnV0dG9uLWRlZmF1bHQiKTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcmJ1dHRvbi5yZW1vdmVDbGFzcygidWstYnV0dG9uLXByaW1hcnkiKTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICd9JzsNCgkJCSRzY3JpcHQgLj0gJ2Z1bmN0aW9uIHByb2Nlc3NpbmdSZXF1ZXN0KHBhZ2VzLCB0eXBlKSB7JzsNCgkJCSRzY3JpcHQgLj0gJ2lmICghaXNFbXB0eShwYWdlcykpeyc7DQoJCQkkc2NyaXB0IC49ICd2YXIgcnVuID0gMDsgdmFyIHNpemUgPSBPYmplY3Qua2V5cyhwYWdlcykubGVuZ3RoOyBzaXplLS07JzsNCgkJCSRzY3JpcHQgLj0gJ2pRdWVyeSgiI1tbW2NvbXBvbmVudF1dXV9sb2FkZXIiKS5odG1sKCI8YnIgLz48Y2VudGVyPjxkaXYgY2xhc3M9XCJ1ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1yaWdodCB1ay1hbmltYXRpb24tc2NhbGUtdXAgdWstYm94LXNoYWRvdy1ib3R0b21cIj48c21hbGw+JzsNCgkJCSRzY3JpcHQgLj0gVGV4dDo6XygnV2UgYXJlIG5vdyBleHRydWRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgUERGIGRvY3VtZW50IGFuZCBtb3ZpbmcgaXQgaW50byB0aGUgW1tbY3VycmljdWx1bWJ1aWxkZXJfbGlua19uYW1lXV1dIHJlc291cmNlcyBhcmVhLicpOw0KCQkJJHNjcmlwdCAuPSAnPC9zbWFsbD48aDI+JzsNCgkJCSRzY3JpcHQgLj0gVGV4dDo6XygnVGhpcyBtYXkgdGFrZSBhIHNvbWUgdGltZSE8YnIgLz48YnIgLz5QbGVhc2Ugd2FpdCBhbmQgZG8gbm90IHJlZGlyZWN0IGF3YXkgZnJvbSB0aGlzIHBhZ2UhJyk7DQoJCQkkc2NyaXB0IC49ICc8L2gyPjwvZGl2PjwvY2VudGVyPjxkaXY+PHByb2dyZXNzIGlkPVwiW1tbY29tcG9uZW50XV1dX3Jlc3VsdFwiIGNsYXNzPVwidWstcHJvZ3Jlc3NcIiB2YWx1ZT1cIjBcIiBtYXg9XCIiK3NpemUrIlwiPjwvcHJvZ3Jlc3M+PC9kaXY+Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhciBwcm9jZXNzaW5nUmVxdWVzdENoZWNrZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpeyc7DQoJCQkkc2NyaXB0IC49ICd2YXIga2V5ID0gcGFnZXNbcnVuXTsnOw0KCQkJJHNjcmlwdCAuPSAncHJvY2Vzc2luZ1JlcXVlc3Rfc2VydmVyKEpTT04uc3RyaW5naWZ5KERhdGFSZXNvdXJjZVBhZ2VzW2tleV0pLCB0eXBlKS5kb25lKGZ1bmN0aW9uKHJlc3VsdCkgeyc7DQoJCQkkc2NyaXB0IC49ICdpZiAocmVzdWx0KSB7IGpRdWVyeSgiI1tbW2NvbXBvbmVudF1dXV9yZXN1bHQiKS52YWwocnVuKTsgc2hvd1RoZUZpbmlzaGVkTm90aWNlKHJ1biwgc2l6ZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ30gZWxzZSB7JzsNCgkJCSRzY3JpcHQgLj0gJ2pRdWVyeSgiI1tbW2NvbXBvbmVudF1dXV9sb2FkZXIiKS5hZnRlcigiPGRpdiBjbGFzcz1cInVrLXRleHQtZGFuZ2VyXCI+T29wcyB3ZSBmYWlsZWQgdG8gZXh0cnVkZTogPGI+IisgRGF0YVJlc291cmNlUGFnZXNba2V5XS5uYW1lICsgIjwvYj4geW91IHdpbGwgaGF2ZSB0byB0cnkgZXh0cnVkaW5nIHRoaXMgcGFnZSBhZ2FpbiEgSWYgdGhpcyBjb250aW51ZXMgdG8gaGFwcGVuIGluZm9ybSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yLjwvZGl2PiIpO30nOw0KCQkJJHNjcmlwdCAuPSAnc2hvd1RoZUZpbmlzaGVkTm90aWNlKHJ1biwgc2l6ZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ30pOyc7DQoJCQkkc2NyaXB0IC49ICdpZiAocnVuID09IHNpemUpIHsnOw0KCQkJJHNjcmlwdCAuPSAnY2xlYXJJbnRlcnZhbChwcm9jZXNzaW5nUmVxdWVzdENoZWNrZXIpOyc7DQoJCQkkc2NyaXB0IC49ICd9JzsNCgkJCSRzY3JpcHQgLj0gJ3J1bisrOyc7DQoJCQkkc2NyaXB0IC49ICd9LCAyMDApOyc7DQoJCQkkc2NyaXB0IC49ICd9IGVsc2UgeyBqUXVlcnkoIiNsb2FkaW5nIikuaGlkZSgpO30nOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICdmdW5jdGlvbiBzaG93VGhlRmluaXNoZWROb3RpY2UocnVuLCBzaXplKSB7JzsNCgkJCSRzY3JpcHQgLj0gJ2lmIChydW4gPT0gc2l6ZSB8fCAwID09IHNpemUpIHsnOw0KCQkJJHNjcmlwdCAuPSAnalF1ZXJ5KCIjbG9hZGluZyIpLmhpZGUoKTsnOw0KCQkJJHNjcmlwdCAuPSAnalF1ZXJ5KCIjW1tbY29tcG9uZW50XV1dX2xvYWRlciIpLmh0bWwoIjxkaXYgY2xhc3M9XCJ1ay1hbGVydC1zdWNjZXNzXCIgdWstYWxlcnQ+PGgxPic7DQoJCQkkc2NyaXB0IC49IFRleHQ6OnNwcmludGYoJyVzIEV4dHJ1c2lvbiBDb21wbGV0ZSEnLCAkdGhpcy0+X2ZpbGVOYW1lKTsNCgkJCSRzY3JpcHQgLj0gJzwvaDE+PHA+JzsNCgkJCSRzY3JpcHQgLj0gVGV4dDo6XygnRG8gbm90ZSB0aGF0IDxiPm5vIGlucHV0dCBmaWVsZHM8L2I+IHdlcmUgc2V0IGZvciB0aGlzIHJlc291cmNlLCBhbmQgdGhlIHJlc291cmNlIGlzIHN0aWxsIDxiPnVwdWJsaXNoZWQ8L2I+LiBPbmx5IG9uY2UgYW4gZWRpdG9yIGhhcyA8Yj5yZXZpZXdlZCBhbmQgcHVibGxpc2hlZDwvYj4gdGhpcyByZXNvdXJjZSwgd2lsbCBpdCBiZSBhdmFpbGFibGUgZm9yIHVzZSBpbiBjb3Vyc2VzLicpOw0KCQkJJHNjcmlwdCAuPSAnPC9wPjwvZGl2Pic7DQoJCQkkc2NyaXB0IC49ICc8ZGl2IGNsYXNzPVwidWstYnV0dG9uLWdyb3VwIHVrLXdpZHRoLTEtMVwiPic7DQoJCQkkc2NyaXB0IC49ICc8YSBocmVmPVwiaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY3VycmljdWx1bWJ1aWxkZXJdXV0mdmlldz1yZXNvdXJjZXNcIiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay13aWR0aC0xLTJcIj4nOw0KCQkJJHNjcmlwdCAuPSBUZXh0OjpzcHJpbnRmKCdSZXZpZXdlIFRoZSBSZXNvdXJjZXMnKTsNCgkJCSRzY3JpcHQgLj0gJzwvYT4nOw0KCQkJJHNjcmlwdCAuPSAnPGEgaHJlZj1cImluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PWZvbGRlcnNcIiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay13aWR0aC0xLTJcIj4nOw0KCQkJJHNjcmlwdCAuPSBUZXh0OjpzcHJpbnRmKCdFeHRydWRlIEFub3RoZXIgUmVzb3VyY2UnKTsNCgkJCSRzY3JpcHQgLj0gJzwvYT4nOw0KCQkJJHNjcmlwdCAuPSAnPC9kaXY+Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ319JzsNCgkJCSRzY3JpcHQgLj0gJzwvc2NyaXB0Pic7DQoJCX0NCgkJcmV0dXJuICRzY3JpcHQ7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBpbWFnZSBsaW5rDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcgb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExpbmsoJHBhdGgpDQoJew0KCQkvLyBzZXQgZ2xvYmFscw0KCQkkbGlua29wdGlvbnMgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldExpbmtPcHRpb25zKCk7DQoJCS8vIHNldCBsaW5rIHRva2VuIGlmIG5lZWRlZA0KCQkkbGlua1Rva2VuID0gJyc7DQoJCWlmICgkbGlua29wdGlvbnNbJ3Nlc3Npb24nXSkNCgkJew0KCQkJJGxpbmtUb2tlbiA9ICcmJyAuIEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKSAuICc9MSc7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIG5hbWUNCgkJJG5hbWUgPSBzdHJfcmVwbGFjZSgnLi8nLCAnJywgJHBhdGgpOw0KCQkvLyBsb2NrIHRoZSBwYXRoIHRvIHRoZSBwYWdlDQoJCWlmICgkbGlua29wdGlvbnNbJ2xvY2snXSkNCgkJew0KCQkJJHBhZ2UgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmJhc2U2NF91cmxlbmNvZGUoW1tbQ29tcG9uZW50XV1dSGVscGVyOjplbmNyeXB0KCAkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlciAuICcvJyAuICRuYW1lKSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkcGFnZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGVuY29kZSgkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlciAuICcvJyAuICRuYW1lLCB0cnVlKTsNCgkJfQ0KCQkvLyByZXR1cm4gdGhlIGxpbmsNCgkJcmV0dXJuICR0aGlzLT5nZXRMaW5rVVJMKCRwYWdlLCAkbmFtZSwgJGxpbmtUb2tlbik7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBpbWFnZSBsaW5rIFVSTA0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nIG9uIHN1Y2Nlc3MNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRMaW5rVVJMKCRwYWdlLCAkbmFtZSwgJGxpbmtUb2tlbikNCgl7DQoJCS8vIHJldHVybiB0aGUgbGluaw0KCQlyZXR1cm4gJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLmpwZyZmaWxlPScgLiAkcGFnZSAuICRsaW5rVG9rZW4gLiAnJm5hbWU9JyAuIHN0cl9yZXBsYWNlKCcuJywgJycsICRuYW1lKTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGltYWdlIGxpbmtzDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGlua3MoKQ0KCXsNCgkJLy8gc2V0IGdsb2JhbHMNCgkJJGxpbmtvcHRpb25zID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRMaW5rT3B0aW9ucygpOw0KCQkvLyBzZXQgbGluayB0b2tlbiBpZiBuZWVkZWQNCgkJJGxpbmtUb2tlbiA9ICcnOw0KCQlpZiAoJGxpbmtvcHRpb25zWydzZXNzaW9uJ10pDQoJCXsNCgkJCSRsaW5rVG9rZW4gPSAnJicgLiBKb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkgLiAnPTEnOw0KCQl9DQoJCS8vIGJ1aWxkIGFuZCByZXR1cm4gbGlua3MNCgkJcmV0dXJuIGFycmF5X21hcCggZnVuY3Rpb24oJHBhdGgpIHVzZSgkbGlua29wdGlvbnMsICRsaW5rVG9rZW4pew0KCQkJLy8gYnVpbGQgdGhlIG5hbWUNCgkJCSRuYW1lID0gc3RyX3JlcGxhY2UoJy4vJywgJycsICRwYXRoKTsNCgkJCS8vIGxvY2sgdGhlIHBhdGggdG8gdGhlIHBhZ2UNCgkJCWlmICgkbGlua29wdGlvbnNbJ2xvY2snXSkNCgkJCXsNCgkJCQkkcGFnZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGVuY29kZShbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoICR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyIC4gJy8nIC4gJG5hbWUpKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcGFnZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGVuY29kZSgkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlciAuICcvJyAuICRuYW1lLCB0cnVlKTsNCgkJCX0NCgkJCS8vIHJldHVybiB0aGUgbGluaw0KCQkJcmV0dXJuICR0aGlzLT5nZXRMaW5rVVJMKCRwYWdlLCAkbmFtZSwgJGxpbmtUb2tlbik7DQoJCX0sICR0aGlzLT5wYWdlcyk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBpbWFnZSBuYW1lcw0KCSAqDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmFtZXMoKQ0KCXsNCgkJLy8gYnVpbGQgYW5kIHJldHVybiBsaW5rcw0KCQlyZXR1cm4gYXJyYXlfbWFwKCBmdW5jdGlvbigkcGF0aCl7DQoJCQkvLyBidWlsZCB0aGUgbmFtZQ0KCQkJcmV0dXJuIHN0cl9yZXBsYWNlKGFycmF5KCcuLycsICcuJyksICcnLCAkcGF0aCk7DQoJCX0sICR0aGlzLT5wYWdlcyk7DQoJfQ0KDQo=', '[[[Component]]] Bridge To [[[curriculumbuilder_link_name]]]', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQkvLyBjaGVjayB0aGF0IFtbW2N1cnJpY3VsdW1idWlsZGVyXV1dIGlzIGluc3RhbGxlZA0KCQkJJHBhdGhUb0NvcmUgPSBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjdXJyaWN1bHVtYnVpbGRlcl1dXS9oZWxwZXJzL1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dLnBocCc7DQoJCQlpZiAoIUpGaWxlOjpleGlzdHMoJHBhdGhUb0NvcmUpKQ0KCQkJew0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdbW1tjdXJyaWN1bHVtYnVpbGRlcl9hY3JvbnltXV1dIG11c3QgZmlyc3QgYmUgaW5zdGFsbGVkIGZyb20gPGEgaHJlZj0iW1tbZ2V0X2N1cnJpY3VsdW1idWlsZGVyX2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjdXJyaWN1bHVtYnVpbGRlcl9saW5rX25hbWVdXV08L2E+LicsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0=', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"8\"},\"property_selection1\":{\"property\":\"9\"},\"property_selection2\":{\"property\":\"7\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Bridge To Curriculum Builder', '', 1, '', '', 1, '2019-10-22 20:48:43', '2024-08-06 20:54:39', 173, '', 4),
-(9, '', '', '', '', '', '', '', '', '', '', '', '', '', 1, 'Loading WHMCS Products details', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"WHMCS\",\"label\":\"WHMCS Access Details\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2678\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2677\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"324\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2712\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2713\",\"custom_value\":\"\"}}}}', 'e8be5861-f9eb-4d35-890b-14352e8ec86e', '', 3, '{\"method_selection0\":{\"method\":\"16\"}}', 'CS8qKg0KCSAqIEFQSSBVUkwNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJpdmF0ZSAkdXJsOw0KDQoJLyoqDQoJICogU0hPUCBVUkwNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAgMS4wLjMNCgkgKi8NCglwcml2YXRlICRzaG9wdXJsOw0KDQoJLyoqDQoJICogQVBJIElERU5USUZJRVJfT1JfQURNSU5fVVNFUk5BTUUNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJpdmF0ZSAkdXNlcm5hbWU7DQoNCgkvKioNCgkgKiBBUEkgU0VDUkVUX09SX0hBU0hFRF9QQVNTV09SRA0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwcml2YXRlICRwYXNzd29yZDsNCg0KCS8qKg0KCSAqIEFQSSBBQ1RJVkUgQ1VSUkVOQ1kNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJpdmF0ZSAkY3VycmVuY3k7DQoNCgkvKioNCgkgKiBBZGQgdnVlIHRvIHBhZ2UgaGVhZGVyDQoJICoNCgkgKiBAdmFyICAgIGJvb2wNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwcml2YXRlICAkYWRkVnVlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIFRoZSBjdXJyZW5jaWVzDQoJICoNCgkgKiBAdmFyICBhcnJheQ0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXByaXZhdGUgICRjdXJyZW5jaWVzOw0KDQoJLyoqDQoJICogVGhlIHByb2R1Y3RzDQoJICoNCgkgKiBAdmFyICBhcnJheQ0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXByaXZhdGUgICRwcm9kdWN0cyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiB3aG1jcyBzdHJpbmcgbmFtZQ0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSAxLjANCgkgKi8NCglwcml2YXRlICRfd2htY3M7DQoNCgkvKioNCgkgKiB3aG1jcyBhY3Rpb24gbmFtZQ0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSAxLjANCgkgKi8NCglwcml2YXRlICRfd2htY3Nfb3BlbjsNCg0KCS8qKg0KCSAqIHZ1ZSBjYWxsIHRyaWdnZXINCgkgKg0KCSAqIEB2YXIgICBzdHJpbmcNCgkgKiBAc2luY2UgMS4wDQoJICovDQoJcHJpdmF0ZSAkX3dobWNzX3Z1ZTsNCg0KCS8qKg0KCSAqIHZ1ZSBlbmQgdGFyZ2V0DQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDEuMA0KCSAqLw0KCXByaXZhdGUgJF93aG1jc192dWVfOw0KDQoJLyoqDQoJICogZW5kX2Nsb3NpbmcgdGFyZ2V0DQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDEuMA0KCSAqLw0KCXByaXZhdGUgJF9jbG9zaW5nOw0KDQoJLyoqDQoJICogQXBwbGljYXRpb24gb2JqZWN0DQoJICoNCgkgKiBAdmFyICAgIENNU0FwcGxpY2F0aW9uDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGFwcDsNCg0KCS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzdGFnZSBpbiBwcmVwYXJpbmcgY29udGVudCBmb3Igb3V0cHV0IGFuZCBpcyB0aGUNCgkgKiBtb3N0IGNvbW1vbiBwb2ludCBmb3IgY29udGVudCBvcmllbnRhdGVkIHBsdWdpbnMgdG8gZG8gdGhlaXIgd29yay4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gdGhlIHBsdWdpbi4NCgkgKiBAcGFyYW0gICBvYmplY3QgICAmJHJvdyAgICAgVGhlIGFydGljbGUgb2JqZWN0LiAgTm90ZSAkYXJ0aWNsZS0+dGV4dCBpcyBhbHNvIGF2YWlsYWJsZQ0KCSAqIEBwYXJhbSAgIG1peGVkICAgICYkcGFyYW1zICBUaGUgYXJ0aWNsZSBwYXJhbXMNCgkgKiBAcGFyYW0gICBpbnRlZ2VyICAkcGFnZSAgICAgVGhlICdwYWdlJyBudW1iZXINCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRQcmVwYXJlKCRjb250ZXh0LCAmJHJvdywgJiRwYXJhbXMsICRwYWdlID0gMCkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBIVE1MIHN0cmVhbQ0KCQlpZiAoJHRoaXMtPmFwcC0+aXNDbGllbnQoJ2FkbWluaXN0cmF0b3InKSB8fCAkdGhpcy0+YXBwLT5pbnB1dC0+Z2V0Q21kKCdmb3JtYXQnLCAnaHRtbCcpICE9ICdodG1sJykNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJLy8gc2V0IGNhbGwgc3RyaW5nDQoJCWlmICghaXNzZXQoJHRoaXMtPl93aG1jcykpDQoJCXsNCgkJCSR0aGlzLT5fd2htY3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2NhbGxfc3RyaW5nJywgJ1dITUNTJyk7DQoJCQkvLyBzZXQgd2htY3MgcGxhY2Vob2xkZXIgb3BlbmluZyB0YWcNCgkJCSR0aGlzLT5fd2htY3Nfb3BlbiA9ICd7JyAuICR0aGlzLT5fd2htY3M7DQoJCQkvLyBzZXQgd2htY3MgdnVlIHRyaWdnZXIgb3BlbmluZyB0YWcNCgkJCSR0aGlzLT5fd2htY3NfdnVlID0gJHRoaXMtPl93aG1jc19vcGVuIC4gJz0nOw0KCQkJLy8gc2V0IHdobWNzIHZ1ZSB0cmlnZ2VyIGVuZCB0YWcNCgkJCSR0aGlzLT5fd2htY3NfdnVlXyA9ICR0aGlzLT5fd2htY3Nfb3BlbiAuICcvJzsNCgkJCS8vIHNldCBjbG9zaW5nIHRhZw0KCQkJJHRoaXMtPl9jbG9zaW5nID0gJ30nOw0KCQl9DQoNCgkJLy8gU2ltcGxlIHBlcmZvcm1hbmNlIGNoZWNrIHRvIGRldGVybWluZSB3aGV0aGVyIGJvdCBzaG91bGQgcHJvY2VzcyBmdXJ0aGVyDQoJCWlmIChzdHJwb3MoJHJvdy0+dGV4dCwgJHRoaXMtPl93aG1jc19vcGVuKSA9PT0gZmFsc2UpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KCQkvLyBnZXQgYWxsIGFjdGlvbnMgY2FsbHMNCgkJJGFjdGlvbnMgPSAkdGhpcy0+Z2V0QWxsQmV0d2Vlbigkcm93LT50ZXh0LCAkdGhpcy0+X3dobWNzX3Z1ZSwgJHRoaXMtPl9jbG9zaW5nKTsNCgkJLy8gdXBkYXRlIGlmIGZvdW5kDQoJCSR0aGlzLT5fZG9WdWUoJHJvdy0+dGV4dCwgJGFjdGlvbnMpOw0KCQkvLyBnZXQgYWxsIGFjdGlvbnMgY2FsbHMNCgkJJGFjdGlvbnMgPSAkdGhpcy0+Z2V0QWxsQmV0d2Vlbigkcm93LT50ZXh0LCAkdGhpcy0+X3dobWNzX29wZW4sICR0aGlzLT5fY2xvc2luZyk7DQoJCS8vIHVwZGF0ZSBpZiBmb3VuZA0KCQkkdGhpcy0+X2RvV2htY3MoJHJvdy0+dGV4dCwgJGFjdGlvbnMpOw0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgaXMgdGhlIHdobWNzIHBsYWNlaG9sZGVyIG1ldGhvZA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRleHQgICAgICAgIFRoZSB0ZXh0IHRvIHVwZGF0ZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGFjdGlvbnMgICAgIFRoZSBhY3Rpb24gY2FsbHMgYmVpbmcgbWFkZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb1dobWNzKCYkdGV4dCwgJGFjdGlvbnMpDQoJew0KCQkvLyBPbmx5IGNvbnRpbnVlIGlmIHdlIGhhdmUgYWN0aW9ucw0KCQlpZiAoJHRoaXMtPmNoZWNrQXJyYXkoJGFjdGlvbnMsIHRydWUpKQ0KCQl7DQoJCQkvLyBnZXQgdXNlcm5hbWUgaWYgbm90IHNldA0KCQkJaWYgKCEkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnVzZXJuYW1lKSkNCgkJCXsNCgkJCQkkdGhpcy0+dXNlcm5hbWUgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3VzZXJuYW1lJywgbnVsbCk7DQoJCQl9DQoJCQkvLyBnZXQgcGFzc3dvcmQgaWYgbm90IHNldA0KCQkJaWYgKCEkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnBhc3N3b3JkKSkNCgkJCXsNCgkJCQkkdGhpcy0+cGFzc3dvcmQgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3Bhc3N3b3JkJywgbnVsbCk7DQoJCQl9DQoJCQkvLyBnZXQgdXJsIGlmIG5vdCBzZXQNCgkJCWlmICghJHRoaXMtPmNoZWNrU3RyaW5nKCR0aGlzLT51cmwpKQ0KCQkJew0KCQkJCSR0aGlzLT51cmwgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3VybCcsIG51bGwpOw0KCQkJCS8vIGJ1aWxkIHNob3AgVVJMIGJhc2VkIG9uIGFmaWxpYXRpb24gc3RhdHVzDQoJCQkJJGFjdGl2YXRlX2FmZmlsaWF0ZSA9ICR0aGlzLT5wYXJhbXMtPmdldCgnYWN0aXZhdGVfYWZmaWxpYXRlX3Byb2dyYW0nLCAwKTsNCgkJCQlpZiAoMSA9PSAkYWN0aXZhdGVfYWZmaWxpYXRlKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPnNob3B1cmwgPSAkdGhpcy0+dXJsIC4gJy9hZmYucGhwP2FmZj0nIC4gKGludCkgJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZmZpbGlhdGVfaWQnLCAwKSAuICcmYT1hZGQnOyANCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRoaXMtPnNob3B1cmwgPSAkdGhpcy0+dXJsIC4gJy9jYXJ0LnBocD9hPWFkZCc7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIG5lZWRlZCBkZXRhaWxzIHRvIGNhbGwNCgkJCWlmICgkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnVzZXJuYW1lKSAmJiAkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnBhc3N3b3JkKSAmJiAkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnVybCkpDQoJCQl7DQoJCQkJLy8gZ2V0IGdsb2JhbCBjdXJyZW5jeQ0KCQkJCWlmICghJHRoaXMtPmNoZWNrU3RyaW5nKCR0aGlzLT5jdXJyZW5jeSkpDQoJCQkJew0KCQkJCQkkdGhpcy0+Y3VycmVuY3kgPSBzdHJ0b3VwcGVyKCR0aGlzLT5wYXJhbXMtPmdldCgnY3VycmVuY3knLCAnVVNEJykpOw0KCQkJCX0NCgkJCQkvLyBnZXQgYXJyYXkgZ2x1ZQ0KCQkJCSRnbHVlID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhcnJheV9nbHVlJywgJywgJyk7DQoJCQkJLy8gc2V0IGVtcHR5IElEIGFycmF5DQoJCQkJJGlkcyA9IGFycmF5KCk7DQoJCQkJJGlkc19xdWVyeSA9IGFycmF5KCk7DQoJCQkJJGRlYnVnID0gZmFsc2U7DQoJCQkJLy8gdXBkYXRlcg0KCQkJCSR1cGRhdGUgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKCRhY3Rpb25zIGFzICRxdWVyeSkNCgkJCQl7DQoJCQkJCS8vIGNsZWFyIG91dCB0aGUgY2FsbA0KCQkJCQkkdXBkYXRlWyR0aGlzLT5fd2htY3Nfb3BlbiAuICAkcXVlcnkgLiAkdGhpcy0+X2Nsb3NpbmddID0gJyc7DQoJCQkJCS8vIGdldCB0aGUgaW5wdXRzDQoJCQkJCSRxdWVyeUFycmF5ID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnfCcsIHRyaW0oJHF1ZXJ5KSkpOw0KCQkJCQkvLyBjb250aW51ZSBvbmx5IGlmIHdlIGhhdmUgdmFsdWVzDQoJCQkJCWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkcXVlcnlBcnJheSwgdHJ1ZSkpDQoJCQkJCXsNCgkJCQkJCS8vIG9ubHkgb25lIElEIHBlci9xdWVyeQ0KCQkJCQkJJHNlYXJjaCA9IHRydWU7DQoJCQkJCQlmb3JlYWNoICgkcXVlcnlBcnJheSBhcyAkcXVlcnlWYWx1ZSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgaWQgcXVlcnkNCgkJCQkJCQlpZiAoJHNlYXJjaCAmJiBpc19udW1lcmljKCRxdWVyeVZhbHVlKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRpZCA9IChpbnQpICRxdWVyeVZhbHVlOw0KCQkJCQkJCQkvLyBzZXQgdGhlIHByb2R1Y3QgSUQgYXJyYXkNCgkJCQkJCQkJJGlkc1skaWRdID0gJGlkOw0KCQkJCQkJCQkvLyBtYWtlIHN1cmUgdGhlIGFycmF5IGlzIHNldA0KCQkJCQkJCQlpZiAoIWlzc2V0KCRpZHNfcXVlcnlbJGlkXSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRpZHNfcXVlcnlbJGlkXSA9IGFycmF5KCk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gd2Ugc2V0IHRoZSBidWlsZGVyIHF1ZXJ5DQoJCQkJCQkJCSRpZHNfcXVlcnlbJGlkXVskcXVlcnldID0gICR0aGlzLT5tZXJnZUFycmF5cyhhcnJheV9tYXAoIGZ1bmN0aW9uICgkdmFsKSB1c2UoJGlkKSB7DQoJCQkJCQkJCQkvLyBtYWtlIHN1cmUgaXQgaXMgbm90IGFuIElEDQoJCQkJCQkJCQlpZiAoIWlzX251bWVyaWMoJHZhbCkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gc2V0IHNvbWUgb3B0aW9ucw0KCQkJCQkJCQkJCSRsb3dlciA9IHN0cnRvbG93ZXIoJHZhbCk7DQoJCQkJCQkJCQkJJHVwcGVyID0gc3RydG91cHBlcigkdmFsKTsNCgkJCQkJCQkJCQlpZiAoJGxvd2VyID09PSAnbW9udGhseScgfHwgJGxvd2VyID09PSAncXVhcnRlcmx5JyB8fA0KCQkJCQkJCQkJCQkkbG93ZXIgPT09ICdzZW1pYW5udWFsbHknIHx8ICRsb3dlciA9PT0gJ2FubnVhbGx5JyB8fA0KCQkJCQkJCQkJCQkkbG93ZXIgPT09ICdiaWVubmlhbGx5JyB8fCAkbG93ZXIgPT09ICd0cmllbm5pYWxseScgfHwNCgkJCQkJCQkJCQkJJGxvd2VyID09PSAnbXNldHVwZmVlJyB8fCAkbG93ZXIgPT09ICdxc2V0dXBmZWUnIHx8DQoJCQkJCQkJCQkJCSRsb3dlciA9PT0gJ3NzZXR1cGZlZScgfHwgJGxvd2VyID09PSAnYXNldHVwZmVlJyB8fA0KCQkJCQkJCQkJCQkkbG93ZXIgPT09ICdic2V0dXBmZWUnIHx8ICRsb3dlciA9PT0gJ3RzZXR1cGZlZScgKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJLy8gbWFwIElEIHRvIHRlcm0NCgkJCQkJCQkJCQkJcmV0dXJuIGFycmF5KCAndGVybScgPT4gJGxvd2VyKTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJZWxzZWlmICgkbG93ZXIgPT09ICR2YWwgJiYgJ2RlYnVnJyAhPT0gJHZhbCkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCS8vIG1hcCBJRCB0byB0eXBlIG9wdGlvbg0KCQkJCQkJCQkJCQlyZXR1cm4gYXJyYXkoICd0eXBlJyA9PiAkbG93ZXIpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQllbHNlaWYgKCR1cHBlciA9PT0gJHZhbCkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCS8vIG1hcCBJRCB0byBjdXJyZW5jeQ0KCQkJCQkJCQkJCQlyZXR1cm4gYXJyYXkoICdjdXJyZW5jeScgPT4gJHVwcGVyKTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlyZXR1cm4gYXJyYXkoJ2lkJyA9PiAkaWQpOw0KCQkJCQkJCQl9LCAkcXVlcnlBcnJheSkpOw0KCQkJCQkJCQkvLyBvbmx5IG9uZSBJRCBwZXIvcXVlcnkNCgkJCQkJCQkJJHNlYXJjaCA9IGZhbHNlOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlaWYgKCFpc19udW1lcmljKCRxdWVyeVZhbHVlKSAmJiBzdHJ0b2xvd2VyKCRxdWVyeVZhbHVlKSA9PT0gJ2RlYnVnJykNCgkJCQkJCQl7DQoJCQkJCQkJCSRkZWJ1ZyA9IHRydWU7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGdldCB0aGUgcHJvZHVjdHMNCgkJCQlpZiAoKCRwcm9kdWN0cyA9ICR0aGlzLT5nZXRQcm9kdWN0cygkaWRzKSkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIHN1Y2Nlc3MNCgkJCQkJaWYgKCRwcm9kdWN0cy0+cmVzdWx0ID09PSAnc3VjY2VzcycpDQoJCQkJCXsNCgkJCQkJCWZvcmVhY2ggKCRwcm9kdWN0cy0+cHJvZHVjdHMtPnByb2R1Y3QgYXMgJHByb2R1Y3QpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKGlzc2V0KCRpZHNfcXVlcnlbJHByb2R1Y3QtPnBpZF0pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJZm9yZWFjaCAoJGlkc19xdWVyeVskcHJvZHVjdC0+cGlkXSBhcyAkcXVlcnkgPT4gJHRyaWdnZXJzKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkvLyBzZXQgdGhlIGRldGFpbHMNCgkJCQkJCQkJCWlmIChpc3NldCgkdHJpZ2dlcnNbJ3R5cGUnXSkgJiYgJ3VybCcgIT09ICR0cmlnZ2Vyc1sndHlwZSddICYmIGlzc2V0KCRwcm9kdWN0LT57JHRyaWdnZXJzWyd0eXBlJ119KSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQlpZiAoJHRoaXMtPmNoZWNrU3RyaW5nKCRwcm9kdWN0LT57JHRyaWdnZXJzWyd0eXBlJ119KSkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSR1cGRhdGVbJHRoaXMtPl93aG1jc19vcGVuIC4gICRxdWVyeSAuICR0aGlzLT5fY2xvc2luZ10gPSAkcHJvZHVjdC0+eyR0cmlnZ2Vyc1sndHlwZSddfTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJZWxzZWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkcHJvZHVjdC0+eyR0cmlnZ2Vyc1sndHlwZSddfSkpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkdXBkYXRlWyR0aGlzLT5fd2htY3Nfb3BlbiAuICAkcXVlcnkgLiAkdGhpcy0+X2Nsb3NpbmddID0gaW1wbG9kZSgkZ2x1ZSwgJHByb2R1Y3QtPnskdHJpZ2dlcnNbJ3R5cGUnXX0pOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2UNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBzZXQgdGhlIGN1cnJlbmN5DQoJCQkJCQkJCQkJaWYgKGlzc2V0KCR0cmlnZ2Vyc1snY3VycmVuY3knXSkpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkY3VycmVuY3kgPSAkdHJpZ2dlcnNbJ2N1cnJlbmN5J107DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCWVsc2UNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSRjdXJyZW5jeSA9ICR0aGlzLT5jdXJyZW5jeTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJLy8gc2V0IHRoZSB0ZXJtDQoJCQkJCQkJCQkJaWYgKGlzc2V0KCR0cmlnZ2Vyc1sndGVybSddKSkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSR0ZXJtID0gJHRyaWdnZXJzWyd0ZXJtJ107DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCWVsc2UNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSR0ZXJtID0gJ21vbnRobHknOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkvLyBzZXQgdXJsDQoJCQkJCQkJCQkJaWYgKGlzc2V0KCR0cmlnZ2Vyc1sndHlwZSddKSAmJiAndXJsJyA9PT0gJHRyaWdnZXJzWyd0eXBlJ10pDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQlpZiAoaXNzZXQoJHByb2R1Y3QtPnVybHMtPnskY3VycmVuY3l9LT57JHRlcm19KSkNCgkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJaWYgKCdtb250aGx5JyA9PT0gJHRlcm0pDQoJCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkJJHVwZGF0ZVskdGhpcy0+X3dobWNzX29wZW4gLiAgJHF1ZXJ5IC4gJHRoaXMtPl9jbG9zaW5nXSA9ICBzdHJfcmVwbGFjZSgnJmJpbGxpbmdjeWNsZT1tb250aGx5JywgJycsICRwcm9kdWN0LT51cmxzLT57JGN1cnJlbmN5fS0+eyR0ZXJtfSk7DQoJCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkJJHVwZGF0ZVskdGhpcy0+X3dobWNzX29wZW4gLiAgJHF1ZXJ5IC4gJHRoaXMtPl9jbG9zaW5nXSA9ICRwcm9kdWN0LT51cmxzLT57JGN1cnJlbmN5fS0+eyR0ZXJtfTsNCgkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkvLyBzZXQgcHJpY2UNCgkJCQkJCQkJCQllbHNlaWYgKGlzc2V0KCRwcm9kdWN0LT5wcmljaW5nLT57JGN1cnJlbmN5fS0+eyR0ZXJtfSkgJiYgJzAuMDAnICE9PSAkcHJvZHVjdC0+cHJpY2luZy0+eyRjdXJyZW5jeX0tPnskdGVybX0pDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkdXBkYXRlWyR0aGlzLT5fd2htY3Nfb3BlbiAuICAkcXVlcnkgLiAkdGhpcy0+X2Nsb3NpbmddID0gJHByb2R1Y3QtPnByaWNpbmctPnskY3VycmVuY3l9LT5wcmVmaXggLiAnICcgLiAkcHJvZHVjdC0+cHJpY2luZy0+eyRjdXJyZW5jeX0tPnskdGVybX07DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIGRlYnVnDQoJCQkJCWlmICgkZGVidWcpDQoJCQkJCXsNCgkJCQkJCSR0ZXh0IC49ICc8YnIgLz48cHJlPicgLiBqc29uX2VuY29kZSgkcHJvZHVjdHMsIEpTT05fUFJFVFRZX1BSSU5UKSAuICc8L3ByZT4nOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSB0aGUgdGV4dA0KCQkJCWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkdXBkYXRlKSkNCgkJCQl7DQoJCQkJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkdXBkYXRlKSwgYXJyYXlfdmFsdWVzKCR1cGRhdGUpLCAkdGV4dCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogVGhpcyBpcyB0aGUgdnVlIG1ldGhvZA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRleHQgICAgICAgIFRoZSB0ZXh0IHRvIHVwZGF0ZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGFjdGlvbnMgICAgIFRoZSBhY3Rpb24gY2FsbHMgYmVpbmcgbWFkZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb1Z1ZSgmJHRleHQsICRhY3Rpb25zKQ0KCXsNCgkJLy8gT25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGFjdGlvbnMNCgkJaWYgKCR0aGlzLT5jaGVja0FycmF5KCRhY3Rpb25zLCB0cnVlKSkNCgkJew0KCQkJLy8gZ2V0IHVzZXJuYW1lIGlmIG5vdCBzZXQNCgkJCWlmICghJHRoaXMtPmNoZWNrU3RyaW5nKCR0aGlzLT51c2VybmFtZSkpDQoJCQl7DQoJCQkJJHRoaXMtPnVzZXJuYW1lID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCd1c2VybmFtZScsIG51bGwpOw0KCQkJfQ0KCQkJLy8gZ2V0IHBhc3N3b3JkIGlmIG5vdCBzZXQNCgkJCWlmICghJHRoaXMtPmNoZWNrU3RyaW5nKCR0aGlzLT5wYXNzd29yZCkpDQoJCQl7DQoJCQkJJHRoaXMtPnBhc3N3b3JkID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdwYXNzd29yZCcsIG51bGwpOw0KCQkJfQ0KCQkJLy8gZ2V0IHVybCBpZiBub3Qgc2V0DQoJCQlpZiAoISR0aGlzLT5jaGVja1N0cmluZygkdGhpcy0+dXJsKSkNCgkJCXsNCgkJCQkkdGhpcy0+dXJsID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCd1cmwnLCBudWxsKTsNCgkJCQkvLyBidWlsZCBzaG9wIFVSTCBiYXNlZCBvbiBhZmlsaWF0aW9uIHN0YXR1cw0KCQkJCSRhY3RpdmF0ZV9hZmZpbGlhdGUgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FjdGl2YXRlX2FmZmlsaWF0ZV9wcm9ncmFtJywgMCk7DQoJCQkJaWYgKDEgPT0gJGFjdGl2YXRlX2FmZmlsaWF0ZSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5zaG9wdXJsID0gJHRoaXMtPnVybCAuICcvYWZmLnBocD9hZmY9JyAuIChpbnQpICR0aGlzLT5wYXJhbXMtPmdldCgnYWZmaWxpYXRlX2lkJywgMCkgLiAnJmE9YWRkJzsgDQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSR0aGlzLT5zaG9wdXJsID0gJHRoaXMtPnVybCAuICcvY2FydC5waHA/YT1hZGQnOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGFkZCB2dWUgdG8gdGhlIGhlYWRlciBvZiB0aGUgZG9jdW1lbnQgaWYgbmVlZGVkIChkZWZhdWx0IHRydWUpDQoJCQlpZiAoJHRoaXMtPmFkZFZ1ZSAmJiAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF92dWUnLCAxKSkNCgkJCXsNCgkJCQlGYWN0b3J5OjpnZXREb2N1bWVudCgpLT5hZGRTY3JpcHQoSm9vbWxhX19fZWVjYzE0M2VfYjVjZl80YzMzX2JhNGRfOTdkYTFkZjYxNDIyX19fUG93ZXI6OnJvb3QodHJ1ZSkgLicvcGx1Z2lucy9jb250ZW50L3dobWNzcHJvZHVjdHMvanMvdnVlLm1pbi5qcycsIGFycmF5KCd2ZXJzaW9uJyA9PiAnYXV0bycpKTsNCgkJCX0NCgkJCS8vIGRvIG5vdCBhZGQgdnVlIGFnYWluDQoJCQkkdGhpcy0+YWRkVnVlID0gZmFsc2U7DQoJCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGRldGFpbHMgdG8gY2FsbA0KCQkJaWYgKCR0aGlzLT5jaGVja1N0cmluZygkdGhpcy0+dXNlcm5hbWUpICYmICR0aGlzLT5jaGVja1N0cmluZygkdGhpcy0+cGFzc3dvcmQpICYmICR0aGlzLT5jaGVja1N0cmluZygkdGhpcy0+dXJsKSkNCgkJCXsNCgkJCQkvLyBnZXQgZ2xvYmFsIGN1cnJlbmN5DQoJCQkJaWYgKCEkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPmN1cnJlbmN5KSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5jdXJyZW5jeSA9IHN0cnRvdXBwZXIoJHRoaXMtPnBhcmFtcy0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKSk7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZXINCgkJCQkkdXBkYXRlID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoICgkYWN0aW9ucyBhcyAkcXVlcnkpDQoJCQkJew0KCQkJCQkvLyBjbGVhciBvdXQgdGhlIGNhbGwNCgkJCQkJJHVwZGF0ZVskdGhpcy0+X3dobWNzX3Z1ZSAuICAkcXVlcnkgLiAkdGhpcy0+X2Nsb3NpbmddID0gJyc7DQoJCQkJCSR1cGRhdGVbJHRoaXMtPl93aG1jc192dWVfIC4gICRxdWVyeSAuICR0aGlzLT5fY2xvc2luZ10gPSAnJzsNCgkJCQkJLy8gZ2V0IHRoZSBpbnB1dHMNCgkJCQkJJHF1ZXJ5QXJyYXkgPSBhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCd8JywgdHJpbSgkcXVlcnkpKSk7DQoJCQkJCS8vIGNvbnRpbnVlIG9ubHkgaWYgd2UgaGF2ZSB2YWx1ZXMNCgkJCQkJaWYgKCR0aGlzLT5jaGVja0FycmF5KCRxdWVyeUFycmF5LCB0cnVlKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IHRoaXMNCgkJCQkJCSRpZHMgPSBhcnJheSgpOw0KCQkJCQkJJHR5cGUgPSAncGlkJzsNCgkJCQkJCSRkZWJ1ZyA9IGZhbHNlOw0KCQkJCQkJJGN1cnJlbmN5ID0gJHRoaXMtPmN1cnJlbmN5Ow0KCQkJCQkJZm9yZWFjaCAoJHF1ZXJ5QXJyYXkgYXMgJHF1ZXJ5VmFsdWUpDQoJCQkJCQl7DQoJCQkJCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGlkIHF1ZXJ5DQoJCQkJCQkJaWYgKGlzX251bWVyaWMoJHF1ZXJ5VmFsdWUpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGlkc1soaW50KSAkcXVlcnlWYWx1ZV0gPSAoaW50KSAkcXVlcnlWYWx1ZTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgkdGhpcy0+Y2hlY2tTdHJpbmcoJHF1ZXJ5VmFsdWUpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gc2V0IHNvbWUgb3B0aW9ucw0KCQkJCQkJCQkkbG93ZXIgPSBzdHJ0b2xvd2VyKCRxdWVyeVZhbHVlKTsNCgkJCQkJCQkJJHVwcGVyID0gc3RydG91cHBlcigkcXVlcnlWYWx1ZSk7DQoJCQkJCQkJCWlmICgkbG93ZXIgPT09ICdwaWQnIHx8ICRsb3dlciA9PT0gJ2dpZCcpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vIHdlIGNhbiBvbmx5IGhhdmUgb25lIHR5cGUgKGRvIG5vdCBtaXggdGhlbSkNCgkJCQkJCQkJCSR0eXBlID0gc3RydG9sb3dlcigkcXVlcnlWYWx1ZSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZWlmICgkbG93ZXIgPT09ICdkZWJ1ZycpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkZWJ1ZyA9IHRydWU7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZWlmICgkdXBwZXIgPT09ICRxdWVyeVZhbHVlKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkY3VycmVuY3kgPSAkdXBwZXI7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQkvLyBnZXQgcHJvZHVjdHMNCgkJCQkJCWlmICgoJHByb2R1Y3RzID0gJHRoaXMtPmdldFByb2R1Y3RzKCRpZHMsICR0eXBlLCAkY3VycmVuY3kpKSAhPT0gZmFsc2UpDQoJCQkJCQl7DQoJCQkJCQkJLy8gdGhpcyBhcHAgYmxvY2sgaXNvbGF0aW9uIElEDQoJCQkJCQkJJGFwcElEID0gJHRoaXMtPnJhbmRvbWtleSgxMCk7DQoJCQkJCQkJJHByb2R1Y3RzLT5hcHBfaWQgPSAkYXBwSUQ7DQoJCQkJCQkJJGRhdGEgPSBqc29uX2VuY29kZSgkcHJvZHVjdHMpOw0KCQkJCQkJCS8vIGFkZCB0aGUgYXBwIGRpdg0KCQkJCQkJCSR1cGRhdGVbJHRoaXMtPl93aG1jc192dWUgLiAgJHF1ZXJ5IC4gJHRoaXMtPl9jbG9zaW5nXSA9ICI8ZGl2IGlkPSckYXBwSUQnPiI7DQoJCQkJCQkJJHVwZGF0ZVskdGhpcy0+X3dobWNzX3Z1ZV8gLiAgJHF1ZXJ5IC4gJHRoaXMtPl9jbG9zaW5nXSA9ICI8L2Rpdj48c2NyaXB0PnZhciBkYXRhJGFwcElEID0gJGRhdGE7dmFyIGFwcCRhcHBJRCA9IG5ldyBWdWUoe2VsOiAnIyRhcHBJRCcsIGRhdGE6IGRhdGEkYXBwSUR9KTs8L3NjcmlwdD4iOw0KCQkJCQkJCS8vIGRlYnVnDQoJCQkJCQkJaWYgKCRkZWJ1ZykNCgkJCQkJCQl7DQoJCQkJCQkJCSR0ZXh0IC49ICc8YnIgLz48cHJlPicgLiBqc29uX2VuY29kZSgkcHJvZHVjdHMsIEpTT05fUFJFVFRZX1BSSU5UKSAuICc8L3ByZT4nOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyB1cGRhdGUgdGhlIHRleHQNCgkJCQlpZiAoJHRoaXMtPmNoZWNrQXJyYXkoJHVwZGF0ZSkpDQoJCQkJew0KCQkJCQkkdGV4dCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHVwZGF0ZSksIGFycmF5X3ZhbHVlcygkdXBkYXRlKSwgJHRleHQpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgZ2V0cyB0aGUgcHJvZHVjdHMNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGlkcyAgICAgICAgVGhlIGlkcyB0byBnZXQNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdHlwZSAgICAgVGhlIHR5cGUgb2YgaWRzDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGN1cnJlbmN5ICAgICBUaGUgYWN0aXZlIGN1cnJlbmN5IGZvciB0aGlzIGJsb2NrDQoJICoNCgkgKiBAcmV0dXJuICBvYmplY3QNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRQcm9kdWN0cygkaWRzLCAkdHlwZSA9ICdwaWQnLCAkY3VycmVuY3kgPSAnVVNEJykNCgl7DQoJCWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkaWRzKSAmJiAkdGhpcy0+Y2hlY2tTdHJpbmcoJHR5cGUpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIG1lbW9yeSBrZXkNCgkJCSRrZXkgPSBtZDUoc2VyaWFsaXplKCRpZHMpIC4gJHR5cGUpOw0KCQkJLy8gY2hlY2sgaWYgdGhlc2Ugd2VyZSBhbHJlYWR5IHNldA0KCQkJaWYgKGlzc2V0KCR0aGlzLT5wcm9kdWN0c1ska2V5XSkpDQoJCQl7DQoJCQkJLy8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IGN1cnJlbmN5IGlzIGFjdGl2ZQ0KCQkJCWZvcmVhY2ggKCR0aGlzLT5wcm9kdWN0c1ska2V5XS0+cHJvZHVjdHMtPnByb2R1Y3QgYXMgJiRwcm9kdWN0KQ0KCQkJCXsNCgkJCQkJJHByb2R1Y3QtPmFjdGl2ZV9jdXJyZW5jeSA9ICRjdXJyZW5jeTsNCgkJCQl9DQoJCQkJcmV0dXJuICR0aGlzLT5wcm9kdWN0c1ska2V5XTsNCgkJCX0NCgkJCS8vIHdlIG1ha2UgYSBuZXcgY2FsbA0KCQkJJGNoID0gY3VybF9pbml0KCk7DQoJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdGhpcy0+dXJsIC4gJy9pbmNsdWRlcy9hcGkucGhwJyk7DQoJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgMSk7DQoJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywNCgkJCQlodHRwX2J1aWxkX3F1ZXJ5KA0KCQkJCQlhcnJheSgNCgkJCQkJCSdhY3Rpb24nID0+ICdHZXRQcm9kdWN0cycsDQoJCQkJCQkndXNlcm5hbWUnID0+ICR0aGlzLT51c2VybmFtZSwNCgkJCQkJCSdwYXNzd29yZCcgPT4gJHRoaXMtPnBhc3N3b3JkLA0KCQkJCQkJJHR5cGUgPT4gaW1wbG9kZSgnLCcsICRpZHMpLA0KCQkJCQkJJ3Jlc3BvbnNldHlwZScgPT4gJ2pzb24nDQoJCQkJCSkNCgkJCQkpDQoJCQkpOw0KCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCgkJCSRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOw0KCQkJY3VybF9jbG9zZSgkY2gpOw0KCQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSBqc29uIHN0cmluZw0KCQkJaWYgKCR0aGlzLT5jaGVja0pzb24oJHJlc3BvbnNlKSkNCgkJCXsNCgkJCQkvLyB3ZSBtdXN0IHNldCBhIGZldyBkZXRhaWxzDQoJCQkJJHJlc3BvbnNlID0ganNvbl9kZWNvZGUoJHJlc3BvbnNlKTsNCgkJCQkvLyBjaGVjayB0aGF0IHdlIGhhdmUgc3VjY2Vzcw0KCQkJCWlmICgkcmVzcG9uc2UtPnJlc3VsdCA9PT0gJ3N1Y2Nlc3MnKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBnbG9iYWwgYXZhaWxhYmxlIGN1cnJlbmNpZXMNCgkJCQkJJHJlc3BvbnNlLT5jdXJyZW5jeSA9ICRjdXJyZW5jeTsNCgkJCQkJaWYgKCFpc3NldCgkcmVzcG9uc2UtPmN1cnJlbmNpZXNfc2V0KSkNCgkJCQkJew0KCQkJCQkJJGN1cnJlbmNpZXMgPSAkdGhpcy0+Z2V0Q3VycmVuY2llcygpOw0KCQkJCQl9DQoJCQkJCS8vIGNoZWNrIGlmIHdlIHN1Y2NlZWRlZA0KCQkJCQlpZiAoJHRoaXMtPmNoZWNrT2JqZWN0KCRjdXJyZW5jaWVzKSAmJiAkY3VycmVuY2llcy0+cmVzdWx0ID09PSAnc3VjY2VzcycpDQoJCQkJCXsNCgkJCQkJCSRyZXNwb25zZS0+Y3VycmVuY2llc19zZXQgPSB0cnVlOw0KCQkJCQkJJHJlc3BvbnNlLT5jdXJyZW5jaWVzID0gJGN1cnJlbmNpZXMtPmN1cnJlbmNpZXMtPmN1cnJlbmN5Ow0KCQkJCQkJLy8gbm93IGdldCB0aGUgYWN0aXZlIGN1cnJlbmN5IFVSTCBpZA0KCQkJCQkJZm9yZWFjaCAoJHJlc3BvbnNlLT5jdXJyZW5jaWVzIGFzICRfY3VycmVuY3kpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKCRjdXJyZW5jeSA9PT0gJF9jdXJyZW5jeS0+Y29kZSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRyZXNwb25zZS0+Y3VycmVuY3lfaWQgPSAkX2N1cnJlbmN5LT5pZDsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkcmVzcG9uc2UtPmN1cnJlbmNpZXNfc2V0ID0gZmFsc2U7DQoJCQkJCX0NCgkJCQkJLy8gbWF0aCBmb3IgbW9udGhseSBiaWxsaW5nIG1hcHBpbmcNCgkJCQkJJGRpdmlkZSA9IGFycmF5KCdxdWFydGVybHknID0+IDMsICdzZW1pYW5udWFsbHknID0+IDYsICdhbm51YWxseScgPT4gMTIsICdiaWVubmlhbGx5JyA9PiAyNCwgJ3RyaWVubmlhbGx5JyA9PiAzNik7DQoJCQkJCS8vIHNldCB3aG1jcyBzZXR0aW5ncyB0YWdzDQoJCQkJCSR3aG1jc19vcGVuID0gJzwnIC4gJHRoaXMtPl93aG1jczsNCgkJCQkJLy8gc2V0IGNsb3NpbmcgdGFnDQoJCQkJCSR3aG1jc19jbG9zaW5nID0gJzwvJyAuICR0aGlzLT5fd2htY3MgLiAnPic7DQoJCQkJCS8vIHJlbW92ZSB0aGVzZSBmcm9tIGRlc2NyaXB0aW9uDQoJCQkJCSRyZW1vdmVfZGVzYyA9IGFycmF5KCc8IS0tLS0tLS0nID0+ICcnLCAnLS0tLS0tLT4nID0+ICcnKTsNCgkJCQkJJGZpeF91cmwgPSBhcnJheSgnaHR0cHMtLy8nID0+ICdodHRwczovLycsICdodHRwLS8vJyA9PiAnaHR0cDovLycpOw0KCQkJCQlmb3JlYWNoICgkcmVzcG9uc2UtPnByb2R1Y3RzLT5wcm9kdWN0IGFzICRwcm9kdWN0KQ0KCQkJCQl7DQoJCQkJCQkvLyB3ZSBzZXQgdGhlIG1haW4gVVJMDQoJCQkJCQlpZiAoaXNzZXQoJHJlc3BvbnNlLT5jdXJyZW5jeV9pZCkpDQoJCQkJCQl7DQoJCQkJCQkJJHByb2R1Y3QtPnVybCA9ICR0aGlzLT5zaG9wdXJsIC4gJyZwaWQ9JyAuICRwcm9kdWN0LT5waWQgLiAnJmN1cnJlbmN5PScgLiAkcmVzcG9uc2UtPmN1cnJlbmN5X2lkOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCSRwcm9kdWN0LT51cmwgPSAkdGhpcy0+c2hvcHVybCAuICcmcGlkPScgLiAkcHJvZHVjdC0+cGlkOw0KCQkJCQkJfQ0KCQkJCQkJLy8gd2Ugc2V0IHRoZSBhIHVybCBmb3IgZWFjaCBjdXJyZW5jeQ0KCQkJCQkJJHByb2R1Y3QtPnVybHMgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkkcHJvZHVjdC0+bW9udGhseSA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkJCWZvcmVhY2ggKCRyZXNwb25zZS0+Y3VycmVuY2llcyBhcyAkX2N1cnJlbmN5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIG9ubHkgYWRkIGlmIHdlIGhhdmUgYSBwcmljZSBmb3IgdGhhdCBjdXJyZW5jeQ0KCQkJCQkJCWlmIChpc3NldCgkcHJvZHVjdC0+cHJpY2luZy0+eyRfY3VycmVuY3ktPmNvZGV9KSAgJiYgJHRoaXMtPmNoZWNrT2JqZWN0KCRwcm9kdWN0LT5wcmljaW5nLT57JF9jdXJyZW5jeS0+Y29kZX0pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gY3VycmVuY3kgJiBiaWxsaW5nY3ljbGUgdXJsDQoJCQkJCQkJCSRwcm9kdWN0LT51cmxzLT57JF9jdXJyZW5jeS0+Y29kZX0gPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkJCSRwcm9kdWN0LT5tb250aGx5LT57JF9jdXJyZW5jeS0+Y29kZX0gPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkJCWZvcmVhY2ggKCRwcm9kdWN0LT5wcmljaW5nLT57JF9jdXJyZW5jeS0+Y29kZX0gYXMgJGJpbGxpbmdjeWNsZSA9PiAkY29zdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJaWYgKGlzX251bWVyaWMoJGNvc3QpICYmICcwLjAwJyAhPT0gJGNvc3QgJiYgKCdtb250aGx5JyA9PT0gJGJpbGxpbmdjeWNsZSB8fCBpc3NldCgkZGl2aWRlWyRiaWxsaW5nY3ljbGVdKSkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJHByb2R1Y3QtPnVybHMtPnskX2N1cnJlbmN5LT5jb2RlfS0+eyRiaWxsaW5nY3ljbGV9ID0gJHRoaXMtPnNob3B1cmwgLiAnJnBpZD0nIC4gJHByb2R1Y3QtPnBpZCAuICcmY3VycmVuY3k9JyAuICRfY3VycmVuY3ktPmlkIC4gJyZiaWxsaW5nY3ljbGU9JyAuICRiaWxsaW5nY3ljbGU7DQoJCQkJCQkJCQkJLy8gc2V0IHRoZSBtb250aGx5IHByaWNlDQoJCQkJCQkJCQkJaWYgKGlzc2V0KCRkaXZpZGVbJGJpbGxpbmdjeWNsZV0pKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJHByb2R1Y3QtPm1vbnRobHktPnskX2N1cnJlbmN5LT5jb2RlfS0+eyRiaWxsaW5nY3ljbGV9ID0gJHRoaXMtPmJjbWF0aCgnZGl2JywgJGNvc3QsICRkaXZpZGVbJGJpbGxpbmdjeWNsZV0sIDIpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQllbHNlaWYgKCdtb250aGx5JyA9PT0gJGJpbGxpbmdjeWNsZSkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSRwcm9kdWN0LT5tb250aGx5LT57JF9jdXJyZW5jeS0+Y29kZX0tPnskYmlsbGluZ2N5Y2xlfSA9ICRjb3N0Ow0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIHNldCB0aGUgZ2xvYmFsIGF2YWlsYWJsZSBwYXltZW50IG9wdGlvbnMgKHllcyB0aGUgZmlyc3QgcHJvZHVjdCBzZXRzIHRoZSBzdGFnZSkNCgkJCQkJCWlmICghaXNzZXQoJHJlc3BvbnNlLT5wYXltZW50X29wdGlvbnNfc2V0KSAmJiAncmVjdXJyaW5nJyA9PT0gJHByb2R1Y3QtPnBheXR5cGUgJiYgaXNzZXQoJHByb2R1Y3QtPnByaWNpbmctPiRjdXJyZW5jeSkpDQoJCQkJCQl7DQoJCQkJCQkJJHJlc3BvbnNlLT5wYXltZW50X29wdGlvbnMgPSBhcnJheSgpOw0KCQkJCQkJCWZvcmVhY2ggKCRwcm9kdWN0LT5wcmljaW5nLT4kY3VycmVuY3kgYXMgJGsgPT4gJHYpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoaXNfbnVtZXJpYygkdikgJiYgJzAuMDAnICE9PSAkdiAmJiBzdHJwb3MoJGssICdzZXR1cGZlZScpID09PSBmYWxzZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHJlc3BvbnNlLT5wYXltZW50X29wdGlvbnNbXSA9ICRrOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGNoZWNrIGlmIHdlIHN1Y2NlZWRlZA0KCQkJCQkJCWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkcmVzcG9uc2UtPnBheW1lbnRfb3B0aW9ucykpDQoJCQkJCQkJew0KCQkJCQkJCQkkcmVzcG9uc2UtPnBheW1lbnRfb3B0aW9uc19zZXQgPSB0cnVlOw0KCQkJCQkJCQkkcmVzcG9uc2UtPnBheW1lbnRfb3B0aW9uID0gJ21vbnRobHknOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIG5vdyBleHRyYWN0IHRoZSBzZXR0aW5ncw0KCQkJCQkJJHNldHRpbmdzID0gJHRoaXMtPmdldEFsbEJldHdlZW4oJHByb2R1Y3QtPmRlc2NyaXB0aW9uLCAkd2htY3Nfb3BlbiwgJHdobWNzX2Nsb3NpbmcpOw0KCQkJCQkJaWYgKCR0aGlzLT5jaGVja0FycmF5KCRzZXR0aW5ncykpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJHNldHRpbmdzIGFzICRzZXR0aW5nKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gbWFrZSBzdXJlIHRvIHJlbW92ZSB0aGVzZSBzZXR0aW5ncw0KCQkJCQkJCQkkcmVtb3ZlX2Rlc2NbJHdobWNzX29wZW4gLiAkc2V0dGluZyAuICR3aG1jc19jbG9zaW5nXSA9ICcnOw0KCQkJCQkJCQkvLyBvbmx5IGNvbnRpbnVlIGlmIHNldCBjb3JyZWN0bHkNCgkJCQkJCQkJaWYgKHN0cnBvcygkc2V0dGluZywgJz4nKSAhPT0gZmFsc2UpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXR0aW5nID0gdHJpbShleHBsb2RlKCc+JywgdHJpbSgkc2V0dGluZykpWzBdKTsNCgkJCQkJCQkJCWlmIChzdHJwb3MoJHNldHRpbmcsICc9JykgIT09IGZhbHNlKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRzZXR0aW5nID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnPScsICRzZXR0aW5nKSk7DQoJCQkJCQkJCQkJJHNfa2V5ID0gYXJyYXlfc2hpZnQoJHNldHRpbmcpOw0KCQkJCQkJCQkJCS8vIGNvbGxhcHNlIHRvIHN0cmluZyBhZ2Fpbg0KCQkJCQkJCQkJCSRzZXR0aW5nID0gaW1wbG9kZSgnJywgJHNldHRpbmcpOw0KCQkJCQkJCQkJCWlmIChzdHJwb3MoJHNldHRpbmcsICd8JykgIT09IGZhbHNlKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJHByb2R1Y3QtPnskc19rZXl9ID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCR2KSB1c2UoJGZpeF91cmwpew0KCQkJCQkJCQkJCQkJcmV0dXJuIHRyaW0oc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkZml4X3VybCksIGFycmF5X3ZhbHVlcygkZml4X3VybCksICR2KSk7DQoJCQkJCQkJCQkJCX0sIGV4cGxvZGUoJ3wnLCAkc2V0dGluZykpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkcHJvZHVjdC0+eyRzX2tleX0gPSBzdHJfcmVwbGFjZShhcnJheV9rZXlzKCRmaXhfdXJsKSwgYXJyYXlfdmFsdWVzKCRmaXhfdXJsKSwgJHNldHRpbmcpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2VpZiAoJHRoaXMtPmNoZWNrU3RyaW5nKCRzZXR0aW5nKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkcHJvZHVjdC0+eyRzZXR0aW5nfSA9IHRydWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQkvLyB1cGRhdGUgdGhlIGRlc2NyaXB0aW9ucw0KCQkJCQkJJHByb2R1Y3QtPmRlc2NyaXB0aW9uID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkcmVtb3ZlX2Rlc2MpLCBhcnJheV92YWx1ZXMoJHJlbW92ZV9kZXNjKSwgJHByb2R1Y3QtPmRlc2NyaXB0aW9uKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBsb2FkIHRvIHBsdWdpbiBtZW1vcnkNCgkJCQkkdGhpcy0+cHJvZHVjdHNbJGtleV0gPSAkcmVzcG9uc2U7DQoJCQkJLy8gcmV0dXJuIG9iamVjdA0KCQkJCXJldHVybiAkdGhpcy0+cHJvZHVjdHNbJGtleV07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgZ2V0cyB0aGUgY3VycmVuY2llcyANCgkgKg0KCSAqIEByZXR1cm4gIG9iamVjdHxmYWxzZQ0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEN1cnJlbmNpZXMoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jaGVja09iamVjdCgkdGhpcy0+Y3VycmVuY2llcykpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+Y3VycmVuY2llczsNCgkJfQ0KCQkvLyB3ZSBtYWtlIGEgbmV3IGNhbGwNCgkJJGNoID0gY3VybF9pbml0KCk7DQoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR0aGlzLT51cmwgLiAnL2luY2x1ZGVzL2FwaS5waHAnKTsNCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywNCgkJCWh0dHBfYnVpbGRfcXVlcnkoDQoJCQkJYXJyYXkoDQoJCQkJCSdhY3Rpb24nID0+ICdHZXRDdXJyZW5jaWVzJywNCgkJCQkJJ3VzZXJuYW1lJyA9PiAkdGhpcy0+dXNlcm5hbWUsDQoJCQkJCSdwYXNzd29yZCcgPT4gJHRoaXMtPnBhc3N3b3JkLA0KCQkJCQkncmVzcG9uc2V0eXBlJyA9PiAnanNvbicNCgkJCQkpDQoJCQkpDQoJCSk7DQoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQoJCSRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOw0KCQljdXJsX2Nsb3NlKCRjaCk7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEganNvbiBzdHJpbmcNCgkJaWYgKCR0aGlzLT5jaGVja0pzb24oJHJlc3BvbnNlKSkNCgkJew0KCQkJLy8gbG9hZCB0byBwbHVnaW4gbWVtb3J5DQoJCQkkdGhpcy0+Y3VycmVuY2llcyA9IGpzb25fZGVjb2RlKCRyZXNwb25zZSk7DQoJCQkvLyByZXR1cm4gb2JqZWN0DQoJCQlyZXR1cm4gJHRoaXMtPmN1cnJlbmNpZXM7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPXBsdWdpbkhlbHBlcnNdDQpbQ1VTVE9NQ09ERT10aGlzYmNtYXRoXQ==', 'WHMCSProducts', '', '', '', '', '', '', '', '1.0.3', '{\"property_selection0\":{\"property\":\"7\"},\"property_selection1\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'WHMCS Products', '', 1, '', '', 1, '2019-11-17 01:24:51', '2024-08-06 20:54:49', 85, '', 5),
-(10, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to add packaging (bundling of extentions) to JCB. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{}', '63eb11cc-41ba-4c2f-82b3-94487b0caa12', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEFwcGxpY2F0aW9uXENNU0FwcGxpY2F0aW9uOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjs=', 11, '{}', '', '[[[Component]]] Extention Packaging', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.0.2', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Extention Packaging', '', 1, '', '', 1, '2020-03-19 12:10:12', '2024-08-06 20:54:54', 8, '', 2),
-(11, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to link your components to the language packaging and extending options, so you can set all the required details for the integration.', '{\"fields0\":{\"file\":\"joomla_component\",\"fields_name\":\"params.language_options\",\"fieldset\":\"language_options\",\"label\":\"Language Options\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2740\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2604\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2746\",\"custom_value\":\"1\"},\"fields3\":{\"field\":\"2745\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2742\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2741\",\"custom_value\":\"\"}}}}', '7f2c7689-0f46-41c8-ba69-e33cd92cb20f', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEFwcGxpY2F0aW9uXENNU0FwcGxpY2F0aW9uOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcUmVnaXN0cnlcUmVnaXN0cnk7DQp1c2UgSm9vbWxhXENNU1xGb3JtXEZvcm07', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uDQoJICoNCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZXBhcmVGb3JtKEZvcm0gJGZvcm0sICRkYXRhKQ0KCXsNCgkJJGNvbnRleHQgPSAkZm9ybS0+Z2V0TmFtZSgpOw0KDQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoc3RycG9zKCRjb250ZXh0LCAnY29tX1tbW2NvbXBvbmVudF1dXS5qb29tbGFfY29tcG9uZW50JykgPT09IDApDQoJCXsNCgkJCS8vIEFkZCB0aGUgZm9ybXMgcGF0aA0KCQkJRm9ybTo6YWRkRm9ybVBhdGgoX19ESVJfXyAuICcvZm9ybXMnKTsNCgkJCS8vIGFkZCB0aGUgYWRtaW4gdmlldyBwYXJhbXMgZm9yIHByaXZhY3kgaW50ZWdyYXRpb24NCgkJCSRmb3JtLT5sb2FkRmlsZSgnam9vbWxhX2NvbXBvbmVudCcpOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg==', '[[[Component]]] Language Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDBd', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Language Tabs', '', 1, '', '', 1, '2020-03-19 15:27:41', '2024-08-06 20:55:08', 28, '', 2),
-(12, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'The [[[core]]] branding override.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Company Details\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"681\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"1310\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"280\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"691\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"1169\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"1160\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"1156\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"1005\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"1006\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"1004\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"1008\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"1007\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2392\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"1311\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"1313\",\"custom_value\":\"\"}}}}', '32674996-ce5c-452a-9810-af715d5170e3', '', 11, '{}', 'LyoqDQoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4NCgkgKg0KCSAqIEB2YXIgICAgYm9vbGVhbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIG9uR2V0Q29tcGFueURldGFpbHMuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25HZXRDb21wYW55RGV0YWlscygkZGV0YWlscywgJGYsICRiKQ0KCXsNCgkJLy8gYWRkIHlvdXIgY29kZSBoZXJlDQoJCXZhcl9kdW1wKCRkZXRhaWxzKTtqZXhpdCgpOw0KCX0NCg0KCS8qKg0KCSAqIG9uR2V0VGVtcGxhdGUuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25HZXRUZW1wbGF0ZSgkY29udGV4dCwgJGRldGFpbHMpDQoJew0KCQkvLyBhZGQgeW91ciBjb2RlIGhlcmUNCgkJdmFyX2R1bXAoJGNvbnRleHQsICRkZXRhaWxzKTtqZXhpdCgpOw0KCX0=', '[[[core]]]BrandingOverride', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb3JlXV1dIGlzIGluc3RhbGxlZA0KCQkJJHBhdGhUb0NvcmUgPSBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb3JlXV1dL2hlbHBlcnMvW1tbY29yZV1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29yZV1dXSBtdXN0IGZpcnN0IGJlIGluc3RhbGxlZCBmcm9tIDxhIGhyZWY9IltbW2dldF9jb21wb25lbnRfbGlua11dXSIgdGFyZ2V0PSJfYmxhbmsiPltbW2NvbXBvbmVudF9saW5rX25hbWVdXV08L2E+LicsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0=', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'CoreBrandingOverride', '', 1, '', '', 1, '2020-03-23 02:18:28', '2024-08-06 20:55:13', 16, '', 6),
-(13, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set custom ordering to fields in the JCB list views.', '{\"fields0\":{\"file\":\"admin_view\",\"fields_name\":\"params.fieldordering\",\"fieldset\":\"fieldordering\",\"label\":\"Field Ordering\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2751\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2753\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2749\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2754\",\"custom_value\":\"\"}}}}', '5b21d4c5-fe7c-4d71-8eb9-1e6be3e2f662', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uDQoJICoNCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZXBhcmVGb3JtKEZvcm0gJGZvcm0sICRkYXRhKQ0KCXsNCgkJJGNvbnRleHQgPSAkZm9ybS0+Z2V0TmFtZSgpOw0KDQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoc3RycG9zKCRjb250ZXh0LCAnY29tX1tbW2NvbXBvbmVudF1dXS5hZG1pbl92aWV3JykgPT09IDApDQoJCXsNCgkJCS8vIEFkZCB0aGUgZm9ybXMgcGF0aA0KCQkJRm9ybTo6YWRkRm9ybVBhdGgoX19ESVJfXyAuICcvZm9ybXMnKTsNCgkJCS8vIGFkZCB0aGUgYWRtaW4gdmlldyBwYXJhbXMgZm9yIHByaXZhY3kgaW50ZWdyYXRpb24NCgkJCSRmb3JtLT5sb2FkRmlsZSgnYWRtaW5fdmlldycpOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0=', '[[[Component]]] Field Ordering Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDBd', '', '', '', '1.0.3', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Field Ordering Tabs', '', 1, '', '', 1, '2020-05-20 12:52:37', '2024-08-06 20:55:17', 25, '', 2),
-(14, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set the ordring for your component views during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to set your admin views where you would like to use Field Ordering.', '{}', '752b8c09-8848-4519-8c94-3e61c735935f', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcRmFjdG9yeSBhcyBDRmFjdG9yeTs=', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"}}', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxWaWV3RGF0YSgmJHZpZXcpDQoJew0KCQkvLyBhZGQgdGhlIHByaXZhY3kNCgkJJHZpZXctPnBhcmFtcyA9IChpc3NldCgkdmlldy0+cGFyYW1zKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zKSkgPyBqc29uX2RlY29kZSgkdmlldy0+cGFyYW1zLCB0cnVlKSA6ICR2aWV3LT5wYXJhbXM7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zKSAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXNbJ2ZpZWxkb3JkZXJpbmcnXSkpDQoJCXsNCgkJCWlmICgkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ11bJ2FkZF9hZG1pbl9vcmRlcmluZyddID09IDENCgkJCQl8fCAkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ11bJ2FkZF9saW5rZWRfb3JkZXJpbmcnXSA9PSAxKQ0KCQkJew0KCQkJCS8vIHNldHVwIHRoZSB2aWV3IGtleSBuYW1lDQoJCQkJJG5hbWVfbGlzdCAgID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCQkvLyBsb2FkIHRoZSBhZG1pbiB2aWV3IGRldGFpbHMNCgkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5WaWV3cy5EZWZhdWx0Lk9yZGVyaW5nJyktPnNldCgkbmFtZV9saXN0LCAkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ10pOw0KCQkJfQ0KCQl9DQoJfQ==', '[[[Component]]] Field Ordering Compiler', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDBd', '', '', '', '1.1.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Field Ordering Compiler', '', 1, '', '', 1, '2020-05-21 12:55:05', '2024-08-06 20:55:23', 22, '', 3),
-(15, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set the custom headers for your classes during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to set your code where you would like to set Custom Headers.', '{}', 'dff42201-b4d4-442d-85d4-aa3ca3104e37', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcRmFjdG9yeSBhcyBDRmFjdG9yeTs=', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"},\"method_selection2\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEdsb2JhbCBzd2l0Y2ggdG8gc2VlIGlmIGEgZmlsZSBoYXMgY3VzdG9tIGhlYWRlcnMuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRsb2FkSGVhZGVycyA9IGZhbHNlOw0KDQoJLyoqDQoJICogVGhlIGFjdGl2ZSBoZWFkZXJzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuOA0KCSAqLw0KCXByb3RlY3RlZCAkYWN0aXZlSGVhZGVycyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBUaGUgY29tcGlsZXIgcGxhY2Vob2xkZXJzIHZhbHVlcw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjYNCgkgKi8NCglwcm90ZWN0ZWQgJHBsYWNlaG9sZGVycyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBUaGUgcG93ZXJzIHRvIGluY2x1ZGUgaW4gcHJvamVjdA0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjYNCgkgKi8NCglwcm90ZWN0ZWQgJGxpbmtlZFBvd2VycyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBUaGUgVGFyZ2V0cw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjgNCgkgKi8NCglwcm90ZWN0ZWQgJHRhcmdldHMgPSBhcnJheSgNCgkJJ2FkbWluX3ZpZXdfaGVhZGVycycgICAgICAgICAgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfYWRtaW5fdmlld19tb2RlbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fdmlld19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4udmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9zaW5nbGUnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXcnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXcnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXcnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfc2luZ2xlJw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3X2h0bWwnICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9zaW5nbGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfYWRtaW5fdmlld19odG1sJyAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfYWRtaW5fdmlld19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLmFkbWluLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9zaW5nbGUnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXdfY29udHJvbGxlcicgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4udmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX3NpbmdsZScNCgkJCQkpLA0KCQkJCSdhZGRfYWpheF9tb2RlbCcgICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWpheF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWpheC5hZG1pbi5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnYWpheCcNCgkJCQkpLA0KCQkJCSdhZGRfYWRtaW5fdmlld3NfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fdmlld3NfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXdzLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX2xpc3QnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXdzJyAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdzJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3c19odG1sJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3c19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3cy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX2xpc3QnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXdzLmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfbGlzdCcNCgkJCQkpLA0KCQkJCSdhZGRfaW1wb3J0X2N1c3RvbV9jb250cm9sbGVyJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdpbXBvcnRfY3VzdG9tX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2ltcG9ydC5jdXN0b20uY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSksDQoJCQkJJ2FkZF9pbXBvcnRfY3VzdG9tX21vZGVsJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdpbXBvcnRfY3VzdG9tX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdpbXBvcnQuY3VzdG9tLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX2xpc3QnDQoJCQkJKQ0KCQkJKSwNCgkJJ3NpdGVfdmlld19oZWFkZXJzJyAgICAgICAgICAgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfc2l0ZV92aWV3X21vZGVsJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3JyAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXcnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3X2h0bWwnICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld19jb250cm9sbGVyJyAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3NfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3MnICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3cycsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19odG1sJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19jb250cm9sbGVyJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfYWpheF9tb2RlbCcgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhamF4X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhamF4LnNpdGUubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2FqYXgnDQoJCQkJKQ0KCQkJKSwNCgkJJ2N1c3RvbV9hZG1pbl92aWV3X2hlYWRlcnMnICAgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfbW9kZWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXcnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X2NvbnRyb2xsZXInICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3cycgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3MnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfYWpheF9tb2RlbCcgICAgICAgICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FqYXhfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FqYXguYWRtaW4ubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2FqYXgnDQoJCQkJKQ0KCQkJKSwNCgkJJ2R5bmFtaWNfZ2V0X2hlYWRlcnMnICAgICAgICAgICA9Pg0KCQkJYXJyYXkoDQoJCQkJJ2FkZF9zaXRlX3ZpZXdfbW9kZWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3Lm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXcnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlldycsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3JywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdfaHRtbCcgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3X2NvbnRyb2xsZXInICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3LmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3NfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3c19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3cycgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXdzJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzX2h0bWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3NfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3NfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19tb2RlbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3Lm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlldycgICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXcnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3JywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19odG1sJyAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfY29udHJvbGxlcicgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3LmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19tb2RlbCcgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzJyAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3cycsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXdzJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfaHRtbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfY29udHJvbGxlcicgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9hamF4X21vZGVsJyAgICAgICAgICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWpheF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWpheC5hZG1pbi5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnYWpheCcNCgkJCQkpDQoJCQkpLA0KCQknY29tcG9uZW50X2Rhc2hib2FyZF9oZWFkZXJzJyA9Pg0KCQkJYXJyYXkoDQoJCQkJJ2FkZF9kYXNoYm9hcmRfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnZGFzaGJvYXJkX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdkYXNoYm9hcmQubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2Rhc2hib2FyZCcNCgkJCQkpLA0KCQkJCSdhZGRfZGFzaGJvYXJkX3ZpZXcnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2Rhc2hib2FyZF92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdkYXNoYm9hcmQudmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnZGFzaGJvYXJkJw0KCQkJCSksDQoJCQkJJ2FkZF9kYXNoYm9hcmRfdmlld19odG1sJyAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnZGFzaGJvYXJkX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnZGFzaGJvYXJkLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnZGFzaGJvYXJkJw0KCQkJCSksDQoJCQkJJ2FkZF9kYXNoYm9hcmRfY29udHJvbGxlcicgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnZGFzaGJvYXJkX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2Rhc2hib2FyZC5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdkYXNoYm9hcmQnDQoJCQkJKSwNCgkJCQknYWRkX2FqYXhfbW9kZWwnICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhamF4X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhamF4LmFkbWluLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdhamF4Jw0KCQkJCSkNCgkJCSksDQoJCSdqb29tbGFfY29tcG9uZW50X2hlYWRlcnMnICAgID0+DQoJCQlhcnJheSgNCgkJCQknYWRkX2FkbWluX2NvbXBvbmVudCcgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fY29tcG9uZW50JywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi5jb21wb25lbnQnLA0KCQkJCQkndmlldycgICAgPT4gJ2FkbWluJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX2NvbXBvbmVudCcgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfY29tcG9uZW50JywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLmNvbXBvbmVudCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnc2l0ZScNCgkJCQkpLA0KCQkJCSdhZGRfYWRtaW5faGVscGVyJyAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl9oZWxwZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLmhlbHBlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnYWRtaW4nDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfaGVscGVyJyAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV9oZWxwZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUuaGVscGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdzaXRlJw0KCQkJCSkNCgkJCSkNCgkpOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGNoZWNrIHRoYXQgdGhlIHBhcmFtcyBhcmUgc2V0DQoJCWlmIChpc3NldCgkdmlldy0+cGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgQWRtaW4gVmlld3MNCgkJCSR0aGlzLT5zZXRIZWFkZXJzKCR2aWV3LT5wYXJhbXMsICR2aWV3LCAnYWRtaW5fdmlld19oZWFkZXJzJyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgTW9kZWwgQ3VzdG9tIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZU1vZGVsQ3VzdG9tVmlld0RhdGEoJiR2aWV3LCAmJGlkLCAmJHRhYmxlKQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB0aGUgcGFyYW1zIGFyZSBzZXQNCgkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXMpKQ0KCQl7DQoJCQkvLyBhZGQgdGhlIGhlYWRlcnMgZm9yIHRoZSBTaXRlIFZpZXdzDQoJCQkkdGhpcy0+c2V0SGVhZGVycygkdmlldy0+cGFyYW1zLCAkdmlldywgJ3NpdGVfdmlld19oZWFkZXJzJyk7DQoJCQkvLyBhZGQgdGhlIGhlYWRlcnMgZm9yIHRoZSBDdXN0b20gQWRtaW4gVmlld3MNCgkJCSR0aGlzLT5zZXRIZWFkZXJzKCR2aWV3LT5wYXJhbXMsICR2aWV3LCAnY3VzdG9tX2FkbWluX3ZpZXdfaGVhZGVycycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIER5bmFtaWMgR2V0IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuMTANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxEeW5hbWljR2V0RGF0YSgmJGR5bmFtaWNHZXQsICYkaWQsICYkY29kZSwgJiRhcmVhKQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB0aGUgcGFyYW1zIGFyZSBzZXQNCgkJaWYgKGlzc2V0KCRkeW5hbWljR2V0LT5wYXJhbXMpKQ0KCQl7DQoJCQkvLyBhZGQgdGhlIGhlYWRlcnMgZm9yIHRoZSBTaXRlIFZpZXdzDQoJCQkkdGhpcy0+c2V0RHluYW1pY0hlYWRlcnMoJGR5bmFtaWNHZXQtPnBhcmFtcywgJGNvZGUsICdkeW5hbWljX2dldF9oZWFkZXJzJyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgTW9kZWwgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbENvbXBvbmVudERhdGEoJiRjb21wb25lbnQpDQoJew0KCQkvLyBjaGVjayB0aGF0IHRoZSBwYXJhbXMgYXJlIHNldA0KCQlpZiAoaXNzZXQoJGNvbXBvbmVudC0+cGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgSm9vbWxhIENvbXBvbmVudA0KCQkJJHRoaXMtPnNldEhlYWRlcnMoJGNvbXBvbmVudC0+cGFyYW1zLCAkY29tcG9uZW50LCAnam9vbWxhX2NvbXBvbmVudF9oZWFkZXJzJyk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgZGFzaGJvYXJkIHBhcmFtcyBhcmUgc2V0DQoJCWlmIChpc3NldCgkY29tcG9uZW50LT5kYXNoYm9hcmRfcGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgQ29tcG9uZW50IERhc2hib2FyZA0KCQkJJHRoaXMtPnNldEhlYWRlcnMoJGNvbXBvbmVudC0+ZGFzaGJvYXJkX3BhcmFtcywgJGNvbXBvbmVudCwgJ2NvbXBvbmVudF9kYXNoYm9hcmRfaGVhZGVycycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gc2V0IENsYXNzIEhlYWRlcl0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfc2V0Q2xhc3NIZWFkZXIoJiRldmVudF9jb250ZXh0LCAmJHZpZXdfbmFtZSwgJiRoZWFkZXJzKQ0KCXsNCgkJaWYgKCR0aGlzLT5sb2FkSGVhZGVycyAmJiBpc3NldCgkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXSkNCgkJCSYmIGlzc2V0KCR0aGlzLT5hY3RpdmVIZWFkZXJzWyR2aWV3X25hbWVdWyRldmVudF9jb250ZXh0XSkNCgkJCSYmIGlzX2FycmF5KCR0aGlzLT5hY3RpdmVIZWFkZXJzWyR2aWV3X25hbWVdWyRldmVudF9jb250ZXh0XSkpDQoJCXsNCgkJCS8vIHdvcmsgd2l0aCB0aGUgaGVhZGVyIHZhbHVlcyBhcyBrZXlzDQoJCQkkX2hlYWRlcnMgPSBhcnJheV9mbGlwKCRoZWFkZXJzKTsNCg0KCQkJLy8gbmV3IGhlYWRlcnMNCgkJCSRuZXcgPSAkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZXZlbnRfY29udGV4dF07DQoNCgkJCS8vIG5vdyBhZGQgdGhlIG5ldyBoZWFkZXJzDQoJCQlmb3JlYWNoICgkbmV3IGFzICRuID0+ICRoZWFkZXIpDQoJCQl7DQoJCQkJLy8gaWYgYW4gZW1wdHkgbGluZSBpcyBmb3VuZCBqdXN0IHNraXAgaXQgDQoJCQkJLy8gd2UgY2hlY2sgaWYgdGhpcyBoZWFkZXIgaXMgYWxyZWFkeSBzZXQNCgkJCQlpZiAoZW1wdHkoJGhlYWRlcikgfHwgaXNzZXQoJF9oZWFkZXJzWyRoZWFkZXJdKSkNCgkJCQl7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkkaGVhZGVyc1tdID0gJGhlYWRlcjsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBHZXQgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuNg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVHZXRDb21wb25lbnREYXRhKCkNCgl7DQoJCS8vIGdldCBwbGFjZWhvbGRlcnMgZnJvbSB0aGUgY29tcGlsZXINCgkJJHRoaXMtPnBsYWNlaG9sZGVycyA9IENGYWN0b3J5OjpfKCdDb21wb25lbnQuUGxhY2Vob2xkZXInKS0+Z2V0KCk7DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQWZ0ZXIgR2V0IENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjYNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXRDb21wb25lbnREYXRhKCkNCgl7DQoJCS8vIGFkZCB0aGUgcG93ZXJzIHRvIHRoZSBjb21wb25lbnQNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5saW5rZWRQb3dlcnMsIHRydWUpKQ0KCQl7DQoJCQlDRmFjdG9yeTo6XygnUG93ZXInKS0+bG9hZCgkdGhpcy0+bGlua2VkUG93ZXJzKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIHNldCB0aGUgaGVhZGVycw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjgNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0SGVhZGVycygmJHBhcmFtcywgJiRvYmosICRrZXkpDQoJew0KCQkvLyBhZGQgdGhlIGhlYWRlcnMNCgkJJHBhcmFtcyA9IChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zKSkgPyBqc29uX2RlY29kZSgkcGFyYW1zLCB0cnVlKSA6ICRwYXJhbXM7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBrZXlzIHZhbHVlcyBpbiB0aGUgcGFyYW1zIGFyZWENCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwYXJhbXMpICYmIGlzc2V0KCRwYXJhbXNbJGtleV0pDQoJCQkmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zWyRrZXldKSkNCgkJew0KCQkJZm9yZWFjaCAoJHRoaXMtPnRhcmdldHNbJGtleV0gYXMgJHRhcmdldCA9PiAkZXZlbnQpDQoJCQl7DQoJCQkJaWYgKGlzc2V0KCRwYXJhbXNbJGtleV1bJHRhcmdldF0pDQoJCQkJCSYmICRwYXJhbXNbJGtleV1bJHRhcmdldF0gPT0gMSkNCgkJCQl7DQoJCQkJCS8vIGdldCB0aGUgaGVhZGVyIHN0cmluZyBpZiBzZXQNCgkJCQkJJHRoaXMtPmdldEhlYWRlcnMoDQoJCQkJCQkkcGFyYW1zWyRrZXldLA0KCQkJCQkJJGV2ZW50LA0KCQkJCQkJJHRoaXMtPmdldFZpZXdOYW1lKA0KCQkJCQkJCSRvYmosDQoJCQkJCQkJJGV2ZW50Wyd2aWV3J10NCgkJCQkJCSkNCgkJCQkJKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBzZXQgdGhlIGR5bmFtaWMgZ2V0IGhlYWRlcnMNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC4xMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXREeW5hbWljSGVhZGVycygkcGFyYW1zLCAkY29kZSwgJGtleSkNCgl7DQoJCS8vIGFkZCB0aGUgaGVhZGVycw0KCQkkcGFyYW1zID0gKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRwYXJhbXMpKSA/IGpzb25fZGVjb2RlKCRwYXJhbXMsIHRydWUpIDogJHBhcmFtczsNCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGtleXMgdmFsdWVzIGluIHRoZSBwYXJhbXMgYXJlYQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBhcmFtcykgJiYgaXNzZXQoJHBhcmFtc1ska2V5XSkNCgkJCSYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwYXJhbXNbJGtleV0pKQ0KCQl7DQoJCQlmb3JlYWNoICgkdGhpcy0+dGFyZ2V0c1ska2V5XSBhcyAkdGFyZ2V0ID0+ICRldmVudCkNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJHBhcmFtc1ska2V5XVskdGFyZ2V0XSkNCgkJCQkJJiYgJHBhcmFtc1ska2V5XVskdGFyZ2V0XSA9PSAxKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBoZWFkZXIgc3RyaW5nIGlmIHNldA0KCQkJCQkkdGhpcy0+Z2V0SGVhZGVycygNCgkJCQkJCSRwYXJhbXNbJGtleV0sDQoJCQkJCQkkZXZlbnQsDQoJCQkJCQkkY29kZQ0KCQkJCQkpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgaGVhZGVycw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhlYWRlcnMoJiRwYXJhbXMsICYkZ2V0LCAkdmlld19uYW1lKQ0KCXsNCgkJLy8gd2UgZmlyc3QgY2hlY2sgaWYgdGhlIHZhbHVlIGlzIHNldA0KCQlpZiAoaXNzZXQoJHBhcmFtc1skZ2V0WydmaWVsZCddXSkgfHwgaXNzZXQoJHBhcmFtc1sncG93ZXJfJyAuICRnZXRbJ2ZpZWxkJ11dKSkNCgkJew0KCQkJLy8gc3RhcnQgbGl0dGxlIGhlYWRlcnMgYnVja2V0DQoJCQkkaGVhZGVycyA9IFtdOw0KDQoJCQkvLyBsb2FkIHRoZSBoZWFkZXJzIGlmIHBvd2VyDQoJCQlpZiAoaXNzZXQoJHBhcmFtc1sncG93ZXJfJyAuICRnZXRbJ2ZpZWxkJ11dKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zWydwb3dlcl8nIC4gJGdldFsnZmllbGQnXV0sIHRydWUpDQoJCQkJJiYgKCRwb3dlcnMgPSAkdGhpcy0+Z2V0UG93ZXJzKCRwYXJhbXNbJ3Bvd2VyXycgLiAkZ2V0WydmaWVsZCddXSkpICE9PSBudWxsKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRwb3dlcnMgYXMgJHBvd2VyKQ0KCQkJCXsNCgkJCQkJJHBvd2VyID0gdHJpbSgkcG93ZXIpOw0KCQkJCQkkaGVhZGVyc1skcG93ZXJdID0gJHBvd2VyOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gbG9hZCB0aGUgaGVhZGVycyBpZiB0ZXh0DQoJCQlpZiAoaXNzZXQoJHBhcmFtc1skZ2V0WydmaWVsZCddXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHBhcmFtc1skZ2V0WydmaWVsZCddXSkpDQoJCQl7DQoJCQkJaWYgKCgkX2hlYWRlcnMgPSBleHBsb2RlKFBIUF9FT0wsICRwYXJhbXNbJGdldFsnZmllbGQnXV0pKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRfaGVhZGVycyBhcyAkaGVhZGVyKQ0KCQkJCQl7DQoJCQkJCQkkaGVhZGVyID0gdHJpbSgkaGVhZGVyKTsNCgkJCQkJCWlmIChlbXB0eSgkaGVhZGVyKSkNCgkJCQkJCXsNCgkJCQkJCQljb250aW51ZTsNCgkJCQkJCX0NCgkJCQkJCSRoZWFkZXJzWyRoZWFkZXJdID0gJGhlYWRlcjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gY2hlY2sgaWYgd2UgZm91bmQgc29tZSBoZWFkZXIgdmFsdWVzDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGhlYWRlcnMsIHRydWUpKQ0KCQkJew0KCQkJCS8vIGFjdGl2YXRlIHRoZSBsb2FkIG9mIHRoZSBoZWFkZXJzDQoJCQkJJHRoaXMtPmxvYWRIZWFkZXJzID0gdHJ1ZTsNCgkJCQkvLyBjaGVjayBpZiB0aGlzIGFjdGl2ZSBoZWFkZXIgaXMgYWxyZWFkeSBzZXQNCgkJCQlpZiAoIWlzc2V0KCR0aGlzLT5hY3RpdmVIZWFkZXJzWyR2aWV3X25hbWVdWyRnZXRbJ2NvbnRleHQnXV0pKQ0KCQkJCXsNCgkJCQkJLy8gc3RhcnQgdGhlIGFjdGl2ZSBoZWFkZXINCgkJCQkJJHRoaXMtPmFjdGl2ZUhlYWRlcnNbJHZpZXdfbmFtZV1bJGdldFsnY29udGV4dCddXSA9IFtdOw0KCQkJCX0NCgkJCQkvLyBsb2FkIHRoZSBmb3VuZCBoZWFkZXJzIGFuZCBhdm9pZCBhZGRpbmcgdGhlIHNhbWUgaGVhZGVyIHR3aWNlDQoJCQkJZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikNCgkJCQl7DQoJCQkJCSRoZWFkZXIgPSB0cmltKCRoZWFkZXIpOw0KCQkJCQkkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZ2V0Wydjb250ZXh0J11dWyRoZWFkZXJdID0gJGhlYWRlcjsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIHZpZXcgbmFtZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICoNCgkgKiBAc2luY2UgICAxLjAuOA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3TmFtZSgmJHZpZXcsICYkZ2V0KQ0KCXsNCgkJaWYgKCRnZXQgPT09ICdzaXRlJyB8fCAkZ2V0ID09PSAnYWRtaW4nIHx8ICRnZXQgPT09ICdhamF4JyB8fCAkZ2V0ID09PSAnZGFzaGJvYXJkJykNCgkJew0KCQkJLy8gc3RhdGljIGtleSBuYW1lDQoJCQlyZXR1cm4gJGdldDsNCgkJfQ0KCQllbHNlaWYgKGlzc2V0KCR2aWV3LT57JGdldH0pKQ0KCQl7DQoJCQlyZXR1cm4gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgNCgkJCQkkdmlldy0+eyRnZXR9DQoJCQkpOw0KCQl9DQoJCXJldHVybiAnX2Vycm9yJzsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIHBvd2VycyBoZWFkZXIgdXNlIHN0cmluZ3MNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5fG51bGwNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC42DQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFBvd2Vycygkcm93cyk6ID9hcnJheQ0KCXsNCgkJLy8gbG9hZCB0aGUgYWN0aXZlIHBvd2Vycw0KCQkkcG93ZXJzID0gYXJyYXlfZmlsdGVyKA0KCQkJLy8gZ2V0IHRoZSBwb3dlciBuYW1lc3BhY2UNCgkJCWFycmF5X21hcChmdW5jdGlvbiAoJHJvdykgew0KCQkJCWlmICgoJHBvd2VyID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRHVUlEKCRyb3dbJ3Bvd2VyJ10sICdwb3dlcicsIFsnYS5ndWlkJywgJ2EubmFtZXNwYWNlJ10pKSAhPT0gbnVsbCkNCgkJCQl7DQoJCQkJCQkkcG93ZXItPmJ1aWxkID0gKGludCkgJHJvd1snYnVpbGQnXTsNCgkJCQkJCSRwb3dlci0+YXMgPSAoc3RyaW5nKSAkcm93WydhcyddOw0KDQoJCQkJCQlyZXR1cm4gJHBvd2VyOw0KCQkJCX0NCgkJCQllbHNlaWYgKENGYWN0b3J5OjpfKCdTdXBlcnBvd2VyJyktPmxvYWQoJHJvd1sncG93ZXInXSwgIFsncmVtb3RlJ10pKQ0KCQkJCXsNCgkJCQkJaWYgKCgkcG93ZXIgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEdVSUQoJHJvd1sncG93ZXInXSwgJ3Bvd2VyJywgWydhLmd1aWQnLCAnYS5uYW1lc3BhY2UnXSkpICE9PSBudWxsKQ0KCQkJCQl7DQoJCQkJCQkkcG93ZXItPmJ1aWxkID0gKGludCkgJHJvd1snYnVpbGQnXTsNCgkJCQkJCSRwb3dlci0+YXMgPSAoc3RyaW5nKSAkcm93WydhcyddOw0KDQoJCQkJCQlyZXR1cm4gJHBvd2VyOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0sICRyb3dzKSwNCgkJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSB2YWxpZCBwb3dlcnMNCgkJCWZ1bmN0aW9uICgkcm93KSB7DQoJCQkJcmV0dXJuIGlzX29iamVjdCgkcm93KSAmJiBpc3NldCgkcm93LT5ndWlkKTsNCgkJCX0NCgkJKTsNCgkJLy8gYWRkIHRvIGFjdGl2ZSBwb3dlcnMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwb3dlcnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBkb3RzIHRvIG5hbWVzcGFjZQ0KCQkJcmV0dXJuIGFycmF5X21hcChmdW5jdGlvbiAoJHBvd2VyKSB7DQoJCQkJLy8gYWRkIHRvIGNvbXBpbGVyICh0byBidWlsZCkNCgkJCQlpZiAoJHBvd2VyLT5idWlsZCAhPSA2KQ0KCQkJCXsNCgkJCQkJLy8gc2VjdXJlIHRoYXQgYWx3YXlzIHdpbGwgcmVtYWluIGFsd2F5cyBldmVuIGlmIG9ubHkgc2V0IHRoYXQgd2F5IG9uY2UNCgkJCQkJaWYgKGVtcHR5KCR0aGlzLT5saW5rZWRQb3dlcnNbJHBvd2VyLT5ndWlkXSkgfHwgJHBvd2VyLT5idWlsZCA9PSAxKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+bGlua2VkUG93ZXJzWyRwb3dlci0+Z3VpZF0gPSAkcG93ZXItPmJ1aWxkOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIHRoZSBuYW1lc3BhY2UNCgkJCQkkbmFtZXNwYWNlID0gU3VwZXJfX19jZThjZjgzNF82YmFjXzQ0ZmJfOTQxY184NjFmN2UwNDZjYzBfX19Qb3dlcjo6c2FmZSgNCgkJCQkJc3RyX3JlcGxhY2UoDQoJCQkJCQlhcnJheV9rZXlzKCR0aGlzLT5wbGFjZWhvbGRlcnMpLA0KCQkJCQkJYXJyYXlfdmFsdWVzKCR0aGlzLT5wbGFjZWhvbGRlcnMpLA0KCQkJCQkJc3RyX3JlcGxhY2UoJy4nLCAnXFwnLCAkcG93ZXItPm5hbWVzcGFjZSkNCgkJCQkJKQ0KCQkJCSk7DQoJCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGFuIEFTIG9wdGlvbg0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcG93ZXItPmFzKSAmJiAkcG93ZXItPmFzICE9PSAnZGVmYXVsdCcpDQoJCQkJew0KCQkJCQlyZXR1cm4gJ3VzZSAnIC4gJG5hbWVzcGFjZSAuICcgYXMgJyAuICRwb3dlci0+YXMgLiAnOyc7DQoJCQkJfQ0KCQkJCXJldHVybiAndXNlICcgLiAkbmFtZXNwYWNlIC4gJzsnOw0KCQkJfSwgJHBvd2Vycyk7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQo=', '[[[Component]]] Headers Compiler', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywxLDE4XQ==', '', '', '', '2.3.1', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Headers Compiler', '', 1, '', '', 1, '2020-05-24 23:04:17', '2024-08-06 20:55:26', 127, '', 3),
-(16, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set admin class custom headers.', '{\"fields0\":{\"file\":\"admin_view\",\"fields_name\":\"params.admin_view_headers\",\"fieldset\":\"admin_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2849\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2846\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2969\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2983\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2985\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2968\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2886\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2884\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2995\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2850\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2845\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2967\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2844\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2847\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2966\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2984\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2986\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2965\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2885\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2883\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2996\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2851\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2848\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2964\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"2895\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"2896\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"2970\",\"custom_value\":\"\"},\"fields27\":{\"field\":\"2987\",\"custom_value\":\"\"},\"fields28\":{\"field\":\"2988\",\"custom_value\":\"\"},\"fields29\":{\"field\":\"2952\",\"custom_value\":\"\"},\"fields30\":{\"field\":\"2897\",\"custom_value\":\"\"},\"fields31\":{\"field\":\"2898\",\"custom_value\":\"\"},\"fields32\":{\"field\":\"2999\",\"custom_value\":\"\"},\"fields33\":{\"field\":\"3088\",\"custom_value\":\"\"},\"fields34\":{\"field\":\"3089\",\"custom_value\":\"\"},\"fields35\":{\"field\":\"3090\",\"custom_value\":\"\"},\"fields36\":{\"field\":\"3091\",\"custom_value\":\"\"},\"fields37\":{\"field\":\"3092\",\"custom_value\":\"\"},\"fields38\":{\"field\":\"3093\",\"custom_value\":\"\"},\"fields39\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields40\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields41\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', '9add2e9c-ec36-48ef-b8e5-939ade0149eb', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrYWRtaW5fdmlld10=', '[[[Component]]] Admin Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywxLDE4XQ==', '', '', '', '2.0.3', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Admin Headers Tabs', '', 1, '', '', 1, '2020-10-27 00:46:51', '2024-08-06 20:55:40', 64, '', 2),
-(17, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set site class custom headers.', '{\"fields0\":{\"file\":\"site_view\",\"fields_name\":\"params.site_view_headers\",\"fieldset\":\"site_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2855\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2859\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2963\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2981\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2980\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2962\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2890\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2887\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2993\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2854\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2860\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2961\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2856\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2858\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2960\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2982\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2979\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2959\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2889\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2888\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2994\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2853\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2857\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2958\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'ee258df8-057b-4039-a60d-e5b97e6fa6f3', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrc2l0ZV92aWV3XQ==', '[[[Component]]] Site Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.2', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Site Headers Tabs', '', 1, '', '', 1, '2020-12-08 03:18:35', '2024-08-06 20:56:18', 36, '', 2),
-(18, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set custom admin class custom headers.', '{\"fields0\":{\"file\":\"custom_admin_view\",\"fields_name\":\"params.custom_admin_view_headers\",\"fieldset\":\"custom_admin_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2866\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2862\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2971\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2990\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2991\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2957\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2893\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2892\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2998\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2867\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2861\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2956\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2865\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2863\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2955\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2989\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2992\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2954\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2894\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2891\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2997\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2868\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2864\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2953\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'b5e29027-f010-45ae-adb1-e8a1dde9a157', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrY3VzdG9tX2FkbWluX3ZpZXdd', '[[[Component]]] Custom Admin Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.2', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Custom Admin Headers Tabs', '', 1, '', '', 1, '2020-12-08 05:25:29', '2024-08-06 20:56:35', 38, '', 2),
-(19, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set component class custom headers.', '{\"fields0\":{\"file\":\"joomla_component\",\"fields_name\":\"params.joomla_component_headers\",\"fieldset\":\"joomla_component_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2871\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2872\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2974\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2873\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2874\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2975\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2878\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2877\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2973\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2875\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2876\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2972\",\"custom_value\":\"\"}}}}', 'ce453c88-6f87-4739-9340-de0416066ff4', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMram9vbWxhX2NvbXBvbmVudF0=', '[[[Component]]] Component Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.2', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Component Headers Tabs', '', 1, '', '', 1, '2020-12-26 16:49:54', '2024-08-06 20:56:52', 28, '', 2),
-(20, '', '', 1, '', 1, '', '', '', '', 1, '', '', '', 1, 'RSForm! Pro - Advance PHP', '{}', '693bcf07-6464-4bcd-9d32-2af49ebbca44', '', 8, '{}', 'CXByb3RlY3RlZCAkaGFzQWNjZXNzOw0KCXByb3RlY3RlZCAkVkRNX3Bvc3Q7DQoJcHJvdGVjdGVkICRWRE1fYWN0aXZlOw0KCXByb3RlY3RlZCAkVkRNX2NvZGU7DQoJcHJvdGVjdGVkICRWRE1fcnNmb3JtX2lkOw0KDQoJLyoqDQoJICogTG9hZCB0aGUgbGFuZ3VhZ2UgZmlsZSBvbiBpbnN0YW50aWF0aW9uLg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAzLjENCgkgKi8NCglwcm90ZWN0ZWQgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogQ29uc3RydWN0b3INCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJiRzdWJqZWN0ICBUaGUgb2JqZWN0IHRvIG9ic2VydmUNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29uZmlnICAgQW4gYXJyYXkgdGhhdCBob2xkcyB0aGUgcGx1Z2luIGNvbmZpZ3VyYXRpb24NCgkgKg0KCSAqIEBzaW5jZSAgIDEuNQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgmJHN1YmplY3QsICRjb25maWcpDQoJew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCRzdWJqZWN0LCAkY29uZmlnKTsNCg0KCQkvLyBzZXQgYmFja2VuZCBhY2Nlc3MNCgkJJHRoaXMtPmhhc0FjY2VzcyA9ICR0aGlzLT5iYWNrZW5kQWNjZXNzKCk7DQoNCgkJLy8gc2V0IHRoZSB0YWJsZSBwYXRoDQoJCUpUYWJsZTo6YWRkSW5jbHVkZVBhdGgoSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fcnNmb3JtL3RhYmxlcycpOw0KCX0NCg0KCS8qKg0KCSAqICAgIC8vLy8vLyAgICBWYXN0IERldmVsb3BtZW50IE1ldGhvZCAgIFxcXFxcXA0KCSAqICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCgkgKiAgICMjIyMjIyMjIyMgICAgICAgQkFDSyBFTkQgICAgICAjIyMjIyMjIyMjIyMNCgkgKiAgICMjIyMjIyMjIyMgICAgRXZlbnQgVHJpZ2dlcnMgICAjIyMjIyMjIyMjIyMNCgkgKiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoJICoNCgkgKiovDQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gQmFjay1lbmQgW09uIEZvcm0gU2F2ZV0NCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gb3JtU2F2ZSgkZm9ybSkNCgl7DQoJCWlmICgkdGhpcy0+aGFzQWNjZXNzKQ0KCQl7DQoJCQkkYXBwICAgID0gRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKTsNCgkJCSRmb3JtSWQgPSAkYXBwLT5pbnB1dC0+cG9zdC0+Z2V0KCdmb3JtSWQnLCAwLCBpbnQpOw0KCQkJLy8gZ2V0IGFjdGl2ZSBzdGF0ZXMNCgkJCSRldmVudHMgICAgICAgID0gcmFuZ2UoMCwgMTApOw0KCQkJJGV2ZW50c19hY3RpdmUgPSBhcnJheSgpOw0KCQkJJGV2ZW50c19jb2RlICAgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGV2ZW50cyBhcyAkbnIpDQoJCQl7DQoJCQkJJGV2ZW50c19hY3RpdmVbJG5yXSA9ICRhcHAtPmlucHV0LT5wb3N0LT5nZXQoJ3JzZnBhZHZhbmNlcGhwX2FjdGl2ZV8nIC4gJG5yLCAwLCBJTlQpOw0KCQkJCWlmICgkZXZlbnRzX2FjdGl2ZVskbnJdICE9IDApDQoJCQkJew0KCQkJCQkkZXZlbnRzX2NvZGVbJG5yXSA9IGJhc2U2NF9lbmNvZGUoJGFwcC0+aW5wdXQtPnBvc3QtPmdldCgncnNmcGFkdmFuY2VwaHBfY29kZV8nIC4gJG5yLCAnJywgUkFXKSk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQlpZiAoaXNfYXJyYXkoJGV2ZW50c19hY3RpdmUpICYmIGNvdW50KCRldmVudHNfYWN0aXZlKSkNCgkJCXsNCgkJCQkkZXZlbnRzX2FjdGl2ZSA9IGpzb25fZW5jb2RlKCRldmVudHNfYWN0aXZlKTsNCgkJCX0NCgkJCWlmIChpc19hcnJheSgkZXZlbnRzX2NvZGUpICYmIGNvdW50KCRldmVudHNfY29kZSkpDQoJCQl7DQoJCQkJJGV2ZW50c19jb2RlID0ganNvbl9lbmNvZGUoJGV2ZW50c19jb2RlKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkZXZlbnRzX2NvZGUgPSAnJzsNCgkJCX0NCg0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gY2hlY2sgaWYgZGF0YSBpcyBzZXQNCgkJCSRkYi0+c2V0UXVlcnkoIlNFTEVDVCBmb3JtX2lkIEZST00gI19fcnNmb3JtX2FkdmFuY2VwaHAgV0hFUkUgZm9ybV9pZD0nIiAuICRmb3JtSWQgLiAiJyIpOw0KCQkJaWYgKCEkZGItPmxvYWRSZXN1bHQoKSkNCgkJCXsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCQkvLyBJbnNlcnQgY29sdW1ucy4NCgkJCQkkY29sdW1ucyA9IGFycmF5KCdmb3JtX2lkJywgJ2V2ZW50c19hY3RpdmUnLCAnZXZlbnRzX2NvZGUnKTsNCg0KCQkJCS8vIEluc2VydCB2YWx1ZXMuDQoJCQkJJHZhbHVlcyA9IGFycmF5KCRmb3JtSWQsICRkYi0+cXVvdGUoJGV2ZW50c19hY3RpdmUpLCAkZGItPnF1b3RlKCRldmVudHNfY29kZSkpOw0KDQoJCQkJLy8gUHJlcGFyZSB0aGUgaW5zZXJ0IHF1ZXJ5Lg0KCQkJCSRxdWVyeQ0KCQkJCQktPmluc2VydCgkZGItPnF1b3RlTmFtZSgnI19fcnNmb3JtX2FkdmFuY2VwaHAnKSkNCgkJCQkJLT5jb2x1bW5zKCRkYi0+cXVvdGVOYW1lKCRjb2x1bW5zKSkNCgkJCQkJLT52YWx1ZXMoaW1wbG9kZSgnLCcsICR2YWx1ZXMpKTsNCg0KCQkJCS8vIFNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QgYW5kIGV4ZWN1dGUgaXQuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KDQoJCQkJcmV0dXJuICRkYi0+ZXhlY3V0ZSgpOw0KCQkJfQ0KDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkvLyBGaWVsZHMgdG8gdXBkYXRlLg0KCQkJJGZpZWxkcyA9IGFycmF5KA0KCQkJCSRkYi0+cXVvdGVOYW1lKCdldmVudHNfYWN0aXZlJykgLiAnID0gJyAuICRkYi0+cXVvdGUoJGV2ZW50c19hY3RpdmUpLA0KCQkJCSRkYi0+cXVvdGVOYW1lKCdldmVudHNfY29kZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRldmVudHNfY29kZSkNCgkJCSk7DQoNCgkJCS8vIENvbmRpdGlvbnMgZm9yIHdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHVwZGF0ZWQuDQoJCQkkY29uZGl0aW9ucyA9IGFycmF5KA0KCQkJCSRkYi0+cXVvdGVOYW1lKCdmb3JtX2lkJykgLiAnID0gJyAuICRmb3JtSWQNCgkJCSk7DQoNCgkJCSRxdWVyeS0+dXBkYXRlKCRkYi0+cXVvdGVOYW1lKCcjX19yc2Zvcm1fYWR2YW5jZXBocCcpKS0+c2V0KCRmaWVsZHMpLT53aGVyZSgkY29uZGl0aW9ucyk7DQoNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCg0KCQkJcmV0dXJuICRkYi0+ZXhlY3V0ZSgpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEJhY2stZW5kIFtPbiBBZnRlciBTaG93IEZvcm0gRWRpdCBUYWJzIFRhYl0NCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1CYWNrZW5kQWZ0ZXJTaG93Rm9ybUVkaXRUYWJzVGFiKCkNCgl7DQoJCWlmICgkdGhpcy0+aGFzQWNjZXNzKQ0KCQl7DQoJCQkkbGFuZyA9IEZhY3Rvcnk6OmdldExhbmd1YWdlKCk7DQoJCQkkbGFuZy0+bG9hZCgncGxnX3N5c3RlbV9yc2ZwYWR2YW5jZXBocCcpOw0KDQoJCQllY2hvICc8bGk+PGEgaWQ9ImFkdmFuY2VwaHBzY3JpcHRzIiBocmVmPSJqYXZhc2NyaXB0OiB2b2lkKDApOyI+PHNwYW4gY2xhc3M9InJzZmljb24gcnNmaWNvbi1jb2RlIj48L3NwYW4+PHNwYW4gY2xhc3M9ImlubmVyLXRleHQiPicgLiBUZXh0OjpfKCdQTEdfU1lTVEVNX1JTRlBBRFZBTkNFUEhQX0pPT01MQV9QUk9GSUxFX1RBQicpIC4gJzwvc3Bhbj48L2E+PC9saT4nOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEJhY2stZW5kIFtPbiBBZnRlciBTaG93IEZvcm0gRWRpdCBUYWJzXQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUJhY2tlbmRBZnRlclNob3dGb3JtRWRpdFRhYnMoKQ0KCXsNCgkJaWYgKCR0aGlzLT5oYXNBY2Nlc3MpDQoJCXsNCgkJCS8vIHNldCBldmVudCByYW5nZQ0KCQkJJGV2ZW50cyA9IHJhbmdlKDAsIDEwKTsNCgkJCS8vIHNldCB0aGUgbGFuZyByYW5nZQ0KCQkJJEpUZXh0ID0gcmFuZ2UoJ0InLCAnTCcpOw0KDQoJCQkvLyBzZXQgbGFuZ3VhZ2UNCgkJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJCSRsYW5nLT5sb2FkKCdwbGdfc3lzdGVtX3JzZnBhZHZhbmNlcGhwJyk7DQoNCgkJCS8vIGdldCBzZXQgdmFsdWVzDQoJCQkkZm9ybUlkID0gRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+aW5wdXQtPmdldEludCgnZm9ybUlkJyk7DQoJCQkkcm93ICAgID0gSlRhYmxlOjpnZXRJbnN0YW5jZSgnUlNGb3JtX0FkdmFuY2VwaHAnLCAnVGFibGUnKTsNCgkJCWlmICghJHJvdykNCgkJCXsNCgkJCQlyZXR1cm47DQoJCQl9DQoJCQkkcm93LT5sb2FkKCRmb3JtSWQpOw0KCQkJaWYgKHN0cmxlbigkcm93LT5ldmVudHNfYWN0aXZlKSA+IDApDQoJCQl7DQoJCQkJJGV2ZW50c19hY3RpdmUgPSBqc29uX2RlY29kZSgkcm93LT5ldmVudHNfYWN0aXZlLCB0cnVlKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlmb3JlYWNoICgkZXZlbnRzIGFzICRucikNCgkJCQl7DQoJCQkJCSRldmVudHNfYWN0aXZlWyRucl0gPSAwOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChzdHJsZW4oJHJvdy0+ZXZlbnRzX2NvZGUpID4gMCkNCgkJCXsNCgkJCQkkZXZlbnRzX2NvZGUgPSBqc29uX2RlY29kZSgkcm93LT5ldmVudHNfY29kZSwgdHJ1ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGV2ZW50cyBhcyAkbnIpDQoJCQkJew0KCQkJCQkkZXZlbnRzX2NvZGVbJG5yXSA9ICcnOw0KCQkJCX0NCgkJCX0NCgkJCWZvcmVhY2ggKCRldmVudHMgYXMgJG5yKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkZXZlbnRzX2NvZGVbJG5yXSkpDQoJCQkJew0KCQkJCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRldmVudHNfY29kZVskbnJdLCB0cnVlKSkgPT09ICRldmVudHNfY29kZVskbnJdKQ0KCQkJCQl7DQoJCQkJCQkkZXZlbnRzX2NvZGVbJG5yXSA9IGJhc2U2NF9kZWNvZGUoJGV2ZW50c19jb2RlWyRucl0pOw0KCQkJCQl9DQoJCQkJCSRsaXN0c1snYWN0aXZlXycgLiAkbnJdID0gUlNGb3JtUHJvSGVscGVyOjpyZW5kZXJIVE1MKCdzZWxlY3QuYm9vbGVhbmxpc3QnLCAncnNmcGFkdmFuY2VwaHBfYWN0aXZlXycgLiAkbnIsICdjbGFzcz0iaW5wdXRib3giJywgJGV2ZW50c19hY3RpdmVbJG5yXSk7DQoJCQkJCSRsaXN0c1snY29kZV8nIC4gJG5yXSAgID0gJzx0ZXh0YXJlYSBjbGFzcz0icnNfdGV4dGFyZWEgY29kZW1pcnJvci1waHAiIG5hbWU9InJzZnBhZHZhbmNlcGhwX2NvZGVfJyAuICRuciAuICciIGlkPSJjb2RlXycgLiAkbnIgLiAnIiByb3dzPSIyMCIgc3R5bGU9IndpZHRoOiA5OCU7IiBjb2xzPSI5MDAiIGZpbHRlcj0icmF3IiA+Jw0KCQkJCQkJLiBodG1sc3BlY2lhbGNoYXJzKCRldmVudHNfY29kZVskbnJdLCBFTlRfQ09NUEFULCAnVVRGLTgnKSAuICc8L3RleHRhcmVhPic7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRsaXN0c1snYWN0aXZlXycgLiAkbnJdID0gUlNGb3JtUHJvSGVscGVyOjpyZW5kZXJIVE1MKCdzZWxlY3QuYm9vbGVhbmxpc3QnLCAncnNmcGFkdmFuY2VwaHBfYWN0aXZlXycgLiAkbnIsICdjbGFzcz0iaW5wdXRib3giJywgJGV2ZW50c19hY3RpdmVbJG5yXSk7DQoJCQkJCSRsaXN0c1snY29kZV8nIC4gJG5yXSAgID0gJzx0ZXh0YXJlYSBjbGFzcz0icnNfdGV4dGFyZWEgY29kZW1pcnJvci1waHAiIG5hbWU9InJzZnBhZHZhbmNlcGhwX2NvZGVfJyAuICRuciAuICciIGlkPSJjb2RlXycgLiAkbnIgLiAnIiByb3dzPSIyMCIgc3R5bGU9IndpZHRoOiA5OCU7IiBjb2xzPSI5MDAiIGZpbHRlcj0icmF3IiA+PC90ZXh0YXJlYT4nOw0KCQkJCX0NCgkJCX0NCgkJCWVjaG8gJzxkaXYgaWQ9InJzZnBhZHZhbmNlcGhwZGl2Ij4nOw0KCQkJaW5jbHVkZSBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9yc2Zvcm0vaGVscGVycy9yc2ZwYWR2YW5jZXBocC5waHAnOw0KCQkJZWNobyAnPC9kaXY+JzsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiBCYWNrLWVuZCBbT24gQWZ0ZXIgU2hvdyBDb25maWd1cmF0aW9uIFRhYnNdDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUnNmb3JtQmFja2VuZEFmdGVyU2hvd0NvbmZpZ3VyYXRpb25UYWJzKCR0YWJzKQ0KCXsNCgkJaWYgKCR0aGlzLT5oYXNBY2Nlc3MpDQoJCXsNCgkJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJCSRsYW5nLT5sb2FkKCdwbGdfc3lzdGVtX3JzZnBhZHZhbmNlcGhwJyk7DQoNCgkJCSR0YWJzLT5hZGRUaXRsZShUZXh0OjpfKCdQTEdfU1lTVEVNX1JTRlBBRFZBTkNFUEhQX0NPTkZJR19UQUInKSwgJ2Zvcm0tYWR2YW5jZXBocCcpOw0KCQkJJHRhYnMtPmFkZENvbnRlbnQoJHRoaXMtPmFkdmFuY2VwaHBDb25maWd1cmF0aW9uU2NyZWVuKCkpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2V0cyB0aGUgdGFiIGRpc3BsYXkgZm9yIHRoZSBDb25maWd1cmF0aW9uIFNjcmVlbg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhZHZhbmNlcGhwQ29uZmlndXJhdGlvblNjcmVlbigpDQoJew0KCQlpZiAoJHRoaXMtPmhhc0FjY2VzcykNCgkJew0KCQkJJGxhbmcgPSBGYWN0b3J5OjpnZXRMYW5ndWFnZSgpOw0KCQkJJGxhbmctPmxvYWQoJ3BsZ19zeXN0ZW1fcnNmcGFkdmFuY2VwaHAnKTsNCg0KCQkJcmV0dXJuIFRleHQ6Ol8oJ1BMR19TWVNURU1fUlNGUEFEVkFOQ0VQSFBfQ09ORklHX05PVElDRScpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogICAgLy8vLy8vICAgIFZhc3QgRGV2ZWxvcG1lbnQgTWV0aG9kICAgXFxcXFxcDQoJICogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KCSAqICAgIyMjIyMjIyMjIyAgICAgIEZST05UIEVORCAgICAgICMjIyMjIyMjIyMjIw0KCSAqICAgIyMjIyMjIyMjIyAgICBFdmVudCBUcmlnZ2VycyAgICMjIyMjIyMjIyMjIw0KCSAqICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCgkgKg0KCSAqKi8NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiBGcm9udC1lbmQgW09uIEluaXQgRm9ybSBEaXNwbGF5XQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZmluZCc9PiYkZmluZCwncmVwbGFjZSc9PiYkcmVwbGFjZSwnZm9ybUxheW91dCc9PiYkZm9ybUxheW91dCkNCgkgKi8NCgkvKnB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUZyb250ZW5kSW5pdEZvcm1EaXNwbGF5KCRhcmdzKQ0KCXsNCgkJLS0gPj4gIFdlIG5lZWQgYSBmb3JtSWQgdG8gaGF2ZSB0aGlzIHdvcmsgIDw8IC0tLQ0KCQkNCgkJJHRoaXMtPnNldEV2ZW50cygkdGhpcy0+VkRNX3JzZm9ybV9pZCk7DQoJCWlmKCR0aGlzLT5WRE1fYWN0aXZlWzBdID09IDEpew0KCQkJZXZhbCgkdGhpcy0+VkRNX2NvZGVbMF0pOw0KCQl9DQoJfSovDQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gRnJvbnQtZW5kIFtPbiBCZWZvcmUgRm9ybSBEaXNwbGF5XQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZm9ybUxheW91dCc9PiYkZm9ybUxheW91dCwnZm9ybUlkJz0+JGZvcm1JZCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEJlZm9yZUZvcm1EaXNwbGF5KCRhcmdzKQ0KCXsNCgkJJHRoaXMtPnNldEV2ZW50cygkYXJnc1snZm9ybUlkJ10pOw0KCQlpZiAoJHRoaXMtPlZETV9hY3RpdmVbMF0gPT0gMSkNCgkJew0KCQkJJGRhdGEgPSAkdGhpcy0+VkRNX2NvZGVbMF07DQoJCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhLCB0cnVlKSkgPT09ICRkYXRhKQ0KCQkJew0KCQkJCSRkYXRhID0gYmFzZTY0X2RlY29kZSgkZGF0YSk7DQoJCQl9DQoJCQlldmFsKCRkYXRhKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiBGcm9udC1lbmQgW09uIEJlZm9yZSBGb3JtIFZhbGlkYXRpb25dDQoJICoNCgkgKiAkYXJncyA9IGFycmF5KCdpbnZhbGlkJz0+JiRpbnZhbGlkLCAnZm9ybUlkJyA9PiAkZm9ybUlkLCAncG9zdCcgPT4gJiRwb3N0KQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUZyb250ZW5kQmVmb3JlRm9ybVZhbGlkYXRpb24oJGFyZ3MpDQoJew0KCQkkdGhpcy0+c2V0RXZlbnRzKCRhcmdzWydmb3JtSWQnXSk7DQoJCWlmICgkdGhpcy0+VkRNX2FjdGl2ZVsxXSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVsxXTsNCgkJCWlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpKSA9PT0gJGRhdGEpDQoJCQl7DQoJCQkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsNCgkJCX0NCgkJCWV2YWwoJGRhdGEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQmVmb3JlIEZvcm0gUHJvY2Vzc10NCgkgKg0KCSAqICRhcmdzID0gYXJyYXkoJ3Bvc3QnID0+ICYkcG9zdCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEJlZm9yZUZvcm1Qcm9jZXNzKCRhcmdzKQ0KCXsNCgkJJHRoaXMtPnNldEV2ZW50cygkYXJnc1sncG9zdCddWydmb3JtSWQnXSk7DQoJCWlmICgkdGhpcy0+VkRNX2FjdGl2ZVsyXSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVsyXTsNCgkJCWlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpKSA9PT0gJGRhdGEpDQoJCQl7DQoJCQkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsNCgkJCX0NCgkJCWV2YWwoJGRhdGEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQmVmb3JlIFN0b3JlIFN1Ym1pc3Npb25zXQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZm9ybUlkJz0+JGZvcm1JZCwncG9zdCc9PiYkcG9zdCwnU3VibWlzc2lvbklkJz0+JFN1Ym1pc3Npb25JZCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEJlZm9yZVN0b3JlU3VibWlzc2lvbnMoJGFyZ3MpDQoJew0KCQkkdGhpcy0+c2V0RXZlbnRzKCRhcmdzWydmb3JtSWQnXSk7DQoJCWlmICgkdGhpcy0+VkRNX2FjdGl2ZVszXSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVszXTsNCgkJCWlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpKSA9PT0gJGRhdGEpDQoJCQl7DQoJCQkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsNCgkJCX0NCgkJCWV2YWwoJGRhdGEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQWZ0ZXIgU3RvcmUgU3VibWlzc2lvbnNdDQoJICoNCgkgKiAkYXJncyA9IGFycmF5KCdTdWJtaXNzaW9uSWQnPT4kU3VibWlzc2lvbklkLCAnZm9ybUlkJz0+JGZvcm1JZCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEFmdGVyU3RvcmVTdWJtaXNzaW9ucygkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm1JZCddKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzRdID09IDEpDQoJCXsNCgkJCSRkYXRhID0gJHRoaXMtPlZETV9jb2RlWzRdOw0KCQkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpID09PSAkZGF0YSkNCgkJCXsNCgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOw0KCQkJfQ0KCQkJZXZhbCgkZGF0YSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gRnJvbnQtZW5kIFtPbiBBZnRlciBGb3JtIFByb2Nlc3NdDQoJICoNCgkgKiAkYXJncyA9IGFycmF5KCdTdWJtaXNzaW9uSWQnPT4kU3VibWlzc2lvbklkLCdmb3JtSWQnPT4kZm9ybUlkKQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUZyb250ZW5kQWZ0ZXJGb3JtUHJvY2VzcygkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm1JZCddKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzVdID09IDEpDQoJCXsNCgkJCSRkYXRhID0gJHRoaXMtPlZETV9jb2RlWzVdOw0KCQkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpID09PSAkZGF0YSkNCgkJCXsNCgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOw0KCQkJfQ0KCQkJZXZhbCgkZGF0YSk7DQoJCX0NCgl9DQoNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiBGcm9udC1lbmQgW09uIEFmdGVyIFNob3cgVGhhbmt5b3UgTWVzc2FnZV0NCgkgKg0KCSAqICRhcmdzID0gYXJyYXkoJ291dHB1dCc9PiYkb3V0cHV0LCdmb3JtSWQnPT4mJGZvcm1JZCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEFmdGVyU2hvd1RoYW5reW91TWVzc2FnZSgkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm1JZCddKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzZdID09IDEpDQoJCXsNCgkJCSRkYXRhID0gJHRoaXMtPlZETV9jb2RlWzZdOw0KCQkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpID09PSAkZGF0YSkNCgkJCXsNCgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOw0KCQkJfQ0KCQkJZXZhbCgkZGF0YSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gRnJvbnQtZW5kIFtPbiBBZnRlciBDcmVhdGUgUGxhY2Vob2xkZXJzXQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZm9ybScgPT4gJiRmb3JtLCAncGxhY2Vob2xkZXJzJyA9PiAmJHBsYWNlaG9sZGVycywgJ3ZhbHVlcycgPT4gJiR2YWx1ZXMsICdzdWJtaXNzaW9uJyA9PiAkc3VibWlzc2lvbikNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1BZnRlckNyZWF0ZVBsYWNlaG9sZGVycygkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm0nXS0+Rm9ybUlkKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzddID09IDEpDQoJCXsNCgkJCSRkYXRhID0gJHRoaXMtPlZETV9jb2RlWzddOw0KCQkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpID09PSAkZGF0YSkNCgkJCXsNCgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOw0KCQkJfQ0KCQkJZXZhbCgkZGF0YSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gRnJvbnQtZW5kIFtPbiBCZWZvcmUgVXNlciBFbWFpbF0NCgkgKg0KCSAqICRhcmdzID0gYXJyYXkoJ2Zvcm0nID0+ICYkZm9ybSwgJ3BsYWNlaG9sZGVycycgPT4gJiRwbGFjZWhvbGRlcnMsICd2YWx1ZXMnID0+ICYkdmFsdWVzLCAnc3VibWlzc2lvbklkJyA9PiAkU3VibWlzc2lvbklkLCAndXNlckVtYWlsJz0+JiR1c2VyRW1haWwpDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUnNmb3JtQmVmb3JlVXNlckVtYWlsKCRhcmdzKQ0KCXsNCgkJJHRoaXMtPnNldEV2ZW50cygkYXJnc1snZm9ybSddLT5Gb3JtSWQpOw0KCQlpZiAoJHRoaXMtPlZETV9hY3RpdmVbOF0gPT0gMSkNCgkJew0KCQkJJGRhdGEgPSAkdGhpcy0+VkRNX2NvZGVbOF07DQoJCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhLCB0cnVlKSkgPT09ICRkYXRhKQ0KCQkJew0KCQkJCSRkYXRhID0gYmFzZTY0X2RlY29kZSgkZGF0YSk7DQoJCQl9DQoJCQlldmFsKCRkYXRhKTsNCgkJfQ0KCX0NCg0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQmVmb3JlIEFkbWluIEVtYWlsXQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZm9ybScgPT4gJiRmb3JtLCAncGxhY2Vob2xkZXJzJyA9PiAmJHBsYWNlaG9sZGVycywgJ3ZhbHVlcycgPT4gJiR2YWx1ZXMsICdzdWJtaXNzaW9uSWQnID0+ICRTdWJtaXNzaW9uSWQsICdhZG1pbkVtYWlsJz0+JiRhZG1pbkVtYWlsKQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUJlZm9yZUFkbWluRW1haWwoJGFyZ3MpDQoJew0KCQkkdGhpcy0+c2V0RXZlbnRzKCRhcmdzWydmb3JtJ10tPkZvcm1JZCk7DQoJCWlmICgkdGhpcy0+VkRNX2FjdGl2ZVs5XSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVs5XTsNCgkJCWlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpKSA9PT0gJGRhdGEpDQoJCQl7DQoJCQkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsNCgkJCX0NCgkJCWV2YWwoJGRhdGEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQmVmb3JlIEFkZGl0aW9uYWwgRW1haWxdDQoJICoNCgkgKiAkYXJncyA9IGFycmF5KCdmb3JtJz0+JiRmb3JtLCdwbGFjZWhvbGRlcnMnPT4mJHBsYWNlaG9sZGVycywndmFsdWVzJz0+JiR2YWx1ZXMsJ3N1Ym1pc3Npb25JZCc9PiRTdWJtaXNzaW9uSWQsJ2FkZGl0aW9uYWxFbWFpbCc9PiYkYWRkaXRpb25hbEVtYWlsKQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUJlZm9yZUFkZGl0aW9uYWxFbWFpbCgkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm0nXS0+Rm9ybUlkKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzEwXSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVsxMF07DQoJCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhLCB0cnVlKSkgPT09ICRkYXRhKQ0KCQkJew0KCQkJCSRkYXRhID0gYmFzZTY0X2RlY29kZSgkZGF0YSk7DQoJCQl9DQoJCQlldmFsKCRkYXRhKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqICAgIENoZWNrIGlmIHRoaXMgcGx1Z2luIGlzIGFjdGl2ZSBvbiB0aGUgZm9ybQ0KCSAqDQoJICogQHJldHVybnMgYSBib29sIGZhbHNlIG9yIHRydWUNCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEV2ZW50cygkZm9ybUlkKQ0KCXsNCgkJaWYgKCFpc19hcnJheSgkdGhpcy0+VkRNX2FjdGl2ZSkgfHwgIWNvdW50KCR0aGlzLT5WRE1fYWN0aXZlKSB8fCAkdGhpcy0+VkRNX3JzZm9ybV9pZCAhPSAkZm9ybUlkKQ0KCQl7DQoJCQkvLyBzZXQgZm9ybSBpZA0KCQkJJHRoaXMtPlZETV9yc2Zvcm1faWQgPSAkZm9ybUlkOw0KCQkJLy8gc2V0IGV2ZW50IGFycmF5DQoJCQkkZXZlbnRzID0gcmFuZ2UoMCwgMTApOw0KCQkJLy8gZ2V0IHNldCB2YWx1ZXMNCgkJCSRyb3cgPSBKVGFibGU6OmdldEluc3RhbmNlKCdSU0Zvcm1fQWR2YW5jZXBocCcsICdUYWJsZScpOw0KCQkJaWYgKCEkcm93KQ0KCQkJew0KCQkJCXJldHVybjsNCgkJCX0NCgkJCSRyb3ctPmxvYWQoJHRoaXMtPlZETV9yc2Zvcm1faWQpOw0KCQkJaWYgKHN0cmxlbigkcm93LT5ldmVudHNfYWN0aXZlKSkNCgkJCXsNCgkJCQkkdGhpcy0+VkRNX2FjdGl2ZSA9IGpzb25fZGVjb2RlKCRyb3ctPmV2ZW50c19hY3RpdmUsIHRydWUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRldmVudHMgYXMgJG5yKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPlZETV9hY3RpdmVbJG5yXSA9IDA7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKHN0cmxlbigkcm93LT5ldmVudHNfY29kZSkpDQoJCQl7DQoJCQkJJHRoaXMtPlZETV9jb2RlID0ganNvbl9kZWNvZGUoJHJvdy0+ZXZlbnRzX2NvZGUsIHRydWUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRldmVudHMgYXMgJG5yKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPlZETV9jb2RlWyRucl0gPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJhdGlvblNjcmVlbigpDQoJew0KCQlvYl9zdGFydCgpOw0KDQoJCUpGb3JtOjphZGRGb3JtUGF0aChfX0RJUl9fIC4gJy9mb3JtcycpOw0KDQoJCSRmb3JtID0gSkZvcm06OmdldEluc3RhbmNlKCdwbGdfc3lzdGVtX3JzZnBnb29nbGUuY29uZmlndXJhdGlvbicsICdjb25maWd1cmF0aW9uJywgYXJyYXkoJ2NvbnRyb2wnID0+ICdyc2Zvcm1Db25maWcnKSwgZmFsc2UsIGZhbHNlKTsNCgkJJGZvcm0tPmJpbmQoJHRoaXMtPmxvYWRGb3JtRGF0YSgpKTsNCg0KCQk/Pg0KICAgICAgICA8ZGl2IGlkPSJwYWdlLWdvb2dsZSIgY2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+DQoJCQk8P3BocA0KCQkJZm9yZWFjaCAoJGZvcm0tPmdldEZpZWxkc2V0cygpIGFzICRmaWVsZHNldCkNCgkJCXsNCgkJCQlpZiAoJGZpZWxkcyA9ICRmb3JtLT5nZXRGaWVsZHNldCgkZmllbGRzZXQtPm5hbWUpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJCXsNCgkJCQkJCWVjaG8gJGZpZWxkLT5yZW5kZXJGaWVsZCgpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJPz4NCiAgICAgICAgPC9kaXY+DQoJCTw/cGhwDQoNCgkJJGNvbnRlbnRzID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQoJCW9iX2VuZF9jbGVhbigpOw0KDQoJCXJldHVybiAkY29udGVudHM7DQoJfQ0KDQoJLyoqDQoJICogICAgQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIGJhY2tlbmQgYWNjZXNzDQoJICoNCgkgKiBAcmV0dXJucyBhIGJvb2wgZmFsc2Ugb3IgdHJ1ZQ0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYmFja2VuZEFjY2VzcygpDQoJew0KCQkvLyBnZXQgdXNlcg0KCQkkdXNlcklkICAgICAgID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJJHVzZXJHcm91cCAgICA9IEpVc2VySGVscGVyOjpnZXRVc2VyR3JvdXBzKCR1c2VySWQpOw0KCQkkYWNjZXNzR3JvdXBzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhY2Nlc3MnKTsNCgkJaWYgKGlzX2FycmF5KCR1c2VyR3JvdXApKQ0KCQl7DQoJCQlpZiAoaXNfYXJyYXkoJGFjY2Vzc0dyb3VwcykpDQoJCQl7DQoJCQkJcmV0dXJuIChjb3VudChhcnJheV9pbnRlcnNlY3QoJGFjY2Vzc0dyb3VwcywgJHVzZXJHcm91cCkpKSA/IHRydWUgOiBmYWxzZTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyByZXR1cm4gdHJ1ZSBpZiBub3Qgc2V0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', 'RSFPadvancephp', '', 'CQlpZiAoJHR5cGUgPT0gJ2luc3RhbGwnKQ0KCQl7DQoJCQllY2hvICcJPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+Q29uZ3JhdHVsYXRpb25zISBUaGUgcGx1Z2luIGlzIG5vdyBpbnN0YWxsZWQhPC9oMj4NCgkJCQkJPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PGEgaHJlZj0iJyAuIEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpiYXNlKCkgLiAnaW5kZXgucGhwP29wdGlvbj1jb21fcGx1Z2lucyZ2aWV3PXBsdWdpbnMmZmlsdGVyX3NlYXJjaD1BZHZhbmNlIFBIUCBmb3IgUlNGb3JtIVBybyI+QWN0aXZhdGU8L2E+IHRoaXMgcGx1Z2lucyBub3chPC9oMj4NCgkJCQkJPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+WW91IHdpbGwgbmVlZCB0byBzZXR1cCBhIGZldyB0aGluZ3MsIHdhdGNoIHRoZXNlIHR1dG9yaWFsczo8L2gyPg0KCQkJCQk8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+DQoJCQkJCQk8dWw+DQoJCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8veW91dHUuYmUvREtFVnphdGJwRDgiIHRhcmdldD0iX2JsYW5rIj5JbnN0YWxsIFJTRm9ybSBBZHZhbmNlIFBIUCBQbHVnaW48L2E+PC9saT4NCgkJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS9WMzdOcWkxZHBuWSIgdGFyZ2V0PSJfYmxhbmsiPlNldCBSU0Zvcm0gQWR2YW5jZSBQSFA8L2E+PC9saT4NCgkJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS9oU0JKZV9yeXExRSIgdGFyZ2V0PSJfYmxhbmsiPkRlbW9uc3RyYXRpb24gb2YgUlNGb3JtIEFkdmFuY2UgUEhQIFBsdWdpbjwvYT48L2xpPg0KCQkJCQkJPC91bD4NCgkJCQkJPC9kaXY+DQoJCQkJCTxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+TGV0IHVzIGtub3cgaWYgc29tZXRoaW5nIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkITwvcD4nOw0KCQl9DQoJCWlmICgkdHlwZSA9PSAndXBkYXRlJykNCgkJew0KCQkJZWNobyAnCTxoMiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPkNvbmdyYXR1bGF0aW9ucyEgWW91IGhhdmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgdGhlIHBsdWdpbiE8L2gyPg0KCQkJCTxoMiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPlBsZWFzZSB3YXRjaCB0aGVzZSB0dXRvcmlhbHMgaWYgaGF2ZSBhbnkgcXVlc3Rpb25zOjwvaDI+DQoJCQkJPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPg0KCQkJCQk8dWw+DQoJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS9ES0VWemF0YnBEOCIgdGFyZ2V0PSJfYmxhbmsiPkluc3RhbGwgUlNGb3JtIEFkdmFuY2UgUEhQIFBsdWdpbjwvYT48L2xpPg0KCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8veW91dHUuYmUvVjM3TnFpMWRwblkiIHRhcmdldD0iX2JsYW5rIj5TZXQgUlNGb3JtIEFkdmFuY2UgUEhQPC9hPjwvbGk+DQoJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS9oU0JKZV9yeXExRSIgdGFyZ2V0PSJfYmxhbmsiPkRlbW9uc3RyYXRpb24gb2YgUlNGb3JtIEFkdmFuY2UgUEhQIFBsdWdpbjwvYT48L2xpPg0KCQkJCQk8L3VsPg0KCQkJCTwvZGl2Pg0KCQkJCTxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+TGV0IHVzIGtub3cgaWYgc29tZXRoaW5nIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkITwvcD4nOw0KCQl9', '', 'CQlpZiAoJHR5cGUgPT0gJ3VuaW5zdGFsbCcpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoNCgkJJGFwcCA9IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCk7DQoNCgkJaWYgKCFmaWxlX2V4aXN0cyhKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9yc2Zvcm0vaGVscGVycy9yc2Zvcm0ucGhwJykpDQoJCXsNCgkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgaW5zdGFsbCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUuYXZhbmdhdGUuY29tL29yZGVyL2NhcnQucGhwP1BST0RTPTE5MjUwNDQmUVRZPTEmQUZGSUxJQVRFPTYzOTU2JkFGRlNSQz1wbHVnaW4iIHRhcmdldD0iX2JsYW5rIj5SU0Zvcm0hIFBybyBjb21wb25lbnQ8L2E+IGJlZm9yZSBjb250aW51aW5nLicsICdlcnJvcicpOw0KDQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQlpZiAoIWZpbGVfZXhpc3RzKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3JzZm9ybS9oZWxwZXJzL3ZlcnNpb24ucGhwJykpDQoJCXsNCgkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgdXBncmFkZSA8YSBocmVmPSJodHRwczovL3NlY3VyZS5hdmFuZ2F0ZS5jb20vb3JkZXIvY2FydC5waHA/UFJPRFM9MTkyNTA0NCZRVFk9MSZBRkZJTElBVEU9NjM5NTYmQUZGU1JDPXBsdWdpbiIgdGFyZ2V0PSJfYmxhbmsiPlJTRm9ybSEgUHJvPC9hPiB0byBhdCBsZWFzdCBSNDUgYmVmb3JlIGNvbnRpbnVpbmchJywgJ2Vycm9yJyk7DQoNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCXJldHVybiB0cnVlOw==', '', '', '', '2.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX3JzZm9ybV9hZHZhbmNlcGhwYCAoDQogIGBmb3JtX2lkYCBpbnQoMTEpIE5PVCBOVUxMLA0KICBgZXZlbnRzX2FjdGl2ZWAgdmFyY2hhcigyNTUpIE5PVCBOVUxMLA0KICBgZXZlbnRzX2NvZGVgIG1lZGl1bXRleHQgTk9UIE5VTEwsDQogIFBSSU1BUlkgS0VZIChgZm9ybV9pZGApDQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0Zjg7DQoNCkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGAjX19yc2Zvcm1fYWR2YW5jZXBocHN0b3JlYCAoDQogIGBpZGAgYmlnaW50KDIwKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwNCiAgYHVzZXJfaWRgIGludCgxMSkgTk9UIE5VTEwgREVGQVVMVCAnMCcsDQogIGBkYXRhYCBtZWRpdW10ZXh0IE5PVCBOVUxMLA0KICBQUklNQVJZIEtFWSAoYGlkYCksDQogIEtFWSBgdXNlcl9pZGAgKGB1c2VyX2lkYCkNCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmODs=', '', 'RSForm! Pro - Advance PHP', '', 1, '', '', 1, '2021-09-15 15:11:10', '2023-11-11 09:06:02', 6, '', 7),
(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),
-(22, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to build the power autoloader plugin for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Global Autoloader\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2977\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2680\",\"custom_value\":\"\"}}}}', 'd4f37ffe-afd8-492f-9491-9846f215a66d', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbjsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow==', 11, '{\"method_selection0\":{\"method\":\"117\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBjb21wb25lbnQgbmVlZHMgYSBwb3dlciBhdXRvbG9hZGVyIHBsdWdpbiBsb2FkZWQNCgkJaWYgKENGYWN0b3J5OjpfKCdDb25maWcnKS0+YWRkX3Bvd2VyICYmICR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJLy8gbm93IGdldCB0aGUgcGx1Z2luIElEIGlmIHNldA0KCQkJaWYgKCgkaWQgPSAoaW50KSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3BsdWdpbicsIDApKSAhPT0gMCkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBwb3dlciBhdXRvbG9hZGVyIHBsdWdpbg0KCQkJCUNGYWN0b3J5OjpfKCdKb29tbGFwbHVnaW4uRGF0YScpLT5zZXQoJGlkKTsNCgkJCQkvLyBub3cgc2V0IHRoZSBwbHVnaW4gcG93ZXJzIHBsYWNlaG9sZGVyDQoJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+c2V0KCdQTFVHSU5fUE9XRVJfQVVUT0xPQURFUicsICcnKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdZb3UgZG8gbm90IGhhdmUgYSBnbG9iYWwgcG93ZXIgcGx1Z2luIHNldHVwLCBzbyB0aGUgcG93ZXJzIHBsdWdpbiBhdXRvbG9hZGVyIGNvdWxkIG5vdCBiZSBhZGRlZC4nKSwgJ1dhcm5pbmcnKTsNCgkJCX0NCgkJfQ0KCX0NCltDVVNUT01DT0RFPWNvbXBvbmVudEFjdGl2ZV0=', '[[[Component]]] Powers Autoloader Compiler', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDEwXQ==', '', '', '', '1.2.1', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Powers Autoloader Compiler', '', 1, '', '', 1, '2021-11-13 13:05:34', '2024-08-06 20:50:05', 32, '', 3),
-(23, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set component dashboard class custom headers.', '{\"fields0\":{\"file\":\"component_dashboard\",\"fields_name\":\"params.component_dashboard_headers\",\"fieldset\":\"component_dashboard_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3010\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"3014\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3006\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"3011\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"3015\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"3007\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"3012\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"3016\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"3008\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"3013\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"3017\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"3009\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'e3252a0c-ce05-428d-a916-24167e00c798', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrY29tcG9uZW50X2Rhc2hib2FyZF0=', '[[[Component]]] Component Dashboard Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.2', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Component Dashboard Headers Tabs', '', 1, '', '', 1, '2021-12-06 04:40:01', '2024-08-06 20:57:56', 19, '', 2),
(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-08-06 20:57:44', 18, '', 9),
-(25, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'For easy update of [[[Component]]]', '{}', '5565c7ce-bbbc-48c6-992a-9842046d28db', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuDQoJICoNCgkgKiBGb3IgbW9kaWZpY2F0aW9uIG9mIFVSTCBhbmQgaGVhZGVycyBiZWZvcmUgcGFja2FnZSBkb3dubG9hZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkKCYkdXJsLCAmJGhlYWRlcnMpDQoJew0KCQkvLyBzZXQgdGhlIFVSSSBvYmplY3QNCgkJJHVyaSA9IEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgkdXJsKTsNCgkJJHBhcnRzID0gZXhwbG9kZSgnLycsICR1cmktPmdldFBhdGgoKSk7DQoNCgkJLy8gY2hlY2sgdGhhdCB0aGlzIGlzIG91ciBBUEkNCgkJaWYgKCR1cmktPmdldEhvc3QoKSA9PSAnW1tbZ2l0ZWFfdXJsXV1dJyAmJiBpbl9hcnJheSgnW1tbZ2l0ZWFfcGFja2FnZV9uYW1lXV1dJywgJHBhcnRzKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSB0b2tlbiBpZiBzZXQgKHdlIGFkZGVkIHRoZSBkZWZhdWx0IHB1YmxpYyB0b2tlbikNCgkJCSR0b2tlbiA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdnaXRlYV90b2tlbicsICcxZjRkMGY0ZTRjNjNkNDcwYzJiYjRjMzM3YjdlNzNlYjU4ZWNiOTcyJyk7DQoJCQkvLyBvbmx5IGFkZCBpZiB0b2tlbiBpcyBzZXQNCgkJCWlmICgkdG9rZW4pDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSB0b2tlbg0KCQkJCSR1cmktPnNldFZhcignYWNjZXNzX3Rva2VuJywgJHRva2VuKTsNCgkJCQkvLyB1cGRhdGUgdGhlIFVSTA0KCQkJCSR1cmwgPSAkdXJpLT50b1N0cmluZygpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgcmV0dXJuIFVSTA0KCQkJCSRyZXR1cm4gPSB1cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgoc3RyaW5nKSBKb29tbGFfX19lZWNjMTQzZV9iNWNmXzRjMzNfYmE0ZF85N2RhMWRmNjE0MjJfX19Qb3dlcjo6Z2V0SW5zdGFuY2UoKSkpOw0KCQkJCS8vIHNldCB0aGUgdXJscw0KCQkJCSRnZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciaHR0cHM6Ly9bW1tnaXRlYV91cmxdXV0vdXNlci9zZXR0aW5ncy9hcHBsaWNhdGlvbnMiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iJyAuIFRleHQ6Ol8oJ0dldCBBY2Nlc3MgVG9rZW4nKSAuICciJzsNCgkJCQkkc2V0X2FjY2Vzc190b2tlbl91cmwgPSAnIicgLiBKb29tbGFfX19lZWNjMTQzZV9iNWNmXzRjMzNfYmE0ZF85N2RhMWRmNjE0MjJfX19Qb3dlcjo6cm9vdCgpIC4gJ2FkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fY29uZmlnJnZpZXc9Y29tcG9uZW50JmNvbXBvbmVudD1jb21fW1tbY29tcG9uZW50XV1dJnBhdGg9JnJldHVybj0nIC4gJHJldHVybiAuICciIHRpdGxlPSInIC4gVGV4dDo6XygnU2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCS8vIGxvYWQgdGhlIG1lc3NhZ2UNCgkJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZSgNCgkJCQkJVGV4dDo6c3ByaW50ZigiSWYgdGhlcmUgd2FzIGEgZG93bmxvYWQvdXBkYXRlIGVycm9yLCBpdCdzIHByb2JhYmx5IGJlY2F1c2UgdGhlIDxhIGhyZWY9JXMgPkFQSSBBY2Nlc3MgVG9rZW48L2E+IGZvciB1cGRhdGVzIG9mIFtbW2NvbXBvbmVudF1dXSBoYXMgbm90IGJlZW4gc2V0LCB5b3UgY2FuIHNldCB0aGlzIGFjY2VzcyB0b2tlbiBpbiB0aGUgPGEgaHJlZj0lcyA+Z2xvYmFsIG9wdGlvbnMgdGFiPC9hPi4iLA0KCQkJCQkJJGdldF9hY2Nlc3NfdG9rZW5fdXJsLA0KCQkJCQkJJHNldF9hY2Nlc3NfdG9rZW5fdXJsDQoJCQkJCSksICdub3RpY2UnKTsNCgkJCX0NCgkJfQ0KCX0NCg==', 'componentbuilder_public', '', '', '', 'Ly8=', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"39\"},\"property_selection1\":{\"property\":\"37\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev - public)', '', 1, '', '', 1, '2021-12-20 16:18:59', '2024-08-06 20:58:03', 6, '', 9),
-(26, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set dynamic gets class headers.', '{\"fields0\":{\"file\":\"dynamic_get\",\"fields_name\":\"params.dynamic_get_headers\",\"fieldset\":\"dynamic_get_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2855\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2859\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2963\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2981\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2980\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2962\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2890\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2887\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2993\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2854\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2860\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2961\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2856\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2858\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2960\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2982\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2979\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2959\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2889\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2888\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2994\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2853\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2857\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2958\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"2866\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"2862\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"2971\",\"custom_value\":\"\"},\"fields27\":{\"field\":\"2990\",\"custom_value\":\"\"},\"fields28\":{\"field\":\"2991\",\"custom_value\":\"\"},\"fields29\":{\"field\":\"2957\",\"custom_value\":\"\"},\"fields30\":{\"field\":\"2893\",\"custom_value\":\"\"},\"fields31\":{\"field\":\"2892\",\"custom_value\":\"\"},\"fields32\":{\"field\":\"2998\",\"custom_value\":\"\"},\"fields33\":{\"field\":\"2867\",\"custom_value\":\"\"},\"fields34\":{\"field\":\"2861\",\"custom_value\":\"\"},\"fields35\":{\"field\":\"2956\",\"custom_value\":\"\"},\"fields36\":{\"field\":\"2865\",\"custom_value\":\"\"},\"fields37\":{\"field\":\"2863\",\"custom_value\":\"\"},\"fields38\":{\"field\":\"2955\",\"custom_value\":\"\"},\"fields39\":{\"field\":\"2989\",\"custom_value\":\"\"},\"fields40\":{\"field\":\"2992\",\"custom_value\":\"\"},\"fields41\":{\"field\":\"2954\",\"custom_value\":\"\"},\"fields42\":{\"field\":\"2894\",\"custom_value\":\"\"},\"fields43\":{\"field\":\"2891\",\"custom_value\":\"\"},\"fields44\":{\"field\":\"2997\",\"custom_value\":\"\"},\"fields45\":{\"field\":\"2868\",\"custom_value\":\"\"},\"fields46\":{\"field\":\"2864\",\"custom_value\":\"\"},\"fields47\":{\"field\":\"2953\",\"custom_value\":\"\"},\"fields48\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields49\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields50\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'd44a5259-8dc9-4214-aa1d-e436ccc1f50c', 'SkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQoNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47', 3, '{}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrZHluYW1pY19nZXRd', '[[[Component]]] Dynamic Get Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.3', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Dynamic Get Headers Tabs', '', 1, '', '', 1, '2022-01-10 03:11:11', '2024-08-06 20:58:21', 24, '', 2),
-(27, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 'This plugin is used to load scripture on your website. So it adds https://cdn.jsdelivr.net/gh/getbible/loader@3.1.0/dist/js/getBible.min.js to the header of your website. See: https://getbible.net/loader for more details.', '{}', '3d7c1a27-54ca-418d-a77a-6590147cf901', 'dXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXEh0bWxcSFRNTEhlbHBlcjsNCg==', 8, '{\"method_selection0\":{\"method\":\"122\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBoZWFkIGlzIGNvbXBpbGVkIGFuZCBhbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBoZWFkIGRhdGEuDQoJICogSW4gdGhpcyBjYXNlLCBpdCdzIHVzZWQgdG8gYWRkIGEgSmF2YVNjcmlwdCBmaWxlIHRvIHRoZSBmcm9udCBlbmQgb2YgdGhlIEpvb21sYSBzaXRlLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMy4wLjANCgkgKiBAdGhyb3dzICBFeGNlcHRpb24gb24gZXJyb3IuDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQmVmb3JlQ29tcGlsZUhlYWQoKQ0KCXsNCgkJLy8gQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBzaXRlIGFwcGxpY2F0aW9uDQoJCWlmICgkdGhpcy0+YXBwLT5pc0NsaWVudCgnc2l0ZScpKSB7DQoJCQlIVE1MSGVscGVyOjpfKCdzY3JpcHQnLCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL2dldGJpYmxlL2xvYWRlckAzLjEuMC9kaXN0L2pzL2dldEJpYmxlLm1pbi5qcycsIFsndmVyc2lvbicgPT4gJ2F1dG8nXSk7DQoJCX0NCgl9', 'GetBibleLoader', '', '', '', 'CQkJJGp2ZXJzaW9uID0gbmV3IEpWZXJzaW9uKCk7DQoJCQlpZiAoISRqdmVyc2lvbi0+aXNDb21wYXRpYmxlKCczLjEwLjAnKSkgew0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgdXBncmFkZSB0byBhdCBsZWFzdCBKb29tbGEhIDMuMTAgYmVmb3JlIGNvbnRpbnVpbmchJywgJ2Vycm9yJyk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0K', '', '', '', '3.1.0', '{\"property_selection0\":{\"property\":\"25\"}}', 'IyBnZXRCaWJsZSBMb2FkZXIgKFtbW3BsdWdpbi52ZXJzaW9uXV1dKQ0KDQojIyMgVGhlIEpvb21sYSBwbHVnaW4gZnJvbSBbZ2V0QmlibGUubmV0XShodHRwczovL2dldGJpYmxlLm5ldC9qb29tbGEpIHRvIGxvYWQgb2YgdGhlIFNjcmlwdHVyZXMgaW4geW91ciB3ZWJzaXRlIGNvbnRlbnQuDQoNCkFkaW5nIHRoZSBbZ2V0QmlibGUgTG9hZGVyIFNjcmlwdF0oaHR0cHM6Ly9naXQudmRtLmRldi9nZXRCaWJsZS9sb2FkZXIpIHRoZSB0aGUgaGVhZGVyIG9mIHlvdXIgd2Vic2l0ZSwgd2UgYXJlIGFkZGluZyB0aGUgYWJpbGl0eSB0byB5b3VyIEpvb21sYSB3ZWJzaXRlIHRvIGFkZCBTY3JpcHR1cmVzIHRvIHlvdXIgY29udGVudCB2ZXJ5IGVhc2lseS4NCg0KIyMgSG93Pw0KDQotIERvd25sb2FkIHRoZSBwbHVnaW4gW2hlcmVdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvbG9hZGVyLXBsdWdpbi9hcmNoaXZlL21hc3Rlci56aXApLg0KLSBJbnN0YWxsIHRoZSBwbHVnaW4gb24geW91ciBKb29tbGEgMy80LzUgd2Vic2l0ZS4NCi0gQWRkIGEgY2xhc3MgYGdldEJpYmxlYCB0byBhbnkgZWxlbWVudCAoaW4geW91ciBjb250ZW50KSB0aGF0IGNvbnRhaW5zIGEgU2NyaXB0dXJlIHJlZmVyZW5jZXMgbGlrZSB0aGlzOg0KDQogICBgYGBodG1sDQogICA8dWw+DQogICAgIDxsaSBjbGFzcz0iZ2V0QmlibGUiPkpvaG4gMzoxNjwvbGk+DQogICAgIDxsaSBjbGFzcz0iZ2V0QmlibGUiPjEgSm9obiAzOjE2LTE5LDIyPC9saT4NCiAgICAgPCEtLSBBZGQgbW9yZSBlbGVtZW50cyBhcyBuZWVkZWQgLS0+DQogICA8L3VsPg0KICAgYGBgDQotIEZvbGxvdyB0aGVzZSBbcmVmZXJlbmNlIG5hbWluZ10oaHR0cHM6Ly9naXQudmRtLmRldi9nZXRCaWJsZS9sb2FkZXIjc2NyaXB0dXJlLXJlZmVyZW5jZS1mb3JtYXR0aW5nKSBjb252ZW50aW9ucy4NCi0gVGhlcmUgaXMgYWxzbyBbY3VzdG9taXphdGlvbiBvcHRpb25dKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvbG9hZGVyI3V0aWxpemluZy1kYXRhLWF0dHJpYnV0ZXMpIGF2YWlsYWJsZS4NCi0gRm9yIG1vcmUgZGV0YWlscyBnb3QgdG8gdGhlIFtCaWJsZWtpdCBkb2N1bWVudGF0aW9uXShodHRwczovL2dldGJpYmxlLm5ldC9sb2FkZXIpIHBhZ2UuDQoNCj4gU3VwcG9ydCBjYW4gYmUgZm91bmQgYXQgb3VyIFtjb21tdW5pdHkgc3VwcG9ydCBhcmVhXShodHRwczovL2dpdC52ZG0uZGV2L2dldEJpYmxlL3N1cHBvcnQpLg0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbZ2V0QmlibGUgTG9hZGVyXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiBbW1twbHVnaW4udmVyc2lvbl1dXQ0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQo+IFRoaXMgKipwbHVnaW4qKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ==', '', '', '', 'GetBible Loader', '', 1, '', '', 1, '2023-07-26 05:24:37', '2024-08-06 20:58:25', 40, '', 2),
(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', '2024-08-06 20:58:28', 6, '', 2),
-(29, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set component dashboard class custom headers.', '{\"fields0\":{\"file\":\"component_dashboard\",\"fields_name\":\"params.component_dashboard_headers\",\"fieldset\":\"component_dashboard_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3010\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"3014\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3006\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"3011\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"3015\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"3007\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"3012\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"3016\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"3008\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"3013\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"3017\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"3009\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'e682b390-810c-4c47-b5b8-8ebd3621aecf', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStjb21wb25lbnRfZGFzaGJvYXJkXQ==', '[[[Component]]] Component Dashboard Headers Tabs', '', '', '', '', '', '', '', '4.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Component Dashboard Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:01', '2024-08-11 11:40:45', 6, '', 2),
-(30, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to build the power autoloader plugin for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Global Autoloader\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2977\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2680\",\"custom_value\":\"\"}}}}', 'c5be15b5-cf71-47ed-89fc-6ee2150084aa', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 11, '{\"method_selection0\":{\"method\":\"117\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBjb21wb25lbnQgbmVlZHMgYSBwb3dlciBhdXRvbG9hZGVyIHBsdWdpbiBsb2FkZWQNCgkJaWYgKFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5hZGRfcG93ZXIgJiYgJHRoaXMtPmNvbXBvbmVudEFjdGl2ZSgpKQ0KCQl7DQoJCQkvLyBub3cgZ2V0IHRoZSBwbHVnaW4gSUQgaWYgc2V0DQoJCQlpZiAoKCRpZCA9IChpbnQpICR0aGlzLT5wYXJhbXMtPmdldCgncGx1Z2luJywgMCkpICE9PSAwKQ0KCQkJew0KCQkJCS8vIGxvYWQgdGhlIHBvd2VyIGF1dG9sb2FkZXIgcGx1Z2luDQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnSm9vbWxhcGx1Z2luLkRhdGEnKS0+c2V0KCRpZCk7DQoJCQkJLy8gbm93IHNldCB0aGUgcGx1Z2luIHBvd2VycyBwbGFjZWhvbGRlcg0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+c2V0KCdQTFVHSU5fUE9XRVJfQVVUT0xPQURFUicsICcnKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdZb3UgZG8gbm90IGhhdmUgYSBnbG9iYWwgcG93ZXIgcGx1Z2luIHNldHVwLCBzbyB0aGUgcG93ZXJzIHBsdWdpbiBhdXRvbG9hZGVyIGNvdWxkIG5vdCBiZSBhZGRlZC4nKSwgJ1dhcm5pbmcnKTsNCgkJCX0NCgkJfQ0KCX0NCltDVVNUT01DT0RFPWNvbXBvbmVudEFjdGl2ZV0=', '[[[Component]]] Powers Autoloader Compiler', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Powers Autoloader Compiler J5', '', 1, '', '', 1, '2024-03-10 15:54:15', '2024-08-11 11:40:34', 7, '', 3),
-(31, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set component class custom headers.', '{\"fields0\":{\"file\":\"joomla_component\",\"fields_name\":\"params.joomla_component_headers\",\"fieldset\":\"joomla_component_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2871\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2872\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2974\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2873\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2874\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2975\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2878\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2877\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2973\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2875\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2876\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2972\",\"custom_value\":\"\"}}}}', '5a37b156-fec3-4b56-b748-69f4ecff5ca1', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStqb29tbGFfY29tcG9uZW50XQ==', '[[[Component]]] Component Headers Tabs', '', '', '', '', '', '', '', '4.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Component Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:18', '2024-08-11 11:40:03', 8, '', 2),
-(32, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set custom admin class custom headers.', '{\"fields0\":{\"file\":\"custom_admin_view\",\"fields_name\":\"params.custom_admin_view_headers\",\"fieldset\":\"custom_admin_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2866\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2862\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2971\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2990\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2991\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2957\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2893\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2892\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2998\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2867\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2861\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2956\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2865\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2863\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2955\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2989\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2992\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2954\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2894\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2891\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2997\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2868\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2864\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2953\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', '69c4c213-5ef7-4ebf-b51f-c723edb1643b', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStjdXN0b21fYWRtaW5fdmlld10=', '[[[Component]]] Custom Admin Headers Tabs', '', '', '', '', '', '', '', '4.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Custom Admin Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:22', '2024-08-11 11:39:55', 7, '', 2),
-(33, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set site class custom headers.', '{\"fields0\":{\"file\":\"site_view\",\"fields_name\":\"params.site_view_headers\",\"fieldset\":\"site_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2855\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2859\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2963\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2981\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2980\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2962\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2890\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2887\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2993\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2854\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2860\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2961\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2856\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2858\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2960\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2982\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2979\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2959\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2889\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2888\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2994\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2853\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2857\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2958\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', '1628a6a8-926c-4d91-a1da-cc9e096514fc', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7DQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStzaXRlX3ZpZXdd', '[[[Component]]] Site Headers Tabs', '', '', '', '', '', '', '', '4.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Site Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:32', '2024-08-11 11:39:44', 5, '', 2),
-(34, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set admin class custom headers.', '{\"fields0\":{\"file\":\"admin_view\",\"fields_name\":\"params.admin_view_headers\",\"fieldset\":\"admin_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2849\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2846\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2969\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2983\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2985\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2968\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2886\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2884\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2995\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2850\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2845\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2967\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2844\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2847\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2966\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2984\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2986\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2965\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2885\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2883\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2996\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2851\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2848\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2964\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"2895\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"2896\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"2970\",\"custom_value\":\"\"},\"fields27\":{\"field\":\"2987\",\"custom_value\":\"\"},\"fields28\":{\"field\":\"2988\",\"custom_value\":\"\"},\"fields29\":{\"field\":\"2952\",\"custom_value\":\"\"},\"fields30\":{\"field\":\"2897\",\"custom_value\":\"\"},\"fields31\":{\"field\":\"2898\",\"custom_value\":\"\"},\"fields32\":{\"field\":\"2999\",\"custom_value\":\"\"},\"fields33\":{\"field\":\"3088\",\"custom_value\":\"\"},\"fields34\":{\"field\":\"3089\",\"custom_value\":\"\"},\"fields35\":{\"field\":\"3090\",\"custom_value\":\"\"},\"fields36\":{\"field\":\"3091\",\"custom_value\":\"\"},\"fields37\":{\"field\":\"3092\",\"custom_value\":\"\"},\"fields38\":{\"field\":\"3093\",\"custom_value\":\"\"},\"fields39\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields40\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields41\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'b14309ee-f0e0-4250-ac14-d8e2f635cbad', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZSthZG1pbl92aWV3XQ==', '[[[Component]]] Admin Headers Tabs', '', '', '', '', '', '', '', '4.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Admin Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:34', '2024-08-11 11:39:35', 5, '', 2),
-(35, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set the custom headers for your classes during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to set your code where you would like to set Custom Headers.', '{}', '3584933e-d2a1-48a4-a92d-119ae8d32135', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTs=', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"},\"method_selection2\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEdsb2JhbCBzd2l0Y2ggdG8gc2VlIGlmIGEgZmlsZSBoYXMgY3VzdG9tIGhlYWRlcnMuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRsb2FkSGVhZGVycyA9IGZhbHNlOw0KDQoJLyoqDQoJICogVGhlIGFjdGl2ZSBoZWFkZXJzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuOA0KCSAqLw0KCXByb3RlY3RlZCAkYWN0aXZlSGVhZGVycyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIGNvbXBpbGVyIHBsYWNlaG9sZGVycyB2YWx1ZXMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC42DQoJICovDQoJcHJvdGVjdGVkICRwbGFjZWhvbGRlcnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogVGhlIHBvd2VycyB0byBpbmNsdWRlIGluIHByb2plY3QNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC42DQoJICovDQoJcHJvdGVjdGVkICRsaW5rZWRQb3dlcnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogVGhlIFRhcmdldHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC44DQoJICovDQoJcHJvdGVjdGVkICR0YXJnZXRzID0gYXJyYXkoDQoJCSdhZG1pbl92aWV3X2hlYWRlcnMnICAgICAgICAgID0+DQoJCQlhcnJheSgNCgkJCQknYWRkX2FkbWluX3ZpZXdfbW9kZWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXcubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfc2luZ2xlJw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3JyAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3JywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX3NpbmdsZScNCgkJCQkpLA0KCQkJCSdhZGRfYWRtaW5fdmlld19odG1sJyAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fdmlld19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfc2luZ2xlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX2FkbWluX3ZpZXdfaHRtbCcgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS5hZG1pbi52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfc2luZ2xlJw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3X2NvbnRyb2xsZXInICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXcuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9zaW5nbGUnDQoJCQkJKSwNCgkJCQknYWRkX2FqYXhfbW9kZWwnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FqYXhfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FqYXguYWRtaW4ubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2FqYXgnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXdzX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3cy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3cycgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3cycsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4udmlld3MnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfbGlzdCcNCgkJCQkpLA0KCQkJCSdhZGRfYWRtaW5fdmlld3NfaHRtbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fdmlld3NfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4udmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3c19jb250cm9sbGVyJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3cy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX2xpc3QnDQoJCQkJKSwNCgkJCQknYWRkX2ltcG9ydF9jdXN0b21fY29udHJvbGxlcicgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnaW1wb3J0X2N1c3RvbV9jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdpbXBvcnQuY3VzdG9tLmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfbGlzdCcNCgkJCQkpLA0KCQkJCSdhZGRfaW1wb3J0X2N1c3RvbV9tb2RlbCcgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnaW1wb3J0X2N1c3RvbV9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnaW1wb3J0LmN1c3RvbS5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSkNCgkJCSksDQoJCSdzaXRlX3ZpZXdfaGVhZGVycycgICAgICAgICAgID0+DQoJCQlhcnJheSgNCgkJCQknYWRkX3NpdGVfdmlld19tb2RlbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXcubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlldycgICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXcnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld19odG1sJyAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdfY29udHJvbGxlcicgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXcuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19tb2RlbCcgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXdzLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzJyAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3MnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3NfaHRtbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3c19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXdzLmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3NfY29udHJvbGxlcicgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXdzLmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2FqYXhfbW9kZWwnICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWpheF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWpheC5zaXRlLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdhamF4Jw0KCQkJCSkNCgkJCSksDQoJCSdjdXN0b21fYWRtaW5fdmlld19oZWFkZXJzJyAgID0+DQoJCQlhcnJheSgNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X21vZGVsJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXcubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3JyAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlldycsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXcnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X2h0bWwnICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19jb250cm9sbGVyJyAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXcuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXdzLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3MnICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19odG1sJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3NfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXdzLmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19jb250cm9sbGVyJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3NfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXdzLmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2FqYXhfbW9kZWwnICAgICAgICAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhamF4X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhamF4LmFkbWluLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdhamF4Jw0KCQkJCSkNCgkJCSksDQoJCSdkeW5hbWljX2dldF9oZWFkZXJzJyAgICAgICAgICAgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfc2l0ZV92aWV3X21vZGVsJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3JyAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXcnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3X2h0bWwnICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld19jb250cm9sbGVyJyAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3NfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3MnICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3cycsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19odG1sJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19jb250cm9sbGVyJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfbW9kZWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXcnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X2NvbnRyb2xsZXInICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3cycgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3MnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfYWpheF9tb2RlbCcgICAgICAgICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FqYXhfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FqYXguYWRtaW4ubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2FqYXgnDQoJCQkJKQ0KCQkJKSwNCgkJJ2NvbXBvbmVudF9kYXNoYm9hcmRfaGVhZGVycycgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfZGFzaGJvYXJkX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2Rhc2hib2FyZF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnZGFzaGJvYXJkLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdkYXNoYm9hcmQnDQoJCQkJKSwNCgkJCQknYWRkX2Rhc2hib2FyZF92aWV3JyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdkYXNoYm9hcmRfdmlldycsDQoJCQkJCSdjb250ZXh0JyA9PiAnZGFzaGJvYXJkLnZpZXcnLA0KCQkJCQkndmlldycgICAgPT4gJ2Rhc2hib2FyZCcNCgkJCQkpLA0KCQkJCSdhZGRfZGFzaGJvYXJkX3ZpZXdfaHRtbCcgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2Rhc2hib2FyZF92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2Rhc2hib2FyZC52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2Rhc2hib2FyZCcNCgkJCQkpLA0KCQkJCSdhZGRfZGFzaGJvYXJkX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2Rhc2hib2FyZF9jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdkYXNoYm9hcmQuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnZGFzaGJvYXJkJw0KCQkJCSksDQoJCQkJJ2FkZF9hamF4X21vZGVsJyAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWpheF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWpheC5hZG1pbi5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnYWpheCcNCgkJCQkpDQoJCQkpLA0KCQknam9vbWxhX2NvbXBvbmVudF9oZWFkZXJzJyAgICA9Pg0KCQkJYXJyYXkoDQoJCQkJJ2FkZF9hZG1pbl9jb21wb25lbnQnID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX2NvbXBvbmVudCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4uY29tcG9uZW50JywNCgkJCQkJJ3ZpZXcnICAgID0+ICdhZG1pbicNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV9jb21wb25lbnQnICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX2NvbXBvbmVudCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS5jb21wb25lbnQnLA0KCQkJCQkndmlldycgICAgPT4gJ3NpdGUnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX2hlbHBlcicgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5faGVscGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi5oZWxwZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2FkbWluJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX2hlbHBlcicgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfaGVscGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLmhlbHBlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnc2l0ZScNCgkJCQkpDQoJCQkpDQoJKTsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxWaWV3RGF0YSgmJHZpZXcpDQoJew0KCQkvLyBjaGVjayB0aGF0IHRoZSBwYXJhbXMgYXJlIHNldA0KCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtcykpDQoJCXsNCgkJCS8vIGFkZCB0aGUgaGVhZGVycyBmb3IgdGhlIEFkbWluIFZpZXdzDQoJCQkkdGhpcy0+c2V0SGVhZGVycygkdmlldy0+cGFyYW1zLCAkdmlldywgJ2FkbWluX3ZpZXdfaGVhZGVycycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIEN1c3RvbSBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbEN1c3RvbVZpZXdEYXRhKCYkdmlldywgJiRpZCwgJiR0YWJsZSkNCgl7DQoJCS8vIGNoZWNrIHRoYXQgdGhlIHBhcmFtcyBhcmUgc2V0DQoJCWlmIChpc3NldCgkdmlldy0+cGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgU2l0ZSBWaWV3cw0KCQkJJHRoaXMtPnNldEhlYWRlcnMoJHZpZXctPnBhcmFtcywgJHZpZXcsICdzaXRlX3ZpZXdfaGVhZGVycycpOw0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgQ3VzdG9tIEFkbWluIFZpZXdzDQoJCQkkdGhpcy0+c2V0SGVhZGVycygkdmlldy0+cGFyYW1zLCAkdmlldywgJ2N1c3RvbV9hZG1pbl92aWV3X2hlYWRlcnMnKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBEeW5hbWljIEdldCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjEwDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZU1vZGVsRHluYW1pY0dldERhdGEoJiRkeW5hbWljR2V0LCAmJGlkLCAmJGNvZGUsICYkYXJlYSkNCgl7DQoJCS8vIGNoZWNrIHRoYXQgdGhlIHBhcmFtcyBhcmUgc2V0DQoJCWlmIChpc3NldCgkZHluYW1pY0dldC0+cGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgU2l0ZSBWaWV3cw0KCQkJJHRoaXMtPnNldER5bmFtaWNIZWFkZXJzKCRkeW5hbWljR2V0LT5wYXJhbXMsICRjb2RlLCAnZHluYW1pY19nZXRfaGVhZGVycycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxDb21wb25lbnREYXRhKCYkY29tcG9uZW50KQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB0aGUgcGFyYW1zIGFyZSBzZXQNCgkJaWYgKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtcykpDQoJCXsNCgkJCS8vIGFkZCB0aGUgaGVhZGVycyBmb3IgdGhlIEpvb21sYSBDb21wb25lbnQNCgkJCSR0aGlzLT5zZXRIZWFkZXJzKCRjb21wb25lbnQtPnBhcmFtcywgJGNvbXBvbmVudCwgJ2pvb21sYV9jb21wb25lbnRfaGVhZGVycycpOw0KCQl9DQoJCS8vIGNoZWNrIHRoYXQgdGhlIGRhc2hib2FyZCBwYXJhbXMgYXJlIHNldA0KCQlpZiAoaXNzZXQoJGNvbXBvbmVudC0+ZGFzaGJvYXJkX3BhcmFtcykpDQoJCXsNCgkJCS8vIGFkZCB0aGUgaGVhZGVycyBmb3IgdGhlIENvbXBvbmVudCBEYXNoYm9hcmQNCgkJCSR0aGlzLT5zZXRIZWFkZXJzKCRjb21wb25lbnQtPmRhc2hib2FyZF9wYXJhbXMsICRjb21wb25lbnQsICdjb21wb25lbnRfZGFzaGJvYXJkX2hlYWRlcnMnKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIHNldCBDbGFzcyBIZWFkZXJdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX3NldENsYXNzSGVhZGVyKCYkZXZlbnRfY29udGV4dCwgJiR2aWV3X25hbWUsICYkaGVhZGVycykNCgl7DQoJCWlmICgkdGhpcy0+bG9hZEhlYWRlcnMgJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUhlYWRlcnNbJHZpZXdfbmFtZV0pDQoJCQkmJiBpc3NldCgkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZXZlbnRfY29udGV4dF0pDQoJCQkmJiBpc19hcnJheSgkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZXZlbnRfY29udGV4dF0pKQ0KCQl7DQoJCQkvLyB3b3JrIHdpdGggdGhlIGhlYWRlciB2YWx1ZXMgYXMga2V5cw0KCQkJJF9oZWFkZXJzID0gYXJyYXlfZmxpcCgkaGVhZGVycyk7DQoNCgkJCS8vIG5ldyBoZWFkZXJzDQoJCQkkbmV3ID0gJHRoaXMtPmFjdGl2ZUhlYWRlcnNbJHZpZXdfbmFtZV1bJGV2ZW50X2NvbnRleHRdOw0KDQoJCQkvLyBub3cgYWRkIHRoZSBuZXcgaGVhZGVycw0KCQkJZm9yZWFjaCAoJG5ldyBhcyAkbiA9PiAkaGVhZGVyKQ0KCQkJew0KCQkJCS8vIGlmIGFuIGVtcHR5IGxpbmUgaXMgZm91bmQganVzdCBza2lwIGl0IA0KCQkJCS8vIHdlIGNoZWNrIGlmIHRoaXMgaGVhZGVyIGlzIGFscmVhZHkgc2V0DQoJCQkJaWYgKGVtcHR5KCRoZWFkZXIpIHx8IGlzc2V0KCRfaGVhZGVyc1skaGVhZGVyXSkpDQoJCQkJew0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJJGhlYWRlcnNbXSA9ICRoZWFkZXI7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgR2V0IENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjYNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlR2V0Q29tcG9uZW50RGF0YSgpDQoJew0KCQkvLyBnZXQgcGxhY2Vob2xkZXJzIGZyb20gdGhlIGNvbXBpbGVyDQoJCSR0aGlzLT5wbGFjZWhvbGRlcnMgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21wb25lbnQuUGxhY2Vob2xkZXInKS0+Z2V0KCk7DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQWZ0ZXIgR2V0IENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjYNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXRDb21wb25lbnREYXRhKCkNCgl7DQoJCS8vIGFkZCB0aGUgcG93ZXJzIHRvIHRoZSBjb21wb25lbnQNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5saW5rZWRQb3dlcnMsIHRydWUpKQ0KCQl7DQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdQb3dlcicpLT5sb2FkKCR0aGlzLT5saW5rZWRQb3dlcnMpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogc2V0IHRoZSBoZWFkZXJzDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuOA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRIZWFkZXJzKCYkcGFyYW1zLCAmJG9iaiwgJGtleSkNCgl7DQoJCS8vIGFkZCB0aGUgaGVhZGVycw0KCQkkcGFyYW1zID0gKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRwYXJhbXMpKSA/IGpzb25fZGVjb2RlKCRwYXJhbXMsIHRydWUpIDogJHBhcmFtczsNCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGtleXMgdmFsdWVzIGluIHRoZSBwYXJhbXMgYXJlYQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBhcmFtcykgJiYgaXNzZXQoJHBhcmFtc1ska2V5XSkNCgkJCSYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwYXJhbXNbJGtleV0pKQ0KCQl7DQoJCQlmb3JlYWNoICgkdGhpcy0+dGFyZ2V0c1ska2V5XSBhcyAkdGFyZ2V0ID0+ICRldmVudCkNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJHBhcmFtc1ska2V5XVskdGFyZ2V0XSkNCgkJCQkJJiYgJHBhcmFtc1ska2V5XVskdGFyZ2V0XSA9PSAxKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBoZWFkZXIgc3RyaW5nIGlmIHNldA0KCQkJCQkkdGhpcy0+Z2V0SGVhZGVycygNCgkJCQkJCSRwYXJhbXNbJGtleV0sDQoJCQkJCQkkZXZlbnQsDQoJCQkJCQkkdGhpcy0+Z2V0Vmlld05hbWUoDQoJCQkJCQkJJG9iaiwNCgkJCQkJCQkkZXZlbnRbJ3ZpZXcnXQ0KCQkJCQkJKQ0KCQkJCQkpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIHNldCB0aGUgZHluYW1pYyBnZXQgaGVhZGVycw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjEwDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldER5bmFtaWNIZWFkZXJzKCRwYXJhbXMsICRjb2RlLCAka2V5KQ0KCXsNCgkJLy8gYWRkIHRoZSBoZWFkZXJzDQoJCSRwYXJhbXMgPSAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHBhcmFtcykpID8ganNvbl9kZWNvZGUoJHBhcmFtcywgdHJ1ZSkgOiAkcGFyYW1zOw0KCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUga2V5cyB2YWx1ZXMgaW4gdGhlIHBhcmFtcyBhcmVhDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zKSAmJiBpc3NldCgkcGFyYW1zWyRrZXldKQ0KCQkJJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBhcmFtc1ska2V5XSkpDQoJCXsNCgkJCWZvcmVhY2ggKCR0aGlzLT50YXJnZXRzWyRrZXldIGFzICR0YXJnZXQgPT4gJGV2ZW50KQ0KCQkJew0KCQkJCWlmIChpc3NldCgkcGFyYW1zWyRrZXldWyR0YXJnZXRdKQ0KCQkJCQkmJiAkcGFyYW1zWyRrZXldWyR0YXJnZXRdID09IDEpDQoJCQkJew0KCQkJCQkvLyBnZXQgdGhlIGhlYWRlciBzdHJpbmcgaWYgc2V0DQoJCQkJCSR0aGlzLT5nZXRIZWFkZXJzKA0KCQkJCQkJJHBhcmFtc1ska2V5XSwNCgkJCQkJCSRldmVudCwNCgkJCQkJCSRjb2RlDQoJCQkJCSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBoZWFkZXJzDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGVhZGVycygmJHBhcmFtcywgJiRnZXQsICR2aWV3X25hbWUpDQoJew0KCQkvLyB3ZSBmaXJzdCBjaGVjayBpZiB0aGUgdmFsdWUgaXMgc2V0DQoJCWlmIChpc3NldCgkcGFyYW1zWyRnZXRbJ2ZpZWxkJ11dKSB8fCBpc3NldCgkcGFyYW1zWydwb3dlcl8nIC4gJGdldFsnZmllbGQnXV0pKQ0KCQl7DQoJCQkvLyBzdGFydCBsaXR0bGUgaGVhZGVycyBidWNrZXQNCgkJCSRoZWFkZXJzID0gW107DQoNCgkJCS8vIGxvYWQgdGhlIGhlYWRlcnMgaWYgcG93ZXINCgkJCWlmIChpc3NldCgkcGFyYW1zWydwb3dlcl8nIC4gJGdldFsnZmllbGQnXV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwYXJhbXNbJ3Bvd2VyXycgLiAkZ2V0WydmaWVsZCddXSwgdHJ1ZSkNCgkJCQkmJiAoJHBvd2VycyA9ICR0aGlzLT5nZXRQb3dlcnMoJHBhcmFtc1sncG93ZXJfJyAuICRnZXRbJ2ZpZWxkJ11dKSkgIT09IG51bGwpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHBvd2VycyBhcyAkcG93ZXIpDQoJCQkJew0KCQkJCQkkcG93ZXIgPSB0cmltKCRwb3dlcik7DQoJCQkJCSRoZWFkZXJzWyRwb3dlcl0gPSAkcG93ZXI7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBsb2FkIHRoZSBoZWFkZXJzIGlmIHRleHQNCgkJCWlmIChpc3NldCgkcGFyYW1zWyRnZXRbJ2ZpZWxkJ11dKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zWyRnZXRbJ2ZpZWxkJ11dKSkNCgkJCXsNCgkJCQlpZiAoKCRfaGVhZGVycyA9IGV4cGxvZGUoUEhQX0VPTCwgJHBhcmFtc1skZ2V0WydmaWVsZCddXSkpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJF9oZWFkZXJzIGFzICRoZWFkZXIpDQoJCQkJCXsNCgkJCQkJCSRoZWFkZXIgPSB0cmltKCRoZWFkZXIpOw0KCQkJCQkJaWYgKGVtcHR5KCRoZWFkZXIpKQ0KCQkJCQkJew0KCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJfQ0KCQkJCQkJJGhlYWRlcnNbJGhlYWRlcl0gPSAkaGVhZGVyOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBjaGVjayBpZiB3ZSBmb3VuZCBzb21lIGhlYWRlciB2YWx1ZXMNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaGVhZGVycywgdHJ1ZSkpDQoJCQl7DQoJCQkJLy8gYWN0aXZhdGUgdGhlIGxvYWQgb2YgdGhlIGhlYWRlcnMNCgkJCQkkdGhpcy0+bG9hZEhlYWRlcnMgPSB0cnVlOw0KCQkJCS8vIGNoZWNrIGlmIHRoaXMgYWN0aXZlIGhlYWRlciBpcyBhbHJlYWR5IHNldA0KCQkJCWlmICghaXNzZXQoJHRoaXMtPmFjdGl2ZUhlYWRlcnNbJHZpZXdfbmFtZV1bJGdldFsnY29udGV4dCddXSkpDQoJCQkJew0KCQkJCQkvLyBzdGFydCB0aGUgYWN0aXZlIGhlYWRlcg0KCQkJCQkkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZ2V0Wydjb250ZXh0J11dID0gW107DQoJCQkJfQ0KCQkJCS8vIGxvYWQgdGhlIGZvdW5kIGhlYWRlcnMgYW5kIGF2b2lkIGFkZGluZyB0aGUgc2FtZSBoZWFkZXIgdHdpY2UNCgkJCQlmb3JlYWNoICgkaGVhZGVycyBhcyAkaGVhZGVyKQ0KCQkJCXsNCgkJCQkJJGhlYWRlciA9IHRyaW0oJGhlYWRlcik7DQoJCQkJCSR0aGlzLT5hY3RpdmVIZWFkZXJzWyR2aWV3X25hbWVdWyRnZXRbJ2NvbnRleHQnXV1bJGhlYWRlcl0gPSAkaGVhZGVyOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgdmlldyBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC44DQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdOYW1lKCYkdmlldywgJiRnZXQpDQoJew0KCQlpZiAoJGdldCA9PT0gJ3NpdGUnIHx8ICRnZXQgPT09ICdhZG1pbicgfHwgJGdldCA9PT0gJ2FqYXgnIHx8ICRnZXQgPT09ICdkYXNoYm9hcmQnKQ0KCQl7DQoJCQkvLyBzdGF0aWMga2V5IG5hbWUNCgkJCXJldHVybiAkZ2V0Ow0KCQl9DQoJCWVsc2VpZiAoaXNzZXQoJHZpZXctPnskZ2V0fSkpDQoJCXsNCgkJCXJldHVybiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKA0KCQkJCSR2aWV3LT57JGdldH0NCgkJCSk7DQoJCX0NCgkJcmV0dXJuICdfZXJyb3InOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgcG93ZXJzIGhlYWRlciB1c2Ugc3RyaW5ncw0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjYNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UG93ZXJzKCRyb3dzKTogP2FycmF5DQoJew0KCQkvLyBsb2FkIHRoZSBhY3RpdmUgcG93ZXJzDQoJCSRwb3dlcnMgPSBhcnJheV9maWx0ZXIoDQoJCQkvLyBnZXQgdGhlIHBvd2VyIG5hbWVzcGFjZQ0KCQkJYXJyYXlfbWFwKGZ1bmN0aW9uICgkcm93KSB7DQoJCQkJaWYgKCgkcG93ZXIgPSBTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjppdGVtKCRyb3dbJ3Bvd2VyJ10sICdwb3dlcicsIFsnYS5ndWlkJywgJ2EubmFtZXNwYWNlJ10pKSAhPT0gbnVsbCkNCgkJCQl7DQoJCQkJCQkkcG93ZXItPmJ1aWxkID0gKGludCkgJHJvd1snYnVpbGQnXTsNCgkJCQkJCSRwb3dlci0+YXMgPSAoc3RyaW5nKSAkcm93WydhcyddOw0KDQoJCQkJCQlyZXR1cm4gJHBvd2VyOw0KCQkJCX0NCgkJCQllbHNlaWYgKFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1N1cGVycG93ZXInKS0+bG9hZCgkcm93Wydwb3dlciddLCAgWydyZW1vdGUnXSkpDQoJCQkJew0KCQkJCQlpZiAoKCRwb3dlciA9IFN1cGVyX19fOWM1MTNiYWZfYjI3OV80M2ZkX2FlMjlfYTU4NWM4Y2JjNGYwX19fUG93ZXI6Oml0ZW0oJHJvd1sncG93ZXInXSwgJ3Bvd2VyJywgWydhLmd1aWQnLCAnYS5uYW1lc3BhY2UnXSkpICE9PSBudWxsKQ0KCQkJCQl7DQoJCQkJCQkkcG93ZXItPmJ1aWxkID0gKGludCkgJHJvd1snYnVpbGQnXTsNCgkJCQkJCSRwb3dlci0+YXMgPSAoc3RyaW5nKSAkcm93WydhcyddOw0KDQoJCQkJCQlyZXR1cm4gJHBvd2VyOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0sICRyb3dzKSwNCgkJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSB2YWxpZCBwb3dlcnMNCgkJCWZ1bmN0aW9uICgkcm93KSB7DQoJCQkJcmV0dXJuIGlzX29iamVjdCgkcm93KSAmJiBpc3NldCgkcm93LT5ndWlkKTsNCgkJCX0NCgkJKTsNCgkJLy8gYWRkIHRvIGFjdGl2ZSBwb3dlcnMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwb3dlcnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBkb3RzIHRvIG5hbWVzcGFjZQ0KCQkJcmV0dXJuIGFycmF5X21hcChmdW5jdGlvbiAoJHBvd2VyKSB7DQoJCQkJLy8gYWRkIHRvIGNvbXBpbGVyICh0byBidWlsZCkNCgkJCQlpZiAoJHBvd2VyLT5idWlsZCAhPSA2KQ0KCQkJCXsNCgkJCQkJLy8gc2VjdXJlIHRoYXQgYWx3YXlzIHdpbGwgcmVtYWluIGFsd2F5cyBldmVuIGlmIG9ubHkgc2V0IHRoYXQgd2F5IG9uY2UNCgkJCQkJaWYgKGVtcHR5KCR0aGlzLT5saW5rZWRQb3dlcnNbJHBvd2VyLT5ndWlkXSkgfHwgJHBvd2VyLT5idWlsZCA9PSAxKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+bGlua2VkUG93ZXJzWyRwb3dlci0+Z3VpZF0gPSAkcG93ZXItPmJ1aWxkOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIHRoZSBuYW1lc3BhY2UNCgkJCQkkbmFtZXNwYWNlID0gU3VwZXJfX19jZThjZjgzNF82YmFjXzQ0ZmJfOTQxY184NjFmN2UwNDZjYzBfX19Qb3dlcjo6c2FmZSgNCgkJCQkJc3RyX3JlcGxhY2UoDQoJCQkJCQlhcnJheV9rZXlzKCR0aGlzLT5wbGFjZWhvbGRlcnMpLA0KCQkJCQkJYXJyYXlfdmFsdWVzKCR0aGlzLT5wbGFjZWhvbGRlcnMpLA0KCQkJCQkJc3RyX3JlcGxhY2UoJy4nLCAnXFwnLCAkcG93ZXItPm5hbWVzcGFjZSkNCgkJCQkJKQ0KCQkJCSk7DQoJCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGFuIEFTIG9wdGlvbg0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcG93ZXItPmFzKSAmJiAkcG93ZXItPmFzICE9PSAnZGVmYXVsdCcpDQoJCQkJew0KCQkJCQlyZXR1cm4gJ3VzZSAnIC4gJG5hbWVzcGFjZSAuICcgYXMgJyAuICRwb3dlci0+YXMgLiAnOyc7DQoJCQkJfQ0KCQkJCXJldHVybiAndXNlICcgLiAkbmFtZXNwYWNlIC4gJzsnOw0KCQkJfSwgJHBvd2Vycyk7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9', '[[[Component]]] Headers Compiler', '', '', '', '', '', '', '', '4.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Headers Compiler J5', '', 1, '', '', 1, '2024-03-10 15:54:36', '2024-08-11 11:39:24', 6, '', 3),
-(36, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set the ordring for your component views during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to set your admin views where you would like to use Field Ordering.', '{}', 'abf99084-bcfe-45b2-9b7a-c8621defc69c', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTs=', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"}}', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxWaWV3RGF0YSgmJHZpZXcpDQoJew0KCQkvLyBhZGQgdGhlIHByaXZhY3kNCgkJJHZpZXctPnBhcmFtcyA9IChpc3NldCgkdmlldy0+cGFyYW1zKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zKSkgPyBqc29uX2RlY29kZSgkdmlldy0+cGFyYW1zLCB0cnVlKSA6ICR2aWV3LT5wYXJhbXM7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zKSAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXNbJ2ZpZWxkb3JkZXJpbmcnXSkpDQoJCXsNCgkJCWlmICgkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ11bJ2FkZF9hZG1pbl9vcmRlcmluZyddID09IDENCgkJCQl8fCAkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ11bJ2FkZF9saW5rZWRfb3JkZXJpbmcnXSA9PSAxKQ0KCQkJew0KCQkJCS8vIHNldHVwIHRoZSB2aWV3IGtleSBuYW1lDQoJCQkJJG5hbWVfbGlzdCAgID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCQkvLyBsb2FkIHRoZSBhZG1pbiB2aWV3IGRldGFpbHMNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLlZpZXdzLkRlZmF1bHQuT3JkZXJpbmcnKS0+c2V0KCRuYW1lX2xpc3QsICR2aWV3LT5wYXJhbXNbJ2ZpZWxkb3JkZXJpbmcnXSk7DQoJCQl9DQoJCX0NCgl9', '[[[Component]]] Field Ordering Compiler', '', '', '', '', '', '', '', '3.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Field Ordering Compiler J5', '', 1, '', '', 1, '2024-03-10 15:54:48', '2024-08-11 11:38:25', 5, '', 3),
-(37, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set custom ordering to fields in the JCB list views.', '{\"fields0\":{\"file\":\"admin_view\",\"fields_name\":\"params.fieldordering\",\"fieldset\":\"fieldordering\",\"label\":\"Field Ordering\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2751\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2753\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2749\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2754\",\"custom_value\":\"\"}}}}', 'd0e386d6-02ea-4fd9-a67e-ca369bac88f6', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg==', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3VyLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIFJ1bnMgb24gY29udGVudCBwcmVwYXJhdGlvbiBvZiBmb3JtLg0KCSAqDQoJICogQHBhcmFtICAgSkZvcm0gICAgICRmb3JtICBUaGUgZm9ybQ0KCSAqIEBwYXJhbSAgIHN0ZENsYXNzICAkZGF0YSAgVGhlIGRhdGENCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRQcmVwYXJlRm9ybShGb3JtICRmb3JtLCAkZGF0YSkNCgl7DQoJCSRjb250ZXh0ID0gJGZvcm0tPmdldE5hbWUoKTsNCg0KCQkvLyBXaGVuIHRoaXMgaXMgW1tbY29tcG9uZW50XV1dIGFkbWluIHZpZXcNCgkJaWYgKHN0cnBvcygkY29udGV4dCwgJ2NvbV9bW1tjb21wb25lbnRdXV0uYWRtaW5fdmlldycpID09PSAwKQ0KCQl7DQoJCQkvLyBBZGQgdGhlIGZvcm1zIHBhdGgNCgkJCUZvcm06OmFkZEZvcm1QYXRoKF9fRElSX18gLiAnLy4uLy4uL2Zvcm1zJyk7DQoJCQkvLyBhZGQgdGhlIGFkbWluIHZpZXcgcGFyYW1zIGZvciBwcml2YWN5IGludGVncmF0aW9uDQoJCQkkZm9ybS0+bG9hZEZpbGUoJ2FkbWluX3ZpZXcnKTsNCgkJfQ0KDQoJCXJldHVybiB0cnVlOw0KCX0=', '[[[Component]]] Field Ordering Tabs', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Field Ordering Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:52', '2024-08-11 11:38:11', 5, '', 2),
-(38, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to link your components to the language packaging and extending options, so you can set all the required details for the integration.', '{\"fields0\":{\"file\":\"joomla_component\",\"fields_name\":\"params.language_options\",\"fieldset\":\"language_options\",\"label\":\"Language Options\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2740\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2604\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2746\",\"custom_value\":\"1\"},\"fields3\":{\"field\":\"2745\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2742\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2741\",\"custom_value\":\"\"}}}}', 'c0a2a497-bd72-4524-8c83-713108b4b3ce', 'dXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCg==', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3VyLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIFJ1bnMgb24gY29udGVudCBwcmVwYXJhdGlvbiBvZiBmb3JtLg0KCSAqDQoJICogQHBhcmFtICAgRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgXHN0ZENsYXNzICAkZGF0YSAgVGhlIGRhdGENCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRQcmVwYXJlRm9ybShGb3JtICRmb3JtLCAkZGF0YSkNCgl7DQoJCSRjb250ZXh0ID0gJGZvcm0tPmdldE5hbWUoKTsNCg0KCQkvLyBXaGVuIHRoaXMgaXMgW1tbY29tcG9uZW50XV1dIGFkbWluIHZpZXcNCgkJaWYgKHN0cnBvcygkY29udGV4dCwgJ2NvbV9bW1tjb21wb25lbnRdXV0uam9vbWxhX2NvbXBvbmVudCcpID09PSAwKQ0KCQl7DQoJCQkvLyBBZGQgdGhlIGZvcm1zIHBhdGgNCgkJCUZvcm06OmFkZEZvcm1QYXRoKF9fRElSX18gLiAnLy4uLy4uL2Zvcm1zJyk7DQoJCQkvLyBhZGQgdGhlIGFkbWluIHZpZXcgcGFyYW1zIGZvciBwcml2YWN5IGludGVncmF0aW9uDQoJCQkkZm9ybS0+bG9hZEZpbGUoJ2pvb21sYV9jb21wb25lbnQnKTsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQo=', '[[[Component]]] Language Tabs', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Language Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:57', '2024-08-11 11:37:49', 5, '', 2),
-(39, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to add packaging (bundling of extentions) to JCB. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{}', 'c1e7d932-3fc5-45bc-ba13-28889af29f56', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 11, '{}', '', '[[[Component]]] Extention Packaging', '', '', '', '', '', '', '', '2.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'REUSE', '', 1, '', '', 1, '2024-03-10 15:55:00', '2024-03-10 21:20:27', 2, '', 2),
-(40, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to add language packaging to JCB. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{}', '0b8a7133-b2ff-4b7b-a5c5-0bbf039f0544', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxGb2xkZXI7DQp1c2UgSm9vbWxhXERhdGFiYXNlXERhdGFiYXNlQXdhcmVUcmFpdDs=', 11, '{\"method_selection0\":{\"method\":\"88\"},\"method_selection1\":{\"method\":\"55\"}}', 'CXVzZSBEYXRhYmFzZUF3YXJlVHJhaXQ7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW91ci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4NCgkgKg0KCSAqIEB2YXIgICAgYm9vbGVhbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIFRoZSBwZXJjZW50YWdlIGJlZm9yZSBhIGxhbmd1YWdlIGNhbiBiZSBhZGRlZA0KCSAqIA0KCSAqIEB2YXIgICAgIGludA0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJHBlcmNlbnRhZ2VMYW5ndWFnZUFkZDsNCg0KCS8qKg0KCSAqIFRoZSBwZXJjZW50YWdlIGJlZm9yZSBhIGxhbmd1YWdlIGNhbiBiZSBhZGRlZA0KCSAqIA0KCSAqIEB2YXIgICAgIGludA0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJHBlcmNlbnRhZ2VMYW5ndWFnZUFkZE92ZXJpZGUgPSAyMDA7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2VzIG5hbWVzDQoJICogDQoJICogQHZhciAgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRsYW5ndWFnZU5hbWVzID0gW107DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2UgYnVpbGRpbmcgdHJhY2tlcg0KCSAqIA0KCSAqIEB2YXIgICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VUcmFja2VyID0gW107DQoNCgkvKioNCgkgKiBUaGUgc2hvdWxkIHRoZSBzaXRlIGZvbGRlciBiZSByZW1vdmVkDQoJICogDQoJICogQHZhciAgICAgYm9vbA0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJHJlbW92ZVNpdGVGb2xkZXI7DQoNCgkvKioNCgkgKiBUaGUgc2hvdWxkIHRoZSBzaXRlIGZvbGRlciBiZSByZW1vdmVkDQoJICogDQoJICogQHZhciAgICAgYm9vbA0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJHJlbW92ZVNpdGVFZGl0Rm9sZGVyOw0KDQoJLyoqDQoJICogVGhlIGNvbXBvbmVudCBwYXRoDQoJICogDQoJICogQHZhciAgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkY29tcG9uZW50UGF0aDsNCg0KCS8qKg0KCSAqIFRoZSBjb21waWxlciBwYXRoDQoJICogDQoJICogQHZhciAgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkY29tcGlsZXJQYXRoOw0KDQoJLyoqDQoJICogVGhlIHRlbXBvcmFsIHBhdGgNCgkgKiANCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICR0ZW1wUGF0aDsNCg0KCS8qKg0KCSAqIFRoZSBqb29tbGEgdmVyc2lvbg0KCSAqIA0KCSAqIEB2YXIgICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGpvb21sYVZlcnNpb247DQoNCgkvKioNCgkgKiBUaGUgY29tcG9uZW50IHZlcnNpb24NCgkgKiANCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRjb21wb25lbnRfdmVyc2lvbjsNCg0KCS8qKg0KCSAqIFRoZSBjb21wb25lbnQgbmFtZQ0KCSAqIA0KCSAqIEB2YXIgICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGNvbXBvbmVudENvZGVOYW1lOw0KDQoJLyoqDQoJICogVGhlIGZpbGUgY29udGVudCBzdGF0aWMgdmFsdWVzDQoJICogDQoJICogQHZhciAgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRmaWxlQ29udGVudFN0YXRpYzsNCg0KCS8qDQoJICogVGhlIGxpbmUgbnVtYmVycyBTd2l0Y2gNCgkgKiANCgkgKiBAdmFyICAgICAgYm9vbGVhbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGRlYnVnTGluZW5yID0gZmFsc2U7DQoNCgkvKioNCgkgKiBUaGUgQWN0aXZlIENvbXBvbmVudHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYWN0aXZlQ29tcG9uZW50cyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIEFjdGl2ZSBDb21wb25lbnRzIE5hbWVzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGFjdGl2ZUNvbXBvbmVudHNOYW1lcyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIExhbmd1YWdlcw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRsYW5ndWFnZXMgPSBbXTsNCg0KCS8qKg0KCSAqIFRoZSBMYW5ndWFnZSBidWlsZCBkZXRhaWxzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGJ1aWxkRGV0YWlscyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIEV4Y2x1ZGVkIExhbmd1YWdlcw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRleGNsdWRlZExhbmcgPSBbXTsNCg0KCS8qKg0KCSAqIFRoZSBBY3RpdmUgTGFuZ3VhZ2UNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGxhbmdUYWc7DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgTW9kZWwgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxDb21wb25lbnREYXRhKCYkY29tcG9uZW50KQ0KCXsNCgkJLy8gYWRkIHRoZSBwcml2YWN5DQoJCSRjb21wb25lbnQtPnBhcmFtcyA9IChpc3NldCgkY29tcG9uZW50LT5wYXJhbXMpICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRjb21wb25lbnQtPnBhcmFtcykpID8ganNvbl9kZWNvZGUoJGNvbXBvbmVudC0+cGFyYW1zLCB0cnVlKSA6ICRjb21wb25lbnQtPnBhcmFtczsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb21wb25lbnQtPnBhcmFtcykgJiYgaXNzZXQoJGNvbXBvbmVudC0+cGFyYW1zWydsYW5ndWFnZV9vcHRpb25zJ10pICYmDQoJCQlpc3NldCgkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsnYWN0aXZhdGUnXSkgJiYgJGNvbXBvbmVudC0+cGFyYW1zWydsYW5ndWFnZV9vcHRpb25zJ11bJ2FjdGl2YXRlJ10gPT0gMSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgYWRtaW4gY29tcG9uZW50IGRldGFpbHMNCgkJCSR0aGlzLT5hY3RpdmVDb21wb25lbnRzWyRjb21wb25lbnQtPmlkXSA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5jb21wb25lbnRfY29udGV4dDsNCgkJCSR0aGlzLT5hY3RpdmVDb21wb25lbnRzTmFtZXNbJGNvbXBvbmVudC0+aWRdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkY29tcG9uZW50LT5uYW1lX2NvZGUpOw0KCQkJJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNSZWFsTmFtZXNbJGNvbXBvbmVudC0+aWRdID0gJGNvbXBvbmVudC0+bmFtZTsNCgkJCS8vIGFkZCBleGNsdWRlZCBsaXN0IG9mIGxhbmd1YWdlcw0KCQkJaWYgKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydsYW5ndWFnZXMnXSkpDQoJCQl7DQoJCQkJJHRoaXMtPmV4Y2x1ZGVkTGFuZ1skY29tcG9uZW50LT5pZF0gPSAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsnbGFuZ3VhZ2VzJ107DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmV4Y2x1ZGVkTGFuZ1skY29tcG9uZW50LT5pZF0gPSBhcnJheSgpOw0KCQkJfQ0KCQkJLy8gbm93IHNldCB0aGUgY29tcG9uZW50IGFkZCBsYW5ndWFnZXMgaWYgd2Ugc2hvdWxkIHVzZSBsb2NhbCAoMikNCgkJCWlmIChpc3NldCgkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsndXNlX3BlcmNlbnRhZ2VsYW5ndWFnZWFkZCddKSAmJiAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsndXNlX3BlcmNlbnRhZ2VsYW5ndWFnZWFkZCddID09IDIpDQoJCQl7DQoJCQkJJHRoaXMtPnBlcmNlbnRhZ2VMYW5ndWFnZUFkZE92ZXJpZGUgPSAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsncGVyY2VudGFnZWxhbmd1YWdlYWRkJ107DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gZ2V0IGNvbXBvbmVudCBpZA0KCQkkaWQgPSAoaW50KSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+Y29tcG9uZW50X2lkOw0KCQkvLyBjaGVjayBpZiB0aGVyZSBpcyBhY3RpdmUNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5hY3RpdmVDb21wb25lbnRzKQ0KCQkJJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGlkXSkgJiYgJHRoaXMtPnBlcmNlbnRhZ2VMYW5ndWFnZUFkZE92ZXJpZGUgIT0gMjAwKQ0KCQl7DQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+c2V0KCdwZXJjZW50YWdlX2xhbmd1YWdlX2FkZCcsICR0aGlzLT5wZXJjZW50YWdlTGFuZ3VhZ2VBZGRPdmVyaWRlKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBTZXQgTGFuZyBGaWxlIERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlU2V0TGFuZ0ZpbGVEYXRhKCkNCgl7DQoJCS8vIGxldHMgbWFwIHNvbWUgYXJyYXlzIHRvIHRoZSBwbHVnaW4gZm9yIGxhdGVyIHVzZQ0KCQkkdGhpcy0+Y29tcGlsZXJQYXRoID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBpbGVyX3BhdGg7DQoJCSR0aGlzLT50ZW1wUGF0aCA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT50bXBfcGF0aDsNCgkJJHRoaXMtPmxhbmdUYWcgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+bGFuZ190YWc7DQoJCSR0aGlzLT5kZWJ1Z0xpbmVuciA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5nZXQoJ2RlYnVnX2xpbmVfbnInLCBmYWxzZSk7DQoJCSR0aGlzLT5jb21wb25lbnRfdmVyc2lvbiA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5nZXQoJ2NvbXBvbmVudF92ZXJzaW9uJywgJzEuMC4wJyk7DQoJCSR0aGlzLT5qb29tbGFWZXJzaW9uID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmpvb21sYV92ZXJzaW9uOw0KCQkkdGhpcy0+cGVyY2VudGFnZUxhbmd1YWdlQWRkID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnBlcmNlbnRhZ2VfbGFuZ3VhZ2VfYWRkOw0KCQkkdGhpcy0+cmVtb3ZlU2l0ZUZvbGRlciA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5yZW1vdmVfc2l0ZV9mb2xkZXI7DQoJCSR0aGlzLT5yZW1vdmVTaXRlRWRpdEZvbGRlciA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5yZW1vdmVfc2l0ZV9lZGl0X2ZvbGRlcjsNCgkJJHRoaXMtPmNvbXBvbmVudFBhdGggPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdVdGlsaXRpZXMuUGF0aHMnKS0+Y29tcG9uZW50X3BhdGg7DQoJCSR0aGlzLT5jb21wb25lbnRDb2RlTmFtZSA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5jb21wb25lbnRfY29kZV9uYW1lOw0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBQbHVnaW4gTGFuZyBGaWxlc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVCdWlsZFBsdWdpbkxhbmdGaWxlcygmJHBsdWdpbikNCgl7DQoJCS8vIGdldCBjb21wb25lbnQgaWQNCgkJJGlkID0gKGludCkgU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9pZDsNCgkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgYWN0aXZlDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+YWN0aXZlQ29tcG9uZW50cykgJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGlkXSkpDQoJCXsNCgkJCS8vIHNldCBmaWxlIG5hbWUNCgkJCSRmaWxlX25hbWUgPSAncGxnXycgLiBzdHJ0b2xvd2VyKCRwbHVnaW4tPmdyb3VwKSAuICdfJyAuIHN0cnRvbG93ZXIoJHBsdWdpbi0+Y29kZV9uYW1lKTsNCgkJCS8vIGV4dHJ1ZGUgdGhlIGxhbmd1YWdlcyB0aGF0IHNob3VsZCBub3QgcmVtYWluIGluIHRoZSBwbHVnaW4NCgkJCSR0aGlzLT5leHRydWRlTGFuZ3VhZ2VzKCRpZCwgJ3BsdWdpbnMnLCBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+bGFuZ190YWcsICRmaWxlX25hbWUsICdhZG1pbicpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIEJ1aWxkIE1vZHVsZSBMYW5nIEZpbGVzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZUJ1aWxkTW9kdWxlTGFuZ0ZpbGVzKCYkbW9kdWxlKQ0KCXsNCgkJLy8gZ2V0IGNvbXBvbmVudCBpZA0KCQkkaWQgPSAoaW50KSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+Y29tcG9uZW50X2lkOw0KCQkvLyBjaGVjayBpZiB0aGVyZSBpcyBhY3RpdmUNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5hY3RpdmVDb21wb25lbnRzKSAmJiBpc3NldCgkdGhpcy0+YWN0aXZlQ29tcG9uZW50c1skaWRdKSkNCgkJew0KCQkJLy8gZXh0cnVkZSB0aGUgbGFuZ3VhZ2VzIHRoYXQgc2hvdWxkIG5vdCByZW1haW4gaW4gdGhlIG1vZHVsZQ0KCQkJJHRoaXMtPmV4dHJ1ZGVMYW5ndWFnZXMoJGlkLCAnbW9kdWxlcycsIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZywgJG1vZHVsZS0+ZmlsZV9uYW1lLCAkbW9kdWxlLT50YXJnZXRfY2xpZW50KTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBbGwgTGFuZyBGaWxlc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVCdWlsZEFsbExhbmdGaWxlcygkdGFyZ2V0QXJlYSkNCgl7DQoJCS8vIGdldCBjb21wb25lbnQgaWQNCgkJJGlkID0gKGludCkgU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9pZDsNCgkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgYWN0aXZlDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+YWN0aXZlQ29tcG9uZW50cykgJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGlkXSkpDQoJCXsNCgkJCS8vIHNldCBmaWxlIG5hbWUNCgkJCSRmaWxlX25hbWUgPSAnY29tXycgLiAkdGhpcy0+YWN0aXZlQ29tcG9uZW50c05hbWVzWyRpZF07DQoJCQkvLyBleHRydWRlIHRoZSBsYW5ndWFnZXMgdGhhdCBzaG91bGQgbm90IHJlbWFpbiBpbiB0aGUgbW9kdWxlDQoJCQkkdGhpcy0+ZXh0cnVkZUxhbmd1YWdlcygkaWQsICR0YXJnZXRBcmVhLCBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+bGFuZ190YWcsICRmaWxlX25hbWUpOw0KCQl9DQoJCS8vIGJ1aWxkIHRoZSBsYW5ndWFnZSBwYWNrYWdlcw0KCQkkdGhpcy0+YnVpbGRMYW5ndWFnZXMoJGlkLCBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+bGFuZ190YWcpOw0KCX0NCg0KCS8qKg0KCSAqIEV4dHJ1ZGVyIG9mIHRoZSBsYW5ndWFnZXMNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBleHRydWRlTGFuZ3VhZ2VzKCYkaWQsICR0YXJnZXRBcmVhLCAkbGFuZ1RhZywgJiRmaWxlX25hbWUsICR0YXJnZXRfY2xpZW50ID0gJ2JvdGgnKQ0KCXsNCgkJJG1haW5MYW5nTG9hZGVyID0gW107DQoJCS8vIGNoZWNrIGlmIHRoaXMgaWQgd2FzIHNldCBiZWZvcmUNCgkJaWYgKCFpc3NldCgkdGhpcy0+bGFuZ3VhZ2VzWyRpZF0pKQ0KCQl7DQoJCQkkdGhpcy0+bGFuZ3VhZ2VzWyRpZF0gPSBbXTsNCgkJCSR0aGlzLT5idWlsZERldGFpbHNbJGlkXSA9IFtdOw0KCQl9DQoJCS8vIGNoZWNrIGlmIHRoaXMgZmlsZSBuYW1lIHdhcyBzZXQgYmVmb3JlDQoJCWlmICghaXNzZXQoJHRoaXMtPmxhbmd1YWdlc1skaWRdWyRmaWxlX25hbWVdKSkNCgkJew0KCQkJJHRoaXMtPmxhbmd1YWdlc1skaWRdWyRmaWxlX25hbWVdID0gW107DQoJCX0NCgkJLy8gc2V0IGFsbCB0aGUgZXh0cmEgbGFuZ3VhZ2VzIG5vdCBleGNsdWRlZA0KCQlmb3JlYWNoIChDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5MYW5ndWFnZXMnKS0+Z2V0KCR0YXJnZXRBcmVhKSBhcyAka2V5ID0+ICRsYW5ndWFnZSkNCgkJew0KCQkJaWYgKCRrZXkgIT09ICRsYW5nVGFnICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsYW5ndWFnZSkgJiYgKCFpc3NldCgkdGhpcy0+ZXhjbHVkZWRMYW5nWyRpZF0pIHx8ICFpbl9hcnJheSgka2V5LCAkdGhpcy0+ZXhjbHVkZWRMYW5nWyRpZF0pKSkNCgkJCXsNCgkJCQkvLyBhZGQgdG8gb3VyIGJ1Y2tldA0KCQkJCSR0aGlzLT5sYW5ndWFnZXNbJGlkXVskZmlsZV9uYW1lXVska2V5XSA9ICRsYW5ndWFnZTsNCgkJCQkvLyByZW1vdmUgZnJvbSB0aGUgSkNCIGJ1aWxkDQoJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuTGFuZ3VhZ2VzJyktPnJlbW92ZSgieyR0YXJnZXRBcmVhfS57JGtleX0iKTsNCgkJCX0NCgkJCS8vIGNvdW50IHRoZSBhcmVhIHN0cmluZ3MNCgkJCWlmICgkbGFuZ1RhZyA9PT0gJGtleSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkbGFuZ3VhZ2UgYXMgJGFyZWEgPT4gJGxhbmd1YWdlU3RyaW5ncykNCgkJCQl7DQoJCQkJCSRtYWluTGFuZ0xvYWRlclskYXJlYV0gPSBjb3VudCgkbGFuZ3VhZ2VTdHJpbmdzKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gc3RvcmUgZGV0YWlscyBmb3IgYnVpbGQNCgkJJHRoaXMtPmJ1aWxkRGV0YWlsc1skaWRdWyRmaWxlX25hbWVdID0gWyRsYW5nVGFnID0+ICRtYWluTGFuZ0xvYWRlciwgJ3RhcmdldF9jbGllbnQnID0+ICR0YXJnZXRfY2xpZW50XTsNCgl9DQoNCgkvKioNCgkgKiBTdGFydCB0aGUgYnVpbGRpbmcgb2YgdGhlIGxhbmd1YWdlcyBwYWNrYWdlcw0KCSAqIA0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRMYW5ndWFnZXMoJiRpZCwgJGxhbmdUYWcpDQoJew0KCQlpZiAoaXNzZXQoJHRoaXMtPmxhbmd1YWdlc1skaWRdKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+bGFuZ3VhZ2VzWyRpZF0pKQ0KCQl7DQoJCQkvLyByZXN0IHhtbCBhcnJheQ0KCQkJJGxhbmdYTUwgPSBbXTsNCgkJCSRsYW5nTmFtZXMgPSBbXTsNCgkJCSRsYW5nUGFja2FnZXMgPSBbXTsNCgkJCSRsYW5nWklQTmFtZXMgPSBbXTsNCgkJCSRsYW5nWE1MTmFtZXMgPSBbXTsNCgkJCSR2ZXJzaW9uTmFtZSA9ICR0aGlzLT5hY3RpdmVDb21wb25lbnRzTmFtZXNbJGlkXSAuICdfdicgLiBzdHJfcmVwbGFjZSgnLicsICdfJywgJHRoaXMtPmNvbXBvbmVudF92ZXJzaW9uIC4gJ19fSicgLiAkdGhpcy0+am9vbWxhVmVyc2lvbik7DQoJCQlmb3JlYWNoICgkdGhpcy0+bGFuZ3VhZ2VzWyRpZF0gYXMgJGZpbGVfbmFtZSA9PiAkbGFuZ3VhZ2VzKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGFuZ3VhZ2VzKSAmJiBpc3NldCgkdGhpcy0+YnVpbGREZXRhaWxzWyRpZF1bJGZpbGVfbmFtZV1bJGxhbmdUYWddKSkNCgkJCQl7DQoJCQkJCS8vIGdldCB0aGUgbWFpbiBsYW5nIGxvYWRlcg0KCQkJCQkkbWFpbkxhbmdMb2FkZXIgPSAkdGhpcy0+YnVpbGREZXRhaWxzWyRpZF1bJGZpbGVfbmFtZV1bJGxhbmdUYWddOw0KCQkJCQkvLyBnZXQgdGhlIHRhcmdldCBjbGllbnQNCgkJCQkJJHRhcmdldF9jbGllbnQgPSAkdGhpcy0+YnVpbGREZXRhaWxzWyRpZF1bJGZpbGVfbmFtZV1bJ3RhcmdldF9jbGllbnQnXTsNCgkJCQkJZm9yZWFjaCAoJGxhbmd1YWdlcyBhcyAkdGFnID0+ICRhcmVhcykNCgkJCQkJew0KCQkJCQkJLy8gdHJpbSB0aGUgdGFnDQoJCQkJCQkkdGFnID0gdHJpbSgkdGFnKTsNCgkJCQkJCS8vIGdldCBsYW5ndWFnZSBuYW1lDQoJCQkJCQkkbGFuZ05hbWUgPSAkdGhpcy0+Z2V0TGFuZ3VhZ2VOYW1lKCR0YWcpOw0KCQkJCQkJJGxhbmdDb2RlTmFtZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGxhbmdOYW1lLCAnRicpOw0KCQkJCQkJLy8gc2V0IHRoZSBmaWxlIGZvbGRlciBuYW1lDQoJCQkJCQkkbGFuZ0ZvbGRlckZpbGVOYW1lID0gJGxhbmdDb2RlTmFtZSAuICdfJyAuICR2ZXJzaW9uTmFtZTsNCgkJCQkJCS8vIHNldCB0aGUgbWFpbiBmb2xkZXIgcGF0aA0KCQkJCQkJJG1haW5fcGF0aCA9ICR0aGlzLT5jb21waWxlclBhdGggLiAnLycgLiAkbGFuZ0ZvbGRlckZpbGVOYW1lIC4gJy8nOw0KCQkJCQkJLy8gc2V0IHRoZSBsYW5ndWFnZSBuYW1lIGZvciBsYXRlcg0KCQkJCQkJJGxhbmdOYW1lc1skbWFpbl9wYXRoXSA9ICRsYW5nTmFtZTsNCgkJCQkJCS8vIHNldCB0aGUgbGFuZyB6aXAgbmFtZSBmb3IgbGF0ZXINCgkJCQkJCSRsYW5nWklQTmFtZXNbJG1haW5fcGF0aF0gPSAkbGFuZ0ZvbGRlckZpbGVOYW1lOw0KCQkJCQkJLy8gc2V0IHRoZSBsYW5nIHhtbCBuYW1lIGZvciBsYXRlcg0KCQkJCQkJJGxhbmdYTUxOYW1lc1skbWFpbl9wYXRoXSA9ICRsYW5nQ29kZU5hbWUgLiAnXycgLiAkdGhpcy0+YWN0aXZlQ29tcG9uZW50c05hbWVzWyRpZF0gOw0KCQkJCQkJLy8gd2UgbXVzdCBjaGVjayBpZiBvbGQgZm9sZGVyIGlzIGZvdW5kIGFuZCByZW1vdmUgaXQNCgkJCQkJCWlmICghaXNzZXQoJHRoaXMtPmxhbmd1YWdlVHJhY2tlclskbWFpbl9wYXRoXSkgJiYgRm9sZGVyOjpleGlzdHMoJG1haW5fcGF0aCkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gcmVtb3ZlIHRoZSBtYWluIGZvbGRlcg0KCQkJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1V0aWxpdGllcy5Gb2xkZXInKS0+cmVtb3ZlKCRtYWluX3BhdGgpOw0KCQkJCQkJCS8vIGRvIG5vdCByZW1vdmUgaXQgYWdhaW4NCgkJCQkJCQkkdGhpcy0+bGFuZ3VhZ2VUcmFja2VyWyRtYWluX3BhdGhdID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJCS8vIGNoZWNrIGlmIGV4aXN0IGFuZCBjcmVhdGUgaWYgbm90DQoJCQkJCQlpZiAoIUZvbGRlcjo6ZXhpc3RzKCRtYWluX3BhdGgpKQ0KCQkJCQkJew0KCQkJCQkJCUZvbGRlcjo6Y3JlYXRlKCRtYWluX3BhdGgpOw0KCQkJCQkJCS8vIGNvdW50IHRoZSBmb2xkZXIgY3JlYXRlZA0KCQkJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1V0aWxpdGllcy5Db3VudGVyJyktPmZvbGRlcisrOw0KCQkJCQkJfQ0KCQkJCQkJZm9yZWFjaCAoJGFyZWFzIGFzICRhcmVhID0+ICRsYW5ndWFnZVN0cmluZ3MpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUNCgkJCQkJCQkkZmlsZU5hbWUgPSAkdGhpcy0+Z2V0TGFuZ3VhZ2VGaWxlTmFtZSgkZmlsZV9uYW1lLCAkdGFnLCAkYXJlYSk7DQoJCQkJCQkJLy8gY2hlY2sgaWYgbGFuZ3VhZ2Ugc2hvdWxkIGJlIGFkZGVkDQoJCQkJCQkJaWYgKFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0xhbmd1YWdlLlRyYW5zbGF0aW9uJyktPmNoZWNrKCR0YWcsICRsYW5ndWFnZVN0cmluZ3MsICRtYWluTGFuZ0xvYWRlclskYXJlYV0sICRmaWxlTmFtZSkgJiYgKCRhY3Rpb25zID0gJHRoaXMtPmdldExhbmdBY3Rpb25zKCRmaWxlX25hbWUsICR0YWcsICRhcmVhLCAkdGFyZ2V0X2NsaWVudCkpICE9PSBmYWxzZSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIHNldCB0aGUgbGFuZ3VhZ2UgZGF0YQ0KCQkJCQkJCQkkbGFuZyA9IGFycmF5X21hcCgNCgkJCQkJCQkJCWZ1bmN0aW9uICgkbGFuZ3N0cmluZywgJHBsYWNlaG9sZGVyKSB7DQoJCQkJCQkJCQkJcmV0dXJuICRwbGFjZWhvbGRlciAuICc9IicgLiAkbGFuZ3N0cmluZyAuICciJzsNCgkJCQkJCQkJCX0sIGFycmF5X3ZhbHVlcygkbGFuZ3VhZ2VTdHJpbmdzKSwNCgkJCQkJCQkJCWFycmF5X2tleXMoJGxhbmd1YWdlU3RyaW5ncykNCgkJCQkJCQkJKTsNCgkJCQkJCQkJLy8gc2V0IHRoZSBsaW5lIGNvdW50ZXINCgkJCQkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnVXRpbGl0aWVzLkNvdW50ZXInKS0+bGluZSArPSBjb3VudCgNCgkJCQkJCQkJCShhcnJheSkgJGxhbmcNCgkJCQkJCQkJKTsNCgkJCQkJCQkJLy8gY2hlY2sgdGhhdCB0aGUgbWFpbiBmb2xkZXIgZXhpc3QNCgkJCQkJCQkJZm9yZWFjaCAoJGFjdGlvbnMgYXMgJGFjdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJGNsaWVudF9wYXRoID0gJG1haW5fcGF0aCAuICRhY3RbJ3RhcmdldF9jbGllbnQnXSAuICcvJzsNCgkJCQkJCQkJCS8vIGNoZWNrIGlmIGV4aXN0IGFuZCBjcmVhdGUgaWYgbm90DQoJCQkJCQkJCQlpZiAoIUZvbGRlcjo6ZXhpc3RzKCRjbGllbnRfcGF0aCkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJRm9sZGVyOjpjcmVhdGUoJGNsaWVudF9wYXRoKTsNCgkJCQkJCQkJCQkvLyBjb3VudCB0aGUgZm9sZGVyIGNyZWF0ZWQNCgkJCQkJCQkJCQkkdGhpcy0+Zm9sZGVyQ291bnQrKzsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCS8vIHdyaXRlIHRoZSBsYW5ndWFnZSBkYXRhIHRvIGEgZmlsZQ0KCQkJCQkJCQkJU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6d3JpdGUoDQoJCQkJCQkJCQkJJGNsaWVudF9wYXRoIC4gJGFjdFsnZmlsZV9uYW1lJ10sIGltcGxvZGUoUEhQX0VPTCwgJGxhbmcpDQoJCQkJCQkJCQkpOw0KCQkJCQkJCQkJLy8gY291bnQgdGhlIGZpbGUgY3JlYXRlZA0KCQkJCQkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnVXRpbGl0aWVzLkNvdW50ZXInKS0+bGluZSsrOw0KCQkJCQkJCQkJLy8gYnVpbGQgeG1sIHN0cmluZ3MNCgkJCQkJCQkJCWlmICghaXNzZXQoJGxhbmdYTUxbJG1haW5fcGF0aF0pKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRsYW5nWE1MWyRtYWluX3BhdGhdID0gYXJyYXkoKTsNCgkJCQkJCQkJCQkkbGFuZ1BhY2thZ2VzWyRtYWluX3BhdGhdID0gYXJyYXkoKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWlmICghaXNzZXQoJGxhbmdYTUxbJG1haW5fcGF0aF1bJGFjdFsndGFyZ2V0X2NsaWVudCddXSkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGxhbmdYTUxbJG1haW5fcGF0aF1bJGFjdFsndGFyZ2V0X2NsaWVudCddXSA9IGFycmF5KCk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkvLyBzZXQgdGhlIHBhY2thZ2UgdGFyZ2V0cw0KCQkJCQkJCQkJJGxhbmdQYWNrYWdlc1skbWFpbl9wYXRoXVskYWN0Wyd0YXJnZXRfY2xpZW50J11dID0gJGFjdFsndGFyZ2V0J107DQoJCQkJCQkJCQkkbGFuZ1hNTFskbWFpbl9wYXRoXVskYWN0Wyd0YXJnZXRfY2xpZW50J11dW10gPSAkYWN0WydmaWxlX25hbWUnXTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBjbGVhciBtZW1vcnkNCgkJCQkJCQkJdW5zZXQoJGxhbmcpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gbG9hZCB0aGUgbGFuZyB4bWwNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGFuZ1hNTCkpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGxhbmdYTUwgYXMgJG1haW5fcGF0aCA9PiAkdGFyZ2V0X2NsaWVudHMpDQoJCQkJew0KCQkJCQkvLyBnZXQgdGhlIFhNTA0KCQkJCQkkeG1sID0gc3RyX3JlcGxhY2UoDQoJCQkJCQkJYXJyYXlfa2V5cyhTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbnRlbnQuT25lJyktPmFsbEFjdGl2ZSgpKSwNCgkJCQkJCQlhcnJheV92YWx1ZXMoU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hbGxBY3RpdmUoKSksDQoJCQkJCQkJJHRoaXMtPmdldExhbmd1YWdlWE1MKCR0YXJnZXRfY2xpZW50cywgJGxhbmdQYWNrYWdlc1skbWFpbl9wYXRoXSwgJGxhbmdOYW1lc1skbWFpbl9wYXRoXSkNCgkJCQkJCSk7DQoJCQkJCS8vIGdldCB0aGUgWE1MIEZpbGUgTmFtZQ0KCQkJCQkkeG1sRmlsZU5hbWUgPSAkbGFuZ1hNTE5hbWVzWyRtYWluX3BhdGhdIC4gJy54bWwnOw0KCQkJCQkvLyB3cml0ZSB0aGUgbGFuZ3VhZ2UgZGF0YSB0byBhIGZpbGUNCgkJCQkJU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6d3JpdGUoDQoJCQkJCQkkbWFpbl9wYXRoIC4gJHhtbEZpbGVOYW1lLCAkeG1sDQoJCQkJCSk7DQoJCQkJCS8vIHNldCB0aGUgemlwIGZ1bGwgcGF0aA0KCQkJCQkkemlwUGF0aCA9ICR0aGlzLT50ZW1wUGF0aCAuICcvJyAuICRsYW5nWklQTmFtZXNbJG1haW5fcGF0aF0gLiAnLnppcCc7DQoJCQkJCS8vIG5vdyB6aXAgdGhlIHBhY2thZ2UNCgkJCQkJaWYgKFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OnppcCgNCgkJCQkJCSRtYWluX3BhdGgsICR6aXBQYXRoDQoJCQkJCSkpDQoJCQkJCXsNCgkJCQkJCS8vIG5vdyByZW1vdmUgdGhlIHBhY2thZ2UNCgkJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1V0aWxpdGllcy5Gb2xkZXInKS0+cmVtb3ZlKCRtYWluX3BhdGgpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBsYW5ndWFnZSB4bWwNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VYTUwoJiR0YXJnZXRfY2xpZW50cywgJiR0YXJnZXRzLCAmJGxhbmd1YWdlKQ0KCXsNCgkJJHhtbCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuICc8ZXh0ZW5zaW9uIHR5cGU9ImZpbGUiIHZlcnNpb249IjMuMiIgbWV0aG9kPSJ1cGdyYWRlIj4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gJzxuYW1lPicgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfaCgnQ29tcG9uZW50JykgLiAnIC0gJyAuICRsYW5ndWFnZSAuICcgTGFuZ3VhZ2UgUGFjazwvbmFtZT4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gJzxjcmVhdGlvbkRhdGU+JyAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol9oKCdCVUlMRERBVEUnKSAuICc8L2NyZWF0aW9uRGF0ZT4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gJzxhdXRob3I+JyAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol9oKCdBVVRIT1InKSAuICc8L2F1dGhvcj4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gJzxhdXRob3JFbWFpbD4nIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6X2goJ0FVVEhPUkVNQUlMJykgLiAnPC9hdXRob3JFbWFpbD4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gJzxhdXRob3JVcmw+JyAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol9oKCdBVVRIT1JXRUJTSVRFJykgLiAnPC9hdXRob3JVcmw+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8Y29weXJpZ2h0PicgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfaCgnQ09QWVJJR0hUJykgLiAnPC9jb3B5cmlnaHQ+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8bGljZW5zZT4nIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6X2goJ0xJQ0VOU0UnKSAuICc8L2xpY2Vuc2U+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8dmVyc2lvbj4nIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6X2goJ0FDVFVBTFZFUlNJT04nKSAuICc8L3ZlcnNpb24+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8ZGVzY3JpcHRpb24+JyAuICRsYW5ndWFnZSAuICcgTGFuZ3VhZ2UgUGFjayAtICcgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfaCgnU0hPUlRfREVTQ1JJUFRJT04nKSAuICc8L2Rlc2NyaXB0aW9uPic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAnPGZpbGVzZXQ+JzsNCgkJZm9yZWFjaCAoJHRhcmdldF9jbGllbnRzIGFzICR0YXJnZXRfY2xpZW50ID0+ICRmaWxlcykNCgkJew0KCQkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICc8ZmlsZXMgZm9sZGVyPSInIC4gJHRhcmdldF9jbGllbnQgLiAnIiB0YXJnZXQ9IicgLiAkdGFyZ2V0c1skdGFyZ2V0X2NsaWVudF0gLiAnIj4nOw0KCQkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKQ0KCQkJew0KCQkJCSR4bWwgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAnPGZpbGVuYW1lPicgLiAkZmlsZSAuICc8L2ZpbGVuYW1lPic7DQoJCQl9DQoJCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gJzwvZmlsZXM+JzsNCgkJfQ0KCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gJzwvZmlsZXNldD4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiAnPC9leHRlbnNpb24+JzsNCg0KCQlyZXR1cm4gJHhtbDsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGxhbmd1YWdlIG5hbWUNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VOYW1lKCYkdGFnKQ0KCXsNCgkJaWYgKCFpc3NldCgkdGhpcy0+bGFuZ3VhZ2VOYW1lc1skdGFnXSkpDQoJCXsNCgkJCWlmICgoJG5hbWUgPSBTdXBlcl9fX2RiODdjMzM5XzViYjZfNDI5MV9hN2VmXzJjNDhlYTFiMDZiY19fX1Bvd2VyOjp2YXIoJ2xhbmd1YWdlJywgJHRhZywgJ2xhbmd0YWcnLCAnbmFtZScpKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJHRoaXMtPmxhbmd1YWdlTmFtZXNbJHRhZ10gPSAkbmFtZTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VOYW1lc1skdGFnXSA9ICR0YWc7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICR0aGlzLT5sYW5ndWFnZU5hbWVzWyR0YWddOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgbGFuZ3VhZ2UgYWN0aW9ucw0KCSAqIA0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExhbmdBY3Rpb25zKCYkZmlsZV9uYW1lLCAmJHRhZywgJiRhcmVhLCAmJHRhcmdldF9jbGllbnQpDQoJew0KCQkvLyBjb21wb25lbnQgZXh0ZW50aW9uIHR5cGUNCgkJaWYgKHN0cnBvcygkZmlsZV9uYW1lLCAnY29tXycpICE9PSBmYWxzZSkNCgkJew0KCQkJJHRhcmdldF9jbGllbnQgPSAnYWRtaW4nOw0KCQkJJHRhcmdldCA9ICdhZG1pbmlzdHJhdG9yL2xhbmd1YWdlLyc7DQoJCQlpZiAoc3RycG9zKCRhcmVhLCAnc2l0ZScpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkdGFyZ2V0X2NsaWVudCA9ICdzaXRlJzsNCgkJCQkkdGFyZ2V0ID0gJ2xhbmd1YWdlLyc7DQoJCQl9DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJYXJyYXkoDQoJCQkJCSd0YXJnZXRfY2xpZW50JyA9PiAkdGFyZ2V0X2NsaWVudCwNCgkJCQkJJ3RhcmdldCcgPT4gJHRhcmdldCAuICR0YWcsDQoJCQkJCSdmaWxlX25hbWUnID0+ICR0aGlzLT5nZXRMYW5ndWFnZUZpbGVOYW1lKCRmaWxlX25hbWUsICR0YWcsICRhcmVhKQ0KCQkJCSkNCgkJCSk7DQoJCX0NCgkJZWxzZWlmICgnYWRtaW4nID09PSAkdGFyZ2V0X2NsaWVudCkNCgkJew0KCQkJJHRhcmdldCA9ICdhZG1pbmlzdHJhdG9yL2xhbmd1YWdlLyc7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGFyZ2V0ID0gJ2xhbmd1YWdlLyc7DQoJCX0NCgkJLy8gbW9kdWxlL3BsdWdpbiBleHRlbnNpb24gdHlwZSAoVE9ETyB3ZSByZXR1cm4gYm90aCBmb3Igbm93KQ0KCQlyZXR1cm4gYXJyYXkoDQoJCQlhcnJheSgNCgkJCQkndGFyZ2V0X2NsaWVudCcgPT4gJHRhcmdldF9jbGllbnQsDQoJCQkJJ3RhcmdldCcgPT4gJHRhcmdldCAuICR0YWcsDQoJCQkJJ2ZpbGVfbmFtZScgPT4gJHRoaXMtPmdldExhbmd1YWdlRmlsZU5hbWUoJGZpbGVfbmFtZSwgJHRhZywgJGFyZWEpDQoJCQkpLA0KCQkJYXJyYXkoDQoJCQkJJ3RhcmdldF9jbGllbnQnID0+ICR0YXJnZXRfY2xpZW50LA0KCQkJCSd0YXJnZXQnID0+ICR0YXJnZXQgLiAkdGFnLA0KCQkJCSdmaWxlX25hbWUnID0+ICR0aGlzLT5nZXRMYW5ndWFnZUZpbGVOYW1lKCRmaWxlX25hbWUsICR0YWcsICRhcmVhLCAnLnN5cycpDQoJCQkpDQoJCSk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBsYW5ndWFnZSBmaWxlIG5hbWUNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VGaWxlTmFtZSgmJGZpbGVfbmFtZSwgJiR0YWcsICYkYXJlYSwgJHR5cGUgPSAnJykNCgl7DQoJCS8vIGNvbXBvbmVudCBleHRlbnNpb24gdHlwZQ0KCQlpZiAoc3RycG9zKCRmaWxlX25hbWUsICdjb21fJykgIT09IGZhbHNlKQ0KCQl7DQoJCQlpZiAoc3RycG9zKCRhcmVhLCAnc3lzJykgIT09IGZhbHNlKQ0KCQkJew0KCQkJCSR0eXBlID0gJy5zeXMnOw0KCQkJfQ0KCQl9DQoJCS8vIGZpbGUgbmFtZQ0KCQlyZXR1cm4gJHRhZyAuICcuJyAuICRmaWxlX25hbWUgLiAkdHlwZSAuICcuaW5pJzsNCgl9DQoNCgkvKioNCgkgKiBjaGVjayBpZiBhIHRyYW5zbGF0aW9uIHNob3VsZCBiZSBhZGRlZA0KCSAqIA0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAZGVwcmVjYXRlZCAzLjQgVXNlIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0xhbmd1YWdlLlRyYW5zbGF0aW9uJyktPmNoZWNrKC4uLik7DQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNob3VsZExhbmd1YWdlQmVBZGRlZCgmJHRhZywgJiRsYW5ndWFnZVN0cmluZ3MsICYkdG90YWwsICYkZmlsZV9uYW1lKQ0KCXsNCgkJLy8gb25seSBsb2cgbWVzc2FnZXMgZm9yIG5vbmUgJHRoaXMtPmxhbmdUYWcgdHJhbnNsYXRpb25zDQoJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0xhbmd1YWdlLlRyYW5zbGF0aW9uJyktPmNoZWNrKA0KCQkJJHRhZywgJGxhbmd1YWdlU3RyaW5ncywgJHRvdGFsLCAkZmlsZV9uYW1lDQoJCSk7DQoJfQ==', '[[[Component]]] Language Packaging', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection2\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Language Packaging J5', '', 1, '', '', 1, '2024-03-10 15:55:07', '2024-08-12 07:56:43', 6, '', 2),
-(41, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to improve your action log integration with Joomla for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"activate\",\"label\":\"Component Activation\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2680\",\"custom_value\":\"\"}}}}', '3d324afb-3de8-40cb-868d-7b59ad50aeda', 'IyMjUE9XRVJfQVVUT0xPQURFUiMjIw0KDQp1c2UgSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbjsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcUGxhY2VmaXg7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xJbmRlbnQ7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xMaW5lOw==', 11, '{\"method_selection0\":{\"method\":\"59\"},\"method_selection1\":{\"method\":\"120\"},\"method_selection2\":{\"method\":\"79\"},\"method_selection3\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoqDQoJICogVGhlIFNjcmlwdHMNCgkgKiANCgkgKiBAdmFyICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJHNjcmlwdHNBcnJheSA9IFsnUE9TVElOU1RBTExTQ1JJUFQnID0+IFtdLCAnUE9TVFVQREFURVNDUklQVCcgPT4gW10sICdVTklOU1RBTExTQ1JJUFQnID0+IFtdXTsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldENvbXBvbmVudERhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+bGFuZ3VhZ2VBcnJheSkpDQoJCXsNCgkJCWZvcmVhY2goJHRoaXMtPmxhbmd1YWdlQXJyYXkgYXMgJGtleSA9PiAkc3RyaW5nKQ0KCQkJew0KCQkJCUNGYWN0b3J5OjpfKCdMYW5ndWFnZScpLT5zZXQoJ2FkbWluJywgJGtleSwgJHN0cmluZyk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBCdWlsZCBGaWxlcyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkFmdGVyQnVpbGRGaWxlc0NvbnRlbnQoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJJGZ1bmN0aW9uX25hbWUgPSAnZ2V0TWFpbkozJzsNCgkJCWlmIChDRmFjdG9yeTo6XygnQ29uZmlnJyktPmdldCgnam9vbWxhX3ZlcnNpb24nLCAzKSAhPSAzKQ0KCQkJew0KCQkJCSRmdW5jdGlvbl9uYW1lID0gJ2dldE1haW5KNCc7DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgc2NyaXB0IHN0cmluZ3MgdG8gdGhlICBjb21wb25lbnQNCgkJCWZvcmVhY2ggKCR0aGlzLT5zY3JpcHRzQXJyYXkgYXMgJHRhcmdldCA9PiAmJGJ1Y2tldCkNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIGNvbXBvbmVudCBtYWluIHRhcmdldCBzY3JpcHQNCgkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hZGQoJHRhcmdldCwgJHRoaXMtPnskZnVuY3Rpb25fbmFtZSAuICR0YXJnZXR9KCkpOw0KCQkJCS8vIGFkZCB0aGUgY29tcG9uZW50IHZpZXdzIHRhcmdldCBzY3JpcHRzDQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCXsNCgkJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWRkKCR0YXJnZXQsIGltcGxvZGUoJycsICRidWNrZXQpKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGFkZCB0aGUgYmV0dGVyIGludGVncmF0aW9uIHdpdGggYWN0aW9uIGxvZw0KCQlpZiAoJHRoaXMtPmNvbXBvbmVudEFjdGl2ZSgpICYmU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPmZpZWxkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCR2aWV3LT5maWVsZHMgYXMgJGZpZWxkKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkZmllbGRbJ3RpdGxlJ10pICYmICRmaWVsZFsndGl0bGUnXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJHRpdGxlX2hvbGRlciA9ICRmaWVsZFsnYmFzZV9uYW1lJ107DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGlmIG5vdCBmb3VuZCB0cnkgYWdhaW4NCgkJCWlmICghaXNzZXQoJHRpdGxlX2hvbGRlcikpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHZpZXctPmZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJGZpZWxkWydsaXN0J10pICYmICRmaWVsZFsnbGlzdCddID09IDEgJiYNCgkJCQkJCWlzc2V0KCRmaWVsZFsnb3JkZXJfbGlzdCddKSAmJiAkZmllbGRbJ29yZGVyX2xpc3QnXSA9PSAxICYmDQoJCQkJCQlpc3NldCgkZmllbGRbJ2xpbmsnXSkgJiYgJGZpZWxkWydsaW5rJ10gPT0gMSkNCgkJCQkJew0KCQkJCQkJJHRpdGxlX2hvbGRlciA9ICRmaWVsZFsnYmFzZV9uYW1lJ107DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gaWYgZm91bmQgdXBkYXRlIHBsYWNlaG9sZGVyDQoJCQlpZiAoaXNzZXQoJHRpdGxlX2hvbGRlcikpDQoJCQl7DQoJCQkJLy8gc2V0IG1haW4gdGl0bGUNCgkJCQlDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+c2V0KCc8PDxNQUlOX1RJVExFPj4+JywgJHRpdGxlX2hvbGRlciwgZmFsc2UpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGZhbGwgYmFjayBvbiBJRA0KCQkJCUNGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5zZXQoJzw8PE1BSU5fVElUTEU+Pj4nLCAnaWQnLCBmYWxzZSk7DQoJCQl9DQoNCgkJCSRmdW5jdGlvbl9uYW1lID0gJ2dldFZpZXdKMyc7DQoJCQlpZiAoQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5nZXQoJ2pvb21sYV92ZXJzaW9uJywgMykgIT0gMykNCgkJCXsNCgkJCQkkZnVuY3Rpb25fbmFtZSA9ICdnZXRWaWV3SjQnOw0KCQkJfQ0KDQoJCQkvLyBub3cgbG9hZCB0aGUgc2NyaXB0IHN0cmluZ3MNCgkJCWZvcmVhY2ggKCR0aGlzLT5zY3JpcHRzQXJyYXkgYXMgJHRhcmdldCA9PiAmJGJ1Y2tldCkNCgkJCXsNCgkJCQkkYnVja2V0W10gPSAkdGhpcy0+eyRmdW5jdGlvbl9uYW1lIC4gJHRhcmdldH0oKTsNCgkJCX0NCg0KCQkJLy8ganVzdCByZW1vdmUgaXQgYWdhaW4NCgkJCUNGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5yZW1vdmUoJzw8PE1BSU5fVElUTEU+Pj4nKTsNCg0KCQkJLy8gc2V0IGxhbmd1YWdlIHN0cmluZw0KCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPmdldF8oIkxBTkdfUFJFRklYIikgLiAnX1RZUEVfJyAuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5nZXRfKCJWSUVXIildID0gJHZpZXctPm5hbWVfc2luZ2xlOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFBvc3QgSW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozUE9TVElOU1RBTExTQ1JJUFQoKQ0KCXsNCgkJJHNjcmlwdCA9IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCBkYiBpZiBub3Qgc2V0IGFscmVhZHkuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImlmICghaXNzZXQoXCRkYikpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCRkYiA9IEZhY3Rvcnk6OmdldERibygpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ3JlYXRlIHRoZSAiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIiBhY3Rpb24gbG9ncyBleHRlbnNpb25zIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIl9hY3Rpb25fbG9nc19leHRlbnNpb25zID0gbmV3IFxzdGRDbGFzcygpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMtPmV4dGVuc2lvbiA9ICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgdGhlIG9iamVjdCBpbnRvIHRoZSBhY3Rpb24gbG9ncyBleHRlbnNpb25zIHRhYmxlLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnNfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnLCBcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBQb3N0IEluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKM1BPU1RJTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSB0aGUgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX3RpdGxlID0gJyIgLiBQbGFjZWZpeDo6XygiVklFVyIpIC4gIic7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZy0+aWRfaG9sZGVyID0gJ2lkJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRpdGxlX2hvbGRlciA9ICc8PDxNQUlOX1RJVExFPj4+JzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRhYmxlX25hbWUgPSAnI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRleHRfcHJlZml4ID0gJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgdGhlIG9iamVjdCBpbnRvIHRoZSBhY3Rpb24gbG9nIGNvbmZpZyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dfY29uZmlnJywgXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgTWFpbiBQb3N0IFVwZGF0ZSBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozUE9TVFVQREFURVNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgU2V0IGRiIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiaWYgKCFpc3NldChcJGRiKSkiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDcmVhdGUgdGhlICIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgb2JqZWN0LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucy0+ZXh0ZW5zaW9uID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIic7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENoZWNrIGlmICIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiIGFjdGlvbiBsb2cgZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gYWN0aW9uIGxvZ3MgZXh0ZW5zaW9ucyBEQi4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRxdWVyeSA9IFwkZGItPmdldFF1ZXJ5KHRydWUpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT5zZWxlY3QoXCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcpKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnktPmZyb20oXCRkYi0+cXVvdGVOYW1lKCcjX19hY3Rpb25fbG9nc19leHRlbnNpb25zJykpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2V4dGVuc2lvbicpIC4gJyBMSUtFICcuIFwkZGItPnF1b3RlKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucy0+ZXh0ZW5zaW9uKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGRiLT5leGVjdXRlKCk7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCB0aGUgb2JqZWN0IGludG8gdGhlIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUgaWYgbm90IGZvdW5kLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIVwkZGItPmdldE51bVJvd3MoKSkiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnNfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnLCBcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFBvc3QgVXBkYXRlIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3SjNQT1NUVVBEQVRFU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSB0aGUgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT5pZCA9IG51bGw7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX3RpdGxlID0gJyIgLiBQbGFjZWZpeDo6XygiVklFVyIpIC4gIic7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZy0+aWRfaG9sZGVyID0gJ2lkJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRpdGxlX2hvbGRlciA9ICc8PDxNQUlOX1RJVExFPj4+JzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRhYmxlX25hbWUgPSAnI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRleHRfcHJlZml4ID0gJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuICBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIGlzIGFscmVhZHkgaW4gYWN0aW9uX2xvZ19jb25maWcgREIuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRxdWVyeS0+c2VsZWN0KFwkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnKSkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT5mcm9tKFwkZGItPnF1b3RlTmFtZSgnI19fYWN0aW9uX2xvZ19jb25maWcnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgndHlwZV9hbGlhcycpIC4gJyBMSUtFICcuIFwkZGItPnF1b3RlKFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGRiLT5leGVjdXRlKCk7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCB0aGUgb2JqZWN0IGludG8gdGhlIGNvbnRlbnQgdHlwZXMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImlmIChcJGRiLT5nZXROdW1Sb3dzKCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPmlkID0gXCRkYi0+bG9hZFJlc3VsdCgpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZ19VcGRhdGVkID0gXCRkYi0+dXBkYXRlT2JqZWN0KCcjX19hY3Rpb25fbG9nX2NvbmZpZycsIFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLCAnaWQnKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJlbHNlIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWdfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dfY29uZmlnJywgXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozVU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgYXBwIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFpc3NldChcJGFwcCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiIGZyb20gdGhlIGFjdGlvbl9sb2dzX2V4dGVuc2lvbnMgdGFibGUiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIl9hY3Rpb25fbG9nc19leHRlbnNpb25zID0gYXJyYXkoIFwkZGItPnF1b3RlTmFtZSgnZXh0ZW5zaW9uJykgLiAnID0gJyAuIFwkZGItPnF1b3RlKCdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSApOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPmRlbGV0ZShcJGRiLT5xdW90ZU5hbWUoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucyk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4ZWN1dGUgdGhlIHF1ZXJ5IHRvIHJlbW92ZSAiIC4gUGxhY2VmaXg6Ol8oIkNvbXBvbmVudCIpIC4gIiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX3JlbW92ZWRfZG9uZSA9IFwkZGItPmV4ZWN1dGUoKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfcmVtb3ZlZF9kb25lKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIElmIHN1Y2Nlc3NmdWxseSByZW1vdmUgIiAuIFBsYWNlZml4OjpfKCJDb21wb25lbnQiKSAuICIgYWRkIHF1ZXVlZCBzdWNjZXNzIG1lc3NhZ2UuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZSIgLiAieHQ6Ol8oJ1RoZSBjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIgZXh0ZW5zaW9uIHdhcyByZW1vdmVkIGZyb20gdGhlIDxiPiNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnM8L2I+IHRhYmxlJykpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Vmlld0ozVU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgYXBwIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFpc3NldChcJGFwcCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiBmcm9tIHRoZSBhY3Rpb25fbG9nX2NvbmZpZyB0YWJsZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZyA9IGFycmF5KCBcJGRiLT5xdW90ZU5hbWUoJ3R5cGVfYWxpYXMnKSAuICcgPSAnLiBcJGRiLT5xdW90ZSgnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiLiIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicpICk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeS0+ZGVsZXRlKFwkZGItPnF1b3RlTmFtZSgnI19fYWN0aW9uX2xvZ19jb25maWcnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRkYi0+c2V0UXVlcnkoXCRxdWVyeSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4ZWN1dGUgdGhlIHF1ZXJ5IHRvIHJlbW92ZSBjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIuIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnX2RvbmUgPSBcJGRiLT5leGVjdXRlKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gImlmIChcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZ19kb25lKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIElmIHN1Y2Nlc3NmdWxseSByZW1vdmVkICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiBhZGQgcXVldWVkIHN1Y2Nlc3MgbWVzc2FnZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAtPmVucXVldWVNZXNzYWdlKFRlIiAuICJ4dDo6XygnVGhlIGNvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICIgdHlwZSBhbGlhcyB3YXMgcmVtb3ZlZCBmcm9tIHRoZSA8Yj4jX19hY3Rpb25fbG9nX2NvbmZpZzwvYj4gdGFibGUnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIn0iOw0KDQoJCXJldHVybiBDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkc2NyaXB0KTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIE1haW4gUG9zdCBJbnN0YWxsIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRNYWluSjRQT1NUSU5TVEFMTFNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKQ0KCQkJLiAiIEFkZCBjb21wb25lbnQgdG8gdGhlIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkdGhpcy0+c2V0QWN0aW9uTG9nc0V4dGVuc2lvbnMoKTsiOw0KDQoJCXJldHVybiAkc2NyaXB0Ow0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBQb3N0IEluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKNFBPU1RJTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgQWRkICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiB0byB0aGUgYWN0aW9uIGxvZ3MgY29uZmlnIHRhYmxlLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHRoaXMtPnNldEFjdGlvbkxvZ0NvbmZpZygiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdHlwZVRpdGxlIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIiciIC4gUGxhY2VmaXg6Ol8oIlZJRVciKSAuICInLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0eXBlQWxpYXMiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBpZEhvbGRlciI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInaWQnLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0aXRsZUhvbGRlciI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInPDw8TUFJTl9USVRMRT4+PicsIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRhYmxlTmFtZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGV4dFByZWZpeCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInIiAuIFBsYWNlZml4OjpfKCJMQU5HX1BSRUZJWCIpIC4gIiciOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiKTsiOw0KDQoJCXJldHVybiBDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkc2NyaXB0KTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIE1haW4gUG9zdCBVcGRhdGUgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE1haW5KNFBPU1RVUERBVEVTQ1JJUFQoKQ0KCXsNCgkJJHNjcmlwdCA9IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykNCgkJCS4gIiBBZGQvVXBkYXRlIGNvbXBvbmVudCBpbiB0aGUgYWN0aW9uIGxvZ3MgZXh0ZW5zaW9ucyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0aGlzLT5zZXRBY3Rpb25Mb2dzRXh0ZW5zaW9ucygpOyI7DQoNCgkJcmV0dXJuICRzY3JpcHQ7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFBvc3QgVXBkYXRlIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3SjRQT1NUVVBEQVRFU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgQWRkL1VwZGF0ZSAiIC4gUGxhY2VmaXg6Ol8oIlZpZXciKSAuICIgaW4gdGhlIGFjdGlvbiBsb2dzIGNvbmZpZyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0aGlzLT5zZXRBY3Rpb25Mb2dDb25maWcoIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHR5cGVUaXRsZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInIiAuIFBsYWNlZml4OjpfKCJWSUVXIikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdHlwZUFsaWFzIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIidjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIuIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgaWRIb2xkZXIiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJ2lkJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGl0bGVIb2xkZXIiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJzw8PE1BSU5fVElUTEU+Pj4nLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0YWJsZU5hbWUiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJyNfXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiXyIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicsIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRleHRQcmVmaXgiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIik7IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbko0VU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgUmVtb3ZlIGNvbXBvbmVudCBmcm9tIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkdGhpcy0+cmVtb3ZlQWN0aW9uTG9nc0V4dGVuc2lvbnMoKTsiOw0KDQoJCXJldHVybiAkc2NyaXB0Ow0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBVbmluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKNFVOSU5TVEFMTFNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKQ0KCQkJLiAiIFJlbW92ZSAiIC4gUGxhY2VmaXg6Ol8oIlZpZXciKSAuICIgZnJvbSBhY3Rpb24gbG9ncyBjb25maWcgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkdGhpcy0+cmVtb3ZlQWN0aW9uTG9nQ29uZmlnKCdjb21fIg0KCQkJLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiLiIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KW0NVU1RPTUNPREU9Y29tcG9uZW50QWN0aXZlXQ==', '[[[Component]]] ActionLog Compiler', '', '', '', '', '', '', '', '4.0.0', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB ActionLog Compiler J5', '', 1, '', '', 1, '2024-03-10 15:55:10', '2024-08-11 11:35:39', 6, '', 3),
-(42, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to tweak the export options for your components during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\nAlso be sure to activate the component/s that should be targeted with this added export feature under the Component Activation tab.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Settings\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2680\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2681\",\"custom_value\":\"\"}}}}', '3b8434ed-2727-4c74-85c2-e439b6a7b637', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 11, '{\"method_selection0\":{\"method\":\"92\"},\"method_selection1\":{\"method\":\"56\"},\"method_selection2\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoNCgkgKiBUaGUgRXhwb3J0IFRleHQgT25seSBzd2l0Y2gNCgkgKiANCgkgKiBAdmFyICAgICAgaW50DQoJICovDQoJcHJvdGVjdGVkICRleHBvcnRUZXh0T25seSA9IDA7DQoNCgkvKg0KCSAqIFRoZSBTdHJpY3QgRmllbGQgRXhwb3J0IFBlcm1pc3Npb25zIHN3aXRjaA0KCSAqIA0KCSAqIEB2YXIgICAgICBib29sDQoJICovDQoJcHJvdGVjdGVkICRzdHJpY3RGaWVsZEV4cG9ydFBlcm1pc3Npb25zID0gZmFsc2U7DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgR2V0IENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkFmdGVyR2V0Q29tcG9uZW50RGF0YSgpDQoJew0KCQlpZiAoJHRoaXMtPmV4cG9ydFRleHRPbmx5ICYmICR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJLy8gYWN0aXZhdGUgZXhwb3J0IHRleHQgb25seQ0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnNldCgnZXhwb3J0X3RleHRfb25seScsIChpbnQpICR0aGlzLT5leHBvcnRUZXh0T25seSk7DQoNCgkJCS8vIGFjdGl2YXRlIHN0cmljdF9wZXJtaXNzaW9uX3Blcl9maWVsZCBpZiBzZXQgaW4gcGx1Z2luIChkZWZhdWx0IHRydWUpDQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+c2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCAoYm9vbCkgJHRoaXMtPnN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQWZ0ZXIgTW9kZWwgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJNb2RlbENvbXBvbmVudERhdGEoJiRjb21wb25lbnQpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGV4cG9ydCBmb3IgYW55IHZpZXcNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJLy8gc2V0IHRoZSBleHBvcnQvaW1wb3J0IG9wdGlvbg0KCQkJaWYgKGlzc2V0KCRjb21wb25lbnQtPmFkbWluX3ZpZXdzKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29tcG9uZW50LT5hZG1pbl92aWV3cykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGNvbXBvbmVudC0+YWRtaW5fdmlld3MgYXMgJHZpZXcpDQoJCQkJew0KCQkJCQlpZiAoISR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAoaXNzZXQoJHZpZXdbJ3BvcnQnXSkgJiYgJHZpZXdbJ3BvcnQnXSB8fCAxID09ICR2aWV3WydzZXR0aW5ncyddLT5hZGRfY3VzdG9tX2ltcG9ydCkpDQoJCQkJCXsNCgkJCQkJCSR0aGlzLT5leHBvcnRUZXh0T25seSA9IDE7DQoJCQkJCQkkdGhpcy0+c3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IChib29sKSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3N0cmljdF9wZXJtaXNzaW9uX3Blcl9maWVsZCcsIDEpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBMYW5nIEZpbGUgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRMYW5nRmlsZURhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAkdGhpcy0+Y29tcG9uZW50QWN0aXZlKCkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmxhbmd1YWdlQXJyYXkpKQ0KCQl7DQoJCQlmb3JlYWNoKCR0aGlzLT5sYW5ndWFnZUFycmF5IGFzICRrZXkgPT4gJHN0cmluZykNCgkJCXsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdMYW5ndWFnZScpLT5zZXQoJ2FkbWluc3lzJywgJGtleSwgJHN0cmluZyk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgU2V0IENvbmZpZyBGaWVsZCBzZXRzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZVNldENvbmZpZ0ZpZWxkc2V0cygmJHRpbWVyKQ0KCXsNCgkJLy8gb25seSBhZGQgZmllbGRzIGFmdGVyIHNlY29uZCB0aW1lDQoJCWlmICgkdGhpcy0+ZXhwb3J0VGV4dE9ubHkgJiYgJHRoaXMtPmNvbXBvbmVudEFjdGl2ZSgpICYmICR0aW1lciA9PSAyKQ0KCQl7DQoJCQkvLyBtYWluIGxhbmcgcHJlZml4DQoJCQkkbGFuZyA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5sYW5nX3ByZWZpeCAuICdfQ09ORklHJzsNCgkJCS8vIHN0YXJ0IGJ1aWxkaW5nIGZpZWxkIHNldCBmb3IgY29uZmlnDQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIjxmaWVsZHNldCIpOw0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICduYW1lPSJleHBvcnRfdGV4dF9vbmx5X2NvbmZpZyInKTsNCgkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAnbGFiZWw9IicgLiAkbGFuZyAuICdfRVhQT1JUX1RFWFRfT05MWV9UQUJfTEFCRUwiJyk7DQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gJ2Rlc2NyaXB0aW9uPSInIC4gJGxhbmcgLiAnX0VYUE9SVF9URVhUX09OTFlfVEFCX0RFU0NSSVBUSU9OIj4nKTsNCgkJCS8vIHNldHVwIGxhbmcNCgkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9MQUJFTCddID0gIkV4cG9ydCBPcHRpb25zIjsNCgkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9ERVNDUklQVElPTiddID0gIkhlcmUgYXJlIHNvbWUgZXh0cmEgb3B0aW9uIHRvIGFkanVzdCB0aGUgZXhwb3J0IGJlaGF2aW91ciBvZiBhZG1pbiB2aWV3cy4iOw0KCQkJLy8gYWRkIGN1c3RvbSBFeHBvcnQgT3B0aW9ucw0KCQkJaWYgKGlzc2V0KCRjb25maWdGaWVsZFNldHNDdXN0b21GaWVsZFsnRXhwb3J0IE9wdGlvbnMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbmZpZ0ZpZWxkU2V0c0N1c3RvbUZpZWxkWydFeHBvcnQgT3B0aW9ucyddKSkNCgkJCXsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBpbXBsb2RlKCIiLCAkY29uZmlnRmllbGRTZXRzQ3VzdG9tRmllbGRbJ0V4cG9ydCBPcHRpb25zJ10pKTsNCgkJCQl1bnNldCgkY29uZmlnRmllbGRTZXRzQ3VzdG9tRmllbGRbJ0V4cG9ydCBPcHRpb25zJ10pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX0xBQkVMJ10gPSAiRXhwb3J0IFRleHQgT25seSI7DQoJCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbJGxhbmcgLiAnX0VYUE9SVF9URVhUX09OTFlfREVTQ1JJUFRJT04nXSA9ICJUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBleHBvcnQgb2Ygc3RyaW5nL3RleHQgaW5zdGVhZCBvZiBsaW5rZWQgSURzIGluIGFsbCBhZG1pbiB2aWV3cyB0aGF0IGhhdmUgYW4gZXhwb3J0IG9wdGlvbi4iOw0KDQoJCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbJGxhbmcgLiAnX0FDVElWQVRFJ10gPSAiQWN0aXZhdGUiOw0KCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19ERUFDVElWQVRFJ10gPSAiRGVhY3RpdmF0ZSI7DQoNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICI8IS0tIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4cG9ydCBUZXh0IE9ubHkgRmllbGQuIFR5cGU6IFJhZGlvLiAoam9vbWxhKSAtLT4iKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIjxmaWVsZCIpOw0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAidHlwZT1cInJhZGlvXCIiKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIm5hbWU9XCJleHBvcnRfdGV4dF9vbmx5XCIiKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImxhYmVsPVwiIiAuICRsYW5nIC4gIl9FWFBPUlRfVEVYVF9PTkxZX0xBQkVMXCIiKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImRlc2NyaXB0aW9uPVwiIiAuICRsYW5nIC4gIl9FWFBPUlRfVEVYVF9PTkxZX0RFU0NSSVBUSU9OXCIiKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC15ZXNub1wiIik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJkZWZhdWx0PVwiMFwiPiIpOw0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiPCEtLSIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBPcHRpb24gU2V0LiAtLT4iKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIjxvcHRpb24gdmFsdWU9XCIxXCI+Iik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICRsYW5nIC4gIl9BQ1RJVkFURTwvb3B0aW9uPiIpOw0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiPG9wdGlvbiB2YWx1ZT1cIjBcIj4iKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gJGxhbmcgLiAiX0RFQUNUSVZBVEU8L29wdGlvbj4iKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIjwvZmllbGQ+Iik7DQoNCgkJCQkvLyBhZGQgIHN0cmljdCBGaWVsZCBFeHBvcnQgUGVybWlzc2lvbnMgZmllbGQNCgkJCQlpZiAoJHRoaXMtPnN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpDQoJCQkJew0KCQkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfU1RSSUNUX1BFUk1JU1NJT05fUEVSX0ZJRUxEX0xBQkVMJ10gPSAiVXNlIFN0cmljdCBQZXJtaXNzaW9uIHBlci9maWVsZCI7DQoJCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19TVFJJQ1RfUEVSTUlTU0lPTl9QRVJfRklFTERfREVTQ1JJUFRJT04nXSA9ICJVc2Ugc3RyaWN0IHBlcm1pc3Npb25zIHBlci9maWVsZCBpbiB0aGUgZXhwb3J0IG1ldGhvZHMgd2hlcmUgdGhlcmUgYXJlIGZpZWxkcyBwZXJtaXNzaW9ucyBpbiBhIHZpZXcuIjsNCg0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICI8IS0tIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFN0cmljdF9wZXJtaXNzaW9uX3Blcl9maWVsZCBGaWVsZC4gVHlwZTogUmFkaW8uIChqb29tbGEpIC0tPiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIjxmaWVsZCIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInR5cGU9XCJyYWRpb1wiIik7DQoJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAibmFtZT1cInN0cmljdF9wZXJtaXNzaW9uX3Blcl9maWVsZFwiIik7DQoJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAibGFiZWw9XCIiIC4gJGxhbmcgLiAiX1NUUklDVF9QRVJNSVNTSU9OX1BFUl9GSUVMRF9MQUJFTFwiIik7DQoJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiZGVzY3JpcHRpb249XCIiIC4gJGxhbmcgLiAiX1NUUklDVF9QRVJNSVNTSU9OX1BFUl9GSUVMRF9ERVNDUklQVElPTlwiIik7DQoJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXllc25vXCIiKTsNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJkZWZhdWx0PVwiMVwiPiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIjwhLS0iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgT3B0aW9uIFNldC4gLS0+Iik7DQoJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiPG9wdGlvbiB2YWx1ZT1cIjFcIj4iKTsNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICRsYW5nIC4gIl9BQ1RJVkFURTwvb3B0aW9uPiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIjxvcHRpb24gdmFsdWU9XCIwXCI+Iik7DQoJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAkbGFuZyAuICJfREVBQ1RJVkFURTwvb3B0aW9uPiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIjwvZmllbGQ+Iik7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2xvc2UgdGhhdCBmaWVsZHNldA0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICI8L2ZpZWxkc2V0PiIpOw0KCQl9DQoJfQ0KDQpbQ1VTVE9NQ09ERT1jb21wb25lbnRBY3RpdmVd', '[[[Component]]] Export Compiler', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Export Compiler J5', '', 1, '', '', 1, '2024-03-10 15:55:12', '2024-08-11 11:35:48', 11, '', 2),
-(43, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to build the privacy plugin for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to link your admin views to the privacy suite of Joomla via our other Content - [[[Component]]] Privacy Tabs plugin.', '{}', 'd13975a2-47d2-451d-bdd8-c44024eef1b8', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbjsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow==', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"},\"method_selection2\":{\"method\":\"70\"},\"method_selection3\":{\"method\":\"119\"},\"method_selection4\":{\"method\":\"120\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoqDQoJICogR2xvYmFsIHN3aXRjaCB0byBzZWUgaWYgY29tcG9uZW50IGhhdmUgbmVlZCBvZiBwcml2YWN5IHBsdWdpbiB0byBiZSBsb2FkZWQuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkbG9hZFByaXZhY3kgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIFRoZSBWaWV3cyBMaW5rZWQgdG8gSm9vbWxhIFVzZXJzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGFjdGl2ZVZpZXdzID0gW107DQoNCgkvKioNCgkgKiBUaGUgVmlld3MgcGVybWlzc2lvbiBmaWVsZHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkcGVybWlzc2lvbkZpZWxkcyA9IFtdOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGFkZCB0aGUgcHJpdmFjeQ0KCQkkdmlldy0+cGFyYW1zID0gKGlzc2V0KCR2aWV3LT5wYXJhbXMpICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXMpKSA/IGpzb25fZGVjb2RlKCR2aWV3LT5wYXJhbXMsIHRydWUpIDogJHZpZXctPnBhcmFtczsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXMpICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPnBhcmFtc1sncHJpdmFjeSddKSAmJiANCgkJCWlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYWN0aXZhdGUnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhY3RpdmF0ZSddID09IDEpDQoJCXsNCgkJCS8vIGFjdGl2YXRlIHRoZSBsb2FkIG9mIHRoZSBwcml2YWN5IHBsdWdpbg0KCQkJJHRoaXMtPmxvYWRQcml2YWN5ID0gdHJ1ZTsNCgkJCS8vIGxvYWQgdGhlIGFkbWluIHZpZXcgZGV0YWlscw0KCQkJJHRoaXMtPmFjdGl2ZVZpZXdzWyR2aWV3LT5pZF0gPSAkdmlldzsNCgkJCS8vIGFkZCBwZXJtaXNzaW9ucw0KCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zID0gKGlzc2V0KCR2aWV3LT5hZGRwZXJtaXNzaW9ucykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHZpZXctPmFkZHBlcm1pc3Npb25zKSkgPyBqc29uX2RlY29kZSgkdmlldy0+YWRkcGVybWlzc2lvbnMsIHRydWUpIDogbnVsbDsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+YWRkcGVybWlzc2lvbnMpKQ0KCQkJew0KCQkJCSR2aWV3LT5hZGRwZXJtaXNzaW9ucyA9IGFycmF5X3ZhbHVlcygkdmlldy0+YWRkcGVybWlzc2lvbnMpOw0KCQkJCS8vIGFkZCB0aGUgbmV3IHBlcm1pc3Npb25zDQoJCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zW10gPSBbDQoJCQkJCSdhY3Rpb24nID0+ICd2aWV3LnByaXZhY3kuZGVsZXRlJywNCgkJCQkJJ2ltcGxlbWVudGF0aW9uJyA9PiAzLA0KCQkJCQkndGl0bGUnID0+ICR2aWV3LT5uYW1lX2xpc3QgLiAnIFByaXZhY3kgRGVsZXRlJywNCgkJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnIEFsbG93cyB0aGUgdXNlcnMgaW4gdGhpcyBncm91cCB0byByZW1vdmUgdGhlaXIgcGVyc29uYWwgZGF0YSBpbiAnIC4gJHZpZXctPm5hbWVfbGlzdCAuICcgdmlhIHRoZSBKb29tbGEgcHJpdmFjeSBzdWl0ZS4nDQoJCQkJXTsNCgkJCQkkdmlldy0+YWRkcGVybWlzc2lvbnNbXSA9IFsNCgkJCQkJJ2FjdGlvbicgPT4gJ3ZpZXcucHJpdmFjeS5hY2Nlc3MnLA0KCQkJCQknaW1wbGVtZW50YXRpb24nID0+IDMsDQoJCQkJCSd0aXRsZScgPT4gJHZpZXctPm5hbWVfbGlzdCAuICcgUHJpdmFjeSBBY2Nlc3MnLA0KCQkJCQknZGVzY3JpcHRpb24nID0+ICcgQWxsb3dzIHRoZSB1c2VycyBpbiB0aGlzIGdyb3VwIHRvIGFjY2VzcyB0aGVpciBwZXJzb25hbCBkYXRhIGluICcgLiAkdmlldy0+bmFtZV9saXN0IC4gJyB2aWEgdGhlIEpvb21sYSBwcml2YWN5IHN1aXRlLicNCgkJCQldOw0KCQkJCS8vIGNvbnZlcnQgYmFjayB0byBqc29uDQoJCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zID0ganNvbl9lbmNvZGUoJHZpZXctPmFkZHBlcm1pc3Npb25zLCBKU09OX0ZPUkNFX09CSkVDVCk7DQoJCQl9DQoJCQkvLyBhZGQgcGxhY2Vob2xkZXJzIHRvIHZpZXcgaWYgbm90IGFscmVhZHkgc2V0DQoJCQlpZiAoIWlzc2V0KCR0aGlzLT5hY3RpdmVWaWV3c1skdmlldy0+aWRdLT5wbGFjZWhvbGRlcnMpKQ0KCQkJew0KCQkJCSR0aGlzLT5hY3RpdmVWaWV3c1skdmlldy0+aWRdLT5wbGFjZWhvbGRlcnMgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdQbGFjZWhvbGRlcicpLT5hY3RpdmU7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBjb21wb25lbnQgbmVlZHMgYSBwcml2YWN5IHBsdWdpbiBsb2FkZWQNCgkJaWYgKCR0aGlzLT5sb2FkUHJpdmFjeSkNCgkJew0KCQkJJHBsdWdpbiA9IEpvb21sYV9fXzc5MzQ2NjViX2U0MzJfNGVjNl9iMzhkXzI3YmYzMjczMGViOV9fX1Bvd2VyOjpnZXRQbHVnaW4oJ2NvbnRlbnQnLCAnW1tbY29tcG9uZW50XV1dcHJpdmFjeXRhYnMnKTsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMganNvbg0KCQkJaWYgKGlzc2V0KCRwbHVnaW4tPnBhcmFtcykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHBsdWdpbi0+cGFyYW1zKSkNCgkJCXsNCgkJCQkvLyBDb252ZXJ0IHRoZSBwYXJhbXMgZmllbGQgdG8gYW4gYXJyYXkuDQoJCQkJJHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5Ow0KCQkJCSRyZWdpc3RyeS0+bG9hZFN0cmluZygkcGx1Z2luLT5wYXJhbXMpOw0KCQkJCSRwbHVnaW4tPnBhcmFtcyA9ICRyZWdpc3RyeS0+dG9BcnJheSgpOw0KCQkJfQ0KCQkJLy8gbm93IGdldCB0aGUgcGx1Z2luIElEIGlmIHNldA0KCQkJaWYgKGlzc2V0KCRwbHVnaW4tPnBhcmFtc1sncGx1Z2luJ10pICYmICRwbHVnaW4tPnBhcmFtc1sncGx1Z2luJ10gPiAwKQ0KCQkJew0KCQkJCS8vIGlmIGxpbmtlZCBpdCB3aWxsIG9ubHkgbG9hZCBpdCBvbmNlDQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnSm9vbWxhcGx1Z2luLkRhdGEnKS0+c2V0KCRwbHVnaW4tPnBhcmFtc1sncGx1Z2luJ10pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5nZXRBcHBsaWNhdGlvbigpLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdZb3UgZG8gbm90IGhhdmUgYSBnbG9iYWwgcHJpdmFjeSBwbHVnaW4gc2V0dXAsIHNvIHRoZSBpbnRlZ3JhdGlvbiB3aXRoIEpvb21sYSBwcml2YWN5IHN1aXRlIGNvdWxkIG5vdCBiZSBidWlsZC4nKSwgJ1dhcm5pbmcnKTsNCgkJCQkkdGhpcy0+bG9hZFByaXZhY3k9IGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFVwZGF0ZSBGaWxlc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVVcGRhdGVGaWxlcygkY29tcGlsZXIpDQoJew0KCQkvLyBjaGVjayBpZiBwcml2YWN5IGlzIHRvIGJlIGxvYWRlZA0KCQlpZiAoJHRoaXMtPmxvYWRQcml2YWN5ICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5hY3RpdmVWaWV3cykpDQoJCXsNCgkJCS8vIGdldCBjb21waWxlciBkZWZhdWx0cw0KCQkJJHN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+Z2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCBmYWxzZSk7DQoJCQkkZXhwb3J0VGV4dE9ubHkgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+Z2V0KCdleHBvcnRfdGV4dF9vbmx5JywgMSk7DQoNCgkJCS8vIGxvYWQgdGhlIGdldFByaXZhY3lFeHBvcnQgZnVuY3Rpb25zDQoJCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJGlkID0+ICYkdmlldykNCgkJCXsNCgkJCQkvLyBzZXQgcGVybWlzc2lvbnMgYmFzZWQgb24gdmlldw0KCQkJCWlmIChpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ3Blcm1pc3Npb25zJ10pKQ0KCQkJCXsNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnNldCgncGVybWlzc2lvbl9zdHJpY3RfcGVyX2ZpZWxkJywgKGJvb2wpICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsncGVybWlzc2lvbnMnXSk7DQoJCQkJfQ0KDQoJCQkJLy8gYWxsb3cgdGV4dCBvbmx5IGV4cG9ydA0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5zZXQoJ2V4cG9ydF90ZXh0X29ubHknLCAxKTsNCg0KCQkJCS8vIHNldCB2aWV3IGxpc3QgbmFtZQ0KCQkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJCSR2aWV3TmFtZV9zaW5nbGUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX3NpbmdsZSk7DQoJCQkJLy8gbG9hZCB0aGUgZnVuY3Rpb24NCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbnRlbnQuTXVsdGknKS0+YWRkKCR2aWV3TmFtZV9saXN0IC4gJ3xNT0RFTEVYUE9SVE1FVEhPRCcsDQoJCQkJCSRjb21waWxlci0+c2V0R2V0SXRlbXNNb2RlbE1ldGhvZCgNCgkJCQkJCSR2aWV3TmFtZV9zaW5nbGUsDQoJCQkJCQkkdmlld05hbWVfbGlzdCwNCgkJCQkJCVsNCgkJCQkJCQknZnVuY3Rpb25OYW1lJyA9PiAnZ2V0UHJpdmFjeUV4cG9ydCcsDQoJCQkJCQkJJ2RvY0Rlc2MnID0+ICdNZXRob2QgdG8gZ2V0IGRhdGEgZHVyaW5nIGFuIGV4cG9ydCByZXF1ZXN0LicsDQoJCQkJCQkJJ3R5cGUnID0+ICdwcml2YWN5Jw0KCQkJCQkJXQ0KCQkJCQkpDQoJCQkJKTsNCgkJCQkvLyBnZXQgdGhlIHBlcm1pc3Npb25zIGJ1aWxkaW5nIHZhbHVlcyBmb3IgbGF0ZXIgaWYgbmVlZGVkDQoJCQkJaWYgKFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5nZXQoJ3Blcm1pc3Npb25fc3RyaWN0X3Blcl9maWVsZCcsIGZhbHNlKSAmJg0KCQkJCQlpc3NldCgkY29tcGlsZXItPnBlcm1pc3Npb25GaWVsZHNbJHZpZXdOYW1lX3NpbmdsZV0pICYmDQoJCQkJCVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb21waWxlci0+cGVybWlzc2lvbkZpZWxkc1skdmlld05hbWVfc2luZ2xlXSkpDQoJCQkJew0KCQkJCQkkdGhpcy0+cGVybWlzc2lvbkZpZWxkc1skdmlld05hbWVfc2luZ2xlXSA9ICRjb21waWxlci0+cGVybWlzc2lvbkZpZWxkc1skdmlld05hbWVfc2luZ2xlXTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIHNldCBjb21waWxlciBkZWZhdWx0cw0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnNldCgncGVybWlzc2lvbl9zdHJpY3RfcGVyX2ZpZWxkJywgJHN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpOw0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnNldCgnZXhwb3J0X3RleHRfb25seScsICRleHBvcnRUZXh0T25seSk7DQoNCgkJCS8vIGFkZCBoZWxwZXIgY2xhc3Nlcw0KCQkJJGhlbHBlcl9zdHJpbmdzID0gWydDVVNUT01fSEVMUEVSX1NDUklQVCcsICdTSVRFX0NVU1RPTV9IRUxQRVJfU0NSSVBUJywgJ0JPVEhfQ1VTVE9NX0hFTFBFUl9TQ1JJUFQnXTsNCgkJCSRwcml2YWN5X2V2ZW50cyA9IFsNCgkJCQknUHJpdmFjeUNhblJlbW92ZURhdGEnID0+IHRydWUsDQoJCQkJJ1ByaXZhY3lFeHBvcnRSZXF1ZXN0JyA9PiB0cnVlLA0KCQkJCSdQcml2YWN5UmVtb3ZlRGF0YScgPT4gdHJ1ZQ0KCQkJXTsNCg0KCQkJZm9yZWFjaCAoJGhlbHBlcl9zdHJpbmdzIGFzICRoZWxwZXIpDQoJCQl7DQoJCQkJaWYgKCgkaGVscGVyX2NvbnRlbnQgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbnRlbnQuT25lJyktPmdldCgkaGVscGVyKSkgIT09IG51bGwgJiYNCgkJCQkJU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGhlbHBlcl9jb250ZW50KSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRwcml2YWN5X2V2ZW50cyBhcyAkcHJpdmFjeV9ldmVudCA9PiAmJGFkZCkNCgkJCQkJew0KCQkJCQkJLy8gY2hlY2sgaWYgdGhlIGV2ZW4gaXMgb3ZlcndyaXRlbg0KCQkJCQkJaWYgKHN0cnBvcygkaGVscGVyX2NvbnRlbnQsICdwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9uJyAuICRwcml2YWN5X2V2ZW50IC4gJygnKSAhPT0gZmFsc2UpDQoJCQkJCQl7DQoJCQkJCQkJJGFkZCA9IGZhbHNlOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBhZGQgdGhlIGV2ZW50cyBzdGlsbCBuZWVkZWQNCgkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWRkKCdCT1RIX0NVU1RPTV9IRUxQRVJfU0NSSVBUJywNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCR0aGlzLT5nZXRIZWxwZXJNZXRob2QoJHByaXZhY3lfZXZlbnRzKSkNCgkJCSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgU2V0IExhbmcgRmlsZSBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZVNldExhbmdGaWxlRGF0YSgpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmxhbmd1YWdlQXJyYXkpKQ0KCQl7DQoJCQlmb3JlYWNoKCR0aGlzLT5sYW5ndWFnZUFycmF5IGFzICRrZXkgPT4gJHN0cmluZykNCgkJCXsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdMYW5ndWFnZScpLT5zZXQoJ3NpdGUnLCAka2V5LCAkc3RyaW5nKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgSGVscGVyIG1ldGhvZHMgbmVlZGVkIHRvIGludGVncmF0ZSB3aXRoIEpvb21sYSBQcml2YWN5IFN1aXRlDQoJICogDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGhlbHBlck1ldGhvZHMgIFRoZSBoZWxwZXIgbWV0aG9kcyBzdHJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRIZWxwZXJNZXRob2QoJiRldmVudHMpDQoJew0KCQkkbWV0aG9kcyA9ICcnOw0KCQlmb3JlYWNoICgkZXZlbnRzIGFzICRldmVudCA9PiAkYWRkKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGUgZXZlbiBzaG91bGQgYmUgYWRkZWQNCgkJCWlmICgkYWRkKQ0KCQkJew0KCQkJCS8vIGFkZCB0aGUgZXZlbnQNCgkJCQkkdGhpcy0+eydzZXQnLiRldmVudH0oJG1ldGhvZHMpOw0KCQkJfQ0KCQl9DQoJCS8vIG9ubHkgYWRkIGhlYWRlciBpZiB0aGVyZSB3YXMgZXZlbnRzIGFkZGVkDQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkbWV0aG9kcykpDQoJCXsNCgkJCSRtZXRob2RzID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIDw8PD09PSBQcml2YWN5IGludGVncmF0aW9uIHdpdGggSm9vbWxhIFByaXZhY3kgc3VpdGUgPT09Pj4+IiAuIFBIUF9FT0wgLiAkbWV0aG9kczsNCgkJfQ0KDQoJCXJldHVybiAkbWV0aG9kczsNCgl9DQoNCgkvKioNCgkgKiBTZXQgUHJpdmFjeSBDYW4gUmVtb3ZlIERhdGENCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kcyAgVGhlIG1ldGhvZHMgc3RyaW5nDQoJICogDQoJICogQHJldHVybiAgdm9pZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRQcml2YWN5Q2FuUmVtb3ZlRGF0YSgmJG1ldGhvZHMpDQoJew0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIvKioiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBQZXJmb3JtcyB2YWxpZGF0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSByZW1vdmUgaW5mb3JtYXRpb24gcmVxdWVzdCBjYW4gYmUgcHJvY2Vzc2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBQcml2YWN5UGx1Z2luICBcJHBsdWdpbiAgVGhlIHBsdWdpbiBiZWluZyBwcm9jZXNzZWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBQcml2YWN5UmVtb3ZhbFN0YXR1cyAgXCRzdGF0dXMgIFRoZSBzdGF0dXMgYmVpbmcgc2V0IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgXCRyZXF1ZXN0ICBUaGUgcmVxdWVzdCByZWNvcmQgYmVpbmcgcHJvY2Vzc2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgSm9vbWxhX18iLiJfZWZmZGFmNmRfMjI3NV80MjVkXzlmNTJfZDQ5NTJlNTY0ZDM0X19fUG93ZXIgICAgICAgICAgICAgICAgXCR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5UmVtb3ZhbFN0YXR1cyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqLyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb25Qcml2YWN5Q2FuUmVtb3ZlRGF0YSgmXCRwbHVnaW4sICZcJHN0YXR1cywgJlwkcmVxdWVzdCwgJlwkdXNlcikiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQnVja2V0IHRvIGdldCBhbGwgcmVhc29ucyB3aHkgcmVtb3ZhbCBub3QgYWxsb3dlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkcmVhc29ucyA9IGFycmF5KCk7IjsNCgkJZm9yZWFjaCAoJHRoaXMtPmFjdGl2ZVZpZXdzIGFzICR2aWV3KQ0KCQl7DQoJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJJHZpZXdOYW1lX3NpbmdsZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfc2luZ2xlKTsNCg0KCQkJLy8gbG9hZCB0aGUgY2FuRG8gZnJvbSBnZXRBY3Rpb25zIGhlbHBlciBtZXRob2QNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENoZWNrIGlmIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gZGVsZXRlICIgLiAkdmlldy0+bmFtZV9saXN0Ow0KCQkJLy8gc2V0IHRoZSBpZiBzdGF0ZW1lbnQgYmFzZWQgb24gdGhlIHBlcm1pc3Npb24gYnVpbGRlcg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiaWYgKCFcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEFjdGlvbigkdmlld05hbWVfc2luZ2xlLCAnY29yZS5kZWxldGUnKQ0KCQkJCS4gIicsICdjb21fIiAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oImNvbXBvbmVudCIpIC4gIicpICYmICFcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEFjdGlvbigkdmlld05hbWVfc2luZ2xlLCAnY29yZS5wcml2YWN5LmRlbGV0ZScpDQoJCQkJLiAiJywgJ2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJykpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInsiOw0KCQkJLy8gc2V0IGxhbmd1YWdlIGtleQ0KCQkJJGxhbmdfa2V5ID0gJHZpZXctPnBsYWNlaG9sZGVyc1tTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJMQU5HX1BSRUZJWCIpXSAuICdfUFJJVkFDWV9DQU5UX1JFTU9WRV8nIC4gJHZpZXctPnBsYWNlaG9sZGVyc1tTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJWSUVXUyIpXTsNCgkJCS8vIHNldCBsYW5ndWFnZSBzdHJpbmcNCgkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nX2tleV0gPSAiWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gcmVtb3ZlL2RlbGV0ZSAiLiAkdmlldy0+bmFtZV9saXN0IC4gIi4iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRyZWFzb25zW10gPSBKb29tbGFfXyIgLiAiX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCciIC4gJGxhbmdfa2V5IC4gIicpOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJ9IjsNCgkJCS8vIHNldCBsYW5ndWFnZSBrZXkNCgkJCSRsYW5nX2tleSA9ICR2aWV3LT5wbGFjZWhvbGRlcnNbU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiTEFOR19QUkVGSVgiKV0gLiAnX1BSSVZBQ1lfQ0FOVF9SRU1PVkVfQ09OVEFDVF9TVVBQT1JUJzsNCgkJfQ0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDaGVjayBpZiBhbnkgcmVhc29ucyB3ZXJlIGZvdW5kIG5vdCB0byBhbGxvdyByZW1vdmFsIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiaWYgKFN1cGVyX18iIC4gIl8wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soXCRyZWFzb25zKSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRzdGF0dXMtPmNhblJlbW92ZSA9IGZhbHNlOyI7DQoJCS8vIHNldCBsYW5ndWFnZSBzdHJpbmcNCgkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbJGxhbmdfa2V5XSA9ICdQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBtb3JlIGRldGFpbHMuJzsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRzdGF0dXMtPnJlYXNvbiA9IGltcGxvZGUoJyAnIC4gUEhQX0VPTCwgXCRyZWFzb25zKSAuICcgJyAuIFBIUF9FT0wgLiBKb29tbGFfXyIgLiAiX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCciIC4gJGxhbmdfa2V5IC4gIicpOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJyZXR1cm4gXCRzdGF0dXM7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCX0NCg0KCS8qKg0KCSAqIFNldCBQcml2YWN5IEV4cG9ydCBSZXF1ZXN0DQoJICogDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZHMgIFRoZSBtZXRob2RzIHN0cmluZw0KCSAqIA0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0UHJpdmFjeUV4cG9ydFJlcXVlc3QoJiRtZXRob2RzKQ0KCXsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiLyoqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogUHJvY2Vzc2VzIGFuIGV4cG9ydCByZXF1ZXN0IGZvciBKb29tbGEgY29yZSB1c2VyIGRhdGEiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lQbHVnaW4gIFwkcGx1Z2luICBUaGUgcGx1Z2luIGJlaW5nIHByb2Nlc3NlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIERvbWFpbkFycmF5ICBcJGRvbWFpbnMgIFRoZSBhcnJheSBvZiBkb21haW5zIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgXCRyZXF1ZXN0ICBUaGUgcmVxdWVzdCByZWNvcmQgYmVpbmcgcHJvY2Vzc2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgSm9vbWxhX18iLiJfZWZmZGFmNmRfMjI3NV80MjVkXzlmNTJfZDQ5NTJlNTY0ZDM0X19fUG93ZXIgICAgICAgICAgICAgICAgXCR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKi8iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9uUHJpdmFjeUV4cG9ydFJlcXVlc3QoJlwkcGx1Z2luLCAmXCRkb21haW5zLCAmXCRyZXF1ZXN0LCAmXCR1c2VyKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInsiOw0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB2aWV3IGxpc3QgbmFtZQ0KCQkJJHZpZXdOYW1lX2xpc3QgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX2xpc3QpOw0KCQkJLy8gc2V0IHZpZXcgc2luZ2xlIG5hbWUNCgkJCSR2aWV3TmFtZV9zaW5nbGUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX3NpbmdsZSk7DQoJCQkvLyBsb2FkIHRoZSBjYW5EbyBmcm9tIGdldEFjdGlvbnMgaGVscGVyIG1ldGhvZA0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBhY2Nlc3MgIiAuICR2aWV3LT5uYW1lX2xpc3Q7DQoJCQkvLyBzZXQgdGhlIGlmIHN0YXRlbWVudCBiYXNlZCBvbiB0aGUgcGVybWlzc2lvbiBidWlsZGVyDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJpZiAoXCR1c2VyLT5hdXRob3Jpc2UoJyINCgkJCQkuIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRHbG9iYWwoJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUuYWNjZXNzJykNCgkJCQkuICInLCAnY29tXyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICInKSB8fCBcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEdsb2JhbCgkdmlld05hbWVfc2luZ2xlLCAnY29yZS5wcml2YWN5LmFjY2VzcycpDQoJCQkJLiAiJywgJ2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJykpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgR2V0ICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJGRvbWFpbnNbXSA9IHNlbGY6OmNyZWF0ZSIgLiB1Y2ZpcnN0KCR2aWV3TmFtZV9saXN0KSAuICJEb21haW4oXCRwbHVnaW4sIFwkdXNlcik7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KCQl9DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInJldHVybiBcJGRvbWFpbnM7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5hY3RpdmVWaWV3cyBhcyAkdmlldykNCgkJew0KCQkJLy8gc2V0IHZpZXcgbGlzdCBuYW1lDQoJCQkkdmlld05hbWVfbGlzdCA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfbGlzdCk7DQoJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJJHZpZXdOYW1lX3NpbmdsZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfc2luZ2xlKTsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiLyoqIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIENyZWF0ZSB0aGUgZG9tYWluIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZTsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIEpvb21sYV9fIi4iXzExYWNjZjU0X2ZjYjlfNGJhMF9hNjQ1XzdjODBjZTE0ZTIyNF9fX1Bvd2VyICBcJHVzZXIgIFRoZSBKb29tbGFfXyIuIl8xMWFjY2Y1NF9mY2I5XzRiYTBfYTY0NV83YzgwY2UxNGUyMjRfX19Qb3dlciBvYmplY3QgdG8gcHJvY2VzcyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqLyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSIgLiB1Y2ZpcnN0KCR2aWV3TmFtZV9saXN0KSAuICJEb21haW4oJlwkcGx1Z2luLCAmXCR1c2VyKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGNyZWF0ZSAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgZG9tYWluIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkZG9tYWluID0gc2VsZjo6Y3JlYXRlRG9tYWluKCciIC4gJHZpZXdOYW1lX3NpbmdsZSAuICInLCAnIiAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oImNvbXBvbmVudCIpIC4gIl8iIC4gJHZpZXdOYW1lX3NpbmdsZSAuICJfZGF0YScpOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgZGF0YWJhc2Ugb2JqZWN0IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGFsbCBpdGVtIGlkcyBvZiAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgdGhhdCBiZWxvbmcgdG8gdGhpcyB1c2VyIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICItPnNlbGVjdCgnaWQnKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICItPmZyb20oXCRkYi0+cXVvdGVOYW1lKCcjX18iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygnY29tcG9uZW50JykgLiAnXycgLiAkdmlld05hbWVfc2luZ2xlIC4gIicpKTsiOw0KCQkJLy8gZ2V0IHZpYSBjdXN0b20gc2NyaXB0DQoJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSA9PSAzKQ0KCQkJew0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBzdHJfcmVwbGFjZShhcnJheV9rZXlzKCR2aWV3LT5wbGFjZWhvbGRlcnMpLCBhcnJheV92YWx1ZXMoJHZpZXctPnBsYWNlaG9sZGVycyksICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnY3VzdG9tX2xpbmsnXSk7DQoJCQl9DQoJCQkvLyBqdXN0IGFub3RoZXIgZmllbGQNCgkJCWVsc2VpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSA9PSAyICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnb3RoZXJfdXNlcl9maWVsZCddKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGZpZWxkIG5hbWUNCgkJCQlpZiAoKCRmaWVsZF9uYW1lID0gJHRoaXMtPmdldEZpZWxkTmFtZSgkdmlldy0+ZmllbGRzLCAkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ290aGVyX3VzZXJfZmllbGQnXSkpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnIiAuICRmaWVsZF9uYW1lIC4gIicpIC4gJyA9ICcgLiBcJGRiLT5xdW90ZShcJHVzZXItPmlkKSk7IjsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSAoVE9ETykNCg0KCQkJCQkvLyBzdG9wIGFueSBmcm9tIGxvYWRpbmcNCgkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgPT09PSBFUlJPUiA9PT09PSBFUlJPUiA9PT09PT0gKGZpZWxkIG5hbWUgbm90IGZvdW5kKSI7DQoJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAtMic7IC8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIDwtLSB0aGlzIHdpbGwgbmV2ZXIgcmV0dXJuIGFueSB2YWx1ZS4gQ2hlY2sgeW91ciBbb3RoZXIgdXNlciBmaWVsZF0gc2VsZWN0ZWQgaW4gdGhlIGFkbWluIHZpZXcgcHJpdmFjeSB0YWIuIjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBnZXQgYmFzZWQgb24gY3JlYXRlZCBieQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnY3JlYXRlZF9ieScpIC4gJyA9ICcgLiBcJGRiLT5xdW90ZShcJHVzZXItPmlkKSk7IjsNCgkJCX0NCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGdldCBhbGwgaXRlbXMgZm9yIHRoZSAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgZG9tYWluIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkcGtzID0gXCRkYi0+c2V0UXVlcnkoXCRxdWVyeSktPmxvYWRDb2x1bW4oKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IHRoZSAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgbW9kZWwiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiXCRtb2RlbCA9IHNlbGY6OmdldE1vZGVsKCciIC4gJHZpZXdOYW1lX2xpc3QgLiAiJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fIiAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oImNvbXBvbmVudCIpIC4gIicpOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBHZXQgYWxsIGl0ZW0gZGV0YWlscyBvZiAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgdGhhdCBiZWxvbmcgdG8gdGhpcyB1c2VyIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkaXRlbXMgPSBcJG1vZGVsLT5nZXRQcml2YWN5RXhwb3J0KFwkcGtzLCBcJHVzZXIpOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBjaGVjayBpZiB3ZSBoYXZlIGl0ZW1zIHNpbmNlIHBlcm1pc3Npb25zIGNvdWxkIGJsb2NrIHRoZSByZXF1ZXN0IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gImlmIChTdXBlcl9fIiAuICJfMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKFwkaXRlbXMpKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFJlbW92ZSAiIC4gJHZpZXctPm5hbWVfc2luZ2xlIC4gIiBkZWZhdWx0IGNvbHVtbnMiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiZm9yZWFjaCAoYXJyYXkoJ3BhcmFtcycsICdhc3NldF9pZCcsICdjaGVja2VkX291dCcsICdjaGVja2VkX291dF90aW1lJywgJ2NyZWF0ZWQnLCAnY3JlYXRlZF9ieScsICdtb2RpZmllZCcsICdtb2RpZmllZF9ieScsICdwdWJsaXNoZWQnLCAnb3JkZXJpbmcnLCAnYWNjZXNzJywgJ3ZlcnNpb24nLCAnaGl0cycpIGFzIFwkY29sdW1uKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gIlwkaXRlbXMgPSBBcnJheUhlbHBlcjo6ZHJvcENvbHVtbihcJGl0ZW1zLCBcJGNvbHVtbik7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIn0iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgbG9hZCB0aGUgaXRlbXMgaW50byB0aGUgZG9tYWluIG9iamVjdCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJmb3JlYWNoIChcJGl0ZW1zIGFzIFwkaXRlbSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJcJGRvbWFpbi0+YWRkSXRlbShzZWxmOjpjcmVhdGVJdGVtRnJvbUFycmF5KFwkaXRlbSwgXCRpdGVtWydpZCddKSk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIn0iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAifSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJyZXR1cm4gXCRkb21haW47IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCgkJfQ0KCQkvLyB3ZSBtdXN0IGFkZCB0aGVzZSBoZWxwZXIgbWV0aG9kcw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIvKioiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBDcmVhdGUgYSBuZXcgZG9tYWluIG9iamVjdCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgc3RyaW5nICBcJG5hbWUgICAgICAgICBUaGUgZG9tYWluJ3MgbmFtZSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIHN0cmluZyAgXCRkZXNjcmlwdGlvbiAgVGhlIGRvbWFpbidzIGRlc2NyaXB0aW9uIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAc2luY2UgICAzLjkuMCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqLyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRG9tYWluKFwkbmFtZSwgXCRkZXNjcmlwdGlvbiA9ICcnKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGRvbWFpbiAgICAgICAgICAgICAgPSBuZXcgUHJpdmFjeUV4cG9ydERvbWFpbjsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGRvbWFpbi0+bmFtZSAgICAgICAgPSBcJG5hbWU7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiXCRkb21haW4tPmRlc2NyaXB0aW9uID0gXCRkZXNjcmlwdGlvbjsiOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJyZXR1cm4gXCRkb21haW47IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSI7DQoNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIENyZWF0ZSBhbiBpdGVtIG9iamVjdCBmb3IgYW4gYXJyYXkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgXCRkYXRhICAgIFRoZSBhcnJheSBkYXRhIHRvIGNvbnZlcnQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBpbnRlZ2VyfG51bGwgIFwkaXRlbUlkICBUaGUgSUQgb2YgdGhpcyBpdGVtIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0SXRlbSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHNpbmNlICAgMy45LjAiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKi8iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUl0ZW1Gcm9tQXJyYXkoYXJyYXkgXCRkYXRhLCBcJGl0ZW1JZCA9IG51bGwpIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAieyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkaXRlbSA9IG5ldyBQcml2YWN5RXhwb3J0SXRlbTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGl0ZW0tPmlkID0gXCRpdGVtSWQ7IjsNCg0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiZm9yZWFjaCAoXCRkYXRhIGFzIFwka2V5ID0+IFwkdmFsdWUpIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAieyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImlmIChpc19vYmplY3QoXCR2YWx1ZSkpIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAieyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gIlwkdmFsdWUgPSAoYXJyYXkpIFwkdmFsdWU7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImlmIChpc19hcnJheShcJHZhbHVlKSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAiXCR2YWx1ZSA9IHByaW50X3IoXCR2YWx1ZSwgdHJ1ZSk7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIlwkZmllbGQgICAgICAgID0gbmV3IFByaXZhY3lFeHBvcnRGaWVsZDsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJGZpZWxkLT5uYW1lICA9IFwka2V5OyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIlwkZmllbGQtPnZhbHVlID0gXCR2YWx1ZTsiOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJGl0ZW0tPmFkZEZpZWxkKFwkZmllbGQpOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJyZXR1cm4gXCRpdGVtOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGZpZWxkIG5hbWUNCgkgKiANCgkgKiBAcGFyYW0gICBhcnJheSAgICRmaWVsZHMgIFRoZSBmaWVsZHMgYXJyYXkNCgkgKiBAcGFyYW0gICBpbnQgICAgICAgJGlkICAgICAgIFRoZSBmaWVsZCBpZA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZyAgICBUaGUgZmllbGQgbmFtZQ0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRGaWVsZE5hbWUoJiRmaWVsZHMsICRpZCkNCgl7DQoJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKQ0KCQl7DQoJCQlpZiAoJGZpZWxkWydmaWVsZCddID09ICRpZCkNCgkJCXsNCgkJCQlyZXR1cm4gJGZpZWxkWydiYXNlX25hbWUnXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogU2V0IFByaXZhY3kgUmVtb3ZlIERhdGENCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kcyAgVGhlIG1ldGhvZHMgc3RyaW5nDQoJICogDQoJICogQHJldHVybiAgdm9pZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRQcml2YWN5UmVtb3ZlRGF0YSgmJG1ldGhvZHMpDQoJew0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIvKioiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBSZW1vdmVzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHJlbW92ZSBpbmZvcm1hdGlvbiByZXF1ZXN0IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBQcml2YWN5VGFibGVSZXF1ZXN0ICBcJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBKb29tbGFfXyIuIl9lZmZkYWY2ZF8yMjc1XzQyNWRfOWY1Ml9kNDk1MmU1NjRkMzRfX19Qb3dlciAgICAgICAgICAgICAgICBcJHVzZXIgICAgIFRoZSB1c2VyIGFjY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCBpZiBhdmFpbGFibGUiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEByZXR1cm4gIHZvaWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKi8iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9uUHJpdmFjeVJlbW92ZURhdGEoJlwkcGx1Z2luLCAmXCRyZXF1ZXN0LCAmXCR1c2VyKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInsiOw0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB0aGUgYW5vbnltaXplIHN3aXRjaA0KCQkJJGFub255bWl6ZSA9IGZhbHNlOw0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplJ10gPT0gMSAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemVfZmllbGRzJ10sIHRydWUpKQ0KCQkJew0KCQkJCS8vIEFub255bWl6ZSB0aGUgZGF0YQ0KCQkJCSRhbm9ueW1pemUgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gc2V0IHZpZXcgbGlzdCBuYW1lDQoJCQkkdmlld05hbWVfbGlzdCA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfbGlzdCk7DQoJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJJHZpZXdOYW1lX3NpbmdsZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfc2luZ2xlKTsNCgkJCS8vIGxvYWQgdGhlIGNhbkRvIGZyb20gZ2V0QWN0aW9ucyBoZWxwZXIgbWV0aG9kDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGRlbGV0ICIgLiAkdmlldy0+bmFtZV9saXN0Ow0KCQkJLy8gc2V0IHRoZSBpZiBzdGF0ZW1lbnQgYmFzZWQgb24gdGhlIHBlcm1pc3Npb24gYnVpbGRlcg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiaWYgKFwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5DcmVhdG9yLlBlcm1pc3Npb24nKS0+Z2V0QWN0aW9uKCR2aWV3TmFtZV9zaW5nbGUsICdjb3JlLmRlbGV0ZScpDQoJCQkJLiAiJywgJ2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJykgfHwgXCR1c2VyLT5hdXRob3Jpc2UoJyINCgkJCQkuIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRBY3Rpb24oJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUucHJpdmFjeS5kZWxldGUnKQ0KCQkJCS4gIicsICdjb21fIiAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oImNvbXBvbmVudCIpIC4gIicpKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJ7IjsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBwbGFpbiBkZWxldGUsIG9yIGl0IGlzIGEgQW5vbnltaXplIA0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gYW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQW5vbnltaXplICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRhdGEiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInNlbGY6OmFub255bWl6ZSIgLiB1Y2ZpcnN0KCR2aWV3TmFtZV9saXN0KSAuICJEYXRhKFwkcGx1Z2luLCBcJHVzZXIpOyI7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8ganVzdCBkdW1wLCBkZWxldGUgdGhlIHJvd3MNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBSZW1vdmUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZSAuICIgZGF0YSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAic2VsZjo6cmVtb3ZlIiAuIHVjZmlyc3QoJHZpZXdOYW1lX2xpc3QpIC4gIkRhdGEoXCRwbHVnaW4sIFwkdXNlcik7IjsNCgkJCX0NCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KCQl9DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCg0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB0aGUgYW5vbnltaXplIHN3aXRjaA0KCQkJJGFub255bWl6ZSA9IGZhbHNlOw0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplJ10gPT0gMSAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemVfZmllbGRzJ10sIHRydWUpKQ0KCQkJew0KCQkJCS8vIEFub255bWl6ZSB0aGUgZGF0YQ0KCQkJCSRhbm9ueW1pemUgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gc2V0IHZpZXcgbGlzdCBuYW1lDQoJCQkkdmlld05hbWVfbGlzdCA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfbGlzdCk7DQoJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJJHZpZXdOYW1lX3NpbmdsZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfc2luZ2xlKTsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiLyoqIjsNCg0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHBsYWluIGRlbGV0ZSwgb3IgaXQgaXMgYSBBbm9ueW1pemUNCgkJCWlmICgkYW5vbnltaXplKQ0KCQkJew0KCQkJCS8vIEFub255bWl6ZSB0aGUgZGF0YQ0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEFub255bWl6ZSB0aGUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZSAuICIgZGF0YSI7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gRGVsZXRlIHRoZSByb3dzDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogUmVtb3ZlIHRoZSAiIC4gJHZpZXctPm5hbWVfc2luZ2xlIC4gIiBkYXRhIjsNCgkJCX0NCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgSm9vbWxhX18iLiJfMTFhY2NmNTRfZmNiOV80YmEwX2E2NDVfN2M4MGNlMTRlMjI0X19fUG93ZXIgIFwkdXNlciAgVGhlIEpvb21sYV9fIi4iXzExYWNjZjU0X2ZjYjlfNGJhMF9hNjQ1XzdjODBjZTE0ZTIyNF9fX1Bvd2VyIG9iamVjdCB0byBwcm9jZXNzIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEByZXR1cm4gIHZvaWQiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICovIjsNCg0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHBsYWluIGRlbGV0ZSwgb3IgaXQgaXMgYSBBbm9ueW1pemUgDQoJCQlpZiAoJGFub255bWl6ZSkNCgkJCXsNCgkJCQkvLyBBbm9ueW1pemUgdGhlIGRhdGENCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFub255bWl6ZSIgLiB1Y2ZpcnN0KCR2aWV3TmFtZV9saXN0KSAuICJEYXRhKCZcJHBsdWdpbiwgJlwkdXNlcikiOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIERlbGV0ZSB0aGUgcm93cw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlIiAuIHVjZmlyc3QoJHZpZXdOYW1lX2xpc3QpIC4gIkRhdGEoJlwkcGx1Z2luLCAmXCR1c2VyKSI7DQoJCQl9DQoNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGRhdGFiYXNlIG9iamVjdCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGdldCBhbGwgaXRlbSBpZHMgb2YgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlciI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLT5zZWxlY3QoJ2lkJykiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLT5mcm9tKFwkZGItPnF1b3RlTmFtZSgnI19fIiAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oJ2NvbXBvbmVudCcpIC4gJ18nIC4gJHZpZXdOYW1lX3NpbmdsZSAuICInKSk7IjsNCgkJCS8vIGdldCB2aWEgY3VzdG9tIHNjcmlwdA0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMykNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkdmlldy0+cGxhY2Vob2xkZXJzKSwgYXJyYXlfdmFsdWVzKCR2aWV3LT5wbGFjZWhvbGRlcnMpLCAkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2N1c3RvbV9saW5rJ10pOw0KCQkJfQ0KCQkJLy8ganVzdCBhbm90aGVyIGZpZWxkDQoJCQllbHNlaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMiAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ290aGVyX3VzZXJfZmllbGQnXSkpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBmaWVsZCBuYW1lDQoJCQkJaWYgKCgkZmllbGRfbmFtZSA9ICR0aGlzLT5nZXRGaWVsZE5hbWUoJHZpZXctPmZpZWxkcywgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydvdGhlcl91c2VyX2ZpZWxkJ10pKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJyIgLiAkZmllbGRfbmFtZSAuICInKSAuICcgPSAnIC4gXCRkYi0+cXVvdGUoXCR1c2VyLT5pZCkpOyI7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2UgKFRPRE8pDQoNCgkJCQkJLy8gc3RvcCBhbnkgZnJvbSBsb2FkaW5nDQoJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiID09PT0gRVJST1IgPT09PT0gRVJST1IgPT09PT09IChmaWVsZCBuYW1lIG5vdCBmb3VuZCkiOw0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gLTInOyAvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA8LS0gdGhpcyB3aWxsIG5ldmVyIHJldHVybiBhbnkgdmFsdWUuIENoZWNrIHlvdXIgW290aGVyIHVzZXIgZmllbGRdIHNlbGVjdGVkIGluIHRoZSBhZG1pbiB2aWV3IHByaXZhY3kgdGFiLiI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZ2V0IGJhc2VkIG9uIGNyZWF0ZWQgYnkNCgkJCWVsc2UNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2NyZWF0ZWRfYnknKSAuICcgPSAnIC4gXCRkYi0+cXVvdGUoXCR1c2VyLT5pZCkpOyI7DQoJCQl9DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgYWxsIGl0ZW1zIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRhYmxlIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlciI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHBrcyA9IFwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpLT5sb2FkQ29sdW1uKCk7IjsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuUEhQX0VPTCAuICBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gImlmIChTdXBlcl9fIiAuICJfMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKFwkcGtzKSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgdGhlICIgLiAkdmlld05hbWVfc2luZ2xlIC4gIiBtb2RlbCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJG1vZGVsID0gc2VsZjo6Z2V0TW9kZWwoJyIgLiAkdmlld05hbWVfc2luZ2xlIC4gIicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tXyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICInKTsiOw0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHBsYWluIGRlbGV0ZSwgb3IgaXQgaXMgYSBBbm9ueW1pemUgDQoJCQlpZiAoJGFub255bWl6ZSkNCgkJCXsNCgkJCQkvLyBidWlsZCB0aGUgcHNldWRvYW5vbnltaXNlZCBkYXRhIGFycmF5DQoJCQkJJF9kYXRhX2J1Y2tldCA9IGFycmF5KCk7DQoJCQkJJF9yYW5kb21fYnVja2V0ID0gYXJyYXkoKTsNCgkJCQkkX3Blcm1pc3Npb25fYnVja2V0ID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoICgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSBhcyAkcm93KQ0KCQkJCXsNCgkJCQkJaWYgKCgkZmllbGRfbmFtZSA9ICR0aGlzLT5nZXRGaWVsZE5hbWUoJHZpZXctPmZpZWxkcywgJHJvd1snZmllbGQnXSkpICE9PSBmYWxzZSkNCgkJCQkJew0KCQkJCQkJaWYgICgnUkFORE9NJyA9PT0gJHJvd1sndmFsdWUnXSkgDQoJCQkJCQl7DQoJCQkJCQkJJF9yYW5kb21fYnVja2V0WyRmaWVsZF9uYW1lXSA9IDg7IC8vIChUT0RPKSBtYWtlIHRoZSBzaXplIGR5bmFtaWMNCgkJCQkJCX0NCgkJCQkJCSRfZGF0YV9idWNrZXRbXSA9IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gIiciIC4gJGZpZWxkX25hbWUgLiAiJyA9PiAnIiAuICRyb3dbJ3ZhbHVlJ10gLiInIjsNCgkJCQkJCSRfcGVybWlzc2lvbl9idWNrZXRbJGZpZWxkX25hbWVdID0gJGZpZWxkX25hbWU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGhpcyBpcyB0aGUgcHNldWRvYW5vbnltaXNlZCBkYXRhIGFycmF5IGZvciAiIC4gJHZpZXctPm5hbWVfbGlzdDsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJHBzZXVkb2Fub255bWlzZWREYXRhID0gYXJyYXkoIjsNCgkJCQkkbWV0aG9kcyAuPSBpbXBsb2RlKCcsJywgJF9kYXRhX2J1Y2tldCk7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiKTsiOw0KDQoJCQkJLy8gYWRkIHRoZSBwZXJtaXNzaW9uYWwgcmVtb3ZhbCBvZiB2YWx1ZXMgdGhlIHVzZXIgaGFzIG5vdCByaWdodCB0byB2aWV3IG9yIGFjY2Vzcw0KCQkJCSRoYXNQZXJtaXNzaW9uYWwgPSBmYWxzZTsNCgkJCQlpZiAoaXNzZXQoJHRoaXMtPnBlcm1pc3Npb25GaWVsZHNbJHZpZXdOYW1lX3NpbmdsZV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdIGFzICRmaWVsZE5hbWUgPT4gJHBlcm1pc3Npb25fb3B0aW9ucykNCgkJCQkJew0KCQkJCQkJaWYgKCEkaGFzUGVybWlzc2lvbmFsICYmIGlzc2V0KCRfcGVybWlzc2lvbl9idWNrZXRbJGZpZWxkTmFtZV0pKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2goJHBlcm1pc3Npb25fb3B0aW9ucyBhcyAkcGVybWlzc2lvbl9vcHRpb24gPT4gJGZpZWxkVHlwZSkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICghJGhhc1Blcm1pc3Npb25hbCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJc3dpdGNoICgkcGVybWlzc2lvbl9vcHRpb24pDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJY2FzZSAnYWNjZXNzJzoNCgkJCQkJCQkJCQljYXNlICd2aWV3JzoNCgkJCQkJCQkJCQljYXNlICdlZGl0JzoNCgkJCQkJCQkJCQkJJGhhc1Blcm1pc3Npb25hbCA9IHRydWU7DQoJCQkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gYWRkIHRoZSBub3RlcyBhbmQgZ2V0IHRoZSBnbG9iYWwgc3dpdGNoDQoJCQkJCWlmICgkaGFzUGVybWlzc2lvbmFsKQ0KCQkJCQl7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgR2V0IGdsb2JhbCBwZXJtaXNzaW9uYWwgY29udHJvbCBhY3RpdmF0aW9uLiAoZGVmYXVsdCBpcyBpbmFjdGl2ZSkiOw0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRzdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGQgPSBKb29tbGFfXyIgLiAiX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJyktPmdldCgnc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkJywgMCk7IjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImlmKFwkc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkKSI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ7IjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHJlbW92ZSBhbGwgZmllbGRzIHRoYXQgaXMgbm90IHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkIjsNCgkJCQkJCWZvcmVhY2ggKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdIGFzICRmaWVsZE5hbWUgPT4gJHBlcm1pc3Npb25fb3B0aW9ucykNCgkJCQkJCXsNCgkJCQkJCQlpZiAoaXNzZXQoJF9wZXJtaXNzaW9uX2J1Y2tldFskZmllbGROYW1lXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJpZiAoIjsNCgkJCQkJCQkJJF9wZXJtaXNzaW9uX2lmID0gYXJyYXkoKTsNCgkJCQkJCQkJZm9yZWFjaCAoJHBlcm1pc3Npb25fb3B0aW9ucyBhcyAkcGVybV9rZXkgPT4gJGZpZWxkX3R5cHJldykNCgkJCQkJCQkJew0KCQkJCQkJCQkJJF9wZXJtaXNzaW9uX2lmW10gPSAiIVwkdXNlci0+YXV0aG9yaXNlKCciIC4gJHZpZXdOYW1lX3NpbmdsZSAuICIuIiAuICRwZXJtX2tleSAuICIuIiAuICRmaWVsZE5hbWUgLiAiJywgJ2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJykiOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRtZXRob2RzIC49ICBpbXBsb2RlKCcgfHwgJywgJF9wZXJtaXNzaW9uX2lmKTsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gICIpIjsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAieyI7DQoJCQkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDUpIC4gInVuc2V0KFwkcHNldWRvYW5vbnltaXNlZERhdGFbJyIuICRmaWVsZE5hbWUgLiAiJ10pOyI7DQoJCQkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gIn0iOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIn0iOw0KCQkJCQl9DQoJCQkJfQ0KDQoNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgdGhlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiB0YWJsZSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCR0YWJsZSA9IFwkbW9kZWwtPmdldFRhYmxlKCk7IjsNCg0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBwc2V1ZG9hbm9ueW1pc2VkIGRhdGEgZm9yICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiBzZXQiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImlmICghU3VwZXJfXyIgLiAiXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhcJHBzZXVkb2Fub255bWlzZWREYXRhKSkiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHN0aWxsIGFyY2hpdmUgYWxsIGl0ZW1zIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJcJHRhYmxlLT5wdWJsaXNoKFwkcGtzLCAyKTsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gInJldHVybiBmYWxzZTsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIn0iOw0KDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgSXRlcmF0ZSB0aGUgaXRlbXMgdG8gYW5vbmltaXplIGVhY2ggb25lLiI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiZm9yZWFjaCAoXCRwa3MgYXMgXCRpID0+IFwkcGspIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJcJHRhYmxlLT5yZXNldCgpOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAiXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YVsnaWQnXSA9IFwkcGs7IjsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJF9yYW5kb21fYnVja2V0KSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRfcmFuZG9tX2J1Y2tldCBhcyAkZmllbGROYW1lID0+ICRzaXplKQ0KCQkJCQl7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJpZiAoaXNzZXQoXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YVsnIiAuICRmaWVsZE5hbWUgLiAiJ10pKSI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJ7IjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDUpIC4gIlwkcHNldWRvYW5vbnltaXNlZERhdGFbJyIgLiAkZmllbGROYW1lIC4gIiddID0gc2VsZjo6cmFuZG9ta2V5KCIgLiAoaW50KSAkc2l6ZSAuICIpOyI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJ9IjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAiaWYgKFwkdGFibGUtPmJpbmQoXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YSkpIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJ7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg1KSAuICJcJHRhYmxlLT5zdG9yZSgpOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAifSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBhcmNoaXZlIGFsbCBpdGVtcyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCR0YWJsZS0+cHVibGlzaChcJHBrcywgMik7IjsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBEZWxldGUgdGhlIHJvd3MNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgdGhlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiB0YWJsZSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCR0YWJsZSA9IFwkbW9kZWwtPmdldFRhYmxlKCk7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBJdGVyYXRlIHRoZSBpdGVtcyB0byBkZWxldGUgZWFjaCBvbmUuIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJmb3JlYWNoIChcJHBrcyBhcyBcJGkgPT4gXCRwaykiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gImlmIChcJHRhYmxlLT5sb2FkKFwkcGspKSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAieyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNSkgLiAiXCR0YWJsZS0+ZGVsZXRlKFwkcGspOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAifSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2xlYXIgdGhlIGNvbXBvbmVudCdzIGNhY2hlIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJG1vZGVsLT5jbGVhbkNhY2hlKCk7IjsNCgkJCX0NCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCQl9DQoJfQ==', '[[[Component]]] Privacy Compiler', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Privacy Compiler J5', '', 1, '', '', 1, '2024-03-10 15:55:15', '2024-08-11 11:35:30', 9, '', 3),
-(44, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to link your components to the privacy suite of Joomla by adding a new privacy tab to the JCB admin views, where you can set all the required details for the integration.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Global Privacy\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2600\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"}}},\"fields1\":{\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"plugin\",\"label\":\"Plugin\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2600\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"}}},\"fields2\":{\"file\":\"admin_view\",\"fields_name\":\"params.privacy\",\"fieldset\":\"privacy\",\"label\":\"Privacy\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2603\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2604\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2605\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2606\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2607\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2608\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2611\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2612\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2613\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2614\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2615\",\"custom_value\":\"\"}}}}', 'e0da018d-dba8-4ce7-b26c-63630f631a40', 'dXNlIEpvb21sYVxDTVNcQ29tcG9uZW50XENvbXBvbmVudEhlbHBlcjsNCnVzZSBKb29tbGFcQ01TXEFwcGxpY2F0aW9uXENNU0FwcGxpY2F0aW9uOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcUmVnaXN0cnlcUmVnaXN0cnk7DQp1c2UgSm9vbWxhXENNU1xGb3JtXEZvcm07DQp1c2UgSm9vbWxhXENNU1xGYWN0b3J5Ow==', 3, '{\"method_selection0\":{\"method\":\"113\"},\"method_selection1\":{\"method\":\"12\"},\"method_selection2\":{\"method\":\"0\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uDQoJICoNCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZXBhcmVGb3JtKEZvcm0gJGZvcm0sICRkYXRhKQ0KCXsNCgkJJGNvbnRleHQgPSAkZm9ybS0+Z2V0TmFtZSgpOw0KDQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoc3RycG9zKCRjb250ZXh0LCAnY29tX1tbW2NvbXBvbmVudF1dXS5hZG1pbl92aWV3JykgPT09IDApDQoJCXsNCgkJCS8vIEFkZCB0aGUgZm9ybXMgcGF0aA0KCQkJRm9ybTo6YWRkRm9ybVBhdGgoX19ESVJfXyAuICcvLi4vLi4vZm9ybXMnKTsNCgkJCS8vIGFkZCB0aGUgYWRtaW4gdmlldyBwYXJhbXMgZm9yIHByaXZhY3kgaW50ZWdyYXRpb24NCgkJCSRmb3JtLT5sb2FkRmlsZSgnYWRtaW5fdmlldycpOw0KCQkJLy8gaWYgdGhlIGdsb2JhbCBwbHVnaW4gaXMgbm90IHNldCwgYWxsb3cgaXQgdG8gYmUgc2V0IGZyb20gdGhlIGFkbWluIHZpZXcNCgkJCWlmICgoJHBsdWdpbiA9ICR0aGlzLT5wYXJhbXMtPmdldCgncGx1Z2luJywgMCkpID09IDApDQoJCQl7DQoJCQkJJGZvcm0tPmxvYWRGaWxlKCdjb25maWcnKTsNCgkJCQkvLyBtYWtlIHRoZSBwbHVnaW4gZmllbGQgcmVxdWlyZWQgKExBVEVSIHdoZW4gd2UgY2FuIGdpdmUgbW9yZSBpbmZvKQ0KCQkJCS8vJGZvcm0tPnNldEZpZWxkQXR0cmlidXRlKCdwbHVnaW4nLCAncmVxdWlyZWQnLCB0cnVlLCAncGFyYW1zLnByaXZhY3knKTsNCgkJCQkvLyRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgncGx1Z2luJywgJ3Nob3dvbicsICdhY3RpdmF0ZToxJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCQkJLy8kZm9ybS0+c2V0RmllbGRBdHRyaWJ1dGUoJ25vdGVfc2VsZWN0X3ByaXZhY3lfcGx1Z2luJywgJ3Nob3dvbicsICdhY3RpdmF0ZToxJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCQl9DQoJCQkvLyB1cGRhdGUgYWxsIGVkaXRvcnMgdG8gdXNlIHRoaXMgY29tcG9uZW50cyBnbG9iYWwgZWRpdG9yDQoJCQkkZ2xvYmFsX2VkaXRvciA9IENvbXBvbmVudEhlbHBlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnZWRpdG9yJywgJ25vbmUnKTsNCgkJCS8vIHNldCB0aGUgZmllbGQgZWRpdG9yIHZhbHVlICh3aXRoIG5vbmUgYXMgZmFsbGJhY2spDQoJCQkkZm9ybS0+c2V0RmllbGRBdHRyaWJ1dGUoJ2N1c3RvbV9saW5rJywgJ2VkaXRvcicsICRnbG9iYWxfZWRpdG9yIC4gJ3xub25lJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCX0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJICogVGhpcyBpcyBhbiBldmVudCB0aGF0IGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGNvbnRlbnQNCgkgKiBpcyBzYXZlZCBpbnRvIHRoZSBkYXRhYmFzZS4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IHBhc3NlZCB0byB0aGUgcGx1Z2luIChhZGRlZCBpbiAxLjYpLg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGFydGljbGUgIEEgSlRhYmxlQ29udGVudCBvYmplY3QuDQoJICogQHBhcmFtICAgYm9vbCAgICAkaXNOZXcgICAgSWYgdGhlIGNvbnRlbnQgaXMganVzdCBhYm91dCB0byBiZSBjcmVhdGVkLg0KCSAqDQoJICogQHJldHVybiAgdm9pZC4NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRCZWZvcmVTYXZlKCRjb250ZXh0LCAkaXRlbSwgJGlzTmV3LCAkZGF0YSA9IGFycmF5KCkpDQoJew0KCQkvLyBXaGVuIHRoaXMgaXMgW1tbY29tcG9uZW50XV1dIGFkbWluIHZpZXcNCgkJaWYgKCdjb21fW1tbY29tcG9uZW50XV1dLmFkbWluX3ZpZXcnID09PSAkY29udGV4dCkNCgkJew0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBqc29uDQoJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPnBhcmFtcykpDQoJCQl7DQoJCQkJLy8gQ29udmVydCB0aGUgcGFyYW1zIGZpZWxkIHRvIGFuIGFycmF5Lg0KCQkJCSRyZWdpc3RyeSA9IG5ldyBSZWdpc3RyeTsNCgkJCQkkcmVnaXN0cnktPmxvYWRTdHJpbmcoJGl0ZW0tPnBhcmFtcyk7DQoJCQkJJGl0ZW0tPnBhcmFtcyA9ICRyZWdpc3RyeS0+dG9BcnJheSgpOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhlIHBsdWdpbiB3YXMgc2V0DQoJCQlpZiAoaXNzZXQoJGl0ZW0tPnBhcmFtc1sncGx1Z2luJ10pICYmICRpdGVtLT5wYXJhbXNbJ3BsdWdpbiddID4gMCkNCgkJCXsNCgkJCQkvLyBmaXJzdCBzZXQgbmV3IHBhcmFtcw0KCQkJCSR0aGlzLT5wYXJhbXMtPnNldCgncGx1Z2luJywgKGludCkgJGl0ZW0tPnBhcmFtc1sncGx1Z2luJ10pOw0KCQkJCS8vIHVwZGF0ZSB0aGUgZ2xvYmFsIHBsdWdpbiBzZXR0aW5ncw0KCQkJCSRleHRlbnNpb25UYWJsZSA9IG5ldyAgSm9vbWxhX19fNWQxMDg4MzJfYzdhYV80YjM5XzhjNDBfYzlhMTE4ZTczMWQ5X19fUG93ZXIoRmFjdG9yeTo6Z2V0RGJvKCkpOw0KCQkJCSRleHRlbnNpb25UYWJsZS0+bG9hZChhcnJheSgnZWxlbWVudCcgPT4gJ1tbW2NvbXBvbmVudF1dXXByaXZhY3l0YWJzJykpOw0KCQkJCS8vIFNhdmUgdGhlIGNoYW5nZQ0KCQkJCSRleHRlbnNpb25UYWJsZS0+c2V0KCdwYXJhbXMnLCAkdGhpcy0+cGFyYW1zLT50b1N0cmluZygpKTsNCgkJCQkkZXh0ZW5zaW9uVGFibGUtPnNhdmUoKGFycmF5KSAkZXh0ZW5zaW9uVGFibGUpOw0KCQkJCS8vIGFuZCByZW1vdmUgdGhlIHZhbHVlIGZyb20gdGhlIHBhcmFtcw0KCQkJCXVuc2V0KCRpdGVtLT5wYXJhbXNbJ3BsdWdpbiddKTsNCgkJCQkvLyBjbGVhciB0aGUgcGx1Z2luIGNhY2hlDQoJCQkJJHRoaXMtPmNsZWFuQ2FjaGUoJ2NvbV9wbHVnaW5zJywgMCk7DQoJCQkJJHRoaXMtPmNsZWFuQ2FjaGUoJ2NvbV9wbHVnaW5zJywgMSk7DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPnBhcmFtcykpDQoJCQl7DQoJCQkJLy8gQ29udmVydCB0aGUgcGFyYW1zIGZpZWxkIHRvIGEgc3RyaW5nLg0KCQkJCSRwYXJhbXMgPSBuZXcgUmVnaXN0cnk7DQoJCQkJJHBhcmFtcy0+bG9hZEFycmF5KCRpdGVtLT5wYXJhbXMpOw0KCQkJCSRpdGVtLT5wYXJhbXMgPSAoc3RyaW5nKSAkcGFyYW1zOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQ2xlYW4gdGhlIGNhY2hlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZ3JvdXAgICAgICBUaGUgY2FjaGUgZ3JvdXANCgkgKiBAcGFyYW0gICBpbnRlZ2VyICAkY2xpZW50X2lkICBUaGUgSUQgb2YgdGhlIGNsaWVudA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMy4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFuQ2FjaGUoJGdyb3VwID0gbnVsbCwgJGNsaWVudF9pZCA9IDApDQoJew0KCQkkY29uZiA9IEZhY3Rvcnk6OmdldENvbmZpZygpOw0KDQoJCSRvcHRpb25zID0gWw0KCQkJJ2RlZmF1bHRncm91cCcgPT4gJGdyb3VwID86IChpc3NldCgkdGhpcy0+b3B0aW9uKSA/ICR0aGlzLT5vcHRpb24gOiBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dC0+Z2V0KCdvcHRpb24nKSksDQoJCQknY2FjaGViYXNlJyA9PiAkY2xpZW50X2lkID8gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY2FjaGUnIDogJGNvbmYtPmdldCgnY2FjaGVfcGF0aCcsIEpQQVRIX1NJVEUgLiAnL2NhY2hlJyksDQoJCQkncmVzdWx0JyA9PiB0cnVlLA0KCQldOw0KDQoJCXRyeQ0KCQl7DQoJCQkvKiogQHZhciBKb29tbGFfX180MTY2NDI1Zl81NTJmXzQ3NjNfYWRjY19jYTQ0M2ZmNGJiZDRfX19Qb3dlciAkY2FjaGUgKi8NCgkJCSRjYWNoZSA9IEpvb21sYV9fX2YzZjRhZGZiX2Y3NDJfNDY1Zl85ZThkXzNkMTYxNWYyYTVkNl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgnY2FsbGJhY2snLCAkb3B0aW9ucyk7DQoJCQkkY2FjaGUtPmNsZWFuKCk7DQoJCX0NCgkJY2F0Y2ggKEpvb21sYV9fXzM2NTVlNzE3Xzc5ZDBfNGNlZl85MjVmXzYxYTczNDFlYjhiZV9fX1Bvd2VyICRleGNlcHRpb24pDQoJCXsNCgkJCSRvcHRpb25zWydyZXN1bHQnXSA9IGZhbHNlOw0KCQl9DQoNCgkJLy8gVHJpZ2dlciB0aGUgb25Db250ZW50Q2xlYW5DYWNoZSBldmVudC4NCgkJRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+dHJpZ2dlckV2ZW50KCdvbkNvbnRlbnRDbGVhbkNhY2hlJywgJG9wdGlvbnMpOw0KCX0=', '[[[Component]]] Privacy Tabs', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"9\"},\"property_selection1\":{\"property\":\"7\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Privacy Tabs J5', '', 1, '', '', 1, '2024-03-10 15:55:21', '2024-08-11 11:35:22', 9, '', 2),
-(45, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set dynamic gets class headers.', '{\"fields0\":{\"file\":\"dynamic_get\",\"fields_name\":\"params.dynamic_get_headers\",\"fieldset\":\"dynamic_get_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2855\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2859\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2963\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2981\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2980\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2962\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2890\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2887\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2993\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2854\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2860\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2961\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2856\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2858\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2960\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2982\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2979\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2959\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2889\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2888\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2994\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2853\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2857\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2958\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"2866\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"2862\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"2971\",\"custom_value\":\"\"},\"fields27\":{\"field\":\"2990\",\"custom_value\":\"\"},\"fields28\":{\"field\":\"2991\",\"custom_value\":\"\"},\"fields29\":{\"field\":\"2957\",\"custom_value\":\"\"},\"fields30\":{\"field\":\"2893\",\"custom_value\":\"\"},\"fields31\":{\"field\":\"2892\",\"custom_value\":\"\"},\"fields32\":{\"field\":\"2998\",\"custom_value\":\"\"},\"fields33\":{\"field\":\"2867\",\"custom_value\":\"\"},\"fields34\":{\"field\":\"2861\",\"custom_value\":\"\"},\"fields35\":{\"field\":\"2956\",\"custom_value\":\"\"},\"fields36\":{\"field\":\"2865\",\"custom_value\":\"\"},\"fields37\":{\"field\":\"2863\",\"custom_value\":\"\"},\"fields38\":{\"field\":\"2955\",\"custom_value\":\"\"},\"fields39\":{\"field\":\"2989\",\"custom_value\":\"\"},\"fields40\":{\"field\":\"2992\",\"custom_value\":\"\"},\"fields41\":{\"field\":\"2954\",\"custom_value\":\"\"},\"fields42\":{\"field\":\"2894\",\"custom_value\":\"\"},\"fields43\":{\"field\":\"2891\",\"custom_value\":\"\"},\"fields44\":{\"field\":\"2997\",\"custom_value\":\"\"},\"fields45\":{\"field\":\"2868\",\"custom_value\":\"\"},\"fields46\":{\"field\":\"2864\",\"custom_value\":\"\"},\"fields47\":{\"field\":\"2953\",\"custom_value\":\"\"},\"fields48\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields49\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields50\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', '118e8615-4587-4055-818e-e9d4cf055aec', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7', 3, '{}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStkeW5hbWljX2dldF0=', '[[[Component]]] Dynamic Get Headers Tabs', '', '', '', '', '', '', '', '4.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Dynamic Get Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:55:24', '2024-08-11 11:18:41', 6, '', 2),
-(46, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Add Access Token to easy update [[[Component]]]', '{}', '5236660d-5dee-492b-925c-15b96cb6ea44', 'dXNlIEpvb21sYVxDTVNcVXJpXFVyaTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xDb21wb25lbnRcQ29tcG9uZW50SGVscGVyOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3VyLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuDQoJICoNCgkgKiBGb3IgbW9kaWZpY2F0aW9uIG9mIFVSTCBhbmQgaGVhZGVycyBiZWZvcmUgcGFja2FnZSBkb3dubG9hZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkKCYkdXJsLCAmJGhlYWRlcnMpDQoJew0KCQkvLyBzZXQgdGhlIFVSSSBvYmplY3QNCgkJJHVyaSA9IFVyaTo6Z2V0SW5zdGFuY2UoJHVybCk7DQoJCSRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkdXJpLT5nZXRQYXRoKCkpOw0KDQoJCS8vIGNoZWNrIHRoYXQgdGhpcyBpcyBvdXIgQVBJDQoJCWlmICgkdXJpLT5nZXRIb3N0KCkgPT0gJ1tbW2dpdGVhX3VybF1dXScgJiYgaW5fYXJyYXkoJ1tbW2dpdGVhX3BhY2thZ2VfbmFtZV1dXScsICRwYXJ0cykpDQoJCXsNCgkJCS8vIGdldCB0aGUgdG9rZW4gaWYgc2V0DQoJCQkkdG9rZW4gPSBDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2dpdGVhX3Rva2VuJywgZmFsc2UpOw0KCQkJLy8gb25seSBhZGQgaWYgdG9rZW4gaXMgc2V0DQoJCQlpZiAoJHRva2VuKQ0KCQkJew0KCQkJCS8vIGFkZCB0aGUgdG9rZW4NCgkJCQkkdXJpLT5zZXRWYXIoJ2FjY2Vzc190b2tlbicsICR0b2tlbik7DQoJCQkJLy8gdXBkYXRlIHRoZSBVUkwNCgkJCQkkdXJsID0gJHVyaS0+dG9TdHJpbmcoKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIHJldHVybiBVUkwNCgkJCQkkcmV0dXJuID0gdXJsZW5jb2RlKGJhc2U2NF9lbmNvZGUoKHN0cmluZykgVXJpOjpnZXRJbnN0YW5jZSgpKSk7DQoJCQkJLy8gc2V0IHRoZSB1cmxzDQoJCQkJJGdldF9hY2Nlc3NfdG9rZW5fdXJsID0gJyJodHRwczovL1tbW2dpdGVhX3VybF1dXS91c2VyL3NldHRpbmdzL2FwcGxpY2F0aW9ucyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSInIC4gVGV4dDo6XygnR2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciJyAuIFVyaTo6cm9vdCgpIC4gJ2FkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fY29uZmlnJnZpZXc9Y29tcG9uZW50JmNvbXBvbmVudD1jb21fW1tbY29tcG9uZW50XV1dJnBhdGg9JnJldHVybj0nIC4gJHJldHVybiAuICciIHRpdGxlPSInIC4gVGV4dDo6XygnU2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCS8vIGxvYWQgdGhlIG1lc3NhZ2UNCgkJCQkkdGhpcy0+Z2V0QXBwbGljYXRpb24oKS0+ZW5xdWV1ZU1lc3NhZ2UoDQoJCQkJCVRleHQ6OnNwcmludGYoIklmIHRoZXJlIHdhcyBhIGRvd25sb2FkL3VwZGF0ZSBlcnJvciwgaXQncyBwcm9iYWJseSBiZWNhdXNlIHRoZSA8YSBocmVmPSVzID5BUEkgQWNjZXNzIFRva2VuPC9hPiBmb3IgdXBkYXRlcyBvZiBbW1tjb21wb25lbnRdXV0gaGFzIG5vdCBiZWVuIHNldCwgeW91IGNhbiBzZXQgdGhpcyBhY2Nlc3MgdG9rZW4gaW4gdGhlIDxhIGhyZWY9JXMgPmdsb2JhbCBvcHRpb25zIHRhYjwvYT4uIiwNCgkJCQkJCSRnZXRfYWNjZXNzX3Rva2VuX3VybCwNCgkJCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybA0KCQkJCQkpLCAnbm90aWNlJyk7DQoJCQl9DQoJCX0NCgl9', 'componentbuilder', '', '', '', 'Ly8=', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"39\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev) J5', '', 1, '', '', 1, '2024-03-10 17:27:35', '2024-08-11 11:18:28', 7, '', 9);
+(46, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Add Access Token to easy update [[[Component]]]', '{}', '5236660d-5dee-492b-925c-15b96cb6ea44', 'dXNlIEpvb21sYVxDTVNcVXJpXFVyaTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xDb21wb25lbnRcQ29tcG9uZW50SGVscGVyOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3VyLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuDQoJICoNCgkgKiBGb3IgbW9kaWZpY2F0aW9uIG9mIFVSTCBhbmQgaGVhZGVycyBiZWZvcmUgcGFja2FnZSBkb3dubG9hZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkKCYkdXJsLCAmJGhlYWRlcnMpDQoJew0KCQkvLyBzZXQgdGhlIFVSSSBvYmplY3QNCgkJJHVyaSA9IFVyaTo6Z2V0SW5zdGFuY2UoJHVybCk7DQoJCSRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkdXJpLT5nZXRQYXRoKCkpOw0KDQoJCS8vIGNoZWNrIHRoYXQgdGhpcyBpcyBvdXIgQVBJDQoJCWlmICgkdXJpLT5nZXRIb3N0KCkgPT0gJ1tbW2dpdGVhX3VybF1dXScgJiYgaW5fYXJyYXkoJ1tbW2dpdGVhX3BhY2thZ2VfbmFtZV1dXScsICRwYXJ0cykpDQoJCXsNCgkJCS8vIGdldCB0aGUgdG9rZW4gaWYgc2V0DQoJCQkkdG9rZW4gPSBDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2dpdGVhX3Rva2VuJywgZmFsc2UpOw0KCQkJLy8gb25seSBhZGQgaWYgdG9rZW4gaXMgc2V0DQoJCQlpZiAoJHRva2VuKQ0KCQkJew0KCQkJCS8vIGFkZCB0aGUgdG9rZW4NCgkJCQkkdXJpLT5zZXRWYXIoJ2FjY2Vzc190b2tlbicsICR0b2tlbik7DQoJCQkJLy8gdXBkYXRlIHRoZSBVUkwNCgkJCQkkdXJsID0gJHVyaS0+dG9TdHJpbmcoKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIHJldHVybiBVUkwNCgkJCQkkcmV0dXJuID0gdXJsZW5jb2RlKGJhc2U2NF9lbmNvZGUoKHN0cmluZykgVXJpOjpnZXRJbnN0YW5jZSgpKSk7DQoJCQkJLy8gc2V0IHRoZSB1cmxzDQoJCQkJJGdldF9hY2Nlc3NfdG9rZW5fdXJsID0gJyJodHRwczovL1tbW2dpdGVhX3VybF1dXS91c2VyL3NldHRpbmdzL2FwcGxpY2F0aW9ucyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSInIC4gVGV4dDo6XygnR2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciJyAuIFVyaTo6cm9vdCgpIC4gJ2FkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fY29uZmlnJnZpZXc9Y29tcG9uZW50JmNvbXBvbmVudD1jb21fW1tbY29tcG9uZW50XV1dJnBhdGg9JnJldHVybj0nIC4gJHJldHVybiAuICciIHRpdGxlPSInIC4gVGV4dDo6XygnU2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCS8vIGxvYWQgdGhlIG1lc3NhZ2UNCgkJCQkkdGhpcy0+Z2V0QXBwbGljYXRpb24oKS0+ZW5xdWV1ZU1lc3NhZ2UoDQoJCQkJCVRleHQ6OnNwcmludGYoIklmIHRoZXJlIHdhcyBhIGRvd25sb2FkL3VwZGF0ZSBlcnJvciwgaXQncyBwcm9iYWJseSBiZWNhdXNlIHRoZSA8YSBocmVmPSVzID5BUEkgQWNjZXNzIFRva2VuPC9hPiBmb3IgdXBkYXRlcyBvZiBbW1tjb21wb25lbnRdXV0gaGFzIG5vdCBiZWVuIHNldCwgeW91IGNhbiBzZXQgdGhpcyBhY2Nlc3MgdG9rZW4gaW4gdGhlIDxhIGhyZWY9JXMgPmdsb2JhbCBvcHRpb25zIHRhYjwvYT4uIiwNCgkJCQkJCSRnZXRfYWNjZXNzX3Rva2VuX3VybCwNCgkJCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybA0KCQkJCQkpLCAnbm90aWNlJyk7DQoJCQl9DQoJCX0NCgl9', 'componentbuilder', '', '', '', 'Ly8=', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"39\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev) J5', '', 1, '', '', 1, '2024-03-10 17:27:35', '2024-09-16 14:57:33', 8, '', 9),
+(66, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 4, 'The plugin to fully integrate componentbuilder with the privacy suite of Joomla.', '{}', '8aa96d76-94e3-47d1-8dd8-f430b72ed0f7', 'dXNlIEpvb21sYVxVdGlsaXRpZXNcQXJyYXlIZWxwZXI7DQp1c2UgSm9vbWxhXENvbXBvbmVudFxQcml2YWN5XEFkbWluaXN0cmF0b3JcUGx1Z2luXFByaXZhY3lQbHVnaW47DQp1c2UgSm9vbWxhXERhdGFiYXNlXERhdGFiYXNlQXdhcmVUcmFpdDs=', 10, '{\"method_selection0\":{\"method\":\"51\"},\"method_selection1\":{\"method\":\"52\"},\"method_selection2\":{\"method\":\"53\"}}', 'CXVzZSBEYXRhYmFzZUF3YXJlVHJhaXQ7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHJlbW92ZSBpbmZvcm1hdGlvbiByZXF1ZXN0IGNhbiBiZSBwcm9jZXNzZWQNCgkgKg0KCSAqIEBwYXJhbSAgIEpvb21sYV9fX2FmYmI4OTdmX2Y1YjhfNDY1ZF85MjEzX2RhZTVjY2YzZGYzZF9fX1Bvd2VyICAkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZA0KCSAqIEBwYXJhbSAgIEpvb21sYV9fX2VmZmRhZjZkXzIyNzVfNDI1ZF85ZjUyX2Q0OTUyZTU2NGQzNF9fX1Bvd2VyICAgICAgICAgICAgICAgICR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBKb29tbGFfX181YzU5OWVjZl84ZjU4XzQ0YjRfYmJhZl9hNDdlYjVkMzAyZTVfX19Qb3dlcg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUHJpdmFjeUNhblJlbW92ZURhdGEoSm9vbWxhX19fYWZiYjg5N2ZfZjViOF80NjVkXzkyMTNfZGFlNWNjZjNkZjNkX19fUG93ZXIgJHJlcXVlc3QsIEpvb21sYV9fX2VmZmRhZjZkXzIyNzVfNDI1ZF85ZjUyX2Q0OTUyZTU2NGQzNF9fX1Bvd2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRzdGF0dXMgPSBuZXcgSm9vbWxhX19fNWM1OTllY2ZfOGY1OF80NGI0X2JiYWZfYTQ3ZWI1ZDMwMmU1X19fUG93ZXIoKTsNCg0KCQkvLyBUaGlzIHBsdWdpbiBvbmx5IHByb2Nlc3NlcyBkYXRhIGZvciByZWdpc3RlcmVkIHVzZXIgYWNjb3VudHMNCgkJaWYgKCEkdXNlcikNCgkJew0KCQkJcmV0dXJuICRzdGF0dXM7DQoJCX0NCg0KCQkvLyBjaGVjayBpZiB0aGUgaGVscGVyIG1ldGhvZCBpcyBzZXQgaW4gdGhlIGNvbXBvbmVudA0KCQlpZiAobWV0aG9kX2V4aXN0cyhKb29tbGFfX19hZWJmZWI5Zl9mOGEzXzQyYmVfYTIxZF81ZGI1NmFlMzBjMWNfX19Qb3dlcjo6Y2xhc3MsICdvblByaXZhY3lDYW5SZW1vdmVEYXRhJykpDQoJCXsNCgkJCUpvb21sYV9fX2FlYmZlYjlmX2Y4YTNfNDJiZV9hMjFkXzVkYjU2YWUzMGMxY19fX1Bvd2VyOjpvblByaXZhY3lDYW5SZW1vdmVEYXRhKCR0aGlzLCAkc3RhdHVzLCAkcmVxdWVzdCwgJHVzZXIpOw0KCQl9DQoNCgkJcmV0dXJuICRzdGF0dXM7DQoJfQ0KDQoJLyoqDQoJICogUHJvY2Vzc2VzIGFuIGV4cG9ydCByZXF1ZXN0IGZvciBKb29tbGEgY29yZSB1c2VyIGRhdGENCgkgKg0KCSAqIEBwYXJhbSAgIEpvb21sYV9fX2FmYmI4OTdmX2Y1YjhfNDY1ZF85MjEzX2RhZTVjY2YzZGYzZF9fX1Bvd2VyICAkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZA0KCSAqIEBwYXJhbSAgIEpvb21sYV9fX2VmZmRhZjZkXzIyNzVfNDI1ZF85ZjUyX2Q0OTUyZTU2NGQzNF9fX1Bvd2VyICAgICAgICAgICAgICAgICR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBKb29tbGFfX19mNWUwNzUzY19jOGQ5XzQ5NjVfYTYwNl85YzQ1YjM3YTY4NTdfX19Qb3dlcltdDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Qcml2YWN5RXhwb3J0UmVxdWVzdChKb29tbGFfX19hZmJiODk3Zl9mNWI4XzQ2NWRfOTIxM19kYWU1Y2NmM2RmM2RfX19Qb3dlciAkcmVxdWVzdCwgSm9vbWxhX19fZWZmZGFmNmRfMjI3NV80MjVkXzlmNTJfZDQ5NTJlNTY0ZDM0X19fUG93ZXIgJHVzZXIgPSBudWxsKQ0KCXsNCgkJJGRvbWFpbnMgPSBhcnJheSgpOw0KDQoJCS8vIFRoaXMgcGx1Z2luIG9ubHkgcHJvY2Vzc2VzIGRhdGEgZm9yIHJlZ2lzdGVyZWQgdXNlciBhY2NvdW50cw0KCQlpZiAoISR1c2VyKQ0KCQl7DQoJCQlyZXR1cm4gJGRvbWFpbnM7DQoJCX0NCg0KCQkvLyBjaGVjayBpZiB0aGUgaGVscGVyIG1ldGhvZCBpcyBzZXQgaW4gdGhlIGNvbXBvbmVudA0KCQlpZiAobWV0aG9kX2V4aXN0cyhKb29tbGFfX19hZWJmZWI5Zl9mOGEzXzQyYmVfYTIxZF81ZGI1NmFlMzBjMWNfX19Qb3dlcjo6Y2xhc3MsICdvblByaXZhY3lFeHBvcnRSZXF1ZXN0JykpDQoJCXsNCgkJCUpvb21sYV9fX2FlYmZlYjlmX2Y4YTNfNDJiZV9hMjFkXzVkYjU2YWUzMGMxY19fX1Bvd2VyOjpvblByaXZhY3lFeHBvcnRSZXF1ZXN0KCR0aGlzLCAkZG9tYWlucywgJHJlcXVlc3QsICR1c2VyKTsNCgkJfQ0KDQoJCXJldHVybiAkZG9tYWluczsNCgl9DQoNCgkvKioNCgkgKiBSZW1vdmVzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHJlbW92ZSBpbmZvcm1hdGlvbiByZXF1ZXN0DQoJICoNCgkgKiBAcGFyYW0gICBKb29tbGFfX19hZmJiODk3Zl9mNWI4XzQ2NWRfOTIxM19kYWU1Y2NmM2RmM2RfX19Qb3dlciAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKb29tbGFfX19lZmZkYWY2ZF8yMjc1XzQyNWRfOWY1Ml9kNDk1MmU1NjRkMzRfX19Qb3dlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUHJpdmFjeVJlbW92ZURhdGEoSm9vbWxhX19fYWZiYjg5N2ZfZjViOF80NjVkXzkyMTNfZGFlNWNjZjNkZjNkX19fUG93ZXIgJHJlcXVlc3QsIEpvb21sYV9fX2VmZmRhZjZkXzIyNzVfNDI1ZF85ZjUyX2Q0OTUyZTU2NGQzNF9fX1Bvd2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCS8vIFRoaXMgcGx1Z2luIG9ubHkgcHJvY2Vzc2VzIGRhdGEgZm9yIHJlZ2lzdGVyZWQgdXNlciBhY2NvdW50cw0KCQlpZiAoISR1c2VyKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkvLyBjaGVjayBpZiB0aGUgaGVscGVyIG1ldGhvZCBpcyBzZXQgaW4gdGhlIGNvbXBvbmVudA0KCQlpZiAobWV0aG9kX2V4aXN0cyhKb29tbGFfX19hZWJmZWI5Zl9mOGEzXzQyYmVfYTIxZF81ZGI1NmFlMzBjMWNfX19Qb3dlcjo6Y2xhc3MsICdvblByaXZhY3lSZW1vdmVEYXRhJykpDQoJCXsNCgkJCUpvb21sYV9fX2FlYmZlYjlmX2Y4YTNfNDJiZV9hMjFkXzVkYjU2YWUzMGMxY19fX1Bvd2VyOjpvblByaXZhY3lSZW1vdmVEYXRhKCR0aGlzLCAkcmVxdWVzdCwgJHVzZXIpOw0KCQl9DQoJfQ==', '[[[Component]]]', 'Ly8gUEhQIE1ldGhvZCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFBvc3RmbGlnaHQgKGluc3RhbGwp', 'Ly8gUEhQIFBvc3RmbGlnaHQgKHVwZGF0ZSk=', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQlpZiAoIWlzX2RpcihKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0nKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', 'Ly8gUEhQIFByZWZsaWdodCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFByZWZsaWdodCAodXBkYXRlKQ==', '', '2.0.0', '{\"property_selection0\":{\"property\":\"31\"},\"property_selection1\":{\"property\":\"32\"},\"property_selection2\":{\"property\":\"33\"}}', 'IyAjIyNQTFVHSU5fTkFNRSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw==', '', '', '', 'Global Privacy J5', '', 1, 'https://www.vdm.io/updates/componentbuilder_global_privacy.xml', '', 1, '2024-09-16 14:55:27', '2024-09-16 15:50:11', 2, '', 1);
--
-- 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, '', '', '', '', '', '', '', '', '', '{\"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\"},\"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\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2016-10-18 11:44:46', '2024-07-25 18:06:21', 22, '', 110, 'c1053952-8a84-4398-aef1-41726f7c0043');
+INSERT INTO `#__componentbuilder_admin_view` (`id`, `add_category_submenu`, `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_after_cancel`, `add_php_after_delete`, `add_php_after_publish`, `add_php_ajax`, `add_php_allowadd`, `add_php_allowedit`, `add_php_batchcopy`, `add_php_batchmove`, `add_php_before_cancel`, `add_php_before_delete`, `add_php_before_publish`, `add_php_before_save`, `add_php_document`, `add_php_getform`, `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`, `ajax_input`, `alias_builder`, `alias_builder_type`, `css_view`, `css_views`, `custom_button`, `description`, `guid`, `html_import_view`, `icon`, `icon_add`, `icon_category`, `javascript_view_file`, `javascript_view_footer`, `javascript_views_file`, `javascript_views_footer`, `mysql_table_charset`, `mysql_table_collate`, `mysql_table_engine`, `mysql_table_row_format`, `name_list`, `name_single`, `php_after_cancel`, `php_after_delete`, `php_after_publish`, `php_ajaxmethod`, `php_allowadd`, `php_allowedit`, `php_batchcopy`, `php_batchmove`, `php_before_cancel`, `php_before_delete`, `php_before_publish`, `php_before_save`, `php_controller`, `php_controller_list`, `php_document`, `php_getform`, `php_getitem`, `php_getitems`, `php_getitems_after_all`, `php_getlistquery`, `php_import`, `php_import_display`, `php_import_ext`, `php_import_headers`, `php_import_save`, `php_import_setdata`, `php_model`, `php_model_list`, `php_postsavehook`, `php_save`, `short_description`, `source`, `sql`, `system_name`, `type`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES
+(109, 1, 1, '', '', '', 1, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 1, 1, 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\":\"Media\"},\"addtabs2\":{\"name\":\"Participants\"},\"addtabs3\":{\"name\":\"More\"}}', '{}', '', 1, 'LmNvbnRyb2wtd3JhcHBlci1tb3JlIC5jb250cm9sLWxhYmVsIHsNCiAgICBkaXNwbGF5OiBub25lOyAvLyBqdXN0IGZvciBmdW4gOikNCn0=', '', '{}', '', 'c1053952-8a84-4398-aef1-41726f7c0043', '', 'images/WoodMannequin-icon.png', 'images/WoodMannequin-icon-plus.png', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', '', 'Looks', 'Look', '', '', '', '', '', '', '', '', '', '', '', 'IFtDVVNUT01DT0RFPXNhdmVHVUlEUG93ZXJd', '', '', 'W0NVU1RPTUNPREU9dmRtVXBsb2FkZXJDb25maWcrdmRtLXVpa2l0LXVwbG9hZGVyLGZpbGVfdmRtX3VwbG9hZGVyLGdldEZpbGVUeXBlRGV0YWlscyx1cGxvYWRGaWxlLGRpc3BsYXlGaWxlcyxkZWxldGVGaWxlXQ0KW0NVU1RPTUNPREU9YWRkVWlraXRUaHJlZVRvQWRtaW5WaWV3c10=', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'The demo view', '', '', 'Look', 1, '{\"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\":\"23\"},\"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\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2016-10-18 11:44:46', '2024-09-17 23:43:34', 39, '', 1, 110),
+(283, 1, '', '', '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 1, '', '', '', '', '', '', 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.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{\"ajax_input0\":{\"value_name\":\"guid\",\"task_name\":\"getFileTypeDetails\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"getFileTypeDetails\",\"user_check\":\"1\"},\"ajax_input1\":{\"value_name\":\"target\",\"task_name\":\"getFileTypeDetails\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"getFileTypeDetails\",\"user_check\":\"1\"},\"ajax_input2\":{\"value_name\":\"guid\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input3\":{\"value_name\":\"entity\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input4\":{\"value_name\":\"target\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input5\":{\"value_name\":\"guid\",\"task_name\":\"deleteFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"deleteFile\",\"user_check\":\"1\"},\"ajax_input6\":{\"value_name\":\"entity\",\"task_name\":\"displayFiles\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"displayFiles\",\"user_check\":\"1\"},\"ajax_input7\":{\"value_name\":\"target\",\"task_name\":\"displayFiles\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"displayFiles\",\"user_check\":\"1\"}}', '', '', '', '', '{}', '', '19a973ea-cdfa-4c79-bbbd-1b8a37286b27', '', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_general_ci', 'InnoDB', 'DYNAMIC', 'File Types', 'File Type', '', '', '', 'CS8qKg0KCSAqIEdldCB0aGUgZmlsZSB0eXBlIGRldGFpbHMsIGlmIGl0IGV4aXN0cy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgICAgVGhlIGZpbGUgdHlwZSBndWlkDQoJICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0ICBUaGUgdGFyZ2V0IGVudGl0eSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5DQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEZpbGVUeXBlRGV0YWlscyhzdHJpbmcgJGd1aWQsIHN0cmluZyAkdGFyZ2V0KTogYXJyYXkNCgl7DQoJCWlmIChTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjp2YWxpZCgkZ3VpZCkpDQoJCXsNCgkJCXRyeQ0KCQkJew0KCQkJCSR0YXJnZXQgPSBiYXNlNjRfZGVjb2RlKCR0YXJnZXQpOw0KCQkJCSR0eXBlID0gU3VwZXJfX184ODRlY2E3OF8yODFmXzRlYWJfYjk2Ml9kOTdlMzU1YWYxNmRfX19Qb3dlcjo6XygnRmlsZS5UeXBlJyktPmdldCgkZ3VpZCwgJHRhcmdldCk7DQoJCQl9DQoJCQljYXRjaCAoXEV4Y2VwdGlvbiAkZXJyb3IpDQoJCQl7DQoJCQkJcmV0dXJuIFsnZXJyb3InID0+ICRlcnJvci0+Z2V0TWVzc2FnZSgpXTsNCgkJCX0NCg0KCQkJaWYgKCR0eXBlICE9PSBudWxsKQ0KCQkJew0KCQkJCXJldHVybiBbJ2RhdGEnID0+ICR0eXBlXTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBbJ2Vycm9yJyA9PiBUZXh0OjpfKCdGaWxlIHR5cGUgZGV0YWlscyBjb3VsZCBub3QgYmUgZm91bmQnKV07DQoJfQ0KDQoJLyoqDQoJICogVXBsb2FkIGEgZmlsZSwgb2YgYSBnaXZlbiBmaWxlIHR5cGUgYW5kIGxpbmsgaXQgdG8gYW4gZW50aXR5Lg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZ3VpZCAgICBUaGUgZmlsZSB0eXBlIGd1aWQNCgkgKiBAcGFyYW0gc3RyaW5nICRlbnRpdHkgIFRoZSBlbnRpdHkgZ3VpZA0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldCAgVGhlIHRhcmdldCBlbnRpdHkgbmFtZQ0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB1cGxvYWRGaWxlKHN0cmluZyAkZ3VpZCwgc3RyaW5nICRlbnRpdHksIHN0cmluZyAkdGFyZ2V0KTogYXJyYXkNCgl7DQoJCWlmIChTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjp2YWxpZCgkZ3VpZCkNCgkJCSYmIFN1cGVyX19fOWM1MTNiYWZfYjI3OV80M2ZkX2FlMjlfYTU4NWM4Y2JjNGYwX19fUG93ZXI6OnZhbGlkKCRlbnRpdHkpKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQkkdGFyZ2V0ID0gYmFzZTY0X2RlY29kZSgkdGFyZ2V0KTsNCgkJCQlTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLk1hbmFnZXInKS0+dXBsb2FkKCRndWlkLCAkZW50aXR5LCAkdGFyZ2V0KTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlcnJvcikNCgkJCXsNCgkJCQlyZXR1cm4gWydlcnJvcicgPT4gJGVycm9yLT5nZXRNZXNzYWdlKCldOw0KCQkJfQ0KDQoJCQlyZXR1cm4gWydzdWNjZXNzJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkJyldOw0KCQl9DQoNCgkJcmV0dXJuIFsnZXJyb3InID0+IFRleHQ6Ol8oJ1RoZSBmaWxlIGZhaWxlZCB0byB1cGxvYWQnKV07DQoJfQ0KDQoJLyoqDQoJICogRGVsZXRlIGEgZmlsZSBvZiBhIGdpdmVuIGVudGl0eS4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgICAgVGhlIGZpbGUgZ3VpZA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVGaWxlKHN0cmluZyAkZ3VpZCk6IGFycmF5DQoJew0KCQlpZiAoU3VwZXJfX185YzUxM2JhZl9iMjc5XzQzZmRfYWUyOV9hNTg1YzhjYmM0ZjBfX19Qb3dlcjo6dmFsaWQoJGd1aWQpKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQlTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLk1hbmFnZXInKS0+ZGVsZXRlKCRndWlkKTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlcnJvcikNCgkJCXsNCgkJCQlyZXR1cm4gWydlcnJvcicgPT4gJGVycm9yLT5nZXRNZXNzYWdlKCldOw0KCQkJfQ0KDQoJCQlyZXR1cm4gWydzdWNjZXNzJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQnKV07DQoJCX0NCg0KCQlyZXR1cm4gWydlcnJvcicgPT4gVGV4dDo6XygnVGhlIGZpbGUgY291bGQgbm90IGJlIGRlbGV0ZWQnKV07DQoJfQ0KDQoJLyoqDQoJICogTG9hZCB0aGUgZGlzcGxheSBvZiB0aGUgZmlsZXMgbGlua2VkIHRoaXMgZW50aXR5Lg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZW50aXR5ICBUaGUgZW50aXR5IGd1aWQNCgkgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgIFRoZSB0YXJnZXQgZW50aXR5IG5hbWUNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZGlzcGxheUZpbGVzKHN0cmluZyAkZW50aXR5LCBzdHJpbmcgJHRhcmdldCk6IGFycmF5DQoJew0KCQlpZiAoU3VwZXJfX185YzUxM2JhZl9iMjc5XzQzZmRfYWUyOV9hNTg1YzhjYmM0ZjBfX19Qb3dlcjo6dmFsaWQoJGVudGl0eSkpDQoJCXsNCgkJCSRkaXNwbGF5ID0gbnVsbDsNCg0KCQkJdHJ5DQoJCQl7DQoJCQkJJHRhcmdldCA9IGJhc2U2NF9kZWNvZGUoJHRhcmdldCk7DQoJCQkJJGRhdGEgPSBTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLkRpc3BsYXknKS0+Z2V0KCRlbnRpdHksICR0YXJnZXQpOw0KDQoJCQkJaWYgKCRkYXRhICE9PSBudWxsKQ0KCQkJCXsNCgkJCQkJJGRpc3BsYXlEYXRhID0gIFsnZGF0YScgPT4gJGRhdGEsICdlbnRpdHknID0+ICRlbnRpdHksICd0YXJnZXQnID0+ICR0YXJnZXRdOw0KCQkJCQkkZGlzcGxheSA9IEpvb21sYV9fXzdhYjgyMjcyXzBiM2RfNGJiMV9hZjM1X2U2M2EwOTZjZmUwYl9fX1Bvd2VyOjpyZW5kZXIoJ2RlbW9sb29rZmlsZWRpc3BsYXknLCAkZGlzcGxheURhdGEpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gWydkYXRhJyA9PiAnPGI+JyAuIFRleHQ6OnNwcmludGYoJ05vIGZpbGVzIGxpbmtlZCB0byAlcy4nLCAkdGFyZ2V0KSAuICc8L2I+J107DQoJCQkJfQ0KCQkJfQ0KCQkJY2F0Y2ggKFxFeGNlcHRpb24gJGVycm9yKQ0KCQkJew0KCQkJCXJldHVybiBbJ2Vycm9yJyA9PiAkZXJyb3ItPmdldE1lc3NhZ2UoKV07DQoJCQl9DQoNCgkJCWlmICghZW1wdHkoJGRpc3BsYXkpKQ0KCQkJew0KCQkJCXJldHVybiBbJ2RhdGEnID0+ICRkaXNwbGF5XTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBbJ2Vycm9yJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSBkaXNwbGF5IGNvdWxkIG5vdCBiZSBsb2FkZWQnKV07DQoJfQ==', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', '', '', 'Ly8gSm9vbWxhX19fN2FiODIyNzJfMGIzZF80YmIxX2FmMzVfZTYzYTA5NmNmZTBiX19fUG93ZXI6OnJlbmRlcignZGVtb2xvb2tmaWxlZGlzcGxheScsICRkaXNwbGF5RGF0YSk7', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'File Type', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX2RlbW9fZmlsZV90eXBlYA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX2RlbW9fZmlsZV90eXBlYCAoYGlkYCwgYGNyb3BgLCBgZG9jdW1lbnRfZm9ybWF0c2AsIGBkb3dubG9hZF9hY2Nlc3NgLCBgZmlsZV9mb3JtYXRzYCwgYGd1aWRgLCBgaW1hZ2VfZm9ybWF0c2AsIGBtZWRpYV9mb3JtYXRzYCwgYG5hbWVgLCBgcGF0aGAsIGB0YXJnZXRgLCBgdHlwZWAsIGBwYXJhbXNgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgLCBgbW9kaWZpZWRgLCBgdmVyc2lvbmAsIGBoaXRzYCwgYGFjY2Vzc2AsIGBvcmRlcmluZ2AsIGBtZXRha2V5YCwgYG1ldGFkZXNjYCwgYG1ldGFkYXRhYCkgVkFMVUVTDQooMSwgJycsICd7XCIwXCI6XCJwZGZcIn0nLCAxLCAnJywgJzYwODM0ZTAyLWJkMGItNDBhYS1iMGZlLWE0MGJiYTIyNTU2OCcsICcnLCAnJywgJ0RvY3VtZW50JywgJy9kb2N1bWVudHMnLCAne1wiMFwiOlwibG9va1wifScsIDIsICcnLCAxLCAnMjAxOS0wOS0wMyAyMjozOToyMScsICcyMDE5LTA5LTAzIDIyOjQ0OjIzJywgMywgJycsIDMsIDEsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nKTs=', 'File Types (demo-look)', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"3395\"},\"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\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-08 21:58:20', '2024-09-17 23:27:09', 34, '', 1, 245),
+(284, 1, '', '', '', '', 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.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', '', '', '', '{}', '', '595ba2c9-21fa-43a4-9af7-93c9cfb21b82', '', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_general_ci', 'InnoDB', 'DYNAMIC', 'Mores', 'More', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Add More', '', '', 'More', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"1011\"},\"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\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-07 22:09:41', '2024-09-07 02:42:47', 4, '', 1, 246),
+(285, 1, '', '', '', '', 1, '', '', '', '', '', 1, '', '', '', '', '', '', '', 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.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', '', '', '', '{}', 'Files', '224eb9c7-8b40-48cf-bf77-2afa291fd54a', '', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_general_ci', 'InnoDB', 'DYNAMIC', 'Files', 'File', '', 'CQlmb3JlYWNoICgkZmlsZVBhdGhzIGFzICRmaWxlUGF0aCkNCgkJew0KCQkJaWYgKGlzX2ZpbGUoJGZpbGVQYXRoKSAmJiBpc193cml0YWJsZSgkZmlsZVBhdGgpKQ0KCQkJew0KCQkJCUpvb21sYV9fXzU1ZTllOGYwXzNjNWVfNDgzYV9hMDYzXzdjNzU2NWIwMGVkN19fX1Bvd2VyOjpkZWxldGUoJGZpbGVQYXRoKTsgLy8gcmVtb3ZlIGZyb20gZmlsZSBzeXN0ZW0NCgkJCX0NCgkJfQ==', '', '', '', '', '', '', '', 'CQkkZmlsZVBhdGhzID0gU3VwZXJfX185ZDc2YjhkY18zODgzXzQ3NTVfYjExY18xMzFkMTljYThhNTNfX19Qb3dlcjo6XygnRGF0YS5JdGVtcycpLT50YWJsZSgnW1tbdmlld11dXScpLT52YWx1ZXMoJHBrcywgJ2lkJywgJ2ZpbGVfcGF0aCcpID8/IFtdOw==', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Files', '', '', 'Files', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"3404\"},\"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\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-07 22:38:14', '2024-09-15 23:41:35', 14, '', 1, 247),
+(286, 1, '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 1, '', 1, '', '', '', '', '', '', '', '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":1},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":1},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":1},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":1},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":1},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":1},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":1},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":1},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":1}}', '{}', '{}', '{}', '', '', '', '', '{}', '', '60b7b30d-9229-4ce2-b055-9efbb7ac4cea', '', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_general_ci', 'InnoDB', 'DYNAMIC', 'User Entity Maps', 'User Entity Map', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', '', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'User Entity Maps', '', '', 'User Entity Map', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"3404\"},\"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\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-07 22:49:46', '2024-09-16 23:34:45', 4, '', 1, 248);
--
-- 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+PGEgaHJlZj0iPD9waHAgZWNobyAgSm9vbWxhX19fOTIxNjdmMThfODU0M180MGU4XzkyYWZfMDUzZWY0YzIxMGQxX19fUG93ZXI6OmdldExvb2tpbmdSb3V0ZSgkaXRlbS0+c2x1Zyk7ID8+IiA+PD9waHAgZWNobyAkaXRlbS0+bmFtZTsgPz48L2E+PC90ZD4NCiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICR0aGlzLT5lc2NhcGUoJGl0ZW0tPmRlc2NyaXB0aW9uLCB0cnVlLCAxMjApOyA/Pjw/cGhwIGVjaG8gJGl0ZW0tPmVkaXRMaW5rOyA/PjwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgPC90Ym9keT4NCjwvdGFibGU+', 'The List of all published looks', 36, '', 36, 'Looks', 'Looks', '', '', '', '', '', '{\"site_view_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', '', '', 1, '2016-04-05 14:31:59', '2024-07-24 14:31:08', 11, '', 14, 'b2dce59e-e3b8-4467-bcb5-8f2df4bdfeb7'),
+(23, '', '', '', '', '', '', '', '', '', '{}', '', '', '', '{}', '', 'looks', '', '', '', 'PHRhYmxlIGNsYXNzPSJ1ay10YWJsZSB1ay10YWJsZS1ob3ZlciI+DQogICAgPGNhcHRpb24+PD9waHAgZWNobyBUZXh0OjpfKCdMaXN0IG9mIGFsbCBsb29rcycpOyA/PjwvY2FwdGlvbj4NCiAgICA8dGhlYWQ+DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIFRleHQ6Ol8oJ05hbWUnKTsgPz48L3RoPg0KICAgICAgICAgICAgPHRoPjw/cGhwIGVjaG8gVGV4dDo6XygnRGVzY3JpcHRpb24nKTsgPz48L3RoPg0KICAgICAgICA8L3RyPg0KICAgIDwvdGhlYWQ+DQogICAgPHRib2R5Pg0KICAgICAgICA8P3BocCBmb3JlYWNoICgkdGhpcy0+aXRlbXMgYXMgJGl0ZW0pOiA/Pg0KICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQ+PGEgaHJlZj0iPD9waHAgZWNobyAgSm9vbWxhX19fOTIxNjdmMThfODU0M180MGU4XzkyYWZfMDUzZWY0YzIxMGQxX19fUG93ZXI6OmdldExvb2tpbmdSb3V0ZSgkaXRlbS0+c2x1Zyk7ID8+IiA+PD9waHAgZWNobyAkaXRlbS0+bmFtZTsgPz48L2E+PC90ZD4NCiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICR0aGlzLT5lc2NhcGUoJGl0ZW0tPmRlc2NyaXB0aW9uLCB0cnVlLCAxMjApOyA/Pjw/cGhwIGVjaG8gJGl0ZW0tPmVkaXRMaW5rOyA/PjwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgPC90Ym9keT4NCjwvdGFibGU+', 'The List of all published looks', 36, '', 36, 'Looks', 'Looks', '', '', '', '', '', '{\"site_view_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', '', '', 1, '2016-04-05 14:31:59', '2024-09-16 00:18:59', 12, '', 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+YWRkKTogPz4NCiAgICAgICAgICAgIDxiciAvPg0KICAgICAgICAgICAgPCEtLSBUaGlzIGlzIGEgYnV0dG9uIHRvZ2dsaW5nIHRoZSBtb2RhbCAtLT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiIgdWstdG9nZ2xlPSJ0YXJnZXQ6ICNtb3JlLWRldGFpbHMtMDkwIj48P3BocCBlY2hvIFRleHQ6Ol8oJ01vcmUgRGV0YWlscycpOyA/PjwvYnV0dG9uPg0KICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICA8L2Rpdj4NCjwvYXJ0aWNsZT4NCjw/cGhwIGlmICgkdGhpcy0+aXRlbS0+YWRkKTogPz4NCjwhLS0gVGhpcyBpcyB0aGUgbW9kYWwgLS0+DQo8ZGl2IGlkPSJtb3JlLWRldGFpbHMtMDkwIiB1ay1tb2RhbD4NCiAgICA8ZGl2IGNsYXNzPSJ1ay1tb2RhbC1kaWFsb2cgdWstbW9kYWwtYm9keSI+DQogICAgICAgIDxidXR0b24gY2xhc3M9InVrLW1vZGFsLWNsb3NlLWRlZmF1bHQiIHR5cGU9ImJ1dHRvbiIgdWstY2xvc2U+PC9idXR0b24+DQogICAgICAgIDxkbCBjbGFzcz0idWstZGVzY3JpcHRpb24tbGlzdCB1ay1kZXNjcmlwdGlvbi1saXN0LWRpdmlkZXIiPg0KICAgICAgICA8P3BocCBpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPml0ZW0tPmRhdGVvZmJpcnRoKSk6ID8+DQogICAgICAgICAgICA8ZHQ+PD9waHAgZWNobyBUZXh0OjpfKCdCaXJ0aCBkYXknKTsgPz48L2R0PjxkZD48P3BocCBlY2hvIEpvb21sYV9fX2NmM2I5NWMxX2JhNTZfNDE5M184ZWI0XzkxNjQ1ODJiN2Y1NV9fX1Bvd2VyOjpmYW5jeURhdGUoJHRoaXMtPmVzY2FwZSgkdGhpcy0+aXRlbS0+ZGF0ZW9mYmlydGgpKTsgPz48L2RkPg0KICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgPD9waHAgaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5pdGVtLT5lbWFpbCkpOiA/Pg0KICAgICAgICAgICAgPGR0Pjw/cGhwIGVjaG8gVGV4dDo6XygnRW1haWwnKTsgPz48L2R0PjxkZD48P3BocCBlY2hvICR0aGlzLT5lc2NhcGUoJHRoaXMtPml0ZW0tPmVtYWlsKTsgPz48L2RkPg0KICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgPD9waHAgaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5pdGVtLT5tb2JpbGVfcGhvbmUpKTogPz4NCiAgICAgICAgICAgIDxkdD48P3BocCBlY2hvIFRleHQ6Ol8oJ01vYmlsZScpOyA/PjwvZHQ+PGRkPjw/cGhwIGVjaG8gJHRoaXMtPmVzY2FwZSgkdGhpcy0+aXRlbS0+bW9iaWxlX3Bob25lKTsgPz48L2RkPg0KICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgPD9waHAgaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5pdGVtLT53ZWJzaXRlKSk6ID8+DQogICAgICAgICAgICA8ZHQ+PD9waHAgZWNobyBUZXh0OjpfKCdXZWJzaXRlJyk7ID8+PC9kdD48ZGQ+PD9waHAgZWNobyAkdGhpcy0+ZXNjYXBlKCR0aGlzLT5pdGVtLT53ZWJzaXRlKTsgPz48L2RkPg0KICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgPC9kbD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KPD9waHAgZW5kaWY7ID8+', 'Looking at a look', 39, '', 39, 'Looking', 'Looking', '', 'CSAvKioNCgkgKiBJbmNyZW1lbnQgdGhlIGhpdCBjb3VudGVyIGZvciB0aGUgcHJlYWNoZXIuDQoJICoNCgkgKiBAcGFyYW0gICBpbnRlZ2VyICAkcGsgIFByaW1hcnkga2V5IG9mIHRoZSBwcmVhY2hlciB0byBpbmNyZW1lbnQuDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICBUcnVlIGlmIHN1Y2Nlc3NmdWw7DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGhpdCgkcGsgPSAwKQ0KCXsNCgkJaWYgKCRwaykNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkvLyBGaWVsZHMgdG8gdXBkYXRlLg0KCQkJJGZpZWxkcyA9IGFycmF5KA0KCQkJICAgICRkYi0+cXVvdGVOYW1lKCdoaXRzJykgLiAnID0gJy4kZGItPnF1b3RlTmFtZSgnaGl0cycpLicgKyAxJw0KCQkJKTsNCg0KCQkJLy8gQ29uZGl0aW9ucyBmb3Igd2hpY2ggcmVjb3JkcyBzaG91bGQgYmUgdXBkYXRlZC4NCgkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkgICAgJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuICRwaw0KCQkJKTsNCg0KCQkJJHF1ZXJ5LT51cGRhdGUoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9sb29rJykpLT5zZXQoJGZpZWxkcyktPndoZXJlKCRjb25kaXRpb25zKTsNCg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJcmV0dXJuICRkYi0+ZXhlY3V0ZSgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9', 'Ly8gYWRkIGEgaGl0IHRvIHRoZSBsb29rDQppZiAoJHRoaXMtPmhpdCgkdGhpcy0+aXRlbS0+aWQpKQ0Kew0KCSR0aGlzLT5pdGVtLT5oaXRzKys7DQp9', '', '', '{\"site_view_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', '', '', 1, '2016-10-20 15:11:29', '2024-07-24 14:52:19', 19, '', 14, '851ed44e-5431-4951-876f-4b62a4c56ad2');
--
@@ -2163,16 +2135,217 @@ INSERT INTO `#__componentbuilder_site_view` (`id`, `add_css_document`, `add_css`
--
INSERT INTO `#__componentbuilder_layout` (`id`, `add_php_view`, `alias`, `description`, `dynamic_get`, `layout`, `name`, `php_view`, `snippet`, `params`, `published`, `version`, `hits`, `ordering`, `libraries`) VALUES
-(97, '', 'trashhelper', 'Trash Helper Layout', '', 'PD9waHAgaWYgKCRkaXNwbGF5RGF0YS0+c3RhdGUtPmdldCgnZmlsdGVyLnB1Ymxpc2hlZCcpID09IC0yICYmICgkZGlzcGxheURhdGEtPmNhblN0YXRlICYmICRkaXNwbGF5RGF0YS0+Y2FuRGVsZXRlKSkgOiA/Pg0KCTxzY3JpcHQ+DQoJCS8vIGNoYW5nZSB0aGUgY2xhc3Mgb2YgdGhlIGRlbGV0ZSBidXR0b24NCgkJalF1ZXJ5KCIjdG9vbGJhci1kZWxldGUgYnV0dG9uIikudG9nZ2xlQ2xhc3MoImJ0bi1kYW5nZXIiKTsNCgkJLy8gZnVuY3Rpb24gdG8gZW1wdHkgdGhlIHRyYXNoDQoJCWZ1bmN0aW9uIGVtcHR5VHJhc2goKSB7DQoJCQlpZiAoZG9jdW1lbnQuYWRtaW5Gb3JtLmJveGNoZWNrZWQudmFsdWUgPT0gMCkgew0KCQkJCS8vIHNlbGVjdCBhbGwgdGhlIGl0ZW1zIHZpc2FibGUNCgkJCQlkb2N1bWVudC5hZG1pbkZvcm0uZWxlbWVudHNbJ2NoZWNrYWxsLXRvZ2dsZSddLmNoZWNrZWQ9MTsNCgkJCQlKb29tbGEuY2hlY2tBbGwoZG9jdW1lbnQuYWRtaW5Gb3JtLmVsZW1lbnRzWydjaGVja2FsbC10b2dnbGUnXSk7DQoJCQkJLy8gY2hlY2sgdG8gY29uZmlybSB0aGUgZGVsZXRpb24NCgkJCQlpZihjb25maXJtKCc8Pz0gVGV4dDo6XygiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZT8gQ29uZmlybWluZyB3aWxsIHBlcm1hbmVudGx5IGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbShzKSEiKSA/PicpKSB7DQoJCQkJCUpvb21sYS5zdWJtaXRidXR0b24oJzw/PSAkZGlzcGxheURhdGEtPmdldCgibmFtZSIpID8+LmRlbGV0ZScpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWRvY3VtZW50LmFkbWluRm9ybS5lbGVtZW50c1snY2hlY2thbGwtdG9nZ2xlJ10uY2hlY2tlZD0wOw0KCQkJCQlKb29tbGEuY2hlY2tBbGwoZG9jdW1lbnQuYWRtaW5Gb3JtLmVsZW1lbnRzWydjaGVja2FsbC10b2dnbGUnXSk7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkvLyBjb25maXJtIGRlbGV0aW9uIG9mIHRob3NlIHNlbGVjdGVkDQoJCQkJaWYgKGNvbmZpcm0oJzw/PSBUZXh0OjpfKCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlPyBDb25maXJtaW5nIHdpbGwgcGVybWFuZW50bHkgZGVsZXRlIHRoZSBzZWxlY3RlZCBpdGVtKHMpISIpID8+JykpIHsNCgkJCQkJSm9vbWxhLnN1Ym1pdGJ1dHRvbignPD89ICRkaXNwbGF5RGF0YS0+Z2V0KCJuYW1lIikgPz4uZGVsZXRlJyk7DQoJCQkJfTsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQkvLyBmdW5jdGlvbiB0byBleGl0IHRoZSB0YXNoIHN0YXRlDQoJCWZ1bmN0aW9uIGV4aXRUcmFzaCgpIHsNCgkJCWRvY3VtZW50LmFkbWluRm9ybS5maWx0ZXJfcHVibGlzaGVkLnNlbGVjdGVkSW5kZXggPSAwOw0KCQkJZG9jdW1lbnQuYWRtaW5Gb3JtLnN1Ym1pdCgpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJPC9zY3JpcHQ+DQoJPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiPg0KCQk8P3BocCBpZiAoZW1wdHkoJGRpc3BsYXlEYXRhLT5pdGVtcykpOiA/Pg0KCQkJPGg0IGNsYXNzPSJhbGVydC1oZWFkaW5nIj4NCgkJCQk8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCI+PC9zcGFuPg0KCQkJCTw/PSBUZXh0OjpfKCJUcmFzaCBBcmVhIikgPz4NCgkJCTwvaDQ+DQoJCQk8cD48Pz0gVGV4dDo6XygiWW91IGFyZSBjdXJyZW50bHkgdmlld2luZyB0aGUgdHJhc2ggYXJlYSwgYW5kIHlvdSBkb24ndCBoYXZlIGFueSBpdGVtcyBpbiB0cmFzaCBhdCB0aGUgbW9tZW50ISIpID8+PC9wPg0KCQk8P3BocCBlbHNlOiA/Pg0KCQkJPGg0IGNsYXNzPSJhbGVydC1oZWFkaW5nIj4NCgkJCQk8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCI+PC9zcGFuPg0KCQkJCTw/PSBUZXh0OjpfKCJUcmFzaGVkIGl0ZW1zIikgPz4NCgkJCTwvaDQ+DQoJCQk8cD48Pz0gVGV4dDo6XygiWW91IGFyZSBjdXJyZW50bHkgdmlld2luZyB0aGUgdHJhc2hlZCBpdGVtcy4iKSA/PjwvcD4NCgkJCTxidXR0b24gb25jbGljaz0iZW1wdHlUcmFzaCgpOyIgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLWRhbmdlciI+DQoJCQkJPHNwYW4gY2xhc3M9Imljb24tZGVsZXRlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPg0KCQkJCTw/PSBUZXh0OjpfKCJFbXB0eSB0cmFzaCIpID8+DQoJCQk8L2J1dHRvbj4NCgkJPD9waHAgZW5kaWY7ID8+DQoJCTxidXR0b24gb25jbGljaz0iZXhpdFRyYXNoKCk7IiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCI+DQoJCQk8c3BhbiBjbGFzcz0iaWNvbi1iYWNrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPg0KCQkJPD89IFRleHQ6Ol8oIkV4aXQgdHJhc2giKSA/Pg0KCQk8L2J1dHRvbj4NCgk8L2Rpdj4NCjw/cGhwIGVuZGlmOyA/Pg==', 'Trash Helper', '', '', '', 1, 8, '', 27, '');
+(97, '', 'trashhelper', 'Trash Helper Layout', '', 'PD9waHAgaWYgKCRkaXNwbGF5RGF0YS0+c3RhdGUtPmdldCgnZmlsdGVyLnB1Ymxpc2hlZCcpID09IC0yICYmICgkZGlzcGxheURhdGEtPmNhblN0YXRlICYmICRkaXNwbGF5RGF0YS0+Y2FuRGVsZXRlKSkgOiA/Pg0KCTxzY3JpcHQ+DQoJCS8vIGNoYW5nZSB0aGUgY2xhc3Mgb2YgdGhlIGRlbGV0ZSBidXR0b24NCgkJalF1ZXJ5KCIjdG9vbGJhci1kZWxldGUgYnV0dG9uIikudG9nZ2xlQ2xhc3MoImJ0bi1kYW5nZXIiKTsNCgkJLy8gZnVuY3Rpb24gdG8gZW1wdHkgdGhlIHRyYXNoDQoJCWZ1bmN0aW9uIGVtcHR5VHJhc2goKSB7DQoJCQlpZiAoZG9jdW1lbnQuYWRtaW5Gb3JtLmJveGNoZWNrZWQudmFsdWUgPT0gMCkgew0KCQkJCS8vIHNlbGVjdCBhbGwgdGhlIGl0ZW1zIHZpc2FibGUNCgkJCQlkb2N1bWVudC5hZG1pbkZvcm0uZWxlbWVudHNbJ2NoZWNrYWxsLXRvZ2dsZSddLmNoZWNrZWQ9MTsNCgkJCQlKb29tbGEuY2hlY2tBbGwoZG9jdW1lbnQuYWRtaW5Gb3JtLmVsZW1lbnRzWydjaGVja2FsbC10b2dnbGUnXSk7DQoJCQkJLy8gY2hlY2sgdG8gY29uZmlybSB0aGUgZGVsZXRpb24NCgkJCQlpZihjb25maXJtKCc8Pz0gVGV4dDo6XygiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZT8gQ29uZmlybWluZyB3aWxsIHBlcm1hbmVudGx5IGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbShzKSEiKSA/PicpKSB7DQoJCQkJCUpvb21sYS5zdWJtaXRidXR0b24oJzw/PSAkZGlzcGxheURhdGEtPmdldCgibmFtZSIpID8+LmRlbGV0ZScpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWRvY3VtZW50LmFkbWluRm9ybS5lbGVtZW50c1snY2hlY2thbGwtdG9nZ2xlJ10uY2hlY2tlZD0wOw0KCQkJCQlKb29tbGEuY2hlY2tBbGwoZG9jdW1lbnQuYWRtaW5Gb3JtLmVsZW1lbnRzWydjaGVja2FsbC10b2dnbGUnXSk7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkvLyBjb25maXJtIGRlbGV0aW9uIG9mIHRob3NlIHNlbGVjdGVkDQoJCQkJaWYgKGNvbmZpcm0oJzw/PSBUZXh0OjpfKCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlPyBDb25maXJtaW5nIHdpbGwgcGVybWFuZW50bHkgZGVsZXRlIHRoZSBzZWxlY3RlZCBpdGVtKHMpISIpID8+JykpIHsNCgkJCQkJSm9vbWxhLnN1Ym1pdGJ1dHRvbignPD89ICRkaXNwbGF5RGF0YS0+Z2V0KCJuYW1lIikgPz4uZGVsZXRlJyk7DQoJCQkJfTsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQkvLyBmdW5jdGlvbiB0byBleGl0IHRoZSB0YXNoIHN0YXRlDQoJCWZ1bmN0aW9uIGV4aXRUcmFzaCgpIHsNCgkJCWRvY3VtZW50LmFkbWluRm9ybS5maWx0ZXJfcHVibGlzaGVkLnNlbGVjdGVkSW5kZXggPSAwOw0KCQkJZG9jdW1lbnQuYWRtaW5Gb3JtLnN1Ym1pdCgpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJPC9zY3JpcHQ+DQoJPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiPg0KCQk8P3BocCBpZiAoZW1wdHkoJGRpc3BsYXlEYXRhLT5pdGVtcykpOiA/Pg0KCQkJPGg0IGNsYXNzPSJhbGVydC1oZWFkaW5nIj4NCgkJCQk8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCI+PC9zcGFuPg0KCQkJCTw/PSBUZXh0OjpfKCJUcmFzaCBBcmVhIikgPz4NCgkJCTwvaDQ+DQoJCQk8cD48Pz0gVGV4dDo6XygiWW91IGFyZSBjdXJyZW50bHkgdmlld2luZyB0aGUgdHJhc2ggYXJlYSwgYW5kIHlvdSBkb24ndCBoYXZlIGFueSBpdGVtcyBpbiB0cmFzaCBhdCB0aGUgbW9tZW50ISIpID8+PC9wPg0KCQk8P3BocCBlbHNlOiA/Pg0KCQkJPGg0IGNsYXNzPSJhbGVydC1oZWFkaW5nIj4NCgkJCQk8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCI+PC9zcGFuPg0KCQkJCTw/PSBUZXh0OjpfKCJUcmFzaGVkIGl0ZW1zIikgPz4NCgkJCTwvaDQ+DQoJCQk8cD48Pz0gVGV4dDo6XygiWW91IGFyZSBjdXJyZW50bHkgdmlld2luZyB0aGUgdHJhc2hlZCBpdGVtcy4iKSA/PjwvcD4NCgkJCTxidXR0b24gb25jbGljaz0iZW1wdHlUcmFzaCgpOyIgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLWRhbmdlciI+DQoJCQkJPHNwYW4gY2xhc3M9Imljb24tZGVsZXRlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPg0KCQkJCTw/PSBUZXh0OjpfKCJFbXB0eSB0cmFzaCIpID8+DQoJCQk8L2J1dHRvbj4NCgkJPD9waHAgZW5kaWY7ID8+DQoJCTxidXR0b24gb25jbGljaz0iZXhpdFRyYXNoKCk7IiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCI+DQoJCQk8c3BhbiBjbGFzcz0iaWNvbi1iYWNrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPg0KCQkJPD89IFRleHQ6Ol8oIkV4aXQgdHJhc2giKSA/Pg0KCQk8L2J1dHRvbj4NCgk8L2Rpdj4NCjw/cGhwIGVuZGlmOyA/Pg==', 'Trash Helper', '', '', '', 1, 8, '', 27, ''),
+(101, 1, 'input', 'Input', '', 'PGlucHV0DQoJY2xhc3M9Ijw/cGhwIGVjaG8gJGNsYXNzIC4gJGNsYXNzX290aGVyOyA/PiINCgluYW1lPSI8P3BocCBlY2hvICRuYW1lOyA/PiINCglpZD0iPD9waHAgZWNobyAkaWQ7ID8+Ig0KCXR5cGU9Ijw/cGhwIGVjaG8gJHR5cGU7ID8+Ig0KCXBsYWNlaG9sZGVyPSI8P3BocCBlY2hvICRwbGFjZWhvbGRlcjsgPz4iDQoJdmFsdWU9Ijw/cGhwIGVjaG8gJHZhbHVlOyA/PiINCgk8P3BocCBlY2hvICRyZWFkb25seTsgZWNobyAkb25jaGFuZ2U7IGVjaG8gJG9ua2V5ZG93bjsgZWNobyAkZm9ybWF0OyBlY2hvICRyZXF1aXJlZDsgPz4NCj4=', 'Input', 'Ly8gRXh0cmFjdCBhbGwga2V5cyBmcm9tICRkaXNwbGF5RGF0YSBhcyBpbmRpdmlkdWFsIHZhcmlhYmxlcy4NCmV4dHJhY3QoJGRpc3BsYXlEYXRhKTsNCg0KLy8gQXNzaWduIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiAkZGlzcGxheURhdGEuDQoNCi8vIFRoZSAnaWQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGlkID8/PSAnJzsNCg0KLy8gVGhlICduYW1lJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ2lkJyBpZiBub3Qgc2V0LiBBZGRpdGlvbmFsbHksIHJlcGxhY2UgaHlwaGVucyB3aXRoIHVuZGVyc2NvcmVzLg0KJG5hbWUgPz89ICRpZDsNCiRuYW1lID0gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRuYW1lKTsNCg0KLy8gVGhlICd2YWx1ZScgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IHN0cmluZyBpZiBub3Qgc2V0IG9yIGlzIG51bGwuDQokdmFsdWUgPz89ICcnOw0KDQovLyBUaGUgJ2NsYXNzJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ3VrLWlucHV0JyBpZiBub3Qgc2V0IG9yIGlzIG51bGwuDQokY2xhc3MgPz89ICd1ay1pbnB1dCc7DQoNCi8vIFRoZSAnY2xhc3Nfb3RoZXInIHBhcmFtZXRlciwgcHJlcGVuZGVkIHdpdGggYSBzcGFjZSBpZiBzZXQsIG90aGVyd2lzZSBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IHN0cmluZy4NCiRjbGFzc19vdGhlciA9IGlzc2V0KCRjbGFzc19vdGhlcikgPyAnICcgLiAkY2xhc3Nfb3RoZXIgOiAnJzsNCg0KLy8gVGhlICdwbGFjZWhvbGRlcicgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IHN0cmluZyBpZiBub3Qgc2V0IG9yIGlzIG51bGwuDQokcGxhY2Vob2xkZXIgPz89ICcnOw0KDQovLyBUaGUgJ3R5cGUnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byAndGV4dCcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJHR5cGUgPz89ICd0ZXh0JzsNCg0KLy8gVGhlICdyZWFkb25seScgYXR0cmlidXRlLCBzZXQgdG8gJ3JlYWRvbmx5JyBpZiB0cnVlLCBvdGhlcndpc2UgbGVmdCBhcyBhbiBlbXB0eSBzdHJpbmcuDQokcmVhZG9ubHkgPSAhZW1wdHkoJHJlYWRvbmx5KSA/ICcgcmVhZG9ubHknIDogJyc7DQoNCi8vIFRoZSAnZm9ybWF0JyBhdHRyaWJ1dGUsIGFkZGVkIG9ubHkgaWYgc2V0LCBvdGhlcndpc2UgbGVmdCBhcyBhbiBlbXB0eSBzdHJpbmcuDQokZm9ybWF0ID0gIWVtcHR5KCRmb3JtYXQpID8gJyBmb3JtYXQ9IicgLiAkZm9ybWF0IC4gJyInIDogJyc7DQoNCi8vIFRoZSAnb25jaGFuZ2UnIGF0dHJpYnV0ZSwgYWRkZWQgb25seSBpZiBzZXQsIG90aGVyd2lzZSBsZWZ0IGFzIGFuIGVtcHR5IHN0cmluZy4NCiRvbmNoYW5nZSA9IGlzc2V0KCRvbmNoYW5nZSkgPyAnIG9uY2hhbmdlPSInIC4gJG9uY2hhbmdlIC4gJyInIDogJyc7DQoNCi8vIFRoZSAnb25rZXlkb3duJyBhdHRyaWJ1dGUsIGFkZGVkIG9ubHkgaWYgc2V0LCBvdGhlcndpc2UgbGVmdCBhcyBhbiBlbXB0eSBzdHJpbmcuDQokb25rZXlkb3duID0gaXNzZXQoJG9ua2V5ZG93bikgPyAnIG9ua2V5ZG93bj0iJyAuICRvbmtleWRvd24gLiAnIicgOiAnJzsNCg0KLy8gVGhlICdyZXF1aXJlZCcgYXR0cmlidXRlLCBzZXQgdG8gJ3JlcXVpcmVkJyBpZiB0cnVlLCBvdGhlcndpc2UgbGVmdCBhcyBhbiBlbXB0eSBzdHJpbmcuDQokcmVxdWlyZWQgPSAhZW1wdHkoJHJlcXVpcmVkKSA/ICcgcmVxdWlyZWQnIDogJyc7', '', '', 1, 5, '', 30, ''),
+(102, 1, 'inputbox', 'Input Box', '', 'PGRpdiBjbGFzcz0iPD9waHAgZWNobyAkbWFyZ2luOyA/PiI+DQoJPGxhYmVsIGNsYXNzPSI8P3BocCBlY2hvICRjbGFzc19sYWJlbCA7IGVjaG8gJGNsYXNzX290aGVyX2xhYmVsOyA/PiIgZm9yPSI8P3BocCBlY2hvICRuYW1lOyA/PiI+PD9waHAgZWNobyAkbGFiZWw7ID8+PC9sYWJlbD4NCgk8ZGl2IGNsYXNzPSJ1ay1mb3JtLWNvbnRyb2xzIj4NCgkJPD9waHAgZWNobyBMYXlvdXRIZWxwZXI6OnJlbmRlcignaW5wdXQnLCAkZGlzcGxheURhdGEpOyA/Pg0KCTwvZGl2Pg0KPC9kaXY+', 'Input Box', 'Ly8gRXh0cmFjdCBhbGwga2V5cyBmcm9tICRkaXNwbGF5RGF0YSBhcyBpbmRpdmlkdWFsIHZhcmlhYmxlcy4NCmV4dHJhY3QoJGRpc3BsYXlEYXRhKTsNCg0KLy8gQXNzaWduIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiAkZGlzcGxheURhdGEuDQoNCi8vIFRoZSAnaWQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGlkID8/PSAnJzsNCg0KLy8gVGhlICduYW1lJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ2lkJyBpZiBub3Qgc2V0IG9yIGlzIG51bGwuIEFkZGl0aW9uYWxseSwgcmVwbGFjZSBoeXBoZW5zIHdpdGggdW5kZXJzY29yZXMuDQokbmFtZSA/Pz0gJGlkOw0KJG5hbWUgPSBzdHJfcmVwbGFjZSgnLScsICdfJywgJG5hbWUpOw0KDQovLyBUaGUgJ2xhYmVsJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gdGhlICdMYWJlbCcgdHJhbnNsYXRpb24gaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGxhYmVsID8/PSBUZXh0OjpfKCdMYWJlbCcpOw0KDQovLyBUaGUgJ2NsYXNzX2xhYmVsJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ3VrLWZvcm0tbGFiZWwnIGlmIG5vdCBzZXQgb3IgaXMgbnVsbC4NCiRjbGFzc19sYWJlbCA/Pz0gJ3VrLWZvcm0tbGFiZWwnOw0KDQovLyBUaGUgJ2NsYXNzX290aGVyX2xhYmVsJyBwYXJhbWV0ZXIsIHByZXBlbmRlZCB3aXRoIGEgc3BhY2UgaWYgc2V0LCBvdGhlcndpc2UgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcuDQokY2xhc3Nfb3RoZXJfbGFiZWwgPSBpc3NldCgkY2xhc3Nfb3RoZXJfbGFiZWwpID8gJyAnIC4gJGNsYXNzX290aGVyX2xhYmVsIDogJyc7DQoNCi8vIFRoZSAnbWFyZ2luJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ3VrLW1hcmdpbi1zbWFsbCcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJG1hcmdpbiA/Pz0gJ3VrLW1hcmdpbi1zbWFsbCc7', '', '', 1, 5, '', 31, ''),
+(103, 1, 'select', 'Select', '', 'PHNlbGVjdCBjbGFzcz0iPD9waHAgZWNobyAkY2xhc3MgLiAkY2xhc3Nfb3RoZXI7ID8+IiBpZD0iPD9waHAgZWNobyAkaWQ7ID8+IiBuYW1lPSI8P3BocCBlY2hvICRuYW1lOyA/PiI8P3BocCBlY2hvICRvbmtleWRvd247IGVjaG8gJG9uY2hhbmdlOyA/Pj4NCjw/cGhwIGlmICgkb3B0aW9ucyk6ID8+DQoJPD9waHAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJGtleSA9PiAkdmFsdWUpOiA/Pg0KCQk8P3BocCBpZiAoaXNfb2JqZWN0KCR2YWx1ZSkgJiYgaXNzZXQoJHZhbHVlLT5rZXkpICYmIGlzc2V0KCR2YWx1ZS0+dmFsdWUpKTogPz4NCgkJCTw/cGhwIGlmICgkZGVmYXVsdCA9PT0gJHZhbHVlLT5rZXkpOiA/Pg0KCQkJCTxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gICR2YWx1ZS0+a2V5OyA/PiIgc2VsZWN0ZWQ+PD9waHAgZWNobyAkdmFsdWUtPnZhbHVlOyA/Pjwvb3B0aW9uPg0KCQkJPD9waHAgZWxzZTogPz4NCgkJCQk8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICAkdmFsdWUtPmtleTsgPz4iPjw/cGhwIGVjaG8gJHZhbHVlLT52YWx1ZTsgPz48L29wdGlvbj4NCgkJCTw/cGhwIGVuZGlmOyA/Pg0KCQk8P3BocCBlbHNlOiA/Pg0KCQkJPD9waHAgaWYgKCRkZWZhdWx0ID09PSAka2V5KTogPz4NCgkJCQk8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICRrZXk7ID8+IiBzZWxlY3RlZD48P3BocCBlY2hvICR2YWx1ZTsgPz48L29wdGlvbj4NCgkJCTw/cGhwIGVsc2U6ID8+DQoJCQkJPG9wdGlvbiB2YWx1ZT0iPD9waHAgZWNobyAka2V5OyA/PiI+PD9waHAgZWNobyAkdmFsdWU7ID8+PC9vcHRpb24+DQoJCQk8P3BocCBlbmRpZjsgPz4NCgkJPD9waHAgZW5kaWY7ID8+DQoJPD9waHAgZW5kZm9yZWFjaDsgPz4NCjw/cGhwIGVsc2U6ID8+DQoJPG9wdGlvbj48P3BocCBlY2hvIFRleHQ6Ol8oJ0VtcHR5Jyk7ID8+PC9vcHRpb24+DQo8P3BocCBlbmRpZjsgPz4NCjwvc2VsZWN0Pg==', 'Select', 'Ly8gRXh0cmFjdCBhbGwga2V5cyBmcm9tICRkaXNwbGF5RGF0YSBhcyBpbmRpdmlkdWFsIHZhcmlhYmxlcy4NCmV4dHJhY3QoJGRpc3BsYXlEYXRhKTsNCg0KLy8gQXNzaWduIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiAkZGlzcGxheURhdGEuDQoNCi8vIFRoZSAnaWQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGlkID8/PSAnJzsNCg0KLy8gVGhlICduYW1lJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ2lkJyBpZiBub3Qgc2V0LiBBZGRpdGlvbmFsbHksIHJlcGxhY2UgaHlwaGVucyB3aXRoIHVuZGVyc2NvcmVzLg0KJG5hbWUgPz89ICRpZDsNCiRuYW1lID0gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRuYW1lKTsNCg0KLy8gVGhlICdjbGFzcycgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvICd1ay1zZWxlY3QnIGlmIG5vdCBzZXQgb3IgaXMgbnVsbC4NCiRjbGFzcyA/Pz0gJ3VrLXNlbGVjdCc7DQoNCi8vIFRoZSAnY2xhc3Nfb3RoZXInIHBhcmFtZXRlciwgcHJlcGVuZGVkIHdpdGggYSBzcGFjZSBpZiBzZXQsIG90aGVyd2lzZSBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IHN0cmluZy4NCiRjbGFzc19vdGhlciA9IGlzc2V0KCRjbGFzc19vdGhlcikgPyAnICcgLiAkY2xhc3Nfb3RoZXIgOiAnJzsNCg0KLy8gVGhlICdvcHRpb25zJyBwYXJhbWV0ZXIsIHNldCBvbmx5IGlmIGl0IGV4aXN0cyBhbmQgaXMgYW4gYXJyYXksIG90aGVyd2lzZSBkZWZhdWx0cyB0byBgZmFsc2VgLg0KJG9wdGlvbnMgPSAoaXNzZXQoJG9wdGlvbnMpICYmIGlzX2FycmF5KCRvcHRpb25zKSkgPyAkb3B0aW9ucyA6IGZhbHNlOw0KDQovLyBUaGUgJ2RlZmF1bHQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGRlZmF1bHQgPz89ICcnOw0KDQovLyBUaGUgJ29uY2hhbmdlJyBhdHRyaWJ1dGUsIGFkZGVkIG9ubHkgaWYgc2V0LCBvdGhlcndpc2UgbGVmdCBhcyBhbiBlbXB0eSBzdHJpbmcuDQokb25jaGFuZ2UgPSBpc3NldCgkb25jaGFuZ2UpID8gJyBvbmNoYW5nZT0iJyAuICRvbmNoYW5nZSAuICciJyA6ICcnOw0KDQovLyBUaGUgJ29ua2V5ZG93bicgYXR0cmlidXRlLCBhZGRlZCBvbmx5IGlmIHNldCwgb3RoZXJ3aXNlIGxlZnQgYXMgYW4gZW1wdHkgc3RyaW5nLg0KJG9ua2V5ZG93biA9IGlzc2V0KCRvbmtleWRvd24pID8gJyBvbmtleWRvd249IicgLiAkb25rZXlkb3duIC4gJyInIDogJyc7', '', '', 1, 7, '', 32, ''),
+(104, 1, 'selectbox', 'Select Box', '', 'PGRpdiBjbGFzcz0iPD9waHAgZWNobyAkbWFyZ2luOyA/PiI+DQoJPGxhYmVsIGNsYXNzPSJ1ay1mb3JtLWxhYmVsIiBmb3I9Ijw/cGhwIGVjaG8gJG5hbWU7ID8+Ij48P3BocCBlY2hvICRsYWJlbDsgPz48L2xhYmVsPg0KCTxkaXYgY2xhc3M9InVrLWZvcm0tY29udHJvbHMiPg0KCQk8P3BocCBlY2hvIExheW91dEhlbHBlcjo6cmVuZGVyKCdzZWxlY3QnLCAkZGlzcGxheURhdGEpOyA/Pg0KCTwvZGl2Pg0KPC9kaXY+', 'Select Box', 'Ly8gRXh0cmFjdCBhbGwga2V5cyBmcm9tICRkaXNwbGF5RGF0YSBhcyBpbmRpdmlkdWFsIHZhcmlhYmxlcy4NCmV4dHJhY3QoJGRpc3BsYXlEYXRhKTsNCg0KLy8gQXNzaWduIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiAkZGlzcGxheURhdGEuDQoNCi8vIFRoZSAnaWQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGlkID8/PSAnJzsNCg0KLy8gVGhlICduYW1lJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ2lkJyBpZiBub3Qgc2V0IG9yIGlzIG51bGwuIEFkZGl0aW9uYWxseSwgcmVwbGFjZSBoeXBoZW5zIHdpdGggdW5kZXJzY29yZXMuDQokbmFtZSA/Pz0gJGlkOw0KJG5hbWUgPSBzdHJfcmVwbGFjZSgnLScsICdfJywgJG5hbWUpOw0KDQovLyBUaGUgJ2xhYmVsJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gdGhlIHRyYW5zbGF0aW9uIG9mICdMYWJlbCcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGxhYmVsID8/PSBUZXh0OjpfKCdMYWJlbCcpOw0KDQovLyBUaGUgJ21hcmdpbicgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvICd1ay1tYXJnaW4tc21hbGwnIGlmIG5vdCBzZXQgb3IgaXMgbnVsbC4NCiRtYXJnaW4gPz89ICd1ay1tYXJnaW4tc21hbGwnOw==', '', '', 1, 4, '', 33, ''),
+(105, 1, 'textarea', 'Textarea', '', 'PHRleHRhcmVhDQoJY2xhc3M9Ijw/cGhwIGVjaG8gJGNsYXNzIC4gJGNsYXNzX290aGVyOyA/PiINCgluYW1lPSI8P3BocCBlY2hvICRuYW1lOyA/PiINCglhcmlhLWxhYmVsPSJUZXh0YXJlYSINCglpZD0iPD9waHAgZWNobyAkaWQ7ID8+Ig0KCXJvd3M9Ijw/cGhwIGVjaG8gJHJvd3M7ID8+Ig0KCWNvbHVtbnM9Ijw/cGhwIGVjaG8gJGNvbHVtbnM7ID8+Ig0KCXBsYWNlaG9sZGVyPSI8P3BocCBlY2hvICRwbGFjZWhvbGRlcjsgPz4iDQoJPD9waHAgZWNobyAkZGlyZWN0aW9uOyBlY2hvICRyZWFkb25seTsgZWNobyAkb25jaGFuZ2U7IGVjaG8gJG9ua2V5ZG93bjsgPz4NCj48L3RleHRhcmVhPg==', 'Textarea', 'Ly8gRXh0cmFjdCBhbGwga2V5cyBmcm9tICRkaXNwbGF5RGF0YSBhcyBpbmRpdmlkdWFsIHZhcmlhYmxlcy4NCmV4dHJhY3QoJGRpc3BsYXlEYXRhKTsNCg0KLy8gQXNzaWduIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiAkZGlzcGxheURhdGEuDQoNCi8vIFRoZSAnaWQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGlkID8/PSAnJzsNCg0KLy8gVGhlICduYW1lJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ2lkJyBpZiBub3Qgc2V0LiBBZGRpdGlvbmFsbHksIHJlcGxhY2UgaHlwaGVucyB3aXRoIHVuZGVyc2NvcmVzLg0KJG5hbWUgPz89ICRpZDsNCiRuYW1lID0gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRuYW1lKTsNCg0KLy8gVGhlICdjbGFzcycgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvICd1ay10ZXh0YXJlYScgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGNsYXNzID8/PSAndWstdGV4dGFyZWEnOw0KDQovLyBUaGUgJ2NsYXNzX290aGVyJyBwYXJhbWV0ZXIsIHByZXBlbmRlZCB3aXRoIGEgc3BhY2UgaWYgc2V0LCBvdGhlcndpc2UgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcuDQokY2xhc3Nfb3RoZXIgPSBpc3NldCgkY2xhc3Nfb3RoZXIpID8gJyAnIC4gJGNsYXNzX290aGVyIDogJyc7DQoNCi8vIFRoZSAncm93cycgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIDUgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJHJvd3MgPz89IDU7DQoNCi8vIFRoZSAnY29sdW1ucycgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IHN0cmluZyBpZiBub3Qgc2V0IG9yIGlzIG51bGwuDQokY29sdW1ucyA/Pz0gJyc7DQoNCi8vIFRoZSAncGxhY2Vob2xkZXInIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJHBsYWNlaG9sZGVyID8/PSAnJzsNCg0KLy8gVGhlICdyZWFkb25seScgYXR0cmlidXRlLCBzZXQgdG8gJ3JlYWRvbmx5JyBpZiB0cnVlLCBvdGhlcndpc2UgbGVmdCBhcyBhbiBlbXB0eSBzdHJpbmcuDQokcmVhZG9ubHkgPSAhZW1wdHkoJHJlYWRvbmx5KSA/ICcgcmVhZG9ubHknIDogJyc7DQoNCi8vIFRoZSAnZGlyZWN0aW9uJyBhdHRyaWJ1dGUsIGFkZGVkIG9ubHkgaWYgc2V0LCBvdGhlcndpc2UgbGVmdCBhcyBhbiBlbXB0eSBzdHJpbmcuDQokZGlyZWN0aW9uID0gaXNzZXQoJGRpcmVjdGlvbikgPyAnIGRpcj0iJyAuICRkaXJlY3Rpb24gLiAnIicgOiAnJzsNCg0KLy8gVGhlICdvbmNoYW5nZScgYXR0cmlidXRlLCBhZGRlZCBvbmx5IGlmIHNldCwgb3RoZXJ3aXNlIGxlZnQgYXMgYW4gZW1wdHkgc3RyaW5nLg0KJG9uY2hhbmdlID0gaXNzZXQoJG9uY2hhbmdlKSA/ICcgb25jaGFuZ2U9IicgLiAkb25jaGFuZ2UgLiAnIicgOiAnJzsNCg0KLy8gVGhlICdvbmtleWRvd24nIGF0dHJpYnV0ZSwgYWRkZWQgb25seSBpZiBzZXQsIG90aGVyd2lzZSBsZWZ0IGFzIGFuIGVtcHR5IHN0cmluZy4NCiRvbmtleWRvd24gPSBpc3NldCgkb25rZXlkb3duKSA/ICcgb25rZXlkb3duPSInIC4gJG9ua2V5ZG93biAuICciJyA6ICcnOw==', '', '', 1, 5, '', 34, ''),
+(106, 1, 'textareabox', 'Textarea Box', '', 'PGRpdiBjbGFzcz0iPD9waHAgZWNobyAkbWFyZ2luOyA/PiI+DQoJPGxhYmVsIGNsYXNzPSJ1ay1mb3JtLWxhYmVsIiBmb3I9Ijw/cGhwIGVjaG8gJG5hbWU7ID8+Ij48P3BocCBlY2hvICRsYWJlbDsgPz48L2xhYmVsPg0KCTxkaXYgY2xhc3M9InVrLWZvcm0tY29udHJvbHMiPg0KCQk8P3BocCBlY2hvIExheW91dEhlbHBlcjo6cmVuZGVyKCd0ZXh0YXJlYScsICRkaXNwbGF5RGF0YSk7ID8+DQoJPC9kaXY+DQo8L2Rpdj4=', 'Textarea Box', 'Ly8gRXh0cmFjdCBhbGwga2V5cyBmcm9tICRkaXNwbGF5RGF0YSBhcyBpbmRpdmlkdWFsIHZhcmlhYmxlcy4NCmV4dHJhY3QoJGRpc3BsYXlEYXRhKTsNCg0KLy8gQXNzaWduIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiAkZGlzcGxheURhdGEuDQoNCi8vIFRoZSAnaWQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGlkID8/PSAnJzsNCg0KLy8gVGhlICduYW1lJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gJ2lkJyBpZiBub3Qgc2V0LiBBZGRpdGlvbmFsbHksIHJlcGxhY2UgaHlwaGVucyB3aXRoIHVuZGVyc2NvcmVzLg0KJG5hbWUgPz89ICRpZDsNCiRuYW1lID0gc3RyX3JlcGxhY2UoJy0nLCAnXycsICRuYW1lKTsNCg0KLy8gVGhlICdsYWJlbCcgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIGEgdHJhbnNsYXRlZCAnTGFiZWwnIHN0cmluZyBpZiBub3Qgc2V0Lg0KJGxhYmVsID8/PSBUZXh0OjpfKCdMYWJlbCcpOw0KDQovLyBUaGUgJ21hcmdpbicgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvICd1ay1tYXJnaW4tc21hbGwnIGlmIG5vdCBzZXQgb3IgaXMgbnVsbC4NCiRtYXJnaW4gPz89ICd1ay1tYXJnaW4tc21hbGwnOw==', '', '', 1, 5, '', 35, ''),
+(107, 1, 'modal', 'Modal', '', 'PGRpdiBpZD0iPD9waHAgZWNobyAkaWQ7ID8+Ijw/cGhwIGVjaG8gJG1vZGFsX2NsYXNzOyA/PiB1ay1tb2RhbD4NCgk8ZGl2IGNsYXNzPSI8P3BocCBlY2hvICRkaWFsb2dfY2xhc3M7ID8+Ij4NCg0KCQk8P3BocCBpZiAoJGNsb3NlKTogPz48YnV0dG9uPD9waHAgZWNobyAkY2xhc3NfY2xvc2U7ID8+IHR5cGU9ImJ1dHRvbiIgdWstY2xvc2U+PC9idXR0b24+PD9waHAgZW5kaWY7ID8+DQoNCgkJPD9waHAgaWYgKCRoZWFkZXIpOiA/Pg0KCQkJPD9waHAgaWYgKHN0cnBvcygkaGVhZGVyLCAndWstbmF2YmFyJykgIT09IGZhbHNlIHx8IHN0cnBvcygkaGVhZGVyLCAndWstbW9kYWwtaGVhZGVyJykgIT09IGZhbHNlKTogPz4NCgkJCQk8P3BocCBlY2hvICRoZWFkZXI7ID8+DQoJCQk8P3BocCBlbHNlOiA/Pg0KCQkJCTxkaXYgY2xhc3M9InVrLW1vZGFsLWhlYWRlciI+DQoJCQkJCTxoMiBjbGFzcz0iPD9waHAgZWNobyAkaGVhZGVyX2NsYXNzOyA/PiI+PD9waHAgZWNobyAkaGVhZGVyOyA/PjwvaDI+DQoJCQkJPC9kaXY+DQoJCQk8P3BocCBlbmRpZjsgPz4NCgkJPD9waHAgZW5kaWY7ID8+DQoNCgkJPGRpdjw/cGhwIGVjaG8gJGJvZHlfY2xhc3M7ID8+PD9waHAgZWNobyAkb3ZlcmZsb3c7ID8+Pg0KCQkJPD9waHAgZWNobyAkY29udGVudDsgPz4NCgkJPC9kaXY+DQoNCgkJPD9waHAgaWYgKCRidXR0b25zICE9PSBudWxsKTogPz4NCgkJPGRpdiBjbGFzcz0idWstbW9kYWwtZm9vdGVyIHVrLXRleHQtcmlnaHQiPg0KCQkJPD9waHAgaWYgKCFlbXB0eSgkYnV0dG9uc19jbGFzcykgfHwgIWVtcHR5KCRidXR0b25zX2lkKSk6ID8+DQoJCQkJPGRpdiBjbGFzcz0iPD9waHAgZWNobyAkYnV0dG9uc19jbGFzczsgPz4iIGlkPSI8P3BocCBlY2hvICRidXR0b25zX2lkOyA/PiI+DQoJCQk8P3BocCBlbmRpZjsgPz4NCgkJCTw/cGhwIGZvcmVhY2ggKCRidXR0b25zIGFzICRidXR0b24pOiA/Pg0KCQkJCTw/cGhwDQoJCQkJCSRpZF8gPSAkYnV0dG9uWydpZCddID8/IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnJhbmRvbSg3KTsNCgkJCQkJJGNsYXNzID0gICRidXR0b25bJ2NsYXNzJ10gPz8gJ3VrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCc7DQoJCQkJCSRjbGFzcyAuPSAoaXNzZXQoJGJ1dHRvblsnY2xvc2UnXSkgJiYgJGJ1dHRvblsnY2xvc2UnXSkgPyAnIHVrLW1vZGFsLWNsb3NlJyA6ICcnOw0KCQkJCQkkbmFtZSA9IChpc3NldCgkYnV0dG9uWyduYW1lJ10pKSA/ICRidXR0b25bJ25hbWUnXSA6ICgoaXNzZXQoJGJ1dHRvblsnY2xvc2UnXSkgJiYgJGJ1dHRvblsnY2xvc2UnXSkgPyBUZXh0OjpfKCdDYW5jZWwnKSA6IFRleHQ6Ol8oJ1NhdmUnKSk7DQoJCQkJCSRvbmNsaWNrID0gKGlzc2V0KCRidXR0b25bJ29uY2xpY2snXSkpID8gJyBvbmNsaWNrPSInIC4gJGJ1dHRvblsnb25jbGljayddIC4gJyInIDogJyc7DQoJCQkJPz4NCgkJCQk8YnV0dG9uIGlkPSI8P3BocCBlY2hvICRpZF87ID8+IiBjbGFzcz0iPD9waHAgZWNobyAkY2xhc3M7ID8+IiB0eXBlPSJidXR0b24iPD9waHAgZWNobyAkb25jbGljazsgPz4+PD9waHAgZWNobyAkbmFtZTsgPz48L2J1dHRvbj4NCgkJCTw/cGhwIGVuZGZvcmVhY2g7ID8+DQoJCQk8P3BocCBpZiAoIWVtcHR5KCRidXR0b25zX2NsYXNzKSB8fCAhZW1wdHkoJGJ1dHRvbnNfaWQpKTogPz4NCgkJCQk8L2Rpdj4NCgkJCTw/cGhwIGVuZGlmOyA/Pg0KCQk8L2Rpdj4NCgkJPD9waHAgZW5kaWY7ID8+DQoJPC9kaXY+DQo8L2Rpdj4NCg==', 'Modal', 'Ly8gRXh0cmFjdCBhbGwga2V5cyBmcm9tICRkaXNwbGF5RGF0YSBhcyBpbmRpdmlkdWFsIHZhcmlhYmxlcy4NCmV4dHJhY3QoJGRpc3BsYXlEYXRhKTsNCg0KLy8gQXNzaWduIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiAkZGlzcGxheURhdGEuDQoNCi8vIFRoZSAnaWQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhIHJhbmRvbSBzdHJpbmcgaWYgbm90IHNldC4NCiRpZCA/Pz0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6cmFuZG9tKDcpOw0KDQovLyBUaGUgJ2Z1bGwnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBmYWxzZSBpZiBub3Qgc2V0IG9yIGlzIG51bGwuDQokZnVsbCA9IChpc3NldCgkZnVsbCkgJiYgJGZ1bGwpID8gdHJ1ZSA6IGZhbHNlOw0KDQovLyBUaGUgJ2hlYWRlcicgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIGZhbHNlIGlmIG5vdCBzZXQgb3IgaXMgbnVsbC4NCiRoZWFkZXIgPz89IGZhbHNlOw0KDQovLyBUaGUgJ2hlYWRlcl9jbGFzcycgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvICd1ay1tb2RhbC10aXRsZScgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGhlYWRlcl9jbGFzcyA/Pz0gJ3VrLW1vZGFsLXRpdGxlJzsNCg0KLy8gVGhlICdoZWFkZXJfY2xhc3Nfb3RoZXInIHBhcmFtZXRlciwgaWYgc2V0LCBhcHBlbmRzIGFkZGl0aW9uYWwgY2xhc3MgdG8gJ2hlYWRlcl9jbGFzcycsIG90aGVyd2lzZSByZXRhaW5zIG9yaWdpbmFsICdoZWFkZXJfY2xhc3MnLg0KJGhlYWRlcl9jbGFzcyA9IGlzc2V0KCRoZWFkZXJfY2xhc3Nfb3RoZXIpID8gJGhlYWRlcl9jbGFzcyAuICcgJyAuICRoZWFkZXJfY2xhc3Nfb3RoZXIgOiAkaGVhZGVyX2NsYXNzOw0KDQovLyBUaGUgJ2JvZHlfY2xhc3MnIHBhcmFtZXRlciwgYWRkZWQgaWYgc2V0LCBvdGhlcndpc2UgZGVmYXVsdHMgdG8gJ3VrLW1vZGFsLWJvZHknLg0KJGJvZHlfY2xhc3MgPSBpc3NldCgkYm9keV9jbGFzcykgPyAnIGNsYXNzPSInIC4gJGJvZHlfY2xhc3MgLiAnIicgOiAnIGNsYXNzPSJ1ay1tb2RhbC1ib2R5Iic7DQoNCi8vIFRoZSAnY29udGVudCcgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IHN0cmluZyBpZiBub3Qgc2V0Lg0KJGNvbnRlbnQgPz89ICcnOw0KDQovLyBUaGUgJ2J1dHRvbnMnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBudWxsIGlmIG5vdCBzZXQuDQokYnV0dG9ucyA/Pz0gbnVsbDsNCg0KLy8gVGhlICdidXR0b25zX2NsYXNzJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIG5vdCBzZXQuDQokYnV0dG9uc19jbGFzcyA/Pz0gJyc7DQoNCi8vIFRoZSAnYnV0dG9uc19pZCcgcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IHN0cmluZyBpZiBub3Qgc2V0Lg0KJGJ1dHRvbnNfaWQgPz89ICcnOw0KDQovLyBUaGUgJ2Nsb3NlJyBwYXJhbWV0ZXIsIHNldCB0byBmYWxzZSBpZiBleHBsaWNpdGx5IHNldCB0byBmYWxzZSwgb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIHRydWUuDQokY2xvc2UgPSBpc3NldCgkY2xvc2UpICYmICEkY2xvc2UgPyBmYWxzZSA6IHRydWU7DQoNCi8vIFRoZSAnb3ZlcmZsb3cnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byAndWstb3ZlcmZsb3ctYXV0bycgdW5sZXNzIHNldCB0byBmYWxzZS4NCiRvdmVyZmxvdyA9IGlzc2V0KCRvdmVyZmxvdykgJiYgISRvdmVyZmxvdyA/ICcnIDogJyB1ay1vdmVyZmxvdy1hdXRvJzsNCg0KLy8gVGhlICdkaWFsb2dfY2xhc3MnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byAndWstbW9kYWwtZGlhbG9nJyBpZiBub3Qgc2V0IG9yIGVtcHR5Lg0KJGRpYWxvZ19jbGFzcyA/Pz0gJ3VrLW1vZGFsLWRpYWxvZyc7DQoNCi8vIFNldCB0aGUgZnVsbCBtb2RhbCBiZWhhdmlvciB3aGVuICdmdWxsJyBpcyB0cnVlLg0KaWYgKCRmdWxsKQ0Kew0KCS8vIFRoZSAnbW9kYWxfY2xhc3MnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHNldC4NCgkkbW9kYWxfY2xhc3MgPSAkbW9kYWxfY2xhc3MgPz8gJyc7DQoNCgkvLyBUaGUgJ21vZGFsX2NsYXNzJyBpcyB3cmFwcGVkIHdpdGggZnVsbCBtb2RhbCBjbGFzc2VzIGlmICdmdWxsJyBpcyB0cnVlLg0KCSRtb2RhbF9jbGFzcyA9ICcgY2xhc3M9InVrLW1vZGFsLWZ1bGwgJyAuICRtb2RhbF9jbGFzcyAuICciJzsNCg0KCS8vIENoYW5nZSAnY2xhc3NfY2xvc2UnIHRvIHRoZSBmdWxsIG1vZGFsIGNsb3NlIGJ1dHRvbiBzdHlsZSB3aGVuICdmdWxsJyBpcyB0cnVlLg0KCSRjbGFzc19jbG9zZSA9ICcgY2xhc3M9InVrLW1vZGFsLWNsb3NlLWZ1bGwgdWstY2xvc2UtbGFyZ2UiJzsNCn0NCmVsc2UNCnsNCgkvLyBUaGUgJ21vZGFsX2NsYXNzJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gYW4gZW1wdHkgc3RyaW5nIHVubGVzcyBwcm92aWRlZC4NCgkkbW9kYWxfY2xhc3MgPSBpc3NldCgkbW9kYWxfY2xhc3MpID8gJyBjbGFzcz0iJyAuICRtb2RhbF9jbGFzcyAuICciJyA6ICcnOw0KDQoJLy8gVGhlIGRlZmF1bHQgY2xvc2UgYnV0dG9uIGNsYXNzLg0KCSRjbGFzc19jbG9zZSA9ICcgY2xhc3M9InVrLW1vZGFsLWNsb3NlLWRlZmF1bHQiJzsNCn0=', '', '', 1, 12, '', 36, ''),
+(108, 1, 'rows', 'Rows', '', 'PD9waHAgaWYgKGlzX2FycmF5KCRpdGVtcykpOiA/Pg0KCTw/cGhwIGZvcmVhY2ggKCRpdGVtcyBhcyAkcm93ID0+ICR2YWx1ZXMpOiA/Pg0KCQk8dHI+DQoJCTw/cGhwIGZvcmVhY2goJHZhbHVlcyBhcyAkdmFsdWUpOiA/Pg0KCQkJPHRkIGNsYXNzPSIiPjw/cGhwIGVjaG8gJHZhbHVlOyA/PjwvdGQ+DQoJCTw/cGhwIGVuZGZvcmVhY2g7ID8+DQoJCTwvdHI+DQoJPD9waHAgZW5kZm9yZWFjaDsgPz4NCjw/cGhwIGVsc2VpZiAoaXNfbnVtZXJpYygkaXRlbXMpICYmIGlzX2FycmF5KCRoZWFkZXJzKSk6ID8+DQoJPD9waHAgZm9yKCAkcm93ID0gMDsgJHJvdyA8ICRpdGVtczsgJHJvdysrKTogPz4NCgkJPHRyIGNsYXNzPSIiPg0KCQk8P3BocCBmb3JlYWNoKCRoZWFkZXJzIGFzICRoZWFkZXIpOiA/Pg0KCQkJPHRkIGNsYXNzPSIiPiZuYnNwOyZuYnNwOzwvdGQ+DQoJCTw/cGhwIGVuZGZvcmVhY2g7ID8+DQoJCTwvdHI+DQoJPD9waHAgZW5kZm9yOyA/Pg0KPD9waHAgZWxzZWlmIChpc19udW1lcmljKCRpdGVtcykgJiYgaXNfbnVtZXJpYygkaGVhZGVycykpOiA/Pg0KCTw/cGhwIGZvciggJHJvdyA9IDA7ICRyb3cgPCAkaXRlbXM7ICRyb3crKyk6ID8+DQoJCTx0ciBjbGFzcz0iIj4NCgkJPD9waHAgZm9yKCAkY29sdW1uID0gMDsgJGNvbHVtbiA8ICRoZWFkZXJzOyAkY29sdW1uKyspOiA/Pg0KCQkJPHRkIGNsYXNzPSIiPiZuYnNwOyZuYnNwOzwvdGQ+DQoJCTw/cGhwIGVuZGZvcjsgPz4NCgkJPC90cj4NCgk8P3BocCBlbmRmb3I7ID8+DQo8P3BocCBlbmRpZjsgPz4=', 'Rows', 'JGhlYWRlcnMgPSAkZGlzcGxheURhdGFbJ2hlYWRlcnMnXTsNCiRpdGVtcyA9ICRkaXNwbGF5RGF0YVsnaXRlbXMnXTs=', '', '', 1, 5, '', 37, ''),
+(109, 1, 'table', 'Table', '', 'PGRpdiBjbGFzcz0iPD9waHAgZWNobyAkJHRhYmxlX2NvbnRhaW5lcl9jbGFzczsgPz4iPg0KCTx0YWJsZSBpZD0iPD9waHAgZWNobyAkdGFibGVfaWQ7ID8+IiBjbGFzcz0iPD9waHAgZWNobyAkdGFibGVfY2xhc3M7ID8+Ij4NCgkJPHRoZWFkPg0KCQkJPD9waHAgaWYgKGlzX2FycmF5KCRoZWFkZXJzKSk6ID8+DQoJCQkJPD9waHAgaWYgKCRuYW1lKTogPz4NCgkJCQk8dHI+DQoJCQkJCTx0aCBjb2xzcGFuPSI8P3BocCBlY2hvIGNvdW50KCRoZWFkZXJzKTsgPz4iIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PGI+PD9waHAgZWNobyAkbmFtZTsgPz48L2I+PC90aD4NCgkJCQk8L3RyPg0KCQkJCTw/cGhwIGVuZGlmOyA/Pg0KCQkJCTx0cj4NCgkJCQk8P3BocCBmb3JlYWNoKCRoZWFkZXJzIGFzICRjb2RlX25hbWUgPT4gJGhlYWRlcik6ID8+DQoJCQkJCTw/cGhwIA0KCQkJCQkJaWYgKGlzX251bWVyaWMoJGNvZGVfbmFtZSkpDQoJCQkJCQl7DQoJCQkJCQkJJGNvZGVfbmFtZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGhlYWRlcik7DQoJCQkJCQl9DQogCQkJCQk/Pg0KCQkJCQk8dGggZGF0YS1uYW1lPSI8P3BocCBlY2hvICRjb2RlX25hbWU7ID8+Ij48P3BocCBlY2hvICRoZWFkZXI7ID8+PC90aD4NCgkJCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQkJCTwvdHI+DQoJCQk8P3BocCBlbHNlaWYgKGlzX251bWVyaWMoJGhlYWRlcnMpKTogPz4NCgkJCQk8P3BocCBpZiAoJG5hbWUpOiA/Pg0KCQkJCTx0cj4NCgkJCQkJPHRoIGNvbHNwYW49Ijw/cGhwIGVjaG8gKGludCkgJGhlYWRlcnM7ID8+IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPjxiPjw/cGhwIGVjaG8gJG5hbWU7ID8+PC9iPjwvdGg+DQoJCQkJPC90cj4NCgkJCQk8P3BocCBlbmRpZjsgPz4NCgkJCQk8dHIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtOTk5OXB4OyBsZWZ0OiAtOTk5OXB4OyI+DQoJCQkJPD9waHAgZm9yKCAkcm93ID0gMDsgJHJvdyA8ICRoZWFkZXJzOyAkcm93KyspOiA/Pg0KCQkJCQk8dGg+PD9waHAgZWNobyBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRyb3cpOyA/PjwvdGg+DQoJCQkJPD9waHAgZW5kZm9yOyA/Pg0KCQkJCTwvdHI+DQoJCQk8P3BocCBlbmRpZjsgPz4NCgkJPC90aGVhZD4NCgkJPHRib2R5Pg0KCQkJPD9waHAgZWNobyBMYXlvdXRIZWxwZXI6OnJlbmRlcigncm93cycsIFsnaGVhZGVycycgPT4gJGhlYWRlcnMsICdpdGVtcycgPT4gJGl0ZW1zXSk7ID8+DQoJCTwvdGJvZHk+DQoJPC90YWJsZT4NCjwvZGl2Pg0KPD9waHANCi8vIEluaXRpYWxpemUgdGhlIHRhYmxlIGlmIFtpbml0IGlzIG5vdCBzZXRdLCBvciBbaXMgdHJ1ZV0NCi8vIFRvIHN0b3AgaW5pdGlhbGl6YXRpb24gc2V0ICRkaXNwbGF5RGF0YVsnaW5pdCddID0gZmFsc2U7DQppZiAoIWlzc2V0KCRkaXNwbGF5RGF0YVsnaW5pdCddKSB8fCAkZGlzcGxheURhdGFbJ2luaXQnXSkgOg0KPz4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHsNCgl2YXIgPD9waHAgZWNobyAkdGFibGVfaWQ7ID8+ID0gbmV3IERhdGFUYWJsZSgnIzw/cGhwIGVjaG8gJHRhYmxlX2lkOyA/PicsIHsNCgkJcGFnaW5nOiBmYWxzZSwNCgkJc2VsZWN0OiB0cnVlDQoJfSk7DQp9KTsNCjwvc2NyaXB0Pg0KPD9waHAgZW5kaWY7ID8+', 'Table', 'Ly8gRXh0cmFjdCBhbGwga2V5cyBmcm9tICRkaXNwbGF5RGF0YSBhcyBpbmRpdmlkdWFsIHZhcmlhYmxlcy4NCmV4dHJhY3QoJGRpc3BsYXlEYXRhKTsNCg0KLy8gQXNzaWduIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiAkZGlzcGxheURhdGEuDQoNCi8vIFRoZSAndGFibGVfaWQnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhIHJhbmRvbWx5IGdlbmVyYXRlZCB2YWx1ZSBpZiBub3Qgc2V0IG9yIGlzIG51bGwuDQokdGFibGVfaWQgPSAkaWQgPz8gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6cmFuZG9tKDcpOw0KDQovLyBUaGUgJ25hbWUnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBmYWxzZSBpZiBub3Qgc2V0IG9yIGlzIG51bGwuDQokbmFtZSA/Pz0gZmFsc2U7DQoNCi8vIFRoZSAndGFibGVfY2xhc3MnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byAndWstdGFibGUnIGlmIG5vdCBzZXQgb3IgaXMgbnVsbC4NCiR0YWJsZV9jbGFzcyA/Pz0gJ3VrLXRhYmxlJzsNCg0KLy8gVGhlICd0YWJsZV9jb250YWluZXJfY2xhc3MnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byAndWstb3ZlcmZsb3ctYXV0bycgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJHRhYmxlX2NvbnRhaW5lcl9jbGFzcyA/Pz0gJ3VrLW92ZXJmbG93LWF1dG8nOw0KDQovLyBUaGUgJ2hlYWRlcnMnIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBhbiBhcnJheSBvZiBkZWZhdWx0IGhlYWRlciB2YWx1ZXMgaWYgbm90IHNldCBvciBpcyBudWxsLg0KJGhlYWRlcnMgPz89IFtUZXh0OjpfKCdObycpLCBUZXh0OjpfKCdIZWFkZXJzJyksIFRleHQ6Ol8oJ0ZvdW5kJyldOw0KDQovLyBUaGUgJ2l0ZW1zJyBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gNiBpZiBub3Qgc2V0IG9yIGlzIG51bGwuDQokaXRlbXMgPz89IDY7', '', '', 1, 8, '', 38, '{\"0\":\"13\"}'),
+(133, 1, 'demolookfiledisplay', 'File Display Engine', '', 'PD9waHAgaWYgKCFlbXB0eSgkZGlzcGxheURhdGEpICYmICFlbXB0eSgkZGlzcGxheURhdGFbJ2RhdGEnXSkpOiA/Pg0KCTx1bCBjbGFzcz0idWstbGlzdCB1ay1saXN0LWRpdmlkZXIiPg0KCQk8P3BocCBmb3JlYWNoICgkZGlzcGxheURhdGFbJ2RhdGEnXSBhcyAkZmlsZSk6ID8+DQoJCTw/cGhwIGlmICgkZmlsZS0+dGFzayA9PSAnaW1hZ2UnKTogPz4NCgkJPD9waHAgJGltYWdlc1tdID0gICRmaWxlOyA/Pg0KCQk8P3BocCBlbHNlOiA/Pg0KCQk8bGk+DQoJCTxkaXYgaWQ9Ijw/cGhwIGVjaG8gJGZpbGUtPmd1aWQ7ID8+IiBjbGFzcz0idWstYnV0dG9uLWdyb3VwIHVrLXdpZHRoLTEtMSB1ay1tYXJnaW4tc21hbGwtYm90dG9tIj4NCgkJCTxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstd2lkdGgtMy00IiBocmVmPSI8P3BocCBlY2hvICRmaWxlLT5saW5rOyA/PiIgZG93bmxvYWQ+KDw/cGhwIGVjaG8gJGZpbGUtPnR5cGVfbmFtZTsgPz4pIDw/cGhwIGVjaG8gJGZpbGUtPm5hbWU7ID8+PC9hPg0KCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXNlY29uZGFyeSB1ay13aWR0aC0xLTQiIHVrLWljb249InRyYXNoIiBvbmNsaWNrPSJWRE1EZWxldGVGaWxlKCdmaWxlX3ZkbV91cGxvYWRlcicsICc8P3BocCBlY2hvICRmaWxlLT5ndWlkOyA/PicpOyI+PC9idXR0b24+DQoJCTwvZGl2Pg0KCQk8L2xpPg0KCQk8P3BocCBlbmRpZjsgPz4NCgkJPD9waHAgZW5kZm9yZWFjaDsgPz4NCgk8L3VsPg0KCTw/cGhwIGlmICgkaW1hZ2VzICE9PSBbXSk6ID8+DQoJCTx1bCBjbGFzcz0idWstbGlzdCB1ay1saXN0LWRpdmlkZXIiPg0KCQkJPD9waHAgZm9yZWFjaCAoJGltYWdlcyBhcyAkZmlsZSk6ID8+DQoJCQk8bGk+DQoJCQk8ZGl2IGNsYXNzPSJ1ay1oZWlnaHQtbWVkaXVtIHVrLWZsZXggdWstZmxleC1jZW50ZXIgdWstZmxleC1taWRkbGUgdWstYmFja2dyb3VuZC1jb3ZlciB1ay1saWdodCIgZGF0YS1zcmM9Ijw/cGhwIGVjaG8gJGZpbGUtPmxpbms7ID8+IiB1ay1pbWc+DQoJCQk8aDE+PD9waHAgZWNobyAkZmlsZS0+dHlwZV9uYW1lOyA/PjwvaDE+DQoJCQk8L2Rpdj4NCgkJCTxkaXYgaWQ9Ijw/cGhwIGVjaG8gJGZpbGUtPmd1aWQ7ID8+IiBjbGFzcz0idWstYnV0dG9uLWdyb3VwIHVrLXdpZHRoLTEtMSB1ay1tYXJnaW4tc21hbGwtYm90dG9tIj4NCgkJCQk8YSBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXdpZHRoLTMtNCIgaHJlZj0iPD9waHAgZWNobyAkZmlsZS0+bGluazsgPz4iIGRvd25sb2FkPig8P3BocCBlY2hvICRmaWxlLT50eXBlX25hbWU7ID8+KSA8P3BocCBlY2hvICRmaWxlLT5uYW1lOyA/PjwvYT4NCgkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tc2Vjb25kYXJ5IHVrLXdpZHRoLTEtNCIgdWstaWNvbj0idHJhc2giIG9uY2xpY2s9IlZETURlbGV0ZUZpbGUoJ2ZpbGVfdmRtX3VwbG9hZGVyJywgJzw/cGhwIGVjaG8gJGZpbGUtPmd1aWQ7ID8+Jyk7Ij48L2J1dHRvbj4NCgkJCTwvZGl2Pg0KCQkJPC9saT4NCgkJCTw/cGhwIGVuZGZvcmVhY2g7ID8+DQoJCTwvdWw+DQoJPD9waHAgZW5kaWY7ID8+DQo8P3BocCBlbmRpZjsgPz4=', 'File Display Engine', 'JGltYWdlcyA9IFtdOw==', '', '', 1, 1, '', 48, '');
--
-- 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'),
+(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\"}}', '', '{}', '{\"dynamic_get_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_custom_admin_view_model\":\"0\",\"custom_admin_view_model\":\"\",\"power_custom_admin_view_model\":[],\"add_custom_admin_view_html\":\"0\",\"custom_admin_view_html\":\"\",\"power_custom_admin_view_html\":[],\"add_custom_admin_view\":\"0\",\"custom_admin_view\":\"\",\"power_custom_admin_view\":[],\"add_custom_admin_view_controller\":\"0\",\"custom_admin_view_controller\":\"\",\"power_custom_admin_view_controller\":[],\"add_custom_admin_views_model\":\"0\",\"custom_admin_views_model\":\"\",\"power_custom_admin_views_model\":[],\"add_custom_admin_views_html\":\"0\",\"custom_admin_views_html\":\"\",\"power_custom_admin_views_html\":[],\"add_custom_admin_views\":\"0\",\"custom_admin_views\":\"\",\"power_custom_admin_views\":[],\"add_custom_admin_views_controller\":\"0\",\"custom_admin_views_controller\":\"\",\"power_custom_admin_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, 13, '', 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_custom_code`
+--
+
+INSERT INTO `#__componentbuilder_custom_code` (`id`, `code`, `component`, `comment_type`, `from_line`, `function_name`, `hashtarget`, `hashendtarget`, `path`, `system_name`, `target`, `to_line`, `type`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
+(5, 'CS8qKg0KCSAqIENoYW5nZSB0byBuaWNlIGZhbmN5IGRhdGUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RGF0ZSgkZGF0ZSwgJGNoZWNrX3N0YW1wID0gdHJ1ZSkNCgl7DQoJCWlmICgkY2hlY2tfc3RhbXAgJiYgIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJGRhdGUpKQ0KCQl7DQoJCQkkZGF0ZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ2pTIFxvXGYgRiBZJywkZGF0ZSk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IGRhdGUgYmFzZWQgaW4gcGVyaW9kIHBhc3QNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RHluYW1pY0RhdGUoJGRhdGUsICRjaGVja19zdGFtcCA9IHRydWUpDQoJew0KCQlpZiAoJGNoZWNrX3N0YW1wICYmICFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCRkYXRlKSkNCgkJew0KCQkJJGRhdGUgPSBzdHJ0b3RpbWUoJGRhdGUpOw0KCQl9DQoJCS8vIG9sZGVyIHRoZW4geWVhcg0KCQkkbGFzdHllYXIgPSBkYXRlKCJZIiwgc3RydG90aW1lKCItMSB5ZWFyIikpOw0KCQkkdHJhZ2V0eWVhciA9IGRhdGUoIlkiLCAkZGF0ZSk7DQoJCWlmICgkdHJhZ2V0eWVhciA8PSAkbGFzdHllYXIpDQoJCXsNCgkJCXJldHVybiBkYXRlKCdtL2QveScsICRkYXRlKTsNCgkJfQ0KCQkvLyBzYW1lIGRheQ0KCQkkeWVzdGVyZGF5ID0gc3RydG90aW1lKCItMSBkYXkiKTsNCgkJaWYgKCRkYXRlID4gJHllc3RlcmRheSkNCgkJew0KCQkJcmV0dXJuIGRhdGUoJ2c6aSBBJywgJGRhdGUpOw0KCQl9DQoJCS8vIGp1c3QgbW9udGggZGF5DQoJCXJldHVybiBkYXRlKCdNIGonLCAkZGF0ZSk7DQoJfQ0KDQoJLyoqDQoJICogQ2hhbmdlIHRvIG5pY2UgZmFuY3kgZGF5IHRpbWUgYW5kIGRhdGUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RGF5VGltZURhdGUoJHRpbWUsICRjaGVja19zdGFtcCA9IHRydWUpDQoJew0KCQlpZiAoJGNoZWNrX3N0YW1wICYmICFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCR0aW1lKSkNCgkJew0KCQkJJHRpbWUgPSBzdHJ0b3RpbWUoJHRpbWUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCdEIGdhIGpTIFxvXGYgRiBZJywkdGltZSk7DQoJfQ0KDQoJLyoqDQoJICogQ2hhbmdlIHRvIG5pY2UgZmFuY3kgdGltZSBhbmQgZGF0ZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFuY3lEYXRlVGltZSgkdGltZSwgJGNoZWNrX3N0YW1wID0gdHJ1ZSkNCgl7DQoJCWlmICgkY2hlY2tfc3RhbXAgJiYgIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJHRpbWUpKQ0KCQl7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgkdGltZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJyhHOmkpIGpTIFxvXGYgRiBZJywkdGltZSk7DQoJfQ0KDQoJLyoqDQoJICogQ2hhbmdlIHRvIG5pY2UgaG91cjptaW51dGVzIHRpbWUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5VGltZSgkdGltZSwgJGNoZWNrX3N0YW1wID0gdHJ1ZSkNCgl7DQoJCWlmICgkY2hlY2tfc3RhbXAgJiYgIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJHRpbWUpKQ0KCQl7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgkdGltZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ0c6aScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqIHNldCB0aGUgZGF0ZSBkYXkgYXMgU3VuZGF5IHRocm91Z2ggU2F0dXJkYXkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldERheU5hbWUoJGRhdGUsICRjaGVja19zdGFtcCA9IHRydWUpDQoJew0KCQlpZiAoJGNoZWNrX3N0YW1wICYmICFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCRkYXRlKSkNCgkJew0KCQkJJGRhdGUgPSBzdHJ0b3RpbWUoJGRhdGUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCdsJywgJGRhdGUpOw0KCX0NCg0KCS8qKg0KCSAqIHNldCB0aGUgZGF0ZSBtb250aCBhcyBKYW51YXJ5IHRocm91Z2ggRGVjZW1iZXINCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldE1vbnRoTmFtZSgkZGF0ZSwgJGNoZWNrX3N0YW1wID0gdHJ1ZSkNCgl7DQoJCWlmICgkY2hlY2tfc3RhbXAgJiYgIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJGRhdGUpKQ0KCQl7DQoJCQkkZGF0ZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ0YnLCAkZGF0ZSk7DQoJfQ0KDQoJLyoqDQoJICogc2V0IHRoZSBkYXRlIGRheSBhcyAxc3QNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldERheSgkZGF0ZSwgJGNoZWNrX3N0YW1wID0gdHJ1ZSkNCgl7DQoJCWlmICgkY2hlY2tfc3RhbXAgJiYgIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJGRhdGUpKQ0KCQl7DQoJCQkkZGF0ZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ2pTJywgJGRhdGUpOw0KCX0NCg0KCS8qKg0KCSAqIHNldCB0aGUgZGF0ZSBtb250aCBhcyA1DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRNb250aCgkZGF0ZSwgJGNoZWNrX3N0YW1wID0gdHJ1ZSkNCgl7DQoJCWlmICgkY2hlY2tfc3RhbXAgJiYgIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJGRhdGUpKQ0KCQl7DQoJCQkkZGF0ZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ24nLCAkZGF0ZSk7DQoJfQ0KDQoJLyoqDQoJICogc2V0IHRoZSBkYXRlIHllYXIgYXMgMjAwNCAoZm9yIGNoYXJ0cykNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFllYXIoJGRhdGUsICRjaGVja19zdGFtcCA9IHRydWUpDQoJew0KCQlpZiAoJGNoZWNrX3N0YW1wICYmICFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCRkYXRlKSkNCgkJew0KCQkJJGRhdGUgPSBzdHJ0b3RpbWUoJGRhdGUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCdZJywgJGRhdGUpOw0KCX0NCg0KCS8qKg0KCSAqIHNldCB0aGUgZGF0ZSBhcyAyMDA0LzA1IChmb3IgY2hhcnRzKQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0WWVhck1vbnRoKCRkYXRlLCAkc3BhY2VyID0gJy8nLCAkY2hlY2tfc3RhbXAgPSB0cnVlKQ0KCXsNCgkJaWYgKCRjaGVja19zdGFtcCAmJiAhc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkZGF0ZSkpDQoJCXsNCgkJCSRkYXRlID0gc3RydG90aW1lKCRkYXRlKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnWScgLiAkc3BhY2VyIC4gJ20nLCAkZGF0ZSk7DQoJfQ0KDQoJLyoqDQoJICogc2V0IHRoZSBkYXRlIGFzIDIwMDQvMDUvMDMgKGZvciBjaGFydHMpDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRZZWFyTW9udGhEYXkoJGRhdGUsICRzcGFjZXIgPSAnLycsICRjaGVja19zdGFtcCA9IHRydWUpDQoJew0KCQlpZiAoJGNoZWNrX3N0YW1wICYmICFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCRkYXRlKSkNCgkJew0KCQkJJGRhdGUgPSBzdHJ0b3RpbWUoJGRhdGUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCdZJyAuICRzcGFjZXIgLiAnbScgLiAkc3BhY2VyIC4gJ2QnLCAkZGF0ZSk7DQoJfQ0KDQoJLyoqDQoJICogc2V0IHRoZSBkYXRlIGFzIDAzLzA1LzIwMDQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldERheU1vbnRoWWVhcigkZGF0ZSwgJHNwYWNlciA9ICcvJywgJGNoZWNrX3N0YW1wID0gdHJ1ZSkNCgl7DQoJCWlmICgkY2hlY2tfc3RhbXAgJiYgIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJGRhdGUpKQ0KCQl7DQoJCQkkZGF0ZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ2QnIC4gJHNwYWNlciAuICdtJyAuICRzcGFjZXIgLiAnWScsICRkYXRlKTsNCgl9DQoNCgkvKioNCgkgKiBDaGVjayBpZiBzdHJpbmcgaXMgYSB2YWxpZCB0aW1lIHN0YW1wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkVGltZVN0YW1wKCR0aW1lc3RhbXApDQoJew0KCQlyZXR1cm4gKChpbnQpICR0aW1lc3RhbXAgPT09ICR0aW1lc3RhbXApDQoJCSYmICgkdGltZXN0YW1wIDw9IFBIUF9JTlRfTUFYKQ0KCQkmJiAoJHRpbWVzdGFtcCA+PSB+UEhQX0lOVF9NQVgpOw0KCX0NCg0KCS8qKg0KCSAqIENoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIGRhdGUNCgkgKiBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jaGVja2RhdGUucGhwIzExMzIwNQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNWYWxpZGF0ZURhdGUoJGRhdGUsICRmb3JtYXQgPSAnWS1tLWQgSDppOnMnKQ0KCXsNCgkJJGQgPSBEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgkZm9ybWF0LCAkZGF0ZSk7DQoJCXJldHVybiAkZCAmJiAkZC0+Zm9ybWF0KCRmb3JtYXQpID09ICRkYXRlOw0KCX0=', '', 1, '', 'niceFancyDate', '', '', '', 'helper::fancyDate($date)', 2, '', '', '', 1, '2017-02-11 02:02:46', '2024-09-16 00:16:48', 18, '', 3),
+(185, 'bmFtZXNwYWNlIFtbW05hbWVzcGFjZVByZWZpeF1dXVxDb21wb25lbnRcW1tbQ29tcG9uZW50TmFtZXNwYWNlXV1dXEFkbWluaXN0cmF0b3JcQ29udHJvbGxlcjsNCg0KdXNlIEpvb21sYVxDTVNcTVZDXENvbnRyb2xsZXJcQmFzZUNvbnRyb2xsZXI7DQoNCi8vIE5vIGRpcmVjdCBhY2Nlc3MgdG8gdGhpcyBmaWxlDQpcZGVmaW5lZCgnX0pFWEVDJykgb3IgZGllOw0KDQovKioNCiAqIFtbW0NvbXBvbmVudF1dXSBEb3dubG9hZCBDb250cm9sbGVyDQogKg0KICogQHNpbmNlIDUuMC4yDQogKi8NCmNsYXNzIERvd25sb2FkQ29udHJvbGxlciBleHRlbmRzIEJhc2VDb250cm9sbGVyDQp7DQoJLyoqDQoJICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLg0KCSAqDQoJICogQHZhciBcSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgJGFwcDsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRjb25maWcgQW4gb3B0aW9uYWwgYXNzb2NpYXRpdmUgYXJyYXkgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4NCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25maWcgPSBbXSkNCgl7DQoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJGNvbmZpZyk7DQoNCgkJLy8gSW5pdGlhbGl6ZSB0aGUgYXBwbGljYXRpb24NCgkJJHRoaXMtPmFwcCA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXRBcHBsaWNhdGlvbigpOw0KDQoJCS8vIFJlZ2lzdGVyIHRhc2tzDQoJCSR0aGlzLT5yZWdpc3RlclRhc2soJ2ZpbGUnLCAnZG93bmxvYWRGaWxlJyk7DQoJCSR0aGlzLT5yZWdpc3RlclRhc2soJ2ltYWdlJywgJ2Rvd25sb2FkSW1hZ2UnKTsNCgkJJHRoaXMtPnJlZ2lzdGVyVGFzaygnbWVkaWEnLCAnZG93bmxvYWRNZWRpYScpOw0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZXMgZmlsZSBkb3dubG9hZHMuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGRvd25sb2FkRmlsZSgpDQoJew0KCQkkdGhpcy0+cHJvY2Vzc0Rvd25sb2FkKHRydWUpOw0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZXMgaW1hZ2UgZG93bmxvYWRzLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkb3dubG9hZEltYWdlKCkNCgl7DQoJCSR0aGlzLT5wcm9jZXNzRG93bmxvYWQoZmFsc2UpOw0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZXMgbWVkaWEgZG93bmxvYWRzLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkb3dubG9hZE1lZGlhKCkNCgl7DQoJCSR0aGlzLT5wcm9jZXNzRG93bmxvYWQoZmFsc2UpOw0KCX0NCg0KCS8qKg0KCSAqIFByb2Nlc3NlcyB0aGUgZG93bmxvYWQgcmVxdWVzdC4NCgkgKg0KCSAqIEBwYXJhbSBib29sICRkb3dubG9hZCBXaGV0aGVyIHRvIGZvcmNlIGRvd25sb2FkICh0cnVlKSBvciBkaXNwbGF5IGlubGluZSAoZmFsc2UpLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBwcm9jZXNzRG93bmxvYWQoYm9vbCAkZG93bmxvYWQpDQoJew0KCQkkaW5wdXQgICAgPSAkdGhpcy0+YXBwLT5pbnB1dDsNCgkJJGZpbGVHdWlkID0gJGlucHV0LT5nZXRTdHJpbmcoJ2ZpbGUnKTsNCg0KCQlpZiAoJGZpbGVHdWlkKQ0KCQl7DQoJCQkkZmlsZURldGFpbHMgPSAkdGhpcy0+Z2V0RmlsZURldGFpbHMoJGZpbGVHdWlkKTsNCg0KCQkJaWYgKCRmaWxlRGV0YWlscykNCgkJCXsNCgkJCQkkdGhpcy0+c2VuZEZpbGUoJGZpbGVEZXRhaWxzLCAkZG93bmxvYWQpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKCdEb3dubG9hZCBmYWlsZWQsIHlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBmaWxlIScsICdlcnJvcicpOw0KCQkJCSR0aGlzLT5hcHAtPnJlZGlyZWN0KCdpbmRleC5waHAnKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKCdObyBmaWxlIHNwZWNpZmllZC4nLCAnZXJyb3InKTsNCgkJCSR0aGlzLT5hcHAtPnJlZGlyZWN0KCdpbmRleC5waHAnKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFNlbmRzIHRoZSBmaWxlIHRvIHRoZSBjbGllbnQuDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgJGZpbGVEZXRhaWxzIFRoZSBkZXRhaWxzIG9mIHRoZSBmaWxlIHRvIHNlbmQuDQoJICogQHBhcmFtIGJvb2wgICRkb3dubG9hZCAgICBXaGV0aGVyIHRvIGZvcmNlIGRvd25sb2FkICh0cnVlKSBvciBkaXNwbGF5IGlubGluZSAoZmFsc2UpLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZW5kRmlsZShhcnJheSAkZmlsZURldGFpbHMsIGJvb2wgJGRvd25sb2FkKQ0KCXsNCgkJJGZpbGVQYXRoID0gJGZpbGVEZXRhaWxzWydmaWxlX3BhdGgnXSA/PyBudWxsOw0KCQkkZmlsZU5hbWUgPSAkZmlsZURldGFpbHNbJ25hbWUnXSA/PyBudWxsOw0KDQoJCWlmICgkZmlsZVBhdGggIT09IG51bGwgJiYgJGZpbGVOYW1lICE9PSBudWxsICYmIGlzX2ZpbGUoJGZpbGVQYXRoKSAmJiBpc19yZWFkYWJsZSgkZmlsZVBhdGgpKQ0KCQl7DQoJCQkvLyBDbGVhbiB0aGUgb3V0cHV0IGJ1ZmZlcg0KCQkJaWYgKG9iX2dldF9sZXZlbCgpKQ0KCQkJew0KCQkJCW9iX2VuZF9jbGVhbigpOw0KCQkJfQ0KDQoJCQkvLyBHZXQgYW5kIHZhbGlkYXRlIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMNCgkJCSRmaWxlU2l6ZSA9IGlzc2V0KCRmaWxlRGV0YWlsc1snc2l6ZSddKSAmJiBpc19udW1lcmljKCRmaWxlRGV0YWlsc1snc2l6ZSddKSAmJiAkZmlsZURldGFpbHNbJ3NpemUnXSAhPSAwDQoJCQkJPyAoaW50KSAkZmlsZURldGFpbHNbJ3NpemUnXSA6IGZpbGVzaXplKCRmaWxlUGF0aCk7DQoNCgkJCS8vIEdldCBhbmQgdmFsaWRhdGUgdGhlIE1JTUUgdHlwZQ0KCQkJJG1pbWVUeXBlID0gIWVtcHR5KCRmaWxlRGV0YWlsc1snbWltZSddKSAmJiBpc19zdHJpbmcoJGZpbGVEZXRhaWxzWydtaW1lJ10pICYmIHRyaW0oJGZpbGVEZXRhaWxzWydtaW1lJ10pICE9PSAnJw0KCQkJCT8gdHJpbSgkZmlsZURldGFpbHNbJ21pbWUnXSkgOiBTdXBlcl9fX2YxMWRjNzkwXzcxM2VfNDcwNl85YTg1X2EzMThlZDNhZDU2ZV9fX1Bvd2VyOjptaW1lVHlwZSgkZmlsZVBhdGgpOw0KDQoJCQkkZGlzcG9zaXRpb24gPSAkZG93bmxvYWQgPyAnYXR0YWNobWVudCcgOiAnaW5saW5lJzsNCg0KCQkJLy8gU2V0IGhlYWRlcnMNCgkJCSR0aGlzLT5hcHAtPnNldEhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbicsICdGaWxlIFRyYW5zZmVyJywgdHJ1ZSk7DQoJCQkkdGhpcy0+YXBwLT5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICRtaW1lVHlwZSwgdHJ1ZSk7DQoJCQkkdGhpcy0+YXBwLT5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgKHN0cmluZykgJGZpbGVTaXplLCB0cnVlKTsNCgkJCSR0aGlzLT5hcHAtPnNldEhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICRkaXNwb3NpdGlvbiAuICc7IGZpbGVuYW1lPSInIC4gYmFzZW5hbWUoJGZpbGVOYW1lKSAuICciJywgdHJ1ZSk7DQoJCQkkdGhpcy0+YXBwLT5zZXRIZWFkZXIoJ1ByYWdtYScsICdwdWJsaWMnLCB0cnVlKTsNCgkJCSR0aGlzLT5hcHAtPnNldEhlYWRlcignRXhwaXJlcycsICcwJywgdHJ1ZSk7DQoJCQkkdGhpcy0+YXBwLT5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wJywgdHJ1ZSk7DQoNCgkJCS8vIFNlbmQgaGVhZGVycw0KCQkJJHRoaXMtPmFwcC0+c2VuZEhlYWRlcnMoKTsNCg0KCQkJLy8gT3V0cHV0IHRoZSBmaWxlDQoJCQlyZWFkZmlsZSgkZmlsZVBhdGgpOw0KDQoJCQkvLyBDbG9zZSB0aGUgYXBwbGljYXRpb24NCgkJCSR0aGlzLT5hcHAtPmNsb3NlKCk7DQoJCX0gZWxzZSB7DQoJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZSgnRmlsZSBub3QgZm91bmQuJywgJ2Vycm9yJyk7DQoJCQkkdGhpcy0+YXBwLT5yZWRpcmVjdCgnaW5kZXgucGhwJyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBSZXRyaWV2ZXMgZmlsZSBkZXRhaWxzIGJhc2VkIG9uIEdVSUQuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkIFRoZSBHVUlEIG9mIHRoZSBmaWxlLg0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsIFRoZSBmaWxlIGRldGFpbHMgb3IgbnVsbCBpZiBub3QgZm91bmQgb3IgaW5hY2Nlc3NpYmxlLg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RmlsZURldGFpbHMoc3RyaW5nICRndWlkKTogP2FycmF5DQoJew0KCQl0cnkgew0KCQkJcmV0dXJuIFN1cGVyX19fODg0ZWNhNzhfMjgxZl80ZWFiX2I5NjJfZDk3ZTM1NWFmMTZkX19fUG93ZXI6Ol8oJ0ZpbGUuTWFuYWdlcicpLT5kb3dubG9hZCgkZ3VpZCk7DQoJCX0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsNCgkJCS8vIExvZyBleGNlcHRpb24gKGFzc3VtZWQgdGhhdCBhIGxvZ2dlciBpcyBhdmFpbGFibGUpDQoJCQkvLyAkdGhpcy0+bG9nZ2VyLT5lcnJvcignRXJyb3IgcmV0cmlldmluZyBmaWxlIGRldGFpbHM6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpKTsNCg0KCQkJLy8gRGlzcGxheSBhIGdlbmVyaWMgZXJyb3IgbWVzc2FnZQ0KCQkJJHRoaXMtPmFwcC0+ZW5xdWV1ZU1lc3NhZ2UoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJldHJpZXZpbmcgdGhlIGZpbGUuJywgJ2Vycm9yJyk7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQp9', '', 1, '', 'dynamicDownloadController', '', '', '', 'Dynamic Download Controller', 2, '', '', '', 1, '2018-10-30 16:20:34', '2024-09-14 02:50:42', 7, '', 111),
+(338, 'IyMgQ29udHJpYnV0b3JzDQpUaGlzIHByb2plY3QgZXhpc3RzIHRoYW5rcyB0byBhbGwgdGhlIHBlb3BsZSB3aG8gY29udHJpYnV0ZSB0byB0aGUgW0pvb21sYSBDb21wb25lbnQgQnVpbGRlciBQcm9qZWN0XShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1Db21wb25lbnQtQnVpbGRlcikuDQoNClshW0NvbnRyaWJ1dG9yc10oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL2NvbnRyaWJ1dG9ycy5zdmc/d2lkdGg9ODkwJmJ1dHRvbj1mYWxzZSldKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL2dyYXBocy9jb250cmlidXRvcnMpDQoNCiMjIyBCYWNrZXJzDQpUaGFuayB5b3UgdG8gYWxsIG91ciBiYWNrZXJzISDwn5mPIFtbQmVjb21lIGEgYmFja2VyXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIjYmFja2VyKV0NCg0KWyFbT3VyIEJhY2tlcnMgb24gb3BlbmNvbGxlY3RpdmVdKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9iYWNrZXJzLnN2Zz93aWR0aD04OTApXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIjYmFja2VycykNCg0KIyMjIFNwb25zb3JzDQpTdXBwb3J0IHRoaXMgcHJvamVjdCBieSBiZWNvbWluZyBhIHNwb25zb3IuIFlvdXIgbG9nbyB3aWxsIHNob3cgdXAgaGVyZSB3aXRoIGEgbGluayB0byB5b3VyIHdlYnNpdGUuIFtbQmVjb21lIGEgc3BvbnNvcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyI3Nwb25zb3IpXQ0KDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8wL2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8wL3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xL2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xL3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8yL2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8yL3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8zL2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8zL3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci80L2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci80L3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci81L2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci81L3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci82L2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci82L3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci83L2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci83L3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci84L2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci84L3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci85L2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci85L3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xMC9hdmF0YXIuc3ZnKV0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3Nwb25zb3IvMTAvd2Vic2l0ZSkNClshW1Nwb25zb3JdKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9zcG9uc29yLzExL2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xMS93ZWJzaXRlKQ0KWyFbU3BvbnNvcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3Nwb25zb3IvMTIvYXZhdGFyLnN2ZyldKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9zcG9uc29yLzEyL3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xMy9hdmF0YXIuc3ZnKV0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3Nwb25zb3IvMTMvd2Vic2l0ZSkNClshW1Nwb25zb3JdKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9zcG9uc29yLzE0L2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xNC93ZWJzaXRlKQ0KWyFbU3BvbnNvcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3Nwb25zb3IvMTUvYXZhdGFyLnN2ZyldKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9zcG9uc29yLzE1L3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xNi9hdmF0YXIuc3ZnKV0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3Nwb25zb3IvMTYvd2Vic2l0ZSkNClshW1Nwb25zb3JdKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9zcG9uc29yLzE3L2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xNy93ZWJzaXRlKQ0KWyFbU3BvbnNvcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3Nwb25zb3IvMTgvYXZhdGFyLnN2ZyldKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9zcG9uc29yLzE4L3dlYnNpdGUpDQpbIVtTcG9uc29yXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8xOS9hdmF0YXIuc3ZnKV0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3Nwb25zb3IvMTkvd2Vic2l0ZSkNClshW1Nwb25zb3JdKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9zcG9uc29yLzIwL2F2YXRhci5zdmcpXShodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvc3BvbnNvci8yMC93ZWJzaXRlKQ==', '', 1, '', 'readMEcontributors', '', '', '', 'README - Contributors 2 JCB', 2, '', '', '', 1, '2020-11-17 17:16:23', '2020-11-17 17:26:34', 3, '', 182),
+(360, 'CQkvLyBTZXQgdGhlIEdVSUQgaWYgZW1wdHkgb3Igbm90IHZhbGlkDQoJCWlmIChlbXB0eSgkZGF0YVsnZ3VpZCddKSAmJiAkZGF0YVsnaWQnXSA+IDApDQoJCXsNCgkJCS8vIGdldCB0aGUgZXhpc3Rpbmcgb25lDQoJCQkkZGF0YVsnZ3VpZCddID0gKHN0cmluZykgU3VwZXJfX19kYjg3YzMzOV81YmI2XzQyOTFfYTdlZl8yYzQ4ZWExYjA2YmNfX19Qb3dlcjo6dmFyKCdbW1t2aWV3XV1dJywgJGRhdGFbJ2lkJ10sICdpZCcsICdndWlkJyk7DQoJCX0NCg0KCQkvLyBTZXQgdGhlIEdVSUQgaWYgZW1wdHkgb3Igbm90IHZhbGlkDQoJCXdoaWxlICghU3VwZXJfX185YzUxM2JhZl9iMjc5XzQzZmRfYWUyOV9hNTg1YzhjYmM0ZjBfX19Qb3dlcjo6dmFsaWQoJGRhdGFbJ2d1aWQnXSwgIltbW3ZpZXddXV0iLCAkZGF0YVsnaWQnXSkpDQoJCXsNCgkJCS8vIG11c3QgYWx3YXlzIGJlIHNldA0KCQkJJGRhdGFbJ2d1aWQnXSA9IChzdHJpbmcpIFN1cGVyX19fOWM1MTNiYWZfYjI3OV80M2ZkX2FlMjlfYTU4NWM4Y2JjNGYwX19fUG93ZXI6OmdldCgpOw0KCQl9', '', 1, 1646, 'saveGUIDPower', '6__ebdedf217dd264bb88f9418ba0092c96', '', '', 'save GUID (Power)', 2, 1652, '', '', 1, '2023-06-29 16:14:44', '2023-06-29 16:15:32', 2, '', 103),
+(362, 'CQkvLyBPbmx5IGxvYWQgdGhlIEdVSUQgaWYgbmV3IGl0ZW0gKG9yIGVtcHR5KQ0KCQlpZiAoMCA9PSAkaWQgfHwgISgkdmFsID0gJGZvcm0tPmdldFZhbHVlKCdndWlkJykpKQ0KCQl7DQoJCQkkZm9ybS0+c2V0VmFsdWUoJ2d1aWQnLCBudWxsLCBTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjpnZXQoKSk7DQoJCX0NCg==', '', 1, 974, 'setGUIDFormPower', '9__dc008c80098451abad327b4cb92e9611', '', '', 'Set GUID in Form (power)', 2, 980, '', '', 1, '2023-06-29 16:46:40', '2024-01-25 14:23:31', 2, '', 103),
+(387, 'CQkJLy8gQ2hlY2sgdGhhdCB0aGUgUEhQIGNvbmZpZ3VyYXRpb25zIGFyZSBzdWZmaWNpZW50IA0KCQkJaWYgKCR0aGlzLT5jbGFzc0V4aXN0cyhTdXBlcl9fXzRiMmQ2ZjI4XzM0NmVfNDZlY19iZjI0X2Q0NzAzMTljY2EyZF9fX1Bvd2VyOjpjbGFzcykpDQoJCQl7DQoJCQkJKG5ldyBTdXBlcl9fXzRiMmQ2ZjI4XzM0NmVfNDZlY19iZjI0X2Q0NzAzMTljY2EyZF9fX1Bvd2VyKCkpLT5ydW4oKTsNCgkJCX0=', '', 1, '', 'phpConfigurationCheckCall', '', '', '', 'php Configuration Check (call)', 2, '', '', '', 1, '2024-04-20 13:19:08', '2024-07-27 15:24:34', 6, '', 209),
+(388, 'CQkJLy8gQ2hlY2sgdGhhdCB0aGUgZGF0YWJhc2UgaXMgdXAtdG8gZGF0ZQ0KCQkJaWYgKCR0aGlzLT5jbGFzc0V4aXN0cyhTdXBlcl9fXzcwOWQ3Mjk0XzlhNDNfNDZlMl9iNjRlX2QxNmExNmYwZWFiMV9fX1Bvd2VyOjpjbGFzcykpDQoJCQl7DQoJCQkJKG5ldyBTdXBlcl9fXzcwOWQ3Mjk0XzlhNDNfNDZlMl9iNjRlX2QxNmExNmYwZWFiMV9fX1Bvd2VyKCkpLT5ydW4oKTsNCgkJCX0=', '', 1, '', 'databaseSchemaCheckCall', '', '', '', 'Database Schema Check (call)', 2, '', '', '', 1, '2024-04-20 13:21:02', '2024-09-15 23:56:25', 13, '', 209),
+(396, 'CQkvLyBTdGFydCB0aGUgb3B0aW9ucyBhcnJheQ0KCQkkb3B0aW9ucyA9IFtdOw0KCQkvLyBHZXQgdGhlIGV4dGVuc2lvbnMgbGlzdC4NCgkJJGV4dGVuc2lvbkxpc3QgPSBTdXBlcl9fX2YxMWRjNzkwXzcxM2VfNDcwNl85YTg1X2EzMThlZDNhZDU2ZV9fX1Bvd2VyOjpnZXRGaWxlRXh0ZW5zaW9ucygnW1tbYXJnMF1dXScsIHRydWUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGV4dGVuc2lvbkxpc3QpKQ0KCQl7DQoJCQlmb3JlYWNoKCRleHRlbnNpb25MaXN0IGFzICR0eXBlID0+ICRleHRlbnNpb25zKQ0KCQkJew0KCQkJCWZvcmVhY2goJGV4dGVuc2lvbnMgYXMgJGV4dGVuc2lvbikNCgkJCQl7DQoJCQkJCSRvcHRpb25zW10gPSBIdG1sOjpfKCdzZWxlY3Qub3B0aW9uJywgJGV4dGVuc2lvbiwgJGV4dGVuc2lvbiAuICcgWyAnIC4gJHR5cGUgLiAnIF0nKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRvcHRpb25zOw0K', '', 1, '', 'getFileExtensionsOptions', '', '', '', 'getFileExtensionsOptions', 2, '', '', '', 1, '2020-09-08 01:36:53', '2024-09-15 22:56:42', 3, '', 214),
+(397, 'CQkvKiogQHZhciBKb29tbGFcQ01TXFdlYkFzc2V0XFdlYkFzc2V0TWFuYWdlciAkd2EgKi8NCgkJJHdhID0gJHRoaXMtPmdldERvY3VtZW50KCktPmdldFdlYkFzc2V0TWFuYWdlcigpOw0KDQoJCS8vIHNldCB0aGUgdXJsIGFzIG5lZWRlZA0KCQkkYXBwID0gRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKTsNCgkJJHVybCA9ICcnOw0KCQlpZiAoJGFwcC0+aXNDbGllbnQoJ3NpdGUnKSkNCgkJew0KCQkJJHVybCA9IEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpyb290KCk7DQoJCX0NCg0KCQkvLyBnZXQgdGhlIGZvcm0gdG9rZW4NCgkJJHRva2VuID0gSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpOw0KCQkkZW50aXR5ID0gJHRoaXMtPml0ZW0tPmd1aWQgPz8gMDsNCgkJJHRhcmdldCA9IGJhc2U2NF9lbmNvZGUoJ1tbW3ZpZXddXV0nKTsNCg0KCQkvLyBEZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB1cGxvYWRlcg0KCQkkdXBsb2FkZXJDb25maWcgPSBbDQoJCQkiZW5kcG9pbnRfdHlwZSIgPT4gInskdXJsfWluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguW1tbYXJnMl1dXSZmb3JtYXQ9anNvbiZyYXc9dHJ1ZSZ7JHRva2VufT0xJnRhcmdldD17JHRhcmdldH0iLA0KCQkJInRhcmdldF9jbGFzcyIgPT4gIltbW2FyZzBdXV0iLA0KCQkJIltbW2FyZzFdXV0iID0+IFsNCgkJCQkiZW5kcG9pbnRfdXBsb2FkIiA9PiAieyR1cmx9aW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9YWpheC5bW1thcmczXV1dJmZvcm1hdD1qc29uJnJhdz10cnVlJnskdG9rZW59PTEmZW50aXR5PXskZW50aXR5fSZ0YXJnZXQ9eyR0YXJnZXR9IiwNCgkJCQkiZW5kcG9pbnRfZGlzcGxheSIgPT4gInskdXJsfWluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguW1tbYXJnNF1dXSZmb3JtYXQ9anNvbiZyYXc9dHJ1ZSZ7JHRva2VufT0xJmVudGl0eT17JGVudGl0eX0mdGFyZ2V0PXskdGFyZ2V0fSIsDQoJCQkJImVuZHBvaW50X2RlbGV0ZSIgPT4gInskdXJsfWluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguW1tbYXJnNV1dXSZmb3JtYXQ9anNvbiZyYXc9dHJ1ZSZ7JHRva2VufT0xIiwNCgkJCV0sDQoJCV07DQoNCgkJLy8gQ29udmVydCB0aGUgUEhQIGFycmF5IHRvIGEgSmF2YVNjcmlwdCBvYmplY3QNCgkJJHVwbG9hZGVyQ29uZmlnSnNvbiA9IGpzb25fZW5jb2RlKCR1cGxvYWRlckNvbmZpZyk7DQoNCgkJLy8gQWRkIHRoZSBpbmxpbmUgc2NyaXB0IHdpdGggdGhlIHVwbG9hZGVyIGNvbmZpZ3VyYXRpb24NCgkJJHdhLT5hZGRJbmxpbmVTY3JpcHQoIg0KCQkJd2luZG93LlZETSA9IHdpbmRvdy5WRE0gfHwge307DQoJCQl3aW5kb3cuVkRNLnVpa2l0ID0gd2luZG93LlZETS51aWtpdCB8fCB7fTsNCgkJCXdpbmRvdy5WRE0udWlraXQuY29uZmlnID0gJHVwbG9hZGVyQ29uZmlnSnNvbjsNCgkJIik7', '', 1, '', 'vdmUploaderConfig', '', '', '', 'vdmUploaderConfig', 2, '', '', '', 1, '2024-09-10 01:01:26', '2024-09-16 18:11:49', 9, '', 215),
+(398, 'CQlIdG1sOjpfKCdzY3JpcHQnLCAnbWVkaWEvY29tX1tbW2NvbXBvbmVudF1dXS91aWtpdC12My9qcy91aWtpdC5taW4uanMnLCBbJ3ZlcnNpb24nID0+ICdhdXRvJ10pOw0KCQlIdG1sOjpfKCdzY3JpcHQnLCAnbWVkaWEvY29tX1tbW2NvbXBvbmVudF1dXS91aWtpdC12My9qcy91aWtpdC1pY29ucy5taW4uanMnLCBbJ3ZlcnNpb24nID0+ICdhdXRvJ10pOw0KCQlIdG1sOjpfKCdzY3JpcHQnLCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3ZkbS1pby91aWtpdEAzLjAuMC9kaXN0L2pzL3ZkbS5taW4uanMnLCBbJ3ZlcnNpb24nID0+ICdhdXRvJ10pOw0KCQlIdG1sOjpfKCdzdHlsZXNoZWV0JywgJ21lZGlhL2NvbV9bW1tjb21wb25lbnRdXV0vdWlraXQtdjMvY3NzL3Vpa2l0Lm1pbi5jc3MnLCBbJ3ZlcnNpb24nID0+ICdhdXRvJ10pOw==', '', 1, '', 'addUikitThreeToAdminViews', '', '', '', 'addUikitThreeToAdminViews', 2, '', '', '', 1, '2024-09-10 01:03:38', '2024-09-16 18:12:10', 3, '', 216),
+(400, 'CQkJLy8gR2V0IEFwcGxpY2F0aW9uIG9iamVjdA0KCQkJJHRoaXMtPmFwcCA/Pz0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldEFwcGxpY2F0aW9uKCk7DQoJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZSgnPGgzPlVubG9jayB0aGUgUG93ZXIgb2YgSm9vbWxhISBEZXZlbG9wbWVudDwvaDM+PHA+Q3VyaW91cyBhYm91dCBob3cgdGhpcyA8Yj5bW1thcmcwXV1dPC9iPiBjb21wb25lbnQgd2FzIGJ1aWx0PyBEaXNjb3ZlciB0aGUgcG93ZXJmdWwgSm9vbWxhISBDb21wb25lbnQgQnVpbGRlciAoPGEgaHJlZj0iaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlciIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJKb29tbGEhIENvbXBvbmVudCBCdWlsZGVyIj5KQ0I8L2E+KSwgYSB0b29sIHRoYXQgc2ltcGxpZmllcyBhbmQgZW5oYW5jZXMgY29tcG9uZW50IGRldmVsb3BtZW50LiBKb2luIHVzIG9uIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LnZkbS5kZXYvam9vbWxhIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Ikpvb21sYSEgQ29tcG9uZW50IEJ1aWxkZXIiPkdJVkVEPC9hPiB0byBleHBsb3JlIG1vcmUgYW5kIHNlZSBob3cgeW91IGNhbiBjcmVhdGUgeW91ciBvd24gY3VzdG9tIGNvbXBvbmVudHMuIFRoZSBmdXR1cmUgb2YgPGEgaHJlZj0iaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlciIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJKb29tbGEgQ29tcG9uZW50IEJ1aWxkZXIiPkpvb21sYSEgRGV2ZWxvcG1lbnQ8L2E+IHN0YXJ0cyBoZXJlITwvcD4nLCAnSW5mbycpOw0K', '', 1, '', 'unlockThePowerOfJoomlaDevelopment', '', '', '', 'Unlock the Power of Joomla! Development', 2, '', '', '', 1, '2024-09-16 00:00:42', '2024-09-16 16:17:20', 5, '', 218);
+
+--
+-- Dumping data for table `#__componentbuilder_class_property`
+--
+
+INSERT INTO `#__componentbuilder_class_property` (`id`, `comment`, `default`, `extension_type`, `guid`, `joomla_plugin_group`, `name`, `visibility`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
+(1, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', '', 'plugins', 'e8f306d8-a1c3-48ba-a60d-228e9e43dffe', 1, 'app', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(2, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBKRGF0YWJhc2VEcml2ZXIKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', '', 'plugins', 'db09e83f-f2aa-4c34-aad4-faf3b7427d1d', 1, 'db', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(3, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'cc83a326-07a4-41d0-a456-4123eb77e655', 1, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(4, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', '4c1d6d19-abcd-44ca-a5c9-6152cffe60b5', 2, 'app', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(5, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBEYXRhYmFzZURyaXZlcgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', '4e33f512-26ea-40e8-a46b-211681043c35', 2, 'db', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(6, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'dd133fb2-2910-4825-bdcf-e498d00db6da', 2, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(7, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', '7f3afb18-6b1e-4369-b77d-0dfc7c96bff2', 3, 'app', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(8, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBEYXRhYmFzZURyaXZlcgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', 'f7bb8460-aedb-4ed1-a1ed-d1ea837d5098', 3, 'db', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(9, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', '6c3f8f39-3221-449f-9a83-67d8074a5b8e', 3, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(10, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', 'c718afe3-87d4-40ae-a435-7506beb05db8', 4, 'app', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(11, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBKRGF0YWJhc2VEcml2ZXIKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'ee972dea-aa60-4620-aa76-2c8dda7548ae', 4, 'db', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(12, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', '12ba4a00-8c2e-4ed9-ba1d-b5004700329b', 4, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(13, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', '5caa1e3e-31ae-44e0-8266-1287d4df4078', 5, 'app', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(14, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBKRGF0YWJhc2VEcml2ZXIKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', '87c59578-1998-4bad-a356-0ee12502c364', 5, 'db', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(15, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', '21fea07d-70a6-4521-bcac-ad4152265be5', 5, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(16, 'CS8qKgoJICogVGhlIHBsdWdpbiBpZGVudGlmaWVyLgoJICoKCSAqIEB2YXIgICAgc3RyaW5nCgkgKiBAc2luY2UgIDEuMC4wCgkgKi8=', 'J0Zvbyc=', 'plugins', '9a502457-0ac7-49c4-b6b9-c011b90fea86', 6, 'context', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(17, 'CS8qKgoJICogVGhlIGV4dGVuc2lvbiBuYW1lLgoJICoKCSAqIEB2YXIgICAgc3RyaW5nCgkgKiBAc2luY2UgIDEuMC4wCgkgKi8=', 'J2NvbV9mb28n', 'plugins', 'd6a07bca-06bc-49e5-af67-7cb11a7dc894', 6, 'extension', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(18, 'CS8qKgoJICogVGhlIHN1YmxheW91dCB0byB1c2Ugd2hlbiByZW5kZXJpbmcgdGhlIHJlc3VsdHMuCgkgKgoJICogQHZhciAgICBzdHJpbmcKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'J2Zvbyc=', 'plugins', 'd0cef121-b4e8-4163-8d93-72c02f6639f5', 6, 'layout', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(19, 'CS8qKgoJICogVGhlIHR5cGUgb2YgY29udGVudCB0aGF0IHRoZSBhZGFwdGVyIGluZGV4ZXMuCgkgKgoJICogQHZhciAgICBzdHJpbmcKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'J0Zvbyc=', 'plugins', '7743bbb2-e3dc-4db1-a027-bc1ae3b757f9', 6, 'type_title', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(20, 'CS8qKgoJICogVGhlIHRhYmxlIG5hbWUuCgkgKgoJICogQHZhciAgICBzdHJpbmcKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'JyNfX2Zvbyc=', 'plugins', '708c7ab2-ec75-402e-a1c0-d575f61107a8', 6, 'table', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(21, 'CS8qKgoJICogTG9hZCB0aGUgbGFuZ3VhZ2UgZmlsZSBvbiBpbnN0YW50aWF0aW9uLgoJICoKCSAqIEB2YXIgICAgYm9vbGVhbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', '9f2164ea-00e0-47ae-a534-2b0d1d29bb48', 6, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(22, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', 'e55f65a0-08f0-4ceb-a828-77b6917dd194', 7, 'app', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(23, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBEYXRhYmFzZURyaXZlcgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', 'b594bcf3-414b-45a1-8fbc-146b9d5fda84', 7, 'db', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(24, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'dd7e3273-c456-4757-a92f-c86a055b80ae', 7, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(25, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', 'c07c62e4-7c72-4d5f-bcdb-82b759bd1a17', 8, 'app', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(26, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBKRGF0YWJhc2VEcml2ZXIKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', '9b22b269-d057-47d4-a4e2-60daade09f57', 8, 'db', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(27, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', '1236fe74-96fd-4a85-a7e9-252d86b430e2', 8, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(28, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', 'ef18d4d6-5d70-422d-bd4b-09b62b763bcf', 9, 'app', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(29, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBKRGF0YWJhc2VEcml2ZXIKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'd7b220a0-7c60-42dd-bad4-52c9bef79300', 9, 'db', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(30, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'eb3b3b5f-2706-4ec4-a75c-6927dee5256a', 9, 'autoloadLanguage', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(31, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', '', 'plugins', '56cc0535-fd9e-4db9-93f7-9f0dc9ab2a58', 10, 'app', 'protected', '', 1, '2019-07-16 00:25:53', '2022-01-07 20:08:43', 18, '', 2),
+(32, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBEYXRhYmFzZURyaXZlcgoJICogQHNpbmNlICAxLjAuMAoJICov', '', 'plugins', 'a89d86a3-08b0-49bb-a21c-24c04ee2a280', 10, 'db', 'protected', '', 1, '2019-07-16 00:25:53', '2022-01-07 20:08:43', 18, '', 2),
+(33, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'af756e64-0781-4f35-a6f3-2917ccd7ca4c', 10, 'autoloadLanguage', 'protected', '', 1, '2019-07-16 00:25:53', '2022-01-07 20:08:43', 18, '', 2),
+(34, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', '', 'plugins', '1bbc677b-592e-4c46-b7c9-ce763e5ce5a9', 11, 'app', 'protected', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 16, '', 3),
+(35, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBEYXRhYmFzZURyaXZlcgoJICogQHNpbmNlICAxLjAuMAoJICov', '', 'plugins', '9890d282-7c5e-48bd-a995-ff4a5b5838e7', 11, 'db', 'protected', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 16, '', 3),
+(36, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'dde7ac75-11f9-4af6-b86c-d184d5fe7349', 11, 'autoloadLanguage', 'protected', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 16, '', 3),
+(37, 'CS8qKgoJICogQXBwbGljYXRpb24gb2JqZWN0CgkgKgoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbgoJICogQHNpbmNlICAxLjAuMAoJICov', 'dHJ1ZQ==', 'plugins', '27ba206b-73a3-4e9e-93b5-9b6a774c4ae2', 12, 'app', 'protected', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(38, 'CS8qKgoJICogRGF0YWJhc2Ugb2JqZWN0CgkgKgoJICogQHZhciAgICBKRGF0YWJhc2VEcml2ZXIKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', 'e63761b1-30b6-44eb-b421-e29b744eaaf9', 12, 'db', 'protected', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(39, 'CS8qKgoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KCSAqCgkgKiBAdmFyICAgIGJvb2xlYW4KCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'dHJ1ZQ==', 'plugins', '437b3159-1408-4fa2-91b0-8b5e5b7527a3', 12, 'autoloadLanguage', 'protected', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 5, '', 1),
+(40, '', 'Tm90aGluZw==', 'powers', '614464ba-ae25-476d-bd8a-304a2e00e37a', '', 'WhatisLife', 'public', '', 1, '2023-08-22 03:54:15', '2023-08-22 03:55:45', 4, '', 4);
+
+--
+-- Dumping data for table `#__componentbuilder_class_method`
+--
+
+INSERT INTO `#__componentbuilder_class_method` (`id`, `arguments`, `code`, `comment`, `extension_type`, `guid`, `joomla_plugin_group`, `name`, `visibility`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
+(1, 'JGNyZWRlbnRpYWxzLCAkb3B0aW9ucywgJiRyZXNwb25zZQ==', '', 'CS8qKgoJICogVGhpcyBtZXRob2Qgc2hvdWxkIGhhbmRsZSBhbnkgYXV0aGVudGljYXRpb24gYW5kIHJlcG9ydCBiYWNrIHRvIHRoZSBzdWJqZWN0CgkgKgoJICogQHBhcmFtICAgYXJyYXkgICAkY3JlZGVudGlhbHMgIEFycmF5IGhvbGRpbmcgdGhlIHVzZXIgY3JlZGVudGlhbHMKCSAqIEBwYXJhbSAgIGFycmF5ICAgJG9wdGlvbnMgICAgICBBcnJheSBvZiBleHRyYSBvcHRpb25zCgkgKiBAcGFyYW0gICBvYmplY3QgICYkcmVzcG9uc2UgICAgQXV0aGVudGljYXRpb24gcmVzcG9uc2Ugb2JqZWN0CgkgKgoJICogQHJldHVybiAgYm9vbGVhbgoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'ceae0988-19bd-44aa-98d2-2653e0863450', 1, 'onUserAuthenticate', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(2, 'JG9wdGlvbnM=', '', 'CS8qKgoJICogV2Ugc2V0IHRoZSBhdXRoZW50aWNhdGlvbiBjb29raWUgb25seSBhZnRlciBsb2dpbiBpcyBzdWNjZXNzZnVsbGx5IGZpbmlzaGVkLgoJICogV2Ugc2V0IGEgbmV3IGNvb2tpZSBlaXRoZXIgZm9yIGEgdXNlciB3aXRoIG5vIGNvb2tpZXMgb3Igb25lCgkgKiB3aGVyZSB0aGUgdXNlciB1c2VkIGEgY29va2llIHRvIGF1dGhlbnRpY2F0ZS4KCSAqCgkgKiBAcGFyYW0gICBhcnJheSAgJG9wdGlvbnMgIEFycmF5IGhvbGRpbmcgb3B0aW9ucwoJICoKCSAqIEByZXR1cm4gIGJvb2xlYW4gIFRydWUgb24gc3VjY2VzcwoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '9ef228f9-391f-41aa-ae7b-23cf0c4f3abd', 1, 'onUserAfterLogin', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(3, 'JG9wdGlvbnM=', '', 'CS8qKgoJICogVGhpcyBpcyB3aGVyZSB3ZSBkZWxldGUgYW55IGF1dGhlbnRpY2F0aW9uIGNvb2tpZSB3aGVuIGEgdXNlciBsb2dzIG91dAoJICoKCSAqIEBwYXJhbSAgIGFycmF5ICAkb3B0aW9ucyAgQXJyYXkgaG9sZGluZyBvcHRpb25zIChsZW5ndGgsIHRpbWVUb0V4cGlyYXRpb24pCgkgKgoJICogQHJldHVybiAgYm9vbGVhbiAgVHJ1ZSBvbiBzdWNjZXNzCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'f478fb9d-d419-4d83-a38e-0e109959ee5f', 1, 'onUserAfterLogout', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(4, 'JiRzdWJqZWN0LCAkY29uZmlnID0gYXJyYXko', 'CQkkdGhpcy0+YWxsb3dMZWdhY3lMaXN0ZW5lcnMgPSBmYWxzZTsKCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgkc3ViamVjdCwgJGNvbmZpZyk7', 'CS8qKgoJICogQ29uc3RydWN0b3IKCSAqCgkgKiBAcGFyYW0gICBEaXNwYXRjaGVySW50ZXJmYWNlICYkc3ViamVjdCAgIFRoZSBvYmplY3QgdG8gb2JzZXJ2ZQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICAgICAgICAkY29uZmlnICAgICBBbiBvcHRpb25hbCBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjb25maWd1cmF0aW9uIHNldHRpbmdzLgoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkIGtleSB2YWx1ZXMgaW5jbHVkZSAnbmFtZScsICdncm91cCcsICdwYXJhbXMnLCAnbGFuZ3VhZ2UnCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzIGxpc3QgaXMgbm90IG1lYW50IHRvIGJlIGNvbXByZWhlbnNpdmUpLgoJICoKCSAqIEBzaW5jZSAgMS4wLjAKCSAqLw==', 'plugins', '7bc74e45-e4f0-4dfe-b3d8-3bbf8685c9a6', 2, '__construct', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 20, '', 1),
+(5, 'Q21zRXZlbnRcVGFibGVcT2JqZWN0Q3JlYXRlRXZlbnQgJGV2ZW50', '', 'CS8qKgoJICogUnVucyB3aGVuIGEgbmV3IHRhYmxlIG9iamVjdCBpcyBiZWluZyBjcmVhdGVkCgkgKgoJICogQHBhcmFtICAgQ21zRXZlbnRcVGFibGVcT2JqZWN0Q3JlYXRlRXZlbnQgJGV2ZW50IFRoZSBldmVudCB0byBoYW5kbGUKCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'bfc2a9d6-f38c-47b4-863a-20b8bbb4881a', 2, 'onTableObjectCreate', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(6, 'Q21zRXZlbnRcVGFibGVcQWZ0ZXJTdG9yZUV2ZW50ICRldmVudA==', '', 'CS8qKgoJICogUG9zdC1wcm9jZXNzb3IgZm9yICR0YWJsZS0+c3RvcmUoJHVwZGF0ZU51bGxzKQoJICoKCSAqIEBwYXJhbSAgIENtc0V2ZW50XFRhYmxlXEFmdGVyU3RvcmVFdmVudCAkZXZlbnQgVGhlIGV2ZW50IHRvIGhhbmRsZQoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '63dab292-6679-4544-84d9-7463211cf923', 2, 'onTableAfterStore', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(7, 'Q21zRXZlbnRcVGFibGVcQmVmb3JlRGVsZXRlRXZlbnQgJGV2ZW50', '', 'CS8qKgoJICogUHJlLXByb2Nlc3NvciBmb3IgJHRhYmxlLT5kZWxldGUoJHBrKQoJICoKCSAqIEBwYXJhbSAgIENtc0V2ZW50XFRhYmxlXEJlZm9yZURlbGV0ZUV2ZW50ICRldmVudCBUaGUgZXZlbnQgdG8gaGFuZGxlCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'afe79c43-b9d7-47b1-b223-9f0da0a3c436', 2, 'onTableBeforeDelete', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(8, 'JGNvbnRleHQsICRhcnRpY2xl', '', 'CS8qKgoJICogVGhpcyBpcyBhbiBldmVudCB0aGF0IGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGNvbnRlbnQgaXMgZGVsZXRlZC4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgY29udGVudCBwYXNzZWQgdG8gdGhlIHBsdWdpbiAoYWRkZWQgaW4gMS42KS4KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGFydGljbGUgIEEgSlRhYmxlQ29udGVudCBvYmplY3QuCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '73c389fa-fd28-4ac8-98f2-5f49ab55b31a', 3, 'onContentBeforeDelete', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(9, 'JGNvbnRleHQsICRhcnRpY2xl', '', 'CS8qKgoJICogVGhpcyBpcyBhbiBldmVudCB0aGF0IGlzIGNhbGxlZCByaWdodCBhZnRlciB0aGUgY29udGVudCBpcyBkZWxldGVkLgoJICoKCSAqIEBwYXJhbSAgIHN0cmluZyAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IHBhc3NlZCB0byB0aGUgcGx1Z2luIChhZGRlZCBpbiAxLjYpLgoJICogQHBhcmFtICAgb2JqZWN0ICAkYXJ0aWNsZSAgQSBKVGFibGVDb250ZW50IG9iamVjdC4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', '71f78e36-cf86-486a-989c-03c2718e3d74', 3, 'onContentAfterDelete', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(10, 'JGNvbnRleHQsICYkcm93LCAmJHBhcmFtcywgJHBhZ2U9MA==', '', 'CS8qKgoJICogVGhpcyBpcyBhIHJlcXVlc3QgZm9yIGluZm9ybWF0aW9uIHRoYXQgc2hvdWxkIGJlIHBsYWNlZAoJICogaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBnZW5lcmF0ZWQgY29udGVudC4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIHRoZSBwbHVnaW4uCgkgKiBAcGFyYW0gICBvYmplY3QgICAmJHJvdyAgICAgVGhlIGFydGljbGUgb2JqZWN0LiAgTm90ZSAkYXJ0aWNsZS0+dGV4dCBpcyBhbHNvIGF2YWlsYWJsZQoJICogQHBhcmFtICAgbWl4ZWQgICAgJiRwYXJhbXMgIFRoZSBhcnRpY2xlIHBhcmFtcwoJICogQHBhcmFtICAgaW50ZWdlciAgJHBhZ2UgICAgIFRoZSAncGFnZScgbnVtYmVyCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'fb8ae84d-b775-4d4f-9954-831fffe230ae', 3, 'onContentBeforeDisplay', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(11, 'JGNvbnRleHQsICYkcm93LCAmJHBhcmFtcywgJHBhZ2U9MA==', 'CQkvLyBBY2Nlc3MgdG8gcGx1Z2luIHBhcmFtZXRlcnMKCQkkc2FtcGxlID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdzYW1wbGUnLCAnNDInKTs=', 'CS8qKgoJICogVGhpcyBpcyBhIHJlcXVlc3QgZm9yIGluZm9ybWF0aW9uIHRoYXQgc2hvdWxkIGJlIHBsYWNlZCBpbW1lZGlhdGVseQoJICogYWZ0ZXIgdGhlIGdlbmVyYXRlZCBjb250ZW50LgoJICoKCSAqIEBwYXJhbSAgIHN0cmluZyAgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gdGhlIHBsdWdpbgoJICogQHBhcmFtICAgb2JqZWN0ICAgJiRyb3cgICAgIFRoZSBhcnRpY2xlIG9iamVjdAoJICogQHBhcmFtICAgb2JqZWN0ICAgJiRwYXJhbXMgIFRoZSBhcnRpY2xlIHBhcmFtcwoJICogQHBhcmFtICAgaW50ZWdlciAgJHBhZ2UgICAgIFRoZSAncGFnZScgbnVtYmVyCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'e376bd99-7582-47e8-a421-5e9fa4df2781', 3, 'onContentAfterDisplay', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(12, 'JGNvbnRleHQsICRhcnRpY2xlLCAkaXNOZXc=', '', 'CS8qKgoJICogVGhpcyBpcyBhbiBldmVudCB0aGF0IGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGNvbnRlbnQKCSAqIGlzIHNhdmVkIGludG8gdGhlIGRhdGFiYXNlLgoJICoKCSAqIEBwYXJhbSAgIHN0cmluZyAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IHBhc3NlZCB0byB0aGUgcGx1Z2luIChhZGRlZCBpbiAxLjYpLgoJICogQHBhcmFtICAgb2JqZWN0ICAkYXJ0aWNsZSAgQSBKVGFibGVDb250ZW50IG9iamVjdC4KCSAqIEBwYXJhbSAgIGJvb2wgICAgJGlzTmV3ICAgIElmIHRoZSBjb250ZW50IGlzIGp1c3QgYWJvdXQgdG8gYmUgY3JlYXRlZC4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', '6322ab1e-0146-44a0-836c-c12496d6c37b', 3, 'onContentBeforeSave', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(13, 'JGNvbnRleHQsICRhcnRpY2xlLCAkaXNOZXc=', '', 'CS8qKgoJICogVGhpcyBpcyBhbiBldmVudCB0aGF0IGlzIGNhbGxlZCBhZnRlciB0aGUgY29udGVudCBpcyBzYXZlZAoJICogaW50byB0aGUgZGF0YWJhc2UuCgkgKgoJICogQHBhcmFtICAgc3RyaW5nICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgcGFzc2VkIHRvIHRoZSBwbHVnaW4gKGFkZGVkIGluIDEuNikKCSAqIEBwYXJhbSAgIG9iamVjdCAgJGFydGljbGUgIEEgSlRhYmxlQ29udGVudCBvYmplY3QKCSAqIEBwYXJhbSAgIGJvb2wgICAgJGlzTmV3ICAgIElmIHRoZSBjb250ZW50IGhhcyBqdXN0IGJlZW4gY3JlYXRlZAoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '6d3c1622-087f-48f9-a0eb-6fe6c3ff3abd', 3, 'onContentAfterSave', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(14, 'JGNvbnRleHQsICYkcm93LCAmJHBhcmFtcywgJHBhZ2UgPSAw', '', 'CS8qKgoJICogVGhpcyBpcyBhIHJlcXVlc3QgZm9yIGluZm9ybWF0aW9uIHRoYXQgc2hvdWxkIGJlIHBsYWNlZCBiZXR3ZWVuIHRoZQoJICogY29udGVudCB0aXRsZSBhbmQgdGhlIGNvbnRlbnQgYm9keS4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIHRoZSBwbHVnaW4uCgkgKiBAcGFyYW0gICBvYmplY3QgICAmJHJvdyAgICAgVGhlIGFydGljbGUgb2JqZWN0LiAgTm90ZSAkYXJ0aWNsZS0+dGV4dCBpcyBhbHNvIGF2YWlsYWJsZQoJICogQHBhcmFtICAgbWl4ZWQgICAgJiRwYXJhbXMgIFRoZSBhcnRpY2xlIHBhcmFtcwoJICogQHBhcmFtICAgaW50ZWdlciAgJHBhZ2UgICAgIFRoZSAncGFnZScgbnVtYmVyCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'cc61ce82-44ef-4eaf-89cf-03fb4138c942', 3, 'onContentAfterTitle', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(15, 'JGNvbnRleHQsICRwa3MsICR2YWx1ZQ==', '', 'CS8qKgoJICogVGhpcyBpcyBhbiBldmVudCB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBjb250ZW50cyBzdGF0ZSBpcyBjaGFuZ2VkLgoJICoKCSAqIEBwYXJhbSAgIHN0cmluZyAgICRjb250ZXh0ICBUaGUgY29udGV4dCBmb3IgdGhlIGNvbnRlbnQgcGFzc2VkIHRvIHRoZSBwbHVnaW4uCgkgKiBAcGFyYW0gICBhcnJheSAgICAkcGtzICAgICAgQSBsaXN0IG9mIHByaW1hcnkga2V5IGlkcyBvZiB0aGUgY29udGVudCB0aGF0IGhhcyBjaGFuZ2VkIHN0YXRlLgoJICogQHBhcmFtICAgaW50ZWdlciAgJHZhbHVlICAgIFRoZSB2YWx1ZSBvZiB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGVudCBoYXMgYmVlbiBjaGFuZ2VkIHRvLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '92e46234-5c28-4eb1-b3e9-b7adbfc7bbd4', 3, 'onContentChangeState', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(16, 'JGNvbnRleHQsICYkcm93LCAmJHBhcmFtcywgJHBhZ2UgPSAw', '', 'CS8qKgoJICogVGhpcyBpcyB0aGUgZmlyc3Qgc3RhZ2UgaW4gcHJlcGFyaW5nIGNvbnRlbnQgZm9yIG91dHB1dCBhbmQgaXMgdGhlCgkgKiBtb3N0IGNvbW1vbiBwb2ludCBmb3IgY29udGVudCBvcmllbnRhdGVkIHBsdWdpbnMgdG8gZG8gdGhlaXIgd29yay4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIHRoZSBwbHVnaW4uCgkgKiBAcGFyYW0gICBvYmplY3QgICAmJHJvdyAgICAgVGhlIGFydGljbGUgb2JqZWN0LiAgTm90ZSAkYXJ0aWNsZS0+dGV4dCBpcyBhbHNvIGF2YWlsYWJsZQoJICogQHBhcmFtICAgbWl4ZWQgICAgJiRwYXJhbXMgIFRoZSBhcnRpY2xlIHBhcmFtcwoJICogQHBhcmFtICAgaW50ZWdlciAgJHBhZ2UgICAgIFRoZSAncGFnZScgbnVtYmVyCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '92fe98ad-c529-494a-9147-5ae1e4d78068', 3, 'onContentPrepare', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(17, 'JG5hbWU=', 'CQkkbGluayA9ICdpbmRleC5waHA/b3B0aW9uPWNvbV9mb28mYW1wO3ZpZXc9Zm9vJmFtcDtsYXlvdXQ9bW9kYWwmYW1wO3RtcGw9Y29tcG9uZW50JmFtcDsnCgkJCS4gU2Vzc2lvbjo6Z2V0Rm9ybVRva2VuKCkgLiAnPTEmYW1wO2VkaXRvcj0nIC4gJG5hbWU7CgoJCSRidXR0b24gPSBuZXcgQ01TT2JqZWN0OwoJCSRidXR0b24tPm1vZGFsID0gdHJ1ZTsKCQkkYnV0dG9uLT5jbGFzcyA9ICdidG4gYnRuLXNlY29uZGFyeSc7CgkJJGJ1dHRvbi0+bGluayA9ICRsaW5rOwoJCSRidXR0b24tPnRleHQgPSBUZXh0OjpfKCdQTEdfRURJVE9SU1hURF9GT09fQlVUVE9OX0ZPTycpOwoJCSRidXR0b24tPm5hbWUgPSAnZmlsZS1hZGQnOwoJCSRidXR0b24tPm9wdGlvbnMgPSBhcnJheSgKCQkJJ2hlaWdodCcgICAgID0+ICczMDBweCcsCgkJCSd3aWR0aCcgICAgICA9PiAnODAwcHgnLAoJCQknYm9keUhlaWdodCcgPT4gJzcwJywKCQkJJ21vZGFsV2lkdGgnID0+ICc4MCcsCgkJKTsKCgkJcmV0dXJuICRidXR0b247', 'CS8qKgoJICogRGlzcGxheSB0aGUgYnV0dG9uCgkgKgoJICogQHBhcmFtICAgc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBidXR0b24gdG8gYWRkCgkgKgoJICogQHJldHVybiAgQ01TT2JqZWN0ICBUaGUgYnV0dG9uIG9wdGlvbnMgYXMgSk9iamVjdAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'b1d55780-5ba8-40d2-8dd6-fd9cd1ecf7f4', 4, 'onDisplay', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(18, 'JGZpZWxkLCBET01FbGVtZW50ICRwYXJlbnQsIEpGb3JtICRmb3Jt', '', 'CS8qKgoJICogVHJhbnNmb3JtcyB0aGUgZmllbGQgaW50byBhIERPTSBYTUwgZWxlbWVudCBhbmQgYXBwZW5kcyBpdCBhcyBhIGNoaWxkIG9uIHRoZSBnaXZlbiBwYXJlbnQuCgkgKgoJICogQHBhcmFtICAgc3RkQ2xhc3MgICAkZmllbGQgIFRoZSBmaWVsZC4KCSAqIEBwYXJhbSAgIERPTUVsZW1lbnQgJHBhcmVudCBUaGUgZmllbGQgbm9kZSBwYXJlbnQuCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgICRmb3JtICAgVGhlIGZvcm0uCgkgKgoJICogQHJldHVybiAgRE9NRWxlbWVudAoJICoKCSAqIEBzaW5jZSAgIDEuMC4wCgkgKi8=', 'plugins', '62a85e6b-8d40-46fb-bb82-6999d79bddac', 5, 'onCustomFieldsPrepareDom', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(19, 'JGNvbnRleHQsICRpdGVtLCAkaXNOZXcsICRkYXRhID0gYXJyYXko', '', 'CS8qKgoJICogVGhlIHNhdmUgZXZlbnQuCgkgKgoJICogQHBhcmFtICAgc3RyaW5nICAkY29udGV4dCBUaGUgY29udGV4dAoJICogQHBhcmFtICAgSlRhYmxlICAkaXRlbSAgICBUaGUgdGFibGUKCSAqIEBwYXJhbSAgIGJvb2xlYW4gJGlzTmV3ICAgSXMgbmV3IGl0ZW0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGRhdGEgICAgVGhlIHZhbGlkYXRlZCBkYXRhCgkgKgoJICogQHJldHVybiAgYm9vbGVhbgoJICoKCSAqIEBzaW5jZSAgIDEuMC4wCgkgKi8=', 'plugins', 'd831a202-15f1-4458-b26c-7c69dee2caf5', 5, 'onContentBeforeSave', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(20, 'JGV4dGVuc2lvbiwgJHBrcywgJHZhbHVl', 'CQkvLyBNYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgY29tX2NvbnRlbnQgY2F0ZWdvcmllcy4KCQlpZiAoJGV4dGVuc2lvbiA9PT0gJ2NvbV9mb28nKQoJCXsKCQkJJHRoaXMtPmNhdGVnb3J5U3RhdGVDaGFuZ2UoJHBrcywgJHZhbHVlKTsKCQl9', 'CS8qKgoJICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgaXRlbSBsaW5rIGluZm9ybWF0aW9uIHdoZW4gdGhlIGl0ZW0gY2F0ZWdvcnkgaXMKCSAqIGNoYW5nZWQuIFRoaXMgaXMgZmlyZWQgd2hlbiB0aGUgaXRlbSBjYXRlZ29yeSBpcyBwdWJsaXNoZWQgb3IgdW5wdWJsaXNoZWQKCSAqIGZyb20gdGhlIGxpc3Qgdmlldy4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZXh0ZW5zaW9uICBUaGUgZXh0ZW5zaW9uIHdob3NlIGNhdGVnb3J5IGhhcyBiZWVuIHVwZGF0ZWQuCgkgKiBAcGFyYW0gICBhcnJheSAgICAkcGtzICAgICAgICBBIGxpc3Qgb2YgcHJpbWFyeSBrZXkgaWRzIG9mIHRoZSBjb250ZW50IHRoYXQgaGFzIGNoYW5nZWQgc3RhdGUuCgkgKiBAcGFyYW0gICBpbnRlZ2VyICAkdmFsdWUgICAgICBUaGUgdmFsdWUgb2YgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRlbnQgaGFzIGJlZW4gY2hhbmdlZCB0by4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'fcccc173-d2ef-411c-9d39-b1db373bdc5d', 6, 'onFinderCategoryChangeState', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(21, 'JGNvbnRleHQsICR0YWJsZQ==', 'CQlpZiAoJGNvbnRleHQgPT09ICdjb21fZm9vLmZvbycpCgkJewoJCQkkaWQgPSAkdGFibGUtPmlkOwoJCX0KCQllbHNlaWYgKCRjb250ZXh0ID09PSAnY29tX2ZpbmRlci5pbmRleCcpCgkJewoJCQkkaWQgPSAkdGFibGUtPmxpbmtfaWQ7CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJLy8gUmVtb3ZlIGl0ZW0gZnJvbSB0aGUgaW5kZXguCgkJcmV0dXJuICR0aGlzLT5yZW1vdmUoJGlkKTs=', 'CS8qKgoJICogTWV0aG9kIHRvIHJlbW92ZSB0aGUgbGluayBpbmZvcm1hdGlvbiBmb3IgaXRlbXMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZC4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZC4KCSAqIEBwYXJhbSAgIEpUYWJsZSAgJHRhYmxlICAgIEEgSlRhYmxlIG9iamVjdCBjb250YWluaW5nIHRoZSByZWNvcmQgdG8gYmUgZGVsZXRlZAoJICoKCSAqIEByZXR1cm4gIGJvb2xlYW4gIFRydWUgb24gc3VjY2Vzcy4KCSAqCgkgKiBAc2luY2UgICAyLjUKCSAqIEB0aHJvd3MgIEV4Y2VwdGlvbiBvbiBkYXRhYmFzZSBlcnJvci4KCSAqLw==', 'plugins', '581a6599-d81c-4b98-9eca-5d934abad88c', 6, 'onFinderAfterDelete', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(22, 'JGNvbnRleHQsICRyb3csICRpc05ldw==', 'CQkvLyBXZSBvbmx5IHdhbnQgdG8gaGFuZGxlIGFydGljbGVzIGhlcmUuCgkJaWYgKCRjb250ZXh0ID09PSAnY29tX2Zvby5mb28nKQoJCXsKCQkJLy8gQ2hlY2sgaWYgdGhlIGFjY2VzcyBsZXZlbHMgYXJlIGRpZmZlcmVudC4KCQkJaWYgKCEkaXNOZXcgJiYgJHRoaXMtPm9sZF9hY2Nlc3MgIT0gJHJvdy0+YWNjZXNzKQoJCQl7CgkJCQkvLyBQcm9jZXNzIHRoZSBjaGFuZ2UuCgkJCQkkdGhpcy0+aXRlbUFjY2Vzc0NoYW5nZSgkcm93KTsKCQkJfQoKCQkJLy8gUmVpbmRleCB0aGUgaXRlbS4KCQkJJHRoaXMtPnJlaW5kZXgoJHJvdy0+aWQpOwoJCX0KCgkJLy8gQ2hlY2sgZm9yIGFjY2VzcyBjaGFuZ2VzIGluIHRoZSBjYXRlZ29yeS4KCQlpZiAoJGNvbnRleHQgPT09ICdjb21fY2F0ZWdvcmllcy5jYXRlZ29yeScpCgkJewoJCQkvLyBDaGVjayBpZiB0aGUgYWNjZXNzIGxldmVscyBhcmUgZGlmZmVyZW50LgoJCQlpZiAoISRpc05ldyAmJiAkdGhpcy0+b2xkX2NhdGFjY2VzcyAhPSAkcm93LT5hY2Nlc3MpCgkJCXsKCQkJCSR0aGlzLT5jYXRlZ29yeUFjY2Vzc0NoYW5nZSgkcm93KTsKCQkJfQoJCX0KCgkJcmV0dXJuIHRydWU7', 'CS8qKgoJICogU21hcnQgU2VhcmNoIGFmdGVyIHNhdmUgY29udGVudCBtZXRob2QuCgkgKiBSZWluZGV4ZXMgdGhlIGxpbmsgaW5mb3JtYXRpb24gZm9yIGFuIGFydGljbGUgdGhhdCBoYXMgYmVlbiBzYXZlZC4KCSAqIEl0IGFsc28gbWFrZXMgYWRqdXN0bWVudHMgaWYgdGhlIGFjY2VzcyBsZXZlbCBvZiBhbiBpdGVtIG9yIHRoZQoJICogY2F0ZWdvcnkgdG8gd2hpY2ggaXQgYmVsb25ncyBoYXMgY2hhbmdlZC4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgcGFzc2VkIHRvIHRoZSBwbHVnaW4uCgkgKiBAcGFyYW0gICBKVGFibGUgICAkcm93ICAgICAgQSBKVGFibGUgb2JqZWN0LgoJICogQHBhcmFtICAgYm9vbGVhbiAgJGlzTmV3ICAgIFRydWUgaWYgdGhlIGNvbnRlbnQgaGFzIGp1c3QgYmVlbiBjcmVhdGVkLgoJICoKCSAqIEByZXR1cm4gIGJvb2xlYW4gIFRydWUgb24gc3VjY2Vzcy4KCSAqCgkgKiBAc2luY2UgICAyLjUKCSAqIEB0aHJvd3MgIEV4Y2VwdGlvbiBvbiBkYXRhYmFzZSBlcnJvci4KCSAqLw==', 'plugins', '352d0b79-64d3-4e3d-a47d-beb62e9baa83', 6, 'onFinderAfterSave', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(23, 'JGNvbnRleHQsICRyb3csICRpc05ldw==', 'CQkvLyBXZSBvbmx5IHdhbnQgdG8gaGFuZGxlIGFydGljbGVzIGhlcmUuCgkJaWYgKCRjb250ZXh0ID09PSAnY29tX2Zvby5mb28nKQoJCXsKCQkJLy8gUXVlcnkgdGhlIGRhdGFiYXNlIGZvciB0aGUgb2xkIGFjY2VzcyBsZXZlbCBpZiB0aGUgaXRlbSBpc24ndCBuZXcuCgkJCWlmICghJGlzTmV3KQoJCQl7CgkJCQkkdGhpcy0+Y2hlY2tJdGVtQWNjZXNzKCRyb3cpOwoJCQl9CgkJfQoKCQkvLyBDaGVjayBmb3IgYWNjZXNzIGxldmVscyBmcm9tIHRoZSBjYXRlZ29yeS4KCQlpZiAoJGNvbnRleHQgPT09ICdjb21fY2F0ZWdvcmllcy5jYXRlZ29yeScpCgkJewoJCQkvLyBRdWVyeSB0aGUgZGF0YWJhc2UgZm9yIHRoZSBvbGQgYWNjZXNzIGxldmVsIGlmIHRoZSBpdGVtIGlzbid0IG5ldy4KCQkJaWYgKCEkaXNOZXcpCgkJCXsKCQkJCSR0aGlzLT5jaGVja0NhdGVnb3J5QWNjZXNzKCRyb3cpOwoJCQl9CgkJfQoKCQlyZXR1cm4gdHJ1ZTs=', 'CS8qKgoJICogU21hcnQgU2VhcmNoIGJlZm9yZSBjb250ZW50IHNhdmUgbWV0aG9kLgoJICogVGhpcyBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIGRhdGEgaXMgYWN0dWFsbHkgc2F2ZWQuCgkgKgoJICogQHBhcmFtICAgc3RyaW5nICAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IHBhc3NlZCB0byB0aGUgcGx1Z2luLgoJICogQHBhcmFtICAgSlRhYmxlICAgJHJvdyAgICAgIEEgSlRhYmxlIG9iamVjdC4KCSAqIEBwYXJhbSAgIGJvb2xlYW4gICRpc05ldyAgICBJZiB0aGUgY29udGVudCBpcyBqdXN0IGFib3V0IHRvIGJlIGNyZWF0ZWQuCgkgKgoJICogQHJldHVybiAgYm9vbGVhbiAgVHJ1ZSBvbiBzdWNjZXNzLgoJICoKCSAqIEBzaW5jZSAgIDIuNQoJICogQHRocm93cyAgRXhjZXB0aW9uIG9uIGRhdGFiYXNlIGVycm9yLgoJICov', 'plugins', '8d12aba2-a150-450a-bf9a-b178ce2bea0b', 6, 'onFinderBeforeSave', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(24, 'JGNvbnRleHQsICRwa3MsICR2YWx1ZQ==', 'CQkvLyBXZSBvbmx5IHdhbnQgdG8gaGFuZGxlIGFydGljbGVzIGhlcmUuCgkJaWYgKCRjb250ZXh0ID09PSAnY29tX2Zvby5mb28nKQoJCXsKCQkJJHRoaXMtPml0ZW1TdGF0ZUNoYW5nZSgkcGtzLCAkdmFsdWUpOwoJCX0KCgkJLy8gSGFuZGxlIHdoZW4gdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC4KCQlpZiAoJGNvbnRleHQgPT09ICdjb21fcGx1Z2lucy5wbHVnaW4nICYmICR2YWx1ZSA9PT0gMCkKCQl7CgkJCSR0aGlzLT5wbHVnaW5EaXNhYmxlKCRwa3MpOwoJCX0=', 'CS8qKgoJICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbGluayBpbmZvcm1hdGlvbiBmb3IgaXRlbXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZAoJICogZnJvbSBvdXRzaWRlIHRoZSBlZGl0IHNjcmVlbi4gVGhpcyBpcyBmaXJlZCB3aGVuIHRoZSBpdGVtIGlzIHB1Ymxpc2hlZCwKCSAqIHVucHVibGlzaGVkLCBhcmNoaXZlZCwgb3IgdW5hcmNoaXZlZCBmcm9tIHRoZSBsaXN0IHZpZXcuCgkgKgoJICogQHBhcmFtICAgc3RyaW5nICAgJGNvbnRleHQgIFRoZSBjb250ZXh0IGZvciB0aGUgY29udGVudCBwYXNzZWQgdG8gdGhlIHBsdWdpbi4KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRwa3MgICAgICBBbiBhcnJheSBvZiBwcmltYXJ5IGtleSBpZHMgb2YgdGhlIGNvbnRlbnQgdGhhdCBoYXMgY2hhbmdlZCBzdGF0ZS4KCSAqIEBwYXJhbSAgIGludGVnZXIgICR2YWx1ZSAgICBUaGUgdmFsdWUgb2YgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRlbnQgaGFzIGJlZW4gY2hhbmdlZCB0by4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMi41CgkgKi8=', 'plugins', 'ff59ece3-e098-461a-bfbd-9c997130b272', 6, 'onFinderChangeState', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(25, 'RmluZGVySW5kZXhlclJlc3VsdCAkaXRlbSwgJGZvcm1hdCA9ICdodG1sJw==', 'CQkkaXRlbS0+c2V0TGFuZ3VhZ2UoKTsKCgkJLy8gQ2hlY2sgaWYgdGhlIGV4dGVuc2lvbiBpcyBlbmFibGVkLgoJCWlmIChDb21wb25lbnRIZWxwZXI6OmlzRW5hYmxlZCgkdGhpcy0+ZXh0ZW5zaW9uKSA9PT0gZmFsc2UpCgkJewoJCQlyZXR1cm47CgkJfQoKCQkvLyBBZGQgdGhlIG1ldGFkYXRhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLgoJCSRpdGVtLT5hZGRJbnN0cnVjdGlvbihGaW5kZXJJbmRleGVyOjpNRVRBX0NPTlRFWFQsICdtZXRha2V5Jyk7CgkJJGl0ZW0tPmFkZEluc3RydWN0aW9uKEZpbmRlckluZGV4ZXI6Ok1FVEFfQ09OVEVYVCwgJ21ldGFkZXNjJyk7CgkJJGl0ZW0tPmFkZEluc3RydWN0aW9uKEZpbmRlckluZGV4ZXI6Ok1FVEFfQ09OVEVYVCwgJ21ldGFhdXRob3InKTsKCQkkaXRlbS0+YWRkSW5zdHJ1Y3Rpb24oRmluZGVySW5kZXhlcjo6TUVUQV9DT05URVhULCAnYXV0aG9yJyk7CgkJJGl0ZW0tPmFkZEluc3RydWN0aW9uKEZpbmRlckluZGV4ZXI6Ok1FVEFfQ09OVEVYVCwgJ2NyZWF0ZWRfYnlfYWxpYXMnKTsKCgkJLy8gQWRkIHRoZSBsYW5ndWFnZSB0YXhvbm9teSBkYXRhLgoJCSRpdGVtLT5hZGRUYXhvbm9teSgnTGFuZ3VhZ2UnLCAkaXRlbS0+bGFuZ3VhZ2UpOwoKCQkvLyBHZXQgY29udGVudCBleHRyYXMuCgkJRmluZGVySW5kZXhlckhlbHBlcjo6Z2V0Q29udGVudEV4dHJhcygkaXRlbSk7CgoJCS8vIEluZGV4IHRoZSBpdGVtLgoJCSR0aGlzLT5pbmRleGVyLT5pbmRleCgkaXRlbSk7', 'CS8qKgoJICogTWV0aG9kIHRvIGluZGV4IGFuIGl0ZW0uIFRoZSBpdGVtIG11c3QgYmUgYSBGaW5kZXJJbmRleGVyUmVzdWx0IG9iamVjdC4KCSAqCgkgKiBAcGFyYW0gICBGaW5kZXJJbmRleGVyUmVzdWx0ICAkaXRlbSAgICBUaGUgaXRlbSB0byBpbmRleCBhcyBhIEZpbmRlckluZGV4ZXJSZXN1bHQgb2JqZWN0LgoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAgICAgICAgJGZvcm1hdCAgVGhlIGl0ZW0gZm9ybWF0LiAgTm90IHVzZWQuCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDIuNQoJICogQHRocm93cyAgRXhjZXB0aW9uIG9uIGRhdGFiYXNlIGVycm9yLgoJICov', 'plugins', 'fc7c009e-e630-4507-8034-0b5e9886fca3', 6, 'index', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(26, 'RmluZGVySW5kZXhlclJlc3VsdCAkaXRlbSwgJGZvcm1hdCA9ICdodG1sJw==', 'CQkvLyBMb2FkIGRlcGVuZGVudCBjbGFzc2VzLgoKCQlyZXR1cm4gdHJ1ZTs=', 'CS8qKgoJICogTWV0aG9kIHRvIHNldHVwIHRoZSBpbmRleGVyIHRvIGJlIHJ1bi4KCSAqCgkgKiBAcmV0dXJuICBib29sZWFuICBUcnVlIG9uIHN1Y2Nlc3MuCgkgKgoJICogQHNpbmNlICAgMi41CgkgKi8=', 'plugins', '00c39a5b-ca64-4785-aeae-e767e0bda078', 6, 'setup', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(27, 'JHF1ZXJ5ID0gbnVsbA==', 'CQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsKCgkJLy8gQ2hlY2sgaWYgd2UgY2FuIHVzZSB0aGUgc3VwcGxpZWQgU1FMIHF1ZXJ5LgoJCSRxdWVyeSA9ICRxdWVyeSBpbnN0YW5jZW9mIEpEYXRhYmFzZVF1ZXJ5ID8gJHF1ZXJ5IDogJGRiLT5nZXRRdWVyeSh0cnVlKTsKCgkJcmV0dXJuICRxdWVyeTs=', 'CS8qKgoJICogTWV0aG9kIHRvIGdldCB0aGUgU1FMIHF1ZXJ5IHVzZWQgdG8gcmV0cmlldmUgdGhlIGxpc3Qgb2YgY29udGVudCBpdGVtcy4KCSAqCgkgKiBAcGFyYW0gICBtaXhlZCAgJHF1ZXJ5ICBBIEpEYXRhYmFzZVF1ZXJ5IG9iamVjdCBvciBudWxsLgoJICoKCSAqIEByZXR1cm4gIEpEYXRhYmFzZVF1ZXJ5ICBBIGRhdGFiYXNlIG9iamVjdC4KCSAqCgkgKiBAc2luY2UgICAyLjUKCSAqLw==', 'plugins', 'c43086af-3832-462e-91c7-79e5d7cbf6ba', 6, 'getListQuery', 'protected', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(28, 'JHF1ZXJ5ID0gbnVsbA==', 'CQlzdGF0aWMgJGFyZWFzID0gYXJyYXkoCgkJCSd0YWdzJyA9PiAnUExHX1NFQVJDSF9GT09fRk9PJwoJCSk7CgoJCXJldHVybiAkYXJlYXM7', 'CS8qKgoJICogRGV0ZXJtaW5lIGFyZWFzIHNlYXJjaGFibGUgYnkgdGhpcyBwbHVnaW4uCgkgKgoJICogQHJldHVybiAgYXJyYXkgIEFuIGFycmF5IG9mIHNlYXJjaCBhcmVhcy4KCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', 'ca414ec7-a0cb-4b3d-9561-a7492d896383', 7, 'onContentSearchAreas', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(29, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogU2VhcmNoIGNvbnRlbnQgKHRhZ3MpLgoJICoKCSAqIFRoZSBTUUwgbXVzdCByZXR1cm4gdGhlIGZvbGxvd2luZyBmaWVsZHMgdGhhdCBhcmUgdXNlZCBpbiBhIGNvbW1vbiBkaXNwbGF5CgkgKiByb3V0aW5lOiBocmVmLCB0aXRsZSwgc2VjdGlvbiwgY3JlYXRlZCwgdGV4dCwgYnJvd3Nlcm5hdi4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICR0ZXh0ICAgICAgVGFyZ2V0IHNlYXJjaCBzdHJpbmcuCgkgKiBAcGFyYW0gICBzdHJpbmcgICRwaHJhc2UgICAgTWF0Y2hpbmcgb3B0aW9uIChwb3NzaWJsZSB2YWx1ZXM6IGV4YWN0fGFueXxhbGwpLiAgRGVmYXVsdCBpcyAiYW55Ii4KCSAqIEBwYXJhbSAgIHN0cmluZyAgJG9yZGVyaW5nICBPcmRlcmluZyBvcHRpb24gKHBvc3NpYmxlIHZhbHVlczogbmV3ZXN0fG9sZGVzdHxwb3B1bGFyfGFscGhhfGNhdGVnb3J5KS4gIERlZmF1bHQgaXMgIm5ld2VzdCIuCgkgKiBAcGFyYW0gICBzdHJpbmcgICRhcmVhcyAgICAgQW4gYXJyYXkgaWYgdGhlIHNlYXJjaCBpcyB0byBiZSByZXN0cmljdGVkIHRvIGFyZWFzIG9yIG51bGwgdG8gc2VhcmNoIGFsbCBhcmVhcy4KCSAqCgkgKiBAcmV0dXJuICBhcnJheSAgU2VhcmNoIHJlc3VsdHMuCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'adea8559-f582-4b68-9d69-fcd514320353', 7, 'onContentSearch', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(30, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25BZnRlckluaXRpYWxpc2UuCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '65779269-1540-4b00-a28b-181b9c579277', 8, 'onAfterInitialise', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(31, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25BZnRlclJvdXRlLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', 'e31c6e96-d490-4046-9545-133279fb973c', 8, 'onAfterRoute', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(32, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25BZnRlckRpc3BhdGNoLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '26b2d364-40b1-4e2f-9061-85699f8045e2', 8, 'onAfterDispatch', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(33, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', 'CQkvLyBBY2Nlc3MgdG8gcGx1Z2luIHBhcmFtZXRlcnMKCQkkc2FtcGxlID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdzYW1wbGUnLCAnNDInKTs=', 'CS8qKgoJICogb25BZnRlclJlbmRlci4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', '68834ef3-373e-4797-bb34-6b6d3499b70e', 8, 'onAfterRender', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(34, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25BZnRlckNvbXBpbGVIZWFkLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', 'e221ab75-51da-4f9a-bb8c-031e31b6c4a9', 8, 'onAfterCompileHead', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(35, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogT25BZnRlckNvbXByZXNzLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '40434794-c4e9-4dce-9043-5c682c95ed78', 8, 'onAfterCompress', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(36, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25BZnRlclJlc3BvbmQuCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '6c6e9986-d4ad-4eb7-be11-fb5f94c8b29f', 8, 'onAfterRespond', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(37, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQXV0aG9yaXNhdGlvbi4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'f4e76718-018a-4a99-80f1-78b989a8a017', 9, 'onUserAuthorisation', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(38, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQXV0aG9yaXNhdGlvbkZhaWx1cmUuCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '300988bc-4d3f-4512-b009-2b3731d4a234', 9, 'onUserAuthorisationFailure', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(39, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQmVmb3JlU2F2ZS4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'dbbed809-e837-4f5c-ab0f-9edaebcfd796', 9, 'onUserBeforeSave', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(40, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQWZ0ZXJTYXZlLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', 'bf8eccf6-1cb3-45d8-b216-33dcef221b3c', 9, 'onUserAfterSave', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(41, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQmVmb3JlRGVsZXRlLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '11911fb5-c762-4c4d-8144-cd43e7fc9e29', 9, 'onUserBeforeDelete', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(42, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQWZ0ZXJEZWxldGUuCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '1383d6c4-3340-46e7-95f5-56568a30ea6f', 9, 'onUserAfterDelete', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(43, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyTG9naW4uCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '3845713d-4a2a-41c1-b1b5-df126a581d5e', 9, 'onUserLogin', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(44, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyTG9naW5GYWlsdXJlLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', 'e7ad952f-4c9f-4b4a-a37c-027aa7bed3be', 9, 'onUserLoginFailure', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(45, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQWZ0ZXJMb2dpbi4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', '6443b288-6b80-41c6-824f-fbf7e39545b8', 9, 'onUserAfterLogin', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(46, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyTG9nb3V0LgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '979e8928-70e8-4813-9e87-c4a3cb7f3e41', 9, 'onUserLogout', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(47, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQmVmb3JlU2F2ZUdyb3VwLgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '90985779-0b61-4331-8c4f-9d63bb14b149', 9, 'onUserBeforeSaveGroup', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(48, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQWZ0ZXJTYXZlR3JvdXAuCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'c71e62d1-46fb-4237-84f2-a3c62a62dd58', 9, 'onUserAfterSaveGroup', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(49, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQmVmb3JlRGVsZXRlR3JvdXAuCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'a740f931-5847-4ddb-950e-a09e3f8cb059', 9, 'onUserBeforeDeleteGroup', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(50, 'JHRleHQsICRwaHJhc2UgPSAnJywgJG9yZGVyaW5nID0gJycsICRhcmVhcyA9IG51bGw=', '', 'CS8qKgoJICogb25Vc2VyQWZ0ZXJEZWxldGVHcm91cC4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'f9e37adc-4f62-4783-9e17-d709ed60d821', 9, 'onUserAfterDeleteGroup', 'public', '', 1, '2019-07-15 11:06:03', '2022-01-07 20:08:43', 18, '', 1),
+(51, 'UHJpdmFjeVRhYmxlUmVxdWVzdCAkcmVxdWVzdCwgSlVzZXIgJHVzZXIgPSBudWxs', '', 'CS8qKgoJICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcmVtb3ZlIGluZm9ybWF0aW9uIHJlcXVlc3QgY2FuIGJlIHByb2Nlc3NlZAoJICoKCSAqIEBwYXJhbSAgIFByaXZhY3lUYWJsZVJlcXVlc3QgICRyZXF1ZXN0ICBUaGUgcmVxdWVzdCByZWNvcmQgYmVpbmcgcHJvY2Vzc2VkCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQoJICoKCSAqIEByZXR1cm4gIFByaXZhY3lSZW1vdmFsU3RhdHVzCgkgKgoJICogQHNpbmNlICAgMS4wLjAKCSAqLw==', 'plugins', 'ddc9d897-8902-4ac3-bf38-f37e6af1a46a', 10, 'onPrivacyCanRemoveData', 'public', '', 1, '2019-07-16 00:25:53', '2022-01-07 20:08:43', 18, '', 2),
+(52, 'UHJpdmFjeVRhYmxlUmVxdWVzdCAkcmVxdWVzdCwgSlVzZXIgJHVzZXIgPSBudWxs', '', 'CS8qKgoJICogUHJvY2Vzc2VzIGFuIGV4cG9ydCByZXF1ZXN0IGZvciBKb29tbGEgY29yZSB1c2VyIGRhdGEKCSAqCgkgKiBAcGFyYW0gICBQcml2YWN5VGFibGVSZXF1ZXN0ICAkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZAoJICogQHBhcmFtICAgSlVzZXIgICAgICAgICAgICAgICAgJHVzZXIgICAgIFRoZSB1c2VyIGFjY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCBpZiBhdmFpbGFibGUKCSAqCgkgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10KCSAqCgkgKiBAc2luY2UgICAxLjAuMAoJICov', 'plugins', '3692862c-6688-4afe-809e-c6677b318fea', 10, 'onPrivacyExportRequest', 'public', '', 1, '2019-07-16 00:25:53', '2022-01-07 20:08:43', 18, '', 2),
+(53, 'UHJpdmFjeVRhYmxlUmVxdWVzdCAkcmVxdWVzdCwgSlVzZXIgJHVzZXIgPSBudWxs', '', 'CS8qKgoJICogUmVtb3ZlcyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSByZW1vdmUgaW5mb3JtYXRpb24gcmVxdWVzdAoJICoKCSAqIEBwYXJhbSAgIFByaXZhY3lUYWJsZVJlcXVlc3QgICRyZXF1ZXN0ICBUaGUgcmVxdWVzdCByZWNvcmQgYmVpbmcgcHJvY2Vzc2VkCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAuMAoJICov', 'plugins', '1e9e7ad9-ea31-43a2-a288-ffaa4bec5101', 10, 'onPrivacyRemoveData', 'public', '', 1, '2019-07-16 00:25:53', '2022-01-07 20:08:43', 18, '', 2),
+(54, 'JiRxdWVyeSwgJiRkYg==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVF1ZXJ5Q29tcG9uZW50RGF0YSBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBRdWVyeSBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', 'eaa35b7f-7d1c-49d3-831f-bb0244252666', 11, 'jcb_ce_onBeforeQueryComponentData', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 08:52:16', 17, '', 3),
+(55, 'JiRjb21wb25lbnQ=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZU1vZGVsQ29tcG9uZW50RGF0YSBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '9eb554e0-76ea-4a03-8f46-8475d5bf5333', 11, 'jcb_ce_onBeforeModelComponentData', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 08:44:24', 17, '', 3),
+(56, 'JiRjb21wb25lbnQ=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyTW9kZWxDb21wb25lbnREYXRhIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIE1vZGVsIENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '8313b40b-c2c5-4e11-ae90-c00f64ea0694', 11, 'jcb_ce_onAfterModelComponentData', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:40:59', 17, '', 3),
+(57, 'JiRpZCwgJiRxdWVyeSwgJiRkYg==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVF1ZXJ5Vmlld0RhdGEgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBRdWVyeSBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', 'f94ccd78-499a-4506-a861-db10d9318d4b', 11, 'jcb_ce_onBeforeQueryViewData', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 08:56:39', 17, '', 3),
+(58, 'JiR2aWV3', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZU1vZGVsVmlld0RhdGEgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '75abc21c-b567-45fa-a2f0-c63881016117', 11, 'jcb_ce_onBeforeModelViewData', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 08:33:46', 17, '', 3),
+(59, 'JiR2aWV3', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyTW9kZWxWaWV3RGF0YSBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIE1vZGVsIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '399887f9-be54-49ce-8f39-857f006f42a1', 11, 'jcb_ce_onAfterModelViewData', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 08:29:02', 17, '', 3),
+(60, 'JiRpZCwgJiR0YWJsZSwgJiRxdWVyeSwgJiRkYg==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVF1ZXJ5Q3VzdG9tVmlld0RhdGEgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBRdWVyeSBDdXN0b20gVmlldyBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', 'c155d2f5-438b-42ed-bd99-a5da5e58a5aa', 11, 'jcb_ce_onBeforeQueryCustomViewData', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:07:57', 17, '', 3),
+(61, 'JiR2aWV3LCAmJGlkLCAmJHRhYmxl', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZU1vZGVsQ3VzdG9tVmlld0RhdGEgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBDdXN0b20gVmlldyBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '6467fa89-e765-4fad-827d-27b5cc19c7f5', 11, 'jcb_ce_onBeforeModelCustomViewData', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 10:55:34', 17, '', 3),
+(62, 'JiR2aWV3', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyTW9kZWxDdXN0b21WaWV3RGF0YSBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIE1vZGVsIEN1c3RvbSBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '0d7d1e31-f051-4073-b2a6-da5641db35e5', 11, 'jcb_ce_onAfterModelCustomViewData', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:42:29', 17, '', 3),
+(63, 'JiRpZCwgJiRxdWVyeSwgJiRkYg==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVF1ZXJ5RmllbGREYXRhIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBRdWVyeSBGaWVsZCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '68234c9c-ce45-40cb-bf20-26439ca59fb5', 11, 'jcb_ce_onBeforeQueryFieldData', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:52:15', 17, '', 3),
+(64, 'JiRmaWVsZA==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZU1vZGVsRmllbGREYXRhIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBGaWVsZCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', 'fad73446-8b5e-47ea-9a45-204955be1396', 11, 'jcb_ce_onBeforeModelFieldData', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:06:05', 17, '', 3),
+(65, 'JiRmaWVsZA==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyTW9kZWxGaWVsZERhdGEgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIE1vZGVsIEZpZWxkIERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '5489124e-92e1-47f2-abcc-9f2e3d3734d2', 11, 'jcb_ce_onAfterModelFieldData', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:51:57', 17, '', 3),
+(66, 'JiRqb29tbGFWZXJzaW9uRGF0YQ==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyU2V0Sm9vbWxhVmVyc2lvbkRhdGEgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIFNldCBKb29tbGEgVmVyc2lvbiBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '5975f8a2-c0bf-407b-93e6-df71c23d1340', 11, 'jcb_ce_onAfterSetJoomlaVersionData', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:54:12', 17, '', 3),
+(67, 'JiRsaWJyYXJpZXM=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVNldExpYmFyaWVzIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBTZXQgTGliYXJpZXNdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '5b6d33b1-e3cb-404f-87df-4141d46edf22', 11, 'jcb_ce_onBeforeSetLibaries', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:13:41', 17, '', 3),
+(68, 'JiRkeW5hbWljX2ZpZWxkcywgJiRyZWFkX29ubHksICYkZGJrZXksICYkdmlldywgJiRjb21wb25lbnQsICYkbmFtZVNpbmdsZUNvZGUsICYkbmFtZUxpc3RDb2RlLCAmJGxhbmdfdmlldywgJiRsYW5nX3ZpZXdz', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkRmllbGRzIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBGaWVsZHNdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '95cc5748-044e-4117-8902-13a88f793227', 11, 'jcb_ce_onBeforeBuildFields', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:40:10', 17, '', 3),
+(69, 'JiRkeW5hbWljX2ZpZWxkcywgJiRyZWFkX29ubHksICYkZGJrZXksICYkdmlldywgJiRjb21wb25lbnQsICYkbmFtZVNpbmdsZUNvZGUsICYkbmFtZUxpc3RDb2RlLCAmJGxhbmdfdmlldywgJiRsYW5nX3ZpZXdz', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRGaWVsZHMgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEZpZWxkc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '006eae8a-de76-4692-b688-ef61ec5ba883', 11, 'jcb_ce_onAfterBuildFields', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:39:46', 17, '', 3),
+(70, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkRmlsZXNDb250ZW50IGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBGaWxlcyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', 'ce8e5ff6-9ae2-4f63-8585-0a0eb90894d9', 11, 'jcb_ce_onBeforeBuildFilesContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 14:02:46', 17, '', 3),
+(71, 'JiR2aWV3LCAmJHZpZXdOYW1lX3NpbmdsZSwgJiR2aWV3TmFtZV9saXN0', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkQWRtaW5FZGl0Vmlld0NvbnRlbnQgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBZG1pbiBFZGl0IFZpZXcgQ29udGVudF0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '945405b1-e1f3-475d-a210-57bfd6d85285', 11, 'jcb_ce_onBeforeBuildAdminEditViewContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 13:56:36', 17, '', 3),
+(72, 'JiR2aWV3LCAmJHZpZXdOYW1lX3NpbmdsZSwgJiR2aWV3TmFtZV9saXN0', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRBZG1pbkVkaXRWaWV3Q29udGVudCBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEFkbWluIEVkaXQgVmlldyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '0ab51c86-7cec-477e-84a1-473f6dfc3efe', 11, 'jcb_ce_onAfterBuildAdminEditViewContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 14:40:52', 19, '', 3),
+(73, 'JiR2aWV3LCAmJHZpZXdOYW1lX3NpbmdsZSwgJiR2aWV3TmFtZV9saXN0', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkQWRtaW5MaXN0Vmlld0NvbnRlbnQgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBZG1pbiBMaXN0IFZpZXcgQ29udGVudF0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '8d11988c-b5da-417a-a822-bbee15805f75', 11, 'jcb_ce_onBeforeBuildAdminListViewContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 13:58:31', 18, '', 3),
+(74, 'JiR2aWV3LCAmJHZpZXdOYW1lX3NpbmdsZSwgJiR2aWV3TmFtZV9saXN0', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRBZG1pbkxpc3RWaWV3Q29udGVudCBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEFkbWluIExpc3QgVmlldyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '488f76e1-9410-428c-8b80-2d2d1f3f473b', 11, 'jcb_ce_onAfterBuildAdminListViewContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 13:59:08', 19, '', 3),
+(75, 'JiR2aWV3LCAmJHZpZXdOYW1lX3NpbmdsZSwgJiR2aWV3TmFtZV9saXN0', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRBZG1pblZpZXdDb250ZW50IGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEFkbWluIExpc3QgVmlldyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', 'cb762829-b0d9-4986-b08b-2469773b7dc8', 11, 'jcb_ce_onAfterBuildAdminViewContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 14:00:49', 17, '', 3),
+(76, 'JiR2aWV3LCAmJGNvZGU=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkQ3VzdG9tQWRtaW5WaWV3Q29udGVudCBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBDdXN0b20gQWRtaW4gVmlldyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '9ac1e7f9-9542-43d4-b3f7-eed1864f1f91', 11, 'jcb_ce_onBeforeBuildCustomAdminViewContent', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:05:25', 17, '', 3),
+(77, 'JiR2aWV3LCAmJGNvZGU=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRDdXN0b21BZG1pblZpZXdDb250ZW50IGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEN1c3RvbSBBZG1pbiBWaWV3IENvbnRlbnRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '11c8561b-1e5f-4ceb-a8aa-9ed23c9fcf04', 11, 'jcb_ce_onAfterBuildCustomAdminViewContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 14:11:30', 17, '', 3),
+(78, 'JiR2aWV3LCAmJGNvZGU=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkU2l0ZVZpZXdDb250ZW50IGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBTaXRlIFZpZXcgQ29udGVudF0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '9bf22b7f-70eb-4308-9bde-656224e12bb5', 11, 'jcb_ce_onBeforeBuildSiteViewContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 14:13:05', 17, '', 3),
+(79, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRGaWxlc0NvbnRlbnQgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEZpbGVzIENvbnRlbnRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', 'c79225f1-83d1-48ac-9205-bc3b8c6004cb', 11, 'jcb_ce_onAfterBuildFilesContent', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 08:25:34', 17, '', 3),
+(80, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkQWRtaW5MYW5nIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBZG1pbiBMYW5nXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '124a98a5-bfad-4bd0-801e-8eb11afc490c', 11, 'jcb_ce_onBeforeBuildAdminLang', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-03 20:28:47', 17, '', 3),
+(81, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRBZG1pbkxhbmcgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEFkbWluIExhbmddDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '6cd1c885-8831-4ab2-8938-7fbd6afe7284', 11, 'jcb_ce_onAfterBuildAdminLang', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-03 20:29:00', 17, '', 3),
+(82, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkU2l0ZUxhbmcgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBTaXRlIExhbmddDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '872b2b74-0a31-476e-bf69-f07ad0c30013', 11, 'jcb_ce_onBeforeBuildSiteLang', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-03 20:29:14', 17, '', 3),
+(83, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRTaXRlTGFuZyBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIFNpdGUgTGFuZ10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '8af20c08-1024-48f1-9455-c3477d18d88e', 11, 'jcb_ce_onAfterBuildSiteLang', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-03 20:29:25', 17, '', 3),
+(84, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkU2l0ZVN5c0xhbmcgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBTaXRlIFN5cyBMYW5nXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '7801e292-d42c-477c-ab81-33bc5ecf3c86', 11, 'jcb_ce_onBeforeBuildSiteSysLang', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-03 20:29:38', 17, '', 3),
+(85, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRTaXRlU3lzTGFuZyBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIFNpdGUgU3lzIExhbmddDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '2eca1668-2713-426a-8ab0-7b8ab8c3038b', 11, 'jcb_ce_onAfterBuildSiteSysLang', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-03 20:31:33', 17, '', 3),
+(86, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkQWRtaW5TeXNMYW5nIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBZG1pbiBTeXMgTGFuZ10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '59e2c26b-1c09-408e-a7dd-61ebf8131ae9', 11, 'jcb_ce_onBeforeBuildAdminSysLang', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-03 20:30:23', 17, '', 3),
+(87, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRBZG1pblN5c0xhbmcgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEFkbWluIFN5cyBMYW5nXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '48f340d6-3b5b-43eb-9d0e-fc9e6bae059d', 11, 'jcb_ce_onAfterBuildAdminSysLang', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-03 20:29:52', 17, '', 3),
+(88, 'JHRhcmdldEFyZWE=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkQWxsTGFuZ0ZpbGVzIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBbGwgTGFuZyBGaWxlc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '520da18b-a159-4fe6-b89e-0d6fff7a4c09', 11, 'jcb_ce_onBeforeBuildAllLangFiles', 'public', '', 1, '2019-08-14 14:59:09', '2024-08-04 16:39:14', 18, '', 3),
+(89, 'JiRuYW1lLCAmJHBhdGgsICYkYm9tLCAmJHZpZXc=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVNldEZpbGVDb250ZW50IGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBTZXQgRmlsZSBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '4fec5742-a4ad-4246-8dbd-c1fa33809657', 11, 'jcb_ce_onBeforeSetFileContent', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:11:05', 18, '', 3),
+(90, 'JiRjb250ZW50LCAmJG5hbWUsICYkcGF0aCwgJiRib20sICYkdmlldw==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkdldEZpbGVDb250ZW50cyBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEdldCBGaWxlIENvbnRlbnRzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', 'e7b0f288-56f3-4949-b956-d99fad261f84', 11, 'jcb_ce_onGetFileContents', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:10:19', 17, '', 3),
+(91, 'JiRjb250ZW50LCAmJG5hbWUsICYkcGF0aCwgJiRib20sICYkdmlldw==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVdyaXRlRmlsZUNvbnRlbnQgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBTZXQgRmlsZSBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '72e032e3-76f6-4a5f-89de-3daadfc402b6', 11, 'jcb_ce_onBeforeWriteFileContent', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:11:49', 17, '', 3),
+(92, 'JiR0aW1lcg==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVNldENvbmZpZ0ZpZWxkc2V0cyBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBTZXQgQ29uZmlnIEZpZWxkc2V0c10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '94e5d802-32a1-487d-8a56-59e065c94968', 11, 'jcb_ce_onBeforeSetConfigFieldsets', 'public', '', 1, '2019-08-14 14:59:09', '2023-12-30 09:47:40', 17, '', 3),
+(93, 'JiR0aW1lcg==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyU2V0Q29uZmlnRmllbGRzZXRzIGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIFNldCBDb25maWcgRmllbGRzZXRzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '677860f0-6bb1-4884-b86d-4cb827b9b233', 11, 'jcb_ce_onAfterSetConfigFieldsets', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:53:02', 17, '', 3),
+(94, 'JiRjb21wb25lbnRQYXRoLCAmJHJlcG9GdWxsUGF0aCwgJiRjb21wb25lbnREYXRh', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVVwZGF0ZVJlcG8gZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBVcGRhdGUgUmVwb10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', 'bea8eec3-c5d6-48fa-88eb-180630e988f1', 11, 'jcb_ce_onBeforeUpdateRepo', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:54:53', 17, '', 3),
+(95, 'JiRjb21wb25lbnRQYXRoLCAmJHJlcG9GdWxsUGF0aCwgJiRjb21wb25lbnREYXRh', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyVXBkYXRlUmVwbyBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIFVwZGF0ZSBSZXBvXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '1d871930-4da5-442d-aaf7-85710d30db2f', 11, 'jcb_ce_onAfterUpdateRepo', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 09:55:25', 17, '', 3),
+(96, 'JiRjb21wb25lbnRQYXRoLCAmJGZpbGVwYXRoLCAmJHRlbXBQYXRoLCAmJGNvbXBvbmVudEZvbGRlck5hbWU=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVppcENvbXBvbmVudCBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBaaXAgQ29tcG9uZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', 'cb6f9b25-7946-4138-a2bb-dddde1418f12', 11, 'jcb_ce_onBeforeZipComponent', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:15:02', 17, '', 3),
+(97, 'JiRmaWxlcGF0aCwgJiR0ZW1wUGF0aCwgJiRiYWNrdXBQYXRo', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJhY2t1cFppcCBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCYWNrdXAgWmlwXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICov', 'plugins', '2d3acb7b-0191-470f-a95c-e013a0e367d7', 11, 'jcb_ce_onBeforeBackupZip', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:00:00', 17, '', 3),
+(98, 'JiRmaWxlcGF0aCwgJiR0ZW1wUGF0aCwgJiRjb21wb25lbnRTYWxlc05hbWU=', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZU1vdmVUb1NlcnZlciBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb3ZlIFRvIFNlcnZlcl0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '7cc9b264-71fa-4316-8993-66deb5df511e', 11, 'jcb_ce_onBeforeMoveToServer', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:00:30', 17, '', 3),
+(99, 'JiRmaWxlcGF0aCwgJiR0ZW1wUGF0aCwgJiRjb21wb25lbnRGb2xkZXJOYW1l', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyWmlwQ29tcG9uZW50IGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIFppcCBDb21wb25lbnRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '323b818c-5806-468c-aee0-57ee6d36df70', 11, 'jcb_ce_onAfterZipComponent', 'public', '', 1, '2019-08-14 14:59:09', '2024-01-05 10:00:52', 18, '', 3),
+(100, 'JiRjb250ZXh0LCAmJGZpbGVwYXRoLCAmJHRlbXBQYXRoLCAmJHBsdWdpbkZvbGRlck5hbWUsICYkcGx1Z2luRGF0YQ==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZVppcFBsdWdpbiBldmVudA==', 'CS8qKgoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFppcCBQbHVnaW5dCgkgKgoJICogQHJldHVybiAgdm9pZAoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'cb0431f2-b906-4db1-ac24-a80125305f59', 11, 'jcb_ce_onBeforeZipPlugin', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 16, '', 3),
+(101, 'JiRjb250ZXh0LCAmJGZpbGVwYXRoLCAmJHRlbXBQYXRoLCAmJHBsdWdpbkZvbGRlck5hbWUsICYkcGx1Z2luRGF0YQ==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyWmlwUGx1Z2luIGV2ZW50', 'CS8qKgoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQWZ0ZXIgWmlwIFBsdWdpbl0KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'b3a95602-090b-4ccf-be19-3414b47949ee', 11, 'jcb_ce_onAfterZipPlugin', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 16, '', 3),
+(102, 'JGluc3RhbGxlciwgJGV4dGVudGlvbl9pZA==', '', 'CS8qKgoJICogb25FeHRlbnNpb25BZnRlclVwZGF0ZS4KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'a49ca2dd-16fc-4e39-a684-dfe7e1546cdd', 11, 'onExtensionAfterUpdate', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 16, '', 3),
+(103, 'JiR1cmwsICYkaGVhZGVycw==', '', 'CS8qKgoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuCgkgKgoJICogRm9yIG1vZGlmaWNhdGlvbiBvZiBVUkwgYW5kIGhlYWRlcnMgYmVmb3JlIHBhY2thZ2UgZG93bmxvYWQKCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'e64853c8-beaa-482f-993c-920d73563210', 12, 'onInstallerBeforePackageDownload', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(104, 'JGNvbnRleHQsICRlaWQsICR2YWx1ZQ==', '', 'CS8qKgoJICogb25FeHRlbnNpb25BZnRlclVwZGF0ZS4KCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gdGhlIHBsdWdpbi4KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGVpZCAgICAgIEV4dGVuc2lvbiBpZHMgdG8gdW4vcHVibGlzaAoJICogQHBhcmFtICAgaW50ICAgICAkdmFsdWUgICAgUHVibGlzaCB2YWx1ZQoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', 'e3e7df88-07ff-4ff4-8f51-9b86b9c273cc', 12, 'onExtensionAfterUpdate', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(105, 'JiRzaG93SmVkQW5kV2ViSW5zdGFsbGVyLCAmJGRpc3BsYXlPYmplY3Q=', '', 'CS8qKgoJICogb25JbnN0YWxsZXJCZWZvcmVEaXNwbGF5LgoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '1da96c1f-6075-403b-94df-19fff6263053', 12, 'onInstallerBeforeDisplay', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(106, 'JHRhYnMgPSBhcnJheSg=', 'CQlyZXR1cm4gJHRhYnM7', 'CS8qKgoJICogb25JbnN0YWxsZXJWaWV3QmVmb3JlRmlyc3RUYWIuCgkgKgoJICogQHJldHVybiAgYXJyYXkgb2YgdGFicwoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'eefabd77-68f4-4396-b20e-a907c3f1a95b', 12, 'onInstallerViewBeforeFirstTab', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(107, 'JHRhYnMgPSBhcnJheSg=', 'CQlyZXR1cm4gJHRhYnM7', 'CS8qKgoJICogb25JbnN0YWxsZXJBZGRJbnN0YWxsYXRpb25UYWIuCgkgKgoJICogQHJldHVybiAgYXJyYXkgb2YgdGFicwoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '4a903f38-81bb-47b6-acac-a3d7212617d7', 12, 'onInstallerAddInstallationTab', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(108, 'JHRhYnMgPSBhcnJheSg=', 'CQlyZXR1cm4gJHRhYnM7', 'CS8qKgoJICogb25JbnN0YWxsZXJWaWV3QWZ0ZXJMYXN0VGFiLgoJICoKCSAqIEByZXR1cm4gIGFycmF5IG9mIHRhYnMKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '0c44dc39-1973-4b30-9af7-acf6abc482fd', 12, 'onInstallerViewAfterLastTab', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(109, 'JG1vZGVsLCAmJHBhY2thZ2U=', '', 'CS8qKgoJICogb25JbnN0YWxsZXJCZWZvcmVJbnN0YWxsYXRpb24uCgkgKgoJICogVGhpcyBldmVudCBhbGxvd3MgYW4gaW5wdXQgcHJlLXRyZWF0bWVudCwgYSBjdXN0b20gcHJlLXBhY2tpbmcgb3IgY3VzdG9tIGluc3RhbGxhdGlvbi4KCSAqIChlLmcuIGZyb20gYSBKU09OIGRlc2NyaXB0aW9uKS4KCSAqCgkgKiBAcmV0dXJuICBib29sZWFuCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', '0e694b93-694a-4f20-9e7f-290a920a10b3', 12, 'onInstallerBeforeInstallation', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(110, 'JG1vZGVsLCAmJHBhY2thZ2U=', '', 'CS8qKgoJICogb25JbnN0YWxsZXJCZWZvcmVJbnN0YWxsZXIuCgkgKgoJICogVGhpcyBldmVudCBhbGxvd3MgYSBjdXN0b20gaW5zdGFsbGF0aW9uIG9mIHRoZSBwYWNrYWdlIG9yIGEgY3VzdG9taXphdGlvbiBvZiB0aGUgcGFja2FnZToKCSAqCgkgKiBAcmV0dXJuICBib29sZWFuCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', '51f5bea3-6a9e-4165-9e61-9cc91c865bfe', 12, 'onInstallerBeforeInstaller', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(111, 'JG1vZGVsLCAmJHBhY2thZ2UsICRpbnN0YWxsZXIsICYkcmVzdWx0LCAmJG1zZw==', '', 'CS8qKgoJICogb25JbnN0YWxsZXJBZnRlckluc3RhbGxlci4KCSAqCgkgKiBUaGlzIGV2ZW50IGFsbG93cyBhIGN1c3RvbSBhIHBvc3QtZmxpZ2h0CgkgKgoJICogQHJldHVybiAgYm9vbGVhbgoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', 'e3633016-5801-44ab-81d8-ff19c396745f', 12, 'onInstallerAfterInstaller', 'public', '', 1, '2019-08-14 14:59:09', '2022-01-07 20:08:43', 18, '', 1),
+(112, 'JGNvbnRleHQsICYkZGF0YQ==', '', 'CS8qKgoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGRhdGEKCSAqCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb250ZXh0ICBUaGUgY29udGV4dCBmb3IgdGhlIGRhdGEKCSAqIEBwYXJhbSAgIG9iamVjdCAgJGRhdGEgICAgIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhIGZvciB0aGUgZm9ybS4KCSAqCgkgKiBAcmV0dXJuICBib29sZWFuCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', 'ab056f69-a17e-4060-99c3-3b0505da2c49', 3, 'onContentPrepareData', 'public', '', 1, '2019-08-17 01:59:23', '2022-01-07 20:08:43', 14, '', 4),
+(113, 'Rm9ybSAkZm9ybSwgJGRhdGE=', '', 'CS8qKgoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uCgkgKgoJICogQHBhcmFtICAgRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtCgkgKiBAcGFyYW0gICBzdGRDbGFzcyAgJGRhdGEgIFRoZSBkYXRhCgkgKgoJICogQHJldHVybiAgYm9vbGVhbgoJICoKCSAqIEBzaW5jZSAgIDEuMAoJICov', 'plugins', '2d8f2ef2-5f8c-420f-a3c9-c252315b10ab', 3, 'onContentPrepareForm', 'public', '', 1, '2019-08-17 01:59:23', '2022-01-07 20:08:43', 14, '', 4),
+(114, 'SkZvcm0gJGZvcm0sICYkZGF0YQ==', '', 'CS8qKgoJICogVGhlIHZhbGlkYXRpb24gZXZlbnQuCgkgKgoJICogQHBhcmFtICAgSkZvcm0gICAgICRmb3JtICBUaGUgZm9ybQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '962e479a-7e71-40e2-92ff-b944f8345e42', 3, 'onUserBeforeDataValidation', 'public', '', 1, '2019-08-17 01:59:23', '0000-00-00 00:00:00', 1, '', 4),
+(115, 'JGNvbnRleHQsICRkYXRhLCBGb3JtICRmb3Jt', '', 'CS8qKgoJICogTm9ybWFsaXplcyB0aGUgcmVxdWVzdCBkYXRhLgoJICoKCSAqIEBwYXJhbSAgIHN0cmluZyAgJGNvbnRleHQgIFRoZSBjb250ZXh0CgkgKiBAcGFyYW0gICBvYmplY3QgICRkYXRhICAgICBUaGUgb2JqZWN0CgkgKiBAcGFyYW0gICBGb3JtICAgICRmb3JtICAgICBUaGUgZm9ybQoJICoKCSAqIEByZXR1cm4gIHZvaWQKCSAqCgkgKiBAc2luY2UgICAxLjAKCSAqLw==', 'plugins', '782ad30f-b914-439a-913e-1f173041f146', 3, 'onContentNormaliseRequestData', 'public', '', 1, '2019-08-22 01:09:18', '2022-01-07 20:08:43', 13, '', 5),
+(116, 'JiRjb25maWcsICRjb21waWxlcg==', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUdldCBldmVudA==', 'CS8qKgoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIEdldF0KCSAqCgkgKiBAcmV0dXJuICB2b2lkCgkgKgoJICogQHNpbmNlICAgMS4wCgkgKi8=', 'plugins', '36244a14-d958-4eca-a144-641e7a443116', 11, 'jcb_ce_onBeforeGet', 'public', '', 1, '2019-08-22 01:09:18', '2022-01-07 20:08:43', 18, '', 1),
+(117, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyR2V0IGV2ZW50', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldF0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '0695639b-a4b9-4e90-a6cb-a7664b8299fa', 11, 'jcb_ce_onAfterGet', 'public', '', 1, '2019-08-22 01:09:18', '2023-12-30 10:04:20', 19, '', 1),
+(118, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUJ1aWxkQWNjZXNzU2VjdGlvbnMgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBY2Nlc3MgU2VjdGlvbnNdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', 'f9646de6-8bfe-46bb-94ef-32ee5a491623', 11, 'jcb_ce_onBeforeBuildAccessSections', 'public', '', 1, '2019-08-26 17:31:27', '2024-01-03 20:46:45', 5, '', 6),
+(119, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyQnVpbGRBY2Nlc3NTZWN0aW9ucyBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEJ1aWxkIEFjY2VzcyBTZWN0aW9uc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '23d68585-5186-4ca4-8f20-0020030f0275', 11, 'jcb_ce_onAfterBuildAccessSections', 'public', '', 1, '2019-08-26 17:31:27', '2023-12-30 13:47:34', 5, '', 6),
+(120, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkJlZm9yZUdldENvbXBvbmVudERhdGEgZXZlbnQ=', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBHZXQgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8=', 'plugins', '4c963ae0-d84d-4841-8758-ea3f95063c8c', 11, 'jcb_ce_onBeforeGetComponentData', 'public', '', 1, '2019-08-28 13:10:02', '2023-12-29 18:28:02', 4, '', 7),
+(121, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIGpjYl9jZV9vbkFmdGVyR2V0Q29tcG9uZW50RGF0YSBldmVudA==', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw==', 'plugins', '71a8f4a8-2bdf-4896-83af-cf871edd9d3a', 11, 'jcb_ce_onAfterGetComponentData', 'public', '', 1, '2019-08-28 13:10:02', '2023-12-29 18:28:26', 9, '', 7),
+(122, '', 'CQkvLyBkbyBzb21ldGhpbmcgb24gdGhlIG9uQmVmb3JlQ29tcGlsZUhlYWQgZXZlbnQ=', 'LyoqDQogKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBoZWFkIGlzIGNvbXBpbGVkIGFuZCBhbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBoZWFkIGRhdGEuDQogKiBJbiB0aGlzIGNhc2UsIGl0J3MgdXNlZCB0byBhZGQgYSBKYXZhU2NyaXB0IGZpbGUgdG8gdGhlIGZyb250IGVuZCBvZiB0aGUgSm9vbWxhIHNpdGUuDQogKg0KICogQHJldHVybiAgdm9pZA0KICoNCiAqIEBzaW5jZSAgIDMuMC4wDQogKiBAdGhyb3dzICBFeGNlcHRpb24gb24gZXJyb3IuDQogKi8=', 'plugins', 'c4450b88-658c-4b19-a4a9-c82d14c12d98', 8, 'onBeforeCompileHead', 'public', '', 1, '2023-11-09 05:24:03', '2023-11-09 05:24:50', 2, '', 8);
+
--
-- Dumping data for table `#__componentbuilder_placeholder`
--
@@ -2181,6 +2354,7 @@ INSERT INTO `#__componentbuilder_placeholder` (`id`, `target`, `value`, `params`
(19, '[[[gitea_api_url]]]', 'aHR0cHM6Ly9naXQudmRtLmRldi9hcGkvdjE=', '', 1, '2021-12-04 02:34:16', '2022-01-07 20:15:57'),
(20, '[[[COMPANY]]]', 'VkRN', '', 1, '2021-12-05 20:36:52', '2021-12-05 20:37:11'),
(21, '[[[gitea_url]]]', 'Z2l0LnZkbS5kZXY=', '', 1, '2023-07-08 07:54:21', '0000-00-00 00:00:00'),
+(22, '[[[gitea_host_name]]]', 'VkRN', '', 1, '2023-07-08 07:54:51', '0000-00-00 00:00:00'),
(25, '[[[upload_max_filesize]]]', 'MTI4TQ==', '', 1, '2024-04-25 07:24:25', '0000-00-00 00:00:00'),
(26, '[[[post_max_size]]]', 'MTI4TQ==', '', 1, '2024-04-25 07:24:50', '0000-00-00 00:00:00'),
(27, '[[[max_execution_time]]]', 'NjA=', '', 1, '2024-04-25 07:25:11', '0000-00-00 00:00:00'),
@@ -2195,11 +2369,16 @@ INSERT INTO `#__componentbuilder_placeholder` (`id`, `target`, `value`, `params`
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'),
+(2, '{}', '', 1, 1, 'Bootstrap v4', '', 1, '2017-11-12 02:08:39', '2024-09-08 22:33:34', 19, '', 2, '', '', '6f6650a5-ebff-4783-8508-f0285c0e98a6'),
+(3, '{}', '', 1, 1, 'Uikit v3', '', 1, '2017-11-11 22:08:45', '2024-09-08 22:27:06', 21, '', 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');
+(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'),
+(11, '{}', 'UIKIT table sorting lib', 1, 1, 'UIKIT DataTable', '', 1, '2020-06-27 21:31:21', '0000-00-00 00:00:00', 1, '', 10, '', '', 'cc16cffd-587d-4720-ab1b-e4120db1e85e'),
+(12, '{}', '', 1, 3, 'jQuery UI Timepicker', 'Ly8gSnVzdCB0byBnZXQgdGhlIGZpbGVzIGxvYWRlZA==', 1, '2020-06-28 23:57:49', '2020-06-29 02:54:45', 4, '', 11, '', '', '3989928c-0dac-4c30-bcdd-8a736b5c5121'),
+(13, '{}', '', 1, 1, 'DataTable', '', 1, '2022-10-17 20:54:40', '2022-10-17 20:57:06', 2, '', 12, '', '', '4c3e3dce-0845-46cb-9e4a-494f75dc7dd8'),
+(14, '{}', '', 1, 1, 'Nouislider', '', 1, '2023-06-26 15:01:58', '2023-07-24 18:11:43', 3, '', 13, '', '', '2ccbb15a-65d7-4a35-b732-0cf6b72c9275'),
+(15, '{}', '', 1, 1, 'DataTable Bootstrap5', '', 1, '2024-03-09 16:27:28', '2024-03-09 16:29:33', 2, '', 12, '', '', '876b88eb-5d34-4f90-a896-80327593a787');
--
-- Dumping data for table `#__componentbuilder_snippet`
@@ -2371,14 +2550,83 @@ INSERT INTO `#__componentbuilder_validation_rule` (`id`, `inherit`, `name`, `php
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, '\"
\"', 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, '\"
\"', 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, '\"
\"', 1, '2015-05-05 23:44:32', '2016-02-07 22:43:18', 4, '', 285, '10c1eccb-b3c3-4325-a056-45a72d116fd8', '', '', '', '', ''),
+(100, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Email (required)', 'NULL', '', 24, '\"
\"', 1, '2015-05-05 23:44:32', '2024-09-15 22:24:59', 5, '', 285, '10c1eccb-b3c3-4325-a056-45a72d116fd8', '', '', '', '', ''),
(158, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Image', 'NOT NULL', '', 12, '\"
\"', 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, '\"
\"', 1, '2015-04-07 22:12:58', '2016-03-28 14:00:02', 2, '', 7, '65933a19-243a-48b2-aae9-34e2da710051', '', '', '', '', ''),
+(196, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Mobile Phone (required)', 'NOT NULL', '', 23, '\"
\"', 1, '2015-04-07 22:12:58', '2024-09-16 23:27:41', 5, '', 7, '65933a19-243a-48b2-aae9-34e2da710051', '', '', '', '', ''),
(199, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Name (Key - Required)', 'NOT NULL', '', 24, '\"
\"', 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, '\"
\"', 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, '\"
\"', 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, '\"
\"', 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, '\"
\"', 1, '2015-12-07 01:47:32', '2018-08-03 09:56:07', 4, '', 649, 'cb2bdf20-8800-407b-a4f6-250152a0bdfb', '', '', '', '', '');
+(280, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Website (no required)', 'NOT NULL', '', 27, '\"
\"', 1, '2015-04-08 00:36:16', '2024-09-16 23:30:59', 3, '', 105, '6c3a6983-d1bf-4e5e-9e99-deea00b0cefd', '', '', '', '', ''),
+(324, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'URL', 'NOT NULL', '', 27, '\"
\"', 1, '2015-05-19 16:08:22', '2022-06-18 10:23:24', 4, '', 378, 'd29d6854-bb4a-4fa2-83a1-5a1b9c9a0eaf', '', '', '', '', ''),
+(599, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Groups (multi)', 'NOT NULL', 1, 29, '\"
\"', 1, '2015-07-13 23:10:19', '2024-06-05 11:19:28', 8, '', 50, '59a0cad6-26cc-43b6-8af8-2242eb595d76', '', '', '', '', ''),
+(682, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add More', 'NULL', '', 17, '\"
\"', 1, '2015-08-05 01:18:20', '2024-09-07 02:20:13', 8, '', 196, 'a66389aa-2323-4f44-8c23-ff44969639be', '', '', '', '', ''),
+(691, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Email (not required)', 'NOT NULL', '', 24, '\"
not required<\\/small>\\\"\\n\\tsize=\\\"10\\\"\\n\\tmaxlength=\\\"50\\\"\\n\\tdescription=\\\"Enter Email\\\"\\n\\tclass=\\\"text_area\\\"\\n\\trequired=\\\"false\\\"\\n\\tfilter=\\\"STRING\\\"\\n\\tmessage=\\\"Error! Please add email address here.\\\"\\n\\thint=\\\"demo@example.com\\\"\\n\\/>\"', 1, '2015-08-16 17:21:15', '2019-11-20 11:42:55', 3, '', 285, '976f7e2d-68e3-497e-b4d1-6326d5b95078', '', '', '', '', ''),
+(1011, '', '', '', '', '', '', 'Other', '0000-00-00', '', '', 'DATE', '', '', '', 'Date of Birth (required)', 'NOT NULL', '', 1, '\" \"', 1, '2015-12-07 01:47:32', '2024-09-16 23:29:15', 6, '', 649, 'cb2bdf20-8800-407b-a4f6-250152a0bdfb', '', '', '', '', ''),
+(1160, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Mobile Phone (not-required)', 'NOT NULL', '', 23, '\" \"', 1, '2016-03-28 14:01:08', '2024-09-16 23:28:15', 2, '', 7, 'f40974bd-a946-4bc4-9be1-fedec2d09c24', '', '', '', '', ''),
+(2395, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Password', 'NULL', '', 16, '\" \"', 1, '2018-09-15 22:15:07', '2024-09-15 22:30:49', 7, '', 884, 'b9097198-705f-4a6b-bd10-676d55cd6517', '', '', '', '', ''),
+(2396, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Confirm Password', 'NOT NULL', '', 16, '\" \"', 1, '2018-09-15 22:18:25', '2018-09-15 23:28:27', 6, '', 884, 'cf1b5d92-eae9-4f52-8745-11fcbbed977c', '', '', '', '', ''),
+(2657, '', '', '', '', '', '', '', '', 'Other', 36, 'VARCHAR', 2, '', '', 'GUID', 'NOT NULL', '', 24, '\" \"', 1, '2019-10-10 23:08:59', '2024-09-15 23:03:52', 8, '', 960, '5aa57bbe-7b19-4db9-915c-561863458d2b', '', '', '', '', ''),
+(2678, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', 2, '', '', 'Username (required)', 'NULL', '', 24, '\" \"', 1, '2019-11-17 01:36:06', '2024-09-15 22:24:34', 3, '', 663, 'b7edbefd-d8ee-4765-9a09-ab1922e70e68', '', '', '', '', ''),
+(2941, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Name (not-required)', 'NOT NULL', '', 24, '\" \"', 1, '2021-08-05 09:08:56', '2024-09-16 23:13:56', 2, '', 4, '2707db98-28f2-485b-9344-8287427c00ab', '', '', '', '', ''),
+(3044, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Redirects', 'NOT NULL', '', 35, '\" \"', 1, '2022-06-18 10:25:59', '2024-06-05 11:13:57', 3, '', 1025, '12035b51-753b-4e3f-9f41-cde3a6046286', '', '', '', '', ''),
+(3049, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Margin Left', 'NOT NULL', '', 15, '\" \"', 1, '2022-09-21 04:45:28', '2022-10-14 15:17:39', 4, '', 1026, '12ecc6cc-9195-4633-8ecd-27ecc0643bd4', '', '', '', '', ''),
+(3050, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Margin Right', 'NOT NULL', '', 15, '\" \"', 1, '2022-09-21 04:46:17', '2022-10-14 15:17:42', 4, '', 1026, '3e72e2ab-0731-46f1-83ac-8bffddcd5634', '', '', '', '', ''),
+(3051, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Header Height', 'NOT NULL', '', 15, '\" \"', 1, '2022-09-21 04:47:13', '2022-10-14 15:17:45', 3, '', 1026, '3d3bf310-a38f-4e31-89c8-d5d986f4bb53', '', '', '', '', ''),
+(3052, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Year Width', 'NOT NULL', '', 15, '\" \"', 1, '2022-09-21 04:48:58', '2022-10-14 15:17:49', 3, '', 1026, 'a2f93b12-c3fd-4e00-9732-0c97a7f37489', '', '', '', '', ''),
+(3053, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Branch Height', 'NOT NULL', '', 15, '\" \"', 1, '2022-09-21 04:49:44', '2022-10-14 15:17:52', 3, '', 1026, 'f8ceaba3-04d3-406d-abb9-c8372100817c', '', '', '', '', ''),
+(3054, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Footer Height', 'NOT NULL', '', 15, '\" \"', 1, '2022-09-21 04:50:26', '2022-10-14 15:17:56', 3, '', 1026, 'fb71c5cc-65d9-4389-8599-b94f4eecc97c', '', '', '', '', ''),
+(3055, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Min Years', 'NOT NULL', '', 15, '\" \"', 1, '2022-09-21 04:54:35', '2022-10-14 15:17:59', 2, '', 1026, '44a3a4aa-f601-4765-b656-2f0a01dd6fd9', '', '', '', '', ''),
+(3056, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Max Years', 'NOT NULL', '', 15, '\" \"', 1, '2022-09-21 04:55:04', '2022-10-14 15:18:03', 4, '', 1026, '9f5ddbec-3f1c-4af9-8d33-a158bcaaf453', '', '', '', '', ''),
+(3057, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Version Name', 'NOT NULL', '', 24, '\" \"', 1, '2022-09-21 04:57:05', '2022-09-21 05:22:43', 4, '', 155, 'f3e44dab-059a-434e-98c5-9d9def389295', '', '', '', '', ''),
+(3058, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Default Text Colour', 'NOT NULL', '', 5, '\" \"', 1, '2022-09-21 04:59:12', '2023-08-11 06:51:42', 4, '', 1027, '7414d14b-b802-4ac2-9090-218cdb32156c', '', '', '', '', ''),
+(3059, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'End of Life Background Colour', 'NOT NULL', '', 5, '\" \"', 1, '2022-09-21 05:09:27', '2023-08-11 06:50:52', 3, '', 1027, 'f83befac-e15e-421c-83a0-c17e99492b79', '', '', '', '', ''),
+(3060, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'End of Life Text Colour', 'NOT NULL', '', 5, '\" \"', 1, '2022-09-21 05:10:43', '2023-08-11 06:50:43', 3, '', 1027, '8097f524-48e6-470a-aa42-e4383d3019fa', '', '', '', '', ''),
+(3061, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Future Background Colour', 'NOT NULL', '', 5, '\" \"', 1, '2022-09-21 05:11:25', '2023-08-11 06:46:06', 3, '', 1027, '8f485452-b062-4ec9-9fa5-0182d04d8d7c', '', '', '', '', ''),
+(3062, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'State', 'NOT NULL', '', 24, '\" \"', 1, '2022-09-21 05:11:52', '2023-08-11 09:52:31', 5, '', 1027, 'ef4b98c9-09b8-4dc9-9940-415c4e913ae1', '', '', '', '', ''),
+(3063, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Today Line Colour', 'NOT NULL', '', 5, '\" \"', 1, '2022-09-21 05:12:19', '2023-08-11 06:51:14', 4, '', 1027, 'cb60a327-5ce5-4b48-a8e0-27321022bf40', '', '', '', '', ''),
+(3064, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Today Text Colour', 'NOT NULL', '', 5, '\" \"', 1, '2022-09-21 05:12:36', '2023-08-11 06:51:05', 4, '', 1027, 'a2e37110-c69f-41b3-b05b-f5f51d0d9ab4', '', '', '', '', ''),
+(3065, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Years Line Colour', 'NOT NULL', '', 5, '\" \"', 1, '2022-09-21 05:13:57', '2023-08-11 06:51:23', 3, '', 1027, '9e2dcfc2-ea21-4caf-88aa-f0706d5878e5', '', '', '', '', ''),
+(3066, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Years Text Colour', 'NOT NULL', '', 5, '\" \"', 1, '2022-09-21 05:15:04', '2023-08-11 06:51:32', 2, '', 1027, '0a6ee559-822b-4cd1-a049-d956ba2ff80b', '', '', '', '', ''),
+(3071, '', '', '', '', 'LnN1YmZvcm0tdGFibGUtbGF5b3V0IGlucHV0IHsNCgltYXgtd2lkdGg6IDkwJTsNCn0=', '', '', '', '', '', 'TEXT', '', '', '', 'Versions', 'NOT NULL', '', 35, '\" \"', 1, '2022-09-21 05:24:55', '2023-08-11 06:20:08', 7, '', 1028, '801520d9-b7b3-47c5-a2a9-2581199ead0b', '', '', '', '', ''),
+(3333, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Show Legend', 'NOT NULL', '', 17, '\" \"', 1, '2023-08-10 15:24:54', '2023-08-10 15:25:08', 2, '', 1052, 'dc416a4a-a19f-4ef5-a703-e2334df42efd', '', '', '', '', ''),
+(3334, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Legend Background Colour', 'NOT NULL', '', 5, '\" \"', 1, '2023-08-10 15:26:17', '2023-08-10 15:26:28', 2, '', 1027, '8f1c9c1f-9d64-4f6c-9066-777665c7dcac', '', '', '', '', ''),
+(3335, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Legend Text Colour', 'NOT NULL', '', 5, '\" \"', 1, '2023-08-10 15:26:44', '2023-08-10 15:27:14', 2, '', 1027, '11bf8b86-99ad-4003-82eb-c55c16d0a041', '', '', '', '', ''),
+(3336, '', '', '', '', 'LnN1YmZvcm0tdGFibGUtbGF5b3V0IGlucHV0IHsNCgltYXgtd2lkdGg6IDkwJTsNCn0=', '', '', '', '', '', 'TEXT', '', '', '', 'Version Dates', 'NOT NULL', '', 35, '\" \"', 1, '2023-08-11 06:18:36', '2023-08-11 09:53:16', 8, '', 1028, '7bb0cce1-9a1d-4f38-9f94-4585eaabcdcd', '', '', '', '', ''),
+(3337, '', '', '', '', '', '', '', '', 10, '', 'VARCHAR', '', '', '', 'Future Text Colour', 'NOT NULL', '', 5, '\" \"', 1, '2023-08-11 06:48:59', '2023-08-11 06:49:21', 2, '', 1027, '1805a9da-75bf-41d6-b120-4c021fd93d8d', '', '', '', '', ''),
+(3395, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Allowed Type', 'NULL', '', 11, '\" \"', 1, '2020-09-08 21:44:48', '2024-09-15 23:02:52', 6, '', 1060, '9f6f776f-9741-4aec-a3ff-fb9880fdcb5c', '', '', '', '', ''),
+(3396, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Storage Folder', 'NULL', '', 24, '\" \"', 1, '2020-09-08 21:51:10', '2024-09-16 00:53:48', 7, '', 1061, '523f91f8-ca60-44f7-9de0-645549967095', '', '', '', '', ''),
+(3397, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'File Naming Convention', 'NULL', '', 11, '\" \"', 1, '2020-09-08 21:55:51', '2024-09-09 01:36:33', 8, '', 1062, '56518d20-a341-44f5-b8ba-f5a1ce5a5d0a', '', '', '', '', ''),
+(3398, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'File Name', 'NULL', '', 24, '\" \"', 1, '2020-09-07 22:05:14', '2024-09-15 23:35:18', 9, '', 1063, '725e856a-b8cc-4590-90e3-3eed6fd0873c', '', '', '', '', ''),
+(3399, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'File Name', 'NULL', '', 24, '\" \"', -2, '2024-09-06 22:07:51', '0000-00-00 00:00:00', 1, '', 1063, '6ca8b751-f99f-492b-965a-0c3277b7da87', '', '', '', '', ''),
+(3400, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'File Size', 'NULL', '', 24, '\" \"', 1, '2020-09-07 22:11:54', '2024-09-15 23:36:59', 10, '', 1063, '77a1711b-ad1f-4379-921b-5e4ef5c31a42', '', '', '', '', ''),
+(3401, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', 2, '', '', 'File Extension', 'NULL', '', 24, '\" \"', 1, '2020-09-07 22:21:14', '2024-09-15 23:37:40', 6, '', 1063, '080b92dc-a4b4-46b2-83d4-3430284f5e06', '', '', '', '', ''),
+(3402, '', '', '', '', '', '', '', '', 1024, '', 'VARCHAR', 2, '', '', 'File Path', 'NULL', '', 24, '\" \"', 1, '2020-09-07 22:29:12', '2024-09-15 23:36:05', 12, '', 1063, 'ed28e30c-30c3-4830-afdc-5a61bf25cd49', '', '', '', '', ''),
+(3403, '', '', '', '', '', '', '', '', 'Other', 36, 'VARCHAR', 2, '', '', 'GUID ENTITY', 'NULL', '', 24, '\" \"', 1, '2020-09-07 22:32:35', '2024-09-17 02:03:47', 5, '', 1064, '3f1fedeb-b943-42a7-88e7-c4f1eb1fd8a4', '', '', '', '', ''),
+(3404, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Entity Type (demo)', 'NULL', '', 11, '\" \"', 1, '2020-09-07 22:37:18', '2024-09-17 02:04:20', 8, '', 1065, '2e24a9fe-5793-46be-b071-631c0b18d8f4', '', '', '', '', ''),
+(3405, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'User ID', 'NULL', '', 28, '\" \"', 1, '2020-09-07 22:46:31', '2024-09-16 23:34:12', 4, '', 1066, '3dfab308-41de-4d11-9c94-4ba330a202ac', '', '', '', '', ''),
+(3406, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Username (User Map)', 'NULL', '', 24, '\" \"', -2, '2024-09-06 22:58:59', '0000-00-00 00:00:00', 1, '', 1067, '78a39c78-2432-4c95-bbac-e482a0f4aed9', '', '', '', '', ''),
+(3407, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'User ID (Hidden)', 'NULL', '', 9, '\" \"', 1, '2020-09-07 23:11:49', '2024-09-07 02:29:24', 2, '', 1068, 'a0d7c091-1781-45fb-a71f-1447bad69614', '', '', '', '', ''),
+(3408, '', '', '', '', '', '', '', '', 'Other', 36, 'VARCHAR', 2, '', '', 'GUID (Hidden)', 'NULL', '', 9, '\" \"', 1, '2020-09-07 23:13:52', '2024-09-16 23:23:17', 4, '', 1069, 'fb3115a1-e579-401a-9b53-9469cd4739e4', '', '', '', '', ''),
+(3409, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Entity Type (Hidden)', 'NULL', '', 9, '\" \"', 1, '2020-09-07 23:22:59', '2024-09-17 02:50:31', 7, '', 1070, '8a64b899-6cb9-4ba3-bed1-559675f8d20b', '', '', '', '', ''),
+(3410, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Users', 'NULL', 6, 35, '\" \"', 1, '2020-09-07 23:26:06', '2024-09-16 23:44:01', 9, '', 1071, 'c61285fd-2e35-4605-869f-66d2fbd70004', 'W1tbZmllbGRdXV0gPSBTdXBlcl9fXzlkNzZiOGRjXzM4ODNfNDc1NV9iMTFjXzEzMWQxOWNhOGE1M19fX1Bvd2VyOjpfKCdEYXRhLlVzZXJzU3ViZm9ybScpLT50YWJsZSgndXNlcl9lbnRpdHlfbWFwJyktPmdldCgkaXRlbS0+Z3VpZCA/PyAnJyAsJ2VudGl0eScsICd1c2VycycsIFsndXNlcl9pZCcsJ2d1aWQnLCduYW1lJywndXNlcm5hbWUnLCdlbWFpbCcsJ2VudGl0eV90eXBlJ10pOw==', 'U3VwZXJfX185ZDc2YjhkY18zODgzXzQ3NTVfYjExY18xMzFkMTljYThhNTNfX19Qb3dlcjo6XygnRGF0YS5Vc2Vyc1N1YmZvcm0nKS0+dGFibGUoJ3VzZXJfZW50aXR5X21hcCcpLT5zZXQoW1tbZmllbGRdXV0gPz8gW10sICdndWlkJywgJ2VudGl0eScsICRkYXRhWydndWlkJ10gPz8gJycpOw==', '', '', ''),
+(3411, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Allowed Image Formats', 'NULL', '', 6, '\" \"', 1, '2020-09-08 00:06:26', '2024-09-07 02:36:13', 8, '', 1072, '6b3c73d5-7640-43c0-a2e7-125a187f4513', '', '', '', '', ''),
+(3412, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Allowed Document Formats', 'NULL', '', 6, '\" \"', 1, '2020-09-08 00:07:16', '2024-09-15 22:58:42', 9, '', 1072, '24f17aaf-cc19-4bad-bc8b-4d37c79a898d', '', '', '', '', ''),
+(3413, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Allowed Media Formats', 'NULL', '', 6, '\" \"', 1, '2020-09-08 00:08:13', '2024-09-15 22:56:57', 10, '', 1072, 'fd936809-37c1-4016-a4ee-a4d016343725', '', '', '', '', ''),
+(3414, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Allowed File Formats', 'NULL', '', 6, '\" \"', 1, '2020-09-08 00:09:04', '2024-09-15 22:55:34', 8, '', 1072, 'ca8f38cb-f930-4976-a76b-c1d6cd18652d', '', '', '', '', ''),
+(3415, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'More', 'NULL', 6, 35, '\" \"', 1, '2020-09-08 00:26:48', '2024-09-17 23:40:14', 9, '', 1073, 'd763ecd7-8d72-418e-8010-706c0785baab', 'W1tbZmllbGRdXV0gPSBTdXBlcl9fXzlkNzZiOGRjXzM4ODNfNDc1NV9iMTFjXzEzMWQxOWNhOGE1M19fX1Bvd2VyOjpfKCdEYXRhLlN1YmZvcm0nKS0+dGFibGUoJ21vcmUnKS0+Z2V0KCRpdGVtLT5ndWlkID8/ICcnICwnZW50aXR5JywgJ21vcmUnLCBbJ2d1aWQnLCdlbWFpbCcsJ21vYmlsZV9waG9uZScsJ2RhdGVvZmJpcnRoJywnd2Vic2l0ZScsJ2VudGl0eV90eXBlJ10pOw==', 'U3VwZXJfX185ZDc2YjhkY18zODgzXzQ3NTVfYjExY18xMzFkMTljYThhNTNfX19Qb3dlcjo6XygnRGF0YS5TdWJmb3JtJyktPnRhYmxlKCdtb3JlJyktPnNldChbW1tmaWVsZF1dXSA/PyBbXSwgJ2d1aWQnLCAnZW50aXR5JywgJGRhdGFbJ2d1aWQnXSA/PyAnJyk7', '', '', ''),
+(3416, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Look Groups', 'NULL', '', 29, '\" \"', 1, '2020-09-08 02:37:42', '2024-09-07 02:40:32', 3, '', 1074, '104f8410-a07e-4cf8-aad5-2b4db7c6864c', '', '', '', '', ''),
+(3417, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Note VDM File Uploader', 'NOT NULL', '', 14, '\"\\r\\n <\\/span>\\r\\n Attach file<\\/span> by dropping them here or<\\/span>\\r\\n \\r\\n
\\r\\n
selecting one<\\/span> <\\/span>\\r\\n <\\/div>\\r\\n<\\/div>\\r\\n\\r\\n<\\/progress>\\\"\\n\\tshowon=\\\"file_type!:\\\"\\n\\/>\"', 1, '2020-09-07 22:41:51', '2024-09-17 22:49:08', 9, '', 1075, '47a3db14-de87-4cc2-8724-17f437a77d93', '', '', '', '', ''),
+(3418, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Crop Image', 'NULL', '', 17, '\" \"', 1, '2020-09-07 23:53:41', '2024-09-16 23:47:41', 6, '', 1076, 'a778cf30-3fa9-4099-8a3a-0479f734069f', '', '', '', '', ''),
+(3419, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Crop Details', 'NULL', '', 35, '\" \"', 1, '2020-09-07 23:57:52', '2024-09-16 23:49:27', 12, '', 1077, '6f327030-dcdf-4d80-b3d9-293d4bbe39f7', '', '', '', '', ''),
+(3420, '', '', '', '', '', '', '', '', 'Other', 36, 'VARCHAR', 2, '', '', 'Entity File Type', 'NULL', '', 6, '\" \"', 1, '2020-09-08 00:02:53', '2024-09-17 22:48:52', 14, '', 1078, '2a877e46-59b9-4f97-9dec-8c84c16741f2', '', '', '', '', ''),
+(3421, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Crop Width (in pixels)', 'NULL', '', 24, '\" \"', 1, '2020-09-08 00:06:03', '2024-09-16 23:47:18', 6, '', 1079, '1616608c-5307-4496-89e2-36a326a84716', '', '', '', '', ''),
+(3422, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Crop Height (in pixels)', 'NULL', '', 24, '\" \"', 1, '2020-09-08 00:07:09', '2024-09-16 23:47:12', 7, '', 1079, 'ab0d3b92-bd90-4957-ab71-cbc7a5fabeb3', '', '', '', '', ''),
+(3423, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Download Access', 'NULL', '', 34, '\" \"', 1, '2024-09-12 23:58:19', '2024-09-15 22:49:34', 2, '', 894, '794ac8d4-c78b-4f98-9953-07e4ce5ad491', '', '', '', '', ''),
+(3424, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', 2, '', '', 'Mime', 'NULL', '', 24, '\" \"', 1, '2024-09-13 00:29:08', '2024-09-15 23:14:45', 3, '', 1063, '68c1e141-fb2e-49a6-bf56-1da6d8a058e8', '', '', '', '', ''),
+(3425, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', 2, '', '', 'Target (Files)', 'NULL', '', 11, '\" \"', 1, '2024-09-14 02:44:19', '2024-09-15 22:50:33', 2, '', 1080, 'e24026ef-294a-48e5-9be0-3f95dcb2b66b', '', '', '', '', ''),
+(3426, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Note VDM File Display', 'NOT NULL', '', 14, '\"\\r\\n<\\/div>\\r\\n
<\\/div>\\r\\n
<\\/div>\\\"\\n\\/>\"', 1, '2024-09-14 02:58:38', '2024-09-14 02:57:23', 1, '', 1075, '639e63b1-a63d-4d40-853f-42e7b28a5d35', '', '', '', '', ''),
+(3427, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Confirm Password2', 'NULL', '', 16, '\"
\"', 1, '2024-09-15 22:31:43', '2024-09-15 22:32:42', 2, '', 884, '27c39335-cd12-46a5-82e7-26d3c67b9bb6', '', '', '', '', ''),
+(3428, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'File Type', 'NULL', '', 6, '\"
\"', 1, '2024-09-15 23:26:41', '2024-09-15 23:29:05', 2, '', 1078, 'c2f884f9-31a0-4bb9-8310-64b5d9132d32', '', '', '', '', ''),
+(3429, '', '', '', '', '', '', 'Other', '0000-00-00', '', '', 'DATE', '', '', '', 'Date of Birth (not required)', 'NOT NULL', '', 1, '\"
\"', 1, '2024-09-16 23:29:21', '2024-09-16 23:29:35', 2, '', 649, 'c8cc2a22-f2e4-4dcc-9088-ed1d78416228', '', '', '', '', '');
--
-- Dumping data for table `#__componentbuilder_fieldtype`
@@ -2390,7 +2638,7 @@ INSERT INTO `#__componentbuilder_fieldtype` (`id`, `description`, `name`, `prope
(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'),
+(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\'.\"},\"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\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"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\":\"readonly\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties12\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"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\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"},\"properties15\":{\"name\":\"extends\",\"example\":\"list\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The JFormField sub class that should be extended. The options are (\'list\',\'radio\',\'checkboxes\')\"},\"properties16\":{\"name\":\"button\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) to add new button next to field in edit view\"},\"properties17\":{\"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.\"},\"properties18\":{\"name\":\"component\",\"example\":\"com_###component###\",\"mandatory\":\"1\",\"description\":\"(mandatory) The name of the component where this table is found. Must be com_users\"},\"properties25\":{\"name\":\"entity\",\"example\":\"fieldtype\",\"adjustable\":\"1\",\"description\":\"(optional) The area\\/entity this custom field is loaded. This value can be used in the field custom code.\"},\"properties19\":{\"name\":\"view\",\"example\":\"subject\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The single view name if the place this field is added.\"},\"properties20\":{\"name\":\"views\",\"example\":\"subjects\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) The list view name if the place this field is added.\"},\"properties21\":{\"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.\"},\"properties22\":{\"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.\"},\"properties23\":{\"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\"},\"properties24\":{\"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, 31, '', '', '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'),
@@ -2400,7 +2648,7 @@ INSERT INTO `#__componentbuilder_fieldtype` (`id`, `description`, `name`, `prope
(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 number, 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, 5, '', '', '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'),
+(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.\"},\"properties18\":{\"name\":\"rules\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) determines whether the password should adhere to certain rules.\"},\"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.\"},\"properties19\":{\"name\":\"strengthmeter\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) measures the strength of the password.\"},\"properties20\":{\"name\":\"force\",\"example\":\"off\",\"adjustable\":\"1\",\"description\":\"(optional) forces a password to be set.\"},\"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, 11, '', '', '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'),
@@ -2425,8 +2673,13 @@ INSERT INTO `#__componentbuilder_fieldtype` (`id`, `description`, `name`, `prope
(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, 3, '', 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, 2, '', 11, '7520c8f4-543d-4c7a-8e4f-e2da71c3b1cd'),
+(41, 'Joomla Privacy Field Type', 'Privacy@', '{\"properties0\":{\"name\":\"type\",\"example\":\"privacy\",\"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\":\"privacy\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Privacy Policy\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Read the full privacy policy.\",\"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\":\"filter\",\"example\":\"integer\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties5\":{\"name\":\"option\",\"example\":\"1|I agree,0|No\",\"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.\"},\"properties6\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties7\":{\"name\":\"required\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"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)\"},\"properties10\":{\"name\":\"extends\",\"example\":\"radio\",\"mandatory\":\"1\",\"description\":\"Must be radio\"},\"properties11\":{\"name\":\"type_phpHEADER_1\",\"example\":\"use Joomla\\\\CMS\\\\Factory;\\r\\nuse Joomla\\\\CMS\\\\Language\\\\Text;\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The Header USE options\"},\"properties12\":{\"name\":\"type_php_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the field input markup.\\r\\n\\t *\\r\\n\\t * @return string The field input markup.\\r\\n\\t *\\r\\n\\t * @since 3.9.0\\r\\n\\t *\\/\\r\\n\\tprotected function getInput()\\r\\n\\t{\\r\\n\\t\\t\\/\\/ Display the message before the field\\r\\n\\t\\techo $this->getRenderer(\'plugins.system.privacyconsent.message\')->render($this->getLayoutData());\\r\\n\\r\\n\\t\\treturn parent::getInput();\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getInput method.\"},\"properties13\":{\"name\":\"type_phpa_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the field label markup.\\r\\n\\t *\\r\\n\\t * @return string The field label markup.\\r\\n\\t *\\r\\n\\t * @since 3.9.0\\r\\n\\t *\\/\\r\\n\\tprotected function getLabel()\\r\\n\\t{\\r\\n\\t\\tif ($this->hidden)\\r\\n\\t\\t{\\r\\n\\t\\t\\treturn \'\';\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn $this->getRenderer(\'plugins.system.privacyconsent.label\')->render($this->getLayoutData());\\r\\n\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getLabel method.\"},\"properties14\":{\"name\":\"type_phpb_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the data to be passed to the layout for rendering.\\r\\n\\t *\\r\\n\\t * @return array\\r\\n\\t *\\r\\n\\t * @since 3.9.4\\r\\n\\t *\\/\\r\\n\\tprotected function getLayoutData()\\r\\n\\t{\\r\\n\\t\\t$data = parent::getLayoutData();\\r\\n\\r\\n\\t\\t$article = false;\\r\\n\\t\\t$privacyArticle = $this->element[\'article\'] > 0 ? (int) $this->element[\'article\'] : 0;\\r\\n\\r\\n\\t\\tif ($privacyArticle && Factory::getApplication()->isClient(\'site\'))\\r\\n\\t\\t{\\r\\n\\t\\t\\t$db = Factory::getDbo();\\r\\n\\t\\t\\t$query = $db->getQuery(true)\\r\\n\\t\\t\\t\\t->select($db->quoteName(array(\'id\', \'alias\', \'catid\', \'language\')))\\r\\n\\t\\t\\t\\t->from($db->quoteName(\'#__content\'))\\r\\n\\t\\t\\t\\t->where($db->quoteName(\'id\') . \' = \' . (int) $privacyArticle);\\r\\n\\t\\t\\t$db->setQuery($query);\\r\\n\\t\\t\\t$article = $db->loadObject();\\r\\n\\r\\n\\t\\t\\tJLoader::register(\'ContentHelperRoute\', JPATH_BASE . \'\\/components\\/com_content\\/helpers\\/route.php\');\\r\\n\\r\\n\\t\\t\\t$slug = $article->alias ? ($article->id . \':\' . $article->alias) : $article->id;\\r\\n\\t\\t\\t$article->link = ContentHelperRoute::getArticleRoute($slug, $article->catid, $article->language);\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\t$extraData = array(\\r\\n\\t\\t\\t\'privacynote\' => !empty($this->element[\'note\']) ? $this->element[\'note\'] : Text::_(\'By signing up to this web site and agreeing to the Privacy Policy you agree to this web site storing your information.\'),\\r\\n\\t\\t\\t\'options\' => $this->getOptions(),\\r\\n\\t\\t\\t\'value\' => (string) $this->value,\\r\\n\\t\\t\\t\'translateLabel\' => $this->translateLabel,\\r\\n\\t\\t\\t\'translateDescription\' => $this->translateDescription,\\r\\n\\t\\t\\t\'translateHint\' => $this->translateHint,\\r\\n\\t\\t\\t\'privacyArticle\' => $privacyArticle,\\r\\n\\t\\t\\t\'article\' => $article,\\r\\n\\t\\t);\\r\\n\\r\\n\\t\\treturn array_merge($data, $extraData);\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getLayoutData method.\"}}', 'Joomla Privacy Field', '', 1, 7, '', 12, '60c1d674-8bb7-4b31-97ed-ee1f16bc412a'),
+(42, 'Joomla Terms Field Type', 'Terms@', '{\"properties0\":{\"name\":\"type\",\"example\":\"terms\",\"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\":\"terms\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Terms & Conditions\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Read the full terms and conditions.\",\"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\":\"filter\",\"example\":\"integer\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties5\":{\"name\":\"option\",\"example\":\"1|I agree,0|No\",\"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.\"},\"properties6\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties7\":{\"name\":\"required\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"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)\"},\"properties10\":{\"name\":\"extends\",\"example\":\"radio\",\"mandatory\":\"1\",\"description\":\"Must be radio\"},\"properties11\":{\"name\":\"type_phpHEADER_1\",\"example\":\"use Joomla\\\\CMS\\\\Factory;\\r\\nuse Joomla\\\\CMS\\\\Form\\\\FormHelper;\\r\\nuse Joomla\\\\CMS\\\\Language\\\\Associations;\\r\\nuse Joomla\\\\CMS\\\\Language\\\\Text;\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The Header USE options\"},\"properties12\":{\"name\":\"type_php_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the field input markup.\\r\\n\\t *\\r\\n\\t * @return string The field input markup.\\r\\n\\t *\\r\\n\\t * @since 3.9.0\\r\\n\\t *\\/\\r\\n\\tprotected function getInput()\\r\\n\\t{\\r\\n\\t\\t\\/\\/ Display the message before the field\\r\\n\\t\\techo $this->getRenderer(\'plugins.user.terms.message\')->render($this->getLayoutData());\\r\\n\\r\\n\\t\\treturn parent::getInput();\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getInput method.\"},\"properties13\":{\"name\":\"type_phpa_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the field label markup.\\r\\n\\t *\\r\\n\\t * @return string The field label markup.\\r\\n\\t *\\r\\n\\t * @since 3.9.0\\r\\n\\t *\\/\\r\\n\\tprotected function getLabel()\\r\\n\\t{\\r\\n\\t\\tif ($this->hidden)\\r\\n\\t\\t{\\r\\n\\t\\t\\treturn \'\';\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn $this->getRenderer(\'plugins.user.terms.label\')->render($this->getLayoutData());\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getLabel method.\"},\"properties14\":{\"name\":\"type_phpb_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the data to be passed to the layout for rendering.\\r\\n\\t *\\r\\n\\t * @return array\\r\\n\\t *\\r\\n\\t * @since 3.9.4\\r\\n\\t *\\/\\r\\n\\tprotected function getLayoutData()\\r\\n\\t{\\r\\n\\t\\t$data = parent::getLayoutData();\\r\\n\\r\\n\\t\\t$article = false;\\r\\n\\t\\t$termsArticle = $this->element[\'article\'] > 0 ? (int) $this->element[\'article\'] : 0;\\r\\n\\r\\n\\t\\tif ($termsArticle && Factory::getApplication()->isClient(\'site\'))\\r\\n\\t\\t{\\r\\n\\t\\t\\t$db = Factory::getDbo();\\r\\n\\t\\t\\t$query = $db->getQuery(true)\\r\\n\\t\\t\\t\\t->select($db->quoteName(array(\'id\', \'alias\', \'catid\', \'language\')))\\r\\n\\t\\t\\t\\t->from($db->quoteName(\'#__content\'))\\r\\n\\t\\t\\t\\t->where($db->quoteName(\'id\') . \' = \' . (int) $termsArticle);\\r\\n\\t\\t\\t$db->setQuery($query);\\r\\n\\t\\t\\t$article = $db->loadObject();\\r\\n\\r\\n\\t\\t\\tJLoader::register(\'ContentHelperRoute\', JPATH_BASE . \'\\/components\\/com_content\\/helpers\\/route.php\');\\r\\n\\r\\n\\t\\t\\tif (Associations::isEnabled())\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\t$termsAssociated = Associations::getAssociations(\'com_content\', \'#__content\', \'com_content.item\', $termsArticle);\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\t$currentLang = Factory::getLanguage()->getTag();\\r\\n\\r\\n\\t\\t\\tif (isset($termsAssociated) && $currentLang !== $article->language && array_key_exists($currentLang, $termsAssociated))\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\t$article->link = ContentHelperRoute::getArticleRoute(\\r\\n\\t\\t\\t\\t\\t$termsAssociated[$currentLang]->id,\\r\\n\\t\\t\\t\\t\\t$termsAssociated[$currentLang]->catid,\\r\\n\\t\\t\\t\\t\\t$termsAssociated[$currentLang]->language\\r\\n\\t\\t\\t\\t);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\t$slug = $article->alias ? ($article->id . \':\' . $article->alias) : $article->id;\\r\\n\\t\\t\\t\\t$article->link = ContentHelperRoute::getArticleRoute($slug, $article->catid, $article->language);\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\t$extraData = array(\\r\\n\\t\\t\\t\'termsnote\' => !empty($this->element[\'note\']) ? $this->element[\'note\'] : Text::_(\'By signing up to this web site you accept the Terms & Conditions.\'),\\r\\n\\t\\t\\t\'options\' => $this->getOptions(),\\r\\n\\t\\t\\t\'value\' => (string) $this->value,\\r\\n\\t\\t\\t\'translateLabel\' => $this->translateLabel,\\r\\n\\t\\t\\t\'translateDescription\' => $this->translateDescription,\\r\\n\\t\\t\\t\'translateHint\' => $this->translateHint,\\r\\n\\t\\t\\t\'termsArticle\' => $termsArticle,\\r\\n\\t\\t\\t\'article\' => $article,\\r\\n\\t\\t);\\r\\n\\r\\n\\t\\treturn array_merge($data, $extraData);\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getLayoutData method.\"}}', 'Joomla Terms Field', '', 1, 7, '', 12, '20e88943-08db-49e6-a571-dba70cdf4cca'),
(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, 3, '', 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.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myimagelist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an image\",\"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 image 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 image 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 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.\"},\"properties7\":{\"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.\"},\"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 image files from a specified directory.', '', 1, 3, '', 14, '72680e92-2859-49c6-ad92-c2329c52f9f8');
+(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.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myimagelist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an image\",\"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 image 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 image 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 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.\"},\"properties7\":{\"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.\"},\"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 image files from a specified directory.', '', 1, 3, '', 14, '72680e92-2859-49c6-ad92-c2329c52f9f8'),
+(45, '', 'Modal Menu', '{\"properties0\":{\"name\":\"type\",\"example\":\"modal_menu\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be modal_menu.\"},\"properties1\":{\"name\":\"name\",\"example\":\"base\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Base Item\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"option\",\"example\":\"Current\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"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\":\"select\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) show select options\"},\"properties5\":{\"name\":\"new\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory)\"},\"properties6\":{\"name\":\"edit\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory)\"},\"properties7\":{\"name\":\"description\",\"example\":\"Select a menu item to always be used as the base for the menu display. You must set the Start Level to the same level or higher than the level of the base item. This will cause the module to be displayed on all assigned pages. If Current is selected the active item is used as the base. This causes the module to only display when the parent menu item is active.\",\"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.\"},\"properties8\":{\"name\":\"clear\",\"example\":\"true\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory)\"},\"properties9\":{\"name\":\"disable\",\"example\":\"separator,alias,heading,url\",\"adjustable\":\"1\",\"description\":\"(optional)\"},\"properties10\":{\"name\":\"filter\",\"example\":\"integer\",\"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.\"},\"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\\r\\n\"}}', 'Modal Menu', '', 1, 7, '', 15, '715256a4-8cc2-4d66-9d08-31e58ca5b036'),
+(46, 'The menu form field type provides a drop down list of the available menus from your Joomla! site. 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. ', 'Menu', '{\"properties0\":{\"name\":\"type\",\"example\":\"menu\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be menu.\"},\"properties1\":{\"name\":\"name\",\"example\":\"menutype\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the filed.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Menu to Show\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Choose which menu should be rendered with this instance of module.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) tooltip for the form field.\"},\"properties4\":{\"name\":\"clientid\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"\"},\"properties5\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default menu. Note that this is the name of the menu shown in the Type column on the Menu Manager screen and not the menu ID number.\"},\"properties6\":{\"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\"},\"properties7\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'Menu Type', '', 1, 4, '', 16, '6349f152-8ef5-43bd-a89b-ce18f33ac5e5'),
+(47, 'Dynamic Checkboxes', 'DynamicCheckboxes@', '{\"properties0\":{\"name\":\"type\",\"example\":\"change_this\",\"adjustable\":\"1\",\"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\":\"dynamic_checkboxes\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Dynamic Checkboxes\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"The checkbox linked to global subform of the same name\",\"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\":\"option\",\"example\":\"1|Default\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this checkboxes. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties5\":{\"name\":\"default\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"required\",\"example\":\"true\",\"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\"},\"properties8\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"},\"properties9\":{\"name\":\"extends\",\"example\":\"checkboxes\",\"mandatory\":\"1\",\"description\":\"Must be checkboxes\"},\"properties10\":{\"name\":\"type_phpHEADER_1\",\"example\":\"\\\\JFormHelper::loadFieldClass(\'checkboxes\');\\r\\nuse VDM\\\\Joomla\\\\Utilities\\\\Component\\\\Helper;\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The Header USE options\"},\"properties11\":{\"name\":\"type_php_1\",\"example\":\"\\t\\/**\\r\\n\\t * Method to get the data to be passed to the layout for rendering.\\r\\n\\t *\\r\\n\\t * @return array\\r\\n\\t *\\r\\n\\t * @since 3.5\\r\\n\\t *\\/\\r\\n\\tprotected function getLayoutData()\\r\\n\\t{\\r\\n\\t\\t$data = parent::getLayoutData();\\r\\n\\r\\n\\t\\t\\/\\/ True if the field has \'value\' set. In other words, it has been stored, don\'t use the default values.\\r\\n\\t\\t$hasValue = (isset($this->value) && !empty($this->value));\\r\\n\\r\\n\\t\\t\\/\\/ If a value has been stored, use it. Otherwise, use the defaults.\\r\\n\\t\\t$checkedOptions = $hasValue ? $this->value : $this->checkedOptions;\\r\\n\\r\\n\\t\\t\\/\\/ get the form options\\r\\n\\t\\t$options = $this->getOptions();\\r\\n\\r\\n\\t\\t\\/\\/ get the component params\\r\\n\\t\\t$params = Helper::getParams();\\r\\n\\t\\t$subform = $params->get($this->fieldname);\\r\\n\\r\\n\\t\\t\\/\\/ add the paths found in global settings\\r\\n\\t\\tif (is_array($subform) && $subform !== [])\\r\\n\\t\\t{\\r\\n\\t\\t\\tforeach ($subform as $value)\\r\\n\\t\\t\\t{\\r\\n\\t\\t\\t\\tif (isset($value->path) && strlen($value->path) > 3)\\r\\n\\t\\t\\t\\t{\\r\\n\\t\\t\\t\\t\\t$tmp = new \\\\stdClass;\\r\\n\\t\\t\\t\\t\\t$tmp->value = $value->set_me;\\r\\n\\t\\t\\t\\t\\t$tmp->text = $value->set_me;\\r\\n\\t\\t\\t\\t\\t$tmp->checked = false;\\r\\n\\r\\n\\t\\t\\t\\t\\t$options[] = $tmp;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\t$extraData = array(\\r\\n\\t\\t\\t\'checkedOptions\' => is_array($checkedOptions) ? $checkedOptions : explode(\',\', (string) $checkedOptions),\\r\\n\\t\\t\\t\'hasValue\' => $hasValue,\\r\\n\\t\\t\\t\'options\' => $options\\r\\n\\t\\t);\\r\\n\\r\\n\\t\\treturn array_merge($data, $extraData);\\r\\n\\t}\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"The php for the getLayoutData method.\"}}', 'Super Power Repository Paths', '', 1, 14, '', 12, '7ed21e79-cbc5-48e3-9ed0-ca72b0f2f1a1');
--
-- Dumping data for table `#__componentbuilder_language`
@@ -2516,19 +2769,13 @@ INSERT INTO `#__componentbuilder_language` (`id`, `langtag`, `name`, `params`, `
-- Dumping data for table `#__componentbuilder_repository`
--
-INSERT INTO `#__componentbuilder_repository` (`id`, `system_name`, `organisation`, `repository`, `target`, `type`, `base`, `guid`, `read_branch`, `access`, `ordering`, `published`, `modified`, `created`, `params`) VALUES
-(1, 'Super Powers', 'joomla', 'super-powers', 1, 1, 'https://git.vdm.dev', '1a1b6f3d-f16c-431a-b270-7a8a80cc7f56', 'master', 1, 1, 1, '2024-06-10 11:13:46', '2024-06-10 10:59:35', ''),
-(2, 'JCB Compiler', 'joomla', 'jcb-compiler', 1, 1, 'https://git.vdm.dev', 'd12c7672-7b75-4a59-a5f3-c33f1a2f929b', 'master', 1, 2, 1, '2024-08-20 09:34:58', '2024-06-10 11:01:06', ''),
-(3, 'JCB Packager', 'joomla', 'jcb-packager', 1, 1, 'https://git.vdm.dev', 'd8155014-5734-4fb5-9ccb-6bb33367ef78', 'master', 1, 3, 1, '2024-08-20 08:33:21', '2024-06-10 11:01:35', ''),
-(4, 'PHP Seclib', 'joomla', 'phpseclib', 1, 1, 'https://git.vdm.dev', 'e63d916c-81c1-4a56-a73f-584174b36c87', 'master', 1, 4, 1, '2024-06-15 17:43:09', '2024-06-10 11:02:03', ''),
-(5, 'JCB Search', 'joomla', 'search', 1, 1, 'https://git.vdm.dev', '6e57dc23-a17d-4937-bdbf-639ae1b8409f', 'master', 1, 5, 1, '2024-06-15 17:43:09', '2024-06-10 11:02:43', ''),
-(6, 'Gitea', 'joomla', 'gitea', 1, 1, 'https://git.vdm.dev', 'a0cbfb8a-b427-48eb-b493-a02b34854019', 'master', 1, 6, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:09', ''),
-(7, 'Openai', 'joomla', 'openai', 1, 1, 'https://git.vdm.dev', 'c736a46f-0880-428a-8837-02627fdbd38d', 'master', 1, 7, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:19', ''),
-(8, 'Minify', 'joomla', 'minify', 1, 1, 'https://git.vdm.dev', '6c741f48-a192-4e17-a932-df552164cffb', 'master', 1, 8, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:30', ''),
-(9, 'psr', 'joomla', 'psr', 1, 1, 'https://git.vdm.dev', 'bfaa857a-df24-4d8c-97c3-1da4167a2bc8', 'master', 1, 9, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:41', ''),
-(10, 'fof', 'joomla', 'fof', 1, 1, 'https://git.vdm.dev', 'dd591247-1215-4faf-8a00-1f294768ba13', 'master', 1, 10, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:47', ''),
-(12, 'Joomla Powers', 'joomla', 'joomla-powers', 2, 1, 'https://git.vdm.dev', 'dfba58ef-f823-43d4-ab73-865fdaf09294', 'master', 1, 12, 1, '2024-07-16 22:05:16', '2024-07-08 14:07:31', ''),
-(13, 'Joomla Field Types', 'joomla', 'joomla-fieldtypes', 3, 1, 'https://git.vdm.dev', '618e8916-4028-4d5b-b85c-970304685913', 'master', 1, 12, 1, '2024-08-23 17:27:28', '2024-08-23 16:21:35', '');
+INSERT INTO `#__componentbuilder_repository` (`id`, `system_name`, `organisation`, `repository`, `target`, `type`, `base`, `guid`, `read_branch`, `access`, `ordering`, `published`, `modified`, `created`, `params`, `addplaceholders`) VALUES
+(14, 'Super Powers (codeberg - mirror)', 'joomla', 'super-powers', 1, 1, 'https://codeberg.org', '8213b3a3-8618-4b29-92b3-15c9f26f019c', 'master', 1, 14, 1, '2024-09-16 17:22:02', '2024-06-10 10:59:35', '', '{}'),
+(15, 'PHP Seclib (codeberg - mirror)', 'joomla', 'phpseclib', 1, 1, 'https://codeberg.org', '64a84f86-391e-4e4b-be99-b2c7c41a6005', 'master', 1, 15, 1, '2024-09-16 17:22:09', '2024-06-10 11:02:03', '', '{}'),
+(16, 'Gitea (codeberg - mirror)', 'joomla', 'gitea', 1, 1, 'https://codeberg.org', 'cb800a2c-4bf7-41c8-9360-cfe9d54cdf2b', 'master', 1, 16, 1, '2024-09-16 17:22:14', '2024-06-10 11:03:09', '', '{}'),
+(17, 'Openai (codeberg - mirror)', 'joomla', 'openai', 1, 1, 'https://codeberg.org', 'c625381a-7795-4b9f-8b4e-997c9291e3fc', 'master', 1, 17, 1, '2024-09-16 17:22:20', '2024-06-10 11:03:19', '', '{}'),
+(18, 'Joomla Powers (codeberg - mirror)', 'joomla', 'joomla-powers', 2, 1, 'https://codeberg.org', '8ac595d4-0b1d-4877-ba3e-2b815c1c7e3c', 'master', 1, 18, 1, '2024-09-16 17:22:27', '2024-07-08 14:07:31', '', '{}'),
+(19, 'Joomla Field Types (codeberg - mirror)', 'joomla', 'joomla-fieldtypes', 3, 1, 'https://codeberg.org', 'bf4a1d77-e3a4-4aa8-a07f-2b01872bf7e9', 'master', 1, 19, 1, '2024-09-16 17:22:32', '2024-08-23 16:21:35', '', '{}');
--
-- Dumping data for table `#__componentbuilder_help_document`
@@ -2552,21 +2799,18 @@ INSERT INTO `#__componentbuilder_help_document` (`id`, `admin_view`, `alias`, `a
--
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, '', '', '');
+(111, '{\"0\":{\"field\":\"84\",\"list\":\"1\",\"order_list\":\"2\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":3,\"order_edit\":\"1\"},\"1\":{\"field\":\"199\",\"list\":\"1\",\"order_list\":\"1\",\"title\":\"1\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"1\"},\"2\":{\"field\":\"23\",\"list\":\"\",\"order_list\":\"0\",\"alias\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"2\"},\"3\":{\"field\":\"3420\",\"list\":\"2\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"2\",\"alignment\":3,\"order_edit\":\"1\"},\"4\":{\"field\":\"3417\",\"list\":\"\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"2\",\"alignment\":3,\"order_edit\":\"2\"},\"5\":{\"field\":\"3426\",\"list\":\"\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"2\",\"alignment\":3,\"order_edit\":\"3\"},\"6\":{\"field\":\"3410\",\"list\":\"2\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"3\",\"alignment\":1,\"order_edit\":\"1\"},\"7\":{\"field\":\"3415\",\"list\":\"2\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"4\",\"alignment\":3,\"order_edit\":\"1\"},\"8\":{\"field\":\"2657\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"15\",\"alignment\":1,\"order_edit\":\"0\"}}', 109, 1, '2017-10-12 19:52:03', '2024-09-17 23:40:35', 20, '', '', ''),
+(282, '{\"0\":{\"field\":\"3395\",\"list\":\"1\",\"order_list\":\"2\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"1\"},\"1\":{\"field\":\"3396\",\"list\":\"1\",\"order_list\":\"3\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"2\"},\"2\":{\"field\":\"3423\",\"list\":\"1\",\"order_list\":\"4\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"3\"},\"3\":{\"field\":\"3411\",\"list\":\"\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":2,\"order_edit\":\"1\"},\"4\":{\"field\":\"3413\",\"list\":\"\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":2,\"order_edit\":\"2\"},\"5\":{\"field\":\"3412\",\"list\":\"\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":2,\"order_edit\":\"3\"},\"6\":{\"field\":\"3414\",\"list\":\"\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":2,\"order_edit\":\"4\"},\"7\":{\"field\":\"3419\",\"list\":\"\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":3,\"order_edit\":\"5\"},\"8\":{\"field\":\"199\",\"list\":\"1\",\"order_list\":\"1\",\"title\":\"1\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"1\"},\"9\":{\"field\":\"3425\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"2\"},\"10\":{\"field\":\"2657\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"15\",\"alignment\":1,\"order_edit\":\"0\"}}', 283, 1, '2024-09-06 22:03:19', '2024-09-16 23:49:09', 11, '', 43, ''),
+(283, '{\"0\":{\"field\":\"691\",\"list\":\"1\",\"order_list\":\"1\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"1\"},\"1\":{\"field\":\"1160\",\"list\":\"1\",\"order_list\":\"2\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"2\"},\"2\":{\"field\":\"3429\",\"list\":\"1\",\"order_list\":\"3\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"3\"},\"3\":{\"field\":\"280\",\"list\":\"\",\"order_list\":\"0\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":2,\"order_edit\":\"2\"},\"4\":{\"field\":\"3404\",\"list\":\"1\",\"order_list\":\"4\",\"search\":\"1\",\"filter\":\"\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"1\"},\"5\":{\"field\":\"3403\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"2\"},\"6\":{\"field\":\"2657\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"15\",\"alignment\":1,\"order_edit\":\"0\"}}', 284, 1, '2024-09-06 22:15:55', '2024-09-16 23:32:35', 5, '', 44, ''),
+(284, '{\"0\":{\"field\":\"3398\",\"list\":\"1\",\"order_list\":\"1\",\"title\":\"1\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"1\"},\"1\":{\"field\":\"3400\",\"list\":\"1\",\"order_list\":\"3\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"2\"},\"2\":{\"field\":\"3424\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"3\"},\"3\":{\"field\":\"3428\",\"list\":\"1\",\"order_list\":\"2\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"1\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":2,\"order_edit\":\"1\"},\"4\":{\"field\":\"3401\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":2,\"order_edit\":\"2\"},\"5\":{\"field\":\"3402\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":2,\"order_edit\":\"3\"},\"6\":{\"field\":\"3404\",\"list\":\"1\",\"order_list\":\"4\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"1\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"1\"},\"7\":{\"field\":\"3403\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"2\"},\"8\":{\"field\":\"2657\",\"list\":\"\",\"order_list\":\"0\",\"search\":\"1\",\"filter\":\"\",\"tab\":\"15\",\"alignment\":1,\"order_edit\":\"0\"}}', 285, 1, '2024-09-06 22:48:18', '2024-09-17 22:00:38', 9, '', 45, ''),
+(285, '{\"0\":{\"field\":\"3405\",\"list\":\"1\",\"order_list\":\"2\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":1,\"order_edit\":\"1\"},\"1\":{\"field\":\"3404\",\"list\":\"\",\"order_list\":\"0\",\"sort\":\"1\",\"search\":\"1\",\"filter\":\"1\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"1\"},\"2\":{\"field\":\"3403\",\"list\":\"1\",\"order_list\":\"1\",\"title\":\"1\",\"search\":\"1\",\"filter\":\"\",\"link\":\"1\",\"tab\":\"1\",\"alignment\":4,\"order_edit\":\"2\"},\"3\":{\"field\":\"2657\",\"list\":\"\",\"order_list\":\"0\",\"filter\":\"\",\"tab\":\"15\",\"alignment\":1,\"order_edit\":\"0\"}}', 286, 1, '2024-09-06 22:53:19', '0000-00-00 00:00:00', 1, '', 46, '');
--
-- 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, '', '', '');
+(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\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"1\"},\"addadmin_views1\":{\"adminview\":\"284\",\"icomoon\":\"plus\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"port\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"2\"},\"addadmin_views2\":{\"adminview\":\"285\",\"icomoon\":\"file\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"port\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"3\"},\"addadmin_views3\":{\"adminview\":\"283\",\"icomoon\":\"file-check\",\"mainmenu\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"port\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"4\"},\"addadmin_views4\":{\"adminview\":\"286\",\"icomoon\":\"users\",\"mainmenu\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"port\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"5\"}}', 25, 1, '2017-10-28 03:56:26', '2024-09-07 01:12:01', 9, '', '', '');
--
-- Dumping data for table `#__componentbuilder_component_site_views`
@@ -2587,14 +2831,14 @@ INSERT INTO `#__componentbuilder_component_custom_admin_views` (`id`, `addcustom
--
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, '', '', '');
+(27, 25, '{\"version_update0\":{\"version\":\"5.0.0\",\"mysql\":\"\",\"url\":\"https:\\/\\/git.vdm.dev\\/joomla\\/Demo-Component\\/archive\\/v5.0.0.zip\",\"update_server_adv\":\"0\",\"update_server_type\":\"component\",\"update_element\":\"\",\"update_state\":\"stable\",\"update_target_version\":\"5\\\\.[012]\",\"change_log\":\"\",\"update_client\":\"site\"}}', 1, '2017-10-28 03:56:26', '2024-09-16 01:42:12', 12, '', '', '');
--
-- 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, '', '', '');
+(27, 25, '{}', 1, '2017-10-28 03:56:26', '2024-09-07 03:00:20', 3, '', '', '');
--
-- Dumping data for table `#__componentbuilder_component_custom_admin_menus`
@@ -2608,7 +2852,7 @@ INSERT INTO `#__componentbuilder_component_custom_admin_menus` (`id`, `addcustom
--
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, '', '', '');
+(27, '{\"addconfig0\":{\"field\":\"3416\",\"custom_value\":\"\",\"tabname\":\"Group Selection\"}}', 25, 1, '2017-10-28 03:56:26', '2024-09-07 02:39:56', 3, '', '', '');
--
-- Dumping data for table `#__componentbuilder_component_dashboard`
@@ -2622,14 +2866,21 @@ INSERT INTO `#__componentbuilder_component_dashboard` (`id`, `dashboard_tab`, `j
--
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, '', '', '', '');
+(27, '{\"addfiles0\":{\"file\":\"dynamicDownloadController.php\",\"path\":\"admin\\/src\\/Controller\\/DownloadController.php\",\"notnew\":\"1\"},\"addfiles1\":{\"file\":\"dynamicDownloadController.php\",\"path\":\"site\\/src\\/Controller\\/DownloadController.php\",\"notnew\":\"1\"}}', '{}', 25, '', 1, '2017-10-28 03:56:26', '2024-09-17 21:33:29', 5, '', '', '{}', '{}');
--
-- Dumping data for table `#__componentbuilder_component_placeholders`
--
INSERT INTO `#__componentbuilder_component_placeholders` (`id`, `addplaceholders`, `joomla_component`, `params`, `published`, `created`, `modified`) VALUES
-(43, '{\"addplaceholders0\":{\"target\":\"[[[upload_max_filesize]]]\",\"value\":\"7M\"},\"addplaceholders1\":{\"target\":\"[[[post_max_size]]]\",\"value\":\"6M\"},\"addplaceholders2\":{\"target\":\"[[[max_execution_time]]]\",\"value\":\"10\"},\"addplaceholders3\":{\"target\":\"[[[max_input_vars]]]\",\"value\":\"1000\"},\"addplaceholders4\":{\"target\":\"[[[max_input_time]]]\",\"value\":\"10\"},\"addplaceholders5\":{\"target\":\"[[[memory_limit]]]\",\"value\":\"16M\"},\"addplaceholders6\":{\"target\":\"[[[environment_wiki_url]]]\",\"value\":\"#\"}}', 25, '', 1, '2024-07-27 13:02:05', '2024-07-27 20:26:43');
+(43, '{\"addplaceholders0\":{\"target\":\"[[[upload_max_filesize]]]\",\"value\":\"7M\"},\"addplaceholders1\":{\"target\":\"[[[post_max_size]]]\",\"value\":\"6M\"},\"addplaceholders2\":{\"target\":\"[[[max_execution_time]]]\",\"value\":\"10\"},\"addplaceholders3\":{\"target\":\"[[[max_input_vars]]]\",\"value\":\"1000\"},\"addplaceholders4\":{\"target\":\"[[[max_input_time]]]\",\"value\":\"10\"},\"addplaceholders5\":{\"target\":\"[[[memory_limit]]]\",\"value\":\"16M\"},\"addplaceholders6\":{\"target\":\"[[[environment_wiki_url]]]\",\"value\":\"#\"},\"addplaceholders8\":{\"target\":\"[[[component_acronym]]]\",\"value\":\"DEMO\"},\"addplaceholders7\":{\"target\":\"[[[component_link_name]]]\",\"value\":\"default text\"}}', 25, '', 1, '2024-07-27 13:02:05', '2024-09-16 03:25:05');
+
+--
+-- Dumping data for table `#__componentbuilder_component_plugins`
+--
+
+INSERT INTO `#__componentbuilder_component_plugins` (`id`, `addjoomla_plugins`, `joomla_component`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES
+(13, '{\"addjoomla_plugins0\":{\"plugin\":\"66\",\"target\":\"1\"}}', 25, '', 1, '2024-09-16 01:22:36', '2024-09-17 01:37:54', 6, '', 1, 13);
--
-- Dumping data for table `#__componentbuilder_snippet_type`
@@ -2680,29 +2931,41 @@ INSERT INTO `#__componentbuilder_snippet_type` (`id`, `name`, `description`, `pa
(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, '{}', '{}', '{\"addurls0\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.21.7\\/dist\\/css\\/uikit.min.css\",\"type\":2},\"addurls1\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.21.7\\/dist\\/js\\/uikit.min.js\",\"type\":2},\"addurls2\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.21.7\\/dist\\/js\\/uikit-icons.min.js\",\"type\":2}}', 3, '', 1, '2017-11-25 21:47:40', '2024-07-24 15:01:17', 12, '', 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);
+(2, '{}', '{}', '{\"addurls0\":{\"url\":\"https:\\/\\/maxcdn.bootstrapcdn.com\\/bootstrap\\/4.6.2\\/js\\/bootstrap.min.js\",\"type\":2},\"addurls1\":{\"url\":\"https:\\/\\/maxcdn.bootstrapcdn.com\\/bootstrap\\/4.6.2\\/css\\/bootstrap.min.css\",\"type\":2}}', 2, '', 1, '2017-11-25 16:17:36', '2024-09-08 22:33:32', 12, '', 2),
+(3, '{}', '{}', '{\"addurls0\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.21.11\\/dist\\/css\\/uikit.min.css\",\"type\":2},\"addurls1\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.21.11\\/dist\\/js\\/uikit.min.js\",\"type\":2},\"addurls2\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/npm\\/uikit@3.21.11\\/dist\\/js\\/uikit-icons.min.js\",\"type\":2},\"addurls3\":{\"url\":\"https:\\/\\/cdn.jsdelivr.net\\/gh\\/vdm-io\\/uikit@2.0.5\\/dist\\/js\\/Uploader.min.js\",\"type\":2}}', 3, '', 1, '2017-11-25 21:47:40', '2024-09-08 22:27:00', 13, '', 3);
+
+--
+-- Dumping data for table `#__componentbuilder_class_extends`
+--
+
+INSERT INTO `#__componentbuilder_class_extends` (`id`, `comment`, `extension_type`, `head`, `name`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
+(1, 'LyoqDQogKiBbW1tQbHVnaW5fbmFtZV1dXSBwbHVnaW4uDQogKg0KICogQHBhY2thZ2UgICBbW1tQbHVnaW5dXV0NCiAqIEBzaW5jZSAgICAgW1tbcGx1Z2luLnZlcnNpb25dXV0NCiAqLw==', 'plugins', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0K', 'CMSPlugin', '', 1, '2019-08-23 00:11:33', '2023-08-22 03:50:43', 5, '', 1),
+(2, 'LyoqDQogKiBbW1tQbHVnaW5fbmFtZV1dXSBwbHVnaW4uDQogKg0KICogQHBhY2thZ2UgICBbW1tQbHVnaW5dXV0NCiAqIEBzaW5jZSAgICAgW1tbcGx1Z2luLnZlcnNpb25dXV0NCiAqLw==', 'plugins', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQoNCkpMb2FkZXI6OmltcG9ydCgnY29tcG9uZW50cy5jb21fZmllbGRzLmxpYnJhcmllcy5maWVsZHNsaXN0cGx1Z2luJywgSlBBVEhfQURNSU5JU1RSQVRPUik7DQo=', 'FieldsListPlugin', '', 1, '2019-08-23 00:11:33', '2019-08-23 00:14:06', 3, '', 1),
+(3, 'LyoqDQogKiBbW1tQbHVnaW5fbmFtZV1dXSBwbHVnaW4uDQogKg0KICogQHBhY2thZ2UgICBbW1tQbHVnaW5dXV0NCiAqIEBzaW5jZSAgICAgW1tbcGx1Z2luLnZlcnNpb25dXV0NCiAqLw==', 'plugins', 'dXNlIEpvb21sYVxDTVNcQ29tcG9uZW50XENvbXBvbmVudEhlbHBlcjsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ0ZpbmRlckluZGV4ZXJBZGFwdGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fZmluZGVyL2hlbHBlcnMvaW5kZXhlci9hZGFwdGVyLnBocCcpOw0K', 'FinderIndexerAdapter', '', 1, '2019-08-23 00:11:33', '2019-08-23 00:13:39', 2, '', 1),
+(4, 'LyoqDQogKiBbW1tQbHVnaW5fbmFtZV1dXSBwbHVnaW4uDQogKg0KICogQHBhY2thZ2UgICBbW1tQbHVnaW5dXV0NCiAqIEBzaW5jZSAgICAgW1tbcGx1Z2luLnZlcnNpb25dXV0NCiAqLw==', 'plugins', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXERhdGFiYXNlXERhdGFiYXNlRHJpdmVyOw0KDQpKTG9hZGVyOjpyZWdpc3RlcignUHJpdmFjeVBsdWdpbicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3ByaXZhY3kvaGVscGVycy9wbHVnaW4ucGhwJyk7DQpKTG9hZGVyOjpyZWdpc3RlcignUHJpdmFjeVJlbW92YWxTdGF0dXMnLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9wcml2YWN5L2hlbHBlcnMvcmVtb3ZhbC9zdGF0dXMucGhwJyk7DQo=', 'PrivacyPlugin', '', 1, '2019-08-23 00:11:33', '2019-08-23 00:12:43', 2, '', 1);
+
+--
+-- Dumping data for table `#__componentbuilder_joomla_plugin_group`
+--
+
+INSERT INTO `#__componentbuilder_joomla_plugin_group` (`id`, `class_extends`, `name`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES
+(1, 1, 'authentication', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(2, 1, 'behaviour', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(3, 1, 'content', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(4, 1, 'editors-xtd', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(5, 2, 'fields', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(6, 3, 'finder', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(7, 1, 'search', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(8, 1, 'system', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(9, 1, 'user', '', 1, '2019-07-15 11:06:03', '0000-00-00 00:00:00', 1, '', 1),
+(10, 4, 'privacy', '', 1, '2019-07-16 00:25:53', '0000-00-00 00:00:00', 1, '', 2),
+(11, 1, 'extension', '', 1, '2019-08-14 14:59:09', '0000-00-00 00:00:00', 1, '', 3),
+(12, 1, 'installer', '', 1, '2019-08-14 14:59:09', '0000-00-00 00:00:00', 1, '', 3);
CREATE TABLE IF NOT EXISTS `#__componentbuilder_external_code` (
diff --git a/admin/src/Controller/Admin_custom_tabsController.php b/admin/src/Controller/Admin_custom_tabsController.php
index dd5a3f0ee..24eebfcdc 100644
--- a/admin/src/Controller/Admin_custom_tabsController.php
+++ b/admin/src/Controller/Admin_custom_tabsController.php
@@ -62,6 +62,22 @@ class Admin_custom_tabsController extends FormController
*/
protected $view_list = 'admins_custom_tabs';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Admin_fieldsController.php b/admin/src/Controller/Admin_fieldsController.php
index fd260bcd3..1f71f3b31 100644
--- a/admin/src/Controller/Admin_fieldsController.php
+++ b/admin/src/Controller/Admin_fieldsController.php
@@ -62,6 +62,22 @@ class Admin_fieldsController extends FormController
*/
protected $view_list = 'admins_fields';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Admin_fields_conditionsController.php b/admin/src/Controller/Admin_fields_conditionsController.php
index 550b95d04..b215819ce 100644
--- a/admin/src/Controller/Admin_fields_conditionsController.php
+++ b/admin/src/Controller/Admin_fields_conditionsController.php
@@ -62,6 +62,22 @@ class Admin_fields_conditionsController extends FormController
*/
protected $view_list = 'admins_fields_conditions';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Admin_fields_relationsController.php b/admin/src/Controller/Admin_fields_relationsController.php
index df9be8a79..73cb19b39 100644
--- a/admin/src/Controller/Admin_fields_relationsController.php
+++ b/admin/src/Controller/Admin_fields_relationsController.php
@@ -62,6 +62,22 @@ class Admin_fields_relationsController extends FormController
*/
protected $view_list = 'admins_fields_relations';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Admin_viewController.php b/admin/src/Controller/Admin_viewController.php
index c3f587ff3..3d45b013e 100644
--- a/admin/src/Controller/Admin_viewController.php
+++ b/admin/src/Controller/Admin_viewController.php
@@ -63,6 +63,22 @@ class Admin_viewController extends FormController
*/
protected $view_list = 'admin_views';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Class_extendsController.php b/admin/src/Controller/Class_extendsController.php
index 5b572c1df..4c5e14228 100644
--- a/admin/src/Controller/Class_extendsController.php
+++ b/admin/src/Controller/Class_extendsController.php
@@ -62,6 +62,22 @@ class Class_extendsController extends FormController
*/
protected $view_list = 'class_extendings';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Class_methodController.php b/admin/src/Controller/Class_methodController.php
index b03b0b915..53749b41c 100644
--- a/admin/src/Controller/Class_methodController.php
+++ b/admin/src/Controller/Class_methodController.php
@@ -62,6 +62,22 @@ class Class_methodController extends FormController
*/
protected $view_list = 'class_methods';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Class_propertyController.php b/admin/src/Controller/Class_propertyController.php
index fc823a9a1..3c1072145 100644
--- a/admin/src/Controller/Class_propertyController.php
+++ b/admin/src/Controller/Class_propertyController.php
@@ -62,6 +62,22 @@ class Class_propertyController extends FormController
*/
protected $view_list = 'class_properties';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/CompilerController.php b/admin/src/Controller/CompilerController.php
index 360eb98df..f22e4e909 100644
--- a/admin/src/Controller/CompilerController.php
+++ b/admin/src/Controller/CompilerController.php
@@ -19,6 +19,7 @@ use Joomla\CMS\Session\Session;
use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper;
use VDM\Joomla\Componentbuilder\Compiler\Factory as CFactory;
use Joomla\CMS\Version;
+use VDM\Joomla\Componentbuilder\File\Factory as FileFactory;
use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper;
use VDM\Joomla\Utilities\StringHelper;
use Joomla\CMS\Uri\Uri;
@@ -69,6 +70,11 @@ class CompilerController extends AdminController
$this->setRedirect(Route::_('index.php?option=com_componentbuilder', false));
}
+ /**
+ * Adding this so that the upload factory gets build for Super Powers
+ * FileFactory
+ */
+
/**
* get all the animations used in the compiler
*
diff --git a/admin/src/Controller/Component_admin_viewsController.php b/admin/src/Controller/Component_admin_viewsController.php
index d597bb51b..0427b8da1 100644
--- a/admin/src/Controller/Component_admin_viewsController.php
+++ b/admin/src/Controller/Component_admin_viewsController.php
@@ -62,6 +62,22 @@ class Component_admin_viewsController extends FormController
*/
protected $view_list = 'components_admin_views';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_configController.php b/admin/src/Controller/Component_configController.php
index 2535a7824..c3d836840 100644
--- a/admin/src/Controller/Component_configController.php
+++ b/admin/src/Controller/Component_configController.php
@@ -62,6 +62,22 @@ class Component_configController extends FormController
*/
protected $view_list = 'components_config';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_custom_admin_menusController.php b/admin/src/Controller/Component_custom_admin_menusController.php
index 863404531..823002fac 100644
--- a/admin/src/Controller/Component_custom_admin_menusController.php
+++ b/admin/src/Controller/Component_custom_admin_menusController.php
@@ -62,6 +62,22 @@ class Component_custom_admin_menusController extends FormController
*/
protected $view_list = 'components_custom_admin_menus';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_custom_admin_viewsController.php b/admin/src/Controller/Component_custom_admin_viewsController.php
index 5bb19dc52..53de9a82d 100644
--- a/admin/src/Controller/Component_custom_admin_viewsController.php
+++ b/admin/src/Controller/Component_custom_admin_viewsController.php
@@ -62,6 +62,22 @@ class Component_custom_admin_viewsController extends FormController
*/
protected $view_list = 'components_custom_admin_views';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_dashboardController.php b/admin/src/Controller/Component_dashboardController.php
index 76815f94d..a157c15b6 100644
--- a/admin/src/Controller/Component_dashboardController.php
+++ b/admin/src/Controller/Component_dashboardController.php
@@ -62,6 +62,22 @@ class Component_dashboardController extends FormController
*/
protected $view_list = 'components_dashboard';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_files_foldersController.php b/admin/src/Controller/Component_files_foldersController.php
index d7d5a6e88..92c1d842e 100644
--- a/admin/src/Controller/Component_files_foldersController.php
+++ b/admin/src/Controller/Component_files_foldersController.php
@@ -62,6 +62,22 @@ class Component_files_foldersController extends FormController
*/
protected $view_list = 'components_files_folders';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_modulesController.php b/admin/src/Controller/Component_modulesController.php
index 9391b1db8..6c9ef0bc3 100644
--- a/admin/src/Controller/Component_modulesController.php
+++ b/admin/src/Controller/Component_modulesController.php
@@ -62,6 +62,22 @@ class Component_modulesController extends FormController
*/
protected $view_list = 'components_modules';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_mysql_tweaksController.php b/admin/src/Controller/Component_mysql_tweaksController.php
index 8a948fa6a..0e54a3703 100644
--- a/admin/src/Controller/Component_mysql_tweaksController.php
+++ b/admin/src/Controller/Component_mysql_tweaksController.php
@@ -62,6 +62,22 @@ class Component_mysql_tweaksController extends FormController
*/
protected $view_list = 'components_mysql_tweaks';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_placeholdersController.php b/admin/src/Controller/Component_placeholdersController.php
index d5f97561b..e1381e412 100644
--- a/admin/src/Controller/Component_placeholdersController.php
+++ b/admin/src/Controller/Component_placeholdersController.php
@@ -62,6 +62,22 @@ class Component_placeholdersController extends FormController
*/
protected $view_list = 'components_placeholders';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_pluginsController.php b/admin/src/Controller/Component_pluginsController.php
index baba28d33..8de7b7796 100644
--- a/admin/src/Controller/Component_pluginsController.php
+++ b/admin/src/Controller/Component_pluginsController.php
@@ -62,6 +62,22 @@ class Component_pluginsController extends FormController
*/
protected $view_list = 'components_plugins';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_routerController.php b/admin/src/Controller/Component_routerController.php
index 76e8d57e9..efbb486de 100644
--- a/admin/src/Controller/Component_routerController.php
+++ b/admin/src/Controller/Component_routerController.php
@@ -62,6 +62,22 @@ class Component_routerController extends FormController
*/
protected $view_list = 'components_routers';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_site_viewsController.php b/admin/src/Controller/Component_site_viewsController.php
index 1fbd370a5..0f70fb434 100644
--- a/admin/src/Controller/Component_site_viewsController.php
+++ b/admin/src/Controller/Component_site_viewsController.php
@@ -62,6 +62,22 @@ class Component_site_viewsController extends FormController
*/
protected $view_list = 'components_site_views';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Component_updatesController.php b/admin/src/Controller/Component_updatesController.php
index 32c52f496..2a8ee4c51 100644
--- a/admin/src/Controller/Component_updatesController.php
+++ b/admin/src/Controller/Component_updatesController.php
@@ -65,6 +65,22 @@ class Component_updatesController extends FormController
*/
protected $view_list = 'components_updates';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Custom_admin_viewController.php b/admin/src/Controller/Custom_admin_viewController.php
index 8c7cd69fa..7cff8b350 100644
--- a/admin/src/Controller/Custom_admin_viewController.php
+++ b/admin/src/Controller/Custom_admin_viewController.php
@@ -62,6 +62,22 @@ class Custom_admin_viewController extends FormController
*/
protected $view_list = 'custom_admin_views';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Custom_codeController.php b/admin/src/Controller/Custom_codeController.php
index 2ea4453b0..64fef4e35 100644
--- a/admin/src/Controller/Custom_codeController.php
+++ b/admin/src/Controller/Custom_codeController.php
@@ -62,6 +62,22 @@ class Custom_codeController extends FormController
*/
protected $view_list = 'custom_codes';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Dynamic_getController.php b/admin/src/Controller/Dynamic_getController.php
index 0858950e6..2faa451c9 100644
--- a/admin/src/Controller/Dynamic_getController.php
+++ b/admin/src/Controller/Dynamic_getController.php
@@ -62,6 +62,22 @@ class Dynamic_getController extends FormController
*/
protected $view_list = 'dynamic_gets';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/FieldController.php b/admin/src/Controller/FieldController.php
index 47694acdf..c6a63d5cb 100644
--- a/admin/src/Controller/FieldController.php
+++ b/admin/src/Controller/FieldController.php
@@ -62,6 +62,22 @@ class FieldController extends FormController
*/
protected $view_list = 'fields';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/FieldtypeController.php b/admin/src/Controller/FieldtypeController.php
index bc3dc8c36..fd47a5610 100644
--- a/admin/src/Controller/FieldtypeController.php
+++ b/admin/src/Controller/FieldtypeController.php
@@ -25,7 +25,6 @@ use Joomla\CMS\Session\Session;
use Joomla\CMS\Uri\Uri;
use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper;
use VDM\Joomla\Componentbuilder\Fieldtype\Factory as FieldtypeFactory;
-use VDM\Joomla\Utilities\GetHelper;
// No direct access to this file
\defined('_JEXEC') or die;
@@ -64,75 +63,34 @@ class FieldtypeController extends FormController
*/
protected $view_list = 'fieldtypes';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
- * Initializes all remote Joomla Field Types and syncs them with the local database.
+ * Resets the specified Joomla Field Type.
*
* This function performs several checks and operations:
* 1. It verifies the authenticity of the request to prevent request forgery.
- * 2. It checks whether the current user has the necessary permissions to initialize the Joomla Field Types.
- * 3. If the user is authorized, it attempts to initialize the remote Joomla Field Types.
- * 4. Depending on the result of the initialization operation, it sets the appropriate success or error message.
- * 5. It redirects the user to a specified URL with the result message and status.
- *
- * @return bool True on successful initialization, false on failure.
- */
- public function initPowers()
- {
- // Check for request forgeries
- Session::checkToken() or die(Text::_('JINVALID_TOKEN'));
-
- // check if user has the right
- $user = Factory::getUser();
-
- // set default error message
- $message = '
' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INITIALIZE_JOOMLA_FIELD_TYPES') . '
';
- $status = 'error';
- $success = false;
-
- if($user->authorise('fieldtype.init', 'com_componentbuilder'))
- {
- try {
- if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->init())
- {
- // set success message
- $message = '
' . Text::_('COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_JOOMLA_POWERS') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_JOOMLA_FIELD_TYPES_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES') . '
';
-
- $status = 'success';
- $success = true;
- }
- else
- {
- $message = '
' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_FIELD_TYPES_HAS_FAILED') . '
';
- }
- } catch (\Exception $e) {
- $message = '
' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . ' ';
- $message .= '
' . \htmlspecialchars($e->getMessage()) . '
';
- }
- }
-
- // set redirect
- $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success);
- $this->setRedirect($redirect_url, $message, $status);
-
- return $success;
- }
-
- /**
- * Resets the selected Joomla Field Types.
- *
- * This function performs several checks and operations:
- * 1. It verifies the authenticity of the request to prevent request forgery.
- * 2. It retrieves the IDs of the selected powers from the user input.
- * 3. It sanitizes the input by converting the IDs to integers.
- * 4. It checks whether any powers have been selected.
- * 5. It checks whether the current user has the necessary permissions to reset the selected Joomla Field Types.
- * 6. If the user is authorized and powers are selected, it attempts to reset the selected Joomla Field Types.
- * 7. Depending on the result of the reset operation, it sets the appropriate success or error message.
- * 8. It redirects the user to a specified URL with the result message and status.
+ * 2. It retrieves the item data posted by the user.
+ * 3. It checks whether the current user has the necessary permissions to reset the Joomla Field Type.
+ * 4. It validates the presence of the necessary item identifiers (ID and GUID).
+ * 5. If the user is authorized and the identifiers are valid, it attempts to reset the specified Joomla Field Type.
+ * 6. Depending on the result of the reset operation, it sets the appropriate success or error message.
+ * 7. It redirects the user to a specified URL with the result message and status.
*
* @return bool True on successful reset, false on failure.
*/
@@ -141,77 +99,73 @@ class FieldtypeController extends FormController
// Check for request forgeries
Session::checkToken() or die(Text::_('JINVALID_TOKEN'));
- // get IDS of the selected powers
- $pks = $this->input->post->get('cid', [], 'array');
-
- // Sanitize the input
- ArrayHelper::toInteger($pks);
-
- // check if there is any selections
- if ($pks === [])
- {
- // set error message
- $message = '
'.Text::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').' ';
- $message .= '
'.Text::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'
';
- // set redirect
- $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false);
- $this->setRedirect($redirect_url, $message, 'error');
- return false;
- }
-
- $status = 'error';
- $success = false;
+ // get Item posted
+ $item = $this->input->post->get('jform', array(), 'array');
// check if user has the right
$user = Factory::getUser();
- if($user->authorise('fieldtype.reset', 'com_componentbuilder'))
- {
- $guids = GetHelper::vars('fieldtype', $pks, 'id', 'guid');
+ // set default error message
+ $message = '
' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . ' ';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_JOOMLA_FIELD_TYPE') . '
';
+ $status = 'error';
+ $success = false;
+
+ // load the ID
+ $id = $item['id'] ?? null;
+ $guid = $item['guid'] ?? null;
+
+ // check if there is any selections
+ if ($id === null || $guid === null)
+ {
+ // set error message
+ $message = '
' . Text::_('COM_COMPONENTBUILDER_NOT_SAVED') . ' ';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_FIELD_TYPE_BEFORE_YOU_CAN_USE_THIS_FEATURE') . '
';
+ }
+ elseif($user->authorise('fieldtype.reset', 'com_componentbuilder'))
+ {
try {
- if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->reset($guids))
+ if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->reset([$guid]))
{
// set success message
$message = '
'.Text::_('COM_COMPONENTBUILDER_SUCCESS').' ';
- $message .= '
'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_FIELD_TYPES_HAVE_SUCCESSFULLY_BEEN_RESET').'
';
+ $message .= '
'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_FIELD_TYPE_HAS_SUCCESSFULLY_BEEN_RESET').'
';
$status = 'success';
$success = true;
}
else
{
$message = '
' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_FIELD_TYPES_HAS_FAILED') . '
';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_FIELD_TYPE_HAS_FAILED') . '
';
}
} catch (\Exception $e) {
$message = '
' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . ' ';
$message .= '
' . \htmlspecialchars($e->getMessage()) . '
';
}
-
- // set redirect
- $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success);
- $this->setRedirect($redirect_url, $message, $status);
-
- return $success;
}
// set redirect
- $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false);
- $this->setRedirect($redirect_url);
+ $redirect_url = Route::_(
+ 'index.php?option=com_componentbuilder&view=fieldtype'
+ . $this->getRedirectToItemAppend($id), $success
+ );
+
+ $this->setRedirect($redirect_url, $message, $status);
+
return $success;
}
- /**
- * Pushes the selected Joomla Field Types.
+ /**
+ * Pushes the specified Joomla Field Type.
*
* This function performs several checks and operations:
* 1. It verifies the authenticity of the request to prevent request forgery.
- * 2. It retrieves the IDs of the selected powers from the user input.
- * 3. It sanitizes the input by converting the IDs to integers.
- * 4. It checks whether any powers have been selected.
- * 5. It checks whether the current user has the necessary permissions to push the selected Joomla Field Types.
- * 6. If the user is authorized and powers are selected, it attempts to push the selected Joomla Field Types.
- * 7. Depending on the result of the push operation, it sets the appropriate success or error message.
- * 8. It redirects the user to a specified URL with the result message and status.
+ * 2. It retrieves the item data posted by the user.
+ * 3. It checks whether the current user has the necessary permissions to push the Joomla Field Type.
+ * 4. It validates the presence of the necessary item identifiers (ID and GUID).
+ * 5. If the user is authorized and the identifiers are valid, it attempts to push the specified Joomla Field Type.
+ * 6. Depending on the result of the push operation, it sets the appropriate success or error message.
+ * 7. It redirects the user to a specified URL with the result message and status.
*
* @return bool True on successful push, false on failure.
*/
@@ -220,62 +174,59 @@ class FieldtypeController extends FormController
// Check for request forgeries
Session::checkToken() or die(Text::_('JINVALID_TOKEN'));
- // get IDS of the selected powers
- $pks = $this->input->post->get('cid', [], 'array');
-
- // Sanitize the input
- ArrayHelper::toInteger($pks);
-
- // check if there is any selections
- if ($pks === [])
- {
- // set error message
- $message = '
'.Text::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').' ';
- $message .= '
'.Text::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'
';
- // set redirect
- $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false);
- $this->setRedirect($redirect_url, $message, 'error');
- return false;
- }
-
- $status = 'error';
- $success = false;
+ // get Item posted
+ $item = $this->input->post->get('jform', array(), 'array');
// check if user has the right
$user = Factory::getUser();
- if($user->authorise('fieldtype.push', 'com_componentbuilder'))
- {
- $guids = GetHelper::vars('fieldtype', $pks, 'id', 'guid');
+ // set default error message
+ $message = '
' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . ' ';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_JOOMLA_FIELD_TYPE') . '
';
+ $status = 'error';
+ $success = false;
+
+ // load the ID
+ $id = $item['id'] ?? null;
+ $guid = $item['guid'] ?? null;
+
+ // check if there is any selections
+ if ($id === null || $guid === null)
+ {
+ // set error message
+ $message = '
' . Text::_('COM_COMPONENTBUILDER_NOT_SAVED') . ' ';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_FIELD_TYPE_BEFORE_YOU_CAN_USE_THIS_FEATURE') . '
';
+ }
+ elseif($user->authorise('fieldtype.push', 'com_componentbuilder'))
+ {
try {
- if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Set')->items($guids))
+ if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Set')->items([$guid]))
{
// set success message
$message = '
'.Text::_('COM_COMPONENTBUILDER_SUCCESS').' ';
- $message .= '
'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_FIELD_TYPES_HAVE_SUCCESSFULLY_BEEN_PUSHED').'
';
+ $message .= '
'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_FIELD_TYPE_HAS_SUCCESSFULLY_BEEN_PUSHED').'
';
$status = 'success';
$success = true;
}
else
{
$message = '
' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_JOOMLA_FIELD_TYPES_HAS_FAILED') . '
';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_JOOMLA_FIELD_TYPE_HAS_FAILED') . '
';
}
} catch (\Exception $e) {
$message = '
' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . ' ';
$message .= '
' . \htmlspecialchars($e->getMessage()) . '
';
}
-
- // set redirect
- $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success);
- $this->setRedirect($redirect_url, $message, $status);
-
- return $success;
}
// set redirect
- $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false);
- $this->setRedirect($redirect_url);
+ $redirect_url = Route::_(
+ 'index.php?option=com_componentbuilder&view=fieldtype'
+ . $this->getRedirectToItemAppend($id), $success
+ );
+
+ $this->setRedirect($redirect_url, $message, $status);
+
return $success;
}
diff --git a/admin/src/Controller/FieldtypesController.php b/admin/src/Controller/FieldtypesController.php
index 902287808..e7529d9d5 100644
--- a/admin/src/Controller/FieldtypesController.php
+++ b/admin/src/Controller/FieldtypesController.php
@@ -18,6 +18,7 @@ use Joomla\CMS\Router\Route;
use Joomla\CMS\Session\Session;
use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper;
use VDM\Joomla\Componentbuilder\Fieldtype\Factory as FieldtypeFactory;
+use VDM\Joomla\Utilities\GetHelper;
// No direct access to this file
\defined('_JEXEC') or die;
@@ -55,16 +56,73 @@ class FieldtypesController extends AdminController
/**
- * Resets the specified Joomla Field Type.
+ * Initializes all remote Joomla Field Types and syncs them with the local database.
*
* This function performs several checks and operations:
* 1. It verifies the authenticity of the request to prevent request forgery.
- * 2. It retrieves the item data posted by the user.
- * 3. It checks whether the current user has the necessary permissions to reset the Joomla Field Type.
- * 4. It validates the presence of the necessary item identifiers (ID and GUID).
- * 5. If the user is authorized and the identifiers are valid, it attempts to reset the specified Joomla Field Type.
- * 6. Depending on the result of the reset operation, it sets the appropriate success or error message.
- * 7. It redirects the user to a specified URL with the result message and status.
+ * 2. It checks whether the current user has the necessary permissions to initialize the Joomla Field Types.
+ * 3. If the user is authorized, it attempts to initialize the remote Joomla Field Types.
+ * 4. Depending on the result of the initialization operation, it sets the appropriate success or error message.
+ * 5. It redirects the user to a specified URL with the result message and status.
+ *
+ * @return bool True on successful initialization, false on failure.
+ */
+ public function initPowers()
+ {
+ // Check for request forgeries
+ Session::checkToken() or die(Text::_('JINVALID_TOKEN'));
+
+ // check if user has the right
+ $user = Factory::getUser();
+
+ // set default error message
+ $message = '
' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . ' ';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INITIALIZE_JOOMLA_FIELD_TYPES') . '
';
+ $status = 'error';
+ $success = false;
+
+ if($user->authorise('fieldtype.init', 'com_componentbuilder'))
+ {
+ try {
+ if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->init())
+ {
+ // set success message
+ $message = '
' . Text::_('COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_JOOMLA_POWERS') . ' ';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_JOOMLA_FIELD_TYPES_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES') . '
';
+
+ $status = 'success';
+ $success = true;
+ }
+ else
+ {
+ $message = '
' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . ' ';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_FIELD_TYPES_HAS_FAILED') . '
';
+ }
+ } catch (\Exception $e) {
+ $message = '
' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . ' ';
+ $message .= '
' . \htmlspecialchars($e->getMessage()) . '
';
+ }
+ }
+
+ // set redirect
+ $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success);
+ $this->setRedirect($redirect_url, $message, $status);
+
+ return $success;
+ }
+
+ /**
+ * Resets the selected Joomla Field Types.
+ *
+ * This function performs several checks and operations:
+ * 1. It verifies the authenticity of the request to prevent request forgery.
+ * 2. It retrieves the IDs of the selected powers from the user input.
+ * 3. It sanitizes the input by converting the IDs to integers.
+ * 4. It checks whether any powers have been selected.
+ * 5. It checks whether the current user has the necessary permissions to reset the selected Joomla Field Types.
+ * 6. If the user is authorized and powers are selected, it attempts to reset the selected Joomla Field Types.
+ * 7. Depending on the result of the reset operation, it sets the appropriate success or error message.
+ * 8. It redirects the user to a specified URL with the result message and status.
*
* @return bool True on successful reset, false on failure.
*/
@@ -73,73 +131,77 @@ class FieldtypesController extends AdminController
// Check for request forgeries
Session::checkToken() or die(Text::_('JINVALID_TOKEN'));
- // get Item posted
- $item = $this->input->post->get('jform', array(), 'array');
+ // get IDS of the selected powers
+ $pks = $this->input->post->get('cid', [], 'array');
- // check if user has the right
- $user = Factory::getUser();
+ // Sanitize the input
+ ArrayHelper::toInteger($pks);
+
+ // check if there is any selections
+ if ($pks === [])
+ {
+ // set error message
+ $message = '
'.Text::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').' ';
+ $message .= '
'.Text::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'
';
+ // set redirect
+ $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false);
+ $this->setRedirect($redirect_url, $message, 'error');
+ return false;
+ }
- // set default error message
- $message = '
' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_JOOMLA_FIELD_TYPE') . '
';
$status = 'error';
$success = false;
- // load the ID
- $id = $item['id'] ?? null;
- $guid = $item['guid'] ?? null;
+ // check if user has the right
+ $user = Factory::getUser();
+ if($user->authorise('fieldtype.reset', 'com_componentbuilder'))
+ {
+ $guids = GetHelper::vars('fieldtype', $pks, 'id', 'guid');
- // check if there is any selections
- if ($id === null || $guid === null)
- {
- // set error message
- $message = '
' . Text::_('COM_COMPONENTBUILDER_NOT_SAVED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_FIELD_TYPE_BEFORE_YOU_CAN_USE_THIS_FEATURE') . '
';
- }
- elseif($user->authorise('fieldtype.reset', 'com_componentbuilder'))
- {
try {
- if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->reset([$guid]))
+ if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->reset($guids))
{
// set success message
$message = '
'.Text::_('COM_COMPONENTBUILDER_SUCCESS').' ';
- $message .= '
'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_FIELD_TYPE_HAS_SUCCESSFULLY_BEEN_RESET').'
';
+ $message .= '
'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_FIELD_TYPES_HAVE_SUCCESSFULLY_BEEN_RESET').'
';
$status = 'success';
$success = true;
}
else
{
$message = '
' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_FIELD_TYPE_HAS_FAILED') . '
';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_FIELD_TYPES_HAS_FAILED') . '
';
}
} catch (\Exception $e) {
$message = '
' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . ' ';
$message .= '
' . \htmlspecialchars($e->getMessage()) . '
';
}
+
+ // set redirect
+ $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success);
+ $this->setRedirect($redirect_url, $message, $status);
+
+ return $success;
}
// set redirect
- $redirect_url = Route::_(
- 'index.php?option=com_componentbuilder&view=fieldtype'
- . $this->getRedirectToItemAppend($id), $success
- );
-
- $this->setRedirect($redirect_url, $message, $status);
-
+ $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false);
+ $this->setRedirect($redirect_url);
return $success;
}
- /**
- * Pushes the specified Joomla Field Type.
+ /**
+ * Pushes the selected Joomla Field Types.
*
* This function performs several checks and operations:
* 1. It verifies the authenticity of the request to prevent request forgery.
- * 2. It retrieves the item data posted by the user.
- * 3. It checks whether the current user has the necessary permissions to push the Joomla Field Type.
- * 4. It validates the presence of the necessary item identifiers (ID and GUID).
- * 5. If the user is authorized and the identifiers are valid, it attempts to push the specified Joomla Field Type.
- * 6. Depending on the result of the push operation, it sets the appropriate success or error message.
- * 7. It redirects the user to a specified URL with the result message and status.
+ * 2. It retrieves the IDs of the selected powers from the user input.
+ * 3. It sanitizes the input by converting the IDs to integers.
+ * 4. It checks whether any powers have been selected.
+ * 5. It checks whether the current user has the necessary permissions to push the selected Joomla Field Types.
+ * 6. If the user is authorized and powers are selected, it attempts to push the selected Joomla Field Types.
+ * 7. Depending on the result of the push operation, it sets the appropriate success or error message.
+ * 8. It redirects the user to a specified URL with the result message and status.
*
* @return bool True on successful push, false on failure.
*/
@@ -148,59 +210,62 @@ class FieldtypesController extends AdminController
// Check for request forgeries
Session::checkToken() or die(Text::_('JINVALID_TOKEN'));
- // get Item posted
- $item = $this->input->post->get('jform', array(), 'array');
+ // get IDS of the selected powers
+ $pks = $this->input->post->get('cid', [], 'array');
- // check if user has the right
- $user = Factory::getUser();
+ // Sanitize the input
+ ArrayHelper::toInteger($pks);
+
+ // check if there is any selections
+ if ($pks === [])
+ {
+ // set error message
+ $message = '
'.Text::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').' ';
+ $message .= '
'.Text::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'
';
+ // set redirect
+ $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false);
+ $this->setRedirect($redirect_url, $message, 'error');
+ return false;
+ }
- // set default error message
- $message = '
' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_JOOMLA_FIELD_TYPE') . '
';
$status = 'error';
$success = false;
- // load the ID
- $id = $item['id'] ?? null;
- $guid = $item['guid'] ?? null;
+ // check if user has the right
+ $user = Factory::getUser();
+ if($user->authorise('fieldtype.push', 'com_componentbuilder'))
+ {
+ $guids = GetHelper::vars('fieldtype', $pks, 'id', 'guid');
- // check if there is any selections
- if ($id === null || $guid === null)
- {
- // set error message
- $message = '
' . Text::_('COM_COMPONENTBUILDER_NOT_SAVED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_FIELD_TYPE_BEFORE_YOU_CAN_USE_THIS_FEATURE') . '
';
- }
- elseif($user->authorise('fieldtype.push', 'com_componentbuilder'))
- {
try {
- if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Set')->items([$guid]))
+ if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Set')->items($guids))
{
// set success message
$message = '
'.Text::_('COM_COMPONENTBUILDER_SUCCESS').' ';
- $message .= '
'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_FIELD_TYPE_HAS_SUCCESSFULLY_BEEN_PUSHED').'
';
+ $message .= '
'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_FIELD_TYPES_HAVE_SUCCESSFULLY_BEEN_PUSHED').'
';
$status = 'success';
$success = true;
}
else
{
$message = '
' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . ' ';
- $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_JOOMLA_FIELD_TYPE_HAS_FAILED') . '
';
+ $message .= '
' . Text::_('COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_JOOMLA_FIELD_TYPES_HAS_FAILED') . '
';
}
} catch (\Exception $e) {
$message = '
' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . ' ';
$message .= '
' . \htmlspecialchars($e->getMessage()) . '
';
}
+
+ // set redirect
+ $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success);
+ $this->setRedirect($redirect_url, $message, $status);
+
+ return $success;
}
// set redirect
- $redirect_url = Route::_(
- 'index.php?option=com_componentbuilder&view=fieldtype'
- . $this->getRedirectToItemAppend($id), $success
- );
-
- $this->setRedirect($redirect_url, $message, $status);
-
+ $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false);
+ $this->setRedirect($redirect_url);
return $success;
}
}
\ No newline at end of file
diff --git a/admin/src/Controller/Help_documentController.php b/admin/src/Controller/Help_documentController.php
index 4dbe31cdc..9252552aa 100644
--- a/admin/src/Controller/Help_documentController.php
+++ b/admin/src/Controller/Help_documentController.php
@@ -62,6 +62,22 @@ class Help_documentController extends FormController
*/
protected $view_list = 'help_documents';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Joomla_componentController.php b/admin/src/Controller/Joomla_componentController.php
index fa9474c70..140924552 100644
--- a/admin/src/Controller/Joomla_componentController.php
+++ b/admin/src/Controller/Joomla_componentController.php
@@ -63,6 +63,22 @@ class Joomla_componentController extends FormController
*/
protected $view_list = 'joomla_components';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
public function refresh()
{
// Check for request forgeries
diff --git a/admin/src/Controller/Joomla_moduleController.php b/admin/src/Controller/Joomla_moduleController.php
index 76a27b138..0c2631091 100644
--- a/admin/src/Controller/Joomla_moduleController.php
+++ b/admin/src/Controller/Joomla_moduleController.php
@@ -63,6 +63,22 @@ class Joomla_moduleController extends FormController
*/
protected $view_list = 'joomla_modules';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Joomla_module_files_folders_urlsController.php b/admin/src/Controller/Joomla_module_files_folders_urlsController.php
index 6878cfc88..35b352ab9 100644
--- a/admin/src/Controller/Joomla_module_files_folders_urlsController.php
+++ b/admin/src/Controller/Joomla_module_files_folders_urlsController.php
@@ -62,6 +62,22 @@ class Joomla_module_files_folders_urlsController extends FormController
*/
protected $view_list = 'joomla_modules_files_folders_urls';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Joomla_module_updatesController.php b/admin/src/Controller/Joomla_module_updatesController.php
index dd164aa9d..d29791069 100644
--- a/admin/src/Controller/Joomla_module_updatesController.php
+++ b/admin/src/Controller/Joomla_module_updatesController.php
@@ -64,6 +64,22 @@ class Joomla_module_updatesController extends FormController
*/
protected $view_list = 'joomla_modules_updates';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Joomla_modulesController.php b/admin/src/Controller/Joomla_modulesController.php
index 6676a3275..fc32e2341 100644
--- a/admin/src/Controller/Joomla_modulesController.php
+++ b/admin/src/Controller/Joomla_modulesController.php
@@ -51,13 +51,4 @@ class Joomla_modulesController extends AdminController
{
return parent::getModel($name, $prefix, $config);
}
-
- public function getSnippets()
- {
- // Check for request forgeries
- Session::checkToken() or die(Text::_('JINVALID_TOKEN'));
- // redirect to the import snippets custom admin view
- $this->setRedirect(Route::_('index.php?option=com_componentbuilder&view=get_snippets', false));
- return;
- }
}
\ No newline at end of file
diff --git a/admin/src/Controller/Joomla_pluginController.php b/admin/src/Controller/Joomla_pluginController.php
index 11620df83..30c2c0095 100644
--- a/admin/src/Controller/Joomla_pluginController.php
+++ b/admin/src/Controller/Joomla_pluginController.php
@@ -63,6 +63,22 @@ class Joomla_pluginController extends FormController
*/
protected $view_list = 'joomla_plugins';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Joomla_plugin_files_folders_urlsController.php b/admin/src/Controller/Joomla_plugin_files_folders_urlsController.php
index 3a60f7711..02f1ffb8f 100644
--- a/admin/src/Controller/Joomla_plugin_files_folders_urlsController.php
+++ b/admin/src/Controller/Joomla_plugin_files_folders_urlsController.php
@@ -62,6 +62,22 @@ class Joomla_plugin_files_folders_urlsController extends FormController
*/
protected $view_list = 'joomla_plugins_files_folders_urls';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Joomla_plugin_groupController.php b/admin/src/Controller/Joomla_plugin_groupController.php
index 27e9ec7a0..622fdcb9b 100644
--- a/admin/src/Controller/Joomla_plugin_groupController.php
+++ b/admin/src/Controller/Joomla_plugin_groupController.php
@@ -62,6 +62,22 @@ class Joomla_plugin_groupController extends FormController
*/
protected $view_list = 'joomla_plugin_groups';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Joomla_plugin_updatesController.php b/admin/src/Controller/Joomla_plugin_updatesController.php
index 3bc05a596..0d45a3e69 100644
--- a/admin/src/Controller/Joomla_plugin_updatesController.php
+++ b/admin/src/Controller/Joomla_plugin_updatesController.php
@@ -64,6 +64,22 @@ class Joomla_plugin_updatesController extends FormController
*/
protected $view_list = 'joomla_plugins_updates';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Joomla_powerController.php b/admin/src/Controller/Joomla_powerController.php
index 3ca2e60ca..073be6f38 100644
--- a/admin/src/Controller/Joomla_powerController.php
+++ b/admin/src/Controller/Joomla_powerController.php
@@ -63,6 +63,22 @@ class Joomla_powerController extends FormController
*/
protected $view_list = 'joomla_powers';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Resets the specified Joomla Power.
diff --git a/admin/src/Controller/LanguageController.php b/admin/src/Controller/LanguageController.php
index 209fb7d67..0755f667e 100644
--- a/admin/src/Controller/LanguageController.php
+++ b/admin/src/Controller/LanguageController.php
@@ -62,6 +62,22 @@ class LanguageController extends FormController
*/
protected $view_list = 'languages';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Language_translationController.php b/admin/src/Controller/Language_translationController.php
index 6e5aa5112..4a3074a89 100644
--- a/admin/src/Controller/Language_translationController.php
+++ b/admin/src/Controller/Language_translationController.php
@@ -62,6 +62,22 @@ class Language_translationController extends FormController
*/
protected $view_list = 'language_translations';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/LayoutController.php b/admin/src/Controller/LayoutController.php
index 4264aa30e..e00b0533c 100644
--- a/admin/src/Controller/LayoutController.php
+++ b/admin/src/Controller/LayoutController.php
@@ -62,6 +62,22 @@ class LayoutController extends FormController
*/
protected $view_list = 'layouts';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/LibraryController.php b/admin/src/Controller/LibraryController.php
index 99bcca215..4889c262a 100644
--- a/admin/src/Controller/LibraryController.php
+++ b/admin/src/Controller/LibraryController.php
@@ -63,6 +63,22 @@ class LibraryController extends FormController
*/
protected $view_list = 'libraries';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Library_configController.php b/admin/src/Controller/Library_configController.php
index 4417aafdc..aab2c3cdf 100644
--- a/admin/src/Controller/Library_configController.php
+++ b/admin/src/Controller/Library_configController.php
@@ -62,6 +62,22 @@ class Library_configController extends FormController
*/
protected $view_list = 'libraries_config';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Library_files_folders_urlsController.php b/admin/src/Controller/Library_files_folders_urlsController.php
index b7f1a2472..639d2d421 100644
--- a/admin/src/Controller/Library_files_folders_urlsController.php
+++ b/admin/src/Controller/Library_files_folders_urlsController.php
@@ -62,6 +62,22 @@ class Library_files_folders_urlsController extends FormController
*/
protected $view_list = 'libraries_files_folders_urls';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/PlaceholderController.php b/admin/src/Controller/PlaceholderController.php
index 8a7378835..5eeba6a4e 100644
--- a/admin/src/Controller/PlaceholderController.php
+++ b/admin/src/Controller/PlaceholderController.php
@@ -62,6 +62,22 @@ class PlaceholderController extends FormController
*/
protected $view_list = 'placeholders';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/PowerController.php b/admin/src/Controller/PowerController.php
index 57e7c53d4..5a7118ba9 100644
--- a/admin/src/Controller/PowerController.php
+++ b/admin/src/Controller/PowerController.php
@@ -63,6 +63,22 @@ class PowerController extends FormController
*/
protected $view_list = 'powers';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Resets the specified power.
diff --git a/admin/src/Controller/RepositoryController.php b/admin/src/Controller/RepositoryController.php
index 8c17b02fe..8e16deaaf 100644
--- a/admin/src/Controller/RepositoryController.php
+++ b/admin/src/Controller/RepositoryController.php
@@ -62,6 +62,22 @@ class RepositoryController extends FormController
*/
protected $view_list = 'repositories';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/ServerController.php b/admin/src/Controller/ServerController.php
index ce2161b03..71d1ed431 100644
--- a/admin/src/Controller/ServerController.php
+++ b/admin/src/Controller/ServerController.php
@@ -62,6 +62,22 @@ class ServerController extends FormController
*/
protected $view_list = 'servers';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Site_viewController.php b/admin/src/Controller/Site_viewController.php
index 578235ba8..5832b12cd 100644
--- a/admin/src/Controller/Site_viewController.php
+++ b/admin/src/Controller/Site_viewController.php
@@ -62,6 +62,22 @@ class Site_viewController extends FormController
*/
protected $view_list = 'site_views';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/SnippetController.php b/admin/src/Controller/SnippetController.php
index 5e1d69a64..4698245ba 100644
--- a/admin/src/Controller/SnippetController.php
+++ b/admin/src/Controller/SnippetController.php
@@ -62,6 +62,22 @@ class SnippetController extends FormController
*/
protected $view_list = 'snippets';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Snippet_typeController.php b/admin/src/Controller/Snippet_typeController.php
index e3ecd069f..3037b6f6b 100644
--- a/admin/src/Controller/Snippet_typeController.php
+++ b/admin/src/Controller/Snippet_typeController.php
@@ -62,6 +62,22 @@ class Snippet_typeController extends FormController
*/
protected $view_list = 'snippet_types';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/TemplateController.php b/admin/src/Controller/TemplateController.php
index a4237bb49..c1c0ef076 100644
--- a/admin/src/Controller/TemplateController.php
+++ b/admin/src/Controller/TemplateController.php
@@ -62,6 +62,22 @@ class TemplateController extends FormController
*/
protected $view_list = 'templates';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Controller/Validation_ruleController.php b/admin/src/Controller/Validation_ruleController.php
index bed05dec2..f6f1091c4 100644
--- a/admin/src/Controller/Validation_ruleController.php
+++ b/admin/src/Controller/Validation_ruleController.php
@@ -62,6 +62,22 @@ class Validation_ruleController extends FormController
*/
protected $view_list = 'validation_rules';
+ /**
+ * Referral value
+ *
+ * @var string
+ * @since 5.0
+ */
+ protected string $ref;
+
+ /**
+ * Referral ID value
+ *
+ * @var int
+ * @since 5.0
+ */
+ protected int $refid;
+
/**
* Method override to check if you can add a new record.
*
diff --git a/admin/src/Helper/ComponentbuilderHelper.php b/admin/src/Helper/ComponentbuilderHelper.php
index 2102e3ca7..3b0bae954 100644
--- a/admin/src/Helper/ComponentbuilderHelper.php
+++ b/admin/src/Helper/ComponentbuilderHelper.php
@@ -44,6 +44,7 @@ use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper;
use VDM\Joomla\Utilities\JsonHelper;
use VDM\Joomla\Utilities\FileHelper;
use VDM\Joomla\Utilities\ObjectHelper;
+use VDM\Joomla\Utilities\Component\Helper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\FieldHelper;
use VDM\Joomla\Componentbuilder\Compiler\Factory as CompilerFactory;
use VDM\Joomla\Utilities\Base64Helper;
@@ -55,7 +56,6 @@ use VDM\Joomla\Utilities\String\NamespaceHelper;
use VDM\Joomla\Utilities\MathHelper;
use VDM\Joomla\Utilities\String\PluginHelper;
use VDM\Joomla\Utilities\GuidHelper;
-use VDM\Joomla\Utilities\Component\Helper;
use VDM\Joomla\Utilities\FormHelper;
use Joomla\CMS\Router\Route;
@@ -1230,8 +1230,9 @@ abstract class ComponentbuilderHelper
if ((int) $id > 0)
{
// get the model
- $model = self::getModel($type);
- $app = Factory::getApplication();
+ Helper::setOption('com_componentbuilder');
+ $model = Helper::getModel($type);
+ $app = Factory::getApplication();
// get item
if ($item = $model->getItem($id))
{
@@ -5417,7 +5418,6 @@ abstract class ComponentbuilderHelper
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
-
/**
* The subform layouts
diff --git a/admin/src/Model/AjaxModel.php b/admin/src/Model/AjaxModel.php
index 4ac4a87d7..7099f0fd3 100644
--- a/admin/src/Model/AjaxModel.php
+++ b/admin/src/Model/AjaxModel.php
@@ -480,10 +480,23 @@ class AjaxModel extends ListModel
return ['error' => $message];
}
- return ['error' => Text::_('COM_COMPONENTBUILDER_THE_WIKI_CAN_ONLY_BE_LOADED_WHEN_YOUR_JOOMLA_COMPONENT_BUILDER_SYSTEM_HAS_INTERNET_CONNECTION')];
+ return ['error' => Text::_('COM_COMPONENTBUILDER_THE_WIKI_CAN_ONLY_BE_LOADED_WHEN_YOUR_JCB_SYSTEM_HAS_INTERNET_CONNECTION')];
}
// Used in joomla_module
+ /**
+ * Generates and returns the module code based on the provided data.
+ *
+ * This method processes the input data to generate module-specific code snippets
+ * for class inclusion, data handling, libraries, CSS, and template loading.
+ * It merges these code blocks into an array and specifies their placement within the final module output.
+ *
+ * @param string $data JSON-encoded string containing the module's class, get, lib, and other properties.
+ *
+ * @return array An associative array containing the generated code snippets for the module,
+ * including class, get, libraries, CSS, and template code, each with merge settings.
+ * @since 3.0.9
+ */
public function getModuleCode($data)
{
// reset the return array
@@ -532,7 +545,7 @@ class AjaxModel extends ListModel
$code['css']['code'] = '// get the module class sfx (local)';
$code['css']['code'] .= PHP_EOL . "\$moduleclass_sfx = htmlspecialchars(\$params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8');";
$code['tmpl']['code'] = '// load the default Tmpl';
- $code['tmpl']['code'] .= PHP_EOL . "require JModuleHelper::getLayoutPath('mod_[[[module]]]', \$params->get('layout', 'default'));";
+ $code['tmpl']['code'] .= PHP_EOL . "require Joomla__"."_f15d556d_33dd_4ee3_a0f7_0653e4a7a1e4___Power::getLayoutPath('mod_[[[module]]]', \$params->get('layout', 'default'));";
// set placement
$code['css']['merge'] = 1;
$code['css']['merge_target'] = '// load the default Tmpl';
@@ -540,15 +553,33 @@ class AjaxModel extends ListModel
$code['tmpl']['merge_target'] = 'append';
return $code;
- }
-
+ }
// Used in joomla_plugin
+ /**
+ * Retrieves the class code based on the provided ID and type.
+ *
+ * @param int|string $id The ID of the class.
+ * @param string $type The type of the class (e.g., 'property', 'method').
+ *
+ * @return mixed The class code, or false on failure.
+ * @since 3.0.9
+ */
public function getClassCode($id, $type)
{
return ComponentbuilderHelper::getClassCode($id, $type);
}
+ /**
+ * Retrieves class code IDs based on the provided ID, type, and key.
+ *
+ * @param int|string $id The ID of the class.
+ * @param string $type The type of the class (e.g., 'property', 'method', 'joomla_plugin_group').
+ * @param int $key The key that determines which data to return (e.g., 1 for 'joomla_plugin_group', 2 for 'extension_type').
+ *
+ * @return mixed The corresponding class code IDs or false if no valid data is found.
+ * @since 3.0.9
+ */
public function getClassCodeIds($id, $type, $key)
{
if ('property' === $type || 'method' === $type)
@@ -570,9 +601,20 @@ class AjaxModel extends ListModel
return false;
}
+ /**
+ * Retrieves the header code of the class based on the provided ID and type.
+ *
+ * @param int|string $id The ID of the class.
+ * @param string $type The type of the header (e.g., 'extends').
+ *
+ * @return string|false The decoded header code, or false if no valid data is found.
+ * @since 3.0.9
+ */
public function getClassHeaderCode($id, $type)
{
- if ('extends' === $type && ($head = GetHelper::var('class_' . $type, $id, 'id', 'head')) !== false && StringHelper::check($head))
+ if ('extends' === $type &&
+ ($head = GetHelper::var('class_' . $type, $id, 'id', 'head')) !== false &&
+ StringHelper::check($head))
{
return base64_decode($head);
}
diff --git a/admin/src/Model/Joomla_pluginsModel.php b/admin/src/Model/Joomla_pluginsModel.php
index 58f6469d2..51d88e3ab 100644
--- a/admin/src/Model/Joomla_pluginsModel.php
+++ b/admin/src/Model/Joomla_pluginsModel.php
@@ -265,8 +265,7 @@ class Joomla_pluginsModel extends ListModel
return false;
}
return true;
- }
-
+ }
/**
* Method to auto-populate the model state.
diff --git a/admin/src/View/Joomla_module/HtmlView.php b/admin/src/View/Joomla_module/HtmlView.php
index 97bd06de3..9126b4d75 100644
--- a/admin/src/View/Joomla_module/HtmlView.php
+++ b/admin/src/View/Joomla_module/HtmlView.php
@@ -327,9 +327,9 @@ class HtmlView extends BaseHtmlView
Html::_('script', 'media/com_componentbuilder/js/jstorage.min.js', ['version' => 'auto']);
Html::_('script', 'media/com_componentbuilder/js/strtotime.js', ['version' => 'auto']);
// add var key
- $this->document->addScriptDeclaration("var vastDevMod = '" . $this->get('VDM') . "';");
+ $this->getDocument()->addScriptDeclaration("var vastDevMod = '" . $this->get('VDM') . "';");
// add return_here
- $this->document->addScriptDeclaration("var return_here = '" . urlencode(base64_encode((string) Uri::getInstance())) . "';");
+ $this->getDocument()->addScriptDeclaration("var return_here = '" . urlencode(base64_encode((string) Uri::getInstance())) . "';");
// check if we should use browser storage
$setBrowserStorage = $this->params->get('set_browser_storage', null);
if ($setBrowserStorage)
@@ -360,6 +360,6 @@ class HtmlView extends BaseHtmlView
$expire = 30000; // only 30 seconds
}
// Set the Time To Live To JavaScript
- $this->document->addScriptDeclaration("var expire = ". (int) $expire.";");
+ $this->getDocument()->addScriptDeclaration("var expire = ". (int) $expire.";");
}
}
diff --git a/admin/src/View/Joomla_modules/HtmlView.php b/admin/src/View/Joomla_modules/HtmlView.php
index d9a68bcd9..8f8937fbc 100644
--- a/admin/src/View/Joomla_modules/HtmlView.php
+++ b/admin/src/View/Joomla_modules/HtmlView.php
@@ -198,11 +198,6 @@ class HtmlView extends BaseHtmlView
ToolbarHelper::trash('joomla_modules.trash');
}
}
- if ($this->user->authorise('joomla_module.get_snippets', 'com_componentbuilder'))
- {
- // add Get Snippets button.
- ToolbarHelper::custom('joomla_modules.getSnippets', 'search custom-button-getsnippets', '', 'COM_COMPONENTBUILDER_GET_SNIPPETS', false);
- }
// set help url for this view if found
$this->help_url = ComponentbuilderHelper::getHelpUrl('joomla_modules');
diff --git a/admin/src/View/Joomla_plugin/HtmlView.php b/admin/src/View/Joomla_plugin/HtmlView.php
index ebddb8c71..d09cdb5f3 100644
--- a/admin/src/View/Joomla_plugin/HtmlView.php
+++ b/admin/src/View/Joomla_plugin/HtmlView.php
@@ -328,9 +328,9 @@ class HtmlView extends BaseHtmlView
Html::_('script', 'media/com_componentbuilder/js/jstorage.min.js', ['version' => 'auto']);
Html::_('script', 'media/com_componentbuilder/js/strtotime.js', ['version' => 'auto']);
// add var key
- $this->document->addScriptDeclaration("var vastDevMod = '" . $this->get('VDM') . "';");
+ $this->getDocument()->addScriptDeclaration("var vastDevMod = '" . $this->get('VDM') . "';");
// add return_here
- $this->document->addScriptDeclaration("var return_here = '" . urlencode(base64_encode((string) Uri::getInstance())) . "';");
+ $this->getDocument()->addScriptDeclaration("var return_here = '" . urlencode(base64_encode((string) Uri::getInstance())) . "';");
// set some lang
Text::script('COM_COMPONENTBUILDER_ALREADY_SELECTED_TRY_ANOTHER');
Text::script('COM_COMPONENTBUILDER_TYPE_OR_SELECT_SOME_OPTIONS');
@@ -367,11 +367,11 @@ class HtmlView extends BaseHtmlView
$expire = 30000; // only 30 seconds
}
// Set the Time To Live To JavaScript
- $this->document->addScriptDeclaration("var expire = ". (int) $expire.";");
- $this->document->addScriptDeclaration("selectionArray = {'property':{},'method':{}};");
+ $this->getDocument()->addScriptDeclaration("var expire = ". (int) $expire.";");
+ $this->getDocument()->addScriptDeclaration("selectionArray = {'property':{},'method':{}};");
// add a few field options via PHP
- \JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields');
- $tmp_ = \JFormHelper::loadFieldType('joomlaplugingroups')->options;
+ FormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields');
+ $tmp_ = FormHelper::loadFieldType('joomlaplugingroups')->options;
if (ArrayHelper::check($tmp_))
{
$_tmp = array();
@@ -380,9 +380,9 @@ class HtmlView extends BaseHtmlView
$_tmp[$item->value] = $item->text;
}
// Set the values to JavaScript
- $this->document->addScriptDeclaration("selectionArray['joomla_plugin_group'] = ". json_encode($_tmp) . ";");
+ $this->getDocument()->addScriptDeclaration("selectionArray['joomla_plugin_group'] = ". json_encode($_tmp) . ";");
}
- $tmp_ = \JFormHelper::loadFieldType('pluginsclassproperties')->options;
+ $tmp_ = FormHelper::loadFieldType('pluginsclassproperties')->options;
if (ArrayHelper::check($tmp_))
{
$_tmp = array();
@@ -391,9 +391,9 @@ class HtmlView extends BaseHtmlView
$_tmp[$item->value] = $item->text;
}
// Set the values to JavaScript
- $this->document->addScriptDeclaration("selectionArray['property'] = ". json_encode($_tmp) . ";");
+ $this->getDocument()->addScriptDeclaration("selectionArray['property'] = ". json_encode($_tmp) . ";");
}
- $tmp_ = \JFormHelper::loadFieldType('pluginsclassmethods')->options;
+ $tmp_ = FormHelper::loadFieldType('pluginsclassmethods')->options;
if (ArrayHelper::check($tmp_))
{
$_tmp = array();
@@ -402,7 +402,7 @@ class HtmlView extends BaseHtmlView
$_tmp[$item->value] = $item->text;
}
// Set the values to JavaScript
- $this->document->addScriptDeclaration("selectionArray['method'] = ". json_encode($_tmp) . ";");
+ $this->getDocument()->addScriptDeclaration("selectionArray['method'] = ". json_encode($_tmp) . ";");
}
}
}
diff --git a/componentbuilder.xml b/componentbuilder.xml
index df5d38377..baa8bd25d 100644
--- a/componentbuilder.xml
+++ b/componentbuilder.xml
@@ -1,15 +1,15 @@
COM_COMPONENTBUILDER
- 23rd August, 2024
+ 18th September, 2024
Llewellyn van der Merwe
joomla@vdm.io
https://dev.vdm.io
Copyright (C) 2015 Vast Development Method. All rights reserved.
GNU General Public License version 2 or later; see LICENSE.txt
- 5.0.3-alpha3
+ 5.0.3-alpha4
Component Builder (v.5.0.3-alpha3)
+ Component Builder (v.5.0.3-alpha4)
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.
diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml
index d04aace81..b09a7a063 100644
--- a/componentbuilder_update_server.xml
+++ b/componentbuilder_update_server.xml
@@ -98,7 +98,7 @@
5.0.3-alpha
https://dev.vdm.io
- https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.3-alpha3.zip
+ https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.3-alpha4.zip
alpha
@@ -113,10 +113,10 @@
pkg_component_builder
package
site
- 5.0.3-alpha3
+ 5.0.3-alpha4
https://dev.vdm.io
- https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.3-alpha3.zip
+ https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.3-alpha4.zip
alpha
diff --git a/images/vdm/demo500.jpg b/images/vdm/demo500.jpg
new file mode 100644
index 000000000..c043f040a
Binary files /dev/null and b/images/vdm/demo500.jpg differ
diff --git a/images/vdm/index.html b/images/vdm/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/images/vdm/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla.FOF/src/Encrypt/Randval.php b/libraries/vendor_jcb/VDM.Joomla.FOF/src/Encrypt/Randval.php
index 8d57ccc9a..dace5f29c 100644
--- a/libraries/vendor_jcb/VDM.Joomla.FOF/src/Encrypt/Randval.php
+++ b/libraries/vendor_jcb/VDM.Joomla.FOF/src/Encrypt/Randval.php
@@ -24,7 +24,7 @@ use VDM\Joomla\FOF\Encrypt\Randvalinterface;
*
* @package FrameworkOnFramework
* @since 1.0
- * @deprecated Use phpseclib/phpseclib version 3 Instead.
+ * @deprecated Use phpseclib/phpseclib version 3 Instead.
*/
class Randval implements Randvalinterface
{
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/BaseTable.php b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/BaseTable.php
index 46227edca..fe497f6e6 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/BaseTable.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/BaseTable.php
@@ -65,7 +65,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'INT(10) unsigned',
'default' => '0',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'comment' => 'FK to the #__assets table.'
]
],
@@ -80,7 +80,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'INT(11)',
'default' => '0',
- 'null_switch' => 'NOT NULL'
+ 'null_switch' => 'NULL'
]
],
'published' => [
@@ -94,7 +94,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'TINYINT(3)',
'default' => '1',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'key' => true,
'key_name' => 'state'
]
@@ -110,7 +110,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'INT(10) unsigned',
'default' => '0',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'key' => true,
'key_name' => 'modifiedby'
]
@@ -126,7 +126,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'DATETIME',
'default' => '0000-00-00 00:00:00',
- 'null_switch' => 'NOT NULL'
+ 'null_switch' => 'NULL'
]
],
'created_by' => [
@@ -140,7 +140,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'INT(10) unsigned',
'default' => '0',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'key' => true,
'key_name' => 'createdby'
]
@@ -156,7 +156,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'DATETIME',
'default' => '0000-00-00 00:00:00',
- 'null_switch' => 'NOT NULL'
+ 'null_switch' => 'NULL'
]
],
'checked_out' => [
@@ -170,7 +170,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'INT(10) unsigned',
'default' => '0',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'key' => true,
'key_name' => 'checkout'
]
@@ -186,7 +186,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'DATETIME',
'default' => '0000-00-00 00:00:00',
- 'null_switch' => 'NOT NULL'
+ 'null_switch' => 'NULL'
]
],
'hits' => [
@@ -200,7 +200,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'INT(10) unsigned',
'default' => '0',
- 'null_switch' => 'NOT NULL'
+ 'null_switch' => 'NULL'
]
],
'version' => [
@@ -214,7 +214,7 @@ abstract class BaseTable implements Tableinterface
'db' => [
'type' => 'INT(10) unsigned',
'default' => '1',
- 'null_switch' => 'NOT NULL'
+ 'null_switch' => 'NULL'
]
],
'params' => [
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Model.php b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Model.php
index 7a3b40203..ccd4d40b0 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Model.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Model.php
@@ -118,7 +118,7 @@ abstract class Model implements ModelInterface
* @return array|null
* @since 3.2.2
*/
- public function values(?array $items = null, string $field, ?string $table = null): ?array
+ public function values(?array $items, string $field, ?string $table = null): ?array
{
// check if this is a valid table
if (ArrayHelper::check($items))
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/ComHelperClass/CreateUser.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/ComHelperClass/CreateUser.php
new file mode 100644
index 000000000..a0a53e582
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/ComHelperClass/CreateUser.php
@@ -0,0 +1,127 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\ComHelperClass;
+
+
+use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
+use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
+use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\ComHelperClass\CreateUserInterface;
+
+
+/**
+ * Helper Class Create User Class for Joomla 5
+ *
+ * @since 5.0.2
+ */
+final class CreateUser implements CreateUserInterface
+{
+ /**
+ * Generates the method definition for creating or updating a user based on the provided parameters.
+ *
+ * This method returns a string representation of a PHP function that includes various
+ * steps for handling user creation and updates, depending on the mode (site registration or admin registration).
+ *
+ * @param $add Determines whether to generate the user creation method or not.
+ * If true, the method will be generated and returned as a string.
+ *
+ * @return string The generated method code as a string if $add is true.
+ * Returns an empty string if $add is false.
+ */
+ public function get($add): string
+ {
+ if ($add)
+ {
+ $method = [];
+ $method[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
+ $method[] = Indent::_(1) . " * Save user details by either creating a new user or updating an existing user.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1)
+ . " * @param array \$credentials ['name' => string, 'username' => string, 'email' => string, 'password' => string, 'password2' => string]";
+ $method[] = Indent::_(1) . " * @param int \$autologin";
+ $method[] = Indent::_(1)
+ . " * @param array \$params ['useractivation' => int, 'sendpassword' => int, 'allowUserRegistration' => int]";
+ $method[] = Indent::_(1)
+ . " * @param array \$mode 1 = Site Registrations; 0 = Admin Registration; 2 = Custom Helper Method Called registerUser";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @return int User ID on success";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @throws \InvalidArgumentException If required credentials are missing.";
+ $method[] = Indent::_(1) . " * @throws \RuntimeException If the user update or creation fails.";
+ $method[] = Indent::_(1) . " * @throws Super__"."_1c10a5f1_204d_4f17_ad9f_0e0684f2030d___Power If the user is not found.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @since 3.0.0";
+ $method[] = Indent::_(1) . " * @deprecated 4.3 Use Super__"."_7832a726_87b6_4e95_887e_7b725d3fab8f___Power::create(\$credentials, \$autologin, \$params, \$mode);";
+ $method[] = Indent::_(1) . " */";
+ $method[] = Indent::_(1)
+ . "public static function createUser(\$credentials, \$autologin = 0,";
+ $method[] = Indent::_(2) . "\$params = [";
+ $method[] = Indent::_(3)
+ . "'useractivation' => 0, 'sendpassword' => 1";
+ $method[] = Indent::_(2) . "], \$mode = 1";
+ $method[] = Indent::_(1) . ")";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Create a user with the UserHelper class (Super---7832a726_87b6_4e95_887e_7b725d3fab8f---Power)";
+ $method[] = Indent::_(2)
+ . "return Super__"."_7832a726_87b6_4e95_887e_7b725d3fab8f___Power::create(\$credentials, \$autologin, \$params, \$mode);";
+ $method[] = Indent::_(1) . "}";
+
+ $method[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
+ $method[] = Indent::_(1) . " * Update the given component params.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @param string|null \$option The optional extension element name.";
+ $method[] = Indent::_(1) . " * @param string \$target The parameter name to be updated.";
+ $method[] = Indent::_(1) . " * @param mixed \$value The value to set for the parameter.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @since 3.0.0";
+ $method[] = Indent::_(1) . " * @deprecated 4.3 Use Super__"."_640b5352_fb09_425f_a26e_cd44eda03f15___Power::setParams(\$target, \$value, \$option);";
+ $method[] = Indent::_(1) . " */";
+ $method[] = PHP_EOL . Indent::_(1)
+ . "public static function setParams(\$option, \$target, \$value)";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Sets a parameter value for the given target in the specified option's params";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " (Super---640b5352_fb09_425f_a26e_cd44eda03f15---Power)";
+ $method[] = Indent::_(2)
+ . "return Super__"."_640b5352_fb09_425f_a26e_cd44eda03f15___Power::setParams(\$target, \$value, \$option);";
+ $method[] = Indent::_(1) . "}";
+
+ $method[] = PHP_EOL . Indent::_(1) . "/**";
+ $method[] = Indent::_(1) . " * Update user details";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @param array \$userDetails Array containing user details to be updated";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @return int Updated user ID on success.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @throws \RuntimeException If user update fails.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @since 3.0.0";
+ $method[] = Indent::_(1) . " * @deprecated 4.3 Use Super__"."_7832a726_87b6_4e95_887e_7b725d3fab8f___Power::update(\$userDetails);";
+ $method[] = Indent::_(1) . " */";
+ $method[] = Indent::_(1)
+ . "public static function updateUser(\$userDetails): int";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2)
+ . "//" . Line::_(__Line__, __Class__)
+ . " Update user details with the UserHelper class (Super---7832a726_87b6_4e95_887e_7b725d3fab8f---Power)";
+ $method[] = Indent::_(2) . "return Super__"."_7832a726_87b6_4e95_887e_7b725d3fab8f___Power::update(\$userDetails);";
+ $method[] = Indent::_(1) . "}";
+
+ // return the help method
+ return implode(PHP_EOL, $method);
+ }
+
+ return '';
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/ComHelperClass/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/ComHelperClass/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/ComHelperClass/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Plugin/Extension.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Plugin/Extension.php
index d3218db69..b30514a94 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Plugin/Extension.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Plugin/Extension.php
@@ -155,7 +155,7 @@ final class Extension implements ExtensionInterface
$counter = 0;
foreach ($methods as $method)
{
- if ($method['access'] === 'public' && !$method['static'] && !$method['abstract'])
+ if ($this->validEventName($method))
{
$events[$method['name']] = Indent::_(3) . "'{$method['name']}' => '{$method['name']}'";
@@ -191,6 +191,37 @@ final class Extension implements ExtensionInterface
return implode(PHP_EOL, $method);
}
+ /**
+ * Validates if a method name is a valid event name for a Joomla plugin.
+ *
+ * The method must meet the following criteria:
+ * - It must be public, not static, and not abstract.
+ * - It must not be a magic method (i.e., should not start with '__').
+ *
+ * @param array $method The method details, including 'name', 'access', 'static', and 'abstract'.
+ *
+ * @return bool Returns true if the method is a valid event name, otherwise false.
+ *
+ * @since 5.0.2
+ */
+ protected function validEventName(array $method): bool
+ {
+ // Check if the method is public, static, and not abstract
+ if ($method['access'] !== 'public' || $method['static'] || $method['abstract'])
+ {
+ return false;
+ }
+
+ // Check if the method is a magic method (starts with '__')
+ if (substr($method['name'], 0, 2) === '__')
+ {
+ return false;
+ }
+
+ // If all checks pass, the method is a valid event name
+ return true;
+ }
+
/**
* Check if the getSubscribedEvents is set
*
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/ComHelperClass/CreateUser.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/ComHelperClass/CreateUser.php
new file mode 100644
index 000000000..42115dc12
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/ComHelperClass/CreateUser.php
@@ -0,0 +1,125 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\ComHelperClass;
+
+
+use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
+use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
+use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\ComHelperClass\CreateUserInterface;
+
+
+/**
+ * Helper Class Create User Class for Joomla 4
+ *
+ * @since 5.0.2
+ */
+final class CreateUser implements CreateUserInterface
+{
+ /**
+ * Generates the method definition for creating or updating a user based on the provided parameters.
+ *
+ * This method returns a string representation of a PHP function that includes various
+ * steps for handling user creation and updates, depending on the mode (site registration or admin registration).
+ *
+ * @param $add Determines whether to generate the user creation method or not.
+ * If true, the method will be generated and returned as a string.
+ *
+ * @return string The generated method code as a string if $add is true.
+ * Returns an empty string if $add is false.
+ */
+ public function get($add): string
+ {
+ if ($add)
+ {
+ $method = [];
+ $method[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
+ $method[] = Indent::_(1) . " * Save user details by either creating a new user or updating an existing user.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1)
+ . " * @param array \$credentials ['name' => string, 'username' => string, 'email' => string, 'password' => string, 'password2' => string]";
+ $method[] = Indent::_(1) . " * @param int \$autologin";
+ $method[] = Indent::_(1)
+ . " * @param array \$params ['useractivation' => int, 'sendpassword' => int, 'allowUserRegistration' => int]";
+ $method[] = Indent::_(1)
+ . " * @param array \$mode 1 = Site Registrations; 0 = Admin Registration; 2 = Custom Helper Method Called registerUser";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @return int User ID on success";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @throws \InvalidArgumentException If required credentials are missing.";
+ $method[] = Indent::_(1) . " * @throws \RuntimeException If the user update or creation fails.";
+ $method[] = Indent::_(1) . " * @throws Super__"."_1c10a5f1_204d_4f17_ad9f_0e0684f2030d___Power If the user is not found.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @since 3.0.0";
+ $method[] = Indent::_(1) . " * @deprecated 4.3 Use Super__"."_7832a726_87b6_4e95_887e_7b725d3fab8f___Power::create(\$credentials, \$autologin, \$params, \$mode);";
+ $method[] = Indent::_(1) . " */";
+ $method[] = Indent::_(1)
+ . "public static function createUser(\$credentials, \$autologin = 0,";
+ $method[] = Indent::_(2) . "\$params = [";
+ $method[] = Indent::_(3)
+ . "'useractivation' => 0, 'sendpassword' => 1";
+ $method[] = Indent::_(2) . "], \$mode = 1";
+ $method[] = Indent::_(1) . ")";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Create a user with the UserHelper class";
+ $method[] = Indent::_(2)
+ . "return Super__"."_7832a726_87b6_4e95_887e_7b725d3fab8f___Power::create(\$credentials, \$autologin, \$params, \$mode);";
+ $method[] = Indent::_(1) . "}";
+
+ $method[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
+ $method[] = Indent::_(1) . " * Update the given component params.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @param string|null \$option The optional extension element name.";
+ $method[] = Indent::_(1) . " * @param string \$target The parameter name to be updated.";
+ $method[] = Indent::_(1) . " * @param mixed \$value The value to set for the parameter.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @since 3.0.0";
+ $method[] = Indent::_(1) . " * @deprecated 4.3 Use Super__"."_640b5352_fb09_425f_a26e_cd44eda03f15___Power::setParams(\$target, \$value, \$option);";
+ $method[] = Indent::_(1) . " */";
+ $method[] = PHP_EOL . Indent::_(1)
+ . "public static function setParams(\$option, \$target, \$value)";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Sets a parameter value for the given target in the specified option's params";
+ $method[] = Indent::_(2)
+ . "return Super__"."_640b5352_fb09_425f_a26e_cd44eda03f15___Power::setParams(\$target, \$value, \$option);";
+ $method[] = Indent::_(1) . "}";
+
+ $method[] = PHP_EOL . Indent::_(1) . "/**";
+ $method[] = Indent::_(1) . " * Update user details";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @param array \$userDetails Array containing user details to be updated";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @return int Updated user ID on success.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @throws \RuntimeException If user update fails.";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1) . " * @since 3.0.0";
+ $method[] = Indent::_(1) . " * @deprecated 4.3 Use Super__"."_7832a726_87b6_4e95_887e_7b725d3fab8f___Power::update(\$userDetails);";
+ $method[] = Indent::_(1) . " */";
+ $method[] = Indent::_(1)
+ . "public static function updateUser(\$userDetails): int";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2)
+ . "//" . Line::_(__Line__, __Class__)
+ . " Update user details with the UserHelper class";
+ $method[] = Indent::_(2) . "return Super__"."_7832a726_87b6_4e95_887e_7b725d3fab8f___Power::update(\$userDetails);";
+ $method[] = Indent::_(1) . "}";
+
+ // return the help method
+ return implode(PHP_EOL, $method);
+ }
+
+ return '';
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/ComHelperClass/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/ComHelperClass/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/ComHelperClass/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Plugin/Extension.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Plugin/Extension.php
index 777087cda..b8066e091 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Plugin/Extension.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Plugin/Extension.php
@@ -155,7 +155,7 @@ final class Extension implements ExtensionInterface
$counter = 0;
foreach ($methods as $method)
{
- if ($method['access'] === 'public' && !$method['static'] && !$method['abstract'])
+ if ($this->validEventName($method))
{
$events[$method['name']] = Indent::_(3) . "'{$method['name']}' => '{$method['name']}'";
@@ -191,6 +191,37 @@ final class Extension implements ExtensionInterface
return implode(PHP_EOL, $method);
}
+ /**
+ * Validates if a method name is a valid event name for a Joomla plugin.
+ *
+ * The method must meet the following criteria:
+ * - It must be public, not static, and not abstract.
+ * - It must not be a magic method (i.e., should not start with '__').
+ *
+ * @param array $method The method details, including 'name', 'access', 'static', and 'abstract'.
+ *
+ * @return bool Returns true if the method is a valid event name, otherwise false.
+ *
+ * @since 5.0.2
+ */
+ protected function validEventName(array $method): bool
+ {
+ // Check if the method is public, static, and not abstract
+ if ($method['access'] !== 'public' || $method['static'] || $method['abstract'])
+ {
+ return false;
+ }
+
+ // Check if the method is a magic method (starts with '__')
+ if (substr($method['name'], 0, 2) === '__')
+ {
+ return false;
+ }
+
+ // If all checks pass, the method is a valid event name
+ return true;
+ }
+
/**
* Check if the getSubscribedEvents is set
*
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/ComHelperClass/CreateUser.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/ComHelperClass/CreateUser.php
new file mode 100644
index 000000000..f60ca2772
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/ComHelperClass/CreateUser.php
@@ -0,0 +1,366 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\ComHelperClass;
+
+
+use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
+use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
+use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\ComHelperClass\CreateUserInterface;
+
+
+/**
+ * Helper Class Create User Class for Joomla 3
+ *
+ * @since 5.0.2
+ */
+final class CreateUser implements CreateUserInterface
+{
+ /**
+ * Generates the method definition for creating or updating a user based on the provided parameters.
+ *
+ * This method returns a string representation of a PHP function that includes various
+ * steps for handling user creation and updates, depending on the mode (site registration or admin registration).
+ *
+ * @param $add Determines whether to generate the user creation method or not.
+ * If true, the method will be generated and returned as a string.
+ *
+ * @return string The generated method code as a string if $add is true.
+ * Returns an empty string if $add is false.
+ */
+ public function get($add): string
+ {
+ if ($add)
+ {
+ $method = [];
+ $method[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
+ $method[] = Indent::_(1) . " * Greate user and update given table";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1)
+ . " * @param array \$credentials Array('name' => string, 'username' => string, 'email' => string, 'password' => string, 'password2' => string)";
+ $method[] = Indent::_(1) . " * @param int \$autologin";
+ $method[] = Indent::_(1)
+ . " * @param array \$params Array('useractivation' => int, 'sendpassword' => int, 'allowUserRegistration' => int)";
+ $method[] = Indent::_(1)
+ . " * @param array \$mode 1 = Site Registrations; 0 = Admin Registration; 2 = Custom Helper Method Called registerUser";
+ $method[] = Indent::_(1) . " *";
+ $method[] = Indent::_(1)
+ . " * @return int|Error User ID on success, or an error.";
+ $method[] = Indent::_(1) . " */";
+ $method[] = Indent::_(1)
+ . "public static function createUser(\$credentials, \$autologin = 0,";
+ $method[] = Indent::_(2) . "\$params = array(";
+ $method[] = Indent::_(3)
+ . "'useractivation' => 0, 'sendpassword' => 1";
+ $method[] = Indent::_(2) . "), \$mode = 1";
+ $method[] = Indent::_(1) . ")";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Override mode";
+ $method[] = Indent::_(2)
+ . "if (\$mode == 2 && method_exists(__CLASS__, 'registerUser'))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Update params";
+ $method[] = Indent::_(3) . "\$params['autologin'] = \$autologin;";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Now Register User";
+ $method[] = Indent::_(3)
+ . "return self::registerUser(\$credentials, \$params);";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "elseif (\$mode == 2)";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Fallback to Site Registrations";
+ $method[] = Indent::_(3) . "\$mode = 1;";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " load the user component language files if there is an error.";
+ $method[] = Indent::_(2) . "\$lang = Factory::getLanguage();";
+ $method[] = Indent::_(2) . "\$extension = 'com_users';";
+ $method[] = Indent::_(2) . "\$base_dir = JPATH_SITE;";
+ $method[] = Indent::_(2) . "\$language_tag = '" . CFactory::_('Config')->get('lang_tag', 'en-GB')
+ . "';";
+ $method[] = Indent::_(2) . "\$reload = true;";
+ $method[] = Indent::_(2)
+ . "\$lang->load(\$extension, \$base_dir, \$language_tag, \$reload);";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Load the correct user model.";
+ $method[] = Indent::_(2) . "if (\$mode == 1) //" . Line::_(
+ __LINE__,__CLASS__
+ )
+ . " 1 = Site Registrations";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Load the user site-registration model";
+ $method[] = Indent::_(3)
+ . "\$model = self::getModel('registration', \$base_dir . '/components/' . \$extension, 'Users');";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "else //" . Line::_(__Line__, __Class__)
+ . " 0 = Admin Registration";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Load the backend-user model";
+ $method[] = Indent::_(3)
+ . "\$model = self::getModel('user', JPATH_ADMINISTRATOR . '/components/' . \$extension, 'Users');";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Check if we have params/config";
+ $method[] = Indent::_(2) . "if (Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$params))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Make changes to user config";
+ $method[] = Indent::_(3)
+ . "foreach (\$params as \$param => \$set)";
+ $method[] = Indent::_(3) . "{";
+ $method[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
+ . " If you know of a better path, let me know";
+ $method[] = Indent::_(4)
+ . "\$params[\$param] = self::setParams(\$extension, \$param, \$set);";
+ $method[] = Indent::_(3) . "}";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Set username to email if not set";
+ $method[] = Indent::_(2)
+ . "if (!isset(\$credentials['username']) || !Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['username']))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3)
+ . "\$credentials['username'] = \$credentials['email'];";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Lineup new user data array";
+ $method[] = Indent::_(2) . "\$data = array(";
+ $method[] = Indent::_(3)
+ . "'username' => \$credentials['username'],";
+ $method[] = Indent::_(3) . "'name' => \$credentials['name'],";
+ $method[] = Indent::_(3) . "'block' => 0 );";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Added details based on mode";
+ $method[] = Indent::_(2) . "if (\$mode == 1) //" . Line::_(
+ __LINE__,__CLASS__
+ )
+ . " 1 = Site-registration mode";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3)
+ . "\$data['email1'] = \$credentials['email'];";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "else //" . Line::_(__Line__, __Class__)
+ . " 0 = Admin-registration mode";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3)
+ . "\$data['email'] = \$credentials['email'];";
+ $method[] = Indent::_(3)
+ . "\$data['registerDate'] = Factory::getDate()->toSql();";
+ $method[] = Indent::_(2) . "}";
+
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Check if password was set";
+ $method[] = Indent::_(2)
+ . "if (\$mode == 1 && (!isset(\$credentials['password']) || !isset(\$credentials['password2']) || !Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['password']) || !Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['password2'])))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Set random password when empty password was submitted,";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " when using the 1 = site-registration mode";
+ $method[] = Indent::_(3)
+ . "\$credentials['password'] = self::randomkey(8);";
+ $method[] = Indent::_(3)
+ . "\$credentials['password2'] = \$credentials['password'];";
+ $method[] = Indent::_(2) . "}";
+
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Now Add password if set";
+ $method[] = Indent::_(2)
+ . "if (isset(\$credentials['password']) && isset(\$credentials['password2']) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['password']) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['password2']))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "if (\$mode == 1) //" . Line::_(
+ __LINE__,__CLASS__
+ )
+ . " 1 = Site-registration mode";
+ $method[] = Indent::_(3) . "{";
+ $method[] = Indent::_(4)
+ . "\$data['password1'] = \$credentials['password'];";
+ $method[] = Indent::_(3) . "}";
+ $method[] = Indent::_(3) . "else //" . Line::_(__Line__, __Class__)
+ . " 0 = Admin-registration mode";
+ $method[] = Indent::_(3) . "{";
+ $method[] = Indent::_(4)
+ . "\$data['password'] = \$credentials['password'];";
+ $method[] = Indent::_(3) . "}";
+ $method[] = Indent::_(3)
+ . "\$data['password2'] = \$credentials['password2'];";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Load the group/s value if set, only for Admin Registration (\$mode == 0)";
+ $method[] = Indent::_(2)
+ . "if (\$mode == 0 && isset(\$credentials['groups']) && Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$credentials['groups']))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3)
+ . "\$data['groups'] = \$credentials['groups'];";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Create the new user";
+ $method[] = Indent::_(2) . "if (\$mode == 1) //" . Line::_(
+ __LINE__,__CLASS__
+ )
+ . " 1 = Site-registration mode";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "\$userId = \$model->register(\$data);";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "else //" . Line::_(__Line__, __Class__)
+ . " 0 = Admin-registration mode";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "\$model->save(\$data);";
+ $method[] = Indent::_(3)
+ . "\$userId = \$model->getState('user.id', 0);";
+ $method[] = Indent::_(2) . "}";
+
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Check if we have params";
+ $method[] = Indent::_(2) . "if (Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$params))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Change user params/config back";
+ $method[] = Indent::_(3)
+ . "foreach (\$params as \$param => \$set)";
+ $method[] = Indent::_(3) . "{";
+ $method[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
+ . " If you know of a better path, let me know";
+ $method[] = Indent::_(4)
+ . "self::setParams(\$extension, \$param, \$set);";
+ $method[] = Indent::_(3) . "}";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " if user is created";
+ $method[] = Indent::_(2) . "if (\$userId > 0)";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Auto Login if Needed";
+ $method[] = Indent::_(3)
+ . "if (\$autologin && isset(\$credentials['password']))";
+ $method[] = Indent::_(3) . "{";
+ $method[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
+ . " Try to login";
+ $method[] = Indent::_(4) . "try{";
+ $method[] = Indent::_(5)
+ . "Factory::getApplication()->login(\$credentials);";
+ $method[] = Indent::_(4) . "} catch (\Exception \$exception){";
+ $method[] = Indent::_(5) . "//" . Line::_(__Line__, __Class__)
+ . " Do noting for now, may want to set redirect.";
+ $method[] = Indent::_(4) . "}";
+ $method[] = Indent::_(3) . "}";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Return ID";
+ $method[] = Indent::_(3) . "return \$userId;";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "return \$model->getError();";
+ $method[] = Indent::_(1) . "}";
+
+ $method[] = PHP_EOL . Indent::_(1)
+ . "public static function setParams(\$component,\$target,\$value)";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
+ . " Get the params and set the new values";
+ $method[] = Indent::_(2)
+ . "\$params = ComponentHelper::getParams(\$component);";
+ $method[] = Indent::_(2) . "\$was = \$params->get(\$target, null);";
+ $method[] = Indent::_(2) . "if (\$was != \$value)";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "\$params->set(\$target, \$value);";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Get a new database query instance";
+ $method[] = Indent::_(3) . "\$db = Factory::getDBO();";
+ $method[] = Indent::_(3) . "\$query = \$db->getQuery(true);";
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Build the query";
+ $method[] = Indent::_(3) . "\$query->update('#__extensions AS a');";
+ $method[] = Indent::_(3)
+ . "\$query->set('a.params = ' . \$db->quote((string)\$params));";
+ $method[] = Indent::_(3)
+ . "\$query->where('a.element = ' . \$db->quote((string)\$component));";
+ $method[] = Indent::_(3);
+ $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
+ . " Execute the query";
+ $method[] = Indent::_(3) . "\$db->setQuery(\$query);";
+ $method[] = Indent::_(3) . "\$db->execute();";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "return \$was;";
+ $method[] = Indent::_(1) . "}";
+
+ $method[] = PHP_EOL . Indent::_(1) . "/**";
+ $method[] = Indent::_(1) . " * Update user values";
+ $method[] = Indent::_(1) . " */";
+ $method[] = Indent::_(1)
+ . "public static function updateUser(\$new)";
+ $method[] = Indent::_(1) . "{";
+ $method[] = Indent::_(2)
+ . "// load the user component language files if there is an error.";
+ $method[] = Indent::_(2) . "\$lang = Factory::getLanguage();";
+ $method[] = Indent::_(2) . "\$extension = 'com_users';";
+ $method[] = Indent::_(2) . "\$base_dir = JPATH_ADMINISTRATOR;";
+ $method[] = Indent::_(2) . "\$language_tag = '" . CFactory::_('Config')->get('lang_tag', 'en-GB')
+ . "';";
+ $method[] = Indent::_(2) . "\$reload = true;";
+ $method[] = Indent::_(2)
+ . "\$lang->load(\$extension, \$base_dir, \$language_tag, \$reload);";
+ $method[] = Indent::_(2) . "// load the user model";
+ $method[] = Indent::_(2)
+ . "\$model = self::getModel('user', JPATH_ADMINISTRATOR . '/components/com_users', 'Users');";
+ $method[] = Indent::_(2) . "// Check if password was set";
+ $method[] = Indent::_(2)
+ . "if (isset(\$new['password']) && isset(\$new['password2']) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$new['password']) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$new['password2']))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "// Use the users passwords";
+ $method[] = Indent::_(3) . "\$password = \$new['password'];";
+ $method[] = Indent::_(3) . "\$password2 = \$new['password2'];";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "// set username";
+ $method[] = Indent::_(2)
+ . "if (!isset(\$new['username']) || !Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$new['username']))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3)
+ . "\$new['username'] = \$new['email'];";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "// lineup update user data";
+ $method[] = Indent::_(2) . "\$data = array(";
+ $method[] = Indent::_(3) . "'id' => \$new['id'],";
+ $method[] = Indent::_(3) . "'username' => \$new['username'],";
+ $method[] = Indent::_(3) . "'name' => \$new['name'],";
+ $method[] = Indent::_(3) . "'email' => \$new['email'],";
+ $method[] = Indent::_(3)
+ . "'password' => \$password, // First password field";
+ $method[] = Indent::_(3)
+ . "'password2' => \$password2, // Confirm password field";
+ $method[] = Indent::_(3) . "'block' => 0 );";
+ $method[] = Indent::_(2) . "// set groups if found";
+ $method[] = Indent::_(2)
+ . "if (isset(\$new['groups']) && Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$new['groups']))";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "\$data['groups'] = \$new['groups'];";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "// register the new user";
+ $method[] = Indent::_(2) . "\$done = \$model->save(\$data);";
+ $method[] = Indent::_(2) . "// if user is updated";
+ $method[] = Indent::_(2) . "if (\$done)";
+ $method[] = Indent::_(2) . "{";
+ $method[] = Indent::_(3) . "return \$new['id'];";
+ $method[] = Indent::_(2) . "}";
+ $method[] = Indent::_(2) . "return \$model->getError();";
+ $method[] = Indent::_(1) . "}";
+
+ // return the help method
+ return implode(PHP_EOL, $method);
+ }
+
+ return '';
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/ComHelperClass/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/ComHelperClass/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/ComHelperClass/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Config.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Config.php
index bed16d3f5..1c23e07f4 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Config.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Config.php
@@ -543,14 +543,7 @@ class Config extends BaseConfig
*/
protected function getRemovelinebreaks(): bool
{
- // get posted value
- $value = $this->input->post->get('remove_line_breaks', 2, 'INT');
- // get global
- if ($value > 1)
- {
- return (bool) GetHelper::var('joomla_component', $this->component_id, 'id', 'remove_line_breaks');
- }
- return (bool) $value;
+ return (bool) true;
}
/**
@@ -889,7 +882,26 @@ class Config extends BaseConfig
*/
protected function getApprovedjoomlapaths(): array
{
- return array_values($this->joomla_powers_init_repos);
+ // some defaults repos we need by JCB
+ $approved = $this->joomla_powers_init_repos;
+
+ $paths = RepoHelper::get(2); // Joomla Power = 2
+
+ if ($paths !== null)
+ {
+ foreach ($paths as $path)
+ {
+ $owner = $path->organisation ?? null;
+ $repo = $path->repository ?? null;
+ if ($owner !== null && $repo !== null)
+ {
+ // we make sure to get only the objects
+ $approved = ["{$owner}.{$repo}" => $path] + $approved;
+ }
+ }
+ }
+
+ return array_values($approved);
}
/**
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/Builders.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/Builders.php
index 4c5e0301d..ec5b42256 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/Builders.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/Builders.php
@@ -992,7 +992,8 @@ final class Builders
'code' => $name,
'name' => $listLangName,
'extension' => $_extension,
- 'filter' => $field['filter']
+ 'filter' => $field['filter'],
+ 'add_icon' => StringHelper::check($view['settings']->icon_category)
]);
// also set code name for title alias fix
$this->categorycode->set($nameSingleCode, [
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Dispenser.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Dispenser.php
index ed919e284..73bd80dd3 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Dispenser.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Dispenser.php
@@ -12,13 +12,12 @@
namespace VDM\Joomla\Componentbuilder\Compiler\Customcode;
-use VDM\Joomla\Utilities\StringHelper;
-use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
-use VDM\Joomla\Componentbuilder\Compiler\Customcode;
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
+use VDM\Joomla\Componentbuilder\Compiler\Customcode;
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui;
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Hash;
use VDM\Joomla\Componentbuilder\Compiler\Customcode\LockBase;
+use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Customcode\DispenserInterface;
@@ -33,7 +32,7 @@ class Dispenser implements DispenserInterface
* Customcode Dispenser Hub
*
* @var array
- * @since 3.2.0
+ * @since 3.2.0
**/
public array $hub;
@@ -41,7 +40,7 @@ class Dispenser implements DispenserInterface
* Compiler Placeholder
*
* @var Placeholder
- * @since 3.2.0
+ * @since 3.2.0
**/
protected Placeholder $placeholder;
@@ -49,7 +48,7 @@ class Dispenser implements DispenserInterface
* Compiler Customcode
*
* @var Customcode
- * @since 3.2.0
+ * @since 3.2.0
**/
protected Customcode $customcode;
@@ -57,7 +56,7 @@ class Dispenser implements DispenserInterface
* Compiler Customcode in Gui
*
* @var Gui
- * @since 3.2.0
+ * @since 3.2.0
**/
protected Gui $gui;
@@ -65,7 +64,7 @@ class Dispenser implements DispenserInterface
* Compiler Customcode to Hash
*
* @var Hash
- * @since 3.2.0
+ * @since 3.2.0
**/
protected Hash $hash;
@@ -73,29 +72,29 @@ class Dispenser implements DispenserInterface
* Compiler Customcode to LockBase
*
* @var LockBase
- * @since 3.2.0
+ * @since 3.2.0
**/
protected LockBase $base64;
/**
* Constructor.
*
- * @param Placeholder|null $placeholder The compiler placeholder object.
- * @param Customcode|null $customcode The compiler customcode object.
- * @param Gui|null $gui The compiler customcode gui object.
- * @param Hash|null $hash The compiler customcode hash object.
- * @param LockBase|null $base64 The compiler customcode lock base64 object.
+ * @param Placeholder $placeholder The Placeholder Class.
+ * @param Customcode $customcode The Customcode Class.
+ * @param Gui $gui The Gui Class.
+ * @param Hash $hash The Hash Class.
+ * @param LockBase $lockbase The LockBase Class.
*
* @since 3.2.0
*/
- public function __construct(?Placeholder $placeholder = null, ?Customcode $customcode = null,
- ?Gui $gui = null, ?Hash $hash = null, ?LockBase $base64 = null)
+ public function __construct(Placeholder $placeholder, Customcode $customcode, Gui $gui,
+ Hash $hash, LockBase $lockbase)
{
- $this->placeholder = $placeholder ?: Compiler::_('Placeholder');
- $this->customcode = $customcode ?: Compiler::_('Customcode');
- $this->gui = $gui ?: Compiler::_('Customcode.Gui');
- $this->hash = $hash ?: Compiler::_('Customcode.Hash');
- $this->base64 = $base64 ?: Compiler::_('Customcode.LockBase');
+ $this->placeholder = $placeholder;
+ $this->customcode = $customcode;
+ $this->gui = $gui;
+ $this->hash = $hash;
+ $this->base64 = $lockbase;
}
/**
@@ -114,7 +113,7 @@ class Dispenser implements DispenserInterface
* default: false
*
* @return bool true on success
- * @since 3.2.0
+ * @since 3.2.0
*/
public function set(&$script, string $first, ?string $second = null, ?string $third = null,
array $config = [], bool $base64 = true, bool $dynamic = true, bool $add = false): bool
@@ -177,7 +176,7 @@ class Dispenser implements DispenserInterface
* @param string $suffix The suffix to add after the script if found
*
* @return mixed The string/script if found or the default value if not found
- * @since 3.2.0
+ * @since 3.2.0
*/
public function get(string $first, string $second, string $prefix = '', ?string $note = null,
bool $unset = false, $default = null, string $suffix = '')
@@ -224,7 +223,7 @@ class Dispenser implements DispenserInterface
* default: false
*
* @return void
- * @since 3.2.0
+ * @since 3.2.0
*/
protected function initHub(string $first, ?string $second = null, ?string $third = null, bool $add = false)
{
@@ -255,7 +254,7 @@ class Dispenser implements DispenserInterface
* default: false
*
* @return void
- * @since 3.2.0
+ * @since 3.2.0
*/
protected function setHub(string $script, string $first, ?string $second = null, ?string $third = null, bool $add = false)
{
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php
index 0ef7008dd..46e163230 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php
@@ -787,7 +787,7 @@ class Extractor implements ExtractorInterface
$query->columns($this->db->quoteName($columns));
foreach ($this->new as $values)
{
- if (count((array) $values) == 15)
+ if (count((array) $values) == 16)
{
$query->values(implode(',', $values));
$continue = true;
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php
index 3a4cf027c..eae8ca031 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php
@@ -42,6 +42,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Service\Utilities;
use VDM\Joomla\Componentbuilder\Compiler\Service\BuilderAJ;
use VDM\Joomla\Componentbuilder\Compiler\Service\BuilderLZ;
use VDM\Joomla\Componentbuilder\Compiler\Service\Creator;
+use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureComHelperClass;
use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureController;
use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureModel;
use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitecturePlugin;
@@ -142,6 +143,7 @@ abstract class Factory extends ExtendingFactory implements FactoryInterface
->registerServiceProvider(new BuilderAJ())
->registerServiceProvider(new BuilderLZ())
->registerServiceProvider(new Creator())
+ ->registerServiceProvider(new ArchitectureComHelperClass())
->registerServiceProvider(new ArchitectureController())
->registerServiceProvider(new ArchitectureModel())
->registerServiceProvider(new ArchitecturePlugin())
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Get.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Get.php
index 3c63e2668..fb179d235 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Get.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Get.php
@@ -173,7 +173,7 @@ class Get
* @var bool
* @deprecated 3.3 Use CFactory::_('Config')->remove_line_breaks;
*/
- public $removeLineBreaks = false;
+ public $removeLineBreaks = true;
/**
* The placeholders for custom code keys
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php
index c3c165371..ea02e1601 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php
@@ -337,9 +337,10 @@ class Infusion extends Interpretation
// HELPER_CREATEUSER
CFactory::_('Compiler.Builder.Content.One')->add('HELPER_CREATEUSER',
- $this->setCreateUserHelperMethod(
- CFactory::_('Component')->get('creatuserhelper')
- ));
+ CFactory::_('Architecture.ComHelperClass.CreateUser')->get(
+ CFactory::_('Component')->get('creatuserhelper', 0)
+ )
+ );
// HELP
CFactory::_('Compiler.Builder.Content.One')->set('HELP', $this->noHelp());
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php
index a6481b113..ffd5b35b9 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php
@@ -1827,340 +1827,24 @@ class Interpretation extends Fields
return '';
}
- public function setCreateUserHelperMethod($add)
+ /**
+ * Generates the method definition for creating or updating a user based on the provided parameters.
+ *
+ * This method returns a string representation of a PHP function that includes various
+ * steps for handling user creation and updates, depending on the mode (site registration or admin registration).
+ *
+ * @param int $add Determines whether to generate the user creation method or not.
+ * If true, the method will be generated and returned as a string.
+ *
+ * @return string The generated method code as a string if $add is true.
+ * Returns an empty string if $add is false.
+ *
+ * @since 3.0
+ * @deprecated 5.0.3 Use CFactory::_('Architecture.ComHelperClass.CreateUser')->get($add);
+ */
+ public function setCreateUserHelperMethod($add): string
{
- if ($add)
- {
- $method = [];
- $method[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
- $method[] = Indent::_(1) . " * Greate user and update given table";
- $method[] = Indent::_(1) . " *";
- $method[] = Indent::_(1)
- . " * @param array \$credentials Array('name' => string, 'username' => string, 'email' => string, 'password' => string, 'password2' => string)";
- $method[] = Indent::_(1) . " * @param int \$autologin";
- $method[] = Indent::_(1)
- . " * @param array \$params Array('useractivation' => int, 'sendpassword' => int, 'allowUserRegistration' => int)";
- $method[] = Indent::_(1)
- . " * @param array \$mode 1 = Site Registrations; 0 = Admin Registration; 2 = Custom Helper Method Called registerUser";
- $method[] = Indent::_(1) . " *";
- $method[] = Indent::_(1)
- . " * @return int|Error User ID on success, or an error.";
- $method[] = Indent::_(1) . " */";
- $method[] = Indent::_(1)
- . "public static function createUser(\$credentials, \$autologin = 0,";
- $method[] = Indent::_(2) . "\$params = array(";
- $method[] = Indent::_(3)
- . "'useractivation' => 0, 'sendpassword' => 1";
- $method[] = Indent::_(2) . "), \$mode = 1";
- $method[] = Indent::_(1) . ")";
- $method[] = Indent::_(1) . "{";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Override mode";
- $method[] = Indent::_(2)
- . "if (\$mode == 2 && method_exists(__CLASS__, 'registerUser'))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Update params";
- $method[] = Indent::_(3) . "\$params['autologin'] = \$autologin;";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Now Register User";
- $method[] = Indent::_(3)
- . "return self::registerUser(\$credentials, \$params);";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "elseif (\$mode == 2)";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Fallback to Site Registrations";
- $method[] = Indent::_(3) . "\$mode = 1;";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " load the user component language files if there is an error.";
- $method[] = Indent::_(2) . "\$lang = Factory::getLanguage();";
- $method[] = Indent::_(2) . "\$extension = 'com_users';";
- $method[] = Indent::_(2) . "\$base_dir = JPATH_SITE;";
- $method[] = Indent::_(2) . "\$language_tag = '" . CFactory::_('Config')->get('lang_tag', 'en-GB')
- . "';";
- $method[] = Indent::_(2) . "\$reload = true;";
- $method[] = Indent::_(2)
- . "\$lang->load(\$extension, \$base_dir, \$language_tag, \$reload);";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Load the correct user model.";
- $method[] = Indent::_(2) . "if (\$mode == 1) //" . Line::_(
- __LINE__,__CLASS__
- )
- . " 1 = Site Registrations";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Load the user site-registration model";
- $method[] = Indent::_(3)
- . "\$model = self::getModel('registration', \$base_dir . '/components/' . \$extension, 'Users');";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "else //" . Line::_(__Line__, __Class__)
- . " 0 = Admin Registration";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Load the backend-user model";
- $method[] = Indent::_(3)
- . "\$model = self::getModel('user', JPATH_ADMINISTRATOR . '/components/' . \$extension, 'Users');";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Check if we have params/config";
- $method[] = Indent::_(2) . "if (Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$params))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Make changes to user config";
- $method[] = Indent::_(3)
- . "foreach (\$params as \$param => \$set)";
- $method[] = Indent::_(3) . "{";
- $method[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
- . " If you know of a better path, let me know";
- $method[] = Indent::_(4)
- . "\$params[\$param] = self::setParams(\$extension, \$param, \$set);";
- $method[] = Indent::_(3) . "}";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Set username to email if not set";
- $method[] = Indent::_(2)
- . "if (!isset(\$credentials['username']) || !Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['username']))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3)
- . "\$credentials['username'] = \$credentials['email'];";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Lineup new user data array";
- $method[] = Indent::_(2) . "\$data = array(";
- $method[] = Indent::_(3)
- . "'username' => \$credentials['username'],";
- $method[] = Indent::_(3) . "'name' => \$credentials['name'],";
- $method[] = Indent::_(3) . "'block' => 0 );";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Added details based on mode";
- $method[] = Indent::_(2) . "if (\$mode == 1) //" . Line::_(
- __LINE__,__CLASS__
- )
- . " 1 = Site-registration mode";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3)
- . "\$data['email1'] = \$credentials['email'];";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "else //" . Line::_(__Line__, __Class__)
- . " 0 = Admin-registration mode";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3)
- . "\$data['email'] = \$credentials['email'];";
- $method[] = Indent::_(3)
- . "\$data['registerDate'] = Factory::getDate()->toSql();";
- $method[] = Indent::_(2) . "}";
-
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Check if password was set";
- $method[] = Indent::_(2)
- . "if (\$mode == 1 && (!isset(\$credentials['password']) || !isset(\$credentials['password2']) || !Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['password']) || !Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['password2'])))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Set random password when empty password was submitted,";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " when using the 1 = site-registration mode";
- $method[] = Indent::_(3)
- . "\$credentials['password'] = self::randomkey(8);";
- $method[] = Indent::_(3)
- . "\$credentials['password2'] = \$credentials['password'];";
- $method[] = Indent::_(2) . "}";
-
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Now Add password if set";
- $method[] = Indent::_(2)
- . "if (isset(\$credentials['password']) && isset(\$credentials['password2']) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['password']) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$credentials['password2']))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "if (\$mode == 1) //" . Line::_(
- __LINE__,__CLASS__
- )
- . " 1 = Site-registration mode";
- $method[] = Indent::_(3) . "{";
- $method[] = Indent::_(4)
- . "\$data['password1'] = \$credentials['password'];";
- $method[] = Indent::_(3) . "}";
- $method[] = Indent::_(3) . "else //" . Line::_(__Line__, __Class__)
- . " 0 = Admin-registration mode";
- $method[] = Indent::_(3) . "{";
- $method[] = Indent::_(4)
- . "\$data['password'] = \$credentials['password'];";
- $method[] = Indent::_(3) . "}";
- $method[] = Indent::_(3)
- . "\$data['password2'] = \$credentials['password2'];";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Load the group/s value if set, only for Admin Registration (\$mode == 0)";
- $method[] = Indent::_(2)
- . "if (\$mode == 0 && isset(\$credentials['groups']) && Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$credentials['groups']))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3)
- . "\$data['groups'] = \$credentials['groups'];";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Create the new user";
- $method[] = Indent::_(2) . "if (\$mode == 1) //" . Line::_(
- __LINE__,__CLASS__
- )
- . " 1 = Site-registration mode";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "\$userId = \$model->register(\$data);";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "else //" . Line::_(__Line__, __Class__)
- . " 0 = Admin-registration mode";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "\$model->save(\$data);";
- $method[] = Indent::_(3)
- . "\$userId = \$model->getState('user.id', 0);";
- $method[] = Indent::_(2) . "}";
-
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Check if we have params";
- $method[] = Indent::_(2) . "if (Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$params))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Change user params/config back";
- $method[] = Indent::_(3)
- . "foreach (\$params as \$param => \$set)";
- $method[] = Indent::_(3) . "{";
- $method[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
- . " If you know of a better path, let me know";
- $method[] = Indent::_(4)
- . "self::setParams(\$extension, \$param, \$set);";
- $method[] = Indent::_(3) . "}";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " if user is created";
- $method[] = Indent::_(2) . "if (\$userId > 0)";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Auto Login if Needed";
- $method[] = Indent::_(3)
- . "if (\$autologin && isset(\$credentials['password']))";
- $method[] = Indent::_(3) . "{";
- $method[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
- . " Try to login";
- $method[] = Indent::_(4) . "try{";
- $method[] = Indent::_(5)
- . "Factory::getApplication()->login(\$credentials);";
- $method[] = Indent::_(4) . "} catch (\Exception \$exception){";
- $method[] = Indent::_(5) . "//" . Line::_(__Line__, __Class__)
- . " Do noting for now, may want to set redirect.";
- $method[] = Indent::_(4) . "}";
- $method[] = Indent::_(3) . "}";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Return ID";
- $method[] = Indent::_(3) . "return \$userId;";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "return \$model->getError();";
- $method[] = Indent::_(1) . "}";
-
- $method[] = PHP_EOL . Indent::_(1)
- . "public static function setParams(\$component,\$target,\$value)";
- $method[] = Indent::_(1) . "{";
- $method[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
- . " Get the params and set the new values";
- $method[] = Indent::_(2)
- . "\$params = ComponentHelper::getParams(\$component);";
- $method[] = Indent::_(2) . "\$was = \$params->get(\$target, null);";
- $method[] = Indent::_(2) . "if (\$was != \$value)";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "\$params->set(\$target, \$value);";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Get a new database query instance";
-
- if (CFactory::_('Config')->get('joomla_version', 3) == 3)
- {
- $method[] = Indent::_(3) . "\$db = Factory::getDBO();";
- }
- else
- {
- $method[] = Indent::_(3) . "\$db = Factory::getContainer()->get(DatabaseInterface::class);";
- }
-
- $method[] = Indent::_(3) . "\$query = \$db->getQuery(true);";
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Build the query";
- $method[] = Indent::_(3) . "\$query->update('#__extensions AS a');";
- $method[] = Indent::_(3)
- . "\$query->set('a.params = ' . \$db->quote((string)\$params));";
- $method[] = Indent::_(3)
- . "\$query->where('a.element = ' . \$db->quote((string)\$component));";
- $method[] = Indent::_(3);
- $method[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
- . " Execute the query";
- $method[] = Indent::_(3) . "\$db->setQuery(\$query);";
- $method[] = Indent::_(3) . "\$db->execute();";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "return \$was;";
- $method[] = Indent::_(1) . "}";
-
- $method[] = PHP_EOL . Indent::_(1) . "/**";
- $method[] = Indent::_(1) . " * Update user values";
- $method[] = Indent::_(1) . " */";
- $method[] = Indent::_(1)
- . "public static function updateUser(\$new)";
- $method[] = Indent::_(1) . "{";
- $method[] = Indent::_(2)
- . "// load the user component language files if there is an error.";
- $method[] = Indent::_(2) . "\$lang = Factory::getLanguage();";
- $method[] = Indent::_(2) . "\$extension = 'com_users';";
- $method[] = Indent::_(2) . "\$base_dir = JPATH_ADMINISTRATOR;";
- $method[] = Indent::_(2) . "\$language_tag = '" . CFactory::_('Config')->get('lang_tag', 'en-GB')
- . "';";
- $method[] = Indent::_(2) . "\$reload = true;";
- $method[] = Indent::_(2)
- . "\$lang->load(\$extension, \$base_dir, \$language_tag, \$reload);";
- $method[] = Indent::_(2) . "// load the user model";
- $method[] = Indent::_(2)
- . "\$model = self::getModel('user', JPATH_ADMINISTRATOR . '/components/com_users', 'Users');";
- $method[] = Indent::_(2) . "// Check if password was set";
- $method[] = Indent::_(2)
- . "if (isset(\$new['password']) && isset(\$new['password2']) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$new['password']) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$new['password2']))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "// Use the users passwords";
- $method[] = Indent::_(3) . "\$password = \$new['password'];";
- $method[] = Indent::_(3) . "\$password2 = \$new['password2'];";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "// set username";
- $method[] = Indent::_(2)
- . "if (!isset(\$new['username']) || !Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$new['username']))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3)
- . "\$new['username'] = \$new['email'];";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "// lineup update user data";
- $method[] = Indent::_(2) . "\$data = array(";
- $method[] = Indent::_(3) . "'id' => \$new['id'],";
- $method[] = Indent::_(3) . "'username' => \$new['username'],";
- $method[] = Indent::_(3) . "'name' => \$new['name'],";
- $method[] = Indent::_(3) . "'email' => \$new['email'],";
- $method[] = Indent::_(3)
- . "'password' => \$password, // First password field";
- $method[] = Indent::_(3)
- . "'password2' => \$password2, // Confirm password field";
- $method[] = Indent::_(3) . "'block' => 0 );";
- $method[] = Indent::_(2) . "// set groups if found";
- $method[] = Indent::_(2)
- . "if (isset(\$new['groups']) && Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$new['groups']))";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "\$data['groups'] = \$new['groups'];";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "// register the new user";
- $method[] = Indent::_(2) . "\$done = \$model->save(\$data);";
- $method[] = Indent::_(2) . "// if user is updated";
- $method[] = Indent::_(2) . "if (\$done)";
- $method[] = Indent::_(2) . "{";
- $method[] = Indent::_(3) . "return \$new['id'];";
- $method[] = Indent::_(2) . "}";
- $method[] = Indent::_(2) . "return \$model->getError();";
- $method[] = Indent::_(1) . "}";
-
- // return the help method
- return implode(PHP_EOL, $method);
- }
-
- return '';
+ return CFactory::_('Architecture.ComHelperClass.CreateUser')->get($add);
}
public function setAdminViewMenu(&$nameSingleCode, &$view)
@@ -10251,7 +9935,7 @@ class Interpretation extends Fields
. "`id` INT(11) NOT NULL AUTO_INCREMENT,";
}
$db_ .= PHP_EOL . Indent::_(1)
- . "`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',";
+ . "`asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',";
ksort($fields);
$last_name = 'asset_id';
foreach ($fields as $field => $data)
@@ -10350,19 +10034,19 @@ class Interpretation extends Fields
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.published'))
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`published` TINYINT(3) NOT NULL DEFAULT 1,";
+ . "`published` TINYINT(3) NULL DEFAULT 1,";
}
// check if default field was overwritten
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.created_by'))
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`created_by` INT(10) unsigned NOT NULL DEFAULT 0,";
+ . "`created_by` INT(10) unsigned NULL DEFAULT 0,";
}
// check if default field was overwritten
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.modified_by'))
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,";
+ . "`modified_by` INT(10) unsigned NULL DEFAULT 0,";
}
// check if default field was overwritten
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.created'))
@@ -10370,7 +10054,7 @@ class Interpretation extends Fields
if (CFactory::_('Config')->get('joomla_version', 3) == 3)
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
+ . "`created` DATETIME NULL DEFAULT '0000-00-00 00:00:00',";
}
else
{
@@ -10384,7 +10068,7 @@ class Interpretation extends Fields
if (CFactory::_('Config')->get('joomla_version', 3) == 3)
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
+ . "`modified` DATETIME NULL DEFAULT '0000-00-00 00:00:00',";
}
else
{
@@ -10396,7 +10080,7 @@ class Interpretation extends Fields
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.checked_out'))
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`checked_out` int(11) unsigned NOT NULL DEFAULT 0,";
+ . "`checked_out` int(11) unsigned NULL DEFAULT 0,";
}
// check if default field was overwritten
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.checked_out_time'))
@@ -10404,7 +10088,7 @@ class Interpretation extends Fields
if (CFactory::_('Config')->get('joomla_version', 3) == 3)
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
+ . "`checked_out_time` DATETIME NULL DEFAULT '0000-00-00 00:00:00',";
}
else
{
@@ -10416,20 +10100,20 @@ class Interpretation extends Fields
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.version'))
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`version` INT(10) unsigned NOT NULL DEFAULT 1,";
+ . "`version` INT(10) unsigned NULL DEFAULT 1,";
}
// check if default field was overwritten
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.hits'))
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`hits` INT(10) unsigned NOT NULL DEFAULT 0,";
+ . "`hits` INT(10) unsigned NULL DEFAULT 0,";
}
// check if view has access
if (CFactory::_('Compiler.Builder.Access.Switch')->exists($view)
&& !CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.access'))
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`access` INT(10) unsigned NOT NULL DEFAULT 0,";
+ . "`access` INT(10) unsigned NULL DEFAULT 0,";
// add to component dynamic fields
CFactory::_('Compiler.Builder.Component.Fields')->set($view . '.access',
[
@@ -10443,7 +10127,7 @@ class Interpretation extends Fields
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL'
+ 'null_switch' => 'NULL'
]
]
);
@@ -10452,7 +10136,7 @@ class Interpretation extends Fields
if (!CFactory::_('Compiler.Builder.Field.Names')->isString($view . '.ordering'))
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`ordering` INT(11) NOT NULL DEFAULT 0,";
+ . "`ordering` INT(11) NULL DEFAULT 0,";
}
// check if metadata is added to this view
if (CFactory::_('Compiler.Builder.Meta.Data')->isString($view))
@@ -10463,7 +10147,7 @@ class Interpretation extends Fields
if (CFactory::_('Config')->get('joomla_version', 3) == 3)
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`metakey` TEXT NOT NULL,";
+ . "`metakey` TEXT NULL,";
}
else
{
@@ -10477,7 +10161,7 @@ class Interpretation extends Fields
if (CFactory::_('Config')->get('joomla_version', 3) == 3)
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`metadesc` TEXT NOT NULL,";
+ . "`metadesc` TEXT NULL,";
}
else
{
@@ -10491,7 +10175,7 @@ class Interpretation extends Fields
if (CFactory::_('Config')->get('joomla_version', 3) == 3)
{
$db_ .= PHP_EOL . Indent::_(1)
- . "`metadata` TEXT NOT NULL,";
+ . "`metadata` TEXT NULL,";
}
else
{
@@ -10663,22 +10347,25 @@ class Interpretation extends Fields
// add to main DB string
$db .= $db_ . PHP_EOL . PHP_EOL;
}
+
// add custom sql dump to the file
if (isset(CFactory::_('Customcode.Dispenser')->hub['sql'])
&& ArrayHelper::check(
CFactory::_('Customcode.Dispenser')->hub['sql']
))
{
- foreach (
- CFactory::_('Customcode.Dispenser')->hub['sql'] as $for => $customSql
- )
+ foreach (CFactory::_('Customcode.Dispenser')->hub['sql'] as $for => $customSql)
{
- $placeholders = array(Placefix::_('component') => $component,
- Placefix::_('view') => $for);
- $db .= CFactory::_('Placeholder')->update(
- $customSql, $placeholders
- ) . PHP_EOL . PHP_EOL;
+ $placeholders = [
+ Placefix::_('component') => $component,
+ Placefix::_('view') => $for
+ ]; // dont change this just use ###view### or componentbuilder (took you a while to get here right :)
+
+ $db .= CFactory::_('Placeholder')->update(
+ $customSql, $placeholders
+ ) . PHP_EOL . PHP_EOL;
}
+
unset(CFactory::_('Customcode.Dispenser')->hub['sql']);
}
@@ -13762,6 +13449,14 @@ class Interpretation extends Fields
$headerscript .= PHP_EOL . '}';
if ($addNewButon > 0)
{
+ if (CFactory::_('Config')->get('joomla_version', 3) == 3)
+ {
+ $add_key = 'edit';
+ }
+ else
+ {
+ $add_key = 'add';
+ }
// add the link for new
if ($addNewButon == 1 || $addNewButon == 2)
{
@@ -13770,7 +13465,7 @@ class Interpretation extends Fields
$headerscript .= PHP_EOL . '$new = "index.php?option=com_'
. CFactory::_('Config')->component_code_name . '&view=' . $name_list_code
. '&task='
- . $name_single_code . '.edit" . $ref;';
+ . $name_single_code . '.' . $add_key . '" . $ref;';
}
// and the link for close and new
if ($addNewButon == 2 || $addNewButon == 3)
@@ -13781,7 +13476,7 @@ class Interpretation extends Fields
. '$close_new = "index.php?option=com_'
. CFactory::_('Config')->component_code_name . '&view=' . $name_list_code
. '&task='
- . $name_single_code . '.edit";';
+ . $name_single_code . '.' . $add_key . '";';
}
$headerscript .= PHP_EOL . '//' . Line::_(__Line__, __Class__)
. ' load the action object';
@@ -21553,7 +21248,8 @@ class Interpretation extends Fields
$counter++;
}
// dashboard link to category on dashboard is build here
- if (CFactory::_('Compiler.Builder.Category')->exists("{$name_list}.code"))
+ if (CFactory::_('Compiler.Builder.Category')->exists("{$name_list}.code") &&
+ CFactory::_('Compiler.Builder.Category')->get("{$name_list}.add_icon"))
{
$catCode = CFactory::_('Compiler.Builder.Category')->get("{$name_list}.code");
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/ComHelperClass/CreateUserInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/ComHelperClass/CreateUserInterface.php
new file mode 100644
index 000000000..26171efa2
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/ComHelperClass/CreateUserInterface.php
@@ -0,0 +1,36 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\ComHelperClass;
+
+
+/**
+ * Component Helper Class Create User Interface
+ *
+ * @since 5.0.2
+ */
+interface CreateUserInterface
+{
+ /**
+ * Generates the method definition for creating or updating a user based on the provided parameters.
+ *
+ * This method returns a string representation of a PHP function that includes various
+ * steps for handling user creation and updates, depending on the mode (site registration or admin registration).
+ *
+ * @param $add Determines whether to generate the user creation method or not.
+ * If true, the method will be generated and returned as a string.
+ *
+ * @return string The generated method code as a string if $add is true.
+ * Returns an empty string if $add is false.
+ */
+ public function get($add): string;
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/ComHelperClass/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/ComHelperClass/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/ComHelperClass/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sql.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sql.php
index ac2df63ec..ff794ed1a 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sql.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sql.php
@@ -12,7 +12,6 @@
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
-use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
use VDM\Joomla\Componentbuilder\Compiler\Model\Sqldump;
@@ -43,15 +42,15 @@ class Sql
/**
* Constructor
*
- * @param Dispenser|null $dispenser The compiler customcode dispenser.
- * @param Sqldump|null $dump The compiler SQL dump.
+ * @param Dispenser $dispenser The compiler customcode dispenser.
+ * @param Sqldump $dump The compiler SQL dump.
*
* @since 3.2.0
*/
- public function __construct(?Dispenser $dispenser = null, ?Sqldump $dump = null)
+ public function __construct(Dispenser $dispenser, Sqldump $dump)
{
- $this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
- $this->dump = $dump ?: Compiler::_('Model.Sqldump');
+ $this->dispenser = $dispenser;
+ $this->dump = $dump;
}
/**
@@ -91,7 +90,6 @@ class Sql
unset($item->tables);
unset($item->sql);
- }
-
+ }
}
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sqldump.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sqldump.php
index bc76ac23e..3cf0ef61d 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sqldump.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sqldump.php
@@ -13,7 +13,6 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Model;
use Joomla\CMS\Factory;
-use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
use VDM\Joomla\Componentbuilder\Compiler\Registry;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix;
@@ -45,14 +44,13 @@ class Sqldump
/**
* Constructor
*
- * @param Registry|null $registry The compiler registry object.
- * @param \JDatabaseDriver|null $db The database object.
+ * @param Registry $registry The compiler registry object.
* @since 3.2.0
*/
- public function __construct(?Registry $registry = null)
+ public function __construct(Registry $registry)
{
- $this->registry = $registry ?: Compiler::_('Registry');
+ $this->registry = $registry;
$this->db = Factory::getDbo();
}
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sqltweaking.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sqltweaking.php
index 960f6076d..dfba9c97f 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sqltweaking.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Sqltweaking.php
@@ -12,7 +12,6 @@
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
-use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
use VDM\Joomla\Componentbuilder\Compiler\Registry;
use VDM\Joomla\Utilities\JsonHelper;
use VDM\Joomla\Utilities\ArrayHelper;
@@ -37,13 +36,13 @@ class Sqltweaking
/**
* Constructor
*
- * @param Registry|null $registry The compiler registry object.
+ * @param Registry $registry The compiler registry object.
*
* @since 3.2.0
*/
- public function __construct(?Registry $registry = null)
+ public function __construct(Registry $registry)
{
- $this->registry = $registry ?: Compiler::_('Registry');
+ $this->registry = $registry;
}
/**
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Updatesql.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Updatesql.php
index c2242e14d..0bc915148 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Updatesql.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Updatesql.php
@@ -12,7 +12,6 @@
namespace VDM\Joomla\Componentbuilder\Compiler\Model;
-use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
use VDM\Joomla\Componentbuilder\Compiler\Registry;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\StringHelper;
@@ -45,13 +44,13 @@ class Updatesql
/**
* Constructor
*
- * @param Registry|null $registry The compiler registry object.
+ * @param Registry $registry The compiler registry object.
*
* @since 3.2.0
*/
- public function __construct(?Registry $registry = null)
+ public function __construct(Registry $registry)
{
- $this->registry = $registry ?: Compiler::_('Registry');
+ $this->registry = $registry;
}
/**
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureComHelperClass.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureComHelperClass.php
new file mode 100644
index 000000000..d11b7be55
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureComHelperClass.php
@@ -0,0 +1,118 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Compiler\Service;
+
+
+use Joomla\DI\Container;
+use Joomla\DI\ServiceProviderInterface;
+use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\ComHelperClass\CreateUserInterface;
+use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\ComHelperClass\CreateUser as J5CreateUser;
+use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\ComHelperClass\CreateUser as J4CreateUser;
+use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\ComHelperClass\CreateUser as J3CreateUser;
+
+
+/**
+ * Architecture Component Helper Class Service Provider
+ *
+ * @since 5.0.2
+ */
+class ArchitectureComHelperClass implements ServiceProviderInterface
+{
+ /**
+ * Current Joomla Version Being Build
+ *
+ * @var int
+ * @since 5.0.2
+ **/
+ protected $targetVersion;
+
+ /**
+ * Registers the service provider with a DI container.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return void
+ * @since 5.0.2
+ */
+ public function register(Container $container)
+ {
+ $container->alias(CreateUserInterface::class, 'Architecture.ComHelperClass.CreateUser')
+ ->share('Architecture.ComHelperClass.CreateUser', [$this, 'getCreateUser'], true);
+
+ $container->alias(J5CreateUser::class, 'Architecture.ComHelperClass.J5.CreateUser')
+ ->share('Architecture.ComHelperClass.J5.CreateUser', [$this, 'getJ5CreateUser'], true);
+
+ $container->alias(J4CreateUser::class, 'Architecture.ComHelperClass.J4.CreateUser')
+ ->share('Architecture.ComHelperClass.J4.CreateUser', [$this, 'getJ4CreateUser'], true);
+
+ $container->alias(J3CreateUser::class, 'Architecture.ComHelperClass.J3.CreateUser')
+ ->share('Architecture.ComHelperClass.J3.CreateUser', [$this, 'getJ3CreateUser'], true);
+ }
+
+ /**
+ * Get The CreateUserInterface Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return CreateUserInterface
+ * @since 5.0.2
+ */
+ public function getCreateUser(Container $container): CreateUserInterface
+ {
+ if (empty($this->targetVersion))
+ {
+ $this->targetVersion = $container->get('Config')->joomla_version;
+ }
+
+ return $container->get('Architecture.ComHelperClass.J' . $this->targetVersion . '.CreateUser');
+ }
+
+ /**
+ * Get The CreateUser Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return J5CreateUser
+ * @since 5.0.2
+ */
+ public function getJ5CreateUser(Container $container): J5CreateUser
+ {
+ return new J5CreateUser();
+ }
+
+ /**
+ * Get The CreateUser Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return J4CreateUser
+ * @since 5.0.2
+ */
+ public function getJ4CreateUser(Container $container): J4CreateUser
+ {
+ return new J4CreateUser();
+ }
+
+ /**
+ * Get The CreateUser Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return J3CreateUser
+ * @since 5.0.2
+ */
+ public function getJ3CreateUser(Container $container): J3CreateUser
+ {
+ return new J3CreateUser();
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Display.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Display.php
new file mode 100644
index 000000000..287e5a82a
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Display.php
@@ -0,0 +1,220 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\File;
+
+
+use Joomla\CMS\Uri\Uri;
+use Joomla\CMS\Router\Route;
+use VDM\Joomla\Interfaces\Data\ItemInterface as Item;
+use VDM\Joomla\Interfaces\Data\ItemsInterface as Items;
+
+
+/**
+ * File Display Class
+ *
+ * @since 5.0.2
+ */
+final class Display
+{
+ /**
+ * The Item Class.
+ *
+ * @var Item
+ * @since 5.0.2
+ */
+ protected Item $item;
+
+ /**
+ * The Items Class.
+ *
+ * @var Items
+ * @since 5.0.2
+ */
+ protected Items $items;
+
+ /**
+ * The file site url
+ *
+ * @var string
+ * @since 5.0.2
+ */
+ protected string $url;
+
+ /**
+ * The file types
+ *
+ * @var array
+ * @since 5.0.2
+ */
+ protected array $fileTypes;
+
+ /**
+ * The File Type Task
+ *
+ * @var array
+ * @since 5.0.2
+ */
+ protected array $fileTypeTasks = [1 => 'image' , 2 => 'file' , 3 => 'media', 4 => 'file'];
+
+ /**
+ * Constructor.
+ *
+ * @param Item $item The Item Class.
+ * @param Items $items The Items Class.
+ *
+ * @since 5.0.2
+ */
+ public function __construct(Item $item, Items $items, )
+ {
+ $this->item = $item;
+ $this->items = $items;
+ $this->url = rtrim(Uri::root(), '/');
+ }
+
+ /**
+ * Get the file data that belong to this entity
+ *
+ * @param string $entity The entity guid
+ * @param string $target The target entity name
+ *
+ * @return array|null
+ * @since 5.0.2
+ */
+ public function get(string $entity, string $target): ?array
+ {
+ if (($files = $this->items->table('file')->get([$entity], 'entity')) !== null)
+ {
+ foreach ($files as $n => $file)
+ {
+ if ($file->entity_type !== $target)
+ {
+ unset($files[$n]);
+ continue;
+ }
+ $this->setFileTypeTask($file);
+ $this->setFileTypeName($file);
+ $this->setFileDownloadLink($file);
+ }
+
+ // If the $files array is empty, return null
+ return !empty($files) ? $files : null;
+ }
+
+ return null;
+ }
+
+ /**
+ * Add the file type name to this file
+ *
+ * @param object $file The file being updated
+ *
+ * @return void
+ * @since 5.0.2
+ */
+ protected function setFileTypeName(object &$file): void
+ {
+ if (($fileType = $this->getFileType($file->file_type ?? null)) !== null)
+ {
+ $file->type_name = $fileType->name;
+ }
+ else
+ {
+ $file->type_name = 'error';
+ }
+ }
+
+ /**
+ * Add the file type task to this file
+ *
+ * @param object $file The file being updated
+ *
+ * @return void
+ * @since 5.0.2
+ */
+ protected function setFileTypeTask(object &$file): void
+ {
+ if (($fileType = $this->getFileType($file->file_type ?? null)) !== null)
+ {
+ $file->task = $this->getFileTypeTask($fileType);
+ }
+ }
+
+ /**
+ * Add the file download link
+ *
+ * @param object $file The file being updated
+ *
+ * @return void
+ * @since 5.0.2
+ */
+ protected function setFileDownloadLink(object &$file): void
+ {
+ if (isset($file->task))
+ {
+ // Build the query parameters
+ $queryParams = [
+ 'option' => 'com_componentbuilder',
+ 'controller' => 'download',
+ 'task' => 'download.' . $file->task,
+ 'file' => $file->guid,
+ 'name' => $file->name
+ ];
+
+ // Build the full URL
+ $file->link = $this->url . Route::_('index.php?' . http_build_query($queryParams));
+ }
+ }
+
+ /**
+ * Retrieves the file type task name
+ *
+ * @param object $data The type data array
+ *
+ * @return string The field name
+ * @since 5.0.2
+ */
+ protected function getFileTypeTask(object $data): string
+ {
+ $type = $data->type ?? 4;
+ if (isset($this->fileTypeTasks[$type]))
+ {
+ return $this->fileTypeTasks[$type];
+ }
+ return 'file';
+ }
+
+ /**
+ * Retrieves the file type details
+ *
+ * @param string|null $guid The GUID (Globally Unique Identifier) used as the key to retrieve the file type.
+ *
+ * @return object|null The item object if found, or null if the item does not exist.
+ * @since 5.0.2
+ */
+ protected function getFileType(?string $guid): ?object
+ {
+ if ($guid === null)
+ {
+ return null;
+ }
+
+ if (isset($this->fileTypes[$guid]))
+ {
+ return $this->fileTypes[$guid];
+ }
+
+ $this->fileTypes[$guid] = $this->item->table('file_type')->get($guid);
+
+ return $this->fileTypes[$guid];
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Factory.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Factory.php
new file mode 100644
index 000000000..85e7b436c
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Factory.php
@@ -0,0 +1,48 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\File;
+
+
+use Joomla\DI\Container;
+use VDM\Joomla\Service\Table;
+use VDM\Joomla\Service\Database;
+use VDM\Joomla\Service\Model;
+use VDM\Joomla\Service\Data;
+use VDM\Joomla\Componentbuilder\File\Service\File;
+use VDM\Joomla\Interfaces\FactoryInterface;
+use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
+
+
+/**
+ * File Factory
+ *
+ * @since 5.0.2
+ */
+abstract class Factory extends ExtendingFactory implements FactoryInterface
+{
+ /**
+ * Create a container object
+ *
+ * @return Container
+ * @since 3.2.2
+ */
+ protected static function createContainer(): Container
+ {
+ return (new Container())
+ ->registerServiceProvider(new Table())
+ ->registerServiceProvider(new Database())
+ ->registerServiceProvider(new Model())
+ ->registerServiceProvider(new Data())
+ ->registerServiceProvider(new File());
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Handler.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Handler.php
new file mode 100644
index 000000000..c319fffe7
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Handler.php
@@ -0,0 +1,129 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\File;
+
+
+use VDM\Joomla\Utilities\UploadHelper;
+
+
+/**
+ * File Handler Class
+ *
+ * @since 5.0.2
+ */
+final class Handler extends UploadHelper
+{
+ /**
+ * Set the $useStreams property to use streams for file handling
+ *
+ * @param bool $useStreams True to use streams, false otherwise.
+ *
+ * @return self Returns the current instance to allow for method chaining.
+ * @since 5.0.3
+ */
+ public function setUseStreams(bool $useStreams): self
+ {
+ static::$useStreams = $useStreams;
+
+ return $this;
+ }
+
+ /**
+ * Set the $allowUnsafe property to allow or disallow unsafe file uploads.
+ *
+ * @param bool $allowUnsafe True to allow unsafe file uploads, false otherwise.
+ *
+ * @return self Returns the current instance to allow for method chaining.
+ * @since 5.0.3
+ */
+ public function setAllowUnsafe(bool $allowUnsafe): self
+ {
+ static::$allowUnsafe = $allowUnsafe;
+
+ return $this;
+ }
+
+ /**
+ * Set the $safeFileOptions property to define options for file safety checks.
+ *
+ * @param array $safeFileOptions An array of options for InputFilter::isSafeFile.
+ *
+ * @return self Returns the current instance to allow for method chaining.
+ * @since 5.0.3
+ */
+ public function setSafeFileOptions(array $safeFileOptions): self
+ {
+ static::$safeFileOptions = $safeFileOptions;
+
+ return $this;
+ }
+
+ /**
+ * Set the $enqueueError property to control error reporting behavior.
+ *
+ * @param bool $enqueueError True to enqueue error messages, false to store them in the internal error array.
+ *
+ * @return self Returns the current instance to allow for method chaining.
+ * @since 5.0.3
+ */
+ public function setEnqueueError(bool $enqueueError): self
+ {
+ static::$enqueueError = $enqueueError;
+
+ return $this;
+ }
+
+ /**
+ * Set the $legalFormats property to define legal file formats.
+ *
+ * @param array $legalFormats An array of allowed file formats (e.g., ['jpg', 'png']).
+ *
+ * @return self Returns the current instance to allow for method chaining.
+ * @since 5.0.3
+ */
+ public function setLegalFormats(array $legalFormats): self
+ {
+ static::$legalFormats = $legalFormats;
+
+ return $this;
+ }
+
+ /**
+ * Get a file from the input based on field name and file type, then process it.
+ *
+ * @param string $field The input field name for the file upload.
+ * @param string $type The type of file (e.g., 'image', 'document').
+ * @param string|null $filter The filter to apply when uploading the file.
+ * @param string|null $path The directory path where the file should be saved.
+ *
+ * @return array|null File details or false on failure.
+ * @since 3.0.11
+ */
+ public function getFile(string $field, string $type, string $filter = null, string $path = null): ?array
+ {
+ return static::get($field, $type, $filter, $path);
+ }
+
+ /**
+ * Get the error messages as a string.
+ *
+ * @param bool $toString The option to return errors as a string
+ *
+ * @return string|array Returns the error messages as a single concatenated string.
+ * @since 5.0.3
+ */
+ public function getErrors(bool $toString = true): string|array
+ {
+ return static::getError($toString);
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Manager.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Manager.php
new file mode 100644
index 000000000..b2db78851
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Manager.php
@@ -0,0 +1,256 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\File;
+
+
+use Joomla\CMS\Factory;
+use Joomla\CMS\User\User;
+use Joomla\CMS\Language\Text;
+use Joomla\Filesystem\File;
+use VDM\Joomla\Interfaces\Data\ItemInterface as Item;
+use VDM\Joomla\Interfaces\Data\ItemsInterface as Items;
+use VDM\Joomla\Data\Guid;
+use VDM\Joomla\Componentbuilder\File\Type;
+use VDM\Joomla\Componentbuilder\File\Handler;
+use VDM\Joomla\Utilities\MimeHelper;
+
+
+/**
+ * File Manager Class
+ *
+ * @since 5.0.2
+ */
+final class Manager
+{
+ /**
+ * The Globally Unique Identifier.
+ *
+ * @since 5.0.2
+ */
+ use Guid;
+
+ /**
+ * The Item Class.
+ *
+ * @var Item
+ * @since 5.0.2
+ */
+ protected Item $item;
+
+ /**
+ * The Items Class.
+ *
+ * @var Items
+ * @since 5.0.2
+ */
+ protected Items $items;
+
+ /**
+ * The Type Class.
+ *
+ * @var Type
+ * @since 5.0.2
+ */
+ protected Type $type;
+
+ /**
+ * The Handler Class.
+ *
+ * @var Handler
+ * @since 5.0.2
+ */
+ protected Handler $handler;
+
+ /**
+ * The active user
+ *
+ * @var User
+ * @since 5.0.2
+ */
+ protected User $user;
+
+ /**
+ * Table Name
+ *
+ * @var string
+ * @since 5.0.2
+ */
+ protected string $table = 'file';
+
+ /**
+ * Constructor.
+ *
+ * @param Item $item The Item Class.
+ * @param Items $items The Items Class.
+ * @param Type $type The Type Class.
+ * @param Handler $handler The Handler Class.
+ *
+ * @since 5.0.2
+ */
+ public function __construct(Item $item, Items $items, Type $type, Handler $handler)
+ {
+ $this->item = $item;
+ $this->items = $items;
+ $this->type = $type;
+ $this->handler = $handler;
+ $this->user = Factory::getApplication()->getIdentity();
+ }
+
+ /**
+ * Upload a file, of a given file type and link it to an entity.
+ *
+ * @param string $guid The file type guid
+ * @param string $entity The entity guid
+ * @param string $target The target entity name
+ *
+ * @return void
+ * @throws \InvalidArgumentException If the file type is not valid.
+ * @throws \RuntimeException If there is an error during file upload.
+ * @since 5.0.2
+ */
+ public function upload(string $guid, string $entity, string $target): void
+ {
+ if (($fileType = $this->type->load($guid, $target)) === null)
+ {
+ throw new \InvalidArgumentException(Text::sprintf('COM_COMPONENTBUILDER_FILE_TYPE_NOT_VALID_IN_S_AREA', $target));
+ }
+
+ // make sure the user have permissions to upload this file type
+ if (!in_array($fileType['access'], $this->user->getAuthorisedViewLevels()))
+ {
+ throw new \InvalidArgumentException(Text::sprintf('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSIONS_TO_UPLOAD_S', $fileType['name']));
+ }
+
+ $details = $this->handler
+ ->setEnqueueError(false)
+ ->setLegalFormats($fileType['formats'])
+ ->getFile(
+ $fileType['field'], // The input field name
+ $fileType['type'], // The file type
+ $fileType['filter'], // The filter to use when uploading the file
+ $fileType['path'] // The path to the directory where the file must be placed
+ );
+
+ if ($details === null)
+ {
+ // Throw an exception if file details couldn't be retrieved
+ throw new \RuntimeException($this->handler->getErrors());
+ }
+
+ // we might need to crop images
+ if ($fileType['type'] === 'image')
+ {
+ // $this->cropImage($details, $guid);
+ }
+
+ // store file in the file table
+ $this->item->table($this->getTable())->set(
+ $this->modelFileDetails($details, $guid, $entity, $target, $fileType)
+ );
+ }
+
+ /**
+ * Get the file details for download
+ *
+ * @param string $guid The file guid
+ *
+ * @return array|null
+ * @since 5.0.2
+ */
+ public function download(string $guid): ?array
+ {
+ if (($file = $this->item->table($this->getTable())->get($guid)) !== null &&
+ in_array($file->access, $this->user->getAuthorisedViewLevels()))
+ {
+ return (array) $file;
+ }
+
+ return null;
+ }
+
+ /**
+ * Delete a file.
+ *
+ * @param string $guid The file guid
+ *
+ * @return void
+ * @since 5.0.2
+ */
+ public function delete(string $guid): void
+ {
+ if (($file = $this->item->table($this->getTable())->get($guid)) !== null &&
+ in_array($file->access, $this->user->getAuthorisedViewLevels()))
+ {
+ $this->item->table($this->getTable())->delete($guid); // from DB
+
+ if (is_file($file->file_path) && is_writable($file->file_path))
+ {
+ File::delete($file->file_path); // from file system
+ }
+ }
+ }
+
+ /**
+ * Set the current active table
+ *
+ * @param string $table The table that should be active
+ *
+ * @return self
+ * @since 5.0.2
+ */
+ public function table(string $table): self
+ {
+ $this->table = $table;
+
+ return $this;
+ }
+
+ /**
+ * Get the current active table
+ *
+ * @return string
+ * @since 5.0.2
+ */
+ public function getTable(): string
+ {
+ return $this->table;
+ }
+
+ /**
+ * model the file details to store in the file table
+ *
+ * @param array $details The uploaded file details.
+ * @param string $guid The file type guid
+ * @param string $entity The entity guid
+ * @param string $target The target entity name
+ * @param array $fileType The file type
+ *
+ * @return object
+ * @since 5.0.2
+ */
+ protected function modelFileDetails(array $details, string $guid, string $entity, string $target, array $fileType): object
+ {
+ return (object) [
+ 'name' => $details['name'],
+ 'file_type' => $guid,
+ 'extension' => $details['extension'] ?? 'error',
+ 'size' => $details['size'] ?? 0,
+ 'mime' => $details['mime'] ?? '',
+ 'file_path' => $details['full_path'],
+ 'entity_type' => $target,
+ 'entity' => $entity,
+ 'access' => $fileType['download_access'] ?? 1,
+ 'guid' => $this->getGuid('guid'),
+ ];
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Service/File.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Service/File.php
new file mode 100644
index 000000000..0226ea8b8
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Service/File.php
@@ -0,0 +1,115 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\File\Service;
+
+
+use Joomla\DI\Container;
+use Joomla\DI\ServiceProviderInterface;
+use VDM\Joomla\Componentbuilder\File\Type;
+use VDM\Joomla\Componentbuilder\File\Handler;
+use VDM\Joomla\Componentbuilder\File\Manager;
+use VDM\Joomla\Componentbuilder\File\Display;
+
+
+/**
+ * File Service Provider
+ *
+ * @since 5.0.3
+ */
+class File implements ServiceProviderInterface
+{
+ /**
+ * Registers the service provider with a DI container.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return void
+ * @since 5.0.3
+ */
+ public function register(Container $container)
+ {
+ $container->alias(Type::class, 'File.Type')
+ ->share('File.Type', [$this, 'getType'], true);
+
+ $container->alias(Handler::class, 'File.Handler')
+ ->share('File.Handler', [$this, 'getHandler'], true);
+
+ $container->alias(Manager::class, 'File.Manager')
+ ->share('File.Manager', [$this, 'getManager'], true);
+
+ $container->alias(Display::class, 'File.Display')
+ ->share('File.Display', [$this, 'getDisplay'], true);
+ }
+
+ /**
+ * Get The Type Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Type
+ * @since 5.0.3
+ */
+ public function getType(Container $container): Type
+ {
+ return new Type(
+ $container->get('Data.Item')
+ );
+ }
+
+ /**
+ * Get The Handler Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Handler
+ * @since 5.0.3
+ */
+ public function getHandler(Container $container): Handler
+ {
+ return new Handler();
+ }
+
+ /**
+ * Get The Manager Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Manager
+ * @since 5.0.3
+ */
+ public function getManager(Container $container): Manager
+ {
+ return new Manager(
+ $container->get('Data.Item'),
+ $container->get('Data.Items'),
+ $container->get('File.Type'),
+ $container->get('File.Handler')
+ );
+ }
+
+ /**
+ * Get The Display Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Display
+ * @since 5.0.3
+ */
+ public function getDisplay(Container $container): Display
+ {
+ return new Display(
+ $container->get('Data.Item'),
+ $container->get('Data.Items')
+ );
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Service/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Service/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Service/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Type.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Type.php
new file mode 100644
index 000000000..f971fe313
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/Type.php
@@ -0,0 +1,301 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\File;
+
+
+use Joomla\Filesystem\Path;
+use VDM\Joomla\Interfaces\Data\ItemInterface as Item;
+
+
+/**
+ * File Type Class
+ *
+ * @since 5.0.2
+ */
+final class Type
+{
+ /**
+ * The Item Class.
+ *
+ * @var Item
+ * @since 5.0.2
+ */
+ protected Item $item;
+
+ /**
+ * The File Types
+ *
+ * @var array
+ * @since 5.0.2
+ */
+ protected array $fileTypes = [1 => 'image' , 2 => 'document' , 3 => 'media', 4 => 'file'];
+
+ /**
+ * Constructor.
+ *
+ * @param Item $item The Item Class.
+ *
+ * @since 5.0.2
+ */
+ public function __construct(Item $item)
+ {
+ $this->item = $item;
+ }
+
+ /**
+ * Retrieves the file type details (ajax)
+ *
+ * @param string $guid The GUID (Globally Unique Identifier) used as the key to retrieve the file type
+ * @param string $target The entity target name.
+ *
+ * @return array|null The item object if found, or null if the item does not exist.
+ * @since 5.0.2
+ */
+ public function get(string $guid, string $target): ?array
+ {
+ if (($fileType = $this->details($guid)) !== null &&
+ $this->validTarget($fileType, $target))
+ {
+ return [
+ 'name' => $this->getFieldName($fileType),
+ 'allow' => $this->getAllow($fileType),
+ 'allow_span' => $this->getAllowSpan($fileType),
+ 'file_type_span' => $fileType->name ?? 'file',
+ 'display_fields' => $fileType->display_fields ?? null,
+ 'param_fields' => $fileType->param_fields ?? null,
+ ];
+ }
+
+ return null;
+ }
+
+ /**
+ * Retrieves the file type details (upload)
+ *
+ * @param string $guid The GUID (Globally Unique Identifier) used as the key to retrieve the file type
+ * @param string $target The entity target name.
+ *
+ * @return array|null The item object if found, or null if the item does not exist.
+ * @since 5.0.2
+ */
+ public function load(string $guid, string $target): ?array
+ {
+ if (($fileType = $this->details($guid)) !== null &&
+ $this->validTarget($fileType, $target))
+ {
+ return [
+ 'name' => $fileType->name ?? 'files',
+ 'access' => $fileType->access ?? 1,
+ 'download_access' => $fileType->download_access ?? 1,
+ 'field' => $this->getFieldName($fileType),
+ 'type' => $this->getFieldName($fileType),
+ 'formats' => $this->getAllowFormats($fileType) ?? [],
+ 'filter' => $fileType->filter ?? null,
+ 'path' => $this->getFileTypePath($fileType)
+ ];
+ }
+
+ return null;
+ }
+
+ /**
+ * Retrieves the file type details
+ *
+ * @param string $guid The GUID (Globally Unique Identifier) used as the key to retrieve the file type.
+ *
+ * @return object|null The item object if found, or null if the item does not exist.
+ * @since 5.0.2
+ */
+ public function details(string $guid): ?object
+ {
+ return $this->item->table('file_type')->get($guid);
+ }
+
+ /**
+ * Valid if this is a correct target trying to call this file type
+ *
+ * @param object $data The type data array
+ * @param string $target The entity target name.
+ *
+ * @return bool True if valid target
+ * @since 5.0.2
+ */
+ protected function validTarget(object $data, string $target): bool
+ {
+ $targets = $data->target ?? null;
+ if (!empty($targets))
+ {
+ $targets = (array) $targets;
+ return in_array($target, $targets);
+ }
+
+ return false;
+ }
+
+ /**
+ * Retrieves the field name
+ *
+ * @param object $data The type data array
+ *
+ * @return string The field name
+ * @since 5.0.2
+ */
+ protected function getFieldName(object $data): string
+ {
+ $type = $data->type ?? 4;
+ if (isset($this->fileTypes[$type]))
+ {
+ return $this->fileTypes[$type];
+ }
+ return 'file';
+ }
+
+ /**
+ * Retrieves the allow formats (for script)
+ *
+ * @param object $data The type data array
+ *
+ * @return string The allow values
+ * @since 5.0.2
+ */
+ protected function getAllow(object $data): string
+ {
+ $formats = $this->getAllowFormats($data);
+ if (!empty($formats))
+ {
+ return '*.(' . implode('|', $formats) . ')';
+ }
+ return '';
+ }
+
+ /**
+ * Retrieves the allow formats (for span)
+ *
+ * @param object $data The type data array
+ *
+ * @return string The allow values
+ * @since 5.0.2
+ */
+ protected function getAllowSpan(object $data): string
+ {
+ $formats = $this->getAllowFormats($data);
+ if (!empty($formats))
+ {
+ return '(formats allowed: ' . implode(', ', $formats) . ' )';
+ }
+ return '';
+ }
+
+ /**
+ * Retrieves the allow formats
+ *
+ * @param object|null $data The type data array
+ *
+ * @return array|null The allow values
+ * @since 5.0.2
+ */
+ protected function getAllowFormats(object $data): ?array
+ {
+ $type = $data->type ?? 4;
+ switch ($type)
+ {
+ case 1:
+ $formats = $data->image_formats ?? null;
+ break;
+ case 2:
+ $formats = $data->document_formats ?? null;
+ break;
+ case 3:
+ $formats = $data->media_formats ?? null;
+ break;
+ default:
+ $formats = $data->file_formats ?? null;
+ break;
+ }
+
+ if ($formats)
+ {
+ return (array) $formats;
+ }
+
+ return null;
+ }
+
+ /**
+ * Retrieves the file type path based on provided data.
+ *
+ * Performs safety checks and returns either a cleaned path if it exists
+ * and is a writable directory, or constructs a relative path to the 'images' folder
+ * based on the last folder name from the given path.
+ *
+ * @param object $data The type data object containing path information.
+ *
+ * @return string|null Returns the cleaned file path or null if no valid path is found.
+ * @since 5.0.2
+ */
+ protected function getFileTypePath(object $data): ?string
+ {
+ // Validate the provided path data
+ $path = isset($data->path) && is_string($data->path) && trim($data->path) !== '' ?
+ Path::clean(trim($data->path)) : null;
+
+ // Return the path if it's a valid directory and writable
+ if ($path !== null && is_dir($path) && is_writable($path))
+ {
+ return $path;
+ }
+
+ // If no valid path is found, try to derive a relative path from the 'images' folder
+ if ($path !== null && ($folder = $this->getLastFolderName($path)) !== null)
+ {
+ return JPATH_SITE . '/images/' . $folder;
+ }
+
+ return null;
+ }
+
+ /**
+ * Recursively retrieves the last folder name from a given path, ignoring any file names.
+ * If the last part of the path contains a dot (indicating a file), it moves up the directory tree
+ * until it finds a valid folder name. Returns null if no valid folder is found.
+ *
+ * @param string $path The file system path from which to extract the last folder name.
+ *
+ * @return string|null Returns the last folder name if found, or null if no valid folder exists.
+ * @since 5.0.2
+ */
+ protected function getLastFolderName(string $path): ?string
+ {
+ // Remove any trailing slashes to avoid an empty result
+ $path = rtrim($path, '/\\');
+
+ // If the path becomes empty, return null (base case)
+ if (empty($path))
+ {
+ return null;
+ }
+
+ // Get the last part of the path
+ $lastPart = basename($path);
+
+ // If the last part contains a dot (and it's not a hidden folder), move up the directory tree
+ if (strpos($lastPart, '.') > 0)
+ {
+ // If it contains a dot, treat it as a file and move up one level
+ return $this->getLastFolderName(dirname($path));
+ }
+
+ // Return the last folder name (if it's valid and not a file)
+ return $lastPart;
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/File/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php
index 2f23b7700..059f2ebda 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php
@@ -217,7 +217,7 @@ final class Table extends BaseTable implements Tableinterface
'tab_name' => 'Details',
'db' => [
'type' => 'TINYINT(1)',
- 'default' => '0',
+ 'default' => '1',
'null_switch' => 'NOT NULL',
'unique_key' => false,
'key' => true,
@@ -1546,7 +1546,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
'metakey' => [
@@ -2267,7 +2267,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -2907,7 +2907,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -2987,7 +2987,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -3403,7 +3403,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -4891,7 +4891,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -5483,7 +5483,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -6075,7 +6075,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -6235,7 +6235,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -6395,7 +6395,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -6955,7 +6955,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -7019,7 +7019,7 @@ final class Table extends BaseTable implements Tableinterface
'db' => [
'type' => 'TINYINT(1)',
'default' => '0',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'unique_key' => false,
'key' => true,
],
@@ -7179,7 +7179,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -7307,7 +7307,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -7451,7 +7451,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -7499,7 +7499,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -7659,7 +7659,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -7883,7 +7883,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -7963,7 +7963,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -8379,7 +8379,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -8635,7 +8635,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -8731,7 +8731,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -8779,7 +8779,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -8987,7 +8987,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9115,7 +9115,7 @@ final class Table extends BaseTable implements Tableinterface
'db' => [
'type' => 'TEXT',
'default' => 'EMPTY',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'unique_key' => false,
'key' => false,
],
@@ -9131,7 +9131,7 @@ final class Table extends BaseTable implements Tableinterface
'db' => [
'type' => 'TINYINT(1)',
'default' => '0',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'unique_key' => false,
'key' => true,
],
@@ -9211,7 +9211,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9437,7 +9437,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9485,7 +9485,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9533,7 +9533,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9581,7 +9581,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9629,7 +9629,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9677,7 +9677,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9725,7 +9725,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9773,7 +9773,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9821,7 +9821,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -9869,7 +9869,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10013,7 +10013,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10061,7 +10061,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10125,7 +10125,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10221,7 +10221,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10253,7 +10253,7 @@ final class Table extends BaseTable implements Tableinterface
'db' => [
'type' => 'TEXT',
'default' => 'EMPTY',
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
'unique_key' => false,
'key' => false,
],
@@ -10269,7 +10269,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10317,7 +10317,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10365,7 +10365,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10413,7 +10413,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10461,7 +10461,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10573,7 +10573,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10653,7 +10653,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10701,7 +10701,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10813,7 +10813,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10861,7 +10861,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -10909,7 +10909,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
@@ -11021,7 +11021,7 @@ final class Table extends BaseTable implements Tableinterface
'type' => 'INT(10) unsigned',
'default' => '0',
'key' => true,
- 'null_switch' => 'NOT NULL',
+ 'null_switch' => 'NULL',
],
],
],
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/Exception/NoUserIdFoundException.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/Exception/NoUserIdFoundException.php
new file mode 100644
index 000000000..773c39a44
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/Exception/NoUserIdFoundException.php
@@ -0,0 +1,23 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Utilities\Exception;
+
+
+/**
+ * No User Id Found Exception
+ *
+ * @since 5.0.2
+ */
+class NoUserIdFoundException extends \InvalidArgumentException
+{
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/Exception/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/Exception/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/Exception/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/UserHelper.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/UserHelper.php
new file mode 100644
index 000000000..e57858fba
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/UserHelper.php
@@ -0,0 +1,481 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Utilities;
+
+
+use Joomla\CMS\Factory;
+use Joomla\CMS\Form\Form;
+use Joomla\CMS\Language\Text;
+use Joomla\CMS\User\User;
+use Joomla\CMS\User\UserHelper as JoomlaUserHelper;
+use Joomla\CMS\MVC\Model\BaseDatabaseModel;
+use VDM\Joomla\Utilities\Component\Helper as Component;
+use VDM\Joomla\Utilities\ArrayHelper;
+use VDM\Joomla\Utilities\StringHelper;
+use VDM\Joomla\Componentbuilder\Utilities\Exception\NoUserIdFoundException;
+use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper;
+
+
+/**
+ * Create & Update User [Save]
+ *
+ * @since 5.0.2
+ */
+abstract class UserHelper
+{
+ /**
+ * Save user details by either creating a new user or updating an existing user.
+ *
+ * @param array $credentials User credentials including 'name', 'username', 'email', 'password', and 'password2'.
+ * @param int $autologin Flag to determine whether to auto-login the user after registration.
+ * @param array $params Parameters for user activation, password sending, and user registration allowance.
+ * @param int $mode Mode of registration: 1 = Site Registration, 0 = Admin Registration, 2 = Custom Helper Method.
+ *
+ * @return int User ID on success.
+ *
+ * @throws \InvalidArgumentException If required credentials are missing.
+ * @throws \RuntimeException If the user update or creation fails.
+ * @throws NoUserIdFoundException If the user is not found.
+ *
+ * @since 5.0.3
+ */
+ public static function save(array $credentials, int $autologin = 0,
+ array $params = ['useractivation' => 0, 'sendpassword' => 1], int $mode = 1): int
+ {
+ // can not continue without an email
+ if (empty($credentials['email']))
+ {
+ throw new \InvalidArgumentException(Text::_('COM_COMPONENTBUILDER_CAN_NOT_SAVE_USER_WITHOUT_EMAIL_VALUE'));
+ }
+
+ // Ensure the 'username' key exists in the credentials array, set to an empty string if not provided.
+ $username = $credentials['username'] ?? $credentials['email'];
+
+ // If the user's ID is set and valid, handle the update logic.
+ if (!empty($credentials['id']) && $credentials['id'] > 0)
+ {
+ $userId = $credentials['id'];
+ $email = $credentials['email'];
+
+ // Fetch existing user by email and username.
+ $existingEmailUserId = static::getUserIdByEmail($email);
+ $existingUsernameId = static::getUserIdByUsername($username);
+
+ // Validate that we aren't attempting to update other users or reuse another user's email/username.
+ if (
+ ($existingEmailUserId && $existingEmailUserId != $userId) ||
+ ($existingUsernameId && $existingUsernameId != $userId) ||
+ ($existingEmailUserId && $existingUsernameId && $existingEmailUserId != $existingUsernameId)
+ ) {
+ throw new NoUserIdFoundException(
+ Text::sprintf(
+ 'User ID mismatch detected when trying to save %s (%s) credentials.',
+ $username,
+ $email
+ )
+ );
+ }
+
+ // Update the existing user.
+ return static::update($credentials);
+ }
+
+ // Create a new user if no existing user is found.
+ return static::create($credentials, $autologin, $params, $mode);
+ }
+
+ /**
+ * Create a user and update the given table.
+ *
+ * @param array $credentials User credentials including 'name', 'username', 'email', 'password', and 'password2'.
+ * @param int $autologin Flag to determine whether to auto-login the user after registration.
+ * @param array $params Parameters for user activation, password sending, and user registration allowance.
+ * @param int $mode Mode of registration: 1 = Site Registration, 0 = Admin Registration, 2 = Custom Helper Method.
+ *
+ * @return int User ID on success.
+ *
+ * @throws \RuntimeException If user creation fails.
+ * @throws NoUserIdFoundException If the user is not found.
+ *
+ * @since 5.0.3
+ */
+ public static function create(array $credentials, int $autologin = 0,
+ array $params = ['useractivation' => 0, 'sendpassword' => 1], int $mode = 1): int
+ {
+ $lang = Factory::getLanguage();
+ $lang->load('com_users', JPATH_SITE, 'en-GB', true);
+
+ // Handle custom registration mode
+ if ($mode === 2 && method_exists(ComponentbuilderHelper::class, 'registerUser'))
+ {
+ $params['autologin'] = $autologin;
+ $userId = ComponentbuilderHelper::registerUser($credentials, $params);
+
+ if (is_numeric($userId))
+ {
+ return $userId;
+ }
+
+ throw new NoUserIdFoundException(Text::_('COM_COMPONENTBUILDER_USER_CREATION_FAILED'));
+ }
+
+ // Check if we have params/config
+ if (ArrayHelper::check($params))
+ {
+ // Make changes to user config
+ foreach ($params as $param => $set)
+ {
+ // If you know of a better path, let me know
+ $params[$param] = Component::setParams($param, $set, 'com_users');
+ }
+ }
+
+ // Fallback to Site Registrations if mode is set to 2 but the method doesn't exist
+ $mode = $mode === 2 ? 1 : $mode;
+
+ // Load the appropriate user model
+ $model = static::getModelByMode($mode);
+
+ // Set default values for missing credentials
+ $credentials['username'] = $credentials['username'] ?? $credentials['email'];
+
+ // Prepare user data
+ $data = static::prepareUserData($credentials, $mode);
+
+ // Set form path (bug fix for Joomla)
+ static::setFormPathForUserClass($mode);
+
+ // Handle user creation
+ $userId = $mode === 1 ? $model->register($data) : static::adminRegister($model, $data);
+
+ // Check if we have params
+ if (ArrayHelper::check($params))
+ {
+ // Change user params/config back
+ foreach ($params as $param => $set)
+ {
+ // If you know of a better path, let me know
+ Component::setParams($param, $set, 'com_users');
+ }
+ }
+
+ if (!$userId)
+ {
+ $current_user = Factory::getApplication()->getIdentity();
+
+ // only allow those with access to Users to ignore errors
+ if ($current_user->authorise('core.manage', 'com_users'))
+ {
+ $userId = static::getUserIdByUsername($credentials['username']);
+ }
+ }
+
+ if (is_numeric($userId) && $userId > 0)
+ {
+ // Handle post-registration processes
+ return static::handlePostRegistration($userId, $autologin, $credentials);
+ }
+
+ $error_messages = '';
+ if (method_exists($model, 'getError'))
+ {
+ $errors = $model->getError();
+ if (!empty($errors))
+ {
+ if (is_array($errors))
+ {
+ $error_messages = ' ' . implode(' ', $errors);
+ }
+ elseif (is_string($errors))
+ {
+ $error_messages = ' ' . $errors;
+ }
+ }
+ }
+
+ throw new NoUserIdFoundException(
+ Text::sprintf('COM_COMPONENTBUILDER_USER_S_S_CREATION_FAILEDS',
+ (string) $credentials['username'],
+ (string) $credentials['email'],
+ $error_messages
+ )
+ );
+ }
+
+ /**
+ * Update user details.
+ *
+ * @param array $userDetails Array containing user details to be updated.
+ *
+ * @return int Updated user ID on success.
+ *
+ * @throws \RuntimeException If user update fails.
+ *
+ * @since 5.0.3
+ */
+ public static function update(array $userDetails): int
+ {
+ $lang = Factory::getLanguage();
+ $lang->load('com_users', JPATH_ADMINISTRATOR, 'en-GB', true);
+
+ $model = Component::getModel('User', 'Administrator', 'com_users');
+
+ // Set default values for missing credentials
+ $userDetails['username'] = $userDetails['username'] ?? $userDetails['email'];
+
+ // Prepare user data for update
+ $data = [
+ 'id' => $userDetails['id'],
+ 'username' => $userDetails['username'],
+ 'name' => $userDetails['name'],
+ 'email' => $userDetails['email'],
+ 'password' => $userDetails['password'] ?? null,
+ 'password2' => $userDetails['password2'] ?? null,
+ 'block' => 0
+ ];
+
+ // set groups if found
+ if (isset($userDetails['groups']) && ArrayHelper::check($userDetails['groups']))
+ {
+ $data['groups'] = $userDetails['groups'];
+ }
+
+ // Update the user
+ if ($model->save($data))
+ {
+ return $userDetails['id'];
+ }
+
+ $error_messages = '';
+ if (method_exists($model, 'getError'))
+ {
+ $errors = $model->getError();
+ if (!empty($errors))
+ {
+ if (is_array($errors))
+ {
+ $error_messages = ' ' . implode(' ', $errors);
+ }
+ elseif (is_string($errors))
+ {
+ $error_messages = ' ' . $errors;
+ }
+ }
+ }
+
+ throw new \RuntimeException(
+ Text::sprintf('COM_COMPONENTBUILDER_UPDATE_OF_USER_S_S_FAILEDS',
+ (string) $userDetails['username'],
+ (string) $userDetails['email'],
+ (string) $error_messages
+ )
+ );
+ }
+
+ /**
+ * Method to get an instance of a user for the given id.
+ *
+ * @param int $id The id
+ *
+ * @return User
+ *
+ * @since 5.0.3
+ */
+ public static function getUserById(int $id): User
+ {
+ return new User($id);
+ }
+
+ /**
+ * Retrieve the user ID by username.
+ *
+ * @param string $username The username to check.
+ *
+ * @return int|null The user ID if the user exists, null otherwise.
+ *
+ * @since 5.0.3
+ */
+ public static function getUserIdByUsername(string $username): ?int
+ {
+ $userId = JoomlaUserHelper::getUserId($username);
+ return $userId ?: null;
+ }
+
+ /**
+ * Retrieve the user ID by email.
+ *
+ * @param string $email The email address to check.
+ *
+ * @return int|null The user ID if the user exists, null otherwise.
+ *
+ * @since 5.0.3
+ */
+ public static function getUserIdByEmail(string $email): ?int
+ {
+ // Initialise some variables
+ $db = Factory::getDbo();
+ $query = $db->getQuery(true)
+ ->select($db->quoteName('id'))
+ ->from($db->quoteName('#__users'))
+ ->where($db->quoteName('email') . ' = :email')
+ ->bind(':email', $email)
+ ->setLimit(1);
+ $db->setQuery($query);
+
+ $userId = $db->loadResult();
+ return $userId ?: null;
+ }
+
+ /**
+ * Load the correct user model based on the registration mode.
+ *
+ * @param int $mode The registration mode.
+ *
+ * @return BaseDatabaseModel The appropriate user model.
+ *
+ * @since 5.0.3
+ */
+ protected static function getModelByMode(int $mode): BaseDatabaseModel
+ {
+ if ($mode === 1)
+ {
+ return Component::getModel('Registration', 'Site', 'com_users');
+ }
+
+ return Component::getModel('User', 'Administrator', 'com_users');
+ }
+
+ /**
+ * Prepare user data array for registration or update.
+ *
+ * @param array $credentials User credentials.
+ * @param int $mode The registration mode.
+ *
+ * @return array The prepared user data array.
+ *
+ * @since 5.0.3
+ */
+ protected static function prepareUserData(array $credentials, int $mode)
+ {
+ $data = [
+ 'username' => $credentials['username'],
+ 'name' => $credentials['name'],
+ 'block' => 0
+ ];
+
+ if ($mode === 1)
+ {
+ $data['email1'] = $credentials['email'];
+ }
+ else
+ {
+ $data['email'] = $credentials['email'];
+ $data['registerDate'] = Factory::getDate()->toSql();
+ }
+
+ if ($mode === 1 && empty($credentials['password']))
+ {
+ $credentials['password'] = StringHelper::random(10);
+ $credentials['password2'] = $credentials['password'];
+ }
+
+ if (!empty($credentials['password']) && !empty($credentials['password2']))
+ {
+ $data['password1'] = $credentials['password'];
+ $data['password2'] = $credentials['password2'];
+ }
+
+ if ($mode === 0 && isset($credentials['groups']) && ArrayHelper::check($credentials['groups']))
+ {
+ $data['groups'] = $credentials['groups'];
+ }
+
+ return $data;
+ }
+
+ /**
+ * Handle the registration process for admin mode.
+ *
+ * @param BaseDatabaseModel $model The user model.
+ * @param array $data The user data.
+ *
+ * @return int The ID of the created user.
+ *
+ * @since 5.0.3
+ */
+ private static function adminRegister(BaseDatabaseModel $model, array $data): int
+ {
+ $model->save($data);
+
+ return $model->getState('user.id', 0);
+ }
+
+ /**
+ * Handle post-registration processes like auto-login.
+ *
+ * @param int $userId The ID of the created user.
+ * @param int $autologin Flag to determine whether to auto-login the user.
+ * @param array $credentials The user credentials.
+ *
+ * @return int The user ID on success.
+ *
+ * @since 5.0.3
+ */
+ private static function handlePostRegistration(int $userId, int $autologin, array $credentials): int
+ {
+ // make sure user is it the correct groups
+ if ($userId > 0 && !empty($credentials['groups']))
+ {
+ try
+ {
+ JoomlaUserHelper::setUserGroups($userId, $credentials['groups']);
+ }
+ catch (\Exception $e)
+ {
+ // we might need say something
+ }
+ }
+
+ if ($autologin && !empty($credentials['password']))
+ {
+ try
+ {
+ Factory::getApplication()->login($credentials);
+ }
+ catch (\Exception $e)
+ {
+ // we might need to redirect here?
+ }
+ }
+
+ return $userId;
+ }
+
+ /**
+ * Address bug on \Joomla\CMS\MVC\Model\FormBehaviorTrait Line 76
+ * The use of JPATH_COMPONENT cause it to load the
+ * active component forms and fields, which breaks the registration model.
+ *
+ * @param int $mode
+ *
+ * @since 5.0.3
+ */
+ private static function setFormPathForUserClass(int $mode): void
+ {
+ if ($mode == 1) // 1 = use of the Registration Model
+ {
+ // Get the form.
+ Form::addFormPath(JPATH_ROOT . '/components/com_users/forms');
+ }
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Data/Guid.php b/libraries/vendor_jcb/VDM.Joomla/src/Data/Guid.php
new file mode 100644
index 000000000..454fa4de4
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Data/Guid.php
@@ -0,0 +1,110 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Data;
+
+
+/**
+ * Globally Unique Identifier
+ *
+ * @since 5.0.2
+ */
+trait Guid
+{
+ /**
+ * Returns a GUIDv4 string.
+ *
+ * This function uses the best cryptographically secure method
+ * available on the platform with a fallback to an older, less secure version.
+ *
+ * @param string $key The key to check and modify values.
+ *
+ * @return string A GUIDv4 string.
+ *
+ * @since 5.0.2
+ */
+ public function getGuid(string $key): string
+ {
+ // Windows: Use com_create_guid if available
+ if (function_exists('com_create_guid'))
+ {
+ $guid = trim(\com_create_guid(), '{}');
+ return $this->checkGuid($guid, $key);
+ }
+
+ // Unix-based systems: Use openssl_random_pseudo_bytes if available
+ if (function_exists('random_bytes'))
+ {
+ try {
+ $data = random_bytes(16);
+ } catch (Exception $e) {
+ // Handle the error appropriately (logging, throwing, etc.)
+ return $this->fallbackGuid($key);
+ }
+
+ // Set the version to 0100 and the bits 6-7 to 10 as per RFC 4122
+ $data[6] = chr(ord($data[6]) & 0x0f | 0x40);
+ $data[8] = chr(ord($data[8]) & 0x3f | 0x80);
+
+ $guid = vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
+ return $this->checkGuid($guid, $key);
+ }
+
+ // Fallback to older methods if secure methods are not available
+ return $this->fallbackGuid($key);
+ }
+
+ /**
+ * Generates a fallback GUIDv4 using less secure methods.
+ *
+ * @param string $key The key to check and modify values.
+ *
+ * @return string A GUIDv4 string.
+ *
+ * @since 5.0.2
+ */
+ private function fallbackGuid(string $key): string
+ {
+ $charid = strtolower(md5(uniqid(random_int(0, PHP_INT_MAX), true)));
+ $guidv4 = sprintf(
+ '%s-%s-%s-%s-%s',
+ substr($charid, 0, 8),
+ substr($charid, 8, 4),
+ substr($charid, 12, 4),
+ substr($charid, 16, 4),
+ substr($charid, 20, 12)
+ );
+
+ return $this->checkGuid($guidv4, $key);
+ }
+
+ /**
+ * Checks if the GUID value is unique and does not already exist.
+ *
+ * @param string $guid The GUID value to check.
+ * @param string $key The key to check and modify values.
+ *
+ * @return string The unique GUID value.
+ *
+ * @since 5.0.2
+ */
+ private function checkGuid(string $guid, string $key): string
+ {
+ // Check that the GUID does not already exist
+ if ($this->items->table($this->getTable())->values([$guid], $key))
+ {
+ return $this->getGuid($key);
+ }
+
+ return $guid;
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Data/MultiSubform.php b/libraries/vendor_jcb/VDM.Joomla/src/Data/MultiSubform.php
index 24853e8b4..4b801654e 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Data/MultiSubform.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Data/MultiSubform.php
@@ -445,7 +445,10 @@ final class MultiSubform implements MultiSubformInterface
{
if ($this->validSetMap($map))
{
- return $this->setSubformData($subform[$key], $map, [$table => $subform]);
+ // will delete all existing linked items [IF EMPTY] :( not ideal, but real
+ $data = (empty($subform[$key]) || !is_array($subform[$key])) ? [] : $subform[$key];
+
+ return $this->setSubformData($data, $map, [$table => $subform]);
}
return false;
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Data/Subform.php b/libraries/vendor_jcb/VDM.Joomla/src/Data/Subform.php
index a005218c6..c15bed787 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Data/Subform.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Data/Subform.php
@@ -13,6 +13,8 @@ namespace VDM\Joomla\Data;
use VDM\Joomla\Interfaces\Data\ItemsInterface as Items;
+use VDM\Joomla\Data\Guid;
+use VDM\Joomla\Interfaces\Data\GuidInterface;
use VDM\Joomla\Interfaces\Data\SubformInterface;
@@ -21,10 +23,17 @@ use VDM\Joomla\Interfaces\Data\SubformInterface;
*
* @since 3.2.2
*/
-final class Subform implements SubformInterface
+final class Subform implements GuidInterface, SubformInterface
{
/**
- * The ItemsInterface Class.
+ * The Globally Unique Identifier.
+ *
+ * @since 5.0.2
+ */
+ use Guid;
+
+ /**
+ * The Items Class.
*
* @var Items
* @since 3.2.2
@@ -42,7 +51,7 @@ final class Subform implements SubformInterface
/**
* Constructor.
*
- * @param Items $items The ItemsInterface Class.
+ * @param Items $items The Items Class.
* @param string|null $table The table name.
*
* @since 3.2.2
@@ -77,16 +86,17 @@ final class Subform implements SubformInterface
* @param string $linkValue The value of the link key in child table.
* @param string $linkKey The link key on which the items where linked in the child table.
* @param string $field The parent field name of the subform in the parent view.
- * @param array $get The array get:set of the keys of each row in the subform.
+ * @param array $get The array SET of the keys of each row in the subform.
+ * @param bool $multi The switch to return a multiple set.
*
* @return array|null The subform
* @since 3.2.2
*/
- public function get(string $linkValue, string $linkKey, string $field, array $get): ?array
+ public function get(string $linkValue, string $linkKey, string $field, array $get, bool $multi = true): ?array
{
if (($items = $this->items->table($this->getTable())->get([$linkValue], $linkKey)) !== null)
{
- return $this->converter($items, $get, $field);
+ return $this->converter($items, $get, $field, $multi);
}
return null;
}
@@ -179,11 +189,12 @@ final class Subform implements SubformInterface
* @param array $items Array of objects or arrays to be filtered.
* @param array $keySet Array of keys to retain in each item.
* @param string $field The field prefix for the resulting associative array.
+ * @param bool $multi The switch to return a multiple set.
*
* @return array Array of filtered arrays set by association.
* @since 3.2.2
*/
- private function converter(array $items, array $keySet, string $field): array
+ private function converter(array $items, array $keySet, string $field, bool $multi): array
{
/**
* Filters keys for a single item and converts it to an array.
@@ -209,6 +220,10 @@ final class Subform implements SubformInterface
$result = [];
foreach ($items as $index => $item)
{
+ if (!$multi)
+ {
+ return $filterKeys($item, $keySet);
+ }
$filteredArray = $filterKeys($item, $keySet);
$result[$field . $index] = $filteredArray;
}
@@ -230,6 +245,11 @@ final class Subform implements SubformInterface
private function process($items, string $indexKey, string $linkKey, string $linkValue): array
{
$items = is_array($items) ? $items : [];
+ if ($items !== [] && !$this->isMultipleSets($items))
+ {
+ $items = [$items];
+ }
+
foreach ($items as &$item)
{
$value = $item[$indexKey] ?? '';
@@ -238,7 +258,7 @@ final class Subform implements SubformInterface
if (empty($value))
{
// set INDEX
- $item[$indexKey] = $this->setGuid($indexKey);
+ $item[$indexKey] = $this->getGuid($indexKey);
}
break;
case 'id':
@@ -259,67 +279,26 @@ final class Subform implements SubformInterface
}
/**
- * Returns a GUIDv4 string
+ * Function to determine if the array consists of multiple data sets (arrays of arrays).
*
- * Thanks to Dave Pearson (and other)
- * https://www.php.net/manual/en/function.com-create-guid.php#119168
- *
- * Uses the best cryptographically secure method
- * for all supported platforms with fallback to an older,
- * less secure version.
- *
- * @param string $key The key to check and modify values.
- * @param bool $trim
- *
- * @return string
- *
- * @since 3.0.9
+ * @param array $array The input array to be checked.
+ *
+ * @return bool True if the array contains only arrays (multiple data sets), false otherwise.
+ * @since 5.0.2
*/
- private function setGuid(string $key, bool $trim = true): string
+ private function isMultipleSets(array $array): bool
{
- // Windows
- if (function_exists('com_create_guid'))
+ foreach ($array as $element)
{
- if ($trim)
+ // As soon as we find a non-array element, return false
+ if (!is_array($element))
{
- return trim(\com_create_guid(), '{}');
+ return false;
}
- return \com_create_guid();
}
- // set the braces if needed
- $lbrace = $trim ? "" : chr(123); // "{"
- $rbrace = $trim ? "" : chr(125); // "}"
-
- // OSX/Linux
- if (function_exists('openssl_random_pseudo_bytes'))
- {
- $data = \openssl_random_pseudo_bytes(16);
- $data[6] = chr( ord($data[6]) & 0x0f | 0x40); // set version to 0100
- $data[8] = chr( ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
- return $lbrace . vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)) . $lbrace;
- }
-
- // Fallback (PHP 4.2+)
- mt_srand((double) microtime() * 10000);
- $charid = strtolower( md5( uniqid( rand(), true)));
- $hyphen = chr(45); // "-"
- $guidv4 = $lbrace.
- substr($charid, 0, 8). $hyphen.
- substr($charid, 8, 4). $hyphen.
- substr($charid, 12, 4). $hyphen.
- substr($charid, 16, 4). $hyphen.
- substr($charid, 20, 12).
- $rbrace;
-
- // check that it does not already exist (one in a billion chance ;)
- // but we do it any way...
- if ($this->items->table($this->getTable())->values([$guidv4], $key))
- {
- return $this->setGuid($key);
- }
-
- return $guidv4;
+ // If all elements are arrays, return true
+ return true;
}
}
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Data/UsersSubform.php b/libraries/vendor_jcb/VDM.Joomla/src/Data/UsersSubform.php
new file mode 100644
index 000000000..93cdd90cc
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Data/UsersSubform.php
@@ -0,0 +1,614 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Data;
+
+
+use Joomla\CMS\Factory;
+use Joomla\CMS\User\User;
+use VDM\Joomla\Interfaces\Data\ItemsInterface as Items;
+use VDM\Joomla\Data\Guid;
+use VDM\Joomla\Componentbuilder\Utilities\UserHelper;
+use VDM\Joomla\Componentbuilder\Utilities\Exception\NoUserIdFoundException;
+use VDM\Joomla\Utilities\Component\Helper as Component;
+use VDM\Joomla\Interfaces\Data\GuidInterface;
+use VDM\Joomla\Interfaces\Data\SubformInterface;
+
+
+/**
+ * CRUD the user data of any sub-form to another view (table)
+ *
+ * @since 5.0.2
+ */
+final class UsersSubform implements GuidInterface, SubformInterface
+{
+ /**
+ * The Globally Unique Identifier.
+ *
+ * @since 5.0.2
+ */
+ use Guid;
+
+ /**
+ * The Items Class.
+ *
+ * @var Items
+ * @since 3.2.2
+ */
+ protected Items $items;
+
+ /**
+ * Table Name
+ *
+ * @var string
+ * @since 3.2.1
+ */
+ protected string $table;
+
+ /**
+ * The user properties
+ *
+ * @var array
+ * @since 5.0.2
+ */
+ protected array $user;
+
+ /**
+ * The current active user
+ *
+ * @var User
+ * @since 5.0.2
+ */
+ protected User $identity;
+
+ /**
+ * The active users
+ *
+ * @var array
+ * @since 5.0.2
+ */
+ protected array $activeUsers = [];
+
+ /**
+ * Constructor.
+ *
+ * @param Items $items The items Class.
+ * @param string|null $table The table name.
+ *
+ * @since 3.2.2
+ */
+ public function __construct(Items $items, ?string $table = null)
+ {
+ $this->items = $items;
+ if ($table !== null)
+ {
+ $this->table = $table;
+ }
+
+ $this->identity = Factory::getApplication()->getIdentity();
+
+ // Retrieve the user properties
+ $this->initializeUserProperties();
+ }
+
+ /**
+ * Set the current active table
+ *
+ * @param string $table The table that should be active
+ *
+ * @return self
+ * @since 3.2.2
+ */
+ public function table(string $table): self
+ {
+ $this->table = $table;
+
+ return $this;
+ }
+
+ /**
+ * Get a subform items
+ *
+ * @param string $linkValue The value of the link key in child table.
+ * @param string $linkKey The link key on which the items where linked in the child table.
+ * @param string $field The parent field name of the subform in the parent view.
+ * @param array $get The array get:set of the keys of each row in the subform.
+ * @param bool $multi The switch to return a multiple set.
+ *
+ * @return array|null The subform
+ * @since 3.2.2
+ */
+ public function get(string $linkValue, string $linkKey, string $field, array $get, bool $multi = true): ?array
+ {
+ if (($items = $this->items->table($this->getTable())->get([$linkValue], $linkKey)) !== null)
+ {
+ return $this->converter(
+ $this->getUsersDetails($items),
+ $get,
+ $field,
+ $multi
+ );
+ }
+
+ return null;
+ }
+
+ /**
+ * Set a subform items
+ *
+ * @param mixed $items The list of items from the subform to set
+ * @param string $indexKey The index key on which the items should be observed as it relates to insert/update/delete.
+ * @param string $linkKey The link key on which the items where linked in the child table.
+ * @param string $linkValue The value of the link key in child table.
+ *
+ * @return bool
+ * @since 3.2.2
+ */
+ public function set(mixed $items, string $indexKey, string $linkKey, string $linkValue): bool
+ {
+ $items = $this->process($items, $indexKey, $linkKey, $linkValue);
+
+ $this->purge($items, $indexKey, $linkKey, $linkValue);
+
+ if (empty($items))
+ {
+ return true; // nothing to set (already purged)
+ }
+
+ return $this->items->table($this->getTable())->set(
+ $items, $indexKey
+ );
+ }
+
+ /**
+ * Get the current active table
+ *
+ * @return string
+ * @since 3.2.2
+ */
+ public function getTable(): string
+ {
+ return $this->table;
+ }
+
+ /**
+ * Initializes the user properties.
+ *
+ * @return void
+ * @since 5.0.2
+ */
+ private function initializeUserProperties(): void
+ {
+ $user = UserHelper::getUserById(0);
+
+ // Populate user properties array excluding the 'id'
+ foreach (get_object_vars($user) as $property => $value)
+ {
+ if ($property !== 'id')
+ {
+ $this->user[$property] = $property;
+ }
+ }
+ $this->user['password2'] = 'password2';
+ }
+
+ /**
+ * Purge all items no longer in subform
+ *
+ * @param array $items The list of items to set.
+ * @param string $indexKey The index key on which the items should be observed as it relates to insert/update/delete
+ * @param string $linkKey The link key on which the items where linked in the child table.
+ * @param string $linkValue The value of the link key in child table.
+ *
+ * @return void
+ * @since 3.2.2
+ */
+ private function purge(array $items, string $indexKey, string $linkKey, string $linkValue): void
+ {
+ // Get the current index values from the database
+ $currentIndexValues = $this->items->table($this->getTable())->values([$linkValue], $linkKey, $indexKey);
+
+ if ($currentIndexValues !== null)
+ {
+ // Check if the items array is empty
+ if (empty($items))
+ {
+ // Set activeIndexValues to an empty array if items is empty
+ $activeIndexValues = [];
+ }
+ else
+ {
+ // Extract the index values from the items array
+ $activeIndexValues = array_values(array_map(function($item) use ($indexKey) {
+ return $item[$indexKey] ?? null;
+ }, $items));
+ }
+
+ // Find the index values that are no longer in the items array
+ $inactiveIndexValues = array_diff($currentIndexValues, $activeIndexValues);
+
+ // Delete the inactive index values
+ if (!empty($inactiveIndexValues))
+ {
+ $this->items->table($this->getTable())->delete($inactiveIndexValues, $indexKey);
+
+ // $this->deleteUsers($inactiveIndexValues); (soon)
+ }
+ }
+ }
+
+ /**
+ * Get the users details found in the user table.
+ *
+ * @param array $items Array of objects or arrays to be filtered.
+ *
+ * @return array
+ * @since 5.0.2
+ */
+ private function getUsersDetails(array $items): array
+ {
+ foreach ($items as $index => &$item)
+ {
+ $item = (array) $item;
+ $this->getUserDetails($item);
+ }
+
+ return $items;
+ }
+
+ /**
+ * Get the user details found in the user table.
+ *
+ * @param array $item The user map array
+ *
+ * @return void
+ * @since 5.0.2
+ */
+ private function getUserDetails(array &$item): void
+ {
+ // Validate the user_id and ensure it is numeric and greater than 0
+ if (empty($item['user_id']) || !is_numeric($item['user_id']) || $item['user_id'] <= 0)
+ {
+ return;
+ }
+
+ // Retrieve the user by ID
+ $user = UserHelper::getUserById((int)$item['user_id']);
+
+ // Verify if the user exists and the ID matches
+ if ($user && $user->id === (int) $item['user_id'])
+ {
+ // Iterate over public properties of the user object
+ foreach (get_object_vars($user) as $property => $value)
+ {
+ // Avoid overwriting the id in the item
+ if ($property !== 'id')
+ {
+ $item[$property] = $value;
+ }
+ }
+ }
+ }
+
+ /**
+ * Filters the specified keys from an array of objects or arrays, converts them to arrays,
+ * and sets them by association with a specified key and an incrementing integer.
+ *
+ * @param array $items Array of objects or arrays to be filtered.
+ * @param array $keySet Array of keys to retain in each item.
+ * @param string $field The field prefix for the resulting associative array.
+ * @param bool $multi The switch to return a multiple set.
+ *
+ * @return array Array of filtered arrays set by association.
+ * @since 3.2.2
+ */
+ private function converter(array $items, array $keySet, string $field, bool $multi): array
+ {
+ /**
+ * Filters keys for a single item and converts it to an array.
+ *
+ * @param object|array $item The item to filter.
+ * @param array $keySet The keys to retain.
+ *
+ * @return array The filtered array.
+ * @since 3.2.2
+ */
+ $filterKeys = function ($item, array $keySet) {
+ $filteredArray = [];
+ foreach ($keySet as $key) {
+ if (is_object($item) && property_exists($item, $key)) {
+ $filteredArray[$key] = $item->{$key};
+ } elseif (is_array($item) && array_key_exists($key, $item)) {
+ $filteredArray[$key] = $item[$key];
+ }
+ }
+ return $filteredArray;
+ };
+
+ $result = [];
+ foreach ($items as $index => $item)
+ {
+ if (!$multi)
+ {
+ return $filterKeys($item, $keySet);
+ }
+ $filteredArray = $filterKeys($item, $keySet);
+ $result[$field . $index] = $filteredArray;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Processes an array of arrays based on the specified key.
+ *
+ * @param mixed $items Array of arrays to be processed.
+ * @param string $indexKey The index key on which the items should be observed as it relates to insert/update/delete
+ * @param string $linkKey The link key on which the items where linked in the child table.
+ * @param string $linkValue The value of the link key in child table.
+ *
+ * @return array The processed array of arrays.
+ * @since 3.2.2
+ */
+ private function process($items, string $indexKey, string $linkKey, string $linkValue): array
+ {
+ $items = is_array($items) ? $items : [];
+ if ($items !== [] && !$this->isMultipleSets($items))
+ {
+ $items = [$items];
+ }
+
+ foreach ($items as $n => &$item)
+ {
+ $value = $item[$indexKey] ?? '';
+ switch ($indexKey) {
+ case 'guid':
+ if (empty($value))
+ {
+ // set INDEX
+ $item[$indexKey] = $this->getGuid($indexKey);
+ }
+ break;
+ case 'id':
+ if (empty($value))
+ {
+ $item[$indexKey] = 0;
+ }
+ break;
+ default:
+ // No action for other keys if empty
+ break;
+ }
+
+ // set LINK
+ $item[$linkKey] = $linkValue;
+
+ // create/update user
+ $item['user_id'] = $this->setUserDetails(
+ $item,
+ $this->getActiveUsers(
+ $linkKey,
+ $linkValue
+ )
+ );
+
+ // remove empty row (means no user linked)
+ if ($item['user_id'] == 0)
+ {
+ unset($items[$n]);
+ }
+ }
+
+ return array_values($items);
+ }
+
+ /**
+ * Get current active Users Linked to this entity
+ *
+ * @param string $linkKey The link key on which the items where linked in the child table.
+ * @param string $linkValue The value of the link key in child table.
+ *
+ * @return array The IDs of all active users.
+ * @since 5.0.2
+ */
+ private function getActiveUsers(string $linkKey, string $linkValue): array
+ {
+ if (isset($this->activeUsers[$linkKey . $linkValue]))
+ {
+ return $this->activeUsers[$linkKey . $linkValue];
+ }
+
+ if (($users = $this->items->table($this->getTable())->values([$linkValue], $linkKey, 'user_id')) !== null)
+ {
+ $this->activeUsers[$linkKey . $linkValue] = $users;
+ return $users;
+ }
+
+ return [];
+ }
+
+ /**
+ * Handles setting user details and saving them.
+ *
+ * This function retrieves the user by ID, sets the user details,
+ * and adds appropriate user groups before saving the user.
+ *
+ * @param array $item The user details passed by reference.
+ * @param array $activeUsers The current active user linked to this entity.
+ *
+ * @return int The ID of the saved user, or 0 on failure.
+ * @since 5.0.2
+ */
+ private function setUserDetails(array &$item, array $activeUsers): int
+ {
+ $user = $this->loadUser($item, $activeUsers);
+ $details = $this->extractUserDetails($item, $user);
+
+ if ($this->identity->id != $user->id)
+ {
+ $this->assignUserGroups($details, $user, $item);
+ }
+
+ return $this->saveUserDetails($details, $details['id'] ?? 0);
+ }
+
+ /**
+ * Load the user based on the user ID from the item array.
+ *
+ * @param array $item The array containing user details.
+ * @param array $activeUsers The current active user linked to this entity.
+ *
+ * @return User|null The user object if found, null otherwise.
+ * @since 5.0.2
+ */
+ private function loadUser(array $item, array $activeUsers): ?User
+ {
+ if (!isset($item['user_id']) || !is_numeric($item['user_id']) || $item['user_id'] <= 0)
+ {
+ return null;
+ }
+
+ // only allow update to linked users
+ if (!in_array($item['user_id'], $activeUsers))
+ {
+ return null;
+ }
+
+ $user = UserHelper::getUserById((int) $item['user_id']);
+
+ if ($user && $user->id == $item['user_id'])
+ {
+ return $user;
+ }
+
+ return null;
+ }
+
+ /**
+ * Extract user details from the item array and prepare them for saving.
+ *
+ * @param array $item The array containing user details.
+ * @param User|null $user The user object if found, null otherwise.
+ *
+ * @return array The prepared user details array.
+ * @since 5.0.2
+ */
+ private function extractUserDetails(array &$item, ?User $user): array
+ {
+ $details = [];
+
+ if ($user !== null)
+ {
+ $details['id'] = (int) $item['user_id'];
+ }
+
+ foreach ($this->user as $property)
+ {
+ if (isset($item[$property]))
+ {
+ $details[$property] = $item[$property];
+ unset($item[$property]);
+ }
+ }
+
+ return $details;
+ }
+
+ /**
+ * Assigns user groups based on existing groups and entity type.
+ *
+ * @param array &$details The array to store user details including groups.
+ * @param User|null $user The user object if found, null otherwise.
+ * @param array $item The array containing additional user details.
+ *
+ * @return void
+ * @since 5.0.2
+ */
+ private function assignUserGroups(array &$details, ?User $user, array $item): void
+ {
+ $groups = $user !== null ? (array) $user->groups : [];
+
+ if (!empty($item['entity_type']))
+ {
+ $global_entity_groups = Component::getParams()->get($item['entity_type'] . '_groups', []);
+ foreach ($global_entity_groups as $group)
+ {
+ if (!in_array($group, $groups))
+ {
+ $groups[] = $group;
+ }
+ }
+ }
+
+ // Ensure $details['groups'] is an array if it exists, else default to an empty array
+ $detailsGroups = isset($details['groups']) ? (array) $details['groups'] : [];
+
+ // Merge the arrays and remove duplicates
+ $mergedGroups = array_unique(array_merge($detailsGroups, $groups));
+
+ // Only set $details['groups'] if the merged array is not empty
+ if (!empty($mergedGroups))
+ {
+ $details['groups'] = $mergedGroups;
+ }
+ else
+ {
+ unset($details['groups']);
+ }
+ }
+
+ /**
+ * Save the user details using UserHelper and handle exceptions.
+ *
+ * @param array $details The prepared user details array.
+ * @param int $userId The ID of the user being processed.
+ *
+ * @return int The ID of the saved user, or 0 on failure.
+ * @since 5.0.2
+ */
+ private function saveUserDetails(array $details, int $userId): int
+ {
+ try {
+ return UserHelper::save($details, 0, ['useractivation' => 0, 'sendpassword' => 1, 'allowUserRegistration' => 1]);
+ } catch (NoUserIdFoundException $e) {
+ Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
+ } catch (\Exception $e) {
+ Factory::getApplication()->enqueueMessage($e->getMessage(), 'warning');
+ return $userId;
+ }
+
+ return 0;
+ }
+
+ /**
+ * Function to determine if the array consists of multiple data sets (arrays of arrays).
+ *
+ * @param array $array The input array to be checked.
+ *
+ * @return bool True if the array contains only arrays (multiple data sets), false otherwise.
+ * @since 5.0.2
+ */
+ private function isMultipleSets(array $array): bool
+ {
+ foreach ($array as $element)
+ {
+ // As soon as we find a non-array element, return false
+ if (!is_array($element))
+ {
+ return false;
+ }
+ }
+
+ // If all elements are arrays, return true
+ return true;
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/GuidInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/GuidInterface.php
new file mode 100644
index 000000000..2e3fff51e
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/GuidInterface.php
@@ -0,0 +1,36 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Interfaces\Data;
+
+
+/**
+ * Globally Unique Identifier Interface
+ *
+ * @since 5.0.2
+ */
+interface GuidInterface
+{
+ /**
+ * Returns a GUIDv4 string.
+ *
+ * This function uses the best cryptographically secure method
+ * available on the platform with a fallback to an older, less secure version.
+ *
+ * @param string $key The key to check and modify values.
+ *
+ * @return string A GUIDv4 string.
+ *
+ * @since 5.0.2
+ */
+ public function getGuid(string $key): string;
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/SubformInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/SubformInterface.php
index f80eea652..5e1da6d53 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/SubformInterface.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/SubformInterface.php
@@ -36,11 +36,12 @@ interface SubformInterface
* @param string $linkKey The link key on which the items where linked in the child table.
* @param string $field The parent field name of the subform in the parent view.
* @param array $get The array SET of the keys of each row in the subform.
+ * @param bool $multi The switch to return a multiple set.
*
* @return array|null The subform
* @since 3.2.2
*/
- public function get(string $linkValue, string $linkKey, string $field, array $get): ?array;
+ public function get(string $linkValue, string $linkKey, string $field, array $get, bool $multi = true): ?array;
/**
* Set a subform items
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/ModelInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/ModelInterface.php
index bb02cfa77..f03282f6c 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/ModelInterface.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/ModelInterface.php
@@ -53,7 +53,7 @@ interface ModelInterface
* @return array|null
* @since 3.2.0
*/
- public function values(?array $items = null, string $field, ?string $table = null): ?array;
+ public function values(?array $items, string $field, ?string $table = null): ?array;
/**
* Model the values of an item
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Service/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Service/Data.php
index 7d305c11c..37326b7af 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Service/Data.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Service/Data.php
@@ -21,6 +21,7 @@ use VDM\Joomla\Data\Action\Delete;
use VDM\Joomla\Data\Item;
use VDM\Joomla\Data\Items;
use VDM\Joomla\Data\Subform;
+use VDM\Joomla\Data\UsersSubform;
use VDM\Joomla\Data\MultiSubform;
@@ -62,6 +63,9 @@ class Data implements ServiceProviderInterface
$container->alias(Subform::class, 'Data.Subform')
->share('Data.Subform', [$this, 'getSubform'], true);
+ $container->alias(UsersSubform::class, 'Data.UsersSubform')
+ ->share('Data.UsersSubform', [$this, 'getUsersSubform'], true);
+
$container->alias(MultiSubform::class, 'Data.MultiSubform')
->share('Data.MultiSubform', [$this, 'getMultiSubform'], true);
}
@@ -182,6 +186,21 @@ class Data implements ServiceProviderInterface
);
}
+ /**
+ * Get The Users Subform Class.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return UsersSubform
+ * @since 5.0.2
+ */
+ public function getUsersSubform(Container $container): UsersSubform
+ {
+ return new UsersSubform(
+ $container->get('Data.Items')
+ );
+ }
+
/**
* Get The MultiSubform Class.
*
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Utilities/Component/Helper.php b/libraries/vendor_jcb/VDM.Joomla/src/Utilities/Component/Helper.php
index 5660a4915..a5e897717 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Utilities/Component/Helper.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Utilities/Component/Helper.php
@@ -14,9 +14,11 @@ namespace VDM\Joomla\Utilities\Component;
use Joomla\CMS\Factory;
use Joomla\CMS\Component\ComponentHelper;
+use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\Input\Input;
use Joomla\Registry\Registry;
use VDM\Joomla\Utilities\String\NamespaceHelper;
+use VDM\Joomla\Utilities\StringHelper;
/**
@@ -50,6 +52,57 @@ abstract class Helper
*/
protected static array $params = [];
+ /**
+ * Sets a parameter value for the given target in the specified option's params.
+ * If no option is provided, it falls back to the default option.
+ *
+ * This method updates the parameters for a given extension in the database,
+ * only if the new value differs from the existing one.
+ *
+ * @param string $target The parameter name to be updated.
+ * @param mixed $value The value to set for the parameter.
+ * @param string|null $option The optional extension element name. Defaults to null, which will use the default option.
+ *
+ * @return mixed The previous value of the parameter before it was updated.
+ * @since 5.0.3
+ */
+ public static function setParams(string $target, $value, ?string $option = null)
+ {
+ // Ensure that an option is specified, defaulting to the system's option if not provided.
+ if (empty($option))
+ {
+ $option = static::getOption();
+ }
+
+ // Retrieve current parameters for the specified option.
+ $params = static::getParams($option);
+
+ // Get the current value of the target parameter.
+ $was = $params->get($target, null);
+
+ // Only proceed if the new value differs from the current value.
+ if ($was !== $value)
+ {
+ // Update the parameter value.
+ $params->set($target, $value);
+
+ // Obtain a database connection instance.
+ $db = Factory::getDBO();
+ $query = $db->getQuery(true);
+
+ // Build and execute the query to update the parameters in the database.
+ $query->update('#__extensions AS a')
+ ->set('a.params = ' . $db->quote((string) $params))
+ ->where('a.element = ' . $db->quote((string) $option));
+
+ $db->setQuery($query);
+ $db->execute();
+ }
+
+ // Return the previous value of the parameter.
+ return $was;
+ }
+
/**
* Gets the parameter object for the component
*
@@ -64,16 +117,16 @@ abstract class Helper
// check that we have an option
if (empty($option))
{
- $option = self::getOption();
+ $option = static::getOption();
}
// get global value
- if (!isset(self::$params[$option]) || !self::$params[$option] instanceof Registry)
+ if (!isset(static::$params[$option]) || !static::$params[$option] instanceof Registry)
{
- self::$params[$option] = ComponentHelper::getParams($option);
+ static::$params[$option] = ComponentHelper::getParams($option);
}
- return self::$params[$option];
+ return static::$params[$option];
}
/**
@@ -86,7 +139,7 @@ abstract class Helper
*/
public static function setOption(?string $option): void
{
- self::$option = $option;
+ static::$option = $option;
}
/**
@@ -99,13 +152,13 @@ abstract class Helper
*/
public static function getOption(?string $default = 'empty'): ?string
{
- if (empty(self::$option))
+ if (empty(static::$option))
{
// get the option from the url input
- self::$option = (new Input)->getString('option', null);
+ static::$option = (new Input)->getString('option', null);
}
- if (empty(self::$option))
+ if (empty(static::$option))
{
$app = Factory::getApplication();
@@ -113,16 +166,16 @@ abstract class Helper
if (method_exists($app, 'getInput'))
{
// get the option from the application
- self::$option = $app->getInput()->getCmd('option', $default);
+ static::$option = $app->getInput()->getCmd('option', $default);
}
else
{
// Use the default value if getInput method does not exist
- self::$option = $default;
+ static::$option = $default;
}
}
- return self::$option;
+ return static::$option;
}
/**
@@ -139,7 +192,7 @@ abstract class Helper
// check that we have an option
if (empty($option))
{
- $option = self::getOption();
+ $option = static::getOption();
}
// option with com_
if (is_string($option) && strpos($option, 'com_') === 0)
@@ -164,7 +217,7 @@ abstract class Helper
{
// check that we have an option
// and get the code name from it
- if (($code_name = self::getCode($option, null)) !== null)
+ if (($code_name = static::getCode($option, null)) !== null)
{
// we build the helper class name
$helper_name = '\\' . \ucfirst($code_name) . 'Helper';
@@ -176,7 +229,7 @@ abstract class Helper
}
// try loading namespace
- if (($namespace = self::getNamespace($option)) !== null)
+ if (($namespace = static::getNamespace($option)) !== null)
{
$name = \ucfirst($code_name) . 'Helper';
$namespace_helper = '\\' . $namespace . '\Administrator\Helper\\' . NamespaceHelper::safeSegment($name); // TODO target site or admin locations not just admin...
@@ -202,7 +255,7 @@ abstract class Helper
*/
public static function getNamespace(?string $option = null): ?string
{
- $manifest = self::getManifest($option);
+ $manifest = static::getManifest($option);
return $manifest->namespace ?? null;
}
@@ -220,13 +273,13 @@ abstract class Helper
public static function getManifest(?string $option = null): ?object
{
if ($option === null
- && ($option = self::getOption($option)) === null)
+ && ($option = static::getOption($option)) === null)
{
return null;
}
// get global manifest_cache values
- if (!isset(self::$manifest[$option]))
+ if (!isset(static::$manifest[$option]))
{
$db = Factory::getDbo();
$query = $db->getQuery(true);
@@ -240,14 +293,14 @@ abstract class Helper
try {
$manifest = $db->loadResult();
- self::$manifest[$option] = json_decode($manifest);
+ static::$manifest[$option] = json_decode($manifest);
} catch (\Exception $e) {
// Handle the database error appropriately.
- self::$manifest[$option] = null;
+ static::$manifest[$option] = null;
}
}
- return self::$manifest[$option];
+ return static::$manifest[$option];
}
/**
@@ -263,7 +316,7 @@ abstract class Helper
public static function methodExists(string $method, ?string $option = null): bool
{
// get the helper class
- return ($helper = self::get($option, null)) !== null &&
+ return ($helper = static::get($option, null)) !== null &&
method_exists($helper, $method);
}
@@ -280,7 +333,7 @@ abstract class Helper
public static function _(string $method, array $arguments = [], ?string $option = null)
{
// get the helper class
- if (($helper = self::get($option, null)) !== null &&
+ if (($helper = static::get($option, null)) !== null &&
method_exists($helper, $method))
{
// we know this is not ideal...
@@ -291,6 +344,77 @@ abstract class Helper
return null;
}
-
+
+ /**
+ * Returns a Model object based on the specified type, prefix, and configuration.
+ *
+ * @param string $type The model type to instantiate. Must not be empty.
+ * @param string $prefix Prefix for the model class name. Optional, defaults to 'Administrator'.
+ * @param string|null $option The component option. Optional, defaults to the component's option.
+ * @param array $config Configuration array for the model. Optional, defaults to an empty array.
+ *
+ * @return BaseDatabaseModel The instantiated model object.
+ *
+ * @throws \InvalidArgumentException If the $type parameter is empty.
+ * @throws \Exception For other errors that may occur during model creation.
+ *
+ * @since 5.0.3
+ */
+ public static function getModel(string $type, string $prefix = 'Administrator',
+ ?string $option = null, array $config = []): BaseDatabaseModel
+ {
+ // Ensure the $type parameter is not empty
+ if (empty($type))
+ {
+ throw new \InvalidArgumentException('The $type parameter cannot be empty when calling Component Helper getModel method.');
+ }
+
+ // Ensure the $option parameter is set, defaulting to the component's option if not provided
+ if (empty($option))
+ {
+ $option = static::getOption();
+ }
+
+ // Normalize the model type name if the first character is not uppercase
+ if (!ctype_upper($type[0]))
+ {
+ $type = StringHelper::safe($type, 'F');
+ }
+
+ // Normalize the prefix if it's not 'Site' or 'Administrator'
+ if ($prefix !== 'Site' && $prefix !== 'Administrator')
+ {
+ $prefix = static::getPrefixFromModelPath($prefix);
+ }
+
+ // Instantiate and return the model using the MVCFactory
+ return Factory::getApplication()
+ ->bootComponent($option)
+ ->getMVCFactory()
+ ->createModel($type, $prefix, $config);
+ }
+
+ /**
+ * Get the prefix from the model path
+ *
+ * @param string $path The model path
+ *
+ * @return string The prefix value
+ * @since 5.0.3
+ */
+ private static function getPrefixFromModelPath(string $path): string
+ {
+ // Check if $path starts with JPATH_ADMINISTRATOR path
+ if (str_starts_with($path, JPATH_ADMINISTRATOR . '/components/'))
+ {
+ return 'Administrator';
+ }
+ // Check if $path starts with JPATH_SITE path
+ elseif (str_starts_with($path, JPATH_SITE . '/components/'))
+ {
+ return 'Site';
+ }
+ return 'Administrator';
+ }
}
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Utilities/MimeHelper.php b/libraries/vendor_jcb/VDM.Joomla/src/Utilities/MimeHelper.php
new file mode 100644
index 000000000..8cc9d1ac9
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Utilities/MimeHelper.php
@@ -0,0 +1,1174 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Utilities;
+
+
+/**
+ * Mime Helper
+ *
+ * @since 3.0.11
+ */
+abstract class MimeHelper
+{
+ /**
+ * File Extensions to Mimetypes
+ * https://gist.github.com/Llewellynvdm/74be373357e131b8775a7582c3de508b
+ * http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
+ *
+ * @var array
+ * @since 5.0.3
+ */
+ protected static $fileExtensionToMimeType = [
+ '123' => 'application/vnd.lotus-1-2-3',
+ '3dml' => 'text/vnd.in3d.3dml',
+ '3ds' => 'image/x-3ds',
+ '3g2' => 'video/3gpp2',
+ '3gp' => 'video/3gpp',
+ '7z' => 'application/x-7z-compressed',
+ 'aab' => 'application/x-authorware-bin',
+ 'aac' => 'audio/x-aac',
+ 'aam' => 'application/x-authorware-map',
+ 'aas' => 'application/x-authorware-seg',
+ 'abw' => 'application/x-abiword',
+ 'ac' => 'application/pkix-attr-cert',
+ 'acc' => 'application/vnd.americandynamics.acc',
+ 'ace' => 'application/x-ace-compressed',
+ 'acu' => 'application/vnd.acucobol',
+ 'acutc' => 'application/vnd.acucorp',
+ 'adp' => 'audio/adpcm',
+ 'aep' => 'application/vnd.audiograph',
+ 'afm' => 'application/x-font-type1',
+ 'afp' => 'application/vnd.ibm.modcap',
+ 'ahead' => 'application/vnd.ahead.space',
+ 'ai' => 'application/postscript',
+ 'aif' => 'audio/x-aiff',
+ 'aifc' => 'audio/x-aiff',
+ 'aiff' => 'audio/x-aiff',
+ 'air' => 'application/vnd.adobe.air-application-installer-package+zip',
+ 'ait' => 'application/vnd.dvb.ait',
+ 'ami' => 'application/vnd.amiga.ami',
+ 'apk' => 'application/vnd.android.package-archive',
+ 'appcache' => 'text/cache-manifest',
+ 'application' => 'application/x-ms-application',
+ 'apr' => 'application/vnd.lotus-approach',
+ 'arc' => 'application/x-freearc',
+ 'asc' => 'application/pgp-signature',
+ 'asf' => 'video/x-ms-asf',
+ 'asm' => 'text/x-asm',
+ 'aso' => 'application/vnd.accpac.simply.aso',
+ 'asx' => 'video/x-ms-asf',
+ 'atc' => 'application/vnd.acucorp',
+ 'atom' => 'application/atom+xml',
+ 'atomcat' => 'application/atomcat+xml',
+ 'atomsvc' => 'application/atomsvc+xml',
+ 'atx' => 'application/vnd.antix.game-component',
+ 'au' => 'audio/basic',
+ 'avi' => 'video/x-msvideo',
+ 'avif' => 'image/avif',
+ 'aw' => 'application/applixware',
+ 'azf' => 'application/vnd.airzip.filesecure.azf',
+ 'azs' => 'application/vnd.airzip.filesecure.azs',
+ 'azw' => 'application/vnd.amazon.ebook',
+ 'bat' => 'application/x-msdownload',
+ 'bcpio' => 'application/x-bcpio',
+ 'bdf' => 'application/x-font-bdf',
+ 'bdm' => 'application/vnd.syncml.dm+wbxml',
+ 'bed' => 'application/vnd.realvnc.bed',
+ 'bh2' => 'application/vnd.fujitsu.oasysprs',
+ 'bin' => 'application/octet-stream',
+ 'blb' => 'application/x-blorb',
+ 'blorb' => 'application/x-blorb',
+ 'bmi' => 'application/vnd.bmi',
+ 'bmp' => 'image/bmp',
+ 'book' => 'application/vnd.framemaker',
+ 'box' => 'application/vnd.previewsystems.box',
+ 'boz' => 'application/x-bzip2',
+ 'bpk' => 'application/octet-stream',
+ 'btif' => 'image/prs.btif',
+ 'bz' => 'application/x-bzip',
+ 'bz2' => 'application/x-bzip2',
+ 'c' => 'text/x-c',
+ 'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
+ 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
+ 'c4d' => 'application/vnd.clonk.c4group',
+ 'c4f' => 'application/vnd.clonk.c4group',
+ 'c4g' => 'application/vnd.clonk.c4group',
+ 'c4p' => 'application/vnd.clonk.c4group',
+ 'c4u' => 'application/vnd.clonk.c4group',
+ 'cab' => 'application/vnd.ms-cab-compressed',
+ 'caf' => 'audio/x-caf',
+ 'cap' => 'application/vnd.tcpdump.pcap',
+ 'car' => 'application/vnd.curl.car',
+ 'cat' => 'application/vnd.ms-pki.seccat',
+ 'cb7' => 'application/x-cbr',
+ 'cba' => 'application/x-cbr',
+ 'cbr' => 'application/x-cbr',
+ 'cbt' => 'application/x-cbr',
+ 'cbz' => 'application/x-cbr',
+ 'cc' => 'text/x-c',
+ 'cct' => 'application/x-director',
+ 'ccxml' => 'application/ccxml+xml',
+ 'cdbcmsg' => 'application/vnd.contact.cmsg',
+ 'cdf' => 'application/x-netcdf',
+ 'cdkey' => 'application/vnd.mediastation.cdkey',
+ 'cdmia' => 'application/cdmi-capability',
+ 'cdmic' => 'application/cdmi-container',
+ 'cdmid' => 'application/cdmi-domain',
+ 'cdmio' => 'application/cdmi-object',
+ 'cdmiq' => 'application/cdmi-queue',
+ 'cdx' => 'chemical/x-cdx',
+ 'cdxml' => 'application/vnd.chemdraw+xml',
+ 'cdy' => 'application/vnd.cinderella',
+ 'cer' => 'application/pkix-cert',
+ 'cfs' => 'application/x-cfs-compressed',
+ 'cgm' => 'image/cgm',
+ 'chat' => 'application/x-chat',
+ 'chm' => 'application/vnd.ms-htmlhelp',
+ 'chrt' => 'application/vnd.kde.kchart',
+ 'cif' => 'chemical/x-cif',
+ 'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
+ 'cil' => 'application/vnd.ms-artgalry',
+ 'cla' => 'application/vnd.claymore',
+ 'class' => 'application/java-vm',
+ 'clkk' => 'application/vnd.crick.clicker.keyboard',
+ 'clkp' => 'application/vnd.crick.clicker.palette',
+ 'clkt' => 'application/vnd.crick.clicker.template',
+ 'clkw' => 'application/vnd.crick.clicker.wordbank',
+ 'clkx' => 'application/vnd.crick.clicker',
+ 'clp' => 'application/x-msclip',
+ 'cmc' => 'application/vnd.cosmocaller',
+ 'cmdf' => 'chemical/x-cmdf',
+ 'cml' => 'chemical/x-cml',
+ 'cmp' => 'application/vnd.yellowriver-custom-menu',
+ 'cmx' => 'image/x-cmx',
+ 'cod' => 'application/vnd.rim.cod',
+ 'com' => 'application/x-msdownload',
+ 'conf' => 'text/plain',
+ 'cpio' => 'application/x-cpio',
+ 'cpp' => 'text/x-c',
+ 'cpt' => 'application/mac-compactpro',
+ 'crd' => 'application/x-mscardfile',
+ 'crl' => 'application/pkix-crl',
+ 'crt' => 'application/x-x509-ca-cert',
+ 'cryptonote' => 'application/vnd.rig.cryptonote',
+ 'csh' => 'application/x-csh',
+ 'csml' => 'chemical/x-csml',
+ 'csp' => 'application/vnd.commonspace',
+ 'css' => 'text/css',
+ 'cst' => 'application/x-director',
+ 'csv' => 'text/csv',
+ 'cu' => 'application/cu-seeme',
+ 'curl' => 'text/vnd.curl',
+ 'cww' => 'application/prs.cww',
+ 'cxt' => 'application/x-director',
+ 'cxx' => 'text/x-c',
+ 'dae' => 'model/vnd.collada+xml',
+ 'daf' => 'application/vnd.mobius.daf',
+ 'dart' => 'application/vnd.dart',
+ 'dataless' => 'application/vnd.fdsn.seed',
+ 'davmount' => 'application/davmount+xml',
+ 'dbk' => 'application/docbook+xml',
+ 'dcr' => 'application/x-director',
+ 'dcurl' => 'text/vnd.curl.dcurl',
+ 'dd2' => 'application/vnd.oma.dd2+xml',
+ 'ddd' => 'application/vnd.fujixerox.ddd',
+ 'deb' => 'application/x-debian-package',
+ 'def' => 'text/plain',
+ 'deploy' => 'application/octet-stream',
+ 'der' => 'application/x-x509-ca-cert',
+ 'dfac' => 'application/vnd.dreamfactory',
+ 'dgc' => 'application/x-dgc-compressed',
+ 'dic' => 'text/x-c',
+ 'dir' => 'application/x-director',
+ 'dis' => 'application/vnd.mobius.dis',
+ 'dist' => 'application/octet-stream',
+ 'distz' => 'application/octet-stream',
+ 'djv' => 'image/vnd.djvu',
+ 'djvu' => 'image/vnd.djvu',
+ 'dll' => 'application/x-msdownload',
+ 'dmg' => 'application/x-apple-diskimage',
+ 'dmp' => 'application/vnd.tcpdump.pcap',
+ 'dms' => 'application/octet-stream',
+ 'dna' => 'application/vnd.dna',
+ 'doc' => 'application/msword',
+ 'docm' => 'application/vnd.ms-word.document.macroenabled.12',
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'dot' => 'application/msword',
+ 'dotm' => 'application/vnd.ms-word.template.macroenabled.12',
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+ 'dp' => 'application/vnd.osgi.dp',
+ 'dpg' => 'application/vnd.dpgraph',
+ 'dra' => 'audio/vnd.dra',
+ 'dsc' => 'text/prs.lines.tag',
+ 'dssc' => 'application/dssc+der',
+ 'dtb' => 'application/x-dtbook+xml',
+ 'dtd' => 'application/xml-dtd',
+ 'dts' => 'audio/vnd.dts',
+ 'dtshd' => 'audio/vnd.dts.hd',
+ 'dump' => 'application/octet-stream',
+ 'dvb' => 'video/vnd.dvb.file',
+ 'dvi' => 'application/x-dvi',
+ 'dwf' => 'model/vnd.dwf',
+ 'dwg' => 'image/vnd.dwg',
+ 'dxf' => 'image/vnd.dxf',
+ 'dxp' => 'application/vnd.spotfire.dxp',
+ 'dxr' => 'application/x-director',
+ 'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
+ 'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
+ 'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
+ 'ecma' => 'application/ecmascript',
+ 'edm' => 'application/vnd.novadigm.edm',
+ 'edx' => 'application/vnd.novadigm.edx',
+ 'efif' => 'application/vnd.picsel',
+ 'ei6' => 'application/vnd.pg.osasli',
+ 'elc' => 'application/octet-stream',
+ 'emf' => 'application/x-msmetafile',
+ 'eml' => 'message/rfc822',
+ 'emma' => 'application/emma+xml',
+ 'emz' => 'application/x-msmetafile',
+ 'eol' => 'audio/vnd.digital-winds',
+ 'eot' => 'application/vnd.ms-fontobject',
+ 'eps' => 'application/postscript',
+ 'epub' => 'application/epub+zip',
+ 'es3' => 'application/vnd.eszigno3+xml',
+ 'esa' => 'application/vnd.osgi.subsystem',
+ 'esf' => 'application/vnd.epson.esf',
+ 'et3' => 'application/vnd.eszigno3+xml',
+ 'etx' => 'text/x-setext',
+ 'eva' => 'application/x-eva',
+ 'evy' => 'application/x-envoy',
+ 'exe' => 'application/x-msdownload',
+ 'exi' => 'application/exi',
+ 'ext' => 'application/vnd.novadigm.ext',
+ 'ez' => 'application/andrew-inset',
+ 'ez2' => 'application/vnd.ezpix-album',
+ 'ez3' => 'application/vnd.ezpix-package',
+ 'f' => 'text/x-fortran',
+ 'f4v' => 'video/x-f4v',
+ 'f77' => 'text/x-fortran',
+ 'f90' => 'text/x-fortran',
+ 'fbs' => 'image/vnd.fastbidsheet',
+ 'fcdt' => 'application/vnd.adobe.formscentral.fcdt',
+ 'fcs' => 'application/vnd.isac.fcs',
+ 'fdf' => 'application/vnd.fdf',
+ 'fe_launch' => 'application/vnd.denovo.fcselayout-link',
+ 'fg5' => 'application/vnd.fujitsu.oasysgp',
+ 'fgd' => 'application/x-director',
+ 'fh' => 'image/x-freehand',
+ 'fh4' => 'image/x-freehand',
+ 'fh5' => 'image/x-freehand',
+ 'fh7' => 'image/x-freehand',
+ 'fhc' => 'image/x-freehand',
+ 'fig' => 'application/x-xfig',
+ 'flac' => 'audio/x-flac',
+ 'fli' => 'video/x-fli',
+ 'flo' => 'application/vnd.micrografx.flo',
+ 'flv' => 'video/x-flv',
+ 'flw' => 'application/vnd.kde.kivio',
+ 'flx' => 'text/vnd.fmi.flexstor',
+ 'fly' => 'text/vnd.fly',
+ 'fm' => 'application/vnd.framemaker',
+ 'fnc' => 'application/vnd.frogans.fnc',
+ 'for' => 'text/x-fortran',
+ 'fpx' => 'image/vnd.fpx',
+ 'frame' => 'application/vnd.framemaker',
+ 'fsc' => 'application/vnd.fsc.weblaunch',
+ 'fst' => 'image/vnd.fst',
+ 'ftc' => 'application/vnd.fluxtime.clip',
+ 'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
+ 'fvt' => 'video/vnd.fvt',
+ 'fxp' => 'application/vnd.adobe.fxp',
+ 'fxpl' => 'application/vnd.adobe.fxp',
+ 'fzs' => 'application/vnd.fuzzysheet',
+ 'g2w' => 'application/vnd.geoplan',
+ 'g3' => 'image/g3fax',
+ 'g3w' => 'application/vnd.geospace',
+ 'gac' => 'application/vnd.groove-account',
+ 'gam' => 'application/x-tads',
+ 'gbr' => 'application/rpki-ghostbusters',
+ 'gca' => 'application/x-gca-compressed',
+ 'gdl' => 'model/vnd.gdl',
+ 'geo' => 'application/vnd.dynageo',
+ 'gex' => 'application/vnd.geometry-explorer',
+ 'ggb' => 'application/vnd.geogebra.file',
+ 'ggs' => 'application/vnd.geogebra.slides',
+ 'ggt' => 'application/vnd.geogebra.tool',
+ 'ghf' => 'application/vnd.groove-help',
+ 'gif' => 'image/gif',
+ 'gim' => 'application/vnd.groove-identity-message',
+ 'gml' => 'application/gml+xml',
+ 'gmx' => 'application/vnd.gmx',
+ 'gnumeric' => 'application/x-gnumeric',
+ 'gph' => 'application/vnd.flographit',
+ 'gpx' => 'application/gpx+xml',
+ 'gqf' => 'application/vnd.grafeq',
+ 'gqs' => 'application/vnd.grafeq',
+ 'gram' => 'application/srgs',
+ 'gramps' => 'application/x-gramps-xml',
+ 'gre' => 'application/vnd.geometry-explorer',
+ 'grv' => 'application/vnd.groove-injector',
+ 'grxml' => 'application/srgs+xml',
+ 'gsf' => 'application/x-font-ghostscript',
+ 'gtar' => 'application/x-gtar',
+ 'gtm' => 'application/vnd.groove-tool-message',
+ 'gtw' => 'model/vnd.gtw',
+ 'gv' => 'text/vnd.graphviz',
+ 'gxf' => 'application/gxf',
+ 'gxt' => 'application/vnd.geonext',
+ 'h' => 'text/x-c',
+ 'h261' => 'video/h261',
+ 'h263' => 'video/h263',
+ 'h264' => 'video/h264',
+ 'hal' => 'application/vnd.hal+xml',
+ 'hbci' => 'application/vnd.hbci',
+ 'hdf' => 'application/x-hdf',
+ 'hh' => 'text/x-c',
+ 'hlp' => 'application/winhlp',
+ 'hpgl' => 'application/vnd.hp-hpgl',
+ 'hpid' => 'application/vnd.hp-hpid',
+ 'hps' => 'application/vnd.hp-hps',
+ 'hqx' => 'application/mac-binhex40',
+ 'htke' => 'application/vnd.kenameaapp',
+ 'htm' => 'text/html',
+ 'html' => 'text/html',
+ 'hvd' => 'application/vnd.yamaha.hv-dic',
+ 'hvp' => 'application/vnd.yamaha.hv-voice',
+ 'hvs' => 'application/vnd.yamaha.hv-script',
+ 'i2g' => 'application/vnd.intergeo',
+ 'icc' => 'application/vnd.iccprofile',
+ 'ice' => 'x-conference/x-cooltalk',
+ 'icm' => 'application/vnd.iccprofile',
+ 'ico' => 'image/x-icon',
+ 'ics' => 'text/calendar',
+ 'ief' => 'image/ief',
+ 'ifb' => 'text/calendar',
+ 'ifm' => 'application/vnd.shana.informed.formdata',
+ 'iges' => 'model/iges',
+ 'igl' => 'application/vnd.igloader',
+ 'igm' => 'application/vnd.insors.igm',
+ 'igs' => 'model/iges',
+ 'igx' => 'application/vnd.micrografx.igx',
+ 'iif' => 'application/vnd.shana.informed.interchange',
+ 'imp' => 'application/vnd.accpac.simply.imp',
+ 'ims' => 'application/vnd.ms-ims',
+ 'in' => 'text/plain',
+ 'ink' => 'application/inkml+xml',
+ 'inkml' => 'application/inkml+xml',
+ 'install' => 'application/x-install-instructions',
+ 'iota' => 'application/vnd.astraea-software.iota',
+ 'ipfix' => 'application/ipfix',
+ 'ipk' => 'application/vnd.shana.informed.package',
+ 'irm' => 'application/vnd.ibm.rights-management',
+ 'irp' => 'application/vnd.irepository.package+xml',
+ 'iso' => 'application/x-iso9660-image',
+ 'itp' => 'application/vnd.shana.informed.formtemplate',
+ 'ivp' => 'application/vnd.immervision-ivp',
+ 'ivu' => 'application/vnd.immervision-ivu',
+ 'jad' => 'text/vnd.sun.j2me.app-descriptor',
+ 'jam' => 'application/vnd.jam',
+ 'jar' => 'application/java-archive',
+ 'java' => 'text/x-java-source',
+ 'jisp' => 'application/vnd.jisp',
+ 'jlt' => 'application/vnd.hp-jlyt',
+ 'jnlp' => 'application/x-java-jnlp-file',
+ 'joda' => 'application/vnd.joost.joda-archive',
+ 'jpe' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'jpg' => 'image/jpeg',
+ 'jpgm' => 'video/jpm',
+ 'jpgv' => 'video/jpeg',
+ 'jpm' => 'video/jpm',
+ 'js' => 'text/javascript',
+ 'json' => 'application/json',
+ 'jsonml' => 'application/jsonml+json',
+ 'jxl' => 'image/jxl',
+ 'kar' => 'audio/midi',
+ 'karbon' => 'application/vnd.kde.karbon',
+ 'kfo' => 'application/vnd.kde.kformula',
+ 'kia' => 'application/vnd.kidspiration',
+ 'kml' => 'application/vnd.google-earth.kml+xml',
+ 'kmz' => 'application/vnd.google-earth.kmz',
+ 'kne' => 'application/vnd.kinar',
+ 'knp' => 'application/vnd.kinar',
+ 'kon' => 'application/vnd.kde.kontour',
+ 'kpr' => 'application/vnd.kde.kpresenter',
+ 'kpt' => 'application/vnd.kde.kpresenter',
+ 'kpxx' => 'application/vnd.ds-keypoint',
+ 'ksp' => 'application/vnd.kde.kspread',
+ 'ktr' => 'application/vnd.kahootz',
+ 'ktx' => 'image/ktx',
+ 'ktz' => 'application/vnd.kahootz',
+ 'kwd' => 'application/vnd.kde.kword',
+ 'kwt' => 'application/vnd.kde.kword',
+ 'lasxml' => 'application/vnd.las.las+xml',
+ 'latex' => 'application/x-latex',
+ 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
+ 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
+ 'les' => 'application/vnd.hhe.lesson-player',
+ 'lha' => 'application/x-lzh-compressed',
+ 'link66' => 'application/vnd.route66.link66+xml',
+ 'list' => 'text/plain',
+ 'list3820' => 'application/vnd.ibm.modcap',
+ 'listafp' => 'application/vnd.ibm.modcap',
+ 'lnk' => 'application/x-ms-shortcut',
+ 'log' => 'text/plain',
+ 'lostxml' => 'application/lost+xml',
+ 'lrf' => 'application/octet-stream',
+ 'lrm' => 'application/vnd.ms-lrm',
+ 'ltf' => 'application/vnd.frogans.ltf',
+ 'lvp' => 'audio/vnd.lucent.voice',
+ 'lwp' => 'application/vnd.lotus-wordpro',
+ 'lzh' => 'application/x-lzh-compressed',
+ 'm13' => 'application/x-msmediaview',
+ 'm14' => 'application/x-msmediaview',
+ 'm1v' => 'video/mpeg',
+ 'm21' => 'application/mp21',
+ 'm2a' => 'audio/mpeg',
+ 'm2t' => 'video/mp2t',
+ 'm2ts' => 'video/mp2t',
+ 'm2v' => 'video/mpeg',
+ 'm3a' => 'audio/mpeg',
+ 'm3u' => 'audio/x-mpegurl',
+ 'm3u8' => 'application/vnd.apple.mpegurl',
+ 'm4a' => 'audio/mp4',
+ 'm4u' => 'video/vnd.mpegurl',
+ 'm4v' => 'video/x-m4v',
+ 'ma' => 'application/mathematica',
+ 'mads' => 'application/mads+xml',
+ 'mag' => 'application/vnd.ecowin.chart',
+ 'maker' => 'application/vnd.framemaker',
+ 'man' => 'text/troff',
+ 'mar' => 'application/octet-stream',
+ 'mathml' => 'application/mathml+xml',
+ 'mb' => 'application/mathematica',
+ 'mbk' => 'application/vnd.mobius.mbk',
+ 'mbox' => 'application/mbox',
+ 'mc1' => 'application/vnd.medcalcdata',
+ 'mcd' => 'application/vnd.mcd',
+ 'mcurl' => 'text/vnd.curl.mcurl',
+ 'mdb' => 'application/x-msaccess',
+ 'mdi' => 'image/vnd.ms-modi',
+ 'me' => 'text/troff',
+ 'mesh' => 'model/mesh',
+ 'meta4' => 'application/metalink4+xml',
+ 'metalink' => 'application/metalink+xml',
+ 'mets' => 'application/mets+xml',
+ 'mfm' => 'application/vnd.mfmp',
+ 'mft' => 'application/rpki-manifest',
+ 'mgp' => 'application/vnd.osgeo.mapguide.package',
+ 'mgz' => 'application/vnd.proteus.magazine',
+ 'mid' => 'audio/midi',
+ 'midi' => 'audio/midi',
+ 'mie' => 'application/x-mie',
+ 'mif' => 'application/vnd.mif',
+ 'mime' => 'message/rfc822',
+ 'mj2' => 'video/mj2',
+ 'mjp2' => 'video/mj2',
+ 'mjs' => 'text/javascript',
+ 'mk3d' => 'video/x-matroska',
+ 'mka' => 'audio/x-matroska',
+ 'mks' => 'video/x-matroska',
+ 'mkv' => 'video/x-matroska',
+ 'mlp' => 'application/vnd.dolby.mlp',
+ 'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
+ 'mmf' => 'application/vnd.smaf',
+ 'mmr' => 'image/vnd.fujixerox.edmics-mmr',
+ 'mng' => 'video/x-mng',
+ 'mny' => 'application/x-msmoney',
+ 'mobi' => 'application/x-mobipocket-ebook',
+ 'mods' => 'application/mods+xml',
+ 'mov' => 'video/quicktime',
+ 'movie' => 'video/x-sgi-movie',
+ 'mp2' => 'audio/mpeg',
+ 'mp21' => 'application/mp21',
+ 'mp2a' => 'audio/mpeg',
+ 'mp3' => 'audio/mpeg',
+ 'mp4' => 'video/mp4',
+ 'mp4a' => 'audio/mp4',
+ 'mp4s' => 'application/mp4',
+ 'mp4v' => 'video/mp4',
+ 'mpc' => 'application/vnd.mophun.certificate',
+ 'mpe' => 'video/mpeg',
+ 'mpeg' => 'video/mpeg',
+ 'mpg' => 'video/mpeg',
+ 'mpg4' => 'video/mp4',
+ 'mpga' => 'audio/mpeg',
+ 'mpkg' => 'application/vnd.apple.installer+xml',
+ 'mpm' => 'application/vnd.blueice.multipass',
+ 'mpn' => 'application/vnd.mophun.application',
+ 'mpp' => 'application/vnd.ms-project',
+ 'mpt' => 'application/vnd.ms-project',
+ 'mpy' => 'application/vnd.ibm.minipay',
+ 'mqy' => 'application/vnd.mobius.mqy',
+ 'mrc' => 'application/marc',
+ 'mrcx' => 'application/marcxml+xml',
+ 'ms' => 'text/troff',
+ 'mscml' => 'application/mediaservercontrol+xml',
+ 'mseed' => 'application/vnd.fdsn.mseed',
+ 'mseq' => 'application/vnd.mseq',
+ 'msf' => 'application/vnd.epson.msf',
+ 'msh' => 'model/mesh',
+ 'msi' => 'application/x-msdownload',
+ 'msl' => 'application/vnd.mobius.msl',
+ 'msty' => 'application/vnd.muvee.style',
+ 'mts' => 'video/mp2t',
+ 'mus' => 'application/vnd.musician',
+ 'musicxml' => 'application/vnd.recordare.musicxml+xml',
+ 'mvb' => 'application/x-msmediaview',
+ 'mwf' => 'application/vnd.mfer',
+ 'mxf' => 'application/mxf',
+ 'mxl' => 'application/vnd.recordare.musicxml',
+ 'mxml' => 'application/xv+xml',
+ 'mxs' => 'application/vnd.triscape.mxs',
+ 'mxu' => 'video/vnd.mpegurl',
+ 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
+ 'n3' => 'text/n3',
+ 'nb' => 'application/mathematica',
+ 'nbp' => 'application/vnd.wolfram.player',
+ 'nc' => 'application/x-netcdf',
+ 'ncx' => 'application/x-dtbncx+xml',
+ 'nfo' => 'text/x-nfo',
+ 'ngdat' => 'application/vnd.nokia.n-gage.data',
+ 'nitf' => 'application/vnd.nitf',
+ 'nlu' => 'application/vnd.neurolanguage.nlu',
+ 'nml' => 'application/vnd.enliven',
+ 'nnd' => 'application/vnd.noblenet-directory',
+ 'nns' => 'application/vnd.noblenet-sealer',
+ 'nnw' => 'application/vnd.noblenet-web',
+ 'npx' => 'image/vnd.net-fpx',
+ 'nsc' => 'application/x-conference',
+ 'nsf' => 'application/vnd.lotus-notes',
+ 'ntf' => 'application/vnd.nitf',
+ 'nzb' => 'application/x-nzb',
+ 'oa2' => 'application/vnd.fujitsu.oasys2',
+ 'oa3' => 'application/vnd.fujitsu.oasys3',
+ 'oas' => 'application/vnd.fujitsu.oasys',
+ 'obd' => 'application/x-msbinder',
+ 'obj' => 'application/x-tgif',
+ 'oda' => 'application/oda',
+ 'odb' => 'application/vnd.oasis.opendocument.database',
+ 'odc' => 'application/vnd.oasis.opendocument.chart',
+ 'odf' => 'application/vnd.oasis.opendocument.formula',
+ 'odft' => 'application/vnd.oasis.opendocument.formula-template',
+ 'odg' => 'application/vnd.oasis.opendocument.graphics',
+ 'odi' => 'application/vnd.oasis.opendocument.image',
+ 'odm' => 'application/vnd.oasis.opendocument.text-master',
+ 'odp' => 'application/vnd.oasis.opendocument.presentation',
+ 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
+ 'odt' => 'application/vnd.oasis.opendocument.text',
+ 'oga' => 'audio/ogg',
+ 'ogg' => 'audio/ogg',
+ 'ogv' => 'video/ogg',
+ 'ogx' => 'application/ogg',
+ 'omdoc' => 'application/omdoc+xml',
+ 'onepkg' => 'application/onenote',
+ 'onetmp' => 'application/onenote',
+ 'onetoc' => 'application/onenote',
+ 'onetoc2' => 'application/onenote',
+ 'opf' => 'application/oebps-package+xml',
+ 'opml' => 'text/x-opml',
+ 'oprc' => 'application/vnd.palm',
+ 'opus' => 'audio/ogg',
+ 'org' => 'application/vnd.lotus-organizer',
+ 'osf' => 'application/vnd.yamaha.openscoreformat',
+ 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
+ 'otc' => 'application/vnd.oasis.opendocument.chart-template',
+ 'otf' => 'font/otf',
+ 'otg' => 'application/vnd.oasis.opendocument.graphics-template',
+ 'oth' => 'application/vnd.oasis.opendocument.text-web',
+ 'oti' => 'application/vnd.oasis.opendocument.image-template',
+ 'otp' => 'application/vnd.oasis.opendocument.presentation-template',
+ 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
+ 'ott' => 'application/vnd.oasis.opendocument.text-template',
+ 'oxps' => 'application/oxps',
+ 'oxt' => 'application/vnd.openofficeorg.extension',
+ 'p' => 'text/x-pascal',
+ 'p10' => 'application/pkcs10',
+ 'p12' => 'application/x-pkcs12',
+ 'p7b' => 'application/x-pkcs7-certificates',
+ 'p7c' => 'application/pkcs7-mime',
+ 'p7m' => 'application/pkcs7-mime',
+ 'p7r' => 'application/x-pkcs7-certreqresp',
+ 'p7s' => 'application/pkcs7-signature',
+ 'p8' => 'application/pkcs8',
+ 'pas' => 'text/x-pascal',
+ 'paw' => 'application/vnd.pawaafile',
+ 'pbd' => 'application/vnd.powerbuilder6',
+ 'pbm' => 'image/x-portable-bitmap',
+ 'pcap' => 'application/vnd.tcpdump.pcap',
+ 'pcf' => 'application/x-font-pcf',
+ 'pcl' => 'application/vnd.hp-pcl',
+ 'pclxl' => 'application/vnd.hp-pclxl',
+ 'pct' => 'image/x-pict',
+ 'pcurl' => 'application/vnd.curl.pcurl',
+ 'pcx' => 'image/x-pcx',
+ 'pdb' => 'application/vnd.palm',
+ 'pdf' => 'application/pdf',
+ 'pfa' => 'application/x-font-type1',
+ 'pfb' => 'application/x-font-type1',
+ 'pfm' => 'application/x-font-type1',
+ 'pfr' => 'application/font-tdpfr',
+ 'pfx' => 'application/x-pkcs12',
+ 'pgm' => 'image/x-portable-graymap',
+ 'pgn' => 'application/x-chess-pgn',
+ 'pgp' => 'application/pgp-encrypted',
+ 'pic' => 'image/x-pict',
+ 'pkg' => 'application/octet-stream',
+ 'pki' => 'application/pkixcmp',
+ 'pkipath' => 'application/pkix-pkipath',
+ 'plb' => 'application/vnd.3gpp.pic-bw-large',
+ 'plc' => 'application/vnd.mobius.plc',
+ 'plf' => 'application/vnd.pocketlearn',
+ 'pls' => 'application/pls+xml',
+ 'pml' => 'application/vnd.ctc-posml',
+ 'png' => 'image/png',
+ 'pnm' => 'image/x-portable-anymap',
+ 'portpkg' => 'application/vnd.macports.portpkg',
+ 'pot' => 'application/vnd.ms-powerpoint',
+ 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12',
+ 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
+ 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12',
+ 'ppd' => 'application/vnd.cups-ppd',
+ 'ppm' => 'image/x-portable-pixmap',
+ 'pps' => 'application/vnd.ms-powerpoint',
+ 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+ 'ppt' => 'application/vnd.ms-powerpoint',
+ 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'pqa' => 'application/vnd.palm',
+ 'prc' => 'application/x-mobipocket-ebook',
+ 'pre' => 'application/vnd.lotus-freelance',
+ 'prf' => 'application/pics-rules',
+ 'ps' => 'application/postscript',
+ 'psb' => 'application/vnd.3gpp.pic-bw-small',
+ 'psd' => 'image/vnd.adobe.photoshop',
+ 'psf' => 'application/x-font-linux-psf',
+ 'pskcxml' => 'application/pskc+xml',
+ 'ptid' => 'application/vnd.pvi.ptid1',
+ 'pub' => 'application/x-mspublisher',
+ 'pvb' => 'application/vnd.3gpp.pic-bw-var',
+ 'pwn' => 'application/vnd.3m.post-it-notes',
+ 'pya' => 'audio/vnd.ms-playready.media.pya',
+ 'pyv' => 'video/vnd.ms-playready.media.pyv',
+ 'qam' => 'application/vnd.epson.quickanime',
+ 'qbo' => 'application/vnd.intu.qbo',
+ 'qfx' => 'application/vnd.intu.qfx',
+ 'qps' => 'application/vnd.publishare-delta-tree',
+ 'qt' => 'video/quicktime',
+ 'qwd' => 'application/vnd.quark.quarkxpress',
+ 'qwt' => 'application/vnd.quark.quarkxpress',
+ 'qxb' => 'application/vnd.quark.quarkxpress',
+ 'qxd' => 'application/vnd.quark.quarkxpress',
+ 'qxl' => 'application/vnd.quark.quarkxpress',
+ 'qxt' => 'application/vnd.quark.quarkxpress',
+ 'ra' => 'audio/x-pn-realaudio',
+ 'ram' => 'audio/x-pn-realaudio',
+ 'rar' => 'application/x-rar-compressed',
+ 'ras' => 'image/x-cmu-raster',
+ 'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
+ 'rdf' => 'application/rdf+xml',
+ 'rdz' => 'application/vnd.data-vision.rdz',
+ 'rep' => 'application/vnd.businessobjects',
+ 'res' => 'application/x-dtbresource+xml',
+ 'rgb' => 'image/x-rgb',
+ 'rif' => 'application/reginfo+xml',
+ 'rip' => 'audio/vnd.rip',
+ 'ris' => 'application/x-research-info-systems',
+ 'rl' => 'application/resource-lists+xml',
+ 'rlc' => 'image/vnd.fujixerox.edmics-rlc',
+ 'rld' => 'application/resource-lists-diff+xml',
+ 'rm' => 'application/vnd.rn-realmedia',
+ 'rmi' => 'audio/midi',
+ 'rmp' => 'audio/x-pn-realaudio-plugin',
+ 'rms' => 'application/vnd.jcp.javame.midlet-rms',
+ 'rmvb' => 'application/vnd.rn-realmedia-vbr',
+ 'rnc' => 'application/relax-ng-compact-syntax',
+ 'roa' => 'application/rpki-roa',
+ 'roff' => 'text/troff',
+ 'rp9' => 'application/vnd.cloanto.rp9',
+ 'rpss' => 'application/vnd.nokia.radio-presets',
+ 'rpst' => 'application/vnd.nokia.radio-preset',
+ 'rq' => 'application/sparql-query',
+ 'rs' => 'application/rls-services+xml',
+ 'rsd' => 'application/rsd+xml',
+ 'rss' => 'application/rss+xml',
+ 'rtf' => 'application/rtf',
+ 'rtx' => 'text/richtext',
+ 's' => 'text/x-asm',
+ 's3m' => 'audio/s3m',
+ 'saf' => 'application/vnd.yamaha.smaf-audio',
+ 'sbml' => 'application/sbml+xml',
+ 'sc' => 'application/vnd.ibm.secure-container',
+ 'scd' => 'application/x-msschedule',
+ 'scm' => 'application/vnd.lotus-screencam',
+ 'scq' => 'application/scvp-cv-request',
+ 'scs' => 'application/scvp-cv-response',
+ 'scurl' => 'text/vnd.curl.scurl',
+ 'sda' => 'application/vnd.stardivision.draw',
+ 'sdc' => 'application/vnd.stardivision.calc',
+ 'sdd' => 'application/vnd.stardivision.impress',
+ 'sdkd' => 'application/vnd.solent.sdkm+xml',
+ 'sdkm' => 'application/vnd.solent.sdkm+xml',
+ 'sdp' => 'application/sdp',
+ 'sdw' => 'application/vnd.stardivision.writer',
+ 'see' => 'application/vnd.seemail',
+ 'seed' => 'application/vnd.fdsn.seed',
+ 'sema' => 'application/vnd.sema',
+ 'semd' => 'application/vnd.semd',
+ 'semf' => 'application/vnd.semf',
+ 'ser' => 'application/java-serialized-object',
+ 'setpay' => 'application/set-payment-initiation',
+ 'setreg' => 'application/set-registration-initiation',
+ 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',
+ 'sfs' => 'application/vnd.spotfire.sfs',
+ 'sfv' => 'text/x-sfv',
+ 'sgi' => 'image/sgi',
+ 'sgl' => 'application/vnd.stardivision.writer-global',
+ 'sgm' => 'text/sgml',
+ 'sgml' => 'text/sgml',
+ 'sh' => 'application/x-sh',
+ 'shar' => 'application/x-shar',
+ 'shf' => 'application/shf+xml',
+ 'sid' => 'image/x-mrsid-image',
+ 'sig' => 'application/pgp-signature',
+ 'sil' => 'audio/silk',
+ 'silo' => 'model/mesh',
+ 'sis' => 'application/vnd.symbian.install',
+ 'sisx' => 'application/vnd.symbian.install',
+ 'sit' => 'application/x-stuffit',
+ 'sitx' => 'application/x-stuffitx',
+ 'skd' => 'application/vnd.koan',
+ 'skm' => 'application/vnd.koan',
+ 'skp' => 'application/vnd.koan',
+ 'skt' => 'application/vnd.koan',
+ 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',
+ 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
+ 'slt' => 'application/vnd.epson.salt',
+ 'sm' => 'application/vnd.stepmania.stepchart',
+ 'smf' => 'application/vnd.stardivision.math',
+ 'smi' => 'application/smil+xml',
+ 'smil' => 'application/smil+xml',
+ 'smv' => 'video/x-smv',
+ 'smzip' => 'application/vnd.stepmania.package',
+ 'snd' => 'audio/basic',
+ 'snf' => 'application/x-font-snf',
+ 'so' => 'application/octet-stream',
+ 'spc' => 'application/x-pkcs7-certificates',
+ 'spf' => 'application/vnd.yamaha.smaf-phrase',
+ 'spl' => 'application/x-futuresplash',
+ 'spot' => 'text/vnd.in3d.spot',
+ 'spp' => 'application/scvp-vp-response',
+ 'spq' => 'application/scvp-vp-request',
+ 'spx' => 'audio/ogg',
+ 'sql' => 'application/x-sql',
+ 'src' => 'application/x-wais-source',
+ 'srt' => 'application/x-subrip',
+ 'sru' => 'application/sru+xml',
+ 'srx' => 'application/sparql-results+xml',
+ 'ssdl' => 'application/ssdl+xml',
+ 'sse' => 'application/vnd.kodak-descriptor',
+ 'ssf' => 'application/vnd.epson.ssf',
+ 'ssml' => 'application/ssml+xml',
+ 'st' => 'application/vnd.sailingtracker.track',
+ 'stc' => 'application/vnd.sun.xml.calc.template',
+ 'std' => 'application/vnd.sun.xml.draw.template',
+ 'stf' => 'application/vnd.wt.stf',
+ 'sti' => 'application/vnd.sun.xml.impress.template',
+ 'stk' => 'application/hyperstudio',
+ 'stl' => 'application/vnd.ms-pki.stl',
+ 'str' => 'application/vnd.pg.format',
+ 'stw' => 'application/vnd.sun.xml.writer.template',
+ 'sub' => 'text/vnd.dvb.subtitle',
+ 'sus' => 'application/vnd.sus-calendar',
+ 'susp' => 'application/vnd.sus-calendar',
+ 'sv4cpio' => 'application/x-sv4cpio',
+ 'sv4crc' => 'application/x-sv4crc',
+ 'svc' => 'application/vnd.dvb.service',
+ 'svd' => 'application/vnd.svd',
+ 'svg' => 'image/svg+xml',
+ 'svgz' => 'image/svg+xml',
+ 'swa' => 'application/x-director',
+ 'swf' => 'application/x-shockwave-flash',
+ 'swi' => 'application/vnd.aristanetworks.swi',
+ 'sxc' => 'application/vnd.sun.xml.calc',
+ 'sxd' => 'application/vnd.sun.xml.draw',
+ 'sxg' => 'application/vnd.sun.xml.writer.global',
+ 'sxi' => 'application/vnd.sun.xml.impress',
+ 'sxm' => 'application/vnd.sun.xml.math',
+ 'sxw' => 'application/vnd.sun.xml.writer',
+ 't' => 'text/troff',
+ 't3' => 'application/x-t3vm-image',
+ 'taglet' => 'application/vnd.mynfc',
+ 'tao' => 'application/vnd.tao.intent-module-archive',
+ 'tar' => 'application/x-tar',
+ 'tcap' => 'application/vnd.3gpp2.tcap',
+ 'tcl' => 'application/x-tcl',
+ 'teacher' => 'application/vnd.smart.teacher',
+ 'tei' => 'application/tei+xml',
+ 'teicorpus' => 'application/tei+xml',
+ 'tex' => 'application/x-tex',
+ 'texi' => 'application/x-texinfo',
+ 'texinfo' => 'application/x-texinfo',
+ 'text' => 'text/plain',
+ 'tfi' => 'application/thraud+xml',
+ 'tfm' => 'application/x-tex-tfm',
+ 'tga' => 'image/x-tga',
+ 'thmx' => 'application/vnd.ms-officetheme',
+ 'tif' => 'image/tiff',
+ 'tiff' => 'image/tiff',
+ 'tmo' => 'application/vnd.tmobile-livetv',
+ 'torrent' => 'application/x-bittorrent',
+ 'tpl' => 'application/vnd.groove-tool-template',
+ 'tpt' => 'application/vnd.trid.tpt',
+ 'tr' => 'text/troff',
+ 'tra' => 'application/vnd.trueapp',
+ 'trm' => 'application/x-msterminal',
+ 'ts' => 'video/mp2t',
+ 'tsd' => 'application/timestamped-data',
+ 'tsv' => 'text/tab-separated-values',
+ 'ttc' => 'font/collection',
+ 'ttf' => 'font/ttf',
+ 'ttl' => 'text/turtle',
+ 'twd' => 'application/vnd.simtech-mindmapper',
+ 'twds' => 'application/vnd.simtech-mindmapper',
+ 'txd' => 'application/vnd.genomatix.tuxedo',
+ 'txf' => 'application/vnd.mobius.txf',
+ 'txt' => 'text/plain',
+ 'u32' => 'application/x-authorware-bin',
+ 'udeb' => 'application/x-debian-package',
+ 'ufd' => 'application/vnd.ufdl',
+ 'ufdl' => 'application/vnd.ufdl',
+ 'ulx' => 'application/x-glulx',
+ 'umj' => 'application/vnd.umajin',
+ 'unityweb' => 'application/vnd.unity',
+ 'uoml' => 'application/vnd.uoml+xml',
+ 'uri' => 'text/uri-list',
+ 'uris' => 'text/uri-list',
+ 'urls' => 'text/uri-list',
+ 'ustar' => 'application/x-ustar',
+ 'utz' => 'application/vnd.uiq.theme',
+ 'uu' => 'text/x-uuencode',
+ 'uva' => 'audio/vnd.dece.audio',
+ 'uvd' => 'application/vnd.dece.data',
+ 'uvf' => 'application/vnd.dece.data',
+ 'uvg' => 'image/vnd.dece.graphic',
+ 'uvh' => 'video/vnd.dece.hd',
+ 'uvi' => 'image/vnd.dece.graphic',
+ 'uvm' => 'video/vnd.dece.mobile',
+ 'uvp' => 'video/vnd.dece.pd',
+ 'uvs' => 'video/vnd.dece.sd',
+ 'uvt' => 'application/vnd.dece.ttml+xml',
+ 'uvu' => 'video/vnd.uvvu.mp4',
+ 'uvv' => 'video/vnd.dece.video',
+ 'uvva' => 'audio/vnd.dece.audio',
+ 'uvvd' => 'application/vnd.dece.data',
+ 'uvvf' => 'application/vnd.dece.data',
+ 'uvvg' => 'image/vnd.dece.graphic',
+ 'uvvh' => 'video/vnd.dece.hd',
+ 'uvvi' => 'image/vnd.dece.graphic',
+ 'uvvm' => 'video/vnd.dece.mobile',
+ 'uvvp' => 'video/vnd.dece.pd',
+ 'uvvs' => 'video/vnd.dece.sd',
+ 'uvvt' => 'application/vnd.dece.ttml+xml',
+ 'uvvu' => 'video/vnd.uvvu.mp4',
+ 'uvvv' => 'video/vnd.dece.video',
+ 'uvvx' => 'application/vnd.dece.unspecified',
+ 'uvvz' => 'application/vnd.dece.zip',
+ 'uvx' => 'application/vnd.dece.unspecified',
+ 'uvz' => 'application/vnd.dece.zip',
+ 'vcard' => 'text/vcard',
+ 'vcd' => 'application/x-cdlink',
+ 'vcf' => 'text/x-vcard',
+ 'vcg' => 'application/vnd.groove-vcard',
+ 'vcs' => 'text/x-vcalendar',
+ 'vcx' => 'application/vnd.vcx',
+ 'vis' => 'application/vnd.visionary',
+ 'viv' => 'video/vnd.vivo',
+ 'vob' => 'video/x-ms-vob',
+ 'vor' => 'application/vnd.stardivision.writer',
+ 'vox' => 'application/x-authorware-bin',
+ 'vrml' => 'model/vrml',
+ 'vsd' => 'application/vnd.visio',
+ 'vsf' => 'application/vnd.vsf',
+ 'vss' => 'application/vnd.visio',
+ 'vst' => 'application/vnd.visio',
+ 'vsw' => 'application/vnd.visio',
+ 'vtu' => 'model/vnd.vtu',
+ 'vxml' => 'application/voicexml+xml',
+ 'w3d' => 'application/x-director',
+ 'wad' => 'application/x-doom',
+ 'wasm' => 'application/wasm',
+ 'wav' => 'audio/x-wav',
+ 'wax' => 'audio/x-ms-wax',
+ 'wbmp' => 'image/vnd.wap.wbmp',
+ 'wbs' => 'application/vnd.criticaltools.wbs+xml',
+ 'wbxml' => 'application/vnd.wap.wbxml',
+ 'wcm' => 'application/vnd.ms-works',
+ 'wdb' => 'application/vnd.ms-works',
+ 'wdp' => 'image/vnd.ms-photo',
+ 'weba' => 'audio/webm',
+ 'webm' => 'video/webm',
+ 'webp' => 'image/webp',
+ 'wg' => 'application/vnd.pmi.widget',
+ 'wgt' => 'application/widget',
+ 'wks' => 'application/vnd.ms-works',
+ 'wm' => 'video/x-ms-wm',
+ 'wma' => 'audio/x-ms-wma',
+ 'wmd' => 'application/x-ms-wmd',
+ 'wmf' => 'application/x-msmetafile',
+ 'wml' => 'text/vnd.wap.wml',
+ 'wmlc' => 'application/vnd.wap.wmlc',
+ 'wmls' => 'text/vnd.wap.wmlscript',
+ 'wmlsc' => 'application/vnd.wap.wmlscriptc',
+ 'wmv' => 'video/x-ms-wmv',
+ 'wmx' => 'video/x-ms-wmx',
+ 'wmz' => 'application/x-msmetafile',
+ 'woff' => 'font/woff',
+ 'woff2' => 'font/woff2',
+ 'wpd' => 'application/vnd.wordperfect',
+ 'wpl' => 'application/vnd.ms-wpl',
+ 'wps' => 'application/vnd.ms-works',
+ 'wqd' => 'application/vnd.wqd',
+ 'wri' => 'application/x-mswrite',
+ 'wrl' => 'model/vrml',
+ 'wsdl' => 'application/wsdl+xml',
+ 'wspolicy' => 'application/wspolicy+xml',
+ 'wtb' => 'application/vnd.webturbo',
+ 'wvx' => 'video/x-ms-wvx',
+ 'x32' => 'application/x-authorware-bin',
+ 'x3d' => 'model/x3d+xml',
+ 'x3db' => 'model/x3d+binary',
+ 'x3dbz' => 'model/x3d+binary',
+ 'x3dv' => 'model/x3d+vrml',
+ 'x3dvz' => 'model/x3d+vrml',
+ 'x3dz' => 'model/x3d+xml',
+ 'xaml' => 'application/xaml+xml',
+ 'xap' => 'application/x-silverlight-app',
+ 'xar' => 'application/vnd.xara',
+ 'xbap' => 'application/x-ms-xbap',
+ 'xbd' => 'application/vnd.fujixerox.docuworks.binder',
+ 'xbm' => 'image/x-xbitmap',
+ 'xdf' => 'application/xcap-diff+xml',
+ 'xdm' => 'application/vnd.syncml.dm+xml',
+ 'xdp' => 'application/vnd.adobe.xdp+xml',
+ 'xdssc' => 'application/dssc+xml',
+ 'xdw' => 'application/vnd.fujixerox.docuworks',
+ 'xenc' => 'application/xenc+xml',
+ 'xer' => 'application/patch-ops-error+xml',
+ 'xfdf' => 'application/vnd.adobe.xfdf',
+ 'xfdl' => 'application/vnd.xfdl',
+ 'xht' => 'application/xhtml+xml',
+ 'xhtml' => 'application/xhtml+xml',
+ 'xhvml' => 'application/xv+xml',
+ 'xif' => 'image/vnd.xiff',
+ 'xla' => 'application/vnd.ms-excel',
+ 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12',
+ 'xlc' => 'application/vnd.ms-excel',
+ 'xlf' => 'application/x-xliff+xml',
+ 'xlm' => 'application/vnd.ms-excel',
+ 'xls' => 'application/vnd.ms-excel',
+ 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
+ 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12',
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'xlt' => 'application/vnd.ms-excel',
+ 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12',
+ 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
+ 'xlw' => 'application/vnd.ms-excel',
+ 'xm' => 'audio/xm',
+ 'xml' => 'application/xml',
+ 'xo' => 'application/vnd.olpc-sugar',
+ 'xop' => 'application/xop+xml',
+ 'xpi' => 'application/x-xpinstall',
+ 'xpl' => 'application/xproc+xml',
+ 'xpm' => 'image/x-xpixmap',
+ 'xpr' => 'application/vnd.is-xpr',
+ 'xps' => 'application/vnd.ms-xpsdocument',
+ 'xpw' => 'application/vnd.intercon.formnet',
+ 'xpx' => 'application/vnd.intercon.formnet',
+ 'xsl' => 'application/xml',
+ 'xslt' => 'application/xslt+xml',
+ 'xsm' => 'application/vnd.syncml+xml',
+ 'xspf' => 'application/xspf+xml',
+ 'xul' => 'application/vnd.mozilla.xul+xml',
+ 'xvm' => 'application/xv+xml',
+ 'xvml' => 'application/xv+xml',
+ 'xwd' => 'image/x-xwindowdump',
+ 'xyz' => 'chemical/x-xyz',
+ 'xz' => 'application/x-xz',
+ 'yang' => 'application/yang',
+ 'yin' => 'application/yin+xml',
+ 'z1' => 'application/x-zmachine',
+ 'z2' => 'application/x-zmachine',
+ 'z3' => 'application/x-zmachine',
+ 'z4' => 'application/x-zmachine',
+ 'z5' => 'application/x-zmachine',
+ 'z6' => 'application/x-zmachine',
+ 'z7' => 'application/x-zmachine',
+ 'z8' => 'application/x-zmachine',
+ 'zaz' => 'application/vnd.zzazz.deck+xml',
+ 'zip' => 'application/zip',
+ 'zir' => 'application/vnd.zul',
+ 'zirz' => 'application/vnd.zul',
+ 'zmm' => 'application/vnd.handheld-entertainment+xml'
+ ];
+
+ /**
+ * Get the file extensions
+ *
+ * @param string $target The targeted/filter option
+ * @param boolean $sorted The multidimensional grouping sort (only if targeted filter is used)
+ *
+ * @return array All the extensions (targeted & sorted)
+ * @since 5.0.3
+ */
+ public static function getFileExtensions($target = null, $sorted = false)
+ {
+ // we have some in-house grouping/filters :)
+ $filters = [
+ 'image' => array('image', 'font', 'model'),
+ 'document' => array('application', 'text', 'chemical', 'message'),
+ 'media' => array('video', 'audio'),
+ 'file' => array('image', 'application', 'text', 'video', 'audio'),
+ 'all' => array('application', 'text', 'chemical', 'message', 'image', 'font', 'model', 'video', 'audio', 'x-conference')
+ ];
+ // sould we filter
+ if ($target)
+ {
+ // the bucket to get extensions
+ $fileextensions = array();
+ // check if filter exist (if not return empty array)
+ if (isset($filters[$target]))
+ {
+ foreach (self::$fileExtensionToMimeType as $extension => $mimetype)
+ {
+ // get the key mime type
+ $mimearr = explode("/", $mimetype, 2);
+ // check if this file extension should be added
+ if (in_array($mimearr[0], $filters[$target]))
+ {
+ if ($sorted)
+ {
+ if (!isset($fileextensions[$mimearr[0]]))
+ {
+ $fileextensions[$mimearr[0]] = array();
+ }
+ $fileextensions[$mimearr[0]][$extension] = $extension;
+ }
+ else
+ {
+ $fileextensions[$extension] = $extension;
+ }
+ }
+ }
+ }
+ return $fileextensions;
+ }
+ // we just return all file extensions
+ return array_keys(self::$fileExtensionToMimeType);
+ }
+
+ /**
+ * Get the file extension from a full path OR file name.
+ *
+ * @param string $file The full file path or file name.
+ *
+ * @return string The file extension in lowercase or an empty string if none found.
+ * @since 5.0.3
+ */
+ public static function extension(string $file): string
+ {
+ // Ensure the input is a valid string and contains a file extension
+ if (strpos($file, '.') === false)
+ {
+ return '';
+ }
+
+ // Extract and return the extension from the path
+ return strtolower(pathinfo($file, PATHINFO_EXTENSION));
+ }
+
+ /**
+ * Get the mime type based on the full file path.
+ *
+ * @param string $file The full file path.
+ *
+ * @return string The mime type or 'application/octet-stream' if none found.
+ * @since 5.0.3
+ */
+ public static function mimeType(string $file): string
+ {
+ /**
+ * **DISCLAIMER**
+ * This will just match the file extension to the following
+ * array. It does not guarantee that the file is TRULY that
+ * of the extension that this function returns.
+ * https://gist.github.com/Llewellynvdm/74be373357e131b8775a7582c3de508b
+ */
+
+ // Ensure the file exists to avoid unnecessary processing
+ if (!is_file($file) || !is_readable($file))
+ {
+ return self::mimeTypeFilename($file);
+ }
+
+ // Use finfo to get MIME type based on file content if available
+ if (function_exists('finfo_open'))
+ {
+ $finfo = finfo_open(FILEINFO_MIME_TYPE);
+ $mimetype = finfo_file($finfo, $file);
+ finfo_close($finfo);
+
+ if ($mimetype)
+ {
+ return $mimetype;
+ }
+ }
+
+ // Fallback to mime_content_type() if available
+ if (function_exists('mime_content_type'))
+ {
+ $mimetype = mime_content_type($file);
+ if ($mimetype)
+ {
+ return $mimetype;
+ }
+ }
+
+ // Fallback to application/octet-stream as a generic binary stream type
+ return 'application/octet-stream';
+ }
+
+ /**
+ * Get the mime type based on the file extension from a file name.
+ *
+ * @param string $file The file name (without path).
+ *
+ * @return string The mime type or 'application/octet-stream' if none found.
+ * @since 5.0.3
+ */
+ protected static function mimeTypeFilename(string $file): string
+ {
+ // Get the extension
+ $extension = self::extension($file);
+
+ // Predefined MIME types by extension for quick lookup
+ if (!empty($extension) && isset(self::$fileExtensionToMimeType[$extension]))
+ {
+ return self::$fileExtensionToMimeType[$extension];
+ }
+
+ // Fallback to application/octet-stream if extension is unknown
+ return 'application/octet-stream';
+ }
+}
+
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Utilities/UploadHelper.php b/libraries/vendor_jcb/VDM.Joomla/src/Utilities/UploadHelper.php
new file mode 100644
index 000000000..eff041d9a
--- /dev/null
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Utilities/UploadHelper.php
@@ -0,0 +1,327 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Utilities;
+
+
+use Joomla\CMS\Factory;
+use Joomla\CMS\Language\Text;
+use Joomla\Filesystem\File;
+use Joomla\Filesystem\Folder;
+use Joomla\Filesystem\Path;
+use VDM\Joomla\Utilities\Component\Helper;
+use VDM\Joomla\Utilities\MimeHelper;
+use VDM\Joomla\Utilities\StringHelper;
+
+
+/**
+ * Upload Helper
+ *
+ * @since 3.0.11
+ */
+abstract class UploadHelper
+{
+ /**
+ * True to use streams
+ *
+ * @var bool
+ *
+ * @since 3.0.11
+ */
+ public static bool $useStreams = false;
+
+ /**
+ * Allow the upload of unsafe files
+ *
+ * @var bool
+ *
+ * @since 3.0.11
+ */
+ public static bool $allowUnsafe = false;
+
+ /**
+ * Options to InputFilter::isSafeFile
+ *
+ * @var array
+ *
+ * @since 3.0.11
+ */
+ public static array $safeFileOptions = [];
+
+ /**
+ * Set the error behavior
+ *
+ * @var bool
+ *
+ * @since 3.0.11
+ */
+ public static bool $enqueueError = true;
+
+ /**
+ * Legal Formats
+ *
+ * @var array
+ *
+ * @since 5.0.3
+ */
+ public static array $legalFormats = [];
+
+ /**
+ * Errors
+ *
+ * @var array
+ *
+ * @since 3.0.11
+ */
+ protected static array $errors = [];
+
+ /**
+ * Get file/files from a HTTP upload.
+ *
+ * @param string $field The input field name
+ * @param string $type The file type
+ * @param string|null $filter The filter to use when uploading the file
+ * @param string|null $path The path to the directory where the file must be placed
+ *
+ * @return array|null File details or false on failure.
+ * @since 3.0.11
+ */
+ public static function get(string $field, string $type, string $filter = null, string $path = null): ?array
+ {
+ // Get the uploaded file information.
+ $input = Factory::getApplication()->input;
+
+ // set the default filter
+ if (empty($filter))
+ {
+ $filter = 'array';
+ }
+ // if raw then also unsafe
+ // see: https://github.com/joomla/joomla-cms/blob/4.1-dev/administrator/components/com_installer/src/Model/InstallModel.php#L259
+ elseif ($filter === 'raw')
+ {
+ static::$allowUnsafe = true;
+ }
+
+ // check if we have a file destination name in the field name
+ $name = null;
+ if (strpos($field, ':') !== false)
+ {
+ list($field, $name) = explode(':', $field);
+ }
+
+ // See JInputFiles::get.
+ $userfile = $input->files->get($field, null, $filter);
+
+ // Make sure that file uploads are enabled in php.
+ if (!(bool) ini_get('file_uploads'))
+ {
+ static::setError(Text::_('COM_COMPONENTBUILDER_WARNING_UPLOAD_ERROR'));
+
+ return null;
+ }
+
+ // If there is no uploaded file, we have a problem...
+ if (!is_array($userfile))
+ {
+ static::setError(Text::_('COM_COMPONENTBUILDER_NO_UPLOAD_SELECTED'));
+
+ return null;
+ }
+
+ // Is the PHP tmp directory missing?
+ if ($userfile['error'] && ($userfile['error'] == UPLOAD_ERR_NO_TMP_DIR))
+ {
+ static::setError(Text::_('COM_COMPONENTBUILDER_THERE_WAS_AN_ERROR_UPLOADING_TO_THE_SERVER') . ' ' . Text::_('COM_COMPONENTBUILDER_THE_PHP_TEMPORARY_FOLDER_IS_NOT_SET'));
+
+ return null;
+ }
+
+ // Is the max upload size too small in php.ini?
+ if ($userfile['error'] && ($userfile['error'] == UPLOAD_ERR_INI_SIZE))
+ {
+ static::setError(Text::_('COM_COMPONENTBUILDER_THERE_WAS_AN_ERROR_UPLOADING_TO_THE_SERVER') . ' ' . Text::_('COM_COMPONENTBUILDER_YOUR_FILE_WAS_IS_LARGER_THAN_THE_ALLOWED_SIZE'));
+
+ return null;
+ }
+
+ // Check if there was a different problem uploading the file.
+ if ($userfile['error'] || $userfile['size'] < 1)
+ {
+ static::setError(Text::_('COM_COMPONENTBUILDER_THERE_WAS_AN_ERROR_UPLOADING_TO_THE_SERVER'));
+
+ return null;
+ }
+
+ // check if a path was passed and exist
+ if (is_string($path) && Folder::create($path))
+ {
+ // set the path
+ $userfile['path'] = $path;
+ }
+ else
+ {
+ // get the Joomla config class
+ $config = Factory::getConfig();
+ // set the path
+ $userfile['path'] = $config->get('tmp_path');
+ }
+
+ // set the random part of the name
+ $userfile['random'] = StringHelper::random(12);
+
+ // set the file name
+ if (empty($name))
+ {
+ // set the file name
+ $userfile['file_name'] = $userfile['random'] . $userfile['name'];
+ }
+ else
+ {
+ // check that his name has file format
+ if (is_string($name) && strpos($name, '.') === false)
+ {
+ $name = $name . '.' . MimeHelper::extension($userfile['name']);
+ }
+ $userfile['file_name'] = $name;
+ }
+
+ // set full path
+ $userfile['full_path'] = Path::clean($userfile['path'] . '/' . $userfile['file_name']);
+
+ // Upload the file.
+ if (File::upload($userfile['tmp_name'], $userfile['full_path'], static::$useStreams, static::$allowUnsafe))
+ {
+ // Check that this is a valid file
+ return static::check($userfile, $type);
+ }
+
+ return null;
+ }
+
+ /**
+ * Get the errors
+ *
+ * @param bool $toString The option to return errors as a string
+ *
+ * @return array|string
+ * @since 3.0.11
+ */
+ public static function getError($toString = false)
+ {
+ if ($toString)
+ {
+ return implode(' ' . PHP_EOL, static::$errors);
+ }
+ return static::$errors;
+ }
+
+ /**
+ * Check a file and verifies it as a allowed file format file
+ *
+ * @param array $upload The uploaded details array
+ * @param string $type The file type
+ *
+ * @return array|null of elements
+ *
+ */
+ protected static function check(array $upload, string $type): ?array
+ {
+ // Default extensions/formats
+ $extensions = MimeHelper::getFileExtensions($type);
+
+ // Clean the path
+ $upload_path = Path::clean($upload['full_path']);
+
+ // Get file extension/format
+ $extension = MimeHelper::extension($upload_path);
+ $mime = $upload['type'];
+
+ unset($upload['type']);
+
+ // set to check
+ $checking_mime = MimeHelper::mimeType($upload_path);
+
+ // Legal file formats
+ $legal = [];
+
+ // check if the file format is even in the list
+ if (in_array($extension, $extensions))
+ {
+ // get allowed formats
+ $legal_formats = (array) Helper::getParams()->get($type . '_formats', []);
+ $legal_extensions = array_values(array_unique(array_merge($legal_formats, static::$legalFormats)));
+ }
+
+ // check the extension
+ if (!in_array($extension, $legal_extensions))
+ {
+ // Cleanup the import file
+ static::remove($upload['full_path']);
+
+ static::setError(Text::_('COM_COMPONENTBUILDER_UPLOAD_IS_NOT_A_VALID_TYPE'));
+
+ return null;
+ }
+
+ if ($checking_mime === $mime)
+ {
+ $upload['mime'] = $mime; // TODO we should keep and eye on this.
+ }
+
+ $upload['extension'] = $extension;
+
+ return $upload;
+ }
+
+ /**
+ * Clean up temporary uploaded file
+ *
+ * @param string $fullPath The full path of the uploaded file
+ *
+ * @return boolean True on success
+ *
+ */
+ protected static function remove($fullPath)
+ {
+ // Is the package file a valid file?
+ if (is_file($fullPath))
+ {
+ File::delete($fullPath);
+ }
+ elseif (is_file(Path::clean($fullPath)))
+ {
+ // It might also be just a base filename
+ File::delete(Path::clean($fullPath));
+ }
+ }
+
+ /**
+ * Set the errors
+ *
+ * @param string $message The error message
+ *
+ * @return void
+ * @since 3.0.11
+ */
+ protected static function setError($message)
+ {
+ if (static::$enqueueError)
+ {
+ Factory::getApplication()->enqueueMessage($message, 'error');
+ }
+ else
+ {
+ static::$errors[] = $message;
+ }
+ }
+}
+